From 6b79a68e7620c2c345e28c2379192ac359ae6576 Mon Sep 17 00:00:00 2001 From: Jeff Bennett Date: Tue, 18 Feb 2025 18:39:00 -0500 Subject: [PATCH 1/3] checkpoint --- .../ProtocolFeeControllerMigration.json | 1 + .../index.ts | 19 +++ .../input.ts | 65 ++++++++ .../readme.md | 7 + .../test/task.fork.ts | 141 ++++++++++++++++++ 5 files changed, 233 insertions(+) create mode 100644 v3/scripts/20250221-protocol-fee-controller-migration/build-info/ProtocolFeeControllerMigration.json create mode 100644 v3/scripts/20250221-protocol-fee-controller-migration/index.ts create mode 100644 v3/scripts/20250221-protocol-fee-controller-migration/input.ts create mode 100644 v3/scripts/20250221-protocol-fee-controller-migration/readme.md create mode 100644 v3/scripts/20250221-protocol-fee-controller-migration/test/task.fork.ts diff --git a/v3/scripts/20250221-protocol-fee-controller-migration/build-info/ProtocolFeeControllerMigration.json b/v3/scripts/20250221-protocol-fee-controller-migration/build-info/ProtocolFeeControllerMigration.json new file mode 100644 index 00000000..c0632f82 --- /dev/null +++ b/v3/scripts/20250221-protocol-fee-controller-migration/build-info/ProtocolFeeControllerMigration.json @@ -0,0 +1 @@ +{"id":"1fcc72a06889eaf8e0e77f301d80b910","_format":"hh-sol-build-info-1","solcVersion":"0.8.27","solcLongVersion":"0.8.27+commit.40a35a09","input":{"language":"Solidity","sources":{"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthorizer } from \"../vault/IAuthorizer.sol\";\n\ninterface IBasicAuthorizer is IAuthorizer {\n // solhint-disable-next-line func-name-mixedcase\n function DEFAULT_ADMIN_ROLE() external view returns (bytes32);\n\n function grantRole(bytes32 role, address account) external;\n\n function revokeRole(bytes32 role, address account) external;\n\n function renounceRole(bytes32 role, address account) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Simple interface for permissioned calling of external functions.\ninterface IAuthentication {\n /// @notice The sender does not have permission to call a function.\n error SenderNotAllowed();\n\n /**\n * @notice Returns the action identifier associated with the external function described by `selector`.\n * @param selector The 4-byte selector of the permissioned function\n * @return actionId The computed actionId\n */\n function getActionId(bytes4 selector) external view returns (bytes32 actionId);\n}\n"},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice General interface for token exchange rates.\ninterface IRateProvider {\n /**\n * @notice An 18 decimal fixed point number representing the exchange rate of one token to another related token.\n * @dev The meaning of this rate depends on the context. Note that there may be an error associated with a token\n * rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface\n * does not take a rounding direction or return an error, so great care must be taken when interpreting and using\n * rates in downstream computations.\n *\n * @return rate The current token rate\n */\n function getRate() external view returns (uint256 rate);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Interface to the Vault's permission system.\ninterface IAuthorizer {\n /**\n * @notice Returns true if `account` can perform the action described by `actionId` in the contract `where`.\n * @param actionId Identifier for the action to be performed\n * @param account Account trying to perform the action\n * @param where Target contract for the action\n * @return success True if the action is permitted\n */\n function canPerform(bytes32 actionId, address account, address where) external view returns (bool success);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n// Explicitly import VaultTypes structs because we expect this interface to be heavily used by external developers.\n// Internally, when this list gets too long, we usually just do a simple import to keep things tidy.\nimport {\n TokenConfig,\n LiquidityManagement,\n PoolSwapParams,\n AfterSwapParams,\n HookFlags,\n AddLiquidityKind,\n RemoveLiquidityKind,\n SwapKind\n} from \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for pool hooks.\n * @dev Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that\n * they are called in the correct order, and with the correct arguments. To maintain this security, these functions\n * should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`,\n * then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)\n */\ninterface IHooks {\n /***************************************************************************\n Register\n ***************************************************************************/\n\n /**\n * @notice Hook executed when a pool is registered with a non-zero hooks contract.\n * @dev Returns true if registration was successful, and false to revert the pool registration.\n * Make sure this function is properly implemented (e.g. check the factory, and check that the\n * given pool is from the factory). The Vault address will be msg.sender.\n *\n * @param factory Address of the pool factory (contract deploying the pool)\n * @param pool Address of the pool\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param liquidityManagement Liquidity management flags indicating which functions are enabled\n * @return success True if the hook allowed the registration, false otherwise\n */\n function onRegister(\n address factory,\n address pool,\n TokenConfig[] memory tokenConfig,\n LiquidityManagement calldata liquidityManagement\n ) external returns (bool success);\n\n /**\n * @notice Return the set of hooks implemented by the contract.\n * @dev The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined\n * (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero).\n * `onRegister` is the only \"mandatory\" hook.\n *\n * @return hookFlags Flags indicating which hooks the contract supports\n */\n function getHookFlags() external view returns (HookFlags memory hookFlags);\n\n /***************************************************************************\n Initialize\n ***************************************************************************/\n\n /**\n * @notice Hook executed before pool initialization.\n * @dev Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param exactAmountsIn Exact amounts of input tokens\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with initialization\n */\n function onBeforeInitialize(uint256[] memory exactAmountsIn, bytes memory userData) external returns (bool success);\n\n /**\n * @notice Hook to be executed after pool initialization.\n * @dev Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param exactAmountsIn Exact amounts of input tokens\n * @param bptAmountOut Amount of pool tokens minted during initialization\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool accepts the initialization results\n */\n function onAfterInitialize(\n uint256[] memory exactAmountsIn,\n uint256 bptAmountOut,\n bytes memory userData\n ) external returns (bool success);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Hook to be executed before adding liquidity.\n * @dev Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param maxAmountsInScaled18 Maximum amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeAddLiquidity(\n address router,\n address pool,\n AddLiquidityKind kind,\n uint256[] memory maxAmountsInScaled18,\n uint256 minBptAmountOut,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success);\n\n /**\n * @notice Hook to be executed after adding liquidity.\n * @dev Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param amountsInScaled18 Actual amounts of tokens added, sorted in token registration order\n * @param amountsInRaw Actual amounts of tokens added, sorted in token registration order\n * @param bptAmountOut Amount of pool tokens minted\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Additional (optional) data provided by the user\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook\n */\n function onAfterAddLiquidity(\n address router,\n address pool,\n AddLiquidityKind kind,\n uint256[] memory amountsInScaled18,\n uint256[] memory amountsInRaw,\n uint256 bptAmountOut,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success, uint256[] memory hookAdjustedAmountsInRaw);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Hook to be executed before removing liquidity.\n * @dev Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The type of remove liquidity operation (e.g., proportional, custom)\n * @param maxBptAmountIn Maximum amount of input pool tokens\n * @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeRemoveLiquidity(\n address router,\n address pool,\n RemoveLiquidityKind kind,\n uint256 maxBptAmountIn,\n uint256[] memory minAmountsOutScaled18,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success);\n\n /**\n * @notice Hook to be executed after removing liquidity.\n * @dev Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The type of remove liquidity operation (e.g., proportional, custom)\n * @param bptAmountIn Amount of pool tokens to burn\n * @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n * @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Additional (optional) data provided by the user\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook\n */\n function onAfterRemoveLiquidity(\n address router,\n address pool,\n RemoveLiquidityKind kind,\n uint256 bptAmountIn,\n uint256[] memory amountsOutScaled18,\n uint256[] memory amountsOutRaw,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success, uint256[] memory hookAdjustedAmountsOutRaw);\n\n /***************************************************************************\n Swap\n ***************************************************************************/\n\n /**\n * @notice Called before a swap to give the Pool an opportunity to perform actions.\n * @dev Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see PoolSwapParams for struct definition)\n * @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeSwap(PoolSwapParams calldata params, address pool) external returns (bool success);\n\n /**\n * @notice Called after a swap to perform further actions once the balances have been updated by the swap.\n * @dev Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should\n * use the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see above for struct definition)\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook\n */\n function onAfterSwap(\n AfterSwapParams calldata params\n ) external returns (bool success, uint256 hookAdjustedAmountCalculatedRaw);\n\n /**\n * @notice Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\n * @dev Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see PoolSwapParams for struct definition)\n * @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n * @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage, for reference\n * @return success True if the pool wishes to proceed with settlement\n * @return dynamicSwapFeePercentage Value of the swap fee percentage, as an 18-decimal FP value\n */\n function onComputeDynamicSwapFeePercentage(\n PoolSwapParams calldata params,\n address pool,\n uint256 staticSwapFeePercentage\n ) external view returns (bool success, uint256 dynamicSwapFeePercentage);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IVault } from \"./IVault.sol\";\n\n/// @notice Contract that handles protocol and pool creator fees for the Vault.\ninterface IProtocolFeeController {\n /**\n * @notice Emitted when the protocol swap fee percentage is updated.\n * @param swapFeePercentage The updated protocol swap fee percentage\n */\n event GlobalProtocolSwapFeePercentageChanged(uint256 swapFeePercentage);\n\n /**\n * @notice Emitted when the protocol yield fee percentage is updated.\n * @param yieldFeePercentage The updated protocol yield fee percentage\n */\n event GlobalProtocolYieldFeePercentageChanged(uint256 yieldFeePercentage);\n\n /**\n * @notice Emitted when the protocol swap fee percentage is updated for a specific pool.\n * @param pool The pool whose protocol swap fee will be changed\n * @param swapFeePercentage The updated protocol swap fee percentage\n */\n event ProtocolSwapFeePercentageChanged(address indexed pool, uint256 swapFeePercentage);\n\n /**\n * @notice Emitted when the protocol yield fee percentage is updated for a specific pool.\n * @param pool The pool whose protocol yield fee will be changed\n * @param yieldFeePercentage The updated protocol yield fee percentage\n */\n event ProtocolYieldFeePercentageChanged(address indexed pool, uint256 yieldFeePercentage);\n\n /**\n * @notice Emitted when the pool creator swap fee percentage of a pool is updated.\n * @param pool The pool whose pool creator swap fee will be changed\n * @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage for the pool\n */\n event PoolCreatorSwapFeePercentageChanged(address indexed pool, uint256 poolCreatorSwapFeePercentage);\n\n /**\n * @notice Emitted when the pool creator yield fee percentage of a pool is updated.\n * @param pool The pool whose pool creator yield fee will be changed\n * @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage for the pool\n */\n event PoolCreatorYieldFeePercentageChanged(address indexed pool, uint256 poolCreatorYieldFeePercentage);\n\n /**\n * @notice Logs the collection of protocol swap fees in a specific token and amount.\n * @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n * in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass\n * multiple operations.\n *\n * @param pool The pool on which the swap fee was charged\n * @param token The token in which the swap fee was charged\n * @param amount The amount of the token collected in fees\n */\n event ProtocolSwapFeeCollected(address indexed pool, IERC20 indexed token, uint256 amount);\n\n /**\n * @notice Logs the collection of protocol yield fees in a specific token and amount.\n * @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n * in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass\n * multiple operations.\n *\n * @param pool The pool on which the yield fee was charged\n * @param token The token in which the yield fee was charged\n * @param amount The amount of the token collected in fees\n */\n event ProtocolYieldFeeCollected(address indexed pool, IERC20 indexed token, uint256 amount);\n\n /**\n * @notice Logs the withdrawal of protocol fees in a specific token and amount.\n * @param pool The pool from which protocol fees are being withdrawn\n * @param token The token being withdrawn\n * @param recipient The recipient of the funds\n * @param amount The amount of the fee token that was withdrawn\n */\n event ProtocolFeesWithdrawn(address indexed pool, IERC20 indexed token, address indexed recipient, uint256 amount);\n\n /**\n * @notice Logs the withdrawal of pool creator fees in a specific token and amount.\n * @param pool The pool from which pool creator fees are being withdrawn\n * @param token The token being withdrawn\n * @param recipient The recipient of the funds (the pool creator if permissionless, or another account)\n * @param amount The amount of the fee token that was withdrawn\n */\n event PoolCreatorFeesWithdrawn(\n address indexed pool,\n IERC20 indexed token,\n address indexed recipient,\n uint256 amount\n );\n\n /**\n * @notice Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\n * @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n * equal the current global swap fee percentage.\n *\n * @param pool The pool being registered\n * @param aggregateSwapFeePercentage The initial aggregate swap fee percentage\n * @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially\n */\n event InitialPoolAggregateSwapFeePercentage(\n address indexed pool,\n uint256 aggregateSwapFeePercentage,\n bool isProtocolFeeExempt\n );\n\n /**\n * @notice Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\n * @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n * equal the current global yield fee percentage.\n *\n * @param pool The pool being registered\n * @param aggregateYieldFeePercentage The initial aggregate yield fee percentage\n * @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially\n */\n event InitialPoolAggregateYieldFeePercentage(\n address indexed pool,\n uint256 aggregateYieldFeePercentage,\n bool isProtocolFeeExempt\n );\n\n /**\n * @notice Emitted for pools registered with creators.\n * @dev The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this\n * simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee\n * counterpart also include the protocol fee exemption flag, we might as well include it here as well.\n *\n * @param pool The address of the pool being registered\n * @param poolCreator The address of the pool creator (non-zero, or the event would not be emitted)\n * @param protocolFeeExempt True if the pool is initially exempt from protocol fees\n */\n event PoolWithCreatorRegistered(address indexed pool, address indexed poolCreator, bool protocolFeeExempt);\n\n /**\n * @notice Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\n * @dev Note that this is checked for both the global and pool-specific protocol swap fee percentages.\n */\n error ProtocolSwapFeePercentageTooHigh();\n\n /**\n * @notice Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\n * @dev Note that this is checked for both the global and pool-specific protocol yield fee percentages.\n */\n error ProtocolYieldFeePercentageTooHigh();\n\n /**\n * @notice Error raised if there is no pool creator on a withdrawal attempt from the given pool.\n * @param pool The pool with no creator\n */\n error PoolCreatorNotRegistered(address pool);\n\n /**\n * @notice Error raised if the wrong account attempts to withdraw pool creator fees.\n * @param caller The account attempting to withdraw pool creator fees\n * @param pool The pool the caller tried to withdraw from\n */\n error CallerIsNotPoolCreator(address caller, address pool);\n\n /// @notice Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\n error PoolCreatorFeePercentageTooHigh();\n\n /**\n * @notice Get the address of the main Vault contract.\n * @return vault The Vault address\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Collects aggregate fees from the Vault for a given pool.\n * @param pool The pool with aggregate fees\n */\n function collectAggregateFees(address pool) external;\n\n /**\n * @notice Getter for the current global protocol swap fee.\n * @return protocolSwapFeePercentage The global protocol swap fee percentage\n */\n function getGlobalProtocolSwapFeePercentage() external view returns (uint256 protocolSwapFeePercentage);\n\n /**\n * @notice Getter for the current global protocol yield fee.\n * @return protocolYieldFeePercentage The global protocol yield fee percentage\n */\n function getGlobalProtocolYieldFeePercentage() external view returns (uint256 protocolYieldFeePercentage);\n\n /**\n * @notice Getter for pool registration flag.\n * @param pool The address of the pool\n * @return isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\n */\n function isPoolRegistered(address pool) external view returns (bool);\n\n /**\n * @notice Getter for the current protocol swap fee for a given pool.\n * @param pool The address of the pool\n * @return protocolSwapFeePercentage The protocol swap fee percentage for the given pool\n * @return isOverride True if the protocol fee has been overridden\n */\n function getPoolProtocolSwapFeeInfo(\n address pool\n ) external view returns (uint256 protocolSwapFeePercentage, bool isOverride);\n\n /**\n * @notice Getter for the current protocol yield fee for a given pool.\n * @param pool The address of the pool\n * @return protocolYieldFeePercentage The protocol yield fee percentage for the given pool\n * @return isOverride True if the protocol fee has been overridden\n */\n function getPoolProtocolYieldFeeInfo(\n address pool\n ) external view returns (uint256 protocolYieldFeePercentage, bool isOverride);\n\n /**\n * @notice Getter for the current pool creator swap fee percentage for a given pool.\n * @param pool The address of the pool\n * @return poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\n */\n function getPoolCreatorSwapFeePercentage(address pool) external view returns (uint256);\n\n /**\n * @notice Getter for the current pool creator swap fee percentage for a given pool.\n * @param pool The address of the pool\n * @return poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\n */\n function getPoolCreatorYieldFeePercentage(address pool) external view returns (uint256);\n\n /**\n * @notice Returns the amount of each pool token allocated to the protocol for withdrawal.\n * @dev Includes both swap and yield fees.\n * @param pool The address of the pool on which fees were collected\n * @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order\n */\n function getProtocolFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts);\n\n /**\n * @notice Returns the amount of each pool token allocated to the pool creator for withdrawal.\n * @dev Includes both swap and yield fees.\n * @param pool The address of the pool on which fees were collected\n * @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order\n */\n function getPoolCreatorFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts);\n\n /**\n * @notice Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\n * @dev Not tied to any particular pool; this just performs the low-level \"additive fee\" calculation. Note that\n * pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are\n * stored in the Vault with 24-bit precision, this will truncate any values that require greater precision.\n * It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee\n * components, but the truncation ensures it will not revert for any valid set of fee percentages.\n *\n * See example below:\n *\n * tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60%\n * totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000\n * protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400\n * creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600\n * creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360\n * lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\n *\n * @param protocolFeePercentage The protocol portion of the aggregate fee percentage\n * @param poolCreatorFeePercentage The pool creator portion of the aggregate fee percentage\n * @return aggregateFeePercentage The computed aggregate percentage\n */\n function computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) external pure returns (uint256 aggregateFeePercentage);\n\n /**\n * @notice Override the protocol swap fee percentage for a specific pool.\n * @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n * from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n *\n * @param pool The pool for which we are setting the protocol swap fee\n */\n function updateProtocolSwapFeePercentage(address pool) external;\n\n /**\n * @notice Override the protocol yield fee percentage for a specific pool.\n * @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n * from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n *\n * @param pool The pool for which we are setting the protocol yield fee\n */\n function updateProtocolYieldFeePercentage(address pool) external;\n\n /***************************************************************************\n Permissioned Functions\n ***************************************************************************/\n\n /**\n * @notice Add pool-specific entries to the protocol swap and yield percentages.\n * @dev This must be called from the Vault during pool registration. It will initialize the pool to the global\n * protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate\n * fee percentages, based on an initial pool creator fee of 0.\n *\n * @param pool The address of the pool being registered\n * @param poolCreator The address of the pool creator (or 0 if there won't be a pool creator fee)\n * @param protocolFeeExempt If true, the pool is initially exempt from protocol fees\n * @return aggregateSwapFeePercentage The initial aggregate swap fee percentage\n * @return aggregateYieldFeePercentage The initial aggregate yield fee percentage\n */\n function registerPool(\n address pool,\n address poolCreator,\n bool protocolFeeExempt\n ) external returns (uint256 aggregateSwapFeePercentage, uint256 aggregateYieldFeePercentage);\n\n /**\n * @notice Set the global protocol swap fee percentage, used by standard pools.\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage\n */\n function setGlobalProtocolSwapFeePercentage(uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Set the global protocol yield fee percentage, used by standard pools.\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage\n */\n function setGlobalProtocolYieldFeePercentage(uint256 newProtocolYieldFeePercentage) external;\n\n /**\n * @notice Override the protocol swap fee percentage for a specific pool.\n * @param pool The address of the pool for which we are setting the protocol swap fee\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage for the pool\n */\n function setProtocolSwapFeePercentage(address pool, uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Override the protocol yield fee percentage for a specific pool.\n * @param pool The address of the pool for which we are setting the protocol yield fee\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage for the pool\n */\n function setProtocolYieldFeePercentage(address pool, uint256 newProtocolYieldFeePercentage) external;\n\n /**\n * @notice Assigns a new pool creator swap fee percentage to the specified pool.\n * @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n * the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n * pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n *\n * @param pool The address of the pool for which the pool creator fee will be changed\n * @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage to apply to the pool\n */\n function setPoolCreatorSwapFeePercentage(address pool, uint256 poolCreatorSwapFeePercentage) external;\n\n /**\n * @notice Assigns a new pool creator yield fee percentage to the specified pool.\n * @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n * the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n * pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n *\n * @param pool The address of the pool for which the pool creator fee will be changed\n * @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage to apply to the pool\n */\n function setPoolCreatorYieldFeePercentage(address pool, uint256 poolCreatorYieldFeePercentage) external;\n\n /**\n * @notice Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\n * @dev Sends swap and yield protocol fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n */\n function withdrawProtocolFees(address pool, address recipient) external;\n\n /**\n * @notice Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\n * @dev Sends swap and yield protocol fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n * @param token Token to withdraw\n */\n function withdrawProtocolFeesForToken(address pool, address recipient, IERC20 token) external;\n\n /**\n * @notice Withdraw collected pool creator fees for a given pool. This is a permissioned function.\n * @dev Sends swap and yield pool creator fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n */\n function withdrawPoolCreatorFees(address pool, address recipient) external;\n\n /**\n * @notice Withdraw collected pool creator fees for a given pool.\n * @dev Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable\n * value, this function is permissionless.\n *\n * @param pool The pool on which fees were collected\n */\n function withdrawPoolCreatorFees(address pool) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"../solidity-utils/helpers/IAuthentication.sol\";\nimport { IVaultExtension } from \"./IVaultExtension.sol\";\nimport { IVaultErrors } from \"./IVaultErrors.sol\";\nimport { IVaultEvents } from \"./IVaultEvents.sol\";\nimport { IVaultAdmin } from \"./IVaultAdmin.sol\";\nimport { IVaultMain } from \"./IVaultMain.sol\";\n\n/// @notice Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries.\ninterface IVault is IVaultMain, IVaultExtension, IVaultAdmin, IVaultErrors, IVaultEvents, IAuthentication {\n /// @return vault The main Vault address.\n function vault() external view override(IVaultAdmin, IVaultExtension) returns (IVault);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IVault } from \"./IVault.sol\";\n\n/**\n * @notice Interface for functions defined on the `VaultAdmin` contract.\n * @dev `VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations,\n * as two delegate calls add gas to each call. Most of the permissioned calls are here.\n */\ninterface IVaultAdmin {\n /*******************************************************************************\n Constants and immutables\n *******************************************************************************/\n\n /**\n * @notice Returns the main Vault address.\n * @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n * @return vault The address of the main Vault\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Returns the Vault's pause window end time.\n * @dev This value is immutable, and represents the timestamp after which the Vault can no longer be paused\n * by governance. Balancer timestamps are 32 bits.\n *\n * @return pauseWindowEndTime The timestamp when the Vault's pause window ends\n */\n function getPauseWindowEndTime() external view returns (uint32 pauseWindowEndTime);\n\n /**\n * @notice Returns the Vault's buffer period duration.\n * @dev This value is immutable. It represents the period during which, if paused, the Vault will remain paused.\n * This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer\n * timestamps are 32 bits.\n *\n * @return bufferPeriodDuration The length of the buffer period in seconds\n */\n function getBufferPeriodDuration() external view returns (uint32 bufferPeriodDuration);\n\n /**\n * @notice Returns the Vault's buffer period end time.\n * @dev This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer\n * timestamps are 32 bits.\n *\n * @return bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused\n */\n function getBufferPeriodEndTime() external view returns (uint32 bufferPeriodEndTime);\n\n /**\n * @notice Get the minimum number of tokens in a pool.\n * @dev We expect the vast majority of pools to be 2-token.\n * @return minTokens The minimum token count of a pool\n */\n function getMinimumPoolTokens() external pure returns (uint256 minTokens);\n\n /**\n * @notice Get the maximum number of tokens in a pool.\n * @return maxTokens The maximum token count of a pool\n */\n function getMaximumPoolTokens() external pure returns (uint256 maxTokens);\n\n /**\n * @notice Get the minimum total supply of pool tokens (BPT) for an initialized pool.\n * @dev This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT\n * is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\n *\n * @return poolMinimumTotalSupply The minimum total supply a pool can have after initialization\n */\n function getPoolMinimumTotalSupply() external pure returns (uint256 poolMinimumTotalSupply);\n\n /**\n * @notice Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\n * @dev This prevents buffers from being completely drained. When the buffer is initialized, this minimum number\n * of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal\n * to the Vault, as buffers are not tokenized.\n *\n * @return bufferMinimumTotalSupply The minimum total supply a buffer can have after initialization\n */\n function getBufferMinimumTotalSupply() external pure returns (uint256 bufferMinimumTotalSupply);\n\n /**\n * @notice Get the minimum trade amount in a pool operation.\n * @dev This limit is applied to the 18-decimal \"upscaled\" amount in any operation (swap, add/remove liquidity).\n * @return minimumTradeAmount The minimum trade amount as an 18-decimal floating point number\n */\n function getMinimumTradeAmount() external view returns (uint256 minimumTradeAmount);\n\n /**\n * @notice Get the minimum wrap amount in a buffer operation.\n * @dev This limit is applied to the wrap operation amount, in native underlying token decimals.\n * @return minimumWrapAmount The minimum wrap amount in native underlying token decimals\n */\n function getMinimumWrapAmount() external view returns (uint256 minimumWrapAmount);\n\n /*******************************************************************************\n Vault Pausing\n *******************************************************************************/\n\n /**\n * @notice Indicates whether the Vault is paused.\n * @dev If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that\n * ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not\n * also pause buffers (though we anticipate they would likely be paused and unpaused together). Call\n * `areBuffersPaused` to check the pause state of the buffers.\n *\n * @return vaultPaused True if the Vault is paused\n */\n function isVaultPaused() external view returns (bool vaultPaused);\n\n /**\n * @notice Returns the paused status, and end times of the Vault's pause window and buffer period.\n * @dev Balancer timestamps are 32 bits.\n * @return vaultPaused True if the Vault is paused\n * @return vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window\n * @return vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period\n */\n function getVaultPausedState()\n external\n view\n returns (bool vaultPaused, uint32 vaultPauseWindowEndTime, uint32 vaultBufferPeriodEndTime);\n\n /**\n * @notice Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\n * @dev This is a permissioned function that will only work during the Pause Window set during deployment.\n * Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing\n * the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers\n * are also paused (with `pauseVaultBuffers`).\n */\n function pauseVault() external;\n\n /**\n * @notice Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\n * @dev This is a permissioned function that will only work on a paused Vault within the Buffer Period set during\n * deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above,\n * ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse\n * `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\n */\n function unpauseVault() external;\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /**\n * @notice Pause the Pool: an emergency action which disables all pool functions.\n * @dev This is a permissioned function that will only work during the Pause Window set during pool factory\n * deployment.\n *\n * @param pool The pool being paused\n */\n function pausePool(address pool) external;\n\n /**\n * @notice Reverse a `pause` operation, and restore the Pool to normal functionality.\n * @dev This is a permissioned function that will only work on a paused Pool within the Buffer Period set during\n * deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\n *\n * @param pool The pool being unpaused\n */\n function unpausePool(address pool) external;\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Assigns a new static swap fee percentage to the specified pool.\n * @dev This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within\n * the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`.\n * Emits the SwapFeePercentageChanged event.\n *\n * @param pool The address of the pool for which the static swap fee will be changed\n * @param swapFeePercentage The new swap fee percentage to apply to the pool\n */\n function setStaticSwapFeePercentage(address pool, uint256 swapFeePercentage) external;\n\n /**\n * @notice Collects accumulated aggregate swap and yield fees for the specified pool.\n * @dev Fees are sent to the ProtocolFeeController address.\n * @param pool The pool on which all aggregate fees should be collected\n * @return swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n * @return yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order\n */\n function collectAggregateFees(\n address pool\n ) external returns (uint256[] memory swapFeeAmounts, uint256[] memory yieldFeeAmounts);\n\n /**\n * @notice Update an aggregate swap fee percentage.\n * @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n * for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n * fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n * that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n * Emits an `AggregateSwapFeePercentageChanged` event.\n *\n * @param pool The pool whose swap fee percentage will be updated\n * @param newAggregateSwapFeePercentage The new aggregate swap fee percentage\n */\n function updateAggregateSwapFeePercentage(address pool, uint256 newAggregateSwapFeePercentage) external;\n\n /**\n * @notice Update an aggregate yield fee percentage.\n * @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n * for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n * fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n * that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n * Emits an `AggregateYieldFeePercentageChanged` event.\n *\n * @param pool The pool whose yield fee percentage will be updated\n * @param newAggregateYieldFeePercentage The new aggregate yield fee percentage\n */\n function updateAggregateYieldFeePercentage(address pool, uint256 newAggregateYieldFeePercentage) external;\n\n /**\n * @notice Sets a new Protocol Fee Controller for the Vault.\n * @dev This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\n * @param newProtocolFeeController The address of the new Protocol Fee Controller\n */\n function setProtocolFeeController(IProtocolFeeController newProtocolFeeController) external;\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Enable recovery mode for a pool.\n * @dev This is a permissioned function. It enables a safe proportional withdrawal, with no external calls.\n * Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so\n * must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live\n * balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\n *\n * @param pool The address of the pool\n */\n function enableRecoveryMode(address pool) external;\n\n /**\n * @notice Disable recovery mode for a pool.\n * @dev This is a permissioned function. It re-syncs live balances (which could not be updated during\n * Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could\n * potentially fail if there is an issue with any associated Rate Providers.\n *\n * @param pool The address of the pool\n */\n function disableRecoveryMode(address pool) external;\n\n /*******************************************************************************\n Query Functionality\n *******************************************************************************/\n\n /**\n * @notice Disables query functionality on the Vault. Can only be called by governance.\n * @dev The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from\n * settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable\n * queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).\n * This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether\n * disabling queries is completely necessary; queries can still be re-enabled after this call.\n */\n function disableQuery() external;\n\n /**\n * @notice Disables query functionality permanently on the Vault. Can only be called by governance.\n * @dev Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\n */\n function disableQueryPermanently() external;\n\n /**\n * @notice Enables query functionality on the Vault. Can only be called by governance.\n * @dev Only works if queries are not permanently disabled.\n */\n function enableQuery() external;\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Indicates whether the Vault buffers are paused.\n * @dev When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true)\n * will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and\n * independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they\n * would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\n *\n * @return buffersPaused True if the Vault buffers are paused\n */\n function areBuffersPaused() external view returns (bool buffersPaused);\n\n /**\n * @notice Pauses native vault buffers globally.\n * @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n * `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not\n * possible to pause vault buffers individually.\n *\n * This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate\n * and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting\n * buffers, and vice versa.\n */\n function pauseVaultBuffers() external;\n\n /**\n * @notice Unpauses native vault buffers globally.\n * @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n * `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above,\n * ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`.\n * If the Vault was also paused, it will remain in that state until explicitly unpaused.\n *\n * This is a permissioned call.\n */\n function unpauseVaultBuffers() external;\n\n /**\n * @notice Initializes buffer for the given wrapped token.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param amountUnderlyingRaw Amount of underlying tokens that will be deposited into the buffer\n * @param amountWrappedRaw Amount of wrapped tokens that will be deposited into the buffer\n * @param minIssuedShares Minimum amount of shares to receive from the buffer, expressed in underlying token\n * native decimals\n * @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n * liquidity from the buffer\n * @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n * (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\n */\n function initializeBuffer(\n IERC4626 wrappedToken,\n uint256 amountUnderlyingRaw,\n uint256 amountWrappedRaw,\n uint256 minIssuedShares,\n address sharesOwner\n ) external returns (uint256 issuedShares);\n\n /**\n * @notice Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\n * @dev The buffer needs to be initialized beforehand.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param maxAmountUnderlyingInRaw Maximum amount of underlying tokens to add to the buffer. It is expressed in\n * underlying token native decimals\n * @param maxAmountWrappedInRaw Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n * token native decimals\n * @param exactSharesToIssue The value in underlying tokens that `sharesOwner` wants to add to the buffer,\n * in underlying token decimals\n * @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n * liquidity from the buffer\n * @return amountUnderlyingRaw Amount of underlying tokens deposited into the buffer\n * @return amountWrappedRaw Amount of wrapped tokens deposited into the buffer\n */\n function addLiquidityToBuffer(\n IERC4626 wrappedToken,\n uint256 maxAmountUnderlyingInRaw,\n uint256 maxAmountWrappedInRaw,\n uint256 exactSharesToIssue,\n address sharesOwner\n ) external returns (uint256 amountUnderlyingRaw, uint256 amountWrappedRaw);\n\n /**\n * @notice Removes liquidity from an internal ERC4626 buffer in the Vault.\n * @dev Only proportional exits are supported, and the sender has to be the owner of the shares.\n * This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint.\n *\n * Pre-conditions:\n * - The buffer needs to be initialized.\n * - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why\n * this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer.\n * - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\n *\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param sharesToRemove Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's\n * total shares. It is expressed in underlying token native decimals\n * @param minAmountUnderlyingOutRaw Minimum amount of underlying tokens to receive from the buffer. It is expressed\n * in underlying token native decimals\n * @param minAmountWrappedOutRaw Minimum amount of wrapped tokens to receive from the buffer. It is expressed in\n * wrapped token native decimals\n * @return removedUnderlyingBalanceRaw Amount of underlying tokens returned to the user\n * @return removedWrappedBalanceRaw Amount of wrapped tokens returned to the user\n */\n function removeLiquidityFromBuffer(\n IERC4626 wrappedToken,\n uint256 sharesToRemove,\n uint256 minAmountUnderlyingOutRaw,\n uint256 minAmountWrappedOutRaw\n ) external returns (uint256 removedUnderlyingBalanceRaw, uint256 removedWrappedBalanceRaw);\n\n /**\n * @notice Returns the asset registered for a given wrapped token.\n * @dev The asset can never change after buffer initialization.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return underlyingToken Address of the underlying token registered for the wrapper; `address(0)` if the buffer\n * has not been initialized.\n */\n function getBufferAsset(IERC4626 wrappedToken) external view returns (address underlyingToken);\n\n /**\n * @notice Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets\n * in the buffer.\n *\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param liquidityOwner Address of the user that owns liquidity in the wrapped token's buffer\n * @return ownerShares Amount of shares allocated to the liquidity owner, in native underlying token decimals\n */\n function getBufferOwnerShares(\n IERC4626 wrappedToken,\n address liquidityOwner\n ) external view returns (uint256 ownerShares);\n\n /**\n * @notice Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return bufferShares Amount of supply shares of the buffer, in native underlying token decimals\n */\n function getBufferTotalShares(IERC4626 wrappedToken) external view returns (uint256 bufferShares);\n\n /**\n * @notice Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\n * @dev All values are in native token decimals of the wrapped or underlying tokens.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return underlyingBalanceRaw Amount of underlying tokens deposited into the buffer, in native token decimals\n * @return wrappedBalanceRaw Amount of wrapped tokens deposited into the buffer, in native token decimals\n */\n function getBufferBalance(\n IERC4626 wrappedToken\n ) external view returns (uint256 underlyingBalanceRaw, uint256 wrappedBalanceRaw);\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Sets a new Authorizer for the Vault.\n * @dev This is a permissioned call. Emits an `AuthorizerChanged` event.\n * @param newAuthorizer The address of the new authorizer\n */\n function setAuthorizer(IAuthorizer newAuthorizer) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/// @notice Errors are declared inside an interface (namespace) to improve DX with Typechain.\ninterface IVaultErrors {\n /*******************************************************************************\n Registration and Initialization\n *******************************************************************************/\n\n /**\n * @notice A pool has already been registered. `registerPool` may only be called once.\n * @param pool The already registered pool\n */\n error PoolAlreadyRegistered(address pool);\n\n /**\n * @notice A pool has already been initialized. `initialize` may only be called once.\n * @param pool The already initialized pool\n */\n error PoolAlreadyInitialized(address pool);\n\n /**\n * @notice A pool has not been registered.\n * @param pool The unregistered pool\n */\n error PoolNotRegistered(address pool);\n\n /**\n * @notice A referenced pool has not been initialized.\n * @param pool The uninitialized pool\n */\n error PoolNotInitialized(address pool);\n\n /**\n * @notice A hook contract rejected a pool on registration.\n * @param poolHooksContract Address of the hook contract that rejected the pool registration\n * @param pool Address of the rejected pool\n * @param poolFactory Address of the pool factory\n */\n error HookRegistrationFailed(address poolHooksContract, address pool, address poolFactory);\n\n /**\n * @notice A token was already registered (i.e., it is a duplicate in the pool).\n * @param token The duplicate token\n */\n error TokenAlreadyRegistered(IERC20 token);\n\n /// @notice The token count is below the minimum allowed.\n error MinTokens();\n\n /// @notice The token count is above the maximum allowed.\n error MaxTokens();\n\n /// @notice Invalid tokens (e.g., zero) cannot be registered.\n error InvalidToken();\n\n /// @notice The token type given in a TokenConfig during pool registration is invalid.\n error InvalidTokenType();\n\n /// @notice The data in a TokenConfig struct is inconsistent or unsupported.\n error InvalidTokenConfiguration();\n\n /// @notice Tokens with more than 18 decimals are not supported.\n error InvalidTokenDecimals();\n\n /**\n * @notice The token list passed into an operation does not match the pool tokens in the pool.\n * @param pool Address of the pool\n * @param expectedToken The correct token at a given index in the pool\n * @param actualToken The actual token found at that index\n */\n error TokensMismatch(address pool, address expectedToken, address actualToken);\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /// @notice A transient accounting operation completed with outstanding token deltas.\n error BalanceNotSettled();\n\n /// @notice A user called a Vault function (swap, add/remove liquidity) outside the lock context.\n error VaultIsNotUnlocked();\n\n /// @notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\n error DynamicSwapFeeHookFailed();\n\n /// @notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\n error BeforeSwapHookFailed();\n\n /// @notice The pool has returned false to the afterSwap hook, indicating the transaction should revert.\n error AfterSwapHookFailed();\n\n /// @notice The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\n error BeforeInitializeHookFailed();\n\n /// @notice The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\n error AfterInitializeHookFailed();\n\n /// @notice The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\n error BeforeAddLiquidityHookFailed();\n\n /// @notice The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\n error AfterAddLiquidityHookFailed();\n\n /// @notice The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\n error BeforeRemoveLiquidityHookFailed();\n\n /// @notice The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\n error AfterRemoveLiquidityHookFailed();\n\n /// @notice An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\n error RouterNotTrusted();\n\n /*******************************************************************************\n Swaps\n *******************************************************************************/\n\n /// @notice The user tried to swap zero tokens.\n error AmountGivenZero();\n\n /// @notice The user attempted to swap a token for itself.\n error CannotSwapSameToken();\n\n /**\n * @notice The user attempted to operate with a token that is not in the pool.\n * @param token The unregistered token\n */\n error TokenNotRegistered(IERC20 token);\n\n /**\n * @notice An amount in or out has exceeded the limit specified in the swap request.\n * @param amount The total amount in or out\n * @param limit The amount of the limit that has been exceeded\n */\n error SwapLimit(uint256 amount, uint256 limit);\n\n /**\n * @notice A hook adjusted amount in or out has exceeded the limit specified in the swap request.\n * @param amount The total amount in or out\n * @param limit The amount of the limit that has been exceeded\n */\n error HookAdjustedSwapLimit(uint256 amount, uint256 limit);\n\n /// @notice The amount given or calculated for an operation is below the minimum limit.\n error TradeAmountTooSmall();\n\n /*******************************************************************************\n Add Liquidity\n *******************************************************************************/\n\n /// @notice Add liquidity kind not supported.\n error InvalidAddLiquidityKind();\n\n /**\n * @notice A required amountIn exceeds the maximum limit specified for the operation.\n * @param tokenIn The incoming token\n * @param amountIn The total token amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error AmountInAboveMax(IERC20 tokenIn, uint256 amountIn, uint256 maxAmountIn);\n\n /**\n * @notice A hook adjusted amountIn exceeds the maximum limit specified for the operation.\n * @param tokenIn The incoming token\n * @param amountIn The total token amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error HookAdjustedAmountInAboveMax(IERC20 tokenIn, uint256 amountIn, uint256 maxAmountIn);\n\n /**\n * @notice The BPT amount received from adding liquidity is below the minimum specified for the operation.\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error BptAmountOutBelowMin(uint256 amountOut, uint256 minAmountOut);\n\n /// @notice Pool does not support adding liquidity with a customized input.\n error DoesNotSupportAddLiquidityCustom();\n\n /// @notice Pool does not support adding liquidity through donation.\n error DoesNotSupportDonation();\n\n /*******************************************************************************\n Remove Liquidity\n *******************************************************************************/\n\n /// @notice Remove liquidity kind not supported.\n error InvalidRemoveLiquidityKind();\n\n /**\n * @notice The actual amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error AmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /**\n * @notice The hook adjusted amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error HookAdjustedAmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /**\n * @notice The required BPT amount in exceeds the maximum limit specified for the operation.\n * @param amountIn The total BPT amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error BptAmountInAboveMax(uint256 amountIn, uint256 maxAmountIn);\n\n /// @notice Pool does not support removing liquidity with a customized input.\n error DoesNotSupportRemoveLiquidityCustom();\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Error raised when there is an overflow in the fee calculation.\n * @dev This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole\n * (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee\n * percentages in the Vault.\n */\n error ProtocolFeesExceedTotalCollected();\n\n /**\n * @notice Error raised when the swap fee percentage is less than the minimum allowed value.\n * @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n * range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n * if it is below the minimum value returned by the pool.\n *\n * Pools with dynamic fees do not check these limits.\n */\n error SwapFeePercentageTooLow();\n\n /**\n * @notice Error raised when the swap fee percentage is greater than the maximum allowed value.\n * @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n * range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n * if it is above the maximum value returned by the pool.\n *\n * Pools with dynamic fees do not check these limits.\n */\n error SwapFeePercentageTooHigh();\n\n /**\n * @notice Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\n * @dev Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n * precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n * corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n * Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between\n * the aggregate fee calculated here and that stored in the Vault.\n */\n error FeePrecisionTooHigh();\n\n /// @notice A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\n error PercentageAboveMax();\n\n /*******************************************************************************\n Queries\n *******************************************************************************/\n\n /// @notice A user tried to execute a query operation when they were disabled.\n error QueriesDisabled();\n\n /// @notice An admin tried to re-enable queries, but they were disabled permanently.\n error QueriesDisabledPermanently();\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Cannot enable recovery mode when already enabled.\n * @param pool The pool\n */\n error PoolInRecoveryMode(address pool);\n\n /**\n * @notice Cannot disable recovery mode when not enabled.\n * @param pool The pool\n */\n error PoolNotInRecoveryMode(address pool);\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\n * @param sender The account attempting to call a permissioned function\n */\n error SenderIsNotVault(address sender);\n\n /*******************************************************************************\n Pausing\n *******************************************************************************/\n\n /// @notice The caller specified a pause window period longer than the maximum.\n error VaultPauseWindowDurationTooLarge();\n\n /// @notice The caller specified a buffer period longer than the maximum.\n error PauseBufferPeriodDurationTooLarge();\n\n /// @notice A user tried to perform an operation while the Vault was paused.\n error VaultPaused();\n\n /// @notice Governance tried to unpause the Vault when it was not paused.\n error VaultNotPaused();\n\n /// @notice Governance tried to pause the Vault after the pause period expired.\n error VaultPauseWindowExpired();\n\n /**\n * @notice A user tried to perform an operation involving a paused Pool.\n * @param pool The paused pool\n */\n error PoolPaused(address pool);\n\n /**\n * @notice Governance tried to unpause the Pool when it was not paused.\n * @param pool The unpaused pool\n */\n error PoolNotPaused(address pool);\n\n /**\n * @notice Governance tried to pause a Pool after the pause period expired.\n * @param pool The pool\n */\n error PoolPauseWindowExpired(address pool);\n\n /*******************************************************************************\n ERC4626 token buffers\n *******************************************************************************/\n\n /**\n * @notice The buffer for the given wrapped token was already initialized.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error BufferAlreadyInitialized(IERC4626 wrappedToken);\n\n /**\n * @notice The buffer for the given wrapped token was not initialized.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error BufferNotInitialized(IERC4626 wrappedToken);\n\n /// @notice The user is trying to remove more than their allocated shares from the buffer.\n error NotEnoughBufferShares();\n\n /**\n * @notice The wrapped token asset does not match the underlying token.\n * @dev This should never happen, but a malicious wrapper contract might not return the correct address.\n * Legitimate wrapper contracts should make the asset a constant or immutable value.\n *\n * @param wrappedToken The wrapped token corresponding to the buffer\n * @param underlyingToken The underlying token returned by `asset`\n */\n error WrongUnderlyingToken(IERC4626 wrappedToken, address underlyingToken);\n\n /**\n * @notice A wrapped token reported the zero address as its underlying token asset.\n * @dev This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to\n * re-initialize the buffer).\n *\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error InvalidUnderlyingToken(IERC4626 wrappedToken);\n\n /**\n * @notice The amount given to wrap/unwrap was too small, which can introduce rounding issues.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error WrapAmountTooSmall(IERC4626 wrappedToken);\n\n /// @notice Buffer operation attempted while vault buffers are paused.\n error VaultBuffersArePaused();\n\n /// @notice Buffer shares were minted to the zero address.\n error BufferSharesInvalidReceiver();\n\n /// @notice Buffer shares were burned from the zero address.\n error BufferSharesInvalidOwner();\n\n /**\n * @notice The total supply of a buffer can't be lower than the absolute minimum.\n * @param totalSupply The total supply value that was below the minimum\n */\n error BufferTotalSupplyTooLow(uint256 totalSupply);\n\n /// @dev A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\n error NotEnoughUnderlying(IERC4626 wrappedToken, uint256 expectedUnderlyingAmount, uint256 actualUnderlyingAmount);\n\n /// @dev A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\n error NotEnoughWrapped(IERC4626 wrappedToken, uint256 expectedWrappedAmount, uint256 actualWrappedAmount);\n\n /// @dev Shares issued during initialization are below the requested amount.\n error IssuedSharesBelowMin(uint256 issuedShares, uint256 minIssuedShares);\n\n /*******************************************************************************\n Miscellaneous\n *******************************************************************************/\n\n /// @notice Pool does not support adding / removing liquidity with an unbalanced input.\n error DoesNotSupportUnbalancedLiquidity();\n\n /// @notice The contract should not receive ETH.\n error CannotReceiveEth();\n\n /**\n * @notice The `VaultExtension` contract was called by an account directly.\n * @dev It can only be called by the Vault via delegatecall.\n */\n error NotVaultDelegateCall();\n\n /// @notice The `VaultExtension` contract was configured with an incorrect Vault address.\n error WrongVaultExtensionDeployment();\n\n /// @notice The `ProtocolFeeController` contract was configured with an incorrect Vault address.\n error WrongProtocolFeeControllerDeployment();\n\n /// @notice The `VaultAdmin` contract was configured with an incorrect Vault address.\n error WrongVaultAdminDeployment();\n\n /// @notice Quote reverted with a reserved error code.\n error QuoteResultSpoofed();\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IHooks } from \"./IHooks.sol\";\nimport \"./VaultTypes.sol\";\n\n/// @dev Events are declared inside an interface (namespace) to improve DX with Typechain.\ninterface IVaultEvents {\n /**\n * @notice A Pool was registered by calling `registerPool`.\n * @param pool The pool being registered\n * @param factory The factory creating the pool\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param swapFeePercentage The static swap fee of the pool\n * @param pauseWindowEndTime The pool's pause window end time\n * @param roleAccounts Addresses the Vault will allow to change certain pool settings\n * @param hooksConfig Flags indicating which hooks the pool supports and address of hooks contract\n * @param liquidityManagement Supported liquidity management hook flags\n */\n event PoolRegistered(\n address indexed pool,\n address indexed factory,\n TokenConfig[] tokenConfig,\n uint256 swapFeePercentage,\n uint32 pauseWindowEndTime,\n PoolRoleAccounts roleAccounts,\n HooksConfig hooksConfig,\n LiquidityManagement liquidityManagement\n );\n\n /**\n * @notice A Pool was initialized by calling `initialize`.\n * @param pool The pool being initialized\n */\n event PoolInitialized(address indexed pool);\n\n /**\n * @notice A swap has occurred.\n * @param pool The pool with the tokens being swapped\n * @param tokenIn The token entering the Vault (balance increases)\n * @param tokenOut The token leaving the Vault (balance decreases)\n * @param amountIn Number of tokenIn tokens\n * @param amountOut Number of tokenOut tokens\n * @param swapFeePercentage Swap fee percentage applied (can differ if dynamic)\n * @param swapFeeAmount Swap fee amount paid\n */\n event Swap(\n address indexed pool,\n IERC20 indexed tokenIn,\n IERC20 indexed tokenOut,\n uint256 amountIn,\n uint256 amountOut,\n uint256 swapFeePercentage,\n uint256 swapFeeAmount\n );\n\n /**\n * @notice A wrap operation has occurred.\n * @param wrappedToken The wrapped token address\n * @param depositedUnderlying Number of underlying tokens deposited\n * @param mintedShares Number of shares (wrapped tokens) minted\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event Wrap(\n IERC4626 indexed wrappedToken,\n uint256 depositedUnderlying,\n uint256 mintedShares,\n bytes32 bufferBalances\n );\n\n /**\n * @notice An unwrap operation has occurred.\n * @param wrappedToken The wrapped token address\n * @param burnedShares Number of shares (wrapped tokens) burned\n * @param withdrawnUnderlying Number of underlying tokens withdrawn\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event Unwrap(\n IERC4626 indexed wrappedToken,\n uint256 burnedShares,\n uint256 withdrawnUnderlying,\n bytes32 bufferBalances\n );\n\n /**\n * @notice Liquidity has been added to a pool (including initialization).\n * @param pool The pool with liquidity added\n * @param liquidityProvider The user performing the operation\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param totalSupply The total supply of the pool after the operation\n * @param amountsAddedRaw The amount of each token that was added, sorted in token registration order\n * @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order\n */\n event LiquidityAdded(\n address indexed pool,\n address indexed liquidityProvider,\n AddLiquidityKind indexed kind,\n uint256 totalSupply,\n uint256[] amountsAddedRaw,\n uint256[] swapFeeAmountsRaw\n );\n\n /**\n * @notice Liquidity has been removed from a pool.\n * @param pool The pool with liquidity removed\n * @param liquidityProvider The user performing the operation\n * @param kind The remove liquidity operation type (e.g., proportional, custom)\n * @param totalSupply The total supply of the pool after the operation\n * @param amountsRemovedRaw The amount of each token that was removed, sorted in token registration order\n * @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order\n */\n event LiquidityRemoved(\n address indexed pool,\n address indexed liquidityProvider,\n RemoveLiquidityKind indexed kind,\n uint256 totalSupply,\n uint256[] amountsRemovedRaw,\n uint256[] swapFeeAmountsRaw\n );\n\n /**\n * @notice The Vault's pause status has changed.\n * @param paused True if the Vault was paused\n */\n event VaultPausedStateChanged(bool paused);\n\n /// @notice `disableQuery` has been called on the Vault, disabling query functionality.\n event VaultQueriesDisabled();\n\n /// @notice `enableQuery` has been called on the Vault, enabling query functionality.\n event VaultQueriesEnabled();\n\n /**\n * @notice A Pool's pause status has changed.\n * @param pool The pool that was just paused or unpaused\n * @param paused True if the pool was paused\n */\n event PoolPausedStateChanged(address indexed pool, bool paused);\n\n /**\n * @notice Emitted when the swap fee percentage of a pool is updated.\n * @param swapFeePercentage The new swap fee percentage for the pool\n */\n event SwapFeePercentageChanged(address indexed pool, uint256 swapFeePercentage);\n\n /**\n * @notice Recovery mode has been enabled or disabled for a pool.\n * @param pool The pool\n * @param recoveryMode True if recovery mode was enabled\n */\n event PoolRecoveryModeStateChanged(address indexed pool, bool recoveryMode);\n\n /**\n * @notice A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\n * @dev The `ProtocolFeeController` will emit an event with the underlying change.\n * @param pool The pool whose aggregate swap fee percentage changed\n * @param aggregateSwapFeePercentage The new aggregate swap fee percentage\n */\n event AggregateSwapFeePercentageChanged(address indexed pool, uint256 aggregateSwapFeePercentage);\n\n /**\n * @notice A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\n * @dev The `ProtocolFeeController` will emit an event with the underlying change.\n * @param pool The pool whose aggregate yield fee percentage changed\n * @param aggregateYieldFeePercentage The new aggregate yield fee percentage\n */\n event AggregateYieldFeePercentageChanged(address indexed pool, uint256 aggregateYieldFeePercentage);\n\n /**\n * @notice A new authorizer is set by `setAuthorizer`.\n * @param newAuthorizer The address of the new authorizer\n */\n event AuthorizerChanged(IAuthorizer indexed newAuthorizer);\n\n /**\n * @notice A new protocol fee controller is set by `setProtocolFeeController`.\n * @param newProtocolFeeController The address of the new protocol fee controller\n */\n event ProtocolFeeControllerChanged(IProtocolFeeController indexed newProtocolFeeController);\n\n /**\n * @notice Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\n * @dev The underlying token can be derived from the wrapped token, so it's not included here.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param amountUnderlying The amount of the underlying token that was deposited\n * @param amountWrapped The amount of the wrapped token that was deposited\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event LiquidityAddedToBuffer(\n IERC4626 indexed wrappedToken,\n uint256 amountUnderlying,\n uint256 amountWrapped,\n bytes32 bufferBalances\n );\n\n /**\n * @notice Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\n * @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n * retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n * \"totalSupply\" of a buffer.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param to The owner of the minted shares\n * @param issuedShares The amount of \"internal BPT\" shares created\n */\n event BufferSharesMinted(IERC4626 indexed wrappedToken, address indexed to, uint256 issuedShares);\n\n /**\n * @notice Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\n * @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n * retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n * \"totalSupply\" of a buffer.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param from The owner of the burned shares\n * @param burnedShares The amount of \"internal BPT\" shares burned\n */\n event BufferSharesBurned(IERC4626 indexed wrappedToken, address indexed from, uint256 burnedShares);\n\n /**\n * @notice Liquidity was removed from an ERC4626 buffer.\n * @dev The underlying token can be derived from the wrapped token, so it's not included here.\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param amountUnderlying The amount of the underlying token that was withdrawn\n * @param amountWrapped The amount of the wrapped token that was withdrawn\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event LiquidityRemovedFromBuffer(\n IERC4626 indexed wrappedToken,\n uint256 amountUnderlying,\n uint256 amountWrapped,\n bytes32 bufferBalances\n );\n\n /**\n * @notice The Vault buffers pause status has changed.\n * @dev If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer`\n * set to true) will revert.\n *\n * @param paused True if the Vault buffers were paused\n */\n event VaultBuffersPausedStateChanged(bool paused);\n\n /**\n * @notice Pools can use this event to emit event data from the Vault.\n * @param pool Pool address\n * @param eventKey Event key\n * @param eventData Encoded event data\n */\n event VaultAuxiliary(address indexed pool, bytes32 indexed eventKey, bytes eventData);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IVault } from \"./IVault.sol\";\nimport { IHooks } from \"./IHooks.sol\";\nimport \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for functions defined on the `VaultExtension` contract.\n * @dev `VaultExtension` handles less critical or frequently used functions, since delegate calls through\n * the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and\n * liquidity operations.\n */\ninterface IVaultExtension {\n /*******************************************************************************\n Constants and immutables\n *******************************************************************************/\n\n /**\n * @notice Returns the main Vault address.\n * @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n * @return vault The address of the main Vault\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Returns the VaultAdmin contract address.\n * @dev The VaultAdmin contract mostly implements permissioned functions.\n * @return vaultAdmin The address of the Vault admin\n */\n function getVaultAdmin() external view returns (address vaultAdmin);\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @notice Returns whether the Vault is unlocked (i.e., executing an operation).\n * @dev The Vault must be unlocked to perform state-changing liquidity operations.\n * @return unlocked True if the Vault is unlocked, false otherwise\n */\n function isUnlocked() external view returns (bool unlocked);\n\n /**\n * @notice Returns the count of non-zero deltas.\n * @return nonzeroDeltaCount The current value of `_nonzeroDeltaCount`\n */\n function getNonzeroDeltaCount() external view returns (uint256 nonzeroDeltaCount);\n\n /**\n * @notice Retrieves the token delta for a specific token.\n * @dev This function allows reading the value from the `_tokenDeltas` mapping.\n * @param token The token for which the delta is being fetched\n * @return tokenDelta The delta of the specified token\n */\n function getTokenDelta(IERC20 token) external view returns (int256 tokenDelta);\n\n /**\n * @notice Retrieves the reserve (i.e., total Vault balance) of a given token.\n * @param token The token for which to retrieve the reserve\n * @return reserveAmount The amount of reserves for the given token\n */\n function getReservesOf(IERC20 token) external view returns (uint256 reserveAmount);\n\n /**\n * @notice This flag is used to detect and tax \"round-trip\" interactions (adding and removing liquidity in the\n * same pool).\n * @dev Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra\n * layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional\n * is the only standard way to exit a position without fees, and this flag is used to enable fees in that case.\n * It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse\n * than a simple swap for every pool type.\n *\n * @param pool Address of the pool to check\n * @return liquidityAdded True if liquidity has been added to this pool in the current transaction\n \n * Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\n */\n function getAddLiquidityCalledFlag(address pool) external view returns (bool liquidityAdded);\n\n /*******************************************************************************\n Pool Registration\n *******************************************************************************/\n\n /**\n * @notice Registers a pool, associating it with its factory and the tokens it manages.\n * @dev A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely\n * by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an\n * additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused\n * pool will automatically unpause. Balancer timestamps are 32 bits.\n *\n * A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a\n * multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to\n * the Vault.\n *\n * If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the\n * authorizer.\n *\n * @param pool The address of the pool being registered\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param swapFeePercentage The initial static swap fee percentage of the pool\n * @param pauseWindowEndTime The timestamp after which it is no longer possible to pause the pool\n * @param protocolFeeExempt If true, the pool's initial aggregate fees will be set to 0\n * @param roleAccounts Addresses the Vault will allow to change certain pool settings\n * @param poolHooksContract Contract that implements the hooks for the pool\n * @param liquidityManagement Liquidity management flags with implemented methods\n */\n function registerPool(\n address pool,\n TokenConfig[] memory tokenConfig,\n uint256 swapFeePercentage,\n uint32 pauseWindowEndTime,\n bool protocolFeeExempt,\n PoolRoleAccounts calldata roleAccounts,\n address poolHooksContract,\n LiquidityManagement calldata liquidityManagement\n ) external;\n\n /**\n * @notice Checks whether a pool is registered.\n * @param pool Address of the pool to check\n * @return registered True if the pool is registered, false otherwise\n */\n function isPoolRegistered(address pool) external view returns (bool registered);\n\n /**\n * @notice Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\n * @param pool Address of the pool to initialize\n * @param to Address that will receive the output BPT\n * @param tokens Tokens used to seed the pool (must match the registered tokens)\n * @param exactAmountsIn Exact amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param userData Additional (optional) data required for adding initial liquidity\n * @return bptAmountOut Output pool token amount\n */\n function initialize(\n address pool,\n address to,\n IERC20[] memory tokens,\n uint256[] memory exactAmountsIn,\n uint256 minBptAmountOut,\n bytes memory userData\n ) external returns (uint256 bptAmountOut);\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /**\n * @notice Checks whether a pool is initialized.\n * @dev An initialized pool can be considered registered as well.\n * @param pool Address of the pool to check\n * @return initialized True if the pool is initialized, false otherwise\n */\n function isPoolInitialized(address pool) external view returns (bool initialized);\n\n /**\n * @notice Gets the tokens registered to a pool.\n * @param pool Address of the pool\n * @return tokens List of tokens in the pool\n */\n function getPoolTokens(address pool) external view returns (IERC20[] memory tokens);\n\n /**\n * @notice Gets pool token rates.\n * @dev This function performs external calls if tokens are yield-bearing. All returned arrays are in token\n * registration order.\n *\n * @param pool Address of the pool\n * @return decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n * calculations. FP(1) for 18-decimal tokens\n * @return tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n */\n function getPoolTokenRates(\n address pool\n ) external view returns (uint256[] memory decimalScalingFactors, uint256[] memory tokenRates);\n\n /**\n * @notice Returns comprehensive pool data for the given pool.\n * @dev This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\n * @param pool The address of the pool\n * @return poolData The `PoolData` result\n */\n function getPoolData(address pool) external view returns (PoolData memory poolData);\n\n /**\n * @notice Gets the raw data for a pool: tokens, raw balances, scaling factors.\n * @param pool Address of the pool\n * @return tokens The pool tokens, sorted in registration order\n * @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n * @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n * @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order\n */\n function getPoolTokenInfo(\n address pool\n )\n external\n view\n returns (\n IERC20[] memory tokens,\n TokenInfo[] memory tokenInfo,\n uint256[] memory balancesRaw,\n uint256[] memory lastBalancesLiveScaled18\n );\n\n /**\n * @notice Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in\n * registration order.\n *\n * @param pool Address of the pool\n * @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n */\n function getCurrentLiveBalances(address pool) external view returns (uint256[] memory balancesLiveScaled18);\n\n /**\n * @notice Gets the configuration parameters of a pool.\n * @dev The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\n * @param pool Address of the pool\n * @return poolConfig The pool configuration as a `PoolConfig` struct\n */\n function getPoolConfig(address pool) external view returns (PoolConfig memory poolConfig);\n\n /**\n * @notice Gets the hooks configuration parameters of a pool.\n * @dev The `HooksConfig` contains flags indicating which pool hooks are implemented.\n * @param pool Address of the pool\n * @return hooksConfig The hooks configuration as a `HooksConfig` struct\n */\n function getHooksConfig(address pool) external view returns (HooksConfig memory hooksConfig);\n\n /**\n * @notice The current rate of a pool token (BPT) = invariant / totalSupply.\n * @param pool Address of the pool\n * @return rate BPT rate\n */\n function getBptRate(address pool) external view returns (uint256 rate);\n\n /*******************************************************************************\n Balancer Pool Tokens\n *******************************************************************************/\n\n /**\n * @notice Gets the total supply of a given ERC20 token.\n * @param token The token address\n * @return tokenTotalSupply Total supply of the token\n */\n function totalSupply(address token) external view returns (uint256 tokenTotalSupply);\n\n /**\n * @notice Gets the balance of an account for a given ERC20 token.\n * @param token Address of the token\n * @param account Address of the account\n * @return tokenBalance Token balance of the account\n */\n function balanceOf(address token, address account) external view returns (uint256 tokenBalance);\n\n /**\n * @notice Gets the allowance of a spender for a given ERC20 token and owner.\n * @param token Address of the token\n * @param owner Address of the owner\n * @param spender Address of the spender\n * @return tokenAllowance Amount of tokens the spender is allowed to spend\n */\n function allowance(address token, address owner, address spender) external view returns (uint256 tokenAllowance);\n\n /**\n * @notice Approves a spender to spend pool tokens on behalf of sender.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param owner Address of the owner\n * @param spender Address of the spender\n * @param amount Amount of tokens to approve\n * @return success True if successful, false otherwise\n */\n function approve(address owner, address spender, uint256 amount) external returns (bool success);\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /**\n * @notice Indicates whether a pool is paused.\n * @dev If a pool is paused, all non-Recovery Mode state-changing operations will revert.\n * @param pool The pool to be checked\n * @return poolPaused True if the pool is paused\n */\n function isPoolPaused(address pool) external view returns (bool poolPaused);\n\n /**\n * @notice Returns the paused status, and end times of the Pool's pause window and buffer period.\n * @dev Note that even when set to a paused state, the pool will automatically unpause at the end of\n * the buffer period. Balancer timestamps are 32 bits.\n *\n * @param pool The pool whose data is requested\n * @return poolPaused True if the Pool is paused\n * @return poolPauseWindowEndTime The timestamp of the end of the Pool's pause window\n * @return poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)\n * @return pauseManager The pause manager, or the zero address\n */\n function getPoolPausedState(\n address pool\n )\n external\n view\n returns (bool poolPaused, uint32 poolPauseWindowEndTime, uint32 poolBufferPeriodEndTime, address pauseManager);\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Checks if the wrapped token has an initialized buffer in the Vault.\n * @dev An initialized buffer should have an asset registered in the Vault.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return isBufferInitialized True if the ERC4626 buffer is initialized\n */\n function isERC4626BufferInitialized(IERC4626 wrappedToken) external view returns (bool isBufferInitialized);\n\n /**\n * @notice Gets the registered asset for a given buffer.\n * @dev To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers\n * should never call `wrapper.asset()` directly, at least without checking it against the asset registered with\n * the Vault on initialization.\n *\n * @param wrappedToken The wrapped token specifying the buffer\n * @return asset The underlying asset of the wrapped token\n */\n function getERC4626BufferAsset(IERC4626 wrappedToken) external view returns (address asset);\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\n * @param pool The address of the pool for which aggregate fees have been collected\n * @param token The address of the token in which fees have been accumulated\n * @return swapFeeAmount The total amount of fees accumulated in the specified token\n */\n function getAggregateSwapFeeAmount(address pool, IERC20 token) external view returns (uint256 swapFeeAmount);\n\n /**\n * @notice Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\n * @param pool The address of the pool for which aggregate fees have been collected\n * @param token The address of the token in which fees have been accumulated\n * @return yieldFeeAmount The total amount of fees accumulated in the specified token\n */\n function getAggregateYieldFeeAmount(address pool, IERC20 token) external view returns (uint256 yieldFeeAmount);\n\n /**\n * @notice Fetches the static swap fee percentage for a given pool.\n * @param pool The address of the pool whose static swap fee percentage is being queried\n * @return swapFeePercentage The current static swap fee percentage for the specified pool\n */\n function getStaticSwapFeePercentage(address pool) external view returns (uint256 swapFeePercentage);\n\n /**\n * @notice Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\n * @param pool The address of the pool whose roles are being queried\n * @return roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)\n */\n function getPoolRoleAccounts(address pool) external view returns (PoolRoleAccounts memory roleAccounts);\n\n /**\n * @notice Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\n * @dev Reverts if the hook doesn't return the success flag set to `true`.\n * @param pool The pool\n * @param swapParams The swap parameters used to compute the fee\n * @return dynamicSwapFeePercentage The dynamic swap fee percentage\n */\n function computeDynamicSwapFeePercentage(\n address pool,\n PoolSwapParams memory swapParams\n ) external view returns (uint256 dynamicSwapFeePercentage);\n\n /**\n * @notice Returns the Protocol Fee Controller address.\n * @return protocolFeeController Address of the ProtocolFeeController\n */\n function getProtocolFeeController() external view returns (IProtocolFeeController protocolFeeController);\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Checks whether a pool is in Recovery Mode.\n * @dev Recovery Mode enables a safe proportional withdrawal path, with no external calls.\n * @param pool Address of the pool to check\n * @return inRecoveryMode True if the pool is in Recovery Mode, false otherwise\n */\n function isPoolInRecoveryMode(address pool) external view returns (bool inRecoveryMode);\n\n /**\n * @notice Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out.\n * The request is implemented by the Vault without any interaction with the pool, ensuring that\n * it works the same for all pools, and cannot be disabled by a new pool type.\n *\n * @param pool Address of the pool\n * @param from Address of user to burn pool tokens from\n * @param exactBptAmountIn Input pool token amount\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @return amountsOut Actual calculated amounts of output tokens, sorted in token registration order\n */\n function removeLiquidityRecovery(\n address pool,\n address from,\n uint256 exactBptAmountIn,\n uint256[] memory minAmountsOut\n ) external returns (uint256[] memory amountsOut);\n\n /*******************************************************************************\n Queries\n *******************************************************************************/\n\n /**\n * @notice Performs a callback on msg.sender with arguments provided in `data`.\n * @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n * anything else will revert.\n *\n * Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n *\n * Allows the external calling of a function via the Vault contract to\n * access Vault's functions guarded by `onlyWhenUnlocked`.\n * `transient` modifier ensuring balances changes within the Vault are settled.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n * @return result Resulting data from the call\n */\n function quote(bytes calldata data) external returns (bytes memory result);\n\n /**\n * @notice Performs a callback on msg.sender with arguments provided in `data`.\n * @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n * anything else will revert.\n *\n * Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n *\n * Allows the external calling of a function via the Vault contract to\n * access Vault's functions guarded by `onlyWhenUnlocked`.\n * `transient` modifier ensuring balances changes within the Vault are settled.\n *\n * This call always reverts, returning the result in the revert reason.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n */\n function quoteAndRevert(bytes calldata data) external;\n\n /**\n * @notice Returns true if queries are disabled on the Vault.\n * @dev If true, queries might either be disabled temporarily or permanently.\n * @return queryDisabled True if query functionality is reversibly disabled\n */\n function isQueryDisabled() external view returns (bool queryDisabled);\n\n /**\n * @notice Returns true if queries are disabled permanently; false if they are enabled.\n * @dev This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\n * @return queryDisabledPermanently True if query functionality is permanently disabled\n */\n function isQueryDisabledPermanently() external view returns (bool queryDisabledPermanently);\n\n /**\n * @notice Pools can use this event to emit event data from the Vault.\n * @param eventKey Event key\n * @param eventData Encoded event data\n */\n function emitAuxiliaryEvent(bytes32 eventKey, bytes calldata eventData) external;\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Returns the Authorizer address.\n * @dev The authorizer holds the permissions granted by governance. It is set on Vault deployment,\n * and can be changed through a permissioned call.\n *\n * @return authorizer Address of the authorizer contract\n */\n function getAuthorizer() external view returns (IAuthorizer authorizer);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for functions defined on the main Vault contract.\n * @dev These are generally \"critical path\" functions (swap, add/remove liquidity) that are in the main contract\n * for technical or performance reasons.\n */\ninterface IVaultMain {\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @notice Creates a context for a sequence of operations (i.e., \"unlocks\" the Vault).\n * @dev Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`,\n * meaning all balances for the caller have to be settled at the end.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n * @return result Resulting data from the call\n */\n function unlock(bytes calldata data) external returns (bytes memory result);\n\n /**\n * @notice Settles deltas for a token; must be successful for the current lock to be released.\n * @dev Protects the caller against leftover dust in the Vault for the token being settled. The caller\n * should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any\n * excess in the Vault balance.\n *\n * If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as\n * credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail.\n *\n * If the given hint is lower than the difference in reserves, the hint is given as credit to the caller.\n * In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would\n * not affect settlement.\n *\n * The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve\n * difference equals current balance of the token minus existing reserves of the token when the function is called.\n *\n * @param token Address of the token\n * @param amountHint Amount paid as reported by the caller\n * @return credit Credit received in return of the payment\n */\n function settle(IERC20 token, uint256 amountHint) external returns (uint256 credit);\n\n /**\n * @notice Sends tokens to a recipient.\n * @dev There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel\n * debts.\n *\n * @param token Address of the token\n * @param to Recipient address\n * @param amount Amount of tokens to send\n */\n function sendTo(IERC20 token, address to, uint256 amount) external;\n\n /***************************************************************************\n Swaps\n ***************************************************************************/\n\n /**\n * @notice Swaps tokens based on provided parameters.\n * @dev All parameters are given in raw token decimal encoding.\n * @param vaultSwapParams Parameters for the swap (see above for struct definition)\n * @return amountCalculatedRaw Calculated swap amount\n * @return amountInRaw Amount of input tokens for the swap\n * @return amountOutRaw Amount of output tokens from the swap\n */\n function swap(\n VaultSwapParams memory vaultSwapParams\n ) external returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Adds liquidity to a pool.\n * @dev Caution should be exercised when adding liquidity because the Vault has the capability\n * to transfer tokens from any user, given that it holds all allowances.\n *\n * @param params Parameters for the add liquidity (see above for struct definition)\n * @return amountsIn Actual amounts of input tokens\n * @return bptAmountOut Output pool token amount\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function addLiquidity(\n AddLiquidityParams memory params\n ) external returns (uint256[] memory amountsIn, uint256 bptAmountOut, bytes memory returnData);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Removes liquidity from a pool.\n * @dev Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user.\n * Untrusted routers require prior approval from the user. This is the only function allowed to call\n * _queryModeBalanceIncrease (and only in a query context).\n *\n * @param params Parameters for the remove liquidity (see above for struct definition)\n * @return bptAmountIn Actual amount of BPT burned\n * @return amountsOut Actual amounts of output tokens\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function removeLiquidity(\n RemoveLiquidityParams memory params\n ) external returns (uint256 bptAmountIn, uint256[] memory amountsOut, bytes memory returnData);\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /**\n * @notice Gets the index of a token in a given pool.\n * @dev Reverts if the pool is not registered, or if the token does not belong to the pool.\n * @param pool Address of the pool\n * @param token Address of the token\n * @return tokenCount Number of tokens in the pool\n * @return index Index corresponding to the given token in the pool's token list\n */\n function getPoolTokenCountAndIndexOfToken(\n address pool,\n IERC20 token\n ) external view returns (uint256 tokenCount, uint256 index);\n\n /*******************************************************************************\n Balancer Pool Tokens\n *******************************************************************************/\n\n /**\n * @notice Transfers pool token from owner to a recipient.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param owner Address of the owner\n * @param to Address of the recipient\n * @param amount Amount of tokens to transfer\n * @return success True if successful, false otherwise\n */\n function transfer(address owner, address to, uint256 amount) external returns (bool);\n\n /**\n * @notice Transfers pool token from a sender to a recipient using an allowance.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param spender Address allowed to perform the transfer\n * @param from Address of the sender\n * @param to Address of the recipient\n * @param amount Amount of tokens to transfer\n * @return success True if successful, false otherwise\n */\n function transferFrom(address spender, address from, address to, uint256 amount) external returns (bool success);\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Wraps/unwraps tokens based on the parameters provided.\n * @dev All parameters are given in raw token decimal encoding. It requires the buffer to be initialized,\n * and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\n *\n * @param params Parameters for the wrap/unwrap operation (see struct definition)\n * @return amountCalculatedRaw Calculated swap amount\n * @return amountInRaw Amount of input tokens for the swap\n * @return amountOutRaw Amount of output tokens from the swap\n */\n function erc4626BufferWrapOrUnwrap(\n BufferWrapOrUnwrapParams memory params\n ) external returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw);\n\n /*******************************************************************************\n Miscellaneous\n *******************************************************************************/\n\n /**\n * @notice Returns the VaultExtension contract address.\n * @dev Function is in the main Vault contract. The VaultExtension handles less critical or frequently used\n * functions, since delegate calls through the Vault are more expensive than direct calls.\n *\n * @return vaultExtension Address of the VaultExtension\n */\n function getVaultExtension() external view returns (address vaultExtension);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IRateProvider } from \"../solidity-utils/helpers/IRateProvider.sol\";\n\n/**\n * @notice Represents a pool's liquidity management configuration.\n * @param disableUnbalancedLiquidity If set, liquidity can only be added or removed proportionally\n * @param enableAddLiquidityCustom If set, the pool has implemented `onAddLiquidityCustom`\n * @param enableRemoveLiquidityCustom If set, the pool has implemented `onRemoveLiquidityCustom`\n * @param enableDonation If set, the pool will not revert if liquidity is added with AddLiquidityKind.DONATION\n */\nstruct LiquidityManagement {\n bool disableUnbalancedLiquidity;\n bool enableAddLiquidityCustom;\n bool enableRemoveLiquidityCustom;\n bool enableDonation;\n}\n\n// @notice Custom type to store the entire configuration of the pool.\ntype PoolConfigBits is bytes32;\n\n/**\n * @notice Represents a pool's configuration (hooks configuration are separated in another struct).\n * @param liquidityManagement Flags related to adding/removing liquidity\n * @param staticSwapFeePercentage The pool's native swap fee\n * @param aggregateSwapFeePercentage The total swap fee charged, including protocol and pool creator components\n * @param aggregateYieldFeePercentage The total swap fee charged, including protocol and pool creator components\n * @param tokenDecimalDiffs Compressed storage of the token decimals of each pool token\n * @param pauseWindowEndTime Timestamp after which the pool cannot be paused\n * @param isPoolRegistered If true, the pool has been registered with the Vault\n * @param isPoolInitialized If true, the pool has been initialized with liquidity, and is available for trading\n * @param isPoolPaused If true, the pool has been paused (by governance or the pauseManager)\n * @param isPoolInRecoveryMode If true, the pool has been placed in recovery mode, enabling recovery mode withdrawals\n */\nstruct PoolConfig {\n LiquidityManagement liquidityManagement;\n uint256 staticSwapFeePercentage;\n uint256 aggregateSwapFeePercentage;\n uint256 aggregateYieldFeePercentage;\n uint40 tokenDecimalDiffs;\n uint32 pauseWindowEndTime;\n bool isPoolRegistered;\n bool isPoolInitialized;\n bool isPoolPaused;\n bool isPoolInRecoveryMode;\n}\n\n/**\n * @notice The flag portion of the `HooksConfig`.\n * @dev `enableHookAdjustedAmounts` must be true for all contracts that modify the `amountCalculated`\n * in after hooks. Otherwise, the Vault will ignore any \"hookAdjusted\" amounts. Setting any \"shouldCall\"\n * flags to true will cause the Vault to call the corresponding hook during operations.\n */\nstruct HookFlags {\n bool enableHookAdjustedAmounts;\n bool shouldCallBeforeInitialize;\n bool shouldCallAfterInitialize;\n bool shouldCallComputeDynamicSwapFee;\n bool shouldCallBeforeSwap;\n bool shouldCallAfterSwap;\n bool shouldCallBeforeAddLiquidity;\n bool shouldCallAfterAddLiquidity;\n bool shouldCallBeforeRemoveLiquidity;\n bool shouldCallAfterRemoveLiquidity;\n}\n\n/// @notice Represents a hook contract configuration for a pool (HookFlags + hooksContract address).\nstruct HooksConfig {\n bool enableHookAdjustedAmounts;\n bool shouldCallBeforeInitialize;\n bool shouldCallAfterInitialize;\n bool shouldCallComputeDynamicSwapFee;\n bool shouldCallBeforeSwap;\n bool shouldCallAfterSwap;\n bool shouldCallBeforeAddLiquidity;\n bool shouldCallAfterAddLiquidity;\n bool shouldCallBeforeRemoveLiquidity;\n bool shouldCallAfterRemoveLiquidity;\n address hooksContract;\n}\n\n/**\n * @notice Represents temporary state used during a swap operation.\n * @param indexIn The zero-based index of tokenIn\n * @param indexOut The zero-based index of tokenOut\n * @param amountGivenScaled18 The amountGiven (i.e., tokenIn for ExactIn), adjusted for token decimals\n * @param swapFeePercentage The swap fee to be applied (might be static or dynamic)\n */\nstruct SwapState {\n uint256 indexIn;\n uint256 indexOut;\n uint256 amountGivenScaled18;\n uint256 swapFeePercentage;\n}\n\n/**\n * @notice Represents the Vault's configuration.\n * @param isQueryDisabled If set to true, disables query functionality of the Vault. Can be modified by governance\n * @param isVaultPaused If set to true, swaps and add/remove liquidity operations are halted\n * @param areBuffersPaused If set to true, the Vault wrap/unwrap primitives associated with buffers will be disabled\n */\nstruct VaultState {\n bool isQueryDisabled;\n bool isVaultPaused;\n bool areBuffersPaused;\n}\n\n/**\n * @notice Represents the accounts holding certain roles for a given pool. This is passed in on pool registration.\n * @param pauseManager Account empowered to pause/unpause the pool (note that governance can always pause a pool)\n * @param swapFeeManager Account empowered to set static swap fees for a pool (or 0 to delegate to governance)\n * @param poolCreator Account empowered to set the pool creator fee (or 0 if all fees go to the protocol and LPs)\n */\nstruct PoolRoleAccounts {\n address pauseManager;\n address swapFeeManager;\n address poolCreator;\n}\n\n/*******************************************************************************\n Tokens\n*******************************************************************************/\n\n// Note that the following tokens are unsupported by the Vault. This list is not meant to be exhaustive, but covers\n// many common types of tokens that will not work with the Vault architecture. (See https://github.com/d-xo/weird-erc20\n// for examples of token features that are problematic for many protocols.)\n//\n// * Rebasing tokens (e.g., aDAI). The Vault keeps track of token balances in its internal accounting; any token whose\n// balance changes asynchronously (i.e., outside a swap or liquidity operation), would get out-of-sync with this\n// internal accounting. This category would also include \"airdrop\" tokens, whose balances can change unexpectedly.\n//\n// * Double entrypoint (e.g., old Synthetix tokens, now fixed). These could likewise bypass internal accounting by\n// registering the token under one address, then accessing it through another. This is especially troublesome\n// in v3, with the introduction of ERC4626 buffers.\n//\n// * Fee on transfer (e.g., PAXG). The Vault issues credits and debits according to given and calculated token amounts,\n// and settlement assumes that the send/receive transfer functions transfer exactly the given number of tokens.\n// If this is not the case, transactions will not settle. Unlike with the other types, which are fundamentally\n// incompatible, it would be possible to design a Router to handle this - but we didn't try it. In any case, it's\n// not supported in the current Routers.\n//\n// * Tokens with more than 18 decimals (e.g., YAM-V2). The Vault handles token scaling: i.e., handling I/O for\n// amounts in native token decimals, but doing calculations with full 18-decimal precision. This requires reading\n// and storing the decimals for each token. Since virtually all tokens are 18 or fewer decimals, and we have limited\n// storage space, 18 was a reasonable maximum. Unlike the other types, this is enforceable by the Vault. Attempting\n// to register such tokens will revert with `InvalidTokenDecimals`. Of course, we must also be able to read the token\n// decimals, so the Vault only supports tokens that implement `IERC20Metadata.decimals`, and return a value less than\n// or equal to 18.\n//\n// * Token decimals are checked and stored only once, on registration. Valid tokens store their decimals as immutable\n// variables or constants. Malicious tokens that don't respect this basic property would not work anywhere in DeFi.\n//\n// These types of tokens are supported but discouraged, as they don't tend to play well with AMMs generally.\n//\n// * Very low-decimal tokens (e.g., GUSD). The Vault has been extensively tested with 6-decimal tokens (e.g., USDC),\n// but going much below that may lead to unanticipated effects due to precision loss, especially with smaller trade\n// values.\n//\n// * Revert on zero value approval/transfer. The Vault has been tested against these, but peripheral contracts, such\n// as hooks, might not have been designed with this in mind.\n//\n// * Other types from \"weird-erc20,\" such as upgradeable, pausable, or tokens with blocklists. We have seen cases\n// where a token upgrade fails, \"bricking\" the token - and many operations on pools containing that token. Any\n// sort of \"permissioned\" token that can make transfers fail can cause operations on pools containing them to\n// revert. Even Recovery Mode cannot help then, as it does a proportional withdrawal of all tokens. If one of\n// them is bricked, the whole operation will revert. Since v3 does not have \"internal balances\" like v2, there\n// is no recourse.\n//\n// Of course, many tokens in common use have some of these \"features\" (especially centralized stable coins), so\n// we have to support them anyway. Working with common centralized tokens is a risk common to all of DeFi.\n\n/**\n * @notice Token types supported by the Vault.\n * @dev In general, pools may contain any combination of these tokens.\n *\n * STANDARD tokens (e.g., BAL, WETH) have no rate provider.\n * WITH_RATE tokens (e.g., wstETH) require a rate provider. These may be tokens like wstETH, which need to be wrapped\n * because the underlying stETH token is rebasing, and such tokens are unsupported by the Vault. They may also be\n * tokens like sEUR, which track an underlying asset, but are not yield-bearing. Finally, this encompasses\n * yield-bearing ERC4626 tokens, which can be used to facilitate swaps without requiring wrapping or unwrapping\n * in most cases. The `paysYieldFees` flag can be used to indicate whether a token is yield-bearing (e.g., waDAI),\n * not yield-bearing (e.g., sEUR), or yield-bearing but exempt from fees (e.g., in certain nested pools, where\n * yield fees are charged elsewhere).\n *\n * NB: STANDARD must always be the first enum element, so that newly initialized data structures default to Standard.\n */\nenum TokenType {\n STANDARD,\n WITH_RATE\n}\n\n/**\n * @notice Encapsulate the data required for the Vault to support a token of the given type.\n * @dev For STANDARD tokens, the rate provider address must be 0, and paysYieldFees must be false. All WITH_RATE tokens\n * need a rate provider, and may or may not be yield-bearing.\n *\n * At registration time, it is useful to include the token address along with the token parameters in the structure\n * passed to `registerPool`, as the alternative would be parallel arrays, which would be error prone and require\n * validation checks. `TokenConfig` is only used for registration, and is never put into storage (see `TokenInfo`).\n *\n * @param token The token address\n * @param tokenType The token type (see the enum for supported types)\n * @param rateProvider The rate provider for a token (see further documentation above)\n * @param paysYieldFees Flag indicating whether yield fees should be charged on this token\n */\nstruct TokenConfig {\n IERC20 token;\n TokenType tokenType;\n IRateProvider rateProvider;\n bool paysYieldFees;\n}\n\n/**\n * @notice This data structure is stored in `_poolTokenInfo`, a nested mapping from pool -> (token -> TokenInfo).\n * @dev Since the token is already the key of the nested mapping, it would be redundant (and an extra SLOAD) to store\n * it again in the struct. When we construct PoolData, the tokens are separated into their own array.\n *\n * @param tokenType The token type (see the enum for supported types)\n * @param rateProvider The rate provider for a token (see further documentation above)\n * @param paysYieldFees Flag indicating whether yield fees should be charged on this token\n */\nstruct TokenInfo {\n TokenType tokenType;\n IRateProvider rateProvider;\n bool paysYieldFees;\n}\n\n/**\n * @notice Data structure used to represent the current pool state in memory\n * @param poolConfigBits Custom type to store the entire configuration of the pool.\n * @param tokens Pool tokens, sorted in token registration order\n * @param tokenInfo Configuration data for each token, sorted in token registration order\n * @param balancesRaw Token balances in native decimals\n * @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n * @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n * @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n * calculations. It is 1e18 (FP 1) for 18-decimal tokens\n */\nstruct PoolData {\n PoolConfigBits poolConfigBits;\n IERC20[] tokens;\n TokenInfo[] tokenInfo;\n uint256[] balancesRaw;\n uint256[] balancesLiveScaled18;\n uint256[] tokenRates;\n uint256[] decimalScalingFactors;\n}\n\nenum Rounding {\n ROUND_UP,\n ROUND_DOWN\n}\n\n/*******************************************************************************\n Swaps\n*******************************************************************************/\n\nenum SwapKind {\n EXACT_IN,\n EXACT_OUT\n}\n\n// There are two \"SwapParams\" structs defined below. `VaultSwapParams` corresponds to the external swap API defined\n// in the Router contracts, which uses explicit token addresses, the amount given and limit on the calculated amount\n// expressed in native token decimals, and optional user data passed in from the caller.\n//\n// `PoolSwapParams` passes some of this information through (kind, userData), but \"translates\" the parameters to fit\n// the internal swap API used by `IBasePool`. It scales amounts to full 18-decimal precision, adds the token balances,\n// converts the raw token addresses to indices, and adds the address of the Router originating the request. It does\n// not need the limit, since this is checked at the Router level.\n\n/**\n * @notice Data passed into primary Vault `swap` operations.\n * @param kind Type of swap (Exact In or Exact Out)\n * @param pool The pool with the tokens being swapped\n * @param tokenIn The token entering the Vault (balance increases)\n * @param tokenOut The token leaving the Vault (balance decreases)\n * @param amountGivenRaw Amount specified for tokenIn or tokenOut (depending on the type of swap)\n * @param limitRaw Minimum or maximum value of the calculated amount (depending on the type of swap)\n * @param userData Additional (optional) user data\n */\nstruct VaultSwapParams {\n SwapKind kind;\n address pool;\n IERC20 tokenIn;\n IERC20 tokenOut;\n uint256 amountGivenRaw;\n uint256 limitRaw;\n bytes userData;\n}\n\n/**\n * @notice Data for a swap operation, used by contracts implementing `IBasePool`.\n * @param kind Type of swap (exact in or exact out)\n * @param amountGivenScaled18 Amount given based on kind of the swap (e.g., tokenIn for EXACT_IN)\n * @param balancesScaled18 Current pool balances\n * @param indexIn Index of tokenIn\n * @param indexOut Index of tokenOut\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param userData Additional (optional) data required for the swap\n */\nstruct PoolSwapParams {\n SwapKind kind;\n uint256 amountGivenScaled18;\n uint256[] balancesScaled18;\n uint256 indexIn;\n uint256 indexOut;\n address router;\n bytes userData;\n}\n\n/**\n * @notice Data for the hook after a swap operation.\n * @param kind Type of swap (exact in or exact out)\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param amountInScaled18 Amount of tokenIn (entering the Vault)\n * @param amountOutScaled18 Amount of tokenOut (leaving the Vault)\n * @param tokenInBalanceScaled18 Updated (after swap) balance of tokenIn\n * @param tokenOutBalanceScaled18 Updated (after swap) balance of tokenOut\n * @param amountCalculatedScaled18 Token amount calculated by the swap\n * @param amountCalculatedRaw Token amount calculated by the swap\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param pool Pool address\n * @param userData Additional (optional) data required for the swap\n */\nstruct AfterSwapParams {\n SwapKind kind;\n IERC20 tokenIn;\n IERC20 tokenOut;\n uint256 amountInScaled18;\n uint256 amountOutScaled18;\n uint256 tokenInBalanceScaled18;\n uint256 tokenOutBalanceScaled18;\n uint256 amountCalculatedScaled18;\n uint256 amountCalculatedRaw;\n address router;\n address pool;\n bytes userData;\n}\n\n/*******************************************************************************\n Add liquidity\n*******************************************************************************/\n\nenum AddLiquidityKind {\n PROPORTIONAL,\n UNBALANCED,\n SINGLE_TOKEN_EXACT_OUT,\n DONATION,\n CUSTOM\n}\n\n/**\n * @notice Data for an add liquidity operation.\n * @param pool Address of the pool\n * @param to Address of user to mint to\n * @param maxAmountsIn Maximum amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param kind Add liquidity kind\n * @param userData Optional user data\n */\nstruct AddLiquidityParams {\n address pool;\n address to;\n uint256[] maxAmountsIn;\n uint256 minBptAmountOut;\n AddLiquidityKind kind;\n bytes userData;\n}\n\n/*******************************************************************************\n Remove liquidity\n*******************************************************************************/\n\nenum RemoveLiquidityKind {\n PROPORTIONAL,\n SINGLE_TOKEN_EXACT_IN,\n SINGLE_TOKEN_EXACT_OUT,\n CUSTOM\n}\n\n/**\n * @notice Data for an remove liquidity operation.\n * @param pool Address of the pool\n * @param from Address of user to burn from\n * @param maxBptAmountIn Maximum amount of input pool tokens\n * @param minAmountsOut Minimum amounts of output tokens\n * @param kind Remove liquidity kind\n * @param userData Optional user data\n */\nstruct RemoveLiquidityParams {\n address pool;\n address from;\n uint256 maxBptAmountIn;\n uint256[] minAmountsOut;\n RemoveLiquidityKind kind;\n bytes userData;\n}\n\n/*******************************************************************************\n Remove liquidity\n*******************************************************************************/\n\nenum WrappingDirection {\n WRAP,\n UNWRAP\n}\n\n/**\n * @notice Data for a wrap/unwrap operation.\n * @param kind Type of swap (Exact In or Exact Out)\n * @param direction Direction of the wrapping operation (Wrap or Unwrap)\n * @param wrappedToken Wrapped token, compatible with interface ERC4626\n * @param amountGivenRaw Amount specified for tokenIn or tokenOut (depends on the type of swap and wrapping direction)\n * @param limitRaw Minimum or maximum amount specified for the other token (depends on the type of swap and wrapping\n * direction)\n */\nstruct BufferWrapOrUnwrapParams {\n SwapKind kind;\n WrappingDirection direction;\n IERC4626 wrappedToken;\n uint256 amountGivenRaw;\n uint256 limitRaw;\n}\n\n// Protocol Fees are 24-bit values. We transform them by multiplying by 1e11, so that they can be set to any value\n// between 0% and 100% (step 0.00001%). Protocol and pool creator fees are set in the `ProtocolFeeController`, and\n// ensure both constituent and aggregate fees do not exceed this precision.\nuint256 constant FEE_BITLENGTH = 24;\nuint256 constant FEE_SCALING_FACTOR = 1e11;\n// Used to ensure the safety of fee-related math (e.g., pools or hooks don't set it greater than 100%).\n// This value should work for practical purposes and is well within the max precision requirements.\nuint256 constant MAX_FEE_PERCENTAGE = 99.9999e16; // 99.9999%\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\";\n\n/**\n * @notice Building block for performing access control on external functions.\n * @dev This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be\n * applied to external functions to make them only callable by authorized accounts.\n *\n * Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.\n */\nabstract contract Authentication is IAuthentication {\n bytes32 private immutable _actionIdDisambiguator;\n\n /**\n * @dev The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in\n * multi-contract systems.\n *\n * There are two main uses for it:\n * - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers\n * unique. The contract's own address is a good option.\n * - if the contract belongs to a family that shares action identifiers for the same functions, an identifier\n * shared by the entire family (and no other contract) should be used instead.\n */\n constructor(bytes32 actionIdDisambiguator) {\n _actionIdDisambiguator = actionIdDisambiguator;\n }\n\n /// @dev Reverts unless the caller is allowed to call this function. Should only be applied to external functions.\n modifier authenticate() {\n _authenticateCaller();\n _;\n }\n\n /// @dev Reverts unless the caller is allowed to call the entry point function.\n function _authenticateCaller() internal view {\n bytes32 actionId = getActionId(msg.sig);\n\n if (!_canPerform(actionId, msg.sender)) {\n revert SenderNotAllowed();\n }\n }\n\n /// @inheritdoc IAuthentication\n function getActionId(bytes4 selector) public view override returns (bytes32) {\n // Each external function is dynamically assigned an action identifier as the hash of the disambiguator and the\n // function selector. Disambiguation is necessary to avoid potential collisions in the function selectors of\n // multiple contracts.\n return keccak256(abi.encodePacked(_actionIdDisambiguator, selector));\n }\n\n /**\n * @dev Derived contracts must implement this function to perform the actual access control logic.\n * @param actionId The action identifier associated with an external function\n * @param user The account performing the action\n * @return success True if the action is permitted\n */\n function _canPerform(bytes32 actionId, address user) internal view virtual returns (bool);\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { LogExpMath } from \"./LogExpMath.sol\";\n\n/// @notice Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision.\nlibrary FixedPoint {\n /// @notice Attempted division by zero.\n error ZeroDivision();\n\n // solhint-disable no-inline-assembly\n // solhint-disable private-vars-leading-underscore\n\n uint256 internal constant ONE = 1e18; // 18 decimal places\n uint256 internal constant TWO = 2 * ONE;\n uint256 internal constant FOUR = 4 * ONE;\n uint256 internal constant MAX_POW_RELATIVE_ERROR = 10000; // 10^(-14)\n\n function mulDown(uint256 a, uint256 b) internal pure returns (uint256) {\n // Multiplication overflow protection is provided by Solidity 0.8.x.\n uint256 product = a * b;\n\n return product / ONE;\n }\n\n function mulUp(uint256 a, uint256 b) internal pure returns (uint256 result) {\n // Multiplication overflow protection is provided by Solidity 0.8.x.\n uint256 product = a * b;\n\n // Equivalent to:\n // result = product == 0 ? 0 : ((product - 1) / FixedPoint.ONE) + 1\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(product)), add(div(sub(product, 1), ONE), 1))\n }\n }\n\n function divDown(uint256 a, uint256 b) internal pure returns (uint256) {\n // Solidity 0.8 reverts with a Panic code (0x11) if the multiplication overflows.\n uint256 aInflated = a * ONE;\n\n // Solidity 0.8 reverts with a \"Division by Zero\" Panic code (0x12) if b is zero\n return aInflated / b;\n }\n\n function divUp(uint256 a, uint256 b) internal pure returns (uint256 result) {\n return mulDivUp(a, ONE, b);\n }\n\n /// @dev Return (a * b) / c, rounding up.\n function mulDivUp(uint256 a, uint256 b, uint256 c) internal pure returns (uint256 result) {\n // This check is required because Yul's `div` doesn't revert on c==0.\n if (c == 0) {\n revert ZeroDivision();\n }\n\n // Multiple overflow protection is done by Solidity 0.8.x.\n uint256 product = a * b;\n\n // The traditional divUp formula is:\n // divUp(x, y) := (x + y - 1) / y\n // To avoid intermediate overflow in the addition, we distribute the division and get:\n // divUp(x, y) := (x - 1) / y + 1\n // Note that this requires x != 0, if x == 0 then the result is zero\n //\n // Equivalent to:\n // result = a == 0 ? 0 : (a * b - 1) / c + 1\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(product)), add(div(sub(product, 1), c), 1))\n }\n }\n\n /**\n * @dev Version of divUp when the input is raw (i.e., already \"inflated\"). For instance,\n * invariant * invariant (36 decimals) vs. invariant.mulDown(invariant) (18 decimal FP).\n * This can occur in calculations with many successive multiplications and divisions, and\n * we want to minimize the number of operations by avoiding unnecessary scaling by ONE.\n */\n function divUpRaw(uint256 a, uint256 b) internal pure returns (uint256 result) {\n // This check is required because Yul's `div` doesn't revert on b==0.\n if (b == 0) {\n revert ZeroDivision();\n }\n\n // Equivalent to:\n // result = a == 0 ? 0 : 1 + (a - 1) / b\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(a)), add(1, div(sub(a, 1), b)))\n }\n }\n\n /**\n * @dev Returns x^y, assuming both are fixed point numbers, rounding down. The result is guaranteed to not be above\n * the true value (that is, the error function expected - actual is always positive).\n */\n function powDown(uint256 x, uint256 y) internal pure returns (uint256) {\n // Optimize for when y equals 1.0, 2.0 or 4.0, as those are very simple to implement and occur often in 50/50\n // and 80/20 Weighted Pools\n if (y == ONE) {\n return x;\n } else if (y == TWO) {\n return mulDown(x, x);\n } else if (y == FOUR) {\n uint256 square = mulDown(x, x);\n return mulDown(square, square);\n } else {\n uint256 raw = LogExpMath.pow(x, y);\n uint256 maxError = mulUp(raw, MAX_POW_RELATIVE_ERROR) + 1;\n\n if (raw < maxError) {\n return 0;\n } else {\n unchecked {\n return raw - maxError;\n }\n }\n }\n }\n\n /**\n * @dev Returns x^y, assuming both are fixed point numbers, rounding up. The result is guaranteed to not be below\n * the true value (that is, the error function expected - actual is always negative).\n */\n function powUp(uint256 x, uint256 y) internal pure returns (uint256) {\n // Optimize for when y equals 1.0, 2.0 or 4.0, as those are very simple to implement and occur often in 50/50\n // and 80/20 Weighted Pools\n if (y == ONE) {\n return x;\n } else if (y == TWO) {\n return mulUp(x, x);\n } else if (y == FOUR) {\n uint256 square = mulUp(x, x);\n return mulUp(square, square);\n } else {\n uint256 raw = LogExpMath.pow(x, y);\n uint256 maxError = mulUp(raw, MAX_POW_RELATIVE_ERROR) + 1;\n\n return raw + maxError;\n }\n }\n\n /**\n * @dev Returns the complement of a value (1 - x), capped to 0 if x is larger than 1.\n *\n * Useful when computing the complement for values with some level of relative error, as it strips this error and\n * prevents intermediate negative values.\n */\n function complement(uint256 x) internal pure returns (uint256 result) {\n // Equivalent to:\n // result = (x < ONE) ? (ONE - x) : 0\n assembly (\"memory-safe\") {\n result := mul(lt(x, ONE), sub(ONE, x))\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\n// solhint-disable\n\n/**\n * @dev Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument).\n *\n * Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural\n * exponentiation and logarithm (where the base is Euler's number).\n *\n * All math operations are unchecked in order to save gas.\n *\n * @author Fernando Martinelli - @fernandomartinelli\n * @author Sergio Yuhjtman - @sergioyuhjtman\n * @author Daniel Fernandez - @dmf7z\n */\nlibrary LogExpMath {\n /// @notice This error is thrown when a base is not within an acceptable range.\n error BaseOutOfBounds();\n\n /// @notice This error is thrown when a exponent is not within an acceptable range.\n error ExponentOutOfBounds();\n\n /// @notice This error is thrown when the exponent * ln(base) is not within an acceptable range.\n error ProductOutOfBounds();\n\n /// @notice This error is thrown when an exponent used in the exp function is not within an acceptable range.\n error InvalidExponent();\n\n /// @notice This error is thrown when a variable or result is not within the acceptable bounds defined in the function.\n error OutOfBounds();\n\n // All fixed point multiplications and divisions are inlined. This means we need to divide by ONE when multiplying\n // two numbers, and multiply by ONE when dividing them.\n\n // All arguments and return values are 18 decimal fixed point numbers.\n int256 constant ONE_18 = 1e18;\n\n // Internally, intermediate values are computed with higher precision as 20 decimal fixed point numbers, and in the\n // case of ln36, 36 decimals.\n int256 constant ONE_20 = 1e20;\n int256 constant ONE_36 = 1e36;\n\n // The domain of natural exponentiation is bound by the word size and number of decimals used.\n //\n // Because internally the result will be stored using 20 decimals, the largest possible result is\n // (2^255 - 1) / 10^20, which makes the largest exponent ln((2^255 - 1) / 10^20) = 130.700829182905140221.\n // The smallest possible result is 10^(-18), which makes largest negative argument\n // ln(10^(-18)) = -41.446531673892822312.\n // We use 130.0 and -41.0 to have some safety margin.\n int256 constant MAX_NATURAL_EXPONENT = 130e18;\n int256 constant MIN_NATURAL_EXPONENT = -41e18;\n\n // Bounds for ln_36's argument. Both ln(0.9) and ln(1.1) can be represented with 36 decimal places in a fixed point\n // 256 bit integer.\n int256 constant LN_36_LOWER_BOUND = ONE_18 - 1e17;\n int256 constant LN_36_UPPER_BOUND = ONE_18 + 1e17;\n\n uint256 constant MILD_EXPONENT_BOUND = 2 ** 254 / uint256(ONE_20);\n\n // 18 decimal constants\n int256 constant x0 = 128000000000000000000; // 2ˆ7\n int256 constant a0 = 38877084059945950922200000000000000000000000000000000000; // eˆ(x0) (no decimals)\n int256 constant x1 = 64000000000000000000; // 2ˆ6\n int256 constant a1 = 6235149080811616882910000000; // eˆ(x1) (no decimals)\n\n // 20 decimal constants\n int256 constant x2 = 3200000000000000000000; // 2ˆ5\n int256 constant a2 = 7896296018268069516100000000000000; // eˆ(x2)\n int256 constant x3 = 1600000000000000000000; // 2ˆ4\n int256 constant a3 = 888611052050787263676000000; // eˆ(x3)\n int256 constant x4 = 800000000000000000000; // 2ˆ3\n int256 constant a4 = 298095798704172827474000; // eˆ(x4)\n int256 constant x5 = 400000000000000000000; // 2ˆ2\n int256 constant a5 = 5459815003314423907810; // eˆ(x5)\n int256 constant x6 = 200000000000000000000; // 2ˆ1\n int256 constant a6 = 738905609893065022723; // eˆ(x6)\n int256 constant x7 = 100000000000000000000; // 2ˆ0\n int256 constant a7 = 271828182845904523536; // eˆ(x7)\n int256 constant x8 = 50000000000000000000; // 2ˆ-1\n int256 constant a8 = 164872127070012814685; // eˆ(x8)\n int256 constant x9 = 25000000000000000000; // 2ˆ-2\n int256 constant a9 = 128402541668774148407; // eˆ(x9)\n int256 constant x10 = 12500000000000000000; // 2ˆ-3\n int256 constant a10 = 113314845306682631683; // eˆ(x10)\n int256 constant x11 = 6250000000000000000; // 2ˆ-4\n int256 constant a11 = 106449445891785942956; // eˆ(x11)\n\n /**\n * @dev Exponentiation (x^y) with unsigned 18 decimal fixed point base and exponent.\n *\n * Reverts if ln(x) * y is smaller than `MIN_NATURAL_EXPONENT`, or larger than `MAX_NATURAL_EXPONENT`.\n */\n function pow(uint256 x, uint256 y) internal pure returns (uint256) {\n if (y == 0) {\n // We solve the 0^0 indetermination by making it equal one.\n return uint256(ONE_18);\n }\n\n if (x == 0) {\n return 0;\n }\n\n // Instead of computing x^y directly, we instead rely on the properties of logarithms and exponentiation to\n // arrive at that result. In particular, exp(ln(x)) = x, and ln(x^y) = y * ln(x). This means\n // x^y = exp(y * ln(x)).\n\n // The ln function takes a signed value, so we need to make sure x fits in the signed 256 bit range.\n if (x >> 255 != 0) {\n revert BaseOutOfBounds();\n }\n int256 x_int256 = int256(x);\n\n // We will compute y * ln(x) in a single step. Depending on the value of x, we can either use ln or ln_36. In\n // both cases, we leave the division by ONE_18 (due to fixed point multiplication) to the end.\n\n // This prevents y * ln(x) from overflowing, and at the same time guarantees y fits in the signed 256 bit range.\n if (y >= MILD_EXPONENT_BOUND) {\n revert ExponentOutOfBounds();\n }\n int256 y_int256 = int256(y);\n\n int256 logx_times_y;\n unchecked {\n if (LN_36_LOWER_BOUND < x_int256 && x_int256 < LN_36_UPPER_BOUND) {\n int256 ln_36_x = _ln_36(x_int256);\n\n // ln_36_x has 36 decimal places, so multiplying by y_int256 isn't as straightforward, since we can't just\n // bring y_int256 to 36 decimal places, as it might overflow. Instead, we perform two 18 decimal\n // multiplications and add the results: one with the first 18 decimals of ln_36_x, and one with the\n // (downscaled) last 18 decimals.\n logx_times_y = ((ln_36_x / ONE_18) * y_int256 + ((ln_36_x % ONE_18) * y_int256) / ONE_18);\n } else {\n logx_times_y = _ln(x_int256) * y_int256;\n }\n logx_times_y /= ONE_18;\n }\n\n // Finally, we compute exp(y * ln(x)) to arrive at x^y\n if (!(MIN_NATURAL_EXPONENT <= logx_times_y && logx_times_y <= MAX_NATURAL_EXPONENT)) {\n revert ProductOutOfBounds();\n }\n\n return uint256(exp(logx_times_y));\n }\n\n /**\n * @dev Natural exponentiation (e^x) with signed 18 decimal fixed point exponent.\n *\n * Reverts if `x` is smaller than MIN_NATURAL_EXPONENT, or larger than `MAX_NATURAL_EXPONENT`.\n */\n function exp(int256 x) internal pure returns (int256) {\n if (!(x >= MIN_NATURAL_EXPONENT && x <= MAX_NATURAL_EXPONENT)) {\n revert InvalidExponent();\n }\n\n // We avoid using recursion here because zkSync doesn't support it.\n bool negativeExponent = false;\n\n if (x < 0) {\n // We only handle positive exponents: e^(-x) is computed as 1 / e^x. We can safely make x positive since it\n // fits in the signed 256 bit range (as it is larger than MIN_NATURAL_EXPONENT). In the negative\n // exponent case, compute e^x, then return 1 / result.\n unchecked {\n x = -x;\n }\n negativeExponent = true;\n }\n\n // First, we use the fact that e^(x+y) = e^x * e^y to decompose x into a sum of powers of two, which we call x_n,\n // where x_n == 2^(7 - n), and e^x_n = a_n has been precomputed. We choose the first x_n, x0, to equal 2^7\n // because all larger powers are larger than MAX_NATURAL_EXPONENT, and therefore not present in the\n // decomposition.\n // At the end of this process we will have the product of all e^x_n = a_n that apply, and the remainder of this\n // decomposition, which will be lower than the smallest x_n.\n // exp(x) = k_0 * a_0 * k_1 * a_1 * ... + k_n * a_n * exp(remainder), where each k_n equals either 0 or 1.\n // We mutate x by subtracting x_n, making it the remainder of the decomposition.\n\n // The first two a_n (e^(2^7) and e^(2^6)) are too large if stored as 18 decimal numbers, and could cause\n // intermediate overflows. Instead we store them as plain integers, with 0 decimals.\n // Additionally, x0 + x1 is larger than MAX_NATURAL_EXPONENT, which means they will not both be present in the\n // decomposition.\n\n // For each x_n, we test if that term is present in the decomposition (if x is larger than it), and if so deduct\n // it and compute the accumulated product.\n\n int256 firstAN;\n unchecked {\n if (x >= x0) {\n x -= x0;\n firstAN = a0;\n } else if (x >= x1) {\n x -= x1;\n firstAN = a1;\n } else {\n firstAN = 1; // One with no decimal places\n }\n\n // We now transform x into a 20 decimal fixed point number, to have enhanced precision when computing the\n // smaller terms.\n x *= 100;\n }\n\n // `product` is the accumulated product of all a_n (except a0 and a1), which starts at 20 decimal fixed point\n // one. Recall that fixed point multiplication requires dividing by ONE_20.\n int256 product = ONE_20;\n\n unchecked {\n if (x >= x2) {\n x -= x2;\n product = (product * a2) / ONE_20;\n }\n if (x >= x3) {\n x -= x3;\n product = (product * a3) / ONE_20;\n }\n if (x >= x4) {\n x -= x4;\n product = (product * a4) / ONE_20;\n }\n if (x >= x5) {\n x -= x5;\n product = (product * a5) / ONE_20;\n }\n if (x >= x6) {\n x -= x6;\n product = (product * a6) / ONE_20;\n }\n if (x >= x7) {\n x -= x7;\n product = (product * a7) / ONE_20;\n }\n if (x >= x8) {\n x -= x8;\n product = (product * a8) / ONE_20;\n }\n if (x >= x9) {\n x -= x9;\n product = (product * a9) / ONE_20;\n }\n }\n\n // x10 and x11 are unnecessary here since we have high enough precision already.\n\n // Now we need to compute e^x, where x is small (in particular, it is smaller than x9). We use the Taylor series\n // expansion for e^x: 1 + x + (x^2 / 2!) + (x^3 / 3!) + ... + (x^n / n!).\n\n int256 seriesSum = ONE_20; // The initial one in the sum, with 20 decimal places.\n int256 term; // Each term in the sum, where the nth term is (x^n / n!).\n\n // The first term is simply x.\n term = x;\n unchecked {\n seriesSum += term;\n\n // Each term (x^n / n!) equals the previous one times x, divided by n. Since x is a fixed point number,\n // multiplying by it requires dividing by ONE_20, but dividing by the non-fixed point n values does not.\n\n term = ((term * x) / ONE_20) / 2;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 3;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 4;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 5;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 6;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 7;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 8;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 9;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 10;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 11;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 12;\n seriesSum += term;\n\n // 12 Taylor terms are sufficient for 18 decimal precision.\n\n // We now have the first a_n (with no decimals), and the product of all other a_n present, and the Taylor\n // approximation of the exponentiation of the remainder (both with 20 decimals). All that remains is to multiply\n // all three (one 20 decimal fixed point multiplication, dividing by ONE_20, and one integer multiplication),\n // and then drop two digits to return an 18 decimal value.\n\n int256 result = (((product * seriesSum) / ONE_20) * firstAN) / 100;\n\n // We avoid using recursion here because zkSync doesn't support it.\n return negativeExponent ? (ONE_18 * ONE_18) / result : result;\n }\n }\n\n /// @dev Logarithm (log(arg, base), with signed 18 decimal fixed point base and argument.\n function log(int256 arg, int256 base) internal pure returns (int256) {\n // This performs a simple base change: log(arg, base) = ln(arg) / ln(base).\n\n // Both logBase and logArg are computed as 36 decimal fixed point numbers, either by using ln_36, or by\n // upscaling.\n\n int256 logBase;\n unchecked {\n if (LN_36_LOWER_BOUND < base && base < LN_36_UPPER_BOUND) {\n logBase = _ln_36(base);\n } else {\n logBase = _ln(base) * ONE_18;\n }\n }\n\n int256 logArg;\n unchecked {\n if (LN_36_LOWER_BOUND < arg && arg < LN_36_UPPER_BOUND) {\n logArg = _ln_36(arg);\n } else {\n logArg = _ln(arg) * ONE_18;\n }\n\n // When dividing, we multiply by ONE_18 to arrive at a result with 18 decimal places\n return (logArg * ONE_18) / logBase;\n }\n }\n\n /// @dev Natural logarithm (ln(a)) with signed 18 decimal fixed point argument.\n function ln(int256 a) internal pure returns (int256) {\n // The real natural logarithm is not defined for negative numbers or zero.\n if (a <= 0) {\n revert OutOfBounds();\n }\n if (LN_36_LOWER_BOUND < a && a < LN_36_UPPER_BOUND) {\n unchecked {\n return _ln_36(a) / ONE_18;\n }\n } else {\n return _ln(a);\n }\n }\n\n /// @dev Internal natural logarithm (ln(a)) with signed 18 decimal fixed point argument.\n function _ln(int256 a) private pure returns (int256) {\n // We avoid using recursion here because zkSync doesn't support it.\n bool negativeExponent = false;\n\n if (a < ONE_18) {\n // Since ln(a^k) = k * ln(a), we can compute ln(a) as ln(a) = ln((1/a)^(-1)) = - ln((1/a)). If a is less\n // than one, 1/a will be greater than one, so in this case we compute ln(1/a) and negate the final result.\n unchecked {\n a = (ONE_18 * ONE_18) / a;\n }\n negativeExponent = true;\n }\n\n // First, we use the fact that ln^(a * b) = ln(a) + ln(b) to decompose ln(a) into a sum of powers of two, which\n // we call x_n, where x_n == 2^(7 - n), which are the natural logarithm of precomputed quantities a_n (that is,\n // ln(a_n) = x_n). We choose the first x_n, x0, to equal 2^7 because the exponential of all larger powers cannot\n // be represented as 18 fixed point decimal numbers in 256 bits, and are therefore larger than a.\n // At the end of this process we will have the sum of all x_n = ln(a_n) that apply, and the remainder of this\n // decomposition, which will be lower than the smallest a_n.\n // ln(a) = k_0 * x_0 + k_1 * x_1 + ... + k_n * x_n + ln(remainder), where each k_n equals either 0 or 1.\n // We mutate a by subtracting a_n, making it the remainder of the decomposition.\n\n // For reasons related to how `exp` works, the first two a_n (e^(2^7) and e^(2^6)) are not stored as fixed point\n // numbers with 18 decimals, but instead as plain integers with 0 decimals, so we need to multiply them by\n // ONE_18 to convert them to fixed point.\n // For each a_n, we test if that term is present in the decomposition (if a is larger than it), and if so divide\n // by it and compute the accumulated sum.\n\n int256 sum = 0;\n unchecked {\n if (a >= a0 * ONE_18) {\n a /= a0; // Integer, not fixed point division\n sum += x0;\n }\n\n if (a >= a1 * ONE_18) {\n a /= a1; // Integer, not fixed point division\n sum += x1;\n }\n\n // All other a_n and x_n are stored as 20 digit fixed point numbers, so we convert the sum and a to this format.\n sum *= 100;\n a *= 100;\n\n // Because further a_n are 20 digit fixed point numbers, we multiply by ONE_20 when dividing by them.\n\n if (a >= a2) {\n a = (a * ONE_20) / a2;\n sum += x2;\n }\n\n if (a >= a3) {\n a = (a * ONE_20) / a3;\n sum += x3;\n }\n\n if (a >= a4) {\n a = (a * ONE_20) / a4;\n sum += x4;\n }\n\n if (a >= a5) {\n a = (a * ONE_20) / a5;\n sum += x5;\n }\n\n if (a >= a6) {\n a = (a * ONE_20) / a6;\n sum += x6;\n }\n\n if (a >= a7) {\n a = (a * ONE_20) / a7;\n sum += x7;\n }\n\n if (a >= a8) {\n a = (a * ONE_20) / a8;\n sum += x8;\n }\n\n if (a >= a9) {\n a = (a * ONE_20) / a9;\n sum += x9;\n }\n\n if (a >= a10) {\n a = (a * ONE_20) / a10;\n sum += x10;\n }\n\n if (a >= a11) {\n a = (a * ONE_20) / a11;\n sum += x11;\n }\n }\n\n // a is now a small number (smaller than a_11, which roughly equals 1.06). This means we can use a Taylor series\n // that converges rapidly for values of `a` close to one - the same one used in ln_36.\n // Let z = (a - 1) / (a + 1).\n // ln(a) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 20 digit fixed point division requires multiplying by ONE_20, and multiplication requires\n // division by ONE_20.\n unchecked {\n int256 z = ((a - ONE_20) * ONE_20) / (a + ONE_20);\n int256 z_squared = (z * z) / ONE_20;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n int256 num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n int256 seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 3;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 5;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 7;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 9;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 11;\n\n // 6 Taylor terms are sufficient for 36 decimal precision.\n\n // Finally, we multiply by 2 (non fixed point) to compute ln(remainder)\n seriesSum *= 2;\n\n // We now have the sum of all x_n present, and the Taylor approximation of the logarithm of the remainder (both\n // with 20 decimals). All that remains is to sum these two, and then drop two digits to return a 18 decimal\n // value.\n\n int256 result = (sum + seriesSum) / 100;\n\n // We avoid using recursion here because zkSync doesn't support it.\n return negativeExponent ? -result : result;\n }\n }\n\n /**\n * @dev Internal high precision (36 decimal places) natural logarithm (ln(x)) with signed 18 decimal fixed point argument,\n * for x close to one.\n *\n * Should only be used if x is between LN_36_LOWER_BOUND and LN_36_UPPER_BOUND.\n */\n function _ln_36(int256 x) private pure returns (int256) {\n // Since ln(1) = 0, a value of x close to one will yield a very small result, which makes using 36 digits\n // worthwhile.\n\n // First, we transform x to a 36 digit fixed point value.\n unchecked {\n x *= ONE_18;\n\n // We will use the following Taylor expansion, which converges very rapidly. Let z = (x - 1) / (x + 1).\n // ln(x) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 36 digit fixed point division requires multiplying by ONE_36, and multiplication requires\n // division by ONE_36.\n int256 z = ((x - ONE_36) * ONE_36) / (x + ONE_36);\n int256 z_squared = (z * z) / ONE_36;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n int256 num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n int256 seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 3;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 5;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 7;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 9;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 11;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 13;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 15;\n\n // 8 Taylor terms are sufficient for 36 decimal precision.\n\n // All that remains is multiplying by 2 (non fixed point).\n return seriesSum * 2;\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\nimport { StorageSlotExtension } from \"./StorageSlotExtension.sol\";\n\n/**\n * @notice Variant of {ReentrancyGuard} that uses transient storage.\n * @dev NOTE: This variant only works on networks where EIP-1153 is available.\n */\nabstract contract ReentrancyGuardTransient {\n using StorageSlotExtension for *;\n\n // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.ReentrancyGuard\")) - 1)) & ~bytes32(uint256(0xff))\n bytes32 private constant _REENTRANCY_GUARD_STORAGE =\n 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00;\n\n /// @notice Unauthorized reentrant call.\n error ReentrancyGuardReentrantCall();\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and making it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n _nonReentrantBefore();\n _;\n _nonReentrantAfter();\n }\n\n function _nonReentrantBefore() private {\n // On the first call to nonReentrant, _status will be NOT_ENTERED.\n if (_reentrancyGuardEntered()) {\n revert ReentrancyGuardReentrantCall();\n }\n\n // Any calls to nonReentrant after this point will fail.\n _REENTRANCY_GUARD_STORAGE.asBoolean().tstore(true);\n }\n\n function _nonReentrantAfter() private {\n _REENTRANCY_GUARD_STORAGE.asBoolean().tstore(false);\n }\n\n /**\n * @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n * `nonReentrant` function in the call stack.\n */\n function _reentrancyGuardEntered() internal view returns (bool) {\n return _REENTRANCY_GUARD_STORAGE.asBoolean().tload();\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\n * @dev TIP: Consider using this library along with {SlotDerivation}.\n */\nlibrary StorageSlotExtension {\n struct Int256Slot {\n int256 value;\n }\n\n /// @dev Returns an `Int256Slot` with member `value` located at `slot`.\n function getInt256Slot(bytes32 slot) internal pure returns (Int256Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /// @dev Custom type that represents a slot holding an address.\n type AddressSlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a AddressSlotType.\n function asAddress(bytes32 slot) internal pure returns (AddressSlotType) {\n return AddressSlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a boolean.\n type BooleanSlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a BooleanSlotType.\n function asBoolean(bytes32 slot) internal pure returns (BooleanSlotType) {\n return BooleanSlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a bytes32.\n type Bytes32SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a Bytes32SlotType.\n function asBytes32(bytes32 slot) internal pure returns (Bytes32SlotType) {\n return Bytes32SlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a uint256.\n type Uint256SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a Uint256SlotType.\n function asUint256(bytes32 slot) internal pure returns (Uint256SlotType) {\n return Uint256SlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding an int256.\n type Int256SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to an Int256SlotType.\n function asInt256(bytes32 slot) internal pure returns (Int256SlotType) {\n return Int256SlotType.wrap(slot);\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(AddressSlotType slot) internal view returns (address value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(AddressSlotType slot, address value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(BooleanSlotType slot) internal view returns (bool value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(BooleanSlotType slot, bool value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Bytes32SlotType slot) internal view returns (bytes32 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Bytes32SlotType slot, bytes32 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Uint256SlotType slot) internal view returns (uint256 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Uint256SlotType slot, uint256 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Int256SlotType slot) internal view returns (int256 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Int256SlotType slot, int256 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n}\n"},"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport {\n FEE_SCALING_FACTOR,\n MAX_FEE_PERCENTAGE,\n PoolRoleAccounts\n} from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\n\nimport { SingletonAuthentication } from \"./SingletonAuthentication.sol\";\nimport { VaultGuard } from \"./VaultGuard.sol\";\n\n/**\n * @notice Helper contract to manage protocol and creator fees outside the Vault.\n * @dev This contract stores global default protocol swap and yield fees, and also tracks the values of those fees\n * for each pool (the `PoolFeeConfig` described below). Protocol fees can always be overwritten by governance, but\n * pool creator fees are controlled by the registered poolCreator (see `PoolRoleAccounts`).\n *\n * The Vault stores a single aggregate percentage for swap and yield fees; only this `ProtocolFeeController` knows\n * the component fee percentages, and how to compute the aggregate from the components. This is done for performance\n * reasons, to minimize gas on the critical path, as this way the Vault simply applies a single \"cut\", and stores the\n * fee amounts separately from the pool balances.\n *\n * The pool creator fees are \"net\" protocol fees, meaning the protocol fee is taken first, and the pool creator fee\n * percentage is applied to the remainder. Essentially, the protocol is paid first, then the remainder is divided\n * between the pool creator and the LPs.\n *\n * There is a permissionless function (`collectAggregateFees`) that transfers these tokens from the Vault to this\n * contract, and distributes them between the protocol and pool creator, after which they can be withdrawn at any\n * time by governance and the pool creator, respectively.\n *\n * Protocol fees can be zero in some cases (e.g., the token is registered as exempt), and pool creator fees are zero\n * if there is no creator role address defined. Protocol fees are capped at a maximum percentage (50%); pool creator\n * fees are computed \"net\" protocol fees, so they can be any value from 0 to 100%. Any combination is possible.\n * A protocol-fee-exempt pool with a 100% pool creator fee would send all fees to the creator. If there is no pool\n * creator, a pool with a 50% protocol fee would divide the fees evenly between the protocol and LPs.\n *\n * This contract is deployed with the Vault, but can be changed by governance.\n */\ncontract ProtocolFeeController is\n IProtocolFeeController,\n SingletonAuthentication,\n ReentrancyGuardTransient,\n VaultGuard\n{\n using FixedPoint for uint256;\n using SafeERC20 for IERC20;\n using SafeCast for *;\n\n enum ProtocolFeeType {\n SWAP,\n YIELD\n }\n\n /**\n * @notice Fee configuration stored in the swap and yield fee mappings.\n * @dev Instead of storing only the fee in the mapping, also store a flag to indicate whether the fee has been\n * set by governance through a permissioned call. (The fee is stored in 64-bits, so that the struct fits\n * within a single slot.)\n *\n * We know the percentage is an 18-decimal FP value, which only takes 60 bits, so it's guaranteed to fit,\n * and we can do simple casts to truncate the high bits without needed SafeCast.\n *\n * We want to enable permissionless updates for pools, so that it is less onerous to update potentially\n * hundreds of pools if the global protocol fees change. However, we don't want to overwrite pools that\n * have had their fee percentages manually set by the DAO (i.e., after off-chain negotiation and agreement).\n *\n * @param feePercentage The raw swap or yield fee percentage\n * @param isOverride When set, this fee is controlled by governance, and cannot be changed permissionlessly\n */\n struct PoolFeeConfig {\n uint64 feePercentage;\n bool isOverride;\n }\n\n // Maximum protocol swap fee percentage. FixedPoint.ONE corresponds to a 100% fee.\n uint256 public constant MAX_PROTOCOL_SWAP_FEE_PERCENTAGE = 50e16; // 50%\n\n // Maximum protocol yield fee percentage.\n uint256 public constant MAX_PROTOCOL_YIELD_FEE_PERCENTAGE = 50e16; // 50%\n\n // Maximum pool creator (swap, yield) fee percentage.\n uint256 public constant MAX_CREATOR_FEE_PERCENTAGE = 99.999e16; // 99.999%\n\n // Global protocol swap fee.\n uint256 private _globalProtocolSwapFeePercentage;\n\n // Global protocol yield fee.\n uint256 private _globalProtocolYieldFeePercentage;\n\n // Explicitly mark a pool as registered. This will enable future migrations to safely update protected state.\n mapping(address pool => bool isRegistered) internal _registeredPools;\n\n // Store the pool-specific swap fee percentages (the Vault's poolConfigBits stores the aggregate percentage).\n mapping(address pool => PoolFeeConfig swapFeeConfig) internal _poolProtocolSwapFeePercentages;\n\n // Store the pool-specific yield fee percentages (the Vault's poolConfigBits stores the aggregate percentage).\n mapping(address pool => PoolFeeConfig yieldFeeConfig) internal _poolProtocolYieldFeePercentages;\n\n // Pool creator swap fee percentages for each pool.\n mapping(address pool => uint256 poolCreatorSwapFee) internal _poolCreatorSwapFeePercentages;\n\n // Pool creator yield fee percentages for each pool.\n mapping(address pool => uint256 poolCreatorYieldFee) internal _poolCreatorYieldFeePercentages;\n\n // Disaggregated protocol fees (from swap and yield), available for withdrawal by governance.\n mapping(address pool => mapping(IERC20 poolToken => uint256 feeAmount)) internal _protocolFeeAmounts;\n\n // Disaggregated pool creator fees (from swap and yield), available for withdrawal by the pool creator.\n mapping(address pool => mapping(IERC20 poolToken => uint256 feeAmount)) internal _poolCreatorFeeAmounts;\n\n /**\n * @notice Prevent pool data from being registered more than once.\n * @dev This can happen if there is an error in the migration, or if governance somehow grants permission to\n * `migratePool`, which should never happen.\n *\n * @param pool The pool\n */\n error PoolAlreadyRegistered(address pool);\n\n /// @notice Migration source cannot be this contract.\n error InvalidMigrationSource();\n\n // Ensure that the caller is the pool creator.\n modifier onlyPoolCreator(address pool) {\n _ensureCallerIsPoolCreator(pool);\n _;\n }\n\n // Validate the swap fee percentage against the maximum.\n modifier withValidSwapFee(uint256 newSwapFeePercentage) {\n if (newSwapFeePercentage > MAX_PROTOCOL_SWAP_FEE_PERCENTAGE) {\n revert ProtocolSwapFeePercentageTooHigh();\n }\n _ensureValidPrecision(newSwapFeePercentage);\n _;\n }\n\n // Validate the yield fee percentage against the maximum.\n modifier withValidYieldFee(uint256 newYieldFeePercentage) {\n if (newYieldFeePercentage > MAX_PROTOCOL_YIELD_FEE_PERCENTAGE) {\n revert ProtocolYieldFeePercentageTooHigh();\n }\n _ensureValidPrecision(newYieldFeePercentage);\n _;\n }\n\n modifier withValidPoolCreatorFee(uint256 newPoolCreatorFeePercentage) {\n if (newPoolCreatorFeePercentage > MAX_CREATOR_FEE_PERCENTAGE) {\n revert PoolCreatorFeePercentageTooHigh();\n }\n _;\n }\n\n // Force collection and disaggregation (e.g., before changing protocol fee percentages).\n modifier withLatestFees(address pool) {\n collectAggregateFees(pool);\n _;\n }\n\n constructor(IVault vault_) SingletonAuthentication(vault_) VaultGuard(vault_) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /// @inheritdoc IProtocolFeeController\n function vault() external view returns (IVault) {\n return _vault;\n }\n\n /// @inheritdoc IProtocolFeeController\n function collectAggregateFees(address pool) public {\n _vault.unlock(abi.encodeCall(ProtocolFeeController.collectAggregateFeesHook, pool));\n }\n\n /**\n * @dev Copy and zero out the `aggregateFeeAmounts` collected in the Vault accounting, supplying credit\n * for each token. Then have the Vault transfer tokens to this contract, debiting each token for the amount\n * transferred so that the transaction settles when the hook returns.\n */\n function collectAggregateFeesHook(address pool) external onlyVault {\n (uint256[] memory totalSwapFees, uint256[] memory totalYieldFees) = _vault.collectAggregateFees(pool);\n _receiveAggregateFees(pool, totalSwapFees, totalYieldFees);\n }\n\n /**\n * @notice Settle fee credits from the Vault.\n * @dev This must be called after calling `collectAggregateFees` in the Vault. Note that since charging protocol\n * fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection\n * happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations. The Vault\n * differentiates between swap and yield fees (since they can have different percentage values); the Controller\n * combines swap and yield fees, then allocates the total between the protocol and pool creator.\n *\n * @param pool The address of the pool on which the swap fees were charged\n * @param swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n * @param yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order\n */\n function _receiveAggregateFees(\n address pool,\n uint256[] memory swapFeeAmounts,\n uint256[] memory yieldFeeAmounts\n ) internal {\n _receiveAggregateFees(pool, ProtocolFeeType.SWAP, swapFeeAmounts);\n _receiveAggregateFees(pool, ProtocolFeeType.YIELD, yieldFeeAmounts);\n }\n\n function _receiveAggregateFees(address pool, ProtocolFeeType feeType, uint256[] memory feeAmounts) private {\n // There are two cases when we don't need to split fees (in which case we can save gas and avoid rounding\n // errors by skipping calculations) if either the protocol or pool creator fee percentage is zero.\n\n uint256 protocolFeePercentage = feeType == ProtocolFeeType.SWAP\n ? _poolProtocolSwapFeePercentages[pool].feePercentage\n : _poolProtocolYieldFeePercentages[pool].feePercentage;\n\n uint256 poolCreatorFeePercentage = feeType == ProtocolFeeType.SWAP\n ? _poolCreatorSwapFeePercentages[pool]\n : _poolCreatorYieldFeePercentages[pool];\n\n uint256 aggregateFeePercentage;\n\n bool needToSplitFees = poolCreatorFeePercentage > 0 && protocolFeePercentage > 0;\n if (needToSplitFees) {\n // Calculate once, outside the loop.\n aggregateFeePercentage = _computeAggregateFeePercentage(protocolFeePercentage, poolCreatorFeePercentage);\n }\n\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n for (uint256 i = 0; i < numTokens; ++i) {\n if (feeAmounts[i] > 0) {\n IERC20 token = poolTokens[i];\n\n _vault.sendTo(token, address(this), feeAmounts[i]);\n\n // It should be easier for off-chain processes to handle two events, rather than parsing the type\n // out of a single event.\n if (feeType == ProtocolFeeType.SWAP) {\n emit ProtocolSwapFeeCollected(pool, token, feeAmounts[i]);\n } else {\n emit ProtocolYieldFeeCollected(pool, token, feeAmounts[i]);\n }\n\n if (needToSplitFees) {\n // The Vault took a single \"cut\" for the aggregate total percentage (protocol + pool creator) for\n // this fee type (swap or yield). The first step is to reconstruct this total fee amount. Then we\n // need to \"disaggregate\" this total, dividing it between the protocol and pool creator according\n // to their individual percentages. We do this by computing the protocol portion first, then\n // assigning the remainder to the pool creator.\n uint256 totalFeeAmountRaw = feeAmounts[i].divUp(aggregateFeePercentage);\n uint256 protocolPortion = totalFeeAmountRaw.mulUp(protocolFeePercentage);\n\n _protocolFeeAmounts[pool][token] += protocolPortion;\n _poolCreatorFeeAmounts[pool][token] += feeAmounts[i] - protocolPortion;\n } else {\n // If we don't need to split, one of them must be zero.\n if (poolCreatorFeePercentage == 0) {\n _protocolFeeAmounts[pool][token] += feeAmounts[i];\n } else {\n _poolCreatorFeeAmounts[pool][token] += feeAmounts[i];\n }\n }\n }\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function getGlobalProtocolSwapFeePercentage() external view returns (uint256) {\n return _globalProtocolSwapFeePercentage;\n }\n\n /// @inheritdoc IProtocolFeeController\n function getGlobalProtocolYieldFeePercentage() external view returns (uint256) {\n return _globalProtocolYieldFeePercentage;\n }\n\n /// @inheritdoc IProtocolFeeController\n function isPoolRegistered(address pool) external view returns (bool) {\n return _registeredPools[pool];\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolProtocolSwapFeeInfo(address pool) external view returns (uint256, bool) {\n PoolFeeConfig memory config = _poolProtocolSwapFeePercentages[pool];\n\n return (config.feePercentage, config.isOverride);\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolProtocolYieldFeeInfo(address pool) external view returns (uint256, bool) {\n PoolFeeConfig memory config = _poolProtocolYieldFeePercentages[pool];\n\n return (config.feePercentage, config.isOverride);\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolCreatorSwapFeePercentage(address pool) external view returns (uint256) {\n return _poolCreatorSwapFeePercentages[pool];\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolCreatorYieldFeePercentage(address pool) external view returns (uint256) {\n return _poolCreatorYieldFeePercentages[pool];\n }\n\n /// @inheritdoc IProtocolFeeController\n function getProtocolFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts) {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n feeAmounts = new uint256[](numTokens);\n for (uint256 i = 0; i < numTokens; ++i) {\n feeAmounts[i] = _protocolFeeAmounts[pool][poolTokens[i]];\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolCreatorFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts) {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n feeAmounts = new uint256[](numTokens);\n for (uint256 i = 0; i < numTokens; ++i) {\n feeAmounts[i] = _poolCreatorFeeAmounts[pool][poolTokens[i]];\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) external pure returns (uint256) {\n return _computeAggregateFeePercentage(protocolFeePercentage, poolCreatorFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function updateProtocolSwapFeePercentage(address pool) external withLatestFees(pool) {\n PoolFeeConfig memory feeConfig = _poolProtocolSwapFeePercentages[pool];\n uint256 globalProtocolSwapFee = _globalProtocolSwapFeePercentage;\n\n if (feeConfig.isOverride == false && globalProtocolSwapFee != feeConfig.feePercentage) {\n _updatePoolSwapFeePercentage(pool, globalProtocolSwapFee, false);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function updateProtocolYieldFeePercentage(address pool) external withLatestFees(pool) {\n PoolFeeConfig memory feeConfig = _poolProtocolYieldFeePercentages[pool];\n uint256 globalProtocolYieldFee = _globalProtocolYieldFeePercentage;\n\n if (feeConfig.isOverride == false && globalProtocolYieldFee != feeConfig.feePercentage) {\n _updatePoolYieldFeePercentage(pool, globalProtocolYieldFee, false);\n }\n }\n\n function _getAggregateFeePercentage(address pool, ProtocolFeeType feeType) internal view returns (uint256) {\n uint256 protocolFeePercentage;\n uint256 poolCreatorFeePercentage;\n\n if (feeType == ProtocolFeeType.SWAP) {\n protocolFeePercentage = _poolProtocolSwapFeePercentages[pool].feePercentage;\n poolCreatorFeePercentage = _poolCreatorSwapFeePercentages[pool];\n } else {\n protocolFeePercentage = _poolProtocolYieldFeePercentages[pool].feePercentage;\n poolCreatorFeePercentage = _poolCreatorYieldFeePercentages[pool];\n }\n\n return _computeAggregateFeePercentage(protocolFeePercentage, poolCreatorFeePercentage);\n }\n\n function _computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) internal pure returns (uint256 aggregateFeePercentage) {\n aggregateFeePercentage =\n protocolFeePercentage +\n protocolFeePercentage.complement().mulDown(poolCreatorFeePercentage);\n\n // Protocol fee percentages are limited to 24-bit precision for performance reasons (i.e., to fit all the fees\n // in a single slot), and because high precision is not needed. Generally we expect protocol fees set by\n // governance to be simple integers.\n //\n // However, the pool creator fee is entirely controlled by the pool creator, and it is possible to craft a\n // valid pool creator fee percentage that would cause the aggregate fee percentage to fail the precision check.\n // This case should be rare, so we ensure this can't happen by truncating the final value.\n aggregateFeePercentage = (aggregateFeePercentage / FEE_SCALING_FACTOR) * FEE_SCALING_FACTOR;\n }\n\n function _ensureCallerIsPoolCreator(address pool) internal view {\n address poolCreator = _getPoolCreator(pool);\n\n if (poolCreator == address(0)) {\n revert PoolCreatorNotRegistered(pool);\n }\n\n if (poolCreator != msg.sender) {\n revert CallerIsNotPoolCreator(msg.sender, pool);\n }\n }\n\n function _getPoolTokensAndCount(address pool) internal view returns (IERC20[] memory tokens, uint256 numTokens) {\n tokens = _vault.getPoolTokens(pool);\n numTokens = tokens.length;\n }\n\n // Retrieve the pool creator for a pool from the Vault.\n function _getPoolCreator(address pool) internal view returns (address) {\n PoolRoleAccounts memory roleAccounts = _vault.getPoolRoleAccounts(pool);\n\n return roleAccounts.poolCreator;\n }\n\n /***************************************************************************\n Permissioned Functions\n ***************************************************************************/\n\n /// @inheritdoc IProtocolFeeController\n function registerPool(\n address pool,\n address poolCreator,\n bool protocolFeeExempt\n ) external onlyVault returns (uint256 aggregateSwapFeePercentage, uint256 aggregateYieldFeePercentage) {\n _registeredPools[pool] = true;\n\n // Set local storage of the actual percentages for the pool (default to global).\n aggregateSwapFeePercentage = protocolFeeExempt ? 0 : _globalProtocolSwapFeePercentage;\n aggregateYieldFeePercentage = protocolFeeExempt ? 0 : _globalProtocolYieldFeePercentage;\n\n // `isOverride` is true if the pool is protocol fee exempt; otherwise, default to false.\n // If exempt, this pool cannot be updated to the current global percentage permissionlessly.\n // The percentages are 18 decimal floating point numbers, bound between 0 and the max fee (<= FixedPoint.ONE).\n // Since this fits in 64 bits, the SafeCast shouldn't be necessary, and is done out of an abundance of caution.\n _poolProtocolSwapFeePercentages[pool] = PoolFeeConfig({\n feePercentage: aggregateSwapFeePercentage.toUint64(),\n isOverride: protocolFeeExempt\n });\n _poolProtocolYieldFeePercentages[pool] = PoolFeeConfig({\n feePercentage: aggregateYieldFeePercentage.toUint64(),\n isOverride: protocolFeeExempt\n });\n\n // Allow tracking pool fee percentages in all cases (e.g., when the pool is protocol-fee exempt).\n emit InitialPoolAggregateSwapFeePercentage(pool, aggregateSwapFeePercentage, protocolFeeExempt);\n emit InitialPoolAggregateYieldFeePercentage(pool, aggregateYieldFeePercentage, protocolFeeExempt);\n\n if (poolCreator != address(0)) {\n emit PoolWithCreatorRegistered(pool, poolCreator, protocolFeeExempt);\n }\n }\n\n /**\n * @notice Not exposed in the interface, this enables migration of hidden pool state.\n * @dev Permission should NEVER be granted to this function outside of a migration contract. It is necessary to\n * permit migration of the `ProtocolFeeController` with all state (in particular, protocol fee overrides and pool\n * creator fees) that cannot be written outside of the `registerPool` function called by the Vault during pool\n * deployment.\n *\n * Even if governance were to grant permission to call this function, the `_registeredPools` latch keeps it safe,\n * guaranteeing that it is impossible to use this function to change anything after registration. A pool can only\n * be registered / configured once - either copied to a new controller in the migration context, or added normally\n * through the Vault calling `registerPool`.\n *\n * Technically, since the logic prevents it from being called on the active fee controller, and on a previously\n * registered or migrated pool, it could even be permissionless. But since we already have other permissioned\n * functions, it doesn't really cost anything to be permissioned, and that provides another layer of security.\n *\n * @param pool The address of the pool to be migrated\n */\n function migratePool(address pool) external authenticate {\n IProtocolFeeController oldFeeController = _vault.getProtocolFeeController();\n\n if (address(oldFeeController) == address(this)) {\n revert InvalidMigrationSource();\n }\n\n if (_registeredPools[pool]) {\n revert PoolAlreadyRegistered(pool);\n }\n\n _registeredPools[pool] = true;\n\n (uint256 protocolSwapFeePercentage, bool swapFeeIsOverride) = oldFeeController.getPoolProtocolSwapFeeInfo(pool);\n _poolProtocolSwapFeePercentages[pool] = PoolFeeConfig({\n feePercentage: protocolSwapFeePercentage.toUint64(),\n isOverride: swapFeeIsOverride\n });\n\n (uint256 protocolYieldFeePercentage, bool yieldFeeIsOverride) = oldFeeController.getPoolProtocolYieldFeeInfo(\n pool\n );\n _poolProtocolYieldFeePercentages[pool] = PoolFeeConfig({\n feePercentage: protocolYieldFeePercentage.toUint64(),\n isOverride: yieldFeeIsOverride\n });\n\n _poolCreatorSwapFeePercentages[pool] = oldFeeController.getPoolCreatorSwapFeePercentage(pool);\n _poolCreatorYieldFeePercentages[pool] = oldFeeController.getPoolCreatorYieldFeePercentage(pool);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setGlobalProtocolSwapFeePercentage(\n uint256 newProtocolSwapFeePercentage\n ) external withValidSwapFee(newProtocolSwapFeePercentage) authenticate {\n _globalProtocolSwapFeePercentage = newProtocolSwapFeePercentage;\n\n emit GlobalProtocolSwapFeePercentageChanged(newProtocolSwapFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setGlobalProtocolYieldFeePercentage(\n uint256 newProtocolYieldFeePercentage\n ) external withValidYieldFee(newProtocolYieldFeePercentage) authenticate {\n _globalProtocolYieldFeePercentage = newProtocolYieldFeePercentage;\n\n emit GlobalProtocolYieldFeePercentageChanged(newProtocolYieldFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setProtocolSwapFeePercentage(\n address pool,\n uint256 newProtocolSwapFeePercentage\n ) external authenticate withValidSwapFee(newProtocolSwapFeePercentage) withLatestFees(pool) {\n _updatePoolSwapFeePercentage(pool, newProtocolSwapFeePercentage, true);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setProtocolYieldFeePercentage(\n address pool,\n uint256 newProtocolYieldFeePercentage\n ) external authenticate withValidYieldFee(newProtocolYieldFeePercentage) withLatestFees(pool) {\n _updatePoolYieldFeePercentage(pool, newProtocolYieldFeePercentage, true);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setPoolCreatorSwapFeePercentage(\n address pool,\n uint256 poolCreatorSwapFeePercentage\n ) external onlyPoolCreator(pool) withValidPoolCreatorFee(poolCreatorSwapFeePercentage) withLatestFees(pool) {\n _setPoolCreatorFeePercentage(pool, poolCreatorSwapFeePercentage, ProtocolFeeType.SWAP);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setPoolCreatorYieldFeePercentage(\n address pool,\n uint256 poolCreatorYieldFeePercentage\n ) external onlyPoolCreator(pool) withValidPoolCreatorFee(poolCreatorYieldFeePercentage) withLatestFees(pool) {\n _setPoolCreatorFeePercentage(pool, poolCreatorYieldFeePercentage, ProtocolFeeType.YIELD);\n }\n\n function _setPoolCreatorFeePercentage(\n address pool,\n uint256 poolCreatorFeePercentage,\n ProtocolFeeType feeType\n ) internal {\n // Need to set locally, and update the aggregate percentage in the Vault.\n if (feeType == ProtocolFeeType.SWAP) {\n _poolCreatorSwapFeePercentages[pool] = poolCreatorFeePercentage;\n\n // The Vault will also emit an `AggregateSwapFeePercentageChanged` event.\n _vault.updateAggregateSwapFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.SWAP));\n\n emit PoolCreatorSwapFeePercentageChanged(pool, poolCreatorFeePercentage);\n } else {\n _poolCreatorYieldFeePercentages[pool] = poolCreatorFeePercentage;\n\n // The Vault will also emit an `AggregateYieldFeePercentageChanged` event.\n _vault.updateAggregateYieldFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.YIELD));\n\n emit PoolCreatorYieldFeePercentageChanged(pool, poolCreatorFeePercentage);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawProtocolFees(address pool, address recipient) external authenticate {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n for (uint256 i = 0; i < numTokens; ++i) {\n IERC20 token = poolTokens[i];\n\n _withdrawProtocolFees(pool, recipient, token);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawProtocolFeesForToken(address pool, address recipient, IERC20 token) external authenticate {\n // Revert if the pool is not registered or if the token does not belong to the pool.\n _vault.getPoolTokenCountAndIndexOfToken(pool, token);\n _withdrawProtocolFees(pool, recipient, token);\n }\n\n function _withdrawProtocolFees(address pool, address recipient, IERC20 token) internal {\n uint256 amountToWithdraw = _protocolFeeAmounts[pool][token];\n if (amountToWithdraw > 0) {\n _protocolFeeAmounts[pool][token] = 0;\n token.safeTransfer(recipient, amountToWithdraw);\n\n emit ProtocolFeesWithdrawn(pool, token, recipient, amountToWithdraw);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawPoolCreatorFees(address pool, address recipient) external onlyPoolCreator(pool) {\n _withdrawPoolCreatorFees(pool, recipient);\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawPoolCreatorFees(address pool) external {\n _withdrawPoolCreatorFees(pool, _getPoolCreator(pool));\n }\n\n function _withdrawPoolCreatorFees(address pool, address recipient) private {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n for (uint256 i = 0; i < numTokens; ++i) {\n IERC20 token = poolTokens[i];\n\n uint256 amountToWithdraw = _poolCreatorFeeAmounts[pool][token];\n if (amountToWithdraw > 0) {\n _poolCreatorFeeAmounts[pool][token] = 0;\n token.safeTransfer(recipient, amountToWithdraw);\n\n emit PoolCreatorFeesWithdrawn(pool, token, recipient, amountToWithdraw);\n }\n }\n }\n\n /// @dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage.\n function _updatePoolSwapFeePercentage(address pool, uint256 newProtocolSwapFeePercentage, bool isOverride) private {\n // Update local storage of the raw percentage.\n //\n // The percentages are 18 decimal floating point numbers, bound between 0 and the max fee (<= FixedPoint.ONE).\n // Since this fits in 64 bits, the SafeCast shouldn't be necessary, and is done out of an abundance of caution.\n _poolProtocolSwapFeePercentages[pool] = PoolFeeConfig({\n feePercentage: newProtocolSwapFeePercentage.toUint64(),\n isOverride: isOverride\n });\n\n // Update the resulting aggregate swap fee value in the Vault (PoolConfig).\n _vault.updateAggregateSwapFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.SWAP));\n\n emit ProtocolSwapFeePercentageChanged(pool, newProtocolSwapFeePercentage);\n }\n\n /// @dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage.\n function _updatePoolYieldFeePercentage(\n address pool,\n uint256 newProtocolYieldFeePercentage,\n bool isOverride\n ) private {\n // Update local storage of the raw percentage.\n // The percentages are 18 decimal floating point numbers, bound between 0 and the max fee (<= FixedPoint.ONE).\n // Since this fits in 64 bits, the SafeCast shouldn't be necessary, and is done out of an abundance of caution.\n _poolProtocolYieldFeePercentages[pool] = PoolFeeConfig({\n feePercentage: newProtocolYieldFeePercentage.toUint64(),\n isOverride: isOverride\n });\n\n // Update the resulting aggregate yield fee value in the Vault (PoolConfig).\n _vault.updateAggregateYieldFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.YIELD));\n\n emit ProtocolYieldFeePercentageChanged(pool, newProtocolYieldFeePercentage);\n }\n\n function _ensureValidPrecision(uint256 feePercentage) private pure {\n // Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n // precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n // corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n // Ensure there will be no precision loss in the Vault - which would lead to a discrepancy between the\n // aggregate fee calculated here and that stored in the Vault.\n if ((feePercentage / FEE_SCALING_FACTOR) * FEE_SCALING_FACTOR != feePercentage) {\n revert IVaultErrors.FeePrecisionTooHigh();\n }\n }\n}\n"},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { Authentication } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\";\n\n/**\n * @notice Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\n * @dev The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned\n * functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same\n * function name.\n */\nabstract contract SingletonAuthentication is Authentication {\n IVault private immutable _vault;\n\n // Use the contract's own address to disambiguate action identifiers.\n constructor(IVault vault) Authentication(bytes32(uint256(uint160(address(this))))) {\n _vault = vault;\n }\n\n /**\n * @notice Get the address of the Balancer Vault.\n * @return vault An interface pointer to the Vault\n */\n function getVault() public view returns (IVault) {\n return _vault;\n }\n\n /**\n * @notice Get the address of the Authorizer.\n * @return authorizer An interface pointer to the Authorizer\n */\n function getAuthorizer() public view returns (IAuthorizer) {\n return getVault().getAuthorizer();\n }\n\n function _canPerform(bytes32 actionId, address account) internal view override returns (bool) {\n return getAuthorizer().canPerform(actionId, account, address(this));\n }\n\n function _canPerform(bytes32 actionId, address account, address where) internal view returns (bool) {\n return getAuthorizer().canPerform(actionId, account, where);\n }\n}\n"},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\n/// @notice Contract that shares the modifier `onlyVault`.\ncontract VaultGuard {\n IVault internal immutable _vault;\n\n constructor(IVault vault) {\n _vault = vault;\n }\n\n modifier onlyVault() {\n _ensureOnlyVault();\n _;\n }\n\n function _ensureOnlyVault() private view {\n if (msg.sender != address(_vault)) {\n revert IVaultErrors.SenderIsNotVault(msg.sender);\n }\n }\n}\n"},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC4626.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\nimport {IERC20Metadata} from \"../token/ERC20/extensions/IERC20Metadata.sol\";\n\n/**\n * @dev Interface of the ERC4626 \"Tokenized Vault Standard\", as defined in\n * https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\n */\ninterface IERC4626 is IERC20, IERC20Metadata {\n event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares);\n\n event Withdraw(\n address indexed sender,\n address indexed receiver,\n address indexed owner,\n uint256 assets,\n uint256 shares\n );\n\n /**\n * @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n *\n * - MUST be an ERC-20 token contract.\n * - MUST NOT revert.\n */\n function asset() external view returns (address assetTokenAddress);\n\n /**\n * @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n *\n * - SHOULD include any compounding that occurs from yield.\n * - MUST be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT revert.\n */\n function totalAssets() external view returns (uint256 totalManagedAssets);\n\n /**\n * @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n * scenario where all the conditions are met.\n *\n * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT show any variations depending on the caller.\n * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n * - MUST NOT revert.\n *\n * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n * from.\n */\n function convertToShares(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n * scenario where all the conditions are met.\n *\n * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT show any variations depending on the caller.\n * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n * - MUST NOT revert.\n *\n * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n * from.\n */\n function convertToAssets(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n * through a deposit call.\n *\n * - MUST return a limited value if receiver is subject to some deposit limit.\n * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n * - MUST NOT revert.\n */\n function maxDeposit(address receiver) external view returns (uint256 maxAssets);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n * current on-chain conditions.\n *\n * - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n * call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n * in the same transaction.\n * - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n * deposit would be accepted, regardless if the user has enough tokens approved, etc.\n * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n */\n function previewDeposit(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n *\n * - MUST emit the Deposit event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * deposit execution, and are accounted for during deposit.\n * - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n * approving enough underlying tokens to the Vault contract, etc).\n *\n * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n */\n function deposit(uint256 assets, address receiver) external returns (uint256 shares);\n\n /**\n * @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n * - MUST return a limited value if receiver is subject to some mint limit.\n * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n * - MUST NOT revert.\n */\n function maxMint(address receiver) external view returns (uint256 maxShares);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n * current on-chain conditions.\n *\n * - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n * in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n * same transaction.\n * - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n * would be accepted, regardless if the user has enough tokens approved, etc.\n * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by minting.\n */\n function previewMint(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n *\n * - MUST emit the Deposit event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n * execution, and are accounted for during mint.\n * - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n * approving enough underlying tokens to the Vault contract, etc).\n *\n * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n */\n function mint(uint256 shares, address receiver) external returns (uint256 assets);\n\n /**\n * @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n * Vault, through a withdraw call.\n *\n * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n * - MUST NOT revert.\n */\n function maxWithdraw(address owner) external view returns (uint256 maxAssets);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n * given current on-chain conditions.\n *\n * - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n * call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n * called\n * in the same transaction.\n * - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n * the withdrawal would be accepted, regardless if the user has enough shares, etc.\n * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n */\n function previewWithdraw(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n *\n * - MUST emit the Withdraw event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * withdraw execution, and are accounted for during withdraw.\n * - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n * not having enough shares, etc).\n *\n * Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n * Those methods should be performed separately.\n */\n function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares);\n\n /**\n * @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n * through a redeem call.\n *\n * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n * - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n * - MUST NOT revert.\n */\n function maxRedeem(address owner) external view returns (uint256 maxShares);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\n * given current on-chain conditions.\n *\n * - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n * in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n * same transaction.\n * - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n * redemption would be accepted, regardless if the user has enough shares, etc.\n * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by redeeming.\n */\n function previewRedeem(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n *\n * - MUST emit the Withdraw event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * redeem execution, and are accounted for during redeem.\n * - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n * not having enough shares, etc).\n *\n * NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n * Those methods should be performed separately.\n */\n function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets);\n}\n"},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC20 standard.\n */\ninterface IERC20Metadata is IERC20 {\n /**\n * @dev Returns the name of the token.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the symbol of the token.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the decimals places of the token.\n */\n function decimals() external view returns (uint8);\n}\n"},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Permit.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n *\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\n * need to send a transaction, and thus is not required to hold Ether at all.\n *\n * ==== Security Considerations\n *\n * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\n * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\n * considered as an intention to spend the allowance in any specific way. The second is that because permits have\n * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\n * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\n * generally recommended is:\n *\n * ```solidity\n * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\n * try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\n * doThing(..., value);\n * }\n *\n * function doThing(..., uint256 value) public {\n * token.safeTransferFrom(msg.sender, address(this), value);\n * ...\n * }\n * ```\n *\n * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\n * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\n * {SafeERC20-safeTransferFrom}).\n *\n * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\n * contracts should have entry points that don't rely on permit.\n */\ninterface IERC20Permit {\n /**\n * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\n * given ``owner``'s signed approval.\n *\n * IMPORTANT: The same issues {IERC20-approve} has related to transaction\n * ordering also apply here.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n * - `deadline` must be a timestamp in the future.\n * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\n * over the EIP712-formatted function arguments.\n * - the signature must use ``owner``'s current nonce (see {nonces}).\n *\n * For more information on the signature format, see the\n * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\n * section].\n *\n * CAUTION: See Security Considerations above.\n */\n function permit(\n address owner,\n address spender,\n uint256 value,\n uint256 deadline,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) external;\n\n /**\n * @dev Returns the current nonce for `owner`. This value must be\n * included whenever a signature is generated for {permit}.\n *\n * Every successful call to {permit} increases ``owner``'s nonce by one. This\n * prevents a signature from being used multiple times.\n */\n function nonces(address owner) external view returns (uint256);\n\n /**\n * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\n */\n // solhint-disable-next-line func-name-mixedcase\n function DOMAIN_SEPARATOR() external view returns (bytes32);\n}\n"},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n"},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\nimport {IERC20Permit} from \"../extensions/IERC20Permit.sol\";\nimport {Address} from \"../../../utils/Address.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n using Address for address;\n\n /**\n * @dev An operation with an ERC20 token failed.\n */\n error SafeERC20FailedOperation(address token);\n\n /**\n * @dev Indicates a failed `decreaseAllowance` request.\n */\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\n\n /**\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\n }\n\n /**\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\n */\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n }\n\n /**\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n uint256 oldAllowance = token.allowance(address(this), spender);\n forceApprove(token, spender, oldAllowance + value);\n }\n\n /**\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n * value, non-reverting calls are assumed to be successful.\n */\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\n unchecked {\n uint256 currentAllowance = token.allowance(address(this), spender);\n if (currentAllowance < requestedDecrease) {\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\n }\n forceApprove(token, spender, currentAllowance - requestedDecrease);\n }\n }\n\n /**\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n * to be set to zero before setting it to a non-zero value, such as USDT.\n */\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\n\n if (!_callOptionalReturnBool(token, approvalCall)) {\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\n _callOptionalReturn(token, approvalCall);\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n */\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\n // the target address contains contract code and also asserts for success in the low-level call.\n\n bytes memory returndata = address(token).functionCall(data);\n if (returndata.length != 0 && !abi.decode(returndata, (bool))) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.\n */\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false\n // and not revert is the subcall reverts.\n\n (bool success, bytes memory returndata) = address(token).call(data);\n return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && address(token).code.length > 0;\n }\n}\n"},"@openzeppelin/contracts/utils/Address.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error AddressInsufficientBalance(address account);\n\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedInnerCall();\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert AddressInsufficientBalance(address(this));\n }\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n if (!success) {\n revert FailedInnerCall();\n }\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {FailedInnerCall} error.\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert AddressInsufficientBalance(address(this));\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an\n * unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {FailedInnerCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.\n */\n function _revert(bytes memory returndata) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert FailedInnerCall();\n }\n }\n}\n"},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SafeCast.sol)\n// This file was procedurally generated from scripts/generate/templates/SafeCast.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\n * checks.\n *\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n * easily result in undesired exploitation or bugs, since developers usually\n * assume that overflows raise errors. `SafeCast` restores this intuition by\n * reverting the transaction when such an operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeCast {\n /**\n * @dev Value doesn't fit in an uint of `bits` size.\n */\n error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);\n\n /**\n * @dev An int value doesn't fit in an uint of `bits` size.\n */\n error SafeCastOverflowedIntToUint(int256 value);\n\n /**\n * @dev Value doesn't fit in an int of `bits` size.\n */\n error SafeCastOverflowedIntDowncast(uint8 bits, int256 value);\n\n /**\n * @dev An uint value doesn't fit in an int of `bits` size.\n */\n error SafeCastOverflowedUintToInt(uint256 value);\n\n /**\n * @dev Returns the downcasted uint248 from uint256, reverting on\n * overflow (when the input is greater than largest uint248).\n *\n * Counterpart to Solidity's `uint248` operator.\n *\n * Requirements:\n *\n * - input must fit into 248 bits\n */\n function toUint248(uint256 value) internal pure returns (uint248) {\n if (value > type(uint248).max) {\n revert SafeCastOverflowedUintDowncast(248, value);\n }\n return uint248(value);\n }\n\n /**\n * @dev Returns the downcasted uint240 from uint256, reverting on\n * overflow (when the input is greater than largest uint240).\n *\n * Counterpart to Solidity's `uint240` operator.\n *\n * Requirements:\n *\n * - input must fit into 240 bits\n */\n function toUint240(uint256 value) internal pure returns (uint240) {\n if (value > type(uint240).max) {\n revert SafeCastOverflowedUintDowncast(240, value);\n }\n return uint240(value);\n }\n\n /**\n * @dev Returns the downcasted uint232 from uint256, reverting on\n * overflow (when the input is greater than largest uint232).\n *\n * Counterpart to Solidity's `uint232` operator.\n *\n * Requirements:\n *\n * - input must fit into 232 bits\n */\n function toUint232(uint256 value) internal pure returns (uint232) {\n if (value > type(uint232).max) {\n revert SafeCastOverflowedUintDowncast(232, value);\n }\n return uint232(value);\n }\n\n /**\n * @dev Returns the downcasted uint224 from uint256, reverting on\n * overflow (when the input is greater than largest uint224).\n *\n * Counterpart to Solidity's `uint224` operator.\n *\n * Requirements:\n *\n * - input must fit into 224 bits\n */\n function toUint224(uint256 value) internal pure returns (uint224) {\n if (value > type(uint224).max) {\n revert SafeCastOverflowedUintDowncast(224, value);\n }\n return uint224(value);\n }\n\n /**\n * @dev Returns the downcasted uint216 from uint256, reverting on\n * overflow (when the input is greater than largest uint216).\n *\n * Counterpart to Solidity's `uint216` operator.\n *\n * Requirements:\n *\n * - input must fit into 216 bits\n */\n function toUint216(uint256 value) internal pure returns (uint216) {\n if (value > type(uint216).max) {\n revert SafeCastOverflowedUintDowncast(216, value);\n }\n return uint216(value);\n }\n\n /**\n * @dev Returns the downcasted uint208 from uint256, reverting on\n * overflow (when the input is greater than largest uint208).\n *\n * Counterpart to Solidity's `uint208` operator.\n *\n * Requirements:\n *\n * - input must fit into 208 bits\n */\n function toUint208(uint256 value) internal pure returns (uint208) {\n if (value > type(uint208).max) {\n revert SafeCastOverflowedUintDowncast(208, value);\n }\n return uint208(value);\n }\n\n /**\n * @dev Returns the downcasted uint200 from uint256, reverting on\n * overflow (when the input is greater than largest uint200).\n *\n * Counterpart to Solidity's `uint200` operator.\n *\n * Requirements:\n *\n * - input must fit into 200 bits\n */\n function toUint200(uint256 value) internal pure returns (uint200) {\n if (value > type(uint200).max) {\n revert SafeCastOverflowedUintDowncast(200, value);\n }\n return uint200(value);\n }\n\n /**\n * @dev Returns the downcasted uint192 from uint256, reverting on\n * overflow (when the input is greater than largest uint192).\n *\n * Counterpart to Solidity's `uint192` operator.\n *\n * Requirements:\n *\n * - input must fit into 192 bits\n */\n function toUint192(uint256 value) internal pure returns (uint192) {\n if (value > type(uint192).max) {\n revert SafeCastOverflowedUintDowncast(192, value);\n }\n return uint192(value);\n }\n\n /**\n * @dev Returns the downcasted uint184 from uint256, reverting on\n * overflow (when the input is greater than largest uint184).\n *\n * Counterpart to Solidity's `uint184` operator.\n *\n * Requirements:\n *\n * - input must fit into 184 bits\n */\n function toUint184(uint256 value) internal pure returns (uint184) {\n if (value > type(uint184).max) {\n revert SafeCastOverflowedUintDowncast(184, value);\n }\n return uint184(value);\n }\n\n /**\n * @dev Returns the downcasted uint176 from uint256, reverting on\n * overflow (when the input is greater than largest uint176).\n *\n * Counterpart to Solidity's `uint176` operator.\n *\n * Requirements:\n *\n * - input must fit into 176 bits\n */\n function toUint176(uint256 value) internal pure returns (uint176) {\n if (value > type(uint176).max) {\n revert SafeCastOverflowedUintDowncast(176, value);\n }\n return uint176(value);\n }\n\n /**\n * @dev Returns the downcasted uint168 from uint256, reverting on\n * overflow (when the input is greater than largest uint168).\n *\n * Counterpart to Solidity's `uint168` operator.\n *\n * Requirements:\n *\n * - input must fit into 168 bits\n */\n function toUint168(uint256 value) internal pure returns (uint168) {\n if (value > type(uint168).max) {\n revert SafeCastOverflowedUintDowncast(168, value);\n }\n return uint168(value);\n }\n\n /**\n * @dev Returns the downcasted uint160 from uint256, reverting on\n * overflow (when the input is greater than largest uint160).\n *\n * Counterpart to Solidity's `uint160` operator.\n *\n * Requirements:\n *\n * - input must fit into 160 bits\n */\n function toUint160(uint256 value) internal pure returns (uint160) {\n if (value > type(uint160).max) {\n revert SafeCastOverflowedUintDowncast(160, value);\n }\n return uint160(value);\n }\n\n /**\n * @dev Returns the downcasted uint152 from uint256, reverting on\n * overflow (when the input is greater than largest uint152).\n *\n * Counterpart to Solidity's `uint152` operator.\n *\n * Requirements:\n *\n * - input must fit into 152 bits\n */\n function toUint152(uint256 value) internal pure returns (uint152) {\n if (value > type(uint152).max) {\n revert SafeCastOverflowedUintDowncast(152, value);\n }\n return uint152(value);\n }\n\n /**\n * @dev Returns the downcasted uint144 from uint256, reverting on\n * overflow (when the input is greater than largest uint144).\n *\n * Counterpart to Solidity's `uint144` operator.\n *\n * Requirements:\n *\n * - input must fit into 144 bits\n */\n function toUint144(uint256 value) internal pure returns (uint144) {\n if (value > type(uint144).max) {\n revert SafeCastOverflowedUintDowncast(144, value);\n }\n return uint144(value);\n }\n\n /**\n * @dev Returns the downcasted uint136 from uint256, reverting on\n * overflow (when the input is greater than largest uint136).\n *\n * Counterpart to Solidity's `uint136` operator.\n *\n * Requirements:\n *\n * - input must fit into 136 bits\n */\n function toUint136(uint256 value) internal pure returns (uint136) {\n if (value > type(uint136).max) {\n revert SafeCastOverflowedUintDowncast(136, value);\n }\n return uint136(value);\n }\n\n /**\n * @dev Returns the downcasted uint128 from uint256, reverting on\n * overflow (when the input is greater than largest uint128).\n *\n * Counterpart to Solidity's `uint128` operator.\n *\n * Requirements:\n *\n * - input must fit into 128 bits\n */\n function toUint128(uint256 value) internal pure returns (uint128) {\n if (value > type(uint128).max) {\n revert SafeCastOverflowedUintDowncast(128, value);\n }\n return uint128(value);\n }\n\n /**\n * @dev Returns the downcasted uint120 from uint256, reverting on\n * overflow (when the input is greater than largest uint120).\n *\n * Counterpart to Solidity's `uint120` operator.\n *\n * Requirements:\n *\n * - input must fit into 120 bits\n */\n function toUint120(uint256 value) internal pure returns (uint120) {\n if (value > type(uint120).max) {\n revert SafeCastOverflowedUintDowncast(120, value);\n }\n return uint120(value);\n }\n\n /**\n * @dev Returns the downcasted uint112 from uint256, reverting on\n * overflow (when the input is greater than largest uint112).\n *\n * Counterpart to Solidity's `uint112` operator.\n *\n * Requirements:\n *\n * - input must fit into 112 bits\n */\n function toUint112(uint256 value) internal pure returns (uint112) {\n if (value > type(uint112).max) {\n revert SafeCastOverflowedUintDowncast(112, value);\n }\n return uint112(value);\n }\n\n /**\n * @dev Returns the downcasted uint104 from uint256, reverting on\n * overflow (when the input is greater than largest uint104).\n *\n * Counterpart to Solidity's `uint104` operator.\n *\n * Requirements:\n *\n * - input must fit into 104 bits\n */\n function toUint104(uint256 value) internal pure returns (uint104) {\n if (value > type(uint104).max) {\n revert SafeCastOverflowedUintDowncast(104, value);\n }\n return uint104(value);\n }\n\n /**\n * @dev Returns the downcasted uint96 from uint256, reverting on\n * overflow (when the input is greater than largest uint96).\n *\n * Counterpart to Solidity's `uint96` operator.\n *\n * Requirements:\n *\n * - input must fit into 96 bits\n */\n function toUint96(uint256 value) internal pure returns (uint96) {\n if (value > type(uint96).max) {\n revert SafeCastOverflowedUintDowncast(96, value);\n }\n return uint96(value);\n }\n\n /**\n * @dev Returns the downcasted uint88 from uint256, reverting on\n * overflow (when the input is greater than largest uint88).\n *\n * Counterpart to Solidity's `uint88` operator.\n *\n * Requirements:\n *\n * - input must fit into 88 bits\n */\n function toUint88(uint256 value) internal pure returns (uint88) {\n if (value > type(uint88).max) {\n revert SafeCastOverflowedUintDowncast(88, value);\n }\n return uint88(value);\n }\n\n /**\n * @dev Returns the downcasted uint80 from uint256, reverting on\n * overflow (when the input is greater than largest uint80).\n *\n * Counterpart to Solidity's `uint80` operator.\n *\n * Requirements:\n *\n * - input must fit into 80 bits\n */\n function toUint80(uint256 value) internal pure returns (uint80) {\n if (value > type(uint80).max) {\n revert SafeCastOverflowedUintDowncast(80, value);\n }\n return uint80(value);\n }\n\n /**\n * @dev Returns the downcasted uint72 from uint256, reverting on\n * overflow (when the input is greater than largest uint72).\n *\n * Counterpart to Solidity's `uint72` operator.\n *\n * Requirements:\n *\n * - input must fit into 72 bits\n */\n function toUint72(uint256 value) internal pure returns (uint72) {\n if (value > type(uint72).max) {\n revert SafeCastOverflowedUintDowncast(72, value);\n }\n return uint72(value);\n }\n\n /**\n * @dev Returns the downcasted uint64 from uint256, reverting on\n * overflow (when the input is greater than largest uint64).\n *\n * Counterpart to Solidity's `uint64` operator.\n *\n * Requirements:\n *\n * - input must fit into 64 bits\n */\n function toUint64(uint256 value) internal pure returns (uint64) {\n if (value > type(uint64).max) {\n revert SafeCastOverflowedUintDowncast(64, value);\n }\n return uint64(value);\n }\n\n /**\n * @dev Returns the downcasted uint56 from uint256, reverting on\n * overflow (when the input is greater than largest uint56).\n *\n * Counterpart to Solidity's `uint56` operator.\n *\n * Requirements:\n *\n * - input must fit into 56 bits\n */\n function toUint56(uint256 value) internal pure returns (uint56) {\n if (value > type(uint56).max) {\n revert SafeCastOverflowedUintDowncast(56, value);\n }\n return uint56(value);\n }\n\n /**\n * @dev Returns the downcasted uint48 from uint256, reverting on\n * overflow (when the input is greater than largest uint48).\n *\n * Counterpart to Solidity's `uint48` operator.\n *\n * Requirements:\n *\n * - input must fit into 48 bits\n */\n function toUint48(uint256 value) internal pure returns (uint48) {\n if (value > type(uint48).max) {\n revert SafeCastOverflowedUintDowncast(48, value);\n }\n return uint48(value);\n }\n\n /**\n * @dev Returns the downcasted uint40 from uint256, reverting on\n * overflow (when the input is greater than largest uint40).\n *\n * Counterpart to Solidity's `uint40` operator.\n *\n * Requirements:\n *\n * - input must fit into 40 bits\n */\n function toUint40(uint256 value) internal pure returns (uint40) {\n if (value > type(uint40).max) {\n revert SafeCastOverflowedUintDowncast(40, value);\n }\n return uint40(value);\n }\n\n /**\n * @dev Returns the downcasted uint32 from uint256, reverting on\n * overflow (when the input is greater than largest uint32).\n *\n * Counterpart to Solidity's `uint32` operator.\n *\n * Requirements:\n *\n * - input must fit into 32 bits\n */\n function toUint32(uint256 value) internal pure returns (uint32) {\n if (value > type(uint32).max) {\n revert SafeCastOverflowedUintDowncast(32, value);\n }\n return uint32(value);\n }\n\n /**\n * @dev Returns the downcasted uint24 from uint256, reverting on\n * overflow (when the input is greater than largest uint24).\n *\n * Counterpart to Solidity's `uint24` operator.\n *\n * Requirements:\n *\n * - input must fit into 24 bits\n */\n function toUint24(uint256 value) internal pure returns (uint24) {\n if (value > type(uint24).max) {\n revert SafeCastOverflowedUintDowncast(24, value);\n }\n return uint24(value);\n }\n\n /**\n * @dev Returns the downcasted uint16 from uint256, reverting on\n * overflow (when the input is greater than largest uint16).\n *\n * Counterpart to Solidity's `uint16` operator.\n *\n * Requirements:\n *\n * - input must fit into 16 bits\n */\n function toUint16(uint256 value) internal pure returns (uint16) {\n if (value > type(uint16).max) {\n revert SafeCastOverflowedUintDowncast(16, value);\n }\n return uint16(value);\n }\n\n /**\n * @dev Returns the downcasted uint8 from uint256, reverting on\n * overflow (when the input is greater than largest uint8).\n *\n * Counterpart to Solidity's `uint8` operator.\n *\n * Requirements:\n *\n * - input must fit into 8 bits\n */\n function toUint8(uint256 value) internal pure returns (uint8) {\n if (value > type(uint8).max) {\n revert SafeCastOverflowedUintDowncast(8, value);\n }\n return uint8(value);\n }\n\n /**\n * @dev Converts a signed int256 into an unsigned uint256.\n *\n * Requirements:\n *\n * - input must be greater than or equal to 0.\n */\n function toUint256(int256 value) internal pure returns (uint256) {\n if (value < 0) {\n revert SafeCastOverflowedIntToUint(value);\n }\n return uint256(value);\n }\n\n /**\n * @dev Returns the downcasted int248 from int256, reverting on\n * overflow (when the input is less than smallest int248 or\n * greater than largest int248).\n *\n * Counterpart to Solidity's `int248` operator.\n *\n * Requirements:\n *\n * - input must fit into 248 bits\n */\n function toInt248(int256 value) internal pure returns (int248 downcasted) {\n downcasted = int248(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(248, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int240 from int256, reverting on\n * overflow (when the input is less than smallest int240 or\n * greater than largest int240).\n *\n * Counterpart to Solidity's `int240` operator.\n *\n * Requirements:\n *\n * - input must fit into 240 bits\n */\n function toInt240(int256 value) internal pure returns (int240 downcasted) {\n downcasted = int240(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(240, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int232 from int256, reverting on\n * overflow (when the input is less than smallest int232 or\n * greater than largest int232).\n *\n * Counterpart to Solidity's `int232` operator.\n *\n * Requirements:\n *\n * - input must fit into 232 bits\n */\n function toInt232(int256 value) internal pure returns (int232 downcasted) {\n downcasted = int232(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(232, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int224 from int256, reverting on\n * overflow (when the input is less than smallest int224 or\n * greater than largest int224).\n *\n * Counterpart to Solidity's `int224` operator.\n *\n * Requirements:\n *\n * - input must fit into 224 bits\n */\n function toInt224(int256 value) internal pure returns (int224 downcasted) {\n downcasted = int224(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(224, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int216 from int256, reverting on\n * overflow (when the input is less than smallest int216 or\n * greater than largest int216).\n *\n * Counterpart to Solidity's `int216` operator.\n *\n * Requirements:\n *\n * - input must fit into 216 bits\n */\n function toInt216(int256 value) internal pure returns (int216 downcasted) {\n downcasted = int216(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(216, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int208 from int256, reverting on\n * overflow (when the input is less than smallest int208 or\n * greater than largest int208).\n *\n * Counterpart to Solidity's `int208` operator.\n *\n * Requirements:\n *\n * - input must fit into 208 bits\n */\n function toInt208(int256 value) internal pure returns (int208 downcasted) {\n downcasted = int208(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(208, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int200 from int256, reverting on\n * overflow (when the input is less than smallest int200 or\n * greater than largest int200).\n *\n * Counterpart to Solidity's `int200` operator.\n *\n * Requirements:\n *\n * - input must fit into 200 bits\n */\n function toInt200(int256 value) internal pure returns (int200 downcasted) {\n downcasted = int200(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(200, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int192 from int256, reverting on\n * overflow (when the input is less than smallest int192 or\n * greater than largest int192).\n *\n * Counterpart to Solidity's `int192` operator.\n *\n * Requirements:\n *\n * - input must fit into 192 bits\n */\n function toInt192(int256 value) internal pure returns (int192 downcasted) {\n downcasted = int192(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(192, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int184 from int256, reverting on\n * overflow (when the input is less than smallest int184 or\n * greater than largest int184).\n *\n * Counterpart to Solidity's `int184` operator.\n *\n * Requirements:\n *\n * - input must fit into 184 bits\n */\n function toInt184(int256 value) internal pure returns (int184 downcasted) {\n downcasted = int184(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(184, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int176 from int256, reverting on\n * overflow (when the input is less than smallest int176 or\n * greater than largest int176).\n *\n * Counterpart to Solidity's `int176` operator.\n *\n * Requirements:\n *\n * - input must fit into 176 bits\n */\n function toInt176(int256 value) internal pure returns (int176 downcasted) {\n downcasted = int176(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(176, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int168 from int256, reverting on\n * overflow (when the input is less than smallest int168 or\n * greater than largest int168).\n *\n * Counterpart to Solidity's `int168` operator.\n *\n * Requirements:\n *\n * - input must fit into 168 bits\n */\n function toInt168(int256 value) internal pure returns (int168 downcasted) {\n downcasted = int168(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(168, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int160 from int256, reverting on\n * overflow (when the input is less than smallest int160 or\n * greater than largest int160).\n *\n * Counterpart to Solidity's `int160` operator.\n *\n * Requirements:\n *\n * - input must fit into 160 bits\n */\n function toInt160(int256 value) internal pure returns (int160 downcasted) {\n downcasted = int160(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(160, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int152 from int256, reverting on\n * overflow (when the input is less than smallest int152 or\n * greater than largest int152).\n *\n * Counterpart to Solidity's `int152` operator.\n *\n * Requirements:\n *\n * - input must fit into 152 bits\n */\n function toInt152(int256 value) internal pure returns (int152 downcasted) {\n downcasted = int152(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(152, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int144 from int256, reverting on\n * overflow (when the input is less than smallest int144 or\n * greater than largest int144).\n *\n * Counterpart to Solidity's `int144` operator.\n *\n * Requirements:\n *\n * - input must fit into 144 bits\n */\n function toInt144(int256 value) internal pure returns (int144 downcasted) {\n downcasted = int144(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(144, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int136 from int256, reverting on\n * overflow (when the input is less than smallest int136 or\n * greater than largest int136).\n *\n * Counterpart to Solidity's `int136` operator.\n *\n * Requirements:\n *\n * - input must fit into 136 bits\n */\n function toInt136(int256 value) internal pure returns (int136 downcasted) {\n downcasted = int136(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(136, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int128 from int256, reverting on\n * overflow (when the input is less than smallest int128 or\n * greater than largest int128).\n *\n * Counterpart to Solidity's `int128` operator.\n *\n * Requirements:\n *\n * - input must fit into 128 bits\n */\n function toInt128(int256 value) internal pure returns (int128 downcasted) {\n downcasted = int128(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(128, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int120 from int256, reverting on\n * overflow (when the input is less than smallest int120 or\n * greater than largest int120).\n *\n * Counterpart to Solidity's `int120` operator.\n *\n * Requirements:\n *\n * - input must fit into 120 bits\n */\n function toInt120(int256 value) internal pure returns (int120 downcasted) {\n downcasted = int120(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(120, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int112 from int256, reverting on\n * overflow (when the input is less than smallest int112 or\n * greater than largest int112).\n *\n * Counterpart to Solidity's `int112` operator.\n *\n * Requirements:\n *\n * - input must fit into 112 bits\n */\n function toInt112(int256 value) internal pure returns (int112 downcasted) {\n downcasted = int112(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(112, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int104 from int256, reverting on\n * overflow (when the input is less than smallest int104 or\n * greater than largest int104).\n *\n * Counterpart to Solidity's `int104` operator.\n *\n * Requirements:\n *\n * - input must fit into 104 bits\n */\n function toInt104(int256 value) internal pure returns (int104 downcasted) {\n downcasted = int104(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(104, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int96 from int256, reverting on\n * overflow (when the input is less than smallest int96 or\n * greater than largest int96).\n *\n * Counterpart to Solidity's `int96` operator.\n *\n * Requirements:\n *\n * - input must fit into 96 bits\n */\n function toInt96(int256 value) internal pure returns (int96 downcasted) {\n downcasted = int96(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(96, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int88 from int256, reverting on\n * overflow (when the input is less than smallest int88 or\n * greater than largest int88).\n *\n * Counterpart to Solidity's `int88` operator.\n *\n * Requirements:\n *\n * - input must fit into 88 bits\n */\n function toInt88(int256 value) internal pure returns (int88 downcasted) {\n downcasted = int88(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(88, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int80 from int256, reverting on\n * overflow (when the input is less than smallest int80 or\n * greater than largest int80).\n *\n * Counterpart to Solidity's `int80` operator.\n *\n * Requirements:\n *\n * - input must fit into 80 bits\n */\n function toInt80(int256 value) internal pure returns (int80 downcasted) {\n downcasted = int80(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(80, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int72 from int256, reverting on\n * overflow (when the input is less than smallest int72 or\n * greater than largest int72).\n *\n * Counterpart to Solidity's `int72` operator.\n *\n * Requirements:\n *\n * - input must fit into 72 bits\n */\n function toInt72(int256 value) internal pure returns (int72 downcasted) {\n downcasted = int72(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(72, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int64 from int256, reverting on\n * overflow (when the input is less than smallest int64 or\n * greater than largest int64).\n *\n * Counterpart to Solidity's `int64` operator.\n *\n * Requirements:\n *\n * - input must fit into 64 bits\n */\n function toInt64(int256 value) internal pure returns (int64 downcasted) {\n downcasted = int64(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(64, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int56 from int256, reverting on\n * overflow (when the input is less than smallest int56 or\n * greater than largest int56).\n *\n * Counterpart to Solidity's `int56` operator.\n *\n * Requirements:\n *\n * - input must fit into 56 bits\n */\n function toInt56(int256 value) internal pure returns (int56 downcasted) {\n downcasted = int56(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(56, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int48 from int256, reverting on\n * overflow (when the input is less than smallest int48 or\n * greater than largest int48).\n *\n * Counterpart to Solidity's `int48` operator.\n *\n * Requirements:\n *\n * - input must fit into 48 bits\n */\n function toInt48(int256 value) internal pure returns (int48 downcasted) {\n downcasted = int48(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(48, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int40 from int256, reverting on\n * overflow (when the input is less than smallest int40 or\n * greater than largest int40).\n *\n * Counterpart to Solidity's `int40` operator.\n *\n * Requirements:\n *\n * - input must fit into 40 bits\n */\n function toInt40(int256 value) internal pure returns (int40 downcasted) {\n downcasted = int40(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(40, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int32 from int256, reverting on\n * overflow (when the input is less than smallest int32 or\n * greater than largest int32).\n *\n * Counterpart to Solidity's `int32` operator.\n *\n * Requirements:\n *\n * - input must fit into 32 bits\n */\n function toInt32(int256 value) internal pure returns (int32 downcasted) {\n downcasted = int32(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(32, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int24 from int256, reverting on\n * overflow (when the input is less than smallest int24 or\n * greater than largest int24).\n *\n * Counterpart to Solidity's `int24` operator.\n *\n * Requirements:\n *\n * - input must fit into 24 bits\n */\n function toInt24(int256 value) internal pure returns (int24 downcasted) {\n downcasted = int24(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(24, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int16 from int256, reverting on\n * overflow (when the input is less than smallest int16 or\n * greater than largest int16).\n *\n * Counterpart to Solidity's `int16` operator.\n *\n * Requirements:\n *\n * - input must fit into 16 bits\n */\n function toInt16(int256 value) internal pure returns (int16 downcasted) {\n downcasted = int16(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(16, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int8 from int256, reverting on\n * overflow (when the input is less than smallest int8 or\n * greater than largest int8).\n *\n * Counterpart to Solidity's `int8` operator.\n *\n * Requirements:\n *\n * - input must fit into 8 bits\n */\n function toInt8(int256 value) internal pure returns (int8 downcasted) {\n downcasted = int8(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(8, value);\n }\n }\n\n /**\n * @dev Converts an unsigned uint256 into a signed int256.\n *\n * Requirements:\n *\n * - input must be less than or equal to maxInt256.\n */\n function toInt256(uint256 value) internal pure returns (int256) {\n // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\n if (value > uint256(type(int256).max)) {\n revert SafeCastOverflowedUintToInt(value);\n }\n return int256(value);\n }\n}\n"},"contracts/ProtocolFeeControllerMigration.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\";\nimport { IBasicAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol\";\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { PoolRoleAccounts, PoolConfig } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\nimport { IVaultAdmin } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { ProtocolFeeController } from \"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\";\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\n\n/**\n * @notice Migrate from the original ProtocolFeeController to one with extra events.\n * @dev These events enable tracking pool protocol fees under all circumstances (in particular, when protocol fees are\n * initially turned off). It also adds some infrastructure that makes future migrations easier, and removes redundant\n * poolCreator storage.\n *\n * This simple migration assumes:\n * 1) There are no pools with pool creators\n * 2) There are no pools with protocol fee exemptions or overrides\n * 3) Migrating the complete list of pools can be done in a single transaction.\n *\n * These simplifications enable simply calling `migrateFeeController` once with the complete list of pools.\n *\n * After the migration, the Vault will point to the new fee controller, and any collection thereafter will go there.\n * If there are any residual fee amounts in the old fee controller (i.e., that were collected but not withdrawn),\n * governance will still need to withdraw from the old fee controller. Otherwise, no further interaction with the old\n * controller is necessary.\n *\n * Associated with `20250221-protocol-fee-controller-migration`.\n */\ncontract ProtocolFeeControllerMigration is ReentrancyGuardTransient {\n IProtocolFeeController public immutable oldFeeController;\n IProtocolFeeController public immutable newFeeController;\n\n IVault public immutable vault;\n\n // IAuthorizer with interface for granting/revoking roles.\n IBasicAuthorizer internal immutable _authorizer;\n\n // Set when the operation is complete and all permissions have been renounced.\n bool internal _finalized;\n\n /**\n * @notice Attempt to deploy this contract with invalid parameters.\n * @dev ProtocolFeeController contracts return the address of the Vault they were deployed with. Ensure that both\n * the old and new controllers reference the same vault.\n */\n error InvalidFeeController();\n\n /// @notice Migration can only be performed once.\n error AlreadyMigrated();\n\n constructor(IVault _vault, IProtocolFeeController _newFeeController) {\n oldFeeController = _vault.getProtocolFeeController();\n\n // Ensure valid fee controllers. Also ensure that we are not trying to operate on the current fee controller.\n if (_newFeeController.vault() != _vault || _newFeeController == oldFeeController) {\n revert InvalidFeeController();\n }\n\n vault = _vault;\n newFeeController = _newFeeController;\n\n _authorizer = IBasicAuthorizer(address(vault.getAuthorizer()));\n }\n\n /**\n * @notice Permissionless migration function.\n * @dev Call this with the full set of pools to perform the migration. After this runs, the Vault will point to the\n * new fee controller, which will have a copy of all the relevant state from the old controller. Also, all\n * permissions will be revoked, and the contract will be disabled.\n *\n * @param pools The complete set of pools to migrate\n */\n function migrateFeeController(address[] memory pools) external virtual nonReentrant {\n if (_finalized) {\n revert AlreadyMigrated();\n }\n\n _finalized = true;\n\n _migrateGlobalPercentages();\n\n // This simple migration assumes that:\n // 1) There are no pool creators, so no state related to pool creator fees (and no fees to be withdrawn).\n // 2) There are no protocol fee exempt pools or governance overrides\n // (i.e., all override flags are false, and all pool fees match current global values).\n //\n // At the end of this process, since there are no pool creators, token balances should all be zero, unless\n // there are \"left over\" protocol fees that have been collected but not withdrawn. Governance would then\n // still have to withdraw from the old fee controller.\n //\n // For future migrations, when we might have pool creator fees, the pool creators would still need to withdraw\n // them from the old controller themselves.\n for (uint256 i = 0; i < pools.length; ++i) {\n address pool = pools[i];\n\n // Set pool-specific values. This assumes there are no fee exempt pools or overrides.\n newFeeController.updateProtocolSwapFeePercentage(pool);\n newFeeController.updateProtocolYieldFeePercentage(pool);\n }\n\n // Update the fee controller in the Vault.\n _migrateFeeController();\n\n // Revoke all permissions.\n _authorizer.renounceRole(_authorizer.DEFAULT_ADMIN_ROLE(), address(this));\n }\n\n function _migrateGlobalPercentages() internal {\n // Grant global fee percentage permissions to set on new controller.\n bytes32 swapFeeRole = IAuthentication(address(newFeeController)).getActionId(\n IProtocolFeeController.setGlobalProtocolSwapFeePercentage.selector\n );\n\n bytes32 yieldFeeRole = IAuthentication(address(newFeeController)).getActionId(\n IProtocolFeeController.setGlobalProtocolYieldFeePercentage.selector\n );\n\n _authorizer.grantRole(swapFeeRole, address(this));\n _authorizer.grantRole(yieldFeeRole, address(this));\n\n // Copy percentages to new controller.\n uint256 globalSwapFeePercentage = oldFeeController.getGlobalProtocolSwapFeePercentage();\n uint256 globalYieldFeePercentage = oldFeeController.getGlobalProtocolYieldFeePercentage();\n\n newFeeController.setGlobalProtocolSwapFeePercentage(globalSwapFeePercentage);\n newFeeController.setGlobalProtocolYieldFeePercentage(globalYieldFeePercentage);\n\n // Revoke permissions.\n _authorizer.renounceRole(swapFeeRole, address(this));\n _authorizer.renounceRole(yieldFeeRole, address(this));\n }\n\n function _migrateFeeController() internal {\n bytes32 setFeeControllerRole = IAuthentication(address(vault)).getActionId(\n IVaultAdmin.setProtocolFeeController.selector\n );\n\n _authorizer.grantRole(setFeeControllerRole, address(this));\n\n vault.setProtocolFeeController(newFeeController);\n\n _authorizer.renounceRole(setFeeControllerRole, address(this));\n }\n}\n"},"contracts/ProtocolFeeControllerMigrationV2.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\";\nimport { IBasicAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol\";\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { PoolRoleAccounts, PoolConfig } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\nimport { IVaultAdmin } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { SingletonAuthentication } from \"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\";\nimport { ProtocolFeeController } from \"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\";\n\nimport { ProtocolFeeControllerMigration } from \"./ProtocolFeeControllerMigration.sol\";\n\n/**\n * @notice Migrate from the original ProtocolFeeController to one with extra events.\n * @dev These events enable tracking pool protocol fees under all circumstances (in particular, when protocol fees are\n * initially turned off).\n *\n * After deployment, call `migratePools` as many times as necessary. The list must be generated externally, as pools\n * are not iterable on-chain. The batch interface allows an unlimited number of pools to be migrated; it's possible\n * there might be too many to migrate in a single call.\n *\n * The first time `migratePools` is called, the contract will first copy the global (pool-independent data). This could\n * be done in a separate stage, but we're trying to keep the contract simple, vs. duplicating the staging coordinator\n * system of v2 just yet.\n *\n * When all pools have been migrated, call `finalizeMigration` to disable further migration, update the address in the\n * Vault, and renounce all permissions. While `migratePools` is permissionless, this call must be permissioned to\n * prevent premature termination in case multiple transactions are required to migrate all the pools.\n *\n * Associated with `20250221-protocol-fee-controller-migration` (fork test only).\n */\ncontract ProtocolFeeControllerMigrationV2 is ProtocolFeeControllerMigration, SingletonAuthentication {\n // Set after the global percentages have been transferred (on the first call to `migratePools`).\n bool internal _globalPercentagesMigrated;\n\n // ActionId for permission required in `migratePools`.\n bytes32 internal _migrationRole;\n\n /// @notice Cannot call the base contract migration; it is invalid for this migration.\n error WrongMigrationVersion();\n\n constructor(\n IVault _vault,\n IProtocolFeeController _newFeeController\n ) ProtocolFeeControllerMigration(_vault, _newFeeController) SingletonAuthentication(_vault) {\n _migrationRole = IAuthentication(address(newFeeController)).getActionId(\n ProtocolFeeController.migratePool.selector\n );\n\n // Grant permission required in `migratePools`.\n _authorizer.grantRole(_migrationRole, address(this));\n }\n\n /**\n * @notice Migrate pools from the old fee controller to the new one.\n * @dev THis can be called multiple times, if there are too many pools for a single transaction. Note that the\n * first time this is called, it will migrate the global fee percentages, then proceed with the first set of pools.\n *\n * @param pools The set of pools to be migrated in this call\n */\n function migratePools(address[] memory pools) external virtual nonReentrant {\n if (_finalized) {\n revert AlreadyMigrated();\n }\n\n // Migrate the global percentages only once, before the first set of pools.\n if (_globalPercentagesMigrated == false) {\n _globalPercentagesMigrated = true;\n\n _migrateGlobalPercentages();\n }\n\n // This more complex migration allows for pool creators and overrides, and uses the new features in the second\n // deployment of the `ProtocolFeeController`.\n //\n // At the end of this process, governance must still withdraw any leftover protocol fees from the old\n // controller (i.e., that have been collected but not withdrawn). Pool creators likewise would still need to\n // withdraw any leftover pool creator fees from the old controller.\n for (uint256 i = 0; i < pools.length; ++i) {\n // This function is not in the public interface.\n ProtocolFeeController(address(newFeeController)).migratePool(pools[i]);\n }\n }\n\n function finalizeMigration() external virtual authenticate {\n if (_finalized) {\n revert AlreadyMigrated();\n }\n\n _finalized = true;\n\n // Remove permission to migrate pools.\n _authorizer.renounceRole(_migrationRole, address(this));\n\n // Update the fee controller in the Vault.\n _migrateFeeController();\n\n // Revoke all permissions.\n _authorizer.renounceRole(_authorizer.DEFAULT_ADMIN_ROLE(), address(this));\n }\n\n /// @inheritdoc ProtocolFeeControllerMigration\n function migrateFeeController(address[] memory) external pure override {\n // The one-step migration does not work in this version, with pool creators and overrides.\n revert WrongMigrationVersion();\n }\n}\n"}},"settings":{"viaIR":true,"evmVersion":"cancun","optimizer":{"enabled":true,"runs":9999,"details":{"yulDetails":{"optimizerSteps":"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu"}}},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"],"":["ast"]}}}},"output":{"errors":[{"component":"general","errorCode":"2394","formattedMessage":"Warning: Transient storage as defined by EIP-1153 can break the composability of smart contracts: Since transient storage is cleared only at the end of the transaction and not at the end of the outermost call frame to the contract within a transaction, your contract may unintentionally misbehave when invoked multiple times in a complex transaction. To avoid this, be sure to clear all transient storage at the end of any call to your contract. The use of transient storage for reentrancy guards that are cleared at the end of the call is safe.\n --> @balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol:74:13:\n |\n74 | tstore(slot, value)\n | ^^^^^^\n\n","message":"Transient storage as defined by EIP-1153 can break the composability of smart contracts: Since transient storage is cleared only at the end of the transaction and not at the end of the outermost call frame to the contract within a transaction, your contract may unintentionally misbehave when invoked multiple times in a complex transaction. To avoid this, be sure to clear all transient storage at the end of any call to your contract. The use of transient storage for reentrancy guards that are cleared at the end of the call is safe.","severity":"warning","sourceLocation":{"end":2572,"file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","start":2566},"type":"Warning"}],"sources":{"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol","exportedSymbols":{"IAuthorizer":[73],"IBasicAuthorizer":[32]},"id":33,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:0"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"../vault/IAuthorizer.sol","id":3,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":33,"sourceUnit":74,"src":"72:55:0","symbolAliases":[{"foreign":{"id":2,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73,"src":"81:11:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":4,"name":"IAuthorizer","nameLocations":["159:11:0"],"nodeType":"IdentifierPath","referencedDeclaration":73,"src":"159:11:0"},"id":5,"nodeType":"InheritanceSpecifier","src":"159:11:0"}],"canonicalName":"IBasicAuthorizer","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":32,"linearizedBaseContracts":[32,73],"name":"IBasicAuthorizer","nameLocation":"139:16:0","nodeType":"ContractDefinition","nodes":[{"functionSelector":"a217fddf","id":10,"implemented":false,"kind":"function","modifiers":[],"name":"DEFAULT_ADMIN_ROLE","nameLocation":"239:18:0","nodeType":"FunctionDefinition","parameters":{"id":6,"nodeType":"ParameterList","parameters":[],"src":"257:2:0"},"returnParameters":{"id":9,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10,"src":"283:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7,"name":"bytes32","nodeType":"ElementaryTypeName","src":"283:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"282:9:0"},"scope":32,"src":"230:62:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"2f2ff15d","id":17,"implemented":false,"kind":"function","modifiers":[],"name":"grantRole","nameLocation":"307:9:0","nodeType":"FunctionDefinition","parameters":{"id":15,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12,"mutability":"mutable","name":"role","nameLocation":"325:4:0","nodeType":"VariableDeclaration","scope":17,"src":"317:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11,"name":"bytes32","nodeType":"ElementaryTypeName","src":"317:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":14,"mutability":"mutable","name":"account","nameLocation":"339:7:0","nodeType":"VariableDeclaration","scope":17,"src":"331:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13,"name":"address","nodeType":"ElementaryTypeName","src":"331:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"316:31:0"},"returnParameters":{"id":16,"nodeType":"ParameterList","parameters":[],"src":"356:0:0"},"scope":32,"src":"298:59:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"d547741f","id":24,"implemented":false,"kind":"function","modifiers":[],"name":"revokeRole","nameLocation":"372:10:0","nodeType":"FunctionDefinition","parameters":{"id":22,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19,"mutability":"mutable","name":"role","nameLocation":"391:4:0","nodeType":"VariableDeclaration","scope":24,"src":"383:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18,"name":"bytes32","nodeType":"ElementaryTypeName","src":"383:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":21,"mutability":"mutable","name":"account","nameLocation":"405:7:0","nodeType":"VariableDeclaration","scope":24,"src":"397:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20,"name":"address","nodeType":"ElementaryTypeName","src":"397:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"382:31:0"},"returnParameters":{"id":23,"nodeType":"ParameterList","parameters":[],"src":"422:0:0"},"scope":32,"src":"363:60:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"36568abe","id":31,"implemented":false,"kind":"function","modifiers":[],"name":"renounceRole","nameLocation":"438:12:0","nodeType":"FunctionDefinition","parameters":{"id":29,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26,"mutability":"mutable","name":"role","nameLocation":"459:4:0","nodeType":"VariableDeclaration","scope":31,"src":"451:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":25,"name":"bytes32","nodeType":"ElementaryTypeName","src":"451:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":28,"mutability":"mutable","name":"account","nameLocation":"473:7:0","nodeType":"VariableDeclaration","scope":31,"src":"465:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27,"name":"address","nodeType":"ElementaryTypeName","src":"465:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"450:31:0"},"returnParameters":{"id":30,"nodeType":"ParameterList","parameters":[],"src":"490:0:0"},"scope":32,"src":"429:62:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":33,"src":"129:364:0","usedErrors":[],"usedEvents":[]}],"src":"46:448:0"},"id":0},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","exportedSymbols":{"IAuthentication":[47]},"id":48,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":34,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:1"},{"abstract":false,"baseContracts":[],"canonicalName":"IAuthentication","contractDependencies":[],"contractKind":"interface","documentation":{"id":35,"nodeType":"StructuredDocumentation","src":"72:77:1","text":"@notice Simple interface for permissioned calling of external functions."},"fullyImplemented":false,"id":47,"linearizedBaseContracts":[47],"name":"IAuthentication","nameLocation":"159:15:1","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":36,"nodeType":"StructuredDocumentation","src":"181:67:1","text":"@notice The sender does not have permission to call a function."},"errorSelector":"23dada53","id":38,"name":"SenderNotAllowed","nameLocation":"259:16:1","nodeType":"ErrorDefinition","parameters":{"id":37,"nodeType":"ParameterList","parameters":[],"src":"275:2:1"},"src":"253:25:1"},{"documentation":{"id":39,"nodeType":"StructuredDocumentation","src":"284:237:1","text":" @notice Returns the action identifier associated with the external function described by `selector`.\n @param selector The 4-byte selector of the permissioned function\n @return actionId The computed actionId"},"functionSelector":"851c1bb3","id":46,"implemented":false,"kind":"function","modifiers":[],"name":"getActionId","nameLocation":"535:11:1","nodeType":"FunctionDefinition","parameters":{"id":42,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41,"mutability":"mutable","name":"selector","nameLocation":"554:8:1","nodeType":"VariableDeclaration","scope":46,"src":"547:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":40,"name":"bytes4","nodeType":"ElementaryTypeName","src":"547:6:1","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"546:17:1"},"returnParameters":{"id":45,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44,"mutability":"mutable","name":"actionId","nameLocation":"595:8:1","nodeType":"VariableDeclaration","scope":46,"src":"587:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":43,"name":"bytes32","nodeType":"ElementaryTypeName","src":"587:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"586:18:1"},"scope":47,"src":"526:79:1","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":48,"src":"149:458:1","usedErrors":[38],"usedEvents":[]}],"src":"46:562:1"},"id":1},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","exportedSymbols":{"IRateProvider":[57]},"id":58,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":49,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:2"},{"abstract":false,"baseContracts":[],"canonicalName":"IRateProvider","contractDependencies":[],"contractKind":"interface","documentation":{"id":50,"nodeType":"StructuredDocumentation","src":"72:56:2","text":"@notice General interface for token exchange rates."},"fullyImplemented":false,"id":57,"linearizedBaseContracts":[57],"name":"IRateProvider","nameLocation":"138:13:2","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":51,"nodeType":"StructuredDocumentation","src":"158:573:2","text":" @notice An 18 decimal fixed point number representing the exchange rate of one token to another related token.\n @dev The meaning of this rate depends on the context. Note that there may be an error associated with a token\n rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface\n does not take a rounding direction or return an error, so great care must be taken when interpreting and using\n rates in downstream computations.\n @return rate The current token rate"},"functionSelector":"679aefce","id":56,"implemented":false,"kind":"function","modifiers":[],"name":"getRate","nameLocation":"745:7:2","nodeType":"FunctionDefinition","parameters":{"id":52,"nodeType":"ParameterList","parameters":[],"src":"752:2:2"},"returnParameters":{"id":55,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54,"mutability":"mutable","name":"rate","nameLocation":"786:4:2","nodeType":"VariableDeclaration","scope":56,"src":"778:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":53,"name":"uint256","nodeType":"ElementaryTypeName","src":"778:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"777:14:2"},"scope":57,"src":"736:56:2","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":58,"src":"128:666:2","usedErrors":[],"usedEvents":[]}],"src":"46:749:2"},"id":2},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","exportedSymbols":{"IAuthorizer":[73]},"id":74,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":59,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:3"},{"abstract":false,"baseContracts":[],"canonicalName":"IAuthorizer","contractDependencies":[],"contractKind":"interface","documentation":{"id":60,"nodeType":"StructuredDocumentation","src":"72:56:3","text":"@notice Interface to the Vault's permission system."},"fullyImplemented":false,"id":73,"linearizedBaseContracts":[73],"name":"IAuthorizer","nameLocation":"138:11:3","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":61,"nodeType":"StructuredDocumentation","src":"156:354:3","text":" @notice Returns true if `account` can perform the action described by `actionId` in the contract `where`.\n @param actionId Identifier for the action to be performed\n @param account Account trying to perform the action\n @param where Target contract for the action\n @return success True if the action is permitted"},"functionSelector":"9be2a884","id":72,"implemented":false,"kind":"function","modifiers":[],"name":"canPerform","nameLocation":"524:10:3","nodeType":"FunctionDefinition","parameters":{"id":68,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63,"mutability":"mutable","name":"actionId","nameLocation":"543:8:3","nodeType":"VariableDeclaration","scope":72,"src":"535:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":62,"name":"bytes32","nodeType":"ElementaryTypeName","src":"535:7:3","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":65,"mutability":"mutable","name":"account","nameLocation":"561:7:3","nodeType":"VariableDeclaration","scope":72,"src":"553:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":64,"name":"address","nodeType":"ElementaryTypeName","src":"553:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":67,"mutability":"mutable","name":"where","nameLocation":"578:5:3","nodeType":"VariableDeclaration","scope":72,"src":"570:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":66,"name":"address","nodeType":"ElementaryTypeName","src":"570:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"534:50:3"},"returnParameters":{"id":71,"nodeType":"ParameterList","parameters":[{"constant":false,"id":70,"mutability":"mutable","name":"success","nameLocation":"613:7:3","nodeType":"VariableDeclaration","scope":72,"src":"608:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":69,"name":"bool","nodeType":"ElementaryTypeName","src":"608:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"607:14:3"},"scope":73,"src":"515:107:3","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":74,"src":"128:496:3","usedErrors":[],"usedEvents":[]}],"src":"46:579:3"},"id":3},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","exportedSymbols":{"AddLiquidityKind":[2347],"AfterSwapParams":[2341],"HookFlags":[2167],"IHooks":[275],"LiquidityManagement":[2120],"PoolSwapParams":[2312],"RemoveLiquidityKind":[2368],"SwapKind":[2275],"TokenConfig":[2234]},"id":276,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":75,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:4"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":84,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":276,"sourceUnit":2412,"src":"289:193:4","symbolAliases":[{"foreign":{"id":76,"name":"TokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2234,"src":"302:11:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":77,"name":"LiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2120,"src":"319:19:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":78,"name":"PoolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2312,"src":"344:14:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":79,"name":"AfterSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2341,"src":"364:15:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":80,"name":"HookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2167,"src":"385:9:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":81,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2347,"src":"400:16:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":82,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2368,"src":"422:19:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":83,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2275,"src":"447:8:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IHooks","contractDependencies":[],"contractKind":"interface","documentation":{"id":85,"nodeType":"StructuredDocumentation","src":"484:490:4","text":" @notice Interface for pool hooks.\n @dev Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that\n they are called in the correct order, and with the correct arguments. To maintain this security, these functions\n should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`,\n then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)"},"fullyImplemented":false,"id":275,"linearizedBaseContracts":[275],"name":"IHooks","nameLocation":"985:6:4","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":86,"nodeType":"StructuredDocumentation","src":"1205:769:4","text":" @notice Hook executed when a pool is registered with a non-zero hooks contract.\n @dev Returns true if registration was successful, and false to revert the pool registration.\n Make sure this function is properly implemented (e.g. check the factory, and check that the\n given pool is from the factory). The Vault address will be msg.sender.\n @param factory Address of the pool factory (contract deploying the pool)\n @param pool Address of the pool\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param liquidityManagement Liquidity management flags indicating which functions are enabled\n @return success True if the hook allowed the registration, false otherwise"},"functionSelector":"0b89f182","id":102,"implemented":false,"kind":"function","modifiers":[],"name":"onRegister","nameLocation":"1988:10:4","nodeType":"FunctionDefinition","parameters":{"id":98,"nodeType":"ParameterList","parameters":[{"constant":false,"id":88,"mutability":"mutable","name":"factory","nameLocation":"2016:7:4","nodeType":"VariableDeclaration","scope":102,"src":"2008:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":87,"name":"address","nodeType":"ElementaryTypeName","src":"2008:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90,"mutability":"mutable","name":"pool","nameLocation":"2041:4:4","nodeType":"VariableDeclaration","scope":102,"src":"2033:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":89,"name":"address","nodeType":"ElementaryTypeName","src":"2033:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":94,"mutability":"mutable","name":"tokenConfig","nameLocation":"2076:11:4","nodeType":"VariableDeclaration","scope":102,"src":"2055:32:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2234_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":92,"nodeType":"UserDefinedTypeName","pathNode":{"id":91,"name":"TokenConfig","nameLocations":["2055:11:4"],"nodeType":"IdentifierPath","referencedDeclaration":2234,"src":"2055:11:4"},"referencedDeclaration":2234,"src":"2055:11:4","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2234_storage_ptr","typeString":"struct TokenConfig"}},"id":93,"nodeType":"ArrayTypeName","src":"2055:13:4","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2234_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":97,"mutability":"mutable","name":"liquidityManagement","nameLocation":"2126:19:4","nodeType":"VariableDeclaration","scope":102,"src":"2097:48:4","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2120_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":96,"nodeType":"UserDefinedTypeName","pathNode":{"id":95,"name":"LiquidityManagement","nameLocations":["2097:19:4"],"nodeType":"IdentifierPath","referencedDeclaration":2120,"src":"2097:19:4"},"referencedDeclaration":2120,"src":"2097:19:4","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2120_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"1998:153:4"},"returnParameters":{"id":101,"nodeType":"ParameterList","parameters":[{"constant":false,"id":100,"mutability":"mutable","name":"success","nameLocation":"2175:7:4","nodeType":"VariableDeclaration","scope":102,"src":"2170:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":99,"name":"bool","nodeType":"ElementaryTypeName","src":"2170:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2169:14:4"},"scope":275,"src":"1979:205:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":103,"nodeType":"StructuredDocumentation","src":"2190:412:4","text":" @notice Return the set of hooks implemented by the contract.\n @dev The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined\n (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero).\n `onRegister` is the only \"mandatory\" hook.\n @return hookFlags Flags indicating which hooks the contract supports"},"functionSelector":"d77153a7","id":109,"implemented":false,"kind":"function","modifiers":[],"name":"getHookFlags","nameLocation":"2616:12:4","nodeType":"FunctionDefinition","parameters":{"id":104,"nodeType":"ParameterList","parameters":[],"src":"2628:2:4"},"returnParameters":{"id":108,"nodeType":"ParameterList","parameters":[{"constant":false,"id":107,"mutability":"mutable","name":"hookFlags","nameLocation":"2671:9:4","nodeType":"VariableDeclaration","scope":109,"src":"2654:26:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$2167_memory_ptr","typeString":"struct HookFlags"},"typeName":{"id":106,"nodeType":"UserDefinedTypeName","pathNode":{"id":105,"name":"HookFlags","nameLocations":["2654:9:4"],"nodeType":"IdentifierPath","referencedDeclaration":2167,"src":"2654:9:4"},"referencedDeclaration":2167,"src":"2654:9:4","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$2167_storage_ptr","typeString":"struct HookFlags"}},"visibility":"internal"}],"src":"2653:28:4"},"scope":275,"src":"2607:75:4","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":110,"nodeType":"StructuredDocumentation","src":"2897:484:4","text":" @notice Hook executed before pool initialization.\n @dev Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param exactAmountsIn Exact amounts of input tokens\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with initialization"},"functionSelector":"1c149e28","id":120,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeInitialize","nameLocation":"3395:18:4","nodeType":"FunctionDefinition","parameters":{"id":116,"nodeType":"ParameterList","parameters":[{"constant":false,"id":113,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"3431:14:4","nodeType":"VariableDeclaration","scope":120,"src":"3414:31:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":111,"name":"uint256","nodeType":"ElementaryTypeName","src":"3414:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":112,"nodeType":"ArrayTypeName","src":"3414:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":115,"mutability":"mutable","name":"userData","nameLocation":"3460:8:4","nodeType":"VariableDeclaration","scope":120,"src":"3447:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":114,"name":"bytes","nodeType":"ElementaryTypeName","src":"3447:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3413:56:4"},"returnParameters":{"id":119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":118,"mutability":"mutable","name":"success","nameLocation":"3493:7:4","nodeType":"VariableDeclaration","scope":120,"src":"3488:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":117,"name":"bool","nodeType":"ElementaryTypeName","src":"3488:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3487:14:4"},"scope":275,"src":"3386:116:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":121,"nodeType":"StructuredDocumentation","src":"3508:563:4","text":" @notice Hook to be executed after pool initialization.\n @dev Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param exactAmountsIn Exact amounts of input tokens\n @param bptAmountOut Amount of pool tokens minted during initialization\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool accepts the initialization results"},"functionSelector":"38be241d","id":133,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterInitialize","nameLocation":"4085:17:4","nodeType":"FunctionDefinition","parameters":{"id":129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":124,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"4129:14:4","nodeType":"VariableDeclaration","scope":133,"src":"4112:31:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":122,"name":"uint256","nodeType":"ElementaryTypeName","src":"4112:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":123,"nodeType":"ArrayTypeName","src":"4112:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":126,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4161:12:4","nodeType":"VariableDeclaration","scope":133,"src":"4153:20:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":125,"name":"uint256","nodeType":"ElementaryTypeName","src":"4153:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":128,"mutability":"mutable","name":"userData","nameLocation":"4196:8:4","nodeType":"VariableDeclaration","scope":133,"src":"4183:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":127,"name":"bytes","nodeType":"ElementaryTypeName","src":"4183:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4102:108:4"},"returnParameters":{"id":132,"nodeType":"ParameterList","parameters":[{"constant":false,"id":131,"mutability":"mutable","name":"success","nameLocation":"4234:7:4","nodeType":"VariableDeclaration","scope":133,"src":"4229:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":130,"name":"bool","nodeType":"ElementaryTypeName","src":"4229:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4228:14:4"},"scope":275,"src":"4076:167:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":134,"nodeType":"StructuredDocumentation","src":"4461:953:4","text":" @notice Hook to be executed before adding liquidity.\n @dev Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param maxAmountsInScaled18 Maximum amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"45421ec7","id":156,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeAddLiquidity","nameLocation":"5428:20:4","nodeType":"FunctionDefinition","parameters":{"id":152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":136,"mutability":"mutable","name":"router","nameLocation":"5466:6:4","nodeType":"VariableDeclaration","scope":156,"src":"5458:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":135,"name":"address","nodeType":"ElementaryTypeName","src":"5458:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":138,"mutability":"mutable","name":"pool","nameLocation":"5490:4:4","nodeType":"VariableDeclaration","scope":156,"src":"5482:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":137,"name":"address","nodeType":"ElementaryTypeName","src":"5482:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":141,"mutability":"mutable","name":"kind","nameLocation":"5521:4:4","nodeType":"VariableDeclaration","scope":156,"src":"5504:21:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2347","typeString":"enum AddLiquidityKind"},"typeName":{"id":140,"nodeType":"UserDefinedTypeName","pathNode":{"id":139,"name":"AddLiquidityKind","nameLocations":["5504:16:4"],"nodeType":"IdentifierPath","referencedDeclaration":2347,"src":"5504:16:4"},"referencedDeclaration":2347,"src":"5504:16:4","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2347","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":144,"mutability":"mutable","name":"maxAmountsInScaled18","nameLocation":"5552:20:4","nodeType":"VariableDeclaration","scope":156,"src":"5535:37:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":142,"name":"uint256","nodeType":"ElementaryTypeName","src":"5535:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":143,"nodeType":"ArrayTypeName","src":"5535:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":146,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"5590:15:4","nodeType":"VariableDeclaration","scope":156,"src":"5582:23:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":145,"name":"uint256","nodeType":"ElementaryTypeName","src":"5582:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":149,"mutability":"mutable","name":"balancesScaled18","nameLocation":"5632:16:4","nodeType":"VariableDeclaration","scope":156,"src":"5615:33:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":147,"name":"uint256","nodeType":"ElementaryTypeName","src":"5615:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":148,"nodeType":"ArrayTypeName","src":"5615:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":151,"mutability":"mutable","name":"userData","nameLocation":"5671:8:4","nodeType":"VariableDeclaration","scope":156,"src":"5658:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":150,"name":"bytes","nodeType":"ElementaryTypeName","src":"5658:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5448:237:4"},"returnParameters":{"id":155,"nodeType":"ParameterList","parameters":[{"constant":false,"id":154,"mutability":"mutable","name":"success","nameLocation":"5709:7:4","nodeType":"VariableDeclaration","scope":156,"src":"5704:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":153,"name":"bool","nodeType":"ElementaryTypeName","src":"5704:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5703:14:4"},"scope":275,"src":"5419:299:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":157,"nodeType":"StructuredDocumentation","src":"5724:1250:4","text":" @notice Hook to be executed after adding liquidity.\n @dev Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param amountsInScaled18 Actual amounts of tokens added, sorted in token registration order\n @param amountsInRaw Actual amounts of tokens added, sorted in token registration order\n @param bptAmountOut Amount of pool tokens minted\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Additional (optional) data provided by the user\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook"},"functionSelector":"976907cc","id":185,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterAddLiquidity","nameLocation":"6988:19:4","nodeType":"FunctionDefinition","parameters":{"id":178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":159,"mutability":"mutable","name":"router","nameLocation":"7025:6:4","nodeType":"VariableDeclaration","scope":185,"src":"7017:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":158,"name":"address","nodeType":"ElementaryTypeName","src":"7017:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":161,"mutability":"mutable","name":"pool","nameLocation":"7049:4:4","nodeType":"VariableDeclaration","scope":185,"src":"7041:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":160,"name":"address","nodeType":"ElementaryTypeName","src":"7041:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":164,"mutability":"mutable","name":"kind","nameLocation":"7080:4:4","nodeType":"VariableDeclaration","scope":185,"src":"7063:21:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2347","typeString":"enum AddLiquidityKind"},"typeName":{"id":163,"nodeType":"UserDefinedTypeName","pathNode":{"id":162,"name":"AddLiquidityKind","nameLocations":["7063:16:4"],"nodeType":"IdentifierPath","referencedDeclaration":2347,"src":"7063:16:4"},"referencedDeclaration":2347,"src":"7063:16:4","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2347","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":167,"mutability":"mutable","name":"amountsInScaled18","nameLocation":"7111:17:4","nodeType":"VariableDeclaration","scope":185,"src":"7094:34:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":165,"name":"uint256","nodeType":"ElementaryTypeName","src":"7094:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":166,"nodeType":"ArrayTypeName","src":"7094:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":170,"mutability":"mutable","name":"amountsInRaw","nameLocation":"7155:12:4","nodeType":"VariableDeclaration","scope":185,"src":"7138:29:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":168,"name":"uint256","nodeType":"ElementaryTypeName","src":"7138:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":169,"nodeType":"ArrayTypeName","src":"7138:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":172,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7185:12:4","nodeType":"VariableDeclaration","scope":185,"src":"7177:20:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":171,"name":"uint256","nodeType":"ElementaryTypeName","src":"7177:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":175,"mutability":"mutable","name":"balancesScaled18","nameLocation":"7224:16:4","nodeType":"VariableDeclaration","scope":185,"src":"7207:33:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":173,"name":"uint256","nodeType":"ElementaryTypeName","src":"7207:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":174,"nodeType":"ArrayTypeName","src":"7207:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":177,"mutability":"mutable","name":"userData","nameLocation":"7263:8:4","nodeType":"VariableDeclaration","scope":185,"src":"7250:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":176,"name":"bytes","nodeType":"ElementaryTypeName","src":"7250:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7007:270:4"},"returnParameters":{"id":184,"nodeType":"ParameterList","parameters":[{"constant":false,"id":180,"mutability":"mutable","name":"success","nameLocation":"7301:7:4","nodeType":"VariableDeclaration","scope":185,"src":"7296:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":179,"name":"bool","nodeType":"ElementaryTypeName","src":"7296:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":183,"mutability":"mutable","name":"hookAdjustedAmountsInRaw","nameLocation":"7327:24:4","nodeType":"VariableDeclaration","scope":185,"src":"7310:41:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":181,"name":"uint256","nodeType":"ElementaryTypeName","src":"7310:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":182,"nodeType":"ArrayTypeName","src":"7310:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7295:57:4"},"scope":275,"src":"6979:374:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":186,"nodeType":"StructuredDocumentation","src":"7572:992:4","text":" @notice Hook to be executed before removing liquidity.\n @dev Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The type of remove liquidity operation (e.g., proportional, custom)\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"ba5f9f40","id":208,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeRemoveLiquidity","nameLocation":"8578:23:4","nodeType":"FunctionDefinition","parameters":{"id":204,"nodeType":"ParameterList","parameters":[{"constant":false,"id":188,"mutability":"mutable","name":"router","nameLocation":"8619:6:4","nodeType":"VariableDeclaration","scope":208,"src":"8611:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":187,"name":"address","nodeType":"ElementaryTypeName","src":"8611:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":190,"mutability":"mutable","name":"pool","nameLocation":"8643:4:4","nodeType":"VariableDeclaration","scope":208,"src":"8635:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":189,"name":"address","nodeType":"ElementaryTypeName","src":"8635:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":193,"mutability":"mutable","name":"kind","nameLocation":"8677:4:4","nodeType":"VariableDeclaration","scope":208,"src":"8657:24:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2368","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":192,"nodeType":"UserDefinedTypeName","pathNode":{"id":191,"name":"RemoveLiquidityKind","nameLocations":["8657:19:4"],"nodeType":"IdentifierPath","referencedDeclaration":2368,"src":"8657:19:4"},"referencedDeclaration":2368,"src":"8657:19:4","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2368","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":195,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"8699:14:4","nodeType":"VariableDeclaration","scope":208,"src":"8691:22:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":194,"name":"uint256","nodeType":"ElementaryTypeName","src":"8691:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":198,"mutability":"mutable","name":"minAmountsOutScaled18","nameLocation":"8740:21:4","nodeType":"VariableDeclaration","scope":208,"src":"8723:38:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":196,"name":"uint256","nodeType":"ElementaryTypeName","src":"8723:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":197,"nodeType":"ArrayTypeName","src":"8723:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":201,"mutability":"mutable","name":"balancesScaled18","nameLocation":"8788:16:4","nodeType":"VariableDeclaration","scope":208,"src":"8771:33:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":199,"name":"uint256","nodeType":"ElementaryTypeName","src":"8771:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":200,"nodeType":"ArrayTypeName","src":"8771:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":203,"mutability":"mutable","name":"userData","nameLocation":"8827:8:4","nodeType":"VariableDeclaration","scope":208,"src":"8814:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":202,"name":"bytes","nodeType":"ElementaryTypeName","src":"8814:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8601:240:4"},"returnParameters":{"id":207,"nodeType":"ParameterList","parameters":[{"constant":false,"id":206,"mutability":"mutable","name":"success","nameLocation":"8865:7:4","nodeType":"VariableDeclaration","scope":208,"src":"8860:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":205,"name":"bool","nodeType":"ElementaryTypeName","src":"8860:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8859:14:4"},"scope":275,"src":"8569:305:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":209,"nodeType":"StructuredDocumentation","src":"8880:1276:4","text":" @notice Hook to be executed after removing liquidity.\n @dev Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The type of remove liquidity operation (e.g., proportional, custom)\n @param bptAmountIn Amount of pool tokens to burn\n @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Additional (optional) data provided by the user\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook"},"functionSelector":"2754888d","id":237,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterRemoveLiquidity","nameLocation":"10170:22:4","nodeType":"FunctionDefinition","parameters":{"id":230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":211,"mutability":"mutable","name":"router","nameLocation":"10210:6:4","nodeType":"VariableDeclaration","scope":237,"src":"10202:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":210,"name":"address","nodeType":"ElementaryTypeName","src":"10202:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":213,"mutability":"mutable","name":"pool","nameLocation":"10234:4:4","nodeType":"VariableDeclaration","scope":237,"src":"10226:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":212,"name":"address","nodeType":"ElementaryTypeName","src":"10226:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":216,"mutability":"mutable","name":"kind","nameLocation":"10268:4:4","nodeType":"VariableDeclaration","scope":237,"src":"10248:24:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2368","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":215,"nodeType":"UserDefinedTypeName","pathNode":{"id":214,"name":"RemoveLiquidityKind","nameLocations":["10248:19:4"],"nodeType":"IdentifierPath","referencedDeclaration":2368,"src":"10248:19:4"},"referencedDeclaration":2368,"src":"10248:19:4","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2368","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":218,"mutability":"mutable","name":"bptAmountIn","nameLocation":"10290:11:4","nodeType":"VariableDeclaration","scope":237,"src":"10282:19:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":217,"name":"uint256","nodeType":"ElementaryTypeName","src":"10282:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":221,"mutability":"mutable","name":"amountsOutScaled18","nameLocation":"10328:18:4","nodeType":"VariableDeclaration","scope":237,"src":"10311:35:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":219,"name":"uint256","nodeType":"ElementaryTypeName","src":"10311:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":220,"nodeType":"ArrayTypeName","src":"10311:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":224,"mutability":"mutable","name":"amountsOutRaw","nameLocation":"10373:13:4","nodeType":"VariableDeclaration","scope":237,"src":"10356:30:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":222,"name":"uint256","nodeType":"ElementaryTypeName","src":"10356:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":223,"nodeType":"ArrayTypeName","src":"10356:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":227,"mutability":"mutable","name":"balancesScaled18","nameLocation":"10413:16:4","nodeType":"VariableDeclaration","scope":237,"src":"10396:33:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":225,"name":"uint256","nodeType":"ElementaryTypeName","src":"10396:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":226,"nodeType":"ArrayTypeName","src":"10396:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":229,"mutability":"mutable","name":"userData","nameLocation":"10452:8:4","nodeType":"VariableDeclaration","scope":237,"src":"10439:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":228,"name":"bytes","nodeType":"ElementaryTypeName","src":"10439:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10192:274:4"},"returnParameters":{"id":236,"nodeType":"ParameterList","parameters":[{"constant":false,"id":232,"mutability":"mutable","name":"success","nameLocation":"10490:7:4","nodeType":"VariableDeclaration","scope":237,"src":"10485:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":231,"name":"bool","nodeType":"ElementaryTypeName","src":"10485:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":235,"mutability":"mutable","name":"hookAdjustedAmountsOutRaw","nameLocation":"10516:25:4","nodeType":"VariableDeclaration","scope":237,"src":"10499:42:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":233,"name":"uint256","nodeType":"ElementaryTypeName","src":"10499:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":234,"nodeType":"ArrayTypeName","src":"10499:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10484:58:4"},"scope":275,"src":"10161:382:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":238,"nodeType":"StructuredDocumentation","src":"10753:556:4","text":" @notice Called before a swap to give the Pool an opportunity to perform actions.\n @dev Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see PoolSwapParams for struct definition)\n @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"5211fa77","id":248,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeSwap","nameLocation":"11323:12:4","nodeType":"FunctionDefinition","parameters":{"id":244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":241,"mutability":"mutable","name":"params","nameLocation":"11360:6:4","nodeType":"VariableDeclaration","scope":248,"src":"11336:30:4","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2312_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":240,"nodeType":"UserDefinedTypeName","pathNode":{"id":239,"name":"PoolSwapParams","nameLocations":["11336:14:4"],"nodeType":"IdentifierPath","referencedDeclaration":2312,"src":"11336:14:4"},"referencedDeclaration":2312,"src":"11336:14:4","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2312_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":243,"mutability":"mutable","name":"pool","nameLocation":"11376:4:4","nodeType":"VariableDeclaration","scope":248,"src":"11368:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":242,"name":"address","nodeType":"ElementaryTypeName","src":"11368:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11335:46:4"},"returnParameters":{"id":247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":246,"mutability":"mutable","name":"success","nameLocation":"11405:7:4","nodeType":"VariableDeclaration","scope":248,"src":"11400:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":245,"name":"bool","nodeType":"ElementaryTypeName","src":"11400:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11399:14:4"},"scope":275,"src":"11314:100:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":249,"nodeType":"StructuredDocumentation","src":"11420:671:4","text":" @notice Called after a swap to perform further actions once the balances have been updated by the swap.\n @dev Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should\n use the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see above for struct definition)\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook"},"functionSelector":"18b6eb55","id":259,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterSwap","nameLocation":"12105:11:4","nodeType":"FunctionDefinition","parameters":{"id":253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":252,"mutability":"mutable","name":"params","nameLocation":"12151:6:4","nodeType":"VariableDeclaration","scope":259,"src":"12126:31:4","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$2341_calldata_ptr","typeString":"struct AfterSwapParams"},"typeName":{"id":251,"nodeType":"UserDefinedTypeName","pathNode":{"id":250,"name":"AfterSwapParams","nameLocations":["12126:15:4"],"nodeType":"IdentifierPath","referencedDeclaration":2341,"src":"12126:15:4"},"referencedDeclaration":2341,"src":"12126:15:4","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$2341_storage_ptr","typeString":"struct AfterSwapParams"}},"visibility":"internal"}],"src":"12116:47:4"},"returnParameters":{"id":258,"nodeType":"ParameterList","parameters":[{"constant":false,"id":255,"mutability":"mutable","name":"success","nameLocation":"12187:7:4","nodeType":"VariableDeclaration","scope":259,"src":"12182:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":254,"name":"bool","nodeType":"ElementaryTypeName","src":"12182:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":257,"mutability":"mutable","name":"hookAdjustedAmountCalculatedRaw","nameLocation":"12204:31:4","nodeType":"VariableDeclaration","scope":259,"src":"12196:39:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":256,"name":"uint256","nodeType":"ElementaryTypeName","src":"12196:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12181:55:4"},"scope":275,"src":"12096:141:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":260,"nodeType":"StructuredDocumentation","src":"12243:795:4","text":" @notice Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\n @dev Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see PoolSwapParams for struct definition)\n @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage, for reference\n @return success True if the pool wishes to proceed with settlement\n @return dynamicSwapFeePercentage Value of the swap fee percentage, as an 18-decimal FP value"},"functionSelector":"a0e8f5ac","id":274,"implemented":false,"kind":"function","modifiers":[],"name":"onComputeDynamicSwapFeePercentage","nameLocation":"13052:33:4","nodeType":"FunctionDefinition","parameters":{"id":268,"nodeType":"ParameterList","parameters":[{"constant":false,"id":263,"mutability":"mutable","name":"params","nameLocation":"13119:6:4","nodeType":"VariableDeclaration","scope":274,"src":"13095:30:4","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2312_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":262,"nodeType":"UserDefinedTypeName","pathNode":{"id":261,"name":"PoolSwapParams","nameLocations":["13095:14:4"],"nodeType":"IdentifierPath","referencedDeclaration":2312,"src":"13095:14:4"},"referencedDeclaration":2312,"src":"13095:14:4","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2312_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":265,"mutability":"mutable","name":"pool","nameLocation":"13143:4:4","nodeType":"VariableDeclaration","scope":274,"src":"13135:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":264,"name":"address","nodeType":"ElementaryTypeName","src":"13135:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":267,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"13165:23:4","nodeType":"VariableDeclaration","scope":274,"src":"13157:31:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":266,"name":"uint256","nodeType":"ElementaryTypeName","src":"13157:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13085:109:4"},"returnParameters":{"id":273,"nodeType":"ParameterList","parameters":[{"constant":false,"id":270,"mutability":"mutable","name":"success","nameLocation":"13223:7:4","nodeType":"VariableDeclaration","scope":274,"src":"13218:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":269,"name":"bool","nodeType":"ElementaryTypeName","src":"13218:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":272,"mutability":"mutable","name":"dynamicSwapFeePercentage","nameLocation":"13240:24:4","nodeType":"VariableDeclaration","scope":274,"src":"13232:32:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":271,"name":"uint256","nodeType":"ElementaryTypeName","src":"13232:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13217:48:4"},"scope":275,"src":"13043:223:4","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":276,"src":"975:12293:4","usedErrors":[],"usedEvents":[]}],"src":"46:13223:4"},"id":4},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","exportedSymbols":{"IERC20":[6486],"IProtocolFeeController":[613],"IVault":[651]},"id":614,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":277,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:5"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":279,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":614,"sourceUnit":6487,"src":"72:72:5","symbolAliases":[{"foreign":{"id":278,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6486,"src":"81:6:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":281,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":614,"sourceUnit":652,"src":"146:38:5","symbolAliases":[{"foreign":{"id":280,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":651,"src":"155:6:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolFeeController","contractDependencies":[],"contractKind":"interface","documentation":{"id":282,"nodeType":"StructuredDocumentation","src":"186:80:5","text":"@notice Contract that handles protocol and pool creator fees for the Vault."},"fullyImplemented":false,"id":613,"linearizedBaseContracts":[613],"name":"IProtocolFeeController","nameLocation":"276:22:5","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":283,"nodeType":"StructuredDocumentation","src":"305:157:5","text":" @notice Emitted when the protocol swap fee percentage is updated.\n @param swapFeePercentage The updated protocol swap fee percentage"},"eventSelector":"bf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d","id":287,"name":"GlobalProtocolSwapFeePercentageChanged","nameLocation":"473:38:5","nodeType":"EventDefinition","parameters":{"id":286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":285,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"520:17:5","nodeType":"VariableDeclaration","scope":287,"src":"512:25:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":284,"name":"uint256","nodeType":"ElementaryTypeName","src":"512:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"511:27:5"},"src":"467:72:5"},{"anonymous":false,"documentation":{"id":288,"nodeType":"StructuredDocumentation","src":"545:160:5","text":" @notice Emitted when the protocol yield fee percentage is updated.\n @param yieldFeePercentage The updated protocol yield fee percentage"},"eventSelector":"48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f6","id":292,"name":"GlobalProtocolYieldFeePercentageChanged","nameLocation":"716:39:5","nodeType":"EventDefinition","parameters":{"id":291,"nodeType":"ParameterList","parameters":[{"constant":false,"id":290,"indexed":false,"mutability":"mutable","name":"yieldFeePercentage","nameLocation":"764:18:5","nodeType":"VariableDeclaration","scope":292,"src":"756:26:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":289,"name":"uint256","nodeType":"ElementaryTypeName","src":"756:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"755:28:5"},"src":"710:74:5"},{"anonymous":false,"documentation":{"id":293,"nodeType":"StructuredDocumentation","src":"790:245:5","text":" @notice Emitted when the protocol swap fee percentage is updated for a specific pool.\n @param pool The pool whose protocol swap fee will be changed\n @param swapFeePercentage The updated protocol swap fee percentage"},"eventSelector":"97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e","id":299,"name":"ProtocolSwapFeePercentageChanged","nameLocation":"1046:32:5","nodeType":"EventDefinition","parameters":{"id":298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":295,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1095:4:5","nodeType":"VariableDeclaration","scope":299,"src":"1079:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":294,"name":"address","nodeType":"ElementaryTypeName","src":"1079:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":297,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1109:17:5","nodeType":"VariableDeclaration","scope":299,"src":"1101:25:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":296,"name":"uint256","nodeType":"ElementaryTypeName","src":"1101:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1078:49:5"},"src":"1040:88:5"},{"anonymous":false,"documentation":{"id":300,"nodeType":"StructuredDocumentation","src":"1134:249:5","text":" @notice Emitted when the protocol yield fee percentage is updated for a specific pool.\n @param pool The pool whose protocol yield fee will be changed\n @param yieldFeePercentage The updated protocol yield fee percentage"},"eventSelector":"af47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd","id":306,"name":"ProtocolYieldFeePercentageChanged","nameLocation":"1394:33:5","nodeType":"EventDefinition","parameters":{"id":305,"nodeType":"ParameterList","parameters":[{"constant":false,"id":302,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1444:4:5","nodeType":"VariableDeclaration","scope":306,"src":"1428:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":301,"name":"address","nodeType":"ElementaryTypeName","src":"1428:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":304,"indexed":false,"mutability":"mutable","name":"yieldFeePercentage","nameLocation":"1458:18:5","nodeType":"VariableDeclaration","scope":306,"src":"1450:26:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":303,"name":"uint256","nodeType":"ElementaryTypeName","src":"1450:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1427:50:5"},"src":"1388:90:5"},{"anonymous":false,"documentation":{"id":307,"nodeType":"StructuredDocumentation","src":"1484:267:5","text":" @notice Emitted when the pool creator swap fee percentage of a pool is updated.\n @param pool The pool whose pool creator swap fee will be changed\n @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage for the pool"},"eventSelector":"b7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c","id":313,"name":"PoolCreatorSwapFeePercentageChanged","nameLocation":"1762:35:5","nodeType":"EventDefinition","parameters":{"id":312,"nodeType":"ParameterList","parameters":[{"constant":false,"id":309,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1814:4:5","nodeType":"VariableDeclaration","scope":313,"src":"1798:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":308,"name":"address","nodeType":"ElementaryTypeName","src":"1798:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":311,"indexed":false,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"1828:28:5","nodeType":"VariableDeclaration","scope":313,"src":"1820:36:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":310,"name":"uint256","nodeType":"ElementaryTypeName","src":"1820:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1797:60:5"},"src":"1756:102:5"},{"anonymous":false,"documentation":{"id":314,"nodeType":"StructuredDocumentation","src":"1864:271:5","text":" @notice Emitted when the pool creator yield fee percentage of a pool is updated.\n @param pool The pool whose pool creator yield fee will be changed\n @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage for the pool"},"eventSelector":"47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34","id":320,"name":"PoolCreatorYieldFeePercentageChanged","nameLocation":"2146:36:5","nodeType":"EventDefinition","parameters":{"id":319,"nodeType":"ParameterList","parameters":[{"constant":false,"id":316,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2199:4:5","nodeType":"VariableDeclaration","scope":320,"src":"2183:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":315,"name":"address","nodeType":"ElementaryTypeName","src":"2183:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":318,"indexed":false,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"2213:29:5","nodeType":"VariableDeclaration","scope":320,"src":"2205:37:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":317,"name":"uint256","nodeType":"ElementaryTypeName","src":"2205:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2182:61:5"},"src":"2140:104:5"},{"anonymous":false,"documentation":{"id":321,"nodeType":"StructuredDocumentation","src":"2250:560:5","text":" @notice Logs the collection of protocol swap fees in a specific token and amount.\n @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass\n multiple operations.\n @param pool The pool on which the swap fee was charged\n @param token The token in which the swap fee was charged\n @param amount The amount of the token collected in fees"},"eventSelector":"ae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f","id":330,"name":"ProtocolSwapFeeCollected","nameLocation":"2821:24:5","nodeType":"EventDefinition","parameters":{"id":329,"nodeType":"ParameterList","parameters":[{"constant":false,"id":323,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2862:4:5","nodeType":"VariableDeclaration","scope":330,"src":"2846:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":322,"name":"address","nodeType":"ElementaryTypeName","src":"2846:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":326,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"2883:5:5","nodeType":"VariableDeclaration","scope":330,"src":"2868:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":325,"nodeType":"UserDefinedTypeName","pathNode":{"id":324,"name":"IERC20","nameLocations":["2868:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"2868:6:5"},"referencedDeclaration":6486,"src":"2868:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":328,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2898:6:5","nodeType":"VariableDeclaration","scope":330,"src":"2890:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":327,"name":"uint256","nodeType":"ElementaryTypeName","src":"2890:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2845:60:5"},"src":"2815:91:5"},{"anonymous":false,"documentation":{"id":331,"nodeType":"StructuredDocumentation","src":"2912:564:5","text":" @notice Logs the collection of protocol yield fees in a specific token and amount.\n @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass\n multiple operations.\n @param pool The pool on which the yield fee was charged\n @param token The token in which the yield fee was charged\n @param amount The amount of the token collected in fees"},"eventSelector":"e505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e2","id":340,"name":"ProtocolYieldFeeCollected","nameLocation":"3487:25:5","nodeType":"EventDefinition","parameters":{"id":339,"nodeType":"ParameterList","parameters":[{"constant":false,"id":333,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"3529:4:5","nodeType":"VariableDeclaration","scope":340,"src":"3513:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":332,"name":"address","nodeType":"ElementaryTypeName","src":"3513:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":336,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"3550:5:5","nodeType":"VariableDeclaration","scope":340,"src":"3535:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":335,"nodeType":"UserDefinedTypeName","pathNode":{"id":334,"name":"IERC20","nameLocations":["3535:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"3535:6:5"},"referencedDeclaration":6486,"src":"3535:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":338,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"3565:6:5","nodeType":"VariableDeclaration","scope":340,"src":"3557:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":337,"name":"uint256","nodeType":"ElementaryTypeName","src":"3557:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3512:60:5"},"src":"3481:92:5"},{"anonymous":false,"documentation":{"id":341,"nodeType":"StructuredDocumentation","src":"3579:333:5","text":" @notice Logs the withdrawal of protocol fees in a specific token and amount.\n @param pool The pool from which protocol fees are being withdrawn\n @param token The token being withdrawn\n @param recipient The recipient of the funds\n @param amount The amount of the fee token that was withdrawn"},"eventSelector":"1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b5","id":352,"name":"ProtocolFeesWithdrawn","nameLocation":"3923:21:5","nodeType":"EventDefinition","parameters":{"id":351,"nodeType":"ParameterList","parameters":[{"constant":false,"id":343,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"3961:4:5","nodeType":"VariableDeclaration","scope":352,"src":"3945:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":342,"name":"address","nodeType":"ElementaryTypeName","src":"3945:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":346,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"3982:5:5","nodeType":"VariableDeclaration","scope":352,"src":"3967:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":345,"nodeType":"UserDefinedTypeName","pathNode":{"id":344,"name":"IERC20","nameLocations":["3967:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"3967:6:5"},"referencedDeclaration":6486,"src":"3967:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":348,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"4005:9:5","nodeType":"VariableDeclaration","scope":352,"src":"3989:25:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":347,"name":"address","nodeType":"ElementaryTypeName","src":"3989:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":350,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"4024:6:5","nodeType":"VariableDeclaration","scope":352,"src":"4016:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":349,"name":"uint256","nodeType":"ElementaryTypeName","src":"4016:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3944:87:5"},"src":"3917:115:5"},{"anonymous":false,"documentation":{"id":353,"nodeType":"StructuredDocumentation","src":"4038:398:5","text":" @notice Logs the withdrawal of pool creator fees in a specific token and amount.\n @param pool The pool from which pool creator fees are being withdrawn\n @param token The token being withdrawn\n @param recipient The recipient of the funds (the pool creator if permissionless, or another account)\n @param amount The amount of the fee token that was withdrawn"},"eventSelector":"938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f9","id":364,"name":"PoolCreatorFeesWithdrawn","nameLocation":"4447:24:5","nodeType":"EventDefinition","parameters":{"id":363,"nodeType":"ParameterList","parameters":[{"constant":false,"id":355,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4497:4:5","nodeType":"VariableDeclaration","scope":364,"src":"4481:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":354,"name":"address","nodeType":"ElementaryTypeName","src":"4481:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":358,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"4526:5:5","nodeType":"VariableDeclaration","scope":364,"src":"4511:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":357,"nodeType":"UserDefinedTypeName","pathNode":{"id":356,"name":"IERC20","nameLocations":["4511:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"4511:6:5"},"referencedDeclaration":6486,"src":"4511:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":360,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"4557:9:5","nodeType":"VariableDeclaration","scope":364,"src":"4541:25:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":359,"name":"address","nodeType":"ElementaryTypeName","src":"4541:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":362,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"4584:6:5","nodeType":"VariableDeclaration","scope":364,"src":"4576:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":361,"name":"uint256","nodeType":"ElementaryTypeName","src":"4576:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4471:125:5"},"src":"4441:156:5"},{"anonymous":false,"documentation":{"id":365,"nodeType":"StructuredDocumentation","src":"4603:529:5","text":" @notice Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\n @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n equal the current global swap fee percentage.\n @param pool The pool being registered\n @param aggregateSwapFeePercentage The initial aggregate swap fee percentage\n @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially"},"eventSelector":"a34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a78564","id":373,"name":"InitialPoolAggregateSwapFeePercentage","nameLocation":"5143:37:5","nodeType":"EventDefinition","parameters":{"id":372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":367,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5206:4:5","nodeType":"VariableDeclaration","scope":373,"src":"5190:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":366,"name":"address","nodeType":"ElementaryTypeName","src":"5190:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":369,"indexed":false,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"5228:26:5","nodeType":"VariableDeclaration","scope":373,"src":"5220:34:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":368,"name":"uint256","nodeType":"ElementaryTypeName","src":"5220:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":371,"indexed":false,"mutability":"mutable","name":"isProtocolFeeExempt","nameLocation":"5269:19:5","nodeType":"VariableDeclaration","scope":373,"src":"5264:24:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":370,"name":"bool","nodeType":"ElementaryTypeName","src":"5264:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5180:114:5"},"src":"5137:158:5"},{"anonymous":false,"documentation":{"id":374,"nodeType":"StructuredDocumentation","src":"5301:533:5","text":" @notice Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\n @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n equal the current global yield fee percentage.\n @param pool The pool being registered\n @param aggregateYieldFeePercentage The initial aggregate yield fee percentage\n @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially"},"eventSelector":"ce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb","id":382,"name":"InitialPoolAggregateYieldFeePercentage","nameLocation":"5845:38:5","nodeType":"EventDefinition","parameters":{"id":381,"nodeType":"ParameterList","parameters":[{"constant":false,"id":376,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5909:4:5","nodeType":"VariableDeclaration","scope":382,"src":"5893:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":375,"name":"address","nodeType":"ElementaryTypeName","src":"5893:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":378,"indexed":false,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"5931:27:5","nodeType":"VariableDeclaration","scope":382,"src":"5923:35:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":377,"name":"uint256","nodeType":"ElementaryTypeName","src":"5923:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":380,"indexed":false,"mutability":"mutable","name":"isProtocolFeeExempt","nameLocation":"5973:19:5","nodeType":"VariableDeclaration","scope":382,"src":"5968:24:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":379,"name":"bool","nodeType":"ElementaryTypeName","src":"5968:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5883:115:5"},"src":"5839:160:5"},{"anonymous":false,"documentation":{"id":383,"nodeType":"StructuredDocumentation","src":"6005:677:5","text":" @notice Emitted for pools registered with creators.\n @dev The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this\n simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee\n counterpart also include the protocol fee exemption flag, we might as well include it here as well.\n @param pool The address of the pool being registered\n @param poolCreator The address of the pool creator (non-zero, or the event would not be emitted)\n @param protocolFeeExempt True if the pool is initially exempt from protocol fees"},"eventSelector":"a90fdff0801794d86ec8df4bdd2b7e627d30052d0658e18cb977b38248ee45e8","id":391,"name":"PoolWithCreatorRegistered","nameLocation":"6693:25:5","nodeType":"EventDefinition","parameters":{"id":390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":385,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6735:4:5","nodeType":"VariableDeclaration","scope":391,"src":"6719:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":384,"name":"address","nodeType":"ElementaryTypeName","src":"6719:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":387,"indexed":true,"mutability":"mutable","name":"poolCreator","nameLocation":"6757:11:5","nodeType":"VariableDeclaration","scope":391,"src":"6741:27:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":386,"name":"address","nodeType":"ElementaryTypeName","src":"6741:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":389,"indexed":false,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"6775:17:5","nodeType":"VariableDeclaration","scope":391,"src":"6770:22:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":388,"name":"bool","nodeType":"ElementaryTypeName","src":"6770:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6718:75:5"},"src":"6687:107:5"},{"documentation":{"id":392,"nodeType":"StructuredDocumentation","src":"6800:219:5","text":" @notice Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\n @dev Note that this is checked for both the global and pool-specific protocol swap fee percentages."},"errorSelector":"7e6eb7fb","id":394,"name":"ProtocolSwapFeePercentageTooHigh","nameLocation":"7030:32:5","nodeType":"ErrorDefinition","parameters":{"id":393,"nodeType":"ParameterList","parameters":[],"src":"7062:2:5"},"src":"7024:41:5"},{"documentation":{"id":395,"nodeType":"StructuredDocumentation","src":"7071:221:5","text":" @notice Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\n @dev Note that this is checked for both the global and pool-specific protocol yield fee percentages."},"errorSelector":"a7849e8e","id":397,"name":"ProtocolYieldFeePercentageTooHigh","nameLocation":"7303:33:5","nodeType":"ErrorDefinition","parameters":{"id":396,"nodeType":"ParameterList","parameters":[],"src":"7336:2:5"},"src":"7297:42:5"},{"documentation":{"id":398,"nodeType":"StructuredDocumentation","src":"7345:156:5","text":" @notice Error raised if there is no pool creator on a withdrawal attempt from the given pool.\n @param pool The pool with no creator"},"errorSelector":"8bcbf353","id":402,"name":"PoolCreatorNotRegistered","nameLocation":"7512:24:5","nodeType":"ErrorDefinition","parameters":{"id":401,"nodeType":"ParameterList","parameters":[{"constant":false,"id":400,"mutability":"mutable","name":"pool","nameLocation":"7545:4:5","nodeType":"VariableDeclaration","scope":402,"src":"7537:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":399,"name":"address","nodeType":"ElementaryTypeName","src":"7537:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7536:14:5"},"src":"7506:45:5"},{"documentation":{"id":403,"nodeType":"StructuredDocumentation","src":"7557:236:5","text":" @notice Error raised if the wrong account attempts to withdraw pool creator fees.\n @param caller The account attempting to withdraw pool creator fees\n @param pool The pool the caller tried to withdraw from"},"errorSelector":"fbecdbf4","id":409,"name":"CallerIsNotPoolCreator","nameLocation":"7804:22:5","nodeType":"ErrorDefinition","parameters":{"id":408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":405,"mutability":"mutable","name":"caller","nameLocation":"7835:6:5","nodeType":"VariableDeclaration","scope":409,"src":"7827:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":404,"name":"address","nodeType":"ElementaryTypeName","src":"7827:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":407,"mutability":"mutable","name":"pool","nameLocation":"7851:4:5","nodeType":"VariableDeclaration","scope":409,"src":"7843:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":406,"name":"address","nodeType":"ElementaryTypeName","src":"7843:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7826:30:5"},"src":"7798:59:5"},{"documentation":{"id":410,"nodeType":"StructuredDocumentation","src":"7863:110:5","text":"@notice Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value."},"errorSelector":"0370da74","id":412,"name":"PoolCreatorFeePercentageTooHigh","nameLocation":"7984:31:5","nodeType":"ErrorDefinition","parameters":{"id":411,"nodeType":"ParameterList","parameters":[],"src":"8015:2:5"},"src":"7978:40:5"},{"documentation":{"id":413,"nodeType":"StructuredDocumentation","src":"8024:109:5","text":" @notice Get the address of the main Vault contract.\n @return vault The Vault address"},"functionSelector":"fbfa77cf","id":419,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"8147:5:5","nodeType":"FunctionDefinition","parameters":{"id":414,"nodeType":"ParameterList","parameters":[],"src":"8152:2:5"},"returnParameters":{"id":418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":417,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":419,"src":"8178:6:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":416,"nodeType":"UserDefinedTypeName","pathNode":{"id":415,"name":"IVault","nameLocations":["8178:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"8178:6:5"},"referencedDeclaration":651,"src":"8178:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"}],"src":"8177:8:5"},"scope":613,"src":"8138:48:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":420,"nodeType":"StructuredDocumentation","src":"8192:131:5","text":" @notice Collects aggregate fees from the Vault for a given pool.\n @param pool The pool with aggregate fees"},"functionSelector":"8f4ab9ca","id":425,"implemented":false,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"8337:20:5","nodeType":"FunctionDefinition","parameters":{"id":423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":422,"mutability":"mutable","name":"pool","nameLocation":"8366:4:5","nodeType":"VariableDeclaration","scope":425,"src":"8358:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":421,"name":"address","nodeType":"ElementaryTypeName","src":"8358:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8357:14:5"},"returnParameters":{"id":424,"nodeType":"ParameterList","parameters":[],"src":"8380:0:5"},"scope":613,"src":"8328:53:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":426,"nodeType":"StructuredDocumentation","src":"8387:156:5","text":" @notice Getter for the current global protocol swap fee.\n @return protocolSwapFeePercentage The global protocol swap fee percentage"},"functionSelector":"7869ee18","id":431,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalProtocolSwapFeePercentage","nameLocation":"8557:34:5","nodeType":"FunctionDefinition","parameters":{"id":427,"nodeType":"ParameterList","parameters":[],"src":"8591:2:5"},"returnParameters":{"id":430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":429,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"8625:25:5","nodeType":"VariableDeclaration","scope":431,"src":"8617:33:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":428,"name":"uint256","nodeType":"ElementaryTypeName","src":"8617:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8616:35:5"},"scope":613,"src":"8548:104:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":432,"nodeType":"StructuredDocumentation","src":"8658:159:5","text":" @notice Getter for the current global protocol yield fee.\n @return protocolYieldFeePercentage The global protocol yield fee percentage"},"functionSelector":"55fb76af","id":437,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalProtocolYieldFeePercentage","nameLocation":"8831:35:5","nodeType":"FunctionDefinition","parameters":{"id":433,"nodeType":"ParameterList","parameters":[],"src":"8866:2:5"},"returnParameters":{"id":436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":435,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"8900:26:5","nodeType":"VariableDeclaration","scope":437,"src":"8892:34:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":434,"name":"uint256","nodeType":"ElementaryTypeName","src":"8892:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8891:36:5"},"scope":613,"src":"8822:106:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":438,"nodeType":"StructuredDocumentation","src":"8934:207:5","text":" @notice Getter for pool registration flag.\n @param pool The address of the pool\n @return isRegistered True if the pool configuration has been set (e.g., through `registerPool`)"},"functionSelector":"c673bdaf","id":445,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"9155:16:5","nodeType":"FunctionDefinition","parameters":{"id":441,"nodeType":"ParameterList","parameters":[{"constant":false,"id":440,"mutability":"mutable","name":"pool","nameLocation":"9180:4:5","nodeType":"VariableDeclaration","scope":445,"src":"9172:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":439,"name":"address","nodeType":"ElementaryTypeName","src":"9172:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9171:14:5"},"returnParameters":{"id":444,"nodeType":"ParameterList","parameters":[{"constant":false,"id":443,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":445,"src":"9209:4:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":442,"name":"bool","nodeType":"ElementaryTypeName","src":"9209:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9208:6:5"},"scope":613,"src":"9146:69:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":446,"nodeType":"StructuredDocumentation","src":"9221:292:5","text":" @notice Getter for the current protocol swap fee for a given pool.\n @param pool The address of the pool\n @return protocolSwapFeePercentage The protocol swap fee percentage for the given pool\n @return isOverride True if the protocol fee has been overridden"},"functionSelector":"5c15a0b4","id":455,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolProtocolSwapFeeInfo","nameLocation":"9527:26:5","nodeType":"FunctionDefinition","parameters":{"id":449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":448,"mutability":"mutable","name":"pool","nameLocation":"9571:4:5","nodeType":"VariableDeclaration","scope":455,"src":"9563:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":447,"name":"address","nodeType":"ElementaryTypeName","src":"9563:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9553:28:5"},"returnParameters":{"id":454,"nodeType":"ParameterList","parameters":[{"constant":false,"id":451,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"9613:25:5","nodeType":"VariableDeclaration","scope":455,"src":"9605:33:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":450,"name":"uint256","nodeType":"ElementaryTypeName","src":"9605:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":453,"mutability":"mutable","name":"isOverride","nameLocation":"9645:10:5","nodeType":"VariableDeclaration","scope":455,"src":"9640:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":452,"name":"bool","nodeType":"ElementaryTypeName","src":"9640:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9604:52:5"},"scope":613,"src":"9518:139:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":456,"nodeType":"StructuredDocumentation","src":"9663:295:5","text":" @notice Getter for the current protocol yield fee for a given pool.\n @param pool The address of the pool\n @return protocolYieldFeePercentage The protocol yield fee percentage for the given pool\n @return isOverride True if the protocol fee has been overridden"},"functionSelector":"7a2b97dc","id":465,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolProtocolYieldFeeInfo","nameLocation":"9972:27:5","nodeType":"FunctionDefinition","parameters":{"id":459,"nodeType":"ParameterList","parameters":[{"constant":false,"id":458,"mutability":"mutable","name":"pool","nameLocation":"10017:4:5","nodeType":"VariableDeclaration","scope":465,"src":"10009:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":457,"name":"address","nodeType":"ElementaryTypeName","src":"10009:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9999:28:5"},"returnParameters":{"id":464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":461,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"10059:26:5","nodeType":"VariableDeclaration","scope":465,"src":"10051:34:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":460,"name":"uint256","nodeType":"ElementaryTypeName","src":"10051:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":463,"mutability":"mutable","name":"isOverride","nameLocation":"10092:10:5","nodeType":"VariableDeclaration","scope":465,"src":"10087:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":462,"name":"bool","nodeType":"ElementaryTypeName","src":"10087:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10050:53:5"},"scope":613,"src":"9963:141:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":466,"nodeType":"StructuredDocumentation","src":"10110:249:5","text":" @notice Getter for the current pool creator swap fee percentage for a given pool.\n @param pool The address of the pool\n @return poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee"},"functionSelector":"0b8e059b","id":473,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorSwapFeePercentage","nameLocation":"10373:31:5","nodeType":"FunctionDefinition","parameters":{"id":469,"nodeType":"ParameterList","parameters":[{"constant":false,"id":468,"mutability":"mutable","name":"pool","nameLocation":"10413:4:5","nodeType":"VariableDeclaration","scope":473,"src":"10405:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":467,"name":"address","nodeType":"ElementaryTypeName","src":"10405:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10404:14:5"},"returnParameters":{"id":472,"nodeType":"ParameterList","parameters":[{"constant":false,"id":471,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":473,"src":"10442:7:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":470,"name":"uint256","nodeType":"ElementaryTypeName","src":"10442:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10441:9:5"},"scope":613,"src":"10364:87:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":474,"nodeType":"StructuredDocumentation","src":"10457:249:5","text":" @notice Getter for the current pool creator swap fee percentage for a given pool.\n @param pool The address of the pool\n @return poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee"},"functionSelector":"0252aab5","id":481,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorYieldFeePercentage","nameLocation":"10720:32:5","nodeType":"FunctionDefinition","parameters":{"id":477,"nodeType":"ParameterList","parameters":[{"constant":false,"id":476,"mutability":"mutable","name":"pool","nameLocation":"10761:4:5","nodeType":"VariableDeclaration","scope":481,"src":"10753:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":475,"name":"address","nodeType":"ElementaryTypeName","src":"10753:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10752:14:5"},"returnParameters":{"id":480,"nodeType":"ParameterList","parameters":[{"constant":false,"id":479,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":481,"src":"10790:7:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":478,"name":"uint256","nodeType":"ElementaryTypeName","src":"10790:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10789:9:5"},"scope":613,"src":"10711:88:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":482,"nodeType":"StructuredDocumentation","src":"10805:344:5","text":" @notice Returns the amount of each pool token allocated to the protocol for withdrawal.\n @dev Includes both swap and yield fees.\n @param pool The address of the pool on which fees were collected\n @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order"},"functionSelector":"8df44c54","id":490,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeAmounts","nameLocation":"11163:21:5","nodeType":"FunctionDefinition","parameters":{"id":485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":484,"mutability":"mutable","name":"pool","nameLocation":"11193:4:5","nodeType":"VariableDeclaration","scope":490,"src":"11185:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":483,"name":"address","nodeType":"ElementaryTypeName","src":"11185:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11184:14:5"},"returnParameters":{"id":489,"nodeType":"ParameterList","parameters":[{"constant":false,"id":488,"mutability":"mutable","name":"feeAmounts","nameLocation":"11239:10:5","nodeType":"VariableDeclaration","scope":490,"src":"11222:27:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":486,"name":"uint256","nodeType":"ElementaryTypeName","src":"11222:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":487,"nodeType":"ArrayTypeName","src":"11222:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11221:29:5"},"scope":613,"src":"11154:97:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":491,"nodeType":"StructuredDocumentation","src":"11257:348:5","text":" @notice Returns the amount of each pool token allocated to the pool creator for withdrawal.\n @dev Includes both swap and yield fees.\n @param pool The address of the pool on which fees were collected\n @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order"},"functionSelector":"9e95f3fd","id":499,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorFeeAmounts","nameLocation":"11619:24:5","nodeType":"FunctionDefinition","parameters":{"id":494,"nodeType":"ParameterList","parameters":[{"constant":false,"id":493,"mutability":"mutable","name":"pool","nameLocation":"11652:4:5","nodeType":"VariableDeclaration","scope":499,"src":"11644:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":492,"name":"address","nodeType":"ElementaryTypeName","src":"11644:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11643:14:5"},"returnParameters":{"id":498,"nodeType":"ParameterList","parameters":[{"constant":false,"id":497,"mutability":"mutable","name":"feeAmounts","nameLocation":"11698:10:5","nodeType":"VariableDeclaration","scope":499,"src":"11681:27:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":495,"name":"uint256","nodeType":"ElementaryTypeName","src":"11681:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":496,"nodeType":"ArrayTypeName","src":"11681:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11680:29:5"},"scope":613,"src":"11610:100:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":500,"nodeType":"StructuredDocumentation","src":"11716:1445:5","text":" @notice Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\n @dev Not tied to any particular pool; this just performs the low-level \"additive fee\" calculation. Note that\n pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are\n stored in the Vault with 24-bit precision, this will truncate any values that require greater precision.\n It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee\n components, but the truncation ensures it will not revert for any valid set of fee percentages.\n See example below:\n tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60%\n totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000\n protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400\n creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600\n creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360\n lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\n @param protocolFeePercentage The protocol portion of the aggregate fee percentage\n @param poolCreatorFeePercentage The pool creator portion of the aggregate fee percentage\n @return aggregateFeePercentage The computed aggregate percentage"},"functionSelector":"0ddd60c6","id":509,"implemented":false,"kind":"function","modifiers":[],"name":"computeAggregateFeePercentage","nameLocation":"13175:29:5","nodeType":"FunctionDefinition","parameters":{"id":505,"nodeType":"ParameterList","parameters":[{"constant":false,"id":502,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"13222:21:5","nodeType":"VariableDeclaration","scope":509,"src":"13214:29:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":501,"name":"uint256","nodeType":"ElementaryTypeName","src":"13214:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":504,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"13261:24:5","nodeType":"VariableDeclaration","scope":509,"src":"13253:32:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":503,"name":"uint256","nodeType":"ElementaryTypeName","src":"13253:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13204:87:5"},"returnParameters":{"id":508,"nodeType":"ParameterList","parameters":[{"constant":false,"id":507,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"13323:22:5","nodeType":"VariableDeclaration","scope":509,"src":"13315:30:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":506,"name":"uint256","nodeType":"ElementaryTypeName","src":"13315:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13314:32:5"},"scope":613,"src":"13166:181:5","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":510,"nodeType":"StructuredDocumentation","src":"13353:398:5","text":" @notice Override the protocol swap fee percentage for a specific pool.\n @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n @param pool The pool for which we are setting the protocol swap fee"},"functionSelector":"71ecc8fb","id":515,"implemented":false,"kind":"function","modifiers":[],"name":"updateProtocolSwapFeePercentage","nameLocation":"13765:31:5","nodeType":"FunctionDefinition","parameters":{"id":513,"nodeType":"ParameterList","parameters":[{"constant":false,"id":512,"mutability":"mutable","name":"pool","nameLocation":"13805:4:5","nodeType":"VariableDeclaration","scope":515,"src":"13797:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":511,"name":"address","nodeType":"ElementaryTypeName","src":"13797:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13796:14:5"},"returnParameters":{"id":514,"nodeType":"ParameterList","parameters":[],"src":"13819:0:5"},"scope":613,"src":"13756:64:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":516,"nodeType":"StructuredDocumentation","src":"13826:400:5","text":" @notice Override the protocol yield fee percentage for a specific pool.\n @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n @param pool The pool for which we are setting the protocol yield fee"},"functionSelector":"71447ea8","id":521,"implemented":false,"kind":"function","modifiers":[],"name":"updateProtocolYieldFeePercentage","nameLocation":"14240:32:5","nodeType":"FunctionDefinition","parameters":{"id":519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":518,"mutability":"mutable","name":"pool","nameLocation":"14281:4:5","nodeType":"VariableDeclaration","scope":521,"src":"14273:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":517,"name":"address","nodeType":"ElementaryTypeName","src":"14273:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14272:14:5"},"returnParameters":{"id":520,"nodeType":"ParameterList","parameters":[],"src":"14295:0:5"},"scope":613,"src":"14231:65:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":522,"nodeType":"StructuredDocumentation","src":"14520:826:5","text":" @notice Add pool-specific entries to the protocol swap and yield percentages.\n @dev This must be called from the Vault during pool registration. It will initialize the pool to the global\n protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate\n fee percentages, based on an initial pool creator fee of 0.\n @param pool The address of the pool being registered\n @param poolCreator The address of the pool creator (or 0 if there won't be a pool creator fee)\n @param protocolFeeExempt If true, the pool is initially exempt from protocol fees\n @return aggregateSwapFeePercentage The initial aggregate swap fee percentage\n @return aggregateYieldFeePercentage The initial aggregate yield fee percentage"},"functionSelector":"77ff76e7","id":535,"implemented":false,"kind":"function","modifiers":[],"name":"registerPool","nameLocation":"15360:12:5","nodeType":"FunctionDefinition","parameters":{"id":529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":524,"mutability":"mutable","name":"pool","nameLocation":"15390:4:5","nodeType":"VariableDeclaration","scope":535,"src":"15382:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":523,"name":"address","nodeType":"ElementaryTypeName","src":"15382:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":526,"mutability":"mutable","name":"poolCreator","nameLocation":"15412:11:5","nodeType":"VariableDeclaration","scope":535,"src":"15404:19:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":525,"name":"address","nodeType":"ElementaryTypeName","src":"15404:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":528,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"15438:17:5","nodeType":"VariableDeclaration","scope":535,"src":"15433:22:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":527,"name":"bool","nodeType":"ElementaryTypeName","src":"15433:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15372:89:5"},"returnParameters":{"id":534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":531,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"15488:26:5","nodeType":"VariableDeclaration","scope":535,"src":"15480:34:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":530,"name":"uint256","nodeType":"ElementaryTypeName","src":"15480:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":533,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"15524:27:5","nodeType":"VariableDeclaration","scope":535,"src":"15516:35:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":532,"name":"uint256","nodeType":"ElementaryTypeName","src":"15516:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15479:73:5"},"scope":613,"src":"15351:202:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":536,"nodeType":"StructuredDocumentation","src":"15559:175:5","text":" @notice Set the global protocol swap fee percentage, used by standard pools.\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage"},"functionSelector":"8a3c5c69","id":541,"implemented":false,"kind":"function","modifiers":[],"name":"setGlobalProtocolSwapFeePercentage","nameLocation":"15748:34:5","nodeType":"FunctionDefinition","parameters":{"id":539,"nodeType":"ParameterList","parameters":[{"constant":false,"id":538,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"15791:28:5","nodeType":"VariableDeclaration","scope":541,"src":"15783:36:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":537,"name":"uint256","nodeType":"ElementaryTypeName","src":"15783:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15782:38:5"},"returnParameters":{"id":540,"nodeType":"ParameterList","parameters":[],"src":"15829:0:5"},"scope":613,"src":"15739:91:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":542,"nodeType":"StructuredDocumentation","src":"15836:178:5","text":" @notice Set the global protocol yield fee percentage, used by standard pools.\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage"},"functionSelector":"a93df2a4","id":547,"implemented":false,"kind":"function","modifiers":[],"name":"setGlobalProtocolYieldFeePercentage","nameLocation":"16028:35:5","nodeType":"FunctionDefinition","parameters":{"id":545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":544,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"16072:29:5","nodeType":"VariableDeclaration","scope":547,"src":"16064:37:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":543,"name":"uint256","nodeType":"ElementaryTypeName","src":"16064:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16063:39:5"},"returnParameters":{"id":546,"nodeType":"ParameterList","parameters":[],"src":"16111:0:5"},"scope":613,"src":"16019:93:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":548,"nodeType":"StructuredDocumentation","src":"16118:272:5","text":" @notice Override the protocol swap fee percentage for a specific pool.\n @param pool The address of the pool for which we are setting the protocol swap fee\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage for the pool"},"functionSelector":"fd267f39","id":555,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolSwapFeePercentage","nameLocation":"16404:28:5","nodeType":"FunctionDefinition","parameters":{"id":553,"nodeType":"ParameterList","parameters":[{"constant":false,"id":550,"mutability":"mutable","name":"pool","nameLocation":"16441:4:5","nodeType":"VariableDeclaration","scope":555,"src":"16433:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":549,"name":"address","nodeType":"ElementaryTypeName","src":"16433:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":552,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"16455:28:5","nodeType":"VariableDeclaration","scope":555,"src":"16447:36:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":551,"name":"uint256","nodeType":"ElementaryTypeName","src":"16447:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16432:52:5"},"returnParameters":{"id":554,"nodeType":"ParameterList","parameters":[],"src":"16493:0:5"},"scope":613,"src":"16395:99:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":556,"nodeType":"StructuredDocumentation","src":"16500:276:5","text":" @notice Override the protocol yield fee percentage for a specific pool.\n @param pool The address of the pool for which we are setting the protocol yield fee\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage for the pool"},"functionSelector":"abaa3356","id":563,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolYieldFeePercentage","nameLocation":"16790:29:5","nodeType":"FunctionDefinition","parameters":{"id":561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":558,"mutability":"mutable","name":"pool","nameLocation":"16828:4:5","nodeType":"VariableDeclaration","scope":563,"src":"16820:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":557,"name":"address","nodeType":"ElementaryTypeName","src":"16820:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":560,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"16842:29:5","nodeType":"VariableDeclaration","scope":563,"src":"16834:37:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":559,"name":"uint256","nodeType":"ElementaryTypeName","src":"16834:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16819:53:5"},"returnParameters":{"id":562,"nodeType":"ParameterList","parameters":[],"src":"16881:0:5"},"scope":613,"src":"16781:101:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":564,"nodeType":"StructuredDocumentation","src":"16888:623:5","text":" @notice Assigns a new pool creator swap fee percentage to the specified pool.\n @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n @param pool The address of the pool for which the pool creator fee will be changed\n @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage to apply to the pool"},"functionSelector":"1377c16c","id":571,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolCreatorSwapFeePercentage","nameLocation":"17525:31:5","nodeType":"FunctionDefinition","parameters":{"id":569,"nodeType":"ParameterList","parameters":[{"constant":false,"id":566,"mutability":"mutable","name":"pool","nameLocation":"17565:4:5","nodeType":"VariableDeclaration","scope":571,"src":"17557:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":565,"name":"address","nodeType":"ElementaryTypeName","src":"17557:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":568,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"17579:28:5","nodeType":"VariableDeclaration","scope":571,"src":"17571:36:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":567,"name":"uint256","nodeType":"ElementaryTypeName","src":"17571:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17556:52:5"},"returnParameters":{"id":570,"nodeType":"ParameterList","parameters":[],"src":"17617:0:5"},"scope":613,"src":"17516:102:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":572,"nodeType":"StructuredDocumentation","src":"17624:626:5","text":" @notice Assigns a new pool creator yield fee percentage to the specified pool.\n @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n @param pool The address of the pool for which the pool creator fee will be changed\n @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage to apply to the pool"},"functionSelector":"3af52712","id":579,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolCreatorYieldFeePercentage","nameLocation":"18264:32:5","nodeType":"FunctionDefinition","parameters":{"id":577,"nodeType":"ParameterList","parameters":[{"constant":false,"id":574,"mutability":"mutable","name":"pool","nameLocation":"18305:4:5","nodeType":"VariableDeclaration","scope":579,"src":"18297:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":573,"name":"address","nodeType":"ElementaryTypeName","src":"18297:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":576,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"18319:29:5","nodeType":"VariableDeclaration","scope":579,"src":"18311:37:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":575,"name":"uint256","nodeType":"ElementaryTypeName","src":"18311:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18296:53:5"},"returnParameters":{"id":578,"nodeType":"ParameterList","parameters":[],"src":"18358:0:5"},"scope":613,"src":"18255:104:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":580,"nodeType":"StructuredDocumentation","src":"18365:296:5","text":" @notice Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\n @dev Sends swap and yield protocol fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens"},"functionSelector":"cf7b287f","id":587,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawProtocolFees","nameLocation":"18675:20:5","nodeType":"FunctionDefinition","parameters":{"id":585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":582,"mutability":"mutable","name":"pool","nameLocation":"18704:4:5","nodeType":"VariableDeclaration","scope":587,"src":"18696:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":581,"name":"address","nodeType":"ElementaryTypeName","src":"18696:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":584,"mutability":"mutable","name":"recipient","nameLocation":"18718:9:5","nodeType":"VariableDeclaration","scope":587,"src":"18710:17:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":583,"name":"address","nodeType":"ElementaryTypeName","src":"18710:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18695:33:5"},"returnParameters":{"id":586,"nodeType":"ParameterList","parameters":[],"src":"18737:0:5"},"scope":613,"src":"18666:72:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":588,"nodeType":"StructuredDocumentation","src":"18744:339:5","text":" @notice Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\n @dev Sends swap and yield protocol fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens\n @param token Token to withdraw"},"functionSelector":"b53a70b2","id":598,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawProtocolFeesForToken","nameLocation":"19097:28:5","nodeType":"FunctionDefinition","parameters":{"id":596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":590,"mutability":"mutable","name":"pool","nameLocation":"19134:4:5","nodeType":"VariableDeclaration","scope":598,"src":"19126:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":589,"name":"address","nodeType":"ElementaryTypeName","src":"19126:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":592,"mutability":"mutable","name":"recipient","nameLocation":"19148:9:5","nodeType":"VariableDeclaration","scope":598,"src":"19140:17:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":591,"name":"address","nodeType":"ElementaryTypeName","src":"19140:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":595,"mutability":"mutable","name":"token","nameLocation":"19166:5:5","nodeType":"VariableDeclaration","scope":598,"src":"19159:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":594,"nodeType":"UserDefinedTypeName","pathNode":{"id":593,"name":"IERC20","nameLocations":["19159:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"19159:6:5"},"referencedDeclaration":6486,"src":"19159:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"19125:47:5"},"returnParameters":{"id":597,"nodeType":"ParameterList","parameters":[],"src":"19181:0:5"},"scope":613,"src":"19088:94:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":599,"nodeType":"StructuredDocumentation","src":"19188:291:5","text":" @notice Withdraw collected pool creator fees for a given pool. This is a permissioned function.\n @dev Sends swap and yield pool creator fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens"},"functionSelector":"f7061445","id":606,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"19493:23:5","nodeType":"FunctionDefinition","parameters":{"id":604,"nodeType":"ParameterList","parameters":[{"constant":false,"id":601,"mutability":"mutable","name":"pool","nameLocation":"19525:4:5","nodeType":"VariableDeclaration","scope":606,"src":"19517:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":600,"name":"address","nodeType":"ElementaryTypeName","src":"19517:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":603,"mutability":"mutable","name":"recipient","nameLocation":"19539:9:5","nodeType":"VariableDeclaration","scope":606,"src":"19531:17:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":602,"name":"address","nodeType":"ElementaryTypeName","src":"19531:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19516:33:5"},"returnParameters":{"id":605,"nodeType":"ParameterList","parameters":[],"src":"19558:0:5"},"scope":613,"src":"19484:75:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":607,"nodeType":"StructuredDocumentation","src":"19565:310:5","text":" @notice Withdraw collected pool creator fees for a given pool.\n @dev Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable\n value, this function is permissionless.\n @param pool The pool on which fees were collected"},"functionSelector":"52f125f0","id":612,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"19889:23:5","nodeType":"FunctionDefinition","parameters":{"id":610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":609,"mutability":"mutable","name":"pool","nameLocation":"19921:4:5","nodeType":"VariableDeclaration","scope":612,"src":"19913:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":608,"name":"address","nodeType":"ElementaryTypeName","src":"19913:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19912:14:5"},"returnParameters":{"id":611,"nodeType":"ParameterList","parameters":[],"src":"19935:0:5"},"scope":613,"src":"19880:56:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":614,"src":"266:19672:5","usedErrors":[394,397,402,409,412],"usedEvents":[287,292,299,306,313,320,330,340,352,364,373,382,391]}],"src":"46:19893:5"},"id":5},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","exportedSymbols":{"IAuthentication":[47],"IVault":[651],"IVaultAdmin":[941],"IVaultErrors":[1308],"IVaultEvents":[1547],"IVaultExtension":[1966],"IVaultMain":[2102]},"id":652,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":615,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:6"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"../solidity-utils/helpers/IAuthentication.sol","id":617,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":652,"sourceUnit":48,"src":"72:80:6","symbolAliases":[{"foreign":{"id":616,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"81:15:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","file":"./IVaultExtension.sol","id":619,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":652,"sourceUnit":1967,"src":"153:56:6","symbolAliases":[{"foreign":{"id":618,"name":"IVaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1966,"src":"162:15:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"./IVaultErrors.sol","id":621,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":652,"sourceUnit":1309,"src":"210:50:6","symbolAliases":[{"foreign":{"id":620,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1308,"src":"219:12:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","file":"./IVaultEvents.sol","id":623,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":652,"sourceUnit":1548,"src":"261:50:6","symbolAliases":[{"foreign":{"id":622,"name":"IVaultEvents","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1547,"src":"270:12:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","file":"./IVaultAdmin.sol","id":625,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":652,"sourceUnit":942,"src":"312:48:6","symbolAliases":[{"foreign":{"id":624,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":941,"src":"321:11:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","file":"./IVaultMain.sol","id":627,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":652,"sourceUnit":2103,"src":"361:46:6","symbolAliases":[{"foreign":{"id":626,"name":"IVaultMain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2102,"src":"370:10:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":629,"name":"IVaultMain","nameLocations":["539:10:6"],"nodeType":"IdentifierPath","referencedDeclaration":2102,"src":"539:10:6"},"id":630,"nodeType":"InheritanceSpecifier","src":"539:10:6"},{"baseName":{"id":631,"name":"IVaultExtension","nameLocations":["551:15:6"],"nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"551:15:6"},"id":632,"nodeType":"InheritanceSpecifier","src":"551:15:6"},{"baseName":{"id":633,"name":"IVaultAdmin","nameLocations":["568:11:6"],"nodeType":"IdentifierPath","referencedDeclaration":941,"src":"568:11:6"},"id":634,"nodeType":"InheritanceSpecifier","src":"568:11:6"},{"baseName":{"id":635,"name":"IVaultErrors","nameLocations":["581:12:6"],"nodeType":"IdentifierPath","referencedDeclaration":1308,"src":"581:12:6"},"id":636,"nodeType":"InheritanceSpecifier","src":"581:12:6"},{"baseName":{"id":637,"name":"IVaultEvents","nameLocations":["595:12:6"],"nodeType":"IdentifierPath","referencedDeclaration":1547,"src":"595:12:6"},"id":638,"nodeType":"InheritanceSpecifier","src":"595:12:6"},{"baseName":{"id":639,"name":"IAuthentication","nameLocations":["609:15:6"],"nodeType":"IdentifierPath","referencedDeclaration":47,"src":"609:15:6"},"id":640,"nodeType":"InheritanceSpecifier","src":"609:15:6"}],"canonicalName":"IVault","contractDependencies":[],"contractKind":"interface","documentation":{"id":628,"nodeType":"StructuredDocumentation","src":"409:110:6","text":"@notice Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries."},"fullyImplemented":false,"id":651,"linearizedBaseContracts":[651,47,1547,1308,941,1966,2102],"name":"IVault","nameLocation":"529:6:6","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[669,1570],"documentation":{"id":641,"nodeType":"StructuredDocumentation","src":"631:41:6","text":"@return vault The main Vault address."},"functionSelector":"fbfa77cf","id":650,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"686:5:6","nodeType":"FunctionDefinition","overrides":{"id":645,"nodeType":"OverrideSpecifier","overrides":[{"id":643,"name":"IVaultAdmin","nameLocations":["717:11:6"],"nodeType":"IdentifierPath","referencedDeclaration":941,"src":"717:11:6"},{"id":644,"name":"IVaultExtension","nameLocations":["730:15:6"],"nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"730:15:6"}],"src":"708:38:6"},"parameters":{"id":642,"nodeType":"ParameterList","parameters":[],"src":"691:2:6"},"returnParameters":{"id":649,"nodeType":"ParameterList","parameters":[{"constant":false,"id":648,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":650,"src":"756:6:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":647,"nodeType":"UserDefinedTypeName","pathNode":{"id":646,"name":"IVault","nameLocations":["756:6:6"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"756:6:6"},"referencedDeclaration":651,"src":"756:6:6","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"}],"src":"755:8:6"},"scope":651,"src":"677:87:6","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":652,"src":"519:247:6","usedErrors":[38,953,958,963,968,977,983,986,989,992,995,998,1001,1010,1013,1016,1019,1022,1025,1028,1031,1034,1037,1040,1043,1046,1049,1052,1058,1065,1072,1075,1078,1088,1098,1105,1108,1111,1114,1124,1134,1141,1144,1147,1150,1153,1156,1159,1162,1165,1170,1175,1180,1183,1186,1189,1192,1195,1200,1205,1210,1216,1222,1225,1233,1239,1245,1248,1251,1254,1259,1269,1279,1286,1289,1292,1295,1298,1301,1304,1307],"usedEvents":[1346,1351,1370,1382,1394,1412,1430,1435,1438,1441,1448,1455,1462,1469,1476,1482,1488,1500,1510,1520,1532,1537,1546]}],"src":"46:721:6"},"id":6},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","exportedSymbols":{"IAuthorizer":[73],"IERC4626":[6408],"IProtocolFeeController":[613],"IVault":[651],"IVaultAdmin":[941]},"id":942,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":653,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:7"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":655,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":942,"sourceUnit":6409,"src":"72:75:7","symbolAliases":[{"foreign":{"id":654,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6408,"src":"81:8:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":657,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":942,"sourceUnit":614,"src":"149:70:7","symbolAliases":[{"foreign":{"id":656,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":613,"src":"158:22:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":659,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":942,"sourceUnit":74,"src":"220:48:7","symbolAliases":[{"foreign":{"id":658,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73,"src":"229:11:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":661,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":942,"sourceUnit":652,"src":"269:38:7","symbolAliases":[{"foreign":{"id":660,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":651,"src":"278:6:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultAdmin","contractDependencies":[],"contractKind":"interface","documentation":{"id":662,"nodeType":"StructuredDocumentation","src":"309:276:7","text":" @notice Interface for functions defined on the `VaultAdmin` contract.\n @dev `VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations,\n as two delegate calls add gas to each call. Most of the permissioned calls are here."},"fullyImplemented":false,"id":941,"linearizedBaseContracts":[941],"name":"IVaultAdmin","nameLocation":"596:11:7","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":663,"nodeType":"StructuredDocumentation","src":"841:206:7","text":" @notice Returns the main Vault address.\n @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n @return vault The address of the main Vault"},"functionSelector":"fbfa77cf","id":669,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"1061:5:7","nodeType":"FunctionDefinition","parameters":{"id":664,"nodeType":"ParameterList","parameters":[],"src":"1066:2:7"},"returnParameters":{"id":668,"nodeType":"ParameterList","parameters":[{"constant":false,"id":667,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":669,"src":"1092:6:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":666,"nodeType":"UserDefinedTypeName","pathNode":{"id":665,"name":"IVault","nameLocations":["1092:6:7"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"1092:6:7"},"referencedDeclaration":651,"src":"1092:6:7","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1091:8:7"},"scope":941,"src":"1052:48:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":670,"nodeType":"StructuredDocumentation","src":"1106:326:7","text":" @notice Returns the Vault's pause window end time.\n @dev This value is immutable, and represents the timestamp after which the Vault can no longer be paused\n by governance. Balancer timestamps are 32 bits.\n @return pauseWindowEndTime The timestamp when the Vault's pause window ends"},"functionSelector":"8a8d123a","id":675,"implemented":false,"kind":"function","modifiers":[],"name":"getPauseWindowEndTime","nameLocation":"1446:21:7","nodeType":"FunctionDefinition","parameters":{"id":671,"nodeType":"ParameterList","parameters":[],"src":"1467:2:7"},"returnParameters":{"id":674,"nodeType":"ParameterList","parameters":[{"constant":false,"id":673,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"1500:18:7","nodeType":"VariableDeclaration","scope":675,"src":"1493:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":672,"name":"uint32","nodeType":"ElementaryTypeName","src":"1493:6:7","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1492:27:7"},"scope":941,"src":"1437:83:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":676,"nodeType":"StructuredDocumentation","src":"1526:414:7","text":" @notice Returns the Vault's buffer period duration.\n @dev This value is immutable. It represents the period during which, if paused, the Vault will remain paused.\n This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer\n timestamps are 32 bits.\n @return bufferPeriodDuration The length of the buffer period in seconds"},"functionSelector":"20c1fb7a","id":681,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferPeriodDuration","nameLocation":"1954:23:7","nodeType":"FunctionDefinition","parameters":{"id":677,"nodeType":"ParameterList","parameters":[],"src":"1977:2:7"},"returnParameters":{"id":680,"nodeType":"ParameterList","parameters":[{"constant":false,"id":679,"mutability":"mutable","name":"bufferPeriodDuration","nameLocation":"2010:20:7","nodeType":"VariableDeclaration","scope":681,"src":"2003:27:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":678,"name":"uint32","nodeType":"ElementaryTypeName","src":"2003:6:7","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2002:29:7"},"scope":941,"src":"1945:87:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":682,"nodeType":"StructuredDocumentation","src":"2038:321:7","text":" @notice Returns the Vault's buffer period end time.\n @dev This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer\n timestamps are 32 bits.\n @return bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused"},"functionSelector":"cd51c12f","id":687,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferPeriodEndTime","nameLocation":"2373:22:7","nodeType":"FunctionDefinition","parameters":{"id":683,"nodeType":"ParameterList","parameters":[],"src":"2395:2:7"},"returnParameters":{"id":686,"nodeType":"ParameterList","parameters":[{"constant":false,"id":685,"mutability":"mutable","name":"bufferPeriodEndTime","nameLocation":"2428:19:7","nodeType":"VariableDeclaration","scope":687,"src":"2421:26:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":684,"name":"uint32","nodeType":"ElementaryTypeName","src":"2421:6:7","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2420:28:7"},"scope":941,"src":"2364:85:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":688,"nodeType":"StructuredDocumentation","src":"2455:193:7","text":" @notice Get the minimum number of tokens in a pool.\n @dev We expect the vast majority of pools to be 2-token.\n @return minTokens The minimum token count of a pool"},"functionSelector":"a8175b27","id":693,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumPoolTokens","nameLocation":"2662:20:7","nodeType":"FunctionDefinition","parameters":{"id":689,"nodeType":"ParameterList","parameters":[],"src":"2682:2:7"},"returnParameters":{"id":692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":691,"mutability":"mutable","name":"minTokens","nameLocation":"2716:9:7","nodeType":"VariableDeclaration","scope":693,"src":"2708:17:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":690,"name":"uint256","nodeType":"ElementaryTypeName","src":"2708:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2707:19:7"},"scope":941,"src":"2653:74:7","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":694,"nodeType":"StructuredDocumentation","src":"2733:129:7","text":" @notice Get the maximum number of tokens in a pool.\n @return maxTokens The maximum token count of a pool"},"functionSelector":"2e42f4d5","id":699,"implemented":false,"kind":"function","modifiers":[],"name":"getMaximumPoolTokens","nameLocation":"2876:20:7","nodeType":"FunctionDefinition","parameters":{"id":695,"nodeType":"ParameterList","parameters":[],"src":"2896:2:7"},"returnParameters":{"id":698,"nodeType":"ParameterList","parameters":[{"constant":false,"id":697,"mutability":"mutable","name":"maxTokens","nameLocation":"2930:9:7","nodeType":"VariableDeclaration","scope":699,"src":"2922:17:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":696,"name":"uint256","nodeType":"ElementaryTypeName","src":"2922:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2921:19:7"},"scope":941,"src":"2867:74:7","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":700,"nodeType":"StructuredDocumentation","src":"2947:439:7","text":" @notice Get the minimum total supply of pool tokens (BPT) for an initialized pool.\n @dev This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT\n is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\n @return poolMinimumTotalSupply The minimum total supply a pool can have after initialization"},"functionSelector":"d0965a6b","id":705,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolMinimumTotalSupply","nameLocation":"3400:25:7","nodeType":"FunctionDefinition","parameters":{"id":701,"nodeType":"ParameterList","parameters":[],"src":"3425:2:7"},"returnParameters":{"id":704,"nodeType":"ParameterList","parameters":[{"constant":false,"id":703,"mutability":"mutable","name":"poolMinimumTotalSupply","nameLocation":"3459:22:7","nodeType":"VariableDeclaration","scope":705,"src":"3451:30:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":702,"name":"uint256","nodeType":"ElementaryTypeName","src":"3451:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3450:32:7"},"scope":941,"src":"3391:92:7","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":706,"nodeType":"StructuredDocumentation","src":"3489:502:7","text":" @notice Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\n @dev This prevents buffers from being completely drained. When the buffer is initialized, this minimum number\n of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal\n to the Vault, as buffers are not tokenized.\n @return bufferMinimumTotalSupply The minimum total supply a buffer can have after initialization"},"functionSelector":"26a8a991","id":711,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferMinimumTotalSupply","nameLocation":"4005:27:7","nodeType":"FunctionDefinition","parameters":{"id":707,"nodeType":"ParameterList","parameters":[],"src":"4032:2:7"},"returnParameters":{"id":710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":709,"mutability":"mutable","name":"bufferMinimumTotalSupply","nameLocation":"4066:24:7","nodeType":"VariableDeclaration","scope":711,"src":"4058:32:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":708,"name":"uint256","nodeType":"ElementaryTypeName","src":"4058:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4057:34:7"},"scope":941,"src":"3996:96:7","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":712,"nodeType":"StructuredDocumentation","src":"4098:291:7","text":" @notice Get the minimum trade amount in a pool operation.\n @dev This limit is applied to the 18-decimal \"upscaled\" amount in any operation (swap, add/remove liquidity).\n @return minimumTradeAmount The minimum trade amount as an 18-decimal floating point number"},"functionSelector":"e2cb0ba0","id":717,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumTradeAmount","nameLocation":"4403:21:7","nodeType":"FunctionDefinition","parameters":{"id":713,"nodeType":"ParameterList","parameters":[],"src":"4424:2:7"},"returnParameters":{"id":716,"nodeType":"ParameterList","parameters":[{"constant":false,"id":715,"mutability":"mutable","name":"minimumTradeAmount","nameLocation":"4458:18:7","nodeType":"VariableDeclaration","scope":717,"src":"4450:26:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":714,"name":"uint256","nodeType":"ElementaryTypeName","src":"4450:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4449:28:7"},"scope":941,"src":"4394:84:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":718,"nodeType":"StructuredDocumentation","src":"4484:271:7","text":" @notice Get the minimum wrap amount in a buffer operation.\n @dev This limit is applied to the wrap operation amount, in native underlying token decimals.\n @return minimumWrapAmount The minimum wrap amount in native underlying token decimals"},"functionSelector":"53956aa2","id":723,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumWrapAmount","nameLocation":"4769:20:7","nodeType":"FunctionDefinition","parameters":{"id":719,"nodeType":"ParameterList","parameters":[],"src":"4789:2:7"},"returnParameters":{"id":722,"nodeType":"ParameterList","parameters":[{"constant":false,"id":721,"mutability":"mutable","name":"minimumWrapAmount","nameLocation":"4823:17:7","nodeType":"VariableDeclaration","scope":723,"src":"4815:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":720,"name":"uint256","nodeType":"ElementaryTypeName","src":"4815:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4814:27:7"},"scope":941,"src":"4760:82:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":724,"nodeType":"StructuredDocumentation","src":"5069:529:7","text":" @notice Indicates whether the Vault is paused.\n @dev If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that\n ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not\n also pause buffers (though we anticipate they would likely be paused and unpaused together). Call\n `areBuffersPaused` to check the pause state of the buffers.\n @return vaultPaused True if the Vault is paused"},"functionSelector":"098401f5","id":729,"implemented":false,"kind":"function","modifiers":[],"name":"isVaultPaused","nameLocation":"5612:13:7","nodeType":"FunctionDefinition","parameters":{"id":725,"nodeType":"ParameterList","parameters":[],"src":"5625:2:7"},"returnParameters":{"id":728,"nodeType":"ParameterList","parameters":[{"constant":false,"id":727,"mutability":"mutable","name":"vaultPaused","nameLocation":"5656:11:7","nodeType":"VariableDeclaration","scope":729,"src":"5651:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":726,"name":"bool","nodeType":"ElementaryTypeName","src":"5651:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5650:18:7"},"scope":941,"src":"5603:66:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":730,"nodeType":"StructuredDocumentation","src":"5675:400:7","text":" @notice Returns the paused status, and end times of the Vault's pause window and buffer period.\n @dev Balancer timestamps are 32 bits.\n @return vaultPaused True if the Vault is paused\n @return vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window\n @return vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period"},"functionSelector":"85c8c015","id":739,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultPausedState","nameLocation":"6089:19:7","nodeType":"FunctionDefinition","parameters":{"id":731,"nodeType":"ParameterList","parameters":[],"src":"6108:2:7"},"returnParameters":{"id":738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":733,"mutability":"mutable","name":"vaultPaused","nameLocation":"6163:11:7","nodeType":"VariableDeclaration","scope":739,"src":"6158:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":732,"name":"bool","nodeType":"ElementaryTypeName","src":"6158:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":735,"mutability":"mutable","name":"vaultPauseWindowEndTime","nameLocation":"6183:23:7","nodeType":"VariableDeclaration","scope":739,"src":"6176:30:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":734,"name":"uint32","nodeType":"ElementaryTypeName","src":"6176:6:7","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":737,"mutability":"mutable","name":"vaultBufferPeriodEndTime","nameLocation":"6215:24:7","nodeType":"VariableDeclaration","scope":739,"src":"6208:31:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":736,"name":"uint32","nodeType":"ElementaryTypeName","src":"6208:6:7","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"6157:83:7"},"scope":941,"src":"6080:161:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":740,"nodeType":"StructuredDocumentation","src":"6247:517:7","text":" @notice Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\n @dev This is a permissioned function that will only work during the Pause Window set during deployment.\n Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing\n the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers\n are also paused (with `pauseVaultBuffers`)."},"functionSelector":"9e0879c2","id":743,"implemented":false,"kind":"function","modifiers":[],"name":"pauseVault","nameLocation":"6778:10:7","nodeType":"FunctionDefinition","parameters":{"id":741,"nodeType":"ParameterList","parameters":[],"src":"6788:2:7"},"returnParameters":{"id":742,"nodeType":"ParameterList","parameters":[],"src":"6799:0:7"},"scope":941,"src":"6769:31:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":744,"nodeType":"StructuredDocumentation","src":"6806:569:7","text":" @notice Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\n @dev This is a permissioned function that will only work on a paused Vault within the Buffer Period set during\n deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above,\n ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse\n `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused."},"functionSelector":"0b7562be","id":747,"implemented":false,"kind":"function","modifiers":[],"name":"unpauseVault","nameLocation":"7389:12:7","nodeType":"FunctionDefinition","parameters":{"id":745,"nodeType":"ParameterList","parameters":[],"src":"7401:2:7"},"returnParameters":{"id":746,"nodeType":"ParameterList","parameters":[],"src":"7412:0:7"},"scope":941,"src":"7380:33:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":748,"nodeType":"StructuredDocumentation","src":"7639:276:7","text":" @notice Pause the Pool: an emergency action which disables all pool functions.\n @dev This is a permissioned function that will only work during the Pause Window set during pool factory\n deployment.\n @param pool The pool being paused"},"functionSelector":"55aca1ec","id":753,"implemented":false,"kind":"function","modifiers":[],"name":"pausePool","nameLocation":"7929:9:7","nodeType":"FunctionDefinition","parameters":{"id":751,"nodeType":"ParameterList","parameters":[{"constant":false,"id":750,"mutability":"mutable","name":"pool","nameLocation":"7947:4:7","nodeType":"VariableDeclaration","scope":753,"src":"7939:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":749,"name":"address","nodeType":"ElementaryTypeName","src":"7939:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7938:14:7"},"returnParameters":{"id":752,"nodeType":"ParameterList","parameters":[],"src":"7961:0:7"},"scope":941,"src":"7920:42:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":754,"nodeType":"StructuredDocumentation","src":"7968:366:7","text":" @notice Reverse a `pause` operation, and restore the Pool to normal functionality.\n @dev This is a permissioned function that will only work on a paused Pool within the Buffer Period set during\n deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\n @param pool The pool being unpaused"},"functionSelector":"f21c38cd","id":759,"implemented":false,"kind":"function","modifiers":[],"name":"unpausePool","nameLocation":"8348:11:7","nodeType":"FunctionDefinition","parameters":{"id":757,"nodeType":"ParameterList","parameters":[{"constant":false,"id":756,"mutability":"mutable","name":"pool","nameLocation":"8368:4:7","nodeType":"VariableDeclaration","scope":759,"src":"8360:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":755,"name":"address","nodeType":"ElementaryTypeName","src":"8360:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8359:14:7"},"returnParameters":{"id":758,"nodeType":"ParameterList","parameters":[],"src":"8382:0:7"},"scope":941,"src":"8339:44:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":760,"nodeType":"StructuredDocumentation","src":"8606:520:7","text":" @notice Assigns a new static swap fee percentage to the specified pool.\n @dev This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within\n the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`.\n Emits the SwapFeePercentageChanged event.\n @param pool The address of the pool for which the static swap fee will be changed\n @param swapFeePercentage The new swap fee percentage to apply to the pool"},"functionSelector":"d15126ba","id":767,"implemented":false,"kind":"function","modifiers":[],"name":"setStaticSwapFeePercentage","nameLocation":"9140:26:7","nodeType":"FunctionDefinition","parameters":{"id":765,"nodeType":"ParameterList","parameters":[{"constant":false,"id":762,"mutability":"mutable","name":"pool","nameLocation":"9175:4:7","nodeType":"VariableDeclaration","scope":767,"src":"9167:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":761,"name":"address","nodeType":"ElementaryTypeName","src":"9167:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":764,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"9189:17:7","nodeType":"VariableDeclaration","scope":767,"src":"9181:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":763,"name":"uint256","nodeType":"ElementaryTypeName","src":"9181:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9166:41:7"},"returnParameters":{"id":766,"nodeType":"ParameterList","parameters":[],"src":"9216:0:7"},"scope":941,"src":"9131:86:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":768,"nodeType":"StructuredDocumentation","src":"9223:463:7","text":" @notice Collects accumulated aggregate swap and yield fees for the specified pool.\n @dev Fees are sent to the ProtocolFeeController address.\n @param pool The pool on which all aggregate fees should be collected\n @return swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n @return yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order"},"functionSelector":"8f4ab9ca","id":779,"implemented":false,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"9700:20:7","nodeType":"FunctionDefinition","parameters":{"id":771,"nodeType":"ParameterList","parameters":[{"constant":false,"id":770,"mutability":"mutable","name":"pool","nameLocation":"9738:4:7","nodeType":"VariableDeclaration","scope":779,"src":"9730:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":769,"name":"address","nodeType":"ElementaryTypeName","src":"9730:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9720:28:7"},"returnParameters":{"id":778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":774,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"9784:14:7","nodeType":"VariableDeclaration","scope":779,"src":"9767:31:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":772,"name":"uint256","nodeType":"ElementaryTypeName","src":"9767:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":773,"nodeType":"ArrayTypeName","src":"9767:9:7","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":777,"mutability":"mutable","name":"yieldFeeAmounts","nameLocation":"9817:15:7","nodeType":"VariableDeclaration","scope":779,"src":"9800:32:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":775,"name":"uint256","nodeType":"ElementaryTypeName","src":"9800:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":776,"nodeType":"ArrayTypeName","src":"9800:9:7","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9766:67:7"},"scope":941,"src":"9691:143:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":780,"nodeType":"StructuredDocumentation","src":"9840:755:7","text":" @notice Update an aggregate swap fee percentage.\n @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n Emits an `AggregateSwapFeePercentageChanged` event.\n @param pool The pool whose swap fee percentage will be updated\n @param newAggregateSwapFeePercentage The new aggregate swap fee percentage"},"functionSelector":"5e0b06f4","id":787,"implemented":false,"kind":"function","modifiers":[],"name":"updateAggregateSwapFeePercentage","nameLocation":"10609:32:7","nodeType":"FunctionDefinition","parameters":{"id":785,"nodeType":"ParameterList","parameters":[{"constant":false,"id":782,"mutability":"mutable","name":"pool","nameLocation":"10650:4:7","nodeType":"VariableDeclaration","scope":787,"src":"10642:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":781,"name":"address","nodeType":"ElementaryTypeName","src":"10642:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":784,"mutability":"mutable","name":"newAggregateSwapFeePercentage","nameLocation":"10664:29:7","nodeType":"VariableDeclaration","scope":787,"src":"10656:37:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":783,"name":"uint256","nodeType":"ElementaryTypeName","src":"10656:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10641:53:7"},"returnParameters":{"id":786,"nodeType":"ParameterList","parameters":[],"src":"10703:0:7"},"scope":941,"src":"10600:104:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":788,"nodeType":"StructuredDocumentation","src":"10710:760:7","text":" @notice Update an aggregate yield fee percentage.\n @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n Emits an `AggregateYieldFeePercentageChanged` event.\n @param pool The pool whose yield fee percentage will be updated\n @param newAggregateYieldFeePercentage The new aggregate yield fee percentage"},"functionSelector":"e253670a","id":795,"implemented":false,"kind":"function","modifiers":[],"name":"updateAggregateYieldFeePercentage","nameLocation":"11484:33:7","nodeType":"FunctionDefinition","parameters":{"id":793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":790,"mutability":"mutable","name":"pool","nameLocation":"11526:4:7","nodeType":"VariableDeclaration","scope":795,"src":"11518:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":789,"name":"address","nodeType":"ElementaryTypeName","src":"11518:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":792,"mutability":"mutable","name":"newAggregateYieldFeePercentage","nameLocation":"11540:30:7","nodeType":"VariableDeclaration","scope":795,"src":"11532:38:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":791,"name":"uint256","nodeType":"ElementaryTypeName","src":"11532:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11517:54:7"},"returnParameters":{"id":794,"nodeType":"ParameterList","parameters":[],"src":"11580:0:7"},"scope":941,"src":"11475:106:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":796,"nodeType":"StructuredDocumentation","src":"11587:249:7","text":" @notice Sets a new Protocol Fee Controller for the Vault.\n @dev This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\n @param newProtocolFeeController The address of the new Protocol Fee Controller"},"functionSelector":"2d771389","id":802,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolFeeController","nameLocation":"11850:24:7","nodeType":"FunctionDefinition","parameters":{"id":800,"nodeType":"ParameterList","parameters":[{"constant":false,"id":799,"mutability":"mutable","name":"newProtocolFeeController","nameLocation":"11898:24:7","nodeType":"VariableDeclaration","scope":802,"src":"11875:47:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"},"typeName":{"id":798,"nodeType":"UserDefinedTypeName","pathNode":{"id":797,"name":"IProtocolFeeController","nameLocations":["11875:22:7"],"nodeType":"IdentifierPath","referencedDeclaration":613,"src":"11875:22:7"},"referencedDeclaration":613,"src":"11875:22:7","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"11874:49:7"},"returnParameters":{"id":801,"nodeType":"ParameterList","parameters":[],"src":"11932:0:7"},"scope":941,"src":"11841:92:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":803,"nodeType":"StructuredDocumentation","src":"12160:557:7","text":" @notice Enable recovery mode for a pool.\n @dev This is a permissioned function. It enables a safe proportional withdrawal, with no external calls.\n Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so\n must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live\n balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\n @param pool The address of the pool"},"functionSelector":"dc3f574e","id":808,"implemented":false,"kind":"function","modifiers":[],"name":"enableRecoveryMode","nameLocation":"12731:18:7","nodeType":"FunctionDefinition","parameters":{"id":806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":805,"mutability":"mutable","name":"pool","nameLocation":"12758:4:7","nodeType":"VariableDeclaration","scope":808,"src":"12750:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":804,"name":"address","nodeType":"ElementaryTypeName","src":"12750:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12749:14:7"},"returnParameters":{"id":807,"nodeType":"ParameterList","parameters":[],"src":"12772:0:7"},"scope":941,"src":"12722:51:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":809,"nodeType":"StructuredDocumentation","src":"12779:409:7","text":" @notice Disable recovery mode for a pool.\n @dev This is a permissioned function. It re-syncs live balances (which could not be updated during\n Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could\n potentially fail if there is an issue with any associated Rate Providers.\n @param pool The address of the pool"},"functionSelector":"bffb78b2","id":814,"implemented":false,"kind":"function","modifiers":[],"name":"disableRecoveryMode","nameLocation":"13202:19:7","nodeType":"FunctionDefinition","parameters":{"id":812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":811,"mutability":"mutable","name":"pool","nameLocation":"13230:4:7","nodeType":"VariableDeclaration","scope":814,"src":"13222:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":810,"name":"address","nodeType":"ElementaryTypeName","src":"13222:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13221:14:7"},"returnParameters":{"id":813,"nodeType":"ParameterList","parameters":[],"src":"13244:0:7"},"scope":941,"src":"13193:52:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":815,"nodeType":"StructuredDocumentation","src":"13476:653:7","text":" @notice Disables query functionality on the Vault. Can only be called by governance.\n @dev The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from\n settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable\n queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).\n This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether\n disabling queries is completely necessary; queries can still be re-enabled after this call."},"functionSelector":"de1a36a6","id":818,"implemented":false,"kind":"function","modifiers":[],"name":"disableQuery","nameLocation":"14143:12:7","nodeType":"FunctionDefinition","parameters":{"id":816,"nodeType":"ParameterList","parameters":[],"src":"14155:2:7"},"returnParameters":{"id":817,"nodeType":"ParameterList","parameters":[],"src":"14166:0:7"},"scope":941,"src":"14134:33:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":819,"nodeType":"StructuredDocumentation","src":"14173:223:7","text":" @notice Disables query functionality permanently on the Vault. Can only be called by governance.\n @dev Shall only be used when there is no doubt that queries pose a fundamental threat to the system."},"functionSelector":"821440f2","id":822,"implemented":false,"kind":"function","modifiers":[],"name":"disableQueryPermanently","nameLocation":"14410:23:7","nodeType":"FunctionDefinition","parameters":{"id":820,"nodeType":"ParameterList","parameters":[],"src":"14433:2:7"},"returnParameters":{"id":821,"nodeType":"ParameterList","parameters":[],"src":"14444:0:7"},"scope":941,"src":"14401:44:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":823,"nodeType":"StructuredDocumentation","src":"14451:166:7","text":" @notice Enables query functionality on the Vault. Can only be called by governance.\n @dev Only works if queries are not permanently disabled."},"functionSelector":"e0d55605","id":826,"implemented":false,"kind":"function","modifiers":[],"name":"enableQuery","nameLocation":"14631:11:7","nodeType":"FunctionDefinition","parameters":{"id":824,"nodeType":"ParameterList","parameters":[],"src":"14642:2:7"},"returnParameters":{"id":825,"nodeType":"ParameterList","parameters":[],"src":"14653:0:7"},"scope":941,"src":"14622:32:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":827,"nodeType":"StructuredDocumentation","src":"14881:590:7","text":" @notice Indicates whether the Vault buffers are paused.\n @dev When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true)\n will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and\n independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they\n would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\n @return buffersPaused True if the Vault buffers are paused"},"functionSelector":"55cba7fe","id":832,"implemented":false,"kind":"function","modifiers":[],"name":"areBuffersPaused","nameLocation":"15485:16:7","nodeType":"FunctionDefinition","parameters":{"id":828,"nodeType":"ParameterList","parameters":[],"src":"15501:2:7"},"returnParameters":{"id":831,"nodeType":"ParameterList","parameters":[{"constant":false,"id":830,"mutability":"mutable","name":"buffersPaused","nameLocation":"15532:13:7","nodeType":"VariableDeclaration","scope":832,"src":"15527:18:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":829,"name":"bool","nodeType":"ElementaryTypeName","src":"15527:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15526:20:7"},"scope":941,"src":"15476:71:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":833,"nodeType":"StructuredDocumentation","src":"15553:619:7","text":" @notice Pauses native vault buffers globally.\n @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not\n possible to pause vault buffers individually.\n This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate\n and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting\n buffers, and vice versa."},"functionSelector":"e085c5a8","id":836,"implemented":false,"kind":"function","modifiers":[],"name":"pauseVaultBuffers","nameLocation":"16186:17:7","nodeType":"FunctionDefinition","parameters":{"id":834,"nodeType":"ParameterList","parameters":[],"src":"16203:2:7"},"returnParameters":{"id":835,"nodeType":"ParameterList","parameters":[],"src":"16214:0:7"},"scope":941,"src":"16177:38:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":837,"nodeType":"StructuredDocumentation","src":"16221:545:7","text":" @notice Unpauses native vault buffers globally.\n @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above,\n ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`.\n If the Vault was also paused, it will remain in that state until explicitly unpaused.\n This is a permissioned call."},"functionSelector":"b9212b49","id":840,"implemented":false,"kind":"function","modifiers":[],"name":"unpauseVaultBuffers","nameLocation":"16780:19:7","nodeType":"FunctionDefinition","parameters":{"id":838,"nodeType":"ParameterList","parameters":[],"src":"16799:2:7"},"returnParameters":{"id":839,"nodeType":"ParameterList","parameters":[],"src":"16810:0:7"},"scope":941,"src":"16771:40:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":841,"nodeType":"StructuredDocumentation","src":"16817:860:7","text":" @notice Initializes buffer for the given wrapped token.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param amountUnderlyingRaw Amount of underlying tokens that will be deposited into the buffer\n @param amountWrappedRaw Amount of wrapped tokens that will be deposited into the buffer\n @param minIssuedShares Minimum amount of shares to receive from the buffer, expressed in underlying token\n native decimals\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n liquidity from the buffer\n @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals."},"functionSelector":"653eb3b0","id":857,"implemented":false,"kind":"function","modifiers":[],"name":"initializeBuffer","nameLocation":"17691:16:7","nodeType":"FunctionDefinition","parameters":{"id":853,"nodeType":"ParameterList","parameters":[{"constant":false,"id":844,"mutability":"mutable","name":"wrappedToken","nameLocation":"17726:12:7","nodeType":"VariableDeclaration","scope":857,"src":"17717:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":843,"nodeType":"UserDefinedTypeName","pathNode":{"id":842,"name":"IERC4626","nameLocations":["17717:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"17717:8:7"},"referencedDeclaration":6408,"src":"17717:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":846,"mutability":"mutable","name":"amountUnderlyingRaw","nameLocation":"17756:19:7","nodeType":"VariableDeclaration","scope":857,"src":"17748:27:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":845,"name":"uint256","nodeType":"ElementaryTypeName","src":"17748:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":848,"mutability":"mutable","name":"amountWrappedRaw","nameLocation":"17793:16:7","nodeType":"VariableDeclaration","scope":857,"src":"17785:24:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":847,"name":"uint256","nodeType":"ElementaryTypeName","src":"17785:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":850,"mutability":"mutable","name":"minIssuedShares","nameLocation":"17827:15:7","nodeType":"VariableDeclaration","scope":857,"src":"17819:23:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":849,"name":"uint256","nodeType":"ElementaryTypeName","src":"17819:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":852,"mutability":"mutable","name":"sharesOwner","nameLocation":"17860:11:7","nodeType":"VariableDeclaration","scope":857,"src":"17852:19:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":851,"name":"address","nodeType":"ElementaryTypeName","src":"17852:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17707:170:7"},"returnParameters":{"id":856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":855,"mutability":"mutable","name":"issuedShares","nameLocation":"17904:12:7","nodeType":"VariableDeclaration","scope":857,"src":"17896:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":854,"name":"uint256","nodeType":"ElementaryTypeName","src":"17896:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17895:22:7"},"scope":941,"src":"17682:236:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":858,"nodeType":"StructuredDocumentation","src":"17924:1010:7","text":" @notice Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\n @dev The buffer needs to be initialized beforehand.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param maxAmountUnderlyingInRaw Maximum amount of underlying tokens to add to the buffer. It is expressed in\n underlying token native decimals\n @param maxAmountWrappedInRaw Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n token native decimals\n @param exactSharesToIssue The value in underlying tokens that `sharesOwner` wants to add to the buffer,\n in underlying token decimals\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n liquidity from the buffer\n @return amountUnderlyingRaw Amount of underlying tokens deposited into the buffer\n @return amountWrappedRaw Amount of wrapped tokens deposited into the buffer"},"functionSelector":"e2a92b1a","id":876,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityToBuffer","nameLocation":"18948:20:7","nodeType":"FunctionDefinition","parameters":{"id":870,"nodeType":"ParameterList","parameters":[{"constant":false,"id":861,"mutability":"mutable","name":"wrappedToken","nameLocation":"18987:12:7","nodeType":"VariableDeclaration","scope":876,"src":"18978:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":860,"nodeType":"UserDefinedTypeName","pathNode":{"id":859,"name":"IERC4626","nameLocations":["18978:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"18978:8:7"},"referencedDeclaration":6408,"src":"18978:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":863,"mutability":"mutable","name":"maxAmountUnderlyingInRaw","nameLocation":"19017:24:7","nodeType":"VariableDeclaration","scope":876,"src":"19009:32:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":862,"name":"uint256","nodeType":"ElementaryTypeName","src":"19009:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":865,"mutability":"mutable","name":"maxAmountWrappedInRaw","nameLocation":"19059:21:7","nodeType":"VariableDeclaration","scope":876,"src":"19051:29:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":864,"name":"uint256","nodeType":"ElementaryTypeName","src":"19051:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":867,"mutability":"mutable","name":"exactSharesToIssue","nameLocation":"19098:18:7","nodeType":"VariableDeclaration","scope":876,"src":"19090:26:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":866,"name":"uint256","nodeType":"ElementaryTypeName","src":"19090:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":869,"mutability":"mutable","name":"sharesOwner","nameLocation":"19134:11:7","nodeType":"VariableDeclaration","scope":876,"src":"19126:19:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":868,"name":"address","nodeType":"ElementaryTypeName","src":"19126:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18968:183:7"},"returnParameters":{"id":875,"nodeType":"ParameterList","parameters":[{"constant":false,"id":872,"mutability":"mutable","name":"amountUnderlyingRaw","nameLocation":"19178:19:7","nodeType":"VariableDeclaration","scope":876,"src":"19170:27:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":871,"name":"uint256","nodeType":"ElementaryTypeName","src":"19170:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":874,"mutability":"mutable","name":"amountWrappedRaw","nameLocation":"19207:16:7","nodeType":"VariableDeclaration","scope":876,"src":"19199:24:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":873,"name":"uint256","nodeType":"ElementaryTypeName","src":"19199:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19169:55:7"},"scope":941,"src":"18939:286:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":877,"nodeType":"StructuredDocumentation","src":"19231:1458:7","text":" @notice Removes liquidity from an internal ERC4626 buffer in the Vault.\n @dev Only proportional exits are supported, and the sender has to be the owner of the shares.\n This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint.\n Pre-conditions:\n - The buffer needs to be initialized.\n - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why\n this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer.\n - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param sharesToRemove Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's\n total shares. It is expressed in underlying token native decimals\n @param minAmountUnderlyingOutRaw Minimum amount of underlying tokens to receive from the buffer. It is expressed\n in underlying token native decimals\n @param minAmountWrappedOutRaw Minimum amount of wrapped tokens to receive from the buffer. It is expressed in\n wrapped token native decimals\n @return removedUnderlyingBalanceRaw Amount of underlying tokens returned to the user\n @return removedWrappedBalanceRaw Amount of wrapped tokens returned to the user"},"functionSelector":"ebc7955c","id":893,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityFromBuffer","nameLocation":"20703:25:7","nodeType":"FunctionDefinition","parameters":{"id":887,"nodeType":"ParameterList","parameters":[{"constant":false,"id":880,"mutability":"mutable","name":"wrappedToken","nameLocation":"20747:12:7","nodeType":"VariableDeclaration","scope":893,"src":"20738:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":879,"nodeType":"UserDefinedTypeName","pathNode":{"id":878,"name":"IERC4626","nameLocations":["20738:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"20738:8:7"},"referencedDeclaration":6408,"src":"20738:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":882,"mutability":"mutable","name":"sharesToRemove","nameLocation":"20777:14:7","nodeType":"VariableDeclaration","scope":893,"src":"20769:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":881,"name":"uint256","nodeType":"ElementaryTypeName","src":"20769:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":884,"mutability":"mutable","name":"minAmountUnderlyingOutRaw","nameLocation":"20809:25:7","nodeType":"VariableDeclaration","scope":893,"src":"20801:33:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":883,"name":"uint256","nodeType":"ElementaryTypeName","src":"20801:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":886,"mutability":"mutable","name":"minAmountWrappedOutRaw","nameLocation":"20852:22:7","nodeType":"VariableDeclaration","scope":893,"src":"20844:30:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":885,"name":"uint256","nodeType":"ElementaryTypeName","src":"20844:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20728:152:7"},"returnParameters":{"id":892,"nodeType":"ParameterList","parameters":[{"constant":false,"id":889,"mutability":"mutable","name":"removedUnderlyingBalanceRaw","nameLocation":"20907:27:7","nodeType":"VariableDeclaration","scope":893,"src":"20899:35:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":888,"name":"uint256","nodeType":"ElementaryTypeName","src":"20899:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":891,"mutability":"mutable","name":"removedWrappedBalanceRaw","nameLocation":"20944:24:7","nodeType":"VariableDeclaration","scope":893,"src":"20936:32:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":890,"name":"uint256","nodeType":"ElementaryTypeName","src":"20936:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20898:71:7"},"scope":941,"src":"20694:276:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":894,"nodeType":"StructuredDocumentation","src":"20976:382:7","text":" @notice Returns the asset registered for a given wrapped token.\n @dev The asset can never change after buffer initialization.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return underlyingToken Address of the underlying token registered for the wrapper; `address(0)` if the buffer\n has not been initialized."},"functionSelector":"0387587d","id":902,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferAsset","nameLocation":"21372:14:7","nodeType":"FunctionDefinition","parameters":{"id":898,"nodeType":"ParameterList","parameters":[{"constant":false,"id":897,"mutability":"mutable","name":"wrappedToken","nameLocation":"21396:12:7","nodeType":"VariableDeclaration","scope":902,"src":"21387:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":896,"nodeType":"UserDefinedTypeName","pathNode":{"id":895,"name":"IERC4626","nameLocations":["21387:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"21387:8:7"},"referencedDeclaration":6408,"src":"21387:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"21386:23:7"},"returnParameters":{"id":901,"nodeType":"ParameterList","parameters":[{"constant":false,"id":900,"mutability":"mutable","name":"underlyingToken","nameLocation":"21441:15:7","nodeType":"VariableDeclaration","scope":902,"src":"21433:23:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":899,"name":"address","nodeType":"ElementaryTypeName","src":"21433:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21432:25:7"},"scope":941,"src":"21363:95:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":903,"nodeType":"StructuredDocumentation","src":"21464:441:7","text":" @notice Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets\n in the buffer.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param liquidityOwner Address of the user that owns liquidity in the wrapped token's buffer\n @return ownerShares Amount of shares allocated to the liquidity owner, in native underlying token decimals"},"functionSelector":"9385e39a","id":913,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferOwnerShares","nameLocation":"21919:20:7","nodeType":"FunctionDefinition","parameters":{"id":909,"nodeType":"ParameterList","parameters":[{"constant":false,"id":906,"mutability":"mutable","name":"wrappedToken","nameLocation":"21958:12:7","nodeType":"VariableDeclaration","scope":913,"src":"21949:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":905,"nodeType":"UserDefinedTypeName","pathNode":{"id":904,"name":"IERC4626","nameLocations":["21949:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"21949:8:7"},"referencedDeclaration":6408,"src":"21949:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":908,"mutability":"mutable","name":"liquidityOwner","nameLocation":"21988:14:7","nodeType":"VariableDeclaration","scope":913,"src":"21980:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":907,"name":"address","nodeType":"ElementaryTypeName","src":"21980:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21939:69:7"},"returnParameters":{"id":912,"nodeType":"ParameterList","parameters":[{"constant":false,"id":911,"mutability":"mutable","name":"ownerShares","nameLocation":"22040:11:7","nodeType":"VariableDeclaration","scope":913,"src":"22032:19:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":910,"name":"uint256","nodeType":"ElementaryTypeName","src":"22032:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22031:21:7"},"scope":941,"src":"21910:143:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":914,"nodeType":"StructuredDocumentation","src":"22059:281:7","text":" @notice Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return bufferShares Amount of supply shares of the buffer, in native underlying token decimals"},"functionSelector":"f2784e07","id":922,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferTotalShares","nameLocation":"22354:20:7","nodeType":"FunctionDefinition","parameters":{"id":918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":917,"mutability":"mutable","name":"wrappedToken","nameLocation":"22384:12:7","nodeType":"VariableDeclaration","scope":922,"src":"22375:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":916,"nodeType":"UserDefinedTypeName","pathNode":{"id":915,"name":"IERC4626","nameLocations":["22375:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"22375:8:7"},"referencedDeclaration":6408,"src":"22375:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"22374:23:7"},"returnParameters":{"id":921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":920,"mutability":"mutable","name":"bufferShares","nameLocation":"22429:12:7","nodeType":"VariableDeclaration","scope":922,"src":"22421:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":919,"name":"uint256","nodeType":"ElementaryTypeName","src":"22421:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22420:22:7"},"scope":941,"src":"22345:98:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":923,"nodeType":"StructuredDocumentation","src":"22449:521:7","text":" @notice Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\n @dev All values are in native token decimals of the wrapped or underlying tokens.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return underlyingBalanceRaw Amount of underlying tokens deposited into the buffer, in native token decimals\n @return wrappedBalanceRaw Amount of wrapped tokens deposited into the buffer, in native token decimals"},"functionSelector":"4021fe0f","id":933,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferBalance","nameLocation":"22984:16:7","nodeType":"FunctionDefinition","parameters":{"id":927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":926,"mutability":"mutable","name":"wrappedToken","nameLocation":"23019:12:7","nodeType":"VariableDeclaration","scope":933,"src":"23010:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":925,"nodeType":"UserDefinedTypeName","pathNode":{"id":924,"name":"IERC4626","nameLocations":["23010:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"23010:8:7"},"referencedDeclaration":6408,"src":"23010:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"23000:37:7"},"returnParameters":{"id":932,"nodeType":"ParameterList","parameters":[{"constant":false,"id":929,"mutability":"mutable","name":"underlyingBalanceRaw","nameLocation":"23069:20:7","nodeType":"VariableDeclaration","scope":933,"src":"23061:28:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":928,"name":"uint256","nodeType":"ElementaryTypeName","src":"23061:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":931,"mutability":"mutable","name":"wrappedBalanceRaw","nameLocation":"23099:17:7","nodeType":"VariableDeclaration","scope":933,"src":"23091:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":930,"name":"uint256","nodeType":"ElementaryTypeName","src":"23091:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23060:57:7"},"scope":941,"src":"22975:143:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":934,"nodeType":"StructuredDocumentation","src":"23342:202:7","text":" @notice Sets a new Authorizer for the Vault.\n @dev This is a permissioned call. Emits an `AuthorizerChanged` event.\n @param newAuthorizer The address of the new authorizer"},"functionSelector":"058a628f","id":940,"implemented":false,"kind":"function","modifiers":[],"name":"setAuthorizer","nameLocation":"23558:13:7","nodeType":"FunctionDefinition","parameters":{"id":938,"nodeType":"ParameterList","parameters":[{"constant":false,"id":937,"mutability":"mutable","name":"newAuthorizer","nameLocation":"23584:13:7","nodeType":"VariableDeclaration","scope":940,"src":"23572:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"},"typeName":{"id":936,"nodeType":"UserDefinedTypeName","pathNode":{"id":935,"name":"IAuthorizer","nameLocations":["23572:11:7"],"nodeType":"IdentifierPath","referencedDeclaration":73,"src":"23572:11:7"},"referencedDeclaration":73,"src":"23572:11:7","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"23571:27:7"},"returnParameters":{"id":939,"nodeType":"ParameterList","parameters":[],"src":"23607:0:7"},"scope":941,"src":"23549:59:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":942,"src":"586:23024:7","usedErrors":[],"usedEvents":[]}],"src":"46:23565:7"},"id":7},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","exportedSymbols":{"IERC20":[6486],"IERC4626":[6408],"IVaultErrors":[1308]},"id":1309,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":943,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:8"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":945,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1309,"sourceUnit":6409,"src":"72:75:8","symbolAliases":[{"foreign":{"id":944,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6408,"src":"81:8:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":947,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1309,"sourceUnit":6487,"src":"148:72:8","symbolAliases":[{"foreign":{"id":946,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6486,"src":"157:6:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultErrors","contractDependencies":[],"contractKind":"interface","documentation":{"id":948,"nodeType":"StructuredDocumentation","src":"222:94:8","text":"@notice Errors are declared inside an interface (namespace) to improve DX with Typechain."},"fullyImplemented":true,"id":1308,"linearizedBaseContracts":[1308],"name":"IVaultErrors","nameLocation":"326:12:8","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":949,"nodeType":"StructuredDocumentation","src":"576:149:8","text":" @notice A pool has already been registered. `registerPool` may only be called once.\n @param pool The already registered pool"},"errorSelector":"db771c80","id":953,"name":"PoolAlreadyRegistered","nameLocation":"736:21:8","nodeType":"ErrorDefinition","parameters":{"id":952,"nodeType":"ParameterList","parameters":[{"constant":false,"id":951,"mutability":"mutable","name":"pool","nameLocation":"766:4:8","nodeType":"VariableDeclaration","scope":953,"src":"758:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":950,"name":"address","nodeType":"ElementaryTypeName","src":"758:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"757:14:8"},"src":"730:42:8"},{"documentation":{"id":954,"nodeType":"StructuredDocumentation","src":"778:149:8","text":" @notice A pool has already been initialized. `initialize` may only be called once.\n @param pool The already initialized pool"},"errorSelector":"218e3747","id":958,"name":"PoolAlreadyInitialized","nameLocation":"938:22:8","nodeType":"ErrorDefinition","parameters":{"id":957,"nodeType":"ParameterList","parameters":[{"constant":false,"id":956,"mutability":"mutable","name":"pool","nameLocation":"969:4:8","nodeType":"VariableDeclaration","scope":958,"src":"961:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":955,"name":"address","nodeType":"ElementaryTypeName","src":"961:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"960:14:8"},"src":"932:43:8"},{"documentation":{"id":959,"nodeType":"StructuredDocumentation","src":"981:99:8","text":" @notice A pool has not been registered.\n @param pool The unregistered pool"},"errorSelector":"9e51bd5c","id":963,"name":"PoolNotRegistered","nameLocation":"1091:17:8","nodeType":"ErrorDefinition","parameters":{"id":962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":961,"mutability":"mutable","name":"pool","nameLocation":"1117:4:8","nodeType":"VariableDeclaration","scope":963,"src":"1109:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":960,"name":"address","nodeType":"ElementaryTypeName","src":"1109:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1108:14:8"},"src":"1085:38:8"},{"documentation":{"id":964,"nodeType":"StructuredDocumentation","src":"1129:112:8","text":" @notice A referenced pool has not been initialized.\n @param pool The uninitialized pool"},"errorSelector":"4bdace13","id":968,"name":"PoolNotInitialized","nameLocation":"1252:18:8","nodeType":"ErrorDefinition","parameters":{"id":967,"nodeType":"ParameterList","parameters":[{"constant":false,"id":966,"mutability":"mutable","name":"pool","nameLocation":"1279:4:8","nodeType":"VariableDeclaration","scope":968,"src":"1271:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":965,"name":"address","nodeType":"ElementaryTypeName","src":"1271:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1270:14:8"},"src":"1246:39:8"},{"documentation":{"id":969,"nodeType":"StructuredDocumentation","src":"1291:274:8","text":" @notice A hook contract rejected a pool on registration.\n @param poolHooksContract Address of the hook contract that rejected the pool registration\n @param pool Address of the rejected pool\n @param poolFactory Address of the pool factory"},"errorSelector":"fa93d814","id":977,"name":"HookRegistrationFailed","nameLocation":"1576:22:8","nodeType":"ErrorDefinition","parameters":{"id":976,"nodeType":"ParameterList","parameters":[{"constant":false,"id":971,"mutability":"mutable","name":"poolHooksContract","nameLocation":"1607:17:8","nodeType":"VariableDeclaration","scope":977,"src":"1599:25:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":970,"name":"address","nodeType":"ElementaryTypeName","src":"1599:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":973,"mutability":"mutable","name":"pool","nameLocation":"1634:4:8","nodeType":"VariableDeclaration","scope":977,"src":"1626:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":972,"name":"address","nodeType":"ElementaryTypeName","src":"1626:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":975,"mutability":"mutable","name":"poolFactory","nameLocation":"1648:11:8","nodeType":"VariableDeclaration","scope":977,"src":"1640:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":974,"name":"address","nodeType":"ElementaryTypeName","src":"1640:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1598:62:8"},"src":"1570:91:8"},{"documentation":{"id":978,"nodeType":"StructuredDocumentation","src":"1667:136:8","text":" @notice A token was already registered (i.e., it is a duplicate in the pool).\n @param token The duplicate token"},"errorSelector":"4f4b634e","id":983,"name":"TokenAlreadyRegistered","nameLocation":"1814:22:8","nodeType":"ErrorDefinition","parameters":{"id":982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":981,"mutability":"mutable","name":"token","nameLocation":"1844:5:8","nodeType":"VariableDeclaration","scope":983,"src":"1837:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":980,"nodeType":"UserDefinedTypeName","pathNode":{"id":979,"name":"IERC20","nameLocations":["1837:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"1837:6:8"},"referencedDeclaration":6486,"src":"1837:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1836:14:8"},"src":"1808:43:8"},{"documentation":{"id":984,"nodeType":"StructuredDocumentation","src":"1857:57:8","text":"@notice The token count is below the minimum allowed."},"errorSelector":"5ed4ba8f","id":986,"name":"MinTokens","nameLocation":"1925:9:8","nodeType":"ErrorDefinition","parameters":{"id":985,"nodeType":"ParameterList","parameters":[],"src":"1934:2:8"},"src":"1919:18:8"},{"documentation":{"id":987,"nodeType":"StructuredDocumentation","src":"1943:57:8","text":"@notice The token count is above the maximum allowed."},"errorSelector":"707bdf58","id":989,"name":"MaxTokens","nameLocation":"2011:9:8","nodeType":"ErrorDefinition","parameters":{"id":988,"nodeType":"ParameterList","parameters":[],"src":"2020:2:8"},"src":"2005:18:8"},{"documentation":{"id":990,"nodeType":"StructuredDocumentation","src":"2029:61:8","text":"@notice Invalid tokens (e.g., zero) cannot be registered."},"errorSelector":"c1ab6dc1","id":992,"name":"InvalidToken","nameLocation":"2101:12:8","nodeType":"ErrorDefinition","parameters":{"id":991,"nodeType":"ParameterList","parameters":[],"src":"2113:2:8"},"src":"2095:21:8"},{"documentation":{"id":993,"nodeType":"StructuredDocumentation","src":"2122:86:8","text":"@notice The token type given in a TokenConfig during pool registration is invalid."},"errorSelector":"a1e9dd9d","id":995,"name":"InvalidTokenType","nameLocation":"2219:16:8","nodeType":"ErrorDefinition","parameters":{"id":994,"nodeType":"ParameterList","parameters":[],"src":"2235:2:8"},"src":"2213:25:8"},{"documentation":{"id":996,"nodeType":"StructuredDocumentation","src":"2244:76:8","text":"@notice The data in a TokenConfig struct is inconsistent or unsupported."},"errorSelector":"df450632","id":998,"name":"InvalidTokenConfiguration","nameLocation":"2331:25:8","nodeType":"ErrorDefinition","parameters":{"id":997,"nodeType":"ParameterList","parameters":[],"src":"2356:2:8"},"src":"2325:34:8"},{"documentation":{"id":999,"nodeType":"StructuredDocumentation","src":"2365:64:8","text":"@notice Tokens with more than 18 decimals are not supported."},"errorSelector":"686d3607","id":1001,"name":"InvalidTokenDecimals","nameLocation":"2440:20:8","nodeType":"ErrorDefinition","parameters":{"id":1000,"nodeType":"ParameterList","parameters":[],"src":"2460:2:8"},"src":"2434:29:8"},{"documentation":{"id":1002,"nodeType":"StructuredDocumentation","src":"2469:287:8","text":" @notice The token list passed into an operation does not match the pool tokens in the pool.\n @param pool Address of the pool\n @param expectedToken The correct token at a given index in the pool\n @param actualToken The actual token found at that index"},"errorSelector":"ffe261a1","id":1010,"name":"TokensMismatch","nameLocation":"2767:14:8","nodeType":"ErrorDefinition","parameters":{"id":1009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1004,"mutability":"mutable","name":"pool","nameLocation":"2790:4:8","nodeType":"VariableDeclaration","scope":1010,"src":"2782:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1003,"name":"address","nodeType":"ElementaryTypeName","src":"2782:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1006,"mutability":"mutable","name":"expectedToken","nameLocation":"2804:13:8","nodeType":"VariableDeclaration","scope":1010,"src":"2796:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1005,"name":"address","nodeType":"ElementaryTypeName","src":"2796:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1008,"mutability":"mutable","name":"actualToken","nameLocation":"2827:11:8","nodeType":"VariableDeclaration","scope":1010,"src":"2819:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1007,"name":"address","nodeType":"ElementaryTypeName","src":"2819:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2781:58:8"},"src":"2761:79:8"},{"documentation":{"id":1011,"nodeType":"StructuredDocumentation","src":"3071:85:8","text":"@notice A transient accounting operation completed with outstanding token deltas."},"errorSelector":"20f1d86d","id":1013,"name":"BalanceNotSettled","nameLocation":"3167:17:8","nodeType":"ErrorDefinition","parameters":{"id":1012,"nodeType":"ParameterList","parameters":[],"src":"3184:2:8"},"src":"3161:26:8"},{"documentation":{"id":1014,"nodeType":"StructuredDocumentation","src":"3193:97:8","text":"@notice A user called a Vault function (swap, add/remove liquidity) outside the lock context."},"errorSelector":"c09ba736","id":1016,"name":"VaultIsNotUnlocked","nameLocation":"3301:18:8","nodeType":"ErrorDefinition","parameters":{"id":1015,"nodeType":"ParameterList","parameters":[],"src":"3319:2:8"},"src":"3295:27:8"},{"documentation":{"id":1017,"nodeType":"StructuredDocumentation","src":"3328:105:8","text":"@notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert."},"errorSelector":"53f976d4","id":1019,"name":"DynamicSwapFeeHookFailed","nameLocation":"3444:24:8","nodeType":"ErrorDefinition","parameters":{"id":1018,"nodeType":"ParameterList","parameters":[],"src":"3468:2:8"},"src":"3438:33:8"},{"documentation":{"id":1020,"nodeType":"StructuredDocumentation","src":"3477:105:8","text":"@notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert."},"errorSelector":"e91e17e7","id":1022,"name":"BeforeSwapHookFailed","nameLocation":"3593:20:8","nodeType":"ErrorDefinition","parameters":{"id":1021,"nodeType":"ParameterList","parameters":[],"src":"3613:2:8"},"src":"3587:29:8"},{"documentation":{"id":1023,"nodeType":"StructuredDocumentation","src":"3622:104:8","text":"@notice The pool has returned false to the afterSwap hook, indicating the transaction should revert."},"errorSelector":"15a29dec","id":1025,"name":"AfterSwapHookFailed","nameLocation":"3737:19:8","nodeType":"ErrorDefinition","parameters":{"id":1024,"nodeType":"ParameterList","parameters":[],"src":"3756:2:8"},"src":"3731:28:8"},{"documentation":{"id":1026,"nodeType":"StructuredDocumentation","src":"3765:111:8","text":"@notice The pool has returned false to the beforeInitialize hook, indicating the transaction should revert."},"errorSelector":"60612925","id":1028,"name":"BeforeInitializeHookFailed","nameLocation":"3887:26:8","nodeType":"ErrorDefinition","parameters":{"id":1027,"nodeType":"ParameterList","parameters":[],"src":"3913:2:8"},"src":"3881:35:8"},{"documentation":{"id":1029,"nodeType":"StructuredDocumentation","src":"3922:110:8","text":"@notice The pool has returned false to the afterInitialize hook, indicating the transaction should revert."},"errorSelector":"0f23dbc6","id":1031,"name":"AfterInitializeHookFailed","nameLocation":"4043:25:8","nodeType":"ErrorDefinition","parameters":{"id":1030,"nodeType":"ParameterList","parameters":[],"src":"4068:2:8"},"src":"4037:34:8"},{"documentation":{"id":1032,"nodeType":"StructuredDocumentation","src":"4077:113:8","text":"@notice The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert."},"errorSelector":"0b2eb652","id":1034,"name":"BeforeAddLiquidityHookFailed","nameLocation":"4201:28:8","nodeType":"ErrorDefinition","parameters":{"id":1033,"nodeType":"ParameterList","parameters":[],"src":"4229:2:8"},"src":"4195:37:8"},{"documentation":{"id":1035,"nodeType":"StructuredDocumentation","src":"4238:112:8","text":"@notice The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert."},"errorSelector":"e1249165","id":1037,"name":"AfterAddLiquidityHookFailed","nameLocation":"4361:27:8","nodeType":"ErrorDefinition","parameters":{"id":1036,"nodeType":"ParameterList","parameters":[],"src":"4388:2:8"},"src":"4355:36:8"},{"documentation":{"id":1038,"nodeType":"StructuredDocumentation","src":"4397:116:8","text":"@notice The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert."},"errorSelector":"2aaf8866","id":1040,"name":"BeforeRemoveLiquidityHookFailed","nameLocation":"4524:31:8","nodeType":"ErrorDefinition","parameters":{"id":1039,"nodeType":"ParameterList","parameters":[],"src":"4555:2:8"},"src":"4518:40:8"},{"documentation":{"id":1041,"nodeType":"StructuredDocumentation","src":"4564:115:8","text":"@notice The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert."},"errorSelector":"1d3391d8","id":1043,"name":"AfterRemoveLiquidityHookFailed","nameLocation":"4690:30:8","nodeType":"ErrorDefinition","parameters":{"id":1042,"nodeType":"ParameterList","parameters":[],"src":"4720:2:8"},"src":"4684:39:8"},{"documentation":{"id":1044,"nodeType":"StructuredDocumentation","src":"4729:115:8","text":"@notice An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance)."},"errorSelector":"e5d185cf","id":1046,"name":"RouterNotTrusted","nameLocation":"4855:16:8","nodeType":"ErrorDefinition","parameters":{"id":1045,"nodeType":"ParameterList","parameters":[],"src":"4871:2:8"},"src":"4849:25:8"},{"documentation":{"id":1047,"nodeType":"StructuredDocumentation","src":"5097:47:8","text":"@notice The user tried to swap zero tokens."},"errorSelector":"57a456b7","id":1049,"name":"AmountGivenZero","nameLocation":"5155:15:8","nodeType":"ErrorDefinition","parameters":{"id":1048,"nodeType":"ParameterList","parameters":[],"src":"5170:2:8"},"src":"5149:24:8"},{"documentation":{"id":1050,"nodeType":"StructuredDocumentation","src":"5179:58:8","text":"@notice The user attempted to swap a token for itself."},"errorSelector":"a54b181d","id":1052,"name":"CannotSwapSameToken","nameLocation":"5248:19:8","nodeType":"ErrorDefinition","parameters":{"id":1051,"nodeType":"ParameterList","parameters":[],"src":"5267:2:8"},"src":"5242:28:8"},{"documentation":{"id":1053,"nodeType":"StructuredDocumentation","src":"5276:137:8","text":" @notice The user attempted to operate with a token that is not in the pool.\n @param token The unregistered token"},"errorSelector":"ddef98d7","id":1058,"name":"TokenNotRegistered","nameLocation":"5424:18:8","nodeType":"ErrorDefinition","parameters":{"id":1057,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1056,"mutability":"mutable","name":"token","nameLocation":"5450:5:8","nodeType":"VariableDeclaration","scope":1058,"src":"5443:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":1055,"nodeType":"UserDefinedTypeName","pathNode":{"id":1054,"name":"IERC20","nameLocations":["5443:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"5443:6:8"},"referencedDeclaration":6486,"src":"5443:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"5442:14:8"},"src":"5418:39:8"},{"documentation":{"id":1059,"nodeType":"StructuredDocumentation","src":"5463:215:8","text":" @notice An amount in or out has exceeded the limit specified in the swap request.\n @param amount The total amount in or out\n @param limit The amount of the limit that has been exceeded"},"errorSelector":"e2ea151b","id":1065,"name":"SwapLimit","nameLocation":"5689:9:8","nodeType":"ErrorDefinition","parameters":{"id":1064,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1061,"mutability":"mutable","name":"amount","nameLocation":"5707:6:8","nodeType":"VariableDeclaration","scope":1065,"src":"5699:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1060,"name":"uint256","nodeType":"ElementaryTypeName","src":"5699:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1063,"mutability":"mutable","name":"limit","nameLocation":"5723:5:8","nodeType":"VariableDeclaration","scope":1065,"src":"5715:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1062,"name":"uint256","nodeType":"ElementaryTypeName","src":"5715:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5698:31:8"},"src":"5683:47:8"},{"documentation":{"id":1066,"nodeType":"StructuredDocumentation","src":"5736:228:8","text":" @notice A hook adjusted amount in or out has exceeded the limit specified in the swap request.\n @param amount The total amount in or out\n @param limit The amount of the limit that has been exceeded"},"errorSelector":"cc0e4a99","id":1072,"name":"HookAdjustedSwapLimit","nameLocation":"5975:21:8","nodeType":"ErrorDefinition","parameters":{"id":1071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1068,"mutability":"mutable","name":"amount","nameLocation":"6005:6:8","nodeType":"VariableDeclaration","scope":1072,"src":"5997:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1067,"name":"uint256","nodeType":"ElementaryTypeName","src":"5997:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1070,"mutability":"mutable","name":"limit","nameLocation":"6021:5:8","nodeType":"VariableDeclaration","scope":1072,"src":"6013:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1069,"name":"uint256","nodeType":"ElementaryTypeName","src":"6013:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5996:31:8"},"src":"5969:59:8"},{"documentation":{"id":1073,"nodeType":"StructuredDocumentation","src":"6034:87:8","text":"@notice The amount given or calculated for an operation is below the minimum limit."},"errorSelector":"1ed4d118","id":1075,"name":"TradeAmountTooSmall","nameLocation":"6132:19:8","nodeType":"ErrorDefinition","parameters":{"id":1074,"nodeType":"ParameterList","parameters":[],"src":"6151:2:8"},"src":"6126:28:8"},{"documentation":{"id":1076,"nodeType":"StructuredDocumentation","src":"6381:45:8","text":"@notice Add liquidity kind not supported."},"errorSelector":"6c02b395","id":1078,"name":"InvalidAddLiquidityKind","nameLocation":"6437:23:8","nodeType":"ErrorDefinition","parameters":{"id":1077,"nodeType":"ParameterList","parameters":[],"src":"6460:2:8"},"src":"6431:32:8"},{"documentation":{"id":1079,"nodeType":"StructuredDocumentation","src":"6469:264:8","text":" @notice A required amountIn exceeds the maximum limit specified for the operation.\n @param tokenIn The incoming token\n @param amountIn The total token amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"8eda85e4","id":1088,"name":"AmountInAboveMax","nameLocation":"6744:16:8","nodeType":"ErrorDefinition","parameters":{"id":1087,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1082,"mutability":"mutable","name":"tokenIn","nameLocation":"6768:7:8","nodeType":"VariableDeclaration","scope":1088,"src":"6761:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":1081,"nodeType":"UserDefinedTypeName","pathNode":{"id":1080,"name":"IERC20","nameLocations":["6761:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"6761:6:8"},"referencedDeclaration":6486,"src":"6761:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1084,"mutability":"mutable","name":"amountIn","nameLocation":"6785:8:8","nodeType":"VariableDeclaration","scope":1088,"src":"6777:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1083,"name":"uint256","nodeType":"ElementaryTypeName","src":"6777:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1086,"mutability":"mutable","name":"maxAmountIn","nameLocation":"6803:11:8","nodeType":"VariableDeclaration","scope":1088,"src":"6795:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1085,"name":"uint256","nodeType":"ElementaryTypeName","src":"6795:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6760:55:8"},"src":"6738:78:8"},{"documentation":{"id":1089,"nodeType":"StructuredDocumentation","src":"6822:269:8","text":" @notice A hook adjusted amountIn exceeds the maximum limit specified for the operation.\n @param tokenIn The incoming token\n @param amountIn The total token amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"cefa3afa","id":1098,"name":"HookAdjustedAmountInAboveMax","nameLocation":"7102:28:8","nodeType":"ErrorDefinition","parameters":{"id":1097,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1092,"mutability":"mutable","name":"tokenIn","nameLocation":"7138:7:8","nodeType":"VariableDeclaration","scope":1098,"src":"7131:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":1091,"nodeType":"UserDefinedTypeName","pathNode":{"id":1090,"name":"IERC20","nameLocations":["7131:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"7131:6:8"},"referencedDeclaration":6486,"src":"7131:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1094,"mutability":"mutable","name":"amountIn","nameLocation":"7155:8:8","nodeType":"VariableDeclaration","scope":1098,"src":"7147:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1093,"name":"uint256","nodeType":"ElementaryTypeName","src":"7147:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1096,"mutability":"mutable","name":"maxAmountIn","nameLocation":"7173:11:8","nodeType":"VariableDeclaration","scope":1098,"src":"7165:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1095,"name":"uint256","nodeType":"ElementaryTypeName","src":"7165:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7130:55:8"},"src":"7096:90:8"},{"documentation":{"id":1099,"nodeType":"StructuredDocumentation","src":"7192:245:8","text":" @notice The BPT amount received from adding liquidity is below the minimum specified for the operation.\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"8d261d5d","id":1105,"name":"BptAmountOutBelowMin","nameLocation":"7448:20:8","nodeType":"ErrorDefinition","parameters":{"id":1104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1101,"mutability":"mutable","name":"amountOut","nameLocation":"7477:9:8","nodeType":"VariableDeclaration","scope":1105,"src":"7469:17:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1100,"name":"uint256","nodeType":"ElementaryTypeName","src":"7469:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1103,"mutability":"mutable","name":"minAmountOut","nameLocation":"7496:12:8","nodeType":"VariableDeclaration","scope":1105,"src":"7488:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1102,"name":"uint256","nodeType":"ElementaryTypeName","src":"7488:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7468:41:8"},"src":"7442:68:8"},{"documentation":{"id":1106,"nodeType":"StructuredDocumentation","src":"7516:75:8","text":"@notice Pool does not support adding liquidity with a customized input."},"errorSelector":"4876c0bc","id":1108,"name":"DoesNotSupportAddLiquidityCustom","nameLocation":"7602:32:8","nodeType":"ErrorDefinition","parameters":{"id":1107,"nodeType":"ParameterList","parameters":[],"src":"7634:2:8"},"src":"7596:41:8"},{"documentation":{"id":1109,"nodeType":"StructuredDocumentation","src":"7643:68:8","text":"@notice Pool does not support adding liquidity through donation."},"errorSelector":"efe0265d","id":1111,"name":"DoesNotSupportDonation","nameLocation":"7722:22:8","nodeType":"ErrorDefinition","parameters":{"id":1110,"nodeType":"ParameterList","parameters":[],"src":"7744:2:8"},"src":"7716:31:8"},{"documentation":{"id":1112,"nodeType":"StructuredDocumentation","src":"7977:48:8","text":"@notice Remove liquidity kind not supported."},"errorSelector":"137a9a39","id":1114,"name":"InvalidRemoveLiquidityKind","nameLocation":"8036:26:8","nodeType":"ErrorDefinition","parameters":{"id":1113,"nodeType":"ParameterList","parameters":[],"src":"8062:2:8"},"src":"8030:35:8"},{"documentation":{"id":1115,"nodeType":"StructuredDocumentation","src":"8071:269:8","text":" @notice The actual amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"2f785e46","id":1124,"name":"AmountOutBelowMin","nameLocation":"8351:17:8","nodeType":"ErrorDefinition","parameters":{"id":1123,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1118,"mutability":"mutable","name":"tokenOut","nameLocation":"8376:8:8","nodeType":"VariableDeclaration","scope":1124,"src":"8369:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":1117,"nodeType":"UserDefinedTypeName","pathNode":{"id":1116,"name":"IERC20","nameLocations":["8369:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"8369:6:8"},"referencedDeclaration":6486,"src":"8369:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1120,"mutability":"mutable","name":"amountOut","nameLocation":"8394:9:8","nodeType":"VariableDeclaration","scope":1124,"src":"8386:17:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1119,"name":"uint256","nodeType":"ElementaryTypeName","src":"8386:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1122,"mutability":"mutable","name":"minAmountOut","nameLocation":"8413:12:8","nodeType":"VariableDeclaration","scope":1124,"src":"8405:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1121,"name":"uint256","nodeType":"ElementaryTypeName","src":"8405:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8368:58:8"},"src":"8345:82:8"},{"documentation":{"id":1125,"nodeType":"StructuredDocumentation","src":"8433:276:8","text":" @notice The hook adjusted amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"fbd8a724","id":1134,"name":"HookAdjustedAmountOutBelowMin","nameLocation":"8720:29:8","nodeType":"ErrorDefinition","parameters":{"id":1133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1128,"mutability":"mutable","name":"tokenOut","nameLocation":"8757:8:8","nodeType":"VariableDeclaration","scope":1134,"src":"8750:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":1127,"nodeType":"UserDefinedTypeName","pathNode":{"id":1126,"name":"IERC20","nameLocations":["8750:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"8750:6:8"},"referencedDeclaration":6486,"src":"8750:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1130,"mutability":"mutable","name":"amountOut","nameLocation":"8775:9:8","nodeType":"VariableDeclaration","scope":1134,"src":"8767:17:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1129,"name":"uint256","nodeType":"ElementaryTypeName","src":"8767:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1132,"mutability":"mutable","name":"minAmountOut","nameLocation":"8794:12:8","nodeType":"VariableDeclaration","scope":1134,"src":"8786:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1131,"name":"uint256","nodeType":"ElementaryTypeName","src":"8786:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8749:58:8"},"src":"8714:94:8"},{"documentation":{"id":1135,"nodeType":"StructuredDocumentation","src":"8814:228:8","text":" @notice The required BPT amount in exceeds the maximum limit specified for the operation.\n @param amountIn The total BPT amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"31d38e0b","id":1141,"name":"BptAmountInAboveMax","nameLocation":"9053:19:8","nodeType":"ErrorDefinition","parameters":{"id":1140,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1137,"mutability":"mutable","name":"amountIn","nameLocation":"9081:8:8","nodeType":"VariableDeclaration","scope":1141,"src":"9073:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1136,"name":"uint256","nodeType":"ElementaryTypeName","src":"9073:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1139,"mutability":"mutable","name":"maxAmountIn","nameLocation":"9099:11:8","nodeType":"VariableDeclaration","scope":1141,"src":"9091:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1138,"name":"uint256","nodeType":"ElementaryTypeName","src":"9091:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9072:39:8"},"src":"9047:65:8"},{"documentation":{"id":1142,"nodeType":"StructuredDocumentation","src":"9118:77:8","text":"@notice Pool does not support removing liquidity with a customized input."},"errorSelector":"cf0a95c0","id":1144,"name":"DoesNotSupportRemoveLiquidityCustom","nameLocation":"9206:35:8","nodeType":"ErrorDefinition","parameters":{"id":1143,"nodeType":"ParameterList","parameters":[],"src":"9241:2:8"},"src":"9200:44:8"},{"documentation":{"id":1145,"nodeType":"StructuredDocumentation","src":"9463:332:8","text":" @notice Error raised when there is an overflow in the fee calculation.\n @dev This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole\n (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee\n percentages in the Vault."},"errorSelector":"4c69ac5d","id":1147,"name":"ProtocolFeesExceedTotalCollected","nameLocation":"9806:32:8","nodeType":"ErrorDefinition","parameters":{"id":1146,"nodeType":"ParameterList","parameters":[],"src":"9838:2:8"},"src":"9800:41:8"},{"documentation":{"id":1148,"nodeType":"StructuredDocumentation","src":"9847:430:8","text":" @notice Error raised when the swap fee percentage is less than the minimum allowed value.\n @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n if it is below the minimum value returned by the pool.\n Pools with dynamic fees do not check these limits."},"errorSelector":"bfb20688","id":1150,"name":"SwapFeePercentageTooLow","nameLocation":"10288:23:8","nodeType":"ErrorDefinition","parameters":{"id":1149,"nodeType":"ParameterList","parameters":[],"src":"10311:2:8"},"src":"10282:32:8"},{"documentation":{"id":1151,"nodeType":"StructuredDocumentation","src":"10320:433:8","text":" @notice Error raised when the swap fee percentage is greater than the maximum allowed value.\n @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n if it is above the maximum value returned by the pool.\n Pools with dynamic fees do not check these limits."},"errorSelector":"7f47834b","id":1153,"name":"SwapFeePercentageTooHigh","nameLocation":"10764:24:8","nodeType":"ErrorDefinition","parameters":{"id":1152,"nodeType":"ParameterList","parameters":[],"src":"10788:2:8"},"src":"10758:33:8"},{"documentation":{"id":1154,"nodeType":"StructuredDocumentation","src":"10797:646:8","text":" @notice Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\n @dev Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between\n the aggregate fee calculated here and that stored in the Vault."},"errorSelector":"833fb3ce","id":1156,"name":"FeePrecisionTooHigh","nameLocation":"11454:19:8","nodeType":"ErrorDefinition","parameters":{"id":1155,"nodeType":"ParameterList","parameters":[],"src":"11473:2:8"},"src":"11448:28:8"},{"documentation":{"id":1157,"nodeType":"StructuredDocumentation","src":"11482:107:8","text":"@notice A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei)."},"errorSelector":"746e5940","id":1159,"name":"PercentageAboveMax","nameLocation":"11600:18:8","nodeType":"ErrorDefinition","parameters":{"id":1158,"nodeType":"ParameterList","parameters":[],"src":"11618:2:8"},"src":"11594:27:8"},{"documentation":{"id":1160,"nodeType":"StructuredDocumentation","src":"11842:78:8","text":"@notice A user tried to execute a query operation when they were disabled."},"errorSelector":"7a198886","id":1162,"name":"QueriesDisabled","nameLocation":"11931:15:8","nodeType":"ErrorDefinition","parameters":{"id":1161,"nodeType":"ParameterList","parameters":[],"src":"11946:2:8"},"src":"11925:24:8"},{"documentation":{"id":1163,"nodeType":"StructuredDocumentation","src":"11955:84:8","text":"@notice An admin tried to re-enable queries, but they were disabled permanently."},"errorSelector":"069f8cbc","id":1165,"name":"QueriesDisabledPermanently","nameLocation":"12050:26:8","nodeType":"ErrorDefinition","parameters":{"id":1164,"nodeType":"ParameterList","parameters":[],"src":"12076:2:8"},"src":"12044:35:8"},{"documentation":{"id":1166,"nodeType":"StructuredDocumentation","src":"12302:104:8","text":" @notice Cannot enable recovery mode when already enabled.\n @param pool The pool"},"errorSelector":"346d7607","id":1170,"name":"PoolInRecoveryMode","nameLocation":"12417:18:8","nodeType":"ErrorDefinition","parameters":{"id":1169,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1168,"mutability":"mutable","name":"pool","nameLocation":"12444:4:8","nodeType":"VariableDeclaration","scope":1170,"src":"12436:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1167,"name":"address","nodeType":"ElementaryTypeName","src":"12436:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12435:14:8"},"src":"12411:39:8"},{"documentation":{"id":1171,"nodeType":"StructuredDocumentation","src":"12456:101:8","text":" @notice Cannot disable recovery mode when not enabled.\n @param pool The pool"},"errorSelector":"ef029adf","id":1175,"name":"PoolNotInRecoveryMode","nameLocation":"12568:21:8","nodeType":"ErrorDefinition","parameters":{"id":1174,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1173,"mutability":"mutable","name":"pool","nameLocation":"12598:4:8","nodeType":"VariableDeclaration","scope":1175,"src":"12590:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1172,"name":"address","nodeType":"ElementaryTypeName","src":"12590:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12589:14:8"},"src":"12562:42:8"},{"documentation":{"id":1176,"nodeType":"StructuredDocumentation","src":"12828:206:8","text":" @notice Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\n @param sender The account attempting to call a permissioned function"},"errorSelector":"089676d5","id":1180,"name":"SenderIsNotVault","nameLocation":"13045:16:8","nodeType":"ErrorDefinition","parameters":{"id":1179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1178,"mutability":"mutable","name":"sender","nameLocation":"13070:6:8","nodeType":"VariableDeclaration","scope":1180,"src":"13062:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1177,"name":"address","nodeType":"ElementaryTypeName","src":"13062:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13061:16:8"},"src":"13039:39:8"},{"documentation":{"id":1181,"nodeType":"StructuredDocumentation","src":"13303:79:8","text":"@notice The caller specified a pause window period longer than the maximum."},"errorSelector":"cc0e8fe5","id":1183,"name":"VaultPauseWindowDurationTooLarge","nameLocation":"13393:32:8","nodeType":"ErrorDefinition","parameters":{"id":1182,"nodeType":"ParameterList","parameters":[],"src":"13425:2:8"},"src":"13387:41:8"},{"documentation":{"id":1184,"nodeType":"StructuredDocumentation","src":"13434:73:8","text":"@notice The caller specified a buffer period longer than the maximum."},"errorSelector":"9ea4efee","id":1186,"name":"PauseBufferPeriodDurationTooLarge","nameLocation":"13518:33:8","nodeType":"ErrorDefinition","parameters":{"id":1185,"nodeType":"ParameterList","parameters":[],"src":"13551:2:8"},"src":"13512:42:8"},{"documentation":{"id":1187,"nodeType":"StructuredDocumentation","src":"13560:76:8","text":"@notice A user tried to perform an operation while the Vault was paused."},"errorSelector":"da9f8b34","id":1189,"name":"VaultPaused","nameLocation":"13647:11:8","nodeType":"ErrorDefinition","parameters":{"id":1188,"nodeType":"ParameterList","parameters":[],"src":"13658:2:8"},"src":"13641:20:8"},{"documentation":{"id":1190,"nodeType":"StructuredDocumentation","src":"13667:73:8","text":"@notice Governance tried to unpause the Vault when it was not paused."},"errorSelector":"f7ff4dca","id":1192,"name":"VaultNotPaused","nameLocation":"13751:14:8","nodeType":"ErrorDefinition","parameters":{"id":1191,"nodeType":"ParameterList","parameters":[],"src":"13765:2:8"},"src":"13745:23:8"},{"documentation":{"id":1193,"nodeType":"StructuredDocumentation","src":"13774:79:8","text":"@notice Governance tried to pause the Vault after the pause period expired."},"errorSelector":"0e4460b7","id":1195,"name":"VaultPauseWindowExpired","nameLocation":"13864:23:8","nodeType":"ErrorDefinition","parameters":{"id":1194,"nodeType":"ParameterList","parameters":[],"src":"13887:2:8"},"src":"13858:32:8"},{"documentation":{"id":1196,"nodeType":"StructuredDocumentation","src":"13896:123:8","text":" @notice A user tried to perform an operation involving a paused Pool.\n @param pool The paused pool"},"errorSelector":"d971f597","id":1200,"name":"PoolPaused","nameLocation":"14030:10:8","nodeType":"ErrorDefinition","parameters":{"id":1199,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1198,"mutability":"mutable","name":"pool","nameLocation":"14049:4:8","nodeType":"VariableDeclaration","scope":1200,"src":"14041:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1197,"name":"address","nodeType":"ElementaryTypeName","src":"14041:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14040:14:8"},"src":"14024:31:8"},{"documentation":{"id":1201,"nodeType":"StructuredDocumentation","src":"14061:124:8","text":" @notice Governance tried to unpause the Pool when it was not paused.\n @param pool The unpaused pool"},"errorSelector":"fdcd6894","id":1205,"name":"PoolNotPaused","nameLocation":"14196:13:8","nodeType":"ErrorDefinition","parameters":{"id":1204,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1203,"mutability":"mutable","name":"pool","nameLocation":"14218:4:8","nodeType":"VariableDeclaration","scope":1205,"src":"14210:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1202,"name":"address","nodeType":"ElementaryTypeName","src":"14210:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14209:14:8"},"src":"14190:34:8"},{"documentation":{"id":1206,"nodeType":"StructuredDocumentation","src":"14230:119:8","text":" @notice Governance tried to pause a Pool after the pause period expired.\n @param pool The pool"},"errorSelector":"eb5a1217","id":1210,"name":"PoolPauseWindowExpired","nameLocation":"14360:22:8","nodeType":"ErrorDefinition","parameters":{"id":1209,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1208,"mutability":"mutable","name":"pool","nameLocation":"14391:4:8","nodeType":"VariableDeclaration","scope":1210,"src":"14383:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1207,"name":"address","nodeType":"ElementaryTypeName","src":"14383:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14382:14:8"},"src":"14354:43:8"},{"documentation":{"id":1211,"nodeType":"StructuredDocumentation","src":"14628:163:8","text":" @notice The buffer for the given wrapped token was already initialized.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"1690fa40","id":1216,"name":"BufferAlreadyInitialized","nameLocation":"14802:24:8","nodeType":"ErrorDefinition","parameters":{"id":1215,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1214,"mutability":"mutable","name":"wrappedToken","nameLocation":"14836:12:8","nodeType":"VariableDeclaration","scope":1216,"src":"14827:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1213,"nodeType":"UserDefinedTypeName","pathNode":{"id":1212,"name":"IERC4626","nameLocations":["14827:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"14827:8:8"},"referencedDeclaration":6408,"src":"14827:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"14826:23:8"},"src":"14796:54:8"},{"documentation":{"id":1217,"nodeType":"StructuredDocumentation","src":"14856:159:8","text":" @notice The buffer for the given wrapped token was not initialized.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"85f41299","id":1222,"name":"BufferNotInitialized","nameLocation":"15026:20:8","nodeType":"ErrorDefinition","parameters":{"id":1221,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1220,"mutability":"mutable","name":"wrappedToken","nameLocation":"15056:12:8","nodeType":"VariableDeclaration","scope":1222,"src":"15047:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1219,"nodeType":"UserDefinedTypeName","pathNode":{"id":1218,"name":"IERC4626","nameLocations":["15047:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"15047:8:8"},"referencedDeclaration":6408,"src":"15047:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"15046:23:8"},"src":"15020:50:8"},{"documentation":{"id":1223,"nodeType":"StructuredDocumentation","src":"15076:90:8","text":"@notice The user is trying to remove more than their allocated shares from the buffer."},"errorSelector":"98c5dbd6","id":1225,"name":"NotEnoughBufferShares","nameLocation":"15177:21:8","nodeType":"ErrorDefinition","parameters":{"id":1224,"nodeType":"ParameterList","parameters":[],"src":"15198:2:8"},"src":"15171:30:8"},{"documentation":{"id":1226,"nodeType":"StructuredDocumentation","src":"15207:436:8","text":" @notice The wrapped token asset does not match the underlying token.\n @dev This should never happen, but a malicious wrapper contract might not return the correct address.\n Legitimate wrapper contracts should make the asset a constant or immutable value.\n @param wrappedToken The wrapped token corresponding to the buffer\n @param underlyingToken The underlying token returned by `asset`"},"errorSelector":"36b18d09","id":1233,"name":"WrongUnderlyingToken","nameLocation":"15654:20:8","nodeType":"ErrorDefinition","parameters":{"id":1232,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1229,"mutability":"mutable","name":"wrappedToken","nameLocation":"15684:12:8","nodeType":"VariableDeclaration","scope":1233,"src":"15675:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1228,"nodeType":"UserDefinedTypeName","pathNode":{"id":1227,"name":"IERC4626","nameLocations":["15675:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"15675:8:8"},"referencedDeclaration":6408,"src":"15675:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1231,"mutability":"mutable","name":"underlyingToken","nameLocation":"15706:15:8","nodeType":"VariableDeclaration","scope":1233,"src":"15698:23:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1230,"name":"address","nodeType":"ElementaryTypeName","src":"15698:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15674:48:8"},"src":"15648:75:8"},{"documentation":{"id":1234,"nodeType":"StructuredDocumentation","src":"15729:322:8","text":" @notice A wrapped token reported the zero address as its underlying token asset.\n @dev This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to\n re-initialize the buffer).\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"d407f9c5","id":1239,"name":"InvalidUnderlyingToken","nameLocation":"16062:22:8","nodeType":"ErrorDefinition","parameters":{"id":1238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1237,"mutability":"mutable","name":"wrappedToken","nameLocation":"16094:12:8","nodeType":"VariableDeclaration","scope":1239,"src":"16085:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1236,"nodeType":"UserDefinedTypeName","pathNode":{"id":1235,"name":"IERC4626","nameLocations":["16085:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"16085:8:8"},"referencedDeclaration":6408,"src":"16085:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16084:23:8"},"src":"16056:52:8"},{"documentation":{"id":1240,"nodeType":"StructuredDocumentation","src":"16114:183:8","text":" @notice The amount given to wrap/unwrap was too small, which can introduce rounding issues.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"18fe7385","id":1245,"name":"WrapAmountTooSmall","nameLocation":"16308:18:8","nodeType":"ErrorDefinition","parameters":{"id":1244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1243,"mutability":"mutable","name":"wrappedToken","nameLocation":"16336:12:8","nodeType":"VariableDeclaration","scope":1245,"src":"16327:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1242,"nodeType":"UserDefinedTypeName","pathNode":{"id":1241,"name":"IERC4626","nameLocations":["16327:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"16327:8:8"},"referencedDeclaration":6408,"src":"16327:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16326:23:8"},"src":"16302:48:8"},{"documentation":{"id":1246,"nodeType":"StructuredDocumentation","src":"16356:70:8","text":"@notice Buffer operation attempted while vault buffers are paused."},"errorSelector":"0f27df09","id":1248,"name":"VaultBuffersArePaused","nameLocation":"16437:21:8","nodeType":"ErrorDefinition","parameters":{"id":1247,"nodeType":"ParameterList","parameters":[],"src":"16458:2:8"},"src":"16431:30:8"},{"documentation":{"id":1249,"nodeType":"StructuredDocumentation","src":"16467:58:8","text":"@notice Buffer shares were minted to the zero address."},"errorSelector":"dbe6b10e","id":1251,"name":"BufferSharesInvalidReceiver","nameLocation":"16536:27:8","nodeType":"ErrorDefinition","parameters":{"id":1250,"nodeType":"ParameterList","parameters":[],"src":"16563:2:8"},"src":"16530:36:8"},{"documentation":{"id":1252,"nodeType":"StructuredDocumentation","src":"16572:60:8","text":"@notice Buffer shares were burned from the zero address."},"errorSelector":"586d06df","id":1254,"name":"BufferSharesInvalidOwner","nameLocation":"16643:24:8","nodeType":"ErrorDefinition","parameters":{"id":1253,"nodeType":"ParameterList","parameters":[],"src":"16667:2:8"},"src":"16637:33:8"},{"documentation":{"id":1255,"nodeType":"StructuredDocumentation","src":"16676:173:8","text":" @notice The total supply of a buffer can't be lower than the absolute minimum.\n @param totalSupply The total supply value that was below the minimum"},"errorSelector":"34bdbfaa","id":1259,"name":"BufferTotalSupplyTooLow","nameLocation":"16860:23:8","nodeType":"ErrorDefinition","parameters":{"id":1258,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1257,"mutability":"mutable","name":"totalSupply","nameLocation":"16892:11:8","nodeType":"VariableDeclaration","scope":1259,"src":"16884:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1256,"name":"uint256","nodeType":"ElementaryTypeName","src":"16884:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16883:21:8"},"src":"16854:51:8"},{"documentation":{"id":1260,"nodeType":"StructuredDocumentation","src":"16911:97:8","text":"@dev A wrap/unwrap operation consumed more or returned less underlying tokens than it should."},"errorSelector":"1c6a5375","id":1269,"name":"NotEnoughUnderlying","nameLocation":"17019:19:8","nodeType":"ErrorDefinition","parameters":{"id":1268,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1263,"mutability":"mutable","name":"wrappedToken","nameLocation":"17048:12:8","nodeType":"VariableDeclaration","scope":1269,"src":"17039:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1262,"nodeType":"UserDefinedTypeName","pathNode":{"id":1261,"name":"IERC4626","nameLocations":["17039:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"17039:8:8"},"referencedDeclaration":6408,"src":"17039:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1265,"mutability":"mutable","name":"expectedUnderlyingAmount","nameLocation":"17070:24:8","nodeType":"VariableDeclaration","scope":1269,"src":"17062:32:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1264,"name":"uint256","nodeType":"ElementaryTypeName","src":"17062:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1267,"mutability":"mutable","name":"actualUnderlyingAmount","nameLocation":"17104:22:8","nodeType":"VariableDeclaration","scope":1269,"src":"17096:30:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1266,"name":"uint256","nodeType":"ElementaryTypeName","src":"17096:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17038:89:8"},"src":"17013:115:8"},{"documentation":{"id":1270,"nodeType":"StructuredDocumentation","src":"17134:94:8","text":"@dev A wrap/unwrap operation consumed more or returned less wrapped tokens than it should."},"errorSelector":"1149424d","id":1279,"name":"NotEnoughWrapped","nameLocation":"17239:16:8","nodeType":"ErrorDefinition","parameters":{"id":1278,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1273,"mutability":"mutable","name":"wrappedToken","nameLocation":"17265:12:8","nodeType":"VariableDeclaration","scope":1279,"src":"17256:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1272,"nodeType":"UserDefinedTypeName","pathNode":{"id":1271,"name":"IERC4626","nameLocations":["17256:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"17256:8:8"},"referencedDeclaration":6408,"src":"17256:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1275,"mutability":"mutable","name":"expectedWrappedAmount","nameLocation":"17287:21:8","nodeType":"VariableDeclaration","scope":1279,"src":"17279:29:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1274,"name":"uint256","nodeType":"ElementaryTypeName","src":"17279:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1277,"mutability":"mutable","name":"actualWrappedAmount","nameLocation":"17318:19:8","nodeType":"VariableDeclaration","scope":1279,"src":"17310:27:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1276,"name":"uint256","nodeType":"ElementaryTypeName","src":"17310:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17255:83:8"},"src":"17233:106:8"},{"documentation":{"id":1280,"nodeType":"StructuredDocumentation","src":"17345:76:8","text":"@dev Shares issued during initialization are below the requested amount."},"errorSelector":"da0cb07e","id":1286,"name":"IssuedSharesBelowMin","nameLocation":"17432:20:8","nodeType":"ErrorDefinition","parameters":{"id":1285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1282,"mutability":"mutable","name":"issuedShares","nameLocation":"17461:12:8","nodeType":"VariableDeclaration","scope":1286,"src":"17453:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1281,"name":"uint256","nodeType":"ElementaryTypeName","src":"17453:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1284,"mutability":"mutable","name":"minIssuedShares","nameLocation":"17483:15:8","nodeType":"VariableDeclaration","scope":1286,"src":"17475:23:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1283,"name":"uint256","nodeType":"ElementaryTypeName","src":"17475:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17452:47:8"},"src":"17426:74:8"},{"documentation":{"id":1287,"nodeType":"StructuredDocumentation","src":"17727:87:8","text":"@notice Pool does not support adding / removing liquidity with an unbalanced input."},"errorSelector":"d4f5779c","id":1289,"name":"DoesNotSupportUnbalancedLiquidity","nameLocation":"17825:33:8","nodeType":"ErrorDefinition","parameters":{"id":1288,"nodeType":"ParameterList","parameters":[],"src":"17858:2:8"},"src":"17819:42:8"},{"documentation":{"id":1290,"nodeType":"StructuredDocumentation","src":"17867:48:8","text":"@notice The contract should not receive ETH."},"errorSelector":"f2238896","id":1292,"name":"CannotReceiveEth","nameLocation":"17926:16:8","nodeType":"ErrorDefinition","parameters":{"id":1291,"nodeType":"ParameterList","parameters":[],"src":"17942:2:8"},"src":"17920:25:8"},{"documentation":{"id":1293,"nodeType":"StructuredDocumentation","src":"17951:156:8","text":" @notice The `VaultExtension` contract was called by an account directly.\n @dev It can only be called by the Vault via delegatecall."},"errorSelector":"9fd25b36","id":1295,"name":"NotVaultDelegateCall","nameLocation":"18118:20:8","nodeType":"ErrorDefinition","parameters":{"id":1294,"nodeType":"ParameterList","parameters":[],"src":"18138:2:8"},"src":"18112:29:8"},{"documentation":{"id":1296,"nodeType":"StructuredDocumentation","src":"18147:89:8","text":"@notice The `VaultExtension` contract was configured with an incorrect Vault address."},"errorSelector":"1ab9d9d0","id":1298,"name":"WrongVaultExtensionDeployment","nameLocation":"18247:29:8","nodeType":"ErrorDefinition","parameters":{"id":1297,"nodeType":"ParameterList","parameters":[],"src":"18276:2:8"},"src":"18241:38:8"},{"documentation":{"id":1299,"nodeType":"StructuredDocumentation","src":"18285:96:8","text":"@notice The `ProtocolFeeController` contract was configured with an incorrect Vault address."},"errorSelector":"1bbe95c7","id":1301,"name":"WrongProtocolFeeControllerDeployment","nameLocation":"18392:36:8","nodeType":"ErrorDefinition","parameters":{"id":1300,"nodeType":"ParameterList","parameters":[],"src":"18428:2:8"},"src":"18386:45:8"},{"documentation":{"id":1302,"nodeType":"StructuredDocumentation","src":"18437:85:8","text":"@notice The `VaultAdmin` contract was configured with an incorrect Vault address."},"errorSelector":"82cc28b6","id":1304,"name":"WrongVaultAdminDeployment","nameLocation":"18533:25:8","nodeType":"ErrorDefinition","parameters":{"id":1303,"nodeType":"ParameterList","parameters":[],"src":"18558:2:8"},"src":"18527:34:8"},{"documentation":{"id":1305,"nodeType":"StructuredDocumentation","src":"18567:54:8","text":"@notice Quote reverted with a reserved error code."},"errorSelector":"28f95541","id":1307,"name":"QuoteResultSpoofed","nameLocation":"18632:18:8","nodeType":"ErrorDefinition","parameters":{"id":1306,"nodeType":"ParameterList","parameters":[],"src":"18650:2:8"},"src":"18626:27:8"}],"scope":1309,"src":"316:18339:8","usedErrors":[953,958,963,968,977,983,986,989,992,995,998,1001,1010,1013,1016,1019,1022,1025,1028,1031,1034,1037,1040,1043,1046,1049,1052,1058,1065,1072,1075,1078,1088,1098,1105,1108,1111,1114,1124,1134,1141,1144,1147,1150,1153,1156,1159,1162,1165,1170,1175,1180,1183,1186,1189,1192,1195,1200,1205,1210,1216,1222,1225,1233,1239,1245,1248,1251,1254,1259,1269,1279,1286,1289,1292,1295,1298,1301,1304,1307],"usedEvents":[]}],"src":"46:18610:8"},"id":8},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","exportedSymbols":{"AddLiquidityKind":[2347],"AddLiquidityParams":[2363],"AfterSwapParams":[2341],"BufferWrapOrUnwrapParams":[2402],"FEE_BITLENGTH":[2405],"FEE_SCALING_FACTOR":[2408],"HookFlags":[2167],"HooksConfig":[2191],"IAuthorizer":[73],"IERC20":[6486],"IERC4626":[6408],"IHooks":[275],"IProtocolFeeController":[613],"IRateProvider":[57],"IVaultEvents":[1547],"LiquidityManagement":[2120],"MAX_FEE_PERCENTAGE":[2411],"PoolConfig":[2145],"PoolConfigBits":[2122],"PoolData":[2269],"PoolRoleAccounts":[2217],"PoolSwapParams":[2312],"RemoveLiquidityKind":[2368],"RemoveLiquidityParams":[2384],"Rounding":[2272],"SwapKind":[2275],"SwapState":[2201],"TokenConfig":[2234],"TokenInfo":[2244],"TokenType":[2221],"VaultState":[2209],"VaultSwapParams":[2294],"WrappingDirection":[2387]},"id":1548,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1310,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:9"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":1312,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1548,"sourceUnit":6409,"src":"72:75:9","symbolAliases":[{"foreign":{"id":1311,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6408,"src":"81:8:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1314,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1548,"sourceUnit":6487,"src":"148:72:9","symbolAliases":[{"foreign":{"id":1313,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6486,"src":"157:6:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":1316,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1548,"sourceUnit":614,"src":"222:70:9","symbolAliases":[{"foreign":{"id":1315,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":613,"src":"231:22:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":1318,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1548,"sourceUnit":74,"src":"293:48:9","symbolAliases":[{"foreign":{"id":1317,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73,"src":"302:11:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"./IHooks.sol","id":1320,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1548,"sourceUnit":276,"src":"342:38:9","symbolAliases":[{"foreign":{"id":1319,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":275,"src":"351:6:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":1321,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1548,"sourceUnit":2412,"src":"381:26:9","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultEvents","contractDependencies":[],"contractKind":"interface","documentation":{"id":1322,"nodeType":"StructuredDocumentation","src":"409:91:9","text":"@dev Events are declared inside an interface (namespace) to improve DX with Typechain."},"fullyImplemented":true,"id":1547,"linearizedBaseContracts":[1547],"name":"IVaultEvents","nameLocation":"510:12:9","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1323,"nodeType":"StructuredDocumentation","src":"529:657:9","text":" @notice A Pool was registered by calling `registerPool`.\n @param pool The pool being registered\n @param factory The factory creating the pool\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param swapFeePercentage The static swap fee of the pool\n @param pauseWindowEndTime The pool's pause window end time\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param hooksConfig Flags indicating which hooks the pool supports and address of hooks contract\n @param liquidityManagement Supported liquidity management hook flags"},"eventSelector":"bc1561eeab9f40962e2fb827a7ff9c7cdb47a9d7c84caeefa4ed90e043842dad","id":1346,"name":"PoolRegistered","nameLocation":"1197:14:9","nodeType":"EventDefinition","parameters":{"id":1345,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1325,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1237:4:9","nodeType":"VariableDeclaration","scope":1346,"src":"1221:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1324,"name":"address","nodeType":"ElementaryTypeName","src":"1221:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1327,"indexed":true,"mutability":"mutable","name":"factory","nameLocation":"1267:7:9","nodeType":"VariableDeclaration","scope":1346,"src":"1251:23:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1326,"name":"address","nodeType":"ElementaryTypeName","src":"1251:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1331,"indexed":false,"mutability":"mutable","name":"tokenConfig","nameLocation":"1298:11:9","nodeType":"VariableDeclaration","scope":1346,"src":"1284:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2234_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":1329,"nodeType":"UserDefinedTypeName","pathNode":{"id":1328,"name":"TokenConfig","nameLocations":["1284:11:9"],"nodeType":"IdentifierPath","referencedDeclaration":2234,"src":"1284:11:9"},"referencedDeclaration":2234,"src":"1284:11:9","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2234_storage_ptr","typeString":"struct TokenConfig"}},"id":1330,"nodeType":"ArrayTypeName","src":"1284:13:9","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2234_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":1333,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1327:17:9","nodeType":"VariableDeclaration","scope":1346,"src":"1319:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1332,"name":"uint256","nodeType":"ElementaryTypeName","src":"1319:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1335,"indexed":false,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"1361:18:9","nodeType":"VariableDeclaration","scope":1346,"src":"1354:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1334,"name":"uint32","nodeType":"ElementaryTypeName","src":"1354:6:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1338,"indexed":false,"mutability":"mutable","name":"roleAccounts","nameLocation":"1406:12:9","nodeType":"VariableDeclaration","scope":1346,"src":"1389:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":1337,"nodeType":"UserDefinedTypeName","pathNode":{"id":1336,"name":"PoolRoleAccounts","nameLocations":["1389:16:9"],"nodeType":"IdentifierPath","referencedDeclaration":2217,"src":"1389:16:9"},"referencedDeclaration":2217,"src":"1389:16:9","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":1341,"indexed":false,"mutability":"mutable","name":"hooksConfig","nameLocation":"1440:11:9","nodeType":"VariableDeclaration","scope":1346,"src":"1428:23:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2191_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":1340,"nodeType":"UserDefinedTypeName","pathNode":{"id":1339,"name":"HooksConfig","nameLocations":["1428:11:9"],"nodeType":"IdentifierPath","referencedDeclaration":2191,"src":"1428:11:9"},"referencedDeclaration":2191,"src":"1428:11:9","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2191_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"},{"constant":false,"id":1344,"indexed":false,"mutability":"mutable","name":"liquidityManagement","nameLocation":"1481:19:9","nodeType":"VariableDeclaration","scope":1346,"src":"1461:39:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2120_memory_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":1343,"nodeType":"UserDefinedTypeName","pathNode":{"id":1342,"name":"LiquidityManagement","nameLocations":["1461:19:9"],"nodeType":"IdentifierPath","referencedDeclaration":2120,"src":"1461:19:9"},"referencedDeclaration":2120,"src":"1461:19:9","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2120_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"1211:295:9"},"src":"1191:316:9"},{"anonymous":false,"documentation":{"id":1347,"nodeType":"StructuredDocumentation","src":"1513:120:9","text":" @notice A Pool was initialized by calling `initialize`.\n @param pool The pool being initialized"},"eventSelector":"cad8c9d32507393b6508ca4a888b81979919b477510585bde8488f153072d6f3","id":1351,"name":"PoolInitialized","nameLocation":"1644:15:9","nodeType":"EventDefinition","parameters":{"id":1350,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1349,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1676:4:9","nodeType":"VariableDeclaration","scope":1351,"src":"1660:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1348,"name":"address","nodeType":"ElementaryTypeName","src":"1660:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1659:22:9"},"src":"1638:44:9"},{"anonymous":false,"documentation":{"id":1352,"nodeType":"StructuredDocumentation","src":"1688:478:9","text":" @notice A swap has occurred.\n @param pool The pool with the tokens being swapped\n @param tokenIn The token entering the Vault (balance increases)\n @param tokenOut The token leaving the Vault (balance decreases)\n @param amountIn Number of tokenIn tokens\n @param amountOut Number of tokenOut tokens\n @param swapFeePercentage Swap fee percentage applied (can differ if dynamic)\n @param swapFeeAmount Swap fee amount paid"},"eventSelector":"0874b2d545cb271cdbda4e093020c452328b24af12382ed62c4d00f5c26709db","id":1370,"name":"Swap","nameLocation":"2177:4:9","nodeType":"EventDefinition","parameters":{"id":1369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1354,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2207:4:9","nodeType":"VariableDeclaration","scope":1370,"src":"2191:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1353,"name":"address","nodeType":"ElementaryTypeName","src":"2191:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1357,"indexed":true,"mutability":"mutable","name":"tokenIn","nameLocation":"2236:7:9","nodeType":"VariableDeclaration","scope":1370,"src":"2221:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":1356,"nodeType":"UserDefinedTypeName","pathNode":{"id":1355,"name":"IERC20","nameLocations":["2221:6:9"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"2221:6:9"},"referencedDeclaration":6486,"src":"2221:6:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1360,"indexed":true,"mutability":"mutable","name":"tokenOut","nameLocation":"2268:8:9","nodeType":"VariableDeclaration","scope":1370,"src":"2253:23:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":1359,"nodeType":"UserDefinedTypeName","pathNode":{"id":1358,"name":"IERC20","nameLocations":["2253:6:9"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"2253:6:9"},"referencedDeclaration":6486,"src":"2253:6:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1362,"indexed":false,"mutability":"mutable","name":"amountIn","nameLocation":"2294:8:9","nodeType":"VariableDeclaration","scope":1370,"src":"2286:16:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1361,"name":"uint256","nodeType":"ElementaryTypeName","src":"2286:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1364,"indexed":false,"mutability":"mutable","name":"amountOut","nameLocation":"2320:9:9","nodeType":"VariableDeclaration","scope":1370,"src":"2312:17:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1363,"name":"uint256","nodeType":"ElementaryTypeName","src":"2312:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1366,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"2347:17:9","nodeType":"VariableDeclaration","scope":1370,"src":"2339:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1365,"name":"uint256","nodeType":"ElementaryTypeName","src":"2339:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1368,"indexed":false,"mutability":"mutable","name":"swapFeeAmount","nameLocation":"2382:13:9","nodeType":"VariableDeclaration","scope":1370,"src":"2374:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1367,"name":"uint256","nodeType":"ElementaryTypeName","src":"2374:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2181:220:9"},"src":"2171:231:9"},{"anonymous":false,"documentation":{"id":1371,"nodeType":"StructuredDocumentation","src":"2408:352:9","text":" @notice A wrap operation has occurred.\n @param wrappedToken The wrapped token address\n @param depositedUnderlying Number of underlying tokens deposited\n @param mintedShares Number of shares (wrapped tokens) minted\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"3771d13c67011e31e12031c54bb59b0bf544a80b81d280a3711e172aa8b7f47b","id":1382,"name":"Wrap","nameLocation":"2771:4:9","nodeType":"EventDefinition","parameters":{"id":1381,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1374,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"2802:12:9","nodeType":"VariableDeclaration","scope":1382,"src":"2785:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1373,"nodeType":"UserDefinedTypeName","pathNode":{"id":1372,"name":"IERC4626","nameLocations":["2785:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"2785:8:9"},"referencedDeclaration":6408,"src":"2785:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1376,"indexed":false,"mutability":"mutable","name":"depositedUnderlying","nameLocation":"2832:19:9","nodeType":"VariableDeclaration","scope":1382,"src":"2824:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1375,"name":"uint256","nodeType":"ElementaryTypeName","src":"2824:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1378,"indexed":false,"mutability":"mutable","name":"mintedShares","nameLocation":"2869:12:9","nodeType":"VariableDeclaration","scope":1382,"src":"2861:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1377,"name":"uint256","nodeType":"ElementaryTypeName","src":"2861:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1380,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"2899:14:9","nodeType":"VariableDeclaration","scope":1382,"src":"2891:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1379,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2891:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2775:144:9"},"src":"2765:155:9"},{"anonymous":false,"documentation":{"id":1383,"nodeType":"StructuredDocumentation","src":"2926:355:9","text":" @notice An unwrap operation has occurred.\n @param wrappedToken The wrapped token address\n @param burnedShares Number of shares (wrapped tokens) burned\n @param withdrawnUnderlying Number of underlying tokens withdrawn\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"eeb740c90bf2b18c9532eb7d473137767036d893dff3e009f32718f821b2a4c0","id":1394,"name":"Unwrap","nameLocation":"3292:6:9","nodeType":"EventDefinition","parameters":{"id":1393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1386,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"3325:12:9","nodeType":"VariableDeclaration","scope":1394,"src":"3308:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1385,"nodeType":"UserDefinedTypeName","pathNode":{"id":1384,"name":"IERC4626","nameLocations":["3308:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"3308:8:9"},"referencedDeclaration":6408,"src":"3308:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1388,"indexed":false,"mutability":"mutable","name":"burnedShares","nameLocation":"3355:12:9","nodeType":"VariableDeclaration","scope":1394,"src":"3347:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1387,"name":"uint256","nodeType":"ElementaryTypeName","src":"3347:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1390,"indexed":false,"mutability":"mutable","name":"withdrawnUnderlying","nameLocation":"3385:19:9","nodeType":"VariableDeclaration","scope":1394,"src":"3377:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1389,"name":"uint256","nodeType":"ElementaryTypeName","src":"3377:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1392,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"3422:14:9","nodeType":"VariableDeclaration","scope":1394,"src":"3414:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1391,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3414:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3298:144:9"},"src":"3286:157:9"},{"anonymous":false,"documentation":{"id":1395,"nodeType":"StructuredDocumentation","src":"3449:562:9","text":" @notice Liquidity has been added to a pool (including initialization).\n @param pool The pool with liquidity added\n @param liquidityProvider The user performing the operation\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param totalSupply The total supply of the pool after the operation\n @param amountsAddedRaw The amount of each token that was added, sorted in token registration order\n @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order"},"eventSelector":"a26a52d8d53702bba7f137907b8e1f99ff87f6d450144270ca25e72481cca871","id":1412,"name":"LiquidityAdded","nameLocation":"4022:14:9","nodeType":"EventDefinition","parameters":{"id":1411,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1397,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4062:4:9","nodeType":"VariableDeclaration","scope":1412,"src":"4046:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1396,"name":"address","nodeType":"ElementaryTypeName","src":"4046:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1399,"indexed":true,"mutability":"mutable","name":"liquidityProvider","nameLocation":"4092:17:9","nodeType":"VariableDeclaration","scope":1412,"src":"4076:33:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1398,"name":"address","nodeType":"ElementaryTypeName","src":"4076:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1402,"indexed":true,"mutability":"mutable","name":"kind","nameLocation":"4144:4:9","nodeType":"VariableDeclaration","scope":1412,"src":"4119:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2347","typeString":"enum AddLiquidityKind"},"typeName":{"id":1401,"nodeType":"UserDefinedTypeName","pathNode":{"id":1400,"name":"AddLiquidityKind","nameLocations":["4119:16:9"],"nodeType":"IdentifierPath","referencedDeclaration":2347,"src":"4119:16:9"},"referencedDeclaration":2347,"src":"4119:16:9","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2347","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1404,"indexed":false,"mutability":"mutable","name":"totalSupply","nameLocation":"4166:11:9","nodeType":"VariableDeclaration","scope":1412,"src":"4158:19:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1403,"name":"uint256","nodeType":"ElementaryTypeName","src":"4158:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1407,"indexed":false,"mutability":"mutable","name":"amountsAddedRaw","nameLocation":"4197:15:9","nodeType":"VariableDeclaration","scope":1412,"src":"4187:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1405,"name":"uint256","nodeType":"ElementaryTypeName","src":"4187:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1406,"nodeType":"ArrayTypeName","src":"4187:9:9","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1410,"indexed":false,"mutability":"mutable","name":"swapFeeAmountsRaw","nameLocation":"4232:17:9","nodeType":"VariableDeclaration","scope":1412,"src":"4222:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1408,"name":"uint256","nodeType":"ElementaryTypeName","src":"4222:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1409,"nodeType":"ArrayTypeName","src":"4222:9:9","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4036:219:9"},"src":"4016:240:9"},{"anonymous":false,"documentation":{"id":1413,"nodeType":"StructuredDocumentation","src":"4262:548:9","text":" @notice Liquidity has been removed from a pool.\n @param pool The pool with liquidity removed\n @param liquidityProvider The user performing the operation\n @param kind The remove liquidity operation type (e.g., proportional, custom)\n @param totalSupply The total supply of the pool after the operation\n @param amountsRemovedRaw The amount of each token that was removed, sorted in token registration order\n @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order"},"eventSelector":"fbe5b0d79fb94f1e81c0a92bf86ae9d3a19e9d1bf6202c0d3e75120f65d5d8a5","id":1430,"name":"LiquidityRemoved","nameLocation":"4821:16:9","nodeType":"EventDefinition","parameters":{"id":1429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1415,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4863:4:9","nodeType":"VariableDeclaration","scope":1430,"src":"4847:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1414,"name":"address","nodeType":"ElementaryTypeName","src":"4847:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1417,"indexed":true,"mutability":"mutable","name":"liquidityProvider","nameLocation":"4893:17:9","nodeType":"VariableDeclaration","scope":1430,"src":"4877:33:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1416,"name":"address","nodeType":"ElementaryTypeName","src":"4877:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1420,"indexed":true,"mutability":"mutable","name":"kind","nameLocation":"4948:4:9","nodeType":"VariableDeclaration","scope":1430,"src":"4920:32:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2368","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":1419,"nodeType":"UserDefinedTypeName","pathNode":{"id":1418,"name":"RemoveLiquidityKind","nameLocations":["4920:19:9"],"nodeType":"IdentifierPath","referencedDeclaration":2368,"src":"4920:19:9"},"referencedDeclaration":2368,"src":"4920:19:9","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2368","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1422,"indexed":false,"mutability":"mutable","name":"totalSupply","nameLocation":"4970:11:9","nodeType":"VariableDeclaration","scope":1430,"src":"4962:19:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1421,"name":"uint256","nodeType":"ElementaryTypeName","src":"4962:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1425,"indexed":false,"mutability":"mutable","name":"amountsRemovedRaw","nameLocation":"5001:17:9","nodeType":"VariableDeclaration","scope":1430,"src":"4991:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1423,"name":"uint256","nodeType":"ElementaryTypeName","src":"4991:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1424,"nodeType":"ArrayTypeName","src":"4991:9:9","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1428,"indexed":false,"mutability":"mutable","name":"swapFeeAmountsRaw","nameLocation":"5038:17:9","nodeType":"VariableDeclaration","scope":1430,"src":"5028:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1426,"name":"uint256","nodeType":"ElementaryTypeName","src":"5028:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1427,"nodeType":"ArrayTypeName","src":"5028:9:9","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4837:224:9"},"src":"4815:247:9"},{"anonymous":false,"documentation":{"id":1431,"nodeType":"StructuredDocumentation","src":"5068:114:9","text":" @notice The Vault's pause status has changed.\n @param paused True if the Vault was paused"},"eventSelector":"e0629fe656e45ad7fd63a24b899da368690024c07043b88e57aee5095b1d3d02","id":1435,"name":"VaultPausedStateChanged","nameLocation":"5193:23:9","nodeType":"EventDefinition","parameters":{"id":1434,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1433,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"5222:6:9","nodeType":"VariableDeclaration","scope":1435,"src":"5217:11:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1432,"name":"bool","nodeType":"ElementaryTypeName","src":"5217:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5216:13:9"},"src":"5187:43:9"},{"anonymous":false,"documentation":{"id":1436,"nodeType":"StructuredDocumentation","src":"5236:87:9","text":"@notice `disableQuery` has been called on the Vault, disabling query functionality."},"eventSelector":"bd204090fd387f08e3076528bf09b4fc99d8100d749eace96c06002d3fedc625","id":1438,"name":"VaultQueriesDisabled","nameLocation":"5334:20:9","nodeType":"EventDefinition","parameters":{"id":1437,"nodeType":"ParameterList","parameters":[],"src":"5354:2:9"},"src":"5328:29:9"},{"anonymous":false,"documentation":{"id":1439,"nodeType":"StructuredDocumentation","src":"5363:85:9","text":"@notice `enableQuery` has been called on the Vault, enabling query functionality."},"eventSelector":"91d7478835f2b5adc315f5aad920f4a7f0a02f7fddf3042d17b2c80168ea17f5","id":1441,"name":"VaultQueriesEnabled","nameLocation":"5459:19:9","nodeType":"EventDefinition","parameters":{"id":1440,"nodeType":"ParameterList","parameters":[],"src":"5478:2:9"},"src":"5453:28:9"},{"anonymous":false,"documentation":{"id":1442,"nodeType":"StructuredDocumentation","src":"5487:171:9","text":" @notice A Pool's pause status has changed.\n @param pool The pool that was just paused or unpaused\n @param paused True if the pool was paused"},"eventSelector":"57e20448028297190122571be7cb6c1b1ef85730c673f7c72f533c8662419aa7","id":1448,"name":"PoolPausedStateChanged","nameLocation":"5669:22:9","nodeType":"EventDefinition","parameters":{"id":1447,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1444,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5708:4:9","nodeType":"VariableDeclaration","scope":1448,"src":"5692:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1443,"name":"address","nodeType":"ElementaryTypeName","src":"5692:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1446,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"5719:6:9","nodeType":"VariableDeclaration","scope":1448,"src":"5714:11:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1445,"name":"bool","nodeType":"ElementaryTypeName","src":"5714:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5691:35:9"},"src":"5663:64:9"},{"anonymous":false,"documentation":{"id":1449,"nodeType":"StructuredDocumentation","src":"5733:158:9","text":" @notice Emitted when the swap fee percentage of a pool is updated.\n @param swapFeePercentage The new swap fee percentage for the pool"},"eventSelector":"89d41522342fabac1471ca6073a5623e5caf367b03ca6e9a001478d0cf8be4a1","id":1455,"name":"SwapFeePercentageChanged","nameLocation":"5902:24:9","nodeType":"EventDefinition","parameters":{"id":1454,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1451,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5943:4:9","nodeType":"VariableDeclaration","scope":1455,"src":"5927:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1450,"name":"address","nodeType":"ElementaryTypeName","src":"5927:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1453,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"5957:17:9","nodeType":"VariableDeclaration","scope":1455,"src":"5949:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1452,"name":"uint256","nodeType":"ElementaryTypeName","src":"5949:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5926:49:9"},"src":"5896:80:9"},{"anonymous":false,"documentation":{"id":1456,"nodeType":"StructuredDocumentation","src":"5982:170:9","text":" @notice Recovery mode has been enabled or disabled for a pool.\n @param pool The pool\n @param recoveryMode True if recovery mode was enabled"},"eventSelector":"c2354cc2f78ea57777e55ddd43a7f22b112ce98868596880edaeb22b4f9c73a9","id":1462,"name":"PoolRecoveryModeStateChanged","nameLocation":"6163:28:9","nodeType":"EventDefinition","parameters":{"id":1461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1458,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6208:4:9","nodeType":"VariableDeclaration","scope":1462,"src":"6192:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1457,"name":"address","nodeType":"ElementaryTypeName","src":"6192:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1460,"indexed":false,"mutability":"mutable","name":"recoveryMode","nameLocation":"6219:12:9","nodeType":"VariableDeclaration","scope":1462,"src":"6214:17:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1459,"name":"bool","nodeType":"ElementaryTypeName","src":"6214:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6191:41:9"},"src":"6157:76:9"},{"anonymous":false,"documentation":{"id":1463,"nodeType":"StructuredDocumentation","src":"6239:353:9","text":" @notice A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\n @dev The `ProtocolFeeController` will emit an event with the underlying change.\n @param pool The pool whose aggregate swap fee percentage changed\n @param aggregateSwapFeePercentage The new aggregate swap fee percentage"},"eventSelector":"e4d371097beea42453a37406e2aef4c04f3c548f84ac50e72578662c0dcd7354","id":1469,"name":"AggregateSwapFeePercentageChanged","nameLocation":"6603:33:9","nodeType":"EventDefinition","parameters":{"id":1468,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1465,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6653:4:9","nodeType":"VariableDeclaration","scope":1469,"src":"6637:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1464,"name":"address","nodeType":"ElementaryTypeName","src":"6637:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1467,"indexed":false,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"6667:26:9","nodeType":"VariableDeclaration","scope":1469,"src":"6659:34:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1466,"name":"uint256","nodeType":"ElementaryTypeName","src":"6659:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6636:58:9"},"src":"6597:98:9"},{"anonymous":false,"documentation":{"id":1470,"nodeType":"StructuredDocumentation","src":"6701:357:9","text":" @notice A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\n @dev The `ProtocolFeeController` will emit an event with the underlying change.\n @param pool The pool whose aggregate yield fee percentage changed\n @param aggregateYieldFeePercentage The new aggregate yield fee percentage"},"eventSelector":"606eb97d83164bd6b200d638cd49c14c65d94d4f2c674cfd85e24e0e202c3ca5","id":1476,"name":"AggregateYieldFeePercentageChanged","nameLocation":"7069:34:9","nodeType":"EventDefinition","parameters":{"id":1475,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1472,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"7120:4:9","nodeType":"VariableDeclaration","scope":1476,"src":"7104:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1471,"name":"address","nodeType":"ElementaryTypeName","src":"7104:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1474,"indexed":false,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"7134:27:9","nodeType":"VariableDeclaration","scope":1476,"src":"7126:35:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1473,"name":"uint256","nodeType":"ElementaryTypeName","src":"7126:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7103:59:9"},"src":"7063:100:9"},{"anonymous":false,"documentation":{"id":1477,"nodeType":"StructuredDocumentation","src":"7169:132:9","text":" @notice A new authorizer is set by `setAuthorizer`.\n @param newAuthorizer The address of the new authorizer"},"eventSelector":"94b979b6831a51293e2641426f97747feed46f17779fed9cd18d1ecefcfe92ef","id":1482,"name":"AuthorizerChanged","nameLocation":"7312:17:9","nodeType":"EventDefinition","parameters":{"id":1481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1480,"indexed":true,"mutability":"mutable","name":"newAuthorizer","nameLocation":"7350:13:9","nodeType":"VariableDeclaration","scope":1482,"src":"7330:33:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"},"typeName":{"id":1479,"nodeType":"UserDefinedTypeName","pathNode":{"id":1478,"name":"IAuthorizer","nameLocations":["7330:11:9"],"nodeType":"IdentifierPath","referencedDeclaration":73,"src":"7330:11:9"},"referencedDeclaration":73,"src":"7330:11:9","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"7329:35:9"},"src":"7306:59:9"},{"anonymous":false,"documentation":{"id":1483,"nodeType":"StructuredDocumentation","src":"7371:180:9","text":" @notice A new protocol fee controller is set by `setProtocolFeeController`.\n @param newProtocolFeeController The address of the new protocol fee controller"},"eventSelector":"280a60b1e63c1774d397d35cce80eb80e51408ead755fb446e6f744ce98e5df0","id":1488,"name":"ProtocolFeeControllerChanged","nameLocation":"7562:28:9","nodeType":"EventDefinition","parameters":{"id":1487,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1486,"indexed":true,"mutability":"mutable","name":"newProtocolFeeController","nameLocation":"7622:24:9","nodeType":"VariableDeclaration","scope":1488,"src":"7591:55:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"},"typeName":{"id":1485,"nodeType":"UserDefinedTypeName","pathNode":{"id":1484,"name":"IProtocolFeeController","nameLocations":["7591:22:9"],"nodeType":"IdentifierPath","referencedDeclaration":613,"src":"7591:22:9"},"referencedDeclaration":613,"src":"7591:22:9","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"7590:57:9"},"src":"7556:92:9"},{"anonymous":false,"documentation":{"id":1489,"nodeType":"StructuredDocumentation","src":"7654:553:9","text":" @notice Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\n @dev The underlying token can be derived from the wrapped token, so it's not included here.\n @param wrappedToken The wrapped token that identifies the buffer\n @param amountUnderlying The amount of the underlying token that was deposited\n @param amountWrapped The amount of the wrapped token that was deposited\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"75c4dc5f23640eeba7d404d9165f515fc3d9e23a5c8b6e2d09b4b9da56ff00a9","id":1500,"name":"LiquidityAddedToBuffer","nameLocation":"8218:22:9","nodeType":"EventDefinition","parameters":{"id":1499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1492,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"8267:12:9","nodeType":"VariableDeclaration","scope":1500,"src":"8250:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1491,"nodeType":"UserDefinedTypeName","pathNode":{"id":1490,"name":"IERC4626","nameLocations":["8250:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"8250:8:9"},"referencedDeclaration":6408,"src":"8250:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1494,"indexed":false,"mutability":"mutable","name":"amountUnderlying","nameLocation":"8297:16:9","nodeType":"VariableDeclaration","scope":1500,"src":"8289:24:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1493,"name":"uint256","nodeType":"ElementaryTypeName","src":"8289:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1496,"indexed":false,"mutability":"mutable","name":"amountWrapped","nameLocation":"8331:13:9","nodeType":"VariableDeclaration","scope":1500,"src":"8323:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1495,"name":"uint256","nodeType":"ElementaryTypeName","src":"8323:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1498,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"8362:14:9","nodeType":"VariableDeclaration","scope":1500,"src":"8354:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1497,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8354:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8240:142:9"},"src":"8212:171:9"},{"anonymous":false,"documentation":{"id":1501,"nodeType":"StructuredDocumentation","src":"8389:570:9","text":" @notice Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\n @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n \"totalSupply\" of a buffer.\n @param wrappedToken The wrapped token that identifies the buffer\n @param to The owner of the minted shares\n @param issuedShares The amount of \"internal BPT\" shares created"},"eventSelector":"d66f031d33381c6408f0b32c884461e5de3df8808399b6f3a3d86b1368f8ec34","id":1510,"name":"BufferSharesMinted","nameLocation":"8970:18:9","nodeType":"EventDefinition","parameters":{"id":1509,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1504,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"9006:12:9","nodeType":"VariableDeclaration","scope":1510,"src":"8989:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1503,"nodeType":"UserDefinedTypeName","pathNode":{"id":1502,"name":"IERC4626","nameLocations":["8989:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"8989:8:9"},"referencedDeclaration":6408,"src":"8989:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1506,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"9036:2:9","nodeType":"VariableDeclaration","scope":1510,"src":"9020:18:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1505,"name":"address","nodeType":"ElementaryTypeName","src":"9020:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1508,"indexed":false,"mutability":"mutable","name":"issuedShares","nameLocation":"9048:12:9","nodeType":"VariableDeclaration","scope":1510,"src":"9040:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1507,"name":"uint256","nodeType":"ElementaryTypeName","src":"9040:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8988:73:9"},"src":"8964:98:9"},{"anonymous":false,"documentation":{"id":1511,"nodeType":"StructuredDocumentation","src":"9068:571:9","text":" @notice Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\n @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n \"totalSupply\" of a buffer.\n @param wrappedToken The wrapped token that identifies the buffer\n @param from The owner of the burned shares\n @param burnedShares The amount of \"internal BPT\" shares burned"},"eventSelector":"4e09f7f7fc37ce2897800e2c2a9099565edb0a133d19d84a6871b3530af8846b","id":1520,"name":"BufferSharesBurned","nameLocation":"9650:18:9","nodeType":"EventDefinition","parameters":{"id":1519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1514,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"9686:12:9","nodeType":"VariableDeclaration","scope":1520,"src":"9669:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1513,"nodeType":"UserDefinedTypeName","pathNode":{"id":1512,"name":"IERC4626","nameLocations":["9669:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"9669:8:9"},"referencedDeclaration":6408,"src":"9669:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1516,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"9716:4:9","nodeType":"VariableDeclaration","scope":1520,"src":"9700:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1515,"name":"address","nodeType":"ElementaryTypeName","src":"9700:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1518,"indexed":false,"mutability":"mutable","name":"burnedShares","nameLocation":"9730:12:9","nodeType":"VariableDeclaration","scope":1520,"src":"9722:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1517,"name":"uint256","nodeType":"ElementaryTypeName","src":"9722:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9668:75:9"},"src":"9644:100:9"},{"anonymous":false,"documentation":{"id":1521,"nodeType":"StructuredDocumentation","src":"9750:509:9","text":" @notice Liquidity was removed from an ERC4626 buffer.\n @dev The underlying token can be derived from the wrapped token, so it's not included here.\n @param wrappedToken The wrapped token that identifies the buffer\n @param amountUnderlying The amount of the underlying token that was withdrawn\n @param amountWrapped The amount of the wrapped token that was withdrawn\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"44d97b36e99b590b3d2875aad3b167b1d7fb1e063f3f1325a1eeac76caee5113","id":1532,"name":"LiquidityRemovedFromBuffer","nameLocation":"10270:26:9","nodeType":"EventDefinition","parameters":{"id":1531,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1524,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"10323:12:9","nodeType":"VariableDeclaration","scope":1532,"src":"10306:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1523,"nodeType":"UserDefinedTypeName","pathNode":{"id":1522,"name":"IERC4626","nameLocations":["10306:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"10306:8:9"},"referencedDeclaration":6408,"src":"10306:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1526,"indexed":false,"mutability":"mutable","name":"amountUnderlying","nameLocation":"10353:16:9","nodeType":"VariableDeclaration","scope":1532,"src":"10345:24:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1525,"name":"uint256","nodeType":"ElementaryTypeName","src":"10345:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1528,"indexed":false,"mutability":"mutable","name":"amountWrapped","nameLocation":"10387:13:9","nodeType":"VariableDeclaration","scope":1532,"src":"10379:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1527,"name":"uint256","nodeType":"ElementaryTypeName","src":"10379:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1530,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"10418:14:9","nodeType":"VariableDeclaration","scope":1532,"src":"10410:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1529,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10410:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"10296:142:9"},"src":"10264:175:9"},{"anonymous":false,"documentation":{"id":1533,"nodeType":"StructuredDocumentation","src":"10445:278:9","text":" @notice The Vault buffers pause status has changed.\n @dev If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer`\n set to true) will revert.\n @param paused True if the Vault buffers were paused"},"eventSelector":"300c7ca619eb846386aa0a6e5916ac2a41406448b0a2e99ba9ccafeb899015a5","id":1537,"name":"VaultBuffersPausedStateChanged","nameLocation":"10734:30:9","nodeType":"EventDefinition","parameters":{"id":1536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1535,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"10770:6:9","nodeType":"VariableDeclaration","scope":1537,"src":"10765:11:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1534,"name":"bool","nodeType":"ElementaryTypeName","src":"10765:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10764:13:9"},"src":"10728:50:9"},{"anonymous":false,"documentation":{"id":1538,"nodeType":"StructuredDocumentation","src":"10784:194:9","text":" @notice Pools can use this event to emit event data from the Vault.\n @param pool Pool address\n @param eventKey Event key\n @param eventData Encoded event data"},"eventSelector":"4bc4412e210115456903c65b5277d299a505e79f2eb852b92b1ca52d85856428","id":1546,"name":"VaultAuxiliary","nameLocation":"10989:14:9","nodeType":"EventDefinition","parameters":{"id":1545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1540,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"11020:4:9","nodeType":"VariableDeclaration","scope":1546,"src":"11004:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1539,"name":"address","nodeType":"ElementaryTypeName","src":"11004:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1542,"indexed":true,"mutability":"mutable","name":"eventKey","nameLocation":"11042:8:9","nodeType":"VariableDeclaration","scope":1546,"src":"11026:24:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1541,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11026:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1544,"indexed":false,"mutability":"mutable","name":"eventData","nameLocation":"11058:9:9","nodeType":"VariableDeclaration","scope":1546,"src":"11052:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1543,"name":"bytes","nodeType":"ElementaryTypeName","src":"11052:5:9","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11003:65:9"},"src":"10983:86:9"}],"scope":1548,"src":"500:10571:9","usedErrors":[],"usedEvents":[1346,1351,1370,1382,1394,1412,1430,1435,1438,1441,1448,1455,1462,1469,1476,1482,1488,1500,1510,1520,1532,1537,1546]}],"src":"46:11026:9"},"id":9},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","exportedSymbols":{"AddLiquidityKind":[2347],"AddLiquidityParams":[2363],"AfterSwapParams":[2341],"BufferWrapOrUnwrapParams":[2402],"FEE_BITLENGTH":[2405],"FEE_SCALING_FACTOR":[2408],"HookFlags":[2167],"HooksConfig":[2191],"IAuthorizer":[73],"IERC20":[6486],"IERC4626":[6408],"IHooks":[275],"IProtocolFeeController":[613],"IRateProvider":[57],"IVault":[651],"IVaultExtension":[1966],"LiquidityManagement":[2120],"MAX_FEE_PERCENTAGE":[2411],"PoolConfig":[2145],"PoolConfigBits":[2122],"PoolData":[2269],"PoolRoleAccounts":[2217],"PoolSwapParams":[2312],"RemoveLiquidityKind":[2368],"RemoveLiquidityParams":[2384],"Rounding":[2272],"SwapKind":[2275],"SwapState":[2201],"TokenConfig":[2234],"TokenInfo":[2244],"TokenType":[2221],"VaultState":[2209],"VaultSwapParams":[2294],"WrappingDirection":[2387]},"id":1967,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1549,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:10"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":1551,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1967,"sourceUnit":6409,"src":"72:75:10","symbolAliases":[{"foreign":{"id":1550,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6408,"src":"81:8:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1553,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1967,"sourceUnit":6487,"src":"148:72:10","symbolAliases":[{"foreign":{"id":1552,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6486,"src":"157:6:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":1555,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1967,"sourceUnit":74,"src":"222:48:10","symbolAliases":[{"foreign":{"id":1554,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73,"src":"231:11:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":1557,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1967,"sourceUnit":614,"src":"271:70:10","symbolAliases":[{"foreign":{"id":1556,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":613,"src":"280:22:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":1559,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1967,"sourceUnit":652,"src":"342:38:10","symbolAliases":[{"foreign":{"id":1558,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":651,"src":"351:6:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"./IHooks.sol","id":1561,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1967,"sourceUnit":276,"src":"381:38:10","symbolAliases":[{"foreign":{"id":1560,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":275,"src":"390:6:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":1562,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1967,"sourceUnit":2412,"src":"420:26:10","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultExtension","contractDependencies":[],"contractKind":"interface","documentation":{"id":1563,"nodeType":"StructuredDocumentation","src":"448:318:10","text":" @notice Interface for functions defined on the `VaultExtension` contract.\n @dev `VaultExtension` handles less critical or frequently used functions, since delegate calls through\n the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and\n liquidity operations."},"fullyImplemented":false,"id":1966,"linearizedBaseContracts":[1966],"name":"IVaultExtension","nameLocation":"777:15:10","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1564,"nodeType":"StructuredDocumentation","src":"1025:206:10","text":" @notice Returns the main Vault address.\n @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n @return vault The address of the main Vault"},"functionSelector":"fbfa77cf","id":1570,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"1245:5:10","nodeType":"FunctionDefinition","parameters":{"id":1565,"nodeType":"ParameterList","parameters":[],"src":"1250:2:10"},"returnParameters":{"id":1569,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1568,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1570,"src":"1276:6:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":1567,"nodeType":"UserDefinedTypeName","pathNode":{"id":1566,"name":"IVault","nameLocations":["1276:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"1276:6:10"},"referencedDeclaration":651,"src":"1276:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1275:8:10"},"scope":1966,"src":"1236:48:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1571,"nodeType":"StructuredDocumentation","src":"1290:202:10","text":" @notice Returns the VaultAdmin contract address.\n @dev The VaultAdmin contract mostly implements permissioned functions.\n @return vaultAdmin The address of the Vault admin"},"functionSelector":"1ba0ae45","id":1576,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultAdmin","nameLocation":"1506:13:10","nodeType":"FunctionDefinition","parameters":{"id":1572,"nodeType":"ParameterList","parameters":[],"src":"1519:2:10"},"returnParameters":{"id":1575,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1574,"mutability":"mutable","name":"vaultAdmin","nameLocation":"1553:10:10","nodeType":"VariableDeclaration","scope":1576,"src":"1545:18:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1573,"name":"address","nodeType":"ElementaryTypeName","src":"1545:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1544:20:10"},"scope":1966,"src":"1497:68:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1577,"nodeType":"StructuredDocumentation","src":"1793:254:10","text":" @notice Returns whether the Vault is unlocked (i.e., executing an operation).\n @dev The Vault must be unlocked to perform state-changing liquidity operations.\n @return unlocked True if the Vault is unlocked, false otherwise"},"functionSelector":"8380edb7","id":1582,"implemented":false,"kind":"function","modifiers":[],"name":"isUnlocked","nameLocation":"2061:10:10","nodeType":"FunctionDefinition","parameters":{"id":1578,"nodeType":"ParameterList","parameters":[],"src":"2071:2:10"},"returnParameters":{"id":1581,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1580,"mutability":"mutable","name":"unlocked","nameLocation":"2102:8:10","nodeType":"VariableDeclaration","scope":1582,"src":"2097:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1579,"name":"bool","nodeType":"ElementaryTypeName","src":"2097:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2096:15:10"},"scope":1966,"src":"2052:60:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1583,"nodeType":"StructuredDocumentation","src":"2118:141:10","text":" @notice Returns the count of non-zero deltas.\n @return nonzeroDeltaCount The current value of `_nonzeroDeltaCount`"},"functionSelector":"db817187","id":1588,"implemented":false,"kind":"function","modifiers":[],"name":"getNonzeroDeltaCount","nameLocation":"2273:20:10","nodeType":"FunctionDefinition","parameters":{"id":1584,"nodeType":"ParameterList","parameters":[],"src":"2293:2:10"},"returnParameters":{"id":1587,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1586,"mutability":"mutable","name":"nonzeroDeltaCount","nameLocation":"2327:17:10","nodeType":"VariableDeclaration","scope":1588,"src":"2319:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1585,"name":"uint256","nodeType":"ElementaryTypeName","src":"2319:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2318:27:10"},"scope":1966,"src":"2264:82:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1589,"nodeType":"StructuredDocumentation","src":"2352:284:10","text":" @notice Retrieves the token delta for a specific token.\n @dev This function allows reading the value from the `_tokenDeltas` mapping.\n @param token The token for which the delta is being fetched\n @return tokenDelta The delta of the specified token"},"functionSelector":"9e825ff5","id":1597,"implemented":false,"kind":"function","modifiers":[],"name":"getTokenDelta","nameLocation":"2650:13:10","nodeType":"FunctionDefinition","parameters":{"id":1593,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1592,"mutability":"mutable","name":"token","nameLocation":"2671:5:10","nodeType":"VariableDeclaration","scope":1597,"src":"2664:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":1591,"nodeType":"UserDefinedTypeName","pathNode":{"id":1590,"name":"IERC20","nameLocations":["2664:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"2664:6:10"},"referencedDeclaration":6486,"src":"2664:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2663:14:10"},"returnParameters":{"id":1596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1595,"mutability":"mutable","name":"tokenDelta","nameLocation":"2708:10:10","nodeType":"VariableDeclaration","scope":1597,"src":"2701:17:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1594,"name":"int256","nodeType":"ElementaryTypeName","src":"2701:6:10","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"2700:19:10"},"scope":1966,"src":"2641:79:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1598,"nodeType":"StructuredDocumentation","src":"2726:230:10","text":" @notice Retrieves the reserve (i.e., total Vault balance) of a given token.\n @param token The token for which to retrieve the reserve\n @return reserveAmount The amount of reserves for the given token"},"functionSelector":"96787092","id":1606,"implemented":false,"kind":"function","modifiers":[],"name":"getReservesOf","nameLocation":"2970:13:10","nodeType":"FunctionDefinition","parameters":{"id":1602,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1601,"mutability":"mutable","name":"token","nameLocation":"2991:5:10","nodeType":"VariableDeclaration","scope":1606,"src":"2984:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":1600,"nodeType":"UserDefinedTypeName","pathNode":{"id":1599,"name":"IERC20","nameLocations":["2984:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"2984:6:10"},"referencedDeclaration":6486,"src":"2984:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2983:14:10"},"returnParameters":{"id":1605,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1604,"mutability":"mutable","name":"reserveAmount","nameLocation":"3029:13:10","nodeType":"VariableDeclaration","scope":1606,"src":"3021:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1603,"name":"uint256","nodeType":"ElementaryTypeName","src":"3021:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3020:23:10"},"scope":1966,"src":"2961:83:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1607,"nodeType":"StructuredDocumentation","src":"3050:944:10","text":" @notice This flag is used to detect and tax \"round-trip\" interactions (adding and removing liquidity in the\n same pool).\n @dev Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra\n layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional\n is the only standard way to exit a position without fees, and this flag is used to enable fees in that case.\n It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse\n than a simple swap for every pool type.\n @param pool Address of the pool to check\n @return liquidityAdded True if liquidity has been added to this pool in the current transaction\n Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session."},"functionSelector":"ace9b89b","id":1614,"implemented":false,"kind":"function","modifiers":[],"name":"getAddLiquidityCalledFlag","nameLocation":"4008:25:10","nodeType":"FunctionDefinition","parameters":{"id":1610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1609,"mutability":"mutable","name":"pool","nameLocation":"4042:4:10","nodeType":"VariableDeclaration","scope":1614,"src":"4034:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1608,"name":"address","nodeType":"ElementaryTypeName","src":"4034:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4033:14:10"},"returnParameters":{"id":1613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1612,"mutability":"mutable","name":"liquidityAdded","nameLocation":"4076:14:10","nodeType":"VariableDeclaration","scope":1614,"src":"4071:19:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1611,"name":"bool","nodeType":"ElementaryTypeName","src":"4071:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4070:21:10"},"scope":1966,"src":"3999:93:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1615,"nodeType":"StructuredDocumentation","src":"4323:1604:10","text":" @notice Registers a pool, associating it with its factory and the tokens it manages.\n @dev A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely\n by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an\n additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused\n pool will automatically unpause. Balancer timestamps are 32 bits.\n A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a\n multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to\n the Vault.\n If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the\n authorizer.\n @param pool The address of the pool being registered\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param swapFeePercentage The initial static swap fee percentage of the pool\n @param pauseWindowEndTime The timestamp after which it is no longer possible to pause the pool\n @param protocolFeeExempt If true, the pool's initial aggregate fees will be set to 0\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param poolHooksContract Contract that implements the hooks for the pool\n @param liquidityManagement Liquidity management flags with implemented methods"},"functionSelector":"eeec802f","id":1638,"implemented":false,"kind":"function","modifiers":[],"name":"registerPool","nameLocation":"5941:12:10","nodeType":"FunctionDefinition","parameters":{"id":1636,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1617,"mutability":"mutable","name":"pool","nameLocation":"5971:4:10","nodeType":"VariableDeclaration","scope":1638,"src":"5963:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1616,"name":"address","nodeType":"ElementaryTypeName","src":"5963:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1621,"mutability":"mutable","name":"tokenConfig","nameLocation":"6006:11:10","nodeType":"VariableDeclaration","scope":1638,"src":"5985:32:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2234_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":1619,"nodeType":"UserDefinedTypeName","pathNode":{"id":1618,"name":"TokenConfig","nameLocations":["5985:11:10"],"nodeType":"IdentifierPath","referencedDeclaration":2234,"src":"5985:11:10"},"referencedDeclaration":2234,"src":"5985:11:10","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2234_storage_ptr","typeString":"struct TokenConfig"}},"id":1620,"nodeType":"ArrayTypeName","src":"5985:13:10","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2234_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":1623,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"6035:17:10","nodeType":"VariableDeclaration","scope":1638,"src":"6027:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1622,"name":"uint256","nodeType":"ElementaryTypeName","src":"6027:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1625,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"6069:18:10","nodeType":"VariableDeclaration","scope":1638,"src":"6062:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1624,"name":"uint32","nodeType":"ElementaryTypeName","src":"6062:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1627,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"6102:17:10","nodeType":"VariableDeclaration","scope":1638,"src":"6097:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1626,"name":"bool","nodeType":"ElementaryTypeName","src":"6097:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1630,"mutability":"mutable","name":"roleAccounts","nameLocation":"6155:12:10","nodeType":"VariableDeclaration","scope":1638,"src":"6129:38:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_calldata_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":1629,"nodeType":"UserDefinedTypeName","pathNode":{"id":1628,"name":"PoolRoleAccounts","nameLocations":["6129:16:10"],"nodeType":"IdentifierPath","referencedDeclaration":2217,"src":"6129:16:10"},"referencedDeclaration":2217,"src":"6129:16:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":1632,"mutability":"mutable","name":"poolHooksContract","nameLocation":"6185:17:10","nodeType":"VariableDeclaration","scope":1638,"src":"6177:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1631,"name":"address","nodeType":"ElementaryTypeName","src":"6177:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1635,"mutability":"mutable","name":"liquidityManagement","nameLocation":"6241:19:10","nodeType":"VariableDeclaration","scope":1638,"src":"6212:48:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2120_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":1634,"nodeType":"UserDefinedTypeName","pathNode":{"id":1633,"name":"LiquidityManagement","nameLocations":["6212:19:10"],"nodeType":"IdentifierPath","referencedDeclaration":2120,"src":"6212:19:10"},"referencedDeclaration":2120,"src":"6212:19:10","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2120_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"5953:313:10"},"returnParameters":{"id":1637,"nodeType":"ParameterList","parameters":[],"src":"6275:0:10"},"scope":1966,"src":"5932:344:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1639,"nodeType":"StructuredDocumentation","src":"6282:185:10","text":" @notice Checks whether a pool is registered.\n @param pool Address of the pool to check\n @return registered True if the pool is registered, false otherwise"},"functionSelector":"c673bdaf","id":1646,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"6481:16:10","nodeType":"FunctionDefinition","parameters":{"id":1642,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1641,"mutability":"mutable","name":"pool","nameLocation":"6506:4:10","nodeType":"VariableDeclaration","scope":1646,"src":"6498:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1640,"name":"address","nodeType":"ElementaryTypeName","src":"6498:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6497:14:10"},"returnParameters":{"id":1645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1644,"mutability":"mutable","name":"registered","nameLocation":"6540:10:10","nodeType":"VariableDeclaration","scope":1646,"src":"6535:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1643,"name":"bool","nodeType":"ElementaryTypeName","src":"6535:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6534:17:10"},"scope":1966,"src":"6472:80:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1647,"nodeType":"StructuredDocumentation","src":"6558:589:10","text":" @notice Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\n @param pool Address of the pool to initialize\n @param to Address that will receive the output BPT\n @param tokens Tokens used to seed the pool (must match the registered tokens)\n @param exactAmountsIn Exact amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param userData Additional (optional) data required for adding initial liquidity\n @return bptAmountOut Output pool token amount"},"functionSelector":"ba8a2be0","id":1667,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"7161:10:10","nodeType":"FunctionDefinition","parameters":{"id":1663,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1649,"mutability":"mutable","name":"pool","nameLocation":"7189:4:10","nodeType":"VariableDeclaration","scope":1667,"src":"7181:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1648,"name":"address","nodeType":"ElementaryTypeName","src":"7181:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1651,"mutability":"mutable","name":"to","nameLocation":"7211:2:10","nodeType":"VariableDeclaration","scope":1667,"src":"7203:10:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1650,"name":"address","nodeType":"ElementaryTypeName","src":"7203:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1655,"mutability":"mutable","name":"tokens","nameLocation":"7239:6:10","nodeType":"VariableDeclaration","scope":1667,"src":"7223:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1653,"nodeType":"UserDefinedTypeName","pathNode":{"id":1652,"name":"IERC20","nameLocations":["7223:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"7223:6:10"},"referencedDeclaration":6486,"src":"7223:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":1654,"nodeType":"ArrayTypeName","src":"7223:8:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":1658,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"7272:14:10","nodeType":"VariableDeclaration","scope":1667,"src":"7255:31:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1656,"name":"uint256","nodeType":"ElementaryTypeName","src":"7255:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1657,"nodeType":"ArrayTypeName","src":"7255:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1660,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"7304:15:10","nodeType":"VariableDeclaration","scope":1667,"src":"7296:23:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1659,"name":"uint256","nodeType":"ElementaryTypeName","src":"7296:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1662,"mutability":"mutable","name":"userData","nameLocation":"7342:8:10","nodeType":"VariableDeclaration","scope":1667,"src":"7329:21:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1661,"name":"bytes","nodeType":"ElementaryTypeName","src":"7329:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7171:185:10"},"returnParameters":{"id":1666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1665,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7383:12:10","nodeType":"VariableDeclaration","scope":1667,"src":"7375:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1664,"name":"uint256","nodeType":"ElementaryTypeName","src":"7375:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7374:22:10"},"scope":1966,"src":"7152:245:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1668,"nodeType":"StructuredDocumentation","src":"7627:258:10","text":" @notice Checks whether a pool is initialized.\n @dev An initialized pool can be considered registered as well.\n @param pool Address of the pool to check\n @return initialized True if the pool is initialized, false otherwise"},"functionSelector":"532cec7c","id":1675,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolInitialized","nameLocation":"7899:17:10","nodeType":"FunctionDefinition","parameters":{"id":1671,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1670,"mutability":"mutable","name":"pool","nameLocation":"7925:4:10","nodeType":"VariableDeclaration","scope":1675,"src":"7917:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1669,"name":"address","nodeType":"ElementaryTypeName","src":"7917:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7916:14:10"},"returnParameters":{"id":1674,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1673,"mutability":"mutable","name":"initialized","nameLocation":"7959:11:10","nodeType":"VariableDeclaration","scope":1675,"src":"7954:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1672,"name":"bool","nodeType":"ElementaryTypeName","src":"7954:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7953:18:10"},"scope":1966,"src":"7890:82:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1676,"nodeType":"StructuredDocumentation","src":"7978:152:10","text":" @notice Gets the tokens registered to a pool.\n @param pool Address of the pool\n @return tokens List of tokens in the pool"},"functionSelector":"ca4f2803","id":1685,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokens","nameLocation":"8144:13:10","nodeType":"FunctionDefinition","parameters":{"id":1679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1678,"mutability":"mutable","name":"pool","nameLocation":"8166:4:10","nodeType":"VariableDeclaration","scope":1685,"src":"8158:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1677,"name":"address","nodeType":"ElementaryTypeName","src":"8158:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8157:14:10"},"returnParameters":{"id":1684,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1683,"mutability":"mutable","name":"tokens","nameLocation":"8211:6:10","nodeType":"VariableDeclaration","scope":1685,"src":"8195:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1681,"nodeType":"UserDefinedTypeName","pathNode":{"id":1680,"name":"IERC20","nameLocations":["8195:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"8195:6:10"},"referencedDeclaration":6486,"src":"8195:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":1682,"nodeType":"ArrayTypeName","src":"8195:8:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"8194:24:10"},"scope":1966,"src":"8135:84:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1686,"nodeType":"StructuredDocumentation","src":"8225:512:10","text":" @notice Gets pool token rates.\n @dev This function performs external calls if tokens are yield-bearing. All returned arrays are in token\n registration order.\n @param pool Address of the pool\n @return decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. FP(1) for 18-decimal tokens\n @return tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens"},"functionSelector":"7e361bde","id":1697,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenRates","nameLocation":"8751:17:10","nodeType":"FunctionDefinition","parameters":{"id":1689,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1688,"mutability":"mutable","name":"pool","nameLocation":"8786:4:10","nodeType":"VariableDeclaration","scope":1697,"src":"8778:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1687,"name":"address","nodeType":"ElementaryTypeName","src":"8778:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8768:28:10"},"returnParameters":{"id":1696,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1692,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"8837:21:10","nodeType":"VariableDeclaration","scope":1697,"src":"8820:38:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1690,"name":"uint256","nodeType":"ElementaryTypeName","src":"8820:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1691,"nodeType":"ArrayTypeName","src":"8820:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1695,"mutability":"mutable","name":"tokenRates","nameLocation":"8877:10:10","nodeType":"VariableDeclaration","scope":1697,"src":"8860:27:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1693,"name":"uint256","nodeType":"ElementaryTypeName","src":"8860:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1694,"nodeType":"ArrayTypeName","src":"8860:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8819:69:10"},"scope":1966,"src":"8742:147:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1698,"nodeType":"StructuredDocumentation","src":"8895:287:10","text":" @notice Returns comprehensive pool data for the given pool.\n @dev This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\n @param pool The address of the pool\n @return poolData The `PoolData` result"},"functionSelector":"13d21cdf","id":1706,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolData","nameLocation":"9196:11:10","nodeType":"FunctionDefinition","parameters":{"id":1701,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1700,"mutability":"mutable","name":"pool","nameLocation":"9216:4:10","nodeType":"VariableDeclaration","scope":1706,"src":"9208:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1699,"name":"address","nodeType":"ElementaryTypeName","src":"9208:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9207:14:10"},"returnParameters":{"id":1705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1704,"mutability":"mutable","name":"poolData","nameLocation":"9261:8:10","nodeType":"VariableDeclaration","scope":1706,"src":"9245:24:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2269_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":1703,"nodeType":"UserDefinedTypeName","pathNode":{"id":1702,"name":"PoolData","nameLocations":["9245:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":2269,"src":"9245:8:10"},"referencedDeclaration":2269,"src":"9245:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2269_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"9244:26:10"},"scope":1966,"src":"9187:84:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1707,"nodeType":"StructuredDocumentation","src":"9277:531:10","text":" @notice Gets the raw data for a pool: tokens, raw balances, scaling factors.\n @param pool Address of the pool\n @return tokens The pool tokens, sorted in registration order\n @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order"},"functionSelector":"67e0e076","id":1726,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenInfo","nameLocation":"9822:16:10","nodeType":"FunctionDefinition","parameters":{"id":1710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1709,"mutability":"mutable","name":"pool","nameLocation":"9856:4:10","nodeType":"VariableDeclaration","scope":1726,"src":"9848:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1708,"name":"address","nodeType":"ElementaryTypeName","src":"9848:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9838:28:10"},"returnParameters":{"id":1725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1714,"mutability":"mutable","name":"tokens","nameLocation":"9943:6:10","nodeType":"VariableDeclaration","scope":1726,"src":"9927:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1712,"nodeType":"UserDefinedTypeName","pathNode":{"id":1711,"name":"IERC20","nameLocations":["9927:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"9927:6:10"},"referencedDeclaration":6486,"src":"9927:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":1713,"nodeType":"ArrayTypeName","src":"9927:8:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":1718,"mutability":"mutable","name":"tokenInfo","nameLocation":"9982:9:10","nodeType":"VariableDeclaration","scope":1726,"src":"9963:28:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2244_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":1716,"nodeType":"UserDefinedTypeName","pathNode":{"id":1715,"name":"TokenInfo","nameLocations":["9963:9:10"],"nodeType":"IdentifierPath","referencedDeclaration":2244,"src":"9963:9:10"},"referencedDeclaration":2244,"src":"9963:9:10","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2244_storage_ptr","typeString":"struct TokenInfo"}},"id":1717,"nodeType":"ArrayTypeName","src":"9963:11:10","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2244_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":1721,"mutability":"mutable","name":"balancesRaw","nameLocation":"10022:11:10","nodeType":"VariableDeclaration","scope":1726,"src":"10005:28:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1719,"name":"uint256","nodeType":"ElementaryTypeName","src":"10005:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1720,"nodeType":"ArrayTypeName","src":"10005:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1724,"mutability":"mutable","name":"lastBalancesLiveScaled18","nameLocation":"10064:24:10","nodeType":"VariableDeclaration","scope":1726,"src":"10047:41:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1722,"name":"uint256","nodeType":"ElementaryTypeName","src":"10047:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1723,"nodeType":"ArrayTypeName","src":"10047:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9913:185:10"},"scope":1966,"src":"9813:286:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1727,"nodeType":"StructuredDocumentation","src":"10105:312:10","text":" @notice Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in\n registration order.\n @param pool Address of the pool\n @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates"},"functionSelector":"535cfd8a","id":1735,"implemented":false,"kind":"function","modifiers":[],"name":"getCurrentLiveBalances","nameLocation":"10431:22:10","nodeType":"FunctionDefinition","parameters":{"id":1730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1729,"mutability":"mutable","name":"pool","nameLocation":"10462:4:10","nodeType":"VariableDeclaration","scope":1735,"src":"10454:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1728,"name":"address","nodeType":"ElementaryTypeName","src":"10454:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10453:14:10"},"returnParameters":{"id":1734,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1733,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"10508:20:10","nodeType":"VariableDeclaration","scope":1735,"src":"10491:37:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1731,"name":"uint256","nodeType":"ElementaryTypeName","src":"10491:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1732,"nodeType":"ArrayTypeName","src":"10491:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10490:39:10"},"scope":1966,"src":"10422:108:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1736,"nodeType":"StructuredDocumentation","src":"10536:301:10","text":" @notice Gets the configuration parameters of a pool.\n @dev The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\n @param pool Address of the pool\n @return poolConfig The pool configuration as a `PoolConfig` struct"},"functionSelector":"f29486a1","id":1744,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolConfig","nameLocation":"10851:13:10","nodeType":"FunctionDefinition","parameters":{"id":1739,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1738,"mutability":"mutable","name":"pool","nameLocation":"10873:4:10","nodeType":"VariableDeclaration","scope":1744,"src":"10865:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1737,"name":"address","nodeType":"ElementaryTypeName","src":"10865:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10864:14:10"},"returnParameters":{"id":1743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1742,"mutability":"mutable","name":"poolConfig","nameLocation":"10920:10:10","nodeType":"VariableDeclaration","scope":1744,"src":"10902:28:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$2145_memory_ptr","typeString":"struct PoolConfig"},"typeName":{"id":1741,"nodeType":"UserDefinedTypeName","pathNode":{"id":1740,"name":"PoolConfig","nameLocations":["10902:10:10"],"nodeType":"IdentifierPath","referencedDeclaration":2145,"src":"10902:10:10"},"referencedDeclaration":2145,"src":"10902:10:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$2145_storage_ptr","typeString":"struct PoolConfig"}},"visibility":"internal"}],"src":"10901:30:10"},"scope":1966,"src":"10842:90:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1745,"nodeType":"StructuredDocumentation","src":"10938:283:10","text":" @notice Gets the hooks configuration parameters of a pool.\n @dev The `HooksConfig` contains flags indicating which pool hooks are implemented.\n @param pool Address of the pool\n @return hooksConfig The hooks configuration as a `HooksConfig` struct"},"functionSelector":"ce8630d4","id":1753,"implemented":false,"kind":"function","modifiers":[],"name":"getHooksConfig","nameLocation":"11235:14:10","nodeType":"FunctionDefinition","parameters":{"id":1748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1747,"mutability":"mutable","name":"pool","nameLocation":"11258:4:10","nodeType":"VariableDeclaration","scope":1753,"src":"11250:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1746,"name":"address","nodeType":"ElementaryTypeName","src":"11250:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11249:14:10"},"returnParameters":{"id":1752,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1751,"mutability":"mutable","name":"hooksConfig","nameLocation":"11306:11:10","nodeType":"VariableDeclaration","scope":1753,"src":"11287:30:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2191_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":1750,"nodeType":"UserDefinedTypeName","pathNode":{"id":1749,"name":"HooksConfig","nameLocations":["11287:11:10"],"nodeType":"IdentifierPath","referencedDeclaration":2191,"src":"11287:11:10"},"referencedDeclaration":2191,"src":"11287:11:10","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2191_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"}],"src":"11286:32:10"},"scope":1966,"src":"11226:93:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1754,"nodeType":"StructuredDocumentation","src":"11325:160:10","text":" @notice The current rate of a pool token (BPT) = invariant / totalSupply.\n @param pool Address of the pool\n @return rate BPT rate"},"functionSelector":"4f037ee7","id":1761,"implemented":false,"kind":"function","modifiers":[],"name":"getBptRate","nameLocation":"11499:10:10","nodeType":"FunctionDefinition","parameters":{"id":1757,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1756,"mutability":"mutable","name":"pool","nameLocation":"11518:4:10","nodeType":"VariableDeclaration","scope":1761,"src":"11510:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1755,"name":"address","nodeType":"ElementaryTypeName","src":"11510:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11509:14:10"},"returnParameters":{"id":1760,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1759,"mutability":"mutable","name":"rate","nameLocation":"11555:4:10","nodeType":"VariableDeclaration","scope":1761,"src":"11547:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1758,"name":"uint256","nodeType":"ElementaryTypeName","src":"11547:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11546:14:10"},"scope":1966,"src":"11490:71:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1762,"nodeType":"StructuredDocumentation","src":"11792:168:10","text":" @notice Gets the total supply of a given ERC20 token.\n @param token The token address\n @return tokenTotalSupply Total supply of the token"},"functionSelector":"e4dc2aa4","id":1769,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"11974:11:10","nodeType":"FunctionDefinition","parameters":{"id":1765,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1764,"mutability":"mutable","name":"token","nameLocation":"11994:5:10","nodeType":"VariableDeclaration","scope":1769,"src":"11986:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1763,"name":"address","nodeType":"ElementaryTypeName","src":"11986:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11985:15:10"},"returnParameters":{"id":1768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1767,"mutability":"mutable","name":"tokenTotalSupply","nameLocation":"12032:16:10","nodeType":"VariableDeclaration","scope":1769,"src":"12024:24:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1766,"name":"uint256","nodeType":"ElementaryTypeName","src":"12024:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12023:26:10"},"scope":1966,"src":"11965:85:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1770,"nodeType":"StructuredDocumentation","src":"12056:225:10","text":" @notice Gets the balance of an account for a given ERC20 token.\n @param token Address of the token\n @param account Address of the account\n @return tokenBalance Token balance of the account"},"functionSelector":"f7888aec","id":1779,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"12295:9:10","nodeType":"FunctionDefinition","parameters":{"id":1775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1772,"mutability":"mutable","name":"token","nameLocation":"12313:5:10","nodeType":"VariableDeclaration","scope":1779,"src":"12305:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1771,"name":"address","nodeType":"ElementaryTypeName","src":"12305:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1774,"mutability":"mutable","name":"account","nameLocation":"12328:7:10","nodeType":"VariableDeclaration","scope":1779,"src":"12320:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1773,"name":"address","nodeType":"ElementaryTypeName","src":"12320:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12304:32:10"},"returnParameters":{"id":1778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1777,"mutability":"mutable","name":"tokenBalance","nameLocation":"12368:12:10","nodeType":"VariableDeclaration","scope":1779,"src":"12360:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1776,"name":"uint256","nodeType":"ElementaryTypeName","src":"12360:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12359:22:10"},"scope":1966,"src":"12286:96:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1780,"nodeType":"StructuredDocumentation","src":"12388:299:10","text":" @notice Gets the allowance of a spender for a given ERC20 token and owner.\n @param token Address of the token\n @param owner Address of the owner\n @param spender Address of the spender\n @return tokenAllowance Amount of tokens the spender is allowed to spend"},"functionSelector":"927da105","id":1791,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"12701:9:10","nodeType":"FunctionDefinition","parameters":{"id":1787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1782,"mutability":"mutable","name":"token","nameLocation":"12719:5:10","nodeType":"VariableDeclaration","scope":1791,"src":"12711:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1781,"name":"address","nodeType":"ElementaryTypeName","src":"12711:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1784,"mutability":"mutable","name":"owner","nameLocation":"12734:5:10","nodeType":"VariableDeclaration","scope":1791,"src":"12726:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1783,"name":"address","nodeType":"ElementaryTypeName","src":"12726:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1786,"mutability":"mutable","name":"spender","nameLocation":"12749:7:10","nodeType":"VariableDeclaration","scope":1791,"src":"12741:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1785,"name":"address","nodeType":"ElementaryTypeName","src":"12741:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12710:47:10"},"returnParameters":{"id":1790,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1789,"mutability":"mutable","name":"tokenAllowance","nameLocation":"12789:14:10","nodeType":"VariableDeclaration","scope":1791,"src":"12781:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1788,"name":"uint256","nodeType":"ElementaryTypeName","src":"12781:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12780:24:10"},"scope":1966,"src":"12692:113:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1792,"nodeType":"StructuredDocumentation","src":"12811:475:10","text":" @notice Approves a spender to spend pool tokens on behalf of sender.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param owner Address of the owner\n @param spender Address of the spender\n @param amount Amount of tokens to approve\n @return success True if successful, false otherwise"},"functionSelector":"e1f21c67","id":1803,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"13300:7:10","nodeType":"FunctionDefinition","parameters":{"id":1799,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1794,"mutability":"mutable","name":"owner","nameLocation":"13316:5:10","nodeType":"VariableDeclaration","scope":1803,"src":"13308:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1793,"name":"address","nodeType":"ElementaryTypeName","src":"13308:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1796,"mutability":"mutable","name":"spender","nameLocation":"13331:7:10","nodeType":"VariableDeclaration","scope":1803,"src":"13323:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1795,"name":"address","nodeType":"ElementaryTypeName","src":"13323:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1798,"mutability":"mutable","name":"amount","nameLocation":"13348:6:10","nodeType":"VariableDeclaration","scope":1803,"src":"13340:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1797,"name":"uint256","nodeType":"ElementaryTypeName","src":"13340:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13307:48:10"},"returnParameters":{"id":1802,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1801,"mutability":"mutable","name":"success","nameLocation":"13379:7:10","nodeType":"VariableDeclaration","scope":1803,"src":"13374:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1800,"name":"bool","nodeType":"ElementaryTypeName","src":"13374:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13373:14:10"},"scope":1966,"src":"13291:97:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1804,"nodeType":"StructuredDocumentation","src":"13615:251:10","text":" @notice Indicates whether a pool is paused.\n @dev If a pool is paused, all non-Recovery Mode state-changing operations will revert.\n @param pool The pool to be checked\n @return poolPaused True if the pool is paused"},"functionSelector":"6c9bc732","id":1811,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolPaused","nameLocation":"13880:12:10","nodeType":"FunctionDefinition","parameters":{"id":1807,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1806,"mutability":"mutable","name":"pool","nameLocation":"13901:4:10","nodeType":"VariableDeclaration","scope":1811,"src":"13893:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1805,"name":"address","nodeType":"ElementaryTypeName","src":"13893:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13892:14:10"},"returnParameters":{"id":1810,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1809,"mutability":"mutable","name":"poolPaused","nameLocation":"13935:10:10","nodeType":"VariableDeclaration","scope":1811,"src":"13930:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1808,"name":"bool","nodeType":"ElementaryTypeName","src":"13930:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13929:17:10"},"scope":1966,"src":"13871:76:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1812,"nodeType":"StructuredDocumentation","src":"13953:648:10","text":" @notice Returns the paused status, and end times of the Pool's pause window and buffer period.\n @dev Note that even when set to a paused state, the pool will automatically unpause at the end of\n the buffer period. Balancer timestamps are 32 bits.\n @param pool The pool whose data is requested\n @return poolPaused True if the Pool is paused\n @return poolPauseWindowEndTime The timestamp of the end of the Pool's pause window\n @return poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)\n @return pauseManager The pause manager, or the zero address"},"functionSelector":"15e32046","id":1825,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolPausedState","nameLocation":"14615:18:10","nodeType":"FunctionDefinition","parameters":{"id":1815,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1814,"mutability":"mutable","name":"pool","nameLocation":"14651:4:10","nodeType":"VariableDeclaration","scope":1825,"src":"14643:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1813,"name":"address","nodeType":"ElementaryTypeName","src":"14643:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14633:28:10"},"returnParameters":{"id":1824,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1817,"mutability":"mutable","name":"poolPaused","nameLocation":"14714:10:10","nodeType":"VariableDeclaration","scope":1825,"src":"14709:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1816,"name":"bool","nodeType":"ElementaryTypeName","src":"14709:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1819,"mutability":"mutable","name":"poolPauseWindowEndTime","nameLocation":"14733:22:10","nodeType":"VariableDeclaration","scope":1825,"src":"14726:29:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1818,"name":"uint32","nodeType":"ElementaryTypeName","src":"14726:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1821,"mutability":"mutable","name":"poolBufferPeriodEndTime","nameLocation":"14764:23:10","nodeType":"VariableDeclaration","scope":1825,"src":"14757:30:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1820,"name":"uint32","nodeType":"ElementaryTypeName","src":"14757:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1823,"mutability":"mutable","name":"pauseManager","nameLocation":"14797:12:10","nodeType":"VariableDeclaration","scope":1825,"src":"14789:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1822,"name":"address","nodeType":"ElementaryTypeName","src":"14789:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14708:102:10"},"scope":1966,"src":"14606:205:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1826,"nodeType":"StructuredDocumentation","src":"15039:332:10","text":" @notice Checks if the wrapped token has an initialized buffer in the Vault.\n @dev An initialized buffer should have an asset registered in the Vault.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return isBufferInitialized True if the ERC4626 buffer is initialized"},"functionSelector":"6844846b","id":1834,"implemented":false,"kind":"function","modifiers":[],"name":"isERC4626BufferInitialized","nameLocation":"15385:26:10","nodeType":"FunctionDefinition","parameters":{"id":1830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1829,"mutability":"mutable","name":"wrappedToken","nameLocation":"15421:12:10","nodeType":"VariableDeclaration","scope":1834,"src":"15412:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1828,"nodeType":"UserDefinedTypeName","pathNode":{"id":1827,"name":"IERC4626","nameLocations":["15412:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"15412:8:10"},"referencedDeclaration":6408,"src":"15412:8:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"15411:23:10"},"returnParameters":{"id":1833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1832,"mutability":"mutable","name":"isBufferInitialized","nameLocation":"15463:19:10","nodeType":"VariableDeclaration","scope":1834,"src":"15458:24:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1831,"name":"bool","nodeType":"ElementaryTypeName","src":"15458:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15457:26:10"},"scope":1966,"src":"15376:108:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1835,"nodeType":"StructuredDocumentation","src":"15490:477:10","text":" @notice Gets the registered asset for a given buffer.\n @dev To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers\n should never call `wrapper.asset()` directly, at least without checking it against the asset registered with\n the Vault on initialization.\n @param wrappedToken The wrapped token specifying the buffer\n @return asset The underlying asset of the wrapped token"},"functionSelector":"4afbaf5a","id":1843,"implemented":false,"kind":"function","modifiers":[],"name":"getERC4626BufferAsset","nameLocation":"15981:21:10","nodeType":"FunctionDefinition","parameters":{"id":1839,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1838,"mutability":"mutable","name":"wrappedToken","nameLocation":"16012:12:10","nodeType":"VariableDeclaration","scope":1843,"src":"16003:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1837,"nodeType":"UserDefinedTypeName","pathNode":{"id":1836,"name":"IERC4626","nameLocations":["16003:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"16003:8:10"},"referencedDeclaration":6408,"src":"16003:8:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16002:23:10"},"returnParameters":{"id":1842,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1841,"mutability":"mutable","name":"asset","nameLocation":"16057:5:10","nodeType":"VariableDeclaration","scope":1843,"src":"16049:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1840,"name":"address","nodeType":"ElementaryTypeName","src":"16049:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16048:15:10"},"scope":1966,"src":"15972:92:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1844,"nodeType":"StructuredDocumentation","src":"16288:379:10","text":" @notice Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\n @param pool The address of the pool for which aggregate fees have been collected\n @param token The address of the token in which fees have been accumulated\n @return swapFeeAmount The total amount of fees accumulated in the specified token"},"functionSelector":"85e0b999","id":1854,"implemented":false,"kind":"function","modifiers":[],"name":"getAggregateSwapFeeAmount","nameLocation":"16681:25:10","nodeType":"FunctionDefinition","parameters":{"id":1850,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1846,"mutability":"mutable","name":"pool","nameLocation":"16715:4:10","nodeType":"VariableDeclaration","scope":1854,"src":"16707:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1845,"name":"address","nodeType":"ElementaryTypeName","src":"16707:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1849,"mutability":"mutable","name":"token","nameLocation":"16728:5:10","nodeType":"VariableDeclaration","scope":1854,"src":"16721:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":1848,"nodeType":"UserDefinedTypeName","pathNode":{"id":1847,"name":"IERC20","nameLocations":["16721:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"16721:6:10"},"referencedDeclaration":6486,"src":"16721:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"16706:28:10"},"returnParameters":{"id":1853,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1852,"mutability":"mutable","name":"swapFeeAmount","nameLocation":"16766:13:10","nodeType":"VariableDeclaration","scope":1854,"src":"16758:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1851,"name":"uint256","nodeType":"ElementaryTypeName","src":"16758:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16757:23:10"},"scope":1966,"src":"16672:109:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1855,"nodeType":"StructuredDocumentation","src":"16787:381:10","text":" @notice Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\n @param pool The address of the pool for which aggregate fees have been collected\n @param token The address of the token in which fees have been accumulated\n @return yieldFeeAmount The total amount of fees accumulated in the specified token"},"functionSelector":"00fdfa13","id":1865,"implemented":false,"kind":"function","modifiers":[],"name":"getAggregateYieldFeeAmount","nameLocation":"17182:26:10","nodeType":"FunctionDefinition","parameters":{"id":1861,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1857,"mutability":"mutable","name":"pool","nameLocation":"17217:4:10","nodeType":"VariableDeclaration","scope":1865,"src":"17209:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1856,"name":"address","nodeType":"ElementaryTypeName","src":"17209:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1860,"mutability":"mutable","name":"token","nameLocation":"17230:5:10","nodeType":"VariableDeclaration","scope":1865,"src":"17223:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":1859,"nodeType":"UserDefinedTypeName","pathNode":{"id":1858,"name":"IERC20","nameLocations":["17223:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"17223:6:10"},"referencedDeclaration":6486,"src":"17223:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"17208:28:10"},"returnParameters":{"id":1864,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1863,"mutability":"mutable","name":"yieldFeeAmount","nameLocation":"17268:14:10","nodeType":"VariableDeclaration","scope":1865,"src":"17260:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1862,"name":"uint256","nodeType":"ElementaryTypeName","src":"17260:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17259:24:10"},"scope":1966,"src":"17173:111:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1866,"nodeType":"StructuredDocumentation","src":"17290:271:10","text":" @notice Fetches the static swap fee percentage for a given pool.\n @param pool The address of the pool whose static swap fee percentage is being queried\n @return swapFeePercentage The current static swap fee percentage for the specified pool"},"functionSelector":"b45090f9","id":1873,"implemented":false,"kind":"function","modifiers":[],"name":"getStaticSwapFeePercentage","nameLocation":"17575:26:10","nodeType":"FunctionDefinition","parameters":{"id":1869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1868,"mutability":"mutable","name":"pool","nameLocation":"17610:4:10","nodeType":"VariableDeclaration","scope":1873,"src":"17602:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1867,"name":"address","nodeType":"ElementaryTypeName","src":"17602:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17601:14:10"},"returnParameters":{"id":1872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1871,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"17647:17:10","nodeType":"VariableDeclaration","scope":1873,"src":"17639:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1870,"name":"uint256","nodeType":"ElementaryTypeName","src":"17639:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17638:27:10"},"scope":1966,"src":"17566:100:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1874,"nodeType":"StructuredDocumentation","src":"17672:286:10","text":" @notice Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\n @param pool The address of the pool whose roles are being queried\n @return roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)"},"functionSelector":"e9ddeb26","id":1882,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolRoleAccounts","nameLocation":"17972:19:10","nodeType":"FunctionDefinition","parameters":{"id":1877,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1876,"mutability":"mutable","name":"pool","nameLocation":"18000:4:10","nodeType":"VariableDeclaration","scope":1882,"src":"17992:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1875,"name":"address","nodeType":"ElementaryTypeName","src":"17992:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17991:14:10"},"returnParameters":{"id":1881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1880,"mutability":"mutable","name":"roleAccounts","nameLocation":"18053:12:10","nodeType":"VariableDeclaration","scope":1882,"src":"18029:36:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":1879,"nodeType":"UserDefinedTypeName","pathNode":{"id":1878,"name":"PoolRoleAccounts","nameLocations":["18029:16:10"],"nodeType":"IdentifierPath","referencedDeclaration":2217,"src":"18029:16:10"},"referencedDeclaration":2217,"src":"18029:16:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"src":"18028:38:10"},"scope":1966,"src":"17963:104:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1883,"nodeType":"StructuredDocumentation","src":"18073:363:10","text":" @notice Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\n @dev Reverts if the hook doesn't return the success flag set to `true`.\n @param pool The pool\n @param swapParams The swap parameters used to compute the fee\n @return dynamicSwapFeePercentage The dynamic swap fee percentage"},"functionSelector":"4d472bdd","id":1893,"implemented":false,"kind":"function","modifiers":[],"name":"computeDynamicSwapFeePercentage","nameLocation":"18450:31:10","nodeType":"FunctionDefinition","parameters":{"id":1889,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1885,"mutability":"mutable","name":"pool","nameLocation":"18499:4:10","nodeType":"VariableDeclaration","scope":1893,"src":"18491:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1884,"name":"address","nodeType":"ElementaryTypeName","src":"18491:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1888,"mutability":"mutable","name":"swapParams","nameLocation":"18535:10:10","nodeType":"VariableDeclaration","scope":1893,"src":"18513:32:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2312_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":1887,"nodeType":"UserDefinedTypeName","pathNode":{"id":1886,"name":"PoolSwapParams","nameLocations":["18513:14:10"],"nodeType":"IdentifierPath","referencedDeclaration":2312,"src":"18513:14:10"},"referencedDeclaration":2312,"src":"18513:14:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2312_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"src":"18481:70:10"},"returnParameters":{"id":1892,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1891,"mutability":"mutable","name":"dynamicSwapFeePercentage","nameLocation":"18583:24:10","nodeType":"VariableDeclaration","scope":1893,"src":"18575:32:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1890,"name":"uint256","nodeType":"ElementaryTypeName","src":"18575:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18574:34:10"},"scope":1966,"src":"18441:168:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1894,"nodeType":"StructuredDocumentation","src":"18615:145:10","text":" @notice Returns the Protocol Fee Controller address.\n @return protocolFeeController Address of the ProtocolFeeController"},"functionSelector":"85f2dbd4","id":1900,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"18774:24:10","nodeType":"FunctionDefinition","parameters":{"id":1895,"nodeType":"ParameterList","parameters":[],"src":"18798:2:10"},"returnParameters":{"id":1899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1898,"mutability":"mutable","name":"protocolFeeController","nameLocation":"18847:21:10","nodeType":"VariableDeclaration","scope":1900,"src":"18824:44:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"},"typeName":{"id":1897,"nodeType":"UserDefinedTypeName","pathNode":{"id":1896,"name":"IProtocolFeeController","nameLocations":["18824:22:10"],"nodeType":"IdentifierPath","referencedDeclaration":613,"src":"18824:22:10"},"referencedDeclaration":613,"src":"18824:22:10","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"18823:46:10"},"scope":1966,"src":"18765:105:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1901,"nodeType":"StructuredDocumentation","src":"19098:296:10","text":" @notice Checks whether a pool is in Recovery Mode.\n @dev Recovery Mode enables a safe proportional withdrawal path, with no external calls.\n @param pool Address of the pool to check\n @return inRecoveryMode True if the pool is in Recovery Mode, false otherwise"},"functionSelector":"be7d628a","id":1908,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolInRecoveryMode","nameLocation":"19408:20:10","nodeType":"FunctionDefinition","parameters":{"id":1904,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1903,"mutability":"mutable","name":"pool","nameLocation":"19437:4:10","nodeType":"VariableDeclaration","scope":1908,"src":"19429:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1902,"name":"address","nodeType":"ElementaryTypeName","src":"19429:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19428:14:10"},"returnParameters":{"id":1907,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1906,"mutability":"mutable","name":"inRecoveryMode","nameLocation":"19471:14:10","nodeType":"VariableDeclaration","scope":1908,"src":"19466:19:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1905,"name":"bool","nodeType":"ElementaryTypeName","src":"19466:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19465:21:10"},"scope":1966,"src":"19399:88:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1909,"nodeType":"StructuredDocumentation","src":"19493:679:10","text":" @notice Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out.\n The request is implemented by the Vault without any interaction with the pool, ensuring that\n it works the same for all pools, and cannot be disabled by a new pool type.\n @param pool Address of the pool\n @param from Address of user to burn pool tokens from\n @param exactBptAmountIn Input pool token amount\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @return amountsOut Actual calculated amounts of output tokens, sorted in token registration order"},"functionSelector":"a07d6040","id":1924,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityRecovery","nameLocation":"20186:23:10","nodeType":"FunctionDefinition","parameters":{"id":1919,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1911,"mutability":"mutable","name":"pool","nameLocation":"20227:4:10","nodeType":"VariableDeclaration","scope":1924,"src":"20219:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1910,"name":"address","nodeType":"ElementaryTypeName","src":"20219:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1913,"mutability":"mutable","name":"from","nameLocation":"20249:4:10","nodeType":"VariableDeclaration","scope":1924,"src":"20241:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1912,"name":"address","nodeType":"ElementaryTypeName","src":"20241:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1915,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"20271:16:10","nodeType":"VariableDeclaration","scope":1924,"src":"20263:24:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1914,"name":"uint256","nodeType":"ElementaryTypeName","src":"20263:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1918,"mutability":"mutable","name":"minAmountsOut","nameLocation":"20314:13:10","nodeType":"VariableDeclaration","scope":1924,"src":"20297:30:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1916,"name":"uint256","nodeType":"ElementaryTypeName","src":"20297:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1917,"nodeType":"ArrayTypeName","src":"20297:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"20209:124:10"},"returnParameters":{"id":1923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1922,"mutability":"mutable","name":"amountsOut","nameLocation":"20369:10:10","nodeType":"VariableDeclaration","scope":1924,"src":"20352:27:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1920,"name":"uint256","nodeType":"ElementaryTypeName","src":"20352:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1921,"nodeType":"ArrayTypeName","src":"20352:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"20351:29:10"},"scope":1966,"src":"20177:204:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1925,"nodeType":"StructuredDocumentation","src":"20602:699:10","text":" @notice Performs a callback on msg.sender with arguments provided in `data`.\n @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n anything else will revert.\n Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n Allows the external calling of a function via the Vault contract to\n access Vault's functions guarded by `onlyWhenUnlocked`.\n `transient` modifier ensuring balances changes within the Vault are settled.\n @param data Contains function signature and args to be passed to the msg.sender\n @return result Resulting data from the call"},"functionSelector":"edfa3568","id":1932,"implemented":false,"kind":"function","modifiers":[],"name":"quote","nameLocation":"21315:5:10","nodeType":"FunctionDefinition","parameters":{"id":1928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1927,"mutability":"mutable","name":"data","nameLocation":"21336:4:10","nodeType":"VariableDeclaration","scope":1932,"src":"21321:19:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1926,"name":"bytes","nodeType":"ElementaryTypeName","src":"21321:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21320:21:10"},"returnParameters":{"id":1931,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1930,"mutability":"mutable","name":"result","nameLocation":"21373:6:10","nodeType":"VariableDeclaration","scope":1932,"src":"21360:19:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1929,"name":"bytes","nodeType":"ElementaryTypeName","src":"21360:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21359:21:10"},"scope":1966,"src":"21306:75:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1933,"nodeType":"StructuredDocumentation","src":"21387:731:10","text":" @notice Performs a callback on msg.sender with arguments provided in `data`.\n @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n anything else will revert.\n Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n Allows the external calling of a function via the Vault contract to\n access Vault's functions guarded by `onlyWhenUnlocked`.\n `transient` modifier ensuring balances changes within the Vault are settled.\n This call always reverts, returning the result in the revert reason.\n @param data Contains function signature and args to be passed to the msg.sender"},"functionSelector":"757d64b3","id":1938,"implemented":false,"kind":"function","modifiers":[],"name":"quoteAndRevert","nameLocation":"22132:14:10","nodeType":"FunctionDefinition","parameters":{"id":1936,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1935,"mutability":"mutable","name":"data","nameLocation":"22162:4:10","nodeType":"VariableDeclaration","scope":1938,"src":"22147:19:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1934,"name":"bytes","nodeType":"ElementaryTypeName","src":"22147:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"22146:21:10"},"returnParameters":{"id":1937,"nodeType":"ParameterList","parameters":[],"src":"22176:0:10"},"scope":1966,"src":"22123:54:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1939,"nodeType":"StructuredDocumentation","src":"22183:239:10","text":" @notice Returns true if queries are disabled on the Vault.\n @dev If true, queries might either be disabled temporarily or permanently.\n @return queryDisabled True if query functionality is reversibly disabled"},"functionSelector":"b4aef0ab","id":1944,"implemented":false,"kind":"function","modifiers":[],"name":"isQueryDisabled","nameLocation":"22436:15:10","nodeType":"FunctionDefinition","parameters":{"id":1940,"nodeType":"ParameterList","parameters":[],"src":"22451:2:10"},"returnParameters":{"id":1943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1942,"mutability":"mutable","name":"queryDisabled","nameLocation":"22482:13:10","nodeType":"VariableDeclaration","scope":1944,"src":"22477:18:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1941,"name":"bool","nodeType":"ElementaryTypeName","src":"22477:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"22476:20:10"},"scope":1966,"src":"22427:70:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1945,"nodeType":"StructuredDocumentation","src":"22503:302:10","text":" @notice Returns true if queries are disabled permanently; false if they are enabled.\n @dev This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\n @return queryDisabledPermanently True if query functionality is permanently disabled"},"functionSelector":"13ef8a5d","id":1950,"implemented":false,"kind":"function","modifiers":[],"name":"isQueryDisabledPermanently","nameLocation":"22819:26:10","nodeType":"FunctionDefinition","parameters":{"id":1946,"nodeType":"ParameterList","parameters":[],"src":"22845:2:10"},"returnParameters":{"id":1949,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1948,"mutability":"mutable","name":"queryDisabledPermanently","nameLocation":"22876:24:10","nodeType":"VariableDeclaration","scope":1950,"src":"22871:29:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1947,"name":"bool","nodeType":"ElementaryTypeName","src":"22871:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"22870:31:10"},"scope":1966,"src":"22810:92:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1951,"nodeType":"StructuredDocumentation","src":"22908:162:10","text":" @notice Pools can use this event to emit event data from the Vault.\n @param eventKey Event key\n @param eventData Encoded event data"},"functionSelector":"c8088247","id":1958,"implemented":false,"kind":"function","modifiers":[],"name":"emitAuxiliaryEvent","nameLocation":"23084:18:10","nodeType":"FunctionDefinition","parameters":{"id":1956,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1953,"mutability":"mutable","name":"eventKey","nameLocation":"23111:8:10","nodeType":"VariableDeclaration","scope":1958,"src":"23103:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1952,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23103:7:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1955,"mutability":"mutable","name":"eventData","nameLocation":"23136:9:10","nodeType":"VariableDeclaration","scope":1958,"src":"23121:24:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1954,"name":"bytes","nodeType":"ElementaryTypeName","src":"23121:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"23102:44:10"},"returnParameters":{"id":1957,"nodeType":"ParameterList","parameters":[],"src":"23155:0:10"},"scope":1966,"src":"23075:81:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1959,"nodeType":"StructuredDocumentation","src":"23380:284:10","text":" @notice Returns the Authorizer address.\n @dev The authorizer holds the permissions granted by governance. It is set on Vault deployment,\n and can be changed through a permissioned call.\n @return authorizer Address of the authorizer contract"},"functionSelector":"aaabadc5","id":1965,"implemented":false,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"23678:13:10","nodeType":"FunctionDefinition","parameters":{"id":1960,"nodeType":"ParameterList","parameters":[],"src":"23691:2:10"},"returnParameters":{"id":1964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1963,"mutability":"mutable","name":"authorizer","nameLocation":"23729:10:10","nodeType":"VariableDeclaration","scope":1965,"src":"23717:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"},"typeName":{"id":1962,"nodeType":"UserDefinedTypeName","pathNode":{"id":1961,"name":"IAuthorizer","nameLocations":["23717:11:10"],"nodeType":"IdentifierPath","referencedDeclaration":73,"src":"23717:11:10"},"referencedDeclaration":73,"src":"23717:11:10","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"23716:24:10"},"scope":1966,"src":"23669:72:10","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1967,"src":"767:22976:10","usedErrors":[],"usedEvents":[]}],"src":"46:23698:10"},"id":10},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","exportedSymbols":{"AddLiquidityKind":[2347],"AddLiquidityParams":[2363],"AfterSwapParams":[2341],"BufferWrapOrUnwrapParams":[2402],"FEE_BITLENGTH":[2405],"FEE_SCALING_FACTOR":[2408],"HookFlags":[2167],"HooksConfig":[2191],"IERC20":[6486],"IERC4626":[6408],"IRateProvider":[57],"IVaultMain":[2102],"LiquidityManagement":[2120],"MAX_FEE_PERCENTAGE":[2411],"PoolConfig":[2145],"PoolConfigBits":[2122],"PoolData":[2269],"PoolRoleAccounts":[2217],"PoolSwapParams":[2312],"RemoveLiquidityKind":[2368],"RemoveLiquidityParams":[2384],"Rounding":[2272],"SwapKind":[2275],"SwapState":[2201],"TokenConfig":[2234],"TokenInfo":[2244],"TokenType":[2221],"VaultState":[2209],"VaultSwapParams":[2294],"WrappingDirection":[2387]},"id":2103,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1968,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:11"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1970,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2103,"sourceUnit":6487,"src":"72:72:11","symbolAliases":[{"foreign":{"id":1969,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6486,"src":"81:6:11","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":1971,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2103,"sourceUnit":2412,"src":"146:26:11","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultMain","contractDependencies":[],"contractKind":"interface","documentation":{"id":1972,"nodeType":"StructuredDocumentation","src":"174:232:11","text":" @notice Interface for functions defined on the main Vault contract.\n @dev These are generally \"critical path\" functions (swap, add/remove liquidity) that are in the main contract\n for technical or performance reasons."},"fullyImplemented":false,"id":2102,"linearizedBaseContracts":[2102],"name":"IVaultMain","nameLocation":"417:10:11","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1973,"nodeType":"StructuredDocumentation","src":"656:431:11","text":" @notice Creates a context for a sequence of operations (i.e., \"unlocks\" the Vault).\n @dev Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`,\n meaning all balances for the caller have to be settled at the end.\n @param data Contains function signature and args to be passed to the msg.sender\n @return result Resulting data from the call"},"functionSelector":"48c89491","id":1980,"implemented":false,"kind":"function","modifiers":[],"name":"unlock","nameLocation":"1101:6:11","nodeType":"FunctionDefinition","parameters":{"id":1976,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1975,"mutability":"mutable","name":"data","nameLocation":"1123:4:11","nodeType":"VariableDeclaration","scope":1980,"src":"1108:19:11","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1974,"name":"bytes","nodeType":"ElementaryTypeName","src":"1108:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1107:21:11"},"returnParameters":{"id":1979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1978,"mutability":"mutable","name":"result","nameLocation":"1160:6:11","nodeType":"VariableDeclaration","scope":1980,"src":"1147:19:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1977,"name":"bytes","nodeType":"ElementaryTypeName","src":"1147:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1146:21:11"},"scope":2102,"src":"1092:76:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1981,"nodeType":"StructuredDocumentation","src":"1174:1291:11","text":" @notice Settles deltas for a token; must be successful for the current lock to be released.\n @dev Protects the caller against leftover dust in the Vault for the token being settled. The caller\n should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any\n excess in the Vault balance.\n If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as\n credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail.\n If the given hint is lower than the difference in reserves, the hint is given as credit to the caller.\n In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would\n not affect settlement.\n The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve\n difference equals current balance of the token minus existing reserves of the token when the function is called.\n @param token Address of the token\n @param amountHint Amount paid as reported by the caller\n @return credit Credit received in return of the payment"},"functionSelector":"15afd409","id":1991,"implemented":false,"kind":"function","modifiers":[],"name":"settle","nameLocation":"2479:6:11","nodeType":"FunctionDefinition","parameters":{"id":1987,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1984,"mutability":"mutable","name":"token","nameLocation":"2493:5:11","nodeType":"VariableDeclaration","scope":1991,"src":"2486:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":1983,"nodeType":"UserDefinedTypeName","pathNode":{"id":1982,"name":"IERC20","nameLocations":["2486:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"2486:6:11"},"referencedDeclaration":6486,"src":"2486:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1986,"mutability":"mutable","name":"amountHint","nameLocation":"2508:10:11","nodeType":"VariableDeclaration","scope":1991,"src":"2500:18:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1985,"name":"uint256","nodeType":"ElementaryTypeName","src":"2500:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2485:34:11"},"returnParameters":{"id":1990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1989,"mutability":"mutable","name":"credit","nameLocation":"2546:6:11","nodeType":"VariableDeclaration","scope":1991,"src":"2538:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1988,"name":"uint256","nodeType":"ElementaryTypeName","src":"2538:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2537:16:11"},"scope":2102,"src":"2470:84:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1992,"nodeType":"StructuredDocumentation","src":"2560:315:11","text":" @notice Sends tokens to a recipient.\n @dev There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel\n debts.\n @param token Address of the token\n @param to Recipient address\n @param amount Amount of tokens to send"},"functionSelector":"ae639329","id":2002,"implemented":false,"kind":"function","modifiers":[],"name":"sendTo","nameLocation":"2889:6:11","nodeType":"FunctionDefinition","parameters":{"id":2000,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1995,"mutability":"mutable","name":"token","nameLocation":"2903:5:11","nodeType":"VariableDeclaration","scope":2002,"src":"2896:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":1994,"nodeType":"UserDefinedTypeName","pathNode":{"id":1993,"name":"IERC20","nameLocations":["2896:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"2896:6:11"},"referencedDeclaration":6486,"src":"2896:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1997,"mutability":"mutable","name":"to","nameLocation":"2918:2:11","nodeType":"VariableDeclaration","scope":2002,"src":"2910:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1996,"name":"address","nodeType":"ElementaryTypeName","src":"2910:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1999,"mutability":"mutable","name":"amount","nameLocation":"2930:6:11","nodeType":"VariableDeclaration","scope":2002,"src":"2922:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1998,"name":"uint256","nodeType":"ElementaryTypeName","src":"2922:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2895:42:11"},"returnParameters":{"id":2001,"nodeType":"ParameterList","parameters":[],"src":"2946:0:11"},"scope":2102,"src":"2880:67:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2003,"nodeType":"StructuredDocumentation","src":"3161:412:11","text":" @notice Swaps tokens based on provided parameters.\n @dev All parameters are given in raw token decimal encoding.\n @param vaultSwapParams Parameters for the swap (see above for struct definition)\n @return amountCalculatedRaw Calculated swap amount\n @return amountInRaw Amount of input tokens for the swap\n @return amountOutRaw Amount of output tokens from the swap"},"functionSelector":"2bfb780c","id":2015,"implemented":false,"kind":"function","modifiers":[],"name":"swap","nameLocation":"3587:4:11","nodeType":"FunctionDefinition","parameters":{"id":2007,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2006,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"3624:15:11","nodeType":"VariableDeclaration","scope":2015,"src":"3601:38:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2294_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":2005,"nodeType":"UserDefinedTypeName","pathNode":{"id":2004,"name":"VaultSwapParams","nameLocations":["3601:15:11"],"nodeType":"IdentifierPath","referencedDeclaration":2294,"src":"3601:15:11"},"referencedDeclaration":2294,"src":"3601:15:11","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2294_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"}],"src":"3591:54:11"},"returnParameters":{"id":2014,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2009,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"3672:19:11","nodeType":"VariableDeclaration","scope":2015,"src":"3664:27:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2008,"name":"uint256","nodeType":"ElementaryTypeName","src":"3664:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2011,"mutability":"mutable","name":"amountInRaw","nameLocation":"3701:11:11","nodeType":"VariableDeclaration","scope":2015,"src":"3693:19:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2010,"name":"uint256","nodeType":"ElementaryTypeName","src":"3693:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2013,"mutability":"mutable","name":"amountOutRaw","nameLocation":"3722:12:11","nodeType":"VariableDeclaration","scope":2015,"src":"3714:20:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2012,"name":"uint256","nodeType":"ElementaryTypeName","src":"3714:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3663:72:11"},"scope":2102,"src":"3578:158:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2016,"nodeType":"StructuredDocumentation","src":"3954:523:11","text":" @notice Adds liquidity to a pool.\n @dev Caution should be exercised when adding liquidity because the Vault has the capability\n to transfer tokens from any user, given that it holds all allowances.\n @param params Parameters for the add liquidity (see above for struct definition)\n @return amountsIn Actual amounts of input tokens\n @return bptAmountOut Output pool token amount\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"4af29ec4","id":2029,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidity","nameLocation":"4491:12:11","nodeType":"FunctionDefinition","parameters":{"id":2020,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2019,"mutability":"mutable","name":"params","nameLocation":"4539:6:11","nodeType":"VariableDeclaration","scope":2029,"src":"4513:32:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2363_memory_ptr","typeString":"struct AddLiquidityParams"},"typeName":{"id":2018,"nodeType":"UserDefinedTypeName","pathNode":{"id":2017,"name":"AddLiquidityParams","nameLocations":["4513:18:11"],"nodeType":"IdentifierPath","referencedDeclaration":2363,"src":"4513:18:11"},"referencedDeclaration":2363,"src":"4513:18:11","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2363_storage_ptr","typeString":"struct AddLiquidityParams"}},"visibility":"internal"}],"src":"4503:48:11"},"returnParameters":{"id":2028,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2023,"mutability":"mutable","name":"amountsIn","nameLocation":"4587:9:11","nodeType":"VariableDeclaration","scope":2029,"src":"4570:26:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2021,"name":"uint256","nodeType":"ElementaryTypeName","src":"4570:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2022,"nodeType":"ArrayTypeName","src":"4570:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2025,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4606:12:11","nodeType":"VariableDeclaration","scope":2029,"src":"4598:20:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2024,"name":"uint256","nodeType":"ElementaryTypeName","src":"4598:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2027,"mutability":"mutable","name":"returnData","nameLocation":"4633:10:11","nodeType":"VariableDeclaration","scope":2029,"src":"4620:23:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2026,"name":"bytes","nodeType":"ElementaryTypeName","src":"4620:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4569:75:11"},"scope":2102,"src":"4482:163:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2030,"nodeType":"StructuredDocumentation","src":"4864:644:11","text":" @notice Removes liquidity from a pool.\n @dev Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user.\n Untrusted routers require prior approval from the user. This is the only function allowed to call\n _queryModeBalanceIncrease (and only in a query context).\n @param params Parameters for the remove liquidity (see above for struct definition)\n @return bptAmountIn Actual amount of BPT burned\n @return amountsOut Actual amounts of output tokens\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"21457897","id":2043,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidity","nameLocation":"5522:15:11","nodeType":"FunctionDefinition","parameters":{"id":2034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2033,"mutability":"mutable","name":"params","nameLocation":"5576:6:11","nodeType":"VariableDeclaration","scope":2043,"src":"5547:35:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2384_memory_ptr","typeString":"struct RemoveLiquidityParams"},"typeName":{"id":2032,"nodeType":"UserDefinedTypeName","pathNode":{"id":2031,"name":"RemoveLiquidityParams","nameLocations":["5547:21:11"],"nodeType":"IdentifierPath","referencedDeclaration":2384,"src":"5547:21:11"},"referencedDeclaration":2384,"src":"5547:21:11","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2384_storage_ptr","typeString":"struct RemoveLiquidityParams"}},"visibility":"internal"}],"src":"5537:51:11"},"returnParameters":{"id":2042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2036,"mutability":"mutable","name":"bptAmountIn","nameLocation":"5615:11:11","nodeType":"VariableDeclaration","scope":2043,"src":"5607:19:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2035,"name":"uint256","nodeType":"ElementaryTypeName","src":"5607:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2039,"mutability":"mutable","name":"amountsOut","nameLocation":"5645:10:11","nodeType":"VariableDeclaration","scope":2043,"src":"5628:27:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2037,"name":"uint256","nodeType":"ElementaryTypeName","src":"5628:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2038,"nodeType":"ArrayTypeName","src":"5628:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2041,"mutability":"mutable","name":"returnData","nameLocation":"5670:10:11","nodeType":"VariableDeclaration","scope":2043,"src":"5657:23:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2040,"name":"bytes","nodeType":"ElementaryTypeName","src":"5657:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5606:75:11"},"scope":2102,"src":"5513:169:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2044,"nodeType":"StructuredDocumentation","src":"5912:385:11","text":" @notice Gets the index of a token in a given pool.\n @dev Reverts if the pool is not registered, or if the token does not belong to the pool.\n @param pool Address of the pool\n @param token Address of the token\n @return tokenCount Number of tokens in the pool\n @return index Index corresponding to the given token in the pool's token list"},"functionSelector":"c9c1661b","id":2056,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenCountAndIndexOfToken","nameLocation":"6311:32:11","nodeType":"FunctionDefinition","parameters":{"id":2050,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2046,"mutability":"mutable","name":"pool","nameLocation":"6361:4:11","nodeType":"VariableDeclaration","scope":2056,"src":"6353:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2045,"name":"address","nodeType":"ElementaryTypeName","src":"6353:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2049,"mutability":"mutable","name":"token","nameLocation":"6382:5:11","nodeType":"VariableDeclaration","scope":2056,"src":"6375:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":2048,"nodeType":"UserDefinedTypeName","pathNode":{"id":2047,"name":"IERC20","nameLocations":["6375:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"6375:6:11"},"referencedDeclaration":6486,"src":"6375:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"6343:50:11"},"returnParameters":{"id":2055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2052,"mutability":"mutable","name":"tokenCount","nameLocation":"6425:10:11","nodeType":"VariableDeclaration","scope":2056,"src":"6417:18:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2051,"name":"uint256","nodeType":"ElementaryTypeName","src":"6417:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2054,"mutability":"mutable","name":"index","nameLocation":"6445:5:11","nodeType":"VariableDeclaration","scope":2056,"src":"6437:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2053,"name":"uint256","nodeType":"ElementaryTypeName","src":"6437:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6416:35:11"},"scope":2102,"src":"6302:150:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2057,"nodeType":"StructuredDocumentation","src":"6683:460:11","text":" @notice Transfers pool token from owner to a recipient.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param owner Address of the owner\n @param to Address of the recipient\n @param amount Amount of tokens to transfer\n @return success True if successful, false otherwise"},"functionSelector":"beabacc8","id":2068,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"7157:8:11","nodeType":"FunctionDefinition","parameters":{"id":2064,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2059,"mutability":"mutable","name":"owner","nameLocation":"7174:5:11","nodeType":"VariableDeclaration","scope":2068,"src":"7166:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2058,"name":"address","nodeType":"ElementaryTypeName","src":"7166:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2061,"mutability":"mutable","name":"to","nameLocation":"7189:2:11","nodeType":"VariableDeclaration","scope":2068,"src":"7181:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2060,"name":"address","nodeType":"ElementaryTypeName","src":"7181:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2063,"mutability":"mutable","name":"amount","nameLocation":"7201:6:11","nodeType":"VariableDeclaration","scope":2068,"src":"7193:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2062,"name":"uint256","nodeType":"ElementaryTypeName","src":"7193:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7165:43:11"},"returnParameters":{"id":2067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2066,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2068,"src":"7227:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2065,"name":"bool","nodeType":"ElementaryTypeName","src":"7227:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7226:6:11"},"scope":2102,"src":"7148:85:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2069,"nodeType":"StructuredDocumentation","src":"7239:544:11","text":" @notice Transfers pool token from a sender to a recipient using an allowance.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param spender Address allowed to perform the transfer\n @param from Address of the sender\n @param to Address of the recipient\n @param amount Amount of tokens to transfer\n @return success True if successful, false otherwise"},"functionSelector":"15dacbea","id":2082,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"7797:12:11","nodeType":"FunctionDefinition","parameters":{"id":2078,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2071,"mutability":"mutable","name":"spender","nameLocation":"7818:7:11","nodeType":"VariableDeclaration","scope":2082,"src":"7810:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2070,"name":"address","nodeType":"ElementaryTypeName","src":"7810:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2073,"mutability":"mutable","name":"from","nameLocation":"7835:4:11","nodeType":"VariableDeclaration","scope":2082,"src":"7827:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2072,"name":"address","nodeType":"ElementaryTypeName","src":"7827:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2075,"mutability":"mutable","name":"to","nameLocation":"7849:2:11","nodeType":"VariableDeclaration","scope":2082,"src":"7841:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2074,"name":"address","nodeType":"ElementaryTypeName","src":"7841:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2077,"mutability":"mutable","name":"amount","nameLocation":"7861:6:11","nodeType":"VariableDeclaration","scope":2082,"src":"7853:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2076,"name":"uint256","nodeType":"ElementaryTypeName","src":"7853:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7809:59:11"},"returnParameters":{"id":2081,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2080,"mutability":"mutable","name":"success","nameLocation":"7892:7:11","nodeType":"VariableDeclaration","scope":2082,"src":"7887:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2079,"name":"bool","nodeType":"ElementaryTypeName","src":"7887:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7886:14:11"},"scope":2102,"src":"7788:113:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2083,"nodeType":"StructuredDocumentation","src":"8128:575:11","text":" @notice Wraps/unwraps tokens based on the parameters provided.\n @dev All parameters are given in raw token decimal encoding. It requires the buffer to be initialized,\n and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\n @param params Parameters for the wrap/unwrap operation (see struct definition)\n @return amountCalculatedRaw Calculated swap amount\n @return amountInRaw Amount of input tokens for the swap\n @return amountOutRaw Amount of output tokens from the swap"},"functionSelector":"43583be5","id":2095,"implemented":false,"kind":"function","modifiers":[],"name":"erc4626BufferWrapOrUnwrap","nameLocation":"8717:25:11","nodeType":"FunctionDefinition","parameters":{"id":2087,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2086,"mutability":"mutable","name":"params","nameLocation":"8784:6:11","nodeType":"VariableDeclaration","scope":2095,"src":"8752:38:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2402_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams"},"typeName":{"id":2085,"nodeType":"UserDefinedTypeName","pathNode":{"id":2084,"name":"BufferWrapOrUnwrapParams","nameLocations":["8752:24:11"],"nodeType":"IdentifierPath","referencedDeclaration":2402,"src":"8752:24:11"},"referencedDeclaration":2402,"src":"8752:24:11","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2402_storage_ptr","typeString":"struct BufferWrapOrUnwrapParams"}},"visibility":"internal"}],"src":"8742:54:11"},"returnParameters":{"id":2094,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2089,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"8823:19:11","nodeType":"VariableDeclaration","scope":2095,"src":"8815:27:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2088,"name":"uint256","nodeType":"ElementaryTypeName","src":"8815:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2091,"mutability":"mutable","name":"amountInRaw","nameLocation":"8852:11:11","nodeType":"VariableDeclaration","scope":2095,"src":"8844:19:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2090,"name":"uint256","nodeType":"ElementaryTypeName","src":"8844:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2093,"mutability":"mutable","name":"amountOutRaw","nameLocation":"8873:12:11","nodeType":"VariableDeclaration","scope":2095,"src":"8865:20:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2092,"name":"uint256","nodeType":"ElementaryTypeName","src":"8865:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8814:72:11"},"scope":2102,"src":"8708:179:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2096,"nodeType":"StructuredDocumentation","src":"9115:345:11","text":" @notice Returns the VaultExtension contract address.\n @dev Function is in the main Vault contract. The VaultExtension handles less critical or frequently used\n functions, since delegate calls through the Vault are more expensive than direct calls.\n @return vaultExtension Address of the VaultExtension"},"functionSelector":"b9a8effa","id":2101,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultExtension","nameLocation":"9474:17:11","nodeType":"FunctionDefinition","parameters":{"id":2097,"nodeType":"ParameterList","parameters":[],"src":"9491:2:11"},"returnParameters":{"id":2100,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2099,"mutability":"mutable","name":"vaultExtension","nameLocation":"9525:14:11","nodeType":"VariableDeclaration","scope":2101,"src":"9517:22:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2098,"name":"address","nodeType":"ElementaryTypeName","src":"9517:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9516:24:11"},"scope":2102,"src":"9465:76:11","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2103,"src":"407:9136:11","usedErrors":[],"usedEvents":[]}],"src":"46:9498:11"},"id":11},"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","exportedSymbols":{"AddLiquidityKind":[2347],"AddLiquidityParams":[2363],"AfterSwapParams":[2341],"BufferWrapOrUnwrapParams":[2402],"FEE_BITLENGTH":[2405],"FEE_SCALING_FACTOR":[2408],"HookFlags":[2167],"HooksConfig":[2191],"IERC20":[6486],"IERC4626":[6408],"IRateProvider":[57],"LiquidityManagement":[2120],"MAX_FEE_PERCENTAGE":[2411],"PoolConfig":[2145],"PoolConfigBits":[2122],"PoolData":[2269],"PoolRoleAccounts":[2217],"PoolSwapParams":[2312],"RemoveLiquidityKind":[2368],"RemoveLiquidityParams":[2384],"Rounding":[2272],"SwapKind":[2275],"SwapState":[2201],"TokenConfig":[2234],"TokenInfo":[2244],"TokenType":[2221],"VaultState":[2209],"VaultSwapParams":[2294],"WrappingDirection":[2387]},"id":2412,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2104,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:12"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2106,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2412,"sourceUnit":6487,"src":"72:72:12","symbolAliases":[{"foreign":{"id":2105,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6486,"src":"81:6:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":2108,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2412,"sourceUnit":6409,"src":"145:75:12","symbolAliases":[{"foreign":{"id":2107,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6408,"src":"154:8:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","file":"../solidity-utils/helpers/IRateProvider.sol","id":2110,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2412,"sourceUnit":58,"src":"222:76:12","symbolAliases":[{"foreign":{"id":2109,"name":"IRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":57,"src":"231:13:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"LiquidityManagement","documentation":{"id":2111,"nodeType":"StructuredDocumentation","src":"300:472:12","text":" @notice Represents a pool's liquidity management configuration.\n @param disableUnbalancedLiquidity If set, liquidity can only be added or removed proportionally\n @param enableAddLiquidityCustom If set, the pool has implemented `onAddLiquidityCustom`\n @param enableRemoveLiquidityCustom If set, the pool has implemented `onRemoveLiquidityCustom`\n @param enableDonation If set, the pool will not revert if liquidity is added with AddLiquidityKind.DONATION"},"id":2120,"members":[{"constant":false,"id":2113,"mutability":"mutable","name":"disableUnbalancedLiquidity","nameLocation":"811:26:12","nodeType":"VariableDeclaration","scope":2120,"src":"806:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2112,"name":"bool","nodeType":"ElementaryTypeName","src":"806:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2115,"mutability":"mutable","name":"enableAddLiquidityCustom","nameLocation":"848:24:12","nodeType":"VariableDeclaration","scope":2120,"src":"843:29:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2114,"name":"bool","nodeType":"ElementaryTypeName","src":"843:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2117,"mutability":"mutable","name":"enableRemoveLiquidityCustom","nameLocation":"883:27:12","nodeType":"VariableDeclaration","scope":2120,"src":"878:32:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2116,"name":"bool","nodeType":"ElementaryTypeName","src":"878:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2119,"mutability":"mutable","name":"enableDonation","nameLocation":"921:14:12","nodeType":"VariableDeclaration","scope":2120,"src":"916:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2118,"name":"bool","nodeType":"ElementaryTypeName","src":"916:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"LiquidityManagement","nameLocation":"780:19:12","nodeType":"StructDefinition","scope":2412,"src":"773:165:12","visibility":"public"},{"canonicalName":"PoolConfigBits","id":2122,"name":"PoolConfigBits","nameLocation":"1015:14:12","nodeType":"UserDefinedValueTypeDefinition","src":"1010:31:12","underlyingType":{"id":2121,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1033:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"canonicalName":"PoolConfig","documentation":{"id":2123,"nodeType":"StructuredDocumentation","src":"1043:1034:12","text":" @notice Represents a pool's configuration (hooks configuration are separated in another struct).\n @param liquidityManagement Flags related to adding/removing liquidity\n @param staticSwapFeePercentage The pool's native swap fee\n @param aggregateSwapFeePercentage The total swap fee charged, including protocol and pool creator components\n @param aggregateYieldFeePercentage The total swap fee charged, including protocol and pool creator components\n @param tokenDecimalDiffs Compressed storage of the token decimals of each pool token\n @param pauseWindowEndTime Timestamp after which the pool cannot be paused\n @param isPoolRegistered If true, the pool has been registered with the Vault\n @param isPoolInitialized If true, the pool has been initialized with liquidity, and is available for trading\n @param isPoolPaused If true, the pool has been paused (by governance or the pauseManager)\n @param isPoolInRecoveryMode If true, the pool has been placed in recovery mode, enabling recovery mode withdrawals"},"id":2145,"members":[{"constant":false,"id":2126,"mutability":"mutable","name":"liquidityManagement","nameLocation":"2122:19:12","nodeType":"VariableDeclaration","scope":2145,"src":"2102:39:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2120_storage_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":2125,"nodeType":"UserDefinedTypeName","pathNode":{"id":2124,"name":"LiquidityManagement","nameLocations":["2102:19:12"],"nodeType":"IdentifierPath","referencedDeclaration":2120,"src":"2102:19:12"},"referencedDeclaration":2120,"src":"2102:19:12","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2120_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"},{"constant":false,"id":2128,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"2155:23:12","nodeType":"VariableDeclaration","scope":2145,"src":"2147:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2127,"name":"uint256","nodeType":"ElementaryTypeName","src":"2147:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2130,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"2192:26:12","nodeType":"VariableDeclaration","scope":2145,"src":"2184:34:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2129,"name":"uint256","nodeType":"ElementaryTypeName","src":"2184:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2132,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"2232:27:12","nodeType":"VariableDeclaration","scope":2145,"src":"2224:35:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2131,"name":"uint256","nodeType":"ElementaryTypeName","src":"2224:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2134,"mutability":"mutable","name":"tokenDecimalDiffs","nameLocation":"2272:17:12","nodeType":"VariableDeclaration","scope":2145,"src":"2265:24:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":2133,"name":"uint40","nodeType":"ElementaryTypeName","src":"2265:6:12","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"},{"constant":false,"id":2136,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"2302:18:12","nodeType":"VariableDeclaration","scope":2145,"src":"2295:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2135,"name":"uint32","nodeType":"ElementaryTypeName","src":"2295:6:12","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2138,"mutability":"mutable","name":"isPoolRegistered","nameLocation":"2331:16:12","nodeType":"VariableDeclaration","scope":2145,"src":"2326:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2137,"name":"bool","nodeType":"ElementaryTypeName","src":"2326:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2140,"mutability":"mutable","name":"isPoolInitialized","nameLocation":"2358:17:12","nodeType":"VariableDeclaration","scope":2145,"src":"2353:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2139,"name":"bool","nodeType":"ElementaryTypeName","src":"2353:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2142,"mutability":"mutable","name":"isPoolPaused","nameLocation":"2386:12:12","nodeType":"VariableDeclaration","scope":2145,"src":"2381:17:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2141,"name":"bool","nodeType":"ElementaryTypeName","src":"2381:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2144,"mutability":"mutable","name":"isPoolInRecoveryMode","nameLocation":"2409:20:12","nodeType":"VariableDeclaration","scope":2145,"src":"2404:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2143,"name":"bool","nodeType":"ElementaryTypeName","src":"2404:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"PoolConfig","nameLocation":"2085:10:12","nodeType":"StructDefinition","scope":2412,"src":"2078:354:12","visibility":"public"},{"canonicalName":"HookFlags","documentation":{"id":2146,"nodeType":"StructuredDocumentation","src":"2434:352:12","text":" @notice The flag portion of the `HooksConfig`.\n @dev `enableHookAdjustedAmounts` must be true for all contracts that modify the `amountCalculated`\n in after hooks. Otherwise, the Vault will ignore any \"hookAdjusted\" amounts. Setting any \"shouldCall\"\n flags to true will cause the Vault to call the corresponding hook during operations."},"id":2167,"members":[{"constant":false,"id":2148,"mutability":"mutable","name":"enableHookAdjustedAmounts","nameLocation":"2815:25:12","nodeType":"VariableDeclaration","scope":2167,"src":"2810:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2147,"name":"bool","nodeType":"ElementaryTypeName","src":"2810:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2150,"mutability":"mutable","name":"shouldCallBeforeInitialize","nameLocation":"2851:26:12","nodeType":"VariableDeclaration","scope":2167,"src":"2846:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2149,"name":"bool","nodeType":"ElementaryTypeName","src":"2846:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2152,"mutability":"mutable","name":"shouldCallAfterInitialize","nameLocation":"2888:25:12","nodeType":"VariableDeclaration","scope":2167,"src":"2883:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2151,"name":"bool","nodeType":"ElementaryTypeName","src":"2883:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2154,"mutability":"mutable","name":"shouldCallComputeDynamicSwapFee","nameLocation":"2924:31:12","nodeType":"VariableDeclaration","scope":2167,"src":"2919:36:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2153,"name":"bool","nodeType":"ElementaryTypeName","src":"2919:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2156,"mutability":"mutable","name":"shouldCallBeforeSwap","nameLocation":"2966:20:12","nodeType":"VariableDeclaration","scope":2167,"src":"2961:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2155,"name":"bool","nodeType":"ElementaryTypeName","src":"2961:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2158,"mutability":"mutable","name":"shouldCallAfterSwap","nameLocation":"2997:19:12","nodeType":"VariableDeclaration","scope":2167,"src":"2992:24:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2157,"name":"bool","nodeType":"ElementaryTypeName","src":"2992:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2160,"mutability":"mutable","name":"shouldCallBeforeAddLiquidity","nameLocation":"3027:28:12","nodeType":"VariableDeclaration","scope":2167,"src":"3022:33:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2159,"name":"bool","nodeType":"ElementaryTypeName","src":"3022:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2162,"mutability":"mutable","name":"shouldCallAfterAddLiquidity","nameLocation":"3066:27:12","nodeType":"VariableDeclaration","scope":2167,"src":"3061:32:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2161,"name":"bool","nodeType":"ElementaryTypeName","src":"3061:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2164,"mutability":"mutable","name":"shouldCallBeforeRemoveLiquidity","nameLocation":"3104:31:12","nodeType":"VariableDeclaration","scope":2167,"src":"3099:36:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2163,"name":"bool","nodeType":"ElementaryTypeName","src":"3099:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2166,"mutability":"mutable","name":"shouldCallAfterRemoveLiquidity","nameLocation":"3146:30:12","nodeType":"VariableDeclaration","scope":2167,"src":"3141:35:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2165,"name":"bool","nodeType":"ElementaryTypeName","src":"3141:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"HookFlags","nameLocation":"2794:9:12","nodeType":"StructDefinition","scope":2412,"src":"2787:392:12","visibility":"public"},{"canonicalName":"HooksConfig","documentation":{"id":2168,"nodeType":"StructuredDocumentation","src":"3181:101:12","text":"@notice Represents a hook contract configuration for a pool (HookFlags + hooksContract address)."},"id":2191,"members":[{"constant":false,"id":2170,"mutability":"mutable","name":"enableHookAdjustedAmounts","nameLocation":"3312:25:12","nodeType":"VariableDeclaration","scope":2191,"src":"3307:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2169,"name":"bool","nodeType":"ElementaryTypeName","src":"3307:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2172,"mutability":"mutable","name":"shouldCallBeforeInitialize","nameLocation":"3348:26:12","nodeType":"VariableDeclaration","scope":2191,"src":"3343:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2171,"name":"bool","nodeType":"ElementaryTypeName","src":"3343:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2174,"mutability":"mutable","name":"shouldCallAfterInitialize","nameLocation":"3385:25:12","nodeType":"VariableDeclaration","scope":2191,"src":"3380:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2173,"name":"bool","nodeType":"ElementaryTypeName","src":"3380:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2176,"mutability":"mutable","name":"shouldCallComputeDynamicSwapFee","nameLocation":"3421:31:12","nodeType":"VariableDeclaration","scope":2191,"src":"3416:36:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2175,"name":"bool","nodeType":"ElementaryTypeName","src":"3416:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2178,"mutability":"mutable","name":"shouldCallBeforeSwap","nameLocation":"3463:20:12","nodeType":"VariableDeclaration","scope":2191,"src":"3458:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2177,"name":"bool","nodeType":"ElementaryTypeName","src":"3458:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2180,"mutability":"mutable","name":"shouldCallAfterSwap","nameLocation":"3494:19:12","nodeType":"VariableDeclaration","scope":2191,"src":"3489:24:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2179,"name":"bool","nodeType":"ElementaryTypeName","src":"3489:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2182,"mutability":"mutable","name":"shouldCallBeforeAddLiquidity","nameLocation":"3524:28:12","nodeType":"VariableDeclaration","scope":2191,"src":"3519:33:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2181,"name":"bool","nodeType":"ElementaryTypeName","src":"3519:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2184,"mutability":"mutable","name":"shouldCallAfterAddLiquidity","nameLocation":"3563:27:12","nodeType":"VariableDeclaration","scope":2191,"src":"3558:32:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2183,"name":"bool","nodeType":"ElementaryTypeName","src":"3558:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2186,"mutability":"mutable","name":"shouldCallBeforeRemoveLiquidity","nameLocation":"3601:31:12","nodeType":"VariableDeclaration","scope":2191,"src":"3596:36:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2185,"name":"bool","nodeType":"ElementaryTypeName","src":"3596:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2188,"mutability":"mutable","name":"shouldCallAfterRemoveLiquidity","nameLocation":"3643:30:12","nodeType":"VariableDeclaration","scope":2191,"src":"3638:35:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2187,"name":"bool","nodeType":"ElementaryTypeName","src":"3638:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2190,"mutability":"mutable","name":"hooksContract","nameLocation":"3687:13:12","nodeType":"VariableDeclaration","scope":2191,"src":"3679:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2189,"name":"address","nodeType":"ElementaryTypeName","src":"3679:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"HooksConfig","nameLocation":"3289:11:12","nodeType":"StructDefinition","scope":2412,"src":"3282:421:12","visibility":"public"},{"canonicalName":"SwapState","documentation":{"id":2192,"nodeType":"StructuredDocumentation","src":"3705:364:12","text":" @notice Represents temporary state used during a swap operation.\n @param indexIn The zero-based index of tokenIn\n @param indexOut The zero-based index of tokenOut\n @param amountGivenScaled18 The amountGiven (i.e., tokenIn for ExactIn), adjusted for token decimals\n @param swapFeePercentage The swap fee to be applied (might be static or dynamic)"},"id":2201,"members":[{"constant":false,"id":2194,"mutability":"mutable","name":"indexIn","nameLocation":"4101:7:12","nodeType":"VariableDeclaration","scope":2201,"src":"4093:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2193,"name":"uint256","nodeType":"ElementaryTypeName","src":"4093:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2196,"mutability":"mutable","name":"indexOut","nameLocation":"4122:8:12","nodeType":"VariableDeclaration","scope":2201,"src":"4114:16:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2195,"name":"uint256","nodeType":"ElementaryTypeName","src":"4114:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2198,"mutability":"mutable","name":"amountGivenScaled18","nameLocation":"4144:19:12","nodeType":"VariableDeclaration","scope":2201,"src":"4136:27:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2197,"name":"uint256","nodeType":"ElementaryTypeName","src":"4136:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2200,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"4177:17:12","nodeType":"VariableDeclaration","scope":2201,"src":"4169:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2199,"name":"uint256","nodeType":"ElementaryTypeName","src":"4169:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"SwapState","nameLocation":"4077:9:12","nodeType":"StructDefinition","scope":2412,"src":"4070:127:12","visibility":"public"},{"canonicalName":"VaultState","documentation":{"id":2202,"nodeType":"StructuredDocumentation","src":"4199:381:12","text":" @notice Represents the Vault's configuration.\n @param isQueryDisabled If set to true, disables query functionality of the Vault. Can be modified by governance\n @param isVaultPaused If set to true, swaps and add/remove liquidity operations are halted\n @param areBuffersPaused If set to true, the Vault wrap/unwrap primitives associated with buffers will be disabled"},"id":2209,"members":[{"constant":false,"id":2204,"mutability":"mutable","name":"isQueryDisabled","nameLocation":"4610:15:12","nodeType":"VariableDeclaration","scope":2209,"src":"4605:20:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2203,"name":"bool","nodeType":"ElementaryTypeName","src":"4605:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2206,"mutability":"mutable","name":"isVaultPaused","nameLocation":"4636:13:12","nodeType":"VariableDeclaration","scope":2209,"src":"4631:18:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2205,"name":"bool","nodeType":"ElementaryTypeName","src":"4631:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2208,"mutability":"mutable","name":"areBuffersPaused","nameLocation":"4660:16:12","nodeType":"VariableDeclaration","scope":2209,"src":"4655:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2207,"name":"bool","nodeType":"ElementaryTypeName","src":"4655:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"VaultState","nameLocation":"4588:10:12","nodeType":"StructDefinition","scope":2412,"src":"4581:98:12","visibility":"public"},{"canonicalName":"PoolRoleAccounts","documentation":{"id":2210,"nodeType":"StructuredDocumentation","src":"4681:461:12","text":" @notice Represents the accounts holding certain roles for a given pool. This is passed in on pool registration.\n @param pauseManager Account empowered to pause/unpause the pool (note that governance can always pause a pool)\n @param swapFeeManager Account empowered to set static swap fees for a pool (or 0 to delegate to governance)\n @param poolCreator Account empowered to set the pool creator fee (or 0 if all fees go to the protocol and LPs)"},"id":2217,"members":[{"constant":false,"id":2212,"mutability":"mutable","name":"pauseManager","nameLocation":"5181:12:12","nodeType":"VariableDeclaration","scope":2217,"src":"5173:20:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2211,"name":"address","nodeType":"ElementaryTypeName","src":"5173:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2214,"mutability":"mutable","name":"swapFeeManager","nameLocation":"5207:14:12","nodeType":"VariableDeclaration","scope":2217,"src":"5199:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2213,"name":"address","nodeType":"ElementaryTypeName","src":"5199:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2216,"mutability":"mutable","name":"poolCreator","nameLocation":"5235:11:12","nodeType":"VariableDeclaration","scope":2217,"src":"5227:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2215,"name":"address","nodeType":"ElementaryTypeName","src":"5227:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"PoolRoleAccounts","nameLocation":"5150:16:12","nodeType":"StructDefinition","scope":2412,"src":"5143:106:12","visibility":"public"},{"canonicalName":"TokenType","documentation":{"id":2218,"nodeType":"StructuredDocumentation","src":"9245:1024:12","text":" @notice Token types supported by the Vault.\n @dev In general, pools may contain any combination of these tokens.\n STANDARD tokens (e.g., BAL, WETH) have no rate provider.\n WITH_RATE tokens (e.g., wstETH) require a rate provider. These may be tokens like wstETH, which need to be wrapped\n because the underlying stETH token is rebasing, and such tokens are unsupported by the Vault. They may also be\n tokens like sEUR, which track an underlying asset, but are not yield-bearing. Finally, this encompasses\n yield-bearing ERC4626 tokens, which can be used to facilitate swaps without requiring wrapping or unwrapping\n in most cases. The `paysYieldFees` flag can be used to indicate whether a token is yield-bearing (e.g., waDAI),\n not yield-bearing (e.g., sEUR), or yield-bearing but exempt from fees (e.g., in certain nested pools, where\n yield fees are charged elsewhere).\n NB: STANDARD must always be the first enum element, so that newly initialized data structures default to Standard."},"id":2221,"members":[{"id":2219,"name":"STANDARD","nameLocation":"10291:8:12","nodeType":"EnumValue","src":"10291:8:12"},{"id":2220,"name":"WITH_RATE","nameLocation":"10305:9:12","nodeType":"EnumValue","src":"10305:9:12"}],"name":"TokenType","nameLocation":"10275:9:12","nodeType":"EnumDefinition","src":"10270:46:12"},{"canonicalName":"TokenConfig","documentation":{"id":2222,"nodeType":"StructuredDocumentation","src":"10318:915:12","text":" @notice Encapsulate the data required for the Vault to support a token of the given type.\n @dev For STANDARD tokens, the rate provider address must be 0, and paysYieldFees must be false. All WITH_RATE tokens\n need a rate provider, and may or may not be yield-bearing.\n At registration time, it is useful to include the token address along with the token parameters in the structure\n passed to `registerPool`, as the alternative would be parallel arrays, which would be error prone and require\n validation checks. `TokenConfig` is only used for registration, and is never put into storage (see `TokenInfo`).\n @param token The token address\n @param tokenType The token type (see the enum for supported types)\n @param rateProvider The rate provider for a token (see further documentation above)\n @param paysYieldFees Flag indicating whether yield fees should be charged on this token"},"id":2234,"members":[{"constant":false,"id":2225,"mutability":"mutable","name":"token","nameLocation":"11266:5:12","nodeType":"VariableDeclaration","scope":2234,"src":"11259:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":2224,"nodeType":"UserDefinedTypeName","pathNode":{"id":2223,"name":"IERC20","nameLocations":["11259:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"11259:6:12"},"referencedDeclaration":6486,"src":"11259:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2228,"mutability":"mutable","name":"tokenType","nameLocation":"11287:9:12","nodeType":"VariableDeclaration","scope":2234,"src":"11277:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2221","typeString":"enum TokenType"},"typeName":{"id":2227,"nodeType":"UserDefinedTypeName","pathNode":{"id":2226,"name":"TokenType","nameLocations":["11277:9:12"],"nodeType":"IdentifierPath","referencedDeclaration":2221,"src":"11277:9:12"},"referencedDeclaration":2221,"src":"11277:9:12","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2221","typeString":"enum TokenType"}},"visibility":"internal"},{"constant":false,"id":2231,"mutability":"mutable","name":"rateProvider","nameLocation":"11316:12:12","nodeType":"VariableDeclaration","scope":2234,"src":"11302:26:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$57","typeString":"contract IRateProvider"},"typeName":{"id":2230,"nodeType":"UserDefinedTypeName","pathNode":{"id":2229,"name":"IRateProvider","nameLocations":["11302:13:12"],"nodeType":"IdentifierPath","referencedDeclaration":57,"src":"11302:13:12"},"referencedDeclaration":57,"src":"11302:13:12","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$57","typeString":"contract IRateProvider"}},"visibility":"internal"},{"constant":false,"id":2233,"mutability":"mutable","name":"paysYieldFees","nameLocation":"11339:13:12","nodeType":"VariableDeclaration","scope":2234,"src":"11334:18:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2232,"name":"bool","nodeType":"ElementaryTypeName","src":"11334:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"TokenConfig","nameLocation":"11241:11:12","nodeType":"StructDefinition","scope":2412,"src":"11234:121:12","visibility":"public"},{"canonicalName":"TokenInfo","documentation":{"id":2235,"nodeType":"StructuredDocumentation","src":"11357:592:12","text":" @notice This data structure is stored in `_poolTokenInfo`, a nested mapping from pool -> (token -> TokenInfo).\n @dev Since the token is already the key of the nested mapping, it would be redundant (and an extra SLOAD) to store\n it again in the struct. When we construct PoolData, the tokens are separated into their own array.\n @param tokenType The token type (see the enum for supported types)\n @param rateProvider The rate provider for a token (see further documentation above)\n @param paysYieldFees Flag indicating whether yield fees should be charged on this token"},"id":2244,"members":[{"constant":false,"id":2238,"mutability":"mutable","name":"tokenType","nameLocation":"11983:9:12","nodeType":"VariableDeclaration","scope":2244,"src":"11973:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2221","typeString":"enum TokenType"},"typeName":{"id":2237,"nodeType":"UserDefinedTypeName","pathNode":{"id":2236,"name":"TokenType","nameLocations":["11973:9:12"],"nodeType":"IdentifierPath","referencedDeclaration":2221,"src":"11973:9:12"},"referencedDeclaration":2221,"src":"11973:9:12","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2221","typeString":"enum TokenType"}},"visibility":"internal"},{"constant":false,"id":2241,"mutability":"mutable","name":"rateProvider","nameLocation":"12012:12:12","nodeType":"VariableDeclaration","scope":2244,"src":"11998:26:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$57","typeString":"contract IRateProvider"},"typeName":{"id":2240,"nodeType":"UserDefinedTypeName","pathNode":{"id":2239,"name":"IRateProvider","nameLocations":["11998:13:12"],"nodeType":"IdentifierPath","referencedDeclaration":57,"src":"11998:13:12"},"referencedDeclaration":57,"src":"11998:13:12","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$57","typeString":"contract IRateProvider"}},"visibility":"internal"},{"constant":false,"id":2243,"mutability":"mutable","name":"paysYieldFees","nameLocation":"12035:13:12","nodeType":"VariableDeclaration","scope":2244,"src":"12030:18:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2242,"name":"bool","nodeType":"ElementaryTypeName","src":"12030:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"TokenInfo","nameLocation":"11957:9:12","nodeType":"StructDefinition","scope":2412,"src":"11950:101:12","visibility":"public"},{"canonicalName":"PoolData","documentation":{"id":2245,"nodeType":"StructuredDocumentation","src":"12053:761:12","text":" @notice Data structure used to represent the current pool state in memory\n @param poolConfigBits Custom type to store the entire configuration of the pool.\n @param tokens Pool tokens, sorted in token registration order\n @param tokenInfo Configuration data for each token, sorted in token registration order\n @param balancesRaw Token balances in native decimals\n @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. It is 1e18 (FP 1) for 18-decimal tokens"},"id":2269,"members":[{"constant":false,"id":2248,"mutability":"mutable","name":"poolConfigBits","nameLocation":"12852:14:12","nodeType":"VariableDeclaration","scope":2269,"src":"12837:29:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2122","typeString":"PoolConfigBits"},"typeName":{"id":2247,"nodeType":"UserDefinedTypeName","pathNode":{"id":2246,"name":"PoolConfigBits","nameLocations":["12837:14:12"],"nodeType":"IdentifierPath","referencedDeclaration":2122,"src":"12837:14:12"},"referencedDeclaration":2122,"src":"12837:14:12","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2122","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":2252,"mutability":"mutable","name":"tokens","nameLocation":"12881:6:12","nodeType":"VariableDeclaration","scope":2269,"src":"12872:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_storage_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2250,"nodeType":"UserDefinedTypeName","pathNode":{"id":2249,"name":"IERC20","nameLocations":["12872:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"12872:6:12"},"referencedDeclaration":6486,"src":"12872:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":2251,"nodeType":"ArrayTypeName","src":"12872:8:12","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":2256,"mutability":"mutable","name":"tokenInfo","nameLocation":"12905:9:12","nodeType":"VariableDeclaration","scope":2269,"src":"12893:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2244_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":2254,"nodeType":"UserDefinedTypeName","pathNode":{"id":2253,"name":"TokenInfo","nameLocations":["12893:9:12"],"nodeType":"IdentifierPath","referencedDeclaration":2244,"src":"12893:9:12"},"referencedDeclaration":2244,"src":"12893:9:12","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2244_storage_ptr","typeString":"struct TokenInfo"}},"id":2255,"nodeType":"ArrayTypeName","src":"12893:11:12","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2244_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":2259,"mutability":"mutable","name":"balancesRaw","nameLocation":"12930:11:12","nodeType":"VariableDeclaration","scope":2269,"src":"12920:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2257,"name":"uint256","nodeType":"ElementaryTypeName","src":"12920:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2258,"nodeType":"ArrayTypeName","src":"12920:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2262,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"12957:20:12","nodeType":"VariableDeclaration","scope":2269,"src":"12947:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2260,"name":"uint256","nodeType":"ElementaryTypeName","src":"12947:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2261,"nodeType":"ArrayTypeName","src":"12947:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2265,"mutability":"mutable","name":"tokenRates","nameLocation":"12993:10:12","nodeType":"VariableDeclaration","scope":2269,"src":"12983:20:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2263,"name":"uint256","nodeType":"ElementaryTypeName","src":"12983:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2264,"nodeType":"ArrayTypeName","src":"12983:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2268,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"13019:21:12","nodeType":"VariableDeclaration","scope":2269,"src":"13009:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2266,"name":"uint256","nodeType":"ElementaryTypeName","src":"13009:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2267,"nodeType":"ArrayTypeName","src":"13009:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"name":"PoolData","nameLocation":"12822:8:12","nodeType":"StructDefinition","scope":2412,"src":"12815:228:12","visibility":"public"},{"canonicalName":"Rounding","id":2272,"members":[{"id":2270,"name":"ROUND_UP","nameLocation":"13065:8:12","nodeType":"EnumValue","src":"13065:8:12"},{"id":2271,"name":"ROUND_DOWN","nameLocation":"13079:10:12","nodeType":"EnumValue","src":"13079:10:12"}],"name":"Rounding","nameLocation":"13050:8:12","nodeType":"EnumDefinition","src":"13045:46:12"},{"canonicalName":"SwapKind","id":2275,"members":[{"id":2273,"name":"EXACT_IN","nameLocation":"13318:8:12","nodeType":"EnumValue","src":"13318:8:12"},{"id":2274,"name":"EXACT_OUT","nameLocation":"13332:9:12","nodeType":"EnumValue","src":"13332:9:12"}],"name":"SwapKind","nameLocation":"13303:8:12","nodeType":"EnumDefinition","src":"13298:45:12"},{"canonicalName":"VaultSwapParams","documentation":{"id":2276,"nodeType":"StructuredDocumentation","src":"14089:558:12","text":" @notice Data passed into primary Vault `swap` operations.\n @param kind Type of swap (Exact In or Exact Out)\n @param pool The pool with the tokens being swapped\n @param tokenIn The token entering the Vault (balance increases)\n @param tokenOut The token leaving the Vault (balance decreases)\n @param amountGivenRaw Amount specified for tokenIn or tokenOut (depending on the type of swap)\n @param limitRaw Minimum or maximum value of the calculated amount (depending on the type of swap)\n @param userData Additional (optional) user data"},"id":2294,"members":[{"constant":false,"id":2279,"mutability":"mutable","name":"kind","nameLocation":"14686:4:12","nodeType":"VariableDeclaration","scope":2294,"src":"14677:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2275","typeString":"enum SwapKind"},"typeName":{"id":2278,"nodeType":"UserDefinedTypeName","pathNode":{"id":2277,"name":"SwapKind","nameLocations":["14677:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":2275,"src":"14677:8:12"},"referencedDeclaration":2275,"src":"14677:8:12","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2275","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2281,"mutability":"mutable","name":"pool","nameLocation":"14704:4:12","nodeType":"VariableDeclaration","scope":2294,"src":"14696:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2280,"name":"address","nodeType":"ElementaryTypeName","src":"14696:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2284,"mutability":"mutable","name":"tokenIn","nameLocation":"14721:7:12","nodeType":"VariableDeclaration","scope":2294,"src":"14714:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":2283,"nodeType":"UserDefinedTypeName","pathNode":{"id":2282,"name":"IERC20","nameLocations":["14714:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"14714:6:12"},"referencedDeclaration":6486,"src":"14714:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2287,"mutability":"mutable","name":"tokenOut","nameLocation":"14741:8:12","nodeType":"VariableDeclaration","scope":2294,"src":"14734:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":2286,"nodeType":"UserDefinedTypeName","pathNode":{"id":2285,"name":"IERC20","nameLocations":["14734:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"14734:6:12"},"referencedDeclaration":6486,"src":"14734:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2289,"mutability":"mutable","name":"amountGivenRaw","nameLocation":"14763:14:12","nodeType":"VariableDeclaration","scope":2294,"src":"14755:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2288,"name":"uint256","nodeType":"ElementaryTypeName","src":"14755:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2291,"mutability":"mutable","name":"limitRaw","nameLocation":"14791:8:12","nodeType":"VariableDeclaration","scope":2294,"src":"14783:16:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2290,"name":"uint256","nodeType":"ElementaryTypeName","src":"14783:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2293,"mutability":"mutable","name":"userData","nameLocation":"14811:8:12","nodeType":"VariableDeclaration","scope":2294,"src":"14805:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2292,"name":"bytes","nodeType":"ElementaryTypeName","src":"14805:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"VaultSwapParams","nameLocation":"14655:15:12","nodeType":"StructDefinition","scope":2412,"src":"14648:174:12","visibility":"public"},{"canonicalName":"PoolSwapParams","documentation":{"id":2295,"nodeType":"StructuredDocumentation","src":"14824:530:12","text":" @notice Data for a swap operation, used by contracts implementing `IBasePool`.\n @param kind Type of swap (exact in or exact out)\n @param amountGivenScaled18 Amount given based on kind of the swap (e.g., tokenIn for EXACT_IN)\n @param balancesScaled18 Current pool balances\n @param indexIn Index of tokenIn\n @param indexOut Index of tokenOut\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param userData Additional (optional) data required for the swap"},"id":2312,"members":[{"constant":false,"id":2298,"mutability":"mutable","name":"kind","nameLocation":"15392:4:12","nodeType":"VariableDeclaration","scope":2312,"src":"15383:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2275","typeString":"enum SwapKind"},"typeName":{"id":2297,"nodeType":"UserDefinedTypeName","pathNode":{"id":2296,"name":"SwapKind","nameLocations":["15383:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":2275,"src":"15383:8:12"},"referencedDeclaration":2275,"src":"15383:8:12","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2275","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2300,"mutability":"mutable","name":"amountGivenScaled18","nameLocation":"15410:19:12","nodeType":"VariableDeclaration","scope":2312,"src":"15402:27:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2299,"name":"uint256","nodeType":"ElementaryTypeName","src":"15402:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2303,"mutability":"mutable","name":"balancesScaled18","nameLocation":"15445:16:12","nodeType":"VariableDeclaration","scope":2312,"src":"15435:26:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2301,"name":"uint256","nodeType":"ElementaryTypeName","src":"15435:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2302,"nodeType":"ArrayTypeName","src":"15435:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2305,"mutability":"mutable","name":"indexIn","nameLocation":"15475:7:12","nodeType":"VariableDeclaration","scope":2312,"src":"15467:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2304,"name":"uint256","nodeType":"ElementaryTypeName","src":"15467:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2307,"mutability":"mutable","name":"indexOut","nameLocation":"15496:8:12","nodeType":"VariableDeclaration","scope":2312,"src":"15488:16:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2306,"name":"uint256","nodeType":"ElementaryTypeName","src":"15488:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2309,"mutability":"mutable","name":"router","nameLocation":"15518:6:12","nodeType":"VariableDeclaration","scope":2312,"src":"15510:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2308,"name":"address","nodeType":"ElementaryTypeName","src":"15510:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2311,"mutability":"mutable","name":"userData","nameLocation":"15536:8:12","nodeType":"VariableDeclaration","scope":2312,"src":"15530:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2310,"name":"bytes","nodeType":"ElementaryTypeName","src":"15530:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"PoolSwapParams","nameLocation":"15362:14:12","nodeType":"StructDefinition","scope":2412,"src":"15355:192:12","visibility":"public"},{"canonicalName":"AfterSwapParams","documentation":{"id":2313,"nodeType":"StructuredDocumentation","src":"15549:813:12","text":" @notice Data for the hook after a swap operation.\n @param kind Type of swap (exact in or exact out)\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param amountInScaled18 Amount of tokenIn (entering the Vault)\n @param amountOutScaled18 Amount of tokenOut (leaving the Vault)\n @param tokenInBalanceScaled18 Updated (after swap) balance of tokenIn\n @param tokenOutBalanceScaled18 Updated (after swap) balance of tokenOut\n @param amountCalculatedScaled18 Token amount calculated by the swap\n @param amountCalculatedRaw Token amount calculated by the swap\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param pool Pool address\n @param userData Additional (optional) data required for the swap"},"id":2341,"members":[{"constant":false,"id":2316,"mutability":"mutable","name":"kind","nameLocation":"16401:4:12","nodeType":"VariableDeclaration","scope":2341,"src":"16392:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2275","typeString":"enum SwapKind"},"typeName":{"id":2315,"nodeType":"UserDefinedTypeName","pathNode":{"id":2314,"name":"SwapKind","nameLocations":["16392:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":2275,"src":"16392:8:12"},"referencedDeclaration":2275,"src":"16392:8:12","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2275","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2319,"mutability":"mutable","name":"tokenIn","nameLocation":"16418:7:12","nodeType":"VariableDeclaration","scope":2341,"src":"16411:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":2318,"nodeType":"UserDefinedTypeName","pathNode":{"id":2317,"name":"IERC20","nameLocations":["16411:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"16411:6:12"},"referencedDeclaration":6486,"src":"16411:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2322,"mutability":"mutable","name":"tokenOut","nameLocation":"16438:8:12","nodeType":"VariableDeclaration","scope":2341,"src":"16431:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":2321,"nodeType":"UserDefinedTypeName","pathNode":{"id":2320,"name":"IERC20","nameLocations":["16431:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"16431:6:12"},"referencedDeclaration":6486,"src":"16431:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2324,"mutability":"mutable","name":"amountInScaled18","nameLocation":"16460:16:12","nodeType":"VariableDeclaration","scope":2341,"src":"16452:24:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2323,"name":"uint256","nodeType":"ElementaryTypeName","src":"16452:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2326,"mutability":"mutable","name":"amountOutScaled18","nameLocation":"16490:17:12","nodeType":"VariableDeclaration","scope":2341,"src":"16482:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2325,"name":"uint256","nodeType":"ElementaryTypeName","src":"16482:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2328,"mutability":"mutable","name":"tokenInBalanceScaled18","nameLocation":"16521:22:12","nodeType":"VariableDeclaration","scope":2341,"src":"16513:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2327,"name":"uint256","nodeType":"ElementaryTypeName","src":"16513:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2330,"mutability":"mutable","name":"tokenOutBalanceScaled18","nameLocation":"16557:23:12","nodeType":"VariableDeclaration","scope":2341,"src":"16549:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2329,"name":"uint256","nodeType":"ElementaryTypeName","src":"16549:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2332,"mutability":"mutable","name":"amountCalculatedScaled18","nameLocation":"16594:24:12","nodeType":"VariableDeclaration","scope":2341,"src":"16586:32:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2331,"name":"uint256","nodeType":"ElementaryTypeName","src":"16586:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2334,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"16632:19:12","nodeType":"VariableDeclaration","scope":2341,"src":"16624:27:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2333,"name":"uint256","nodeType":"ElementaryTypeName","src":"16624:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2336,"mutability":"mutable","name":"router","nameLocation":"16665:6:12","nodeType":"VariableDeclaration","scope":2341,"src":"16657:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2335,"name":"address","nodeType":"ElementaryTypeName","src":"16657:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2338,"mutability":"mutable","name":"pool","nameLocation":"16685:4:12","nodeType":"VariableDeclaration","scope":2341,"src":"16677:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2337,"name":"address","nodeType":"ElementaryTypeName","src":"16677:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2340,"mutability":"mutable","name":"userData","nameLocation":"16701:8:12","nodeType":"VariableDeclaration","scope":2341,"src":"16695:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2339,"name":"bytes","nodeType":"ElementaryTypeName","src":"16695:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"AfterSwapParams","nameLocation":"16370:15:12","nodeType":"StructDefinition","scope":2412,"src":"16363:349:12","visibility":"public"},{"canonicalName":"AddLiquidityKind","id":2347,"members":[{"id":2342,"name":"PROPORTIONAL","nameLocation":"16951:12:12","nodeType":"EnumValue","src":"16951:12:12"},{"id":2343,"name":"UNBALANCED","nameLocation":"16969:10:12","nodeType":"EnumValue","src":"16969:10:12"},{"id":2344,"name":"SINGLE_TOKEN_EXACT_OUT","nameLocation":"16985:22:12","nodeType":"EnumValue","src":"16985:22:12"},{"id":2345,"name":"DONATION","nameLocation":"17013:8:12","nodeType":"EnumValue","src":"17013:8:12"},{"id":2346,"name":"CUSTOM","nameLocation":"17027:6:12","nodeType":"EnumValue","src":"17027:6:12"}],"name":"AddLiquidityKind","nameLocation":"16928:16:12","nodeType":"EnumDefinition","src":"16923:112:12"},{"canonicalName":"AddLiquidityParams","documentation":{"id":2348,"nodeType":"StructuredDocumentation","src":"17037:320:12","text":" @notice Data for an add liquidity operation.\n @param pool Address of the pool\n @param to Address of user to mint to\n @param maxAmountsIn Maximum amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param kind Add liquidity kind\n @param userData Optional user data"},"id":2363,"members":[{"constant":false,"id":2350,"mutability":"mutable","name":"pool","nameLocation":"17398:4:12","nodeType":"VariableDeclaration","scope":2363,"src":"17390:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2349,"name":"address","nodeType":"ElementaryTypeName","src":"17390:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2352,"mutability":"mutable","name":"to","nameLocation":"17416:2:12","nodeType":"VariableDeclaration","scope":2363,"src":"17408:10:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2351,"name":"address","nodeType":"ElementaryTypeName","src":"17408:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2355,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"17434:12:12","nodeType":"VariableDeclaration","scope":2363,"src":"17424:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2353,"name":"uint256","nodeType":"ElementaryTypeName","src":"17424:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2354,"nodeType":"ArrayTypeName","src":"17424:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2357,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"17460:15:12","nodeType":"VariableDeclaration","scope":2363,"src":"17452:23:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2356,"name":"uint256","nodeType":"ElementaryTypeName","src":"17452:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2360,"mutability":"mutable","name":"kind","nameLocation":"17498:4:12","nodeType":"VariableDeclaration","scope":2363,"src":"17481:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2347","typeString":"enum AddLiquidityKind"},"typeName":{"id":2359,"nodeType":"UserDefinedTypeName","pathNode":{"id":2358,"name":"AddLiquidityKind","nameLocations":["17481:16:12"],"nodeType":"IdentifierPath","referencedDeclaration":2347,"src":"17481:16:12"},"referencedDeclaration":2347,"src":"17481:16:12","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2347","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":2362,"mutability":"mutable","name":"userData","nameLocation":"17514:8:12","nodeType":"VariableDeclaration","scope":2363,"src":"17508:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2361,"name":"bytes","nodeType":"ElementaryTypeName","src":"17508:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"AddLiquidityParams","nameLocation":"17365:18:12","nodeType":"StructDefinition","scope":2412,"src":"17358:167:12","visibility":"public"},{"canonicalName":"RemoveLiquidityKind","id":2368,"members":[{"id":2364,"name":"PROPORTIONAL","nameLocation":"17770:12:12","nodeType":"EnumValue","src":"17770:12:12"},{"id":2365,"name":"SINGLE_TOKEN_EXACT_IN","nameLocation":"17788:21:12","nodeType":"EnumValue","src":"17788:21:12"},{"id":2366,"name":"SINGLE_TOKEN_EXACT_OUT","nameLocation":"17815:22:12","nodeType":"EnumValue","src":"17815:22:12"},{"id":2367,"name":"CUSTOM","nameLocation":"17843:6:12","nodeType":"EnumValue","src":"17843:6:12"}],"name":"RemoveLiquidityKind","nameLocation":"17744:19:12","nodeType":"EnumDefinition","src":"17739:112:12"},{"canonicalName":"RemoveLiquidityParams","documentation":{"id":2369,"nodeType":"StructuredDocumentation","src":"17853:330:12","text":" @notice Data for an remove liquidity operation.\n @param pool Address of the pool\n @param from Address of user to burn from\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOut Minimum amounts of output tokens\n @param kind Remove liquidity kind\n @param userData Optional user data"},"id":2384,"members":[{"constant":false,"id":2371,"mutability":"mutable","name":"pool","nameLocation":"18227:4:12","nodeType":"VariableDeclaration","scope":2384,"src":"18219:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2370,"name":"address","nodeType":"ElementaryTypeName","src":"18219:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2373,"mutability":"mutable","name":"from","nameLocation":"18245:4:12","nodeType":"VariableDeclaration","scope":2384,"src":"18237:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2372,"name":"address","nodeType":"ElementaryTypeName","src":"18237:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2375,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"18263:14:12","nodeType":"VariableDeclaration","scope":2384,"src":"18255:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2374,"name":"uint256","nodeType":"ElementaryTypeName","src":"18255:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2378,"mutability":"mutable","name":"minAmountsOut","nameLocation":"18293:13:12","nodeType":"VariableDeclaration","scope":2384,"src":"18283:23:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2376,"name":"uint256","nodeType":"ElementaryTypeName","src":"18283:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2377,"nodeType":"ArrayTypeName","src":"18283:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2381,"mutability":"mutable","name":"kind","nameLocation":"18332:4:12","nodeType":"VariableDeclaration","scope":2384,"src":"18312:24:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2368","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":2380,"nodeType":"UserDefinedTypeName","pathNode":{"id":2379,"name":"RemoveLiquidityKind","nameLocations":["18312:19:12"],"nodeType":"IdentifierPath","referencedDeclaration":2368,"src":"18312:19:12"},"referencedDeclaration":2368,"src":"18312:19:12","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2368","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":2383,"mutability":"mutable","name":"userData","nameLocation":"18348:8:12","nodeType":"VariableDeclaration","scope":2384,"src":"18342:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2382,"name":"bytes","nodeType":"ElementaryTypeName","src":"18342:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"RemoveLiquidityParams","nameLocation":"18191:21:12","nodeType":"StructDefinition","scope":2412,"src":"18184:175:12","visibility":"public"},{"canonicalName":"WrappingDirection","id":2387,"members":[{"id":2385,"name":"WRAP","nameLocation":"18602:4:12","nodeType":"EnumValue","src":"18602:4:12"},{"id":2386,"name":"UNWRAP","nameLocation":"18612:6:12","nodeType":"EnumValue","src":"18612:6:12"}],"name":"WrappingDirection","nameLocation":"18578:17:12","nodeType":"EnumDefinition","src":"18573:47:12"},{"canonicalName":"BufferWrapOrUnwrapParams","documentation":{"id":2388,"nodeType":"StructuredDocumentation","src":"18622:499:12","text":" @notice Data for a wrap/unwrap operation.\n @param kind Type of swap (Exact In or Exact Out)\n @param direction Direction of the wrapping operation (Wrap or Unwrap)\n @param wrappedToken Wrapped token, compatible with interface ERC4626\n @param amountGivenRaw Amount specified for tokenIn or tokenOut (depends on the type of swap and wrapping direction)\n @param limitRaw Minimum or maximum amount specified for the other token (depends on the type of swap and wrapping\n direction)"},"id":2402,"members":[{"constant":false,"id":2391,"mutability":"mutable","name":"kind","nameLocation":"19169:4:12","nodeType":"VariableDeclaration","scope":2402,"src":"19160:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2275","typeString":"enum SwapKind"},"typeName":{"id":2390,"nodeType":"UserDefinedTypeName","pathNode":{"id":2389,"name":"SwapKind","nameLocations":["19160:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":2275,"src":"19160:8:12"},"referencedDeclaration":2275,"src":"19160:8:12","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2275","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2394,"mutability":"mutable","name":"direction","nameLocation":"19197:9:12","nodeType":"VariableDeclaration","scope":2402,"src":"19179:27:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$2387","typeString":"enum WrappingDirection"},"typeName":{"id":2393,"nodeType":"UserDefinedTypeName","pathNode":{"id":2392,"name":"WrappingDirection","nameLocations":["19179:17:12"],"nodeType":"IdentifierPath","referencedDeclaration":2387,"src":"19179:17:12"},"referencedDeclaration":2387,"src":"19179:17:12","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$2387","typeString":"enum WrappingDirection"}},"visibility":"internal"},{"constant":false,"id":2397,"mutability":"mutable","name":"wrappedToken","nameLocation":"19221:12:12","nodeType":"VariableDeclaration","scope":2402,"src":"19212:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":2396,"nodeType":"UserDefinedTypeName","pathNode":{"id":2395,"name":"IERC4626","nameLocations":["19212:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"19212:8:12"},"referencedDeclaration":6408,"src":"19212:8:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":2399,"mutability":"mutable","name":"amountGivenRaw","nameLocation":"19247:14:12","nodeType":"VariableDeclaration","scope":2402,"src":"19239:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2398,"name":"uint256","nodeType":"ElementaryTypeName","src":"19239:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2401,"mutability":"mutable","name":"limitRaw","nameLocation":"19275:8:12","nodeType":"VariableDeclaration","scope":2402,"src":"19267:16:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2400,"name":"uint256","nodeType":"ElementaryTypeName","src":"19267:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"BufferWrapOrUnwrapParams","nameLocation":"19129:24:12","nodeType":"StructDefinition","scope":2412,"src":"19122:164:12","visibility":"public"},{"constant":true,"id":2405,"mutability":"constant","name":"FEE_BITLENGTH","nameLocation":"19611:13:12","nodeType":"VariableDeclaration","scope":2412,"src":"19594:35:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2403,"name":"uint256","nodeType":"ElementaryTypeName","src":"19594:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3234","id":2404,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19627:2:12","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},"visibility":"internal"},{"constant":true,"id":2408,"mutability":"constant","name":"FEE_SCALING_FACTOR","nameLocation":"19648:18:12","nodeType":"VariableDeclaration","scope":2412,"src":"19631:42:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2406,"name":"uint256","nodeType":"ElementaryTypeName","src":"19631:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653131","id":2407,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19669:4:12","typeDescriptions":{"typeIdentifier":"t_rational_100000000000_by_1","typeString":"int_const 100000000000"},"value":"1e11"},"visibility":"internal"},{"constant":true,"id":2411,"mutability":"constant","name":"MAX_FEE_PERCENTAGE","nameLocation":"19896:18:12","nodeType":"VariableDeclaration","scope":2412,"src":"19879:48:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2409,"name":"uint256","nodeType":"ElementaryTypeName","src":"19879:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"39392e39393939653136","id":2410,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19917:10:12","typeDescriptions":{"typeIdentifier":"t_rational_999999000000000000_by_1","typeString":"int_const 999999000000000000"},"value":"99.9999e16"},"visibility":"internal"}],"src":"46:19895:12"},"id":12},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","exportedSymbols":{"Authentication":[2491],"IAuthentication":[47]},"id":2492,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2413,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:13"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","id":2415,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2492,"sourceUnit":48,"src":"72:116:13","symbolAliases":[{"foreign":{"id":2414,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"81:15:13","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":2417,"name":"IAuthentication","nameLocations":["625:15:13"],"nodeType":"IdentifierPath","referencedDeclaration":47,"src":"625:15:13"},"id":2418,"nodeType":"InheritanceSpecifier","src":"625:15:13"}],"canonicalName":"Authentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":2416,"nodeType":"StructuredDocumentation","src":"190:398:13","text":" @notice Building block for performing access control on external functions.\n @dev This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be\n applied to external functions to make them only callable by authorized accounts.\n Derived contracts must implement the `_canPerform` function, which holds the actual access control logic."},"fullyImplemented":false,"id":2491,"linearizedBaseContracts":[2491,47],"name":"Authentication","nameLocation":"607:14:13","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":2420,"mutability":"immutable","name":"_actionIdDisambiguator","nameLocation":"673:22:13","nodeType":"VariableDeclaration","scope":2491,"src":"647:48:13","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2419,"name":"bytes32","nodeType":"ElementaryTypeName","src":"647:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"body":{"id":2430,"nodeType":"Block","src":"1337:63:13","statements":[{"expression":{"id":2428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2426,"name":"_actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2420,"src":"1347:22:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2427,"name":"actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2423,"src":"1372:21:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1347:46:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2429,"nodeType":"ExpressionStatement","src":"1347:46:13"}]},"documentation":{"id":2421,"nodeType":"StructuredDocumentation","src":"702:587:13","text":" @dev The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in\n multi-contract systems.\n There are two main uses for it:\n - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers\n unique. The contract's own address is a good option.\n - if the contract belongs to a family that shares action identifiers for the same functions, an identifier\n shared by the entire family (and no other contract) should be used instead."},"id":2431,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":2424,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2423,"mutability":"mutable","name":"actionIdDisambiguator","nameLocation":"1314:21:13","nodeType":"VariableDeclaration","scope":2431,"src":"1306:29:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2422,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1306:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1305:31:13"},"returnParameters":{"id":2425,"nodeType":"ParameterList","parameters":[],"src":"1337:0:13"},"scope":2491,"src":"1294:106:13","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2438,"nodeType":"Block","src":"1549:49:13","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2434,"name":"_authenticateCaller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2462,"src":"1559:19:13","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":2435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1559:21:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2436,"nodeType":"ExpressionStatement","src":"1559:21:13"},{"id":2437,"nodeType":"PlaceholderStatement","src":"1590:1:13"}]},"documentation":{"id":2432,"nodeType":"StructuredDocumentation","src":"1406:114:13","text":"@dev Reverts unless the caller is allowed to call this function. Should only be applied to external functions."},"id":2439,"name":"authenticate","nameLocation":"1534:12:13","nodeType":"ModifierDefinition","parameters":{"id":2433,"nodeType":"ParameterList","parameters":[],"src":"1546:2:13"},"src":"1525:73:13","virtual":false,"visibility":"internal"},{"body":{"id":2461,"nodeType":"Block","src":"1733:156:13","statements":[{"assignments":[2444],"declarations":[{"constant":false,"id":2444,"mutability":"mutable","name":"actionId","nameLocation":"1751:8:13","nodeType":"VariableDeclaration","scope":2461,"src":"1743:16:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2443,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1743:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2449,"initialValue":{"arguments":[{"expression":{"id":2446,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1774:3:13","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1778:3:13","memberName":"sig","nodeType":"MemberAccess","src":"1774:7:13","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":2445,"name":"getActionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2480,"src":"1762:11:13","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view returns (bytes32)"}},"id":2448,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1762:20:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1743:39:13"},{"condition":{"id":2455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1797:34:13","subExpression":{"arguments":[{"id":2451,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2444,"src":"1810:8:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":2452,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1820:3:13","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1824:6:13","memberName":"sender","nodeType":"MemberAccess","src":"1820:10:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2450,"name":"_canPerform","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2490,"src":"1798:11:13","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":2454,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1798:33:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2460,"nodeType":"IfStatement","src":"1793:90:13","trueBody":{"id":2459,"nodeType":"Block","src":"1833:50:13","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2456,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38,"src":"1854:16:13","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2457,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1854:18:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2458,"nodeType":"RevertStatement","src":"1847:25:13"}]}}]},"documentation":{"id":2440,"nodeType":"StructuredDocumentation","src":"1604:79:13","text":"@dev Reverts unless the caller is allowed to call the entry point function."},"id":2462,"implemented":true,"kind":"function","modifiers":[],"name":"_authenticateCaller","nameLocation":"1697:19:13","nodeType":"FunctionDefinition","parameters":{"id":2441,"nodeType":"ParameterList","parameters":[],"src":"1716:2:13"},"returnParameters":{"id":2442,"nodeType":"ParameterList","parameters":[],"src":"1733:0:13"},"scope":2491,"src":"1688:201:13","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[46],"body":{"id":2479,"nodeType":"Block","src":"2008:353:13","statements":[{"expression":{"arguments":[{"arguments":[{"id":2474,"name":"_actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2420,"src":"2320:22:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2475,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2465,"src":"2344:8:13","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":2472,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2303:3:13","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2473,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2307:12:13","memberName":"encodePacked","nodeType":"MemberAccess","src":"2303:16:13","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":2476,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2303:50:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2471,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2293:9:13","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":2477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2293:61:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":2470,"id":2478,"nodeType":"Return","src":"2286:68:13"}]},"documentation":{"id":2463,"nodeType":"StructuredDocumentation","src":"1895:31:13","text":"@inheritdoc IAuthentication"},"functionSelector":"851c1bb3","id":2480,"implemented":true,"kind":"function","modifiers":[],"name":"getActionId","nameLocation":"1940:11:13","nodeType":"FunctionDefinition","overrides":{"id":2467,"nodeType":"OverrideSpecifier","overrides":[],"src":"1981:8:13"},"parameters":{"id":2466,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2465,"mutability":"mutable","name":"selector","nameLocation":"1959:8:13","nodeType":"VariableDeclaration","scope":2480,"src":"1952:15:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":2464,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1952:6:13","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1951:17:13"},"returnParameters":{"id":2470,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2469,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2480,"src":"1999:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2468,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1999:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1998:9:13"},"scope":2491,"src":"1931:430:13","stateMutability":"view","virtual":false,"visibility":"public"},{"documentation":{"id":2481,"nodeType":"StructuredDocumentation","src":"2367:304:13","text":" @dev Derived contracts must implement this function to perform the actual access control logic.\n @param actionId The action identifier associated with an external function\n @param user The account performing the action\n @return success True if the action is permitted"},"id":2490,"implemented":false,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"2685:11:13","nodeType":"FunctionDefinition","parameters":{"id":2486,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2483,"mutability":"mutable","name":"actionId","nameLocation":"2705:8:13","nodeType":"VariableDeclaration","scope":2490,"src":"2697:16:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2482,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2697:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2485,"mutability":"mutable","name":"user","nameLocation":"2723:4:13","nodeType":"VariableDeclaration","scope":2490,"src":"2715:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2484,"name":"address","nodeType":"ElementaryTypeName","src":"2715:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2696:32:13"},"returnParameters":{"id":2489,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2488,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2490,"src":"2760:4:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2487,"name":"bool","nodeType":"ElementaryTypeName","src":"2760:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2759:6:13"},"scope":2491,"src":"2676:90:13","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":2492,"src":"589:2179:13","usedErrors":[38],"usedEvents":[]}],"src":"46:2723:13"},"id":13},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","exportedSymbols":{"FixedPoint":[2790],"LogExpMath":[4146]},"id":2791,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2493,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:14"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol","file":"./LogExpMath.sol","id":2495,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2791,"sourceUnit":4147,"src":"72:46:14","symbolAliases":[{"foreign":{"id":2494,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4146,"src":"81:10:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"FixedPoint","contractDependencies":[],"contractKind":"library","documentation":{"id":2496,"nodeType":"StructuredDocumentation","src":"120:119:14","text":"@notice Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision."},"fullyImplemented":true,"id":2790,"linearizedBaseContracts":[2790],"name":"FixedPoint","nameLocation":"247:10:14","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2497,"nodeType":"StructuredDocumentation","src":"264:39:14","text":"@notice Attempted division by zero."},"errorSelector":"0a0c22c7","id":2499,"name":"ZeroDivision","nameLocation":"314:12:14","nodeType":"ErrorDefinition","parameters":{"id":2498,"nodeType":"ParameterList","parameters":[],"src":"326:2:14"},"src":"308:21:14"},{"constant":true,"id":2502,"mutability":"constant","name":"ONE","nameLocation":"459:3:14","nodeType":"VariableDeclaration","scope":2790,"src":"433:36:14","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2500,"name":"uint256","nodeType":"ElementaryTypeName","src":"433:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653138","id":2501,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"465:4:14","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"internal"},{"constant":true,"id":2507,"mutability":"constant","name":"TWO","nameLocation":"522:3:14","nodeType":"VariableDeclaration","scope":2790,"src":"496:39:14","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2503,"name":"uint256","nodeType":"ElementaryTypeName","src":"496:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2506,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":2504,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"528:1:14","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2505,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2502,"src":"532:3:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"528:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":2512,"mutability":"constant","name":"FOUR","nameLocation":"567:4:14","nodeType":"VariableDeclaration","scope":2790,"src":"541:40:14","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2508,"name":"uint256","nodeType":"ElementaryTypeName","src":"541:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2511,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"34","id":2509,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"574:1:14","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2510,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2502,"src":"578:3:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"574:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":2515,"mutability":"constant","name":"MAX_POW_RELATIVE_ERROR","nameLocation":"613:22:14","nodeType":"VariableDeclaration","scope":2790,"src":"587:56:14","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2513,"name":"uint256","nodeType":"ElementaryTypeName","src":"587:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3130303030","id":2514,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"638:5:14","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"value":"10000"},"visibility":"internal"},{"body":{"id":2534,"nodeType":"Block","src":"733:148:14","statements":[{"assignments":[2525],"declarations":[{"constant":false,"id":2525,"mutability":"mutable","name":"product","nameLocation":"828:7:14","nodeType":"VariableDeclaration","scope":2534,"src":"820:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2524,"name":"uint256","nodeType":"ElementaryTypeName","src":"820:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2529,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2526,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2517,"src":"838:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2527,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2519,"src":"842:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"838:5:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"820:23:14"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2530,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2525,"src":"861:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":2531,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2502,"src":"871:3:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"861:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2523,"id":2533,"nodeType":"Return","src":"854:20:14"}]},"id":2535,"implemented":true,"kind":"function","modifiers":[],"name":"mulDown","nameLocation":"671:7:14","nodeType":"FunctionDefinition","parameters":{"id":2520,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2517,"mutability":"mutable","name":"a","nameLocation":"687:1:14","nodeType":"VariableDeclaration","scope":2535,"src":"679:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2516,"name":"uint256","nodeType":"ElementaryTypeName","src":"679:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2519,"mutability":"mutable","name":"b","nameLocation":"698:1:14","nodeType":"VariableDeclaration","scope":2535,"src":"690:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2518,"name":"uint256","nodeType":"ElementaryTypeName","src":"690:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"678:22:14"},"returnParameters":{"id":2523,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2522,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2535,"src":"724:7:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2521,"name":"uint256","nodeType":"ElementaryTypeName","src":"724:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"723:9:14"},"scope":2790,"src":"662:219:14","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2551,"nodeType":"Block","src":"963:351:14","statements":[{"assignments":[2545],"declarations":[{"constant":false,"id":2545,"mutability":"mutable","name":"product","nameLocation":"1058:7:14","nodeType":"VariableDeclaration","scope":2551,"src":"1050:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2544,"name":"uint256","nodeType":"ElementaryTypeName","src":"1050:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2549,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2546,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2537,"src":"1068:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2547,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2539,"src":"1072:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1068:5:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1050:23:14"},{"AST":{"nativeSrc":"1211:97:14","nodeType":"YulBlock","src":"1211:97:14","statements":[{"nativeSrc":"1225:73:14","nodeType":"YulAssignment","src":"1225:73:14","value":{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"1253:7:14","nodeType":"YulIdentifier","src":"1253:7:14"}],"functionName":{"name":"iszero","nativeSrc":"1246:6:14","nodeType":"YulIdentifier","src":"1246:6:14"},"nativeSrc":"1246:15:14","nodeType":"YulFunctionCall","src":"1246:15:14"}],"functionName":{"name":"iszero","nativeSrc":"1239:6:14","nodeType":"YulIdentifier","src":"1239:6:14"},"nativeSrc":"1239:23:14","nodeType":"YulFunctionCall","src":"1239:23:14"},{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"1276:7:14","nodeType":"YulIdentifier","src":"1276:7:14"},{"kind":"number","nativeSrc":"1285:1:14","nodeType":"YulLiteral","src":"1285:1:14","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"1272:3:14","nodeType":"YulIdentifier","src":"1272:3:14"},"nativeSrc":"1272:15:14","nodeType":"YulFunctionCall","src":"1272:15:14"},{"name":"ONE","nativeSrc":"1289:3:14","nodeType":"YulIdentifier","src":"1289:3:14"}],"functionName":{"name":"div","nativeSrc":"1268:3:14","nodeType":"YulIdentifier","src":"1268:3:14"},"nativeSrc":"1268:25:14","nodeType":"YulFunctionCall","src":"1268:25:14"},{"kind":"number","nativeSrc":"1295:1:14","nodeType":"YulLiteral","src":"1295:1:14","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"1264:3:14","nodeType":"YulIdentifier","src":"1264:3:14"},"nativeSrc":"1264:33:14","nodeType":"YulFunctionCall","src":"1264:33:14"}],"functionName":{"name":"mul","nativeSrc":"1235:3:14","nodeType":"YulIdentifier","src":"1235:3:14"},"nativeSrc":"1235:63:14","nodeType":"YulFunctionCall","src":"1235:63:14"},"variableNames":[{"name":"result","nativeSrc":"1225:6:14","nodeType":"YulIdentifier","src":"1225:6:14"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":2502,"isOffset":false,"isSlot":false,"src":"1289:3:14","valueSize":1},{"declaration":2545,"isOffset":false,"isSlot":false,"src":"1253:7:14","valueSize":1},{"declaration":2545,"isOffset":false,"isSlot":false,"src":"1276:7:14","valueSize":1},{"declaration":2542,"isOffset":false,"isSlot":false,"src":"1225:6:14","valueSize":1}],"flags":["memory-safe"],"id":2550,"nodeType":"InlineAssembly","src":"1186:122:14"}]},"id":2552,"implemented":true,"kind":"function","modifiers":[],"name":"mulUp","nameLocation":"896:5:14","nodeType":"FunctionDefinition","parameters":{"id":2540,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2537,"mutability":"mutable","name":"a","nameLocation":"910:1:14","nodeType":"VariableDeclaration","scope":2552,"src":"902:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2536,"name":"uint256","nodeType":"ElementaryTypeName","src":"902:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2539,"mutability":"mutable","name":"b","nameLocation":"921:1:14","nodeType":"VariableDeclaration","scope":2552,"src":"913:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2538,"name":"uint256","nodeType":"ElementaryTypeName","src":"913:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"901:22:14"},"returnParameters":{"id":2543,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2542,"mutability":"mutable","name":"result","nameLocation":"955:6:14","nodeType":"VariableDeclaration","scope":2552,"src":"947:14:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2541,"name":"uint256","nodeType":"ElementaryTypeName","src":"947:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"946:16:14"},"scope":2790,"src":"887:427:14","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2571,"nodeType":"Block","src":"1391:254:14","statements":[{"assignments":[2562],"declarations":[{"constant":false,"id":2562,"mutability":"mutable","name":"aInflated","nameLocation":"1499:9:14","nodeType":"VariableDeclaration","scope":2571,"src":"1491:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2561,"name":"uint256","nodeType":"ElementaryTypeName","src":"1491:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2566,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2563,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2554,"src":"1511:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2564,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2502,"src":"1515:3:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1511:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1491:27:14"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2567,"name":"aInflated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2562,"src":"1625:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":2568,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2556,"src":"1637:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1625:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2560,"id":2570,"nodeType":"Return","src":"1618:20:14"}]},"id":2572,"implemented":true,"kind":"function","modifiers":[],"name":"divDown","nameLocation":"1329:7:14","nodeType":"FunctionDefinition","parameters":{"id":2557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2554,"mutability":"mutable","name":"a","nameLocation":"1345:1:14","nodeType":"VariableDeclaration","scope":2572,"src":"1337:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2553,"name":"uint256","nodeType":"ElementaryTypeName","src":"1337:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2556,"mutability":"mutable","name":"b","nameLocation":"1356:1:14","nodeType":"VariableDeclaration","scope":2572,"src":"1348:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2555,"name":"uint256","nodeType":"ElementaryTypeName","src":"1348:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1336:22:14"},"returnParameters":{"id":2560,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2559,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2572,"src":"1382:7:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2558,"name":"uint256","nodeType":"ElementaryTypeName","src":"1382:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1381:9:14"},"scope":2790,"src":"1320:325:14","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2587,"nodeType":"Block","src":"1727:43:14","statements":[{"expression":{"arguments":[{"id":2582,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2574,"src":"1753:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2583,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2502,"src":"1756:3:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2584,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2576,"src":"1761:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2581,"name":"mulDivUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2616,"src":"1744:8:14","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":2585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1744:19:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2580,"id":2586,"nodeType":"Return","src":"1737:26:14"}]},"id":2588,"implemented":true,"kind":"function","modifiers":[],"name":"divUp","nameLocation":"1660:5:14","nodeType":"FunctionDefinition","parameters":{"id":2577,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2574,"mutability":"mutable","name":"a","nameLocation":"1674:1:14","nodeType":"VariableDeclaration","scope":2588,"src":"1666:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2573,"name":"uint256","nodeType":"ElementaryTypeName","src":"1666:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2576,"mutability":"mutable","name":"b","nameLocation":"1685:1:14","nodeType":"VariableDeclaration","scope":2588,"src":"1677:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2575,"name":"uint256","nodeType":"ElementaryTypeName","src":"1677:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1665:22:14"},"returnParameters":{"id":2580,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2579,"mutability":"mutable","name":"result","nameLocation":"1719:6:14","nodeType":"VariableDeclaration","scope":2588,"src":"1711:14:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2578,"name":"uint256","nodeType":"ElementaryTypeName","src":"1711:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1710:16:14"},"scope":2790,"src":"1651:119:14","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2615,"nodeType":"Block","src":"1912:774:14","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2600,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2595,"src":"2004:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2601,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2009:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2004:6:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2607,"nodeType":"IfStatement","src":"2000:58:14","trueBody":{"id":2606,"nodeType":"Block","src":"2012:46:14","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2603,"name":"ZeroDivision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2499,"src":"2033:12:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2033:14:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2605,"nodeType":"RevertStatement","src":"2026:21:14"}]}},{"assignments":[2609],"declarations":[{"constant":false,"id":2609,"mutability":"mutable","name":"product","nameLocation":"2143:7:14","nodeType":"VariableDeclaration","scope":2615,"src":"2135:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2608,"name":"uint256","nodeType":"ElementaryTypeName","src":"2135:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2613,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2610,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2591,"src":"2153:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2611,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2593,"src":"2157:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2153:5:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2135:23:14"},{"AST":{"nativeSrc":"2585:95:14","nodeType":"YulBlock","src":"2585:95:14","statements":[{"nativeSrc":"2599:71:14","nodeType":"YulAssignment","src":"2599:71:14","value":{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"2627:7:14","nodeType":"YulIdentifier","src":"2627:7:14"}],"functionName":{"name":"iszero","nativeSrc":"2620:6:14","nodeType":"YulIdentifier","src":"2620:6:14"},"nativeSrc":"2620:15:14","nodeType":"YulFunctionCall","src":"2620:15:14"}],"functionName":{"name":"iszero","nativeSrc":"2613:6:14","nodeType":"YulIdentifier","src":"2613:6:14"},"nativeSrc":"2613:23:14","nodeType":"YulFunctionCall","src":"2613:23:14"},{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"2650:7:14","nodeType":"YulIdentifier","src":"2650:7:14"},{"kind":"number","nativeSrc":"2659:1:14","nodeType":"YulLiteral","src":"2659:1:14","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"2646:3:14","nodeType":"YulIdentifier","src":"2646:3:14"},"nativeSrc":"2646:15:14","nodeType":"YulFunctionCall","src":"2646:15:14"},{"name":"c","nativeSrc":"2663:1:14","nodeType":"YulIdentifier","src":"2663:1:14"}],"functionName":{"name":"div","nativeSrc":"2642:3:14","nodeType":"YulIdentifier","src":"2642:3:14"},"nativeSrc":"2642:23:14","nodeType":"YulFunctionCall","src":"2642:23:14"},{"kind":"number","nativeSrc":"2667:1:14","nodeType":"YulLiteral","src":"2667:1:14","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"2638:3:14","nodeType":"YulIdentifier","src":"2638:3:14"},"nativeSrc":"2638:31:14","nodeType":"YulFunctionCall","src":"2638:31:14"}],"functionName":{"name":"mul","nativeSrc":"2609:3:14","nodeType":"YulIdentifier","src":"2609:3:14"},"nativeSrc":"2609:61:14","nodeType":"YulFunctionCall","src":"2609:61:14"},"variableNames":[{"name":"result","nativeSrc":"2599:6:14","nodeType":"YulIdentifier","src":"2599:6:14"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":2595,"isOffset":false,"isSlot":false,"src":"2663:1:14","valueSize":1},{"declaration":2609,"isOffset":false,"isSlot":false,"src":"2627:7:14","valueSize":1},{"declaration":2609,"isOffset":false,"isSlot":false,"src":"2650:7:14","valueSize":1},{"declaration":2598,"isOffset":false,"isSlot":false,"src":"2599:6:14","valueSize":1}],"flags":["memory-safe"],"id":2614,"nodeType":"InlineAssembly","src":"2560:120:14"}]},"documentation":{"id":2589,"nodeType":"StructuredDocumentation","src":"1776:41:14","text":"@dev Return (a * b) / c, rounding up."},"id":2616,"implemented":true,"kind":"function","modifiers":[],"name":"mulDivUp","nameLocation":"1831:8:14","nodeType":"FunctionDefinition","parameters":{"id":2596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2591,"mutability":"mutable","name":"a","nameLocation":"1848:1:14","nodeType":"VariableDeclaration","scope":2616,"src":"1840:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2590,"name":"uint256","nodeType":"ElementaryTypeName","src":"1840:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2593,"mutability":"mutable","name":"b","nameLocation":"1859:1:14","nodeType":"VariableDeclaration","scope":2616,"src":"1851:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2592,"name":"uint256","nodeType":"ElementaryTypeName","src":"1851:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2595,"mutability":"mutable","name":"c","nameLocation":"1870:1:14","nodeType":"VariableDeclaration","scope":2616,"src":"1862:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2594,"name":"uint256","nodeType":"ElementaryTypeName","src":"1862:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1839:33:14"},"returnParameters":{"id":2599,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2598,"mutability":"mutable","name":"result","nameLocation":"1904:6:14","nodeType":"VariableDeclaration","scope":2616,"src":"1896:14:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2597,"name":"uint256","nodeType":"ElementaryTypeName","src":"1896:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1895:16:14"},"scope":2790,"src":"1822:864:14","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2635,"nodeType":"Block","src":"3159:345:14","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2626,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2621,"src":"3251:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2627,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3256:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3251:6:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2633,"nodeType":"IfStatement","src":"3247:58:14","trueBody":{"id":2632,"nodeType":"Block","src":"3259:46:14","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2629,"name":"ZeroDivision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2499,"src":"3280:12:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3280:14:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2631,"nodeType":"RevertStatement","src":"3273:21:14"}]}},{"AST":{"nativeSrc":"3415:83:14","nodeType":"YulBlock","src":"3415:83:14","statements":[{"nativeSrc":"3429:59:14","nodeType":"YulAssignment","src":"3429:59:14","value":{"arguments":[{"arguments":[{"arguments":[{"name":"a","nativeSrc":"3457:1:14","nodeType":"YulIdentifier","src":"3457:1:14"}],"functionName":{"name":"iszero","nativeSrc":"3450:6:14","nodeType":"YulIdentifier","src":"3450:6:14"},"nativeSrc":"3450:9:14","nodeType":"YulFunctionCall","src":"3450:9:14"}],"functionName":{"name":"iszero","nativeSrc":"3443:6:14","nodeType":"YulIdentifier","src":"3443:6:14"},"nativeSrc":"3443:17:14","nodeType":"YulFunctionCall","src":"3443:17:14"},{"arguments":[{"kind":"number","nativeSrc":"3466:1:14","nodeType":"YulLiteral","src":"3466:1:14","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"a","nativeSrc":"3477:1:14","nodeType":"YulIdentifier","src":"3477:1:14"},{"kind":"number","nativeSrc":"3480:1:14","nodeType":"YulLiteral","src":"3480:1:14","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"3473:3:14","nodeType":"YulIdentifier","src":"3473:3:14"},"nativeSrc":"3473:9:14","nodeType":"YulFunctionCall","src":"3473:9:14"},{"name":"b","nativeSrc":"3484:1:14","nodeType":"YulIdentifier","src":"3484:1:14"}],"functionName":{"name":"div","nativeSrc":"3469:3:14","nodeType":"YulIdentifier","src":"3469:3:14"},"nativeSrc":"3469:17:14","nodeType":"YulFunctionCall","src":"3469:17:14"}],"functionName":{"name":"add","nativeSrc":"3462:3:14","nodeType":"YulIdentifier","src":"3462:3:14"},"nativeSrc":"3462:25:14","nodeType":"YulFunctionCall","src":"3462:25:14"}],"functionName":{"name":"mul","nativeSrc":"3439:3:14","nodeType":"YulIdentifier","src":"3439:3:14"},"nativeSrc":"3439:49:14","nodeType":"YulFunctionCall","src":"3439:49:14"},"variableNames":[{"name":"result","nativeSrc":"3429:6:14","nodeType":"YulIdentifier","src":"3429:6:14"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":2619,"isOffset":false,"isSlot":false,"src":"3457:1:14","valueSize":1},{"declaration":2619,"isOffset":false,"isSlot":false,"src":"3477:1:14","valueSize":1},{"declaration":2621,"isOffset":false,"isSlot":false,"src":"3484:1:14","valueSize":1},{"declaration":2624,"isOffset":false,"isSlot":false,"src":"3429:6:14","valueSize":1}],"flags":["memory-safe"],"id":2634,"nodeType":"InlineAssembly","src":"3390:108:14"}]},"documentation":{"id":2617,"nodeType":"StructuredDocumentation","src":"2692:383:14","text":" @dev Version of divUp when the input is raw (i.e., already \"inflated\"). For instance,\n invariant * invariant (36 decimals) vs. invariant.mulDown(invariant) (18 decimal FP).\n This can occur in calculations with many successive multiplications and divisions, and\n we want to minimize the number of operations by avoiding unnecessary scaling by ONE."},"id":2636,"implemented":true,"kind":"function","modifiers":[],"name":"divUpRaw","nameLocation":"3089:8:14","nodeType":"FunctionDefinition","parameters":{"id":2622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2619,"mutability":"mutable","name":"a","nameLocation":"3106:1:14","nodeType":"VariableDeclaration","scope":2636,"src":"3098:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2618,"name":"uint256","nodeType":"ElementaryTypeName","src":"3098:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2621,"mutability":"mutable","name":"b","nameLocation":"3117:1:14","nodeType":"VariableDeclaration","scope":2636,"src":"3109:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2620,"name":"uint256","nodeType":"ElementaryTypeName","src":"3109:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3097:22:14"},"returnParameters":{"id":2625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2624,"mutability":"mutable","name":"result","nameLocation":"3151:6:14","nodeType":"VariableDeclaration","scope":2636,"src":"3143:14:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2623,"name":"uint256","nodeType":"ElementaryTypeName","src":"3143:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3142:16:14"},"scope":2790,"src":"3080:424:14","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2711,"nodeType":"Block","src":"3807:723:14","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2646,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2641,"src":"3975:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2647,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2502,"src":"3980:3:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3975:8:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2652,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2641,"src":"4028:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2653,"name":"TWO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2507,"src":"4033:3:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4028:8:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2663,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2661,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2641,"src":"4093:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2662,"name":"FOUR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"4098:4:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4093:9:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2707,"nodeType":"Block","src":"4209:315:14","statements":[{"assignments":[2678],"declarations":[{"constant":false,"id":2678,"mutability":"mutable","name":"raw","nameLocation":"4231:3:14","nodeType":"VariableDeclaration","scope":2707,"src":"4223:11:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2677,"name":"uint256","nodeType":"ElementaryTypeName","src":"4223:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2684,"initialValue":{"arguments":[{"id":2681,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2639,"src":"4252:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2682,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2641,"src":"4255:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":2679,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4146,"src":"4237:10:14","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LogExpMath_$4146_$","typeString":"type(library LogExpMath)"}},"id":2680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4248:3:14","memberName":"pow","nodeType":"MemberAccess","referencedDeclaration":3049,"src":"4237:14:14","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4237:20:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4223:34:14"},{"assignments":[2686],"declarations":[{"constant":false,"id":2686,"mutability":"mutable","name":"maxError","nameLocation":"4279:8:14","nodeType":"VariableDeclaration","scope":2707,"src":"4271:16:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2685,"name":"uint256","nodeType":"ElementaryTypeName","src":"4271:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2693,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":2688,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2678,"src":"4296:3:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2689,"name":"MAX_POW_RELATIVE_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2515,"src":"4301:22:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2687,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2552,"src":"4290:5:14","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2690,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4290:34:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":2691,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4327:1:14","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4290:38:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4271:57:14"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2694,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2678,"src":"4347:3:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":2695,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2686,"src":"4353:8:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4347:14:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2705,"nodeType":"Block","src":"4410:104:14","statements":[{"id":2704,"nodeType":"UncheckedBlock","src":"4428:72:14","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2700,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2678,"src":"4467:3:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":2701,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2686,"src":"4473:8:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4467:14:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2645,"id":2703,"nodeType":"Return","src":"4460:21:14"}]}]},"id":2706,"nodeType":"IfStatement","src":"4343:171:14","trueBody":{"id":2699,"nodeType":"Block","src":"4363:41:14","statements":[{"expression":{"hexValue":"30","id":2697,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4388:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":2645,"id":2698,"nodeType":"Return","src":"4381:8:14"}]}}]},"id":2708,"nodeType":"IfStatement","src":"4089:435:14","trueBody":{"id":2676,"nodeType":"Block","src":"4104:99:14","statements":[{"assignments":[2665],"declarations":[{"constant":false,"id":2665,"mutability":"mutable","name":"square","nameLocation":"4126:6:14","nodeType":"VariableDeclaration","scope":2676,"src":"4118:14:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2664,"name":"uint256","nodeType":"ElementaryTypeName","src":"4118:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2670,"initialValue":{"arguments":[{"id":2667,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2639,"src":"4143:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2668,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2639,"src":"4146:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2666,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2535,"src":"4135:7:14","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4135:13:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4118:30:14"},{"expression":{"arguments":[{"id":2672,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2665,"src":"4177:6:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2673,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2665,"src":"4185:6:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2671,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2535,"src":"4169:7:14","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4169:23:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2645,"id":2675,"nodeType":"Return","src":"4162:30:14"}]}},"id":2709,"nodeType":"IfStatement","src":"4024:500:14","trueBody":{"id":2660,"nodeType":"Block","src":"4038:45:14","statements":[{"expression":{"arguments":[{"id":2656,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2639,"src":"4067:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2657,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2639,"src":"4070:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2655,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2535,"src":"4059:7:14","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4059:13:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2645,"id":2659,"nodeType":"Return","src":"4052:20:14"}]}},"id":2710,"nodeType":"IfStatement","src":"3971:553:14","trueBody":{"id":2651,"nodeType":"Block","src":"3985:33:14","statements":[{"expression":{"id":2649,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2639,"src":"4006:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2645,"id":2650,"nodeType":"Return","src":"3999:8:14"}]}}]},"documentation":{"id":2637,"nodeType":"StructuredDocumentation","src":"3510:221:14","text":" @dev Returns x^y, assuming both are fixed point numbers, rounding down. The result is guaranteed to not be above\n the true value (that is, the error function expected - actual is always positive)."},"id":2712,"implemented":true,"kind":"function","modifiers":[],"name":"powDown","nameLocation":"3745:7:14","nodeType":"FunctionDefinition","parameters":{"id":2642,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2639,"mutability":"mutable","name":"x","nameLocation":"3761:1:14","nodeType":"VariableDeclaration","scope":2712,"src":"3753:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2638,"name":"uint256","nodeType":"ElementaryTypeName","src":"3753:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2641,"mutability":"mutable","name":"y","nameLocation":"3772:1:14","nodeType":"VariableDeclaration","scope":2712,"src":"3764:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2640,"name":"uint256","nodeType":"ElementaryTypeName","src":"3764:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3752:22:14"},"returnParameters":{"id":2645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2644,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2712,"src":"3798:7:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2643,"name":"uint256","nodeType":"ElementaryTypeName","src":"3798:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3797:9:14"},"scope":2790,"src":"3736:794:14","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2778,"nodeType":"Block","src":"4829:568:14","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2722,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2717,"src":"4997:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2723,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2502,"src":"5002:3:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4997:8:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2728,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2717,"src":"5050:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2729,"name":"TWO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2507,"src":"5055:3:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5050:8:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2737,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2717,"src":"5113:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2738,"name":"FOUR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"5118:4:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5113:9:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2774,"nodeType":"Block","src":"5225:166:14","statements":[{"assignments":[2754],"declarations":[{"constant":false,"id":2754,"mutability":"mutable","name":"raw","nameLocation":"5247:3:14","nodeType":"VariableDeclaration","scope":2774,"src":"5239:11:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2753,"name":"uint256","nodeType":"ElementaryTypeName","src":"5239:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2760,"initialValue":{"arguments":[{"id":2757,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2715,"src":"5268:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2758,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2717,"src":"5271:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":2755,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4146,"src":"5253:10:14","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LogExpMath_$4146_$","typeString":"type(library LogExpMath)"}},"id":2756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5264:3:14","memberName":"pow","nodeType":"MemberAccess","referencedDeclaration":3049,"src":"5253:14:14","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5253:20:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5239:34:14"},{"assignments":[2762],"declarations":[{"constant":false,"id":2762,"mutability":"mutable","name":"maxError","nameLocation":"5295:8:14","nodeType":"VariableDeclaration","scope":2774,"src":"5287:16:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2761,"name":"uint256","nodeType":"ElementaryTypeName","src":"5287:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2769,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":2764,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2754,"src":"5312:3:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2765,"name":"MAX_POW_RELATIVE_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2515,"src":"5317:22:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2763,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2552,"src":"5306:5:14","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2766,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5306:34:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":2767,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5343:1:14","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5306:38:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5287:57:14"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2770,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2754,"src":"5366:3:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":2771,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2762,"src":"5372:8:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5366:14:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2721,"id":2773,"nodeType":"Return","src":"5359:21:14"}]},"id":2775,"nodeType":"IfStatement","src":"5109:282:14","trueBody":{"id":2752,"nodeType":"Block","src":"5124:95:14","statements":[{"assignments":[2741],"declarations":[{"constant":false,"id":2741,"mutability":"mutable","name":"square","nameLocation":"5146:6:14","nodeType":"VariableDeclaration","scope":2752,"src":"5138:14:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2740,"name":"uint256","nodeType":"ElementaryTypeName","src":"5138:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2746,"initialValue":{"arguments":[{"id":2743,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2715,"src":"5161:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2744,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2715,"src":"5164:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2742,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2552,"src":"5155:5:14","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2745,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5155:11:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5138:28:14"},{"expression":{"arguments":[{"id":2748,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2741,"src":"5193:6:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2749,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2741,"src":"5201:6:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2747,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2552,"src":"5187:5:14","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5187:21:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2721,"id":2751,"nodeType":"Return","src":"5180:28:14"}]}},"id":2776,"nodeType":"IfStatement","src":"5046:345:14","trueBody":{"id":2736,"nodeType":"Block","src":"5060:43:14","statements":[{"expression":{"arguments":[{"id":2732,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2715,"src":"5087:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2733,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2715,"src":"5090:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2731,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2552,"src":"5081:5:14","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2734,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5081:11:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2721,"id":2735,"nodeType":"Return","src":"5074:18:14"}]}},"id":2777,"nodeType":"IfStatement","src":"4993:398:14","trueBody":{"id":2727,"nodeType":"Block","src":"5007:33:14","statements":[{"expression":{"id":2725,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2715,"src":"5028:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2721,"id":2726,"nodeType":"Return","src":"5021:8:14"}]}}]},"documentation":{"id":2713,"nodeType":"StructuredDocumentation","src":"4536:219:14","text":" @dev Returns x^y, assuming both are fixed point numbers, rounding up. The result is guaranteed to not be below\n the true value (that is, the error function expected - actual is always negative)."},"id":2779,"implemented":true,"kind":"function","modifiers":[],"name":"powUp","nameLocation":"4769:5:14","nodeType":"FunctionDefinition","parameters":{"id":2718,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2715,"mutability":"mutable","name":"x","nameLocation":"4783:1:14","nodeType":"VariableDeclaration","scope":2779,"src":"4775:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2714,"name":"uint256","nodeType":"ElementaryTypeName","src":"4775:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2717,"mutability":"mutable","name":"y","nameLocation":"4794:1:14","nodeType":"VariableDeclaration","scope":2779,"src":"4786:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2716,"name":"uint256","nodeType":"ElementaryTypeName","src":"4786:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4774:22:14"},"returnParameters":{"id":2721,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2720,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2779,"src":"4820:7:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2719,"name":"uint256","nodeType":"ElementaryTypeName","src":"4820:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4819:9:14"},"scope":2790,"src":"4760:637:14","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2788,"nodeType":"Block","src":"5750:175:14","statements":[{"AST":{"nativeSrc":"5857:62:14","nodeType":"YulBlock","src":"5857:62:14","statements":[{"nativeSrc":"5871:38:14","nodeType":"YulAssignment","src":"5871:38:14","value":{"arguments":[{"arguments":[{"name":"x","nativeSrc":"5888:1:14","nodeType":"YulIdentifier","src":"5888:1:14"},{"name":"ONE","nativeSrc":"5891:3:14","nodeType":"YulIdentifier","src":"5891:3:14"}],"functionName":{"name":"lt","nativeSrc":"5885:2:14","nodeType":"YulIdentifier","src":"5885:2:14"},"nativeSrc":"5885:10:14","nodeType":"YulFunctionCall","src":"5885:10:14"},{"arguments":[{"name":"ONE","nativeSrc":"5901:3:14","nodeType":"YulIdentifier","src":"5901:3:14"},{"name":"x","nativeSrc":"5906:1:14","nodeType":"YulIdentifier","src":"5906:1:14"}],"functionName":{"name":"sub","nativeSrc":"5897:3:14","nodeType":"YulIdentifier","src":"5897:3:14"},"nativeSrc":"5897:11:14","nodeType":"YulFunctionCall","src":"5897:11:14"}],"functionName":{"name":"mul","nativeSrc":"5881:3:14","nodeType":"YulIdentifier","src":"5881:3:14"},"nativeSrc":"5881:28:14","nodeType":"YulFunctionCall","src":"5881:28:14"},"variableNames":[{"name":"result","nativeSrc":"5871:6:14","nodeType":"YulIdentifier","src":"5871:6:14"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":2502,"isOffset":false,"isSlot":false,"src":"5891:3:14","valueSize":1},{"declaration":2502,"isOffset":false,"isSlot":false,"src":"5901:3:14","valueSize":1},{"declaration":2785,"isOffset":false,"isSlot":false,"src":"5871:6:14","valueSize":1},{"declaration":2782,"isOffset":false,"isSlot":false,"src":"5888:1:14","valueSize":1},{"declaration":2782,"isOffset":false,"isSlot":false,"src":"5906:1:14","valueSize":1}],"flags":["memory-safe"],"id":2787,"nodeType":"InlineAssembly","src":"5832:87:14"}]},"documentation":{"id":2780,"nodeType":"StructuredDocumentation","src":"5403:272:14","text":" @dev Returns the complement of a value (1 - x), capped to 0 if x is larger than 1.\n Useful when computing the complement for values with some level of relative error, as it strips this error and\n prevents intermediate negative values."},"id":2789,"implemented":true,"kind":"function","modifiers":[],"name":"complement","nameLocation":"5689:10:14","nodeType":"FunctionDefinition","parameters":{"id":2783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2782,"mutability":"mutable","name":"x","nameLocation":"5708:1:14","nodeType":"VariableDeclaration","scope":2789,"src":"5700:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2781,"name":"uint256","nodeType":"ElementaryTypeName","src":"5700:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5699:11:14"},"returnParameters":{"id":2786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2785,"mutability":"mutable","name":"result","nameLocation":"5742:6:14","nodeType":"VariableDeclaration","scope":2789,"src":"5734:14:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2784,"name":"uint256","nodeType":"ElementaryTypeName","src":"5734:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5733:16:14"},"scope":2790,"src":"5680:245:14","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":2791,"src":"239:5688:14","usedErrors":[2499],"usedEvents":[]}],"src":"46:5882:14"},"id":14},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol","exportedSymbols":{"LogExpMath":[4146]},"id":4147,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":2792,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:15"},{"abstract":false,"baseContracts":[],"canonicalName":"LogExpMath","contractDependencies":[],"contractKind":"library","documentation":{"id":2793,"nodeType":"StructuredDocumentation","src":"79:515:15","text":" @dev Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument).\n Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural\n exponentiation and logarithm (where the base is Euler's number).\n All math operations are unchecked in order to save gas.\n @author Fernando Martinelli - @fernandomartinelli\n @author Sergio Yuhjtman - @sergioyuhjtman\n @author Daniel Fernandez - @dmf7z"},"fullyImplemented":true,"id":4146,"linearizedBaseContracts":[4146],"name":"LogExpMath","nameLocation":"603:10:15","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2794,"nodeType":"StructuredDocumentation","src":"620:79:15","text":"@notice This error is thrown when a base is not within an acceptable range."},"errorSelector":"022701e0","id":2796,"name":"BaseOutOfBounds","nameLocation":"710:15:15","nodeType":"ErrorDefinition","parameters":{"id":2795,"nodeType":"ParameterList","parameters":[],"src":"725:2:15"},"src":"704:24:15"},{"documentation":{"id":2797,"nodeType":"StructuredDocumentation","src":"734:83:15","text":"@notice This error is thrown when a exponent is not within an acceptable range."},"errorSelector":"d8317311","id":2799,"name":"ExponentOutOfBounds","nameLocation":"828:19:15","nodeType":"ErrorDefinition","parameters":{"id":2798,"nodeType":"ParameterList","parameters":[],"src":"847:2:15"},"src":"822:28:15"},{"documentation":{"id":2800,"nodeType":"StructuredDocumentation","src":"856:96:15","text":"@notice This error is thrown when the exponent * ln(base) is not within an acceptable range."},"errorSelector":"a2f9f7e3","id":2802,"name":"ProductOutOfBounds","nameLocation":"963:18:15","nodeType":"ErrorDefinition","parameters":{"id":2801,"nodeType":"ParameterList","parameters":[],"src":"981:2:15"},"src":"957:27:15"},{"documentation":{"id":2803,"nodeType":"StructuredDocumentation","src":"990:109:15","text":"@notice This error is thrown when an exponent used in the exp function is not within an acceptable range."},"errorSelector":"d4794efd","id":2805,"name":"InvalidExponent","nameLocation":"1110:15:15","nodeType":"ErrorDefinition","parameters":{"id":2804,"nodeType":"ParameterList","parameters":[],"src":"1125:2:15"},"src":"1104:24:15"},{"documentation":{"id":2806,"nodeType":"StructuredDocumentation","src":"1134:119:15","text":"@notice This error is thrown when a variable or result is not within the acceptable bounds defined in the function."},"errorSelector":"b4120f14","id":2808,"name":"OutOfBounds","nameLocation":"1264:11:15","nodeType":"ErrorDefinition","parameters":{"id":2807,"nodeType":"ParameterList","parameters":[],"src":"1275:2:15"},"src":"1258:20:15"},{"constant":true,"id":2811,"mutability":"constant","name":"ONE_18","nameLocation":"1555:6:15","nodeType":"VariableDeclaration","scope":4146,"src":"1539:29:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2809,"name":"int256","nodeType":"ElementaryTypeName","src":"1539:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653138","id":2810,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1564:4:15","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"internal"},{"constant":true,"id":2814,"mutability":"constant","name":"ONE_20","nameLocation":"1745:6:15","nodeType":"VariableDeclaration","scope":4146,"src":"1729:29:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2812,"name":"int256","nodeType":"ElementaryTypeName","src":"1729:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653230","id":2813,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1754:4:15","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000_by_1","typeString":"int_const 100000000000000000000"},"value":"1e20"},"visibility":"internal"},{"constant":true,"id":2817,"mutability":"constant","name":"ONE_36","nameLocation":"1780:6:15","nodeType":"VariableDeclaration","scope":4146,"src":"1764:29:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2815,"name":"int256","nodeType":"ElementaryTypeName","src":"1764:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653336","id":2816,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1789:4:15","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(29 digits omitted)...0000"},"value":"1e36"},"visibility":"internal"},{"constant":true,"id":2820,"mutability":"constant","name":"MAX_NATURAL_EXPONENT","nameLocation":"2326:20:15","nodeType":"VariableDeclaration","scope":4146,"src":"2310:45:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2818,"name":"int256","nodeType":"ElementaryTypeName","src":"2310:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313330653138","id":2819,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2349:6:15","typeDescriptions":{"typeIdentifier":"t_rational_130000000000000000000_by_1","typeString":"int_const 130000000000000000000"},"value":"130e18"},"visibility":"internal"},{"constant":true,"id":2824,"mutability":"constant","name":"MIN_NATURAL_EXPONENT","nameLocation":"2377:20:15","nodeType":"VariableDeclaration","scope":4146,"src":"2361:45:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2821,"name":"int256","nodeType":"ElementaryTypeName","src":"2361:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"id":2823,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"2400:6:15","subExpression":{"hexValue":"3431653138","id":2822,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2401:5:15","typeDescriptions":{"typeIdentifier":"t_rational_41000000000000000000_by_1","typeString":"int_const 41000000000000000000"},"value":"41e18"},"typeDescriptions":{"typeIdentifier":"t_rational_minus_41000000000000000000_by_1","typeString":"int_const -41000000000000000000"}},"visibility":"internal"},{"constant":true,"id":2829,"mutability":"constant","name":"LN_36_LOWER_BOUND","nameLocation":"2573:17:15","nodeType":"VariableDeclaration","scope":4146,"src":"2557:49:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2825,"name":"int256","nodeType":"ElementaryTypeName","src":"2557:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":2828,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":2826,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"2593:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31653137","id":2827,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2602:4:15","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000_by_1","typeString":"int_const 100000000000000000"},"value":"1e17"},"src":"2593:13:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":true,"id":2834,"mutability":"constant","name":"LN_36_UPPER_BOUND","nameLocation":"2628:17:15","nodeType":"VariableDeclaration","scope":4146,"src":"2612:49:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2830,"name":"int256","nodeType":"ElementaryTypeName","src":"2612:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":2833,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":2831,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"2648:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31653137","id":2832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2657:4:15","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000_by_1","typeString":"int_const 100000000000000000"},"value":"1e17"},"src":"2648:13:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":true,"id":2844,"mutability":"constant","name":"MILD_EXPONENT_BOUND","nameLocation":"2685:19:15","nodeType":"VariableDeclaration","scope":4146,"src":"2668:65:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2835,"name":"uint256","nodeType":"ElementaryTypeName","src":"2668:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2843,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_rational_28948022309329048855892746252171976963317496166410141009864396001978282409984_by_1","typeString":"int_const 2894...(69 digits omitted)...9984"},"id":2838,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":2836,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2707:1:15","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"323534","id":2837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2712:3:15","typeDescriptions":{"typeIdentifier":"t_rational_254_by_1","typeString":"int_const 254"},"value":"254"},"src":"2707:8:15","typeDescriptions":{"typeIdentifier":"t_rational_28948022309329048855892746252171976963317496166410141009864396001978282409984_by_1","typeString":"int_const 2894...(69 digits omitted)...9984"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"arguments":[{"id":2841,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"2726:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":2840,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2718:7:15","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2839,"name":"uint256","nodeType":"ElementaryTypeName","src":"2718:7:15","typeDescriptions":{}}},"id":2842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2718:15:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2707:26:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":2847,"mutability":"constant","name":"x0","nameLocation":"2784:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"2768:42:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2845,"name":"int256","nodeType":"ElementaryTypeName","src":"2768:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313238303030303030303030303030303030303030","id":2846,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2789:21:15","typeDescriptions":{"typeIdentifier":"t_rational_128000000000000000000_by_1","typeString":"int_const 128000000000000000000"},"value":"128000000000000000000"},"visibility":"internal"},{"constant":true,"id":2850,"mutability":"constant","name":"a0","nameLocation":"2840:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"2824:77:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2848,"name":"int256","nodeType":"ElementaryTypeName","src":"2824:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3338383737303834303539393435393530393232323030303030303030303030303030303030303030303030303030303030303030303030","id":2849,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2845:56:15","typeDescriptions":{"typeIdentifier":"t_rational_38877084059945950922200000000000000000000000000000000000_by_1","typeString":"int_const 3887...(48 digits omitted)...0000"},"value":"38877084059945950922200000000000000000000000000000000000"},"visibility":"internal"},{"constant":true,"id":2853,"mutability":"constant","name":"x1","nameLocation":"2948:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"2932:41:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2851,"name":"int256","nodeType":"ElementaryTypeName","src":"2932:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3634303030303030303030303030303030303030","id":2852,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2953:20:15","typeDescriptions":{"typeIdentifier":"t_rational_64000000000000000000_by_1","typeString":"int_const 64000000000000000000"},"value":"64000000000000000000"},"visibility":"internal"},{"constant":true,"id":2856,"mutability":"constant","name":"a1","nameLocation":"3003:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"2987:49:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2854,"name":"int256","nodeType":"ElementaryTypeName","src":"2987:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"36323335313439303830383131363136383832393130303030303030","id":2855,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3008:28:15","typeDescriptions":{"typeIdentifier":"t_rational_6235149080811616882910000000_by_1","typeString":"int_const 6235149080811616882910000000"},"value":"6235149080811616882910000000"},"visibility":"internal"},{"constant":true,"id":2859,"mutability":"constant","name":"x2","nameLocation":"3112:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3096:43:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2857,"name":"int256","nodeType":"ElementaryTypeName","src":"3096:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"33323030303030303030303030303030303030303030","id":2858,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3117:22:15","typeDescriptions":{"typeIdentifier":"t_rational_3200000000000000000000_by_1","typeString":"int_const 3200000000000000000000"},"value":"3200000000000000000000"},"visibility":"internal"},{"constant":true,"id":2862,"mutability":"constant","name":"a2","nameLocation":"3169:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3153:55:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2860,"name":"int256","nodeType":"ElementaryTypeName","src":"3153:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"37383936323936303138323638303639353136313030303030303030303030303030","id":2861,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3174:34:15","typeDescriptions":{"typeIdentifier":"t_rational_7896296018268069516100000000000000_by_1","typeString":"int_const 7896...(26 digits omitted)...0000"},"value":"7896296018268069516100000000000000"},"visibility":"internal"},{"constant":true,"id":2865,"mutability":"constant","name":"x3","nameLocation":"3241:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3225:43:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2863,"name":"int256","nodeType":"ElementaryTypeName","src":"3225:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31363030303030303030303030303030303030303030","id":2864,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3246:22:15","typeDescriptions":{"typeIdentifier":"t_rational_1600000000000000000000_by_1","typeString":"int_const 1600000000000000000000"},"value":"1600000000000000000000"},"visibility":"internal"},{"constant":true,"id":2868,"mutability":"constant","name":"a3","nameLocation":"3298:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3282:48:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2866,"name":"int256","nodeType":"ElementaryTypeName","src":"3282:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"383838363131303532303530373837323633363736303030303030","id":2867,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3303:27:15","typeDescriptions":{"typeIdentifier":"t_rational_888611052050787263676000000_by_1","typeString":"int_const 888611052050787263676000000"},"value":"888611052050787263676000000"},"visibility":"internal"},{"constant":true,"id":2871,"mutability":"constant","name":"x4","nameLocation":"3363:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3347:42:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2869,"name":"int256","nodeType":"ElementaryTypeName","src":"3347:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"383030303030303030303030303030303030303030","id":2870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3368:21:15","typeDescriptions":{"typeIdentifier":"t_rational_800000000000000000000_by_1","typeString":"int_const 800000000000000000000"},"value":"800000000000000000000"},"visibility":"internal"},{"constant":true,"id":2874,"mutability":"constant","name":"a4","nameLocation":"3419:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3403:45:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2872,"name":"int256","nodeType":"ElementaryTypeName","src":"3403:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323938303935373938373034313732383237343734303030","id":2873,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3424:24:15","typeDescriptions":{"typeIdentifier":"t_rational_298095798704172827474000_by_1","typeString":"int_const 298095798704172827474000"},"value":"298095798704172827474000"},"visibility":"internal"},{"constant":true,"id":2877,"mutability":"constant","name":"x5","nameLocation":"3481:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3465:42:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2875,"name":"int256","nodeType":"ElementaryTypeName","src":"3465:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"343030303030303030303030303030303030303030","id":2876,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3486:21:15","typeDescriptions":{"typeIdentifier":"t_rational_400000000000000000000_by_1","typeString":"int_const 400000000000000000000"},"value":"400000000000000000000"},"visibility":"internal"},{"constant":true,"id":2880,"mutability":"constant","name":"a5","nameLocation":"3537:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3521:43:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2878,"name":"int256","nodeType":"ElementaryTypeName","src":"3521:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"35343539383135303033333134343233393037383130","id":2879,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3542:22:15","typeDescriptions":{"typeIdentifier":"t_rational_5459815003314423907810_by_1","typeString":"int_const 5459815003314423907810"},"value":"5459815003314423907810"},"visibility":"internal"},{"constant":true,"id":2883,"mutability":"constant","name":"x6","nameLocation":"3597:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3581:42:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2881,"name":"int256","nodeType":"ElementaryTypeName","src":"3581:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323030303030303030303030303030303030303030","id":2882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3602:21:15","typeDescriptions":{"typeIdentifier":"t_rational_200000000000000000000_by_1","typeString":"int_const 200000000000000000000"},"value":"200000000000000000000"},"visibility":"internal"},{"constant":true,"id":2886,"mutability":"constant","name":"a6","nameLocation":"3653:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3637:42:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2884,"name":"int256","nodeType":"ElementaryTypeName","src":"3637:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"373338393035363039383933303635303232373233","id":2885,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3658:21:15","typeDescriptions":{"typeIdentifier":"t_rational_738905609893065022723_by_1","typeString":"int_const 738905609893065022723"},"value":"738905609893065022723"},"visibility":"internal"},{"constant":true,"id":2889,"mutability":"constant","name":"x7","nameLocation":"3712:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3696:42:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2887,"name":"int256","nodeType":"ElementaryTypeName","src":"3696:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313030303030303030303030303030303030303030","id":2888,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3717:21:15","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000_by_1","typeString":"int_const 100000000000000000000"},"value":"100000000000000000000"},"visibility":"internal"},{"constant":true,"id":2892,"mutability":"constant","name":"a7","nameLocation":"3768:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3752:42:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2890,"name":"int256","nodeType":"ElementaryTypeName","src":"3752:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323731383238313832383435393034353233353336","id":2891,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3773:21:15","typeDescriptions":{"typeIdentifier":"t_rational_271828182845904523536_by_1","typeString":"int_const 271828182845904523536"},"value":"271828182845904523536"},"visibility":"internal"},{"constant":true,"id":2895,"mutability":"constant","name":"x8","nameLocation":"3827:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3811:41:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2893,"name":"int256","nodeType":"ElementaryTypeName","src":"3811:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3530303030303030303030303030303030303030","id":2894,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3832:20:15","typeDescriptions":{"typeIdentifier":"t_rational_50000000000000000000_by_1","typeString":"int_const 50000000000000000000"},"value":"50000000000000000000"},"visibility":"internal"},{"constant":true,"id":2898,"mutability":"constant","name":"a8","nameLocation":"3883:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3867:42:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2896,"name":"int256","nodeType":"ElementaryTypeName","src":"3867:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313634383732313237303730303132383134363835","id":2897,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3888:21:15","typeDescriptions":{"typeIdentifier":"t_rational_164872127070012814685_by_1","typeString":"int_const 164872127070012814685"},"value":"164872127070012814685"},"visibility":"internal"},{"constant":true,"id":2901,"mutability":"constant","name":"x9","nameLocation":"3942:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3926:41:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2899,"name":"int256","nodeType":"ElementaryTypeName","src":"3926:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3235303030303030303030303030303030303030","id":2900,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3947:20:15","typeDescriptions":{"typeIdentifier":"t_rational_25000000000000000000_by_1","typeString":"int_const 25000000000000000000"},"value":"25000000000000000000"},"visibility":"internal"},{"constant":true,"id":2904,"mutability":"constant","name":"a9","nameLocation":"3998:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3982:42:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2902,"name":"int256","nodeType":"ElementaryTypeName","src":"3982:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313238343032353431363638373734313438343037","id":2903,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4003:21:15","typeDescriptions":{"typeIdentifier":"t_rational_128402541668774148407_by_1","typeString":"int_const 128402541668774148407"},"value":"128402541668774148407"},"visibility":"internal"},{"constant":true,"id":2907,"mutability":"constant","name":"x10","nameLocation":"4057:3:15","nodeType":"VariableDeclaration","scope":4146,"src":"4041:42:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2905,"name":"int256","nodeType":"ElementaryTypeName","src":"4041:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3132353030303030303030303030303030303030","id":2906,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4063:20:15","typeDescriptions":{"typeIdentifier":"t_rational_12500000000000000000_by_1","typeString":"int_const 12500000000000000000"},"value":"12500000000000000000"},"visibility":"internal"},{"constant":true,"id":2910,"mutability":"constant","name":"a10","nameLocation":"4114:3:15","nodeType":"VariableDeclaration","scope":4146,"src":"4098:43:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2908,"name":"int256","nodeType":"ElementaryTypeName","src":"4098:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313133333134383435333036363832363331363833","id":2909,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4120:21:15","typeDescriptions":{"typeIdentifier":"t_rational_113314845306682631683_by_1","typeString":"int_const 113314845306682631683"},"value":"113314845306682631683"},"visibility":"internal"},{"constant":true,"id":2913,"mutability":"constant","name":"x11","nameLocation":"4175:3:15","nodeType":"VariableDeclaration","scope":4146,"src":"4159:41:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2911,"name":"int256","nodeType":"ElementaryTypeName","src":"4159:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"36323530303030303030303030303030303030","id":2912,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4181:19:15","typeDescriptions":{"typeIdentifier":"t_rational_6250000000000000000_by_1","typeString":"int_const 6250000000000000000"},"value":"6250000000000000000"},"visibility":"internal"},{"constant":true,"id":2916,"mutability":"constant","name":"a11","nameLocation":"4231:3:15","nodeType":"VariableDeclaration","scope":4146,"src":"4215:43:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2914,"name":"int256","nodeType":"ElementaryTypeName","src":"4215:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313036343439343435383931373835393432393536","id":2915,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4237:21:15","typeDescriptions":{"typeIdentifier":"t_rational_106449445891785942956_by_1","typeString":"int_const 106449445891785942956"},"value":"106449445891785942956"},"visibility":"internal"},{"body":{"id":3048,"nodeType":"Block","src":"4563:2233:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2926,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2921,"src":"4577:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2927,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4582:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4577:6:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2935,"nodeType":"IfStatement","src":"4573:131:15","trueBody":{"id":2934,"nodeType":"Block","src":"4585:119:15","statements":[{"expression":{"arguments":[{"id":2931,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"4686:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":2930,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4678:7:15","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2929,"name":"uint256","nodeType":"ElementaryTypeName","src":"4678:7:15","typeDescriptions":{}}},"id":2932,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4678:15:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2925,"id":2933,"nodeType":"Return","src":"4671:22:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2936,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2919,"src":"4718:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2937,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4723:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4718:6:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2942,"nodeType":"IfStatement","src":"4714:45:15","trueBody":{"id":2941,"nodeType":"Block","src":"4726:33:15","statements":[{"expression":{"hexValue":"30","id":2939,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4747:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":2925,"id":2940,"nodeType":"Return","src":"4740:8:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2943,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2919,"src":"5133:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"323535","id":2944,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5138:3:15","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"src":"5133:8:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":2946,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5145:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5133:13:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2952,"nodeType":"IfStatement","src":"5129:68:15","trueBody":{"id":2951,"nodeType":"Block","src":"5148:49:15","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2948,"name":"BaseOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2796,"src":"5169:15:15","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5169:17:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2950,"nodeType":"RevertStatement","src":"5162:24:15"}]}},{"assignments":[2954],"declarations":[{"constant":false,"id":2954,"mutability":"mutable","name":"x_int256","nameLocation":"5213:8:15","nodeType":"VariableDeclaration","scope":3048,"src":"5206:15:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2953,"name":"int256","nodeType":"ElementaryTypeName","src":"5206:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":2959,"initialValue":{"arguments":[{"id":2957,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2919,"src":"5231:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2956,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5224:6:15","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":2955,"name":"int256","nodeType":"ElementaryTypeName","src":"5224:6:15","typeDescriptions":{}}},"id":2958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5224:9:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5206:27:15"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2960,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2921,"src":"5591:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":2961,"name":"MILD_EXPONENT_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2844,"src":"5596:19:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5591:24:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2967,"nodeType":"IfStatement","src":"5587:83:15","trueBody":{"id":2966,"nodeType":"Block","src":"5617:53:15","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2963,"name":"ExponentOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2799,"src":"5638:19:15","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2964,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5638:21:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2965,"nodeType":"RevertStatement","src":"5631:28:15"}]}},{"assignments":[2969],"declarations":[{"constant":false,"id":2969,"mutability":"mutable","name":"y_int256","nameLocation":"5686:8:15","nodeType":"VariableDeclaration","scope":3048,"src":"5679:15:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2968,"name":"int256","nodeType":"ElementaryTypeName","src":"5679:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":2974,"initialValue":{"arguments":[{"id":2972,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2921,"src":"5704:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2971,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5697:6:15","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":2970,"name":"int256","nodeType":"ElementaryTypeName","src":"5697:6:15","typeDescriptions":{}}},"id":2973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5697:9:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5679:27:15"},{"assignments":[2976],"declarations":[{"constant":false,"id":2976,"mutability":"mutable","name":"logx_times_y","nameLocation":"5724:12:15","nodeType":"VariableDeclaration","scope":3048,"src":"5717:19:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2975,"name":"int256","nodeType":"ElementaryTypeName","src":"5717:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":2977,"nodeType":"VariableDeclarationStatement","src":"5717:19:15"},{"id":3026,"nodeType":"UncheckedBlock","src":"5746:790:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":2980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2978,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2829,"src":"5774:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":2979,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2954,"src":"5794:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"5774:28:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":2983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2981,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2954,"src":"5806:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":2982,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2834,"src":"5817:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"5806:28:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5774:60:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3020,"nodeType":"Block","src":"6418:72:15","statements":[{"expression":{"id":3018,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3012,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2976,"src":"6436:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3017,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3014,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2954,"src":"6455:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3013,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3990,"src":"6451:3:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":3015,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6451:13:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3016,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2969,"src":"6467:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6451:24:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6436:39:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3019,"nodeType":"ExpressionStatement","src":"6436:39:15"}]},"id":3021,"nodeType":"IfStatement","src":"5770:720:15","trueBody":{"id":3011,"nodeType":"Block","src":"5836:576:15","statements":[{"assignments":[2986],"declarations":[{"constant":false,"id":2986,"mutability":"mutable","name":"ln_36_x","nameLocation":"5861:7:15","nodeType":"VariableDeclaration","scope":3011,"src":"5854:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2985,"name":"int256","nodeType":"ElementaryTypeName","src":"5854:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":2990,"initialValue":{"arguments":[{"id":2988,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2954,"src":"5878:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":2987,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4145,"src":"5871:6:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":2989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5871:16:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5854:33:15"},{"expression":{"id":3009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2991,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2976,"src":"6308:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":2997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":2994,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2992,"name":"ln_36_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2986,"src":"6325:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":2993,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"6335:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6325:16:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":2995,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6324:18:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2996,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2969,"src":"6345:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6324:29:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2998,"name":"ln_36_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2986,"src":"6358:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":2999,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"6368:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6358:16:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3001,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6357:18:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3002,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2969,"src":"6378:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6357:29:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3004,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6356:31:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3005,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"6390:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6356:40:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6324:72:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3008,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6323:74:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6308:89:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3010,"nodeType":"ExpressionStatement","src":"6308:89:15"}]}},{"expression":{"id":3024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3022,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2976,"src":"6503:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":3023,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"6519:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6503:22:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3025,"nodeType":"ExpressionStatement","src":"6503:22:15"}]},{"condition":{"id":3035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6613:79:15","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3027,"name":"MIN_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2824,"src":"6615:20:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":3028,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2976,"src":"6639:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6615:36:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3030,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2976,"src":"6655:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":3031,"name":"MAX_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2820,"src":"6671:20:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6655:36:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6615:76:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":3034,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6614:78:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3040,"nodeType":"IfStatement","src":"6609:137:15","trueBody":{"id":3039,"nodeType":"Block","src":"6694:52:15","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3036,"name":"ProductOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2802,"src":"6715:18:15","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6715:20:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3038,"nodeType":"RevertStatement","src":"6708:27:15"}]}},{"expression":{"arguments":[{"arguments":[{"id":3044,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2976,"src":"6775:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3043,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3496,"src":"6771:3:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":3045,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6771:17:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3042,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6763:7:15","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":3041,"name":"uint256","nodeType":"ElementaryTypeName","src":"6763:7:15","typeDescriptions":{}}},"id":3046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6763:26:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2925,"id":3047,"nodeType":"Return","src":"6756:33:15"}]},"documentation":{"id":2917,"nodeType":"StructuredDocumentation","src":"4277:214:15","text":" @dev Exponentiation (x^y) with unsigned 18 decimal fixed point base and exponent.\n Reverts if ln(x) * y is smaller than `MIN_NATURAL_EXPONENT`, or larger than `MAX_NATURAL_EXPONENT`."},"id":3049,"implemented":true,"kind":"function","modifiers":[],"name":"pow","nameLocation":"4505:3:15","nodeType":"FunctionDefinition","parameters":{"id":2922,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2919,"mutability":"mutable","name":"x","nameLocation":"4517:1:15","nodeType":"VariableDeclaration","scope":3049,"src":"4509:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2918,"name":"uint256","nodeType":"ElementaryTypeName","src":"4509:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2921,"mutability":"mutable","name":"y","nameLocation":"4528:1:15","nodeType":"VariableDeclaration","scope":3049,"src":"4520:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2920,"name":"uint256","nodeType":"ElementaryTypeName","src":"4520:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4508:22:15"},"returnParameters":{"id":2925,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2924,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3049,"src":"4554:7:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2923,"name":"uint256","nodeType":"ElementaryTypeName","src":"4554:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4553:9:15"},"scope":4146,"src":"4496:2300:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3495,"nodeType":"Block","src":"7064:6082:15","statements":[{"condition":{"id":3065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"7078:57:15","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3057,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"7080:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3058,"name":"MIN_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2824,"src":"7085:20:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7080:25:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3060,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"7109:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":3061,"name":"MAX_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2820,"src":"7114:20:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7109:25:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7080:54:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":3064,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7079:56:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3070,"nodeType":"IfStatement","src":"7074:112:15","trueBody":{"id":3069,"nodeType":"Block","src":"7137:49:15","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3066,"name":"InvalidExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2805,"src":"7158:15:15","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3067,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7158:17:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3068,"nodeType":"RevertStatement","src":"7151:24:15"}]}},{"assignments":[3072],"declarations":[{"constant":false,"id":3072,"mutability":"mutable","name":"negativeExponent","nameLocation":"7277:16:15","nodeType":"VariableDeclaration","scope":3495,"src":"7272:21:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3071,"name":"bool","nodeType":"ElementaryTypeName","src":"7272:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":3074,"initialValue":{"hexValue":"66616c7365","id":3073,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7296:5:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"7272:29:15"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3075,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"7316:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":3076,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7320:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7316:5:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3089,"nodeType":"IfStatement","src":"7312:417:15","trueBody":{"id":3088,"nodeType":"Block","src":"7323:406:15","statements":[{"id":3083,"nodeType":"UncheckedBlock","src":"7633:49:15","statements":[{"expression":{"id":3081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3078,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"7661:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"7665:2:15","subExpression":{"id":3079,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"7666:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7661:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3082,"nodeType":"ExpressionStatement","src":"7661:6:15"}]},{"expression":{"id":3086,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3084,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3072,"src":"7695:16:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":3085,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7714:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"7695:23:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3087,"nodeType":"ExpressionStatement","src":"7695:23:15"}]}},{"assignments":[3091],"declarations":[{"constant":false,"id":3091,"mutability":"mutable","name":"firstAN","nameLocation":"9037:7:15","nodeType":"VariableDeclaration","scope":3495,"src":"9030:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3090,"name":"int256","nodeType":"ElementaryTypeName","src":"9030:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3092,"nodeType":"VariableDeclarationStatement","src":"9030:14:15"},{"id":3128,"nodeType":"UncheckedBlock","src":"9054:457:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3093,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"9082:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3094,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2847,"src":"9087:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9082:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3107,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3105,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"9171:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3106,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2853,"src":"9176:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9171:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3121,"nodeType":"Block","src":"9256:74:15","statements":[{"expression":{"id":3119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3117,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3091,"src":"9274:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":3118,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9284:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9274:11:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3120,"nodeType":"ExpressionStatement","src":"9274:11:15"}]},"id":3122,"nodeType":"IfStatement","src":"9167:163:15","trueBody":{"id":3116,"nodeType":"Block","src":"9180:70:15","statements":[{"expression":{"id":3110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3108,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"9198:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3109,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2853,"src":"9203:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9198:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3111,"nodeType":"ExpressionStatement","src":"9198:7:15"},{"expression":{"id":3114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3112,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3091,"src":"9223:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3113,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2856,"src":"9233:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9223:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3115,"nodeType":"ExpressionStatement","src":"9223:12:15"}]}},"id":3123,"nodeType":"IfStatement","src":"9078:252:15","trueBody":{"id":3104,"nodeType":"Block","src":"9091:70:15","statements":[{"expression":{"id":3098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3096,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"9109:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3097,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2847,"src":"9114:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9109:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3099,"nodeType":"ExpressionStatement","src":"9109:7:15"},{"expression":{"id":3102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3100,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3091,"src":"9134:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3101,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2850,"src":"9144:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9134:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3103,"nodeType":"ExpressionStatement","src":"9134:12:15"}]}},{"expression":{"id":3126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3124,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"9492:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":3125,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9497:3:15","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"9492:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3127,"nodeType":"ExpressionStatement","src":"9492:8:15"}]},{"assignments":[3130],"declarations":[{"constant":false,"id":3130,"mutability":"mutable","name":"product","nameLocation":"9730:7:15","nodeType":"VariableDeclaration","scope":3495,"src":"9723:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3129,"name":"int256","nodeType":"ElementaryTypeName","src":"9723:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3132,"initialValue":{"id":3131,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"9740:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"9723:23:15"},{"id":3277,"nodeType":"UncheckedBlock","src":"9757:957:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3133,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"9785:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3134,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2859,"src":"9790:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9785:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3150,"nodeType":"IfStatement","src":"9781:104:15","trueBody":{"id":3149,"nodeType":"Block","src":"9794:91:15","statements":[{"expression":{"id":3138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3136,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"9812:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3137,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2859,"src":"9817:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9812:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3139,"nodeType":"ExpressionStatement","src":"9812:7:15"},{"expression":{"id":3147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3140,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"9837:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3141,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"9848:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3142,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2862,"src":"9858:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9848:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3144,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9847:14:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3145,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"9864:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9847:23:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9837:33:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3148,"nodeType":"ExpressionStatement","src":"9837:33:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3151,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"9902:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3152,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2865,"src":"9907:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9902:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3168,"nodeType":"IfStatement","src":"9898:104:15","trueBody":{"id":3167,"nodeType":"Block","src":"9911:91:15","statements":[{"expression":{"id":3156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3154,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"9929:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3155,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2865,"src":"9934:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9929:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3157,"nodeType":"ExpressionStatement","src":"9929:7:15"},{"expression":{"id":3165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3158,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"9954:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3159,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"9965:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3160,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2868,"src":"9975:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9965:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3162,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9964:14:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3163,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"9981:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9964:23:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9954:33:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3166,"nodeType":"ExpressionStatement","src":"9954:33:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3169,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"10019:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3170,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2871,"src":"10024:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10019:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3186,"nodeType":"IfStatement","src":"10015:104:15","trueBody":{"id":3185,"nodeType":"Block","src":"10028:91:15","statements":[{"expression":{"id":3174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3172,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"10046:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3173,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2871,"src":"10051:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10046:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3175,"nodeType":"ExpressionStatement","src":"10046:7:15"},{"expression":{"id":3183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3176,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"10071:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3177,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"10082:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3178,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2874,"src":"10092:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10082:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3180,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10081:14:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3181,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"10098:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10081:23:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10071:33:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3184,"nodeType":"ExpressionStatement","src":"10071:33:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3187,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"10136:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3188,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2877,"src":"10141:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10136:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3204,"nodeType":"IfStatement","src":"10132:104:15","trueBody":{"id":3203,"nodeType":"Block","src":"10145:91:15","statements":[{"expression":{"id":3192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3190,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"10163:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3191,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2877,"src":"10168:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10163:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3193,"nodeType":"ExpressionStatement","src":"10163:7:15"},{"expression":{"id":3201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3194,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"10188:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3195,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"10199:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3196,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2880,"src":"10209:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10199:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3198,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10198:14:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3199,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"10215:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10198:23:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10188:33:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3202,"nodeType":"ExpressionStatement","src":"10188:33:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3205,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"10253:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3206,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2883,"src":"10258:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10253:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3222,"nodeType":"IfStatement","src":"10249:104:15","trueBody":{"id":3221,"nodeType":"Block","src":"10262:91:15","statements":[{"expression":{"id":3210,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3208,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"10280:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3209,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2883,"src":"10285:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10280:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3211,"nodeType":"ExpressionStatement","src":"10280:7:15"},{"expression":{"id":3219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3212,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"10305:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3213,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"10316:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3214,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2886,"src":"10326:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10316:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3216,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10315:14:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3217,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"10332:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10315:23:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10305:33:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3220,"nodeType":"ExpressionStatement","src":"10305:33:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3223,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"10370:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3224,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2889,"src":"10375:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10370:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3240,"nodeType":"IfStatement","src":"10366:104:15","trueBody":{"id":3239,"nodeType":"Block","src":"10379:91:15","statements":[{"expression":{"id":3228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3226,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"10397:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3227,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2889,"src":"10402:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10397:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3229,"nodeType":"ExpressionStatement","src":"10397:7:15"},{"expression":{"id":3237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3230,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"10422:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3231,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"10433:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3232,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2892,"src":"10443:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10433:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3234,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10432:14:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3235,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"10449:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10432:23:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10422:33:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3238,"nodeType":"ExpressionStatement","src":"10422:33:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3241,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"10487:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3242,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2895,"src":"10492:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10487:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3258,"nodeType":"IfStatement","src":"10483:104:15","trueBody":{"id":3257,"nodeType":"Block","src":"10496:91:15","statements":[{"expression":{"id":3246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3244,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"10514:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3245,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2895,"src":"10519:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10514:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3247,"nodeType":"ExpressionStatement","src":"10514:7:15"},{"expression":{"id":3255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3248,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"10539:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3249,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"10550:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3250,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2898,"src":"10560:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10550:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3252,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10549:14:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3253,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"10566:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10549:23:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10539:33:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3256,"nodeType":"ExpressionStatement","src":"10539:33:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3259,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"10604:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3260,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2901,"src":"10609:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10604:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3276,"nodeType":"IfStatement","src":"10600:104:15","trueBody":{"id":3275,"nodeType":"Block","src":"10613:91:15","statements":[{"expression":{"id":3264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3262,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"10631:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3263,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2901,"src":"10636:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10631:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3265,"nodeType":"ExpressionStatement","src":"10631:7:15"},{"expression":{"id":3273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3266,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"10656:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3267,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"10667:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3268,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2904,"src":"10677:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10667:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3270,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10666:14:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3271,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"10683:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10666:23:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10656:33:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3274,"nodeType":"ExpressionStatement","src":"10656:33:15"}]}}]},{"assignments":[3279],"declarations":[{"constant":false,"id":3279,"mutability":"mutable","name":"seriesSum","nameLocation":"11025:9:15","nodeType":"VariableDeclaration","scope":3495,"src":"11018:16:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3278,"name":"int256","nodeType":"ElementaryTypeName","src":"11018:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3281,"initialValue":{"id":3280,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"11037:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"11018:25:15"},{"assignments":[3283],"declarations":[{"constant":false,"id":3283,"mutability":"mutable","name":"term","nameLocation":"11115:4:15","nodeType":"VariableDeclaration","scope":3495,"src":"11108:11:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3282,"name":"int256","nodeType":"ElementaryTypeName","src":"11108:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3284,"nodeType":"VariableDeclarationStatement","src":"11108:11:15"},{"expression":{"id":3287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3285,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11228:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3286,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"11235:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11228:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3288,"nodeType":"ExpressionStatement","src":"11228:8:15"},{"id":3494,"nodeType":"UncheckedBlock","src":"11246:1894:15","statements":[{"expression":{"id":3291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3289,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"11270:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3290,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11283:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11270:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3292,"nodeType":"ExpressionStatement","src":"11270:17:15"},{"expression":{"id":3303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3293,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11536:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3294,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11545:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3295,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"11552:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11545:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3297,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11544:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3298,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"11557:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11544:19:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3300,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11543:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":3301,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11567:1:15","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"11543:25:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11536:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3304,"nodeType":"ExpressionStatement","src":"11536:32:15"},{"expression":{"id":3307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3305,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"11582:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3306,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11595:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11582:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3308,"nodeType":"ExpressionStatement","src":"11582:17:15"},{"expression":{"id":3319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3309,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11614:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3310,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11623:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3311,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"11630:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11623:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3313,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11622:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3314,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"11635:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11622:19:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3316,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11621:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":3317,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11645:1:15","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"11621:25:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11614:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3320,"nodeType":"ExpressionStatement","src":"11614:32:15"},{"expression":{"id":3323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3321,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"11660:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3322,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11673:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11660:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3324,"nodeType":"ExpressionStatement","src":"11660:17:15"},{"expression":{"id":3335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3325,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11692:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3326,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11701:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3327,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"11708:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11701:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3329,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11700:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3330,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"11713:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11700:19:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3332,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11699:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"34","id":3333,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11723:1:15","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"11699:25:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11692:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3336,"nodeType":"ExpressionStatement","src":"11692:32:15"},{"expression":{"id":3339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3337,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"11738:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3338,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11751:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11738:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3340,"nodeType":"ExpressionStatement","src":"11738:17:15"},{"expression":{"id":3351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3341,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11770:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3342,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11779:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3343,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"11786:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11779:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3345,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11778:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3346,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"11791:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11778:19:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3348,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11777:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":3349,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11801:1:15","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"11777:25:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11770:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3352,"nodeType":"ExpressionStatement","src":"11770:32:15"},{"expression":{"id":3355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3353,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"11816:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3354,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11829:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11816:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3356,"nodeType":"ExpressionStatement","src":"11816:17:15"},{"expression":{"id":3367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3357,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11848:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3363,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3358,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11857:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3359,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"11864:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11857:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3361,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11856:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3362,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"11869:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11856:19:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3364,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11855:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"36","id":3365,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11879:1:15","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"11855:25:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11848:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3368,"nodeType":"ExpressionStatement","src":"11848:32:15"},{"expression":{"id":3371,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3369,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"11894:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3370,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11907:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11894:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3372,"nodeType":"ExpressionStatement","src":"11894:17:15"},{"expression":{"id":3383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3373,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11926:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3374,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11935:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3375,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"11942:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11935:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3377,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11934:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3378,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"11947:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11934:19:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3380,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11933:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":3381,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11957:1:15","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"11933:25:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11926:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3384,"nodeType":"ExpressionStatement","src":"11926:32:15"},{"expression":{"id":3387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3385,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"11972:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3386,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11985:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11972:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3388,"nodeType":"ExpressionStatement","src":"11972:17:15"},{"expression":{"id":3399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3389,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12004:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3398,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3390,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12013:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3391,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"12020:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12013:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3393,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12012:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3394,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"12025:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12012:19:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3396,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12011:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"38","id":3397,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12035:1:15","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"12011:25:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12004:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3400,"nodeType":"ExpressionStatement","src":"12004:32:15"},{"expression":{"id":3403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3401,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"12050:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3402,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12063:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12050:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3404,"nodeType":"ExpressionStatement","src":"12050:17:15"},{"expression":{"id":3415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3405,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12082:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3406,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12091:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3407,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"12098:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12091:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3409,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12090:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3410,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"12103:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12090:19:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3412,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12089:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":3413,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12113:1:15","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"12089:25:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12082:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3416,"nodeType":"ExpressionStatement","src":"12082:32:15"},{"expression":{"id":3419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3417,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"12128:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3418,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12141:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12128:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3420,"nodeType":"ExpressionStatement","src":"12128:17:15"},{"expression":{"id":3431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3421,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12160:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3422,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12169:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3423,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"12176:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12169:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3425,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12168:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3426,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"12181:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12168:19:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3428,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12167:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3130","id":3429,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12191:2:15","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"12167:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12160:33:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3432,"nodeType":"ExpressionStatement","src":"12160:33:15"},{"expression":{"id":3435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3433,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"12207:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3434,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12220:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12207:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3436,"nodeType":"ExpressionStatement","src":"12207:17:15"},{"expression":{"id":3447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3437,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12239:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3438,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12248:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3439,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"12255:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12248:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3441,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12247:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3442,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"12260:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12247:19:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3444,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12246:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":3445,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12270:2:15","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"12246:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12239:33:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3448,"nodeType":"ExpressionStatement","src":"12239:33:15"},{"expression":{"id":3451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3449,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"12286:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3450,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12299:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12286:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3452,"nodeType":"ExpressionStatement","src":"12286:17:15"},{"expression":{"id":3463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3453,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12318:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3454,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12327:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3455,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"12334:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12327:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3457,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12326:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3458,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"12339:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12326:19:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3460,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12325:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3132","id":3461,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12349:2:15","typeDescriptions":{"typeIdentifier":"t_rational_12_by_1","typeString":"int_const 12"},"value":"12"},"src":"12325:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12318:33:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3464,"nodeType":"ExpressionStatement","src":"12318:33:15"},{"expression":{"id":3467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3465,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"12365:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3466,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12378:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12365:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3468,"nodeType":"ExpressionStatement","src":"12365:17:15"},{"assignments":[3470],"declarations":[{"constant":false,"id":3470,"mutability":"mutable","name":"result","nameLocation":"12914:6:15","nodeType":"VariableDeclaration","scope":3494,"src":"12907:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3469,"name":"int256","nodeType":"ElementaryTypeName","src":"12907:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3483,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3476,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3471,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"12926:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3472,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"12936:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12926:19:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3474,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12925:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3475,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"12949:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12925:30:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3477,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12924:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3478,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3091,"src":"12959:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12924:42:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3480,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12923:44:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"313030","id":3481,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12970:3:15","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"12923:50:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"12907:66:15"},{"expression":{"condition":{"id":3484,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3072,"src":"13075:16:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":3491,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3470,"src":"13123:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"13075:54:15","trueExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3487,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":3485,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"13095:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3486,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"13104:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13095:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3488,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"13094:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3489,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3470,"src":"13114:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13094:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":3056,"id":3493,"nodeType":"Return","src":"13068:61:15"}]}]},"documentation":{"id":3050,"nodeType":"StructuredDocumentation","src":"6802:203:15","text":" @dev Natural exponentiation (e^x) with signed 18 decimal fixed point exponent.\n Reverts if `x` is smaller than MIN_NATURAL_EXPONENT, or larger than `MAX_NATURAL_EXPONENT`."},"id":3496,"implemented":true,"kind":"function","modifiers":[],"name":"exp","nameLocation":"7019:3:15","nodeType":"FunctionDefinition","parameters":{"id":3053,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3052,"mutability":"mutable","name":"x","nameLocation":"7030:1:15","nodeType":"VariableDeclaration","scope":3496,"src":"7023:8:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3051,"name":"int256","nodeType":"ElementaryTypeName","src":"7023:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"7022:10:15"},"returnParameters":{"id":3056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3055,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3496,"src":"7056:6:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3054,"name":"int256","nodeType":"ElementaryTypeName","src":"7056:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"7055:8:15"},"scope":4146,"src":"7010:6136:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3569,"nodeType":"Block","src":"13315:861:15","statements":[{"assignments":[3507],"declarations":[{"constant":false,"id":3507,"mutability":"mutable","name":"logBase","nameLocation":"13552:7:15","nodeType":"VariableDeclaration","scope":3569,"src":"13545:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3506,"name":"int256","nodeType":"ElementaryTypeName","src":"13545:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3508,"nodeType":"VariableDeclarationStatement","src":"13545:14:15"},{"id":3533,"nodeType":"UncheckedBlock","src":"13569:214:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3509,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2829,"src":"13597:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3510,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3501,"src":"13617:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13597:24:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3512,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3501,"src":"13625:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3513,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2834,"src":"13632:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13625:24:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13597:52:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3531,"nodeType":"Block","src":"13712:61:15","statements":[{"expression":{"id":3529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3523,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3507,"src":"13730:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3525,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3501,"src":"13744:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3524,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3990,"src":"13740:3:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":3526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13740:9:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3527,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"13752:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13740:18:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13730:28:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3530,"nodeType":"ExpressionStatement","src":"13730:28:15"}]},"id":3532,"nodeType":"IfStatement","src":"13593:180:15","trueBody":{"id":3522,"nodeType":"Block","src":"13651:55:15","statements":[{"expression":{"id":3520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3516,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3507,"src":"13669:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3518,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3501,"src":"13686:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3517,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4145,"src":"13679:6:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":3519,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13679:12:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13669:22:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3521,"nodeType":"ExpressionStatement","src":"13669:22:15"}]}}]},{"assignments":[3535],"declarations":[{"constant":false,"id":3535,"mutability":"mutable","name":"logArg","nameLocation":"13800:6:15","nodeType":"VariableDeclaration","scope":3569,"src":"13793:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3534,"name":"int256","nodeType":"ElementaryTypeName","src":"13793:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3536,"nodeType":"VariableDeclarationStatement","src":"13793:13:15"},{"id":3568,"nodeType":"UncheckedBlock","src":"13816:354:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3543,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3537,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2829,"src":"13844:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3538,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3499,"src":"13864:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13844:23:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3540,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3499,"src":"13871:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3541,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2834,"src":"13877:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13871:23:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13844:50:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3559,"nodeType":"Block","src":"13955:59:15","statements":[{"expression":{"id":3557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3551,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3535,"src":"13973:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3553,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3499,"src":"13986:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3552,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3990,"src":"13982:3:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":3554,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13982:8:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3555,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"13993:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13982:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13973:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3558,"nodeType":"ExpressionStatement","src":"13973:26:15"}]},"id":3560,"nodeType":"IfStatement","src":"13840:174:15","trueBody":{"id":3550,"nodeType":"Block","src":"13896:53:15","statements":[{"expression":{"id":3548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3544,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3535,"src":"13914:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3546,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3499,"src":"13930:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3545,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4145,"src":"13923:6:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":3547,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13923:11:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13914:20:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3549,"nodeType":"ExpressionStatement","src":"13914:20:15"}]}},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3561,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3535,"src":"14133:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3562,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"14142:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14133:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3564,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14132:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3565,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3507,"src":"14152:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14132:27:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":3505,"id":3567,"nodeType":"Return","src":"14125:34:15"}]}]},"documentation":{"id":3497,"nodeType":"StructuredDocumentation","src":"13152:89:15","text":"@dev Logarithm (log(arg, base), with signed 18 decimal fixed point base and argument."},"id":3570,"implemented":true,"kind":"function","modifiers":[],"name":"log","nameLocation":"13255:3:15","nodeType":"FunctionDefinition","parameters":{"id":3502,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3499,"mutability":"mutable","name":"arg","nameLocation":"13266:3:15","nodeType":"VariableDeclaration","scope":3570,"src":"13259:10:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3498,"name":"int256","nodeType":"ElementaryTypeName","src":"13259:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":3501,"mutability":"mutable","name":"base","nameLocation":"13278:4:15","nodeType":"VariableDeclaration","scope":3570,"src":"13271:11:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3500,"name":"int256","nodeType":"ElementaryTypeName","src":"13271:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"13258:25:15"},"returnParameters":{"id":3505,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3504,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3570,"src":"13307:6:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3503,"name":"int256","nodeType":"ElementaryTypeName","src":"13307:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"13306:8:15"},"scope":4146,"src":"13246:930:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3607,"nodeType":"Block","src":"14319:353:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3580,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3578,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3573,"src":"14416:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"hexValue":"30","id":3579,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14421:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14416:6:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3585,"nodeType":"IfStatement","src":"14412:57:15","trueBody":{"id":3584,"nodeType":"Block","src":"14424:45:15","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3581,"name":"OutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2808,"src":"14445:11:15","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3582,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14445:13:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3583,"nodeType":"RevertStatement","src":"14438:20:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3586,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2829,"src":"14482:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3587,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3573,"src":"14502:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14482:21:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3589,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3573,"src":"14507:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3590,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2834,"src":"14511:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14507:21:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14482:46:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3605,"nodeType":"Block","src":"14628:38:15","statements":[{"expression":{"arguments":[{"id":3602,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3573,"src":"14653:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3601,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3990,"src":"14649:3:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":3603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14649:6:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":3577,"id":3604,"nodeType":"Return","src":"14642:13:15"}]},"id":3606,"nodeType":"IfStatement","src":"14478:188:15","trueBody":{"id":3600,"nodeType":"Block","src":"14530:92:15","statements":[{"id":3599,"nodeType":"UncheckedBlock","src":"14544:68:15","statements":[{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3594,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3573,"src":"14586:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3593,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4145,"src":"14579:6:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":3595,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14579:9:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3596,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"14591:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14579:18:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":3577,"id":3598,"nodeType":"Return","src":"14572:25:15"}]}]}}]},"documentation":{"id":3571,"nodeType":"StructuredDocumentation","src":"14182:79:15","text":"@dev Natural logarithm (ln(a)) with signed 18 decimal fixed point argument."},"id":3608,"implemented":true,"kind":"function","modifiers":[],"name":"ln","nameLocation":"14275:2:15","nodeType":"FunctionDefinition","parameters":{"id":3574,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3573,"mutability":"mutable","name":"a","nameLocation":"14285:1:15","nodeType":"VariableDeclaration","scope":3608,"src":"14278:8:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3572,"name":"int256","nodeType":"ElementaryTypeName","src":"14278:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14277:10:15"},"returnParameters":{"id":3577,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3576,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3608,"src":"14311:6:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3575,"name":"int256","nodeType":"ElementaryTypeName","src":"14311:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14310:8:15"},"scope":4146,"src":"14266:406:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3989,"nodeType":"Block","src":"14824:5531:15","statements":[{"assignments":[3617],"declarations":[{"constant":false,"id":3617,"mutability":"mutable","name":"negativeExponent","nameLocation":"14915:16:15","nodeType":"VariableDeclaration","scope":3989,"src":"14910:21:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3616,"name":"bool","nodeType":"ElementaryTypeName","src":"14910:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":3619,"initialValue":{"hexValue":"66616c7365","id":3618,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"14934:5:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"14910:29:15"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3620,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"14954:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3621,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"14958:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14954:10:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3638,"nodeType":"IfStatement","src":"14950:381:15","trueBody":{"id":3637,"nodeType":"Block","src":"14966:365:15","statements":[{"id":3632,"nodeType":"UncheckedBlock","src":"15216:68:15","statements":[{"expression":{"id":3630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3623,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"15244:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3626,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":3624,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"15249:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3625,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"15258:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15249:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3627,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"15248:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3628,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"15268:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15248:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15244:25:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3631,"nodeType":"ExpressionStatement","src":"15244:25:15"}]},{"expression":{"id":3635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3633,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3617,"src":"15297:16:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":3634,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15316:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"15297:23:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3636,"nodeType":"ExpressionStatement","src":"15297:23:15"}]}},{"assignments":[3640],"declarations":[{"constant":false,"id":3640,"mutability":"mutable","name":"sum","nameLocation":"16663:3:15","nodeType":"VariableDeclaration","scope":3989,"src":"16656:10:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3639,"name":"int256","nodeType":"ElementaryTypeName","src":"16656:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3642,"initialValue":{"hexValue":"30","id":3641,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16669:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16656:14:15"},{"id":3861,"nodeType":"UncheckedBlock","src":"16680:1674:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3643,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"16708:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3646,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":3644,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2850,"src":"16713:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3645,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"16718:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16713:11:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16708:16:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3657,"nodeType":"IfStatement","src":"16704:126:15","trueBody":{"id":3656,"nodeType":"Block","src":"16726:104:15","statements":[{"expression":{"id":3650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3648,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"16744:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":3649,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2850,"src":"16749:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16744:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3651,"nodeType":"ExpressionStatement","src":"16744:7:15"},{"expression":{"id":3654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3652,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"16806:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3653,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2847,"src":"16813:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16806:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3655,"nodeType":"ExpressionStatement","src":"16806:9:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3658,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"16848:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3661,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":3659,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2856,"src":"16853:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3660,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"16858:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16853:11:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16848:16:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3672,"nodeType":"IfStatement","src":"16844:126:15","trueBody":{"id":3671,"nodeType":"Block","src":"16866:104:15","statements":[{"expression":{"id":3665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3663,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"16884:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":3664,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2856,"src":"16889:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16884:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3666,"nodeType":"ExpressionStatement","src":"16884:7:15"},{"expression":{"id":3669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3667,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"16946:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3668,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2853,"src":"16953:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16946:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3670,"nodeType":"ExpressionStatement","src":"16946:9:15"}]}},{"expression":{"id":3675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3673,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"17109:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":3674,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17116:3:15","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"17109:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3676,"nodeType":"ExpressionStatement","src":"17109:10:15"},{"expression":{"id":3679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3677,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17133:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":3678,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17138:3:15","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"17133:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3680,"nodeType":"ExpressionStatement","src":"17133:8:15"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3681,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17276:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3682,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2862,"src":"17281:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17276:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3698,"nodeType":"IfStatement","src":"17272:94:15","trueBody":{"id":3697,"nodeType":"Block","src":"17285:81:15","statements":[{"expression":{"id":3691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3684,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17303:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3685,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17308:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3686,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"17312:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17308:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3688,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17307:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3689,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2862,"src":"17322:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17307:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17303:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3692,"nodeType":"ExpressionStatement","src":"17303:21:15"},{"expression":{"id":3695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3693,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"17342:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3694,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2859,"src":"17349:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17342:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3696,"nodeType":"ExpressionStatement","src":"17342:9:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3699,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17384:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3700,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2868,"src":"17389:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17384:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3716,"nodeType":"IfStatement","src":"17380:94:15","trueBody":{"id":3715,"nodeType":"Block","src":"17393:81:15","statements":[{"expression":{"id":3709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3702,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17411:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3703,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17416:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3704,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"17420:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17416:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3706,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17415:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3707,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2868,"src":"17430:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17415:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17411:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3710,"nodeType":"ExpressionStatement","src":"17411:21:15"},{"expression":{"id":3713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3711,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"17450:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3712,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2865,"src":"17457:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17450:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3714,"nodeType":"ExpressionStatement","src":"17450:9:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3717,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17492:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3718,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2874,"src":"17497:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17492:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3734,"nodeType":"IfStatement","src":"17488:94:15","trueBody":{"id":3733,"nodeType":"Block","src":"17501:81:15","statements":[{"expression":{"id":3727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3720,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17519:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3721,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17524:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3722,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"17528:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17524:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3724,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17523:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3725,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2874,"src":"17538:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17523:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17519:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3728,"nodeType":"ExpressionStatement","src":"17519:21:15"},{"expression":{"id":3731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3729,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"17558:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3730,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2871,"src":"17565:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17558:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3732,"nodeType":"ExpressionStatement","src":"17558:9:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3735,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17600:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3736,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2880,"src":"17605:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17600:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3752,"nodeType":"IfStatement","src":"17596:94:15","trueBody":{"id":3751,"nodeType":"Block","src":"17609:81:15","statements":[{"expression":{"id":3745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3738,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17627:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3739,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17632:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3740,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"17636:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17632:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3742,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17631:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3743,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2880,"src":"17646:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17631:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17627:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3746,"nodeType":"ExpressionStatement","src":"17627:21:15"},{"expression":{"id":3749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3747,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"17666:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3748,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2877,"src":"17673:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17666:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3750,"nodeType":"ExpressionStatement","src":"17666:9:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3753,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17708:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3754,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2886,"src":"17713:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17708:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3770,"nodeType":"IfStatement","src":"17704:94:15","trueBody":{"id":3769,"nodeType":"Block","src":"17717:81:15","statements":[{"expression":{"id":3763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3756,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17735:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3759,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3757,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17740:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3758,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"17744:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17740:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3760,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17739:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3761,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2886,"src":"17754:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17739:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17735:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3764,"nodeType":"ExpressionStatement","src":"17735:21:15"},{"expression":{"id":3767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3765,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"17774:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3766,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2883,"src":"17781:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17774:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3768,"nodeType":"ExpressionStatement","src":"17774:9:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3771,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17816:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3772,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2892,"src":"17821:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17816:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3788,"nodeType":"IfStatement","src":"17812:94:15","trueBody":{"id":3787,"nodeType":"Block","src":"17825:81:15","statements":[{"expression":{"id":3781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3774,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17843:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3775,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17848:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3776,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"17852:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17848:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3778,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17847:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3779,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2892,"src":"17862:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17847:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17843:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3782,"nodeType":"ExpressionStatement","src":"17843:21:15"},{"expression":{"id":3785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3783,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"17882:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3784,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2889,"src":"17889:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17882:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3786,"nodeType":"ExpressionStatement","src":"17882:9:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3789,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17924:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3790,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2898,"src":"17929:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17924:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3806,"nodeType":"IfStatement","src":"17920:94:15","trueBody":{"id":3805,"nodeType":"Block","src":"17933:81:15","statements":[{"expression":{"id":3799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3792,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17951:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3795,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3793,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17956:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3794,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"17960:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17956:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3796,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17955:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3797,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2898,"src":"17970:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17955:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17951:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3800,"nodeType":"ExpressionStatement","src":"17951:21:15"},{"expression":{"id":3803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3801,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"17990:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3802,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2895,"src":"17997:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17990:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3804,"nodeType":"ExpressionStatement","src":"17990:9:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3807,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"18032:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3808,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2904,"src":"18037:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18032:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3824,"nodeType":"IfStatement","src":"18028:94:15","trueBody":{"id":3823,"nodeType":"Block","src":"18041:81:15","statements":[{"expression":{"id":3817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3810,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"18059:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3811,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"18064:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3812,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"18068:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18064:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3814,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18063:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3815,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2904,"src":"18078:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18063:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18059:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3818,"nodeType":"ExpressionStatement","src":"18059:21:15"},{"expression":{"id":3821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3819,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"18098:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3820,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2901,"src":"18105:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18098:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3822,"nodeType":"ExpressionStatement","src":"18098:9:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3825,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"18140:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3826,"name":"a10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2910,"src":"18145:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18140:8:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3842,"nodeType":"IfStatement","src":"18136:97:15","trueBody":{"id":3841,"nodeType":"Block","src":"18150:83:15","statements":[{"expression":{"id":3835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3828,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"18168:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3829,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"18173:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3830,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"18177:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18173:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3832,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18172:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3833,"name":"a10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2910,"src":"18187:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18172:18:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18168:22:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3836,"nodeType":"ExpressionStatement","src":"18168:22:15"},{"expression":{"id":3839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3837,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"18208:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3838,"name":"x10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2907,"src":"18215:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18208:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3840,"nodeType":"ExpressionStatement","src":"18208:10:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3843,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"18251:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3844,"name":"a11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2916,"src":"18256:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18251:8:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3860,"nodeType":"IfStatement","src":"18247:97:15","trueBody":{"id":3859,"nodeType":"Block","src":"18261:83:15","statements":[{"expression":{"id":3853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3846,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"18279:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3847,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"18284:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3848,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"18288:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18284:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3850,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18283:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3851,"name":"a11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2916,"src":"18298:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18283:18:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18279:22:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3854,"nodeType":"ExpressionStatement","src":"18279:22:15"},{"expression":{"id":3857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3855,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"18319:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3856,"name":"x11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2913,"src":"18326:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18319:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3858,"nodeType":"ExpressionStatement","src":"18319:10:15"}]}}]},{"id":3988,"nodeType":"UncheckedBlock","src":"18856:1493:15","statements":[{"assignments":[3863],"declarations":[{"constant":false,"id":3863,"mutability":"mutable","name":"z","nameLocation":"18887:1:15","nodeType":"VariableDeclaration","scope":3988,"src":"18880:8:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3862,"name":"int256","nodeType":"ElementaryTypeName","src":"18880:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3876,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3864,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"18893:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3865,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"18897:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18893:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3867,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18892:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3868,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"18907:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18892:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3870,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18891:23:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3871,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"18918:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":3872,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"18922:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18918:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3874,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18917:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18891:38:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"18880:49:15"},{"assignments":[3878],"declarations":[{"constant":false,"id":3878,"mutability":"mutable","name":"z_squared","nameLocation":"18950:9:15","nodeType":"VariableDeclaration","scope":3988,"src":"18943:16:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3877,"name":"int256","nodeType":"ElementaryTypeName","src":"18943:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3885,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3879,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3863,"src":"18963:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3880,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3863,"src":"18967:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18963:5:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3882,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18962:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3883,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"18972:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18962:16:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"18943:35:15"},{"assignments":[3887],"declarations":[{"constant":false,"id":3887,"mutability":"mutable","name":"num","nameLocation":"19074:3:15","nodeType":"VariableDeclaration","scope":3988,"src":"19067:10:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3886,"name":"int256","nodeType":"ElementaryTypeName","src":"19067:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3889,"initialValue":{"id":3888,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3863,"src":"19080:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"19067:14:15"},{"assignments":[3891],"declarations":[{"constant":false,"id":3891,"mutability":"mutable","name":"seriesSum","nameLocation":"19210:9:15","nodeType":"VariableDeclaration","scope":3988,"src":"19203:16:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3890,"name":"int256","nodeType":"ElementaryTypeName","src":"19203:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3893,"initialValue":{"id":3892,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19222:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"19203:22:15"},{"expression":{"id":3901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3894,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19304:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3895,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19311:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3896,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3878,"src":"19317:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19311:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3898,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19310:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3899,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"19330:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19310:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19304:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3902,"nodeType":"ExpressionStatement","src":"19304:32:15"},{"expression":{"id":3907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3903,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3891,"src":"19350:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3904,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19363:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":3905,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19369:1:15","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"19363:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19350:20:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3908,"nodeType":"ExpressionStatement","src":"19350:20:15"},{"expression":{"id":3916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3909,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19385:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3910,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19392:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3911,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3878,"src":"19398:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19392:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3913,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19391:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3914,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"19411:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19391:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19385:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3917,"nodeType":"ExpressionStatement","src":"19385:32:15"},{"expression":{"id":3922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3918,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3891,"src":"19431:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3919,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19444:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":3920,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19450:1:15","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"19444:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19431:20:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3923,"nodeType":"ExpressionStatement","src":"19431:20:15"},{"expression":{"id":3931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3924,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19466:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3925,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19473:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3926,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3878,"src":"19479:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19473:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3928,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19472:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3929,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"19492:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19472:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19466:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3932,"nodeType":"ExpressionStatement","src":"19466:32:15"},{"expression":{"id":3937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3933,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3891,"src":"19512:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3934,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19525:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":3935,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19531:1:15","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"19525:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19512:20:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3938,"nodeType":"ExpressionStatement","src":"19512:20:15"},{"expression":{"id":3946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3939,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19547:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3940,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19554:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3941,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3878,"src":"19560:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19554:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3943,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19553:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3944,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"19573:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19553:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19547:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3947,"nodeType":"ExpressionStatement","src":"19547:32:15"},{"expression":{"id":3952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3948,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3891,"src":"19593:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3949,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19606:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":3950,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19612:1:15","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"19606:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19593:20:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3953,"nodeType":"ExpressionStatement","src":"19593:20:15"},{"expression":{"id":3961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3954,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19628:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3955,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19635:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3956,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3878,"src":"19641:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19635:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3958,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19634:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3959,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"19654:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19634:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19628:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3962,"nodeType":"ExpressionStatement","src":"19628:32:15"},{"expression":{"id":3967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3963,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3891,"src":"19674:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3964,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19687:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":3965,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19693:2:15","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"19687:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19674:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3968,"nodeType":"ExpressionStatement","src":"19674:21:15"},{"expression":{"id":3971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3969,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3891,"src":"19866:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"32","id":3970,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19879:1:15","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"19866:14:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3972,"nodeType":"ExpressionStatement","src":"19866:14:15"},{"assignments":[3974],"declarations":[{"constant":false,"id":3974,"mutability":"mutable","name":"result","nameLocation":"20169:6:15","nodeType":"VariableDeclaration","scope":3988,"src":"20162:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3973,"name":"int256","nodeType":"ElementaryTypeName","src":"20162:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3981,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3975,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"20179:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":3976,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3891,"src":"20185:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20179:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3978,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20178:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"313030","id":3979,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20198:3:15","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"20178:23:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"20162:39:15"},{"expression":{"condition":{"id":3982,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3617,"src":"20303:16:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":3985,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3974,"src":"20332:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"20303:35:15","trueExpression":{"id":3984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"20322:7:15","subExpression":{"id":3983,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3974,"src":"20323:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":3615,"id":3987,"nodeType":"Return","src":"20296:42:15"}]}]},"documentation":{"id":3609,"nodeType":"StructuredDocumentation","src":"14678:88:15","text":"@dev Internal natural logarithm (ln(a)) with signed 18 decimal fixed point argument."},"id":3990,"implemented":true,"kind":"function","modifiers":[],"name":"_ln","nameLocation":"14780:3:15","nodeType":"FunctionDefinition","parameters":{"id":3612,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3611,"mutability":"mutable","name":"a","nameLocation":"14791:1:15","nodeType":"VariableDeclaration","scope":3990,"src":"14784:8:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3610,"name":"int256","nodeType":"ElementaryTypeName","src":"14784:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14783:10:15"},"returnParameters":{"id":3615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3614,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3990,"src":"14816:6:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3613,"name":"int256","nodeType":"ElementaryTypeName","src":"14816:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14815:8:15"},"scope":4146,"src":"14771:5584:15","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":4144,"nodeType":"Block","src":"20678:1804:15","statements":[{"id":4143,"nodeType":"UncheckedBlock","src":"20892:1584:15","statements":[{"expression":{"id":4000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3998,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3993,"src":"20916:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"id":3999,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"20921:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20916:11:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4001,"nodeType":"ExpressionStatement","src":"20916:11:15"},{"assignments":[4003],"declarations":[{"constant":false,"id":4003,"mutability":"mutable","name":"z","nameLocation":"21315:1:15","nodeType":"VariableDeclaration","scope":4143,"src":"21308:8:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4002,"name":"int256","nodeType":"ElementaryTypeName","src":"21308:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4016,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4004,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3993,"src":"21321:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":4005,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2817,"src":"21325:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21321:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4007,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21320:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4008,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2817,"src":"21335:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21320:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4010,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21319:23:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4011,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3993,"src":"21346:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":4012,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2817,"src":"21350:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21346:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4014,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21345:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21319:38:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21308:49:15"},{"assignments":[4018],"declarations":[{"constant":false,"id":4018,"mutability":"mutable","name":"z_squared","nameLocation":"21378:9:15","nodeType":"VariableDeclaration","scope":4143,"src":"21371:16:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4017,"name":"int256","nodeType":"ElementaryTypeName","src":"21371:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4025,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4019,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4003,"src":"21391:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4020,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4003,"src":"21395:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21391:5:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4022,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21390:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4023,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2817,"src":"21400:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21390:16:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21371:35:15"},{"assignments":[4027],"declarations":[{"constant":false,"id":4027,"mutability":"mutable","name":"num","nameLocation":"21502:3:15","nodeType":"VariableDeclaration","scope":4143,"src":"21495:10:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4026,"name":"int256","nodeType":"ElementaryTypeName","src":"21495:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4029,"initialValue":{"id":4028,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4003,"src":"21508:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21495:14:15"},{"assignments":[4031],"declarations":[{"constant":false,"id":4031,"mutability":"mutable","name":"seriesSum","nameLocation":"21638:9:15","nodeType":"VariableDeclaration","scope":4143,"src":"21631:16:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4030,"name":"int256","nodeType":"ElementaryTypeName","src":"21631:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4033,"initialValue":{"id":4032,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"21650:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21631:22:15"},{"expression":{"id":4041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4034,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"21732:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4035,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"21739:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4036,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4018,"src":"21745:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21739:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4038,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21738:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4039,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2817,"src":"21758:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21738:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21732:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4042,"nodeType":"ExpressionStatement","src":"21732:32:15"},{"expression":{"id":4047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4043,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"21778:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4044,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"21791:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":4045,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21797:1:15","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"21791:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21778:20:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4048,"nodeType":"ExpressionStatement","src":"21778:20:15"},{"expression":{"id":4056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4049,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"21813:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4050,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"21820:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4051,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4018,"src":"21826:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21820:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4053,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21819:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4054,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2817,"src":"21839:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21819:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21813:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4057,"nodeType":"ExpressionStatement","src":"21813:32:15"},{"expression":{"id":4062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4058,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"21859:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4059,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"21872:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":4060,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21878:1:15","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"21872:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21859:20:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4063,"nodeType":"ExpressionStatement","src":"21859:20:15"},{"expression":{"id":4071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4064,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"21894:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4070,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4065,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"21901:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4066,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4018,"src":"21907:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21901:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4068,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21900:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4069,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2817,"src":"21920:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21900:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21894:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4072,"nodeType":"ExpressionStatement","src":"21894:32:15"},{"expression":{"id":4077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4073,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"21940:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4074,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"21953:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":4075,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21959:1:15","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"21953:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21940:20:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4078,"nodeType":"ExpressionStatement","src":"21940:20:15"},{"expression":{"id":4086,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4079,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"21975:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4080,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"21982:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4081,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4018,"src":"21988:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21982:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4083,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21981:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4084,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2817,"src":"22001:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21981:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21975:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4087,"nodeType":"ExpressionStatement","src":"21975:32:15"},{"expression":{"id":4092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4088,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"22021:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4089,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"22034:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":4090,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22040:1:15","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"22034:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22021:20:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4093,"nodeType":"ExpressionStatement","src":"22021:20:15"},{"expression":{"id":4101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4094,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"22056:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4095,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"22063:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4096,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4018,"src":"22069:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22063:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4098,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22062:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4099,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2817,"src":"22082:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22062:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22056:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4102,"nodeType":"ExpressionStatement","src":"22056:32:15"},{"expression":{"id":4107,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4103,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"22102:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4104,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"22115:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":4105,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22121:2:15","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"22115:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22102:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4108,"nodeType":"ExpressionStatement","src":"22102:21:15"},{"expression":{"id":4116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4109,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"22138:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4110,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"22145:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4111,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4018,"src":"22151:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22145:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4113,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22144:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4114,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2817,"src":"22164:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22144:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22138:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4117,"nodeType":"ExpressionStatement","src":"22138:32:15"},{"expression":{"id":4122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4118,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"22184:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4119,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"22197:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3133","id":4120,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22203:2:15","typeDescriptions":{"typeIdentifier":"t_rational_13_by_1","typeString":"int_const 13"},"value":"13"},"src":"22197:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22184:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4123,"nodeType":"ExpressionStatement","src":"22184:21:15"},{"expression":{"id":4131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4124,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"22220:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4125,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"22227:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4126,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4018,"src":"22233:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22227:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4128,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22226:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4129,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2817,"src":"22246:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22226:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22220:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4132,"nodeType":"ExpressionStatement","src":"22220:32:15"},{"expression":{"id":4137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4133,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"22266:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4134,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"22279:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3135","id":4135,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22285:2:15","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"15"},"src":"22279:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22266:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4138,"nodeType":"ExpressionStatement","src":"22266:21:15"},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4139,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"22452:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"32","id":4140,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22464:1:15","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"22452:13:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":3997,"id":4142,"nodeType":"Return","src":"22445:20:15"}]}]},"documentation":{"id":3991,"nodeType":"StructuredDocumentation","src":"20361:256:15","text":" @dev Internal high precision (36 decimal places) natural logarithm (ln(x)) with signed 18 decimal fixed point argument,\n for x close to one.\n Should only be used if x is between LN_36_LOWER_BOUND and LN_36_UPPER_BOUND."},"id":4145,"implemented":true,"kind":"function","modifiers":[],"name":"_ln_36","nameLocation":"20631:6:15","nodeType":"FunctionDefinition","parameters":{"id":3994,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3993,"mutability":"mutable","name":"x","nameLocation":"20645:1:15","nodeType":"VariableDeclaration","scope":4145,"src":"20638:8:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3992,"name":"int256","nodeType":"ElementaryTypeName","src":"20638:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20637:10:15"},"returnParameters":{"id":3997,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3996,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4145,"src":"20670:6:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3995,"name":"int256","nodeType":"ElementaryTypeName","src":"20670:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20669:8:15"},"scope":4146,"src":"20622:1860:15","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":4147,"src":"595:21889:15","usedErrors":[2796,2799,2802,2805,2808],"usedEvents":[]}],"src":"33:22452:15"},"id":15},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","exportedSymbols":{"ReentrancyGuardTransient":[4215],"StorageSlotExtension":[4428]},"id":4216,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":4148,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:16"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","file":"./StorageSlotExtension.sol","id":4150,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4216,"sourceUnit":4429,"src":"59:66:16","symbolAliases":[{"foreign":{"id":4149,"name":"StorageSlotExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4428,"src":"68:20:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[],"canonicalName":"ReentrancyGuardTransient","contractDependencies":[],"contractKind":"contract","documentation":{"id":4151,"nodeType":"StructuredDocumentation","src":"127:155:16","text":" @notice Variant of {ReentrancyGuard} that uses transient storage.\n @dev NOTE: This variant only works on networks where EIP-1153 is available."},"fullyImplemented":true,"id":4215,"linearizedBaseContracts":[4215],"name":"ReentrancyGuardTransient","nameLocation":"301:24:16","nodeType":"ContractDefinition","nodes":[{"global":false,"id":4153,"libraryName":{"id":4152,"name":"StorageSlotExtension","nameLocations":["338:20:16"],"nodeType":"IdentifierPath","referencedDeclaration":4428,"src":"338:20:16"},"nodeType":"UsingForDirective","src":"332:33:16"},{"constant":true,"id":4156,"mutability":"constant","name":"_REENTRANCY_GUARD_STORAGE","nameLocation":"515:25:16","nodeType":"VariableDeclaration","scope":4215,"src":"490:127:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4154,"name":"bytes32","nodeType":"ElementaryTypeName","src":"490:7:16","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307839623737396231373432326430646639323232333031386233326234643166613436653037313732336436383137653234383664303033626563633535663030","id":4155,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"551:66:16","typeDescriptions":{"typeIdentifier":"t_rational_70319816728846589445362000750570655803700195216363692647688146666176345628416_by_1","typeString":"int_const 7031...(69 digits omitted)...8416"},"value":"0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"},"visibility":"private"},{"documentation":{"id":4157,"nodeType":"StructuredDocumentation","src":"624:40:16","text":"@notice Unauthorized reentrant call."},"errorSelector":"3ee5aeb5","id":4159,"name":"ReentrancyGuardReentrantCall","nameLocation":"675:28:16","nodeType":"ErrorDefinition","parameters":{"id":4158,"nodeType":"ParameterList","parameters":[],"src":"703:2:16"},"src":"669:37:16"},{"body":{"id":4169,"nodeType":"Block","src":"1107:79:16","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":4162,"name":"_nonReentrantBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4189,"src":"1117:19:16","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":4163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1117:21:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4164,"nodeType":"ExpressionStatement","src":"1117:21:16"},{"id":4165,"nodeType":"PlaceholderStatement","src":"1148:1:16"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":4166,"name":"_nonReentrantAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4201,"src":"1159:18:16","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":4167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1159:20:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4168,"nodeType":"ExpressionStatement","src":"1159:20:16"}]},"documentation":{"id":4160,"nodeType":"StructuredDocumentation","src":"712:366:16","text":" @dev Prevents a contract from calling itself, directly or indirectly.\n Calling a `nonReentrant` function from another `nonReentrant`\n function is not supported. It is possible to prevent this from happening\n by making the `nonReentrant` function external, and making it call a\n `private` function that does the actual work."},"id":4170,"name":"nonReentrant","nameLocation":"1092:12:16","nodeType":"ModifierDefinition","parameters":{"id":4161,"nodeType":"ParameterList","parameters":[],"src":"1104:2:16"},"src":"1083:103:16","virtual":false,"visibility":"internal"},{"body":{"id":4188,"nodeType":"Block","src":"1231:310:16","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":4173,"name":"_reentrancyGuardEntered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4214,"src":"1320:23:16","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":4174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1320:25:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4179,"nodeType":"IfStatement","src":"1316:93:16","trueBody":{"id":4178,"nodeType":"Block","src":"1347:62:16","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4175,"name":"ReentrancyGuardReentrantCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4159,"src":"1368:28:16","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4176,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1368:30:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4177,"nodeType":"RevertStatement","src":"1361:37:16"}]}},{"expression":{"arguments":[{"hexValue":"74727565","id":4185,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1529:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4180,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4156,"src":"1484:25:16","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":4182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1510:9:16","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":4266,"src":"1484:35:16","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$4251_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":4183,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1484:37:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4251","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":4184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1522:6:16","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":4361,"src":"1484:44:16","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$4251_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$4251_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":4186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1484:50:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4187,"nodeType":"ExpressionStatement","src":"1484:50:16"}]},"id":4189,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantBefore","nameLocation":"1201:19:16","nodeType":"FunctionDefinition","parameters":{"id":4171,"nodeType":"ParameterList","parameters":[],"src":"1220:2:16"},"returnParameters":{"id":4172,"nodeType":"ParameterList","parameters":[],"src":"1231:0:16"},"scope":4215,"src":"1192:349:16","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":4200,"nodeType":"Block","src":"1585:68:16","statements":[{"expression":{"arguments":[{"hexValue":"66616c7365","id":4197,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1640:5:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4192,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4156,"src":"1595:25:16","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":4194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1621:9:16","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":4266,"src":"1595:35:16","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$4251_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":4195,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1595:37:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4251","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":4196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1633:6:16","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":4361,"src":"1595:44:16","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$4251_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$4251_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":4198,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1595:51:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4199,"nodeType":"ExpressionStatement","src":"1595:51:16"}]},"id":4201,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantAfter","nameLocation":"1556:18:16","nodeType":"FunctionDefinition","parameters":{"id":4190,"nodeType":"ParameterList","parameters":[],"src":"1574:2:16"},"returnParameters":{"id":4191,"nodeType":"ParameterList","parameters":[],"src":"1585:0:16"},"scope":4215,"src":"1547:106:16","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":4213,"nodeType":"Block","src":"1896:69:16","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4207,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4156,"src":"1913:25:16","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":4208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1939:9:16","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":4266,"src":"1913:35:16","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$4251_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":4209,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1913:37:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4251","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":4210,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1951:5:16","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":4350,"src":"1913:43:16","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_BooleanSlotType_$4251_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_BooleanSlotType_$4251_$","typeString":"function (StorageSlotExtension.BooleanSlotType) view returns (bool)"}},"id":4211,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1913:45:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":4206,"id":4212,"nodeType":"Return","src":"1906:52:16"}]},"documentation":{"id":4202,"nodeType":"StructuredDocumentation","src":"1659:168:16","text":" @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n `nonReentrant` function in the call stack."},"id":4214,"implemented":true,"kind":"function","modifiers":[],"name":"_reentrancyGuardEntered","nameLocation":"1841:23:16","nodeType":"FunctionDefinition","parameters":{"id":4203,"nodeType":"ParameterList","parameters":[],"src":"1864:2:16"},"returnParameters":{"id":4206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4205,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4214,"src":"1890:4:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4204,"name":"bool","nodeType":"ElementaryTypeName","src":"1890:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1889:6:16"},"scope":4215,"src":"1832:133:16","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":4216,"src":"283:1684:16","usedErrors":[4159],"usedEvents":[]}],"src":"33:1935:16"},"id":16},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","exportedSymbols":{"StorageSlotExtension":[4428]},"id":4429,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":4217,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:17"},{"abstract":false,"baseContracts":[],"canonicalName":"StorageSlotExtension","contractDependencies":[],"contractKind":"library","documentation":{"id":4218,"nodeType":"StructuredDocumentation","src":"59:218:17","text":" @notice Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\n @dev TIP: Consider using this library along with {SlotDerivation}."},"fullyImplemented":true,"id":4428,"linearizedBaseContracts":[4428],"name":"StorageSlotExtension","nameLocation":"286:20:17","nodeType":"ContractDefinition","nodes":[{"canonicalName":"StorageSlotExtension.Int256Slot","id":4221,"members":[{"constant":false,"id":4220,"mutability":"mutable","name":"value","nameLocation":"348:5:17","nodeType":"VariableDeclaration","scope":4221,"src":"341:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4219,"name":"int256","nodeType":"ElementaryTypeName","src":"341:6:17","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"name":"Int256Slot","nameLocation":"320:10:17","nodeType":"StructDefinition","scope":4428,"src":"313:47:17","visibility":"public"},{"body":{"id":4231,"nodeType":"Block","src":"524:106:17","statements":[{"AST":{"nativeSrc":"586:38:17","nodeType":"YulBlock","src":"586:38:17","statements":[{"nativeSrc":"600:14:17","nodeType":"YulAssignment","src":"600:14:17","value":{"name":"slot","nativeSrc":"610:4:17","nodeType":"YulIdentifier","src":"610:4:17"},"variableNames":[{"name":"r.slot","nativeSrc":"600:6:17","nodeType":"YulIdentifier","src":"600:6:17"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4228,"isOffset":false,"isSlot":true,"src":"600:6:17","suffix":"slot","valueSize":1},{"declaration":4224,"isOffset":false,"isSlot":false,"src":"610:4:17","valueSize":1}],"id":4230,"nodeType":"InlineAssembly","src":"577:47:17"}]},"documentation":{"id":4222,"nodeType":"StructuredDocumentation","src":"366:71:17","text":"@dev Returns an `Int256Slot` with member `value` located at `slot`."},"id":4232,"implemented":true,"kind":"function","modifiers":[],"name":"getInt256Slot","nameLocation":"451:13:17","nodeType":"FunctionDefinition","parameters":{"id":4225,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4224,"mutability":"mutable","name":"slot","nameLocation":"473:4:17","nodeType":"VariableDeclaration","scope":4232,"src":"465:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4223,"name":"bytes32","nodeType":"ElementaryTypeName","src":"465:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"464:14:17"},"returnParameters":{"id":4229,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4228,"mutability":"mutable","name":"r","nameLocation":"521:1:17","nodeType":"VariableDeclaration","scope":4232,"src":"502:20:17","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$4221_storage_ptr","typeString":"struct StorageSlotExtension.Int256Slot"},"typeName":{"id":4227,"nodeType":"UserDefinedTypeName","pathNode":{"id":4226,"name":"Int256Slot","nameLocations":["502:10:17"],"nodeType":"IdentifierPath","referencedDeclaration":4221,"src":"502:10:17"},"referencedDeclaration":4221,"src":"502:10:17","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$4221_storage_ptr","typeString":"struct StorageSlotExtension.Int256Slot"}},"visibility":"internal"}],"src":"501:22:17"},"scope":4428,"src":"442:188:17","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.AddressSlotType","id":4234,"name":"AddressSlotType","nameLocation":"709:15:17","nodeType":"UserDefinedValueTypeDefinition","src":"704:32:17","underlyingType":{"id":4233,"name":"bytes32","nodeType":"ElementaryTypeName","src":"728:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":4248,"nodeType":"Block","src":"873:50:17","statements":[{"expression":{"arguments":[{"id":4245,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4237,"src":"911:4:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4243,"name":"AddressSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4234,"src":"890:15:17","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressSlotType_$4234_$","typeString":"type(StorageSlotExtension.AddressSlotType)"}},"id":4244,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"906:4:17","memberName":"wrap","nodeType":"MemberAccess","src":"890:20:17","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_AddressSlotType_$4234_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.AddressSlotType)"}},"id":4246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"890:26:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$4234","typeString":"StorageSlotExtension.AddressSlotType"}},"functionReturnParameters":4242,"id":4247,"nodeType":"Return","src":"883:33:17"}]},"documentation":{"id":4235,"nodeType":"StructuredDocumentation","src":"742:53:17","text":"@dev Cast an arbitrary slot to a AddressSlotType."},"id":4249,"implemented":true,"kind":"function","modifiers":[],"name":"asAddress","nameLocation":"809:9:17","nodeType":"FunctionDefinition","parameters":{"id":4238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4237,"mutability":"mutable","name":"slot","nameLocation":"827:4:17","nodeType":"VariableDeclaration","scope":4249,"src":"819:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4236,"name":"bytes32","nodeType":"ElementaryTypeName","src":"819:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"818:14:17"},"returnParameters":{"id":4242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4241,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4249,"src":"856:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$4234","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":4240,"nodeType":"UserDefinedTypeName","pathNode":{"id":4239,"name":"AddressSlotType","nameLocations":["856:15:17"],"nodeType":"IdentifierPath","referencedDeclaration":4234,"src":"856:15:17"},"referencedDeclaration":4234,"src":"856:15:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$4234","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"}],"src":"855:17:17"},"scope":4428,"src":"800:123:17","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.BooleanSlotType","id":4251,"name":"BooleanSlotType","nameLocation":"1001:15:17","nodeType":"UserDefinedValueTypeDefinition","src":"996:32:17","underlyingType":{"id":4250,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1020:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":4265,"nodeType":"Block","src":"1165:50:17","statements":[{"expression":{"arguments":[{"id":4262,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4254,"src":"1203:4:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4260,"name":"BooleanSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4251,"src":"1182:15:17","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_BooleanSlotType_$4251_$","typeString":"type(StorageSlotExtension.BooleanSlotType)"}},"id":4261,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1198:4:17","memberName":"wrap","nodeType":"MemberAccess","src":"1182:20:17","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$4251_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":4263,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1182:26:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4251","typeString":"StorageSlotExtension.BooleanSlotType"}},"functionReturnParameters":4259,"id":4264,"nodeType":"Return","src":"1175:33:17"}]},"documentation":{"id":4252,"nodeType":"StructuredDocumentation","src":"1034:53:17","text":"@dev Cast an arbitrary slot to a BooleanSlotType."},"id":4266,"implemented":true,"kind":"function","modifiers":[],"name":"asBoolean","nameLocation":"1101:9:17","nodeType":"FunctionDefinition","parameters":{"id":4255,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4254,"mutability":"mutable","name":"slot","nameLocation":"1119:4:17","nodeType":"VariableDeclaration","scope":4266,"src":"1111:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4253,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1111:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1110:14:17"},"returnParameters":{"id":4259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4258,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4266,"src":"1148:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4251","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":4257,"nodeType":"UserDefinedTypeName","pathNode":{"id":4256,"name":"BooleanSlotType","nameLocations":["1148:15:17"],"nodeType":"IdentifierPath","referencedDeclaration":4251,"src":"1148:15:17"},"referencedDeclaration":4251,"src":"1148:15:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4251","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"}],"src":"1147:17:17"},"scope":4428,"src":"1092:123:17","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Bytes32SlotType","id":4268,"name":"Bytes32SlotType","nameLocation":"1293:15:17","nodeType":"UserDefinedValueTypeDefinition","src":"1288:32:17","underlyingType":{"id":4267,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1312:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":4282,"nodeType":"Block","src":"1457:50:17","statements":[{"expression":{"arguments":[{"id":4279,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4271,"src":"1495:4:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4277,"name":"Bytes32SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4268,"src":"1474:15:17","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Bytes32SlotType_$4268_$","typeString":"type(StorageSlotExtension.Bytes32SlotType)"}},"id":4278,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1490:4:17","memberName":"wrap","nodeType":"MemberAccess","src":"1474:20:17","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Bytes32SlotType_$4268_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Bytes32SlotType)"}},"id":4280,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1474:26:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$4268","typeString":"StorageSlotExtension.Bytes32SlotType"}},"functionReturnParameters":4276,"id":4281,"nodeType":"Return","src":"1467:33:17"}]},"documentation":{"id":4269,"nodeType":"StructuredDocumentation","src":"1326:53:17","text":"@dev Cast an arbitrary slot to a Bytes32SlotType."},"id":4283,"implemented":true,"kind":"function","modifiers":[],"name":"asBytes32","nameLocation":"1393:9:17","nodeType":"FunctionDefinition","parameters":{"id":4272,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4271,"mutability":"mutable","name":"slot","nameLocation":"1411:4:17","nodeType":"VariableDeclaration","scope":4283,"src":"1403:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4270,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1403:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1402:14:17"},"returnParameters":{"id":4276,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4275,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4283,"src":"1440:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$4268","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":4274,"nodeType":"UserDefinedTypeName","pathNode":{"id":4273,"name":"Bytes32SlotType","nameLocations":["1440:15:17"],"nodeType":"IdentifierPath","referencedDeclaration":4268,"src":"1440:15:17"},"referencedDeclaration":4268,"src":"1440:15:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$4268","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"}],"src":"1439:17:17"},"scope":4428,"src":"1384:123:17","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Uint256SlotType","id":4285,"name":"Uint256SlotType","nameLocation":"1585:15:17","nodeType":"UserDefinedValueTypeDefinition","src":"1580:32:17","underlyingType":{"id":4284,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1604:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":4299,"nodeType":"Block","src":"1749:50:17","statements":[{"expression":{"arguments":[{"id":4296,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4288,"src":"1787:4:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4294,"name":"Uint256SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4285,"src":"1766:15:17","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Uint256SlotType_$4285_$","typeString":"type(StorageSlotExtension.Uint256SlotType)"}},"id":4295,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1782:4:17","memberName":"wrap","nodeType":"MemberAccess","src":"1766:20:17","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$4285_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":4297,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1766:26:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$4285","typeString":"StorageSlotExtension.Uint256SlotType"}},"functionReturnParameters":4293,"id":4298,"nodeType":"Return","src":"1759:33:17"}]},"documentation":{"id":4286,"nodeType":"StructuredDocumentation","src":"1618:53:17","text":"@dev Cast an arbitrary slot to a Uint256SlotType."},"id":4300,"implemented":true,"kind":"function","modifiers":[],"name":"asUint256","nameLocation":"1685:9:17","nodeType":"FunctionDefinition","parameters":{"id":4289,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4288,"mutability":"mutable","name":"slot","nameLocation":"1703:4:17","nodeType":"VariableDeclaration","scope":4300,"src":"1695:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4287,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1695:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1694:14:17"},"returnParameters":{"id":4293,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4292,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4300,"src":"1732:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$4285","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":4291,"nodeType":"UserDefinedTypeName","pathNode":{"id":4290,"name":"Uint256SlotType","nameLocations":["1732:15:17"],"nodeType":"IdentifierPath","referencedDeclaration":4285,"src":"1732:15:17"},"referencedDeclaration":4285,"src":"1732:15:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$4285","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"1731:17:17"},"scope":4428,"src":"1676:123:17","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Int256SlotType","id":4302,"name":"Int256SlotType","nameLocation":"1877:14:17","nodeType":"UserDefinedValueTypeDefinition","src":"1872:31:17","underlyingType":{"id":4301,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1895:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":4316,"nodeType":"Block","src":"2038:49:17","statements":[{"expression":{"arguments":[{"id":4313,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4305,"src":"2075:4:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4311,"name":"Int256SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4302,"src":"2055:14:17","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Int256SlotType_$4302_$","typeString":"type(StorageSlotExtension.Int256SlotType)"}},"id":4312,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2070:4:17","memberName":"wrap","nodeType":"MemberAccess","src":"2055:19:17","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Int256SlotType_$4302_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Int256SlotType)"}},"id":4314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2055:25:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$4302","typeString":"StorageSlotExtension.Int256SlotType"}},"functionReturnParameters":4310,"id":4315,"nodeType":"Return","src":"2048:32:17"}]},"documentation":{"id":4303,"nodeType":"StructuredDocumentation","src":"1909:53:17","text":"@dev Cast an arbitrary slot to an Int256SlotType."},"id":4317,"implemented":true,"kind":"function","modifiers":[],"name":"asInt256","nameLocation":"1976:8:17","nodeType":"FunctionDefinition","parameters":{"id":4306,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4305,"mutability":"mutable","name":"slot","nameLocation":"1993:4:17","nodeType":"VariableDeclaration","scope":4317,"src":"1985:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4304,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1985:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1984:14:17"},"returnParameters":{"id":4310,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4309,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4317,"src":"2022:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$4302","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":4308,"nodeType":"UserDefinedTypeName","pathNode":{"id":4307,"name":"Int256SlotType","nameLocations":["2022:14:17"],"nodeType":"IdentifierPath","referencedDeclaration":4302,"src":"2022:14:17"},"referencedDeclaration":4302,"src":"2022:14:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$4302","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"}],"src":"2021:16:17"},"scope":4428,"src":"1967:120:17","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4327,"nodeType":"Block","src":"2242:112:17","statements":[{"AST":{"nativeSrc":"2304:44:17","nodeType":"YulBlock","src":"2304:44:17","statements":[{"nativeSrc":"2318:20:17","nodeType":"YulAssignment","src":"2318:20:17","value":{"arguments":[{"name":"slot","nativeSrc":"2333:4:17","nodeType":"YulIdentifier","src":"2333:4:17"}],"functionName":{"name":"tload","nativeSrc":"2327:5:17","nodeType":"YulIdentifier","src":"2327:5:17"},"nativeSrc":"2327:11:17","nodeType":"YulFunctionCall","src":"2327:11:17"},"variableNames":[{"name":"value","nativeSrc":"2318:5:17","nodeType":"YulIdentifier","src":"2318:5:17"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4321,"isOffset":false,"isSlot":false,"src":"2333:4:17","valueSize":1},{"declaration":4324,"isOffset":false,"isSlot":false,"src":"2318:5:17","valueSize":1}],"id":4326,"nodeType":"InlineAssembly","src":"2295:53:17"}]},"documentation":{"id":4318,"nodeType":"StructuredDocumentation","src":"2093:69:17","text":"@dev Load the value held at location `slot` in transient storage."},"id":4328,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"2176:5:17","nodeType":"FunctionDefinition","parameters":{"id":4322,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4321,"mutability":"mutable","name":"slot","nameLocation":"2198:4:17","nodeType":"VariableDeclaration","scope":4328,"src":"2182:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$4234","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":4320,"nodeType":"UserDefinedTypeName","pathNode":{"id":4319,"name":"AddressSlotType","nameLocations":["2182:15:17"],"nodeType":"IdentifierPath","referencedDeclaration":4234,"src":"2182:15:17"},"referencedDeclaration":4234,"src":"2182:15:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$4234","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"}],"src":"2181:22:17"},"returnParameters":{"id":4325,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4324,"mutability":"mutable","name":"value","nameLocation":"2235:5:17","nodeType":"VariableDeclaration","scope":4328,"src":"2227:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4323,"name":"address","nodeType":"ElementaryTypeName","src":"2227:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2226:15:17"},"scope":4428,"src":"2167:187:17","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":4338,"nodeType":"Block","src":"2490:111:17","statements":[{"AST":{"nativeSrc":"2552:43:17","nodeType":"YulBlock","src":"2552:43:17","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"2573:4:17","nodeType":"YulIdentifier","src":"2573:4:17"},{"name":"value","nativeSrc":"2579:5:17","nodeType":"YulIdentifier","src":"2579:5:17"}],"functionName":{"name":"tstore","nativeSrc":"2566:6:17","nodeType":"YulIdentifier","src":"2566:6:17"},"nativeSrc":"2566:19:17","nodeType":"YulFunctionCall","src":"2566:19:17"},"nativeSrc":"2566:19:17","nodeType":"YulExpressionStatement","src":"2566:19:17"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4332,"isOffset":false,"isSlot":false,"src":"2573:4:17","valueSize":1},{"declaration":4334,"isOffset":false,"isSlot":false,"src":"2579:5:17","valueSize":1}],"id":4337,"nodeType":"InlineAssembly","src":"2543:52:17"}]},"documentation":{"id":4329,"nodeType":"StructuredDocumentation","src":"2360:63:17","text":"@dev Store `value` at location `slot` in transient storage."},"id":4339,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"2437:6:17","nodeType":"FunctionDefinition","parameters":{"id":4335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4332,"mutability":"mutable","name":"slot","nameLocation":"2460:4:17","nodeType":"VariableDeclaration","scope":4339,"src":"2444:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$4234","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":4331,"nodeType":"UserDefinedTypeName","pathNode":{"id":4330,"name":"AddressSlotType","nameLocations":["2444:15:17"],"nodeType":"IdentifierPath","referencedDeclaration":4234,"src":"2444:15:17"},"referencedDeclaration":4234,"src":"2444:15:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$4234","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"},{"constant":false,"id":4334,"mutability":"mutable","name":"value","nameLocation":"2474:5:17","nodeType":"VariableDeclaration","scope":4339,"src":"2466:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4333,"name":"address","nodeType":"ElementaryTypeName","src":"2466:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2443:37:17"},"returnParameters":{"id":4336,"nodeType":"ParameterList","parameters":[],"src":"2490:0:17"},"scope":4428,"src":"2428:173:17","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4349,"nodeType":"Block","src":"2753:112:17","statements":[{"AST":{"nativeSrc":"2815:44:17","nodeType":"YulBlock","src":"2815:44:17","statements":[{"nativeSrc":"2829:20:17","nodeType":"YulAssignment","src":"2829:20:17","value":{"arguments":[{"name":"slot","nativeSrc":"2844:4:17","nodeType":"YulIdentifier","src":"2844:4:17"}],"functionName":{"name":"tload","nativeSrc":"2838:5:17","nodeType":"YulIdentifier","src":"2838:5:17"},"nativeSrc":"2838:11:17","nodeType":"YulFunctionCall","src":"2838:11:17"},"variableNames":[{"name":"value","nativeSrc":"2829:5:17","nodeType":"YulIdentifier","src":"2829:5:17"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4343,"isOffset":false,"isSlot":false,"src":"2844:4:17","valueSize":1},{"declaration":4346,"isOffset":false,"isSlot":false,"src":"2829:5:17","valueSize":1}],"id":4348,"nodeType":"InlineAssembly","src":"2806:53:17"}]},"documentation":{"id":4340,"nodeType":"StructuredDocumentation","src":"2607:69:17","text":"@dev Load the value held at location `slot` in transient storage."},"id":4350,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"2690:5:17","nodeType":"FunctionDefinition","parameters":{"id":4344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4343,"mutability":"mutable","name":"slot","nameLocation":"2712:4:17","nodeType":"VariableDeclaration","scope":4350,"src":"2696:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4251","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":4342,"nodeType":"UserDefinedTypeName","pathNode":{"id":4341,"name":"BooleanSlotType","nameLocations":["2696:15:17"],"nodeType":"IdentifierPath","referencedDeclaration":4251,"src":"2696:15:17"},"referencedDeclaration":4251,"src":"2696:15:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4251","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"}],"src":"2695:22:17"},"returnParameters":{"id":4347,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4346,"mutability":"mutable","name":"value","nameLocation":"2746:5:17","nodeType":"VariableDeclaration","scope":4350,"src":"2741:10:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4345,"name":"bool","nodeType":"ElementaryTypeName","src":"2741:4:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2740:12:17"},"scope":4428,"src":"2681:184:17","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":4360,"nodeType":"Block","src":"2998:111:17","statements":[{"AST":{"nativeSrc":"3060:43:17","nodeType":"YulBlock","src":"3060:43:17","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"3081:4:17","nodeType":"YulIdentifier","src":"3081:4:17"},{"name":"value","nativeSrc":"3087:5:17","nodeType":"YulIdentifier","src":"3087:5:17"}],"functionName":{"name":"tstore","nativeSrc":"3074:6:17","nodeType":"YulIdentifier","src":"3074:6:17"},"nativeSrc":"3074:19:17","nodeType":"YulFunctionCall","src":"3074:19:17"},"nativeSrc":"3074:19:17","nodeType":"YulExpressionStatement","src":"3074:19:17"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4354,"isOffset":false,"isSlot":false,"src":"3081:4:17","valueSize":1},{"declaration":4356,"isOffset":false,"isSlot":false,"src":"3087:5:17","valueSize":1}],"id":4359,"nodeType":"InlineAssembly","src":"3051:52:17"}]},"documentation":{"id":4351,"nodeType":"StructuredDocumentation","src":"2871:63:17","text":"@dev Store `value` at location `slot` in transient storage."},"id":4361,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"2948:6:17","nodeType":"FunctionDefinition","parameters":{"id":4357,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4354,"mutability":"mutable","name":"slot","nameLocation":"2971:4:17","nodeType":"VariableDeclaration","scope":4361,"src":"2955:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4251","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":4353,"nodeType":"UserDefinedTypeName","pathNode":{"id":4352,"name":"BooleanSlotType","nameLocations":["2955:15:17"],"nodeType":"IdentifierPath","referencedDeclaration":4251,"src":"2955:15:17"},"referencedDeclaration":4251,"src":"2955:15:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4251","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"},{"constant":false,"id":4356,"mutability":"mutable","name":"value","nameLocation":"2982:5:17","nodeType":"VariableDeclaration","scope":4361,"src":"2977:10:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4355,"name":"bool","nodeType":"ElementaryTypeName","src":"2977:4:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2954:34:17"},"returnParameters":{"id":4358,"nodeType":"ParameterList","parameters":[],"src":"2998:0:17"},"scope":4428,"src":"2939:170:17","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4371,"nodeType":"Block","src":"3264:112:17","statements":[{"AST":{"nativeSrc":"3326:44:17","nodeType":"YulBlock","src":"3326:44:17","statements":[{"nativeSrc":"3340:20:17","nodeType":"YulAssignment","src":"3340:20:17","value":{"arguments":[{"name":"slot","nativeSrc":"3355:4:17","nodeType":"YulIdentifier","src":"3355:4:17"}],"functionName":{"name":"tload","nativeSrc":"3349:5:17","nodeType":"YulIdentifier","src":"3349:5:17"},"nativeSrc":"3349:11:17","nodeType":"YulFunctionCall","src":"3349:11:17"},"variableNames":[{"name":"value","nativeSrc":"3340:5:17","nodeType":"YulIdentifier","src":"3340:5:17"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4365,"isOffset":false,"isSlot":false,"src":"3355:4:17","valueSize":1},{"declaration":4368,"isOffset":false,"isSlot":false,"src":"3340:5:17","valueSize":1}],"id":4370,"nodeType":"InlineAssembly","src":"3317:53:17"}]},"documentation":{"id":4362,"nodeType":"StructuredDocumentation","src":"3115:69:17","text":"@dev Load the value held at location `slot` in transient storage."},"id":4372,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"3198:5:17","nodeType":"FunctionDefinition","parameters":{"id":4366,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4365,"mutability":"mutable","name":"slot","nameLocation":"3220:4:17","nodeType":"VariableDeclaration","scope":4372,"src":"3204:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$4268","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":4364,"nodeType":"UserDefinedTypeName","pathNode":{"id":4363,"name":"Bytes32SlotType","nameLocations":["3204:15:17"],"nodeType":"IdentifierPath","referencedDeclaration":4268,"src":"3204:15:17"},"referencedDeclaration":4268,"src":"3204:15:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$4268","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"}],"src":"3203:22:17"},"returnParameters":{"id":4369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4368,"mutability":"mutable","name":"value","nameLocation":"3257:5:17","nodeType":"VariableDeclaration","scope":4372,"src":"3249:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4367,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3249:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3248:15:17"},"scope":4428,"src":"3189:187:17","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":4382,"nodeType":"Block","src":"3512:111:17","statements":[{"AST":{"nativeSrc":"3574:43:17","nodeType":"YulBlock","src":"3574:43:17","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"3595:4:17","nodeType":"YulIdentifier","src":"3595:4:17"},{"name":"value","nativeSrc":"3601:5:17","nodeType":"YulIdentifier","src":"3601:5:17"}],"functionName":{"name":"tstore","nativeSrc":"3588:6:17","nodeType":"YulIdentifier","src":"3588:6:17"},"nativeSrc":"3588:19:17","nodeType":"YulFunctionCall","src":"3588:19:17"},"nativeSrc":"3588:19:17","nodeType":"YulExpressionStatement","src":"3588:19:17"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4376,"isOffset":false,"isSlot":false,"src":"3595:4:17","valueSize":1},{"declaration":4378,"isOffset":false,"isSlot":false,"src":"3601:5:17","valueSize":1}],"id":4381,"nodeType":"InlineAssembly","src":"3565:52:17"}]},"documentation":{"id":4373,"nodeType":"StructuredDocumentation","src":"3382:63:17","text":"@dev Store `value` at location `slot` in transient storage."},"id":4383,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"3459:6:17","nodeType":"FunctionDefinition","parameters":{"id":4379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4376,"mutability":"mutable","name":"slot","nameLocation":"3482:4:17","nodeType":"VariableDeclaration","scope":4383,"src":"3466:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$4268","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":4375,"nodeType":"UserDefinedTypeName","pathNode":{"id":4374,"name":"Bytes32SlotType","nameLocations":["3466:15:17"],"nodeType":"IdentifierPath","referencedDeclaration":4268,"src":"3466:15:17"},"referencedDeclaration":4268,"src":"3466:15:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$4268","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"},{"constant":false,"id":4378,"mutability":"mutable","name":"value","nameLocation":"3496:5:17","nodeType":"VariableDeclaration","scope":4383,"src":"3488:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4377,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3488:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3465:37:17"},"returnParameters":{"id":4380,"nodeType":"ParameterList","parameters":[],"src":"3512:0:17"},"scope":4428,"src":"3450:173:17","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4393,"nodeType":"Block","src":"3778:112:17","statements":[{"AST":{"nativeSrc":"3840:44:17","nodeType":"YulBlock","src":"3840:44:17","statements":[{"nativeSrc":"3854:20:17","nodeType":"YulAssignment","src":"3854:20:17","value":{"arguments":[{"name":"slot","nativeSrc":"3869:4:17","nodeType":"YulIdentifier","src":"3869:4:17"}],"functionName":{"name":"tload","nativeSrc":"3863:5:17","nodeType":"YulIdentifier","src":"3863:5:17"},"nativeSrc":"3863:11:17","nodeType":"YulFunctionCall","src":"3863:11:17"},"variableNames":[{"name":"value","nativeSrc":"3854:5:17","nodeType":"YulIdentifier","src":"3854:5:17"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4387,"isOffset":false,"isSlot":false,"src":"3869:4:17","valueSize":1},{"declaration":4390,"isOffset":false,"isSlot":false,"src":"3854:5:17","valueSize":1}],"id":4392,"nodeType":"InlineAssembly","src":"3831:53:17"}]},"documentation":{"id":4384,"nodeType":"StructuredDocumentation","src":"3629:69:17","text":"@dev Load the value held at location `slot` in transient storage."},"id":4394,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"3712:5:17","nodeType":"FunctionDefinition","parameters":{"id":4388,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4387,"mutability":"mutable","name":"slot","nameLocation":"3734:4:17","nodeType":"VariableDeclaration","scope":4394,"src":"3718:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$4285","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":4386,"nodeType":"UserDefinedTypeName","pathNode":{"id":4385,"name":"Uint256SlotType","nameLocations":["3718:15:17"],"nodeType":"IdentifierPath","referencedDeclaration":4285,"src":"3718:15:17"},"referencedDeclaration":4285,"src":"3718:15:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$4285","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"3717:22:17"},"returnParameters":{"id":4391,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4390,"mutability":"mutable","name":"value","nameLocation":"3771:5:17","nodeType":"VariableDeclaration","scope":4394,"src":"3763:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4389,"name":"uint256","nodeType":"ElementaryTypeName","src":"3763:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3762:15:17"},"scope":4428,"src":"3703:187:17","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":4404,"nodeType":"Block","src":"4026:111:17","statements":[{"AST":{"nativeSrc":"4088:43:17","nodeType":"YulBlock","src":"4088:43:17","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"4109:4:17","nodeType":"YulIdentifier","src":"4109:4:17"},{"name":"value","nativeSrc":"4115:5:17","nodeType":"YulIdentifier","src":"4115:5:17"}],"functionName":{"name":"tstore","nativeSrc":"4102:6:17","nodeType":"YulIdentifier","src":"4102:6:17"},"nativeSrc":"4102:19:17","nodeType":"YulFunctionCall","src":"4102:19:17"},"nativeSrc":"4102:19:17","nodeType":"YulExpressionStatement","src":"4102:19:17"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4398,"isOffset":false,"isSlot":false,"src":"4109:4:17","valueSize":1},{"declaration":4400,"isOffset":false,"isSlot":false,"src":"4115:5:17","valueSize":1}],"id":4403,"nodeType":"InlineAssembly","src":"4079:52:17"}]},"documentation":{"id":4395,"nodeType":"StructuredDocumentation","src":"3896:63:17","text":"@dev Store `value` at location `slot` in transient storage."},"id":4405,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"3973:6:17","nodeType":"FunctionDefinition","parameters":{"id":4401,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4398,"mutability":"mutable","name":"slot","nameLocation":"3996:4:17","nodeType":"VariableDeclaration","scope":4405,"src":"3980:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$4285","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":4397,"nodeType":"UserDefinedTypeName","pathNode":{"id":4396,"name":"Uint256SlotType","nameLocations":["3980:15:17"],"nodeType":"IdentifierPath","referencedDeclaration":4285,"src":"3980:15:17"},"referencedDeclaration":4285,"src":"3980:15:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$4285","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"},{"constant":false,"id":4400,"mutability":"mutable","name":"value","nameLocation":"4010:5:17","nodeType":"VariableDeclaration","scope":4405,"src":"4002:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4399,"name":"uint256","nodeType":"ElementaryTypeName","src":"4002:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3979:37:17"},"returnParameters":{"id":4402,"nodeType":"ParameterList","parameters":[],"src":"4026:0:17"},"scope":4428,"src":"3964:173:17","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4415,"nodeType":"Block","src":"4290:112:17","statements":[{"AST":{"nativeSrc":"4352:44:17","nodeType":"YulBlock","src":"4352:44:17","statements":[{"nativeSrc":"4366:20:17","nodeType":"YulAssignment","src":"4366:20:17","value":{"arguments":[{"name":"slot","nativeSrc":"4381:4:17","nodeType":"YulIdentifier","src":"4381:4:17"}],"functionName":{"name":"tload","nativeSrc":"4375:5:17","nodeType":"YulIdentifier","src":"4375:5:17"},"nativeSrc":"4375:11:17","nodeType":"YulFunctionCall","src":"4375:11:17"},"variableNames":[{"name":"value","nativeSrc":"4366:5:17","nodeType":"YulIdentifier","src":"4366:5:17"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4409,"isOffset":false,"isSlot":false,"src":"4381:4:17","valueSize":1},{"declaration":4412,"isOffset":false,"isSlot":false,"src":"4366:5:17","valueSize":1}],"id":4414,"nodeType":"InlineAssembly","src":"4343:53:17"}]},"documentation":{"id":4406,"nodeType":"StructuredDocumentation","src":"4143:69:17","text":"@dev Load the value held at location `slot` in transient storage."},"id":4416,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"4226:5:17","nodeType":"FunctionDefinition","parameters":{"id":4410,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4409,"mutability":"mutable","name":"slot","nameLocation":"4247:4:17","nodeType":"VariableDeclaration","scope":4416,"src":"4232:19:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$4302","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":4408,"nodeType":"UserDefinedTypeName","pathNode":{"id":4407,"name":"Int256SlotType","nameLocations":["4232:14:17"],"nodeType":"IdentifierPath","referencedDeclaration":4302,"src":"4232:14:17"},"referencedDeclaration":4302,"src":"4232:14:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$4302","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"}],"src":"4231:21:17"},"returnParameters":{"id":4413,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4412,"mutability":"mutable","name":"value","nameLocation":"4283:5:17","nodeType":"VariableDeclaration","scope":4416,"src":"4276:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4411,"name":"int256","nodeType":"ElementaryTypeName","src":"4276:6:17","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4275:14:17"},"scope":4428,"src":"4217:185:17","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":4426,"nodeType":"Block","src":"4536:111:17","statements":[{"AST":{"nativeSrc":"4598:43:17","nodeType":"YulBlock","src":"4598:43:17","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"4619:4:17","nodeType":"YulIdentifier","src":"4619:4:17"},{"name":"value","nativeSrc":"4625:5:17","nodeType":"YulIdentifier","src":"4625:5:17"}],"functionName":{"name":"tstore","nativeSrc":"4612:6:17","nodeType":"YulIdentifier","src":"4612:6:17"},"nativeSrc":"4612:19:17","nodeType":"YulFunctionCall","src":"4612:19:17"},"nativeSrc":"4612:19:17","nodeType":"YulExpressionStatement","src":"4612:19:17"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4420,"isOffset":false,"isSlot":false,"src":"4619:4:17","valueSize":1},{"declaration":4422,"isOffset":false,"isSlot":false,"src":"4625:5:17","valueSize":1}],"id":4425,"nodeType":"InlineAssembly","src":"4589:52:17"}]},"documentation":{"id":4417,"nodeType":"StructuredDocumentation","src":"4408:63:17","text":"@dev Store `value` at location `slot` in transient storage."},"id":4427,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"4485:6:17","nodeType":"FunctionDefinition","parameters":{"id":4423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4420,"mutability":"mutable","name":"slot","nameLocation":"4507:4:17","nodeType":"VariableDeclaration","scope":4427,"src":"4492:19:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$4302","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":4419,"nodeType":"UserDefinedTypeName","pathNode":{"id":4418,"name":"Int256SlotType","nameLocations":["4492:14:17"],"nodeType":"IdentifierPath","referencedDeclaration":4302,"src":"4492:14:17"},"referencedDeclaration":4302,"src":"4492:14:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$4302","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"},{"constant":false,"id":4422,"mutability":"mutable","name":"value","nameLocation":"4520:5:17","nodeType":"VariableDeclaration","scope":4427,"src":"4513:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4421,"name":"int256","nodeType":"ElementaryTypeName","src":"4513:6:17","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4491:35:17"},"returnParameters":{"id":4424,"nodeType":"ParameterList","parameters":[],"src":"4536:0:17"},"scope":4428,"src":"4476:171:17","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":4429,"src":"278:4371:17","usedErrors":[],"usedEvents":[]}],"src":"33:4617:17"},"id":17},"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","exportedSymbols":{"FEE_SCALING_FACTOR":[2408],"FixedPoint":[2790],"IERC20":[6486],"IProtocolFeeController":[613],"IVault":[651],"IVaultErrors":[1308],"MAX_FEE_PERCENTAGE":[2411],"PoolRoleAccounts":[2217],"ProtocolFeeController":[6083],"ReentrancyGuardTransient":[4215],"SafeCast":[8846],"SafeERC20":[6838],"SingletonAuthentication":[6189],"VaultGuard":[6238]},"id":6084,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4430,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:18"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":4432,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6084,"sourceUnit":6839,"src":"72:84:18","symbolAliases":[{"foreign":{"id":4431,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6838,"src":"81:9:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":4434,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6084,"sourceUnit":8847,"src":"157:75:18","symbolAliases":[{"foreign":{"id":4433,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8846,"src":"166:8:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":4436,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6084,"sourceUnit":6487,"src":"233:72:18","symbolAliases":[{"foreign":{"id":4435,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6486,"src":"242:6:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":4438,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6084,"sourceUnit":614,"src":"307:113:18","symbolAliases":[{"foreign":{"id":4437,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":613,"src":"316:22:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":4440,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6084,"sourceUnit":1309,"src":"421:93:18","symbolAliases":[{"foreign":{"id":4439,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1308,"src":"430:12:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":4442,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6084,"sourceUnit":652,"src":"515:81:18","symbolAliases":[{"foreign":{"id":4441,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":651,"src":"524:6:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":4446,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6084,"sourceUnit":2412,"src":"597:147:18","symbolAliases":[{"foreign":{"id":4443,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2408,"src":"610:18:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":4444,"name":"MAX_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2411,"src":"634:18:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":4445,"name":"PoolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2217,"src":"658:16:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":4448,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6084,"sourceUnit":4216,"src":"746:132:18","symbolAliases":[{"foreign":{"id":4447,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4215,"src":"759:24:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":4450,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6084,"sourceUnit":2791,"src":"879:92:18","symbolAliases":[{"foreign":{"id":4449,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2790,"src":"888:10:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"./SingletonAuthentication.sol","id":4452,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6084,"sourceUnit":6190,"src":"973:72:18","symbolAliases":[{"foreign":{"id":4451,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6189,"src":"982:23:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","file":"./VaultGuard.sol","id":4454,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6084,"sourceUnit":6239,"src":"1046:46:18","symbolAliases":[{"foreign":{"id":4453,"name":"VaultGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6238,"src":"1055:10:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":4456,"name":"IProtocolFeeController","nameLocations":["3158:22:18"],"nodeType":"IdentifierPath","referencedDeclaration":613,"src":"3158:22:18"},"id":4457,"nodeType":"InheritanceSpecifier","src":"3158:22:18"},{"baseName":{"id":4458,"name":"SingletonAuthentication","nameLocations":["3186:23:18"],"nodeType":"IdentifierPath","referencedDeclaration":6189,"src":"3186:23:18"},"id":4459,"nodeType":"InheritanceSpecifier","src":"3186:23:18"},{"baseName":{"id":4460,"name":"ReentrancyGuardTransient","nameLocations":["3215:24:18"],"nodeType":"IdentifierPath","referencedDeclaration":4215,"src":"3215:24:18"},"id":4461,"nodeType":"InheritanceSpecifier","src":"3215:24:18"},{"baseName":{"id":4462,"name":"VaultGuard","nameLocations":["3245:10:18"],"nodeType":"IdentifierPath","referencedDeclaration":6238,"src":"3245:10:18"},"id":4463,"nodeType":"InheritanceSpecifier","src":"3245:10:18"}],"canonicalName":"ProtocolFeeController","contractDependencies":[],"contractKind":"contract","documentation":{"id":4455,"nodeType":"StructuredDocumentation","src":"1094:2025:18","text":" @notice Helper contract to manage protocol and creator fees outside the Vault.\n @dev This contract stores global default protocol swap and yield fees, and also tracks the values of those fees\n for each pool (the `PoolFeeConfig` described below). Protocol fees can always be overwritten by governance, but\n pool creator fees are controlled by the registered poolCreator (see `PoolRoleAccounts`).\n The Vault stores a single aggregate percentage for swap and yield fees; only this `ProtocolFeeController` knows\n the component fee percentages, and how to compute the aggregate from the components. This is done for performance\n reasons, to minimize gas on the critical path, as this way the Vault simply applies a single \"cut\", and stores the\n fee amounts separately from the pool balances.\n The pool creator fees are \"net\" protocol fees, meaning the protocol fee is taken first, and the pool creator fee\n percentage is applied to the remainder. Essentially, the protocol is paid first, then the remainder is divided\n between the pool creator and the LPs.\n There is a permissionless function (`collectAggregateFees`) that transfers these tokens from the Vault to this\n contract, and distributes them between the protocol and pool creator, after which they can be withdrawn at any\n time by governance and the pool creator, respectively.\n Protocol fees can be zero in some cases (e.g., the token is registered as exempt), and pool creator fees are zero\n if there is no creator role address defined. Protocol fees are capped at a maximum percentage (50%); pool creator\n fees are computed \"net\" protocol fees, so they can be any value from 0 to 100%. Any combination is possible.\n A protocol-fee-exempt pool with a 100% pool creator fee would send all fees to the creator. If there is no pool\n creator, a pool with a 50% protocol fee would divide the fees evenly between the protocol and LPs.\n This contract is deployed with the Vault, but can be changed by governance."},"fullyImplemented":true,"id":6083,"linearizedBaseContracts":[6083,6238,4215,6189,2491,47,613],"name":"ProtocolFeeController","nameLocation":"3129:21:18","nodeType":"ContractDefinition","nodes":[{"global":false,"id":4466,"libraryName":{"id":4464,"name":"FixedPoint","nameLocations":["3268:10:18"],"nodeType":"IdentifierPath","referencedDeclaration":2790,"src":"3268:10:18"},"nodeType":"UsingForDirective","src":"3262:29:18","typeName":{"id":4465,"name":"uint256","nodeType":"ElementaryTypeName","src":"3283:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":4470,"libraryName":{"id":4467,"name":"SafeERC20","nameLocations":["3302:9:18"],"nodeType":"IdentifierPath","referencedDeclaration":6838,"src":"3302:9:18"},"nodeType":"UsingForDirective","src":"3296:27:18","typeName":{"id":4469,"nodeType":"UserDefinedTypeName","pathNode":{"id":4468,"name":"IERC20","nameLocations":["3316:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"3316:6:18"},"referencedDeclaration":6486,"src":"3316:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}}},{"global":false,"id":4472,"libraryName":{"id":4471,"name":"SafeCast","nameLocations":["3334:8:18"],"nodeType":"IdentifierPath","referencedDeclaration":8846,"src":"3334:8:18"},"nodeType":"UsingForDirective","src":"3328:21:18"},{"canonicalName":"ProtocolFeeController.ProtocolFeeType","id":4475,"members":[{"id":4473,"name":"SWAP","nameLocation":"3386:4:18","nodeType":"EnumValue","src":"3386:4:18"},{"id":4474,"name":"YIELD","nameLocation":"3400:5:18","nodeType":"EnumValue","src":"3400:5:18"}],"name":"ProtocolFeeType","nameLocation":"3360:15:18","nodeType":"EnumDefinition","src":"3355:56:18"},{"canonicalName":"ProtocolFeeController.PoolFeeConfig","documentation":{"id":4476,"nodeType":"StructuredDocumentation","src":"3417:1063:18","text":" @notice Fee configuration stored in the swap and yield fee mappings.\n @dev Instead of storing only the fee in the mapping, also store a flag to indicate whether the fee has been\n set by governance through a permissioned call. (The fee is stored in 64-bits, so that the struct fits\n within a single slot.)\n We know the percentage is an 18-decimal FP value, which only takes 60 bits, so it's guaranteed to fit,\n and we can do simple casts to truncate the high bits without needed SafeCast.\n We want to enable permissionless updates for pools, so that it is less onerous to update potentially\n hundreds of pools if the global protocol fees change. However, we don't want to overwrite pools that\n have had their fee percentages manually set by the DAO (i.e., after off-chain negotiation and agreement).\n @param feePercentage The raw swap or yield fee percentage\n @param isOverride When set, this fee is controlled by governance, and cannot be changed permissionlessly"},"id":4481,"members":[{"constant":false,"id":4478,"mutability":"mutable","name":"feePercentage","nameLocation":"4523:13:18","nodeType":"VariableDeclaration","scope":4481,"src":"4516:20:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":4477,"name":"uint64","nodeType":"ElementaryTypeName","src":"4516:6:18","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":4480,"mutability":"mutable","name":"isOverride","nameLocation":"4551:10:18","nodeType":"VariableDeclaration","scope":4481,"src":"4546:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4479,"name":"bool","nodeType":"ElementaryTypeName","src":"4546:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"PoolFeeConfig","nameLocation":"4492:13:18","nodeType":"StructDefinition","scope":6083,"src":"4485:83:18","visibility":"public"},{"constant":true,"functionSelector":"2772d156","id":4484,"mutability":"constant","name":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","nameLocation":"4685:32:18","nodeType":"VariableDeclaration","scope":6083,"src":"4661:64:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4482,"name":"uint256","nodeType":"ElementaryTypeName","src":"4661:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3530653136","id":4483,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4720:5:18","typeDescriptions":{"typeIdentifier":"t_rational_500000000000000000_by_1","typeString":"int_const 500000000000000000"},"value":"50e16"},"visibility":"public"},{"constant":true,"functionSelector":"5e32e4e8","id":4487,"mutability":"constant","name":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","nameLocation":"4809:33:18","nodeType":"VariableDeclaration","scope":6083,"src":"4785:65:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4485,"name":"uint256","nodeType":"ElementaryTypeName","src":"4785:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3530653136","id":4486,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4845:5:18","typeDescriptions":{"typeIdentifier":"t_rational_500000000000000000_by_1","typeString":"int_const 500000000000000000"},"value":"50e16"},"visibility":"public"},{"constant":true,"functionSelector":"2e1d388d","id":4490,"mutability":"constant","name":"MAX_CREATOR_FEE_PERCENTAGE","nameLocation":"4946:26:18","nodeType":"VariableDeclaration","scope":6083,"src":"4922:62:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4488,"name":"uint256","nodeType":"ElementaryTypeName","src":"4922:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"39392e393939653136","id":4489,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4975:9:18","typeDescriptions":{"typeIdentifier":"t_rational_999990000000000000_by_1","typeString":"int_const 999990000000000000"},"value":"99.999e16"},"visibility":"public"},{"constant":false,"id":4492,"mutability":"mutable","name":"_globalProtocolSwapFeePercentage","nameLocation":"5051:32:18","nodeType":"VariableDeclaration","scope":6083,"src":"5035:48:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4491,"name":"uint256","nodeType":"ElementaryTypeName","src":"5035:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":4494,"mutability":"mutable","name":"_globalProtocolYieldFeePercentage","nameLocation":"5140:33:18","nodeType":"VariableDeclaration","scope":6083,"src":"5124:49:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4493,"name":"uint256","nodeType":"ElementaryTypeName","src":"5124:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":4498,"mutability":"mutable","name":"_registeredPools","nameLocation":"5346:16:18","nodeType":"VariableDeclaration","scope":6083,"src":"5294:68:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":4497,"keyName":"pool","keyNameLocation":"5310:4:18","keyType":{"id":4495,"name":"address","nodeType":"ElementaryTypeName","src":"5302:7:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5294:42:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"isRegistered","valueNameLocation":"5323:12:18","valueType":{"id":4496,"name":"bool","nodeType":"ElementaryTypeName","src":"5318:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"},{"constant":false,"id":4503,"mutability":"mutable","name":"_poolProtocolSwapFeePercentages","nameLocation":"5545:31:18","nodeType":"VariableDeclaration","scope":6083,"src":"5483:93:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"typeName":{"id":4502,"keyName":"pool","keyNameLocation":"5499:4:18","keyType":{"id":4499,"name":"address","nodeType":"ElementaryTypeName","src":"5491:7:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5483:52:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"valueName":"swapFeeConfig","valueNameLocation":"5521:13:18","valueType":{"id":4501,"nodeType":"UserDefinedTypeName","pathNode":{"id":4500,"name":"PoolFeeConfig","nameLocations":["5507:13:18"],"nodeType":"IdentifierPath","referencedDeclaration":4481,"src":"5507:13:18"},"referencedDeclaration":4481,"src":"5507:13:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}}},"visibility":"internal"},{"constant":false,"id":4508,"mutability":"mutable","name":"_poolProtocolYieldFeePercentages","nameLocation":"5761:32:18","nodeType":"VariableDeclaration","scope":6083,"src":"5698:95:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"typeName":{"id":4507,"keyName":"pool","keyNameLocation":"5714:4:18","keyType":{"id":4504,"name":"address","nodeType":"ElementaryTypeName","src":"5706:7:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5698:53:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"valueName":"yieldFeeConfig","valueNameLocation":"5736:14:18","valueType":{"id":4506,"nodeType":"UserDefinedTypeName","pathNode":{"id":4505,"name":"PoolFeeConfig","nameLocations":["5722:13:18"],"nodeType":"IdentifierPath","referencedDeclaration":4481,"src":"5722:13:18"},"referencedDeclaration":4481,"src":"5722:13:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}}},"visibility":"internal"},{"constant":false,"id":4512,"mutability":"mutable","name":"_poolCreatorSwapFeePercentages","nameLocation":"5917:30:18","nodeType":"VariableDeclaration","scope":6083,"src":"5856:91:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":4511,"keyName":"pool","keyNameLocation":"5872:4:18","keyType":{"id":4509,"name":"address","nodeType":"ElementaryTypeName","src":"5864:7:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5856:51:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"poolCreatorSwapFee","valueNameLocation":"5888:18:18","valueType":{"id":4510,"name":"uint256","nodeType":"ElementaryTypeName","src":"5880:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":4516,"mutability":"mutable","name":"_poolCreatorYieldFeePercentages","nameLocation":"6073:31:18","nodeType":"VariableDeclaration","scope":6083,"src":"6011:93:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":4515,"keyName":"pool","keyNameLocation":"6027:4:18","keyType":{"id":4513,"name":"address","nodeType":"ElementaryTypeName","src":"6019:7:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6011:52:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"poolCreatorYieldFee","valueNameLocation":"6043:19:18","valueType":{"id":4514,"name":"uint256","nodeType":"ElementaryTypeName","src":"6035:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":4523,"mutability":"mutable","name":"_protocolFeeAmounts","nameLocation":"6290:19:18","nodeType":"VariableDeclaration","scope":6083,"src":"6209:100:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"typeName":{"id":4522,"keyName":"pool","keyNameLocation":"6225:4:18","keyType":{"id":4517,"name":"address","nodeType":"ElementaryTypeName","src":"6217:7:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6209:71:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":4521,"keyName":"poolToken","keyNameLocation":"6248:9:18","keyType":{"id":4519,"nodeType":"UserDefinedTypeName","pathNode":{"id":4518,"name":"IERC20","nameLocations":["6241:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"6241:6:18"},"referencedDeclaration":6486,"src":"6241:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"6233:46:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"},"valueName":"feeAmount","valueNameLocation":"6269:9:18","valueType":{"id":4520,"name":"uint256","nodeType":"ElementaryTypeName","src":"6261:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"internal"},{"constant":false,"id":4530,"mutability":"mutable","name":"_poolCreatorFeeAmounts","nameLocation":"6505:22:18","nodeType":"VariableDeclaration","scope":6083,"src":"6424:103:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"typeName":{"id":4529,"keyName":"pool","keyNameLocation":"6440:4:18","keyType":{"id":4524,"name":"address","nodeType":"ElementaryTypeName","src":"6432:7:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6424:71:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":4528,"keyName":"poolToken","keyNameLocation":"6463:9:18","keyType":{"id":4526,"nodeType":"UserDefinedTypeName","pathNode":{"id":4525,"name":"IERC20","nameLocations":["6456:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"6456:6:18"},"referencedDeclaration":6486,"src":"6456:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"6448:46:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"},"valueName":"feeAmount","valueNameLocation":"6484:9:18","valueType":{"id":4527,"name":"uint256","nodeType":"ElementaryTypeName","src":"6476:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"internal"},{"documentation":{"id":4531,"nodeType":"StructuredDocumentation","src":"6534:279:18","text":" @notice Prevent pool data from being registered more than once.\n @dev This can happen if there is an error in the migration, or if governance somehow grants permission to\n `migratePool`, which should never happen.\n @param pool The pool"},"errorSelector":"db771c80","id":4535,"name":"PoolAlreadyRegistered","nameLocation":"6824:21:18","nodeType":"ErrorDefinition","parameters":{"id":4534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4533,"mutability":"mutable","name":"pool","nameLocation":"6854:4:18","nodeType":"VariableDeclaration","scope":4535,"src":"6846:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4532,"name":"address","nodeType":"ElementaryTypeName","src":"6846:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6845:14:18"},"src":"6818:42:18"},{"documentation":{"id":4536,"nodeType":"StructuredDocumentation","src":"6866:53:18","text":"@notice Migration source cannot be this contract."},"errorSelector":"b82fd5bf","id":4538,"name":"InvalidMigrationSource","nameLocation":"6930:22:18","nodeType":"ErrorDefinition","parameters":{"id":4537,"nodeType":"ParameterList","parameters":[],"src":"6952:2:18"},"src":"6924:31:18"},{"body":{"id":4547,"nodeType":"Block","src":"7051:60:18","statements":[{"expression":{"arguments":[{"id":4543,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4540,"src":"7088:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4542,"name":"_ensureCallerIsPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5332,"src":"7061:26:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":4544,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7061:32:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4545,"nodeType":"ExpressionStatement","src":"7061:32:18"},{"id":4546,"nodeType":"PlaceholderStatement","src":"7103:1:18"}]},"id":4548,"name":"onlyPoolCreator","nameLocation":"7021:15:18","nodeType":"ModifierDefinition","parameters":{"id":4541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4540,"mutability":"mutable","name":"pool","nameLocation":"7045:4:18","nodeType":"VariableDeclaration","scope":4548,"src":"7037:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4539,"name":"address","nodeType":"ElementaryTypeName","src":"7037:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7036:14:18"},"src":"7012:99:18","virtual":false,"visibility":"internal"},{"body":{"id":4565,"nodeType":"Block","src":"7234:207:18","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4552,"name":"newSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4550,"src":"7248:20:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":4553,"name":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4484,"src":"7271:32:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7248:55:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4559,"nodeType":"IfStatement","src":"7244:127:18","trueBody":{"id":4558,"nodeType":"Block","src":"7305:66:18","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4555,"name":"ProtocolSwapFeePercentageTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":394,"src":"7326:32:18","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7326:34:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4557,"nodeType":"RevertStatement","src":"7319:41:18"}]}},{"expression":{"arguments":[{"id":4561,"name":"newSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4550,"src":"7402:20:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4560,"name":"_ensureValidPrecision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6082,"src":"7380:21:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":4562,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7380:43:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4563,"nodeType":"ExpressionStatement","src":"7380:43:18"},{"id":4564,"nodeType":"PlaceholderStatement","src":"7433:1:18"}]},"id":4566,"name":"withValidSwapFee","nameLocation":"7187:16:18","nodeType":"ModifierDefinition","parameters":{"id":4551,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4550,"mutability":"mutable","name":"newSwapFeePercentage","nameLocation":"7212:20:18","nodeType":"VariableDeclaration","scope":4566,"src":"7204:28:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4549,"name":"uint256","nodeType":"ElementaryTypeName","src":"7204:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7203:30:18"},"src":"7178:263:18","virtual":false,"visibility":"internal"},{"body":{"id":4583,"nodeType":"Block","src":"7567:211:18","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4570,"name":"newYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4568,"src":"7581:21:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":4571,"name":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4487,"src":"7605:33:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7581:57:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4577,"nodeType":"IfStatement","src":"7577:130:18","trueBody":{"id":4576,"nodeType":"Block","src":"7640:67:18","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4573,"name":"ProtocolYieldFeePercentageTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":397,"src":"7661:33:18","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4574,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7661:35:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4575,"nodeType":"RevertStatement","src":"7654:42:18"}]}},{"expression":{"arguments":[{"id":4579,"name":"newYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4568,"src":"7738:21:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4578,"name":"_ensureValidPrecision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6082,"src":"7716:21:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":4580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7716:44:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4581,"nodeType":"ExpressionStatement","src":"7716:44:18"},{"id":4582,"nodeType":"PlaceholderStatement","src":"7770:1:18"}]},"id":4584,"name":"withValidYieldFee","nameLocation":"7518:17:18","nodeType":"ModifierDefinition","parameters":{"id":4569,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4568,"mutability":"mutable","name":"newYieldFeePercentage","nameLocation":"7544:21:18","nodeType":"VariableDeclaration","scope":4584,"src":"7536:29:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4567,"name":"uint256","nodeType":"ElementaryTypeName","src":"7536:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7535:31:18"},"src":"7509:269:18","virtual":false,"visibility":"internal"},{"body":{"id":4597,"nodeType":"Block","src":"7854:154:18","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4588,"name":"newPoolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4586,"src":"7868:27:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":4589,"name":"MAX_CREATOR_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4490,"src":"7898:26:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7868:56:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4595,"nodeType":"IfStatement","src":"7864:127:18","trueBody":{"id":4594,"nodeType":"Block","src":"7926:65:18","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4591,"name":"PoolCreatorFeePercentageTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":412,"src":"7947:31:18","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7947:33:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4593,"nodeType":"RevertStatement","src":"7940:40:18"}]}},{"id":4596,"nodeType":"PlaceholderStatement","src":"8000:1:18"}]},"id":4598,"name":"withValidPoolCreatorFee","nameLocation":"7793:23:18","nodeType":"ModifierDefinition","parameters":{"id":4587,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4586,"mutability":"mutable","name":"newPoolCreatorFeePercentage","nameLocation":"7825:27:18","nodeType":"VariableDeclaration","scope":4598,"src":"7817:35:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4585,"name":"uint256","nodeType":"ElementaryTypeName","src":"7817:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7816:37:18"},"src":"7784:224:18","virtual":false,"visibility":"internal"},{"body":{"id":4607,"nodeType":"Block","src":"8145:54:18","statements":[{"expression":{"arguments":[{"id":4603,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4600,"src":"8176:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4602,"name":"collectAggregateFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4649,"src":"8155:20:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":4604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8155:26:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4605,"nodeType":"ExpressionStatement","src":"8155:26:18"},{"id":4606,"nodeType":"PlaceholderStatement","src":"8191:1:18"}]},"id":4608,"name":"withLatestFees","nameLocation":"8116:14:18","nodeType":"ModifierDefinition","parameters":{"id":4601,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4600,"mutability":"mutable","name":"pool","nameLocation":"8139:4:18","nodeType":"VariableDeclaration","scope":4608,"src":"8131:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4599,"name":"address","nodeType":"ElementaryTypeName","src":"8131:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8130:14:18"},"src":"8107:92:18","virtual":false,"visibility":"internal"},{"body":{"id":4620,"nodeType":"Block","src":"8283:64:18","statements":[]},"id":4621,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":4614,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4611,"src":"8256:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}}],"id":4615,"kind":"baseConstructorSpecifier","modifierName":{"id":4613,"name":"SingletonAuthentication","nameLocations":["8232:23:18"],"nodeType":"IdentifierPath","referencedDeclaration":6189,"src":"8232:23:18"},"nodeType":"ModifierInvocation","src":"8232:31:18"},{"arguments":[{"id":4617,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4611,"src":"8275:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}}],"id":4618,"kind":"baseConstructorSpecifier","modifierName":{"id":4616,"name":"VaultGuard","nameLocations":["8264:10:18"],"nodeType":"IdentifierPath","referencedDeclaration":6238,"src":"8264:10:18"},"nodeType":"ModifierInvocation","src":"8264:18:18"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":4612,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4611,"mutability":"mutable","name":"vault_","nameLocation":"8224:6:18","nodeType":"VariableDeclaration","scope":4621,"src":"8217:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":4610,"nodeType":"UserDefinedTypeName","pathNode":{"id":4609,"name":"IVault","nameLocations":["8217:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"8217:6:18"},"referencedDeclaration":651,"src":"8217:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"}],"src":"8216:15:18"},"returnParameters":{"id":4619,"nodeType":"ParameterList","parameters":[],"src":"8283:0:18"},"scope":6083,"src":"8205:142:18","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[419],"body":{"id":4630,"nodeType":"Block","src":"8444:30:18","statements":[{"expression":{"id":4628,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"8461:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"functionReturnParameters":4627,"id":4629,"nodeType":"Return","src":"8454:13:18"}]},"documentation":{"id":4622,"nodeType":"StructuredDocumentation","src":"8353:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"fbfa77cf","id":4631,"implemented":true,"kind":"function","modifiers":[],"name":"vault","nameLocation":"8405:5:18","nodeType":"FunctionDefinition","parameters":{"id":4623,"nodeType":"ParameterList","parameters":[],"src":"8410:2:18"},"returnParameters":{"id":4627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4626,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4631,"src":"8436:6:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":4625,"nodeType":"UserDefinedTypeName","pathNode":{"id":4624,"name":"IVault","nameLocations":["8436:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"8436:6:18"},"referencedDeclaration":651,"src":"8436:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"}],"src":"8435:8:18"},"scope":6083,"src":"8396:78:18","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[425],"body":{"id":4648,"nodeType":"Block","src":"8574:100:18","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":4642,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6083,"src":"8613:21:18","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ProtocolFeeController_$6083_$","typeString":"type(contract ProtocolFeeController)"}},"id":4643,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8635:24:18","memberName":"collectAggregateFeesHook","nodeType":"MemberAccess","referencedDeclaration":4677,"src":"8613:46:18","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$returns$__$","typeString":"function ProtocolFeeController.collectAggregateFeesHook(address)"}},{"id":4644,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4634,"src":"8661:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$returns$__$","typeString":"function ProtocolFeeController.collectAggregateFeesHook(address)"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":4640,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8598:3:18","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":4641,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8602:10:18","memberName":"encodeCall","nodeType":"MemberAccess","src":"8598:14:18","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":4645,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8598:68:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":4637,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"8584:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":4639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8591:6:18","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":1980,"src":"8584:13:18","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":4646,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8584:83:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4647,"nodeType":"ExpressionStatement","src":"8584:83:18"}]},"documentation":{"id":4632,"nodeType":"StructuredDocumentation","src":"8480:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"8f4ab9ca","id":4649,"implemented":true,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"8532:20:18","nodeType":"FunctionDefinition","parameters":{"id":4635,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4634,"mutability":"mutable","name":"pool","nameLocation":"8561:4:18","nodeType":"VariableDeclaration","scope":4649,"src":"8553:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4633,"name":"address","nodeType":"ElementaryTypeName","src":"8553:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8552:14:18"},"returnParameters":{"id":4636,"nodeType":"ParameterList","parameters":[],"src":"8574:0:18"},"scope":6083,"src":"8523:151:18","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":4676,"nodeType":"Block","src":"9057:186:18","statements":[{"assignments":[4661,4664],"declarations":[{"constant":false,"id":4661,"mutability":"mutable","name":"totalSwapFees","nameLocation":"9085:13:18","nodeType":"VariableDeclaration","scope":4676,"src":"9068:30:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4659,"name":"uint256","nodeType":"ElementaryTypeName","src":"9068:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4660,"nodeType":"ArrayTypeName","src":"9068:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4664,"mutability":"mutable","name":"totalYieldFees","nameLocation":"9117:14:18","nodeType":"VariableDeclaration","scope":4676,"src":"9100:31:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4662,"name":"uint256","nodeType":"ElementaryTypeName","src":"9100:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4663,"nodeType":"ArrayTypeName","src":"9100:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":4669,"initialValue":{"arguments":[{"id":4667,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4652,"src":"9163:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":4665,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"9135:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":4666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9142:20:18","memberName":"collectAggregateFees","nodeType":"MemberAccess","referencedDeclaration":779,"src":"9135:27:18","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) external returns (uint256[] memory,uint256[] memory)"}},"id":4668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9135:33:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256[] memory)"}},"nodeType":"VariableDeclarationStatement","src":"9067:101:18"},{"expression":{"arguments":[{"id":4671,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4652,"src":"9200:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4672,"name":"totalSwapFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4661,"src":"9206:13:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":4673,"name":"totalYieldFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4664,"src":"9221:14:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":4670,"name":"_receiveAggregateFees","nodeType":"Identifier","overloadedDeclarations":[4704,4908],"referencedDeclaration":4704,"src":"9178:21:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,uint256[] memory,uint256[] memory)"}},"id":4674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9178:58:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4675,"nodeType":"ExpressionStatement","src":"9178:58:18"}]},"documentation":{"id":4650,"nodeType":"StructuredDocumentation","src":"8680:305:18","text":" @dev Copy and zero out the `aggregateFeeAmounts` collected in the Vault accounting, supplying credit\n for each token. Then have the Vault transfer tokens to this contract, debiting each token for the amount\n transferred so that the transaction settles when the hook returns."},"functionSelector":"fa399f2a","id":4677,"implemented":true,"kind":"function","modifiers":[{"id":4655,"kind":"modifierInvocation","modifierName":{"id":4654,"name":"onlyVault","nameLocations":["9047:9:18"],"nodeType":"IdentifierPath","referencedDeclaration":6217,"src":"9047:9:18"},"nodeType":"ModifierInvocation","src":"9047:9:18"}],"name":"collectAggregateFeesHook","nameLocation":"8999:24:18","nodeType":"FunctionDefinition","parameters":{"id":4653,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4652,"mutability":"mutable","name":"pool","nameLocation":"9032:4:18","nodeType":"VariableDeclaration","scope":4677,"src":"9024:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4651,"name":"address","nodeType":"ElementaryTypeName","src":"9024:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9023:14:18"},"returnParameters":{"id":4656,"nodeType":"ParameterList","parameters":[],"src":"9057:0:18"},"scope":6083,"src":"8990:253:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":4703,"nodeType":"Block","src":"10334:159:18","statements":[{"expression":{"arguments":[{"id":4690,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4680,"src":"10366:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":4691,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4475,"src":"10372:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4475_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":4692,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10388:4:18","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":4473,"src":"10372:20:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},{"id":4693,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4683,"src":"10394:14:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":4689,"name":"_receiveAggregateFees","nodeType":"Identifier","overloadedDeclarations":[4704,4908],"referencedDeclaration":4908,"src":"10344:21:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_enum$_ProtocolFeeType_$4475_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType,uint256[] memory)"}},"id":4694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10344:65:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4695,"nodeType":"ExpressionStatement","src":"10344:65:18"},{"expression":{"arguments":[{"id":4697,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4680,"src":"10441:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":4698,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4475,"src":"10447:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4475_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":4699,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10463:5:18","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":4474,"src":"10447:21:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},{"id":4700,"name":"yieldFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4686,"src":"10470:15:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":4696,"name":"_receiveAggregateFees","nodeType":"Identifier","overloadedDeclarations":[4704,4908],"referencedDeclaration":4908,"src":"10419:21:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_enum$_ProtocolFeeType_$4475_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType,uint256[] memory)"}},"id":4701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10419:67:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4702,"nodeType":"ExpressionStatement","src":"10419:67:18"}]},"documentation":{"id":4678,"nodeType":"StructuredDocumentation","src":"9249:929:18","text":" @notice Settle fee credits from the Vault.\n @dev This must be called after calling `collectAggregateFees` in the Vault. Note that since charging protocol\n fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection\n happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations. The Vault\n differentiates between swap and yield fees (since they can have different percentage values); the Controller\n combines swap and yield fees, then allocates the total between the protocol and pool creator.\n @param pool The address of the pool on which the swap fees were charged\n @param swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n @param yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order"},"id":4704,"implemented":true,"kind":"function","modifiers":[],"name":"_receiveAggregateFees","nameLocation":"10192:21:18","nodeType":"FunctionDefinition","parameters":{"id":4687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4680,"mutability":"mutable","name":"pool","nameLocation":"10231:4:18","nodeType":"VariableDeclaration","scope":4704,"src":"10223:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4679,"name":"address","nodeType":"ElementaryTypeName","src":"10223:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4683,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"10262:14:18","nodeType":"VariableDeclaration","scope":4704,"src":"10245:31:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4681,"name":"uint256","nodeType":"ElementaryTypeName","src":"10245:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4682,"nodeType":"ArrayTypeName","src":"10245:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4686,"mutability":"mutable","name":"yieldFeeAmounts","nameLocation":"10303:15:18","nodeType":"VariableDeclaration","scope":4704,"src":"10286:32:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4684,"name":"uint256","nodeType":"ElementaryTypeName","src":"10286:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4685,"nodeType":"ArrayTypeName","src":"10286:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10213:111:18"},"returnParameters":{"id":4688,"nodeType":"ParameterList","parameters":[],"src":"10334:0:18"},"scope":6083,"src":"10183:310:18","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4907,"nodeType":"Block","src":"10606:2992:18","statements":[{"assignments":[4716],"declarations":[{"constant":false,"id":4716,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"10846:21:18","nodeType":"VariableDeclaration","scope":4907,"src":"10838:29:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4715,"name":"uint256","nodeType":"ElementaryTypeName","src":"10838:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4730,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":4720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4717,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4709,"src":"10870:7:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":4718,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4475,"src":"10881:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4475_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":4719,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10897:4:18","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":4473,"src":"10881:20:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"10870:31:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"baseExpression":{"id":4725,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4508,"src":"10982:32:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":4727,"indexExpression":{"id":4726,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4706,"src":"11015:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10982:38:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":4728,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11021:13:18","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":4478,"src":"10982:52:18","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":4729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"10870:164:18","trueExpression":{"expression":{"baseExpression":{"id":4721,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4503,"src":"10916:31:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":4723,"indexExpression":{"id":4722,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4706,"src":"10948:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10916:37:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":4724,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10954:13:18","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":4478,"src":"10916:51:18","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"VariableDeclarationStatement","src":"10838:196:18"},{"assignments":[4732],"declarations":[{"constant":false,"id":4732,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"11053:24:18","nodeType":"VariableDeclaration","scope":4907,"src":"11045:32:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4731,"name":"uint256","nodeType":"ElementaryTypeName","src":"11045:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4744,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":4736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4733,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4709,"src":"11080:7:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":4734,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4475,"src":"11091:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4475_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":4735,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11107:4:18","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":4473,"src":"11091:20:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"11080:31:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"baseExpression":{"id":4740,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4516,"src":"11177:31:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":4742,"indexExpression":{"id":4741,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4706,"src":"11209:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11177:37:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"11080:134:18","trueExpression":{"baseExpression":{"id":4737,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4512,"src":"11126:30:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":4739,"indexExpression":{"id":4738,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4706,"src":"11157:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11126:36:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11045:169:18"},{"assignments":[4746],"declarations":[{"constant":false,"id":4746,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"11233:22:18","nodeType":"VariableDeclaration","scope":4907,"src":"11225:30:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4745,"name":"uint256","nodeType":"ElementaryTypeName","src":"11225:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4747,"nodeType":"VariableDeclarationStatement","src":"11225:30:18"},{"assignments":[4749],"declarations":[{"constant":false,"id":4749,"mutability":"mutable","name":"needToSplitFees","nameLocation":"11271:15:18","nodeType":"VariableDeclaration","scope":4907,"src":"11266:20:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4748,"name":"bool","nodeType":"ElementaryTypeName","src":"11266:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":4757,"initialValue":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4750,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"11289:24:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":4751,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11316:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11289:28:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4753,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4716,"src":"11321:21:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":4754,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11345:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11321:25:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11289:57:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"11266:80:18"},{"condition":{"id":4758,"name":"needToSplitFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4749,"src":"11360:15:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4767,"nodeType":"IfStatement","src":"11356:199:18","trueBody":{"id":4766,"nodeType":"Block","src":"11377:178:18","statements":[{"expression":{"id":4764,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4759,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4746,"src":"11440:22:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":4761,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4716,"src":"11496:21:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4762,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"11519:24:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4760,"name":"_computeAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5296,"src":"11465:30:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4763,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11465:79:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11440:104:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4765,"nodeType":"ExpressionStatement","src":"11440:104:18"}]}},{"assignments":[4772,4774],"declarations":[{"constant":false,"id":4772,"mutability":"mutable","name":"poolTokens","nameLocation":"11582:10:18","nodeType":"VariableDeclaration","scope":4907,"src":"11566:26:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4770,"nodeType":"UserDefinedTypeName","pathNode":{"id":4769,"name":"IERC20","nameLocations":["11566:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"11566:6:18"},"referencedDeclaration":6486,"src":"11566:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":4771,"nodeType":"ArrayTypeName","src":"11566:8:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":4774,"mutability":"mutable","name":"numTokens","nameLocation":"11602:9:18","nodeType":"VariableDeclaration","scope":4907,"src":"11594:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4773,"name":"uint256","nodeType":"ElementaryTypeName","src":"11594:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4778,"initialValue":{"arguments":[{"id":4776,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4706,"src":"11638:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4775,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5356,"src":"11615:22:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":4777,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11615:28:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"11565:78:18"},{"body":{"id":4905,"nodeType":"Block","src":"11693:1899:18","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":4789,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4712,"src":"11711:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4791,"indexExpression":{"id":4790,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4780,"src":"11722:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11711:13:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":4792,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11727:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11711:17:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4904,"nodeType":"IfStatement","src":"11707:1875:18","trueBody":{"id":4903,"nodeType":"Block","src":"11730:1852:18","statements":[{"assignments":[4796],"declarations":[{"constant":false,"id":4796,"mutability":"mutable","name":"token","nameLocation":"11755:5:18","nodeType":"VariableDeclaration","scope":4903,"src":"11748:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":4795,"nodeType":"UserDefinedTypeName","pathNode":{"id":4794,"name":"IERC20","nameLocations":["11748:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"11748:6:18"},"referencedDeclaration":6486,"src":"11748:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"}],"id":4800,"initialValue":{"baseExpression":{"id":4797,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4772,"src":"11763:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4799,"indexExpression":{"id":4798,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4780,"src":"11774:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11763:13:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"11748:28:18"},{"expression":{"arguments":[{"id":4804,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4796,"src":"11809:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},{"arguments":[{"id":4807,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"11824:4:18","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$6083","typeString":"contract ProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeController_$6083","typeString":"contract ProtocolFeeController"}],"id":4806,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11816:7:18","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4805,"name":"address","nodeType":"ElementaryTypeName","src":"11816:7:18","typeDescriptions":{}}},"id":4808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11816:13:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":4809,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4712,"src":"11831:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4811,"indexExpression":{"id":4810,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4780,"src":"11842:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11831:13:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4801,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"11795:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":4803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11802:6:18","memberName":"sendTo","nodeType":"MemberAccess","referencedDeclaration":2002,"src":"11795:13:18","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$6486_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":4812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11795:50:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4813,"nodeType":"ExpressionStatement","src":"11795:50:18"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":4817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4814,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4709,"src":"12024:7:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":4815,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4475,"src":"12035:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4475_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":4816,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12051:4:18","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":4473,"src":"12035:20:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"12024:31:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4835,"nodeType":"Block","src":"12161:99:18","statements":[{"eventCall":{"arguments":[{"id":4828,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4706,"src":"12214:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4829,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4796,"src":"12220:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},{"baseExpression":{"id":4830,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4712,"src":"12227:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4832,"indexExpression":{"id":4831,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4780,"src":"12238:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12227:13:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4827,"name":"ProtocolYieldFeeCollected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":340,"src":"12188:25:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$6486_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256)"}},"id":4833,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12188:53:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4834,"nodeType":"EmitStatement","src":"12183:58:18"}]},"id":4836,"nodeType":"IfStatement","src":"12020:240:18","trueBody":{"id":4826,"nodeType":"Block","src":"12057:98:18","statements":[{"eventCall":{"arguments":[{"id":4819,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4706,"src":"12109:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4820,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4796,"src":"12115:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},{"baseExpression":{"id":4821,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4712,"src":"12122:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4823,"indexExpression":{"id":4822,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4780,"src":"12133:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12122:13:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4818,"name":"ProtocolSwapFeeCollected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":330,"src":"12084:24:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$6486_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256)"}},"id":4824,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12084:52:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4825,"nodeType":"EmitStatement","src":"12079:57:18"}]}},{"condition":{"id":4837,"name":"needToSplitFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4749,"src":"12282:15:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4901,"nodeType":"Block","src":"13212:356:18","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4875,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"13314:24:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":4876,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13342:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13314:29:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4899,"nodeType":"Block","src":"13449:101:18","statements":[{"expression":{"id":4897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":4889,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4530,"src":"13475:22:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":4892,"indexExpression":{"id":4890,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4706,"src":"13498:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13475:28:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":4893,"indexExpression":{"id":4891,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4796,"src":"13504:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13475:35:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"baseExpression":{"id":4894,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4712,"src":"13514:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4896,"indexExpression":{"id":4895,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4780,"src":"13525:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13514:13:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13475:52:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4898,"nodeType":"ExpressionStatement","src":"13475:52:18"}]},"id":4900,"nodeType":"IfStatement","src":"13310:240:18","trueBody":{"id":4888,"nodeType":"Block","src":"13345:98:18","statements":[{"expression":{"id":4886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":4878,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4523,"src":"13371:19:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":4881,"indexExpression":{"id":4879,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4706,"src":"13391:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13371:25:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":4882,"indexExpression":{"id":4880,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4796,"src":"13397:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13371:32:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"baseExpression":{"id":4883,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4712,"src":"13407:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4885,"indexExpression":{"id":4884,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4780,"src":"13418:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13407:13:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13371:49:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4887,"nodeType":"ExpressionStatement","src":"13371:49:18"}]}}]},"id":4902,"nodeType":"IfStatement","src":"12278:1290:18","trueBody":{"id":4874,"nodeType":"Block","src":"12299:907:18","statements":[{"assignments":[4839],"declarations":[{"constant":false,"id":4839,"mutability":"mutable","name":"totalFeeAmountRaw","nameLocation":"12864:17:18","nodeType":"VariableDeclaration","scope":4874,"src":"12856:25:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4838,"name":"uint256","nodeType":"ElementaryTypeName","src":"12856:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4846,"initialValue":{"arguments":[{"id":4844,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4746,"src":"12904:22:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":4840,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4712,"src":"12884:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4842,"indexExpression":{"id":4841,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4780,"src":"12895:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12884:13:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12898:5:18","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":2588,"src":"12884:19:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12884:43:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12856:71:18"},{"assignments":[4848],"declarations":[{"constant":false,"id":4848,"mutability":"mutable","name":"protocolPortion","nameLocation":"12957:15:18","nodeType":"VariableDeclaration","scope":4874,"src":"12949:23:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4847,"name":"uint256","nodeType":"ElementaryTypeName","src":"12949:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4853,"initialValue":{"arguments":[{"id":4851,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4716,"src":"12999:21:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4849,"name":"totalFeeAmountRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4839,"src":"12975:17:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12993:5:18","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":2552,"src":"12975:23:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4852,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12975:46:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12949:72:18"},{"expression":{"id":4860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":4854,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4523,"src":"13044:19:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":4857,"indexExpression":{"id":4855,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4706,"src":"13064:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13044:25:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":4858,"indexExpression":{"id":4856,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4796,"src":"13070:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13044:32:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":4859,"name":"protocolPortion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4848,"src":"13080:15:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13044:51:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4861,"nodeType":"ExpressionStatement","src":"13044:51:18"},{"expression":{"id":4872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":4862,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4530,"src":"13117:22:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":4865,"indexExpression":{"id":4863,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4706,"src":"13140:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13117:28:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":4866,"indexExpression":{"id":4864,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4796,"src":"13146:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13117:35:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":4867,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4712,"src":"13156:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4869,"indexExpression":{"id":4868,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4780,"src":"13167:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13156:13:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":4870,"name":"protocolPortion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4848,"src":"13172:15:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13156:31:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13117:70:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4873,"nodeType":"ExpressionStatement","src":"13117:70:18"}]}}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4783,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4780,"src":"11673:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":4784,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4774,"src":"11677:9:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11673:13:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4906,"initializationExpression":{"assignments":[4780],"declarations":[{"constant":false,"id":4780,"mutability":"mutable","name":"i","nameLocation":"11666:1:18","nodeType":"VariableDeclaration","scope":4906,"src":"11658:9:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4779,"name":"uint256","nodeType":"ElementaryTypeName","src":"11658:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4782,"initialValue":{"hexValue":"30","id":4781,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11670:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11658:13:18"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"11688:3:18","subExpression":{"id":4786,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4780,"src":"11690:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4788,"nodeType":"ExpressionStatement","src":"11688:3:18"},"nodeType":"ForStatement","src":"11653:1939:18"}]},"id":4908,"implemented":true,"kind":"function","modifiers":[],"name":"_receiveAggregateFees","nameLocation":"10508:21:18","nodeType":"FunctionDefinition","parameters":{"id":4713,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4706,"mutability":"mutable","name":"pool","nameLocation":"10538:4:18","nodeType":"VariableDeclaration","scope":4908,"src":"10530:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4705,"name":"address","nodeType":"ElementaryTypeName","src":"10530:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4709,"mutability":"mutable","name":"feeType","nameLocation":"10560:7:18","nodeType":"VariableDeclaration","scope":4908,"src":"10544:23:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"typeName":{"id":4708,"nodeType":"UserDefinedTypeName","pathNode":{"id":4707,"name":"ProtocolFeeType","nameLocations":["10544:15:18"],"nodeType":"IdentifierPath","referencedDeclaration":4475,"src":"10544:15:18"},"referencedDeclaration":4475,"src":"10544:15:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"visibility":"internal"},{"constant":false,"id":4712,"mutability":"mutable","name":"feeAmounts","nameLocation":"10586:10:18","nodeType":"VariableDeclaration","scope":4908,"src":"10569:27:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4710,"name":"uint256","nodeType":"ElementaryTypeName","src":"10569:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4711,"nodeType":"ArrayTypeName","src":"10569:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10529:68:18"},"returnParameters":{"id":4714,"nodeType":"ParameterList","parameters":[],"src":"10606:0:18"},"scope":6083,"src":"10499:3099:18","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"baseFunctions":[431],"body":{"id":4916,"nodeType":"Block","src":"13725:56:18","statements":[{"expression":{"id":4914,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4492,"src":"13742:32:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4913,"id":4915,"nodeType":"Return","src":"13735:39:18"}]},"documentation":{"id":4909,"nodeType":"StructuredDocumentation","src":"13604:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"7869ee18","id":4917,"implemented":true,"kind":"function","modifiers":[],"name":"getGlobalProtocolSwapFeePercentage","nameLocation":"13656:34:18","nodeType":"FunctionDefinition","parameters":{"id":4910,"nodeType":"ParameterList","parameters":[],"src":"13690:2:18"},"returnParameters":{"id":4913,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4912,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4917,"src":"13716:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4911,"name":"uint256","nodeType":"ElementaryTypeName","src":"13716:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13715:9:18"},"scope":6083,"src":"13647:134:18","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[437],"body":{"id":4925,"nodeType":"Block","src":"13909:57:18","statements":[{"expression":{"id":4923,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4494,"src":"13926:33:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4922,"id":4924,"nodeType":"Return","src":"13919:40:18"}]},"documentation":{"id":4918,"nodeType":"StructuredDocumentation","src":"13787:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"55fb76af","id":4926,"implemented":true,"kind":"function","modifiers":[],"name":"getGlobalProtocolYieldFeePercentage","nameLocation":"13839:35:18","nodeType":"FunctionDefinition","parameters":{"id":4919,"nodeType":"ParameterList","parameters":[],"src":"13874:2:18"},"returnParameters":{"id":4922,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4921,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4926,"src":"13900:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4920,"name":"uint256","nodeType":"ElementaryTypeName","src":"13900:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13899:9:18"},"scope":6083,"src":"13830:136:18","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[445],"body":{"id":4938,"nodeType":"Block","src":"14084:46:18","statements":[{"expression":{"baseExpression":{"id":4934,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4498,"src":"14101:16:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":4936,"indexExpression":{"id":4935,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4929,"src":"14118:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14101:22:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":4933,"id":4937,"nodeType":"Return","src":"14094:29:18"}]},"documentation":{"id":4927,"nodeType":"StructuredDocumentation","src":"13972:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"c673bdaf","id":4939,"implemented":true,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"14024:16:18","nodeType":"FunctionDefinition","parameters":{"id":4930,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4929,"mutability":"mutable","name":"pool","nameLocation":"14049:4:18","nodeType":"VariableDeclaration","scope":4939,"src":"14041:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4928,"name":"address","nodeType":"ElementaryTypeName","src":"14041:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14040:14:18"},"returnParameters":{"id":4933,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4932,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4939,"src":"14078:4:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4931,"name":"bool","nodeType":"ElementaryTypeName","src":"14078:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14077:6:18"},"scope":6083,"src":"14015:115:18","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[455],"body":{"id":4962,"nodeType":"Block","src":"14267:143:18","statements":[{"assignments":[4951],"declarations":[{"constant":false,"id":4951,"mutability":"mutable","name":"config","nameLocation":"14298:6:18","nodeType":"VariableDeclaration","scope":4962,"src":"14277:27:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":4950,"nodeType":"UserDefinedTypeName","pathNode":{"id":4949,"name":"PoolFeeConfig","nameLocations":["14277:13:18"],"nodeType":"IdentifierPath","referencedDeclaration":4481,"src":"14277:13:18"},"referencedDeclaration":4481,"src":"14277:13:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":4955,"initialValue":{"baseExpression":{"id":4952,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4503,"src":"14307:31:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":4954,"indexExpression":{"id":4953,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4942,"src":"14339:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14307:37:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"14277:67:18"},{"expression":{"components":[{"expression":{"id":4956,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4951,"src":"14363:6:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":4957,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14370:13:18","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":4478,"src":"14363:20:18","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"expression":{"id":4958,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4951,"src":"14385:6:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":4959,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14392:10:18","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":4480,"src":"14385:17:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":4960,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14362:41:18","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint64_$_t_bool_$","typeString":"tuple(uint64,bool)"}},"functionReturnParameters":4948,"id":4961,"nodeType":"Return","src":"14355:48:18"}]},"documentation":{"id":4940,"nodeType":"StructuredDocumentation","src":"14136:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"5c15a0b4","id":4963,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolProtocolSwapFeeInfo","nameLocation":"14188:26:18","nodeType":"FunctionDefinition","parameters":{"id":4943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4942,"mutability":"mutable","name":"pool","nameLocation":"14223:4:18","nodeType":"VariableDeclaration","scope":4963,"src":"14215:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4941,"name":"address","nodeType":"ElementaryTypeName","src":"14215:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14214:14:18"},"returnParameters":{"id":4948,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4945,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4963,"src":"14252:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4944,"name":"uint256","nodeType":"ElementaryTypeName","src":"14252:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4947,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4963,"src":"14261:4:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4946,"name":"bool","nodeType":"ElementaryTypeName","src":"14261:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14251:15:18"},"scope":6083,"src":"14179:231:18","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[465],"body":{"id":4986,"nodeType":"Block","src":"14548:144:18","statements":[{"assignments":[4975],"declarations":[{"constant":false,"id":4975,"mutability":"mutable","name":"config","nameLocation":"14579:6:18","nodeType":"VariableDeclaration","scope":4986,"src":"14558:27:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":4974,"nodeType":"UserDefinedTypeName","pathNode":{"id":4973,"name":"PoolFeeConfig","nameLocations":["14558:13:18"],"nodeType":"IdentifierPath","referencedDeclaration":4481,"src":"14558:13:18"},"referencedDeclaration":4481,"src":"14558:13:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":4979,"initialValue":{"baseExpression":{"id":4976,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4508,"src":"14588:32:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":4978,"indexExpression":{"id":4977,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4966,"src":"14621:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14588:38:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"14558:68:18"},{"expression":{"components":[{"expression":{"id":4980,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4975,"src":"14645:6:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":4981,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14652:13:18","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":4478,"src":"14645:20:18","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"expression":{"id":4982,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4975,"src":"14667:6:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":4983,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14674:10:18","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":4480,"src":"14667:17:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":4984,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14644:41:18","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint64_$_t_bool_$","typeString":"tuple(uint64,bool)"}},"functionReturnParameters":4972,"id":4985,"nodeType":"Return","src":"14637:48:18"}]},"documentation":{"id":4964,"nodeType":"StructuredDocumentation","src":"14416:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"7a2b97dc","id":4987,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolProtocolYieldFeeInfo","nameLocation":"14468:27:18","nodeType":"FunctionDefinition","parameters":{"id":4967,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4966,"mutability":"mutable","name":"pool","nameLocation":"14504:4:18","nodeType":"VariableDeclaration","scope":4987,"src":"14496:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4965,"name":"address","nodeType":"ElementaryTypeName","src":"14496:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14495:14:18"},"returnParameters":{"id":4972,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4969,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4987,"src":"14533:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4968,"name":"uint256","nodeType":"ElementaryTypeName","src":"14533:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4971,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4987,"src":"14542:4:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4970,"name":"bool","nodeType":"ElementaryTypeName","src":"14542:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14532:15:18"},"scope":6083,"src":"14459:233:18","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[473],"body":{"id":4999,"nodeType":"Block","src":"14828:60:18","statements":[{"expression":{"baseExpression":{"id":4995,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4512,"src":"14845:30:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":4997,"indexExpression":{"id":4996,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4990,"src":"14876:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14845:36:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4994,"id":4998,"nodeType":"Return","src":"14838:43:18"}]},"documentation":{"id":4988,"nodeType":"StructuredDocumentation","src":"14698:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"0b8e059b","id":5000,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCreatorSwapFeePercentage","nameLocation":"14750:31:18","nodeType":"FunctionDefinition","parameters":{"id":4991,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4990,"mutability":"mutable","name":"pool","nameLocation":"14790:4:18","nodeType":"VariableDeclaration","scope":5000,"src":"14782:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4989,"name":"address","nodeType":"ElementaryTypeName","src":"14782:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14781:14:18"},"returnParameters":{"id":4994,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4993,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5000,"src":"14819:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4992,"name":"uint256","nodeType":"ElementaryTypeName","src":"14819:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14818:9:18"},"scope":6083,"src":"14741:147:18","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[481],"body":{"id":5012,"nodeType":"Block","src":"15025:61:18","statements":[{"expression":{"baseExpression":{"id":5008,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4516,"src":"15042:31:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5010,"indexExpression":{"id":5009,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5003,"src":"15074:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15042:37:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5007,"id":5011,"nodeType":"Return","src":"15035:44:18"}]},"documentation":{"id":5001,"nodeType":"StructuredDocumentation","src":"14894:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"0252aab5","id":5013,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCreatorYieldFeePercentage","nameLocation":"14946:32:18","nodeType":"FunctionDefinition","parameters":{"id":5004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5003,"mutability":"mutable","name":"pool","nameLocation":"14987:4:18","nodeType":"VariableDeclaration","scope":5013,"src":"14979:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5002,"name":"address","nodeType":"ElementaryTypeName","src":"14979:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14978:14:18"},"returnParameters":{"id":5007,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5006,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5013,"src":"15016:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5005,"name":"uint256","nodeType":"ElementaryTypeName","src":"15016:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15015:9:18"},"scope":6083,"src":"14937:149:18","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[490],"body":{"id":5065,"nodeType":"Block","src":"15232:273:18","statements":[{"assignments":[5026,5028],"declarations":[{"constant":false,"id":5026,"mutability":"mutable","name":"poolTokens","nameLocation":"15259:10:18","nodeType":"VariableDeclaration","scope":5065,"src":"15243:26:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":5024,"nodeType":"UserDefinedTypeName","pathNode":{"id":5023,"name":"IERC20","nameLocations":["15243:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"15243:6:18"},"referencedDeclaration":6486,"src":"15243:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":5025,"nodeType":"ArrayTypeName","src":"15243:8:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":5028,"mutability":"mutable","name":"numTokens","nameLocation":"15279:9:18","nodeType":"VariableDeclaration","scope":5065,"src":"15271:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5027,"name":"uint256","nodeType":"ElementaryTypeName","src":"15271:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5032,"initialValue":{"arguments":[{"id":5030,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5016,"src":"15315:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5029,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5356,"src":"15292:22:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":5031,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15292:28:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"15242:78:18"},{"expression":{"id":5039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5033,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5020,"src":"15331:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5037,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"15358:9:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5036,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"15344:13:18","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":5034,"name":"uint256","nodeType":"ElementaryTypeName","src":"15348:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5035,"nodeType":"ArrayTypeName","src":"15348:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":5038,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15344:24:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"15331:37:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5040,"nodeType":"ExpressionStatement","src":"15331:37:18"},{"body":{"id":5063,"nodeType":"Block","src":"15418:81:18","statements":[{"expression":{"id":5061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5051,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5020,"src":"15432:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5053,"indexExpression":{"id":5052,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5042,"src":"15443:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15432:13:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"baseExpression":{"id":5054,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4523,"src":"15448:19:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":5056,"indexExpression":{"id":5055,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5016,"src":"15468:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15448:25:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":5060,"indexExpression":{"baseExpression":{"id":5057,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5026,"src":"15474:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":5059,"indexExpression":{"id":5058,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5042,"src":"15485:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15474:13:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15448:40:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15432:56:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5062,"nodeType":"ExpressionStatement","src":"15432:56:18"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5045,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5042,"src":"15398:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5046,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"15402:9:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15398:13:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5064,"initializationExpression":{"assignments":[5042],"declarations":[{"constant":false,"id":5042,"mutability":"mutable","name":"i","nameLocation":"15391:1:18","nodeType":"VariableDeclaration","scope":5064,"src":"15383:9:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5041,"name":"uint256","nodeType":"ElementaryTypeName","src":"15383:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5044,"initialValue":{"hexValue":"30","id":5043,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15395:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"15383:13:18"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":5049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"15413:3:18","subExpression":{"id":5048,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5042,"src":"15415:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5050,"nodeType":"ExpressionStatement","src":"15413:3:18"},"nodeType":"ForStatement","src":"15378:121:18"}]},"documentation":{"id":5014,"nodeType":"StructuredDocumentation","src":"15092:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"8df44c54","id":5066,"implemented":true,"kind":"function","modifiers":[],"name":"getProtocolFeeAmounts","nameLocation":"15144:21:18","nodeType":"FunctionDefinition","parameters":{"id":5017,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5016,"mutability":"mutable","name":"pool","nameLocation":"15174:4:18","nodeType":"VariableDeclaration","scope":5066,"src":"15166:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5015,"name":"address","nodeType":"ElementaryTypeName","src":"15166:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15165:14:18"},"returnParameters":{"id":5021,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5020,"mutability":"mutable","name":"feeAmounts","nameLocation":"15220:10:18","nodeType":"VariableDeclaration","scope":5066,"src":"15203:27:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":5018,"name":"uint256","nodeType":"ElementaryTypeName","src":"15203:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5019,"nodeType":"ArrayTypeName","src":"15203:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"15202:29:18"},"scope":6083,"src":"15135:370:18","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[499],"body":{"id":5118,"nodeType":"Block","src":"15654:276:18","statements":[{"assignments":[5079,5081],"declarations":[{"constant":false,"id":5079,"mutability":"mutable","name":"poolTokens","nameLocation":"15681:10:18","nodeType":"VariableDeclaration","scope":5118,"src":"15665:26:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":5077,"nodeType":"UserDefinedTypeName","pathNode":{"id":5076,"name":"IERC20","nameLocations":["15665:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"15665:6:18"},"referencedDeclaration":6486,"src":"15665:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":5078,"nodeType":"ArrayTypeName","src":"15665:8:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":5081,"mutability":"mutable","name":"numTokens","nameLocation":"15701:9:18","nodeType":"VariableDeclaration","scope":5118,"src":"15693:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5080,"name":"uint256","nodeType":"ElementaryTypeName","src":"15693:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5085,"initialValue":{"arguments":[{"id":5083,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5069,"src":"15737:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5082,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5356,"src":"15714:22:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":5084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15714:28:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"15664:78:18"},{"expression":{"id":5092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5086,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5073,"src":"15753:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5090,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5081,"src":"15780:9:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5089,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"15766:13:18","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":5087,"name":"uint256","nodeType":"ElementaryTypeName","src":"15770:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5088,"nodeType":"ArrayTypeName","src":"15770:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":5091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15766:24:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"15753:37:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5093,"nodeType":"ExpressionStatement","src":"15753:37:18"},{"body":{"id":5116,"nodeType":"Block","src":"15840:84:18","statements":[{"expression":{"id":5114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5104,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5073,"src":"15854:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5106,"indexExpression":{"id":5105,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5095,"src":"15865:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15854:13:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"baseExpression":{"id":5107,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4530,"src":"15870:22:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":5109,"indexExpression":{"id":5108,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5069,"src":"15893:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15870:28:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":5113,"indexExpression":{"baseExpression":{"id":5110,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5079,"src":"15899:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":5112,"indexExpression":{"id":5111,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5095,"src":"15910:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15899:13:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15870:43:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15854:59:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5115,"nodeType":"ExpressionStatement","src":"15854:59:18"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5098,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5095,"src":"15820:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5099,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5081,"src":"15824:9:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15820:13:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5117,"initializationExpression":{"assignments":[5095],"declarations":[{"constant":false,"id":5095,"mutability":"mutable","name":"i","nameLocation":"15813:1:18","nodeType":"VariableDeclaration","scope":5117,"src":"15805:9:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5094,"name":"uint256","nodeType":"ElementaryTypeName","src":"15805:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5097,"initialValue":{"hexValue":"30","id":5096,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15817:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"15805:13:18"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":5102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"15835:3:18","subExpression":{"id":5101,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5095,"src":"15837:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5103,"nodeType":"ExpressionStatement","src":"15835:3:18"},"nodeType":"ForStatement","src":"15800:124:18"}]},"documentation":{"id":5067,"nodeType":"StructuredDocumentation","src":"15511:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"9e95f3fd","id":5119,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCreatorFeeAmounts","nameLocation":"15563:24:18","nodeType":"FunctionDefinition","parameters":{"id":5070,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5069,"mutability":"mutable","name":"pool","nameLocation":"15596:4:18","nodeType":"VariableDeclaration","scope":5119,"src":"15588:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5068,"name":"address","nodeType":"ElementaryTypeName","src":"15588:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15587:14:18"},"returnParameters":{"id":5074,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5073,"mutability":"mutable","name":"feeAmounts","nameLocation":"15642:10:18","nodeType":"VariableDeclaration","scope":5119,"src":"15625:27:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":5071,"name":"uint256","nodeType":"ElementaryTypeName","src":"15625:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5072,"nodeType":"ArrayTypeName","src":"15625:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"15624:29:18"},"scope":6083,"src":"15554:376:18","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[509],"body":{"id":5134,"nodeType":"Block","src":"16137:103:18","statements":[{"expression":{"arguments":[{"id":5130,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5122,"src":"16185:21:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5131,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5124,"src":"16208:24:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5129,"name":"_computeAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5296,"src":"16154:30:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5132,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16154:79:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5128,"id":5133,"nodeType":"Return","src":"16147:86:18"}]},"documentation":{"id":5120,"nodeType":"StructuredDocumentation","src":"15936:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"0ddd60c6","id":5135,"implemented":true,"kind":"function","modifiers":[],"name":"computeAggregateFeePercentage","nameLocation":"15988:29:18","nodeType":"FunctionDefinition","parameters":{"id":5125,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5122,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"16035:21:18","nodeType":"VariableDeclaration","scope":5135,"src":"16027:29:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5121,"name":"uint256","nodeType":"ElementaryTypeName","src":"16027:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5124,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"16074:24:18","nodeType":"VariableDeclaration","scope":5135,"src":"16066:32:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5123,"name":"uint256","nodeType":"ElementaryTypeName","src":"16066:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16017:87:18"},"returnParameters":{"id":5128,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5127,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5135,"src":"16128:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5126,"name":"uint256","nodeType":"ElementaryTypeName","src":"16128:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16127:9:18"},"scope":6083,"src":"15979:261:18","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[515],"body":{"id":5172,"nodeType":"Block","src":"16374:347:18","statements":[{"assignments":[5146],"declarations":[{"constant":false,"id":5146,"mutability":"mutable","name":"feeConfig","nameLocation":"16405:9:18","nodeType":"VariableDeclaration","scope":5172,"src":"16384:30:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":5145,"nodeType":"UserDefinedTypeName","pathNode":{"id":5144,"name":"PoolFeeConfig","nameLocations":["16384:13:18"],"nodeType":"IdentifierPath","referencedDeclaration":4481,"src":"16384:13:18"},"referencedDeclaration":4481,"src":"16384:13:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":5150,"initialValue":{"baseExpression":{"id":5147,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4503,"src":"16417:31:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5149,"indexExpression":{"id":5148,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5138,"src":"16449:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16417:37:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"16384:70:18"},{"assignments":[5152],"declarations":[{"constant":false,"id":5152,"mutability":"mutable","name":"globalProtocolSwapFee","nameLocation":"16472:21:18","nodeType":"VariableDeclaration","scope":5172,"src":"16464:29:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5151,"name":"uint256","nodeType":"ElementaryTypeName","src":"16464:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5154,"initialValue":{"id":5153,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4492,"src":"16496:32:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16464:64:18"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":5155,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5146,"src":"16543:9:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":5156,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16553:10:18","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":4480,"src":"16543:20:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":5157,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16567:5:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"16543:29:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5159,"name":"globalProtocolSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5152,"src":"16576:21:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":5160,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5146,"src":"16601:9:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":5161,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16611:13:18","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":4478,"src":"16601:23:18","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"16576:48:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16543:81:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5171,"nodeType":"IfStatement","src":"16539:176:18","trueBody":{"id":5170,"nodeType":"Block","src":"16626:89:18","statements":[{"expression":{"arguments":[{"id":5165,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5138,"src":"16669:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5166,"name":"globalProtocolSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5152,"src":"16675:21:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":5167,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16698:5:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5164,"name":"_updatePoolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6023,"src":"16640:28:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":5168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16640:64:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5169,"nodeType":"ExpressionStatement","src":"16640:64:18"}]}}]},"documentation":{"id":5136,"nodeType":"StructuredDocumentation","src":"16246:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"71ecc8fb","id":5173,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":5141,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5138,"src":"16368:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5142,"kind":"modifierInvocation","modifierName":{"id":5140,"name":"withLatestFees","nameLocations":["16353:14:18"],"nodeType":"IdentifierPath","referencedDeclaration":4608,"src":"16353:14:18"},"nodeType":"ModifierInvocation","src":"16353:20:18"}],"name":"updateProtocolSwapFeePercentage","nameLocation":"16298:31:18","nodeType":"FunctionDefinition","parameters":{"id":5139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5138,"mutability":"mutable","name":"pool","nameLocation":"16338:4:18","nodeType":"VariableDeclaration","scope":5173,"src":"16330:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5137,"name":"address","nodeType":"ElementaryTypeName","src":"16330:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16329:14:18"},"returnParameters":{"id":5143,"nodeType":"ParameterList","parameters":[],"src":"16374:0:18"},"scope":6083,"src":"16289:432:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[521],"body":{"id":5210,"nodeType":"Block","src":"16856:353:18","statements":[{"assignments":[5184],"declarations":[{"constant":false,"id":5184,"mutability":"mutable","name":"feeConfig","nameLocation":"16887:9:18","nodeType":"VariableDeclaration","scope":5210,"src":"16866:30:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":5183,"nodeType":"UserDefinedTypeName","pathNode":{"id":5182,"name":"PoolFeeConfig","nameLocations":["16866:13:18"],"nodeType":"IdentifierPath","referencedDeclaration":4481,"src":"16866:13:18"},"referencedDeclaration":4481,"src":"16866:13:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":5188,"initialValue":{"baseExpression":{"id":5185,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4508,"src":"16899:32:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5187,"indexExpression":{"id":5186,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5176,"src":"16932:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16899:38:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"16866:71:18"},{"assignments":[5190],"declarations":[{"constant":false,"id":5190,"mutability":"mutable","name":"globalProtocolYieldFee","nameLocation":"16955:22:18","nodeType":"VariableDeclaration","scope":5210,"src":"16947:30:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5189,"name":"uint256","nodeType":"ElementaryTypeName","src":"16947:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5192,"initialValue":{"id":5191,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4494,"src":"16980:33:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16947:66:18"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":5193,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5184,"src":"17028:9:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":5194,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17038:10:18","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":4480,"src":"17028:20:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":5195,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17052:5:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"17028:29:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5197,"name":"globalProtocolYieldFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5190,"src":"17061:22:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":5198,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5184,"src":"17087:9:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":5199,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17097:13:18","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":4478,"src":"17087:23:18","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17061:49:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"17028:82:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5209,"nodeType":"IfStatement","src":"17024:179:18","trueBody":{"id":5208,"nodeType":"Block","src":"17112:91:18","statements":[{"expression":{"arguments":[{"id":5203,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5176,"src":"17156:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5204,"name":"globalProtocolYieldFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5190,"src":"17162:22:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":5205,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17186:5:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5202,"name":"_updatePoolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6061,"src":"17126:29:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":5206,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17126:66:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5207,"nodeType":"ExpressionStatement","src":"17126:66:18"}]}}]},"documentation":{"id":5174,"nodeType":"StructuredDocumentation","src":"16727:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"71447ea8","id":5211,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":5179,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5176,"src":"16850:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5180,"kind":"modifierInvocation","modifierName":{"id":5178,"name":"withLatestFees","nameLocations":["16835:14:18"],"nodeType":"IdentifierPath","referencedDeclaration":4608,"src":"16835:14:18"},"nodeType":"ModifierInvocation","src":"16835:20:18"}],"name":"updateProtocolYieldFeePercentage","nameLocation":"16779:32:18","nodeType":"FunctionDefinition","parameters":{"id":5177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5176,"mutability":"mutable","name":"pool","nameLocation":"16820:4:18","nodeType":"VariableDeclaration","scope":5211,"src":"16812:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5175,"name":"address","nodeType":"ElementaryTypeName","src":"16812:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16811:14:18"},"returnParameters":{"id":5181,"nodeType":"ParameterList","parameters":[],"src":"16856:0:18"},"scope":6083,"src":"16770:439:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":5265,"nodeType":"Block","src":"17322:594:18","statements":[{"assignments":[5222],"declarations":[{"constant":false,"id":5222,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"17340:21:18","nodeType":"VariableDeclaration","scope":5265,"src":"17332:29:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5221,"name":"uint256","nodeType":"ElementaryTypeName","src":"17332:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5223,"nodeType":"VariableDeclarationStatement","src":"17332:29:18"},{"assignments":[5225],"declarations":[{"constant":false,"id":5225,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"17379:24:18","nodeType":"VariableDeclaration","scope":5265,"src":"17371:32:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5224,"name":"uint256","nodeType":"ElementaryTypeName","src":"17371:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5226,"nodeType":"VariableDeclarationStatement","src":"17371:32:18"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":5230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5227,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5216,"src":"17418:7:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":5228,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4475,"src":"17429:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4475_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":5229,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"17445:4:18","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":4473,"src":"17429:20:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"17418:31:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5258,"nodeType":"Block","src":"17634:179:18","statements":[{"expression":{"id":5250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5245,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5222,"src":"17648:21:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":5246,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4508,"src":"17672:32:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5248,"indexExpression":{"id":5247,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5213,"src":"17705:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17672:38:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":5249,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17711:13:18","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":4478,"src":"17672:52:18","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17648:76:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5251,"nodeType":"ExpressionStatement","src":"17648:76:18"},{"expression":{"id":5256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5252,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5225,"src":"17738:24:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":5253,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4516,"src":"17765:31:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5255,"indexExpression":{"id":5254,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5213,"src":"17797:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17765:37:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17738:64:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5257,"nodeType":"ExpressionStatement","src":"17738:64:18"}]},"id":5259,"nodeType":"IfStatement","src":"17414:399:18","trueBody":{"id":5244,"nodeType":"Block","src":"17451:177:18","statements":[{"expression":{"id":5236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5231,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5222,"src":"17465:21:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":5232,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4503,"src":"17489:31:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5234,"indexExpression":{"id":5233,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5213,"src":"17521:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17489:37:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":5235,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17527:13:18","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":4478,"src":"17489:51:18","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17465:75:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5237,"nodeType":"ExpressionStatement","src":"17465:75:18"},{"expression":{"id":5242,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5238,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5225,"src":"17554:24:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":5239,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4512,"src":"17581:30:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5241,"indexExpression":{"id":5240,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5213,"src":"17612:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17581:36:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17554:63:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5243,"nodeType":"ExpressionStatement","src":"17554:63:18"}]}},{"expression":{"arguments":[{"id":5261,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5222,"src":"17861:21:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5262,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5225,"src":"17884:24:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5260,"name":"_computeAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5296,"src":"17830:30:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5263,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17830:79:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5220,"id":5264,"nodeType":"Return","src":"17823:86:18"}]},"id":5266,"implemented":true,"kind":"function","modifiers":[],"name":"_getAggregateFeePercentage","nameLocation":"17224:26:18","nodeType":"FunctionDefinition","parameters":{"id":5217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5213,"mutability":"mutable","name":"pool","nameLocation":"17259:4:18","nodeType":"VariableDeclaration","scope":5266,"src":"17251:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5212,"name":"address","nodeType":"ElementaryTypeName","src":"17251:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5216,"mutability":"mutable","name":"feeType","nameLocation":"17281:7:18","nodeType":"VariableDeclaration","scope":5266,"src":"17265:23:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"typeName":{"id":5215,"nodeType":"UserDefinedTypeName","pathNode":{"id":5214,"name":"ProtocolFeeType","nameLocations":["17265:15:18"],"nodeType":"IdentifierPath","referencedDeclaration":4475,"src":"17265:15:18"},"referencedDeclaration":4475,"src":"17265:15:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"visibility":"internal"}],"src":"17250:39:18"},"returnParameters":{"id":5220,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5219,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5266,"src":"17313:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5218,"name":"uint256","nodeType":"ElementaryTypeName","src":"17313:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17312:9:18"},"scope":6083,"src":"17215:701:18","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":5295,"nodeType":"Block","src":"18104:882:18","statements":[{"expression":{"id":5284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5275,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5273,"src":"18114:22:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5276,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5268,"src":"18151:21:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"id":5281,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5270,"src":"18230:24:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5277,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5268,"src":"18187:21:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18209:10:18","memberName":"complement","nodeType":"MemberAccess","referencedDeclaration":2789,"src":"18187:32:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":5279,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18187:34:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18222:7:18","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":2535,"src":"18187:42:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18187:68:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18151:104:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18114:141:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5285,"nodeType":"ExpressionStatement","src":"18114:141:18"},{"expression":{"id":5293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5286,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5273,"src":"18888:22:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5287,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5273,"src":"18914:22:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5288,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2408,"src":"18939:18:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18914:43:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":5290,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18913:45:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5291,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2408,"src":"18961:18:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18913:66:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18888:91:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5294,"nodeType":"ExpressionStatement","src":"18888:91:18"}]},"id":5296,"implemented":true,"kind":"function","modifiers":[],"name":"_computeAggregateFeePercentage","nameLocation":"17931:30:18","nodeType":"FunctionDefinition","parameters":{"id":5271,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5268,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"17979:21:18","nodeType":"VariableDeclaration","scope":5296,"src":"17971:29:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5267,"name":"uint256","nodeType":"ElementaryTypeName","src":"17971:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5270,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"18018:24:18","nodeType":"VariableDeclaration","scope":5296,"src":"18010:32:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5269,"name":"uint256","nodeType":"ElementaryTypeName","src":"18010:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17961:87:18"},"returnParameters":{"id":5274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5273,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"18080:22:18","nodeType":"VariableDeclaration","scope":5296,"src":"18072:30:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5272,"name":"uint256","nodeType":"ElementaryTypeName","src":"18072:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18071:32:18"},"scope":6083,"src":"17922:1064:18","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5331,"nodeType":"Block","src":"19056:276:18","statements":[{"assignments":[5302],"declarations":[{"constant":false,"id":5302,"mutability":"mutable","name":"poolCreator","nameLocation":"19074:11:18","nodeType":"VariableDeclaration","scope":5331,"src":"19066:19:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5301,"name":"address","nodeType":"ElementaryTypeName","src":"19066:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":5306,"initialValue":{"arguments":[{"id":5304,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5298,"src":"19104:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5303,"name":"_getPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5375,"src":"19088:15:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_address_$","typeString":"function (address) view returns (address)"}},"id":5305,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19088:21:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"19066:43:18"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5307,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5302,"src":"19124:11:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":5310,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19147:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":5309,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19139:7:18","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5308,"name":"address","nodeType":"ElementaryTypeName","src":"19139:7:18","typeDescriptions":{}}},"id":5311,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19139:10:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"19124:25:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5318,"nodeType":"IfStatement","src":"19120:93:18","trueBody":{"id":5317,"nodeType":"Block","src":"19151:62:18","statements":[{"errorCall":{"arguments":[{"id":5314,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5298,"src":"19197:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5313,"name":"PoolCreatorNotRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":402,"src":"19172:24:18","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":5315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19172:30:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5316,"nodeType":"RevertStatement","src":"19165:37:18"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5319,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5302,"src":"19227:11:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":5320,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19242:3:18","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19246:6:18","memberName":"sender","nodeType":"MemberAccess","src":"19242:10:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"19227:25:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5330,"nodeType":"IfStatement","src":"19223:103:18","trueBody":{"id":5329,"nodeType":"Block","src":"19254:72:18","statements":[{"errorCall":{"arguments":[{"expression":{"id":5324,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19298:3:18","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19302:6:18","memberName":"sender","nodeType":"MemberAccess","src":"19298:10:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5326,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5298,"src":"19310:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":5323,"name":"CallerIsNotPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":409,"src":"19275:22:18","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address) pure returns (error)"}},"id":5327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19275:40:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5328,"nodeType":"RevertStatement","src":"19268:47:18"}]}}]},"id":5332,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureCallerIsPoolCreator","nameLocation":"19001:26:18","nodeType":"FunctionDefinition","parameters":{"id":5299,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5298,"mutability":"mutable","name":"pool","nameLocation":"19036:4:18","nodeType":"VariableDeclaration","scope":5332,"src":"19028:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5297,"name":"address","nodeType":"ElementaryTypeName","src":"19028:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19027:14:18"},"returnParameters":{"id":5300,"nodeType":"ParameterList","parameters":[],"src":"19056:0:18"},"scope":6083,"src":"18992:340:18","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":5355,"nodeType":"Block","src":"19450:87:18","statements":[{"expression":{"id":5348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5343,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5339,"src":"19460:6:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5346,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5334,"src":"19490:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5344,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"19469:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":5345,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19476:13:18","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":1685,"src":"19469:20:18","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":5347,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19469:26:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"src":"19460:35:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":5349,"nodeType":"ExpressionStatement","src":"19460:35:18"},{"expression":{"id":5353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5350,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5341,"src":"19505:9:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":5351,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5339,"src":"19517:6:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":5352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19524:6:18","memberName":"length","nodeType":"MemberAccess","src":"19517:13:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19505:25:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5354,"nodeType":"ExpressionStatement","src":"19505:25:18"}]},"id":5356,"implemented":true,"kind":"function","modifiers":[],"name":"_getPoolTokensAndCount","nameLocation":"19347:22:18","nodeType":"FunctionDefinition","parameters":{"id":5335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5334,"mutability":"mutable","name":"pool","nameLocation":"19378:4:18","nodeType":"VariableDeclaration","scope":5356,"src":"19370:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5333,"name":"address","nodeType":"ElementaryTypeName","src":"19370:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19369:14:18"},"returnParameters":{"id":5342,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5339,"mutability":"mutable","name":"tokens","nameLocation":"19423:6:18","nodeType":"VariableDeclaration","scope":5356,"src":"19407:22:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":5337,"nodeType":"UserDefinedTypeName","pathNode":{"id":5336,"name":"IERC20","nameLocations":["19407:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"19407:6:18"},"referencedDeclaration":6486,"src":"19407:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":5338,"nodeType":"ArrayTypeName","src":"19407:8:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":5341,"mutability":"mutable","name":"numTokens","nameLocation":"19439:9:18","nodeType":"VariableDeclaration","scope":5356,"src":"19431:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5340,"name":"uint256","nodeType":"ElementaryTypeName","src":"19431:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19406:43:18"},"scope":6083,"src":"19338:199:18","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":5374,"nodeType":"Block","src":"19674:130:18","statements":[{"assignments":[5365],"declarations":[{"constant":false,"id":5365,"mutability":"mutable","name":"roleAccounts","nameLocation":"19708:12:18","nodeType":"VariableDeclaration","scope":5374,"src":"19684:36:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":5364,"nodeType":"UserDefinedTypeName","pathNode":{"id":5363,"name":"PoolRoleAccounts","nameLocations":["19684:16:18"],"nodeType":"IdentifierPath","referencedDeclaration":2217,"src":"19684:16:18"},"referencedDeclaration":2217,"src":"19684:16:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"id":5370,"initialValue":{"arguments":[{"id":5368,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5358,"src":"19750:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5366,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"19723:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":5367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19730:19:18","memberName":"getPoolRoleAccounts","nodeType":"MemberAccess","referencedDeclaration":1882,"src":"19723:26:18","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_PoolRoleAccounts_$2217_memory_ptr_$","typeString":"function (address) view external returns (struct PoolRoleAccounts memory)"}},"id":5369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19723:32:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"nodeType":"VariableDeclarationStatement","src":"19684:71:18"},{"expression":{"expression":{"id":5371,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5365,"src":"19773:12:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"id":5372,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19786:11:18","memberName":"poolCreator","nodeType":"MemberAccess","referencedDeclaration":2216,"src":"19773:24:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":5362,"id":5373,"nodeType":"Return","src":"19766:31:18"}]},"id":5375,"implemented":true,"kind":"function","modifiers":[],"name":"_getPoolCreator","nameLocation":"19612:15:18","nodeType":"FunctionDefinition","parameters":{"id":5359,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5358,"mutability":"mutable","name":"pool","nameLocation":"19636:4:18","nodeType":"VariableDeclaration","scope":5375,"src":"19628:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5357,"name":"address","nodeType":"ElementaryTypeName","src":"19628:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19627:14:18"},"returnParameters":{"id":5362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5361,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5375,"src":"19665:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5360,"name":"address","nodeType":"ElementaryTypeName","src":"19665:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19664:9:18"},"scope":6083,"src":"19603:201:18","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[535],"body":{"id":5459,"nodeType":"Block","src":"20283:1589:18","statements":[{"expression":{"id":5395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5391,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4498,"src":"20293:16:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":5393,"indexExpression":{"id":5392,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5378,"src":"20310:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"20293:22:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":5394,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"20318:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"20293:29:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5396,"nodeType":"ExpressionStatement","src":"20293:29:18"},{"expression":{"id":5402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5397,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5387,"src":"20422:26:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"id":5398,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5382,"src":"20451:17:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":5400,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4492,"src":"20475:32:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"20451:56:18","trueExpression":{"hexValue":"30","id":5399,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20471:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20422:85:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5403,"nodeType":"ExpressionStatement","src":"20422:85:18"},{"expression":{"id":5409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5404,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5389,"src":"20517:27:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"id":5405,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5382,"src":"20547:17:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":5407,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4494,"src":"20571:33:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"20547:57:18","trueExpression":{"hexValue":"30","id":5406,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20567:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20517:87:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5410,"nodeType":"ExpressionStatement","src":"20517:87:18"},{"expression":{"id":5420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5411,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4503,"src":"21052:31:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5413,"indexExpression":{"id":5412,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5378,"src":"21084:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21052:37:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5415,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5387,"src":"21135:26:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21162:8:18","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":7790,"src":"21135:35:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":5417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21135:37:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":5418,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5382,"src":"21198:17:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5414,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4481,"src":"21092:13:18","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$4481_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":5419,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["21120:13:18","21186:10:18"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"21092:134:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"21052:174:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":5421,"nodeType":"ExpressionStatement","src":"21052:174:18"},{"expression":{"id":5431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5422,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4508,"src":"21236:32:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5424,"indexExpression":{"id":5423,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5378,"src":"21269:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21236:38:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5426,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5389,"src":"21320:27:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21348:8:18","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":7790,"src":"21320:36:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":5428,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21320:38:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":5429,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5382,"src":"21384:17:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5425,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4481,"src":"21277:13:18","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$4481_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":5430,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["21305:13:18","21372:10:18"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"21277:135:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"21236:176:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":5432,"nodeType":"ExpressionStatement","src":"21236:176:18"},{"eventCall":{"arguments":[{"id":5434,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5378,"src":"21572:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5435,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5387,"src":"21578:26:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5436,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5382,"src":"21606:17:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5433,"name":"InitialPoolAggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":373,"src":"21534:37:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":5437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21534:90:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5438,"nodeType":"EmitStatement","src":"21529:95:18"},{"eventCall":{"arguments":[{"id":5440,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5378,"src":"21678:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5441,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5389,"src":"21684:27:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5442,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5382,"src":"21713:17:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5439,"name":"InitialPoolAggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":382,"src":"21639:38:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":5443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21639:92:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5444,"nodeType":"EmitStatement","src":"21634:97:18"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5445,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5380,"src":"21746:11:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":5448,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21769:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":5447,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21761:7:18","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5446,"name":"address","nodeType":"ElementaryTypeName","src":"21761:7:18","typeDescriptions":{}}},"id":5449,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21761:10:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21746:25:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5458,"nodeType":"IfStatement","src":"21742:124:18","trueBody":{"id":5457,"nodeType":"Block","src":"21773:93:18","statements":[{"eventCall":{"arguments":[{"id":5452,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5378,"src":"21818:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5453,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5380,"src":"21824:11:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5454,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5382,"src":"21837:17:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5451,"name":"PoolWithCreatorRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":391,"src":"21792:25:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,bool)"}},"id":5455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21792:63:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5456,"nodeType":"EmitStatement","src":"21787:68:18"}]}}]},"documentation":{"id":5376,"nodeType":"StructuredDocumentation","src":"20028:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"77ff76e7","id":5460,"implemented":true,"kind":"function","modifiers":[{"id":5385,"kind":"modifierInvocation","modifierName":{"id":5384,"name":"onlyVault","nameLocations":["20191:9:18"],"nodeType":"IdentifierPath","referencedDeclaration":6217,"src":"20191:9:18"},"nodeType":"ModifierInvocation","src":"20191:9:18"}],"name":"registerPool","nameLocation":"20080:12:18","nodeType":"FunctionDefinition","parameters":{"id":5383,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5378,"mutability":"mutable","name":"pool","nameLocation":"20110:4:18","nodeType":"VariableDeclaration","scope":5460,"src":"20102:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5377,"name":"address","nodeType":"ElementaryTypeName","src":"20102:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5380,"mutability":"mutable","name":"poolCreator","nameLocation":"20132:11:18","nodeType":"VariableDeclaration","scope":5460,"src":"20124:19:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5379,"name":"address","nodeType":"ElementaryTypeName","src":"20124:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5382,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"20158:17:18","nodeType":"VariableDeclaration","scope":5460,"src":"20153:22:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5381,"name":"bool","nodeType":"ElementaryTypeName","src":"20153:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"20092:89:18"},"returnParameters":{"id":5390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5387,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"20218:26:18","nodeType":"VariableDeclaration","scope":5460,"src":"20210:34:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5386,"name":"uint256","nodeType":"ElementaryTypeName","src":"20210:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5389,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"20254:27:18","nodeType":"VariableDeclaration","scope":5460,"src":"20246:35:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5388,"name":"uint256","nodeType":"ElementaryTypeName","src":"20246:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20209:73:18"},"scope":6083,"src":"20071:1801:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":5562,"nodeType":"Block","src":"23237:1190:18","statements":[{"assignments":[5470],"declarations":[{"constant":false,"id":5470,"mutability":"mutable","name":"oldFeeController","nameLocation":"23270:16:18","nodeType":"VariableDeclaration","scope":5562,"src":"23247:39:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"},"typeName":{"id":5469,"nodeType":"UserDefinedTypeName","pathNode":{"id":5468,"name":"IProtocolFeeController","nameLocations":["23247:22:18"],"nodeType":"IdentifierPath","referencedDeclaration":613,"src":"23247:22:18"},"referencedDeclaration":613,"src":"23247:22:18","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"id":5474,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5471,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"23289:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":5472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23296:24:18","memberName":"getProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":1900,"src":"23289:31:18","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IProtocolFeeController_$613_$","typeString":"function () view external returns (contract IProtocolFeeController)"}},"id":5473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23289:33:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"nodeType":"VariableDeclarationStatement","src":"23247:75:18"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5477,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5470,"src":"23345:16:18","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}],"id":5476,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23337:7:18","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5475,"name":"address","nodeType":"ElementaryTypeName","src":"23337:7:18","typeDescriptions":{}}},"id":5478,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23337:25:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":5481,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"23374:4:18","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$6083","typeString":"contract ProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeController_$6083","typeString":"contract ProtocolFeeController"}],"id":5480,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23366:7:18","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5479,"name":"address","nodeType":"ElementaryTypeName","src":"23366:7:18","typeDescriptions":{}}},"id":5482,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23366:13:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"23337:42:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5488,"nodeType":"IfStatement","src":"23333:104:18","trueBody":{"id":5487,"nodeType":"Block","src":"23381:56:18","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5484,"name":"InvalidMigrationSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4538,"src":"23402:22:18","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5485,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23402:24:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5486,"nodeType":"RevertStatement","src":"23395:31:18"}]}},{"condition":{"baseExpression":{"id":5489,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4498,"src":"23451:16:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":5491,"indexExpression":{"id":5490,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5463,"src":"23468:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23451:22:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5497,"nodeType":"IfStatement","src":"23447:87:18","trueBody":{"id":5496,"nodeType":"Block","src":"23475:59:18","statements":[{"errorCall":{"arguments":[{"id":5493,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5463,"src":"23518:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5492,"name":"PoolAlreadyRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4535,"src":"23496:21:18","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":5494,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23496:27:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5495,"nodeType":"RevertStatement","src":"23489:34:18"}]}},{"expression":{"id":5502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5498,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4498,"src":"23544:16:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":5500,"indexExpression":{"id":5499,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5463,"src":"23561:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23544:22:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":5501,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"23569:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"23544:29:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5503,"nodeType":"ExpressionStatement","src":"23544:29:18"},{"assignments":[5505,5507],"declarations":[{"constant":false,"id":5505,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"23593:25:18","nodeType":"VariableDeclaration","scope":5562,"src":"23585:33:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5504,"name":"uint256","nodeType":"ElementaryTypeName","src":"23585:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5507,"mutability":"mutable","name":"swapFeeIsOverride","nameLocation":"23625:17:18","nodeType":"VariableDeclaration","scope":5562,"src":"23620:22:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5506,"name":"bool","nodeType":"ElementaryTypeName","src":"23620:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":5512,"initialValue":{"arguments":[{"id":5510,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5463,"src":"23690:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5508,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5470,"src":"23646:16:18","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":5509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23663:26:18","memberName":"getPoolProtocolSwapFeeInfo","nodeType":"MemberAccess","referencedDeclaration":455,"src":"23646:43:18","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$_t_bool_$","typeString":"function (address) view external returns (uint256,bool)"}},"id":5511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23646:49:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"23584:111:18"},{"expression":{"id":5522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5513,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4503,"src":"23705:31:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5515,"indexExpression":{"id":5514,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5463,"src":"23737:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23705:37:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5517,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5505,"src":"23788:25:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23814:8:18","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":7790,"src":"23788:34:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":5519,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23788:36:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":5520,"name":"swapFeeIsOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5507,"src":"23850:17:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5516,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4481,"src":"23745:13:18","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$4481_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":5521,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["23773:13:18","23838:10:18"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"23745:133:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"23705:173:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":5523,"nodeType":"ExpressionStatement","src":"23705:173:18"},{"assignments":[5525,5527],"declarations":[{"constant":false,"id":5525,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"23898:26:18","nodeType":"VariableDeclaration","scope":5562,"src":"23890:34:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5524,"name":"uint256","nodeType":"ElementaryTypeName","src":"23890:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5527,"mutability":"mutable","name":"yieldFeeIsOverride","nameLocation":"23931:18:18","nodeType":"VariableDeclaration","scope":5562,"src":"23926:23:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5526,"name":"bool","nodeType":"ElementaryTypeName","src":"23926:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":5532,"initialValue":{"arguments":[{"id":5530,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5463,"src":"24011:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5528,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5470,"src":"23953:16:18","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":5529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23970:27:18","memberName":"getPoolProtocolYieldFeeInfo","nodeType":"MemberAccess","referencedDeclaration":465,"src":"23953:44:18","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$_t_bool_$","typeString":"function (address) view external returns (uint256,bool)"}},"id":5531,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23953:72:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"23889:136:18"},{"expression":{"id":5542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5533,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4508,"src":"24035:32:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5535,"indexExpression":{"id":5534,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5463,"src":"24068:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24035:38:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5537,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5525,"src":"24119:26:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24146:8:18","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":7790,"src":"24119:35:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":5539,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24119:37:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":5540,"name":"yieldFeeIsOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5527,"src":"24182:18:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5536,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4481,"src":"24076:13:18","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$4481_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":5541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["24104:13:18","24170:10:18"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"24076:135:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"24035:176:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":5543,"nodeType":"ExpressionStatement","src":"24035:176:18"},{"expression":{"id":5551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5544,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4512,"src":"24222:30:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5546,"indexExpression":{"id":5545,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5463,"src":"24253:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24222:36:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5549,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5463,"src":"24310:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5547,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5470,"src":"24261:16:18","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":5548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24278:31:18","memberName":"getPoolCreatorSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":473,"src":"24261:48:18","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":5550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24261:54:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24222:93:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5552,"nodeType":"ExpressionStatement","src":"24222:93:18"},{"expression":{"id":5560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5553,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4516,"src":"24325:31:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5555,"indexExpression":{"id":5554,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5463,"src":"24357:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24325:37:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5558,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5463,"src":"24415:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5556,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5470,"src":"24365:16:18","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":5557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24382:32:18","memberName":"getPoolCreatorYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":481,"src":"24365:49:18","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":5559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24365:55:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24325:95:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5561,"nodeType":"ExpressionStatement","src":"24325:95:18"}]},"documentation":{"id":5461,"nodeType":"StructuredDocumentation","src":"21878:1297:18","text":" @notice Not exposed in the interface, this enables migration of hidden pool state.\n @dev Permission should NEVER be granted to this function outside of a migration contract. It is necessary to\n permit migration of the `ProtocolFeeController` with all state (in particular, protocol fee overrides and pool\n creator fees) that cannot be written outside of the `registerPool` function called by the Vault during pool\n deployment.\n Even if governance were to grant permission to call this function, the `_registeredPools` latch keeps it safe,\n guaranteeing that it is impossible to use this function to change anything after registration. A pool can only\n be registered / configured once - either copied to a new controller in the migration context, or added normally\n through the Vault calling `registerPool`.\n Technically, since the logic prevents it from being called on the active fee controller, and on a previously\n registered or migrated pool, it could even be permissionless. But since we already have other permissioned\n functions, it doesn't really cost anything to be permissioned, and that provides another layer of security.\n @param pool The address of the pool to be migrated"},"functionSelector":"0874327f","id":5563,"implemented":true,"kind":"function","modifiers":[{"id":5466,"kind":"modifierInvocation","modifierName":{"id":5465,"name":"authenticate","nameLocations":["23224:12:18"],"nodeType":"IdentifierPath","referencedDeclaration":2439,"src":"23224:12:18"},"nodeType":"ModifierInvocation","src":"23224:12:18"}],"name":"migratePool","nameLocation":"23189:11:18","nodeType":"FunctionDefinition","parameters":{"id":5464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5463,"mutability":"mutable","name":"pool","nameLocation":"23209:4:18","nodeType":"VariableDeclaration","scope":5563,"src":"23201:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5462,"name":"address","nodeType":"ElementaryTypeName","src":"23201:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"23200:14:18"},"returnParameters":{"id":5467,"nodeType":"ParameterList","parameters":[],"src":"23237:0:18"},"scope":6083,"src":"23180:1247:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[541],"body":{"id":5582,"nodeType":"Block","src":"24641:164:18","statements":[{"expression":{"id":5576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5574,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4492,"src":"24651:32:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5575,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5566,"src":"24686:28:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24651:63:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5577,"nodeType":"ExpressionStatement","src":"24651:63:18"},{"eventCall":{"arguments":[{"id":5579,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5566,"src":"24769:28:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5578,"name":"GlobalProtocolSwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":287,"src":"24730:38:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":5580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24730:68:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5581,"nodeType":"EmitStatement","src":"24725:73:18"}]},"documentation":{"id":5564,"nodeType":"StructuredDocumentation","src":"24433:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"8a3c5c69","id":5583,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":5569,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5566,"src":"24598:28:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":5570,"kind":"modifierInvocation","modifierName":{"id":5568,"name":"withValidSwapFee","nameLocations":["24581:16:18"],"nodeType":"IdentifierPath","referencedDeclaration":4566,"src":"24581:16:18"},"nodeType":"ModifierInvocation","src":"24581:46:18"},{"id":5572,"kind":"modifierInvocation","modifierName":{"id":5571,"name":"authenticate","nameLocations":["24628:12:18"],"nodeType":"IdentifierPath","referencedDeclaration":2439,"src":"24628:12:18"},"nodeType":"ModifierInvocation","src":"24628:12:18"}],"name":"setGlobalProtocolSwapFeePercentage","nameLocation":"24485:34:18","nodeType":"FunctionDefinition","parameters":{"id":5567,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5566,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"24537:28:18","nodeType":"VariableDeclaration","scope":5583,"src":"24529:36:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5565,"name":"uint256","nodeType":"ElementaryTypeName","src":"24529:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"24519:52:18"},"returnParameters":{"id":5573,"nodeType":"ParameterList","parameters":[],"src":"24641:0:18"},"scope":6083,"src":"24476:329:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[547],"body":{"id":5602,"nodeType":"Block","src":"25023:168:18","statements":[{"expression":{"id":5596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5594,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4494,"src":"25033:33:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5595,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5586,"src":"25069:29:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25033:65:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5597,"nodeType":"ExpressionStatement","src":"25033:65:18"},{"eventCall":{"arguments":[{"id":5599,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5586,"src":"25154:29:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5598,"name":"GlobalProtocolYieldFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":292,"src":"25114:39:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":5600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25114:70:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5601,"nodeType":"EmitStatement","src":"25109:75:18"}]},"documentation":{"id":5584,"nodeType":"StructuredDocumentation","src":"24811:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"a93df2a4","id":5603,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":5589,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5586,"src":"24979:29:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":5590,"kind":"modifierInvocation","modifierName":{"id":5588,"name":"withValidYieldFee","nameLocations":["24961:17:18"],"nodeType":"IdentifierPath","referencedDeclaration":4584,"src":"24961:17:18"},"nodeType":"ModifierInvocation","src":"24961:48:18"},{"id":5592,"kind":"modifierInvocation","modifierName":{"id":5591,"name":"authenticate","nameLocations":["25010:12:18"],"nodeType":"IdentifierPath","referencedDeclaration":2439,"src":"25010:12:18"},"nodeType":"ModifierInvocation","src":"25010:12:18"}],"name":"setGlobalProtocolYieldFeePercentage","nameLocation":"24863:35:18","nodeType":"FunctionDefinition","parameters":{"id":5587,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5586,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"24916:29:18","nodeType":"VariableDeclaration","scope":5603,"src":"24908:37:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5585,"name":"uint256","nodeType":"ElementaryTypeName","src":"24908:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"24898:53:18"},"returnParameters":{"id":5593,"nodeType":"ParameterList","parameters":[],"src":"25023:0:18"},"scope":6083,"src":"24854:337:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[555],"body":{"id":5625,"nodeType":"Block","src":"25442:87:18","statements":[{"expression":{"arguments":[{"id":5620,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5606,"src":"25481:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5621,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5608,"src":"25487:28:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":5622,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"25517:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5619,"name":"_updatePoolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6023,"src":"25452:28:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":5623,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25452:70:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5624,"nodeType":"ExpressionStatement","src":"25452:70:18"}]},"documentation":{"id":5604,"nodeType":"StructuredDocumentation","src":"25197:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"fd267f39","id":5626,"implemented":true,"kind":"function","modifiers":[{"id":5611,"kind":"modifierInvocation","modifierName":{"id":5610,"name":"authenticate","nameLocations":["25361:12:18"],"nodeType":"IdentifierPath","referencedDeclaration":2439,"src":"25361:12:18"},"nodeType":"ModifierInvocation","src":"25361:12:18"},{"arguments":[{"id":5613,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5608,"src":"25391:28:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":5614,"kind":"modifierInvocation","modifierName":{"id":5612,"name":"withValidSwapFee","nameLocations":["25374:16:18"],"nodeType":"IdentifierPath","referencedDeclaration":4566,"src":"25374:16:18"},"nodeType":"ModifierInvocation","src":"25374:46:18"},{"arguments":[{"id":5616,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5606,"src":"25436:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5617,"kind":"modifierInvocation","modifierName":{"id":5615,"name":"withLatestFees","nameLocations":["25421:14:18"],"nodeType":"IdentifierPath","referencedDeclaration":4608,"src":"25421:14:18"},"nodeType":"ModifierInvocation","src":"25421:20:18"}],"name":"setProtocolSwapFeePercentage","nameLocation":"25249:28:18","nodeType":"FunctionDefinition","parameters":{"id":5609,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5606,"mutability":"mutable","name":"pool","nameLocation":"25295:4:18","nodeType":"VariableDeclaration","scope":5626,"src":"25287:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5605,"name":"address","nodeType":"ElementaryTypeName","src":"25287:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5608,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"25317:28:18","nodeType":"VariableDeclaration","scope":5626,"src":"25309:36:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5607,"name":"uint256","nodeType":"ElementaryTypeName","src":"25309:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25277:74:18"},"returnParameters":{"id":5618,"nodeType":"ParameterList","parameters":[],"src":"25442:0:18"},"scope":6083,"src":"25240:289:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[563],"body":{"id":5648,"nodeType":"Block","src":"25784:89:18","statements":[{"expression":{"arguments":[{"id":5643,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5629,"src":"25824:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5644,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5631,"src":"25830:29:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":5645,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"25861:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5642,"name":"_updatePoolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6061,"src":"25794:29:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":5646,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25794:72:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5647,"nodeType":"ExpressionStatement","src":"25794:72:18"}]},"documentation":{"id":5627,"nodeType":"StructuredDocumentation","src":"25535:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"abaa3356","id":5649,"implemented":true,"kind":"function","modifiers":[{"id":5634,"kind":"modifierInvocation","modifierName":{"id":5633,"name":"authenticate","nameLocations":["25701:12:18"],"nodeType":"IdentifierPath","referencedDeclaration":2439,"src":"25701:12:18"},"nodeType":"ModifierInvocation","src":"25701:12:18"},{"arguments":[{"id":5636,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5631,"src":"25732:29:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":5637,"kind":"modifierInvocation","modifierName":{"id":5635,"name":"withValidYieldFee","nameLocations":["25714:17:18"],"nodeType":"IdentifierPath","referencedDeclaration":4584,"src":"25714:17:18"},"nodeType":"ModifierInvocation","src":"25714:48:18"},{"arguments":[{"id":5639,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5629,"src":"25778:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5640,"kind":"modifierInvocation","modifierName":{"id":5638,"name":"withLatestFees","nameLocations":["25763:14:18"],"nodeType":"IdentifierPath","referencedDeclaration":4608,"src":"25763:14:18"},"nodeType":"ModifierInvocation","src":"25763:20:18"}],"name":"setProtocolYieldFeePercentage","nameLocation":"25587:29:18","nodeType":"FunctionDefinition","parameters":{"id":5632,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5629,"mutability":"mutable","name":"pool","nameLocation":"25634:4:18","nodeType":"VariableDeclaration","scope":5649,"src":"25626:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5628,"name":"address","nodeType":"ElementaryTypeName","src":"25626:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5631,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"25656:29:18","nodeType":"VariableDeclaration","scope":5649,"src":"25648:37:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5630,"name":"uint256","nodeType":"ElementaryTypeName","src":"25648:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25616:75:18"},"returnParameters":{"id":5641,"nodeType":"ParameterList","parameters":[],"src":"25784:0:18"},"scope":6083,"src":"25578:295:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[571],"body":{"id":5673,"nodeType":"Block","src":"26143:103:18","statements":[{"expression":{"arguments":[{"id":5667,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5652,"src":"26182:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5668,"name":"poolCreatorSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5654,"src":"26188:28:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":5669,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4475,"src":"26218:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4475_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":5670,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"26234:4:18","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":4473,"src":"26218:20:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":5666,"name":"_setPoolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5761,"src":"26153:28:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_enum$_ProtocolFeeType_$4475_$returns$__$","typeString":"function (address,uint256,enum ProtocolFeeController.ProtocolFeeType)"}},"id":5671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26153:86:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5672,"nodeType":"ExpressionStatement","src":"26153:86:18"}]},"documentation":{"id":5650,"nodeType":"StructuredDocumentation","src":"25879:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"1377c16c","id":5674,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":5657,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5652,"src":"26062:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5658,"kind":"modifierInvocation","modifierName":{"id":5656,"name":"onlyPoolCreator","nameLocations":["26046:15:18"],"nodeType":"IdentifierPath","referencedDeclaration":4548,"src":"26046:15:18"},"nodeType":"ModifierInvocation","src":"26046:21:18"},{"arguments":[{"id":5660,"name":"poolCreatorSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5654,"src":"26092:28:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":5661,"kind":"modifierInvocation","modifierName":{"id":5659,"name":"withValidPoolCreatorFee","nameLocations":["26068:23:18"],"nodeType":"IdentifierPath","referencedDeclaration":4598,"src":"26068:23:18"},"nodeType":"ModifierInvocation","src":"26068:53:18"},{"arguments":[{"id":5663,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5652,"src":"26137:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5664,"kind":"modifierInvocation","modifierName":{"id":5662,"name":"withLatestFees","nameLocations":["26122:14:18"],"nodeType":"IdentifierPath","referencedDeclaration":4608,"src":"26122:14:18"},"nodeType":"ModifierInvocation","src":"26122:20:18"}],"name":"setPoolCreatorSwapFeePercentage","nameLocation":"25931:31:18","nodeType":"FunctionDefinition","parameters":{"id":5655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5652,"mutability":"mutable","name":"pool","nameLocation":"25980:4:18","nodeType":"VariableDeclaration","scope":5674,"src":"25972:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5651,"name":"address","nodeType":"ElementaryTypeName","src":"25972:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5654,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"26002:28:18","nodeType":"VariableDeclaration","scope":5674,"src":"25994:36:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5653,"name":"uint256","nodeType":"ElementaryTypeName","src":"25994:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25962:74:18"},"returnParameters":{"id":5665,"nodeType":"ParameterList","parameters":[],"src":"26143:0:18"},"scope":6083,"src":"25922:324:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[579],"body":{"id":5698,"nodeType":"Block","src":"26519:105:18","statements":[{"expression":{"arguments":[{"id":5692,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5677,"src":"26558:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5693,"name":"poolCreatorYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5679,"src":"26564:29:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":5694,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4475,"src":"26595:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4475_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":5695,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"26611:5:18","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":4474,"src":"26595:21:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":5691,"name":"_setPoolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5761,"src":"26529:28:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_enum$_ProtocolFeeType_$4475_$returns$__$","typeString":"function (address,uint256,enum ProtocolFeeController.ProtocolFeeType)"}},"id":5696,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26529:88:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5697,"nodeType":"ExpressionStatement","src":"26529:88:18"}]},"documentation":{"id":5675,"nodeType":"StructuredDocumentation","src":"26252:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"3af52712","id":5699,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":5682,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5677,"src":"26437:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5683,"kind":"modifierInvocation","modifierName":{"id":5681,"name":"onlyPoolCreator","nameLocations":["26421:15:18"],"nodeType":"IdentifierPath","referencedDeclaration":4548,"src":"26421:15:18"},"nodeType":"ModifierInvocation","src":"26421:21:18"},{"arguments":[{"id":5685,"name":"poolCreatorYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5679,"src":"26467:29:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":5686,"kind":"modifierInvocation","modifierName":{"id":5684,"name":"withValidPoolCreatorFee","nameLocations":["26443:23:18"],"nodeType":"IdentifierPath","referencedDeclaration":4598,"src":"26443:23:18"},"nodeType":"ModifierInvocation","src":"26443:54:18"},{"arguments":[{"id":5688,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5677,"src":"26513:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5689,"kind":"modifierInvocation","modifierName":{"id":5687,"name":"withLatestFees","nameLocations":["26498:14:18"],"nodeType":"IdentifierPath","referencedDeclaration":4608,"src":"26498:14:18"},"nodeType":"ModifierInvocation","src":"26498:20:18"}],"name":"setPoolCreatorYieldFeePercentage","nameLocation":"26304:32:18","nodeType":"FunctionDefinition","parameters":{"id":5680,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5677,"mutability":"mutable","name":"pool","nameLocation":"26354:4:18","nodeType":"VariableDeclaration","scope":5699,"src":"26346:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5676,"name":"address","nodeType":"ElementaryTypeName","src":"26346:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5679,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"26376:29:18","nodeType":"VariableDeclaration","scope":5699,"src":"26368:37:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5678,"name":"uint256","nodeType":"ElementaryTypeName","src":"26368:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26336:75:18"},"returnParameters":{"id":5690,"nodeType":"ParameterList","parameters":[],"src":"26519:0:18"},"scope":6083,"src":"26295:329:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":5760,"nodeType":"Block","src":"26780:900:18","statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":5712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5709,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5706,"src":"26876:7:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":5710,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4475,"src":"26887:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4475_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":5711,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"26903:4:18","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":4473,"src":"26887:20:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"26876:31:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5758,"nodeType":"Block","src":"27292:382:18","statements":[{"expression":{"id":5740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5736,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4516,"src":"27306:31:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5738,"indexExpression":{"id":5737,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5701,"src":"27338:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"27306:37:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5739,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5703,"src":"27346:24:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27306:64:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5741,"nodeType":"ExpressionStatement","src":"27306:64:18"},{"expression":{"arguments":[{"id":5745,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5701,"src":"27513:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":5747,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5701,"src":"27546:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":5748,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4475,"src":"27552:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4475_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":5749,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"27568:5:18","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":4474,"src":"27552:21:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":5746,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5266,"src":"27519:26:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$4475_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":5750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27519:55:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":5742,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"27472:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":5744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27479:33:18","memberName":"updateAggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":795,"src":"27472:40:18","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":5751,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27472:103:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5752,"nodeType":"ExpressionStatement","src":"27472:103:18"},{"eventCall":{"arguments":[{"id":5754,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5701,"src":"27632:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5755,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5703,"src":"27638:24:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5753,"name":"PoolCreatorYieldFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":320,"src":"27595:36:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":5756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27595:68:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5757,"nodeType":"EmitStatement","src":"27590:73:18"}]},"id":5759,"nodeType":"IfStatement","src":"26872:802:18","trueBody":{"id":5735,"nodeType":"Block","src":"26909:377:18","statements":[{"expression":{"id":5717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5713,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4512,"src":"26923:30:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5715,"indexExpression":{"id":5714,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5701,"src":"26954:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26923:36:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5716,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5703,"src":"26962:24:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26923:63:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5718,"nodeType":"ExpressionStatement","src":"26923:63:18"},{"expression":{"arguments":[{"id":5722,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5701,"src":"27127:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":5724,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5701,"src":"27160:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":5725,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4475,"src":"27166:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4475_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":5726,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"27182:4:18","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":4473,"src":"27166:20:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":5723,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5266,"src":"27133:26:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$4475_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":5727,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27133:54:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":5719,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"27087:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":5721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27094:32:18","memberName":"updateAggregateSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":787,"src":"27087:39:18","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":5728,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27087:101:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5729,"nodeType":"ExpressionStatement","src":"27087:101:18"},{"eventCall":{"arguments":[{"id":5731,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5701,"src":"27244:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5732,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5703,"src":"27250:24:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5730,"name":"PoolCreatorSwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":313,"src":"27208:35:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":5733,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27208:67:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5734,"nodeType":"EmitStatement","src":"27203:72:18"}]}}]},"id":5761,"implemented":true,"kind":"function","modifiers":[],"name":"_setPoolCreatorFeePercentage","nameLocation":"26639:28:18","nodeType":"FunctionDefinition","parameters":{"id":5707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5701,"mutability":"mutable","name":"pool","nameLocation":"26685:4:18","nodeType":"VariableDeclaration","scope":5761,"src":"26677:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5700,"name":"address","nodeType":"ElementaryTypeName","src":"26677:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5703,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"26707:24:18","nodeType":"VariableDeclaration","scope":5761,"src":"26699:32:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5702,"name":"uint256","nodeType":"ElementaryTypeName","src":"26699:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5706,"mutability":"mutable","name":"feeType","nameLocation":"26757:7:18","nodeType":"VariableDeclaration","scope":5761,"src":"26741:23:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"typeName":{"id":5705,"nodeType":"UserDefinedTypeName","pathNode":{"id":5704,"name":"ProtocolFeeType","nameLocations":["26741:15:18"],"nodeType":"IdentifierPath","referencedDeclaration":4475,"src":"26741:15:18"},"referencedDeclaration":4475,"src":"26741:15:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"visibility":"internal"}],"src":"26667:103:18"},"returnParameters":{"id":5708,"nodeType":"ParameterList","parameters":[],"src":"26780:0:18"},"scope":6083,"src":"26630:1050:18","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[587],"body":{"id":5807,"nodeType":"Block","src":"27814:258:18","statements":[{"assignments":[5775,5777],"declarations":[{"constant":false,"id":5775,"mutability":"mutable","name":"poolTokens","nameLocation":"27841:10:18","nodeType":"VariableDeclaration","scope":5807,"src":"27825:26:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":5773,"nodeType":"UserDefinedTypeName","pathNode":{"id":5772,"name":"IERC20","nameLocations":["27825:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"27825:6:18"},"referencedDeclaration":6486,"src":"27825:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":5774,"nodeType":"ArrayTypeName","src":"27825:8:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":5777,"mutability":"mutable","name":"numTokens","nameLocation":"27861:9:18","nodeType":"VariableDeclaration","scope":5807,"src":"27853:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5776,"name":"uint256","nodeType":"ElementaryTypeName","src":"27853:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5781,"initialValue":{"arguments":[{"id":5779,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5764,"src":"27897:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5778,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5356,"src":"27874:22:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":5780,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27874:28:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"27824:78:18"},{"body":{"id":5805,"nodeType":"Block","src":"27953:113:18","statements":[{"assignments":[5794],"declarations":[{"constant":false,"id":5794,"mutability":"mutable","name":"token","nameLocation":"27974:5:18","nodeType":"VariableDeclaration","scope":5805,"src":"27967:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":5793,"nodeType":"UserDefinedTypeName","pathNode":{"id":5792,"name":"IERC20","nameLocations":["27967:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"27967:6:18"},"referencedDeclaration":6486,"src":"27967:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"}],"id":5798,"initialValue":{"baseExpression":{"id":5795,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5775,"src":"27982:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":5797,"indexExpression":{"id":5796,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5783,"src":"27993:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27982:13:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"27967:28:18"},{"expression":{"arguments":[{"id":5800,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5764,"src":"28032:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5801,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5766,"src":"28038:9:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5802,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5794,"src":"28049:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}],"id":5799,"name":"_withdrawProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5881,"src":"28010:21:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$6486_$returns$__$","typeString":"function (address,address,contract IERC20)"}},"id":5803,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28010:45:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5804,"nodeType":"ExpressionStatement","src":"28010:45:18"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5786,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5783,"src":"27933:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5787,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5777,"src":"27937:9:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27933:13:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5806,"initializationExpression":{"assignments":[5783],"declarations":[{"constant":false,"id":5783,"mutability":"mutable","name":"i","nameLocation":"27926:1:18","nodeType":"VariableDeclaration","scope":5806,"src":"27918:9:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5782,"name":"uint256","nodeType":"ElementaryTypeName","src":"27918:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5785,"initialValue":{"hexValue":"30","id":5784,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27930:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"27918:13:18"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":5790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"27948:3:18","subExpression":{"id":5789,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5783,"src":"27950:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5791,"nodeType":"ExpressionStatement","src":"27948:3:18"},"nodeType":"ForStatement","src":"27913:153:18"}]},"documentation":{"id":5762,"nodeType":"StructuredDocumentation","src":"27686:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"cf7b287f","id":5808,"implemented":true,"kind":"function","modifiers":[{"id":5769,"kind":"modifierInvocation","modifierName":{"id":5768,"name":"authenticate","nameLocations":["27801:12:18"],"nodeType":"IdentifierPath","referencedDeclaration":2439,"src":"27801:12:18"},"nodeType":"ModifierInvocation","src":"27801:12:18"}],"name":"withdrawProtocolFees","nameLocation":"27738:20:18","nodeType":"FunctionDefinition","parameters":{"id":5767,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5764,"mutability":"mutable","name":"pool","nameLocation":"27767:4:18","nodeType":"VariableDeclaration","scope":5808,"src":"27759:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5763,"name":"address","nodeType":"ElementaryTypeName","src":"27759:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5766,"mutability":"mutable","name":"recipient","nameLocation":"27781:9:18","nodeType":"VariableDeclaration","scope":5808,"src":"27773:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5765,"name":"address","nodeType":"ElementaryTypeName","src":"27773:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"27758:33:18"},"returnParameters":{"id":5770,"nodeType":"ParameterList","parameters":[],"src":"27814:0:18"},"scope":6083,"src":"27729:343:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[598],"body":{"id":5834,"nodeType":"Block","src":"28228:217:18","statements":[{"expression":{"arguments":[{"id":5824,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5811,"src":"28371:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5825,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5816,"src":"28377:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}],"expression":{"id":5821,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"28331:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":5823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28338:32:18","memberName":"getPoolTokenCountAndIndexOfToken","nodeType":"MemberAccess","referencedDeclaration":2056,"src":"28331:39:18","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_contract$_IERC20_$6486_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,contract IERC20) view external returns (uint256,uint256)"}},"id":5826,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28331:52:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"id":5827,"nodeType":"ExpressionStatement","src":"28331:52:18"},{"expression":{"arguments":[{"id":5829,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5811,"src":"28415:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5830,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5813,"src":"28421:9:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5831,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5816,"src":"28432:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}],"id":5828,"name":"_withdrawProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5881,"src":"28393:21:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$6486_$returns$__$","typeString":"function (address,address,contract IERC20)"}},"id":5832,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28393:45:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5833,"nodeType":"ExpressionStatement","src":"28393:45:18"}]},"documentation":{"id":5809,"nodeType":"StructuredDocumentation","src":"28078:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"b53a70b2","id":5835,"implemented":true,"kind":"function","modifiers":[{"id":5819,"kind":"modifierInvocation","modifierName":{"id":5818,"name":"authenticate","nameLocations":["28215:12:18"],"nodeType":"IdentifierPath","referencedDeclaration":2439,"src":"28215:12:18"},"nodeType":"ModifierInvocation","src":"28215:12:18"}],"name":"withdrawProtocolFeesForToken","nameLocation":"28130:28:18","nodeType":"FunctionDefinition","parameters":{"id":5817,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5811,"mutability":"mutable","name":"pool","nameLocation":"28167:4:18","nodeType":"VariableDeclaration","scope":5835,"src":"28159:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5810,"name":"address","nodeType":"ElementaryTypeName","src":"28159:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5813,"mutability":"mutable","name":"recipient","nameLocation":"28181:9:18","nodeType":"VariableDeclaration","scope":5835,"src":"28173:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5812,"name":"address","nodeType":"ElementaryTypeName","src":"28173:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5816,"mutability":"mutable","name":"token","nameLocation":"28199:5:18","nodeType":"VariableDeclaration","scope":5835,"src":"28192:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":5815,"nodeType":"UserDefinedTypeName","pathNode":{"id":5814,"name":"IERC20","nameLocations":["28192:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"28192:6:18"},"referencedDeclaration":6486,"src":"28192:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"28158:47:18"},"returnParameters":{"id":5820,"nodeType":"ParameterList","parameters":[],"src":"28228:0:18"},"scope":6083,"src":"28121:324:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":5880,"nodeType":"Block","src":"28538:316:18","statements":[{"assignments":[5846],"declarations":[{"constant":false,"id":5846,"mutability":"mutable","name":"amountToWithdraw","nameLocation":"28556:16:18","nodeType":"VariableDeclaration","scope":5880,"src":"28548:24:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5845,"name":"uint256","nodeType":"ElementaryTypeName","src":"28548:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5852,"initialValue":{"baseExpression":{"baseExpression":{"id":5847,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4523,"src":"28575:19:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":5849,"indexExpression":{"id":5848,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5837,"src":"28595:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28575:25:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":5851,"indexExpression":{"id":5850,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5842,"src":"28601:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28575:32:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"28548:59:18"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5853,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5846,"src":"28621:16:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":5854,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28640:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"28621:20:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5879,"nodeType":"IfStatement","src":"28617:231:18","trueBody":{"id":5878,"nodeType":"Block","src":"28643:205:18","statements":[{"expression":{"id":5862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":5856,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4523,"src":"28657:19:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":5859,"indexExpression":{"id":5857,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5837,"src":"28677:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28657:25:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":5860,"indexExpression":{"id":5858,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5842,"src":"28683:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"28657:32:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":5861,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28692:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"28657:36:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5863,"nodeType":"ExpressionStatement","src":"28657:36:18"},{"expression":{"arguments":[{"id":5867,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5839,"src":"28726:9:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5868,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5846,"src":"28737:16:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":5864,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5842,"src":"28707:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":5866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28713:12:18","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":6598,"src":"28707:18:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6486_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$6486_$","typeString":"function (contract IERC20,address,uint256)"}},"id":5869,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28707:47:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5870,"nodeType":"ExpressionStatement","src":"28707:47:18"},{"eventCall":{"arguments":[{"id":5872,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5837,"src":"28796:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5873,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5842,"src":"28802:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},{"id":5874,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5839,"src":"28809:9:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5875,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5846,"src":"28820:16:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5871,"name":"ProtocolFeesWithdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":352,"src":"28774:21:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$6486_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,address,uint256)"}},"id":5876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28774:63:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5877,"nodeType":"EmitStatement","src":"28769:68:18"}]}}]},"id":5881,"implemented":true,"kind":"function","modifiers":[],"name":"_withdrawProtocolFees","nameLocation":"28460:21:18","nodeType":"FunctionDefinition","parameters":{"id":5843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5837,"mutability":"mutable","name":"pool","nameLocation":"28490:4:18","nodeType":"VariableDeclaration","scope":5881,"src":"28482:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5836,"name":"address","nodeType":"ElementaryTypeName","src":"28482:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5839,"mutability":"mutable","name":"recipient","nameLocation":"28504:9:18","nodeType":"VariableDeclaration","scope":5881,"src":"28496:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5838,"name":"address","nodeType":"ElementaryTypeName","src":"28496:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5842,"mutability":"mutable","name":"token","nameLocation":"28522:5:18","nodeType":"VariableDeclaration","scope":5881,"src":"28515:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":5841,"nodeType":"UserDefinedTypeName","pathNode":{"id":5840,"name":"IERC20","nameLocations":["28515:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"28515:6:18"},"referencedDeclaration":6486,"src":"28515:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"28481:47:18"},"returnParameters":{"id":5844,"nodeType":"ParameterList","parameters":[],"src":"28538:0:18"},"scope":6083,"src":"28451:403:18","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[606],"body":{"id":5897,"nodeType":"Block","src":"29000:58:18","statements":[{"expression":{"arguments":[{"id":5893,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5884,"src":"29035:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5894,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5886,"src":"29041:9:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":5892,"name":"_withdrawPoolCreatorFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5985,"src":"29010:24:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":5895,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29010:41:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5896,"nodeType":"ExpressionStatement","src":"29010:41:18"}]},"documentation":{"id":5882,"nodeType":"StructuredDocumentation","src":"28860:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"f7061445","id":5898,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":5889,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5884,"src":"28994:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5890,"kind":"modifierInvocation","modifierName":{"id":5888,"name":"onlyPoolCreator","nameLocations":["28978:15:18"],"nodeType":"IdentifierPath","referencedDeclaration":4548,"src":"28978:15:18"},"nodeType":"ModifierInvocation","src":"28978:21:18"}],"name":"withdrawPoolCreatorFees","nameLocation":"28912:23:18","nodeType":"FunctionDefinition","parameters":{"id":5887,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5884,"mutability":"mutable","name":"pool","nameLocation":"28944:4:18","nodeType":"VariableDeclaration","scope":5898,"src":"28936:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5883,"name":"address","nodeType":"ElementaryTypeName","src":"28936:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5886,"mutability":"mutable","name":"recipient","nameLocation":"28958:9:18","nodeType":"VariableDeclaration","scope":5898,"src":"28950:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5885,"name":"address","nodeType":"ElementaryTypeName","src":"28950:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"28935:33:18"},"returnParameters":{"id":5891,"nodeType":"ParameterList","parameters":[],"src":"29000:0:18"},"scope":6083,"src":"28903:155:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[612],"body":{"id":5911,"nodeType":"Block","src":"29163:70:18","statements":[{"expression":{"arguments":[{"id":5905,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5901,"src":"29198:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":5907,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5901,"src":"29220:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5906,"name":"_getPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5375,"src":"29204:15:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_address_$","typeString":"function (address) view returns (address)"}},"id":5908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29204:21:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":5904,"name":"_withdrawPoolCreatorFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5985,"src":"29173:24:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":5909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29173:53:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5910,"nodeType":"ExpressionStatement","src":"29173:53:18"}]},"documentation":{"id":5899,"nodeType":"StructuredDocumentation","src":"29064:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"52f125f0","id":5912,"implemented":true,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"29116:23:18","nodeType":"FunctionDefinition","parameters":{"id":5902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5901,"mutability":"mutable","name":"pool","nameLocation":"29148:4:18","nodeType":"VariableDeclaration","scope":5912,"src":"29140:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5900,"name":"address","nodeType":"ElementaryTypeName","src":"29140:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"29139:14:18"},"returnParameters":{"id":5903,"nodeType":"ParameterList","parameters":[],"src":"29163:0:18"},"scope":6083,"src":"29107:126:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":5984,"nodeType":"Block","src":"29314:541:18","statements":[{"assignments":[5923,5925],"declarations":[{"constant":false,"id":5923,"mutability":"mutable","name":"poolTokens","nameLocation":"29341:10:18","nodeType":"VariableDeclaration","scope":5984,"src":"29325:26:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":5921,"nodeType":"UserDefinedTypeName","pathNode":{"id":5920,"name":"IERC20","nameLocations":["29325:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"29325:6:18"},"referencedDeclaration":6486,"src":"29325:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":5922,"nodeType":"ArrayTypeName","src":"29325:8:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":5925,"mutability":"mutable","name":"numTokens","nameLocation":"29361:9:18","nodeType":"VariableDeclaration","scope":5984,"src":"29353:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5924,"name":"uint256","nodeType":"ElementaryTypeName","src":"29353:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5929,"initialValue":{"arguments":[{"id":5927,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5914,"src":"29397:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5926,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5356,"src":"29374:22:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":5928,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29374:28:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"29324:78:18"},{"body":{"id":5982,"nodeType":"Block","src":"29453:396:18","statements":[{"assignments":[5942],"declarations":[{"constant":false,"id":5942,"mutability":"mutable","name":"token","nameLocation":"29474:5:18","nodeType":"VariableDeclaration","scope":5982,"src":"29467:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":5941,"nodeType":"UserDefinedTypeName","pathNode":{"id":5940,"name":"IERC20","nameLocations":["29467:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"29467:6:18"},"referencedDeclaration":6486,"src":"29467:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"}],"id":5946,"initialValue":{"baseExpression":{"id":5943,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5923,"src":"29482:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":5945,"indexExpression":{"id":5944,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5931,"src":"29493:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29482:13:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"29467:28:18"},{"assignments":[5948],"declarations":[{"constant":false,"id":5948,"mutability":"mutable","name":"amountToWithdraw","nameLocation":"29518:16:18","nodeType":"VariableDeclaration","scope":5982,"src":"29510:24:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5947,"name":"uint256","nodeType":"ElementaryTypeName","src":"29510:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5954,"initialValue":{"baseExpression":{"baseExpression":{"id":5949,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4530,"src":"29537:22:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":5951,"indexExpression":{"id":5950,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5914,"src":"29560:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29537:28:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":5953,"indexExpression":{"id":5952,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5942,"src":"29566:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29537:35:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"29510:62:18"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5955,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5948,"src":"29590:16:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":5956,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29609:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"29590:20:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5981,"nodeType":"IfStatement","src":"29586:253:18","trueBody":{"id":5980,"nodeType":"Block","src":"29612:227:18","statements":[{"expression":{"id":5964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":5958,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4530,"src":"29630:22:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":5961,"indexExpression":{"id":5959,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5914,"src":"29653:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29630:28:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":5962,"indexExpression":{"id":5960,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5942,"src":"29659:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"29630:35:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":5963,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29668:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"29630:39:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5965,"nodeType":"ExpressionStatement","src":"29630:39:18"},{"expression":{"arguments":[{"id":5969,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5916,"src":"29706:9:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5970,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5948,"src":"29717:16:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":5966,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5942,"src":"29687:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":5968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29693:12:18","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":6598,"src":"29687:18:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6486_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$6486_$","typeString":"function (contract IERC20,address,uint256)"}},"id":5971,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29687:47:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5972,"nodeType":"ExpressionStatement","src":"29687:47:18"},{"eventCall":{"arguments":[{"id":5974,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5914,"src":"29783:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5975,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5942,"src":"29789:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},{"id":5976,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5916,"src":"29796:9:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5977,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5948,"src":"29807:16:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5973,"name":"PoolCreatorFeesWithdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":364,"src":"29758:24:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$6486_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,address,uint256)"}},"id":5978,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29758:66:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5979,"nodeType":"EmitStatement","src":"29753:71:18"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5934,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5931,"src":"29433:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5935,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5925,"src":"29437:9:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29433:13:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5983,"initializationExpression":{"assignments":[5931],"declarations":[{"constant":false,"id":5931,"mutability":"mutable","name":"i","nameLocation":"29426:1:18","nodeType":"VariableDeclaration","scope":5983,"src":"29418:9:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5930,"name":"uint256","nodeType":"ElementaryTypeName","src":"29418:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5933,"initialValue":{"hexValue":"30","id":5932,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29430:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"29418:13:18"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":5938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"29448:3:18","subExpression":{"id":5937,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5931,"src":"29450:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5939,"nodeType":"ExpressionStatement","src":"29448:3:18"},"nodeType":"ForStatement","src":"29413:436:18"}]},"id":5985,"implemented":true,"kind":"function","modifiers":[],"name":"_withdrawPoolCreatorFees","nameLocation":"29248:24:18","nodeType":"FunctionDefinition","parameters":{"id":5917,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5914,"mutability":"mutable","name":"pool","nameLocation":"29281:4:18","nodeType":"VariableDeclaration","scope":5985,"src":"29273:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5913,"name":"address","nodeType":"ElementaryTypeName","src":"29273:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5916,"mutability":"mutable","name":"recipient","nameLocation":"29295:9:18","nodeType":"VariableDeclaration","scope":5985,"src":"29287:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5915,"name":"address","nodeType":"ElementaryTypeName","src":"29287:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"29272:33:18"},"returnParameters":{"id":5918,"nodeType":"ParameterList","parameters":[],"src":"29314:0:18"},"scope":6083,"src":"29239:616:18","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":6022,"nodeType":"Block","src":"30095:771:18","statements":[{"expression":{"id":6004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5995,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4503,"src":"30410:31:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5997,"indexExpression":{"id":5996,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5988,"src":"30442:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"30410:37:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5999,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5990,"src":"30493:28:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30522:8:18","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":7790,"src":"30493:37:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":6001,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30493:39:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":6002,"name":"isOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5992,"src":"30558:10:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5998,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4481,"src":"30450:13:18","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$4481_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":6003,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["30478:13:18","30546:10:18"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"30450:129:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"30410:169:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":6005,"nodeType":"ExpressionStatement","src":"30410:169:18"},{"expression":{"arguments":[{"id":6009,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5988,"src":"30714:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":6011,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5988,"src":"30747:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":6012,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4475,"src":"30753:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4475_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":6013,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"30769:4:18","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":4473,"src":"30753:20:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":6010,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5266,"src":"30720:26:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$4475_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":6014,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30720:54:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6006,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"30674:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":6008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30681:32:18","memberName":"updateAggregateSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":787,"src":"30674:39:18","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":6015,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30674:101:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6016,"nodeType":"ExpressionStatement","src":"30674:101:18"},{"eventCall":{"arguments":[{"id":6018,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5988,"src":"30824:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6019,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5990,"src":"30830:28:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6017,"name":"ProtocolSwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":299,"src":"30791:32:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":6020,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30791:68:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6021,"nodeType":"EmitStatement","src":"30786:73:18"}]},"documentation":{"id":5986,"nodeType":"StructuredDocumentation","src":"29861:114:18","text":"@dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage."},"id":6023,"implemented":true,"kind":"function","modifiers":[],"name":"_updatePoolSwapFeePercentage","nameLocation":"29989:28:18","nodeType":"FunctionDefinition","parameters":{"id":5993,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5988,"mutability":"mutable","name":"pool","nameLocation":"30026:4:18","nodeType":"VariableDeclaration","scope":6023,"src":"30018:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5987,"name":"address","nodeType":"ElementaryTypeName","src":"30018:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5990,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"30040:28:18","nodeType":"VariableDeclaration","scope":6023,"src":"30032:36:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5989,"name":"uint256","nodeType":"ElementaryTypeName","src":"30032:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5992,"mutability":"mutable","name":"isOverride","nameLocation":"30075:10:18","nodeType":"VariableDeclaration","scope":6023,"src":"30070:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5991,"name":"bool","nodeType":"ElementaryTypeName","src":"30070:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"30017:69:18"},"returnParameters":{"id":5994,"nodeType":"ParameterList","parameters":[],"src":"30095:0:18"},"scope":6083,"src":"29980:886:18","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":6060,"nodeType":"Block","src":"31138:767:18","statements":[{"expression":{"id":6042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6033,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4508,"src":"31442:32:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":6035,"indexExpression":{"id":6034,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6026,"src":"31475:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"31442:38:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6037,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6028,"src":"31526:29:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31556:8:18","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":7790,"src":"31526:38:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":6039,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31526:40:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":6040,"name":"isOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6030,"src":"31592:10:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":6036,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4481,"src":"31483:13:18","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$4481_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":6041,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["31511:13:18","31580:10:18"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"31483:130:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"31442:171:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":6043,"nodeType":"ExpressionStatement","src":"31442:171:18"},{"expression":{"arguments":[{"id":6047,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6026,"src":"31750:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":6049,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6026,"src":"31783:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":6050,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4475,"src":"31789:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4475_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":6051,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"31805:5:18","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":4474,"src":"31789:21:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":6048,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5266,"src":"31756:26:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$4475_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":6052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31756:55:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6044,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"31709:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":6046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31716:33:18","memberName":"updateAggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":795,"src":"31709:40:18","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":6053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31709:103:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6054,"nodeType":"ExpressionStatement","src":"31709:103:18"},{"eventCall":{"arguments":[{"id":6056,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6026,"src":"31862:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6057,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6028,"src":"31868:29:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6055,"name":"ProtocolYieldFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":306,"src":"31828:33:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":6058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31828:70:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6059,"nodeType":"EmitStatement","src":"31823:75:18"}]},"documentation":{"id":6024,"nodeType":"StructuredDocumentation","src":"30872:114:18","text":"@dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage."},"id":6061,"implemented":true,"kind":"function","modifiers":[],"name":"_updatePoolYieldFeePercentage","nameLocation":"31000:29:18","nodeType":"FunctionDefinition","parameters":{"id":6031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6026,"mutability":"mutable","name":"pool","nameLocation":"31047:4:18","nodeType":"VariableDeclaration","scope":6061,"src":"31039:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6025,"name":"address","nodeType":"ElementaryTypeName","src":"31039:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6028,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"31069:29:18","nodeType":"VariableDeclaration","scope":6061,"src":"31061:37:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6027,"name":"uint256","nodeType":"ElementaryTypeName","src":"31061:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6030,"mutability":"mutable","name":"isOverride","nameLocation":"31113:10:18","nodeType":"VariableDeclaration","scope":6061,"src":"31108:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6029,"name":"bool","nodeType":"ElementaryTypeName","src":"31108:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"31029:100:18"},"returnParameters":{"id":6032,"nodeType":"ParameterList","parameters":[],"src":"31138:0:18"},"scope":6083,"src":"30991:914:18","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":6081,"nodeType":"Block","src":"31978:682:18","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6066,"name":"feePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6063,"src":"32513:13:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6067,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2408,"src":"32529:18:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32513:34:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6069,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"32512:36:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6070,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2408,"src":"32551:18:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32512:57:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":6072,"name":"feePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6063,"src":"32573:13:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32512:74:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6080,"nodeType":"IfStatement","src":"32508:146:18","trueBody":{"id":6079,"nodeType":"Block","src":"32588:66:18","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6074,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1308,"src":"32609:12:18","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1308_$","typeString":"type(contract IVaultErrors)"}},"id":6076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32622:19:18","memberName":"FeePrecisionTooHigh","nodeType":"MemberAccess","referencedDeclaration":1156,"src":"32609:32:18","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32609:34:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6078,"nodeType":"RevertStatement","src":"32602:41:18"}]}}]},"id":6082,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureValidPrecision","nameLocation":"31920:21:18","nodeType":"FunctionDefinition","parameters":{"id":6064,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6063,"mutability":"mutable","name":"feePercentage","nameLocation":"31950:13:18","nodeType":"VariableDeclaration","scope":6082,"src":"31942:21:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6062,"name":"uint256","nodeType":"ElementaryTypeName","src":"31942:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31941:23:18"},"returnParameters":{"id":6065,"nodeType":"ParameterList","parameters":[],"src":"31978:0:18"},"scope":6083,"src":"31911:749:18","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":6084,"src":"3120:29542:18","usedErrors":[38,394,397,402,409,412,1156,1180,2499,4159,4535,4538,6565,6846,6851,6854,7101],"usedEvents":[287,292,299,306,313,320,330,340,352,364,373,382,391]}],"src":"46:32617:18"},"id":18},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","exportedSymbols":{"Authentication":[2491],"IAuthorizer":[73],"IVault":[651],"SingletonAuthentication":[6189]},"id":6190,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6085,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:19"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":6087,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6190,"sourceUnit":74,"src":"72:91:19","symbolAliases":[{"foreign":{"id":6086,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73,"src":"81:11:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":6089,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6190,"sourceUnit":652,"src":"164:81:19","symbolAliases":[{"foreign":{"id":6088,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":651,"src":"173:6:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","id":6091,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6190,"sourceUnit":2492,"src":"247:103:19","symbolAliases":[{"foreign":{"id":6090,"name":"Authentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2491,"src":"256:14:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":6093,"name":"Authentication","nameLocations":["772:14:19"],"nodeType":"IdentifierPath","referencedDeclaration":2491,"src":"772:14:19"},"id":6094,"nodeType":"InheritanceSpecifier","src":"772:14:19"}],"canonicalName":"SingletonAuthentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":6092,"nodeType":"StructuredDocumentation","src":"352:374:19","text":" @notice Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\n @dev The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned\n functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same\n function name."},"fullyImplemented":true,"id":6189,"linearizedBaseContracts":[6189,2491,47],"name":"SingletonAuthentication","nameLocation":"745:23:19","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":6097,"mutability":"immutable","name":"_vault","nameLocation":"818:6:19","nodeType":"VariableDeclaration","scope":6189,"src":"793:31:19","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":6096,"nodeType":"UserDefinedTypeName","pathNode":{"id":6095,"name":"IVault","nameLocations":["793:6:19"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"793:6:19"},"referencedDeclaration":651,"src":"793:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"private"},{"body":{"id":6122,"nodeType":"Block","src":"988:31:19","statements":[{"expression":{"id":6120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6118,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6097,"src":"998:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6119,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6100,"src":"1007:5:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"src":"998:14:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":6121,"nodeType":"ExpressionStatement","src":"998:14:19"}]},"id":6123,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"id":6111,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"978:4:19","typeDescriptions":{"typeIdentifier":"t_contract$_SingletonAuthentication_$6189","typeString":"contract SingletonAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SingletonAuthentication_$6189","typeString":"contract SingletonAuthentication"}],"id":6110,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"970:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6109,"name":"address","nodeType":"ElementaryTypeName","src":"970:7:19","typeDescriptions":{}}},"id":6112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"970:13:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6108,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"962:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":6107,"name":"uint160","nodeType":"ElementaryTypeName","src":"962:7:19","typeDescriptions":{}}},"id":6113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"962:22:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":6106,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"954:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":6105,"name":"uint256","nodeType":"ElementaryTypeName","src":"954:7:19","typeDescriptions":{}}},"id":6114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"954:31:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6104,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"946:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":6103,"name":"bytes32","nodeType":"ElementaryTypeName","src":"946:7:19","typeDescriptions":{}}},"id":6115,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"946:40:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":6116,"kind":"baseConstructorSpecifier","modifierName":{"id":6102,"name":"Authentication","nameLocations":["931:14:19"],"nodeType":"IdentifierPath","referencedDeclaration":2491,"src":"931:14:19"},"nodeType":"ModifierInvocation","src":"931:56:19"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":6101,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6100,"mutability":"mutable","name":"vault","nameLocation":"924:5:19","nodeType":"VariableDeclaration","scope":6123,"src":"917:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":6099,"nodeType":"UserDefinedTypeName","pathNode":{"id":6098,"name":"IVault","nameLocations":["917:6:19"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"917:6:19"},"referencedDeclaration":651,"src":"917:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"}],"src":"916:14:19"},"returnParameters":{"id":6117,"nodeType":"ParameterList","parameters":[],"src":"988:0:19"},"scope":6189,"src":"905:114:19","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6132,"nodeType":"Block","src":"1199:30:19","statements":[{"expression":{"id":6130,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6097,"src":"1216:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"functionReturnParameters":6129,"id":6131,"nodeType":"Return","src":"1209:13:19"}]},"documentation":{"id":6124,"nodeType":"StructuredDocumentation","src":"1025:120:19","text":" @notice Get the address of the Balancer Vault.\n @return vault An interface pointer to the Vault"},"functionSelector":"8d928af8","id":6133,"implemented":true,"kind":"function","modifiers":[],"name":"getVault","nameLocation":"1159:8:19","nodeType":"FunctionDefinition","parameters":{"id":6125,"nodeType":"ParameterList","parameters":[],"src":"1167:2:19"},"returnParameters":{"id":6129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6128,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6133,"src":"1191:6:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":6127,"nodeType":"UserDefinedTypeName","pathNode":{"id":6126,"name":"IVault","nameLocations":["1191:6:19"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"1191:6:19"},"referencedDeclaration":651,"src":"1191:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1190:8:19"},"scope":6189,"src":"1150:79:19","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":6145,"nodeType":"Block","src":"1425:50:19","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6140,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6133,"src":"1442:8:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$651_$","typeString":"function () view returns (contract IVault)"}},"id":6141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1442:10:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":6142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1453:13:19","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":1965,"src":"1442:24:19","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$73_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":6143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1442:26:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"}},"functionReturnParameters":6139,"id":6144,"nodeType":"Return","src":"1435:33:19"}]},"documentation":{"id":6134,"nodeType":"StructuredDocumentation","src":"1235:126:19","text":" @notice Get the address of the Authorizer.\n @return authorizer An interface pointer to the Authorizer"},"functionSelector":"aaabadc5","id":6146,"implemented":true,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"1375:13:19","nodeType":"FunctionDefinition","parameters":{"id":6135,"nodeType":"ParameterList","parameters":[],"src":"1388:2:19"},"returnParameters":{"id":6139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6138,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6146,"src":"1412:11:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"},"typeName":{"id":6137,"nodeType":"UserDefinedTypeName","pathNode":{"id":6136,"name":"IAuthorizer","nameLocations":["1412:11:19"],"nodeType":"IdentifierPath","referencedDeclaration":73,"src":"1412:11:19"},"referencedDeclaration":73,"src":"1412:11:19","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"1411:13:19"},"scope":6189,"src":"1366:109:19","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[2490],"body":{"id":6167,"nodeType":"Block","src":"1575:84:19","statements":[{"expression":{"arguments":[{"id":6159,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"1619:8:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":6160,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6150,"src":"1629:7:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":6163,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1646:4:19","typeDescriptions":{"typeIdentifier":"t_contract$_SingletonAuthentication_$6189","typeString":"contract SingletonAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SingletonAuthentication_$6189","typeString":"contract SingletonAuthentication"}],"id":6162,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1638:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6161,"name":"address","nodeType":"ElementaryTypeName","src":"1638:7:19","typeDescriptions":{}}},"id":6164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1638:13:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6156,"name":"getAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6146,"src":"1592:13:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IAuthorizer_$73_$","typeString":"function () view returns (contract IAuthorizer)"}},"id":6157,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1592:15:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"}},"id":6158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1608:10:19","memberName":"canPerform","nodeType":"MemberAccess","referencedDeclaration":72,"src":"1592:26:19","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view external returns (bool)"}},"id":6165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1592:60:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":6155,"id":6166,"nodeType":"Return","src":"1585:67:19"}]},"id":6168,"implemented":true,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"1490:11:19","nodeType":"FunctionDefinition","overrides":{"id":6152,"nodeType":"OverrideSpecifier","overrides":[],"src":"1551:8:19"},"parameters":{"id":6151,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6148,"mutability":"mutable","name":"actionId","nameLocation":"1510:8:19","nodeType":"VariableDeclaration","scope":6168,"src":"1502:16:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6147,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1502:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6150,"mutability":"mutable","name":"account","nameLocation":"1528:7:19","nodeType":"VariableDeclaration","scope":6168,"src":"1520:15:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6149,"name":"address","nodeType":"ElementaryTypeName","src":"1520:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1501:35:19"},"returnParameters":{"id":6155,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6154,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6168,"src":"1569:4:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6153,"name":"bool","nodeType":"ElementaryTypeName","src":"1569:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1568:6:19"},"scope":6189,"src":"1481:178:19","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6187,"nodeType":"Block","src":"1765:76:19","statements":[{"expression":{"arguments":[{"id":6182,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6170,"src":"1809:8:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":6183,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6172,"src":"1819:7:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6184,"name":"where","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6174,"src":"1828:5:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6179,"name":"getAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6146,"src":"1782:13:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IAuthorizer_$73_$","typeString":"function () view returns (contract IAuthorizer)"}},"id":6180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1782:15:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"}},"id":6181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1798:10:19","memberName":"canPerform","nodeType":"MemberAccess","referencedDeclaration":72,"src":"1782:26:19","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view external returns (bool)"}},"id":6185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1782:52:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":6178,"id":6186,"nodeType":"Return","src":"1775:59:19"}]},"id":6188,"implemented":true,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"1674:11:19","nodeType":"FunctionDefinition","parameters":{"id":6175,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6170,"mutability":"mutable","name":"actionId","nameLocation":"1694:8:19","nodeType":"VariableDeclaration","scope":6188,"src":"1686:16:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6169,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1686:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6172,"mutability":"mutable","name":"account","nameLocation":"1712:7:19","nodeType":"VariableDeclaration","scope":6188,"src":"1704:15:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6171,"name":"address","nodeType":"ElementaryTypeName","src":"1704:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6174,"mutability":"mutable","name":"where","nameLocation":"1729:5:19","nodeType":"VariableDeclaration","scope":6188,"src":"1721:13:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6173,"name":"address","nodeType":"ElementaryTypeName","src":"1721:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1685:50:19"},"returnParameters":{"id":6178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6177,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6188,"src":"1759:4:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6176,"name":"bool","nodeType":"ElementaryTypeName","src":"1759:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1758:6:19"},"scope":6189,"src":"1665:176:19","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":6190,"src":"727:1116:19","usedErrors":[38],"usedEvents":[]}],"src":"46:1798:19"},"id":19},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","exportedSymbols":{"IVault":[651],"IVaultErrors":[1308],"VaultGuard":[6238]},"id":6239,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6191,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:20"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":6193,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6239,"sourceUnit":1309,"src":"72:93:20","symbolAliases":[{"foreign":{"id":6192,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1308,"src":"81:12:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":6195,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6239,"sourceUnit":652,"src":"166:81:20","symbolAliases":[{"foreign":{"id":6194,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":651,"src":"175:6:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"VaultGuard","contractDependencies":[],"contractKind":"contract","documentation":{"id":6196,"nodeType":"StructuredDocumentation","src":"249:59:20","text":"@notice Contract that shares the modifier `onlyVault`."},"fullyImplemented":true,"id":6238,"linearizedBaseContracts":[6238],"name":"VaultGuard","nameLocation":"317:10:20","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":6199,"mutability":"immutable","name":"_vault","nameLocation":"360:6:20","nodeType":"VariableDeclaration","scope":6238,"src":"334:32:20","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":6198,"nodeType":"UserDefinedTypeName","pathNode":{"id":6197,"name":"IVault","nameLocations":["334:6:20"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"334:6:20"},"referencedDeclaration":651,"src":"334:6:20","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"},{"body":{"id":6209,"nodeType":"Block","src":"399:31:20","statements":[{"expression":{"id":6207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6205,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"409:6:20","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6206,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6202,"src":"418:5:20","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"src":"409:14:20","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":6208,"nodeType":"ExpressionStatement","src":"409:14:20"}]},"id":6210,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":6203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6202,"mutability":"mutable","name":"vault","nameLocation":"392:5:20","nodeType":"VariableDeclaration","scope":6210,"src":"385:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":6201,"nodeType":"UserDefinedTypeName","pathNode":{"id":6200,"name":"IVault","nameLocations":["385:6:20"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"385:6:20"},"referencedDeclaration":651,"src":"385:6:20","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"}],"src":"384:14:20"},"returnParameters":{"id":6204,"nodeType":"ParameterList","parameters":[],"src":"399:0:20"},"scope":6238,"src":"373:57:20","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":6216,"nodeType":"Block","src":"457:46:20","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6212,"name":"_ensureOnlyVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6237,"src":"467:16:20","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":6213,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"467:18:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6214,"nodeType":"ExpressionStatement","src":"467:18:20"},{"id":6215,"nodeType":"PlaceholderStatement","src":"495:1:20"}]},"id":6217,"name":"onlyVault","nameLocation":"445:9:20","nodeType":"ModifierDefinition","parameters":{"id":6211,"nodeType":"ParameterList","parameters":[],"src":"454:2:20"},"src":"436:67:20","virtual":false,"visibility":"internal"},{"body":{"id":6236,"nodeType":"Block","src":"550:124:20","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6220,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"564:3:20","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"568:6:20","memberName":"sender","nodeType":"MemberAccess","src":"564:10:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":6224,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"586:6:20","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}],"id":6223,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"578:7:20","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6222,"name":"address","nodeType":"ElementaryTypeName","src":"578:7:20","typeDescriptions":{}}},"id":6225,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"578:15:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"564:29:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6235,"nodeType":"IfStatement","src":"560:108:20","trueBody":{"id":6234,"nodeType":"Block","src":"595:73:20","statements":[{"errorCall":{"arguments":[{"expression":{"id":6230,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"646:3:20","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"650:6:20","memberName":"sender","nodeType":"MemberAccess","src":"646:10:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6227,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1308,"src":"616:12:20","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1308_$","typeString":"type(contract IVaultErrors)"}},"id":6229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"629:16:20","memberName":"SenderIsNotVault","nodeType":"MemberAccess","referencedDeclaration":1180,"src":"616:29:20","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":6232,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"616:41:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6233,"nodeType":"RevertStatement","src":"609:48:20"}]}}]},"id":6237,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureOnlyVault","nameLocation":"518:16:20","nodeType":"FunctionDefinition","parameters":{"id":6218,"nodeType":"ParameterList","parameters":[],"src":"534:2:20"},"returnParameters":{"id":6219,"nodeType":"ParameterList","parameters":[],"src":"550:0:20"},"scope":6238,"src":"509:165:20","stateMutability":"view","virtual":false,"visibility":"private"}],"scope":6239,"src":"308:368:20","usedErrors":[],"usedEvents":[]}],"src":"46:631:20"},"id":20},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","exportedSymbols":{"IERC20":[6486],"IERC20Metadata":[6512],"IERC4626":[6408]},"id":6409,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6240,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"107:24:21"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../token/ERC20/IERC20.sol","id":6242,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6409,"sourceUnit":6487,"src":"133:49:21","symbolAliases":[{"foreign":{"id":6241,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6486,"src":"141:6:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"../token/ERC20/extensions/IERC20Metadata.sol","id":6244,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6409,"sourceUnit":6513,"src":"183:76:21","symbolAliases":[{"foreign":{"id":6243,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6512,"src":"191:14:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6246,"name":"IERC20","nameLocations":["420:6:21"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"420:6:21"},"id":6247,"nodeType":"InheritanceSpecifier","src":"420:6:21"},{"baseName":{"id":6248,"name":"IERC20Metadata","nameLocations":["428:14:21"],"nodeType":"IdentifierPath","referencedDeclaration":6512,"src":"428:14:21"},"id":6249,"nodeType":"InheritanceSpecifier","src":"428:14:21"}],"canonicalName":"IERC4626","contractDependencies":[],"contractKind":"interface","documentation":{"id":6245,"nodeType":"StructuredDocumentation","src":"261:136:21","text":" @dev Interface of the ERC4626 \"Tokenized Vault Standard\", as defined in\n https://eips.ethereum.org/EIPS/eip-4626[ERC-4626]."},"fullyImplemented":false,"id":6408,"linearizedBaseContracts":[6408,6512,6486],"name":"IERC4626","nameLocation":"408:8:21","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"dcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7","id":6259,"name":"Deposit","nameLocation":"455:7:21","nodeType":"EventDefinition","parameters":{"id":6258,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6251,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"479:6:21","nodeType":"VariableDeclaration","scope":6259,"src":"463:22:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6250,"name":"address","nodeType":"ElementaryTypeName","src":"463:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6253,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"503:5:21","nodeType":"VariableDeclaration","scope":6259,"src":"487:21:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6252,"name":"address","nodeType":"ElementaryTypeName","src":"487:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6255,"indexed":false,"mutability":"mutable","name":"assets","nameLocation":"518:6:21","nodeType":"VariableDeclaration","scope":6259,"src":"510:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6254,"name":"uint256","nodeType":"ElementaryTypeName","src":"510:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6257,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"534:6:21","nodeType":"VariableDeclaration","scope":6259,"src":"526:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6256,"name":"uint256","nodeType":"ElementaryTypeName","src":"526:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"462:79:21"},"src":"449:93:21"},{"anonymous":false,"eventSelector":"fbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db","id":6271,"name":"Withdraw","nameLocation":"554:8:21","nodeType":"EventDefinition","parameters":{"id":6270,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6261,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"588:6:21","nodeType":"VariableDeclaration","scope":6271,"src":"572:22:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6260,"name":"address","nodeType":"ElementaryTypeName","src":"572:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6263,"indexed":true,"mutability":"mutable","name":"receiver","nameLocation":"620:8:21","nodeType":"VariableDeclaration","scope":6271,"src":"604:24:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6262,"name":"address","nodeType":"ElementaryTypeName","src":"604:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6265,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"654:5:21","nodeType":"VariableDeclaration","scope":6271,"src":"638:21:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6264,"name":"address","nodeType":"ElementaryTypeName","src":"638:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6267,"indexed":false,"mutability":"mutable","name":"assets","nameLocation":"677:6:21","nodeType":"VariableDeclaration","scope":6271,"src":"669:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6266,"name":"uint256","nodeType":"ElementaryTypeName","src":"669:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6269,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"701:6:21","nodeType":"VariableDeclaration","scope":6271,"src":"693:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6268,"name":"uint256","nodeType":"ElementaryTypeName","src":"693:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"562:151:21"},"src":"548:166:21"},{"documentation":{"id":6272,"nodeType":"StructuredDocumentation","src":"720:207:21","text":" @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n - MUST be an ERC-20 token contract.\n - MUST NOT revert."},"functionSelector":"38d52e0f","id":6277,"implemented":false,"kind":"function","modifiers":[],"name":"asset","nameLocation":"941:5:21","nodeType":"FunctionDefinition","parameters":{"id":6273,"nodeType":"ParameterList","parameters":[],"src":"946:2:21"},"returnParameters":{"id":6276,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6275,"mutability":"mutable","name":"assetTokenAddress","nameLocation":"980:17:21","nodeType":"VariableDeclaration","scope":6277,"src":"972:25:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6274,"name":"address","nodeType":"ElementaryTypeName","src":"972:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"971:27:21"},"scope":6408,"src":"932:67:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6278,"nodeType":"StructuredDocumentation","src":"1005:286:21","text":" @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n - SHOULD include any compounding that occurs from yield.\n - MUST be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT revert."},"functionSelector":"01e1d114","id":6283,"implemented":false,"kind":"function","modifiers":[],"name":"totalAssets","nameLocation":"1305:11:21","nodeType":"FunctionDefinition","parameters":{"id":6279,"nodeType":"ParameterList","parameters":[],"src":"1316:2:21"},"returnParameters":{"id":6282,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6281,"mutability":"mutable","name":"totalManagedAssets","nameLocation":"1350:18:21","nodeType":"VariableDeclaration","scope":6283,"src":"1342:26:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6280,"name":"uint256","nodeType":"ElementaryTypeName","src":"1342:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1341:28:21"},"scope":6408,"src":"1296:74:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6284,"nodeType":"StructuredDocumentation","src":"1376:720:21","text":" @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from."},"functionSelector":"c6e6f592","id":6291,"implemented":false,"kind":"function","modifiers":[],"name":"convertToShares","nameLocation":"2110:15:21","nodeType":"FunctionDefinition","parameters":{"id":6287,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6286,"mutability":"mutable","name":"assets","nameLocation":"2134:6:21","nodeType":"VariableDeclaration","scope":6291,"src":"2126:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6285,"name":"uint256","nodeType":"ElementaryTypeName","src":"2126:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2125:16:21"},"returnParameters":{"id":6290,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6289,"mutability":"mutable","name":"shares","nameLocation":"2173:6:21","nodeType":"VariableDeclaration","scope":6291,"src":"2165:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6288,"name":"uint256","nodeType":"ElementaryTypeName","src":"2165:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2164:16:21"},"scope":6408,"src":"2101:80:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6292,"nodeType":"StructuredDocumentation","src":"2187:720:21","text":" @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from."},"functionSelector":"07a2d13a","id":6299,"implemented":false,"kind":"function","modifiers":[],"name":"convertToAssets","nameLocation":"2921:15:21","nodeType":"FunctionDefinition","parameters":{"id":6295,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6294,"mutability":"mutable","name":"shares","nameLocation":"2945:6:21","nodeType":"VariableDeclaration","scope":6299,"src":"2937:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6293,"name":"uint256","nodeType":"ElementaryTypeName","src":"2937:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2936:16:21"},"returnParameters":{"id":6298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6297,"mutability":"mutable","name":"assets","nameLocation":"2984:6:21","nodeType":"VariableDeclaration","scope":6299,"src":"2976:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6296,"name":"uint256","nodeType":"ElementaryTypeName","src":"2976:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2975:16:21"},"scope":6408,"src":"2912:80:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6300,"nodeType":"StructuredDocumentation","src":"2998:386:21","text":" @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n through a deposit call.\n - MUST return a limited value if receiver is subject to some deposit limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n - MUST NOT revert."},"functionSelector":"402d267d","id":6307,"implemented":false,"kind":"function","modifiers":[],"name":"maxDeposit","nameLocation":"3398:10:21","nodeType":"FunctionDefinition","parameters":{"id":6303,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6302,"mutability":"mutable","name":"receiver","nameLocation":"3417:8:21","nodeType":"VariableDeclaration","scope":6307,"src":"3409:16:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6301,"name":"address","nodeType":"ElementaryTypeName","src":"3409:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3408:18:21"},"returnParameters":{"id":6306,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6305,"mutability":"mutable","name":"maxAssets","nameLocation":"3458:9:21","nodeType":"VariableDeclaration","scope":6307,"src":"3450:17:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6304,"name":"uint256","nodeType":"ElementaryTypeName","src":"3450:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3449:19:21"},"scope":6408,"src":"3389:80:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6308,"nodeType":"StructuredDocumentation","src":"3475:1012:21","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n current on-chain conditions.\n - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n in the same transaction.\n - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n deposit would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing."},"functionSelector":"ef8b30f7","id":6315,"implemented":false,"kind":"function","modifiers":[],"name":"previewDeposit","nameLocation":"4501:14:21","nodeType":"FunctionDefinition","parameters":{"id":6311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6310,"mutability":"mutable","name":"assets","nameLocation":"4524:6:21","nodeType":"VariableDeclaration","scope":6315,"src":"4516:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6309,"name":"uint256","nodeType":"ElementaryTypeName","src":"4516:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4515:16:21"},"returnParameters":{"id":6314,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6313,"mutability":"mutable","name":"shares","nameLocation":"4563:6:21","nodeType":"VariableDeclaration","scope":6315,"src":"4555:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6312,"name":"uint256","nodeType":"ElementaryTypeName","src":"4555:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4554:16:21"},"scope":6408,"src":"4492:79:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6316,"nodeType":"StructuredDocumentation","src":"4577:651:21","text":" @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n deposit execution, and are accounted for during deposit.\n - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"functionSelector":"6e553f65","id":6325,"implemented":false,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"5242:7:21","nodeType":"FunctionDefinition","parameters":{"id":6321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6318,"mutability":"mutable","name":"assets","nameLocation":"5258:6:21","nodeType":"VariableDeclaration","scope":6325,"src":"5250:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6317,"name":"uint256","nodeType":"ElementaryTypeName","src":"5250:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6320,"mutability":"mutable","name":"receiver","nameLocation":"5274:8:21","nodeType":"VariableDeclaration","scope":6325,"src":"5266:16:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6319,"name":"address","nodeType":"ElementaryTypeName","src":"5266:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5249:34:21"},"returnParameters":{"id":6324,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6323,"mutability":"mutable","name":"shares","nameLocation":"5310:6:21","nodeType":"VariableDeclaration","scope":6325,"src":"5302:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6322,"name":"uint256","nodeType":"ElementaryTypeName","src":"5302:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5301:16:21"},"scope":6408,"src":"5233:85:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6326,"nodeType":"StructuredDocumentation","src":"5324:341:21","text":" @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n - MUST return a limited value if receiver is subject to some mint limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n - MUST NOT revert."},"functionSelector":"c63d75b6","id":6333,"implemented":false,"kind":"function","modifiers":[],"name":"maxMint","nameLocation":"5679:7:21","nodeType":"FunctionDefinition","parameters":{"id":6329,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6328,"mutability":"mutable","name":"receiver","nameLocation":"5695:8:21","nodeType":"VariableDeclaration","scope":6333,"src":"5687:16:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6327,"name":"address","nodeType":"ElementaryTypeName","src":"5687:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5686:18:21"},"returnParameters":{"id":6332,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6331,"mutability":"mutable","name":"maxShares","nameLocation":"5736:9:21","nodeType":"VariableDeclaration","scope":6333,"src":"5728:17:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6330,"name":"uint256","nodeType":"ElementaryTypeName","src":"5728:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5727:19:21"},"scope":6408,"src":"5670:77:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6334,"nodeType":"StructuredDocumentation","src":"5753:984:21","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n same transaction.\n - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by minting."},"functionSelector":"b3d7f6b9","id":6341,"implemented":false,"kind":"function","modifiers":[],"name":"previewMint","nameLocation":"6751:11:21","nodeType":"FunctionDefinition","parameters":{"id":6337,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6336,"mutability":"mutable","name":"shares","nameLocation":"6771:6:21","nodeType":"VariableDeclaration","scope":6341,"src":"6763:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6335,"name":"uint256","nodeType":"ElementaryTypeName","src":"6763:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6762:16:21"},"returnParameters":{"id":6340,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6339,"mutability":"mutable","name":"assets","nameLocation":"6810:6:21","nodeType":"VariableDeclaration","scope":6341,"src":"6802:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6338,"name":"uint256","nodeType":"ElementaryTypeName","src":"6802:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6801:16:21"},"scope":6408,"src":"6742:76:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6342,"nodeType":"StructuredDocumentation","src":"6824:642:21","text":" @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n execution, and are accounted for during mint.\n - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"functionSelector":"94bf804d","id":6351,"implemented":false,"kind":"function","modifiers":[],"name":"mint","nameLocation":"7480:4:21","nodeType":"FunctionDefinition","parameters":{"id":6347,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6344,"mutability":"mutable","name":"shares","nameLocation":"7493:6:21","nodeType":"VariableDeclaration","scope":6351,"src":"7485:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6343,"name":"uint256","nodeType":"ElementaryTypeName","src":"7485:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6346,"mutability":"mutable","name":"receiver","nameLocation":"7509:8:21","nodeType":"VariableDeclaration","scope":6351,"src":"7501:16:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6345,"name":"address","nodeType":"ElementaryTypeName","src":"7501:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7484:34:21"},"returnParameters":{"id":6350,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6349,"mutability":"mutable","name":"assets","nameLocation":"7545:6:21","nodeType":"VariableDeclaration","scope":6351,"src":"7537:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6348,"name":"uint256","nodeType":"ElementaryTypeName","src":"7537:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7536:16:21"},"scope":6408,"src":"7471:82:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6352,"nodeType":"StructuredDocumentation","src":"7559:293:21","text":" @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n Vault, through a withdraw call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST NOT revert."},"functionSelector":"ce96cb77","id":6359,"implemented":false,"kind":"function","modifiers":[],"name":"maxWithdraw","nameLocation":"7866:11:21","nodeType":"FunctionDefinition","parameters":{"id":6355,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6354,"mutability":"mutable","name":"owner","nameLocation":"7886:5:21","nodeType":"VariableDeclaration","scope":6359,"src":"7878:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6353,"name":"address","nodeType":"ElementaryTypeName","src":"7878:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7877:15:21"},"returnParameters":{"id":6358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6357,"mutability":"mutable","name":"maxAssets","nameLocation":"7924:9:21","nodeType":"VariableDeclaration","scope":6359,"src":"7916:17:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6356,"name":"uint256","nodeType":"ElementaryTypeName","src":"7916:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7915:19:21"},"scope":6408,"src":"7857:78:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6360,"nodeType":"StructuredDocumentation","src":"7941:1034:21","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n given current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n called\n in the same transaction.\n - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n the withdrawal would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing."},"functionSelector":"0a28a477","id":6367,"implemented":false,"kind":"function","modifiers":[],"name":"previewWithdraw","nameLocation":"8989:15:21","nodeType":"FunctionDefinition","parameters":{"id":6363,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6362,"mutability":"mutable","name":"assets","nameLocation":"9013:6:21","nodeType":"VariableDeclaration","scope":6367,"src":"9005:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6361,"name":"uint256","nodeType":"ElementaryTypeName","src":"9005:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9004:16:21"},"returnParameters":{"id":6366,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6365,"mutability":"mutable","name":"shares","nameLocation":"9052:6:21","nodeType":"VariableDeclaration","scope":6367,"src":"9044:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6364,"name":"uint256","nodeType":"ElementaryTypeName","src":"9044:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9043:16:21"},"scope":6408,"src":"8980:80:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6368,"nodeType":"StructuredDocumentation","src":"9066:670:21","text":" @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n withdraw execution, and are accounted for during withdraw.\n - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately."},"functionSelector":"b460af94","id":6379,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"9750:8:21","nodeType":"FunctionDefinition","parameters":{"id":6375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6370,"mutability":"mutable","name":"assets","nameLocation":"9767:6:21","nodeType":"VariableDeclaration","scope":6379,"src":"9759:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6369,"name":"uint256","nodeType":"ElementaryTypeName","src":"9759:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6372,"mutability":"mutable","name":"receiver","nameLocation":"9783:8:21","nodeType":"VariableDeclaration","scope":6379,"src":"9775:16:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6371,"name":"address","nodeType":"ElementaryTypeName","src":"9775:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6374,"mutability":"mutable","name":"owner","nameLocation":"9801:5:21","nodeType":"VariableDeclaration","scope":6379,"src":"9793:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6373,"name":"address","nodeType":"ElementaryTypeName","src":"9793:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9758:49:21"},"returnParameters":{"id":6378,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6377,"mutability":"mutable","name":"shares","nameLocation":"9834:6:21","nodeType":"VariableDeclaration","scope":6379,"src":"9826:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6376,"name":"uint256","nodeType":"ElementaryTypeName","src":"9826:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9825:16:21"},"scope":6408,"src":"9741:101:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6380,"nodeType":"StructuredDocumentation","src":"9848:381:21","text":" @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n through a redeem call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n - MUST NOT revert."},"functionSelector":"d905777e","id":6387,"implemented":false,"kind":"function","modifiers":[],"name":"maxRedeem","nameLocation":"10243:9:21","nodeType":"FunctionDefinition","parameters":{"id":6383,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6382,"mutability":"mutable","name":"owner","nameLocation":"10261:5:21","nodeType":"VariableDeclaration","scope":6387,"src":"10253:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6381,"name":"address","nodeType":"ElementaryTypeName","src":"10253:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10252:15:21"},"returnParameters":{"id":6386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6385,"mutability":"mutable","name":"maxShares","nameLocation":"10299:9:21","nodeType":"VariableDeclaration","scope":6387,"src":"10291:17:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6384,"name":"uint256","nodeType":"ElementaryTypeName","src":"10291:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10290:19:21"},"scope":6408,"src":"10234:76:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6388,"nodeType":"StructuredDocumentation","src":"10316:1010:21","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\n given current on-chain conditions.\n - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n same transaction.\n - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n redemption would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by redeeming."},"functionSelector":"4cdad506","id":6395,"implemented":false,"kind":"function","modifiers":[],"name":"previewRedeem","nameLocation":"11340:13:21","nodeType":"FunctionDefinition","parameters":{"id":6391,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6390,"mutability":"mutable","name":"shares","nameLocation":"11362:6:21","nodeType":"VariableDeclaration","scope":6395,"src":"11354:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6389,"name":"uint256","nodeType":"ElementaryTypeName","src":"11354:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11353:16:21"},"returnParameters":{"id":6394,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6393,"mutability":"mutable","name":"assets","nameLocation":"11401:6:21","nodeType":"VariableDeclaration","scope":6395,"src":"11393:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6392,"name":"uint256","nodeType":"ElementaryTypeName","src":"11393:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11392:16:21"},"scope":6408,"src":"11331:78:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6396,"nodeType":"StructuredDocumentation","src":"11415:661:21","text":" @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n redeem execution, and are accounted for during redeem.\n - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately."},"functionSelector":"ba087652","id":6407,"implemented":false,"kind":"function","modifiers":[],"name":"redeem","nameLocation":"12090:6:21","nodeType":"FunctionDefinition","parameters":{"id":6403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6398,"mutability":"mutable","name":"shares","nameLocation":"12105:6:21","nodeType":"VariableDeclaration","scope":6407,"src":"12097:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6397,"name":"uint256","nodeType":"ElementaryTypeName","src":"12097:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6400,"mutability":"mutable","name":"receiver","nameLocation":"12121:8:21","nodeType":"VariableDeclaration","scope":6407,"src":"12113:16:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6399,"name":"address","nodeType":"ElementaryTypeName","src":"12113:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6402,"mutability":"mutable","name":"owner","nameLocation":"12139:5:21","nodeType":"VariableDeclaration","scope":6407,"src":"12131:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6401,"name":"address","nodeType":"ElementaryTypeName","src":"12131:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12096:49:21"},"returnParameters":{"id":6406,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6405,"mutability":"mutable","name":"assets","nameLocation":"12172:6:21","nodeType":"VariableDeclaration","scope":6407,"src":"12164:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6404,"name":"uint256","nodeType":"ElementaryTypeName","src":"12164:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12163:16:21"},"scope":6408,"src":"12081:99:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":6409,"src":"398:11784:21","usedErrors":[],"usedEvents":[6259,6271,6420,6429]}],"src":"107:12076:21"},"id":21},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","exportedSymbols":{"IERC20":[6486]},"id":6487,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6410,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"106:24:22"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20","contractDependencies":[],"contractKind":"interface","documentation":{"id":6411,"nodeType":"StructuredDocumentation","src":"132:70:22","text":" @dev Interface of the ERC20 standard as defined in the EIP."},"fullyImplemented":false,"id":6486,"linearizedBaseContracts":[6486],"name":"IERC20","nameLocation":"213:6:22","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":6412,"nodeType":"StructuredDocumentation","src":"226:158:22","text":" @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."},"eventSelector":"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","id":6420,"name":"Transfer","nameLocation":"395:8:22","nodeType":"EventDefinition","parameters":{"id":6419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6414,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"420:4:22","nodeType":"VariableDeclaration","scope":6420,"src":"404:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6413,"name":"address","nodeType":"ElementaryTypeName","src":"404:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6416,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"442:2:22","nodeType":"VariableDeclaration","scope":6420,"src":"426:18:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6415,"name":"address","nodeType":"ElementaryTypeName","src":"426:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6418,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"454:5:22","nodeType":"VariableDeclaration","scope":6420,"src":"446:13:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6417,"name":"uint256","nodeType":"ElementaryTypeName","src":"446:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"403:57:22"},"src":"389:72:22"},{"anonymous":false,"documentation":{"id":6421,"nodeType":"StructuredDocumentation","src":"467:148:22","text":" @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."},"eventSelector":"8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","id":6429,"name":"Approval","nameLocation":"626:8:22","nodeType":"EventDefinition","parameters":{"id":6428,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6423,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"651:5:22","nodeType":"VariableDeclaration","scope":6429,"src":"635:21:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6422,"name":"address","nodeType":"ElementaryTypeName","src":"635:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6425,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"674:7:22","nodeType":"VariableDeclaration","scope":6429,"src":"658:23:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6424,"name":"address","nodeType":"ElementaryTypeName","src":"658:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6427,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"691:5:22","nodeType":"VariableDeclaration","scope":6429,"src":"683:13:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6426,"name":"uint256","nodeType":"ElementaryTypeName","src":"683:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"634:63:22"},"src":"620:78:22"},{"documentation":{"id":6430,"nodeType":"StructuredDocumentation","src":"704:65:22","text":" @dev Returns the value of tokens in existence."},"functionSelector":"18160ddd","id":6435,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"783:11:22","nodeType":"FunctionDefinition","parameters":{"id":6431,"nodeType":"ParameterList","parameters":[],"src":"794:2:22"},"returnParameters":{"id":6434,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6433,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6435,"src":"820:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6432,"name":"uint256","nodeType":"ElementaryTypeName","src":"820:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"819:9:22"},"scope":6486,"src":"774:55:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6436,"nodeType":"StructuredDocumentation","src":"835:71:22","text":" @dev Returns the value of tokens owned by `account`."},"functionSelector":"70a08231","id":6443,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"920:9:22","nodeType":"FunctionDefinition","parameters":{"id":6439,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6438,"mutability":"mutable","name":"account","nameLocation":"938:7:22","nodeType":"VariableDeclaration","scope":6443,"src":"930:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6437,"name":"address","nodeType":"ElementaryTypeName","src":"930:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"929:17:22"},"returnParameters":{"id":6442,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6441,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6443,"src":"970:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6440,"name":"uint256","nodeType":"ElementaryTypeName","src":"970:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"969:9:22"},"scope":6486,"src":"911:68:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6444,"nodeType":"StructuredDocumentation","src":"985:213:22","text":" @dev Moves a `value` amount of tokens from the caller's account to `to`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"a9059cbb","id":6453,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"1212:8:22","nodeType":"FunctionDefinition","parameters":{"id":6449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6446,"mutability":"mutable","name":"to","nameLocation":"1229:2:22","nodeType":"VariableDeclaration","scope":6453,"src":"1221:10:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6445,"name":"address","nodeType":"ElementaryTypeName","src":"1221:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6448,"mutability":"mutable","name":"value","nameLocation":"1241:5:22","nodeType":"VariableDeclaration","scope":6453,"src":"1233:13:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6447,"name":"uint256","nodeType":"ElementaryTypeName","src":"1233:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1220:27:22"},"returnParameters":{"id":6452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6451,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6453,"src":"1266:4:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6450,"name":"bool","nodeType":"ElementaryTypeName","src":"1266:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1265:6:22"},"scope":6486,"src":"1203:69:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6454,"nodeType":"StructuredDocumentation","src":"1278:264:22","text":" @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called."},"functionSelector":"dd62ed3e","id":6463,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"1556:9:22","nodeType":"FunctionDefinition","parameters":{"id":6459,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6456,"mutability":"mutable","name":"owner","nameLocation":"1574:5:22","nodeType":"VariableDeclaration","scope":6463,"src":"1566:13:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6455,"name":"address","nodeType":"ElementaryTypeName","src":"1566:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6458,"mutability":"mutable","name":"spender","nameLocation":"1589:7:22","nodeType":"VariableDeclaration","scope":6463,"src":"1581:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6457,"name":"address","nodeType":"ElementaryTypeName","src":"1581:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1565:32:22"},"returnParameters":{"id":6462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6461,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6463,"src":"1621:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6460,"name":"uint256","nodeType":"ElementaryTypeName","src":"1621:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1620:9:22"},"scope":6486,"src":"1547:83:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6464,"nodeType":"StructuredDocumentation","src":"1636:667:22","text":" @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event."},"functionSelector":"095ea7b3","id":6473,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"2317:7:22","nodeType":"FunctionDefinition","parameters":{"id":6469,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6466,"mutability":"mutable","name":"spender","nameLocation":"2333:7:22","nodeType":"VariableDeclaration","scope":6473,"src":"2325:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6465,"name":"address","nodeType":"ElementaryTypeName","src":"2325:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6468,"mutability":"mutable","name":"value","nameLocation":"2350:5:22","nodeType":"VariableDeclaration","scope":6473,"src":"2342:13:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6467,"name":"uint256","nodeType":"ElementaryTypeName","src":"2342:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2324:32:22"},"returnParameters":{"id":6472,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6471,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6473,"src":"2375:4:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6470,"name":"bool","nodeType":"ElementaryTypeName","src":"2375:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2374:6:22"},"scope":6486,"src":"2308:73:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6474,"nodeType":"StructuredDocumentation","src":"2387:297:22","text":" @dev Moves a `value` amount of tokens from `from` to `to` using the\n allowance mechanism. `value` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"23b872dd","id":6485,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"2698:12:22","nodeType":"FunctionDefinition","parameters":{"id":6481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6476,"mutability":"mutable","name":"from","nameLocation":"2719:4:22","nodeType":"VariableDeclaration","scope":6485,"src":"2711:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6475,"name":"address","nodeType":"ElementaryTypeName","src":"2711:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6478,"mutability":"mutable","name":"to","nameLocation":"2733:2:22","nodeType":"VariableDeclaration","scope":6485,"src":"2725:10:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6477,"name":"address","nodeType":"ElementaryTypeName","src":"2725:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6480,"mutability":"mutable","name":"value","nameLocation":"2745:5:22","nodeType":"VariableDeclaration","scope":6485,"src":"2737:13:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6479,"name":"uint256","nodeType":"ElementaryTypeName","src":"2737:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2710:41:22"},"returnParameters":{"id":6484,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6483,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6485,"src":"2770:4:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6482,"name":"bool","nodeType":"ElementaryTypeName","src":"2770:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2769:6:22"},"scope":6486,"src":"2689:87:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":6487,"src":"203:2575:22","usedErrors":[],"usedEvents":[6420,6429]}],"src":"106:2673:22"},"id":22},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","exportedSymbols":{"IERC20":[6486],"IERC20Metadata":[6512]},"id":6513,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6488,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"125:24:23"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","id":6490,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6513,"sourceUnit":6487,"src":"151:37:23","symbolAliases":[{"foreign":{"id":6489,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6486,"src":"159:6:23","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6492,"name":"IERC20","nameLocations":["305:6:23"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"305:6:23"},"id":6493,"nodeType":"InheritanceSpecifier","src":"305:6:23"}],"canonicalName":"IERC20Metadata","contractDependencies":[],"contractKind":"interface","documentation":{"id":6491,"nodeType":"StructuredDocumentation","src":"190:86:23","text":" @dev Interface for the optional metadata functions from the ERC20 standard."},"fullyImplemented":false,"id":6512,"linearizedBaseContracts":[6512,6486],"name":"IERC20Metadata","nameLocation":"287:14:23","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":6494,"nodeType":"StructuredDocumentation","src":"318:54:23","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":6499,"implemented":false,"kind":"function","modifiers":[],"name":"name","nameLocation":"386:4:23","nodeType":"FunctionDefinition","parameters":{"id":6495,"nodeType":"ParameterList","parameters":[],"src":"390:2:23"},"returnParameters":{"id":6498,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6497,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6499,"src":"416:13:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":6496,"name":"string","nodeType":"ElementaryTypeName","src":"416:6:23","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"415:15:23"},"scope":6512,"src":"377:54:23","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6500,"nodeType":"StructuredDocumentation","src":"437:56:23","text":" @dev Returns the symbol of the token."},"functionSelector":"95d89b41","id":6505,"implemented":false,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"507:6:23","nodeType":"FunctionDefinition","parameters":{"id":6501,"nodeType":"ParameterList","parameters":[],"src":"513:2:23"},"returnParameters":{"id":6504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6503,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6505,"src":"539:13:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":6502,"name":"string","nodeType":"ElementaryTypeName","src":"539:6:23","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"538:15:23"},"scope":6512,"src":"498:56:23","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6506,"nodeType":"StructuredDocumentation","src":"560:65:23","text":" @dev Returns the decimals places of the token."},"functionSelector":"313ce567","id":6511,"implemented":false,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"639:8:23","nodeType":"FunctionDefinition","parameters":{"id":6507,"nodeType":"ParameterList","parameters":[],"src":"647:2:23"},"returnParameters":{"id":6510,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6509,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6511,"src":"673:5:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":6508,"name":"uint8","nodeType":"ElementaryTypeName","src":"673:5:23","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"672:7:23"},"scope":6512,"src":"630:50:23","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6513,"src":"277:405:23","usedErrors":[],"usedEvents":[6420,6429]}],"src":"125:558:23"},"id":23},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol","exportedSymbols":{"IERC20Permit":[6548]},"id":6549,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6514,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"123:24:24"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20Permit","contractDependencies":[],"contractKind":"interface","documentation":{"id":6515,"nodeType":"StructuredDocumentation","src":"149:1963:24","text":" @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\n need to send a transaction, and thus is not required to hold Ether at all.\n ==== Security Considerations\n There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\n expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\n considered as an intention to spend the allowance in any specific way. The second is that because permits have\n built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\n take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\n generally recommended is:\n ```solidity\n function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\n try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\n doThing(..., value);\n }\n function doThing(..., uint256 value) public {\n token.safeTransferFrom(msg.sender, address(this), value);\n ...\n }\n ```\n Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\n `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\n {SafeERC20-safeTransferFrom}).\n Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\n contracts should have entry points that don't rely on permit."},"fullyImplemented":false,"id":6548,"linearizedBaseContracts":[6548],"name":"IERC20Permit","nameLocation":"2123:12:24","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":6516,"nodeType":"StructuredDocumentation","src":"2142:850:24","text":" @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\n given ``owner``'s signed approval.\n IMPORTANT: The same issues {IERC20-approve} has related to transaction\n ordering also apply here.\n Emits an {Approval} event.\n Requirements:\n - `spender` cannot be the zero address.\n - `deadline` must be a timestamp in the future.\n - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\n over the EIP712-formatted function arguments.\n - the signature must use ``owner``'s current nonce (see {nonces}).\n For more information on the signature format, see the\n https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\n section].\n CAUTION: See Security Considerations above."},"functionSelector":"d505accf","id":6533,"implemented":false,"kind":"function","modifiers":[],"name":"permit","nameLocation":"3006:6:24","nodeType":"FunctionDefinition","parameters":{"id":6531,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6518,"mutability":"mutable","name":"owner","nameLocation":"3030:5:24","nodeType":"VariableDeclaration","scope":6533,"src":"3022:13:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6517,"name":"address","nodeType":"ElementaryTypeName","src":"3022:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6520,"mutability":"mutable","name":"spender","nameLocation":"3053:7:24","nodeType":"VariableDeclaration","scope":6533,"src":"3045:15:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6519,"name":"address","nodeType":"ElementaryTypeName","src":"3045:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6522,"mutability":"mutable","name":"value","nameLocation":"3078:5:24","nodeType":"VariableDeclaration","scope":6533,"src":"3070:13:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6521,"name":"uint256","nodeType":"ElementaryTypeName","src":"3070:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6524,"mutability":"mutable","name":"deadline","nameLocation":"3101:8:24","nodeType":"VariableDeclaration","scope":6533,"src":"3093:16:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6523,"name":"uint256","nodeType":"ElementaryTypeName","src":"3093:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6526,"mutability":"mutable","name":"v","nameLocation":"3125:1:24","nodeType":"VariableDeclaration","scope":6533,"src":"3119:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":6525,"name":"uint8","nodeType":"ElementaryTypeName","src":"3119:5:24","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":6528,"mutability":"mutable","name":"r","nameLocation":"3144:1:24","nodeType":"VariableDeclaration","scope":6533,"src":"3136:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6527,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3136:7:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6530,"mutability":"mutable","name":"s","nameLocation":"3163:1:24","nodeType":"VariableDeclaration","scope":6533,"src":"3155:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6529,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3155:7:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3012:158:24"},"returnParameters":{"id":6532,"nodeType":"ParameterList","parameters":[],"src":"3179:0:24"},"scope":6548,"src":"2997:183:24","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6534,"nodeType":"StructuredDocumentation","src":"3186:294:24","text":" @dev Returns the current nonce for `owner`. This value must be\n included whenever a signature is generated for {permit}.\n Every successful call to {permit} increases ``owner``'s nonce by one. This\n prevents a signature from being used multiple times."},"functionSelector":"7ecebe00","id":6541,"implemented":false,"kind":"function","modifiers":[],"name":"nonces","nameLocation":"3494:6:24","nodeType":"FunctionDefinition","parameters":{"id":6537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6536,"mutability":"mutable","name":"owner","nameLocation":"3509:5:24","nodeType":"VariableDeclaration","scope":6541,"src":"3501:13:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6535,"name":"address","nodeType":"ElementaryTypeName","src":"3501:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3500:15:24"},"returnParameters":{"id":6540,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6539,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6541,"src":"3539:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6538,"name":"uint256","nodeType":"ElementaryTypeName","src":"3539:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3538:9:24"},"scope":6548,"src":"3485:63:24","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6542,"nodeType":"StructuredDocumentation","src":"3554:128:24","text":" @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}."},"functionSelector":"3644e515","id":6547,"implemented":false,"kind":"function","modifiers":[],"name":"DOMAIN_SEPARATOR","nameLocation":"3749:16:24","nodeType":"FunctionDefinition","parameters":{"id":6543,"nodeType":"ParameterList","parameters":[],"src":"3765:2:24"},"returnParameters":{"id":6546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6545,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6547,"src":"3791:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6544,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3791:7:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3790:9:24"},"scope":6548,"src":"3740:60:24","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6549,"src":"2113:1689:24","usedErrors":[],"usedEvents":[]}],"src":"123:3680:24"},"id":24},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","exportedSymbols":{"Address":[7091],"IERC20":[6486],"IERC20Permit":[6548],"SafeERC20":[6838]},"id":6839,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6550,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"115:24:25"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","id":6552,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6839,"sourceUnit":6487,"src":"141:37:25","symbolAliases":[{"foreign":{"id":6551,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6486,"src":"149:6:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol","file":"../extensions/IERC20Permit.sol","id":6554,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6839,"sourceUnit":6549,"src":"179:60:25","symbolAliases":[{"foreign":{"id":6553,"name":"IERC20Permit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6548,"src":"187:12:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"../../../utils/Address.sol","id":6556,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6839,"sourceUnit":7092,"src":"240:51:25","symbolAliases":[{"foreign":{"id":6555,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"248:7:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"SafeERC20","contractDependencies":[],"contractKind":"library","documentation":{"id":6557,"nodeType":"StructuredDocumentation","src":"293:457:25","text":" @title SafeERC20\n @dev Wrappers around ERC20 operations that throw on failure (when the token\n contract returns false). Tokens that return no value (and instead revert or\n throw on failure) are also supported, non-reverting calls are assumed to be\n successful.\n To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n which allows you to call the safe operations as `token.safeTransfer(...)`, etc."},"fullyImplemented":true,"id":6838,"linearizedBaseContracts":[6838],"name":"SafeERC20","nameLocation":"759:9:25","nodeType":"ContractDefinition","nodes":[{"global":false,"id":6560,"libraryName":{"id":6558,"name":"Address","nameLocations":["781:7:25"],"nodeType":"IdentifierPath","referencedDeclaration":7091,"src":"781:7:25"},"nodeType":"UsingForDirective","src":"775:26:25","typeName":{"id":6559,"name":"address","nodeType":"ElementaryTypeName","src":"793:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"documentation":{"id":6561,"nodeType":"StructuredDocumentation","src":"807:64:25","text":" @dev An operation with an ERC20 token failed."},"errorSelector":"5274afe7","id":6565,"name":"SafeERC20FailedOperation","nameLocation":"882:24:25","nodeType":"ErrorDefinition","parameters":{"id":6564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6563,"mutability":"mutable","name":"token","nameLocation":"915:5:25","nodeType":"VariableDeclaration","scope":6565,"src":"907:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6562,"name":"address","nodeType":"ElementaryTypeName","src":"907:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"906:15:25"},"src":"876:46:25"},{"documentation":{"id":6566,"nodeType":"StructuredDocumentation","src":"928:71:25","text":" @dev Indicates a failed `decreaseAllowance` request."},"errorSelector":"e570110f","id":6574,"name":"SafeERC20FailedDecreaseAllowance","nameLocation":"1010:32:25","nodeType":"ErrorDefinition","parameters":{"id":6573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6568,"mutability":"mutable","name":"spender","nameLocation":"1051:7:25","nodeType":"VariableDeclaration","scope":6574,"src":"1043:15:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6567,"name":"address","nodeType":"ElementaryTypeName","src":"1043:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6570,"mutability":"mutable","name":"currentAllowance","nameLocation":"1068:16:25","nodeType":"VariableDeclaration","scope":6574,"src":"1060:24:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6569,"name":"uint256","nodeType":"ElementaryTypeName","src":"1060:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6572,"mutability":"mutable","name":"requestedDecrease","nameLocation":"1094:17:25","nodeType":"VariableDeclaration","scope":6574,"src":"1086:25:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6571,"name":"uint256","nodeType":"ElementaryTypeName","src":"1086:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1042:70:25"},"src":"1004:109:25"},{"body":{"id":6597,"nodeType":"Block","src":"1375:88:25","statements":[{"expression":{"arguments":[{"id":6586,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6578,"src":"1405:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":6589,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6578,"src":"1427:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":6590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1433:8:25","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":6453,"src":"1427:14:25","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":6591,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6580,"src":"1444:2:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6592,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6582,"src":"1448:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6593,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1443:11:25","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":6587,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1412:3:25","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":6588,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1416:10:25","memberName":"encodeCall","nodeType":"MemberAccess","src":"1412:14:25","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":6594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1412:43:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6585,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6788,"src":"1385:19:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6486_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":6595,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1385:71:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6596,"nodeType":"ExpressionStatement","src":"1385:71:25"}]},"documentation":{"id":6575,"nodeType":"StructuredDocumentation","src":"1119:179:25","text":" @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n non-reverting calls are assumed to be successful."},"id":6598,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransfer","nameLocation":"1312:12:25","nodeType":"FunctionDefinition","parameters":{"id":6583,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6578,"mutability":"mutable","name":"token","nameLocation":"1332:5:25","nodeType":"VariableDeclaration","scope":6598,"src":"1325:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":6577,"nodeType":"UserDefinedTypeName","pathNode":{"id":6576,"name":"IERC20","nameLocations":["1325:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"1325:6:25"},"referencedDeclaration":6486,"src":"1325:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":6580,"mutability":"mutable","name":"to","nameLocation":"1347:2:25","nodeType":"VariableDeclaration","scope":6598,"src":"1339:10:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6579,"name":"address","nodeType":"ElementaryTypeName","src":"1339:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6582,"mutability":"mutable","name":"value","nameLocation":"1359:5:25","nodeType":"VariableDeclaration","scope":6598,"src":"1351:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6581,"name":"uint256","nodeType":"ElementaryTypeName","src":"1351:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1324:41:25"},"returnParameters":{"id":6584,"nodeType":"ParameterList","parameters":[],"src":"1375:0:25"},"scope":6838,"src":"1303:160:25","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6624,"nodeType":"Block","src":"1792:98:25","statements":[{"expression":{"arguments":[{"id":6612,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6602,"src":"1822:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":6615,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6602,"src":"1844:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":6616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1850:12:25","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":6485,"src":"1844:18:25","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},{"components":[{"id":6617,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6604,"src":"1865:4:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6618,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6606,"src":"1871:2:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6619,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6608,"src":"1875:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6620,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1864:17:25","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}],"expression":{"id":6613,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1829:3:25","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":6614,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1833:10:25","memberName":"encodeCall","nodeType":"MemberAccess","src":"1829:14:25","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":6621,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1829:53:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6611,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6788,"src":"1802:19:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6486_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":6622,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1802:81:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6623,"nodeType":"ExpressionStatement","src":"1802:81:25"}]},"documentation":{"id":6599,"nodeType":"StructuredDocumentation","src":"1469:228:25","text":" @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n calling contract. If `token` returns no value, non-reverting calls are assumed to be successful."},"id":6625,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"1711:16:25","nodeType":"FunctionDefinition","parameters":{"id":6609,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6602,"mutability":"mutable","name":"token","nameLocation":"1735:5:25","nodeType":"VariableDeclaration","scope":6625,"src":"1728:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":6601,"nodeType":"UserDefinedTypeName","pathNode":{"id":6600,"name":"IERC20","nameLocations":["1728:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"1728:6:25"},"referencedDeclaration":6486,"src":"1728:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":6604,"mutability":"mutable","name":"from","nameLocation":"1750:4:25","nodeType":"VariableDeclaration","scope":6625,"src":"1742:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6603,"name":"address","nodeType":"ElementaryTypeName","src":"1742:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6606,"mutability":"mutable","name":"to","nameLocation":"1764:2:25","nodeType":"VariableDeclaration","scope":6625,"src":"1756:10:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6605,"name":"address","nodeType":"ElementaryTypeName","src":"1756:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6608,"mutability":"mutable","name":"value","nameLocation":"1776:5:25","nodeType":"VariableDeclaration","scope":6625,"src":"1768:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6607,"name":"uint256","nodeType":"ElementaryTypeName","src":"1768:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1727:55:25"},"returnParameters":{"id":6610,"nodeType":"ParameterList","parameters":[],"src":"1792:0:25"},"scope":6838,"src":"1702:188:25","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6655,"nodeType":"Block","src":"2167:139:25","statements":[{"assignments":[6637],"declarations":[{"constant":false,"id":6637,"mutability":"mutable","name":"oldAllowance","nameLocation":"2185:12:25","nodeType":"VariableDeclaration","scope":6655,"src":"2177:20:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6636,"name":"uint256","nodeType":"ElementaryTypeName","src":"2177:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6646,"initialValue":{"arguments":[{"arguments":[{"id":6642,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2224:4:25","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$6838","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$6838","typeString":"library SafeERC20"}],"id":6641,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2216:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6640,"name":"address","nodeType":"ElementaryTypeName","src":"2216:7:25","typeDescriptions":{}}},"id":6643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2216:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6644,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6631,"src":"2231:7:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6638,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6629,"src":"2200:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":6639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2206:9:25","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":6463,"src":"2200:15:25","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":6645,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2200:39:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2177:62:25"},{"expression":{"arguments":[{"id":6648,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6629,"src":"2262:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},{"id":6649,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6631,"src":"2269:7:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6650,"name":"oldAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6637,"src":"2278:12:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":6651,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6633,"src":"2293:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2278:20:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6647,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6746,"src":"2249:12:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6486_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":6653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2249:50:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6654,"nodeType":"ExpressionStatement","src":"2249:50:25"}]},"documentation":{"id":6626,"nodeType":"StructuredDocumentation","src":"1896:180:25","text":" @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful."},"id":6656,"implemented":true,"kind":"function","modifiers":[],"name":"safeIncreaseAllowance","nameLocation":"2090:21:25","nodeType":"FunctionDefinition","parameters":{"id":6634,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6629,"mutability":"mutable","name":"token","nameLocation":"2119:5:25","nodeType":"VariableDeclaration","scope":6656,"src":"2112:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":6628,"nodeType":"UserDefinedTypeName","pathNode":{"id":6627,"name":"IERC20","nameLocations":["2112:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"2112:6:25"},"referencedDeclaration":6486,"src":"2112:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":6631,"mutability":"mutable","name":"spender","nameLocation":"2134:7:25","nodeType":"VariableDeclaration","scope":6656,"src":"2126:15:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6630,"name":"address","nodeType":"ElementaryTypeName","src":"2126:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6633,"mutability":"mutable","name":"value","nameLocation":"2151:5:25","nodeType":"VariableDeclaration","scope":6656,"src":"2143:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6632,"name":"uint256","nodeType":"ElementaryTypeName","src":"2143:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2111:46:25"},"returnParameters":{"id":6635,"nodeType":"ParameterList","parameters":[],"src":"2167:0:25"},"scope":6838,"src":"2081:225:25","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6698,"nodeType":"Block","src":"2607:370:25","statements":[{"id":6697,"nodeType":"UncheckedBlock","src":"2617:354:25","statements":[{"assignments":[6668],"declarations":[{"constant":false,"id":6668,"mutability":"mutable","name":"currentAllowance","nameLocation":"2649:16:25","nodeType":"VariableDeclaration","scope":6697,"src":"2641:24:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6667,"name":"uint256","nodeType":"ElementaryTypeName","src":"2641:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6677,"initialValue":{"arguments":[{"arguments":[{"id":6673,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2692:4:25","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$6838","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$6838","typeString":"library SafeERC20"}],"id":6672,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2684:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6671,"name":"address","nodeType":"ElementaryTypeName","src":"2684:7:25","typeDescriptions":{}}},"id":6674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2684:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6675,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6662,"src":"2699:7:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6669,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6660,"src":"2668:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":6670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2674:9:25","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":6463,"src":"2668:15:25","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":6676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2668:39:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2641:66:25"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6678,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6668,"src":"2725:16:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6679,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6664,"src":"2744:17:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2725:36:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6688,"nodeType":"IfStatement","src":"2721:160:25","trueBody":{"id":6687,"nodeType":"Block","src":"2763:118:25","statements":[{"errorCall":{"arguments":[{"id":6682,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6662,"src":"2821:7:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6683,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6668,"src":"2830:16:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6684,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6664,"src":"2848:17:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6681,"name":"SafeERC20FailedDecreaseAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6574,"src":"2788:32:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":6685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2788:78:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6686,"nodeType":"RevertStatement","src":"2781:85:25"}]}},{"expression":{"arguments":[{"id":6690,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6660,"src":"2907:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},{"id":6691,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6662,"src":"2914:7:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6692,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6668,"src":"2923:16:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":6693,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6664,"src":"2942:17:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2923:36:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6689,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6746,"src":"2894:12:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6486_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":6695,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2894:66:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6696,"nodeType":"ExpressionStatement","src":"2894:66:25"}]}]},"documentation":{"id":6657,"nodeType":"StructuredDocumentation","src":"2312:192:25","text":" @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n value, non-reverting calls are assumed to be successful."},"id":6699,"implemented":true,"kind":"function","modifiers":[],"name":"safeDecreaseAllowance","nameLocation":"2518:21:25","nodeType":"FunctionDefinition","parameters":{"id":6665,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6660,"mutability":"mutable","name":"token","nameLocation":"2547:5:25","nodeType":"VariableDeclaration","scope":6699,"src":"2540:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":6659,"nodeType":"UserDefinedTypeName","pathNode":{"id":6658,"name":"IERC20","nameLocations":["2540:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"2540:6:25"},"referencedDeclaration":6486,"src":"2540:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":6662,"mutability":"mutable","name":"spender","nameLocation":"2562:7:25","nodeType":"VariableDeclaration","scope":6699,"src":"2554:15:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6661,"name":"address","nodeType":"ElementaryTypeName","src":"2554:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6664,"mutability":"mutable","name":"requestedDecrease","nameLocation":"2579:17:25","nodeType":"VariableDeclaration","scope":6699,"src":"2571:25:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6663,"name":"uint256","nodeType":"ElementaryTypeName","src":"2571:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2539:58:25"},"returnParameters":{"id":6666,"nodeType":"ParameterList","parameters":[],"src":"2607:0:25"},"scope":6838,"src":"2509:468:25","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6745,"nodeType":"Block","src":"3373:303:25","statements":[{"assignments":[6711],"declarations":[{"constant":false,"id":6711,"mutability":"mutable","name":"approvalCall","nameLocation":"3396:12:25","nodeType":"VariableDeclaration","scope":6745,"src":"3383:25:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6710,"name":"bytes","nodeType":"ElementaryTypeName","src":"3383:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":6720,"initialValue":{"arguments":[{"expression":{"id":6714,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6703,"src":"3426:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":6715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3432:7:25","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":6473,"src":"3426:13:25","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":6716,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6705,"src":"3442:7:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6717,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6707,"src":"3451:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6718,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3441:16:25","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":6712,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3411:3:25","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":6713,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3415:10:25","memberName":"encodeCall","nodeType":"MemberAccess","src":"3411:14:25","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":6719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3411:47:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3383:75:25"},{"condition":{"id":6725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3473:45:25","subExpression":{"arguments":[{"id":6722,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6703,"src":"3498:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},{"id":6723,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6711,"src":"3505:12:25","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6721,"name":"_callOptionalReturnBool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6837,"src":"3474:23:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6486_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (contract IERC20,bytes memory) returns (bool)"}},"id":6724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3474:44:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6744,"nodeType":"IfStatement","src":"3469:201:25","trueBody":{"id":6743,"nodeType":"Block","src":"3520:150:25","statements":[{"expression":{"arguments":[{"id":6727,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6703,"src":"3554:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":6730,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6703,"src":"3576:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":6731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3582:7:25","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":6473,"src":"3576:13:25","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":6732,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6705,"src":"3592:7:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":6733,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3601:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":6734,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3591:12:25","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(address,int_const 0)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(address,int_const 0)"}],"expression":{"id":6728,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3561:3:25","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":6729,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3565:10:25","memberName":"encodeCall","nodeType":"MemberAccess","src":"3561:14:25","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":6735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3561:43:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6726,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6788,"src":"3534:19:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6486_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":6736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3534:71:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6737,"nodeType":"ExpressionStatement","src":"3534:71:25"},{"expression":{"arguments":[{"id":6739,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6703,"src":"3639:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},{"id":6740,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6711,"src":"3646:12:25","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6738,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6788,"src":"3619:19:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6486_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":6741,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3619:40:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6742,"nodeType":"ExpressionStatement","src":"3619:40:25"}]}}]},"documentation":{"id":6700,"nodeType":"StructuredDocumentation","src":"2983:308:25","text":" @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n to be set to zero before setting it to a non-zero value, such as USDT."},"id":6746,"implemented":true,"kind":"function","modifiers":[],"name":"forceApprove","nameLocation":"3305:12:25","nodeType":"FunctionDefinition","parameters":{"id":6708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6703,"mutability":"mutable","name":"token","nameLocation":"3325:5:25","nodeType":"VariableDeclaration","scope":6746,"src":"3318:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":6702,"nodeType":"UserDefinedTypeName","pathNode":{"id":6701,"name":"IERC20","nameLocations":["3318:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"3318:6:25"},"referencedDeclaration":6486,"src":"3318:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":6705,"mutability":"mutable","name":"spender","nameLocation":"3340:7:25","nodeType":"VariableDeclaration","scope":6746,"src":"3332:15:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6704,"name":"address","nodeType":"ElementaryTypeName","src":"3332:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6707,"mutability":"mutable","name":"value","nameLocation":"3357:5:25","nodeType":"VariableDeclaration","scope":6746,"src":"3349:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6706,"name":"uint256","nodeType":"ElementaryTypeName","src":"3349:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3317:46:25"},"returnParameters":{"id":6709,"nodeType":"ParameterList","parameters":[],"src":"3373:0:25"},"scope":6838,"src":"3296:380:25","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6787,"nodeType":"Block","src":"4129:559:25","statements":[{"assignments":[6756],"declarations":[{"constant":false,"id":6756,"mutability":"mutable","name":"returndata","nameLocation":"4491:10:25","nodeType":"VariableDeclaration","scope":6787,"src":"4478:23:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6755,"name":"bytes","nodeType":"ElementaryTypeName","src":"4478:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":6764,"initialValue":{"arguments":[{"id":6762,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6752,"src":"4532:4:25","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":6759,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6750,"src":"4512:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}],"id":6758,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4504:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6757,"name":"address","nodeType":"ElementaryTypeName","src":"4504:7:25","typeDescriptions":{}}},"id":6760,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4504:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4519:12:25","memberName":"functionCall","nodeType":"MemberAccess","referencedDeclaration":6912,"src":"4504:27:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$attached_to$_t_address_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":6763,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4504:33:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"4478:59:25"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6765,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6756,"src":"4551:10:25","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":6766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4562:6:25","memberName":"length","nodeType":"MemberAccess","src":"4551:17:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":6767,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4572:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4551:22:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"id":6776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4577:31:25","subExpression":{"arguments":[{"id":6771,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6756,"src":"4589:10:25","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":6773,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4602:4:25","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":{"id":6772,"name":"bool","nodeType":"ElementaryTypeName","src":"4602:4:25","typeDescriptions":{}}}],"id":6774,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"4601:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}],"expression":{"id":6769,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4578:3:25","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":6770,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4582:6:25","memberName":"decode","nodeType":"MemberAccess","src":"4578:10:25","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":6775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4578:30:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4551:57:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6786,"nodeType":"IfStatement","src":"4547:135:25","trueBody":{"id":6785,"nodeType":"Block","src":"4610:72:25","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":6781,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6750,"src":"4664:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}],"id":6780,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4656:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6779,"name":"address","nodeType":"ElementaryTypeName","src":"4656:7:25","typeDescriptions":{}}},"id":6782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4656:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6778,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6565,"src":"4631:24:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":6783,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4631:40:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6784,"nodeType":"RevertStatement","src":"4624:47:25"}]}}]},"documentation":{"id":6747,"nodeType":"StructuredDocumentation","src":"3682:372:25","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants)."},"id":6788,"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturn","nameLocation":"4068:19:25","nodeType":"FunctionDefinition","parameters":{"id":6753,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6750,"mutability":"mutable","name":"token","nameLocation":"4095:5:25","nodeType":"VariableDeclaration","scope":6788,"src":"4088:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":6749,"nodeType":"UserDefinedTypeName","pathNode":{"id":6748,"name":"IERC20","nameLocations":["4088:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"4088:6:25"},"referencedDeclaration":6486,"src":"4088:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":6752,"mutability":"mutable","name":"data","nameLocation":"4115:4:25","nodeType":"VariableDeclaration","scope":6788,"src":"4102:17:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6751,"name":"bytes","nodeType":"ElementaryTypeName","src":"4102:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4087:33:25"},"returnParameters":{"id":6754,"nodeType":"ParameterList","parameters":[],"src":"4129:0:25"},"scope":6838,"src":"4059:629:25","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":6836,"nodeType":"Block","src":"5278:489:25","statements":[{"assignments":[6800,6802],"declarations":[{"constant":false,"id":6800,"mutability":"mutable","name":"success","nameLocation":"5579:7:25","nodeType":"VariableDeclaration","scope":6836,"src":"5574:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6799,"name":"bool","nodeType":"ElementaryTypeName","src":"5574:4:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6802,"mutability":"mutable","name":"returndata","nameLocation":"5601:10:25","nodeType":"VariableDeclaration","scope":6836,"src":"5588:23:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6801,"name":"bytes","nodeType":"ElementaryTypeName","src":"5588:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":6810,"initialValue":{"arguments":[{"id":6808,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6794,"src":"5635:4:25","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":6805,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6792,"src":"5623:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}],"id":6804,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5615:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6803,"name":"address","nodeType":"ElementaryTypeName","src":"5615:7:25","typeDescriptions":{}}},"id":6806,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5615:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5630:4:25","memberName":"call","nodeType":"MemberAccess","src":"5615:19:25","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":6809,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5615:25:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"5573:67:25"},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6811,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6800,"src":"5657:7:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6815,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6812,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6802,"src":"5669:10:25","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":6813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5680:6:25","memberName":"length","nodeType":"MemberAccess","src":"5669:17:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6814,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5690:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5669:22:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":6818,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6802,"src":"5706:10:25","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":6820,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5719:4:25","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":{"id":6819,"name":"bool","nodeType":"ElementaryTypeName","src":"5719:4:25","typeDescriptions":{}}}],"id":6821,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"5718:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}],"expression":{"id":6816,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5695:3:25","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":6817,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5699:6:25","memberName":"decode","nodeType":"MemberAccess","src":"5695:10:25","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":6822,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5695:30:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5669:56:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":6824,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5668:58:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5657:69:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"arguments":[{"id":6828,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6792,"src":"5738:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}],"id":6827,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5730:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6826,"name":"address","nodeType":"ElementaryTypeName","src":"5730:7:25","typeDescriptions":{}}},"id":6829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5730:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5745:4:25","memberName":"code","nodeType":"MemberAccess","src":"5730:19:25","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":6831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5750:6:25","memberName":"length","nodeType":"MemberAccess","src":"5730:26:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":6832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5759:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5730:30:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5657:103:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":6798,"id":6835,"nodeType":"Return","src":"5650:110:25"}]},"documentation":{"id":6789,"nodeType":"StructuredDocumentation","src":"4694:490:25","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants).\n This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead."},"id":6837,"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturnBool","nameLocation":"5198:23:25","nodeType":"FunctionDefinition","parameters":{"id":6795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6792,"mutability":"mutable","name":"token","nameLocation":"5229:5:25","nodeType":"VariableDeclaration","scope":6837,"src":"5222:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":6791,"nodeType":"UserDefinedTypeName","pathNode":{"id":6790,"name":"IERC20","nameLocations":["5222:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"5222:6:25"},"referencedDeclaration":6486,"src":"5222:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":6794,"mutability":"mutable","name":"data","nameLocation":"5249:4:25","nodeType":"VariableDeclaration","scope":6837,"src":"5236:17:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6793,"name":"bytes","nodeType":"ElementaryTypeName","src":"5236:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5221:33:25"},"returnParameters":{"id":6798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6797,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6837,"src":"5272:4:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6796,"name":"bool","nodeType":"ElementaryTypeName","src":"5272:4:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5271:6:25"},"scope":6838,"src":"5189:578:25","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":6839,"src":"751:5018:25","usedErrors":[6565,6574],"usedEvents":[]}],"src":"115:5655:25"},"id":25},"@openzeppelin/contracts/utils/Address.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","exportedSymbols":{"Address":[7091]},"id":7092,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6840,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"101:24:26"},{"abstract":false,"baseContracts":[],"canonicalName":"Address","contractDependencies":[],"contractKind":"library","documentation":{"id":6841,"nodeType":"StructuredDocumentation","src":"127:67:26","text":" @dev Collection of functions related to the address type"},"fullyImplemented":true,"id":7091,"linearizedBaseContracts":[7091],"name":"Address","nameLocation":"203:7:26","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":6842,"nodeType":"StructuredDocumentation","src":"217:94:26","text":" @dev The ETH balance of the account is not enough to perform the operation."},"errorSelector":"cd786059","id":6846,"name":"AddressInsufficientBalance","nameLocation":"322:26:26","nodeType":"ErrorDefinition","parameters":{"id":6845,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6844,"mutability":"mutable","name":"account","nameLocation":"357:7:26","nodeType":"VariableDeclaration","scope":6846,"src":"349:15:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6843,"name":"address","nodeType":"ElementaryTypeName","src":"349:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"348:17:26"},"src":"316:50:26"},{"documentation":{"id":6847,"nodeType":"StructuredDocumentation","src":"372:75:26","text":" @dev There's no code at `target` (it is not a contract)."},"errorSelector":"9996b315","id":6851,"name":"AddressEmptyCode","nameLocation":"458:16:26","nodeType":"ErrorDefinition","parameters":{"id":6850,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6849,"mutability":"mutable","name":"target","nameLocation":"483:6:26","nodeType":"VariableDeclaration","scope":6851,"src":"475:14:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6848,"name":"address","nodeType":"ElementaryTypeName","src":"475:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"474:16:26"},"src":"452:39:26"},{"documentation":{"id":6852,"nodeType":"StructuredDocumentation","src":"497:89:26","text":" @dev A call to an address target failed. The target may have reverted."},"errorSelector":"1425ea42","id":6854,"name":"FailedInnerCall","nameLocation":"597:15:26","nodeType":"ErrorDefinition","parameters":{"id":6853,"nodeType":"ParameterList","parameters":[],"src":"612:2:26"},"src":"591:24:26"},{"body":{"id":6894,"nodeType":"Block","src":"1602:260:26","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":6864,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1624:4:26","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$7091","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$7091","typeString":"library Address"}],"id":6863,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1616:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6862,"name":"address","nodeType":"ElementaryTypeName","src":"1616:7:26","typeDescriptions":{}}},"id":6865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1616:13:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1630:7:26","memberName":"balance","nodeType":"MemberAccess","src":"1616:21:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6867,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6859,"src":"1640:6:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1616:30:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6877,"nodeType":"IfStatement","src":"1612:109:26","trueBody":{"id":6876,"nodeType":"Block","src":"1648:73:26","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":6872,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1704:4:26","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$7091","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$7091","typeString":"library Address"}],"id":6871,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1696:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6870,"name":"address","nodeType":"ElementaryTypeName","src":"1696:7:26","typeDescriptions":{}}},"id":6873,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1696:13:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6869,"name":"AddressInsufficientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6846,"src":"1669:26:26","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":6874,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1669:41:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6875,"nodeType":"RevertStatement","src":"1662:48:26"}]}},{"assignments":[6879,null],"declarations":[{"constant":false,"id":6879,"mutability":"mutable","name":"success","nameLocation":"1737:7:26","nodeType":"VariableDeclaration","scope":6894,"src":"1732:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6878,"name":"bool","nodeType":"ElementaryTypeName","src":"1732:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":6886,"initialValue":{"arguments":[{"hexValue":"","id":6884,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1780:2:26","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":6880,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6857,"src":"1750:9:26","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":6881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1760:4:26","memberName":"call","nodeType":"MemberAccess","src":"1750:14:26","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":6883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":6882,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6859,"src":"1772:6:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"1750:29:26","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":6885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1750:33:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"1731:52:26"},{"condition":{"id":6888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1797:8:26","subExpression":{"id":6887,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6879,"src":"1798:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6893,"nodeType":"IfStatement","src":"1793:63:26","trueBody":{"id":6892,"nodeType":"Block","src":"1807:49:26","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6889,"name":"FailedInnerCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6854,"src":"1828:15:26","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6890,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1828:17:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6891,"nodeType":"RevertStatement","src":"1821:24:26"}]}}]},"documentation":{"id":6855,"nodeType":"StructuredDocumentation","src":"621:905:26","text":" @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."},"id":6895,"implemented":true,"kind":"function","modifiers":[],"name":"sendValue","nameLocation":"1540:9:26","nodeType":"FunctionDefinition","parameters":{"id":6860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6857,"mutability":"mutable","name":"recipient","nameLocation":"1566:9:26","nodeType":"VariableDeclaration","scope":6895,"src":"1550:25:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":6856,"name":"address","nodeType":"ElementaryTypeName","src":"1550:15:26","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":6859,"mutability":"mutable","name":"amount","nameLocation":"1585:6:26","nodeType":"VariableDeclaration","scope":6895,"src":"1577:14:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6858,"name":"uint256","nodeType":"ElementaryTypeName","src":"1577:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1549:43:26"},"returnParameters":{"id":6861,"nodeType":"ParameterList","parameters":[],"src":"1602:0:26"},"scope":7091,"src":"1531:331:26","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6911,"nodeType":"Block","src":"2794:62:26","statements":[{"expression":{"arguments":[{"id":6906,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6898,"src":"2833:6:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6907,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6900,"src":"2841:4:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":6908,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2847:1:26","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":6905,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6958,"src":"2811:21:26","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256) returns (bytes memory)"}},"id":6909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2811:38:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":6904,"id":6910,"nodeType":"Return","src":"2804:45:26"}]},"documentation":{"id":6896,"nodeType":"StructuredDocumentation","src":"1868:832:26","text":" @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason or custom error, it is bubbled\n up by this function (like regular Solidity function calls). However, if\n the call reverted with no returned reason, this function reverts with a\n {FailedInnerCall} error.\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert."},"id":6912,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"2714:12:26","nodeType":"FunctionDefinition","parameters":{"id":6901,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6898,"mutability":"mutable","name":"target","nameLocation":"2735:6:26","nodeType":"VariableDeclaration","scope":6912,"src":"2727:14:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6897,"name":"address","nodeType":"ElementaryTypeName","src":"2727:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6900,"mutability":"mutable","name":"data","nameLocation":"2756:4:26","nodeType":"VariableDeclaration","scope":6912,"src":"2743:17:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6899,"name":"bytes","nodeType":"ElementaryTypeName","src":"2743:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2726:35:26"},"returnParameters":{"id":6904,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6903,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6912,"src":"2780:12:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6902,"name":"bytes","nodeType":"ElementaryTypeName","src":"2780:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2779:14:26"},"scope":7091,"src":"2705:151:26","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6957,"nodeType":"Block","src":"3293:279:26","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":6926,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3315:4:26","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$7091","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$7091","typeString":"library Address"}],"id":6925,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3307:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6924,"name":"address","nodeType":"ElementaryTypeName","src":"3307:7:26","typeDescriptions":{}}},"id":6927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3307:13:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3321:7:26","memberName":"balance","nodeType":"MemberAccess","src":"3307:21:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6929,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6919,"src":"3331:5:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3307:29:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6939,"nodeType":"IfStatement","src":"3303:108:26","trueBody":{"id":6938,"nodeType":"Block","src":"3338:73:26","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":6934,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3394:4:26","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$7091","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$7091","typeString":"library Address"}],"id":6933,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3386:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6932,"name":"address","nodeType":"ElementaryTypeName","src":"3386:7:26","typeDescriptions":{}}},"id":6935,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3386:13:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6931,"name":"AddressInsufficientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6846,"src":"3359:26:26","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":6936,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3359:41:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6937,"nodeType":"RevertStatement","src":"3352:48:26"}]}},{"assignments":[6941,6943],"declarations":[{"constant":false,"id":6941,"mutability":"mutable","name":"success","nameLocation":"3426:7:26","nodeType":"VariableDeclaration","scope":6957,"src":"3421:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6940,"name":"bool","nodeType":"ElementaryTypeName","src":"3421:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6943,"mutability":"mutable","name":"returndata","nameLocation":"3448:10:26","nodeType":"VariableDeclaration","scope":6957,"src":"3435:23:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6942,"name":"bytes","nodeType":"ElementaryTypeName","src":"3435:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":6950,"initialValue":{"arguments":[{"id":6948,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6917,"src":"3488:4:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":6944,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6915,"src":"3462:6:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3469:4:26","memberName":"call","nodeType":"MemberAccess","src":"3462:11:26","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":6947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":6946,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6919,"src":"3481:5:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"3462:25:26","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":6949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3462:31:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3420:73:26"},{"expression":{"arguments":[{"id":6952,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6915,"src":"3537:6:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6953,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6941,"src":"3545:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":6954,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6943,"src":"3554:10:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6951,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7050,"src":"3510:26:26","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":6955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3510:55:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":6923,"id":6956,"nodeType":"Return","src":"3503:62:26"}]},"documentation":{"id":6913,"nodeType":"StructuredDocumentation","src":"2862:313:26","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`."},"id":6958,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"3189:21:26","nodeType":"FunctionDefinition","parameters":{"id":6920,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6915,"mutability":"mutable","name":"target","nameLocation":"3219:6:26","nodeType":"VariableDeclaration","scope":6958,"src":"3211:14:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6914,"name":"address","nodeType":"ElementaryTypeName","src":"3211:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6917,"mutability":"mutable","name":"data","nameLocation":"3240:4:26","nodeType":"VariableDeclaration","scope":6958,"src":"3227:17:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6916,"name":"bytes","nodeType":"ElementaryTypeName","src":"3227:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":6919,"mutability":"mutable","name":"value","nameLocation":"3254:5:26","nodeType":"VariableDeclaration","scope":6958,"src":"3246:13:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6918,"name":"uint256","nodeType":"ElementaryTypeName","src":"3246:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3210:50:26"},"returnParameters":{"id":6923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6922,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6958,"src":"3279:12:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6921,"name":"bytes","nodeType":"ElementaryTypeName","src":"3279:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3278:14:26"},"scope":7091,"src":"3180:392:26","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6983,"nodeType":"Block","src":"3811:154:26","statements":[{"assignments":[6969,6971],"declarations":[{"constant":false,"id":6969,"mutability":"mutable","name":"success","nameLocation":"3827:7:26","nodeType":"VariableDeclaration","scope":6983,"src":"3822:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6968,"name":"bool","nodeType":"ElementaryTypeName","src":"3822:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6971,"mutability":"mutable","name":"returndata","nameLocation":"3849:10:26","nodeType":"VariableDeclaration","scope":6983,"src":"3836:23:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6970,"name":"bytes","nodeType":"ElementaryTypeName","src":"3836:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":6976,"initialValue":{"arguments":[{"id":6974,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6963,"src":"3881:4:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":6972,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6961,"src":"3863:6:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3870:10:26","memberName":"staticcall","nodeType":"MemberAccess","src":"3863:17:26","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":6975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3863:23:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3821:65:26"},{"expression":{"arguments":[{"id":6978,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6961,"src":"3930:6:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6979,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6969,"src":"3938:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":6980,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6971,"src":"3947:10:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6977,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7050,"src":"3903:26:26","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":6981,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3903:55:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":6967,"id":6982,"nodeType":"Return","src":"3896:62:26"}]},"documentation":{"id":6959,"nodeType":"StructuredDocumentation","src":"3578:128:26","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call."},"id":6984,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"3720:18:26","nodeType":"FunctionDefinition","parameters":{"id":6964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6961,"mutability":"mutable","name":"target","nameLocation":"3747:6:26","nodeType":"VariableDeclaration","scope":6984,"src":"3739:14:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6960,"name":"address","nodeType":"ElementaryTypeName","src":"3739:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6963,"mutability":"mutable","name":"data","nameLocation":"3768:4:26","nodeType":"VariableDeclaration","scope":6984,"src":"3755:17:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6962,"name":"bytes","nodeType":"ElementaryTypeName","src":"3755:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3738:35:26"},"returnParameters":{"id":6967,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6966,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6984,"src":"3797:12:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6965,"name":"bytes","nodeType":"ElementaryTypeName","src":"3797:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3796:14:26"},"scope":7091,"src":"3711:254:26","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7009,"nodeType":"Block","src":"4203:156:26","statements":[{"assignments":[6995,6997],"declarations":[{"constant":false,"id":6995,"mutability":"mutable","name":"success","nameLocation":"4219:7:26","nodeType":"VariableDeclaration","scope":7009,"src":"4214:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6994,"name":"bool","nodeType":"ElementaryTypeName","src":"4214:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6997,"mutability":"mutable","name":"returndata","nameLocation":"4241:10:26","nodeType":"VariableDeclaration","scope":7009,"src":"4228:23:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6996,"name":"bytes","nodeType":"ElementaryTypeName","src":"4228:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":7002,"initialValue":{"arguments":[{"id":7000,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6989,"src":"4275:4:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":6998,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6987,"src":"4255:6:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4262:12:26","memberName":"delegatecall","nodeType":"MemberAccess","src":"4255:19:26","typeDescriptions":{"typeIdentifier":"t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) returns (bool,bytes memory)"}},"id":7001,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4255:25:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"4213:67:26"},{"expression":{"arguments":[{"id":7004,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6987,"src":"4324:6:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7005,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6995,"src":"4332:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":7006,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6997,"src":"4341:10:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7003,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7050,"src":"4297:26:26","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":7007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4297:55:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":6993,"id":7008,"nodeType":"Return","src":"4290:62:26"}]},"documentation":{"id":6985,"nodeType":"StructuredDocumentation","src":"3971:130:26","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call."},"id":7010,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"4115:20:26","nodeType":"FunctionDefinition","parameters":{"id":6990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6987,"mutability":"mutable","name":"target","nameLocation":"4144:6:26","nodeType":"VariableDeclaration","scope":7010,"src":"4136:14:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6986,"name":"address","nodeType":"ElementaryTypeName","src":"4136:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6989,"mutability":"mutable","name":"data","nameLocation":"4165:4:26","nodeType":"VariableDeclaration","scope":7010,"src":"4152:17:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6988,"name":"bytes","nodeType":"ElementaryTypeName","src":"4152:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4135:35:26"},"returnParameters":{"id":6993,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6992,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7010,"src":"4189:12:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6991,"name":"bytes","nodeType":"ElementaryTypeName","src":"4189:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4188:14:26"},"scope":7091,"src":"4106:253:26","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7049,"nodeType":"Block","src":"4783:424:26","statements":[{"condition":{"id":7023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4797:8:26","subExpression":{"id":7022,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7015,"src":"4798:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7047,"nodeType":"Block","src":"4857:344:26","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7029,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7017,"src":"5045:10:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7030,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5056:6:26","memberName":"length","nodeType":"MemberAccess","src":"5045:17:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":7031,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5066:1:26","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5045:22:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":7033,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7013,"src":"5071:6:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5078:4:26","memberName":"code","nodeType":"MemberAccess","src":"5071:11:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5083:6:26","memberName":"length","nodeType":"MemberAccess","src":"5071:18:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":7036,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5093:1:26","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5071:23:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5045:49:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7044,"nodeType":"IfStatement","src":"5041:119:26","trueBody":{"id":7043,"nodeType":"Block","src":"5096:64:26","statements":[{"errorCall":{"arguments":[{"id":7040,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7013,"src":"5138:6:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7039,"name":"AddressEmptyCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6851,"src":"5121:16:26","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":7041,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5121:24:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7042,"nodeType":"RevertStatement","src":"5114:31:26"}]}},{"expression":{"id":7045,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7017,"src":"5180:10:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":7021,"id":7046,"nodeType":"Return","src":"5173:17:26"}]},"id":7048,"nodeType":"IfStatement","src":"4793:408:26","trueBody":{"id":7028,"nodeType":"Block","src":"4807:44:26","statements":[{"expression":{"arguments":[{"id":7025,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7017,"src":"4829:10:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7024,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7090,"src":"4821:7:26","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":7026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4821:19:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7027,"nodeType":"ExpressionStatement","src":"4821:19:26"}]}}]},"documentation":{"id":7011,"nodeType":"StructuredDocumentation","src":"4365:255:26","text":" @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an\n unsuccessful call."},"id":7050,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResultFromTarget","nameLocation":"4634:26:26","nodeType":"FunctionDefinition","parameters":{"id":7018,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7013,"mutability":"mutable","name":"target","nameLocation":"4678:6:26","nodeType":"VariableDeclaration","scope":7050,"src":"4670:14:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7012,"name":"address","nodeType":"ElementaryTypeName","src":"4670:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7015,"mutability":"mutable","name":"success","nameLocation":"4699:7:26","nodeType":"VariableDeclaration","scope":7050,"src":"4694:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7014,"name":"bool","nodeType":"ElementaryTypeName","src":"4694:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":7017,"mutability":"mutable","name":"returndata","nameLocation":"4729:10:26","nodeType":"VariableDeclaration","scope":7050,"src":"4716:23:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7016,"name":"bytes","nodeType":"ElementaryTypeName","src":"4716:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4660:85:26"},"returnParameters":{"id":7021,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7020,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7050,"src":"4769:12:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7019,"name":"bytes","nodeType":"ElementaryTypeName","src":"4769:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4768:14:26"},"scope":7091,"src":"4625:582:26","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7071,"nodeType":"Block","src":"5509:122:26","statements":[{"condition":{"id":7061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"5523:8:26","subExpression":{"id":7060,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7053,"src":"5524:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7069,"nodeType":"Block","src":"5583:42:26","statements":[{"expression":{"id":7067,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7055,"src":"5604:10:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":7059,"id":7068,"nodeType":"Return","src":"5597:17:26"}]},"id":7070,"nodeType":"IfStatement","src":"5519:106:26","trueBody":{"id":7066,"nodeType":"Block","src":"5533:44:26","statements":[{"expression":{"arguments":[{"id":7063,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7055,"src":"5555:10:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7062,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7090,"src":"5547:7:26","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":7064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5547:19:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7065,"nodeType":"ExpressionStatement","src":"5547:19:26"}]}}]},"documentation":{"id":7051,"nodeType":"StructuredDocumentation","src":"5213:189:26","text":" @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n revert reason or with a default {FailedInnerCall} error."},"id":7072,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResult","nameLocation":"5416:16:26","nodeType":"FunctionDefinition","parameters":{"id":7056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7053,"mutability":"mutable","name":"success","nameLocation":"5438:7:26","nodeType":"VariableDeclaration","scope":7072,"src":"5433:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7052,"name":"bool","nodeType":"ElementaryTypeName","src":"5433:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":7055,"mutability":"mutable","name":"returndata","nameLocation":"5460:10:26","nodeType":"VariableDeclaration","scope":7072,"src":"5447:23:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7054,"name":"bytes","nodeType":"ElementaryTypeName","src":"5447:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5432:39:26"},"returnParameters":{"id":7059,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7058,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7072,"src":"5495:12:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7057,"name":"bytes","nodeType":"ElementaryTypeName","src":"5495:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5494:14:26"},"scope":7091,"src":"5407:224:26","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7089,"nodeType":"Block","src":"5798:461:26","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7078,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7075,"src":"5874:10:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5885:6:26","memberName":"length","nodeType":"MemberAccess","src":"5874:17:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":7080,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5894:1:26","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5874:21:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7087,"nodeType":"Block","src":"6204:49:26","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7084,"name":"FailedInnerCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6854,"src":"6225:15:26","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7085,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6225:17:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7086,"nodeType":"RevertStatement","src":"6218:24:26"}]},"id":7088,"nodeType":"IfStatement","src":"5870:383:26","trueBody":{"id":7083,"nodeType":"Block","src":"5897:301:26","statements":[{"AST":{"nativeSrc":"6055:133:26","nodeType":"YulBlock","src":"6055:133:26","statements":[{"nativeSrc":"6073:40:26","nodeType":"YulVariableDeclaration","src":"6073:40:26","value":{"arguments":[{"name":"returndata","nativeSrc":"6102:10:26","nodeType":"YulIdentifier","src":"6102:10:26"}],"functionName":{"name":"mload","nativeSrc":"6096:5:26","nodeType":"YulIdentifier","src":"6096:5:26"},"nativeSrc":"6096:17:26","nodeType":"YulFunctionCall","src":"6096:17:26"},"variables":[{"name":"returndata_size","nativeSrc":"6077:15:26","nodeType":"YulTypedName","src":"6077:15:26","type":""}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"6141:2:26","nodeType":"YulLiteral","src":"6141:2:26","type":"","value":"32"},{"name":"returndata","nativeSrc":"6145:10:26","nodeType":"YulIdentifier","src":"6145:10:26"}],"functionName":{"name":"add","nativeSrc":"6137:3:26","nodeType":"YulIdentifier","src":"6137:3:26"},"nativeSrc":"6137:19:26","nodeType":"YulFunctionCall","src":"6137:19:26"},{"name":"returndata_size","nativeSrc":"6158:15:26","nodeType":"YulIdentifier","src":"6158:15:26"}],"functionName":{"name":"revert","nativeSrc":"6130:6:26","nodeType":"YulIdentifier","src":"6130:6:26"},"nativeSrc":"6130:44:26","nodeType":"YulFunctionCall","src":"6130:44:26"},"nativeSrc":"6130:44:26","nodeType":"YulExpressionStatement","src":"6130:44:26"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7075,"isOffset":false,"isSlot":false,"src":"6102:10:26","valueSize":1},{"declaration":7075,"isOffset":false,"isSlot":false,"src":"6145:10:26","valueSize":1}],"id":7082,"nodeType":"InlineAssembly","src":"6046:142:26"}]}}]},"documentation":{"id":7073,"nodeType":"StructuredDocumentation","src":"5637:101:26","text":" @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}."},"id":7090,"implemented":true,"kind":"function","modifiers":[],"name":"_revert","nameLocation":"5752:7:26","nodeType":"FunctionDefinition","parameters":{"id":7076,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7075,"mutability":"mutable","name":"returndata","nameLocation":"5773:10:26","nodeType":"VariableDeclaration","scope":7090,"src":"5760:23:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7074,"name":"bytes","nodeType":"ElementaryTypeName","src":"5760:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5759:25:26"},"returnParameters":{"id":7077,"nodeType":"ParameterList","parameters":[],"src":"5798:0:26"},"scope":7091,"src":"5743:516:26","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":7092,"src":"195:6066:26","usedErrors":[6846,6851,6854],"usedEvents":[]}],"src":"101:6161:26"},"id":26},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","exportedSymbols":{"SafeCast":[8846]},"id":8847,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7093,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"192:24:27"},{"abstract":false,"baseContracts":[],"canonicalName":"SafeCast","contractDependencies":[],"contractKind":"library","documentation":{"id":7094,"nodeType":"StructuredDocumentation","src":"218:545:27","text":" @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\n checks.\n Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n easily result in undesired exploitation or bugs, since developers usually\n assume that overflows raise errors. `SafeCast` restores this intuition by\n reverting the transaction when such an operation overflows.\n Using this library instead of the unchecked operations eliminates an entire\n class of bugs, so it's recommended to use it always."},"fullyImplemented":true,"id":8846,"linearizedBaseContracts":[8846],"name":"SafeCast","nameLocation":"772:8:27","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":7095,"nodeType":"StructuredDocumentation","src":"787:68:27","text":" @dev Value doesn't fit in an uint of `bits` size."},"errorSelector":"6dfcc650","id":7101,"name":"SafeCastOverflowedUintDowncast","nameLocation":"866:30:27","nodeType":"ErrorDefinition","parameters":{"id":7100,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7097,"mutability":"mutable","name":"bits","nameLocation":"903:4:27","nodeType":"VariableDeclaration","scope":7101,"src":"897:10:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7096,"name":"uint8","nodeType":"ElementaryTypeName","src":"897:5:27","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":7099,"mutability":"mutable","name":"value","nameLocation":"917:5:27","nodeType":"VariableDeclaration","scope":7101,"src":"909:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7098,"name":"uint256","nodeType":"ElementaryTypeName","src":"909:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"896:27:27"},"src":"860:64:27"},{"documentation":{"id":7102,"nodeType":"StructuredDocumentation","src":"930:75:27","text":" @dev An int value doesn't fit in an uint of `bits` size."},"errorSelector":"a8ce4432","id":7106,"name":"SafeCastOverflowedIntToUint","nameLocation":"1016:27:27","nodeType":"ErrorDefinition","parameters":{"id":7105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7104,"mutability":"mutable","name":"value","nameLocation":"1051:5:27","nodeType":"VariableDeclaration","scope":7106,"src":"1044:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":7103,"name":"int256","nodeType":"ElementaryTypeName","src":"1044:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1043:14:27"},"src":"1010:48:27"},{"documentation":{"id":7107,"nodeType":"StructuredDocumentation","src":"1064:67:27","text":" @dev Value doesn't fit in an int of `bits` size."},"errorSelector":"327269a7","id":7113,"name":"SafeCastOverflowedIntDowncast","nameLocation":"1142:29:27","nodeType":"ErrorDefinition","parameters":{"id":7112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7109,"mutability":"mutable","name":"bits","nameLocation":"1178:4:27","nodeType":"VariableDeclaration","scope":7113,"src":"1172:10:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7108,"name":"uint8","nodeType":"ElementaryTypeName","src":"1172:5:27","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":7111,"mutability":"mutable","name":"value","nameLocation":"1191:5:27","nodeType":"VariableDeclaration","scope":7113,"src":"1184:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":7110,"name":"int256","nodeType":"ElementaryTypeName","src":"1184:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1171:26:27"},"src":"1136:62:27"},{"documentation":{"id":7114,"nodeType":"StructuredDocumentation","src":"1204:75:27","text":" @dev An uint value doesn't fit in an int of `bits` size."},"errorSelector":"24775e06","id":7118,"name":"SafeCastOverflowedUintToInt","nameLocation":"1290:27:27","nodeType":"ErrorDefinition","parameters":{"id":7117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7116,"mutability":"mutable","name":"value","nameLocation":"1326:5:27","nodeType":"VariableDeclaration","scope":7118,"src":"1318:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7115,"name":"uint256","nodeType":"ElementaryTypeName","src":"1318:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1317:15:27"},"src":"1284:49:27"},{"body":{"id":7145,"nodeType":"Block","src":"1690:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7126,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7121,"src":"1704:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7129,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1717:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"},"typeName":{"id":7128,"name":"uint248","nodeType":"ElementaryTypeName","src":"1717:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"}],"id":7127,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"1712:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7130,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1712:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint248","typeString":"type(uint248)"}},"id":7131,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1726:3:27","memberName":"max","nodeType":"MemberAccess","src":"1712:17:27","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"src":"1704:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7139,"nodeType":"IfStatement","src":"1700:105:27","trueBody":{"id":7138,"nodeType":"Block","src":"1731:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"323438","id":7134,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1783:3:27","typeDescriptions":{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},"value":"248"},{"id":7135,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7121,"src":"1788:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7133,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"1752:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7136,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1752:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7137,"nodeType":"RevertStatement","src":"1745:49:27"}]}},{"expression":{"arguments":[{"id":7142,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7121,"src":"1829:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7141,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1821:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"},"typeName":{"id":7140,"name":"uint248","nodeType":"ElementaryTypeName","src":"1821:7:27","typeDescriptions":{}}},"id":7143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1821:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"functionReturnParameters":7125,"id":7144,"nodeType":"Return","src":"1814:21:27"}]},"documentation":{"id":7119,"nodeType":"StructuredDocumentation","src":"1339:280:27","text":" @dev Returns the downcasted uint248 from uint256, reverting on\n overflow (when the input is greater than largest uint248).\n Counterpart to Solidity's `uint248` operator.\n Requirements:\n - input must fit into 248 bits"},"id":7146,"implemented":true,"kind":"function","modifiers":[],"name":"toUint248","nameLocation":"1633:9:27","nodeType":"FunctionDefinition","parameters":{"id":7122,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7121,"mutability":"mutable","name":"value","nameLocation":"1651:5:27","nodeType":"VariableDeclaration","scope":7146,"src":"1643:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7120,"name":"uint256","nodeType":"ElementaryTypeName","src":"1643:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1642:15:27"},"returnParameters":{"id":7125,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7124,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7146,"src":"1681:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"},"typeName":{"id":7123,"name":"uint248","nodeType":"ElementaryTypeName","src":"1681:7:27","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"visibility":"internal"}],"src":"1680:9:27"},"scope":8846,"src":"1624:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7173,"nodeType":"Block","src":"2199:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7154,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7149,"src":"2213:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7157,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2226:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"},"typeName":{"id":7156,"name":"uint240","nodeType":"ElementaryTypeName","src":"2226:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"}],"id":7155,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2221:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7158,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2221:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint240","typeString":"type(uint240)"}},"id":7159,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2235:3:27","memberName":"max","nodeType":"MemberAccess","src":"2221:17:27","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"src":"2213:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7167,"nodeType":"IfStatement","src":"2209:105:27","trueBody":{"id":7166,"nodeType":"Block","src":"2240:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"323430","id":7162,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2292:3:27","typeDescriptions":{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},"value":"240"},{"id":7163,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7149,"src":"2297:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7161,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"2261:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2261:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7165,"nodeType":"RevertStatement","src":"2254:49:27"}]}},{"expression":{"arguments":[{"id":7170,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7149,"src":"2338:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7169,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2330:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"},"typeName":{"id":7168,"name":"uint240","nodeType":"ElementaryTypeName","src":"2330:7:27","typeDescriptions":{}}},"id":7171,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2330:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"functionReturnParameters":7153,"id":7172,"nodeType":"Return","src":"2323:21:27"}]},"documentation":{"id":7147,"nodeType":"StructuredDocumentation","src":"1848:280:27","text":" @dev Returns the downcasted uint240 from uint256, reverting on\n overflow (when the input is greater than largest uint240).\n Counterpart to Solidity's `uint240` operator.\n Requirements:\n - input must fit into 240 bits"},"id":7174,"implemented":true,"kind":"function","modifiers":[],"name":"toUint240","nameLocation":"2142:9:27","nodeType":"FunctionDefinition","parameters":{"id":7150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7149,"mutability":"mutable","name":"value","nameLocation":"2160:5:27","nodeType":"VariableDeclaration","scope":7174,"src":"2152:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7148,"name":"uint256","nodeType":"ElementaryTypeName","src":"2152:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2151:15:27"},"returnParameters":{"id":7153,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7152,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7174,"src":"2190:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"},"typeName":{"id":7151,"name":"uint240","nodeType":"ElementaryTypeName","src":"2190:7:27","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"visibility":"internal"}],"src":"2189:9:27"},"scope":8846,"src":"2133:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7201,"nodeType":"Block","src":"2708:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7182,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7177,"src":"2722:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7185,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2735:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"},"typeName":{"id":7184,"name":"uint232","nodeType":"ElementaryTypeName","src":"2735:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"}],"id":7183,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2730:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7186,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2730:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint232","typeString":"type(uint232)"}},"id":7187,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2744:3:27","memberName":"max","nodeType":"MemberAccess","src":"2730:17:27","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"src":"2722:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7195,"nodeType":"IfStatement","src":"2718:105:27","trueBody":{"id":7194,"nodeType":"Block","src":"2749:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"323332","id":7190,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2801:3:27","typeDescriptions":{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},"value":"232"},{"id":7191,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7177,"src":"2806:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7189,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"2770:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2770:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7193,"nodeType":"RevertStatement","src":"2763:49:27"}]}},{"expression":{"arguments":[{"id":7198,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7177,"src":"2847:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7197,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2839:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"},"typeName":{"id":7196,"name":"uint232","nodeType":"ElementaryTypeName","src":"2839:7:27","typeDescriptions":{}}},"id":7199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2839:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"functionReturnParameters":7181,"id":7200,"nodeType":"Return","src":"2832:21:27"}]},"documentation":{"id":7175,"nodeType":"StructuredDocumentation","src":"2357:280:27","text":" @dev Returns the downcasted uint232 from uint256, reverting on\n overflow (when the input is greater than largest uint232).\n Counterpart to Solidity's `uint232` operator.\n Requirements:\n - input must fit into 232 bits"},"id":7202,"implemented":true,"kind":"function","modifiers":[],"name":"toUint232","nameLocation":"2651:9:27","nodeType":"FunctionDefinition","parameters":{"id":7178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7177,"mutability":"mutable","name":"value","nameLocation":"2669:5:27","nodeType":"VariableDeclaration","scope":7202,"src":"2661:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7176,"name":"uint256","nodeType":"ElementaryTypeName","src":"2661:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2660:15:27"},"returnParameters":{"id":7181,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7180,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7202,"src":"2699:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"},"typeName":{"id":7179,"name":"uint232","nodeType":"ElementaryTypeName","src":"2699:7:27","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"visibility":"internal"}],"src":"2698:9:27"},"scope":8846,"src":"2642:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7229,"nodeType":"Block","src":"3217:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7210,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7205,"src":"3231:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7213,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3244:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":7212,"name":"uint224","nodeType":"ElementaryTypeName","src":"3244:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"}],"id":7211,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3239:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7214,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3239:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint224","typeString":"type(uint224)"}},"id":7215,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3253:3:27","memberName":"max","nodeType":"MemberAccess","src":"3239:17:27","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"src":"3231:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7223,"nodeType":"IfStatement","src":"3227:105:27","trueBody":{"id":7222,"nodeType":"Block","src":"3258:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"323234","id":7218,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3310:3:27","typeDescriptions":{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},"value":"224"},{"id":7219,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7205,"src":"3315:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7217,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"3279:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3279:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7221,"nodeType":"RevertStatement","src":"3272:49:27"}]}},{"expression":{"arguments":[{"id":7226,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7205,"src":"3356:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7225,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3348:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":7224,"name":"uint224","nodeType":"ElementaryTypeName","src":"3348:7:27","typeDescriptions":{}}},"id":7227,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3348:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"functionReturnParameters":7209,"id":7228,"nodeType":"Return","src":"3341:21:27"}]},"documentation":{"id":7203,"nodeType":"StructuredDocumentation","src":"2866:280:27","text":" @dev Returns the downcasted uint224 from uint256, reverting on\n overflow (when the input is greater than largest uint224).\n Counterpart to Solidity's `uint224` operator.\n Requirements:\n - input must fit into 224 bits"},"id":7230,"implemented":true,"kind":"function","modifiers":[],"name":"toUint224","nameLocation":"3160:9:27","nodeType":"FunctionDefinition","parameters":{"id":7206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7205,"mutability":"mutable","name":"value","nameLocation":"3178:5:27","nodeType":"VariableDeclaration","scope":7230,"src":"3170:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7204,"name":"uint256","nodeType":"ElementaryTypeName","src":"3170:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3169:15:27"},"returnParameters":{"id":7209,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7208,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7230,"src":"3208:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"},"typeName":{"id":7207,"name":"uint224","nodeType":"ElementaryTypeName","src":"3208:7:27","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"visibility":"internal"}],"src":"3207:9:27"},"scope":8846,"src":"3151:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7257,"nodeType":"Block","src":"3726:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7238,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7233,"src":"3740:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7241,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3753:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"},"typeName":{"id":7240,"name":"uint216","nodeType":"ElementaryTypeName","src":"3753:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"}],"id":7239,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3748:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7242,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3748:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint216","typeString":"type(uint216)"}},"id":7243,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3762:3:27","memberName":"max","nodeType":"MemberAccess","src":"3748:17:27","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"src":"3740:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7251,"nodeType":"IfStatement","src":"3736:105:27","trueBody":{"id":7250,"nodeType":"Block","src":"3767:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"323136","id":7246,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3819:3:27","typeDescriptions":{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},"value":"216"},{"id":7247,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7233,"src":"3824:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7245,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"3788:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7248,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3788:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7249,"nodeType":"RevertStatement","src":"3781:49:27"}]}},{"expression":{"arguments":[{"id":7254,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7233,"src":"3865:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7253,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3857:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"},"typeName":{"id":7252,"name":"uint216","nodeType":"ElementaryTypeName","src":"3857:7:27","typeDescriptions":{}}},"id":7255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3857:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"functionReturnParameters":7237,"id":7256,"nodeType":"Return","src":"3850:21:27"}]},"documentation":{"id":7231,"nodeType":"StructuredDocumentation","src":"3375:280:27","text":" @dev Returns the downcasted uint216 from uint256, reverting on\n overflow (when the input is greater than largest uint216).\n Counterpart to Solidity's `uint216` operator.\n Requirements:\n - input must fit into 216 bits"},"id":7258,"implemented":true,"kind":"function","modifiers":[],"name":"toUint216","nameLocation":"3669:9:27","nodeType":"FunctionDefinition","parameters":{"id":7234,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7233,"mutability":"mutable","name":"value","nameLocation":"3687:5:27","nodeType":"VariableDeclaration","scope":7258,"src":"3679:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7232,"name":"uint256","nodeType":"ElementaryTypeName","src":"3679:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3678:15:27"},"returnParameters":{"id":7237,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7236,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7258,"src":"3717:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"},"typeName":{"id":7235,"name":"uint216","nodeType":"ElementaryTypeName","src":"3717:7:27","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"visibility":"internal"}],"src":"3716:9:27"},"scope":8846,"src":"3660:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7285,"nodeType":"Block","src":"4235:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7266,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7261,"src":"4249:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7269,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4262:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"},"typeName":{"id":7268,"name":"uint208","nodeType":"ElementaryTypeName","src":"4262:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"}],"id":7267,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4257:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7270,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4257:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint208","typeString":"type(uint208)"}},"id":7271,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4271:3:27","memberName":"max","nodeType":"MemberAccess","src":"4257:17:27","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"src":"4249:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7279,"nodeType":"IfStatement","src":"4245:105:27","trueBody":{"id":7278,"nodeType":"Block","src":"4276:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"323038","id":7274,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4328:3:27","typeDescriptions":{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},"value":"208"},{"id":7275,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7261,"src":"4333:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7273,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"4297:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7276,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4297:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7277,"nodeType":"RevertStatement","src":"4290:49:27"}]}},{"expression":{"arguments":[{"id":7282,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7261,"src":"4374:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7281,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4366:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"},"typeName":{"id":7280,"name":"uint208","nodeType":"ElementaryTypeName","src":"4366:7:27","typeDescriptions":{}}},"id":7283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4366:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"functionReturnParameters":7265,"id":7284,"nodeType":"Return","src":"4359:21:27"}]},"documentation":{"id":7259,"nodeType":"StructuredDocumentation","src":"3884:280:27","text":" @dev Returns the downcasted uint208 from uint256, reverting on\n overflow (when the input is greater than largest uint208).\n Counterpart to Solidity's `uint208` operator.\n Requirements:\n - input must fit into 208 bits"},"id":7286,"implemented":true,"kind":"function","modifiers":[],"name":"toUint208","nameLocation":"4178:9:27","nodeType":"FunctionDefinition","parameters":{"id":7262,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7261,"mutability":"mutable","name":"value","nameLocation":"4196:5:27","nodeType":"VariableDeclaration","scope":7286,"src":"4188:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7260,"name":"uint256","nodeType":"ElementaryTypeName","src":"4188:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4187:15:27"},"returnParameters":{"id":7265,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7264,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7286,"src":"4226:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"},"typeName":{"id":7263,"name":"uint208","nodeType":"ElementaryTypeName","src":"4226:7:27","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"visibility":"internal"}],"src":"4225:9:27"},"scope":8846,"src":"4169:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7313,"nodeType":"Block","src":"4744:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7294,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7289,"src":"4758:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7297,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4771:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"},"typeName":{"id":7296,"name":"uint200","nodeType":"ElementaryTypeName","src":"4771:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"}],"id":7295,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4766:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7298,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4766:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint200","typeString":"type(uint200)"}},"id":7299,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4780:3:27","memberName":"max","nodeType":"MemberAccess","src":"4766:17:27","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"src":"4758:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7307,"nodeType":"IfStatement","src":"4754:105:27","trueBody":{"id":7306,"nodeType":"Block","src":"4785:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"323030","id":7302,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4837:3:27","typeDescriptions":{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},"value":"200"},{"id":7303,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7289,"src":"4842:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7301,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"4806:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4806:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7305,"nodeType":"RevertStatement","src":"4799:49:27"}]}},{"expression":{"arguments":[{"id":7310,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7289,"src":"4883:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7309,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4875:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"},"typeName":{"id":7308,"name":"uint200","nodeType":"ElementaryTypeName","src":"4875:7:27","typeDescriptions":{}}},"id":7311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4875:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"functionReturnParameters":7293,"id":7312,"nodeType":"Return","src":"4868:21:27"}]},"documentation":{"id":7287,"nodeType":"StructuredDocumentation","src":"4393:280:27","text":" @dev Returns the downcasted uint200 from uint256, reverting on\n overflow (when the input is greater than largest uint200).\n Counterpart to Solidity's `uint200` operator.\n Requirements:\n - input must fit into 200 bits"},"id":7314,"implemented":true,"kind":"function","modifiers":[],"name":"toUint200","nameLocation":"4687:9:27","nodeType":"FunctionDefinition","parameters":{"id":7290,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7289,"mutability":"mutable","name":"value","nameLocation":"4705:5:27","nodeType":"VariableDeclaration","scope":7314,"src":"4697:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7288,"name":"uint256","nodeType":"ElementaryTypeName","src":"4697:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4696:15:27"},"returnParameters":{"id":7293,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7292,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7314,"src":"4735:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"},"typeName":{"id":7291,"name":"uint200","nodeType":"ElementaryTypeName","src":"4735:7:27","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"visibility":"internal"}],"src":"4734:9:27"},"scope":8846,"src":"4678:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7341,"nodeType":"Block","src":"5253:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7322,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7317,"src":"5267:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7325,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5280:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"},"typeName":{"id":7324,"name":"uint192","nodeType":"ElementaryTypeName","src":"5280:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"}],"id":7323,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5275:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7326,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5275:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint192","typeString":"type(uint192)"}},"id":7327,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5289:3:27","memberName":"max","nodeType":"MemberAccess","src":"5275:17:27","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"src":"5267:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7335,"nodeType":"IfStatement","src":"5263:105:27","trueBody":{"id":7334,"nodeType":"Block","src":"5294:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313932","id":7330,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5346:3:27","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},{"id":7331,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7317,"src":"5351:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7329,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"5315:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7332,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5315:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7333,"nodeType":"RevertStatement","src":"5308:49:27"}]}},{"expression":{"arguments":[{"id":7338,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7317,"src":"5392:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7337,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5384:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"},"typeName":{"id":7336,"name":"uint192","nodeType":"ElementaryTypeName","src":"5384:7:27","typeDescriptions":{}}},"id":7339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5384:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"functionReturnParameters":7321,"id":7340,"nodeType":"Return","src":"5377:21:27"}]},"documentation":{"id":7315,"nodeType":"StructuredDocumentation","src":"4902:280:27","text":" @dev Returns the downcasted uint192 from uint256, reverting on\n overflow (when the input is greater than largest uint192).\n Counterpart to Solidity's `uint192` operator.\n Requirements:\n - input must fit into 192 bits"},"id":7342,"implemented":true,"kind":"function","modifiers":[],"name":"toUint192","nameLocation":"5196:9:27","nodeType":"FunctionDefinition","parameters":{"id":7318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7317,"mutability":"mutable","name":"value","nameLocation":"5214:5:27","nodeType":"VariableDeclaration","scope":7342,"src":"5206:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7316,"name":"uint256","nodeType":"ElementaryTypeName","src":"5206:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5205:15:27"},"returnParameters":{"id":7321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7320,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7342,"src":"5244:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"},"typeName":{"id":7319,"name":"uint192","nodeType":"ElementaryTypeName","src":"5244:7:27","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"visibility":"internal"}],"src":"5243:9:27"},"scope":8846,"src":"5187:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7369,"nodeType":"Block","src":"5762:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7350,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7345,"src":"5776:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7353,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5789:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"},"typeName":{"id":7352,"name":"uint184","nodeType":"ElementaryTypeName","src":"5789:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"}],"id":7351,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5784:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7354,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5784:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint184","typeString":"type(uint184)"}},"id":7355,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5798:3:27","memberName":"max","nodeType":"MemberAccess","src":"5784:17:27","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"src":"5776:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7363,"nodeType":"IfStatement","src":"5772:105:27","trueBody":{"id":7362,"nodeType":"Block","src":"5803:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313834","id":7358,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5855:3:27","typeDescriptions":{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},"value":"184"},{"id":7359,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7345,"src":"5860:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7357,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"5824:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7360,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5824:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7361,"nodeType":"RevertStatement","src":"5817:49:27"}]}},{"expression":{"arguments":[{"id":7366,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7345,"src":"5901:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7365,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5893:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"},"typeName":{"id":7364,"name":"uint184","nodeType":"ElementaryTypeName","src":"5893:7:27","typeDescriptions":{}}},"id":7367,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5893:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"functionReturnParameters":7349,"id":7368,"nodeType":"Return","src":"5886:21:27"}]},"documentation":{"id":7343,"nodeType":"StructuredDocumentation","src":"5411:280:27","text":" @dev Returns the downcasted uint184 from uint256, reverting on\n overflow (when the input is greater than largest uint184).\n Counterpart to Solidity's `uint184` operator.\n Requirements:\n - input must fit into 184 bits"},"id":7370,"implemented":true,"kind":"function","modifiers":[],"name":"toUint184","nameLocation":"5705:9:27","nodeType":"FunctionDefinition","parameters":{"id":7346,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7345,"mutability":"mutable","name":"value","nameLocation":"5723:5:27","nodeType":"VariableDeclaration","scope":7370,"src":"5715:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7344,"name":"uint256","nodeType":"ElementaryTypeName","src":"5715:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5714:15:27"},"returnParameters":{"id":7349,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7348,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7370,"src":"5753:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"},"typeName":{"id":7347,"name":"uint184","nodeType":"ElementaryTypeName","src":"5753:7:27","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"visibility":"internal"}],"src":"5752:9:27"},"scope":8846,"src":"5696:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7397,"nodeType":"Block","src":"6271:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7378,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7373,"src":"6285:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7381,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6298:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"},"typeName":{"id":7380,"name":"uint176","nodeType":"ElementaryTypeName","src":"6298:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"}],"id":7379,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6293:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7382,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6293:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint176","typeString":"type(uint176)"}},"id":7383,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6307:3:27","memberName":"max","nodeType":"MemberAccess","src":"6293:17:27","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"src":"6285:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7391,"nodeType":"IfStatement","src":"6281:105:27","trueBody":{"id":7390,"nodeType":"Block","src":"6312:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313736","id":7386,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6364:3:27","typeDescriptions":{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},"value":"176"},{"id":7387,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7373,"src":"6369:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7385,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"6333:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7388,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6333:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7389,"nodeType":"RevertStatement","src":"6326:49:27"}]}},{"expression":{"arguments":[{"id":7394,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7373,"src":"6410:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7393,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6402:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"},"typeName":{"id":7392,"name":"uint176","nodeType":"ElementaryTypeName","src":"6402:7:27","typeDescriptions":{}}},"id":7395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6402:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"functionReturnParameters":7377,"id":7396,"nodeType":"Return","src":"6395:21:27"}]},"documentation":{"id":7371,"nodeType":"StructuredDocumentation","src":"5920:280:27","text":" @dev Returns the downcasted uint176 from uint256, reverting on\n overflow (when the input is greater than largest uint176).\n Counterpart to Solidity's `uint176` operator.\n Requirements:\n - input must fit into 176 bits"},"id":7398,"implemented":true,"kind":"function","modifiers":[],"name":"toUint176","nameLocation":"6214:9:27","nodeType":"FunctionDefinition","parameters":{"id":7374,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7373,"mutability":"mutable","name":"value","nameLocation":"6232:5:27","nodeType":"VariableDeclaration","scope":7398,"src":"6224:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7372,"name":"uint256","nodeType":"ElementaryTypeName","src":"6224:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6223:15:27"},"returnParameters":{"id":7377,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7376,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7398,"src":"6262:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"},"typeName":{"id":7375,"name":"uint176","nodeType":"ElementaryTypeName","src":"6262:7:27","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"visibility":"internal"}],"src":"6261:9:27"},"scope":8846,"src":"6205:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7425,"nodeType":"Block","src":"6780:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7406,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7401,"src":"6794:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7409,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6807:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"},"typeName":{"id":7408,"name":"uint168","nodeType":"ElementaryTypeName","src":"6807:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"}],"id":7407,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6802:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7410,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6802:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint168","typeString":"type(uint168)"}},"id":7411,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6816:3:27","memberName":"max","nodeType":"MemberAccess","src":"6802:17:27","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"src":"6794:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7419,"nodeType":"IfStatement","src":"6790:105:27","trueBody":{"id":7418,"nodeType":"Block","src":"6821:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313638","id":7414,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6873:3:27","typeDescriptions":{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},"value":"168"},{"id":7415,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7401,"src":"6878:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7413,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"6842:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6842:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7417,"nodeType":"RevertStatement","src":"6835:49:27"}]}},{"expression":{"arguments":[{"id":7422,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7401,"src":"6919:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7421,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6911:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"},"typeName":{"id":7420,"name":"uint168","nodeType":"ElementaryTypeName","src":"6911:7:27","typeDescriptions":{}}},"id":7423,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6911:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"functionReturnParameters":7405,"id":7424,"nodeType":"Return","src":"6904:21:27"}]},"documentation":{"id":7399,"nodeType":"StructuredDocumentation","src":"6429:280:27","text":" @dev Returns the downcasted uint168 from uint256, reverting on\n overflow (when the input is greater than largest uint168).\n Counterpart to Solidity's `uint168` operator.\n Requirements:\n - input must fit into 168 bits"},"id":7426,"implemented":true,"kind":"function","modifiers":[],"name":"toUint168","nameLocation":"6723:9:27","nodeType":"FunctionDefinition","parameters":{"id":7402,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7401,"mutability":"mutable","name":"value","nameLocation":"6741:5:27","nodeType":"VariableDeclaration","scope":7426,"src":"6733:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7400,"name":"uint256","nodeType":"ElementaryTypeName","src":"6733:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6732:15:27"},"returnParameters":{"id":7405,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7404,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7426,"src":"6771:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"},"typeName":{"id":7403,"name":"uint168","nodeType":"ElementaryTypeName","src":"6771:7:27","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"visibility":"internal"}],"src":"6770:9:27"},"scope":8846,"src":"6714:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7453,"nodeType":"Block","src":"7289:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7434,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7429,"src":"7303:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7437,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7316:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":7436,"name":"uint160","nodeType":"ElementaryTypeName","src":"7316:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"}],"id":7435,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"7311:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7438,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7311:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint160","typeString":"type(uint160)"}},"id":7439,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7325:3:27","memberName":"max","nodeType":"MemberAccess","src":"7311:17:27","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"src":"7303:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7447,"nodeType":"IfStatement","src":"7299:105:27","trueBody":{"id":7446,"nodeType":"Block","src":"7330:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313630","id":7442,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7382:3:27","typeDescriptions":{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},"value":"160"},{"id":7443,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7429,"src":"7387:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7441,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"7351:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7351:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7445,"nodeType":"RevertStatement","src":"7344:49:27"}]}},{"expression":{"arguments":[{"id":7450,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7429,"src":"7428:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7449,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7420:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":7448,"name":"uint160","nodeType":"ElementaryTypeName","src":"7420:7:27","typeDescriptions":{}}},"id":7451,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7420:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"functionReturnParameters":7433,"id":7452,"nodeType":"Return","src":"7413:21:27"}]},"documentation":{"id":7427,"nodeType":"StructuredDocumentation","src":"6938:280:27","text":" @dev Returns the downcasted uint160 from uint256, reverting on\n overflow (when the input is greater than largest uint160).\n Counterpart to Solidity's `uint160` operator.\n Requirements:\n - input must fit into 160 bits"},"id":7454,"implemented":true,"kind":"function","modifiers":[],"name":"toUint160","nameLocation":"7232:9:27","nodeType":"FunctionDefinition","parameters":{"id":7430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7429,"mutability":"mutable","name":"value","nameLocation":"7250:5:27","nodeType":"VariableDeclaration","scope":7454,"src":"7242:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7428,"name":"uint256","nodeType":"ElementaryTypeName","src":"7242:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7241:15:27"},"returnParameters":{"id":7433,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7432,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7454,"src":"7280:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"},"typeName":{"id":7431,"name":"uint160","nodeType":"ElementaryTypeName","src":"7280:7:27","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"visibility":"internal"}],"src":"7279:9:27"},"scope":8846,"src":"7223:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7481,"nodeType":"Block","src":"7798:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7462,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7457,"src":"7812:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7465,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7825:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"},"typeName":{"id":7464,"name":"uint152","nodeType":"ElementaryTypeName","src":"7825:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"}],"id":7463,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"7820:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7466,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7820:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint152","typeString":"type(uint152)"}},"id":7467,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7834:3:27","memberName":"max","nodeType":"MemberAccess","src":"7820:17:27","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"src":"7812:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7475,"nodeType":"IfStatement","src":"7808:105:27","trueBody":{"id":7474,"nodeType":"Block","src":"7839:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313532","id":7470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7891:3:27","typeDescriptions":{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},"value":"152"},{"id":7471,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7457,"src":"7896:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7469,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"7860:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7860:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7473,"nodeType":"RevertStatement","src":"7853:49:27"}]}},{"expression":{"arguments":[{"id":7478,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7457,"src":"7937:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7477,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7929:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"},"typeName":{"id":7476,"name":"uint152","nodeType":"ElementaryTypeName","src":"7929:7:27","typeDescriptions":{}}},"id":7479,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7929:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"functionReturnParameters":7461,"id":7480,"nodeType":"Return","src":"7922:21:27"}]},"documentation":{"id":7455,"nodeType":"StructuredDocumentation","src":"7447:280:27","text":" @dev Returns the downcasted uint152 from uint256, reverting on\n overflow (when the input is greater than largest uint152).\n Counterpart to Solidity's `uint152` operator.\n Requirements:\n - input must fit into 152 bits"},"id":7482,"implemented":true,"kind":"function","modifiers":[],"name":"toUint152","nameLocation":"7741:9:27","nodeType":"FunctionDefinition","parameters":{"id":7458,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7457,"mutability":"mutable","name":"value","nameLocation":"7759:5:27","nodeType":"VariableDeclaration","scope":7482,"src":"7751:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7456,"name":"uint256","nodeType":"ElementaryTypeName","src":"7751:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7750:15:27"},"returnParameters":{"id":7461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7460,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7482,"src":"7789:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"},"typeName":{"id":7459,"name":"uint152","nodeType":"ElementaryTypeName","src":"7789:7:27","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"visibility":"internal"}],"src":"7788:9:27"},"scope":8846,"src":"7732:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7509,"nodeType":"Block","src":"8307:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7490,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7485,"src":"8321:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7493,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8334:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"},"typeName":{"id":7492,"name":"uint144","nodeType":"ElementaryTypeName","src":"8334:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"}],"id":7491,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8329:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7494,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8329:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint144","typeString":"type(uint144)"}},"id":7495,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8343:3:27","memberName":"max","nodeType":"MemberAccess","src":"8329:17:27","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"src":"8321:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7503,"nodeType":"IfStatement","src":"8317:105:27","trueBody":{"id":7502,"nodeType":"Block","src":"8348:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313434","id":7498,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8400:3:27","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},"value":"144"},{"id":7499,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7485,"src":"8405:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7497,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"8369:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7500,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8369:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7501,"nodeType":"RevertStatement","src":"8362:49:27"}]}},{"expression":{"arguments":[{"id":7506,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7485,"src":"8446:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7505,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8438:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"},"typeName":{"id":7504,"name":"uint144","nodeType":"ElementaryTypeName","src":"8438:7:27","typeDescriptions":{}}},"id":7507,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8438:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"functionReturnParameters":7489,"id":7508,"nodeType":"Return","src":"8431:21:27"}]},"documentation":{"id":7483,"nodeType":"StructuredDocumentation","src":"7956:280:27","text":" @dev Returns the downcasted uint144 from uint256, reverting on\n overflow (when the input is greater than largest uint144).\n Counterpart to Solidity's `uint144` operator.\n Requirements:\n - input must fit into 144 bits"},"id":7510,"implemented":true,"kind":"function","modifiers":[],"name":"toUint144","nameLocation":"8250:9:27","nodeType":"FunctionDefinition","parameters":{"id":7486,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7485,"mutability":"mutable","name":"value","nameLocation":"8268:5:27","nodeType":"VariableDeclaration","scope":7510,"src":"8260:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7484,"name":"uint256","nodeType":"ElementaryTypeName","src":"8260:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8259:15:27"},"returnParameters":{"id":7489,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7488,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7510,"src":"8298:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"},"typeName":{"id":7487,"name":"uint144","nodeType":"ElementaryTypeName","src":"8298:7:27","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"visibility":"internal"}],"src":"8297:9:27"},"scope":8846,"src":"8241:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7537,"nodeType":"Block","src":"8816:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7518,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7513,"src":"8830:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7521,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8843:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"},"typeName":{"id":7520,"name":"uint136","nodeType":"ElementaryTypeName","src":"8843:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"}],"id":7519,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8838:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7522,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8838:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint136","typeString":"type(uint136)"}},"id":7523,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8852:3:27","memberName":"max","nodeType":"MemberAccess","src":"8838:17:27","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"src":"8830:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7531,"nodeType":"IfStatement","src":"8826:105:27","trueBody":{"id":7530,"nodeType":"Block","src":"8857:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313336","id":7526,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8909:3:27","typeDescriptions":{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},"value":"136"},{"id":7527,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7513,"src":"8914:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7525,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"8878:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8878:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7529,"nodeType":"RevertStatement","src":"8871:49:27"}]}},{"expression":{"arguments":[{"id":7534,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7513,"src":"8955:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7533,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8947:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"},"typeName":{"id":7532,"name":"uint136","nodeType":"ElementaryTypeName","src":"8947:7:27","typeDescriptions":{}}},"id":7535,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8947:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"functionReturnParameters":7517,"id":7536,"nodeType":"Return","src":"8940:21:27"}]},"documentation":{"id":7511,"nodeType":"StructuredDocumentation","src":"8465:280:27","text":" @dev Returns the downcasted uint136 from uint256, reverting on\n overflow (when the input is greater than largest uint136).\n Counterpart to Solidity's `uint136` operator.\n Requirements:\n - input must fit into 136 bits"},"id":7538,"implemented":true,"kind":"function","modifiers":[],"name":"toUint136","nameLocation":"8759:9:27","nodeType":"FunctionDefinition","parameters":{"id":7514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7513,"mutability":"mutable","name":"value","nameLocation":"8777:5:27","nodeType":"VariableDeclaration","scope":7538,"src":"8769:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7512,"name":"uint256","nodeType":"ElementaryTypeName","src":"8769:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8768:15:27"},"returnParameters":{"id":7517,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7516,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7538,"src":"8807:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"},"typeName":{"id":7515,"name":"uint136","nodeType":"ElementaryTypeName","src":"8807:7:27","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"visibility":"internal"}],"src":"8806:9:27"},"scope":8846,"src":"8750:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7565,"nodeType":"Block","src":"9325:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7546,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7541,"src":"9339:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7549,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9352:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":7548,"name":"uint128","nodeType":"ElementaryTypeName","src":"9352:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"}],"id":7547,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9347:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7550,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9347:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint128","typeString":"type(uint128)"}},"id":7551,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9361:3:27","memberName":"max","nodeType":"MemberAccess","src":"9347:17:27","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"9339:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7559,"nodeType":"IfStatement","src":"9335:105:27","trueBody":{"id":7558,"nodeType":"Block","src":"9366:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313238","id":7554,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9418:3:27","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},{"id":7555,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7541,"src":"9423:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7553,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"9387:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9387:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7557,"nodeType":"RevertStatement","src":"9380:49:27"}]}},{"expression":{"arguments":[{"id":7562,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7541,"src":"9464:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7561,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9456:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":7560,"name":"uint128","nodeType":"ElementaryTypeName","src":"9456:7:27","typeDescriptions":{}}},"id":7563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9456:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":7545,"id":7564,"nodeType":"Return","src":"9449:21:27"}]},"documentation":{"id":7539,"nodeType":"StructuredDocumentation","src":"8974:280:27","text":" @dev Returns the downcasted uint128 from uint256, reverting on\n overflow (when the input is greater than largest uint128).\n Counterpart to Solidity's `uint128` operator.\n Requirements:\n - input must fit into 128 bits"},"id":7566,"implemented":true,"kind":"function","modifiers":[],"name":"toUint128","nameLocation":"9268:9:27","nodeType":"FunctionDefinition","parameters":{"id":7542,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7541,"mutability":"mutable","name":"value","nameLocation":"9286:5:27","nodeType":"VariableDeclaration","scope":7566,"src":"9278:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7540,"name":"uint256","nodeType":"ElementaryTypeName","src":"9278:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9277:15:27"},"returnParameters":{"id":7545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7544,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7566,"src":"9316:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":7543,"name":"uint128","nodeType":"ElementaryTypeName","src":"9316:7:27","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"9315:9:27"},"scope":8846,"src":"9259:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7593,"nodeType":"Block","src":"9834:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7580,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7574,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7569,"src":"9848:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7577,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9861:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"},"typeName":{"id":7576,"name":"uint120","nodeType":"ElementaryTypeName","src":"9861:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"}],"id":7575,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9856:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7578,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9856:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint120","typeString":"type(uint120)"}},"id":7579,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9870:3:27","memberName":"max","nodeType":"MemberAccess","src":"9856:17:27","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"src":"9848:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7587,"nodeType":"IfStatement","src":"9844:105:27","trueBody":{"id":7586,"nodeType":"Block","src":"9875:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313230","id":7582,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9927:3:27","typeDescriptions":{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},"value":"120"},{"id":7583,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7569,"src":"9932:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7581,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"9896:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7584,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9896:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7585,"nodeType":"RevertStatement","src":"9889:49:27"}]}},{"expression":{"arguments":[{"id":7590,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7569,"src":"9973:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7589,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9965:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"},"typeName":{"id":7588,"name":"uint120","nodeType":"ElementaryTypeName","src":"9965:7:27","typeDescriptions":{}}},"id":7591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9965:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"functionReturnParameters":7573,"id":7592,"nodeType":"Return","src":"9958:21:27"}]},"documentation":{"id":7567,"nodeType":"StructuredDocumentation","src":"9483:280:27","text":" @dev Returns the downcasted uint120 from uint256, reverting on\n overflow (when the input is greater than largest uint120).\n Counterpart to Solidity's `uint120` operator.\n Requirements:\n - input must fit into 120 bits"},"id":7594,"implemented":true,"kind":"function","modifiers":[],"name":"toUint120","nameLocation":"9777:9:27","nodeType":"FunctionDefinition","parameters":{"id":7570,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7569,"mutability":"mutable","name":"value","nameLocation":"9795:5:27","nodeType":"VariableDeclaration","scope":7594,"src":"9787:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7568,"name":"uint256","nodeType":"ElementaryTypeName","src":"9787:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9786:15:27"},"returnParameters":{"id":7573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7572,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7594,"src":"9825:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"},"typeName":{"id":7571,"name":"uint120","nodeType":"ElementaryTypeName","src":"9825:7:27","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"visibility":"internal"}],"src":"9824:9:27"},"scope":8846,"src":"9768:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7621,"nodeType":"Block","src":"10343:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7602,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7597,"src":"10357:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7605,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10370:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"},"typeName":{"id":7604,"name":"uint112","nodeType":"ElementaryTypeName","src":"10370:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"}],"id":7603,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10365:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7606,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10365:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint112","typeString":"type(uint112)"}},"id":7607,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10379:3:27","memberName":"max","nodeType":"MemberAccess","src":"10365:17:27","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"src":"10357:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7615,"nodeType":"IfStatement","src":"10353:105:27","trueBody":{"id":7614,"nodeType":"Block","src":"10384:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313132","id":7610,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10436:3:27","typeDescriptions":{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},"value":"112"},{"id":7611,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7597,"src":"10441:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7609,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"10405:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7612,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10405:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7613,"nodeType":"RevertStatement","src":"10398:49:27"}]}},{"expression":{"arguments":[{"id":7618,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7597,"src":"10482:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7617,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10474:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"},"typeName":{"id":7616,"name":"uint112","nodeType":"ElementaryTypeName","src":"10474:7:27","typeDescriptions":{}}},"id":7619,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10474:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"functionReturnParameters":7601,"id":7620,"nodeType":"Return","src":"10467:21:27"}]},"documentation":{"id":7595,"nodeType":"StructuredDocumentation","src":"9992:280:27","text":" @dev Returns the downcasted uint112 from uint256, reverting on\n overflow (when the input is greater than largest uint112).\n Counterpart to Solidity's `uint112` operator.\n Requirements:\n - input must fit into 112 bits"},"id":7622,"implemented":true,"kind":"function","modifiers":[],"name":"toUint112","nameLocation":"10286:9:27","nodeType":"FunctionDefinition","parameters":{"id":7598,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7597,"mutability":"mutable","name":"value","nameLocation":"10304:5:27","nodeType":"VariableDeclaration","scope":7622,"src":"10296:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7596,"name":"uint256","nodeType":"ElementaryTypeName","src":"10296:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10295:15:27"},"returnParameters":{"id":7601,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7600,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7622,"src":"10334:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"},"typeName":{"id":7599,"name":"uint112","nodeType":"ElementaryTypeName","src":"10334:7:27","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"visibility":"internal"}],"src":"10333:9:27"},"scope":8846,"src":"10277:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7649,"nodeType":"Block","src":"10852:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7636,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7630,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7625,"src":"10866:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7633,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10879:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"},"typeName":{"id":7632,"name":"uint104","nodeType":"ElementaryTypeName","src":"10879:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"}],"id":7631,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10874:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7634,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10874:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint104","typeString":"type(uint104)"}},"id":7635,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10888:3:27","memberName":"max","nodeType":"MemberAccess","src":"10874:17:27","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"src":"10866:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7643,"nodeType":"IfStatement","src":"10862:105:27","trueBody":{"id":7642,"nodeType":"Block","src":"10893:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313034","id":7638,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10945:3:27","typeDescriptions":{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},"value":"104"},{"id":7639,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7625,"src":"10950:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7637,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"10914:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7640,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10914:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7641,"nodeType":"RevertStatement","src":"10907:49:27"}]}},{"expression":{"arguments":[{"id":7646,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7625,"src":"10991:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7645,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10983:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"},"typeName":{"id":7644,"name":"uint104","nodeType":"ElementaryTypeName","src":"10983:7:27","typeDescriptions":{}}},"id":7647,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10983:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"functionReturnParameters":7629,"id":7648,"nodeType":"Return","src":"10976:21:27"}]},"documentation":{"id":7623,"nodeType":"StructuredDocumentation","src":"10501:280:27","text":" @dev Returns the downcasted uint104 from uint256, reverting on\n overflow (when the input is greater than largest uint104).\n Counterpart to Solidity's `uint104` operator.\n Requirements:\n - input must fit into 104 bits"},"id":7650,"implemented":true,"kind":"function","modifiers":[],"name":"toUint104","nameLocation":"10795:9:27","nodeType":"FunctionDefinition","parameters":{"id":7626,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7625,"mutability":"mutable","name":"value","nameLocation":"10813:5:27","nodeType":"VariableDeclaration","scope":7650,"src":"10805:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7624,"name":"uint256","nodeType":"ElementaryTypeName","src":"10805:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10804:15:27"},"returnParameters":{"id":7629,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7628,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7650,"src":"10843:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"},"typeName":{"id":7627,"name":"uint104","nodeType":"ElementaryTypeName","src":"10843:7:27","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"visibility":"internal"}],"src":"10842:9:27"},"scope":8846,"src":"10786:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7677,"nodeType":"Block","src":"11355:149:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7658,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7653,"src":"11369:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7661,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11382:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":7660,"name":"uint96","nodeType":"ElementaryTypeName","src":"11382:6:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"}],"id":7659,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"11377:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7662,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11377:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint96","typeString":"type(uint96)"}},"id":7663,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11390:3:27","memberName":"max","nodeType":"MemberAccess","src":"11377:16:27","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"src":"11369:24:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7671,"nodeType":"IfStatement","src":"11365:103:27","trueBody":{"id":7670,"nodeType":"Block","src":"11395:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3936","id":7666,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11447:2:27","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"value":"96"},{"id":7667,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7653,"src":"11451:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7665,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"11416:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11416:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7669,"nodeType":"RevertStatement","src":"11409:48:27"}]}},{"expression":{"arguments":[{"id":7674,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7653,"src":"11491:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7673,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11484:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":7672,"name":"uint96","nodeType":"ElementaryTypeName","src":"11484:6:27","typeDescriptions":{}}},"id":7675,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11484:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"functionReturnParameters":7657,"id":7676,"nodeType":"Return","src":"11477:20:27"}]},"documentation":{"id":7651,"nodeType":"StructuredDocumentation","src":"11010:276:27","text":" @dev Returns the downcasted uint96 from uint256, reverting on\n overflow (when the input is greater than largest uint96).\n Counterpart to Solidity's `uint96` operator.\n Requirements:\n - input must fit into 96 bits"},"id":7678,"implemented":true,"kind":"function","modifiers":[],"name":"toUint96","nameLocation":"11300:8:27","nodeType":"FunctionDefinition","parameters":{"id":7654,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7653,"mutability":"mutable","name":"value","nameLocation":"11317:5:27","nodeType":"VariableDeclaration","scope":7678,"src":"11309:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7652,"name":"uint256","nodeType":"ElementaryTypeName","src":"11309:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11308:15:27"},"returnParameters":{"id":7657,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7656,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7678,"src":"11347:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":7655,"name":"uint96","nodeType":"ElementaryTypeName","src":"11347:6:27","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"}],"src":"11346:8:27"},"scope":8846,"src":"11291:213:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7705,"nodeType":"Block","src":"11855:149:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7686,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7681,"src":"11869:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7689,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11882:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"},"typeName":{"id":7688,"name":"uint88","nodeType":"ElementaryTypeName","src":"11882:6:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"}],"id":7687,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"11877:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7690,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11877:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint88","typeString":"type(uint88)"}},"id":7691,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11890:3:27","memberName":"max","nodeType":"MemberAccess","src":"11877:16:27","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"src":"11869:24:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7699,"nodeType":"IfStatement","src":"11865:103:27","trueBody":{"id":7698,"nodeType":"Block","src":"11895:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3838","id":7694,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11947:2:27","typeDescriptions":{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},"value":"88"},{"id":7695,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7681,"src":"11951:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7693,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"11916:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7696,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11916:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7697,"nodeType":"RevertStatement","src":"11909:48:27"}]}},{"expression":{"arguments":[{"id":7702,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7681,"src":"11991:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7701,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11984:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"},"typeName":{"id":7700,"name":"uint88","nodeType":"ElementaryTypeName","src":"11984:6:27","typeDescriptions":{}}},"id":7703,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11984:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"functionReturnParameters":7685,"id":7704,"nodeType":"Return","src":"11977:20:27"}]},"documentation":{"id":7679,"nodeType":"StructuredDocumentation","src":"11510:276:27","text":" @dev Returns the downcasted uint88 from uint256, reverting on\n overflow (when the input is greater than largest uint88).\n Counterpart to Solidity's `uint88` operator.\n Requirements:\n - input must fit into 88 bits"},"id":7706,"implemented":true,"kind":"function","modifiers":[],"name":"toUint88","nameLocation":"11800:8:27","nodeType":"FunctionDefinition","parameters":{"id":7682,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7681,"mutability":"mutable","name":"value","nameLocation":"11817:5:27","nodeType":"VariableDeclaration","scope":7706,"src":"11809:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7680,"name":"uint256","nodeType":"ElementaryTypeName","src":"11809:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11808:15:27"},"returnParameters":{"id":7685,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7684,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7706,"src":"11847:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"},"typeName":{"id":7683,"name":"uint88","nodeType":"ElementaryTypeName","src":"11847:6:27","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"visibility":"internal"}],"src":"11846:8:27"},"scope":8846,"src":"11791:213:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7733,"nodeType":"Block","src":"12355:149:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7714,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7709,"src":"12369:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7717,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12382:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"},"typeName":{"id":7716,"name":"uint80","nodeType":"ElementaryTypeName","src":"12382:6:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"}],"id":7715,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"12377:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7718,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12377:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint80","typeString":"type(uint80)"}},"id":7719,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12390:3:27","memberName":"max","nodeType":"MemberAccess","src":"12377:16:27","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"src":"12369:24:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7727,"nodeType":"IfStatement","src":"12365:103:27","trueBody":{"id":7726,"nodeType":"Block","src":"12395:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3830","id":7722,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12447:2:27","typeDescriptions":{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},"value":"80"},{"id":7723,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7709,"src":"12451:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7721,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"12416:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12416:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7725,"nodeType":"RevertStatement","src":"12409:48:27"}]}},{"expression":{"arguments":[{"id":7730,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7709,"src":"12491:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7729,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12484:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"},"typeName":{"id":7728,"name":"uint80","nodeType":"ElementaryTypeName","src":"12484:6:27","typeDescriptions":{}}},"id":7731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12484:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"functionReturnParameters":7713,"id":7732,"nodeType":"Return","src":"12477:20:27"}]},"documentation":{"id":7707,"nodeType":"StructuredDocumentation","src":"12010:276:27","text":" @dev Returns the downcasted uint80 from uint256, reverting on\n overflow (when the input is greater than largest uint80).\n Counterpart to Solidity's `uint80` operator.\n Requirements:\n - input must fit into 80 bits"},"id":7734,"implemented":true,"kind":"function","modifiers":[],"name":"toUint80","nameLocation":"12300:8:27","nodeType":"FunctionDefinition","parameters":{"id":7710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7709,"mutability":"mutable","name":"value","nameLocation":"12317:5:27","nodeType":"VariableDeclaration","scope":7734,"src":"12309:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7708,"name":"uint256","nodeType":"ElementaryTypeName","src":"12309:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12308:15:27"},"returnParameters":{"id":7713,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7712,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7734,"src":"12347:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":7711,"name":"uint80","nodeType":"ElementaryTypeName","src":"12347:6:27","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"12346:8:27"},"scope":8846,"src":"12291:213:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7761,"nodeType":"Block","src":"12855:149:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7742,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7737,"src":"12869:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7745,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12882:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"},"typeName":{"id":7744,"name":"uint72","nodeType":"ElementaryTypeName","src":"12882:6:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"}],"id":7743,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"12877:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7746,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12877:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint72","typeString":"type(uint72)"}},"id":7747,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12890:3:27","memberName":"max","nodeType":"MemberAccess","src":"12877:16:27","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"src":"12869:24:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7755,"nodeType":"IfStatement","src":"12865:103:27","trueBody":{"id":7754,"nodeType":"Block","src":"12895:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3732","id":7750,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12947:2:27","typeDescriptions":{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},"value":"72"},{"id":7751,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7737,"src":"12951:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7749,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"12916:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12916:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7753,"nodeType":"RevertStatement","src":"12909:48:27"}]}},{"expression":{"arguments":[{"id":7758,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7737,"src":"12991:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7757,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12984:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"},"typeName":{"id":7756,"name":"uint72","nodeType":"ElementaryTypeName","src":"12984:6:27","typeDescriptions":{}}},"id":7759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12984:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"functionReturnParameters":7741,"id":7760,"nodeType":"Return","src":"12977:20:27"}]},"documentation":{"id":7735,"nodeType":"StructuredDocumentation","src":"12510:276:27","text":" @dev Returns the downcasted uint72 from uint256, reverting on\n overflow (when the input is greater than largest uint72).\n Counterpart to Solidity's `uint72` operator.\n Requirements:\n - input must fit into 72 bits"},"id":7762,"implemented":true,"kind":"function","modifiers":[],"name":"toUint72","nameLocation":"12800:8:27","nodeType":"FunctionDefinition","parameters":{"id":7738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7737,"mutability":"mutable","name":"value","nameLocation":"12817:5:27","nodeType":"VariableDeclaration","scope":7762,"src":"12809:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7736,"name":"uint256","nodeType":"ElementaryTypeName","src":"12809:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12808:15:27"},"returnParameters":{"id":7741,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7740,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7762,"src":"12847:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"},"typeName":{"id":7739,"name":"uint72","nodeType":"ElementaryTypeName","src":"12847:6:27","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"visibility":"internal"}],"src":"12846:8:27"},"scope":8846,"src":"12791:213:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7789,"nodeType":"Block","src":"13355:149:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7770,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7765,"src":"13369:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7773,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13382:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":7772,"name":"uint64","nodeType":"ElementaryTypeName","src":"13382:6:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"}],"id":7771,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"13377:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7774,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13377:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint64","typeString":"type(uint64)"}},"id":7775,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13390:3:27","memberName":"max","nodeType":"MemberAccess","src":"13377:16:27","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"13369:24:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7783,"nodeType":"IfStatement","src":"13365:103:27","trueBody":{"id":7782,"nodeType":"Block","src":"13395:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3634","id":7778,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13447:2:27","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},{"id":7779,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7765,"src":"13451:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7777,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"13416:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7780,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13416:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7781,"nodeType":"RevertStatement","src":"13409:48:27"}]}},{"expression":{"arguments":[{"id":7786,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7765,"src":"13491:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7785,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13484:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":7784,"name":"uint64","nodeType":"ElementaryTypeName","src":"13484:6:27","typeDescriptions":{}}},"id":7787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13484:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":7769,"id":7788,"nodeType":"Return","src":"13477:20:27"}]},"documentation":{"id":7763,"nodeType":"StructuredDocumentation","src":"13010:276:27","text":" @dev Returns the downcasted uint64 from uint256, reverting on\n overflow (when the input is greater than largest uint64).\n Counterpart to Solidity's `uint64` operator.\n Requirements:\n - input must fit into 64 bits"},"id":7790,"implemented":true,"kind":"function","modifiers":[],"name":"toUint64","nameLocation":"13300:8:27","nodeType":"FunctionDefinition","parameters":{"id":7766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7765,"mutability":"mutable","name":"value","nameLocation":"13317:5:27","nodeType":"VariableDeclaration","scope":7790,"src":"13309:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7764,"name":"uint256","nodeType":"ElementaryTypeName","src":"13309:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13308:15:27"},"returnParameters":{"id":7769,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7768,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7790,"src":"13347:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":7767,"name":"uint64","nodeType":"ElementaryTypeName","src":"13347:6:27","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"13346:8:27"},"scope":8846,"src":"13291:213:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7817,"nodeType":"Block","src":"13855:149:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7798,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7793,"src":"13869:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7801,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13882:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"},"typeName":{"id":7800,"name":"uint56","nodeType":"ElementaryTypeName","src":"13882:6:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"}],"id":7799,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"13877:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7802,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13877:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint56","typeString":"type(uint56)"}},"id":7803,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13890:3:27","memberName":"max","nodeType":"MemberAccess","src":"13877:16:27","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"src":"13869:24:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7811,"nodeType":"IfStatement","src":"13865:103:27","trueBody":{"id":7810,"nodeType":"Block","src":"13895:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3536","id":7806,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13947:2:27","typeDescriptions":{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},"value":"56"},{"id":7807,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7793,"src":"13951:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7805,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"13916:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13916:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7809,"nodeType":"RevertStatement","src":"13909:48:27"}]}},{"expression":{"arguments":[{"id":7814,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7793,"src":"13991:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7813,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13984:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"},"typeName":{"id":7812,"name":"uint56","nodeType":"ElementaryTypeName","src":"13984:6:27","typeDescriptions":{}}},"id":7815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13984:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"functionReturnParameters":7797,"id":7816,"nodeType":"Return","src":"13977:20:27"}]},"documentation":{"id":7791,"nodeType":"StructuredDocumentation","src":"13510:276:27","text":" @dev Returns the downcasted uint56 from uint256, reverting on\n overflow (when the input is greater than largest uint56).\n Counterpart to Solidity's `uint56` operator.\n Requirements:\n - input must fit into 56 bits"},"id":7818,"implemented":true,"kind":"function","modifiers":[],"name":"toUint56","nameLocation":"13800:8:27","nodeType":"FunctionDefinition","parameters":{"id":7794,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7793,"mutability":"mutable","name":"value","nameLocation":"13817:5:27","nodeType":"VariableDeclaration","scope":7818,"src":"13809:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7792,"name":"uint256","nodeType":"ElementaryTypeName","src":"13809:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13808:15:27"},"returnParameters":{"id":7797,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7796,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7818,"src":"13847:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"},"typeName":{"id":7795,"name":"uint56","nodeType":"ElementaryTypeName","src":"13847:6:27","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"visibility":"internal"}],"src":"13846:8:27"},"scope":8846,"src":"13791:213:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7845,"nodeType":"Block","src":"14355:149:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7832,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7826,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7821,"src":"14369:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7829,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14382:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"},"typeName":{"id":7828,"name":"uint48","nodeType":"ElementaryTypeName","src":"14382:6:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"}],"id":7827,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"14377:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7830,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14377:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint48","typeString":"type(uint48)"}},"id":7831,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14390:3:27","memberName":"max","nodeType":"MemberAccess","src":"14377:16:27","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"14369:24:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7839,"nodeType":"IfStatement","src":"14365:103:27","trueBody":{"id":7838,"nodeType":"Block","src":"14395:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3438","id":7834,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14447:2:27","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},{"id":7835,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7821,"src":"14451:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7833,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"14416:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7836,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14416:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7837,"nodeType":"RevertStatement","src":"14409:48:27"}]}},{"expression":{"arguments":[{"id":7842,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7821,"src":"14491:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7841,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14484:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"},"typeName":{"id":7840,"name":"uint48","nodeType":"ElementaryTypeName","src":"14484:6:27","typeDescriptions":{}}},"id":7843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14484:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":7825,"id":7844,"nodeType":"Return","src":"14477:20:27"}]},"documentation":{"id":7819,"nodeType":"StructuredDocumentation","src":"14010:276:27","text":" @dev Returns the downcasted uint48 from uint256, reverting on\n overflow (when the input is greater than largest uint48).\n Counterpart to Solidity's `uint48` operator.\n Requirements:\n - input must fit into 48 bits"},"id":7846,"implemented":true,"kind":"function","modifiers":[],"name":"toUint48","nameLocation":"14300:8:27","nodeType":"FunctionDefinition","parameters":{"id":7822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7821,"mutability":"mutable","name":"value","nameLocation":"14317:5:27","nodeType":"VariableDeclaration","scope":7846,"src":"14309:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7820,"name":"uint256","nodeType":"ElementaryTypeName","src":"14309:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14308:15:27"},"returnParameters":{"id":7825,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7824,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7846,"src":"14347:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":7823,"name":"uint48","nodeType":"ElementaryTypeName","src":"14347:6:27","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"14346:8:27"},"scope":8846,"src":"14291:213:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7873,"nodeType":"Block","src":"14855:149:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7854,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7849,"src":"14869:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7857,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14882:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":7856,"name":"uint40","nodeType":"ElementaryTypeName","src":"14882:6:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"}],"id":7855,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"14877:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7858,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14877:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint40","typeString":"type(uint40)"}},"id":7859,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14890:3:27","memberName":"max","nodeType":"MemberAccess","src":"14877:16:27","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"14869:24:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7867,"nodeType":"IfStatement","src":"14865:103:27","trueBody":{"id":7866,"nodeType":"Block","src":"14895:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3430","id":7862,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14947:2:27","typeDescriptions":{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},"value":"40"},{"id":7863,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7849,"src":"14951:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7861,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"14916:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7864,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14916:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7865,"nodeType":"RevertStatement","src":"14909:48:27"}]}},{"expression":{"arguments":[{"id":7870,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7849,"src":"14991:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7869,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14984:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":7868,"name":"uint40","nodeType":"ElementaryTypeName","src":"14984:6:27","typeDescriptions":{}}},"id":7871,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14984:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"functionReturnParameters":7853,"id":7872,"nodeType":"Return","src":"14977:20:27"}]},"documentation":{"id":7847,"nodeType":"StructuredDocumentation","src":"14510:276:27","text":" @dev Returns the downcasted uint40 from uint256, reverting on\n overflow (when the input is greater than largest uint40).\n Counterpart to Solidity's `uint40` operator.\n Requirements:\n - input must fit into 40 bits"},"id":7874,"implemented":true,"kind":"function","modifiers":[],"name":"toUint40","nameLocation":"14800:8:27","nodeType":"FunctionDefinition","parameters":{"id":7850,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7849,"mutability":"mutable","name":"value","nameLocation":"14817:5:27","nodeType":"VariableDeclaration","scope":7874,"src":"14809:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7848,"name":"uint256","nodeType":"ElementaryTypeName","src":"14809:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14808:15:27"},"returnParameters":{"id":7853,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7852,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7874,"src":"14847:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":7851,"name":"uint40","nodeType":"ElementaryTypeName","src":"14847:6:27","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"14846:8:27"},"scope":8846,"src":"14791:213:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7901,"nodeType":"Block","src":"15355:149:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7882,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7877,"src":"15369:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7885,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15382:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":7884,"name":"uint32","nodeType":"ElementaryTypeName","src":"15382:6:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"}],"id":7883,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"15377:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7886,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15377:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint32","typeString":"type(uint32)"}},"id":7887,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15390:3:27","memberName":"max","nodeType":"MemberAccess","src":"15377:16:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"15369:24:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7895,"nodeType":"IfStatement","src":"15365:103:27","trueBody":{"id":7894,"nodeType":"Block","src":"15395:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3332","id":7890,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15447:2:27","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"id":7891,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7877,"src":"15451:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7889,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"15416:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7892,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15416:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7893,"nodeType":"RevertStatement","src":"15409:48:27"}]}},{"expression":{"arguments":[{"id":7898,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7877,"src":"15491:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7897,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15484:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":7896,"name":"uint32","nodeType":"ElementaryTypeName","src":"15484:6:27","typeDescriptions":{}}},"id":7899,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15484:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":7881,"id":7900,"nodeType":"Return","src":"15477:20:27"}]},"documentation":{"id":7875,"nodeType":"StructuredDocumentation","src":"15010:276:27","text":" @dev Returns the downcasted uint32 from uint256, reverting on\n overflow (when the input is greater than largest uint32).\n Counterpart to Solidity's `uint32` operator.\n Requirements:\n - input must fit into 32 bits"},"id":7902,"implemented":true,"kind":"function","modifiers":[],"name":"toUint32","nameLocation":"15300:8:27","nodeType":"FunctionDefinition","parameters":{"id":7878,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7877,"mutability":"mutable","name":"value","nameLocation":"15317:5:27","nodeType":"VariableDeclaration","scope":7902,"src":"15309:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7876,"name":"uint256","nodeType":"ElementaryTypeName","src":"15309:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15308:15:27"},"returnParameters":{"id":7881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7880,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7902,"src":"15347:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":7879,"name":"uint32","nodeType":"ElementaryTypeName","src":"15347:6:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"15346:8:27"},"scope":8846,"src":"15291:213:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7929,"nodeType":"Block","src":"15855:149:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7910,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7905,"src":"15869:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7913,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15882:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"},"typeName":{"id":7912,"name":"uint24","nodeType":"ElementaryTypeName","src":"15882:6:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"}],"id":7911,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"15877:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7914,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15877:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint24","typeString":"type(uint24)"}},"id":7915,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15890:3:27","memberName":"max","nodeType":"MemberAccess","src":"15877:16:27","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"src":"15869:24:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7923,"nodeType":"IfStatement","src":"15865:103:27","trueBody":{"id":7922,"nodeType":"Block","src":"15895:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3234","id":7918,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15947:2:27","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},{"id":7919,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7905,"src":"15951:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7917,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"15916:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7920,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15916:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7921,"nodeType":"RevertStatement","src":"15909:48:27"}]}},{"expression":{"arguments":[{"id":7926,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7905,"src":"15991:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7925,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15984:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"},"typeName":{"id":7924,"name":"uint24","nodeType":"ElementaryTypeName","src":"15984:6:27","typeDescriptions":{}}},"id":7927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15984:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"functionReturnParameters":7909,"id":7928,"nodeType":"Return","src":"15977:20:27"}]},"documentation":{"id":7903,"nodeType":"StructuredDocumentation","src":"15510:276:27","text":" @dev Returns the downcasted uint24 from uint256, reverting on\n overflow (when the input is greater than largest uint24).\n Counterpart to Solidity's `uint24` operator.\n Requirements:\n - input must fit into 24 bits"},"id":7930,"implemented":true,"kind":"function","modifiers":[],"name":"toUint24","nameLocation":"15800:8:27","nodeType":"FunctionDefinition","parameters":{"id":7906,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7905,"mutability":"mutable","name":"value","nameLocation":"15817:5:27","nodeType":"VariableDeclaration","scope":7930,"src":"15809:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7904,"name":"uint256","nodeType":"ElementaryTypeName","src":"15809:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15808:15:27"},"returnParameters":{"id":7909,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7908,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7930,"src":"15847:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"},"typeName":{"id":7907,"name":"uint24","nodeType":"ElementaryTypeName","src":"15847:6:27","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"visibility":"internal"}],"src":"15846:8:27"},"scope":8846,"src":"15791:213:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7957,"nodeType":"Block","src":"16355:149:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7938,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7933,"src":"16369:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7941,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16382:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":7940,"name":"uint16","nodeType":"ElementaryTypeName","src":"16382:6:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"}],"id":7939,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"16377:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7942,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16377:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint16","typeString":"type(uint16)"}},"id":7943,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16390:3:27","memberName":"max","nodeType":"MemberAccess","src":"16377:16:27","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"16369:24:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7951,"nodeType":"IfStatement","src":"16365:103:27","trueBody":{"id":7950,"nodeType":"Block","src":"16395:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3136","id":7946,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16447:2:27","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},{"id":7947,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7933,"src":"16451:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7945,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"16416:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7948,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16416:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7949,"nodeType":"RevertStatement","src":"16409:48:27"}]}},{"expression":{"arguments":[{"id":7954,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7933,"src":"16491:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7953,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16484:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":7952,"name":"uint16","nodeType":"ElementaryTypeName","src":"16484:6:27","typeDescriptions":{}}},"id":7955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16484:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"functionReturnParameters":7937,"id":7956,"nodeType":"Return","src":"16477:20:27"}]},"documentation":{"id":7931,"nodeType":"StructuredDocumentation","src":"16010:276:27","text":" @dev Returns the downcasted uint16 from uint256, reverting on\n overflow (when the input is greater than largest uint16).\n Counterpart to Solidity's `uint16` operator.\n Requirements:\n - input must fit into 16 bits"},"id":7958,"implemented":true,"kind":"function","modifiers":[],"name":"toUint16","nameLocation":"16300:8:27","nodeType":"FunctionDefinition","parameters":{"id":7934,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7933,"mutability":"mutable","name":"value","nameLocation":"16317:5:27","nodeType":"VariableDeclaration","scope":7958,"src":"16309:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7932,"name":"uint256","nodeType":"ElementaryTypeName","src":"16309:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16308:15:27"},"returnParameters":{"id":7937,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7936,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7958,"src":"16347:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":7935,"name":"uint16","nodeType":"ElementaryTypeName","src":"16347:6:27","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"16346:8:27"},"scope":8846,"src":"16291:213:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7985,"nodeType":"Block","src":"16849:146:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7972,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7966,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7961,"src":"16863:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7969,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16876:5:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":7968,"name":"uint8","nodeType":"ElementaryTypeName","src":"16876:5:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"}],"id":7967,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"16871:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7970,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16871:11:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint8","typeString":"type(uint8)"}},"id":7971,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16883:3:27","memberName":"max","nodeType":"MemberAccess","src":"16871:15:27","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"16863:23:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7979,"nodeType":"IfStatement","src":"16859:101:27","trueBody":{"id":7978,"nodeType":"Block","src":"16888:72:27","statements":[{"errorCall":{"arguments":[{"hexValue":"38","id":7974,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16940:1:27","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},{"id":7975,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7961,"src":"16943:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7973,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"16909:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16909:40:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7977,"nodeType":"RevertStatement","src":"16902:47:27"}]}},{"expression":{"arguments":[{"id":7982,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7961,"src":"16982:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7981,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16976:5:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":7980,"name":"uint8","nodeType":"ElementaryTypeName","src":"16976:5:27","typeDescriptions":{}}},"id":7983,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16976:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":7965,"id":7984,"nodeType":"Return","src":"16969:19:27"}]},"documentation":{"id":7959,"nodeType":"StructuredDocumentation","src":"16510:272:27","text":" @dev Returns the downcasted uint8 from uint256, reverting on\n overflow (when the input is greater than largest uint8).\n Counterpart to Solidity's `uint8` operator.\n Requirements:\n - input must fit into 8 bits"},"id":7986,"implemented":true,"kind":"function","modifiers":[],"name":"toUint8","nameLocation":"16796:7:27","nodeType":"FunctionDefinition","parameters":{"id":7962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7961,"mutability":"mutable","name":"value","nameLocation":"16812:5:27","nodeType":"VariableDeclaration","scope":7986,"src":"16804:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7960,"name":"uint256","nodeType":"ElementaryTypeName","src":"16804:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16803:15:27"},"returnParameters":{"id":7965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7964,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7986,"src":"16842:5:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7963,"name":"uint8","nodeType":"ElementaryTypeName","src":"16842:5:27","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"16841:7:27"},"scope":8846,"src":"16787:208:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8008,"nodeType":"Block","src":"17231:128:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":7996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7994,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7989,"src":"17245:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":7995,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17253:1:27","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17245:9:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8002,"nodeType":"IfStatement","src":"17241:81:27","trueBody":{"id":8001,"nodeType":"Block","src":"17256:66:27","statements":[{"errorCall":{"arguments":[{"id":7998,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7989,"src":"17305:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":7997,"name":"SafeCastOverflowedIntToUint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7106,"src":"17277:27:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_int256_$returns$_t_error_$","typeString":"function (int256) pure returns (error)"}},"id":7999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17277:34:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8000,"nodeType":"RevertStatement","src":"17270:41:27"}]}},{"expression":{"arguments":[{"id":8005,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7989,"src":"17346:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8004,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17338:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":8003,"name":"uint256","nodeType":"ElementaryTypeName","src":"17338:7:27","typeDescriptions":{}}},"id":8006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17338:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7993,"id":8007,"nodeType":"Return","src":"17331:21:27"}]},"documentation":{"id":7987,"nodeType":"StructuredDocumentation","src":"17001:160:27","text":" @dev Converts a signed int256 into an unsigned uint256.\n Requirements:\n - input must be greater than or equal to 0."},"id":8009,"implemented":true,"kind":"function","modifiers":[],"name":"toUint256","nameLocation":"17175:9:27","nodeType":"FunctionDefinition","parameters":{"id":7990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7989,"mutability":"mutable","name":"value","nameLocation":"17192:5:27","nodeType":"VariableDeclaration","scope":8009,"src":"17185:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":7988,"name":"int256","nodeType":"ElementaryTypeName","src":"17185:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"17184:14:27"},"returnParameters":{"id":7993,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7992,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8009,"src":"17222:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7991,"name":"uint256","nodeType":"ElementaryTypeName","src":"17222:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17221:9:27"},"scope":8846,"src":"17166:193:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8034,"nodeType":"Block","src":"17756:150:27","statements":[{"expression":{"id":8022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8017,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8015,"src":"17766:10:27","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8020,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8012,"src":"17786:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8019,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17779:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int248_$","typeString":"type(int248)"},"typeName":{"id":8018,"name":"int248","nodeType":"ElementaryTypeName","src":"17779:6:27","typeDescriptions":{}}},"id":8021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17779:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"src":"17766:26:27","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"id":8023,"nodeType":"ExpressionStatement","src":"17766:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8026,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8024,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8015,"src":"17806:10:27","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8025,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8012,"src":"17820:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17806:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8033,"nodeType":"IfStatement","src":"17802:98:27","trueBody":{"id":8032,"nodeType":"Block","src":"17827:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"323438","id":8028,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17878:3:27","typeDescriptions":{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},"value":"248"},{"id":8029,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8012,"src":"17883:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8027,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"17848:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8030,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17848:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8031,"nodeType":"RevertStatement","src":"17841:48:27"}]}}]},"documentation":{"id":8010,"nodeType":"StructuredDocumentation","src":"17365:312:27","text":" @dev Returns the downcasted int248 from int256, reverting on\n overflow (when the input is less than smallest int248 or\n greater than largest int248).\n Counterpart to Solidity's `int248` operator.\n Requirements:\n - input must fit into 248 bits"},"id":8035,"implemented":true,"kind":"function","modifiers":[],"name":"toInt248","nameLocation":"17691:8:27","nodeType":"FunctionDefinition","parameters":{"id":8013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8012,"mutability":"mutable","name":"value","nameLocation":"17707:5:27","nodeType":"VariableDeclaration","scope":8035,"src":"17700:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8011,"name":"int256","nodeType":"ElementaryTypeName","src":"17700:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"17699:14:27"},"returnParameters":{"id":8016,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8015,"mutability":"mutable","name":"downcasted","nameLocation":"17744:10:27","nodeType":"VariableDeclaration","scope":8035,"src":"17737:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"},"typeName":{"id":8014,"name":"int248","nodeType":"ElementaryTypeName","src":"17737:6:27","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"visibility":"internal"}],"src":"17736:19:27"},"scope":8846,"src":"17682:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8060,"nodeType":"Block","src":"18303:150:27","statements":[{"expression":{"id":8048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8043,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8041,"src":"18313:10:27","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8046,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8038,"src":"18333:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8045,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18326:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int240_$","typeString":"type(int240)"},"typeName":{"id":8044,"name":"int240","nodeType":"ElementaryTypeName","src":"18326:6:27","typeDescriptions":{}}},"id":8047,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18326:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"src":"18313:26:27","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"id":8049,"nodeType":"ExpressionStatement","src":"18313:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8050,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8041,"src":"18353:10:27","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8051,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8038,"src":"18367:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18353:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8059,"nodeType":"IfStatement","src":"18349:98:27","trueBody":{"id":8058,"nodeType":"Block","src":"18374:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"323430","id":8054,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18425:3:27","typeDescriptions":{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},"value":"240"},{"id":8055,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8038,"src":"18430:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8053,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"18395:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18395:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8057,"nodeType":"RevertStatement","src":"18388:48:27"}]}}]},"documentation":{"id":8036,"nodeType":"StructuredDocumentation","src":"17912:312:27","text":" @dev Returns the downcasted int240 from int256, reverting on\n overflow (when the input is less than smallest int240 or\n greater than largest int240).\n Counterpart to Solidity's `int240` operator.\n Requirements:\n - input must fit into 240 bits"},"id":8061,"implemented":true,"kind":"function","modifiers":[],"name":"toInt240","nameLocation":"18238:8:27","nodeType":"FunctionDefinition","parameters":{"id":8039,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8038,"mutability":"mutable","name":"value","nameLocation":"18254:5:27","nodeType":"VariableDeclaration","scope":8061,"src":"18247:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8037,"name":"int256","nodeType":"ElementaryTypeName","src":"18247:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"18246:14:27"},"returnParameters":{"id":8042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8041,"mutability":"mutable","name":"downcasted","nameLocation":"18291:10:27","nodeType":"VariableDeclaration","scope":8061,"src":"18284:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"},"typeName":{"id":8040,"name":"int240","nodeType":"ElementaryTypeName","src":"18284:6:27","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"visibility":"internal"}],"src":"18283:19:27"},"scope":8846,"src":"18229:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8086,"nodeType":"Block","src":"18850:150:27","statements":[{"expression":{"id":8074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8069,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8067,"src":"18860:10:27","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8072,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8064,"src":"18880:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8071,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18873:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int232_$","typeString":"type(int232)"},"typeName":{"id":8070,"name":"int232","nodeType":"ElementaryTypeName","src":"18873:6:27","typeDescriptions":{}}},"id":8073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18873:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"src":"18860:26:27","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"id":8075,"nodeType":"ExpressionStatement","src":"18860:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8076,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8067,"src":"18900:10:27","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8077,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8064,"src":"18914:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18900:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8085,"nodeType":"IfStatement","src":"18896:98:27","trueBody":{"id":8084,"nodeType":"Block","src":"18921:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"323332","id":8080,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18972:3:27","typeDescriptions":{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},"value":"232"},{"id":8081,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8064,"src":"18977:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8079,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"18942:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8082,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18942:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8083,"nodeType":"RevertStatement","src":"18935:48:27"}]}}]},"documentation":{"id":8062,"nodeType":"StructuredDocumentation","src":"18459:312:27","text":" @dev Returns the downcasted int232 from int256, reverting on\n overflow (when the input is less than smallest int232 or\n greater than largest int232).\n Counterpart to Solidity's `int232` operator.\n Requirements:\n - input must fit into 232 bits"},"id":8087,"implemented":true,"kind":"function","modifiers":[],"name":"toInt232","nameLocation":"18785:8:27","nodeType":"FunctionDefinition","parameters":{"id":8065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8064,"mutability":"mutable","name":"value","nameLocation":"18801:5:27","nodeType":"VariableDeclaration","scope":8087,"src":"18794:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8063,"name":"int256","nodeType":"ElementaryTypeName","src":"18794:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"18793:14:27"},"returnParameters":{"id":8068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8067,"mutability":"mutable","name":"downcasted","nameLocation":"18838:10:27","nodeType":"VariableDeclaration","scope":8087,"src":"18831:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"},"typeName":{"id":8066,"name":"int232","nodeType":"ElementaryTypeName","src":"18831:6:27","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"visibility":"internal"}],"src":"18830:19:27"},"scope":8846,"src":"18776:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8112,"nodeType":"Block","src":"19397:150:27","statements":[{"expression":{"id":8100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8095,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8093,"src":"19407:10:27","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8098,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8090,"src":"19427:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8097,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19420:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int224_$","typeString":"type(int224)"},"typeName":{"id":8096,"name":"int224","nodeType":"ElementaryTypeName","src":"19420:6:27","typeDescriptions":{}}},"id":8099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19420:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"src":"19407:26:27","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"id":8101,"nodeType":"ExpressionStatement","src":"19407:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8102,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8093,"src":"19447:10:27","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8103,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8090,"src":"19461:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19447:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8111,"nodeType":"IfStatement","src":"19443:98:27","trueBody":{"id":8110,"nodeType":"Block","src":"19468:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"323234","id":8106,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19519:3:27","typeDescriptions":{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},"value":"224"},{"id":8107,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8090,"src":"19524:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8105,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"19489:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8108,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19489:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8109,"nodeType":"RevertStatement","src":"19482:48:27"}]}}]},"documentation":{"id":8088,"nodeType":"StructuredDocumentation","src":"19006:312:27","text":" @dev Returns the downcasted int224 from int256, reverting on\n overflow (when the input is less than smallest int224 or\n greater than largest int224).\n Counterpart to Solidity's `int224` operator.\n Requirements:\n - input must fit into 224 bits"},"id":8113,"implemented":true,"kind":"function","modifiers":[],"name":"toInt224","nameLocation":"19332:8:27","nodeType":"FunctionDefinition","parameters":{"id":8091,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8090,"mutability":"mutable","name":"value","nameLocation":"19348:5:27","nodeType":"VariableDeclaration","scope":8113,"src":"19341:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8089,"name":"int256","nodeType":"ElementaryTypeName","src":"19341:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"19340:14:27"},"returnParameters":{"id":8094,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8093,"mutability":"mutable","name":"downcasted","nameLocation":"19385:10:27","nodeType":"VariableDeclaration","scope":8113,"src":"19378:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"},"typeName":{"id":8092,"name":"int224","nodeType":"ElementaryTypeName","src":"19378:6:27","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"visibility":"internal"}],"src":"19377:19:27"},"scope":8846,"src":"19323:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8138,"nodeType":"Block","src":"19944:150:27","statements":[{"expression":{"id":8126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8121,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8119,"src":"19954:10:27","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8124,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8116,"src":"19974:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8123,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19967:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int216_$","typeString":"type(int216)"},"typeName":{"id":8122,"name":"int216","nodeType":"ElementaryTypeName","src":"19967:6:27","typeDescriptions":{}}},"id":8125,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19967:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"src":"19954:26:27","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"id":8127,"nodeType":"ExpressionStatement","src":"19954:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8128,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8119,"src":"19994:10:27","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8129,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8116,"src":"20008:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19994:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8137,"nodeType":"IfStatement","src":"19990:98:27","trueBody":{"id":8136,"nodeType":"Block","src":"20015:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"323136","id":8132,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20066:3:27","typeDescriptions":{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},"value":"216"},{"id":8133,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8116,"src":"20071:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8131,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"20036:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20036:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8135,"nodeType":"RevertStatement","src":"20029:48:27"}]}}]},"documentation":{"id":8114,"nodeType":"StructuredDocumentation","src":"19553:312:27","text":" @dev Returns the downcasted int216 from int256, reverting on\n overflow (when the input is less than smallest int216 or\n greater than largest int216).\n Counterpart to Solidity's `int216` operator.\n Requirements:\n - input must fit into 216 bits"},"id":8139,"implemented":true,"kind":"function","modifiers":[],"name":"toInt216","nameLocation":"19879:8:27","nodeType":"FunctionDefinition","parameters":{"id":8117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8116,"mutability":"mutable","name":"value","nameLocation":"19895:5:27","nodeType":"VariableDeclaration","scope":8139,"src":"19888:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8115,"name":"int256","nodeType":"ElementaryTypeName","src":"19888:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"19887:14:27"},"returnParameters":{"id":8120,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8119,"mutability":"mutable","name":"downcasted","nameLocation":"19932:10:27","nodeType":"VariableDeclaration","scope":8139,"src":"19925:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"},"typeName":{"id":8118,"name":"int216","nodeType":"ElementaryTypeName","src":"19925:6:27","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"visibility":"internal"}],"src":"19924:19:27"},"scope":8846,"src":"19870:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8164,"nodeType":"Block","src":"20491:150:27","statements":[{"expression":{"id":8152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8147,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8145,"src":"20501:10:27","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8150,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8142,"src":"20521:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8149,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20514:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int208_$","typeString":"type(int208)"},"typeName":{"id":8148,"name":"int208","nodeType":"ElementaryTypeName","src":"20514:6:27","typeDescriptions":{}}},"id":8151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20514:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"src":"20501:26:27","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"id":8153,"nodeType":"ExpressionStatement","src":"20501:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8154,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8145,"src":"20541:10:27","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8155,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8142,"src":"20555:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20541:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8163,"nodeType":"IfStatement","src":"20537:98:27","trueBody":{"id":8162,"nodeType":"Block","src":"20562:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"323038","id":8158,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20613:3:27","typeDescriptions":{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},"value":"208"},{"id":8159,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8142,"src":"20618:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8157,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"20583:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8160,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20583:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8161,"nodeType":"RevertStatement","src":"20576:48:27"}]}}]},"documentation":{"id":8140,"nodeType":"StructuredDocumentation","src":"20100:312:27","text":" @dev Returns the downcasted int208 from int256, reverting on\n overflow (when the input is less than smallest int208 or\n greater than largest int208).\n Counterpart to Solidity's `int208` operator.\n Requirements:\n - input must fit into 208 bits"},"id":8165,"implemented":true,"kind":"function","modifiers":[],"name":"toInt208","nameLocation":"20426:8:27","nodeType":"FunctionDefinition","parameters":{"id":8143,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8142,"mutability":"mutable","name":"value","nameLocation":"20442:5:27","nodeType":"VariableDeclaration","scope":8165,"src":"20435:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8141,"name":"int256","nodeType":"ElementaryTypeName","src":"20435:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20434:14:27"},"returnParameters":{"id":8146,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8145,"mutability":"mutable","name":"downcasted","nameLocation":"20479:10:27","nodeType":"VariableDeclaration","scope":8165,"src":"20472:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"},"typeName":{"id":8144,"name":"int208","nodeType":"ElementaryTypeName","src":"20472:6:27","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"visibility":"internal"}],"src":"20471:19:27"},"scope":8846,"src":"20417:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8190,"nodeType":"Block","src":"21038:150:27","statements":[{"expression":{"id":8178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8173,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8171,"src":"21048:10:27","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8176,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8168,"src":"21068:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8175,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21061:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int200_$","typeString":"type(int200)"},"typeName":{"id":8174,"name":"int200","nodeType":"ElementaryTypeName","src":"21061:6:27","typeDescriptions":{}}},"id":8177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21061:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"src":"21048:26:27","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"id":8179,"nodeType":"ExpressionStatement","src":"21048:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8180,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8171,"src":"21088:10:27","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8181,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8168,"src":"21102:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21088:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8189,"nodeType":"IfStatement","src":"21084:98:27","trueBody":{"id":8188,"nodeType":"Block","src":"21109:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"323030","id":8184,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21160:3:27","typeDescriptions":{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},"value":"200"},{"id":8185,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8168,"src":"21165:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8183,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"21130:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21130:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8187,"nodeType":"RevertStatement","src":"21123:48:27"}]}}]},"documentation":{"id":8166,"nodeType":"StructuredDocumentation","src":"20647:312:27","text":" @dev Returns the downcasted int200 from int256, reverting on\n overflow (when the input is less than smallest int200 or\n greater than largest int200).\n Counterpart to Solidity's `int200` operator.\n Requirements:\n - input must fit into 200 bits"},"id":8191,"implemented":true,"kind":"function","modifiers":[],"name":"toInt200","nameLocation":"20973:8:27","nodeType":"FunctionDefinition","parameters":{"id":8169,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8168,"mutability":"mutable","name":"value","nameLocation":"20989:5:27","nodeType":"VariableDeclaration","scope":8191,"src":"20982:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8167,"name":"int256","nodeType":"ElementaryTypeName","src":"20982:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20981:14:27"},"returnParameters":{"id":8172,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8171,"mutability":"mutable","name":"downcasted","nameLocation":"21026:10:27","nodeType":"VariableDeclaration","scope":8191,"src":"21019:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"},"typeName":{"id":8170,"name":"int200","nodeType":"ElementaryTypeName","src":"21019:6:27","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"visibility":"internal"}],"src":"21018:19:27"},"scope":8846,"src":"20964:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8216,"nodeType":"Block","src":"21585:150:27","statements":[{"expression":{"id":8204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8199,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8197,"src":"21595:10:27","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8202,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8194,"src":"21615:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8201,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21608:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int192_$","typeString":"type(int192)"},"typeName":{"id":8200,"name":"int192","nodeType":"ElementaryTypeName","src":"21608:6:27","typeDescriptions":{}}},"id":8203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21608:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"src":"21595:26:27","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"id":8205,"nodeType":"ExpressionStatement","src":"21595:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8206,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8197,"src":"21635:10:27","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8207,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8194,"src":"21649:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21635:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8215,"nodeType":"IfStatement","src":"21631:98:27","trueBody":{"id":8214,"nodeType":"Block","src":"21656:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313932","id":8210,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21707:3:27","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},{"id":8211,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8194,"src":"21712:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8209,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"21677:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8212,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21677:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8213,"nodeType":"RevertStatement","src":"21670:48:27"}]}}]},"documentation":{"id":8192,"nodeType":"StructuredDocumentation","src":"21194:312:27","text":" @dev Returns the downcasted int192 from int256, reverting on\n overflow (when the input is less than smallest int192 or\n greater than largest int192).\n Counterpart to Solidity's `int192` operator.\n Requirements:\n - input must fit into 192 bits"},"id":8217,"implemented":true,"kind":"function","modifiers":[],"name":"toInt192","nameLocation":"21520:8:27","nodeType":"FunctionDefinition","parameters":{"id":8195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8194,"mutability":"mutable","name":"value","nameLocation":"21536:5:27","nodeType":"VariableDeclaration","scope":8217,"src":"21529:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8193,"name":"int256","nodeType":"ElementaryTypeName","src":"21529:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"21528:14:27"},"returnParameters":{"id":8198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8197,"mutability":"mutable","name":"downcasted","nameLocation":"21573:10:27","nodeType":"VariableDeclaration","scope":8217,"src":"21566:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"},"typeName":{"id":8196,"name":"int192","nodeType":"ElementaryTypeName","src":"21566:6:27","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"visibility":"internal"}],"src":"21565:19:27"},"scope":8846,"src":"21511:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8242,"nodeType":"Block","src":"22132:150:27","statements":[{"expression":{"id":8230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8225,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8223,"src":"22142:10:27","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8228,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8220,"src":"22162:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8227,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22155:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int184_$","typeString":"type(int184)"},"typeName":{"id":8226,"name":"int184","nodeType":"ElementaryTypeName","src":"22155:6:27","typeDescriptions":{}}},"id":8229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22155:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"src":"22142:26:27","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"id":8231,"nodeType":"ExpressionStatement","src":"22142:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8232,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8223,"src":"22182:10:27","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8233,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8220,"src":"22196:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22182:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8241,"nodeType":"IfStatement","src":"22178:98:27","trueBody":{"id":8240,"nodeType":"Block","src":"22203:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313834","id":8236,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22254:3:27","typeDescriptions":{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},"value":"184"},{"id":8237,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8220,"src":"22259:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8235,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"22224:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8238,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22224:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8239,"nodeType":"RevertStatement","src":"22217:48:27"}]}}]},"documentation":{"id":8218,"nodeType":"StructuredDocumentation","src":"21741:312:27","text":" @dev Returns the downcasted int184 from int256, reverting on\n overflow (when the input is less than smallest int184 or\n greater than largest int184).\n Counterpart to Solidity's `int184` operator.\n Requirements:\n - input must fit into 184 bits"},"id":8243,"implemented":true,"kind":"function","modifiers":[],"name":"toInt184","nameLocation":"22067:8:27","nodeType":"FunctionDefinition","parameters":{"id":8221,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8220,"mutability":"mutable","name":"value","nameLocation":"22083:5:27","nodeType":"VariableDeclaration","scope":8243,"src":"22076:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8219,"name":"int256","nodeType":"ElementaryTypeName","src":"22076:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"22075:14:27"},"returnParameters":{"id":8224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8223,"mutability":"mutable","name":"downcasted","nameLocation":"22120:10:27","nodeType":"VariableDeclaration","scope":8243,"src":"22113:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"},"typeName":{"id":8222,"name":"int184","nodeType":"ElementaryTypeName","src":"22113:6:27","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"visibility":"internal"}],"src":"22112:19:27"},"scope":8846,"src":"22058:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8268,"nodeType":"Block","src":"22679:150:27","statements":[{"expression":{"id":8256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8251,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8249,"src":"22689:10:27","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8254,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8246,"src":"22709:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8253,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22702:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int176_$","typeString":"type(int176)"},"typeName":{"id":8252,"name":"int176","nodeType":"ElementaryTypeName","src":"22702:6:27","typeDescriptions":{}}},"id":8255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22702:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"src":"22689:26:27","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"id":8257,"nodeType":"ExpressionStatement","src":"22689:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8258,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8249,"src":"22729:10:27","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8259,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8246,"src":"22743:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22729:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8267,"nodeType":"IfStatement","src":"22725:98:27","trueBody":{"id":8266,"nodeType":"Block","src":"22750:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313736","id":8262,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22801:3:27","typeDescriptions":{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},"value":"176"},{"id":8263,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8246,"src":"22806:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8261,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"22771:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8264,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22771:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8265,"nodeType":"RevertStatement","src":"22764:48:27"}]}}]},"documentation":{"id":8244,"nodeType":"StructuredDocumentation","src":"22288:312:27","text":" @dev Returns the downcasted int176 from int256, reverting on\n overflow (when the input is less than smallest int176 or\n greater than largest int176).\n Counterpart to Solidity's `int176` operator.\n Requirements:\n - input must fit into 176 bits"},"id":8269,"implemented":true,"kind":"function","modifiers":[],"name":"toInt176","nameLocation":"22614:8:27","nodeType":"FunctionDefinition","parameters":{"id":8247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8246,"mutability":"mutable","name":"value","nameLocation":"22630:5:27","nodeType":"VariableDeclaration","scope":8269,"src":"22623:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8245,"name":"int256","nodeType":"ElementaryTypeName","src":"22623:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"22622:14:27"},"returnParameters":{"id":8250,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8249,"mutability":"mutable","name":"downcasted","nameLocation":"22667:10:27","nodeType":"VariableDeclaration","scope":8269,"src":"22660:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"},"typeName":{"id":8248,"name":"int176","nodeType":"ElementaryTypeName","src":"22660:6:27","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"visibility":"internal"}],"src":"22659:19:27"},"scope":8846,"src":"22605:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8294,"nodeType":"Block","src":"23226:150:27","statements":[{"expression":{"id":8282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8277,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8275,"src":"23236:10:27","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8280,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8272,"src":"23256:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8279,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23249:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int168_$","typeString":"type(int168)"},"typeName":{"id":8278,"name":"int168","nodeType":"ElementaryTypeName","src":"23249:6:27","typeDescriptions":{}}},"id":8281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23249:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"src":"23236:26:27","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"id":8283,"nodeType":"ExpressionStatement","src":"23236:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8286,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8284,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8275,"src":"23276:10:27","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8285,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8272,"src":"23290:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"23276:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8293,"nodeType":"IfStatement","src":"23272:98:27","trueBody":{"id":8292,"nodeType":"Block","src":"23297:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313638","id":8288,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23348:3:27","typeDescriptions":{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},"value":"168"},{"id":8289,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8272,"src":"23353:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8287,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"23318:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8290,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23318:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8291,"nodeType":"RevertStatement","src":"23311:48:27"}]}}]},"documentation":{"id":8270,"nodeType":"StructuredDocumentation","src":"22835:312:27","text":" @dev Returns the downcasted int168 from int256, reverting on\n overflow (when the input is less than smallest int168 or\n greater than largest int168).\n Counterpart to Solidity's `int168` operator.\n Requirements:\n - input must fit into 168 bits"},"id":8295,"implemented":true,"kind":"function","modifiers":[],"name":"toInt168","nameLocation":"23161:8:27","nodeType":"FunctionDefinition","parameters":{"id":8273,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8272,"mutability":"mutable","name":"value","nameLocation":"23177:5:27","nodeType":"VariableDeclaration","scope":8295,"src":"23170:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8271,"name":"int256","nodeType":"ElementaryTypeName","src":"23170:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"23169:14:27"},"returnParameters":{"id":8276,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8275,"mutability":"mutable","name":"downcasted","nameLocation":"23214:10:27","nodeType":"VariableDeclaration","scope":8295,"src":"23207:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"},"typeName":{"id":8274,"name":"int168","nodeType":"ElementaryTypeName","src":"23207:6:27","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"visibility":"internal"}],"src":"23206:19:27"},"scope":8846,"src":"23152:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8320,"nodeType":"Block","src":"23773:150:27","statements":[{"expression":{"id":8308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8303,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8301,"src":"23783:10:27","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8306,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8298,"src":"23803:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8305,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23796:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int160_$","typeString":"type(int160)"},"typeName":{"id":8304,"name":"int160","nodeType":"ElementaryTypeName","src":"23796:6:27","typeDescriptions":{}}},"id":8307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23796:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"src":"23783:26:27","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"id":8309,"nodeType":"ExpressionStatement","src":"23783:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8310,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8301,"src":"23823:10:27","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8311,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8298,"src":"23837:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"23823:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8319,"nodeType":"IfStatement","src":"23819:98:27","trueBody":{"id":8318,"nodeType":"Block","src":"23844:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313630","id":8314,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23895:3:27","typeDescriptions":{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},"value":"160"},{"id":8315,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8298,"src":"23900:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8313,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"23865:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23865:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8317,"nodeType":"RevertStatement","src":"23858:48:27"}]}}]},"documentation":{"id":8296,"nodeType":"StructuredDocumentation","src":"23382:312:27","text":" @dev Returns the downcasted int160 from int256, reverting on\n overflow (when the input is less than smallest int160 or\n greater than largest int160).\n Counterpart to Solidity's `int160` operator.\n Requirements:\n - input must fit into 160 bits"},"id":8321,"implemented":true,"kind":"function","modifiers":[],"name":"toInt160","nameLocation":"23708:8:27","nodeType":"FunctionDefinition","parameters":{"id":8299,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8298,"mutability":"mutable","name":"value","nameLocation":"23724:5:27","nodeType":"VariableDeclaration","scope":8321,"src":"23717:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8297,"name":"int256","nodeType":"ElementaryTypeName","src":"23717:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"23716:14:27"},"returnParameters":{"id":8302,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8301,"mutability":"mutable","name":"downcasted","nameLocation":"23761:10:27","nodeType":"VariableDeclaration","scope":8321,"src":"23754:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"},"typeName":{"id":8300,"name":"int160","nodeType":"ElementaryTypeName","src":"23754:6:27","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"visibility":"internal"}],"src":"23753:19:27"},"scope":8846,"src":"23699:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8346,"nodeType":"Block","src":"24320:150:27","statements":[{"expression":{"id":8334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8329,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8327,"src":"24330:10:27","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8332,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8324,"src":"24350:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8331,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24343:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int152_$","typeString":"type(int152)"},"typeName":{"id":8330,"name":"int152","nodeType":"ElementaryTypeName","src":"24343:6:27","typeDescriptions":{}}},"id":8333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24343:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"src":"24330:26:27","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"id":8335,"nodeType":"ExpressionStatement","src":"24330:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8336,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8327,"src":"24370:10:27","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8337,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8324,"src":"24384:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"24370:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8345,"nodeType":"IfStatement","src":"24366:98:27","trueBody":{"id":8344,"nodeType":"Block","src":"24391:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313532","id":8340,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24442:3:27","typeDescriptions":{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},"value":"152"},{"id":8341,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8324,"src":"24447:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8339,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"24412:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24412:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8343,"nodeType":"RevertStatement","src":"24405:48:27"}]}}]},"documentation":{"id":8322,"nodeType":"StructuredDocumentation","src":"23929:312:27","text":" @dev Returns the downcasted int152 from int256, reverting on\n overflow (when the input is less than smallest int152 or\n greater than largest int152).\n Counterpart to Solidity's `int152` operator.\n Requirements:\n - input must fit into 152 bits"},"id":8347,"implemented":true,"kind":"function","modifiers":[],"name":"toInt152","nameLocation":"24255:8:27","nodeType":"FunctionDefinition","parameters":{"id":8325,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8324,"mutability":"mutable","name":"value","nameLocation":"24271:5:27","nodeType":"VariableDeclaration","scope":8347,"src":"24264:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8323,"name":"int256","nodeType":"ElementaryTypeName","src":"24264:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"24263:14:27"},"returnParameters":{"id":8328,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8327,"mutability":"mutable","name":"downcasted","nameLocation":"24308:10:27","nodeType":"VariableDeclaration","scope":8347,"src":"24301:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"},"typeName":{"id":8326,"name":"int152","nodeType":"ElementaryTypeName","src":"24301:6:27","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"visibility":"internal"}],"src":"24300:19:27"},"scope":8846,"src":"24246:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8372,"nodeType":"Block","src":"24867:150:27","statements":[{"expression":{"id":8360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8355,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8353,"src":"24877:10:27","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8358,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8350,"src":"24897:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8357,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24890:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int144_$","typeString":"type(int144)"},"typeName":{"id":8356,"name":"int144","nodeType":"ElementaryTypeName","src":"24890:6:27","typeDescriptions":{}}},"id":8359,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24890:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"src":"24877:26:27","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"id":8361,"nodeType":"ExpressionStatement","src":"24877:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8362,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8353,"src":"24917:10:27","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8363,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8350,"src":"24931:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"24917:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8371,"nodeType":"IfStatement","src":"24913:98:27","trueBody":{"id":8370,"nodeType":"Block","src":"24938:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313434","id":8366,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24989:3:27","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},"value":"144"},{"id":8367,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8350,"src":"24994:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8365,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"24959:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8368,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24959:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8369,"nodeType":"RevertStatement","src":"24952:48:27"}]}}]},"documentation":{"id":8348,"nodeType":"StructuredDocumentation","src":"24476:312:27","text":" @dev Returns the downcasted int144 from int256, reverting on\n overflow (when the input is less than smallest int144 or\n greater than largest int144).\n Counterpart to Solidity's `int144` operator.\n Requirements:\n - input must fit into 144 bits"},"id":8373,"implemented":true,"kind":"function","modifiers":[],"name":"toInt144","nameLocation":"24802:8:27","nodeType":"FunctionDefinition","parameters":{"id":8351,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8350,"mutability":"mutable","name":"value","nameLocation":"24818:5:27","nodeType":"VariableDeclaration","scope":8373,"src":"24811:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8349,"name":"int256","nodeType":"ElementaryTypeName","src":"24811:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"24810:14:27"},"returnParameters":{"id":8354,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8353,"mutability":"mutable","name":"downcasted","nameLocation":"24855:10:27","nodeType":"VariableDeclaration","scope":8373,"src":"24848:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"},"typeName":{"id":8352,"name":"int144","nodeType":"ElementaryTypeName","src":"24848:6:27","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"visibility":"internal"}],"src":"24847:19:27"},"scope":8846,"src":"24793:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8398,"nodeType":"Block","src":"25414:150:27","statements":[{"expression":{"id":8386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8381,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8379,"src":"25424:10:27","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8384,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8376,"src":"25444:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8383,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25437:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int136_$","typeString":"type(int136)"},"typeName":{"id":8382,"name":"int136","nodeType":"ElementaryTypeName","src":"25437:6:27","typeDescriptions":{}}},"id":8385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25437:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"src":"25424:26:27","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"id":8387,"nodeType":"ExpressionStatement","src":"25424:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8390,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8388,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8379,"src":"25464:10:27","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8389,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8376,"src":"25478:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"25464:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8397,"nodeType":"IfStatement","src":"25460:98:27","trueBody":{"id":8396,"nodeType":"Block","src":"25485:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313336","id":8392,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25536:3:27","typeDescriptions":{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},"value":"136"},{"id":8393,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8376,"src":"25541:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8391,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"25506:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8394,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25506:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8395,"nodeType":"RevertStatement","src":"25499:48:27"}]}}]},"documentation":{"id":8374,"nodeType":"StructuredDocumentation","src":"25023:312:27","text":" @dev Returns the downcasted int136 from int256, reverting on\n overflow (when the input is less than smallest int136 or\n greater than largest int136).\n Counterpart to Solidity's `int136` operator.\n Requirements:\n - input must fit into 136 bits"},"id":8399,"implemented":true,"kind":"function","modifiers":[],"name":"toInt136","nameLocation":"25349:8:27","nodeType":"FunctionDefinition","parameters":{"id":8377,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8376,"mutability":"mutable","name":"value","nameLocation":"25365:5:27","nodeType":"VariableDeclaration","scope":8399,"src":"25358:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8375,"name":"int256","nodeType":"ElementaryTypeName","src":"25358:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"25357:14:27"},"returnParameters":{"id":8380,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8379,"mutability":"mutable","name":"downcasted","nameLocation":"25402:10:27","nodeType":"VariableDeclaration","scope":8399,"src":"25395:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"},"typeName":{"id":8378,"name":"int136","nodeType":"ElementaryTypeName","src":"25395:6:27","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"visibility":"internal"}],"src":"25394:19:27"},"scope":8846,"src":"25340:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8424,"nodeType":"Block","src":"25961:150:27","statements":[{"expression":{"id":8412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8407,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8405,"src":"25971:10:27","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8410,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8402,"src":"25991:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8409,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25984:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int128_$","typeString":"type(int128)"},"typeName":{"id":8408,"name":"int128","nodeType":"ElementaryTypeName","src":"25984:6:27","typeDescriptions":{}}},"id":8411,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25984:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"src":"25971:26:27","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"id":8413,"nodeType":"ExpressionStatement","src":"25971:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8414,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8405,"src":"26011:10:27","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8415,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8402,"src":"26025:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"26011:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8423,"nodeType":"IfStatement","src":"26007:98:27","trueBody":{"id":8422,"nodeType":"Block","src":"26032:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313238","id":8418,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26083:3:27","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},{"id":8419,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8402,"src":"26088:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8417,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"26053:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26053:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8421,"nodeType":"RevertStatement","src":"26046:48:27"}]}}]},"documentation":{"id":8400,"nodeType":"StructuredDocumentation","src":"25570:312:27","text":" @dev Returns the downcasted int128 from int256, reverting on\n overflow (when the input is less than smallest int128 or\n greater than largest int128).\n Counterpart to Solidity's `int128` operator.\n Requirements:\n - input must fit into 128 bits"},"id":8425,"implemented":true,"kind":"function","modifiers":[],"name":"toInt128","nameLocation":"25896:8:27","nodeType":"FunctionDefinition","parameters":{"id":8403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8402,"mutability":"mutable","name":"value","nameLocation":"25912:5:27","nodeType":"VariableDeclaration","scope":8425,"src":"25905:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8401,"name":"int256","nodeType":"ElementaryTypeName","src":"25905:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"25904:14:27"},"returnParameters":{"id":8406,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8405,"mutability":"mutable","name":"downcasted","nameLocation":"25949:10:27","nodeType":"VariableDeclaration","scope":8425,"src":"25942:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"},"typeName":{"id":8404,"name":"int128","nodeType":"ElementaryTypeName","src":"25942:6:27","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"visibility":"internal"}],"src":"25941:19:27"},"scope":8846,"src":"25887:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8450,"nodeType":"Block","src":"26508:150:27","statements":[{"expression":{"id":8438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8433,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8431,"src":"26518:10:27","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8436,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8428,"src":"26538:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8435,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"26531:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int120_$","typeString":"type(int120)"},"typeName":{"id":8434,"name":"int120","nodeType":"ElementaryTypeName","src":"26531:6:27","typeDescriptions":{}}},"id":8437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26531:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"src":"26518:26:27","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"id":8439,"nodeType":"ExpressionStatement","src":"26518:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8440,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8431,"src":"26558:10:27","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8441,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8428,"src":"26572:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"26558:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8449,"nodeType":"IfStatement","src":"26554:98:27","trueBody":{"id":8448,"nodeType":"Block","src":"26579:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313230","id":8444,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26630:3:27","typeDescriptions":{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},"value":"120"},{"id":8445,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8428,"src":"26635:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8443,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"26600:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26600:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8447,"nodeType":"RevertStatement","src":"26593:48:27"}]}}]},"documentation":{"id":8426,"nodeType":"StructuredDocumentation","src":"26117:312:27","text":" @dev Returns the downcasted int120 from int256, reverting on\n overflow (when the input is less than smallest int120 or\n greater than largest int120).\n Counterpart to Solidity's `int120` operator.\n Requirements:\n - input must fit into 120 bits"},"id":8451,"implemented":true,"kind":"function","modifiers":[],"name":"toInt120","nameLocation":"26443:8:27","nodeType":"FunctionDefinition","parameters":{"id":8429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8428,"mutability":"mutable","name":"value","nameLocation":"26459:5:27","nodeType":"VariableDeclaration","scope":8451,"src":"26452:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8427,"name":"int256","nodeType":"ElementaryTypeName","src":"26452:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"26451:14:27"},"returnParameters":{"id":8432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8431,"mutability":"mutable","name":"downcasted","nameLocation":"26496:10:27","nodeType":"VariableDeclaration","scope":8451,"src":"26489:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"},"typeName":{"id":8430,"name":"int120","nodeType":"ElementaryTypeName","src":"26489:6:27","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"visibility":"internal"}],"src":"26488:19:27"},"scope":8846,"src":"26434:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8476,"nodeType":"Block","src":"27055:150:27","statements":[{"expression":{"id":8464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8459,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8457,"src":"27065:10:27","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8462,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8454,"src":"27085:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8461,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27078:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int112_$","typeString":"type(int112)"},"typeName":{"id":8460,"name":"int112","nodeType":"ElementaryTypeName","src":"27078:6:27","typeDescriptions":{}}},"id":8463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27078:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"src":"27065:26:27","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"id":8465,"nodeType":"ExpressionStatement","src":"27065:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8466,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8457,"src":"27105:10:27","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8467,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8454,"src":"27119:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"27105:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8475,"nodeType":"IfStatement","src":"27101:98:27","trueBody":{"id":8474,"nodeType":"Block","src":"27126:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313132","id":8470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27177:3:27","typeDescriptions":{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},"value":"112"},{"id":8471,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8454,"src":"27182:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8469,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"27147:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27147:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8473,"nodeType":"RevertStatement","src":"27140:48:27"}]}}]},"documentation":{"id":8452,"nodeType":"StructuredDocumentation","src":"26664:312:27","text":" @dev Returns the downcasted int112 from int256, reverting on\n overflow (when the input is less than smallest int112 or\n greater than largest int112).\n Counterpart to Solidity's `int112` operator.\n Requirements:\n - input must fit into 112 bits"},"id":8477,"implemented":true,"kind":"function","modifiers":[],"name":"toInt112","nameLocation":"26990:8:27","nodeType":"FunctionDefinition","parameters":{"id":8455,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8454,"mutability":"mutable","name":"value","nameLocation":"27006:5:27","nodeType":"VariableDeclaration","scope":8477,"src":"26999:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8453,"name":"int256","nodeType":"ElementaryTypeName","src":"26999:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"26998:14:27"},"returnParameters":{"id":8458,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8457,"mutability":"mutable","name":"downcasted","nameLocation":"27043:10:27","nodeType":"VariableDeclaration","scope":8477,"src":"27036:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"},"typeName":{"id":8456,"name":"int112","nodeType":"ElementaryTypeName","src":"27036:6:27","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"visibility":"internal"}],"src":"27035:19:27"},"scope":8846,"src":"26981:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8502,"nodeType":"Block","src":"27602:150:27","statements":[{"expression":{"id":8490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8485,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8483,"src":"27612:10:27","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8488,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8480,"src":"27632:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8487,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27625:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int104_$","typeString":"type(int104)"},"typeName":{"id":8486,"name":"int104","nodeType":"ElementaryTypeName","src":"27625:6:27","typeDescriptions":{}}},"id":8489,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27625:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"src":"27612:26:27","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"id":8491,"nodeType":"ExpressionStatement","src":"27612:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8492,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8483,"src":"27652:10:27","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8493,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8480,"src":"27666:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"27652:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8501,"nodeType":"IfStatement","src":"27648:98:27","trueBody":{"id":8500,"nodeType":"Block","src":"27673:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313034","id":8496,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27724:3:27","typeDescriptions":{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},"value":"104"},{"id":8497,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8480,"src":"27729:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8495,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"27694:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8498,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27694:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8499,"nodeType":"RevertStatement","src":"27687:48:27"}]}}]},"documentation":{"id":8478,"nodeType":"StructuredDocumentation","src":"27211:312:27","text":" @dev Returns the downcasted int104 from int256, reverting on\n overflow (when the input is less than smallest int104 or\n greater than largest int104).\n Counterpart to Solidity's `int104` operator.\n Requirements:\n - input must fit into 104 bits"},"id":8503,"implemented":true,"kind":"function","modifiers":[],"name":"toInt104","nameLocation":"27537:8:27","nodeType":"FunctionDefinition","parameters":{"id":8481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8480,"mutability":"mutable","name":"value","nameLocation":"27553:5:27","nodeType":"VariableDeclaration","scope":8503,"src":"27546:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8479,"name":"int256","nodeType":"ElementaryTypeName","src":"27546:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"27545:14:27"},"returnParameters":{"id":8484,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8483,"mutability":"mutable","name":"downcasted","nameLocation":"27590:10:27","nodeType":"VariableDeclaration","scope":8503,"src":"27583:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"},"typeName":{"id":8482,"name":"int104","nodeType":"ElementaryTypeName","src":"27583:6:27","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"visibility":"internal"}],"src":"27582:19:27"},"scope":8846,"src":"27528:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8528,"nodeType":"Block","src":"28142:148:27","statements":[{"expression":{"id":8516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8511,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8509,"src":"28152:10:27","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8514,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8506,"src":"28171:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8513,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28165:5:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int96_$","typeString":"type(int96)"},"typeName":{"id":8512,"name":"int96","nodeType":"ElementaryTypeName","src":"28165:5:27","typeDescriptions":{}}},"id":8515,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28165:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"src":"28152:25:27","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"id":8517,"nodeType":"ExpressionStatement","src":"28152:25:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8518,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8509,"src":"28191:10:27","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8519,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8506,"src":"28205:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"28191:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8527,"nodeType":"IfStatement","src":"28187:97:27","trueBody":{"id":8526,"nodeType":"Block","src":"28212:72:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3936","id":8522,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28263:2:27","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"value":"96"},{"id":8523,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8506,"src":"28267:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8521,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"28233:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28233:40:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8525,"nodeType":"RevertStatement","src":"28226:47:27"}]}}]},"documentation":{"id":8504,"nodeType":"StructuredDocumentation","src":"27758:307:27","text":" @dev Returns the downcasted int96 from int256, reverting on\n overflow (when the input is less than smallest int96 or\n greater than largest int96).\n Counterpart to Solidity's `int96` operator.\n Requirements:\n - input must fit into 96 bits"},"id":8529,"implemented":true,"kind":"function","modifiers":[],"name":"toInt96","nameLocation":"28079:7:27","nodeType":"FunctionDefinition","parameters":{"id":8507,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8506,"mutability":"mutable","name":"value","nameLocation":"28094:5:27","nodeType":"VariableDeclaration","scope":8529,"src":"28087:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8505,"name":"int256","nodeType":"ElementaryTypeName","src":"28087:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"28086:14:27"},"returnParameters":{"id":8510,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8509,"mutability":"mutable","name":"downcasted","nameLocation":"28130:10:27","nodeType":"VariableDeclaration","scope":8529,"src":"28124:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"},"typeName":{"id":8508,"name":"int96","nodeType":"ElementaryTypeName","src":"28124:5:27","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"visibility":"internal"}],"src":"28123:18:27"},"scope":8846,"src":"28070:220:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8554,"nodeType":"Block","src":"28680:148:27","statements":[{"expression":{"id":8542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8537,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8535,"src":"28690:10:27","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8540,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8532,"src":"28709:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8539,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28703:5:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int88_$","typeString":"type(int88)"},"typeName":{"id":8538,"name":"int88","nodeType":"ElementaryTypeName","src":"28703:5:27","typeDescriptions":{}}},"id":8541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28703:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"src":"28690:25:27","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"id":8543,"nodeType":"ExpressionStatement","src":"28690:25:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8544,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8535,"src":"28729:10:27","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8545,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8532,"src":"28743:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"28729:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8553,"nodeType":"IfStatement","src":"28725:97:27","trueBody":{"id":8552,"nodeType":"Block","src":"28750:72:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3838","id":8548,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28801:2:27","typeDescriptions":{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},"value":"88"},{"id":8549,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8532,"src":"28805:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8547,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"28771:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28771:40:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8551,"nodeType":"RevertStatement","src":"28764:47:27"}]}}]},"documentation":{"id":8530,"nodeType":"StructuredDocumentation","src":"28296:307:27","text":" @dev Returns the downcasted int88 from int256, reverting on\n overflow (when the input is less than smallest int88 or\n greater than largest int88).\n Counterpart to Solidity's `int88` operator.\n Requirements:\n - input must fit into 88 bits"},"id":8555,"implemented":true,"kind":"function","modifiers":[],"name":"toInt88","nameLocation":"28617:7:27","nodeType":"FunctionDefinition","parameters":{"id":8533,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8532,"mutability":"mutable","name":"value","nameLocation":"28632:5:27","nodeType":"VariableDeclaration","scope":8555,"src":"28625:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8531,"name":"int256","nodeType":"ElementaryTypeName","src":"28625:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"28624:14:27"},"returnParameters":{"id":8536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8535,"mutability":"mutable","name":"downcasted","nameLocation":"28668:10:27","nodeType":"VariableDeclaration","scope":8555,"src":"28662:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"},"typeName":{"id":8534,"name":"int88","nodeType":"ElementaryTypeName","src":"28662:5:27","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"visibility":"internal"}],"src":"28661:18:27"},"scope":8846,"src":"28608:220:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8580,"nodeType":"Block","src":"29218:148:27","statements":[{"expression":{"id":8568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8563,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8561,"src":"29228:10:27","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8566,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8558,"src":"29247:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8565,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29241:5:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int80_$","typeString":"type(int80)"},"typeName":{"id":8564,"name":"int80","nodeType":"ElementaryTypeName","src":"29241:5:27","typeDescriptions":{}}},"id":8567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29241:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"src":"29228:25:27","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"id":8569,"nodeType":"ExpressionStatement","src":"29228:25:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8570,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8561,"src":"29267:10:27","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8571,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8558,"src":"29281:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"29267:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8579,"nodeType":"IfStatement","src":"29263:97:27","trueBody":{"id":8578,"nodeType":"Block","src":"29288:72:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3830","id":8574,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29339:2:27","typeDescriptions":{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},"value":"80"},{"id":8575,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8558,"src":"29343:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8573,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"29309:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8576,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29309:40:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8577,"nodeType":"RevertStatement","src":"29302:47:27"}]}}]},"documentation":{"id":8556,"nodeType":"StructuredDocumentation","src":"28834:307:27","text":" @dev Returns the downcasted int80 from int256, reverting on\n overflow (when the input is less than smallest int80 or\n greater than largest int80).\n Counterpart to Solidity's `int80` operator.\n Requirements:\n - input must fit into 80 bits"},"id":8581,"implemented":true,"kind":"function","modifiers":[],"name":"toInt80","nameLocation":"29155:7:27","nodeType":"FunctionDefinition","parameters":{"id":8559,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8558,"mutability":"mutable","name":"value","nameLocation":"29170:5:27","nodeType":"VariableDeclaration","scope":8581,"src":"29163:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8557,"name":"int256","nodeType":"ElementaryTypeName","src":"29163:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"29162:14:27"},"returnParameters":{"id":8562,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8561,"mutability":"mutable","name":"downcasted","nameLocation":"29206:10:27","nodeType":"VariableDeclaration","scope":8581,"src":"29200:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"},"typeName":{"id":8560,"name":"int80","nodeType":"ElementaryTypeName","src":"29200:5:27","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"visibility":"internal"}],"src":"29199:18:27"},"scope":8846,"src":"29146:220:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8606,"nodeType":"Block","src":"29756:148:27","statements":[{"expression":{"id":8594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8589,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8587,"src":"29766:10:27","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8592,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8584,"src":"29785:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8591,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29779:5:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int72_$","typeString":"type(int72)"},"typeName":{"id":8590,"name":"int72","nodeType":"ElementaryTypeName","src":"29779:5:27","typeDescriptions":{}}},"id":8593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29779:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"src":"29766:25:27","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"id":8595,"nodeType":"ExpressionStatement","src":"29766:25:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8598,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8596,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8587,"src":"29805:10:27","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8597,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8584,"src":"29819:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"29805:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8605,"nodeType":"IfStatement","src":"29801:97:27","trueBody":{"id":8604,"nodeType":"Block","src":"29826:72:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3732","id":8600,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29877:2:27","typeDescriptions":{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},"value":"72"},{"id":8601,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8584,"src":"29881:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8599,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"29847:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29847:40:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8603,"nodeType":"RevertStatement","src":"29840:47:27"}]}}]},"documentation":{"id":8582,"nodeType":"StructuredDocumentation","src":"29372:307:27","text":" @dev Returns the downcasted int72 from int256, reverting on\n overflow (when the input is less than smallest int72 or\n greater than largest int72).\n Counterpart to Solidity's `int72` operator.\n Requirements:\n - input must fit into 72 bits"},"id":8607,"implemented":true,"kind":"function","modifiers":[],"name":"toInt72","nameLocation":"29693:7:27","nodeType":"FunctionDefinition","parameters":{"id":8585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8584,"mutability":"mutable","name":"value","nameLocation":"29708:5:27","nodeType":"VariableDeclaration","scope":8607,"src":"29701:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8583,"name":"int256","nodeType":"ElementaryTypeName","src":"29701:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"29700:14:27"},"returnParameters":{"id":8588,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8587,"mutability":"mutable","name":"downcasted","nameLocation":"29744:10:27","nodeType":"VariableDeclaration","scope":8607,"src":"29738:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"},"typeName":{"id":8586,"name":"int72","nodeType":"ElementaryTypeName","src":"29738:5:27","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"visibility":"internal"}],"src":"29737:18:27"},"scope":8846,"src":"29684:220:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8632,"nodeType":"Block","src":"30294:148:27","statements":[{"expression":{"id":8620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8615,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8613,"src":"30304:10:27","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8618,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8610,"src":"30323:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8617,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30317:5:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int64_$","typeString":"type(int64)"},"typeName":{"id":8616,"name":"int64","nodeType":"ElementaryTypeName","src":"30317:5:27","typeDescriptions":{}}},"id":8619,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30317:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"src":"30304:25:27","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"id":8621,"nodeType":"ExpressionStatement","src":"30304:25:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8622,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8613,"src":"30343:10:27","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8623,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8610,"src":"30357:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"30343:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8631,"nodeType":"IfStatement","src":"30339:97:27","trueBody":{"id":8630,"nodeType":"Block","src":"30364:72:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3634","id":8626,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30415:2:27","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},{"id":8627,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8610,"src":"30419:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8625,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"30385:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30385:40:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8629,"nodeType":"RevertStatement","src":"30378:47:27"}]}}]},"documentation":{"id":8608,"nodeType":"StructuredDocumentation","src":"29910:307:27","text":" @dev Returns the downcasted int64 from int256, reverting on\n overflow (when the input is less than smallest int64 or\n greater than largest int64).\n Counterpart to Solidity's `int64` operator.\n Requirements:\n - input must fit into 64 bits"},"id":8633,"implemented":true,"kind":"function","modifiers":[],"name":"toInt64","nameLocation":"30231:7:27","nodeType":"FunctionDefinition","parameters":{"id":8611,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8610,"mutability":"mutable","name":"value","nameLocation":"30246:5:27","nodeType":"VariableDeclaration","scope":8633,"src":"30239:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8609,"name":"int256","nodeType":"ElementaryTypeName","src":"30239:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"30238:14:27"},"returnParameters":{"id":8614,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8613,"mutability":"mutable","name":"downcasted","nameLocation":"30282:10:27","nodeType":"VariableDeclaration","scope":8633,"src":"30276:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"},"typeName":{"id":8612,"name":"int64","nodeType":"ElementaryTypeName","src":"30276:5:27","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"visibility":"internal"}],"src":"30275:18:27"},"scope":8846,"src":"30222:220:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8658,"nodeType":"Block","src":"30832:148:27","statements":[{"expression":{"id":8646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8641,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8639,"src":"30842:10:27","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8644,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8636,"src":"30861:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8643,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30855:5:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int56_$","typeString":"type(int56)"},"typeName":{"id":8642,"name":"int56","nodeType":"ElementaryTypeName","src":"30855:5:27","typeDescriptions":{}}},"id":8645,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30855:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"src":"30842:25:27","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"id":8647,"nodeType":"ExpressionStatement","src":"30842:25:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8648,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8639,"src":"30881:10:27","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8649,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8636,"src":"30895:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"30881:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8657,"nodeType":"IfStatement","src":"30877:97:27","trueBody":{"id":8656,"nodeType":"Block","src":"30902:72:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3536","id":8652,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30953:2:27","typeDescriptions":{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},"value":"56"},{"id":8653,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8636,"src":"30957:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8651,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"30923:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30923:40:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8655,"nodeType":"RevertStatement","src":"30916:47:27"}]}}]},"documentation":{"id":8634,"nodeType":"StructuredDocumentation","src":"30448:307:27","text":" @dev Returns the downcasted int56 from int256, reverting on\n overflow (when the input is less than smallest int56 or\n greater than largest int56).\n Counterpart to Solidity's `int56` operator.\n Requirements:\n - input must fit into 56 bits"},"id":8659,"implemented":true,"kind":"function","modifiers":[],"name":"toInt56","nameLocation":"30769:7:27","nodeType":"FunctionDefinition","parameters":{"id":8637,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8636,"mutability":"mutable","name":"value","nameLocation":"30784:5:27","nodeType":"VariableDeclaration","scope":8659,"src":"30777:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8635,"name":"int256","nodeType":"ElementaryTypeName","src":"30777:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"30776:14:27"},"returnParameters":{"id":8640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8639,"mutability":"mutable","name":"downcasted","nameLocation":"30820:10:27","nodeType":"VariableDeclaration","scope":8659,"src":"30814:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"},"typeName":{"id":8638,"name":"int56","nodeType":"ElementaryTypeName","src":"30814:5:27","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"visibility":"internal"}],"src":"30813:18:27"},"scope":8846,"src":"30760:220:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8684,"nodeType":"Block","src":"31370:148:27","statements":[{"expression":{"id":8672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8667,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8665,"src":"31380:10:27","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8670,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8662,"src":"31399:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8669,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31393:5:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int48_$","typeString":"type(int48)"},"typeName":{"id":8668,"name":"int48","nodeType":"ElementaryTypeName","src":"31393:5:27","typeDescriptions":{}}},"id":8671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31393:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"src":"31380:25:27","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"id":8673,"nodeType":"ExpressionStatement","src":"31380:25:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8674,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8665,"src":"31419:10:27","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8675,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8662,"src":"31433:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"31419:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8683,"nodeType":"IfStatement","src":"31415:97:27","trueBody":{"id":8682,"nodeType":"Block","src":"31440:72:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3438","id":8678,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31491:2:27","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},{"id":8679,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8662,"src":"31495:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8677,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"31461:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31461:40:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8681,"nodeType":"RevertStatement","src":"31454:47:27"}]}}]},"documentation":{"id":8660,"nodeType":"StructuredDocumentation","src":"30986:307:27","text":" @dev Returns the downcasted int48 from int256, reverting on\n overflow (when the input is less than smallest int48 or\n greater than largest int48).\n Counterpart to Solidity's `int48` operator.\n Requirements:\n - input must fit into 48 bits"},"id":8685,"implemented":true,"kind":"function","modifiers":[],"name":"toInt48","nameLocation":"31307:7:27","nodeType":"FunctionDefinition","parameters":{"id":8663,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8662,"mutability":"mutable","name":"value","nameLocation":"31322:5:27","nodeType":"VariableDeclaration","scope":8685,"src":"31315:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8661,"name":"int256","nodeType":"ElementaryTypeName","src":"31315:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"31314:14:27"},"returnParameters":{"id":8666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8665,"mutability":"mutable","name":"downcasted","nameLocation":"31358:10:27","nodeType":"VariableDeclaration","scope":8685,"src":"31352:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"},"typeName":{"id":8664,"name":"int48","nodeType":"ElementaryTypeName","src":"31352:5:27","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"visibility":"internal"}],"src":"31351:18:27"},"scope":8846,"src":"31298:220:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8710,"nodeType":"Block","src":"31908:148:27","statements":[{"expression":{"id":8698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8693,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8691,"src":"31918:10:27","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8696,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8688,"src":"31937:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8695,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31931:5:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int40_$","typeString":"type(int40)"},"typeName":{"id":8694,"name":"int40","nodeType":"ElementaryTypeName","src":"31931:5:27","typeDescriptions":{}}},"id":8697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31931:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"src":"31918:25:27","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"id":8699,"nodeType":"ExpressionStatement","src":"31918:25:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8700,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8691,"src":"31957:10:27","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8701,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8688,"src":"31971:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"31957:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8709,"nodeType":"IfStatement","src":"31953:97:27","trueBody":{"id":8708,"nodeType":"Block","src":"31978:72:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3430","id":8704,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32029:2:27","typeDescriptions":{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},"value":"40"},{"id":8705,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8688,"src":"32033:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8703,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"31999:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31999:40:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8707,"nodeType":"RevertStatement","src":"31992:47:27"}]}}]},"documentation":{"id":8686,"nodeType":"StructuredDocumentation","src":"31524:307:27","text":" @dev Returns the downcasted int40 from int256, reverting on\n overflow (when the input is less than smallest int40 or\n greater than largest int40).\n Counterpart to Solidity's `int40` operator.\n Requirements:\n - input must fit into 40 bits"},"id":8711,"implemented":true,"kind":"function","modifiers":[],"name":"toInt40","nameLocation":"31845:7:27","nodeType":"FunctionDefinition","parameters":{"id":8689,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8688,"mutability":"mutable","name":"value","nameLocation":"31860:5:27","nodeType":"VariableDeclaration","scope":8711,"src":"31853:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8687,"name":"int256","nodeType":"ElementaryTypeName","src":"31853:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"31852:14:27"},"returnParameters":{"id":8692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8691,"mutability":"mutable","name":"downcasted","nameLocation":"31896:10:27","nodeType":"VariableDeclaration","scope":8711,"src":"31890:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"},"typeName":{"id":8690,"name":"int40","nodeType":"ElementaryTypeName","src":"31890:5:27","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"visibility":"internal"}],"src":"31889:18:27"},"scope":8846,"src":"31836:220:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8736,"nodeType":"Block","src":"32446:148:27","statements":[{"expression":{"id":8724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8719,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8717,"src":"32456:10:27","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8722,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8714,"src":"32475:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8721,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32469:5:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int32_$","typeString":"type(int32)"},"typeName":{"id":8720,"name":"int32","nodeType":"ElementaryTypeName","src":"32469:5:27","typeDescriptions":{}}},"id":8723,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32469:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"src":"32456:25:27","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"id":8725,"nodeType":"ExpressionStatement","src":"32456:25:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8726,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8717,"src":"32495:10:27","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8727,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8714,"src":"32509:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"32495:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8735,"nodeType":"IfStatement","src":"32491:97:27","trueBody":{"id":8734,"nodeType":"Block","src":"32516:72:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3332","id":8730,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32567:2:27","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"id":8731,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8714,"src":"32571:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8729,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"32537:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8732,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32537:40:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8733,"nodeType":"RevertStatement","src":"32530:47:27"}]}}]},"documentation":{"id":8712,"nodeType":"StructuredDocumentation","src":"32062:307:27","text":" @dev Returns the downcasted int32 from int256, reverting on\n overflow (when the input is less than smallest int32 or\n greater than largest int32).\n Counterpart to Solidity's `int32` operator.\n Requirements:\n - input must fit into 32 bits"},"id":8737,"implemented":true,"kind":"function","modifiers":[],"name":"toInt32","nameLocation":"32383:7:27","nodeType":"FunctionDefinition","parameters":{"id":8715,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8714,"mutability":"mutable","name":"value","nameLocation":"32398:5:27","nodeType":"VariableDeclaration","scope":8737,"src":"32391:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8713,"name":"int256","nodeType":"ElementaryTypeName","src":"32391:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"32390:14:27"},"returnParameters":{"id":8718,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8717,"mutability":"mutable","name":"downcasted","nameLocation":"32434:10:27","nodeType":"VariableDeclaration","scope":8737,"src":"32428:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"},"typeName":{"id":8716,"name":"int32","nodeType":"ElementaryTypeName","src":"32428:5:27","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"visibility":"internal"}],"src":"32427:18:27"},"scope":8846,"src":"32374:220:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8762,"nodeType":"Block","src":"32984:148:27","statements":[{"expression":{"id":8750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8745,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8743,"src":"32994:10:27","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8748,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8740,"src":"33013:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8747,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33007:5:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int24_$","typeString":"type(int24)"},"typeName":{"id":8746,"name":"int24","nodeType":"ElementaryTypeName","src":"33007:5:27","typeDescriptions":{}}},"id":8749,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33007:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"src":"32994:25:27","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"id":8751,"nodeType":"ExpressionStatement","src":"32994:25:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8752,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8743,"src":"33033:10:27","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8753,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8740,"src":"33047:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"33033:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8761,"nodeType":"IfStatement","src":"33029:97:27","trueBody":{"id":8760,"nodeType":"Block","src":"33054:72:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3234","id":8756,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33105:2:27","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},{"id":8757,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8740,"src":"33109:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8755,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"33075:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8758,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33075:40:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8759,"nodeType":"RevertStatement","src":"33068:47:27"}]}}]},"documentation":{"id":8738,"nodeType":"StructuredDocumentation","src":"32600:307:27","text":" @dev Returns the downcasted int24 from int256, reverting on\n overflow (when the input is less than smallest int24 or\n greater than largest int24).\n Counterpart to Solidity's `int24` operator.\n Requirements:\n - input must fit into 24 bits"},"id":8763,"implemented":true,"kind":"function","modifiers":[],"name":"toInt24","nameLocation":"32921:7:27","nodeType":"FunctionDefinition","parameters":{"id":8741,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8740,"mutability":"mutable","name":"value","nameLocation":"32936:5:27","nodeType":"VariableDeclaration","scope":8763,"src":"32929:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8739,"name":"int256","nodeType":"ElementaryTypeName","src":"32929:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"32928:14:27"},"returnParameters":{"id":8744,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8743,"mutability":"mutable","name":"downcasted","nameLocation":"32972:10:27","nodeType":"VariableDeclaration","scope":8763,"src":"32966:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"},"typeName":{"id":8742,"name":"int24","nodeType":"ElementaryTypeName","src":"32966:5:27","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"visibility":"internal"}],"src":"32965:18:27"},"scope":8846,"src":"32912:220:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8788,"nodeType":"Block","src":"33522:148:27","statements":[{"expression":{"id":8776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8771,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8769,"src":"33532:10:27","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8774,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8766,"src":"33551:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8773,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33545:5:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int16_$","typeString":"type(int16)"},"typeName":{"id":8772,"name":"int16","nodeType":"ElementaryTypeName","src":"33545:5:27","typeDescriptions":{}}},"id":8775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33545:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"src":"33532:25:27","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"id":8777,"nodeType":"ExpressionStatement","src":"33532:25:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8778,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8769,"src":"33571:10:27","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8779,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8766,"src":"33585:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"33571:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8787,"nodeType":"IfStatement","src":"33567:97:27","trueBody":{"id":8786,"nodeType":"Block","src":"33592:72:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3136","id":8782,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33643:2:27","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},{"id":8783,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8766,"src":"33647:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8781,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"33613:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33613:40:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8785,"nodeType":"RevertStatement","src":"33606:47:27"}]}}]},"documentation":{"id":8764,"nodeType":"StructuredDocumentation","src":"33138:307:27","text":" @dev Returns the downcasted int16 from int256, reverting on\n overflow (when the input is less than smallest int16 or\n greater than largest int16).\n Counterpart to Solidity's `int16` operator.\n Requirements:\n - input must fit into 16 bits"},"id":8789,"implemented":true,"kind":"function","modifiers":[],"name":"toInt16","nameLocation":"33459:7:27","nodeType":"FunctionDefinition","parameters":{"id":8767,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8766,"mutability":"mutable","name":"value","nameLocation":"33474:5:27","nodeType":"VariableDeclaration","scope":8789,"src":"33467:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8765,"name":"int256","nodeType":"ElementaryTypeName","src":"33467:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"33466:14:27"},"returnParameters":{"id":8770,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8769,"mutability":"mutable","name":"downcasted","nameLocation":"33510:10:27","nodeType":"VariableDeclaration","scope":8789,"src":"33504:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"},"typeName":{"id":8768,"name":"int16","nodeType":"ElementaryTypeName","src":"33504:5:27","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"visibility":"internal"}],"src":"33503:18:27"},"scope":8846,"src":"33450:220:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8814,"nodeType":"Block","src":"34053:146:27","statements":[{"expression":{"id":8802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8797,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8795,"src":"34063:10:27","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8800,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8792,"src":"34081:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8799,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34076:4:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int8_$","typeString":"type(int8)"},"typeName":{"id":8798,"name":"int8","nodeType":"ElementaryTypeName","src":"34076:4:27","typeDescriptions":{}}},"id":8801,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34076:11:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"src":"34063:24:27","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"id":8803,"nodeType":"ExpressionStatement","src":"34063:24:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8804,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8795,"src":"34101:10:27","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8805,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8792,"src":"34115:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"34101:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8813,"nodeType":"IfStatement","src":"34097:96:27","trueBody":{"id":8812,"nodeType":"Block","src":"34122:71:27","statements":[{"errorCall":{"arguments":[{"hexValue":"38","id":8808,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34173:1:27","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},{"id":8809,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8792,"src":"34176:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8807,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"34143:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8810,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34143:39:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8811,"nodeType":"RevertStatement","src":"34136:46:27"}]}}]},"documentation":{"id":8790,"nodeType":"StructuredDocumentation","src":"33676:302:27","text":" @dev Returns the downcasted int8 from int256, reverting on\n overflow (when the input is less than smallest int8 or\n greater than largest int8).\n Counterpart to Solidity's `int8` operator.\n Requirements:\n - input must fit into 8 bits"},"id":8815,"implemented":true,"kind":"function","modifiers":[],"name":"toInt8","nameLocation":"33992:6:27","nodeType":"FunctionDefinition","parameters":{"id":8793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8792,"mutability":"mutable","name":"value","nameLocation":"34006:5:27","nodeType":"VariableDeclaration","scope":8815,"src":"33999:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8791,"name":"int256","nodeType":"ElementaryTypeName","src":"33999:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"33998:14:27"},"returnParameters":{"id":8796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8795,"mutability":"mutable","name":"downcasted","nameLocation":"34041:10:27","nodeType":"VariableDeclaration","scope":8815,"src":"34036:15:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"},"typeName":{"id":8794,"name":"int8","nodeType":"ElementaryTypeName","src":"34036:4:27","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"visibility":"internal"}],"src":"34035:17:27"},"scope":8846,"src":"33983:216:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8844,"nodeType":"Block","src":"34439:250:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8832,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8823,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8818,"src":"34552:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[{"expression":{"arguments":[{"id":8828,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34573:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":8827,"name":"int256","nodeType":"ElementaryTypeName","src":"34573:6:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"}],"id":8826,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"34568:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8829,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34568:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int256","typeString":"type(int256)"}},"id":8830,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"34581:3:27","memberName":"max","nodeType":"MemberAccess","src":"34568:16:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8825,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34560:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":8824,"name":"uint256","nodeType":"ElementaryTypeName","src":"34560:7:27","typeDescriptions":{}}},"id":8831,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34560:25:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34552:33:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8838,"nodeType":"IfStatement","src":"34548:105:27","trueBody":{"id":8837,"nodeType":"Block","src":"34587:66:27","statements":[{"errorCall":{"arguments":[{"id":8834,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8818,"src":"34636:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8833,"name":"SafeCastOverflowedUintToInt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7118,"src":"34608:27:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":8835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34608:34:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8836,"nodeType":"RevertStatement","src":"34601:41:27"}]}},{"expression":{"arguments":[{"id":8841,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8818,"src":"34676:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8840,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34669:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":8839,"name":"int256","nodeType":"ElementaryTypeName","src":"34669:6:27","typeDescriptions":{}}},"id":8842,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34669:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":8822,"id":8843,"nodeType":"Return","src":"34662:20:27"}]},"documentation":{"id":8816,"nodeType":"StructuredDocumentation","src":"34205:165:27","text":" @dev Converts an unsigned uint256 into a signed int256.\n Requirements:\n - input must be less than or equal to maxInt256."},"id":8845,"implemented":true,"kind":"function","modifiers":[],"name":"toInt256","nameLocation":"34384:8:27","nodeType":"FunctionDefinition","parameters":{"id":8819,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8818,"mutability":"mutable","name":"value","nameLocation":"34401:5:27","nodeType":"VariableDeclaration","scope":8845,"src":"34393:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8817,"name":"uint256","nodeType":"ElementaryTypeName","src":"34393:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34392:15:27"},"returnParameters":{"id":8822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8821,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8845,"src":"34431:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8820,"name":"int256","nodeType":"ElementaryTypeName","src":"34431:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"34430:8:27"},"scope":8846,"src":"34375:314:27","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":8847,"src":"764:33927:27","usedErrors":[7101,7106,7113,7118],"usedEvents":[]}],"src":"192:34500:27"},"id":27},"contracts/ProtocolFeeControllerMigration.sol":{"ast":{"absolutePath":"contracts/ProtocolFeeControllerMigration.sol","exportedSymbols":{"IAuthentication":[47],"IBasicAuthorizer":[32],"IProtocolFeeController":[613],"IVault":[651],"IVaultAdmin":[941],"PoolConfig":[2145],"PoolRoleAccounts":[2217],"ProtocolFeeController":[6083],"ProtocolFeeControllerMigration":[9147],"ReentrancyGuardTransient":[4215]},"id":9148,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":8848,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:28"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","id":8850,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9148,"sourceUnit":48,"src":"72:116:28","symbolAliases":[{"foreign":{"id":8849,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"81:15:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol","id":8852,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9148,"sourceUnit":33,"src":"189:114:28","symbolAliases":[{"foreign":{"id":8851,"name":"IBasicAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32,"src":"198:16:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":8854,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9148,"sourceUnit":614,"src":"304:113:28","symbolAliases":[{"foreign":{"id":8853,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":613,"src":"313:22:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":8857,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9148,"sourceUnit":2412,"src":"418:107:28","symbolAliases":[{"foreign":{"id":8855,"name":"PoolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2217,"src":"427:16:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":8856,"name":"PoolConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2145,"src":"445:10:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","id":8859,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9148,"sourceUnit":942,"src":"526:91:28","symbolAliases":[{"foreign":{"id":8858,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":941,"src":"535:11:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":8861,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9148,"sourceUnit":652,"src":"618:81:28","symbolAliases":[{"foreign":{"id":8860,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":651,"src":"627:6:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","file":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","id":8863,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9148,"sourceUnit":6084,"src":"701:100:28","symbolAliases":[{"foreign":{"id":8862,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6083,"src":"710:21:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":8865,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9148,"sourceUnit":4216,"src":"802:132:28","symbolAliases":[{"foreign":{"id":8864,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4215,"src":"815:24:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":8867,"name":"ReentrancyGuardTransient","nameLocations":["2120:24:28"],"nodeType":"IdentifierPath","referencedDeclaration":4215,"src":"2120:24:28"},"id":8868,"nodeType":"InheritanceSpecifier","src":"2120:24:28"}],"canonicalName":"ProtocolFeeControllerMigration","contractDependencies":[],"contractKind":"contract","documentation":{"id":8866,"nodeType":"StructuredDocumentation","src":"936:1140:28","text":" @notice Migrate from the original ProtocolFeeController to one with extra events.\n @dev These events enable tracking pool protocol fees under all circumstances (in particular, when protocol fees are\n initially turned off). It also adds some infrastructure that makes future migrations easier, and removes redundant\n poolCreator storage.\n This simple migration assumes:\n 1) There are no pools with pool creators\n 2) There are no pools with protocol fee exemptions or overrides\n 3) Migrating the complete list of pools can be done in a single transaction.\n These simplifications enable simply calling `migrateFeeController` once with the complete list of pools.\n After the migration, the Vault will point to the new fee controller, and any collection thereafter will go there.\n If there are any residual fee amounts in the old fee controller (i.e., that were collected but not withdrawn),\n governance will still need to withdraw from the old fee controller. Otherwise, no further interaction with the old\n controller is necessary.\n Associated with `20250221-protocol-fee-controller-migration`."},"fullyImplemented":true,"id":9147,"linearizedBaseContracts":[9147,4215],"name":"ProtocolFeeControllerMigration","nameLocation":"2086:30:28","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"7ea3a964","id":8871,"mutability":"immutable","name":"oldFeeController","nameLocation":"2191:16:28","nodeType":"VariableDeclaration","scope":9147,"src":"2151:56:28","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"},"typeName":{"id":8870,"nodeType":"UserDefinedTypeName","pathNode":{"id":8869,"name":"IProtocolFeeController","nameLocations":["2151:22:28"],"nodeType":"IdentifierPath","referencedDeclaration":613,"src":"2151:22:28"},"referencedDeclaration":613,"src":"2151:22:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"visibility":"public"},{"constant":false,"functionSelector":"51da116d","id":8874,"mutability":"immutable","name":"newFeeController","nameLocation":"2253:16:28","nodeType":"VariableDeclaration","scope":9147,"src":"2213:56:28","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"},"typeName":{"id":8873,"nodeType":"UserDefinedTypeName","pathNode":{"id":8872,"name":"IProtocolFeeController","nameLocations":["2213:22:28"],"nodeType":"IdentifierPath","referencedDeclaration":613,"src":"2213:22:28"},"referencedDeclaration":613,"src":"2213:22:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"visibility":"public"},{"constant":false,"functionSelector":"fbfa77cf","id":8877,"mutability":"immutable","name":"vault","nameLocation":"2300:5:28","nodeType":"VariableDeclaration","scope":9147,"src":"2276:29:28","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":8876,"nodeType":"UserDefinedTypeName","pathNode":{"id":8875,"name":"IVault","nameLocations":["2276:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"2276:6:28"},"referencedDeclaration":651,"src":"2276:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"public"},{"constant":false,"id":8880,"mutability":"immutable","name":"_authorizer","nameLocation":"2411:11:28","nodeType":"VariableDeclaration","scope":9147,"src":"2375:47:28","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"},"typeName":{"id":8879,"nodeType":"UserDefinedTypeName","pathNode":{"id":8878,"name":"IBasicAuthorizer","nameLocations":["2375:16:28"],"nodeType":"IdentifierPath","referencedDeclaration":32,"src":"2375:16:28"},"referencedDeclaration":32,"src":"2375:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"visibility":"internal"},{"constant":false,"id":8882,"mutability":"mutable","name":"_finalized","nameLocation":"2526:10:28","nodeType":"VariableDeclaration","scope":9147,"src":"2512:24:28","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8881,"name":"bool","nodeType":"ElementaryTypeName","src":"2512:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"documentation":{"id":8883,"nodeType":"StructuredDocumentation","src":"2543:262:28","text":" @notice Attempt to deploy this contract with invalid parameters.\n @dev ProtocolFeeController contracts return the address of the Vault they were deployed with. Ensure that both\n the old and new controllers reference the same vault."},"errorSelector":"d6f1cb05","id":8885,"name":"InvalidFeeController","nameLocation":"2816:20:28","nodeType":"ErrorDefinition","parameters":{"id":8884,"nodeType":"ParameterList","parameters":[],"src":"2836:2:28"},"src":"2810:29:28"},{"documentation":{"id":8886,"nodeType":"StructuredDocumentation","src":"2845:49:28","text":"@notice Migration can only be performed once."},"errorSelector":"ca1c3cbc","id":8888,"name":"AlreadyMigrated","nameLocation":"2905:15:28","nodeType":"ErrorDefinition","parameters":{"id":8887,"nodeType":"ParameterList","parameters":[],"src":"2920:2:28"},"src":"2899:24:28"},{"body":{"id":8936,"nodeType":"Block","src":"2998:477:28","statements":[{"expression":{"id":8901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8897,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8871,"src":"3008:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8898,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8891,"src":"3027:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":8899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3034:24:28","memberName":"getProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":1900,"src":"3027:31:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IProtocolFeeController_$613_$","typeString":"function () view external returns (contract IProtocolFeeController)"}},"id":8900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3027:33:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"src":"3008:52:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":8902,"nodeType":"ExpressionStatement","src":"3008:52:28"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"id":8907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8903,"name":"_newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8894,"src":"3193:17:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":8904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3211:5:28","memberName":"vault","nodeType":"MemberAccess","referencedDeclaration":419,"src":"3193:23:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IVault_$651_$","typeString":"function () view external returns (contract IVault)"}},"id":8905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3193:25:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8906,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8891,"src":"3222:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"src":"3193:35:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"},"id":8910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8908,"name":"_newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8894,"src":"3232:17:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":8909,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8871,"src":"3253:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"src":"3232:37:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3193:76:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8916,"nodeType":"IfStatement","src":"3189:136:28","trueBody":{"id":8915,"nodeType":"Block","src":"3271:54:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":8912,"name":"InvalidFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8885,"src":"3292:20:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":8913,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3292:22:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8914,"nodeType":"RevertStatement","src":"3285:29:28"}]}},{"expression":{"id":8919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8917,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8877,"src":"3335:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8918,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8891,"src":"3343:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"src":"3335:14:28","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":8920,"nodeType":"ExpressionStatement","src":"3335:14:28"},{"expression":{"id":8923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8921,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8874,"src":"3359:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8922,"name":"_newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8894,"src":"3378:17:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"src":"3359:36:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":8924,"nodeType":"ExpressionStatement","src":"3359:36:28"},{"expression":{"id":8934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8925,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8880,"src":"3406:11:28","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8929,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8877,"src":"3445:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":8930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3451:13:28","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":1965,"src":"3445:19:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$73_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":8931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3445:21:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"}],"id":8928,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3437:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8927,"name":"address","nodeType":"ElementaryTypeName","src":"3437:7:28","typeDescriptions":{}}},"id":8932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3437:30:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8926,"name":"IBasicAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32,"src":"3420:16:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasicAuthorizer_$32_$","typeString":"type(contract IBasicAuthorizer)"}},"id":8933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3420:48:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"src":"3406:62:28","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":8935,"nodeType":"ExpressionStatement","src":"3406:62:28"}]},"id":8937,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":8895,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8891,"mutability":"mutable","name":"_vault","nameLocation":"2948:6:28","nodeType":"VariableDeclaration","scope":8937,"src":"2941:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":8890,"nodeType":"UserDefinedTypeName","pathNode":{"id":8889,"name":"IVault","nameLocations":["2941:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"2941:6:28"},"referencedDeclaration":651,"src":"2941:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":8894,"mutability":"mutable","name":"_newFeeController","nameLocation":"2979:17:28","nodeType":"VariableDeclaration","scope":8937,"src":"2956:40:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"},"typeName":{"id":8893,"nodeType":"UserDefinedTypeName","pathNode":{"id":8892,"name":"IProtocolFeeController","nameLocations":["2956:22:28"],"nodeType":"IdentifierPath","referencedDeclaration":613,"src":"2956:22:28"},"referencedDeclaration":613,"src":"2956:22:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"2940:57:28"},"returnParameters":{"id":8896,"nodeType":"ParameterList","parameters":[],"src":"2998:0:28"},"scope":9147,"src":"2929:546:28","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":9005,"nodeType":"Block","src":"3997:1509:28","statements":[{"condition":{"id":8946,"name":"_finalized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8882,"src":"4011:10:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8951,"nodeType":"IfStatement","src":"4007:65:28","trueBody":{"id":8950,"nodeType":"Block","src":"4023:49:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":8947,"name":"AlreadyMigrated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8888,"src":"4044:15:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":8948,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4044:17:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8949,"nodeType":"RevertStatement","src":"4037:24:28"}]}},{"expression":{"id":8954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8952,"name":"_finalized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8882,"src":"4082:10:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":8953,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4095:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"4082:17:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8955,"nodeType":"ExpressionStatement","src":"4082:17:28"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":8956,"name":"_migrateGlobalPercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9102,"src":"4110:25:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":8957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4110:27:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8958,"nodeType":"ExpressionStatement","src":"4110:27:28"},{"body":{"id":8988,"nodeType":"Block","src":"5012:284:28","statements":[{"assignments":[8971],"declarations":[{"constant":false,"id":8971,"mutability":"mutable","name":"pool","nameLocation":"5034:4:28","nodeType":"VariableDeclaration","scope":8988,"src":"5026:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8970,"name":"address","nodeType":"ElementaryTypeName","src":"5026:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":8975,"initialValue":{"baseExpression":{"id":8972,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8941,"src":"5041:5:28","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":8974,"indexExpression":{"id":8973,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8960,"src":"5047:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5041:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5026:23:28"},{"expression":{"arguments":[{"id":8979,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8971,"src":"5211:4:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8976,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8874,"src":"5162:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":8978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5179:31:28","memberName":"updateProtocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":515,"src":"5162:48:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":8980,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5162:54:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8981,"nodeType":"ExpressionStatement","src":"5162:54:28"},{"expression":{"arguments":[{"id":8985,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8971,"src":"5280:4:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8982,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8874,"src":"5230:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":8984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5247:32:28","memberName":"updateProtocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":521,"src":"5230:49:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":8986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5230:55:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8987,"nodeType":"ExpressionStatement","src":"5230:55:28"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8963,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8960,"src":"4989:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":8964,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8941,"src":"4993:5:28","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":8965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4999:6:28","memberName":"length","nodeType":"MemberAccess","src":"4993:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4989:16:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8989,"initializationExpression":{"assignments":[8960],"declarations":[{"constant":false,"id":8960,"mutability":"mutable","name":"i","nameLocation":"4982:1:28","nodeType":"VariableDeclaration","scope":8989,"src":"4974:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8959,"name":"uint256","nodeType":"ElementaryTypeName","src":"4974:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8962,"initialValue":{"hexValue":"30","id":8961,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4986:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4974:13:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":8968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5007:3:28","subExpression":{"id":8967,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8960,"src":"5009:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8969,"nodeType":"ExpressionStatement","src":"5007:3:28"},"nodeType":"ForStatement","src":"4969:327:28"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":8990,"name":"_migrateFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9146,"src":"5357:21:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":8991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5357:23:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8992,"nodeType":"ExpressionStatement","src":"5357:23:28"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8996,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8880,"src":"5451:11:28","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":8997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5463:18:28","memberName":"DEFAULT_ADMIN_ROLE","nodeType":"MemberAccess","referencedDeclaration":10,"src":"5451:30:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bytes32_$","typeString":"function () view external returns (bytes32)"}},"id":8998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5451:32:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9001,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5493:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9147","typeString":"contract ProtocolFeeControllerMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9147","typeString":"contract ProtocolFeeControllerMigration"}],"id":9000,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5485:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8999,"name":"address","nodeType":"ElementaryTypeName","src":"5485:7:28","typeDescriptions":{}}},"id":9002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5485:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8993,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8880,"src":"5426:11:28","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":8995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5438:12:28","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":31,"src":"5426:24:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9003,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5426:73:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9004,"nodeType":"ExpressionStatement","src":"5426:73:28"}]},"documentation":{"id":8938,"nodeType":"StructuredDocumentation","src":"3481:427:28","text":" @notice Permissionless migration function.\n @dev Call this with the full set of pools to perform the migration. After this runs, the Vault will point to the\n new fee controller, which will have a copy of all the relevant state from the old controller. Also, all\n permissions will be revoked, and the contract will be disabled.\n @param pools The complete set of pools to migrate"},"functionSelector":"c2ad0f14","id":9006,"implemented":true,"kind":"function","modifiers":[{"id":8944,"kind":"modifierInvocation","modifierName":{"id":8943,"name":"nonReentrant","nameLocations":["3984:12:28"],"nodeType":"IdentifierPath","referencedDeclaration":4170,"src":"3984:12:28"},"nodeType":"ModifierInvocation","src":"3984:12:28"}],"name":"migrateFeeController","nameLocation":"3922:20:28","nodeType":"FunctionDefinition","parameters":{"id":8942,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8941,"mutability":"mutable","name":"pools","nameLocation":"3960:5:28","nodeType":"VariableDeclaration","scope":9006,"src":"3943:22:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":8939,"name":"address","nodeType":"ElementaryTypeName","src":"3943:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":8940,"nodeType":"ArrayTypeName","src":"3943:9:28","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"3942:24:28"},"returnParameters":{"id":8945,"nodeType":"ParameterList","parameters":[],"src":"3997:0:28"},"scope":9147,"src":"3913:1593:28","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"body":{"id":9101,"nodeType":"Block","src":"5558:1135:28","statements":[{"assignments":[9010],"declarations":[{"constant":false,"id":9010,"mutability":"mutable","name":"swapFeeRole","nameLocation":"5653:11:28","nodeType":"VariableDeclaration","scope":9101,"src":"5645:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9009,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5645:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":9022,"initialValue":{"arguments":[{"expression":{"expression":{"id":9018,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":613,"src":"5735:22:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolFeeController_$613_$","typeString":"type(contract IProtocolFeeController)"}},"id":9019,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5758:34:28","memberName":"setGlobalProtocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":541,"src":"5735:57:28","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_uint256_$returns$__$","typeString":"function IProtocolFeeController.setGlobalProtocolSwapFeePercentage(uint256)"}},"id":9020,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5793:8:28","memberName":"selector","nodeType":"MemberAccess","src":"5735:66:28","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"arguments":[{"arguments":[{"id":9014,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8874,"src":"5691:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}],"id":9013,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5683:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9012,"name":"address","nodeType":"ElementaryTypeName","src":"5683:7:28","typeDescriptions":{}}},"id":9015,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5683:25:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9011,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"5667:15:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAuthentication_$47_$","typeString":"type(contract IAuthentication)"}},"id":9016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5667:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthentication_$47","typeString":"contract IAuthentication"}},"id":9017,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5710:11:28","memberName":"getActionId","nodeType":"MemberAccess","referencedDeclaration":46,"src":"5667:54:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view external returns (bytes32)"}},"id":9021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5667:144:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5645:166:28"},{"assignments":[9024],"declarations":[{"constant":false,"id":9024,"mutability":"mutable","name":"yieldFeeRole","nameLocation":"5830:12:28","nodeType":"VariableDeclaration","scope":9101,"src":"5822:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9023,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5822:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":9036,"initialValue":{"arguments":[{"expression":{"expression":{"id":9032,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":613,"src":"5913:22:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolFeeController_$613_$","typeString":"type(contract IProtocolFeeController)"}},"id":9033,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5936:35:28","memberName":"setGlobalProtocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":547,"src":"5913:58:28","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_uint256_$returns$__$","typeString":"function IProtocolFeeController.setGlobalProtocolYieldFeePercentage(uint256)"}},"id":9034,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5972:8:28","memberName":"selector","nodeType":"MemberAccess","src":"5913:67:28","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"arguments":[{"arguments":[{"id":9028,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8874,"src":"5869:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}],"id":9027,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5861:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9026,"name":"address","nodeType":"ElementaryTypeName","src":"5861:7:28","typeDescriptions":{}}},"id":9029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5861:25:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9025,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"5845:15:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAuthentication_$47_$","typeString":"type(contract IAuthentication)"}},"id":9030,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5845:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthentication_$47","typeString":"contract IAuthentication"}},"id":9031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5888:11:28","memberName":"getActionId","nodeType":"MemberAccess","referencedDeclaration":46,"src":"5845:54:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view external returns (bytes32)"}},"id":9035,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5845:145:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5822:168:28"},{"expression":{"arguments":[{"id":9040,"name":"swapFeeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9010,"src":"6023:11:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9043,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6044:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9147","typeString":"contract ProtocolFeeControllerMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9147","typeString":"contract ProtocolFeeControllerMigration"}],"id":9042,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6036:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9041,"name":"address","nodeType":"ElementaryTypeName","src":"6036:7:28","typeDescriptions":{}}},"id":9044,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6036:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9037,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8880,"src":"6001:11:28","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6013:9:28","memberName":"grantRole","nodeType":"MemberAccess","referencedDeclaration":17,"src":"6001:21:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9045,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6001:49:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9046,"nodeType":"ExpressionStatement","src":"6001:49:28"},{"expression":{"arguments":[{"id":9050,"name":"yieldFeeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9024,"src":"6082:12:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9053,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6104:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9147","typeString":"contract ProtocolFeeControllerMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9147","typeString":"contract ProtocolFeeControllerMigration"}],"id":9052,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6096:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9051,"name":"address","nodeType":"ElementaryTypeName","src":"6096:7:28","typeDescriptions":{}}},"id":9054,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6096:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9047,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8880,"src":"6060:11:28","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6072:9:28","memberName":"grantRole","nodeType":"MemberAccess","referencedDeclaration":17,"src":"6060:21:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9055,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6060:50:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9056,"nodeType":"ExpressionStatement","src":"6060:50:28"},{"assignments":[9058],"declarations":[{"constant":false,"id":9058,"mutability":"mutable","name":"globalSwapFeePercentage","nameLocation":"6176:23:28","nodeType":"VariableDeclaration","scope":9101,"src":"6168:31:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9057,"name":"uint256","nodeType":"ElementaryTypeName","src":"6168:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9062,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9059,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8871,"src":"6202:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":9060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6219:34:28","memberName":"getGlobalProtocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":431,"src":"6202:51:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":9061,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6202:53:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6168:87:28"},{"assignments":[9064],"declarations":[{"constant":false,"id":9064,"mutability":"mutable","name":"globalYieldFeePercentage","nameLocation":"6273:24:28","nodeType":"VariableDeclaration","scope":9101,"src":"6265:32:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9063,"name":"uint256","nodeType":"ElementaryTypeName","src":"6265:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9068,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9065,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8871,"src":"6300:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":9066,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6317:35:28","memberName":"getGlobalProtocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":437,"src":"6300:52:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":9067,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6300:54:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6265:89:28"},{"expression":{"arguments":[{"id":9072,"name":"globalSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9058,"src":"6417:23:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9069,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8874,"src":"6365:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":9071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6382:34:28","memberName":"setGlobalProtocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":541,"src":"6365:51:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256) external"}},"id":9073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6365:76:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9074,"nodeType":"ExpressionStatement","src":"6365:76:28"},{"expression":{"arguments":[{"id":9078,"name":"globalYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9064,"src":"6504:24:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9075,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8874,"src":"6451:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":9077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6468:35:28","memberName":"setGlobalProtocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":547,"src":"6451:52:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256) external"}},"id":9079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6451:78:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9080,"nodeType":"ExpressionStatement","src":"6451:78:28"},{"expression":{"arguments":[{"id":9084,"name":"swapFeeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9010,"src":"6596:11:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9087,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6617:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9147","typeString":"contract ProtocolFeeControllerMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9147","typeString":"contract ProtocolFeeControllerMigration"}],"id":9086,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6609:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9085,"name":"address","nodeType":"ElementaryTypeName","src":"6609:7:28","typeDescriptions":{}}},"id":9088,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6609:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9081,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8880,"src":"6571:11:28","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6583:12:28","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":31,"src":"6571:24:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6571:52:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9090,"nodeType":"ExpressionStatement","src":"6571:52:28"},{"expression":{"arguments":[{"id":9094,"name":"yieldFeeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9024,"src":"6658:12:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9097,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6680:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9147","typeString":"contract ProtocolFeeControllerMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9147","typeString":"contract ProtocolFeeControllerMigration"}],"id":9096,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6672:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9095,"name":"address","nodeType":"ElementaryTypeName","src":"6672:7:28","typeDescriptions":{}}},"id":9098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6672:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9091,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8880,"src":"6633:11:28","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6645:12:28","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":31,"src":"6633:24:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6633:53:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9100,"nodeType":"ExpressionStatement","src":"6633:53:28"}]},"id":9102,"implemented":true,"kind":"function","modifiers":[],"name":"_migrateGlobalPercentages","nameLocation":"5521:25:28","nodeType":"FunctionDefinition","parameters":{"id":9007,"nodeType":"ParameterList","parameters":[],"src":"5546:2:28"},"returnParameters":{"id":9008,"nodeType":"ParameterList","parameters":[],"src":"5558:0:28"},"scope":9147,"src":"5512:1181:28","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9145,"nodeType":"Block","src":"6741:360:28","statements":[{"assignments":[9106],"declarations":[{"constant":false,"id":9106,"mutability":"mutable","name":"setFeeControllerRole","nameLocation":"6759:20:28","nodeType":"VariableDeclaration","scope":9145,"src":"6751:28:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9105,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6751:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":9118,"initialValue":{"arguments":[{"expression":{"expression":{"id":9114,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":941,"src":"6839:11:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultAdmin_$941_$","typeString":"type(contract IVaultAdmin)"}},"id":9115,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6851:24:28","memberName":"setProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":802,"src":"6839:36:28","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_contract$_IProtocolFeeController_$613_$returns$__$","typeString":"function IVaultAdmin.setProtocolFeeController(contract IProtocolFeeController)"}},"id":9116,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6876:8:28","memberName":"selector","nodeType":"MemberAccess","src":"6839:45:28","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"arguments":[{"arguments":[{"id":9110,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8877,"src":"6806:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}],"id":9109,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6798:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9108,"name":"address","nodeType":"ElementaryTypeName","src":"6798:7:28","typeDescriptions":{}}},"id":9111,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6798:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9107,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"6782:15:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAuthentication_$47_$","typeString":"type(contract IAuthentication)"}},"id":9112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6782:31:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthentication_$47","typeString":"contract IAuthentication"}},"id":9113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6814:11:28","memberName":"getActionId","nodeType":"MemberAccess","referencedDeclaration":46,"src":"6782:43:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view external returns (bytes32)"}},"id":9117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6782:112:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"6751:143:28"},{"expression":{"arguments":[{"id":9122,"name":"setFeeControllerRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9106,"src":"6927:20:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9125,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6957:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9147","typeString":"contract ProtocolFeeControllerMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9147","typeString":"contract ProtocolFeeControllerMigration"}],"id":9124,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6949:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9123,"name":"address","nodeType":"ElementaryTypeName","src":"6949:7:28","typeDescriptions":{}}},"id":9126,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6949:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9119,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8880,"src":"6905:11:28","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6917:9:28","memberName":"grantRole","nodeType":"MemberAccess","referencedDeclaration":17,"src":"6905:21:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6905:58:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9128,"nodeType":"ExpressionStatement","src":"6905:58:28"},{"expression":{"arguments":[{"id":9132,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8874,"src":"7005:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}],"expression":{"id":9129,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8877,"src":"6974:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":9131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6980:24:28","memberName":"setProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":802,"src":"6974:30:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IProtocolFeeController_$613_$returns$__$","typeString":"function (contract IProtocolFeeController) external"}},"id":9133,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6974:48:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9134,"nodeType":"ExpressionStatement","src":"6974:48:28"},{"expression":{"arguments":[{"id":9138,"name":"setFeeControllerRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9106,"src":"7058:20:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9141,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7088:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9147","typeString":"contract ProtocolFeeControllerMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9147","typeString":"contract ProtocolFeeControllerMigration"}],"id":9140,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7080:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9139,"name":"address","nodeType":"ElementaryTypeName","src":"7080:7:28","typeDescriptions":{}}},"id":9142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7080:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9135,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8880,"src":"7033:11:28","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7045:12:28","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":31,"src":"7033:24:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7033:61:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9144,"nodeType":"ExpressionStatement","src":"7033:61:28"}]},"id":9146,"implemented":true,"kind":"function","modifiers":[],"name":"_migrateFeeController","nameLocation":"6708:21:28","nodeType":"FunctionDefinition","parameters":{"id":9103,"nodeType":"ParameterList","parameters":[],"src":"6729:2:28"},"returnParameters":{"id":9104,"nodeType":"ParameterList","parameters":[],"src":"6741:0:28"},"scope":9147,"src":"6699:402:28","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":9148,"src":"2077:5026:28","usedErrors":[4159,8885,8888],"usedEvents":[]}],"src":"46:7058:28"},"id":28},"contracts/ProtocolFeeControllerMigrationV2.sol":{"ast":{"absolutePath":"contracts/ProtocolFeeControllerMigrationV2.sol","exportedSymbols":{"IAuthentication":[47],"IBasicAuthorizer":[32],"IProtocolFeeController":[613],"IVault":[651],"IVaultAdmin":[941],"PoolConfig":[2145],"PoolRoleAccounts":[2217],"ProtocolFeeController":[6083],"ProtocolFeeControllerMigration":[9147],"ProtocolFeeControllerMigrationV2":[9328],"SingletonAuthentication":[6189]},"id":9329,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":9149,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:29"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","id":9151,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9329,"sourceUnit":48,"src":"72:116:29","symbolAliases":[{"foreign":{"id":9150,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"81:15:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol","id":9153,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9329,"sourceUnit":33,"src":"189:114:29","symbolAliases":[{"foreign":{"id":9152,"name":"IBasicAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32,"src":"198:16:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":9155,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9329,"sourceUnit":614,"src":"304:113:29","symbolAliases":[{"foreign":{"id":9154,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":613,"src":"313:22:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":9158,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9329,"sourceUnit":2412,"src":"418:107:29","symbolAliases":[{"foreign":{"id":9156,"name":"PoolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2217,"src":"427:16:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":9157,"name":"PoolConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2145,"src":"445:10:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","id":9160,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9329,"sourceUnit":942,"src":"526:91:29","symbolAliases":[{"foreign":{"id":9159,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":941,"src":"535:11:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":9162,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9329,"sourceUnit":652,"src":"618:81:29","symbolAliases":[{"foreign":{"id":9161,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":651,"src":"627:6:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","id":9164,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9329,"sourceUnit":6190,"src":"701:104:29","symbolAliases":[{"foreign":{"id":9163,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6189,"src":"710:23:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","file":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","id":9166,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9329,"sourceUnit":6084,"src":"806:100:29","symbolAliases":[{"foreign":{"id":9165,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6083,"src":"815:21:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/ProtocolFeeControllerMigration.sol","file":"./ProtocolFeeControllerMigration.sol","id":9168,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9329,"sourceUnit":9148,"src":"908:86:29","symbolAliases":[{"foreign":{"id":9167,"name":"ProtocolFeeControllerMigration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9147,"src":"917:30:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":9170,"name":"ProtocolFeeControllerMigration","nameLocations":["2261:30:29"],"nodeType":"IdentifierPath","referencedDeclaration":9147,"src":"2261:30:29"},"id":9171,"nodeType":"InheritanceSpecifier","src":"2261:30:29"},{"baseName":{"id":9172,"name":"SingletonAuthentication","nameLocations":["2293:23:29"],"nodeType":"IdentifierPath","referencedDeclaration":6189,"src":"2293:23:29"},"id":9173,"nodeType":"InheritanceSpecifier","src":"2293:23:29"}],"canonicalName":"ProtocolFeeControllerMigrationV2","contractDependencies":[],"contractKind":"contract","documentation":{"id":9169,"nodeType":"StructuredDocumentation","src":"996:1219:29","text":" @notice Migrate from the original ProtocolFeeController to one with extra events.\n @dev These events enable tracking pool protocol fees under all circumstances (in particular, when protocol fees are\n initially turned off).\n After deployment, call `migratePools` as many times as necessary. The list must be generated externally, as pools\n are not iterable on-chain. The batch interface allows an unlimited number of pools to be migrated; it's possible\n there might be too many to migrate in a single call.\n The first time `migratePools` is called, the contract will first copy the global (pool-independent data). This could\n be done in a separate stage, but we're trying to keep the contract simple, vs. duplicating the staging coordinator\n system of v2 just yet.\n When all pools have been migrated, call `finalizeMigration` to disable further migration, update the address in the\n Vault, and renounce all permissions. While `migratePools` is permissionless, this call must be permissioned to\n prevent premature termination in case multiple transactions are required to migrate all the pools.\n Associated with `20250221-protocol-fee-controller-migration` (fork test only)."},"fullyImplemented":true,"id":9328,"linearizedBaseContracts":[9328,6189,2491,47,9147,4215],"name":"ProtocolFeeControllerMigrationV2","nameLocation":"2225:32:29","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":9175,"mutability":"mutable","name":"_globalPercentagesMigrated","nameLocation":"2438:26:29","nodeType":"VariableDeclaration","scope":9328,"src":"2424:40:29","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9174,"name":"bool","nodeType":"ElementaryTypeName","src":"2424:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":9177,"mutability":"mutable","name":"_migrationRole","nameLocation":"2547:14:29","nodeType":"VariableDeclaration","scope":9328,"src":"2530:31:29","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9176,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2530:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"documentation":{"id":9178,"nodeType":"StructuredDocumentation","src":"2568:86:29","text":"@notice Cannot call the base contract migration; it is invalid for this migration."},"errorSelector":"c7b08f63","id":9180,"name":"WrongMigrationVersion","nameLocation":"2665:21:29","nodeType":"ErrorDefinition","parameters":{"id":9179,"nodeType":"ParameterList","parameters":[],"src":"2686:2:29"},"src":"2659:30:29"},{"body":{"id":9220,"nodeType":"Block","src":"2876:273:29","statements":[{"expression":{"id":9208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9196,"name":"_migrationRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9177,"src":"2886:14:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"expression":{"id":9204,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6083,"src":"2971:21:29","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ProtocolFeeController_$6083_$","typeString":"type(contract ProtocolFeeController)"}},"id":9205,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2993:11:29","memberName":"migratePool","nodeType":"MemberAccess","referencedDeclaration":5563,"src":"2971:33:29","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$returns$__$","typeString":"function ProtocolFeeController.migratePool(address)"}},"id":9206,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3005:8:29","memberName":"selector","nodeType":"MemberAccess","src":"2971:42:29","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"arguments":[{"arguments":[{"id":9200,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8874,"src":"2927:16:29","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}],"id":9199,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2919:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9198,"name":"address","nodeType":"ElementaryTypeName","src":"2919:7:29","typeDescriptions":{}}},"id":9201,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2919:25:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9197,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"2903:15:29","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAuthentication_$47_$","typeString":"type(contract IAuthentication)"}},"id":9202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2903:42:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthentication_$47","typeString":"contract IAuthentication"}},"id":9203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2946:11:29","memberName":"getActionId","nodeType":"MemberAccess","referencedDeclaration":46,"src":"2903:54:29","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view external returns (bytes32)"}},"id":9207,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2903:120:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2886:137:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":9209,"nodeType":"ExpressionStatement","src":"2886:137:29"},{"expression":{"arguments":[{"id":9213,"name":"_migrationRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9177,"src":"3112:14:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9216,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3136:4:29","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigrationV2_$9328","typeString":"contract ProtocolFeeControllerMigrationV2"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigrationV2_$9328","typeString":"contract ProtocolFeeControllerMigrationV2"}],"id":9215,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3128:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9214,"name":"address","nodeType":"ElementaryTypeName","src":"3128:7:29","typeDescriptions":{}}},"id":9217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3128:13:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9210,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8880,"src":"3090:11:29","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3102:9:29","memberName":"grantRole","nodeType":"MemberAccess","referencedDeclaration":17,"src":"3090:21:29","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9218,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3090:52:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9219,"nodeType":"ExpressionStatement","src":"3090:52:29"}]},"id":9221,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":9189,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9183,"src":"2817:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},{"id":9190,"name":"_newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9186,"src":"2825:17:29","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}}],"id":9191,"kind":"baseConstructorSpecifier","modifierName":{"id":9188,"name":"ProtocolFeeControllerMigration","nameLocations":["2786:30:29"],"nodeType":"IdentifierPath","referencedDeclaration":9147,"src":"2786:30:29"},"nodeType":"ModifierInvocation","src":"2786:57:29"},{"arguments":[{"id":9193,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9183,"src":"2868:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}}],"id":9194,"kind":"baseConstructorSpecifier","modifierName":{"id":9192,"name":"SingletonAuthentication","nameLocations":["2844:23:29"],"nodeType":"IdentifierPath","referencedDeclaration":6189,"src":"2844:23:29"},"nodeType":"ModifierInvocation","src":"2844:31:29"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":9187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9183,"mutability":"mutable","name":"_vault","nameLocation":"2723:6:29","nodeType":"VariableDeclaration","scope":9221,"src":"2716:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":9182,"nodeType":"UserDefinedTypeName","pathNode":{"id":9181,"name":"IVault","nameLocations":["2716:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"2716:6:29"},"referencedDeclaration":651,"src":"2716:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":9186,"mutability":"mutable","name":"_newFeeController","nameLocation":"2762:17:29","nodeType":"VariableDeclaration","scope":9221,"src":"2739:40:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"},"typeName":{"id":9185,"nodeType":"UserDefinedTypeName","pathNode":{"id":9184,"name":"IProtocolFeeController","nameLocations":["2739:22:29"],"nodeType":"IdentifierPath","referencedDeclaration":613,"src":"2739:22:29"},"referencedDeclaration":613,"src":"2739:22:29","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"2706:79:29"},"returnParameters":{"id":9195,"nodeType":"ParameterList","parameters":[],"src":"2876:0:29"},"scope":9328,"src":"2695:454:29","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":9273,"nodeType":"Block","src":"3627:1012:29","statements":[{"condition":{"id":9230,"name":"_finalized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8882,"src":"3641:10:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9235,"nodeType":"IfStatement","src":"3637:65:29","trueBody":{"id":9234,"nodeType":"Block","src":"3653:49:29","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9231,"name":"AlreadyMigrated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8888,"src":"3674:15:29","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9232,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3674:17:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9233,"nodeType":"RevertStatement","src":"3667:24:29"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":9238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9236,"name":"_globalPercentagesMigrated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9175,"src":"3800:26:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":9237,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3830:5:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"3800:35:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9247,"nodeType":"IfStatement","src":"3796:141:29","trueBody":{"id":9246,"nodeType":"Block","src":"3837:100:29","statements":[{"expression":{"id":9241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9239,"name":"_globalPercentagesMigrated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9175,"src":"3851:26:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":9240,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3880:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"3851:33:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9242,"nodeType":"ExpressionStatement","src":"3851:33:29"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":9243,"name":"_migrateGlobalPercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9102,"src":"3899:25:29","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":9244,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3899:27:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9245,"nodeType":"ExpressionStatement","src":"3899:27:29"}]}},{"body":{"id":9271,"nodeType":"Block","src":"4477:156:29","statements":[{"expression":{"arguments":[{"baseExpression":{"id":9266,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9225,"src":"4613:5:29","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":9268,"indexExpression":{"id":9267,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9249,"src":"4619:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4613:8:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[{"id":9262,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8874,"src":"4582:16:29","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}],"id":9261,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4574:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9260,"name":"address","nodeType":"ElementaryTypeName","src":"4574:7:29","typeDescriptions":{}}},"id":9263,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4574:25:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9259,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6083,"src":"4552:21:29","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ProtocolFeeController_$6083_$","typeString":"type(contract ProtocolFeeController)"}},"id":9264,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4552:48:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$6083","typeString":"contract ProtocolFeeController"}},"id":9265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4601:11:29","memberName":"migratePool","nodeType":"MemberAccess","referencedDeclaration":5563,"src":"4552:60:29","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":9269,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4552:70:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9270,"nodeType":"ExpressionStatement","src":"4552:70:29"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9252,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9249,"src":"4454:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":9253,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9225,"src":"4458:5:29","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":9254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4464:6:29","memberName":"length","nodeType":"MemberAccess","src":"4458:12:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4454:16:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9272,"initializationExpression":{"assignments":[9249],"declarations":[{"constant":false,"id":9249,"mutability":"mutable","name":"i","nameLocation":"4447:1:29","nodeType":"VariableDeclaration","scope":9272,"src":"4439:9:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9248,"name":"uint256","nodeType":"ElementaryTypeName","src":"4439:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9251,"initialValue":{"hexValue":"30","id":9250,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4451:1:29","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4439:13:29"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":9257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"4472:3:29","subExpression":{"id":9256,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9249,"src":"4474:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9258,"nodeType":"ExpressionStatement","src":"4472:3:29"},"nodeType":"ForStatement","src":"4434:199:29"}]},"documentation":{"id":9222,"nodeType":"StructuredDocumentation","src":"3155:391:29","text":" @notice Migrate pools from the old fee controller to the new one.\n @dev THis can be called multiple times, if there are too many pools for a single transaction. Note that the\n first time this is called, it will migrate the global fee percentages, then proceed with the first set of pools.\n @param pools The set of pools to be migrated in this call"},"functionSelector":"b8350e27","id":9274,"implemented":true,"kind":"function","modifiers":[{"id":9228,"kind":"modifierInvocation","modifierName":{"id":9227,"name":"nonReentrant","nameLocations":["3614:12:29"],"nodeType":"IdentifierPath","referencedDeclaration":4170,"src":"3614:12:29"},"nodeType":"ModifierInvocation","src":"3614:12:29"}],"name":"migratePools","nameLocation":"3560:12:29","nodeType":"FunctionDefinition","parameters":{"id":9226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9225,"mutability":"mutable","name":"pools","nameLocation":"3590:5:29","nodeType":"VariableDeclaration","scope":9274,"src":"3573:22:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":9223,"name":"address","nodeType":"ElementaryTypeName","src":"3573:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9224,"nodeType":"ArrayTypeName","src":"3573:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"3572:24:29"},"returnParameters":{"id":9229,"nodeType":"ParameterList","parameters":[],"src":"3627:0:29"},"scope":9328,"src":"3551:1088:29","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"body":{"id":9314,"nodeType":"Block","src":"4704:426:29","statements":[{"condition":{"id":9279,"name":"_finalized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8882,"src":"4718:10:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9284,"nodeType":"IfStatement","src":"4714:65:29","trueBody":{"id":9283,"nodeType":"Block","src":"4730:49:29","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9280,"name":"AlreadyMigrated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8888,"src":"4751:15:29","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4751:17:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9282,"nodeType":"RevertStatement","src":"4744:24:29"}]}},{"expression":{"id":9287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9285,"name":"_finalized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8882,"src":"4789:10:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":9286,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4802:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"4789:17:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9288,"nodeType":"ExpressionStatement","src":"4789:17:29"},{"expression":{"arguments":[{"id":9292,"name":"_migrationRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9177,"src":"4889:14:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9295,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4913:4:29","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigrationV2_$9328","typeString":"contract ProtocolFeeControllerMigrationV2"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigrationV2_$9328","typeString":"contract ProtocolFeeControllerMigrationV2"}],"id":9294,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4905:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9293,"name":"address","nodeType":"ElementaryTypeName","src":"4905:7:29","typeDescriptions":{}}},"id":9296,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4905:13:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9289,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8880,"src":"4864:11:29","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4876:12:29","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":31,"src":"4864:24:29","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9297,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4864:55:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9298,"nodeType":"ExpressionStatement","src":"4864:55:29"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":9299,"name":"_migrateFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9146,"src":"4981:21:29","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":9300,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4981:23:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9301,"nodeType":"ExpressionStatement","src":"4981:23:29"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9305,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8880,"src":"5075:11:29","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5087:18:29","memberName":"DEFAULT_ADMIN_ROLE","nodeType":"MemberAccess","referencedDeclaration":10,"src":"5075:30:29","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bytes32_$","typeString":"function () view external returns (bytes32)"}},"id":9307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5075:32:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9310,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5117:4:29","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigrationV2_$9328","typeString":"contract ProtocolFeeControllerMigrationV2"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigrationV2_$9328","typeString":"contract ProtocolFeeControllerMigrationV2"}],"id":9309,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5109:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9308,"name":"address","nodeType":"ElementaryTypeName","src":"5109:7:29","typeDescriptions":{}}},"id":9311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5109:13:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9302,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8880,"src":"5050:11:29","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5062:12:29","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":31,"src":"5050:24:29","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5050:73:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9313,"nodeType":"ExpressionStatement","src":"5050:73:29"}]},"functionSelector":"b78b6087","id":9315,"implemented":true,"kind":"function","modifiers":[{"id":9277,"kind":"modifierInvocation","modifierName":{"id":9276,"name":"authenticate","nameLocations":["4691:12:29"],"nodeType":"IdentifierPath","referencedDeclaration":2439,"src":"4691:12:29"},"nodeType":"ModifierInvocation","src":"4691:12:29"}],"name":"finalizeMigration","nameLocation":"4654:17:29","nodeType":"FunctionDefinition","parameters":{"id":9275,"nodeType":"ParameterList","parameters":[],"src":"4671:2:29"},"returnParameters":{"id":9278,"nodeType":"ParameterList","parameters":[],"src":"4704:0:29"},"scope":9328,"src":"4645:485:29","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[9006],"body":{"id":9326,"nodeType":"Block","src":"5258:146:29","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9323,"name":"WrongMigrationVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9180,"src":"5374:21:29","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5374:23:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9325,"nodeType":"RevertStatement","src":"5367:30:29"}]},"documentation":{"id":9316,"nodeType":"StructuredDocumentation","src":"5136:46:29","text":"@inheritdoc ProtocolFeeControllerMigration"},"functionSelector":"c2ad0f14","id":9327,"implemented":true,"kind":"function","modifiers":[],"name":"migrateFeeController","nameLocation":"5196:20:29","nodeType":"FunctionDefinition","overrides":{"id":9321,"nodeType":"OverrideSpecifier","overrides":[],"src":"5249:8:29"},"parameters":{"id":9320,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9319,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9327,"src":"5217:16:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":9317,"name":"address","nodeType":"ElementaryTypeName","src":"5217:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9318,"nodeType":"ArrayTypeName","src":"5217:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"5216:18:29"},"returnParameters":{"id":9322,"nodeType":"ParameterList","parameters":[],"src":"5258:0:29"},"scope":9328,"src":"5187:217:29","stateMutability":"pure","virtual":false,"visibility":"external"}],"scope":9329,"src":"2216:3190:29","usedErrors":[38,4159,8885,8888,9180],"usedEvents":[]}],"src":"46:5361:29"},"id":29}},"contracts":{"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol":{"IBasicAuthorizer":{"abi":[{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"where","type":"address"}],"name":"canPerform","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","canPerform(bytes32,address,address)":"9be2a884","grantRole(bytes32,address)":"2f2ff15d","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"where\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"params\":{\"account\":\"Account trying to perform the action\",\"actionId\":\"Identifier for the action to be performed\",\"where\":\"Target contract for the action\"},\"returns\":{\"success\":\"True if the action is permitted\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"notice\":\"Returns true if `account` can perform the action described by `actionId` in the contract `where`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol\":\"IBasicAuthorizer\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol\":{\"keccak256\":\"0x434eda908f66d99d967c2c2b233337227c331cd79655ec5b0ddcc76db7a20606\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b0b6c4bc095113dfbaeb9d9a6f9602f0f1a79b075c82d5ccccff7a1b67af1ce8\",\"dweb:/ipfs/QmaePfy8V5U9UFqkDtdTvPjJLmo1XEorPrC1fMVB35n86Y\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"IAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"notice\":\"Simple interface for permissioned calling of external functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":\"IAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"IRateProvider":{"abi":[{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getRate()":"679aefce"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getRate()\":{\"details\":\"The meaning of this rate depends on the context. Note that there may be an error associated with a token rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface does not take a rounding direction or return an error, so great care must be taken when interpreting and using rates in downstream computations.\",\"returns\":{\"rate\":\"The current token rate\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getRate()\":{\"notice\":\"An 18 decimal fixed point number representing the exchange rate of one token to another related token.\"}},\"notice\":\"General interface for token exchange rates.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":\"IRateProvider\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"IAuthorizer":{"abi":[{"inputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"where","type":"address"}],"name":"canPerform","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"canPerform(bytes32,address,address)":"9be2a884"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"where\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"params\":{\"account\":\"Account trying to perform the action\",\"actionId\":\"Identifier for the action to be performed\",\"where\":\"Target contract for the action\"},\"returns\":{\"success\":\"True if the action is permitted\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"notice\":\"Returns true if `account` can perform the action described by `actionId` in the contract `where`.\"}},\"notice\":\"Interface to the Vault's permission system.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":\"IAuthorizer\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"IHooks":{"abi":[{"inputs":[],"name":"getHookFlags","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"}],"internalType":"struct HookFlags","name":"hookFlags","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256[]","name":"amountsInScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsInRaw","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterAddLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256[]","name":"hookAdjustedAmountsInRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterInitialize","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsOutRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterRemoveLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256[]","name":"hookAdjustedAmountsOutRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountInScaled18","type":"uint256"},{"internalType":"uint256","name":"amountOutScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenInBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenOutBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AfterSwapParams","name":"params","type":"tuple"}],"name":"onAfterSwap","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"hookAdjustedAmountCalculatedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256[]","name":"maxAmountsInScaled18","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeAddLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeInitialize","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeRemoveLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"},{"internalType":"address","name":"pool","type":"address"}],"name":"onBeforeSwap","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"}],"name":"onComputeDynamicSwapFeePercentage","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"onRegister","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getHookFlags()":"d77153a7","onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)":"976907cc","onAfterInitialize(uint256[],uint256,bytes)":"38be241d","onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)":"2754888d","onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))":"18b6eb55","onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)":"45421ec7","onBeforeInitialize(uint256[],bytes)":"1c149e28","onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)":"ba5f9f40","onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)":"5211fa77","onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)":"a0e8f5ac","onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))":"0b89f182"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getHookFlags\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"}],\"internalType\":\"struct HookFlags\",\"name\":\"hookFlags\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsInRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsOutRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenInBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenOutBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AfterSwapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"onAfterSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"hookAdjustedAmountCalculatedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"onBeforeSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"onComputeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"onRegister\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that they are called in the correct order, and with the correct arguments. To maintain this security, these functions should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`, then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)\",\"kind\":\"dev\",\"methods\":{\"getHookFlags()\":{\"details\":\"The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero). `onRegister` is the only \\\"mandatory\\\" hook.\",\"returns\":{\"hookFlags\":\"Flags indicating which hooks the contract supports\"}},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsInRaw\":\"Actual amounts of tokens added, sorted in token registration order\",\"amountsInScaled18\":\"Actual amounts of tokens added, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountOut\":\"Amount of pool tokens minted\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsInRaw\":\"New amountsInRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"details\":\"Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"bptAmountOut\":\"Amount of pool tokens minted during initialization\",\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool accepts the initialization results\"}},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsOutRaw\":\"Actual amount of tokens to receive, sorted in token registration order\",\"amountsOutScaled18\":\"Scaled amount of tokens to receive, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountIn\":\"Amount of pool tokens to burn\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsOutRaw\":\"New amountsOutRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"details\":\"Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"hookAdjustedAmountCalculatedRaw\":\"New amount calculated, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"maxAmountsInScaled18\":\"Maximum amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeInitialize(uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with initialization\"}},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"maxBptAmountIn\":\"Maximum amount of input pool tokens\",\"minAmountsOutScaled18\":\"Minimum output amounts, sorted in token registration order\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"details\":\"Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"details\":\"Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\",\"staticSwapFeePercentage\":\"18-decimal FP value of the static swap fee percentage, for reference\"},\"returns\":{\"dynamicSwapFeePercentage\":\"Value of the swap fee percentage, as an 18-decimal FP value\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"details\":\"Returns true if registration was successful, and false to revert the pool registration. Make sure this function is properly implemented (e.g. check the factory, and check that the given pool is from the factory). The Vault address will be msg.sender.\",\"params\":{\"factory\":\"Address of the pool factory (contract deploying the pool)\",\"liquidityManagement\":\"Liquidity management flags indicating which functions are enabled\",\"pool\":\"Address of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"},\"returns\":{\"success\":\"True if the hook allowed the registration, false otherwise\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getHookFlags()\":{\"notice\":\"Return the set of hooks implemented by the contract.\"},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed after adding liquidity.\"},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"notice\":\"Hook to be executed after pool initialization.\"},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed after removing liquidity.\"},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"notice\":\"Called after a swap to perform further actions once the balances have been updated by the swap.\"},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed before adding liquidity.\"},\"onBeforeInitialize(uint256[],bytes)\":{\"notice\":\"Hook executed before pool initialization.\"},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed before removing liquidity.\"},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"notice\":\"Called before a swap to give the Pool an opportunity to perform actions.\"},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"notice\":\"Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\"},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"notice\":\"Hook executed when a pool is registered with a non-zero hooks contract.\"}},\"notice\":\"Interface for pool hooks.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":\"IHooks\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"IProtocolFeeController":{"abi":[{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"pool","type":"address"}],"name":"CallerIsNotPoolCreator","type":"error"},{"inputs":[],"name":"PoolCreatorFeePercentageTooHigh","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreatorNotRegistered","type":"error"},{"inputs":[],"name":"ProtocolSwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ProtocolYieldFeePercentageTooHigh","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"GlobalProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"GlobalProtocolYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateSwapFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateYieldFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PoolCreatorFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"PoolCreatorSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"PoolCreatorYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"poolCreator","type":"address"},{"indexed":false,"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"PoolWithCreatorRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolSwapFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"ProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolYieldFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"ProtocolYieldFeePercentageChanged","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"protocolFeePercentage","type":"uint256"},{"internalType":"uint256","name":"poolCreatorFeePercentage","type":"uint256"}],"name":"computeAggregateFeePercentage","outputs":[{"internalType":"uint256","name":"aggregateFeePercentage","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getGlobalProtocolSwapFeePercentage","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolYieldFeePercentage","outputs":[{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolSwapFeeInfo","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"internalType":"bool","name":"isOverride","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolYieldFeeInfo","outputs":[{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"},{"internalType":"bool","name":"isOverride","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getProtocolFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"registerPool","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setGlobalProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setGlobalProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"setPoolCreatorSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"setPoolCreatorYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"collectAggregateFees(address)":"8f4ab9ca","computeAggregateFeePercentage(uint256,uint256)":"0ddd60c6","getGlobalProtocolSwapFeePercentage()":"7869ee18","getGlobalProtocolYieldFeePercentage()":"55fb76af","getPoolCreatorFeeAmounts(address)":"9e95f3fd","getPoolCreatorSwapFeePercentage(address)":"0b8e059b","getPoolCreatorYieldFeePercentage(address)":"0252aab5","getPoolProtocolSwapFeeInfo(address)":"5c15a0b4","getPoolProtocolYieldFeeInfo(address)":"7a2b97dc","getProtocolFeeAmounts(address)":"8df44c54","isPoolRegistered(address)":"c673bdaf","registerPool(address,address,bool)":"77ff76e7","setGlobalProtocolSwapFeePercentage(uint256)":"8a3c5c69","setGlobalProtocolYieldFeePercentage(uint256)":"a93df2a4","setPoolCreatorSwapFeePercentage(address,uint256)":"1377c16c","setPoolCreatorYieldFeePercentage(address,uint256)":"3af52712","setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356","updateProtocolSwapFeePercentage(address)":"71ecc8fb","updateProtocolYieldFeePercentage(address)":"71447ea8","vault()":"fbfa77cf","withdrawPoolCreatorFees(address)":"52f125f0","withdrawPoolCreatorFees(address,address)":"f7061445","withdrawProtocolFees(address,address)":"cf7b287f","withdrawProtocolFeesForToken(address,address,address)":"b53a70b2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"CallerIsNotPoolCreator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolCreatorFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolYieldFeePercentageTooHigh\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateSwapFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateYieldFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"PoolWithCreatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeAggregateFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolSwapFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOverride\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolYieldFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOverride\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getProtocolFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"registerPool\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"params\":{\"caller\":\"The account attempting to withdraw pool creator fees\",\"pool\":\"The pool the caller tried to withdraw from\"}}],\"PoolCreatorNotRegistered(address)\":[{\"params\":{\"pool\":\"The pool with no creator\"}}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol swap fee percentages.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol yield fee percentages.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"params\":{\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"params\":{\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global swap fee percentage.\",\"params\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global yield fee percentage.\",\"params\":{\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which pool creator fees are being withdrawn\",\"recipient\":\"The recipient of the funds (the pool creator if permissionless, or another account)\",\"token\":\"The token being withdrawn\"}},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator swap fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage for the pool\"}},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator yield fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage for the pool\"}},\"PoolWithCreatorRegistered(address,address,bool)\":{\"details\":\"The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee counterpart also include the protocol fee exemption flag, we might as well include it here as well.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (non-zero, or the event would not be emitted)\",\"protocolFeeExempt\":\"True if the pool is initially exempt from protocol fees\"}},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which protocol fees are being withdrawn\",\"recipient\":\"The recipient of the funds\",\"token\":\"The token being withdrawn\"}},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the swap fee was charged\",\"token\":\"The token in which the swap fee was charged\"}},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol swap fee will be changed\",\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the yield fee was charged\",\"token\":\"The token in which the yield fee was charged\"}},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol yield fee will be changed\",\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}}},\"kind\":\"dev\",\"methods\":{\"collectAggregateFees(address)\":{\"params\":{\"pool\":\"The pool with aggregate fees\"}},\"computeAggregateFeePercentage(uint256,uint256)\":{\"details\":\"Not tied to any particular pool; this just performs the low-level \\\"additive fee\\\" calculation. Note that pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are stored in the Vault with 24-bit precision, this will truncate any values that require greater precision. It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee components, but the truncation ensures it will not revert for any valid set of fee percentages. See example below: tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60% totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000 protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400 creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600 creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360 lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\",\"params\":{\"poolCreatorFeePercentage\":\"The pool creator portion of the aggregate fee percentage\",\"protocolFeePercentage\":\"The protocol portion of the aggregate fee percentage\"},\"returns\":{\"aggregateFeePercentage\":\"The computed aggregate percentage\"}},\"getGlobalProtocolSwapFeePercentage()\":{\"returns\":{\"protocolSwapFeePercentage\":\"The global protocol swap fee percentage\"}},\"getGlobalProtocolYieldFeePercentage()\":{\"returns\":{\"protocolYieldFeePercentage\":\"The global protocol yield fee percentage\"}},\"getPoolCreatorFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getPoolCreatorSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\"}},\"getPoolCreatorYieldFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\"}},\"getPoolProtocolSwapFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"isOverride\":\"True if the protocol fee has been overridden\",\"protocolSwapFeePercentage\":\"The protocol swap fee percentage for the given pool\"}},\"getPoolProtocolYieldFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"isOverride\":\"True if the protocol fee has been overridden\",\"protocolYieldFeePercentage\":\"The protocol yield fee percentage for the given pool\"}},\"getProtocolFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\"}},\"registerPool(address,address,bool)\":{\"details\":\"This must be called from the Vault during pool registration. It will initialize the pool to the global protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate fee percentages, based on an initial pool creator fee of 0.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (or 0 if there won't be a pool creator fee)\",\"protocolFeeExempt\":\"If true, the pool is initially exempt from protocol fees\"},\"returns\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\"}},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\"}},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage to apply to the pool\"}},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage to apply to the pool\"}},\"setProtocolSwapFeePercentage(address,uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol swap fee\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol yield fee\"}},\"updateProtocolSwapFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol swap fee\"}},\"updateProtocolYieldFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol yield fee\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The Vault address\"}},\"withdrawPoolCreatorFees(address)\":{\"details\":\"Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable value, this function is permissionless.\",\"params\":{\"pool\":\"The pool on which fees were collected\"}},\"withdrawPoolCreatorFees(address,address)\":{\"details\":\"Sends swap and yield pool creator fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFees(address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFeesForToken(address,address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\",\"token\":\"Token to withdraw\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"notice\":\"Error raised if the wrong account attempts to withdraw pool creator fees.\"}],\"PoolCreatorFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\"}],\"PoolCreatorNotRegistered(address)\":[{\"notice\":\"Error raised if there is no pool creator on a withdrawal attempt from the given pool.\"}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated.\"},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated.\"},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\"},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\"},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of pool creator fees in a specific token and amount.\"},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator swap fee percentage of a pool is updated.\"},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator yield fee percentage of a pool is updated.\"},\"PoolWithCreatorRegistered(address,address,bool)\":{\"notice\":\"Emitted for pools registered with creators.\"},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of protocol fees in a specific token and amount.\"},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol swap fees in a specific token and amount.\"},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated for a specific pool.\"},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol yield fees in a specific token and amount.\"},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated for a specific pool.\"}},\"kind\":\"user\",\"methods\":{\"collectAggregateFees(address)\":{\"notice\":\"Collects aggregate fees from the Vault for a given pool.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"notice\":\"Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\"},\"getGlobalProtocolSwapFeePercentage()\":{\"notice\":\"Getter for the current global protocol swap fee.\"},\"getGlobalProtocolYieldFeePercentage()\":{\"notice\":\"Getter for the current global protocol yield fee.\"},\"getPoolCreatorFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the pool creator for withdrawal.\"},\"getPoolCreatorSwapFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator swap fee percentage for a given pool.\"},\"getPoolCreatorYieldFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator swap fee percentage for a given pool.\"},\"getPoolProtocolSwapFeeInfo(address)\":{\"notice\":\"Getter for the current protocol swap fee for a given pool.\"},\"getPoolProtocolYieldFeeInfo(address)\":{\"notice\":\"Getter for the current protocol yield fee for a given pool.\"},\"getProtocolFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the protocol for withdrawal.\"},\"isPoolRegistered(address)\":{\"notice\":\"Getter for pool registration flag.\"},\"registerPool(address,address,bool)\":{\"notice\":\"Add pool-specific entries to the protocol swap and yield percentages.\"},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"notice\":\"Set the global protocol swap fee percentage, used by standard pools.\"},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"notice\":\"Set the global protocol yield fee percentage, used by standard pools.\"},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator swap fee percentage to the specified pool.\"},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator yield fee percentage to the specified pool.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"updateProtocolSwapFeePercentage(address)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"updateProtocolYieldFeePercentage(address)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"vault()\":{\"notice\":\"Get the address of the main Vault contract.\"},\"withdrawPoolCreatorFees(address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool.\"},\"withdrawPoolCreatorFees(address,address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool. This is a permissioned function.\"},\"withdrawProtocolFees(address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\"},\"withdrawProtocolFeesForToken(address,address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\"}},\"notice\":\"Contract that handles protocol and pool creator fees for the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":\"IProtocolFeeController\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xe0e5193402394ef505f87b206d8e64e1ea8b604feeb2ea8bbd054050778c162d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c962b5d782a8ec4341741dd49daf071e23560548ad95ed00e1531379cfcf0a2e\",\"dweb:/ipfs/QmbPn63SLEZp719KdAtPa4urbhQwqYzfewWfNRtw3nyy8c\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"IVault":{"abi":[{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"tokenAllowance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBuffersPaused","outputs":[{"internalType":"bool","name":"buffersPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"yieldFeeAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"swapParams","type":"tuple"}],"name":"computeDynamicSwapFeePercentage","outputs":[{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQueryPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"emitAuxiliaryEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"enableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddLiquidityCalledFlag","outputs":[{"internalType":"bool","name":"liquidityAdded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"yieldFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBptRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferAsset","outputs":[{"internalType":"address","name":"underlyingToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"underlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"wrappedBalanceRaw","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"bufferMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"liquidityOwner","type":"address"}],"name":"getBufferOwnerShares","outputs":[{"internalType":"uint256","name":"ownerShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodDuration","outputs":[{"internalType":"uint32","name":"bufferPeriodDuration","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodEndTime","outputs":[{"internalType":"uint32","name":"bufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTotalShares","outputs":[{"internalType":"uint256","name":"bufferShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getERC4626BufferAsset","outputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getHooksConfig","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumPoolTokens","outputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumPoolTokens","outputs":[{"internalType":"uint256","name":"minTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumTradeAmount","outputs":[{"internalType":"uint256","name":"minimumTradeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumWrapAmount","outputs":[{"internalType":"uint256","name":"minimumWrapAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonzeroDeltaCount","outputs":[{"internalType":"uint256","name":"nonzeroDeltaCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolConfig","outputs":[{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"poolConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"poolMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolPausedState","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"},{"internalType":"uint32","name":"poolPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"poolBufferPeriodEndTime","type":"uint32"},{"internalType":"address","name":"pauseManager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolRoleAccounts","outputs":[{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"tokenCount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenRates","outputs":[{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getReservesOf","outputs":[{"internalType":"uint256","name":"reserveAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenDelta","outputs":[{"internalType":"int256","name":"tokenDelta","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAdmin","outputs":[{"internalType":"address","name":"vaultAdmin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"vaultExtension","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultPausedState","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"},{"internalType":"uint32","name":"vaultPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"vaultBufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"isERC4626BufferInitialized","outputs":[{"internalType":"bool","name":"isBufferInitialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInRecoveryMode","outputs":[{"internalType":"bool","name":"inRecoveryMode","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInitialized","outputs":[{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolPaused","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabled","outputs":[{"internalType":"bool","name":"queryDisabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabledPermanently","outputs":[{"internalType":"bool","name":"queryDisabledPermanently","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"unlocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isVaultPaused","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"pausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quote","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quoteAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"}],"name":"removeLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"setProtocolFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"tokenTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"unpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"updateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateYieldFeePercentage","type":"uint256"}],"name":"updateAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","addLiquidityToBuffer(address,uint256,uint256,uint256,address)":"e2a92b1a","allowance(address,address,address)":"927da105","approve(address,address,uint256)":"e1f21c67","areBuffersPaused()":"55cba7fe","balanceOf(address,address)":"f7888aec","collectAggregateFees(address)":"8f4ab9ca","computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))":"4d472bdd","disableQuery()":"de1a36a6","disableQueryPermanently()":"821440f2","disableRecoveryMode(address)":"bffb78b2","emitAuxiliaryEvent(bytes32,bytes)":"c8088247","enableQuery()":"e0d55605","enableRecoveryMode(address)":"dc3f574e","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","getActionId(bytes4)":"851c1bb3","getAddLiquidityCalledFlag(address)":"ace9b89b","getAggregateSwapFeeAmount(address,address)":"85e0b999","getAggregateYieldFeeAmount(address,address)":"00fdfa13","getAuthorizer()":"aaabadc5","getBptRate(address)":"4f037ee7","getBufferAsset(address)":"0387587d","getBufferBalance(address)":"4021fe0f","getBufferMinimumTotalSupply()":"26a8a991","getBufferOwnerShares(address,address)":"9385e39a","getBufferPeriodDuration()":"20c1fb7a","getBufferPeriodEndTime()":"cd51c12f","getBufferTotalShares(address)":"f2784e07","getCurrentLiveBalances(address)":"535cfd8a","getERC4626BufferAsset(address)":"4afbaf5a","getHooksConfig(address)":"ce8630d4","getMaximumPoolTokens()":"2e42f4d5","getMinimumPoolTokens()":"a8175b27","getMinimumTradeAmount()":"e2cb0ba0","getMinimumWrapAmount()":"53956aa2","getNonzeroDeltaCount()":"db817187","getPauseWindowEndTime()":"8a8d123a","getPoolConfig(address)":"f29486a1","getPoolData(address)":"13d21cdf","getPoolMinimumTotalSupply()":"d0965a6b","getPoolPausedState(address)":"15e32046","getPoolRoleAccounts(address)":"e9ddeb26","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getPoolTokenInfo(address)":"67e0e076","getPoolTokenRates(address)":"7e361bde","getPoolTokens(address)":"ca4f2803","getProtocolFeeController()":"85f2dbd4","getReservesOf(address)":"96787092","getStaticSwapFeePercentage(address)":"b45090f9","getTokenDelta(address)":"9e825ff5","getVaultAdmin()":"1ba0ae45","getVaultExtension()":"b9a8effa","getVaultPausedState()":"85c8c015","initialize(address,address,address[],uint256[],uint256,bytes)":"ba8a2be0","initializeBuffer(address,uint256,uint256,uint256,address)":"653eb3b0","isERC4626BufferInitialized(address)":"6844846b","isPoolInRecoveryMode(address)":"be7d628a","isPoolInitialized(address)":"532cec7c","isPoolPaused(address)":"6c9bc732","isPoolRegistered(address)":"c673bdaf","isQueryDisabled()":"b4aef0ab","isQueryDisabledPermanently()":"13ef8a5d","isUnlocked()":"8380edb7","isVaultPaused()":"098401f5","pausePool(address)":"55aca1ec","pauseVault()":"9e0879c2","pauseVaultBuffers()":"e085c5a8","quote(bytes)":"edfa3568","quoteAndRevert(bytes)":"757d64b3","registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"eeec802f","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","removeLiquidityFromBuffer(address,uint256,uint256,uint256)":"ebc7955c","removeLiquidityRecovery(address,address,uint256,uint256[])":"a07d6040","sendTo(address,address,uint256)":"ae639329","setAuthorizer(address)":"058a628f","setProtocolFeeController(address)":"2d771389","setStaticSwapFeePercentage(address,uint256)":"d15126ba","settle(address,uint256)":"15afd409","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","totalSupply(address)":"e4dc2aa4","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unlock(bytes)":"48c89491","unpausePool(address)":"f21c38cd","unpauseVault()":"0b7562be","unpauseVaultBuffers()":"b9212b49","updateAggregateSwapFeePercentage(address,uint256)":"5e0b06f4","updateAggregateYieldFeePercentage(address,uint256)":"e253670a","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAllowance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"buffersPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yieldFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQueryPermanently\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"emitAuxiliaryEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getAddLiquidityCalledFlag\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"liquidityAdded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"yieldFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityOwner\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ownerShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getERC4626BufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumTradeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumWrapAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonzeroDeltaCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"poolConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"poolPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"poolBufferPeriodEndTime\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"tokenDelta\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultAdmin\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultExtension\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"vaultPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"vaultBufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"isERC4626BufferInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isBufferInitialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"inRecoveryMode\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabledPermanently\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabledPermanently\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingInRaw\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedInRaw\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens deposited into the buffer\"}},\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"tokenAllowance\":\"Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\",\"returns\":{\"buffersPaused\":\"True if the Vault buffers are paused\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"tokenBalance\":\"Token balance of the account\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"swapFeeAmounts\":\"An array with the total swap fees collected, sorted in token registration order\",\"yieldFeeAmounts\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"dynamicSwapFeePercentage\":\"The dynamic swap fee percentage\"}},\"disableQuery()\":{\"details\":\"The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2). This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether disabling queries is completely necessary; queries can still be re-enabled after this call.\"},\"disableQueryPermanently()\":{\"details\":\"Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\"},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\"}},\"enableQuery()\":{\"details\":\"Only works if queries are not permanently disabled.\"},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\",\"params\":{\"pool\":\"The address of the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}},\"getAddLiquidityCalledFlag(address)\":{\"details\":\"Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional is the only standard way to exit a position without fees, and this flag is used to enable fees in that case. It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse than a simple swap for every pool type.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"liquidityAdded\":\"True if liquidity has been added to this pool in the current transaction Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"swapFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"yieldFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"authorizer\":\"Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingBalanceRaw\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"wrappedBalanceRaw\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"bufferMinimumTotalSupply\":\"The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"ownerShares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodDuration\":\"The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodEndTime\":\"The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"bufferShares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getERC4626BufferAsset(address)\":{\"details\":\"To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers should never call `wrapper.asset()` directly, at least without checking it against the asset registered with the Vault on initialization.\",\"params\":{\"wrappedToken\":\"The wrapped token specifying the buffer\"},\"returns\":{\"asset\":\"The underlying asset of the wrapped token\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"hooksConfig\":\"The hooks configuration as a `HooksConfig` struct\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"maxTokens\":\"The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"minTokens\":\"The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"minimumTradeAmount\":\"The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"minimumWrapAmount\":\"The minimum wrap amount in native underlying token decimals\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"nonzeroDeltaCount\":\"The current value of `_nonzeroDeltaCount`\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance. Balancer timestamps are 32 bits.\",\"returns\":{\"pauseWindowEndTime\":\"The timestamp when the Vault's pause window ends\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"poolConfig\":\"The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"poolData\":\"The `PoolData` result\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"poolMinimumTotalSupply\":\"The minimum total supply a pool can have after initialization\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period. Balancer timestamps are 32 bits.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"pauseManager\":\"The pause manager, or the zero address\",\"poolBufferPeriodEndTime\":\"The timestamp after which the Pool unpauses itself (if paused)\",\"poolPauseWindowEndTime\":\"The timestamp of the end of the Pool's pause window\",\"poolPaused\":\"True if the Pool is paused\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"roleAccounts\":\"A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"index\":\"Index corresponding to the given token in the pool's token list\",\"tokenCount\":\"Number of tokens in the pool\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"tokens\":\"List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"reserveAmount\":\"The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"swapFeePercentage\":\"The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"tokenDelta\":\"The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"vaultAdmin\":\"The address of the Vault admin\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"vaultExtension\":\"Address of the VaultExtension\"}},\"getVaultPausedState()\":{\"details\":\"Balancer timestamps are 32 bits.\",\"returns\":{\"vaultBufferPeriodEndTime\":\"The timestamp of the end of the Vault's buffer period\",\"vaultPauseWindowEndTime\":\"The timestamp of the end of the Vault's pause window\",\"vaultPaused\":\"True if the Vault is paused\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isERC4626BufferInitialized(address)\":{\"details\":\"An initialized buffer should have an asset registered in the Vault.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"isBufferInitialized\":\"True if the ERC4626 buffer is initialized\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"inRecoveryMode\":\"True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"initialized\":\"True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"poolPaused\":\"True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"registered\":\"True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"If true, queries might either be disabled temporarily or permanently.\",\"returns\":{\"queryDisabled\":\"True if query functionality is reversibly disabled\"}},\"isQueryDisabledPermanently()\":{\"details\":\"This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\",\"returns\":{\"queryDisabledPermanently\":\"True if query functionality is permanently disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"unlocked\":\"True if the Vault is unlocked, false otherwise\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `areBuffersPaused` to check the pause state of the buffers.\",\"returns\":{\"vaultPaused\":\"True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment. Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers are also paused (with `pauseVaultBuffers`).\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting buffers, and vice versa.\"},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. Balancer timestamps are 32 bits. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOut\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"tokenTotalSupply\":\"Total supply of the token\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`. If the Vault was also paused, it will remain in that state until explicitly unpaused. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateSwapFeePercentageChanged` event.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose swap fee percentage will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateYieldFeePercentageChanged` event.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose yield fee percentage will be updated\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The main Vault address.\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\"},\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"disableQuery()\":{\"notice\":\"Disables query functionality on the Vault. Can only be called by governance.\"},\"disableQueryPermanently()\":{\"notice\":\"Disables query functionality permanently on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"enableQuery()\":{\"notice\":\"Enables query functionality on the Vault. Can only be called by governance.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAddLiquidityCalledFlag(address)\":{\"notice\":\"This flag is used to detect and tax \\\"round-trip\\\" interactions (adding and removing liquidity in the same pool).\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getERC4626BufferAsset(address)\":{\"notice\":\"Gets the registered asset for a given buffer.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isERC4626BufferInitialized(address)\":{\"notice\":\"Checks if the wrapped token has an initialized buffer in the Vault.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Returns true if queries are disabled on the Vault.\"},\"isQueryDisabledPermanently()\":{\"notice\":\"Returns true if queries are disabled permanently; false if they are enabled.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"}},\"notice\":\"Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":\"IVault\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xe0e5193402394ef505f87b206d8e64e1ea8b604feeb2ea8bbd054050778c162d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c962b5d782a8ec4341741dd49daf071e23560548ad95ed00e1531379cfcf0a2e\",\"dweb:/ipfs/QmbPn63SLEZp719KdAtPa4urbhQwqYzfewWfNRtw3nyy8c\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"IVaultAdmin":{"abi":[{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBuffersPaused","outputs":[{"internalType":"bool","name":"buffersPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"yieldFeeAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQueryPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"enableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferAsset","outputs":[{"internalType":"address","name":"underlyingToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"underlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"wrappedBalanceRaw","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"bufferMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"liquidityOwner","type":"address"}],"name":"getBufferOwnerShares","outputs":[{"internalType":"uint256","name":"ownerShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodDuration","outputs":[{"internalType":"uint32","name":"bufferPeriodDuration","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodEndTime","outputs":[{"internalType":"uint32","name":"bufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTotalShares","outputs":[{"internalType":"uint256","name":"bufferShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumPoolTokens","outputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumPoolTokens","outputs":[{"internalType":"uint256","name":"minTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumTradeAmount","outputs":[{"internalType":"uint256","name":"minimumTradeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumWrapAmount","outputs":[{"internalType":"uint256","name":"minimumWrapAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"poolMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getVaultPausedState","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"},{"internalType":"uint32","name":"vaultPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"vaultBufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isVaultPaused","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"pausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"}],"name":"removeLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"setProtocolFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"unpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"updateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateYieldFeePercentage","type":"uint256"}],"name":"updateAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidityToBuffer(address,uint256,uint256,uint256,address)":"e2a92b1a","areBuffersPaused()":"55cba7fe","collectAggregateFees(address)":"8f4ab9ca","disableQuery()":"de1a36a6","disableQueryPermanently()":"821440f2","disableRecoveryMode(address)":"bffb78b2","enableQuery()":"e0d55605","enableRecoveryMode(address)":"dc3f574e","getBufferAsset(address)":"0387587d","getBufferBalance(address)":"4021fe0f","getBufferMinimumTotalSupply()":"26a8a991","getBufferOwnerShares(address,address)":"9385e39a","getBufferPeriodDuration()":"20c1fb7a","getBufferPeriodEndTime()":"cd51c12f","getBufferTotalShares(address)":"f2784e07","getMaximumPoolTokens()":"2e42f4d5","getMinimumPoolTokens()":"a8175b27","getMinimumTradeAmount()":"e2cb0ba0","getMinimumWrapAmount()":"53956aa2","getPauseWindowEndTime()":"8a8d123a","getPoolMinimumTotalSupply()":"d0965a6b","getVaultPausedState()":"85c8c015","initializeBuffer(address,uint256,uint256,uint256,address)":"653eb3b0","isVaultPaused()":"098401f5","pausePool(address)":"55aca1ec","pauseVault()":"9e0879c2","pauseVaultBuffers()":"e085c5a8","removeLiquidityFromBuffer(address,uint256,uint256,uint256)":"ebc7955c","setAuthorizer(address)":"058a628f","setProtocolFeeController(address)":"2d771389","setStaticSwapFeePercentage(address,uint256)":"d15126ba","unpausePool(address)":"f21c38cd","unpauseVault()":"0b7562be","unpauseVaultBuffers()":"b9212b49","updateAggregateSwapFeePercentage(address,uint256)":"5e0b06f4","updateAggregateYieldFeePercentage(address,uint256)":"e253670a","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"buffersPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yieldFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQueryPermanently\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityOwner\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ownerShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumTradeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumWrapAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"vaultPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"vaultBufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"`VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations, as two delegate calls add gas to each call. Most of the permissioned calls are here.\",\"kind\":\"dev\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingInRaw\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedInRaw\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens deposited into the buffer\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\",\"returns\":{\"buffersPaused\":\"True if the Vault buffers are paused\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"swapFeeAmounts\":\"An array with the total swap fees collected, sorted in token registration order\",\"yieldFeeAmounts\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"disableQuery()\":{\"details\":\"The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2). This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether disabling queries is completely necessary; queries can still be re-enabled after this call.\"},\"disableQueryPermanently()\":{\"details\":\"Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\"},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"enableQuery()\":{\"details\":\"Only works if queries are not permanently disabled.\"},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\",\"params\":{\"pool\":\"The address of the pool\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingBalanceRaw\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"wrappedBalanceRaw\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"bufferMinimumTotalSupply\":\"The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"ownerShares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodDuration\":\"The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodEndTime\":\"The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"bufferShares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"maxTokens\":\"The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"minTokens\":\"The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"minimumTradeAmount\":\"The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"minimumWrapAmount\":\"The minimum wrap amount in native underlying token decimals\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance. Balancer timestamps are 32 bits.\",\"returns\":{\"pauseWindowEndTime\":\"The timestamp when the Vault's pause window ends\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"poolMinimumTotalSupply\":\"The minimum total supply a pool can have after initialization\"}},\"getVaultPausedState()\":{\"details\":\"Balancer timestamps are 32 bits.\",\"returns\":{\"vaultBufferPeriodEndTime\":\"The timestamp of the end of the Vault's buffer period\",\"vaultPauseWindowEndTime\":\"The timestamp of the end of the Vault's pause window\",\"vaultPaused\":\"True if the Vault is paused\"}},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `areBuffersPaused` to check the pause state of the buffers.\",\"returns\":{\"vaultPaused\":\"True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment. Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers are also paused (with `pauseVaultBuffers`).\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting buffers, and vice versa.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`. If the Vault was also paused, it will remain in that state until explicitly unpaused. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateSwapFeePercentageChanged` event.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose swap fee percentage will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateYieldFeePercentageChanged` event.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose yield fee percentage will be updated\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"disableQuery()\":{\"notice\":\"Disables query functionality on the Vault. Can only be called by governance.\"},\"disableQueryPermanently()\":{\"notice\":\"Disables query functionality permanently on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"enableQuery()\":{\"notice\":\"Enables query functionality on the Vault. Can only be called by governance.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"notice\":\"Interface for functions defined on the `VaultAdmin` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":\"IVaultAdmin\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xe0e5193402394ef505f87b206d8e64e1ea8b604feeb2ea8bbd054050778c162d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c962b5d782a8ec4341741dd49daf071e23560548ad95ed00e1531379cfcf0a2e\",\"dweb:/ipfs/QmbPn63SLEZp719KdAtPa4urbhQwqYzfewWfNRtw3nyy8c\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"IVaultErrors":{"abi":[{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Errors are declared inside an interface (namespace) to improve DX with Typechain.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":\"IVaultErrors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"IVaultEvents":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Events are declared inside an interface (namespace) to improve DX with Typechain.\",\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":\"IVaultEvents\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xe0e5193402394ef505f87b206d8e64e1ea8b604feeb2ea8bbd054050778c162d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c962b5d782a8ec4341741dd49daf071e23560548ad95ed00e1531379cfcf0a2e\",\"dweb:/ipfs/QmbPn63SLEZp719KdAtPa4urbhQwqYzfewWfNRtw3nyy8c\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"IVaultExtension":{"abi":[{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"tokenAllowance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"swapParams","type":"tuple"}],"name":"computeDynamicSwapFeePercentage","outputs":[{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"emitAuxiliaryEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddLiquidityCalledFlag","outputs":[{"internalType":"bool","name":"liquidityAdded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"yieldFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBptRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getERC4626BufferAsset","outputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getHooksConfig","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonzeroDeltaCount","outputs":[{"internalType":"uint256","name":"nonzeroDeltaCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolConfig","outputs":[{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"poolConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolPausedState","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"},{"internalType":"uint32","name":"poolPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"poolBufferPeriodEndTime","type":"uint32"},{"internalType":"address","name":"pauseManager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolRoleAccounts","outputs":[{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenRates","outputs":[{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getReservesOf","outputs":[{"internalType":"uint256","name":"reserveAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenDelta","outputs":[{"internalType":"int256","name":"tokenDelta","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAdmin","outputs":[{"internalType":"address","name":"vaultAdmin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"isERC4626BufferInitialized","outputs":[{"internalType":"bool","name":"isBufferInitialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInRecoveryMode","outputs":[{"internalType":"bool","name":"inRecoveryMode","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInitialized","outputs":[{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolPaused","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabled","outputs":[{"internalType":"bool","name":"queryDisabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabledPermanently","outputs":[{"internalType":"bool","name":"queryDisabledPermanently","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"unlocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quote","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quoteAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"tokenTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address,address)":"927da105","approve(address,address,uint256)":"e1f21c67","balanceOf(address,address)":"f7888aec","computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))":"4d472bdd","emitAuxiliaryEvent(bytes32,bytes)":"c8088247","getAddLiquidityCalledFlag(address)":"ace9b89b","getAggregateSwapFeeAmount(address,address)":"85e0b999","getAggregateYieldFeeAmount(address,address)":"00fdfa13","getAuthorizer()":"aaabadc5","getBptRate(address)":"4f037ee7","getCurrentLiveBalances(address)":"535cfd8a","getERC4626BufferAsset(address)":"4afbaf5a","getHooksConfig(address)":"ce8630d4","getNonzeroDeltaCount()":"db817187","getPoolConfig(address)":"f29486a1","getPoolData(address)":"13d21cdf","getPoolPausedState(address)":"15e32046","getPoolRoleAccounts(address)":"e9ddeb26","getPoolTokenInfo(address)":"67e0e076","getPoolTokenRates(address)":"7e361bde","getPoolTokens(address)":"ca4f2803","getProtocolFeeController()":"85f2dbd4","getReservesOf(address)":"96787092","getStaticSwapFeePercentage(address)":"b45090f9","getTokenDelta(address)":"9e825ff5","getVaultAdmin()":"1ba0ae45","initialize(address,address,address[],uint256[],uint256,bytes)":"ba8a2be0","isERC4626BufferInitialized(address)":"6844846b","isPoolInRecoveryMode(address)":"be7d628a","isPoolInitialized(address)":"532cec7c","isPoolPaused(address)":"6c9bc732","isPoolRegistered(address)":"c673bdaf","isQueryDisabled()":"b4aef0ab","isQueryDisabledPermanently()":"13ef8a5d","isUnlocked()":"8380edb7","quote(bytes)":"edfa3568","quoteAndRevert(bytes)":"757d64b3","registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"eeec802f","removeLiquidityRecovery(address,address,uint256,uint256[])":"a07d6040","totalSupply(address)":"e4dc2aa4","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAllowance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"emitAuxiliaryEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getAddLiquidityCalledFlag\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"liquidityAdded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"yieldFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getERC4626BufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonzeroDeltaCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"poolConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"poolPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"poolBufferPeriodEndTime\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"tokenDelta\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultAdmin\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"isERC4626BufferInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isBufferInitialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"inRecoveryMode\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabledPermanently\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabledPermanently\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"`VaultExtension` handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and liquidity operations.\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"tokenAllowance\":\"Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"tokenBalance\":\"Token balance of the account\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"dynamicSwapFeePercentage\":\"The dynamic swap fee percentage\"}},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\"}},\"getAddLiquidityCalledFlag(address)\":{\"details\":\"Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional is the only standard way to exit a position without fees, and this flag is used to enable fees in that case. It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse than a simple swap for every pool type.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"liquidityAdded\":\"True if liquidity has been added to this pool in the current transaction Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"swapFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"yieldFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"authorizer\":\"Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getERC4626BufferAsset(address)\":{\"details\":\"To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers should never call `wrapper.asset()` directly, at least without checking it against the asset registered with the Vault on initialization.\",\"params\":{\"wrappedToken\":\"The wrapped token specifying the buffer\"},\"returns\":{\"asset\":\"The underlying asset of the wrapped token\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"hooksConfig\":\"The hooks configuration as a `HooksConfig` struct\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"nonzeroDeltaCount\":\"The current value of `_nonzeroDeltaCount`\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"poolConfig\":\"The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"poolData\":\"The `PoolData` result\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period. Balancer timestamps are 32 bits.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"pauseManager\":\"The pause manager, or the zero address\",\"poolBufferPeriodEndTime\":\"The timestamp after which the Pool unpauses itself (if paused)\",\"poolPauseWindowEndTime\":\"The timestamp of the end of the Pool's pause window\",\"poolPaused\":\"True if the Pool is paused\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"roleAccounts\":\"A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"tokens\":\"List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"reserveAmount\":\"The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"swapFeePercentage\":\"The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"tokenDelta\":\"The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"vaultAdmin\":\"The address of the Vault admin\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"isERC4626BufferInitialized(address)\":{\"details\":\"An initialized buffer should have an asset registered in the Vault.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"isBufferInitialized\":\"True if the ERC4626 buffer is initialized\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"inRecoveryMode\":\"True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"initialized\":\"True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"poolPaused\":\"True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"registered\":\"True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"If true, queries might either be disabled temporarily or permanently.\",\"returns\":{\"queryDisabled\":\"True if query functionality is reversibly disabled\"}},\"isQueryDisabledPermanently()\":{\"details\":\"This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\",\"returns\":{\"queryDisabledPermanently\":\"True if query functionality is permanently disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"unlocked\":\"True if the Vault is unlocked, false otherwise\"}},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. Balancer timestamps are 32 bits. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOut\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"tokenTotalSupply\":\"Total supply of the token\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"getAddLiquidityCalledFlag(address)\":{\"notice\":\"This flag is used to detect and tax \\\"round-trip\\\" interactions (adding and removing liquidity in the same pool).\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getERC4626BufferAsset(address)\":{\"notice\":\"Gets the registered asset for a given buffer.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"isERC4626BufferInitialized(address)\":{\"notice\":\"Checks if the wrapped token has an initialized buffer in the Vault.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Returns true if queries are disabled on the Vault.\"},\"isQueryDisabledPermanently()\":{\"notice\":\"Returns true if queries are disabled permanently; false if they are enabled.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"notice\":\"Interface for functions defined on the `VaultExtension` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":\"IVaultExtension\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xe0e5193402394ef505f87b206d8e64e1ea8b604feeb2ea8bbd054050778c162d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c962b5d782a8ec4341741dd49daf071e23560548ad95ed00e1531379cfcf0a2e\",\"dweb:/ipfs/QmbPn63SLEZp719KdAtPa4urbhQwqYzfewWfNRtw3nyy8c\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"IVaultMain":{"abi":[{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"tokenCount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"vaultExtension","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getVaultExtension()":"b9a8effa","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","sendTo(address,address,uint256)":"ae639329","settle(address,uint256)":"15afd409","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unlock(bytes)":"48c89491"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultExtension\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These are generally \\\"critical path\\\" functions (swap, add/remove liquidity) that are in the main contract for technical or performance reasons.\",\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"index\":\"Index corresponding to the given token in the pool's token list\",\"tokenCount\":\"Number of tokens in the pool\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"vaultExtension\":\"Address of the VaultExtension\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"}},\"notice\":\"Interface for functions defined on the main Vault contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":\"IVaultMain\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"Authentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be applied to external functions to make them only callable by authorized accounts. Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in multi-contract systems. There are two main uses for it: - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers unique. The contract's own address is a good option. - if the contract belongs to a family that shares action identifiers for the same functions, an identifier shared by the entire family (and no other contract) should be used instead.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"notice\":\"Building block for performing access control on external functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":\"Authentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"FixedPoint":{"abi":[{"inputs":[],"name":"ZeroDivision","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220e9cc622b7f35aaf8f3efa30ad767c4a02aedd5ccde9b7738c8491078c2823d0164736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 0xCC PUSH3 0x2B7F35 0xAA 0xF8 RETURN 0xEF LOG3 EXP 0xD7 PUSH8 0xC4A02AEDD5CCDE9B PUSH24 0x38C8491078C2823D0164736F6C634300081B003300000000 ","sourceMap":"239:5688:14:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220e9cc622b7f35aaf8f3efa30ad767c4a02aedd5ccde9b7738c8491078c2823d0164736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 0xCC PUSH3 0x2B7F35 0xAA 0xF8 RETURN 0xEF LOG3 EXP 0xD7 PUSH8 0xC4A02AEDD5CCDE9B PUSH24 0x38C8491078C2823D0164736F6C634300081B003300000000 ","sourceMap":"239:5688:14:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":\"FixedPoint\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"LogExpMath":{"abi":[{"inputs":[],"name":"BaseOutOfBounds","type":"error"},{"inputs":[],"name":"ExponentOutOfBounds","type":"error"},{"inputs":[],"name":"InvalidExponent","type":"error"},{"inputs":[],"name":"OutOfBounds","type":"error"},{"inputs":[],"name":"ProductOutOfBounds","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220f7e8e3ef4405ba858296891409b167de675961dcc03dc03125ef5eed9c9eb29264736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF7 0xE8 0xE3 0xEF PREVRANDAO SDIV 0xBA DUP6 DUP3 SWAP7 DUP10 EQ MULMOD 0xB1 PUSH8 0xDE675961DCC03DC0 BALANCE 0x25 0xEF MCOPY 0xED SWAP13 SWAP15 0xB2 SWAP3 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"595:21889:15:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220f7e8e3ef4405ba858296891409b167de675961dcc03dc03125ef5eed9c9eb29264736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF7 0xE8 0xE3 0xEF PREVRANDAO SDIV 0xBA DUP6 DUP3 SWAP7 DUP10 EQ MULMOD 0xB1 PUSH8 0xDE675961DCC03DC0 BALANCE 0x25 0xEF MCOPY 0xED SWAP13 SWAP15 0xB2 SWAP3 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"595:21889:15:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BaseOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExponentOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExponent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProductOutOfBounds\",\"type\":\"error\"}],\"devdoc\":{\"author\":\"Fernando Martinelli - @fernandomartinelliSergio Yuhjtman - @sergioyuhjtmanDaniel Fernandez - @dmf7z\",\"details\":\"Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument). Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural exponentiation and logarithm (where the base is Euler's number). All math operations are unchecked in order to save gas.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"BaseOutOfBounds()\":[{\"notice\":\"This error is thrown when a base is not within an acceptable range.\"}],\"ExponentOutOfBounds()\":[{\"notice\":\"This error is thrown when a exponent is not within an acceptable range.\"}],\"InvalidExponent()\":[{\"notice\":\"This error is thrown when an exponent used in the exp function is not within an acceptable range.\"}],\"OutOfBounds()\":[{\"notice\":\"This error is thrown when a variable or result is not within the acceptable bounds defined in the function.\"}],\"ProductOutOfBounds()\":[{\"notice\":\"This error is thrown when the exponent * ln(base) is not within an acceptable range.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":\"LogExpMath\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"ReentrancyGuardTransient":{"abi":[{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"NOTE: This variant only works on networks where EIP-1153 is available.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Variant of {ReentrancyGuard} that uses transient storage.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":\"ReentrancyGuardTransient\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"StorageSlotExtension":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212207d1ece238b2a90fbead6c43dfa8046238cc35e0b4dec12d000c4f2cebfef20e164736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH30 0x1ECE238B2A90FBEAD6C43DFA8046238CC35E0B4DEC12D000C4F2CEBFEF20 0xE1 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"278:4371:17:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212207d1ece238b2a90fbead6c43dfa8046238cc35e0b4dec12d000c4f2cebfef20e164736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH30 0x1ECE238B2A90FBEAD6C43DFA8046238CC35E0B4DEC12D000C4F2CEBFEF20 0xE1 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"278:4371:17:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"TIP: Consider using this library along with {SlotDerivation}.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":\"StorageSlotExtension\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol":{"ProtocolFeeController":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"pool","type":"address"}],"name":"CallerIsNotPoolCreator","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[],"name":"InvalidMigrationSource","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[],"name":"PoolCreatorFeePercentageTooHigh","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreatorNotRegistered","type":"error"},{"inputs":[],"name":"ProtocolSwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ProtocolYieldFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"ZeroDivision","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"GlobalProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"GlobalProtocolYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateSwapFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateYieldFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PoolCreatorFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"PoolCreatorSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"PoolCreatorYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"poolCreator","type":"address"},{"indexed":false,"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"PoolWithCreatorRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolSwapFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"ProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolYieldFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"ProtocolYieldFeePercentageChanged","type":"event"},{"inputs":[],"name":"MAX_CREATOR_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFeesHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"protocolFeePercentage","type":"uint256"},{"internalType":"uint256","name":"poolCreatorFeePercentage","type":"uint256"}],"name":"computeAggregateFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolSwapFeeInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolYieldFeeInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getProtocolFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"migratePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"registerPool","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setGlobalProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setGlobalProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"setPoolCreatorSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"setPoolCreatorYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60e03461010257601f612db938819003918201601f19168301916001600160401b038311848410176101065780849260209460405283398101031261010257516001600160a01b038116810361010257306080528060a05260c052604051612c9e908161011b8239608051816120aa015260a051818181611074015261235d015260c0518181816102530152818161036e015281816103f8015281816105170152818161058501528181610864015281816108d201528181610c7d01528181610db301528181611510015281816116b501528181611856015281816119b001528181611b2501528181612288015281816126ba0152818161283601526129110152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c9081630252aab514611ede575080630874327f14611acd5780630b8e059b14611a955780630ddd60c614611a745780631377c16c146119555780632772d156146117725780632e1d388d146119335780633af52712146117fb57806352f125f0146117d057806355fb76af146117b35780635c15a0b4146117775780635e32e4e81461177257806371447ea8146115cd57806371ecc8fb1461142957806377ff76e7146111d35780637869ee18146111b75780637a2b97dc1461114c578063851c1bb3146110fc5780638a3c5c69146110985780638d928af8146110555780638df44c5414610fcd5780638f4ab9ca14610fac5780639e95f3fd14610f20578063a93df2a414610ebb578063aaabadc514610e90578063abaa335614610ce7578063b53a70b214610c00578063c673bdaf14610bc3578063cf7b287f14610b5d578063f706144514610b28578063fa399f2a14610392578063fbfa77cf1461034f5763fd267f3914610187575f80fd5b34610323576040600319360112610323576101a0611f12565b602435906101ac61242c565b6706f05b59d3b200008211610327576101c48261288a565b6101cd816121c6565b6101d682612523565b916040516101e381611f9b565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600360205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169161027d81612aaa565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e92602092610309575b50604051908152a2005b61031290611fe4565b5f6102ff565b6040513d5f823e3d90fd5b5f80fd5b7f7e6eb7fb000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610323576020600319360112610323576103ab611f12565b6103b361282c565b6040517f8f4ab9ca0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201525f81602481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610318575f905f92610acb575b506001600160a01b0383165f52600360205267ffffffffffffffff60405f20541690600560205260405f2054905f928215159384610ac1575b84610ab1575b610472876128d2565b94905f5b8681106108225789896001600160a01b0382165f52600460205267ffffffffffffffff60405f205416905f92600660205260405f2054925f8415159485610818575b85610806575b6104c7846128d2565b96905f5b8881106104d457005b6104de818961214b565b516104ec575b6001016104cb565b986001600160a01b036104ff8b8461214b565b51169061050c8b8a61214b565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561080257604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201528181606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156107f7579082916107e0575b506107b357505f99816105c8828b61214b565b516040519081527fe505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e260206001600160a01b038c1692a383156107385761060e818a61214b565b5186156107105761061e90612575565b6001670de0b6b3a764000061065f8a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848c878301040190151502612592565b928301040190151502916001600160a01b0389165f52600760205260405f20815f5260205260405f20610693848254612568565b905561069f828b61214b565b519081848103116106e3576001936106d9916001600160a01b038c165f52600860205260405f20905f5260205260405f2092038254612568565b90555b90506104e4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001918561077d5761074a828b61214b565b51906001600160a01b038a165f52600760205260405f20905f5260205261077660405f20918254612568565b90556106dc565b610787828b61214b565b51906001600160a01b038a165f52600860205260405f20905f5260205261077660405f20918254612568565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6107e990611fe4565b6107f457808c6105b5565b80fd5b6040513d84823e3d90fd5b5080fd5b905061081281836125a5565b906104be565b82151595506104b8565b61082c818761214b565b5161083a575b600101610476565b6001600160a01b0361084c828461214b565b511690610859818861214b565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561032357604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201525f81606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561031857610aa2575b50818b7fae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f60206001600160a01b03610937868d61214b565b51936040519485521692a38815610a2757610952818861214b565b5185156107105761096290612575565b6001670de0b6b3a76400006109a3897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848b878301040190151502612592565b928301040190151502916001600160a01b038c165f52600760205260405f20815f5260205260405f206109d7848254612568565b90556109e3828961214b565b519081848103116106e357600193610a1d916001600160a01b038f165f52600860205260405f20905f5260205260405f2092038254612568565b90555b9050610832565b60019184610a6c57610a39828961214b565b51906001600160a01b038d165f52600760205260405f20905f52602052610a6560405f20918254612568565b9055610a20565b610a76828961214b565b51906001600160a01b038d165f52600860205260405f20905f52602052610a6560405f20918254612568565b610aab90611fe4565b8b6108ff565b50610abc83826125a5565b610469565b8115159450610463565b9150503d805f833e610add8183612014565b8101906040818303126103235780519167ffffffffffffffff928381116103235781610b0a9184016123cb565b92602083015190811161032357610b2192016123cb565b908361042a565b3461032357604060031936011261032357610b5b610b44611f12565b610b4c611f28565b90610b56816125e6565b612775565b005b3461032357604060031936011261032357610b76611f12565b610b7e611f28565b90610b8761242c565b610b90816128d2565b915f5b838110610b9c57005b80610bbd6001600160a01b03610bb46001948761214b565b511687856129e6565b01610b93565b34610323576020600319360112610323576001600160a01b03610be4611f12565b165f526002602052602060ff60405f2054166040519015158152f35b3461032357606060031936011261032357610c19611f12565b610c21611f28565b604435906001600160a01b039283831680840361032357604090610c4361242c565b60448251809781937fc9c1661b000000000000000000000000000000000000000000000000000000008352818716600484015260248301527f0000000000000000000000000000000000000000000000000000000000000000165afa801561031857610cb4575b610b5b93506129e6565b6040843d604011610cdf575b81610ccd60409383612014565b8101031261032357610b5b9350610caa565b3d9150610cc0565b3461032357604060031936011261032357610d00611f12565b60243590610d0c61242c565b6706f05b59d3b200008211610e6857610d248261288a565b610d2d816121c6565b610d3682612523565b91604051610d4381611f9b565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600460205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f00000000000000000000000000000000000000000000000000000000000000001691610ddd81612a78565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd926020926103095750604051908152a2005b7fa7849e8e000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576020610eaa612327565b6001600160a01b0360405191168152f35b34610323576020600319360112610323576004356706f05b59d3b200008111610e6857602081610f0b7f48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f69361288a565b610f1361242c565b80600155604051908152a1005b346103235760208060031936011261032357610f3a611f12565b90610f44826128d2565b90610f4e826120fc565b925f946001600160a01b03809116955b848110610f775760405180610f738882611f60565b0390f35b600190875f526008845260405f2083610f90838861214b565b51165f52845260405f2054610fa5828961214b565b5201610f5e565b3461032357602060031936011261032357610b5b610fc8611f12565b6121c6565b346103235760208060031936011261032357610fe7611f12565b90610ff1826128d2565b90610ffb826120fc565b925f946001600160a01b03809116955b8481106110205760405180610f738882611f60565b600190875f526007845260405f2083611039838861214b565b51165f52845260405f205461104e828961214b565b520161100b565b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610323576020600319360112610323576004356706f05b59d3b200008111610327576020816110e87fbf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d9361288a565b6110f061242c565b805f55604051908152a1005b34610323576020600319360112610323576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036103235761114460209161207f565b604051908152f35b34610323576020600319360112610323576001600160a01b0361116d611f12565b165f526004602052602060405f206040519061118882611f9b565b5467ffffffffffffffff811680835260ff604092831c1615159390920183905280519182526020820192909252f35b34610323575f6003193601126103235760205f54604051908152f35b34610323576060600319360112610323576111ec611f12565b6111f4611f28565b906044359081151592838303610323576040936112969261121361282c565b6001600160a01b0380911690815f5260209360028552875f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055865f146113fc57827fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb6113a35f995b80156113ee5788888c5f9c8d91612523565b8f51906112a282611f9b565b67ffffffffffffffff80911682526004611312868401948686528b5f5260038852604084905f209551169480549651151560401b967fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000968768ff0000000000000000809a16921617179055612523565b9560408390519761132289611f9b565b1687528087019586528a5f525260405f209451169184549351151560401b16921617179055837fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a78564828d8f611389905192839283909291602090604083019483521515910152565b0390a28b518a815290151560208201529081906040820190565b0390a2169183836113bd575b505050508351928352820152f35b7fa90fdff0801794d86ec8df4bdd2b7e627d30052d0658e18cb977b38248ee45e8918851908152a3848080836113af565b88888c6001549c8d91612523565b827fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb6113a35f5499611284565b346103235760208060031936011261032357611443611f12565b61144c816121c6565b6001600160a01b039182821692835f526003825260405f20906040519161147283611f9b565b549167ffffffffffffffff9060ff8285169485835260401c1615908582159101525f5493816115c2575b506114a357005b6114ac83612523565b9080604051926114bb84611f9b565b168252848201905f8252875f526003865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169261153a81612aaa565b843b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e936103095750604051908152a2005b90508314158761149c565b3461032357602080600319360112610323576115e7611f12565b6115f0816121c6565b6001600160a01b039182821692835f526004825260405f20906040519161161683611f9b565b549167ffffffffffffffff9060ff8285169485835260401c1615908582159101526001549381611767575b5061164857005b61165183612523565b90806040519261166084611f9b565b168252848201905f8252875f526004865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f000000000000000000000000000000000000000000000000000000000000000016926116df81612a78565b843b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd936103095750604051908152a2005b905083141587611641565b611f3e565b34610323576020600319360112610323576001600160a01b03611798611f12565b165f526003602052602060405f206040519061118882611f9b565b34610323575f600319360112610323576020600154604051908152f35b3461032357602060031936011261032357610b5b6117ec611f12565b6117f58161267b565b90612775565b3461032357604060031936011261032357611814611f12565b60243590611821816125e6565b670de0ad9b58f16000821161190b57611839816121c6565b6001600160a01b039182821692835f5260066020528160405f20557f0000000000000000000000000000000000000000000000000000000000000000169161188081612a78565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34926020926103095750604051908152a2005b7f0370da74000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576020604051670de0ad9b58f160008152f35b346103235760406003193601126103235761196e611f12565b6024359061197b816125e6565b670de0ad9b58f16000821161190b57611993816121c6565b6001600160a01b039182821692835f5260056020528160405f20557f000000000000000000000000000000000000000000000000000000000000000016916119da81612aaa565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577fb7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c92602092611a655750604051908152a2005b611a6e90611fe4565b846102ff565b346103235760406003193601126103235760206111446024356004356125a5565b34610323576020600319360112610323576001600160a01b03611ab6611f12565b165f526005602052602060405f2054604051908152f35b346103235760208060031936011261032357611ae7611f12565b611aef61242c565b6001600160a01b036040517f85f2dbd40000000000000000000000000000000000000000000000000000000081528381600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156103185782915f91611ea4575b501691308314611e7c571691825f526002815260ff60405f205416611e5057825f526002815260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556040517f5c15a0b4000000000000000000000000000000000000000000000000000000008152836004820152604081602481865afa908115610318575f905f92611e2c575b50611bf890612523565b9060405190611c0682611f9b565b67ffffffffffffffff80931682528382019015158152855f52600384528260405f209251169180549151151560401b917fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000938468ff0000000000000000809516921617179055604051917f7a2b97dc000000000000000000000000000000000000000000000000000000008352866004840152604083602481895afa928315610318575f905f94611df8575b50611cbc90612523565b938060405195611ccb87611f9b565b1685528585019315158452875f526004865260405f209451169184549351151560401b169216171790556040517f0b8e059b0000000000000000000000000000000000000000000000000000000081528360048201528181602481865afa908115610318575f91611dca575b506024928291855f526005835260405f2055604051938480927f0252aab50000000000000000000000000000000000000000000000000000000082528760048301525afa918215610318575f92611d9a575b50600691925f525260405f20555f80f35b91508082813d8311611dc3575b611db18183612014565b81010312610323576006915191611d89565b503d611da7565b90508181813d8311611df1575b611de18183612014565b8101031261032357516024611d37565b503d611dd7565b611cbc9450611e1f915060403d604011611e25575b611e178183612014565b810190612062565b93611cb2565b503d611e0d565b611bf89250611e4a915060403d604011611e2557611e178183612014565b91611bee565b827fdb771c80000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fb82fd5bf000000000000000000000000000000000000000000000000000000005f5260045ffd5b809250858092503d8311611ed7575b611ebd8183612014565b810103126103235751818116810361032357819085611b56565b503d611eb3565b34610323576020600319360112610323576020906001600160a01b03611f02611f12565b165f526006825260405f20548152f35b600435906001600160a01b038216820361032357565b602435906001600160a01b038216820361032357565b34610323575f6003193601126103235760206040516706f05b59d3b200008152f35b60209060206040818301928281528551809452019301915f5b828110611f87575050505090565b835185529381019392810192600101611f79565b6040810190811067ffffffffffffffff821117611fb757604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff8111611fb757604052565b6060810190811067ffffffffffffffff821117611fb757604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117611fb757604052565b5190811515820361032357565b91908260409103126103235761207c602083519301612055565b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526120de81611ff8565b51902090565b67ffffffffffffffff8111611fb75760051b60200190565b90612106826120e4565b6121136040519182612014565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061214182946120e4565b0190602036910137565b805182101561215f5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b67ffffffffffffffff8111611fb757601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0905f601f6001600160a01b036040519383604460209684888201947ffa399f2a0000000000000000000000000000000000000000000000000000000086521660248201526024815261223881611ff8565b604051988996879586937f48c894910000000000000000000000000000000000000000000000000000000085528b60048601525180918160248701528686015e85858286010152011681010301927f0000000000000000000000000000000000000000000000000000000000000000165af18015610318576122b8575050565b3d805f843e6122c78184612014565b82019181818403126103235780519067ffffffffffffffff821161032357019180601f84011215610323578251906122fe8261218c565b9061230c6040519283612014565b8282528383860101116103235781835f95018483015e010152565b6040517faaabadc50000000000000000000000000000000000000000000000000000000081526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa918215610318575f9261239257505090565b9091506020813d6020116123c3575b816123ae60209383612014565b81010312610323575190811681036103235790565b3d91506123a1565b9080601f83011215610323578151906020916123e6816120e4565b936123f46040519586612014565b81855260208086019260051b82010192831161032357602001905b82821061241d575050505090565b8151815290830190830161240f565b6124587fffffffff000000000000000000000000000000000000000000000000000000005f351661207f565b60206001600160a01b0361246a612327565b16916064604051809481937f9be2a88400000000000000000000000000000000000000000000000000000000835260048301523360248301523060448301525afa908115610318575f916124e9575b50156124c157565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90506020813d60201161251b575b8161250460209383612014565b810103126103235761251590612055565b5f6124b9565b3d91506124f7565b67ffffffffffffffff90818111612538571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b919082018092116106e357565b90670de0b6b3a7640000918281029281840414901517156106e357565b818102929181159184041417156106e357565b906125d264174876e8009283926125cb670de0b6b3a76400009183830383851002612592565b0490612568565b048181029181830414901517156106e35790565b6001600160a01b0390816125f98261267b565b16801561263a57330361260a575050565b7ffbecdbf4000000000000000000000000000000000000000000000000000000005f52336004521660245260445ffd5b507f8bcbf353000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b51906001600160a01b038216820361032357565b604080517fe9ddeb260000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526060816024817f000000000000000000000000000000000000000000000000000000000000000087165afa90811561276b575f916126f2575b5001511690565b90506060813d606011612763575b8161270d60609383612014565b81010312610323578151906060820182811067ffffffffffffffff821117611fb757612759918491825261274081612667565b845261274e60208201612667565b602085015201612667565b828201525f6126eb565b3d9150612700565b82513d5f823e3d90fd5b9061277f826128d2565b92905f5b848110612791575050505050565b6001906001600160a01b03806127a7838661214b565b5116818616805f5260086020818152604094855f20855f528252855f205495866127d9575b5050505050505001612783565b7f938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f993855f528352805f20865f5283525f81812055612818878d88612adc565b519586528a1694a45f8080808080806127cc565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361285e57565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b64174876e8008082048181029181830414901517156106e357036128aa57565b7f833fb3ce000000000000000000000000000000000000000000000000000000005f5260045ffd5b906001600160a01b0380604051937fca4f28030000000000000000000000000000000000000000000000000000000085521660048401525f83602481847f0000000000000000000000000000000000000000000000000000000000000000165afa928315610318575f93612948575b5050815190565b909192503d805f833e61295b8183612014565b810160209182818303126103235780519067ffffffffffffffff821161032357019281601f85011215610323578351612993816120e4565b946129a16040519687612014565b818652848087019260051b820101938411610323578401905b8382106129ce575050505050905f80612941565b815183811681036103235781529084019084016129ba565b91906001600160a01b0380931690815f52600760205260405f209284811693845f5260205260405f20549485612a1f575b505050505050565b82612a64877f1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b595602095885f526007875260405f208a5f5287525f6040812055612adc565b6040519687521694a45f8080808080612a17565b6001600160a01b03165f52600460205261207c67ffffffffffffffff60405f205416600660205260405f2054906125a5565b6001600160a01b03165f52600360205261207c67ffffffffffffffff60405f205416600560205260405f2054906125a5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082019081526001600160a01b03938416602483015260448083019590955293815292612b70925f9283929190612b39606488612014565b1694519082865af13d15612bd4573d90612b528261218c565b91612b606040519384612014565b82523d5f602084013e5b83612bdc565b8051908115159182612bb1575b5050612b865750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8192509060209181010312610323576020612bcc9101612055565b155f80612b7d565b606090612b6a565b90612c195750805115612bf157805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580612c5f575b612c2a575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15612c2256fea26469706673582212209d11f34da5b2441f152cc33b872b7e59eb999ffa46fa4cbe19faf11a783a73d264736f6c634300081b0033","opcodes":"PUSH1 0xE0 CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x1F PUSH2 0x2DB9 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x106 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x102 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x102 JUMPI ADDRESS PUSH1 0x80 MSTORE DUP1 PUSH1 0xA0 MSTORE PUSH1 0xC0 MSTORE PUSH1 0x40 MLOAD PUSH2 0x2C9E SWAP1 DUP2 PUSH2 0x11B DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x20AA ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x1074 ADD MSTORE PUSH2 0x235D ADD MSTORE PUSH1 0xC0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x253 ADD MSTORE DUP2 DUP2 PUSH2 0x36E ADD MSTORE DUP2 DUP2 PUSH2 0x3F8 ADD MSTORE DUP2 DUP2 PUSH2 0x517 ADD MSTORE DUP2 DUP2 PUSH2 0x585 ADD MSTORE DUP2 DUP2 PUSH2 0x864 ADD MSTORE DUP2 DUP2 PUSH2 0x8D2 ADD MSTORE DUP2 DUP2 PUSH2 0xC7D ADD MSTORE DUP2 DUP2 PUSH2 0xDB3 ADD MSTORE DUP2 DUP2 PUSH2 0x1510 ADD MSTORE DUP2 DUP2 PUSH2 0x16B5 ADD MSTORE DUP2 DUP2 PUSH2 0x1856 ADD MSTORE DUP2 DUP2 PUSH2 0x19B0 ADD MSTORE DUP2 DUP2 PUSH2 0x1B25 ADD MSTORE DUP2 DUP2 PUSH2 0x2288 ADD MSTORE DUP2 DUP2 PUSH2 0x26BA ADD MSTORE DUP2 DUP2 PUSH2 0x2836 ADD MSTORE PUSH2 0x2911 ADD MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x252AAB5 EQ PUSH2 0x1EDE JUMPI POP DUP1 PUSH4 0x874327F EQ PUSH2 0x1ACD JUMPI DUP1 PUSH4 0xB8E059B EQ PUSH2 0x1A95 JUMPI DUP1 PUSH4 0xDDD60C6 EQ PUSH2 0x1A74 JUMPI DUP1 PUSH4 0x1377C16C EQ PUSH2 0x1955 JUMPI DUP1 PUSH4 0x2772D156 EQ PUSH2 0x1772 JUMPI DUP1 PUSH4 0x2E1D388D EQ PUSH2 0x1933 JUMPI DUP1 PUSH4 0x3AF52712 EQ PUSH2 0x17FB JUMPI DUP1 PUSH4 0x52F125F0 EQ PUSH2 0x17D0 JUMPI DUP1 PUSH4 0x55FB76AF EQ PUSH2 0x17B3 JUMPI DUP1 PUSH4 0x5C15A0B4 EQ PUSH2 0x1777 JUMPI DUP1 PUSH4 0x5E32E4E8 EQ PUSH2 0x1772 JUMPI DUP1 PUSH4 0x71447EA8 EQ PUSH2 0x15CD JUMPI DUP1 PUSH4 0x71ECC8FB EQ PUSH2 0x1429 JUMPI DUP1 PUSH4 0x77FF76E7 EQ PUSH2 0x11D3 JUMPI DUP1 PUSH4 0x7869EE18 EQ PUSH2 0x11B7 JUMPI DUP1 PUSH4 0x7A2B97DC EQ PUSH2 0x114C JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x10FC JUMPI DUP1 PUSH4 0x8A3C5C69 EQ PUSH2 0x1098 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x1055 JUMPI DUP1 PUSH4 0x8DF44C54 EQ PUSH2 0xFCD JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0xFAC JUMPI DUP1 PUSH4 0x9E95F3FD EQ PUSH2 0xF20 JUMPI DUP1 PUSH4 0xA93DF2A4 EQ PUSH2 0xEBB JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xE90 JUMPI DUP1 PUSH4 0xABAA3356 EQ PUSH2 0xCE7 JUMPI DUP1 PUSH4 0xB53A70B2 EQ PUSH2 0xC00 JUMPI DUP1 PUSH4 0xC673BDAF EQ PUSH2 0xBC3 JUMPI DUP1 PUSH4 0xCF7B287F EQ PUSH2 0xB5D JUMPI DUP1 PUSH4 0xF7061445 EQ PUSH2 0xB28 JUMPI DUP1 PUSH4 0xFA399F2A EQ PUSH2 0x392 JUMPI DUP1 PUSH4 0xFBFA77CF EQ PUSH2 0x34F JUMPI PUSH4 0xFD267F39 EQ PUSH2 0x187 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A0 PUSH2 0x1F12 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1AC PUSH2 0x242C JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0x327 JUMPI PUSH2 0x1C4 DUP3 PUSH2 0x288A JUMP JUMPDEST PUSH2 0x1CD DUP2 PUSH2 0x21C6 JUMP JUMPDEST PUSH2 0x1D6 DUP3 PUSH2 0x2523 JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0x1E3 DUP2 PUSH2 0x1F9B JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x27D DUP2 PUSH2 0x2AAA JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x312 SWAP1 PUSH2 0x1FE4 JUMP JUMPDEST PUSH0 PUSH2 0x2FF JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x3AB PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0x3B3 PUSH2 0x282C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0xACB JUMPI JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH0 SWAP3 DUP3 ISZERO ISZERO SWAP4 DUP5 PUSH2 0xAC1 JUMPI JUMPDEST DUP5 PUSH2 0xAB1 JUMPI JUMPDEST PUSH2 0x472 DUP8 PUSH2 0x28D2 JUMP JUMPDEST SWAP5 SWAP1 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x822 JUMPI DUP10 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH0 SWAP3 PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 PUSH0 DUP5 ISZERO ISZERO SWAP5 DUP6 PUSH2 0x818 JUMPI JUMPDEST DUP6 PUSH2 0x806 JUMPI JUMPDEST PUSH2 0x4C7 DUP5 PUSH2 0x28D2 JUMP JUMPDEST SWAP7 SWAP1 PUSH0 JUMPDEST DUP9 DUP2 LT PUSH2 0x4D4 JUMPI STOP JUMPDEST PUSH2 0x4DE DUP2 DUP10 PUSH2 0x214B JUMP JUMPDEST MLOAD PUSH2 0x4EC JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x4CB JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x4FF DUP12 DUP5 PUSH2 0x214B JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x50C DUP12 DUP11 PUSH2 0x214B JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x7F7 JUMPI SWAP1 DUP3 SWAP2 PUSH2 0x7E0 JUMPI JUMPDEST POP PUSH2 0x7B3 JUMPI POP PUSH0 SWAP10 DUP2 PUSH2 0x5C8 DUP3 DUP12 PUSH2 0x214B JUMP JUMPDEST MLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xE505E41B0D437B47350A9990142CCF38ACB11FFA0E5AF8F973B9E172F3D5D5E2 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP3 LOG3 DUP4 ISZERO PUSH2 0x738 JUMPI PUSH2 0x60E DUP2 DUP11 PUSH2 0x214B JUMP JUMPDEST MLOAD DUP7 ISZERO PUSH2 0x710 JUMPI PUSH2 0x61E SWAP1 PUSH2 0x2575 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x65F DUP11 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP13 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x2592 JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x693 DUP5 DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x69F DUP3 DUP12 PUSH2 0x214B JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0x6D9 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x4E4 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 SWAP2 DUP6 PUSH2 0x77D JUMPI PUSH2 0x74A DUP3 DUP12 PUSH2 0x214B JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x6DC JUMP JUMPDEST PUSH2 0x787 DUP3 DUP12 PUSH2 0x214B JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST DUP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x24 SWAP3 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH2 0x7E9 SWAP1 PUSH2 0x1FE4 JUMP JUMPDEST PUSH2 0x7F4 JUMPI DUP1 DUP13 PUSH2 0x5B5 JUMP JUMPDEST DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST SWAP1 POP PUSH2 0x812 DUP2 DUP4 PUSH2 0x25A5 JUMP JUMPDEST SWAP1 PUSH2 0x4BE JUMP JUMPDEST DUP3 ISZERO ISZERO SWAP6 POP PUSH2 0x4B8 JUMP JUMPDEST PUSH2 0x82C DUP2 DUP8 PUSH2 0x214B JUMP JUMPDEST MLOAD PUSH2 0x83A JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x476 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x84C DUP3 DUP5 PUSH2 0x214B JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x859 DUP2 DUP9 PUSH2 0x214B JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xAA2 JUMPI JUMPDEST POP DUP2 DUP12 PUSH32 0xAE7EBAD9FC3D1D17965F063FA520D393595E2EF6C8E22AE8413B60900444E19F PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x937 DUP7 DUP14 PUSH2 0x214B JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 DUP9 ISZERO PUSH2 0xA27 JUMPI PUSH2 0x952 DUP2 DUP9 PUSH2 0x214B JUMP JUMPDEST MLOAD DUP6 ISZERO PUSH2 0x710 JUMPI PUSH2 0x962 SWAP1 PUSH2 0x2575 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x9A3 DUP10 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP12 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x2592 JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x9D7 DUP5 DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x9E3 DUP3 DUP10 PUSH2 0x214B JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0xA1D SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x832 JUMP JUMPDEST PUSH1 0x1 SWAP2 DUP5 PUSH2 0xA6C JUMPI PUSH2 0xA39 DUP3 DUP10 PUSH2 0x214B JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0xA20 JUMP JUMPDEST PUSH2 0xA76 DUP3 DUP10 PUSH2 0x214B JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST PUSH2 0xAAB SWAP1 PUSH2 0x1FE4 JUMP JUMPDEST DUP12 PUSH2 0x8FF JUMP JUMPDEST POP PUSH2 0xABC DUP4 DUP3 PUSH2 0x25A5 JUMP JUMPDEST PUSH2 0x469 JUMP JUMPDEST DUP2 ISZERO ISZERO SWAP5 POP PUSH2 0x463 JUMP JUMPDEST SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xADD DUP2 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x40 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x323 JUMPI DUP2 PUSH2 0xB0A SWAP2 DUP5 ADD PUSH2 0x23CB JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x323 JUMPI PUSH2 0xB21 SWAP3 ADD PUSH2 0x23CB JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x42A JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0xB44 PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0xB4C PUSH2 0x1F28 JUMP JUMPDEST SWAP1 PUSH2 0xB56 DUP2 PUSH2 0x25E6 JUMP JUMPDEST PUSH2 0x2775 JUMP JUMPDEST STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB76 PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0xB7E PUSH2 0x1F28 JUMP JUMPDEST SWAP1 PUSH2 0xB87 PUSH2 0x242C JUMP JUMPDEST PUSH2 0xB90 DUP2 PUSH2 0x28D2 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0xB9C JUMPI STOP JUMPDEST DUP1 PUSH2 0xBBD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBB4 PUSH1 0x1 SWAP5 DUP8 PUSH2 0x214B JUMP JUMPDEST MLOAD AND DUP8 DUP6 PUSH2 0x29E6 JUMP JUMPDEST ADD PUSH2 0xB93 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBE4 PUSH2 0x1F12 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xC19 PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0xC21 PUSH2 0x1F28 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP4 AND DUP1 DUP5 SUB PUSH2 0x323 JUMPI PUSH1 0x40 SWAP1 PUSH2 0xC43 PUSH2 0x242C JUMP JUMPDEST PUSH1 0x44 DUP3 MLOAD DUP1 SWAP8 DUP2 SWAP4 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP2 DUP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xCB4 JUMPI JUMPDEST PUSH2 0xB5B SWAP4 POP PUSH2 0x29E6 JUMP JUMPDEST PUSH1 0x40 DUP5 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0xCDF JUMPI JUMPDEST DUP2 PUSH2 0xCCD PUSH1 0x40 SWAP4 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0xB5B SWAP4 POP PUSH2 0xCAA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xCC0 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xD00 PUSH2 0x1F12 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xD0C PUSH2 0x242C JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0xE68 JUMPI PUSH2 0xD24 DUP3 PUSH2 0x288A JUMP JUMPDEST PUSH2 0xD2D DUP2 PUSH2 0x21C6 JUMP JUMPDEST PUSH2 0xD36 DUP3 PUSH2 0x2523 JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0xD43 DUP2 PUSH2 0x1F9B JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0xDDD DUP2 PUSH2 0x2A78 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0xA7849E8E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0xEAA PUSH2 0x2327 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0xE68 JUMPI PUSH1 0x20 DUP2 PUSH2 0xF0B PUSH32 0x48C5C3CCEC54C4E0EA08D83D838FA9BB725EB0B52C591CB00BD6E63BCA8C44F6 SWAP4 PUSH2 0x288A JUMP JUMPDEST PUSH2 0xF13 PUSH2 0x242C JUMP JUMPDEST DUP1 PUSH1 0x1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xF3A PUSH2 0x1F12 JUMP JUMPDEST SWAP1 PUSH2 0xF44 DUP3 PUSH2 0x28D2 JUMP JUMPDEST SWAP1 PUSH2 0xF4E DUP3 PUSH2 0x20FC JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0xF77 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xF73 DUP9 DUP3 PUSH2 0x1F60 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x8 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0xF90 DUP4 DUP9 PUSH2 0x214B JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0xFA5 DUP3 DUP10 PUSH2 0x214B JUMP JUMPDEST MSTORE ADD PUSH2 0xF5E JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0xFC8 PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0x21C6 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xFE7 PUSH2 0x1F12 JUMP JUMPDEST SWAP1 PUSH2 0xFF1 DUP3 PUSH2 0x28D2 JUMP JUMPDEST SWAP1 PUSH2 0xFFB DUP3 PUSH2 0x20FC JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0x1020 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xF73 DUP9 DUP3 PUSH2 0x1F60 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x7 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x1039 DUP4 DUP9 PUSH2 0x214B JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x104E DUP3 DUP10 PUSH2 0x214B JUMP JUMPDEST MSTORE ADD PUSH2 0x100B JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0x327 JUMPI PUSH1 0x20 DUP2 PUSH2 0x10E8 PUSH32 0xBF5AC0FC89BBF8819BE79F280146B65EA2AF2A9705CD9CFE0C9D93F6E87F307D SWAP4 PUSH2 0x288A JUMP JUMPDEST PUSH2 0x10F0 PUSH2 0x242C JUMP JUMPDEST DUP1 PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI PUSH2 0x1144 PUSH1 0x20 SWAP2 PUSH2 0x207F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x116D PUSH2 0x1F12 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1188 DUP3 PUSH2 0x1F9B JUMP JUMPDEST SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP1 DUP4 MSTORE PUSH1 0xFF PUSH1 0x40 SWAP3 DUP4 SHR AND ISZERO ISZERO SWAP4 SWAP1 SWAP3 ADD DUP4 SWAP1 MSTORE DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH0 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x11EC PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0x11F4 PUSH2 0x1F28 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO SWAP3 DUP4 DUP4 SUB PUSH2 0x323 JUMPI PUSH1 0x40 SWAP4 PUSH2 0x1296 SWAP3 PUSH2 0x1213 PUSH2 0x282C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x2 DUP6 MSTORE DUP8 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE DUP7 PUSH0 EQ PUSH2 0x13FC JUMPI DUP3 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB PUSH2 0x13A3 PUSH0 SWAP10 JUMPDEST DUP1 ISZERO PUSH2 0x13EE JUMPI DUP9 DUP9 DUP13 PUSH0 SWAP13 DUP14 SWAP2 PUSH2 0x2523 JUMP JUMPDEST DUP16 MLOAD SWAP1 PUSH2 0x12A2 DUP3 PUSH2 0x1F9B JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP3 MSTORE PUSH1 0x4 PUSH2 0x1312 DUP7 DUP5 ADD SWAP5 DUP7 DUP7 MSTORE DUP12 PUSH0 MSTORE PUSH1 0x3 DUP9 MSTORE PUSH1 0x40 DUP5 SWAP1 PUSH0 KECCAK256 SWAP6 MLOAD AND SWAP5 DUP1 SLOAD SWAP7 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP7 DUP8 PUSH9 0xFF0000000000000000 DUP1 SWAP11 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH2 0x2523 JUMP JUMPDEST SWAP6 PUSH1 0x40 DUP4 SWAP1 MLOAD SWAP8 PUSH2 0x1322 DUP10 PUSH2 0x1F9B JUMP JUMPDEST AND DUP8 MSTORE DUP1 DUP8 ADD SWAP6 DUP7 MSTORE DUP11 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE DUP4 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 DUP3 DUP14 DUP16 PUSH2 0x1389 SWAP1 MLOAD SWAP3 DUP4 SWAP3 DUP4 SWAP1 SWAP3 SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x40 DUP4 ADD SWAP5 DUP4 MSTORE ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 DUP12 MLOAD DUP11 DUP2 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x40 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 AND SWAP2 DUP4 DUP4 PUSH2 0x13BD JUMPI JUMPDEST POP POP POP POP DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE RETURN JUMPDEST PUSH32 0xA90FDFF0801794D86EC8DF4BDD2B7E627D30052D0658E18CB977B38248EE45E8 SWAP2 DUP9 MLOAD SWAP1 DUP2 MSTORE LOG3 DUP5 DUP1 DUP1 DUP4 PUSH2 0x13AF JUMP JUMPDEST DUP9 DUP9 DUP13 PUSH1 0x1 SLOAD SWAP13 DUP14 SWAP2 PUSH2 0x2523 JUMP JUMPDEST DUP3 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB PUSH2 0x13A3 PUSH0 SLOAD SWAP10 PUSH2 0x1284 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1443 PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0x144C DUP2 PUSH2 0x21C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1472 DUP4 PUSH2 0x1F9B JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH0 SLOAD SWAP4 DUP2 PUSH2 0x15C2 JUMPI JUMPDEST POP PUSH2 0x14A3 JUMPI STOP JUMPDEST PUSH2 0x14AC DUP4 PUSH2 0x2523 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x14BB DUP5 PUSH2 0x1F9B JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x153A DUP2 PUSH2 0x2AAA JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x149C JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x15E7 PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0x15F0 DUP2 PUSH2 0x21C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x4 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1616 DUP4 PUSH2 0x1F9B JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH1 0x1 SLOAD SWAP4 DUP2 PUSH2 0x1767 JUMPI JUMPDEST POP PUSH2 0x1648 JUMPI STOP JUMPDEST PUSH2 0x1651 DUP4 PUSH2 0x2523 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1660 DUP5 PUSH2 0x1F9B JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x4 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x16DF DUP2 PUSH2 0x2A78 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1641 JUMP JUMPDEST PUSH2 0x1F3E JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1798 PUSH2 0x1F12 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1188 DUP3 PUSH2 0x1F9B JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x17EC PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0x17F5 DUP2 PUSH2 0x267B JUMP JUMPDEST SWAP1 PUSH2 0x2775 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1814 PUSH2 0x1F12 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1821 DUP2 PUSH2 0x25E6 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x190B JUMPI PUSH2 0x1839 DUP2 PUSH2 0x21C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1880 DUP2 PUSH2 0x2A78 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x47F70DDBC624C299CEF7841AAEA0A86B677C800203E953104E958C9EC9BDAB34 SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0x370DA7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0xDE0AD9B58F16000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x196E PUSH2 0x1F12 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x197B DUP2 PUSH2 0x25E6 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x190B JUMPI PUSH2 0x1993 DUP2 PUSH2 0x21C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x19DA DUP2 PUSH2 0x2AAA JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xB7CF36369623C01ED7B2EAFC4025224E924A2836D5FB49428A0F65417586BF5C SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x1A65 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x1A6E SWAP1 PUSH2 0x1FE4 JUMP JUMPDEST DUP5 PUSH2 0x2FF JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x1144 PUSH1 0x24 CALLDATALOAD PUSH1 0x4 CALLDATALOAD PUSH2 0x25A5 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1AB6 PUSH2 0x1F12 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1AE7 PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0x1AEF PUSH2 0x242C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP4 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0x1EA4 JUMPI JUMPDEST POP AND SWAP2 ADDRESS DUP4 EQ PUSH2 0x1E7C JUMPI AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH2 0x1E50 JUMPI DUP3 PUSH0 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x5C15A0B400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP4 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x40 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0x1E2C JUMPI JUMPDEST POP PUSH2 0x1BF8 SWAP1 PUSH2 0x2523 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1C06 DUP3 PUSH2 0x1F9B JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP4 AND DUP3 MSTORE DUP4 DUP3 ADD SWAP1 ISZERO ISZERO DUP2 MSTORE DUP6 PUSH0 MSTORE PUSH1 0x3 DUP5 MSTORE DUP3 PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND SWAP2 DUP1 SLOAD SWAP2 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP4 DUP5 PUSH9 0xFF0000000000000000 DUP1 SWAP6 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP2 PUSH32 0x7A2B97DC00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP7 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 DUP4 PUSH1 0x24 DUP2 DUP10 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP5 PUSH2 0x1DF8 JUMPI JUMPDEST POP PUSH2 0x1CBC SWAP1 PUSH2 0x2523 JUMP JUMPDEST SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x1CCB DUP8 PUSH2 0x1F9B JUMP JUMPDEST AND DUP6 MSTORE DUP6 DUP6 ADD SWAP4 ISZERO ISZERO DUP5 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x4 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xB8E059B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP4 PUSH1 0x4 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP2 PUSH2 0x1DCA JUMPI JUMPDEST POP PUSH1 0x24 SWAP3 DUP3 SWAP2 DUP6 PUSH0 MSTORE PUSH1 0x5 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0x252AAB500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP8 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP3 PUSH2 0x1D9A JUMPI JUMPDEST POP PUSH1 0x6 SWAP2 SWAP3 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP2 POP DUP1 DUP3 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1DC3 JUMPI JUMPDEST PUSH2 0x1DB1 DUP2 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH1 0x6 SWAP2 MLOAD SWAP2 PUSH2 0x1D89 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1DA7 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1DF1 JUMPI JUMPDEST PUSH2 0x1DE1 DUP2 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD PUSH1 0x24 PUSH2 0x1D37 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1DD7 JUMP JUMPDEST PUSH2 0x1CBC SWAP5 POP PUSH2 0x1E1F SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1E25 JUMPI JUMPDEST PUSH2 0x1E17 DUP2 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2062 JUMP JUMPDEST SWAP4 PUSH2 0x1CB2 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E0D JUMP JUMPDEST PUSH2 0x1BF8 SWAP3 POP PUSH2 0x1E4A SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1E25 JUMPI PUSH2 0x1E17 DUP2 DUP4 PUSH2 0x2014 JUMP JUMPDEST SWAP2 PUSH2 0x1BEE JUMP JUMPDEST DUP3 PUSH32 0xDB771C8000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xB82FD5BF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 SWAP3 POP DUP6 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x1ED7 JUMPI JUMPDEST PUSH2 0x1EBD DUP2 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 SWAP1 DUP6 PUSH2 0x1B56 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1EB3 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1F02 PUSH2 0x1F12 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x6 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x6F05B59D3B20000 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1F87 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1F79 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1FB7 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1FB7 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1FB7 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1FB7 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x323 JUMPI PUSH2 0x207C PUSH1 0x20 DUP4 MLOAD SWAP4 ADD PUSH2 0x2055 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x20DE DUP2 PUSH2 0x1FF8 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1FB7 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x2106 DUP3 PUSH2 0x20E4 JUMP JUMPDEST PUSH2 0x2113 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x2014 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x2141 DUP3 SWAP5 PUSH2 0x20E4 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x215F JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1FB7 JUMPI PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 PUSH0 PUSH1 0x1F PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP4 DUP4 PUSH1 0x44 PUSH1 0x20 SWAP7 DUP5 DUP9 DUP3 ADD SWAP5 PUSH32 0xFA399F2A00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x2238 DUP2 PUSH2 0x1FF8 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP12 PUSH1 0x4 DUP7 ADD MSTORE MLOAD DUP1 SWAP2 DUP2 PUSH1 0x24 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY DUP6 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0x22B8 JUMPI POP POP JUMP JUMPDEST RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x22C7 DUP2 DUP5 PUSH2 0x2014 JUMP JUMPDEST DUP3 ADD SWAP2 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP3 MLOAD SWAP1 PUSH2 0x22FE DUP3 PUSH2 0x218C JUMP JUMPDEST SWAP1 PUSH2 0x230C PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP3 DUP3 MSTORE DUP4 DUP4 DUP7 ADD ADD GT PUSH2 0x323 JUMPI DUP2 DUP4 PUSH0 SWAP6 ADD DUP5 DUP4 ADD MCOPY ADD ADD MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP3 PUSH2 0x2392 JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x23C3 JUMPI JUMPDEST DUP2 PUSH2 0x23AE PUSH1 0x20 SWAP4 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x23A1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x23E6 DUP2 PUSH2 0x20E4 JUMP JUMPDEST SWAP4 PUSH2 0x23F4 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x2014 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x323 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x241D JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x240F JUMP JUMPDEST PUSH2 0x2458 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x207F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x246A PUSH2 0x2327 JUMP JUMPDEST AND SWAP2 PUSH1 0x64 PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD MSTORE CALLER PUSH1 0x24 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP2 PUSH2 0x24E9 JUMPI JUMPDEST POP ISZERO PUSH2 0x24C1 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x251B JUMPI JUMPDEST DUP2 PUSH2 0x2504 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0x2515 SWAP1 PUSH2 0x2055 JUMP JUMPDEST PUSH0 PUSH2 0x24B9 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x24F7 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x2538 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x25D2 PUSH5 0x174876E800 SWAP3 DUP4 SWAP3 PUSH2 0x25CB PUSH8 0xDE0B6B3A7640000 SWAP2 DUP4 DUP4 SUB DUP4 DUP6 LT MUL PUSH2 0x2592 JUMP JUMPDEST DIV SWAP1 PUSH2 0x2568 JUMP JUMPDEST DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH2 0x25F9 DUP3 PUSH2 0x267B JUMP JUMPDEST AND DUP1 ISZERO PUSH2 0x263A JUMPI CALLER SUB PUSH2 0x260A JUMPI POP POP JUMP JUMPDEST PUSH32 0xFBECDBF400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP PUSH32 0x8BCBF35300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x60 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 DUP8 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x276B JUMPI PUSH0 SWAP2 PUSH2 0x26F2 JUMPI JUMPDEST POP ADD MLOAD AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x2763 JUMPI JUMPDEST DUP2 PUSH2 0x270D PUSH1 0x60 SWAP4 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x60 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1FB7 JUMPI PUSH2 0x2759 SWAP2 DUP5 SWAP2 DUP3 MSTORE PUSH2 0x2740 DUP2 PUSH2 0x2667 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x274E PUSH1 0x20 DUP3 ADD PUSH2 0x2667 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE ADD PUSH2 0x2667 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE PUSH0 PUSH2 0x26EB JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2700 JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH2 0x277F DUP3 PUSH2 0x28D2 JUMP JUMPDEST SWAP3 SWAP1 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x2791 JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x27A7 DUP4 DUP7 PUSH2 0x214B JUMP JUMPDEST MLOAD AND DUP2 DUP7 AND DUP1 PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP5 DUP6 PUSH0 KECCAK256 DUP6 PUSH0 MSTORE DUP3 MSTORE DUP6 PUSH0 KECCAK256 SLOAD SWAP6 DUP7 PUSH2 0x27D9 JUMPI JUMPDEST POP POP POP POP POP POP POP ADD PUSH2 0x2783 JUMP JUMPDEST PUSH32 0x938F3A3A03EE425CCC0F8010B0468938CBAFD3750FA43BBDF09C6F75E97E51F9 SWAP4 DUP6 PUSH0 MSTORE DUP4 MSTORE DUP1 PUSH0 KECCAK256 DUP7 PUSH0 MSTORE DUP4 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE PUSH2 0x2818 DUP8 DUP14 DUP9 PUSH2 0x2ADC JUMP JUMPDEST MLOAD SWAP6 DUP7 MSTORE DUP11 AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x27CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x285E JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SUB PUSH2 0x28AA JUMPI JUMP JUMPDEST PUSH32 0x833FB3CE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP4 PUSH2 0x2948 JUMPI JUMPDEST POP POP DUP2 MLOAD SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x295B DUP2 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD PUSH1 0x20 SWAP2 DUP3 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP3 DUP2 PUSH1 0x1F DUP6 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP4 MLOAD PUSH2 0x2993 DUP2 PUSH2 0x20E4 JUMP JUMPDEST SWAP5 PUSH2 0x29A1 PUSH1 0x40 MLOAD SWAP7 DUP8 PUSH2 0x2014 JUMP JUMPDEST DUP2 DUP7 MSTORE DUP5 DUP1 DUP8 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP4 DUP5 GT PUSH2 0x323 JUMPI DUP5 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x29CE JUMPI POP POP POP POP POP SWAP1 PUSH0 DUP1 PUSH2 0x2941 JUMP JUMPDEST DUP2 MLOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 MSTORE SWAP1 DUP5 ADD SWAP1 DUP5 ADD PUSH2 0x29BA JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 DUP5 DUP2 AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP5 DUP6 PUSH2 0x2A1F JUMPI JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 PUSH2 0x2A64 DUP8 PUSH32 0x1C2887FCB98F75E66BB9A36311F2D3D22FB204E6362106F30E9DF7EAF63131B5 SWAP6 PUSH1 0x20 SWAP6 DUP9 PUSH0 MSTORE PUSH1 0x7 DUP8 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP11 PUSH0 MSTORE DUP8 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH2 0x2ADC JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2A17 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH2 0x207C PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x25A5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH2 0x207C PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x25A5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP2 MSTORE SWAP3 PUSH2 0x2B70 SWAP3 PUSH0 SWAP3 DUP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2B39 PUSH1 0x64 DUP9 PUSH2 0x2014 JUMP JUMPDEST AND SWAP5 MLOAD SWAP1 DUP3 DUP7 GAS CALL RETURNDATASIZE ISZERO PUSH2 0x2BD4 JUMPI RETURNDATASIZE SWAP1 PUSH2 0x2B52 DUP3 PUSH2 0x218C JUMP JUMPDEST SWAP2 PUSH2 0x2B60 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x2014 JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMPDEST DUP4 PUSH2 0x2BDC JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x2BB1 JUMPI JUMPDEST POP POP PUSH2 0x2B86 JUMPI POP JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 SWAP3 POP SWAP1 PUSH1 0x20 SWAP2 DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x2BCC SWAP2 ADD PUSH2 0x2055 JUMP JUMPDEST ISZERO PUSH0 DUP1 PUSH2 0x2B7D JUMP JUMPDEST PUSH1 0x60 SWAP1 PUSH2 0x2B6A JUMP JUMPDEST SWAP1 PUSH2 0x2C19 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x2BF1 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x2C5F JUMPI JUMPDEST PUSH2 0x2C2A JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x2C22 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP14 GT RETURN 0x4D 0xA5 0xB2 PREVRANDAO 0x1F ISZERO 0x2C 0xC3 EXTCODESIZE DUP8 0x2B PUSH31 0x59EB999FFA46FA4CBE19FAF11A783A73D264736F6C634300081B0033000000 ","sourceMap":"3120:29542:18:-:0;;;;;;;;;;;;;-1:-1:-1;;3120:29542:18;;;;-1:-1:-1;;;;;3120:29542:18;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3120:29542:18;;;;;;978:4:19;1347:46:13;;998:14:19;;;409::20;;3120:29542:18;;;;;;;;1347:46:13;3120:29542:18;;;;;998:14:19;3120:29542:18;;;;;;;;;;409:14:20;3120:29542:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3120:29542:18;;;;;;-1:-1:-1;3120:29542:18;;;;;-1:-1:-1;3120:29542:18"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":7954,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_19863":{"entryPoint":7976,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":9831,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_uint256_dyn_fromMemory":{"entryPoint":9163,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":8277,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint256t_bool_fromMemory":{"entryPoint":8290,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":8032,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_uint256_bool":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"allocate_and_zero_memory_array_array_uint256_dyn":{"entryPoint":8444,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_uint256_dyn":{"entryPoint":8420,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":8588,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_uint256":{"entryPoint":9576,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256":{"entryPoint":9618,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256_19998":{"entryPoint":9589,"id":null,"parameterSlots":1,"returnSlots":1},"external_fun_MAX_PROTOCOL_SWAP_FEE_PERCENTAGE":{"entryPoint":7998,"id":null,"parameterSlots":0,"returnSlots":0},"finalize_allocation":{"entryPoint":8212,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_19846":{"entryPoint":8091,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_19983":{"entryPoint":8164,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_44456":{"entryPoint":8184,"id":null,"parameterSlots":1,"returnSlots":0},"fun_authenticateCaller":{"entryPoint":9260,"id":2462,"parameterSlots":0,"returnSlots":0},"fun_collectAggregateFees":{"entryPoint":8646,"id":4649,"parameterSlots":1,"returnSlots":0},"fun_computeAggregateFeePercentage":{"entryPoint":9637,"id":5296,"parameterSlots":2,"returnSlots":1},"fun_ensureCallerIsPoolCreator":{"entryPoint":9702,"id":5332,"parameterSlots":1,"returnSlots":0},"fun_ensureOnlyVault":{"entryPoint":10284,"id":6237,"parameterSlots":0,"returnSlots":0},"fun_ensureValidPrecision":{"entryPoint":10378,"id":6082,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":8319,"id":2480,"parameterSlots":1,"returnSlots":1},"fun_getAggregateFeePercentage":{"entryPoint":10872,"id":5266,"parameterSlots":1,"returnSlots":1},"fun_getAggregateFeePercentage_19984":{"entryPoint":10922,"id":5266,"parameterSlots":1,"returnSlots":1},"fun_getAuthorizer":{"entryPoint":8999,"id":6146,"parameterSlots":0,"returnSlots":1},"fun_getPoolCreator":{"entryPoint":9851,"id":5375,"parameterSlots":1,"returnSlots":1},"fun_getPoolTokensAndCount":{"entryPoint":10450,"id":5356,"parameterSlots":1,"returnSlots":2},"fun_safeTransfer":{"entryPoint":10972,"id":6598,"parameterSlots":3,"returnSlots":0},"fun_toUint64":{"entryPoint":9507,"id":7790,"parameterSlots":1,"returnSlots":1},"fun_verifyCallResultFromTarget":{"entryPoint":11228,"id":7050,"parameterSlots":3,"returnSlots":1},"fun_withdrawPoolCreatorFees":{"entryPoint":10101,"id":5985,"parameterSlots":2,"returnSlots":0},"fun_withdrawProtocolFees":{"entryPoint":10726,"id":5881,"parameterSlots":3,"returnSlots":0},"memory_array_index_access_contract_IERC20_dyn":{"entryPoint":8523,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"2420":[{"length":32,"start":8362}],"6097":[{"length":32,"start":4212},{"length":32,"start":9053}],"6199":[{"length":32,"start":595},{"length":32,"start":878},{"length":32,"start":1016},{"length":32,"start":1303},{"length":32,"start":1413},{"length":32,"start":2148},{"length":32,"start":2258},{"length":32,"start":3197},{"length":32,"start":3507},{"length":32,"start":5392},{"length":32,"start":5813},{"length":32,"start":6230},{"length":32,"start":6576},{"length":32,"start":6949},{"length":32,"start":8840},{"length":32,"start":9914},{"length":32,"start":10294},{"length":32,"start":10513}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f3560e01c9081630252aab514611ede575080630874327f14611acd5780630b8e059b14611a955780630ddd60c614611a745780631377c16c146119555780632772d156146117725780632e1d388d146119335780633af52712146117fb57806352f125f0146117d057806355fb76af146117b35780635c15a0b4146117775780635e32e4e81461177257806371447ea8146115cd57806371ecc8fb1461142957806377ff76e7146111d35780637869ee18146111b75780637a2b97dc1461114c578063851c1bb3146110fc5780638a3c5c69146110985780638d928af8146110555780638df44c5414610fcd5780638f4ab9ca14610fac5780639e95f3fd14610f20578063a93df2a414610ebb578063aaabadc514610e90578063abaa335614610ce7578063b53a70b214610c00578063c673bdaf14610bc3578063cf7b287f14610b5d578063f706144514610b28578063fa399f2a14610392578063fbfa77cf1461034f5763fd267f3914610187575f80fd5b34610323576040600319360112610323576101a0611f12565b602435906101ac61242c565b6706f05b59d3b200008211610327576101c48261288a565b6101cd816121c6565b6101d682612523565b916040516101e381611f9b565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600360205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169161027d81612aaa565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e92602092610309575b50604051908152a2005b61031290611fe4565b5f6102ff565b6040513d5f823e3d90fd5b5f80fd5b7f7e6eb7fb000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610323576020600319360112610323576103ab611f12565b6103b361282c565b6040517f8f4ab9ca0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201525f81602481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610318575f905f92610acb575b506001600160a01b0383165f52600360205267ffffffffffffffff60405f20541690600560205260405f2054905f928215159384610ac1575b84610ab1575b610472876128d2565b94905f5b8681106108225789896001600160a01b0382165f52600460205267ffffffffffffffff60405f205416905f92600660205260405f2054925f8415159485610818575b85610806575b6104c7846128d2565b96905f5b8881106104d457005b6104de818961214b565b516104ec575b6001016104cb565b986001600160a01b036104ff8b8461214b565b51169061050c8b8a61214b565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561080257604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201528181606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156107f7579082916107e0575b506107b357505f99816105c8828b61214b565b516040519081527fe505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e260206001600160a01b038c1692a383156107385761060e818a61214b565b5186156107105761061e90612575565b6001670de0b6b3a764000061065f8a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848c878301040190151502612592565b928301040190151502916001600160a01b0389165f52600760205260405f20815f5260205260405f20610693848254612568565b905561069f828b61214b565b519081848103116106e3576001936106d9916001600160a01b038c165f52600860205260405f20905f5260205260405f2092038254612568565b90555b90506104e4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001918561077d5761074a828b61214b565b51906001600160a01b038a165f52600760205260405f20905f5260205261077660405f20918254612568565b90556106dc565b610787828b61214b565b51906001600160a01b038a165f52600860205260405f20905f5260205261077660405f20918254612568565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6107e990611fe4565b6107f457808c6105b5565b80fd5b6040513d84823e3d90fd5b5080fd5b905061081281836125a5565b906104be565b82151595506104b8565b61082c818761214b565b5161083a575b600101610476565b6001600160a01b0361084c828461214b565b511690610859818861214b565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561032357604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201525f81606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561031857610aa2575b50818b7fae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f60206001600160a01b03610937868d61214b565b51936040519485521692a38815610a2757610952818861214b565b5185156107105761096290612575565b6001670de0b6b3a76400006109a3897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848b878301040190151502612592565b928301040190151502916001600160a01b038c165f52600760205260405f20815f5260205260405f206109d7848254612568565b90556109e3828961214b565b519081848103116106e357600193610a1d916001600160a01b038f165f52600860205260405f20905f5260205260405f2092038254612568565b90555b9050610832565b60019184610a6c57610a39828961214b565b51906001600160a01b038d165f52600760205260405f20905f52602052610a6560405f20918254612568565b9055610a20565b610a76828961214b565b51906001600160a01b038d165f52600860205260405f20905f52602052610a6560405f20918254612568565b610aab90611fe4565b8b6108ff565b50610abc83826125a5565b610469565b8115159450610463565b9150503d805f833e610add8183612014565b8101906040818303126103235780519167ffffffffffffffff928381116103235781610b0a9184016123cb565b92602083015190811161032357610b2192016123cb565b908361042a565b3461032357604060031936011261032357610b5b610b44611f12565b610b4c611f28565b90610b56816125e6565b612775565b005b3461032357604060031936011261032357610b76611f12565b610b7e611f28565b90610b8761242c565b610b90816128d2565b915f5b838110610b9c57005b80610bbd6001600160a01b03610bb46001948761214b565b511687856129e6565b01610b93565b34610323576020600319360112610323576001600160a01b03610be4611f12565b165f526002602052602060ff60405f2054166040519015158152f35b3461032357606060031936011261032357610c19611f12565b610c21611f28565b604435906001600160a01b039283831680840361032357604090610c4361242c565b60448251809781937fc9c1661b000000000000000000000000000000000000000000000000000000008352818716600484015260248301527f0000000000000000000000000000000000000000000000000000000000000000165afa801561031857610cb4575b610b5b93506129e6565b6040843d604011610cdf575b81610ccd60409383612014565b8101031261032357610b5b9350610caa565b3d9150610cc0565b3461032357604060031936011261032357610d00611f12565b60243590610d0c61242c565b6706f05b59d3b200008211610e6857610d248261288a565b610d2d816121c6565b610d3682612523565b91604051610d4381611f9b565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600460205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f00000000000000000000000000000000000000000000000000000000000000001691610ddd81612a78565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd926020926103095750604051908152a2005b7fa7849e8e000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576020610eaa612327565b6001600160a01b0360405191168152f35b34610323576020600319360112610323576004356706f05b59d3b200008111610e6857602081610f0b7f48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f69361288a565b610f1361242c565b80600155604051908152a1005b346103235760208060031936011261032357610f3a611f12565b90610f44826128d2565b90610f4e826120fc565b925f946001600160a01b03809116955b848110610f775760405180610f738882611f60565b0390f35b600190875f526008845260405f2083610f90838861214b565b51165f52845260405f2054610fa5828961214b565b5201610f5e565b3461032357602060031936011261032357610b5b610fc8611f12565b6121c6565b346103235760208060031936011261032357610fe7611f12565b90610ff1826128d2565b90610ffb826120fc565b925f946001600160a01b03809116955b8481106110205760405180610f738882611f60565b600190875f526007845260405f2083611039838861214b565b51165f52845260405f205461104e828961214b565b520161100b565b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610323576020600319360112610323576004356706f05b59d3b200008111610327576020816110e87fbf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d9361288a565b6110f061242c565b805f55604051908152a1005b34610323576020600319360112610323576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036103235761114460209161207f565b604051908152f35b34610323576020600319360112610323576001600160a01b0361116d611f12565b165f526004602052602060405f206040519061118882611f9b565b5467ffffffffffffffff811680835260ff604092831c1615159390920183905280519182526020820192909252f35b34610323575f6003193601126103235760205f54604051908152f35b34610323576060600319360112610323576111ec611f12565b6111f4611f28565b906044359081151592838303610323576040936112969261121361282c565b6001600160a01b0380911690815f5260209360028552875f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055865f146113fc57827fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb6113a35f995b80156113ee5788888c5f9c8d91612523565b8f51906112a282611f9b565b67ffffffffffffffff80911682526004611312868401948686528b5f5260038852604084905f209551169480549651151560401b967fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000968768ff0000000000000000809a16921617179055612523565b9560408390519761132289611f9b565b1687528087019586528a5f525260405f209451169184549351151560401b16921617179055837fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a78564828d8f611389905192839283909291602090604083019483521515910152565b0390a28b518a815290151560208201529081906040820190565b0390a2169183836113bd575b505050508351928352820152f35b7fa90fdff0801794d86ec8df4bdd2b7e627d30052d0658e18cb977b38248ee45e8918851908152a3848080836113af565b88888c6001549c8d91612523565b827fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb6113a35f5499611284565b346103235760208060031936011261032357611443611f12565b61144c816121c6565b6001600160a01b039182821692835f526003825260405f20906040519161147283611f9b565b549167ffffffffffffffff9060ff8285169485835260401c1615908582159101525f5493816115c2575b506114a357005b6114ac83612523565b9080604051926114bb84611f9b565b168252848201905f8252875f526003865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169261153a81612aaa565b843b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e936103095750604051908152a2005b90508314158761149c565b3461032357602080600319360112610323576115e7611f12565b6115f0816121c6565b6001600160a01b039182821692835f526004825260405f20906040519161161683611f9b565b549167ffffffffffffffff9060ff8285169485835260401c1615908582159101526001549381611767575b5061164857005b61165183612523565b90806040519261166084611f9b565b168252848201905f8252875f526004865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f000000000000000000000000000000000000000000000000000000000000000016926116df81612a78565b843b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd936103095750604051908152a2005b905083141587611641565b611f3e565b34610323576020600319360112610323576001600160a01b03611798611f12565b165f526003602052602060405f206040519061118882611f9b565b34610323575f600319360112610323576020600154604051908152f35b3461032357602060031936011261032357610b5b6117ec611f12565b6117f58161267b565b90612775565b3461032357604060031936011261032357611814611f12565b60243590611821816125e6565b670de0ad9b58f16000821161190b57611839816121c6565b6001600160a01b039182821692835f5260066020528160405f20557f0000000000000000000000000000000000000000000000000000000000000000169161188081612a78565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34926020926103095750604051908152a2005b7f0370da74000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576020604051670de0ad9b58f160008152f35b346103235760406003193601126103235761196e611f12565b6024359061197b816125e6565b670de0ad9b58f16000821161190b57611993816121c6565b6001600160a01b039182821692835f5260056020528160405f20557f000000000000000000000000000000000000000000000000000000000000000016916119da81612aaa565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577fb7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c92602092611a655750604051908152a2005b611a6e90611fe4565b846102ff565b346103235760406003193601126103235760206111446024356004356125a5565b34610323576020600319360112610323576001600160a01b03611ab6611f12565b165f526005602052602060405f2054604051908152f35b346103235760208060031936011261032357611ae7611f12565b611aef61242c565b6001600160a01b036040517f85f2dbd40000000000000000000000000000000000000000000000000000000081528381600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156103185782915f91611ea4575b501691308314611e7c571691825f526002815260ff60405f205416611e5057825f526002815260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556040517f5c15a0b4000000000000000000000000000000000000000000000000000000008152836004820152604081602481865afa908115610318575f905f92611e2c575b50611bf890612523565b9060405190611c0682611f9b565b67ffffffffffffffff80931682528382019015158152855f52600384528260405f209251169180549151151560401b917fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000938468ff0000000000000000809516921617179055604051917f7a2b97dc000000000000000000000000000000000000000000000000000000008352866004840152604083602481895afa928315610318575f905f94611df8575b50611cbc90612523565b938060405195611ccb87611f9b565b1685528585019315158452875f526004865260405f209451169184549351151560401b169216171790556040517f0b8e059b0000000000000000000000000000000000000000000000000000000081528360048201528181602481865afa908115610318575f91611dca575b506024928291855f526005835260405f2055604051938480927f0252aab50000000000000000000000000000000000000000000000000000000082528760048301525afa918215610318575f92611d9a575b50600691925f525260405f20555f80f35b91508082813d8311611dc3575b611db18183612014565b81010312610323576006915191611d89565b503d611da7565b90508181813d8311611df1575b611de18183612014565b8101031261032357516024611d37565b503d611dd7565b611cbc9450611e1f915060403d604011611e25575b611e178183612014565b810190612062565b93611cb2565b503d611e0d565b611bf89250611e4a915060403d604011611e2557611e178183612014565b91611bee565b827fdb771c80000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fb82fd5bf000000000000000000000000000000000000000000000000000000005f5260045ffd5b809250858092503d8311611ed7575b611ebd8183612014565b810103126103235751818116810361032357819085611b56565b503d611eb3565b34610323576020600319360112610323576020906001600160a01b03611f02611f12565b165f526006825260405f20548152f35b600435906001600160a01b038216820361032357565b602435906001600160a01b038216820361032357565b34610323575f6003193601126103235760206040516706f05b59d3b200008152f35b60209060206040818301928281528551809452019301915f5b828110611f87575050505090565b835185529381019392810192600101611f79565b6040810190811067ffffffffffffffff821117611fb757604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff8111611fb757604052565b6060810190811067ffffffffffffffff821117611fb757604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117611fb757604052565b5190811515820361032357565b91908260409103126103235761207c602083519301612055565b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526120de81611ff8565b51902090565b67ffffffffffffffff8111611fb75760051b60200190565b90612106826120e4565b6121136040519182612014565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061214182946120e4565b0190602036910137565b805182101561215f5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b67ffffffffffffffff8111611fb757601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0905f601f6001600160a01b036040519383604460209684888201947ffa399f2a0000000000000000000000000000000000000000000000000000000086521660248201526024815261223881611ff8565b604051988996879586937f48c894910000000000000000000000000000000000000000000000000000000085528b60048601525180918160248701528686015e85858286010152011681010301927f0000000000000000000000000000000000000000000000000000000000000000165af18015610318576122b8575050565b3d805f843e6122c78184612014565b82019181818403126103235780519067ffffffffffffffff821161032357019180601f84011215610323578251906122fe8261218c565b9061230c6040519283612014565b8282528383860101116103235781835f95018483015e010152565b6040517faaabadc50000000000000000000000000000000000000000000000000000000081526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa918215610318575f9261239257505090565b9091506020813d6020116123c3575b816123ae60209383612014565b81010312610323575190811681036103235790565b3d91506123a1565b9080601f83011215610323578151906020916123e6816120e4565b936123f46040519586612014565b81855260208086019260051b82010192831161032357602001905b82821061241d575050505090565b8151815290830190830161240f565b6124587fffffffff000000000000000000000000000000000000000000000000000000005f351661207f565b60206001600160a01b0361246a612327565b16916064604051809481937f9be2a88400000000000000000000000000000000000000000000000000000000835260048301523360248301523060448301525afa908115610318575f916124e9575b50156124c157565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90506020813d60201161251b575b8161250460209383612014565b810103126103235761251590612055565b5f6124b9565b3d91506124f7565b67ffffffffffffffff90818111612538571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b919082018092116106e357565b90670de0b6b3a7640000918281029281840414901517156106e357565b818102929181159184041417156106e357565b906125d264174876e8009283926125cb670de0b6b3a76400009183830383851002612592565b0490612568565b048181029181830414901517156106e35790565b6001600160a01b0390816125f98261267b565b16801561263a57330361260a575050565b7ffbecdbf4000000000000000000000000000000000000000000000000000000005f52336004521660245260445ffd5b507f8bcbf353000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b51906001600160a01b038216820361032357565b604080517fe9ddeb260000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526060816024817f000000000000000000000000000000000000000000000000000000000000000087165afa90811561276b575f916126f2575b5001511690565b90506060813d606011612763575b8161270d60609383612014565b81010312610323578151906060820182811067ffffffffffffffff821117611fb757612759918491825261274081612667565b845261274e60208201612667565b602085015201612667565b828201525f6126eb565b3d9150612700565b82513d5f823e3d90fd5b9061277f826128d2565b92905f5b848110612791575050505050565b6001906001600160a01b03806127a7838661214b565b5116818616805f5260086020818152604094855f20855f528252855f205495866127d9575b5050505050505001612783565b7f938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f993855f528352805f20865f5283525f81812055612818878d88612adc565b519586528a1694a45f8080808080806127cc565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361285e57565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b64174876e8008082048181029181830414901517156106e357036128aa57565b7f833fb3ce000000000000000000000000000000000000000000000000000000005f5260045ffd5b906001600160a01b0380604051937fca4f28030000000000000000000000000000000000000000000000000000000085521660048401525f83602481847f0000000000000000000000000000000000000000000000000000000000000000165afa928315610318575f93612948575b5050815190565b909192503d805f833e61295b8183612014565b810160209182818303126103235780519067ffffffffffffffff821161032357019281601f85011215610323578351612993816120e4565b946129a16040519687612014565b818652848087019260051b820101938411610323578401905b8382106129ce575050505050905f80612941565b815183811681036103235781529084019084016129ba565b91906001600160a01b0380931690815f52600760205260405f209284811693845f5260205260405f20549485612a1f575b505050505050565b82612a64877f1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b595602095885f526007875260405f208a5f5287525f6040812055612adc565b6040519687521694a45f8080808080612a17565b6001600160a01b03165f52600460205261207c67ffffffffffffffff60405f205416600660205260405f2054906125a5565b6001600160a01b03165f52600360205261207c67ffffffffffffffff60405f205416600560205260405f2054906125a5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082019081526001600160a01b03938416602483015260448083019590955293815292612b70925f9283929190612b39606488612014565b1694519082865af13d15612bd4573d90612b528261218c565b91612b606040519384612014565b82523d5f602084013e5b83612bdc565b8051908115159182612bb1575b5050612b865750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8192509060209181010312610323576020612bcc9101612055565b155f80612b7d565b606090612b6a565b90612c195750805115612bf157805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580612c5f575b612c2a575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15612c2256fea26469706673582212209d11f34da5b2441f152cc33b872b7e59eb999ffa46fa4cbe19faf11a783a73d264736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x252AAB5 EQ PUSH2 0x1EDE JUMPI POP DUP1 PUSH4 0x874327F EQ PUSH2 0x1ACD JUMPI DUP1 PUSH4 0xB8E059B EQ PUSH2 0x1A95 JUMPI DUP1 PUSH4 0xDDD60C6 EQ PUSH2 0x1A74 JUMPI DUP1 PUSH4 0x1377C16C EQ PUSH2 0x1955 JUMPI DUP1 PUSH4 0x2772D156 EQ PUSH2 0x1772 JUMPI DUP1 PUSH4 0x2E1D388D EQ PUSH2 0x1933 JUMPI DUP1 PUSH4 0x3AF52712 EQ PUSH2 0x17FB JUMPI DUP1 PUSH4 0x52F125F0 EQ PUSH2 0x17D0 JUMPI DUP1 PUSH4 0x55FB76AF EQ PUSH2 0x17B3 JUMPI DUP1 PUSH4 0x5C15A0B4 EQ PUSH2 0x1777 JUMPI DUP1 PUSH4 0x5E32E4E8 EQ PUSH2 0x1772 JUMPI DUP1 PUSH4 0x71447EA8 EQ PUSH2 0x15CD JUMPI DUP1 PUSH4 0x71ECC8FB EQ PUSH2 0x1429 JUMPI DUP1 PUSH4 0x77FF76E7 EQ PUSH2 0x11D3 JUMPI DUP1 PUSH4 0x7869EE18 EQ PUSH2 0x11B7 JUMPI DUP1 PUSH4 0x7A2B97DC EQ PUSH2 0x114C JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x10FC JUMPI DUP1 PUSH4 0x8A3C5C69 EQ PUSH2 0x1098 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x1055 JUMPI DUP1 PUSH4 0x8DF44C54 EQ PUSH2 0xFCD JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0xFAC JUMPI DUP1 PUSH4 0x9E95F3FD EQ PUSH2 0xF20 JUMPI DUP1 PUSH4 0xA93DF2A4 EQ PUSH2 0xEBB JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xE90 JUMPI DUP1 PUSH4 0xABAA3356 EQ PUSH2 0xCE7 JUMPI DUP1 PUSH4 0xB53A70B2 EQ PUSH2 0xC00 JUMPI DUP1 PUSH4 0xC673BDAF EQ PUSH2 0xBC3 JUMPI DUP1 PUSH4 0xCF7B287F EQ PUSH2 0xB5D JUMPI DUP1 PUSH4 0xF7061445 EQ PUSH2 0xB28 JUMPI DUP1 PUSH4 0xFA399F2A EQ PUSH2 0x392 JUMPI DUP1 PUSH4 0xFBFA77CF EQ PUSH2 0x34F JUMPI PUSH4 0xFD267F39 EQ PUSH2 0x187 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A0 PUSH2 0x1F12 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1AC PUSH2 0x242C JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0x327 JUMPI PUSH2 0x1C4 DUP3 PUSH2 0x288A JUMP JUMPDEST PUSH2 0x1CD DUP2 PUSH2 0x21C6 JUMP JUMPDEST PUSH2 0x1D6 DUP3 PUSH2 0x2523 JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0x1E3 DUP2 PUSH2 0x1F9B JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x27D DUP2 PUSH2 0x2AAA JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x312 SWAP1 PUSH2 0x1FE4 JUMP JUMPDEST PUSH0 PUSH2 0x2FF JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x3AB PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0x3B3 PUSH2 0x282C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0xACB JUMPI JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH0 SWAP3 DUP3 ISZERO ISZERO SWAP4 DUP5 PUSH2 0xAC1 JUMPI JUMPDEST DUP5 PUSH2 0xAB1 JUMPI JUMPDEST PUSH2 0x472 DUP8 PUSH2 0x28D2 JUMP JUMPDEST SWAP5 SWAP1 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x822 JUMPI DUP10 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH0 SWAP3 PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 PUSH0 DUP5 ISZERO ISZERO SWAP5 DUP6 PUSH2 0x818 JUMPI JUMPDEST DUP6 PUSH2 0x806 JUMPI JUMPDEST PUSH2 0x4C7 DUP5 PUSH2 0x28D2 JUMP JUMPDEST SWAP7 SWAP1 PUSH0 JUMPDEST DUP9 DUP2 LT PUSH2 0x4D4 JUMPI STOP JUMPDEST PUSH2 0x4DE DUP2 DUP10 PUSH2 0x214B JUMP JUMPDEST MLOAD PUSH2 0x4EC JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x4CB JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x4FF DUP12 DUP5 PUSH2 0x214B JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x50C DUP12 DUP11 PUSH2 0x214B JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x7F7 JUMPI SWAP1 DUP3 SWAP2 PUSH2 0x7E0 JUMPI JUMPDEST POP PUSH2 0x7B3 JUMPI POP PUSH0 SWAP10 DUP2 PUSH2 0x5C8 DUP3 DUP12 PUSH2 0x214B JUMP JUMPDEST MLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xE505E41B0D437B47350A9990142CCF38ACB11FFA0E5AF8F973B9E172F3D5D5E2 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP3 LOG3 DUP4 ISZERO PUSH2 0x738 JUMPI PUSH2 0x60E DUP2 DUP11 PUSH2 0x214B JUMP JUMPDEST MLOAD DUP7 ISZERO PUSH2 0x710 JUMPI PUSH2 0x61E SWAP1 PUSH2 0x2575 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x65F DUP11 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP13 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x2592 JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x693 DUP5 DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x69F DUP3 DUP12 PUSH2 0x214B JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0x6D9 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x4E4 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 SWAP2 DUP6 PUSH2 0x77D JUMPI PUSH2 0x74A DUP3 DUP12 PUSH2 0x214B JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x6DC JUMP JUMPDEST PUSH2 0x787 DUP3 DUP12 PUSH2 0x214B JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST DUP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x24 SWAP3 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH2 0x7E9 SWAP1 PUSH2 0x1FE4 JUMP JUMPDEST PUSH2 0x7F4 JUMPI DUP1 DUP13 PUSH2 0x5B5 JUMP JUMPDEST DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST SWAP1 POP PUSH2 0x812 DUP2 DUP4 PUSH2 0x25A5 JUMP JUMPDEST SWAP1 PUSH2 0x4BE JUMP JUMPDEST DUP3 ISZERO ISZERO SWAP6 POP PUSH2 0x4B8 JUMP JUMPDEST PUSH2 0x82C DUP2 DUP8 PUSH2 0x214B JUMP JUMPDEST MLOAD PUSH2 0x83A JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x476 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x84C DUP3 DUP5 PUSH2 0x214B JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x859 DUP2 DUP9 PUSH2 0x214B JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xAA2 JUMPI JUMPDEST POP DUP2 DUP12 PUSH32 0xAE7EBAD9FC3D1D17965F063FA520D393595E2EF6C8E22AE8413B60900444E19F PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x937 DUP7 DUP14 PUSH2 0x214B JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 DUP9 ISZERO PUSH2 0xA27 JUMPI PUSH2 0x952 DUP2 DUP9 PUSH2 0x214B JUMP JUMPDEST MLOAD DUP6 ISZERO PUSH2 0x710 JUMPI PUSH2 0x962 SWAP1 PUSH2 0x2575 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x9A3 DUP10 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP12 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x2592 JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x9D7 DUP5 DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x9E3 DUP3 DUP10 PUSH2 0x214B JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0xA1D SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x832 JUMP JUMPDEST PUSH1 0x1 SWAP2 DUP5 PUSH2 0xA6C JUMPI PUSH2 0xA39 DUP3 DUP10 PUSH2 0x214B JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0xA20 JUMP JUMPDEST PUSH2 0xA76 DUP3 DUP10 PUSH2 0x214B JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST PUSH2 0xAAB SWAP1 PUSH2 0x1FE4 JUMP JUMPDEST DUP12 PUSH2 0x8FF JUMP JUMPDEST POP PUSH2 0xABC DUP4 DUP3 PUSH2 0x25A5 JUMP JUMPDEST PUSH2 0x469 JUMP JUMPDEST DUP2 ISZERO ISZERO SWAP5 POP PUSH2 0x463 JUMP JUMPDEST SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xADD DUP2 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x40 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x323 JUMPI DUP2 PUSH2 0xB0A SWAP2 DUP5 ADD PUSH2 0x23CB JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x323 JUMPI PUSH2 0xB21 SWAP3 ADD PUSH2 0x23CB JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x42A JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0xB44 PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0xB4C PUSH2 0x1F28 JUMP JUMPDEST SWAP1 PUSH2 0xB56 DUP2 PUSH2 0x25E6 JUMP JUMPDEST PUSH2 0x2775 JUMP JUMPDEST STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB76 PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0xB7E PUSH2 0x1F28 JUMP JUMPDEST SWAP1 PUSH2 0xB87 PUSH2 0x242C JUMP JUMPDEST PUSH2 0xB90 DUP2 PUSH2 0x28D2 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0xB9C JUMPI STOP JUMPDEST DUP1 PUSH2 0xBBD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBB4 PUSH1 0x1 SWAP5 DUP8 PUSH2 0x214B JUMP JUMPDEST MLOAD AND DUP8 DUP6 PUSH2 0x29E6 JUMP JUMPDEST ADD PUSH2 0xB93 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBE4 PUSH2 0x1F12 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xC19 PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0xC21 PUSH2 0x1F28 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP4 AND DUP1 DUP5 SUB PUSH2 0x323 JUMPI PUSH1 0x40 SWAP1 PUSH2 0xC43 PUSH2 0x242C JUMP JUMPDEST PUSH1 0x44 DUP3 MLOAD DUP1 SWAP8 DUP2 SWAP4 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP2 DUP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xCB4 JUMPI JUMPDEST PUSH2 0xB5B SWAP4 POP PUSH2 0x29E6 JUMP JUMPDEST PUSH1 0x40 DUP5 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0xCDF JUMPI JUMPDEST DUP2 PUSH2 0xCCD PUSH1 0x40 SWAP4 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0xB5B SWAP4 POP PUSH2 0xCAA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xCC0 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xD00 PUSH2 0x1F12 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xD0C PUSH2 0x242C JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0xE68 JUMPI PUSH2 0xD24 DUP3 PUSH2 0x288A JUMP JUMPDEST PUSH2 0xD2D DUP2 PUSH2 0x21C6 JUMP JUMPDEST PUSH2 0xD36 DUP3 PUSH2 0x2523 JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0xD43 DUP2 PUSH2 0x1F9B JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0xDDD DUP2 PUSH2 0x2A78 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0xA7849E8E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0xEAA PUSH2 0x2327 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0xE68 JUMPI PUSH1 0x20 DUP2 PUSH2 0xF0B PUSH32 0x48C5C3CCEC54C4E0EA08D83D838FA9BB725EB0B52C591CB00BD6E63BCA8C44F6 SWAP4 PUSH2 0x288A JUMP JUMPDEST PUSH2 0xF13 PUSH2 0x242C JUMP JUMPDEST DUP1 PUSH1 0x1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xF3A PUSH2 0x1F12 JUMP JUMPDEST SWAP1 PUSH2 0xF44 DUP3 PUSH2 0x28D2 JUMP JUMPDEST SWAP1 PUSH2 0xF4E DUP3 PUSH2 0x20FC JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0xF77 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xF73 DUP9 DUP3 PUSH2 0x1F60 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x8 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0xF90 DUP4 DUP9 PUSH2 0x214B JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0xFA5 DUP3 DUP10 PUSH2 0x214B JUMP JUMPDEST MSTORE ADD PUSH2 0xF5E JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0xFC8 PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0x21C6 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xFE7 PUSH2 0x1F12 JUMP JUMPDEST SWAP1 PUSH2 0xFF1 DUP3 PUSH2 0x28D2 JUMP JUMPDEST SWAP1 PUSH2 0xFFB DUP3 PUSH2 0x20FC JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0x1020 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xF73 DUP9 DUP3 PUSH2 0x1F60 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x7 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x1039 DUP4 DUP9 PUSH2 0x214B JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x104E DUP3 DUP10 PUSH2 0x214B JUMP JUMPDEST MSTORE ADD PUSH2 0x100B JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0x327 JUMPI PUSH1 0x20 DUP2 PUSH2 0x10E8 PUSH32 0xBF5AC0FC89BBF8819BE79F280146B65EA2AF2A9705CD9CFE0C9D93F6E87F307D SWAP4 PUSH2 0x288A JUMP JUMPDEST PUSH2 0x10F0 PUSH2 0x242C JUMP JUMPDEST DUP1 PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI PUSH2 0x1144 PUSH1 0x20 SWAP2 PUSH2 0x207F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x116D PUSH2 0x1F12 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1188 DUP3 PUSH2 0x1F9B JUMP JUMPDEST SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP1 DUP4 MSTORE PUSH1 0xFF PUSH1 0x40 SWAP3 DUP4 SHR AND ISZERO ISZERO SWAP4 SWAP1 SWAP3 ADD DUP4 SWAP1 MSTORE DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH0 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x11EC PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0x11F4 PUSH2 0x1F28 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO SWAP3 DUP4 DUP4 SUB PUSH2 0x323 JUMPI PUSH1 0x40 SWAP4 PUSH2 0x1296 SWAP3 PUSH2 0x1213 PUSH2 0x282C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x2 DUP6 MSTORE DUP8 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE DUP7 PUSH0 EQ PUSH2 0x13FC JUMPI DUP3 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB PUSH2 0x13A3 PUSH0 SWAP10 JUMPDEST DUP1 ISZERO PUSH2 0x13EE JUMPI DUP9 DUP9 DUP13 PUSH0 SWAP13 DUP14 SWAP2 PUSH2 0x2523 JUMP JUMPDEST DUP16 MLOAD SWAP1 PUSH2 0x12A2 DUP3 PUSH2 0x1F9B JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP3 MSTORE PUSH1 0x4 PUSH2 0x1312 DUP7 DUP5 ADD SWAP5 DUP7 DUP7 MSTORE DUP12 PUSH0 MSTORE PUSH1 0x3 DUP9 MSTORE PUSH1 0x40 DUP5 SWAP1 PUSH0 KECCAK256 SWAP6 MLOAD AND SWAP5 DUP1 SLOAD SWAP7 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP7 DUP8 PUSH9 0xFF0000000000000000 DUP1 SWAP11 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH2 0x2523 JUMP JUMPDEST SWAP6 PUSH1 0x40 DUP4 SWAP1 MLOAD SWAP8 PUSH2 0x1322 DUP10 PUSH2 0x1F9B JUMP JUMPDEST AND DUP8 MSTORE DUP1 DUP8 ADD SWAP6 DUP7 MSTORE DUP11 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE DUP4 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 DUP3 DUP14 DUP16 PUSH2 0x1389 SWAP1 MLOAD SWAP3 DUP4 SWAP3 DUP4 SWAP1 SWAP3 SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x40 DUP4 ADD SWAP5 DUP4 MSTORE ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 DUP12 MLOAD DUP11 DUP2 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x40 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 AND SWAP2 DUP4 DUP4 PUSH2 0x13BD JUMPI JUMPDEST POP POP POP POP DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE RETURN JUMPDEST PUSH32 0xA90FDFF0801794D86EC8DF4BDD2B7E627D30052D0658E18CB977B38248EE45E8 SWAP2 DUP9 MLOAD SWAP1 DUP2 MSTORE LOG3 DUP5 DUP1 DUP1 DUP4 PUSH2 0x13AF JUMP JUMPDEST DUP9 DUP9 DUP13 PUSH1 0x1 SLOAD SWAP13 DUP14 SWAP2 PUSH2 0x2523 JUMP JUMPDEST DUP3 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB PUSH2 0x13A3 PUSH0 SLOAD SWAP10 PUSH2 0x1284 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1443 PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0x144C DUP2 PUSH2 0x21C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1472 DUP4 PUSH2 0x1F9B JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH0 SLOAD SWAP4 DUP2 PUSH2 0x15C2 JUMPI JUMPDEST POP PUSH2 0x14A3 JUMPI STOP JUMPDEST PUSH2 0x14AC DUP4 PUSH2 0x2523 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x14BB DUP5 PUSH2 0x1F9B JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x153A DUP2 PUSH2 0x2AAA JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x149C JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x15E7 PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0x15F0 DUP2 PUSH2 0x21C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x4 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1616 DUP4 PUSH2 0x1F9B JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH1 0x1 SLOAD SWAP4 DUP2 PUSH2 0x1767 JUMPI JUMPDEST POP PUSH2 0x1648 JUMPI STOP JUMPDEST PUSH2 0x1651 DUP4 PUSH2 0x2523 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1660 DUP5 PUSH2 0x1F9B JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x4 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x16DF DUP2 PUSH2 0x2A78 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1641 JUMP JUMPDEST PUSH2 0x1F3E JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1798 PUSH2 0x1F12 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1188 DUP3 PUSH2 0x1F9B JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x17EC PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0x17F5 DUP2 PUSH2 0x267B JUMP JUMPDEST SWAP1 PUSH2 0x2775 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1814 PUSH2 0x1F12 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1821 DUP2 PUSH2 0x25E6 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x190B JUMPI PUSH2 0x1839 DUP2 PUSH2 0x21C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1880 DUP2 PUSH2 0x2A78 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x47F70DDBC624C299CEF7841AAEA0A86B677C800203E953104E958C9EC9BDAB34 SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0x370DA7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0xDE0AD9B58F16000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x196E PUSH2 0x1F12 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x197B DUP2 PUSH2 0x25E6 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x190B JUMPI PUSH2 0x1993 DUP2 PUSH2 0x21C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x19DA DUP2 PUSH2 0x2AAA JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xB7CF36369623C01ED7B2EAFC4025224E924A2836D5FB49428A0F65417586BF5C SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x1A65 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x1A6E SWAP1 PUSH2 0x1FE4 JUMP JUMPDEST DUP5 PUSH2 0x2FF JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x1144 PUSH1 0x24 CALLDATALOAD PUSH1 0x4 CALLDATALOAD PUSH2 0x25A5 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1AB6 PUSH2 0x1F12 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1AE7 PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0x1AEF PUSH2 0x242C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP4 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0x1EA4 JUMPI JUMPDEST POP AND SWAP2 ADDRESS DUP4 EQ PUSH2 0x1E7C JUMPI AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH2 0x1E50 JUMPI DUP3 PUSH0 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x5C15A0B400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP4 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x40 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0x1E2C JUMPI JUMPDEST POP PUSH2 0x1BF8 SWAP1 PUSH2 0x2523 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1C06 DUP3 PUSH2 0x1F9B JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP4 AND DUP3 MSTORE DUP4 DUP3 ADD SWAP1 ISZERO ISZERO DUP2 MSTORE DUP6 PUSH0 MSTORE PUSH1 0x3 DUP5 MSTORE DUP3 PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND SWAP2 DUP1 SLOAD SWAP2 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP4 DUP5 PUSH9 0xFF0000000000000000 DUP1 SWAP6 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP2 PUSH32 0x7A2B97DC00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP7 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 DUP4 PUSH1 0x24 DUP2 DUP10 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP5 PUSH2 0x1DF8 JUMPI JUMPDEST POP PUSH2 0x1CBC SWAP1 PUSH2 0x2523 JUMP JUMPDEST SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x1CCB DUP8 PUSH2 0x1F9B JUMP JUMPDEST AND DUP6 MSTORE DUP6 DUP6 ADD SWAP4 ISZERO ISZERO DUP5 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x4 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xB8E059B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP4 PUSH1 0x4 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP2 PUSH2 0x1DCA JUMPI JUMPDEST POP PUSH1 0x24 SWAP3 DUP3 SWAP2 DUP6 PUSH0 MSTORE PUSH1 0x5 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0x252AAB500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP8 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP3 PUSH2 0x1D9A JUMPI JUMPDEST POP PUSH1 0x6 SWAP2 SWAP3 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP2 POP DUP1 DUP3 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1DC3 JUMPI JUMPDEST PUSH2 0x1DB1 DUP2 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH1 0x6 SWAP2 MLOAD SWAP2 PUSH2 0x1D89 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1DA7 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1DF1 JUMPI JUMPDEST PUSH2 0x1DE1 DUP2 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD PUSH1 0x24 PUSH2 0x1D37 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1DD7 JUMP JUMPDEST PUSH2 0x1CBC SWAP5 POP PUSH2 0x1E1F SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1E25 JUMPI JUMPDEST PUSH2 0x1E17 DUP2 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2062 JUMP JUMPDEST SWAP4 PUSH2 0x1CB2 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E0D JUMP JUMPDEST PUSH2 0x1BF8 SWAP3 POP PUSH2 0x1E4A SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1E25 JUMPI PUSH2 0x1E17 DUP2 DUP4 PUSH2 0x2014 JUMP JUMPDEST SWAP2 PUSH2 0x1BEE JUMP JUMPDEST DUP3 PUSH32 0xDB771C8000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xB82FD5BF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 SWAP3 POP DUP6 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x1ED7 JUMPI JUMPDEST PUSH2 0x1EBD DUP2 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 SWAP1 DUP6 PUSH2 0x1B56 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1EB3 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1F02 PUSH2 0x1F12 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x6 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x6F05B59D3B20000 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1F87 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1F79 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1FB7 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1FB7 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1FB7 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1FB7 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x323 JUMPI PUSH2 0x207C PUSH1 0x20 DUP4 MLOAD SWAP4 ADD PUSH2 0x2055 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x20DE DUP2 PUSH2 0x1FF8 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1FB7 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x2106 DUP3 PUSH2 0x20E4 JUMP JUMPDEST PUSH2 0x2113 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x2014 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x2141 DUP3 SWAP5 PUSH2 0x20E4 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x215F JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1FB7 JUMPI PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 PUSH0 PUSH1 0x1F PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP4 DUP4 PUSH1 0x44 PUSH1 0x20 SWAP7 DUP5 DUP9 DUP3 ADD SWAP5 PUSH32 0xFA399F2A00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x2238 DUP2 PUSH2 0x1FF8 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP12 PUSH1 0x4 DUP7 ADD MSTORE MLOAD DUP1 SWAP2 DUP2 PUSH1 0x24 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY DUP6 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0x22B8 JUMPI POP POP JUMP JUMPDEST RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x22C7 DUP2 DUP5 PUSH2 0x2014 JUMP JUMPDEST DUP3 ADD SWAP2 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP3 MLOAD SWAP1 PUSH2 0x22FE DUP3 PUSH2 0x218C JUMP JUMPDEST SWAP1 PUSH2 0x230C PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP3 DUP3 MSTORE DUP4 DUP4 DUP7 ADD ADD GT PUSH2 0x323 JUMPI DUP2 DUP4 PUSH0 SWAP6 ADD DUP5 DUP4 ADD MCOPY ADD ADD MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP3 PUSH2 0x2392 JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x23C3 JUMPI JUMPDEST DUP2 PUSH2 0x23AE PUSH1 0x20 SWAP4 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x23A1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x23E6 DUP2 PUSH2 0x20E4 JUMP JUMPDEST SWAP4 PUSH2 0x23F4 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x2014 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x323 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x241D JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x240F JUMP JUMPDEST PUSH2 0x2458 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x207F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x246A PUSH2 0x2327 JUMP JUMPDEST AND SWAP2 PUSH1 0x64 PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD MSTORE CALLER PUSH1 0x24 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP2 PUSH2 0x24E9 JUMPI JUMPDEST POP ISZERO PUSH2 0x24C1 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x251B JUMPI JUMPDEST DUP2 PUSH2 0x2504 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0x2515 SWAP1 PUSH2 0x2055 JUMP JUMPDEST PUSH0 PUSH2 0x24B9 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x24F7 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x2538 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x25D2 PUSH5 0x174876E800 SWAP3 DUP4 SWAP3 PUSH2 0x25CB PUSH8 0xDE0B6B3A7640000 SWAP2 DUP4 DUP4 SUB DUP4 DUP6 LT MUL PUSH2 0x2592 JUMP JUMPDEST DIV SWAP1 PUSH2 0x2568 JUMP JUMPDEST DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH2 0x25F9 DUP3 PUSH2 0x267B JUMP JUMPDEST AND DUP1 ISZERO PUSH2 0x263A JUMPI CALLER SUB PUSH2 0x260A JUMPI POP POP JUMP JUMPDEST PUSH32 0xFBECDBF400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP PUSH32 0x8BCBF35300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x60 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 DUP8 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x276B JUMPI PUSH0 SWAP2 PUSH2 0x26F2 JUMPI JUMPDEST POP ADD MLOAD AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x2763 JUMPI JUMPDEST DUP2 PUSH2 0x270D PUSH1 0x60 SWAP4 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x60 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1FB7 JUMPI PUSH2 0x2759 SWAP2 DUP5 SWAP2 DUP3 MSTORE PUSH2 0x2740 DUP2 PUSH2 0x2667 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x274E PUSH1 0x20 DUP3 ADD PUSH2 0x2667 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE ADD PUSH2 0x2667 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE PUSH0 PUSH2 0x26EB JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2700 JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH2 0x277F DUP3 PUSH2 0x28D2 JUMP JUMPDEST SWAP3 SWAP1 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x2791 JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x27A7 DUP4 DUP7 PUSH2 0x214B JUMP JUMPDEST MLOAD AND DUP2 DUP7 AND DUP1 PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP5 DUP6 PUSH0 KECCAK256 DUP6 PUSH0 MSTORE DUP3 MSTORE DUP6 PUSH0 KECCAK256 SLOAD SWAP6 DUP7 PUSH2 0x27D9 JUMPI JUMPDEST POP POP POP POP POP POP POP ADD PUSH2 0x2783 JUMP JUMPDEST PUSH32 0x938F3A3A03EE425CCC0F8010B0468938CBAFD3750FA43BBDF09C6F75E97E51F9 SWAP4 DUP6 PUSH0 MSTORE DUP4 MSTORE DUP1 PUSH0 KECCAK256 DUP7 PUSH0 MSTORE DUP4 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE PUSH2 0x2818 DUP8 DUP14 DUP9 PUSH2 0x2ADC JUMP JUMPDEST MLOAD SWAP6 DUP7 MSTORE DUP11 AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x27CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x285E JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SUB PUSH2 0x28AA JUMPI JUMP JUMPDEST PUSH32 0x833FB3CE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP4 PUSH2 0x2948 JUMPI JUMPDEST POP POP DUP2 MLOAD SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x295B DUP2 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD PUSH1 0x20 SWAP2 DUP3 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP3 DUP2 PUSH1 0x1F DUP6 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP4 MLOAD PUSH2 0x2993 DUP2 PUSH2 0x20E4 JUMP JUMPDEST SWAP5 PUSH2 0x29A1 PUSH1 0x40 MLOAD SWAP7 DUP8 PUSH2 0x2014 JUMP JUMPDEST DUP2 DUP7 MSTORE DUP5 DUP1 DUP8 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP4 DUP5 GT PUSH2 0x323 JUMPI DUP5 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x29CE JUMPI POP POP POP POP POP SWAP1 PUSH0 DUP1 PUSH2 0x2941 JUMP JUMPDEST DUP2 MLOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 MSTORE SWAP1 DUP5 ADD SWAP1 DUP5 ADD PUSH2 0x29BA JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 DUP5 DUP2 AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP5 DUP6 PUSH2 0x2A1F JUMPI JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 PUSH2 0x2A64 DUP8 PUSH32 0x1C2887FCB98F75E66BB9A36311F2D3D22FB204E6362106F30E9DF7EAF63131B5 SWAP6 PUSH1 0x20 SWAP6 DUP9 PUSH0 MSTORE PUSH1 0x7 DUP8 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP11 PUSH0 MSTORE DUP8 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH2 0x2ADC JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2A17 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH2 0x207C PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x25A5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH2 0x207C PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x25A5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP2 MSTORE SWAP3 PUSH2 0x2B70 SWAP3 PUSH0 SWAP3 DUP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2B39 PUSH1 0x64 DUP9 PUSH2 0x2014 JUMP JUMPDEST AND SWAP5 MLOAD SWAP1 DUP3 DUP7 GAS CALL RETURNDATASIZE ISZERO PUSH2 0x2BD4 JUMPI RETURNDATASIZE SWAP1 PUSH2 0x2B52 DUP3 PUSH2 0x218C JUMP JUMPDEST SWAP2 PUSH2 0x2B60 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x2014 JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMPDEST DUP4 PUSH2 0x2BDC JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x2BB1 JUMPI JUMPDEST POP POP PUSH2 0x2B86 JUMPI POP JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 SWAP3 POP SWAP1 PUSH1 0x20 SWAP2 DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x2BCC SWAP2 ADD PUSH2 0x2055 JUMP JUMPDEST ISZERO PUSH0 DUP1 PUSH2 0x2B7D JUMP JUMPDEST PUSH1 0x60 SWAP1 PUSH2 0x2B6A JUMP JUMPDEST SWAP1 PUSH2 0x2C19 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x2BF1 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x2C5F JUMPI JUMPDEST PUSH2 0x2C2A JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x2C22 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP14 GT RETURN 0x4D 0xA5 0xB2 PREVRANDAO 0x1F ISZERO 0x2C 0xC3 EXTCODESIZE DUP8 0x2B PUSH31 0x59EB999FFA46FA4CBE19FAF11A783A73D264736F6C634300081B0033000000 ","sourceMap":"3120:29542:18:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;:::i;:::-;;;1525:73:13;;;:::i;:::-;4720:5:18;7248:55;;7244:127;;7402:20;;;:::i;:::-;8176:4;;;:::i;:::-;30493:39;;;:::i;:::-;3120:29542;;;;;;:::i;:::-;;;;;;;30450:129;;;3120:29542;25517:4;3120:29542;;-1:-1:-1;;;;;3120:29542:18;;;;;;;;30410:31;30450:129;3120:29542;;;;;;;;;;;;;;;;;;;;;;;;30674:6;3120:29542;30720:54;;;;:::i;:::-;30674:101;;;;;3120:29542;;;30674:101;;-1:-1:-1;;;;;3120:29542:18;;;;;30674:101;;3120:29542;;;;;;-1:-1:-1;;3120:29542:18;;;;;;-1:-1:-1;;30674:101:18;;;;;;;30791:68;30674:101;30450:129;30674:101;;;3120:29542;;;;;;;30791:68;3120:29542;30674:101;;;;:::i;:::-;3120:29542;30674:101;;;3120:29542;;;;;;;;;30674:101;3120:29542;;;7244:127;7326:34;3120:29542;7326:34;3120:29542;;7326:34;3120:29542;;;;;-1:-1:-1;;3120:29542:18;;;;;;;;-1:-1:-1;;;;;8461:6:18;3120:29542;;;;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;:::i;:::-;436:67:20;;:::i;:::-;3120:29542:18;;;9135:33;;-1:-1:-1;;;;;3120:29542:18;;;9135:33;;3120:29542;;9135:6;3120:29542;9135:6;;-1:-1:-1;;;;;9135:6:18;3120:29542;9135:33;;;;;;;3120:29542;;;9135:33;;;3120:29542;;-1:-1:-1;;;;;3120:29542:18;;;;10916:31;3120:29542;;;;;;;;;11126:30;3120:29542;;;;;;11225:30;3120:29542;11289:28;;;;:57;;;;3120:29542;11356:199;;;3120:29542;11615:28;;;:::i;:::-;11658:13;;3120:29542;11673:13;;;;;;10881:20;;-1:-1:-1;;;;;3120:29542:18;;;;;;;;;;;;;11080:134;3120:29542;;11177:31;3120:29542;;;;;;11225:30;3120:29542;11289:28;;;:57;;;;11653:1939;11356:199;;;11653:1939;11615:28;;;:::i;:::-;11658:13;;3120:29542;11673:13;;;;;;3120:29542;11688:3;11711:13;;;;:::i;:::-;3120:29542;11707:1875;;11688:3;3120:29542;;11658:13;;11707:1875;11763:13;-1:-1:-1;;;;;11763:13:18;;;;:::i;:::-;3120:29542;;11831:13;;;;;:::i;:::-;3120:29542;-1:-1:-1;;;;;9135:6:18;3120:29542;11795:50;;;;3120:29542;;11795:50;3120:29542;11795:50;;;3120:29542;11795:50;;3120:29542;11824:4;3120:29542;;;;;;;;9135:6;;3120:29542;9135:6;;-1:-1:-1;;;;;9135:6:18;3120:29542;11795:50;;;;;;;;;;;11707:1875;3120:29542;;;12020:240;3120:29542;12227:13;;;;;;:::i;:::-;3120:29542;;;;;;12188:53;3120:29542;-1:-1:-1;;;;;3120:29542:18;;12188:53;;12278:1290;;;;12884:13;;;;:::i;:::-;3120:29542;2004:6:14;;2000:58;;2153:5;;;:::i;:::-;3120:29542:18;465:4:14;1068:5;2560:120;;;;;;;;;;;;;;1068:5;:::i;:::-;1186:122;;;;;;;;;3120:29542:18;-1:-1:-1;;;;;3120:29542:18;;;;13044:19;3120:29542;;;;;;;;;;;;;13044:51;3120:29542;;;13044:51;:::i;:::-;3120:29542;;13156:13;;;;:::i;:::-;3120:29542;;;;;;;;;;;13117:70;3120:29542;-1:-1:-1;;;;;3120:29542:18;;;;13117:22;3120:29542;;;;;;;;;;;;;;;;;13117:70;:::i;:::-;3120:29542;;12278:1290;11707:1875;;;;3120:29542;;;;;;;;;;2000:58:14;2033:14;3120:29542:18;2033:14:14;3120:29542:18;;2033:14:14;12278:1290:18;3120:29542;;11289:28;;;13407:13;;;;:::i;:::-;3120:29542;;-1:-1:-1;;;;;3120:29542:18;;;;13371:19;3120:29542;;;;;;;;;;13371:49;3120:29542;;;;;;13371:49;:::i;:::-;3120:29542;;12278:1290;;13310:240;13514:13;;;;:::i;:::-;3120:29542;;-1:-1:-1;;;;;3120:29542:18;;;;13475:22;3120:29542;;;;;;;;;;13475:52;3120:29542;;;;;;13475:52;:::i;3120:29542::-;;;;;;;;;;11795:50;;;;:::i;:::-;3120:29542;;11795:50;;;;3120:29542;;;11795:50;3120:29542;;;;;;;;;11795:50;3120:29542;;;11356:199;11465:79;;;;;;:::i;:::-;11356:199;;;11289:57;11321:25;;;;-1:-1:-1;11289:57:18;;11688:3;11711:13;;;;:::i;:::-;3120:29542;11707:1875;;11688:3;3120:29542;;11658:13;;11707:1875;-1:-1:-1;;;;;11763:13:18;;;;:::i;:::-;3120:29542;;11831:13;;;;;:::i;:::-;3120:29542;-1:-1:-1;;;;;9135:6:18;3120:29542;11795:50;;;;3120:29542;;11795:50;3120:29542;11795:50;;;3120:29542;11795:50;;3120:29542;11824:4;3120:29542;;;;;;;;;9135:6;3120:29542;9135:6;;-1:-1:-1;;;;;9135:6:18;3120:29542;11795:50;;;;;;;;11707:1875;12122:13;;;12084:52;3120:29542;-1:-1:-1;;;;;12122:13:18;;;;:::i;:::-;3120:29542;;;;;;;;12084:52;;12278:1290;;;;12884:13;;;;:::i;:::-;3120:29542;2004:6:14;;2000:58;;2153:5;;;:::i;:::-;3120:29542:18;465:4:14;1068:5;2560:120;;;;;;;;;;;;;;1068:5;:::i;:::-;1186:122;;;;;;;;;3120:29542:18;-1:-1:-1;;;;;3120:29542:18;;;;13044:19;3120:29542;;;;;;;;;;;;;13044:51;3120:29542;;;13044:51;:::i;:::-;3120:29542;;13156:13;;;;:::i;:::-;3120:29542;;;;;;;;;;;13117:70;3120:29542;-1:-1:-1;;;;;3120:29542:18;;;;13117:22;3120:29542;;;;;;;;;;;;;;;;;13117:70;:::i;:::-;3120:29542;;12278:1290;11707:1875;;;;12278:1290;3120:29542;;11289:28;;;13407:13;;;;:::i;:::-;3120:29542;;-1:-1:-1;;;;;3120:29542:18;;;;13371:19;3120:29542;;;;;;;;;;13371:49;3120:29542;;;;;;13371:49;:::i;:::-;3120:29542;;12278:1290;;13310:240;13514:13;;;;:::i;:::-;3120:29542;;-1:-1:-1;;;;;3120:29542:18;;;;13475:22;3120:29542;;;;;;;;;;13475:52;3120:29542;;;;;;13475:52;:::i;11795:50::-;;;;:::i;:::-;;;;11356:199;11465:79;;;;;:::i;:::-;11356:199;;11289:57;11321:25;;;;-1:-1:-1;11289:57:18;;9135:33;;;;;;3120:29542;9135:33;;;;;;:::i;:::-;;;3120:29542;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;9135:33;;;;3120:29542;;;;;-1:-1:-1;;3120:29542:18;;;;;29041:9;3120:29542;;:::i;:::-;;;:::i;:::-;7088:4;;;;:::i;:::-;29041:9;:::i;:::-;3120:29542;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;:::i;:::-;;;:::i;:::-;1525:73:13;;;:::i;:::-;27874:28:18;;;:::i;:::-;27918:13;3120:29542;27933:13;;;;;;3120:29542;27948:3;27982:13;28049:5;-1:-1:-1;;;;;27982:13:18;3120:29542;27982:13;;;:::i;:::-;3120:29542;;28049:5;;;:::i;:::-;3120:29542;27918:13;;3120:29542;;;;;-1:-1:-1;;3120:29542:18;;;;;-1:-1:-1;;;;;3120:29542:18;;:::i;:::-;;;;14101:16;3120:29542;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;:::i;:::-;;;:::i;:::-;;;;-1:-1:-1;;;;;3120:29542:18;;;;;;;;;;1525:73:13;;;:::i;:::-;3120:29542:18;;;28331:52;;;;3120:29542;28331:52;;3120:29542;;;;28331:52;;3120:29542;;;;;28331:6;3120:29542;28331:52;;;;;;;;3120:29542;28432:5;;;;:::i;28331:52::-;3120:29542;28331:52;;3120:29542;28331:52;;;;;;3120:29542;28331:52;;;:::i;:::-;;;3120:29542;;;;28432:5;;-1:-1:-1;28331:52:18;;;;;-1:-1:-1;28331:52:18;;3120:29542;;;;;-1:-1:-1;;3120:29542:18;;;;;;;:::i;:::-;;;1525:73:13;;;:::i;:::-;4720:5:18;7581:57;;7577:130;;7738:21;;;:::i;:::-;8176:4;;;:::i;:::-;31526:40;;;:::i;:::-;3120:29542;;;;;;:::i;:::-;;;;;;;31483:130;;;3120:29542;25861:4;3120:29542;;-1:-1:-1;;;;;3120:29542:18;;;;;;;;;31483:130;3120:29542;;;;;;;;;;;;;;;;;;;;;;;;31709:6;3120:29542;31756:55;;;;:::i;:::-;31709:103;;;;;3120:29542;;;31709:103;;-1:-1:-1;;;;;3120:29542:18;;;;;31709:103;;3120:29542;;;;;;-1:-1:-1;;3120:29542:18;;;;;;-1:-1:-1;;31709:103:18;;;;;;;31828:70;31709:103;31483:130;31709:103;;;3120:29542;;;;;;31828:70;3120:29542;7577:130;7661:35;3120:29542;7661:35;3120:29542;;7661:35;3120:29542;;;;;-1:-1:-1;;3120:29542:18;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3120:29542:18;;;;;;;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;4720:5;7581:57;;7577:130;;3120:29542;7738:21;;25114:70;7738:21;;:::i;:::-;1525:73:13;;:::i;:::-;3120:29542:18;;;;;;;;25114:70;3120:29542;;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;:::i;:::-;15714:28;;;;:::i;:::-;15766:24;;;;:::i;:::-;15805:13;3120:29542;;-1:-1:-1;;;;;3120:29542:18;;;15800:124;15820:13;;;;;;3120:29542;;;;;;;:::i;:::-;;;;15835:3;3120:29542;;;;;15870:22;3120:29542;;;;;15899:13;;;;;:::i;:::-;3120:29542;;;;;;;;;;15854:59;;;;:::i;:::-;3120:29542;;15805:13;;3120:29542;;;;;-1:-1:-1;;3120:29542:18;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;:::i;:::-;15292:28;;;;:::i;:::-;15344:24;;;;:::i;:::-;15383:13;3120:29542;;-1:-1:-1;;;;;3120:29542:18;;;15378:121;15398:13;;;;;;3120:29542;;;;;;;:::i;15413:3::-;3120:29542;;;;;15448:19;3120:29542;;;;;15474:13;;;;;:::i;:::-;3120:29542;;;;;;;;;;15432:56;;;;:::i;:::-;3120:29542;;15383:13;;3120:29542;;;;;-1:-1:-1;;3120:29542:18;;;;;;;;-1:-1:-1;;;;;1216:6:19;3120:29542:18;;;;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;4720:5;7248:55;;7244:127;;3120:29542;7402:20;;24730:68;7402:20;;:::i;:::-;1525:73:13;;:::i;:::-;3120:29542:18;;;;;;;;24730:68;3120:29542;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;3120:29542:18;;;;;-1:-1:-1;;;;;3120:29542:18;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;436:67:20;21135:37:18;436:67:20;;;:::i;:::-;-1:-1:-1;;;;;3120:29542:18;;;;;;;;;20293:16;3120:29542;;;;;20318:4;3120:29542;;;;;;;20451:56;;;;;;21639:92;;3120:29542;20451:56;;20547:57;;;;;;;3120:29542;20547:57;;;21135:37;:::i;:::-;3120:29542;;;;;;:::i;:::-;;;;;;;;21320:38;21092:134;;;3120:29542;;;;;;;21052:31;3120:29542;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21320:38;:::i;:::-;3120:29542;;;;;;;;;:::i;:::-;;;;21277:135;;;3120:29542;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21534:90;3120:29542;;;21534:90;3120:29542;;21534:90;;;;3120:29542;;;;;;;;;;;;;;;;;21534:90;;;;3120:29542;;;;;;;;;;;;;;;;;;;;21639:92;;;;3120:29542;21746:25;;;21742:124;;20547:57;3120:29542;;;;;;;;;;;;;21742:124;21792:63;3120:29542;;;;;;21792:63;21742:124;;;;;;20547:57;3120:29542;;;20318:4;3120:29542;20547:57;;;21135:37;:::i;20451:56::-;3120:29542;21639:92;;3120:29542;;20451:56;;;3120:29542;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;:::i;:::-;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:29542:18;;;;;;;;16417:31;3120:29542;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;16543:81;;;;3120:29542;16539:176;;;3120:29542;16539:176;30493:39;;;:::i;:::-;3120:29542;;;;;;;;:::i;:::-;;;;30450:129;;;3120:29542;;;;;;;16417:31;3120:29542;;;;;;;;;;;;;;;;;;;;;;;;;30674:6;3120:29542;30720:54;;;;:::i;:::-;30674:101;;;;;3120:29542;;;30674:101;;-1:-1:-1;;;;;3120:29542:18;;;;;30674:101;;3120:29542;;;;;;-1:-1:-1;;3120:29542:18;;;;;;-1:-1:-1;;30674:101:18;;;;;;;30791:68;30674:101;;;3120:29542;;;;;;30791:68;3120:29542;16543:81;16576:48;;;;;16543:81;;;3120:29542;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;:::i;:::-;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:29542:18;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;16980:33;3120:29542;17028:82;;;;3120:29542;17024:179;;;3120:29542;17024:179;31526:40;;;:::i;:::-;3120:29542;;;;;;;;:::i;:::-;;;;31483:130;;;3120:29542;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31709:6;3120:29542;31756:55;;;;:::i;:::-;31709:103;;;;;3120:29542;;;31709:103;;-1:-1:-1;;;;;3120:29542:18;;;;;31709:103;;3120:29542;;;;;;-1:-1:-1;;3120:29542:18;;;;;;-1:-1:-1;;31709:103:18;;;;;;;31828:70;31709:103;;;3120:29542;;;;;;31828:70;3120:29542;17028:82;17061:49;;;;;17028:82;;;3120:29542;;:::i;:::-;;;;;-1:-1:-1;;3120:29542:18;;;;;-1:-1:-1;;;;;3120:29542:18;;:::i;:::-;;;;14307:31;3120:29542;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;3120:29542:18;;;;;;13926:33;3120:29542;;;;;;;;;;;;-1:-1:-1;;3120:29542:18;;;;;29204:21;3120:29542;;:::i;:::-;29204:21;;;:::i;:::-;;;:::i;3120:29542::-;;;;;-1:-1:-1;;3120:29542:18;;;;;;;:::i;:::-;;;7088:4;;;;:::i;:::-;4975:9;7868:56;;7864:127;;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:29542:18;;;;;;;;27306:31;3120:29542;;;;;;;27472:6;3120:29542;27519:55;;;;:::i;:::-;27472:103;;;;;3120:29542;;;27472:103;;-1:-1:-1;;;;;3120:29542:18;;;;;27472:103;;3120:29542;;;;;;-1:-1:-1;;3120:29542:18;;;;;;-1:-1:-1;;27472:103:18;;;;;;;27595:68;27472:103;3120:29542;27472:103;;;3120:29542;;;;;;27595:68;3120:29542;7864:127;7947:33;3120:29542;7947:33;3120:29542;;7947:33;3120:29542;;;;;-1:-1:-1;;3120:29542:18;;;;;;;;4975:9;3120:29542;;;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;:::i;:::-;;;7088:4;;;;:::i;:::-;4975:9;7868:56;;7864:127;;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:29542:18;;;;;;;;26923:30;3120:29542;;;;;;;27087:6;3120:29542;27133:54;;;;:::i;:::-;27087:101;;;;;3120:29542;;;27087:101;;-1:-1:-1;;;;;3120:29542:18;;;;;27087:101;;3120:29542;;;;;;-1:-1:-1;;3120:29542:18;;;;;;-1:-1:-1;;27087:101:18;;;;;;;27208:67;27087:101;3120:29542;27087:101;;;3120:29542;;;;;;27208:67;3120:29542;27087:101;;;;:::i;:::-;;;;3120:29542;;;;;-1:-1:-1;;3120:29542:18;;;;;;16154:79;3120:29542;;;;16154:79;:::i;3120:29542::-;;;;;-1:-1:-1;;3120:29542:18;;;;;-1:-1:-1;;;;;3120:29542:18;;:::i;:::-;;;;14845:30;3120:29542;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;:::i;:::-;1525:73:13;;:::i;:::-;-1:-1:-1;;;;;3120:29542:18;;;23289:33;;:6;;3120:29542;23289:6;;;3120:29542;23289:33;;;;;;;;3120:29542;23289:33;;;3120:29542;;;23374:4;;23337:42;;23333:104;;3120:29542;;;;;23451:16;3120:29542;;;;;;;;23447:87;;3120:29542;;;23451:16;3120:29542;;;;;23569:4;3120:29542;;;;;;;;;;23646:49;;;3120:29542;23646:49;;3120:29542;;23646:49;3120:29542;23646:49;;;;;;;;;3120:29542;;;23646:49;;;3120:29542;23788:36;;;;:::i;:::-;3120:29542;;;;;;;:::i;:::-;;;;;;;23745:133;;;3120:29542;;;;;;;;23705:31;3120:29542;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23953:72;3120:29542;23953:72;;;3120:29542;23953:72;;3120:29542;;23953:72;3120:29542;23953:72;;;;;;;;;3120:29542;;;23953:72;;;3120:29542;24119:37;;;;:::i;:::-;3120:29542;;;;;;;;:::i;:::-;;;;24076:135;;;3120:29542;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24261:54;;;3120:29542;24261:54;;3120:29542;24261:54;;3120:29542;24261:54;;;;;;;;;3120:29542;24261:54;;;3120:29542;;;;;;;;;24222:30;3120:29542;;;;;;;;24365:55;;;;3120:29542;24365:55;;;3120:29542;24365:55;;3120:29542;24365:55;;;;;;;3120:29542;24365:55;;;3120:29542;;24325:31;3120:29542;;;;;;;;;;;;24365:55;;;;;;;;;;;;;;;;:::i;:::-;;;3120:29542;;;;24325:31;3120:29542;;24365:55;;;;;;;;24261:54;;;;;;;;;;;;;;;;:::i;:::-;;;3120:29542;;;;;;24261:54;;;;;;;23953:72;24119:37;23953:72;;;;;3120:29542;23953:72;3120:29542;23953:72;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;23646:49;23788:36;23646:49;;;;;3120:29542;23646:49;3120:29542;23646:49;;;;;;;:::i;:::-;;;;23447:87;23496:27;;3120:29542;23496:27;3120:29542;;;;23496:27;23333:104;23402:24;3120:29542;23402:24;3120:29542;;23402:24;23289:33;;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:29542;;;;;;;;;;;;23289:33;;;;;;;;;;3120:29542;;;;;-1:-1:-1;;3120:29542:18;;;;;;;-1:-1:-1;;;;;3120:29542:18;;:::i;:::-;;;;15042:31;3120:29542;;;;;;;;;;;;;-1:-1:-1;;;;;3120:29542:18;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;3120:29542:18;;;;;;:::o;:::-;;;;;-1:-1:-1;;3120:29542:18;;;;;;;;4720:5;3120:29542;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;1931:430:13:-;3120:29542:18;;;2303:50:13;;;2320:22;;3120:29542:18;;;;;;;2303:50:13;;;;;;:::i;:::-;3120:29542:18;2293:61:13;;1931:430;:::o;3120:29542:18:-;;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;8523:151::-;8598:68;8523:151;-1:-1:-1;3120:29542:18;-1:-1:-1;;;;;3120:29542:18;;8598:68;;3120:29542;8598:68;;;;;;;;;;3120:29542;8598:68;;;3120:29542;8598:68;;;;;;:::i;:::-;3120:29542;;8584:83;;;;;;;3120:29542;8584:83;;;8598:68;8584:83;;3120:29542;;;;;8598:68;3120:29542;;;;;;;;;;;;;;;;;;8584:83;;:6;;3120:29542;8584:83;;;;;;;;8523:151;;:::o;8584:83::-;;;-1:-1:-1;8584:83:18;;;;;;:::i;:::-;;;3120:29542;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;3120:29542:18;;;;;;;;;8523:151::o;1366:109:19:-;3120:29542:18;;;1442:26:19;;-1:-1:-1;;;;;1442:26:19;3120:29542:18;1442:26:19;3120:29542:18;1216:6:19;3120:29542:18;;1442:26:19;;;;;;;;;;;1435:33;;1366:109;:::o;1442:26::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:29542:18;;;;;;;;;;;;1366:109:19;:::o;1442:26::-;;;-1:-1:-1;1442:26:19;;3120:29542:18;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;1688:201:13;1762:20;1774:7;;;;1762:20;:::i;:::-;1592:60:19;-1:-1:-1;;;;;1592:15:19;;:::i;:::-;3120:29542:18;;;;;1592:60:19;;;;3120:29542:18;1592:60:19;;;;;3120:29542:18;1820:10:13;3120:29542:18;;;;1646:4:19;3120:29542:18;;;;1592:60:19;;;;;;;1774:7:13;1592:60:19;;;1688:201:13;1797:34;;1793:90;;1688:201::o;1793:90::-;1854:18;1774:7;1854:18;1592:60:19;1774:7:13;1854:18;1592:60:19;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:29542:18;;;;;;;:::i;:::-;1592:60:19;;;;;;-1:-1:-1;1592:60:19;;13291:213:27;3120:29542:18;13369:24:27;;;;13365:103;;3120:29542:18;13291:213:27;:::o;13365:103::-;13416:41;;;13447:2;13416:41;3120:29542:18;;;;13416:41:27;;3120:29542:18;;;;;;;;;;:::o;19669:4:12:-;;465::14;19669::12;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;17922:1064:18:-;;18151:104;19669:4:12;5832:87:14;;;838:5;5832:87;;;;;;;;;838:5;:::i;:::-;19669:4:12;18151:104:18;;:::i;:::-;19669:4:12;;;;;;;;;;;;;;;17922:1064:18;:::o;18992:340::-;-1:-1:-1;;;;;19088:21:18;;;;;:::i;:::-;3120:29542;19124:25;;19120:93;;19242:10;19227:25;19223:103;;18992:340;;:::o;19223:103::-;19275:40;19147:1;19275:40;19242:10;19275:40;3120:29542;;;;;19147:1;19275:40;19120:93;19172:30;;19147:1;19172:30;3120:29542;19172:30;3120:29542;;19147:1;19172:30;3120:29542;;;-1:-1:-1;;;;;3120:29542:18;;;;;;:::o;19603:201::-;3120:29542;;;;19723:32;;-1:-1:-1;;;;;3120:29542:18;;;19723:32;;;3120:29542;19723:32;3120:29542;;;19723:6;3120:29542;;19723:32;;;;;;;-1:-1:-1;19723:32:18;;;19603:201;19773:24;;3120:29542;;19603:201;:::o;19723:32::-;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:29542;;;;;;;19723:32;3120:29542;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;19723:32;;;;;;-1:-1:-1;19723:32:18;;;3120:29542;;;-1:-1:-1;3120:29542:18;;;;;29239:616;;29374:28;;;:::i;:::-;29418:13;;29430:1;29433:13;;;;;;29239:616;;;;;:::o;29448:3::-;3120:29542;;-1:-1:-1;;;;;29482:13:18;;;;;:::i;:::-;3120:29542;;;;;;29430:1;3120:29542;29537:22;3120:29542;;;;;;;29430:1;3120:29542;;29430:1;3120:29542;;;;29430:1;3120:29542;;29590:20;;29586:253;;29448:3;;;;;;;;3120:29542;29418:13;;29586:253;29758:66;3120:29542;;29430:1;3120:29542;;;;29430:1;3120:29542;;29430:1;3120:29542;;;29430:1;3120:29542;;;;29717:16;;;;;:::i;:::-;3120:29542;;;;;;29758:66;;29586:253;;;;;;;;;509:165:20;-1:-1:-1;;;;;586:6:20;3120:29542:18;564:10:20;:29;560:108;;509:165::o;560:108::-;616:41;;;564:10;616:41;3120:29542:18;;616:41:20;;31911:749:18;19669:4:12;;;;;;;;;;;;;;;;;;32512:74:18;32508:146;;31911:749::o;32508:146::-;32609:34;-1:-1:-1;32609:34:18;;-1:-1:-1;32609:34:18;19338:199;;-1:-1:-1;;;;;3120:29542:18;;;19469:26;3120:29542;19469:26;;3120:29542;19469:26;;;3120:29542;19469:26;:6;3120:29542;19469:6;;;3120:29542;19469:26;;;;;;;;;;;19338:199;19460:35;;;3120:29542;19338:199;:::o;19469:26::-;;;;;;;;;;;;;;:::i;:::-;;;3120:29542;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;19469:26;;;;;;;;;;3120:29542;;;;;;;;;;;;;;;;;;;;28451:403;;;-1:-1:-1;;;;;3120:29542:18;;;;;-1:-1:-1;3120:29542:18;28575:19;3120:29542;;;-1:-1:-1;3120:29542:18;;;;;;;-1:-1:-1;3120:29542:18;;;;-1:-1:-1;3120:29542:18;;28621:20;;28617:231;;28451:403;;;;;;;:::o;28617:231::-;3120:29542;28737:16;3120:29542;28774:63;3120:29542;;;;-1:-1:-1;3120:29542:18;28575:19;3120:29542;;;-1:-1:-1;3120:29542:18;;-1:-1:-1;3120:29542:18;;;-1:-1:-1;3120:29542:18;;;;28737:16;:::i;:::-;3120:29542;;;;;;28774:63;;28617:231;;;;;;;;17215:701;-1:-1:-1;;;;;3120:29542:18;17414:399;3120:29542;17672:32;3120:29542;;17830:79;3120:29542;;17414:399;3120:29542;;;17765:31;3120:29542;;;17414:399;3120:29542;;17830:79;;:::i;17215:701::-;-1:-1:-1;;;;;3120:29542:18;-1:-1:-1;3120:29542:18;17489:31;3120:29542;;17830:79;3120:29542;;-1:-1:-1;3120:29542:18;;;17581:30;3120:29542;;;-1:-1:-1;3120:29542:18;;17830:79;;:::i;1303:160:25:-;3120:29542:18;;;1412:43:25;;;;;;-1:-1:-1;;;;;3120:29542:18;;;1412:43:25;;;3120:29542:18;;;;;;;;;1412:43:25;;;3120:29542:18;3510:55:26;;-1:-1:-1;;;;1412:43:25;3120:29542:18;1412:43:25;3120:29542:18;;1412:43:25;:::i;:::-;3120:29542:18;3462:31:26;;;;;;;3120:29542:18;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2847:1:26;1412:43:25;3120:29542:18;;;;3510:55:26;;:::i;:::-;3120:29542:18;;4551:22:25;;;;:57;;;;3120:29542:18;4547:135:25;;;;1303:160;:::o;4547:135::-;4631:40;2847:1:26;4631:40:25;;3120:29542:18;1412:43:25;2847:1:26;4631:40:25;4551:57;4578:30;;;;1412:43;4578:30;;;3120:29542:18;;;;1412:43:25;3120:29542:18;4578:30:25;;3120:29542:18;:::i;:::-;4577:31:25;4551:57;;;;3120:29542:18;;;;;4625:582:26;;4797:8;;-1:-1:-1;3120:29542:18;;5874:21:26;:17;;6046:142;;;;;;5870:383;6225:17;5894:1;6225:17;;5894:1;6225:17;4793:408;3120:29542:18;;5045:22:26;:49;;;4793:408;5041:119;;5173:17;;:::o;5041:119::-;-1:-1:-1;;;;;5121:24:26;;5066:1;5121:24;3120:29542:18;5121:24:26;3120:29542:18;;5066:1:26;5121:24;5045:49;5071:18;;;:23;5045:49;"},"methodIdentifiers":{"MAX_CREATOR_FEE_PERCENTAGE()":"2e1d388d","MAX_PROTOCOL_SWAP_FEE_PERCENTAGE()":"2772d156","MAX_PROTOCOL_YIELD_FEE_PERCENTAGE()":"5e32e4e8","collectAggregateFees(address)":"8f4ab9ca","collectAggregateFeesHook(address)":"fa399f2a","computeAggregateFeePercentage(uint256,uint256)":"0ddd60c6","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getGlobalProtocolSwapFeePercentage()":"7869ee18","getGlobalProtocolYieldFeePercentage()":"55fb76af","getPoolCreatorFeeAmounts(address)":"9e95f3fd","getPoolCreatorSwapFeePercentage(address)":"0b8e059b","getPoolCreatorYieldFeePercentage(address)":"0252aab5","getPoolProtocolSwapFeeInfo(address)":"5c15a0b4","getPoolProtocolYieldFeeInfo(address)":"7a2b97dc","getProtocolFeeAmounts(address)":"8df44c54","getVault()":"8d928af8","isPoolRegistered(address)":"c673bdaf","migratePool(address)":"0874327f","registerPool(address,address,bool)":"77ff76e7","setGlobalProtocolSwapFeePercentage(uint256)":"8a3c5c69","setGlobalProtocolYieldFeePercentage(uint256)":"a93df2a4","setPoolCreatorSwapFeePercentage(address,uint256)":"1377c16c","setPoolCreatorYieldFeePercentage(address,uint256)":"3af52712","setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356","updateProtocolSwapFeePercentage(address)":"71ecc8fb","updateProtocolYieldFeePercentage(address)":"71447ea8","vault()":"fbfa77cf","withdrawPoolCreatorFees(address)":"52f125f0","withdrawPoolCreatorFees(address,address)":"f7061445","withdrawProtocolFees(address,address)":"cf7b287f","withdrawProtocolFeesForToken(address,address,address)":"b53a70b2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"CallerIsNotPoolCreator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMigrationSource\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolCreatorFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolYieldFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateSwapFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateYieldFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"PoolWithCreatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_CREATOR_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFeesHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeAggregateFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolSwapFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolYieldFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getProtocolFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"migratePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"registerPool\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract stores global default protocol swap and yield fees, and also tracks the values of those fees for each pool (the `PoolFeeConfig` described below). Protocol fees can always be overwritten by governance, but pool creator fees are controlled by the registered poolCreator (see `PoolRoleAccounts`). The Vault stores a single aggregate percentage for swap and yield fees; only this `ProtocolFeeController` knows the component fee percentages, and how to compute the aggregate from the components. This is done for performance reasons, to minimize gas on the critical path, as this way the Vault simply applies a single \\\"cut\\\", and stores the fee amounts separately from the pool balances. The pool creator fees are \\\"net\\\" protocol fees, meaning the protocol fee is taken first, and the pool creator fee percentage is applied to the remainder. Essentially, the protocol is paid first, then the remainder is divided between the pool creator and the LPs. There is a permissionless function (`collectAggregateFees`) that transfers these tokens from the Vault to this contract, and distributes them between the protocol and pool creator, after which they can be withdrawn at any time by governance and the pool creator, respectively. Protocol fees can be zero in some cases (e.g., the token is registered as exempt), and pool creator fees are zero if there is no creator role address defined. Protocol fees are capped at a maximum percentage (50%); pool creator fees are computed \\\"net\\\" protocol fees, so they can be any value from 0 to 100%. Any combination is possible. A protocol-fee-exempt pool with a 100% pool creator fee would send all fees to the creator. If there is no pool creator, a pool with a 50% protocol fee would divide the fees evenly between the protocol and LPs. This contract is deployed with the Vault, but can be changed by governance.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"CallerIsNotPoolCreator(address,address)\":[{\"params\":{\"caller\":\"The account attempting to withdraw pool creator fees\",\"pool\":\"The pool the caller tried to withdraw from\"}}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"PoolAlreadyRegistered(address)\":[{\"details\":\"This can happen if there is an error in the migration, or if governance somehow grants permission to `migratePool`, which should never happen.\",\"params\":{\"pool\":\"The pool\"}}],\"PoolCreatorNotRegistered(address)\":[{\"params\":{\"pool\":\"The pool with no creator\"}}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol swap fee percentages.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol yield fee percentages.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"params\":{\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"params\":{\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global swap fee percentage.\",\"params\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global yield fee percentage.\",\"params\":{\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which pool creator fees are being withdrawn\",\"recipient\":\"The recipient of the funds (the pool creator if permissionless, or another account)\",\"token\":\"The token being withdrawn\"}},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator swap fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage for the pool\"}},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator yield fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage for the pool\"}},\"PoolWithCreatorRegistered(address,address,bool)\":{\"details\":\"The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee counterpart also include the protocol fee exemption flag, we might as well include it here as well.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (non-zero, or the event would not be emitted)\",\"protocolFeeExempt\":\"True if the pool is initially exempt from protocol fees\"}},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which protocol fees are being withdrawn\",\"recipient\":\"The recipient of the funds\",\"token\":\"The token being withdrawn\"}},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the swap fee was charged\",\"token\":\"The token in which the swap fee was charged\"}},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol swap fee will be changed\",\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the yield fee was charged\",\"token\":\"The token in which the yield fee was charged\"}},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol yield fee will be changed\",\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}}},\"kind\":\"dev\",\"methods\":{\"collectAggregateFees(address)\":{\"params\":{\"pool\":\"The pool with aggregate fees\"}},\"collectAggregateFeesHook(address)\":{\"details\":\"Copy and zero out the `aggregateFeeAmounts` collected in the Vault accounting, supplying credit for each token. Then have the Vault transfer tokens to this contract, debiting each token for the amount transferred so that the transaction settles when the hook returns.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"details\":\"Not tied to any particular pool; this just performs the low-level \\\"additive fee\\\" calculation. Note that pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are stored in the Vault with 24-bit precision, this will truncate any values that require greater precision. It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee components, but the truncation ensures it will not revert for any valid set of fee percentages. See example below: tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60% totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000 protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400 creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600 creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360 lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\",\"params\":{\"poolCreatorFeePercentage\":\"The pool creator portion of the aggregate fee percentage\",\"protocolFeePercentage\":\"The protocol portion of the aggregate fee percentage\"},\"returns\":{\"_0\":\"The computed aggregate percentage\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getGlobalProtocolSwapFeePercentage()\":{\"returns\":{\"_0\":\"The global protocol swap fee percentage\"}},\"getGlobalProtocolYieldFeePercentage()\":{\"returns\":{\"_0\":\"The global protocol yield fee percentage\"}},\"getPoolCreatorFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getPoolCreatorSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\"}},\"getPoolCreatorYieldFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\"}},\"getPoolProtocolSwapFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"The protocol swap fee percentage for the given pool\",\"_1\":\"True if the protocol fee has been overridden\"}},\"getPoolProtocolYieldFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"The protocol yield fee percentage for the given pool\",\"_1\":\"True if the protocol fee has been overridden\"}},\"getProtocolFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\"}},\"migratePool(address)\":{\"details\":\"Permission should NEVER be granted to this function outside of a migration contract. It is necessary to permit migration of the `ProtocolFeeController` with all state (in particular, protocol fee overrides and pool creator fees) that cannot be written outside of the `registerPool` function called by the Vault during pool deployment. Even if governance were to grant permission to call this function, the `_registeredPools` latch keeps it safe, guaranteeing that it is impossible to use this function to change anything after registration. A pool can only be registered / configured once - either copied to a new controller in the migration context, or added normally through the Vault calling `registerPool`. Technically, since the logic prevents it from being called on the active fee controller, and on a previously registered or migrated pool, it could even be permissionless. But since we already have other permissioned functions, it doesn't really cost anything to be permissioned, and that provides another layer of security.\",\"params\":{\"pool\":\"The address of the pool to be migrated\"}},\"registerPool(address,address,bool)\":{\"details\":\"This must be called from the Vault during pool registration. It will initialize the pool to the global protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate fee percentages, based on an initial pool creator fee of 0.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (or 0 if there won't be a pool creator fee)\",\"protocolFeeExempt\":\"If true, the pool is initially exempt from protocol fees\"},\"returns\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\"}},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\"}},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage to apply to the pool\"}},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage to apply to the pool\"}},\"setProtocolSwapFeePercentage(address,uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol swap fee\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol yield fee\"}},\"updateProtocolSwapFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol swap fee\"}},\"updateProtocolYieldFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol yield fee\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The Vault address\"}},\"withdrawPoolCreatorFees(address)\":{\"details\":\"Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable value, this function is permissionless.\",\"params\":{\"pool\":\"The pool on which fees were collected\"}},\"withdrawPoolCreatorFees(address,address)\":{\"details\":\"Sends swap and yield pool creator fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFees(address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFeesForToken(address,address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\",\"token\":\"Token to withdraw\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"notice\":\"Error raised if the wrong account attempts to withdraw pool creator fees.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"InvalidMigrationSource()\":[{\"notice\":\"Migration source cannot be this contract.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"Prevent pool data from being registered more than once.\"}],\"PoolCreatorFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\"}],\"PoolCreatorNotRegistered(address)\":[{\"notice\":\"Error raised if there is no pool creator on a withdrawal attempt from the given pool.\"}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated.\"},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated.\"},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\"},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\"},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of pool creator fees in a specific token and amount.\"},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator swap fee percentage of a pool is updated.\"},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator yield fee percentage of a pool is updated.\"},\"PoolWithCreatorRegistered(address,address,bool)\":{\"notice\":\"Emitted for pools registered with creators.\"},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of protocol fees in a specific token and amount.\"},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol swap fees in a specific token and amount.\"},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated for a specific pool.\"},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol yield fees in a specific token and amount.\"},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated for a specific pool.\"}},\"kind\":\"user\",\"methods\":{\"collectAggregateFees(address)\":{\"notice\":\"Collects aggregate fees from the Vault for a given pool.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"notice\":\"Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getGlobalProtocolSwapFeePercentage()\":{\"notice\":\"Getter for the current global protocol swap fee.\"},\"getGlobalProtocolYieldFeePercentage()\":{\"notice\":\"Getter for the current global protocol yield fee.\"},\"getPoolCreatorFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the pool creator for withdrawal.\"},\"getPoolCreatorSwapFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator swap fee percentage for a given pool.\"},\"getPoolCreatorYieldFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator swap fee percentage for a given pool.\"},\"getPoolProtocolSwapFeeInfo(address)\":{\"notice\":\"Getter for the current protocol swap fee for a given pool.\"},\"getPoolProtocolYieldFeeInfo(address)\":{\"notice\":\"Getter for the current protocol yield fee for a given pool.\"},\"getProtocolFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the protocol for withdrawal.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isPoolRegistered(address)\":{\"notice\":\"Getter for pool registration flag.\"},\"migratePool(address)\":{\"notice\":\"Not exposed in the interface, this enables migration of hidden pool state.\"},\"registerPool(address,address,bool)\":{\"notice\":\"Add pool-specific entries to the protocol swap and yield percentages.\"},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"notice\":\"Set the global protocol swap fee percentage, used by standard pools.\"},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"notice\":\"Set the global protocol yield fee percentage, used by standard pools.\"},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator swap fee percentage to the specified pool.\"},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator yield fee percentage to the specified pool.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"updateProtocolSwapFeePercentage(address)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"updateProtocolYieldFeePercentage(address)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"vault()\":{\"notice\":\"Get the address of the main Vault contract.\"},\"withdrawPoolCreatorFees(address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool.\"},\"withdrawPoolCreatorFees(address,address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool. This is a permissioned function.\"},\"withdrawProtocolFees(address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\"},\"withdrawProtocolFeesForToken(address,address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\"}},\"notice\":\"Helper contract to manage protocol and creator fees outside the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\":\"ProtocolFeeController\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xe0e5193402394ef505f87b206d8e64e1ea8b604feeb2ea8bbd054050778c162d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c962b5d782a8ec4341741dd49daf071e23560548ad95ed00e1531379cfcf0a2e\",\"dweb:/ipfs/QmbPn63SLEZp719KdAtPa4urbhQwqYzfewWfNRtw3nyy8c\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\":{\"keccak256\":\"0xe45521ca4ed88ce5d25262f764132ad923c9207db89a51d5e76e960c3ee7e9f1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7f1bb43ba9746184f4a0ac05ab2b1b62bc56da755346e518c8f427478aad2a\",\"dweb:/ipfs/QmYKgjtZ7Bu8MqQPQf1YBPb8FXfWaGYtL2fMQcZR3iBod1\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x67518bf3b6bd96f5897c56867fc57f3c31bb9b97abf93cf960de145a5eb82414\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://563857d8606cbd4f727c75f09901d09ec9faa73778fe85e2af851982cdb9b6e8\",\"dweb:/ipfs/QmU7x1gWCPGPAcxA8Qq3z8hscrGRFwsc28qad4RMihZ8qB\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"SingletonAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getVault()":"8d928af8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same function name.\",\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"}},\"notice\":\"Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":\"SingletonAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xe0e5193402394ef505f87b206d8e64e1ea8b604feeb2ea8bbd054050778c162d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c962b5d782a8ec4341741dd49daf071e23560548ad95ed00e1531379cfcf0a2e\",\"dweb:/ipfs/QmbPn63SLEZp719KdAtPa4urbhQwqYzfewWfNRtw3nyy8c\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x67518bf3b6bd96f5897c56867fc57f3c31bb9b97abf93cf960de145a5eb82414\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://563857d8606cbd4f727c75f09901d09ec9faa73778fe85e2af851982cdb9b6e8\",\"dweb:/ipfs/QmU7x1gWCPGPAcxA8Qq3z8hscrGRFwsc28qad4RMihZ8qB\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"VaultGuard":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60a034606057601f60b238819003918201601f19168301916001600160401b03831184841017606457808492602094604052833981010312606057516001600160a01b03811681036060576080526040516039908160798239608051815050f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe5f80fdfea2646970667358221220e5352c394e0b3516d039a0b9edab574589fefa1f3b6e10161d67def52da9a16564736f6c634300081b0033","opcodes":"PUSH1 0xA0 CALLVALUE PUSH1 0x60 JUMPI PUSH1 0x1F PUSH1 0xB2 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH1 0x64 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH1 0x60 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH1 0x60 JUMPI PUSH1 0x80 MSTORE PUSH1 0x40 MLOAD PUSH1 0x39 SWAP1 DUP2 PUSH1 0x79 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE5 CALLDATALOAD 0x2C CODECOPY 0x4E SIGNEXTEND CALLDATALOAD AND 0xD0 CODECOPY LOG0 0xB9 0xED 0xAB JUMPI GASLIMIT DUP10 INVALID STATICCALL 0x1F EXTCODESIZE PUSH15 0x10161D67DEF52DA9A16564736F6C63 NUMBER STOP ADDMOD SHL STOP CALLER ","sourceMap":"308:368:20:-:0;;;;;;;;;;;;;-1:-1:-1;;308:368:20;;;;-1:-1:-1;;;;;308:368:20;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;308:368:20;;;;;;409:14;;308:368;;;;;;;;409:14;308:368;;;;;;-1:-1:-1;308:368:20;;;;;;-1:-1:-1;308:368:20;;;;;-1:-1:-1;308:368:20"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220e5352c394e0b3516d039a0b9edab574589fefa1f3b6e10161d67def52da9a16564736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE5 CALLDATALOAD 0x2C CODECOPY 0x4E SIGNEXTEND CALLDATALOAD AND 0xD0 CODECOPY LOG0 0xB9 0xED 0xAB JUMPI GASLIMIT DUP10 INVALID STATICCALL 0x1F EXTCODESIZE PUSH15 0x10161D67DEF52DA9A16564736F6C63 NUMBER STOP ADDMOD SHL STOP CALLER ","sourceMap":"308:368:20:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Contract that shares the modifier `onlyVault`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":\"VaultGuard\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xe0e5193402394ef505f87b206d8e64e1ea8b604feeb2ea8bbd054050778c162d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c962b5d782a8ec4341741dd49daf071e23560548ad95ed00e1531379cfcf0a2e\",\"dweb:/ipfs/QmbPn63SLEZp719KdAtPa4urbhQwqYzfewWfNRtw3nyy8c\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"IERC4626":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"asset","outputs":[{"internalType":"address","name":"assetTokenAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"convertToAssets","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"convertToShares","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxDeposit","outputs":[{"internalType":"uint256","name":"maxAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxMint","outputs":[{"internalType":"uint256","name":"maxShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxRedeem","outputs":[{"internalType":"uint256","name":"maxShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxWithdraw","outputs":[{"internalType":"uint256","name":"maxAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewDeposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewMint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewWithdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAssets","outputs":[{"internalType":"uint256","name":"totalManagedAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","asset()":"38d52e0f","balanceOf(address)":"70a08231","convertToAssets(uint256)":"07a2d13a","convertToShares(uint256)":"c6e6f592","decimals()":"313ce567","deposit(uint256,address)":"6e553f65","maxDeposit(address)":"402d267d","maxMint(address)":"c63d75b6","maxRedeem(address)":"d905777e","maxWithdraw(address)":"ce96cb77","mint(uint256,address)":"94bf804d","name()":"06fdde03","previewDeposit(uint256)":"ef8b30f7","previewMint(uint256)":"b3d7f6b9","previewRedeem(uint256)":"4cdad506","previewWithdraw(uint256)":"0a28a477","redeem(uint256,address,address)":"ba087652","symbol()":"95d89b41","totalAssets()":"01e1d114","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","withdraw(uint256,address,address)":"b460af94"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"asset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"assetTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"convertToAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"convertToShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalManagedAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC4626 \\\"Tokenized Vault Standard\\\", as defined in https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"asset()\":{\"details\":\"Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing. - MUST be an ERC-20 token contract. - MUST NOT revert.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"convertToAssets(uint256)\":{\"details\":\"Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"convertToShares(uint256)\":{\"details\":\"Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"deposit(uint256,address)\":{\"details\":\"Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the deposit execution, and are accounted for during deposit. - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"maxDeposit(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver, through a deposit call. - MUST return a limited value if receiver is subject to some deposit limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited. - MUST NOT revert.\"},\"maxMint(address)\":{\"details\":\"Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call. - MUST return a limited value if receiver is subject to some mint limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted. - MUST NOT revert.\"},\"maxRedeem(address)\":{\"details\":\"Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault, through a redeem call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock. - MUST NOT revert.\"},\"maxWithdraw(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the Vault, through a withdraw call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST NOT revert.\"},\"mint(uint256,address)\":{\"details\":\"Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint execution, and are accounted for during mint. - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"previewDeposit(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called in the same transaction. - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the deposit would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"previewMint(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the same transaction. - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by minting.\"},\"previewRedeem(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the same transaction. - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the redemption would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by redeeming.\"},\"previewWithdraw(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if called in the same transaction. - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though the withdrawal would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"redeem(uint256,address,address)\":{\"details\":\"Burns exactly shares from owner and sends assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the redeem execution, and are accounted for during redeem. - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalAssets()\":{\"details\":\"Returns the total amount of the underlying asset that is \\u201cmanaged\\u201d by Vault. - SHOULD include any compounding that occurs from yield. - MUST be inclusive of any fees that are charged against assets in the Vault. - MUST NOT revert.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"withdraw(uint256,address,address)\":{\"details\":\"Burns shares from owner and sends exactly assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the withdraw execution, and are accounted for during withdraw. - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC4626.sol\":\"IERC4626\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"IERC20":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 standard as defined in the EIP.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"IERC20Metadata":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the optional metadata functions from the ERC20 standard.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":\"IERC20Metadata\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol":{"IERC20Permit":{"abi":[{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't need to send a transaction, and thus is not required to hold Ether at all. ==== Security Considerations There are two important considerations concerning the use of `permit`. The first is that a valid permit signature expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be considered as an intention to spend the allowance in any specific way. The second is that because permits have built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be generally recommended is: ```solidity function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public { try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {} doThing(..., value); } function doThing(..., uint256 value) public { token.safeTransferFrom(msg.sender, address(this), value); ... } ``` Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also {SafeERC20-safeTransferFrom}). Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so contracts should have entry points that don't rely on permit.\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"nonces(address)\":{\"details\":\"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":\"IERC20Permit\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"SafeERC20":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"currentAllowance","type":"uint256"},{"internalType":"uint256","name":"requestedDecrease","type":"uint256"}],"name":"SafeERC20FailedDecreaseAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212202d84903a7d88d39beea6e8c10e7299cd816b0bde2b5e6443ed9adc8d7885d05564736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2D DUP5 SWAP1 GASPRICE PUSH30 0x88D39BEEA6E8C10E7299CD816B0BDE2B5E6443ED9ADC8D7885D05564736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"751:5018:25:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212202d84903a7d88d39beea6e8c10e7299cd816b0bde2b5e6443ed9adc8d7885d05564736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2D DUP5 SWAP1 GASPRICE PUSH30 0x88D39BEEA6E8C10E7299CD816B0BDE2B5E6443ED9ADC8D7885D05564736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"751:5018:25:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentAllowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requestedDecrease\",\"type\":\"uint256\"}],\"name\":\"SafeERC20FailedDecreaseAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers around ERC20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\",\"errors\":{\"SafeERC20FailedDecreaseAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failed `decreaseAllowance` request.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"SafeERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Address.sol":{"Address":{"abi":[{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212207308dc04867882e716a35b4e93fd57711740b1913fb9480b2ee92ca52acf78a664736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH20 0x8DC04867882E716A35B4E93FD57711740B1913F 0xB9 BASEFEE SIGNEXTEND 0x2E 0xE9 0x2C 0xA5 0x2A 0xCF PUSH25 0xA664736F6C634300081B003300000000000000000000000000 ","sourceMap":"195:6066:26:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212207308dc04867882e716a35b4e93fd57711740b1913fb9480b2ee92ca52acf78a664736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH20 0x8DC04867882E716A35B4E93FD57711740B1913F 0xB9 BASEFEE SIGNEXTEND 0x2E 0xE9 0x2C 0xA5 0x2A 0xCF PUSH25 0xA664736F6C634300081B003300000000000000000000000000 ","sourceMap":"195:6066:26:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"SafeCast":{"abi":[{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntDowncast","type":"error"},{"inputs":[{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntToUint","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintToInt","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220c8c1339c0f0f32d1cd42e01b472992f3fdb072f8c07de7950d5d5c048b0f797464736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC8 0xC1 CALLER SWAP13 0xF 0xF ORIGIN 0xD1 0xCD TIMESTAMP 0xE0 SHL SELFBALANCE 0x29 SWAP3 RETURN REVERT 0xB0 PUSH19 0xF8C07DE7950D5D5C048B0F797464736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"764:33927:27:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220c8c1339c0f0f32d1cd42e01b472992f3fdb072f8c07de7950d5d5c048b0f797464736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC8 0xC1 CALLER SWAP13 0xF 0xF ORIGIN 0xD1 0xCD TIMESTAMP 0xE0 SHL SELFBALANCE 0x29 SWAP3 RETURN REVERT 0xB0 PUSH19 0xF8C07DE7950D5D5C048B0F797464736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"764:33927:27:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntToUint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers over Solidity's uintXX/intXX casting operators with added overflow checks. Downcasting from uint256/int256 in Solidity does not revert on overflow. This can easily result in undesired exploitation or bugs, since developers usually assume that overflows raise errors. `SafeCast` restores this intuition by reverting the transaction when such an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.\",\"errors\":{\"SafeCastOverflowedIntDowncast(uint8,int256)\":[{\"details\":\"Value doesn't fit in an int of `bits` size.\"}],\"SafeCastOverflowedIntToUint(int256)\":[{\"details\":\"An int value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":\"SafeCast\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]}},\"version\":1}"}},"contracts/ProtocolFeeControllerMigration.sol":{"ProtocolFeeControllerMigration":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"_vault","type":"address"},{"internalType":"contract IProtocolFeeController","name":"_newFeeController","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyMigrated","type":"error"},{"inputs":[],"name":"InvalidFeeController","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"migrateFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"newFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_contract_IVault_fromMemory":{"entryPoint":753,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":698,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"6101006040908082523461020657818161155b803803809161002182856102ba565b83398101031261020657610034816102f1565b9061004260208092016102f1565b835163217cb6f560e21b81526001600160a01b039390818516908481600481855afa9081156102b0575f9161027b575b50608052855163fbfa77cf60e01b8152838616908581600481855afa90811561027157839188915f91610238575b5016149081159161022a575b5061021b57600492849260c05260a05285519283809263aaabadc560e01b82525afa918215610211575f926101d6575b50501660e05251611255908161030682396080518181816104be01528181610533015261113a015260a05181818161021d015281816102cd0152818161057b015281816105ea01528181610633015281816106a201528181610892015281816109010152818161094a015281816109b901528181610bc201526111a6015260c05181818160940152610a4f015260e05181818161031501528181610376015281816103d301528181610434015281816106eb0152818161074d015281816107ab0152818161080d01528181610aec01528181610b4d01528181610c1001528181610c7201528181610cf801528181610d400152610da20152f35b90809250813d831161020a575b6101ed81836102ba565b8101031261020657518181168103610206575f806100dc565b5f80fd5b503d6101e3565b84513d5f823e3d90fd5b63d6f1cb0560e01b5f5260045ffd5b90508560805116145f6100ac565b925050508581813d831161026a575b61025181836102ba565b81010312610206578661026484926102f1565b5f6100a0565b503d610247565b88513d5f823e3d90fd5b90508481813d83116102a9575b61029281836102ba565b81010312610206576102a3906102f1565b5f610072565b503d610288565b87513d5f823e3d90fd5b601f909101601f19168101906001600160401b038211908210176102dd57604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036102065756fe6080806040526004361015610012575f80fd5b5f905f3560e01c90816351da116d1461115e575080637ea3a964146110f0578063c2ad0f14146100bb5763fbfa77cf1461004a575f80fd5b346100b857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100b857602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b80fd5b5034610e4e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e4e5767ffffffffffffffff600435818111610e4e5736602382011215610e4e5780600401359182116110c3578160051b906040519261012b60208401856111de565b83526024602084019282010190368211610e4e57602401915b818310611096575050507f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c61106e5760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d5f5460ff8116611046577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001175f556040517f851c1bb30000000000000000000000000000000000000000000000000000000081527f8a3c5c690000000000000000000000000000000000000000000000000000000060048201526020816024817f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165afa908115610fd5575f91611014575b50604051907f851c1bb30000000000000000000000000000000000000000000000000000000082527fa93df2a400000000000000000000000000000000000000000000000000000000600483015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610fd5575f92610fe0575b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610e4e576040517f2f2ff15d000000000000000000000000000000000000000000000000000000008152600481018290523060248201525f81604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af18015610fd557610fc0575b5090839173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610a04576040517f2f2ff15d000000000000000000000000000000000000000000000000000000008152600481018390523060248201528381604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af1908115610edd578491610fac575b50506040517f7869ee1800000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610edd578491610f77575b50604051907f55fb76af00000000000000000000000000000000000000000000000000000000825260208260048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610e9b578592610f40575b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610f3c57604051907f8a3c5c69000000000000000000000000000000000000000000000000000000008252600482015284816024818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610e9b578591610f28575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610f2457604051907fa93df2a4000000000000000000000000000000000000000000000000000000008252600482015283816024818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610edd578491610f10575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610a04576040517f36568abe00000000000000000000000000000000000000000000000000000000815260048101919091523060248201528281604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af1908115610a2b578391610efc575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610a13576040517f36568abe00000000000000000000000000000000000000000000000000000000815260048101919091523060248201528181604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af18015610a0857610ee8575b505b8151811015610a36578273ffffffffffffffffffffffffffffffffffffffff60208360051b850101511673ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610a13576040517f71ecc8fb00000000000000000000000000000000000000000000000000000000815281600482015282816024818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610a2b578391610a17575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610a1357604051907f71447ea8000000000000000000000000000000000000000000000000000000008252600482015281816024818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610a08576109f0575b5050600101610851565b6109f9906111ca565b610a0457825f6109e6565b8280fd5b6040513d84823e3d90fd5b5080fd5b610a20906111ca565b610a1357815f610931565b6040513d85823e3d90fd5b828073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016604051907f851c1bb30000000000000000000000000000000000000000000000000000000082527f2d77138900000000000000000000000000000000000000000000000000000000806004840152602083602481855afa928315610edd578493610ea6575b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610e82576040517f2f2ff15d000000000000000000000000000000000000000000000000000000008152600481018490523060248201528481604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af1908115610e9b578591610e87575b5050813b15610e82578391602483926040519485938492835273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660048401525af1908115610a2b578391610e6e575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610e1e576040517f36568abe00000000000000000000000000000000000000000000000000000000815260048101919091523060248201528181604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af18015610a0857610e5a575b506040517fa217fddf00000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610a08578291610e21575b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610e1e576040517f36568abe00000000000000000000000000000000000000000000000000000000815260048101919091523060248201528181604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af18015610a0857610e0a575b507f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d80f35b610e13906111ca565b6100b8578082610de4565b50fd5b9150506020813d602011610e52575b81610e3d602093836111de565b81010312610e4e5781905183610d28565b5f80fd5b3d9150610e30565b610e63906111ca565b6100b8578082610cb4565b610e77906111ca565b610e1e578184610bf7565b505050fd5b610e90906111ca565b610e82578386610b92565b6040513d87823e3d90fd5b935091506020833d602011610ed5575b81610ec3602093836111de565b81010312610e4e578392519185610ad4565b3d9150610eb6565b6040513d86823e3d90fd5b610ef1906111ca565b610a1357815f61084f565b610f05906111ca565b610a1357815f610792565b610f19906111ca565b610a0457825f6106d2565b8380fd5b610f31906111ca565b610f2457835f61061a565b8480fd5b945090506020843d602011610f6f575b81610f5d602093836111de565b81010312610e4e57859351905f610563565b3d9150610f50565b9350506020833d602011610fa4575b81610f93602093836111de565b81010312610e4e578492515f6104ee565b3d9150610f86565b610fb5906111ca565b610a0457825f610479565b610fcc919294506111ca565b5f92905f6103b8565b6040513d5f823e3d90fd5b9091506020813d60201161100c575b81610ffc602093836111de565b81010312610e4e5751905f6102fd565b3d9150610fef565b90506020813d60201161103e575b8161102f602093836111de565b81010312610e4e57515f610262565b3d9150611022565b7fca1c3cbc000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b823573ffffffffffffffffffffffffffffffffffffffff81168103610e4e57815260209283019201610144565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b34610e4e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e4e57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610e4e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e4e5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b67ffffffffffffffff81116110c357604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110c35760405256fea264697066735822122099c1e7ab0bed7c157302cc163e0dc09d0df8a426a97850fcce96c1625fb28e1b64736f6c634300081b0033","opcodes":"PUSH2 0x100 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x206 JUMPI DUP2 DUP2 PUSH2 0x155B DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x21 DUP3 DUP6 PUSH2 0x2BA JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x206 JUMPI PUSH2 0x34 DUP2 PUSH2 0x2F1 JUMP JUMPDEST SWAP1 PUSH2 0x42 PUSH1 0x20 DUP1 SWAP3 ADD PUSH2 0x2F1 JUMP JUMPDEST DUP4 MLOAD PUSH4 0x217CB6F5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 DUP2 DUP6 AND SWAP1 DUP5 DUP2 PUSH1 0x4 DUP2 DUP6 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2B0 JUMPI PUSH0 SWAP2 PUSH2 0x27B JUMPI JUMPDEST POP PUSH1 0x80 MSTORE DUP6 MLOAD PUSH4 0xFBFA77CF PUSH1 0xE0 SHL DUP2 MSTORE DUP4 DUP7 AND SWAP1 DUP6 DUP2 PUSH1 0x4 DUP2 DUP6 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x271 JUMPI DUP4 SWAP2 DUP9 SWAP2 PUSH0 SWAP2 PUSH2 0x238 JUMPI JUMPDEST POP AND EQ SWAP1 DUP2 ISZERO SWAP2 PUSH2 0x22A JUMPI JUMPDEST POP PUSH2 0x21B JUMPI PUSH1 0x4 SWAP3 DUP5 SWAP3 PUSH1 0xC0 MSTORE PUSH1 0xA0 MSTORE DUP6 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH4 0xAAABADC5 PUSH1 0xE0 SHL DUP3 MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x211 JUMPI PUSH0 SWAP3 PUSH2 0x1D6 JUMPI JUMPDEST POP POP AND PUSH1 0xE0 MSTORE MLOAD PUSH2 0x1255 SWAP1 DUP2 PUSH2 0x306 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH2 0x4BE ADD MSTORE DUP2 DUP2 PUSH2 0x533 ADD MSTORE PUSH2 0x113A ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x21D ADD MSTORE DUP2 DUP2 PUSH2 0x2CD ADD MSTORE DUP2 DUP2 PUSH2 0x57B ADD MSTORE DUP2 DUP2 PUSH2 0x5EA ADD MSTORE DUP2 DUP2 PUSH2 0x633 ADD MSTORE DUP2 DUP2 PUSH2 0x6A2 ADD MSTORE DUP2 DUP2 PUSH2 0x892 ADD MSTORE DUP2 DUP2 PUSH2 0x901 ADD MSTORE DUP2 DUP2 PUSH2 0x94A ADD MSTORE DUP2 DUP2 PUSH2 0x9B9 ADD MSTORE DUP2 DUP2 PUSH2 0xBC2 ADD MSTORE PUSH2 0x11A6 ADD MSTORE PUSH1 0xC0 MLOAD DUP2 DUP2 DUP2 PUSH1 0x94 ADD MSTORE PUSH2 0xA4F ADD MSTORE PUSH1 0xE0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x315 ADD MSTORE DUP2 DUP2 PUSH2 0x376 ADD MSTORE DUP2 DUP2 PUSH2 0x3D3 ADD MSTORE DUP2 DUP2 PUSH2 0x434 ADD MSTORE DUP2 DUP2 PUSH2 0x6EB ADD MSTORE DUP2 DUP2 PUSH2 0x74D ADD MSTORE DUP2 DUP2 PUSH2 0x7AB ADD MSTORE DUP2 DUP2 PUSH2 0x80D ADD MSTORE DUP2 DUP2 PUSH2 0xAEC ADD MSTORE DUP2 DUP2 PUSH2 0xB4D ADD MSTORE DUP2 DUP2 PUSH2 0xC10 ADD MSTORE DUP2 DUP2 PUSH2 0xC72 ADD MSTORE DUP2 DUP2 PUSH2 0xCF8 ADD MSTORE DUP2 DUP2 PUSH2 0xD40 ADD MSTORE PUSH2 0xDA2 ADD MSTORE RETURN JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x20A JUMPI JUMPDEST PUSH2 0x1ED DUP2 DUP4 PUSH2 0x2BA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x206 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x206 JUMPI PUSH0 DUP1 PUSH2 0xDC JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x1E3 JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH4 0xD6F1CB05 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP DUP6 PUSH1 0x80 MLOAD AND EQ PUSH0 PUSH2 0xAC JUMP JUMPDEST SWAP3 POP POP POP DUP6 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x26A JUMPI JUMPDEST PUSH2 0x251 DUP2 DUP4 PUSH2 0x2BA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x206 JUMPI DUP7 PUSH2 0x264 DUP5 SWAP3 PUSH2 0x2F1 JUMP JUMPDEST PUSH0 PUSH2 0xA0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x247 JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 POP DUP5 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2A9 JUMPI JUMPDEST PUSH2 0x292 DUP2 DUP4 PUSH2 0x2BA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x206 JUMPI PUSH2 0x2A3 SWAP1 PUSH2 0x2F1 JUMP JUMPDEST PUSH0 PUSH2 0x72 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x288 JUMP JUMPDEST DUP8 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x2DD JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x206 JUMPI JUMP INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP1 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x51DA116D EQ PUSH2 0x115E JUMPI POP DUP1 PUSH4 0x7EA3A964 EQ PUSH2 0x10F0 JUMPI DUP1 PUSH4 0xC2AD0F14 EQ PUSH2 0xBB JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x4A JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xB8 JUMPI DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xB8 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xE4E JUMPI PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xE4E JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0xE4E JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0xE4E JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x10C3 JUMPI DUP2 PUSH1 0x5 SHL SWAP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x12B PUSH1 0x20 DUP5 ADD DUP6 PUSH2 0x11DE JUMP JUMPDEST DUP4 MSTORE PUSH1 0x24 PUSH1 0x20 DUP5 ADD SWAP3 DUP3 ADD ADD SWAP1 CALLDATASIZE DUP3 GT PUSH2 0xE4E JUMPI PUSH1 0x24 ADD SWAP2 JUMPDEST DUP2 DUP4 LT PUSH2 0x1096 JUMPI POP POP POP PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH2 0x106E JUMPI PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH0 SLOAD PUSH1 0xFF DUP2 AND PUSH2 0x1046 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR PUSH0 SSTORE PUSH1 0x40 MLOAD PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH32 0x8A3C5C6900000000000000000000000000000000000000000000000000000000 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xFD5 JUMPI PUSH0 SWAP2 PUSH2 0x1014 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH32 0xA93DF2A400000000000000000000000000000000000000000000000000000000 PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xFD5 JUMPI PUSH0 SWAP3 PUSH2 0xFE0 JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xE4E JUMPI PUSH1 0x40 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL DUP1 ISZERO PUSH2 0xFD5 JUMPI PUSH2 0xFC0 JUMPI JUMPDEST POP SWAP1 DUP4 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xA04 JUMPI PUSH1 0x40 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP4 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xEDD JUMPI DUP5 SWAP2 PUSH2 0xFAC JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x7869EE1800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0x4 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xEDD JUMPI DUP5 SWAP2 PUSH2 0xF77 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 PUSH32 0x55FB76AF00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xE9B JUMPI DUP6 SWAP3 PUSH2 0xF40 JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xF3C JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0x8A3C5C6900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xE9B JUMPI DUP6 SWAP2 PUSH2 0xF28 JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xF24 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xA93DF2A400000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE DUP4 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xEDD JUMPI DUP5 SWAP2 PUSH2 0xF10 JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xA04 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP3 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xA2B JUMPI DUP4 SWAP2 PUSH2 0xEFC JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xA13 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL DUP1 ISZERO PUSH2 0xA08 JUMPI PUSH2 0xEE8 JUMPI JUMPDEST POP JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0xA36 JUMPI DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 PUSH1 0x5 SHL DUP6 ADD ADD MLOAD AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xA13 JUMPI PUSH1 0x40 MLOAD PUSH32 0x71ECC8FB00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 PUSH1 0x4 DUP3 ADD MSTORE DUP3 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xA2B JUMPI DUP4 SWAP2 PUSH2 0xA17 JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xA13 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0x71447EA800000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xA08 JUMPI PUSH2 0x9F0 JUMPI JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x851 JUMP JUMPDEST PUSH2 0x9F9 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xA04 JUMPI DUP3 PUSH0 PUSH2 0x9E6 JUMP JUMPDEST DUP3 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST PUSH2 0xA20 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xA13 JUMPI DUP2 PUSH0 PUSH2 0x931 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP6 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH1 0x40 MLOAD SWAP1 PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH32 0x2D77138900000000000000000000000000000000000000000000000000000000 DUP1 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x20 DUP4 PUSH1 0x24 DUP2 DUP6 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xEDD JUMPI DUP5 SWAP4 PUSH2 0xEA6 JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xE82 JUMPI PUSH1 0x40 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP5 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP5 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xE9B JUMPI DUP6 SWAP2 PUSH2 0xE87 JUMPI JUMPDEST POP POP DUP2 EXTCODESIZE ISZERO PUSH2 0xE82 JUMPI DUP4 SWAP2 PUSH1 0x24 DUP4 SWAP3 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH1 0x4 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xA2B JUMPI DUP4 SWAP2 PUSH2 0xE6E JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xE1E JUMPI PUSH1 0x40 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL DUP1 ISZERO PUSH2 0xA08 JUMPI PUSH2 0xE5A JUMPI JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0xA217FDDF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0x4 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xA08 JUMPI DUP3 SWAP2 PUSH2 0xE21 JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xE1E JUMPI PUSH1 0x40 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL DUP1 ISZERO PUSH2 0xA08 JUMPI PUSH2 0xE0A JUMPI JUMPDEST POP PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP1 RETURN JUMPDEST PUSH2 0xE13 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xB8 JUMPI DUP1 DUP3 PUSH2 0xDE4 JUMP JUMPDEST POP REVERT JUMPDEST SWAP2 POP POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xE52 JUMPI JUMPDEST DUP2 PUSH2 0xE3D PUSH1 0x20 SWAP4 DUP4 PUSH2 0x11DE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xE4E JUMPI DUP2 SWAP1 MLOAD DUP4 PUSH2 0xD28 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xE30 JUMP JUMPDEST PUSH2 0xE63 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xB8 JUMPI DUP1 DUP3 PUSH2 0xCB4 JUMP JUMPDEST PUSH2 0xE77 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xE1E JUMPI DUP2 DUP5 PUSH2 0xBF7 JUMP JUMPDEST POP POP POP REVERT JUMPDEST PUSH2 0xE90 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xE82 JUMPI DUP4 DUP7 PUSH2 0xB92 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP8 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP4 POP SWAP2 POP PUSH1 0x20 DUP4 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xED5 JUMPI JUMPDEST DUP2 PUSH2 0xEC3 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x11DE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xE4E JUMPI DUP4 SWAP3 MLOAD SWAP2 DUP6 PUSH2 0xAD4 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xEB6 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP7 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0xEF1 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xA13 JUMPI DUP2 PUSH0 PUSH2 0x84F JUMP JUMPDEST PUSH2 0xF05 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xA13 JUMPI DUP2 PUSH0 PUSH2 0x792 JUMP JUMPDEST PUSH2 0xF19 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xA04 JUMPI DUP3 PUSH0 PUSH2 0x6D2 JUMP JUMPDEST DUP4 DUP1 REVERT JUMPDEST PUSH2 0xF31 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xF24 JUMPI DUP4 PUSH0 PUSH2 0x61A JUMP JUMPDEST DUP5 DUP1 REVERT JUMPDEST SWAP5 POP SWAP1 POP PUSH1 0x20 DUP5 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xF6F JUMPI JUMPDEST DUP2 PUSH2 0xF5D PUSH1 0x20 SWAP4 DUP4 PUSH2 0x11DE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xE4E JUMPI DUP6 SWAP4 MLOAD SWAP1 PUSH0 PUSH2 0x563 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xF50 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 DUP4 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xFA4 JUMPI JUMPDEST DUP2 PUSH2 0xF93 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x11DE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xE4E JUMPI DUP5 SWAP3 MLOAD PUSH0 PUSH2 0x4EE JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xF86 JUMP JUMPDEST PUSH2 0xFB5 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xA04 JUMPI DUP3 PUSH0 PUSH2 0x479 JUMP JUMPDEST PUSH2 0xFCC SWAP2 SWAP3 SWAP5 POP PUSH2 0x11CA JUMP JUMPDEST PUSH0 SWAP3 SWAP1 PUSH0 PUSH2 0x3B8 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x100C JUMPI JUMPDEST DUP2 PUSH2 0xFFC PUSH1 0x20 SWAP4 DUP4 PUSH2 0x11DE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xE4E JUMPI MLOAD SWAP1 PUSH0 PUSH2 0x2FD JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xFEF JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x103E JUMPI JUMPDEST DUP2 PUSH2 0x102F PUSH1 0x20 SWAP4 DUP4 PUSH2 0x11DE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xE4E JUMPI MLOAD PUSH0 PUSH2 0x262 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1022 JUMP JUMPDEST PUSH32 0xCA1C3CBC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xE4E JUMPI DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x144 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xE4E JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xE4E JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xE4E JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xE4E JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x10C3 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x10C3 JUMPI PUSH1 0x40 MSTORE JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP10 0xC1 0xE7 0xAB SIGNEXTEND 0xED PUSH29 0x157302CC163E0DC09D0DF8A426A97850FCCE96C1625FB28E1B64736F6C PUSH4 0x4300081B STOP CALLER ","sourceMap":"2077:5026:28:-:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;-1:-1:-1;;;3027:33:28;;-1:-1:-1;;;;;2077:5026:28;;;;;;3027:33;2077:5026;3027:33;2077:5026;;3027:33;;;;;;;-1:-1:-1;3027:33:28;;;-1:-1:-1;;3008:52:28;;2077:5026;;-1:-1:-1;;;3193:25:28;;2077:5026;;;;3193:25;2077:5026;3027:33;2077:5026;;3193:25;;;;;;;;;;;-1:-1:-1;3193:25:28;;;-1:-1:-1;2077:5026:28;;3193:35;;;;:76;;;-1:-1:-1;3189:136:28;;;3027:33;3335:14;;;;;3359:36;;2077:5026;;;;;;;;;3445:21;;;;;;;;;-1:-1:-1;3445:21:28;;;-1:-1:-1;2077:5026:28;;;;3406:62;2077:5026;;;;;;;3008:52;2077:5026;;;;;;;;;;;;;;;3359:36;2077:5026;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3335:14;2077:5026;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3445:21;;;;;;;;;;;;;;;;:::i;:::-;;;2077:5026;;;;;;;;;;;;3445:21;;;;2077:5026;-1:-1:-1;2077:5026:28;;3445:21;;;;;;2077:5026;;;-1:-1:-1;2077:5026:28;;;;;3189:136;3292:22;;;-1:-1:-1;3292:22:28;3027:33;-1:-1:-1;3292:22:28;3193:76;2077:5026;;;3008:52;2077:5026;;3232:37;3193:76;;;:25;;;;;;;;;;;;;;;;;;:::i;:::-;;;2077:5026;;;;;;;;;:::i;:::-;3193:25;;;;;;;;;2077:5026;;;-1:-1:-1;2077:5026:28;;;;;3027:33;;;;;;;;;;;;;;;;:::i;:::-;;;2077:5026;;;;;;;:::i;:::-;3027:33;;;;;;;;;2077:5026;;;-1:-1:-1;2077:5026:28;;;;;;;;;;-1:-1:-1;;2077:5026:28;;;;-1:-1:-1;;;;;2077:5026:28;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;2077:5026:28;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{"abi_encode_bytes32_address":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"finalize_allocation":{"entryPoint":4574,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_6997":{"entryPoint":4554,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"8871":[{"length":32,"start":1214},{"length":32,"start":1331},{"length":32,"start":4410}],"8874":[{"length":32,"start":541},{"length":32,"start":717},{"length":32,"start":1403},{"length":32,"start":1514},{"length":32,"start":1587},{"length":32,"start":1698},{"length":32,"start":2194},{"length":32,"start":2305},{"length":32,"start":2378},{"length":32,"start":2489},{"length":32,"start":3010},{"length":32,"start":4518}],"8877":[{"length":32,"start":148},{"length":32,"start":2639}],"8880":[{"length":32,"start":789},{"length":32,"start":886},{"length":32,"start":979},{"length":32,"start":1076},{"length":32,"start":1771},{"length":32,"start":1869},{"length":32,"start":1963},{"length":32,"start":2061},{"length":32,"start":2796},{"length":32,"start":2893},{"length":32,"start":3088},{"length":32,"start":3186},{"length":32,"start":3320},{"length":32,"start":3392},{"length":32,"start":3490}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f905f3560e01c90816351da116d1461115e575080637ea3a964146110f0578063c2ad0f14146100bb5763fbfa77cf1461004a575f80fd5b346100b857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100b857602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b80fd5b5034610e4e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e4e5767ffffffffffffffff600435818111610e4e5736602382011215610e4e5780600401359182116110c3578160051b906040519261012b60208401856111de565b83526024602084019282010190368211610e4e57602401915b818310611096575050507f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c61106e5760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d5f5460ff8116611046577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001175f556040517f851c1bb30000000000000000000000000000000000000000000000000000000081527f8a3c5c690000000000000000000000000000000000000000000000000000000060048201526020816024817f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165afa908115610fd5575f91611014575b50604051907f851c1bb30000000000000000000000000000000000000000000000000000000082527fa93df2a400000000000000000000000000000000000000000000000000000000600483015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610fd5575f92610fe0575b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610e4e576040517f2f2ff15d000000000000000000000000000000000000000000000000000000008152600481018290523060248201525f81604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af18015610fd557610fc0575b5090839173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610a04576040517f2f2ff15d000000000000000000000000000000000000000000000000000000008152600481018390523060248201528381604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af1908115610edd578491610fac575b50506040517f7869ee1800000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610edd578491610f77575b50604051907f55fb76af00000000000000000000000000000000000000000000000000000000825260208260048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610e9b578592610f40575b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610f3c57604051907f8a3c5c69000000000000000000000000000000000000000000000000000000008252600482015284816024818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610e9b578591610f28575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610f2457604051907fa93df2a4000000000000000000000000000000000000000000000000000000008252600482015283816024818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610edd578491610f10575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610a04576040517f36568abe00000000000000000000000000000000000000000000000000000000815260048101919091523060248201528281604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af1908115610a2b578391610efc575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610a13576040517f36568abe00000000000000000000000000000000000000000000000000000000815260048101919091523060248201528181604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af18015610a0857610ee8575b505b8151811015610a36578273ffffffffffffffffffffffffffffffffffffffff60208360051b850101511673ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610a13576040517f71ecc8fb00000000000000000000000000000000000000000000000000000000815281600482015282816024818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610a2b578391610a17575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610a1357604051907f71447ea8000000000000000000000000000000000000000000000000000000008252600482015281816024818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610a08576109f0575b5050600101610851565b6109f9906111ca565b610a0457825f6109e6565b8280fd5b6040513d84823e3d90fd5b5080fd5b610a20906111ca565b610a1357815f610931565b6040513d85823e3d90fd5b828073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016604051907f851c1bb30000000000000000000000000000000000000000000000000000000082527f2d77138900000000000000000000000000000000000000000000000000000000806004840152602083602481855afa928315610edd578493610ea6575b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610e82576040517f2f2ff15d000000000000000000000000000000000000000000000000000000008152600481018490523060248201528481604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af1908115610e9b578591610e87575b5050813b15610e82578391602483926040519485938492835273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660048401525af1908115610a2b578391610e6e575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610e1e576040517f36568abe00000000000000000000000000000000000000000000000000000000815260048101919091523060248201528181604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af18015610a0857610e5a575b506040517fa217fddf00000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610a08578291610e21575b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610e1e576040517f36568abe00000000000000000000000000000000000000000000000000000000815260048101919091523060248201528181604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af18015610a0857610e0a575b507f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d80f35b610e13906111ca565b6100b8578082610de4565b50fd5b9150506020813d602011610e52575b81610e3d602093836111de565b81010312610e4e5781905183610d28565b5f80fd5b3d9150610e30565b610e63906111ca565b6100b8578082610cb4565b610e77906111ca565b610e1e578184610bf7565b505050fd5b610e90906111ca565b610e82578386610b92565b6040513d87823e3d90fd5b935091506020833d602011610ed5575b81610ec3602093836111de565b81010312610e4e578392519185610ad4565b3d9150610eb6565b6040513d86823e3d90fd5b610ef1906111ca565b610a1357815f61084f565b610f05906111ca565b610a1357815f610792565b610f19906111ca565b610a0457825f6106d2565b8380fd5b610f31906111ca565b610f2457835f61061a565b8480fd5b945090506020843d602011610f6f575b81610f5d602093836111de565b81010312610e4e57859351905f610563565b3d9150610f50565b9350506020833d602011610fa4575b81610f93602093836111de565b81010312610e4e578492515f6104ee565b3d9150610f86565b610fb5906111ca565b610a0457825f610479565b610fcc919294506111ca565b5f92905f6103b8565b6040513d5f823e3d90fd5b9091506020813d60201161100c575b81610ffc602093836111de565b81010312610e4e5751905f6102fd565b3d9150610fef565b90506020813d60201161103e575b8161102f602093836111de565b81010312610e4e57515f610262565b3d9150611022565b7fca1c3cbc000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b823573ffffffffffffffffffffffffffffffffffffffff81168103610e4e57815260209283019201610144565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b34610e4e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e4e57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610e4e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e4e5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b67ffffffffffffffff81116110c357604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110c35760405256fea264697066735822122099c1e7ab0bed7c157302cc163e0dc09d0df8a426a97850fcce96c1625fb28e1b64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP1 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x51DA116D EQ PUSH2 0x115E JUMPI POP DUP1 PUSH4 0x7EA3A964 EQ PUSH2 0x10F0 JUMPI DUP1 PUSH4 0xC2AD0F14 EQ PUSH2 0xBB JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x4A JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xB8 JUMPI DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xB8 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xE4E JUMPI PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xE4E JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0xE4E JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0xE4E JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x10C3 JUMPI DUP2 PUSH1 0x5 SHL SWAP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x12B PUSH1 0x20 DUP5 ADD DUP6 PUSH2 0x11DE JUMP JUMPDEST DUP4 MSTORE PUSH1 0x24 PUSH1 0x20 DUP5 ADD SWAP3 DUP3 ADD ADD SWAP1 CALLDATASIZE DUP3 GT PUSH2 0xE4E JUMPI PUSH1 0x24 ADD SWAP2 JUMPDEST DUP2 DUP4 LT PUSH2 0x1096 JUMPI POP POP POP PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH2 0x106E JUMPI PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH0 SLOAD PUSH1 0xFF DUP2 AND PUSH2 0x1046 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR PUSH0 SSTORE PUSH1 0x40 MLOAD PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH32 0x8A3C5C6900000000000000000000000000000000000000000000000000000000 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xFD5 JUMPI PUSH0 SWAP2 PUSH2 0x1014 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH32 0xA93DF2A400000000000000000000000000000000000000000000000000000000 PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xFD5 JUMPI PUSH0 SWAP3 PUSH2 0xFE0 JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xE4E JUMPI PUSH1 0x40 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL DUP1 ISZERO PUSH2 0xFD5 JUMPI PUSH2 0xFC0 JUMPI JUMPDEST POP SWAP1 DUP4 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xA04 JUMPI PUSH1 0x40 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP4 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xEDD JUMPI DUP5 SWAP2 PUSH2 0xFAC JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x7869EE1800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0x4 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xEDD JUMPI DUP5 SWAP2 PUSH2 0xF77 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 PUSH32 0x55FB76AF00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xE9B JUMPI DUP6 SWAP3 PUSH2 0xF40 JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xF3C JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0x8A3C5C6900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xE9B JUMPI DUP6 SWAP2 PUSH2 0xF28 JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xF24 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xA93DF2A400000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE DUP4 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xEDD JUMPI DUP5 SWAP2 PUSH2 0xF10 JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xA04 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP3 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xA2B JUMPI DUP4 SWAP2 PUSH2 0xEFC JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xA13 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL DUP1 ISZERO PUSH2 0xA08 JUMPI PUSH2 0xEE8 JUMPI JUMPDEST POP JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0xA36 JUMPI DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 PUSH1 0x5 SHL DUP6 ADD ADD MLOAD AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xA13 JUMPI PUSH1 0x40 MLOAD PUSH32 0x71ECC8FB00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 PUSH1 0x4 DUP3 ADD MSTORE DUP3 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xA2B JUMPI DUP4 SWAP2 PUSH2 0xA17 JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xA13 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0x71447EA800000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xA08 JUMPI PUSH2 0x9F0 JUMPI JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x851 JUMP JUMPDEST PUSH2 0x9F9 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xA04 JUMPI DUP3 PUSH0 PUSH2 0x9E6 JUMP JUMPDEST DUP3 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST PUSH2 0xA20 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xA13 JUMPI DUP2 PUSH0 PUSH2 0x931 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP6 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH1 0x40 MLOAD SWAP1 PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH32 0x2D77138900000000000000000000000000000000000000000000000000000000 DUP1 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x20 DUP4 PUSH1 0x24 DUP2 DUP6 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xEDD JUMPI DUP5 SWAP4 PUSH2 0xEA6 JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xE82 JUMPI PUSH1 0x40 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP5 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP5 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xE9B JUMPI DUP6 SWAP2 PUSH2 0xE87 JUMPI JUMPDEST POP POP DUP2 EXTCODESIZE ISZERO PUSH2 0xE82 JUMPI DUP4 SWAP2 PUSH1 0x24 DUP4 SWAP3 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH1 0x4 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xA2B JUMPI DUP4 SWAP2 PUSH2 0xE6E JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xE1E JUMPI PUSH1 0x40 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL DUP1 ISZERO PUSH2 0xA08 JUMPI PUSH2 0xE5A JUMPI JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0xA217FDDF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0x4 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xA08 JUMPI DUP3 SWAP2 PUSH2 0xE21 JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xE1E JUMPI PUSH1 0x40 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL DUP1 ISZERO PUSH2 0xA08 JUMPI PUSH2 0xE0A JUMPI JUMPDEST POP PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP1 RETURN JUMPDEST PUSH2 0xE13 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xB8 JUMPI DUP1 DUP3 PUSH2 0xDE4 JUMP JUMPDEST POP REVERT JUMPDEST SWAP2 POP POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xE52 JUMPI JUMPDEST DUP2 PUSH2 0xE3D PUSH1 0x20 SWAP4 DUP4 PUSH2 0x11DE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xE4E JUMPI DUP2 SWAP1 MLOAD DUP4 PUSH2 0xD28 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xE30 JUMP JUMPDEST PUSH2 0xE63 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xB8 JUMPI DUP1 DUP3 PUSH2 0xCB4 JUMP JUMPDEST PUSH2 0xE77 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xE1E JUMPI DUP2 DUP5 PUSH2 0xBF7 JUMP JUMPDEST POP POP POP REVERT JUMPDEST PUSH2 0xE90 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xE82 JUMPI DUP4 DUP7 PUSH2 0xB92 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP8 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP4 POP SWAP2 POP PUSH1 0x20 DUP4 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xED5 JUMPI JUMPDEST DUP2 PUSH2 0xEC3 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x11DE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xE4E JUMPI DUP4 SWAP3 MLOAD SWAP2 DUP6 PUSH2 0xAD4 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xEB6 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP7 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0xEF1 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xA13 JUMPI DUP2 PUSH0 PUSH2 0x84F JUMP JUMPDEST PUSH2 0xF05 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xA13 JUMPI DUP2 PUSH0 PUSH2 0x792 JUMP JUMPDEST PUSH2 0xF19 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xA04 JUMPI DUP3 PUSH0 PUSH2 0x6D2 JUMP JUMPDEST DUP4 DUP1 REVERT JUMPDEST PUSH2 0xF31 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xF24 JUMPI DUP4 PUSH0 PUSH2 0x61A JUMP JUMPDEST DUP5 DUP1 REVERT JUMPDEST SWAP5 POP SWAP1 POP PUSH1 0x20 DUP5 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xF6F JUMPI JUMPDEST DUP2 PUSH2 0xF5D PUSH1 0x20 SWAP4 DUP4 PUSH2 0x11DE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xE4E JUMPI DUP6 SWAP4 MLOAD SWAP1 PUSH0 PUSH2 0x563 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xF50 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 DUP4 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xFA4 JUMPI JUMPDEST DUP2 PUSH2 0xF93 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x11DE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xE4E JUMPI DUP5 SWAP3 MLOAD PUSH0 PUSH2 0x4EE JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xF86 JUMP JUMPDEST PUSH2 0xFB5 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xA04 JUMPI DUP3 PUSH0 PUSH2 0x479 JUMP JUMPDEST PUSH2 0xFCC SWAP2 SWAP3 SWAP5 POP PUSH2 0x11CA JUMP JUMPDEST PUSH0 SWAP3 SWAP1 PUSH0 PUSH2 0x3B8 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x100C JUMPI JUMPDEST DUP2 PUSH2 0xFFC PUSH1 0x20 SWAP4 DUP4 PUSH2 0x11DE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xE4E JUMPI MLOAD SWAP1 PUSH0 PUSH2 0x2FD JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xFEF JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x103E JUMPI JUMPDEST DUP2 PUSH2 0x102F PUSH1 0x20 SWAP4 DUP4 PUSH2 0x11DE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xE4E JUMPI MLOAD PUSH0 PUSH2 0x262 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1022 JUMP JUMPDEST PUSH32 0xCA1C3CBC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xE4E JUMPI DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x144 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xE4E JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xE4E JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xE4E JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xE4E JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x10C3 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x10C3 JUMPI PUSH1 0x40 MSTORE JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP10 0xC1 0xE7 0xAB SIGNEXTEND 0xED PUSH29 0x157302CC163E0DC09D0DF8A426A97850FCCE96C1625FB28E1B64736F6C PUSH4 0x4300081B STOP CALLER ","sourceMap":"2077:5026:28:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2276:29;2077:5026;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;2806:53:17;;;551:66:16;2806:53:17;1316:93:16;;1529:4;551:66;3051:52:17;2077:5026:28;;;;;4007:65;;2077:5026;;1529:4:16;2077:5026:28;;;;;;5667:144;;5735:66;2077:5026;5667:144;;2077:5026;;;;;5691:16;2077:5026;;5667:144;;;;;;;2077:5026;5667:144;;;2077:5026;;;;5845:145;2077:5026;5845:145;;5913:67;2077:5026;5845:145;;2077:5026;;5691:16;2077:5026;5691:16;2077:5026;5691:16;2077:5026;5845:145;;;;;;;2077:5026;5845:145;;;2077:5026;6001:11;2077:5026;6001:11;2077:5026;6001:49;;;;2077:5026;;;6001:49;;2077:5026;6001:49;;2077:5026;;;6044:4;2077:5026;;;;-1:-1:-1;2077:5026:28;;;-1:-1:-1;6001:11:28;2077:5026;;6001:49;;;;;;;;2077:5026;6001:11;;;;2077:5026;6001:11;2077:5026;6060:50;;;;2077:5026;;;6060:50;;2077:5026;6060:50;;2077:5026;;;6044:4;2077:5026;;;;6044:4;2077:5026;;;6044:4;6001:11;2077:5026;;6060:50;;;;;;;;;;;2077:5026;;;;;;6202:53;;2077:5026;6202:16;2077:5026;6202:16;2077:5026;6202:16;2077:5026;6202:53;;;;;;;;;;;2077:5026;;;;6300:54;2077:5026;6300:54;;2077:5026;6202:16;2077:5026;6202:16;2077:5026;6202:16;2077:5026;6300:54;;;;;;;;;;;2077:5026;5691:16;2077:5026;5691:16;2077:5026;6365:76;;;;2077:5026;;6365:76;5735:66;6365:76;;2077:5026;6365:76;;2077:5026;5691:16;;2077:5026;5691:16;;2077:5026;5691:16;2077:5026;6365:76;;;;;;;;;;;2077:5026;5691:16;;2077:5026;5691:16;2077:5026;6451:78;;;;2077:5026;;6451:78;5913:67;6451:78;;2077:5026;6451:78;;2077:5026;5691:16;;2077:5026;5691:16;;2077:5026;5691:16;2077:5026;6451:78;;;;;;;;;;;2077:5026;6001:11;;2077:5026;6001:11;2077:5026;6571:52;;;;2077:5026;;;6571:52;;2077:5026;6571:52;;2077:5026;;;;6044:4;2077:5026;;;;;;;;;6001:11;2077:5026;;6571:52;;;;;;;;;;;2077:5026;6001:11;;2077:5026;6001:11;2077:5026;6633:53;;;;2077:5026;;;6633:53;;2077:5026;6633:53;;2077:5026;;;;6044:4;2077:5026;;;;;;;;;6001:11;2077:5026;;6633:53;;;;;;;;2077:5026;4974:13;5007:3;2077:5026;;4989:16;;;;;2077:5026;;;;;;;;;;;;5691:16;2077:5026;5162:54;;;;2077:5026;;;5162:54;;;2077:5026;5162:54;;2077:5026;5691:16;;2077:5026;5691:16;;2077:5026;5691:16;2077:5026;5162:54;;;;;;;;;;;5007:3;5691:16;;2077:5026;5691:16;2077:5026;5230:55;;;;2077:5026;;5230:55;2077:5026;5230:55;;2077:5026;5230:55;;2077:5026;5691:16;;2077:5026;5691:16;;2077:5026;5691:16;2077:5026;5230:55;;;;;;;;5007:3;;;1529:4:16;2077:5026:28;4974:13;;5230:55;;;;:::i;:::-;2077:5026;;5230:55;;;;2077:5026;;;;5230:55;2077:5026;;;;;;;;;5230:55;2077:5026;;;5162:54;;;;:::i;:::-;2077:5026;;5162:54;;;;;2077:5026;;;;;;;;;4989:16;;6806:5;2077:5026;6806:5;2077:5026;;;6782:112;2077:5026;6782:112;;6839:45;6782:112;2077:5026;6782:112;;2077:5026;;6782:112;2077:5026;6782:112;;;;;;;;;;;;;4969:327;6001:11;2077:5026;6001:11;2077:5026;6905:58;;;;2077:5026;;;6905:58;;2077:5026;6905:58;;2077:5026;;;6044:4;2077:5026;;;;6044:4;2077:5026;;;6044:4;6001:11;2077:5026;;6905:58;;;;;;;;;;;4969:327;6974:48;;;;;;;2077:5026;;;;;;;6974:48;;;;;;;2077:5026;5691:16;2077:5026;;6974:48;;2077:5026;6974:48;;;;;;;;;;;4969:327;6001:11;;2077:5026;6001:11;2077:5026;7033:61;;;;2077:5026;;;7033:61;;2077:5026;7033:61;;2077:5026;;;;6044:4;2077:5026;;;;;;;;;6001:11;2077:5026;;7033:61;;;;;;;;4969:327;2077:5026;;;;5451:32;;2077:5026;6001:11;2077:5026;6001:11;2077:5026;6001:11;2077:5026;5451:32;;;;;;;;;;;4969:327;6001:11;2077:5026;6001:11;2077:5026;5426:73;;;;2077:5026;;;5426:73;;2077:5026;5426:73;;2077:5026;;;;6044:4;2077:5026;;;;;;;;;6001:11;2077:5026;;5426:73;;;;;;;;4969:327;3051:52:17;551:66:16;3051:52:17;2077:5026:28;;5426:73;;;;:::i;:::-;2077:5026;;5426:73;;;;;2077:5026;;5451:32;;;;2077:5026;5451:32;;2077:5026;5451:32;;;;;;2077:5026;5451:32;;;:::i;:::-;;;2077:5026;;;;;;;5451:32;;;2077:5026;;;;5451:32;;;-1:-1:-1;5451:32:28;;7033:61;;;;:::i;:::-;2077:5026;;7033:61;;;;6974:48;;;;:::i;:::-;2077:5026;;6974:48;;;;;2077:5026;;;;6905:58;;;;:::i;:::-;2077:5026;;6905:58;;;;;2077:5026;;;;;;;;;6782:112;;;;;2077:5026;6782:112;;2077:5026;6782:112;;;;;;2077:5026;6782:112;;;:::i;:::-;;;2077:5026;;;;;;;6782:112;;;;;;;-1:-1:-1;6782:112:28;;;2077:5026;;;;;;;;;6633:53;;;;:::i;:::-;2077:5026;;6633:53;;;;6571:52;;;;:::i;:::-;2077:5026;;6571:52;;;;6451:78;;;;:::i;:::-;2077:5026;;6451:78;;;;;2077:5026;;;6365:76;;;;:::i;:::-;2077:5026;;6365:76;;;;;2077:5026;;;6300:54;;;;;2077:5026;6300:54;;2077:5026;6300:54;;;;;;2077:5026;6300:54;;;:::i;:::-;;;2077:5026;;;;;;;6300:54;;;;;;;-1:-1:-1;6300:54:28;;6202:53;;;;2077:5026;6202:53;;2077:5026;6202:53;;;;;;2077:5026;6202:53;;;:::i;:::-;;;2077:5026;;;;;;;6202:53;;;;;;-1:-1:-1;6202:53:28;;6060:50;;;;:::i;:::-;2077:5026;;6060:50;;;;6001:49;;;;;;;:::i;:::-;2077:5026;6001:49;;;;;;2077:5026;;;;;;;;;5845:145;;;;2077:5026;5845:145;;2077:5026;5845:145;;;;;;2077:5026;5845:145;;;:::i;:::-;;;2077:5026;;;;;5845:145;;;;;;;-1:-1:-1;5845:145:28;;5667:144;;;2077:5026;5667:144;;2077:5026;5667:144;;;;;;2077:5026;5667:144;;;:::i;:::-;;;2077:5026;;;;;5667:144;;;;;;-1:-1:-1;5667:144:28;;4007:65;4044:17;2077:5026;4044:17;2077:5026;;4044:17;1316:93:16;1368:30;2077:5026:28;1368:30:16;2077:5026:28;;1368:30:16;2077:5026:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2151:56;2077:5026;;;;;;;;;;;;;;;;2213:56;2077:5026;2213:56;2077:5026;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o"},"methodIdentifiers":{"migrateFeeController(address[])":"c2ad0f14","newFeeController()":"51da116d","oldFeeController()":"7ea3a964","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"_vault\",\"type\":\"address\"},{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"_newFeeController\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyMigrated\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidFeeController\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"migrateFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"newFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oldFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These events enable tracking pool protocol fees under all circumstances (in particular, when protocol fees are initially turned off). It also adds some infrastructure that makes future migrations easier, and removes redundant poolCreator storage. This simple migration assumes: 1) There are no pools with pool creators 2) There are no pools with protocol fee exemptions or overrides 3) Migrating the complete list of pools can be done in a single transaction. These simplifications enable simply calling `migrateFeeController` once with the complete list of pools. After the migration, the Vault will point to the new fee controller, and any collection thereafter will go there. If there are any residual fee amounts in the old fee controller (i.e., that were collected but not withdrawn), governance will still need to withdraw from the old fee controller. Otherwise, no further interaction with the old controller is necessary. Associated with `20250221-protocol-fee-controller-migration`.\",\"errors\":{\"InvalidFeeController()\":[{\"details\":\"ProtocolFeeController contracts return the address of the Vault they were deployed with. Ensure that both the old and new controllers reference the same vault.\"}]},\"kind\":\"dev\",\"methods\":{\"migrateFeeController(address[])\":{\"details\":\"Call this with the full set of pools to perform the migration. After this runs, the Vault will point to the new fee controller, which will have a copy of all the relevant state from the old controller. Also, all permissions will be revoked, and the contract will be disabled.\",\"params\":{\"pools\":\"The complete set of pools to migrate\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyMigrated()\":[{\"notice\":\"Migration can only be performed once.\"}],\"InvalidFeeController()\":[{\"notice\":\"Attempt to deploy this contract with invalid parameters.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}]},\"kind\":\"user\",\"methods\":{\"migrateFeeController(address[])\":{\"notice\":\"Permissionless migration function.\"}},\"notice\":\"Migrate from the original ProtocolFeeController to one with extra events.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ProtocolFeeControllerMigration.sol\":\"ProtocolFeeControllerMigration\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol\":{\"keccak256\":\"0x434eda908f66d99d967c2c2b233337227c331cd79655ec5b0ddcc76db7a20606\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b0b6c4bc095113dfbaeb9d9a6f9602f0f1a79b075c82d5ccccff7a1b67af1ce8\",\"dweb:/ipfs/QmaePfy8V5U9UFqkDtdTvPjJLmo1XEorPrC1fMVB35n86Y\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xe0e5193402394ef505f87b206d8e64e1ea8b604feeb2ea8bbd054050778c162d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c962b5d782a8ec4341741dd49daf071e23560548ad95ed00e1531379cfcf0a2e\",\"dweb:/ipfs/QmbPn63SLEZp719KdAtPa4urbhQwqYzfewWfNRtw3nyy8c\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\":{\"keccak256\":\"0xe45521ca4ed88ce5d25262f764132ad923c9207db89a51d5e76e960c3ee7e9f1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7f1bb43ba9746184f4a0ac05ab2b1b62bc56da755346e518c8f427478aad2a\",\"dweb:/ipfs/QmYKgjtZ7Bu8MqQPQf1YBPb8FXfWaGYtL2fMQcZR3iBod1\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x67518bf3b6bd96f5897c56867fc57f3c31bb9b97abf93cf960de145a5eb82414\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://563857d8606cbd4f727c75f09901d09ec9faa73778fe85e2af851982cdb9b6e8\",\"dweb:/ipfs/QmU7x1gWCPGPAcxA8Qq3z8hscrGRFwsc28qad4RMihZ8qB\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"contracts/ProtocolFeeControllerMigration.sol\":{\"keccak256\":\"0xee813da8870157b65605312b549db970f60953eebaf01191c6c21b02292152b9\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://25752ef15a6940fa106538f0be3ecab62ae8b436319769556e400493417ccc74\",\"dweb:/ipfs/QmczThRsBQihuxveGf12KdtdeoQcRMaJaXapN3raD5S8vD\"]}},\"version\":1}"}},"contracts/ProtocolFeeControllerMigrationV2.sol":{"ProtocolFeeControllerMigrationV2":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"_vault","type":"address"},{"internalType":"contract IProtocolFeeController","name":"_newFeeController","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyMigrated","type":"error"},{"inputs":[],"name":"InvalidFeeController","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"WrongMigrationVersion","type":"error"},{"inputs":[],"name":"finalizeMigration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"","type":"address[]"}],"name":"migrateFeeController","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"migratePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"newFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_contract_IVault_fromMemory":{"entryPoint":868,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":813,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"61014060408181523461020d5780826113d68038038091610020828561032d565b83398101031261020d5761003382610364565b906100416020809401610364565b815163217cb6f560e21b81526001600160a01b039491600491858716919084818581865afa908115610323575f916102ee575b50608052845163fbfa77cf60e01b81528188169085818681855afa9081156102e45784918a915f916102ab575b5016149081159161029d575b5061028f57829184918760c05260a05285519283809263aaabadc560e01b82525afa908115610285579086915f9161024b575b501660e052610100943086526101209485526024838260a0511686519283809263851c1bb360e01b8252630874327f60e01b888301525afa938415610241575f94610211575b50508260015560e0511691823b1561020d575f926044849286519586938492632f2ff15d60e01b8452878401523060248401525af18015610203576101d8575b5050519061105d9283610379843960805183818161041a0152610d61015260a05183818161018901528181610297015281816109e30152610daf015260c05183818160b201526108f1015260e051838181610365015261087101525182610f20015251818181610cc10152610fae0152f35b6001600160401b0382116101f0575081525f5f610166565b604190634e487b7160e01b5f525260245ffd5b83513d5f823e3d90fd5b5f80fd5b9080929450813d831161023a575b610229818361032d565b8101031261020d5751915f80610126565b503d61021f565b85513d5f823e3d90fd5b809250848092503d831161027e575b610264818361032d565b8101031261020d5751858116810361020d5785905f6100e0565b503d61025a565b84513d5f823e3d90fd5b8263d6f1cb0560e01b5f525ffd5b90508760805116145f6100ad565b925050508581813d83116102dd575b6102c4818361032d565b8101031261020d57886102d78592610364565b5f6100a1565b503d6102ba565b87513d5f823e3d90fd5b90508481813d831161031c575b610305818361032d565b8101031261020d5761031690610364565b5f610074565b503d6102fb565b86513d5f823e3d90fd5b601f909101601f19168101906001600160401b0382119082101761035057604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b038216820361020d5756fe6080604081815260049182361015610015575f80fd5b5f925f358060e01c92836351da116d14610d85575082637ea3a96414610d35578263851c1bb314610ce55782638d928af814610c95578263aaabadc514610c5c578263b78b60871461078757508163b8350e2714610112578163c2ad0f14146100da575063fbfa77cf14610087575f80fd5b346100d657816003193601126100d6576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5080fd5b833461010f576100e936610e55565b507fc7b08f63000000000000000000000000000000000000000000000000000000008152fd5b80fd5b8383346100d65761012236610e55565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0091825c61075f576001946001845d845460ff811661073857908160ff88949360081c1615610253575b5085969373ffffffffffffffffffffffffffffffffffffffff90817f000000000000000000000000000000000000000000000000000000000000000016945b6101b7575b8780885d80f35b80979695975189101561024a578160208a60051b8301015116853b15610246578451907f0874327f000000000000000000000000000000000000000000000000000000008252848201528781602481838a5af1801561023c57610224575b508780999896979801986101ab565b61022e8891610dd3565b6102385789610215565b8680fd5b85513d8a823e3d90fd5b8780fd5b859697506101b0565b610100919293507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1617855573ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000169083517f851c1bb300000000000000000000000000000000000000000000000000000000928382527f8a3c5c690000000000000000000000000000000000000000000000000000000080868401526020908184602481865afa93841561072e578b946106ff575b5087519586527fa93df2a4000000000000000000000000000000000000000000000000000000009081888801528287602481875afa968715610618578c976106d0575b50857f00000000000000000000000000000000000000000000000000000000000000001695863b156106225789517f2f2ff15d00000000000000000000000000000000000000000000000000000000808252818b018881523060208201529091908f90829081906040010381838d5af180156106c457908f916106b0575b5050873b156106ac578a519081528981018981523060208201528e90829081906040010381838c5af1801561065a57908e91610698575b50507f0000000000000000000000000000000000000000000000000000000000000000168951907f7869ee1800000000000000000000000000000000000000000000000000000000825284828b81845afa91821561065a578a918f91879294610666575b508c51928380927f55fb76af0000000000000000000000000000000000000000000000000000000082525afa94851561065a578e95610626575b5050843b15610622578951918252888201528b8160248183885af1801561061857908c91610604575b5050823b15610600579060248b92838a51958694859384528b8401525af180156105e2579089916105ec575b5050813b156102465784517f36568abe0000000000000000000000000000000000000000000000000000000080825285820192835230602084015291899082908190604001038183875af180156105e2579089916105ce575b5050813b15610246578451908152838101928352306020840152918791839182908490829060400103925af180156105c4578793929187916105a5575b5061016c565b6105b29192939450610dd3565b6105c057908591858861059f565b8480fd5b83513d88823e3d90fd5b6105d790610dd3565b61024657878a610562565b86513d8b823e3d90fd5b6105f590610dd3565b61024657878a610509565b8a80fd5b61060d90610dd3565b610600578a8d6104dd565b89513d8e823e3d90fd5b8c80fd5b9080929550813d8311610653575b61063e8183610e14565b8101031261064f5751928e806104b4565b5f80fd5b503d610634565b8e8c51903d90823e3d90fd5b9250925081813d8311610691575b61067e8183610e14565b8101031261064f57848a9151925f61047a565b503d610674565b6106a190610dd3565b610622578c8f610416565b8d80fd5b6106b990610dd3565b6106ac578d5f6103df565b8f8d51903d90823e3d90fd5b9096508281813d83116106f8575b6106e88183610e14565b8101031261064f5751958d610361565b503d6106de565b9093508181813d8311610727575b6107178183610e14565b8101031261064f5751928c61031e565b503d61070d565b88513d8d823e3d90fd5b50847fca1c3cbc000000000000000000000000000000000000000000000000000000008152fd5b5050507f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b8385913461064f575f60031936011261064f577fffffffff000000000000000000000000000000000000000000000000000000006107c59116610ef5565b9073ffffffffffffffffffffffffffffffffffffffff806107e4610f6b565b169282519384917f9be2a8840000000000000000000000000000000000000000000000000000000083528783015233602483015230604483015281606460209687935afa908115610c52575f91610c1c575b5015610bf5575f5460ff8116610bce577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0060019116175f55807f0000000000000000000000000000000000000000000000000000000000000000169460015491863b1561064f5783517f36568abe00000000000000000000000000000000000000000000000000000000808252838201948552306020860152935f90829081906040010381838c5af18015610bc457610bb1575b50958686977f0000000000000000000000000000000000000000000000000000000000000000168551917f851c1bb30000000000000000000000000000000000000000000000000000000083527f2d771389000000000000000000000000000000000000000000000000000000009081868501528884602481865afa938415610ba7578a94610b75575b50843b15610b535787517f2f2ff15d0000000000000000000000000000000000000000000000000000000081528681018581523060208201528b90829081906040010381838a5af18015610b6b57908b91610b57575b5050823b15610b535760248a92838a51958694859384527f0000000000000000000000000000000000000000000000000000000000000000168a8401525af18015610b4957908891610b35575b5050813b1561023857845184815283810191825230602083015290879082908190604001038183865af18015610b1757908791610b21575b505083517fa217fddf00000000000000000000000000000000000000000000000000000000815285818481855afa958615610b17578796610ae4575b5050803b15610ae057835192835290820193845230602085015290928491849182908490829060400103925af1908115610ad75750610ac75750f35b610ad090610dd3565b61010f5780f35b513d84823e3d90fd5b8580fd5b819750809296503d8311610b10575b610afd8183610e14565b8101031261064f57859451938780610a8b565b503d610af3565b85513d89823e3d90fd5b610b2a90610dd3565b610ae0578588610a4f565b610b3e90610dd3565b610238578689610a17565b86513d8a823e3d90fd5b8980fd5b610b6090610dd3565b610b5357898c6109ca565b89513d8d823e3d90fd5b995092508789813d8111610ba0575b610b8e8183610e14565b8101031261064f57899851928b610974565b503d610b84565b88513d8c823e3d90fd5b610bbc919650610dd3565b5f94876108ea565b85513d5f823e3d90fd5b857fca1c3cbc000000000000000000000000000000000000000000000000000000005f525ffd5b847f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b90508381813d8311610c4b575b610c338183610e14565b8101031261064f5751801515810361064f5786610836565b503d610c29565b83513d5f823e3d90fd5b833461064f575f60031936011261064f5760209073ffffffffffffffffffffffffffffffffffffffff610c8d610f6b565b915191168152f35b833461064f575f60031936011261064f576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b83823461064f57602060031936011261064f5735907fffffffff000000000000000000000000000000000000000000000000000000008216820361064f57610d2e602092610ef5565b9051908152f35b833461064f575f60031936011261064f576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461064f575f60031936011261064f5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b67ffffffffffffffff8111610de757604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610de757604052565b60208060031983011261064f5767ffffffffffffffff9160043583811161064f578160238201121561064f578060040135938411610de7578360051b9060405194610ea36020840187610e14565b85526024602086019282010192831161064f57602401905b828210610ec9575050505090565b813573ffffffffffffffffffffffffffffffffffffffff8116810361064f578152908301908301610ebb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff821117610de75760405251902090565b6040517faaabadc500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa91821561101c575f92610fe357505090565b9091506020813d602011611014575b81610fff60209383610e14565b8101031261064f5751908116810361064f5790565b3d9150610ff2565b6040513d5f823e3d90fdfea2646970667358221220bf4d4e6761f6e4a45e5c73d20c02e4f0df7e905b725a964dfba9c48e6950e01c64736f6c634300081b0033","opcodes":"PUSH2 0x140 PUSH1 0x40 DUP2 DUP2 MSTORE CALLVALUE PUSH2 0x20D JUMPI DUP1 DUP3 PUSH2 0x13D6 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x20 DUP3 DUP6 PUSH2 0x32D JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x20D JUMPI PUSH2 0x33 DUP3 PUSH2 0x364 JUMP JUMPDEST SWAP1 PUSH2 0x41 PUSH1 0x20 DUP1 SWAP5 ADD PUSH2 0x364 JUMP JUMPDEST DUP2 MLOAD PUSH4 0x217CB6F5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP2 PUSH1 0x4 SWAP2 DUP6 DUP8 AND SWAP2 SWAP1 DUP5 DUP2 DUP6 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x323 JUMPI PUSH0 SWAP2 PUSH2 0x2EE JUMPI JUMPDEST POP PUSH1 0x80 MSTORE DUP5 MLOAD PUSH4 0xFBFA77CF PUSH1 0xE0 SHL DUP2 MSTORE DUP2 DUP9 AND SWAP1 DUP6 DUP2 DUP7 DUP2 DUP6 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E4 JUMPI DUP5 SWAP2 DUP11 SWAP2 PUSH0 SWAP2 PUSH2 0x2AB JUMPI JUMPDEST POP AND EQ SWAP1 DUP2 ISZERO SWAP2 PUSH2 0x29D JUMPI JUMPDEST POP PUSH2 0x28F JUMPI DUP3 SWAP2 DUP5 SWAP2 DUP8 PUSH1 0xC0 MSTORE PUSH1 0xA0 MSTORE DUP6 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH4 0xAAABADC5 PUSH1 0xE0 SHL DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x285 JUMPI SWAP1 DUP7 SWAP2 PUSH0 SWAP2 PUSH2 0x24B JUMPI JUMPDEST POP AND PUSH1 0xE0 MSTORE PUSH2 0x100 SWAP5 ADDRESS DUP7 MSTORE PUSH2 0x120 SWAP5 DUP6 MSTORE PUSH1 0x24 DUP4 DUP3 PUSH1 0xA0 MLOAD AND DUP7 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH4 0x851C1BB3 PUSH1 0xE0 SHL DUP3 MSTORE PUSH4 0x874327F PUSH1 0xE0 SHL DUP9 DUP4 ADD MSTORE GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x241 JUMPI PUSH0 SWAP5 PUSH2 0x211 JUMPI JUMPDEST POP POP DUP3 PUSH1 0x1 SSTORE PUSH1 0xE0 MLOAD AND SWAP2 DUP3 EXTCODESIZE ISZERO PUSH2 0x20D JUMPI PUSH0 SWAP3 PUSH1 0x44 DUP5 SWAP3 DUP7 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH4 0x2F2FF15D PUSH1 0xE0 SHL DUP5 MSTORE DUP8 DUP5 ADD MSTORE ADDRESS PUSH1 0x24 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x203 JUMPI PUSH2 0x1D8 JUMPI JUMPDEST POP POP MLOAD SWAP1 PUSH2 0x105D SWAP3 DUP4 PUSH2 0x379 DUP5 CODECOPY PUSH1 0x80 MLOAD DUP4 DUP2 DUP2 PUSH2 0x41A ADD MSTORE PUSH2 0xD61 ADD MSTORE PUSH1 0xA0 MLOAD DUP4 DUP2 DUP2 PUSH2 0x189 ADD MSTORE DUP2 DUP2 PUSH2 0x297 ADD MSTORE DUP2 DUP2 PUSH2 0x9E3 ADD MSTORE PUSH2 0xDAF ADD MSTORE PUSH1 0xC0 MLOAD DUP4 DUP2 DUP2 PUSH1 0xB2 ADD MSTORE PUSH2 0x8F1 ADD MSTORE PUSH1 0xE0 MLOAD DUP4 DUP2 DUP2 PUSH2 0x365 ADD MSTORE PUSH2 0x871 ADD MSTORE MLOAD DUP3 PUSH2 0xF20 ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0xCC1 ADD MSTORE PUSH2 0xFAE ADD MSTORE RETURN JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x1F0 JUMPI POP DUP2 MSTORE PUSH0 PUSH0 PUSH2 0x166 JUMP JUMPDEST PUSH1 0x41 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST SWAP1 DUP1 SWAP3 SWAP5 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x23A JUMPI JUMPDEST PUSH2 0x229 DUP2 DUP4 PUSH2 0x32D JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x20D JUMPI MLOAD SWAP2 PUSH0 DUP1 PUSH2 0x126 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x21F JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP1 SWAP3 POP DUP5 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x27E JUMPI JUMPDEST PUSH2 0x264 DUP2 DUP4 PUSH2 0x32D JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x20D JUMPI MLOAD DUP6 DUP2 AND DUP2 SUB PUSH2 0x20D JUMPI DUP6 SWAP1 PUSH0 PUSH2 0xE0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x25A JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 PUSH4 0xD6F1CB05 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP DUP8 PUSH1 0x80 MLOAD AND EQ PUSH0 PUSH2 0xAD JUMP JUMPDEST SWAP3 POP POP POP DUP6 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2DD JUMPI JUMPDEST PUSH2 0x2C4 DUP2 DUP4 PUSH2 0x32D JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x20D JUMPI DUP9 PUSH2 0x2D7 DUP6 SWAP3 PUSH2 0x364 JUMP JUMPDEST PUSH0 PUSH2 0xA1 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2BA JUMP JUMPDEST DUP8 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 POP DUP5 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x31C JUMPI JUMPDEST PUSH2 0x305 DUP2 DUP4 PUSH2 0x32D JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x20D JUMPI PUSH2 0x316 SWAP1 PUSH2 0x364 JUMP JUMPDEST PUSH0 PUSH2 0x74 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2FB JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x350 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x20D JUMPI JUMP INVALID PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP3 PUSH0 CALLDATALOAD DUP1 PUSH1 0xE0 SHR SWAP3 DUP4 PUSH4 0x51DA116D EQ PUSH2 0xD85 JUMPI POP DUP3 PUSH4 0x7EA3A964 EQ PUSH2 0xD35 JUMPI DUP3 PUSH4 0x851C1BB3 EQ PUSH2 0xCE5 JUMPI DUP3 PUSH4 0x8D928AF8 EQ PUSH2 0xC95 JUMPI DUP3 PUSH4 0xAAABADC5 EQ PUSH2 0xC5C JUMPI DUP3 PUSH4 0xB78B6087 EQ PUSH2 0x787 JUMPI POP DUP2 PUSH4 0xB8350E27 EQ PUSH2 0x112 JUMPI DUP2 PUSH4 0xC2AD0F14 EQ PUSH2 0xDA JUMPI POP PUSH4 0xFBFA77CF EQ PUSH2 0x87 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xD6 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD6 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP DUP1 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x10F JUMPI PUSH2 0xE9 CALLDATASIZE PUSH2 0xE55 JUMP JUMPDEST POP PUSH32 0xC7B08F6300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST DUP1 REVERT JUMPDEST DUP4 DUP4 CALLVALUE PUSH2 0xD6 JUMPI PUSH2 0x122 CALLDATASIZE PUSH2 0xE55 JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SWAP2 DUP3 TLOAD PUSH2 0x75F JUMPI PUSH1 0x1 SWAP5 PUSH1 0x1 DUP5 TSTORE DUP5 SLOAD PUSH1 0xFF DUP2 AND PUSH2 0x738 JUMPI SWAP1 DUP2 PUSH1 0xFF DUP9 SWAP5 SWAP4 PUSH1 0x8 SHR AND ISZERO PUSH2 0x253 JUMPI JUMPDEST POP DUP6 SWAP7 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 PUSH32 0x0 AND SWAP5 JUMPDEST PUSH2 0x1B7 JUMPI JUMPDEST DUP8 DUP1 DUP9 TSTORE DUP1 RETURN JUMPDEST DUP1 SWAP8 SWAP7 SWAP6 SWAP8 MLOAD DUP10 LT ISZERO PUSH2 0x24A JUMPI DUP2 PUSH1 0x20 DUP11 PUSH1 0x5 SHL DUP4 ADD ADD MLOAD AND DUP6 EXTCODESIZE ISZERO PUSH2 0x246 JUMPI DUP5 MLOAD SWAP1 PUSH32 0x874327F00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP5 DUP3 ADD MSTORE DUP8 DUP2 PUSH1 0x24 DUP2 DUP4 DUP11 GAS CALL DUP1 ISZERO PUSH2 0x23C JUMPI PUSH2 0x224 JUMPI JUMPDEST POP DUP8 DUP1 SWAP10 SWAP9 SWAP7 SWAP8 SWAP9 ADD SWAP9 PUSH2 0x1AB JUMP JUMPDEST PUSH2 0x22E DUP9 SWAP2 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x238 JUMPI DUP10 PUSH2 0x215 JUMP JUMPDEST DUP7 DUP1 REVERT JUMPDEST DUP6 MLOAD RETURNDATASIZE DUP11 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP8 DUP1 REVERT JUMPDEST DUP6 SWAP7 SWAP8 POP PUSH2 0x1B0 JUMP JUMPDEST PUSH2 0x100 SWAP2 SWAP3 SWAP4 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF AND OR DUP6 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP1 DUP4 MLOAD PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 SWAP3 DUP4 DUP3 MSTORE PUSH32 0x8A3C5C6900000000000000000000000000000000000000000000000000000000 DUP1 DUP7 DUP5 ADD MSTORE PUSH1 0x20 SWAP1 DUP2 DUP5 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x72E JUMPI DUP12 SWAP5 PUSH2 0x6FF JUMPI JUMPDEST POP DUP8 MLOAD SWAP6 DUP7 MSTORE PUSH32 0xA93DF2A400000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 DUP9 DUP9 ADD MSTORE DUP3 DUP8 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0x618 JUMPI DUP13 SWAP8 PUSH2 0x6D0 JUMPI JUMPDEST POP DUP6 PUSH32 0x0 AND SWAP6 DUP7 EXTCODESIZE ISZERO PUSH2 0x622 JUMPI DUP10 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE DUP2 DUP12 ADD DUP9 DUP2 MSTORE ADDRESS PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 SWAP1 DUP16 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP14 GAS CALL DUP1 ISZERO PUSH2 0x6C4 JUMPI SWAP1 DUP16 SWAP2 PUSH2 0x6B0 JUMPI JUMPDEST POP POP DUP8 EXTCODESIZE ISZERO PUSH2 0x6AC JUMPI DUP11 MLOAD SWAP1 DUP2 MSTORE DUP10 DUP2 ADD DUP10 DUP2 MSTORE ADDRESS PUSH1 0x20 DUP3 ADD MSTORE DUP15 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP13 GAS CALL DUP1 ISZERO PUSH2 0x65A JUMPI SWAP1 DUP15 SWAP2 PUSH2 0x698 JUMPI JUMPDEST POP POP PUSH32 0x0 AND DUP10 MLOAD SWAP1 PUSH32 0x7869EE1800000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP5 DUP3 DUP12 DUP2 DUP5 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x65A JUMPI DUP11 SWAP2 DUP16 SWAP2 DUP8 SWAP3 SWAP5 PUSH2 0x666 JUMPI JUMPDEST POP DUP13 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0x55FB76AF00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x65A JUMPI DUP15 SWAP6 PUSH2 0x626 JUMPI JUMPDEST POP POP DUP5 EXTCODESIZE ISZERO PUSH2 0x622 JUMPI DUP10 MLOAD SWAP2 DUP3 MSTORE DUP9 DUP3 ADD MSTORE DUP12 DUP2 PUSH1 0x24 DUP2 DUP4 DUP9 GAS CALL DUP1 ISZERO PUSH2 0x618 JUMPI SWAP1 DUP13 SWAP2 PUSH2 0x604 JUMPI JUMPDEST POP POP DUP3 EXTCODESIZE ISZERO PUSH2 0x600 JUMPI SWAP1 PUSH1 0x24 DUP12 SWAP3 DUP4 DUP11 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 DUP5 MSTORE DUP12 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x5E2 JUMPI SWAP1 DUP10 SWAP2 PUSH2 0x5EC JUMPI JUMPDEST POP POP DUP2 EXTCODESIZE ISZERO PUSH2 0x246 JUMPI DUP5 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE DUP6 DUP3 ADD SWAP3 DUP4 MSTORE ADDRESS PUSH1 0x20 DUP5 ADD MSTORE SWAP2 DUP10 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP8 GAS CALL DUP1 ISZERO PUSH2 0x5E2 JUMPI SWAP1 DUP10 SWAP2 PUSH2 0x5CE JUMPI JUMPDEST POP POP DUP2 EXTCODESIZE ISZERO PUSH2 0x246 JUMPI DUP5 MLOAD SWAP1 DUP2 MSTORE DUP4 DUP2 ADD SWAP3 DUP4 MSTORE ADDRESS PUSH1 0x20 DUP5 ADD MSTORE SWAP2 DUP8 SWAP2 DUP4 SWAP2 DUP3 SWAP1 DUP5 SWAP1 DUP3 SWAP1 PUSH1 0x40 ADD SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x5C4 JUMPI DUP8 SWAP4 SWAP3 SWAP2 DUP8 SWAP2 PUSH2 0x5A5 JUMPI JUMPDEST POP PUSH2 0x16C JUMP JUMPDEST PUSH2 0x5B2 SWAP2 SWAP3 SWAP4 SWAP5 POP PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x5C0 JUMPI SWAP1 DUP6 SWAP2 DUP6 DUP9 PUSH2 0x59F JUMP JUMPDEST DUP5 DUP1 REVERT JUMPDEST DUP4 MLOAD RETURNDATASIZE DUP9 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x5D7 SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x246 JUMPI DUP8 DUP11 PUSH2 0x562 JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE DUP12 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x5F5 SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x246 JUMPI DUP8 DUP11 PUSH2 0x509 JUMP JUMPDEST DUP11 DUP1 REVERT JUMPDEST PUSH2 0x60D SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x600 JUMPI DUP11 DUP14 PUSH2 0x4DD JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE DUP15 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP13 DUP1 REVERT JUMPDEST SWAP1 DUP1 SWAP3 SWAP6 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x653 JUMPI JUMPDEST PUSH2 0x63E DUP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI MLOAD SWAP3 DUP15 DUP1 PUSH2 0x4B4 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x634 JUMP JUMPDEST DUP15 DUP13 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP3 POP SWAP3 POP DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x691 JUMPI JUMPDEST PUSH2 0x67E DUP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI DUP5 DUP11 SWAP2 MLOAD SWAP3 PUSH0 PUSH2 0x47A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x674 JUMP JUMPDEST PUSH2 0x6A1 SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x622 JUMPI DUP13 DUP16 PUSH2 0x416 JUMP JUMPDEST DUP14 DUP1 REVERT JUMPDEST PUSH2 0x6B9 SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x6AC JUMPI DUP14 PUSH0 PUSH2 0x3DF JUMP JUMPDEST DUP16 DUP14 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP7 POP DUP3 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x6F8 JUMPI JUMPDEST PUSH2 0x6E8 DUP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI MLOAD SWAP6 DUP14 PUSH2 0x361 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x6DE JUMP JUMPDEST SWAP1 SWAP4 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x727 JUMPI JUMPDEST PUSH2 0x717 DUP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI MLOAD SWAP3 DUP13 PUSH2 0x31E JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x70D JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE DUP14 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP5 PUSH32 0xCA1C3CBC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP POP POP PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST DUP4 DUP6 SWAP2 CALLVALUE PUSH2 0x64F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x64F JUMPI PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x7C5 SWAP2 AND PUSH2 0xEF5 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH2 0x7E4 PUSH2 0xF6B JUMP JUMPDEST AND SWAP3 DUP3 MLOAD SWAP4 DUP5 SWAP2 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP8 DUP4 ADD MSTORE CALLER PUSH1 0x24 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE DUP2 PUSH1 0x64 PUSH1 0x20 SWAP7 DUP8 SWAP4 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xC52 JUMPI PUSH0 SWAP2 PUSH2 0xC1C JUMPI JUMPDEST POP ISZERO PUSH2 0xBF5 JUMPI PUSH0 SLOAD PUSH1 0xFF DUP2 AND PUSH2 0xBCE JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x1 SWAP2 AND OR PUSH0 SSTORE DUP1 PUSH32 0x0 AND SWAP5 PUSH1 0x1 SLOAD SWAP2 DUP7 EXTCODESIZE ISZERO PUSH2 0x64F JUMPI DUP4 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE DUP4 DUP3 ADD SWAP5 DUP6 MSTORE ADDRESS PUSH1 0x20 DUP7 ADD MSTORE SWAP4 PUSH0 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP13 GAS CALL DUP1 ISZERO PUSH2 0xBC4 JUMPI PUSH2 0xBB1 JUMPI JUMPDEST POP SWAP6 DUP7 DUP7 SWAP8 PUSH32 0x0 AND DUP6 MLOAD SWAP2 PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH32 0x2D77138900000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 DUP7 DUP6 ADD MSTORE DUP9 DUP5 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0xBA7 JUMPI DUP11 SWAP5 PUSH2 0xB75 JUMPI JUMPDEST POP DUP5 EXTCODESIZE ISZERO PUSH2 0xB53 JUMPI DUP8 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP7 DUP2 ADD DUP6 DUP2 MSTORE ADDRESS PUSH1 0x20 DUP3 ADD MSTORE DUP12 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP11 GAS CALL DUP1 ISZERO PUSH2 0xB6B JUMPI SWAP1 DUP12 SWAP2 PUSH2 0xB57 JUMPI JUMPDEST POP POP DUP3 EXTCODESIZE ISZERO PUSH2 0xB53 JUMPI PUSH1 0x24 DUP11 SWAP3 DUP4 DUP11 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 DUP5 MSTORE PUSH32 0x0 AND DUP11 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0xB49 JUMPI SWAP1 DUP9 SWAP2 PUSH2 0xB35 JUMPI JUMPDEST POP POP DUP2 EXTCODESIZE ISZERO PUSH2 0x238 JUMPI DUP5 MLOAD DUP5 DUP2 MSTORE DUP4 DUP2 ADD SWAP2 DUP3 MSTORE ADDRESS PUSH1 0x20 DUP4 ADD MSTORE SWAP1 DUP8 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP7 GAS CALL DUP1 ISZERO PUSH2 0xB17 JUMPI SWAP1 DUP8 SWAP2 PUSH2 0xB21 JUMPI JUMPDEST POP POP DUP4 MLOAD PUSH32 0xA217FDDF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP6 DUP2 DUP5 DUP2 DUP6 GAS STATICCALL SWAP6 DUP7 ISZERO PUSH2 0xB17 JUMPI DUP8 SWAP7 PUSH2 0xAE4 JUMPI JUMPDEST POP POP DUP1 EXTCODESIZE ISZERO PUSH2 0xAE0 JUMPI DUP4 MLOAD SWAP3 DUP4 MSTORE SWAP1 DUP3 ADD SWAP4 DUP5 MSTORE ADDRESS PUSH1 0x20 DUP6 ADD MSTORE SWAP1 SWAP3 DUP5 SWAP2 DUP5 SWAP2 DUP3 SWAP1 DUP5 SWAP1 DUP3 SWAP1 PUSH1 0x40 ADD SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xAD7 JUMPI POP PUSH2 0xAC7 JUMPI POP RETURN JUMPDEST PUSH2 0xAD0 SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x10F JUMPI DUP1 RETURN JUMPDEST MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP2 SWAP8 POP DUP1 SWAP3 SWAP7 POP RETURNDATASIZE DUP4 GT PUSH2 0xB10 JUMPI JUMPDEST PUSH2 0xAFD DUP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI DUP6 SWAP5 MLOAD SWAP4 DUP8 DUP1 PUSH2 0xA8B JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xAF3 JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE DUP10 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0xB2A SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0xAE0 JUMPI DUP6 DUP9 PUSH2 0xA4F JUMP JUMPDEST PUSH2 0xB3E SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x238 JUMPI DUP7 DUP10 PUSH2 0xA17 JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE DUP11 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP10 DUP1 REVERT JUMPDEST PUSH2 0xB60 SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0xB53 JUMPI DUP10 DUP13 PUSH2 0x9CA JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE DUP14 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP10 POP SWAP3 POP DUP8 DUP10 DUP2 RETURNDATASIZE DUP2 GT PUSH2 0xBA0 JUMPI JUMPDEST PUSH2 0xB8E DUP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI DUP10 SWAP9 MLOAD SWAP3 DUP12 PUSH2 0x974 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xB84 JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE DUP13 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0xBBC SWAP2 SWAP7 POP PUSH2 0xDD3 JUMP JUMPDEST PUSH0 SWAP5 DUP8 PUSH2 0x8EA JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 PUSH32 0xCA1C3CBC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP5 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP DUP4 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0xC4B JUMPI JUMPDEST PUSH2 0xC33 DUP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x64F JUMPI DUP7 PUSH2 0x836 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xC29 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x64F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x64F JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xC8D PUSH2 0xF6B JUMP JUMPDEST SWAP2 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x64F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x64F JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x64F JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x64F JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x64F JUMPI PUSH2 0xD2E PUSH1 0x20 SWAP3 PUSH2 0xEF5 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x64F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x64F JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x64F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x64F JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xDE7 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xDE7 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x64F JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x4 CALLDATALOAD DUP4 DUP2 GT PUSH2 0x64F JUMPI DUP2 PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x64F JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP4 DUP5 GT PUSH2 0xDE7 JUMPI DUP4 PUSH1 0x5 SHL SWAP1 PUSH1 0x40 MLOAD SWAP5 PUSH2 0xEA3 PUSH1 0x20 DUP5 ADD DUP8 PUSH2 0xE14 JUMP JUMPDEST DUP6 MSTORE PUSH1 0x24 PUSH1 0x20 DUP7 ADD SWAP3 DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x64F JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xEC9 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x64F JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xEBB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xDE7 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x101C JUMPI PUSH0 SWAP3 PUSH2 0xFE3 JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1014 JUMPI JUMPDEST DUP2 PUSH2 0xFFF PUSH1 0x20 SWAP4 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI MLOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x64F JUMPI SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xFF2 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBF 0x4D 0x4E PUSH8 0x61F6E4A45E5C73D2 0xC MUL 0xE4 CREATE 0xDF PUSH31 0x905B725A964DFBA9C48E6950E01C64736F6C634300081B0033000000000000 ","sourceMap":"2216:3190:29:-:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;-1:-1:-1;;;3027:33:28;;-1:-1:-1;;;;;2216:3190:29;;3027:33:28;;2216:3190:29;;;;;;;3027:33:28;2216:3190:29;;3027:33:28;;;;;;;-1:-1:-1;3027:33:28;;;-1:-1:-1;;3008:52:28;;2216:3190:29;;-1:-1:-1;;;3193:25:28;;2216:3190:29;;;;3193:25:28;2216:3190:29;3193:25:28;2216:3190:29;;3193:25:28;;;;;;;;;;;-1:-1:-1;3193:25:28;;;-1:-1:-1;2216:3190:29;;3193:35:28;;;;:76;;;-1:-1:-1;3189:136:28;;;3335:14;;;;;;;3359:36;;2216:3190:29;;;;;;;;;3445:21:28;;;;;;;;;;;;-1:-1:-1;3445:21:28;;;-1:-1:-1;2216:3190:29;;;3406:62:28;1347:46:13;978:4:19;;1347:46:13;;998:14:19;;;;2216:3190:29;;;3359:36:28;2216:3190:29;;;;;;;;;;;2903:120;;2971:42;;;2903:120;;;2216:3190;2903:120;;;;;;;-1:-1:-1;2903:120:29;;;-1:-1:-1;2216:3190:29;;;2886:137;2216:3190;;;;3090:52;;;;;;-1:-1:-1;2216:3190:29;;;;;;;;;;;;;;3090:52;;;;;2216:3190;978:4:19;2216:3190:29;;;;3090:52;;;;;;;;-1:-1:-1;2216:3190:29;;;;;;;;;;3008:52:28;2216:3190:29;;;;;;;;;;3359:36:28;2216:3190:29;;;;;;;;;;;;;;;;;;;;3335:14:28;2216:3190:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3090:52;-1:-1:-1;;;;;2216:3190:29;;;;;;;-1:-1:-1;3090:52:29;;;2216:3190;;;;;;-1:-1:-1;2216:3190:29;;;-1:-1:-1;2216:3190:29;3090:52;2216:3190;;;-1:-1:-1;2216:3190:29;;;;;3090:52;-1:-1:-1;2216:3190:29;;2903:120;;;;;;;;;;;;;;;;;:::i;:::-;;;2216:3190;;;;;2903:120;;;;;;;;;;;2216:3190;;;-1:-1:-1;2216:3190:29;;;;;3445:21:28;;;;;;;;;;;;;;;;;;:::i;:::-;;;2216:3190:29;;;;;;;;;;;;3445:21:28;;;;;;;;;;;2216:3190:29;;;-1:-1:-1;2216:3190:29;;;;;3189:136:28;3292:22;;;;-1:-1:-1;3292:22:28;-1:-1:-1;3292:22:28;3193:76;2216:3190:29;;;3008:52:28;2216:3190:29;;3232:37:28;3193:76;;;:25;;;;;;;;;;;;;;;;;;:::i;:::-;;;2216:3190:29;;;;;;;;;:::i;:::-;3193:25:28;;;;;;;;;2216:3190:29;;;-1:-1:-1;2216:3190:29;;;;;3027:33:28;;;;;;;;;;;;;;;;:::i;:::-;;;2216:3190:29;;;;;;;:::i;:::-;3027:33:28;;;;;;;;;2216:3190:29;;;-1:-1:-1;2216:3190:29;;;;;;;;;;-1:-1:-1;;2216:3190:29;;;;-1:-1:-1;;;;;2216:3190:29;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;2216:3190:29;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{"abi_decode_array_address_dyn":{"entryPoint":3669,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_bytes32_address":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"finalize_allocation":{"entryPoint":3604,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_8599":{"entryPoint":3539,"id":null,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":3829,"id":2480,"parameterSlots":1,"returnSlots":1},"fun_getAuthorizer":{"entryPoint":3947,"id":6146,"parameterSlots":0,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"2420":[{"length":32,"start":3872}],"6097":[{"length":32,"start":3265},{"length":32,"start":4014}],"8871":[{"length":32,"start":1050},{"length":32,"start":3425}],"8874":[{"length":32,"start":393},{"length":32,"start":663},{"length":32,"start":2531},{"length":32,"start":3503}],"8877":[{"length":32,"start":178},{"length":32,"start":2289}],"8880":[{"length":32,"start":869},{"length":32,"start":2161}]},"linkReferences":{},"object":"6080604081815260049182361015610015575f80fd5b5f925f358060e01c92836351da116d14610d85575082637ea3a96414610d35578263851c1bb314610ce55782638d928af814610c95578263aaabadc514610c5c578263b78b60871461078757508163b8350e2714610112578163c2ad0f14146100da575063fbfa77cf14610087575f80fd5b346100d657816003193601126100d6576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5080fd5b833461010f576100e936610e55565b507fc7b08f63000000000000000000000000000000000000000000000000000000008152fd5b80fd5b8383346100d65761012236610e55565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0091825c61075f576001946001845d845460ff811661073857908160ff88949360081c1615610253575b5085969373ffffffffffffffffffffffffffffffffffffffff90817f000000000000000000000000000000000000000000000000000000000000000016945b6101b7575b8780885d80f35b80979695975189101561024a578160208a60051b8301015116853b15610246578451907f0874327f000000000000000000000000000000000000000000000000000000008252848201528781602481838a5af1801561023c57610224575b508780999896979801986101ab565b61022e8891610dd3565b6102385789610215565b8680fd5b85513d8a823e3d90fd5b8780fd5b859697506101b0565b610100919293507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1617855573ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000169083517f851c1bb300000000000000000000000000000000000000000000000000000000928382527f8a3c5c690000000000000000000000000000000000000000000000000000000080868401526020908184602481865afa93841561072e578b946106ff575b5087519586527fa93df2a4000000000000000000000000000000000000000000000000000000009081888801528287602481875afa968715610618578c976106d0575b50857f00000000000000000000000000000000000000000000000000000000000000001695863b156106225789517f2f2ff15d00000000000000000000000000000000000000000000000000000000808252818b018881523060208201529091908f90829081906040010381838d5af180156106c457908f916106b0575b5050873b156106ac578a519081528981018981523060208201528e90829081906040010381838c5af1801561065a57908e91610698575b50507f0000000000000000000000000000000000000000000000000000000000000000168951907f7869ee1800000000000000000000000000000000000000000000000000000000825284828b81845afa91821561065a578a918f91879294610666575b508c51928380927f55fb76af0000000000000000000000000000000000000000000000000000000082525afa94851561065a578e95610626575b5050843b15610622578951918252888201528b8160248183885af1801561061857908c91610604575b5050823b15610600579060248b92838a51958694859384528b8401525af180156105e2579089916105ec575b5050813b156102465784517f36568abe0000000000000000000000000000000000000000000000000000000080825285820192835230602084015291899082908190604001038183875af180156105e2579089916105ce575b5050813b15610246578451908152838101928352306020840152918791839182908490829060400103925af180156105c4578793929187916105a5575b5061016c565b6105b29192939450610dd3565b6105c057908591858861059f565b8480fd5b83513d88823e3d90fd5b6105d790610dd3565b61024657878a610562565b86513d8b823e3d90fd5b6105f590610dd3565b61024657878a610509565b8a80fd5b61060d90610dd3565b610600578a8d6104dd565b89513d8e823e3d90fd5b8c80fd5b9080929550813d8311610653575b61063e8183610e14565b8101031261064f5751928e806104b4565b5f80fd5b503d610634565b8e8c51903d90823e3d90fd5b9250925081813d8311610691575b61067e8183610e14565b8101031261064f57848a9151925f61047a565b503d610674565b6106a190610dd3565b610622578c8f610416565b8d80fd5b6106b990610dd3565b6106ac578d5f6103df565b8f8d51903d90823e3d90fd5b9096508281813d83116106f8575b6106e88183610e14565b8101031261064f5751958d610361565b503d6106de565b9093508181813d8311610727575b6107178183610e14565b8101031261064f5751928c61031e565b503d61070d565b88513d8d823e3d90fd5b50847fca1c3cbc000000000000000000000000000000000000000000000000000000008152fd5b5050507f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b8385913461064f575f60031936011261064f577fffffffff000000000000000000000000000000000000000000000000000000006107c59116610ef5565b9073ffffffffffffffffffffffffffffffffffffffff806107e4610f6b565b169282519384917f9be2a8840000000000000000000000000000000000000000000000000000000083528783015233602483015230604483015281606460209687935afa908115610c52575f91610c1c575b5015610bf5575f5460ff8116610bce577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0060019116175f55807f0000000000000000000000000000000000000000000000000000000000000000169460015491863b1561064f5783517f36568abe00000000000000000000000000000000000000000000000000000000808252838201948552306020860152935f90829081906040010381838c5af18015610bc457610bb1575b50958686977f0000000000000000000000000000000000000000000000000000000000000000168551917f851c1bb30000000000000000000000000000000000000000000000000000000083527f2d771389000000000000000000000000000000000000000000000000000000009081868501528884602481865afa938415610ba7578a94610b75575b50843b15610b535787517f2f2ff15d0000000000000000000000000000000000000000000000000000000081528681018581523060208201528b90829081906040010381838a5af18015610b6b57908b91610b57575b5050823b15610b535760248a92838a51958694859384527f0000000000000000000000000000000000000000000000000000000000000000168a8401525af18015610b4957908891610b35575b5050813b1561023857845184815283810191825230602083015290879082908190604001038183865af18015610b1757908791610b21575b505083517fa217fddf00000000000000000000000000000000000000000000000000000000815285818481855afa958615610b17578796610ae4575b5050803b15610ae057835192835290820193845230602085015290928491849182908490829060400103925af1908115610ad75750610ac75750f35b610ad090610dd3565b61010f5780f35b513d84823e3d90fd5b8580fd5b819750809296503d8311610b10575b610afd8183610e14565b8101031261064f57859451938780610a8b565b503d610af3565b85513d89823e3d90fd5b610b2a90610dd3565b610ae0578588610a4f565b610b3e90610dd3565b610238578689610a17565b86513d8a823e3d90fd5b8980fd5b610b6090610dd3565b610b5357898c6109ca565b89513d8d823e3d90fd5b995092508789813d8111610ba0575b610b8e8183610e14565b8101031261064f57899851928b610974565b503d610b84565b88513d8c823e3d90fd5b610bbc919650610dd3565b5f94876108ea565b85513d5f823e3d90fd5b857fca1c3cbc000000000000000000000000000000000000000000000000000000005f525ffd5b847f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b90508381813d8311610c4b575b610c338183610e14565b8101031261064f5751801515810361064f5786610836565b503d610c29565b83513d5f823e3d90fd5b833461064f575f60031936011261064f5760209073ffffffffffffffffffffffffffffffffffffffff610c8d610f6b565b915191168152f35b833461064f575f60031936011261064f576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b83823461064f57602060031936011261064f5735907fffffffff000000000000000000000000000000000000000000000000000000008216820361064f57610d2e602092610ef5565b9051908152f35b833461064f575f60031936011261064f576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461064f575f60031936011261064f5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b67ffffffffffffffff8111610de757604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610de757604052565b60208060031983011261064f5767ffffffffffffffff9160043583811161064f578160238201121561064f578060040135938411610de7578360051b9060405194610ea36020840187610e14565b85526024602086019282010192831161064f57602401905b828210610ec9575050505090565b813573ffffffffffffffffffffffffffffffffffffffff8116810361064f578152908301908301610ebb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff821117610de75760405251902090565b6040517faaabadc500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa91821561101c575f92610fe357505090565b9091506020813d602011611014575b81610fff60209383610e14565b8101031261064f5751908116810361064f5790565b3d9150610ff2565b6040513d5f823e3d90fdfea2646970667358221220bf4d4e6761f6e4a45e5c73d20c02e4f0df7e905b725a964dfba9c48e6950e01c64736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP3 PUSH0 CALLDATALOAD DUP1 PUSH1 0xE0 SHR SWAP3 DUP4 PUSH4 0x51DA116D EQ PUSH2 0xD85 JUMPI POP DUP3 PUSH4 0x7EA3A964 EQ PUSH2 0xD35 JUMPI DUP3 PUSH4 0x851C1BB3 EQ PUSH2 0xCE5 JUMPI DUP3 PUSH4 0x8D928AF8 EQ PUSH2 0xC95 JUMPI DUP3 PUSH4 0xAAABADC5 EQ PUSH2 0xC5C JUMPI DUP3 PUSH4 0xB78B6087 EQ PUSH2 0x787 JUMPI POP DUP2 PUSH4 0xB8350E27 EQ PUSH2 0x112 JUMPI DUP2 PUSH4 0xC2AD0F14 EQ PUSH2 0xDA JUMPI POP PUSH4 0xFBFA77CF EQ PUSH2 0x87 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xD6 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD6 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP DUP1 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x10F JUMPI PUSH2 0xE9 CALLDATASIZE PUSH2 0xE55 JUMP JUMPDEST POP PUSH32 0xC7B08F6300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST DUP1 REVERT JUMPDEST DUP4 DUP4 CALLVALUE PUSH2 0xD6 JUMPI PUSH2 0x122 CALLDATASIZE PUSH2 0xE55 JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SWAP2 DUP3 TLOAD PUSH2 0x75F JUMPI PUSH1 0x1 SWAP5 PUSH1 0x1 DUP5 TSTORE DUP5 SLOAD PUSH1 0xFF DUP2 AND PUSH2 0x738 JUMPI SWAP1 DUP2 PUSH1 0xFF DUP9 SWAP5 SWAP4 PUSH1 0x8 SHR AND ISZERO PUSH2 0x253 JUMPI JUMPDEST POP DUP6 SWAP7 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 PUSH32 0x0 AND SWAP5 JUMPDEST PUSH2 0x1B7 JUMPI JUMPDEST DUP8 DUP1 DUP9 TSTORE DUP1 RETURN JUMPDEST DUP1 SWAP8 SWAP7 SWAP6 SWAP8 MLOAD DUP10 LT ISZERO PUSH2 0x24A JUMPI DUP2 PUSH1 0x20 DUP11 PUSH1 0x5 SHL DUP4 ADD ADD MLOAD AND DUP6 EXTCODESIZE ISZERO PUSH2 0x246 JUMPI DUP5 MLOAD SWAP1 PUSH32 0x874327F00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP5 DUP3 ADD MSTORE DUP8 DUP2 PUSH1 0x24 DUP2 DUP4 DUP11 GAS CALL DUP1 ISZERO PUSH2 0x23C JUMPI PUSH2 0x224 JUMPI JUMPDEST POP DUP8 DUP1 SWAP10 SWAP9 SWAP7 SWAP8 SWAP9 ADD SWAP9 PUSH2 0x1AB JUMP JUMPDEST PUSH2 0x22E DUP9 SWAP2 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x238 JUMPI DUP10 PUSH2 0x215 JUMP JUMPDEST DUP7 DUP1 REVERT JUMPDEST DUP6 MLOAD RETURNDATASIZE DUP11 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP8 DUP1 REVERT JUMPDEST DUP6 SWAP7 SWAP8 POP PUSH2 0x1B0 JUMP JUMPDEST PUSH2 0x100 SWAP2 SWAP3 SWAP4 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF AND OR DUP6 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP1 DUP4 MLOAD PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 SWAP3 DUP4 DUP3 MSTORE PUSH32 0x8A3C5C6900000000000000000000000000000000000000000000000000000000 DUP1 DUP7 DUP5 ADD MSTORE PUSH1 0x20 SWAP1 DUP2 DUP5 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x72E JUMPI DUP12 SWAP5 PUSH2 0x6FF JUMPI JUMPDEST POP DUP8 MLOAD SWAP6 DUP7 MSTORE PUSH32 0xA93DF2A400000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 DUP9 DUP9 ADD MSTORE DUP3 DUP8 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0x618 JUMPI DUP13 SWAP8 PUSH2 0x6D0 JUMPI JUMPDEST POP DUP6 PUSH32 0x0 AND SWAP6 DUP7 EXTCODESIZE ISZERO PUSH2 0x622 JUMPI DUP10 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE DUP2 DUP12 ADD DUP9 DUP2 MSTORE ADDRESS PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 SWAP1 DUP16 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP14 GAS CALL DUP1 ISZERO PUSH2 0x6C4 JUMPI SWAP1 DUP16 SWAP2 PUSH2 0x6B0 JUMPI JUMPDEST POP POP DUP8 EXTCODESIZE ISZERO PUSH2 0x6AC JUMPI DUP11 MLOAD SWAP1 DUP2 MSTORE DUP10 DUP2 ADD DUP10 DUP2 MSTORE ADDRESS PUSH1 0x20 DUP3 ADD MSTORE DUP15 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP13 GAS CALL DUP1 ISZERO PUSH2 0x65A JUMPI SWAP1 DUP15 SWAP2 PUSH2 0x698 JUMPI JUMPDEST POP POP PUSH32 0x0 AND DUP10 MLOAD SWAP1 PUSH32 0x7869EE1800000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP5 DUP3 DUP12 DUP2 DUP5 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x65A JUMPI DUP11 SWAP2 DUP16 SWAP2 DUP8 SWAP3 SWAP5 PUSH2 0x666 JUMPI JUMPDEST POP DUP13 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0x55FB76AF00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x65A JUMPI DUP15 SWAP6 PUSH2 0x626 JUMPI JUMPDEST POP POP DUP5 EXTCODESIZE ISZERO PUSH2 0x622 JUMPI DUP10 MLOAD SWAP2 DUP3 MSTORE DUP9 DUP3 ADD MSTORE DUP12 DUP2 PUSH1 0x24 DUP2 DUP4 DUP9 GAS CALL DUP1 ISZERO PUSH2 0x618 JUMPI SWAP1 DUP13 SWAP2 PUSH2 0x604 JUMPI JUMPDEST POP POP DUP3 EXTCODESIZE ISZERO PUSH2 0x600 JUMPI SWAP1 PUSH1 0x24 DUP12 SWAP3 DUP4 DUP11 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 DUP5 MSTORE DUP12 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x5E2 JUMPI SWAP1 DUP10 SWAP2 PUSH2 0x5EC JUMPI JUMPDEST POP POP DUP2 EXTCODESIZE ISZERO PUSH2 0x246 JUMPI DUP5 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE DUP6 DUP3 ADD SWAP3 DUP4 MSTORE ADDRESS PUSH1 0x20 DUP5 ADD MSTORE SWAP2 DUP10 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP8 GAS CALL DUP1 ISZERO PUSH2 0x5E2 JUMPI SWAP1 DUP10 SWAP2 PUSH2 0x5CE JUMPI JUMPDEST POP POP DUP2 EXTCODESIZE ISZERO PUSH2 0x246 JUMPI DUP5 MLOAD SWAP1 DUP2 MSTORE DUP4 DUP2 ADD SWAP3 DUP4 MSTORE ADDRESS PUSH1 0x20 DUP5 ADD MSTORE SWAP2 DUP8 SWAP2 DUP4 SWAP2 DUP3 SWAP1 DUP5 SWAP1 DUP3 SWAP1 PUSH1 0x40 ADD SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x5C4 JUMPI DUP8 SWAP4 SWAP3 SWAP2 DUP8 SWAP2 PUSH2 0x5A5 JUMPI JUMPDEST POP PUSH2 0x16C JUMP JUMPDEST PUSH2 0x5B2 SWAP2 SWAP3 SWAP4 SWAP5 POP PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x5C0 JUMPI SWAP1 DUP6 SWAP2 DUP6 DUP9 PUSH2 0x59F JUMP JUMPDEST DUP5 DUP1 REVERT JUMPDEST DUP4 MLOAD RETURNDATASIZE DUP9 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x5D7 SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x246 JUMPI DUP8 DUP11 PUSH2 0x562 JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE DUP12 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x5F5 SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x246 JUMPI DUP8 DUP11 PUSH2 0x509 JUMP JUMPDEST DUP11 DUP1 REVERT JUMPDEST PUSH2 0x60D SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x600 JUMPI DUP11 DUP14 PUSH2 0x4DD JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE DUP15 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP13 DUP1 REVERT JUMPDEST SWAP1 DUP1 SWAP3 SWAP6 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x653 JUMPI JUMPDEST PUSH2 0x63E DUP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI MLOAD SWAP3 DUP15 DUP1 PUSH2 0x4B4 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x634 JUMP JUMPDEST DUP15 DUP13 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP3 POP SWAP3 POP DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x691 JUMPI JUMPDEST PUSH2 0x67E DUP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI DUP5 DUP11 SWAP2 MLOAD SWAP3 PUSH0 PUSH2 0x47A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x674 JUMP JUMPDEST PUSH2 0x6A1 SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x622 JUMPI DUP13 DUP16 PUSH2 0x416 JUMP JUMPDEST DUP14 DUP1 REVERT JUMPDEST PUSH2 0x6B9 SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x6AC JUMPI DUP14 PUSH0 PUSH2 0x3DF JUMP JUMPDEST DUP16 DUP14 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP7 POP DUP3 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x6F8 JUMPI JUMPDEST PUSH2 0x6E8 DUP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI MLOAD SWAP6 DUP14 PUSH2 0x361 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x6DE JUMP JUMPDEST SWAP1 SWAP4 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x727 JUMPI JUMPDEST PUSH2 0x717 DUP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI MLOAD SWAP3 DUP13 PUSH2 0x31E JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x70D JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE DUP14 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP5 PUSH32 0xCA1C3CBC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP POP POP PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST DUP4 DUP6 SWAP2 CALLVALUE PUSH2 0x64F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x64F JUMPI PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x7C5 SWAP2 AND PUSH2 0xEF5 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH2 0x7E4 PUSH2 0xF6B JUMP JUMPDEST AND SWAP3 DUP3 MLOAD SWAP4 DUP5 SWAP2 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP8 DUP4 ADD MSTORE CALLER PUSH1 0x24 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE DUP2 PUSH1 0x64 PUSH1 0x20 SWAP7 DUP8 SWAP4 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xC52 JUMPI PUSH0 SWAP2 PUSH2 0xC1C JUMPI JUMPDEST POP ISZERO PUSH2 0xBF5 JUMPI PUSH0 SLOAD PUSH1 0xFF DUP2 AND PUSH2 0xBCE JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x1 SWAP2 AND OR PUSH0 SSTORE DUP1 PUSH32 0x0 AND SWAP5 PUSH1 0x1 SLOAD SWAP2 DUP7 EXTCODESIZE ISZERO PUSH2 0x64F JUMPI DUP4 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE DUP4 DUP3 ADD SWAP5 DUP6 MSTORE ADDRESS PUSH1 0x20 DUP7 ADD MSTORE SWAP4 PUSH0 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP13 GAS CALL DUP1 ISZERO PUSH2 0xBC4 JUMPI PUSH2 0xBB1 JUMPI JUMPDEST POP SWAP6 DUP7 DUP7 SWAP8 PUSH32 0x0 AND DUP6 MLOAD SWAP2 PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH32 0x2D77138900000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 DUP7 DUP6 ADD MSTORE DUP9 DUP5 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0xBA7 JUMPI DUP11 SWAP5 PUSH2 0xB75 JUMPI JUMPDEST POP DUP5 EXTCODESIZE ISZERO PUSH2 0xB53 JUMPI DUP8 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP7 DUP2 ADD DUP6 DUP2 MSTORE ADDRESS PUSH1 0x20 DUP3 ADD MSTORE DUP12 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP11 GAS CALL DUP1 ISZERO PUSH2 0xB6B JUMPI SWAP1 DUP12 SWAP2 PUSH2 0xB57 JUMPI JUMPDEST POP POP DUP3 EXTCODESIZE ISZERO PUSH2 0xB53 JUMPI PUSH1 0x24 DUP11 SWAP3 DUP4 DUP11 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 DUP5 MSTORE PUSH32 0x0 AND DUP11 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0xB49 JUMPI SWAP1 DUP9 SWAP2 PUSH2 0xB35 JUMPI JUMPDEST POP POP DUP2 EXTCODESIZE ISZERO PUSH2 0x238 JUMPI DUP5 MLOAD DUP5 DUP2 MSTORE DUP4 DUP2 ADD SWAP2 DUP3 MSTORE ADDRESS PUSH1 0x20 DUP4 ADD MSTORE SWAP1 DUP8 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP7 GAS CALL DUP1 ISZERO PUSH2 0xB17 JUMPI SWAP1 DUP8 SWAP2 PUSH2 0xB21 JUMPI JUMPDEST POP POP DUP4 MLOAD PUSH32 0xA217FDDF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP6 DUP2 DUP5 DUP2 DUP6 GAS STATICCALL SWAP6 DUP7 ISZERO PUSH2 0xB17 JUMPI DUP8 SWAP7 PUSH2 0xAE4 JUMPI JUMPDEST POP POP DUP1 EXTCODESIZE ISZERO PUSH2 0xAE0 JUMPI DUP4 MLOAD SWAP3 DUP4 MSTORE SWAP1 DUP3 ADD SWAP4 DUP5 MSTORE ADDRESS PUSH1 0x20 DUP6 ADD MSTORE SWAP1 SWAP3 DUP5 SWAP2 DUP5 SWAP2 DUP3 SWAP1 DUP5 SWAP1 DUP3 SWAP1 PUSH1 0x40 ADD SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xAD7 JUMPI POP PUSH2 0xAC7 JUMPI POP RETURN JUMPDEST PUSH2 0xAD0 SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x10F JUMPI DUP1 RETURN JUMPDEST MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP2 SWAP8 POP DUP1 SWAP3 SWAP7 POP RETURNDATASIZE DUP4 GT PUSH2 0xB10 JUMPI JUMPDEST PUSH2 0xAFD DUP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI DUP6 SWAP5 MLOAD SWAP4 DUP8 DUP1 PUSH2 0xA8B JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xAF3 JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE DUP10 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0xB2A SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0xAE0 JUMPI DUP6 DUP9 PUSH2 0xA4F JUMP JUMPDEST PUSH2 0xB3E SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x238 JUMPI DUP7 DUP10 PUSH2 0xA17 JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE DUP11 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP10 DUP1 REVERT JUMPDEST PUSH2 0xB60 SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0xB53 JUMPI DUP10 DUP13 PUSH2 0x9CA JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE DUP14 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP10 POP SWAP3 POP DUP8 DUP10 DUP2 RETURNDATASIZE DUP2 GT PUSH2 0xBA0 JUMPI JUMPDEST PUSH2 0xB8E DUP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI DUP10 SWAP9 MLOAD SWAP3 DUP12 PUSH2 0x974 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xB84 JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE DUP13 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0xBBC SWAP2 SWAP7 POP PUSH2 0xDD3 JUMP JUMPDEST PUSH0 SWAP5 DUP8 PUSH2 0x8EA JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 PUSH32 0xCA1C3CBC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP5 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP DUP4 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0xC4B JUMPI JUMPDEST PUSH2 0xC33 DUP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x64F JUMPI DUP7 PUSH2 0x836 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xC29 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x64F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x64F JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xC8D PUSH2 0xF6B JUMP JUMPDEST SWAP2 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x64F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x64F JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x64F JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x64F JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x64F JUMPI PUSH2 0xD2E PUSH1 0x20 SWAP3 PUSH2 0xEF5 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x64F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x64F JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x64F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x64F JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xDE7 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xDE7 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x64F JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x4 CALLDATALOAD DUP4 DUP2 GT PUSH2 0x64F JUMPI DUP2 PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x64F JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP4 DUP5 GT PUSH2 0xDE7 JUMPI DUP4 PUSH1 0x5 SHL SWAP1 PUSH1 0x40 MLOAD SWAP5 PUSH2 0xEA3 PUSH1 0x20 DUP5 ADD DUP8 PUSH2 0xE14 JUMP JUMPDEST DUP6 MSTORE PUSH1 0x24 PUSH1 0x20 DUP7 ADD SWAP3 DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x64F JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xEC9 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x64F JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xEBB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xDE7 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x101C JUMPI PUSH0 SWAP3 PUSH2 0xFE3 JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1014 JUMPI JUMPDEST DUP2 PUSH2 0xFFF PUSH1 0x20 SWAP4 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI MLOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x64F JUMPI SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xFF2 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBF 0x4D 0x4E PUSH8 0x61F6E4A45E5C73D2 0xC MUL 0xE4 CREATE 0xDF PUSH31 0x905B725A964DFBA9C48E6950E01C64736F6C634300081B0033000000000000 ","sourceMap":"2216:3190:29:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2216:3190:29;;;;;;;;;2276:29:28;2216:3190:29;;;;;;;;;;;;;;;;:::i;:::-;;5374:23;;;;2216:3190;;;;;;;;;;;;:::i;:::-;551:66:16;2806:53:17;;;1316:93:16;;1529:4;3051:52:17;1529:4:16;3051:52:17;;2216:3190:29;;;;;3637:65;;2216:3190;;;;;;;;;;3796:141;;2216:3190;4439:13;;;;2216:3190;4582:16;;;2216:3190;4434:199;1529:4:16;;;4434:199:29;3051:52:17;;;;2216:3190:29;;4472:3;2216:3190;;;;;;4454:16;;;;;2216:3190;;;;;;;;;;4552:70;;;;;2216:3190;;4552:70;2216:3190;4552:70;;;;;2216:3190;4552:70;;2216:3190;4552:70;;;;;;;;;;;4472:3;;;;;;;;;2216:3190;4439:13;;;4552:70;;;;;:::i;:::-;2216:3190;;4552:70;;;2216:3190;;;;4552:70;2216:3190;;;;;;;;;4552:70;2216:3190;;;4454:16;;;;;;;3796:141;2216:3190;;;;;;;;;;;5691:16:28;;2216:3190:29;;;;;5667:144:28;;;;5735:66;5667:144;;;;2216:3190:29;5667:144:28;;;;2216:3190:29;5667:144:28;;;;;;;;;;;;;3796:141:29;2216:3190;;;5845:145:28;;;5913:67;5845:145;;;;;2216:3190:29;5845:145:28;;2216:3190:29;5845:145:28;;;;;;;;;;;;;3796:141:29;6001:11:28;;;2216:3190:29;6001:49:28;;;;;;2216:3190:29;;;6001:49:28;;;;;;2216:3190:29;;;6044:4:28;2216:3190:29;;;;;;;;;;;;;;;6001:49:28;;;;;;;;;;;;;;;3796:141:29;6060:50:28;;;;;;;2216:3190:29;;6060:50:28;;;;;;2216:3190:29;;;6044:4:28;2216:3190:29;;;;6044:4:28;;2216:3190:29;;;;;;6060:50:28;;;;;;;;;;;;;;;3796:141:29;6202:16:28;;;2216:3190:29;;;6202:53:28;2216:3190:29;6202:53:28;;;;;;;;;;;;;;;;;;;;;;;3796:141:29;2216:3190;;;6300:54:28;;;;2216:3190:29;6300:54:28;;;;;;;;;;;;;3796:141:29;6365:76:28;;;;;;;2216:3190:29;;6365:76:28;;;;;;2216:3190:29;6365:76:28;;2216:3190:29;6365:76:28;;;;;;;;;;;;;;3796:141:29;6451:78:28;;;;;;;2216:3190:29;;;;;;;6451:78:28;;;;;;;;;;2216:3190:29;6451:78:28;;;;;;;;;;;3796:141:29;6571:52:28;;;;;;;2216:3190:29;;;6571:52:28;;;;;;2216:3190:29;;;6044:4:28;2216:3190:29;;;;;;;;;;;;;6571:52:28;;;;;;;;;;;;;;;3796:141:29;6633:53:28;;;;;;;2216:3190:29;;6633:53:28;;;;;;2216:3190:29;;;6044:4:28;2216:3190:29;;;;;;;;;;;;;;;;;6633:53:28;;;;;;;;;;;;;;;;3796:141:29;;;;6633:53:28;;;;;;;;:::i;:::-;2216:3190:29;;6633:53:28;;;;;;;2216:3190:29;;;;6633:53:28;2216:3190:29;;;;;;;;;6571:52:28;;;;:::i;:::-;2216:3190:29;;6571:52:28;;;;;2216:3190:29;;;;;;;;;6451:78:28;;;;:::i;:::-;2216:3190:29;;6451:78:28;;;;;2216:3190:29;;;6365:76:28;;;;:::i;:::-;2216:3190:29;;6365:76:28;;;;;2216:3190:29;;;;;;;;;6365:76:28;2216:3190:29;;;6300:54:28;;;;;;;;;;;;;;;;;:::i;:::-;;;2216:3190:29;;;;;6300:54:28;;;;;2216:3190:29;;;;6300:54:28;;;;;;2216:3190:29;;;;;;;;;;;6202:53:28;;;;;;;;;;;;;;;;;:::i;:::-;;;2216:3190:29;;;;;;;;6202:53:28;;;;;;;;;6060:50;;;;:::i;:::-;2216:3190:29;;6060:50:28;;;;;2216:3190:29;;;6001:49:28;;;;:::i;:::-;2216:3190:29;;6001:49:28;;;;;2216:3190:29;;;;;;;;;;;5845:145:28;;;;;;;;;;;;;;;;;:::i;:::-;;;2216:3190:29;;;;;5845:145:28;;;;;;;;;5667:144;;;;;;;;;;;;;;;;;:::i;:::-;;;2216:3190:29;;;;;5667:144:28;;;;;;;;;;2216:3190:29;;;;;;;;;3637:65;3674:17;;;;;;1316:93:16;1368:30;;;;;;;2216:3190:29;;;;;;;;-1:-1:-1;;2216:3190:29;;;;;1774:7:13;1762:20;1774:7;;1762:20;:::i;:::-;2216:3190:29;;1592:15:19;;;:::i;:::-;2216:3190:29;;;;1592:60:19;;;2216:3190:29;1592:60:19;;;;;2216:3190:29;1820:10:13;2216:3190:29;;;;1646:4:19;2216:3190:29;;;;1592:60:19;2216:3190:29;1592:60:19;;;;;;;;;;;2216:3190:29;1592:60:19;;;2216:3190:29;1797:34:13;;1793:90;;2216:3190:29;;;;;4714:65;;2216:3190;4802:4;2216:3190;;;;;4864:11;;2216:3190;;4802:4;2216:3190;4864:55;;;;;;2216:3190;;;4864:55;;;;;;2216:3190;;;1646:4:19;2216:3190:29;;;;;;;;;;;;;4864:55;;;;;;;;;;;;2216:3190;6806:5:28;;;;;;2216:3190:29;;;6782:112:28;2216:3190:29;6782:112:28;;6839:45;6782:112;;;;;2216:3190:29;6782:112:28;;2216:3190:29;6782:112:28;;;;;;;;;;;;;2216:3190:29;6905:58:28;;;;;;2216:3190:29;;;6905:58:28;;;;;2216:3190:29;;;1646:4:19;2216:3190:29;;;;1646:4:19;;2216:3190:29;;;;;;6905:58:28;;;;;;;;;;;;;;;2216:3190:29;6974:48:28;;;;;;;2216:3190:29;;;;;;6974:48:28;;;;;;;7005:16;2216:3190:29;6974:48:28;;;2216:3190:29;6974:48:28;;;;;;;;;;;2216:3190:29;7033:61:28;;;;;;;2216:3190:29;;7033:61:28;;;;;;2216:3190:29;;;1646:4:19;2216:3190:29;;;;;;;;;;;;;7033:61:28;;;;;;;;;;;;;;;2216:3190:29;;;;;;5075:32;;;;;;;;;;;;;;;;;;2216:3190;5050:73;;;;;;;2216:3190;;5050:73;;;;;;2216:3190;;;1646:4:19;2216:3190:29;;;;;;;;;;;;;;;;;;5050:73;;;;;;;;;;;;2216:3190;;5050:73;;;;:::i;:::-;2216:3190;;5050:73;2216:3190;5050:73;2216:3190;;;;;;;;5050:73;2216:3190;;;5075:32;;;;;;;;;;;;;;;;;;:::i;:::-;;;2216:3190;;;;;;;5075:32;;;;;;;;;;;2216:3190;;;;;;;;;7033:61:28;;;;:::i;:::-;2216:3190:29;;7033:61:28;;;;6974:48;;;;:::i;:::-;2216:3190:29;;6974:48:28;;;;;2216:3190:29;;;;;;;;;6974:48:28;2216:3190:29;;;6905:58:28;;;;:::i;:::-;2216:3190:29;;6905:58:28;;;;;2216:3190:29;;;;;;;;;6782:112:28;;-1:-1:-1;6782:112:28;-1:-1:-1;6782:112:28;;;;;;;;;;;;;:::i;:::-;;;2216:3190:29;;;;;;;6782:112:28;;;;;;;;;;2216:3190:29;;;;;;;;;4864:55;;;;;;:::i;:::-;2216:3190;4864:55;;;;;2216:3190;;;;;;;;;4714:65;4751:17;;2216:3190;4751:17;2216:3190;4751:17;1793:90:13;1854:18;;2216:3190:29;1854:18:13;2216:3190:29;1854:18:13;1592:60:19;;;;;;;;;;;;;;;;:::i;:::-;;;2216:3190:29;;;;;;;;;;;;1592:60:19;;;;;;;;;2216:3190:29;;;;;;;;;;;;;;;-1:-1:-1;;2216:3190:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;2216:3190:29;;;;;;;;;1216:6:19;2216:3190:29;;;;;;;;;;;-1:-1:-1;;2216:3190:29;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;2216:3190:29;;;;;;;;;2151:56:28;2216:3190:29;;;;;;;;;-1:-1:-1;;2216:3190:29;;;;;;2213:56:28;2216:3190:29;2213:56:28;2216:3190:29;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;2216:3190:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;1931:430:13;2216:3190:29;;;2303:50:13;;;2320:22;;2216:3190:29;;;;;;;2303:50:13;;;2216:3190:29;;;;;;;;;;;;;;;2293:61:13;;1931:430;:::o;1366:109:19:-;2216:3190:29;;;1442:26:19;;2216:3190:29;1442:26:19;2216:3190:29;1442:26:19;2216:3190:29;1216:6:19;2216:3190:29;;1442:26:19;;;;;;;;;;;1435:33;;1366:109;:::o;1442:26::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;2216:3190:29;;;;;;;;;;;;1366:109:19;:::o;1442:26::-;;;-1:-1:-1;1442:26:19;;;2216:3190:29;;;1442:26:19;2216:3190:29;;;;"},"methodIdentifiers":{"finalizeMigration()":"b78b6087","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getVault()":"8d928af8","migrateFeeController(address[])":"c2ad0f14","migratePools(address[])":"b8350e27","newFeeController()":"51da116d","oldFeeController()":"7ea3a964","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"_vault\",\"type\":\"address\"},{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"_newFeeController\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyMigrated\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidFeeController\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongMigrationVersion\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"finalizeMigration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"name\":\"migrateFeeController\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"migratePools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"newFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oldFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These events enable tracking pool protocol fees under all circumstances (in particular, when protocol fees are initially turned off). After deployment, call `migratePools` as many times as necessary. The list must be generated externally, as pools are not iterable on-chain. The batch interface allows an unlimited number of pools to be migrated; it's possible there might be too many to migrate in a single call. The first time `migratePools` is called, the contract will first copy the global (pool-independent data). This could be done in a separate stage, but we're trying to keep the contract simple, vs. duplicating the staging coordinator system of v2 just yet. When all pools have been migrated, call `finalizeMigration` to disable further migration, update the address in the Vault, and renounce all permissions. While `migratePools` is permissionless, this call must be permissioned to prevent premature termination in case multiple transactions are required to migrate all the pools. Associated with `20250221-protocol-fee-controller-migration` (fork test only).\",\"errors\":{\"InvalidFeeController()\":[{\"details\":\"ProtocolFeeController contracts return the address of the Vault they were deployed with. Ensure that both the old and new controllers reference the same vault.\"}]},\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"migrateFeeController(address[])\":{\"details\":\"Call this with the full set of pools to perform the migration. After this runs, the Vault will point to the new fee controller, which will have a copy of all the relevant state from the old controller. Also, all permissions will be revoked, and the contract will be disabled.\",\"params\":{\"pools\":\"The complete set of pools to migrate\"}},\"migratePools(address[])\":{\"details\":\"THis can be called multiple times, if there are too many pools for a single transaction. Note that the first time this is called, it will migrate the global fee percentages, then proceed with the first set of pools.\",\"params\":{\"pools\":\"The set of pools to be migrated in this call\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyMigrated()\":[{\"notice\":\"Migration can only be performed once.\"}],\"InvalidFeeController()\":[{\"notice\":\"Attempt to deploy this contract with invalid parameters.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"WrongMigrationVersion()\":[{\"notice\":\"Cannot call the base contract migration; it is invalid for this migration.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"migrateFeeController(address[])\":{\"notice\":\"Permissionless migration function.\"},\"migratePools(address[])\":{\"notice\":\"Migrate pools from the old fee controller to the new one.\"}},\"notice\":\"Migrate from the original ProtocolFeeController to one with extra events.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ProtocolFeeControllerMigrationV2.sol\":\"ProtocolFeeControllerMigrationV2\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol\":{\"keccak256\":\"0x434eda908f66d99d967c2c2b233337227c331cd79655ec5b0ddcc76db7a20606\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b0b6c4bc095113dfbaeb9d9a6f9602f0f1a79b075c82d5ccccff7a1b67af1ce8\",\"dweb:/ipfs/QmaePfy8V5U9UFqkDtdTvPjJLmo1XEorPrC1fMVB35n86Y\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xe0e5193402394ef505f87b206d8e64e1ea8b604feeb2ea8bbd054050778c162d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c962b5d782a8ec4341741dd49daf071e23560548ad95ed00e1531379cfcf0a2e\",\"dweb:/ipfs/QmbPn63SLEZp719KdAtPa4urbhQwqYzfewWfNRtw3nyy8c\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\":{\"keccak256\":\"0xe45521ca4ed88ce5d25262f764132ad923c9207db89a51d5e76e960c3ee7e9f1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7f1bb43ba9746184f4a0ac05ab2b1b62bc56da755346e518c8f427478aad2a\",\"dweb:/ipfs/QmYKgjtZ7Bu8MqQPQf1YBPb8FXfWaGYtL2fMQcZR3iBod1\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x67518bf3b6bd96f5897c56867fc57f3c31bb9b97abf93cf960de145a5eb82414\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://563857d8606cbd4f727c75f09901d09ec9faa73778fe85e2af851982cdb9b6e8\",\"dweb:/ipfs/QmU7x1gWCPGPAcxA8Qq3z8hscrGRFwsc28qad4RMihZ8qB\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"contracts/ProtocolFeeControllerMigration.sol\":{\"keccak256\":\"0xee813da8870157b65605312b549db970f60953eebaf01191c6c21b02292152b9\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://25752ef15a6940fa106538f0be3ecab62ae8b436319769556e400493417ccc74\",\"dweb:/ipfs/QmczThRsBQihuxveGf12KdtdeoQcRMaJaXapN3raD5S8vD\"]},\"contracts/ProtocolFeeControllerMigrationV2.sol\":{\"keccak256\":\"0xf6e29a66c5e8c5006378992a7f3386d950d420b3abb2225e05c18bafeb75ae2f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://947d078a4dc5b45432d5ebe2ddb1f017a73908b2433d4c8d59faea22d6398bfc\",\"dweb:/ipfs/QmesMVuTfv5FQ5sXeN4VRChxaT6ryUggusgLRE1tQ9BhjW\"]}},\"version\":1}"}}}}} \ No newline at end of file diff --git a/v3/scripts/20250221-protocol-fee-controller-migration/index.ts b/v3/scripts/20250221-protocol-fee-controller-migration/index.ts new file mode 100644 index 00000000..54428741 --- /dev/null +++ b/v3/scripts/20250221-protocol-fee-controller-migration/index.ts @@ -0,0 +1,19 @@ +import { Task, TaskRunOptions } from '@src'; +import { BalancerContractRegistryInitializerDeployment } from './input'; + +export default async (task: Task, { force, from }: TaskRunOptions = {}): Promise => { + const input = task.input() as BalancerContractRegistryInitializerDeployment; + + const args = [ + input.Vault, + input.BalancerContractRegistry, + [input.RouterName, input.BatchRouterName, input.BufferRouterName, input.CompositeLiquidityRouterName], + [input.Router, input.BatchRouter, input.BufferRouter, input.CompositeLiquidityRouter], + [input.WeightedPoolName, input.StablePoolName, input.StableSurgePoolName], + [input.WeightedPoolFactory, input.StablePoolFactory, input.StableSurgePoolFactory], + [input.WeightedPoolAlias, input.StablePoolAlias], + [input.WeightedPoolFactory, input.StablePoolFactory], + ]; + + await task.deployAndVerify('BalancerContractRegistryInitializer', args, from, force); +}; diff --git a/v3/scripts/20250221-protocol-fee-controller-migration/input.ts b/v3/scripts/20250221-protocol-fee-controller-migration/input.ts new file mode 100644 index 00000000..e1017b92 --- /dev/null +++ b/v3/scripts/20250221-protocol-fee-controller-migration/input.ts @@ -0,0 +1,65 @@ +import { Task, TaskMode } from '@src'; + +export type BalancerContractRegistryInitializerDeployment = { + Vault: string; + BalancerContractRegistry: string; + RouterName: string; + Router: string; + BatchRouterName: string; + BatchRouter: string; + BufferRouterName: string; + BufferRouter: string; + CompositeLiquidityRouterName: string; + CompositeLiquidityRouter: string; + WeightedPoolName: string; + WeightedPoolFactory: string; + StablePoolName: string; + StablePoolFactory: string; + StableSurgePoolName: string; + StableSurgePoolFactory: string; + WeightedPoolAlias: string; + StablePoolAlias: string; +}; + +const RouterName = '20241205-v3-router'; +const BatchRouterName = '20241205-v3-batch-router'; +const BufferRouterName = '20241205-v3-buffer-router'; +const CompositeLiquidityRouterName = '20250123-v3-composite-liquidity-router-v2'; +const WeightedPoolName = '20241205-v3-weighted-pool'; +const StablePoolName = '20241205-v3-stable-pool'; +const StableSurgePoolName = '20250121-v3-stable-surge'; + +const Vault = new Task('20241204-v3-vault', TaskMode.READ_ONLY); +const BalancerContractRegistry = new Task('20250117-v3-contract-registry', TaskMode.READ_ONLY); + +const Router = new Task(RouterName, TaskMode.READ_ONLY); +const BatchRouter = new Task(BatchRouterName, TaskMode.READ_ONLY); +const BufferRouter = new Task(BufferRouterName, TaskMode.READ_ONLY); +const CompositeLiquidityRouter = new Task(CompositeLiquidityRouterName, TaskMode.READ_ONLY); +const WeightedPoolFactory = new Task(WeightedPoolName, TaskMode.READ_ONLY); +const StablePoolFactory = new Task(StablePoolName, TaskMode.READ_ONLY); +const StableSurgePoolFactory = new Task(StableSurgePoolName, TaskMode.READ_ONLY); + +const WeightedPoolAlias = 'WeightedPool'; +const StablePoolAlias = 'StablePool'; + +export default { + Vault, + BalancerContractRegistry, + RouterName, + Router, + BatchRouterName, + BatchRouter, + BufferRouterName, + BufferRouter, + CompositeLiquidityRouterName, + CompositeLiquidityRouter, + WeightedPoolName, + WeightedPoolFactory, + StablePoolName, + StablePoolFactory, + StableSurgePoolName, + StableSurgePoolFactory, + WeightedPoolAlias, + StablePoolAlias, +}; diff --git a/v3/scripts/20250221-protocol-fee-controller-migration/readme.md b/v3/scripts/20250221-protocol-fee-controller-migration/readme.md new file mode 100644 index 00000000..e5cd8562 --- /dev/null +++ b/v3/scripts/20250221-protocol-fee-controller-migration/readme.md @@ -0,0 +1,7 @@ +# 2025-02-21 - V3 Protocol Fee Controller Migration + +Deployment of the `ProtocolFeeControllerMigration` contract, responsible for migrating the ProtocolFeeController from the original deployed version to a new version with extra events and features designed to make future migrations easier. + +## Useful Files + +- [`ProtocolFeeControllerMigration` artifact](./artifact/ProtocolFeeControllerMigration.json) diff --git a/v3/scripts/20250221-protocol-fee-controller-migration/test/task.fork.ts b/v3/scripts/20250221-protocol-fee-controller-migration/test/task.fork.ts new file mode 100644 index 00000000..4b7d5078 --- /dev/null +++ b/v3/scripts/20250221-protocol-fee-controller-migration/test/task.fork.ts @@ -0,0 +1,141 @@ +import hre from 'hardhat'; +import { expect } from 'chai'; +import { Contract } from 'ethers'; + +import { fp } from '@helpers/numbers'; +import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/dist/src/signer-with-address'; + +import { describeForkTest } from '@src'; +import { Task, TaskMode } from '@src'; +import { getForkedNetwork } from '@src'; +import { impersonate } from '@src'; +import { actionId } from '@helpers/models/misc/actions'; + +describeForkTest('BalancerContractRegistryInitializer', 'mainnet', 21862412, function () { + let govMultisig: SignerWithAddress; + let registryInitializer: Contract; + let registry: Contract; + + let authorizer: Contract; + let router: Contract; + let batchRouter: Contract; + let bufferRouter: Contract; + let compositeLiquidityRouter: Contract; + let weightedPoolFactory: Contract; + let stablePoolFactory: Contract; + let stableSurgePoolFactory: Contract; + + let task: Task; + + const GOV_MULTISIG = '0x10A19e7eE7d7F8a52822f6817de8ea18204F2e4f'; + + enum ContractType { + OTHER, // a blank entry will have a 0-value type, and it's safest to return this in that case + POOL_FACTORY, + ROUTER, + HOOK, + ERC4626, + } + + before('run task', async () => { + task = new Task('20250221-balancer-registry-initializer', TaskMode.TEST, getForkedNetwork(hre)); + await task.run({ force: true }); + registryInitializer = await task.deployedInstance('BalancerContractRegistryInitializer'); + }); + + before('setup contracts', async () => { + const authorizerTask = new Task('20210418-authorizer', TaskMode.READ_ONLY, getForkedNetwork(hre)); + authorizer = await authorizerTask.deployedInstance('Authorizer'); + + const registryTask = new Task('20250117-v3-contract-registry', TaskMode.READ_ONLY, getForkedNetwork(hre)); + registry = await registryTask.deployedInstance('BalancerContractRegistry'); + + const routerTask = new Task('20241205-v3-router', TaskMode.READ_ONLY, getForkedNetwork(hre)); + router = await routerTask.deployedInstance('Router'); + + const batchRouterTask = new Task('20241205-v3-batch-router', TaskMode.READ_ONLY, getForkedNetwork(hre)); + batchRouter = await batchRouterTask.deployedInstance('BatchRouter'); + + const bufferRouterTask = new Task('20241205-v3-buffer-router', TaskMode.READ_ONLY, getForkedNetwork(hre)); + bufferRouter = await bufferRouterTask.deployedInstance('BufferRouter'); + + const clrTask = new Task('20250123-v3-composite-liquidity-router-v2', TaskMode.READ_ONLY, getForkedNetwork(hre)); + compositeLiquidityRouter = await clrTask.deployedInstance('CompositeLiquidityRouter'); + + const weightedPoolTask = new Task('20241205-v3-weighted-pool', TaskMode.READ_ONLY, getForkedNetwork(hre)); + weightedPoolFactory = await weightedPoolTask.deployedInstance('WeightedPoolFactory'); + + const stablePoolTask = new Task('20241205-v3-stable-pool', TaskMode.READ_ONLY, getForkedNetwork(hre)); + stablePoolFactory = await stablePoolTask.deployedInstance('StablePoolFactory'); + + const stableSurgePoolTask = new Task('20250121-v3-stable-surge', TaskMode.READ_ONLY, getForkedNetwork(hre)); + stableSurgePoolFactory = await stableSurgePoolTask.deployedInstance('StableSurgePoolFactory'); + }); + + before('grant permissions', async () => { + govMultisig = await impersonate(GOV_MULTISIG, fp(100)); + + await authorizer.connect(govMultisig).grantRole(await authorizer.DEFAULT_ADMIN_ROLE(), registryInitializer.address); + }); + + it('is initializing the correct registry', async () => { + expect(await registryInitializer.balancerContractRegistry()).to.eq(registry.address); + }); + + it('perform registry initialization', async () => { + await registryInitializer.initializeBalancerContractRegistry(); + }); + + it('cannot initialize twice', async () => { + await expect(registryInitializer.initializeBalancerContractRegistry()).to.be.reverted; + }); + + it('does not hold permission to register contracts', async () => { + const permission = await actionId(registry, 'registerBalancerContract'); + expect(await authorizer.hasRole(permission, registryInitializer.address)).to.be.false; + }); + + it('does not hold permission to add aliases', async () => { + const permission = await actionId(registry, 'addOrUpdateBalancerContractAlias'); + expect(await authorizer.hasRole(permission, registryInitializer.address)).to.be.false; + }); + + it('renounces the admin role', async () => { + expect(await authorizer.hasRole(await authorizer.DEFAULT_ADMIN_ROLE(), registryInitializer.address)).to.be.false; + }); + + it('has registered the routers', async () => { + expect(await registry.isTrustedRouter(router.address)).to.be.true; + expect(await registry.isTrustedRouter(batchRouter.address)).to.be.true; + expect(await registry.isTrustedRouter(bufferRouter.address)).to.be.true; + expect(await registry.isTrustedRouter(compositeLiquidityRouter.address)).to.be.true; + }); + + it('has registered the pool factories', async () => { + let info = await registry.getBalancerContractInfo(weightedPoolFactory.address); + _validateInfo(info); + + info = await registry.getBalancerContractInfo(stablePoolFactory.address); + _validateInfo(info); + + info = await registry.getBalancerContractInfo(stableSurgePoolFactory.address); + _validateInfo(info); + }); + + it('has registered the aliases', async () => { + let [contractAddress, isActive] = await registry.getBalancerContract(ContractType.POOL_FACTORY, 'WeightedPool'); + expect(contractAddress).to.eq(weightedPoolFactory.address); + expect(isActive).to.be.true; + + [contractAddress, isActive] = await registry.getBalancerContract(ContractType.POOL_FACTORY, 'StablePool'); + expect(contractAddress).to.eq(stablePoolFactory.address); + expect(isActive).to.be.true; + }); + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + function _validateInfo(info: any) { + expect(info.contractType).to.eq(ContractType.POOL_FACTORY); + expect(info.isRegistered).to.be.true; + expect(info.isActive).to.be.true; + } +}); From d08fb1bd180d09385df9b259cff8bbc23d895dbe Mon Sep 17 00:00:00 2001 From: Jeff Bennett Date: Fri, 21 Feb 2025 21:52:00 -0500 Subject: [PATCH 2/3] feat: replace checkpoint with real code --- .../ProtocolFeeControllerMigration.json | 172 +++++++ .../artifact/WeightedPoolFactory.json | 481 ++++++++++++++++++ .../ProtocolFeeControllerMigration.json | 2 +- .../build-info/WeightedPoolFactory.json | 1 + .../index.ts | 22 +- .../input.ts | 59 +-- .../readme.md | 5 +- .../test/task.fork.ts | 361 ++++++++++--- 8 files changed, 949 insertions(+), 154 deletions(-) create mode 100644 v3/scripts/20250221-protocol-fee-controller-migration/artifact/ProtocolFeeControllerMigration.json create mode 100644 v3/scripts/20250221-protocol-fee-controller-migration/artifact/WeightedPoolFactory.json create mode 100644 v3/scripts/20250221-protocol-fee-controller-migration/build-info/WeightedPoolFactory.json diff --git a/v3/scripts/20250221-protocol-fee-controller-migration/artifact/ProtocolFeeControllerMigration.json b/v3/scripts/20250221-protocol-fee-controller-migration/artifact/ProtocolFeeControllerMigration.json new file mode 100644 index 00000000..477abf2f --- /dev/null +++ b/v3/scripts/20250221-protocol-fee-controller-migration/artifact/ProtocolFeeControllerMigration.json @@ -0,0 +1,172 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ProtocolFeeControllerMigration", + "sourceName": "contracts/ProtocolFeeControllerMigration.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "contract IVault", + "name": "_vault", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "AlreadyMigrated", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidFeeController", + "type": "error" + }, + { + "inputs": [], + "name": "ReentrancyGuardReentrantCall", + "type": "error" + }, + { + "inputs": [], + "name": "SenderNotAllowed", + "type": "error" + }, + { + "inputs": [], + "name": "finalizeMigration", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isMigrationComplete", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "pools", + "type": "address[]" + } + ], + "name": "migratePools", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "newFeeController", + "outputs": [ + { + "internalType": "contract IProtocolFeeController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "oldFeeController", + "outputs": [ + { + "internalType": "contract IProtocolFeeController", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IProtocolFeeController", + "name": "_newFeeController", + "type": "address" + } + ], + "name": "setNewFeeController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "vault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x610120604081815234610169578161149a803803809161001f82856101c3565b833960209384918101031261016957516001600160a01b0390818116808203610169573060805260a0829052835163217cb6f560e21b81528581600481855afa9081156101b957908692915f9161017e575b509260049360c05260e05284519283809263aaabadc560e01b82525afa938415610174575f94610137575b5050610100921682525161129f91826101fb8339608051826111f2015260a051828181610b3801528181610fc90152611052015260c0518281816105b50152818161062a01526110f2015260e05182818160ba0152610c5b0152518181816104290152818161048c015281816104ea0152818161052b01528181610740015281816107a301528181610801015281816108430152610c960152f35b9080929450813d831161016d575b61014f81836101c3565b810103126101695751828116810361016957915f8061009c565b5f80fd5b503d610145565b83513d5f823e3d90fd5b8381939492503d83116101b2575b61019681836101c3565b8101031261016957519083821682036101695785916004610071565b503d61018c565b85513d5f823e3d90fd5b601f909101601f19168101906001600160401b038211908210176101e657604052565b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f905f358060e01c91826351da116d14611116575081637ea3a964146110c6578163851c1bb3146110765781638d928af814611026578163aaabadc514610f76578163b78b608714610ab357508063b8350e2714610167578063bba1af4714610106578063d7128084146100e15763fbfa77cf1461008e575f80fd5b346100de57806003193601126100de57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b80fd5b50346100de57806003193601126100de5760ff6020915460a01c166040519015158152f35b50346100de5760206003193601126100de5760043573ffffffffffffffffffffffffffffffffffffffff8116809103610163577fffffffffffffffffffffffff000000000000000000000000000000000000000082541617815580f35b5080fd5b50346100de5760206003193601126100de5767ffffffffffffffff6004358181116108a457366023820112156108a4578060040135918211610a86578160051b90604051926101b96020840185611186565b835260246020840192820101903682116108db57602401915b818310610a59575050507f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c610a315760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d815460ff8160a01c16610a09578060ff849260a81c1615610314575b50805b82518110156102ed5773ffffffffffffffffffffffffffffffffffffffff808354169060208360051b8601015116813b156102e95783916024839260405194859384927f0874327f00000000000000000000000000000000000000000000000000000000845260048401525af19081156102de5783916102ca575b5050600101610245565b6102d390611145565b61016357815f6102c0565b6040513d85823e3d90fd5b8380fd5b50807f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d80f35b8075010000000000000000000000000000000000000000007fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff73ffffffffffffffffffffffffffffffffffffffff9316178355166040517f851c1bb3000000000000000000000000000000000000000000000000000000008082527f8a3c5c69000000000000000000000000000000000000000000000000000000006004830152602082602481865afa9182156108bc5784926109d1575b5060209060246040518095819382527fa93df2a40000000000000000000000000000000000000000000000000000000060048301525afa9182156102de57839261099a575b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156108a4576040517f2f2ff15d0000000000000000000000000000000000000000000000000000000080825260048201839052306024830152908481604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af19081156108f3578591610986575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156102e957604051908152600481018390523060248201528381604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af19081156108bc578491610972575b50506040517f7869ee1800000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156108bc57849161093d575b50604051907f55fb76af00000000000000000000000000000000000000000000000000000000825260208260048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9182156108f3578592610902575b5073ffffffffffffffffffffffffffffffffffffffff85541690813b156108fe5785916024839260405194859384927f8a3c5c6900000000000000000000000000000000000000000000000000000000845260048401525af19081156108f35785916108df575b505473ffffffffffffffffffffffffffffffffffffffff1690813b156108db5784916024839260405194859384927fa93df2a400000000000000000000000000000000000000000000000000000000845260048401525af19081156108bc5784916108c7575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156108a4576040517f36568abe0000000000000000000000000000000000000000000000000000000080825260048201929092523060248201528381604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af19081156108bc5784916108a8575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156108a45760405190815260048101919091523060248201528181604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af1801561089957156102425761088e90611145565b61016357815f610242565b6040513d84823e3d90fd5b8280fd5b6108b190611145565b6108a457825f6107e8565b6040513d86823e3d90fd5b6108d090611145565b6108a457825f610727565b8480fd5b6108e890611145565b6102e957835f6106c1565b6040513d87823e3d90fd5b8580fd5b945090506020843d602011610935575b8161091f60209383611186565b8101031261093157859351905f61065a565b5f80fd5b3d9150610912565b9350506020833d60201161096a575b8161095960209383611186565b81010312610931578492515f6105e5565b3d915061094c565b61097b90611145565b6108a457825f610570565b61098f90611145565b6102e957835f6104d1565b925090506020823d6020116109c9575b816109b760209383611186565b8101031261093157839151905f610411565b3d91506109aa565b935090506020833d602011610a01575b816109ee60209383611186565b81010312610931579151849260206103cc565b3d91506109e1565b6004837fca1c3cbc000000000000000000000000000000000000000000000000000000008152fd5b6004827f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b823573ffffffffffffffffffffffffffffffffffffffff811681036108fe578152602092830192016101d2565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b905034610931575f600319360112610931577fffffffff00000000000000000000000000000000000000000000000000000000610af091166111c7565b9073ffffffffffffffffffffffffffffffffffffffff604051927faaabadc50000000000000000000000000000000000000000000000000000000084526020938481600481867f0000000000000000000000000000000000000000000000000000000000000000165afa8015610e8457839286925f92610f44575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa908115610e84575f91610f0e575b5015610ee6575f5460ff8160a01c16610ebe577fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000175f556040517f851c1bb30000000000000000000000000000000000000000000000000000000081527f2d7713890000000000000000000000000000000000000000000000000000000060048201819052937f000000000000000000000000000000000000000000000000000000000000000083168183602481845afa928315610e84575f93610e8f575b50837f00000000000000000000000000000000000000000000000000000000000000001693843b15610931576040517f2f2ff15d000000000000000000000000000000000000000000000000000000008152600481018590523060248201525f81604481838a5af18015610e8457610e71575b50958596865416823b15610e6d5760248792836040519586948593845260048401525af19081156108f3578591610e59575b5050823b15610e0f576040517f36568abe000000000000000000000000000000000000000000000000000000008082526004820193909352306024820152848160448183885af19081156108f3578591610e45575b50506040517fa217fddf0000000000000000000000000000000000000000000000000000000081528181600481875afa9182156108f3578592610e14575b5050823b15610e0f5760405191825260048201523060248201529082908290604490829084905af1801561089957610dff5750f35b610e0890611145565b6100de5780f35b505050fd5b8195508092503d8311610e3e575b610e2c8183611186565b81010312610931578392515f80610dca565b503d610e22565b610e4e90611145565b610e0f57835f610d8c565b610e6290611145565b610e0f57835f610d37565b8680fd5b610e7c919650611145565b5f945f610d05565b6040513d5f823e3d90fd5b9092508181813d8311610eb7575b610ea78183611186565b810103126109315751915f610c92565b503d610e9d565b7fca1c3cbc000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90508381813d8311610f3d575b610f258183611186565b8101031261093157518015158103610931575f610bbc565b503d610f1b565b6064919250610f6890843d8611610f6f575b610f608183611186565b81019061123d565b9190610b6b565b503d610f56565b34610931575f600319360112610931576040517faaabadc500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa908115610e84576020925f92611007575b5060405191168152f35b61101f919250833d8511610f6f57610f608183611186565b9083610ffd565b34610931575f60031936011261093157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610931576020600319360112610931576004357fffffffff0000000000000000000000000000000000000000000000000000000081168103610931576110be6020916111c7565b604051908152f35b34610931575f60031936011261093157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610931575f6003193601126109315760209073ffffffffffffffffffffffffffffffffffffffff5f54168152f35b67ffffffffffffffff811161115957604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761115957604052565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176111595760405251902090565b90816020910312610931575173ffffffffffffffffffffffffffffffffffffffff81168103610931579056fea2646970667358221220af9ff083a28d67ed36b023f4ca0b05ea33e3e5dc407c20a91f546c2d81aaa95764736f6c634300081b0033", + "deployedBytecode": "0x6080806040526004361015610012575f80fd5b5f905f358060e01c91826351da116d14611116575081637ea3a964146110c6578163851c1bb3146110765781638d928af814611026578163aaabadc514610f76578163b78b608714610ab357508063b8350e2714610167578063bba1af4714610106578063d7128084146100e15763fbfa77cf1461008e575f80fd5b346100de57806003193601126100de57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b80fd5b50346100de57806003193601126100de5760ff6020915460a01c166040519015158152f35b50346100de5760206003193601126100de5760043573ffffffffffffffffffffffffffffffffffffffff8116809103610163577fffffffffffffffffffffffff000000000000000000000000000000000000000082541617815580f35b5080fd5b50346100de5760206003193601126100de5767ffffffffffffffff6004358181116108a457366023820112156108a4578060040135918211610a86578160051b90604051926101b96020840185611186565b835260246020840192820101903682116108db57602401915b818310610a59575050507f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c610a315760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d815460ff8160a01c16610a09578060ff849260a81c1615610314575b50805b82518110156102ed5773ffffffffffffffffffffffffffffffffffffffff808354169060208360051b8601015116813b156102e95783916024839260405194859384927f0874327f00000000000000000000000000000000000000000000000000000000845260048401525af19081156102de5783916102ca575b5050600101610245565b6102d390611145565b61016357815f6102c0565b6040513d85823e3d90fd5b8380fd5b50807f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d80f35b8075010000000000000000000000000000000000000000007fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff73ffffffffffffffffffffffffffffffffffffffff9316178355166040517f851c1bb3000000000000000000000000000000000000000000000000000000008082527f8a3c5c69000000000000000000000000000000000000000000000000000000006004830152602082602481865afa9182156108bc5784926109d1575b5060209060246040518095819382527fa93df2a40000000000000000000000000000000000000000000000000000000060048301525afa9182156102de57839261099a575b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156108a4576040517f2f2ff15d0000000000000000000000000000000000000000000000000000000080825260048201839052306024830152908481604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af19081156108f3578591610986575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156102e957604051908152600481018390523060248201528381604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af19081156108bc578491610972575b50506040517f7869ee1800000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156108bc57849161093d575b50604051907f55fb76af00000000000000000000000000000000000000000000000000000000825260208260048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9182156108f3578592610902575b5073ffffffffffffffffffffffffffffffffffffffff85541690813b156108fe5785916024839260405194859384927f8a3c5c6900000000000000000000000000000000000000000000000000000000845260048401525af19081156108f35785916108df575b505473ffffffffffffffffffffffffffffffffffffffff1690813b156108db5784916024839260405194859384927fa93df2a400000000000000000000000000000000000000000000000000000000845260048401525af19081156108bc5784916108c7575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156108a4576040517f36568abe0000000000000000000000000000000000000000000000000000000080825260048201929092523060248201528381604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af19081156108bc5784916108a8575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156108a45760405190815260048101919091523060248201528181604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af1801561089957156102425761088e90611145565b61016357815f610242565b6040513d84823e3d90fd5b8280fd5b6108b190611145565b6108a457825f6107e8565b6040513d86823e3d90fd5b6108d090611145565b6108a457825f610727565b8480fd5b6108e890611145565b6102e957835f6106c1565b6040513d87823e3d90fd5b8580fd5b945090506020843d602011610935575b8161091f60209383611186565b8101031261093157859351905f61065a565b5f80fd5b3d9150610912565b9350506020833d60201161096a575b8161095960209383611186565b81010312610931578492515f6105e5565b3d915061094c565b61097b90611145565b6108a457825f610570565b61098f90611145565b6102e957835f6104d1565b925090506020823d6020116109c9575b816109b760209383611186565b8101031261093157839151905f610411565b3d91506109aa565b935090506020833d602011610a01575b816109ee60209383611186565b81010312610931579151849260206103cc565b3d91506109e1565b6004837fca1c3cbc000000000000000000000000000000000000000000000000000000008152fd5b6004827f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b823573ffffffffffffffffffffffffffffffffffffffff811681036108fe578152602092830192016101d2565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b905034610931575f600319360112610931577fffffffff00000000000000000000000000000000000000000000000000000000610af091166111c7565b9073ffffffffffffffffffffffffffffffffffffffff604051927faaabadc50000000000000000000000000000000000000000000000000000000084526020938481600481867f0000000000000000000000000000000000000000000000000000000000000000165afa8015610e8457839286925f92610f44575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa908115610e84575f91610f0e575b5015610ee6575f5460ff8160a01c16610ebe577fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000175f556040517f851c1bb30000000000000000000000000000000000000000000000000000000081527f2d7713890000000000000000000000000000000000000000000000000000000060048201819052937f000000000000000000000000000000000000000000000000000000000000000083168183602481845afa928315610e84575f93610e8f575b50837f00000000000000000000000000000000000000000000000000000000000000001693843b15610931576040517f2f2ff15d000000000000000000000000000000000000000000000000000000008152600481018590523060248201525f81604481838a5af18015610e8457610e71575b50958596865416823b15610e6d5760248792836040519586948593845260048401525af19081156108f3578591610e59575b5050823b15610e0f576040517f36568abe000000000000000000000000000000000000000000000000000000008082526004820193909352306024820152848160448183885af19081156108f3578591610e45575b50506040517fa217fddf0000000000000000000000000000000000000000000000000000000081528181600481875afa9182156108f3578592610e14575b5050823b15610e0f5760405191825260048201523060248201529082908290604490829084905af1801561089957610dff5750f35b610e0890611145565b6100de5780f35b505050fd5b8195508092503d8311610e3e575b610e2c8183611186565b81010312610931578392515f80610dca565b503d610e22565b610e4e90611145565b610e0f57835f610d8c565b610e6290611145565b610e0f57835f610d37565b8680fd5b610e7c919650611145565b5f945f610d05565b6040513d5f823e3d90fd5b9092508181813d8311610eb7575b610ea78183611186565b810103126109315751915f610c92565b503d610e9d565b7fca1c3cbc000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90508381813d8311610f3d575b610f258183611186565b8101031261093157518015158103610931575f610bbc565b503d610f1b565b6064919250610f6890843d8611610f6f575b610f608183611186565b81019061123d565b9190610b6b565b503d610f56565b34610931575f600319360112610931576040517faaabadc500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa908115610e84576020925f92611007575b5060405191168152f35b61101f919250833d8511610f6f57610f608183611186565b9083610ffd565b34610931575f60031936011261093157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610931576020600319360112610931576004357fffffffff0000000000000000000000000000000000000000000000000000000081168103610931576110be6020916111c7565b604051908152f35b34610931575f60031936011261093157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610931575f6003193601126109315760209073ffffffffffffffffffffffffffffffffffffffff5f54168152f35b67ffffffffffffffff811161115957604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761115957604052565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176111595760405251902090565b90816020910312610931575173ffffffffffffffffffffffffffffffffffffffff81168103610931579056fea2646970667358221220af9ff083a28d67ed36b023f4ca0b05ea33e3e5dc407c20a91f546c2d81aaa95764736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/v3/scripts/20250221-protocol-fee-controller-migration/artifact/WeightedPoolFactory.json b/v3/scripts/20250221-protocol-fee-controller-migration/artifact/WeightedPoolFactory.json new file mode 100644 index 00000000..e0313da7 --- /dev/null +++ b/v3/scripts/20250221-protocol-fee-controller-migration/artifact/WeightedPoolFactory.json @@ -0,0 +1,481 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "WeightedPoolFactory", + "sourceName": "contracts/WeightedPoolFactory.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "contract IVault", + "name": "vault", + "type": "address" + }, + { + "internalType": "uint32", + "name": "pauseWindowDuration", + "type": "uint32" + }, + { + "internalType": "string", + "name": "factoryVersion", + "type": "string" + }, + { + "internalType": "string", + "name": "poolVersion", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "Create2EmptyBytecode", + "type": "error" + }, + { + "inputs": [], + "name": "Create2FailedDeployment", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "needed", + "type": "uint256" + } + ], + "name": "Create2InsufficientBalance", + "type": "error" + }, + { + "inputs": [], + "name": "Disabled", + "type": "error" + }, + { + "inputs": [], + "name": "IndexOutOfBounds", + "type": "error" + }, + { + "inputs": [], + "name": "PoolPauseWindowDurationOverflow", + "type": "error" + }, + { + "inputs": [], + "name": "SenderNotAllowed", + "type": "error" + }, + { + "inputs": [], + "name": "StandardPoolWithCreator", + "type": "error" + }, + { + "anonymous": false, + "inputs": [], + "name": "FactoryDisabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolCreated", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "string", + "name": "symbol", + "type": "string" + }, + { + "components": [ + { + "internalType": "contract IERC20", + "name": "token", + "type": "address" + }, + { + "internalType": "enum TokenType", + "name": "tokenType", + "type": "uint8" + }, + { + "internalType": "contract IRateProvider", + "name": "rateProvider", + "type": "address" + }, + { + "internalType": "bool", + "name": "paysYieldFees", + "type": "bool" + } + ], + "internalType": "struct TokenConfig[]", + "name": "tokens", + "type": "tuple[]" + }, + { + "internalType": "uint256[]", + "name": "normalizedWeights", + "type": "uint256[]" + }, + { + "components": [ + { + "internalType": "address", + "name": "pauseManager", + "type": "address" + }, + { + "internalType": "address", + "name": "swapFeeManager", + "type": "address" + }, + { + "internalType": "address", + "name": "poolCreator", + "type": "address" + } + ], + "internalType": "struct PoolRoleAccounts", + "name": "roleAccounts", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "swapFeePercentage", + "type": "uint256" + }, + { + "internalType": "address", + "name": "poolHooksContract", + "type": "address" + }, + { + "internalType": "bool", + "name": "enableDonation", + "type": "bool" + }, + { + "internalType": "bool", + "name": "disableUnbalancedLiquidity", + "type": "bool" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + } + ], + "name": "create", + "outputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "disable", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "getActionId", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAuthorizer", + "outputs": [ + { + "internalType": "contract IAuthorizer", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDefaultLiquidityManagement", + "outputs": [ + { + "components": [ + { + "internalType": "bool", + "name": "disableUnbalancedLiquidity", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableAddLiquidityCustom", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableRemoveLiquidityCustom", + "type": "bool" + }, + { + "internalType": "bool", + "name": "enableDonation", + "type": "bool" + } + ], + "internalType": "struct LiquidityManagement", + "name": "liquidityManagement", + "type": "tuple" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "getDefaultPoolHooksContract", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "constructorArgs", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "salt", + "type": "bytes32" + } + ], + "name": "getDeploymentAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNewPoolPauseWindowEndTime", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getOriginalPauseWindowEndTime", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPauseWindowDuration", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPoolCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPoolVersion", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getPools", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "start", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "count", + "type": "uint256" + } + ], + "name": "getPoolsInRange", + "outputs": [ + { + "internalType": "address[]", + "name": "pools", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getVault", + "outputs": [ + { + "internalType": "contract IVault", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isDisabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "isPoolFromFactory", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x6101006040523461042b5761617c8038038061001a8161042f565b928339810160808282031261042b578151916001600160a01b038316830361042b57602092838201519363ffffffff8086169586810361042b5760408501516001600160401b03959086811161042b5787610076918301610454565b96606082015187811161042b5761008d9201610454565b966146439461009d85870161042f565b95808752611b39868801393060805260a052420190814211610417578282116104085760c0521660e052815193838511610366576003946100de86546104a5565b93601f948581116103dc575b50839085831160011461037a5761011892915f9183610217575b50508160011b915f199060031b1c19161790565b85555b80518481116103665760049161013183546104a5565b858111610330575b5083908583116001146102ce5761016692915f91836102175750508160011b915f199060031b1c19161790565b81555b85519384116102bb575060059361018085546104a5565b838111610287575b508192841160011461022257505081906101b793945f926102175750508160011b915f199060031b1c19161790565b90555b60405161164590816104f4823960805181611504015260a05181818161044101528181610591015281816106b6015281816109c201528181610a780152610fdf015260c05181610b08015260e051818181610923015261157d0152f35b015190505f80610104565b9091601f19841695855f52835f20935f905b88821061026f575050846001969710610256575b50505050811b0190556101ba565b01519060f8845f19921b161c191690555f808080610248565b80600185978294968601518155019601930190610234565b6102ac90865f52835f2085808801891c8201928689106102b2575b01881c01906104dd565b5f610188565b925081926102a2565b604190634e487b7160e01b5f525260245ffd5b90601f19831691845f52855f20925f5b8782821061031a575050908460019594939210610303575b505050811b018155610169565b01515f19838a1b60f8161c191690555f80806102f6565b60018596829396860151815501950193016102de565b61035790845f52855f208780860160051c82019288871061035d575b0160051c01906104dd565b5f610139565b9250819261034c565b634e487b7160e01b5f52604160045260245ffd5b90601f19831691885f52855f20925f5b878282106103c65750509084600195949392106103af575b505050811b01855561011b565b01515f19838a1b60f8161c191690555f80806103a2565b600185968293968601518155019501930161038a565b61040290885f52855f208780860160051c82019288871061035d570160051c01906104dd565b5f6100ea565b6368755a1160e01b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761036657604052565b81601f8201121561042b578051906001600160401b03821161036657610483601f8301601f191660200161042f565b928284526020838301011161042b57815f9260208093018386015e8301015290565b90600182811c921680156104d3575b60208310146104bf57565b634e487b7160e01b5f52602260045260245ffd5b91607f16916104b4565b8181106104e8575050565b5f81556001016104dd56fe60806040526004361015610011575f80fd5b5f358060e01c908163193ad50f146111255781632f2770db14610f5e575080633f819b6f14610f2f57806344f6fec714610e7557806353a72f7e14610d1757806354fd4d5014610c395780636634b75314610bed578063673a2a1f14610b4e5780636c57f5a914610b2c57806378da80cb14610aec578063851c1bb314610a9c5780638d928af814610a4c5780638eec5d7014610a2f578063aaabadc51461096f578063db035ebc14610947578063e9d56e1914610907578063ec888061146108ed5763fed4cdda146100e2575f80fd5b346107ec576101806003193601126107ec5760043567ffffffffffffffff81116107ec5761011490369060040161126f565b60243567ffffffffffffffff81116107ec5761013490369060040161126f565b6044359167ffffffffffffffff83116107ec57366023840112156107ec578260040135906101618261128d565b9361016f60405195866111b5565b82855260208501906024829460071b820101903682116107ec57602401915b8183106108695750505060643567ffffffffffffffff81116107ec57366023820112156107ec578060040135906101c48261128d565b916101d260405193846111b5565b8083526024602084019160051b830101913683116107ec57602401905b8282106108595750505060607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c3601126107ec57604051936060850185811067ffffffffffffffff8211176107085760405260843573ffffffffffffffffffffffffffffffffffffffff811681036107ec57855260a43573ffffffffffffffffffffffffffffffffffffffff811681036107ec57602086015260c43573ffffffffffffffffffffffffffffffffffffffff811681036107ec576040860152610104359173ffffffffffffffffffffffffffffffffffffffff831683036107ec57610124359384151585036107ec576101443580151581036107ec576102f26112a5565b951515606087015215158552875191604051918260a081011067ffffffffffffffff60a0850111176107085790829160a06103a696959401604052825260208201938452604082019283526060820190815261034c61131a565b608083015260405194859460406020870152610375845160a06060890152610100880190611174565b90517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0878303016080880152611174565b925160a085015251917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08482030160c0850152602080845192838152019301905f5b8181106108405750505090608061042a9201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08483030160e0850152611174565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166040830152039061047a601f19928381018352826111b5565b6104aa6040519283602080820194610491866113de565b90805192839101825e015f8152039081018452836111b5565b6104b6610164356115e6565b908251156108185773ffffffffffffffffffffffffffffffffffffffff9251905ff5169384156107f0576104e86115b2565b845f525f60205260405f20600160ff1982541617905560015468010000000000000000811015610708578060016105229201600155611477565b81549060031b9073ffffffffffffffffffffffffffffffffffffffff88831b921b191617905560405195857f83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc5f80a261057961157b565b9073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156107ec57908794959392917feeec802f0000000000000000000000000000000000000000000000000000000086526101a48601908860048801526101a06024880152518091526101c4860194905f5b818110610740575050509473ffffffffffffffffffffffffffffffffffffffff85949381604061069c9563ffffffff5f9b60e43560448c01521660648a01528a60848a01528281511660a48a01528260208201511660c48a015201511660e4870152166101048501526101248401906060809180511515845260208101511515602085015260408101511515604085015201511515910152565b03818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610735576106ee575b602090604051908152f35b67ffffffffffffffff8211610708576020916040526106e3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040513d5f823e3d90fd5b91809897509590929394955173ffffffffffffffffffffffffffffffffffffffff815116825260208101519060028210156107bf5782606060809260209485600197015273ffffffffffffffffffffffffffffffffffffffff604082015116604084015201511515606082015201980191019189969795949392610602565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f80fd5b7f741752c2000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4ca249dc000000000000000000000000000000000000000000000000000000005f5260045ffd5b82518552869550602094850194909201916001016103e8565b81358152602091820191016101ef565b6080833603126107ec576040519061088082611199565b73ffffffffffffffffffffffffffffffffffffffff843581811681036107ec578352602085013560028110156107ec576020840152604085013590811681036107ec576040830152606090818501359283151584036107ec5760809360209382015281520192019161018e565b346107ec575f6003193601126107ec5760206040515f8152f35b346107ec575f6003193601126107ec57602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107ec575f6003193601126107ec57602061096161157b565b63ffffffff60405191168152f35b346107ec575f6003193601126107ec576040517faaabadc500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa908115610735576020925f92610a00575b5060405191168152f35b610a21919250833d8511610a28575b610a1981836111b5565b81019061154f565b90836109f6565b503d610a0f565b346107ec575f6003193601126107ec576020600154604051908152f35b346107ec575f6003193601126107ec57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107ec5760206003193601126107ec576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036107ec57610ae46020916114d9565b604051908152f35b346107ec575f6003193601126107ec57602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107ec575f6003193601126107ec57602060ff600254166040519015158152f35b346107ec575f6003193601126107ec57604051806001916001549283825260208092019360015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6925f905b828210610bc257610bbe86610bb2818a03826111b5565b6040519182918261121e565b0390f35b845473ffffffffffffffffffffffffffffffffffffffff168752958601959383019390830190610b9b565b346107ec5760206003193601126107ec5760043573ffffffffffffffffffffffffffffffffffffffff81168091036107ec575f525f602052602060ff60405f2054166040519015158152f35b346107ec575f6003193601126107ec576040516004545f82610c5a836112c9565b91828252602093600190856001821691825f14610cf7575050600114610c9c575b50610c88925003836111b5565b610bbe604051928284938452830190611174565b84915060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b905f915b858310610cdf575050610c88935082010185610c7b565b80548389018501528794508693909201918101610cc8565b60ff191685820152610c8895151560051b8501019250879150610c7b9050565b346107ec5760406003193601126107ec576004356024803560019260015480821015610e4d5780610d48848461146a565b11610e0c575b50610d588261128d565b92610d6660405194856111b5565b828452610d728361128d565b91601f19602093013660208701375f5b848110610d975760405180610bbe888261121e565b610da9610da4828461146a565b611477565b9054908751831015610de05760031b1c73ffffffffffffffffffffffffffffffffffffffff16600582901b87018501528601610d82565b847f4e487b71000000000000000000000000000000000000000000000000000000005f5260326004525ffd5b908092508103908111610e20579084610d4e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e23d035000000000000000000000000000000000000000000000000000000005f5260045ffd5b346107ec5760406003193601126107ec5760043567ffffffffffffffff81116107ec57366023820112156107ec576055600b610ebd60209336906024816004013591016111d8565b604051610eed818680820194610ed2866113de565b90805192839101825e015f815203601f1981018352826111b5565b519020610efb6024356115e6565b604051916040830152848201523081520160ff81532073ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346107ec575f6003193601126107ec57610bbe610f4a61131a565b604051918291602083526020830190611174565b346107ec575f6003193601126107ec577fffffffff00000000000000000000000000000000000000000000000000000000610f9991166114d9565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156107355784925f92611103575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610735575f926110cc575b5050156110a4576110716115b2565b600160ff1960025416176002557f432acbfd662dbb5d8b378384a67159b47ca9d0f1b79f97cf64cf8585fa362d505f80a1005b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d83116110fc575b6110e381836111b5565b810103126107ec575180151581036107ec578180611062565b503d6110d9565b606491925061111e90843d8611610a2857610a1981836111b5565b9190611011565b346107ec575f6003193601126107ec57608061113f6112a5565b61117260405180926060809180511515845260208101511515602085015260408101511515604085015201511515910152565bf35b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6080810190811067ffffffffffffffff82111761070857604052565b90601f601f19910116810190811067ffffffffffffffff82111761070857604052565b92919267ffffffffffffffff821161070857604051916112026020601f19601f84011601846111b5565b8294818452818301116107ec578281602093845f960137010152565b60209060206040818301928281528551809452019301915f5b828110611245575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101611237565b9080601f830112156107ec5781602061128a933591016111d8565b90565b67ffffffffffffffff81116107085760051b60200190565b604051906112b282611199565b5f6060838281528260208201528260408201520152565b90600182811c92168015611310575b60208310146112e357565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916112d8565b604051905f826005549161132d836112c9565b808352926020906001908181169081156113b9575060011461135a575b5050611358925003836111b5565b565b91509260055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0935f925b8284106113a157506113589450505081016020015f8061134a565b85548885018301529485019487945092810192611386565b90506020935061135895925060ff1991501682840152151560051b8201015f8061134a565b6003545f92916113ed826112c9565b91600190818116908115611457575060011461140857505050565b909192935060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b905f915b848310611444575050500190565b8181602092548587015201920191611436565b60ff191683525050811515909102019150565b91908201809211610e2057565b6001548110156114ac5760015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176107085760405251902090565b908160209103126107ec575173ffffffffffffffffffffffffffffffffffffffff811681036107ec5790565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff81164210156115ad5790565b505f90565b60ff600254166115be57565b7f75884cda000000000000000000000000000000000000000000000000000000005f5260045ffd5b604051602081019133835246604083015260608201526060815261160981611199565b5190209056fea26469706673582212208f161342a59821cfe8bcf58b3a2e65ee6e23527ad9e05d36bd40767f1f181b5064736f6c634300081b00336102c080604052346108e157614643803803809161001d82856108f5565b833981016040828203126108e15781516001600160401b0381116108e15782019160a0838303126108e1576040519160a083016001600160401b038111848210176107105760405283516001600160401b0381116108e15781610081918601610918565b835260208401516001600160401b0381116108e157816100a2918601610918565b602084019081526040808601519085015260608501519094906001600160401b0381116108e157810182601f820112156108e1578051906001600160401b038211610710578160051b604051926100fc60208301856108f5565b8352602080840191830101918583116108e157602001905b8282106108e55750505060608501526080810151916001600160401b0383116108e1576020926101449201610918565b608084018190529101516001600160a01b03811681036108e15782519351604080519195919081016001600160401b03811182821017610710576040526001815260208101603160f81b81526101998361096d565b610120526101a682610af0565b6101405282516020840120918260e05251902080610100524660a0526040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815260c0810181811060018060401b03821117610710576040525190206080523060c0526101608290528051906001600160401b0382116107105760035490600182811c921680156108d7575b60208310146106f25781601f84931161087f575b50602090601f831160011461080a575f926107ff575b50508160011b915f199060031b1c1916176003555b83516001600160401b03811161071057600454600181811c911680156107f5575b60208210146106f257601f8111610796575b506020601f821160011461072f5781929394955f92610724575b50508160011b915f199060031b1c1916176004555b610180528051906001600160401b0382116107105760055490600182811c92168015610706575b60208310146106f25781601f8493116106a4575b50602090601f831160011461061c575f92610611575b50508160011b915f199060031b1c1916176005555b60408101516101a09080825260608301515103610602575f905f5b81519260ff821693841015610494576060850151805185101561048057602090611fe08460051b1601015190662386f26fc100008210610471578181018091116103d95793806103ed57506101c0525b60ff8091169081146103d957600101610375565b634e487b7160e01b5f52601160045260245ffd5b600181036103ff57506101e0526103c5565b600281036104115750610200526103c5565b600381036104235750610220526103c5565b600481036104355750610240526103c5565b600581036104475750610260526103c5565b600681036104595750610280526103c5565b600714610467575b506103c5565b6102a0525f610461565b63bd39358360e01b5f5260045ffd5b634e487b7160e01b5f52603260045260245ffd5b670de0b6b3a76400009150036105f3576040516139fc9182610c27833960805182612806015260a051826128d2015260c051826127d7015260e051826128550152610100518261287b0152610120518261112801526101405182611152015261016051828181610260015281816104880152818161065f01528181610d7e015281816110ed015281816114ae01528181611733015281816119d801528181612118015261276c01526101805182818161059d0152818161094a01528181610a1201528181610c7a0152611277015251816128fa01526101c0518181816125d2015261295101526101e0518181816125ff015261297e01526102005181818161262c01526129b701526102205181818161265901526129f00152610240518181816126860152612a2a0152610260518181816126b30152612a630152610280518181816126e00152612a9f01526102a05181818161270b0152612ad90152f35b631ce788a760e11b5f5260045ffd5b63aaad13f760e01b5f5260045ffd5b015190505f80610345565b60055f90815293507f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db091905b601f1984168510610689576001945083601f19811610610671575b505050811b0160055561035a565b01515f1960f88460031b161c191690555f8080610663565b81810151835560209485019460019093019290910190610648565b90915060055f5260205f20601f840160051c8101602085106106eb575b90849392915b601f830160051c820181106106dd57505061032f565b5f81558594506001016106c7565b50806106c1565b634e487b7160e01b5f52602260045260245ffd5b91607f169161031b565b634e487b7160e01b5f52604160045260245ffd5b015190505f806102df565b60045f5260205f20905f5b601f198416811061077e575060019394959683601f19811610610766575b505050811b016004556102f4565b01515f1960f88460031b161c191690555f8080610758565b9091602060018192858b01518155019301910161073a565b60045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f830160051c8101602084106107ee575b601f830160051c820181106107e35750506102c5565b5f81556001016107cd565b50806107cd565b90607f16906102b3565b015190505f8061027d565b60035f90815293505f5160206146235f395f51905f5291905b601f1984168510610864576001945083601f1981161061084c575b505050811b01600355610292565b01515f1960f88460031b161c191690555f808061083e565b81810151835560209485019460019093019290910190610823565b60035f529091505f5160206146235f395f51905f52601f840160051c8101602085106108d0575b90849392915b601f830160051c820181106108c2575050610267565b5f81558594506001016108ac565b50806108a6565b91607f1691610253565b5f80fd5b8151815260209182019101610114565b601f909101601f19168101906001600160401b0382119082101761071057604052565b81601f820112156108e1578051906001600160401b038211610710576040519261094c601f8401601f1916602001856108f5565b828452602083830101116108e157815f9260208093018386015e8301015290565b8051602090818110156109e35750601f8251116109a5578082519201519080831061099757501790565b825f19910360031b1b161790565b60448260405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b906001600160401b038211610710575f54926001938481811c91168015610ae6575b838210146106f257601f8111610ab3575b5081601f8411600114610a5157509282939183925f94610a46575b50501b915f199060031b1c1916175f5560ff90565b015192505f80610a31565b919083601f1981165f8052845f20945f905b88838310610a995750505010610a81575b505050811b015f5560ff90565b01515f1960f88460031b161c191690555f8080610a74565b858701518855909601959485019487935090810190610a63565b5f805284601f845f20920160051c820191601f860160051c015b828110610adb575050610a16565b5f8155018590610acd565b90607f1690610a05565b805160209081811015610b1a5750601f8251116109a5578082519201519080831061099757501790565b9192916001600160401b0381116107105760019182548381811c91168015610c1c575b828210146106f257601f8111610be9575b5080601f8311600114610b895750819293945f92610b7e575b50505f19600383901b1c191690821b17905560ff90565b015190505f80610b67565b90601f19831695845f52825f20925f905b888210610bd25750508385969710610bba575b505050811b01905560ff90565b01515f1960f88460031b161c191690555f8080610bad565b808785968294968601518155019501930190610b9a565b835f5283601f835f20920160051c820191601f850160051c015b828110610c11575050610b4e565b5f8155018490610c03565b90607f1690610b3d56fe6080604090808252600480361015610015575f80fd5b60e05f35811c92836301ffc9a714611d905750826306fdde0314611ce1578263095ea7b314611c6357826316a0b3e014611a2a57826318160ddd14611a0e57826323b872dd1461196657826323de665114611934578263273c1adf1461191257826330adf81f146118d8578263313ce567146118bd5782633644e515146118a157826353b79bd7146116e557826354fd4d50146115f55782635687f2b814611596578263627cdcb91461156d578263654cf15d1461154b578263679aefce1461151457826370a082311461144057826372c981861461131f5782637ecebe00146112db57826381fa807c1461121a57826384b0196e146111115782638d928af8146110c157826395d89b4114610fbb578263984de9e814610df9578263a9059cbb14610ce6578263aa6ca80814610c21578263abb1dc44146109b8578263b156aa0a146108f1578263b677fa56146108cf578263c0bc6f33146105f6578263ce20ece7146105d6578263d335b0cf14610543578263d505accf146102d857508163dd62ed3e146101e5575063f89f27ed146101ae575f80fd5b346101e1575f6003193601126101e1576101dd906101ca6128f8565b9051918291602083526020830190611fa7565b0390f35b5f80fd5b82346101e157806003193601126101e1576020610200611e1c565b606461020a611e3f565b9473ffffffffffffffffffffffffffffffffffffffff808097875198899687957f927da10500000000000000000000000000000000000000000000000000000000875230908701521660248501521660448301527f0000000000000000000000000000000000000000000000000000000000000000165afa9081156102cf575f9161029a575b6020925051908152f35b90506020823d6020116102c7575b816102b560209383611eca565b810103126101e1576020915190610290565b3d91506102a8565b513d5f823e3d90fd5b8390346101e1576003193601126101e1576102f1611e1c565b906102fa611e3f565b604435926084359060643560ff831683036101e157804211610519576103478273ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2080549060018201905590565b9061041361040a875195602087017f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9815273ffffffffffffffffffffffffffffffffffffffff97889586891697888d840152878c1660608401528d608084015260a083015260c082015260c081526103be81611e92565b5190206103c96127c0565b908a51917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015260c43591604260a4359220612ed8565b90929192612f67565b168181036104ec5750505f84959661048460209651988996879586947fe1f21c67000000000000000000000000000000000000000000000000000000008652850160409194939294606082019573ffffffffffffffffffffffffffffffffffffffff80921683521660208201520152565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19081156102cf57506104b857005b6020813d6020116104e4575b816104d160209383611eca565b810103126101e1576104e290612079565b005b3d91506104c4565b877f4b800e46000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b867f62791302000000000000000000000000000000000000000000000000000000005f525260245ffd5b5082346101e1575f6003193601126101e1578051917fb45090f9000000000000000000000000000000000000000000000000000000008352309083015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156102cf575f9161029a576020925051908152f35b83346101e1575f6003193601126101e157602090516509184e72a0008152f35b9150346101e1575f6003193601126101e157825161061381611e92565b606081526020918282019160608352858101925f8452606082015f815260808301915f835260a08401935f855260c08101955f875273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016908b517f535cfd8a00000000000000000000000000000000000000000000000000000000815230828201525f81602481865afa90811561087f575f916108ad575b5083528b517f7e361bde00000000000000000000000000000000000000000000000000000000815230828201525f81602481865afa90811561087f575f91610889575b5084528b517fb45090f900000000000000000000000000000000000000000000000000000000815230828201528a81602481865afa90811561087f575f91610852575b5089526107516120cf565b85528b519182917ff29486a100000000000000000000000000000000000000000000000000000000835230908301528160246101a09485935afa91821561084857928b9c926107e0926107f396955f9e9c9d9e9261081b575b50508a81015115158852610120610100918281015115158b52015115158a5283519d8d8f9e938f948552519301528c0190611fa7565b915190601f198b840301908b0152611fa7565b9551606088015251608087015251151560a086015251151560c0850152511515908301520390f35b61083a9250803d10610841575b6108328183611eca565b810190612482565b5f806107aa565b503d610828565b8c513d5f823e3d90fd5b90508a81813d8311610878575b6108698183611eca565b810103126101e157515f610746565b503d61085f565b8d513d5f823e3d90fd5b6108a591503d805f833e61089d8183611eca565b81019061228d565b90505f610703565b6108c991503d805f833e6108c18183611eca565b8101906125a4565b5f6106c0565b83346101e1575f6003193601126101e157602090516709b6e64a8ec600008152f35b8382346101e1575f6003193601126101e1578151907f535cfd8a00000000000000000000000000000000000000000000000000000000825230908201525f8160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156109ae57916101dd925f92610992575b5051918291602083526020830190611fa7565b6109a79192503d805f833e6108c18183611eca565b908361097f565b82513d5f823e3d90fd5b8382346101e1575f6003193601126101e15773ffffffffffffffffffffffffffffffffffffffff8251917f67e0e07600000000000000000000000000000000000000000000000000000000835230908301525f82602481847f0000000000000000000000000000000000000000000000000000000000000000165afa918215610c17575f935f925f925f95610aed575b5090610a6595949392918151968796608088526080880190611fda565b6020878203818901528080875193848152019601925f905b838210610aa957898803868b015289806101dd8b610a9b8c8c611fa7565b908382036060850152611fa7565b9184989950606086979860019395978397518051610ac681612023565b83528685820151168584015201511515898201520198019201899897969594929391610a7d565b955093509150503d805f853e610b038185611eca565b8301926080818503126101e15780519167ffffffffffffffff928381116101e15785610b30918401612185565b91602095868201518581116101e157820181601f820112156101e157805190610b5882611eed565b98610b6586519a8b611eca565b828a52808a01816060809502840101928584116101e1578201905b838210610bc5575050505050828201518581116101e15781610ba391840161222c565b9460608301519081116101e157610bba920161222c565b919492919386610a48565b84828703126101e157875190610bda82611e62565b825160028110156101e157825283830151908c821682036101e1578285928389950152610c088b8601612079565b8b820152815201910190610b80565b83513d5f823e3d90fd5b8382346101e1575f6003193601126101e1578151907fca4f280300000000000000000000000000000000000000000000000000000000825230908201525f8160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156109ae57916101dd925f92610cc2575b5051918291602083526020830190611fda565b610cdf9192503d805f833e610cd78183611eca565b810190612203565b9083610caf565b5082346101e157806003193601126101e1576020610d6492610d06611e1c565b83517fbeabacc80000000000000000000000000000000000000000000000000000000081523392810192835273ffffffffffffffffffffffffffffffffffffffff909116602083015260243560408301529384918291606090910190565b03815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610def57610db5575b6020905160018152f35b6020823d602011610de7575b81610dce60209383611eca565b810103126101e157610de1602092612079565b50610dab565b3d9150610dc1565b50513d5f823e3d90fd5b5082346101e157806003193601126101e157813567ffffffffffffffff81116101e157610e299036908401611f05565b60243560028110156101e157610e3e81612023565b610fb457825b610e4c6128f8565b9080600314610f5f5780600414610ed85780600114610e9557600214610e7f57605184634e487b7160e01b5f525260245ffd5b6020935090610e8d91613012565b905b51908152f35b509092670de0b6b3a764000091828102928184041490151715610ec55750602092610ebf91612b84565b90610e8f565b601190634e487b7160e01b5f525260245ffd5b50925f9190670de0b6b3a76400005b8551841015610f2357610f1b600191610f15610f0387876120bb565b51610f0e888b6120bb565b5190612ba2565b90612c2d565b930192610ee7565b92509350508015610f38576020925090610e8f565b827f26543689000000000000000000000000000000000000000000000000000000005f525ffd5b50925f9190670de0b6b3a76400005b8551841015610f2357670de0b6b3a7640000610fab600192610fa5610f9388886120bb565b51610f9e898c6120bb565b5190612e3f565b90612b71565b04930192610f6e565b6003610e44565b8382346101e1575f6003193601126101e157815191825f8354610fdd81612041565b90818452602095600191876001821691825f1461107c575050600114611020575b5050506101dd9291611011910385611eca565b51928284938452830190611df7565b5f90815286935091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b82841061106457505050820101816110116101dd610ffe565b8054848a01860152889550879490930192810161104b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168782015293151560051b8601909301935084925061101191506101dd9050610ffe565b83346101e1575f6003193601126101e1576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9150346101e1575f6003193601126101e15761114c7f0000000000000000000000000000000000000000000000000000000000000000612c4f565b926111767f0000000000000000000000000000000000000000000000000000000000000000612d81565b815192602084019084821067ffffffffffffffff8311176112075750916111e7916101dd949382525f84526111da82519788977f0f0000000000000000000000000000000000000000000000000000000000000089528060208a0152880190611df7565b9186830390870152611df7565b904660608501523060808501525f60a085015283820360c0850152611fa7565b604190634e487b7160e01b5f525260245ffd5b8382346101e1575f6003193601126101e1578151907ff29486a100000000000000000000000000000000000000000000000000000000825230908201526101a090818160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610c17575f926112be575b505060608282015191015182519182526020820152f35b6112d49250803d10610841576108328183611eca565b82806112a7565b83346101e15760206003193601126101e15760209073ffffffffffffffffffffffffffffffffffffffff61130d611e1c565b165f5260028252805f20549051908152f35b8382346101e15760209260031984813601126101e15782359167ffffffffffffffff918284116101e15783360301126101e15783519161135e83611e92565b8084013560028110156101e157835260248101358684015260448101358281116101e15761139190853691840101611f05565b85840152606481013560608401526084810135608084015260a481013573ffffffffffffffffffffffffffffffffffffffff811681036101e15760a084015260c4810135908282116101e1570192366023850112156101e15780840135918211611207575083519061140c86601f19601f8401160183611eca565b80825236602482860101116101e15785815f926024610e8d9701838601378301015260c082015261143b612755565b6122d1565b8382346101e157602091826003193601126101e1578261145e611e1c565b604473ffffffffffffffffffffffffffffffffffffffff9485855196879485937ff7888aec00000000000000000000000000000000000000000000000000000000855230908501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa918215610def575f926114e5575b5051908152f35b9091508281813d831161150d575b6114fd8183611eca565b810103126101e1575190836114de565b503d6114f3565b50346101e1575f6003193601126101e1577f18e79a20000000000000000000000000000000000000000000000000000000005f525ffd5b83346101e1575f6003193601126101e1576020905167016345785d8a00008152f35b346101e1575f6003193601126101e157335f908152600260205260409020805460018101909155005b83346101e15760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256115c836611f65565b9391946115d3612755565b5193845273ffffffffffffffffffffffffffffffffffffffff908116941692a3005b83346101e1575f6003193601126101e15780516005549091825f61161884612041565b808352602094600190866001821691825f146116a557505060011461164a575b50506101dd9291611011910385611eca565b9085925060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0915f925b82841061168d5750505082010181611011611638565b8054848a018601528895508794909301928101611677565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168682015292151560051b850190920192508391506110119050611638565b5082346101e1575f6003193601126101e15780519061170382611e62565b606082526020908183019160608352818401926060845273ffffffffffffffffffffffffffffffffffffffff95867f0000000000000000000000000000000000000000000000000000000000000000169084517fca4f280300000000000000000000000000000000000000000000000000000000815230828201525f81602481865afa90811561189757905f9291839161187d575b50885260248651809481937f7e361bde00000000000000000000000000000000000000000000000000000000835230908301525afa908115611873575f9161185a575b5081959295526117e96128f8565b84528251948086526080860192519260608288015283518091528160a088019401915f5b8281106118445788806101dd8a8a6118338b8b51601f1993848884030190880152611fa7565b915190848303016060850152611fa7565b83518a168652948101949281019260010161180d565b61186e91503d805f833e61089d8183611eca565b6117db565b84513d5f823e3d90fd5b61189191503d8085833e610cd78183611eca565b8a611798565b86513d5f823e3d90fd5b83346101e1575f6003193601126101e157602090610e8d6127c0565b83346101e1575f6003193601126101e1576020905160128152f35b83346101e1575f6003193601126101e157602090517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b83346101e1575f6003193601126101e157602090516729a2241af62c00008152f35b83346101e15760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6115c836611f65565b5082346101e15760205f608461197b36611f65565b86517f15dacbea000000000000000000000000000000000000000000000000000000008152339881019890985273ffffffffffffffffffffffffffffffffffffffff928316602489015290821660448801526064870152859283917f0000000000000000000000000000000000000000000000000000000000000000165af18015610def57610db5576020905160018152f35b83346101e1575f6003193601126101e157602090610e8d6120cf565b8382346101e15760606003193601126101e157803567ffffffffffffffff81116101e157611a5b9036908301611f05565b9160243592611a77611a7085604435936120bb565b51946125ca565b60019081831115611c5d5760025b80600314611be75780600414611b4e5780600114611b0c57600214611ab757605185634e487b7160e01b5f525260245ffd5b909192938115611ae65750610e8d9260209592610f15926ec097ce7bc90715b34b9f0fffffffff040190612ba2565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f525ffd5b5080929394915015611b3b575092610f15610e8d926020956ec097ce7bc90715b34b9f10000000000490612ba2565b601290634e487b7160e01b5f525260245ffd5b509192939080670de0b6b3a7640000935f925b611ba7575b5050508115611b81575092610f15610e8d9260209590612ba2565b7f26543689000000000000000000000000000000000000000000000000000000005f525ffd5b909193670de0b6b3a764000051851015611be1579082611bd98193610f15611bcf89866120bb565b51610f0e8a612086565b950192611b61565b93611b66565b509192939080670de0b6b3a7640000935f925b611c19575050508115611b81575092610f15610e8d9260209590612ba2565b909193670de0b6b3a764000051851015611be1579082670de0b6b3a7640000611c548294610fa5611c4a8a876120bb565b51610f9e8b612086565b04950192611bfa565b81611a85565b5082346101e157806003193601126101e1576020610d6492611c83611e1c565b83517fe1f21c670000000000000000000000000000000000000000000000000000000081523392810192835273ffffffffffffffffffffffffffffffffffffffff909116602083015260243560408301529384918291606090910190565b83346101e1575f6003193601126101e15780516003549091825f611d0484612041565b808352602094600190866001821691825f146116a5575050600114611d355750506101dd9291611011910385611eca565b9085925060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f925b828410611d785750505082010181611011611638565b8054848a018601528895508794909301928101611d62565b82346101e15760206003193601126101e15735907fffffffff0000000000000000000000000000000000000000000000000000000082168092036101e1577f01ffc9a700000000000000000000000000000000000000000000000000000000602092148152f35b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101e157565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101e157565b6060810190811067ffffffffffffffff821117611e7e57604052565b634e487b7160e01b5f52604160045260245ffd5b60e0810190811067ffffffffffffffff821117611e7e57604052565b6040810190811067ffffffffffffffff821117611e7e57604052565b90601f601f19910116810190811067ffffffffffffffff821117611e7e57604052565b67ffffffffffffffff8111611e7e5760051b60200190565b9080601f830112156101e1576020908235611f1f81611eed565b93611f2d6040519586611eca565b81855260208086019260051b8201019283116101e157602001905b828210611f56575050505090565b81358152908301908301611f48565b60031960609101126101e15773ffffffffffffffffffffffffffffffffffffffff9060043582811681036101e1579160243590811681036101e1579060443590565b9081518082526020808093019301915f5b828110611fc6575050505090565b835185529381019392810192600101611fb8565b9081518082526020808093019301915f5b828110611ff9575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101611feb565b6002111561202d57565b634e487b7160e01b5f52602160045260245ffd5b90600182811c9216801561206f575b602083101461205b57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691612050565b519081151582036101e157565b670de0b6b3a7640000518110156120a75760051b670de0b6b3a76400200190565b634e487b7160e01b5f52603260045260245ffd5b80518210156120a75760209160051b010190565b6040517fe4dc2aa400000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561217a575f9161214b575090565b90506020813d602011612172575b8161216660209383611eca565b810103126101e1575190565b3d9150612159565b6040513d5f823e3d90fd5b9080601f830112156101e1578151906020916121a081611eed565b936121ae6040519586611eca565b81855260208086019260051b8201019283116101e157602001905b8282106121d7575050505090565b815173ffffffffffffffffffffffffffffffffffffffff811681036101e15781529083019083016121c9565b906020828203126101e157815167ffffffffffffffff81116101e1576122299201612185565b90565b9080601f830112156101e15781519060209161224781611eed565b936122556040519586611eca565b81855260208086019260051b8201019283116101e157602001905b82821061227e575050505090565b81518152908301908301612270565b9190916040818403126101e15780519267ffffffffffffffff938481116101e157816122ba91840161222c565b9360208301519081116101e157612229920161222c565b604081019081516122e860608301918251906120bb565b519251916122fc60808201938451906120bb565b5191815161230981612023565b61231281612023565b6123d15761232c612325602092516125ca565b94516125ca565b910151670de0b6b3a7640000948561234382612b3d565b0482116123a95761235761235d9282612b30565b90613012565b848402938085048614901517156123955761237e6123849261239195612b84565b90612ba2565b8381810391100290612b71565b0490565b634e487b7160e01b5f52601160045260245ffd5b7f340a4533000000000000000000000000000000000000000000000000000000005f5260045ffd5b6123eb6123e460209295939495516125ca565b92516125ca565b920151670de0b6b3a764000061240085612b3d565b04811161245a578303908382116123955761242161237e9261242795613012565b92613012565b7ffffffffffffffffffffffffffffffffffffffffffffffffff21f494c589c000081019081116123955761222991612c2d565b7f64590b9f000000000000000000000000000000000000000000000000000000005f5260045ffd5b6101a0918190038281126101e15760405192610140928385019267ffffffffffffffff9086851082861117611e7e576080136101e1576101c0860190811184821017611e7e576040526124d481612079565b83526124e260208201612079565b9261016093848701526124f760408301612079565b92610180938488015261250c60608401612079565b9087015285526080810151602086015260a0810151604086015260c0810151606086015260e081015164ffffffffff811681036101e15760808601526101008082015163ffffffff811681036101e15761259d946125939160a08901526125876101209761257b898701612079565b60c08b01528501612079565b60e08901528301612079565b9086015201612079565b9082015290565b906020828203126101e157815167ffffffffffffffff81116101e157612229920161222c565b806125f457507f000000000000000000000000000000000000000000000000000000000000000090565b6001810361262157507f000000000000000000000000000000000000000000000000000000000000000090565b6002810361264e57507f000000000000000000000000000000000000000000000000000000000000000090565b6003810361267b57507f000000000000000000000000000000000000000000000000000000000000000090565b600481036126a857507f000000000000000000000000000000000000000000000000000000000000000090565b600581036126d557507f000000000000000000000000000000000000000000000000000000000000000090565b6006810361270257507f000000000000000000000000000000000000000000000000000000000000000090565b60070361272d577f000000000000000000000000000000000000000000000000000000000000000090565b7fc1ab6dc1000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361279457565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163014806128cf575b15612828577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff821117611e7e5760405251902090565b507f000000000000000000000000000000000000000000000000000000000000000046146127ff565b7f000000000000000000000000000000000000000000000000000000000000000061292281611eed565b906129306040519283611eca565b80825261293c81611eed565b601f196020840191013682378251156120a7577f000000000000000000000000000000000000000000000000000000000000000090528151600110156120a7577f000000000000000000000000000000000000000000000000000000000000000060408301526002811115612b2c578151600210156120a7577f000000000000000000000000000000000000000000000000000000000000000060608301526003811115612b2c578151600310156120a7577f0000000000000000000000000000000000000000000000000000000000000000608083015260049081811115612b27578251821015612b14577f000000000000000000000000000000000000000000000000000000000000000060a08401526005811115612b2757825160051015612b14577f000000000000000000000000000000000000000000000000000000000000000060c08401526006811115612b2757825160061015612b14576007907f000000000000000000000000000000000000000000000000000000000000000060e085015211612acc575090565b815160071015612b0157507f000000000000000000000000000000000000000000000000000000000000000061010082015290565b603290634e487b7160e01b5f525260245ffd5b603282634e487b7160e01b5f525260245ffd5b505090565b5090565b9190820180921161239557565b90670429d069189e00009182810292818404149015171561239557565b906127109182810292818404149015171561239557565b8181029291811591840414171561239557565b8115612b8e570490565b634e487b7160e01b5f52601260045260245ffd5b90670de0b6b3a764000090818103612bb957505090565b671bc16d674ec800008103612bd45750508061222991612c2d565b673782dace9d9000008103612bf8575050612bf28161222992612c2d565b80612c2d565b612c02919261308f565b906001612c0e83612b5a565b915f198301040190151502600181018091116123955761222991612b30565b90612c3791612b71565b6001670de0b6b3a76400005f19830104019015150290565b60ff8114612ca35760ff811690601f8211612c7b5760405191612c7183611eae565b8252602082015290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040515f815f5491612cb583612041565b80835292602090600190818116908115612d3e5750600114612ce0575b505061222992500382611eca565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b828410612d2657506122299450505081016020015f80612cd2565b85548785018301529485019486945092810192612d0b565b9050602093506122299592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f80612cd2565b60ff8114612da35760ff811690601f8211612c7b5760405191612c7183611eae565b506040515f81600191600154612db881612041565b8084529360209160018116908115612d3e5750600114612de057505061222992500382611eca565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b828410612e2757506122299450505081016020015f80612cd2565b85548785018301529485019486945092810192612e0c565b670de0b6b3a764000091808303612e565750905090565b8290671bc16d674ec800008103612e735750508061239191612b71565b673782dace9d9000008103612e975750612e908261239193612b71565b0480612b71565b9050612ea29161308f565b612eab81612b5a565b60015f1993848301040190151502906001820180831161239557811015612ed3575050505f90565b030190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411612f5c579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa1561217a575f5173ffffffffffffffffffffffffffffffffffffffff811615612f5257905f905f90565b505f906001905f90565b5050505f9160039190565b600481101561202d5780612f79575050565b60018103612fa9577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b60028103612fdd57507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600314612fe75750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90801561304357670de0b6b3a764000091828102928184041490151715612395576001905f19830104019015150290565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b8015612b8e576ec097ce7bc90715b34b9f10000000000590565b8115612b8e570590565b9080156139b85781156139b2578160ff1c61398a57770bce5086492111aea88f4bb1ca6bcf584181ea8059f765328110156139625781670c7d713b49da00001280613951575b156135ee57670de0b6b3a7640000916ec097ce7bc90715b34b9f100000000090613128908402828101907fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f000000000018302613085565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b918082818507020592050201670de0b6b3a7640000905b057ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc000081811315806135db575b156135b3578190821215806135a0575b15613578575f915f8112613569575b506064906806f05b59d3b20000008112613506577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e0000000168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac620000008112156134cd575b6856bc75e2d631000000811215613493575b682b5e3af16b1880000081121561345b575b6815af1d78b58c400000811215613423575b680ad78ebc5ac62000008112156133ec575b828112156133b5575b6802b5e3af16b188000081121561337e575b68015af1d78b58c40000811215613347575b60028382800205056003848383020505600485848302050585600581868402050560068287830205056007838883020505906008848984020505926009858a8602050595600a868b8902050597600b878c8b02050599600c888d8d0205059b01010101010101010101010102050205905f14612229576122299061306b565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000849201920205906132c8565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000849201920205906132b6565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000849201920205906132a4565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e000008492019202059061329b565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000084920192020590613289565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000084920192020590613277565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000084920192020590613265565b6e01855144814a7ff805980ff008400091507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000001613253565b6803782dace9d90000008112613556577ffffffffffffffffffffffffffffffffffffffffffffffffc87d25316270000000168056bc75e2d63100000826b1425982cf597cd205cef73809261323e565b68056bc75e2d631000008260019261323e565b600192505f03905060646131e2565b7fd4794efd000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156131d3565b7fa2f9f7e3000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156131c3565b81670de0b6b3a7640000925f9184811261393b575b506064905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000821215613910575b73011798004d755d3c8bc8e03204cf44619e0000008212156138ef575b820290808302906e01855144814a7ff805980ff008400090818312156138cc575b50506b02df0ab5a80a22c61ab5a700808212156138ac575b50693f1fce3da636ea5cf8508082121561388c575b50690127fa27722cc06cc5e28082121561386c575b5068280e60114edb805d038082121561384c575b50680ebc5fb4174612111080821215613835575b506808f00f760a4b2db55d80821215613815575b506806f5f1775788937937808212156137f5575b506806248f33704b286603808212156137d6575b506805c548670b9510e7ac808212156137b7575b5061376468056bc75e2d6310000091827ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000818301920102613085565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b0105905f146137b2575f035b02613197565b6137ac565b68056bc75e2d631000006756bc75e2d63100009202059101905f613728565b68056bc75e2d6310000067ad78ebc5ac6200009202059101905f613714565b68056bc75e2d6310000068015af1d78b58c400009202059101905f613700565b68056bc75e2d631000006802b5e3af16b18800009202059101905f6136ec565b68056bc75e2d63100000809202059101905f6136d8565b68056bc75e2d63100000680ad78ebc5ac62000009202059101905f6136c4565b68056bc75e2d631000006815af1d78b58c4000009202059101905f6136b0565b68056bc75e2d63100000682b5e3af16b188000009202059101905f61369b565b68056bc75e2d631000006856bc75e2d6310000009202059101905f613686565b68ad78ebc5ac62000000925069021e19e0c9bab240000002059101905f8061366e565b906b1425982cf597cd205cef73806803782dace9d90000009105910161364d565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b2000000613630565b9050613947915061306b565b6001906064613603565b50670f43fc2c04ee000082126130d5565b7fd8317311000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f022701e0000000000000000000000000000000000000000000000000000000005f5260045ffd5b50505f90565b5050670de0b6b3a76400009056fea26469706673582212203ec0118ae17c0f0adba7459b5c62781ac22adb46f73c1467746703ba70b9c43764736f6c634300081b0033c2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b", + "deployedBytecode": "0x60806040526004361015610011575f80fd5b5f358060e01c908163193ad50f146111255781632f2770db14610f5e575080633f819b6f14610f2f57806344f6fec714610e7557806353a72f7e14610d1757806354fd4d5014610c395780636634b75314610bed578063673a2a1f14610b4e5780636c57f5a914610b2c57806378da80cb14610aec578063851c1bb314610a9c5780638d928af814610a4c5780638eec5d7014610a2f578063aaabadc51461096f578063db035ebc14610947578063e9d56e1914610907578063ec888061146108ed5763fed4cdda146100e2575f80fd5b346107ec576101806003193601126107ec5760043567ffffffffffffffff81116107ec5761011490369060040161126f565b60243567ffffffffffffffff81116107ec5761013490369060040161126f565b6044359167ffffffffffffffff83116107ec57366023840112156107ec578260040135906101618261128d565b9361016f60405195866111b5565b82855260208501906024829460071b820101903682116107ec57602401915b8183106108695750505060643567ffffffffffffffff81116107ec57366023820112156107ec578060040135906101c48261128d565b916101d260405193846111b5565b8083526024602084019160051b830101913683116107ec57602401905b8282106108595750505060607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c3601126107ec57604051936060850185811067ffffffffffffffff8211176107085760405260843573ffffffffffffffffffffffffffffffffffffffff811681036107ec57855260a43573ffffffffffffffffffffffffffffffffffffffff811681036107ec57602086015260c43573ffffffffffffffffffffffffffffffffffffffff811681036107ec576040860152610104359173ffffffffffffffffffffffffffffffffffffffff831683036107ec57610124359384151585036107ec576101443580151581036107ec576102f26112a5565b951515606087015215158552875191604051918260a081011067ffffffffffffffff60a0850111176107085790829160a06103a696959401604052825260208201938452604082019283526060820190815261034c61131a565b608083015260405194859460406020870152610375845160a06060890152610100880190611174565b90517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0878303016080880152611174565b925160a085015251917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08482030160c0850152602080845192838152019301905f5b8181106108405750505090608061042a9201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08483030160e0850152611174565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166040830152039061047a601f19928381018352826111b5565b6104aa6040519283602080820194610491866113de565b90805192839101825e015f8152039081018452836111b5565b6104b6610164356115e6565b908251156108185773ffffffffffffffffffffffffffffffffffffffff9251905ff5169384156107f0576104e86115b2565b845f525f60205260405f20600160ff1982541617905560015468010000000000000000811015610708578060016105229201600155611477565b81549060031b9073ffffffffffffffffffffffffffffffffffffffff88831b921b191617905560405195857f83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc5f80a261057961157b565b9073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156107ec57908794959392917feeec802f0000000000000000000000000000000000000000000000000000000086526101a48601908860048801526101a06024880152518091526101c4860194905f5b818110610740575050509473ffffffffffffffffffffffffffffffffffffffff85949381604061069c9563ffffffff5f9b60e43560448c01521660648a01528a60848a01528281511660a48a01528260208201511660c48a015201511660e4870152166101048501526101248401906060809180511515845260208101511515602085015260408101511515604085015201511515910152565b03818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610735576106ee575b602090604051908152f35b67ffffffffffffffff8211610708576020916040526106e3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040513d5f823e3d90fd5b91809897509590929394955173ffffffffffffffffffffffffffffffffffffffff815116825260208101519060028210156107bf5782606060809260209485600197015273ffffffffffffffffffffffffffffffffffffffff604082015116604084015201511515606082015201980191019189969795949392610602565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f80fd5b7f741752c2000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4ca249dc000000000000000000000000000000000000000000000000000000005f5260045ffd5b82518552869550602094850194909201916001016103e8565b81358152602091820191016101ef565b6080833603126107ec576040519061088082611199565b73ffffffffffffffffffffffffffffffffffffffff843581811681036107ec578352602085013560028110156107ec576020840152604085013590811681036107ec576040830152606090818501359283151584036107ec5760809360209382015281520192019161018e565b346107ec575f6003193601126107ec5760206040515f8152f35b346107ec575f6003193601126107ec57602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107ec575f6003193601126107ec57602061096161157b565b63ffffffff60405191168152f35b346107ec575f6003193601126107ec576040517faaabadc500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa908115610735576020925f92610a00575b5060405191168152f35b610a21919250833d8511610a28575b610a1981836111b5565b81019061154f565b90836109f6565b503d610a0f565b346107ec575f6003193601126107ec576020600154604051908152f35b346107ec575f6003193601126107ec57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107ec5760206003193601126107ec576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036107ec57610ae46020916114d9565b604051908152f35b346107ec575f6003193601126107ec57602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107ec575f6003193601126107ec57602060ff600254166040519015158152f35b346107ec575f6003193601126107ec57604051806001916001549283825260208092019360015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6925f905b828210610bc257610bbe86610bb2818a03826111b5565b6040519182918261121e565b0390f35b845473ffffffffffffffffffffffffffffffffffffffff168752958601959383019390830190610b9b565b346107ec5760206003193601126107ec5760043573ffffffffffffffffffffffffffffffffffffffff81168091036107ec575f525f602052602060ff60405f2054166040519015158152f35b346107ec575f6003193601126107ec576040516004545f82610c5a836112c9565b91828252602093600190856001821691825f14610cf7575050600114610c9c575b50610c88925003836111b5565b610bbe604051928284938452830190611174565b84915060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b905f915b858310610cdf575050610c88935082010185610c7b565b80548389018501528794508693909201918101610cc8565b60ff191685820152610c8895151560051b8501019250879150610c7b9050565b346107ec5760406003193601126107ec576004356024803560019260015480821015610e4d5780610d48848461146a565b11610e0c575b50610d588261128d565b92610d6660405194856111b5565b828452610d728361128d565b91601f19602093013660208701375f5b848110610d975760405180610bbe888261121e565b610da9610da4828461146a565b611477565b9054908751831015610de05760031b1c73ffffffffffffffffffffffffffffffffffffffff16600582901b87018501528601610d82565b847f4e487b71000000000000000000000000000000000000000000000000000000005f5260326004525ffd5b908092508103908111610e20579084610d4e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e23d035000000000000000000000000000000000000000000000000000000005f5260045ffd5b346107ec5760406003193601126107ec5760043567ffffffffffffffff81116107ec57366023820112156107ec576055600b610ebd60209336906024816004013591016111d8565b604051610eed818680820194610ed2866113de565b90805192839101825e015f815203601f1981018352826111b5565b519020610efb6024356115e6565b604051916040830152848201523081520160ff81532073ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346107ec575f6003193601126107ec57610bbe610f4a61131a565b604051918291602083526020830190611174565b346107ec575f6003193601126107ec577fffffffff00000000000000000000000000000000000000000000000000000000610f9991166114d9565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156107355784925f92611103575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610735575f926110cc575b5050156110a4576110716115b2565b600160ff1960025416176002557f432acbfd662dbb5d8b378384a67159b47ca9d0f1b79f97cf64cf8585fa362d505f80a1005b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d83116110fc575b6110e381836111b5565b810103126107ec575180151581036107ec578180611062565b503d6110d9565b606491925061111e90843d8611610a2857610a1981836111b5565b9190611011565b346107ec575f6003193601126107ec57608061113f6112a5565b61117260405180926060809180511515845260208101511515602085015260408101511515604085015201511515910152565bf35b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6080810190811067ffffffffffffffff82111761070857604052565b90601f601f19910116810190811067ffffffffffffffff82111761070857604052565b92919267ffffffffffffffff821161070857604051916112026020601f19601f84011601846111b5565b8294818452818301116107ec578281602093845f960137010152565b60209060206040818301928281528551809452019301915f5b828110611245575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101611237565b9080601f830112156107ec5781602061128a933591016111d8565b90565b67ffffffffffffffff81116107085760051b60200190565b604051906112b282611199565b5f6060838281528260208201528260408201520152565b90600182811c92168015611310575b60208310146112e357565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916112d8565b604051905f826005549161132d836112c9565b808352926020906001908181169081156113b9575060011461135a575b5050611358925003836111b5565b565b91509260055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0935f925b8284106113a157506113589450505081016020015f8061134a565b85548885018301529485019487945092810192611386565b90506020935061135895925060ff1991501682840152151560051b8201015f8061134a565b6003545f92916113ed826112c9565b91600190818116908115611457575060011461140857505050565b909192935060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b905f915b848310611444575050500190565b8181602092548587015201920191611436565b60ff191683525050811515909102019150565b91908201809211610e2057565b6001548110156114ac5760015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176107085760405251902090565b908160209103126107ec575173ffffffffffffffffffffffffffffffffffffffff811681036107ec5790565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff81164210156115ad5790565b505f90565b60ff600254166115be57565b7f75884cda000000000000000000000000000000000000000000000000000000005f5260045ffd5b604051602081019133835246604083015260608201526060815261160981611199565b5190209056fea26469706673582212208f161342a59821cfe8bcf58b3a2e65ee6e23527ad9e05d36bd40767f1f181b5064736f6c634300081b0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} \ No newline at end of file diff --git a/v3/scripts/20250221-protocol-fee-controller-migration/build-info/ProtocolFeeControllerMigration.json b/v3/scripts/20250221-protocol-fee-controller-migration/build-info/ProtocolFeeControllerMigration.json index c0632f82..73fb102d 100644 --- a/v3/scripts/20250221-protocol-fee-controller-migration/build-info/ProtocolFeeControllerMigration.json +++ b/v3/scripts/20250221-protocol-fee-controller-migration/build-info/ProtocolFeeControllerMigration.json @@ -1 +1 @@ -{"id":"1fcc72a06889eaf8e0e77f301d80b910","_format":"hh-sol-build-info-1","solcVersion":"0.8.27","solcLongVersion":"0.8.27+commit.40a35a09","input":{"language":"Solidity","sources":{"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthorizer } from \"../vault/IAuthorizer.sol\";\n\ninterface IBasicAuthorizer is IAuthorizer {\n // solhint-disable-next-line func-name-mixedcase\n function DEFAULT_ADMIN_ROLE() external view returns (bytes32);\n\n function grantRole(bytes32 role, address account) external;\n\n function revokeRole(bytes32 role, address account) external;\n\n function renounceRole(bytes32 role, address account) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Simple interface for permissioned calling of external functions.\ninterface IAuthentication {\n /// @notice The sender does not have permission to call a function.\n error SenderNotAllowed();\n\n /**\n * @notice Returns the action identifier associated with the external function described by `selector`.\n * @param selector The 4-byte selector of the permissioned function\n * @return actionId The computed actionId\n */\n function getActionId(bytes4 selector) external view returns (bytes32 actionId);\n}\n"},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice General interface for token exchange rates.\ninterface IRateProvider {\n /**\n * @notice An 18 decimal fixed point number representing the exchange rate of one token to another related token.\n * @dev The meaning of this rate depends on the context. Note that there may be an error associated with a token\n * rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface\n * does not take a rounding direction or return an error, so great care must be taken when interpreting and using\n * rates in downstream computations.\n *\n * @return rate The current token rate\n */\n function getRate() external view returns (uint256 rate);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Interface to the Vault's permission system.\ninterface IAuthorizer {\n /**\n * @notice Returns true if `account` can perform the action described by `actionId` in the contract `where`.\n * @param actionId Identifier for the action to be performed\n * @param account Account trying to perform the action\n * @param where Target contract for the action\n * @return success True if the action is permitted\n */\n function canPerform(bytes32 actionId, address account, address where) external view returns (bool success);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n// Explicitly import VaultTypes structs because we expect this interface to be heavily used by external developers.\n// Internally, when this list gets too long, we usually just do a simple import to keep things tidy.\nimport {\n TokenConfig,\n LiquidityManagement,\n PoolSwapParams,\n AfterSwapParams,\n HookFlags,\n AddLiquidityKind,\n RemoveLiquidityKind,\n SwapKind\n} from \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for pool hooks.\n * @dev Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that\n * they are called in the correct order, and with the correct arguments. To maintain this security, these functions\n * should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`,\n * then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)\n */\ninterface IHooks {\n /***************************************************************************\n Register\n ***************************************************************************/\n\n /**\n * @notice Hook executed when a pool is registered with a non-zero hooks contract.\n * @dev Returns true if registration was successful, and false to revert the pool registration.\n * Make sure this function is properly implemented (e.g. check the factory, and check that the\n * given pool is from the factory). The Vault address will be msg.sender.\n *\n * @param factory Address of the pool factory (contract deploying the pool)\n * @param pool Address of the pool\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param liquidityManagement Liquidity management flags indicating which functions are enabled\n * @return success True if the hook allowed the registration, false otherwise\n */\n function onRegister(\n address factory,\n address pool,\n TokenConfig[] memory tokenConfig,\n LiquidityManagement calldata liquidityManagement\n ) external returns (bool success);\n\n /**\n * @notice Return the set of hooks implemented by the contract.\n * @dev The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined\n * (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero).\n * `onRegister` is the only \"mandatory\" hook.\n *\n * @return hookFlags Flags indicating which hooks the contract supports\n */\n function getHookFlags() external view returns (HookFlags memory hookFlags);\n\n /***************************************************************************\n Initialize\n ***************************************************************************/\n\n /**\n * @notice Hook executed before pool initialization.\n * @dev Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param exactAmountsIn Exact amounts of input tokens\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with initialization\n */\n function onBeforeInitialize(uint256[] memory exactAmountsIn, bytes memory userData) external returns (bool success);\n\n /**\n * @notice Hook to be executed after pool initialization.\n * @dev Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param exactAmountsIn Exact amounts of input tokens\n * @param bptAmountOut Amount of pool tokens minted during initialization\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool accepts the initialization results\n */\n function onAfterInitialize(\n uint256[] memory exactAmountsIn,\n uint256 bptAmountOut,\n bytes memory userData\n ) external returns (bool success);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Hook to be executed before adding liquidity.\n * @dev Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param maxAmountsInScaled18 Maximum amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeAddLiquidity(\n address router,\n address pool,\n AddLiquidityKind kind,\n uint256[] memory maxAmountsInScaled18,\n uint256 minBptAmountOut,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success);\n\n /**\n * @notice Hook to be executed after adding liquidity.\n * @dev Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param amountsInScaled18 Actual amounts of tokens added, sorted in token registration order\n * @param amountsInRaw Actual amounts of tokens added, sorted in token registration order\n * @param bptAmountOut Amount of pool tokens minted\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Additional (optional) data provided by the user\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook\n */\n function onAfterAddLiquidity(\n address router,\n address pool,\n AddLiquidityKind kind,\n uint256[] memory amountsInScaled18,\n uint256[] memory amountsInRaw,\n uint256 bptAmountOut,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success, uint256[] memory hookAdjustedAmountsInRaw);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Hook to be executed before removing liquidity.\n * @dev Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The type of remove liquidity operation (e.g., proportional, custom)\n * @param maxBptAmountIn Maximum amount of input pool tokens\n * @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeRemoveLiquidity(\n address router,\n address pool,\n RemoveLiquidityKind kind,\n uint256 maxBptAmountIn,\n uint256[] memory minAmountsOutScaled18,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success);\n\n /**\n * @notice Hook to be executed after removing liquidity.\n * @dev Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The type of remove liquidity operation (e.g., proportional, custom)\n * @param bptAmountIn Amount of pool tokens to burn\n * @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n * @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Additional (optional) data provided by the user\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook\n */\n function onAfterRemoveLiquidity(\n address router,\n address pool,\n RemoveLiquidityKind kind,\n uint256 bptAmountIn,\n uint256[] memory amountsOutScaled18,\n uint256[] memory amountsOutRaw,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success, uint256[] memory hookAdjustedAmountsOutRaw);\n\n /***************************************************************************\n Swap\n ***************************************************************************/\n\n /**\n * @notice Called before a swap to give the Pool an opportunity to perform actions.\n * @dev Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see PoolSwapParams for struct definition)\n * @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeSwap(PoolSwapParams calldata params, address pool) external returns (bool success);\n\n /**\n * @notice Called after a swap to perform further actions once the balances have been updated by the swap.\n * @dev Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should\n * use the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see above for struct definition)\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook\n */\n function onAfterSwap(\n AfterSwapParams calldata params\n ) external returns (bool success, uint256 hookAdjustedAmountCalculatedRaw);\n\n /**\n * @notice Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\n * @dev Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see PoolSwapParams for struct definition)\n * @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n * @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage, for reference\n * @return success True if the pool wishes to proceed with settlement\n * @return dynamicSwapFeePercentage Value of the swap fee percentage, as an 18-decimal FP value\n */\n function onComputeDynamicSwapFeePercentage(\n PoolSwapParams calldata params,\n address pool,\n uint256 staticSwapFeePercentage\n ) external view returns (bool success, uint256 dynamicSwapFeePercentage);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IVault } from \"./IVault.sol\";\n\n/// @notice Contract that handles protocol and pool creator fees for the Vault.\ninterface IProtocolFeeController {\n /**\n * @notice Emitted when the protocol swap fee percentage is updated.\n * @param swapFeePercentage The updated protocol swap fee percentage\n */\n event GlobalProtocolSwapFeePercentageChanged(uint256 swapFeePercentage);\n\n /**\n * @notice Emitted when the protocol yield fee percentage is updated.\n * @param yieldFeePercentage The updated protocol yield fee percentage\n */\n event GlobalProtocolYieldFeePercentageChanged(uint256 yieldFeePercentage);\n\n /**\n * @notice Emitted when the protocol swap fee percentage is updated for a specific pool.\n * @param pool The pool whose protocol swap fee will be changed\n * @param swapFeePercentage The updated protocol swap fee percentage\n */\n event ProtocolSwapFeePercentageChanged(address indexed pool, uint256 swapFeePercentage);\n\n /**\n * @notice Emitted when the protocol yield fee percentage is updated for a specific pool.\n * @param pool The pool whose protocol yield fee will be changed\n * @param yieldFeePercentage The updated protocol yield fee percentage\n */\n event ProtocolYieldFeePercentageChanged(address indexed pool, uint256 yieldFeePercentage);\n\n /**\n * @notice Emitted when the pool creator swap fee percentage of a pool is updated.\n * @param pool The pool whose pool creator swap fee will be changed\n * @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage for the pool\n */\n event PoolCreatorSwapFeePercentageChanged(address indexed pool, uint256 poolCreatorSwapFeePercentage);\n\n /**\n * @notice Emitted when the pool creator yield fee percentage of a pool is updated.\n * @param pool The pool whose pool creator yield fee will be changed\n * @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage for the pool\n */\n event PoolCreatorYieldFeePercentageChanged(address indexed pool, uint256 poolCreatorYieldFeePercentage);\n\n /**\n * @notice Logs the collection of protocol swap fees in a specific token and amount.\n * @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n * in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass\n * multiple operations.\n *\n * @param pool The pool on which the swap fee was charged\n * @param token The token in which the swap fee was charged\n * @param amount The amount of the token collected in fees\n */\n event ProtocolSwapFeeCollected(address indexed pool, IERC20 indexed token, uint256 amount);\n\n /**\n * @notice Logs the collection of protocol yield fees in a specific token and amount.\n * @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n * in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass\n * multiple operations.\n *\n * @param pool The pool on which the yield fee was charged\n * @param token The token in which the yield fee was charged\n * @param amount The amount of the token collected in fees\n */\n event ProtocolYieldFeeCollected(address indexed pool, IERC20 indexed token, uint256 amount);\n\n /**\n * @notice Logs the withdrawal of protocol fees in a specific token and amount.\n * @param pool The pool from which protocol fees are being withdrawn\n * @param token The token being withdrawn\n * @param recipient The recipient of the funds\n * @param amount The amount of the fee token that was withdrawn\n */\n event ProtocolFeesWithdrawn(address indexed pool, IERC20 indexed token, address indexed recipient, uint256 amount);\n\n /**\n * @notice Logs the withdrawal of pool creator fees in a specific token and amount.\n * @param pool The pool from which pool creator fees are being withdrawn\n * @param token The token being withdrawn\n * @param recipient The recipient of the funds (the pool creator if permissionless, or another account)\n * @param amount The amount of the fee token that was withdrawn\n */\n event PoolCreatorFeesWithdrawn(\n address indexed pool,\n IERC20 indexed token,\n address indexed recipient,\n uint256 amount\n );\n\n /**\n * @notice Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\n * @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n * equal the current global swap fee percentage.\n *\n * @param pool The pool being registered\n * @param aggregateSwapFeePercentage The initial aggregate swap fee percentage\n * @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially\n */\n event InitialPoolAggregateSwapFeePercentage(\n address indexed pool,\n uint256 aggregateSwapFeePercentage,\n bool isProtocolFeeExempt\n );\n\n /**\n * @notice Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\n * @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n * equal the current global yield fee percentage.\n *\n * @param pool The pool being registered\n * @param aggregateYieldFeePercentage The initial aggregate yield fee percentage\n * @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially\n */\n event InitialPoolAggregateYieldFeePercentage(\n address indexed pool,\n uint256 aggregateYieldFeePercentage,\n bool isProtocolFeeExempt\n );\n\n /**\n * @notice Emitted for pools registered with creators.\n * @dev The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this\n * simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee\n * counterpart also include the protocol fee exemption flag, we might as well include it here as well.\n *\n * @param pool The address of the pool being registered\n * @param poolCreator The address of the pool creator (non-zero, or the event would not be emitted)\n * @param protocolFeeExempt True if the pool is initially exempt from protocol fees\n */\n event PoolWithCreatorRegistered(address indexed pool, address indexed poolCreator, bool protocolFeeExempt);\n\n /**\n * @notice Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\n * @dev Note that this is checked for both the global and pool-specific protocol swap fee percentages.\n */\n error ProtocolSwapFeePercentageTooHigh();\n\n /**\n * @notice Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\n * @dev Note that this is checked for both the global and pool-specific protocol yield fee percentages.\n */\n error ProtocolYieldFeePercentageTooHigh();\n\n /**\n * @notice Error raised if there is no pool creator on a withdrawal attempt from the given pool.\n * @param pool The pool with no creator\n */\n error PoolCreatorNotRegistered(address pool);\n\n /**\n * @notice Error raised if the wrong account attempts to withdraw pool creator fees.\n * @param caller The account attempting to withdraw pool creator fees\n * @param pool The pool the caller tried to withdraw from\n */\n error CallerIsNotPoolCreator(address caller, address pool);\n\n /// @notice Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\n error PoolCreatorFeePercentageTooHigh();\n\n /**\n * @notice Get the address of the main Vault contract.\n * @return vault The Vault address\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Collects aggregate fees from the Vault for a given pool.\n * @param pool The pool with aggregate fees\n */\n function collectAggregateFees(address pool) external;\n\n /**\n * @notice Getter for the current global protocol swap fee.\n * @return protocolSwapFeePercentage The global protocol swap fee percentage\n */\n function getGlobalProtocolSwapFeePercentage() external view returns (uint256 protocolSwapFeePercentage);\n\n /**\n * @notice Getter for the current global protocol yield fee.\n * @return protocolYieldFeePercentage The global protocol yield fee percentage\n */\n function getGlobalProtocolYieldFeePercentage() external view returns (uint256 protocolYieldFeePercentage);\n\n /**\n * @notice Getter for pool registration flag.\n * @param pool The address of the pool\n * @return isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\n */\n function isPoolRegistered(address pool) external view returns (bool);\n\n /**\n * @notice Getter for the current protocol swap fee for a given pool.\n * @param pool The address of the pool\n * @return protocolSwapFeePercentage The protocol swap fee percentage for the given pool\n * @return isOverride True if the protocol fee has been overridden\n */\n function getPoolProtocolSwapFeeInfo(\n address pool\n ) external view returns (uint256 protocolSwapFeePercentage, bool isOverride);\n\n /**\n * @notice Getter for the current protocol yield fee for a given pool.\n * @param pool The address of the pool\n * @return protocolYieldFeePercentage The protocol yield fee percentage for the given pool\n * @return isOverride True if the protocol fee has been overridden\n */\n function getPoolProtocolYieldFeeInfo(\n address pool\n ) external view returns (uint256 protocolYieldFeePercentage, bool isOverride);\n\n /**\n * @notice Getter for the current pool creator swap fee percentage for a given pool.\n * @param pool The address of the pool\n * @return poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\n */\n function getPoolCreatorSwapFeePercentage(address pool) external view returns (uint256);\n\n /**\n * @notice Getter for the current pool creator swap fee percentage for a given pool.\n * @param pool The address of the pool\n * @return poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\n */\n function getPoolCreatorYieldFeePercentage(address pool) external view returns (uint256);\n\n /**\n * @notice Returns the amount of each pool token allocated to the protocol for withdrawal.\n * @dev Includes both swap and yield fees.\n * @param pool The address of the pool on which fees were collected\n * @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order\n */\n function getProtocolFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts);\n\n /**\n * @notice Returns the amount of each pool token allocated to the pool creator for withdrawal.\n * @dev Includes both swap and yield fees.\n * @param pool The address of the pool on which fees were collected\n * @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order\n */\n function getPoolCreatorFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts);\n\n /**\n * @notice Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\n * @dev Not tied to any particular pool; this just performs the low-level \"additive fee\" calculation. Note that\n * pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are\n * stored in the Vault with 24-bit precision, this will truncate any values that require greater precision.\n * It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee\n * components, but the truncation ensures it will not revert for any valid set of fee percentages.\n *\n * See example below:\n *\n * tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60%\n * totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000\n * protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400\n * creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600\n * creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360\n * lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\n *\n * @param protocolFeePercentage The protocol portion of the aggregate fee percentage\n * @param poolCreatorFeePercentage The pool creator portion of the aggregate fee percentage\n * @return aggregateFeePercentage The computed aggregate percentage\n */\n function computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) external pure returns (uint256 aggregateFeePercentage);\n\n /**\n * @notice Override the protocol swap fee percentage for a specific pool.\n * @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n * from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n *\n * @param pool The pool for which we are setting the protocol swap fee\n */\n function updateProtocolSwapFeePercentage(address pool) external;\n\n /**\n * @notice Override the protocol yield fee percentage for a specific pool.\n * @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n * from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n *\n * @param pool The pool for which we are setting the protocol yield fee\n */\n function updateProtocolYieldFeePercentage(address pool) external;\n\n /***************************************************************************\n Permissioned Functions\n ***************************************************************************/\n\n /**\n * @notice Add pool-specific entries to the protocol swap and yield percentages.\n * @dev This must be called from the Vault during pool registration. It will initialize the pool to the global\n * protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate\n * fee percentages, based on an initial pool creator fee of 0.\n *\n * @param pool The address of the pool being registered\n * @param poolCreator The address of the pool creator (or 0 if there won't be a pool creator fee)\n * @param protocolFeeExempt If true, the pool is initially exempt from protocol fees\n * @return aggregateSwapFeePercentage The initial aggregate swap fee percentage\n * @return aggregateYieldFeePercentage The initial aggregate yield fee percentage\n */\n function registerPool(\n address pool,\n address poolCreator,\n bool protocolFeeExempt\n ) external returns (uint256 aggregateSwapFeePercentage, uint256 aggregateYieldFeePercentage);\n\n /**\n * @notice Set the global protocol swap fee percentage, used by standard pools.\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage\n */\n function setGlobalProtocolSwapFeePercentage(uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Set the global protocol yield fee percentage, used by standard pools.\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage\n */\n function setGlobalProtocolYieldFeePercentage(uint256 newProtocolYieldFeePercentage) external;\n\n /**\n * @notice Override the protocol swap fee percentage for a specific pool.\n * @param pool The address of the pool for which we are setting the protocol swap fee\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage for the pool\n */\n function setProtocolSwapFeePercentage(address pool, uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Override the protocol yield fee percentage for a specific pool.\n * @param pool The address of the pool for which we are setting the protocol yield fee\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage for the pool\n */\n function setProtocolYieldFeePercentage(address pool, uint256 newProtocolYieldFeePercentage) external;\n\n /**\n * @notice Assigns a new pool creator swap fee percentage to the specified pool.\n * @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n * the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n * pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n *\n * @param pool The address of the pool for which the pool creator fee will be changed\n * @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage to apply to the pool\n */\n function setPoolCreatorSwapFeePercentage(address pool, uint256 poolCreatorSwapFeePercentage) external;\n\n /**\n * @notice Assigns a new pool creator yield fee percentage to the specified pool.\n * @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n * the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n * pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n *\n * @param pool The address of the pool for which the pool creator fee will be changed\n * @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage to apply to the pool\n */\n function setPoolCreatorYieldFeePercentage(address pool, uint256 poolCreatorYieldFeePercentage) external;\n\n /**\n * @notice Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\n * @dev Sends swap and yield protocol fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n */\n function withdrawProtocolFees(address pool, address recipient) external;\n\n /**\n * @notice Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\n * @dev Sends swap and yield protocol fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n * @param token Token to withdraw\n */\n function withdrawProtocolFeesForToken(address pool, address recipient, IERC20 token) external;\n\n /**\n * @notice Withdraw collected pool creator fees for a given pool. This is a permissioned function.\n * @dev Sends swap and yield pool creator fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n */\n function withdrawPoolCreatorFees(address pool, address recipient) external;\n\n /**\n * @notice Withdraw collected pool creator fees for a given pool.\n * @dev Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable\n * value, this function is permissionless.\n *\n * @param pool The pool on which fees were collected\n */\n function withdrawPoolCreatorFees(address pool) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"../solidity-utils/helpers/IAuthentication.sol\";\nimport { IVaultExtension } from \"./IVaultExtension.sol\";\nimport { IVaultErrors } from \"./IVaultErrors.sol\";\nimport { IVaultEvents } from \"./IVaultEvents.sol\";\nimport { IVaultAdmin } from \"./IVaultAdmin.sol\";\nimport { IVaultMain } from \"./IVaultMain.sol\";\n\n/// @notice Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries.\ninterface IVault is IVaultMain, IVaultExtension, IVaultAdmin, IVaultErrors, IVaultEvents, IAuthentication {\n /// @return vault The main Vault address.\n function vault() external view override(IVaultAdmin, IVaultExtension) returns (IVault);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IVault } from \"./IVault.sol\";\n\n/**\n * @notice Interface for functions defined on the `VaultAdmin` contract.\n * @dev `VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations,\n * as two delegate calls add gas to each call. Most of the permissioned calls are here.\n */\ninterface IVaultAdmin {\n /*******************************************************************************\n Constants and immutables\n *******************************************************************************/\n\n /**\n * @notice Returns the main Vault address.\n * @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n * @return vault The address of the main Vault\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Returns the Vault's pause window end time.\n * @dev This value is immutable, and represents the timestamp after which the Vault can no longer be paused\n * by governance. Balancer timestamps are 32 bits.\n *\n * @return pauseWindowEndTime The timestamp when the Vault's pause window ends\n */\n function getPauseWindowEndTime() external view returns (uint32 pauseWindowEndTime);\n\n /**\n * @notice Returns the Vault's buffer period duration.\n * @dev This value is immutable. It represents the period during which, if paused, the Vault will remain paused.\n * This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer\n * timestamps are 32 bits.\n *\n * @return bufferPeriodDuration The length of the buffer period in seconds\n */\n function getBufferPeriodDuration() external view returns (uint32 bufferPeriodDuration);\n\n /**\n * @notice Returns the Vault's buffer period end time.\n * @dev This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer\n * timestamps are 32 bits.\n *\n * @return bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused\n */\n function getBufferPeriodEndTime() external view returns (uint32 bufferPeriodEndTime);\n\n /**\n * @notice Get the minimum number of tokens in a pool.\n * @dev We expect the vast majority of pools to be 2-token.\n * @return minTokens The minimum token count of a pool\n */\n function getMinimumPoolTokens() external pure returns (uint256 minTokens);\n\n /**\n * @notice Get the maximum number of tokens in a pool.\n * @return maxTokens The maximum token count of a pool\n */\n function getMaximumPoolTokens() external pure returns (uint256 maxTokens);\n\n /**\n * @notice Get the minimum total supply of pool tokens (BPT) for an initialized pool.\n * @dev This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT\n * is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\n *\n * @return poolMinimumTotalSupply The minimum total supply a pool can have after initialization\n */\n function getPoolMinimumTotalSupply() external pure returns (uint256 poolMinimumTotalSupply);\n\n /**\n * @notice Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\n * @dev This prevents buffers from being completely drained. When the buffer is initialized, this minimum number\n * of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal\n * to the Vault, as buffers are not tokenized.\n *\n * @return bufferMinimumTotalSupply The minimum total supply a buffer can have after initialization\n */\n function getBufferMinimumTotalSupply() external pure returns (uint256 bufferMinimumTotalSupply);\n\n /**\n * @notice Get the minimum trade amount in a pool operation.\n * @dev This limit is applied to the 18-decimal \"upscaled\" amount in any operation (swap, add/remove liquidity).\n * @return minimumTradeAmount The minimum trade amount as an 18-decimal floating point number\n */\n function getMinimumTradeAmount() external view returns (uint256 minimumTradeAmount);\n\n /**\n * @notice Get the minimum wrap amount in a buffer operation.\n * @dev This limit is applied to the wrap operation amount, in native underlying token decimals.\n * @return minimumWrapAmount The minimum wrap amount in native underlying token decimals\n */\n function getMinimumWrapAmount() external view returns (uint256 minimumWrapAmount);\n\n /*******************************************************************************\n Vault Pausing\n *******************************************************************************/\n\n /**\n * @notice Indicates whether the Vault is paused.\n * @dev If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that\n * ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not\n * also pause buffers (though we anticipate they would likely be paused and unpaused together). Call\n * `areBuffersPaused` to check the pause state of the buffers.\n *\n * @return vaultPaused True if the Vault is paused\n */\n function isVaultPaused() external view returns (bool vaultPaused);\n\n /**\n * @notice Returns the paused status, and end times of the Vault's pause window and buffer period.\n * @dev Balancer timestamps are 32 bits.\n * @return vaultPaused True if the Vault is paused\n * @return vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window\n * @return vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period\n */\n function getVaultPausedState()\n external\n view\n returns (bool vaultPaused, uint32 vaultPauseWindowEndTime, uint32 vaultBufferPeriodEndTime);\n\n /**\n * @notice Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\n * @dev This is a permissioned function that will only work during the Pause Window set during deployment.\n * Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing\n * the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers\n * are also paused (with `pauseVaultBuffers`).\n */\n function pauseVault() external;\n\n /**\n * @notice Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\n * @dev This is a permissioned function that will only work on a paused Vault within the Buffer Period set during\n * deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above,\n * ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse\n * `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\n */\n function unpauseVault() external;\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /**\n * @notice Pause the Pool: an emergency action which disables all pool functions.\n * @dev This is a permissioned function that will only work during the Pause Window set during pool factory\n * deployment.\n *\n * @param pool The pool being paused\n */\n function pausePool(address pool) external;\n\n /**\n * @notice Reverse a `pause` operation, and restore the Pool to normal functionality.\n * @dev This is a permissioned function that will only work on a paused Pool within the Buffer Period set during\n * deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\n *\n * @param pool The pool being unpaused\n */\n function unpausePool(address pool) external;\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Assigns a new static swap fee percentage to the specified pool.\n * @dev This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within\n * the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`.\n * Emits the SwapFeePercentageChanged event.\n *\n * @param pool The address of the pool for which the static swap fee will be changed\n * @param swapFeePercentage The new swap fee percentage to apply to the pool\n */\n function setStaticSwapFeePercentage(address pool, uint256 swapFeePercentage) external;\n\n /**\n * @notice Collects accumulated aggregate swap and yield fees for the specified pool.\n * @dev Fees are sent to the ProtocolFeeController address.\n * @param pool The pool on which all aggregate fees should be collected\n * @return swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n * @return yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order\n */\n function collectAggregateFees(\n address pool\n ) external returns (uint256[] memory swapFeeAmounts, uint256[] memory yieldFeeAmounts);\n\n /**\n * @notice Update an aggregate swap fee percentage.\n * @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n * for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n * fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n * that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n * Emits an `AggregateSwapFeePercentageChanged` event.\n *\n * @param pool The pool whose swap fee percentage will be updated\n * @param newAggregateSwapFeePercentage The new aggregate swap fee percentage\n */\n function updateAggregateSwapFeePercentage(address pool, uint256 newAggregateSwapFeePercentage) external;\n\n /**\n * @notice Update an aggregate yield fee percentage.\n * @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n * for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n * fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n * that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n * Emits an `AggregateYieldFeePercentageChanged` event.\n *\n * @param pool The pool whose yield fee percentage will be updated\n * @param newAggregateYieldFeePercentage The new aggregate yield fee percentage\n */\n function updateAggregateYieldFeePercentage(address pool, uint256 newAggregateYieldFeePercentage) external;\n\n /**\n * @notice Sets a new Protocol Fee Controller for the Vault.\n * @dev This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\n * @param newProtocolFeeController The address of the new Protocol Fee Controller\n */\n function setProtocolFeeController(IProtocolFeeController newProtocolFeeController) external;\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Enable recovery mode for a pool.\n * @dev This is a permissioned function. It enables a safe proportional withdrawal, with no external calls.\n * Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so\n * must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live\n * balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\n *\n * @param pool The address of the pool\n */\n function enableRecoveryMode(address pool) external;\n\n /**\n * @notice Disable recovery mode for a pool.\n * @dev This is a permissioned function. It re-syncs live balances (which could not be updated during\n * Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could\n * potentially fail if there is an issue with any associated Rate Providers.\n *\n * @param pool The address of the pool\n */\n function disableRecoveryMode(address pool) external;\n\n /*******************************************************************************\n Query Functionality\n *******************************************************************************/\n\n /**\n * @notice Disables query functionality on the Vault. Can only be called by governance.\n * @dev The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from\n * settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable\n * queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).\n * This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether\n * disabling queries is completely necessary; queries can still be re-enabled after this call.\n */\n function disableQuery() external;\n\n /**\n * @notice Disables query functionality permanently on the Vault. Can only be called by governance.\n * @dev Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\n */\n function disableQueryPermanently() external;\n\n /**\n * @notice Enables query functionality on the Vault. Can only be called by governance.\n * @dev Only works if queries are not permanently disabled.\n */\n function enableQuery() external;\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Indicates whether the Vault buffers are paused.\n * @dev When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true)\n * will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and\n * independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they\n * would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\n *\n * @return buffersPaused True if the Vault buffers are paused\n */\n function areBuffersPaused() external view returns (bool buffersPaused);\n\n /**\n * @notice Pauses native vault buffers globally.\n * @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n * `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not\n * possible to pause vault buffers individually.\n *\n * This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate\n * and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting\n * buffers, and vice versa.\n */\n function pauseVaultBuffers() external;\n\n /**\n * @notice Unpauses native vault buffers globally.\n * @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n * `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above,\n * ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`.\n * If the Vault was also paused, it will remain in that state until explicitly unpaused.\n *\n * This is a permissioned call.\n */\n function unpauseVaultBuffers() external;\n\n /**\n * @notice Initializes buffer for the given wrapped token.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param amountUnderlyingRaw Amount of underlying tokens that will be deposited into the buffer\n * @param amountWrappedRaw Amount of wrapped tokens that will be deposited into the buffer\n * @param minIssuedShares Minimum amount of shares to receive from the buffer, expressed in underlying token\n * native decimals\n * @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n * liquidity from the buffer\n * @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n * (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\n */\n function initializeBuffer(\n IERC4626 wrappedToken,\n uint256 amountUnderlyingRaw,\n uint256 amountWrappedRaw,\n uint256 minIssuedShares,\n address sharesOwner\n ) external returns (uint256 issuedShares);\n\n /**\n * @notice Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\n * @dev The buffer needs to be initialized beforehand.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param maxAmountUnderlyingInRaw Maximum amount of underlying tokens to add to the buffer. It is expressed in\n * underlying token native decimals\n * @param maxAmountWrappedInRaw Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n * token native decimals\n * @param exactSharesToIssue The value in underlying tokens that `sharesOwner` wants to add to the buffer,\n * in underlying token decimals\n * @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n * liquidity from the buffer\n * @return amountUnderlyingRaw Amount of underlying tokens deposited into the buffer\n * @return amountWrappedRaw Amount of wrapped tokens deposited into the buffer\n */\n function addLiquidityToBuffer(\n IERC4626 wrappedToken,\n uint256 maxAmountUnderlyingInRaw,\n uint256 maxAmountWrappedInRaw,\n uint256 exactSharesToIssue,\n address sharesOwner\n ) external returns (uint256 amountUnderlyingRaw, uint256 amountWrappedRaw);\n\n /**\n * @notice Removes liquidity from an internal ERC4626 buffer in the Vault.\n * @dev Only proportional exits are supported, and the sender has to be the owner of the shares.\n * This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint.\n *\n * Pre-conditions:\n * - The buffer needs to be initialized.\n * - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why\n * this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer.\n * - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\n *\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param sharesToRemove Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's\n * total shares. It is expressed in underlying token native decimals\n * @param minAmountUnderlyingOutRaw Minimum amount of underlying tokens to receive from the buffer. It is expressed\n * in underlying token native decimals\n * @param minAmountWrappedOutRaw Minimum amount of wrapped tokens to receive from the buffer. It is expressed in\n * wrapped token native decimals\n * @return removedUnderlyingBalanceRaw Amount of underlying tokens returned to the user\n * @return removedWrappedBalanceRaw Amount of wrapped tokens returned to the user\n */\n function removeLiquidityFromBuffer(\n IERC4626 wrappedToken,\n uint256 sharesToRemove,\n uint256 minAmountUnderlyingOutRaw,\n uint256 minAmountWrappedOutRaw\n ) external returns (uint256 removedUnderlyingBalanceRaw, uint256 removedWrappedBalanceRaw);\n\n /**\n * @notice Returns the asset registered for a given wrapped token.\n * @dev The asset can never change after buffer initialization.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return underlyingToken Address of the underlying token registered for the wrapper; `address(0)` if the buffer\n * has not been initialized.\n */\n function getBufferAsset(IERC4626 wrappedToken) external view returns (address underlyingToken);\n\n /**\n * @notice Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets\n * in the buffer.\n *\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param liquidityOwner Address of the user that owns liquidity in the wrapped token's buffer\n * @return ownerShares Amount of shares allocated to the liquidity owner, in native underlying token decimals\n */\n function getBufferOwnerShares(\n IERC4626 wrappedToken,\n address liquidityOwner\n ) external view returns (uint256 ownerShares);\n\n /**\n * @notice Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return bufferShares Amount of supply shares of the buffer, in native underlying token decimals\n */\n function getBufferTotalShares(IERC4626 wrappedToken) external view returns (uint256 bufferShares);\n\n /**\n * @notice Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\n * @dev All values are in native token decimals of the wrapped or underlying tokens.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return underlyingBalanceRaw Amount of underlying tokens deposited into the buffer, in native token decimals\n * @return wrappedBalanceRaw Amount of wrapped tokens deposited into the buffer, in native token decimals\n */\n function getBufferBalance(\n IERC4626 wrappedToken\n ) external view returns (uint256 underlyingBalanceRaw, uint256 wrappedBalanceRaw);\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Sets a new Authorizer for the Vault.\n * @dev This is a permissioned call. Emits an `AuthorizerChanged` event.\n * @param newAuthorizer The address of the new authorizer\n */\n function setAuthorizer(IAuthorizer newAuthorizer) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/// @notice Errors are declared inside an interface (namespace) to improve DX with Typechain.\ninterface IVaultErrors {\n /*******************************************************************************\n Registration and Initialization\n *******************************************************************************/\n\n /**\n * @notice A pool has already been registered. `registerPool` may only be called once.\n * @param pool The already registered pool\n */\n error PoolAlreadyRegistered(address pool);\n\n /**\n * @notice A pool has already been initialized. `initialize` may only be called once.\n * @param pool The already initialized pool\n */\n error PoolAlreadyInitialized(address pool);\n\n /**\n * @notice A pool has not been registered.\n * @param pool The unregistered pool\n */\n error PoolNotRegistered(address pool);\n\n /**\n * @notice A referenced pool has not been initialized.\n * @param pool The uninitialized pool\n */\n error PoolNotInitialized(address pool);\n\n /**\n * @notice A hook contract rejected a pool on registration.\n * @param poolHooksContract Address of the hook contract that rejected the pool registration\n * @param pool Address of the rejected pool\n * @param poolFactory Address of the pool factory\n */\n error HookRegistrationFailed(address poolHooksContract, address pool, address poolFactory);\n\n /**\n * @notice A token was already registered (i.e., it is a duplicate in the pool).\n * @param token The duplicate token\n */\n error TokenAlreadyRegistered(IERC20 token);\n\n /// @notice The token count is below the minimum allowed.\n error MinTokens();\n\n /// @notice The token count is above the maximum allowed.\n error MaxTokens();\n\n /// @notice Invalid tokens (e.g., zero) cannot be registered.\n error InvalidToken();\n\n /// @notice The token type given in a TokenConfig during pool registration is invalid.\n error InvalidTokenType();\n\n /// @notice The data in a TokenConfig struct is inconsistent or unsupported.\n error InvalidTokenConfiguration();\n\n /// @notice Tokens with more than 18 decimals are not supported.\n error InvalidTokenDecimals();\n\n /**\n * @notice The token list passed into an operation does not match the pool tokens in the pool.\n * @param pool Address of the pool\n * @param expectedToken The correct token at a given index in the pool\n * @param actualToken The actual token found at that index\n */\n error TokensMismatch(address pool, address expectedToken, address actualToken);\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /// @notice A transient accounting operation completed with outstanding token deltas.\n error BalanceNotSettled();\n\n /// @notice A user called a Vault function (swap, add/remove liquidity) outside the lock context.\n error VaultIsNotUnlocked();\n\n /// @notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\n error DynamicSwapFeeHookFailed();\n\n /// @notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\n error BeforeSwapHookFailed();\n\n /// @notice The pool has returned false to the afterSwap hook, indicating the transaction should revert.\n error AfterSwapHookFailed();\n\n /// @notice The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\n error BeforeInitializeHookFailed();\n\n /// @notice The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\n error AfterInitializeHookFailed();\n\n /// @notice The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\n error BeforeAddLiquidityHookFailed();\n\n /// @notice The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\n error AfterAddLiquidityHookFailed();\n\n /// @notice The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\n error BeforeRemoveLiquidityHookFailed();\n\n /// @notice The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\n error AfterRemoveLiquidityHookFailed();\n\n /// @notice An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\n error RouterNotTrusted();\n\n /*******************************************************************************\n Swaps\n *******************************************************************************/\n\n /// @notice The user tried to swap zero tokens.\n error AmountGivenZero();\n\n /// @notice The user attempted to swap a token for itself.\n error CannotSwapSameToken();\n\n /**\n * @notice The user attempted to operate with a token that is not in the pool.\n * @param token The unregistered token\n */\n error TokenNotRegistered(IERC20 token);\n\n /**\n * @notice An amount in or out has exceeded the limit specified in the swap request.\n * @param amount The total amount in or out\n * @param limit The amount of the limit that has been exceeded\n */\n error SwapLimit(uint256 amount, uint256 limit);\n\n /**\n * @notice A hook adjusted amount in or out has exceeded the limit specified in the swap request.\n * @param amount The total amount in or out\n * @param limit The amount of the limit that has been exceeded\n */\n error HookAdjustedSwapLimit(uint256 amount, uint256 limit);\n\n /// @notice The amount given or calculated for an operation is below the minimum limit.\n error TradeAmountTooSmall();\n\n /*******************************************************************************\n Add Liquidity\n *******************************************************************************/\n\n /// @notice Add liquidity kind not supported.\n error InvalidAddLiquidityKind();\n\n /**\n * @notice A required amountIn exceeds the maximum limit specified for the operation.\n * @param tokenIn The incoming token\n * @param amountIn The total token amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error AmountInAboveMax(IERC20 tokenIn, uint256 amountIn, uint256 maxAmountIn);\n\n /**\n * @notice A hook adjusted amountIn exceeds the maximum limit specified for the operation.\n * @param tokenIn The incoming token\n * @param amountIn The total token amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error HookAdjustedAmountInAboveMax(IERC20 tokenIn, uint256 amountIn, uint256 maxAmountIn);\n\n /**\n * @notice The BPT amount received from adding liquidity is below the minimum specified for the operation.\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error BptAmountOutBelowMin(uint256 amountOut, uint256 minAmountOut);\n\n /// @notice Pool does not support adding liquidity with a customized input.\n error DoesNotSupportAddLiquidityCustom();\n\n /// @notice Pool does not support adding liquidity through donation.\n error DoesNotSupportDonation();\n\n /*******************************************************************************\n Remove Liquidity\n *******************************************************************************/\n\n /// @notice Remove liquidity kind not supported.\n error InvalidRemoveLiquidityKind();\n\n /**\n * @notice The actual amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error AmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /**\n * @notice The hook adjusted amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error HookAdjustedAmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /**\n * @notice The required BPT amount in exceeds the maximum limit specified for the operation.\n * @param amountIn The total BPT amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error BptAmountInAboveMax(uint256 amountIn, uint256 maxAmountIn);\n\n /// @notice Pool does not support removing liquidity with a customized input.\n error DoesNotSupportRemoveLiquidityCustom();\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Error raised when there is an overflow in the fee calculation.\n * @dev This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole\n * (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee\n * percentages in the Vault.\n */\n error ProtocolFeesExceedTotalCollected();\n\n /**\n * @notice Error raised when the swap fee percentage is less than the minimum allowed value.\n * @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n * range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n * if it is below the minimum value returned by the pool.\n *\n * Pools with dynamic fees do not check these limits.\n */\n error SwapFeePercentageTooLow();\n\n /**\n * @notice Error raised when the swap fee percentage is greater than the maximum allowed value.\n * @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n * range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n * if it is above the maximum value returned by the pool.\n *\n * Pools with dynamic fees do not check these limits.\n */\n error SwapFeePercentageTooHigh();\n\n /**\n * @notice Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\n * @dev Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n * precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n * corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n * Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between\n * the aggregate fee calculated here and that stored in the Vault.\n */\n error FeePrecisionTooHigh();\n\n /// @notice A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\n error PercentageAboveMax();\n\n /*******************************************************************************\n Queries\n *******************************************************************************/\n\n /// @notice A user tried to execute a query operation when they were disabled.\n error QueriesDisabled();\n\n /// @notice An admin tried to re-enable queries, but they were disabled permanently.\n error QueriesDisabledPermanently();\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Cannot enable recovery mode when already enabled.\n * @param pool The pool\n */\n error PoolInRecoveryMode(address pool);\n\n /**\n * @notice Cannot disable recovery mode when not enabled.\n * @param pool The pool\n */\n error PoolNotInRecoveryMode(address pool);\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\n * @param sender The account attempting to call a permissioned function\n */\n error SenderIsNotVault(address sender);\n\n /*******************************************************************************\n Pausing\n *******************************************************************************/\n\n /// @notice The caller specified a pause window period longer than the maximum.\n error VaultPauseWindowDurationTooLarge();\n\n /// @notice The caller specified a buffer period longer than the maximum.\n error PauseBufferPeriodDurationTooLarge();\n\n /// @notice A user tried to perform an operation while the Vault was paused.\n error VaultPaused();\n\n /// @notice Governance tried to unpause the Vault when it was not paused.\n error VaultNotPaused();\n\n /// @notice Governance tried to pause the Vault after the pause period expired.\n error VaultPauseWindowExpired();\n\n /**\n * @notice A user tried to perform an operation involving a paused Pool.\n * @param pool The paused pool\n */\n error PoolPaused(address pool);\n\n /**\n * @notice Governance tried to unpause the Pool when it was not paused.\n * @param pool The unpaused pool\n */\n error PoolNotPaused(address pool);\n\n /**\n * @notice Governance tried to pause a Pool after the pause period expired.\n * @param pool The pool\n */\n error PoolPauseWindowExpired(address pool);\n\n /*******************************************************************************\n ERC4626 token buffers\n *******************************************************************************/\n\n /**\n * @notice The buffer for the given wrapped token was already initialized.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error BufferAlreadyInitialized(IERC4626 wrappedToken);\n\n /**\n * @notice The buffer for the given wrapped token was not initialized.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error BufferNotInitialized(IERC4626 wrappedToken);\n\n /// @notice The user is trying to remove more than their allocated shares from the buffer.\n error NotEnoughBufferShares();\n\n /**\n * @notice The wrapped token asset does not match the underlying token.\n * @dev This should never happen, but a malicious wrapper contract might not return the correct address.\n * Legitimate wrapper contracts should make the asset a constant or immutable value.\n *\n * @param wrappedToken The wrapped token corresponding to the buffer\n * @param underlyingToken The underlying token returned by `asset`\n */\n error WrongUnderlyingToken(IERC4626 wrappedToken, address underlyingToken);\n\n /**\n * @notice A wrapped token reported the zero address as its underlying token asset.\n * @dev This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to\n * re-initialize the buffer).\n *\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error InvalidUnderlyingToken(IERC4626 wrappedToken);\n\n /**\n * @notice The amount given to wrap/unwrap was too small, which can introduce rounding issues.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error WrapAmountTooSmall(IERC4626 wrappedToken);\n\n /// @notice Buffer operation attempted while vault buffers are paused.\n error VaultBuffersArePaused();\n\n /// @notice Buffer shares were minted to the zero address.\n error BufferSharesInvalidReceiver();\n\n /// @notice Buffer shares were burned from the zero address.\n error BufferSharesInvalidOwner();\n\n /**\n * @notice The total supply of a buffer can't be lower than the absolute minimum.\n * @param totalSupply The total supply value that was below the minimum\n */\n error BufferTotalSupplyTooLow(uint256 totalSupply);\n\n /// @dev A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\n error NotEnoughUnderlying(IERC4626 wrappedToken, uint256 expectedUnderlyingAmount, uint256 actualUnderlyingAmount);\n\n /// @dev A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\n error NotEnoughWrapped(IERC4626 wrappedToken, uint256 expectedWrappedAmount, uint256 actualWrappedAmount);\n\n /// @dev Shares issued during initialization are below the requested amount.\n error IssuedSharesBelowMin(uint256 issuedShares, uint256 minIssuedShares);\n\n /*******************************************************************************\n Miscellaneous\n *******************************************************************************/\n\n /// @notice Pool does not support adding / removing liquidity with an unbalanced input.\n error DoesNotSupportUnbalancedLiquidity();\n\n /// @notice The contract should not receive ETH.\n error CannotReceiveEth();\n\n /**\n * @notice The `VaultExtension` contract was called by an account directly.\n * @dev It can only be called by the Vault via delegatecall.\n */\n error NotVaultDelegateCall();\n\n /// @notice The `VaultExtension` contract was configured with an incorrect Vault address.\n error WrongVaultExtensionDeployment();\n\n /// @notice The `ProtocolFeeController` contract was configured with an incorrect Vault address.\n error WrongProtocolFeeControllerDeployment();\n\n /// @notice The `VaultAdmin` contract was configured with an incorrect Vault address.\n error WrongVaultAdminDeployment();\n\n /// @notice Quote reverted with a reserved error code.\n error QuoteResultSpoofed();\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IHooks } from \"./IHooks.sol\";\nimport \"./VaultTypes.sol\";\n\n/// @dev Events are declared inside an interface (namespace) to improve DX with Typechain.\ninterface IVaultEvents {\n /**\n * @notice A Pool was registered by calling `registerPool`.\n * @param pool The pool being registered\n * @param factory The factory creating the pool\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param swapFeePercentage The static swap fee of the pool\n * @param pauseWindowEndTime The pool's pause window end time\n * @param roleAccounts Addresses the Vault will allow to change certain pool settings\n * @param hooksConfig Flags indicating which hooks the pool supports and address of hooks contract\n * @param liquidityManagement Supported liquidity management hook flags\n */\n event PoolRegistered(\n address indexed pool,\n address indexed factory,\n TokenConfig[] tokenConfig,\n uint256 swapFeePercentage,\n uint32 pauseWindowEndTime,\n PoolRoleAccounts roleAccounts,\n HooksConfig hooksConfig,\n LiquidityManagement liquidityManagement\n );\n\n /**\n * @notice A Pool was initialized by calling `initialize`.\n * @param pool The pool being initialized\n */\n event PoolInitialized(address indexed pool);\n\n /**\n * @notice A swap has occurred.\n * @param pool The pool with the tokens being swapped\n * @param tokenIn The token entering the Vault (balance increases)\n * @param tokenOut The token leaving the Vault (balance decreases)\n * @param amountIn Number of tokenIn tokens\n * @param amountOut Number of tokenOut tokens\n * @param swapFeePercentage Swap fee percentage applied (can differ if dynamic)\n * @param swapFeeAmount Swap fee amount paid\n */\n event Swap(\n address indexed pool,\n IERC20 indexed tokenIn,\n IERC20 indexed tokenOut,\n uint256 amountIn,\n uint256 amountOut,\n uint256 swapFeePercentage,\n uint256 swapFeeAmount\n );\n\n /**\n * @notice A wrap operation has occurred.\n * @param wrappedToken The wrapped token address\n * @param depositedUnderlying Number of underlying tokens deposited\n * @param mintedShares Number of shares (wrapped tokens) minted\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event Wrap(\n IERC4626 indexed wrappedToken,\n uint256 depositedUnderlying,\n uint256 mintedShares,\n bytes32 bufferBalances\n );\n\n /**\n * @notice An unwrap operation has occurred.\n * @param wrappedToken The wrapped token address\n * @param burnedShares Number of shares (wrapped tokens) burned\n * @param withdrawnUnderlying Number of underlying tokens withdrawn\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event Unwrap(\n IERC4626 indexed wrappedToken,\n uint256 burnedShares,\n uint256 withdrawnUnderlying,\n bytes32 bufferBalances\n );\n\n /**\n * @notice Liquidity has been added to a pool (including initialization).\n * @param pool The pool with liquidity added\n * @param liquidityProvider The user performing the operation\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param totalSupply The total supply of the pool after the operation\n * @param amountsAddedRaw The amount of each token that was added, sorted in token registration order\n * @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order\n */\n event LiquidityAdded(\n address indexed pool,\n address indexed liquidityProvider,\n AddLiquidityKind indexed kind,\n uint256 totalSupply,\n uint256[] amountsAddedRaw,\n uint256[] swapFeeAmountsRaw\n );\n\n /**\n * @notice Liquidity has been removed from a pool.\n * @param pool The pool with liquidity removed\n * @param liquidityProvider The user performing the operation\n * @param kind The remove liquidity operation type (e.g., proportional, custom)\n * @param totalSupply The total supply of the pool after the operation\n * @param amountsRemovedRaw The amount of each token that was removed, sorted in token registration order\n * @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order\n */\n event LiquidityRemoved(\n address indexed pool,\n address indexed liquidityProvider,\n RemoveLiquidityKind indexed kind,\n uint256 totalSupply,\n uint256[] amountsRemovedRaw,\n uint256[] swapFeeAmountsRaw\n );\n\n /**\n * @notice The Vault's pause status has changed.\n * @param paused True if the Vault was paused\n */\n event VaultPausedStateChanged(bool paused);\n\n /// @notice `disableQuery` has been called on the Vault, disabling query functionality.\n event VaultQueriesDisabled();\n\n /// @notice `enableQuery` has been called on the Vault, enabling query functionality.\n event VaultQueriesEnabled();\n\n /**\n * @notice A Pool's pause status has changed.\n * @param pool The pool that was just paused or unpaused\n * @param paused True if the pool was paused\n */\n event PoolPausedStateChanged(address indexed pool, bool paused);\n\n /**\n * @notice Emitted when the swap fee percentage of a pool is updated.\n * @param swapFeePercentage The new swap fee percentage for the pool\n */\n event SwapFeePercentageChanged(address indexed pool, uint256 swapFeePercentage);\n\n /**\n * @notice Recovery mode has been enabled or disabled for a pool.\n * @param pool The pool\n * @param recoveryMode True if recovery mode was enabled\n */\n event PoolRecoveryModeStateChanged(address indexed pool, bool recoveryMode);\n\n /**\n * @notice A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\n * @dev The `ProtocolFeeController` will emit an event with the underlying change.\n * @param pool The pool whose aggregate swap fee percentage changed\n * @param aggregateSwapFeePercentage The new aggregate swap fee percentage\n */\n event AggregateSwapFeePercentageChanged(address indexed pool, uint256 aggregateSwapFeePercentage);\n\n /**\n * @notice A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\n * @dev The `ProtocolFeeController` will emit an event with the underlying change.\n * @param pool The pool whose aggregate yield fee percentage changed\n * @param aggregateYieldFeePercentage The new aggregate yield fee percentage\n */\n event AggregateYieldFeePercentageChanged(address indexed pool, uint256 aggregateYieldFeePercentage);\n\n /**\n * @notice A new authorizer is set by `setAuthorizer`.\n * @param newAuthorizer The address of the new authorizer\n */\n event AuthorizerChanged(IAuthorizer indexed newAuthorizer);\n\n /**\n * @notice A new protocol fee controller is set by `setProtocolFeeController`.\n * @param newProtocolFeeController The address of the new protocol fee controller\n */\n event ProtocolFeeControllerChanged(IProtocolFeeController indexed newProtocolFeeController);\n\n /**\n * @notice Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\n * @dev The underlying token can be derived from the wrapped token, so it's not included here.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param amountUnderlying The amount of the underlying token that was deposited\n * @param amountWrapped The amount of the wrapped token that was deposited\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event LiquidityAddedToBuffer(\n IERC4626 indexed wrappedToken,\n uint256 amountUnderlying,\n uint256 amountWrapped,\n bytes32 bufferBalances\n );\n\n /**\n * @notice Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\n * @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n * retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n * \"totalSupply\" of a buffer.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param to The owner of the minted shares\n * @param issuedShares The amount of \"internal BPT\" shares created\n */\n event BufferSharesMinted(IERC4626 indexed wrappedToken, address indexed to, uint256 issuedShares);\n\n /**\n * @notice Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\n * @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n * retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n * \"totalSupply\" of a buffer.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param from The owner of the burned shares\n * @param burnedShares The amount of \"internal BPT\" shares burned\n */\n event BufferSharesBurned(IERC4626 indexed wrappedToken, address indexed from, uint256 burnedShares);\n\n /**\n * @notice Liquidity was removed from an ERC4626 buffer.\n * @dev The underlying token can be derived from the wrapped token, so it's not included here.\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param amountUnderlying The amount of the underlying token that was withdrawn\n * @param amountWrapped The amount of the wrapped token that was withdrawn\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event LiquidityRemovedFromBuffer(\n IERC4626 indexed wrappedToken,\n uint256 amountUnderlying,\n uint256 amountWrapped,\n bytes32 bufferBalances\n );\n\n /**\n * @notice The Vault buffers pause status has changed.\n * @dev If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer`\n * set to true) will revert.\n *\n * @param paused True if the Vault buffers were paused\n */\n event VaultBuffersPausedStateChanged(bool paused);\n\n /**\n * @notice Pools can use this event to emit event data from the Vault.\n * @param pool Pool address\n * @param eventKey Event key\n * @param eventData Encoded event data\n */\n event VaultAuxiliary(address indexed pool, bytes32 indexed eventKey, bytes eventData);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IVault } from \"./IVault.sol\";\nimport { IHooks } from \"./IHooks.sol\";\nimport \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for functions defined on the `VaultExtension` contract.\n * @dev `VaultExtension` handles less critical or frequently used functions, since delegate calls through\n * the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and\n * liquidity operations.\n */\ninterface IVaultExtension {\n /*******************************************************************************\n Constants and immutables\n *******************************************************************************/\n\n /**\n * @notice Returns the main Vault address.\n * @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n * @return vault The address of the main Vault\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Returns the VaultAdmin contract address.\n * @dev The VaultAdmin contract mostly implements permissioned functions.\n * @return vaultAdmin The address of the Vault admin\n */\n function getVaultAdmin() external view returns (address vaultAdmin);\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @notice Returns whether the Vault is unlocked (i.e., executing an operation).\n * @dev The Vault must be unlocked to perform state-changing liquidity operations.\n * @return unlocked True if the Vault is unlocked, false otherwise\n */\n function isUnlocked() external view returns (bool unlocked);\n\n /**\n * @notice Returns the count of non-zero deltas.\n * @return nonzeroDeltaCount The current value of `_nonzeroDeltaCount`\n */\n function getNonzeroDeltaCount() external view returns (uint256 nonzeroDeltaCount);\n\n /**\n * @notice Retrieves the token delta for a specific token.\n * @dev This function allows reading the value from the `_tokenDeltas` mapping.\n * @param token The token for which the delta is being fetched\n * @return tokenDelta The delta of the specified token\n */\n function getTokenDelta(IERC20 token) external view returns (int256 tokenDelta);\n\n /**\n * @notice Retrieves the reserve (i.e., total Vault balance) of a given token.\n * @param token The token for which to retrieve the reserve\n * @return reserveAmount The amount of reserves for the given token\n */\n function getReservesOf(IERC20 token) external view returns (uint256 reserveAmount);\n\n /**\n * @notice This flag is used to detect and tax \"round-trip\" interactions (adding and removing liquidity in the\n * same pool).\n * @dev Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra\n * layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional\n * is the only standard way to exit a position without fees, and this flag is used to enable fees in that case.\n * It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse\n * than a simple swap for every pool type.\n *\n * @param pool Address of the pool to check\n * @return liquidityAdded True if liquidity has been added to this pool in the current transaction\n \n * Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\n */\n function getAddLiquidityCalledFlag(address pool) external view returns (bool liquidityAdded);\n\n /*******************************************************************************\n Pool Registration\n *******************************************************************************/\n\n /**\n * @notice Registers a pool, associating it with its factory and the tokens it manages.\n * @dev A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely\n * by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an\n * additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused\n * pool will automatically unpause. Balancer timestamps are 32 bits.\n *\n * A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a\n * multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to\n * the Vault.\n *\n * If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the\n * authorizer.\n *\n * @param pool The address of the pool being registered\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param swapFeePercentage The initial static swap fee percentage of the pool\n * @param pauseWindowEndTime The timestamp after which it is no longer possible to pause the pool\n * @param protocolFeeExempt If true, the pool's initial aggregate fees will be set to 0\n * @param roleAccounts Addresses the Vault will allow to change certain pool settings\n * @param poolHooksContract Contract that implements the hooks for the pool\n * @param liquidityManagement Liquidity management flags with implemented methods\n */\n function registerPool(\n address pool,\n TokenConfig[] memory tokenConfig,\n uint256 swapFeePercentage,\n uint32 pauseWindowEndTime,\n bool protocolFeeExempt,\n PoolRoleAccounts calldata roleAccounts,\n address poolHooksContract,\n LiquidityManagement calldata liquidityManagement\n ) external;\n\n /**\n * @notice Checks whether a pool is registered.\n * @param pool Address of the pool to check\n * @return registered True if the pool is registered, false otherwise\n */\n function isPoolRegistered(address pool) external view returns (bool registered);\n\n /**\n * @notice Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\n * @param pool Address of the pool to initialize\n * @param to Address that will receive the output BPT\n * @param tokens Tokens used to seed the pool (must match the registered tokens)\n * @param exactAmountsIn Exact amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param userData Additional (optional) data required for adding initial liquidity\n * @return bptAmountOut Output pool token amount\n */\n function initialize(\n address pool,\n address to,\n IERC20[] memory tokens,\n uint256[] memory exactAmountsIn,\n uint256 minBptAmountOut,\n bytes memory userData\n ) external returns (uint256 bptAmountOut);\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /**\n * @notice Checks whether a pool is initialized.\n * @dev An initialized pool can be considered registered as well.\n * @param pool Address of the pool to check\n * @return initialized True if the pool is initialized, false otherwise\n */\n function isPoolInitialized(address pool) external view returns (bool initialized);\n\n /**\n * @notice Gets the tokens registered to a pool.\n * @param pool Address of the pool\n * @return tokens List of tokens in the pool\n */\n function getPoolTokens(address pool) external view returns (IERC20[] memory tokens);\n\n /**\n * @notice Gets pool token rates.\n * @dev This function performs external calls if tokens are yield-bearing. All returned arrays are in token\n * registration order.\n *\n * @param pool Address of the pool\n * @return decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n * calculations. FP(1) for 18-decimal tokens\n * @return tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n */\n function getPoolTokenRates(\n address pool\n ) external view returns (uint256[] memory decimalScalingFactors, uint256[] memory tokenRates);\n\n /**\n * @notice Returns comprehensive pool data for the given pool.\n * @dev This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\n * @param pool The address of the pool\n * @return poolData The `PoolData` result\n */\n function getPoolData(address pool) external view returns (PoolData memory poolData);\n\n /**\n * @notice Gets the raw data for a pool: tokens, raw balances, scaling factors.\n * @param pool Address of the pool\n * @return tokens The pool tokens, sorted in registration order\n * @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n * @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n * @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order\n */\n function getPoolTokenInfo(\n address pool\n )\n external\n view\n returns (\n IERC20[] memory tokens,\n TokenInfo[] memory tokenInfo,\n uint256[] memory balancesRaw,\n uint256[] memory lastBalancesLiveScaled18\n );\n\n /**\n * @notice Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in\n * registration order.\n *\n * @param pool Address of the pool\n * @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n */\n function getCurrentLiveBalances(address pool) external view returns (uint256[] memory balancesLiveScaled18);\n\n /**\n * @notice Gets the configuration parameters of a pool.\n * @dev The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\n * @param pool Address of the pool\n * @return poolConfig The pool configuration as a `PoolConfig` struct\n */\n function getPoolConfig(address pool) external view returns (PoolConfig memory poolConfig);\n\n /**\n * @notice Gets the hooks configuration parameters of a pool.\n * @dev The `HooksConfig` contains flags indicating which pool hooks are implemented.\n * @param pool Address of the pool\n * @return hooksConfig The hooks configuration as a `HooksConfig` struct\n */\n function getHooksConfig(address pool) external view returns (HooksConfig memory hooksConfig);\n\n /**\n * @notice The current rate of a pool token (BPT) = invariant / totalSupply.\n * @param pool Address of the pool\n * @return rate BPT rate\n */\n function getBptRate(address pool) external view returns (uint256 rate);\n\n /*******************************************************************************\n Balancer Pool Tokens\n *******************************************************************************/\n\n /**\n * @notice Gets the total supply of a given ERC20 token.\n * @param token The token address\n * @return tokenTotalSupply Total supply of the token\n */\n function totalSupply(address token) external view returns (uint256 tokenTotalSupply);\n\n /**\n * @notice Gets the balance of an account for a given ERC20 token.\n * @param token Address of the token\n * @param account Address of the account\n * @return tokenBalance Token balance of the account\n */\n function balanceOf(address token, address account) external view returns (uint256 tokenBalance);\n\n /**\n * @notice Gets the allowance of a spender for a given ERC20 token and owner.\n * @param token Address of the token\n * @param owner Address of the owner\n * @param spender Address of the spender\n * @return tokenAllowance Amount of tokens the spender is allowed to spend\n */\n function allowance(address token, address owner, address spender) external view returns (uint256 tokenAllowance);\n\n /**\n * @notice Approves a spender to spend pool tokens on behalf of sender.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param owner Address of the owner\n * @param spender Address of the spender\n * @param amount Amount of tokens to approve\n * @return success True if successful, false otherwise\n */\n function approve(address owner, address spender, uint256 amount) external returns (bool success);\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /**\n * @notice Indicates whether a pool is paused.\n * @dev If a pool is paused, all non-Recovery Mode state-changing operations will revert.\n * @param pool The pool to be checked\n * @return poolPaused True if the pool is paused\n */\n function isPoolPaused(address pool) external view returns (bool poolPaused);\n\n /**\n * @notice Returns the paused status, and end times of the Pool's pause window and buffer period.\n * @dev Note that even when set to a paused state, the pool will automatically unpause at the end of\n * the buffer period. Balancer timestamps are 32 bits.\n *\n * @param pool The pool whose data is requested\n * @return poolPaused True if the Pool is paused\n * @return poolPauseWindowEndTime The timestamp of the end of the Pool's pause window\n * @return poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)\n * @return pauseManager The pause manager, or the zero address\n */\n function getPoolPausedState(\n address pool\n )\n external\n view\n returns (bool poolPaused, uint32 poolPauseWindowEndTime, uint32 poolBufferPeriodEndTime, address pauseManager);\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Checks if the wrapped token has an initialized buffer in the Vault.\n * @dev An initialized buffer should have an asset registered in the Vault.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return isBufferInitialized True if the ERC4626 buffer is initialized\n */\n function isERC4626BufferInitialized(IERC4626 wrappedToken) external view returns (bool isBufferInitialized);\n\n /**\n * @notice Gets the registered asset for a given buffer.\n * @dev To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers\n * should never call `wrapper.asset()` directly, at least without checking it against the asset registered with\n * the Vault on initialization.\n *\n * @param wrappedToken The wrapped token specifying the buffer\n * @return asset The underlying asset of the wrapped token\n */\n function getERC4626BufferAsset(IERC4626 wrappedToken) external view returns (address asset);\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\n * @param pool The address of the pool for which aggregate fees have been collected\n * @param token The address of the token in which fees have been accumulated\n * @return swapFeeAmount The total amount of fees accumulated in the specified token\n */\n function getAggregateSwapFeeAmount(address pool, IERC20 token) external view returns (uint256 swapFeeAmount);\n\n /**\n * @notice Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\n * @param pool The address of the pool for which aggregate fees have been collected\n * @param token The address of the token in which fees have been accumulated\n * @return yieldFeeAmount The total amount of fees accumulated in the specified token\n */\n function getAggregateYieldFeeAmount(address pool, IERC20 token) external view returns (uint256 yieldFeeAmount);\n\n /**\n * @notice Fetches the static swap fee percentage for a given pool.\n * @param pool The address of the pool whose static swap fee percentage is being queried\n * @return swapFeePercentage The current static swap fee percentage for the specified pool\n */\n function getStaticSwapFeePercentage(address pool) external view returns (uint256 swapFeePercentage);\n\n /**\n * @notice Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\n * @param pool The address of the pool whose roles are being queried\n * @return roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)\n */\n function getPoolRoleAccounts(address pool) external view returns (PoolRoleAccounts memory roleAccounts);\n\n /**\n * @notice Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\n * @dev Reverts if the hook doesn't return the success flag set to `true`.\n * @param pool The pool\n * @param swapParams The swap parameters used to compute the fee\n * @return dynamicSwapFeePercentage The dynamic swap fee percentage\n */\n function computeDynamicSwapFeePercentage(\n address pool,\n PoolSwapParams memory swapParams\n ) external view returns (uint256 dynamicSwapFeePercentage);\n\n /**\n * @notice Returns the Protocol Fee Controller address.\n * @return protocolFeeController Address of the ProtocolFeeController\n */\n function getProtocolFeeController() external view returns (IProtocolFeeController protocolFeeController);\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Checks whether a pool is in Recovery Mode.\n * @dev Recovery Mode enables a safe proportional withdrawal path, with no external calls.\n * @param pool Address of the pool to check\n * @return inRecoveryMode True if the pool is in Recovery Mode, false otherwise\n */\n function isPoolInRecoveryMode(address pool) external view returns (bool inRecoveryMode);\n\n /**\n * @notice Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out.\n * The request is implemented by the Vault without any interaction with the pool, ensuring that\n * it works the same for all pools, and cannot be disabled by a new pool type.\n *\n * @param pool Address of the pool\n * @param from Address of user to burn pool tokens from\n * @param exactBptAmountIn Input pool token amount\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @return amountsOut Actual calculated amounts of output tokens, sorted in token registration order\n */\n function removeLiquidityRecovery(\n address pool,\n address from,\n uint256 exactBptAmountIn,\n uint256[] memory minAmountsOut\n ) external returns (uint256[] memory amountsOut);\n\n /*******************************************************************************\n Queries\n *******************************************************************************/\n\n /**\n * @notice Performs a callback on msg.sender with arguments provided in `data`.\n * @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n * anything else will revert.\n *\n * Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n *\n * Allows the external calling of a function via the Vault contract to\n * access Vault's functions guarded by `onlyWhenUnlocked`.\n * `transient` modifier ensuring balances changes within the Vault are settled.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n * @return result Resulting data from the call\n */\n function quote(bytes calldata data) external returns (bytes memory result);\n\n /**\n * @notice Performs a callback on msg.sender with arguments provided in `data`.\n * @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n * anything else will revert.\n *\n * Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n *\n * Allows the external calling of a function via the Vault contract to\n * access Vault's functions guarded by `onlyWhenUnlocked`.\n * `transient` modifier ensuring balances changes within the Vault are settled.\n *\n * This call always reverts, returning the result in the revert reason.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n */\n function quoteAndRevert(bytes calldata data) external;\n\n /**\n * @notice Returns true if queries are disabled on the Vault.\n * @dev If true, queries might either be disabled temporarily or permanently.\n * @return queryDisabled True if query functionality is reversibly disabled\n */\n function isQueryDisabled() external view returns (bool queryDisabled);\n\n /**\n * @notice Returns true if queries are disabled permanently; false if they are enabled.\n * @dev This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\n * @return queryDisabledPermanently True if query functionality is permanently disabled\n */\n function isQueryDisabledPermanently() external view returns (bool queryDisabledPermanently);\n\n /**\n * @notice Pools can use this event to emit event data from the Vault.\n * @param eventKey Event key\n * @param eventData Encoded event data\n */\n function emitAuxiliaryEvent(bytes32 eventKey, bytes calldata eventData) external;\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Returns the Authorizer address.\n * @dev The authorizer holds the permissions granted by governance. It is set on Vault deployment,\n * and can be changed through a permissioned call.\n *\n * @return authorizer Address of the authorizer contract\n */\n function getAuthorizer() external view returns (IAuthorizer authorizer);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for functions defined on the main Vault contract.\n * @dev These are generally \"critical path\" functions (swap, add/remove liquidity) that are in the main contract\n * for technical or performance reasons.\n */\ninterface IVaultMain {\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @notice Creates a context for a sequence of operations (i.e., \"unlocks\" the Vault).\n * @dev Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`,\n * meaning all balances for the caller have to be settled at the end.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n * @return result Resulting data from the call\n */\n function unlock(bytes calldata data) external returns (bytes memory result);\n\n /**\n * @notice Settles deltas for a token; must be successful for the current lock to be released.\n * @dev Protects the caller against leftover dust in the Vault for the token being settled. The caller\n * should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any\n * excess in the Vault balance.\n *\n * If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as\n * credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail.\n *\n * If the given hint is lower than the difference in reserves, the hint is given as credit to the caller.\n * In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would\n * not affect settlement.\n *\n * The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve\n * difference equals current balance of the token minus existing reserves of the token when the function is called.\n *\n * @param token Address of the token\n * @param amountHint Amount paid as reported by the caller\n * @return credit Credit received in return of the payment\n */\n function settle(IERC20 token, uint256 amountHint) external returns (uint256 credit);\n\n /**\n * @notice Sends tokens to a recipient.\n * @dev There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel\n * debts.\n *\n * @param token Address of the token\n * @param to Recipient address\n * @param amount Amount of tokens to send\n */\n function sendTo(IERC20 token, address to, uint256 amount) external;\n\n /***************************************************************************\n Swaps\n ***************************************************************************/\n\n /**\n * @notice Swaps tokens based on provided parameters.\n * @dev All parameters are given in raw token decimal encoding.\n * @param vaultSwapParams Parameters for the swap (see above for struct definition)\n * @return amountCalculatedRaw Calculated swap amount\n * @return amountInRaw Amount of input tokens for the swap\n * @return amountOutRaw Amount of output tokens from the swap\n */\n function swap(\n VaultSwapParams memory vaultSwapParams\n ) external returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Adds liquidity to a pool.\n * @dev Caution should be exercised when adding liquidity because the Vault has the capability\n * to transfer tokens from any user, given that it holds all allowances.\n *\n * @param params Parameters for the add liquidity (see above for struct definition)\n * @return amountsIn Actual amounts of input tokens\n * @return bptAmountOut Output pool token amount\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function addLiquidity(\n AddLiquidityParams memory params\n ) external returns (uint256[] memory amountsIn, uint256 bptAmountOut, bytes memory returnData);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Removes liquidity from a pool.\n * @dev Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user.\n * Untrusted routers require prior approval from the user. This is the only function allowed to call\n * _queryModeBalanceIncrease (and only in a query context).\n *\n * @param params Parameters for the remove liquidity (see above for struct definition)\n * @return bptAmountIn Actual amount of BPT burned\n * @return amountsOut Actual amounts of output tokens\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function removeLiquidity(\n RemoveLiquidityParams memory params\n ) external returns (uint256 bptAmountIn, uint256[] memory amountsOut, bytes memory returnData);\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /**\n * @notice Gets the index of a token in a given pool.\n * @dev Reverts if the pool is not registered, or if the token does not belong to the pool.\n * @param pool Address of the pool\n * @param token Address of the token\n * @return tokenCount Number of tokens in the pool\n * @return index Index corresponding to the given token in the pool's token list\n */\n function getPoolTokenCountAndIndexOfToken(\n address pool,\n IERC20 token\n ) external view returns (uint256 tokenCount, uint256 index);\n\n /*******************************************************************************\n Balancer Pool Tokens\n *******************************************************************************/\n\n /**\n * @notice Transfers pool token from owner to a recipient.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param owner Address of the owner\n * @param to Address of the recipient\n * @param amount Amount of tokens to transfer\n * @return success True if successful, false otherwise\n */\n function transfer(address owner, address to, uint256 amount) external returns (bool);\n\n /**\n * @notice Transfers pool token from a sender to a recipient using an allowance.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param spender Address allowed to perform the transfer\n * @param from Address of the sender\n * @param to Address of the recipient\n * @param amount Amount of tokens to transfer\n * @return success True if successful, false otherwise\n */\n function transferFrom(address spender, address from, address to, uint256 amount) external returns (bool success);\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Wraps/unwraps tokens based on the parameters provided.\n * @dev All parameters are given in raw token decimal encoding. It requires the buffer to be initialized,\n * and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\n *\n * @param params Parameters for the wrap/unwrap operation (see struct definition)\n * @return amountCalculatedRaw Calculated swap amount\n * @return amountInRaw Amount of input tokens for the swap\n * @return amountOutRaw Amount of output tokens from the swap\n */\n function erc4626BufferWrapOrUnwrap(\n BufferWrapOrUnwrapParams memory params\n ) external returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw);\n\n /*******************************************************************************\n Miscellaneous\n *******************************************************************************/\n\n /**\n * @notice Returns the VaultExtension contract address.\n * @dev Function is in the main Vault contract. The VaultExtension handles less critical or frequently used\n * functions, since delegate calls through the Vault are more expensive than direct calls.\n *\n * @return vaultExtension Address of the VaultExtension\n */\n function getVaultExtension() external view returns (address vaultExtension);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IRateProvider } from \"../solidity-utils/helpers/IRateProvider.sol\";\n\n/**\n * @notice Represents a pool's liquidity management configuration.\n * @param disableUnbalancedLiquidity If set, liquidity can only be added or removed proportionally\n * @param enableAddLiquidityCustom If set, the pool has implemented `onAddLiquidityCustom`\n * @param enableRemoveLiquidityCustom If set, the pool has implemented `onRemoveLiquidityCustom`\n * @param enableDonation If set, the pool will not revert if liquidity is added with AddLiquidityKind.DONATION\n */\nstruct LiquidityManagement {\n bool disableUnbalancedLiquidity;\n bool enableAddLiquidityCustom;\n bool enableRemoveLiquidityCustom;\n bool enableDonation;\n}\n\n// @notice Custom type to store the entire configuration of the pool.\ntype PoolConfigBits is bytes32;\n\n/**\n * @notice Represents a pool's configuration (hooks configuration are separated in another struct).\n * @param liquidityManagement Flags related to adding/removing liquidity\n * @param staticSwapFeePercentage The pool's native swap fee\n * @param aggregateSwapFeePercentage The total swap fee charged, including protocol and pool creator components\n * @param aggregateYieldFeePercentage The total swap fee charged, including protocol and pool creator components\n * @param tokenDecimalDiffs Compressed storage of the token decimals of each pool token\n * @param pauseWindowEndTime Timestamp after which the pool cannot be paused\n * @param isPoolRegistered If true, the pool has been registered with the Vault\n * @param isPoolInitialized If true, the pool has been initialized with liquidity, and is available for trading\n * @param isPoolPaused If true, the pool has been paused (by governance or the pauseManager)\n * @param isPoolInRecoveryMode If true, the pool has been placed in recovery mode, enabling recovery mode withdrawals\n */\nstruct PoolConfig {\n LiquidityManagement liquidityManagement;\n uint256 staticSwapFeePercentage;\n uint256 aggregateSwapFeePercentage;\n uint256 aggregateYieldFeePercentage;\n uint40 tokenDecimalDiffs;\n uint32 pauseWindowEndTime;\n bool isPoolRegistered;\n bool isPoolInitialized;\n bool isPoolPaused;\n bool isPoolInRecoveryMode;\n}\n\n/**\n * @notice The flag portion of the `HooksConfig`.\n * @dev `enableHookAdjustedAmounts` must be true for all contracts that modify the `amountCalculated`\n * in after hooks. Otherwise, the Vault will ignore any \"hookAdjusted\" amounts. Setting any \"shouldCall\"\n * flags to true will cause the Vault to call the corresponding hook during operations.\n */\nstruct HookFlags {\n bool enableHookAdjustedAmounts;\n bool shouldCallBeforeInitialize;\n bool shouldCallAfterInitialize;\n bool shouldCallComputeDynamicSwapFee;\n bool shouldCallBeforeSwap;\n bool shouldCallAfterSwap;\n bool shouldCallBeforeAddLiquidity;\n bool shouldCallAfterAddLiquidity;\n bool shouldCallBeforeRemoveLiquidity;\n bool shouldCallAfterRemoveLiquidity;\n}\n\n/// @notice Represents a hook contract configuration for a pool (HookFlags + hooksContract address).\nstruct HooksConfig {\n bool enableHookAdjustedAmounts;\n bool shouldCallBeforeInitialize;\n bool shouldCallAfterInitialize;\n bool shouldCallComputeDynamicSwapFee;\n bool shouldCallBeforeSwap;\n bool shouldCallAfterSwap;\n bool shouldCallBeforeAddLiquidity;\n bool shouldCallAfterAddLiquidity;\n bool shouldCallBeforeRemoveLiquidity;\n bool shouldCallAfterRemoveLiquidity;\n address hooksContract;\n}\n\n/**\n * @notice Represents temporary state used during a swap operation.\n * @param indexIn The zero-based index of tokenIn\n * @param indexOut The zero-based index of tokenOut\n * @param amountGivenScaled18 The amountGiven (i.e., tokenIn for ExactIn), adjusted for token decimals\n * @param swapFeePercentage The swap fee to be applied (might be static or dynamic)\n */\nstruct SwapState {\n uint256 indexIn;\n uint256 indexOut;\n uint256 amountGivenScaled18;\n uint256 swapFeePercentage;\n}\n\n/**\n * @notice Represents the Vault's configuration.\n * @param isQueryDisabled If set to true, disables query functionality of the Vault. Can be modified by governance\n * @param isVaultPaused If set to true, swaps and add/remove liquidity operations are halted\n * @param areBuffersPaused If set to true, the Vault wrap/unwrap primitives associated with buffers will be disabled\n */\nstruct VaultState {\n bool isQueryDisabled;\n bool isVaultPaused;\n bool areBuffersPaused;\n}\n\n/**\n * @notice Represents the accounts holding certain roles for a given pool. This is passed in on pool registration.\n * @param pauseManager Account empowered to pause/unpause the pool (note that governance can always pause a pool)\n * @param swapFeeManager Account empowered to set static swap fees for a pool (or 0 to delegate to governance)\n * @param poolCreator Account empowered to set the pool creator fee (or 0 if all fees go to the protocol and LPs)\n */\nstruct PoolRoleAccounts {\n address pauseManager;\n address swapFeeManager;\n address poolCreator;\n}\n\n/*******************************************************************************\n Tokens\n*******************************************************************************/\n\n// Note that the following tokens are unsupported by the Vault. This list is not meant to be exhaustive, but covers\n// many common types of tokens that will not work with the Vault architecture. (See https://github.com/d-xo/weird-erc20\n// for examples of token features that are problematic for many protocols.)\n//\n// * Rebasing tokens (e.g., aDAI). The Vault keeps track of token balances in its internal accounting; any token whose\n// balance changes asynchronously (i.e., outside a swap or liquidity operation), would get out-of-sync with this\n// internal accounting. This category would also include \"airdrop\" tokens, whose balances can change unexpectedly.\n//\n// * Double entrypoint (e.g., old Synthetix tokens, now fixed). These could likewise bypass internal accounting by\n// registering the token under one address, then accessing it through another. This is especially troublesome\n// in v3, with the introduction of ERC4626 buffers.\n//\n// * Fee on transfer (e.g., PAXG). The Vault issues credits and debits according to given and calculated token amounts,\n// and settlement assumes that the send/receive transfer functions transfer exactly the given number of tokens.\n// If this is not the case, transactions will not settle. Unlike with the other types, which are fundamentally\n// incompatible, it would be possible to design a Router to handle this - but we didn't try it. In any case, it's\n// not supported in the current Routers.\n//\n// * Tokens with more than 18 decimals (e.g., YAM-V2). The Vault handles token scaling: i.e., handling I/O for\n// amounts in native token decimals, but doing calculations with full 18-decimal precision. This requires reading\n// and storing the decimals for each token. Since virtually all tokens are 18 or fewer decimals, and we have limited\n// storage space, 18 was a reasonable maximum. Unlike the other types, this is enforceable by the Vault. Attempting\n// to register such tokens will revert with `InvalidTokenDecimals`. Of course, we must also be able to read the token\n// decimals, so the Vault only supports tokens that implement `IERC20Metadata.decimals`, and return a value less than\n// or equal to 18.\n//\n// * Token decimals are checked and stored only once, on registration. Valid tokens store their decimals as immutable\n// variables or constants. Malicious tokens that don't respect this basic property would not work anywhere in DeFi.\n//\n// These types of tokens are supported but discouraged, as they don't tend to play well with AMMs generally.\n//\n// * Very low-decimal tokens (e.g., GUSD). The Vault has been extensively tested with 6-decimal tokens (e.g., USDC),\n// but going much below that may lead to unanticipated effects due to precision loss, especially with smaller trade\n// values.\n//\n// * Revert on zero value approval/transfer. The Vault has been tested against these, but peripheral contracts, such\n// as hooks, might not have been designed with this in mind.\n//\n// * Other types from \"weird-erc20,\" such as upgradeable, pausable, or tokens with blocklists. We have seen cases\n// where a token upgrade fails, \"bricking\" the token - and many operations on pools containing that token. Any\n// sort of \"permissioned\" token that can make transfers fail can cause operations on pools containing them to\n// revert. Even Recovery Mode cannot help then, as it does a proportional withdrawal of all tokens. If one of\n// them is bricked, the whole operation will revert. Since v3 does not have \"internal balances\" like v2, there\n// is no recourse.\n//\n// Of course, many tokens in common use have some of these \"features\" (especially centralized stable coins), so\n// we have to support them anyway. Working with common centralized tokens is a risk common to all of DeFi.\n\n/**\n * @notice Token types supported by the Vault.\n * @dev In general, pools may contain any combination of these tokens.\n *\n * STANDARD tokens (e.g., BAL, WETH) have no rate provider.\n * WITH_RATE tokens (e.g., wstETH) require a rate provider. These may be tokens like wstETH, which need to be wrapped\n * because the underlying stETH token is rebasing, and such tokens are unsupported by the Vault. They may also be\n * tokens like sEUR, which track an underlying asset, but are not yield-bearing. Finally, this encompasses\n * yield-bearing ERC4626 tokens, which can be used to facilitate swaps without requiring wrapping or unwrapping\n * in most cases. The `paysYieldFees` flag can be used to indicate whether a token is yield-bearing (e.g., waDAI),\n * not yield-bearing (e.g., sEUR), or yield-bearing but exempt from fees (e.g., in certain nested pools, where\n * yield fees are charged elsewhere).\n *\n * NB: STANDARD must always be the first enum element, so that newly initialized data structures default to Standard.\n */\nenum TokenType {\n STANDARD,\n WITH_RATE\n}\n\n/**\n * @notice Encapsulate the data required for the Vault to support a token of the given type.\n * @dev For STANDARD tokens, the rate provider address must be 0, and paysYieldFees must be false. All WITH_RATE tokens\n * need a rate provider, and may or may not be yield-bearing.\n *\n * At registration time, it is useful to include the token address along with the token parameters in the structure\n * passed to `registerPool`, as the alternative would be parallel arrays, which would be error prone and require\n * validation checks. `TokenConfig` is only used for registration, and is never put into storage (see `TokenInfo`).\n *\n * @param token The token address\n * @param tokenType The token type (see the enum for supported types)\n * @param rateProvider The rate provider for a token (see further documentation above)\n * @param paysYieldFees Flag indicating whether yield fees should be charged on this token\n */\nstruct TokenConfig {\n IERC20 token;\n TokenType tokenType;\n IRateProvider rateProvider;\n bool paysYieldFees;\n}\n\n/**\n * @notice This data structure is stored in `_poolTokenInfo`, a nested mapping from pool -> (token -> TokenInfo).\n * @dev Since the token is already the key of the nested mapping, it would be redundant (and an extra SLOAD) to store\n * it again in the struct. When we construct PoolData, the tokens are separated into their own array.\n *\n * @param tokenType The token type (see the enum for supported types)\n * @param rateProvider The rate provider for a token (see further documentation above)\n * @param paysYieldFees Flag indicating whether yield fees should be charged on this token\n */\nstruct TokenInfo {\n TokenType tokenType;\n IRateProvider rateProvider;\n bool paysYieldFees;\n}\n\n/**\n * @notice Data structure used to represent the current pool state in memory\n * @param poolConfigBits Custom type to store the entire configuration of the pool.\n * @param tokens Pool tokens, sorted in token registration order\n * @param tokenInfo Configuration data for each token, sorted in token registration order\n * @param balancesRaw Token balances in native decimals\n * @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n * @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n * @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n * calculations. It is 1e18 (FP 1) for 18-decimal tokens\n */\nstruct PoolData {\n PoolConfigBits poolConfigBits;\n IERC20[] tokens;\n TokenInfo[] tokenInfo;\n uint256[] balancesRaw;\n uint256[] balancesLiveScaled18;\n uint256[] tokenRates;\n uint256[] decimalScalingFactors;\n}\n\nenum Rounding {\n ROUND_UP,\n ROUND_DOWN\n}\n\n/*******************************************************************************\n Swaps\n*******************************************************************************/\n\nenum SwapKind {\n EXACT_IN,\n EXACT_OUT\n}\n\n// There are two \"SwapParams\" structs defined below. `VaultSwapParams` corresponds to the external swap API defined\n// in the Router contracts, which uses explicit token addresses, the amount given and limit on the calculated amount\n// expressed in native token decimals, and optional user data passed in from the caller.\n//\n// `PoolSwapParams` passes some of this information through (kind, userData), but \"translates\" the parameters to fit\n// the internal swap API used by `IBasePool`. It scales amounts to full 18-decimal precision, adds the token balances,\n// converts the raw token addresses to indices, and adds the address of the Router originating the request. It does\n// not need the limit, since this is checked at the Router level.\n\n/**\n * @notice Data passed into primary Vault `swap` operations.\n * @param kind Type of swap (Exact In or Exact Out)\n * @param pool The pool with the tokens being swapped\n * @param tokenIn The token entering the Vault (balance increases)\n * @param tokenOut The token leaving the Vault (balance decreases)\n * @param amountGivenRaw Amount specified for tokenIn or tokenOut (depending on the type of swap)\n * @param limitRaw Minimum or maximum value of the calculated amount (depending on the type of swap)\n * @param userData Additional (optional) user data\n */\nstruct VaultSwapParams {\n SwapKind kind;\n address pool;\n IERC20 tokenIn;\n IERC20 tokenOut;\n uint256 amountGivenRaw;\n uint256 limitRaw;\n bytes userData;\n}\n\n/**\n * @notice Data for a swap operation, used by contracts implementing `IBasePool`.\n * @param kind Type of swap (exact in or exact out)\n * @param amountGivenScaled18 Amount given based on kind of the swap (e.g., tokenIn for EXACT_IN)\n * @param balancesScaled18 Current pool balances\n * @param indexIn Index of tokenIn\n * @param indexOut Index of tokenOut\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param userData Additional (optional) data required for the swap\n */\nstruct PoolSwapParams {\n SwapKind kind;\n uint256 amountGivenScaled18;\n uint256[] balancesScaled18;\n uint256 indexIn;\n uint256 indexOut;\n address router;\n bytes userData;\n}\n\n/**\n * @notice Data for the hook after a swap operation.\n * @param kind Type of swap (exact in or exact out)\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param amountInScaled18 Amount of tokenIn (entering the Vault)\n * @param amountOutScaled18 Amount of tokenOut (leaving the Vault)\n * @param tokenInBalanceScaled18 Updated (after swap) balance of tokenIn\n * @param tokenOutBalanceScaled18 Updated (after swap) balance of tokenOut\n * @param amountCalculatedScaled18 Token amount calculated by the swap\n * @param amountCalculatedRaw Token amount calculated by the swap\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param pool Pool address\n * @param userData Additional (optional) data required for the swap\n */\nstruct AfterSwapParams {\n SwapKind kind;\n IERC20 tokenIn;\n IERC20 tokenOut;\n uint256 amountInScaled18;\n uint256 amountOutScaled18;\n uint256 tokenInBalanceScaled18;\n uint256 tokenOutBalanceScaled18;\n uint256 amountCalculatedScaled18;\n uint256 amountCalculatedRaw;\n address router;\n address pool;\n bytes userData;\n}\n\n/*******************************************************************************\n Add liquidity\n*******************************************************************************/\n\nenum AddLiquidityKind {\n PROPORTIONAL,\n UNBALANCED,\n SINGLE_TOKEN_EXACT_OUT,\n DONATION,\n CUSTOM\n}\n\n/**\n * @notice Data for an add liquidity operation.\n * @param pool Address of the pool\n * @param to Address of user to mint to\n * @param maxAmountsIn Maximum amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param kind Add liquidity kind\n * @param userData Optional user data\n */\nstruct AddLiquidityParams {\n address pool;\n address to;\n uint256[] maxAmountsIn;\n uint256 minBptAmountOut;\n AddLiquidityKind kind;\n bytes userData;\n}\n\n/*******************************************************************************\n Remove liquidity\n*******************************************************************************/\n\nenum RemoveLiquidityKind {\n PROPORTIONAL,\n SINGLE_TOKEN_EXACT_IN,\n SINGLE_TOKEN_EXACT_OUT,\n CUSTOM\n}\n\n/**\n * @notice Data for an remove liquidity operation.\n * @param pool Address of the pool\n * @param from Address of user to burn from\n * @param maxBptAmountIn Maximum amount of input pool tokens\n * @param minAmountsOut Minimum amounts of output tokens\n * @param kind Remove liquidity kind\n * @param userData Optional user data\n */\nstruct RemoveLiquidityParams {\n address pool;\n address from;\n uint256 maxBptAmountIn;\n uint256[] minAmountsOut;\n RemoveLiquidityKind kind;\n bytes userData;\n}\n\n/*******************************************************************************\n Remove liquidity\n*******************************************************************************/\n\nenum WrappingDirection {\n WRAP,\n UNWRAP\n}\n\n/**\n * @notice Data for a wrap/unwrap operation.\n * @param kind Type of swap (Exact In or Exact Out)\n * @param direction Direction of the wrapping operation (Wrap or Unwrap)\n * @param wrappedToken Wrapped token, compatible with interface ERC4626\n * @param amountGivenRaw Amount specified for tokenIn or tokenOut (depends on the type of swap and wrapping direction)\n * @param limitRaw Minimum or maximum amount specified for the other token (depends on the type of swap and wrapping\n * direction)\n */\nstruct BufferWrapOrUnwrapParams {\n SwapKind kind;\n WrappingDirection direction;\n IERC4626 wrappedToken;\n uint256 amountGivenRaw;\n uint256 limitRaw;\n}\n\n// Protocol Fees are 24-bit values. We transform them by multiplying by 1e11, so that they can be set to any value\n// between 0% and 100% (step 0.00001%). Protocol and pool creator fees are set in the `ProtocolFeeController`, and\n// ensure both constituent and aggregate fees do not exceed this precision.\nuint256 constant FEE_BITLENGTH = 24;\nuint256 constant FEE_SCALING_FACTOR = 1e11;\n// Used to ensure the safety of fee-related math (e.g., pools or hooks don't set it greater than 100%).\n// This value should work for practical purposes and is well within the max precision requirements.\nuint256 constant MAX_FEE_PERCENTAGE = 99.9999e16; // 99.9999%\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\";\n\n/**\n * @notice Building block for performing access control on external functions.\n * @dev This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be\n * applied to external functions to make them only callable by authorized accounts.\n *\n * Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.\n */\nabstract contract Authentication is IAuthentication {\n bytes32 private immutable _actionIdDisambiguator;\n\n /**\n * @dev The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in\n * multi-contract systems.\n *\n * There are two main uses for it:\n * - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers\n * unique. The contract's own address is a good option.\n * - if the contract belongs to a family that shares action identifiers for the same functions, an identifier\n * shared by the entire family (and no other contract) should be used instead.\n */\n constructor(bytes32 actionIdDisambiguator) {\n _actionIdDisambiguator = actionIdDisambiguator;\n }\n\n /// @dev Reverts unless the caller is allowed to call this function. Should only be applied to external functions.\n modifier authenticate() {\n _authenticateCaller();\n _;\n }\n\n /// @dev Reverts unless the caller is allowed to call the entry point function.\n function _authenticateCaller() internal view {\n bytes32 actionId = getActionId(msg.sig);\n\n if (!_canPerform(actionId, msg.sender)) {\n revert SenderNotAllowed();\n }\n }\n\n /// @inheritdoc IAuthentication\n function getActionId(bytes4 selector) public view override returns (bytes32) {\n // Each external function is dynamically assigned an action identifier as the hash of the disambiguator and the\n // function selector. Disambiguation is necessary to avoid potential collisions in the function selectors of\n // multiple contracts.\n return keccak256(abi.encodePacked(_actionIdDisambiguator, selector));\n }\n\n /**\n * @dev Derived contracts must implement this function to perform the actual access control logic.\n * @param actionId The action identifier associated with an external function\n * @param user The account performing the action\n * @return success True if the action is permitted\n */\n function _canPerform(bytes32 actionId, address user) internal view virtual returns (bool);\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { LogExpMath } from \"./LogExpMath.sol\";\n\n/// @notice Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision.\nlibrary FixedPoint {\n /// @notice Attempted division by zero.\n error ZeroDivision();\n\n // solhint-disable no-inline-assembly\n // solhint-disable private-vars-leading-underscore\n\n uint256 internal constant ONE = 1e18; // 18 decimal places\n uint256 internal constant TWO = 2 * ONE;\n uint256 internal constant FOUR = 4 * ONE;\n uint256 internal constant MAX_POW_RELATIVE_ERROR = 10000; // 10^(-14)\n\n function mulDown(uint256 a, uint256 b) internal pure returns (uint256) {\n // Multiplication overflow protection is provided by Solidity 0.8.x.\n uint256 product = a * b;\n\n return product / ONE;\n }\n\n function mulUp(uint256 a, uint256 b) internal pure returns (uint256 result) {\n // Multiplication overflow protection is provided by Solidity 0.8.x.\n uint256 product = a * b;\n\n // Equivalent to:\n // result = product == 0 ? 0 : ((product - 1) / FixedPoint.ONE) + 1\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(product)), add(div(sub(product, 1), ONE), 1))\n }\n }\n\n function divDown(uint256 a, uint256 b) internal pure returns (uint256) {\n // Solidity 0.8 reverts with a Panic code (0x11) if the multiplication overflows.\n uint256 aInflated = a * ONE;\n\n // Solidity 0.8 reverts with a \"Division by Zero\" Panic code (0x12) if b is zero\n return aInflated / b;\n }\n\n function divUp(uint256 a, uint256 b) internal pure returns (uint256 result) {\n return mulDivUp(a, ONE, b);\n }\n\n /// @dev Return (a * b) / c, rounding up.\n function mulDivUp(uint256 a, uint256 b, uint256 c) internal pure returns (uint256 result) {\n // This check is required because Yul's `div` doesn't revert on c==0.\n if (c == 0) {\n revert ZeroDivision();\n }\n\n // Multiple overflow protection is done by Solidity 0.8.x.\n uint256 product = a * b;\n\n // The traditional divUp formula is:\n // divUp(x, y) := (x + y - 1) / y\n // To avoid intermediate overflow in the addition, we distribute the division and get:\n // divUp(x, y) := (x - 1) / y + 1\n // Note that this requires x != 0, if x == 0 then the result is zero\n //\n // Equivalent to:\n // result = a == 0 ? 0 : (a * b - 1) / c + 1\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(product)), add(div(sub(product, 1), c), 1))\n }\n }\n\n /**\n * @dev Version of divUp when the input is raw (i.e., already \"inflated\"). For instance,\n * invariant * invariant (36 decimals) vs. invariant.mulDown(invariant) (18 decimal FP).\n * This can occur in calculations with many successive multiplications and divisions, and\n * we want to minimize the number of operations by avoiding unnecessary scaling by ONE.\n */\n function divUpRaw(uint256 a, uint256 b) internal pure returns (uint256 result) {\n // This check is required because Yul's `div` doesn't revert on b==0.\n if (b == 0) {\n revert ZeroDivision();\n }\n\n // Equivalent to:\n // result = a == 0 ? 0 : 1 + (a - 1) / b\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(a)), add(1, div(sub(a, 1), b)))\n }\n }\n\n /**\n * @dev Returns x^y, assuming both are fixed point numbers, rounding down. The result is guaranteed to not be above\n * the true value (that is, the error function expected - actual is always positive).\n */\n function powDown(uint256 x, uint256 y) internal pure returns (uint256) {\n // Optimize for when y equals 1.0, 2.0 or 4.0, as those are very simple to implement and occur often in 50/50\n // and 80/20 Weighted Pools\n if (y == ONE) {\n return x;\n } else if (y == TWO) {\n return mulDown(x, x);\n } else if (y == FOUR) {\n uint256 square = mulDown(x, x);\n return mulDown(square, square);\n } else {\n uint256 raw = LogExpMath.pow(x, y);\n uint256 maxError = mulUp(raw, MAX_POW_RELATIVE_ERROR) + 1;\n\n if (raw < maxError) {\n return 0;\n } else {\n unchecked {\n return raw - maxError;\n }\n }\n }\n }\n\n /**\n * @dev Returns x^y, assuming both are fixed point numbers, rounding up. The result is guaranteed to not be below\n * the true value (that is, the error function expected - actual is always negative).\n */\n function powUp(uint256 x, uint256 y) internal pure returns (uint256) {\n // Optimize for when y equals 1.0, 2.0 or 4.0, as those are very simple to implement and occur often in 50/50\n // and 80/20 Weighted Pools\n if (y == ONE) {\n return x;\n } else if (y == TWO) {\n return mulUp(x, x);\n } else if (y == FOUR) {\n uint256 square = mulUp(x, x);\n return mulUp(square, square);\n } else {\n uint256 raw = LogExpMath.pow(x, y);\n uint256 maxError = mulUp(raw, MAX_POW_RELATIVE_ERROR) + 1;\n\n return raw + maxError;\n }\n }\n\n /**\n * @dev Returns the complement of a value (1 - x), capped to 0 if x is larger than 1.\n *\n * Useful when computing the complement for values with some level of relative error, as it strips this error and\n * prevents intermediate negative values.\n */\n function complement(uint256 x) internal pure returns (uint256 result) {\n // Equivalent to:\n // result = (x < ONE) ? (ONE - x) : 0\n assembly (\"memory-safe\") {\n result := mul(lt(x, ONE), sub(ONE, x))\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\n// solhint-disable\n\n/**\n * @dev Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument).\n *\n * Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural\n * exponentiation and logarithm (where the base is Euler's number).\n *\n * All math operations are unchecked in order to save gas.\n *\n * @author Fernando Martinelli - @fernandomartinelli\n * @author Sergio Yuhjtman - @sergioyuhjtman\n * @author Daniel Fernandez - @dmf7z\n */\nlibrary LogExpMath {\n /// @notice This error is thrown when a base is not within an acceptable range.\n error BaseOutOfBounds();\n\n /// @notice This error is thrown when a exponent is not within an acceptable range.\n error ExponentOutOfBounds();\n\n /// @notice This error is thrown when the exponent * ln(base) is not within an acceptable range.\n error ProductOutOfBounds();\n\n /// @notice This error is thrown when an exponent used in the exp function is not within an acceptable range.\n error InvalidExponent();\n\n /// @notice This error is thrown when a variable or result is not within the acceptable bounds defined in the function.\n error OutOfBounds();\n\n // All fixed point multiplications and divisions are inlined. This means we need to divide by ONE when multiplying\n // two numbers, and multiply by ONE when dividing them.\n\n // All arguments and return values are 18 decimal fixed point numbers.\n int256 constant ONE_18 = 1e18;\n\n // Internally, intermediate values are computed with higher precision as 20 decimal fixed point numbers, and in the\n // case of ln36, 36 decimals.\n int256 constant ONE_20 = 1e20;\n int256 constant ONE_36 = 1e36;\n\n // The domain of natural exponentiation is bound by the word size and number of decimals used.\n //\n // Because internally the result will be stored using 20 decimals, the largest possible result is\n // (2^255 - 1) / 10^20, which makes the largest exponent ln((2^255 - 1) / 10^20) = 130.700829182905140221.\n // The smallest possible result is 10^(-18), which makes largest negative argument\n // ln(10^(-18)) = -41.446531673892822312.\n // We use 130.0 and -41.0 to have some safety margin.\n int256 constant MAX_NATURAL_EXPONENT = 130e18;\n int256 constant MIN_NATURAL_EXPONENT = -41e18;\n\n // Bounds for ln_36's argument. Both ln(0.9) and ln(1.1) can be represented with 36 decimal places in a fixed point\n // 256 bit integer.\n int256 constant LN_36_LOWER_BOUND = ONE_18 - 1e17;\n int256 constant LN_36_UPPER_BOUND = ONE_18 + 1e17;\n\n uint256 constant MILD_EXPONENT_BOUND = 2 ** 254 / uint256(ONE_20);\n\n // 18 decimal constants\n int256 constant x0 = 128000000000000000000; // 2ˆ7\n int256 constant a0 = 38877084059945950922200000000000000000000000000000000000; // eˆ(x0) (no decimals)\n int256 constant x1 = 64000000000000000000; // 2ˆ6\n int256 constant a1 = 6235149080811616882910000000; // eˆ(x1) (no decimals)\n\n // 20 decimal constants\n int256 constant x2 = 3200000000000000000000; // 2ˆ5\n int256 constant a2 = 7896296018268069516100000000000000; // eˆ(x2)\n int256 constant x3 = 1600000000000000000000; // 2ˆ4\n int256 constant a3 = 888611052050787263676000000; // eˆ(x3)\n int256 constant x4 = 800000000000000000000; // 2ˆ3\n int256 constant a4 = 298095798704172827474000; // eˆ(x4)\n int256 constant x5 = 400000000000000000000; // 2ˆ2\n int256 constant a5 = 5459815003314423907810; // eˆ(x5)\n int256 constant x6 = 200000000000000000000; // 2ˆ1\n int256 constant a6 = 738905609893065022723; // eˆ(x6)\n int256 constant x7 = 100000000000000000000; // 2ˆ0\n int256 constant a7 = 271828182845904523536; // eˆ(x7)\n int256 constant x8 = 50000000000000000000; // 2ˆ-1\n int256 constant a8 = 164872127070012814685; // eˆ(x8)\n int256 constant x9 = 25000000000000000000; // 2ˆ-2\n int256 constant a9 = 128402541668774148407; // eˆ(x9)\n int256 constant x10 = 12500000000000000000; // 2ˆ-3\n int256 constant a10 = 113314845306682631683; // eˆ(x10)\n int256 constant x11 = 6250000000000000000; // 2ˆ-4\n int256 constant a11 = 106449445891785942956; // eˆ(x11)\n\n /**\n * @dev Exponentiation (x^y) with unsigned 18 decimal fixed point base and exponent.\n *\n * Reverts if ln(x) * y is smaller than `MIN_NATURAL_EXPONENT`, or larger than `MAX_NATURAL_EXPONENT`.\n */\n function pow(uint256 x, uint256 y) internal pure returns (uint256) {\n if (y == 0) {\n // We solve the 0^0 indetermination by making it equal one.\n return uint256(ONE_18);\n }\n\n if (x == 0) {\n return 0;\n }\n\n // Instead of computing x^y directly, we instead rely on the properties of logarithms and exponentiation to\n // arrive at that result. In particular, exp(ln(x)) = x, and ln(x^y) = y * ln(x). This means\n // x^y = exp(y * ln(x)).\n\n // The ln function takes a signed value, so we need to make sure x fits in the signed 256 bit range.\n if (x >> 255 != 0) {\n revert BaseOutOfBounds();\n }\n int256 x_int256 = int256(x);\n\n // We will compute y * ln(x) in a single step. Depending on the value of x, we can either use ln or ln_36. In\n // both cases, we leave the division by ONE_18 (due to fixed point multiplication) to the end.\n\n // This prevents y * ln(x) from overflowing, and at the same time guarantees y fits in the signed 256 bit range.\n if (y >= MILD_EXPONENT_BOUND) {\n revert ExponentOutOfBounds();\n }\n int256 y_int256 = int256(y);\n\n int256 logx_times_y;\n unchecked {\n if (LN_36_LOWER_BOUND < x_int256 && x_int256 < LN_36_UPPER_BOUND) {\n int256 ln_36_x = _ln_36(x_int256);\n\n // ln_36_x has 36 decimal places, so multiplying by y_int256 isn't as straightforward, since we can't just\n // bring y_int256 to 36 decimal places, as it might overflow. Instead, we perform two 18 decimal\n // multiplications and add the results: one with the first 18 decimals of ln_36_x, and one with the\n // (downscaled) last 18 decimals.\n logx_times_y = ((ln_36_x / ONE_18) * y_int256 + ((ln_36_x % ONE_18) * y_int256) / ONE_18);\n } else {\n logx_times_y = _ln(x_int256) * y_int256;\n }\n logx_times_y /= ONE_18;\n }\n\n // Finally, we compute exp(y * ln(x)) to arrive at x^y\n if (!(MIN_NATURAL_EXPONENT <= logx_times_y && logx_times_y <= MAX_NATURAL_EXPONENT)) {\n revert ProductOutOfBounds();\n }\n\n return uint256(exp(logx_times_y));\n }\n\n /**\n * @dev Natural exponentiation (e^x) with signed 18 decimal fixed point exponent.\n *\n * Reverts if `x` is smaller than MIN_NATURAL_EXPONENT, or larger than `MAX_NATURAL_EXPONENT`.\n */\n function exp(int256 x) internal pure returns (int256) {\n if (!(x >= MIN_NATURAL_EXPONENT && x <= MAX_NATURAL_EXPONENT)) {\n revert InvalidExponent();\n }\n\n // We avoid using recursion here because zkSync doesn't support it.\n bool negativeExponent = false;\n\n if (x < 0) {\n // We only handle positive exponents: e^(-x) is computed as 1 / e^x. We can safely make x positive since it\n // fits in the signed 256 bit range (as it is larger than MIN_NATURAL_EXPONENT). In the negative\n // exponent case, compute e^x, then return 1 / result.\n unchecked {\n x = -x;\n }\n negativeExponent = true;\n }\n\n // First, we use the fact that e^(x+y) = e^x * e^y to decompose x into a sum of powers of two, which we call x_n,\n // where x_n == 2^(7 - n), and e^x_n = a_n has been precomputed. We choose the first x_n, x0, to equal 2^7\n // because all larger powers are larger than MAX_NATURAL_EXPONENT, and therefore not present in the\n // decomposition.\n // At the end of this process we will have the product of all e^x_n = a_n that apply, and the remainder of this\n // decomposition, which will be lower than the smallest x_n.\n // exp(x) = k_0 * a_0 * k_1 * a_1 * ... + k_n * a_n * exp(remainder), where each k_n equals either 0 or 1.\n // We mutate x by subtracting x_n, making it the remainder of the decomposition.\n\n // The first two a_n (e^(2^7) and e^(2^6)) are too large if stored as 18 decimal numbers, and could cause\n // intermediate overflows. Instead we store them as plain integers, with 0 decimals.\n // Additionally, x0 + x1 is larger than MAX_NATURAL_EXPONENT, which means they will not both be present in the\n // decomposition.\n\n // For each x_n, we test if that term is present in the decomposition (if x is larger than it), and if so deduct\n // it and compute the accumulated product.\n\n int256 firstAN;\n unchecked {\n if (x >= x0) {\n x -= x0;\n firstAN = a0;\n } else if (x >= x1) {\n x -= x1;\n firstAN = a1;\n } else {\n firstAN = 1; // One with no decimal places\n }\n\n // We now transform x into a 20 decimal fixed point number, to have enhanced precision when computing the\n // smaller terms.\n x *= 100;\n }\n\n // `product` is the accumulated product of all a_n (except a0 and a1), which starts at 20 decimal fixed point\n // one. Recall that fixed point multiplication requires dividing by ONE_20.\n int256 product = ONE_20;\n\n unchecked {\n if (x >= x2) {\n x -= x2;\n product = (product * a2) / ONE_20;\n }\n if (x >= x3) {\n x -= x3;\n product = (product * a3) / ONE_20;\n }\n if (x >= x4) {\n x -= x4;\n product = (product * a4) / ONE_20;\n }\n if (x >= x5) {\n x -= x5;\n product = (product * a5) / ONE_20;\n }\n if (x >= x6) {\n x -= x6;\n product = (product * a6) / ONE_20;\n }\n if (x >= x7) {\n x -= x7;\n product = (product * a7) / ONE_20;\n }\n if (x >= x8) {\n x -= x8;\n product = (product * a8) / ONE_20;\n }\n if (x >= x9) {\n x -= x9;\n product = (product * a9) / ONE_20;\n }\n }\n\n // x10 and x11 are unnecessary here since we have high enough precision already.\n\n // Now we need to compute e^x, where x is small (in particular, it is smaller than x9). We use the Taylor series\n // expansion for e^x: 1 + x + (x^2 / 2!) + (x^3 / 3!) + ... + (x^n / n!).\n\n int256 seriesSum = ONE_20; // The initial one in the sum, with 20 decimal places.\n int256 term; // Each term in the sum, where the nth term is (x^n / n!).\n\n // The first term is simply x.\n term = x;\n unchecked {\n seriesSum += term;\n\n // Each term (x^n / n!) equals the previous one times x, divided by n. Since x is a fixed point number,\n // multiplying by it requires dividing by ONE_20, but dividing by the non-fixed point n values does not.\n\n term = ((term * x) / ONE_20) / 2;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 3;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 4;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 5;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 6;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 7;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 8;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 9;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 10;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 11;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 12;\n seriesSum += term;\n\n // 12 Taylor terms are sufficient for 18 decimal precision.\n\n // We now have the first a_n (with no decimals), and the product of all other a_n present, and the Taylor\n // approximation of the exponentiation of the remainder (both with 20 decimals). All that remains is to multiply\n // all three (one 20 decimal fixed point multiplication, dividing by ONE_20, and one integer multiplication),\n // and then drop two digits to return an 18 decimal value.\n\n int256 result = (((product * seriesSum) / ONE_20) * firstAN) / 100;\n\n // We avoid using recursion here because zkSync doesn't support it.\n return negativeExponent ? (ONE_18 * ONE_18) / result : result;\n }\n }\n\n /// @dev Logarithm (log(arg, base), with signed 18 decimal fixed point base and argument.\n function log(int256 arg, int256 base) internal pure returns (int256) {\n // This performs a simple base change: log(arg, base) = ln(arg) / ln(base).\n\n // Both logBase and logArg are computed as 36 decimal fixed point numbers, either by using ln_36, or by\n // upscaling.\n\n int256 logBase;\n unchecked {\n if (LN_36_LOWER_BOUND < base && base < LN_36_UPPER_BOUND) {\n logBase = _ln_36(base);\n } else {\n logBase = _ln(base) * ONE_18;\n }\n }\n\n int256 logArg;\n unchecked {\n if (LN_36_LOWER_BOUND < arg && arg < LN_36_UPPER_BOUND) {\n logArg = _ln_36(arg);\n } else {\n logArg = _ln(arg) * ONE_18;\n }\n\n // When dividing, we multiply by ONE_18 to arrive at a result with 18 decimal places\n return (logArg * ONE_18) / logBase;\n }\n }\n\n /// @dev Natural logarithm (ln(a)) with signed 18 decimal fixed point argument.\n function ln(int256 a) internal pure returns (int256) {\n // The real natural logarithm is not defined for negative numbers or zero.\n if (a <= 0) {\n revert OutOfBounds();\n }\n if (LN_36_LOWER_BOUND < a && a < LN_36_UPPER_BOUND) {\n unchecked {\n return _ln_36(a) / ONE_18;\n }\n } else {\n return _ln(a);\n }\n }\n\n /// @dev Internal natural logarithm (ln(a)) with signed 18 decimal fixed point argument.\n function _ln(int256 a) private pure returns (int256) {\n // We avoid using recursion here because zkSync doesn't support it.\n bool negativeExponent = false;\n\n if (a < ONE_18) {\n // Since ln(a^k) = k * ln(a), we can compute ln(a) as ln(a) = ln((1/a)^(-1)) = - ln((1/a)). If a is less\n // than one, 1/a will be greater than one, so in this case we compute ln(1/a) and negate the final result.\n unchecked {\n a = (ONE_18 * ONE_18) / a;\n }\n negativeExponent = true;\n }\n\n // First, we use the fact that ln^(a * b) = ln(a) + ln(b) to decompose ln(a) into a sum of powers of two, which\n // we call x_n, where x_n == 2^(7 - n), which are the natural logarithm of precomputed quantities a_n (that is,\n // ln(a_n) = x_n). We choose the first x_n, x0, to equal 2^7 because the exponential of all larger powers cannot\n // be represented as 18 fixed point decimal numbers in 256 bits, and are therefore larger than a.\n // At the end of this process we will have the sum of all x_n = ln(a_n) that apply, and the remainder of this\n // decomposition, which will be lower than the smallest a_n.\n // ln(a) = k_0 * x_0 + k_1 * x_1 + ... + k_n * x_n + ln(remainder), where each k_n equals either 0 or 1.\n // We mutate a by subtracting a_n, making it the remainder of the decomposition.\n\n // For reasons related to how `exp` works, the first two a_n (e^(2^7) and e^(2^6)) are not stored as fixed point\n // numbers with 18 decimals, but instead as plain integers with 0 decimals, so we need to multiply them by\n // ONE_18 to convert them to fixed point.\n // For each a_n, we test if that term is present in the decomposition (if a is larger than it), and if so divide\n // by it and compute the accumulated sum.\n\n int256 sum = 0;\n unchecked {\n if (a >= a0 * ONE_18) {\n a /= a0; // Integer, not fixed point division\n sum += x0;\n }\n\n if (a >= a1 * ONE_18) {\n a /= a1; // Integer, not fixed point division\n sum += x1;\n }\n\n // All other a_n and x_n are stored as 20 digit fixed point numbers, so we convert the sum and a to this format.\n sum *= 100;\n a *= 100;\n\n // Because further a_n are 20 digit fixed point numbers, we multiply by ONE_20 when dividing by them.\n\n if (a >= a2) {\n a = (a * ONE_20) / a2;\n sum += x2;\n }\n\n if (a >= a3) {\n a = (a * ONE_20) / a3;\n sum += x3;\n }\n\n if (a >= a4) {\n a = (a * ONE_20) / a4;\n sum += x4;\n }\n\n if (a >= a5) {\n a = (a * ONE_20) / a5;\n sum += x5;\n }\n\n if (a >= a6) {\n a = (a * ONE_20) / a6;\n sum += x6;\n }\n\n if (a >= a7) {\n a = (a * ONE_20) / a7;\n sum += x7;\n }\n\n if (a >= a8) {\n a = (a * ONE_20) / a8;\n sum += x8;\n }\n\n if (a >= a9) {\n a = (a * ONE_20) / a9;\n sum += x9;\n }\n\n if (a >= a10) {\n a = (a * ONE_20) / a10;\n sum += x10;\n }\n\n if (a >= a11) {\n a = (a * ONE_20) / a11;\n sum += x11;\n }\n }\n\n // a is now a small number (smaller than a_11, which roughly equals 1.06). This means we can use a Taylor series\n // that converges rapidly for values of `a` close to one - the same one used in ln_36.\n // Let z = (a - 1) / (a + 1).\n // ln(a) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 20 digit fixed point division requires multiplying by ONE_20, and multiplication requires\n // division by ONE_20.\n unchecked {\n int256 z = ((a - ONE_20) * ONE_20) / (a + ONE_20);\n int256 z_squared = (z * z) / ONE_20;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n int256 num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n int256 seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 3;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 5;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 7;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 9;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 11;\n\n // 6 Taylor terms are sufficient for 36 decimal precision.\n\n // Finally, we multiply by 2 (non fixed point) to compute ln(remainder)\n seriesSum *= 2;\n\n // We now have the sum of all x_n present, and the Taylor approximation of the logarithm of the remainder (both\n // with 20 decimals). All that remains is to sum these two, and then drop two digits to return a 18 decimal\n // value.\n\n int256 result = (sum + seriesSum) / 100;\n\n // We avoid using recursion here because zkSync doesn't support it.\n return negativeExponent ? -result : result;\n }\n }\n\n /**\n * @dev Internal high precision (36 decimal places) natural logarithm (ln(x)) with signed 18 decimal fixed point argument,\n * for x close to one.\n *\n * Should only be used if x is between LN_36_LOWER_BOUND and LN_36_UPPER_BOUND.\n */\n function _ln_36(int256 x) private pure returns (int256) {\n // Since ln(1) = 0, a value of x close to one will yield a very small result, which makes using 36 digits\n // worthwhile.\n\n // First, we transform x to a 36 digit fixed point value.\n unchecked {\n x *= ONE_18;\n\n // We will use the following Taylor expansion, which converges very rapidly. Let z = (x - 1) / (x + 1).\n // ln(x) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 36 digit fixed point division requires multiplying by ONE_36, and multiplication requires\n // division by ONE_36.\n int256 z = ((x - ONE_36) * ONE_36) / (x + ONE_36);\n int256 z_squared = (z * z) / ONE_36;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n int256 num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n int256 seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 3;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 5;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 7;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 9;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 11;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 13;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 15;\n\n // 8 Taylor terms are sufficient for 36 decimal precision.\n\n // All that remains is multiplying by 2 (non fixed point).\n return seriesSum * 2;\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\nimport { StorageSlotExtension } from \"./StorageSlotExtension.sol\";\n\n/**\n * @notice Variant of {ReentrancyGuard} that uses transient storage.\n * @dev NOTE: This variant only works on networks where EIP-1153 is available.\n */\nabstract contract ReentrancyGuardTransient {\n using StorageSlotExtension for *;\n\n // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.ReentrancyGuard\")) - 1)) & ~bytes32(uint256(0xff))\n bytes32 private constant _REENTRANCY_GUARD_STORAGE =\n 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00;\n\n /// @notice Unauthorized reentrant call.\n error ReentrancyGuardReentrantCall();\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and making it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n _nonReentrantBefore();\n _;\n _nonReentrantAfter();\n }\n\n function _nonReentrantBefore() private {\n // On the first call to nonReentrant, _status will be NOT_ENTERED.\n if (_reentrancyGuardEntered()) {\n revert ReentrancyGuardReentrantCall();\n }\n\n // Any calls to nonReentrant after this point will fail.\n _REENTRANCY_GUARD_STORAGE.asBoolean().tstore(true);\n }\n\n function _nonReentrantAfter() private {\n _REENTRANCY_GUARD_STORAGE.asBoolean().tstore(false);\n }\n\n /**\n * @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n * `nonReentrant` function in the call stack.\n */\n function _reentrancyGuardEntered() internal view returns (bool) {\n return _REENTRANCY_GUARD_STORAGE.asBoolean().tload();\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\n * @dev TIP: Consider using this library along with {SlotDerivation}.\n */\nlibrary StorageSlotExtension {\n struct Int256Slot {\n int256 value;\n }\n\n /// @dev Returns an `Int256Slot` with member `value` located at `slot`.\n function getInt256Slot(bytes32 slot) internal pure returns (Int256Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /// @dev Custom type that represents a slot holding an address.\n type AddressSlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a AddressSlotType.\n function asAddress(bytes32 slot) internal pure returns (AddressSlotType) {\n return AddressSlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a boolean.\n type BooleanSlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a BooleanSlotType.\n function asBoolean(bytes32 slot) internal pure returns (BooleanSlotType) {\n return BooleanSlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a bytes32.\n type Bytes32SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a Bytes32SlotType.\n function asBytes32(bytes32 slot) internal pure returns (Bytes32SlotType) {\n return Bytes32SlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a uint256.\n type Uint256SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a Uint256SlotType.\n function asUint256(bytes32 slot) internal pure returns (Uint256SlotType) {\n return Uint256SlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding an int256.\n type Int256SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to an Int256SlotType.\n function asInt256(bytes32 slot) internal pure returns (Int256SlotType) {\n return Int256SlotType.wrap(slot);\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(AddressSlotType slot) internal view returns (address value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(AddressSlotType slot, address value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(BooleanSlotType slot) internal view returns (bool value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(BooleanSlotType slot, bool value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Bytes32SlotType slot) internal view returns (bytes32 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Bytes32SlotType slot, bytes32 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Uint256SlotType slot) internal view returns (uint256 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Uint256SlotType slot, uint256 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Int256SlotType slot) internal view returns (int256 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Int256SlotType slot, int256 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n}\n"},"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport {\n FEE_SCALING_FACTOR,\n MAX_FEE_PERCENTAGE,\n PoolRoleAccounts\n} from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\n\nimport { SingletonAuthentication } from \"./SingletonAuthentication.sol\";\nimport { VaultGuard } from \"./VaultGuard.sol\";\n\n/**\n * @notice Helper contract to manage protocol and creator fees outside the Vault.\n * @dev This contract stores global default protocol swap and yield fees, and also tracks the values of those fees\n * for each pool (the `PoolFeeConfig` described below). Protocol fees can always be overwritten by governance, but\n * pool creator fees are controlled by the registered poolCreator (see `PoolRoleAccounts`).\n *\n * The Vault stores a single aggregate percentage for swap and yield fees; only this `ProtocolFeeController` knows\n * the component fee percentages, and how to compute the aggregate from the components. This is done for performance\n * reasons, to minimize gas on the critical path, as this way the Vault simply applies a single \"cut\", and stores the\n * fee amounts separately from the pool balances.\n *\n * The pool creator fees are \"net\" protocol fees, meaning the protocol fee is taken first, and the pool creator fee\n * percentage is applied to the remainder. Essentially, the protocol is paid first, then the remainder is divided\n * between the pool creator and the LPs.\n *\n * There is a permissionless function (`collectAggregateFees`) that transfers these tokens from the Vault to this\n * contract, and distributes them between the protocol and pool creator, after which they can be withdrawn at any\n * time by governance and the pool creator, respectively.\n *\n * Protocol fees can be zero in some cases (e.g., the token is registered as exempt), and pool creator fees are zero\n * if there is no creator role address defined. Protocol fees are capped at a maximum percentage (50%); pool creator\n * fees are computed \"net\" protocol fees, so they can be any value from 0 to 100%. Any combination is possible.\n * A protocol-fee-exempt pool with a 100% pool creator fee would send all fees to the creator. If there is no pool\n * creator, a pool with a 50% protocol fee would divide the fees evenly between the protocol and LPs.\n *\n * This contract is deployed with the Vault, but can be changed by governance.\n */\ncontract ProtocolFeeController is\n IProtocolFeeController,\n SingletonAuthentication,\n ReentrancyGuardTransient,\n VaultGuard\n{\n using FixedPoint for uint256;\n using SafeERC20 for IERC20;\n using SafeCast for *;\n\n enum ProtocolFeeType {\n SWAP,\n YIELD\n }\n\n /**\n * @notice Fee configuration stored in the swap and yield fee mappings.\n * @dev Instead of storing only the fee in the mapping, also store a flag to indicate whether the fee has been\n * set by governance through a permissioned call. (The fee is stored in 64-bits, so that the struct fits\n * within a single slot.)\n *\n * We know the percentage is an 18-decimal FP value, which only takes 60 bits, so it's guaranteed to fit,\n * and we can do simple casts to truncate the high bits without needed SafeCast.\n *\n * We want to enable permissionless updates for pools, so that it is less onerous to update potentially\n * hundreds of pools if the global protocol fees change. However, we don't want to overwrite pools that\n * have had their fee percentages manually set by the DAO (i.e., after off-chain negotiation and agreement).\n *\n * @param feePercentage The raw swap or yield fee percentage\n * @param isOverride When set, this fee is controlled by governance, and cannot be changed permissionlessly\n */\n struct PoolFeeConfig {\n uint64 feePercentage;\n bool isOverride;\n }\n\n // Maximum protocol swap fee percentage. FixedPoint.ONE corresponds to a 100% fee.\n uint256 public constant MAX_PROTOCOL_SWAP_FEE_PERCENTAGE = 50e16; // 50%\n\n // Maximum protocol yield fee percentage.\n uint256 public constant MAX_PROTOCOL_YIELD_FEE_PERCENTAGE = 50e16; // 50%\n\n // Maximum pool creator (swap, yield) fee percentage.\n uint256 public constant MAX_CREATOR_FEE_PERCENTAGE = 99.999e16; // 99.999%\n\n // Global protocol swap fee.\n uint256 private _globalProtocolSwapFeePercentage;\n\n // Global protocol yield fee.\n uint256 private _globalProtocolYieldFeePercentage;\n\n // Explicitly mark a pool as registered. This will enable future migrations to safely update protected state.\n mapping(address pool => bool isRegistered) internal _registeredPools;\n\n // Store the pool-specific swap fee percentages (the Vault's poolConfigBits stores the aggregate percentage).\n mapping(address pool => PoolFeeConfig swapFeeConfig) internal _poolProtocolSwapFeePercentages;\n\n // Store the pool-specific yield fee percentages (the Vault's poolConfigBits stores the aggregate percentage).\n mapping(address pool => PoolFeeConfig yieldFeeConfig) internal _poolProtocolYieldFeePercentages;\n\n // Pool creator swap fee percentages for each pool.\n mapping(address pool => uint256 poolCreatorSwapFee) internal _poolCreatorSwapFeePercentages;\n\n // Pool creator yield fee percentages for each pool.\n mapping(address pool => uint256 poolCreatorYieldFee) internal _poolCreatorYieldFeePercentages;\n\n // Disaggregated protocol fees (from swap and yield), available for withdrawal by governance.\n mapping(address pool => mapping(IERC20 poolToken => uint256 feeAmount)) internal _protocolFeeAmounts;\n\n // Disaggregated pool creator fees (from swap and yield), available for withdrawal by the pool creator.\n mapping(address pool => mapping(IERC20 poolToken => uint256 feeAmount)) internal _poolCreatorFeeAmounts;\n\n /**\n * @notice Prevent pool data from being registered more than once.\n * @dev This can happen if there is an error in the migration, or if governance somehow grants permission to\n * `migratePool`, which should never happen.\n *\n * @param pool The pool\n */\n error PoolAlreadyRegistered(address pool);\n\n /// @notice Migration source cannot be this contract.\n error InvalidMigrationSource();\n\n // Ensure that the caller is the pool creator.\n modifier onlyPoolCreator(address pool) {\n _ensureCallerIsPoolCreator(pool);\n _;\n }\n\n // Validate the swap fee percentage against the maximum.\n modifier withValidSwapFee(uint256 newSwapFeePercentage) {\n if (newSwapFeePercentage > MAX_PROTOCOL_SWAP_FEE_PERCENTAGE) {\n revert ProtocolSwapFeePercentageTooHigh();\n }\n _ensureValidPrecision(newSwapFeePercentage);\n _;\n }\n\n // Validate the yield fee percentage against the maximum.\n modifier withValidYieldFee(uint256 newYieldFeePercentage) {\n if (newYieldFeePercentage > MAX_PROTOCOL_YIELD_FEE_PERCENTAGE) {\n revert ProtocolYieldFeePercentageTooHigh();\n }\n _ensureValidPrecision(newYieldFeePercentage);\n _;\n }\n\n modifier withValidPoolCreatorFee(uint256 newPoolCreatorFeePercentage) {\n if (newPoolCreatorFeePercentage > MAX_CREATOR_FEE_PERCENTAGE) {\n revert PoolCreatorFeePercentageTooHigh();\n }\n _;\n }\n\n // Force collection and disaggregation (e.g., before changing protocol fee percentages).\n modifier withLatestFees(address pool) {\n collectAggregateFees(pool);\n _;\n }\n\n constructor(IVault vault_) SingletonAuthentication(vault_) VaultGuard(vault_) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /// @inheritdoc IProtocolFeeController\n function vault() external view returns (IVault) {\n return _vault;\n }\n\n /// @inheritdoc IProtocolFeeController\n function collectAggregateFees(address pool) public {\n _vault.unlock(abi.encodeCall(ProtocolFeeController.collectAggregateFeesHook, pool));\n }\n\n /**\n * @dev Copy and zero out the `aggregateFeeAmounts` collected in the Vault accounting, supplying credit\n * for each token. Then have the Vault transfer tokens to this contract, debiting each token for the amount\n * transferred so that the transaction settles when the hook returns.\n */\n function collectAggregateFeesHook(address pool) external onlyVault {\n (uint256[] memory totalSwapFees, uint256[] memory totalYieldFees) = _vault.collectAggregateFees(pool);\n _receiveAggregateFees(pool, totalSwapFees, totalYieldFees);\n }\n\n /**\n * @notice Settle fee credits from the Vault.\n * @dev This must be called after calling `collectAggregateFees` in the Vault. Note that since charging protocol\n * fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection\n * happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations. The Vault\n * differentiates between swap and yield fees (since they can have different percentage values); the Controller\n * combines swap and yield fees, then allocates the total between the protocol and pool creator.\n *\n * @param pool The address of the pool on which the swap fees were charged\n * @param swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n * @param yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order\n */\n function _receiveAggregateFees(\n address pool,\n uint256[] memory swapFeeAmounts,\n uint256[] memory yieldFeeAmounts\n ) internal {\n _receiveAggregateFees(pool, ProtocolFeeType.SWAP, swapFeeAmounts);\n _receiveAggregateFees(pool, ProtocolFeeType.YIELD, yieldFeeAmounts);\n }\n\n function _receiveAggregateFees(address pool, ProtocolFeeType feeType, uint256[] memory feeAmounts) private {\n // There are two cases when we don't need to split fees (in which case we can save gas and avoid rounding\n // errors by skipping calculations) if either the protocol or pool creator fee percentage is zero.\n\n uint256 protocolFeePercentage = feeType == ProtocolFeeType.SWAP\n ? _poolProtocolSwapFeePercentages[pool].feePercentage\n : _poolProtocolYieldFeePercentages[pool].feePercentage;\n\n uint256 poolCreatorFeePercentage = feeType == ProtocolFeeType.SWAP\n ? _poolCreatorSwapFeePercentages[pool]\n : _poolCreatorYieldFeePercentages[pool];\n\n uint256 aggregateFeePercentage;\n\n bool needToSplitFees = poolCreatorFeePercentage > 0 && protocolFeePercentage > 0;\n if (needToSplitFees) {\n // Calculate once, outside the loop.\n aggregateFeePercentage = _computeAggregateFeePercentage(protocolFeePercentage, poolCreatorFeePercentage);\n }\n\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n for (uint256 i = 0; i < numTokens; ++i) {\n if (feeAmounts[i] > 0) {\n IERC20 token = poolTokens[i];\n\n _vault.sendTo(token, address(this), feeAmounts[i]);\n\n // It should be easier for off-chain processes to handle two events, rather than parsing the type\n // out of a single event.\n if (feeType == ProtocolFeeType.SWAP) {\n emit ProtocolSwapFeeCollected(pool, token, feeAmounts[i]);\n } else {\n emit ProtocolYieldFeeCollected(pool, token, feeAmounts[i]);\n }\n\n if (needToSplitFees) {\n // The Vault took a single \"cut\" for the aggregate total percentage (protocol + pool creator) for\n // this fee type (swap or yield). The first step is to reconstruct this total fee amount. Then we\n // need to \"disaggregate\" this total, dividing it between the protocol and pool creator according\n // to their individual percentages. We do this by computing the protocol portion first, then\n // assigning the remainder to the pool creator.\n uint256 totalFeeAmountRaw = feeAmounts[i].divUp(aggregateFeePercentage);\n uint256 protocolPortion = totalFeeAmountRaw.mulUp(protocolFeePercentage);\n\n _protocolFeeAmounts[pool][token] += protocolPortion;\n _poolCreatorFeeAmounts[pool][token] += feeAmounts[i] - protocolPortion;\n } else {\n // If we don't need to split, one of them must be zero.\n if (poolCreatorFeePercentage == 0) {\n _protocolFeeAmounts[pool][token] += feeAmounts[i];\n } else {\n _poolCreatorFeeAmounts[pool][token] += feeAmounts[i];\n }\n }\n }\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function getGlobalProtocolSwapFeePercentage() external view returns (uint256) {\n return _globalProtocolSwapFeePercentage;\n }\n\n /// @inheritdoc IProtocolFeeController\n function getGlobalProtocolYieldFeePercentage() external view returns (uint256) {\n return _globalProtocolYieldFeePercentage;\n }\n\n /// @inheritdoc IProtocolFeeController\n function isPoolRegistered(address pool) external view returns (bool) {\n return _registeredPools[pool];\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolProtocolSwapFeeInfo(address pool) external view returns (uint256, bool) {\n PoolFeeConfig memory config = _poolProtocolSwapFeePercentages[pool];\n\n return (config.feePercentage, config.isOverride);\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolProtocolYieldFeeInfo(address pool) external view returns (uint256, bool) {\n PoolFeeConfig memory config = _poolProtocolYieldFeePercentages[pool];\n\n return (config.feePercentage, config.isOverride);\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolCreatorSwapFeePercentage(address pool) external view returns (uint256) {\n return _poolCreatorSwapFeePercentages[pool];\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolCreatorYieldFeePercentage(address pool) external view returns (uint256) {\n return _poolCreatorYieldFeePercentages[pool];\n }\n\n /// @inheritdoc IProtocolFeeController\n function getProtocolFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts) {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n feeAmounts = new uint256[](numTokens);\n for (uint256 i = 0; i < numTokens; ++i) {\n feeAmounts[i] = _protocolFeeAmounts[pool][poolTokens[i]];\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolCreatorFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts) {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n feeAmounts = new uint256[](numTokens);\n for (uint256 i = 0; i < numTokens; ++i) {\n feeAmounts[i] = _poolCreatorFeeAmounts[pool][poolTokens[i]];\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) external pure returns (uint256) {\n return _computeAggregateFeePercentage(protocolFeePercentage, poolCreatorFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function updateProtocolSwapFeePercentage(address pool) external withLatestFees(pool) {\n PoolFeeConfig memory feeConfig = _poolProtocolSwapFeePercentages[pool];\n uint256 globalProtocolSwapFee = _globalProtocolSwapFeePercentage;\n\n if (feeConfig.isOverride == false && globalProtocolSwapFee != feeConfig.feePercentage) {\n _updatePoolSwapFeePercentage(pool, globalProtocolSwapFee, false);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function updateProtocolYieldFeePercentage(address pool) external withLatestFees(pool) {\n PoolFeeConfig memory feeConfig = _poolProtocolYieldFeePercentages[pool];\n uint256 globalProtocolYieldFee = _globalProtocolYieldFeePercentage;\n\n if (feeConfig.isOverride == false && globalProtocolYieldFee != feeConfig.feePercentage) {\n _updatePoolYieldFeePercentage(pool, globalProtocolYieldFee, false);\n }\n }\n\n function _getAggregateFeePercentage(address pool, ProtocolFeeType feeType) internal view returns (uint256) {\n uint256 protocolFeePercentage;\n uint256 poolCreatorFeePercentage;\n\n if (feeType == ProtocolFeeType.SWAP) {\n protocolFeePercentage = _poolProtocolSwapFeePercentages[pool].feePercentage;\n poolCreatorFeePercentage = _poolCreatorSwapFeePercentages[pool];\n } else {\n protocolFeePercentage = _poolProtocolYieldFeePercentages[pool].feePercentage;\n poolCreatorFeePercentage = _poolCreatorYieldFeePercentages[pool];\n }\n\n return _computeAggregateFeePercentage(protocolFeePercentage, poolCreatorFeePercentage);\n }\n\n function _computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) internal pure returns (uint256 aggregateFeePercentage) {\n aggregateFeePercentage =\n protocolFeePercentage +\n protocolFeePercentage.complement().mulDown(poolCreatorFeePercentage);\n\n // Protocol fee percentages are limited to 24-bit precision for performance reasons (i.e., to fit all the fees\n // in a single slot), and because high precision is not needed. Generally we expect protocol fees set by\n // governance to be simple integers.\n //\n // However, the pool creator fee is entirely controlled by the pool creator, and it is possible to craft a\n // valid pool creator fee percentage that would cause the aggregate fee percentage to fail the precision check.\n // This case should be rare, so we ensure this can't happen by truncating the final value.\n aggregateFeePercentage = (aggregateFeePercentage / FEE_SCALING_FACTOR) * FEE_SCALING_FACTOR;\n }\n\n function _ensureCallerIsPoolCreator(address pool) internal view {\n address poolCreator = _getPoolCreator(pool);\n\n if (poolCreator == address(0)) {\n revert PoolCreatorNotRegistered(pool);\n }\n\n if (poolCreator != msg.sender) {\n revert CallerIsNotPoolCreator(msg.sender, pool);\n }\n }\n\n function _getPoolTokensAndCount(address pool) internal view returns (IERC20[] memory tokens, uint256 numTokens) {\n tokens = _vault.getPoolTokens(pool);\n numTokens = tokens.length;\n }\n\n // Retrieve the pool creator for a pool from the Vault.\n function _getPoolCreator(address pool) internal view returns (address) {\n PoolRoleAccounts memory roleAccounts = _vault.getPoolRoleAccounts(pool);\n\n return roleAccounts.poolCreator;\n }\n\n /***************************************************************************\n Permissioned Functions\n ***************************************************************************/\n\n /// @inheritdoc IProtocolFeeController\n function registerPool(\n address pool,\n address poolCreator,\n bool protocolFeeExempt\n ) external onlyVault returns (uint256 aggregateSwapFeePercentage, uint256 aggregateYieldFeePercentage) {\n _registeredPools[pool] = true;\n\n // Set local storage of the actual percentages for the pool (default to global).\n aggregateSwapFeePercentage = protocolFeeExempt ? 0 : _globalProtocolSwapFeePercentage;\n aggregateYieldFeePercentage = protocolFeeExempt ? 0 : _globalProtocolYieldFeePercentage;\n\n // `isOverride` is true if the pool is protocol fee exempt; otherwise, default to false.\n // If exempt, this pool cannot be updated to the current global percentage permissionlessly.\n // The percentages are 18 decimal floating point numbers, bound between 0 and the max fee (<= FixedPoint.ONE).\n // Since this fits in 64 bits, the SafeCast shouldn't be necessary, and is done out of an abundance of caution.\n _poolProtocolSwapFeePercentages[pool] = PoolFeeConfig({\n feePercentage: aggregateSwapFeePercentage.toUint64(),\n isOverride: protocolFeeExempt\n });\n _poolProtocolYieldFeePercentages[pool] = PoolFeeConfig({\n feePercentage: aggregateYieldFeePercentage.toUint64(),\n isOverride: protocolFeeExempt\n });\n\n // Allow tracking pool fee percentages in all cases (e.g., when the pool is protocol-fee exempt).\n emit InitialPoolAggregateSwapFeePercentage(pool, aggregateSwapFeePercentage, protocolFeeExempt);\n emit InitialPoolAggregateYieldFeePercentage(pool, aggregateYieldFeePercentage, protocolFeeExempt);\n\n if (poolCreator != address(0)) {\n emit PoolWithCreatorRegistered(pool, poolCreator, protocolFeeExempt);\n }\n }\n\n /**\n * @notice Not exposed in the interface, this enables migration of hidden pool state.\n * @dev Permission should NEVER be granted to this function outside of a migration contract. It is necessary to\n * permit migration of the `ProtocolFeeController` with all state (in particular, protocol fee overrides and pool\n * creator fees) that cannot be written outside of the `registerPool` function called by the Vault during pool\n * deployment.\n *\n * Even if governance were to grant permission to call this function, the `_registeredPools` latch keeps it safe,\n * guaranteeing that it is impossible to use this function to change anything after registration. A pool can only\n * be registered / configured once - either copied to a new controller in the migration context, or added normally\n * through the Vault calling `registerPool`.\n *\n * Technically, since the logic prevents it from being called on the active fee controller, and on a previously\n * registered or migrated pool, it could even be permissionless. But since we already have other permissioned\n * functions, it doesn't really cost anything to be permissioned, and that provides another layer of security.\n *\n * @param pool The address of the pool to be migrated\n */\n function migratePool(address pool) external authenticate {\n IProtocolFeeController oldFeeController = _vault.getProtocolFeeController();\n\n if (address(oldFeeController) == address(this)) {\n revert InvalidMigrationSource();\n }\n\n if (_registeredPools[pool]) {\n revert PoolAlreadyRegistered(pool);\n }\n\n _registeredPools[pool] = true;\n\n (uint256 protocolSwapFeePercentage, bool swapFeeIsOverride) = oldFeeController.getPoolProtocolSwapFeeInfo(pool);\n _poolProtocolSwapFeePercentages[pool] = PoolFeeConfig({\n feePercentage: protocolSwapFeePercentage.toUint64(),\n isOverride: swapFeeIsOverride\n });\n\n (uint256 protocolYieldFeePercentage, bool yieldFeeIsOverride) = oldFeeController.getPoolProtocolYieldFeeInfo(\n pool\n );\n _poolProtocolYieldFeePercentages[pool] = PoolFeeConfig({\n feePercentage: protocolYieldFeePercentage.toUint64(),\n isOverride: yieldFeeIsOverride\n });\n\n _poolCreatorSwapFeePercentages[pool] = oldFeeController.getPoolCreatorSwapFeePercentage(pool);\n _poolCreatorYieldFeePercentages[pool] = oldFeeController.getPoolCreatorYieldFeePercentage(pool);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setGlobalProtocolSwapFeePercentage(\n uint256 newProtocolSwapFeePercentage\n ) external withValidSwapFee(newProtocolSwapFeePercentage) authenticate {\n _globalProtocolSwapFeePercentage = newProtocolSwapFeePercentage;\n\n emit GlobalProtocolSwapFeePercentageChanged(newProtocolSwapFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setGlobalProtocolYieldFeePercentage(\n uint256 newProtocolYieldFeePercentage\n ) external withValidYieldFee(newProtocolYieldFeePercentage) authenticate {\n _globalProtocolYieldFeePercentage = newProtocolYieldFeePercentage;\n\n emit GlobalProtocolYieldFeePercentageChanged(newProtocolYieldFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setProtocolSwapFeePercentage(\n address pool,\n uint256 newProtocolSwapFeePercentage\n ) external authenticate withValidSwapFee(newProtocolSwapFeePercentage) withLatestFees(pool) {\n _updatePoolSwapFeePercentage(pool, newProtocolSwapFeePercentage, true);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setProtocolYieldFeePercentage(\n address pool,\n uint256 newProtocolYieldFeePercentage\n ) external authenticate withValidYieldFee(newProtocolYieldFeePercentage) withLatestFees(pool) {\n _updatePoolYieldFeePercentage(pool, newProtocolYieldFeePercentage, true);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setPoolCreatorSwapFeePercentage(\n address pool,\n uint256 poolCreatorSwapFeePercentage\n ) external onlyPoolCreator(pool) withValidPoolCreatorFee(poolCreatorSwapFeePercentage) withLatestFees(pool) {\n _setPoolCreatorFeePercentage(pool, poolCreatorSwapFeePercentage, ProtocolFeeType.SWAP);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setPoolCreatorYieldFeePercentage(\n address pool,\n uint256 poolCreatorYieldFeePercentage\n ) external onlyPoolCreator(pool) withValidPoolCreatorFee(poolCreatorYieldFeePercentage) withLatestFees(pool) {\n _setPoolCreatorFeePercentage(pool, poolCreatorYieldFeePercentage, ProtocolFeeType.YIELD);\n }\n\n function _setPoolCreatorFeePercentage(\n address pool,\n uint256 poolCreatorFeePercentage,\n ProtocolFeeType feeType\n ) internal {\n // Need to set locally, and update the aggregate percentage in the Vault.\n if (feeType == ProtocolFeeType.SWAP) {\n _poolCreatorSwapFeePercentages[pool] = poolCreatorFeePercentage;\n\n // The Vault will also emit an `AggregateSwapFeePercentageChanged` event.\n _vault.updateAggregateSwapFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.SWAP));\n\n emit PoolCreatorSwapFeePercentageChanged(pool, poolCreatorFeePercentage);\n } else {\n _poolCreatorYieldFeePercentages[pool] = poolCreatorFeePercentage;\n\n // The Vault will also emit an `AggregateYieldFeePercentageChanged` event.\n _vault.updateAggregateYieldFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.YIELD));\n\n emit PoolCreatorYieldFeePercentageChanged(pool, poolCreatorFeePercentage);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawProtocolFees(address pool, address recipient) external authenticate {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n for (uint256 i = 0; i < numTokens; ++i) {\n IERC20 token = poolTokens[i];\n\n _withdrawProtocolFees(pool, recipient, token);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawProtocolFeesForToken(address pool, address recipient, IERC20 token) external authenticate {\n // Revert if the pool is not registered or if the token does not belong to the pool.\n _vault.getPoolTokenCountAndIndexOfToken(pool, token);\n _withdrawProtocolFees(pool, recipient, token);\n }\n\n function _withdrawProtocolFees(address pool, address recipient, IERC20 token) internal {\n uint256 amountToWithdraw = _protocolFeeAmounts[pool][token];\n if (amountToWithdraw > 0) {\n _protocolFeeAmounts[pool][token] = 0;\n token.safeTransfer(recipient, amountToWithdraw);\n\n emit ProtocolFeesWithdrawn(pool, token, recipient, amountToWithdraw);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawPoolCreatorFees(address pool, address recipient) external onlyPoolCreator(pool) {\n _withdrawPoolCreatorFees(pool, recipient);\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawPoolCreatorFees(address pool) external {\n _withdrawPoolCreatorFees(pool, _getPoolCreator(pool));\n }\n\n function _withdrawPoolCreatorFees(address pool, address recipient) private {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n for (uint256 i = 0; i < numTokens; ++i) {\n IERC20 token = poolTokens[i];\n\n uint256 amountToWithdraw = _poolCreatorFeeAmounts[pool][token];\n if (amountToWithdraw > 0) {\n _poolCreatorFeeAmounts[pool][token] = 0;\n token.safeTransfer(recipient, amountToWithdraw);\n\n emit PoolCreatorFeesWithdrawn(pool, token, recipient, amountToWithdraw);\n }\n }\n }\n\n /// @dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage.\n function _updatePoolSwapFeePercentage(address pool, uint256 newProtocolSwapFeePercentage, bool isOverride) private {\n // Update local storage of the raw percentage.\n //\n // The percentages are 18 decimal floating point numbers, bound between 0 and the max fee (<= FixedPoint.ONE).\n // Since this fits in 64 bits, the SafeCast shouldn't be necessary, and is done out of an abundance of caution.\n _poolProtocolSwapFeePercentages[pool] = PoolFeeConfig({\n feePercentage: newProtocolSwapFeePercentage.toUint64(),\n isOverride: isOverride\n });\n\n // Update the resulting aggregate swap fee value in the Vault (PoolConfig).\n _vault.updateAggregateSwapFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.SWAP));\n\n emit ProtocolSwapFeePercentageChanged(pool, newProtocolSwapFeePercentage);\n }\n\n /// @dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage.\n function _updatePoolYieldFeePercentage(\n address pool,\n uint256 newProtocolYieldFeePercentage,\n bool isOverride\n ) private {\n // Update local storage of the raw percentage.\n // The percentages are 18 decimal floating point numbers, bound between 0 and the max fee (<= FixedPoint.ONE).\n // Since this fits in 64 bits, the SafeCast shouldn't be necessary, and is done out of an abundance of caution.\n _poolProtocolYieldFeePercentages[pool] = PoolFeeConfig({\n feePercentage: newProtocolYieldFeePercentage.toUint64(),\n isOverride: isOverride\n });\n\n // Update the resulting aggregate yield fee value in the Vault (PoolConfig).\n _vault.updateAggregateYieldFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.YIELD));\n\n emit ProtocolYieldFeePercentageChanged(pool, newProtocolYieldFeePercentage);\n }\n\n function _ensureValidPrecision(uint256 feePercentage) private pure {\n // Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n // precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n // corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n // Ensure there will be no precision loss in the Vault - which would lead to a discrepancy between the\n // aggregate fee calculated here and that stored in the Vault.\n if ((feePercentage / FEE_SCALING_FACTOR) * FEE_SCALING_FACTOR != feePercentage) {\n revert IVaultErrors.FeePrecisionTooHigh();\n }\n }\n}\n"},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { Authentication } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\";\n\n/**\n * @notice Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\n * @dev The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned\n * functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same\n * function name.\n */\nabstract contract SingletonAuthentication is Authentication {\n IVault private immutable _vault;\n\n // Use the contract's own address to disambiguate action identifiers.\n constructor(IVault vault) Authentication(bytes32(uint256(uint160(address(this))))) {\n _vault = vault;\n }\n\n /**\n * @notice Get the address of the Balancer Vault.\n * @return vault An interface pointer to the Vault\n */\n function getVault() public view returns (IVault) {\n return _vault;\n }\n\n /**\n * @notice Get the address of the Authorizer.\n * @return authorizer An interface pointer to the Authorizer\n */\n function getAuthorizer() public view returns (IAuthorizer) {\n return getVault().getAuthorizer();\n }\n\n function _canPerform(bytes32 actionId, address account) internal view override returns (bool) {\n return getAuthorizer().canPerform(actionId, account, address(this));\n }\n\n function _canPerform(bytes32 actionId, address account, address where) internal view returns (bool) {\n return getAuthorizer().canPerform(actionId, account, where);\n }\n}\n"},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\n/// @notice Contract that shares the modifier `onlyVault`.\ncontract VaultGuard {\n IVault internal immutable _vault;\n\n constructor(IVault vault) {\n _vault = vault;\n }\n\n modifier onlyVault() {\n _ensureOnlyVault();\n _;\n }\n\n function _ensureOnlyVault() private view {\n if (msg.sender != address(_vault)) {\n revert IVaultErrors.SenderIsNotVault(msg.sender);\n }\n }\n}\n"},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC4626.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\nimport {IERC20Metadata} from \"../token/ERC20/extensions/IERC20Metadata.sol\";\n\n/**\n * @dev Interface of the ERC4626 \"Tokenized Vault Standard\", as defined in\n * https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\n */\ninterface IERC4626 is IERC20, IERC20Metadata {\n event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares);\n\n event Withdraw(\n address indexed sender,\n address indexed receiver,\n address indexed owner,\n uint256 assets,\n uint256 shares\n );\n\n /**\n * @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n *\n * - MUST be an ERC-20 token contract.\n * - MUST NOT revert.\n */\n function asset() external view returns (address assetTokenAddress);\n\n /**\n * @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n *\n * - SHOULD include any compounding that occurs from yield.\n * - MUST be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT revert.\n */\n function totalAssets() external view returns (uint256 totalManagedAssets);\n\n /**\n * @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n * scenario where all the conditions are met.\n *\n * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT show any variations depending on the caller.\n * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n * - MUST NOT revert.\n *\n * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n * from.\n */\n function convertToShares(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n * scenario where all the conditions are met.\n *\n * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT show any variations depending on the caller.\n * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n * - MUST NOT revert.\n *\n * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n * from.\n */\n function convertToAssets(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n * through a deposit call.\n *\n * - MUST return a limited value if receiver is subject to some deposit limit.\n * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n * - MUST NOT revert.\n */\n function maxDeposit(address receiver) external view returns (uint256 maxAssets);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n * current on-chain conditions.\n *\n * - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n * call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n * in the same transaction.\n * - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n * deposit would be accepted, regardless if the user has enough tokens approved, etc.\n * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n */\n function previewDeposit(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n *\n * - MUST emit the Deposit event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * deposit execution, and are accounted for during deposit.\n * - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n * approving enough underlying tokens to the Vault contract, etc).\n *\n * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n */\n function deposit(uint256 assets, address receiver) external returns (uint256 shares);\n\n /**\n * @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n * - MUST return a limited value if receiver is subject to some mint limit.\n * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n * - MUST NOT revert.\n */\n function maxMint(address receiver) external view returns (uint256 maxShares);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n * current on-chain conditions.\n *\n * - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n * in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n * same transaction.\n * - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n * would be accepted, regardless if the user has enough tokens approved, etc.\n * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by minting.\n */\n function previewMint(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n *\n * - MUST emit the Deposit event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n * execution, and are accounted for during mint.\n * - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n * approving enough underlying tokens to the Vault contract, etc).\n *\n * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n */\n function mint(uint256 shares, address receiver) external returns (uint256 assets);\n\n /**\n * @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n * Vault, through a withdraw call.\n *\n * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n * - MUST NOT revert.\n */\n function maxWithdraw(address owner) external view returns (uint256 maxAssets);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n * given current on-chain conditions.\n *\n * - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n * call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n * called\n * in the same transaction.\n * - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n * the withdrawal would be accepted, regardless if the user has enough shares, etc.\n * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n */\n function previewWithdraw(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n *\n * - MUST emit the Withdraw event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * withdraw execution, and are accounted for during withdraw.\n * - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n * not having enough shares, etc).\n *\n * Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n * Those methods should be performed separately.\n */\n function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares);\n\n /**\n * @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n * through a redeem call.\n *\n * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n * - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n * - MUST NOT revert.\n */\n function maxRedeem(address owner) external view returns (uint256 maxShares);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\n * given current on-chain conditions.\n *\n * - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n * in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n * same transaction.\n * - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n * redemption would be accepted, regardless if the user has enough shares, etc.\n * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by redeeming.\n */\n function previewRedeem(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n *\n * - MUST emit the Withdraw event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * redeem execution, and are accounted for during redeem.\n * - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n * not having enough shares, etc).\n *\n * NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n * Those methods should be performed separately.\n */\n function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets);\n}\n"},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC20 standard.\n */\ninterface IERC20Metadata is IERC20 {\n /**\n * @dev Returns the name of the token.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the symbol of the token.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the decimals places of the token.\n */\n function decimals() external view returns (uint8);\n}\n"},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Permit.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n *\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\n * need to send a transaction, and thus is not required to hold Ether at all.\n *\n * ==== Security Considerations\n *\n * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\n * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\n * considered as an intention to spend the allowance in any specific way. The second is that because permits have\n * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\n * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\n * generally recommended is:\n *\n * ```solidity\n * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\n * try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\n * doThing(..., value);\n * }\n *\n * function doThing(..., uint256 value) public {\n * token.safeTransferFrom(msg.sender, address(this), value);\n * ...\n * }\n * ```\n *\n * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\n * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\n * {SafeERC20-safeTransferFrom}).\n *\n * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\n * contracts should have entry points that don't rely on permit.\n */\ninterface IERC20Permit {\n /**\n * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\n * given ``owner``'s signed approval.\n *\n * IMPORTANT: The same issues {IERC20-approve} has related to transaction\n * ordering also apply here.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n * - `deadline` must be a timestamp in the future.\n * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\n * over the EIP712-formatted function arguments.\n * - the signature must use ``owner``'s current nonce (see {nonces}).\n *\n * For more information on the signature format, see the\n * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\n * section].\n *\n * CAUTION: See Security Considerations above.\n */\n function permit(\n address owner,\n address spender,\n uint256 value,\n uint256 deadline,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) external;\n\n /**\n * @dev Returns the current nonce for `owner`. This value must be\n * included whenever a signature is generated for {permit}.\n *\n * Every successful call to {permit} increases ``owner``'s nonce by one. This\n * prevents a signature from being used multiple times.\n */\n function nonces(address owner) external view returns (uint256);\n\n /**\n * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\n */\n // solhint-disable-next-line func-name-mixedcase\n function DOMAIN_SEPARATOR() external view returns (bytes32);\n}\n"},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n"},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\nimport {IERC20Permit} from \"../extensions/IERC20Permit.sol\";\nimport {Address} from \"../../../utils/Address.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n using Address for address;\n\n /**\n * @dev An operation with an ERC20 token failed.\n */\n error SafeERC20FailedOperation(address token);\n\n /**\n * @dev Indicates a failed `decreaseAllowance` request.\n */\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\n\n /**\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\n }\n\n /**\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\n */\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n }\n\n /**\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n uint256 oldAllowance = token.allowance(address(this), spender);\n forceApprove(token, spender, oldAllowance + value);\n }\n\n /**\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n * value, non-reverting calls are assumed to be successful.\n */\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\n unchecked {\n uint256 currentAllowance = token.allowance(address(this), spender);\n if (currentAllowance < requestedDecrease) {\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\n }\n forceApprove(token, spender, currentAllowance - requestedDecrease);\n }\n }\n\n /**\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n * to be set to zero before setting it to a non-zero value, such as USDT.\n */\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\n\n if (!_callOptionalReturnBool(token, approvalCall)) {\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\n _callOptionalReturn(token, approvalCall);\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n */\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\n // the target address contains contract code and also asserts for success in the low-level call.\n\n bytes memory returndata = address(token).functionCall(data);\n if (returndata.length != 0 && !abi.decode(returndata, (bool))) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.\n */\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false\n // and not revert is the subcall reverts.\n\n (bool success, bytes memory returndata) = address(token).call(data);\n return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && address(token).code.length > 0;\n }\n}\n"},"@openzeppelin/contracts/utils/Address.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error AddressInsufficientBalance(address account);\n\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedInnerCall();\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert AddressInsufficientBalance(address(this));\n }\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n if (!success) {\n revert FailedInnerCall();\n }\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {FailedInnerCall} error.\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert AddressInsufficientBalance(address(this));\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an\n * unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {FailedInnerCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.\n */\n function _revert(bytes memory returndata) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert FailedInnerCall();\n }\n }\n}\n"},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SafeCast.sol)\n// This file was procedurally generated from scripts/generate/templates/SafeCast.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\n * checks.\n *\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n * easily result in undesired exploitation or bugs, since developers usually\n * assume that overflows raise errors. `SafeCast` restores this intuition by\n * reverting the transaction when such an operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeCast {\n /**\n * @dev Value doesn't fit in an uint of `bits` size.\n */\n error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);\n\n /**\n * @dev An int value doesn't fit in an uint of `bits` size.\n */\n error SafeCastOverflowedIntToUint(int256 value);\n\n /**\n * @dev Value doesn't fit in an int of `bits` size.\n */\n error SafeCastOverflowedIntDowncast(uint8 bits, int256 value);\n\n /**\n * @dev An uint value doesn't fit in an int of `bits` size.\n */\n error SafeCastOverflowedUintToInt(uint256 value);\n\n /**\n * @dev Returns the downcasted uint248 from uint256, reverting on\n * overflow (when the input is greater than largest uint248).\n *\n * Counterpart to Solidity's `uint248` operator.\n *\n * Requirements:\n *\n * - input must fit into 248 bits\n */\n function toUint248(uint256 value) internal pure returns (uint248) {\n if (value > type(uint248).max) {\n revert SafeCastOverflowedUintDowncast(248, value);\n }\n return uint248(value);\n }\n\n /**\n * @dev Returns the downcasted uint240 from uint256, reverting on\n * overflow (when the input is greater than largest uint240).\n *\n * Counterpart to Solidity's `uint240` operator.\n *\n * Requirements:\n *\n * - input must fit into 240 bits\n */\n function toUint240(uint256 value) internal pure returns (uint240) {\n if (value > type(uint240).max) {\n revert SafeCastOverflowedUintDowncast(240, value);\n }\n return uint240(value);\n }\n\n /**\n * @dev Returns the downcasted uint232 from uint256, reverting on\n * overflow (when the input is greater than largest uint232).\n *\n * Counterpart to Solidity's `uint232` operator.\n *\n * Requirements:\n *\n * - input must fit into 232 bits\n */\n function toUint232(uint256 value) internal pure returns (uint232) {\n if (value > type(uint232).max) {\n revert SafeCastOverflowedUintDowncast(232, value);\n }\n return uint232(value);\n }\n\n /**\n * @dev Returns the downcasted uint224 from uint256, reverting on\n * overflow (when the input is greater than largest uint224).\n *\n * Counterpart to Solidity's `uint224` operator.\n *\n * Requirements:\n *\n * - input must fit into 224 bits\n */\n function toUint224(uint256 value) internal pure returns (uint224) {\n if (value > type(uint224).max) {\n revert SafeCastOverflowedUintDowncast(224, value);\n }\n return uint224(value);\n }\n\n /**\n * @dev Returns the downcasted uint216 from uint256, reverting on\n * overflow (when the input is greater than largest uint216).\n *\n * Counterpart to Solidity's `uint216` operator.\n *\n * Requirements:\n *\n * - input must fit into 216 bits\n */\n function toUint216(uint256 value) internal pure returns (uint216) {\n if (value > type(uint216).max) {\n revert SafeCastOverflowedUintDowncast(216, value);\n }\n return uint216(value);\n }\n\n /**\n * @dev Returns the downcasted uint208 from uint256, reverting on\n * overflow (when the input is greater than largest uint208).\n *\n * Counterpart to Solidity's `uint208` operator.\n *\n * Requirements:\n *\n * - input must fit into 208 bits\n */\n function toUint208(uint256 value) internal pure returns (uint208) {\n if (value > type(uint208).max) {\n revert SafeCastOverflowedUintDowncast(208, value);\n }\n return uint208(value);\n }\n\n /**\n * @dev Returns the downcasted uint200 from uint256, reverting on\n * overflow (when the input is greater than largest uint200).\n *\n * Counterpart to Solidity's `uint200` operator.\n *\n * Requirements:\n *\n * - input must fit into 200 bits\n */\n function toUint200(uint256 value) internal pure returns (uint200) {\n if (value > type(uint200).max) {\n revert SafeCastOverflowedUintDowncast(200, value);\n }\n return uint200(value);\n }\n\n /**\n * @dev Returns the downcasted uint192 from uint256, reverting on\n * overflow (when the input is greater than largest uint192).\n *\n * Counterpart to Solidity's `uint192` operator.\n *\n * Requirements:\n *\n * - input must fit into 192 bits\n */\n function toUint192(uint256 value) internal pure returns (uint192) {\n if (value > type(uint192).max) {\n revert SafeCastOverflowedUintDowncast(192, value);\n }\n return uint192(value);\n }\n\n /**\n * @dev Returns the downcasted uint184 from uint256, reverting on\n * overflow (when the input is greater than largest uint184).\n *\n * Counterpart to Solidity's `uint184` operator.\n *\n * Requirements:\n *\n * - input must fit into 184 bits\n */\n function toUint184(uint256 value) internal pure returns (uint184) {\n if (value > type(uint184).max) {\n revert SafeCastOverflowedUintDowncast(184, value);\n }\n return uint184(value);\n }\n\n /**\n * @dev Returns the downcasted uint176 from uint256, reverting on\n * overflow (when the input is greater than largest uint176).\n *\n * Counterpart to Solidity's `uint176` operator.\n *\n * Requirements:\n *\n * - input must fit into 176 bits\n */\n function toUint176(uint256 value) internal pure returns (uint176) {\n if (value > type(uint176).max) {\n revert SafeCastOverflowedUintDowncast(176, value);\n }\n return uint176(value);\n }\n\n /**\n * @dev Returns the downcasted uint168 from uint256, reverting on\n * overflow (when the input is greater than largest uint168).\n *\n * Counterpart to Solidity's `uint168` operator.\n *\n * Requirements:\n *\n * - input must fit into 168 bits\n */\n function toUint168(uint256 value) internal pure returns (uint168) {\n if (value > type(uint168).max) {\n revert SafeCastOverflowedUintDowncast(168, value);\n }\n return uint168(value);\n }\n\n /**\n * @dev Returns the downcasted uint160 from uint256, reverting on\n * overflow (when the input is greater than largest uint160).\n *\n * Counterpart to Solidity's `uint160` operator.\n *\n * Requirements:\n *\n * - input must fit into 160 bits\n */\n function toUint160(uint256 value) internal pure returns (uint160) {\n if (value > type(uint160).max) {\n revert SafeCastOverflowedUintDowncast(160, value);\n }\n return uint160(value);\n }\n\n /**\n * @dev Returns the downcasted uint152 from uint256, reverting on\n * overflow (when the input is greater than largest uint152).\n *\n * Counterpart to Solidity's `uint152` operator.\n *\n * Requirements:\n *\n * - input must fit into 152 bits\n */\n function toUint152(uint256 value) internal pure returns (uint152) {\n if (value > type(uint152).max) {\n revert SafeCastOverflowedUintDowncast(152, value);\n }\n return uint152(value);\n }\n\n /**\n * @dev Returns the downcasted uint144 from uint256, reverting on\n * overflow (when the input is greater than largest uint144).\n *\n * Counterpart to Solidity's `uint144` operator.\n *\n * Requirements:\n *\n * - input must fit into 144 bits\n */\n function toUint144(uint256 value) internal pure returns (uint144) {\n if (value > type(uint144).max) {\n revert SafeCastOverflowedUintDowncast(144, value);\n }\n return uint144(value);\n }\n\n /**\n * @dev Returns the downcasted uint136 from uint256, reverting on\n * overflow (when the input is greater than largest uint136).\n *\n * Counterpart to Solidity's `uint136` operator.\n *\n * Requirements:\n *\n * - input must fit into 136 bits\n */\n function toUint136(uint256 value) internal pure returns (uint136) {\n if (value > type(uint136).max) {\n revert SafeCastOverflowedUintDowncast(136, value);\n }\n return uint136(value);\n }\n\n /**\n * @dev Returns the downcasted uint128 from uint256, reverting on\n * overflow (when the input is greater than largest uint128).\n *\n * Counterpart to Solidity's `uint128` operator.\n *\n * Requirements:\n *\n * - input must fit into 128 bits\n */\n function toUint128(uint256 value) internal pure returns (uint128) {\n if (value > type(uint128).max) {\n revert SafeCastOverflowedUintDowncast(128, value);\n }\n return uint128(value);\n }\n\n /**\n * @dev Returns the downcasted uint120 from uint256, reverting on\n * overflow (when the input is greater than largest uint120).\n *\n * Counterpart to Solidity's `uint120` operator.\n *\n * Requirements:\n *\n * - input must fit into 120 bits\n */\n function toUint120(uint256 value) internal pure returns (uint120) {\n if (value > type(uint120).max) {\n revert SafeCastOverflowedUintDowncast(120, value);\n }\n return uint120(value);\n }\n\n /**\n * @dev Returns the downcasted uint112 from uint256, reverting on\n * overflow (when the input is greater than largest uint112).\n *\n * Counterpart to Solidity's `uint112` operator.\n *\n * Requirements:\n *\n * - input must fit into 112 bits\n */\n function toUint112(uint256 value) internal pure returns (uint112) {\n if (value > type(uint112).max) {\n revert SafeCastOverflowedUintDowncast(112, value);\n }\n return uint112(value);\n }\n\n /**\n * @dev Returns the downcasted uint104 from uint256, reverting on\n * overflow (when the input is greater than largest uint104).\n *\n * Counterpart to Solidity's `uint104` operator.\n *\n * Requirements:\n *\n * - input must fit into 104 bits\n */\n function toUint104(uint256 value) internal pure returns (uint104) {\n if (value > type(uint104).max) {\n revert SafeCastOverflowedUintDowncast(104, value);\n }\n return uint104(value);\n }\n\n /**\n * @dev Returns the downcasted uint96 from uint256, reverting on\n * overflow (when the input is greater than largest uint96).\n *\n * Counterpart to Solidity's `uint96` operator.\n *\n * Requirements:\n *\n * - input must fit into 96 bits\n */\n function toUint96(uint256 value) internal pure returns (uint96) {\n if (value > type(uint96).max) {\n revert SafeCastOverflowedUintDowncast(96, value);\n }\n return uint96(value);\n }\n\n /**\n * @dev Returns the downcasted uint88 from uint256, reverting on\n * overflow (when the input is greater than largest uint88).\n *\n * Counterpart to Solidity's `uint88` operator.\n *\n * Requirements:\n *\n * - input must fit into 88 bits\n */\n function toUint88(uint256 value) internal pure returns (uint88) {\n if (value > type(uint88).max) {\n revert SafeCastOverflowedUintDowncast(88, value);\n }\n return uint88(value);\n }\n\n /**\n * @dev Returns the downcasted uint80 from uint256, reverting on\n * overflow (when the input is greater than largest uint80).\n *\n * Counterpart to Solidity's `uint80` operator.\n *\n * Requirements:\n *\n * - input must fit into 80 bits\n */\n function toUint80(uint256 value) internal pure returns (uint80) {\n if (value > type(uint80).max) {\n revert SafeCastOverflowedUintDowncast(80, value);\n }\n return uint80(value);\n }\n\n /**\n * @dev Returns the downcasted uint72 from uint256, reverting on\n * overflow (when the input is greater than largest uint72).\n *\n * Counterpart to Solidity's `uint72` operator.\n *\n * Requirements:\n *\n * - input must fit into 72 bits\n */\n function toUint72(uint256 value) internal pure returns (uint72) {\n if (value > type(uint72).max) {\n revert SafeCastOverflowedUintDowncast(72, value);\n }\n return uint72(value);\n }\n\n /**\n * @dev Returns the downcasted uint64 from uint256, reverting on\n * overflow (when the input is greater than largest uint64).\n *\n * Counterpart to Solidity's `uint64` operator.\n *\n * Requirements:\n *\n * - input must fit into 64 bits\n */\n function toUint64(uint256 value) internal pure returns (uint64) {\n if (value > type(uint64).max) {\n revert SafeCastOverflowedUintDowncast(64, value);\n }\n return uint64(value);\n }\n\n /**\n * @dev Returns the downcasted uint56 from uint256, reverting on\n * overflow (when the input is greater than largest uint56).\n *\n * Counterpart to Solidity's `uint56` operator.\n *\n * Requirements:\n *\n * - input must fit into 56 bits\n */\n function toUint56(uint256 value) internal pure returns (uint56) {\n if (value > type(uint56).max) {\n revert SafeCastOverflowedUintDowncast(56, value);\n }\n return uint56(value);\n }\n\n /**\n * @dev Returns the downcasted uint48 from uint256, reverting on\n * overflow (when the input is greater than largest uint48).\n *\n * Counterpart to Solidity's `uint48` operator.\n *\n * Requirements:\n *\n * - input must fit into 48 bits\n */\n function toUint48(uint256 value) internal pure returns (uint48) {\n if (value > type(uint48).max) {\n revert SafeCastOverflowedUintDowncast(48, value);\n }\n return uint48(value);\n }\n\n /**\n * @dev Returns the downcasted uint40 from uint256, reverting on\n * overflow (when the input is greater than largest uint40).\n *\n * Counterpart to Solidity's `uint40` operator.\n *\n * Requirements:\n *\n * - input must fit into 40 bits\n */\n function toUint40(uint256 value) internal pure returns (uint40) {\n if (value > type(uint40).max) {\n revert SafeCastOverflowedUintDowncast(40, value);\n }\n return uint40(value);\n }\n\n /**\n * @dev Returns the downcasted uint32 from uint256, reverting on\n * overflow (when the input is greater than largest uint32).\n *\n * Counterpart to Solidity's `uint32` operator.\n *\n * Requirements:\n *\n * - input must fit into 32 bits\n */\n function toUint32(uint256 value) internal pure returns (uint32) {\n if (value > type(uint32).max) {\n revert SafeCastOverflowedUintDowncast(32, value);\n }\n return uint32(value);\n }\n\n /**\n * @dev Returns the downcasted uint24 from uint256, reverting on\n * overflow (when the input is greater than largest uint24).\n *\n * Counterpart to Solidity's `uint24` operator.\n *\n * Requirements:\n *\n * - input must fit into 24 bits\n */\n function toUint24(uint256 value) internal pure returns (uint24) {\n if (value > type(uint24).max) {\n revert SafeCastOverflowedUintDowncast(24, value);\n }\n return uint24(value);\n }\n\n /**\n * @dev Returns the downcasted uint16 from uint256, reverting on\n * overflow (when the input is greater than largest uint16).\n *\n * Counterpart to Solidity's `uint16` operator.\n *\n * Requirements:\n *\n * - input must fit into 16 bits\n */\n function toUint16(uint256 value) internal pure returns (uint16) {\n if (value > type(uint16).max) {\n revert SafeCastOverflowedUintDowncast(16, value);\n }\n return uint16(value);\n }\n\n /**\n * @dev Returns the downcasted uint8 from uint256, reverting on\n * overflow (when the input is greater than largest uint8).\n *\n * Counterpart to Solidity's `uint8` operator.\n *\n * Requirements:\n *\n * - input must fit into 8 bits\n */\n function toUint8(uint256 value) internal pure returns (uint8) {\n if (value > type(uint8).max) {\n revert SafeCastOverflowedUintDowncast(8, value);\n }\n return uint8(value);\n }\n\n /**\n * @dev Converts a signed int256 into an unsigned uint256.\n *\n * Requirements:\n *\n * - input must be greater than or equal to 0.\n */\n function toUint256(int256 value) internal pure returns (uint256) {\n if (value < 0) {\n revert SafeCastOverflowedIntToUint(value);\n }\n return uint256(value);\n }\n\n /**\n * @dev Returns the downcasted int248 from int256, reverting on\n * overflow (when the input is less than smallest int248 or\n * greater than largest int248).\n *\n * Counterpart to Solidity's `int248` operator.\n *\n * Requirements:\n *\n * - input must fit into 248 bits\n */\n function toInt248(int256 value) internal pure returns (int248 downcasted) {\n downcasted = int248(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(248, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int240 from int256, reverting on\n * overflow (when the input is less than smallest int240 or\n * greater than largest int240).\n *\n * Counterpart to Solidity's `int240` operator.\n *\n * Requirements:\n *\n * - input must fit into 240 bits\n */\n function toInt240(int256 value) internal pure returns (int240 downcasted) {\n downcasted = int240(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(240, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int232 from int256, reverting on\n * overflow (when the input is less than smallest int232 or\n * greater than largest int232).\n *\n * Counterpart to Solidity's `int232` operator.\n *\n * Requirements:\n *\n * - input must fit into 232 bits\n */\n function toInt232(int256 value) internal pure returns (int232 downcasted) {\n downcasted = int232(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(232, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int224 from int256, reverting on\n * overflow (when the input is less than smallest int224 or\n * greater than largest int224).\n *\n * Counterpart to Solidity's `int224` operator.\n *\n * Requirements:\n *\n * - input must fit into 224 bits\n */\n function toInt224(int256 value) internal pure returns (int224 downcasted) {\n downcasted = int224(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(224, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int216 from int256, reverting on\n * overflow (when the input is less than smallest int216 or\n * greater than largest int216).\n *\n * Counterpart to Solidity's `int216` operator.\n *\n * Requirements:\n *\n * - input must fit into 216 bits\n */\n function toInt216(int256 value) internal pure returns (int216 downcasted) {\n downcasted = int216(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(216, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int208 from int256, reverting on\n * overflow (when the input is less than smallest int208 or\n * greater than largest int208).\n *\n * Counterpart to Solidity's `int208` operator.\n *\n * Requirements:\n *\n * - input must fit into 208 bits\n */\n function toInt208(int256 value) internal pure returns (int208 downcasted) {\n downcasted = int208(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(208, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int200 from int256, reverting on\n * overflow (when the input is less than smallest int200 or\n * greater than largest int200).\n *\n * Counterpart to Solidity's `int200` operator.\n *\n * Requirements:\n *\n * - input must fit into 200 bits\n */\n function toInt200(int256 value) internal pure returns (int200 downcasted) {\n downcasted = int200(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(200, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int192 from int256, reverting on\n * overflow (when the input is less than smallest int192 or\n * greater than largest int192).\n *\n * Counterpart to Solidity's `int192` operator.\n *\n * Requirements:\n *\n * - input must fit into 192 bits\n */\n function toInt192(int256 value) internal pure returns (int192 downcasted) {\n downcasted = int192(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(192, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int184 from int256, reverting on\n * overflow (when the input is less than smallest int184 or\n * greater than largest int184).\n *\n * Counterpart to Solidity's `int184` operator.\n *\n * Requirements:\n *\n * - input must fit into 184 bits\n */\n function toInt184(int256 value) internal pure returns (int184 downcasted) {\n downcasted = int184(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(184, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int176 from int256, reverting on\n * overflow (when the input is less than smallest int176 or\n * greater than largest int176).\n *\n * Counterpart to Solidity's `int176` operator.\n *\n * Requirements:\n *\n * - input must fit into 176 bits\n */\n function toInt176(int256 value) internal pure returns (int176 downcasted) {\n downcasted = int176(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(176, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int168 from int256, reverting on\n * overflow (when the input is less than smallest int168 or\n * greater than largest int168).\n *\n * Counterpart to Solidity's `int168` operator.\n *\n * Requirements:\n *\n * - input must fit into 168 bits\n */\n function toInt168(int256 value) internal pure returns (int168 downcasted) {\n downcasted = int168(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(168, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int160 from int256, reverting on\n * overflow (when the input is less than smallest int160 or\n * greater than largest int160).\n *\n * Counterpart to Solidity's `int160` operator.\n *\n * Requirements:\n *\n * - input must fit into 160 bits\n */\n function toInt160(int256 value) internal pure returns (int160 downcasted) {\n downcasted = int160(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(160, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int152 from int256, reverting on\n * overflow (when the input is less than smallest int152 or\n * greater than largest int152).\n *\n * Counterpart to Solidity's `int152` operator.\n *\n * Requirements:\n *\n * - input must fit into 152 bits\n */\n function toInt152(int256 value) internal pure returns (int152 downcasted) {\n downcasted = int152(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(152, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int144 from int256, reverting on\n * overflow (when the input is less than smallest int144 or\n * greater than largest int144).\n *\n * Counterpart to Solidity's `int144` operator.\n *\n * Requirements:\n *\n * - input must fit into 144 bits\n */\n function toInt144(int256 value) internal pure returns (int144 downcasted) {\n downcasted = int144(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(144, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int136 from int256, reverting on\n * overflow (when the input is less than smallest int136 or\n * greater than largest int136).\n *\n * Counterpart to Solidity's `int136` operator.\n *\n * Requirements:\n *\n * - input must fit into 136 bits\n */\n function toInt136(int256 value) internal pure returns (int136 downcasted) {\n downcasted = int136(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(136, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int128 from int256, reverting on\n * overflow (when the input is less than smallest int128 or\n * greater than largest int128).\n *\n * Counterpart to Solidity's `int128` operator.\n *\n * Requirements:\n *\n * - input must fit into 128 bits\n */\n function toInt128(int256 value) internal pure returns (int128 downcasted) {\n downcasted = int128(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(128, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int120 from int256, reverting on\n * overflow (when the input is less than smallest int120 or\n * greater than largest int120).\n *\n * Counterpart to Solidity's `int120` operator.\n *\n * Requirements:\n *\n * - input must fit into 120 bits\n */\n function toInt120(int256 value) internal pure returns (int120 downcasted) {\n downcasted = int120(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(120, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int112 from int256, reverting on\n * overflow (when the input is less than smallest int112 or\n * greater than largest int112).\n *\n * Counterpart to Solidity's `int112` operator.\n *\n * Requirements:\n *\n * - input must fit into 112 bits\n */\n function toInt112(int256 value) internal pure returns (int112 downcasted) {\n downcasted = int112(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(112, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int104 from int256, reverting on\n * overflow (when the input is less than smallest int104 or\n * greater than largest int104).\n *\n * Counterpart to Solidity's `int104` operator.\n *\n * Requirements:\n *\n * - input must fit into 104 bits\n */\n function toInt104(int256 value) internal pure returns (int104 downcasted) {\n downcasted = int104(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(104, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int96 from int256, reverting on\n * overflow (when the input is less than smallest int96 or\n * greater than largest int96).\n *\n * Counterpart to Solidity's `int96` operator.\n *\n * Requirements:\n *\n * - input must fit into 96 bits\n */\n function toInt96(int256 value) internal pure returns (int96 downcasted) {\n downcasted = int96(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(96, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int88 from int256, reverting on\n * overflow (when the input is less than smallest int88 or\n * greater than largest int88).\n *\n * Counterpart to Solidity's `int88` operator.\n *\n * Requirements:\n *\n * - input must fit into 88 bits\n */\n function toInt88(int256 value) internal pure returns (int88 downcasted) {\n downcasted = int88(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(88, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int80 from int256, reverting on\n * overflow (when the input is less than smallest int80 or\n * greater than largest int80).\n *\n * Counterpart to Solidity's `int80` operator.\n *\n * Requirements:\n *\n * - input must fit into 80 bits\n */\n function toInt80(int256 value) internal pure returns (int80 downcasted) {\n downcasted = int80(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(80, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int72 from int256, reverting on\n * overflow (when the input is less than smallest int72 or\n * greater than largest int72).\n *\n * Counterpart to Solidity's `int72` operator.\n *\n * Requirements:\n *\n * - input must fit into 72 bits\n */\n function toInt72(int256 value) internal pure returns (int72 downcasted) {\n downcasted = int72(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(72, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int64 from int256, reverting on\n * overflow (when the input is less than smallest int64 or\n * greater than largest int64).\n *\n * Counterpart to Solidity's `int64` operator.\n *\n * Requirements:\n *\n * - input must fit into 64 bits\n */\n function toInt64(int256 value) internal pure returns (int64 downcasted) {\n downcasted = int64(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(64, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int56 from int256, reverting on\n * overflow (when the input is less than smallest int56 or\n * greater than largest int56).\n *\n * Counterpart to Solidity's `int56` operator.\n *\n * Requirements:\n *\n * - input must fit into 56 bits\n */\n function toInt56(int256 value) internal pure returns (int56 downcasted) {\n downcasted = int56(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(56, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int48 from int256, reverting on\n * overflow (when the input is less than smallest int48 or\n * greater than largest int48).\n *\n * Counterpart to Solidity's `int48` operator.\n *\n * Requirements:\n *\n * - input must fit into 48 bits\n */\n function toInt48(int256 value) internal pure returns (int48 downcasted) {\n downcasted = int48(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(48, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int40 from int256, reverting on\n * overflow (when the input is less than smallest int40 or\n * greater than largest int40).\n *\n * Counterpart to Solidity's `int40` operator.\n *\n * Requirements:\n *\n * - input must fit into 40 bits\n */\n function toInt40(int256 value) internal pure returns (int40 downcasted) {\n downcasted = int40(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(40, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int32 from int256, reverting on\n * overflow (when the input is less than smallest int32 or\n * greater than largest int32).\n *\n * Counterpart to Solidity's `int32` operator.\n *\n * Requirements:\n *\n * - input must fit into 32 bits\n */\n function toInt32(int256 value) internal pure returns (int32 downcasted) {\n downcasted = int32(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(32, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int24 from int256, reverting on\n * overflow (when the input is less than smallest int24 or\n * greater than largest int24).\n *\n * Counterpart to Solidity's `int24` operator.\n *\n * Requirements:\n *\n * - input must fit into 24 bits\n */\n function toInt24(int256 value) internal pure returns (int24 downcasted) {\n downcasted = int24(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(24, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int16 from int256, reverting on\n * overflow (when the input is less than smallest int16 or\n * greater than largest int16).\n *\n * Counterpart to Solidity's `int16` operator.\n *\n * Requirements:\n *\n * - input must fit into 16 bits\n */\n function toInt16(int256 value) internal pure returns (int16 downcasted) {\n downcasted = int16(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(16, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int8 from int256, reverting on\n * overflow (when the input is less than smallest int8 or\n * greater than largest int8).\n *\n * Counterpart to Solidity's `int8` operator.\n *\n * Requirements:\n *\n * - input must fit into 8 bits\n */\n function toInt8(int256 value) internal pure returns (int8 downcasted) {\n downcasted = int8(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(8, value);\n }\n }\n\n /**\n * @dev Converts an unsigned uint256 into a signed int256.\n *\n * Requirements:\n *\n * - input must be less than or equal to maxInt256.\n */\n function toInt256(uint256 value) internal pure returns (int256) {\n // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\n if (value > uint256(type(int256).max)) {\n revert SafeCastOverflowedUintToInt(value);\n }\n return int256(value);\n }\n}\n"},"contracts/ProtocolFeeControllerMigration.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\";\nimport { IBasicAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol\";\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { PoolRoleAccounts, PoolConfig } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\nimport { IVaultAdmin } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { ProtocolFeeController } from \"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\";\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\n\n/**\n * @notice Migrate from the original ProtocolFeeController to one with extra events.\n * @dev These events enable tracking pool protocol fees under all circumstances (in particular, when protocol fees are\n * initially turned off). It also adds some infrastructure that makes future migrations easier, and removes redundant\n * poolCreator storage.\n *\n * This simple migration assumes:\n * 1) There are no pools with pool creators\n * 2) There are no pools with protocol fee exemptions or overrides\n * 3) Migrating the complete list of pools can be done in a single transaction.\n *\n * These simplifications enable simply calling `migrateFeeController` once with the complete list of pools.\n *\n * After the migration, the Vault will point to the new fee controller, and any collection thereafter will go there.\n * If there are any residual fee amounts in the old fee controller (i.e., that were collected but not withdrawn),\n * governance will still need to withdraw from the old fee controller. Otherwise, no further interaction with the old\n * controller is necessary.\n *\n * Associated with `20250221-protocol-fee-controller-migration`.\n */\ncontract ProtocolFeeControllerMigration is ReentrancyGuardTransient {\n IProtocolFeeController public immutable oldFeeController;\n IProtocolFeeController public immutable newFeeController;\n\n IVault public immutable vault;\n\n // IAuthorizer with interface for granting/revoking roles.\n IBasicAuthorizer internal immutable _authorizer;\n\n // Set when the operation is complete and all permissions have been renounced.\n bool internal _finalized;\n\n /**\n * @notice Attempt to deploy this contract with invalid parameters.\n * @dev ProtocolFeeController contracts return the address of the Vault they were deployed with. Ensure that both\n * the old and new controllers reference the same vault.\n */\n error InvalidFeeController();\n\n /// @notice Migration can only be performed once.\n error AlreadyMigrated();\n\n constructor(IVault _vault, IProtocolFeeController _newFeeController) {\n oldFeeController = _vault.getProtocolFeeController();\n\n // Ensure valid fee controllers. Also ensure that we are not trying to operate on the current fee controller.\n if (_newFeeController.vault() != _vault || _newFeeController == oldFeeController) {\n revert InvalidFeeController();\n }\n\n vault = _vault;\n newFeeController = _newFeeController;\n\n _authorizer = IBasicAuthorizer(address(vault.getAuthorizer()));\n }\n\n /**\n * @notice Permissionless migration function.\n * @dev Call this with the full set of pools to perform the migration. After this runs, the Vault will point to the\n * new fee controller, which will have a copy of all the relevant state from the old controller. Also, all\n * permissions will be revoked, and the contract will be disabled.\n *\n * @param pools The complete set of pools to migrate\n */\n function migrateFeeController(address[] memory pools) external virtual nonReentrant {\n if (_finalized) {\n revert AlreadyMigrated();\n }\n\n _finalized = true;\n\n _migrateGlobalPercentages();\n\n // This simple migration assumes that:\n // 1) There are no pool creators, so no state related to pool creator fees (and no fees to be withdrawn).\n // 2) There are no protocol fee exempt pools or governance overrides\n // (i.e., all override flags are false, and all pool fees match current global values).\n //\n // At the end of this process, since there are no pool creators, token balances should all be zero, unless\n // there are \"left over\" protocol fees that have been collected but not withdrawn. Governance would then\n // still have to withdraw from the old fee controller.\n //\n // For future migrations, when we might have pool creator fees, the pool creators would still need to withdraw\n // them from the old controller themselves.\n for (uint256 i = 0; i < pools.length; ++i) {\n address pool = pools[i];\n\n // Set pool-specific values. This assumes there are no fee exempt pools or overrides.\n newFeeController.updateProtocolSwapFeePercentage(pool);\n newFeeController.updateProtocolYieldFeePercentage(pool);\n }\n\n // Update the fee controller in the Vault.\n _migrateFeeController();\n\n // Revoke all permissions.\n _authorizer.renounceRole(_authorizer.DEFAULT_ADMIN_ROLE(), address(this));\n }\n\n function _migrateGlobalPercentages() internal {\n // Grant global fee percentage permissions to set on new controller.\n bytes32 swapFeeRole = IAuthentication(address(newFeeController)).getActionId(\n IProtocolFeeController.setGlobalProtocolSwapFeePercentage.selector\n );\n\n bytes32 yieldFeeRole = IAuthentication(address(newFeeController)).getActionId(\n IProtocolFeeController.setGlobalProtocolYieldFeePercentage.selector\n );\n\n _authorizer.grantRole(swapFeeRole, address(this));\n _authorizer.grantRole(yieldFeeRole, address(this));\n\n // Copy percentages to new controller.\n uint256 globalSwapFeePercentage = oldFeeController.getGlobalProtocolSwapFeePercentage();\n uint256 globalYieldFeePercentage = oldFeeController.getGlobalProtocolYieldFeePercentage();\n\n newFeeController.setGlobalProtocolSwapFeePercentage(globalSwapFeePercentage);\n newFeeController.setGlobalProtocolYieldFeePercentage(globalYieldFeePercentage);\n\n // Revoke permissions.\n _authorizer.renounceRole(swapFeeRole, address(this));\n _authorizer.renounceRole(yieldFeeRole, address(this));\n }\n\n function _migrateFeeController() internal {\n bytes32 setFeeControllerRole = IAuthentication(address(vault)).getActionId(\n IVaultAdmin.setProtocolFeeController.selector\n );\n\n _authorizer.grantRole(setFeeControllerRole, address(this));\n\n vault.setProtocolFeeController(newFeeController);\n\n _authorizer.renounceRole(setFeeControllerRole, address(this));\n }\n}\n"},"contracts/ProtocolFeeControllerMigrationV2.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\";\nimport { IBasicAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol\";\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { PoolRoleAccounts, PoolConfig } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\nimport { IVaultAdmin } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { SingletonAuthentication } from \"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\";\nimport { ProtocolFeeController } from \"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\";\n\nimport { ProtocolFeeControllerMigration } from \"./ProtocolFeeControllerMigration.sol\";\n\n/**\n * @notice Migrate from the original ProtocolFeeController to one with extra events.\n * @dev These events enable tracking pool protocol fees under all circumstances (in particular, when protocol fees are\n * initially turned off).\n *\n * After deployment, call `migratePools` as many times as necessary. The list must be generated externally, as pools\n * are not iterable on-chain. The batch interface allows an unlimited number of pools to be migrated; it's possible\n * there might be too many to migrate in a single call.\n *\n * The first time `migratePools` is called, the contract will first copy the global (pool-independent data). This could\n * be done in a separate stage, but we're trying to keep the contract simple, vs. duplicating the staging coordinator\n * system of v2 just yet.\n *\n * When all pools have been migrated, call `finalizeMigration` to disable further migration, update the address in the\n * Vault, and renounce all permissions. While `migratePools` is permissionless, this call must be permissioned to\n * prevent premature termination in case multiple transactions are required to migrate all the pools.\n *\n * Associated with `20250221-protocol-fee-controller-migration` (fork test only).\n */\ncontract ProtocolFeeControllerMigrationV2 is ProtocolFeeControllerMigration, SingletonAuthentication {\n // Set after the global percentages have been transferred (on the first call to `migratePools`).\n bool internal _globalPercentagesMigrated;\n\n // ActionId for permission required in `migratePools`.\n bytes32 internal _migrationRole;\n\n /// @notice Cannot call the base contract migration; it is invalid for this migration.\n error WrongMigrationVersion();\n\n constructor(\n IVault _vault,\n IProtocolFeeController _newFeeController\n ) ProtocolFeeControllerMigration(_vault, _newFeeController) SingletonAuthentication(_vault) {\n _migrationRole = IAuthentication(address(newFeeController)).getActionId(\n ProtocolFeeController.migratePool.selector\n );\n\n // Grant permission required in `migratePools`.\n _authorizer.grantRole(_migrationRole, address(this));\n }\n\n /**\n * @notice Migrate pools from the old fee controller to the new one.\n * @dev THis can be called multiple times, if there are too many pools for a single transaction. Note that the\n * first time this is called, it will migrate the global fee percentages, then proceed with the first set of pools.\n *\n * @param pools The set of pools to be migrated in this call\n */\n function migratePools(address[] memory pools) external virtual nonReentrant {\n if (_finalized) {\n revert AlreadyMigrated();\n }\n\n // Migrate the global percentages only once, before the first set of pools.\n if (_globalPercentagesMigrated == false) {\n _globalPercentagesMigrated = true;\n\n _migrateGlobalPercentages();\n }\n\n // This more complex migration allows for pool creators and overrides, and uses the new features in the second\n // deployment of the `ProtocolFeeController`.\n //\n // At the end of this process, governance must still withdraw any leftover protocol fees from the old\n // controller (i.e., that have been collected but not withdrawn). Pool creators likewise would still need to\n // withdraw any leftover pool creator fees from the old controller.\n for (uint256 i = 0; i < pools.length; ++i) {\n // This function is not in the public interface.\n ProtocolFeeController(address(newFeeController)).migratePool(pools[i]);\n }\n }\n\n function finalizeMigration() external virtual authenticate {\n if (_finalized) {\n revert AlreadyMigrated();\n }\n\n _finalized = true;\n\n // Remove permission to migrate pools.\n _authorizer.renounceRole(_migrationRole, address(this));\n\n // Update the fee controller in the Vault.\n _migrateFeeController();\n\n // Revoke all permissions.\n _authorizer.renounceRole(_authorizer.DEFAULT_ADMIN_ROLE(), address(this));\n }\n\n /// @inheritdoc ProtocolFeeControllerMigration\n function migrateFeeController(address[] memory) external pure override {\n // The one-step migration does not work in this version, with pool creators and overrides.\n revert WrongMigrationVersion();\n }\n}\n"}},"settings":{"viaIR":true,"evmVersion":"cancun","optimizer":{"enabled":true,"runs":9999,"details":{"yulDetails":{"optimizerSteps":"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu"}}},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"],"":["ast"]}}}},"output":{"errors":[{"component":"general","errorCode":"2394","formattedMessage":"Warning: Transient storage as defined by EIP-1153 can break the composability of smart contracts: Since transient storage is cleared only at the end of the transaction and not at the end of the outermost call frame to the contract within a transaction, your contract may unintentionally misbehave when invoked multiple times in a complex transaction. To avoid this, be sure to clear all transient storage at the end of any call to your contract. The use of transient storage for reentrancy guards that are cleared at the end of the call is safe.\n --> @balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol:74:13:\n |\n74 | tstore(slot, value)\n | ^^^^^^\n\n","message":"Transient storage as defined by EIP-1153 can break the composability of smart contracts: Since transient storage is cleared only at the end of the transaction and not at the end of the outermost call frame to the contract within a transaction, your contract may unintentionally misbehave when invoked multiple times in a complex transaction. To avoid this, be sure to clear all transient storage at the end of any call to your contract. The use of transient storage for reentrancy guards that are cleared at the end of the call is safe.","severity":"warning","sourceLocation":{"end":2572,"file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","start":2566},"type":"Warning"}],"sources":{"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol","exportedSymbols":{"IAuthorizer":[73],"IBasicAuthorizer":[32]},"id":33,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:0"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"../vault/IAuthorizer.sol","id":3,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":33,"sourceUnit":74,"src":"72:55:0","symbolAliases":[{"foreign":{"id":2,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73,"src":"81:11:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":4,"name":"IAuthorizer","nameLocations":["159:11:0"],"nodeType":"IdentifierPath","referencedDeclaration":73,"src":"159:11:0"},"id":5,"nodeType":"InheritanceSpecifier","src":"159:11:0"}],"canonicalName":"IBasicAuthorizer","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":32,"linearizedBaseContracts":[32,73],"name":"IBasicAuthorizer","nameLocation":"139:16:0","nodeType":"ContractDefinition","nodes":[{"functionSelector":"a217fddf","id":10,"implemented":false,"kind":"function","modifiers":[],"name":"DEFAULT_ADMIN_ROLE","nameLocation":"239:18:0","nodeType":"FunctionDefinition","parameters":{"id":6,"nodeType":"ParameterList","parameters":[],"src":"257:2:0"},"returnParameters":{"id":9,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10,"src":"283:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7,"name":"bytes32","nodeType":"ElementaryTypeName","src":"283:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"282:9:0"},"scope":32,"src":"230:62:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"2f2ff15d","id":17,"implemented":false,"kind":"function","modifiers":[],"name":"grantRole","nameLocation":"307:9:0","nodeType":"FunctionDefinition","parameters":{"id":15,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12,"mutability":"mutable","name":"role","nameLocation":"325:4:0","nodeType":"VariableDeclaration","scope":17,"src":"317:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11,"name":"bytes32","nodeType":"ElementaryTypeName","src":"317:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":14,"mutability":"mutable","name":"account","nameLocation":"339:7:0","nodeType":"VariableDeclaration","scope":17,"src":"331:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13,"name":"address","nodeType":"ElementaryTypeName","src":"331:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"316:31:0"},"returnParameters":{"id":16,"nodeType":"ParameterList","parameters":[],"src":"356:0:0"},"scope":32,"src":"298:59:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"d547741f","id":24,"implemented":false,"kind":"function","modifiers":[],"name":"revokeRole","nameLocation":"372:10:0","nodeType":"FunctionDefinition","parameters":{"id":22,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19,"mutability":"mutable","name":"role","nameLocation":"391:4:0","nodeType":"VariableDeclaration","scope":24,"src":"383:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18,"name":"bytes32","nodeType":"ElementaryTypeName","src":"383:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":21,"mutability":"mutable","name":"account","nameLocation":"405:7:0","nodeType":"VariableDeclaration","scope":24,"src":"397:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20,"name":"address","nodeType":"ElementaryTypeName","src":"397:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"382:31:0"},"returnParameters":{"id":23,"nodeType":"ParameterList","parameters":[],"src":"422:0:0"},"scope":32,"src":"363:60:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"36568abe","id":31,"implemented":false,"kind":"function","modifiers":[],"name":"renounceRole","nameLocation":"438:12:0","nodeType":"FunctionDefinition","parameters":{"id":29,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26,"mutability":"mutable","name":"role","nameLocation":"459:4:0","nodeType":"VariableDeclaration","scope":31,"src":"451:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":25,"name":"bytes32","nodeType":"ElementaryTypeName","src":"451:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":28,"mutability":"mutable","name":"account","nameLocation":"473:7:0","nodeType":"VariableDeclaration","scope":31,"src":"465:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27,"name":"address","nodeType":"ElementaryTypeName","src":"465:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"450:31:0"},"returnParameters":{"id":30,"nodeType":"ParameterList","parameters":[],"src":"490:0:0"},"scope":32,"src":"429:62:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":33,"src":"129:364:0","usedErrors":[],"usedEvents":[]}],"src":"46:448:0"},"id":0},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","exportedSymbols":{"IAuthentication":[47]},"id":48,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":34,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:1"},{"abstract":false,"baseContracts":[],"canonicalName":"IAuthentication","contractDependencies":[],"contractKind":"interface","documentation":{"id":35,"nodeType":"StructuredDocumentation","src":"72:77:1","text":"@notice Simple interface for permissioned calling of external functions."},"fullyImplemented":false,"id":47,"linearizedBaseContracts":[47],"name":"IAuthentication","nameLocation":"159:15:1","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":36,"nodeType":"StructuredDocumentation","src":"181:67:1","text":"@notice The sender does not have permission to call a function."},"errorSelector":"23dada53","id":38,"name":"SenderNotAllowed","nameLocation":"259:16:1","nodeType":"ErrorDefinition","parameters":{"id":37,"nodeType":"ParameterList","parameters":[],"src":"275:2:1"},"src":"253:25:1"},{"documentation":{"id":39,"nodeType":"StructuredDocumentation","src":"284:237:1","text":" @notice Returns the action identifier associated with the external function described by `selector`.\n @param selector The 4-byte selector of the permissioned function\n @return actionId The computed actionId"},"functionSelector":"851c1bb3","id":46,"implemented":false,"kind":"function","modifiers":[],"name":"getActionId","nameLocation":"535:11:1","nodeType":"FunctionDefinition","parameters":{"id":42,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41,"mutability":"mutable","name":"selector","nameLocation":"554:8:1","nodeType":"VariableDeclaration","scope":46,"src":"547:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":40,"name":"bytes4","nodeType":"ElementaryTypeName","src":"547:6:1","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"546:17:1"},"returnParameters":{"id":45,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44,"mutability":"mutable","name":"actionId","nameLocation":"595:8:1","nodeType":"VariableDeclaration","scope":46,"src":"587:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":43,"name":"bytes32","nodeType":"ElementaryTypeName","src":"587:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"586:18:1"},"scope":47,"src":"526:79:1","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":48,"src":"149:458:1","usedErrors":[38],"usedEvents":[]}],"src":"46:562:1"},"id":1},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","exportedSymbols":{"IRateProvider":[57]},"id":58,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":49,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:2"},{"abstract":false,"baseContracts":[],"canonicalName":"IRateProvider","contractDependencies":[],"contractKind":"interface","documentation":{"id":50,"nodeType":"StructuredDocumentation","src":"72:56:2","text":"@notice General interface for token exchange rates."},"fullyImplemented":false,"id":57,"linearizedBaseContracts":[57],"name":"IRateProvider","nameLocation":"138:13:2","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":51,"nodeType":"StructuredDocumentation","src":"158:573:2","text":" @notice An 18 decimal fixed point number representing the exchange rate of one token to another related token.\n @dev The meaning of this rate depends on the context. Note that there may be an error associated with a token\n rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface\n does not take a rounding direction or return an error, so great care must be taken when interpreting and using\n rates in downstream computations.\n @return rate The current token rate"},"functionSelector":"679aefce","id":56,"implemented":false,"kind":"function","modifiers":[],"name":"getRate","nameLocation":"745:7:2","nodeType":"FunctionDefinition","parameters":{"id":52,"nodeType":"ParameterList","parameters":[],"src":"752:2:2"},"returnParameters":{"id":55,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54,"mutability":"mutable","name":"rate","nameLocation":"786:4:2","nodeType":"VariableDeclaration","scope":56,"src":"778:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":53,"name":"uint256","nodeType":"ElementaryTypeName","src":"778:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"777:14:2"},"scope":57,"src":"736:56:2","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":58,"src":"128:666:2","usedErrors":[],"usedEvents":[]}],"src":"46:749:2"},"id":2},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","exportedSymbols":{"IAuthorizer":[73]},"id":74,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":59,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:3"},{"abstract":false,"baseContracts":[],"canonicalName":"IAuthorizer","contractDependencies":[],"contractKind":"interface","documentation":{"id":60,"nodeType":"StructuredDocumentation","src":"72:56:3","text":"@notice Interface to the Vault's permission system."},"fullyImplemented":false,"id":73,"linearizedBaseContracts":[73],"name":"IAuthorizer","nameLocation":"138:11:3","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":61,"nodeType":"StructuredDocumentation","src":"156:354:3","text":" @notice Returns true if `account` can perform the action described by `actionId` in the contract `where`.\n @param actionId Identifier for the action to be performed\n @param account Account trying to perform the action\n @param where Target contract for the action\n @return success True if the action is permitted"},"functionSelector":"9be2a884","id":72,"implemented":false,"kind":"function","modifiers":[],"name":"canPerform","nameLocation":"524:10:3","nodeType":"FunctionDefinition","parameters":{"id":68,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63,"mutability":"mutable","name":"actionId","nameLocation":"543:8:3","nodeType":"VariableDeclaration","scope":72,"src":"535:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":62,"name":"bytes32","nodeType":"ElementaryTypeName","src":"535:7:3","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":65,"mutability":"mutable","name":"account","nameLocation":"561:7:3","nodeType":"VariableDeclaration","scope":72,"src":"553:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":64,"name":"address","nodeType":"ElementaryTypeName","src":"553:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":67,"mutability":"mutable","name":"where","nameLocation":"578:5:3","nodeType":"VariableDeclaration","scope":72,"src":"570:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":66,"name":"address","nodeType":"ElementaryTypeName","src":"570:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"534:50:3"},"returnParameters":{"id":71,"nodeType":"ParameterList","parameters":[{"constant":false,"id":70,"mutability":"mutable","name":"success","nameLocation":"613:7:3","nodeType":"VariableDeclaration","scope":72,"src":"608:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":69,"name":"bool","nodeType":"ElementaryTypeName","src":"608:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"607:14:3"},"scope":73,"src":"515:107:3","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":74,"src":"128:496:3","usedErrors":[],"usedEvents":[]}],"src":"46:579:3"},"id":3},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","exportedSymbols":{"AddLiquidityKind":[2347],"AfterSwapParams":[2341],"HookFlags":[2167],"IHooks":[275],"LiquidityManagement":[2120],"PoolSwapParams":[2312],"RemoveLiquidityKind":[2368],"SwapKind":[2275],"TokenConfig":[2234]},"id":276,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":75,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:4"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":84,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":276,"sourceUnit":2412,"src":"289:193:4","symbolAliases":[{"foreign":{"id":76,"name":"TokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2234,"src":"302:11:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":77,"name":"LiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2120,"src":"319:19:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":78,"name":"PoolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2312,"src":"344:14:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":79,"name":"AfterSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2341,"src":"364:15:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":80,"name":"HookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2167,"src":"385:9:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":81,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2347,"src":"400:16:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":82,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2368,"src":"422:19:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":83,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2275,"src":"447:8:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IHooks","contractDependencies":[],"contractKind":"interface","documentation":{"id":85,"nodeType":"StructuredDocumentation","src":"484:490:4","text":" @notice Interface for pool hooks.\n @dev Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that\n they are called in the correct order, and with the correct arguments. To maintain this security, these functions\n should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`,\n then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)"},"fullyImplemented":false,"id":275,"linearizedBaseContracts":[275],"name":"IHooks","nameLocation":"985:6:4","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":86,"nodeType":"StructuredDocumentation","src":"1205:769:4","text":" @notice Hook executed when a pool is registered with a non-zero hooks contract.\n @dev Returns true if registration was successful, and false to revert the pool registration.\n Make sure this function is properly implemented (e.g. check the factory, and check that the\n given pool is from the factory). The Vault address will be msg.sender.\n @param factory Address of the pool factory (contract deploying the pool)\n @param pool Address of the pool\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param liquidityManagement Liquidity management flags indicating which functions are enabled\n @return success True if the hook allowed the registration, false otherwise"},"functionSelector":"0b89f182","id":102,"implemented":false,"kind":"function","modifiers":[],"name":"onRegister","nameLocation":"1988:10:4","nodeType":"FunctionDefinition","parameters":{"id":98,"nodeType":"ParameterList","parameters":[{"constant":false,"id":88,"mutability":"mutable","name":"factory","nameLocation":"2016:7:4","nodeType":"VariableDeclaration","scope":102,"src":"2008:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":87,"name":"address","nodeType":"ElementaryTypeName","src":"2008:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90,"mutability":"mutable","name":"pool","nameLocation":"2041:4:4","nodeType":"VariableDeclaration","scope":102,"src":"2033:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":89,"name":"address","nodeType":"ElementaryTypeName","src":"2033:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":94,"mutability":"mutable","name":"tokenConfig","nameLocation":"2076:11:4","nodeType":"VariableDeclaration","scope":102,"src":"2055:32:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2234_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":92,"nodeType":"UserDefinedTypeName","pathNode":{"id":91,"name":"TokenConfig","nameLocations":["2055:11:4"],"nodeType":"IdentifierPath","referencedDeclaration":2234,"src":"2055:11:4"},"referencedDeclaration":2234,"src":"2055:11:4","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2234_storage_ptr","typeString":"struct TokenConfig"}},"id":93,"nodeType":"ArrayTypeName","src":"2055:13:4","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2234_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":97,"mutability":"mutable","name":"liquidityManagement","nameLocation":"2126:19:4","nodeType":"VariableDeclaration","scope":102,"src":"2097:48:4","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2120_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":96,"nodeType":"UserDefinedTypeName","pathNode":{"id":95,"name":"LiquidityManagement","nameLocations":["2097:19:4"],"nodeType":"IdentifierPath","referencedDeclaration":2120,"src":"2097:19:4"},"referencedDeclaration":2120,"src":"2097:19:4","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2120_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"1998:153:4"},"returnParameters":{"id":101,"nodeType":"ParameterList","parameters":[{"constant":false,"id":100,"mutability":"mutable","name":"success","nameLocation":"2175:7:4","nodeType":"VariableDeclaration","scope":102,"src":"2170:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":99,"name":"bool","nodeType":"ElementaryTypeName","src":"2170:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2169:14:4"},"scope":275,"src":"1979:205:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":103,"nodeType":"StructuredDocumentation","src":"2190:412:4","text":" @notice Return the set of hooks implemented by the contract.\n @dev The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined\n (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero).\n `onRegister` is the only \"mandatory\" hook.\n @return hookFlags Flags indicating which hooks the contract supports"},"functionSelector":"d77153a7","id":109,"implemented":false,"kind":"function","modifiers":[],"name":"getHookFlags","nameLocation":"2616:12:4","nodeType":"FunctionDefinition","parameters":{"id":104,"nodeType":"ParameterList","parameters":[],"src":"2628:2:4"},"returnParameters":{"id":108,"nodeType":"ParameterList","parameters":[{"constant":false,"id":107,"mutability":"mutable","name":"hookFlags","nameLocation":"2671:9:4","nodeType":"VariableDeclaration","scope":109,"src":"2654:26:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$2167_memory_ptr","typeString":"struct HookFlags"},"typeName":{"id":106,"nodeType":"UserDefinedTypeName","pathNode":{"id":105,"name":"HookFlags","nameLocations":["2654:9:4"],"nodeType":"IdentifierPath","referencedDeclaration":2167,"src":"2654:9:4"},"referencedDeclaration":2167,"src":"2654:9:4","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$2167_storage_ptr","typeString":"struct HookFlags"}},"visibility":"internal"}],"src":"2653:28:4"},"scope":275,"src":"2607:75:4","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":110,"nodeType":"StructuredDocumentation","src":"2897:484:4","text":" @notice Hook executed before pool initialization.\n @dev Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param exactAmountsIn Exact amounts of input tokens\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with initialization"},"functionSelector":"1c149e28","id":120,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeInitialize","nameLocation":"3395:18:4","nodeType":"FunctionDefinition","parameters":{"id":116,"nodeType":"ParameterList","parameters":[{"constant":false,"id":113,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"3431:14:4","nodeType":"VariableDeclaration","scope":120,"src":"3414:31:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":111,"name":"uint256","nodeType":"ElementaryTypeName","src":"3414:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":112,"nodeType":"ArrayTypeName","src":"3414:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":115,"mutability":"mutable","name":"userData","nameLocation":"3460:8:4","nodeType":"VariableDeclaration","scope":120,"src":"3447:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":114,"name":"bytes","nodeType":"ElementaryTypeName","src":"3447:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3413:56:4"},"returnParameters":{"id":119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":118,"mutability":"mutable","name":"success","nameLocation":"3493:7:4","nodeType":"VariableDeclaration","scope":120,"src":"3488:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":117,"name":"bool","nodeType":"ElementaryTypeName","src":"3488:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3487:14:4"},"scope":275,"src":"3386:116:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":121,"nodeType":"StructuredDocumentation","src":"3508:563:4","text":" @notice Hook to be executed after pool initialization.\n @dev Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param exactAmountsIn Exact amounts of input tokens\n @param bptAmountOut Amount of pool tokens minted during initialization\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool accepts the initialization results"},"functionSelector":"38be241d","id":133,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterInitialize","nameLocation":"4085:17:4","nodeType":"FunctionDefinition","parameters":{"id":129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":124,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"4129:14:4","nodeType":"VariableDeclaration","scope":133,"src":"4112:31:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":122,"name":"uint256","nodeType":"ElementaryTypeName","src":"4112:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":123,"nodeType":"ArrayTypeName","src":"4112:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":126,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4161:12:4","nodeType":"VariableDeclaration","scope":133,"src":"4153:20:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":125,"name":"uint256","nodeType":"ElementaryTypeName","src":"4153:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":128,"mutability":"mutable","name":"userData","nameLocation":"4196:8:4","nodeType":"VariableDeclaration","scope":133,"src":"4183:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":127,"name":"bytes","nodeType":"ElementaryTypeName","src":"4183:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4102:108:4"},"returnParameters":{"id":132,"nodeType":"ParameterList","parameters":[{"constant":false,"id":131,"mutability":"mutable","name":"success","nameLocation":"4234:7:4","nodeType":"VariableDeclaration","scope":133,"src":"4229:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":130,"name":"bool","nodeType":"ElementaryTypeName","src":"4229:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4228:14:4"},"scope":275,"src":"4076:167:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":134,"nodeType":"StructuredDocumentation","src":"4461:953:4","text":" @notice Hook to be executed before adding liquidity.\n @dev Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param maxAmountsInScaled18 Maximum amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"45421ec7","id":156,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeAddLiquidity","nameLocation":"5428:20:4","nodeType":"FunctionDefinition","parameters":{"id":152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":136,"mutability":"mutable","name":"router","nameLocation":"5466:6:4","nodeType":"VariableDeclaration","scope":156,"src":"5458:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":135,"name":"address","nodeType":"ElementaryTypeName","src":"5458:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":138,"mutability":"mutable","name":"pool","nameLocation":"5490:4:4","nodeType":"VariableDeclaration","scope":156,"src":"5482:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":137,"name":"address","nodeType":"ElementaryTypeName","src":"5482:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":141,"mutability":"mutable","name":"kind","nameLocation":"5521:4:4","nodeType":"VariableDeclaration","scope":156,"src":"5504:21:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2347","typeString":"enum AddLiquidityKind"},"typeName":{"id":140,"nodeType":"UserDefinedTypeName","pathNode":{"id":139,"name":"AddLiquidityKind","nameLocations":["5504:16:4"],"nodeType":"IdentifierPath","referencedDeclaration":2347,"src":"5504:16:4"},"referencedDeclaration":2347,"src":"5504:16:4","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2347","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":144,"mutability":"mutable","name":"maxAmountsInScaled18","nameLocation":"5552:20:4","nodeType":"VariableDeclaration","scope":156,"src":"5535:37:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":142,"name":"uint256","nodeType":"ElementaryTypeName","src":"5535:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":143,"nodeType":"ArrayTypeName","src":"5535:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":146,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"5590:15:4","nodeType":"VariableDeclaration","scope":156,"src":"5582:23:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":145,"name":"uint256","nodeType":"ElementaryTypeName","src":"5582:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":149,"mutability":"mutable","name":"balancesScaled18","nameLocation":"5632:16:4","nodeType":"VariableDeclaration","scope":156,"src":"5615:33:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":147,"name":"uint256","nodeType":"ElementaryTypeName","src":"5615:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":148,"nodeType":"ArrayTypeName","src":"5615:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":151,"mutability":"mutable","name":"userData","nameLocation":"5671:8:4","nodeType":"VariableDeclaration","scope":156,"src":"5658:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":150,"name":"bytes","nodeType":"ElementaryTypeName","src":"5658:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5448:237:4"},"returnParameters":{"id":155,"nodeType":"ParameterList","parameters":[{"constant":false,"id":154,"mutability":"mutable","name":"success","nameLocation":"5709:7:4","nodeType":"VariableDeclaration","scope":156,"src":"5704:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":153,"name":"bool","nodeType":"ElementaryTypeName","src":"5704:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5703:14:4"},"scope":275,"src":"5419:299:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":157,"nodeType":"StructuredDocumentation","src":"5724:1250:4","text":" @notice Hook to be executed after adding liquidity.\n @dev Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param amountsInScaled18 Actual amounts of tokens added, sorted in token registration order\n @param amountsInRaw Actual amounts of tokens added, sorted in token registration order\n @param bptAmountOut Amount of pool tokens minted\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Additional (optional) data provided by the user\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook"},"functionSelector":"976907cc","id":185,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterAddLiquidity","nameLocation":"6988:19:4","nodeType":"FunctionDefinition","parameters":{"id":178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":159,"mutability":"mutable","name":"router","nameLocation":"7025:6:4","nodeType":"VariableDeclaration","scope":185,"src":"7017:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":158,"name":"address","nodeType":"ElementaryTypeName","src":"7017:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":161,"mutability":"mutable","name":"pool","nameLocation":"7049:4:4","nodeType":"VariableDeclaration","scope":185,"src":"7041:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":160,"name":"address","nodeType":"ElementaryTypeName","src":"7041:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":164,"mutability":"mutable","name":"kind","nameLocation":"7080:4:4","nodeType":"VariableDeclaration","scope":185,"src":"7063:21:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2347","typeString":"enum AddLiquidityKind"},"typeName":{"id":163,"nodeType":"UserDefinedTypeName","pathNode":{"id":162,"name":"AddLiquidityKind","nameLocations":["7063:16:4"],"nodeType":"IdentifierPath","referencedDeclaration":2347,"src":"7063:16:4"},"referencedDeclaration":2347,"src":"7063:16:4","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2347","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":167,"mutability":"mutable","name":"amountsInScaled18","nameLocation":"7111:17:4","nodeType":"VariableDeclaration","scope":185,"src":"7094:34:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":165,"name":"uint256","nodeType":"ElementaryTypeName","src":"7094:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":166,"nodeType":"ArrayTypeName","src":"7094:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":170,"mutability":"mutable","name":"amountsInRaw","nameLocation":"7155:12:4","nodeType":"VariableDeclaration","scope":185,"src":"7138:29:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":168,"name":"uint256","nodeType":"ElementaryTypeName","src":"7138:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":169,"nodeType":"ArrayTypeName","src":"7138:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":172,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7185:12:4","nodeType":"VariableDeclaration","scope":185,"src":"7177:20:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":171,"name":"uint256","nodeType":"ElementaryTypeName","src":"7177:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":175,"mutability":"mutable","name":"balancesScaled18","nameLocation":"7224:16:4","nodeType":"VariableDeclaration","scope":185,"src":"7207:33:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":173,"name":"uint256","nodeType":"ElementaryTypeName","src":"7207:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":174,"nodeType":"ArrayTypeName","src":"7207:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":177,"mutability":"mutable","name":"userData","nameLocation":"7263:8:4","nodeType":"VariableDeclaration","scope":185,"src":"7250:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":176,"name":"bytes","nodeType":"ElementaryTypeName","src":"7250:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7007:270:4"},"returnParameters":{"id":184,"nodeType":"ParameterList","parameters":[{"constant":false,"id":180,"mutability":"mutable","name":"success","nameLocation":"7301:7:4","nodeType":"VariableDeclaration","scope":185,"src":"7296:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":179,"name":"bool","nodeType":"ElementaryTypeName","src":"7296:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":183,"mutability":"mutable","name":"hookAdjustedAmountsInRaw","nameLocation":"7327:24:4","nodeType":"VariableDeclaration","scope":185,"src":"7310:41:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":181,"name":"uint256","nodeType":"ElementaryTypeName","src":"7310:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":182,"nodeType":"ArrayTypeName","src":"7310:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7295:57:4"},"scope":275,"src":"6979:374:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":186,"nodeType":"StructuredDocumentation","src":"7572:992:4","text":" @notice Hook to be executed before removing liquidity.\n @dev Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The type of remove liquidity operation (e.g., proportional, custom)\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"ba5f9f40","id":208,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeRemoveLiquidity","nameLocation":"8578:23:4","nodeType":"FunctionDefinition","parameters":{"id":204,"nodeType":"ParameterList","parameters":[{"constant":false,"id":188,"mutability":"mutable","name":"router","nameLocation":"8619:6:4","nodeType":"VariableDeclaration","scope":208,"src":"8611:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":187,"name":"address","nodeType":"ElementaryTypeName","src":"8611:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":190,"mutability":"mutable","name":"pool","nameLocation":"8643:4:4","nodeType":"VariableDeclaration","scope":208,"src":"8635:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":189,"name":"address","nodeType":"ElementaryTypeName","src":"8635:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":193,"mutability":"mutable","name":"kind","nameLocation":"8677:4:4","nodeType":"VariableDeclaration","scope":208,"src":"8657:24:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2368","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":192,"nodeType":"UserDefinedTypeName","pathNode":{"id":191,"name":"RemoveLiquidityKind","nameLocations":["8657:19:4"],"nodeType":"IdentifierPath","referencedDeclaration":2368,"src":"8657:19:4"},"referencedDeclaration":2368,"src":"8657:19:4","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2368","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":195,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"8699:14:4","nodeType":"VariableDeclaration","scope":208,"src":"8691:22:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":194,"name":"uint256","nodeType":"ElementaryTypeName","src":"8691:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":198,"mutability":"mutable","name":"minAmountsOutScaled18","nameLocation":"8740:21:4","nodeType":"VariableDeclaration","scope":208,"src":"8723:38:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":196,"name":"uint256","nodeType":"ElementaryTypeName","src":"8723:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":197,"nodeType":"ArrayTypeName","src":"8723:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":201,"mutability":"mutable","name":"balancesScaled18","nameLocation":"8788:16:4","nodeType":"VariableDeclaration","scope":208,"src":"8771:33:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":199,"name":"uint256","nodeType":"ElementaryTypeName","src":"8771:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":200,"nodeType":"ArrayTypeName","src":"8771:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":203,"mutability":"mutable","name":"userData","nameLocation":"8827:8:4","nodeType":"VariableDeclaration","scope":208,"src":"8814:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":202,"name":"bytes","nodeType":"ElementaryTypeName","src":"8814:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8601:240:4"},"returnParameters":{"id":207,"nodeType":"ParameterList","parameters":[{"constant":false,"id":206,"mutability":"mutable","name":"success","nameLocation":"8865:7:4","nodeType":"VariableDeclaration","scope":208,"src":"8860:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":205,"name":"bool","nodeType":"ElementaryTypeName","src":"8860:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8859:14:4"},"scope":275,"src":"8569:305:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":209,"nodeType":"StructuredDocumentation","src":"8880:1276:4","text":" @notice Hook to be executed after removing liquidity.\n @dev Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The type of remove liquidity operation (e.g., proportional, custom)\n @param bptAmountIn Amount of pool tokens to burn\n @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Additional (optional) data provided by the user\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook"},"functionSelector":"2754888d","id":237,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterRemoveLiquidity","nameLocation":"10170:22:4","nodeType":"FunctionDefinition","parameters":{"id":230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":211,"mutability":"mutable","name":"router","nameLocation":"10210:6:4","nodeType":"VariableDeclaration","scope":237,"src":"10202:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":210,"name":"address","nodeType":"ElementaryTypeName","src":"10202:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":213,"mutability":"mutable","name":"pool","nameLocation":"10234:4:4","nodeType":"VariableDeclaration","scope":237,"src":"10226:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":212,"name":"address","nodeType":"ElementaryTypeName","src":"10226:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":216,"mutability":"mutable","name":"kind","nameLocation":"10268:4:4","nodeType":"VariableDeclaration","scope":237,"src":"10248:24:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2368","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":215,"nodeType":"UserDefinedTypeName","pathNode":{"id":214,"name":"RemoveLiquidityKind","nameLocations":["10248:19:4"],"nodeType":"IdentifierPath","referencedDeclaration":2368,"src":"10248:19:4"},"referencedDeclaration":2368,"src":"10248:19:4","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2368","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":218,"mutability":"mutable","name":"bptAmountIn","nameLocation":"10290:11:4","nodeType":"VariableDeclaration","scope":237,"src":"10282:19:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":217,"name":"uint256","nodeType":"ElementaryTypeName","src":"10282:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":221,"mutability":"mutable","name":"amountsOutScaled18","nameLocation":"10328:18:4","nodeType":"VariableDeclaration","scope":237,"src":"10311:35:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":219,"name":"uint256","nodeType":"ElementaryTypeName","src":"10311:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":220,"nodeType":"ArrayTypeName","src":"10311:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":224,"mutability":"mutable","name":"amountsOutRaw","nameLocation":"10373:13:4","nodeType":"VariableDeclaration","scope":237,"src":"10356:30:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":222,"name":"uint256","nodeType":"ElementaryTypeName","src":"10356:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":223,"nodeType":"ArrayTypeName","src":"10356:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":227,"mutability":"mutable","name":"balancesScaled18","nameLocation":"10413:16:4","nodeType":"VariableDeclaration","scope":237,"src":"10396:33:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":225,"name":"uint256","nodeType":"ElementaryTypeName","src":"10396:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":226,"nodeType":"ArrayTypeName","src":"10396:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":229,"mutability":"mutable","name":"userData","nameLocation":"10452:8:4","nodeType":"VariableDeclaration","scope":237,"src":"10439:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":228,"name":"bytes","nodeType":"ElementaryTypeName","src":"10439:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10192:274:4"},"returnParameters":{"id":236,"nodeType":"ParameterList","parameters":[{"constant":false,"id":232,"mutability":"mutable","name":"success","nameLocation":"10490:7:4","nodeType":"VariableDeclaration","scope":237,"src":"10485:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":231,"name":"bool","nodeType":"ElementaryTypeName","src":"10485:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":235,"mutability":"mutable","name":"hookAdjustedAmountsOutRaw","nameLocation":"10516:25:4","nodeType":"VariableDeclaration","scope":237,"src":"10499:42:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":233,"name":"uint256","nodeType":"ElementaryTypeName","src":"10499:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":234,"nodeType":"ArrayTypeName","src":"10499:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10484:58:4"},"scope":275,"src":"10161:382:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":238,"nodeType":"StructuredDocumentation","src":"10753:556:4","text":" @notice Called before a swap to give the Pool an opportunity to perform actions.\n @dev Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see PoolSwapParams for struct definition)\n @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"5211fa77","id":248,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeSwap","nameLocation":"11323:12:4","nodeType":"FunctionDefinition","parameters":{"id":244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":241,"mutability":"mutable","name":"params","nameLocation":"11360:6:4","nodeType":"VariableDeclaration","scope":248,"src":"11336:30:4","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2312_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":240,"nodeType":"UserDefinedTypeName","pathNode":{"id":239,"name":"PoolSwapParams","nameLocations":["11336:14:4"],"nodeType":"IdentifierPath","referencedDeclaration":2312,"src":"11336:14:4"},"referencedDeclaration":2312,"src":"11336:14:4","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2312_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":243,"mutability":"mutable","name":"pool","nameLocation":"11376:4:4","nodeType":"VariableDeclaration","scope":248,"src":"11368:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":242,"name":"address","nodeType":"ElementaryTypeName","src":"11368:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11335:46:4"},"returnParameters":{"id":247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":246,"mutability":"mutable","name":"success","nameLocation":"11405:7:4","nodeType":"VariableDeclaration","scope":248,"src":"11400:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":245,"name":"bool","nodeType":"ElementaryTypeName","src":"11400:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11399:14:4"},"scope":275,"src":"11314:100:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":249,"nodeType":"StructuredDocumentation","src":"11420:671:4","text":" @notice Called after a swap to perform further actions once the balances have been updated by the swap.\n @dev Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should\n use the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see above for struct definition)\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook"},"functionSelector":"18b6eb55","id":259,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterSwap","nameLocation":"12105:11:4","nodeType":"FunctionDefinition","parameters":{"id":253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":252,"mutability":"mutable","name":"params","nameLocation":"12151:6:4","nodeType":"VariableDeclaration","scope":259,"src":"12126:31:4","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$2341_calldata_ptr","typeString":"struct AfterSwapParams"},"typeName":{"id":251,"nodeType":"UserDefinedTypeName","pathNode":{"id":250,"name":"AfterSwapParams","nameLocations":["12126:15:4"],"nodeType":"IdentifierPath","referencedDeclaration":2341,"src":"12126:15:4"},"referencedDeclaration":2341,"src":"12126:15:4","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$2341_storage_ptr","typeString":"struct AfterSwapParams"}},"visibility":"internal"}],"src":"12116:47:4"},"returnParameters":{"id":258,"nodeType":"ParameterList","parameters":[{"constant":false,"id":255,"mutability":"mutable","name":"success","nameLocation":"12187:7:4","nodeType":"VariableDeclaration","scope":259,"src":"12182:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":254,"name":"bool","nodeType":"ElementaryTypeName","src":"12182:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":257,"mutability":"mutable","name":"hookAdjustedAmountCalculatedRaw","nameLocation":"12204:31:4","nodeType":"VariableDeclaration","scope":259,"src":"12196:39:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":256,"name":"uint256","nodeType":"ElementaryTypeName","src":"12196:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12181:55:4"},"scope":275,"src":"12096:141:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":260,"nodeType":"StructuredDocumentation","src":"12243:795:4","text":" @notice Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\n @dev Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see PoolSwapParams for struct definition)\n @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage, for reference\n @return success True if the pool wishes to proceed with settlement\n @return dynamicSwapFeePercentage Value of the swap fee percentage, as an 18-decimal FP value"},"functionSelector":"a0e8f5ac","id":274,"implemented":false,"kind":"function","modifiers":[],"name":"onComputeDynamicSwapFeePercentage","nameLocation":"13052:33:4","nodeType":"FunctionDefinition","parameters":{"id":268,"nodeType":"ParameterList","parameters":[{"constant":false,"id":263,"mutability":"mutable","name":"params","nameLocation":"13119:6:4","nodeType":"VariableDeclaration","scope":274,"src":"13095:30:4","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2312_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":262,"nodeType":"UserDefinedTypeName","pathNode":{"id":261,"name":"PoolSwapParams","nameLocations":["13095:14:4"],"nodeType":"IdentifierPath","referencedDeclaration":2312,"src":"13095:14:4"},"referencedDeclaration":2312,"src":"13095:14:4","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2312_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":265,"mutability":"mutable","name":"pool","nameLocation":"13143:4:4","nodeType":"VariableDeclaration","scope":274,"src":"13135:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":264,"name":"address","nodeType":"ElementaryTypeName","src":"13135:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":267,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"13165:23:4","nodeType":"VariableDeclaration","scope":274,"src":"13157:31:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":266,"name":"uint256","nodeType":"ElementaryTypeName","src":"13157:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13085:109:4"},"returnParameters":{"id":273,"nodeType":"ParameterList","parameters":[{"constant":false,"id":270,"mutability":"mutable","name":"success","nameLocation":"13223:7:4","nodeType":"VariableDeclaration","scope":274,"src":"13218:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":269,"name":"bool","nodeType":"ElementaryTypeName","src":"13218:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":272,"mutability":"mutable","name":"dynamicSwapFeePercentage","nameLocation":"13240:24:4","nodeType":"VariableDeclaration","scope":274,"src":"13232:32:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":271,"name":"uint256","nodeType":"ElementaryTypeName","src":"13232:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13217:48:4"},"scope":275,"src":"13043:223:4","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":276,"src":"975:12293:4","usedErrors":[],"usedEvents":[]}],"src":"46:13223:4"},"id":4},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","exportedSymbols":{"IERC20":[6486],"IProtocolFeeController":[613],"IVault":[651]},"id":614,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":277,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:5"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":279,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":614,"sourceUnit":6487,"src":"72:72:5","symbolAliases":[{"foreign":{"id":278,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6486,"src":"81:6:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":281,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":614,"sourceUnit":652,"src":"146:38:5","symbolAliases":[{"foreign":{"id":280,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":651,"src":"155:6:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolFeeController","contractDependencies":[],"contractKind":"interface","documentation":{"id":282,"nodeType":"StructuredDocumentation","src":"186:80:5","text":"@notice Contract that handles protocol and pool creator fees for the Vault."},"fullyImplemented":false,"id":613,"linearizedBaseContracts":[613],"name":"IProtocolFeeController","nameLocation":"276:22:5","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":283,"nodeType":"StructuredDocumentation","src":"305:157:5","text":" @notice Emitted when the protocol swap fee percentage is updated.\n @param swapFeePercentage The updated protocol swap fee percentage"},"eventSelector":"bf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d","id":287,"name":"GlobalProtocolSwapFeePercentageChanged","nameLocation":"473:38:5","nodeType":"EventDefinition","parameters":{"id":286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":285,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"520:17:5","nodeType":"VariableDeclaration","scope":287,"src":"512:25:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":284,"name":"uint256","nodeType":"ElementaryTypeName","src":"512:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"511:27:5"},"src":"467:72:5"},{"anonymous":false,"documentation":{"id":288,"nodeType":"StructuredDocumentation","src":"545:160:5","text":" @notice Emitted when the protocol yield fee percentage is updated.\n @param yieldFeePercentage The updated protocol yield fee percentage"},"eventSelector":"48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f6","id":292,"name":"GlobalProtocolYieldFeePercentageChanged","nameLocation":"716:39:5","nodeType":"EventDefinition","parameters":{"id":291,"nodeType":"ParameterList","parameters":[{"constant":false,"id":290,"indexed":false,"mutability":"mutable","name":"yieldFeePercentage","nameLocation":"764:18:5","nodeType":"VariableDeclaration","scope":292,"src":"756:26:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":289,"name":"uint256","nodeType":"ElementaryTypeName","src":"756:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"755:28:5"},"src":"710:74:5"},{"anonymous":false,"documentation":{"id":293,"nodeType":"StructuredDocumentation","src":"790:245:5","text":" @notice Emitted when the protocol swap fee percentage is updated for a specific pool.\n @param pool The pool whose protocol swap fee will be changed\n @param swapFeePercentage The updated protocol swap fee percentage"},"eventSelector":"97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e","id":299,"name":"ProtocolSwapFeePercentageChanged","nameLocation":"1046:32:5","nodeType":"EventDefinition","parameters":{"id":298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":295,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1095:4:5","nodeType":"VariableDeclaration","scope":299,"src":"1079:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":294,"name":"address","nodeType":"ElementaryTypeName","src":"1079:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":297,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1109:17:5","nodeType":"VariableDeclaration","scope":299,"src":"1101:25:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":296,"name":"uint256","nodeType":"ElementaryTypeName","src":"1101:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1078:49:5"},"src":"1040:88:5"},{"anonymous":false,"documentation":{"id":300,"nodeType":"StructuredDocumentation","src":"1134:249:5","text":" @notice Emitted when the protocol yield fee percentage is updated for a specific pool.\n @param pool The pool whose protocol yield fee will be changed\n @param yieldFeePercentage The updated protocol yield fee percentage"},"eventSelector":"af47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd","id":306,"name":"ProtocolYieldFeePercentageChanged","nameLocation":"1394:33:5","nodeType":"EventDefinition","parameters":{"id":305,"nodeType":"ParameterList","parameters":[{"constant":false,"id":302,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1444:4:5","nodeType":"VariableDeclaration","scope":306,"src":"1428:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":301,"name":"address","nodeType":"ElementaryTypeName","src":"1428:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":304,"indexed":false,"mutability":"mutable","name":"yieldFeePercentage","nameLocation":"1458:18:5","nodeType":"VariableDeclaration","scope":306,"src":"1450:26:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":303,"name":"uint256","nodeType":"ElementaryTypeName","src":"1450:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1427:50:5"},"src":"1388:90:5"},{"anonymous":false,"documentation":{"id":307,"nodeType":"StructuredDocumentation","src":"1484:267:5","text":" @notice Emitted when the pool creator swap fee percentage of a pool is updated.\n @param pool The pool whose pool creator swap fee will be changed\n @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage for the pool"},"eventSelector":"b7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c","id":313,"name":"PoolCreatorSwapFeePercentageChanged","nameLocation":"1762:35:5","nodeType":"EventDefinition","parameters":{"id":312,"nodeType":"ParameterList","parameters":[{"constant":false,"id":309,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1814:4:5","nodeType":"VariableDeclaration","scope":313,"src":"1798:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":308,"name":"address","nodeType":"ElementaryTypeName","src":"1798:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":311,"indexed":false,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"1828:28:5","nodeType":"VariableDeclaration","scope":313,"src":"1820:36:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":310,"name":"uint256","nodeType":"ElementaryTypeName","src":"1820:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1797:60:5"},"src":"1756:102:5"},{"anonymous":false,"documentation":{"id":314,"nodeType":"StructuredDocumentation","src":"1864:271:5","text":" @notice Emitted when the pool creator yield fee percentage of a pool is updated.\n @param pool The pool whose pool creator yield fee will be changed\n @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage for the pool"},"eventSelector":"47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34","id":320,"name":"PoolCreatorYieldFeePercentageChanged","nameLocation":"2146:36:5","nodeType":"EventDefinition","parameters":{"id":319,"nodeType":"ParameterList","parameters":[{"constant":false,"id":316,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2199:4:5","nodeType":"VariableDeclaration","scope":320,"src":"2183:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":315,"name":"address","nodeType":"ElementaryTypeName","src":"2183:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":318,"indexed":false,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"2213:29:5","nodeType":"VariableDeclaration","scope":320,"src":"2205:37:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":317,"name":"uint256","nodeType":"ElementaryTypeName","src":"2205:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2182:61:5"},"src":"2140:104:5"},{"anonymous":false,"documentation":{"id":321,"nodeType":"StructuredDocumentation","src":"2250:560:5","text":" @notice Logs the collection of protocol swap fees in a specific token and amount.\n @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass\n multiple operations.\n @param pool The pool on which the swap fee was charged\n @param token The token in which the swap fee was charged\n @param amount The amount of the token collected in fees"},"eventSelector":"ae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f","id":330,"name":"ProtocolSwapFeeCollected","nameLocation":"2821:24:5","nodeType":"EventDefinition","parameters":{"id":329,"nodeType":"ParameterList","parameters":[{"constant":false,"id":323,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2862:4:5","nodeType":"VariableDeclaration","scope":330,"src":"2846:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":322,"name":"address","nodeType":"ElementaryTypeName","src":"2846:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":326,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"2883:5:5","nodeType":"VariableDeclaration","scope":330,"src":"2868:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":325,"nodeType":"UserDefinedTypeName","pathNode":{"id":324,"name":"IERC20","nameLocations":["2868:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"2868:6:5"},"referencedDeclaration":6486,"src":"2868:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":328,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2898:6:5","nodeType":"VariableDeclaration","scope":330,"src":"2890:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":327,"name":"uint256","nodeType":"ElementaryTypeName","src":"2890:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2845:60:5"},"src":"2815:91:5"},{"anonymous":false,"documentation":{"id":331,"nodeType":"StructuredDocumentation","src":"2912:564:5","text":" @notice Logs the collection of protocol yield fees in a specific token and amount.\n @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass\n multiple operations.\n @param pool The pool on which the yield fee was charged\n @param token The token in which the yield fee was charged\n @param amount The amount of the token collected in fees"},"eventSelector":"e505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e2","id":340,"name":"ProtocolYieldFeeCollected","nameLocation":"3487:25:5","nodeType":"EventDefinition","parameters":{"id":339,"nodeType":"ParameterList","parameters":[{"constant":false,"id":333,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"3529:4:5","nodeType":"VariableDeclaration","scope":340,"src":"3513:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":332,"name":"address","nodeType":"ElementaryTypeName","src":"3513:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":336,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"3550:5:5","nodeType":"VariableDeclaration","scope":340,"src":"3535:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":335,"nodeType":"UserDefinedTypeName","pathNode":{"id":334,"name":"IERC20","nameLocations":["3535:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"3535:6:5"},"referencedDeclaration":6486,"src":"3535:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":338,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"3565:6:5","nodeType":"VariableDeclaration","scope":340,"src":"3557:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":337,"name":"uint256","nodeType":"ElementaryTypeName","src":"3557:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3512:60:5"},"src":"3481:92:5"},{"anonymous":false,"documentation":{"id":341,"nodeType":"StructuredDocumentation","src":"3579:333:5","text":" @notice Logs the withdrawal of protocol fees in a specific token and amount.\n @param pool The pool from which protocol fees are being withdrawn\n @param token The token being withdrawn\n @param recipient The recipient of the funds\n @param amount The amount of the fee token that was withdrawn"},"eventSelector":"1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b5","id":352,"name":"ProtocolFeesWithdrawn","nameLocation":"3923:21:5","nodeType":"EventDefinition","parameters":{"id":351,"nodeType":"ParameterList","parameters":[{"constant":false,"id":343,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"3961:4:5","nodeType":"VariableDeclaration","scope":352,"src":"3945:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":342,"name":"address","nodeType":"ElementaryTypeName","src":"3945:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":346,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"3982:5:5","nodeType":"VariableDeclaration","scope":352,"src":"3967:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":345,"nodeType":"UserDefinedTypeName","pathNode":{"id":344,"name":"IERC20","nameLocations":["3967:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"3967:6:5"},"referencedDeclaration":6486,"src":"3967:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":348,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"4005:9:5","nodeType":"VariableDeclaration","scope":352,"src":"3989:25:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":347,"name":"address","nodeType":"ElementaryTypeName","src":"3989:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":350,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"4024:6:5","nodeType":"VariableDeclaration","scope":352,"src":"4016:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":349,"name":"uint256","nodeType":"ElementaryTypeName","src":"4016:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3944:87:5"},"src":"3917:115:5"},{"anonymous":false,"documentation":{"id":353,"nodeType":"StructuredDocumentation","src":"4038:398:5","text":" @notice Logs the withdrawal of pool creator fees in a specific token and amount.\n @param pool The pool from which pool creator fees are being withdrawn\n @param token The token being withdrawn\n @param recipient The recipient of the funds (the pool creator if permissionless, or another account)\n @param amount The amount of the fee token that was withdrawn"},"eventSelector":"938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f9","id":364,"name":"PoolCreatorFeesWithdrawn","nameLocation":"4447:24:5","nodeType":"EventDefinition","parameters":{"id":363,"nodeType":"ParameterList","parameters":[{"constant":false,"id":355,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4497:4:5","nodeType":"VariableDeclaration","scope":364,"src":"4481:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":354,"name":"address","nodeType":"ElementaryTypeName","src":"4481:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":358,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"4526:5:5","nodeType":"VariableDeclaration","scope":364,"src":"4511:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":357,"nodeType":"UserDefinedTypeName","pathNode":{"id":356,"name":"IERC20","nameLocations":["4511:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"4511:6:5"},"referencedDeclaration":6486,"src":"4511:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":360,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"4557:9:5","nodeType":"VariableDeclaration","scope":364,"src":"4541:25:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":359,"name":"address","nodeType":"ElementaryTypeName","src":"4541:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":362,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"4584:6:5","nodeType":"VariableDeclaration","scope":364,"src":"4576:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":361,"name":"uint256","nodeType":"ElementaryTypeName","src":"4576:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4471:125:5"},"src":"4441:156:5"},{"anonymous":false,"documentation":{"id":365,"nodeType":"StructuredDocumentation","src":"4603:529:5","text":" @notice Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\n @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n equal the current global swap fee percentage.\n @param pool The pool being registered\n @param aggregateSwapFeePercentage The initial aggregate swap fee percentage\n @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially"},"eventSelector":"a34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a78564","id":373,"name":"InitialPoolAggregateSwapFeePercentage","nameLocation":"5143:37:5","nodeType":"EventDefinition","parameters":{"id":372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":367,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5206:4:5","nodeType":"VariableDeclaration","scope":373,"src":"5190:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":366,"name":"address","nodeType":"ElementaryTypeName","src":"5190:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":369,"indexed":false,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"5228:26:5","nodeType":"VariableDeclaration","scope":373,"src":"5220:34:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":368,"name":"uint256","nodeType":"ElementaryTypeName","src":"5220:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":371,"indexed":false,"mutability":"mutable","name":"isProtocolFeeExempt","nameLocation":"5269:19:5","nodeType":"VariableDeclaration","scope":373,"src":"5264:24:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":370,"name":"bool","nodeType":"ElementaryTypeName","src":"5264:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5180:114:5"},"src":"5137:158:5"},{"anonymous":false,"documentation":{"id":374,"nodeType":"StructuredDocumentation","src":"5301:533:5","text":" @notice Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\n @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n equal the current global yield fee percentage.\n @param pool The pool being registered\n @param aggregateYieldFeePercentage The initial aggregate yield fee percentage\n @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially"},"eventSelector":"ce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb","id":382,"name":"InitialPoolAggregateYieldFeePercentage","nameLocation":"5845:38:5","nodeType":"EventDefinition","parameters":{"id":381,"nodeType":"ParameterList","parameters":[{"constant":false,"id":376,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5909:4:5","nodeType":"VariableDeclaration","scope":382,"src":"5893:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":375,"name":"address","nodeType":"ElementaryTypeName","src":"5893:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":378,"indexed":false,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"5931:27:5","nodeType":"VariableDeclaration","scope":382,"src":"5923:35:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":377,"name":"uint256","nodeType":"ElementaryTypeName","src":"5923:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":380,"indexed":false,"mutability":"mutable","name":"isProtocolFeeExempt","nameLocation":"5973:19:5","nodeType":"VariableDeclaration","scope":382,"src":"5968:24:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":379,"name":"bool","nodeType":"ElementaryTypeName","src":"5968:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5883:115:5"},"src":"5839:160:5"},{"anonymous":false,"documentation":{"id":383,"nodeType":"StructuredDocumentation","src":"6005:677:5","text":" @notice Emitted for pools registered with creators.\n @dev The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this\n simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee\n counterpart also include the protocol fee exemption flag, we might as well include it here as well.\n @param pool The address of the pool being registered\n @param poolCreator The address of the pool creator (non-zero, or the event would not be emitted)\n @param protocolFeeExempt True if the pool is initially exempt from protocol fees"},"eventSelector":"a90fdff0801794d86ec8df4bdd2b7e627d30052d0658e18cb977b38248ee45e8","id":391,"name":"PoolWithCreatorRegistered","nameLocation":"6693:25:5","nodeType":"EventDefinition","parameters":{"id":390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":385,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6735:4:5","nodeType":"VariableDeclaration","scope":391,"src":"6719:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":384,"name":"address","nodeType":"ElementaryTypeName","src":"6719:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":387,"indexed":true,"mutability":"mutable","name":"poolCreator","nameLocation":"6757:11:5","nodeType":"VariableDeclaration","scope":391,"src":"6741:27:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":386,"name":"address","nodeType":"ElementaryTypeName","src":"6741:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":389,"indexed":false,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"6775:17:5","nodeType":"VariableDeclaration","scope":391,"src":"6770:22:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":388,"name":"bool","nodeType":"ElementaryTypeName","src":"6770:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6718:75:5"},"src":"6687:107:5"},{"documentation":{"id":392,"nodeType":"StructuredDocumentation","src":"6800:219:5","text":" @notice Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\n @dev Note that this is checked for both the global and pool-specific protocol swap fee percentages."},"errorSelector":"7e6eb7fb","id":394,"name":"ProtocolSwapFeePercentageTooHigh","nameLocation":"7030:32:5","nodeType":"ErrorDefinition","parameters":{"id":393,"nodeType":"ParameterList","parameters":[],"src":"7062:2:5"},"src":"7024:41:5"},{"documentation":{"id":395,"nodeType":"StructuredDocumentation","src":"7071:221:5","text":" @notice Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\n @dev Note that this is checked for both the global and pool-specific protocol yield fee percentages."},"errorSelector":"a7849e8e","id":397,"name":"ProtocolYieldFeePercentageTooHigh","nameLocation":"7303:33:5","nodeType":"ErrorDefinition","parameters":{"id":396,"nodeType":"ParameterList","parameters":[],"src":"7336:2:5"},"src":"7297:42:5"},{"documentation":{"id":398,"nodeType":"StructuredDocumentation","src":"7345:156:5","text":" @notice Error raised if there is no pool creator on a withdrawal attempt from the given pool.\n @param pool The pool with no creator"},"errorSelector":"8bcbf353","id":402,"name":"PoolCreatorNotRegistered","nameLocation":"7512:24:5","nodeType":"ErrorDefinition","parameters":{"id":401,"nodeType":"ParameterList","parameters":[{"constant":false,"id":400,"mutability":"mutable","name":"pool","nameLocation":"7545:4:5","nodeType":"VariableDeclaration","scope":402,"src":"7537:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":399,"name":"address","nodeType":"ElementaryTypeName","src":"7537:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7536:14:5"},"src":"7506:45:5"},{"documentation":{"id":403,"nodeType":"StructuredDocumentation","src":"7557:236:5","text":" @notice Error raised if the wrong account attempts to withdraw pool creator fees.\n @param caller The account attempting to withdraw pool creator fees\n @param pool The pool the caller tried to withdraw from"},"errorSelector":"fbecdbf4","id":409,"name":"CallerIsNotPoolCreator","nameLocation":"7804:22:5","nodeType":"ErrorDefinition","parameters":{"id":408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":405,"mutability":"mutable","name":"caller","nameLocation":"7835:6:5","nodeType":"VariableDeclaration","scope":409,"src":"7827:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":404,"name":"address","nodeType":"ElementaryTypeName","src":"7827:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":407,"mutability":"mutable","name":"pool","nameLocation":"7851:4:5","nodeType":"VariableDeclaration","scope":409,"src":"7843:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":406,"name":"address","nodeType":"ElementaryTypeName","src":"7843:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7826:30:5"},"src":"7798:59:5"},{"documentation":{"id":410,"nodeType":"StructuredDocumentation","src":"7863:110:5","text":"@notice Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value."},"errorSelector":"0370da74","id":412,"name":"PoolCreatorFeePercentageTooHigh","nameLocation":"7984:31:5","nodeType":"ErrorDefinition","parameters":{"id":411,"nodeType":"ParameterList","parameters":[],"src":"8015:2:5"},"src":"7978:40:5"},{"documentation":{"id":413,"nodeType":"StructuredDocumentation","src":"8024:109:5","text":" @notice Get the address of the main Vault contract.\n @return vault The Vault address"},"functionSelector":"fbfa77cf","id":419,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"8147:5:5","nodeType":"FunctionDefinition","parameters":{"id":414,"nodeType":"ParameterList","parameters":[],"src":"8152:2:5"},"returnParameters":{"id":418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":417,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":419,"src":"8178:6:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":416,"nodeType":"UserDefinedTypeName","pathNode":{"id":415,"name":"IVault","nameLocations":["8178:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"8178:6:5"},"referencedDeclaration":651,"src":"8178:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"}],"src":"8177:8:5"},"scope":613,"src":"8138:48:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":420,"nodeType":"StructuredDocumentation","src":"8192:131:5","text":" @notice Collects aggregate fees from the Vault for a given pool.\n @param pool The pool with aggregate fees"},"functionSelector":"8f4ab9ca","id":425,"implemented":false,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"8337:20:5","nodeType":"FunctionDefinition","parameters":{"id":423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":422,"mutability":"mutable","name":"pool","nameLocation":"8366:4:5","nodeType":"VariableDeclaration","scope":425,"src":"8358:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":421,"name":"address","nodeType":"ElementaryTypeName","src":"8358:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8357:14:5"},"returnParameters":{"id":424,"nodeType":"ParameterList","parameters":[],"src":"8380:0:5"},"scope":613,"src":"8328:53:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":426,"nodeType":"StructuredDocumentation","src":"8387:156:5","text":" @notice Getter for the current global protocol swap fee.\n @return protocolSwapFeePercentage The global protocol swap fee percentage"},"functionSelector":"7869ee18","id":431,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalProtocolSwapFeePercentage","nameLocation":"8557:34:5","nodeType":"FunctionDefinition","parameters":{"id":427,"nodeType":"ParameterList","parameters":[],"src":"8591:2:5"},"returnParameters":{"id":430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":429,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"8625:25:5","nodeType":"VariableDeclaration","scope":431,"src":"8617:33:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":428,"name":"uint256","nodeType":"ElementaryTypeName","src":"8617:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8616:35:5"},"scope":613,"src":"8548:104:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":432,"nodeType":"StructuredDocumentation","src":"8658:159:5","text":" @notice Getter for the current global protocol yield fee.\n @return protocolYieldFeePercentage The global protocol yield fee percentage"},"functionSelector":"55fb76af","id":437,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalProtocolYieldFeePercentage","nameLocation":"8831:35:5","nodeType":"FunctionDefinition","parameters":{"id":433,"nodeType":"ParameterList","parameters":[],"src":"8866:2:5"},"returnParameters":{"id":436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":435,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"8900:26:5","nodeType":"VariableDeclaration","scope":437,"src":"8892:34:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":434,"name":"uint256","nodeType":"ElementaryTypeName","src":"8892:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8891:36:5"},"scope":613,"src":"8822:106:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":438,"nodeType":"StructuredDocumentation","src":"8934:207:5","text":" @notice Getter for pool registration flag.\n @param pool The address of the pool\n @return isRegistered True if the pool configuration has been set (e.g., through `registerPool`)"},"functionSelector":"c673bdaf","id":445,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"9155:16:5","nodeType":"FunctionDefinition","parameters":{"id":441,"nodeType":"ParameterList","parameters":[{"constant":false,"id":440,"mutability":"mutable","name":"pool","nameLocation":"9180:4:5","nodeType":"VariableDeclaration","scope":445,"src":"9172:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":439,"name":"address","nodeType":"ElementaryTypeName","src":"9172:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9171:14:5"},"returnParameters":{"id":444,"nodeType":"ParameterList","parameters":[{"constant":false,"id":443,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":445,"src":"9209:4:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":442,"name":"bool","nodeType":"ElementaryTypeName","src":"9209:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9208:6:5"},"scope":613,"src":"9146:69:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":446,"nodeType":"StructuredDocumentation","src":"9221:292:5","text":" @notice Getter for the current protocol swap fee for a given pool.\n @param pool The address of the pool\n @return protocolSwapFeePercentage The protocol swap fee percentage for the given pool\n @return isOverride True if the protocol fee has been overridden"},"functionSelector":"5c15a0b4","id":455,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolProtocolSwapFeeInfo","nameLocation":"9527:26:5","nodeType":"FunctionDefinition","parameters":{"id":449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":448,"mutability":"mutable","name":"pool","nameLocation":"9571:4:5","nodeType":"VariableDeclaration","scope":455,"src":"9563:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":447,"name":"address","nodeType":"ElementaryTypeName","src":"9563:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9553:28:5"},"returnParameters":{"id":454,"nodeType":"ParameterList","parameters":[{"constant":false,"id":451,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"9613:25:5","nodeType":"VariableDeclaration","scope":455,"src":"9605:33:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":450,"name":"uint256","nodeType":"ElementaryTypeName","src":"9605:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":453,"mutability":"mutable","name":"isOverride","nameLocation":"9645:10:5","nodeType":"VariableDeclaration","scope":455,"src":"9640:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":452,"name":"bool","nodeType":"ElementaryTypeName","src":"9640:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9604:52:5"},"scope":613,"src":"9518:139:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":456,"nodeType":"StructuredDocumentation","src":"9663:295:5","text":" @notice Getter for the current protocol yield fee for a given pool.\n @param pool The address of the pool\n @return protocolYieldFeePercentage The protocol yield fee percentage for the given pool\n @return isOverride True if the protocol fee has been overridden"},"functionSelector":"7a2b97dc","id":465,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolProtocolYieldFeeInfo","nameLocation":"9972:27:5","nodeType":"FunctionDefinition","parameters":{"id":459,"nodeType":"ParameterList","parameters":[{"constant":false,"id":458,"mutability":"mutable","name":"pool","nameLocation":"10017:4:5","nodeType":"VariableDeclaration","scope":465,"src":"10009:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":457,"name":"address","nodeType":"ElementaryTypeName","src":"10009:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9999:28:5"},"returnParameters":{"id":464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":461,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"10059:26:5","nodeType":"VariableDeclaration","scope":465,"src":"10051:34:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":460,"name":"uint256","nodeType":"ElementaryTypeName","src":"10051:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":463,"mutability":"mutable","name":"isOverride","nameLocation":"10092:10:5","nodeType":"VariableDeclaration","scope":465,"src":"10087:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":462,"name":"bool","nodeType":"ElementaryTypeName","src":"10087:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10050:53:5"},"scope":613,"src":"9963:141:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":466,"nodeType":"StructuredDocumentation","src":"10110:249:5","text":" @notice Getter for the current pool creator swap fee percentage for a given pool.\n @param pool The address of the pool\n @return poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee"},"functionSelector":"0b8e059b","id":473,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorSwapFeePercentage","nameLocation":"10373:31:5","nodeType":"FunctionDefinition","parameters":{"id":469,"nodeType":"ParameterList","parameters":[{"constant":false,"id":468,"mutability":"mutable","name":"pool","nameLocation":"10413:4:5","nodeType":"VariableDeclaration","scope":473,"src":"10405:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":467,"name":"address","nodeType":"ElementaryTypeName","src":"10405:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10404:14:5"},"returnParameters":{"id":472,"nodeType":"ParameterList","parameters":[{"constant":false,"id":471,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":473,"src":"10442:7:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":470,"name":"uint256","nodeType":"ElementaryTypeName","src":"10442:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10441:9:5"},"scope":613,"src":"10364:87:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":474,"nodeType":"StructuredDocumentation","src":"10457:249:5","text":" @notice Getter for the current pool creator swap fee percentage for a given pool.\n @param pool The address of the pool\n @return poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee"},"functionSelector":"0252aab5","id":481,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorYieldFeePercentage","nameLocation":"10720:32:5","nodeType":"FunctionDefinition","parameters":{"id":477,"nodeType":"ParameterList","parameters":[{"constant":false,"id":476,"mutability":"mutable","name":"pool","nameLocation":"10761:4:5","nodeType":"VariableDeclaration","scope":481,"src":"10753:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":475,"name":"address","nodeType":"ElementaryTypeName","src":"10753:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10752:14:5"},"returnParameters":{"id":480,"nodeType":"ParameterList","parameters":[{"constant":false,"id":479,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":481,"src":"10790:7:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":478,"name":"uint256","nodeType":"ElementaryTypeName","src":"10790:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10789:9:5"},"scope":613,"src":"10711:88:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":482,"nodeType":"StructuredDocumentation","src":"10805:344:5","text":" @notice Returns the amount of each pool token allocated to the protocol for withdrawal.\n @dev Includes both swap and yield fees.\n @param pool The address of the pool on which fees were collected\n @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order"},"functionSelector":"8df44c54","id":490,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeAmounts","nameLocation":"11163:21:5","nodeType":"FunctionDefinition","parameters":{"id":485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":484,"mutability":"mutable","name":"pool","nameLocation":"11193:4:5","nodeType":"VariableDeclaration","scope":490,"src":"11185:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":483,"name":"address","nodeType":"ElementaryTypeName","src":"11185:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11184:14:5"},"returnParameters":{"id":489,"nodeType":"ParameterList","parameters":[{"constant":false,"id":488,"mutability":"mutable","name":"feeAmounts","nameLocation":"11239:10:5","nodeType":"VariableDeclaration","scope":490,"src":"11222:27:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":486,"name":"uint256","nodeType":"ElementaryTypeName","src":"11222:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":487,"nodeType":"ArrayTypeName","src":"11222:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11221:29:5"},"scope":613,"src":"11154:97:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":491,"nodeType":"StructuredDocumentation","src":"11257:348:5","text":" @notice Returns the amount of each pool token allocated to the pool creator for withdrawal.\n @dev Includes both swap and yield fees.\n @param pool The address of the pool on which fees were collected\n @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order"},"functionSelector":"9e95f3fd","id":499,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorFeeAmounts","nameLocation":"11619:24:5","nodeType":"FunctionDefinition","parameters":{"id":494,"nodeType":"ParameterList","parameters":[{"constant":false,"id":493,"mutability":"mutable","name":"pool","nameLocation":"11652:4:5","nodeType":"VariableDeclaration","scope":499,"src":"11644:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":492,"name":"address","nodeType":"ElementaryTypeName","src":"11644:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11643:14:5"},"returnParameters":{"id":498,"nodeType":"ParameterList","parameters":[{"constant":false,"id":497,"mutability":"mutable","name":"feeAmounts","nameLocation":"11698:10:5","nodeType":"VariableDeclaration","scope":499,"src":"11681:27:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":495,"name":"uint256","nodeType":"ElementaryTypeName","src":"11681:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":496,"nodeType":"ArrayTypeName","src":"11681:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11680:29:5"},"scope":613,"src":"11610:100:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":500,"nodeType":"StructuredDocumentation","src":"11716:1445:5","text":" @notice Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\n @dev Not tied to any particular pool; this just performs the low-level \"additive fee\" calculation. Note that\n pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are\n stored in the Vault with 24-bit precision, this will truncate any values that require greater precision.\n It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee\n components, but the truncation ensures it will not revert for any valid set of fee percentages.\n See example below:\n tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60%\n totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000\n protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400\n creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600\n creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360\n lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\n @param protocolFeePercentage The protocol portion of the aggregate fee percentage\n @param poolCreatorFeePercentage The pool creator portion of the aggregate fee percentage\n @return aggregateFeePercentage The computed aggregate percentage"},"functionSelector":"0ddd60c6","id":509,"implemented":false,"kind":"function","modifiers":[],"name":"computeAggregateFeePercentage","nameLocation":"13175:29:5","nodeType":"FunctionDefinition","parameters":{"id":505,"nodeType":"ParameterList","parameters":[{"constant":false,"id":502,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"13222:21:5","nodeType":"VariableDeclaration","scope":509,"src":"13214:29:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":501,"name":"uint256","nodeType":"ElementaryTypeName","src":"13214:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":504,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"13261:24:5","nodeType":"VariableDeclaration","scope":509,"src":"13253:32:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":503,"name":"uint256","nodeType":"ElementaryTypeName","src":"13253:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13204:87:5"},"returnParameters":{"id":508,"nodeType":"ParameterList","parameters":[{"constant":false,"id":507,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"13323:22:5","nodeType":"VariableDeclaration","scope":509,"src":"13315:30:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":506,"name":"uint256","nodeType":"ElementaryTypeName","src":"13315:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13314:32:5"},"scope":613,"src":"13166:181:5","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":510,"nodeType":"StructuredDocumentation","src":"13353:398:5","text":" @notice Override the protocol swap fee percentage for a specific pool.\n @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n @param pool The pool for which we are setting the protocol swap fee"},"functionSelector":"71ecc8fb","id":515,"implemented":false,"kind":"function","modifiers":[],"name":"updateProtocolSwapFeePercentage","nameLocation":"13765:31:5","nodeType":"FunctionDefinition","parameters":{"id":513,"nodeType":"ParameterList","parameters":[{"constant":false,"id":512,"mutability":"mutable","name":"pool","nameLocation":"13805:4:5","nodeType":"VariableDeclaration","scope":515,"src":"13797:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":511,"name":"address","nodeType":"ElementaryTypeName","src":"13797:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13796:14:5"},"returnParameters":{"id":514,"nodeType":"ParameterList","parameters":[],"src":"13819:0:5"},"scope":613,"src":"13756:64:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":516,"nodeType":"StructuredDocumentation","src":"13826:400:5","text":" @notice Override the protocol yield fee percentage for a specific pool.\n @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n @param pool The pool for which we are setting the protocol yield fee"},"functionSelector":"71447ea8","id":521,"implemented":false,"kind":"function","modifiers":[],"name":"updateProtocolYieldFeePercentage","nameLocation":"14240:32:5","nodeType":"FunctionDefinition","parameters":{"id":519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":518,"mutability":"mutable","name":"pool","nameLocation":"14281:4:5","nodeType":"VariableDeclaration","scope":521,"src":"14273:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":517,"name":"address","nodeType":"ElementaryTypeName","src":"14273:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14272:14:5"},"returnParameters":{"id":520,"nodeType":"ParameterList","parameters":[],"src":"14295:0:5"},"scope":613,"src":"14231:65:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":522,"nodeType":"StructuredDocumentation","src":"14520:826:5","text":" @notice Add pool-specific entries to the protocol swap and yield percentages.\n @dev This must be called from the Vault during pool registration. It will initialize the pool to the global\n protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate\n fee percentages, based on an initial pool creator fee of 0.\n @param pool The address of the pool being registered\n @param poolCreator The address of the pool creator (or 0 if there won't be a pool creator fee)\n @param protocolFeeExempt If true, the pool is initially exempt from protocol fees\n @return aggregateSwapFeePercentage The initial aggregate swap fee percentage\n @return aggregateYieldFeePercentage The initial aggregate yield fee percentage"},"functionSelector":"77ff76e7","id":535,"implemented":false,"kind":"function","modifiers":[],"name":"registerPool","nameLocation":"15360:12:5","nodeType":"FunctionDefinition","parameters":{"id":529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":524,"mutability":"mutable","name":"pool","nameLocation":"15390:4:5","nodeType":"VariableDeclaration","scope":535,"src":"15382:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":523,"name":"address","nodeType":"ElementaryTypeName","src":"15382:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":526,"mutability":"mutable","name":"poolCreator","nameLocation":"15412:11:5","nodeType":"VariableDeclaration","scope":535,"src":"15404:19:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":525,"name":"address","nodeType":"ElementaryTypeName","src":"15404:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":528,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"15438:17:5","nodeType":"VariableDeclaration","scope":535,"src":"15433:22:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":527,"name":"bool","nodeType":"ElementaryTypeName","src":"15433:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15372:89:5"},"returnParameters":{"id":534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":531,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"15488:26:5","nodeType":"VariableDeclaration","scope":535,"src":"15480:34:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":530,"name":"uint256","nodeType":"ElementaryTypeName","src":"15480:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":533,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"15524:27:5","nodeType":"VariableDeclaration","scope":535,"src":"15516:35:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":532,"name":"uint256","nodeType":"ElementaryTypeName","src":"15516:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15479:73:5"},"scope":613,"src":"15351:202:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":536,"nodeType":"StructuredDocumentation","src":"15559:175:5","text":" @notice Set the global protocol swap fee percentage, used by standard pools.\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage"},"functionSelector":"8a3c5c69","id":541,"implemented":false,"kind":"function","modifiers":[],"name":"setGlobalProtocolSwapFeePercentage","nameLocation":"15748:34:5","nodeType":"FunctionDefinition","parameters":{"id":539,"nodeType":"ParameterList","parameters":[{"constant":false,"id":538,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"15791:28:5","nodeType":"VariableDeclaration","scope":541,"src":"15783:36:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":537,"name":"uint256","nodeType":"ElementaryTypeName","src":"15783:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15782:38:5"},"returnParameters":{"id":540,"nodeType":"ParameterList","parameters":[],"src":"15829:0:5"},"scope":613,"src":"15739:91:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":542,"nodeType":"StructuredDocumentation","src":"15836:178:5","text":" @notice Set the global protocol yield fee percentage, used by standard pools.\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage"},"functionSelector":"a93df2a4","id":547,"implemented":false,"kind":"function","modifiers":[],"name":"setGlobalProtocolYieldFeePercentage","nameLocation":"16028:35:5","nodeType":"FunctionDefinition","parameters":{"id":545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":544,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"16072:29:5","nodeType":"VariableDeclaration","scope":547,"src":"16064:37:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":543,"name":"uint256","nodeType":"ElementaryTypeName","src":"16064:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16063:39:5"},"returnParameters":{"id":546,"nodeType":"ParameterList","parameters":[],"src":"16111:0:5"},"scope":613,"src":"16019:93:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":548,"nodeType":"StructuredDocumentation","src":"16118:272:5","text":" @notice Override the protocol swap fee percentage for a specific pool.\n @param pool The address of the pool for which we are setting the protocol swap fee\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage for the pool"},"functionSelector":"fd267f39","id":555,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolSwapFeePercentage","nameLocation":"16404:28:5","nodeType":"FunctionDefinition","parameters":{"id":553,"nodeType":"ParameterList","parameters":[{"constant":false,"id":550,"mutability":"mutable","name":"pool","nameLocation":"16441:4:5","nodeType":"VariableDeclaration","scope":555,"src":"16433:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":549,"name":"address","nodeType":"ElementaryTypeName","src":"16433:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":552,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"16455:28:5","nodeType":"VariableDeclaration","scope":555,"src":"16447:36:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":551,"name":"uint256","nodeType":"ElementaryTypeName","src":"16447:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16432:52:5"},"returnParameters":{"id":554,"nodeType":"ParameterList","parameters":[],"src":"16493:0:5"},"scope":613,"src":"16395:99:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":556,"nodeType":"StructuredDocumentation","src":"16500:276:5","text":" @notice Override the protocol yield fee percentage for a specific pool.\n @param pool The address of the pool for which we are setting the protocol yield fee\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage for the pool"},"functionSelector":"abaa3356","id":563,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolYieldFeePercentage","nameLocation":"16790:29:5","nodeType":"FunctionDefinition","parameters":{"id":561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":558,"mutability":"mutable","name":"pool","nameLocation":"16828:4:5","nodeType":"VariableDeclaration","scope":563,"src":"16820:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":557,"name":"address","nodeType":"ElementaryTypeName","src":"16820:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":560,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"16842:29:5","nodeType":"VariableDeclaration","scope":563,"src":"16834:37:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":559,"name":"uint256","nodeType":"ElementaryTypeName","src":"16834:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16819:53:5"},"returnParameters":{"id":562,"nodeType":"ParameterList","parameters":[],"src":"16881:0:5"},"scope":613,"src":"16781:101:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":564,"nodeType":"StructuredDocumentation","src":"16888:623:5","text":" @notice Assigns a new pool creator swap fee percentage to the specified pool.\n @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n @param pool The address of the pool for which the pool creator fee will be changed\n @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage to apply to the pool"},"functionSelector":"1377c16c","id":571,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolCreatorSwapFeePercentage","nameLocation":"17525:31:5","nodeType":"FunctionDefinition","parameters":{"id":569,"nodeType":"ParameterList","parameters":[{"constant":false,"id":566,"mutability":"mutable","name":"pool","nameLocation":"17565:4:5","nodeType":"VariableDeclaration","scope":571,"src":"17557:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":565,"name":"address","nodeType":"ElementaryTypeName","src":"17557:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":568,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"17579:28:5","nodeType":"VariableDeclaration","scope":571,"src":"17571:36:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":567,"name":"uint256","nodeType":"ElementaryTypeName","src":"17571:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17556:52:5"},"returnParameters":{"id":570,"nodeType":"ParameterList","parameters":[],"src":"17617:0:5"},"scope":613,"src":"17516:102:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":572,"nodeType":"StructuredDocumentation","src":"17624:626:5","text":" @notice Assigns a new pool creator yield fee percentage to the specified pool.\n @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n @param pool The address of the pool for which the pool creator fee will be changed\n @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage to apply to the pool"},"functionSelector":"3af52712","id":579,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolCreatorYieldFeePercentage","nameLocation":"18264:32:5","nodeType":"FunctionDefinition","parameters":{"id":577,"nodeType":"ParameterList","parameters":[{"constant":false,"id":574,"mutability":"mutable","name":"pool","nameLocation":"18305:4:5","nodeType":"VariableDeclaration","scope":579,"src":"18297:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":573,"name":"address","nodeType":"ElementaryTypeName","src":"18297:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":576,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"18319:29:5","nodeType":"VariableDeclaration","scope":579,"src":"18311:37:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":575,"name":"uint256","nodeType":"ElementaryTypeName","src":"18311:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18296:53:5"},"returnParameters":{"id":578,"nodeType":"ParameterList","parameters":[],"src":"18358:0:5"},"scope":613,"src":"18255:104:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":580,"nodeType":"StructuredDocumentation","src":"18365:296:5","text":" @notice Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\n @dev Sends swap and yield protocol fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens"},"functionSelector":"cf7b287f","id":587,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawProtocolFees","nameLocation":"18675:20:5","nodeType":"FunctionDefinition","parameters":{"id":585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":582,"mutability":"mutable","name":"pool","nameLocation":"18704:4:5","nodeType":"VariableDeclaration","scope":587,"src":"18696:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":581,"name":"address","nodeType":"ElementaryTypeName","src":"18696:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":584,"mutability":"mutable","name":"recipient","nameLocation":"18718:9:5","nodeType":"VariableDeclaration","scope":587,"src":"18710:17:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":583,"name":"address","nodeType":"ElementaryTypeName","src":"18710:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18695:33:5"},"returnParameters":{"id":586,"nodeType":"ParameterList","parameters":[],"src":"18737:0:5"},"scope":613,"src":"18666:72:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":588,"nodeType":"StructuredDocumentation","src":"18744:339:5","text":" @notice Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\n @dev Sends swap and yield protocol fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens\n @param token Token to withdraw"},"functionSelector":"b53a70b2","id":598,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawProtocolFeesForToken","nameLocation":"19097:28:5","nodeType":"FunctionDefinition","parameters":{"id":596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":590,"mutability":"mutable","name":"pool","nameLocation":"19134:4:5","nodeType":"VariableDeclaration","scope":598,"src":"19126:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":589,"name":"address","nodeType":"ElementaryTypeName","src":"19126:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":592,"mutability":"mutable","name":"recipient","nameLocation":"19148:9:5","nodeType":"VariableDeclaration","scope":598,"src":"19140:17:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":591,"name":"address","nodeType":"ElementaryTypeName","src":"19140:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":595,"mutability":"mutable","name":"token","nameLocation":"19166:5:5","nodeType":"VariableDeclaration","scope":598,"src":"19159:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":594,"nodeType":"UserDefinedTypeName","pathNode":{"id":593,"name":"IERC20","nameLocations":["19159:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"19159:6:5"},"referencedDeclaration":6486,"src":"19159:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"19125:47:5"},"returnParameters":{"id":597,"nodeType":"ParameterList","parameters":[],"src":"19181:0:5"},"scope":613,"src":"19088:94:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":599,"nodeType":"StructuredDocumentation","src":"19188:291:5","text":" @notice Withdraw collected pool creator fees for a given pool. This is a permissioned function.\n @dev Sends swap and yield pool creator fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens"},"functionSelector":"f7061445","id":606,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"19493:23:5","nodeType":"FunctionDefinition","parameters":{"id":604,"nodeType":"ParameterList","parameters":[{"constant":false,"id":601,"mutability":"mutable","name":"pool","nameLocation":"19525:4:5","nodeType":"VariableDeclaration","scope":606,"src":"19517:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":600,"name":"address","nodeType":"ElementaryTypeName","src":"19517:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":603,"mutability":"mutable","name":"recipient","nameLocation":"19539:9:5","nodeType":"VariableDeclaration","scope":606,"src":"19531:17:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":602,"name":"address","nodeType":"ElementaryTypeName","src":"19531:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19516:33:5"},"returnParameters":{"id":605,"nodeType":"ParameterList","parameters":[],"src":"19558:0:5"},"scope":613,"src":"19484:75:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":607,"nodeType":"StructuredDocumentation","src":"19565:310:5","text":" @notice Withdraw collected pool creator fees for a given pool.\n @dev Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable\n value, this function is permissionless.\n @param pool The pool on which fees were collected"},"functionSelector":"52f125f0","id":612,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"19889:23:5","nodeType":"FunctionDefinition","parameters":{"id":610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":609,"mutability":"mutable","name":"pool","nameLocation":"19921:4:5","nodeType":"VariableDeclaration","scope":612,"src":"19913:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":608,"name":"address","nodeType":"ElementaryTypeName","src":"19913:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19912:14:5"},"returnParameters":{"id":611,"nodeType":"ParameterList","parameters":[],"src":"19935:0:5"},"scope":613,"src":"19880:56:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":614,"src":"266:19672:5","usedErrors":[394,397,402,409,412],"usedEvents":[287,292,299,306,313,320,330,340,352,364,373,382,391]}],"src":"46:19893:5"},"id":5},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","exportedSymbols":{"IAuthentication":[47],"IVault":[651],"IVaultAdmin":[941],"IVaultErrors":[1308],"IVaultEvents":[1547],"IVaultExtension":[1966],"IVaultMain":[2102]},"id":652,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":615,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:6"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"../solidity-utils/helpers/IAuthentication.sol","id":617,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":652,"sourceUnit":48,"src":"72:80:6","symbolAliases":[{"foreign":{"id":616,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"81:15:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","file":"./IVaultExtension.sol","id":619,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":652,"sourceUnit":1967,"src":"153:56:6","symbolAliases":[{"foreign":{"id":618,"name":"IVaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1966,"src":"162:15:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"./IVaultErrors.sol","id":621,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":652,"sourceUnit":1309,"src":"210:50:6","symbolAliases":[{"foreign":{"id":620,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1308,"src":"219:12:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","file":"./IVaultEvents.sol","id":623,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":652,"sourceUnit":1548,"src":"261:50:6","symbolAliases":[{"foreign":{"id":622,"name":"IVaultEvents","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1547,"src":"270:12:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","file":"./IVaultAdmin.sol","id":625,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":652,"sourceUnit":942,"src":"312:48:6","symbolAliases":[{"foreign":{"id":624,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":941,"src":"321:11:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","file":"./IVaultMain.sol","id":627,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":652,"sourceUnit":2103,"src":"361:46:6","symbolAliases":[{"foreign":{"id":626,"name":"IVaultMain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2102,"src":"370:10:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":629,"name":"IVaultMain","nameLocations":["539:10:6"],"nodeType":"IdentifierPath","referencedDeclaration":2102,"src":"539:10:6"},"id":630,"nodeType":"InheritanceSpecifier","src":"539:10:6"},{"baseName":{"id":631,"name":"IVaultExtension","nameLocations":["551:15:6"],"nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"551:15:6"},"id":632,"nodeType":"InheritanceSpecifier","src":"551:15:6"},{"baseName":{"id":633,"name":"IVaultAdmin","nameLocations":["568:11:6"],"nodeType":"IdentifierPath","referencedDeclaration":941,"src":"568:11:6"},"id":634,"nodeType":"InheritanceSpecifier","src":"568:11:6"},{"baseName":{"id":635,"name":"IVaultErrors","nameLocations":["581:12:6"],"nodeType":"IdentifierPath","referencedDeclaration":1308,"src":"581:12:6"},"id":636,"nodeType":"InheritanceSpecifier","src":"581:12:6"},{"baseName":{"id":637,"name":"IVaultEvents","nameLocations":["595:12:6"],"nodeType":"IdentifierPath","referencedDeclaration":1547,"src":"595:12:6"},"id":638,"nodeType":"InheritanceSpecifier","src":"595:12:6"},{"baseName":{"id":639,"name":"IAuthentication","nameLocations":["609:15:6"],"nodeType":"IdentifierPath","referencedDeclaration":47,"src":"609:15:6"},"id":640,"nodeType":"InheritanceSpecifier","src":"609:15:6"}],"canonicalName":"IVault","contractDependencies":[],"contractKind":"interface","documentation":{"id":628,"nodeType":"StructuredDocumentation","src":"409:110:6","text":"@notice Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries."},"fullyImplemented":false,"id":651,"linearizedBaseContracts":[651,47,1547,1308,941,1966,2102],"name":"IVault","nameLocation":"529:6:6","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[669,1570],"documentation":{"id":641,"nodeType":"StructuredDocumentation","src":"631:41:6","text":"@return vault The main Vault address."},"functionSelector":"fbfa77cf","id":650,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"686:5:6","nodeType":"FunctionDefinition","overrides":{"id":645,"nodeType":"OverrideSpecifier","overrides":[{"id":643,"name":"IVaultAdmin","nameLocations":["717:11:6"],"nodeType":"IdentifierPath","referencedDeclaration":941,"src":"717:11:6"},{"id":644,"name":"IVaultExtension","nameLocations":["730:15:6"],"nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"730:15:6"}],"src":"708:38:6"},"parameters":{"id":642,"nodeType":"ParameterList","parameters":[],"src":"691:2:6"},"returnParameters":{"id":649,"nodeType":"ParameterList","parameters":[{"constant":false,"id":648,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":650,"src":"756:6:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":647,"nodeType":"UserDefinedTypeName","pathNode":{"id":646,"name":"IVault","nameLocations":["756:6:6"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"756:6:6"},"referencedDeclaration":651,"src":"756:6:6","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"}],"src":"755:8:6"},"scope":651,"src":"677:87:6","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":652,"src":"519:247:6","usedErrors":[38,953,958,963,968,977,983,986,989,992,995,998,1001,1010,1013,1016,1019,1022,1025,1028,1031,1034,1037,1040,1043,1046,1049,1052,1058,1065,1072,1075,1078,1088,1098,1105,1108,1111,1114,1124,1134,1141,1144,1147,1150,1153,1156,1159,1162,1165,1170,1175,1180,1183,1186,1189,1192,1195,1200,1205,1210,1216,1222,1225,1233,1239,1245,1248,1251,1254,1259,1269,1279,1286,1289,1292,1295,1298,1301,1304,1307],"usedEvents":[1346,1351,1370,1382,1394,1412,1430,1435,1438,1441,1448,1455,1462,1469,1476,1482,1488,1500,1510,1520,1532,1537,1546]}],"src":"46:721:6"},"id":6},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","exportedSymbols":{"IAuthorizer":[73],"IERC4626":[6408],"IProtocolFeeController":[613],"IVault":[651],"IVaultAdmin":[941]},"id":942,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":653,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:7"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":655,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":942,"sourceUnit":6409,"src":"72:75:7","symbolAliases":[{"foreign":{"id":654,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6408,"src":"81:8:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":657,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":942,"sourceUnit":614,"src":"149:70:7","symbolAliases":[{"foreign":{"id":656,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":613,"src":"158:22:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":659,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":942,"sourceUnit":74,"src":"220:48:7","symbolAliases":[{"foreign":{"id":658,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73,"src":"229:11:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":661,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":942,"sourceUnit":652,"src":"269:38:7","symbolAliases":[{"foreign":{"id":660,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":651,"src":"278:6:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultAdmin","contractDependencies":[],"contractKind":"interface","documentation":{"id":662,"nodeType":"StructuredDocumentation","src":"309:276:7","text":" @notice Interface for functions defined on the `VaultAdmin` contract.\n @dev `VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations,\n as two delegate calls add gas to each call. Most of the permissioned calls are here."},"fullyImplemented":false,"id":941,"linearizedBaseContracts":[941],"name":"IVaultAdmin","nameLocation":"596:11:7","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":663,"nodeType":"StructuredDocumentation","src":"841:206:7","text":" @notice Returns the main Vault address.\n @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n @return vault The address of the main Vault"},"functionSelector":"fbfa77cf","id":669,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"1061:5:7","nodeType":"FunctionDefinition","parameters":{"id":664,"nodeType":"ParameterList","parameters":[],"src":"1066:2:7"},"returnParameters":{"id":668,"nodeType":"ParameterList","parameters":[{"constant":false,"id":667,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":669,"src":"1092:6:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":666,"nodeType":"UserDefinedTypeName","pathNode":{"id":665,"name":"IVault","nameLocations":["1092:6:7"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"1092:6:7"},"referencedDeclaration":651,"src":"1092:6:7","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1091:8:7"},"scope":941,"src":"1052:48:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":670,"nodeType":"StructuredDocumentation","src":"1106:326:7","text":" @notice Returns the Vault's pause window end time.\n @dev This value is immutable, and represents the timestamp after which the Vault can no longer be paused\n by governance. Balancer timestamps are 32 bits.\n @return pauseWindowEndTime The timestamp when the Vault's pause window ends"},"functionSelector":"8a8d123a","id":675,"implemented":false,"kind":"function","modifiers":[],"name":"getPauseWindowEndTime","nameLocation":"1446:21:7","nodeType":"FunctionDefinition","parameters":{"id":671,"nodeType":"ParameterList","parameters":[],"src":"1467:2:7"},"returnParameters":{"id":674,"nodeType":"ParameterList","parameters":[{"constant":false,"id":673,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"1500:18:7","nodeType":"VariableDeclaration","scope":675,"src":"1493:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":672,"name":"uint32","nodeType":"ElementaryTypeName","src":"1493:6:7","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1492:27:7"},"scope":941,"src":"1437:83:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":676,"nodeType":"StructuredDocumentation","src":"1526:414:7","text":" @notice Returns the Vault's buffer period duration.\n @dev This value is immutable. It represents the period during which, if paused, the Vault will remain paused.\n This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer\n timestamps are 32 bits.\n @return bufferPeriodDuration The length of the buffer period in seconds"},"functionSelector":"20c1fb7a","id":681,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferPeriodDuration","nameLocation":"1954:23:7","nodeType":"FunctionDefinition","parameters":{"id":677,"nodeType":"ParameterList","parameters":[],"src":"1977:2:7"},"returnParameters":{"id":680,"nodeType":"ParameterList","parameters":[{"constant":false,"id":679,"mutability":"mutable","name":"bufferPeriodDuration","nameLocation":"2010:20:7","nodeType":"VariableDeclaration","scope":681,"src":"2003:27:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":678,"name":"uint32","nodeType":"ElementaryTypeName","src":"2003:6:7","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2002:29:7"},"scope":941,"src":"1945:87:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":682,"nodeType":"StructuredDocumentation","src":"2038:321:7","text":" @notice Returns the Vault's buffer period end time.\n @dev This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer\n timestamps are 32 bits.\n @return bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused"},"functionSelector":"cd51c12f","id":687,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferPeriodEndTime","nameLocation":"2373:22:7","nodeType":"FunctionDefinition","parameters":{"id":683,"nodeType":"ParameterList","parameters":[],"src":"2395:2:7"},"returnParameters":{"id":686,"nodeType":"ParameterList","parameters":[{"constant":false,"id":685,"mutability":"mutable","name":"bufferPeriodEndTime","nameLocation":"2428:19:7","nodeType":"VariableDeclaration","scope":687,"src":"2421:26:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":684,"name":"uint32","nodeType":"ElementaryTypeName","src":"2421:6:7","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2420:28:7"},"scope":941,"src":"2364:85:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":688,"nodeType":"StructuredDocumentation","src":"2455:193:7","text":" @notice Get the minimum number of tokens in a pool.\n @dev We expect the vast majority of pools to be 2-token.\n @return minTokens The minimum token count of a pool"},"functionSelector":"a8175b27","id":693,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumPoolTokens","nameLocation":"2662:20:7","nodeType":"FunctionDefinition","parameters":{"id":689,"nodeType":"ParameterList","parameters":[],"src":"2682:2:7"},"returnParameters":{"id":692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":691,"mutability":"mutable","name":"minTokens","nameLocation":"2716:9:7","nodeType":"VariableDeclaration","scope":693,"src":"2708:17:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":690,"name":"uint256","nodeType":"ElementaryTypeName","src":"2708:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2707:19:7"},"scope":941,"src":"2653:74:7","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":694,"nodeType":"StructuredDocumentation","src":"2733:129:7","text":" @notice Get the maximum number of tokens in a pool.\n @return maxTokens The maximum token count of a pool"},"functionSelector":"2e42f4d5","id":699,"implemented":false,"kind":"function","modifiers":[],"name":"getMaximumPoolTokens","nameLocation":"2876:20:7","nodeType":"FunctionDefinition","parameters":{"id":695,"nodeType":"ParameterList","parameters":[],"src":"2896:2:7"},"returnParameters":{"id":698,"nodeType":"ParameterList","parameters":[{"constant":false,"id":697,"mutability":"mutable","name":"maxTokens","nameLocation":"2930:9:7","nodeType":"VariableDeclaration","scope":699,"src":"2922:17:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":696,"name":"uint256","nodeType":"ElementaryTypeName","src":"2922:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2921:19:7"},"scope":941,"src":"2867:74:7","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":700,"nodeType":"StructuredDocumentation","src":"2947:439:7","text":" @notice Get the minimum total supply of pool tokens (BPT) for an initialized pool.\n @dev This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT\n is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\n @return poolMinimumTotalSupply The minimum total supply a pool can have after initialization"},"functionSelector":"d0965a6b","id":705,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolMinimumTotalSupply","nameLocation":"3400:25:7","nodeType":"FunctionDefinition","parameters":{"id":701,"nodeType":"ParameterList","parameters":[],"src":"3425:2:7"},"returnParameters":{"id":704,"nodeType":"ParameterList","parameters":[{"constant":false,"id":703,"mutability":"mutable","name":"poolMinimumTotalSupply","nameLocation":"3459:22:7","nodeType":"VariableDeclaration","scope":705,"src":"3451:30:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":702,"name":"uint256","nodeType":"ElementaryTypeName","src":"3451:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3450:32:7"},"scope":941,"src":"3391:92:7","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":706,"nodeType":"StructuredDocumentation","src":"3489:502:7","text":" @notice Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\n @dev This prevents buffers from being completely drained. When the buffer is initialized, this minimum number\n of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal\n to the Vault, as buffers are not tokenized.\n @return bufferMinimumTotalSupply The minimum total supply a buffer can have after initialization"},"functionSelector":"26a8a991","id":711,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferMinimumTotalSupply","nameLocation":"4005:27:7","nodeType":"FunctionDefinition","parameters":{"id":707,"nodeType":"ParameterList","parameters":[],"src":"4032:2:7"},"returnParameters":{"id":710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":709,"mutability":"mutable","name":"bufferMinimumTotalSupply","nameLocation":"4066:24:7","nodeType":"VariableDeclaration","scope":711,"src":"4058:32:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":708,"name":"uint256","nodeType":"ElementaryTypeName","src":"4058:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4057:34:7"},"scope":941,"src":"3996:96:7","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":712,"nodeType":"StructuredDocumentation","src":"4098:291:7","text":" @notice Get the minimum trade amount in a pool operation.\n @dev This limit is applied to the 18-decimal \"upscaled\" amount in any operation (swap, add/remove liquidity).\n @return minimumTradeAmount The minimum trade amount as an 18-decimal floating point number"},"functionSelector":"e2cb0ba0","id":717,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumTradeAmount","nameLocation":"4403:21:7","nodeType":"FunctionDefinition","parameters":{"id":713,"nodeType":"ParameterList","parameters":[],"src":"4424:2:7"},"returnParameters":{"id":716,"nodeType":"ParameterList","parameters":[{"constant":false,"id":715,"mutability":"mutable","name":"minimumTradeAmount","nameLocation":"4458:18:7","nodeType":"VariableDeclaration","scope":717,"src":"4450:26:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":714,"name":"uint256","nodeType":"ElementaryTypeName","src":"4450:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4449:28:7"},"scope":941,"src":"4394:84:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":718,"nodeType":"StructuredDocumentation","src":"4484:271:7","text":" @notice Get the minimum wrap amount in a buffer operation.\n @dev This limit is applied to the wrap operation amount, in native underlying token decimals.\n @return minimumWrapAmount The minimum wrap amount in native underlying token decimals"},"functionSelector":"53956aa2","id":723,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumWrapAmount","nameLocation":"4769:20:7","nodeType":"FunctionDefinition","parameters":{"id":719,"nodeType":"ParameterList","parameters":[],"src":"4789:2:7"},"returnParameters":{"id":722,"nodeType":"ParameterList","parameters":[{"constant":false,"id":721,"mutability":"mutable","name":"minimumWrapAmount","nameLocation":"4823:17:7","nodeType":"VariableDeclaration","scope":723,"src":"4815:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":720,"name":"uint256","nodeType":"ElementaryTypeName","src":"4815:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4814:27:7"},"scope":941,"src":"4760:82:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":724,"nodeType":"StructuredDocumentation","src":"5069:529:7","text":" @notice Indicates whether the Vault is paused.\n @dev If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that\n ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not\n also pause buffers (though we anticipate they would likely be paused and unpaused together). Call\n `areBuffersPaused` to check the pause state of the buffers.\n @return vaultPaused True if the Vault is paused"},"functionSelector":"098401f5","id":729,"implemented":false,"kind":"function","modifiers":[],"name":"isVaultPaused","nameLocation":"5612:13:7","nodeType":"FunctionDefinition","parameters":{"id":725,"nodeType":"ParameterList","parameters":[],"src":"5625:2:7"},"returnParameters":{"id":728,"nodeType":"ParameterList","parameters":[{"constant":false,"id":727,"mutability":"mutable","name":"vaultPaused","nameLocation":"5656:11:7","nodeType":"VariableDeclaration","scope":729,"src":"5651:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":726,"name":"bool","nodeType":"ElementaryTypeName","src":"5651:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5650:18:7"},"scope":941,"src":"5603:66:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":730,"nodeType":"StructuredDocumentation","src":"5675:400:7","text":" @notice Returns the paused status, and end times of the Vault's pause window and buffer period.\n @dev Balancer timestamps are 32 bits.\n @return vaultPaused True if the Vault is paused\n @return vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window\n @return vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period"},"functionSelector":"85c8c015","id":739,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultPausedState","nameLocation":"6089:19:7","nodeType":"FunctionDefinition","parameters":{"id":731,"nodeType":"ParameterList","parameters":[],"src":"6108:2:7"},"returnParameters":{"id":738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":733,"mutability":"mutable","name":"vaultPaused","nameLocation":"6163:11:7","nodeType":"VariableDeclaration","scope":739,"src":"6158:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":732,"name":"bool","nodeType":"ElementaryTypeName","src":"6158:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":735,"mutability":"mutable","name":"vaultPauseWindowEndTime","nameLocation":"6183:23:7","nodeType":"VariableDeclaration","scope":739,"src":"6176:30:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":734,"name":"uint32","nodeType":"ElementaryTypeName","src":"6176:6:7","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":737,"mutability":"mutable","name":"vaultBufferPeriodEndTime","nameLocation":"6215:24:7","nodeType":"VariableDeclaration","scope":739,"src":"6208:31:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":736,"name":"uint32","nodeType":"ElementaryTypeName","src":"6208:6:7","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"6157:83:7"},"scope":941,"src":"6080:161:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":740,"nodeType":"StructuredDocumentation","src":"6247:517:7","text":" @notice Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\n @dev This is a permissioned function that will only work during the Pause Window set during deployment.\n Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing\n the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers\n are also paused (with `pauseVaultBuffers`)."},"functionSelector":"9e0879c2","id":743,"implemented":false,"kind":"function","modifiers":[],"name":"pauseVault","nameLocation":"6778:10:7","nodeType":"FunctionDefinition","parameters":{"id":741,"nodeType":"ParameterList","parameters":[],"src":"6788:2:7"},"returnParameters":{"id":742,"nodeType":"ParameterList","parameters":[],"src":"6799:0:7"},"scope":941,"src":"6769:31:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":744,"nodeType":"StructuredDocumentation","src":"6806:569:7","text":" @notice Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\n @dev This is a permissioned function that will only work on a paused Vault within the Buffer Period set during\n deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above,\n ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse\n `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused."},"functionSelector":"0b7562be","id":747,"implemented":false,"kind":"function","modifiers":[],"name":"unpauseVault","nameLocation":"7389:12:7","nodeType":"FunctionDefinition","parameters":{"id":745,"nodeType":"ParameterList","parameters":[],"src":"7401:2:7"},"returnParameters":{"id":746,"nodeType":"ParameterList","parameters":[],"src":"7412:0:7"},"scope":941,"src":"7380:33:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":748,"nodeType":"StructuredDocumentation","src":"7639:276:7","text":" @notice Pause the Pool: an emergency action which disables all pool functions.\n @dev This is a permissioned function that will only work during the Pause Window set during pool factory\n deployment.\n @param pool The pool being paused"},"functionSelector":"55aca1ec","id":753,"implemented":false,"kind":"function","modifiers":[],"name":"pausePool","nameLocation":"7929:9:7","nodeType":"FunctionDefinition","parameters":{"id":751,"nodeType":"ParameterList","parameters":[{"constant":false,"id":750,"mutability":"mutable","name":"pool","nameLocation":"7947:4:7","nodeType":"VariableDeclaration","scope":753,"src":"7939:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":749,"name":"address","nodeType":"ElementaryTypeName","src":"7939:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7938:14:7"},"returnParameters":{"id":752,"nodeType":"ParameterList","parameters":[],"src":"7961:0:7"},"scope":941,"src":"7920:42:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":754,"nodeType":"StructuredDocumentation","src":"7968:366:7","text":" @notice Reverse a `pause` operation, and restore the Pool to normal functionality.\n @dev This is a permissioned function that will only work on a paused Pool within the Buffer Period set during\n deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\n @param pool The pool being unpaused"},"functionSelector":"f21c38cd","id":759,"implemented":false,"kind":"function","modifiers":[],"name":"unpausePool","nameLocation":"8348:11:7","nodeType":"FunctionDefinition","parameters":{"id":757,"nodeType":"ParameterList","parameters":[{"constant":false,"id":756,"mutability":"mutable","name":"pool","nameLocation":"8368:4:7","nodeType":"VariableDeclaration","scope":759,"src":"8360:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":755,"name":"address","nodeType":"ElementaryTypeName","src":"8360:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8359:14:7"},"returnParameters":{"id":758,"nodeType":"ParameterList","parameters":[],"src":"8382:0:7"},"scope":941,"src":"8339:44:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":760,"nodeType":"StructuredDocumentation","src":"8606:520:7","text":" @notice Assigns a new static swap fee percentage to the specified pool.\n @dev This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within\n the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`.\n Emits the SwapFeePercentageChanged event.\n @param pool The address of the pool for which the static swap fee will be changed\n @param swapFeePercentage The new swap fee percentage to apply to the pool"},"functionSelector":"d15126ba","id":767,"implemented":false,"kind":"function","modifiers":[],"name":"setStaticSwapFeePercentage","nameLocation":"9140:26:7","nodeType":"FunctionDefinition","parameters":{"id":765,"nodeType":"ParameterList","parameters":[{"constant":false,"id":762,"mutability":"mutable","name":"pool","nameLocation":"9175:4:7","nodeType":"VariableDeclaration","scope":767,"src":"9167:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":761,"name":"address","nodeType":"ElementaryTypeName","src":"9167:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":764,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"9189:17:7","nodeType":"VariableDeclaration","scope":767,"src":"9181:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":763,"name":"uint256","nodeType":"ElementaryTypeName","src":"9181:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9166:41:7"},"returnParameters":{"id":766,"nodeType":"ParameterList","parameters":[],"src":"9216:0:7"},"scope":941,"src":"9131:86:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":768,"nodeType":"StructuredDocumentation","src":"9223:463:7","text":" @notice Collects accumulated aggregate swap and yield fees for the specified pool.\n @dev Fees are sent to the ProtocolFeeController address.\n @param pool The pool on which all aggregate fees should be collected\n @return swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n @return yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order"},"functionSelector":"8f4ab9ca","id":779,"implemented":false,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"9700:20:7","nodeType":"FunctionDefinition","parameters":{"id":771,"nodeType":"ParameterList","parameters":[{"constant":false,"id":770,"mutability":"mutable","name":"pool","nameLocation":"9738:4:7","nodeType":"VariableDeclaration","scope":779,"src":"9730:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":769,"name":"address","nodeType":"ElementaryTypeName","src":"9730:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9720:28:7"},"returnParameters":{"id":778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":774,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"9784:14:7","nodeType":"VariableDeclaration","scope":779,"src":"9767:31:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":772,"name":"uint256","nodeType":"ElementaryTypeName","src":"9767:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":773,"nodeType":"ArrayTypeName","src":"9767:9:7","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":777,"mutability":"mutable","name":"yieldFeeAmounts","nameLocation":"9817:15:7","nodeType":"VariableDeclaration","scope":779,"src":"9800:32:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":775,"name":"uint256","nodeType":"ElementaryTypeName","src":"9800:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":776,"nodeType":"ArrayTypeName","src":"9800:9:7","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9766:67:7"},"scope":941,"src":"9691:143:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":780,"nodeType":"StructuredDocumentation","src":"9840:755:7","text":" @notice Update an aggregate swap fee percentage.\n @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n Emits an `AggregateSwapFeePercentageChanged` event.\n @param pool The pool whose swap fee percentage will be updated\n @param newAggregateSwapFeePercentage The new aggregate swap fee percentage"},"functionSelector":"5e0b06f4","id":787,"implemented":false,"kind":"function","modifiers":[],"name":"updateAggregateSwapFeePercentage","nameLocation":"10609:32:7","nodeType":"FunctionDefinition","parameters":{"id":785,"nodeType":"ParameterList","parameters":[{"constant":false,"id":782,"mutability":"mutable","name":"pool","nameLocation":"10650:4:7","nodeType":"VariableDeclaration","scope":787,"src":"10642:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":781,"name":"address","nodeType":"ElementaryTypeName","src":"10642:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":784,"mutability":"mutable","name":"newAggregateSwapFeePercentage","nameLocation":"10664:29:7","nodeType":"VariableDeclaration","scope":787,"src":"10656:37:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":783,"name":"uint256","nodeType":"ElementaryTypeName","src":"10656:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10641:53:7"},"returnParameters":{"id":786,"nodeType":"ParameterList","parameters":[],"src":"10703:0:7"},"scope":941,"src":"10600:104:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":788,"nodeType":"StructuredDocumentation","src":"10710:760:7","text":" @notice Update an aggregate yield fee percentage.\n @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n Emits an `AggregateYieldFeePercentageChanged` event.\n @param pool The pool whose yield fee percentage will be updated\n @param newAggregateYieldFeePercentage The new aggregate yield fee percentage"},"functionSelector":"e253670a","id":795,"implemented":false,"kind":"function","modifiers":[],"name":"updateAggregateYieldFeePercentage","nameLocation":"11484:33:7","nodeType":"FunctionDefinition","parameters":{"id":793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":790,"mutability":"mutable","name":"pool","nameLocation":"11526:4:7","nodeType":"VariableDeclaration","scope":795,"src":"11518:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":789,"name":"address","nodeType":"ElementaryTypeName","src":"11518:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":792,"mutability":"mutable","name":"newAggregateYieldFeePercentage","nameLocation":"11540:30:7","nodeType":"VariableDeclaration","scope":795,"src":"11532:38:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":791,"name":"uint256","nodeType":"ElementaryTypeName","src":"11532:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11517:54:7"},"returnParameters":{"id":794,"nodeType":"ParameterList","parameters":[],"src":"11580:0:7"},"scope":941,"src":"11475:106:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":796,"nodeType":"StructuredDocumentation","src":"11587:249:7","text":" @notice Sets a new Protocol Fee Controller for the Vault.\n @dev This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\n @param newProtocolFeeController The address of the new Protocol Fee Controller"},"functionSelector":"2d771389","id":802,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolFeeController","nameLocation":"11850:24:7","nodeType":"FunctionDefinition","parameters":{"id":800,"nodeType":"ParameterList","parameters":[{"constant":false,"id":799,"mutability":"mutable","name":"newProtocolFeeController","nameLocation":"11898:24:7","nodeType":"VariableDeclaration","scope":802,"src":"11875:47:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"},"typeName":{"id":798,"nodeType":"UserDefinedTypeName","pathNode":{"id":797,"name":"IProtocolFeeController","nameLocations":["11875:22:7"],"nodeType":"IdentifierPath","referencedDeclaration":613,"src":"11875:22:7"},"referencedDeclaration":613,"src":"11875:22:7","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"11874:49:7"},"returnParameters":{"id":801,"nodeType":"ParameterList","parameters":[],"src":"11932:0:7"},"scope":941,"src":"11841:92:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":803,"nodeType":"StructuredDocumentation","src":"12160:557:7","text":" @notice Enable recovery mode for a pool.\n @dev This is a permissioned function. It enables a safe proportional withdrawal, with no external calls.\n Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so\n must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live\n balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\n @param pool The address of the pool"},"functionSelector":"dc3f574e","id":808,"implemented":false,"kind":"function","modifiers":[],"name":"enableRecoveryMode","nameLocation":"12731:18:7","nodeType":"FunctionDefinition","parameters":{"id":806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":805,"mutability":"mutable","name":"pool","nameLocation":"12758:4:7","nodeType":"VariableDeclaration","scope":808,"src":"12750:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":804,"name":"address","nodeType":"ElementaryTypeName","src":"12750:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12749:14:7"},"returnParameters":{"id":807,"nodeType":"ParameterList","parameters":[],"src":"12772:0:7"},"scope":941,"src":"12722:51:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":809,"nodeType":"StructuredDocumentation","src":"12779:409:7","text":" @notice Disable recovery mode for a pool.\n @dev This is a permissioned function. It re-syncs live balances (which could not be updated during\n Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could\n potentially fail if there is an issue with any associated Rate Providers.\n @param pool The address of the pool"},"functionSelector":"bffb78b2","id":814,"implemented":false,"kind":"function","modifiers":[],"name":"disableRecoveryMode","nameLocation":"13202:19:7","nodeType":"FunctionDefinition","parameters":{"id":812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":811,"mutability":"mutable","name":"pool","nameLocation":"13230:4:7","nodeType":"VariableDeclaration","scope":814,"src":"13222:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":810,"name":"address","nodeType":"ElementaryTypeName","src":"13222:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13221:14:7"},"returnParameters":{"id":813,"nodeType":"ParameterList","parameters":[],"src":"13244:0:7"},"scope":941,"src":"13193:52:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":815,"nodeType":"StructuredDocumentation","src":"13476:653:7","text":" @notice Disables query functionality on the Vault. Can only be called by governance.\n @dev The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from\n settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable\n queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).\n This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether\n disabling queries is completely necessary; queries can still be re-enabled after this call."},"functionSelector":"de1a36a6","id":818,"implemented":false,"kind":"function","modifiers":[],"name":"disableQuery","nameLocation":"14143:12:7","nodeType":"FunctionDefinition","parameters":{"id":816,"nodeType":"ParameterList","parameters":[],"src":"14155:2:7"},"returnParameters":{"id":817,"nodeType":"ParameterList","parameters":[],"src":"14166:0:7"},"scope":941,"src":"14134:33:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":819,"nodeType":"StructuredDocumentation","src":"14173:223:7","text":" @notice Disables query functionality permanently on the Vault. Can only be called by governance.\n @dev Shall only be used when there is no doubt that queries pose a fundamental threat to the system."},"functionSelector":"821440f2","id":822,"implemented":false,"kind":"function","modifiers":[],"name":"disableQueryPermanently","nameLocation":"14410:23:7","nodeType":"FunctionDefinition","parameters":{"id":820,"nodeType":"ParameterList","parameters":[],"src":"14433:2:7"},"returnParameters":{"id":821,"nodeType":"ParameterList","parameters":[],"src":"14444:0:7"},"scope":941,"src":"14401:44:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":823,"nodeType":"StructuredDocumentation","src":"14451:166:7","text":" @notice Enables query functionality on the Vault. Can only be called by governance.\n @dev Only works if queries are not permanently disabled."},"functionSelector":"e0d55605","id":826,"implemented":false,"kind":"function","modifiers":[],"name":"enableQuery","nameLocation":"14631:11:7","nodeType":"FunctionDefinition","parameters":{"id":824,"nodeType":"ParameterList","parameters":[],"src":"14642:2:7"},"returnParameters":{"id":825,"nodeType":"ParameterList","parameters":[],"src":"14653:0:7"},"scope":941,"src":"14622:32:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":827,"nodeType":"StructuredDocumentation","src":"14881:590:7","text":" @notice Indicates whether the Vault buffers are paused.\n @dev When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true)\n will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and\n independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they\n would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\n @return buffersPaused True if the Vault buffers are paused"},"functionSelector":"55cba7fe","id":832,"implemented":false,"kind":"function","modifiers":[],"name":"areBuffersPaused","nameLocation":"15485:16:7","nodeType":"FunctionDefinition","parameters":{"id":828,"nodeType":"ParameterList","parameters":[],"src":"15501:2:7"},"returnParameters":{"id":831,"nodeType":"ParameterList","parameters":[{"constant":false,"id":830,"mutability":"mutable","name":"buffersPaused","nameLocation":"15532:13:7","nodeType":"VariableDeclaration","scope":832,"src":"15527:18:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":829,"name":"bool","nodeType":"ElementaryTypeName","src":"15527:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15526:20:7"},"scope":941,"src":"15476:71:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":833,"nodeType":"StructuredDocumentation","src":"15553:619:7","text":" @notice Pauses native vault buffers globally.\n @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not\n possible to pause vault buffers individually.\n This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate\n and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting\n buffers, and vice versa."},"functionSelector":"e085c5a8","id":836,"implemented":false,"kind":"function","modifiers":[],"name":"pauseVaultBuffers","nameLocation":"16186:17:7","nodeType":"FunctionDefinition","parameters":{"id":834,"nodeType":"ParameterList","parameters":[],"src":"16203:2:7"},"returnParameters":{"id":835,"nodeType":"ParameterList","parameters":[],"src":"16214:0:7"},"scope":941,"src":"16177:38:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":837,"nodeType":"StructuredDocumentation","src":"16221:545:7","text":" @notice Unpauses native vault buffers globally.\n @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above,\n ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`.\n If the Vault was also paused, it will remain in that state until explicitly unpaused.\n This is a permissioned call."},"functionSelector":"b9212b49","id":840,"implemented":false,"kind":"function","modifiers":[],"name":"unpauseVaultBuffers","nameLocation":"16780:19:7","nodeType":"FunctionDefinition","parameters":{"id":838,"nodeType":"ParameterList","parameters":[],"src":"16799:2:7"},"returnParameters":{"id":839,"nodeType":"ParameterList","parameters":[],"src":"16810:0:7"},"scope":941,"src":"16771:40:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":841,"nodeType":"StructuredDocumentation","src":"16817:860:7","text":" @notice Initializes buffer for the given wrapped token.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param amountUnderlyingRaw Amount of underlying tokens that will be deposited into the buffer\n @param amountWrappedRaw Amount of wrapped tokens that will be deposited into the buffer\n @param minIssuedShares Minimum amount of shares to receive from the buffer, expressed in underlying token\n native decimals\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n liquidity from the buffer\n @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals."},"functionSelector":"653eb3b0","id":857,"implemented":false,"kind":"function","modifiers":[],"name":"initializeBuffer","nameLocation":"17691:16:7","nodeType":"FunctionDefinition","parameters":{"id":853,"nodeType":"ParameterList","parameters":[{"constant":false,"id":844,"mutability":"mutable","name":"wrappedToken","nameLocation":"17726:12:7","nodeType":"VariableDeclaration","scope":857,"src":"17717:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":843,"nodeType":"UserDefinedTypeName","pathNode":{"id":842,"name":"IERC4626","nameLocations":["17717:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"17717:8:7"},"referencedDeclaration":6408,"src":"17717:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":846,"mutability":"mutable","name":"amountUnderlyingRaw","nameLocation":"17756:19:7","nodeType":"VariableDeclaration","scope":857,"src":"17748:27:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":845,"name":"uint256","nodeType":"ElementaryTypeName","src":"17748:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":848,"mutability":"mutable","name":"amountWrappedRaw","nameLocation":"17793:16:7","nodeType":"VariableDeclaration","scope":857,"src":"17785:24:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":847,"name":"uint256","nodeType":"ElementaryTypeName","src":"17785:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":850,"mutability":"mutable","name":"minIssuedShares","nameLocation":"17827:15:7","nodeType":"VariableDeclaration","scope":857,"src":"17819:23:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":849,"name":"uint256","nodeType":"ElementaryTypeName","src":"17819:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":852,"mutability":"mutable","name":"sharesOwner","nameLocation":"17860:11:7","nodeType":"VariableDeclaration","scope":857,"src":"17852:19:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":851,"name":"address","nodeType":"ElementaryTypeName","src":"17852:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17707:170:7"},"returnParameters":{"id":856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":855,"mutability":"mutable","name":"issuedShares","nameLocation":"17904:12:7","nodeType":"VariableDeclaration","scope":857,"src":"17896:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":854,"name":"uint256","nodeType":"ElementaryTypeName","src":"17896:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17895:22:7"},"scope":941,"src":"17682:236:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":858,"nodeType":"StructuredDocumentation","src":"17924:1010:7","text":" @notice Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\n @dev The buffer needs to be initialized beforehand.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param maxAmountUnderlyingInRaw Maximum amount of underlying tokens to add to the buffer. It is expressed in\n underlying token native decimals\n @param maxAmountWrappedInRaw Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n token native decimals\n @param exactSharesToIssue The value in underlying tokens that `sharesOwner` wants to add to the buffer,\n in underlying token decimals\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n liquidity from the buffer\n @return amountUnderlyingRaw Amount of underlying tokens deposited into the buffer\n @return amountWrappedRaw Amount of wrapped tokens deposited into the buffer"},"functionSelector":"e2a92b1a","id":876,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityToBuffer","nameLocation":"18948:20:7","nodeType":"FunctionDefinition","parameters":{"id":870,"nodeType":"ParameterList","parameters":[{"constant":false,"id":861,"mutability":"mutable","name":"wrappedToken","nameLocation":"18987:12:7","nodeType":"VariableDeclaration","scope":876,"src":"18978:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":860,"nodeType":"UserDefinedTypeName","pathNode":{"id":859,"name":"IERC4626","nameLocations":["18978:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"18978:8:7"},"referencedDeclaration":6408,"src":"18978:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":863,"mutability":"mutable","name":"maxAmountUnderlyingInRaw","nameLocation":"19017:24:7","nodeType":"VariableDeclaration","scope":876,"src":"19009:32:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":862,"name":"uint256","nodeType":"ElementaryTypeName","src":"19009:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":865,"mutability":"mutable","name":"maxAmountWrappedInRaw","nameLocation":"19059:21:7","nodeType":"VariableDeclaration","scope":876,"src":"19051:29:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":864,"name":"uint256","nodeType":"ElementaryTypeName","src":"19051:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":867,"mutability":"mutable","name":"exactSharesToIssue","nameLocation":"19098:18:7","nodeType":"VariableDeclaration","scope":876,"src":"19090:26:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":866,"name":"uint256","nodeType":"ElementaryTypeName","src":"19090:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":869,"mutability":"mutable","name":"sharesOwner","nameLocation":"19134:11:7","nodeType":"VariableDeclaration","scope":876,"src":"19126:19:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":868,"name":"address","nodeType":"ElementaryTypeName","src":"19126:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18968:183:7"},"returnParameters":{"id":875,"nodeType":"ParameterList","parameters":[{"constant":false,"id":872,"mutability":"mutable","name":"amountUnderlyingRaw","nameLocation":"19178:19:7","nodeType":"VariableDeclaration","scope":876,"src":"19170:27:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":871,"name":"uint256","nodeType":"ElementaryTypeName","src":"19170:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":874,"mutability":"mutable","name":"amountWrappedRaw","nameLocation":"19207:16:7","nodeType":"VariableDeclaration","scope":876,"src":"19199:24:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":873,"name":"uint256","nodeType":"ElementaryTypeName","src":"19199:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19169:55:7"},"scope":941,"src":"18939:286:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":877,"nodeType":"StructuredDocumentation","src":"19231:1458:7","text":" @notice Removes liquidity from an internal ERC4626 buffer in the Vault.\n @dev Only proportional exits are supported, and the sender has to be the owner of the shares.\n This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint.\n Pre-conditions:\n - The buffer needs to be initialized.\n - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why\n this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer.\n - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param sharesToRemove Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's\n total shares. It is expressed in underlying token native decimals\n @param minAmountUnderlyingOutRaw Minimum amount of underlying tokens to receive from the buffer. It is expressed\n in underlying token native decimals\n @param minAmountWrappedOutRaw Minimum amount of wrapped tokens to receive from the buffer. It is expressed in\n wrapped token native decimals\n @return removedUnderlyingBalanceRaw Amount of underlying tokens returned to the user\n @return removedWrappedBalanceRaw Amount of wrapped tokens returned to the user"},"functionSelector":"ebc7955c","id":893,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityFromBuffer","nameLocation":"20703:25:7","nodeType":"FunctionDefinition","parameters":{"id":887,"nodeType":"ParameterList","parameters":[{"constant":false,"id":880,"mutability":"mutable","name":"wrappedToken","nameLocation":"20747:12:7","nodeType":"VariableDeclaration","scope":893,"src":"20738:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":879,"nodeType":"UserDefinedTypeName","pathNode":{"id":878,"name":"IERC4626","nameLocations":["20738:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"20738:8:7"},"referencedDeclaration":6408,"src":"20738:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":882,"mutability":"mutable","name":"sharesToRemove","nameLocation":"20777:14:7","nodeType":"VariableDeclaration","scope":893,"src":"20769:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":881,"name":"uint256","nodeType":"ElementaryTypeName","src":"20769:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":884,"mutability":"mutable","name":"minAmountUnderlyingOutRaw","nameLocation":"20809:25:7","nodeType":"VariableDeclaration","scope":893,"src":"20801:33:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":883,"name":"uint256","nodeType":"ElementaryTypeName","src":"20801:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":886,"mutability":"mutable","name":"minAmountWrappedOutRaw","nameLocation":"20852:22:7","nodeType":"VariableDeclaration","scope":893,"src":"20844:30:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":885,"name":"uint256","nodeType":"ElementaryTypeName","src":"20844:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20728:152:7"},"returnParameters":{"id":892,"nodeType":"ParameterList","parameters":[{"constant":false,"id":889,"mutability":"mutable","name":"removedUnderlyingBalanceRaw","nameLocation":"20907:27:7","nodeType":"VariableDeclaration","scope":893,"src":"20899:35:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":888,"name":"uint256","nodeType":"ElementaryTypeName","src":"20899:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":891,"mutability":"mutable","name":"removedWrappedBalanceRaw","nameLocation":"20944:24:7","nodeType":"VariableDeclaration","scope":893,"src":"20936:32:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":890,"name":"uint256","nodeType":"ElementaryTypeName","src":"20936:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20898:71:7"},"scope":941,"src":"20694:276:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":894,"nodeType":"StructuredDocumentation","src":"20976:382:7","text":" @notice Returns the asset registered for a given wrapped token.\n @dev The asset can never change after buffer initialization.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return underlyingToken Address of the underlying token registered for the wrapper; `address(0)` if the buffer\n has not been initialized."},"functionSelector":"0387587d","id":902,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferAsset","nameLocation":"21372:14:7","nodeType":"FunctionDefinition","parameters":{"id":898,"nodeType":"ParameterList","parameters":[{"constant":false,"id":897,"mutability":"mutable","name":"wrappedToken","nameLocation":"21396:12:7","nodeType":"VariableDeclaration","scope":902,"src":"21387:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":896,"nodeType":"UserDefinedTypeName","pathNode":{"id":895,"name":"IERC4626","nameLocations":["21387:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"21387:8:7"},"referencedDeclaration":6408,"src":"21387:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"21386:23:7"},"returnParameters":{"id":901,"nodeType":"ParameterList","parameters":[{"constant":false,"id":900,"mutability":"mutable","name":"underlyingToken","nameLocation":"21441:15:7","nodeType":"VariableDeclaration","scope":902,"src":"21433:23:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":899,"name":"address","nodeType":"ElementaryTypeName","src":"21433:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21432:25:7"},"scope":941,"src":"21363:95:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":903,"nodeType":"StructuredDocumentation","src":"21464:441:7","text":" @notice Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets\n in the buffer.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param liquidityOwner Address of the user that owns liquidity in the wrapped token's buffer\n @return ownerShares Amount of shares allocated to the liquidity owner, in native underlying token decimals"},"functionSelector":"9385e39a","id":913,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferOwnerShares","nameLocation":"21919:20:7","nodeType":"FunctionDefinition","parameters":{"id":909,"nodeType":"ParameterList","parameters":[{"constant":false,"id":906,"mutability":"mutable","name":"wrappedToken","nameLocation":"21958:12:7","nodeType":"VariableDeclaration","scope":913,"src":"21949:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":905,"nodeType":"UserDefinedTypeName","pathNode":{"id":904,"name":"IERC4626","nameLocations":["21949:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"21949:8:7"},"referencedDeclaration":6408,"src":"21949:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":908,"mutability":"mutable","name":"liquidityOwner","nameLocation":"21988:14:7","nodeType":"VariableDeclaration","scope":913,"src":"21980:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":907,"name":"address","nodeType":"ElementaryTypeName","src":"21980:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21939:69:7"},"returnParameters":{"id":912,"nodeType":"ParameterList","parameters":[{"constant":false,"id":911,"mutability":"mutable","name":"ownerShares","nameLocation":"22040:11:7","nodeType":"VariableDeclaration","scope":913,"src":"22032:19:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":910,"name":"uint256","nodeType":"ElementaryTypeName","src":"22032:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22031:21:7"},"scope":941,"src":"21910:143:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":914,"nodeType":"StructuredDocumentation","src":"22059:281:7","text":" @notice Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return bufferShares Amount of supply shares of the buffer, in native underlying token decimals"},"functionSelector":"f2784e07","id":922,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferTotalShares","nameLocation":"22354:20:7","nodeType":"FunctionDefinition","parameters":{"id":918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":917,"mutability":"mutable","name":"wrappedToken","nameLocation":"22384:12:7","nodeType":"VariableDeclaration","scope":922,"src":"22375:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":916,"nodeType":"UserDefinedTypeName","pathNode":{"id":915,"name":"IERC4626","nameLocations":["22375:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"22375:8:7"},"referencedDeclaration":6408,"src":"22375:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"22374:23:7"},"returnParameters":{"id":921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":920,"mutability":"mutable","name":"bufferShares","nameLocation":"22429:12:7","nodeType":"VariableDeclaration","scope":922,"src":"22421:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":919,"name":"uint256","nodeType":"ElementaryTypeName","src":"22421:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22420:22:7"},"scope":941,"src":"22345:98:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":923,"nodeType":"StructuredDocumentation","src":"22449:521:7","text":" @notice Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\n @dev All values are in native token decimals of the wrapped or underlying tokens.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return underlyingBalanceRaw Amount of underlying tokens deposited into the buffer, in native token decimals\n @return wrappedBalanceRaw Amount of wrapped tokens deposited into the buffer, in native token decimals"},"functionSelector":"4021fe0f","id":933,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferBalance","nameLocation":"22984:16:7","nodeType":"FunctionDefinition","parameters":{"id":927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":926,"mutability":"mutable","name":"wrappedToken","nameLocation":"23019:12:7","nodeType":"VariableDeclaration","scope":933,"src":"23010:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":925,"nodeType":"UserDefinedTypeName","pathNode":{"id":924,"name":"IERC4626","nameLocations":["23010:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"23010:8:7"},"referencedDeclaration":6408,"src":"23010:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"23000:37:7"},"returnParameters":{"id":932,"nodeType":"ParameterList","parameters":[{"constant":false,"id":929,"mutability":"mutable","name":"underlyingBalanceRaw","nameLocation":"23069:20:7","nodeType":"VariableDeclaration","scope":933,"src":"23061:28:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":928,"name":"uint256","nodeType":"ElementaryTypeName","src":"23061:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":931,"mutability":"mutable","name":"wrappedBalanceRaw","nameLocation":"23099:17:7","nodeType":"VariableDeclaration","scope":933,"src":"23091:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":930,"name":"uint256","nodeType":"ElementaryTypeName","src":"23091:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23060:57:7"},"scope":941,"src":"22975:143:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":934,"nodeType":"StructuredDocumentation","src":"23342:202:7","text":" @notice Sets a new Authorizer for the Vault.\n @dev This is a permissioned call. Emits an `AuthorizerChanged` event.\n @param newAuthorizer The address of the new authorizer"},"functionSelector":"058a628f","id":940,"implemented":false,"kind":"function","modifiers":[],"name":"setAuthorizer","nameLocation":"23558:13:7","nodeType":"FunctionDefinition","parameters":{"id":938,"nodeType":"ParameterList","parameters":[{"constant":false,"id":937,"mutability":"mutable","name":"newAuthorizer","nameLocation":"23584:13:7","nodeType":"VariableDeclaration","scope":940,"src":"23572:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"},"typeName":{"id":936,"nodeType":"UserDefinedTypeName","pathNode":{"id":935,"name":"IAuthorizer","nameLocations":["23572:11:7"],"nodeType":"IdentifierPath","referencedDeclaration":73,"src":"23572:11:7"},"referencedDeclaration":73,"src":"23572:11:7","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"23571:27:7"},"returnParameters":{"id":939,"nodeType":"ParameterList","parameters":[],"src":"23607:0:7"},"scope":941,"src":"23549:59:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":942,"src":"586:23024:7","usedErrors":[],"usedEvents":[]}],"src":"46:23565:7"},"id":7},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","exportedSymbols":{"IERC20":[6486],"IERC4626":[6408],"IVaultErrors":[1308]},"id":1309,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":943,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:8"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":945,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1309,"sourceUnit":6409,"src":"72:75:8","symbolAliases":[{"foreign":{"id":944,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6408,"src":"81:8:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":947,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1309,"sourceUnit":6487,"src":"148:72:8","symbolAliases":[{"foreign":{"id":946,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6486,"src":"157:6:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultErrors","contractDependencies":[],"contractKind":"interface","documentation":{"id":948,"nodeType":"StructuredDocumentation","src":"222:94:8","text":"@notice Errors are declared inside an interface (namespace) to improve DX with Typechain."},"fullyImplemented":true,"id":1308,"linearizedBaseContracts":[1308],"name":"IVaultErrors","nameLocation":"326:12:8","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":949,"nodeType":"StructuredDocumentation","src":"576:149:8","text":" @notice A pool has already been registered. `registerPool` may only be called once.\n @param pool The already registered pool"},"errorSelector":"db771c80","id":953,"name":"PoolAlreadyRegistered","nameLocation":"736:21:8","nodeType":"ErrorDefinition","parameters":{"id":952,"nodeType":"ParameterList","parameters":[{"constant":false,"id":951,"mutability":"mutable","name":"pool","nameLocation":"766:4:8","nodeType":"VariableDeclaration","scope":953,"src":"758:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":950,"name":"address","nodeType":"ElementaryTypeName","src":"758:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"757:14:8"},"src":"730:42:8"},{"documentation":{"id":954,"nodeType":"StructuredDocumentation","src":"778:149:8","text":" @notice A pool has already been initialized. `initialize` may only be called once.\n @param pool The already initialized pool"},"errorSelector":"218e3747","id":958,"name":"PoolAlreadyInitialized","nameLocation":"938:22:8","nodeType":"ErrorDefinition","parameters":{"id":957,"nodeType":"ParameterList","parameters":[{"constant":false,"id":956,"mutability":"mutable","name":"pool","nameLocation":"969:4:8","nodeType":"VariableDeclaration","scope":958,"src":"961:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":955,"name":"address","nodeType":"ElementaryTypeName","src":"961:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"960:14:8"},"src":"932:43:8"},{"documentation":{"id":959,"nodeType":"StructuredDocumentation","src":"981:99:8","text":" @notice A pool has not been registered.\n @param pool The unregistered pool"},"errorSelector":"9e51bd5c","id":963,"name":"PoolNotRegistered","nameLocation":"1091:17:8","nodeType":"ErrorDefinition","parameters":{"id":962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":961,"mutability":"mutable","name":"pool","nameLocation":"1117:4:8","nodeType":"VariableDeclaration","scope":963,"src":"1109:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":960,"name":"address","nodeType":"ElementaryTypeName","src":"1109:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1108:14:8"},"src":"1085:38:8"},{"documentation":{"id":964,"nodeType":"StructuredDocumentation","src":"1129:112:8","text":" @notice A referenced pool has not been initialized.\n @param pool The uninitialized pool"},"errorSelector":"4bdace13","id":968,"name":"PoolNotInitialized","nameLocation":"1252:18:8","nodeType":"ErrorDefinition","parameters":{"id":967,"nodeType":"ParameterList","parameters":[{"constant":false,"id":966,"mutability":"mutable","name":"pool","nameLocation":"1279:4:8","nodeType":"VariableDeclaration","scope":968,"src":"1271:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":965,"name":"address","nodeType":"ElementaryTypeName","src":"1271:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1270:14:8"},"src":"1246:39:8"},{"documentation":{"id":969,"nodeType":"StructuredDocumentation","src":"1291:274:8","text":" @notice A hook contract rejected a pool on registration.\n @param poolHooksContract Address of the hook contract that rejected the pool registration\n @param pool Address of the rejected pool\n @param poolFactory Address of the pool factory"},"errorSelector":"fa93d814","id":977,"name":"HookRegistrationFailed","nameLocation":"1576:22:8","nodeType":"ErrorDefinition","parameters":{"id":976,"nodeType":"ParameterList","parameters":[{"constant":false,"id":971,"mutability":"mutable","name":"poolHooksContract","nameLocation":"1607:17:8","nodeType":"VariableDeclaration","scope":977,"src":"1599:25:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":970,"name":"address","nodeType":"ElementaryTypeName","src":"1599:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":973,"mutability":"mutable","name":"pool","nameLocation":"1634:4:8","nodeType":"VariableDeclaration","scope":977,"src":"1626:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":972,"name":"address","nodeType":"ElementaryTypeName","src":"1626:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":975,"mutability":"mutable","name":"poolFactory","nameLocation":"1648:11:8","nodeType":"VariableDeclaration","scope":977,"src":"1640:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":974,"name":"address","nodeType":"ElementaryTypeName","src":"1640:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1598:62:8"},"src":"1570:91:8"},{"documentation":{"id":978,"nodeType":"StructuredDocumentation","src":"1667:136:8","text":" @notice A token was already registered (i.e., it is a duplicate in the pool).\n @param token The duplicate token"},"errorSelector":"4f4b634e","id":983,"name":"TokenAlreadyRegistered","nameLocation":"1814:22:8","nodeType":"ErrorDefinition","parameters":{"id":982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":981,"mutability":"mutable","name":"token","nameLocation":"1844:5:8","nodeType":"VariableDeclaration","scope":983,"src":"1837:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":980,"nodeType":"UserDefinedTypeName","pathNode":{"id":979,"name":"IERC20","nameLocations":["1837:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"1837:6:8"},"referencedDeclaration":6486,"src":"1837:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1836:14:8"},"src":"1808:43:8"},{"documentation":{"id":984,"nodeType":"StructuredDocumentation","src":"1857:57:8","text":"@notice The token count is below the minimum allowed."},"errorSelector":"5ed4ba8f","id":986,"name":"MinTokens","nameLocation":"1925:9:8","nodeType":"ErrorDefinition","parameters":{"id":985,"nodeType":"ParameterList","parameters":[],"src":"1934:2:8"},"src":"1919:18:8"},{"documentation":{"id":987,"nodeType":"StructuredDocumentation","src":"1943:57:8","text":"@notice The token count is above the maximum allowed."},"errorSelector":"707bdf58","id":989,"name":"MaxTokens","nameLocation":"2011:9:8","nodeType":"ErrorDefinition","parameters":{"id":988,"nodeType":"ParameterList","parameters":[],"src":"2020:2:8"},"src":"2005:18:8"},{"documentation":{"id":990,"nodeType":"StructuredDocumentation","src":"2029:61:8","text":"@notice Invalid tokens (e.g., zero) cannot be registered."},"errorSelector":"c1ab6dc1","id":992,"name":"InvalidToken","nameLocation":"2101:12:8","nodeType":"ErrorDefinition","parameters":{"id":991,"nodeType":"ParameterList","parameters":[],"src":"2113:2:8"},"src":"2095:21:8"},{"documentation":{"id":993,"nodeType":"StructuredDocumentation","src":"2122:86:8","text":"@notice The token type given in a TokenConfig during pool registration is invalid."},"errorSelector":"a1e9dd9d","id":995,"name":"InvalidTokenType","nameLocation":"2219:16:8","nodeType":"ErrorDefinition","parameters":{"id":994,"nodeType":"ParameterList","parameters":[],"src":"2235:2:8"},"src":"2213:25:8"},{"documentation":{"id":996,"nodeType":"StructuredDocumentation","src":"2244:76:8","text":"@notice The data in a TokenConfig struct is inconsistent or unsupported."},"errorSelector":"df450632","id":998,"name":"InvalidTokenConfiguration","nameLocation":"2331:25:8","nodeType":"ErrorDefinition","parameters":{"id":997,"nodeType":"ParameterList","parameters":[],"src":"2356:2:8"},"src":"2325:34:8"},{"documentation":{"id":999,"nodeType":"StructuredDocumentation","src":"2365:64:8","text":"@notice Tokens with more than 18 decimals are not supported."},"errorSelector":"686d3607","id":1001,"name":"InvalidTokenDecimals","nameLocation":"2440:20:8","nodeType":"ErrorDefinition","parameters":{"id":1000,"nodeType":"ParameterList","parameters":[],"src":"2460:2:8"},"src":"2434:29:8"},{"documentation":{"id":1002,"nodeType":"StructuredDocumentation","src":"2469:287:8","text":" @notice The token list passed into an operation does not match the pool tokens in the pool.\n @param pool Address of the pool\n @param expectedToken The correct token at a given index in the pool\n @param actualToken The actual token found at that index"},"errorSelector":"ffe261a1","id":1010,"name":"TokensMismatch","nameLocation":"2767:14:8","nodeType":"ErrorDefinition","parameters":{"id":1009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1004,"mutability":"mutable","name":"pool","nameLocation":"2790:4:8","nodeType":"VariableDeclaration","scope":1010,"src":"2782:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1003,"name":"address","nodeType":"ElementaryTypeName","src":"2782:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1006,"mutability":"mutable","name":"expectedToken","nameLocation":"2804:13:8","nodeType":"VariableDeclaration","scope":1010,"src":"2796:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1005,"name":"address","nodeType":"ElementaryTypeName","src":"2796:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1008,"mutability":"mutable","name":"actualToken","nameLocation":"2827:11:8","nodeType":"VariableDeclaration","scope":1010,"src":"2819:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1007,"name":"address","nodeType":"ElementaryTypeName","src":"2819:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2781:58:8"},"src":"2761:79:8"},{"documentation":{"id":1011,"nodeType":"StructuredDocumentation","src":"3071:85:8","text":"@notice A transient accounting operation completed with outstanding token deltas."},"errorSelector":"20f1d86d","id":1013,"name":"BalanceNotSettled","nameLocation":"3167:17:8","nodeType":"ErrorDefinition","parameters":{"id":1012,"nodeType":"ParameterList","parameters":[],"src":"3184:2:8"},"src":"3161:26:8"},{"documentation":{"id":1014,"nodeType":"StructuredDocumentation","src":"3193:97:8","text":"@notice A user called a Vault function (swap, add/remove liquidity) outside the lock context."},"errorSelector":"c09ba736","id":1016,"name":"VaultIsNotUnlocked","nameLocation":"3301:18:8","nodeType":"ErrorDefinition","parameters":{"id":1015,"nodeType":"ParameterList","parameters":[],"src":"3319:2:8"},"src":"3295:27:8"},{"documentation":{"id":1017,"nodeType":"StructuredDocumentation","src":"3328:105:8","text":"@notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert."},"errorSelector":"53f976d4","id":1019,"name":"DynamicSwapFeeHookFailed","nameLocation":"3444:24:8","nodeType":"ErrorDefinition","parameters":{"id":1018,"nodeType":"ParameterList","parameters":[],"src":"3468:2:8"},"src":"3438:33:8"},{"documentation":{"id":1020,"nodeType":"StructuredDocumentation","src":"3477:105:8","text":"@notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert."},"errorSelector":"e91e17e7","id":1022,"name":"BeforeSwapHookFailed","nameLocation":"3593:20:8","nodeType":"ErrorDefinition","parameters":{"id":1021,"nodeType":"ParameterList","parameters":[],"src":"3613:2:8"},"src":"3587:29:8"},{"documentation":{"id":1023,"nodeType":"StructuredDocumentation","src":"3622:104:8","text":"@notice The pool has returned false to the afterSwap hook, indicating the transaction should revert."},"errorSelector":"15a29dec","id":1025,"name":"AfterSwapHookFailed","nameLocation":"3737:19:8","nodeType":"ErrorDefinition","parameters":{"id":1024,"nodeType":"ParameterList","parameters":[],"src":"3756:2:8"},"src":"3731:28:8"},{"documentation":{"id":1026,"nodeType":"StructuredDocumentation","src":"3765:111:8","text":"@notice The pool has returned false to the beforeInitialize hook, indicating the transaction should revert."},"errorSelector":"60612925","id":1028,"name":"BeforeInitializeHookFailed","nameLocation":"3887:26:8","nodeType":"ErrorDefinition","parameters":{"id":1027,"nodeType":"ParameterList","parameters":[],"src":"3913:2:8"},"src":"3881:35:8"},{"documentation":{"id":1029,"nodeType":"StructuredDocumentation","src":"3922:110:8","text":"@notice The pool has returned false to the afterInitialize hook, indicating the transaction should revert."},"errorSelector":"0f23dbc6","id":1031,"name":"AfterInitializeHookFailed","nameLocation":"4043:25:8","nodeType":"ErrorDefinition","parameters":{"id":1030,"nodeType":"ParameterList","parameters":[],"src":"4068:2:8"},"src":"4037:34:8"},{"documentation":{"id":1032,"nodeType":"StructuredDocumentation","src":"4077:113:8","text":"@notice The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert."},"errorSelector":"0b2eb652","id":1034,"name":"BeforeAddLiquidityHookFailed","nameLocation":"4201:28:8","nodeType":"ErrorDefinition","parameters":{"id":1033,"nodeType":"ParameterList","parameters":[],"src":"4229:2:8"},"src":"4195:37:8"},{"documentation":{"id":1035,"nodeType":"StructuredDocumentation","src":"4238:112:8","text":"@notice The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert."},"errorSelector":"e1249165","id":1037,"name":"AfterAddLiquidityHookFailed","nameLocation":"4361:27:8","nodeType":"ErrorDefinition","parameters":{"id":1036,"nodeType":"ParameterList","parameters":[],"src":"4388:2:8"},"src":"4355:36:8"},{"documentation":{"id":1038,"nodeType":"StructuredDocumentation","src":"4397:116:8","text":"@notice The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert."},"errorSelector":"2aaf8866","id":1040,"name":"BeforeRemoveLiquidityHookFailed","nameLocation":"4524:31:8","nodeType":"ErrorDefinition","parameters":{"id":1039,"nodeType":"ParameterList","parameters":[],"src":"4555:2:8"},"src":"4518:40:8"},{"documentation":{"id":1041,"nodeType":"StructuredDocumentation","src":"4564:115:8","text":"@notice The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert."},"errorSelector":"1d3391d8","id":1043,"name":"AfterRemoveLiquidityHookFailed","nameLocation":"4690:30:8","nodeType":"ErrorDefinition","parameters":{"id":1042,"nodeType":"ParameterList","parameters":[],"src":"4720:2:8"},"src":"4684:39:8"},{"documentation":{"id":1044,"nodeType":"StructuredDocumentation","src":"4729:115:8","text":"@notice An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance)."},"errorSelector":"e5d185cf","id":1046,"name":"RouterNotTrusted","nameLocation":"4855:16:8","nodeType":"ErrorDefinition","parameters":{"id":1045,"nodeType":"ParameterList","parameters":[],"src":"4871:2:8"},"src":"4849:25:8"},{"documentation":{"id":1047,"nodeType":"StructuredDocumentation","src":"5097:47:8","text":"@notice The user tried to swap zero tokens."},"errorSelector":"57a456b7","id":1049,"name":"AmountGivenZero","nameLocation":"5155:15:8","nodeType":"ErrorDefinition","parameters":{"id":1048,"nodeType":"ParameterList","parameters":[],"src":"5170:2:8"},"src":"5149:24:8"},{"documentation":{"id":1050,"nodeType":"StructuredDocumentation","src":"5179:58:8","text":"@notice The user attempted to swap a token for itself."},"errorSelector":"a54b181d","id":1052,"name":"CannotSwapSameToken","nameLocation":"5248:19:8","nodeType":"ErrorDefinition","parameters":{"id":1051,"nodeType":"ParameterList","parameters":[],"src":"5267:2:8"},"src":"5242:28:8"},{"documentation":{"id":1053,"nodeType":"StructuredDocumentation","src":"5276:137:8","text":" @notice The user attempted to operate with a token that is not in the pool.\n @param token The unregistered token"},"errorSelector":"ddef98d7","id":1058,"name":"TokenNotRegistered","nameLocation":"5424:18:8","nodeType":"ErrorDefinition","parameters":{"id":1057,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1056,"mutability":"mutable","name":"token","nameLocation":"5450:5:8","nodeType":"VariableDeclaration","scope":1058,"src":"5443:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":1055,"nodeType":"UserDefinedTypeName","pathNode":{"id":1054,"name":"IERC20","nameLocations":["5443:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"5443:6:8"},"referencedDeclaration":6486,"src":"5443:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"5442:14:8"},"src":"5418:39:8"},{"documentation":{"id":1059,"nodeType":"StructuredDocumentation","src":"5463:215:8","text":" @notice An amount in or out has exceeded the limit specified in the swap request.\n @param amount The total amount in or out\n @param limit The amount of the limit that has been exceeded"},"errorSelector":"e2ea151b","id":1065,"name":"SwapLimit","nameLocation":"5689:9:8","nodeType":"ErrorDefinition","parameters":{"id":1064,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1061,"mutability":"mutable","name":"amount","nameLocation":"5707:6:8","nodeType":"VariableDeclaration","scope":1065,"src":"5699:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1060,"name":"uint256","nodeType":"ElementaryTypeName","src":"5699:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1063,"mutability":"mutable","name":"limit","nameLocation":"5723:5:8","nodeType":"VariableDeclaration","scope":1065,"src":"5715:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1062,"name":"uint256","nodeType":"ElementaryTypeName","src":"5715:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5698:31:8"},"src":"5683:47:8"},{"documentation":{"id":1066,"nodeType":"StructuredDocumentation","src":"5736:228:8","text":" @notice A hook adjusted amount in or out has exceeded the limit specified in the swap request.\n @param amount The total amount in or out\n @param limit The amount of the limit that has been exceeded"},"errorSelector":"cc0e4a99","id":1072,"name":"HookAdjustedSwapLimit","nameLocation":"5975:21:8","nodeType":"ErrorDefinition","parameters":{"id":1071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1068,"mutability":"mutable","name":"amount","nameLocation":"6005:6:8","nodeType":"VariableDeclaration","scope":1072,"src":"5997:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1067,"name":"uint256","nodeType":"ElementaryTypeName","src":"5997:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1070,"mutability":"mutable","name":"limit","nameLocation":"6021:5:8","nodeType":"VariableDeclaration","scope":1072,"src":"6013:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1069,"name":"uint256","nodeType":"ElementaryTypeName","src":"6013:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5996:31:8"},"src":"5969:59:8"},{"documentation":{"id":1073,"nodeType":"StructuredDocumentation","src":"6034:87:8","text":"@notice The amount given or calculated for an operation is below the minimum limit."},"errorSelector":"1ed4d118","id":1075,"name":"TradeAmountTooSmall","nameLocation":"6132:19:8","nodeType":"ErrorDefinition","parameters":{"id":1074,"nodeType":"ParameterList","parameters":[],"src":"6151:2:8"},"src":"6126:28:8"},{"documentation":{"id":1076,"nodeType":"StructuredDocumentation","src":"6381:45:8","text":"@notice Add liquidity kind not supported."},"errorSelector":"6c02b395","id":1078,"name":"InvalidAddLiquidityKind","nameLocation":"6437:23:8","nodeType":"ErrorDefinition","parameters":{"id":1077,"nodeType":"ParameterList","parameters":[],"src":"6460:2:8"},"src":"6431:32:8"},{"documentation":{"id":1079,"nodeType":"StructuredDocumentation","src":"6469:264:8","text":" @notice A required amountIn exceeds the maximum limit specified for the operation.\n @param tokenIn The incoming token\n @param amountIn The total token amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"8eda85e4","id":1088,"name":"AmountInAboveMax","nameLocation":"6744:16:8","nodeType":"ErrorDefinition","parameters":{"id":1087,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1082,"mutability":"mutable","name":"tokenIn","nameLocation":"6768:7:8","nodeType":"VariableDeclaration","scope":1088,"src":"6761:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":1081,"nodeType":"UserDefinedTypeName","pathNode":{"id":1080,"name":"IERC20","nameLocations":["6761:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"6761:6:8"},"referencedDeclaration":6486,"src":"6761:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1084,"mutability":"mutable","name":"amountIn","nameLocation":"6785:8:8","nodeType":"VariableDeclaration","scope":1088,"src":"6777:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1083,"name":"uint256","nodeType":"ElementaryTypeName","src":"6777:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1086,"mutability":"mutable","name":"maxAmountIn","nameLocation":"6803:11:8","nodeType":"VariableDeclaration","scope":1088,"src":"6795:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1085,"name":"uint256","nodeType":"ElementaryTypeName","src":"6795:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6760:55:8"},"src":"6738:78:8"},{"documentation":{"id":1089,"nodeType":"StructuredDocumentation","src":"6822:269:8","text":" @notice A hook adjusted amountIn exceeds the maximum limit specified for the operation.\n @param tokenIn The incoming token\n @param amountIn The total token amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"cefa3afa","id":1098,"name":"HookAdjustedAmountInAboveMax","nameLocation":"7102:28:8","nodeType":"ErrorDefinition","parameters":{"id":1097,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1092,"mutability":"mutable","name":"tokenIn","nameLocation":"7138:7:8","nodeType":"VariableDeclaration","scope":1098,"src":"7131:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":1091,"nodeType":"UserDefinedTypeName","pathNode":{"id":1090,"name":"IERC20","nameLocations":["7131:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"7131:6:8"},"referencedDeclaration":6486,"src":"7131:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1094,"mutability":"mutable","name":"amountIn","nameLocation":"7155:8:8","nodeType":"VariableDeclaration","scope":1098,"src":"7147:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1093,"name":"uint256","nodeType":"ElementaryTypeName","src":"7147:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1096,"mutability":"mutable","name":"maxAmountIn","nameLocation":"7173:11:8","nodeType":"VariableDeclaration","scope":1098,"src":"7165:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1095,"name":"uint256","nodeType":"ElementaryTypeName","src":"7165:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7130:55:8"},"src":"7096:90:8"},{"documentation":{"id":1099,"nodeType":"StructuredDocumentation","src":"7192:245:8","text":" @notice The BPT amount received from adding liquidity is below the minimum specified for the operation.\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"8d261d5d","id":1105,"name":"BptAmountOutBelowMin","nameLocation":"7448:20:8","nodeType":"ErrorDefinition","parameters":{"id":1104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1101,"mutability":"mutable","name":"amountOut","nameLocation":"7477:9:8","nodeType":"VariableDeclaration","scope":1105,"src":"7469:17:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1100,"name":"uint256","nodeType":"ElementaryTypeName","src":"7469:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1103,"mutability":"mutable","name":"minAmountOut","nameLocation":"7496:12:8","nodeType":"VariableDeclaration","scope":1105,"src":"7488:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1102,"name":"uint256","nodeType":"ElementaryTypeName","src":"7488:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7468:41:8"},"src":"7442:68:8"},{"documentation":{"id":1106,"nodeType":"StructuredDocumentation","src":"7516:75:8","text":"@notice Pool does not support adding liquidity with a customized input."},"errorSelector":"4876c0bc","id":1108,"name":"DoesNotSupportAddLiquidityCustom","nameLocation":"7602:32:8","nodeType":"ErrorDefinition","parameters":{"id":1107,"nodeType":"ParameterList","parameters":[],"src":"7634:2:8"},"src":"7596:41:8"},{"documentation":{"id":1109,"nodeType":"StructuredDocumentation","src":"7643:68:8","text":"@notice Pool does not support adding liquidity through donation."},"errorSelector":"efe0265d","id":1111,"name":"DoesNotSupportDonation","nameLocation":"7722:22:8","nodeType":"ErrorDefinition","parameters":{"id":1110,"nodeType":"ParameterList","parameters":[],"src":"7744:2:8"},"src":"7716:31:8"},{"documentation":{"id":1112,"nodeType":"StructuredDocumentation","src":"7977:48:8","text":"@notice Remove liquidity kind not supported."},"errorSelector":"137a9a39","id":1114,"name":"InvalidRemoveLiquidityKind","nameLocation":"8036:26:8","nodeType":"ErrorDefinition","parameters":{"id":1113,"nodeType":"ParameterList","parameters":[],"src":"8062:2:8"},"src":"8030:35:8"},{"documentation":{"id":1115,"nodeType":"StructuredDocumentation","src":"8071:269:8","text":" @notice The actual amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"2f785e46","id":1124,"name":"AmountOutBelowMin","nameLocation":"8351:17:8","nodeType":"ErrorDefinition","parameters":{"id":1123,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1118,"mutability":"mutable","name":"tokenOut","nameLocation":"8376:8:8","nodeType":"VariableDeclaration","scope":1124,"src":"8369:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":1117,"nodeType":"UserDefinedTypeName","pathNode":{"id":1116,"name":"IERC20","nameLocations":["8369:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"8369:6:8"},"referencedDeclaration":6486,"src":"8369:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1120,"mutability":"mutable","name":"amountOut","nameLocation":"8394:9:8","nodeType":"VariableDeclaration","scope":1124,"src":"8386:17:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1119,"name":"uint256","nodeType":"ElementaryTypeName","src":"8386:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1122,"mutability":"mutable","name":"minAmountOut","nameLocation":"8413:12:8","nodeType":"VariableDeclaration","scope":1124,"src":"8405:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1121,"name":"uint256","nodeType":"ElementaryTypeName","src":"8405:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8368:58:8"},"src":"8345:82:8"},{"documentation":{"id":1125,"nodeType":"StructuredDocumentation","src":"8433:276:8","text":" @notice The hook adjusted amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"fbd8a724","id":1134,"name":"HookAdjustedAmountOutBelowMin","nameLocation":"8720:29:8","nodeType":"ErrorDefinition","parameters":{"id":1133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1128,"mutability":"mutable","name":"tokenOut","nameLocation":"8757:8:8","nodeType":"VariableDeclaration","scope":1134,"src":"8750:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":1127,"nodeType":"UserDefinedTypeName","pathNode":{"id":1126,"name":"IERC20","nameLocations":["8750:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"8750:6:8"},"referencedDeclaration":6486,"src":"8750:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1130,"mutability":"mutable","name":"amountOut","nameLocation":"8775:9:8","nodeType":"VariableDeclaration","scope":1134,"src":"8767:17:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1129,"name":"uint256","nodeType":"ElementaryTypeName","src":"8767:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1132,"mutability":"mutable","name":"minAmountOut","nameLocation":"8794:12:8","nodeType":"VariableDeclaration","scope":1134,"src":"8786:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1131,"name":"uint256","nodeType":"ElementaryTypeName","src":"8786:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8749:58:8"},"src":"8714:94:8"},{"documentation":{"id":1135,"nodeType":"StructuredDocumentation","src":"8814:228:8","text":" @notice The required BPT amount in exceeds the maximum limit specified for the operation.\n @param amountIn The total BPT amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"31d38e0b","id":1141,"name":"BptAmountInAboveMax","nameLocation":"9053:19:8","nodeType":"ErrorDefinition","parameters":{"id":1140,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1137,"mutability":"mutable","name":"amountIn","nameLocation":"9081:8:8","nodeType":"VariableDeclaration","scope":1141,"src":"9073:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1136,"name":"uint256","nodeType":"ElementaryTypeName","src":"9073:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1139,"mutability":"mutable","name":"maxAmountIn","nameLocation":"9099:11:8","nodeType":"VariableDeclaration","scope":1141,"src":"9091:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1138,"name":"uint256","nodeType":"ElementaryTypeName","src":"9091:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9072:39:8"},"src":"9047:65:8"},{"documentation":{"id":1142,"nodeType":"StructuredDocumentation","src":"9118:77:8","text":"@notice Pool does not support removing liquidity with a customized input."},"errorSelector":"cf0a95c0","id":1144,"name":"DoesNotSupportRemoveLiquidityCustom","nameLocation":"9206:35:8","nodeType":"ErrorDefinition","parameters":{"id":1143,"nodeType":"ParameterList","parameters":[],"src":"9241:2:8"},"src":"9200:44:8"},{"documentation":{"id":1145,"nodeType":"StructuredDocumentation","src":"9463:332:8","text":" @notice Error raised when there is an overflow in the fee calculation.\n @dev This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole\n (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee\n percentages in the Vault."},"errorSelector":"4c69ac5d","id":1147,"name":"ProtocolFeesExceedTotalCollected","nameLocation":"9806:32:8","nodeType":"ErrorDefinition","parameters":{"id":1146,"nodeType":"ParameterList","parameters":[],"src":"9838:2:8"},"src":"9800:41:8"},{"documentation":{"id":1148,"nodeType":"StructuredDocumentation","src":"9847:430:8","text":" @notice Error raised when the swap fee percentage is less than the minimum allowed value.\n @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n if it is below the minimum value returned by the pool.\n Pools with dynamic fees do not check these limits."},"errorSelector":"bfb20688","id":1150,"name":"SwapFeePercentageTooLow","nameLocation":"10288:23:8","nodeType":"ErrorDefinition","parameters":{"id":1149,"nodeType":"ParameterList","parameters":[],"src":"10311:2:8"},"src":"10282:32:8"},{"documentation":{"id":1151,"nodeType":"StructuredDocumentation","src":"10320:433:8","text":" @notice Error raised when the swap fee percentage is greater than the maximum allowed value.\n @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n if it is above the maximum value returned by the pool.\n Pools with dynamic fees do not check these limits."},"errorSelector":"7f47834b","id":1153,"name":"SwapFeePercentageTooHigh","nameLocation":"10764:24:8","nodeType":"ErrorDefinition","parameters":{"id":1152,"nodeType":"ParameterList","parameters":[],"src":"10788:2:8"},"src":"10758:33:8"},{"documentation":{"id":1154,"nodeType":"StructuredDocumentation","src":"10797:646:8","text":" @notice Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\n @dev Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between\n the aggregate fee calculated here and that stored in the Vault."},"errorSelector":"833fb3ce","id":1156,"name":"FeePrecisionTooHigh","nameLocation":"11454:19:8","nodeType":"ErrorDefinition","parameters":{"id":1155,"nodeType":"ParameterList","parameters":[],"src":"11473:2:8"},"src":"11448:28:8"},{"documentation":{"id":1157,"nodeType":"StructuredDocumentation","src":"11482:107:8","text":"@notice A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei)."},"errorSelector":"746e5940","id":1159,"name":"PercentageAboveMax","nameLocation":"11600:18:8","nodeType":"ErrorDefinition","parameters":{"id":1158,"nodeType":"ParameterList","parameters":[],"src":"11618:2:8"},"src":"11594:27:8"},{"documentation":{"id":1160,"nodeType":"StructuredDocumentation","src":"11842:78:8","text":"@notice A user tried to execute a query operation when they were disabled."},"errorSelector":"7a198886","id":1162,"name":"QueriesDisabled","nameLocation":"11931:15:8","nodeType":"ErrorDefinition","parameters":{"id":1161,"nodeType":"ParameterList","parameters":[],"src":"11946:2:8"},"src":"11925:24:8"},{"documentation":{"id":1163,"nodeType":"StructuredDocumentation","src":"11955:84:8","text":"@notice An admin tried to re-enable queries, but they were disabled permanently."},"errorSelector":"069f8cbc","id":1165,"name":"QueriesDisabledPermanently","nameLocation":"12050:26:8","nodeType":"ErrorDefinition","parameters":{"id":1164,"nodeType":"ParameterList","parameters":[],"src":"12076:2:8"},"src":"12044:35:8"},{"documentation":{"id":1166,"nodeType":"StructuredDocumentation","src":"12302:104:8","text":" @notice Cannot enable recovery mode when already enabled.\n @param pool The pool"},"errorSelector":"346d7607","id":1170,"name":"PoolInRecoveryMode","nameLocation":"12417:18:8","nodeType":"ErrorDefinition","parameters":{"id":1169,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1168,"mutability":"mutable","name":"pool","nameLocation":"12444:4:8","nodeType":"VariableDeclaration","scope":1170,"src":"12436:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1167,"name":"address","nodeType":"ElementaryTypeName","src":"12436:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12435:14:8"},"src":"12411:39:8"},{"documentation":{"id":1171,"nodeType":"StructuredDocumentation","src":"12456:101:8","text":" @notice Cannot disable recovery mode when not enabled.\n @param pool The pool"},"errorSelector":"ef029adf","id":1175,"name":"PoolNotInRecoveryMode","nameLocation":"12568:21:8","nodeType":"ErrorDefinition","parameters":{"id":1174,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1173,"mutability":"mutable","name":"pool","nameLocation":"12598:4:8","nodeType":"VariableDeclaration","scope":1175,"src":"12590:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1172,"name":"address","nodeType":"ElementaryTypeName","src":"12590:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12589:14:8"},"src":"12562:42:8"},{"documentation":{"id":1176,"nodeType":"StructuredDocumentation","src":"12828:206:8","text":" @notice Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\n @param sender The account attempting to call a permissioned function"},"errorSelector":"089676d5","id":1180,"name":"SenderIsNotVault","nameLocation":"13045:16:8","nodeType":"ErrorDefinition","parameters":{"id":1179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1178,"mutability":"mutable","name":"sender","nameLocation":"13070:6:8","nodeType":"VariableDeclaration","scope":1180,"src":"13062:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1177,"name":"address","nodeType":"ElementaryTypeName","src":"13062:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13061:16:8"},"src":"13039:39:8"},{"documentation":{"id":1181,"nodeType":"StructuredDocumentation","src":"13303:79:8","text":"@notice The caller specified a pause window period longer than the maximum."},"errorSelector":"cc0e8fe5","id":1183,"name":"VaultPauseWindowDurationTooLarge","nameLocation":"13393:32:8","nodeType":"ErrorDefinition","parameters":{"id":1182,"nodeType":"ParameterList","parameters":[],"src":"13425:2:8"},"src":"13387:41:8"},{"documentation":{"id":1184,"nodeType":"StructuredDocumentation","src":"13434:73:8","text":"@notice The caller specified a buffer period longer than the maximum."},"errorSelector":"9ea4efee","id":1186,"name":"PauseBufferPeriodDurationTooLarge","nameLocation":"13518:33:8","nodeType":"ErrorDefinition","parameters":{"id":1185,"nodeType":"ParameterList","parameters":[],"src":"13551:2:8"},"src":"13512:42:8"},{"documentation":{"id":1187,"nodeType":"StructuredDocumentation","src":"13560:76:8","text":"@notice A user tried to perform an operation while the Vault was paused."},"errorSelector":"da9f8b34","id":1189,"name":"VaultPaused","nameLocation":"13647:11:8","nodeType":"ErrorDefinition","parameters":{"id":1188,"nodeType":"ParameterList","parameters":[],"src":"13658:2:8"},"src":"13641:20:8"},{"documentation":{"id":1190,"nodeType":"StructuredDocumentation","src":"13667:73:8","text":"@notice Governance tried to unpause the Vault when it was not paused."},"errorSelector":"f7ff4dca","id":1192,"name":"VaultNotPaused","nameLocation":"13751:14:8","nodeType":"ErrorDefinition","parameters":{"id":1191,"nodeType":"ParameterList","parameters":[],"src":"13765:2:8"},"src":"13745:23:8"},{"documentation":{"id":1193,"nodeType":"StructuredDocumentation","src":"13774:79:8","text":"@notice Governance tried to pause the Vault after the pause period expired."},"errorSelector":"0e4460b7","id":1195,"name":"VaultPauseWindowExpired","nameLocation":"13864:23:8","nodeType":"ErrorDefinition","parameters":{"id":1194,"nodeType":"ParameterList","parameters":[],"src":"13887:2:8"},"src":"13858:32:8"},{"documentation":{"id":1196,"nodeType":"StructuredDocumentation","src":"13896:123:8","text":" @notice A user tried to perform an operation involving a paused Pool.\n @param pool The paused pool"},"errorSelector":"d971f597","id":1200,"name":"PoolPaused","nameLocation":"14030:10:8","nodeType":"ErrorDefinition","parameters":{"id":1199,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1198,"mutability":"mutable","name":"pool","nameLocation":"14049:4:8","nodeType":"VariableDeclaration","scope":1200,"src":"14041:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1197,"name":"address","nodeType":"ElementaryTypeName","src":"14041:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14040:14:8"},"src":"14024:31:8"},{"documentation":{"id":1201,"nodeType":"StructuredDocumentation","src":"14061:124:8","text":" @notice Governance tried to unpause the Pool when it was not paused.\n @param pool The unpaused pool"},"errorSelector":"fdcd6894","id":1205,"name":"PoolNotPaused","nameLocation":"14196:13:8","nodeType":"ErrorDefinition","parameters":{"id":1204,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1203,"mutability":"mutable","name":"pool","nameLocation":"14218:4:8","nodeType":"VariableDeclaration","scope":1205,"src":"14210:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1202,"name":"address","nodeType":"ElementaryTypeName","src":"14210:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14209:14:8"},"src":"14190:34:8"},{"documentation":{"id":1206,"nodeType":"StructuredDocumentation","src":"14230:119:8","text":" @notice Governance tried to pause a Pool after the pause period expired.\n @param pool The pool"},"errorSelector":"eb5a1217","id":1210,"name":"PoolPauseWindowExpired","nameLocation":"14360:22:8","nodeType":"ErrorDefinition","parameters":{"id":1209,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1208,"mutability":"mutable","name":"pool","nameLocation":"14391:4:8","nodeType":"VariableDeclaration","scope":1210,"src":"14383:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1207,"name":"address","nodeType":"ElementaryTypeName","src":"14383:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14382:14:8"},"src":"14354:43:8"},{"documentation":{"id":1211,"nodeType":"StructuredDocumentation","src":"14628:163:8","text":" @notice The buffer for the given wrapped token was already initialized.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"1690fa40","id":1216,"name":"BufferAlreadyInitialized","nameLocation":"14802:24:8","nodeType":"ErrorDefinition","parameters":{"id":1215,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1214,"mutability":"mutable","name":"wrappedToken","nameLocation":"14836:12:8","nodeType":"VariableDeclaration","scope":1216,"src":"14827:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1213,"nodeType":"UserDefinedTypeName","pathNode":{"id":1212,"name":"IERC4626","nameLocations":["14827:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"14827:8:8"},"referencedDeclaration":6408,"src":"14827:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"14826:23:8"},"src":"14796:54:8"},{"documentation":{"id":1217,"nodeType":"StructuredDocumentation","src":"14856:159:8","text":" @notice The buffer for the given wrapped token was not initialized.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"85f41299","id":1222,"name":"BufferNotInitialized","nameLocation":"15026:20:8","nodeType":"ErrorDefinition","parameters":{"id":1221,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1220,"mutability":"mutable","name":"wrappedToken","nameLocation":"15056:12:8","nodeType":"VariableDeclaration","scope":1222,"src":"15047:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1219,"nodeType":"UserDefinedTypeName","pathNode":{"id":1218,"name":"IERC4626","nameLocations":["15047:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"15047:8:8"},"referencedDeclaration":6408,"src":"15047:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"15046:23:8"},"src":"15020:50:8"},{"documentation":{"id":1223,"nodeType":"StructuredDocumentation","src":"15076:90:8","text":"@notice The user is trying to remove more than their allocated shares from the buffer."},"errorSelector":"98c5dbd6","id":1225,"name":"NotEnoughBufferShares","nameLocation":"15177:21:8","nodeType":"ErrorDefinition","parameters":{"id":1224,"nodeType":"ParameterList","parameters":[],"src":"15198:2:8"},"src":"15171:30:8"},{"documentation":{"id":1226,"nodeType":"StructuredDocumentation","src":"15207:436:8","text":" @notice The wrapped token asset does not match the underlying token.\n @dev This should never happen, but a malicious wrapper contract might not return the correct address.\n Legitimate wrapper contracts should make the asset a constant or immutable value.\n @param wrappedToken The wrapped token corresponding to the buffer\n @param underlyingToken The underlying token returned by `asset`"},"errorSelector":"36b18d09","id":1233,"name":"WrongUnderlyingToken","nameLocation":"15654:20:8","nodeType":"ErrorDefinition","parameters":{"id":1232,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1229,"mutability":"mutable","name":"wrappedToken","nameLocation":"15684:12:8","nodeType":"VariableDeclaration","scope":1233,"src":"15675:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1228,"nodeType":"UserDefinedTypeName","pathNode":{"id":1227,"name":"IERC4626","nameLocations":["15675:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"15675:8:8"},"referencedDeclaration":6408,"src":"15675:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1231,"mutability":"mutable","name":"underlyingToken","nameLocation":"15706:15:8","nodeType":"VariableDeclaration","scope":1233,"src":"15698:23:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1230,"name":"address","nodeType":"ElementaryTypeName","src":"15698:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15674:48:8"},"src":"15648:75:8"},{"documentation":{"id":1234,"nodeType":"StructuredDocumentation","src":"15729:322:8","text":" @notice A wrapped token reported the zero address as its underlying token asset.\n @dev This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to\n re-initialize the buffer).\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"d407f9c5","id":1239,"name":"InvalidUnderlyingToken","nameLocation":"16062:22:8","nodeType":"ErrorDefinition","parameters":{"id":1238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1237,"mutability":"mutable","name":"wrappedToken","nameLocation":"16094:12:8","nodeType":"VariableDeclaration","scope":1239,"src":"16085:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1236,"nodeType":"UserDefinedTypeName","pathNode":{"id":1235,"name":"IERC4626","nameLocations":["16085:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"16085:8:8"},"referencedDeclaration":6408,"src":"16085:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16084:23:8"},"src":"16056:52:8"},{"documentation":{"id":1240,"nodeType":"StructuredDocumentation","src":"16114:183:8","text":" @notice The amount given to wrap/unwrap was too small, which can introduce rounding issues.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"18fe7385","id":1245,"name":"WrapAmountTooSmall","nameLocation":"16308:18:8","nodeType":"ErrorDefinition","parameters":{"id":1244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1243,"mutability":"mutable","name":"wrappedToken","nameLocation":"16336:12:8","nodeType":"VariableDeclaration","scope":1245,"src":"16327:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1242,"nodeType":"UserDefinedTypeName","pathNode":{"id":1241,"name":"IERC4626","nameLocations":["16327:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"16327:8:8"},"referencedDeclaration":6408,"src":"16327:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16326:23:8"},"src":"16302:48:8"},{"documentation":{"id":1246,"nodeType":"StructuredDocumentation","src":"16356:70:8","text":"@notice Buffer operation attempted while vault buffers are paused."},"errorSelector":"0f27df09","id":1248,"name":"VaultBuffersArePaused","nameLocation":"16437:21:8","nodeType":"ErrorDefinition","parameters":{"id":1247,"nodeType":"ParameterList","parameters":[],"src":"16458:2:8"},"src":"16431:30:8"},{"documentation":{"id":1249,"nodeType":"StructuredDocumentation","src":"16467:58:8","text":"@notice Buffer shares were minted to the zero address."},"errorSelector":"dbe6b10e","id":1251,"name":"BufferSharesInvalidReceiver","nameLocation":"16536:27:8","nodeType":"ErrorDefinition","parameters":{"id":1250,"nodeType":"ParameterList","parameters":[],"src":"16563:2:8"},"src":"16530:36:8"},{"documentation":{"id":1252,"nodeType":"StructuredDocumentation","src":"16572:60:8","text":"@notice Buffer shares were burned from the zero address."},"errorSelector":"586d06df","id":1254,"name":"BufferSharesInvalidOwner","nameLocation":"16643:24:8","nodeType":"ErrorDefinition","parameters":{"id":1253,"nodeType":"ParameterList","parameters":[],"src":"16667:2:8"},"src":"16637:33:8"},{"documentation":{"id":1255,"nodeType":"StructuredDocumentation","src":"16676:173:8","text":" @notice The total supply of a buffer can't be lower than the absolute minimum.\n @param totalSupply The total supply value that was below the minimum"},"errorSelector":"34bdbfaa","id":1259,"name":"BufferTotalSupplyTooLow","nameLocation":"16860:23:8","nodeType":"ErrorDefinition","parameters":{"id":1258,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1257,"mutability":"mutable","name":"totalSupply","nameLocation":"16892:11:8","nodeType":"VariableDeclaration","scope":1259,"src":"16884:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1256,"name":"uint256","nodeType":"ElementaryTypeName","src":"16884:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16883:21:8"},"src":"16854:51:8"},{"documentation":{"id":1260,"nodeType":"StructuredDocumentation","src":"16911:97:8","text":"@dev A wrap/unwrap operation consumed more or returned less underlying tokens than it should."},"errorSelector":"1c6a5375","id":1269,"name":"NotEnoughUnderlying","nameLocation":"17019:19:8","nodeType":"ErrorDefinition","parameters":{"id":1268,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1263,"mutability":"mutable","name":"wrappedToken","nameLocation":"17048:12:8","nodeType":"VariableDeclaration","scope":1269,"src":"17039:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1262,"nodeType":"UserDefinedTypeName","pathNode":{"id":1261,"name":"IERC4626","nameLocations":["17039:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"17039:8:8"},"referencedDeclaration":6408,"src":"17039:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1265,"mutability":"mutable","name":"expectedUnderlyingAmount","nameLocation":"17070:24:8","nodeType":"VariableDeclaration","scope":1269,"src":"17062:32:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1264,"name":"uint256","nodeType":"ElementaryTypeName","src":"17062:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1267,"mutability":"mutable","name":"actualUnderlyingAmount","nameLocation":"17104:22:8","nodeType":"VariableDeclaration","scope":1269,"src":"17096:30:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1266,"name":"uint256","nodeType":"ElementaryTypeName","src":"17096:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17038:89:8"},"src":"17013:115:8"},{"documentation":{"id":1270,"nodeType":"StructuredDocumentation","src":"17134:94:8","text":"@dev A wrap/unwrap operation consumed more or returned less wrapped tokens than it should."},"errorSelector":"1149424d","id":1279,"name":"NotEnoughWrapped","nameLocation":"17239:16:8","nodeType":"ErrorDefinition","parameters":{"id":1278,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1273,"mutability":"mutable","name":"wrappedToken","nameLocation":"17265:12:8","nodeType":"VariableDeclaration","scope":1279,"src":"17256:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1272,"nodeType":"UserDefinedTypeName","pathNode":{"id":1271,"name":"IERC4626","nameLocations":["17256:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"17256:8:8"},"referencedDeclaration":6408,"src":"17256:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1275,"mutability":"mutable","name":"expectedWrappedAmount","nameLocation":"17287:21:8","nodeType":"VariableDeclaration","scope":1279,"src":"17279:29:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1274,"name":"uint256","nodeType":"ElementaryTypeName","src":"17279:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1277,"mutability":"mutable","name":"actualWrappedAmount","nameLocation":"17318:19:8","nodeType":"VariableDeclaration","scope":1279,"src":"17310:27:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1276,"name":"uint256","nodeType":"ElementaryTypeName","src":"17310:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17255:83:8"},"src":"17233:106:8"},{"documentation":{"id":1280,"nodeType":"StructuredDocumentation","src":"17345:76:8","text":"@dev Shares issued during initialization are below the requested amount."},"errorSelector":"da0cb07e","id":1286,"name":"IssuedSharesBelowMin","nameLocation":"17432:20:8","nodeType":"ErrorDefinition","parameters":{"id":1285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1282,"mutability":"mutable","name":"issuedShares","nameLocation":"17461:12:8","nodeType":"VariableDeclaration","scope":1286,"src":"17453:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1281,"name":"uint256","nodeType":"ElementaryTypeName","src":"17453:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1284,"mutability":"mutable","name":"minIssuedShares","nameLocation":"17483:15:8","nodeType":"VariableDeclaration","scope":1286,"src":"17475:23:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1283,"name":"uint256","nodeType":"ElementaryTypeName","src":"17475:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17452:47:8"},"src":"17426:74:8"},{"documentation":{"id":1287,"nodeType":"StructuredDocumentation","src":"17727:87:8","text":"@notice Pool does not support adding / removing liquidity with an unbalanced input."},"errorSelector":"d4f5779c","id":1289,"name":"DoesNotSupportUnbalancedLiquidity","nameLocation":"17825:33:8","nodeType":"ErrorDefinition","parameters":{"id":1288,"nodeType":"ParameterList","parameters":[],"src":"17858:2:8"},"src":"17819:42:8"},{"documentation":{"id":1290,"nodeType":"StructuredDocumentation","src":"17867:48:8","text":"@notice The contract should not receive ETH."},"errorSelector":"f2238896","id":1292,"name":"CannotReceiveEth","nameLocation":"17926:16:8","nodeType":"ErrorDefinition","parameters":{"id":1291,"nodeType":"ParameterList","parameters":[],"src":"17942:2:8"},"src":"17920:25:8"},{"documentation":{"id":1293,"nodeType":"StructuredDocumentation","src":"17951:156:8","text":" @notice The `VaultExtension` contract was called by an account directly.\n @dev It can only be called by the Vault via delegatecall."},"errorSelector":"9fd25b36","id":1295,"name":"NotVaultDelegateCall","nameLocation":"18118:20:8","nodeType":"ErrorDefinition","parameters":{"id":1294,"nodeType":"ParameterList","parameters":[],"src":"18138:2:8"},"src":"18112:29:8"},{"documentation":{"id":1296,"nodeType":"StructuredDocumentation","src":"18147:89:8","text":"@notice The `VaultExtension` contract was configured with an incorrect Vault address."},"errorSelector":"1ab9d9d0","id":1298,"name":"WrongVaultExtensionDeployment","nameLocation":"18247:29:8","nodeType":"ErrorDefinition","parameters":{"id":1297,"nodeType":"ParameterList","parameters":[],"src":"18276:2:8"},"src":"18241:38:8"},{"documentation":{"id":1299,"nodeType":"StructuredDocumentation","src":"18285:96:8","text":"@notice The `ProtocolFeeController` contract was configured with an incorrect Vault address."},"errorSelector":"1bbe95c7","id":1301,"name":"WrongProtocolFeeControllerDeployment","nameLocation":"18392:36:8","nodeType":"ErrorDefinition","parameters":{"id":1300,"nodeType":"ParameterList","parameters":[],"src":"18428:2:8"},"src":"18386:45:8"},{"documentation":{"id":1302,"nodeType":"StructuredDocumentation","src":"18437:85:8","text":"@notice The `VaultAdmin` contract was configured with an incorrect Vault address."},"errorSelector":"82cc28b6","id":1304,"name":"WrongVaultAdminDeployment","nameLocation":"18533:25:8","nodeType":"ErrorDefinition","parameters":{"id":1303,"nodeType":"ParameterList","parameters":[],"src":"18558:2:8"},"src":"18527:34:8"},{"documentation":{"id":1305,"nodeType":"StructuredDocumentation","src":"18567:54:8","text":"@notice Quote reverted with a reserved error code."},"errorSelector":"28f95541","id":1307,"name":"QuoteResultSpoofed","nameLocation":"18632:18:8","nodeType":"ErrorDefinition","parameters":{"id":1306,"nodeType":"ParameterList","parameters":[],"src":"18650:2:8"},"src":"18626:27:8"}],"scope":1309,"src":"316:18339:8","usedErrors":[953,958,963,968,977,983,986,989,992,995,998,1001,1010,1013,1016,1019,1022,1025,1028,1031,1034,1037,1040,1043,1046,1049,1052,1058,1065,1072,1075,1078,1088,1098,1105,1108,1111,1114,1124,1134,1141,1144,1147,1150,1153,1156,1159,1162,1165,1170,1175,1180,1183,1186,1189,1192,1195,1200,1205,1210,1216,1222,1225,1233,1239,1245,1248,1251,1254,1259,1269,1279,1286,1289,1292,1295,1298,1301,1304,1307],"usedEvents":[]}],"src":"46:18610:8"},"id":8},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","exportedSymbols":{"AddLiquidityKind":[2347],"AddLiquidityParams":[2363],"AfterSwapParams":[2341],"BufferWrapOrUnwrapParams":[2402],"FEE_BITLENGTH":[2405],"FEE_SCALING_FACTOR":[2408],"HookFlags":[2167],"HooksConfig":[2191],"IAuthorizer":[73],"IERC20":[6486],"IERC4626":[6408],"IHooks":[275],"IProtocolFeeController":[613],"IRateProvider":[57],"IVaultEvents":[1547],"LiquidityManagement":[2120],"MAX_FEE_PERCENTAGE":[2411],"PoolConfig":[2145],"PoolConfigBits":[2122],"PoolData":[2269],"PoolRoleAccounts":[2217],"PoolSwapParams":[2312],"RemoveLiquidityKind":[2368],"RemoveLiquidityParams":[2384],"Rounding":[2272],"SwapKind":[2275],"SwapState":[2201],"TokenConfig":[2234],"TokenInfo":[2244],"TokenType":[2221],"VaultState":[2209],"VaultSwapParams":[2294],"WrappingDirection":[2387]},"id":1548,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1310,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:9"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":1312,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1548,"sourceUnit":6409,"src":"72:75:9","symbolAliases":[{"foreign":{"id":1311,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6408,"src":"81:8:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1314,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1548,"sourceUnit":6487,"src":"148:72:9","symbolAliases":[{"foreign":{"id":1313,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6486,"src":"157:6:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":1316,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1548,"sourceUnit":614,"src":"222:70:9","symbolAliases":[{"foreign":{"id":1315,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":613,"src":"231:22:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":1318,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1548,"sourceUnit":74,"src":"293:48:9","symbolAliases":[{"foreign":{"id":1317,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73,"src":"302:11:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"./IHooks.sol","id":1320,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1548,"sourceUnit":276,"src":"342:38:9","symbolAliases":[{"foreign":{"id":1319,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":275,"src":"351:6:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":1321,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1548,"sourceUnit":2412,"src":"381:26:9","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultEvents","contractDependencies":[],"contractKind":"interface","documentation":{"id":1322,"nodeType":"StructuredDocumentation","src":"409:91:9","text":"@dev Events are declared inside an interface (namespace) to improve DX with Typechain."},"fullyImplemented":true,"id":1547,"linearizedBaseContracts":[1547],"name":"IVaultEvents","nameLocation":"510:12:9","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1323,"nodeType":"StructuredDocumentation","src":"529:657:9","text":" @notice A Pool was registered by calling `registerPool`.\n @param pool The pool being registered\n @param factory The factory creating the pool\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param swapFeePercentage The static swap fee of the pool\n @param pauseWindowEndTime The pool's pause window end time\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param hooksConfig Flags indicating which hooks the pool supports and address of hooks contract\n @param liquidityManagement Supported liquidity management hook flags"},"eventSelector":"bc1561eeab9f40962e2fb827a7ff9c7cdb47a9d7c84caeefa4ed90e043842dad","id":1346,"name":"PoolRegistered","nameLocation":"1197:14:9","nodeType":"EventDefinition","parameters":{"id":1345,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1325,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1237:4:9","nodeType":"VariableDeclaration","scope":1346,"src":"1221:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1324,"name":"address","nodeType":"ElementaryTypeName","src":"1221:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1327,"indexed":true,"mutability":"mutable","name":"factory","nameLocation":"1267:7:9","nodeType":"VariableDeclaration","scope":1346,"src":"1251:23:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1326,"name":"address","nodeType":"ElementaryTypeName","src":"1251:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1331,"indexed":false,"mutability":"mutable","name":"tokenConfig","nameLocation":"1298:11:9","nodeType":"VariableDeclaration","scope":1346,"src":"1284:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2234_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":1329,"nodeType":"UserDefinedTypeName","pathNode":{"id":1328,"name":"TokenConfig","nameLocations":["1284:11:9"],"nodeType":"IdentifierPath","referencedDeclaration":2234,"src":"1284:11:9"},"referencedDeclaration":2234,"src":"1284:11:9","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2234_storage_ptr","typeString":"struct TokenConfig"}},"id":1330,"nodeType":"ArrayTypeName","src":"1284:13:9","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2234_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":1333,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1327:17:9","nodeType":"VariableDeclaration","scope":1346,"src":"1319:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1332,"name":"uint256","nodeType":"ElementaryTypeName","src":"1319:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1335,"indexed":false,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"1361:18:9","nodeType":"VariableDeclaration","scope":1346,"src":"1354:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1334,"name":"uint32","nodeType":"ElementaryTypeName","src":"1354:6:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1338,"indexed":false,"mutability":"mutable","name":"roleAccounts","nameLocation":"1406:12:9","nodeType":"VariableDeclaration","scope":1346,"src":"1389:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":1337,"nodeType":"UserDefinedTypeName","pathNode":{"id":1336,"name":"PoolRoleAccounts","nameLocations":["1389:16:9"],"nodeType":"IdentifierPath","referencedDeclaration":2217,"src":"1389:16:9"},"referencedDeclaration":2217,"src":"1389:16:9","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":1341,"indexed":false,"mutability":"mutable","name":"hooksConfig","nameLocation":"1440:11:9","nodeType":"VariableDeclaration","scope":1346,"src":"1428:23:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2191_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":1340,"nodeType":"UserDefinedTypeName","pathNode":{"id":1339,"name":"HooksConfig","nameLocations":["1428:11:9"],"nodeType":"IdentifierPath","referencedDeclaration":2191,"src":"1428:11:9"},"referencedDeclaration":2191,"src":"1428:11:9","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2191_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"},{"constant":false,"id":1344,"indexed":false,"mutability":"mutable","name":"liquidityManagement","nameLocation":"1481:19:9","nodeType":"VariableDeclaration","scope":1346,"src":"1461:39:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2120_memory_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":1343,"nodeType":"UserDefinedTypeName","pathNode":{"id":1342,"name":"LiquidityManagement","nameLocations":["1461:19:9"],"nodeType":"IdentifierPath","referencedDeclaration":2120,"src":"1461:19:9"},"referencedDeclaration":2120,"src":"1461:19:9","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2120_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"1211:295:9"},"src":"1191:316:9"},{"anonymous":false,"documentation":{"id":1347,"nodeType":"StructuredDocumentation","src":"1513:120:9","text":" @notice A Pool was initialized by calling `initialize`.\n @param pool The pool being initialized"},"eventSelector":"cad8c9d32507393b6508ca4a888b81979919b477510585bde8488f153072d6f3","id":1351,"name":"PoolInitialized","nameLocation":"1644:15:9","nodeType":"EventDefinition","parameters":{"id":1350,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1349,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1676:4:9","nodeType":"VariableDeclaration","scope":1351,"src":"1660:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1348,"name":"address","nodeType":"ElementaryTypeName","src":"1660:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1659:22:9"},"src":"1638:44:9"},{"anonymous":false,"documentation":{"id":1352,"nodeType":"StructuredDocumentation","src":"1688:478:9","text":" @notice A swap has occurred.\n @param pool The pool with the tokens being swapped\n @param tokenIn The token entering the Vault (balance increases)\n @param tokenOut The token leaving the Vault (balance decreases)\n @param amountIn Number of tokenIn tokens\n @param amountOut Number of tokenOut tokens\n @param swapFeePercentage Swap fee percentage applied (can differ if dynamic)\n @param swapFeeAmount Swap fee amount paid"},"eventSelector":"0874b2d545cb271cdbda4e093020c452328b24af12382ed62c4d00f5c26709db","id":1370,"name":"Swap","nameLocation":"2177:4:9","nodeType":"EventDefinition","parameters":{"id":1369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1354,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2207:4:9","nodeType":"VariableDeclaration","scope":1370,"src":"2191:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1353,"name":"address","nodeType":"ElementaryTypeName","src":"2191:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1357,"indexed":true,"mutability":"mutable","name":"tokenIn","nameLocation":"2236:7:9","nodeType":"VariableDeclaration","scope":1370,"src":"2221:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":1356,"nodeType":"UserDefinedTypeName","pathNode":{"id":1355,"name":"IERC20","nameLocations":["2221:6:9"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"2221:6:9"},"referencedDeclaration":6486,"src":"2221:6:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1360,"indexed":true,"mutability":"mutable","name":"tokenOut","nameLocation":"2268:8:9","nodeType":"VariableDeclaration","scope":1370,"src":"2253:23:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":1359,"nodeType":"UserDefinedTypeName","pathNode":{"id":1358,"name":"IERC20","nameLocations":["2253:6:9"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"2253:6:9"},"referencedDeclaration":6486,"src":"2253:6:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1362,"indexed":false,"mutability":"mutable","name":"amountIn","nameLocation":"2294:8:9","nodeType":"VariableDeclaration","scope":1370,"src":"2286:16:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1361,"name":"uint256","nodeType":"ElementaryTypeName","src":"2286:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1364,"indexed":false,"mutability":"mutable","name":"amountOut","nameLocation":"2320:9:9","nodeType":"VariableDeclaration","scope":1370,"src":"2312:17:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1363,"name":"uint256","nodeType":"ElementaryTypeName","src":"2312:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1366,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"2347:17:9","nodeType":"VariableDeclaration","scope":1370,"src":"2339:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1365,"name":"uint256","nodeType":"ElementaryTypeName","src":"2339:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1368,"indexed":false,"mutability":"mutable","name":"swapFeeAmount","nameLocation":"2382:13:9","nodeType":"VariableDeclaration","scope":1370,"src":"2374:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1367,"name":"uint256","nodeType":"ElementaryTypeName","src":"2374:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2181:220:9"},"src":"2171:231:9"},{"anonymous":false,"documentation":{"id":1371,"nodeType":"StructuredDocumentation","src":"2408:352:9","text":" @notice A wrap operation has occurred.\n @param wrappedToken The wrapped token address\n @param depositedUnderlying Number of underlying tokens deposited\n @param mintedShares Number of shares (wrapped tokens) minted\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"3771d13c67011e31e12031c54bb59b0bf544a80b81d280a3711e172aa8b7f47b","id":1382,"name":"Wrap","nameLocation":"2771:4:9","nodeType":"EventDefinition","parameters":{"id":1381,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1374,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"2802:12:9","nodeType":"VariableDeclaration","scope":1382,"src":"2785:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1373,"nodeType":"UserDefinedTypeName","pathNode":{"id":1372,"name":"IERC4626","nameLocations":["2785:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"2785:8:9"},"referencedDeclaration":6408,"src":"2785:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1376,"indexed":false,"mutability":"mutable","name":"depositedUnderlying","nameLocation":"2832:19:9","nodeType":"VariableDeclaration","scope":1382,"src":"2824:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1375,"name":"uint256","nodeType":"ElementaryTypeName","src":"2824:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1378,"indexed":false,"mutability":"mutable","name":"mintedShares","nameLocation":"2869:12:9","nodeType":"VariableDeclaration","scope":1382,"src":"2861:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1377,"name":"uint256","nodeType":"ElementaryTypeName","src":"2861:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1380,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"2899:14:9","nodeType":"VariableDeclaration","scope":1382,"src":"2891:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1379,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2891:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2775:144:9"},"src":"2765:155:9"},{"anonymous":false,"documentation":{"id":1383,"nodeType":"StructuredDocumentation","src":"2926:355:9","text":" @notice An unwrap operation has occurred.\n @param wrappedToken The wrapped token address\n @param burnedShares Number of shares (wrapped tokens) burned\n @param withdrawnUnderlying Number of underlying tokens withdrawn\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"eeb740c90bf2b18c9532eb7d473137767036d893dff3e009f32718f821b2a4c0","id":1394,"name":"Unwrap","nameLocation":"3292:6:9","nodeType":"EventDefinition","parameters":{"id":1393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1386,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"3325:12:9","nodeType":"VariableDeclaration","scope":1394,"src":"3308:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1385,"nodeType":"UserDefinedTypeName","pathNode":{"id":1384,"name":"IERC4626","nameLocations":["3308:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"3308:8:9"},"referencedDeclaration":6408,"src":"3308:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1388,"indexed":false,"mutability":"mutable","name":"burnedShares","nameLocation":"3355:12:9","nodeType":"VariableDeclaration","scope":1394,"src":"3347:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1387,"name":"uint256","nodeType":"ElementaryTypeName","src":"3347:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1390,"indexed":false,"mutability":"mutable","name":"withdrawnUnderlying","nameLocation":"3385:19:9","nodeType":"VariableDeclaration","scope":1394,"src":"3377:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1389,"name":"uint256","nodeType":"ElementaryTypeName","src":"3377:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1392,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"3422:14:9","nodeType":"VariableDeclaration","scope":1394,"src":"3414:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1391,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3414:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3298:144:9"},"src":"3286:157:9"},{"anonymous":false,"documentation":{"id":1395,"nodeType":"StructuredDocumentation","src":"3449:562:9","text":" @notice Liquidity has been added to a pool (including initialization).\n @param pool The pool with liquidity added\n @param liquidityProvider The user performing the operation\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param totalSupply The total supply of the pool after the operation\n @param amountsAddedRaw The amount of each token that was added, sorted in token registration order\n @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order"},"eventSelector":"a26a52d8d53702bba7f137907b8e1f99ff87f6d450144270ca25e72481cca871","id":1412,"name":"LiquidityAdded","nameLocation":"4022:14:9","nodeType":"EventDefinition","parameters":{"id":1411,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1397,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4062:4:9","nodeType":"VariableDeclaration","scope":1412,"src":"4046:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1396,"name":"address","nodeType":"ElementaryTypeName","src":"4046:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1399,"indexed":true,"mutability":"mutable","name":"liquidityProvider","nameLocation":"4092:17:9","nodeType":"VariableDeclaration","scope":1412,"src":"4076:33:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1398,"name":"address","nodeType":"ElementaryTypeName","src":"4076:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1402,"indexed":true,"mutability":"mutable","name":"kind","nameLocation":"4144:4:9","nodeType":"VariableDeclaration","scope":1412,"src":"4119:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2347","typeString":"enum AddLiquidityKind"},"typeName":{"id":1401,"nodeType":"UserDefinedTypeName","pathNode":{"id":1400,"name":"AddLiquidityKind","nameLocations":["4119:16:9"],"nodeType":"IdentifierPath","referencedDeclaration":2347,"src":"4119:16:9"},"referencedDeclaration":2347,"src":"4119:16:9","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2347","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1404,"indexed":false,"mutability":"mutable","name":"totalSupply","nameLocation":"4166:11:9","nodeType":"VariableDeclaration","scope":1412,"src":"4158:19:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1403,"name":"uint256","nodeType":"ElementaryTypeName","src":"4158:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1407,"indexed":false,"mutability":"mutable","name":"amountsAddedRaw","nameLocation":"4197:15:9","nodeType":"VariableDeclaration","scope":1412,"src":"4187:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1405,"name":"uint256","nodeType":"ElementaryTypeName","src":"4187:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1406,"nodeType":"ArrayTypeName","src":"4187:9:9","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1410,"indexed":false,"mutability":"mutable","name":"swapFeeAmountsRaw","nameLocation":"4232:17:9","nodeType":"VariableDeclaration","scope":1412,"src":"4222:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1408,"name":"uint256","nodeType":"ElementaryTypeName","src":"4222:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1409,"nodeType":"ArrayTypeName","src":"4222:9:9","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4036:219:9"},"src":"4016:240:9"},{"anonymous":false,"documentation":{"id":1413,"nodeType":"StructuredDocumentation","src":"4262:548:9","text":" @notice Liquidity has been removed from a pool.\n @param pool The pool with liquidity removed\n @param liquidityProvider The user performing the operation\n @param kind The remove liquidity operation type (e.g., proportional, custom)\n @param totalSupply The total supply of the pool after the operation\n @param amountsRemovedRaw The amount of each token that was removed, sorted in token registration order\n @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order"},"eventSelector":"fbe5b0d79fb94f1e81c0a92bf86ae9d3a19e9d1bf6202c0d3e75120f65d5d8a5","id":1430,"name":"LiquidityRemoved","nameLocation":"4821:16:9","nodeType":"EventDefinition","parameters":{"id":1429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1415,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4863:4:9","nodeType":"VariableDeclaration","scope":1430,"src":"4847:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1414,"name":"address","nodeType":"ElementaryTypeName","src":"4847:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1417,"indexed":true,"mutability":"mutable","name":"liquidityProvider","nameLocation":"4893:17:9","nodeType":"VariableDeclaration","scope":1430,"src":"4877:33:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1416,"name":"address","nodeType":"ElementaryTypeName","src":"4877:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1420,"indexed":true,"mutability":"mutable","name":"kind","nameLocation":"4948:4:9","nodeType":"VariableDeclaration","scope":1430,"src":"4920:32:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2368","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":1419,"nodeType":"UserDefinedTypeName","pathNode":{"id":1418,"name":"RemoveLiquidityKind","nameLocations":["4920:19:9"],"nodeType":"IdentifierPath","referencedDeclaration":2368,"src":"4920:19:9"},"referencedDeclaration":2368,"src":"4920:19:9","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2368","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1422,"indexed":false,"mutability":"mutable","name":"totalSupply","nameLocation":"4970:11:9","nodeType":"VariableDeclaration","scope":1430,"src":"4962:19:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1421,"name":"uint256","nodeType":"ElementaryTypeName","src":"4962:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1425,"indexed":false,"mutability":"mutable","name":"amountsRemovedRaw","nameLocation":"5001:17:9","nodeType":"VariableDeclaration","scope":1430,"src":"4991:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1423,"name":"uint256","nodeType":"ElementaryTypeName","src":"4991:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1424,"nodeType":"ArrayTypeName","src":"4991:9:9","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1428,"indexed":false,"mutability":"mutable","name":"swapFeeAmountsRaw","nameLocation":"5038:17:9","nodeType":"VariableDeclaration","scope":1430,"src":"5028:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1426,"name":"uint256","nodeType":"ElementaryTypeName","src":"5028:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1427,"nodeType":"ArrayTypeName","src":"5028:9:9","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4837:224:9"},"src":"4815:247:9"},{"anonymous":false,"documentation":{"id":1431,"nodeType":"StructuredDocumentation","src":"5068:114:9","text":" @notice The Vault's pause status has changed.\n @param paused True if the Vault was paused"},"eventSelector":"e0629fe656e45ad7fd63a24b899da368690024c07043b88e57aee5095b1d3d02","id":1435,"name":"VaultPausedStateChanged","nameLocation":"5193:23:9","nodeType":"EventDefinition","parameters":{"id":1434,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1433,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"5222:6:9","nodeType":"VariableDeclaration","scope":1435,"src":"5217:11:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1432,"name":"bool","nodeType":"ElementaryTypeName","src":"5217:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5216:13:9"},"src":"5187:43:9"},{"anonymous":false,"documentation":{"id":1436,"nodeType":"StructuredDocumentation","src":"5236:87:9","text":"@notice `disableQuery` has been called on the Vault, disabling query functionality."},"eventSelector":"bd204090fd387f08e3076528bf09b4fc99d8100d749eace96c06002d3fedc625","id":1438,"name":"VaultQueriesDisabled","nameLocation":"5334:20:9","nodeType":"EventDefinition","parameters":{"id":1437,"nodeType":"ParameterList","parameters":[],"src":"5354:2:9"},"src":"5328:29:9"},{"anonymous":false,"documentation":{"id":1439,"nodeType":"StructuredDocumentation","src":"5363:85:9","text":"@notice `enableQuery` has been called on the Vault, enabling query functionality."},"eventSelector":"91d7478835f2b5adc315f5aad920f4a7f0a02f7fddf3042d17b2c80168ea17f5","id":1441,"name":"VaultQueriesEnabled","nameLocation":"5459:19:9","nodeType":"EventDefinition","parameters":{"id":1440,"nodeType":"ParameterList","parameters":[],"src":"5478:2:9"},"src":"5453:28:9"},{"anonymous":false,"documentation":{"id":1442,"nodeType":"StructuredDocumentation","src":"5487:171:9","text":" @notice A Pool's pause status has changed.\n @param pool The pool that was just paused or unpaused\n @param paused True if the pool was paused"},"eventSelector":"57e20448028297190122571be7cb6c1b1ef85730c673f7c72f533c8662419aa7","id":1448,"name":"PoolPausedStateChanged","nameLocation":"5669:22:9","nodeType":"EventDefinition","parameters":{"id":1447,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1444,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5708:4:9","nodeType":"VariableDeclaration","scope":1448,"src":"5692:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1443,"name":"address","nodeType":"ElementaryTypeName","src":"5692:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1446,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"5719:6:9","nodeType":"VariableDeclaration","scope":1448,"src":"5714:11:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1445,"name":"bool","nodeType":"ElementaryTypeName","src":"5714:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5691:35:9"},"src":"5663:64:9"},{"anonymous":false,"documentation":{"id":1449,"nodeType":"StructuredDocumentation","src":"5733:158:9","text":" @notice Emitted when the swap fee percentage of a pool is updated.\n @param swapFeePercentage The new swap fee percentage for the pool"},"eventSelector":"89d41522342fabac1471ca6073a5623e5caf367b03ca6e9a001478d0cf8be4a1","id":1455,"name":"SwapFeePercentageChanged","nameLocation":"5902:24:9","nodeType":"EventDefinition","parameters":{"id":1454,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1451,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5943:4:9","nodeType":"VariableDeclaration","scope":1455,"src":"5927:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1450,"name":"address","nodeType":"ElementaryTypeName","src":"5927:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1453,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"5957:17:9","nodeType":"VariableDeclaration","scope":1455,"src":"5949:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1452,"name":"uint256","nodeType":"ElementaryTypeName","src":"5949:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5926:49:9"},"src":"5896:80:9"},{"anonymous":false,"documentation":{"id":1456,"nodeType":"StructuredDocumentation","src":"5982:170:9","text":" @notice Recovery mode has been enabled or disabled for a pool.\n @param pool The pool\n @param recoveryMode True if recovery mode was enabled"},"eventSelector":"c2354cc2f78ea57777e55ddd43a7f22b112ce98868596880edaeb22b4f9c73a9","id":1462,"name":"PoolRecoveryModeStateChanged","nameLocation":"6163:28:9","nodeType":"EventDefinition","parameters":{"id":1461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1458,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6208:4:9","nodeType":"VariableDeclaration","scope":1462,"src":"6192:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1457,"name":"address","nodeType":"ElementaryTypeName","src":"6192:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1460,"indexed":false,"mutability":"mutable","name":"recoveryMode","nameLocation":"6219:12:9","nodeType":"VariableDeclaration","scope":1462,"src":"6214:17:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1459,"name":"bool","nodeType":"ElementaryTypeName","src":"6214:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6191:41:9"},"src":"6157:76:9"},{"anonymous":false,"documentation":{"id":1463,"nodeType":"StructuredDocumentation","src":"6239:353:9","text":" @notice A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\n @dev The `ProtocolFeeController` will emit an event with the underlying change.\n @param pool The pool whose aggregate swap fee percentage changed\n @param aggregateSwapFeePercentage The new aggregate swap fee percentage"},"eventSelector":"e4d371097beea42453a37406e2aef4c04f3c548f84ac50e72578662c0dcd7354","id":1469,"name":"AggregateSwapFeePercentageChanged","nameLocation":"6603:33:9","nodeType":"EventDefinition","parameters":{"id":1468,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1465,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6653:4:9","nodeType":"VariableDeclaration","scope":1469,"src":"6637:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1464,"name":"address","nodeType":"ElementaryTypeName","src":"6637:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1467,"indexed":false,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"6667:26:9","nodeType":"VariableDeclaration","scope":1469,"src":"6659:34:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1466,"name":"uint256","nodeType":"ElementaryTypeName","src":"6659:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6636:58:9"},"src":"6597:98:9"},{"anonymous":false,"documentation":{"id":1470,"nodeType":"StructuredDocumentation","src":"6701:357:9","text":" @notice A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\n @dev The `ProtocolFeeController` will emit an event with the underlying change.\n @param pool The pool whose aggregate yield fee percentage changed\n @param aggregateYieldFeePercentage The new aggregate yield fee percentage"},"eventSelector":"606eb97d83164bd6b200d638cd49c14c65d94d4f2c674cfd85e24e0e202c3ca5","id":1476,"name":"AggregateYieldFeePercentageChanged","nameLocation":"7069:34:9","nodeType":"EventDefinition","parameters":{"id":1475,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1472,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"7120:4:9","nodeType":"VariableDeclaration","scope":1476,"src":"7104:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1471,"name":"address","nodeType":"ElementaryTypeName","src":"7104:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1474,"indexed":false,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"7134:27:9","nodeType":"VariableDeclaration","scope":1476,"src":"7126:35:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1473,"name":"uint256","nodeType":"ElementaryTypeName","src":"7126:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7103:59:9"},"src":"7063:100:9"},{"anonymous":false,"documentation":{"id":1477,"nodeType":"StructuredDocumentation","src":"7169:132:9","text":" @notice A new authorizer is set by `setAuthorizer`.\n @param newAuthorizer The address of the new authorizer"},"eventSelector":"94b979b6831a51293e2641426f97747feed46f17779fed9cd18d1ecefcfe92ef","id":1482,"name":"AuthorizerChanged","nameLocation":"7312:17:9","nodeType":"EventDefinition","parameters":{"id":1481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1480,"indexed":true,"mutability":"mutable","name":"newAuthorizer","nameLocation":"7350:13:9","nodeType":"VariableDeclaration","scope":1482,"src":"7330:33:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"},"typeName":{"id":1479,"nodeType":"UserDefinedTypeName","pathNode":{"id":1478,"name":"IAuthorizer","nameLocations":["7330:11:9"],"nodeType":"IdentifierPath","referencedDeclaration":73,"src":"7330:11:9"},"referencedDeclaration":73,"src":"7330:11:9","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"7329:35:9"},"src":"7306:59:9"},{"anonymous":false,"documentation":{"id":1483,"nodeType":"StructuredDocumentation","src":"7371:180:9","text":" @notice A new protocol fee controller is set by `setProtocolFeeController`.\n @param newProtocolFeeController The address of the new protocol fee controller"},"eventSelector":"280a60b1e63c1774d397d35cce80eb80e51408ead755fb446e6f744ce98e5df0","id":1488,"name":"ProtocolFeeControllerChanged","nameLocation":"7562:28:9","nodeType":"EventDefinition","parameters":{"id":1487,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1486,"indexed":true,"mutability":"mutable","name":"newProtocolFeeController","nameLocation":"7622:24:9","nodeType":"VariableDeclaration","scope":1488,"src":"7591:55:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"},"typeName":{"id":1485,"nodeType":"UserDefinedTypeName","pathNode":{"id":1484,"name":"IProtocolFeeController","nameLocations":["7591:22:9"],"nodeType":"IdentifierPath","referencedDeclaration":613,"src":"7591:22:9"},"referencedDeclaration":613,"src":"7591:22:9","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"7590:57:9"},"src":"7556:92:9"},{"anonymous":false,"documentation":{"id":1489,"nodeType":"StructuredDocumentation","src":"7654:553:9","text":" @notice Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\n @dev The underlying token can be derived from the wrapped token, so it's not included here.\n @param wrappedToken The wrapped token that identifies the buffer\n @param amountUnderlying The amount of the underlying token that was deposited\n @param amountWrapped The amount of the wrapped token that was deposited\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"75c4dc5f23640eeba7d404d9165f515fc3d9e23a5c8b6e2d09b4b9da56ff00a9","id":1500,"name":"LiquidityAddedToBuffer","nameLocation":"8218:22:9","nodeType":"EventDefinition","parameters":{"id":1499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1492,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"8267:12:9","nodeType":"VariableDeclaration","scope":1500,"src":"8250:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1491,"nodeType":"UserDefinedTypeName","pathNode":{"id":1490,"name":"IERC4626","nameLocations":["8250:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"8250:8:9"},"referencedDeclaration":6408,"src":"8250:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1494,"indexed":false,"mutability":"mutable","name":"amountUnderlying","nameLocation":"8297:16:9","nodeType":"VariableDeclaration","scope":1500,"src":"8289:24:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1493,"name":"uint256","nodeType":"ElementaryTypeName","src":"8289:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1496,"indexed":false,"mutability":"mutable","name":"amountWrapped","nameLocation":"8331:13:9","nodeType":"VariableDeclaration","scope":1500,"src":"8323:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1495,"name":"uint256","nodeType":"ElementaryTypeName","src":"8323:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1498,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"8362:14:9","nodeType":"VariableDeclaration","scope":1500,"src":"8354:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1497,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8354:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8240:142:9"},"src":"8212:171:9"},{"anonymous":false,"documentation":{"id":1501,"nodeType":"StructuredDocumentation","src":"8389:570:9","text":" @notice Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\n @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n \"totalSupply\" of a buffer.\n @param wrappedToken The wrapped token that identifies the buffer\n @param to The owner of the minted shares\n @param issuedShares The amount of \"internal BPT\" shares created"},"eventSelector":"d66f031d33381c6408f0b32c884461e5de3df8808399b6f3a3d86b1368f8ec34","id":1510,"name":"BufferSharesMinted","nameLocation":"8970:18:9","nodeType":"EventDefinition","parameters":{"id":1509,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1504,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"9006:12:9","nodeType":"VariableDeclaration","scope":1510,"src":"8989:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1503,"nodeType":"UserDefinedTypeName","pathNode":{"id":1502,"name":"IERC4626","nameLocations":["8989:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"8989:8:9"},"referencedDeclaration":6408,"src":"8989:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1506,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"9036:2:9","nodeType":"VariableDeclaration","scope":1510,"src":"9020:18:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1505,"name":"address","nodeType":"ElementaryTypeName","src":"9020:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1508,"indexed":false,"mutability":"mutable","name":"issuedShares","nameLocation":"9048:12:9","nodeType":"VariableDeclaration","scope":1510,"src":"9040:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1507,"name":"uint256","nodeType":"ElementaryTypeName","src":"9040:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8988:73:9"},"src":"8964:98:9"},{"anonymous":false,"documentation":{"id":1511,"nodeType":"StructuredDocumentation","src":"9068:571:9","text":" @notice Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\n @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n \"totalSupply\" of a buffer.\n @param wrappedToken The wrapped token that identifies the buffer\n @param from The owner of the burned shares\n @param burnedShares The amount of \"internal BPT\" shares burned"},"eventSelector":"4e09f7f7fc37ce2897800e2c2a9099565edb0a133d19d84a6871b3530af8846b","id":1520,"name":"BufferSharesBurned","nameLocation":"9650:18:9","nodeType":"EventDefinition","parameters":{"id":1519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1514,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"9686:12:9","nodeType":"VariableDeclaration","scope":1520,"src":"9669:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1513,"nodeType":"UserDefinedTypeName","pathNode":{"id":1512,"name":"IERC4626","nameLocations":["9669:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"9669:8:9"},"referencedDeclaration":6408,"src":"9669:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1516,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"9716:4:9","nodeType":"VariableDeclaration","scope":1520,"src":"9700:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1515,"name":"address","nodeType":"ElementaryTypeName","src":"9700:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1518,"indexed":false,"mutability":"mutable","name":"burnedShares","nameLocation":"9730:12:9","nodeType":"VariableDeclaration","scope":1520,"src":"9722:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1517,"name":"uint256","nodeType":"ElementaryTypeName","src":"9722:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9668:75:9"},"src":"9644:100:9"},{"anonymous":false,"documentation":{"id":1521,"nodeType":"StructuredDocumentation","src":"9750:509:9","text":" @notice Liquidity was removed from an ERC4626 buffer.\n @dev The underlying token can be derived from the wrapped token, so it's not included here.\n @param wrappedToken The wrapped token that identifies the buffer\n @param amountUnderlying The amount of the underlying token that was withdrawn\n @param amountWrapped The amount of the wrapped token that was withdrawn\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"44d97b36e99b590b3d2875aad3b167b1d7fb1e063f3f1325a1eeac76caee5113","id":1532,"name":"LiquidityRemovedFromBuffer","nameLocation":"10270:26:9","nodeType":"EventDefinition","parameters":{"id":1531,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1524,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"10323:12:9","nodeType":"VariableDeclaration","scope":1532,"src":"10306:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1523,"nodeType":"UserDefinedTypeName","pathNode":{"id":1522,"name":"IERC4626","nameLocations":["10306:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"10306:8:9"},"referencedDeclaration":6408,"src":"10306:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1526,"indexed":false,"mutability":"mutable","name":"amountUnderlying","nameLocation":"10353:16:9","nodeType":"VariableDeclaration","scope":1532,"src":"10345:24:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1525,"name":"uint256","nodeType":"ElementaryTypeName","src":"10345:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1528,"indexed":false,"mutability":"mutable","name":"amountWrapped","nameLocation":"10387:13:9","nodeType":"VariableDeclaration","scope":1532,"src":"10379:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1527,"name":"uint256","nodeType":"ElementaryTypeName","src":"10379:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1530,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"10418:14:9","nodeType":"VariableDeclaration","scope":1532,"src":"10410:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1529,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10410:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"10296:142:9"},"src":"10264:175:9"},{"anonymous":false,"documentation":{"id":1533,"nodeType":"StructuredDocumentation","src":"10445:278:9","text":" @notice The Vault buffers pause status has changed.\n @dev If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer`\n set to true) will revert.\n @param paused True if the Vault buffers were paused"},"eventSelector":"300c7ca619eb846386aa0a6e5916ac2a41406448b0a2e99ba9ccafeb899015a5","id":1537,"name":"VaultBuffersPausedStateChanged","nameLocation":"10734:30:9","nodeType":"EventDefinition","parameters":{"id":1536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1535,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"10770:6:9","nodeType":"VariableDeclaration","scope":1537,"src":"10765:11:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1534,"name":"bool","nodeType":"ElementaryTypeName","src":"10765:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10764:13:9"},"src":"10728:50:9"},{"anonymous":false,"documentation":{"id":1538,"nodeType":"StructuredDocumentation","src":"10784:194:9","text":" @notice Pools can use this event to emit event data from the Vault.\n @param pool Pool address\n @param eventKey Event key\n @param eventData Encoded event data"},"eventSelector":"4bc4412e210115456903c65b5277d299a505e79f2eb852b92b1ca52d85856428","id":1546,"name":"VaultAuxiliary","nameLocation":"10989:14:9","nodeType":"EventDefinition","parameters":{"id":1545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1540,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"11020:4:9","nodeType":"VariableDeclaration","scope":1546,"src":"11004:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1539,"name":"address","nodeType":"ElementaryTypeName","src":"11004:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1542,"indexed":true,"mutability":"mutable","name":"eventKey","nameLocation":"11042:8:9","nodeType":"VariableDeclaration","scope":1546,"src":"11026:24:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1541,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11026:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1544,"indexed":false,"mutability":"mutable","name":"eventData","nameLocation":"11058:9:9","nodeType":"VariableDeclaration","scope":1546,"src":"11052:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1543,"name":"bytes","nodeType":"ElementaryTypeName","src":"11052:5:9","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11003:65:9"},"src":"10983:86:9"}],"scope":1548,"src":"500:10571:9","usedErrors":[],"usedEvents":[1346,1351,1370,1382,1394,1412,1430,1435,1438,1441,1448,1455,1462,1469,1476,1482,1488,1500,1510,1520,1532,1537,1546]}],"src":"46:11026:9"},"id":9},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","exportedSymbols":{"AddLiquidityKind":[2347],"AddLiquidityParams":[2363],"AfterSwapParams":[2341],"BufferWrapOrUnwrapParams":[2402],"FEE_BITLENGTH":[2405],"FEE_SCALING_FACTOR":[2408],"HookFlags":[2167],"HooksConfig":[2191],"IAuthorizer":[73],"IERC20":[6486],"IERC4626":[6408],"IHooks":[275],"IProtocolFeeController":[613],"IRateProvider":[57],"IVault":[651],"IVaultExtension":[1966],"LiquidityManagement":[2120],"MAX_FEE_PERCENTAGE":[2411],"PoolConfig":[2145],"PoolConfigBits":[2122],"PoolData":[2269],"PoolRoleAccounts":[2217],"PoolSwapParams":[2312],"RemoveLiquidityKind":[2368],"RemoveLiquidityParams":[2384],"Rounding":[2272],"SwapKind":[2275],"SwapState":[2201],"TokenConfig":[2234],"TokenInfo":[2244],"TokenType":[2221],"VaultState":[2209],"VaultSwapParams":[2294],"WrappingDirection":[2387]},"id":1967,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1549,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:10"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":1551,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1967,"sourceUnit":6409,"src":"72:75:10","symbolAliases":[{"foreign":{"id":1550,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6408,"src":"81:8:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1553,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1967,"sourceUnit":6487,"src":"148:72:10","symbolAliases":[{"foreign":{"id":1552,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6486,"src":"157:6:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":1555,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1967,"sourceUnit":74,"src":"222:48:10","symbolAliases":[{"foreign":{"id":1554,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73,"src":"231:11:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":1557,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1967,"sourceUnit":614,"src":"271:70:10","symbolAliases":[{"foreign":{"id":1556,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":613,"src":"280:22:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":1559,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1967,"sourceUnit":652,"src":"342:38:10","symbolAliases":[{"foreign":{"id":1558,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":651,"src":"351:6:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"./IHooks.sol","id":1561,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1967,"sourceUnit":276,"src":"381:38:10","symbolAliases":[{"foreign":{"id":1560,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":275,"src":"390:6:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":1562,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1967,"sourceUnit":2412,"src":"420:26:10","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultExtension","contractDependencies":[],"contractKind":"interface","documentation":{"id":1563,"nodeType":"StructuredDocumentation","src":"448:318:10","text":" @notice Interface for functions defined on the `VaultExtension` contract.\n @dev `VaultExtension` handles less critical or frequently used functions, since delegate calls through\n the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and\n liquidity operations."},"fullyImplemented":false,"id":1966,"linearizedBaseContracts":[1966],"name":"IVaultExtension","nameLocation":"777:15:10","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1564,"nodeType":"StructuredDocumentation","src":"1025:206:10","text":" @notice Returns the main Vault address.\n @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n @return vault The address of the main Vault"},"functionSelector":"fbfa77cf","id":1570,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"1245:5:10","nodeType":"FunctionDefinition","parameters":{"id":1565,"nodeType":"ParameterList","parameters":[],"src":"1250:2:10"},"returnParameters":{"id":1569,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1568,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1570,"src":"1276:6:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":1567,"nodeType":"UserDefinedTypeName","pathNode":{"id":1566,"name":"IVault","nameLocations":["1276:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"1276:6:10"},"referencedDeclaration":651,"src":"1276:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1275:8:10"},"scope":1966,"src":"1236:48:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1571,"nodeType":"StructuredDocumentation","src":"1290:202:10","text":" @notice Returns the VaultAdmin contract address.\n @dev The VaultAdmin contract mostly implements permissioned functions.\n @return vaultAdmin The address of the Vault admin"},"functionSelector":"1ba0ae45","id":1576,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultAdmin","nameLocation":"1506:13:10","nodeType":"FunctionDefinition","parameters":{"id":1572,"nodeType":"ParameterList","parameters":[],"src":"1519:2:10"},"returnParameters":{"id":1575,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1574,"mutability":"mutable","name":"vaultAdmin","nameLocation":"1553:10:10","nodeType":"VariableDeclaration","scope":1576,"src":"1545:18:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1573,"name":"address","nodeType":"ElementaryTypeName","src":"1545:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1544:20:10"},"scope":1966,"src":"1497:68:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1577,"nodeType":"StructuredDocumentation","src":"1793:254:10","text":" @notice Returns whether the Vault is unlocked (i.e., executing an operation).\n @dev The Vault must be unlocked to perform state-changing liquidity operations.\n @return unlocked True if the Vault is unlocked, false otherwise"},"functionSelector":"8380edb7","id":1582,"implemented":false,"kind":"function","modifiers":[],"name":"isUnlocked","nameLocation":"2061:10:10","nodeType":"FunctionDefinition","parameters":{"id":1578,"nodeType":"ParameterList","parameters":[],"src":"2071:2:10"},"returnParameters":{"id":1581,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1580,"mutability":"mutable","name":"unlocked","nameLocation":"2102:8:10","nodeType":"VariableDeclaration","scope":1582,"src":"2097:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1579,"name":"bool","nodeType":"ElementaryTypeName","src":"2097:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2096:15:10"},"scope":1966,"src":"2052:60:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1583,"nodeType":"StructuredDocumentation","src":"2118:141:10","text":" @notice Returns the count of non-zero deltas.\n @return nonzeroDeltaCount The current value of `_nonzeroDeltaCount`"},"functionSelector":"db817187","id":1588,"implemented":false,"kind":"function","modifiers":[],"name":"getNonzeroDeltaCount","nameLocation":"2273:20:10","nodeType":"FunctionDefinition","parameters":{"id":1584,"nodeType":"ParameterList","parameters":[],"src":"2293:2:10"},"returnParameters":{"id":1587,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1586,"mutability":"mutable","name":"nonzeroDeltaCount","nameLocation":"2327:17:10","nodeType":"VariableDeclaration","scope":1588,"src":"2319:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1585,"name":"uint256","nodeType":"ElementaryTypeName","src":"2319:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2318:27:10"},"scope":1966,"src":"2264:82:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1589,"nodeType":"StructuredDocumentation","src":"2352:284:10","text":" @notice Retrieves the token delta for a specific token.\n @dev This function allows reading the value from the `_tokenDeltas` mapping.\n @param token The token for which the delta is being fetched\n @return tokenDelta The delta of the specified token"},"functionSelector":"9e825ff5","id":1597,"implemented":false,"kind":"function","modifiers":[],"name":"getTokenDelta","nameLocation":"2650:13:10","nodeType":"FunctionDefinition","parameters":{"id":1593,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1592,"mutability":"mutable","name":"token","nameLocation":"2671:5:10","nodeType":"VariableDeclaration","scope":1597,"src":"2664:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":1591,"nodeType":"UserDefinedTypeName","pathNode":{"id":1590,"name":"IERC20","nameLocations":["2664:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"2664:6:10"},"referencedDeclaration":6486,"src":"2664:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2663:14:10"},"returnParameters":{"id":1596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1595,"mutability":"mutable","name":"tokenDelta","nameLocation":"2708:10:10","nodeType":"VariableDeclaration","scope":1597,"src":"2701:17:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1594,"name":"int256","nodeType":"ElementaryTypeName","src":"2701:6:10","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"2700:19:10"},"scope":1966,"src":"2641:79:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1598,"nodeType":"StructuredDocumentation","src":"2726:230:10","text":" @notice Retrieves the reserve (i.e., total Vault balance) of a given token.\n @param token The token for which to retrieve the reserve\n @return reserveAmount The amount of reserves for the given token"},"functionSelector":"96787092","id":1606,"implemented":false,"kind":"function","modifiers":[],"name":"getReservesOf","nameLocation":"2970:13:10","nodeType":"FunctionDefinition","parameters":{"id":1602,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1601,"mutability":"mutable","name":"token","nameLocation":"2991:5:10","nodeType":"VariableDeclaration","scope":1606,"src":"2984:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":1600,"nodeType":"UserDefinedTypeName","pathNode":{"id":1599,"name":"IERC20","nameLocations":["2984:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"2984:6:10"},"referencedDeclaration":6486,"src":"2984:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2983:14:10"},"returnParameters":{"id":1605,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1604,"mutability":"mutable","name":"reserveAmount","nameLocation":"3029:13:10","nodeType":"VariableDeclaration","scope":1606,"src":"3021:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1603,"name":"uint256","nodeType":"ElementaryTypeName","src":"3021:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3020:23:10"},"scope":1966,"src":"2961:83:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1607,"nodeType":"StructuredDocumentation","src":"3050:944:10","text":" @notice This flag is used to detect and tax \"round-trip\" interactions (adding and removing liquidity in the\n same pool).\n @dev Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra\n layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional\n is the only standard way to exit a position without fees, and this flag is used to enable fees in that case.\n It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse\n than a simple swap for every pool type.\n @param pool Address of the pool to check\n @return liquidityAdded True if liquidity has been added to this pool in the current transaction\n Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session."},"functionSelector":"ace9b89b","id":1614,"implemented":false,"kind":"function","modifiers":[],"name":"getAddLiquidityCalledFlag","nameLocation":"4008:25:10","nodeType":"FunctionDefinition","parameters":{"id":1610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1609,"mutability":"mutable","name":"pool","nameLocation":"4042:4:10","nodeType":"VariableDeclaration","scope":1614,"src":"4034:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1608,"name":"address","nodeType":"ElementaryTypeName","src":"4034:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4033:14:10"},"returnParameters":{"id":1613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1612,"mutability":"mutable","name":"liquidityAdded","nameLocation":"4076:14:10","nodeType":"VariableDeclaration","scope":1614,"src":"4071:19:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1611,"name":"bool","nodeType":"ElementaryTypeName","src":"4071:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4070:21:10"},"scope":1966,"src":"3999:93:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1615,"nodeType":"StructuredDocumentation","src":"4323:1604:10","text":" @notice Registers a pool, associating it with its factory and the tokens it manages.\n @dev A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely\n by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an\n additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused\n pool will automatically unpause. Balancer timestamps are 32 bits.\n A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a\n multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to\n the Vault.\n If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the\n authorizer.\n @param pool The address of the pool being registered\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param swapFeePercentage The initial static swap fee percentage of the pool\n @param pauseWindowEndTime The timestamp after which it is no longer possible to pause the pool\n @param protocolFeeExempt If true, the pool's initial aggregate fees will be set to 0\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param poolHooksContract Contract that implements the hooks for the pool\n @param liquidityManagement Liquidity management flags with implemented methods"},"functionSelector":"eeec802f","id":1638,"implemented":false,"kind":"function","modifiers":[],"name":"registerPool","nameLocation":"5941:12:10","nodeType":"FunctionDefinition","parameters":{"id":1636,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1617,"mutability":"mutable","name":"pool","nameLocation":"5971:4:10","nodeType":"VariableDeclaration","scope":1638,"src":"5963:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1616,"name":"address","nodeType":"ElementaryTypeName","src":"5963:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1621,"mutability":"mutable","name":"tokenConfig","nameLocation":"6006:11:10","nodeType":"VariableDeclaration","scope":1638,"src":"5985:32:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2234_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":1619,"nodeType":"UserDefinedTypeName","pathNode":{"id":1618,"name":"TokenConfig","nameLocations":["5985:11:10"],"nodeType":"IdentifierPath","referencedDeclaration":2234,"src":"5985:11:10"},"referencedDeclaration":2234,"src":"5985:11:10","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2234_storage_ptr","typeString":"struct TokenConfig"}},"id":1620,"nodeType":"ArrayTypeName","src":"5985:13:10","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2234_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":1623,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"6035:17:10","nodeType":"VariableDeclaration","scope":1638,"src":"6027:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1622,"name":"uint256","nodeType":"ElementaryTypeName","src":"6027:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1625,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"6069:18:10","nodeType":"VariableDeclaration","scope":1638,"src":"6062:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1624,"name":"uint32","nodeType":"ElementaryTypeName","src":"6062:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1627,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"6102:17:10","nodeType":"VariableDeclaration","scope":1638,"src":"6097:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1626,"name":"bool","nodeType":"ElementaryTypeName","src":"6097:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1630,"mutability":"mutable","name":"roleAccounts","nameLocation":"6155:12:10","nodeType":"VariableDeclaration","scope":1638,"src":"6129:38:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_calldata_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":1629,"nodeType":"UserDefinedTypeName","pathNode":{"id":1628,"name":"PoolRoleAccounts","nameLocations":["6129:16:10"],"nodeType":"IdentifierPath","referencedDeclaration":2217,"src":"6129:16:10"},"referencedDeclaration":2217,"src":"6129:16:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":1632,"mutability":"mutable","name":"poolHooksContract","nameLocation":"6185:17:10","nodeType":"VariableDeclaration","scope":1638,"src":"6177:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1631,"name":"address","nodeType":"ElementaryTypeName","src":"6177:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1635,"mutability":"mutable","name":"liquidityManagement","nameLocation":"6241:19:10","nodeType":"VariableDeclaration","scope":1638,"src":"6212:48:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2120_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":1634,"nodeType":"UserDefinedTypeName","pathNode":{"id":1633,"name":"LiquidityManagement","nameLocations":["6212:19:10"],"nodeType":"IdentifierPath","referencedDeclaration":2120,"src":"6212:19:10"},"referencedDeclaration":2120,"src":"6212:19:10","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2120_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"5953:313:10"},"returnParameters":{"id":1637,"nodeType":"ParameterList","parameters":[],"src":"6275:0:10"},"scope":1966,"src":"5932:344:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1639,"nodeType":"StructuredDocumentation","src":"6282:185:10","text":" @notice Checks whether a pool is registered.\n @param pool Address of the pool to check\n @return registered True if the pool is registered, false otherwise"},"functionSelector":"c673bdaf","id":1646,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"6481:16:10","nodeType":"FunctionDefinition","parameters":{"id":1642,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1641,"mutability":"mutable","name":"pool","nameLocation":"6506:4:10","nodeType":"VariableDeclaration","scope":1646,"src":"6498:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1640,"name":"address","nodeType":"ElementaryTypeName","src":"6498:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6497:14:10"},"returnParameters":{"id":1645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1644,"mutability":"mutable","name":"registered","nameLocation":"6540:10:10","nodeType":"VariableDeclaration","scope":1646,"src":"6535:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1643,"name":"bool","nodeType":"ElementaryTypeName","src":"6535:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6534:17:10"},"scope":1966,"src":"6472:80:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1647,"nodeType":"StructuredDocumentation","src":"6558:589:10","text":" @notice Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\n @param pool Address of the pool to initialize\n @param to Address that will receive the output BPT\n @param tokens Tokens used to seed the pool (must match the registered tokens)\n @param exactAmountsIn Exact amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param userData Additional (optional) data required for adding initial liquidity\n @return bptAmountOut Output pool token amount"},"functionSelector":"ba8a2be0","id":1667,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"7161:10:10","nodeType":"FunctionDefinition","parameters":{"id":1663,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1649,"mutability":"mutable","name":"pool","nameLocation":"7189:4:10","nodeType":"VariableDeclaration","scope":1667,"src":"7181:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1648,"name":"address","nodeType":"ElementaryTypeName","src":"7181:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1651,"mutability":"mutable","name":"to","nameLocation":"7211:2:10","nodeType":"VariableDeclaration","scope":1667,"src":"7203:10:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1650,"name":"address","nodeType":"ElementaryTypeName","src":"7203:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1655,"mutability":"mutable","name":"tokens","nameLocation":"7239:6:10","nodeType":"VariableDeclaration","scope":1667,"src":"7223:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1653,"nodeType":"UserDefinedTypeName","pathNode":{"id":1652,"name":"IERC20","nameLocations":["7223:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"7223:6:10"},"referencedDeclaration":6486,"src":"7223:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":1654,"nodeType":"ArrayTypeName","src":"7223:8:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":1658,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"7272:14:10","nodeType":"VariableDeclaration","scope":1667,"src":"7255:31:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1656,"name":"uint256","nodeType":"ElementaryTypeName","src":"7255:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1657,"nodeType":"ArrayTypeName","src":"7255:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1660,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"7304:15:10","nodeType":"VariableDeclaration","scope":1667,"src":"7296:23:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1659,"name":"uint256","nodeType":"ElementaryTypeName","src":"7296:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1662,"mutability":"mutable","name":"userData","nameLocation":"7342:8:10","nodeType":"VariableDeclaration","scope":1667,"src":"7329:21:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1661,"name":"bytes","nodeType":"ElementaryTypeName","src":"7329:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7171:185:10"},"returnParameters":{"id":1666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1665,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7383:12:10","nodeType":"VariableDeclaration","scope":1667,"src":"7375:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1664,"name":"uint256","nodeType":"ElementaryTypeName","src":"7375:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7374:22:10"},"scope":1966,"src":"7152:245:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1668,"nodeType":"StructuredDocumentation","src":"7627:258:10","text":" @notice Checks whether a pool is initialized.\n @dev An initialized pool can be considered registered as well.\n @param pool Address of the pool to check\n @return initialized True if the pool is initialized, false otherwise"},"functionSelector":"532cec7c","id":1675,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolInitialized","nameLocation":"7899:17:10","nodeType":"FunctionDefinition","parameters":{"id":1671,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1670,"mutability":"mutable","name":"pool","nameLocation":"7925:4:10","nodeType":"VariableDeclaration","scope":1675,"src":"7917:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1669,"name":"address","nodeType":"ElementaryTypeName","src":"7917:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7916:14:10"},"returnParameters":{"id":1674,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1673,"mutability":"mutable","name":"initialized","nameLocation":"7959:11:10","nodeType":"VariableDeclaration","scope":1675,"src":"7954:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1672,"name":"bool","nodeType":"ElementaryTypeName","src":"7954:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7953:18:10"},"scope":1966,"src":"7890:82:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1676,"nodeType":"StructuredDocumentation","src":"7978:152:10","text":" @notice Gets the tokens registered to a pool.\n @param pool Address of the pool\n @return tokens List of tokens in the pool"},"functionSelector":"ca4f2803","id":1685,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokens","nameLocation":"8144:13:10","nodeType":"FunctionDefinition","parameters":{"id":1679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1678,"mutability":"mutable","name":"pool","nameLocation":"8166:4:10","nodeType":"VariableDeclaration","scope":1685,"src":"8158:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1677,"name":"address","nodeType":"ElementaryTypeName","src":"8158:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8157:14:10"},"returnParameters":{"id":1684,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1683,"mutability":"mutable","name":"tokens","nameLocation":"8211:6:10","nodeType":"VariableDeclaration","scope":1685,"src":"8195:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1681,"nodeType":"UserDefinedTypeName","pathNode":{"id":1680,"name":"IERC20","nameLocations":["8195:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"8195:6:10"},"referencedDeclaration":6486,"src":"8195:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":1682,"nodeType":"ArrayTypeName","src":"8195:8:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"8194:24:10"},"scope":1966,"src":"8135:84:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1686,"nodeType":"StructuredDocumentation","src":"8225:512:10","text":" @notice Gets pool token rates.\n @dev This function performs external calls if tokens are yield-bearing. All returned arrays are in token\n registration order.\n @param pool Address of the pool\n @return decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. FP(1) for 18-decimal tokens\n @return tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens"},"functionSelector":"7e361bde","id":1697,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenRates","nameLocation":"8751:17:10","nodeType":"FunctionDefinition","parameters":{"id":1689,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1688,"mutability":"mutable","name":"pool","nameLocation":"8786:4:10","nodeType":"VariableDeclaration","scope":1697,"src":"8778:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1687,"name":"address","nodeType":"ElementaryTypeName","src":"8778:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8768:28:10"},"returnParameters":{"id":1696,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1692,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"8837:21:10","nodeType":"VariableDeclaration","scope":1697,"src":"8820:38:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1690,"name":"uint256","nodeType":"ElementaryTypeName","src":"8820:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1691,"nodeType":"ArrayTypeName","src":"8820:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1695,"mutability":"mutable","name":"tokenRates","nameLocation":"8877:10:10","nodeType":"VariableDeclaration","scope":1697,"src":"8860:27:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1693,"name":"uint256","nodeType":"ElementaryTypeName","src":"8860:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1694,"nodeType":"ArrayTypeName","src":"8860:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8819:69:10"},"scope":1966,"src":"8742:147:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1698,"nodeType":"StructuredDocumentation","src":"8895:287:10","text":" @notice Returns comprehensive pool data for the given pool.\n @dev This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\n @param pool The address of the pool\n @return poolData The `PoolData` result"},"functionSelector":"13d21cdf","id":1706,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolData","nameLocation":"9196:11:10","nodeType":"FunctionDefinition","parameters":{"id":1701,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1700,"mutability":"mutable","name":"pool","nameLocation":"9216:4:10","nodeType":"VariableDeclaration","scope":1706,"src":"9208:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1699,"name":"address","nodeType":"ElementaryTypeName","src":"9208:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9207:14:10"},"returnParameters":{"id":1705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1704,"mutability":"mutable","name":"poolData","nameLocation":"9261:8:10","nodeType":"VariableDeclaration","scope":1706,"src":"9245:24:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2269_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":1703,"nodeType":"UserDefinedTypeName","pathNode":{"id":1702,"name":"PoolData","nameLocations":["9245:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":2269,"src":"9245:8:10"},"referencedDeclaration":2269,"src":"9245:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2269_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"9244:26:10"},"scope":1966,"src":"9187:84:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1707,"nodeType":"StructuredDocumentation","src":"9277:531:10","text":" @notice Gets the raw data for a pool: tokens, raw balances, scaling factors.\n @param pool Address of the pool\n @return tokens The pool tokens, sorted in registration order\n @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order"},"functionSelector":"67e0e076","id":1726,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenInfo","nameLocation":"9822:16:10","nodeType":"FunctionDefinition","parameters":{"id":1710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1709,"mutability":"mutable","name":"pool","nameLocation":"9856:4:10","nodeType":"VariableDeclaration","scope":1726,"src":"9848:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1708,"name":"address","nodeType":"ElementaryTypeName","src":"9848:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9838:28:10"},"returnParameters":{"id":1725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1714,"mutability":"mutable","name":"tokens","nameLocation":"9943:6:10","nodeType":"VariableDeclaration","scope":1726,"src":"9927:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1712,"nodeType":"UserDefinedTypeName","pathNode":{"id":1711,"name":"IERC20","nameLocations":["9927:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"9927:6:10"},"referencedDeclaration":6486,"src":"9927:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":1713,"nodeType":"ArrayTypeName","src":"9927:8:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":1718,"mutability":"mutable","name":"tokenInfo","nameLocation":"9982:9:10","nodeType":"VariableDeclaration","scope":1726,"src":"9963:28:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2244_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":1716,"nodeType":"UserDefinedTypeName","pathNode":{"id":1715,"name":"TokenInfo","nameLocations":["9963:9:10"],"nodeType":"IdentifierPath","referencedDeclaration":2244,"src":"9963:9:10"},"referencedDeclaration":2244,"src":"9963:9:10","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2244_storage_ptr","typeString":"struct TokenInfo"}},"id":1717,"nodeType":"ArrayTypeName","src":"9963:11:10","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2244_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":1721,"mutability":"mutable","name":"balancesRaw","nameLocation":"10022:11:10","nodeType":"VariableDeclaration","scope":1726,"src":"10005:28:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1719,"name":"uint256","nodeType":"ElementaryTypeName","src":"10005:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1720,"nodeType":"ArrayTypeName","src":"10005:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1724,"mutability":"mutable","name":"lastBalancesLiveScaled18","nameLocation":"10064:24:10","nodeType":"VariableDeclaration","scope":1726,"src":"10047:41:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1722,"name":"uint256","nodeType":"ElementaryTypeName","src":"10047:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1723,"nodeType":"ArrayTypeName","src":"10047:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9913:185:10"},"scope":1966,"src":"9813:286:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1727,"nodeType":"StructuredDocumentation","src":"10105:312:10","text":" @notice Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in\n registration order.\n @param pool Address of the pool\n @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates"},"functionSelector":"535cfd8a","id":1735,"implemented":false,"kind":"function","modifiers":[],"name":"getCurrentLiveBalances","nameLocation":"10431:22:10","nodeType":"FunctionDefinition","parameters":{"id":1730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1729,"mutability":"mutable","name":"pool","nameLocation":"10462:4:10","nodeType":"VariableDeclaration","scope":1735,"src":"10454:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1728,"name":"address","nodeType":"ElementaryTypeName","src":"10454:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10453:14:10"},"returnParameters":{"id":1734,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1733,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"10508:20:10","nodeType":"VariableDeclaration","scope":1735,"src":"10491:37:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1731,"name":"uint256","nodeType":"ElementaryTypeName","src":"10491:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1732,"nodeType":"ArrayTypeName","src":"10491:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10490:39:10"},"scope":1966,"src":"10422:108:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1736,"nodeType":"StructuredDocumentation","src":"10536:301:10","text":" @notice Gets the configuration parameters of a pool.\n @dev The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\n @param pool Address of the pool\n @return poolConfig The pool configuration as a `PoolConfig` struct"},"functionSelector":"f29486a1","id":1744,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolConfig","nameLocation":"10851:13:10","nodeType":"FunctionDefinition","parameters":{"id":1739,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1738,"mutability":"mutable","name":"pool","nameLocation":"10873:4:10","nodeType":"VariableDeclaration","scope":1744,"src":"10865:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1737,"name":"address","nodeType":"ElementaryTypeName","src":"10865:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10864:14:10"},"returnParameters":{"id":1743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1742,"mutability":"mutable","name":"poolConfig","nameLocation":"10920:10:10","nodeType":"VariableDeclaration","scope":1744,"src":"10902:28:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$2145_memory_ptr","typeString":"struct PoolConfig"},"typeName":{"id":1741,"nodeType":"UserDefinedTypeName","pathNode":{"id":1740,"name":"PoolConfig","nameLocations":["10902:10:10"],"nodeType":"IdentifierPath","referencedDeclaration":2145,"src":"10902:10:10"},"referencedDeclaration":2145,"src":"10902:10:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$2145_storage_ptr","typeString":"struct PoolConfig"}},"visibility":"internal"}],"src":"10901:30:10"},"scope":1966,"src":"10842:90:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1745,"nodeType":"StructuredDocumentation","src":"10938:283:10","text":" @notice Gets the hooks configuration parameters of a pool.\n @dev The `HooksConfig` contains flags indicating which pool hooks are implemented.\n @param pool Address of the pool\n @return hooksConfig The hooks configuration as a `HooksConfig` struct"},"functionSelector":"ce8630d4","id":1753,"implemented":false,"kind":"function","modifiers":[],"name":"getHooksConfig","nameLocation":"11235:14:10","nodeType":"FunctionDefinition","parameters":{"id":1748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1747,"mutability":"mutable","name":"pool","nameLocation":"11258:4:10","nodeType":"VariableDeclaration","scope":1753,"src":"11250:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1746,"name":"address","nodeType":"ElementaryTypeName","src":"11250:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11249:14:10"},"returnParameters":{"id":1752,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1751,"mutability":"mutable","name":"hooksConfig","nameLocation":"11306:11:10","nodeType":"VariableDeclaration","scope":1753,"src":"11287:30:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2191_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":1750,"nodeType":"UserDefinedTypeName","pathNode":{"id":1749,"name":"HooksConfig","nameLocations":["11287:11:10"],"nodeType":"IdentifierPath","referencedDeclaration":2191,"src":"11287:11:10"},"referencedDeclaration":2191,"src":"11287:11:10","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2191_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"}],"src":"11286:32:10"},"scope":1966,"src":"11226:93:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1754,"nodeType":"StructuredDocumentation","src":"11325:160:10","text":" @notice The current rate of a pool token (BPT) = invariant / totalSupply.\n @param pool Address of the pool\n @return rate BPT rate"},"functionSelector":"4f037ee7","id":1761,"implemented":false,"kind":"function","modifiers":[],"name":"getBptRate","nameLocation":"11499:10:10","nodeType":"FunctionDefinition","parameters":{"id":1757,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1756,"mutability":"mutable","name":"pool","nameLocation":"11518:4:10","nodeType":"VariableDeclaration","scope":1761,"src":"11510:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1755,"name":"address","nodeType":"ElementaryTypeName","src":"11510:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11509:14:10"},"returnParameters":{"id":1760,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1759,"mutability":"mutable","name":"rate","nameLocation":"11555:4:10","nodeType":"VariableDeclaration","scope":1761,"src":"11547:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1758,"name":"uint256","nodeType":"ElementaryTypeName","src":"11547:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11546:14:10"},"scope":1966,"src":"11490:71:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1762,"nodeType":"StructuredDocumentation","src":"11792:168:10","text":" @notice Gets the total supply of a given ERC20 token.\n @param token The token address\n @return tokenTotalSupply Total supply of the token"},"functionSelector":"e4dc2aa4","id":1769,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"11974:11:10","nodeType":"FunctionDefinition","parameters":{"id":1765,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1764,"mutability":"mutable","name":"token","nameLocation":"11994:5:10","nodeType":"VariableDeclaration","scope":1769,"src":"11986:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1763,"name":"address","nodeType":"ElementaryTypeName","src":"11986:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11985:15:10"},"returnParameters":{"id":1768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1767,"mutability":"mutable","name":"tokenTotalSupply","nameLocation":"12032:16:10","nodeType":"VariableDeclaration","scope":1769,"src":"12024:24:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1766,"name":"uint256","nodeType":"ElementaryTypeName","src":"12024:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12023:26:10"},"scope":1966,"src":"11965:85:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1770,"nodeType":"StructuredDocumentation","src":"12056:225:10","text":" @notice Gets the balance of an account for a given ERC20 token.\n @param token Address of the token\n @param account Address of the account\n @return tokenBalance Token balance of the account"},"functionSelector":"f7888aec","id":1779,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"12295:9:10","nodeType":"FunctionDefinition","parameters":{"id":1775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1772,"mutability":"mutable","name":"token","nameLocation":"12313:5:10","nodeType":"VariableDeclaration","scope":1779,"src":"12305:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1771,"name":"address","nodeType":"ElementaryTypeName","src":"12305:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1774,"mutability":"mutable","name":"account","nameLocation":"12328:7:10","nodeType":"VariableDeclaration","scope":1779,"src":"12320:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1773,"name":"address","nodeType":"ElementaryTypeName","src":"12320:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12304:32:10"},"returnParameters":{"id":1778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1777,"mutability":"mutable","name":"tokenBalance","nameLocation":"12368:12:10","nodeType":"VariableDeclaration","scope":1779,"src":"12360:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1776,"name":"uint256","nodeType":"ElementaryTypeName","src":"12360:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12359:22:10"},"scope":1966,"src":"12286:96:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1780,"nodeType":"StructuredDocumentation","src":"12388:299:10","text":" @notice Gets the allowance of a spender for a given ERC20 token and owner.\n @param token Address of the token\n @param owner Address of the owner\n @param spender Address of the spender\n @return tokenAllowance Amount of tokens the spender is allowed to spend"},"functionSelector":"927da105","id":1791,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"12701:9:10","nodeType":"FunctionDefinition","parameters":{"id":1787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1782,"mutability":"mutable","name":"token","nameLocation":"12719:5:10","nodeType":"VariableDeclaration","scope":1791,"src":"12711:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1781,"name":"address","nodeType":"ElementaryTypeName","src":"12711:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1784,"mutability":"mutable","name":"owner","nameLocation":"12734:5:10","nodeType":"VariableDeclaration","scope":1791,"src":"12726:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1783,"name":"address","nodeType":"ElementaryTypeName","src":"12726:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1786,"mutability":"mutable","name":"spender","nameLocation":"12749:7:10","nodeType":"VariableDeclaration","scope":1791,"src":"12741:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1785,"name":"address","nodeType":"ElementaryTypeName","src":"12741:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12710:47:10"},"returnParameters":{"id":1790,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1789,"mutability":"mutable","name":"tokenAllowance","nameLocation":"12789:14:10","nodeType":"VariableDeclaration","scope":1791,"src":"12781:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1788,"name":"uint256","nodeType":"ElementaryTypeName","src":"12781:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12780:24:10"},"scope":1966,"src":"12692:113:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1792,"nodeType":"StructuredDocumentation","src":"12811:475:10","text":" @notice Approves a spender to spend pool tokens on behalf of sender.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param owner Address of the owner\n @param spender Address of the spender\n @param amount Amount of tokens to approve\n @return success True if successful, false otherwise"},"functionSelector":"e1f21c67","id":1803,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"13300:7:10","nodeType":"FunctionDefinition","parameters":{"id":1799,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1794,"mutability":"mutable","name":"owner","nameLocation":"13316:5:10","nodeType":"VariableDeclaration","scope":1803,"src":"13308:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1793,"name":"address","nodeType":"ElementaryTypeName","src":"13308:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1796,"mutability":"mutable","name":"spender","nameLocation":"13331:7:10","nodeType":"VariableDeclaration","scope":1803,"src":"13323:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1795,"name":"address","nodeType":"ElementaryTypeName","src":"13323:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1798,"mutability":"mutable","name":"amount","nameLocation":"13348:6:10","nodeType":"VariableDeclaration","scope":1803,"src":"13340:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1797,"name":"uint256","nodeType":"ElementaryTypeName","src":"13340:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13307:48:10"},"returnParameters":{"id":1802,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1801,"mutability":"mutable","name":"success","nameLocation":"13379:7:10","nodeType":"VariableDeclaration","scope":1803,"src":"13374:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1800,"name":"bool","nodeType":"ElementaryTypeName","src":"13374:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13373:14:10"},"scope":1966,"src":"13291:97:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1804,"nodeType":"StructuredDocumentation","src":"13615:251:10","text":" @notice Indicates whether a pool is paused.\n @dev If a pool is paused, all non-Recovery Mode state-changing operations will revert.\n @param pool The pool to be checked\n @return poolPaused True if the pool is paused"},"functionSelector":"6c9bc732","id":1811,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolPaused","nameLocation":"13880:12:10","nodeType":"FunctionDefinition","parameters":{"id":1807,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1806,"mutability":"mutable","name":"pool","nameLocation":"13901:4:10","nodeType":"VariableDeclaration","scope":1811,"src":"13893:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1805,"name":"address","nodeType":"ElementaryTypeName","src":"13893:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13892:14:10"},"returnParameters":{"id":1810,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1809,"mutability":"mutable","name":"poolPaused","nameLocation":"13935:10:10","nodeType":"VariableDeclaration","scope":1811,"src":"13930:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1808,"name":"bool","nodeType":"ElementaryTypeName","src":"13930:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13929:17:10"},"scope":1966,"src":"13871:76:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1812,"nodeType":"StructuredDocumentation","src":"13953:648:10","text":" @notice Returns the paused status, and end times of the Pool's pause window and buffer period.\n @dev Note that even when set to a paused state, the pool will automatically unpause at the end of\n the buffer period. Balancer timestamps are 32 bits.\n @param pool The pool whose data is requested\n @return poolPaused True if the Pool is paused\n @return poolPauseWindowEndTime The timestamp of the end of the Pool's pause window\n @return poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)\n @return pauseManager The pause manager, or the zero address"},"functionSelector":"15e32046","id":1825,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolPausedState","nameLocation":"14615:18:10","nodeType":"FunctionDefinition","parameters":{"id":1815,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1814,"mutability":"mutable","name":"pool","nameLocation":"14651:4:10","nodeType":"VariableDeclaration","scope":1825,"src":"14643:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1813,"name":"address","nodeType":"ElementaryTypeName","src":"14643:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14633:28:10"},"returnParameters":{"id":1824,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1817,"mutability":"mutable","name":"poolPaused","nameLocation":"14714:10:10","nodeType":"VariableDeclaration","scope":1825,"src":"14709:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1816,"name":"bool","nodeType":"ElementaryTypeName","src":"14709:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1819,"mutability":"mutable","name":"poolPauseWindowEndTime","nameLocation":"14733:22:10","nodeType":"VariableDeclaration","scope":1825,"src":"14726:29:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1818,"name":"uint32","nodeType":"ElementaryTypeName","src":"14726:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1821,"mutability":"mutable","name":"poolBufferPeriodEndTime","nameLocation":"14764:23:10","nodeType":"VariableDeclaration","scope":1825,"src":"14757:30:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1820,"name":"uint32","nodeType":"ElementaryTypeName","src":"14757:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1823,"mutability":"mutable","name":"pauseManager","nameLocation":"14797:12:10","nodeType":"VariableDeclaration","scope":1825,"src":"14789:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1822,"name":"address","nodeType":"ElementaryTypeName","src":"14789:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14708:102:10"},"scope":1966,"src":"14606:205:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1826,"nodeType":"StructuredDocumentation","src":"15039:332:10","text":" @notice Checks if the wrapped token has an initialized buffer in the Vault.\n @dev An initialized buffer should have an asset registered in the Vault.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return isBufferInitialized True if the ERC4626 buffer is initialized"},"functionSelector":"6844846b","id":1834,"implemented":false,"kind":"function","modifiers":[],"name":"isERC4626BufferInitialized","nameLocation":"15385:26:10","nodeType":"FunctionDefinition","parameters":{"id":1830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1829,"mutability":"mutable","name":"wrappedToken","nameLocation":"15421:12:10","nodeType":"VariableDeclaration","scope":1834,"src":"15412:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1828,"nodeType":"UserDefinedTypeName","pathNode":{"id":1827,"name":"IERC4626","nameLocations":["15412:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"15412:8:10"},"referencedDeclaration":6408,"src":"15412:8:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"15411:23:10"},"returnParameters":{"id":1833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1832,"mutability":"mutable","name":"isBufferInitialized","nameLocation":"15463:19:10","nodeType":"VariableDeclaration","scope":1834,"src":"15458:24:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1831,"name":"bool","nodeType":"ElementaryTypeName","src":"15458:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15457:26:10"},"scope":1966,"src":"15376:108:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1835,"nodeType":"StructuredDocumentation","src":"15490:477:10","text":" @notice Gets the registered asset for a given buffer.\n @dev To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers\n should never call `wrapper.asset()` directly, at least without checking it against the asset registered with\n the Vault on initialization.\n @param wrappedToken The wrapped token specifying the buffer\n @return asset The underlying asset of the wrapped token"},"functionSelector":"4afbaf5a","id":1843,"implemented":false,"kind":"function","modifiers":[],"name":"getERC4626BufferAsset","nameLocation":"15981:21:10","nodeType":"FunctionDefinition","parameters":{"id":1839,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1838,"mutability":"mutable","name":"wrappedToken","nameLocation":"16012:12:10","nodeType":"VariableDeclaration","scope":1843,"src":"16003:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":1837,"nodeType":"UserDefinedTypeName","pathNode":{"id":1836,"name":"IERC4626","nameLocations":["16003:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"16003:8:10"},"referencedDeclaration":6408,"src":"16003:8:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16002:23:10"},"returnParameters":{"id":1842,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1841,"mutability":"mutable","name":"asset","nameLocation":"16057:5:10","nodeType":"VariableDeclaration","scope":1843,"src":"16049:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1840,"name":"address","nodeType":"ElementaryTypeName","src":"16049:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16048:15:10"},"scope":1966,"src":"15972:92:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1844,"nodeType":"StructuredDocumentation","src":"16288:379:10","text":" @notice Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\n @param pool The address of the pool for which aggregate fees have been collected\n @param token The address of the token in which fees have been accumulated\n @return swapFeeAmount The total amount of fees accumulated in the specified token"},"functionSelector":"85e0b999","id":1854,"implemented":false,"kind":"function","modifiers":[],"name":"getAggregateSwapFeeAmount","nameLocation":"16681:25:10","nodeType":"FunctionDefinition","parameters":{"id":1850,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1846,"mutability":"mutable","name":"pool","nameLocation":"16715:4:10","nodeType":"VariableDeclaration","scope":1854,"src":"16707:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1845,"name":"address","nodeType":"ElementaryTypeName","src":"16707:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1849,"mutability":"mutable","name":"token","nameLocation":"16728:5:10","nodeType":"VariableDeclaration","scope":1854,"src":"16721:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":1848,"nodeType":"UserDefinedTypeName","pathNode":{"id":1847,"name":"IERC20","nameLocations":["16721:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"16721:6:10"},"referencedDeclaration":6486,"src":"16721:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"16706:28:10"},"returnParameters":{"id":1853,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1852,"mutability":"mutable","name":"swapFeeAmount","nameLocation":"16766:13:10","nodeType":"VariableDeclaration","scope":1854,"src":"16758:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1851,"name":"uint256","nodeType":"ElementaryTypeName","src":"16758:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16757:23:10"},"scope":1966,"src":"16672:109:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1855,"nodeType":"StructuredDocumentation","src":"16787:381:10","text":" @notice Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\n @param pool The address of the pool for which aggregate fees have been collected\n @param token The address of the token in which fees have been accumulated\n @return yieldFeeAmount The total amount of fees accumulated in the specified token"},"functionSelector":"00fdfa13","id":1865,"implemented":false,"kind":"function","modifiers":[],"name":"getAggregateYieldFeeAmount","nameLocation":"17182:26:10","nodeType":"FunctionDefinition","parameters":{"id":1861,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1857,"mutability":"mutable","name":"pool","nameLocation":"17217:4:10","nodeType":"VariableDeclaration","scope":1865,"src":"17209:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1856,"name":"address","nodeType":"ElementaryTypeName","src":"17209:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1860,"mutability":"mutable","name":"token","nameLocation":"17230:5:10","nodeType":"VariableDeclaration","scope":1865,"src":"17223:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":1859,"nodeType":"UserDefinedTypeName","pathNode":{"id":1858,"name":"IERC20","nameLocations":["17223:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"17223:6:10"},"referencedDeclaration":6486,"src":"17223:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"17208:28:10"},"returnParameters":{"id":1864,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1863,"mutability":"mutable","name":"yieldFeeAmount","nameLocation":"17268:14:10","nodeType":"VariableDeclaration","scope":1865,"src":"17260:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1862,"name":"uint256","nodeType":"ElementaryTypeName","src":"17260:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17259:24:10"},"scope":1966,"src":"17173:111:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1866,"nodeType":"StructuredDocumentation","src":"17290:271:10","text":" @notice Fetches the static swap fee percentage for a given pool.\n @param pool The address of the pool whose static swap fee percentage is being queried\n @return swapFeePercentage The current static swap fee percentage for the specified pool"},"functionSelector":"b45090f9","id":1873,"implemented":false,"kind":"function","modifiers":[],"name":"getStaticSwapFeePercentage","nameLocation":"17575:26:10","nodeType":"FunctionDefinition","parameters":{"id":1869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1868,"mutability":"mutable","name":"pool","nameLocation":"17610:4:10","nodeType":"VariableDeclaration","scope":1873,"src":"17602:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1867,"name":"address","nodeType":"ElementaryTypeName","src":"17602:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17601:14:10"},"returnParameters":{"id":1872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1871,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"17647:17:10","nodeType":"VariableDeclaration","scope":1873,"src":"17639:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1870,"name":"uint256","nodeType":"ElementaryTypeName","src":"17639:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17638:27:10"},"scope":1966,"src":"17566:100:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1874,"nodeType":"StructuredDocumentation","src":"17672:286:10","text":" @notice Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\n @param pool The address of the pool whose roles are being queried\n @return roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)"},"functionSelector":"e9ddeb26","id":1882,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolRoleAccounts","nameLocation":"17972:19:10","nodeType":"FunctionDefinition","parameters":{"id":1877,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1876,"mutability":"mutable","name":"pool","nameLocation":"18000:4:10","nodeType":"VariableDeclaration","scope":1882,"src":"17992:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1875,"name":"address","nodeType":"ElementaryTypeName","src":"17992:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17991:14:10"},"returnParameters":{"id":1881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1880,"mutability":"mutable","name":"roleAccounts","nameLocation":"18053:12:10","nodeType":"VariableDeclaration","scope":1882,"src":"18029:36:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":1879,"nodeType":"UserDefinedTypeName","pathNode":{"id":1878,"name":"PoolRoleAccounts","nameLocations":["18029:16:10"],"nodeType":"IdentifierPath","referencedDeclaration":2217,"src":"18029:16:10"},"referencedDeclaration":2217,"src":"18029:16:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"src":"18028:38:10"},"scope":1966,"src":"17963:104:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1883,"nodeType":"StructuredDocumentation","src":"18073:363:10","text":" @notice Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\n @dev Reverts if the hook doesn't return the success flag set to `true`.\n @param pool The pool\n @param swapParams The swap parameters used to compute the fee\n @return dynamicSwapFeePercentage The dynamic swap fee percentage"},"functionSelector":"4d472bdd","id":1893,"implemented":false,"kind":"function","modifiers":[],"name":"computeDynamicSwapFeePercentage","nameLocation":"18450:31:10","nodeType":"FunctionDefinition","parameters":{"id":1889,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1885,"mutability":"mutable","name":"pool","nameLocation":"18499:4:10","nodeType":"VariableDeclaration","scope":1893,"src":"18491:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1884,"name":"address","nodeType":"ElementaryTypeName","src":"18491:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1888,"mutability":"mutable","name":"swapParams","nameLocation":"18535:10:10","nodeType":"VariableDeclaration","scope":1893,"src":"18513:32:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2312_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":1887,"nodeType":"UserDefinedTypeName","pathNode":{"id":1886,"name":"PoolSwapParams","nameLocations":["18513:14:10"],"nodeType":"IdentifierPath","referencedDeclaration":2312,"src":"18513:14:10"},"referencedDeclaration":2312,"src":"18513:14:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2312_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"src":"18481:70:10"},"returnParameters":{"id":1892,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1891,"mutability":"mutable","name":"dynamicSwapFeePercentage","nameLocation":"18583:24:10","nodeType":"VariableDeclaration","scope":1893,"src":"18575:32:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1890,"name":"uint256","nodeType":"ElementaryTypeName","src":"18575:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18574:34:10"},"scope":1966,"src":"18441:168:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1894,"nodeType":"StructuredDocumentation","src":"18615:145:10","text":" @notice Returns the Protocol Fee Controller address.\n @return protocolFeeController Address of the ProtocolFeeController"},"functionSelector":"85f2dbd4","id":1900,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"18774:24:10","nodeType":"FunctionDefinition","parameters":{"id":1895,"nodeType":"ParameterList","parameters":[],"src":"18798:2:10"},"returnParameters":{"id":1899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1898,"mutability":"mutable","name":"protocolFeeController","nameLocation":"18847:21:10","nodeType":"VariableDeclaration","scope":1900,"src":"18824:44:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"},"typeName":{"id":1897,"nodeType":"UserDefinedTypeName","pathNode":{"id":1896,"name":"IProtocolFeeController","nameLocations":["18824:22:10"],"nodeType":"IdentifierPath","referencedDeclaration":613,"src":"18824:22:10"},"referencedDeclaration":613,"src":"18824:22:10","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"18823:46:10"},"scope":1966,"src":"18765:105:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1901,"nodeType":"StructuredDocumentation","src":"19098:296:10","text":" @notice Checks whether a pool is in Recovery Mode.\n @dev Recovery Mode enables a safe proportional withdrawal path, with no external calls.\n @param pool Address of the pool to check\n @return inRecoveryMode True if the pool is in Recovery Mode, false otherwise"},"functionSelector":"be7d628a","id":1908,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolInRecoveryMode","nameLocation":"19408:20:10","nodeType":"FunctionDefinition","parameters":{"id":1904,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1903,"mutability":"mutable","name":"pool","nameLocation":"19437:4:10","nodeType":"VariableDeclaration","scope":1908,"src":"19429:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1902,"name":"address","nodeType":"ElementaryTypeName","src":"19429:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19428:14:10"},"returnParameters":{"id":1907,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1906,"mutability":"mutable","name":"inRecoveryMode","nameLocation":"19471:14:10","nodeType":"VariableDeclaration","scope":1908,"src":"19466:19:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1905,"name":"bool","nodeType":"ElementaryTypeName","src":"19466:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19465:21:10"},"scope":1966,"src":"19399:88:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1909,"nodeType":"StructuredDocumentation","src":"19493:679:10","text":" @notice Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out.\n The request is implemented by the Vault without any interaction with the pool, ensuring that\n it works the same for all pools, and cannot be disabled by a new pool type.\n @param pool Address of the pool\n @param from Address of user to burn pool tokens from\n @param exactBptAmountIn Input pool token amount\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @return amountsOut Actual calculated amounts of output tokens, sorted in token registration order"},"functionSelector":"a07d6040","id":1924,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityRecovery","nameLocation":"20186:23:10","nodeType":"FunctionDefinition","parameters":{"id":1919,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1911,"mutability":"mutable","name":"pool","nameLocation":"20227:4:10","nodeType":"VariableDeclaration","scope":1924,"src":"20219:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1910,"name":"address","nodeType":"ElementaryTypeName","src":"20219:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1913,"mutability":"mutable","name":"from","nameLocation":"20249:4:10","nodeType":"VariableDeclaration","scope":1924,"src":"20241:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1912,"name":"address","nodeType":"ElementaryTypeName","src":"20241:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1915,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"20271:16:10","nodeType":"VariableDeclaration","scope":1924,"src":"20263:24:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1914,"name":"uint256","nodeType":"ElementaryTypeName","src":"20263:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1918,"mutability":"mutable","name":"minAmountsOut","nameLocation":"20314:13:10","nodeType":"VariableDeclaration","scope":1924,"src":"20297:30:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1916,"name":"uint256","nodeType":"ElementaryTypeName","src":"20297:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1917,"nodeType":"ArrayTypeName","src":"20297:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"20209:124:10"},"returnParameters":{"id":1923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1922,"mutability":"mutable","name":"amountsOut","nameLocation":"20369:10:10","nodeType":"VariableDeclaration","scope":1924,"src":"20352:27:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1920,"name":"uint256","nodeType":"ElementaryTypeName","src":"20352:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1921,"nodeType":"ArrayTypeName","src":"20352:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"20351:29:10"},"scope":1966,"src":"20177:204:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1925,"nodeType":"StructuredDocumentation","src":"20602:699:10","text":" @notice Performs a callback on msg.sender with arguments provided in `data`.\n @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n anything else will revert.\n Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n Allows the external calling of a function via the Vault contract to\n access Vault's functions guarded by `onlyWhenUnlocked`.\n `transient` modifier ensuring balances changes within the Vault are settled.\n @param data Contains function signature and args to be passed to the msg.sender\n @return result Resulting data from the call"},"functionSelector":"edfa3568","id":1932,"implemented":false,"kind":"function","modifiers":[],"name":"quote","nameLocation":"21315:5:10","nodeType":"FunctionDefinition","parameters":{"id":1928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1927,"mutability":"mutable","name":"data","nameLocation":"21336:4:10","nodeType":"VariableDeclaration","scope":1932,"src":"21321:19:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1926,"name":"bytes","nodeType":"ElementaryTypeName","src":"21321:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21320:21:10"},"returnParameters":{"id":1931,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1930,"mutability":"mutable","name":"result","nameLocation":"21373:6:10","nodeType":"VariableDeclaration","scope":1932,"src":"21360:19:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1929,"name":"bytes","nodeType":"ElementaryTypeName","src":"21360:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21359:21:10"},"scope":1966,"src":"21306:75:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1933,"nodeType":"StructuredDocumentation","src":"21387:731:10","text":" @notice Performs a callback on msg.sender with arguments provided in `data`.\n @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n anything else will revert.\n Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n Allows the external calling of a function via the Vault contract to\n access Vault's functions guarded by `onlyWhenUnlocked`.\n `transient` modifier ensuring balances changes within the Vault are settled.\n This call always reverts, returning the result in the revert reason.\n @param data Contains function signature and args to be passed to the msg.sender"},"functionSelector":"757d64b3","id":1938,"implemented":false,"kind":"function","modifiers":[],"name":"quoteAndRevert","nameLocation":"22132:14:10","nodeType":"FunctionDefinition","parameters":{"id":1936,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1935,"mutability":"mutable","name":"data","nameLocation":"22162:4:10","nodeType":"VariableDeclaration","scope":1938,"src":"22147:19:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1934,"name":"bytes","nodeType":"ElementaryTypeName","src":"22147:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"22146:21:10"},"returnParameters":{"id":1937,"nodeType":"ParameterList","parameters":[],"src":"22176:0:10"},"scope":1966,"src":"22123:54:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1939,"nodeType":"StructuredDocumentation","src":"22183:239:10","text":" @notice Returns true if queries are disabled on the Vault.\n @dev If true, queries might either be disabled temporarily or permanently.\n @return queryDisabled True if query functionality is reversibly disabled"},"functionSelector":"b4aef0ab","id":1944,"implemented":false,"kind":"function","modifiers":[],"name":"isQueryDisabled","nameLocation":"22436:15:10","nodeType":"FunctionDefinition","parameters":{"id":1940,"nodeType":"ParameterList","parameters":[],"src":"22451:2:10"},"returnParameters":{"id":1943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1942,"mutability":"mutable","name":"queryDisabled","nameLocation":"22482:13:10","nodeType":"VariableDeclaration","scope":1944,"src":"22477:18:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1941,"name":"bool","nodeType":"ElementaryTypeName","src":"22477:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"22476:20:10"},"scope":1966,"src":"22427:70:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1945,"nodeType":"StructuredDocumentation","src":"22503:302:10","text":" @notice Returns true if queries are disabled permanently; false if they are enabled.\n @dev This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\n @return queryDisabledPermanently True if query functionality is permanently disabled"},"functionSelector":"13ef8a5d","id":1950,"implemented":false,"kind":"function","modifiers":[],"name":"isQueryDisabledPermanently","nameLocation":"22819:26:10","nodeType":"FunctionDefinition","parameters":{"id":1946,"nodeType":"ParameterList","parameters":[],"src":"22845:2:10"},"returnParameters":{"id":1949,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1948,"mutability":"mutable","name":"queryDisabledPermanently","nameLocation":"22876:24:10","nodeType":"VariableDeclaration","scope":1950,"src":"22871:29:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1947,"name":"bool","nodeType":"ElementaryTypeName","src":"22871:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"22870:31:10"},"scope":1966,"src":"22810:92:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1951,"nodeType":"StructuredDocumentation","src":"22908:162:10","text":" @notice Pools can use this event to emit event data from the Vault.\n @param eventKey Event key\n @param eventData Encoded event data"},"functionSelector":"c8088247","id":1958,"implemented":false,"kind":"function","modifiers":[],"name":"emitAuxiliaryEvent","nameLocation":"23084:18:10","nodeType":"FunctionDefinition","parameters":{"id":1956,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1953,"mutability":"mutable","name":"eventKey","nameLocation":"23111:8:10","nodeType":"VariableDeclaration","scope":1958,"src":"23103:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1952,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23103:7:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1955,"mutability":"mutable","name":"eventData","nameLocation":"23136:9:10","nodeType":"VariableDeclaration","scope":1958,"src":"23121:24:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1954,"name":"bytes","nodeType":"ElementaryTypeName","src":"23121:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"23102:44:10"},"returnParameters":{"id":1957,"nodeType":"ParameterList","parameters":[],"src":"23155:0:10"},"scope":1966,"src":"23075:81:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1959,"nodeType":"StructuredDocumentation","src":"23380:284:10","text":" @notice Returns the Authorizer address.\n @dev The authorizer holds the permissions granted by governance. It is set on Vault deployment,\n and can be changed through a permissioned call.\n @return authorizer Address of the authorizer contract"},"functionSelector":"aaabadc5","id":1965,"implemented":false,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"23678:13:10","nodeType":"FunctionDefinition","parameters":{"id":1960,"nodeType":"ParameterList","parameters":[],"src":"23691:2:10"},"returnParameters":{"id":1964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1963,"mutability":"mutable","name":"authorizer","nameLocation":"23729:10:10","nodeType":"VariableDeclaration","scope":1965,"src":"23717:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"},"typeName":{"id":1962,"nodeType":"UserDefinedTypeName","pathNode":{"id":1961,"name":"IAuthorizer","nameLocations":["23717:11:10"],"nodeType":"IdentifierPath","referencedDeclaration":73,"src":"23717:11:10"},"referencedDeclaration":73,"src":"23717:11:10","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"23716:24:10"},"scope":1966,"src":"23669:72:10","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1967,"src":"767:22976:10","usedErrors":[],"usedEvents":[]}],"src":"46:23698:10"},"id":10},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","exportedSymbols":{"AddLiquidityKind":[2347],"AddLiquidityParams":[2363],"AfterSwapParams":[2341],"BufferWrapOrUnwrapParams":[2402],"FEE_BITLENGTH":[2405],"FEE_SCALING_FACTOR":[2408],"HookFlags":[2167],"HooksConfig":[2191],"IERC20":[6486],"IERC4626":[6408],"IRateProvider":[57],"IVaultMain":[2102],"LiquidityManagement":[2120],"MAX_FEE_PERCENTAGE":[2411],"PoolConfig":[2145],"PoolConfigBits":[2122],"PoolData":[2269],"PoolRoleAccounts":[2217],"PoolSwapParams":[2312],"RemoveLiquidityKind":[2368],"RemoveLiquidityParams":[2384],"Rounding":[2272],"SwapKind":[2275],"SwapState":[2201],"TokenConfig":[2234],"TokenInfo":[2244],"TokenType":[2221],"VaultState":[2209],"VaultSwapParams":[2294],"WrappingDirection":[2387]},"id":2103,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1968,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:11"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1970,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2103,"sourceUnit":6487,"src":"72:72:11","symbolAliases":[{"foreign":{"id":1969,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6486,"src":"81:6:11","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":1971,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2103,"sourceUnit":2412,"src":"146:26:11","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultMain","contractDependencies":[],"contractKind":"interface","documentation":{"id":1972,"nodeType":"StructuredDocumentation","src":"174:232:11","text":" @notice Interface for functions defined on the main Vault contract.\n @dev These are generally \"critical path\" functions (swap, add/remove liquidity) that are in the main contract\n for technical or performance reasons."},"fullyImplemented":false,"id":2102,"linearizedBaseContracts":[2102],"name":"IVaultMain","nameLocation":"417:10:11","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1973,"nodeType":"StructuredDocumentation","src":"656:431:11","text":" @notice Creates a context for a sequence of operations (i.e., \"unlocks\" the Vault).\n @dev Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`,\n meaning all balances for the caller have to be settled at the end.\n @param data Contains function signature and args to be passed to the msg.sender\n @return result Resulting data from the call"},"functionSelector":"48c89491","id":1980,"implemented":false,"kind":"function","modifiers":[],"name":"unlock","nameLocation":"1101:6:11","nodeType":"FunctionDefinition","parameters":{"id":1976,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1975,"mutability":"mutable","name":"data","nameLocation":"1123:4:11","nodeType":"VariableDeclaration","scope":1980,"src":"1108:19:11","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1974,"name":"bytes","nodeType":"ElementaryTypeName","src":"1108:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1107:21:11"},"returnParameters":{"id":1979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1978,"mutability":"mutable","name":"result","nameLocation":"1160:6:11","nodeType":"VariableDeclaration","scope":1980,"src":"1147:19:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1977,"name":"bytes","nodeType":"ElementaryTypeName","src":"1147:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1146:21:11"},"scope":2102,"src":"1092:76:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1981,"nodeType":"StructuredDocumentation","src":"1174:1291:11","text":" @notice Settles deltas for a token; must be successful for the current lock to be released.\n @dev Protects the caller against leftover dust in the Vault for the token being settled. The caller\n should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any\n excess in the Vault balance.\n If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as\n credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail.\n If the given hint is lower than the difference in reserves, the hint is given as credit to the caller.\n In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would\n not affect settlement.\n The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve\n difference equals current balance of the token minus existing reserves of the token when the function is called.\n @param token Address of the token\n @param amountHint Amount paid as reported by the caller\n @return credit Credit received in return of the payment"},"functionSelector":"15afd409","id":1991,"implemented":false,"kind":"function","modifiers":[],"name":"settle","nameLocation":"2479:6:11","nodeType":"FunctionDefinition","parameters":{"id":1987,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1984,"mutability":"mutable","name":"token","nameLocation":"2493:5:11","nodeType":"VariableDeclaration","scope":1991,"src":"2486:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":1983,"nodeType":"UserDefinedTypeName","pathNode":{"id":1982,"name":"IERC20","nameLocations":["2486:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"2486:6:11"},"referencedDeclaration":6486,"src":"2486:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1986,"mutability":"mutable","name":"amountHint","nameLocation":"2508:10:11","nodeType":"VariableDeclaration","scope":1991,"src":"2500:18:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1985,"name":"uint256","nodeType":"ElementaryTypeName","src":"2500:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2485:34:11"},"returnParameters":{"id":1990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1989,"mutability":"mutable","name":"credit","nameLocation":"2546:6:11","nodeType":"VariableDeclaration","scope":1991,"src":"2538:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1988,"name":"uint256","nodeType":"ElementaryTypeName","src":"2538:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2537:16:11"},"scope":2102,"src":"2470:84:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1992,"nodeType":"StructuredDocumentation","src":"2560:315:11","text":" @notice Sends tokens to a recipient.\n @dev There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel\n debts.\n @param token Address of the token\n @param to Recipient address\n @param amount Amount of tokens to send"},"functionSelector":"ae639329","id":2002,"implemented":false,"kind":"function","modifiers":[],"name":"sendTo","nameLocation":"2889:6:11","nodeType":"FunctionDefinition","parameters":{"id":2000,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1995,"mutability":"mutable","name":"token","nameLocation":"2903:5:11","nodeType":"VariableDeclaration","scope":2002,"src":"2896:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":1994,"nodeType":"UserDefinedTypeName","pathNode":{"id":1993,"name":"IERC20","nameLocations":["2896:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"2896:6:11"},"referencedDeclaration":6486,"src":"2896:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1997,"mutability":"mutable","name":"to","nameLocation":"2918:2:11","nodeType":"VariableDeclaration","scope":2002,"src":"2910:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1996,"name":"address","nodeType":"ElementaryTypeName","src":"2910:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1999,"mutability":"mutable","name":"amount","nameLocation":"2930:6:11","nodeType":"VariableDeclaration","scope":2002,"src":"2922:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1998,"name":"uint256","nodeType":"ElementaryTypeName","src":"2922:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2895:42:11"},"returnParameters":{"id":2001,"nodeType":"ParameterList","parameters":[],"src":"2946:0:11"},"scope":2102,"src":"2880:67:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2003,"nodeType":"StructuredDocumentation","src":"3161:412:11","text":" @notice Swaps tokens based on provided parameters.\n @dev All parameters are given in raw token decimal encoding.\n @param vaultSwapParams Parameters for the swap (see above for struct definition)\n @return amountCalculatedRaw Calculated swap amount\n @return amountInRaw Amount of input tokens for the swap\n @return amountOutRaw Amount of output tokens from the swap"},"functionSelector":"2bfb780c","id":2015,"implemented":false,"kind":"function","modifiers":[],"name":"swap","nameLocation":"3587:4:11","nodeType":"FunctionDefinition","parameters":{"id":2007,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2006,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"3624:15:11","nodeType":"VariableDeclaration","scope":2015,"src":"3601:38:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2294_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":2005,"nodeType":"UserDefinedTypeName","pathNode":{"id":2004,"name":"VaultSwapParams","nameLocations":["3601:15:11"],"nodeType":"IdentifierPath","referencedDeclaration":2294,"src":"3601:15:11"},"referencedDeclaration":2294,"src":"3601:15:11","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2294_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"}],"src":"3591:54:11"},"returnParameters":{"id":2014,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2009,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"3672:19:11","nodeType":"VariableDeclaration","scope":2015,"src":"3664:27:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2008,"name":"uint256","nodeType":"ElementaryTypeName","src":"3664:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2011,"mutability":"mutable","name":"amountInRaw","nameLocation":"3701:11:11","nodeType":"VariableDeclaration","scope":2015,"src":"3693:19:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2010,"name":"uint256","nodeType":"ElementaryTypeName","src":"3693:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2013,"mutability":"mutable","name":"amountOutRaw","nameLocation":"3722:12:11","nodeType":"VariableDeclaration","scope":2015,"src":"3714:20:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2012,"name":"uint256","nodeType":"ElementaryTypeName","src":"3714:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3663:72:11"},"scope":2102,"src":"3578:158:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2016,"nodeType":"StructuredDocumentation","src":"3954:523:11","text":" @notice Adds liquidity to a pool.\n @dev Caution should be exercised when adding liquidity because the Vault has the capability\n to transfer tokens from any user, given that it holds all allowances.\n @param params Parameters for the add liquidity (see above for struct definition)\n @return amountsIn Actual amounts of input tokens\n @return bptAmountOut Output pool token amount\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"4af29ec4","id":2029,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidity","nameLocation":"4491:12:11","nodeType":"FunctionDefinition","parameters":{"id":2020,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2019,"mutability":"mutable","name":"params","nameLocation":"4539:6:11","nodeType":"VariableDeclaration","scope":2029,"src":"4513:32:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2363_memory_ptr","typeString":"struct AddLiquidityParams"},"typeName":{"id":2018,"nodeType":"UserDefinedTypeName","pathNode":{"id":2017,"name":"AddLiquidityParams","nameLocations":["4513:18:11"],"nodeType":"IdentifierPath","referencedDeclaration":2363,"src":"4513:18:11"},"referencedDeclaration":2363,"src":"4513:18:11","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2363_storage_ptr","typeString":"struct AddLiquidityParams"}},"visibility":"internal"}],"src":"4503:48:11"},"returnParameters":{"id":2028,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2023,"mutability":"mutable","name":"amountsIn","nameLocation":"4587:9:11","nodeType":"VariableDeclaration","scope":2029,"src":"4570:26:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2021,"name":"uint256","nodeType":"ElementaryTypeName","src":"4570:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2022,"nodeType":"ArrayTypeName","src":"4570:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2025,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4606:12:11","nodeType":"VariableDeclaration","scope":2029,"src":"4598:20:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2024,"name":"uint256","nodeType":"ElementaryTypeName","src":"4598:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2027,"mutability":"mutable","name":"returnData","nameLocation":"4633:10:11","nodeType":"VariableDeclaration","scope":2029,"src":"4620:23:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2026,"name":"bytes","nodeType":"ElementaryTypeName","src":"4620:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4569:75:11"},"scope":2102,"src":"4482:163:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2030,"nodeType":"StructuredDocumentation","src":"4864:644:11","text":" @notice Removes liquidity from a pool.\n @dev Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user.\n Untrusted routers require prior approval from the user. This is the only function allowed to call\n _queryModeBalanceIncrease (and only in a query context).\n @param params Parameters for the remove liquidity (see above for struct definition)\n @return bptAmountIn Actual amount of BPT burned\n @return amountsOut Actual amounts of output tokens\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"21457897","id":2043,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidity","nameLocation":"5522:15:11","nodeType":"FunctionDefinition","parameters":{"id":2034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2033,"mutability":"mutable","name":"params","nameLocation":"5576:6:11","nodeType":"VariableDeclaration","scope":2043,"src":"5547:35:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2384_memory_ptr","typeString":"struct RemoveLiquidityParams"},"typeName":{"id":2032,"nodeType":"UserDefinedTypeName","pathNode":{"id":2031,"name":"RemoveLiquidityParams","nameLocations":["5547:21:11"],"nodeType":"IdentifierPath","referencedDeclaration":2384,"src":"5547:21:11"},"referencedDeclaration":2384,"src":"5547:21:11","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2384_storage_ptr","typeString":"struct RemoveLiquidityParams"}},"visibility":"internal"}],"src":"5537:51:11"},"returnParameters":{"id":2042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2036,"mutability":"mutable","name":"bptAmountIn","nameLocation":"5615:11:11","nodeType":"VariableDeclaration","scope":2043,"src":"5607:19:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2035,"name":"uint256","nodeType":"ElementaryTypeName","src":"5607:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2039,"mutability":"mutable","name":"amountsOut","nameLocation":"5645:10:11","nodeType":"VariableDeclaration","scope":2043,"src":"5628:27:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2037,"name":"uint256","nodeType":"ElementaryTypeName","src":"5628:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2038,"nodeType":"ArrayTypeName","src":"5628:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2041,"mutability":"mutable","name":"returnData","nameLocation":"5670:10:11","nodeType":"VariableDeclaration","scope":2043,"src":"5657:23:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2040,"name":"bytes","nodeType":"ElementaryTypeName","src":"5657:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5606:75:11"},"scope":2102,"src":"5513:169:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2044,"nodeType":"StructuredDocumentation","src":"5912:385:11","text":" @notice Gets the index of a token in a given pool.\n @dev Reverts if the pool is not registered, or if the token does not belong to the pool.\n @param pool Address of the pool\n @param token Address of the token\n @return tokenCount Number of tokens in the pool\n @return index Index corresponding to the given token in the pool's token list"},"functionSelector":"c9c1661b","id":2056,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenCountAndIndexOfToken","nameLocation":"6311:32:11","nodeType":"FunctionDefinition","parameters":{"id":2050,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2046,"mutability":"mutable","name":"pool","nameLocation":"6361:4:11","nodeType":"VariableDeclaration","scope":2056,"src":"6353:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2045,"name":"address","nodeType":"ElementaryTypeName","src":"6353:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2049,"mutability":"mutable","name":"token","nameLocation":"6382:5:11","nodeType":"VariableDeclaration","scope":2056,"src":"6375:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":2048,"nodeType":"UserDefinedTypeName","pathNode":{"id":2047,"name":"IERC20","nameLocations":["6375:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"6375:6:11"},"referencedDeclaration":6486,"src":"6375:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"6343:50:11"},"returnParameters":{"id":2055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2052,"mutability":"mutable","name":"tokenCount","nameLocation":"6425:10:11","nodeType":"VariableDeclaration","scope":2056,"src":"6417:18:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2051,"name":"uint256","nodeType":"ElementaryTypeName","src":"6417:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2054,"mutability":"mutable","name":"index","nameLocation":"6445:5:11","nodeType":"VariableDeclaration","scope":2056,"src":"6437:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2053,"name":"uint256","nodeType":"ElementaryTypeName","src":"6437:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6416:35:11"},"scope":2102,"src":"6302:150:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2057,"nodeType":"StructuredDocumentation","src":"6683:460:11","text":" @notice Transfers pool token from owner to a recipient.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param owner Address of the owner\n @param to Address of the recipient\n @param amount Amount of tokens to transfer\n @return success True if successful, false otherwise"},"functionSelector":"beabacc8","id":2068,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"7157:8:11","nodeType":"FunctionDefinition","parameters":{"id":2064,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2059,"mutability":"mutable","name":"owner","nameLocation":"7174:5:11","nodeType":"VariableDeclaration","scope":2068,"src":"7166:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2058,"name":"address","nodeType":"ElementaryTypeName","src":"7166:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2061,"mutability":"mutable","name":"to","nameLocation":"7189:2:11","nodeType":"VariableDeclaration","scope":2068,"src":"7181:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2060,"name":"address","nodeType":"ElementaryTypeName","src":"7181:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2063,"mutability":"mutable","name":"amount","nameLocation":"7201:6:11","nodeType":"VariableDeclaration","scope":2068,"src":"7193:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2062,"name":"uint256","nodeType":"ElementaryTypeName","src":"7193:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7165:43:11"},"returnParameters":{"id":2067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2066,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2068,"src":"7227:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2065,"name":"bool","nodeType":"ElementaryTypeName","src":"7227:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7226:6:11"},"scope":2102,"src":"7148:85:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2069,"nodeType":"StructuredDocumentation","src":"7239:544:11","text":" @notice Transfers pool token from a sender to a recipient using an allowance.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param spender Address allowed to perform the transfer\n @param from Address of the sender\n @param to Address of the recipient\n @param amount Amount of tokens to transfer\n @return success True if successful, false otherwise"},"functionSelector":"15dacbea","id":2082,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"7797:12:11","nodeType":"FunctionDefinition","parameters":{"id":2078,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2071,"mutability":"mutable","name":"spender","nameLocation":"7818:7:11","nodeType":"VariableDeclaration","scope":2082,"src":"7810:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2070,"name":"address","nodeType":"ElementaryTypeName","src":"7810:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2073,"mutability":"mutable","name":"from","nameLocation":"7835:4:11","nodeType":"VariableDeclaration","scope":2082,"src":"7827:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2072,"name":"address","nodeType":"ElementaryTypeName","src":"7827:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2075,"mutability":"mutable","name":"to","nameLocation":"7849:2:11","nodeType":"VariableDeclaration","scope":2082,"src":"7841:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2074,"name":"address","nodeType":"ElementaryTypeName","src":"7841:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2077,"mutability":"mutable","name":"amount","nameLocation":"7861:6:11","nodeType":"VariableDeclaration","scope":2082,"src":"7853:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2076,"name":"uint256","nodeType":"ElementaryTypeName","src":"7853:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7809:59:11"},"returnParameters":{"id":2081,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2080,"mutability":"mutable","name":"success","nameLocation":"7892:7:11","nodeType":"VariableDeclaration","scope":2082,"src":"7887:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2079,"name":"bool","nodeType":"ElementaryTypeName","src":"7887:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7886:14:11"},"scope":2102,"src":"7788:113:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2083,"nodeType":"StructuredDocumentation","src":"8128:575:11","text":" @notice Wraps/unwraps tokens based on the parameters provided.\n @dev All parameters are given in raw token decimal encoding. It requires the buffer to be initialized,\n and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\n @param params Parameters for the wrap/unwrap operation (see struct definition)\n @return amountCalculatedRaw Calculated swap amount\n @return amountInRaw Amount of input tokens for the swap\n @return amountOutRaw Amount of output tokens from the swap"},"functionSelector":"43583be5","id":2095,"implemented":false,"kind":"function","modifiers":[],"name":"erc4626BufferWrapOrUnwrap","nameLocation":"8717:25:11","nodeType":"FunctionDefinition","parameters":{"id":2087,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2086,"mutability":"mutable","name":"params","nameLocation":"8784:6:11","nodeType":"VariableDeclaration","scope":2095,"src":"8752:38:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2402_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams"},"typeName":{"id":2085,"nodeType":"UserDefinedTypeName","pathNode":{"id":2084,"name":"BufferWrapOrUnwrapParams","nameLocations":["8752:24:11"],"nodeType":"IdentifierPath","referencedDeclaration":2402,"src":"8752:24:11"},"referencedDeclaration":2402,"src":"8752:24:11","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2402_storage_ptr","typeString":"struct BufferWrapOrUnwrapParams"}},"visibility":"internal"}],"src":"8742:54:11"},"returnParameters":{"id":2094,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2089,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"8823:19:11","nodeType":"VariableDeclaration","scope":2095,"src":"8815:27:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2088,"name":"uint256","nodeType":"ElementaryTypeName","src":"8815:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2091,"mutability":"mutable","name":"amountInRaw","nameLocation":"8852:11:11","nodeType":"VariableDeclaration","scope":2095,"src":"8844:19:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2090,"name":"uint256","nodeType":"ElementaryTypeName","src":"8844:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2093,"mutability":"mutable","name":"amountOutRaw","nameLocation":"8873:12:11","nodeType":"VariableDeclaration","scope":2095,"src":"8865:20:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2092,"name":"uint256","nodeType":"ElementaryTypeName","src":"8865:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8814:72:11"},"scope":2102,"src":"8708:179:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2096,"nodeType":"StructuredDocumentation","src":"9115:345:11","text":" @notice Returns the VaultExtension contract address.\n @dev Function is in the main Vault contract. The VaultExtension handles less critical or frequently used\n functions, since delegate calls through the Vault are more expensive than direct calls.\n @return vaultExtension Address of the VaultExtension"},"functionSelector":"b9a8effa","id":2101,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultExtension","nameLocation":"9474:17:11","nodeType":"FunctionDefinition","parameters":{"id":2097,"nodeType":"ParameterList","parameters":[],"src":"9491:2:11"},"returnParameters":{"id":2100,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2099,"mutability":"mutable","name":"vaultExtension","nameLocation":"9525:14:11","nodeType":"VariableDeclaration","scope":2101,"src":"9517:22:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2098,"name":"address","nodeType":"ElementaryTypeName","src":"9517:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9516:24:11"},"scope":2102,"src":"9465:76:11","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2103,"src":"407:9136:11","usedErrors":[],"usedEvents":[]}],"src":"46:9498:11"},"id":11},"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","exportedSymbols":{"AddLiquidityKind":[2347],"AddLiquidityParams":[2363],"AfterSwapParams":[2341],"BufferWrapOrUnwrapParams":[2402],"FEE_BITLENGTH":[2405],"FEE_SCALING_FACTOR":[2408],"HookFlags":[2167],"HooksConfig":[2191],"IERC20":[6486],"IERC4626":[6408],"IRateProvider":[57],"LiquidityManagement":[2120],"MAX_FEE_PERCENTAGE":[2411],"PoolConfig":[2145],"PoolConfigBits":[2122],"PoolData":[2269],"PoolRoleAccounts":[2217],"PoolSwapParams":[2312],"RemoveLiquidityKind":[2368],"RemoveLiquidityParams":[2384],"Rounding":[2272],"SwapKind":[2275],"SwapState":[2201],"TokenConfig":[2234],"TokenInfo":[2244],"TokenType":[2221],"VaultState":[2209],"VaultSwapParams":[2294],"WrappingDirection":[2387]},"id":2412,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2104,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:12"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2106,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2412,"sourceUnit":6487,"src":"72:72:12","symbolAliases":[{"foreign":{"id":2105,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6486,"src":"81:6:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":2108,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2412,"sourceUnit":6409,"src":"145:75:12","symbolAliases":[{"foreign":{"id":2107,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6408,"src":"154:8:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","file":"../solidity-utils/helpers/IRateProvider.sol","id":2110,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2412,"sourceUnit":58,"src":"222:76:12","symbolAliases":[{"foreign":{"id":2109,"name":"IRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":57,"src":"231:13:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"LiquidityManagement","documentation":{"id":2111,"nodeType":"StructuredDocumentation","src":"300:472:12","text":" @notice Represents a pool's liquidity management configuration.\n @param disableUnbalancedLiquidity If set, liquidity can only be added or removed proportionally\n @param enableAddLiquidityCustom If set, the pool has implemented `onAddLiquidityCustom`\n @param enableRemoveLiquidityCustom If set, the pool has implemented `onRemoveLiquidityCustom`\n @param enableDonation If set, the pool will not revert if liquidity is added with AddLiquidityKind.DONATION"},"id":2120,"members":[{"constant":false,"id":2113,"mutability":"mutable","name":"disableUnbalancedLiquidity","nameLocation":"811:26:12","nodeType":"VariableDeclaration","scope":2120,"src":"806:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2112,"name":"bool","nodeType":"ElementaryTypeName","src":"806:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2115,"mutability":"mutable","name":"enableAddLiquidityCustom","nameLocation":"848:24:12","nodeType":"VariableDeclaration","scope":2120,"src":"843:29:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2114,"name":"bool","nodeType":"ElementaryTypeName","src":"843:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2117,"mutability":"mutable","name":"enableRemoveLiquidityCustom","nameLocation":"883:27:12","nodeType":"VariableDeclaration","scope":2120,"src":"878:32:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2116,"name":"bool","nodeType":"ElementaryTypeName","src":"878:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2119,"mutability":"mutable","name":"enableDonation","nameLocation":"921:14:12","nodeType":"VariableDeclaration","scope":2120,"src":"916:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2118,"name":"bool","nodeType":"ElementaryTypeName","src":"916:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"LiquidityManagement","nameLocation":"780:19:12","nodeType":"StructDefinition","scope":2412,"src":"773:165:12","visibility":"public"},{"canonicalName":"PoolConfigBits","id":2122,"name":"PoolConfigBits","nameLocation":"1015:14:12","nodeType":"UserDefinedValueTypeDefinition","src":"1010:31:12","underlyingType":{"id":2121,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1033:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"canonicalName":"PoolConfig","documentation":{"id":2123,"nodeType":"StructuredDocumentation","src":"1043:1034:12","text":" @notice Represents a pool's configuration (hooks configuration are separated in another struct).\n @param liquidityManagement Flags related to adding/removing liquidity\n @param staticSwapFeePercentage The pool's native swap fee\n @param aggregateSwapFeePercentage The total swap fee charged, including protocol and pool creator components\n @param aggregateYieldFeePercentage The total swap fee charged, including protocol and pool creator components\n @param tokenDecimalDiffs Compressed storage of the token decimals of each pool token\n @param pauseWindowEndTime Timestamp after which the pool cannot be paused\n @param isPoolRegistered If true, the pool has been registered with the Vault\n @param isPoolInitialized If true, the pool has been initialized with liquidity, and is available for trading\n @param isPoolPaused If true, the pool has been paused (by governance or the pauseManager)\n @param isPoolInRecoveryMode If true, the pool has been placed in recovery mode, enabling recovery mode withdrawals"},"id":2145,"members":[{"constant":false,"id":2126,"mutability":"mutable","name":"liquidityManagement","nameLocation":"2122:19:12","nodeType":"VariableDeclaration","scope":2145,"src":"2102:39:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2120_storage_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":2125,"nodeType":"UserDefinedTypeName","pathNode":{"id":2124,"name":"LiquidityManagement","nameLocations":["2102:19:12"],"nodeType":"IdentifierPath","referencedDeclaration":2120,"src":"2102:19:12"},"referencedDeclaration":2120,"src":"2102:19:12","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2120_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"},{"constant":false,"id":2128,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"2155:23:12","nodeType":"VariableDeclaration","scope":2145,"src":"2147:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2127,"name":"uint256","nodeType":"ElementaryTypeName","src":"2147:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2130,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"2192:26:12","nodeType":"VariableDeclaration","scope":2145,"src":"2184:34:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2129,"name":"uint256","nodeType":"ElementaryTypeName","src":"2184:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2132,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"2232:27:12","nodeType":"VariableDeclaration","scope":2145,"src":"2224:35:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2131,"name":"uint256","nodeType":"ElementaryTypeName","src":"2224:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2134,"mutability":"mutable","name":"tokenDecimalDiffs","nameLocation":"2272:17:12","nodeType":"VariableDeclaration","scope":2145,"src":"2265:24:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":2133,"name":"uint40","nodeType":"ElementaryTypeName","src":"2265:6:12","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"},{"constant":false,"id":2136,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"2302:18:12","nodeType":"VariableDeclaration","scope":2145,"src":"2295:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2135,"name":"uint32","nodeType":"ElementaryTypeName","src":"2295:6:12","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2138,"mutability":"mutable","name":"isPoolRegistered","nameLocation":"2331:16:12","nodeType":"VariableDeclaration","scope":2145,"src":"2326:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2137,"name":"bool","nodeType":"ElementaryTypeName","src":"2326:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2140,"mutability":"mutable","name":"isPoolInitialized","nameLocation":"2358:17:12","nodeType":"VariableDeclaration","scope":2145,"src":"2353:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2139,"name":"bool","nodeType":"ElementaryTypeName","src":"2353:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2142,"mutability":"mutable","name":"isPoolPaused","nameLocation":"2386:12:12","nodeType":"VariableDeclaration","scope":2145,"src":"2381:17:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2141,"name":"bool","nodeType":"ElementaryTypeName","src":"2381:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2144,"mutability":"mutable","name":"isPoolInRecoveryMode","nameLocation":"2409:20:12","nodeType":"VariableDeclaration","scope":2145,"src":"2404:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2143,"name":"bool","nodeType":"ElementaryTypeName","src":"2404:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"PoolConfig","nameLocation":"2085:10:12","nodeType":"StructDefinition","scope":2412,"src":"2078:354:12","visibility":"public"},{"canonicalName":"HookFlags","documentation":{"id":2146,"nodeType":"StructuredDocumentation","src":"2434:352:12","text":" @notice The flag portion of the `HooksConfig`.\n @dev `enableHookAdjustedAmounts` must be true for all contracts that modify the `amountCalculated`\n in after hooks. Otherwise, the Vault will ignore any \"hookAdjusted\" amounts. Setting any \"shouldCall\"\n flags to true will cause the Vault to call the corresponding hook during operations."},"id":2167,"members":[{"constant":false,"id":2148,"mutability":"mutable","name":"enableHookAdjustedAmounts","nameLocation":"2815:25:12","nodeType":"VariableDeclaration","scope":2167,"src":"2810:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2147,"name":"bool","nodeType":"ElementaryTypeName","src":"2810:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2150,"mutability":"mutable","name":"shouldCallBeforeInitialize","nameLocation":"2851:26:12","nodeType":"VariableDeclaration","scope":2167,"src":"2846:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2149,"name":"bool","nodeType":"ElementaryTypeName","src":"2846:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2152,"mutability":"mutable","name":"shouldCallAfterInitialize","nameLocation":"2888:25:12","nodeType":"VariableDeclaration","scope":2167,"src":"2883:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2151,"name":"bool","nodeType":"ElementaryTypeName","src":"2883:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2154,"mutability":"mutable","name":"shouldCallComputeDynamicSwapFee","nameLocation":"2924:31:12","nodeType":"VariableDeclaration","scope":2167,"src":"2919:36:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2153,"name":"bool","nodeType":"ElementaryTypeName","src":"2919:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2156,"mutability":"mutable","name":"shouldCallBeforeSwap","nameLocation":"2966:20:12","nodeType":"VariableDeclaration","scope":2167,"src":"2961:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2155,"name":"bool","nodeType":"ElementaryTypeName","src":"2961:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2158,"mutability":"mutable","name":"shouldCallAfterSwap","nameLocation":"2997:19:12","nodeType":"VariableDeclaration","scope":2167,"src":"2992:24:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2157,"name":"bool","nodeType":"ElementaryTypeName","src":"2992:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2160,"mutability":"mutable","name":"shouldCallBeforeAddLiquidity","nameLocation":"3027:28:12","nodeType":"VariableDeclaration","scope":2167,"src":"3022:33:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2159,"name":"bool","nodeType":"ElementaryTypeName","src":"3022:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2162,"mutability":"mutable","name":"shouldCallAfterAddLiquidity","nameLocation":"3066:27:12","nodeType":"VariableDeclaration","scope":2167,"src":"3061:32:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2161,"name":"bool","nodeType":"ElementaryTypeName","src":"3061:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2164,"mutability":"mutable","name":"shouldCallBeforeRemoveLiquidity","nameLocation":"3104:31:12","nodeType":"VariableDeclaration","scope":2167,"src":"3099:36:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2163,"name":"bool","nodeType":"ElementaryTypeName","src":"3099:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2166,"mutability":"mutable","name":"shouldCallAfterRemoveLiquidity","nameLocation":"3146:30:12","nodeType":"VariableDeclaration","scope":2167,"src":"3141:35:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2165,"name":"bool","nodeType":"ElementaryTypeName","src":"3141:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"HookFlags","nameLocation":"2794:9:12","nodeType":"StructDefinition","scope":2412,"src":"2787:392:12","visibility":"public"},{"canonicalName":"HooksConfig","documentation":{"id":2168,"nodeType":"StructuredDocumentation","src":"3181:101:12","text":"@notice Represents a hook contract configuration for a pool (HookFlags + hooksContract address)."},"id":2191,"members":[{"constant":false,"id":2170,"mutability":"mutable","name":"enableHookAdjustedAmounts","nameLocation":"3312:25:12","nodeType":"VariableDeclaration","scope":2191,"src":"3307:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2169,"name":"bool","nodeType":"ElementaryTypeName","src":"3307:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2172,"mutability":"mutable","name":"shouldCallBeforeInitialize","nameLocation":"3348:26:12","nodeType":"VariableDeclaration","scope":2191,"src":"3343:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2171,"name":"bool","nodeType":"ElementaryTypeName","src":"3343:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2174,"mutability":"mutable","name":"shouldCallAfterInitialize","nameLocation":"3385:25:12","nodeType":"VariableDeclaration","scope":2191,"src":"3380:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2173,"name":"bool","nodeType":"ElementaryTypeName","src":"3380:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2176,"mutability":"mutable","name":"shouldCallComputeDynamicSwapFee","nameLocation":"3421:31:12","nodeType":"VariableDeclaration","scope":2191,"src":"3416:36:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2175,"name":"bool","nodeType":"ElementaryTypeName","src":"3416:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2178,"mutability":"mutable","name":"shouldCallBeforeSwap","nameLocation":"3463:20:12","nodeType":"VariableDeclaration","scope":2191,"src":"3458:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2177,"name":"bool","nodeType":"ElementaryTypeName","src":"3458:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2180,"mutability":"mutable","name":"shouldCallAfterSwap","nameLocation":"3494:19:12","nodeType":"VariableDeclaration","scope":2191,"src":"3489:24:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2179,"name":"bool","nodeType":"ElementaryTypeName","src":"3489:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2182,"mutability":"mutable","name":"shouldCallBeforeAddLiquidity","nameLocation":"3524:28:12","nodeType":"VariableDeclaration","scope":2191,"src":"3519:33:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2181,"name":"bool","nodeType":"ElementaryTypeName","src":"3519:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2184,"mutability":"mutable","name":"shouldCallAfterAddLiquidity","nameLocation":"3563:27:12","nodeType":"VariableDeclaration","scope":2191,"src":"3558:32:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2183,"name":"bool","nodeType":"ElementaryTypeName","src":"3558:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2186,"mutability":"mutable","name":"shouldCallBeforeRemoveLiquidity","nameLocation":"3601:31:12","nodeType":"VariableDeclaration","scope":2191,"src":"3596:36:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2185,"name":"bool","nodeType":"ElementaryTypeName","src":"3596:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2188,"mutability":"mutable","name":"shouldCallAfterRemoveLiquidity","nameLocation":"3643:30:12","nodeType":"VariableDeclaration","scope":2191,"src":"3638:35:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2187,"name":"bool","nodeType":"ElementaryTypeName","src":"3638:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2190,"mutability":"mutable","name":"hooksContract","nameLocation":"3687:13:12","nodeType":"VariableDeclaration","scope":2191,"src":"3679:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2189,"name":"address","nodeType":"ElementaryTypeName","src":"3679:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"HooksConfig","nameLocation":"3289:11:12","nodeType":"StructDefinition","scope":2412,"src":"3282:421:12","visibility":"public"},{"canonicalName":"SwapState","documentation":{"id":2192,"nodeType":"StructuredDocumentation","src":"3705:364:12","text":" @notice Represents temporary state used during a swap operation.\n @param indexIn The zero-based index of tokenIn\n @param indexOut The zero-based index of tokenOut\n @param amountGivenScaled18 The amountGiven (i.e., tokenIn for ExactIn), adjusted for token decimals\n @param swapFeePercentage The swap fee to be applied (might be static or dynamic)"},"id":2201,"members":[{"constant":false,"id":2194,"mutability":"mutable","name":"indexIn","nameLocation":"4101:7:12","nodeType":"VariableDeclaration","scope":2201,"src":"4093:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2193,"name":"uint256","nodeType":"ElementaryTypeName","src":"4093:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2196,"mutability":"mutable","name":"indexOut","nameLocation":"4122:8:12","nodeType":"VariableDeclaration","scope":2201,"src":"4114:16:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2195,"name":"uint256","nodeType":"ElementaryTypeName","src":"4114:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2198,"mutability":"mutable","name":"amountGivenScaled18","nameLocation":"4144:19:12","nodeType":"VariableDeclaration","scope":2201,"src":"4136:27:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2197,"name":"uint256","nodeType":"ElementaryTypeName","src":"4136:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2200,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"4177:17:12","nodeType":"VariableDeclaration","scope":2201,"src":"4169:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2199,"name":"uint256","nodeType":"ElementaryTypeName","src":"4169:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"SwapState","nameLocation":"4077:9:12","nodeType":"StructDefinition","scope":2412,"src":"4070:127:12","visibility":"public"},{"canonicalName":"VaultState","documentation":{"id":2202,"nodeType":"StructuredDocumentation","src":"4199:381:12","text":" @notice Represents the Vault's configuration.\n @param isQueryDisabled If set to true, disables query functionality of the Vault. Can be modified by governance\n @param isVaultPaused If set to true, swaps and add/remove liquidity operations are halted\n @param areBuffersPaused If set to true, the Vault wrap/unwrap primitives associated with buffers will be disabled"},"id":2209,"members":[{"constant":false,"id":2204,"mutability":"mutable","name":"isQueryDisabled","nameLocation":"4610:15:12","nodeType":"VariableDeclaration","scope":2209,"src":"4605:20:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2203,"name":"bool","nodeType":"ElementaryTypeName","src":"4605:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2206,"mutability":"mutable","name":"isVaultPaused","nameLocation":"4636:13:12","nodeType":"VariableDeclaration","scope":2209,"src":"4631:18:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2205,"name":"bool","nodeType":"ElementaryTypeName","src":"4631:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2208,"mutability":"mutable","name":"areBuffersPaused","nameLocation":"4660:16:12","nodeType":"VariableDeclaration","scope":2209,"src":"4655:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2207,"name":"bool","nodeType":"ElementaryTypeName","src":"4655:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"VaultState","nameLocation":"4588:10:12","nodeType":"StructDefinition","scope":2412,"src":"4581:98:12","visibility":"public"},{"canonicalName":"PoolRoleAccounts","documentation":{"id":2210,"nodeType":"StructuredDocumentation","src":"4681:461:12","text":" @notice Represents the accounts holding certain roles for a given pool. This is passed in on pool registration.\n @param pauseManager Account empowered to pause/unpause the pool (note that governance can always pause a pool)\n @param swapFeeManager Account empowered to set static swap fees for a pool (or 0 to delegate to governance)\n @param poolCreator Account empowered to set the pool creator fee (or 0 if all fees go to the protocol and LPs)"},"id":2217,"members":[{"constant":false,"id":2212,"mutability":"mutable","name":"pauseManager","nameLocation":"5181:12:12","nodeType":"VariableDeclaration","scope":2217,"src":"5173:20:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2211,"name":"address","nodeType":"ElementaryTypeName","src":"5173:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2214,"mutability":"mutable","name":"swapFeeManager","nameLocation":"5207:14:12","nodeType":"VariableDeclaration","scope":2217,"src":"5199:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2213,"name":"address","nodeType":"ElementaryTypeName","src":"5199:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2216,"mutability":"mutable","name":"poolCreator","nameLocation":"5235:11:12","nodeType":"VariableDeclaration","scope":2217,"src":"5227:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2215,"name":"address","nodeType":"ElementaryTypeName","src":"5227:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"PoolRoleAccounts","nameLocation":"5150:16:12","nodeType":"StructDefinition","scope":2412,"src":"5143:106:12","visibility":"public"},{"canonicalName":"TokenType","documentation":{"id":2218,"nodeType":"StructuredDocumentation","src":"9245:1024:12","text":" @notice Token types supported by the Vault.\n @dev In general, pools may contain any combination of these tokens.\n STANDARD tokens (e.g., BAL, WETH) have no rate provider.\n WITH_RATE tokens (e.g., wstETH) require a rate provider. These may be tokens like wstETH, which need to be wrapped\n because the underlying stETH token is rebasing, and such tokens are unsupported by the Vault. They may also be\n tokens like sEUR, which track an underlying asset, but are not yield-bearing. Finally, this encompasses\n yield-bearing ERC4626 tokens, which can be used to facilitate swaps without requiring wrapping or unwrapping\n in most cases. The `paysYieldFees` flag can be used to indicate whether a token is yield-bearing (e.g., waDAI),\n not yield-bearing (e.g., sEUR), or yield-bearing but exempt from fees (e.g., in certain nested pools, where\n yield fees are charged elsewhere).\n NB: STANDARD must always be the first enum element, so that newly initialized data structures default to Standard."},"id":2221,"members":[{"id":2219,"name":"STANDARD","nameLocation":"10291:8:12","nodeType":"EnumValue","src":"10291:8:12"},{"id":2220,"name":"WITH_RATE","nameLocation":"10305:9:12","nodeType":"EnumValue","src":"10305:9:12"}],"name":"TokenType","nameLocation":"10275:9:12","nodeType":"EnumDefinition","src":"10270:46:12"},{"canonicalName":"TokenConfig","documentation":{"id":2222,"nodeType":"StructuredDocumentation","src":"10318:915:12","text":" @notice Encapsulate the data required for the Vault to support a token of the given type.\n @dev For STANDARD tokens, the rate provider address must be 0, and paysYieldFees must be false. All WITH_RATE tokens\n need a rate provider, and may or may not be yield-bearing.\n At registration time, it is useful to include the token address along with the token parameters in the structure\n passed to `registerPool`, as the alternative would be parallel arrays, which would be error prone and require\n validation checks. `TokenConfig` is only used for registration, and is never put into storage (see `TokenInfo`).\n @param token The token address\n @param tokenType The token type (see the enum for supported types)\n @param rateProvider The rate provider for a token (see further documentation above)\n @param paysYieldFees Flag indicating whether yield fees should be charged on this token"},"id":2234,"members":[{"constant":false,"id":2225,"mutability":"mutable","name":"token","nameLocation":"11266:5:12","nodeType":"VariableDeclaration","scope":2234,"src":"11259:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":2224,"nodeType":"UserDefinedTypeName","pathNode":{"id":2223,"name":"IERC20","nameLocations":["11259:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"11259:6:12"},"referencedDeclaration":6486,"src":"11259:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2228,"mutability":"mutable","name":"tokenType","nameLocation":"11287:9:12","nodeType":"VariableDeclaration","scope":2234,"src":"11277:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2221","typeString":"enum TokenType"},"typeName":{"id":2227,"nodeType":"UserDefinedTypeName","pathNode":{"id":2226,"name":"TokenType","nameLocations":["11277:9:12"],"nodeType":"IdentifierPath","referencedDeclaration":2221,"src":"11277:9:12"},"referencedDeclaration":2221,"src":"11277:9:12","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2221","typeString":"enum TokenType"}},"visibility":"internal"},{"constant":false,"id":2231,"mutability":"mutable","name":"rateProvider","nameLocation":"11316:12:12","nodeType":"VariableDeclaration","scope":2234,"src":"11302:26:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$57","typeString":"contract IRateProvider"},"typeName":{"id":2230,"nodeType":"UserDefinedTypeName","pathNode":{"id":2229,"name":"IRateProvider","nameLocations":["11302:13:12"],"nodeType":"IdentifierPath","referencedDeclaration":57,"src":"11302:13:12"},"referencedDeclaration":57,"src":"11302:13:12","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$57","typeString":"contract IRateProvider"}},"visibility":"internal"},{"constant":false,"id":2233,"mutability":"mutable","name":"paysYieldFees","nameLocation":"11339:13:12","nodeType":"VariableDeclaration","scope":2234,"src":"11334:18:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2232,"name":"bool","nodeType":"ElementaryTypeName","src":"11334:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"TokenConfig","nameLocation":"11241:11:12","nodeType":"StructDefinition","scope":2412,"src":"11234:121:12","visibility":"public"},{"canonicalName":"TokenInfo","documentation":{"id":2235,"nodeType":"StructuredDocumentation","src":"11357:592:12","text":" @notice This data structure is stored in `_poolTokenInfo`, a nested mapping from pool -> (token -> TokenInfo).\n @dev Since the token is already the key of the nested mapping, it would be redundant (and an extra SLOAD) to store\n it again in the struct. When we construct PoolData, the tokens are separated into their own array.\n @param tokenType The token type (see the enum for supported types)\n @param rateProvider The rate provider for a token (see further documentation above)\n @param paysYieldFees Flag indicating whether yield fees should be charged on this token"},"id":2244,"members":[{"constant":false,"id":2238,"mutability":"mutable","name":"tokenType","nameLocation":"11983:9:12","nodeType":"VariableDeclaration","scope":2244,"src":"11973:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2221","typeString":"enum TokenType"},"typeName":{"id":2237,"nodeType":"UserDefinedTypeName","pathNode":{"id":2236,"name":"TokenType","nameLocations":["11973:9:12"],"nodeType":"IdentifierPath","referencedDeclaration":2221,"src":"11973:9:12"},"referencedDeclaration":2221,"src":"11973:9:12","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2221","typeString":"enum TokenType"}},"visibility":"internal"},{"constant":false,"id":2241,"mutability":"mutable","name":"rateProvider","nameLocation":"12012:12:12","nodeType":"VariableDeclaration","scope":2244,"src":"11998:26:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$57","typeString":"contract IRateProvider"},"typeName":{"id":2240,"nodeType":"UserDefinedTypeName","pathNode":{"id":2239,"name":"IRateProvider","nameLocations":["11998:13:12"],"nodeType":"IdentifierPath","referencedDeclaration":57,"src":"11998:13:12"},"referencedDeclaration":57,"src":"11998:13:12","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$57","typeString":"contract IRateProvider"}},"visibility":"internal"},{"constant":false,"id":2243,"mutability":"mutable","name":"paysYieldFees","nameLocation":"12035:13:12","nodeType":"VariableDeclaration","scope":2244,"src":"12030:18:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2242,"name":"bool","nodeType":"ElementaryTypeName","src":"12030:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"TokenInfo","nameLocation":"11957:9:12","nodeType":"StructDefinition","scope":2412,"src":"11950:101:12","visibility":"public"},{"canonicalName":"PoolData","documentation":{"id":2245,"nodeType":"StructuredDocumentation","src":"12053:761:12","text":" @notice Data structure used to represent the current pool state in memory\n @param poolConfigBits Custom type to store the entire configuration of the pool.\n @param tokens Pool tokens, sorted in token registration order\n @param tokenInfo Configuration data for each token, sorted in token registration order\n @param balancesRaw Token balances in native decimals\n @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. It is 1e18 (FP 1) for 18-decimal tokens"},"id":2269,"members":[{"constant":false,"id":2248,"mutability":"mutable","name":"poolConfigBits","nameLocation":"12852:14:12","nodeType":"VariableDeclaration","scope":2269,"src":"12837:29:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2122","typeString":"PoolConfigBits"},"typeName":{"id":2247,"nodeType":"UserDefinedTypeName","pathNode":{"id":2246,"name":"PoolConfigBits","nameLocations":["12837:14:12"],"nodeType":"IdentifierPath","referencedDeclaration":2122,"src":"12837:14:12"},"referencedDeclaration":2122,"src":"12837:14:12","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2122","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":2252,"mutability":"mutable","name":"tokens","nameLocation":"12881:6:12","nodeType":"VariableDeclaration","scope":2269,"src":"12872:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_storage_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2250,"nodeType":"UserDefinedTypeName","pathNode":{"id":2249,"name":"IERC20","nameLocations":["12872:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"12872:6:12"},"referencedDeclaration":6486,"src":"12872:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":2251,"nodeType":"ArrayTypeName","src":"12872:8:12","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":2256,"mutability":"mutable","name":"tokenInfo","nameLocation":"12905:9:12","nodeType":"VariableDeclaration","scope":2269,"src":"12893:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2244_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":2254,"nodeType":"UserDefinedTypeName","pathNode":{"id":2253,"name":"TokenInfo","nameLocations":["12893:9:12"],"nodeType":"IdentifierPath","referencedDeclaration":2244,"src":"12893:9:12"},"referencedDeclaration":2244,"src":"12893:9:12","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2244_storage_ptr","typeString":"struct TokenInfo"}},"id":2255,"nodeType":"ArrayTypeName","src":"12893:11:12","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2244_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":2259,"mutability":"mutable","name":"balancesRaw","nameLocation":"12930:11:12","nodeType":"VariableDeclaration","scope":2269,"src":"12920:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2257,"name":"uint256","nodeType":"ElementaryTypeName","src":"12920:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2258,"nodeType":"ArrayTypeName","src":"12920:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2262,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"12957:20:12","nodeType":"VariableDeclaration","scope":2269,"src":"12947:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2260,"name":"uint256","nodeType":"ElementaryTypeName","src":"12947:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2261,"nodeType":"ArrayTypeName","src":"12947:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2265,"mutability":"mutable","name":"tokenRates","nameLocation":"12993:10:12","nodeType":"VariableDeclaration","scope":2269,"src":"12983:20:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2263,"name":"uint256","nodeType":"ElementaryTypeName","src":"12983:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2264,"nodeType":"ArrayTypeName","src":"12983:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2268,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"13019:21:12","nodeType":"VariableDeclaration","scope":2269,"src":"13009:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2266,"name":"uint256","nodeType":"ElementaryTypeName","src":"13009:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2267,"nodeType":"ArrayTypeName","src":"13009:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"name":"PoolData","nameLocation":"12822:8:12","nodeType":"StructDefinition","scope":2412,"src":"12815:228:12","visibility":"public"},{"canonicalName":"Rounding","id":2272,"members":[{"id":2270,"name":"ROUND_UP","nameLocation":"13065:8:12","nodeType":"EnumValue","src":"13065:8:12"},{"id":2271,"name":"ROUND_DOWN","nameLocation":"13079:10:12","nodeType":"EnumValue","src":"13079:10:12"}],"name":"Rounding","nameLocation":"13050:8:12","nodeType":"EnumDefinition","src":"13045:46:12"},{"canonicalName":"SwapKind","id":2275,"members":[{"id":2273,"name":"EXACT_IN","nameLocation":"13318:8:12","nodeType":"EnumValue","src":"13318:8:12"},{"id":2274,"name":"EXACT_OUT","nameLocation":"13332:9:12","nodeType":"EnumValue","src":"13332:9:12"}],"name":"SwapKind","nameLocation":"13303:8:12","nodeType":"EnumDefinition","src":"13298:45:12"},{"canonicalName":"VaultSwapParams","documentation":{"id":2276,"nodeType":"StructuredDocumentation","src":"14089:558:12","text":" @notice Data passed into primary Vault `swap` operations.\n @param kind Type of swap (Exact In or Exact Out)\n @param pool The pool with the tokens being swapped\n @param tokenIn The token entering the Vault (balance increases)\n @param tokenOut The token leaving the Vault (balance decreases)\n @param amountGivenRaw Amount specified for tokenIn or tokenOut (depending on the type of swap)\n @param limitRaw Minimum or maximum value of the calculated amount (depending on the type of swap)\n @param userData Additional (optional) user data"},"id":2294,"members":[{"constant":false,"id":2279,"mutability":"mutable","name":"kind","nameLocation":"14686:4:12","nodeType":"VariableDeclaration","scope":2294,"src":"14677:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2275","typeString":"enum SwapKind"},"typeName":{"id":2278,"nodeType":"UserDefinedTypeName","pathNode":{"id":2277,"name":"SwapKind","nameLocations":["14677:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":2275,"src":"14677:8:12"},"referencedDeclaration":2275,"src":"14677:8:12","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2275","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2281,"mutability":"mutable","name":"pool","nameLocation":"14704:4:12","nodeType":"VariableDeclaration","scope":2294,"src":"14696:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2280,"name":"address","nodeType":"ElementaryTypeName","src":"14696:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2284,"mutability":"mutable","name":"tokenIn","nameLocation":"14721:7:12","nodeType":"VariableDeclaration","scope":2294,"src":"14714:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":2283,"nodeType":"UserDefinedTypeName","pathNode":{"id":2282,"name":"IERC20","nameLocations":["14714:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"14714:6:12"},"referencedDeclaration":6486,"src":"14714:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2287,"mutability":"mutable","name":"tokenOut","nameLocation":"14741:8:12","nodeType":"VariableDeclaration","scope":2294,"src":"14734:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":2286,"nodeType":"UserDefinedTypeName","pathNode":{"id":2285,"name":"IERC20","nameLocations":["14734:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"14734:6:12"},"referencedDeclaration":6486,"src":"14734:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2289,"mutability":"mutable","name":"amountGivenRaw","nameLocation":"14763:14:12","nodeType":"VariableDeclaration","scope":2294,"src":"14755:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2288,"name":"uint256","nodeType":"ElementaryTypeName","src":"14755:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2291,"mutability":"mutable","name":"limitRaw","nameLocation":"14791:8:12","nodeType":"VariableDeclaration","scope":2294,"src":"14783:16:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2290,"name":"uint256","nodeType":"ElementaryTypeName","src":"14783:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2293,"mutability":"mutable","name":"userData","nameLocation":"14811:8:12","nodeType":"VariableDeclaration","scope":2294,"src":"14805:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2292,"name":"bytes","nodeType":"ElementaryTypeName","src":"14805:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"VaultSwapParams","nameLocation":"14655:15:12","nodeType":"StructDefinition","scope":2412,"src":"14648:174:12","visibility":"public"},{"canonicalName":"PoolSwapParams","documentation":{"id":2295,"nodeType":"StructuredDocumentation","src":"14824:530:12","text":" @notice Data for a swap operation, used by contracts implementing `IBasePool`.\n @param kind Type of swap (exact in or exact out)\n @param amountGivenScaled18 Amount given based on kind of the swap (e.g., tokenIn for EXACT_IN)\n @param balancesScaled18 Current pool balances\n @param indexIn Index of tokenIn\n @param indexOut Index of tokenOut\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param userData Additional (optional) data required for the swap"},"id":2312,"members":[{"constant":false,"id":2298,"mutability":"mutable","name":"kind","nameLocation":"15392:4:12","nodeType":"VariableDeclaration","scope":2312,"src":"15383:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2275","typeString":"enum SwapKind"},"typeName":{"id":2297,"nodeType":"UserDefinedTypeName","pathNode":{"id":2296,"name":"SwapKind","nameLocations":["15383:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":2275,"src":"15383:8:12"},"referencedDeclaration":2275,"src":"15383:8:12","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2275","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2300,"mutability":"mutable","name":"amountGivenScaled18","nameLocation":"15410:19:12","nodeType":"VariableDeclaration","scope":2312,"src":"15402:27:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2299,"name":"uint256","nodeType":"ElementaryTypeName","src":"15402:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2303,"mutability":"mutable","name":"balancesScaled18","nameLocation":"15445:16:12","nodeType":"VariableDeclaration","scope":2312,"src":"15435:26:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2301,"name":"uint256","nodeType":"ElementaryTypeName","src":"15435:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2302,"nodeType":"ArrayTypeName","src":"15435:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2305,"mutability":"mutable","name":"indexIn","nameLocation":"15475:7:12","nodeType":"VariableDeclaration","scope":2312,"src":"15467:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2304,"name":"uint256","nodeType":"ElementaryTypeName","src":"15467:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2307,"mutability":"mutable","name":"indexOut","nameLocation":"15496:8:12","nodeType":"VariableDeclaration","scope":2312,"src":"15488:16:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2306,"name":"uint256","nodeType":"ElementaryTypeName","src":"15488:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2309,"mutability":"mutable","name":"router","nameLocation":"15518:6:12","nodeType":"VariableDeclaration","scope":2312,"src":"15510:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2308,"name":"address","nodeType":"ElementaryTypeName","src":"15510:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2311,"mutability":"mutable","name":"userData","nameLocation":"15536:8:12","nodeType":"VariableDeclaration","scope":2312,"src":"15530:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2310,"name":"bytes","nodeType":"ElementaryTypeName","src":"15530:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"PoolSwapParams","nameLocation":"15362:14:12","nodeType":"StructDefinition","scope":2412,"src":"15355:192:12","visibility":"public"},{"canonicalName":"AfterSwapParams","documentation":{"id":2313,"nodeType":"StructuredDocumentation","src":"15549:813:12","text":" @notice Data for the hook after a swap operation.\n @param kind Type of swap (exact in or exact out)\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param amountInScaled18 Amount of tokenIn (entering the Vault)\n @param amountOutScaled18 Amount of tokenOut (leaving the Vault)\n @param tokenInBalanceScaled18 Updated (after swap) balance of tokenIn\n @param tokenOutBalanceScaled18 Updated (after swap) balance of tokenOut\n @param amountCalculatedScaled18 Token amount calculated by the swap\n @param amountCalculatedRaw Token amount calculated by the swap\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param pool Pool address\n @param userData Additional (optional) data required for the swap"},"id":2341,"members":[{"constant":false,"id":2316,"mutability":"mutable","name":"kind","nameLocation":"16401:4:12","nodeType":"VariableDeclaration","scope":2341,"src":"16392:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2275","typeString":"enum SwapKind"},"typeName":{"id":2315,"nodeType":"UserDefinedTypeName","pathNode":{"id":2314,"name":"SwapKind","nameLocations":["16392:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":2275,"src":"16392:8:12"},"referencedDeclaration":2275,"src":"16392:8:12","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2275","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2319,"mutability":"mutable","name":"tokenIn","nameLocation":"16418:7:12","nodeType":"VariableDeclaration","scope":2341,"src":"16411:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":2318,"nodeType":"UserDefinedTypeName","pathNode":{"id":2317,"name":"IERC20","nameLocations":["16411:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"16411:6:12"},"referencedDeclaration":6486,"src":"16411:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2322,"mutability":"mutable","name":"tokenOut","nameLocation":"16438:8:12","nodeType":"VariableDeclaration","scope":2341,"src":"16431:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":2321,"nodeType":"UserDefinedTypeName","pathNode":{"id":2320,"name":"IERC20","nameLocations":["16431:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"16431:6:12"},"referencedDeclaration":6486,"src":"16431:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2324,"mutability":"mutable","name":"amountInScaled18","nameLocation":"16460:16:12","nodeType":"VariableDeclaration","scope":2341,"src":"16452:24:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2323,"name":"uint256","nodeType":"ElementaryTypeName","src":"16452:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2326,"mutability":"mutable","name":"amountOutScaled18","nameLocation":"16490:17:12","nodeType":"VariableDeclaration","scope":2341,"src":"16482:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2325,"name":"uint256","nodeType":"ElementaryTypeName","src":"16482:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2328,"mutability":"mutable","name":"tokenInBalanceScaled18","nameLocation":"16521:22:12","nodeType":"VariableDeclaration","scope":2341,"src":"16513:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2327,"name":"uint256","nodeType":"ElementaryTypeName","src":"16513:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2330,"mutability":"mutable","name":"tokenOutBalanceScaled18","nameLocation":"16557:23:12","nodeType":"VariableDeclaration","scope":2341,"src":"16549:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2329,"name":"uint256","nodeType":"ElementaryTypeName","src":"16549:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2332,"mutability":"mutable","name":"amountCalculatedScaled18","nameLocation":"16594:24:12","nodeType":"VariableDeclaration","scope":2341,"src":"16586:32:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2331,"name":"uint256","nodeType":"ElementaryTypeName","src":"16586:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2334,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"16632:19:12","nodeType":"VariableDeclaration","scope":2341,"src":"16624:27:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2333,"name":"uint256","nodeType":"ElementaryTypeName","src":"16624:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2336,"mutability":"mutable","name":"router","nameLocation":"16665:6:12","nodeType":"VariableDeclaration","scope":2341,"src":"16657:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2335,"name":"address","nodeType":"ElementaryTypeName","src":"16657:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2338,"mutability":"mutable","name":"pool","nameLocation":"16685:4:12","nodeType":"VariableDeclaration","scope":2341,"src":"16677:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2337,"name":"address","nodeType":"ElementaryTypeName","src":"16677:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2340,"mutability":"mutable","name":"userData","nameLocation":"16701:8:12","nodeType":"VariableDeclaration","scope":2341,"src":"16695:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2339,"name":"bytes","nodeType":"ElementaryTypeName","src":"16695:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"AfterSwapParams","nameLocation":"16370:15:12","nodeType":"StructDefinition","scope":2412,"src":"16363:349:12","visibility":"public"},{"canonicalName":"AddLiquidityKind","id":2347,"members":[{"id":2342,"name":"PROPORTIONAL","nameLocation":"16951:12:12","nodeType":"EnumValue","src":"16951:12:12"},{"id":2343,"name":"UNBALANCED","nameLocation":"16969:10:12","nodeType":"EnumValue","src":"16969:10:12"},{"id":2344,"name":"SINGLE_TOKEN_EXACT_OUT","nameLocation":"16985:22:12","nodeType":"EnumValue","src":"16985:22:12"},{"id":2345,"name":"DONATION","nameLocation":"17013:8:12","nodeType":"EnumValue","src":"17013:8:12"},{"id":2346,"name":"CUSTOM","nameLocation":"17027:6:12","nodeType":"EnumValue","src":"17027:6:12"}],"name":"AddLiquidityKind","nameLocation":"16928:16:12","nodeType":"EnumDefinition","src":"16923:112:12"},{"canonicalName":"AddLiquidityParams","documentation":{"id":2348,"nodeType":"StructuredDocumentation","src":"17037:320:12","text":" @notice Data for an add liquidity operation.\n @param pool Address of the pool\n @param to Address of user to mint to\n @param maxAmountsIn Maximum amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param kind Add liquidity kind\n @param userData Optional user data"},"id":2363,"members":[{"constant":false,"id":2350,"mutability":"mutable","name":"pool","nameLocation":"17398:4:12","nodeType":"VariableDeclaration","scope":2363,"src":"17390:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2349,"name":"address","nodeType":"ElementaryTypeName","src":"17390:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2352,"mutability":"mutable","name":"to","nameLocation":"17416:2:12","nodeType":"VariableDeclaration","scope":2363,"src":"17408:10:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2351,"name":"address","nodeType":"ElementaryTypeName","src":"17408:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2355,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"17434:12:12","nodeType":"VariableDeclaration","scope":2363,"src":"17424:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2353,"name":"uint256","nodeType":"ElementaryTypeName","src":"17424:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2354,"nodeType":"ArrayTypeName","src":"17424:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2357,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"17460:15:12","nodeType":"VariableDeclaration","scope":2363,"src":"17452:23:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2356,"name":"uint256","nodeType":"ElementaryTypeName","src":"17452:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2360,"mutability":"mutable","name":"kind","nameLocation":"17498:4:12","nodeType":"VariableDeclaration","scope":2363,"src":"17481:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2347","typeString":"enum AddLiquidityKind"},"typeName":{"id":2359,"nodeType":"UserDefinedTypeName","pathNode":{"id":2358,"name":"AddLiquidityKind","nameLocations":["17481:16:12"],"nodeType":"IdentifierPath","referencedDeclaration":2347,"src":"17481:16:12"},"referencedDeclaration":2347,"src":"17481:16:12","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2347","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":2362,"mutability":"mutable","name":"userData","nameLocation":"17514:8:12","nodeType":"VariableDeclaration","scope":2363,"src":"17508:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2361,"name":"bytes","nodeType":"ElementaryTypeName","src":"17508:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"AddLiquidityParams","nameLocation":"17365:18:12","nodeType":"StructDefinition","scope":2412,"src":"17358:167:12","visibility":"public"},{"canonicalName":"RemoveLiquidityKind","id":2368,"members":[{"id":2364,"name":"PROPORTIONAL","nameLocation":"17770:12:12","nodeType":"EnumValue","src":"17770:12:12"},{"id":2365,"name":"SINGLE_TOKEN_EXACT_IN","nameLocation":"17788:21:12","nodeType":"EnumValue","src":"17788:21:12"},{"id":2366,"name":"SINGLE_TOKEN_EXACT_OUT","nameLocation":"17815:22:12","nodeType":"EnumValue","src":"17815:22:12"},{"id":2367,"name":"CUSTOM","nameLocation":"17843:6:12","nodeType":"EnumValue","src":"17843:6:12"}],"name":"RemoveLiquidityKind","nameLocation":"17744:19:12","nodeType":"EnumDefinition","src":"17739:112:12"},{"canonicalName":"RemoveLiquidityParams","documentation":{"id":2369,"nodeType":"StructuredDocumentation","src":"17853:330:12","text":" @notice Data for an remove liquidity operation.\n @param pool Address of the pool\n @param from Address of user to burn from\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOut Minimum amounts of output tokens\n @param kind Remove liquidity kind\n @param userData Optional user data"},"id":2384,"members":[{"constant":false,"id":2371,"mutability":"mutable","name":"pool","nameLocation":"18227:4:12","nodeType":"VariableDeclaration","scope":2384,"src":"18219:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2370,"name":"address","nodeType":"ElementaryTypeName","src":"18219:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2373,"mutability":"mutable","name":"from","nameLocation":"18245:4:12","nodeType":"VariableDeclaration","scope":2384,"src":"18237:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2372,"name":"address","nodeType":"ElementaryTypeName","src":"18237:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2375,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"18263:14:12","nodeType":"VariableDeclaration","scope":2384,"src":"18255:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2374,"name":"uint256","nodeType":"ElementaryTypeName","src":"18255:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2378,"mutability":"mutable","name":"minAmountsOut","nameLocation":"18293:13:12","nodeType":"VariableDeclaration","scope":2384,"src":"18283:23:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2376,"name":"uint256","nodeType":"ElementaryTypeName","src":"18283:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2377,"nodeType":"ArrayTypeName","src":"18283:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2381,"mutability":"mutable","name":"kind","nameLocation":"18332:4:12","nodeType":"VariableDeclaration","scope":2384,"src":"18312:24:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2368","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":2380,"nodeType":"UserDefinedTypeName","pathNode":{"id":2379,"name":"RemoveLiquidityKind","nameLocations":["18312:19:12"],"nodeType":"IdentifierPath","referencedDeclaration":2368,"src":"18312:19:12"},"referencedDeclaration":2368,"src":"18312:19:12","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2368","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":2383,"mutability":"mutable","name":"userData","nameLocation":"18348:8:12","nodeType":"VariableDeclaration","scope":2384,"src":"18342:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2382,"name":"bytes","nodeType":"ElementaryTypeName","src":"18342:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"RemoveLiquidityParams","nameLocation":"18191:21:12","nodeType":"StructDefinition","scope":2412,"src":"18184:175:12","visibility":"public"},{"canonicalName":"WrappingDirection","id":2387,"members":[{"id":2385,"name":"WRAP","nameLocation":"18602:4:12","nodeType":"EnumValue","src":"18602:4:12"},{"id":2386,"name":"UNWRAP","nameLocation":"18612:6:12","nodeType":"EnumValue","src":"18612:6:12"}],"name":"WrappingDirection","nameLocation":"18578:17:12","nodeType":"EnumDefinition","src":"18573:47:12"},{"canonicalName":"BufferWrapOrUnwrapParams","documentation":{"id":2388,"nodeType":"StructuredDocumentation","src":"18622:499:12","text":" @notice Data for a wrap/unwrap operation.\n @param kind Type of swap (Exact In or Exact Out)\n @param direction Direction of the wrapping operation (Wrap or Unwrap)\n @param wrappedToken Wrapped token, compatible with interface ERC4626\n @param amountGivenRaw Amount specified for tokenIn or tokenOut (depends on the type of swap and wrapping direction)\n @param limitRaw Minimum or maximum amount specified for the other token (depends on the type of swap and wrapping\n direction)"},"id":2402,"members":[{"constant":false,"id":2391,"mutability":"mutable","name":"kind","nameLocation":"19169:4:12","nodeType":"VariableDeclaration","scope":2402,"src":"19160:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2275","typeString":"enum SwapKind"},"typeName":{"id":2390,"nodeType":"UserDefinedTypeName","pathNode":{"id":2389,"name":"SwapKind","nameLocations":["19160:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":2275,"src":"19160:8:12"},"referencedDeclaration":2275,"src":"19160:8:12","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2275","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2394,"mutability":"mutable","name":"direction","nameLocation":"19197:9:12","nodeType":"VariableDeclaration","scope":2402,"src":"19179:27:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$2387","typeString":"enum WrappingDirection"},"typeName":{"id":2393,"nodeType":"UserDefinedTypeName","pathNode":{"id":2392,"name":"WrappingDirection","nameLocations":["19179:17:12"],"nodeType":"IdentifierPath","referencedDeclaration":2387,"src":"19179:17:12"},"referencedDeclaration":2387,"src":"19179:17:12","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$2387","typeString":"enum WrappingDirection"}},"visibility":"internal"},{"constant":false,"id":2397,"mutability":"mutable","name":"wrappedToken","nameLocation":"19221:12:12","nodeType":"VariableDeclaration","scope":2402,"src":"19212:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"},"typeName":{"id":2396,"nodeType":"UserDefinedTypeName","pathNode":{"id":2395,"name":"IERC4626","nameLocations":["19212:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":6408,"src":"19212:8:12"},"referencedDeclaration":6408,"src":"19212:8:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6408","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":2399,"mutability":"mutable","name":"amountGivenRaw","nameLocation":"19247:14:12","nodeType":"VariableDeclaration","scope":2402,"src":"19239:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2398,"name":"uint256","nodeType":"ElementaryTypeName","src":"19239:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2401,"mutability":"mutable","name":"limitRaw","nameLocation":"19275:8:12","nodeType":"VariableDeclaration","scope":2402,"src":"19267:16:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2400,"name":"uint256","nodeType":"ElementaryTypeName","src":"19267:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"BufferWrapOrUnwrapParams","nameLocation":"19129:24:12","nodeType":"StructDefinition","scope":2412,"src":"19122:164:12","visibility":"public"},{"constant":true,"id":2405,"mutability":"constant","name":"FEE_BITLENGTH","nameLocation":"19611:13:12","nodeType":"VariableDeclaration","scope":2412,"src":"19594:35:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2403,"name":"uint256","nodeType":"ElementaryTypeName","src":"19594:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3234","id":2404,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19627:2:12","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},"visibility":"internal"},{"constant":true,"id":2408,"mutability":"constant","name":"FEE_SCALING_FACTOR","nameLocation":"19648:18:12","nodeType":"VariableDeclaration","scope":2412,"src":"19631:42:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2406,"name":"uint256","nodeType":"ElementaryTypeName","src":"19631:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653131","id":2407,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19669:4:12","typeDescriptions":{"typeIdentifier":"t_rational_100000000000_by_1","typeString":"int_const 100000000000"},"value":"1e11"},"visibility":"internal"},{"constant":true,"id":2411,"mutability":"constant","name":"MAX_FEE_PERCENTAGE","nameLocation":"19896:18:12","nodeType":"VariableDeclaration","scope":2412,"src":"19879:48:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2409,"name":"uint256","nodeType":"ElementaryTypeName","src":"19879:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"39392e39393939653136","id":2410,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19917:10:12","typeDescriptions":{"typeIdentifier":"t_rational_999999000000000000_by_1","typeString":"int_const 999999000000000000"},"value":"99.9999e16"},"visibility":"internal"}],"src":"46:19895:12"},"id":12},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","exportedSymbols":{"Authentication":[2491],"IAuthentication":[47]},"id":2492,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2413,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:13"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","id":2415,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2492,"sourceUnit":48,"src":"72:116:13","symbolAliases":[{"foreign":{"id":2414,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"81:15:13","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":2417,"name":"IAuthentication","nameLocations":["625:15:13"],"nodeType":"IdentifierPath","referencedDeclaration":47,"src":"625:15:13"},"id":2418,"nodeType":"InheritanceSpecifier","src":"625:15:13"}],"canonicalName":"Authentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":2416,"nodeType":"StructuredDocumentation","src":"190:398:13","text":" @notice Building block for performing access control on external functions.\n @dev This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be\n applied to external functions to make them only callable by authorized accounts.\n Derived contracts must implement the `_canPerform` function, which holds the actual access control logic."},"fullyImplemented":false,"id":2491,"linearizedBaseContracts":[2491,47],"name":"Authentication","nameLocation":"607:14:13","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":2420,"mutability":"immutable","name":"_actionIdDisambiguator","nameLocation":"673:22:13","nodeType":"VariableDeclaration","scope":2491,"src":"647:48:13","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2419,"name":"bytes32","nodeType":"ElementaryTypeName","src":"647:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"body":{"id":2430,"nodeType":"Block","src":"1337:63:13","statements":[{"expression":{"id":2428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2426,"name":"_actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2420,"src":"1347:22:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2427,"name":"actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2423,"src":"1372:21:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1347:46:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2429,"nodeType":"ExpressionStatement","src":"1347:46:13"}]},"documentation":{"id":2421,"nodeType":"StructuredDocumentation","src":"702:587:13","text":" @dev The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in\n multi-contract systems.\n There are two main uses for it:\n - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers\n unique. The contract's own address is a good option.\n - if the contract belongs to a family that shares action identifiers for the same functions, an identifier\n shared by the entire family (and no other contract) should be used instead."},"id":2431,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":2424,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2423,"mutability":"mutable","name":"actionIdDisambiguator","nameLocation":"1314:21:13","nodeType":"VariableDeclaration","scope":2431,"src":"1306:29:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2422,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1306:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1305:31:13"},"returnParameters":{"id":2425,"nodeType":"ParameterList","parameters":[],"src":"1337:0:13"},"scope":2491,"src":"1294:106:13","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2438,"nodeType":"Block","src":"1549:49:13","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2434,"name":"_authenticateCaller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2462,"src":"1559:19:13","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":2435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1559:21:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2436,"nodeType":"ExpressionStatement","src":"1559:21:13"},{"id":2437,"nodeType":"PlaceholderStatement","src":"1590:1:13"}]},"documentation":{"id":2432,"nodeType":"StructuredDocumentation","src":"1406:114:13","text":"@dev Reverts unless the caller is allowed to call this function. Should only be applied to external functions."},"id":2439,"name":"authenticate","nameLocation":"1534:12:13","nodeType":"ModifierDefinition","parameters":{"id":2433,"nodeType":"ParameterList","parameters":[],"src":"1546:2:13"},"src":"1525:73:13","virtual":false,"visibility":"internal"},{"body":{"id":2461,"nodeType":"Block","src":"1733:156:13","statements":[{"assignments":[2444],"declarations":[{"constant":false,"id":2444,"mutability":"mutable","name":"actionId","nameLocation":"1751:8:13","nodeType":"VariableDeclaration","scope":2461,"src":"1743:16:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2443,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1743:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2449,"initialValue":{"arguments":[{"expression":{"id":2446,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1774:3:13","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1778:3:13","memberName":"sig","nodeType":"MemberAccess","src":"1774:7:13","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":2445,"name":"getActionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2480,"src":"1762:11:13","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view returns (bytes32)"}},"id":2448,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1762:20:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1743:39:13"},{"condition":{"id":2455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1797:34:13","subExpression":{"arguments":[{"id":2451,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2444,"src":"1810:8:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":2452,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1820:3:13","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1824:6:13","memberName":"sender","nodeType":"MemberAccess","src":"1820:10:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2450,"name":"_canPerform","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2490,"src":"1798:11:13","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":2454,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1798:33:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2460,"nodeType":"IfStatement","src":"1793:90:13","trueBody":{"id":2459,"nodeType":"Block","src":"1833:50:13","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2456,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38,"src":"1854:16:13","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2457,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1854:18:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2458,"nodeType":"RevertStatement","src":"1847:25:13"}]}}]},"documentation":{"id":2440,"nodeType":"StructuredDocumentation","src":"1604:79:13","text":"@dev Reverts unless the caller is allowed to call the entry point function."},"id":2462,"implemented":true,"kind":"function","modifiers":[],"name":"_authenticateCaller","nameLocation":"1697:19:13","nodeType":"FunctionDefinition","parameters":{"id":2441,"nodeType":"ParameterList","parameters":[],"src":"1716:2:13"},"returnParameters":{"id":2442,"nodeType":"ParameterList","parameters":[],"src":"1733:0:13"},"scope":2491,"src":"1688:201:13","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[46],"body":{"id":2479,"nodeType":"Block","src":"2008:353:13","statements":[{"expression":{"arguments":[{"arguments":[{"id":2474,"name":"_actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2420,"src":"2320:22:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2475,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2465,"src":"2344:8:13","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":2472,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2303:3:13","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2473,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2307:12:13","memberName":"encodePacked","nodeType":"MemberAccess","src":"2303:16:13","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":2476,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2303:50:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2471,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2293:9:13","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":2477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2293:61:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":2470,"id":2478,"nodeType":"Return","src":"2286:68:13"}]},"documentation":{"id":2463,"nodeType":"StructuredDocumentation","src":"1895:31:13","text":"@inheritdoc IAuthentication"},"functionSelector":"851c1bb3","id":2480,"implemented":true,"kind":"function","modifiers":[],"name":"getActionId","nameLocation":"1940:11:13","nodeType":"FunctionDefinition","overrides":{"id":2467,"nodeType":"OverrideSpecifier","overrides":[],"src":"1981:8:13"},"parameters":{"id":2466,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2465,"mutability":"mutable","name":"selector","nameLocation":"1959:8:13","nodeType":"VariableDeclaration","scope":2480,"src":"1952:15:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":2464,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1952:6:13","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1951:17:13"},"returnParameters":{"id":2470,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2469,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2480,"src":"1999:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2468,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1999:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1998:9:13"},"scope":2491,"src":"1931:430:13","stateMutability":"view","virtual":false,"visibility":"public"},{"documentation":{"id":2481,"nodeType":"StructuredDocumentation","src":"2367:304:13","text":" @dev Derived contracts must implement this function to perform the actual access control logic.\n @param actionId The action identifier associated with an external function\n @param user The account performing the action\n @return success True if the action is permitted"},"id":2490,"implemented":false,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"2685:11:13","nodeType":"FunctionDefinition","parameters":{"id":2486,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2483,"mutability":"mutable","name":"actionId","nameLocation":"2705:8:13","nodeType":"VariableDeclaration","scope":2490,"src":"2697:16:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2482,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2697:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2485,"mutability":"mutable","name":"user","nameLocation":"2723:4:13","nodeType":"VariableDeclaration","scope":2490,"src":"2715:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2484,"name":"address","nodeType":"ElementaryTypeName","src":"2715:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2696:32:13"},"returnParameters":{"id":2489,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2488,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2490,"src":"2760:4:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2487,"name":"bool","nodeType":"ElementaryTypeName","src":"2760:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2759:6:13"},"scope":2491,"src":"2676:90:13","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":2492,"src":"589:2179:13","usedErrors":[38],"usedEvents":[]}],"src":"46:2723:13"},"id":13},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","exportedSymbols":{"FixedPoint":[2790],"LogExpMath":[4146]},"id":2791,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2493,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:14"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol","file":"./LogExpMath.sol","id":2495,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2791,"sourceUnit":4147,"src":"72:46:14","symbolAliases":[{"foreign":{"id":2494,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4146,"src":"81:10:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"FixedPoint","contractDependencies":[],"contractKind":"library","documentation":{"id":2496,"nodeType":"StructuredDocumentation","src":"120:119:14","text":"@notice Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision."},"fullyImplemented":true,"id":2790,"linearizedBaseContracts":[2790],"name":"FixedPoint","nameLocation":"247:10:14","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2497,"nodeType":"StructuredDocumentation","src":"264:39:14","text":"@notice Attempted division by zero."},"errorSelector":"0a0c22c7","id":2499,"name":"ZeroDivision","nameLocation":"314:12:14","nodeType":"ErrorDefinition","parameters":{"id":2498,"nodeType":"ParameterList","parameters":[],"src":"326:2:14"},"src":"308:21:14"},{"constant":true,"id":2502,"mutability":"constant","name":"ONE","nameLocation":"459:3:14","nodeType":"VariableDeclaration","scope":2790,"src":"433:36:14","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2500,"name":"uint256","nodeType":"ElementaryTypeName","src":"433:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653138","id":2501,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"465:4:14","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"internal"},{"constant":true,"id":2507,"mutability":"constant","name":"TWO","nameLocation":"522:3:14","nodeType":"VariableDeclaration","scope":2790,"src":"496:39:14","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2503,"name":"uint256","nodeType":"ElementaryTypeName","src":"496:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2506,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":2504,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"528:1:14","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2505,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2502,"src":"532:3:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"528:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":2512,"mutability":"constant","name":"FOUR","nameLocation":"567:4:14","nodeType":"VariableDeclaration","scope":2790,"src":"541:40:14","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2508,"name":"uint256","nodeType":"ElementaryTypeName","src":"541:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2511,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"34","id":2509,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"574:1:14","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2510,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2502,"src":"578:3:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"574:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":2515,"mutability":"constant","name":"MAX_POW_RELATIVE_ERROR","nameLocation":"613:22:14","nodeType":"VariableDeclaration","scope":2790,"src":"587:56:14","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2513,"name":"uint256","nodeType":"ElementaryTypeName","src":"587:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3130303030","id":2514,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"638:5:14","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"value":"10000"},"visibility":"internal"},{"body":{"id":2534,"nodeType":"Block","src":"733:148:14","statements":[{"assignments":[2525],"declarations":[{"constant":false,"id":2525,"mutability":"mutable","name":"product","nameLocation":"828:7:14","nodeType":"VariableDeclaration","scope":2534,"src":"820:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2524,"name":"uint256","nodeType":"ElementaryTypeName","src":"820:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2529,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2526,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2517,"src":"838:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2527,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2519,"src":"842:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"838:5:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"820:23:14"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2530,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2525,"src":"861:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":2531,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2502,"src":"871:3:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"861:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2523,"id":2533,"nodeType":"Return","src":"854:20:14"}]},"id":2535,"implemented":true,"kind":"function","modifiers":[],"name":"mulDown","nameLocation":"671:7:14","nodeType":"FunctionDefinition","parameters":{"id":2520,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2517,"mutability":"mutable","name":"a","nameLocation":"687:1:14","nodeType":"VariableDeclaration","scope":2535,"src":"679:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2516,"name":"uint256","nodeType":"ElementaryTypeName","src":"679:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2519,"mutability":"mutable","name":"b","nameLocation":"698:1:14","nodeType":"VariableDeclaration","scope":2535,"src":"690:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2518,"name":"uint256","nodeType":"ElementaryTypeName","src":"690:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"678:22:14"},"returnParameters":{"id":2523,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2522,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2535,"src":"724:7:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2521,"name":"uint256","nodeType":"ElementaryTypeName","src":"724:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"723:9:14"},"scope":2790,"src":"662:219:14","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2551,"nodeType":"Block","src":"963:351:14","statements":[{"assignments":[2545],"declarations":[{"constant":false,"id":2545,"mutability":"mutable","name":"product","nameLocation":"1058:7:14","nodeType":"VariableDeclaration","scope":2551,"src":"1050:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2544,"name":"uint256","nodeType":"ElementaryTypeName","src":"1050:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2549,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2546,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2537,"src":"1068:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2547,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2539,"src":"1072:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1068:5:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1050:23:14"},{"AST":{"nativeSrc":"1211:97:14","nodeType":"YulBlock","src":"1211:97:14","statements":[{"nativeSrc":"1225:73:14","nodeType":"YulAssignment","src":"1225:73:14","value":{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"1253:7:14","nodeType":"YulIdentifier","src":"1253:7:14"}],"functionName":{"name":"iszero","nativeSrc":"1246:6:14","nodeType":"YulIdentifier","src":"1246:6:14"},"nativeSrc":"1246:15:14","nodeType":"YulFunctionCall","src":"1246:15:14"}],"functionName":{"name":"iszero","nativeSrc":"1239:6:14","nodeType":"YulIdentifier","src":"1239:6:14"},"nativeSrc":"1239:23:14","nodeType":"YulFunctionCall","src":"1239:23:14"},{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"1276:7:14","nodeType":"YulIdentifier","src":"1276:7:14"},{"kind":"number","nativeSrc":"1285:1:14","nodeType":"YulLiteral","src":"1285:1:14","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"1272:3:14","nodeType":"YulIdentifier","src":"1272:3:14"},"nativeSrc":"1272:15:14","nodeType":"YulFunctionCall","src":"1272:15:14"},{"name":"ONE","nativeSrc":"1289:3:14","nodeType":"YulIdentifier","src":"1289:3:14"}],"functionName":{"name":"div","nativeSrc":"1268:3:14","nodeType":"YulIdentifier","src":"1268:3:14"},"nativeSrc":"1268:25:14","nodeType":"YulFunctionCall","src":"1268:25:14"},{"kind":"number","nativeSrc":"1295:1:14","nodeType":"YulLiteral","src":"1295:1:14","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"1264:3:14","nodeType":"YulIdentifier","src":"1264:3:14"},"nativeSrc":"1264:33:14","nodeType":"YulFunctionCall","src":"1264:33:14"}],"functionName":{"name":"mul","nativeSrc":"1235:3:14","nodeType":"YulIdentifier","src":"1235:3:14"},"nativeSrc":"1235:63:14","nodeType":"YulFunctionCall","src":"1235:63:14"},"variableNames":[{"name":"result","nativeSrc":"1225:6:14","nodeType":"YulIdentifier","src":"1225:6:14"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":2502,"isOffset":false,"isSlot":false,"src":"1289:3:14","valueSize":1},{"declaration":2545,"isOffset":false,"isSlot":false,"src":"1253:7:14","valueSize":1},{"declaration":2545,"isOffset":false,"isSlot":false,"src":"1276:7:14","valueSize":1},{"declaration":2542,"isOffset":false,"isSlot":false,"src":"1225:6:14","valueSize":1}],"flags":["memory-safe"],"id":2550,"nodeType":"InlineAssembly","src":"1186:122:14"}]},"id":2552,"implemented":true,"kind":"function","modifiers":[],"name":"mulUp","nameLocation":"896:5:14","nodeType":"FunctionDefinition","parameters":{"id":2540,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2537,"mutability":"mutable","name":"a","nameLocation":"910:1:14","nodeType":"VariableDeclaration","scope":2552,"src":"902:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2536,"name":"uint256","nodeType":"ElementaryTypeName","src":"902:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2539,"mutability":"mutable","name":"b","nameLocation":"921:1:14","nodeType":"VariableDeclaration","scope":2552,"src":"913:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2538,"name":"uint256","nodeType":"ElementaryTypeName","src":"913:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"901:22:14"},"returnParameters":{"id":2543,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2542,"mutability":"mutable","name":"result","nameLocation":"955:6:14","nodeType":"VariableDeclaration","scope":2552,"src":"947:14:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2541,"name":"uint256","nodeType":"ElementaryTypeName","src":"947:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"946:16:14"},"scope":2790,"src":"887:427:14","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2571,"nodeType":"Block","src":"1391:254:14","statements":[{"assignments":[2562],"declarations":[{"constant":false,"id":2562,"mutability":"mutable","name":"aInflated","nameLocation":"1499:9:14","nodeType":"VariableDeclaration","scope":2571,"src":"1491:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2561,"name":"uint256","nodeType":"ElementaryTypeName","src":"1491:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2566,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2563,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2554,"src":"1511:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2564,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2502,"src":"1515:3:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1511:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1491:27:14"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2567,"name":"aInflated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2562,"src":"1625:9:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":2568,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2556,"src":"1637:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1625:13:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2560,"id":2570,"nodeType":"Return","src":"1618:20:14"}]},"id":2572,"implemented":true,"kind":"function","modifiers":[],"name":"divDown","nameLocation":"1329:7:14","nodeType":"FunctionDefinition","parameters":{"id":2557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2554,"mutability":"mutable","name":"a","nameLocation":"1345:1:14","nodeType":"VariableDeclaration","scope":2572,"src":"1337:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2553,"name":"uint256","nodeType":"ElementaryTypeName","src":"1337:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2556,"mutability":"mutable","name":"b","nameLocation":"1356:1:14","nodeType":"VariableDeclaration","scope":2572,"src":"1348:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2555,"name":"uint256","nodeType":"ElementaryTypeName","src":"1348:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1336:22:14"},"returnParameters":{"id":2560,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2559,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2572,"src":"1382:7:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2558,"name":"uint256","nodeType":"ElementaryTypeName","src":"1382:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1381:9:14"},"scope":2790,"src":"1320:325:14","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2587,"nodeType":"Block","src":"1727:43:14","statements":[{"expression":{"arguments":[{"id":2582,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2574,"src":"1753:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2583,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2502,"src":"1756:3:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2584,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2576,"src":"1761:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2581,"name":"mulDivUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2616,"src":"1744:8:14","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":2585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1744:19:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2580,"id":2586,"nodeType":"Return","src":"1737:26:14"}]},"id":2588,"implemented":true,"kind":"function","modifiers":[],"name":"divUp","nameLocation":"1660:5:14","nodeType":"FunctionDefinition","parameters":{"id":2577,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2574,"mutability":"mutable","name":"a","nameLocation":"1674:1:14","nodeType":"VariableDeclaration","scope":2588,"src":"1666:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2573,"name":"uint256","nodeType":"ElementaryTypeName","src":"1666:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2576,"mutability":"mutable","name":"b","nameLocation":"1685:1:14","nodeType":"VariableDeclaration","scope":2588,"src":"1677:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2575,"name":"uint256","nodeType":"ElementaryTypeName","src":"1677:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1665:22:14"},"returnParameters":{"id":2580,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2579,"mutability":"mutable","name":"result","nameLocation":"1719:6:14","nodeType":"VariableDeclaration","scope":2588,"src":"1711:14:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2578,"name":"uint256","nodeType":"ElementaryTypeName","src":"1711:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1710:16:14"},"scope":2790,"src":"1651:119:14","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2615,"nodeType":"Block","src":"1912:774:14","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2600,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2595,"src":"2004:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2601,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2009:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2004:6:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2607,"nodeType":"IfStatement","src":"2000:58:14","trueBody":{"id":2606,"nodeType":"Block","src":"2012:46:14","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2603,"name":"ZeroDivision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2499,"src":"2033:12:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2033:14:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2605,"nodeType":"RevertStatement","src":"2026:21:14"}]}},{"assignments":[2609],"declarations":[{"constant":false,"id":2609,"mutability":"mutable","name":"product","nameLocation":"2143:7:14","nodeType":"VariableDeclaration","scope":2615,"src":"2135:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2608,"name":"uint256","nodeType":"ElementaryTypeName","src":"2135:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2613,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2610,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2591,"src":"2153:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2611,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2593,"src":"2157:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2153:5:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2135:23:14"},{"AST":{"nativeSrc":"2585:95:14","nodeType":"YulBlock","src":"2585:95:14","statements":[{"nativeSrc":"2599:71:14","nodeType":"YulAssignment","src":"2599:71:14","value":{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"2627:7:14","nodeType":"YulIdentifier","src":"2627:7:14"}],"functionName":{"name":"iszero","nativeSrc":"2620:6:14","nodeType":"YulIdentifier","src":"2620:6:14"},"nativeSrc":"2620:15:14","nodeType":"YulFunctionCall","src":"2620:15:14"}],"functionName":{"name":"iszero","nativeSrc":"2613:6:14","nodeType":"YulIdentifier","src":"2613:6:14"},"nativeSrc":"2613:23:14","nodeType":"YulFunctionCall","src":"2613:23:14"},{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"2650:7:14","nodeType":"YulIdentifier","src":"2650:7:14"},{"kind":"number","nativeSrc":"2659:1:14","nodeType":"YulLiteral","src":"2659:1:14","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"2646:3:14","nodeType":"YulIdentifier","src":"2646:3:14"},"nativeSrc":"2646:15:14","nodeType":"YulFunctionCall","src":"2646:15:14"},{"name":"c","nativeSrc":"2663:1:14","nodeType":"YulIdentifier","src":"2663:1:14"}],"functionName":{"name":"div","nativeSrc":"2642:3:14","nodeType":"YulIdentifier","src":"2642:3:14"},"nativeSrc":"2642:23:14","nodeType":"YulFunctionCall","src":"2642:23:14"},{"kind":"number","nativeSrc":"2667:1:14","nodeType":"YulLiteral","src":"2667:1:14","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"2638:3:14","nodeType":"YulIdentifier","src":"2638:3:14"},"nativeSrc":"2638:31:14","nodeType":"YulFunctionCall","src":"2638:31:14"}],"functionName":{"name":"mul","nativeSrc":"2609:3:14","nodeType":"YulIdentifier","src":"2609:3:14"},"nativeSrc":"2609:61:14","nodeType":"YulFunctionCall","src":"2609:61:14"},"variableNames":[{"name":"result","nativeSrc":"2599:6:14","nodeType":"YulIdentifier","src":"2599:6:14"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":2595,"isOffset":false,"isSlot":false,"src":"2663:1:14","valueSize":1},{"declaration":2609,"isOffset":false,"isSlot":false,"src":"2627:7:14","valueSize":1},{"declaration":2609,"isOffset":false,"isSlot":false,"src":"2650:7:14","valueSize":1},{"declaration":2598,"isOffset":false,"isSlot":false,"src":"2599:6:14","valueSize":1}],"flags":["memory-safe"],"id":2614,"nodeType":"InlineAssembly","src":"2560:120:14"}]},"documentation":{"id":2589,"nodeType":"StructuredDocumentation","src":"1776:41:14","text":"@dev Return (a * b) / c, rounding up."},"id":2616,"implemented":true,"kind":"function","modifiers":[],"name":"mulDivUp","nameLocation":"1831:8:14","nodeType":"FunctionDefinition","parameters":{"id":2596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2591,"mutability":"mutable","name":"a","nameLocation":"1848:1:14","nodeType":"VariableDeclaration","scope":2616,"src":"1840:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2590,"name":"uint256","nodeType":"ElementaryTypeName","src":"1840:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2593,"mutability":"mutable","name":"b","nameLocation":"1859:1:14","nodeType":"VariableDeclaration","scope":2616,"src":"1851:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2592,"name":"uint256","nodeType":"ElementaryTypeName","src":"1851:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2595,"mutability":"mutable","name":"c","nameLocation":"1870:1:14","nodeType":"VariableDeclaration","scope":2616,"src":"1862:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2594,"name":"uint256","nodeType":"ElementaryTypeName","src":"1862:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1839:33:14"},"returnParameters":{"id":2599,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2598,"mutability":"mutable","name":"result","nameLocation":"1904:6:14","nodeType":"VariableDeclaration","scope":2616,"src":"1896:14:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2597,"name":"uint256","nodeType":"ElementaryTypeName","src":"1896:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1895:16:14"},"scope":2790,"src":"1822:864:14","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2635,"nodeType":"Block","src":"3159:345:14","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2626,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2621,"src":"3251:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2627,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3256:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3251:6:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2633,"nodeType":"IfStatement","src":"3247:58:14","trueBody":{"id":2632,"nodeType":"Block","src":"3259:46:14","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2629,"name":"ZeroDivision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2499,"src":"3280:12:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3280:14:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2631,"nodeType":"RevertStatement","src":"3273:21:14"}]}},{"AST":{"nativeSrc":"3415:83:14","nodeType":"YulBlock","src":"3415:83:14","statements":[{"nativeSrc":"3429:59:14","nodeType":"YulAssignment","src":"3429:59:14","value":{"arguments":[{"arguments":[{"arguments":[{"name":"a","nativeSrc":"3457:1:14","nodeType":"YulIdentifier","src":"3457:1:14"}],"functionName":{"name":"iszero","nativeSrc":"3450:6:14","nodeType":"YulIdentifier","src":"3450:6:14"},"nativeSrc":"3450:9:14","nodeType":"YulFunctionCall","src":"3450:9:14"}],"functionName":{"name":"iszero","nativeSrc":"3443:6:14","nodeType":"YulIdentifier","src":"3443:6:14"},"nativeSrc":"3443:17:14","nodeType":"YulFunctionCall","src":"3443:17:14"},{"arguments":[{"kind":"number","nativeSrc":"3466:1:14","nodeType":"YulLiteral","src":"3466:1:14","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"a","nativeSrc":"3477:1:14","nodeType":"YulIdentifier","src":"3477:1:14"},{"kind":"number","nativeSrc":"3480:1:14","nodeType":"YulLiteral","src":"3480:1:14","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"3473:3:14","nodeType":"YulIdentifier","src":"3473:3:14"},"nativeSrc":"3473:9:14","nodeType":"YulFunctionCall","src":"3473:9:14"},{"name":"b","nativeSrc":"3484:1:14","nodeType":"YulIdentifier","src":"3484:1:14"}],"functionName":{"name":"div","nativeSrc":"3469:3:14","nodeType":"YulIdentifier","src":"3469:3:14"},"nativeSrc":"3469:17:14","nodeType":"YulFunctionCall","src":"3469:17:14"}],"functionName":{"name":"add","nativeSrc":"3462:3:14","nodeType":"YulIdentifier","src":"3462:3:14"},"nativeSrc":"3462:25:14","nodeType":"YulFunctionCall","src":"3462:25:14"}],"functionName":{"name":"mul","nativeSrc":"3439:3:14","nodeType":"YulIdentifier","src":"3439:3:14"},"nativeSrc":"3439:49:14","nodeType":"YulFunctionCall","src":"3439:49:14"},"variableNames":[{"name":"result","nativeSrc":"3429:6:14","nodeType":"YulIdentifier","src":"3429:6:14"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":2619,"isOffset":false,"isSlot":false,"src":"3457:1:14","valueSize":1},{"declaration":2619,"isOffset":false,"isSlot":false,"src":"3477:1:14","valueSize":1},{"declaration":2621,"isOffset":false,"isSlot":false,"src":"3484:1:14","valueSize":1},{"declaration":2624,"isOffset":false,"isSlot":false,"src":"3429:6:14","valueSize":1}],"flags":["memory-safe"],"id":2634,"nodeType":"InlineAssembly","src":"3390:108:14"}]},"documentation":{"id":2617,"nodeType":"StructuredDocumentation","src":"2692:383:14","text":" @dev Version of divUp when the input is raw (i.e., already \"inflated\"). For instance,\n invariant * invariant (36 decimals) vs. invariant.mulDown(invariant) (18 decimal FP).\n This can occur in calculations with many successive multiplications and divisions, and\n we want to minimize the number of operations by avoiding unnecessary scaling by ONE."},"id":2636,"implemented":true,"kind":"function","modifiers":[],"name":"divUpRaw","nameLocation":"3089:8:14","nodeType":"FunctionDefinition","parameters":{"id":2622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2619,"mutability":"mutable","name":"a","nameLocation":"3106:1:14","nodeType":"VariableDeclaration","scope":2636,"src":"3098:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2618,"name":"uint256","nodeType":"ElementaryTypeName","src":"3098:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2621,"mutability":"mutable","name":"b","nameLocation":"3117:1:14","nodeType":"VariableDeclaration","scope":2636,"src":"3109:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2620,"name":"uint256","nodeType":"ElementaryTypeName","src":"3109:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3097:22:14"},"returnParameters":{"id":2625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2624,"mutability":"mutable","name":"result","nameLocation":"3151:6:14","nodeType":"VariableDeclaration","scope":2636,"src":"3143:14:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2623,"name":"uint256","nodeType":"ElementaryTypeName","src":"3143:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3142:16:14"},"scope":2790,"src":"3080:424:14","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2711,"nodeType":"Block","src":"3807:723:14","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2646,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2641,"src":"3975:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2647,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2502,"src":"3980:3:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3975:8:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2652,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2641,"src":"4028:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2653,"name":"TWO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2507,"src":"4033:3:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4028:8:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2663,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2661,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2641,"src":"4093:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2662,"name":"FOUR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"4098:4:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4093:9:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2707,"nodeType":"Block","src":"4209:315:14","statements":[{"assignments":[2678],"declarations":[{"constant":false,"id":2678,"mutability":"mutable","name":"raw","nameLocation":"4231:3:14","nodeType":"VariableDeclaration","scope":2707,"src":"4223:11:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2677,"name":"uint256","nodeType":"ElementaryTypeName","src":"4223:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2684,"initialValue":{"arguments":[{"id":2681,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2639,"src":"4252:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2682,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2641,"src":"4255:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":2679,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4146,"src":"4237:10:14","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LogExpMath_$4146_$","typeString":"type(library LogExpMath)"}},"id":2680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4248:3:14","memberName":"pow","nodeType":"MemberAccess","referencedDeclaration":3049,"src":"4237:14:14","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4237:20:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4223:34:14"},{"assignments":[2686],"declarations":[{"constant":false,"id":2686,"mutability":"mutable","name":"maxError","nameLocation":"4279:8:14","nodeType":"VariableDeclaration","scope":2707,"src":"4271:16:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2685,"name":"uint256","nodeType":"ElementaryTypeName","src":"4271:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2693,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":2688,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2678,"src":"4296:3:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2689,"name":"MAX_POW_RELATIVE_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2515,"src":"4301:22:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2687,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2552,"src":"4290:5:14","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2690,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4290:34:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":2691,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4327:1:14","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4290:38:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4271:57:14"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2694,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2678,"src":"4347:3:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":2695,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2686,"src":"4353:8:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4347:14:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2705,"nodeType":"Block","src":"4410:104:14","statements":[{"id":2704,"nodeType":"UncheckedBlock","src":"4428:72:14","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2700,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2678,"src":"4467:3:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":2701,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2686,"src":"4473:8:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4467:14:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2645,"id":2703,"nodeType":"Return","src":"4460:21:14"}]}]},"id":2706,"nodeType":"IfStatement","src":"4343:171:14","trueBody":{"id":2699,"nodeType":"Block","src":"4363:41:14","statements":[{"expression":{"hexValue":"30","id":2697,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4388:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":2645,"id":2698,"nodeType":"Return","src":"4381:8:14"}]}}]},"id":2708,"nodeType":"IfStatement","src":"4089:435:14","trueBody":{"id":2676,"nodeType":"Block","src":"4104:99:14","statements":[{"assignments":[2665],"declarations":[{"constant":false,"id":2665,"mutability":"mutable","name":"square","nameLocation":"4126:6:14","nodeType":"VariableDeclaration","scope":2676,"src":"4118:14:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2664,"name":"uint256","nodeType":"ElementaryTypeName","src":"4118:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2670,"initialValue":{"arguments":[{"id":2667,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2639,"src":"4143:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2668,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2639,"src":"4146:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2666,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2535,"src":"4135:7:14","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4135:13:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4118:30:14"},{"expression":{"arguments":[{"id":2672,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2665,"src":"4177:6:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2673,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2665,"src":"4185:6:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2671,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2535,"src":"4169:7:14","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4169:23:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2645,"id":2675,"nodeType":"Return","src":"4162:30:14"}]}},"id":2709,"nodeType":"IfStatement","src":"4024:500:14","trueBody":{"id":2660,"nodeType":"Block","src":"4038:45:14","statements":[{"expression":{"arguments":[{"id":2656,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2639,"src":"4067:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2657,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2639,"src":"4070:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2655,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2535,"src":"4059:7:14","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4059:13:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2645,"id":2659,"nodeType":"Return","src":"4052:20:14"}]}},"id":2710,"nodeType":"IfStatement","src":"3971:553:14","trueBody":{"id":2651,"nodeType":"Block","src":"3985:33:14","statements":[{"expression":{"id":2649,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2639,"src":"4006:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2645,"id":2650,"nodeType":"Return","src":"3999:8:14"}]}}]},"documentation":{"id":2637,"nodeType":"StructuredDocumentation","src":"3510:221:14","text":" @dev Returns x^y, assuming both are fixed point numbers, rounding down. The result is guaranteed to not be above\n the true value (that is, the error function expected - actual is always positive)."},"id":2712,"implemented":true,"kind":"function","modifiers":[],"name":"powDown","nameLocation":"3745:7:14","nodeType":"FunctionDefinition","parameters":{"id":2642,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2639,"mutability":"mutable","name":"x","nameLocation":"3761:1:14","nodeType":"VariableDeclaration","scope":2712,"src":"3753:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2638,"name":"uint256","nodeType":"ElementaryTypeName","src":"3753:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2641,"mutability":"mutable","name":"y","nameLocation":"3772:1:14","nodeType":"VariableDeclaration","scope":2712,"src":"3764:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2640,"name":"uint256","nodeType":"ElementaryTypeName","src":"3764:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3752:22:14"},"returnParameters":{"id":2645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2644,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2712,"src":"3798:7:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2643,"name":"uint256","nodeType":"ElementaryTypeName","src":"3798:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3797:9:14"},"scope":2790,"src":"3736:794:14","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2778,"nodeType":"Block","src":"4829:568:14","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2722,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2717,"src":"4997:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2723,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2502,"src":"5002:3:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4997:8:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2728,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2717,"src":"5050:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2729,"name":"TWO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2507,"src":"5055:3:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5050:8:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2737,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2717,"src":"5113:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2738,"name":"FOUR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2512,"src":"5118:4:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5113:9:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2774,"nodeType":"Block","src":"5225:166:14","statements":[{"assignments":[2754],"declarations":[{"constant":false,"id":2754,"mutability":"mutable","name":"raw","nameLocation":"5247:3:14","nodeType":"VariableDeclaration","scope":2774,"src":"5239:11:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2753,"name":"uint256","nodeType":"ElementaryTypeName","src":"5239:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2760,"initialValue":{"arguments":[{"id":2757,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2715,"src":"5268:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2758,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2717,"src":"5271:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":2755,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4146,"src":"5253:10:14","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LogExpMath_$4146_$","typeString":"type(library LogExpMath)"}},"id":2756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5264:3:14","memberName":"pow","nodeType":"MemberAccess","referencedDeclaration":3049,"src":"5253:14:14","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5253:20:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5239:34:14"},{"assignments":[2762],"declarations":[{"constant":false,"id":2762,"mutability":"mutable","name":"maxError","nameLocation":"5295:8:14","nodeType":"VariableDeclaration","scope":2774,"src":"5287:16:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2761,"name":"uint256","nodeType":"ElementaryTypeName","src":"5287:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2769,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":2764,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2754,"src":"5312:3:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2765,"name":"MAX_POW_RELATIVE_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2515,"src":"5317:22:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2763,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2552,"src":"5306:5:14","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2766,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5306:34:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":2767,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5343:1:14","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5306:38:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5287:57:14"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2770,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2754,"src":"5366:3:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":2771,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2762,"src":"5372:8:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5366:14:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2721,"id":2773,"nodeType":"Return","src":"5359:21:14"}]},"id":2775,"nodeType":"IfStatement","src":"5109:282:14","trueBody":{"id":2752,"nodeType":"Block","src":"5124:95:14","statements":[{"assignments":[2741],"declarations":[{"constant":false,"id":2741,"mutability":"mutable","name":"square","nameLocation":"5146:6:14","nodeType":"VariableDeclaration","scope":2752,"src":"5138:14:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2740,"name":"uint256","nodeType":"ElementaryTypeName","src":"5138:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2746,"initialValue":{"arguments":[{"id":2743,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2715,"src":"5161:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2744,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2715,"src":"5164:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2742,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2552,"src":"5155:5:14","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2745,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5155:11:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5138:28:14"},{"expression":{"arguments":[{"id":2748,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2741,"src":"5193:6:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2749,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2741,"src":"5201:6:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2747,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2552,"src":"5187:5:14","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5187:21:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2721,"id":2751,"nodeType":"Return","src":"5180:28:14"}]}},"id":2776,"nodeType":"IfStatement","src":"5046:345:14","trueBody":{"id":2736,"nodeType":"Block","src":"5060:43:14","statements":[{"expression":{"arguments":[{"id":2732,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2715,"src":"5087:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2733,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2715,"src":"5090:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2731,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2552,"src":"5081:5:14","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2734,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5081:11:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2721,"id":2735,"nodeType":"Return","src":"5074:18:14"}]}},"id":2777,"nodeType":"IfStatement","src":"4993:398:14","trueBody":{"id":2727,"nodeType":"Block","src":"5007:33:14","statements":[{"expression":{"id":2725,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2715,"src":"5028:1:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2721,"id":2726,"nodeType":"Return","src":"5021:8:14"}]}}]},"documentation":{"id":2713,"nodeType":"StructuredDocumentation","src":"4536:219:14","text":" @dev Returns x^y, assuming both are fixed point numbers, rounding up. The result is guaranteed to not be below\n the true value (that is, the error function expected - actual is always negative)."},"id":2779,"implemented":true,"kind":"function","modifiers":[],"name":"powUp","nameLocation":"4769:5:14","nodeType":"FunctionDefinition","parameters":{"id":2718,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2715,"mutability":"mutable","name":"x","nameLocation":"4783:1:14","nodeType":"VariableDeclaration","scope":2779,"src":"4775:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2714,"name":"uint256","nodeType":"ElementaryTypeName","src":"4775:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2717,"mutability":"mutable","name":"y","nameLocation":"4794:1:14","nodeType":"VariableDeclaration","scope":2779,"src":"4786:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2716,"name":"uint256","nodeType":"ElementaryTypeName","src":"4786:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4774:22:14"},"returnParameters":{"id":2721,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2720,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2779,"src":"4820:7:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2719,"name":"uint256","nodeType":"ElementaryTypeName","src":"4820:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4819:9:14"},"scope":2790,"src":"4760:637:14","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2788,"nodeType":"Block","src":"5750:175:14","statements":[{"AST":{"nativeSrc":"5857:62:14","nodeType":"YulBlock","src":"5857:62:14","statements":[{"nativeSrc":"5871:38:14","nodeType":"YulAssignment","src":"5871:38:14","value":{"arguments":[{"arguments":[{"name":"x","nativeSrc":"5888:1:14","nodeType":"YulIdentifier","src":"5888:1:14"},{"name":"ONE","nativeSrc":"5891:3:14","nodeType":"YulIdentifier","src":"5891:3:14"}],"functionName":{"name":"lt","nativeSrc":"5885:2:14","nodeType":"YulIdentifier","src":"5885:2:14"},"nativeSrc":"5885:10:14","nodeType":"YulFunctionCall","src":"5885:10:14"},{"arguments":[{"name":"ONE","nativeSrc":"5901:3:14","nodeType":"YulIdentifier","src":"5901:3:14"},{"name":"x","nativeSrc":"5906:1:14","nodeType":"YulIdentifier","src":"5906:1:14"}],"functionName":{"name":"sub","nativeSrc":"5897:3:14","nodeType":"YulIdentifier","src":"5897:3:14"},"nativeSrc":"5897:11:14","nodeType":"YulFunctionCall","src":"5897:11:14"}],"functionName":{"name":"mul","nativeSrc":"5881:3:14","nodeType":"YulIdentifier","src":"5881:3:14"},"nativeSrc":"5881:28:14","nodeType":"YulFunctionCall","src":"5881:28:14"},"variableNames":[{"name":"result","nativeSrc":"5871:6:14","nodeType":"YulIdentifier","src":"5871:6:14"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":2502,"isOffset":false,"isSlot":false,"src":"5891:3:14","valueSize":1},{"declaration":2502,"isOffset":false,"isSlot":false,"src":"5901:3:14","valueSize":1},{"declaration":2785,"isOffset":false,"isSlot":false,"src":"5871:6:14","valueSize":1},{"declaration":2782,"isOffset":false,"isSlot":false,"src":"5888:1:14","valueSize":1},{"declaration":2782,"isOffset":false,"isSlot":false,"src":"5906:1:14","valueSize":1}],"flags":["memory-safe"],"id":2787,"nodeType":"InlineAssembly","src":"5832:87:14"}]},"documentation":{"id":2780,"nodeType":"StructuredDocumentation","src":"5403:272:14","text":" @dev Returns the complement of a value (1 - x), capped to 0 if x is larger than 1.\n Useful when computing the complement for values with some level of relative error, as it strips this error and\n prevents intermediate negative values."},"id":2789,"implemented":true,"kind":"function","modifiers":[],"name":"complement","nameLocation":"5689:10:14","nodeType":"FunctionDefinition","parameters":{"id":2783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2782,"mutability":"mutable","name":"x","nameLocation":"5708:1:14","nodeType":"VariableDeclaration","scope":2789,"src":"5700:9:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2781,"name":"uint256","nodeType":"ElementaryTypeName","src":"5700:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5699:11:14"},"returnParameters":{"id":2786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2785,"mutability":"mutable","name":"result","nameLocation":"5742:6:14","nodeType":"VariableDeclaration","scope":2789,"src":"5734:14:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2784,"name":"uint256","nodeType":"ElementaryTypeName","src":"5734:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5733:16:14"},"scope":2790,"src":"5680:245:14","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":2791,"src":"239:5688:14","usedErrors":[2499],"usedEvents":[]}],"src":"46:5882:14"},"id":14},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol","exportedSymbols":{"LogExpMath":[4146]},"id":4147,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":2792,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:15"},{"abstract":false,"baseContracts":[],"canonicalName":"LogExpMath","contractDependencies":[],"contractKind":"library","documentation":{"id":2793,"nodeType":"StructuredDocumentation","src":"79:515:15","text":" @dev Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument).\n Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural\n exponentiation and logarithm (where the base is Euler's number).\n All math operations are unchecked in order to save gas.\n @author Fernando Martinelli - @fernandomartinelli\n @author Sergio Yuhjtman - @sergioyuhjtman\n @author Daniel Fernandez - @dmf7z"},"fullyImplemented":true,"id":4146,"linearizedBaseContracts":[4146],"name":"LogExpMath","nameLocation":"603:10:15","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2794,"nodeType":"StructuredDocumentation","src":"620:79:15","text":"@notice This error is thrown when a base is not within an acceptable range."},"errorSelector":"022701e0","id":2796,"name":"BaseOutOfBounds","nameLocation":"710:15:15","nodeType":"ErrorDefinition","parameters":{"id":2795,"nodeType":"ParameterList","parameters":[],"src":"725:2:15"},"src":"704:24:15"},{"documentation":{"id":2797,"nodeType":"StructuredDocumentation","src":"734:83:15","text":"@notice This error is thrown when a exponent is not within an acceptable range."},"errorSelector":"d8317311","id":2799,"name":"ExponentOutOfBounds","nameLocation":"828:19:15","nodeType":"ErrorDefinition","parameters":{"id":2798,"nodeType":"ParameterList","parameters":[],"src":"847:2:15"},"src":"822:28:15"},{"documentation":{"id":2800,"nodeType":"StructuredDocumentation","src":"856:96:15","text":"@notice This error is thrown when the exponent * ln(base) is not within an acceptable range."},"errorSelector":"a2f9f7e3","id":2802,"name":"ProductOutOfBounds","nameLocation":"963:18:15","nodeType":"ErrorDefinition","parameters":{"id":2801,"nodeType":"ParameterList","parameters":[],"src":"981:2:15"},"src":"957:27:15"},{"documentation":{"id":2803,"nodeType":"StructuredDocumentation","src":"990:109:15","text":"@notice This error is thrown when an exponent used in the exp function is not within an acceptable range."},"errorSelector":"d4794efd","id":2805,"name":"InvalidExponent","nameLocation":"1110:15:15","nodeType":"ErrorDefinition","parameters":{"id":2804,"nodeType":"ParameterList","parameters":[],"src":"1125:2:15"},"src":"1104:24:15"},{"documentation":{"id":2806,"nodeType":"StructuredDocumentation","src":"1134:119:15","text":"@notice This error is thrown when a variable or result is not within the acceptable bounds defined in the function."},"errorSelector":"b4120f14","id":2808,"name":"OutOfBounds","nameLocation":"1264:11:15","nodeType":"ErrorDefinition","parameters":{"id":2807,"nodeType":"ParameterList","parameters":[],"src":"1275:2:15"},"src":"1258:20:15"},{"constant":true,"id":2811,"mutability":"constant","name":"ONE_18","nameLocation":"1555:6:15","nodeType":"VariableDeclaration","scope":4146,"src":"1539:29:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2809,"name":"int256","nodeType":"ElementaryTypeName","src":"1539:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653138","id":2810,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1564:4:15","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"internal"},{"constant":true,"id":2814,"mutability":"constant","name":"ONE_20","nameLocation":"1745:6:15","nodeType":"VariableDeclaration","scope":4146,"src":"1729:29:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2812,"name":"int256","nodeType":"ElementaryTypeName","src":"1729:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653230","id":2813,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1754:4:15","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000_by_1","typeString":"int_const 100000000000000000000"},"value":"1e20"},"visibility":"internal"},{"constant":true,"id":2817,"mutability":"constant","name":"ONE_36","nameLocation":"1780:6:15","nodeType":"VariableDeclaration","scope":4146,"src":"1764:29:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2815,"name":"int256","nodeType":"ElementaryTypeName","src":"1764:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653336","id":2816,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1789:4:15","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(29 digits omitted)...0000"},"value":"1e36"},"visibility":"internal"},{"constant":true,"id":2820,"mutability":"constant","name":"MAX_NATURAL_EXPONENT","nameLocation":"2326:20:15","nodeType":"VariableDeclaration","scope":4146,"src":"2310:45:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2818,"name":"int256","nodeType":"ElementaryTypeName","src":"2310:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313330653138","id":2819,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2349:6:15","typeDescriptions":{"typeIdentifier":"t_rational_130000000000000000000_by_1","typeString":"int_const 130000000000000000000"},"value":"130e18"},"visibility":"internal"},{"constant":true,"id":2824,"mutability":"constant","name":"MIN_NATURAL_EXPONENT","nameLocation":"2377:20:15","nodeType":"VariableDeclaration","scope":4146,"src":"2361:45:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2821,"name":"int256","nodeType":"ElementaryTypeName","src":"2361:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"id":2823,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"2400:6:15","subExpression":{"hexValue":"3431653138","id":2822,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2401:5:15","typeDescriptions":{"typeIdentifier":"t_rational_41000000000000000000_by_1","typeString":"int_const 41000000000000000000"},"value":"41e18"},"typeDescriptions":{"typeIdentifier":"t_rational_minus_41000000000000000000_by_1","typeString":"int_const -41000000000000000000"}},"visibility":"internal"},{"constant":true,"id":2829,"mutability":"constant","name":"LN_36_LOWER_BOUND","nameLocation":"2573:17:15","nodeType":"VariableDeclaration","scope":4146,"src":"2557:49:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2825,"name":"int256","nodeType":"ElementaryTypeName","src":"2557:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":2828,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":2826,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"2593:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31653137","id":2827,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2602:4:15","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000_by_1","typeString":"int_const 100000000000000000"},"value":"1e17"},"src":"2593:13:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":true,"id":2834,"mutability":"constant","name":"LN_36_UPPER_BOUND","nameLocation":"2628:17:15","nodeType":"VariableDeclaration","scope":4146,"src":"2612:49:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2830,"name":"int256","nodeType":"ElementaryTypeName","src":"2612:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":2833,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":2831,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"2648:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31653137","id":2832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2657:4:15","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000_by_1","typeString":"int_const 100000000000000000"},"value":"1e17"},"src":"2648:13:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":true,"id":2844,"mutability":"constant","name":"MILD_EXPONENT_BOUND","nameLocation":"2685:19:15","nodeType":"VariableDeclaration","scope":4146,"src":"2668:65:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2835,"name":"uint256","nodeType":"ElementaryTypeName","src":"2668:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2843,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_rational_28948022309329048855892746252171976963317496166410141009864396001978282409984_by_1","typeString":"int_const 2894...(69 digits omitted)...9984"},"id":2838,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":2836,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2707:1:15","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"323534","id":2837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2712:3:15","typeDescriptions":{"typeIdentifier":"t_rational_254_by_1","typeString":"int_const 254"},"value":"254"},"src":"2707:8:15","typeDescriptions":{"typeIdentifier":"t_rational_28948022309329048855892746252171976963317496166410141009864396001978282409984_by_1","typeString":"int_const 2894...(69 digits omitted)...9984"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"arguments":[{"id":2841,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"2726:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":2840,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2718:7:15","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2839,"name":"uint256","nodeType":"ElementaryTypeName","src":"2718:7:15","typeDescriptions":{}}},"id":2842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2718:15:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2707:26:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":2847,"mutability":"constant","name":"x0","nameLocation":"2784:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"2768:42:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2845,"name":"int256","nodeType":"ElementaryTypeName","src":"2768:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313238303030303030303030303030303030303030","id":2846,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2789:21:15","typeDescriptions":{"typeIdentifier":"t_rational_128000000000000000000_by_1","typeString":"int_const 128000000000000000000"},"value":"128000000000000000000"},"visibility":"internal"},{"constant":true,"id":2850,"mutability":"constant","name":"a0","nameLocation":"2840:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"2824:77:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2848,"name":"int256","nodeType":"ElementaryTypeName","src":"2824:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3338383737303834303539393435393530393232323030303030303030303030303030303030303030303030303030303030303030303030","id":2849,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2845:56:15","typeDescriptions":{"typeIdentifier":"t_rational_38877084059945950922200000000000000000000000000000000000_by_1","typeString":"int_const 3887...(48 digits omitted)...0000"},"value":"38877084059945950922200000000000000000000000000000000000"},"visibility":"internal"},{"constant":true,"id":2853,"mutability":"constant","name":"x1","nameLocation":"2948:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"2932:41:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2851,"name":"int256","nodeType":"ElementaryTypeName","src":"2932:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3634303030303030303030303030303030303030","id":2852,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2953:20:15","typeDescriptions":{"typeIdentifier":"t_rational_64000000000000000000_by_1","typeString":"int_const 64000000000000000000"},"value":"64000000000000000000"},"visibility":"internal"},{"constant":true,"id":2856,"mutability":"constant","name":"a1","nameLocation":"3003:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"2987:49:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2854,"name":"int256","nodeType":"ElementaryTypeName","src":"2987:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"36323335313439303830383131363136383832393130303030303030","id":2855,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3008:28:15","typeDescriptions":{"typeIdentifier":"t_rational_6235149080811616882910000000_by_1","typeString":"int_const 6235149080811616882910000000"},"value":"6235149080811616882910000000"},"visibility":"internal"},{"constant":true,"id":2859,"mutability":"constant","name":"x2","nameLocation":"3112:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3096:43:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2857,"name":"int256","nodeType":"ElementaryTypeName","src":"3096:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"33323030303030303030303030303030303030303030","id":2858,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3117:22:15","typeDescriptions":{"typeIdentifier":"t_rational_3200000000000000000000_by_1","typeString":"int_const 3200000000000000000000"},"value":"3200000000000000000000"},"visibility":"internal"},{"constant":true,"id":2862,"mutability":"constant","name":"a2","nameLocation":"3169:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3153:55:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2860,"name":"int256","nodeType":"ElementaryTypeName","src":"3153:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"37383936323936303138323638303639353136313030303030303030303030303030","id":2861,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3174:34:15","typeDescriptions":{"typeIdentifier":"t_rational_7896296018268069516100000000000000_by_1","typeString":"int_const 7896...(26 digits omitted)...0000"},"value":"7896296018268069516100000000000000"},"visibility":"internal"},{"constant":true,"id":2865,"mutability":"constant","name":"x3","nameLocation":"3241:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3225:43:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2863,"name":"int256","nodeType":"ElementaryTypeName","src":"3225:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31363030303030303030303030303030303030303030","id":2864,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3246:22:15","typeDescriptions":{"typeIdentifier":"t_rational_1600000000000000000000_by_1","typeString":"int_const 1600000000000000000000"},"value":"1600000000000000000000"},"visibility":"internal"},{"constant":true,"id":2868,"mutability":"constant","name":"a3","nameLocation":"3298:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3282:48:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2866,"name":"int256","nodeType":"ElementaryTypeName","src":"3282:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"383838363131303532303530373837323633363736303030303030","id":2867,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3303:27:15","typeDescriptions":{"typeIdentifier":"t_rational_888611052050787263676000000_by_1","typeString":"int_const 888611052050787263676000000"},"value":"888611052050787263676000000"},"visibility":"internal"},{"constant":true,"id":2871,"mutability":"constant","name":"x4","nameLocation":"3363:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3347:42:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2869,"name":"int256","nodeType":"ElementaryTypeName","src":"3347:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"383030303030303030303030303030303030303030","id":2870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3368:21:15","typeDescriptions":{"typeIdentifier":"t_rational_800000000000000000000_by_1","typeString":"int_const 800000000000000000000"},"value":"800000000000000000000"},"visibility":"internal"},{"constant":true,"id":2874,"mutability":"constant","name":"a4","nameLocation":"3419:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3403:45:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2872,"name":"int256","nodeType":"ElementaryTypeName","src":"3403:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323938303935373938373034313732383237343734303030","id":2873,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3424:24:15","typeDescriptions":{"typeIdentifier":"t_rational_298095798704172827474000_by_1","typeString":"int_const 298095798704172827474000"},"value":"298095798704172827474000"},"visibility":"internal"},{"constant":true,"id":2877,"mutability":"constant","name":"x5","nameLocation":"3481:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3465:42:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2875,"name":"int256","nodeType":"ElementaryTypeName","src":"3465:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"343030303030303030303030303030303030303030","id":2876,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3486:21:15","typeDescriptions":{"typeIdentifier":"t_rational_400000000000000000000_by_1","typeString":"int_const 400000000000000000000"},"value":"400000000000000000000"},"visibility":"internal"},{"constant":true,"id":2880,"mutability":"constant","name":"a5","nameLocation":"3537:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3521:43:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2878,"name":"int256","nodeType":"ElementaryTypeName","src":"3521:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"35343539383135303033333134343233393037383130","id":2879,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3542:22:15","typeDescriptions":{"typeIdentifier":"t_rational_5459815003314423907810_by_1","typeString":"int_const 5459815003314423907810"},"value":"5459815003314423907810"},"visibility":"internal"},{"constant":true,"id":2883,"mutability":"constant","name":"x6","nameLocation":"3597:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3581:42:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2881,"name":"int256","nodeType":"ElementaryTypeName","src":"3581:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323030303030303030303030303030303030303030","id":2882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3602:21:15","typeDescriptions":{"typeIdentifier":"t_rational_200000000000000000000_by_1","typeString":"int_const 200000000000000000000"},"value":"200000000000000000000"},"visibility":"internal"},{"constant":true,"id":2886,"mutability":"constant","name":"a6","nameLocation":"3653:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3637:42:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2884,"name":"int256","nodeType":"ElementaryTypeName","src":"3637:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"373338393035363039383933303635303232373233","id":2885,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3658:21:15","typeDescriptions":{"typeIdentifier":"t_rational_738905609893065022723_by_1","typeString":"int_const 738905609893065022723"},"value":"738905609893065022723"},"visibility":"internal"},{"constant":true,"id":2889,"mutability":"constant","name":"x7","nameLocation":"3712:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3696:42:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2887,"name":"int256","nodeType":"ElementaryTypeName","src":"3696:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313030303030303030303030303030303030303030","id":2888,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3717:21:15","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000_by_1","typeString":"int_const 100000000000000000000"},"value":"100000000000000000000"},"visibility":"internal"},{"constant":true,"id":2892,"mutability":"constant","name":"a7","nameLocation":"3768:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3752:42:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2890,"name":"int256","nodeType":"ElementaryTypeName","src":"3752:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323731383238313832383435393034353233353336","id":2891,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3773:21:15","typeDescriptions":{"typeIdentifier":"t_rational_271828182845904523536_by_1","typeString":"int_const 271828182845904523536"},"value":"271828182845904523536"},"visibility":"internal"},{"constant":true,"id":2895,"mutability":"constant","name":"x8","nameLocation":"3827:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3811:41:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2893,"name":"int256","nodeType":"ElementaryTypeName","src":"3811:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3530303030303030303030303030303030303030","id":2894,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3832:20:15","typeDescriptions":{"typeIdentifier":"t_rational_50000000000000000000_by_1","typeString":"int_const 50000000000000000000"},"value":"50000000000000000000"},"visibility":"internal"},{"constant":true,"id":2898,"mutability":"constant","name":"a8","nameLocation":"3883:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3867:42:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2896,"name":"int256","nodeType":"ElementaryTypeName","src":"3867:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313634383732313237303730303132383134363835","id":2897,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3888:21:15","typeDescriptions":{"typeIdentifier":"t_rational_164872127070012814685_by_1","typeString":"int_const 164872127070012814685"},"value":"164872127070012814685"},"visibility":"internal"},{"constant":true,"id":2901,"mutability":"constant","name":"x9","nameLocation":"3942:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3926:41:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2899,"name":"int256","nodeType":"ElementaryTypeName","src":"3926:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3235303030303030303030303030303030303030","id":2900,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3947:20:15","typeDescriptions":{"typeIdentifier":"t_rational_25000000000000000000_by_1","typeString":"int_const 25000000000000000000"},"value":"25000000000000000000"},"visibility":"internal"},{"constant":true,"id":2904,"mutability":"constant","name":"a9","nameLocation":"3998:2:15","nodeType":"VariableDeclaration","scope":4146,"src":"3982:42:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2902,"name":"int256","nodeType":"ElementaryTypeName","src":"3982:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313238343032353431363638373734313438343037","id":2903,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4003:21:15","typeDescriptions":{"typeIdentifier":"t_rational_128402541668774148407_by_1","typeString":"int_const 128402541668774148407"},"value":"128402541668774148407"},"visibility":"internal"},{"constant":true,"id":2907,"mutability":"constant","name":"x10","nameLocation":"4057:3:15","nodeType":"VariableDeclaration","scope":4146,"src":"4041:42:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2905,"name":"int256","nodeType":"ElementaryTypeName","src":"4041:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3132353030303030303030303030303030303030","id":2906,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4063:20:15","typeDescriptions":{"typeIdentifier":"t_rational_12500000000000000000_by_1","typeString":"int_const 12500000000000000000"},"value":"12500000000000000000"},"visibility":"internal"},{"constant":true,"id":2910,"mutability":"constant","name":"a10","nameLocation":"4114:3:15","nodeType":"VariableDeclaration","scope":4146,"src":"4098:43:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2908,"name":"int256","nodeType":"ElementaryTypeName","src":"4098:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313133333134383435333036363832363331363833","id":2909,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4120:21:15","typeDescriptions":{"typeIdentifier":"t_rational_113314845306682631683_by_1","typeString":"int_const 113314845306682631683"},"value":"113314845306682631683"},"visibility":"internal"},{"constant":true,"id":2913,"mutability":"constant","name":"x11","nameLocation":"4175:3:15","nodeType":"VariableDeclaration","scope":4146,"src":"4159:41:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2911,"name":"int256","nodeType":"ElementaryTypeName","src":"4159:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"36323530303030303030303030303030303030","id":2912,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4181:19:15","typeDescriptions":{"typeIdentifier":"t_rational_6250000000000000000_by_1","typeString":"int_const 6250000000000000000"},"value":"6250000000000000000"},"visibility":"internal"},{"constant":true,"id":2916,"mutability":"constant","name":"a11","nameLocation":"4231:3:15","nodeType":"VariableDeclaration","scope":4146,"src":"4215:43:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2914,"name":"int256","nodeType":"ElementaryTypeName","src":"4215:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313036343439343435383931373835393432393536","id":2915,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4237:21:15","typeDescriptions":{"typeIdentifier":"t_rational_106449445891785942956_by_1","typeString":"int_const 106449445891785942956"},"value":"106449445891785942956"},"visibility":"internal"},{"body":{"id":3048,"nodeType":"Block","src":"4563:2233:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2926,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2921,"src":"4577:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2927,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4582:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4577:6:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2935,"nodeType":"IfStatement","src":"4573:131:15","trueBody":{"id":2934,"nodeType":"Block","src":"4585:119:15","statements":[{"expression":{"arguments":[{"id":2931,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"4686:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":2930,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4678:7:15","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2929,"name":"uint256","nodeType":"ElementaryTypeName","src":"4678:7:15","typeDescriptions":{}}},"id":2932,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4678:15:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2925,"id":2933,"nodeType":"Return","src":"4671:22:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2936,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2919,"src":"4718:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2937,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4723:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4718:6:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2942,"nodeType":"IfStatement","src":"4714:45:15","trueBody":{"id":2941,"nodeType":"Block","src":"4726:33:15","statements":[{"expression":{"hexValue":"30","id":2939,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4747:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":2925,"id":2940,"nodeType":"Return","src":"4740:8:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2943,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2919,"src":"5133:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"323535","id":2944,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5138:3:15","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"src":"5133:8:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":2946,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5145:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5133:13:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2952,"nodeType":"IfStatement","src":"5129:68:15","trueBody":{"id":2951,"nodeType":"Block","src":"5148:49:15","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2948,"name":"BaseOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2796,"src":"5169:15:15","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5169:17:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2950,"nodeType":"RevertStatement","src":"5162:24:15"}]}},{"assignments":[2954],"declarations":[{"constant":false,"id":2954,"mutability":"mutable","name":"x_int256","nameLocation":"5213:8:15","nodeType":"VariableDeclaration","scope":3048,"src":"5206:15:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2953,"name":"int256","nodeType":"ElementaryTypeName","src":"5206:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":2959,"initialValue":{"arguments":[{"id":2957,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2919,"src":"5231:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2956,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5224:6:15","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":2955,"name":"int256","nodeType":"ElementaryTypeName","src":"5224:6:15","typeDescriptions":{}}},"id":2958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5224:9:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5206:27:15"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2960,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2921,"src":"5591:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":2961,"name":"MILD_EXPONENT_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2844,"src":"5596:19:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5591:24:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2967,"nodeType":"IfStatement","src":"5587:83:15","trueBody":{"id":2966,"nodeType":"Block","src":"5617:53:15","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2963,"name":"ExponentOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2799,"src":"5638:19:15","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2964,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5638:21:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2965,"nodeType":"RevertStatement","src":"5631:28:15"}]}},{"assignments":[2969],"declarations":[{"constant":false,"id":2969,"mutability":"mutable","name":"y_int256","nameLocation":"5686:8:15","nodeType":"VariableDeclaration","scope":3048,"src":"5679:15:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2968,"name":"int256","nodeType":"ElementaryTypeName","src":"5679:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":2974,"initialValue":{"arguments":[{"id":2972,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2921,"src":"5704:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2971,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5697:6:15","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":2970,"name":"int256","nodeType":"ElementaryTypeName","src":"5697:6:15","typeDescriptions":{}}},"id":2973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5697:9:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5679:27:15"},{"assignments":[2976],"declarations":[{"constant":false,"id":2976,"mutability":"mutable","name":"logx_times_y","nameLocation":"5724:12:15","nodeType":"VariableDeclaration","scope":3048,"src":"5717:19:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2975,"name":"int256","nodeType":"ElementaryTypeName","src":"5717:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":2977,"nodeType":"VariableDeclarationStatement","src":"5717:19:15"},{"id":3026,"nodeType":"UncheckedBlock","src":"5746:790:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":2980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2978,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2829,"src":"5774:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":2979,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2954,"src":"5794:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"5774:28:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":2983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2981,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2954,"src":"5806:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":2982,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2834,"src":"5817:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"5806:28:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5774:60:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3020,"nodeType":"Block","src":"6418:72:15","statements":[{"expression":{"id":3018,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3012,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2976,"src":"6436:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3017,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3014,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2954,"src":"6455:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3013,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3990,"src":"6451:3:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":3015,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6451:13:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3016,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2969,"src":"6467:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6451:24:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6436:39:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3019,"nodeType":"ExpressionStatement","src":"6436:39:15"}]},"id":3021,"nodeType":"IfStatement","src":"5770:720:15","trueBody":{"id":3011,"nodeType":"Block","src":"5836:576:15","statements":[{"assignments":[2986],"declarations":[{"constant":false,"id":2986,"mutability":"mutable","name":"ln_36_x","nameLocation":"5861:7:15","nodeType":"VariableDeclaration","scope":3011,"src":"5854:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2985,"name":"int256","nodeType":"ElementaryTypeName","src":"5854:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":2990,"initialValue":{"arguments":[{"id":2988,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2954,"src":"5878:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":2987,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4145,"src":"5871:6:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":2989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5871:16:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5854:33:15"},{"expression":{"id":3009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2991,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2976,"src":"6308:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":2997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":2994,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2992,"name":"ln_36_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2986,"src":"6325:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":2993,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"6335:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6325:16:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":2995,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6324:18:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2996,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2969,"src":"6345:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6324:29:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2998,"name":"ln_36_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2986,"src":"6358:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":2999,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"6368:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6358:16:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3001,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6357:18:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3002,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2969,"src":"6378:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6357:29:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3004,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6356:31:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3005,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"6390:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6356:40:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6324:72:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3008,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6323:74:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6308:89:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3010,"nodeType":"ExpressionStatement","src":"6308:89:15"}]}},{"expression":{"id":3024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3022,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2976,"src":"6503:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":3023,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"6519:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6503:22:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3025,"nodeType":"ExpressionStatement","src":"6503:22:15"}]},{"condition":{"id":3035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6613:79:15","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3027,"name":"MIN_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2824,"src":"6615:20:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":3028,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2976,"src":"6639:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6615:36:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3030,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2976,"src":"6655:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":3031,"name":"MAX_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2820,"src":"6671:20:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6655:36:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6615:76:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":3034,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6614:78:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3040,"nodeType":"IfStatement","src":"6609:137:15","trueBody":{"id":3039,"nodeType":"Block","src":"6694:52:15","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3036,"name":"ProductOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2802,"src":"6715:18:15","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6715:20:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3038,"nodeType":"RevertStatement","src":"6708:27:15"}]}},{"expression":{"arguments":[{"arguments":[{"id":3044,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2976,"src":"6775:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3043,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3496,"src":"6771:3:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":3045,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6771:17:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3042,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6763:7:15","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":3041,"name":"uint256","nodeType":"ElementaryTypeName","src":"6763:7:15","typeDescriptions":{}}},"id":3046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6763:26:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2925,"id":3047,"nodeType":"Return","src":"6756:33:15"}]},"documentation":{"id":2917,"nodeType":"StructuredDocumentation","src":"4277:214:15","text":" @dev Exponentiation (x^y) with unsigned 18 decimal fixed point base and exponent.\n Reverts if ln(x) * y is smaller than `MIN_NATURAL_EXPONENT`, or larger than `MAX_NATURAL_EXPONENT`."},"id":3049,"implemented":true,"kind":"function","modifiers":[],"name":"pow","nameLocation":"4505:3:15","nodeType":"FunctionDefinition","parameters":{"id":2922,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2919,"mutability":"mutable","name":"x","nameLocation":"4517:1:15","nodeType":"VariableDeclaration","scope":3049,"src":"4509:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2918,"name":"uint256","nodeType":"ElementaryTypeName","src":"4509:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2921,"mutability":"mutable","name":"y","nameLocation":"4528:1:15","nodeType":"VariableDeclaration","scope":3049,"src":"4520:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2920,"name":"uint256","nodeType":"ElementaryTypeName","src":"4520:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4508:22:15"},"returnParameters":{"id":2925,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2924,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3049,"src":"4554:7:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2923,"name":"uint256","nodeType":"ElementaryTypeName","src":"4554:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4553:9:15"},"scope":4146,"src":"4496:2300:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3495,"nodeType":"Block","src":"7064:6082:15","statements":[{"condition":{"id":3065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"7078:57:15","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3057,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"7080:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3058,"name":"MIN_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2824,"src":"7085:20:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7080:25:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3060,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"7109:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":3061,"name":"MAX_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2820,"src":"7114:20:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7109:25:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7080:54:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":3064,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7079:56:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3070,"nodeType":"IfStatement","src":"7074:112:15","trueBody":{"id":3069,"nodeType":"Block","src":"7137:49:15","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3066,"name":"InvalidExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2805,"src":"7158:15:15","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3067,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7158:17:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3068,"nodeType":"RevertStatement","src":"7151:24:15"}]}},{"assignments":[3072],"declarations":[{"constant":false,"id":3072,"mutability":"mutable","name":"negativeExponent","nameLocation":"7277:16:15","nodeType":"VariableDeclaration","scope":3495,"src":"7272:21:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3071,"name":"bool","nodeType":"ElementaryTypeName","src":"7272:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":3074,"initialValue":{"hexValue":"66616c7365","id":3073,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7296:5:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"7272:29:15"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3075,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"7316:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":3076,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7320:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7316:5:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3089,"nodeType":"IfStatement","src":"7312:417:15","trueBody":{"id":3088,"nodeType":"Block","src":"7323:406:15","statements":[{"id":3083,"nodeType":"UncheckedBlock","src":"7633:49:15","statements":[{"expression":{"id":3081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3078,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"7661:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"7665:2:15","subExpression":{"id":3079,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"7666:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7661:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3082,"nodeType":"ExpressionStatement","src":"7661:6:15"}]},{"expression":{"id":3086,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3084,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3072,"src":"7695:16:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":3085,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7714:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"7695:23:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3087,"nodeType":"ExpressionStatement","src":"7695:23:15"}]}},{"assignments":[3091],"declarations":[{"constant":false,"id":3091,"mutability":"mutable","name":"firstAN","nameLocation":"9037:7:15","nodeType":"VariableDeclaration","scope":3495,"src":"9030:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3090,"name":"int256","nodeType":"ElementaryTypeName","src":"9030:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3092,"nodeType":"VariableDeclarationStatement","src":"9030:14:15"},{"id":3128,"nodeType":"UncheckedBlock","src":"9054:457:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3093,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"9082:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3094,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2847,"src":"9087:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9082:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3107,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3105,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"9171:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3106,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2853,"src":"9176:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9171:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3121,"nodeType":"Block","src":"9256:74:15","statements":[{"expression":{"id":3119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3117,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3091,"src":"9274:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":3118,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9284:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9274:11:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3120,"nodeType":"ExpressionStatement","src":"9274:11:15"}]},"id":3122,"nodeType":"IfStatement","src":"9167:163:15","trueBody":{"id":3116,"nodeType":"Block","src":"9180:70:15","statements":[{"expression":{"id":3110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3108,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"9198:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3109,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2853,"src":"9203:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9198:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3111,"nodeType":"ExpressionStatement","src":"9198:7:15"},{"expression":{"id":3114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3112,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3091,"src":"9223:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3113,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2856,"src":"9233:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9223:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3115,"nodeType":"ExpressionStatement","src":"9223:12:15"}]}},"id":3123,"nodeType":"IfStatement","src":"9078:252:15","trueBody":{"id":3104,"nodeType":"Block","src":"9091:70:15","statements":[{"expression":{"id":3098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3096,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"9109:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3097,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2847,"src":"9114:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9109:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3099,"nodeType":"ExpressionStatement","src":"9109:7:15"},{"expression":{"id":3102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3100,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3091,"src":"9134:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3101,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2850,"src":"9144:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9134:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3103,"nodeType":"ExpressionStatement","src":"9134:12:15"}]}},{"expression":{"id":3126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3124,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"9492:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":3125,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9497:3:15","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"9492:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3127,"nodeType":"ExpressionStatement","src":"9492:8:15"}]},{"assignments":[3130],"declarations":[{"constant":false,"id":3130,"mutability":"mutable","name":"product","nameLocation":"9730:7:15","nodeType":"VariableDeclaration","scope":3495,"src":"9723:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3129,"name":"int256","nodeType":"ElementaryTypeName","src":"9723:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3132,"initialValue":{"id":3131,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"9740:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"9723:23:15"},{"id":3277,"nodeType":"UncheckedBlock","src":"9757:957:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3133,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"9785:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3134,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2859,"src":"9790:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9785:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3150,"nodeType":"IfStatement","src":"9781:104:15","trueBody":{"id":3149,"nodeType":"Block","src":"9794:91:15","statements":[{"expression":{"id":3138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3136,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"9812:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3137,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2859,"src":"9817:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9812:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3139,"nodeType":"ExpressionStatement","src":"9812:7:15"},{"expression":{"id":3147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3140,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"9837:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3141,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"9848:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3142,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2862,"src":"9858:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9848:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3144,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9847:14:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3145,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"9864:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9847:23:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9837:33:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3148,"nodeType":"ExpressionStatement","src":"9837:33:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3151,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"9902:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3152,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2865,"src":"9907:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9902:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3168,"nodeType":"IfStatement","src":"9898:104:15","trueBody":{"id":3167,"nodeType":"Block","src":"9911:91:15","statements":[{"expression":{"id":3156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3154,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"9929:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3155,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2865,"src":"9934:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9929:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3157,"nodeType":"ExpressionStatement","src":"9929:7:15"},{"expression":{"id":3165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3158,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"9954:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3159,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"9965:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3160,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2868,"src":"9975:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9965:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3162,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9964:14:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3163,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"9981:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9964:23:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9954:33:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3166,"nodeType":"ExpressionStatement","src":"9954:33:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3169,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"10019:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3170,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2871,"src":"10024:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10019:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3186,"nodeType":"IfStatement","src":"10015:104:15","trueBody":{"id":3185,"nodeType":"Block","src":"10028:91:15","statements":[{"expression":{"id":3174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3172,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"10046:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3173,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2871,"src":"10051:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10046:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3175,"nodeType":"ExpressionStatement","src":"10046:7:15"},{"expression":{"id":3183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3176,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"10071:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3177,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"10082:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3178,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2874,"src":"10092:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10082:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3180,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10081:14:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3181,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"10098:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10081:23:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10071:33:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3184,"nodeType":"ExpressionStatement","src":"10071:33:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3187,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"10136:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3188,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2877,"src":"10141:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10136:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3204,"nodeType":"IfStatement","src":"10132:104:15","trueBody":{"id":3203,"nodeType":"Block","src":"10145:91:15","statements":[{"expression":{"id":3192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3190,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"10163:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3191,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2877,"src":"10168:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10163:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3193,"nodeType":"ExpressionStatement","src":"10163:7:15"},{"expression":{"id":3201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3194,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"10188:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3195,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"10199:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3196,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2880,"src":"10209:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10199:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3198,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10198:14:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3199,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"10215:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10198:23:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10188:33:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3202,"nodeType":"ExpressionStatement","src":"10188:33:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3205,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"10253:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3206,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2883,"src":"10258:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10253:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3222,"nodeType":"IfStatement","src":"10249:104:15","trueBody":{"id":3221,"nodeType":"Block","src":"10262:91:15","statements":[{"expression":{"id":3210,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3208,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"10280:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3209,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2883,"src":"10285:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10280:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3211,"nodeType":"ExpressionStatement","src":"10280:7:15"},{"expression":{"id":3219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3212,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"10305:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3213,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"10316:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3214,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2886,"src":"10326:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10316:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3216,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10315:14:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3217,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"10332:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10315:23:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10305:33:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3220,"nodeType":"ExpressionStatement","src":"10305:33:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3223,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"10370:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3224,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2889,"src":"10375:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10370:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3240,"nodeType":"IfStatement","src":"10366:104:15","trueBody":{"id":3239,"nodeType":"Block","src":"10379:91:15","statements":[{"expression":{"id":3228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3226,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"10397:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3227,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2889,"src":"10402:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10397:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3229,"nodeType":"ExpressionStatement","src":"10397:7:15"},{"expression":{"id":3237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3230,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"10422:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3231,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"10433:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3232,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2892,"src":"10443:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10433:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3234,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10432:14:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3235,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"10449:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10432:23:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10422:33:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3238,"nodeType":"ExpressionStatement","src":"10422:33:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3241,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"10487:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3242,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2895,"src":"10492:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10487:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3258,"nodeType":"IfStatement","src":"10483:104:15","trueBody":{"id":3257,"nodeType":"Block","src":"10496:91:15","statements":[{"expression":{"id":3246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3244,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"10514:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3245,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2895,"src":"10519:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10514:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3247,"nodeType":"ExpressionStatement","src":"10514:7:15"},{"expression":{"id":3255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3248,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"10539:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3249,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"10550:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3250,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2898,"src":"10560:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10550:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3252,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10549:14:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3253,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"10566:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10549:23:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10539:33:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3256,"nodeType":"ExpressionStatement","src":"10539:33:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3259,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"10604:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3260,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2901,"src":"10609:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10604:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3276,"nodeType":"IfStatement","src":"10600:104:15","trueBody":{"id":3275,"nodeType":"Block","src":"10613:91:15","statements":[{"expression":{"id":3264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3262,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"10631:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3263,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2901,"src":"10636:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10631:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3265,"nodeType":"ExpressionStatement","src":"10631:7:15"},{"expression":{"id":3273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3266,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"10656:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3267,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"10667:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3268,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2904,"src":"10677:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10667:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3270,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10666:14:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3271,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"10683:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10666:23:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10656:33:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3274,"nodeType":"ExpressionStatement","src":"10656:33:15"}]}}]},{"assignments":[3279],"declarations":[{"constant":false,"id":3279,"mutability":"mutable","name":"seriesSum","nameLocation":"11025:9:15","nodeType":"VariableDeclaration","scope":3495,"src":"11018:16:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3278,"name":"int256","nodeType":"ElementaryTypeName","src":"11018:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3281,"initialValue":{"id":3280,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"11037:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"11018:25:15"},{"assignments":[3283],"declarations":[{"constant":false,"id":3283,"mutability":"mutable","name":"term","nameLocation":"11115:4:15","nodeType":"VariableDeclaration","scope":3495,"src":"11108:11:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3282,"name":"int256","nodeType":"ElementaryTypeName","src":"11108:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3284,"nodeType":"VariableDeclarationStatement","src":"11108:11:15"},{"expression":{"id":3287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3285,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11228:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3286,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"11235:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11228:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3288,"nodeType":"ExpressionStatement","src":"11228:8:15"},{"id":3494,"nodeType":"UncheckedBlock","src":"11246:1894:15","statements":[{"expression":{"id":3291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3289,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"11270:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3290,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11283:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11270:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3292,"nodeType":"ExpressionStatement","src":"11270:17:15"},{"expression":{"id":3303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3293,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11536:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3294,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11545:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3295,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"11552:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11545:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3297,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11544:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3298,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"11557:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11544:19:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3300,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11543:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":3301,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11567:1:15","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"11543:25:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11536:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3304,"nodeType":"ExpressionStatement","src":"11536:32:15"},{"expression":{"id":3307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3305,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"11582:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3306,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11595:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11582:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3308,"nodeType":"ExpressionStatement","src":"11582:17:15"},{"expression":{"id":3319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3309,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11614:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3310,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11623:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3311,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"11630:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11623:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3313,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11622:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3314,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"11635:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11622:19:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3316,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11621:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":3317,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11645:1:15","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"11621:25:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11614:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3320,"nodeType":"ExpressionStatement","src":"11614:32:15"},{"expression":{"id":3323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3321,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"11660:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3322,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11673:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11660:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3324,"nodeType":"ExpressionStatement","src":"11660:17:15"},{"expression":{"id":3335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3325,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11692:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3326,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11701:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3327,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"11708:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11701:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3329,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11700:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3330,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"11713:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11700:19:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3332,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11699:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"34","id":3333,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11723:1:15","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"11699:25:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11692:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3336,"nodeType":"ExpressionStatement","src":"11692:32:15"},{"expression":{"id":3339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3337,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"11738:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3338,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11751:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11738:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3340,"nodeType":"ExpressionStatement","src":"11738:17:15"},{"expression":{"id":3351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3341,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11770:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3342,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11779:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3343,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"11786:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11779:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3345,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11778:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3346,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"11791:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11778:19:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3348,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11777:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":3349,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11801:1:15","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"11777:25:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11770:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3352,"nodeType":"ExpressionStatement","src":"11770:32:15"},{"expression":{"id":3355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3353,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"11816:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3354,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11829:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11816:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3356,"nodeType":"ExpressionStatement","src":"11816:17:15"},{"expression":{"id":3367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3357,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11848:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3363,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3358,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11857:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3359,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"11864:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11857:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3361,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11856:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3362,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"11869:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11856:19:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3364,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11855:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"36","id":3365,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11879:1:15","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"11855:25:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11848:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3368,"nodeType":"ExpressionStatement","src":"11848:32:15"},{"expression":{"id":3371,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3369,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"11894:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3370,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11907:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11894:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3372,"nodeType":"ExpressionStatement","src":"11894:17:15"},{"expression":{"id":3383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3373,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11926:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3374,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11935:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3375,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"11942:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11935:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3377,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11934:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3378,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"11947:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11934:19:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3380,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11933:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":3381,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11957:1:15","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"11933:25:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11926:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3384,"nodeType":"ExpressionStatement","src":"11926:32:15"},{"expression":{"id":3387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3385,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"11972:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3386,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"11985:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11972:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3388,"nodeType":"ExpressionStatement","src":"11972:17:15"},{"expression":{"id":3399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3389,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12004:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3398,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3390,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12013:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3391,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"12020:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12013:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3393,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12012:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3394,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"12025:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12012:19:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3396,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12011:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"38","id":3397,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12035:1:15","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"12011:25:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12004:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3400,"nodeType":"ExpressionStatement","src":"12004:32:15"},{"expression":{"id":3403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3401,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"12050:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3402,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12063:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12050:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3404,"nodeType":"ExpressionStatement","src":"12050:17:15"},{"expression":{"id":3415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3405,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12082:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3406,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12091:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3407,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"12098:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12091:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3409,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12090:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3410,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"12103:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12090:19:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3412,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12089:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":3413,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12113:1:15","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"12089:25:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12082:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3416,"nodeType":"ExpressionStatement","src":"12082:32:15"},{"expression":{"id":3419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3417,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"12128:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3418,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12141:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12128:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3420,"nodeType":"ExpressionStatement","src":"12128:17:15"},{"expression":{"id":3431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3421,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12160:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3422,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12169:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3423,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"12176:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12169:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3425,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12168:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3426,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"12181:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12168:19:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3428,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12167:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3130","id":3429,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12191:2:15","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"12167:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12160:33:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3432,"nodeType":"ExpressionStatement","src":"12160:33:15"},{"expression":{"id":3435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3433,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"12207:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3434,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12220:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12207:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3436,"nodeType":"ExpressionStatement","src":"12207:17:15"},{"expression":{"id":3447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3437,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12239:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3438,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12248:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3439,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"12255:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12248:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3441,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12247:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3442,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"12260:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12247:19:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3444,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12246:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":3445,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12270:2:15","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"12246:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12239:33:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3448,"nodeType":"ExpressionStatement","src":"12239:33:15"},{"expression":{"id":3451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3449,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"12286:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3450,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12299:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12286:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3452,"nodeType":"ExpressionStatement","src":"12286:17:15"},{"expression":{"id":3463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3453,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12318:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3454,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12327:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3455,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3052,"src":"12334:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12327:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3457,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12326:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3458,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"12339:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12326:19:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3460,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12325:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3132","id":3461,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12349:2:15","typeDescriptions":{"typeIdentifier":"t_rational_12_by_1","typeString":"int_const 12"},"value":"12"},"src":"12325:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12318:33:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3464,"nodeType":"ExpressionStatement","src":"12318:33:15"},{"expression":{"id":3467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3465,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"12365:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3466,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3283,"src":"12378:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12365:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3468,"nodeType":"ExpressionStatement","src":"12365:17:15"},{"assignments":[3470],"declarations":[{"constant":false,"id":3470,"mutability":"mutable","name":"result","nameLocation":"12914:6:15","nodeType":"VariableDeclaration","scope":3494,"src":"12907:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3469,"name":"int256","nodeType":"ElementaryTypeName","src":"12907:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3483,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3476,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3471,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"12926:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3472,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3279,"src":"12936:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12926:19:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3474,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12925:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3475,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"12949:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12925:30:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3477,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12924:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3478,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3091,"src":"12959:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12924:42:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3480,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12923:44:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"313030","id":3481,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12970:3:15","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"12923:50:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"12907:66:15"},{"expression":{"condition":{"id":3484,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3072,"src":"13075:16:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":3491,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3470,"src":"13123:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"13075:54:15","trueExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3487,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":3485,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"13095:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3486,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"13104:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13095:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3488,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"13094:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3489,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3470,"src":"13114:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13094:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":3056,"id":3493,"nodeType":"Return","src":"13068:61:15"}]}]},"documentation":{"id":3050,"nodeType":"StructuredDocumentation","src":"6802:203:15","text":" @dev Natural exponentiation (e^x) with signed 18 decimal fixed point exponent.\n Reverts if `x` is smaller than MIN_NATURAL_EXPONENT, or larger than `MAX_NATURAL_EXPONENT`."},"id":3496,"implemented":true,"kind":"function","modifiers":[],"name":"exp","nameLocation":"7019:3:15","nodeType":"FunctionDefinition","parameters":{"id":3053,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3052,"mutability":"mutable","name":"x","nameLocation":"7030:1:15","nodeType":"VariableDeclaration","scope":3496,"src":"7023:8:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3051,"name":"int256","nodeType":"ElementaryTypeName","src":"7023:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"7022:10:15"},"returnParameters":{"id":3056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3055,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3496,"src":"7056:6:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3054,"name":"int256","nodeType":"ElementaryTypeName","src":"7056:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"7055:8:15"},"scope":4146,"src":"7010:6136:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3569,"nodeType":"Block","src":"13315:861:15","statements":[{"assignments":[3507],"declarations":[{"constant":false,"id":3507,"mutability":"mutable","name":"logBase","nameLocation":"13552:7:15","nodeType":"VariableDeclaration","scope":3569,"src":"13545:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3506,"name":"int256","nodeType":"ElementaryTypeName","src":"13545:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3508,"nodeType":"VariableDeclarationStatement","src":"13545:14:15"},{"id":3533,"nodeType":"UncheckedBlock","src":"13569:214:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3509,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2829,"src":"13597:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3510,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3501,"src":"13617:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13597:24:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3512,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3501,"src":"13625:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3513,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2834,"src":"13632:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13625:24:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13597:52:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3531,"nodeType":"Block","src":"13712:61:15","statements":[{"expression":{"id":3529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3523,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3507,"src":"13730:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3525,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3501,"src":"13744:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3524,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3990,"src":"13740:3:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":3526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13740:9:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3527,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"13752:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13740:18:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13730:28:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3530,"nodeType":"ExpressionStatement","src":"13730:28:15"}]},"id":3532,"nodeType":"IfStatement","src":"13593:180:15","trueBody":{"id":3522,"nodeType":"Block","src":"13651:55:15","statements":[{"expression":{"id":3520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3516,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3507,"src":"13669:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3518,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3501,"src":"13686:4:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3517,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4145,"src":"13679:6:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":3519,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13679:12:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13669:22:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3521,"nodeType":"ExpressionStatement","src":"13669:22:15"}]}}]},{"assignments":[3535],"declarations":[{"constant":false,"id":3535,"mutability":"mutable","name":"logArg","nameLocation":"13800:6:15","nodeType":"VariableDeclaration","scope":3569,"src":"13793:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3534,"name":"int256","nodeType":"ElementaryTypeName","src":"13793:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3536,"nodeType":"VariableDeclarationStatement","src":"13793:13:15"},{"id":3568,"nodeType":"UncheckedBlock","src":"13816:354:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3543,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3537,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2829,"src":"13844:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3538,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3499,"src":"13864:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13844:23:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3540,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3499,"src":"13871:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3541,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2834,"src":"13877:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13871:23:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13844:50:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3559,"nodeType":"Block","src":"13955:59:15","statements":[{"expression":{"id":3557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3551,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3535,"src":"13973:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3553,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3499,"src":"13986:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3552,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3990,"src":"13982:3:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":3554,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13982:8:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3555,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"13993:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13982:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13973:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3558,"nodeType":"ExpressionStatement","src":"13973:26:15"}]},"id":3560,"nodeType":"IfStatement","src":"13840:174:15","trueBody":{"id":3550,"nodeType":"Block","src":"13896:53:15","statements":[{"expression":{"id":3548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3544,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3535,"src":"13914:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3546,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3499,"src":"13930:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3545,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4145,"src":"13923:6:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":3547,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13923:11:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13914:20:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3549,"nodeType":"ExpressionStatement","src":"13914:20:15"}]}},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3561,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3535,"src":"14133:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3562,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"14142:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14133:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3564,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14132:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3565,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3507,"src":"14152:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14132:27:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":3505,"id":3567,"nodeType":"Return","src":"14125:34:15"}]}]},"documentation":{"id":3497,"nodeType":"StructuredDocumentation","src":"13152:89:15","text":"@dev Logarithm (log(arg, base), with signed 18 decimal fixed point base and argument."},"id":3570,"implemented":true,"kind":"function","modifiers":[],"name":"log","nameLocation":"13255:3:15","nodeType":"FunctionDefinition","parameters":{"id":3502,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3499,"mutability":"mutable","name":"arg","nameLocation":"13266:3:15","nodeType":"VariableDeclaration","scope":3570,"src":"13259:10:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3498,"name":"int256","nodeType":"ElementaryTypeName","src":"13259:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":3501,"mutability":"mutable","name":"base","nameLocation":"13278:4:15","nodeType":"VariableDeclaration","scope":3570,"src":"13271:11:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3500,"name":"int256","nodeType":"ElementaryTypeName","src":"13271:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"13258:25:15"},"returnParameters":{"id":3505,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3504,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3570,"src":"13307:6:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3503,"name":"int256","nodeType":"ElementaryTypeName","src":"13307:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"13306:8:15"},"scope":4146,"src":"13246:930:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3607,"nodeType":"Block","src":"14319:353:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3580,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3578,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3573,"src":"14416:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"hexValue":"30","id":3579,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14421:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14416:6:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3585,"nodeType":"IfStatement","src":"14412:57:15","trueBody":{"id":3584,"nodeType":"Block","src":"14424:45:15","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3581,"name":"OutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2808,"src":"14445:11:15","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3582,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14445:13:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3583,"nodeType":"RevertStatement","src":"14438:20:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3586,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2829,"src":"14482:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3587,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3573,"src":"14502:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14482:21:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3589,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3573,"src":"14507:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3590,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2834,"src":"14511:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14507:21:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14482:46:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3605,"nodeType":"Block","src":"14628:38:15","statements":[{"expression":{"arguments":[{"id":3602,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3573,"src":"14653:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3601,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3990,"src":"14649:3:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":3603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14649:6:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":3577,"id":3604,"nodeType":"Return","src":"14642:13:15"}]},"id":3606,"nodeType":"IfStatement","src":"14478:188:15","trueBody":{"id":3600,"nodeType":"Block","src":"14530:92:15","statements":[{"id":3599,"nodeType":"UncheckedBlock","src":"14544:68:15","statements":[{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3594,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3573,"src":"14586:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3593,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4145,"src":"14579:6:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":3595,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14579:9:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3596,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"14591:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14579:18:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":3577,"id":3598,"nodeType":"Return","src":"14572:25:15"}]}]}}]},"documentation":{"id":3571,"nodeType":"StructuredDocumentation","src":"14182:79:15","text":"@dev Natural logarithm (ln(a)) with signed 18 decimal fixed point argument."},"id":3608,"implemented":true,"kind":"function","modifiers":[],"name":"ln","nameLocation":"14275:2:15","nodeType":"FunctionDefinition","parameters":{"id":3574,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3573,"mutability":"mutable","name":"a","nameLocation":"14285:1:15","nodeType":"VariableDeclaration","scope":3608,"src":"14278:8:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3572,"name":"int256","nodeType":"ElementaryTypeName","src":"14278:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14277:10:15"},"returnParameters":{"id":3577,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3576,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3608,"src":"14311:6:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3575,"name":"int256","nodeType":"ElementaryTypeName","src":"14311:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14310:8:15"},"scope":4146,"src":"14266:406:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3989,"nodeType":"Block","src":"14824:5531:15","statements":[{"assignments":[3617],"declarations":[{"constant":false,"id":3617,"mutability":"mutable","name":"negativeExponent","nameLocation":"14915:16:15","nodeType":"VariableDeclaration","scope":3989,"src":"14910:21:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3616,"name":"bool","nodeType":"ElementaryTypeName","src":"14910:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":3619,"initialValue":{"hexValue":"66616c7365","id":3618,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"14934:5:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"14910:29:15"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3620,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"14954:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3621,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"14958:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14954:10:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3638,"nodeType":"IfStatement","src":"14950:381:15","trueBody":{"id":3637,"nodeType":"Block","src":"14966:365:15","statements":[{"id":3632,"nodeType":"UncheckedBlock","src":"15216:68:15","statements":[{"expression":{"id":3630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3623,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"15244:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3626,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":3624,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"15249:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3625,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"15258:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15249:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3627,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"15248:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3628,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"15268:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15248:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15244:25:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3631,"nodeType":"ExpressionStatement","src":"15244:25:15"}]},{"expression":{"id":3635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3633,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3617,"src":"15297:16:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":3634,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15316:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"15297:23:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3636,"nodeType":"ExpressionStatement","src":"15297:23:15"}]}},{"assignments":[3640],"declarations":[{"constant":false,"id":3640,"mutability":"mutable","name":"sum","nameLocation":"16663:3:15","nodeType":"VariableDeclaration","scope":3989,"src":"16656:10:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3639,"name":"int256","nodeType":"ElementaryTypeName","src":"16656:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3642,"initialValue":{"hexValue":"30","id":3641,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16669:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16656:14:15"},{"id":3861,"nodeType":"UncheckedBlock","src":"16680:1674:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3643,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"16708:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3646,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":3644,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2850,"src":"16713:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3645,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"16718:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16713:11:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16708:16:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3657,"nodeType":"IfStatement","src":"16704:126:15","trueBody":{"id":3656,"nodeType":"Block","src":"16726:104:15","statements":[{"expression":{"id":3650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3648,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"16744:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":3649,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2850,"src":"16749:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16744:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3651,"nodeType":"ExpressionStatement","src":"16744:7:15"},{"expression":{"id":3654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3652,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"16806:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3653,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2847,"src":"16813:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16806:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3655,"nodeType":"ExpressionStatement","src":"16806:9:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3658,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"16848:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3661,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":3659,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2856,"src":"16853:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3660,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"16858:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16853:11:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16848:16:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3672,"nodeType":"IfStatement","src":"16844:126:15","trueBody":{"id":3671,"nodeType":"Block","src":"16866:104:15","statements":[{"expression":{"id":3665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3663,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"16884:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":3664,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2856,"src":"16889:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16884:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3666,"nodeType":"ExpressionStatement","src":"16884:7:15"},{"expression":{"id":3669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3667,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"16946:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3668,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2853,"src":"16953:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16946:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3670,"nodeType":"ExpressionStatement","src":"16946:9:15"}]}},{"expression":{"id":3675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3673,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"17109:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":3674,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17116:3:15","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"17109:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3676,"nodeType":"ExpressionStatement","src":"17109:10:15"},{"expression":{"id":3679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3677,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17133:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":3678,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17138:3:15","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"17133:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3680,"nodeType":"ExpressionStatement","src":"17133:8:15"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3681,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17276:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3682,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2862,"src":"17281:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17276:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3698,"nodeType":"IfStatement","src":"17272:94:15","trueBody":{"id":3697,"nodeType":"Block","src":"17285:81:15","statements":[{"expression":{"id":3691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3684,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17303:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3685,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17308:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3686,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"17312:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17308:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3688,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17307:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3689,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2862,"src":"17322:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17307:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17303:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3692,"nodeType":"ExpressionStatement","src":"17303:21:15"},{"expression":{"id":3695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3693,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"17342:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3694,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2859,"src":"17349:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17342:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3696,"nodeType":"ExpressionStatement","src":"17342:9:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3699,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17384:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3700,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2868,"src":"17389:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17384:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3716,"nodeType":"IfStatement","src":"17380:94:15","trueBody":{"id":3715,"nodeType":"Block","src":"17393:81:15","statements":[{"expression":{"id":3709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3702,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17411:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3703,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17416:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3704,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"17420:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17416:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3706,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17415:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3707,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2868,"src":"17430:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17415:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17411:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3710,"nodeType":"ExpressionStatement","src":"17411:21:15"},{"expression":{"id":3713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3711,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"17450:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3712,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2865,"src":"17457:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17450:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3714,"nodeType":"ExpressionStatement","src":"17450:9:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3717,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17492:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3718,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2874,"src":"17497:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17492:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3734,"nodeType":"IfStatement","src":"17488:94:15","trueBody":{"id":3733,"nodeType":"Block","src":"17501:81:15","statements":[{"expression":{"id":3727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3720,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17519:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3721,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17524:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3722,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"17528:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17524:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3724,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17523:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3725,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2874,"src":"17538:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17523:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17519:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3728,"nodeType":"ExpressionStatement","src":"17519:21:15"},{"expression":{"id":3731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3729,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"17558:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3730,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2871,"src":"17565:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17558:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3732,"nodeType":"ExpressionStatement","src":"17558:9:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3735,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17600:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3736,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2880,"src":"17605:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17600:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3752,"nodeType":"IfStatement","src":"17596:94:15","trueBody":{"id":3751,"nodeType":"Block","src":"17609:81:15","statements":[{"expression":{"id":3745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3738,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17627:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3739,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17632:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3740,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"17636:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17632:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3742,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17631:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3743,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2880,"src":"17646:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17631:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17627:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3746,"nodeType":"ExpressionStatement","src":"17627:21:15"},{"expression":{"id":3749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3747,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"17666:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3748,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2877,"src":"17673:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17666:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3750,"nodeType":"ExpressionStatement","src":"17666:9:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3753,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17708:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3754,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2886,"src":"17713:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17708:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3770,"nodeType":"IfStatement","src":"17704:94:15","trueBody":{"id":3769,"nodeType":"Block","src":"17717:81:15","statements":[{"expression":{"id":3763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3756,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17735:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3759,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3757,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17740:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3758,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"17744:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17740:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3760,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17739:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3761,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2886,"src":"17754:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17739:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17735:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3764,"nodeType":"ExpressionStatement","src":"17735:21:15"},{"expression":{"id":3767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3765,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"17774:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3766,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2883,"src":"17781:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17774:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3768,"nodeType":"ExpressionStatement","src":"17774:9:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3771,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17816:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3772,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2892,"src":"17821:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17816:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3788,"nodeType":"IfStatement","src":"17812:94:15","trueBody":{"id":3787,"nodeType":"Block","src":"17825:81:15","statements":[{"expression":{"id":3781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3774,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17843:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3775,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17848:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3776,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"17852:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17848:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3778,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17847:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3779,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2892,"src":"17862:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17847:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17843:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3782,"nodeType":"ExpressionStatement","src":"17843:21:15"},{"expression":{"id":3785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3783,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"17882:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3784,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2889,"src":"17889:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17882:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3786,"nodeType":"ExpressionStatement","src":"17882:9:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3789,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17924:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3790,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2898,"src":"17929:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17924:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3806,"nodeType":"IfStatement","src":"17920:94:15","trueBody":{"id":3805,"nodeType":"Block","src":"17933:81:15","statements":[{"expression":{"id":3799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3792,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17951:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3795,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3793,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"17956:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3794,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"17960:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17956:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3796,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17955:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3797,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2898,"src":"17970:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17955:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17951:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3800,"nodeType":"ExpressionStatement","src":"17951:21:15"},{"expression":{"id":3803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3801,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"17990:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3802,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2895,"src":"17997:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17990:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3804,"nodeType":"ExpressionStatement","src":"17990:9:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3807,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"18032:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3808,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2904,"src":"18037:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18032:7:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3824,"nodeType":"IfStatement","src":"18028:94:15","trueBody":{"id":3823,"nodeType":"Block","src":"18041:81:15","statements":[{"expression":{"id":3817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3810,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"18059:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3811,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"18064:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3812,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"18068:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18064:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3814,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18063:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3815,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2904,"src":"18078:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18063:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18059:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3818,"nodeType":"ExpressionStatement","src":"18059:21:15"},{"expression":{"id":3821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3819,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"18098:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3820,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2901,"src":"18105:2:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18098:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3822,"nodeType":"ExpressionStatement","src":"18098:9:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3825,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"18140:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3826,"name":"a10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2910,"src":"18145:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18140:8:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3842,"nodeType":"IfStatement","src":"18136:97:15","trueBody":{"id":3841,"nodeType":"Block","src":"18150:83:15","statements":[{"expression":{"id":3835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3828,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"18168:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3829,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"18173:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3830,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"18177:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18173:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3832,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18172:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3833,"name":"a10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2910,"src":"18187:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18172:18:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18168:22:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3836,"nodeType":"ExpressionStatement","src":"18168:22:15"},{"expression":{"id":3839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3837,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"18208:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3838,"name":"x10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2907,"src":"18215:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18208:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3840,"nodeType":"ExpressionStatement","src":"18208:10:15"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3843,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"18251:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3844,"name":"a11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2916,"src":"18256:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18251:8:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3860,"nodeType":"IfStatement","src":"18247:97:15","trueBody":{"id":3859,"nodeType":"Block","src":"18261:83:15","statements":[{"expression":{"id":3853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3846,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"18279:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3847,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"18284:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3848,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"18288:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18284:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3850,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18283:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3851,"name":"a11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2916,"src":"18298:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18283:18:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18279:22:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3854,"nodeType":"ExpressionStatement","src":"18279:22:15"},{"expression":{"id":3857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3855,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"18319:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3856,"name":"x11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2913,"src":"18326:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18319:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3858,"nodeType":"ExpressionStatement","src":"18319:10:15"}]}}]},{"id":3988,"nodeType":"UncheckedBlock","src":"18856:1493:15","statements":[{"assignments":[3863],"declarations":[{"constant":false,"id":3863,"mutability":"mutable","name":"z","nameLocation":"18887:1:15","nodeType":"VariableDeclaration","scope":3988,"src":"18880:8:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3862,"name":"int256","nodeType":"ElementaryTypeName","src":"18880:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3876,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3864,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"18893:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":3865,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"18897:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18893:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3867,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18892:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3868,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"18907:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18892:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3870,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18891:23:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3871,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3611,"src":"18918:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":3872,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"18922:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18918:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3874,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18917:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18891:38:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"18880:49:15"},{"assignments":[3878],"declarations":[{"constant":false,"id":3878,"mutability":"mutable","name":"z_squared","nameLocation":"18950:9:15","nodeType":"VariableDeclaration","scope":3988,"src":"18943:16:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3877,"name":"int256","nodeType":"ElementaryTypeName","src":"18943:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3885,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3879,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3863,"src":"18963:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3880,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3863,"src":"18967:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18963:5:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3882,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18962:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3883,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"18972:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18962:16:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"18943:35:15"},{"assignments":[3887],"declarations":[{"constant":false,"id":3887,"mutability":"mutable","name":"num","nameLocation":"19074:3:15","nodeType":"VariableDeclaration","scope":3988,"src":"19067:10:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3886,"name":"int256","nodeType":"ElementaryTypeName","src":"19067:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3889,"initialValue":{"id":3888,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3863,"src":"19080:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"19067:14:15"},{"assignments":[3891],"declarations":[{"constant":false,"id":3891,"mutability":"mutable","name":"seriesSum","nameLocation":"19210:9:15","nodeType":"VariableDeclaration","scope":3988,"src":"19203:16:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3890,"name":"int256","nodeType":"ElementaryTypeName","src":"19203:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3893,"initialValue":{"id":3892,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19222:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"19203:22:15"},{"expression":{"id":3901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3894,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19304:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3895,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19311:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3896,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3878,"src":"19317:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19311:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3898,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19310:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3899,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"19330:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19310:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19304:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3902,"nodeType":"ExpressionStatement","src":"19304:32:15"},{"expression":{"id":3907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3903,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3891,"src":"19350:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3904,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19363:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":3905,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19369:1:15","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"19363:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19350:20:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3908,"nodeType":"ExpressionStatement","src":"19350:20:15"},{"expression":{"id":3916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3909,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19385:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3910,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19392:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3911,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3878,"src":"19398:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19392:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3913,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19391:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3914,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"19411:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19391:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19385:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3917,"nodeType":"ExpressionStatement","src":"19385:32:15"},{"expression":{"id":3922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3918,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3891,"src":"19431:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3919,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19444:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":3920,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19450:1:15","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"19444:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19431:20:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3923,"nodeType":"ExpressionStatement","src":"19431:20:15"},{"expression":{"id":3931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3924,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19466:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3925,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19473:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3926,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3878,"src":"19479:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19473:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3928,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19472:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3929,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"19492:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19472:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19466:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3932,"nodeType":"ExpressionStatement","src":"19466:32:15"},{"expression":{"id":3937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3933,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3891,"src":"19512:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3934,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19525:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":3935,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19531:1:15","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"19525:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19512:20:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3938,"nodeType":"ExpressionStatement","src":"19512:20:15"},{"expression":{"id":3946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3939,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19547:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3940,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19554:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3941,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3878,"src":"19560:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19554:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3943,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19553:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3944,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"19573:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19553:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19547:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3947,"nodeType":"ExpressionStatement","src":"19547:32:15"},{"expression":{"id":3952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3948,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3891,"src":"19593:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3949,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19606:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":3950,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19612:1:15","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"19606:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19593:20:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3953,"nodeType":"ExpressionStatement","src":"19593:20:15"},{"expression":{"id":3961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3954,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19628:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3955,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19635:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3956,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3878,"src":"19641:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19635:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3958,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19634:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3959,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2814,"src":"19654:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19634:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19628:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3962,"nodeType":"ExpressionStatement","src":"19628:32:15"},{"expression":{"id":3967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3963,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3891,"src":"19674:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3964,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3887,"src":"19687:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":3965,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19693:2:15","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"19687:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19674:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3968,"nodeType":"ExpressionStatement","src":"19674:21:15"},{"expression":{"id":3971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3969,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3891,"src":"19866:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"32","id":3970,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19879:1:15","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"19866:14:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3972,"nodeType":"ExpressionStatement","src":"19866:14:15"},{"assignments":[3974],"declarations":[{"constant":false,"id":3974,"mutability":"mutable","name":"result","nameLocation":"20169:6:15","nodeType":"VariableDeclaration","scope":3988,"src":"20162:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3973,"name":"int256","nodeType":"ElementaryTypeName","src":"20162:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3981,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3975,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"20179:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":3976,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3891,"src":"20185:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20179:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3978,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20178:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"313030","id":3979,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20198:3:15","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"20178:23:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"20162:39:15"},{"expression":{"condition":{"id":3982,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3617,"src":"20303:16:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":3985,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3974,"src":"20332:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"20303:35:15","trueExpression":{"id":3984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"20322:7:15","subExpression":{"id":3983,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3974,"src":"20323:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":3615,"id":3987,"nodeType":"Return","src":"20296:42:15"}]}]},"documentation":{"id":3609,"nodeType":"StructuredDocumentation","src":"14678:88:15","text":"@dev Internal natural logarithm (ln(a)) with signed 18 decimal fixed point argument."},"id":3990,"implemented":true,"kind":"function","modifiers":[],"name":"_ln","nameLocation":"14780:3:15","nodeType":"FunctionDefinition","parameters":{"id":3612,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3611,"mutability":"mutable","name":"a","nameLocation":"14791:1:15","nodeType":"VariableDeclaration","scope":3990,"src":"14784:8:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3610,"name":"int256","nodeType":"ElementaryTypeName","src":"14784:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14783:10:15"},"returnParameters":{"id":3615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3614,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3990,"src":"14816:6:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3613,"name":"int256","nodeType":"ElementaryTypeName","src":"14816:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14815:8:15"},"scope":4146,"src":"14771:5584:15","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":4144,"nodeType":"Block","src":"20678:1804:15","statements":[{"id":4143,"nodeType":"UncheckedBlock","src":"20892:1584:15","statements":[{"expression":{"id":4000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3998,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3993,"src":"20916:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"id":3999,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2811,"src":"20921:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20916:11:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4001,"nodeType":"ExpressionStatement","src":"20916:11:15"},{"assignments":[4003],"declarations":[{"constant":false,"id":4003,"mutability":"mutable","name":"z","nameLocation":"21315:1:15","nodeType":"VariableDeclaration","scope":4143,"src":"21308:8:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4002,"name":"int256","nodeType":"ElementaryTypeName","src":"21308:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4016,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4004,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3993,"src":"21321:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":4005,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2817,"src":"21325:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21321:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4007,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21320:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4008,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2817,"src":"21335:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21320:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4010,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21319:23:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4011,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3993,"src":"21346:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":4012,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2817,"src":"21350:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21346:10:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4014,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21345:12:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21319:38:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21308:49:15"},{"assignments":[4018],"declarations":[{"constant":false,"id":4018,"mutability":"mutable","name":"z_squared","nameLocation":"21378:9:15","nodeType":"VariableDeclaration","scope":4143,"src":"21371:16:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4017,"name":"int256","nodeType":"ElementaryTypeName","src":"21371:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4025,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4019,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4003,"src":"21391:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4020,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4003,"src":"21395:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21391:5:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4022,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21390:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4023,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2817,"src":"21400:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21390:16:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21371:35:15"},{"assignments":[4027],"declarations":[{"constant":false,"id":4027,"mutability":"mutable","name":"num","nameLocation":"21502:3:15","nodeType":"VariableDeclaration","scope":4143,"src":"21495:10:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4026,"name":"int256","nodeType":"ElementaryTypeName","src":"21495:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4029,"initialValue":{"id":4028,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4003,"src":"21508:1:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21495:14:15"},{"assignments":[4031],"declarations":[{"constant":false,"id":4031,"mutability":"mutable","name":"seriesSum","nameLocation":"21638:9:15","nodeType":"VariableDeclaration","scope":4143,"src":"21631:16:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4030,"name":"int256","nodeType":"ElementaryTypeName","src":"21631:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4033,"initialValue":{"id":4032,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"21650:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21631:22:15"},{"expression":{"id":4041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4034,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"21732:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4035,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"21739:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4036,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4018,"src":"21745:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21739:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4038,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21738:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4039,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2817,"src":"21758:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21738:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21732:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4042,"nodeType":"ExpressionStatement","src":"21732:32:15"},{"expression":{"id":4047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4043,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"21778:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4044,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"21791:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":4045,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21797:1:15","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"21791:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21778:20:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4048,"nodeType":"ExpressionStatement","src":"21778:20:15"},{"expression":{"id":4056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4049,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"21813:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4050,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"21820:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4051,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4018,"src":"21826:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21820:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4053,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21819:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4054,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2817,"src":"21839:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21819:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21813:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4057,"nodeType":"ExpressionStatement","src":"21813:32:15"},{"expression":{"id":4062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4058,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"21859:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4059,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"21872:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":4060,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21878:1:15","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"21872:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21859:20:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4063,"nodeType":"ExpressionStatement","src":"21859:20:15"},{"expression":{"id":4071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4064,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"21894:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4070,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4065,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"21901:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4066,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4018,"src":"21907:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21901:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4068,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21900:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4069,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2817,"src":"21920:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21900:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21894:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4072,"nodeType":"ExpressionStatement","src":"21894:32:15"},{"expression":{"id":4077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4073,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"21940:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4074,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"21953:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":4075,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21959:1:15","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"21953:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21940:20:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4078,"nodeType":"ExpressionStatement","src":"21940:20:15"},{"expression":{"id":4086,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4079,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"21975:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4080,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"21982:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4081,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4018,"src":"21988:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21982:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4083,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21981:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4084,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2817,"src":"22001:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21981:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21975:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4087,"nodeType":"ExpressionStatement","src":"21975:32:15"},{"expression":{"id":4092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4088,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"22021:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4089,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"22034:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":4090,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22040:1:15","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"22034:7:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22021:20:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4093,"nodeType":"ExpressionStatement","src":"22021:20:15"},{"expression":{"id":4101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4094,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"22056:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4095,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"22063:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4096,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4018,"src":"22069:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22063:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4098,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22062:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4099,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2817,"src":"22082:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22062:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22056:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4102,"nodeType":"ExpressionStatement","src":"22056:32:15"},{"expression":{"id":4107,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4103,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"22102:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4104,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"22115:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":4105,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22121:2:15","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"22115:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22102:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4108,"nodeType":"ExpressionStatement","src":"22102:21:15"},{"expression":{"id":4116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4109,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"22138:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4110,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"22145:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4111,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4018,"src":"22151:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22145:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4113,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22144:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4114,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2817,"src":"22164:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22144:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22138:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4117,"nodeType":"ExpressionStatement","src":"22138:32:15"},{"expression":{"id":4122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4118,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"22184:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4119,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"22197:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3133","id":4120,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22203:2:15","typeDescriptions":{"typeIdentifier":"t_rational_13_by_1","typeString":"int_const 13"},"value":"13"},"src":"22197:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22184:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4123,"nodeType":"ExpressionStatement","src":"22184:21:15"},{"expression":{"id":4131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4124,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"22220:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4125,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"22227:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4126,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4018,"src":"22233:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22227:15:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4128,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22226:17:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4129,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2817,"src":"22246:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22226:26:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22220:32:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4132,"nodeType":"ExpressionStatement","src":"22220:32:15"},{"expression":{"id":4137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4133,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"22266:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4134,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4027,"src":"22279:3:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3135","id":4135,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22285:2:15","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"15"},"src":"22279:8:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22266:21:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4138,"nodeType":"ExpressionStatement","src":"22266:21:15"},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4139,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"22452:9:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"32","id":4140,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22464:1:15","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"22452:13:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":3997,"id":4142,"nodeType":"Return","src":"22445:20:15"}]}]},"documentation":{"id":3991,"nodeType":"StructuredDocumentation","src":"20361:256:15","text":" @dev Internal high precision (36 decimal places) natural logarithm (ln(x)) with signed 18 decimal fixed point argument,\n for x close to one.\n Should only be used if x is between LN_36_LOWER_BOUND and LN_36_UPPER_BOUND."},"id":4145,"implemented":true,"kind":"function","modifiers":[],"name":"_ln_36","nameLocation":"20631:6:15","nodeType":"FunctionDefinition","parameters":{"id":3994,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3993,"mutability":"mutable","name":"x","nameLocation":"20645:1:15","nodeType":"VariableDeclaration","scope":4145,"src":"20638:8:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3992,"name":"int256","nodeType":"ElementaryTypeName","src":"20638:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20637:10:15"},"returnParameters":{"id":3997,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3996,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4145,"src":"20670:6:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3995,"name":"int256","nodeType":"ElementaryTypeName","src":"20670:6:15","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20669:8:15"},"scope":4146,"src":"20622:1860:15","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":4147,"src":"595:21889:15","usedErrors":[2796,2799,2802,2805,2808],"usedEvents":[]}],"src":"33:22452:15"},"id":15},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","exportedSymbols":{"ReentrancyGuardTransient":[4215],"StorageSlotExtension":[4428]},"id":4216,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":4148,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:16"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","file":"./StorageSlotExtension.sol","id":4150,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4216,"sourceUnit":4429,"src":"59:66:16","symbolAliases":[{"foreign":{"id":4149,"name":"StorageSlotExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4428,"src":"68:20:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[],"canonicalName":"ReentrancyGuardTransient","contractDependencies":[],"contractKind":"contract","documentation":{"id":4151,"nodeType":"StructuredDocumentation","src":"127:155:16","text":" @notice Variant of {ReentrancyGuard} that uses transient storage.\n @dev NOTE: This variant only works on networks where EIP-1153 is available."},"fullyImplemented":true,"id":4215,"linearizedBaseContracts":[4215],"name":"ReentrancyGuardTransient","nameLocation":"301:24:16","nodeType":"ContractDefinition","nodes":[{"global":false,"id":4153,"libraryName":{"id":4152,"name":"StorageSlotExtension","nameLocations":["338:20:16"],"nodeType":"IdentifierPath","referencedDeclaration":4428,"src":"338:20:16"},"nodeType":"UsingForDirective","src":"332:33:16"},{"constant":true,"id":4156,"mutability":"constant","name":"_REENTRANCY_GUARD_STORAGE","nameLocation":"515:25:16","nodeType":"VariableDeclaration","scope":4215,"src":"490:127:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4154,"name":"bytes32","nodeType":"ElementaryTypeName","src":"490:7:16","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307839623737396231373432326430646639323232333031386233326234643166613436653037313732336436383137653234383664303033626563633535663030","id":4155,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"551:66:16","typeDescriptions":{"typeIdentifier":"t_rational_70319816728846589445362000750570655803700195216363692647688146666176345628416_by_1","typeString":"int_const 7031...(69 digits omitted)...8416"},"value":"0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"},"visibility":"private"},{"documentation":{"id":4157,"nodeType":"StructuredDocumentation","src":"624:40:16","text":"@notice Unauthorized reentrant call."},"errorSelector":"3ee5aeb5","id":4159,"name":"ReentrancyGuardReentrantCall","nameLocation":"675:28:16","nodeType":"ErrorDefinition","parameters":{"id":4158,"nodeType":"ParameterList","parameters":[],"src":"703:2:16"},"src":"669:37:16"},{"body":{"id":4169,"nodeType":"Block","src":"1107:79:16","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":4162,"name":"_nonReentrantBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4189,"src":"1117:19:16","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":4163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1117:21:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4164,"nodeType":"ExpressionStatement","src":"1117:21:16"},{"id":4165,"nodeType":"PlaceholderStatement","src":"1148:1:16"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":4166,"name":"_nonReentrantAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4201,"src":"1159:18:16","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":4167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1159:20:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4168,"nodeType":"ExpressionStatement","src":"1159:20:16"}]},"documentation":{"id":4160,"nodeType":"StructuredDocumentation","src":"712:366:16","text":" @dev Prevents a contract from calling itself, directly or indirectly.\n Calling a `nonReentrant` function from another `nonReentrant`\n function is not supported. It is possible to prevent this from happening\n by making the `nonReentrant` function external, and making it call a\n `private` function that does the actual work."},"id":4170,"name":"nonReentrant","nameLocation":"1092:12:16","nodeType":"ModifierDefinition","parameters":{"id":4161,"nodeType":"ParameterList","parameters":[],"src":"1104:2:16"},"src":"1083:103:16","virtual":false,"visibility":"internal"},{"body":{"id":4188,"nodeType":"Block","src":"1231:310:16","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":4173,"name":"_reentrancyGuardEntered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4214,"src":"1320:23:16","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":4174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1320:25:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4179,"nodeType":"IfStatement","src":"1316:93:16","trueBody":{"id":4178,"nodeType":"Block","src":"1347:62:16","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4175,"name":"ReentrancyGuardReentrantCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4159,"src":"1368:28:16","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4176,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1368:30:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4177,"nodeType":"RevertStatement","src":"1361:37:16"}]}},{"expression":{"arguments":[{"hexValue":"74727565","id":4185,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1529:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4180,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4156,"src":"1484:25:16","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":4182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1510:9:16","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":4266,"src":"1484:35:16","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$4251_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":4183,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1484:37:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4251","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":4184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1522:6:16","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":4361,"src":"1484:44:16","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$4251_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$4251_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":4186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1484:50:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4187,"nodeType":"ExpressionStatement","src":"1484:50:16"}]},"id":4189,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantBefore","nameLocation":"1201:19:16","nodeType":"FunctionDefinition","parameters":{"id":4171,"nodeType":"ParameterList","parameters":[],"src":"1220:2:16"},"returnParameters":{"id":4172,"nodeType":"ParameterList","parameters":[],"src":"1231:0:16"},"scope":4215,"src":"1192:349:16","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":4200,"nodeType":"Block","src":"1585:68:16","statements":[{"expression":{"arguments":[{"hexValue":"66616c7365","id":4197,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1640:5:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4192,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4156,"src":"1595:25:16","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":4194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1621:9:16","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":4266,"src":"1595:35:16","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$4251_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":4195,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1595:37:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4251","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":4196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1633:6:16","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":4361,"src":"1595:44:16","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$4251_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$4251_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":4198,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1595:51:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4199,"nodeType":"ExpressionStatement","src":"1595:51:16"}]},"id":4201,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantAfter","nameLocation":"1556:18:16","nodeType":"FunctionDefinition","parameters":{"id":4190,"nodeType":"ParameterList","parameters":[],"src":"1574:2:16"},"returnParameters":{"id":4191,"nodeType":"ParameterList","parameters":[],"src":"1585:0:16"},"scope":4215,"src":"1547:106:16","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":4213,"nodeType":"Block","src":"1896:69:16","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4207,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4156,"src":"1913:25:16","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":4208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1939:9:16","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":4266,"src":"1913:35:16","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$4251_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":4209,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1913:37:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4251","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":4210,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1951:5:16","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":4350,"src":"1913:43:16","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_BooleanSlotType_$4251_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_BooleanSlotType_$4251_$","typeString":"function (StorageSlotExtension.BooleanSlotType) view returns (bool)"}},"id":4211,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1913:45:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":4206,"id":4212,"nodeType":"Return","src":"1906:52:16"}]},"documentation":{"id":4202,"nodeType":"StructuredDocumentation","src":"1659:168:16","text":" @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n `nonReentrant` function in the call stack."},"id":4214,"implemented":true,"kind":"function","modifiers":[],"name":"_reentrancyGuardEntered","nameLocation":"1841:23:16","nodeType":"FunctionDefinition","parameters":{"id":4203,"nodeType":"ParameterList","parameters":[],"src":"1864:2:16"},"returnParameters":{"id":4206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4205,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4214,"src":"1890:4:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4204,"name":"bool","nodeType":"ElementaryTypeName","src":"1890:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1889:6:16"},"scope":4215,"src":"1832:133:16","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":4216,"src":"283:1684:16","usedErrors":[4159],"usedEvents":[]}],"src":"33:1935:16"},"id":16},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","exportedSymbols":{"StorageSlotExtension":[4428]},"id":4429,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":4217,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:17"},{"abstract":false,"baseContracts":[],"canonicalName":"StorageSlotExtension","contractDependencies":[],"contractKind":"library","documentation":{"id":4218,"nodeType":"StructuredDocumentation","src":"59:218:17","text":" @notice Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\n @dev TIP: Consider using this library along with {SlotDerivation}."},"fullyImplemented":true,"id":4428,"linearizedBaseContracts":[4428],"name":"StorageSlotExtension","nameLocation":"286:20:17","nodeType":"ContractDefinition","nodes":[{"canonicalName":"StorageSlotExtension.Int256Slot","id":4221,"members":[{"constant":false,"id":4220,"mutability":"mutable","name":"value","nameLocation":"348:5:17","nodeType":"VariableDeclaration","scope":4221,"src":"341:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4219,"name":"int256","nodeType":"ElementaryTypeName","src":"341:6:17","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"name":"Int256Slot","nameLocation":"320:10:17","nodeType":"StructDefinition","scope":4428,"src":"313:47:17","visibility":"public"},{"body":{"id":4231,"nodeType":"Block","src":"524:106:17","statements":[{"AST":{"nativeSrc":"586:38:17","nodeType":"YulBlock","src":"586:38:17","statements":[{"nativeSrc":"600:14:17","nodeType":"YulAssignment","src":"600:14:17","value":{"name":"slot","nativeSrc":"610:4:17","nodeType":"YulIdentifier","src":"610:4:17"},"variableNames":[{"name":"r.slot","nativeSrc":"600:6:17","nodeType":"YulIdentifier","src":"600:6:17"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4228,"isOffset":false,"isSlot":true,"src":"600:6:17","suffix":"slot","valueSize":1},{"declaration":4224,"isOffset":false,"isSlot":false,"src":"610:4:17","valueSize":1}],"id":4230,"nodeType":"InlineAssembly","src":"577:47:17"}]},"documentation":{"id":4222,"nodeType":"StructuredDocumentation","src":"366:71:17","text":"@dev Returns an `Int256Slot` with member `value` located at `slot`."},"id":4232,"implemented":true,"kind":"function","modifiers":[],"name":"getInt256Slot","nameLocation":"451:13:17","nodeType":"FunctionDefinition","parameters":{"id":4225,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4224,"mutability":"mutable","name":"slot","nameLocation":"473:4:17","nodeType":"VariableDeclaration","scope":4232,"src":"465:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4223,"name":"bytes32","nodeType":"ElementaryTypeName","src":"465:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"464:14:17"},"returnParameters":{"id":4229,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4228,"mutability":"mutable","name":"r","nameLocation":"521:1:17","nodeType":"VariableDeclaration","scope":4232,"src":"502:20:17","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$4221_storage_ptr","typeString":"struct StorageSlotExtension.Int256Slot"},"typeName":{"id":4227,"nodeType":"UserDefinedTypeName","pathNode":{"id":4226,"name":"Int256Slot","nameLocations":["502:10:17"],"nodeType":"IdentifierPath","referencedDeclaration":4221,"src":"502:10:17"},"referencedDeclaration":4221,"src":"502:10:17","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$4221_storage_ptr","typeString":"struct StorageSlotExtension.Int256Slot"}},"visibility":"internal"}],"src":"501:22:17"},"scope":4428,"src":"442:188:17","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.AddressSlotType","id":4234,"name":"AddressSlotType","nameLocation":"709:15:17","nodeType":"UserDefinedValueTypeDefinition","src":"704:32:17","underlyingType":{"id":4233,"name":"bytes32","nodeType":"ElementaryTypeName","src":"728:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":4248,"nodeType":"Block","src":"873:50:17","statements":[{"expression":{"arguments":[{"id":4245,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4237,"src":"911:4:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4243,"name":"AddressSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4234,"src":"890:15:17","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressSlotType_$4234_$","typeString":"type(StorageSlotExtension.AddressSlotType)"}},"id":4244,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"906:4:17","memberName":"wrap","nodeType":"MemberAccess","src":"890:20:17","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_AddressSlotType_$4234_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.AddressSlotType)"}},"id":4246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"890:26:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$4234","typeString":"StorageSlotExtension.AddressSlotType"}},"functionReturnParameters":4242,"id":4247,"nodeType":"Return","src":"883:33:17"}]},"documentation":{"id":4235,"nodeType":"StructuredDocumentation","src":"742:53:17","text":"@dev Cast an arbitrary slot to a AddressSlotType."},"id":4249,"implemented":true,"kind":"function","modifiers":[],"name":"asAddress","nameLocation":"809:9:17","nodeType":"FunctionDefinition","parameters":{"id":4238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4237,"mutability":"mutable","name":"slot","nameLocation":"827:4:17","nodeType":"VariableDeclaration","scope":4249,"src":"819:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4236,"name":"bytes32","nodeType":"ElementaryTypeName","src":"819:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"818:14:17"},"returnParameters":{"id":4242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4241,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4249,"src":"856:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$4234","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":4240,"nodeType":"UserDefinedTypeName","pathNode":{"id":4239,"name":"AddressSlotType","nameLocations":["856:15:17"],"nodeType":"IdentifierPath","referencedDeclaration":4234,"src":"856:15:17"},"referencedDeclaration":4234,"src":"856:15:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$4234","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"}],"src":"855:17:17"},"scope":4428,"src":"800:123:17","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.BooleanSlotType","id":4251,"name":"BooleanSlotType","nameLocation":"1001:15:17","nodeType":"UserDefinedValueTypeDefinition","src":"996:32:17","underlyingType":{"id":4250,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1020:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":4265,"nodeType":"Block","src":"1165:50:17","statements":[{"expression":{"arguments":[{"id":4262,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4254,"src":"1203:4:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4260,"name":"BooleanSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4251,"src":"1182:15:17","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_BooleanSlotType_$4251_$","typeString":"type(StorageSlotExtension.BooleanSlotType)"}},"id":4261,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1198:4:17","memberName":"wrap","nodeType":"MemberAccess","src":"1182:20:17","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$4251_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":4263,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1182:26:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4251","typeString":"StorageSlotExtension.BooleanSlotType"}},"functionReturnParameters":4259,"id":4264,"nodeType":"Return","src":"1175:33:17"}]},"documentation":{"id":4252,"nodeType":"StructuredDocumentation","src":"1034:53:17","text":"@dev Cast an arbitrary slot to a BooleanSlotType."},"id":4266,"implemented":true,"kind":"function","modifiers":[],"name":"asBoolean","nameLocation":"1101:9:17","nodeType":"FunctionDefinition","parameters":{"id":4255,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4254,"mutability":"mutable","name":"slot","nameLocation":"1119:4:17","nodeType":"VariableDeclaration","scope":4266,"src":"1111:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4253,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1111:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1110:14:17"},"returnParameters":{"id":4259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4258,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4266,"src":"1148:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4251","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":4257,"nodeType":"UserDefinedTypeName","pathNode":{"id":4256,"name":"BooleanSlotType","nameLocations":["1148:15:17"],"nodeType":"IdentifierPath","referencedDeclaration":4251,"src":"1148:15:17"},"referencedDeclaration":4251,"src":"1148:15:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4251","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"}],"src":"1147:17:17"},"scope":4428,"src":"1092:123:17","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Bytes32SlotType","id":4268,"name":"Bytes32SlotType","nameLocation":"1293:15:17","nodeType":"UserDefinedValueTypeDefinition","src":"1288:32:17","underlyingType":{"id":4267,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1312:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":4282,"nodeType":"Block","src":"1457:50:17","statements":[{"expression":{"arguments":[{"id":4279,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4271,"src":"1495:4:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4277,"name":"Bytes32SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4268,"src":"1474:15:17","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Bytes32SlotType_$4268_$","typeString":"type(StorageSlotExtension.Bytes32SlotType)"}},"id":4278,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1490:4:17","memberName":"wrap","nodeType":"MemberAccess","src":"1474:20:17","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Bytes32SlotType_$4268_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Bytes32SlotType)"}},"id":4280,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1474:26:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$4268","typeString":"StorageSlotExtension.Bytes32SlotType"}},"functionReturnParameters":4276,"id":4281,"nodeType":"Return","src":"1467:33:17"}]},"documentation":{"id":4269,"nodeType":"StructuredDocumentation","src":"1326:53:17","text":"@dev Cast an arbitrary slot to a Bytes32SlotType."},"id":4283,"implemented":true,"kind":"function","modifiers":[],"name":"asBytes32","nameLocation":"1393:9:17","nodeType":"FunctionDefinition","parameters":{"id":4272,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4271,"mutability":"mutable","name":"slot","nameLocation":"1411:4:17","nodeType":"VariableDeclaration","scope":4283,"src":"1403:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4270,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1403:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1402:14:17"},"returnParameters":{"id":4276,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4275,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4283,"src":"1440:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$4268","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":4274,"nodeType":"UserDefinedTypeName","pathNode":{"id":4273,"name":"Bytes32SlotType","nameLocations":["1440:15:17"],"nodeType":"IdentifierPath","referencedDeclaration":4268,"src":"1440:15:17"},"referencedDeclaration":4268,"src":"1440:15:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$4268","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"}],"src":"1439:17:17"},"scope":4428,"src":"1384:123:17","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Uint256SlotType","id":4285,"name":"Uint256SlotType","nameLocation":"1585:15:17","nodeType":"UserDefinedValueTypeDefinition","src":"1580:32:17","underlyingType":{"id":4284,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1604:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":4299,"nodeType":"Block","src":"1749:50:17","statements":[{"expression":{"arguments":[{"id":4296,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4288,"src":"1787:4:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4294,"name":"Uint256SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4285,"src":"1766:15:17","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Uint256SlotType_$4285_$","typeString":"type(StorageSlotExtension.Uint256SlotType)"}},"id":4295,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1782:4:17","memberName":"wrap","nodeType":"MemberAccess","src":"1766:20:17","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$4285_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":4297,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1766:26:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$4285","typeString":"StorageSlotExtension.Uint256SlotType"}},"functionReturnParameters":4293,"id":4298,"nodeType":"Return","src":"1759:33:17"}]},"documentation":{"id":4286,"nodeType":"StructuredDocumentation","src":"1618:53:17","text":"@dev Cast an arbitrary slot to a Uint256SlotType."},"id":4300,"implemented":true,"kind":"function","modifiers":[],"name":"asUint256","nameLocation":"1685:9:17","nodeType":"FunctionDefinition","parameters":{"id":4289,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4288,"mutability":"mutable","name":"slot","nameLocation":"1703:4:17","nodeType":"VariableDeclaration","scope":4300,"src":"1695:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4287,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1695:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1694:14:17"},"returnParameters":{"id":4293,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4292,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4300,"src":"1732:15:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$4285","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":4291,"nodeType":"UserDefinedTypeName","pathNode":{"id":4290,"name":"Uint256SlotType","nameLocations":["1732:15:17"],"nodeType":"IdentifierPath","referencedDeclaration":4285,"src":"1732:15:17"},"referencedDeclaration":4285,"src":"1732:15:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$4285","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"1731:17:17"},"scope":4428,"src":"1676:123:17","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Int256SlotType","id":4302,"name":"Int256SlotType","nameLocation":"1877:14:17","nodeType":"UserDefinedValueTypeDefinition","src":"1872:31:17","underlyingType":{"id":4301,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1895:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":4316,"nodeType":"Block","src":"2038:49:17","statements":[{"expression":{"arguments":[{"id":4313,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4305,"src":"2075:4:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4311,"name":"Int256SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4302,"src":"2055:14:17","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Int256SlotType_$4302_$","typeString":"type(StorageSlotExtension.Int256SlotType)"}},"id":4312,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2070:4:17","memberName":"wrap","nodeType":"MemberAccess","src":"2055:19:17","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Int256SlotType_$4302_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Int256SlotType)"}},"id":4314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2055:25:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$4302","typeString":"StorageSlotExtension.Int256SlotType"}},"functionReturnParameters":4310,"id":4315,"nodeType":"Return","src":"2048:32:17"}]},"documentation":{"id":4303,"nodeType":"StructuredDocumentation","src":"1909:53:17","text":"@dev Cast an arbitrary slot to an Int256SlotType."},"id":4317,"implemented":true,"kind":"function","modifiers":[],"name":"asInt256","nameLocation":"1976:8:17","nodeType":"FunctionDefinition","parameters":{"id":4306,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4305,"mutability":"mutable","name":"slot","nameLocation":"1993:4:17","nodeType":"VariableDeclaration","scope":4317,"src":"1985:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4304,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1985:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1984:14:17"},"returnParameters":{"id":4310,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4309,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4317,"src":"2022:14:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$4302","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":4308,"nodeType":"UserDefinedTypeName","pathNode":{"id":4307,"name":"Int256SlotType","nameLocations":["2022:14:17"],"nodeType":"IdentifierPath","referencedDeclaration":4302,"src":"2022:14:17"},"referencedDeclaration":4302,"src":"2022:14:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$4302","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"}],"src":"2021:16:17"},"scope":4428,"src":"1967:120:17","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4327,"nodeType":"Block","src":"2242:112:17","statements":[{"AST":{"nativeSrc":"2304:44:17","nodeType":"YulBlock","src":"2304:44:17","statements":[{"nativeSrc":"2318:20:17","nodeType":"YulAssignment","src":"2318:20:17","value":{"arguments":[{"name":"slot","nativeSrc":"2333:4:17","nodeType":"YulIdentifier","src":"2333:4:17"}],"functionName":{"name":"tload","nativeSrc":"2327:5:17","nodeType":"YulIdentifier","src":"2327:5:17"},"nativeSrc":"2327:11:17","nodeType":"YulFunctionCall","src":"2327:11:17"},"variableNames":[{"name":"value","nativeSrc":"2318:5:17","nodeType":"YulIdentifier","src":"2318:5:17"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4321,"isOffset":false,"isSlot":false,"src":"2333:4:17","valueSize":1},{"declaration":4324,"isOffset":false,"isSlot":false,"src":"2318:5:17","valueSize":1}],"id":4326,"nodeType":"InlineAssembly","src":"2295:53:17"}]},"documentation":{"id":4318,"nodeType":"StructuredDocumentation","src":"2093:69:17","text":"@dev Load the value held at location `slot` in transient storage."},"id":4328,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"2176:5:17","nodeType":"FunctionDefinition","parameters":{"id":4322,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4321,"mutability":"mutable","name":"slot","nameLocation":"2198:4:17","nodeType":"VariableDeclaration","scope":4328,"src":"2182:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$4234","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":4320,"nodeType":"UserDefinedTypeName","pathNode":{"id":4319,"name":"AddressSlotType","nameLocations":["2182:15:17"],"nodeType":"IdentifierPath","referencedDeclaration":4234,"src":"2182:15:17"},"referencedDeclaration":4234,"src":"2182:15:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$4234","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"}],"src":"2181:22:17"},"returnParameters":{"id":4325,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4324,"mutability":"mutable","name":"value","nameLocation":"2235:5:17","nodeType":"VariableDeclaration","scope":4328,"src":"2227:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4323,"name":"address","nodeType":"ElementaryTypeName","src":"2227:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2226:15:17"},"scope":4428,"src":"2167:187:17","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":4338,"nodeType":"Block","src":"2490:111:17","statements":[{"AST":{"nativeSrc":"2552:43:17","nodeType":"YulBlock","src":"2552:43:17","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"2573:4:17","nodeType":"YulIdentifier","src":"2573:4:17"},{"name":"value","nativeSrc":"2579:5:17","nodeType":"YulIdentifier","src":"2579:5:17"}],"functionName":{"name":"tstore","nativeSrc":"2566:6:17","nodeType":"YulIdentifier","src":"2566:6:17"},"nativeSrc":"2566:19:17","nodeType":"YulFunctionCall","src":"2566:19:17"},"nativeSrc":"2566:19:17","nodeType":"YulExpressionStatement","src":"2566:19:17"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4332,"isOffset":false,"isSlot":false,"src":"2573:4:17","valueSize":1},{"declaration":4334,"isOffset":false,"isSlot":false,"src":"2579:5:17","valueSize":1}],"id":4337,"nodeType":"InlineAssembly","src":"2543:52:17"}]},"documentation":{"id":4329,"nodeType":"StructuredDocumentation","src":"2360:63:17","text":"@dev Store `value` at location `slot` in transient storage."},"id":4339,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"2437:6:17","nodeType":"FunctionDefinition","parameters":{"id":4335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4332,"mutability":"mutable","name":"slot","nameLocation":"2460:4:17","nodeType":"VariableDeclaration","scope":4339,"src":"2444:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$4234","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":4331,"nodeType":"UserDefinedTypeName","pathNode":{"id":4330,"name":"AddressSlotType","nameLocations":["2444:15:17"],"nodeType":"IdentifierPath","referencedDeclaration":4234,"src":"2444:15:17"},"referencedDeclaration":4234,"src":"2444:15:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$4234","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"},{"constant":false,"id":4334,"mutability":"mutable","name":"value","nameLocation":"2474:5:17","nodeType":"VariableDeclaration","scope":4339,"src":"2466:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4333,"name":"address","nodeType":"ElementaryTypeName","src":"2466:7:17","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2443:37:17"},"returnParameters":{"id":4336,"nodeType":"ParameterList","parameters":[],"src":"2490:0:17"},"scope":4428,"src":"2428:173:17","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4349,"nodeType":"Block","src":"2753:112:17","statements":[{"AST":{"nativeSrc":"2815:44:17","nodeType":"YulBlock","src":"2815:44:17","statements":[{"nativeSrc":"2829:20:17","nodeType":"YulAssignment","src":"2829:20:17","value":{"arguments":[{"name":"slot","nativeSrc":"2844:4:17","nodeType":"YulIdentifier","src":"2844:4:17"}],"functionName":{"name":"tload","nativeSrc":"2838:5:17","nodeType":"YulIdentifier","src":"2838:5:17"},"nativeSrc":"2838:11:17","nodeType":"YulFunctionCall","src":"2838:11:17"},"variableNames":[{"name":"value","nativeSrc":"2829:5:17","nodeType":"YulIdentifier","src":"2829:5:17"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4343,"isOffset":false,"isSlot":false,"src":"2844:4:17","valueSize":1},{"declaration":4346,"isOffset":false,"isSlot":false,"src":"2829:5:17","valueSize":1}],"id":4348,"nodeType":"InlineAssembly","src":"2806:53:17"}]},"documentation":{"id":4340,"nodeType":"StructuredDocumentation","src":"2607:69:17","text":"@dev Load the value held at location `slot` in transient storage."},"id":4350,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"2690:5:17","nodeType":"FunctionDefinition","parameters":{"id":4344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4343,"mutability":"mutable","name":"slot","nameLocation":"2712:4:17","nodeType":"VariableDeclaration","scope":4350,"src":"2696:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4251","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":4342,"nodeType":"UserDefinedTypeName","pathNode":{"id":4341,"name":"BooleanSlotType","nameLocations":["2696:15:17"],"nodeType":"IdentifierPath","referencedDeclaration":4251,"src":"2696:15:17"},"referencedDeclaration":4251,"src":"2696:15:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4251","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"}],"src":"2695:22:17"},"returnParameters":{"id":4347,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4346,"mutability":"mutable","name":"value","nameLocation":"2746:5:17","nodeType":"VariableDeclaration","scope":4350,"src":"2741:10:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4345,"name":"bool","nodeType":"ElementaryTypeName","src":"2741:4:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2740:12:17"},"scope":4428,"src":"2681:184:17","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":4360,"nodeType":"Block","src":"2998:111:17","statements":[{"AST":{"nativeSrc":"3060:43:17","nodeType":"YulBlock","src":"3060:43:17","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"3081:4:17","nodeType":"YulIdentifier","src":"3081:4:17"},{"name":"value","nativeSrc":"3087:5:17","nodeType":"YulIdentifier","src":"3087:5:17"}],"functionName":{"name":"tstore","nativeSrc":"3074:6:17","nodeType":"YulIdentifier","src":"3074:6:17"},"nativeSrc":"3074:19:17","nodeType":"YulFunctionCall","src":"3074:19:17"},"nativeSrc":"3074:19:17","nodeType":"YulExpressionStatement","src":"3074:19:17"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4354,"isOffset":false,"isSlot":false,"src":"3081:4:17","valueSize":1},{"declaration":4356,"isOffset":false,"isSlot":false,"src":"3087:5:17","valueSize":1}],"id":4359,"nodeType":"InlineAssembly","src":"3051:52:17"}]},"documentation":{"id":4351,"nodeType":"StructuredDocumentation","src":"2871:63:17","text":"@dev Store `value` at location `slot` in transient storage."},"id":4361,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"2948:6:17","nodeType":"FunctionDefinition","parameters":{"id":4357,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4354,"mutability":"mutable","name":"slot","nameLocation":"2971:4:17","nodeType":"VariableDeclaration","scope":4361,"src":"2955:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4251","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":4353,"nodeType":"UserDefinedTypeName","pathNode":{"id":4352,"name":"BooleanSlotType","nameLocations":["2955:15:17"],"nodeType":"IdentifierPath","referencedDeclaration":4251,"src":"2955:15:17"},"referencedDeclaration":4251,"src":"2955:15:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4251","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"},{"constant":false,"id":4356,"mutability":"mutable","name":"value","nameLocation":"2982:5:17","nodeType":"VariableDeclaration","scope":4361,"src":"2977:10:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4355,"name":"bool","nodeType":"ElementaryTypeName","src":"2977:4:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2954:34:17"},"returnParameters":{"id":4358,"nodeType":"ParameterList","parameters":[],"src":"2998:0:17"},"scope":4428,"src":"2939:170:17","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4371,"nodeType":"Block","src":"3264:112:17","statements":[{"AST":{"nativeSrc":"3326:44:17","nodeType":"YulBlock","src":"3326:44:17","statements":[{"nativeSrc":"3340:20:17","nodeType":"YulAssignment","src":"3340:20:17","value":{"arguments":[{"name":"slot","nativeSrc":"3355:4:17","nodeType":"YulIdentifier","src":"3355:4:17"}],"functionName":{"name":"tload","nativeSrc":"3349:5:17","nodeType":"YulIdentifier","src":"3349:5:17"},"nativeSrc":"3349:11:17","nodeType":"YulFunctionCall","src":"3349:11:17"},"variableNames":[{"name":"value","nativeSrc":"3340:5:17","nodeType":"YulIdentifier","src":"3340:5:17"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4365,"isOffset":false,"isSlot":false,"src":"3355:4:17","valueSize":1},{"declaration":4368,"isOffset":false,"isSlot":false,"src":"3340:5:17","valueSize":1}],"id":4370,"nodeType":"InlineAssembly","src":"3317:53:17"}]},"documentation":{"id":4362,"nodeType":"StructuredDocumentation","src":"3115:69:17","text":"@dev Load the value held at location `slot` in transient storage."},"id":4372,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"3198:5:17","nodeType":"FunctionDefinition","parameters":{"id":4366,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4365,"mutability":"mutable","name":"slot","nameLocation":"3220:4:17","nodeType":"VariableDeclaration","scope":4372,"src":"3204:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$4268","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":4364,"nodeType":"UserDefinedTypeName","pathNode":{"id":4363,"name":"Bytes32SlotType","nameLocations":["3204:15:17"],"nodeType":"IdentifierPath","referencedDeclaration":4268,"src":"3204:15:17"},"referencedDeclaration":4268,"src":"3204:15:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$4268","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"}],"src":"3203:22:17"},"returnParameters":{"id":4369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4368,"mutability":"mutable","name":"value","nameLocation":"3257:5:17","nodeType":"VariableDeclaration","scope":4372,"src":"3249:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4367,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3249:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3248:15:17"},"scope":4428,"src":"3189:187:17","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":4382,"nodeType":"Block","src":"3512:111:17","statements":[{"AST":{"nativeSrc":"3574:43:17","nodeType":"YulBlock","src":"3574:43:17","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"3595:4:17","nodeType":"YulIdentifier","src":"3595:4:17"},{"name":"value","nativeSrc":"3601:5:17","nodeType":"YulIdentifier","src":"3601:5:17"}],"functionName":{"name":"tstore","nativeSrc":"3588:6:17","nodeType":"YulIdentifier","src":"3588:6:17"},"nativeSrc":"3588:19:17","nodeType":"YulFunctionCall","src":"3588:19:17"},"nativeSrc":"3588:19:17","nodeType":"YulExpressionStatement","src":"3588:19:17"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4376,"isOffset":false,"isSlot":false,"src":"3595:4:17","valueSize":1},{"declaration":4378,"isOffset":false,"isSlot":false,"src":"3601:5:17","valueSize":1}],"id":4381,"nodeType":"InlineAssembly","src":"3565:52:17"}]},"documentation":{"id":4373,"nodeType":"StructuredDocumentation","src":"3382:63:17","text":"@dev Store `value` at location `slot` in transient storage."},"id":4383,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"3459:6:17","nodeType":"FunctionDefinition","parameters":{"id":4379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4376,"mutability":"mutable","name":"slot","nameLocation":"3482:4:17","nodeType":"VariableDeclaration","scope":4383,"src":"3466:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$4268","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":4375,"nodeType":"UserDefinedTypeName","pathNode":{"id":4374,"name":"Bytes32SlotType","nameLocations":["3466:15:17"],"nodeType":"IdentifierPath","referencedDeclaration":4268,"src":"3466:15:17"},"referencedDeclaration":4268,"src":"3466:15:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$4268","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"},{"constant":false,"id":4378,"mutability":"mutable","name":"value","nameLocation":"3496:5:17","nodeType":"VariableDeclaration","scope":4383,"src":"3488:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4377,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3488:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3465:37:17"},"returnParameters":{"id":4380,"nodeType":"ParameterList","parameters":[],"src":"3512:0:17"},"scope":4428,"src":"3450:173:17","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4393,"nodeType":"Block","src":"3778:112:17","statements":[{"AST":{"nativeSrc":"3840:44:17","nodeType":"YulBlock","src":"3840:44:17","statements":[{"nativeSrc":"3854:20:17","nodeType":"YulAssignment","src":"3854:20:17","value":{"arguments":[{"name":"slot","nativeSrc":"3869:4:17","nodeType":"YulIdentifier","src":"3869:4:17"}],"functionName":{"name":"tload","nativeSrc":"3863:5:17","nodeType":"YulIdentifier","src":"3863:5:17"},"nativeSrc":"3863:11:17","nodeType":"YulFunctionCall","src":"3863:11:17"},"variableNames":[{"name":"value","nativeSrc":"3854:5:17","nodeType":"YulIdentifier","src":"3854:5:17"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4387,"isOffset":false,"isSlot":false,"src":"3869:4:17","valueSize":1},{"declaration":4390,"isOffset":false,"isSlot":false,"src":"3854:5:17","valueSize":1}],"id":4392,"nodeType":"InlineAssembly","src":"3831:53:17"}]},"documentation":{"id":4384,"nodeType":"StructuredDocumentation","src":"3629:69:17","text":"@dev Load the value held at location `slot` in transient storage."},"id":4394,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"3712:5:17","nodeType":"FunctionDefinition","parameters":{"id":4388,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4387,"mutability":"mutable","name":"slot","nameLocation":"3734:4:17","nodeType":"VariableDeclaration","scope":4394,"src":"3718:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$4285","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":4386,"nodeType":"UserDefinedTypeName","pathNode":{"id":4385,"name":"Uint256SlotType","nameLocations":["3718:15:17"],"nodeType":"IdentifierPath","referencedDeclaration":4285,"src":"3718:15:17"},"referencedDeclaration":4285,"src":"3718:15:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$4285","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"3717:22:17"},"returnParameters":{"id":4391,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4390,"mutability":"mutable","name":"value","nameLocation":"3771:5:17","nodeType":"VariableDeclaration","scope":4394,"src":"3763:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4389,"name":"uint256","nodeType":"ElementaryTypeName","src":"3763:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3762:15:17"},"scope":4428,"src":"3703:187:17","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":4404,"nodeType":"Block","src":"4026:111:17","statements":[{"AST":{"nativeSrc":"4088:43:17","nodeType":"YulBlock","src":"4088:43:17","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"4109:4:17","nodeType":"YulIdentifier","src":"4109:4:17"},{"name":"value","nativeSrc":"4115:5:17","nodeType":"YulIdentifier","src":"4115:5:17"}],"functionName":{"name":"tstore","nativeSrc":"4102:6:17","nodeType":"YulIdentifier","src":"4102:6:17"},"nativeSrc":"4102:19:17","nodeType":"YulFunctionCall","src":"4102:19:17"},"nativeSrc":"4102:19:17","nodeType":"YulExpressionStatement","src":"4102:19:17"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4398,"isOffset":false,"isSlot":false,"src":"4109:4:17","valueSize":1},{"declaration":4400,"isOffset":false,"isSlot":false,"src":"4115:5:17","valueSize":1}],"id":4403,"nodeType":"InlineAssembly","src":"4079:52:17"}]},"documentation":{"id":4395,"nodeType":"StructuredDocumentation","src":"3896:63:17","text":"@dev Store `value` at location `slot` in transient storage."},"id":4405,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"3973:6:17","nodeType":"FunctionDefinition","parameters":{"id":4401,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4398,"mutability":"mutable","name":"slot","nameLocation":"3996:4:17","nodeType":"VariableDeclaration","scope":4405,"src":"3980:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$4285","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":4397,"nodeType":"UserDefinedTypeName","pathNode":{"id":4396,"name":"Uint256SlotType","nameLocations":["3980:15:17"],"nodeType":"IdentifierPath","referencedDeclaration":4285,"src":"3980:15:17"},"referencedDeclaration":4285,"src":"3980:15:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$4285","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"},{"constant":false,"id":4400,"mutability":"mutable","name":"value","nameLocation":"4010:5:17","nodeType":"VariableDeclaration","scope":4405,"src":"4002:13:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4399,"name":"uint256","nodeType":"ElementaryTypeName","src":"4002:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3979:37:17"},"returnParameters":{"id":4402,"nodeType":"ParameterList","parameters":[],"src":"4026:0:17"},"scope":4428,"src":"3964:173:17","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4415,"nodeType":"Block","src":"4290:112:17","statements":[{"AST":{"nativeSrc":"4352:44:17","nodeType":"YulBlock","src":"4352:44:17","statements":[{"nativeSrc":"4366:20:17","nodeType":"YulAssignment","src":"4366:20:17","value":{"arguments":[{"name":"slot","nativeSrc":"4381:4:17","nodeType":"YulIdentifier","src":"4381:4:17"}],"functionName":{"name":"tload","nativeSrc":"4375:5:17","nodeType":"YulIdentifier","src":"4375:5:17"},"nativeSrc":"4375:11:17","nodeType":"YulFunctionCall","src":"4375:11:17"},"variableNames":[{"name":"value","nativeSrc":"4366:5:17","nodeType":"YulIdentifier","src":"4366:5:17"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4409,"isOffset":false,"isSlot":false,"src":"4381:4:17","valueSize":1},{"declaration":4412,"isOffset":false,"isSlot":false,"src":"4366:5:17","valueSize":1}],"id":4414,"nodeType":"InlineAssembly","src":"4343:53:17"}]},"documentation":{"id":4406,"nodeType":"StructuredDocumentation","src":"4143:69:17","text":"@dev Load the value held at location `slot` in transient storage."},"id":4416,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"4226:5:17","nodeType":"FunctionDefinition","parameters":{"id":4410,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4409,"mutability":"mutable","name":"slot","nameLocation":"4247:4:17","nodeType":"VariableDeclaration","scope":4416,"src":"4232:19:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$4302","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":4408,"nodeType":"UserDefinedTypeName","pathNode":{"id":4407,"name":"Int256SlotType","nameLocations":["4232:14:17"],"nodeType":"IdentifierPath","referencedDeclaration":4302,"src":"4232:14:17"},"referencedDeclaration":4302,"src":"4232:14:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$4302","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"}],"src":"4231:21:17"},"returnParameters":{"id":4413,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4412,"mutability":"mutable","name":"value","nameLocation":"4283:5:17","nodeType":"VariableDeclaration","scope":4416,"src":"4276:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4411,"name":"int256","nodeType":"ElementaryTypeName","src":"4276:6:17","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4275:14:17"},"scope":4428,"src":"4217:185:17","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":4426,"nodeType":"Block","src":"4536:111:17","statements":[{"AST":{"nativeSrc":"4598:43:17","nodeType":"YulBlock","src":"4598:43:17","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"4619:4:17","nodeType":"YulIdentifier","src":"4619:4:17"},{"name":"value","nativeSrc":"4625:5:17","nodeType":"YulIdentifier","src":"4625:5:17"}],"functionName":{"name":"tstore","nativeSrc":"4612:6:17","nodeType":"YulIdentifier","src":"4612:6:17"},"nativeSrc":"4612:19:17","nodeType":"YulFunctionCall","src":"4612:19:17"},"nativeSrc":"4612:19:17","nodeType":"YulExpressionStatement","src":"4612:19:17"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4420,"isOffset":false,"isSlot":false,"src":"4619:4:17","valueSize":1},{"declaration":4422,"isOffset":false,"isSlot":false,"src":"4625:5:17","valueSize":1}],"id":4425,"nodeType":"InlineAssembly","src":"4589:52:17"}]},"documentation":{"id":4417,"nodeType":"StructuredDocumentation","src":"4408:63:17","text":"@dev Store `value` at location `slot` in transient storage."},"id":4427,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"4485:6:17","nodeType":"FunctionDefinition","parameters":{"id":4423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4420,"mutability":"mutable","name":"slot","nameLocation":"4507:4:17","nodeType":"VariableDeclaration","scope":4427,"src":"4492:19:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$4302","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":4419,"nodeType":"UserDefinedTypeName","pathNode":{"id":4418,"name":"Int256SlotType","nameLocations":["4492:14:17"],"nodeType":"IdentifierPath","referencedDeclaration":4302,"src":"4492:14:17"},"referencedDeclaration":4302,"src":"4492:14:17","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$4302","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"},{"constant":false,"id":4422,"mutability":"mutable","name":"value","nameLocation":"4520:5:17","nodeType":"VariableDeclaration","scope":4427,"src":"4513:12:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4421,"name":"int256","nodeType":"ElementaryTypeName","src":"4513:6:17","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4491:35:17"},"returnParameters":{"id":4424,"nodeType":"ParameterList","parameters":[],"src":"4536:0:17"},"scope":4428,"src":"4476:171:17","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":4429,"src":"278:4371:17","usedErrors":[],"usedEvents":[]}],"src":"33:4617:17"},"id":17},"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","exportedSymbols":{"FEE_SCALING_FACTOR":[2408],"FixedPoint":[2790],"IERC20":[6486],"IProtocolFeeController":[613],"IVault":[651],"IVaultErrors":[1308],"MAX_FEE_PERCENTAGE":[2411],"PoolRoleAccounts":[2217],"ProtocolFeeController":[6083],"ReentrancyGuardTransient":[4215],"SafeCast":[8846],"SafeERC20":[6838],"SingletonAuthentication":[6189],"VaultGuard":[6238]},"id":6084,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4430,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:18"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":4432,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6084,"sourceUnit":6839,"src":"72:84:18","symbolAliases":[{"foreign":{"id":4431,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6838,"src":"81:9:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":4434,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6084,"sourceUnit":8847,"src":"157:75:18","symbolAliases":[{"foreign":{"id":4433,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8846,"src":"166:8:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":4436,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6084,"sourceUnit":6487,"src":"233:72:18","symbolAliases":[{"foreign":{"id":4435,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6486,"src":"242:6:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":4438,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6084,"sourceUnit":614,"src":"307:113:18","symbolAliases":[{"foreign":{"id":4437,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":613,"src":"316:22:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":4440,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6084,"sourceUnit":1309,"src":"421:93:18","symbolAliases":[{"foreign":{"id":4439,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1308,"src":"430:12:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":4442,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6084,"sourceUnit":652,"src":"515:81:18","symbolAliases":[{"foreign":{"id":4441,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":651,"src":"524:6:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":4446,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6084,"sourceUnit":2412,"src":"597:147:18","symbolAliases":[{"foreign":{"id":4443,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2408,"src":"610:18:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":4444,"name":"MAX_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2411,"src":"634:18:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":4445,"name":"PoolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2217,"src":"658:16:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":4448,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6084,"sourceUnit":4216,"src":"746:132:18","symbolAliases":[{"foreign":{"id":4447,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4215,"src":"759:24:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":4450,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6084,"sourceUnit":2791,"src":"879:92:18","symbolAliases":[{"foreign":{"id":4449,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2790,"src":"888:10:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"./SingletonAuthentication.sol","id":4452,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6084,"sourceUnit":6190,"src":"973:72:18","symbolAliases":[{"foreign":{"id":4451,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6189,"src":"982:23:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","file":"./VaultGuard.sol","id":4454,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6084,"sourceUnit":6239,"src":"1046:46:18","symbolAliases":[{"foreign":{"id":4453,"name":"VaultGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6238,"src":"1055:10:18","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":4456,"name":"IProtocolFeeController","nameLocations":["3158:22:18"],"nodeType":"IdentifierPath","referencedDeclaration":613,"src":"3158:22:18"},"id":4457,"nodeType":"InheritanceSpecifier","src":"3158:22:18"},{"baseName":{"id":4458,"name":"SingletonAuthentication","nameLocations":["3186:23:18"],"nodeType":"IdentifierPath","referencedDeclaration":6189,"src":"3186:23:18"},"id":4459,"nodeType":"InheritanceSpecifier","src":"3186:23:18"},{"baseName":{"id":4460,"name":"ReentrancyGuardTransient","nameLocations":["3215:24:18"],"nodeType":"IdentifierPath","referencedDeclaration":4215,"src":"3215:24:18"},"id":4461,"nodeType":"InheritanceSpecifier","src":"3215:24:18"},{"baseName":{"id":4462,"name":"VaultGuard","nameLocations":["3245:10:18"],"nodeType":"IdentifierPath","referencedDeclaration":6238,"src":"3245:10:18"},"id":4463,"nodeType":"InheritanceSpecifier","src":"3245:10:18"}],"canonicalName":"ProtocolFeeController","contractDependencies":[],"contractKind":"contract","documentation":{"id":4455,"nodeType":"StructuredDocumentation","src":"1094:2025:18","text":" @notice Helper contract to manage protocol and creator fees outside the Vault.\n @dev This contract stores global default protocol swap and yield fees, and also tracks the values of those fees\n for each pool (the `PoolFeeConfig` described below). Protocol fees can always be overwritten by governance, but\n pool creator fees are controlled by the registered poolCreator (see `PoolRoleAccounts`).\n The Vault stores a single aggregate percentage for swap and yield fees; only this `ProtocolFeeController` knows\n the component fee percentages, and how to compute the aggregate from the components. This is done for performance\n reasons, to minimize gas on the critical path, as this way the Vault simply applies a single \"cut\", and stores the\n fee amounts separately from the pool balances.\n The pool creator fees are \"net\" protocol fees, meaning the protocol fee is taken first, and the pool creator fee\n percentage is applied to the remainder. Essentially, the protocol is paid first, then the remainder is divided\n between the pool creator and the LPs.\n There is a permissionless function (`collectAggregateFees`) that transfers these tokens from the Vault to this\n contract, and distributes them between the protocol and pool creator, after which they can be withdrawn at any\n time by governance and the pool creator, respectively.\n Protocol fees can be zero in some cases (e.g., the token is registered as exempt), and pool creator fees are zero\n if there is no creator role address defined. Protocol fees are capped at a maximum percentage (50%); pool creator\n fees are computed \"net\" protocol fees, so they can be any value from 0 to 100%. Any combination is possible.\n A protocol-fee-exempt pool with a 100% pool creator fee would send all fees to the creator. If there is no pool\n creator, a pool with a 50% protocol fee would divide the fees evenly between the protocol and LPs.\n This contract is deployed with the Vault, but can be changed by governance."},"fullyImplemented":true,"id":6083,"linearizedBaseContracts":[6083,6238,4215,6189,2491,47,613],"name":"ProtocolFeeController","nameLocation":"3129:21:18","nodeType":"ContractDefinition","nodes":[{"global":false,"id":4466,"libraryName":{"id":4464,"name":"FixedPoint","nameLocations":["3268:10:18"],"nodeType":"IdentifierPath","referencedDeclaration":2790,"src":"3268:10:18"},"nodeType":"UsingForDirective","src":"3262:29:18","typeName":{"id":4465,"name":"uint256","nodeType":"ElementaryTypeName","src":"3283:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":4470,"libraryName":{"id":4467,"name":"SafeERC20","nameLocations":["3302:9:18"],"nodeType":"IdentifierPath","referencedDeclaration":6838,"src":"3302:9:18"},"nodeType":"UsingForDirective","src":"3296:27:18","typeName":{"id":4469,"nodeType":"UserDefinedTypeName","pathNode":{"id":4468,"name":"IERC20","nameLocations":["3316:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"3316:6:18"},"referencedDeclaration":6486,"src":"3316:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}}},{"global":false,"id":4472,"libraryName":{"id":4471,"name":"SafeCast","nameLocations":["3334:8:18"],"nodeType":"IdentifierPath","referencedDeclaration":8846,"src":"3334:8:18"},"nodeType":"UsingForDirective","src":"3328:21:18"},{"canonicalName":"ProtocolFeeController.ProtocolFeeType","id":4475,"members":[{"id":4473,"name":"SWAP","nameLocation":"3386:4:18","nodeType":"EnumValue","src":"3386:4:18"},{"id":4474,"name":"YIELD","nameLocation":"3400:5:18","nodeType":"EnumValue","src":"3400:5:18"}],"name":"ProtocolFeeType","nameLocation":"3360:15:18","nodeType":"EnumDefinition","src":"3355:56:18"},{"canonicalName":"ProtocolFeeController.PoolFeeConfig","documentation":{"id":4476,"nodeType":"StructuredDocumentation","src":"3417:1063:18","text":" @notice Fee configuration stored in the swap and yield fee mappings.\n @dev Instead of storing only the fee in the mapping, also store a flag to indicate whether the fee has been\n set by governance through a permissioned call. (The fee is stored in 64-bits, so that the struct fits\n within a single slot.)\n We know the percentage is an 18-decimal FP value, which only takes 60 bits, so it's guaranteed to fit,\n and we can do simple casts to truncate the high bits without needed SafeCast.\n We want to enable permissionless updates for pools, so that it is less onerous to update potentially\n hundreds of pools if the global protocol fees change. However, we don't want to overwrite pools that\n have had their fee percentages manually set by the DAO (i.e., after off-chain negotiation and agreement).\n @param feePercentage The raw swap or yield fee percentage\n @param isOverride When set, this fee is controlled by governance, and cannot be changed permissionlessly"},"id":4481,"members":[{"constant":false,"id":4478,"mutability":"mutable","name":"feePercentage","nameLocation":"4523:13:18","nodeType":"VariableDeclaration","scope":4481,"src":"4516:20:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":4477,"name":"uint64","nodeType":"ElementaryTypeName","src":"4516:6:18","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":4480,"mutability":"mutable","name":"isOverride","nameLocation":"4551:10:18","nodeType":"VariableDeclaration","scope":4481,"src":"4546:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4479,"name":"bool","nodeType":"ElementaryTypeName","src":"4546:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"PoolFeeConfig","nameLocation":"4492:13:18","nodeType":"StructDefinition","scope":6083,"src":"4485:83:18","visibility":"public"},{"constant":true,"functionSelector":"2772d156","id":4484,"mutability":"constant","name":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","nameLocation":"4685:32:18","nodeType":"VariableDeclaration","scope":6083,"src":"4661:64:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4482,"name":"uint256","nodeType":"ElementaryTypeName","src":"4661:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3530653136","id":4483,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4720:5:18","typeDescriptions":{"typeIdentifier":"t_rational_500000000000000000_by_1","typeString":"int_const 500000000000000000"},"value":"50e16"},"visibility":"public"},{"constant":true,"functionSelector":"5e32e4e8","id":4487,"mutability":"constant","name":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","nameLocation":"4809:33:18","nodeType":"VariableDeclaration","scope":6083,"src":"4785:65:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4485,"name":"uint256","nodeType":"ElementaryTypeName","src":"4785:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3530653136","id":4486,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4845:5:18","typeDescriptions":{"typeIdentifier":"t_rational_500000000000000000_by_1","typeString":"int_const 500000000000000000"},"value":"50e16"},"visibility":"public"},{"constant":true,"functionSelector":"2e1d388d","id":4490,"mutability":"constant","name":"MAX_CREATOR_FEE_PERCENTAGE","nameLocation":"4946:26:18","nodeType":"VariableDeclaration","scope":6083,"src":"4922:62:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4488,"name":"uint256","nodeType":"ElementaryTypeName","src":"4922:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"39392e393939653136","id":4489,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4975:9:18","typeDescriptions":{"typeIdentifier":"t_rational_999990000000000000_by_1","typeString":"int_const 999990000000000000"},"value":"99.999e16"},"visibility":"public"},{"constant":false,"id":4492,"mutability":"mutable","name":"_globalProtocolSwapFeePercentage","nameLocation":"5051:32:18","nodeType":"VariableDeclaration","scope":6083,"src":"5035:48:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4491,"name":"uint256","nodeType":"ElementaryTypeName","src":"5035:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":4494,"mutability":"mutable","name":"_globalProtocolYieldFeePercentage","nameLocation":"5140:33:18","nodeType":"VariableDeclaration","scope":6083,"src":"5124:49:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4493,"name":"uint256","nodeType":"ElementaryTypeName","src":"5124:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":4498,"mutability":"mutable","name":"_registeredPools","nameLocation":"5346:16:18","nodeType":"VariableDeclaration","scope":6083,"src":"5294:68:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":4497,"keyName":"pool","keyNameLocation":"5310:4:18","keyType":{"id":4495,"name":"address","nodeType":"ElementaryTypeName","src":"5302:7:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5294:42:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"isRegistered","valueNameLocation":"5323:12:18","valueType":{"id":4496,"name":"bool","nodeType":"ElementaryTypeName","src":"5318:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"},{"constant":false,"id":4503,"mutability":"mutable","name":"_poolProtocolSwapFeePercentages","nameLocation":"5545:31:18","nodeType":"VariableDeclaration","scope":6083,"src":"5483:93:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"typeName":{"id":4502,"keyName":"pool","keyNameLocation":"5499:4:18","keyType":{"id":4499,"name":"address","nodeType":"ElementaryTypeName","src":"5491:7:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5483:52:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"valueName":"swapFeeConfig","valueNameLocation":"5521:13:18","valueType":{"id":4501,"nodeType":"UserDefinedTypeName","pathNode":{"id":4500,"name":"PoolFeeConfig","nameLocations":["5507:13:18"],"nodeType":"IdentifierPath","referencedDeclaration":4481,"src":"5507:13:18"},"referencedDeclaration":4481,"src":"5507:13:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}}},"visibility":"internal"},{"constant":false,"id":4508,"mutability":"mutable","name":"_poolProtocolYieldFeePercentages","nameLocation":"5761:32:18","nodeType":"VariableDeclaration","scope":6083,"src":"5698:95:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"typeName":{"id":4507,"keyName":"pool","keyNameLocation":"5714:4:18","keyType":{"id":4504,"name":"address","nodeType":"ElementaryTypeName","src":"5706:7:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5698:53:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"valueName":"yieldFeeConfig","valueNameLocation":"5736:14:18","valueType":{"id":4506,"nodeType":"UserDefinedTypeName","pathNode":{"id":4505,"name":"PoolFeeConfig","nameLocations":["5722:13:18"],"nodeType":"IdentifierPath","referencedDeclaration":4481,"src":"5722:13:18"},"referencedDeclaration":4481,"src":"5722:13:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}}},"visibility":"internal"},{"constant":false,"id":4512,"mutability":"mutable","name":"_poolCreatorSwapFeePercentages","nameLocation":"5917:30:18","nodeType":"VariableDeclaration","scope":6083,"src":"5856:91:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":4511,"keyName":"pool","keyNameLocation":"5872:4:18","keyType":{"id":4509,"name":"address","nodeType":"ElementaryTypeName","src":"5864:7:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5856:51:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"poolCreatorSwapFee","valueNameLocation":"5888:18:18","valueType":{"id":4510,"name":"uint256","nodeType":"ElementaryTypeName","src":"5880:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":4516,"mutability":"mutable","name":"_poolCreatorYieldFeePercentages","nameLocation":"6073:31:18","nodeType":"VariableDeclaration","scope":6083,"src":"6011:93:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":4515,"keyName":"pool","keyNameLocation":"6027:4:18","keyType":{"id":4513,"name":"address","nodeType":"ElementaryTypeName","src":"6019:7:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6011:52:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"poolCreatorYieldFee","valueNameLocation":"6043:19:18","valueType":{"id":4514,"name":"uint256","nodeType":"ElementaryTypeName","src":"6035:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":4523,"mutability":"mutable","name":"_protocolFeeAmounts","nameLocation":"6290:19:18","nodeType":"VariableDeclaration","scope":6083,"src":"6209:100:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"typeName":{"id":4522,"keyName":"pool","keyNameLocation":"6225:4:18","keyType":{"id":4517,"name":"address","nodeType":"ElementaryTypeName","src":"6217:7:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6209:71:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":4521,"keyName":"poolToken","keyNameLocation":"6248:9:18","keyType":{"id":4519,"nodeType":"UserDefinedTypeName","pathNode":{"id":4518,"name":"IERC20","nameLocations":["6241:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"6241:6:18"},"referencedDeclaration":6486,"src":"6241:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"6233:46:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"},"valueName":"feeAmount","valueNameLocation":"6269:9:18","valueType":{"id":4520,"name":"uint256","nodeType":"ElementaryTypeName","src":"6261:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"internal"},{"constant":false,"id":4530,"mutability":"mutable","name":"_poolCreatorFeeAmounts","nameLocation":"6505:22:18","nodeType":"VariableDeclaration","scope":6083,"src":"6424:103:18","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"typeName":{"id":4529,"keyName":"pool","keyNameLocation":"6440:4:18","keyType":{"id":4524,"name":"address","nodeType":"ElementaryTypeName","src":"6432:7:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6424:71:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":4528,"keyName":"poolToken","keyNameLocation":"6463:9:18","keyType":{"id":4526,"nodeType":"UserDefinedTypeName","pathNode":{"id":4525,"name":"IERC20","nameLocations":["6456:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"6456:6:18"},"referencedDeclaration":6486,"src":"6456:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"6448:46:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"},"valueName":"feeAmount","valueNameLocation":"6484:9:18","valueType":{"id":4527,"name":"uint256","nodeType":"ElementaryTypeName","src":"6476:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"internal"},{"documentation":{"id":4531,"nodeType":"StructuredDocumentation","src":"6534:279:18","text":" @notice Prevent pool data from being registered more than once.\n @dev This can happen if there is an error in the migration, or if governance somehow grants permission to\n `migratePool`, which should never happen.\n @param pool The pool"},"errorSelector":"db771c80","id":4535,"name":"PoolAlreadyRegistered","nameLocation":"6824:21:18","nodeType":"ErrorDefinition","parameters":{"id":4534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4533,"mutability":"mutable","name":"pool","nameLocation":"6854:4:18","nodeType":"VariableDeclaration","scope":4535,"src":"6846:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4532,"name":"address","nodeType":"ElementaryTypeName","src":"6846:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6845:14:18"},"src":"6818:42:18"},{"documentation":{"id":4536,"nodeType":"StructuredDocumentation","src":"6866:53:18","text":"@notice Migration source cannot be this contract."},"errorSelector":"b82fd5bf","id":4538,"name":"InvalidMigrationSource","nameLocation":"6930:22:18","nodeType":"ErrorDefinition","parameters":{"id":4537,"nodeType":"ParameterList","parameters":[],"src":"6952:2:18"},"src":"6924:31:18"},{"body":{"id":4547,"nodeType":"Block","src":"7051:60:18","statements":[{"expression":{"arguments":[{"id":4543,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4540,"src":"7088:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4542,"name":"_ensureCallerIsPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5332,"src":"7061:26:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":4544,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7061:32:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4545,"nodeType":"ExpressionStatement","src":"7061:32:18"},{"id":4546,"nodeType":"PlaceholderStatement","src":"7103:1:18"}]},"id":4548,"name":"onlyPoolCreator","nameLocation":"7021:15:18","nodeType":"ModifierDefinition","parameters":{"id":4541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4540,"mutability":"mutable","name":"pool","nameLocation":"7045:4:18","nodeType":"VariableDeclaration","scope":4548,"src":"7037:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4539,"name":"address","nodeType":"ElementaryTypeName","src":"7037:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7036:14:18"},"src":"7012:99:18","virtual":false,"visibility":"internal"},{"body":{"id":4565,"nodeType":"Block","src":"7234:207:18","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4552,"name":"newSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4550,"src":"7248:20:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":4553,"name":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4484,"src":"7271:32:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7248:55:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4559,"nodeType":"IfStatement","src":"7244:127:18","trueBody":{"id":4558,"nodeType":"Block","src":"7305:66:18","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4555,"name":"ProtocolSwapFeePercentageTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":394,"src":"7326:32:18","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7326:34:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4557,"nodeType":"RevertStatement","src":"7319:41:18"}]}},{"expression":{"arguments":[{"id":4561,"name":"newSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4550,"src":"7402:20:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4560,"name":"_ensureValidPrecision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6082,"src":"7380:21:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":4562,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7380:43:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4563,"nodeType":"ExpressionStatement","src":"7380:43:18"},{"id":4564,"nodeType":"PlaceholderStatement","src":"7433:1:18"}]},"id":4566,"name":"withValidSwapFee","nameLocation":"7187:16:18","nodeType":"ModifierDefinition","parameters":{"id":4551,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4550,"mutability":"mutable","name":"newSwapFeePercentage","nameLocation":"7212:20:18","nodeType":"VariableDeclaration","scope":4566,"src":"7204:28:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4549,"name":"uint256","nodeType":"ElementaryTypeName","src":"7204:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7203:30:18"},"src":"7178:263:18","virtual":false,"visibility":"internal"},{"body":{"id":4583,"nodeType":"Block","src":"7567:211:18","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4570,"name":"newYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4568,"src":"7581:21:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":4571,"name":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4487,"src":"7605:33:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7581:57:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4577,"nodeType":"IfStatement","src":"7577:130:18","trueBody":{"id":4576,"nodeType":"Block","src":"7640:67:18","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4573,"name":"ProtocolYieldFeePercentageTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":397,"src":"7661:33:18","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4574,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7661:35:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4575,"nodeType":"RevertStatement","src":"7654:42:18"}]}},{"expression":{"arguments":[{"id":4579,"name":"newYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4568,"src":"7738:21:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4578,"name":"_ensureValidPrecision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6082,"src":"7716:21:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":4580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7716:44:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4581,"nodeType":"ExpressionStatement","src":"7716:44:18"},{"id":4582,"nodeType":"PlaceholderStatement","src":"7770:1:18"}]},"id":4584,"name":"withValidYieldFee","nameLocation":"7518:17:18","nodeType":"ModifierDefinition","parameters":{"id":4569,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4568,"mutability":"mutable","name":"newYieldFeePercentage","nameLocation":"7544:21:18","nodeType":"VariableDeclaration","scope":4584,"src":"7536:29:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4567,"name":"uint256","nodeType":"ElementaryTypeName","src":"7536:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7535:31:18"},"src":"7509:269:18","virtual":false,"visibility":"internal"},{"body":{"id":4597,"nodeType":"Block","src":"7854:154:18","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4588,"name":"newPoolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4586,"src":"7868:27:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":4589,"name":"MAX_CREATOR_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4490,"src":"7898:26:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7868:56:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4595,"nodeType":"IfStatement","src":"7864:127:18","trueBody":{"id":4594,"nodeType":"Block","src":"7926:65:18","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4591,"name":"PoolCreatorFeePercentageTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":412,"src":"7947:31:18","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7947:33:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4593,"nodeType":"RevertStatement","src":"7940:40:18"}]}},{"id":4596,"nodeType":"PlaceholderStatement","src":"8000:1:18"}]},"id":4598,"name":"withValidPoolCreatorFee","nameLocation":"7793:23:18","nodeType":"ModifierDefinition","parameters":{"id":4587,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4586,"mutability":"mutable","name":"newPoolCreatorFeePercentage","nameLocation":"7825:27:18","nodeType":"VariableDeclaration","scope":4598,"src":"7817:35:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4585,"name":"uint256","nodeType":"ElementaryTypeName","src":"7817:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7816:37:18"},"src":"7784:224:18","virtual":false,"visibility":"internal"},{"body":{"id":4607,"nodeType":"Block","src":"8145:54:18","statements":[{"expression":{"arguments":[{"id":4603,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4600,"src":"8176:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4602,"name":"collectAggregateFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4649,"src":"8155:20:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":4604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8155:26:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4605,"nodeType":"ExpressionStatement","src":"8155:26:18"},{"id":4606,"nodeType":"PlaceholderStatement","src":"8191:1:18"}]},"id":4608,"name":"withLatestFees","nameLocation":"8116:14:18","nodeType":"ModifierDefinition","parameters":{"id":4601,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4600,"mutability":"mutable","name":"pool","nameLocation":"8139:4:18","nodeType":"VariableDeclaration","scope":4608,"src":"8131:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4599,"name":"address","nodeType":"ElementaryTypeName","src":"8131:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8130:14:18"},"src":"8107:92:18","virtual":false,"visibility":"internal"},{"body":{"id":4620,"nodeType":"Block","src":"8283:64:18","statements":[]},"id":4621,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":4614,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4611,"src":"8256:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}}],"id":4615,"kind":"baseConstructorSpecifier","modifierName":{"id":4613,"name":"SingletonAuthentication","nameLocations":["8232:23:18"],"nodeType":"IdentifierPath","referencedDeclaration":6189,"src":"8232:23:18"},"nodeType":"ModifierInvocation","src":"8232:31:18"},{"arguments":[{"id":4617,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4611,"src":"8275:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}}],"id":4618,"kind":"baseConstructorSpecifier","modifierName":{"id":4616,"name":"VaultGuard","nameLocations":["8264:10:18"],"nodeType":"IdentifierPath","referencedDeclaration":6238,"src":"8264:10:18"},"nodeType":"ModifierInvocation","src":"8264:18:18"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":4612,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4611,"mutability":"mutable","name":"vault_","nameLocation":"8224:6:18","nodeType":"VariableDeclaration","scope":4621,"src":"8217:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":4610,"nodeType":"UserDefinedTypeName","pathNode":{"id":4609,"name":"IVault","nameLocations":["8217:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"8217:6:18"},"referencedDeclaration":651,"src":"8217:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"}],"src":"8216:15:18"},"returnParameters":{"id":4619,"nodeType":"ParameterList","parameters":[],"src":"8283:0:18"},"scope":6083,"src":"8205:142:18","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[419],"body":{"id":4630,"nodeType":"Block","src":"8444:30:18","statements":[{"expression":{"id":4628,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"8461:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"functionReturnParameters":4627,"id":4629,"nodeType":"Return","src":"8454:13:18"}]},"documentation":{"id":4622,"nodeType":"StructuredDocumentation","src":"8353:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"fbfa77cf","id":4631,"implemented":true,"kind":"function","modifiers":[],"name":"vault","nameLocation":"8405:5:18","nodeType":"FunctionDefinition","parameters":{"id":4623,"nodeType":"ParameterList","parameters":[],"src":"8410:2:18"},"returnParameters":{"id":4627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4626,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4631,"src":"8436:6:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":4625,"nodeType":"UserDefinedTypeName","pathNode":{"id":4624,"name":"IVault","nameLocations":["8436:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"8436:6:18"},"referencedDeclaration":651,"src":"8436:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"}],"src":"8435:8:18"},"scope":6083,"src":"8396:78:18","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[425],"body":{"id":4648,"nodeType":"Block","src":"8574:100:18","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":4642,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6083,"src":"8613:21:18","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ProtocolFeeController_$6083_$","typeString":"type(contract ProtocolFeeController)"}},"id":4643,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8635:24:18","memberName":"collectAggregateFeesHook","nodeType":"MemberAccess","referencedDeclaration":4677,"src":"8613:46:18","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$returns$__$","typeString":"function ProtocolFeeController.collectAggregateFeesHook(address)"}},{"id":4644,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4634,"src":"8661:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$returns$__$","typeString":"function ProtocolFeeController.collectAggregateFeesHook(address)"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":4640,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8598:3:18","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":4641,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8602:10:18","memberName":"encodeCall","nodeType":"MemberAccess","src":"8598:14:18","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":4645,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8598:68:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":4637,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"8584:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":4639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8591:6:18","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":1980,"src":"8584:13:18","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":4646,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8584:83:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4647,"nodeType":"ExpressionStatement","src":"8584:83:18"}]},"documentation":{"id":4632,"nodeType":"StructuredDocumentation","src":"8480:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"8f4ab9ca","id":4649,"implemented":true,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"8532:20:18","nodeType":"FunctionDefinition","parameters":{"id":4635,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4634,"mutability":"mutable","name":"pool","nameLocation":"8561:4:18","nodeType":"VariableDeclaration","scope":4649,"src":"8553:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4633,"name":"address","nodeType":"ElementaryTypeName","src":"8553:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8552:14:18"},"returnParameters":{"id":4636,"nodeType":"ParameterList","parameters":[],"src":"8574:0:18"},"scope":6083,"src":"8523:151:18","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":4676,"nodeType":"Block","src":"9057:186:18","statements":[{"assignments":[4661,4664],"declarations":[{"constant":false,"id":4661,"mutability":"mutable","name":"totalSwapFees","nameLocation":"9085:13:18","nodeType":"VariableDeclaration","scope":4676,"src":"9068:30:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4659,"name":"uint256","nodeType":"ElementaryTypeName","src":"9068:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4660,"nodeType":"ArrayTypeName","src":"9068:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4664,"mutability":"mutable","name":"totalYieldFees","nameLocation":"9117:14:18","nodeType":"VariableDeclaration","scope":4676,"src":"9100:31:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4662,"name":"uint256","nodeType":"ElementaryTypeName","src":"9100:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4663,"nodeType":"ArrayTypeName","src":"9100:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":4669,"initialValue":{"arguments":[{"id":4667,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4652,"src":"9163:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":4665,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"9135:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":4666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9142:20:18","memberName":"collectAggregateFees","nodeType":"MemberAccess","referencedDeclaration":779,"src":"9135:27:18","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) external returns (uint256[] memory,uint256[] memory)"}},"id":4668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9135:33:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256[] memory)"}},"nodeType":"VariableDeclarationStatement","src":"9067:101:18"},{"expression":{"arguments":[{"id":4671,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4652,"src":"9200:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4672,"name":"totalSwapFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4661,"src":"9206:13:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":4673,"name":"totalYieldFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4664,"src":"9221:14:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":4670,"name":"_receiveAggregateFees","nodeType":"Identifier","overloadedDeclarations":[4704,4908],"referencedDeclaration":4704,"src":"9178:21:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,uint256[] memory,uint256[] memory)"}},"id":4674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9178:58:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4675,"nodeType":"ExpressionStatement","src":"9178:58:18"}]},"documentation":{"id":4650,"nodeType":"StructuredDocumentation","src":"8680:305:18","text":" @dev Copy and zero out the `aggregateFeeAmounts` collected in the Vault accounting, supplying credit\n for each token. Then have the Vault transfer tokens to this contract, debiting each token for the amount\n transferred so that the transaction settles when the hook returns."},"functionSelector":"fa399f2a","id":4677,"implemented":true,"kind":"function","modifiers":[{"id":4655,"kind":"modifierInvocation","modifierName":{"id":4654,"name":"onlyVault","nameLocations":["9047:9:18"],"nodeType":"IdentifierPath","referencedDeclaration":6217,"src":"9047:9:18"},"nodeType":"ModifierInvocation","src":"9047:9:18"}],"name":"collectAggregateFeesHook","nameLocation":"8999:24:18","nodeType":"FunctionDefinition","parameters":{"id":4653,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4652,"mutability":"mutable","name":"pool","nameLocation":"9032:4:18","nodeType":"VariableDeclaration","scope":4677,"src":"9024:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4651,"name":"address","nodeType":"ElementaryTypeName","src":"9024:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9023:14:18"},"returnParameters":{"id":4656,"nodeType":"ParameterList","parameters":[],"src":"9057:0:18"},"scope":6083,"src":"8990:253:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":4703,"nodeType":"Block","src":"10334:159:18","statements":[{"expression":{"arguments":[{"id":4690,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4680,"src":"10366:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":4691,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4475,"src":"10372:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4475_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":4692,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10388:4:18","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":4473,"src":"10372:20:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},{"id":4693,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4683,"src":"10394:14:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":4689,"name":"_receiveAggregateFees","nodeType":"Identifier","overloadedDeclarations":[4704,4908],"referencedDeclaration":4908,"src":"10344:21:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_enum$_ProtocolFeeType_$4475_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType,uint256[] memory)"}},"id":4694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10344:65:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4695,"nodeType":"ExpressionStatement","src":"10344:65:18"},{"expression":{"arguments":[{"id":4697,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4680,"src":"10441:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":4698,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4475,"src":"10447:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4475_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":4699,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10463:5:18","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":4474,"src":"10447:21:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},{"id":4700,"name":"yieldFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4686,"src":"10470:15:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":4696,"name":"_receiveAggregateFees","nodeType":"Identifier","overloadedDeclarations":[4704,4908],"referencedDeclaration":4908,"src":"10419:21:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_enum$_ProtocolFeeType_$4475_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType,uint256[] memory)"}},"id":4701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10419:67:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4702,"nodeType":"ExpressionStatement","src":"10419:67:18"}]},"documentation":{"id":4678,"nodeType":"StructuredDocumentation","src":"9249:929:18","text":" @notice Settle fee credits from the Vault.\n @dev This must be called after calling `collectAggregateFees` in the Vault. Note that since charging protocol\n fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection\n happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations. The Vault\n differentiates between swap and yield fees (since they can have different percentage values); the Controller\n combines swap and yield fees, then allocates the total between the protocol and pool creator.\n @param pool The address of the pool on which the swap fees were charged\n @param swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n @param yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order"},"id":4704,"implemented":true,"kind":"function","modifiers":[],"name":"_receiveAggregateFees","nameLocation":"10192:21:18","nodeType":"FunctionDefinition","parameters":{"id":4687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4680,"mutability":"mutable","name":"pool","nameLocation":"10231:4:18","nodeType":"VariableDeclaration","scope":4704,"src":"10223:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4679,"name":"address","nodeType":"ElementaryTypeName","src":"10223:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4683,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"10262:14:18","nodeType":"VariableDeclaration","scope":4704,"src":"10245:31:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4681,"name":"uint256","nodeType":"ElementaryTypeName","src":"10245:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4682,"nodeType":"ArrayTypeName","src":"10245:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4686,"mutability":"mutable","name":"yieldFeeAmounts","nameLocation":"10303:15:18","nodeType":"VariableDeclaration","scope":4704,"src":"10286:32:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4684,"name":"uint256","nodeType":"ElementaryTypeName","src":"10286:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4685,"nodeType":"ArrayTypeName","src":"10286:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10213:111:18"},"returnParameters":{"id":4688,"nodeType":"ParameterList","parameters":[],"src":"10334:0:18"},"scope":6083,"src":"10183:310:18","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4907,"nodeType":"Block","src":"10606:2992:18","statements":[{"assignments":[4716],"declarations":[{"constant":false,"id":4716,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"10846:21:18","nodeType":"VariableDeclaration","scope":4907,"src":"10838:29:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4715,"name":"uint256","nodeType":"ElementaryTypeName","src":"10838:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4730,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":4720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4717,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4709,"src":"10870:7:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":4718,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4475,"src":"10881:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4475_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":4719,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10897:4:18","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":4473,"src":"10881:20:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"10870:31:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"baseExpression":{"id":4725,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4508,"src":"10982:32:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":4727,"indexExpression":{"id":4726,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4706,"src":"11015:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10982:38:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":4728,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11021:13:18","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":4478,"src":"10982:52:18","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":4729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"10870:164:18","trueExpression":{"expression":{"baseExpression":{"id":4721,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4503,"src":"10916:31:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":4723,"indexExpression":{"id":4722,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4706,"src":"10948:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10916:37:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":4724,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10954:13:18","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":4478,"src":"10916:51:18","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"VariableDeclarationStatement","src":"10838:196:18"},{"assignments":[4732],"declarations":[{"constant":false,"id":4732,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"11053:24:18","nodeType":"VariableDeclaration","scope":4907,"src":"11045:32:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4731,"name":"uint256","nodeType":"ElementaryTypeName","src":"11045:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4744,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":4736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4733,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4709,"src":"11080:7:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":4734,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4475,"src":"11091:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4475_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":4735,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11107:4:18","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":4473,"src":"11091:20:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"11080:31:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"baseExpression":{"id":4740,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4516,"src":"11177:31:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":4742,"indexExpression":{"id":4741,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4706,"src":"11209:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11177:37:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"11080:134:18","trueExpression":{"baseExpression":{"id":4737,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4512,"src":"11126:30:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":4739,"indexExpression":{"id":4738,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4706,"src":"11157:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11126:36:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11045:169:18"},{"assignments":[4746],"declarations":[{"constant":false,"id":4746,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"11233:22:18","nodeType":"VariableDeclaration","scope":4907,"src":"11225:30:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4745,"name":"uint256","nodeType":"ElementaryTypeName","src":"11225:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4747,"nodeType":"VariableDeclarationStatement","src":"11225:30:18"},{"assignments":[4749],"declarations":[{"constant":false,"id":4749,"mutability":"mutable","name":"needToSplitFees","nameLocation":"11271:15:18","nodeType":"VariableDeclaration","scope":4907,"src":"11266:20:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4748,"name":"bool","nodeType":"ElementaryTypeName","src":"11266:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":4757,"initialValue":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4750,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"11289:24:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":4751,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11316:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11289:28:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4753,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4716,"src":"11321:21:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":4754,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11345:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11321:25:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11289:57:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"11266:80:18"},{"condition":{"id":4758,"name":"needToSplitFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4749,"src":"11360:15:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4767,"nodeType":"IfStatement","src":"11356:199:18","trueBody":{"id":4766,"nodeType":"Block","src":"11377:178:18","statements":[{"expression":{"id":4764,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4759,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4746,"src":"11440:22:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":4761,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4716,"src":"11496:21:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4762,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"11519:24:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4760,"name":"_computeAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5296,"src":"11465:30:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4763,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11465:79:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11440:104:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4765,"nodeType":"ExpressionStatement","src":"11440:104:18"}]}},{"assignments":[4772,4774],"declarations":[{"constant":false,"id":4772,"mutability":"mutable","name":"poolTokens","nameLocation":"11582:10:18","nodeType":"VariableDeclaration","scope":4907,"src":"11566:26:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4770,"nodeType":"UserDefinedTypeName","pathNode":{"id":4769,"name":"IERC20","nameLocations":["11566:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"11566:6:18"},"referencedDeclaration":6486,"src":"11566:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":4771,"nodeType":"ArrayTypeName","src":"11566:8:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":4774,"mutability":"mutable","name":"numTokens","nameLocation":"11602:9:18","nodeType":"VariableDeclaration","scope":4907,"src":"11594:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4773,"name":"uint256","nodeType":"ElementaryTypeName","src":"11594:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4778,"initialValue":{"arguments":[{"id":4776,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4706,"src":"11638:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4775,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5356,"src":"11615:22:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":4777,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11615:28:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"11565:78:18"},{"body":{"id":4905,"nodeType":"Block","src":"11693:1899:18","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":4789,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4712,"src":"11711:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4791,"indexExpression":{"id":4790,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4780,"src":"11722:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11711:13:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":4792,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11727:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11711:17:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4904,"nodeType":"IfStatement","src":"11707:1875:18","trueBody":{"id":4903,"nodeType":"Block","src":"11730:1852:18","statements":[{"assignments":[4796],"declarations":[{"constant":false,"id":4796,"mutability":"mutable","name":"token","nameLocation":"11755:5:18","nodeType":"VariableDeclaration","scope":4903,"src":"11748:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":4795,"nodeType":"UserDefinedTypeName","pathNode":{"id":4794,"name":"IERC20","nameLocations":["11748:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"11748:6:18"},"referencedDeclaration":6486,"src":"11748:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"}],"id":4800,"initialValue":{"baseExpression":{"id":4797,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4772,"src":"11763:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4799,"indexExpression":{"id":4798,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4780,"src":"11774:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11763:13:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"11748:28:18"},{"expression":{"arguments":[{"id":4804,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4796,"src":"11809:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},{"arguments":[{"id":4807,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"11824:4:18","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$6083","typeString":"contract ProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeController_$6083","typeString":"contract ProtocolFeeController"}],"id":4806,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11816:7:18","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4805,"name":"address","nodeType":"ElementaryTypeName","src":"11816:7:18","typeDescriptions":{}}},"id":4808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11816:13:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":4809,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4712,"src":"11831:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4811,"indexExpression":{"id":4810,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4780,"src":"11842:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11831:13:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4801,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"11795:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":4803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11802:6:18","memberName":"sendTo","nodeType":"MemberAccess","referencedDeclaration":2002,"src":"11795:13:18","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$6486_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":4812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11795:50:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4813,"nodeType":"ExpressionStatement","src":"11795:50:18"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":4817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4814,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4709,"src":"12024:7:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":4815,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4475,"src":"12035:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4475_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":4816,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12051:4:18","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":4473,"src":"12035:20:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"12024:31:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4835,"nodeType":"Block","src":"12161:99:18","statements":[{"eventCall":{"arguments":[{"id":4828,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4706,"src":"12214:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4829,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4796,"src":"12220:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},{"baseExpression":{"id":4830,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4712,"src":"12227:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4832,"indexExpression":{"id":4831,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4780,"src":"12238:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12227:13:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4827,"name":"ProtocolYieldFeeCollected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":340,"src":"12188:25:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$6486_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256)"}},"id":4833,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12188:53:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4834,"nodeType":"EmitStatement","src":"12183:58:18"}]},"id":4836,"nodeType":"IfStatement","src":"12020:240:18","trueBody":{"id":4826,"nodeType":"Block","src":"12057:98:18","statements":[{"eventCall":{"arguments":[{"id":4819,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4706,"src":"12109:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4820,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4796,"src":"12115:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},{"baseExpression":{"id":4821,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4712,"src":"12122:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4823,"indexExpression":{"id":4822,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4780,"src":"12133:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12122:13:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4818,"name":"ProtocolSwapFeeCollected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":330,"src":"12084:24:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$6486_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256)"}},"id":4824,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12084:52:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4825,"nodeType":"EmitStatement","src":"12079:57:18"}]}},{"condition":{"id":4837,"name":"needToSplitFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4749,"src":"12282:15:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4901,"nodeType":"Block","src":"13212:356:18","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4875,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"13314:24:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":4876,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13342:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13314:29:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4899,"nodeType":"Block","src":"13449:101:18","statements":[{"expression":{"id":4897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":4889,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4530,"src":"13475:22:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":4892,"indexExpression":{"id":4890,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4706,"src":"13498:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13475:28:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":4893,"indexExpression":{"id":4891,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4796,"src":"13504:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13475:35:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"baseExpression":{"id":4894,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4712,"src":"13514:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4896,"indexExpression":{"id":4895,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4780,"src":"13525:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13514:13:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13475:52:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4898,"nodeType":"ExpressionStatement","src":"13475:52:18"}]},"id":4900,"nodeType":"IfStatement","src":"13310:240:18","trueBody":{"id":4888,"nodeType":"Block","src":"13345:98:18","statements":[{"expression":{"id":4886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":4878,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4523,"src":"13371:19:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":4881,"indexExpression":{"id":4879,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4706,"src":"13391:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13371:25:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":4882,"indexExpression":{"id":4880,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4796,"src":"13397:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13371:32:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"baseExpression":{"id":4883,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4712,"src":"13407:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4885,"indexExpression":{"id":4884,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4780,"src":"13418:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13407:13:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13371:49:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4887,"nodeType":"ExpressionStatement","src":"13371:49:18"}]}}]},"id":4902,"nodeType":"IfStatement","src":"12278:1290:18","trueBody":{"id":4874,"nodeType":"Block","src":"12299:907:18","statements":[{"assignments":[4839],"declarations":[{"constant":false,"id":4839,"mutability":"mutable","name":"totalFeeAmountRaw","nameLocation":"12864:17:18","nodeType":"VariableDeclaration","scope":4874,"src":"12856:25:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4838,"name":"uint256","nodeType":"ElementaryTypeName","src":"12856:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4846,"initialValue":{"arguments":[{"id":4844,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4746,"src":"12904:22:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":4840,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4712,"src":"12884:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4842,"indexExpression":{"id":4841,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4780,"src":"12895:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12884:13:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12898:5:18","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":2588,"src":"12884:19:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12884:43:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12856:71:18"},{"assignments":[4848],"declarations":[{"constant":false,"id":4848,"mutability":"mutable","name":"protocolPortion","nameLocation":"12957:15:18","nodeType":"VariableDeclaration","scope":4874,"src":"12949:23:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4847,"name":"uint256","nodeType":"ElementaryTypeName","src":"12949:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4853,"initialValue":{"arguments":[{"id":4851,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4716,"src":"12999:21:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4849,"name":"totalFeeAmountRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4839,"src":"12975:17:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12993:5:18","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":2552,"src":"12975:23:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4852,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12975:46:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12949:72:18"},{"expression":{"id":4860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":4854,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4523,"src":"13044:19:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":4857,"indexExpression":{"id":4855,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4706,"src":"13064:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13044:25:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":4858,"indexExpression":{"id":4856,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4796,"src":"13070:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13044:32:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":4859,"name":"protocolPortion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4848,"src":"13080:15:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13044:51:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4861,"nodeType":"ExpressionStatement","src":"13044:51:18"},{"expression":{"id":4872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":4862,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4530,"src":"13117:22:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":4865,"indexExpression":{"id":4863,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4706,"src":"13140:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13117:28:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":4866,"indexExpression":{"id":4864,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4796,"src":"13146:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13117:35:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":4867,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4712,"src":"13156:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4869,"indexExpression":{"id":4868,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4780,"src":"13167:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13156:13:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":4870,"name":"protocolPortion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4848,"src":"13172:15:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13156:31:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13117:70:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4873,"nodeType":"ExpressionStatement","src":"13117:70:18"}]}}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4783,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4780,"src":"11673:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":4784,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4774,"src":"11677:9:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11673:13:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4906,"initializationExpression":{"assignments":[4780],"declarations":[{"constant":false,"id":4780,"mutability":"mutable","name":"i","nameLocation":"11666:1:18","nodeType":"VariableDeclaration","scope":4906,"src":"11658:9:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4779,"name":"uint256","nodeType":"ElementaryTypeName","src":"11658:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4782,"initialValue":{"hexValue":"30","id":4781,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11670:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11658:13:18"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"11688:3:18","subExpression":{"id":4786,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4780,"src":"11690:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4788,"nodeType":"ExpressionStatement","src":"11688:3:18"},"nodeType":"ForStatement","src":"11653:1939:18"}]},"id":4908,"implemented":true,"kind":"function","modifiers":[],"name":"_receiveAggregateFees","nameLocation":"10508:21:18","nodeType":"FunctionDefinition","parameters":{"id":4713,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4706,"mutability":"mutable","name":"pool","nameLocation":"10538:4:18","nodeType":"VariableDeclaration","scope":4908,"src":"10530:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4705,"name":"address","nodeType":"ElementaryTypeName","src":"10530:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4709,"mutability":"mutable","name":"feeType","nameLocation":"10560:7:18","nodeType":"VariableDeclaration","scope":4908,"src":"10544:23:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"typeName":{"id":4708,"nodeType":"UserDefinedTypeName","pathNode":{"id":4707,"name":"ProtocolFeeType","nameLocations":["10544:15:18"],"nodeType":"IdentifierPath","referencedDeclaration":4475,"src":"10544:15:18"},"referencedDeclaration":4475,"src":"10544:15:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"visibility":"internal"},{"constant":false,"id":4712,"mutability":"mutable","name":"feeAmounts","nameLocation":"10586:10:18","nodeType":"VariableDeclaration","scope":4908,"src":"10569:27:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4710,"name":"uint256","nodeType":"ElementaryTypeName","src":"10569:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4711,"nodeType":"ArrayTypeName","src":"10569:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10529:68:18"},"returnParameters":{"id":4714,"nodeType":"ParameterList","parameters":[],"src":"10606:0:18"},"scope":6083,"src":"10499:3099:18","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"baseFunctions":[431],"body":{"id":4916,"nodeType":"Block","src":"13725:56:18","statements":[{"expression":{"id":4914,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4492,"src":"13742:32:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4913,"id":4915,"nodeType":"Return","src":"13735:39:18"}]},"documentation":{"id":4909,"nodeType":"StructuredDocumentation","src":"13604:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"7869ee18","id":4917,"implemented":true,"kind":"function","modifiers":[],"name":"getGlobalProtocolSwapFeePercentage","nameLocation":"13656:34:18","nodeType":"FunctionDefinition","parameters":{"id":4910,"nodeType":"ParameterList","parameters":[],"src":"13690:2:18"},"returnParameters":{"id":4913,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4912,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4917,"src":"13716:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4911,"name":"uint256","nodeType":"ElementaryTypeName","src":"13716:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13715:9:18"},"scope":6083,"src":"13647:134:18","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[437],"body":{"id":4925,"nodeType":"Block","src":"13909:57:18","statements":[{"expression":{"id":4923,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4494,"src":"13926:33:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4922,"id":4924,"nodeType":"Return","src":"13919:40:18"}]},"documentation":{"id":4918,"nodeType":"StructuredDocumentation","src":"13787:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"55fb76af","id":4926,"implemented":true,"kind":"function","modifiers":[],"name":"getGlobalProtocolYieldFeePercentage","nameLocation":"13839:35:18","nodeType":"FunctionDefinition","parameters":{"id":4919,"nodeType":"ParameterList","parameters":[],"src":"13874:2:18"},"returnParameters":{"id":4922,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4921,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4926,"src":"13900:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4920,"name":"uint256","nodeType":"ElementaryTypeName","src":"13900:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13899:9:18"},"scope":6083,"src":"13830:136:18","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[445],"body":{"id":4938,"nodeType":"Block","src":"14084:46:18","statements":[{"expression":{"baseExpression":{"id":4934,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4498,"src":"14101:16:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":4936,"indexExpression":{"id":4935,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4929,"src":"14118:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14101:22:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":4933,"id":4937,"nodeType":"Return","src":"14094:29:18"}]},"documentation":{"id":4927,"nodeType":"StructuredDocumentation","src":"13972:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"c673bdaf","id":4939,"implemented":true,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"14024:16:18","nodeType":"FunctionDefinition","parameters":{"id":4930,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4929,"mutability":"mutable","name":"pool","nameLocation":"14049:4:18","nodeType":"VariableDeclaration","scope":4939,"src":"14041:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4928,"name":"address","nodeType":"ElementaryTypeName","src":"14041:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14040:14:18"},"returnParameters":{"id":4933,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4932,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4939,"src":"14078:4:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4931,"name":"bool","nodeType":"ElementaryTypeName","src":"14078:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14077:6:18"},"scope":6083,"src":"14015:115:18","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[455],"body":{"id":4962,"nodeType":"Block","src":"14267:143:18","statements":[{"assignments":[4951],"declarations":[{"constant":false,"id":4951,"mutability":"mutable","name":"config","nameLocation":"14298:6:18","nodeType":"VariableDeclaration","scope":4962,"src":"14277:27:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":4950,"nodeType":"UserDefinedTypeName","pathNode":{"id":4949,"name":"PoolFeeConfig","nameLocations":["14277:13:18"],"nodeType":"IdentifierPath","referencedDeclaration":4481,"src":"14277:13:18"},"referencedDeclaration":4481,"src":"14277:13:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":4955,"initialValue":{"baseExpression":{"id":4952,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4503,"src":"14307:31:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":4954,"indexExpression":{"id":4953,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4942,"src":"14339:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14307:37:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"14277:67:18"},{"expression":{"components":[{"expression":{"id":4956,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4951,"src":"14363:6:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":4957,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14370:13:18","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":4478,"src":"14363:20:18","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"expression":{"id":4958,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4951,"src":"14385:6:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":4959,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14392:10:18","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":4480,"src":"14385:17:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":4960,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14362:41:18","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint64_$_t_bool_$","typeString":"tuple(uint64,bool)"}},"functionReturnParameters":4948,"id":4961,"nodeType":"Return","src":"14355:48:18"}]},"documentation":{"id":4940,"nodeType":"StructuredDocumentation","src":"14136:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"5c15a0b4","id":4963,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolProtocolSwapFeeInfo","nameLocation":"14188:26:18","nodeType":"FunctionDefinition","parameters":{"id":4943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4942,"mutability":"mutable","name":"pool","nameLocation":"14223:4:18","nodeType":"VariableDeclaration","scope":4963,"src":"14215:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4941,"name":"address","nodeType":"ElementaryTypeName","src":"14215:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14214:14:18"},"returnParameters":{"id":4948,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4945,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4963,"src":"14252:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4944,"name":"uint256","nodeType":"ElementaryTypeName","src":"14252:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4947,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4963,"src":"14261:4:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4946,"name":"bool","nodeType":"ElementaryTypeName","src":"14261:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14251:15:18"},"scope":6083,"src":"14179:231:18","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[465],"body":{"id":4986,"nodeType":"Block","src":"14548:144:18","statements":[{"assignments":[4975],"declarations":[{"constant":false,"id":4975,"mutability":"mutable","name":"config","nameLocation":"14579:6:18","nodeType":"VariableDeclaration","scope":4986,"src":"14558:27:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":4974,"nodeType":"UserDefinedTypeName","pathNode":{"id":4973,"name":"PoolFeeConfig","nameLocations":["14558:13:18"],"nodeType":"IdentifierPath","referencedDeclaration":4481,"src":"14558:13:18"},"referencedDeclaration":4481,"src":"14558:13:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":4979,"initialValue":{"baseExpression":{"id":4976,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4508,"src":"14588:32:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":4978,"indexExpression":{"id":4977,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4966,"src":"14621:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14588:38:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"14558:68:18"},{"expression":{"components":[{"expression":{"id":4980,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4975,"src":"14645:6:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":4981,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14652:13:18","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":4478,"src":"14645:20:18","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"expression":{"id":4982,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4975,"src":"14667:6:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":4983,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14674:10:18","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":4480,"src":"14667:17:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":4984,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14644:41:18","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint64_$_t_bool_$","typeString":"tuple(uint64,bool)"}},"functionReturnParameters":4972,"id":4985,"nodeType":"Return","src":"14637:48:18"}]},"documentation":{"id":4964,"nodeType":"StructuredDocumentation","src":"14416:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"7a2b97dc","id":4987,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolProtocolYieldFeeInfo","nameLocation":"14468:27:18","nodeType":"FunctionDefinition","parameters":{"id":4967,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4966,"mutability":"mutable","name":"pool","nameLocation":"14504:4:18","nodeType":"VariableDeclaration","scope":4987,"src":"14496:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4965,"name":"address","nodeType":"ElementaryTypeName","src":"14496:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14495:14:18"},"returnParameters":{"id":4972,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4969,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4987,"src":"14533:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4968,"name":"uint256","nodeType":"ElementaryTypeName","src":"14533:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4971,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4987,"src":"14542:4:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4970,"name":"bool","nodeType":"ElementaryTypeName","src":"14542:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14532:15:18"},"scope":6083,"src":"14459:233:18","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[473],"body":{"id":4999,"nodeType":"Block","src":"14828:60:18","statements":[{"expression":{"baseExpression":{"id":4995,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4512,"src":"14845:30:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":4997,"indexExpression":{"id":4996,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4990,"src":"14876:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14845:36:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4994,"id":4998,"nodeType":"Return","src":"14838:43:18"}]},"documentation":{"id":4988,"nodeType":"StructuredDocumentation","src":"14698:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"0b8e059b","id":5000,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCreatorSwapFeePercentage","nameLocation":"14750:31:18","nodeType":"FunctionDefinition","parameters":{"id":4991,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4990,"mutability":"mutable","name":"pool","nameLocation":"14790:4:18","nodeType":"VariableDeclaration","scope":5000,"src":"14782:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4989,"name":"address","nodeType":"ElementaryTypeName","src":"14782:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14781:14:18"},"returnParameters":{"id":4994,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4993,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5000,"src":"14819:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4992,"name":"uint256","nodeType":"ElementaryTypeName","src":"14819:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14818:9:18"},"scope":6083,"src":"14741:147:18","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[481],"body":{"id":5012,"nodeType":"Block","src":"15025:61:18","statements":[{"expression":{"baseExpression":{"id":5008,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4516,"src":"15042:31:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5010,"indexExpression":{"id":5009,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5003,"src":"15074:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15042:37:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5007,"id":5011,"nodeType":"Return","src":"15035:44:18"}]},"documentation":{"id":5001,"nodeType":"StructuredDocumentation","src":"14894:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"0252aab5","id":5013,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCreatorYieldFeePercentage","nameLocation":"14946:32:18","nodeType":"FunctionDefinition","parameters":{"id":5004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5003,"mutability":"mutable","name":"pool","nameLocation":"14987:4:18","nodeType":"VariableDeclaration","scope":5013,"src":"14979:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5002,"name":"address","nodeType":"ElementaryTypeName","src":"14979:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14978:14:18"},"returnParameters":{"id":5007,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5006,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5013,"src":"15016:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5005,"name":"uint256","nodeType":"ElementaryTypeName","src":"15016:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15015:9:18"},"scope":6083,"src":"14937:149:18","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[490],"body":{"id":5065,"nodeType":"Block","src":"15232:273:18","statements":[{"assignments":[5026,5028],"declarations":[{"constant":false,"id":5026,"mutability":"mutable","name":"poolTokens","nameLocation":"15259:10:18","nodeType":"VariableDeclaration","scope":5065,"src":"15243:26:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":5024,"nodeType":"UserDefinedTypeName","pathNode":{"id":5023,"name":"IERC20","nameLocations":["15243:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"15243:6:18"},"referencedDeclaration":6486,"src":"15243:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":5025,"nodeType":"ArrayTypeName","src":"15243:8:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":5028,"mutability":"mutable","name":"numTokens","nameLocation":"15279:9:18","nodeType":"VariableDeclaration","scope":5065,"src":"15271:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5027,"name":"uint256","nodeType":"ElementaryTypeName","src":"15271:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5032,"initialValue":{"arguments":[{"id":5030,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5016,"src":"15315:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5029,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5356,"src":"15292:22:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":5031,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15292:28:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"15242:78:18"},{"expression":{"id":5039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5033,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5020,"src":"15331:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5037,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"15358:9:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5036,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"15344:13:18","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":5034,"name":"uint256","nodeType":"ElementaryTypeName","src":"15348:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5035,"nodeType":"ArrayTypeName","src":"15348:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":5038,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15344:24:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"15331:37:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5040,"nodeType":"ExpressionStatement","src":"15331:37:18"},{"body":{"id":5063,"nodeType":"Block","src":"15418:81:18","statements":[{"expression":{"id":5061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5051,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5020,"src":"15432:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5053,"indexExpression":{"id":5052,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5042,"src":"15443:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15432:13:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"baseExpression":{"id":5054,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4523,"src":"15448:19:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":5056,"indexExpression":{"id":5055,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5016,"src":"15468:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15448:25:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":5060,"indexExpression":{"baseExpression":{"id":5057,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5026,"src":"15474:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":5059,"indexExpression":{"id":5058,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5042,"src":"15485:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15474:13:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15448:40:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15432:56:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5062,"nodeType":"ExpressionStatement","src":"15432:56:18"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5045,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5042,"src":"15398:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5046,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5028,"src":"15402:9:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15398:13:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5064,"initializationExpression":{"assignments":[5042],"declarations":[{"constant":false,"id":5042,"mutability":"mutable","name":"i","nameLocation":"15391:1:18","nodeType":"VariableDeclaration","scope":5064,"src":"15383:9:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5041,"name":"uint256","nodeType":"ElementaryTypeName","src":"15383:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5044,"initialValue":{"hexValue":"30","id":5043,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15395:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"15383:13:18"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":5049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"15413:3:18","subExpression":{"id":5048,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5042,"src":"15415:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5050,"nodeType":"ExpressionStatement","src":"15413:3:18"},"nodeType":"ForStatement","src":"15378:121:18"}]},"documentation":{"id":5014,"nodeType":"StructuredDocumentation","src":"15092:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"8df44c54","id":5066,"implemented":true,"kind":"function","modifiers":[],"name":"getProtocolFeeAmounts","nameLocation":"15144:21:18","nodeType":"FunctionDefinition","parameters":{"id":5017,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5016,"mutability":"mutable","name":"pool","nameLocation":"15174:4:18","nodeType":"VariableDeclaration","scope":5066,"src":"15166:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5015,"name":"address","nodeType":"ElementaryTypeName","src":"15166:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15165:14:18"},"returnParameters":{"id":5021,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5020,"mutability":"mutable","name":"feeAmounts","nameLocation":"15220:10:18","nodeType":"VariableDeclaration","scope":5066,"src":"15203:27:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":5018,"name":"uint256","nodeType":"ElementaryTypeName","src":"15203:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5019,"nodeType":"ArrayTypeName","src":"15203:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"15202:29:18"},"scope":6083,"src":"15135:370:18","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[499],"body":{"id":5118,"nodeType":"Block","src":"15654:276:18","statements":[{"assignments":[5079,5081],"declarations":[{"constant":false,"id":5079,"mutability":"mutable","name":"poolTokens","nameLocation":"15681:10:18","nodeType":"VariableDeclaration","scope":5118,"src":"15665:26:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":5077,"nodeType":"UserDefinedTypeName","pathNode":{"id":5076,"name":"IERC20","nameLocations":["15665:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"15665:6:18"},"referencedDeclaration":6486,"src":"15665:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":5078,"nodeType":"ArrayTypeName","src":"15665:8:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":5081,"mutability":"mutable","name":"numTokens","nameLocation":"15701:9:18","nodeType":"VariableDeclaration","scope":5118,"src":"15693:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5080,"name":"uint256","nodeType":"ElementaryTypeName","src":"15693:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5085,"initialValue":{"arguments":[{"id":5083,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5069,"src":"15737:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5082,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5356,"src":"15714:22:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":5084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15714:28:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"15664:78:18"},{"expression":{"id":5092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5086,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5073,"src":"15753:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5090,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5081,"src":"15780:9:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5089,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"15766:13:18","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":5087,"name":"uint256","nodeType":"ElementaryTypeName","src":"15770:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5088,"nodeType":"ArrayTypeName","src":"15770:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":5091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15766:24:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"15753:37:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5093,"nodeType":"ExpressionStatement","src":"15753:37:18"},{"body":{"id":5116,"nodeType":"Block","src":"15840:84:18","statements":[{"expression":{"id":5114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5104,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5073,"src":"15854:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5106,"indexExpression":{"id":5105,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5095,"src":"15865:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15854:13:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"baseExpression":{"id":5107,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4530,"src":"15870:22:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":5109,"indexExpression":{"id":5108,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5069,"src":"15893:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15870:28:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":5113,"indexExpression":{"baseExpression":{"id":5110,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5079,"src":"15899:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":5112,"indexExpression":{"id":5111,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5095,"src":"15910:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15899:13:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15870:43:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15854:59:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5115,"nodeType":"ExpressionStatement","src":"15854:59:18"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5098,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5095,"src":"15820:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5099,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5081,"src":"15824:9:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15820:13:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5117,"initializationExpression":{"assignments":[5095],"declarations":[{"constant":false,"id":5095,"mutability":"mutable","name":"i","nameLocation":"15813:1:18","nodeType":"VariableDeclaration","scope":5117,"src":"15805:9:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5094,"name":"uint256","nodeType":"ElementaryTypeName","src":"15805:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5097,"initialValue":{"hexValue":"30","id":5096,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15817:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"15805:13:18"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":5102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"15835:3:18","subExpression":{"id":5101,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5095,"src":"15837:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5103,"nodeType":"ExpressionStatement","src":"15835:3:18"},"nodeType":"ForStatement","src":"15800:124:18"}]},"documentation":{"id":5067,"nodeType":"StructuredDocumentation","src":"15511:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"9e95f3fd","id":5119,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCreatorFeeAmounts","nameLocation":"15563:24:18","nodeType":"FunctionDefinition","parameters":{"id":5070,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5069,"mutability":"mutable","name":"pool","nameLocation":"15596:4:18","nodeType":"VariableDeclaration","scope":5119,"src":"15588:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5068,"name":"address","nodeType":"ElementaryTypeName","src":"15588:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15587:14:18"},"returnParameters":{"id":5074,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5073,"mutability":"mutable","name":"feeAmounts","nameLocation":"15642:10:18","nodeType":"VariableDeclaration","scope":5119,"src":"15625:27:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":5071,"name":"uint256","nodeType":"ElementaryTypeName","src":"15625:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5072,"nodeType":"ArrayTypeName","src":"15625:9:18","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"15624:29:18"},"scope":6083,"src":"15554:376:18","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[509],"body":{"id":5134,"nodeType":"Block","src":"16137:103:18","statements":[{"expression":{"arguments":[{"id":5130,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5122,"src":"16185:21:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5131,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5124,"src":"16208:24:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5129,"name":"_computeAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5296,"src":"16154:30:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5132,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16154:79:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5128,"id":5133,"nodeType":"Return","src":"16147:86:18"}]},"documentation":{"id":5120,"nodeType":"StructuredDocumentation","src":"15936:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"0ddd60c6","id":5135,"implemented":true,"kind":"function","modifiers":[],"name":"computeAggregateFeePercentage","nameLocation":"15988:29:18","nodeType":"FunctionDefinition","parameters":{"id":5125,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5122,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"16035:21:18","nodeType":"VariableDeclaration","scope":5135,"src":"16027:29:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5121,"name":"uint256","nodeType":"ElementaryTypeName","src":"16027:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5124,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"16074:24:18","nodeType":"VariableDeclaration","scope":5135,"src":"16066:32:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5123,"name":"uint256","nodeType":"ElementaryTypeName","src":"16066:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16017:87:18"},"returnParameters":{"id":5128,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5127,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5135,"src":"16128:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5126,"name":"uint256","nodeType":"ElementaryTypeName","src":"16128:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16127:9:18"},"scope":6083,"src":"15979:261:18","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[515],"body":{"id":5172,"nodeType":"Block","src":"16374:347:18","statements":[{"assignments":[5146],"declarations":[{"constant":false,"id":5146,"mutability":"mutable","name":"feeConfig","nameLocation":"16405:9:18","nodeType":"VariableDeclaration","scope":5172,"src":"16384:30:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":5145,"nodeType":"UserDefinedTypeName","pathNode":{"id":5144,"name":"PoolFeeConfig","nameLocations":["16384:13:18"],"nodeType":"IdentifierPath","referencedDeclaration":4481,"src":"16384:13:18"},"referencedDeclaration":4481,"src":"16384:13:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":5150,"initialValue":{"baseExpression":{"id":5147,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4503,"src":"16417:31:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5149,"indexExpression":{"id":5148,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5138,"src":"16449:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16417:37:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"16384:70:18"},{"assignments":[5152],"declarations":[{"constant":false,"id":5152,"mutability":"mutable","name":"globalProtocolSwapFee","nameLocation":"16472:21:18","nodeType":"VariableDeclaration","scope":5172,"src":"16464:29:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5151,"name":"uint256","nodeType":"ElementaryTypeName","src":"16464:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5154,"initialValue":{"id":5153,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4492,"src":"16496:32:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16464:64:18"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":5155,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5146,"src":"16543:9:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":5156,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16553:10:18","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":4480,"src":"16543:20:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":5157,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16567:5:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"16543:29:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5159,"name":"globalProtocolSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5152,"src":"16576:21:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":5160,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5146,"src":"16601:9:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":5161,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16611:13:18","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":4478,"src":"16601:23:18","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"16576:48:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16543:81:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5171,"nodeType":"IfStatement","src":"16539:176:18","trueBody":{"id":5170,"nodeType":"Block","src":"16626:89:18","statements":[{"expression":{"arguments":[{"id":5165,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5138,"src":"16669:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5166,"name":"globalProtocolSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5152,"src":"16675:21:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":5167,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16698:5:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5164,"name":"_updatePoolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6023,"src":"16640:28:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":5168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16640:64:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5169,"nodeType":"ExpressionStatement","src":"16640:64:18"}]}}]},"documentation":{"id":5136,"nodeType":"StructuredDocumentation","src":"16246:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"71ecc8fb","id":5173,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":5141,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5138,"src":"16368:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5142,"kind":"modifierInvocation","modifierName":{"id":5140,"name":"withLatestFees","nameLocations":["16353:14:18"],"nodeType":"IdentifierPath","referencedDeclaration":4608,"src":"16353:14:18"},"nodeType":"ModifierInvocation","src":"16353:20:18"}],"name":"updateProtocolSwapFeePercentage","nameLocation":"16298:31:18","nodeType":"FunctionDefinition","parameters":{"id":5139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5138,"mutability":"mutable","name":"pool","nameLocation":"16338:4:18","nodeType":"VariableDeclaration","scope":5173,"src":"16330:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5137,"name":"address","nodeType":"ElementaryTypeName","src":"16330:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16329:14:18"},"returnParameters":{"id":5143,"nodeType":"ParameterList","parameters":[],"src":"16374:0:18"},"scope":6083,"src":"16289:432:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[521],"body":{"id":5210,"nodeType":"Block","src":"16856:353:18","statements":[{"assignments":[5184],"declarations":[{"constant":false,"id":5184,"mutability":"mutable","name":"feeConfig","nameLocation":"16887:9:18","nodeType":"VariableDeclaration","scope":5210,"src":"16866:30:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":5183,"nodeType":"UserDefinedTypeName","pathNode":{"id":5182,"name":"PoolFeeConfig","nameLocations":["16866:13:18"],"nodeType":"IdentifierPath","referencedDeclaration":4481,"src":"16866:13:18"},"referencedDeclaration":4481,"src":"16866:13:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":5188,"initialValue":{"baseExpression":{"id":5185,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4508,"src":"16899:32:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5187,"indexExpression":{"id":5186,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5176,"src":"16932:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16899:38:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"16866:71:18"},{"assignments":[5190],"declarations":[{"constant":false,"id":5190,"mutability":"mutable","name":"globalProtocolYieldFee","nameLocation":"16955:22:18","nodeType":"VariableDeclaration","scope":5210,"src":"16947:30:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5189,"name":"uint256","nodeType":"ElementaryTypeName","src":"16947:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5192,"initialValue":{"id":5191,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4494,"src":"16980:33:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16947:66:18"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":5193,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5184,"src":"17028:9:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":5194,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17038:10:18","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":4480,"src":"17028:20:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":5195,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17052:5:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"17028:29:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5197,"name":"globalProtocolYieldFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5190,"src":"17061:22:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":5198,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5184,"src":"17087:9:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":5199,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17097:13:18","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":4478,"src":"17087:23:18","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17061:49:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"17028:82:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5209,"nodeType":"IfStatement","src":"17024:179:18","trueBody":{"id":5208,"nodeType":"Block","src":"17112:91:18","statements":[{"expression":{"arguments":[{"id":5203,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5176,"src":"17156:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5204,"name":"globalProtocolYieldFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5190,"src":"17162:22:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":5205,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17186:5:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5202,"name":"_updatePoolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6061,"src":"17126:29:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":5206,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17126:66:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5207,"nodeType":"ExpressionStatement","src":"17126:66:18"}]}}]},"documentation":{"id":5174,"nodeType":"StructuredDocumentation","src":"16727:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"71447ea8","id":5211,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":5179,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5176,"src":"16850:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5180,"kind":"modifierInvocation","modifierName":{"id":5178,"name":"withLatestFees","nameLocations":["16835:14:18"],"nodeType":"IdentifierPath","referencedDeclaration":4608,"src":"16835:14:18"},"nodeType":"ModifierInvocation","src":"16835:20:18"}],"name":"updateProtocolYieldFeePercentage","nameLocation":"16779:32:18","nodeType":"FunctionDefinition","parameters":{"id":5177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5176,"mutability":"mutable","name":"pool","nameLocation":"16820:4:18","nodeType":"VariableDeclaration","scope":5211,"src":"16812:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5175,"name":"address","nodeType":"ElementaryTypeName","src":"16812:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16811:14:18"},"returnParameters":{"id":5181,"nodeType":"ParameterList","parameters":[],"src":"16856:0:18"},"scope":6083,"src":"16770:439:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":5265,"nodeType":"Block","src":"17322:594:18","statements":[{"assignments":[5222],"declarations":[{"constant":false,"id":5222,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"17340:21:18","nodeType":"VariableDeclaration","scope":5265,"src":"17332:29:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5221,"name":"uint256","nodeType":"ElementaryTypeName","src":"17332:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5223,"nodeType":"VariableDeclarationStatement","src":"17332:29:18"},{"assignments":[5225],"declarations":[{"constant":false,"id":5225,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"17379:24:18","nodeType":"VariableDeclaration","scope":5265,"src":"17371:32:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5224,"name":"uint256","nodeType":"ElementaryTypeName","src":"17371:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5226,"nodeType":"VariableDeclarationStatement","src":"17371:32:18"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":5230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5227,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5216,"src":"17418:7:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":5228,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4475,"src":"17429:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4475_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":5229,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"17445:4:18","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":4473,"src":"17429:20:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"17418:31:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5258,"nodeType":"Block","src":"17634:179:18","statements":[{"expression":{"id":5250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5245,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5222,"src":"17648:21:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":5246,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4508,"src":"17672:32:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5248,"indexExpression":{"id":5247,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5213,"src":"17705:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17672:38:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":5249,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17711:13:18","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":4478,"src":"17672:52:18","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17648:76:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5251,"nodeType":"ExpressionStatement","src":"17648:76:18"},{"expression":{"id":5256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5252,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5225,"src":"17738:24:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":5253,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4516,"src":"17765:31:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5255,"indexExpression":{"id":5254,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5213,"src":"17797:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17765:37:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17738:64:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5257,"nodeType":"ExpressionStatement","src":"17738:64:18"}]},"id":5259,"nodeType":"IfStatement","src":"17414:399:18","trueBody":{"id":5244,"nodeType":"Block","src":"17451:177:18","statements":[{"expression":{"id":5236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5231,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5222,"src":"17465:21:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":5232,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4503,"src":"17489:31:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5234,"indexExpression":{"id":5233,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5213,"src":"17521:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17489:37:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":5235,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17527:13:18","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":4478,"src":"17489:51:18","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17465:75:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5237,"nodeType":"ExpressionStatement","src":"17465:75:18"},{"expression":{"id":5242,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5238,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5225,"src":"17554:24:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":5239,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4512,"src":"17581:30:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5241,"indexExpression":{"id":5240,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5213,"src":"17612:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17581:36:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17554:63:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5243,"nodeType":"ExpressionStatement","src":"17554:63:18"}]}},{"expression":{"arguments":[{"id":5261,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5222,"src":"17861:21:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5262,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5225,"src":"17884:24:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5260,"name":"_computeAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5296,"src":"17830:30:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5263,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17830:79:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5220,"id":5264,"nodeType":"Return","src":"17823:86:18"}]},"id":5266,"implemented":true,"kind":"function","modifiers":[],"name":"_getAggregateFeePercentage","nameLocation":"17224:26:18","nodeType":"FunctionDefinition","parameters":{"id":5217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5213,"mutability":"mutable","name":"pool","nameLocation":"17259:4:18","nodeType":"VariableDeclaration","scope":5266,"src":"17251:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5212,"name":"address","nodeType":"ElementaryTypeName","src":"17251:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5216,"mutability":"mutable","name":"feeType","nameLocation":"17281:7:18","nodeType":"VariableDeclaration","scope":5266,"src":"17265:23:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"typeName":{"id":5215,"nodeType":"UserDefinedTypeName","pathNode":{"id":5214,"name":"ProtocolFeeType","nameLocations":["17265:15:18"],"nodeType":"IdentifierPath","referencedDeclaration":4475,"src":"17265:15:18"},"referencedDeclaration":4475,"src":"17265:15:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"visibility":"internal"}],"src":"17250:39:18"},"returnParameters":{"id":5220,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5219,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5266,"src":"17313:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5218,"name":"uint256","nodeType":"ElementaryTypeName","src":"17313:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17312:9:18"},"scope":6083,"src":"17215:701:18","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":5295,"nodeType":"Block","src":"18104:882:18","statements":[{"expression":{"id":5284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5275,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5273,"src":"18114:22:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5276,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5268,"src":"18151:21:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"id":5281,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5270,"src":"18230:24:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5277,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5268,"src":"18187:21:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18209:10:18","memberName":"complement","nodeType":"MemberAccess","referencedDeclaration":2789,"src":"18187:32:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":5279,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18187:34:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18222:7:18","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":2535,"src":"18187:42:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18187:68:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18151:104:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18114:141:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5285,"nodeType":"ExpressionStatement","src":"18114:141:18"},{"expression":{"id":5293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5286,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5273,"src":"18888:22:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5287,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5273,"src":"18914:22:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5288,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2408,"src":"18939:18:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18914:43:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":5290,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18913:45:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5291,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2408,"src":"18961:18:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18913:66:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18888:91:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5294,"nodeType":"ExpressionStatement","src":"18888:91:18"}]},"id":5296,"implemented":true,"kind":"function","modifiers":[],"name":"_computeAggregateFeePercentage","nameLocation":"17931:30:18","nodeType":"FunctionDefinition","parameters":{"id":5271,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5268,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"17979:21:18","nodeType":"VariableDeclaration","scope":5296,"src":"17971:29:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5267,"name":"uint256","nodeType":"ElementaryTypeName","src":"17971:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5270,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"18018:24:18","nodeType":"VariableDeclaration","scope":5296,"src":"18010:32:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5269,"name":"uint256","nodeType":"ElementaryTypeName","src":"18010:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17961:87:18"},"returnParameters":{"id":5274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5273,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"18080:22:18","nodeType":"VariableDeclaration","scope":5296,"src":"18072:30:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5272,"name":"uint256","nodeType":"ElementaryTypeName","src":"18072:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18071:32:18"},"scope":6083,"src":"17922:1064:18","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5331,"nodeType":"Block","src":"19056:276:18","statements":[{"assignments":[5302],"declarations":[{"constant":false,"id":5302,"mutability":"mutable","name":"poolCreator","nameLocation":"19074:11:18","nodeType":"VariableDeclaration","scope":5331,"src":"19066:19:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5301,"name":"address","nodeType":"ElementaryTypeName","src":"19066:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":5306,"initialValue":{"arguments":[{"id":5304,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5298,"src":"19104:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5303,"name":"_getPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5375,"src":"19088:15:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_address_$","typeString":"function (address) view returns (address)"}},"id":5305,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19088:21:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"19066:43:18"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5307,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5302,"src":"19124:11:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":5310,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19147:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":5309,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19139:7:18","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5308,"name":"address","nodeType":"ElementaryTypeName","src":"19139:7:18","typeDescriptions":{}}},"id":5311,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19139:10:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"19124:25:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5318,"nodeType":"IfStatement","src":"19120:93:18","trueBody":{"id":5317,"nodeType":"Block","src":"19151:62:18","statements":[{"errorCall":{"arguments":[{"id":5314,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5298,"src":"19197:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5313,"name":"PoolCreatorNotRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":402,"src":"19172:24:18","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":5315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19172:30:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5316,"nodeType":"RevertStatement","src":"19165:37:18"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5319,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5302,"src":"19227:11:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":5320,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19242:3:18","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19246:6:18","memberName":"sender","nodeType":"MemberAccess","src":"19242:10:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"19227:25:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5330,"nodeType":"IfStatement","src":"19223:103:18","trueBody":{"id":5329,"nodeType":"Block","src":"19254:72:18","statements":[{"errorCall":{"arguments":[{"expression":{"id":5324,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19298:3:18","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19302:6:18","memberName":"sender","nodeType":"MemberAccess","src":"19298:10:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5326,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5298,"src":"19310:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":5323,"name":"CallerIsNotPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":409,"src":"19275:22:18","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address) pure returns (error)"}},"id":5327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19275:40:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5328,"nodeType":"RevertStatement","src":"19268:47:18"}]}}]},"id":5332,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureCallerIsPoolCreator","nameLocation":"19001:26:18","nodeType":"FunctionDefinition","parameters":{"id":5299,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5298,"mutability":"mutable","name":"pool","nameLocation":"19036:4:18","nodeType":"VariableDeclaration","scope":5332,"src":"19028:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5297,"name":"address","nodeType":"ElementaryTypeName","src":"19028:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19027:14:18"},"returnParameters":{"id":5300,"nodeType":"ParameterList","parameters":[],"src":"19056:0:18"},"scope":6083,"src":"18992:340:18","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":5355,"nodeType":"Block","src":"19450:87:18","statements":[{"expression":{"id":5348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5343,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5339,"src":"19460:6:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5346,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5334,"src":"19490:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5344,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"19469:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":5345,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19476:13:18","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":1685,"src":"19469:20:18","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":5347,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19469:26:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"src":"19460:35:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":5349,"nodeType":"ExpressionStatement","src":"19460:35:18"},{"expression":{"id":5353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5350,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5341,"src":"19505:9:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":5351,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5339,"src":"19517:6:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":5352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19524:6:18","memberName":"length","nodeType":"MemberAccess","src":"19517:13:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19505:25:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5354,"nodeType":"ExpressionStatement","src":"19505:25:18"}]},"id":5356,"implemented":true,"kind":"function","modifiers":[],"name":"_getPoolTokensAndCount","nameLocation":"19347:22:18","nodeType":"FunctionDefinition","parameters":{"id":5335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5334,"mutability":"mutable","name":"pool","nameLocation":"19378:4:18","nodeType":"VariableDeclaration","scope":5356,"src":"19370:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5333,"name":"address","nodeType":"ElementaryTypeName","src":"19370:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19369:14:18"},"returnParameters":{"id":5342,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5339,"mutability":"mutable","name":"tokens","nameLocation":"19423:6:18","nodeType":"VariableDeclaration","scope":5356,"src":"19407:22:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":5337,"nodeType":"UserDefinedTypeName","pathNode":{"id":5336,"name":"IERC20","nameLocations":["19407:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"19407:6:18"},"referencedDeclaration":6486,"src":"19407:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":5338,"nodeType":"ArrayTypeName","src":"19407:8:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":5341,"mutability":"mutable","name":"numTokens","nameLocation":"19439:9:18","nodeType":"VariableDeclaration","scope":5356,"src":"19431:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5340,"name":"uint256","nodeType":"ElementaryTypeName","src":"19431:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19406:43:18"},"scope":6083,"src":"19338:199:18","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":5374,"nodeType":"Block","src":"19674:130:18","statements":[{"assignments":[5365],"declarations":[{"constant":false,"id":5365,"mutability":"mutable","name":"roleAccounts","nameLocation":"19708:12:18","nodeType":"VariableDeclaration","scope":5374,"src":"19684:36:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":5364,"nodeType":"UserDefinedTypeName","pathNode":{"id":5363,"name":"PoolRoleAccounts","nameLocations":["19684:16:18"],"nodeType":"IdentifierPath","referencedDeclaration":2217,"src":"19684:16:18"},"referencedDeclaration":2217,"src":"19684:16:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"id":5370,"initialValue":{"arguments":[{"id":5368,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5358,"src":"19750:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5366,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"19723:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":5367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19730:19:18","memberName":"getPoolRoleAccounts","nodeType":"MemberAccess","referencedDeclaration":1882,"src":"19723:26:18","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_PoolRoleAccounts_$2217_memory_ptr_$","typeString":"function (address) view external returns (struct PoolRoleAccounts memory)"}},"id":5369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19723:32:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"nodeType":"VariableDeclarationStatement","src":"19684:71:18"},{"expression":{"expression":{"id":5371,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5365,"src":"19773:12:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"id":5372,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19786:11:18","memberName":"poolCreator","nodeType":"MemberAccess","referencedDeclaration":2216,"src":"19773:24:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":5362,"id":5373,"nodeType":"Return","src":"19766:31:18"}]},"id":5375,"implemented":true,"kind":"function","modifiers":[],"name":"_getPoolCreator","nameLocation":"19612:15:18","nodeType":"FunctionDefinition","parameters":{"id":5359,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5358,"mutability":"mutable","name":"pool","nameLocation":"19636:4:18","nodeType":"VariableDeclaration","scope":5375,"src":"19628:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5357,"name":"address","nodeType":"ElementaryTypeName","src":"19628:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19627:14:18"},"returnParameters":{"id":5362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5361,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5375,"src":"19665:7:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5360,"name":"address","nodeType":"ElementaryTypeName","src":"19665:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19664:9:18"},"scope":6083,"src":"19603:201:18","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[535],"body":{"id":5459,"nodeType":"Block","src":"20283:1589:18","statements":[{"expression":{"id":5395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5391,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4498,"src":"20293:16:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":5393,"indexExpression":{"id":5392,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5378,"src":"20310:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"20293:22:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":5394,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"20318:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"20293:29:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5396,"nodeType":"ExpressionStatement","src":"20293:29:18"},{"expression":{"id":5402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5397,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5387,"src":"20422:26:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"id":5398,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5382,"src":"20451:17:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":5400,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4492,"src":"20475:32:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"20451:56:18","trueExpression":{"hexValue":"30","id":5399,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20471:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20422:85:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5403,"nodeType":"ExpressionStatement","src":"20422:85:18"},{"expression":{"id":5409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5404,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5389,"src":"20517:27:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"id":5405,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5382,"src":"20547:17:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":5407,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4494,"src":"20571:33:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"20547:57:18","trueExpression":{"hexValue":"30","id":5406,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20567:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20517:87:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5410,"nodeType":"ExpressionStatement","src":"20517:87:18"},{"expression":{"id":5420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5411,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4503,"src":"21052:31:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5413,"indexExpression":{"id":5412,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5378,"src":"21084:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21052:37:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5415,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5387,"src":"21135:26:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21162:8:18","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":7790,"src":"21135:35:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":5417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21135:37:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":5418,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5382,"src":"21198:17:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5414,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4481,"src":"21092:13:18","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$4481_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":5419,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["21120:13:18","21186:10:18"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"21092:134:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"21052:174:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":5421,"nodeType":"ExpressionStatement","src":"21052:174:18"},{"expression":{"id":5431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5422,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4508,"src":"21236:32:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5424,"indexExpression":{"id":5423,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5378,"src":"21269:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21236:38:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5426,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5389,"src":"21320:27:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21348:8:18","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":7790,"src":"21320:36:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":5428,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21320:38:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":5429,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5382,"src":"21384:17:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5425,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4481,"src":"21277:13:18","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$4481_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":5430,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["21305:13:18","21372:10:18"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"21277:135:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"21236:176:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":5432,"nodeType":"ExpressionStatement","src":"21236:176:18"},{"eventCall":{"arguments":[{"id":5434,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5378,"src":"21572:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5435,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5387,"src":"21578:26:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5436,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5382,"src":"21606:17:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5433,"name":"InitialPoolAggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":373,"src":"21534:37:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":5437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21534:90:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5438,"nodeType":"EmitStatement","src":"21529:95:18"},{"eventCall":{"arguments":[{"id":5440,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5378,"src":"21678:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5441,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5389,"src":"21684:27:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5442,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5382,"src":"21713:17:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5439,"name":"InitialPoolAggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":382,"src":"21639:38:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":5443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21639:92:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5444,"nodeType":"EmitStatement","src":"21634:97:18"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5445,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5380,"src":"21746:11:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":5448,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21769:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":5447,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21761:7:18","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5446,"name":"address","nodeType":"ElementaryTypeName","src":"21761:7:18","typeDescriptions":{}}},"id":5449,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21761:10:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21746:25:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5458,"nodeType":"IfStatement","src":"21742:124:18","trueBody":{"id":5457,"nodeType":"Block","src":"21773:93:18","statements":[{"eventCall":{"arguments":[{"id":5452,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5378,"src":"21818:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5453,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5380,"src":"21824:11:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5454,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5382,"src":"21837:17:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5451,"name":"PoolWithCreatorRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":391,"src":"21792:25:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,bool)"}},"id":5455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21792:63:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5456,"nodeType":"EmitStatement","src":"21787:68:18"}]}}]},"documentation":{"id":5376,"nodeType":"StructuredDocumentation","src":"20028:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"77ff76e7","id":5460,"implemented":true,"kind":"function","modifiers":[{"id":5385,"kind":"modifierInvocation","modifierName":{"id":5384,"name":"onlyVault","nameLocations":["20191:9:18"],"nodeType":"IdentifierPath","referencedDeclaration":6217,"src":"20191:9:18"},"nodeType":"ModifierInvocation","src":"20191:9:18"}],"name":"registerPool","nameLocation":"20080:12:18","nodeType":"FunctionDefinition","parameters":{"id":5383,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5378,"mutability":"mutable","name":"pool","nameLocation":"20110:4:18","nodeType":"VariableDeclaration","scope":5460,"src":"20102:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5377,"name":"address","nodeType":"ElementaryTypeName","src":"20102:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5380,"mutability":"mutable","name":"poolCreator","nameLocation":"20132:11:18","nodeType":"VariableDeclaration","scope":5460,"src":"20124:19:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5379,"name":"address","nodeType":"ElementaryTypeName","src":"20124:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5382,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"20158:17:18","nodeType":"VariableDeclaration","scope":5460,"src":"20153:22:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5381,"name":"bool","nodeType":"ElementaryTypeName","src":"20153:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"20092:89:18"},"returnParameters":{"id":5390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5387,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"20218:26:18","nodeType":"VariableDeclaration","scope":5460,"src":"20210:34:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5386,"name":"uint256","nodeType":"ElementaryTypeName","src":"20210:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5389,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"20254:27:18","nodeType":"VariableDeclaration","scope":5460,"src":"20246:35:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5388,"name":"uint256","nodeType":"ElementaryTypeName","src":"20246:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20209:73:18"},"scope":6083,"src":"20071:1801:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":5562,"nodeType":"Block","src":"23237:1190:18","statements":[{"assignments":[5470],"declarations":[{"constant":false,"id":5470,"mutability":"mutable","name":"oldFeeController","nameLocation":"23270:16:18","nodeType":"VariableDeclaration","scope":5562,"src":"23247:39:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"},"typeName":{"id":5469,"nodeType":"UserDefinedTypeName","pathNode":{"id":5468,"name":"IProtocolFeeController","nameLocations":["23247:22:18"],"nodeType":"IdentifierPath","referencedDeclaration":613,"src":"23247:22:18"},"referencedDeclaration":613,"src":"23247:22:18","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"id":5474,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5471,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"23289:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":5472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23296:24:18","memberName":"getProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":1900,"src":"23289:31:18","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IProtocolFeeController_$613_$","typeString":"function () view external returns (contract IProtocolFeeController)"}},"id":5473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23289:33:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"nodeType":"VariableDeclarationStatement","src":"23247:75:18"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5477,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5470,"src":"23345:16:18","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}],"id":5476,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23337:7:18","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5475,"name":"address","nodeType":"ElementaryTypeName","src":"23337:7:18","typeDescriptions":{}}},"id":5478,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23337:25:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":5481,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"23374:4:18","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$6083","typeString":"contract ProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeController_$6083","typeString":"contract ProtocolFeeController"}],"id":5480,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23366:7:18","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5479,"name":"address","nodeType":"ElementaryTypeName","src":"23366:7:18","typeDescriptions":{}}},"id":5482,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23366:13:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"23337:42:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5488,"nodeType":"IfStatement","src":"23333:104:18","trueBody":{"id":5487,"nodeType":"Block","src":"23381:56:18","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5484,"name":"InvalidMigrationSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4538,"src":"23402:22:18","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5485,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23402:24:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5486,"nodeType":"RevertStatement","src":"23395:31:18"}]}},{"condition":{"baseExpression":{"id":5489,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4498,"src":"23451:16:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":5491,"indexExpression":{"id":5490,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5463,"src":"23468:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23451:22:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5497,"nodeType":"IfStatement","src":"23447:87:18","trueBody":{"id":5496,"nodeType":"Block","src":"23475:59:18","statements":[{"errorCall":{"arguments":[{"id":5493,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5463,"src":"23518:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5492,"name":"PoolAlreadyRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4535,"src":"23496:21:18","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":5494,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23496:27:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5495,"nodeType":"RevertStatement","src":"23489:34:18"}]}},{"expression":{"id":5502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5498,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4498,"src":"23544:16:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":5500,"indexExpression":{"id":5499,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5463,"src":"23561:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23544:22:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":5501,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"23569:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"23544:29:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5503,"nodeType":"ExpressionStatement","src":"23544:29:18"},{"assignments":[5505,5507],"declarations":[{"constant":false,"id":5505,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"23593:25:18","nodeType":"VariableDeclaration","scope":5562,"src":"23585:33:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5504,"name":"uint256","nodeType":"ElementaryTypeName","src":"23585:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5507,"mutability":"mutable","name":"swapFeeIsOverride","nameLocation":"23625:17:18","nodeType":"VariableDeclaration","scope":5562,"src":"23620:22:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5506,"name":"bool","nodeType":"ElementaryTypeName","src":"23620:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":5512,"initialValue":{"arguments":[{"id":5510,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5463,"src":"23690:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5508,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5470,"src":"23646:16:18","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":5509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23663:26:18","memberName":"getPoolProtocolSwapFeeInfo","nodeType":"MemberAccess","referencedDeclaration":455,"src":"23646:43:18","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$_t_bool_$","typeString":"function (address) view external returns (uint256,bool)"}},"id":5511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23646:49:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"23584:111:18"},{"expression":{"id":5522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5513,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4503,"src":"23705:31:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5515,"indexExpression":{"id":5514,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5463,"src":"23737:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23705:37:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5517,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5505,"src":"23788:25:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23814:8:18","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":7790,"src":"23788:34:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":5519,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23788:36:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":5520,"name":"swapFeeIsOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5507,"src":"23850:17:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5516,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4481,"src":"23745:13:18","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$4481_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":5521,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["23773:13:18","23838:10:18"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"23745:133:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"23705:173:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":5523,"nodeType":"ExpressionStatement","src":"23705:173:18"},{"assignments":[5525,5527],"declarations":[{"constant":false,"id":5525,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"23898:26:18","nodeType":"VariableDeclaration","scope":5562,"src":"23890:34:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5524,"name":"uint256","nodeType":"ElementaryTypeName","src":"23890:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5527,"mutability":"mutable","name":"yieldFeeIsOverride","nameLocation":"23931:18:18","nodeType":"VariableDeclaration","scope":5562,"src":"23926:23:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5526,"name":"bool","nodeType":"ElementaryTypeName","src":"23926:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":5532,"initialValue":{"arguments":[{"id":5530,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5463,"src":"24011:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5528,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5470,"src":"23953:16:18","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":5529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23970:27:18","memberName":"getPoolProtocolYieldFeeInfo","nodeType":"MemberAccess","referencedDeclaration":465,"src":"23953:44:18","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$_t_bool_$","typeString":"function (address) view external returns (uint256,bool)"}},"id":5531,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23953:72:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"23889:136:18"},{"expression":{"id":5542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5533,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4508,"src":"24035:32:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5535,"indexExpression":{"id":5534,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5463,"src":"24068:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24035:38:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5537,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5525,"src":"24119:26:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24146:8:18","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":7790,"src":"24119:35:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":5539,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24119:37:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":5540,"name":"yieldFeeIsOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5527,"src":"24182:18:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5536,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4481,"src":"24076:13:18","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$4481_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":5541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["24104:13:18","24170:10:18"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"24076:135:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"24035:176:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":5543,"nodeType":"ExpressionStatement","src":"24035:176:18"},{"expression":{"id":5551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5544,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4512,"src":"24222:30:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5546,"indexExpression":{"id":5545,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5463,"src":"24253:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24222:36:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5549,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5463,"src":"24310:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5547,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5470,"src":"24261:16:18","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":5548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24278:31:18","memberName":"getPoolCreatorSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":473,"src":"24261:48:18","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":5550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24261:54:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24222:93:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5552,"nodeType":"ExpressionStatement","src":"24222:93:18"},{"expression":{"id":5560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5553,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4516,"src":"24325:31:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5555,"indexExpression":{"id":5554,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5463,"src":"24357:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24325:37:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5558,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5463,"src":"24415:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5556,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5470,"src":"24365:16:18","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":5557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24382:32:18","memberName":"getPoolCreatorYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":481,"src":"24365:49:18","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":5559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24365:55:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24325:95:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5561,"nodeType":"ExpressionStatement","src":"24325:95:18"}]},"documentation":{"id":5461,"nodeType":"StructuredDocumentation","src":"21878:1297:18","text":" @notice Not exposed in the interface, this enables migration of hidden pool state.\n @dev Permission should NEVER be granted to this function outside of a migration contract. It is necessary to\n permit migration of the `ProtocolFeeController` with all state (in particular, protocol fee overrides and pool\n creator fees) that cannot be written outside of the `registerPool` function called by the Vault during pool\n deployment.\n Even if governance were to grant permission to call this function, the `_registeredPools` latch keeps it safe,\n guaranteeing that it is impossible to use this function to change anything after registration. A pool can only\n be registered / configured once - either copied to a new controller in the migration context, or added normally\n through the Vault calling `registerPool`.\n Technically, since the logic prevents it from being called on the active fee controller, and on a previously\n registered or migrated pool, it could even be permissionless. But since we already have other permissioned\n functions, it doesn't really cost anything to be permissioned, and that provides another layer of security.\n @param pool The address of the pool to be migrated"},"functionSelector":"0874327f","id":5563,"implemented":true,"kind":"function","modifiers":[{"id":5466,"kind":"modifierInvocation","modifierName":{"id":5465,"name":"authenticate","nameLocations":["23224:12:18"],"nodeType":"IdentifierPath","referencedDeclaration":2439,"src":"23224:12:18"},"nodeType":"ModifierInvocation","src":"23224:12:18"}],"name":"migratePool","nameLocation":"23189:11:18","nodeType":"FunctionDefinition","parameters":{"id":5464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5463,"mutability":"mutable","name":"pool","nameLocation":"23209:4:18","nodeType":"VariableDeclaration","scope":5563,"src":"23201:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5462,"name":"address","nodeType":"ElementaryTypeName","src":"23201:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"23200:14:18"},"returnParameters":{"id":5467,"nodeType":"ParameterList","parameters":[],"src":"23237:0:18"},"scope":6083,"src":"23180:1247:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[541],"body":{"id":5582,"nodeType":"Block","src":"24641:164:18","statements":[{"expression":{"id":5576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5574,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4492,"src":"24651:32:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5575,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5566,"src":"24686:28:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24651:63:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5577,"nodeType":"ExpressionStatement","src":"24651:63:18"},{"eventCall":{"arguments":[{"id":5579,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5566,"src":"24769:28:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5578,"name":"GlobalProtocolSwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":287,"src":"24730:38:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":5580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24730:68:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5581,"nodeType":"EmitStatement","src":"24725:73:18"}]},"documentation":{"id":5564,"nodeType":"StructuredDocumentation","src":"24433:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"8a3c5c69","id":5583,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":5569,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5566,"src":"24598:28:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":5570,"kind":"modifierInvocation","modifierName":{"id":5568,"name":"withValidSwapFee","nameLocations":["24581:16:18"],"nodeType":"IdentifierPath","referencedDeclaration":4566,"src":"24581:16:18"},"nodeType":"ModifierInvocation","src":"24581:46:18"},{"id":5572,"kind":"modifierInvocation","modifierName":{"id":5571,"name":"authenticate","nameLocations":["24628:12:18"],"nodeType":"IdentifierPath","referencedDeclaration":2439,"src":"24628:12:18"},"nodeType":"ModifierInvocation","src":"24628:12:18"}],"name":"setGlobalProtocolSwapFeePercentage","nameLocation":"24485:34:18","nodeType":"FunctionDefinition","parameters":{"id":5567,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5566,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"24537:28:18","nodeType":"VariableDeclaration","scope":5583,"src":"24529:36:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5565,"name":"uint256","nodeType":"ElementaryTypeName","src":"24529:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"24519:52:18"},"returnParameters":{"id":5573,"nodeType":"ParameterList","parameters":[],"src":"24641:0:18"},"scope":6083,"src":"24476:329:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[547],"body":{"id":5602,"nodeType":"Block","src":"25023:168:18","statements":[{"expression":{"id":5596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5594,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4494,"src":"25033:33:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5595,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5586,"src":"25069:29:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25033:65:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5597,"nodeType":"ExpressionStatement","src":"25033:65:18"},{"eventCall":{"arguments":[{"id":5599,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5586,"src":"25154:29:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5598,"name":"GlobalProtocolYieldFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":292,"src":"25114:39:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":5600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25114:70:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5601,"nodeType":"EmitStatement","src":"25109:75:18"}]},"documentation":{"id":5584,"nodeType":"StructuredDocumentation","src":"24811:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"a93df2a4","id":5603,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":5589,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5586,"src":"24979:29:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":5590,"kind":"modifierInvocation","modifierName":{"id":5588,"name":"withValidYieldFee","nameLocations":["24961:17:18"],"nodeType":"IdentifierPath","referencedDeclaration":4584,"src":"24961:17:18"},"nodeType":"ModifierInvocation","src":"24961:48:18"},{"id":5592,"kind":"modifierInvocation","modifierName":{"id":5591,"name":"authenticate","nameLocations":["25010:12:18"],"nodeType":"IdentifierPath","referencedDeclaration":2439,"src":"25010:12:18"},"nodeType":"ModifierInvocation","src":"25010:12:18"}],"name":"setGlobalProtocolYieldFeePercentage","nameLocation":"24863:35:18","nodeType":"FunctionDefinition","parameters":{"id":5587,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5586,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"24916:29:18","nodeType":"VariableDeclaration","scope":5603,"src":"24908:37:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5585,"name":"uint256","nodeType":"ElementaryTypeName","src":"24908:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"24898:53:18"},"returnParameters":{"id":5593,"nodeType":"ParameterList","parameters":[],"src":"25023:0:18"},"scope":6083,"src":"24854:337:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[555],"body":{"id":5625,"nodeType":"Block","src":"25442:87:18","statements":[{"expression":{"arguments":[{"id":5620,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5606,"src":"25481:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5621,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5608,"src":"25487:28:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":5622,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"25517:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5619,"name":"_updatePoolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6023,"src":"25452:28:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":5623,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25452:70:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5624,"nodeType":"ExpressionStatement","src":"25452:70:18"}]},"documentation":{"id":5604,"nodeType":"StructuredDocumentation","src":"25197:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"fd267f39","id":5626,"implemented":true,"kind":"function","modifiers":[{"id":5611,"kind":"modifierInvocation","modifierName":{"id":5610,"name":"authenticate","nameLocations":["25361:12:18"],"nodeType":"IdentifierPath","referencedDeclaration":2439,"src":"25361:12:18"},"nodeType":"ModifierInvocation","src":"25361:12:18"},{"arguments":[{"id":5613,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5608,"src":"25391:28:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":5614,"kind":"modifierInvocation","modifierName":{"id":5612,"name":"withValidSwapFee","nameLocations":["25374:16:18"],"nodeType":"IdentifierPath","referencedDeclaration":4566,"src":"25374:16:18"},"nodeType":"ModifierInvocation","src":"25374:46:18"},{"arguments":[{"id":5616,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5606,"src":"25436:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5617,"kind":"modifierInvocation","modifierName":{"id":5615,"name":"withLatestFees","nameLocations":["25421:14:18"],"nodeType":"IdentifierPath","referencedDeclaration":4608,"src":"25421:14:18"},"nodeType":"ModifierInvocation","src":"25421:20:18"}],"name":"setProtocolSwapFeePercentage","nameLocation":"25249:28:18","nodeType":"FunctionDefinition","parameters":{"id":5609,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5606,"mutability":"mutable","name":"pool","nameLocation":"25295:4:18","nodeType":"VariableDeclaration","scope":5626,"src":"25287:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5605,"name":"address","nodeType":"ElementaryTypeName","src":"25287:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5608,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"25317:28:18","nodeType":"VariableDeclaration","scope":5626,"src":"25309:36:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5607,"name":"uint256","nodeType":"ElementaryTypeName","src":"25309:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25277:74:18"},"returnParameters":{"id":5618,"nodeType":"ParameterList","parameters":[],"src":"25442:0:18"},"scope":6083,"src":"25240:289:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[563],"body":{"id":5648,"nodeType":"Block","src":"25784:89:18","statements":[{"expression":{"arguments":[{"id":5643,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5629,"src":"25824:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5644,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5631,"src":"25830:29:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":5645,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"25861:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5642,"name":"_updatePoolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6061,"src":"25794:29:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":5646,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25794:72:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5647,"nodeType":"ExpressionStatement","src":"25794:72:18"}]},"documentation":{"id":5627,"nodeType":"StructuredDocumentation","src":"25535:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"abaa3356","id":5649,"implemented":true,"kind":"function","modifiers":[{"id":5634,"kind":"modifierInvocation","modifierName":{"id":5633,"name":"authenticate","nameLocations":["25701:12:18"],"nodeType":"IdentifierPath","referencedDeclaration":2439,"src":"25701:12:18"},"nodeType":"ModifierInvocation","src":"25701:12:18"},{"arguments":[{"id":5636,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5631,"src":"25732:29:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":5637,"kind":"modifierInvocation","modifierName":{"id":5635,"name":"withValidYieldFee","nameLocations":["25714:17:18"],"nodeType":"IdentifierPath","referencedDeclaration":4584,"src":"25714:17:18"},"nodeType":"ModifierInvocation","src":"25714:48:18"},{"arguments":[{"id":5639,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5629,"src":"25778:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5640,"kind":"modifierInvocation","modifierName":{"id":5638,"name":"withLatestFees","nameLocations":["25763:14:18"],"nodeType":"IdentifierPath","referencedDeclaration":4608,"src":"25763:14:18"},"nodeType":"ModifierInvocation","src":"25763:20:18"}],"name":"setProtocolYieldFeePercentage","nameLocation":"25587:29:18","nodeType":"FunctionDefinition","parameters":{"id":5632,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5629,"mutability":"mutable","name":"pool","nameLocation":"25634:4:18","nodeType":"VariableDeclaration","scope":5649,"src":"25626:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5628,"name":"address","nodeType":"ElementaryTypeName","src":"25626:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5631,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"25656:29:18","nodeType":"VariableDeclaration","scope":5649,"src":"25648:37:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5630,"name":"uint256","nodeType":"ElementaryTypeName","src":"25648:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25616:75:18"},"returnParameters":{"id":5641,"nodeType":"ParameterList","parameters":[],"src":"25784:0:18"},"scope":6083,"src":"25578:295:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[571],"body":{"id":5673,"nodeType":"Block","src":"26143:103:18","statements":[{"expression":{"arguments":[{"id":5667,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5652,"src":"26182:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5668,"name":"poolCreatorSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5654,"src":"26188:28:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":5669,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4475,"src":"26218:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4475_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":5670,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"26234:4:18","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":4473,"src":"26218:20:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":5666,"name":"_setPoolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5761,"src":"26153:28:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_enum$_ProtocolFeeType_$4475_$returns$__$","typeString":"function (address,uint256,enum ProtocolFeeController.ProtocolFeeType)"}},"id":5671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26153:86:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5672,"nodeType":"ExpressionStatement","src":"26153:86:18"}]},"documentation":{"id":5650,"nodeType":"StructuredDocumentation","src":"25879:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"1377c16c","id":5674,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":5657,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5652,"src":"26062:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5658,"kind":"modifierInvocation","modifierName":{"id":5656,"name":"onlyPoolCreator","nameLocations":["26046:15:18"],"nodeType":"IdentifierPath","referencedDeclaration":4548,"src":"26046:15:18"},"nodeType":"ModifierInvocation","src":"26046:21:18"},{"arguments":[{"id":5660,"name":"poolCreatorSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5654,"src":"26092:28:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":5661,"kind":"modifierInvocation","modifierName":{"id":5659,"name":"withValidPoolCreatorFee","nameLocations":["26068:23:18"],"nodeType":"IdentifierPath","referencedDeclaration":4598,"src":"26068:23:18"},"nodeType":"ModifierInvocation","src":"26068:53:18"},{"arguments":[{"id":5663,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5652,"src":"26137:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5664,"kind":"modifierInvocation","modifierName":{"id":5662,"name":"withLatestFees","nameLocations":["26122:14:18"],"nodeType":"IdentifierPath","referencedDeclaration":4608,"src":"26122:14:18"},"nodeType":"ModifierInvocation","src":"26122:20:18"}],"name":"setPoolCreatorSwapFeePercentage","nameLocation":"25931:31:18","nodeType":"FunctionDefinition","parameters":{"id":5655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5652,"mutability":"mutable","name":"pool","nameLocation":"25980:4:18","nodeType":"VariableDeclaration","scope":5674,"src":"25972:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5651,"name":"address","nodeType":"ElementaryTypeName","src":"25972:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5654,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"26002:28:18","nodeType":"VariableDeclaration","scope":5674,"src":"25994:36:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5653,"name":"uint256","nodeType":"ElementaryTypeName","src":"25994:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25962:74:18"},"returnParameters":{"id":5665,"nodeType":"ParameterList","parameters":[],"src":"26143:0:18"},"scope":6083,"src":"25922:324:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[579],"body":{"id":5698,"nodeType":"Block","src":"26519:105:18","statements":[{"expression":{"arguments":[{"id":5692,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5677,"src":"26558:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5693,"name":"poolCreatorYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5679,"src":"26564:29:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":5694,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4475,"src":"26595:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4475_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":5695,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"26611:5:18","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":4474,"src":"26595:21:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":5691,"name":"_setPoolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5761,"src":"26529:28:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_enum$_ProtocolFeeType_$4475_$returns$__$","typeString":"function (address,uint256,enum ProtocolFeeController.ProtocolFeeType)"}},"id":5696,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26529:88:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5697,"nodeType":"ExpressionStatement","src":"26529:88:18"}]},"documentation":{"id":5675,"nodeType":"StructuredDocumentation","src":"26252:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"3af52712","id":5699,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":5682,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5677,"src":"26437:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5683,"kind":"modifierInvocation","modifierName":{"id":5681,"name":"onlyPoolCreator","nameLocations":["26421:15:18"],"nodeType":"IdentifierPath","referencedDeclaration":4548,"src":"26421:15:18"},"nodeType":"ModifierInvocation","src":"26421:21:18"},{"arguments":[{"id":5685,"name":"poolCreatorYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5679,"src":"26467:29:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":5686,"kind":"modifierInvocation","modifierName":{"id":5684,"name":"withValidPoolCreatorFee","nameLocations":["26443:23:18"],"nodeType":"IdentifierPath","referencedDeclaration":4598,"src":"26443:23:18"},"nodeType":"ModifierInvocation","src":"26443:54:18"},{"arguments":[{"id":5688,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5677,"src":"26513:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5689,"kind":"modifierInvocation","modifierName":{"id":5687,"name":"withLatestFees","nameLocations":["26498:14:18"],"nodeType":"IdentifierPath","referencedDeclaration":4608,"src":"26498:14:18"},"nodeType":"ModifierInvocation","src":"26498:20:18"}],"name":"setPoolCreatorYieldFeePercentage","nameLocation":"26304:32:18","nodeType":"FunctionDefinition","parameters":{"id":5680,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5677,"mutability":"mutable","name":"pool","nameLocation":"26354:4:18","nodeType":"VariableDeclaration","scope":5699,"src":"26346:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5676,"name":"address","nodeType":"ElementaryTypeName","src":"26346:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5679,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"26376:29:18","nodeType":"VariableDeclaration","scope":5699,"src":"26368:37:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5678,"name":"uint256","nodeType":"ElementaryTypeName","src":"26368:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26336:75:18"},"returnParameters":{"id":5690,"nodeType":"ParameterList","parameters":[],"src":"26519:0:18"},"scope":6083,"src":"26295:329:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":5760,"nodeType":"Block","src":"26780:900:18","statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":5712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5709,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5706,"src":"26876:7:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":5710,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4475,"src":"26887:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4475_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":5711,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"26903:4:18","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":4473,"src":"26887:20:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"26876:31:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5758,"nodeType":"Block","src":"27292:382:18","statements":[{"expression":{"id":5740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5736,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4516,"src":"27306:31:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5738,"indexExpression":{"id":5737,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5701,"src":"27338:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"27306:37:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5739,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5703,"src":"27346:24:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27306:64:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5741,"nodeType":"ExpressionStatement","src":"27306:64:18"},{"expression":{"arguments":[{"id":5745,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5701,"src":"27513:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":5747,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5701,"src":"27546:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":5748,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4475,"src":"27552:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4475_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":5749,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"27568:5:18","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":4474,"src":"27552:21:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":5746,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5266,"src":"27519:26:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$4475_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":5750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27519:55:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":5742,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"27472:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":5744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27479:33:18","memberName":"updateAggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":795,"src":"27472:40:18","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":5751,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27472:103:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5752,"nodeType":"ExpressionStatement","src":"27472:103:18"},{"eventCall":{"arguments":[{"id":5754,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5701,"src":"27632:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5755,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5703,"src":"27638:24:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5753,"name":"PoolCreatorYieldFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":320,"src":"27595:36:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":5756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27595:68:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5757,"nodeType":"EmitStatement","src":"27590:73:18"}]},"id":5759,"nodeType":"IfStatement","src":"26872:802:18","trueBody":{"id":5735,"nodeType":"Block","src":"26909:377:18","statements":[{"expression":{"id":5717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5713,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4512,"src":"26923:30:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5715,"indexExpression":{"id":5714,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5701,"src":"26954:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26923:36:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5716,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5703,"src":"26962:24:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26923:63:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5718,"nodeType":"ExpressionStatement","src":"26923:63:18"},{"expression":{"arguments":[{"id":5722,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5701,"src":"27127:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":5724,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5701,"src":"27160:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":5725,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4475,"src":"27166:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4475_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":5726,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"27182:4:18","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":4473,"src":"27166:20:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":5723,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5266,"src":"27133:26:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$4475_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":5727,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27133:54:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":5719,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"27087:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":5721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27094:32:18","memberName":"updateAggregateSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":787,"src":"27087:39:18","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":5728,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27087:101:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5729,"nodeType":"ExpressionStatement","src":"27087:101:18"},{"eventCall":{"arguments":[{"id":5731,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5701,"src":"27244:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5732,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5703,"src":"27250:24:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5730,"name":"PoolCreatorSwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":313,"src":"27208:35:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":5733,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27208:67:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5734,"nodeType":"EmitStatement","src":"27203:72:18"}]}}]},"id":5761,"implemented":true,"kind":"function","modifiers":[],"name":"_setPoolCreatorFeePercentage","nameLocation":"26639:28:18","nodeType":"FunctionDefinition","parameters":{"id":5707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5701,"mutability":"mutable","name":"pool","nameLocation":"26685:4:18","nodeType":"VariableDeclaration","scope":5761,"src":"26677:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5700,"name":"address","nodeType":"ElementaryTypeName","src":"26677:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5703,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"26707:24:18","nodeType":"VariableDeclaration","scope":5761,"src":"26699:32:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5702,"name":"uint256","nodeType":"ElementaryTypeName","src":"26699:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5706,"mutability":"mutable","name":"feeType","nameLocation":"26757:7:18","nodeType":"VariableDeclaration","scope":5761,"src":"26741:23:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"typeName":{"id":5705,"nodeType":"UserDefinedTypeName","pathNode":{"id":5704,"name":"ProtocolFeeType","nameLocations":["26741:15:18"],"nodeType":"IdentifierPath","referencedDeclaration":4475,"src":"26741:15:18"},"referencedDeclaration":4475,"src":"26741:15:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"visibility":"internal"}],"src":"26667:103:18"},"returnParameters":{"id":5708,"nodeType":"ParameterList","parameters":[],"src":"26780:0:18"},"scope":6083,"src":"26630:1050:18","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[587],"body":{"id":5807,"nodeType":"Block","src":"27814:258:18","statements":[{"assignments":[5775,5777],"declarations":[{"constant":false,"id":5775,"mutability":"mutable","name":"poolTokens","nameLocation":"27841:10:18","nodeType":"VariableDeclaration","scope":5807,"src":"27825:26:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":5773,"nodeType":"UserDefinedTypeName","pathNode":{"id":5772,"name":"IERC20","nameLocations":["27825:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"27825:6:18"},"referencedDeclaration":6486,"src":"27825:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":5774,"nodeType":"ArrayTypeName","src":"27825:8:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":5777,"mutability":"mutable","name":"numTokens","nameLocation":"27861:9:18","nodeType":"VariableDeclaration","scope":5807,"src":"27853:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5776,"name":"uint256","nodeType":"ElementaryTypeName","src":"27853:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5781,"initialValue":{"arguments":[{"id":5779,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5764,"src":"27897:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5778,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5356,"src":"27874:22:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":5780,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27874:28:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"27824:78:18"},{"body":{"id":5805,"nodeType":"Block","src":"27953:113:18","statements":[{"assignments":[5794],"declarations":[{"constant":false,"id":5794,"mutability":"mutable","name":"token","nameLocation":"27974:5:18","nodeType":"VariableDeclaration","scope":5805,"src":"27967:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":5793,"nodeType":"UserDefinedTypeName","pathNode":{"id":5792,"name":"IERC20","nameLocations":["27967:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"27967:6:18"},"referencedDeclaration":6486,"src":"27967:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"}],"id":5798,"initialValue":{"baseExpression":{"id":5795,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5775,"src":"27982:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":5797,"indexExpression":{"id":5796,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5783,"src":"27993:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27982:13:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"27967:28:18"},{"expression":{"arguments":[{"id":5800,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5764,"src":"28032:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5801,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5766,"src":"28038:9:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5802,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5794,"src":"28049:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}],"id":5799,"name":"_withdrawProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5881,"src":"28010:21:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$6486_$returns$__$","typeString":"function (address,address,contract IERC20)"}},"id":5803,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28010:45:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5804,"nodeType":"ExpressionStatement","src":"28010:45:18"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5786,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5783,"src":"27933:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5787,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5777,"src":"27937:9:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27933:13:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5806,"initializationExpression":{"assignments":[5783],"declarations":[{"constant":false,"id":5783,"mutability":"mutable","name":"i","nameLocation":"27926:1:18","nodeType":"VariableDeclaration","scope":5806,"src":"27918:9:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5782,"name":"uint256","nodeType":"ElementaryTypeName","src":"27918:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5785,"initialValue":{"hexValue":"30","id":5784,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27930:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"27918:13:18"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":5790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"27948:3:18","subExpression":{"id":5789,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5783,"src":"27950:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5791,"nodeType":"ExpressionStatement","src":"27948:3:18"},"nodeType":"ForStatement","src":"27913:153:18"}]},"documentation":{"id":5762,"nodeType":"StructuredDocumentation","src":"27686:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"cf7b287f","id":5808,"implemented":true,"kind":"function","modifiers":[{"id":5769,"kind":"modifierInvocation","modifierName":{"id":5768,"name":"authenticate","nameLocations":["27801:12:18"],"nodeType":"IdentifierPath","referencedDeclaration":2439,"src":"27801:12:18"},"nodeType":"ModifierInvocation","src":"27801:12:18"}],"name":"withdrawProtocolFees","nameLocation":"27738:20:18","nodeType":"FunctionDefinition","parameters":{"id":5767,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5764,"mutability":"mutable","name":"pool","nameLocation":"27767:4:18","nodeType":"VariableDeclaration","scope":5808,"src":"27759:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5763,"name":"address","nodeType":"ElementaryTypeName","src":"27759:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5766,"mutability":"mutable","name":"recipient","nameLocation":"27781:9:18","nodeType":"VariableDeclaration","scope":5808,"src":"27773:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5765,"name":"address","nodeType":"ElementaryTypeName","src":"27773:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"27758:33:18"},"returnParameters":{"id":5770,"nodeType":"ParameterList","parameters":[],"src":"27814:0:18"},"scope":6083,"src":"27729:343:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[598],"body":{"id":5834,"nodeType":"Block","src":"28228:217:18","statements":[{"expression":{"arguments":[{"id":5824,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5811,"src":"28371:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5825,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5816,"src":"28377:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}],"expression":{"id":5821,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"28331:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":5823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28338:32:18","memberName":"getPoolTokenCountAndIndexOfToken","nodeType":"MemberAccess","referencedDeclaration":2056,"src":"28331:39:18","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_contract$_IERC20_$6486_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,contract IERC20) view external returns (uint256,uint256)"}},"id":5826,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28331:52:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"id":5827,"nodeType":"ExpressionStatement","src":"28331:52:18"},{"expression":{"arguments":[{"id":5829,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5811,"src":"28415:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5830,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5813,"src":"28421:9:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5831,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5816,"src":"28432:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}],"id":5828,"name":"_withdrawProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5881,"src":"28393:21:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$6486_$returns$__$","typeString":"function (address,address,contract IERC20)"}},"id":5832,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28393:45:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5833,"nodeType":"ExpressionStatement","src":"28393:45:18"}]},"documentation":{"id":5809,"nodeType":"StructuredDocumentation","src":"28078:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"b53a70b2","id":5835,"implemented":true,"kind":"function","modifiers":[{"id":5819,"kind":"modifierInvocation","modifierName":{"id":5818,"name":"authenticate","nameLocations":["28215:12:18"],"nodeType":"IdentifierPath","referencedDeclaration":2439,"src":"28215:12:18"},"nodeType":"ModifierInvocation","src":"28215:12:18"}],"name":"withdrawProtocolFeesForToken","nameLocation":"28130:28:18","nodeType":"FunctionDefinition","parameters":{"id":5817,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5811,"mutability":"mutable","name":"pool","nameLocation":"28167:4:18","nodeType":"VariableDeclaration","scope":5835,"src":"28159:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5810,"name":"address","nodeType":"ElementaryTypeName","src":"28159:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5813,"mutability":"mutable","name":"recipient","nameLocation":"28181:9:18","nodeType":"VariableDeclaration","scope":5835,"src":"28173:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5812,"name":"address","nodeType":"ElementaryTypeName","src":"28173:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5816,"mutability":"mutable","name":"token","nameLocation":"28199:5:18","nodeType":"VariableDeclaration","scope":5835,"src":"28192:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":5815,"nodeType":"UserDefinedTypeName","pathNode":{"id":5814,"name":"IERC20","nameLocations":["28192:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"28192:6:18"},"referencedDeclaration":6486,"src":"28192:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"28158:47:18"},"returnParameters":{"id":5820,"nodeType":"ParameterList","parameters":[],"src":"28228:0:18"},"scope":6083,"src":"28121:324:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":5880,"nodeType":"Block","src":"28538:316:18","statements":[{"assignments":[5846],"declarations":[{"constant":false,"id":5846,"mutability":"mutable","name":"amountToWithdraw","nameLocation":"28556:16:18","nodeType":"VariableDeclaration","scope":5880,"src":"28548:24:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5845,"name":"uint256","nodeType":"ElementaryTypeName","src":"28548:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5852,"initialValue":{"baseExpression":{"baseExpression":{"id":5847,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4523,"src":"28575:19:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":5849,"indexExpression":{"id":5848,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5837,"src":"28595:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28575:25:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":5851,"indexExpression":{"id":5850,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5842,"src":"28601:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28575:32:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"28548:59:18"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5853,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5846,"src":"28621:16:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":5854,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28640:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"28621:20:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5879,"nodeType":"IfStatement","src":"28617:231:18","trueBody":{"id":5878,"nodeType":"Block","src":"28643:205:18","statements":[{"expression":{"id":5862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":5856,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4523,"src":"28657:19:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":5859,"indexExpression":{"id":5857,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5837,"src":"28677:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28657:25:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":5860,"indexExpression":{"id":5858,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5842,"src":"28683:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"28657:32:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":5861,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28692:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"28657:36:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5863,"nodeType":"ExpressionStatement","src":"28657:36:18"},{"expression":{"arguments":[{"id":5867,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5839,"src":"28726:9:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5868,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5846,"src":"28737:16:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":5864,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5842,"src":"28707:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":5866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28713:12:18","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":6598,"src":"28707:18:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6486_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$6486_$","typeString":"function (contract IERC20,address,uint256)"}},"id":5869,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28707:47:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5870,"nodeType":"ExpressionStatement","src":"28707:47:18"},{"eventCall":{"arguments":[{"id":5872,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5837,"src":"28796:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5873,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5842,"src":"28802:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},{"id":5874,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5839,"src":"28809:9:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5875,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5846,"src":"28820:16:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5871,"name":"ProtocolFeesWithdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":352,"src":"28774:21:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$6486_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,address,uint256)"}},"id":5876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28774:63:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5877,"nodeType":"EmitStatement","src":"28769:68:18"}]}}]},"id":5881,"implemented":true,"kind":"function","modifiers":[],"name":"_withdrawProtocolFees","nameLocation":"28460:21:18","nodeType":"FunctionDefinition","parameters":{"id":5843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5837,"mutability":"mutable","name":"pool","nameLocation":"28490:4:18","nodeType":"VariableDeclaration","scope":5881,"src":"28482:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5836,"name":"address","nodeType":"ElementaryTypeName","src":"28482:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5839,"mutability":"mutable","name":"recipient","nameLocation":"28504:9:18","nodeType":"VariableDeclaration","scope":5881,"src":"28496:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5838,"name":"address","nodeType":"ElementaryTypeName","src":"28496:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5842,"mutability":"mutable","name":"token","nameLocation":"28522:5:18","nodeType":"VariableDeclaration","scope":5881,"src":"28515:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":5841,"nodeType":"UserDefinedTypeName","pathNode":{"id":5840,"name":"IERC20","nameLocations":["28515:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"28515:6:18"},"referencedDeclaration":6486,"src":"28515:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"28481:47:18"},"returnParameters":{"id":5844,"nodeType":"ParameterList","parameters":[],"src":"28538:0:18"},"scope":6083,"src":"28451:403:18","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[606],"body":{"id":5897,"nodeType":"Block","src":"29000:58:18","statements":[{"expression":{"arguments":[{"id":5893,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5884,"src":"29035:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5894,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5886,"src":"29041:9:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":5892,"name":"_withdrawPoolCreatorFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5985,"src":"29010:24:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":5895,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29010:41:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5896,"nodeType":"ExpressionStatement","src":"29010:41:18"}]},"documentation":{"id":5882,"nodeType":"StructuredDocumentation","src":"28860:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"f7061445","id":5898,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":5889,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5884,"src":"28994:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5890,"kind":"modifierInvocation","modifierName":{"id":5888,"name":"onlyPoolCreator","nameLocations":["28978:15:18"],"nodeType":"IdentifierPath","referencedDeclaration":4548,"src":"28978:15:18"},"nodeType":"ModifierInvocation","src":"28978:21:18"}],"name":"withdrawPoolCreatorFees","nameLocation":"28912:23:18","nodeType":"FunctionDefinition","parameters":{"id":5887,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5884,"mutability":"mutable","name":"pool","nameLocation":"28944:4:18","nodeType":"VariableDeclaration","scope":5898,"src":"28936:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5883,"name":"address","nodeType":"ElementaryTypeName","src":"28936:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5886,"mutability":"mutable","name":"recipient","nameLocation":"28958:9:18","nodeType":"VariableDeclaration","scope":5898,"src":"28950:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5885,"name":"address","nodeType":"ElementaryTypeName","src":"28950:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"28935:33:18"},"returnParameters":{"id":5891,"nodeType":"ParameterList","parameters":[],"src":"29000:0:18"},"scope":6083,"src":"28903:155:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[612],"body":{"id":5911,"nodeType":"Block","src":"29163:70:18","statements":[{"expression":{"arguments":[{"id":5905,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5901,"src":"29198:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":5907,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5901,"src":"29220:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5906,"name":"_getPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5375,"src":"29204:15:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_address_$","typeString":"function (address) view returns (address)"}},"id":5908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29204:21:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":5904,"name":"_withdrawPoolCreatorFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5985,"src":"29173:24:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":5909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29173:53:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5910,"nodeType":"ExpressionStatement","src":"29173:53:18"}]},"documentation":{"id":5899,"nodeType":"StructuredDocumentation","src":"29064:38:18","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"52f125f0","id":5912,"implemented":true,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"29116:23:18","nodeType":"FunctionDefinition","parameters":{"id":5902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5901,"mutability":"mutable","name":"pool","nameLocation":"29148:4:18","nodeType":"VariableDeclaration","scope":5912,"src":"29140:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5900,"name":"address","nodeType":"ElementaryTypeName","src":"29140:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"29139:14:18"},"returnParameters":{"id":5903,"nodeType":"ParameterList","parameters":[],"src":"29163:0:18"},"scope":6083,"src":"29107:126:18","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":5984,"nodeType":"Block","src":"29314:541:18","statements":[{"assignments":[5923,5925],"declarations":[{"constant":false,"id":5923,"mutability":"mutable","name":"poolTokens","nameLocation":"29341:10:18","nodeType":"VariableDeclaration","scope":5984,"src":"29325:26:18","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":5921,"nodeType":"UserDefinedTypeName","pathNode":{"id":5920,"name":"IERC20","nameLocations":["29325:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"29325:6:18"},"referencedDeclaration":6486,"src":"29325:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":5922,"nodeType":"ArrayTypeName","src":"29325:8:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":5925,"mutability":"mutable","name":"numTokens","nameLocation":"29361:9:18","nodeType":"VariableDeclaration","scope":5984,"src":"29353:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5924,"name":"uint256","nodeType":"ElementaryTypeName","src":"29353:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5929,"initialValue":{"arguments":[{"id":5927,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5914,"src":"29397:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5926,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5356,"src":"29374:22:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":5928,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29374:28:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"29324:78:18"},{"body":{"id":5982,"nodeType":"Block","src":"29453:396:18","statements":[{"assignments":[5942],"declarations":[{"constant":false,"id":5942,"mutability":"mutable","name":"token","nameLocation":"29474:5:18","nodeType":"VariableDeclaration","scope":5982,"src":"29467:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":5941,"nodeType":"UserDefinedTypeName","pathNode":{"id":5940,"name":"IERC20","nameLocations":["29467:6:18"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"29467:6:18"},"referencedDeclaration":6486,"src":"29467:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"}],"id":5946,"initialValue":{"baseExpression":{"id":5943,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5923,"src":"29482:10:18","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6486_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":5945,"indexExpression":{"id":5944,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5931,"src":"29493:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29482:13:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"29467:28:18"},{"assignments":[5948],"declarations":[{"constant":false,"id":5948,"mutability":"mutable","name":"amountToWithdraw","nameLocation":"29518:16:18","nodeType":"VariableDeclaration","scope":5982,"src":"29510:24:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5947,"name":"uint256","nodeType":"ElementaryTypeName","src":"29510:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5954,"initialValue":{"baseExpression":{"baseExpression":{"id":5949,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4530,"src":"29537:22:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":5951,"indexExpression":{"id":5950,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5914,"src":"29560:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29537:28:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":5953,"indexExpression":{"id":5952,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5942,"src":"29566:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29537:35:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"29510:62:18"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5955,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5948,"src":"29590:16:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":5956,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29609:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"29590:20:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5981,"nodeType":"IfStatement","src":"29586:253:18","trueBody":{"id":5980,"nodeType":"Block","src":"29612:227:18","statements":[{"expression":{"id":5964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":5958,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4530,"src":"29630:22:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":5961,"indexExpression":{"id":5959,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5914,"src":"29653:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29630:28:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6486_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":5962,"indexExpression":{"id":5960,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5942,"src":"29659:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"29630:35:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":5963,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29668:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"29630:39:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5965,"nodeType":"ExpressionStatement","src":"29630:39:18"},{"expression":{"arguments":[{"id":5969,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5916,"src":"29706:9:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5970,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5948,"src":"29717:16:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":5966,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5942,"src":"29687:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":5968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29693:12:18","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":6598,"src":"29687:18:18","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6486_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$6486_$","typeString":"function (contract IERC20,address,uint256)"}},"id":5971,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29687:47:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5972,"nodeType":"ExpressionStatement","src":"29687:47:18"},{"eventCall":{"arguments":[{"id":5974,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5914,"src":"29783:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5975,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5942,"src":"29789:5:18","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},{"id":5976,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5916,"src":"29796:9:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5977,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5948,"src":"29807:16:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5973,"name":"PoolCreatorFeesWithdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":364,"src":"29758:24:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$6486_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,address,uint256)"}},"id":5978,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29758:66:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5979,"nodeType":"EmitStatement","src":"29753:71:18"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5934,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5931,"src":"29433:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5935,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5925,"src":"29437:9:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29433:13:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5983,"initializationExpression":{"assignments":[5931],"declarations":[{"constant":false,"id":5931,"mutability":"mutable","name":"i","nameLocation":"29426:1:18","nodeType":"VariableDeclaration","scope":5983,"src":"29418:9:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5930,"name":"uint256","nodeType":"ElementaryTypeName","src":"29418:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5933,"initialValue":{"hexValue":"30","id":5932,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29430:1:18","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"29418:13:18"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":5938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"29448:3:18","subExpression":{"id":5937,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5931,"src":"29450:1:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5939,"nodeType":"ExpressionStatement","src":"29448:3:18"},"nodeType":"ForStatement","src":"29413:436:18"}]},"id":5985,"implemented":true,"kind":"function","modifiers":[],"name":"_withdrawPoolCreatorFees","nameLocation":"29248:24:18","nodeType":"FunctionDefinition","parameters":{"id":5917,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5914,"mutability":"mutable","name":"pool","nameLocation":"29281:4:18","nodeType":"VariableDeclaration","scope":5985,"src":"29273:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5913,"name":"address","nodeType":"ElementaryTypeName","src":"29273:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5916,"mutability":"mutable","name":"recipient","nameLocation":"29295:9:18","nodeType":"VariableDeclaration","scope":5985,"src":"29287:17:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5915,"name":"address","nodeType":"ElementaryTypeName","src":"29287:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"29272:33:18"},"returnParameters":{"id":5918,"nodeType":"ParameterList","parameters":[],"src":"29314:0:18"},"scope":6083,"src":"29239:616:18","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":6022,"nodeType":"Block","src":"30095:771:18","statements":[{"expression":{"id":6004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5995,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4503,"src":"30410:31:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5997,"indexExpression":{"id":5996,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5988,"src":"30442:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"30410:37:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5999,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5990,"src":"30493:28:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30522:8:18","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":7790,"src":"30493:37:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":6001,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30493:39:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":6002,"name":"isOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5992,"src":"30558:10:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5998,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4481,"src":"30450:13:18","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$4481_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":6003,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["30478:13:18","30546:10:18"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"30450:129:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"30410:169:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":6005,"nodeType":"ExpressionStatement","src":"30410:169:18"},{"expression":{"arguments":[{"id":6009,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5988,"src":"30714:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":6011,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5988,"src":"30747:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":6012,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4475,"src":"30753:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4475_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":6013,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"30769:4:18","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":4473,"src":"30753:20:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":6010,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5266,"src":"30720:26:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$4475_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":6014,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30720:54:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6006,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"30674:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":6008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30681:32:18","memberName":"updateAggregateSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":787,"src":"30674:39:18","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":6015,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30674:101:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6016,"nodeType":"ExpressionStatement","src":"30674:101:18"},{"eventCall":{"arguments":[{"id":6018,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5988,"src":"30824:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6019,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5990,"src":"30830:28:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6017,"name":"ProtocolSwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":299,"src":"30791:32:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":6020,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30791:68:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6021,"nodeType":"EmitStatement","src":"30786:73:18"}]},"documentation":{"id":5986,"nodeType":"StructuredDocumentation","src":"29861:114:18","text":"@dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage."},"id":6023,"implemented":true,"kind":"function","modifiers":[],"name":"_updatePoolSwapFeePercentage","nameLocation":"29989:28:18","nodeType":"FunctionDefinition","parameters":{"id":5993,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5988,"mutability":"mutable","name":"pool","nameLocation":"30026:4:18","nodeType":"VariableDeclaration","scope":6023,"src":"30018:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5987,"name":"address","nodeType":"ElementaryTypeName","src":"30018:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5990,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"30040:28:18","nodeType":"VariableDeclaration","scope":6023,"src":"30032:36:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5989,"name":"uint256","nodeType":"ElementaryTypeName","src":"30032:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5992,"mutability":"mutable","name":"isOverride","nameLocation":"30075:10:18","nodeType":"VariableDeclaration","scope":6023,"src":"30070:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5991,"name":"bool","nodeType":"ElementaryTypeName","src":"30070:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"30017:69:18"},"returnParameters":{"id":5994,"nodeType":"ParameterList","parameters":[],"src":"30095:0:18"},"scope":6083,"src":"29980:886:18","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":6060,"nodeType":"Block","src":"31138:767:18","statements":[{"expression":{"id":6042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6033,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4508,"src":"31442:32:18","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4481_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":6035,"indexExpression":{"id":6034,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6026,"src":"31475:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"31442:38:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6037,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6028,"src":"31526:29:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31556:8:18","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":7790,"src":"31526:38:18","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":6039,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31526:40:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":6040,"name":"isOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6030,"src":"31592:10:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":6036,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4481,"src":"31483:13:18","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$4481_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":6041,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["31511:13:18","31580:10:18"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"31483:130:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"31442:171:18","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4481_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":6043,"nodeType":"ExpressionStatement","src":"31442:171:18"},{"expression":{"arguments":[{"id":6047,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6026,"src":"31750:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":6049,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6026,"src":"31783:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":6050,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4475,"src":"31789:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4475_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":6051,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"31805:5:18","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":4474,"src":"31789:21:18","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$4475","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":6048,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5266,"src":"31756:26:18","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$4475_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":6052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31756:55:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6044,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"31709:6:18","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":6046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31716:33:18","memberName":"updateAggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":795,"src":"31709:40:18","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":6053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31709:103:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6054,"nodeType":"ExpressionStatement","src":"31709:103:18"},{"eventCall":{"arguments":[{"id":6056,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6026,"src":"31862:4:18","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6057,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6028,"src":"31868:29:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6055,"name":"ProtocolYieldFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":306,"src":"31828:33:18","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":6058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31828:70:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6059,"nodeType":"EmitStatement","src":"31823:75:18"}]},"documentation":{"id":6024,"nodeType":"StructuredDocumentation","src":"30872:114:18","text":"@dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage."},"id":6061,"implemented":true,"kind":"function","modifiers":[],"name":"_updatePoolYieldFeePercentage","nameLocation":"31000:29:18","nodeType":"FunctionDefinition","parameters":{"id":6031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6026,"mutability":"mutable","name":"pool","nameLocation":"31047:4:18","nodeType":"VariableDeclaration","scope":6061,"src":"31039:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6025,"name":"address","nodeType":"ElementaryTypeName","src":"31039:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6028,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"31069:29:18","nodeType":"VariableDeclaration","scope":6061,"src":"31061:37:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6027,"name":"uint256","nodeType":"ElementaryTypeName","src":"31061:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6030,"mutability":"mutable","name":"isOverride","nameLocation":"31113:10:18","nodeType":"VariableDeclaration","scope":6061,"src":"31108:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6029,"name":"bool","nodeType":"ElementaryTypeName","src":"31108:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"31029:100:18"},"returnParameters":{"id":6032,"nodeType":"ParameterList","parameters":[],"src":"31138:0:18"},"scope":6083,"src":"30991:914:18","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":6081,"nodeType":"Block","src":"31978:682:18","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6066,"name":"feePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6063,"src":"32513:13:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6067,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2408,"src":"32529:18:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32513:34:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6069,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"32512:36:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6070,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2408,"src":"32551:18:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32512:57:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":6072,"name":"feePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6063,"src":"32573:13:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32512:74:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6080,"nodeType":"IfStatement","src":"32508:146:18","trueBody":{"id":6079,"nodeType":"Block","src":"32588:66:18","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6074,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1308,"src":"32609:12:18","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1308_$","typeString":"type(contract IVaultErrors)"}},"id":6076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32622:19:18","memberName":"FeePrecisionTooHigh","nodeType":"MemberAccess","referencedDeclaration":1156,"src":"32609:32:18","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32609:34:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6078,"nodeType":"RevertStatement","src":"32602:41:18"}]}}]},"id":6082,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureValidPrecision","nameLocation":"31920:21:18","nodeType":"FunctionDefinition","parameters":{"id":6064,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6063,"mutability":"mutable","name":"feePercentage","nameLocation":"31950:13:18","nodeType":"VariableDeclaration","scope":6082,"src":"31942:21:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6062,"name":"uint256","nodeType":"ElementaryTypeName","src":"31942:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31941:23:18"},"returnParameters":{"id":6065,"nodeType":"ParameterList","parameters":[],"src":"31978:0:18"},"scope":6083,"src":"31911:749:18","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":6084,"src":"3120:29542:18","usedErrors":[38,394,397,402,409,412,1156,1180,2499,4159,4535,4538,6565,6846,6851,6854,7101],"usedEvents":[287,292,299,306,313,320,330,340,352,364,373,382,391]}],"src":"46:32617:18"},"id":18},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","exportedSymbols":{"Authentication":[2491],"IAuthorizer":[73],"IVault":[651],"SingletonAuthentication":[6189]},"id":6190,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6085,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:19"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":6087,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6190,"sourceUnit":74,"src":"72:91:19","symbolAliases":[{"foreign":{"id":6086,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73,"src":"81:11:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":6089,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6190,"sourceUnit":652,"src":"164:81:19","symbolAliases":[{"foreign":{"id":6088,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":651,"src":"173:6:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","id":6091,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6190,"sourceUnit":2492,"src":"247:103:19","symbolAliases":[{"foreign":{"id":6090,"name":"Authentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2491,"src":"256:14:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":6093,"name":"Authentication","nameLocations":["772:14:19"],"nodeType":"IdentifierPath","referencedDeclaration":2491,"src":"772:14:19"},"id":6094,"nodeType":"InheritanceSpecifier","src":"772:14:19"}],"canonicalName":"SingletonAuthentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":6092,"nodeType":"StructuredDocumentation","src":"352:374:19","text":" @notice Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\n @dev The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned\n functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same\n function name."},"fullyImplemented":true,"id":6189,"linearizedBaseContracts":[6189,2491,47],"name":"SingletonAuthentication","nameLocation":"745:23:19","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":6097,"mutability":"immutable","name":"_vault","nameLocation":"818:6:19","nodeType":"VariableDeclaration","scope":6189,"src":"793:31:19","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":6096,"nodeType":"UserDefinedTypeName","pathNode":{"id":6095,"name":"IVault","nameLocations":["793:6:19"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"793:6:19"},"referencedDeclaration":651,"src":"793:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"private"},{"body":{"id":6122,"nodeType":"Block","src":"988:31:19","statements":[{"expression":{"id":6120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6118,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6097,"src":"998:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6119,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6100,"src":"1007:5:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"src":"998:14:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":6121,"nodeType":"ExpressionStatement","src":"998:14:19"}]},"id":6123,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"id":6111,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"978:4:19","typeDescriptions":{"typeIdentifier":"t_contract$_SingletonAuthentication_$6189","typeString":"contract SingletonAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SingletonAuthentication_$6189","typeString":"contract SingletonAuthentication"}],"id":6110,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"970:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6109,"name":"address","nodeType":"ElementaryTypeName","src":"970:7:19","typeDescriptions":{}}},"id":6112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"970:13:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6108,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"962:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":6107,"name":"uint160","nodeType":"ElementaryTypeName","src":"962:7:19","typeDescriptions":{}}},"id":6113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"962:22:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":6106,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"954:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":6105,"name":"uint256","nodeType":"ElementaryTypeName","src":"954:7:19","typeDescriptions":{}}},"id":6114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"954:31:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6104,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"946:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":6103,"name":"bytes32","nodeType":"ElementaryTypeName","src":"946:7:19","typeDescriptions":{}}},"id":6115,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"946:40:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":6116,"kind":"baseConstructorSpecifier","modifierName":{"id":6102,"name":"Authentication","nameLocations":["931:14:19"],"nodeType":"IdentifierPath","referencedDeclaration":2491,"src":"931:14:19"},"nodeType":"ModifierInvocation","src":"931:56:19"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":6101,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6100,"mutability":"mutable","name":"vault","nameLocation":"924:5:19","nodeType":"VariableDeclaration","scope":6123,"src":"917:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":6099,"nodeType":"UserDefinedTypeName","pathNode":{"id":6098,"name":"IVault","nameLocations":["917:6:19"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"917:6:19"},"referencedDeclaration":651,"src":"917:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"}],"src":"916:14:19"},"returnParameters":{"id":6117,"nodeType":"ParameterList","parameters":[],"src":"988:0:19"},"scope":6189,"src":"905:114:19","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6132,"nodeType":"Block","src":"1199:30:19","statements":[{"expression":{"id":6130,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6097,"src":"1216:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"functionReturnParameters":6129,"id":6131,"nodeType":"Return","src":"1209:13:19"}]},"documentation":{"id":6124,"nodeType":"StructuredDocumentation","src":"1025:120:19","text":" @notice Get the address of the Balancer Vault.\n @return vault An interface pointer to the Vault"},"functionSelector":"8d928af8","id":6133,"implemented":true,"kind":"function","modifiers":[],"name":"getVault","nameLocation":"1159:8:19","nodeType":"FunctionDefinition","parameters":{"id":6125,"nodeType":"ParameterList","parameters":[],"src":"1167:2:19"},"returnParameters":{"id":6129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6128,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6133,"src":"1191:6:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":6127,"nodeType":"UserDefinedTypeName","pathNode":{"id":6126,"name":"IVault","nameLocations":["1191:6:19"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"1191:6:19"},"referencedDeclaration":651,"src":"1191:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1190:8:19"},"scope":6189,"src":"1150:79:19","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":6145,"nodeType":"Block","src":"1425:50:19","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6140,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6133,"src":"1442:8:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$651_$","typeString":"function () view returns (contract IVault)"}},"id":6141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1442:10:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":6142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1453:13:19","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":1965,"src":"1442:24:19","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$73_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":6143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1442:26:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"}},"functionReturnParameters":6139,"id":6144,"nodeType":"Return","src":"1435:33:19"}]},"documentation":{"id":6134,"nodeType":"StructuredDocumentation","src":"1235:126:19","text":" @notice Get the address of the Authorizer.\n @return authorizer An interface pointer to the Authorizer"},"functionSelector":"aaabadc5","id":6146,"implemented":true,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"1375:13:19","nodeType":"FunctionDefinition","parameters":{"id":6135,"nodeType":"ParameterList","parameters":[],"src":"1388:2:19"},"returnParameters":{"id":6139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6138,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6146,"src":"1412:11:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"},"typeName":{"id":6137,"nodeType":"UserDefinedTypeName","pathNode":{"id":6136,"name":"IAuthorizer","nameLocations":["1412:11:19"],"nodeType":"IdentifierPath","referencedDeclaration":73,"src":"1412:11:19"},"referencedDeclaration":73,"src":"1412:11:19","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"1411:13:19"},"scope":6189,"src":"1366:109:19","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[2490],"body":{"id":6167,"nodeType":"Block","src":"1575:84:19","statements":[{"expression":{"arguments":[{"id":6159,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6148,"src":"1619:8:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":6160,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6150,"src":"1629:7:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":6163,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1646:4:19","typeDescriptions":{"typeIdentifier":"t_contract$_SingletonAuthentication_$6189","typeString":"contract SingletonAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SingletonAuthentication_$6189","typeString":"contract SingletonAuthentication"}],"id":6162,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1638:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6161,"name":"address","nodeType":"ElementaryTypeName","src":"1638:7:19","typeDescriptions":{}}},"id":6164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1638:13:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6156,"name":"getAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6146,"src":"1592:13:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IAuthorizer_$73_$","typeString":"function () view returns (contract IAuthorizer)"}},"id":6157,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1592:15:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"}},"id":6158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1608:10:19","memberName":"canPerform","nodeType":"MemberAccess","referencedDeclaration":72,"src":"1592:26:19","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view external returns (bool)"}},"id":6165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1592:60:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":6155,"id":6166,"nodeType":"Return","src":"1585:67:19"}]},"id":6168,"implemented":true,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"1490:11:19","nodeType":"FunctionDefinition","overrides":{"id":6152,"nodeType":"OverrideSpecifier","overrides":[],"src":"1551:8:19"},"parameters":{"id":6151,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6148,"mutability":"mutable","name":"actionId","nameLocation":"1510:8:19","nodeType":"VariableDeclaration","scope":6168,"src":"1502:16:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6147,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1502:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6150,"mutability":"mutable","name":"account","nameLocation":"1528:7:19","nodeType":"VariableDeclaration","scope":6168,"src":"1520:15:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6149,"name":"address","nodeType":"ElementaryTypeName","src":"1520:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1501:35:19"},"returnParameters":{"id":6155,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6154,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6168,"src":"1569:4:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6153,"name":"bool","nodeType":"ElementaryTypeName","src":"1569:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1568:6:19"},"scope":6189,"src":"1481:178:19","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6187,"nodeType":"Block","src":"1765:76:19","statements":[{"expression":{"arguments":[{"id":6182,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6170,"src":"1809:8:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":6183,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6172,"src":"1819:7:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6184,"name":"where","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6174,"src":"1828:5:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6179,"name":"getAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6146,"src":"1782:13:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IAuthorizer_$73_$","typeString":"function () view returns (contract IAuthorizer)"}},"id":6180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1782:15:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"}},"id":6181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1798:10:19","memberName":"canPerform","nodeType":"MemberAccess","referencedDeclaration":72,"src":"1782:26:19","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view external returns (bool)"}},"id":6185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1782:52:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":6178,"id":6186,"nodeType":"Return","src":"1775:59:19"}]},"id":6188,"implemented":true,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"1674:11:19","nodeType":"FunctionDefinition","parameters":{"id":6175,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6170,"mutability":"mutable","name":"actionId","nameLocation":"1694:8:19","nodeType":"VariableDeclaration","scope":6188,"src":"1686:16:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6169,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1686:7:19","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6172,"mutability":"mutable","name":"account","nameLocation":"1712:7:19","nodeType":"VariableDeclaration","scope":6188,"src":"1704:15:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6171,"name":"address","nodeType":"ElementaryTypeName","src":"1704:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6174,"mutability":"mutable","name":"where","nameLocation":"1729:5:19","nodeType":"VariableDeclaration","scope":6188,"src":"1721:13:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6173,"name":"address","nodeType":"ElementaryTypeName","src":"1721:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1685:50:19"},"returnParameters":{"id":6178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6177,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6188,"src":"1759:4:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6176,"name":"bool","nodeType":"ElementaryTypeName","src":"1759:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1758:6:19"},"scope":6189,"src":"1665:176:19","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":6190,"src":"727:1116:19","usedErrors":[38],"usedEvents":[]}],"src":"46:1798:19"},"id":19},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","exportedSymbols":{"IVault":[651],"IVaultErrors":[1308],"VaultGuard":[6238]},"id":6239,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6191,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:20"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":6193,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6239,"sourceUnit":1309,"src":"72:93:20","symbolAliases":[{"foreign":{"id":6192,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1308,"src":"81:12:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":6195,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6239,"sourceUnit":652,"src":"166:81:20","symbolAliases":[{"foreign":{"id":6194,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":651,"src":"175:6:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"VaultGuard","contractDependencies":[],"contractKind":"contract","documentation":{"id":6196,"nodeType":"StructuredDocumentation","src":"249:59:20","text":"@notice Contract that shares the modifier `onlyVault`."},"fullyImplemented":true,"id":6238,"linearizedBaseContracts":[6238],"name":"VaultGuard","nameLocation":"317:10:20","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":6199,"mutability":"immutable","name":"_vault","nameLocation":"360:6:20","nodeType":"VariableDeclaration","scope":6238,"src":"334:32:20","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":6198,"nodeType":"UserDefinedTypeName","pathNode":{"id":6197,"name":"IVault","nameLocations":["334:6:20"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"334:6:20"},"referencedDeclaration":651,"src":"334:6:20","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"},{"body":{"id":6209,"nodeType":"Block","src":"399:31:20","statements":[{"expression":{"id":6207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6205,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"409:6:20","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6206,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6202,"src":"418:5:20","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"src":"409:14:20","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":6208,"nodeType":"ExpressionStatement","src":"409:14:20"}]},"id":6210,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":6203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6202,"mutability":"mutable","name":"vault","nameLocation":"392:5:20","nodeType":"VariableDeclaration","scope":6210,"src":"385:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":6201,"nodeType":"UserDefinedTypeName","pathNode":{"id":6200,"name":"IVault","nameLocations":["385:6:20"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"385:6:20"},"referencedDeclaration":651,"src":"385:6:20","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"}],"src":"384:14:20"},"returnParameters":{"id":6204,"nodeType":"ParameterList","parameters":[],"src":"399:0:20"},"scope":6238,"src":"373:57:20","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":6216,"nodeType":"Block","src":"457:46:20","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6212,"name":"_ensureOnlyVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6237,"src":"467:16:20","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":6213,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"467:18:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6214,"nodeType":"ExpressionStatement","src":"467:18:20"},{"id":6215,"nodeType":"PlaceholderStatement","src":"495:1:20"}]},"id":6217,"name":"onlyVault","nameLocation":"445:9:20","nodeType":"ModifierDefinition","parameters":{"id":6211,"nodeType":"ParameterList","parameters":[],"src":"454:2:20"},"src":"436:67:20","virtual":false,"visibility":"internal"},{"body":{"id":6236,"nodeType":"Block","src":"550:124:20","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6220,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"564:3:20","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"568:6:20","memberName":"sender","nodeType":"MemberAccess","src":"564:10:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":6224,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6199,"src":"586:6:20","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}],"id":6223,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"578:7:20","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6222,"name":"address","nodeType":"ElementaryTypeName","src":"578:7:20","typeDescriptions":{}}},"id":6225,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"578:15:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"564:29:20","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6235,"nodeType":"IfStatement","src":"560:108:20","trueBody":{"id":6234,"nodeType":"Block","src":"595:73:20","statements":[{"errorCall":{"arguments":[{"expression":{"id":6230,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"646:3:20","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"650:6:20","memberName":"sender","nodeType":"MemberAccess","src":"646:10:20","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6227,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1308,"src":"616:12:20","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1308_$","typeString":"type(contract IVaultErrors)"}},"id":6229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"629:16:20","memberName":"SenderIsNotVault","nodeType":"MemberAccess","referencedDeclaration":1180,"src":"616:29:20","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":6232,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"616:41:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6233,"nodeType":"RevertStatement","src":"609:48:20"}]}}]},"id":6237,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureOnlyVault","nameLocation":"518:16:20","nodeType":"FunctionDefinition","parameters":{"id":6218,"nodeType":"ParameterList","parameters":[],"src":"534:2:20"},"returnParameters":{"id":6219,"nodeType":"ParameterList","parameters":[],"src":"550:0:20"},"scope":6238,"src":"509:165:20","stateMutability":"view","virtual":false,"visibility":"private"}],"scope":6239,"src":"308:368:20","usedErrors":[],"usedEvents":[]}],"src":"46:631:20"},"id":20},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","exportedSymbols":{"IERC20":[6486],"IERC20Metadata":[6512],"IERC4626":[6408]},"id":6409,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6240,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"107:24:21"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../token/ERC20/IERC20.sol","id":6242,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6409,"sourceUnit":6487,"src":"133:49:21","symbolAliases":[{"foreign":{"id":6241,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6486,"src":"141:6:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"../token/ERC20/extensions/IERC20Metadata.sol","id":6244,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6409,"sourceUnit":6513,"src":"183:76:21","symbolAliases":[{"foreign":{"id":6243,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6512,"src":"191:14:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6246,"name":"IERC20","nameLocations":["420:6:21"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"420:6:21"},"id":6247,"nodeType":"InheritanceSpecifier","src":"420:6:21"},{"baseName":{"id":6248,"name":"IERC20Metadata","nameLocations":["428:14:21"],"nodeType":"IdentifierPath","referencedDeclaration":6512,"src":"428:14:21"},"id":6249,"nodeType":"InheritanceSpecifier","src":"428:14:21"}],"canonicalName":"IERC4626","contractDependencies":[],"contractKind":"interface","documentation":{"id":6245,"nodeType":"StructuredDocumentation","src":"261:136:21","text":" @dev Interface of the ERC4626 \"Tokenized Vault Standard\", as defined in\n https://eips.ethereum.org/EIPS/eip-4626[ERC-4626]."},"fullyImplemented":false,"id":6408,"linearizedBaseContracts":[6408,6512,6486],"name":"IERC4626","nameLocation":"408:8:21","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"dcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7","id":6259,"name":"Deposit","nameLocation":"455:7:21","nodeType":"EventDefinition","parameters":{"id":6258,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6251,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"479:6:21","nodeType":"VariableDeclaration","scope":6259,"src":"463:22:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6250,"name":"address","nodeType":"ElementaryTypeName","src":"463:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6253,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"503:5:21","nodeType":"VariableDeclaration","scope":6259,"src":"487:21:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6252,"name":"address","nodeType":"ElementaryTypeName","src":"487:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6255,"indexed":false,"mutability":"mutable","name":"assets","nameLocation":"518:6:21","nodeType":"VariableDeclaration","scope":6259,"src":"510:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6254,"name":"uint256","nodeType":"ElementaryTypeName","src":"510:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6257,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"534:6:21","nodeType":"VariableDeclaration","scope":6259,"src":"526:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6256,"name":"uint256","nodeType":"ElementaryTypeName","src":"526:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"462:79:21"},"src":"449:93:21"},{"anonymous":false,"eventSelector":"fbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db","id":6271,"name":"Withdraw","nameLocation":"554:8:21","nodeType":"EventDefinition","parameters":{"id":6270,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6261,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"588:6:21","nodeType":"VariableDeclaration","scope":6271,"src":"572:22:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6260,"name":"address","nodeType":"ElementaryTypeName","src":"572:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6263,"indexed":true,"mutability":"mutable","name":"receiver","nameLocation":"620:8:21","nodeType":"VariableDeclaration","scope":6271,"src":"604:24:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6262,"name":"address","nodeType":"ElementaryTypeName","src":"604:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6265,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"654:5:21","nodeType":"VariableDeclaration","scope":6271,"src":"638:21:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6264,"name":"address","nodeType":"ElementaryTypeName","src":"638:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6267,"indexed":false,"mutability":"mutable","name":"assets","nameLocation":"677:6:21","nodeType":"VariableDeclaration","scope":6271,"src":"669:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6266,"name":"uint256","nodeType":"ElementaryTypeName","src":"669:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6269,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"701:6:21","nodeType":"VariableDeclaration","scope":6271,"src":"693:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6268,"name":"uint256","nodeType":"ElementaryTypeName","src":"693:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"562:151:21"},"src":"548:166:21"},{"documentation":{"id":6272,"nodeType":"StructuredDocumentation","src":"720:207:21","text":" @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n - MUST be an ERC-20 token contract.\n - MUST NOT revert."},"functionSelector":"38d52e0f","id":6277,"implemented":false,"kind":"function","modifiers":[],"name":"asset","nameLocation":"941:5:21","nodeType":"FunctionDefinition","parameters":{"id":6273,"nodeType":"ParameterList","parameters":[],"src":"946:2:21"},"returnParameters":{"id":6276,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6275,"mutability":"mutable","name":"assetTokenAddress","nameLocation":"980:17:21","nodeType":"VariableDeclaration","scope":6277,"src":"972:25:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6274,"name":"address","nodeType":"ElementaryTypeName","src":"972:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"971:27:21"},"scope":6408,"src":"932:67:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6278,"nodeType":"StructuredDocumentation","src":"1005:286:21","text":" @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n - SHOULD include any compounding that occurs from yield.\n - MUST be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT revert."},"functionSelector":"01e1d114","id":6283,"implemented":false,"kind":"function","modifiers":[],"name":"totalAssets","nameLocation":"1305:11:21","nodeType":"FunctionDefinition","parameters":{"id":6279,"nodeType":"ParameterList","parameters":[],"src":"1316:2:21"},"returnParameters":{"id":6282,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6281,"mutability":"mutable","name":"totalManagedAssets","nameLocation":"1350:18:21","nodeType":"VariableDeclaration","scope":6283,"src":"1342:26:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6280,"name":"uint256","nodeType":"ElementaryTypeName","src":"1342:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1341:28:21"},"scope":6408,"src":"1296:74:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6284,"nodeType":"StructuredDocumentation","src":"1376:720:21","text":" @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from."},"functionSelector":"c6e6f592","id":6291,"implemented":false,"kind":"function","modifiers":[],"name":"convertToShares","nameLocation":"2110:15:21","nodeType":"FunctionDefinition","parameters":{"id":6287,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6286,"mutability":"mutable","name":"assets","nameLocation":"2134:6:21","nodeType":"VariableDeclaration","scope":6291,"src":"2126:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6285,"name":"uint256","nodeType":"ElementaryTypeName","src":"2126:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2125:16:21"},"returnParameters":{"id":6290,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6289,"mutability":"mutable","name":"shares","nameLocation":"2173:6:21","nodeType":"VariableDeclaration","scope":6291,"src":"2165:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6288,"name":"uint256","nodeType":"ElementaryTypeName","src":"2165:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2164:16:21"},"scope":6408,"src":"2101:80:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6292,"nodeType":"StructuredDocumentation","src":"2187:720:21","text":" @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from."},"functionSelector":"07a2d13a","id":6299,"implemented":false,"kind":"function","modifiers":[],"name":"convertToAssets","nameLocation":"2921:15:21","nodeType":"FunctionDefinition","parameters":{"id":6295,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6294,"mutability":"mutable","name":"shares","nameLocation":"2945:6:21","nodeType":"VariableDeclaration","scope":6299,"src":"2937:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6293,"name":"uint256","nodeType":"ElementaryTypeName","src":"2937:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2936:16:21"},"returnParameters":{"id":6298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6297,"mutability":"mutable","name":"assets","nameLocation":"2984:6:21","nodeType":"VariableDeclaration","scope":6299,"src":"2976:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6296,"name":"uint256","nodeType":"ElementaryTypeName","src":"2976:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2975:16:21"},"scope":6408,"src":"2912:80:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6300,"nodeType":"StructuredDocumentation","src":"2998:386:21","text":" @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n through a deposit call.\n - MUST return a limited value if receiver is subject to some deposit limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n - MUST NOT revert."},"functionSelector":"402d267d","id":6307,"implemented":false,"kind":"function","modifiers":[],"name":"maxDeposit","nameLocation":"3398:10:21","nodeType":"FunctionDefinition","parameters":{"id":6303,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6302,"mutability":"mutable","name":"receiver","nameLocation":"3417:8:21","nodeType":"VariableDeclaration","scope":6307,"src":"3409:16:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6301,"name":"address","nodeType":"ElementaryTypeName","src":"3409:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3408:18:21"},"returnParameters":{"id":6306,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6305,"mutability":"mutable","name":"maxAssets","nameLocation":"3458:9:21","nodeType":"VariableDeclaration","scope":6307,"src":"3450:17:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6304,"name":"uint256","nodeType":"ElementaryTypeName","src":"3450:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3449:19:21"},"scope":6408,"src":"3389:80:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6308,"nodeType":"StructuredDocumentation","src":"3475:1012:21","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n current on-chain conditions.\n - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n in the same transaction.\n - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n deposit would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing."},"functionSelector":"ef8b30f7","id":6315,"implemented":false,"kind":"function","modifiers":[],"name":"previewDeposit","nameLocation":"4501:14:21","nodeType":"FunctionDefinition","parameters":{"id":6311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6310,"mutability":"mutable","name":"assets","nameLocation":"4524:6:21","nodeType":"VariableDeclaration","scope":6315,"src":"4516:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6309,"name":"uint256","nodeType":"ElementaryTypeName","src":"4516:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4515:16:21"},"returnParameters":{"id":6314,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6313,"mutability":"mutable","name":"shares","nameLocation":"4563:6:21","nodeType":"VariableDeclaration","scope":6315,"src":"4555:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6312,"name":"uint256","nodeType":"ElementaryTypeName","src":"4555:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4554:16:21"},"scope":6408,"src":"4492:79:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6316,"nodeType":"StructuredDocumentation","src":"4577:651:21","text":" @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n deposit execution, and are accounted for during deposit.\n - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"functionSelector":"6e553f65","id":6325,"implemented":false,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"5242:7:21","nodeType":"FunctionDefinition","parameters":{"id":6321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6318,"mutability":"mutable","name":"assets","nameLocation":"5258:6:21","nodeType":"VariableDeclaration","scope":6325,"src":"5250:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6317,"name":"uint256","nodeType":"ElementaryTypeName","src":"5250:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6320,"mutability":"mutable","name":"receiver","nameLocation":"5274:8:21","nodeType":"VariableDeclaration","scope":6325,"src":"5266:16:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6319,"name":"address","nodeType":"ElementaryTypeName","src":"5266:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5249:34:21"},"returnParameters":{"id":6324,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6323,"mutability":"mutable","name":"shares","nameLocation":"5310:6:21","nodeType":"VariableDeclaration","scope":6325,"src":"5302:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6322,"name":"uint256","nodeType":"ElementaryTypeName","src":"5302:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5301:16:21"},"scope":6408,"src":"5233:85:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6326,"nodeType":"StructuredDocumentation","src":"5324:341:21","text":" @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n - MUST return a limited value if receiver is subject to some mint limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n - MUST NOT revert."},"functionSelector":"c63d75b6","id":6333,"implemented":false,"kind":"function","modifiers":[],"name":"maxMint","nameLocation":"5679:7:21","nodeType":"FunctionDefinition","parameters":{"id":6329,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6328,"mutability":"mutable","name":"receiver","nameLocation":"5695:8:21","nodeType":"VariableDeclaration","scope":6333,"src":"5687:16:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6327,"name":"address","nodeType":"ElementaryTypeName","src":"5687:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5686:18:21"},"returnParameters":{"id":6332,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6331,"mutability":"mutable","name":"maxShares","nameLocation":"5736:9:21","nodeType":"VariableDeclaration","scope":6333,"src":"5728:17:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6330,"name":"uint256","nodeType":"ElementaryTypeName","src":"5728:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5727:19:21"},"scope":6408,"src":"5670:77:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6334,"nodeType":"StructuredDocumentation","src":"5753:984:21","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n same transaction.\n - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by minting."},"functionSelector":"b3d7f6b9","id":6341,"implemented":false,"kind":"function","modifiers":[],"name":"previewMint","nameLocation":"6751:11:21","nodeType":"FunctionDefinition","parameters":{"id":6337,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6336,"mutability":"mutable","name":"shares","nameLocation":"6771:6:21","nodeType":"VariableDeclaration","scope":6341,"src":"6763:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6335,"name":"uint256","nodeType":"ElementaryTypeName","src":"6763:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6762:16:21"},"returnParameters":{"id":6340,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6339,"mutability":"mutable","name":"assets","nameLocation":"6810:6:21","nodeType":"VariableDeclaration","scope":6341,"src":"6802:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6338,"name":"uint256","nodeType":"ElementaryTypeName","src":"6802:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6801:16:21"},"scope":6408,"src":"6742:76:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6342,"nodeType":"StructuredDocumentation","src":"6824:642:21","text":" @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n execution, and are accounted for during mint.\n - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"functionSelector":"94bf804d","id":6351,"implemented":false,"kind":"function","modifiers":[],"name":"mint","nameLocation":"7480:4:21","nodeType":"FunctionDefinition","parameters":{"id":6347,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6344,"mutability":"mutable","name":"shares","nameLocation":"7493:6:21","nodeType":"VariableDeclaration","scope":6351,"src":"7485:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6343,"name":"uint256","nodeType":"ElementaryTypeName","src":"7485:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6346,"mutability":"mutable","name":"receiver","nameLocation":"7509:8:21","nodeType":"VariableDeclaration","scope":6351,"src":"7501:16:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6345,"name":"address","nodeType":"ElementaryTypeName","src":"7501:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7484:34:21"},"returnParameters":{"id":6350,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6349,"mutability":"mutable","name":"assets","nameLocation":"7545:6:21","nodeType":"VariableDeclaration","scope":6351,"src":"7537:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6348,"name":"uint256","nodeType":"ElementaryTypeName","src":"7537:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7536:16:21"},"scope":6408,"src":"7471:82:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6352,"nodeType":"StructuredDocumentation","src":"7559:293:21","text":" @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n Vault, through a withdraw call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST NOT revert."},"functionSelector":"ce96cb77","id":6359,"implemented":false,"kind":"function","modifiers":[],"name":"maxWithdraw","nameLocation":"7866:11:21","nodeType":"FunctionDefinition","parameters":{"id":6355,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6354,"mutability":"mutable","name":"owner","nameLocation":"7886:5:21","nodeType":"VariableDeclaration","scope":6359,"src":"7878:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6353,"name":"address","nodeType":"ElementaryTypeName","src":"7878:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7877:15:21"},"returnParameters":{"id":6358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6357,"mutability":"mutable","name":"maxAssets","nameLocation":"7924:9:21","nodeType":"VariableDeclaration","scope":6359,"src":"7916:17:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6356,"name":"uint256","nodeType":"ElementaryTypeName","src":"7916:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7915:19:21"},"scope":6408,"src":"7857:78:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6360,"nodeType":"StructuredDocumentation","src":"7941:1034:21","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n given current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n called\n in the same transaction.\n - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n the withdrawal would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing."},"functionSelector":"0a28a477","id":6367,"implemented":false,"kind":"function","modifiers":[],"name":"previewWithdraw","nameLocation":"8989:15:21","nodeType":"FunctionDefinition","parameters":{"id":6363,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6362,"mutability":"mutable","name":"assets","nameLocation":"9013:6:21","nodeType":"VariableDeclaration","scope":6367,"src":"9005:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6361,"name":"uint256","nodeType":"ElementaryTypeName","src":"9005:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9004:16:21"},"returnParameters":{"id":6366,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6365,"mutability":"mutable","name":"shares","nameLocation":"9052:6:21","nodeType":"VariableDeclaration","scope":6367,"src":"9044:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6364,"name":"uint256","nodeType":"ElementaryTypeName","src":"9044:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9043:16:21"},"scope":6408,"src":"8980:80:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6368,"nodeType":"StructuredDocumentation","src":"9066:670:21","text":" @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n withdraw execution, and are accounted for during withdraw.\n - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately."},"functionSelector":"b460af94","id":6379,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"9750:8:21","nodeType":"FunctionDefinition","parameters":{"id":6375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6370,"mutability":"mutable","name":"assets","nameLocation":"9767:6:21","nodeType":"VariableDeclaration","scope":6379,"src":"9759:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6369,"name":"uint256","nodeType":"ElementaryTypeName","src":"9759:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6372,"mutability":"mutable","name":"receiver","nameLocation":"9783:8:21","nodeType":"VariableDeclaration","scope":6379,"src":"9775:16:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6371,"name":"address","nodeType":"ElementaryTypeName","src":"9775:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6374,"mutability":"mutable","name":"owner","nameLocation":"9801:5:21","nodeType":"VariableDeclaration","scope":6379,"src":"9793:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6373,"name":"address","nodeType":"ElementaryTypeName","src":"9793:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9758:49:21"},"returnParameters":{"id":6378,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6377,"mutability":"mutable","name":"shares","nameLocation":"9834:6:21","nodeType":"VariableDeclaration","scope":6379,"src":"9826:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6376,"name":"uint256","nodeType":"ElementaryTypeName","src":"9826:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9825:16:21"},"scope":6408,"src":"9741:101:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6380,"nodeType":"StructuredDocumentation","src":"9848:381:21","text":" @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n through a redeem call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n - MUST NOT revert."},"functionSelector":"d905777e","id":6387,"implemented":false,"kind":"function","modifiers":[],"name":"maxRedeem","nameLocation":"10243:9:21","nodeType":"FunctionDefinition","parameters":{"id":6383,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6382,"mutability":"mutable","name":"owner","nameLocation":"10261:5:21","nodeType":"VariableDeclaration","scope":6387,"src":"10253:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6381,"name":"address","nodeType":"ElementaryTypeName","src":"10253:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10252:15:21"},"returnParameters":{"id":6386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6385,"mutability":"mutable","name":"maxShares","nameLocation":"10299:9:21","nodeType":"VariableDeclaration","scope":6387,"src":"10291:17:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6384,"name":"uint256","nodeType":"ElementaryTypeName","src":"10291:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10290:19:21"},"scope":6408,"src":"10234:76:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6388,"nodeType":"StructuredDocumentation","src":"10316:1010:21","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\n given current on-chain conditions.\n - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n same transaction.\n - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n redemption would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by redeeming."},"functionSelector":"4cdad506","id":6395,"implemented":false,"kind":"function","modifiers":[],"name":"previewRedeem","nameLocation":"11340:13:21","nodeType":"FunctionDefinition","parameters":{"id":6391,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6390,"mutability":"mutable","name":"shares","nameLocation":"11362:6:21","nodeType":"VariableDeclaration","scope":6395,"src":"11354:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6389,"name":"uint256","nodeType":"ElementaryTypeName","src":"11354:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11353:16:21"},"returnParameters":{"id":6394,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6393,"mutability":"mutable","name":"assets","nameLocation":"11401:6:21","nodeType":"VariableDeclaration","scope":6395,"src":"11393:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6392,"name":"uint256","nodeType":"ElementaryTypeName","src":"11393:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11392:16:21"},"scope":6408,"src":"11331:78:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6396,"nodeType":"StructuredDocumentation","src":"11415:661:21","text":" @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n redeem execution, and are accounted for during redeem.\n - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately."},"functionSelector":"ba087652","id":6407,"implemented":false,"kind":"function","modifiers":[],"name":"redeem","nameLocation":"12090:6:21","nodeType":"FunctionDefinition","parameters":{"id":6403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6398,"mutability":"mutable","name":"shares","nameLocation":"12105:6:21","nodeType":"VariableDeclaration","scope":6407,"src":"12097:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6397,"name":"uint256","nodeType":"ElementaryTypeName","src":"12097:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6400,"mutability":"mutable","name":"receiver","nameLocation":"12121:8:21","nodeType":"VariableDeclaration","scope":6407,"src":"12113:16:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6399,"name":"address","nodeType":"ElementaryTypeName","src":"12113:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6402,"mutability":"mutable","name":"owner","nameLocation":"12139:5:21","nodeType":"VariableDeclaration","scope":6407,"src":"12131:13:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6401,"name":"address","nodeType":"ElementaryTypeName","src":"12131:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12096:49:21"},"returnParameters":{"id":6406,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6405,"mutability":"mutable","name":"assets","nameLocation":"12172:6:21","nodeType":"VariableDeclaration","scope":6407,"src":"12164:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6404,"name":"uint256","nodeType":"ElementaryTypeName","src":"12164:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12163:16:21"},"scope":6408,"src":"12081:99:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":6409,"src":"398:11784:21","usedErrors":[],"usedEvents":[6259,6271,6420,6429]}],"src":"107:12076:21"},"id":21},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","exportedSymbols":{"IERC20":[6486]},"id":6487,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6410,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"106:24:22"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20","contractDependencies":[],"contractKind":"interface","documentation":{"id":6411,"nodeType":"StructuredDocumentation","src":"132:70:22","text":" @dev Interface of the ERC20 standard as defined in the EIP."},"fullyImplemented":false,"id":6486,"linearizedBaseContracts":[6486],"name":"IERC20","nameLocation":"213:6:22","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":6412,"nodeType":"StructuredDocumentation","src":"226:158:22","text":" @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."},"eventSelector":"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","id":6420,"name":"Transfer","nameLocation":"395:8:22","nodeType":"EventDefinition","parameters":{"id":6419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6414,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"420:4:22","nodeType":"VariableDeclaration","scope":6420,"src":"404:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6413,"name":"address","nodeType":"ElementaryTypeName","src":"404:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6416,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"442:2:22","nodeType":"VariableDeclaration","scope":6420,"src":"426:18:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6415,"name":"address","nodeType":"ElementaryTypeName","src":"426:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6418,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"454:5:22","nodeType":"VariableDeclaration","scope":6420,"src":"446:13:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6417,"name":"uint256","nodeType":"ElementaryTypeName","src":"446:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"403:57:22"},"src":"389:72:22"},{"anonymous":false,"documentation":{"id":6421,"nodeType":"StructuredDocumentation","src":"467:148:22","text":" @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."},"eventSelector":"8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","id":6429,"name":"Approval","nameLocation":"626:8:22","nodeType":"EventDefinition","parameters":{"id":6428,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6423,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"651:5:22","nodeType":"VariableDeclaration","scope":6429,"src":"635:21:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6422,"name":"address","nodeType":"ElementaryTypeName","src":"635:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6425,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"674:7:22","nodeType":"VariableDeclaration","scope":6429,"src":"658:23:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6424,"name":"address","nodeType":"ElementaryTypeName","src":"658:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6427,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"691:5:22","nodeType":"VariableDeclaration","scope":6429,"src":"683:13:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6426,"name":"uint256","nodeType":"ElementaryTypeName","src":"683:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"634:63:22"},"src":"620:78:22"},{"documentation":{"id":6430,"nodeType":"StructuredDocumentation","src":"704:65:22","text":" @dev Returns the value of tokens in existence."},"functionSelector":"18160ddd","id":6435,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"783:11:22","nodeType":"FunctionDefinition","parameters":{"id":6431,"nodeType":"ParameterList","parameters":[],"src":"794:2:22"},"returnParameters":{"id":6434,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6433,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6435,"src":"820:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6432,"name":"uint256","nodeType":"ElementaryTypeName","src":"820:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"819:9:22"},"scope":6486,"src":"774:55:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6436,"nodeType":"StructuredDocumentation","src":"835:71:22","text":" @dev Returns the value of tokens owned by `account`."},"functionSelector":"70a08231","id":6443,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"920:9:22","nodeType":"FunctionDefinition","parameters":{"id":6439,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6438,"mutability":"mutable","name":"account","nameLocation":"938:7:22","nodeType":"VariableDeclaration","scope":6443,"src":"930:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6437,"name":"address","nodeType":"ElementaryTypeName","src":"930:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"929:17:22"},"returnParameters":{"id":6442,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6441,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6443,"src":"970:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6440,"name":"uint256","nodeType":"ElementaryTypeName","src":"970:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"969:9:22"},"scope":6486,"src":"911:68:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6444,"nodeType":"StructuredDocumentation","src":"985:213:22","text":" @dev Moves a `value` amount of tokens from the caller's account to `to`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"a9059cbb","id":6453,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"1212:8:22","nodeType":"FunctionDefinition","parameters":{"id":6449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6446,"mutability":"mutable","name":"to","nameLocation":"1229:2:22","nodeType":"VariableDeclaration","scope":6453,"src":"1221:10:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6445,"name":"address","nodeType":"ElementaryTypeName","src":"1221:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6448,"mutability":"mutable","name":"value","nameLocation":"1241:5:22","nodeType":"VariableDeclaration","scope":6453,"src":"1233:13:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6447,"name":"uint256","nodeType":"ElementaryTypeName","src":"1233:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1220:27:22"},"returnParameters":{"id":6452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6451,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6453,"src":"1266:4:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6450,"name":"bool","nodeType":"ElementaryTypeName","src":"1266:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1265:6:22"},"scope":6486,"src":"1203:69:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6454,"nodeType":"StructuredDocumentation","src":"1278:264:22","text":" @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called."},"functionSelector":"dd62ed3e","id":6463,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"1556:9:22","nodeType":"FunctionDefinition","parameters":{"id":6459,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6456,"mutability":"mutable","name":"owner","nameLocation":"1574:5:22","nodeType":"VariableDeclaration","scope":6463,"src":"1566:13:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6455,"name":"address","nodeType":"ElementaryTypeName","src":"1566:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6458,"mutability":"mutable","name":"spender","nameLocation":"1589:7:22","nodeType":"VariableDeclaration","scope":6463,"src":"1581:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6457,"name":"address","nodeType":"ElementaryTypeName","src":"1581:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1565:32:22"},"returnParameters":{"id":6462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6461,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6463,"src":"1621:7:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6460,"name":"uint256","nodeType":"ElementaryTypeName","src":"1621:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1620:9:22"},"scope":6486,"src":"1547:83:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6464,"nodeType":"StructuredDocumentation","src":"1636:667:22","text":" @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event."},"functionSelector":"095ea7b3","id":6473,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"2317:7:22","nodeType":"FunctionDefinition","parameters":{"id":6469,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6466,"mutability":"mutable","name":"spender","nameLocation":"2333:7:22","nodeType":"VariableDeclaration","scope":6473,"src":"2325:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6465,"name":"address","nodeType":"ElementaryTypeName","src":"2325:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6468,"mutability":"mutable","name":"value","nameLocation":"2350:5:22","nodeType":"VariableDeclaration","scope":6473,"src":"2342:13:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6467,"name":"uint256","nodeType":"ElementaryTypeName","src":"2342:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2324:32:22"},"returnParameters":{"id":6472,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6471,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6473,"src":"2375:4:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6470,"name":"bool","nodeType":"ElementaryTypeName","src":"2375:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2374:6:22"},"scope":6486,"src":"2308:73:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6474,"nodeType":"StructuredDocumentation","src":"2387:297:22","text":" @dev Moves a `value` amount of tokens from `from` to `to` using the\n allowance mechanism. `value` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"23b872dd","id":6485,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"2698:12:22","nodeType":"FunctionDefinition","parameters":{"id":6481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6476,"mutability":"mutable","name":"from","nameLocation":"2719:4:22","nodeType":"VariableDeclaration","scope":6485,"src":"2711:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6475,"name":"address","nodeType":"ElementaryTypeName","src":"2711:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6478,"mutability":"mutable","name":"to","nameLocation":"2733:2:22","nodeType":"VariableDeclaration","scope":6485,"src":"2725:10:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6477,"name":"address","nodeType":"ElementaryTypeName","src":"2725:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6480,"mutability":"mutable","name":"value","nameLocation":"2745:5:22","nodeType":"VariableDeclaration","scope":6485,"src":"2737:13:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6479,"name":"uint256","nodeType":"ElementaryTypeName","src":"2737:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2710:41:22"},"returnParameters":{"id":6484,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6483,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6485,"src":"2770:4:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6482,"name":"bool","nodeType":"ElementaryTypeName","src":"2770:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2769:6:22"},"scope":6486,"src":"2689:87:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":6487,"src":"203:2575:22","usedErrors":[],"usedEvents":[6420,6429]}],"src":"106:2673:22"},"id":22},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","exportedSymbols":{"IERC20":[6486],"IERC20Metadata":[6512]},"id":6513,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6488,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"125:24:23"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","id":6490,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6513,"sourceUnit":6487,"src":"151:37:23","symbolAliases":[{"foreign":{"id":6489,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6486,"src":"159:6:23","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6492,"name":"IERC20","nameLocations":["305:6:23"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"305:6:23"},"id":6493,"nodeType":"InheritanceSpecifier","src":"305:6:23"}],"canonicalName":"IERC20Metadata","contractDependencies":[],"contractKind":"interface","documentation":{"id":6491,"nodeType":"StructuredDocumentation","src":"190:86:23","text":" @dev Interface for the optional metadata functions from the ERC20 standard."},"fullyImplemented":false,"id":6512,"linearizedBaseContracts":[6512,6486],"name":"IERC20Metadata","nameLocation":"287:14:23","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":6494,"nodeType":"StructuredDocumentation","src":"318:54:23","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":6499,"implemented":false,"kind":"function","modifiers":[],"name":"name","nameLocation":"386:4:23","nodeType":"FunctionDefinition","parameters":{"id":6495,"nodeType":"ParameterList","parameters":[],"src":"390:2:23"},"returnParameters":{"id":6498,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6497,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6499,"src":"416:13:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":6496,"name":"string","nodeType":"ElementaryTypeName","src":"416:6:23","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"415:15:23"},"scope":6512,"src":"377:54:23","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6500,"nodeType":"StructuredDocumentation","src":"437:56:23","text":" @dev Returns the symbol of the token."},"functionSelector":"95d89b41","id":6505,"implemented":false,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"507:6:23","nodeType":"FunctionDefinition","parameters":{"id":6501,"nodeType":"ParameterList","parameters":[],"src":"513:2:23"},"returnParameters":{"id":6504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6503,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6505,"src":"539:13:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":6502,"name":"string","nodeType":"ElementaryTypeName","src":"539:6:23","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"538:15:23"},"scope":6512,"src":"498:56:23","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6506,"nodeType":"StructuredDocumentation","src":"560:65:23","text":" @dev Returns the decimals places of the token."},"functionSelector":"313ce567","id":6511,"implemented":false,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"639:8:23","nodeType":"FunctionDefinition","parameters":{"id":6507,"nodeType":"ParameterList","parameters":[],"src":"647:2:23"},"returnParameters":{"id":6510,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6509,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6511,"src":"673:5:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":6508,"name":"uint8","nodeType":"ElementaryTypeName","src":"673:5:23","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"672:7:23"},"scope":6512,"src":"630:50:23","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6513,"src":"277:405:23","usedErrors":[],"usedEvents":[6420,6429]}],"src":"125:558:23"},"id":23},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol","exportedSymbols":{"IERC20Permit":[6548]},"id":6549,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6514,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"123:24:24"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20Permit","contractDependencies":[],"contractKind":"interface","documentation":{"id":6515,"nodeType":"StructuredDocumentation","src":"149:1963:24","text":" @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\n need to send a transaction, and thus is not required to hold Ether at all.\n ==== Security Considerations\n There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\n expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\n considered as an intention to spend the allowance in any specific way. The second is that because permits have\n built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\n take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\n generally recommended is:\n ```solidity\n function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\n try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\n doThing(..., value);\n }\n function doThing(..., uint256 value) public {\n token.safeTransferFrom(msg.sender, address(this), value);\n ...\n }\n ```\n Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\n `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\n {SafeERC20-safeTransferFrom}).\n Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\n contracts should have entry points that don't rely on permit."},"fullyImplemented":false,"id":6548,"linearizedBaseContracts":[6548],"name":"IERC20Permit","nameLocation":"2123:12:24","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":6516,"nodeType":"StructuredDocumentation","src":"2142:850:24","text":" @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\n given ``owner``'s signed approval.\n IMPORTANT: The same issues {IERC20-approve} has related to transaction\n ordering also apply here.\n Emits an {Approval} event.\n Requirements:\n - `spender` cannot be the zero address.\n - `deadline` must be a timestamp in the future.\n - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\n over the EIP712-formatted function arguments.\n - the signature must use ``owner``'s current nonce (see {nonces}).\n For more information on the signature format, see the\n https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\n section].\n CAUTION: See Security Considerations above."},"functionSelector":"d505accf","id":6533,"implemented":false,"kind":"function","modifiers":[],"name":"permit","nameLocation":"3006:6:24","nodeType":"FunctionDefinition","parameters":{"id":6531,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6518,"mutability":"mutable","name":"owner","nameLocation":"3030:5:24","nodeType":"VariableDeclaration","scope":6533,"src":"3022:13:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6517,"name":"address","nodeType":"ElementaryTypeName","src":"3022:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6520,"mutability":"mutable","name":"spender","nameLocation":"3053:7:24","nodeType":"VariableDeclaration","scope":6533,"src":"3045:15:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6519,"name":"address","nodeType":"ElementaryTypeName","src":"3045:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6522,"mutability":"mutable","name":"value","nameLocation":"3078:5:24","nodeType":"VariableDeclaration","scope":6533,"src":"3070:13:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6521,"name":"uint256","nodeType":"ElementaryTypeName","src":"3070:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6524,"mutability":"mutable","name":"deadline","nameLocation":"3101:8:24","nodeType":"VariableDeclaration","scope":6533,"src":"3093:16:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6523,"name":"uint256","nodeType":"ElementaryTypeName","src":"3093:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6526,"mutability":"mutable","name":"v","nameLocation":"3125:1:24","nodeType":"VariableDeclaration","scope":6533,"src":"3119:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":6525,"name":"uint8","nodeType":"ElementaryTypeName","src":"3119:5:24","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":6528,"mutability":"mutable","name":"r","nameLocation":"3144:1:24","nodeType":"VariableDeclaration","scope":6533,"src":"3136:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6527,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3136:7:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6530,"mutability":"mutable","name":"s","nameLocation":"3163:1:24","nodeType":"VariableDeclaration","scope":6533,"src":"3155:9:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6529,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3155:7:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3012:158:24"},"returnParameters":{"id":6532,"nodeType":"ParameterList","parameters":[],"src":"3179:0:24"},"scope":6548,"src":"2997:183:24","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6534,"nodeType":"StructuredDocumentation","src":"3186:294:24","text":" @dev Returns the current nonce for `owner`. This value must be\n included whenever a signature is generated for {permit}.\n Every successful call to {permit} increases ``owner``'s nonce by one. This\n prevents a signature from being used multiple times."},"functionSelector":"7ecebe00","id":6541,"implemented":false,"kind":"function","modifiers":[],"name":"nonces","nameLocation":"3494:6:24","nodeType":"FunctionDefinition","parameters":{"id":6537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6536,"mutability":"mutable","name":"owner","nameLocation":"3509:5:24","nodeType":"VariableDeclaration","scope":6541,"src":"3501:13:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6535,"name":"address","nodeType":"ElementaryTypeName","src":"3501:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3500:15:24"},"returnParameters":{"id":6540,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6539,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6541,"src":"3539:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6538,"name":"uint256","nodeType":"ElementaryTypeName","src":"3539:7:24","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3538:9:24"},"scope":6548,"src":"3485:63:24","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6542,"nodeType":"StructuredDocumentation","src":"3554:128:24","text":" @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}."},"functionSelector":"3644e515","id":6547,"implemented":false,"kind":"function","modifiers":[],"name":"DOMAIN_SEPARATOR","nameLocation":"3749:16:24","nodeType":"FunctionDefinition","parameters":{"id":6543,"nodeType":"ParameterList","parameters":[],"src":"3765:2:24"},"returnParameters":{"id":6546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6545,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6547,"src":"3791:7:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6544,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3791:7:24","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3790:9:24"},"scope":6548,"src":"3740:60:24","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6549,"src":"2113:1689:24","usedErrors":[],"usedEvents":[]}],"src":"123:3680:24"},"id":24},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","exportedSymbols":{"Address":[7091],"IERC20":[6486],"IERC20Permit":[6548],"SafeERC20":[6838]},"id":6839,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6550,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"115:24:25"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","id":6552,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6839,"sourceUnit":6487,"src":"141:37:25","symbolAliases":[{"foreign":{"id":6551,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6486,"src":"149:6:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol","file":"../extensions/IERC20Permit.sol","id":6554,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6839,"sourceUnit":6549,"src":"179:60:25","symbolAliases":[{"foreign":{"id":6553,"name":"IERC20Permit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6548,"src":"187:12:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"../../../utils/Address.sol","id":6556,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6839,"sourceUnit":7092,"src":"240:51:25","symbolAliases":[{"foreign":{"id":6555,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7091,"src":"248:7:25","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"SafeERC20","contractDependencies":[],"contractKind":"library","documentation":{"id":6557,"nodeType":"StructuredDocumentation","src":"293:457:25","text":" @title SafeERC20\n @dev Wrappers around ERC20 operations that throw on failure (when the token\n contract returns false). Tokens that return no value (and instead revert or\n throw on failure) are also supported, non-reverting calls are assumed to be\n successful.\n To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n which allows you to call the safe operations as `token.safeTransfer(...)`, etc."},"fullyImplemented":true,"id":6838,"linearizedBaseContracts":[6838],"name":"SafeERC20","nameLocation":"759:9:25","nodeType":"ContractDefinition","nodes":[{"global":false,"id":6560,"libraryName":{"id":6558,"name":"Address","nameLocations":["781:7:25"],"nodeType":"IdentifierPath","referencedDeclaration":7091,"src":"781:7:25"},"nodeType":"UsingForDirective","src":"775:26:25","typeName":{"id":6559,"name":"address","nodeType":"ElementaryTypeName","src":"793:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"documentation":{"id":6561,"nodeType":"StructuredDocumentation","src":"807:64:25","text":" @dev An operation with an ERC20 token failed."},"errorSelector":"5274afe7","id":6565,"name":"SafeERC20FailedOperation","nameLocation":"882:24:25","nodeType":"ErrorDefinition","parameters":{"id":6564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6563,"mutability":"mutable","name":"token","nameLocation":"915:5:25","nodeType":"VariableDeclaration","scope":6565,"src":"907:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6562,"name":"address","nodeType":"ElementaryTypeName","src":"907:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"906:15:25"},"src":"876:46:25"},{"documentation":{"id":6566,"nodeType":"StructuredDocumentation","src":"928:71:25","text":" @dev Indicates a failed `decreaseAllowance` request."},"errorSelector":"e570110f","id":6574,"name":"SafeERC20FailedDecreaseAllowance","nameLocation":"1010:32:25","nodeType":"ErrorDefinition","parameters":{"id":6573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6568,"mutability":"mutable","name":"spender","nameLocation":"1051:7:25","nodeType":"VariableDeclaration","scope":6574,"src":"1043:15:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6567,"name":"address","nodeType":"ElementaryTypeName","src":"1043:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6570,"mutability":"mutable","name":"currentAllowance","nameLocation":"1068:16:25","nodeType":"VariableDeclaration","scope":6574,"src":"1060:24:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6569,"name":"uint256","nodeType":"ElementaryTypeName","src":"1060:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6572,"mutability":"mutable","name":"requestedDecrease","nameLocation":"1094:17:25","nodeType":"VariableDeclaration","scope":6574,"src":"1086:25:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6571,"name":"uint256","nodeType":"ElementaryTypeName","src":"1086:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1042:70:25"},"src":"1004:109:25"},{"body":{"id":6597,"nodeType":"Block","src":"1375:88:25","statements":[{"expression":{"arguments":[{"id":6586,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6578,"src":"1405:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":6589,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6578,"src":"1427:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":6590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1433:8:25","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":6453,"src":"1427:14:25","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":6591,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6580,"src":"1444:2:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6592,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6582,"src":"1448:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6593,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1443:11:25","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":6587,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1412:3:25","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":6588,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1416:10:25","memberName":"encodeCall","nodeType":"MemberAccess","src":"1412:14:25","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":6594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1412:43:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6585,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6788,"src":"1385:19:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6486_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":6595,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1385:71:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6596,"nodeType":"ExpressionStatement","src":"1385:71:25"}]},"documentation":{"id":6575,"nodeType":"StructuredDocumentation","src":"1119:179:25","text":" @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n non-reverting calls are assumed to be successful."},"id":6598,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransfer","nameLocation":"1312:12:25","nodeType":"FunctionDefinition","parameters":{"id":6583,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6578,"mutability":"mutable","name":"token","nameLocation":"1332:5:25","nodeType":"VariableDeclaration","scope":6598,"src":"1325:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":6577,"nodeType":"UserDefinedTypeName","pathNode":{"id":6576,"name":"IERC20","nameLocations":["1325:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"1325:6:25"},"referencedDeclaration":6486,"src":"1325:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":6580,"mutability":"mutable","name":"to","nameLocation":"1347:2:25","nodeType":"VariableDeclaration","scope":6598,"src":"1339:10:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6579,"name":"address","nodeType":"ElementaryTypeName","src":"1339:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6582,"mutability":"mutable","name":"value","nameLocation":"1359:5:25","nodeType":"VariableDeclaration","scope":6598,"src":"1351:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6581,"name":"uint256","nodeType":"ElementaryTypeName","src":"1351:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1324:41:25"},"returnParameters":{"id":6584,"nodeType":"ParameterList","parameters":[],"src":"1375:0:25"},"scope":6838,"src":"1303:160:25","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6624,"nodeType":"Block","src":"1792:98:25","statements":[{"expression":{"arguments":[{"id":6612,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6602,"src":"1822:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":6615,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6602,"src":"1844:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":6616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1850:12:25","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":6485,"src":"1844:18:25","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},{"components":[{"id":6617,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6604,"src":"1865:4:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6618,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6606,"src":"1871:2:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6619,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6608,"src":"1875:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6620,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1864:17:25","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}],"expression":{"id":6613,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1829:3:25","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":6614,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1833:10:25","memberName":"encodeCall","nodeType":"MemberAccess","src":"1829:14:25","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":6621,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1829:53:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6611,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6788,"src":"1802:19:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6486_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":6622,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1802:81:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6623,"nodeType":"ExpressionStatement","src":"1802:81:25"}]},"documentation":{"id":6599,"nodeType":"StructuredDocumentation","src":"1469:228:25","text":" @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n calling contract. If `token` returns no value, non-reverting calls are assumed to be successful."},"id":6625,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"1711:16:25","nodeType":"FunctionDefinition","parameters":{"id":6609,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6602,"mutability":"mutable","name":"token","nameLocation":"1735:5:25","nodeType":"VariableDeclaration","scope":6625,"src":"1728:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":6601,"nodeType":"UserDefinedTypeName","pathNode":{"id":6600,"name":"IERC20","nameLocations":["1728:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"1728:6:25"},"referencedDeclaration":6486,"src":"1728:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":6604,"mutability":"mutable","name":"from","nameLocation":"1750:4:25","nodeType":"VariableDeclaration","scope":6625,"src":"1742:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6603,"name":"address","nodeType":"ElementaryTypeName","src":"1742:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6606,"mutability":"mutable","name":"to","nameLocation":"1764:2:25","nodeType":"VariableDeclaration","scope":6625,"src":"1756:10:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6605,"name":"address","nodeType":"ElementaryTypeName","src":"1756:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6608,"mutability":"mutable","name":"value","nameLocation":"1776:5:25","nodeType":"VariableDeclaration","scope":6625,"src":"1768:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6607,"name":"uint256","nodeType":"ElementaryTypeName","src":"1768:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1727:55:25"},"returnParameters":{"id":6610,"nodeType":"ParameterList","parameters":[],"src":"1792:0:25"},"scope":6838,"src":"1702:188:25","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6655,"nodeType":"Block","src":"2167:139:25","statements":[{"assignments":[6637],"declarations":[{"constant":false,"id":6637,"mutability":"mutable","name":"oldAllowance","nameLocation":"2185:12:25","nodeType":"VariableDeclaration","scope":6655,"src":"2177:20:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6636,"name":"uint256","nodeType":"ElementaryTypeName","src":"2177:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6646,"initialValue":{"arguments":[{"arguments":[{"id":6642,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2224:4:25","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$6838","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$6838","typeString":"library SafeERC20"}],"id":6641,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2216:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6640,"name":"address","nodeType":"ElementaryTypeName","src":"2216:7:25","typeDescriptions":{}}},"id":6643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2216:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6644,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6631,"src":"2231:7:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6638,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6629,"src":"2200:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":6639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2206:9:25","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":6463,"src":"2200:15:25","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":6645,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2200:39:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2177:62:25"},{"expression":{"arguments":[{"id":6648,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6629,"src":"2262:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},{"id":6649,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6631,"src":"2269:7:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6650,"name":"oldAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6637,"src":"2278:12:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":6651,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6633,"src":"2293:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2278:20:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6647,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6746,"src":"2249:12:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6486_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":6653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2249:50:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6654,"nodeType":"ExpressionStatement","src":"2249:50:25"}]},"documentation":{"id":6626,"nodeType":"StructuredDocumentation","src":"1896:180:25","text":" @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful."},"id":6656,"implemented":true,"kind":"function","modifiers":[],"name":"safeIncreaseAllowance","nameLocation":"2090:21:25","nodeType":"FunctionDefinition","parameters":{"id":6634,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6629,"mutability":"mutable","name":"token","nameLocation":"2119:5:25","nodeType":"VariableDeclaration","scope":6656,"src":"2112:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":6628,"nodeType":"UserDefinedTypeName","pathNode":{"id":6627,"name":"IERC20","nameLocations":["2112:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"2112:6:25"},"referencedDeclaration":6486,"src":"2112:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":6631,"mutability":"mutable","name":"spender","nameLocation":"2134:7:25","nodeType":"VariableDeclaration","scope":6656,"src":"2126:15:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6630,"name":"address","nodeType":"ElementaryTypeName","src":"2126:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6633,"mutability":"mutable","name":"value","nameLocation":"2151:5:25","nodeType":"VariableDeclaration","scope":6656,"src":"2143:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6632,"name":"uint256","nodeType":"ElementaryTypeName","src":"2143:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2111:46:25"},"returnParameters":{"id":6635,"nodeType":"ParameterList","parameters":[],"src":"2167:0:25"},"scope":6838,"src":"2081:225:25","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6698,"nodeType":"Block","src":"2607:370:25","statements":[{"id":6697,"nodeType":"UncheckedBlock","src":"2617:354:25","statements":[{"assignments":[6668],"declarations":[{"constant":false,"id":6668,"mutability":"mutable","name":"currentAllowance","nameLocation":"2649:16:25","nodeType":"VariableDeclaration","scope":6697,"src":"2641:24:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6667,"name":"uint256","nodeType":"ElementaryTypeName","src":"2641:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6677,"initialValue":{"arguments":[{"arguments":[{"id":6673,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2692:4:25","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$6838","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$6838","typeString":"library SafeERC20"}],"id":6672,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2684:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6671,"name":"address","nodeType":"ElementaryTypeName","src":"2684:7:25","typeDescriptions":{}}},"id":6674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2684:13:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6675,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6662,"src":"2699:7:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6669,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6660,"src":"2668:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":6670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2674:9:25","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":6463,"src":"2668:15:25","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":6676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2668:39:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2641:66:25"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6678,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6668,"src":"2725:16:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6679,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6664,"src":"2744:17:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2725:36:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6688,"nodeType":"IfStatement","src":"2721:160:25","trueBody":{"id":6687,"nodeType":"Block","src":"2763:118:25","statements":[{"errorCall":{"arguments":[{"id":6682,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6662,"src":"2821:7:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6683,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6668,"src":"2830:16:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6684,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6664,"src":"2848:17:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6681,"name":"SafeERC20FailedDecreaseAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6574,"src":"2788:32:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":6685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2788:78:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6686,"nodeType":"RevertStatement","src":"2781:85:25"}]}},{"expression":{"arguments":[{"id":6690,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6660,"src":"2907:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},{"id":6691,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6662,"src":"2914:7:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6692,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6668,"src":"2923:16:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":6693,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6664,"src":"2942:17:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2923:36:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6689,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6746,"src":"2894:12:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6486_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":6695,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2894:66:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6696,"nodeType":"ExpressionStatement","src":"2894:66:25"}]}]},"documentation":{"id":6657,"nodeType":"StructuredDocumentation","src":"2312:192:25","text":" @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n value, non-reverting calls are assumed to be successful."},"id":6699,"implemented":true,"kind":"function","modifiers":[],"name":"safeDecreaseAllowance","nameLocation":"2518:21:25","nodeType":"FunctionDefinition","parameters":{"id":6665,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6660,"mutability":"mutable","name":"token","nameLocation":"2547:5:25","nodeType":"VariableDeclaration","scope":6699,"src":"2540:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":6659,"nodeType":"UserDefinedTypeName","pathNode":{"id":6658,"name":"IERC20","nameLocations":["2540:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"2540:6:25"},"referencedDeclaration":6486,"src":"2540:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":6662,"mutability":"mutable","name":"spender","nameLocation":"2562:7:25","nodeType":"VariableDeclaration","scope":6699,"src":"2554:15:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6661,"name":"address","nodeType":"ElementaryTypeName","src":"2554:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6664,"mutability":"mutable","name":"requestedDecrease","nameLocation":"2579:17:25","nodeType":"VariableDeclaration","scope":6699,"src":"2571:25:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6663,"name":"uint256","nodeType":"ElementaryTypeName","src":"2571:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2539:58:25"},"returnParameters":{"id":6666,"nodeType":"ParameterList","parameters":[],"src":"2607:0:25"},"scope":6838,"src":"2509:468:25","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6745,"nodeType":"Block","src":"3373:303:25","statements":[{"assignments":[6711],"declarations":[{"constant":false,"id":6711,"mutability":"mutable","name":"approvalCall","nameLocation":"3396:12:25","nodeType":"VariableDeclaration","scope":6745,"src":"3383:25:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6710,"name":"bytes","nodeType":"ElementaryTypeName","src":"3383:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":6720,"initialValue":{"arguments":[{"expression":{"id":6714,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6703,"src":"3426:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":6715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3432:7:25","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":6473,"src":"3426:13:25","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":6716,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6705,"src":"3442:7:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6717,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6707,"src":"3451:5:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6718,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3441:16:25","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":6712,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3411:3:25","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":6713,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3415:10:25","memberName":"encodeCall","nodeType":"MemberAccess","src":"3411:14:25","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":6719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3411:47:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3383:75:25"},{"condition":{"id":6725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3473:45:25","subExpression":{"arguments":[{"id":6722,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6703,"src":"3498:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},{"id":6723,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6711,"src":"3505:12:25","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6721,"name":"_callOptionalReturnBool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6837,"src":"3474:23:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6486_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (contract IERC20,bytes memory) returns (bool)"}},"id":6724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3474:44:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6744,"nodeType":"IfStatement","src":"3469:201:25","trueBody":{"id":6743,"nodeType":"Block","src":"3520:150:25","statements":[{"expression":{"arguments":[{"id":6727,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6703,"src":"3554:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":6730,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6703,"src":"3576:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"id":6731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3582:7:25","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":6473,"src":"3576:13:25","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":6732,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6705,"src":"3592:7:25","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":6733,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3601:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":6734,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3591:12:25","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(address,int_const 0)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(address,int_const 0)"}],"expression":{"id":6728,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3561:3:25","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":6729,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3565:10:25","memberName":"encodeCall","nodeType":"MemberAccess","src":"3561:14:25","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":6735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3561:43:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6726,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6788,"src":"3534:19:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6486_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":6736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3534:71:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6737,"nodeType":"ExpressionStatement","src":"3534:71:25"},{"expression":{"arguments":[{"id":6739,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6703,"src":"3639:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},{"id":6740,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6711,"src":"3646:12:25","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6738,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6788,"src":"3619:19:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6486_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":6741,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3619:40:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6742,"nodeType":"ExpressionStatement","src":"3619:40:25"}]}}]},"documentation":{"id":6700,"nodeType":"StructuredDocumentation","src":"2983:308:25","text":" @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n to be set to zero before setting it to a non-zero value, such as USDT."},"id":6746,"implemented":true,"kind":"function","modifiers":[],"name":"forceApprove","nameLocation":"3305:12:25","nodeType":"FunctionDefinition","parameters":{"id":6708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6703,"mutability":"mutable","name":"token","nameLocation":"3325:5:25","nodeType":"VariableDeclaration","scope":6746,"src":"3318:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":6702,"nodeType":"UserDefinedTypeName","pathNode":{"id":6701,"name":"IERC20","nameLocations":["3318:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"3318:6:25"},"referencedDeclaration":6486,"src":"3318:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":6705,"mutability":"mutable","name":"spender","nameLocation":"3340:7:25","nodeType":"VariableDeclaration","scope":6746,"src":"3332:15:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6704,"name":"address","nodeType":"ElementaryTypeName","src":"3332:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6707,"mutability":"mutable","name":"value","nameLocation":"3357:5:25","nodeType":"VariableDeclaration","scope":6746,"src":"3349:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6706,"name":"uint256","nodeType":"ElementaryTypeName","src":"3349:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3317:46:25"},"returnParameters":{"id":6709,"nodeType":"ParameterList","parameters":[],"src":"3373:0:25"},"scope":6838,"src":"3296:380:25","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6787,"nodeType":"Block","src":"4129:559:25","statements":[{"assignments":[6756],"declarations":[{"constant":false,"id":6756,"mutability":"mutable","name":"returndata","nameLocation":"4491:10:25","nodeType":"VariableDeclaration","scope":6787,"src":"4478:23:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6755,"name":"bytes","nodeType":"ElementaryTypeName","src":"4478:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":6764,"initialValue":{"arguments":[{"id":6762,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6752,"src":"4532:4:25","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":6759,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6750,"src":"4512:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}],"id":6758,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4504:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6757,"name":"address","nodeType":"ElementaryTypeName","src":"4504:7:25","typeDescriptions":{}}},"id":6760,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4504:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4519:12:25","memberName":"functionCall","nodeType":"MemberAccess","referencedDeclaration":6912,"src":"4504:27:25","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$attached_to$_t_address_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":6763,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4504:33:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"4478:59:25"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6765,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6756,"src":"4551:10:25","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":6766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4562:6:25","memberName":"length","nodeType":"MemberAccess","src":"4551:17:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":6767,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4572:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4551:22:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"id":6776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4577:31:25","subExpression":{"arguments":[{"id":6771,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6756,"src":"4589:10:25","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":6773,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4602:4:25","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":{"id":6772,"name":"bool","nodeType":"ElementaryTypeName","src":"4602:4:25","typeDescriptions":{}}}],"id":6774,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"4601:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}],"expression":{"id":6769,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4578:3:25","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":6770,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4582:6:25","memberName":"decode","nodeType":"MemberAccess","src":"4578:10:25","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":6775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4578:30:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4551:57:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6786,"nodeType":"IfStatement","src":"4547:135:25","trueBody":{"id":6785,"nodeType":"Block","src":"4610:72:25","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":6781,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6750,"src":"4664:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}],"id":6780,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4656:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6779,"name":"address","nodeType":"ElementaryTypeName","src":"4656:7:25","typeDescriptions":{}}},"id":6782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4656:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6778,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6565,"src":"4631:24:25","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":6783,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4631:40:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6784,"nodeType":"RevertStatement","src":"4624:47:25"}]}}]},"documentation":{"id":6747,"nodeType":"StructuredDocumentation","src":"3682:372:25","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants)."},"id":6788,"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturn","nameLocation":"4068:19:25","nodeType":"FunctionDefinition","parameters":{"id":6753,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6750,"mutability":"mutable","name":"token","nameLocation":"4095:5:25","nodeType":"VariableDeclaration","scope":6788,"src":"4088:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":6749,"nodeType":"UserDefinedTypeName","pathNode":{"id":6748,"name":"IERC20","nameLocations":["4088:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"4088:6:25"},"referencedDeclaration":6486,"src":"4088:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":6752,"mutability":"mutable","name":"data","nameLocation":"4115:4:25","nodeType":"VariableDeclaration","scope":6788,"src":"4102:17:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6751,"name":"bytes","nodeType":"ElementaryTypeName","src":"4102:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4087:33:25"},"returnParameters":{"id":6754,"nodeType":"ParameterList","parameters":[],"src":"4129:0:25"},"scope":6838,"src":"4059:629:25","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":6836,"nodeType":"Block","src":"5278:489:25","statements":[{"assignments":[6800,6802],"declarations":[{"constant":false,"id":6800,"mutability":"mutable","name":"success","nameLocation":"5579:7:25","nodeType":"VariableDeclaration","scope":6836,"src":"5574:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6799,"name":"bool","nodeType":"ElementaryTypeName","src":"5574:4:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6802,"mutability":"mutable","name":"returndata","nameLocation":"5601:10:25","nodeType":"VariableDeclaration","scope":6836,"src":"5588:23:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6801,"name":"bytes","nodeType":"ElementaryTypeName","src":"5588:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":6810,"initialValue":{"arguments":[{"id":6808,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6794,"src":"5635:4:25","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":6805,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6792,"src":"5623:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}],"id":6804,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5615:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6803,"name":"address","nodeType":"ElementaryTypeName","src":"5615:7:25","typeDescriptions":{}}},"id":6806,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5615:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5630:4:25","memberName":"call","nodeType":"MemberAccess","src":"5615:19:25","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":6809,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5615:25:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"5573:67:25"},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6811,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6800,"src":"5657:7:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6815,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6812,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6802,"src":"5669:10:25","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":6813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5680:6:25","memberName":"length","nodeType":"MemberAccess","src":"5669:17:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6814,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5690:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5669:22:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":6818,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6802,"src":"5706:10:25","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":6820,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5719:4:25","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":{"id":6819,"name":"bool","nodeType":"ElementaryTypeName","src":"5719:4:25","typeDescriptions":{}}}],"id":6821,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"5718:6:25","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}],"expression":{"id":6816,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5695:3:25","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":6817,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5699:6:25","memberName":"decode","nodeType":"MemberAccess","src":"5695:10:25","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":6822,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5695:30:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5669:56:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":6824,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5668:58:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5657:69:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"arguments":[{"id":6828,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6792,"src":"5738:5:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}],"id":6827,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5730:7:25","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6826,"name":"address","nodeType":"ElementaryTypeName","src":"5730:7:25","typeDescriptions":{}}},"id":6829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5730:14:25","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5745:4:25","memberName":"code","nodeType":"MemberAccess","src":"5730:19:25","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":6831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5750:6:25","memberName":"length","nodeType":"MemberAccess","src":"5730:26:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":6832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5759:1:25","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5730:30:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5657:103:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":6798,"id":6835,"nodeType":"Return","src":"5650:110:25"}]},"documentation":{"id":6789,"nodeType":"StructuredDocumentation","src":"4694:490:25","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants).\n This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead."},"id":6837,"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturnBool","nameLocation":"5198:23:25","nodeType":"FunctionDefinition","parameters":{"id":6795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6792,"mutability":"mutable","name":"token","nameLocation":"5229:5:25","nodeType":"VariableDeclaration","scope":6837,"src":"5222:12:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"},"typeName":{"id":6791,"nodeType":"UserDefinedTypeName","pathNode":{"id":6790,"name":"IERC20","nameLocations":["5222:6:25"],"nodeType":"IdentifierPath","referencedDeclaration":6486,"src":"5222:6:25"},"referencedDeclaration":6486,"src":"5222:6:25","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6486","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":6794,"mutability":"mutable","name":"data","nameLocation":"5249:4:25","nodeType":"VariableDeclaration","scope":6837,"src":"5236:17:25","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6793,"name":"bytes","nodeType":"ElementaryTypeName","src":"5236:5:25","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5221:33:25"},"returnParameters":{"id":6798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6797,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6837,"src":"5272:4:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6796,"name":"bool","nodeType":"ElementaryTypeName","src":"5272:4:25","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5271:6:25"},"scope":6838,"src":"5189:578:25","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":6839,"src":"751:5018:25","usedErrors":[6565,6574],"usedEvents":[]}],"src":"115:5655:25"},"id":25},"@openzeppelin/contracts/utils/Address.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","exportedSymbols":{"Address":[7091]},"id":7092,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6840,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"101:24:26"},{"abstract":false,"baseContracts":[],"canonicalName":"Address","contractDependencies":[],"contractKind":"library","documentation":{"id":6841,"nodeType":"StructuredDocumentation","src":"127:67:26","text":" @dev Collection of functions related to the address type"},"fullyImplemented":true,"id":7091,"linearizedBaseContracts":[7091],"name":"Address","nameLocation":"203:7:26","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":6842,"nodeType":"StructuredDocumentation","src":"217:94:26","text":" @dev The ETH balance of the account is not enough to perform the operation."},"errorSelector":"cd786059","id":6846,"name":"AddressInsufficientBalance","nameLocation":"322:26:26","nodeType":"ErrorDefinition","parameters":{"id":6845,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6844,"mutability":"mutable","name":"account","nameLocation":"357:7:26","nodeType":"VariableDeclaration","scope":6846,"src":"349:15:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6843,"name":"address","nodeType":"ElementaryTypeName","src":"349:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"348:17:26"},"src":"316:50:26"},{"documentation":{"id":6847,"nodeType":"StructuredDocumentation","src":"372:75:26","text":" @dev There's no code at `target` (it is not a contract)."},"errorSelector":"9996b315","id":6851,"name":"AddressEmptyCode","nameLocation":"458:16:26","nodeType":"ErrorDefinition","parameters":{"id":6850,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6849,"mutability":"mutable","name":"target","nameLocation":"483:6:26","nodeType":"VariableDeclaration","scope":6851,"src":"475:14:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6848,"name":"address","nodeType":"ElementaryTypeName","src":"475:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"474:16:26"},"src":"452:39:26"},{"documentation":{"id":6852,"nodeType":"StructuredDocumentation","src":"497:89:26","text":" @dev A call to an address target failed. The target may have reverted."},"errorSelector":"1425ea42","id":6854,"name":"FailedInnerCall","nameLocation":"597:15:26","nodeType":"ErrorDefinition","parameters":{"id":6853,"nodeType":"ParameterList","parameters":[],"src":"612:2:26"},"src":"591:24:26"},{"body":{"id":6894,"nodeType":"Block","src":"1602:260:26","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":6864,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1624:4:26","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$7091","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$7091","typeString":"library Address"}],"id":6863,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1616:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6862,"name":"address","nodeType":"ElementaryTypeName","src":"1616:7:26","typeDescriptions":{}}},"id":6865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1616:13:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1630:7:26","memberName":"balance","nodeType":"MemberAccess","src":"1616:21:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6867,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6859,"src":"1640:6:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1616:30:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6877,"nodeType":"IfStatement","src":"1612:109:26","trueBody":{"id":6876,"nodeType":"Block","src":"1648:73:26","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":6872,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1704:4:26","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$7091","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$7091","typeString":"library Address"}],"id":6871,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1696:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6870,"name":"address","nodeType":"ElementaryTypeName","src":"1696:7:26","typeDescriptions":{}}},"id":6873,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1696:13:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6869,"name":"AddressInsufficientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6846,"src":"1669:26:26","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":6874,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1669:41:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6875,"nodeType":"RevertStatement","src":"1662:48:26"}]}},{"assignments":[6879,null],"declarations":[{"constant":false,"id":6879,"mutability":"mutable","name":"success","nameLocation":"1737:7:26","nodeType":"VariableDeclaration","scope":6894,"src":"1732:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6878,"name":"bool","nodeType":"ElementaryTypeName","src":"1732:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":6886,"initialValue":{"arguments":[{"hexValue":"","id":6884,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1780:2:26","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":6880,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6857,"src":"1750:9:26","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":6881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1760:4:26","memberName":"call","nodeType":"MemberAccess","src":"1750:14:26","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":6883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":6882,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6859,"src":"1772:6:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"1750:29:26","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":6885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1750:33:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"1731:52:26"},{"condition":{"id":6888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1797:8:26","subExpression":{"id":6887,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6879,"src":"1798:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6893,"nodeType":"IfStatement","src":"1793:63:26","trueBody":{"id":6892,"nodeType":"Block","src":"1807:49:26","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6889,"name":"FailedInnerCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6854,"src":"1828:15:26","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6890,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1828:17:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6891,"nodeType":"RevertStatement","src":"1821:24:26"}]}}]},"documentation":{"id":6855,"nodeType":"StructuredDocumentation","src":"621:905:26","text":" @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."},"id":6895,"implemented":true,"kind":"function","modifiers":[],"name":"sendValue","nameLocation":"1540:9:26","nodeType":"FunctionDefinition","parameters":{"id":6860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6857,"mutability":"mutable","name":"recipient","nameLocation":"1566:9:26","nodeType":"VariableDeclaration","scope":6895,"src":"1550:25:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":6856,"name":"address","nodeType":"ElementaryTypeName","src":"1550:15:26","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":6859,"mutability":"mutable","name":"amount","nameLocation":"1585:6:26","nodeType":"VariableDeclaration","scope":6895,"src":"1577:14:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6858,"name":"uint256","nodeType":"ElementaryTypeName","src":"1577:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1549:43:26"},"returnParameters":{"id":6861,"nodeType":"ParameterList","parameters":[],"src":"1602:0:26"},"scope":7091,"src":"1531:331:26","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6911,"nodeType":"Block","src":"2794:62:26","statements":[{"expression":{"arguments":[{"id":6906,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6898,"src":"2833:6:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6907,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6900,"src":"2841:4:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":6908,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2847:1:26","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":6905,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6958,"src":"2811:21:26","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256) returns (bytes memory)"}},"id":6909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2811:38:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":6904,"id":6910,"nodeType":"Return","src":"2804:45:26"}]},"documentation":{"id":6896,"nodeType":"StructuredDocumentation","src":"1868:832:26","text":" @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason or custom error, it is bubbled\n up by this function (like regular Solidity function calls). However, if\n the call reverted with no returned reason, this function reverts with a\n {FailedInnerCall} error.\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert."},"id":6912,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"2714:12:26","nodeType":"FunctionDefinition","parameters":{"id":6901,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6898,"mutability":"mutable","name":"target","nameLocation":"2735:6:26","nodeType":"VariableDeclaration","scope":6912,"src":"2727:14:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6897,"name":"address","nodeType":"ElementaryTypeName","src":"2727:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6900,"mutability":"mutable","name":"data","nameLocation":"2756:4:26","nodeType":"VariableDeclaration","scope":6912,"src":"2743:17:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6899,"name":"bytes","nodeType":"ElementaryTypeName","src":"2743:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2726:35:26"},"returnParameters":{"id":6904,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6903,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6912,"src":"2780:12:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6902,"name":"bytes","nodeType":"ElementaryTypeName","src":"2780:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2779:14:26"},"scope":7091,"src":"2705:151:26","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6957,"nodeType":"Block","src":"3293:279:26","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":6926,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3315:4:26","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$7091","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$7091","typeString":"library Address"}],"id":6925,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3307:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6924,"name":"address","nodeType":"ElementaryTypeName","src":"3307:7:26","typeDescriptions":{}}},"id":6927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3307:13:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3321:7:26","memberName":"balance","nodeType":"MemberAccess","src":"3307:21:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6929,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6919,"src":"3331:5:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3307:29:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6939,"nodeType":"IfStatement","src":"3303:108:26","trueBody":{"id":6938,"nodeType":"Block","src":"3338:73:26","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":6934,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3394:4:26","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$7091","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$7091","typeString":"library Address"}],"id":6933,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3386:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6932,"name":"address","nodeType":"ElementaryTypeName","src":"3386:7:26","typeDescriptions":{}}},"id":6935,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3386:13:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6931,"name":"AddressInsufficientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6846,"src":"3359:26:26","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":6936,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3359:41:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6937,"nodeType":"RevertStatement","src":"3352:48:26"}]}},{"assignments":[6941,6943],"declarations":[{"constant":false,"id":6941,"mutability":"mutable","name":"success","nameLocation":"3426:7:26","nodeType":"VariableDeclaration","scope":6957,"src":"3421:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6940,"name":"bool","nodeType":"ElementaryTypeName","src":"3421:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6943,"mutability":"mutable","name":"returndata","nameLocation":"3448:10:26","nodeType":"VariableDeclaration","scope":6957,"src":"3435:23:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6942,"name":"bytes","nodeType":"ElementaryTypeName","src":"3435:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":6950,"initialValue":{"arguments":[{"id":6948,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6917,"src":"3488:4:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":6944,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6915,"src":"3462:6:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3469:4:26","memberName":"call","nodeType":"MemberAccess","src":"3462:11:26","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":6947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":6946,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6919,"src":"3481:5:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"3462:25:26","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":6949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3462:31:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3420:73:26"},{"expression":{"arguments":[{"id":6952,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6915,"src":"3537:6:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6953,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6941,"src":"3545:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":6954,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6943,"src":"3554:10:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6951,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7050,"src":"3510:26:26","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":6955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3510:55:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":6923,"id":6956,"nodeType":"Return","src":"3503:62:26"}]},"documentation":{"id":6913,"nodeType":"StructuredDocumentation","src":"2862:313:26","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`."},"id":6958,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"3189:21:26","nodeType":"FunctionDefinition","parameters":{"id":6920,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6915,"mutability":"mutable","name":"target","nameLocation":"3219:6:26","nodeType":"VariableDeclaration","scope":6958,"src":"3211:14:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6914,"name":"address","nodeType":"ElementaryTypeName","src":"3211:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6917,"mutability":"mutable","name":"data","nameLocation":"3240:4:26","nodeType":"VariableDeclaration","scope":6958,"src":"3227:17:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6916,"name":"bytes","nodeType":"ElementaryTypeName","src":"3227:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":6919,"mutability":"mutable","name":"value","nameLocation":"3254:5:26","nodeType":"VariableDeclaration","scope":6958,"src":"3246:13:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6918,"name":"uint256","nodeType":"ElementaryTypeName","src":"3246:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3210:50:26"},"returnParameters":{"id":6923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6922,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6958,"src":"3279:12:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6921,"name":"bytes","nodeType":"ElementaryTypeName","src":"3279:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3278:14:26"},"scope":7091,"src":"3180:392:26","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6983,"nodeType":"Block","src":"3811:154:26","statements":[{"assignments":[6969,6971],"declarations":[{"constant":false,"id":6969,"mutability":"mutable","name":"success","nameLocation":"3827:7:26","nodeType":"VariableDeclaration","scope":6983,"src":"3822:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6968,"name":"bool","nodeType":"ElementaryTypeName","src":"3822:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6971,"mutability":"mutable","name":"returndata","nameLocation":"3849:10:26","nodeType":"VariableDeclaration","scope":6983,"src":"3836:23:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6970,"name":"bytes","nodeType":"ElementaryTypeName","src":"3836:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":6976,"initialValue":{"arguments":[{"id":6974,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6963,"src":"3881:4:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":6972,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6961,"src":"3863:6:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3870:10:26","memberName":"staticcall","nodeType":"MemberAccess","src":"3863:17:26","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":6975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3863:23:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3821:65:26"},{"expression":{"arguments":[{"id":6978,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6961,"src":"3930:6:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6979,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6969,"src":"3938:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":6980,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6971,"src":"3947:10:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6977,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7050,"src":"3903:26:26","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":6981,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3903:55:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":6967,"id":6982,"nodeType":"Return","src":"3896:62:26"}]},"documentation":{"id":6959,"nodeType":"StructuredDocumentation","src":"3578:128:26","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call."},"id":6984,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"3720:18:26","nodeType":"FunctionDefinition","parameters":{"id":6964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6961,"mutability":"mutable","name":"target","nameLocation":"3747:6:26","nodeType":"VariableDeclaration","scope":6984,"src":"3739:14:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6960,"name":"address","nodeType":"ElementaryTypeName","src":"3739:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6963,"mutability":"mutable","name":"data","nameLocation":"3768:4:26","nodeType":"VariableDeclaration","scope":6984,"src":"3755:17:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6962,"name":"bytes","nodeType":"ElementaryTypeName","src":"3755:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3738:35:26"},"returnParameters":{"id":6967,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6966,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6984,"src":"3797:12:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6965,"name":"bytes","nodeType":"ElementaryTypeName","src":"3797:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3796:14:26"},"scope":7091,"src":"3711:254:26","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7009,"nodeType":"Block","src":"4203:156:26","statements":[{"assignments":[6995,6997],"declarations":[{"constant":false,"id":6995,"mutability":"mutable","name":"success","nameLocation":"4219:7:26","nodeType":"VariableDeclaration","scope":7009,"src":"4214:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6994,"name":"bool","nodeType":"ElementaryTypeName","src":"4214:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6997,"mutability":"mutable","name":"returndata","nameLocation":"4241:10:26","nodeType":"VariableDeclaration","scope":7009,"src":"4228:23:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6996,"name":"bytes","nodeType":"ElementaryTypeName","src":"4228:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":7002,"initialValue":{"arguments":[{"id":7000,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6989,"src":"4275:4:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":6998,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6987,"src":"4255:6:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4262:12:26","memberName":"delegatecall","nodeType":"MemberAccess","src":"4255:19:26","typeDescriptions":{"typeIdentifier":"t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) returns (bool,bytes memory)"}},"id":7001,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4255:25:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"4213:67:26"},{"expression":{"arguments":[{"id":7004,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6987,"src":"4324:6:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7005,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6995,"src":"4332:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":7006,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6997,"src":"4341:10:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7003,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7050,"src":"4297:26:26","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":7007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4297:55:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":6993,"id":7008,"nodeType":"Return","src":"4290:62:26"}]},"documentation":{"id":6985,"nodeType":"StructuredDocumentation","src":"3971:130:26","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call."},"id":7010,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"4115:20:26","nodeType":"FunctionDefinition","parameters":{"id":6990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6987,"mutability":"mutable","name":"target","nameLocation":"4144:6:26","nodeType":"VariableDeclaration","scope":7010,"src":"4136:14:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6986,"name":"address","nodeType":"ElementaryTypeName","src":"4136:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6989,"mutability":"mutable","name":"data","nameLocation":"4165:4:26","nodeType":"VariableDeclaration","scope":7010,"src":"4152:17:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6988,"name":"bytes","nodeType":"ElementaryTypeName","src":"4152:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4135:35:26"},"returnParameters":{"id":6993,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6992,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7010,"src":"4189:12:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6991,"name":"bytes","nodeType":"ElementaryTypeName","src":"4189:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4188:14:26"},"scope":7091,"src":"4106:253:26","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7049,"nodeType":"Block","src":"4783:424:26","statements":[{"condition":{"id":7023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4797:8:26","subExpression":{"id":7022,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7015,"src":"4798:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7047,"nodeType":"Block","src":"4857:344:26","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7029,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7017,"src":"5045:10:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7030,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5056:6:26","memberName":"length","nodeType":"MemberAccess","src":"5045:17:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":7031,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5066:1:26","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5045:22:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":7033,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7013,"src":"5071:6:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5078:4:26","memberName":"code","nodeType":"MemberAccess","src":"5071:11:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5083:6:26","memberName":"length","nodeType":"MemberAccess","src":"5071:18:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":7036,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5093:1:26","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5071:23:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5045:49:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7044,"nodeType":"IfStatement","src":"5041:119:26","trueBody":{"id":7043,"nodeType":"Block","src":"5096:64:26","statements":[{"errorCall":{"arguments":[{"id":7040,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7013,"src":"5138:6:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7039,"name":"AddressEmptyCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6851,"src":"5121:16:26","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":7041,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5121:24:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7042,"nodeType":"RevertStatement","src":"5114:31:26"}]}},{"expression":{"id":7045,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7017,"src":"5180:10:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":7021,"id":7046,"nodeType":"Return","src":"5173:17:26"}]},"id":7048,"nodeType":"IfStatement","src":"4793:408:26","trueBody":{"id":7028,"nodeType":"Block","src":"4807:44:26","statements":[{"expression":{"arguments":[{"id":7025,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7017,"src":"4829:10:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7024,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7090,"src":"4821:7:26","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":7026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4821:19:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7027,"nodeType":"ExpressionStatement","src":"4821:19:26"}]}}]},"documentation":{"id":7011,"nodeType":"StructuredDocumentation","src":"4365:255:26","text":" @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an\n unsuccessful call."},"id":7050,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResultFromTarget","nameLocation":"4634:26:26","nodeType":"FunctionDefinition","parameters":{"id":7018,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7013,"mutability":"mutable","name":"target","nameLocation":"4678:6:26","nodeType":"VariableDeclaration","scope":7050,"src":"4670:14:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7012,"name":"address","nodeType":"ElementaryTypeName","src":"4670:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7015,"mutability":"mutable","name":"success","nameLocation":"4699:7:26","nodeType":"VariableDeclaration","scope":7050,"src":"4694:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7014,"name":"bool","nodeType":"ElementaryTypeName","src":"4694:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":7017,"mutability":"mutable","name":"returndata","nameLocation":"4729:10:26","nodeType":"VariableDeclaration","scope":7050,"src":"4716:23:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7016,"name":"bytes","nodeType":"ElementaryTypeName","src":"4716:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4660:85:26"},"returnParameters":{"id":7021,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7020,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7050,"src":"4769:12:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7019,"name":"bytes","nodeType":"ElementaryTypeName","src":"4769:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4768:14:26"},"scope":7091,"src":"4625:582:26","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7071,"nodeType":"Block","src":"5509:122:26","statements":[{"condition":{"id":7061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"5523:8:26","subExpression":{"id":7060,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7053,"src":"5524:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7069,"nodeType":"Block","src":"5583:42:26","statements":[{"expression":{"id":7067,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7055,"src":"5604:10:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":7059,"id":7068,"nodeType":"Return","src":"5597:17:26"}]},"id":7070,"nodeType":"IfStatement","src":"5519:106:26","trueBody":{"id":7066,"nodeType":"Block","src":"5533:44:26","statements":[{"expression":{"arguments":[{"id":7063,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7055,"src":"5555:10:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7062,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7090,"src":"5547:7:26","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":7064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5547:19:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7065,"nodeType":"ExpressionStatement","src":"5547:19:26"}]}}]},"documentation":{"id":7051,"nodeType":"StructuredDocumentation","src":"5213:189:26","text":" @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n revert reason or with a default {FailedInnerCall} error."},"id":7072,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResult","nameLocation":"5416:16:26","nodeType":"FunctionDefinition","parameters":{"id":7056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7053,"mutability":"mutable","name":"success","nameLocation":"5438:7:26","nodeType":"VariableDeclaration","scope":7072,"src":"5433:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7052,"name":"bool","nodeType":"ElementaryTypeName","src":"5433:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":7055,"mutability":"mutable","name":"returndata","nameLocation":"5460:10:26","nodeType":"VariableDeclaration","scope":7072,"src":"5447:23:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7054,"name":"bytes","nodeType":"ElementaryTypeName","src":"5447:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5432:39:26"},"returnParameters":{"id":7059,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7058,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7072,"src":"5495:12:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7057,"name":"bytes","nodeType":"ElementaryTypeName","src":"5495:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5494:14:26"},"scope":7091,"src":"5407:224:26","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7089,"nodeType":"Block","src":"5798:461:26","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7078,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7075,"src":"5874:10:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5885:6:26","memberName":"length","nodeType":"MemberAccess","src":"5874:17:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":7080,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5894:1:26","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5874:21:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7087,"nodeType":"Block","src":"6204:49:26","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7084,"name":"FailedInnerCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6854,"src":"6225:15:26","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7085,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6225:17:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7086,"nodeType":"RevertStatement","src":"6218:24:26"}]},"id":7088,"nodeType":"IfStatement","src":"5870:383:26","trueBody":{"id":7083,"nodeType":"Block","src":"5897:301:26","statements":[{"AST":{"nativeSrc":"6055:133:26","nodeType":"YulBlock","src":"6055:133:26","statements":[{"nativeSrc":"6073:40:26","nodeType":"YulVariableDeclaration","src":"6073:40:26","value":{"arguments":[{"name":"returndata","nativeSrc":"6102:10:26","nodeType":"YulIdentifier","src":"6102:10:26"}],"functionName":{"name":"mload","nativeSrc":"6096:5:26","nodeType":"YulIdentifier","src":"6096:5:26"},"nativeSrc":"6096:17:26","nodeType":"YulFunctionCall","src":"6096:17:26"},"variables":[{"name":"returndata_size","nativeSrc":"6077:15:26","nodeType":"YulTypedName","src":"6077:15:26","type":""}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"6141:2:26","nodeType":"YulLiteral","src":"6141:2:26","type":"","value":"32"},{"name":"returndata","nativeSrc":"6145:10:26","nodeType":"YulIdentifier","src":"6145:10:26"}],"functionName":{"name":"add","nativeSrc":"6137:3:26","nodeType":"YulIdentifier","src":"6137:3:26"},"nativeSrc":"6137:19:26","nodeType":"YulFunctionCall","src":"6137:19:26"},{"name":"returndata_size","nativeSrc":"6158:15:26","nodeType":"YulIdentifier","src":"6158:15:26"}],"functionName":{"name":"revert","nativeSrc":"6130:6:26","nodeType":"YulIdentifier","src":"6130:6:26"},"nativeSrc":"6130:44:26","nodeType":"YulFunctionCall","src":"6130:44:26"},"nativeSrc":"6130:44:26","nodeType":"YulExpressionStatement","src":"6130:44:26"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7075,"isOffset":false,"isSlot":false,"src":"6102:10:26","valueSize":1},{"declaration":7075,"isOffset":false,"isSlot":false,"src":"6145:10:26","valueSize":1}],"id":7082,"nodeType":"InlineAssembly","src":"6046:142:26"}]}}]},"documentation":{"id":7073,"nodeType":"StructuredDocumentation","src":"5637:101:26","text":" @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}."},"id":7090,"implemented":true,"kind":"function","modifiers":[],"name":"_revert","nameLocation":"5752:7:26","nodeType":"FunctionDefinition","parameters":{"id":7076,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7075,"mutability":"mutable","name":"returndata","nameLocation":"5773:10:26","nodeType":"VariableDeclaration","scope":7090,"src":"5760:23:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7074,"name":"bytes","nodeType":"ElementaryTypeName","src":"5760:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5759:25:26"},"returnParameters":{"id":7077,"nodeType":"ParameterList","parameters":[],"src":"5798:0:26"},"scope":7091,"src":"5743:516:26","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":7092,"src":"195:6066:26","usedErrors":[6846,6851,6854],"usedEvents":[]}],"src":"101:6161:26"},"id":26},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","exportedSymbols":{"SafeCast":[8846]},"id":8847,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7093,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"192:24:27"},{"abstract":false,"baseContracts":[],"canonicalName":"SafeCast","contractDependencies":[],"contractKind":"library","documentation":{"id":7094,"nodeType":"StructuredDocumentation","src":"218:545:27","text":" @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\n checks.\n Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n easily result in undesired exploitation or bugs, since developers usually\n assume that overflows raise errors. `SafeCast` restores this intuition by\n reverting the transaction when such an operation overflows.\n Using this library instead of the unchecked operations eliminates an entire\n class of bugs, so it's recommended to use it always."},"fullyImplemented":true,"id":8846,"linearizedBaseContracts":[8846],"name":"SafeCast","nameLocation":"772:8:27","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":7095,"nodeType":"StructuredDocumentation","src":"787:68:27","text":" @dev Value doesn't fit in an uint of `bits` size."},"errorSelector":"6dfcc650","id":7101,"name":"SafeCastOverflowedUintDowncast","nameLocation":"866:30:27","nodeType":"ErrorDefinition","parameters":{"id":7100,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7097,"mutability":"mutable","name":"bits","nameLocation":"903:4:27","nodeType":"VariableDeclaration","scope":7101,"src":"897:10:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7096,"name":"uint8","nodeType":"ElementaryTypeName","src":"897:5:27","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":7099,"mutability":"mutable","name":"value","nameLocation":"917:5:27","nodeType":"VariableDeclaration","scope":7101,"src":"909:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7098,"name":"uint256","nodeType":"ElementaryTypeName","src":"909:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"896:27:27"},"src":"860:64:27"},{"documentation":{"id":7102,"nodeType":"StructuredDocumentation","src":"930:75:27","text":" @dev An int value doesn't fit in an uint of `bits` size."},"errorSelector":"a8ce4432","id":7106,"name":"SafeCastOverflowedIntToUint","nameLocation":"1016:27:27","nodeType":"ErrorDefinition","parameters":{"id":7105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7104,"mutability":"mutable","name":"value","nameLocation":"1051:5:27","nodeType":"VariableDeclaration","scope":7106,"src":"1044:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":7103,"name":"int256","nodeType":"ElementaryTypeName","src":"1044:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1043:14:27"},"src":"1010:48:27"},{"documentation":{"id":7107,"nodeType":"StructuredDocumentation","src":"1064:67:27","text":" @dev Value doesn't fit in an int of `bits` size."},"errorSelector":"327269a7","id":7113,"name":"SafeCastOverflowedIntDowncast","nameLocation":"1142:29:27","nodeType":"ErrorDefinition","parameters":{"id":7112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7109,"mutability":"mutable","name":"bits","nameLocation":"1178:4:27","nodeType":"VariableDeclaration","scope":7113,"src":"1172:10:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7108,"name":"uint8","nodeType":"ElementaryTypeName","src":"1172:5:27","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":7111,"mutability":"mutable","name":"value","nameLocation":"1191:5:27","nodeType":"VariableDeclaration","scope":7113,"src":"1184:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":7110,"name":"int256","nodeType":"ElementaryTypeName","src":"1184:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1171:26:27"},"src":"1136:62:27"},{"documentation":{"id":7114,"nodeType":"StructuredDocumentation","src":"1204:75:27","text":" @dev An uint value doesn't fit in an int of `bits` size."},"errorSelector":"24775e06","id":7118,"name":"SafeCastOverflowedUintToInt","nameLocation":"1290:27:27","nodeType":"ErrorDefinition","parameters":{"id":7117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7116,"mutability":"mutable","name":"value","nameLocation":"1326:5:27","nodeType":"VariableDeclaration","scope":7118,"src":"1318:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7115,"name":"uint256","nodeType":"ElementaryTypeName","src":"1318:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1317:15:27"},"src":"1284:49:27"},{"body":{"id":7145,"nodeType":"Block","src":"1690:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7126,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7121,"src":"1704:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7129,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1717:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"},"typeName":{"id":7128,"name":"uint248","nodeType":"ElementaryTypeName","src":"1717:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"}],"id":7127,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"1712:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7130,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1712:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint248","typeString":"type(uint248)"}},"id":7131,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1726:3:27","memberName":"max","nodeType":"MemberAccess","src":"1712:17:27","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"src":"1704:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7139,"nodeType":"IfStatement","src":"1700:105:27","trueBody":{"id":7138,"nodeType":"Block","src":"1731:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"323438","id":7134,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1783:3:27","typeDescriptions":{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},"value":"248"},{"id":7135,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7121,"src":"1788:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7133,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"1752:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7136,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1752:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7137,"nodeType":"RevertStatement","src":"1745:49:27"}]}},{"expression":{"arguments":[{"id":7142,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7121,"src":"1829:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7141,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1821:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"},"typeName":{"id":7140,"name":"uint248","nodeType":"ElementaryTypeName","src":"1821:7:27","typeDescriptions":{}}},"id":7143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1821:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"functionReturnParameters":7125,"id":7144,"nodeType":"Return","src":"1814:21:27"}]},"documentation":{"id":7119,"nodeType":"StructuredDocumentation","src":"1339:280:27","text":" @dev Returns the downcasted uint248 from uint256, reverting on\n overflow (when the input is greater than largest uint248).\n Counterpart to Solidity's `uint248` operator.\n Requirements:\n - input must fit into 248 bits"},"id":7146,"implemented":true,"kind":"function","modifiers":[],"name":"toUint248","nameLocation":"1633:9:27","nodeType":"FunctionDefinition","parameters":{"id":7122,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7121,"mutability":"mutable","name":"value","nameLocation":"1651:5:27","nodeType":"VariableDeclaration","scope":7146,"src":"1643:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7120,"name":"uint256","nodeType":"ElementaryTypeName","src":"1643:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1642:15:27"},"returnParameters":{"id":7125,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7124,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7146,"src":"1681:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"},"typeName":{"id":7123,"name":"uint248","nodeType":"ElementaryTypeName","src":"1681:7:27","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"visibility":"internal"}],"src":"1680:9:27"},"scope":8846,"src":"1624:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7173,"nodeType":"Block","src":"2199:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7154,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7149,"src":"2213:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7157,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2226:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"},"typeName":{"id":7156,"name":"uint240","nodeType":"ElementaryTypeName","src":"2226:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"}],"id":7155,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2221:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7158,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2221:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint240","typeString":"type(uint240)"}},"id":7159,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2235:3:27","memberName":"max","nodeType":"MemberAccess","src":"2221:17:27","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"src":"2213:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7167,"nodeType":"IfStatement","src":"2209:105:27","trueBody":{"id":7166,"nodeType":"Block","src":"2240:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"323430","id":7162,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2292:3:27","typeDescriptions":{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},"value":"240"},{"id":7163,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7149,"src":"2297:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7161,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"2261:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2261:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7165,"nodeType":"RevertStatement","src":"2254:49:27"}]}},{"expression":{"arguments":[{"id":7170,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7149,"src":"2338:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7169,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2330:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"},"typeName":{"id":7168,"name":"uint240","nodeType":"ElementaryTypeName","src":"2330:7:27","typeDescriptions":{}}},"id":7171,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2330:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"functionReturnParameters":7153,"id":7172,"nodeType":"Return","src":"2323:21:27"}]},"documentation":{"id":7147,"nodeType":"StructuredDocumentation","src":"1848:280:27","text":" @dev Returns the downcasted uint240 from uint256, reverting on\n overflow (when the input is greater than largest uint240).\n Counterpart to Solidity's `uint240` operator.\n Requirements:\n - input must fit into 240 bits"},"id":7174,"implemented":true,"kind":"function","modifiers":[],"name":"toUint240","nameLocation":"2142:9:27","nodeType":"FunctionDefinition","parameters":{"id":7150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7149,"mutability":"mutable","name":"value","nameLocation":"2160:5:27","nodeType":"VariableDeclaration","scope":7174,"src":"2152:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7148,"name":"uint256","nodeType":"ElementaryTypeName","src":"2152:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2151:15:27"},"returnParameters":{"id":7153,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7152,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7174,"src":"2190:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"},"typeName":{"id":7151,"name":"uint240","nodeType":"ElementaryTypeName","src":"2190:7:27","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"visibility":"internal"}],"src":"2189:9:27"},"scope":8846,"src":"2133:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7201,"nodeType":"Block","src":"2708:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7182,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7177,"src":"2722:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7185,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2735:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"},"typeName":{"id":7184,"name":"uint232","nodeType":"ElementaryTypeName","src":"2735:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"}],"id":7183,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2730:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7186,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2730:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint232","typeString":"type(uint232)"}},"id":7187,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2744:3:27","memberName":"max","nodeType":"MemberAccess","src":"2730:17:27","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"src":"2722:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7195,"nodeType":"IfStatement","src":"2718:105:27","trueBody":{"id":7194,"nodeType":"Block","src":"2749:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"323332","id":7190,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2801:3:27","typeDescriptions":{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},"value":"232"},{"id":7191,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7177,"src":"2806:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7189,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"2770:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2770:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7193,"nodeType":"RevertStatement","src":"2763:49:27"}]}},{"expression":{"arguments":[{"id":7198,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7177,"src":"2847:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7197,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2839:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"},"typeName":{"id":7196,"name":"uint232","nodeType":"ElementaryTypeName","src":"2839:7:27","typeDescriptions":{}}},"id":7199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2839:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"functionReturnParameters":7181,"id":7200,"nodeType":"Return","src":"2832:21:27"}]},"documentation":{"id":7175,"nodeType":"StructuredDocumentation","src":"2357:280:27","text":" @dev Returns the downcasted uint232 from uint256, reverting on\n overflow (when the input is greater than largest uint232).\n Counterpart to Solidity's `uint232` operator.\n Requirements:\n - input must fit into 232 bits"},"id":7202,"implemented":true,"kind":"function","modifiers":[],"name":"toUint232","nameLocation":"2651:9:27","nodeType":"FunctionDefinition","parameters":{"id":7178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7177,"mutability":"mutable","name":"value","nameLocation":"2669:5:27","nodeType":"VariableDeclaration","scope":7202,"src":"2661:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7176,"name":"uint256","nodeType":"ElementaryTypeName","src":"2661:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2660:15:27"},"returnParameters":{"id":7181,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7180,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7202,"src":"2699:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"},"typeName":{"id":7179,"name":"uint232","nodeType":"ElementaryTypeName","src":"2699:7:27","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"visibility":"internal"}],"src":"2698:9:27"},"scope":8846,"src":"2642:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7229,"nodeType":"Block","src":"3217:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7210,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7205,"src":"3231:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7213,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3244:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":7212,"name":"uint224","nodeType":"ElementaryTypeName","src":"3244:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"}],"id":7211,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3239:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7214,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3239:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint224","typeString":"type(uint224)"}},"id":7215,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3253:3:27","memberName":"max","nodeType":"MemberAccess","src":"3239:17:27","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"src":"3231:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7223,"nodeType":"IfStatement","src":"3227:105:27","trueBody":{"id":7222,"nodeType":"Block","src":"3258:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"323234","id":7218,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3310:3:27","typeDescriptions":{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},"value":"224"},{"id":7219,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7205,"src":"3315:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7217,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"3279:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3279:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7221,"nodeType":"RevertStatement","src":"3272:49:27"}]}},{"expression":{"arguments":[{"id":7226,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7205,"src":"3356:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7225,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3348:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":7224,"name":"uint224","nodeType":"ElementaryTypeName","src":"3348:7:27","typeDescriptions":{}}},"id":7227,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3348:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"functionReturnParameters":7209,"id":7228,"nodeType":"Return","src":"3341:21:27"}]},"documentation":{"id":7203,"nodeType":"StructuredDocumentation","src":"2866:280:27","text":" @dev Returns the downcasted uint224 from uint256, reverting on\n overflow (when the input is greater than largest uint224).\n Counterpart to Solidity's `uint224` operator.\n Requirements:\n - input must fit into 224 bits"},"id":7230,"implemented":true,"kind":"function","modifiers":[],"name":"toUint224","nameLocation":"3160:9:27","nodeType":"FunctionDefinition","parameters":{"id":7206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7205,"mutability":"mutable","name":"value","nameLocation":"3178:5:27","nodeType":"VariableDeclaration","scope":7230,"src":"3170:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7204,"name":"uint256","nodeType":"ElementaryTypeName","src":"3170:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3169:15:27"},"returnParameters":{"id":7209,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7208,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7230,"src":"3208:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"},"typeName":{"id":7207,"name":"uint224","nodeType":"ElementaryTypeName","src":"3208:7:27","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"visibility":"internal"}],"src":"3207:9:27"},"scope":8846,"src":"3151:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7257,"nodeType":"Block","src":"3726:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7238,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7233,"src":"3740:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7241,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3753:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"},"typeName":{"id":7240,"name":"uint216","nodeType":"ElementaryTypeName","src":"3753:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"}],"id":7239,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3748:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7242,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3748:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint216","typeString":"type(uint216)"}},"id":7243,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3762:3:27","memberName":"max","nodeType":"MemberAccess","src":"3748:17:27","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"src":"3740:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7251,"nodeType":"IfStatement","src":"3736:105:27","trueBody":{"id":7250,"nodeType":"Block","src":"3767:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"323136","id":7246,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3819:3:27","typeDescriptions":{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},"value":"216"},{"id":7247,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7233,"src":"3824:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7245,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"3788:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7248,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3788:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7249,"nodeType":"RevertStatement","src":"3781:49:27"}]}},{"expression":{"arguments":[{"id":7254,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7233,"src":"3865:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7253,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3857:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"},"typeName":{"id":7252,"name":"uint216","nodeType":"ElementaryTypeName","src":"3857:7:27","typeDescriptions":{}}},"id":7255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3857:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"functionReturnParameters":7237,"id":7256,"nodeType":"Return","src":"3850:21:27"}]},"documentation":{"id":7231,"nodeType":"StructuredDocumentation","src":"3375:280:27","text":" @dev Returns the downcasted uint216 from uint256, reverting on\n overflow (when the input is greater than largest uint216).\n Counterpart to Solidity's `uint216` operator.\n Requirements:\n - input must fit into 216 bits"},"id":7258,"implemented":true,"kind":"function","modifiers":[],"name":"toUint216","nameLocation":"3669:9:27","nodeType":"FunctionDefinition","parameters":{"id":7234,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7233,"mutability":"mutable","name":"value","nameLocation":"3687:5:27","nodeType":"VariableDeclaration","scope":7258,"src":"3679:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7232,"name":"uint256","nodeType":"ElementaryTypeName","src":"3679:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3678:15:27"},"returnParameters":{"id":7237,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7236,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7258,"src":"3717:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"},"typeName":{"id":7235,"name":"uint216","nodeType":"ElementaryTypeName","src":"3717:7:27","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"visibility":"internal"}],"src":"3716:9:27"},"scope":8846,"src":"3660:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7285,"nodeType":"Block","src":"4235:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7266,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7261,"src":"4249:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7269,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4262:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"},"typeName":{"id":7268,"name":"uint208","nodeType":"ElementaryTypeName","src":"4262:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"}],"id":7267,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4257:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7270,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4257:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint208","typeString":"type(uint208)"}},"id":7271,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4271:3:27","memberName":"max","nodeType":"MemberAccess","src":"4257:17:27","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"src":"4249:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7279,"nodeType":"IfStatement","src":"4245:105:27","trueBody":{"id":7278,"nodeType":"Block","src":"4276:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"323038","id":7274,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4328:3:27","typeDescriptions":{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},"value":"208"},{"id":7275,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7261,"src":"4333:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7273,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"4297:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7276,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4297:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7277,"nodeType":"RevertStatement","src":"4290:49:27"}]}},{"expression":{"arguments":[{"id":7282,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7261,"src":"4374:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7281,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4366:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"},"typeName":{"id":7280,"name":"uint208","nodeType":"ElementaryTypeName","src":"4366:7:27","typeDescriptions":{}}},"id":7283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4366:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"functionReturnParameters":7265,"id":7284,"nodeType":"Return","src":"4359:21:27"}]},"documentation":{"id":7259,"nodeType":"StructuredDocumentation","src":"3884:280:27","text":" @dev Returns the downcasted uint208 from uint256, reverting on\n overflow (when the input is greater than largest uint208).\n Counterpart to Solidity's `uint208` operator.\n Requirements:\n - input must fit into 208 bits"},"id":7286,"implemented":true,"kind":"function","modifiers":[],"name":"toUint208","nameLocation":"4178:9:27","nodeType":"FunctionDefinition","parameters":{"id":7262,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7261,"mutability":"mutable","name":"value","nameLocation":"4196:5:27","nodeType":"VariableDeclaration","scope":7286,"src":"4188:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7260,"name":"uint256","nodeType":"ElementaryTypeName","src":"4188:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4187:15:27"},"returnParameters":{"id":7265,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7264,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7286,"src":"4226:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"},"typeName":{"id":7263,"name":"uint208","nodeType":"ElementaryTypeName","src":"4226:7:27","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"visibility":"internal"}],"src":"4225:9:27"},"scope":8846,"src":"4169:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7313,"nodeType":"Block","src":"4744:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7294,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7289,"src":"4758:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7297,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4771:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"},"typeName":{"id":7296,"name":"uint200","nodeType":"ElementaryTypeName","src":"4771:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"}],"id":7295,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4766:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7298,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4766:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint200","typeString":"type(uint200)"}},"id":7299,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4780:3:27","memberName":"max","nodeType":"MemberAccess","src":"4766:17:27","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"src":"4758:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7307,"nodeType":"IfStatement","src":"4754:105:27","trueBody":{"id":7306,"nodeType":"Block","src":"4785:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"323030","id":7302,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4837:3:27","typeDescriptions":{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},"value":"200"},{"id":7303,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7289,"src":"4842:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7301,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"4806:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4806:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7305,"nodeType":"RevertStatement","src":"4799:49:27"}]}},{"expression":{"arguments":[{"id":7310,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7289,"src":"4883:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7309,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4875:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"},"typeName":{"id":7308,"name":"uint200","nodeType":"ElementaryTypeName","src":"4875:7:27","typeDescriptions":{}}},"id":7311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4875:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"functionReturnParameters":7293,"id":7312,"nodeType":"Return","src":"4868:21:27"}]},"documentation":{"id":7287,"nodeType":"StructuredDocumentation","src":"4393:280:27","text":" @dev Returns the downcasted uint200 from uint256, reverting on\n overflow (when the input is greater than largest uint200).\n Counterpart to Solidity's `uint200` operator.\n Requirements:\n - input must fit into 200 bits"},"id":7314,"implemented":true,"kind":"function","modifiers":[],"name":"toUint200","nameLocation":"4687:9:27","nodeType":"FunctionDefinition","parameters":{"id":7290,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7289,"mutability":"mutable","name":"value","nameLocation":"4705:5:27","nodeType":"VariableDeclaration","scope":7314,"src":"4697:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7288,"name":"uint256","nodeType":"ElementaryTypeName","src":"4697:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4696:15:27"},"returnParameters":{"id":7293,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7292,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7314,"src":"4735:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"},"typeName":{"id":7291,"name":"uint200","nodeType":"ElementaryTypeName","src":"4735:7:27","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"visibility":"internal"}],"src":"4734:9:27"},"scope":8846,"src":"4678:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7341,"nodeType":"Block","src":"5253:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7322,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7317,"src":"5267:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7325,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5280:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"},"typeName":{"id":7324,"name":"uint192","nodeType":"ElementaryTypeName","src":"5280:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"}],"id":7323,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5275:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7326,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5275:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint192","typeString":"type(uint192)"}},"id":7327,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5289:3:27","memberName":"max","nodeType":"MemberAccess","src":"5275:17:27","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"src":"5267:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7335,"nodeType":"IfStatement","src":"5263:105:27","trueBody":{"id":7334,"nodeType":"Block","src":"5294:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313932","id":7330,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5346:3:27","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},{"id":7331,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7317,"src":"5351:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7329,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"5315:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7332,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5315:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7333,"nodeType":"RevertStatement","src":"5308:49:27"}]}},{"expression":{"arguments":[{"id":7338,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7317,"src":"5392:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7337,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5384:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"},"typeName":{"id":7336,"name":"uint192","nodeType":"ElementaryTypeName","src":"5384:7:27","typeDescriptions":{}}},"id":7339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5384:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"functionReturnParameters":7321,"id":7340,"nodeType":"Return","src":"5377:21:27"}]},"documentation":{"id":7315,"nodeType":"StructuredDocumentation","src":"4902:280:27","text":" @dev Returns the downcasted uint192 from uint256, reverting on\n overflow (when the input is greater than largest uint192).\n Counterpart to Solidity's `uint192` operator.\n Requirements:\n - input must fit into 192 bits"},"id":7342,"implemented":true,"kind":"function","modifiers":[],"name":"toUint192","nameLocation":"5196:9:27","nodeType":"FunctionDefinition","parameters":{"id":7318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7317,"mutability":"mutable","name":"value","nameLocation":"5214:5:27","nodeType":"VariableDeclaration","scope":7342,"src":"5206:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7316,"name":"uint256","nodeType":"ElementaryTypeName","src":"5206:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5205:15:27"},"returnParameters":{"id":7321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7320,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7342,"src":"5244:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"},"typeName":{"id":7319,"name":"uint192","nodeType":"ElementaryTypeName","src":"5244:7:27","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"visibility":"internal"}],"src":"5243:9:27"},"scope":8846,"src":"5187:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7369,"nodeType":"Block","src":"5762:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7350,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7345,"src":"5776:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7353,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5789:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"},"typeName":{"id":7352,"name":"uint184","nodeType":"ElementaryTypeName","src":"5789:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"}],"id":7351,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5784:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7354,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5784:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint184","typeString":"type(uint184)"}},"id":7355,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5798:3:27","memberName":"max","nodeType":"MemberAccess","src":"5784:17:27","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"src":"5776:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7363,"nodeType":"IfStatement","src":"5772:105:27","trueBody":{"id":7362,"nodeType":"Block","src":"5803:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313834","id":7358,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5855:3:27","typeDescriptions":{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},"value":"184"},{"id":7359,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7345,"src":"5860:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7357,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"5824:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7360,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5824:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7361,"nodeType":"RevertStatement","src":"5817:49:27"}]}},{"expression":{"arguments":[{"id":7366,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7345,"src":"5901:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7365,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5893:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"},"typeName":{"id":7364,"name":"uint184","nodeType":"ElementaryTypeName","src":"5893:7:27","typeDescriptions":{}}},"id":7367,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5893:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"functionReturnParameters":7349,"id":7368,"nodeType":"Return","src":"5886:21:27"}]},"documentation":{"id":7343,"nodeType":"StructuredDocumentation","src":"5411:280:27","text":" @dev Returns the downcasted uint184 from uint256, reverting on\n overflow (when the input is greater than largest uint184).\n Counterpart to Solidity's `uint184` operator.\n Requirements:\n - input must fit into 184 bits"},"id":7370,"implemented":true,"kind":"function","modifiers":[],"name":"toUint184","nameLocation":"5705:9:27","nodeType":"FunctionDefinition","parameters":{"id":7346,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7345,"mutability":"mutable","name":"value","nameLocation":"5723:5:27","nodeType":"VariableDeclaration","scope":7370,"src":"5715:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7344,"name":"uint256","nodeType":"ElementaryTypeName","src":"5715:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5714:15:27"},"returnParameters":{"id":7349,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7348,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7370,"src":"5753:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"},"typeName":{"id":7347,"name":"uint184","nodeType":"ElementaryTypeName","src":"5753:7:27","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"visibility":"internal"}],"src":"5752:9:27"},"scope":8846,"src":"5696:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7397,"nodeType":"Block","src":"6271:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7378,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7373,"src":"6285:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7381,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6298:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"},"typeName":{"id":7380,"name":"uint176","nodeType":"ElementaryTypeName","src":"6298:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"}],"id":7379,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6293:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7382,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6293:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint176","typeString":"type(uint176)"}},"id":7383,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6307:3:27","memberName":"max","nodeType":"MemberAccess","src":"6293:17:27","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"src":"6285:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7391,"nodeType":"IfStatement","src":"6281:105:27","trueBody":{"id":7390,"nodeType":"Block","src":"6312:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313736","id":7386,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6364:3:27","typeDescriptions":{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},"value":"176"},{"id":7387,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7373,"src":"6369:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7385,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"6333:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7388,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6333:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7389,"nodeType":"RevertStatement","src":"6326:49:27"}]}},{"expression":{"arguments":[{"id":7394,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7373,"src":"6410:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7393,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6402:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"},"typeName":{"id":7392,"name":"uint176","nodeType":"ElementaryTypeName","src":"6402:7:27","typeDescriptions":{}}},"id":7395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6402:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"functionReturnParameters":7377,"id":7396,"nodeType":"Return","src":"6395:21:27"}]},"documentation":{"id":7371,"nodeType":"StructuredDocumentation","src":"5920:280:27","text":" @dev Returns the downcasted uint176 from uint256, reverting on\n overflow (when the input is greater than largest uint176).\n Counterpart to Solidity's `uint176` operator.\n Requirements:\n - input must fit into 176 bits"},"id":7398,"implemented":true,"kind":"function","modifiers":[],"name":"toUint176","nameLocation":"6214:9:27","nodeType":"FunctionDefinition","parameters":{"id":7374,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7373,"mutability":"mutable","name":"value","nameLocation":"6232:5:27","nodeType":"VariableDeclaration","scope":7398,"src":"6224:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7372,"name":"uint256","nodeType":"ElementaryTypeName","src":"6224:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6223:15:27"},"returnParameters":{"id":7377,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7376,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7398,"src":"6262:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"},"typeName":{"id":7375,"name":"uint176","nodeType":"ElementaryTypeName","src":"6262:7:27","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"visibility":"internal"}],"src":"6261:9:27"},"scope":8846,"src":"6205:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7425,"nodeType":"Block","src":"6780:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7406,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7401,"src":"6794:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7409,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6807:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"},"typeName":{"id":7408,"name":"uint168","nodeType":"ElementaryTypeName","src":"6807:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"}],"id":7407,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6802:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7410,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6802:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint168","typeString":"type(uint168)"}},"id":7411,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6816:3:27","memberName":"max","nodeType":"MemberAccess","src":"6802:17:27","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"src":"6794:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7419,"nodeType":"IfStatement","src":"6790:105:27","trueBody":{"id":7418,"nodeType":"Block","src":"6821:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313638","id":7414,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6873:3:27","typeDescriptions":{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},"value":"168"},{"id":7415,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7401,"src":"6878:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7413,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"6842:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6842:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7417,"nodeType":"RevertStatement","src":"6835:49:27"}]}},{"expression":{"arguments":[{"id":7422,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7401,"src":"6919:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7421,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6911:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"},"typeName":{"id":7420,"name":"uint168","nodeType":"ElementaryTypeName","src":"6911:7:27","typeDescriptions":{}}},"id":7423,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6911:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"functionReturnParameters":7405,"id":7424,"nodeType":"Return","src":"6904:21:27"}]},"documentation":{"id":7399,"nodeType":"StructuredDocumentation","src":"6429:280:27","text":" @dev Returns the downcasted uint168 from uint256, reverting on\n overflow (when the input is greater than largest uint168).\n Counterpart to Solidity's `uint168` operator.\n Requirements:\n - input must fit into 168 bits"},"id":7426,"implemented":true,"kind":"function","modifiers":[],"name":"toUint168","nameLocation":"6723:9:27","nodeType":"FunctionDefinition","parameters":{"id":7402,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7401,"mutability":"mutable","name":"value","nameLocation":"6741:5:27","nodeType":"VariableDeclaration","scope":7426,"src":"6733:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7400,"name":"uint256","nodeType":"ElementaryTypeName","src":"6733:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6732:15:27"},"returnParameters":{"id":7405,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7404,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7426,"src":"6771:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"},"typeName":{"id":7403,"name":"uint168","nodeType":"ElementaryTypeName","src":"6771:7:27","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"visibility":"internal"}],"src":"6770:9:27"},"scope":8846,"src":"6714:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7453,"nodeType":"Block","src":"7289:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7434,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7429,"src":"7303:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7437,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7316:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":7436,"name":"uint160","nodeType":"ElementaryTypeName","src":"7316:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"}],"id":7435,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"7311:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7438,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7311:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint160","typeString":"type(uint160)"}},"id":7439,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7325:3:27","memberName":"max","nodeType":"MemberAccess","src":"7311:17:27","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"src":"7303:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7447,"nodeType":"IfStatement","src":"7299:105:27","trueBody":{"id":7446,"nodeType":"Block","src":"7330:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313630","id":7442,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7382:3:27","typeDescriptions":{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},"value":"160"},{"id":7443,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7429,"src":"7387:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7441,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"7351:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7351:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7445,"nodeType":"RevertStatement","src":"7344:49:27"}]}},{"expression":{"arguments":[{"id":7450,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7429,"src":"7428:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7449,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7420:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":7448,"name":"uint160","nodeType":"ElementaryTypeName","src":"7420:7:27","typeDescriptions":{}}},"id":7451,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7420:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"functionReturnParameters":7433,"id":7452,"nodeType":"Return","src":"7413:21:27"}]},"documentation":{"id":7427,"nodeType":"StructuredDocumentation","src":"6938:280:27","text":" @dev Returns the downcasted uint160 from uint256, reverting on\n overflow (when the input is greater than largest uint160).\n Counterpart to Solidity's `uint160` operator.\n Requirements:\n - input must fit into 160 bits"},"id":7454,"implemented":true,"kind":"function","modifiers":[],"name":"toUint160","nameLocation":"7232:9:27","nodeType":"FunctionDefinition","parameters":{"id":7430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7429,"mutability":"mutable","name":"value","nameLocation":"7250:5:27","nodeType":"VariableDeclaration","scope":7454,"src":"7242:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7428,"name":"uint256","nodeType":"ElementaryTypeName","src":"7242:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7241:15:27"},"returnParameters":{"id":7433,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7432,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7454,"src":"7280:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"},"typeName":{"id":7431,"name":"uint160","nodeType":"ElementaryTypeName","src":"7280:7:27","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"visibility":"internal"}],"src":"7279:9:27"},"scope":8846,"src":"7223:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7481,"nodeType":"Block","src":"7798:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7462,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7457,"src":"7812:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7465,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7825:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"},"typeName":{"id":7464,"name":"uint152","nodeType":"ElementaryTypeName","src":"7825:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"}],"id":7463,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"7820:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7466,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7820:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint152","typeString":"type(uint152)"}},"id":7467,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7834:3:27","memberName":"max","nodeType":"MemberAccess","src":"7820:17:27","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"src":"7812:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7475,"nodeType":"IfStatement","src":"7808:105:27","trueBody":{"id":7474,"nodeType":"Block","src":"7839:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313532","id":7470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7891:3:27","typeDescriptions":{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},"value":"152"},{"id":7471,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7457,"src":"7896:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7469,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"7860:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7860:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7473,"nodeType":"RevertStatement","src":"7853:49:27"}]}},{"expression":{"arguments":[{"id":7478,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7457,"src":"7937:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7477,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7929:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"},"typeName":{"id":7476,"name":"uint152","nodeType":"ElementaryTypeName","src":"7929:7:27","typeDescriptions":{}}},"id":7479,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7929:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"functionReturnParameters":7461,"id":7480,"nodeType":"Return","src":"7922:21:27"}]},"documentation":{"id":7455,"nodeType":"StructuredDocumentation","src":"7447:280:27","text":" @dev Returns the downcasted uint152 from uint256, reverting on\n overflow (when the input is greater than largest uint152).\n Counterpart to Solidity's `uint152` operator.\n Requirements:\n - input must fit into 152 bits"},"id":7482,"implemented":true,"kind":"function","modifiers":[],"name":"toUint152","nameLocation":"7741:9:27","nodeType":"FunctionDefinition","parameters":{"id":7458,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7457,"mutability":"mutable","name":"value","nameLocation":"7759:5:27","nodeType":"VariableDeclaration","scope":7482,"src":"7751:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7456,"name":"uint256","nodeType":"ElementaryTypeName","src":"7751:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7750:15:27"},"returnParameters":{"id":7461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7460,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7482,"src":"7789:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"},"typeName":{"id":7459,"name":"uint152","nodeType":"ElementaryTypeName","src":"7789:7:27","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"visibility":"internal"}],"src":"7788:9:27"},"scope":8846,"src":"7732:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7509,"nodeType":"Block","src":"8307:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7490,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7485,"src":"8321:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7493,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8334:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"},"typeName":{"id":7492,"name":"uint144","nodeType":"ElementaryTypeName","src":"8334:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"}],"id":7491,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8329:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7494,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8329:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint144","typeString":"type(uint144)"}},"id":7495,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8343:3:27","memberName":"max","nodeType":"MemberAccess","src":"8329:17:27","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"src":"8321:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7503,"nodeType":"IfStatement","src":"8317:105:27","trueBody":{"id":7502,"nodeType":"Block","src":"8348:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313434","id":7498,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8400:3:27","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},"value":"144"},{"id":7499,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7485,"src":"8405:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7497,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"8369:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7500,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8369:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7501,"nodeType":"RevertStatement","src":"8362:49:27"}]}},{"expression":{"arguments":[{"id":7506,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7485,"src":"8446:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7505,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8438:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"},"typeName":{"id":7504,"name":"uint144","nodeType":"ElementaryTypeName","src":"8438:7:27","typeDescriptions":{}}},"id":7507,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8438:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"functionReturnParameters":7489,"id":7508,"nodeType":"Return","src":"8431:21:27"}]},"documentation":{"id":7483,"nodeType":"StructuredDocumentation","src":"7956:280:27","text":" @dev Returns the downcasted uint144 from uint256, reverting on\n overflow (when the input is greater than largest uint144).\n Counterpart to Solidity's `uint144` operator.\n Requirements:\n - input must fit into 144 bits"},"id":7510,"implemented":true,"kind":"function","modifiers":[],"name":"toUint144","nameLocation":"8250:9:27","nodeType":"FunctionDefinition","parameters":{"id":7486,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7485,"mutability":"mutable","name":"value","nameLocation":"8268:5:27","nodeType":"VariableDeclaration","scope":7510,"src":"8260:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7484,"name":"uint256","nodeType":"ElementaryTypeName","src":"8260:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8259:15:27"},"returnParameters":{"id":7489,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7488,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7510,"src":"8298:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"},"typeName":{"id":7487,"name":"uint144","nodeType":"ElementaryTypeName","src":"8298:7:27","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"visibility":"internal"}],"src":"8297:9:27"},"scope":8846,"src":"8241:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7537,"nodeType":"Block","src":"8816:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7518,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7513,"src":"8830:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7521,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8843:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"},"typeName":{"id":7520,"name":"uint136","nodeType":"ElementaryTypeName","src":"8843:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"}],"id":7519,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8838:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7522,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8838:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint136","typeString":"type(uint136)"}},"id":7523,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8852:3:27","memberName":"max","nodeType":"MemberAccess","src":"8838:17:27","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"src":"8830:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7531,"nodeType":"IfStatement","src":"8826:105:27","trueBody":{"id":7530,"nodeType":"Block","src":"8857:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313336","id":7526,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8909:3:27","typeDescriptions":{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},"value":"136"},{"id":7527,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7513,"src":"8914:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7525,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"8878:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8878:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7529,"nodeType":"RevertStatement","src":"8871:49:27"}]}},{"expression":{"arguments":[{"id":7534,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7513,"src":"8955:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7533,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8947:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"},"typeName":{"id":7532,"name":"uint136","nodeType":"ElementaryTypeName","src":"8947:7:27","typeDescriptions":{}}},"id":7535,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8947:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"functionReturnParameters":7517,"id":7536,"nodeType":"Return","src":"8940:21:27"}]},"documentation":{"id":7511,"nodeType":"StructuredDocumentation","src":"8465:280:27","text":" @dev Returns the downcasted uint136 from uint256, reverting on\n overflow (when the input is greater than largest uint136).\n Counterpart to Solidity's `uint136` operator.\n Requirements:\n - input must fit into 136 bits"},"id":7538,"implemented":true,"kind":"function","modifiers":[],"name":"toUint136","nameLocation":"8759:9:27","nodeType":"FunctionDefinition","parameters":{"id":7514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7513,"mutability":"mutable","name":"value","nameLocation":"8777:5:27","nodeType":"VariableDeclaration","scope":7538,"src":"8769:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7512,"name":"uint256","nodeType":"ElementaryTypeName","src":"8769:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8768:15:27"},"returnParameters":{"id":7517,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7516,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7538,"src":"8807:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"},"typeName":{"id":7515,"name":"uint136","nodeType":"ElementaryTypeName","src":"8807:7:27","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"visibility":"internal"}],"src":"8806:9:27"},"scope":8846,"src":"8750:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7565,"nodeType":"Block","src":"9325:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7546,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7541,"src":"9339:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7549,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9352:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":7548,"name":"uint128","nodeType":"ElementaryTypeName","src":"9352:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"}],"id":7547,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9347:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7550,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9347:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint128","typeString":"type(uint128)"}},"id":7551,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9361:3:27","memberName":"max","nodeType":"MemberAccess","src":"9347:17:27","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"9339:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7559,"nodeType":"IfStatement","src":"9335:105:27","trueBody":{"id":7558,"nodeType":"Block","src":"9366:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313238","id":7554,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9418:3:27","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},{"id":7555,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7541,"src":"9423:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7553,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"9387:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9387:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7557,"nodeType":"RevertStatement","src":"9380:49:27"}]}},{"expression":{"arguments":[{"id":7562,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7541,"src":"9464:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7561,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9456:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":7560,"name":"uint128","nodeType":"ElementaryTypeName","src":"9456:7:27","typeDescriptions":{}}},"id":7563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9456:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":7545,"id":7564,"nodeType":"Return","src":"9449:21:27"}]},"documentation":{"id":7539,"nodeType":"StructuredDocumentation","src":"8974:280:27","text":" @dev Returns the downcasted uint128 from uint256, reverting on\n overflow (when the input is greater than largest uint128).\n Counterpart to Solidity's `uint128` operator.\n Requirements:\n - input must fit into 128 bits"},"id":7566,"implemented":true,"kind":"function","modifiers":[],"name":"toUint128","nameLocation":"9268:9:27","nodeType":"FunctionDefinition","parameters":{"id":7542,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7541,"mutability":"mutable","name":"value","nameLocation":"9286:5:27","nodeType":"VariableDeclaration","scope":7566,"src":"9278:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7540,"name":"uint256","nodeType":"ElementaryTypeName","src":"9278:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9277:15:27"},"returnParameters":{"id":7545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7544,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7566,"src":"9316:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":7543,"name":"uint128","nodeType":"ElementaryTypeName","src":"9316:7:27","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"9315:9:27"},"scope":8846,"src":"9259:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7593,"nodeType":"Block","src":"9834:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7580,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7574,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7569,"src":"9848:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7577,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9861:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"},"typeName":{"id":7576,"name":"uint120","nodeType":"ElementaryTypeName","src":"9861:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"}],"id":7575,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9856:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7578,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9856:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint120","typeString":"type(uint120)"}},"id":7579,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9870:3:27","memberName":"max","nodeType":"MemberAccess","src":"9856:17:27","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"src":"9848:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7587,"nodeType":"IfStatement","src":"9844:105:27","trueBody":{"id":7586,"nodeType":"Block","src":"9875:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313230","id":7582,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9927:3:27","typeDescriptions":{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},"value":"120"},{"id":7583,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7569,"src":"9932:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7581,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"9896:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7584,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9896:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7585,"nodeType":"RevertStatement","src":"9889:49:27"}]}},{"expression":{"arguments":[{"id":7590,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7569,"src":"9973:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7589,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9965:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"},"typeName":{"id":7588,"name":"uint120","nodeType":"ElementaryTypeName","src":"9965:7:27","typeDescriptions":{}}},"id":7591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9965:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"functionReturnParameters":7573,"id":7592,"nodeType":"Return","src":"9958:21:27"}]},"documentation":{"id":7567,"nodeType":"StructuredDocumentation","src":"9483:280:27","text":" @dev Returns the downcasted uint120 from uint256, reverting on\n overflow (when the input is greater than largest uint120).\n Counterpart to Solidity's `uint120` operator.\n Requirements:\n - input must fit into 120 bits"},"id":7594,"implemented":true,"kind":"function","modifiers":[],"name":"toUint120","nameLocation":"9777:9:27","nodeType":"FunctionDefinition","parameters":{"id":7570,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7569,"mutability":"mutable","name":"value","nameLocation":"9795:5:27","nodeType":"VariableDeclaration","scope":7594,"src":"9787:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7568,"name":"uint256","nodeType":"ElementaryTypeName","src":"9787:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9786:15:27"},"returnParameters":{"id":7573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7572,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7594,"src":"9825:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"},"typeName":{"id":7571,"name":"uint120","nodeType":"ElementaryTypeName","src":"9825:7:27","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"visibility":"internal"}],"src":"9824:9:27"},"scope":8846,"src":"9768:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7621,"nodeType":"Block","src":"10343:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7602,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7597,"src":"10357:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7605,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10370:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"},"typeName":{"id":7604,"name":"uint112","nodeType":"ElementaryTypeName","src":"10370:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"}],"id":7603,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10365:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7606,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10365:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint112","typeString":"type(uint112)"}},"id":7607,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10379:3:27","memberName":"max","nodeType":"MemberAccess","src":"10365:17:27","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"src":"10357:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7615,"nodeType":"IfStatement","src":"10353:105:27","trueBody":{"id":7614,"nodeType":"Block","src":"10384:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313132","id":7610,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10436:3:27","typeDescriptions":{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},"value":"112"},{"id":7611,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7597,"src":"10441:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7609,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"10405:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7612,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10405:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7613,"nodeType":"RevertStatement","src":"10398:49:27"}]}},{"expression":{"arguments":[{"id":7618,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7597,"src":"10482:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7617,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10474:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"},"typeName":{"id":7616,"name":"uint112","nodeType":"ElementaryTypeName","src":"10474:7:27","typeDescriptions":{}}},"id":7619,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10474:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"functionReturnParameters":7601,"id":7620,"nodeType":"Return","src":"10467:21:27"}]},"documentation":{"id":7595,"nodeType":"StructuredDocumentation","src":"9992:280:27","text":" @dev Returns the downcasted uint112 from uint256, reverting on\n overflow (when the input is greater than largest uint112).\n Counterpart to Solidity's `uint112` operator.\n Requirements:\n - input must fit into 112 bits"},"id":7622,"implemented":true,"kind":"function","modifiers":[],"name":"toUint112","nameLocation":"10286:9:27","nodeType":"FunctionDefinition","parameters":{"id":7598,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7597,"mutability":"mutable","name":"value","nameLocation":"10304:5:27","nodeType":"VariableDeclaration","scope":7622,"src":"10296:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7596,"name":"uint256","nodeType":"ElementaryTypeName","src":"10296:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10295:15:27"},"returnParameters":{"id":7601,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7600,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7622,"src":"10334:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"},"typeName":{"id":7599,"name":"uint112","nodeType":"ElementaryTypeName","src":"10334:7:27","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"visibility":"internal"}],"src":"10333:9:27"},"scope":8846,"src":"10277:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7649,"nodeType":"Block","src":"10852:152:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7636,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7630,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7625,"src":"10866:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7633,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10879:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"},"typeName":{"id":7632,"name":"uint104","nodeType":"ElementaryTypeName","src":"10879:7:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"}],"id":7631,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10874:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7634,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10874:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint104","typeString":"type(uint104)"}},"id":7635,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10888:3:27","memberName":"max","nodeType":"MemberAccess","src":"10874:17:27","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"src":"10866:25:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7643,"nodeType":"IfStatement","src":"10862:105:27","trueBody":{"id":7642,"nodeType":"Block","src":"10893:74:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313034","id":7638,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10945:3:27","typeDescriptions":{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},"value":"104"},{"id":7639,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7625,"src":"10950:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7637,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"10914:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7640,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10914:42:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7641,"nodeType":"RevertStatement","src":"10907:49:27"}]}},{"expression":{"arguments":[{"id":7646,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7625,"src":"10991:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7645,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10983:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"},"typeName":{"id":7644,"name":"uint104","nodeType":"ElementaryTypeName","src":"10983:7:27","typeDescriptions":{}}},"id":7647,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10983:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"functionReturnParameters":7629,"id":7648,"nodeType":"Return","src":"10976:21:27"}]},"documentation":{"id":7623,"nodeType":"StructuredDocumentation","src":"10501:280:27","text":" @dev Returns the downcasted uint104 from uint256, reverting on\n overflow (when the input is greater than largest uint104).\n Counterpart to Solidity's `uint104` operator.\n Requirements:\n - input must fit into 104 bits"},"id":7650,"implemented":true,"kind":"function","modifiers":[],"name":"toUint104","nameLocation":"10795:9:27","nodeType":"FunctionDefinition","parameters":{"id":7626,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7625,"mutability":"mutable","name":"value","nameLocation":"10813:5:27","nodeType":"VariableDeclaration","scope":7650,"src":"10805:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7624,"name":"uint256","nodeType":"ElementaryTypeName","src":"10805:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10804:15:27"},"returnParameters":{"id":7629,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7628,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7650,"src":"10843:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"},"typeName":{"id":7627,"name":"uint104","nodeType":"ElementaryTypeName","src":"10843:7:27","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"visibility":"internal"}],"src":"10842:9:27"},"scope":8846,"src":"10786:218:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7677,"nodeType":"Block","src":"11355:149:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7658,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7653,"src":"11369:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7661,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11382:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":7660,"name":"uint96","nodeType":"ElementaryTypeName","src":"11382:6:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"}],"id":7659,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"11377:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7662,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11377:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint96","typeString":"type(uint96)"}},"id":7663,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11390:3:27","memberName":"max","nodeType":"MemberAccess","src":"11377:16:27","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"src":"11369:24:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7671,"nodeType":"IfStatement","src":"11365:103:27","trueBody":{"id":7670,"nodeType":"Block","src":"11395:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3936","id":7666,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11447:2:27","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"value":"96"},{"id":7667,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7653,"src":"11451:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7665,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"11416:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11416:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7669,"nodeType":"RevertStatement","src":"11409:48:27"}]}},{"expression":{"arguments":[{"id":7674,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7653,"src":"11491:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7673,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11484:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":7672,"name":"uint96","nodeType":"ElementaryTypeName","src":"11484:6:27","typeDescriptions":{}}},"id":7675,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11484:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"functionReturnParameters":7657,"id":7676,"nodeType":"Return","src":"11477:20:27"}]},"documentation":{"id":7651,"nodeType":"StructuredDocumentation","src":"11010:276:27","text":" @dev Returns the downcasted uint96 from uint256, reverting on\n overflow (when the input is greater than largest uint96).\n Counterpart to Solidity's `uint96` operator.\n Requirements:\n - input must fit into 96 bits"},"id":7678,"implemented":true,"kind":"function","modifiers":[],"name":"toUint96","nameLocation":"11300:8:27","nodeType":"FunctionDefinition","parameters":{"id":7654,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7653,"mutability":"mutable","name":"value","nameLocation":"11317:5:27","nodeType":"VariableDeclaration","scope":7678,"src":"11309:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7652,"name":"uint256","nodeType":"ElementaryTypeName","src":"11309:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11308:15:27"},"returnParameters":{"id":7657,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7656,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7678,"src":"11347:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":7655,"name":"uint96","nodeType":"ElementaryTypeName","src":"11347:6:27","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"}],"src":"11346:8:27"},"scope":8846,"src":"11291:213:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7705,"nodeType":"Block","src":"11855:149:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7686,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7681,"src":"11869:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7689,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11882:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"},"typeName":{"id":7688,"name":"uint88","nodeType":"ElementaryTypeName","src":"11882:6:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"}],"id":7687,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"11877:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7690,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11877:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint88","typeString":"type(uint88)"}},"id":7691,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11890:3:27","memberName":"max","nodeType":"MemberAccess","src":"11877:16:27","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"src":"11869:24:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7699,"nodeType":"IfStatement","src":"11865:103:27","trueBody":{"id":7698,"nodeType":"Block","src":"11895:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3838","id":7694,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11947:2:27","typeDescriptions":{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},"value":"88"},{"id":7695,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7681,"src":"11951:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7693,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"11916:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7696,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11916:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7697,"nodeType":"RevertStatement","src":"11909:48:27"}]}},{"expression":{"arguments":[{"id":7702,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7681,"src":"11991:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7701,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11984:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"},"typeName":{"id":7700,"name":"uint88","nodeType":"ElementaryTypeName","src":"11984:6:27","typeDescriptions":{}}},"id":7703,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11984:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"functionReturnParameters":7685,"id":7704,"nodeType":"Return","src":"11977:20:27"}]},"documentation":{"id":7679,"nodeType":"StructuredDocumentation","src":"11510:276:27","text":" @dev Returns the downcasted uint88 from uint256, reverting on\n overflow (when the input is greater than largest uint88).\n Counterpart to Solidity's `uint88` operator.\n Requirements:\n - input must fit into 88 bits"},"id":7706,"implemented":true,"kind":"function","modifiers":[],"name":"toUint88","nameLocation":"11800:8:27","nodeType":"FunctionDefinition","parameters":{"id":7682,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7681,"mutability":"mutable","name":"value","nameLocation":"11817:5:27","nodeType":"VariableDeclaration","scope":7706,"src":"11809:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7680,"name":"uint256","nodeType":"ElementaryTypeName","src":"11809:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11808:15:27"},"returnParameters":{"id":7685,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7684,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7706,"src":"11847:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"},"typeName":{"id":7683,"name":"uint88","nodeType":"ElementaryTypeName","src":"11847:6:27","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"visibility":"internal"}],"src":"11846:8:27"},"scope":8846,"src":"11791:213:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7733,"nodeType":"Block","src":"12355:149:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7714,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7709,"src":"12369:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7717,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12382:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"},"typeName":{"id":7716,"name":"uint80","nodeType":"ElementaryTypeName","src":"12382:6:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"}],"id":7715,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"12377:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7718,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12377:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint80","typeString":"type(uint80)"}},"id":7719,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12390:3:27","memberName":"max","nodeType":"MemberAccess","src":"12377:16:27","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"src":"12369:24:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7727,"nodeType":"IfStatement","src":"12365:103:27","trueBody":{"id":7726,"nodeType":"Block","src":"12395:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3830","id":7722,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12447:2:27","typeDescriptions":{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},"value":"80"},{"id":7723,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7709,"src":"12451:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7721,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"12416:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12416:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7725,"nodeType":"RevertStatement","src":"12409:48:27"}]}},{"expression":{"arguments":[{"id":7730,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7709,"src":"12491:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7729,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12484:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"},"typeName":{"id":7728,"name":"uint80","nodeType":"ElementaryTypeName","src":"12484:6:27","typeDescriptions":{}}},"id":7731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12484:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"functionReturnParameters":7713,"id":7732,"nodeType":"Return","src":"12477:20:27"}]},"documentation":{"id":7707,"nodeType":"StructuredDocumentation","src":"12010:276:27","text":" @dev Returns the downcasted uint80 from uint256, reverting on\n overflow (when the input is greater than largest uint80).\n Counterpart to Solidity's `uint80` operator.\n Requirements:\n - input must fit into 80 bits"},"id":7734,"implemented":true,"kind":"function","modifiers":[],"name":"toUint80","nameLocation":"12300:8:27","nodeType":"FunctionDefinition","parameters":{"id":7710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7709,"mutability":"mutable","name":"value","nameLocation":"12317:5:27","nodeType":"VariableDeclaration","scope":7734,"src":"12309:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7708,"name":"uint256","nodeType":"ElementaryTypeName","src":"12309:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12308:15:27"},"returnParameters":{"id":7713,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7712,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7734,"src":"12347:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":7711,"name":"uint80","nodeType":"ElementaryTypeName","src":"12347:6:27","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"12346:8:27"},"scope":8846,"src":"12291:213:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7761,"nodeType":"Block","src":"12855:149:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7742,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7737,"src":"12869:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7745,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12882:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"},"typeName":{"id":7744,"name":"uint72","nodeType":"ElementaryTypeName","src":"12882:6:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"}],"id":7743,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"12877:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7746,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12877:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint72","typeString":"type(uint72)"}},"id":7747,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12890:3:27","memberName":"max","nodeType":"MemberAccess","src":"12877:16:27","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"src":"12869:24:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7755,"nodeType":"IfStatement","src":"12865:103:27","trueBody":{"id":7754,"nodeType":"Block","src":"12895:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3732","id":7750,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12947:2:27","typeDescriptions":{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},"value":"72"},{"id":7751,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7737,"src":"12951:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7749,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"12916:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12916:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7753,"nodeType":"RevertStatement","src":"12909:48:27"}]}},{"expression":{"arguments":[{"id":7758,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7737,"src":"12991:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7757,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12984:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"},"typeName":{"id":7756,"name":"uint72","nodeType":"ElementaryTypeName","src":"12984:6:27","typeDescriptions":{}}},"id":7759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12984:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"functionReturnParameters":7741,"id":7760,"nodeType":"Return","src":"12977:20:27"}]},"documentation":{"id":7735,"nodeType":"StructuredDocumentation","src":"12510:276:27","text":" @dev Returns the downcasted uint72 from uint256, reverting on\n overflow (when the input is greater than largest uint72).\n Counterpart to Solidity's `uint72` operator.\n Requirements:\n - input must fit into 72 bits"},"id":7762,"implemented":true,"kind":"function","modifiers":[],"name":"toUint72","nameLocation":"12800:8:27","nodeType":"FunctionDefinition","parameters":{"id":7738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7737,"mutability":"mutable","name":"value","nameLocation":"12817:5:27","nodeType":"VariableDeclaration","scope":7762,"src":"12809:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7736,"name":"uint256","nodeType":"ElementaryTypeName","src":"12809:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12808:15:27"},"returnParameters":{"id":7741,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7740,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7762,"src":"12847:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"},"typeName":{"id":7739,"name":"uint72","nodeType":"ElementaryTypeName","src":"12847:6:27","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"visibility":"internal"}],"src":"12846:8:27"},"scope":8846,"src":"12791:213:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7789,"nodeType":"Block","src":"13355:149:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7770,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7765,"src":"13369:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7773,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13382:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":7772,"name":"uint64","nodeType":"ElementaryTypeName","src":"13382:6:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"}],"id":7771,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"13377:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7774,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13377:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint64","typeString":"type(uint64)"}},"id":7775,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13390:3:27","memberName":"max","nodeType":"MemberAccess","src":"13377:16:27","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"13369:24:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7783,"nodeType":"IfStatement","src":"13365:103:27","trueBody":{"id":7782,"nodeType":"Block","src":"13395:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3634","id":7778,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13447:2:27","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},{"id":7779,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7765,"src":"13451:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7777,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"13416:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7780,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13416:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7781,"nodeType":"RevertStatement","src":"13409:48:27"}]}},{"expression":{"arguments":[{"id":7786,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7765,"src":"13491:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7785,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13484:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":7784,"name":"uint64","nodeType":"ElementaryTypeName","src":"13484:6:27","typeDescriptions":{}}},"id":7787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13484:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":7769,"id":7788,"nodeType":"Return","src":"13477:20:27"}]},"documentation":{"id":7763,"nodeType":"StructuredDocumentation","src":"13010:276:27","text":" @dev Returns the downcasted uint64 from uint256, reverting on\n overflow (when the input is greater than largest uint64).\n Counterpart to Solidity's `uint64` operator.\n Requirements:\n - input must fit into 64 bits"},"id":7790,"implemented":true,"kind":"function","modifiers":[],"name":"toUint64","nameLocation":"13300:8:27","nodeType":"FunctionDefinition","parameters":{"id":7766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7765,"mutability":"mutable","name":"value","nameLocation":"13317:5:27","nodeType":"VariableDeclaration","scope":7790,"src":"13309:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7764,"name":"uint256","nodeType":"ElementaryTypeName","src":"13309:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13308:15:27"},"returnParameters":{"id":7769,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7768,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7790,"src":"13347:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":7767,"name":"uint64","nodeType":"ElementaryTypeName","src":"13347:6:27","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"13346:8:27"},"scope":8846,"src":"13291:213:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7817,"nodeType":"Block","src":"13855:149:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7798,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7793,"src":"13869:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7801,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13882:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"},"typeName":{"id":7800,"name":"uint56","nodeType":"ElementaryTypeName","src":"13882:6:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"}],"id":7799,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"13877:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7802,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13877:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint56","typeString":"type(uint56)"}},"id":7803,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13890:3:27","memberName":"max","nodeType":"MemberAccess","src":"13877:16:27","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"src":"13869:24:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7811,"nodeType":"IfStatement","src":"13865:103:27","trueBody":{"id":7810,"nodeType":"Block","src":"13895:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3536","id":7806,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13947:2:27","typeDescriptions":{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},"value":"56"},{"id":7807,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7793,"src":"13951:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7805,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"13916:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13916:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7809,"nodeType":"RevertStatement","src":"13909:48:27"}]}},{"expression":{"arguments":[{"id":7814,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7793,"src":"13991:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7813,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13984:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"},"typeName":{"id":7812,"name":"uint56","nodeType":"ElementaryTypeName","src":"13984:6:27","typeDescriptions":{}}},"id":7815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13984:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"functionReturnParameters":7797,"id":7816,"nodeType":"Return","src":"13977:20:27"}]},"documentation":{"id":7791,"nodeType":"StructuredDocumentation","src":"13510:276:27","text":" @dev Returns the downcasted uint56 from uint256, reverting on\n overflow (when the input is greater than largest uint56).\n Counterpart to Solidity's `uint56` operator.\n Requirements:\n - input must fit into 56 bits"},"id":7818,"implemented":true,"kind":"function","modifiers":[],"name":"toUint56","nameLocation":"13800:8:27","nodeType":"FunctionDefinition","parameters":{"id":7794,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7793,"mutability":"mutable","name":"value","nameLocation":"13817:5:27","nodeType":"VariableDeclaration","scope":7818,"src":"13809:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7792,"name":"uint256","nodeType":"ElementaryTypeName","src":"13809:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13808:15:27"},"returnParameters":{"id":7797,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7796,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7818,"src":"13847:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"},"typeName":{"id":7795,"name":"uint56","nodeType":"ElementaryTypeName","src":"13847:6:27","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"visibility":"internal"}],"src":"13846:8:27"},"scope":8846,"src":"13791:213:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7845,"nodeType":"Block","src":"14355:149:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7832,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7826,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7821,"src":"14369:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7829,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14382:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"},"typeName":{"id":7828,"name":"uint48","nodeType":"ElementaryTypeName","src":"14382:6:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"}],"id":7827,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"14377:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7830,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14377:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint48","typeString":"type(uint48)"}},"id":7831,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14390:3:27","memberName":"max","nodeType":"MemberAccess","src":"14377:16:27","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"14369:24:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7839,"nodeType":"IfStatement","src":"14365:103:27","trueBody":{"id":7838,"nodeType":"Block","src":"14395:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3438","id":7834,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14447:2:27","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},{"id":7835,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7821,"src":"14451:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7833,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"14416:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7836,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14416:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7837,"nodeType":"RevertStatement","src":"14409:48:27"}]}},{"expression":{"arguments":[{"id":7842,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7821,"src":"14491:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7841,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14484:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"},"typeName":{"id":7840,"name":"uint48","nodeType":"ElementaryTypeName","src":"14484:6:27","typeDescriptions":{}}},"id":7843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14484:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":7825,"id":7844,"nodeType":"Return","src":"14477:20:27"}]},"documentation":{"id":7819,"nodeType":"StructuredDocumentation","src":"14010:276:27","text":" @dev Returns the downcasted uint48 from uint256, reverting on\n overflow (when the input is greater than largest uint48).\n Counterpart to Solidity's `uint48` operator.\n Requirements:\n - input must fit into 48 bits"},"id":7846,"implemented":true,"kind":"function","modifiers":[],"name":"toUint48","nameLocation":"14300:8:27","nodeType":"FunctionDefinition","parameters":{"id":7822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7821,"mutability":"mutable","name":"value","nameLocation":"14317:5:27","nodeType":"VariableDeclaration","scope":7846,"src":"14309:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7820,"name":"uint256","nodeType":"ElementaryTypeName","src":"14309:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14308:15:27"},"returnParameters":{"id":7825,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7824,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7846,"src":"14347:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":7823,"name":"uint48","nodeType":"ElementaryTypeName","src":"14347:6:27","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"14346:8:27"},"scope":8846,"src":"14291:213:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7873,"nodeType":"Block","src":"14855:149:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7854,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7849,"src":"14869:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7857,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14882:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":7856,"name":"uint40","nodeType":"ElementaryTypeName","src":"14882:6:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"}],"id":7855,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"14877:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7858,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14877:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint40","typeString":"type(uint40)"}},"id":7859,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14890:3:27","memberName":"max","nodeType":"MemberAccess","src":"14877:16:27","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"14869:24:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7867,"nodeType":"IfStatement","src":"14865:103:27","trueBody":{"id":7866,"nodeType":"Block","src":"14895:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3430","id":7862,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14947:2:27","typeDescriptions":{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},"value":"40"},{"id":7863,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7849,"src":"14951:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7861,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"14916:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7864,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14916:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7865,"nodeType":"RevertStatement","src":"14909:48:27"}]}},{"expression":{"arguments":[{"id":7870,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7849,"src":"14991:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7869,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14984:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":7868,"name":"uint40","nodeType":"ElementaryTypeName","src":"14984:6:27","typeDescriptions":{}}},"id":7871,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14984:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"functionReturnParameters":7853,"id":7872,"nodeType":"Return","src":"14977:20:27"}]},"documentation":{"id":7847,"nodeType":"StructuredDocumentation","src":"14510:276:27","text":" @dev Returns the downcasted uint40 from uint256, reverting on\n overflow (when the input is greater than largest uint40).\n Counterpart to Solidity's `uint40` operator.\n Requirements:\n - input must fit into 40 bits"},"id":7874,"implemented":true,"kind":"function","modifiers":[],"name":"toUint40","nameLocation":"14800:8:27","nodeType":"FunctionDefinition","parameters":{"id":7850,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7849,"mutability":"mutable","name":"value","nameLocation":"14817:5:27","nodeType":"VariableDeclaration","scope":7874,"src":"14809:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7848,"name":"uint256","nodeType":"ElementaryTypeName","src":"14809:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14808:15:27"},"returnParameters":{"id":7853,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7852,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7874,"src":"14847:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":7851,"name":"uint40","nodeType":"ElementaryTypeName","src":"14847:6:27","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"14846:8:27"},"scope":8846,"src":"14791:213:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7901,"nodeType":"Block","src":"15355:149:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7882,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7877,"src":"15369:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7885,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15382:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":7884,"name":"uint32","nodeType":"ElementaryTypeName","src":"15382:6:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"}],"id":7883,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"15377:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7886,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15377:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint32","typeString":"type(uint32)"}},"id":7887,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15390:3:27","memberName":"max","nodeType":"MemberAccess","src":"15377:16:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"15369:24:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7895,"nodeType":"IfStatement","src":"15365:103:27","trueBody":{"id":7894,"nodeType":"Block","src":"15395:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3332","id":7890,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15447:2:27","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"id":7891,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7877,"src":"15451:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7889,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"15416:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7892,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15416:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7893,"nodeType":"RevertStatement","src":"15409:48:27"}]}},{"expression":{"arguments":[{"id":7898,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7877,"src":"15491:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7897,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15484:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":7896,"name":"uint32","nodeType":"ElementaryTypeName","src":"15484:6:27","typeDescriptions":{}}},"id":7899,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15484:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":7881,"id":7900,"nodeType":"Return","src":"15477:20:27"}]},"documentation":{"id":7875,"nodeType":"StructuredDocumentation","src":"15010:276:27","text":" @dev Returns the downcasted uint32 from uint256, reverting on\n overflow (when the input is greater than largest uint32).\n Counterpart to Solidity's `uint32` operator.\n Requirements:\n - input must fit into 32 bits"},"id":7902,"implemented":true,"kind":"function","modifiers":[],"name":"toUint32","nameLocation":"15300:8:27","nodeType":"FunctionDefinition","parameters":{"id":7878,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7877,"mutability":"mutable","name":"value","nameLocation":"15317:5:27","nodeType":"VariableDeclaration","scope":7902,"src":"15309:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7876,"name":"uint256","nodeType":"ElementaryTypeName","src":"15309:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15308:15:27"},"returnParameters":{"id":7881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7880,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7902,"src":"15347:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":7879,"name":"uint32","nodeType":"ElementaryTypeName","src":"15347:6:27","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"15346:8:27"},"scope":8846,"src":"15291:213:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7929,"nodeType":"Block","src":"15855:149:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7910,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7905,"src":"15869:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7913,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15882:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"},"typeName":{"id":7912,"name":"uint24","nodeType":"ElementaryTypeName","src":"15882:6:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"}],"id":7911,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"15877:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7914,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15877:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint24","typeString":"type(uint24)"}},"id":7915,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15890:3:27","memberName":"max","nodeType":"MemberAccess","src":"15877:16:27","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"src":"15869:24:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7923,"nodeType":"IfStatement","src":"15865:103:27","trueBody":{"id":7922,"nodeType":"Block","src":"15895:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3234","id":7918,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15947:2:27","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},{"id":7919,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7905,"src":"15951:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7917,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"15916:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7920,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15916:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7921,"nodeType":"RevertStatement","src":"15909:48:27"}]}},{"expression":{"arguments":[{"id":7926,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7905,"src":"15991:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7925,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15984:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"},"typeName":{"id":7924,"name":"uint24","nodeType":"ElementaryTypeName","src":"15984:6:27","typeDescriptions":{}}},"id":7927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15984:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"functionReturnParameters":7909,"id":7928,"nodeType":"Return","src":"15977:20:27"}]},"documentation":{"id":7903,"nodeType":"StructuredDocumentation","src":"15510:276:27","text":" @dev Returns the downcasted uint24 from uint256, reverting on\n overflow (when the input is greater than largest uint24).\n Counterpart to Solidity's `uint24` operator.\n Requirements:\n - input must fit into 24 bits"},"id":7930,"implemented":true,"kind":"function","modifiers":[],"name":"toUint24","nameLocation":"15800:8:27","nodeType":"FunctionDefinition","parameters":{"id":7906,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7905,"mutability":"mutable","name":"value","nameLocation":"15817:5:27","nodeType":"VariableDeclaration","scope":7930,"src":"15809:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7904,"name":"uint256","nodeType":"ElementaryTypeName","src":"15809:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15808:15:27"},"returnParameters":{"id":7909,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7908,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7930,"src":"15847:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"},"typeName":{"id":7907,"name":"uint24","nodeType":"ElementaryTypeName","src":"15847:6:27","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"visibility":"internal"}],"src":"15846:8:27"},"scope":8846,"src":"15791:213:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7957,"nodeType":"Block","src":"16355:149:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7938,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7933,"src":"16369:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7941,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16382:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":7940,"name":"uint16","nodeType":"ElementaryTypeName","src":"16382:6:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"}],"id":7939,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"16377:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7942,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16377:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint16","typeString":"type(uint16)"}},"id":7943,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16390:3:27","memberName":"max","nodeType":"MemberAccess","src":"16377:16:27","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"16369:24:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7951,"nodeType":"IfStatement","src":"16365:103:27","trueBody":{"id":7950,"nodeType":"Block","src":"16395:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3136","id":7946,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16447:2:27","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},{"id":7947,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7933,"src":"16451:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7945,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"16416:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7948,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16416:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7949,"nodeType":"RevertStatement","src":"16409:48:27"}]}},{"expression":{"arguments":[{"id":7954,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7933,"src":"16491:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7953,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16484:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":7952,"name":"uint16","nodeType":"ElementaryTypeName","src":"16484:6:27","typeDescriptions":{}}},"id":7955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16484:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"functionReturnParameters":7937,"id":7956,"nodeType":"Return","src":"16477:20:27"}]},"documentation":{"id":7931,"nodeType":"StructuredDocumentation","src":"16010:276:27","text":" @dev Returns the downcasted uint16 from uint256, reverting on\n overflow (when the input is greater than largest uint16).\n Counterpart to Solidity's `uint16` operator.\n Requirements:\n - input must fit into 16 bits"},"id":7958,"implemented":true,"kind":"function","modifiers":[],"name":"toUint16","nameLocation":"16300:8:27","nodeType":"FunctionDefinition","parameters":{"id":7934,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7933,"mutability":"mutable","name":"value","nameLocation":"16317:5:27","nodeType":"VariableDeclaration","scope":7958,"src":"16309:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7932,"name":"uint256","nodeType":"ElementaryTypeName","src":"16309:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16308:15:27"},"returnParameters":{"id":7937,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7936,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7958,"src":"16347:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":7935,"name":"uint16","nodeType":"ElementaryTypeName","src":"16347:6:27","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"16346:8:27"},"scope":8846,"src":"16291:213:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7985,"nodeType":"Block","src":"16849:146:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7972,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7966,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7961,"src":"16863:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7969,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16876:5:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":7968,"name":"uint8","nodeType":"ElementaryTypeName","src":"16876:5:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"}],"id":7967,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"16871:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7970,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16871:11:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint8","typeString":"type(uint8)"}},"id":7971,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16883:3:27","memberName":"max","nodeType":"MemberAccess","src":"16871:15:27","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"16863:23:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7979,"nodeType":"IfStatement","src":"16859:101:27","trueBody":{"id":7978,"nodeType":"Block","src":"16888:72:27","statements":[{"errorCall":{"arguments":[{"hexValue":"38","id":7974,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16940:1:27","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},{"id":7975,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7961,"src":"16943:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7973,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7101,"src":"16909:30:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16909:40:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7977,"nodeType":"RevertStatement","src":"16902:47:27"}]}},{"expression":{"arguments":[{"id":7982,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7961,"src":"16982:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7981,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16976:5:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":7980,"name":"uint8","nodeType":"ElementaryTypeName","src":"16976:5:27","typeDescriptions":{}}},"id":7983,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16976:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":7965,"id":7984,"nodeType":"Return","src":"16969:19:27"}]},"documentation":{"id":7959,"nodeType":"StructuredDocumentation","src":"16510:272:27","text":" @dev Returns the downcasted uint8 from uint256, reverting on\n overflow (when the input is greater than largest uint8).\n Counterpart to Solidity's `uint8` operator.\n Requirements:\n - input must fit into 8 bits"},"id":7986,"implemented":true,"kind":"function","modifiers":[],"name":"toUint8","nameLocation":"16796:7:27","nodeType":"FunctionDefinition","parameters":{"id":7962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7961,"mutability":"mutable","name":"value","nameLocation":"16812:5:27","nodeType":"VariableDeclaration","scope":7986,"src":"16804:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7960,"name":"uint256","nodeType":"ElementaryTypeName","src":"16804:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16803:15:27"},"returnParameters":{"id":7965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7964,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7986,"src":"16842:5:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7963,"name":"uint8","nodeType":"ElementaryTypeName","src":"16842:5:27","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"16841:7:27"},"scope":8846,"src":"16787:208:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8008,"nodeType":"Block","src":"17231:128:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":7996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7994,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7989,"src":"17245:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":7995,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17253:1:27","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17245:9:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8002,"nodeType":"IfStatement","src":"17241:81:27","trueBody":{"id":8001,"nodeType":"Block","src":"17256:66:27","statements":[{"errorCall":{"arguments":[{"id":7998,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7989,"src":"17305:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":7997,"name":"SafeCastOverflowedIntToUint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7106,"src":"17277:27:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_int256_$returns$_t_error_$","typeString":"function (int256) pure returns (error)"}},"id":7999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17277:34:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8000,"nodeType":"RevertStatement","src":"17270:41:27"}]}},{"expression":{"arguments":[{"id":8005,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7989,"src":"17346:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8004,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17338:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":8003,"name":"uint256","nodeType":"ElementaryTypeName","src":"17338:7:27","typeDescriptions":{}}},"id":8006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17338:14:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7993,"id":8007,"nodeType":"Return","src":"17331:21:27"}]},"documentation":{"id":7987,"nodeType":"StructuredDocumentation","src":"17001:160:27","text":" @dev Converts a signed int256 into an unsigned uint256.\n Requirements:\n - input must be greater than or equal to 0."},"id":8009,"implemented":true,"kind":"function","modifiers":[],"name":"toUint256","nameLocation":"17175:9:27","nodeType":"FunctionDefinition","parameters":{"id":7990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7989,"mutability":"mutable","name":"value","nameLocation":"17192:5:27","nodeType":"VariableDeclaration","scope":8009,"src":"17185:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":7988,"name":"int256","nodeType":"ElementaryTypeName","src":"17185:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"17184:14:27"},"returnParameters":{"id":7993,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7992,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8009,"src":"17222:7:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7991,"name":"uint256","nodeType":"ElementaryTypeName","src":"17222:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17221:9:27"},"scope":8846,"src":"17166:193:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8034,"nodeType":"Block","src":"17756:150:27","statements":[{"expression":{"id":8022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8017,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8015,"src":"17766:10:27","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8020,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8012,"src":"17786:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8019,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17779:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int248_$","typeString":"type(int248)"},"typeName":{"id":8018,"name":"int248","nodeType":"ElementaryTypeName","src":"17779:6:27","typeDescriptions":{}}},"id":8021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17779:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"src":"17766:26:27","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"id":8023,"nodeType":"ExpressionStatement","src":"17766:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8026,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8024,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8015,"src":"17806:10:27","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8025,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8012,"src":"17820:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17806:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8033,"nodeType":"IfStatement","src":"17802:98:27","trueBody":{"id":8032,"nodeType":"Block","src":"17827:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"323438","id":8028,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17878:3:27","typeDescriptions":{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},"value":"248"},{"id":8029,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8012,"src":"17883:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8027,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"17848:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8030,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17848:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8031,"nodeType":"RevertStatement","src":"17841:48:27"}]}}]},"documentation":{"id":8010,"nodeType":"StructuredDocumentation","src":"17365:312:27","text":" @dev Returns the downcasted int248 from int256, reverting on\n overflow (when the input is less than smallest int248 or\n greater than largest int248).\n Counterpart to Solidity's `int248` operator.\n Requirements:\n - input must fit into 248 bits"},"id":8035,"implemented":true,"kind":"function","modifiers":[],"name":"toInt248","nameLocation":"17691:8:27","nodeType":"FunctionDefinition","parameters":{"id":8013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8012,"mutability":"mutable","name":"value","nameLocation":"17707:5:27","nodeType":"VariableDeclaration","scope":8035,"src":"17700:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8011,"name":"int256","nodeType":"ElementaryTypeName","src":"17700:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"17699:14:27"},"returnParameters":{"id":8016,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8015,"mutability":"mutable","name":"downcasted","nameLocation":"17744:10:27","nodeType":"VariableDeclaration","scope":8035,"src":"17737:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"},"typeName":{"id":8014,"name":"int248","nodeType":"ElementaryTypeName","src":"17737:6:27","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"visibility":"internal"}],"src":"17736:19:27"},"scope":8846,"src":"17682:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8060,"nodeType":"Block","src":"18303:150:27","statements":[{"expression":{"id":8048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8043,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8041,"src":"18313:10:27","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8046,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8038,"src":"18333:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8045,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18326:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int240_$","typeString":"type(int240)"},"typeName":{"id":8044,"name":"int240","nodeType":"ElementaryTypeName","src":"18326:6:27","typeDescriptions":{}}},"id":8047,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18326:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"src":"18313:26:27","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"id":8049,"nodeType":"ExpressionStatement","src":"18313:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8050,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8041,"src":"18353:10:27","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8051,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8038,"src":"18367:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18353:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8059,"nodeType":"IfStatement","src":"18349:98:27","trueBody":{"id":8058,"nodeType":"Block","src":"18374:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"323430","id":8054,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18425:3:27","typeDescriptions":{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},"value":"240"},{"id":8055,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8038,"src":"18430:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8053,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"18395:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18395:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8057,"nodeType":"RevertStatement","src":"18388:48:27"}]}}]},"documentation":{"id":8036,"nodeType":"StructuredDocumentation","src":"17912:312:27","text":" @dev Returns the downcasted int240 from int256, reverting on\n overflow (when the input is less than smallest int240 or\n greater than largest int240).\n Counterpart to Solidity's `int240` operator.\n Requirements:\n - input must fit into 240 bits"},"id":8061,"implemented":true,"kind":"function","modifiers":[],"name":"toInt240","nameLocation":"18238:8:27","nodeType":"FunctionDefinition","parameters":{"id":8039,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8038,"mutability":"mutable","name":"value","nameLocation":"18254:5:27","nodeType":"VariableDeclaration","scope":8061,"src":"18247:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8037,"name":"int256","nodeType":"ElementaryTypeName","src":"18247:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"18246:14:27"},"returnParameters":{"id":8042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8041,"mutability":"mutable","name":"downcasted","nameLocation":"18291:10:27","nodeType":"VariableDeclaration","scope":8061,"src":"18284:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"},"typeName":{"id":8040,"name":"int240","nodeType":"ElementaryTypeName","src":"18284:6:27","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"visibility":"internal"}],"src":"18283:19:27"},"scope":8846,"src":"18229:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8086,"nodeType":"Block","src":"18850:150:27","statements":[{"expression":{"id":8074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8069,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8067,"src":"18860:10:27","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8072,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8064,"src":"18880:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8071,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18873:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int232_$","typeString":"type(int232)"},"typeName":{"id":8070,"name":"int232","nodeType":"ElementaryTypeName","src":"18873:6:27","typeDescriptions":{}}},"id":8073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18873:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"src":"18860:26:27","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"id":8075,"nodeType":"ExpressionStatement","src":"18860:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8076,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8067,"src":"18900:10:27","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8077,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8064,"src":"18914:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18900:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8085,"nodeType":"IfStatement","src":"18896:98:27","trueBody":{"id":8084,"nodeType":"Block","src":"18921:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"323332","id":8080,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18972:3:27","typeDescriptions":{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},"value":"232"},{"id":8081,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8064,"src":"18977:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8079,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"18942:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8082,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18942:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8083,"nodeType":"RevertStatement","src":"18935:48:27"}]}}]},"documentation":{"id":8062,"nodeType":"StructuredDocumentation","src":"18459:312:27","text":" @dev Returns the downcasted int232 from int256, reverting on\n overflow (when the input is less than smallest int232 or\n greater than largest int232).\n Counterpart to Solidity's `int232` operator.\n Requirements:\n - input must fit into 232 bits"},"id":8087,"implemented":true,"kind":"function","modifiers":[],"name":"toInt232","nameLocation":"18785:8:27","nodeType":"FunctionDefinition","parameters":{"id":8065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8064,"mutability":"mutable","name":"value","nameLocation":"18801:5:27","nodeType":"VariableDeclaration","scope":8087,"src":"18794:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8063,"name":"int256","nodeType":"ElementaryTypeName","src":"18794:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"18793:14:27"},"returnParameters":{"id":8068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8067,"mutability":"mutable","name":"downcasted","nameLocation":"18838:10:27","nodeType":"VariableDeclaration","scope":8087,"src":"18831:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"},"typeName":{"id":8066,"name":"int232","nodeType":"ElementaryTypeName","src":"18831:6:27","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"visibility":"internal"}],"src":"18830:19:27"},"scope":8846,"src":"18776:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8112,"nodeType":"Block","src":"19397:150:27","statements":[{"expression":{"id":8100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8095,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8093,"src":"19407:10:27","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8098,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8090,"src":"19427:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8097,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19420:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int224_$","typeString":"type(int224)"},"typeName":{"id":8096,"name":"int224","nodeType":"ElementaryTypeName","src":"19420:6:27","typeDescriptions":{}}},"id":8099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19420:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"src":"19407:26:27","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"id":8101,"nodeType":"ExpressionStatement","src":"19407:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8102,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8093,"src":"19447:10:27","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8103,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8090,"src":"19461:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19447:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8111,"nodeType":"IfStatement","src":"19443:98:27","trueBody":{"id":8110,"nodeType":"Block","src":"19468:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"323234","id":8106,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19519:3:27","typeDescriptions":{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},"value":"224"},{"id":8107,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8090,"src":"19524:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8105,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"19489:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8108,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19489:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8109,"nodeType":"RevertStatement","src":"19482:48:27"}]}}]},"documentation":{"id":8088,"nodeType":"StructuredDocumentation","src":"19006:312:27","text":" @dev Returns the downcasted int224 from int256, reverting on\n overflow (when the input is less than smallest int224 or\n greater than largest int224).\n Counterpart to Solidity's `int224` operator.\n Requirements:\n - input must fit into 224 bits"},"id":8113,"implemented":true,"kind":"function","modifiers":[],"name":"toInt224","nameLocation":"19332:8:27","nodeType":"FunctionDefinition","parameters":{"id":8091,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8090,"mutability":"mutable","name":"value","nameLocation":"19348:5:27","nodeType":"VariableDeclaration","scope":8113,"src":"19341:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8089,"name":"int256","nodeType":"ElementaryTypeName","src":"19341:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"19340:14:27"},"returnParameters":{"id":8094,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8093,"mutability":"mutable","name":"downcasted","nameLocation":"19385:10:27","nodeType":"VariableDeclaration","scope":8113,"src":"19378:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"},"typeName":{"id":8092,"name":"int224","nodeType":"ElementaryTypeName","src":"19378:6:27","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"visibility":"internal"}],"src":"19377:19:27"},"scope":8846,"src":"19323:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8138,"nodeType":"Block","src":"19944:150:27","statements":[{"expression":{"id":8126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8121,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8119,"src":"19954:10:27","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8124,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8116,"src":"19974:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8123,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19967:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int216_$","typeString":"type(int216)"},"typeName":{"id":8122,"name":"int216","nodeType":"ElementaryTypeName","src":"19967:6:27","typeDescriptions":{}}},"id":8125,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19967:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"src":"19954:26:27","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"id":8127,"nodeType":"ExpressionStatement","src":"19954:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8128,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8119,"src":"19994:10:27","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8129,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8116,"src":"20008:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19994:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8137,"nodeType":"IfStatement","src":"19990:98:27","trueBody":{"id":8136,"nodeType":"Block","src":"20015:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"323136","id":8132,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20066:3:27","typeDescriptions":{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},"value":"216"},{"id":8133,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8116,"src":"20071:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8131,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"20036:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20036:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8135,"nodeType":"RevertStatement","src":"20029:48:27"}]}}]},"documentation":{"id":8114,"nodeType":"StructuredDocumentation","src":"19553:312:27","text":" @dev Returns the downcasted int216 from int256, reverting on\n overflow (when the input is less than smallest int216 or\n greater than largest int216).\n Counterpart to Solidity's `int216` operator.\n Requirements:\n - input must fit into 216 bits"},"id":8139,"implemented":true,"kind":"function","modifiers":[],"name":"toInt216","nameLocation":"19879:8:27","nodeType":"FunctionDefinition","parameters":{"id":8117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8116,"mutability":"mutable","name":"value","nameLocation":"19895:5:27","nodeType":"VariableDeclaration","scope":8139,"src":"19888:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8115,"name":"int256","nodeType":"ElementaryTypeName","src":"19888:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"19887:14:27"},"returnParameters":{"id":8120,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8119,"mutability":"mutable","name":"downcasted","nameLocation":"19932:10:27","nodeType":"VariableDeclaration","scope":8139,"src":"19925:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"},"typeName":{"id":8118,"name":"int216","nodeType":"ElementaryTypeName","src":"19925:6:27","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"visibility":"internal"}],"src":"19924:19:27"},"scope":8846,"src":"19870:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8164,"nodeType":"Block","src":"20491:150:27","statements":[{"expression":{"id":8152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8147,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8145,"src":"20501:10:27","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8150,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8142,"src":"20521:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8149,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20514:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int208_$","typeString":"type(int208)"},"typeName":{"id":8148,"name":"int208","nodeType":"ElementaryTypeName","src":"20514:6:27","typeDescriptions":{}}},"id":8151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20514:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"src":"20501:26:27","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"id":8153,"nodeType":"ExpressionStatement","src":"20501:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8154,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8145,"src":"20541:10:27","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8155,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8142,"src":"20555:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20541:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8163,"nodeType":"IfStatement","src":"20537:98:27","trueBody":{"id":8162,"nodeType":"Block","src":"20562:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"323038","id":8158,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20613:3:27","typeDescriptions":{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},"value":"208"},{"id":8159,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8142,"src":"20618:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8157,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"20583:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8160,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20583:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8161,"nodeType":"RevertStatement","src":"20576:48:27"}]}}]},"documentation":{"id":8140,"nodeType":"StructuredDocumentation","src":"20100:312:27","text":" @dev Returns the downcasted int208 from int256, reverting on\n overflow (when the input is less than smallest int208 or\n greater than largest int208).\n Counterpart to Solidity's `int208` operator.\n Requirements:\n - input must fit into 208 bits"},"id":8165,"implemented":true,"kind":"function","modifiers":[],"name":"toInt208","nameLocation":"20426:8:27","nodeType":"FunctionDefinition","parameters":{"id":8143,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8142,"mutability":"mutable","name":"value","nameLocation":"20442:5:27","nodeType":"VariableDeclaration","scope":8165,"src":"20435:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8141,"name":"int256","nodeType":"ElementaryTypeName","src":"20435:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20434:14:27"},"returnParameters":{"id":8146,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8145,"mutability":"mutable","name":"downcasted","nameLocation":"20479:10:27","nodeType":"VariableDeclaration","scope":8165,"src":"20472:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"},"typeName":{"id":8144,"name":"int208","nodeType":"ElementaryTypeName","src":"20472:6:27","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"visibility":"internal"}],"src":"20471:19:27"},"scope":8846,"src":"20417:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8190,"nodeType":"Block","src":"21038:150:27","statements":[{"expression":{"id":8178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8173,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8171,"src":"21048:10:27","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8176,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8168,"src":"21068:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8175,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21061:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int200_$","typeString":"type(int200)"},"typeName":{"id":8174,"name":"int200","nodeType":"ElementaryTypeName","src":"21061:6:27","typeDescriptions":{}}},"id":8177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21061:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"src":"21048:26:27","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"id":8179,"nodeType":"ExpressionStatement","src":"21048:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8180,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8171,"src":"21088:10:27","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8181,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8168,"src":"21102:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21088:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8189,"nodeType":"IfStatement","src":"21084:98:27","trueBody":{"id":8188,"nodeType":"Block","src":"21109:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"323030","id":8184,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21160:3:27","typeDescriptions":{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},"value":"200"},{"id":8185,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8168,"src":"21165:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8183,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"21130:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21130:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8187,"nodeType":"RevertStatement","src":"21123:48:27"}]}}]},"documentation":{"id":8166,"nodeType":"StructuredDocumentation","src":"20647:312:27","text":" @dev Returns the downcasted int200 from int256, reverting on\n overflow (when the input is less than smallest int200 or\n greater than largest int200).\n Counterpart to Solidity's `int200` operator.\n Requirements:\n - input must fit into 200 bits"},"id":8191,"implemented":true,"kind":"function","modifiers":[],"name":"toInt200","nameLocation":"20973:8:27","nodeType":"FunctionDefinition","parameters":{"id":8169,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8168,"mutability":"mutable","name":"value","nameLocation":"20989:5:27","nodeType":"VariableDeclaration","scope":8191,"src":"20982:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8167,"name":"int256","nodeType":"ElementaryTypeName","src":"20982:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20981:14:27"},"returnParameters":{"id":8172,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8171,"mutability":"mutable","name":"downcasted","nameLocation":"21026:10:27","nodeType":"VariableDeclaration","scope":8191,"src":"21019:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"},"typeName":{"id":8170,"name":"int200","nodeType":"ElementaryTypeName","src":"21019:6:27","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"visibility":"internal"}],"src":"21018:19:27"},"scope":8846,"src":"20964:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8216,"nodeType":"Block","src":"21585:150:27","statements":[{"expression":{"id":8204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8199,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8197,"src":"21595:10:27","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8202,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8194,"src":"21615:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8201,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21608:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int192_$","typeString":"type(int192)"},"typeName":{"id":8200,"name":"int192","nodeType":"ElementaryTypeName","src":"21608:6:27","typeDescriptions":{}}},"id":8203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21608:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"src":"21595:26:27","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"id":8205,"nodeType":"ExpressionStatement","src":"21595:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8206,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8197,"src":"21635:10:27","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8207,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8194,"src":"21649:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21635:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8215,"nodeType":"IfStatement","src":"21631:98:27","trueBody":{"id":8214,"nodeType":"Block","src":"21656:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313932","id":8210,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21707:3:27","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},{"id":8211,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8194,"src":"21712:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8209,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"21677:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8212,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21677:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8213,"nodeType":"RevertStatement","src":"21670:48:27"}]}}]},"documentation":{"id":8192,"nodeType":"StructuredDocumentation","src":"21194:312:27","text":" @dev Returns the downcasted int192 from int256, reverting on\n overflow (when the input is less than smallest int192 or\n greater than largest int192).\n Counterpart to Solidity's `int192` operator.\n Requirements:\n - input must fit into 192 bits"},"id":8217,"implemented":true,"kind":"function","modifiers":[],"name":"toInt192","nameLocation":"21520:8:27","nodeType":"FunctionDefinition","parameters":{"id":8195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8194,"mutability":"mutable","name":"value","nameLocation":"21536:5:27","nodeType":"VariableDeclaration","scope":8217,"src":"21529:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8193,"name":"int256","nodeType":"ElementaryTypeName","src":"21529:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"21528:14:27"},"returnParameters":{"id":8198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8197,"mutability":"mutable","name":"downcasted","nameLocation":"21573:10:27","nodeType":"VariableDeclaration","scope":8217,"src":"21566:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"},"typeName":{"id":8196,"name":"int192","nodeType":"ElementaryTypeName","src":"21566:6:27","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"visibility":"internal"}],"src":"21565:19:27"},"scope":8846,"src":"21511:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8242,"nodeType":"Block","src":"22132:150:27","statements":[{"expression":{"id":8230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8225,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8223,"src":"22142:10:27","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8228,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8220,"src":"22162:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8227,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22155:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int184_$","typeString":"type(int184)"},"typeName":{"id":8226,"name":"int184","nodeType":"ElementaryTypeName","src":"22155:6:27","typeDescriptions":{}}},"id":8229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22155:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"src":"22142:26:27","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"id":8231,"nodeType":"ExpressionStatement","src":"22142:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8232,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8223,"src":"22182:10:27","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8233,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8220,"src":"22196:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22182:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8241,"nodeType":"IfStatement","src":"22178:98:27","trueBody":{"id":8240,"nodeType":"Block","src":"22203:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313834","id":8236,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22254:3:27","typeDescriptions":{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},"value":"184"},{"id":8237,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8220,"src":"22259:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8235,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"22224:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8238,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22224:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8239,"nodeType":"RevertStatement","src":"22217:48:27"}]}}]},"documentation":{"id":8218,"nodeType":"StructuredDocumentation","src":"21741:312:27","text":" @dev Returns the downcasted int184 from int256, reverting on\n overflow (when the input is less than smallest int184 or\n greater than largest int184).\n Counterpart to Solidity's `int184` operator.\n Requirements:\n - input must fit into 184 bits"},"id":8243,"implemented":true,"kind":"function","modifiers":[],"name":"toInt184","nameLocation":"22067:8:27","nodeType":"FunctionDefinition","parameters":{"id":8221,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8220,"mutability":"mutable","name":"value","nameLocation":"22083:5:27","nodeType":"VariableDeclaration","scope":8243,"src":"22076:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8219,"name":"int256","nodeType":"ElementaryTypeName","src":"22076:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"22075:14:27"},"returnParameters":{"id":8224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8223,"mutability":"mutable","name":"downcasted","nameLocation":"22120:10:27","nodeType":"VariableDeclaration","scope":8243,"src":"22113:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"},"typeName":{"id":8222,"name":"int184","nodeType":"ElementaryTypeName","src":"22113:6:27","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"visibility":"internal"}],"src":"22112:19:27"},"scope":8846,"src":"22058:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8268,"nodeType":"Block","src":"22679:150:27","statements":[{"expression":{"id":8256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8251,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8249,"src":"22689:10:27","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8254,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8246,"src":"22709:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8253,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22702:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int176_$","typeString":"type(int176)"},"typeName":{"id":8252,"name":"int176","nodeType":"ElementaryTypeName","src":"22702:6:27","typeDescriptions":{}}},"id":8255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22702:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"src":"22689:26:27","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"id":8257,"nodeType":"ExpressionStatement","src":"22689:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8258,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8249,"src":"22729:10:27","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8259,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8246,"src":"22743:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22729:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8267,"nodeType":"IfStatement","src":"22725:98:27","trueBody":{"id":8266,"nodeType":"Block","src":"22750:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313736","id":8262,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22801:3:27","typeDescriptions":{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},"value":"176"},{"id":8263,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8246,"src":"22806:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8261,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"22771:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8264,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22771:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8265,"nodeType":"RevertStatement","src":"22764:48:27"}]}}]},"documentation":{"id":8244,"nodeType":"StructuredDocumentation","src":"22288:312:27","text":" @dev Returns the downcasted int176 from int256, reverting on\n overflow (when the input is less than smallest int176 or\n greater than largest int176).\n Counterpart to Solidity's `int176` operator.\n Requirements:\n - input must fit into 176 bits"},"id":8269,"implemented":true,"kind":"function","modifiers":[],"name":"toInt176","nameLocation":"22614:8:27","nodeType":"FunctionDefinition","parameters":{"id":8247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8246,"mutability":"mutable","name":"value","nameLocation":"22630:5:27","nodeType":"VariableDeclaration","scope":8269,"src":"22623:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8245,"name":"int256","nodeType":"ElementaryTypeName","src":"22623:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"22622:14:27"},"returnParameters":{"id":8250,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8249,"mutability":"mutable","name":"downcasted","nameLocation":"22667:10:27","nodeType":"VariableDeclaration","scope":8269,"src":"22660:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"},"typeName":{"id":8248,"name":"int176","nodeType":"ElementaryTypeName","src":"22660:6:27","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"visibility":"internal"}],"src":"22659:19:27"},"scope":8846,"src":"22605:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8294,"nodeType":"Block","src":"23226:150:27","statements":[{"expression":{"id":8282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8277,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8275,"src":"23236:10:27","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8280,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8272,"src":"23256:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8279,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23249:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int168_$","typeString":"type(int168)"},"typeName":{"id":8278,"name":"int168","nodeType":"ElementaryTypeName","src":"23249:6:27","typeDescriptions":{}}},"id":8281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23249:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"src":"23236:26:27","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"id":8283,"nodeType":"ExpressionStatement","src":"23236:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8286,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8284,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8275,"src":"23276:10:27","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8285,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8272,"src":"23290:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"23276:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8293,"nodeType":"IfStatement","src":"23272:98:27","trueBody":{"id":8292,"nodeType":"Block","src":"23297:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313638","id":8288,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23348:3:27","typeDescriptions":{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},"value":"168"},{"id":8289,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8272,"src":"23353:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8287,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"23318:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8290,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23318:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8291,"nodeType":"RevertStatement","src":"23311:48:27"}]}}]},"documentation":{"id":8270,"nodeType":"StructuredDocumentation","src":"22835:312:27","text":" @dev Returns the downcasted int168 from int256, reverting on\n overflow (when the input is less than smallest int168 or\n greater than largest int168).\n Counterpart to Solidity's `int168` operator.\n Requirements:\n - input must fit into 168 bits"},"id":8295,"implemented":true,"kind":"function","modifiers":[],"name":"toInt168","nameLocation":"23161:8:27","nodeType":"FunctionDefinition","parameters":{"id":8273,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8272,"mutability":"mutable","name":"value","nameLocation":"23177:5:27","nodeType":"VariableDeclaration","scope":8295,"src":"23170:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8271,"name":"int256","nodeType":"ElementaryTypeName","src":"23170:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"23169:14:27"},"returnParameters":{"id":8276,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8275,"mutability":"mutable","name":"downcasted","nameLocation":"23214:10:27","nodeType":"VariableDeclaration","scope":8295,"src":"23207:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"},"typeName":{"id":8274,"name":"int168","nodeType":"ElementaryTypeName","src":"23207:6:27","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"visibility":"internal"}],"src":"23206:19:27"},"scope":8846,"src":"23152:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8320,"nodeType":"Block","src":"23773:150:27","statements":[{"expression":{"id":8308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8303,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8301,"src":"23783:10:27","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8306,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8298,"src":"23803:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8305,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23796:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int160_$","typeString":"type(int160)"},"typeName":{"id":8304,"name":"int160","nodeType":"ElementaryTypeName","src":"23796:6:27","typeDescriptions":{}}},"id":8307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23796:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"src":"23783:26:27","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"id":8309,"nodeType":"ExpressionStatement","src":"23783:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8310,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8301,"src":"23823:10:27","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8311,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8298,"src":"23837:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"23823:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8319,"nodeType":"IfStatement","src":"23819:98:27","trueBody":{"id":8318,"nodeType":"Block","src":"23844:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313630","id":8314,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23895:3:27","typeDescriptions":{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},"value":"160"},{"id":8315,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8298,"src":"23900:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8313,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"23865:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23865:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8317,"nodeType":"RevertStatement","src":"23858:48:27"}]}}]},"documentation":{"id":8296,"nodeType":"StructuredDocumentation","src":"23382:312:27","text":" @dev Returns the downcasted int160 from int256, reverting on\n overflow (when the input is less than smallest int160 or\n greater than largest int160).\n Counterpart to Solidity's `int160` operator.\n Requirements:\n - input must fit into 160 bits"},"id":8321,"implemented":true,"kind":"function","modifiers":[],"name":"toInt160","nameLocation":"23708:8:27","nodeType":"FunctionDefinition","parameters":{"id":8299,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8298,"mutability":"mutable","name":"value","nameLocation":"23724:5:27","nodeType":"VariableDeclaration","scope":8321,"src":"23717:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8297,"name":"int256","nodeType":"ElementaryTypeName","src":"23717:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"23716:14:27"},"returnParameters":{"id":8302,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8301,"mutability":"mutable","name":"downcasted","nameLocation":"23761:10:27","nodeType":"VariableDeclaration","scope":8321,"src":"23754:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"},"typeName":{"id":8300,"name":"int160","nodeType":"ElementaryTypeName","src":"23754:6:27","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"visibility":"internal"}],"src":"23753:19:27"},"scope":8846,"src":"23699:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8346,"nodeType":"Block","src":"24320:150:27","statements":[{"expression":{"id":8334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8329,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8327,"src":"24330:10:27","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8332,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8324,"src":"24350:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8331,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24343:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int152_$","typeString":"type(int152)"},"typeName":{"id":8330,"name":"int152","nodeType":"ElementaryTypeName","src":"24343:6:27","typeDescriptions":{}}},"id":8333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24343:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"src":"24330:26:27","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"id":8335,"nodeType":"ExpressionStatement","src":"24330:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8336,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8327,"src":"24370:10:27","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8337,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8324,"src":"24384:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"24370:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8345,"nodeType":"IfStatement","src":"24366:98:27","trueBody":{"id":8344,"nodeType":"Block","src":"24391:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313532","id":8340,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24442:3:27","typeDescriptions":{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},"value":"152"},{"id":8341,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8324,"src":"24447:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8339,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"24412:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24412:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8343,"nodeType":"RevertStatement","src":"24405:48:27"}]}}]},"documentation":{"id":8322,"nodeType":"StructuredDocumentation","src":"23929:312:27","text":" @dev Returns the downcasted int152 from int256, reverting on\n overflow (when the input is less than smallest int152 or\n greater than largest int152).\n Counterpart to Solidity's `int152` operator.\n Requirements:\n - input must fit into 152 bits"},"id":8347,"implemented":true,"kind":"function","modifiers":[],"name":"toInt152","nameLocation":"24255:8:27","nodeType":"FunctionDefinition","parameters":{"id":8325,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8324,"mutability":"mutable","name":"value","nameLocation":"24271:5:27","nodeType":"VariableDeclaration","scope":8347,"src":"24264:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8323,"name":"int256","nodeType":"ElementaryTypeName","src":"24264:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"24263:14:27"},"returnParameters":{"id":8328,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8327,"mutability":"mutable","name":"downcasted","nameLocation":"24308:10:27","nodeType":"VariableDeclaration","scope":8347,"src":"24301:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"},"typeName":{"id":8326,"name":"int152","nodeType":"ElementaryTypeName","src":"24301:6:27","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"visibility":"internal"}],"src":"24300:19:27"},"scope":8846,"src":"24246:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8372,"nodeType":"Block","src":"24867:150:27","statements":[{"expression":{"id":8360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8355,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8353,"src":"24877:10:27","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8358,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8350,"src":"24897:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8357,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24890:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int144_$","typeString":"type(int144)"},"typeName":{"id":8356,"name":"int144","nodeType":"ElementaryTypeName","src":"24890:6:27","typeDescriptions":{}}},"id":8359,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24890:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"src":"24877:26:27","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"id":8361,"nodeType":"ExpressionStatement","src":"24877:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8362,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8353,"src":"24917:10:27","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8363,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8350,"src":"24931:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"24917:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8371,"nodeType":"IfStatement","src":"24913:98:27","trueBody":{"id":8370,"nodeType":"Block","src":"24938:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313434","id":8366,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24989:3:27","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},"value":"144"},{"id":8367,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8350,"src":"24994:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8365,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"24959:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8368,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24959:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8369,"nodeType":"RevertStatement","src":"24952:48:27"}]}}]},"documentation":{"id":8348,"nodeType":"StructuredDocumentation","src":"24476:312:27","text":" @dev Returns the downcasted int144 from int256, reverting on\n overflow (when the input is less than smallest int144 or\n greater than largest int144).\n Counterpart to Solidity's `int144` operator.\n Requirements:\n - input must fit into 144 bits"},"id":8373,"implemented":true,"kind":"function","modifiers":[],"name":"toInt144","nameLocation":"24802:8:27","nodeType":"FunctionDefinition","parameters":{"id":8351,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8350,"mutability":"mutable","name":"value","nameLocation":"24818:5:27","nodeType":"VariableDeclaration","scope":8373,"src":"24811:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8349,"name":"int256","nodeType":"ElementaryTypeName","src":"24811:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"24810:14:27"},"returnParameters":{"id":8354,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8353,"mutability":"mutable","name":"downcasted","nameLocation":"24855:10:27","nodeType":"VariableDeclaration","scope":8373,"src":"24848:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"},"typeName":{"id":8352,"name":"int144","nodeType":"ElementaryTypeName","src":"24848:6:27","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"visibility":"internal"}],"src":"24847:19:27"},"scope":8846,"src":"24793:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8398,"nodeType":"Block","src":"25414:150:27","statements":[{"expression":{"id":8386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8381,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8379,"src":"25424:10:27","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8384,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8376,"src":"25444:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8383,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25437:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int136_$","typeString":"type(int136)"},"typeName":{"id":8382,"name":"int136","nodeType":"ElementaryTypeName","src":"25437:6:27","typeDescriptions":{}}},"id":8385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25437:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"src":"25424:26:27","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"id":8387,"nodeType":"ExpressionStatement","src":"25424:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8390,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8388,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8379,"src":"25464:10:27","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8389,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8376,"src":"25478:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"25464:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8397,"nodeType":"IfStatement","src":"25460:98:27","trueBody":{"id":8396,"nodeType":"Block","src":"25485:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313336","id":8392,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25536:3:27","typeDescriptions":{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},"value":"136"},{"id":8393,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8376,"src":"25541:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8391,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"25506:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8394,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25506:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8395,"nodeType":"RevertStatement","src":"25499:48:27"}]}}]},"documentation":{"id":8374,"nodeType":"StructuredDocumentation","src":"25023:312:27","text":" @dev Returns the downcasted int136 from int256, reverting on\n overflow (when the input is less than smallest int136 or\n greater than largest int136).\n Counterpart to Solidity's `int136` operator.\n Requirements:\n - input must fit into 136 bits"},"id":8399,"implemented":true,"kind":"function","modifiers":[],"name":"toInt136","nameLocation":"25349:8:27","nodeType":"FunctionDefinition","parameters":{"id":8377,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8376,"mutability":"mutable","name":"value","nameLocation":"25365:5:27","nodeType":"VariableDeclaration","scope":8399,"src":"25358:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8375,"name":"int256","nodeType":"ElementaryTypeName","src":"25358:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"25357:14:27"},"returnParameters":{"id":8380,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8379,"mutability":"mutable","name":"downcasted","nameLocation":"25402:10:27","nodeType":"VariableDeclaration","scope":8399,"src":"25395:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"},"typeName":{"id":8378,"name":"int136","nodeType":"ElementaryTypeName","src":"25395:6:27","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"visibility":"internal"}],"src":"25394:19:27"},"scope":8846,"src":"25340:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8424,"nodeType":"Block","src":"25961:150:27","statements":[{"expression":{"id":8412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8407,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8405,"src":"25971:10:27","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8410,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8402,"src":"25991:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8409,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25984:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int128_$","typeString":"type(int128)"},"typeName":{"id":8408,"name":"int128","nodeType":"ElementaryTypeName","src":"25984:6:27","typeDescriptions":{}}},"id":8411,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25984:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"src":"25971:26:27","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"id":8413,"nodeType":"ExpressionStatement","src":"25971:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8414,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8405,"src":"26011:10:27","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8415,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8402,"src":"26025:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"26011:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8423,"nodeType":"IfStatement","src":"26007:98:27","trueBody":{"id":8422,"nodeType":"Block","src":"26032:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313238","id":8418,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26083:3:27","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},{"id":8419,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8402,"src":"26088:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8417,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"26053:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26053:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8421,"nodeType":"RevertStatement","src":"26046:48:27"}]}}]},"documentation":{"id":8400,"nodeType":"StructuredDocumentation","src":"25570:312:27","text":" @dev Returns the downcasted int128 from int256, reverting on\n overflow (when the input is less than smallest int128 or\n greater than largest int128).\n Counterpart to Solidity's `int128` operator.\n Requirements:\n - input must fit into 128 bits"},"id":8425,"implemented":true,"kind":"function","modifiers":[],"name":"toInt128","nameLocation":"25896:8:27","nodeType":"FunctionDefinition","parameters":{"id":8403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8402,"mutability":"mutable","name":"value","nameLocation":"25912:5:27","nodeType":"VariableDeclaration","scope":8425,"src":"25905:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8401,"name":"int256","nodeType":"ElementaryTypeName","src":"25905:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"25904:14:27"},"returnParameters":{"id":8406,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8405,"mutability":"mutable","name":"downcasted","nameLocation":"25949:10:27","nodeType":"VariableDeclaration","scope":8425,"src":"25942:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"},"typeName":{"id":8404,"name":"int128","nodeType":"ElementaryTypeName","src":"25942:6:27","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"visibility":"internal"}],"src":"25941:19:27"},"scope":8846,"src":"25887:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8450,"nodeType":"Block","src":"26508:150:27","statements":[{"expression":{"id":8438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8433,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8431,"src":"26518:10:27","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8436,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8428,"src":"26538:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8435,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"26531:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int120_$","typeString":"type(int120)"},"typeName":{"id":8434,"name":"int120","nodeType":"ElementaryTypeName","src":"26531:6:27","typeDescriptions":{}}},"id":8437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26531:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"src":"26518:26:27","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"id":8439,"nodeType":"ExpressionStatement","src":"26518:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8440,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8431,"src":"26558:10:27","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8441,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8428,"src":"26572:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"26558:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8449,"nodeType":"IfStatement","src":"26554:98:27","trueBody":{"id":8448,"nodeType":"Block","src":"26579:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313230","id":8444,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26630:3:27","typeDescriptions":{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},"value":"120"},{"id":8445,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8428,"src":"26635:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8443,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"26600:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26600:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8447,"nodeType":"RevertStatement","src":"26593:48:27"}]}}]},"documentation":{"id":8426,"nodeType":"StructuredDocumentation","src":"26117:312:27","text":" @dev Returns the downcasted int120 from int256, reverting on\n overflow (when the input is less than smallest int120 or\n greater than largest int120).\n Counterpart to Solidity's `int120` operator.\n Requirements:\n - input must fit into 120 bits"},"id":8451,"implemented":true,"kind":"function","modifiers":[],"name":"toInt120","nameLocation":"26443:8:27","nodeType":"FunctionDefinition","parameters":{"id":8429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8428,"mutability":"mutable","name":"value","nameLocation":"26459:5:27","nodeType":"VariableDeclaration","scope":8451,"src":"26452:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8427,"name":"int256","nodeType":"ElementaryTypeName","src":"26452:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"26451:14:27"},"returnParameters":{"id":8432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8431,"mutability":"mutable","name":"downcasted","nameLocation":"26496:10:27","nodeType":"VariableDeclaration","scope":8451,"src":"26489:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"},"typeName":{"id":8430,"name":"int120","nodeType":"ElementaryTypeName","src":"26489:6:27","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"visibility":"internal"}],"src":"26488:19:27"},"scope":8846,"src":"26434:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8476,"nodeType":"Block","src":"27055:150:27","statements":[{"expression":{"id":8464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8459,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8457,"src":"27065:10:27","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8462,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8454,"src":"27085:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8461,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27078:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int112_$","typeString":"type(int112)"},"typeName":{"id":8460,"name":"int112","nodeType":"ElementaryTypeName","src":"27078:6:27","typeDescriptions":{}}},"id":8463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27078:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"src":"27065:26:27","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"id":8465,"nodeType":"ExpressionStatement","src":"27065:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8466,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8457,"src":"27105:10:27","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8467,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8454,"src":"27119:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"27105:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8475,"nodeType":"IfStatement","src":"27101:98:27","trueBody":{"id":8474,"nodeType":"Block","src":"27126:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313132","id":8470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27177:3:27","typeDescriptions":{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},"value":"112"},{"id":8471,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8454,"src":"27182:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8469,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"27147:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27147:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8473,"nodeType":"RevertStatement","src":"27140:48:27"}]}}]},"documentation":{"id":8452,"nodeType":"StructuredDocumentation","src":"26664:312:27","text":" @dev Returns the downcasted int112 from int256, reverting on\n overflow (when the input is less than smallest int112 or\n greater than largest int112).\n Counterpart to Solidity's `int112` operator.\n Requirements:\n - input must fit into 112 bits"},"id":8477,"implemented":true,"kind":"function","modifiers":[],"name":"toInt112","nameLocation":"26990:8:27","nodeType":"FunctionDefinition","parameters":{"id":8455,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8454,"mutability":"mutable","name":"value","nameLocation":"27006:5:27","nodeType":"VariableDeclaration","scope":8477,"src":"26999:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8453,"name":"int256","nodeType":"ElementaryTypeName","src":"26999:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"26998:14:27"},"returnParameters":{"id":8458,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8457,"mutability":"mutable","name":"downcasted","nameLocation":"27043:10:27","nodeType":"VariableDeclaration","scope":8477,"src":"27036:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"},"typeName":{"id":8456,"name":"int112","nodeType":"ElementaryTypeName","src":"27036:6:27","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"visibility":"internal"}],"src":"27035:19:27"},"scope":8846,"src":"26981:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8502,"nodeType":"Block","src":"27602:150:27","statements":[{"expression":{"id":8490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8485,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8483,"src":"27612:10:27","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8488,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8480,"src":"27632:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8487,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27625:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int104_$","typeString":"type(int104)"},"typeName":{"id":8486,"name":"int104","nodeType":"ElementaryTypeName","src":"27625:6:27","typeDescriptions":{}}},"id":8489,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27625:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"src":"27612:26:27","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"id":8491,"nodeType":"ExpressionStatement","src":"27612:26:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8492,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8483,"src":"27652:10:27","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8493,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8480,"src":"27666:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"27652:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8501,"nodeType":"IfStatement","src":"27648:98:27","trueBody":{"id":8500,"nodeType":"Block","src":"27673:73:27","statements":[{"errorCall":{"arguments":[{"hexValue":"313034","id":8496,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27724:3:27","typeDescriptions":{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},"value":"104"},{"id":8497,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8480,"src":"27729:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8495,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"27694:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8498,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27694:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8499,"nodeType":"RevertStatement","src":"27687:48:27"}]}}]},"documentation":{"id":8478,"nodeType":"StructuredDocumentation","src":"27211:312:27","text":" @dev Returns the downcasted int104 from int256, reverting on\n overflow (when the input is less than smallest int104 or\n greater than largest int104).\n Counterpart to Solidity's `int104` operator.\n Requirements:\n - input must fit into 104 bits"},"id":8503,"implemented":true,"kind":"function","modifiers":[],"name":"toInt104","nameLocation":"27537:8:27","nodeType":"FunctionDefinition","parameters":{"id":8481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8480,"mutability":"mutable","name":"value","nameLocation":"27553:5:27","nodeType":"VariableDeclaration","scope":8503,"src":"27546:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8479,"name":"int256","nodeType":"ElementaryTypeName","src":"27546:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"27545:14:27"},"returnParameters":{"id":8484,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8483,"mutability":"mutable","name":"downcasted","nameLocation":"27590:10:27","nodeType":"VariableDeclaration","scope":8503,"src":"27583:17:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"},"typeName":{"id":8482,"name":"int104","nodeType":"ElementaryTypeName","src":"27583:6:27","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"visibility":"internal"}],"src":"27582:19:27"},"scope":8846,"src":"27528:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8528,"nodeType":"Block","src":"28142:148:27","statements":[{"expression":{"id":8516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8511,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8509,"src":"28152:10:27","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8514,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8506,"src":"28171:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8513,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28165:5:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int96_$","typeString":"type(int96)"},"typeName":{"id":8512,"name":"int96","nodeType":"ElementaryTypeName","src":"28165:5:27","typeDescriptions":{}}},"id":8515,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28165:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"src":"28152:25:27","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"id":8517,"nodeType":"ExpressionStatement","src":"28152:25:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8518,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8509,"src":"28191:10:27","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8519,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8506,"src":"28205:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"28191:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8527,"nodeType":"IfStatement","src":"28187:97:27","trueBody":{"id":8526,"nodeType":"Block","src":"28212:72:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3936","id":8522,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28263:2:27","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"value":"96"},{"id":8523,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8506,"src":"28267:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8521,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"28233:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28233:40:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8525,"nodeType":"RevertStatement","src":"28226:47:27"}]}}]},"documentation":{"id":8504,"nodeType":"StructuredDocumentation","src":"27758:307:27","text":" @dev Returns the downcasted int96 from int256, reverting on\n overflow (when the input is less than smallest int96 or\n greater than largest int96).\n Counterpart to Solidity's `int96` operator.\n Requirements:\n - input must fit into 96 bits"},"id":8529,"implemented":true,"kind":"function","modifiers":[],"name":"toInt96","nameLocation":"28079:7:27","nodeType":"FunctionDefinition","parameters":{"id":8507,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8506,"mutability":"mutable","name":"value","nameLocation":"28094:5:27","nodeType":"VariableDeclaration","scope":8529,"src":"28087:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8505,"name":"int256","nodeType":"ElementaryTypeName","src":"28087:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"28086:14:27"},"returnParameters":{"id":8510,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8509,"mutability":"mutable","name":"downcasted","nameLocation":"28130:10:27","nodeType":"VariableDeclaration","scope":8529,"src":"28124:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"},"typeName":{"id":8508,"name":"int96","nodeType":"ElementaryTypeName","src":"28124:5:27","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"visibility":"internal"}],"src":"28123:18:27"},"scope":8846,"src":"28070:220:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8554,"nodeType":"Block","src":"28680:148:27","statements":[{"expression":{"id":8542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8537,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8535,"src":"28690:10:27","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8540,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8532,"src":"28709:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8539,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28703:5:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int88_$","typeString":"type(int88)"},"typeName":{"id":8538,"name":"int88","nodeType":"ElementaryTypeName","src":"28703:5:27","typeDescriptions":{}}},"id":8541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28703:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"src":"28690:25:27","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"id":8543,"nodeType":"ExpressionStatement","src":"28690:25:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8544,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8535,"src":"28729:10:27","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8545,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8532,"src":"28743:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"28729:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8553,"nodeType":"IfStatement","src":"28725:97:27","trueBody":{"id":8552,"nodeType":"Block","src":"28750:72:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3838","id":8548,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28801:2:27","typeDescriptions":{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},"value":"88"},{"id":8549,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8532,"src":"28805:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8547,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"28771:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28771:40:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8551,"nodeType":"RevertStatement","src":"28764:47:27"}]}}]},"documentation":{"id":8530,"nodeType":"StructuredDocumentation","src":"28296:307:27","text":" @dev Returns the downcasted int88 from int256, reverting on\n overflow (when the input is less than smallest int88 or\n greater than largest int88).\n Counterpart to Solidity's `int88` operator.\n Requirements:\n - input must fit into 88 bits"},"id":8555,"implemented":true,"kind":"function","modifiers":[],"name":"toInt88","nameLocation":"28617:7:27","nodeType":"FunctionDefinition","parameters":{"id":8533,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8532,"mutability":"mutable","name":"value","nameLocation":"28632:5:27","nodeType":"VariableDeclaration","scope":8555,"src":"28625:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8531,"name":"int256","nodeType":"ElementaryTypeName","src":"28625:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"28624:14:27"},"returnParameters":{"id":8536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8535,"mutability":"mutable","name":"downcasted","nameLocation":"28668:10:27","nodeType":"VariableDeclaration","scope":8555,"src":"28662:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"},"typeName":{"id":8534,"name":"int88","nodeType":"ElementaryTypeName","src":"28662:5:27","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"visibility":"internal"}],"src":"28661:18:27"},"scope":8846,"src":"28608:220:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8580,"nodeType":"Block","src":"29218:148:27","statements":[{"expression":{"id":8568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8563,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8561,"src":"29228:10:27","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8566,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8558,"src":"29247:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8565,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29241:5:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int80_$","typeString":"type(int80)"},"typeName":{"id":8564,"name":"int80","nodeType":"ElementaryTypeName","src":"29241:5:27","typeDescriptions":{}}},"id":8567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29241:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"src":"29228:25:27","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"id":8569,"nodeType":"ExpressionStatement","src":"29228:25:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8570,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8561,"src":"29267:10:27","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8571,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8558,"src":"29281:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"29267:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8579,"nodeType":"IfStatement","src":"29263:97:27","trueBody":{"id":8578,"nodeType":"Block","src":"29288:72:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3830","id":8574,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29339:2:27","typeDescriptions":{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},"value":"80"},{"id":8575,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8558,"src":"29343:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8573,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"29309:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8576,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29309:40:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8577,"nodeType":"RevertStatement","src":"29302:47:27"}]}}]},"documentation":{"id":8556,"nodeType":"StructuredDocumentation","src":"28834:307:27","text":" @dev Returns the downcasted int80 from int256, reverting on\n overflow (when the input is less than smallest int80 or\n greater than largest int80).\n Counterpart to Solidity's `int80` operator.\n Requirements:\n - input must fit into 80 bits"},"id":8581,"implemented":true,"kind":"function","modifiers":[],"name":"toInt80","nameLocation":"29155:7:27","nodeType":"FunctionDefinition","parameters":{"id":8559,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8558,"mutability":"mutable","name":"value","nameLocation":"29170:5:27","nodeType":"VariableDeclaration","scope":8581,"src":"29163:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8557,"name":"int256","nodeType":"ElementaryTypeName","src":"29163:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"29162:14:27"},"returnParameters":{"id":8562,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8561,"mutability":"mutable","name":"downcasted","nameLocation":"29206:10:27","nodeType":"VariableDeclaration","scope":8581,"src":"29200:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"},"typeName":{"id":8560,"name":"int80","nodeType":"ElementaryTypeName","src":"29200:5:27","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"visibility":"internal"}],"src":"29199:18:27"},"scope":8846,"src":"29146:220:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8606,"nodeType":"Block","src":"29756:148:27","statements":[{"expression":{"id":8594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8589,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8587,"src":"29766:10:27","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8592,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8584,"src":"29785:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8591,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29779:5:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int72_$","typeString":"type(int72)"},"typeName":{"id":8590,"name":"int72","nodeType":"ElementaryTypeName","src":"29779:5:27","typeDescriptions":{}}},"id":8593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29779:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"src":"29766:25:27","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"id":8595,"nodeType":"ExpressionStatement","src":"29766:25:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8598,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8596,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8587,"src":"29805:10:27","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8597,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8584,"src":"29819:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"29805:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8605,"nodeType":"IfStatement","src":"29801:97:27","trueBody":{"id":8604,"nodeType":"Block","src":"29826:72:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3732","id":8600,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29877:2:27","typeDescriptions":{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},"value":"72"},{"id":8601,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8584,"src":"29881:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8599,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"29847:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29847:40:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8603,"nodeType":"RevertStatement","src":"29840:47:27"}]}}]},"documentation":{"id":8582,"nodeType":"StructuredDocumentation","src":"29372:307:27","text":" @dev Returns the downcasted int72 from int256, reverting on\n overflow (when the input is less than smallest int72 or\n greater than largest int72).\n Counterpart to Solidity's `int72` operator.\n Requirements:\n - input must fit into 72 bits"},"id":8607,"implemented":true,"kind":"function","modifiers":[],"name":"toInt72","nameLocation":"29693:7:27","nodeType":"FunctionDefinition","parameters":{"id":8585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8584,"mutability":"mutable","name":"value","nameLocation":"29708:5:27","nodeType":"VariableDeclaration","scope":8607,"src":"29701:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8583,"name":"int256","nodeType":"ElementaryTypeName","src":"29701:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"29700:14:27"},"returnParameters":{"id":8588,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8587,"mutability":"mutable","name":"downcasted","nameLocation":"29744:10:27","nodeType":"VariableDeclaration","scope":8607,"src":"29738:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"},"typeName":{"id":8586,"name":"int72","nodeType":"ElementaryTypeName","src":"29738:5:27","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"visibility":"internal"}],"src":"29737:18:27"},"scope":8846,"src":"29684:220:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8632,"nodeType":"Block","src":"30294:148:27","statements":[{"expression":{"id":8620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8615,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8613,"src":"30304:10:27","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8618,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8610,"src":"30323:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8617,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30317:5:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int64_$","typeString":"type(int64)"},"typeName":{"id":8616,"name":"int64","nodeType":"ElementaryTypeName","src":"30317:5:27","typeDescriptions":{}}},"id":8619,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30317:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"src":"30304:25:27","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"id":8621,"nodeType":"ExpressionStatement","src":"30304:25:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8622,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8613,"src":"30343:10:27","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8623,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8610,"src":"30357:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"30343:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8631,"nodeType":"IfStatement","src":"30339:97:27","trueBody":{"id":8630,"nodeType":"Block","src":"30364:72:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3634","id":8626,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30415:2:27","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},{"id":8627,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8610,"src":"30419:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8625,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"30385:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30385:40:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8629,"nodeType":"RevertStatement","src":"30378:47:27"}]}}]},"documentation":{"id":8608,"nodeType":"StructuredDocumentation","src":"29910:307:27","text":" @dev Returns the downcasted int64 from int256, reverting on\n overflow (when the input is less than smallest int64 or\n greater than largest int64).\n Counterpart to Solidity's `int64` operator.\n Requirements:\n - input must fit into 64 bits"},"id":8633,"implemented":true,"kind":"function","modifiers":[],"name":"toInt64","nameLocation":"30231:7:27","nodeType":"FunctionDefinition","parameters":{"id":8611,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8610,"mutability":"mutable","name":"value","nameLocation":"30246:5:27","nodeType":"VariableDeclaration","scope":8633,"src":"30239:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8609,"name":"int256","nodeType":"ElementaryTypeName","src":"30239:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"30238:14:27"},"returnParameters":{"id":8614,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8613,"mutability":"mutable","name":"downcasted","nameLocation":"30282:10:27","nodeType":"VariableDeclaration","scope":8633,"src":"30276:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"},"typeName":{"id":8612,"name":"int64","nodeType":"ElementaryTypeName","src":"30276:5:27","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"visibility":"internal"}],"src":"30275:18:27"},"scope":8846,"src":"30222:220:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8658,"nodeType":"Block","src":"30832:148:27","statements":[{"expression":{"id":8646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8641,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8639,"src":"30842:10:27","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8644,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8636,"src":"30861:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8643,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30855:5:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int56_$","typeString":"type(int56)"},"typeName":{"id":8642,"name":"int56","nodeType":"ElementaryTypeName","src":"30855:5:27","typeDescriptions":{}}},"id":8645,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30855:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"src":"30842:25:27","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"id":8647,"nodeType":"ExpressionStatement","src":"30842:25:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8648,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8639,"src":"30881:10:27","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8649,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8636,"src":"30895:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"30881:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8657,"nodeType":"IfStatement","src":"30877:97:27","trueBody":{"id":8656,"nodeType":"Block","src":"30902:72:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3536","id":8652,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30953:2:27","typeDescriptions":{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},"value":"56"},{"id":8653,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8636,"src":"30957:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8651,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"30923:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30923:40:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8655,"nodeType":"RevertStatement","src":"30916:47:27"}]}}]},"documentation":{"id":8634,"nodeType":"StructuredDocumentation","src":"30448:307:27","text":" @dev Returns the downcasted int56 from int256, reverting on\n overflow (when the input is less than smallest int56 or\n greater than largest int56).\n Counterpart to Solidity's `int56` operator.\n Requirements:\n - input must fit into 56 bits"},"id":8659,"implemented":true,"kind":"function","modifiers":[],"name":"toInt56","nameLocation":"30769:7:27","nodeType":"FunctionDefinition","parameters":{"id":8637,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8636,"mutability":"mutable","name":"value","nameLocation":"30784:5:27","nodeType":"VariableDeclaration","scope":8659,"src":"30777:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8635,"name":"int256","nodeType":"ElementaryTypeName","src":"30777:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"30776:14:27"},"returnParameters":{"id":8640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8639,"mutability":"mutable","name":"downcasted","nameLocation":"30820:10:27","nodeType":"VariableDeclaration","scope":8659,"src":"30814:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"},"typeName":{"id":8638,"name":"int56","nodeType":"ElementaryTypeName","src":"30814:5:27","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"visibility":"internal"}],"src":"30813:18:27"},"scope":8846,"src":"30760:220:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8684,"nodeType":"Block","src":"31370:148:27","statements":[{"expression":{"id":8672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8667,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8665,"src":"31380:10:27","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8670,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8662,"src":"31399:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8669,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31393:5:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int48_$","typeString":"type(int48)"},"typeName":{"id":8668,"name":"int48","nodeType":"ElementaryTypeName","src":"31393:5:27","typeDescriptions":{}}},"id":8671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31393:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"src":"31380:25:27","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"id":8673,"nodeType":"ExpressionStatement","src":"31380:25:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8674,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8665,"src":"31419:10:27","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8675,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8662,"src":"31433:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"31419:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8683,"nodeType":"IfStatement","src":"31415:97:27","trueBody":{"id":8682,"nodeType":"Block","src":"31440:72:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3438","id":8678,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31491:2:27","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},{"id":8679,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8662,"src":"31495:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8677,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"31461:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31461:40:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8681,"nodeType":"RevertStatement","src":"31454:47:27"}]}}]},"documentation":{"id":8660,"nodeType":"StructuredDocumentation","src":"30986:307:27","text":" @dev Returns the downcasted int48 from int256, reverting on\n overflow (when the input is less than smallest int48 or\n greater than largest int48).\n Counterpart to Solidity's `int48` operator.\n Requirements:\n - input must fit into 48 bits"},"id":8685,"implemented":true,"kind":"function","modifiers":[],"name":"toInt48","nameLocation":"31307:7:27","nodeType":"FunctionDefinition","parameters":{"id":8663,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8662,"mutability":"mutable","name":"value","nameLocation":"31322:5:27","nodeType":"VariableDeclaration","scope":8685,"src":"31315:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8661,"name":"int256","nodeType":"ElementaryTypeName","src":"31315:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"31314:14:27"},"returnParameters":{"id":8666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8665,"mutability":"mutable","name":"downcasted","nameLocation":"31358:10:27","nodeType":"VariableDeclaration","scope":8685,"src":"31352:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"},"typeName":{"id":8664,"name":"int48","nodeType":"ElementaryTypeName","src":"31352:5:27","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"visibility":"internal"}],"src":"31351:18:27"},"scope":8846,"src":"31298:220:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8710,"nodeType":"Block","src":"31908:148:27","statements":[{"expression":{"id":8698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8693,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8691,"src":"31918:10:27","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8696,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8688,"src":"31937:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8695,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31931:5:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int40_$","typeString":"type(int40)"},"typeName":{"id":8694,"name":"int40","nodeType":"ElementaryTypeName","src":"31931:5:27","typeDescriptions":{}}},"id":8697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31931:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"src":"31918:25:27","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"id":8699,"nodeType":"ExpressionStatement","src":"31918:25:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8700,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8691,"src":"31957:10:27","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8701,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8688,"src":"31971:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"31957:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8709,"nodeType":"IfStatement","src":"31953:97:27","trueBody":{"id":8708,"nodeType":"Block","src":"31978:72:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3430","id":8704,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32029:2:27","typeDescriptions":{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},"value":"40"},{"id":8705,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8688,"src":"32033:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8703,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"31999:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31999:40:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8707,"nodeType":"RevertStatement","src":"31992:47:27"}]}}]},"documentation":{"id":8686,"nodeType":"StructuredDocumentation","src":"31524:307:27","text":" @dev Returns the downcasted int40 from int256, reverting on\n overflow (when the input is less than smallest int40 or\n greater than largest int40).\n Counterpart to Solidity's `int40` operator.\n Requirements:\n - input must fit into 40 bits"},"id":8711,"implemented":true,"kind":"function","modifiers":[],"name":"toInt40","nameLocation":"31845:7:27","nodeType":"FunctionDefinition","parameters":{"id":8689,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8688,"mutability":"mutable","name":"value","nameLocation":"31860:5:27","nodeType":"VariableDeclaration","scope":8711,"src":"31853:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8687,"name":"int256","nodeType":"ElementaryTypeName","src":"31853:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"31852:14:27"},"returnParameters":{"id":8692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8691,"mutability":"mutable","name":"downcasted","nameLocation":"31896:10:27","nodeType":"VariableDeclaration","scope":8711,"src":"31890:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"},"typeName":{"id":8690,"name":"int40","nodeType":"ElementaryTypeName","src":"31890:5:27","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"visibility":"internal"}],"src":"31889:18:27"},"scope":8846,"src":"31836:220:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8736,"nodeType":"Block","src":"32446:148:27","statements":[{"expression":{"id":8724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8719,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8717,"src":"32456:10:27","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8722,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8714,"src":"32475:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8721,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32469:5:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int32_$","typeString":"type(int32)"},"typeName":{"id":8720,"name":"int32","nodeType":"ElementaryTypeName","src":"32469:5:27","typeDescriptions":{}}},"id":8723,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32469:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"src":"32456:25:27","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"id":8725,"nodeType":"ExpressionStatement","src":"32456:25:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8726,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8717,"src":"32495:10:27","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8727,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8714,"src":"32509:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"32495:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8735,"nodeType":"IfStatement","src":"32491:97:27","trueBody":{"id":8734,"nodeType":"Block","src":"32516:72:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3332","id":8730,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32567:2:27","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"id":8731,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8714,"src":"32571:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8729,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"32537:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8732,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32537:40:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8733,"nodeType":"RevertStatement","src":"32530:47:27"}]}}]},"documentation":{"id":8712,"nodeType":"StructuredDocumentation","src":"32062:307:27","text":" @dev Returns the downcasted int32 from int256, reverting on\n overflow (when the input is less than smallest int32 or\n greater than largest int32).\n Counterpart to Solidity's `int32` operator.\n Requirements:\n - input must fit into 32 bits"},"id":8737,"implemented":true,"kind":"function","modifiers":[],"name":"toInt32","nameLocation":"32383:7:27","nodeType":"FunctionDefinition","parameters":{"id":8715,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8714,"mutability":"mutable","name":"value","nameLocation":"32398:5:27","nodeType":"VariableDeclaration","scope":8737,"src":"32391:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8713,"name":"int256","nodeType":"ElementaryTypeName","src":"32391:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"32390:14:27"},"returnParameters":{"id":8718,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8717,"mutability":"mutable","name":"downcasted","nameLocation":"32434:10:27","nodeType":"VariableDeclaration","scope":8737,"src":"32428:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"},"typeName":{"id":8716,"name":"int32","nodeType":"ElementaryTypeName","src":"32428:5:27","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"visibility":"internal"}],"src":"32427:18:27"},"scope":8846,"src":"32374:220:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8762,"nodeType":"Block","src":"32984:148:27","statements":[{"expression":{"id":8750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8745,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8743,"src":"32994:10:27","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8748,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8740,"src":"33013:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8747,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33007:5:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int24_$","typeString":"type(int24)"},"typeName":{"id":8746,"name":"int24","nodeType":"ElementaryTypeName","src":"33007:5:27","typeDescriptions":{}}},"id":8749,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33007:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"src":"32994:25:27","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"id":8751,"nodeType":"ExpressionStatement","src":"32994:25:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8752,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8743,"src":"33033:10:27","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8753,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8740,"src":"33047:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"33033:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8761,"nodeType":"IfStatement","src":"33029:97:27","trueBody":{"id":8760,"nodeType":"Block","src":"33054:72:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3234","id":8756,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33105:2:27","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},{"id":8757,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8740,"src":"33109:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8755,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"33075:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8758,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33075:40:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8759,"nodeType":"RevertStatement","src":"33068:47:27"}]}}]},"documentation":{"id":8738,"nodeType":"StructuredDocumentation","src":"32600:307:27","text":" @dev Returns the downcasted int24 from int256, reverting on\n overflow (when the input is less than smallest int24 or\n greater than largest int24).\n Counterpart to Solidity's `int24` operator.\n Requirements:\n - input must fit into 24 bits"},"id":8763,"implemented":true,"kind":"function","modifiers":[],"name":"toInt24","nameLocation":"32921:7:27","nodeType":"FunctionDefinition","parameters":{"id":8741,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8740,"mutability":"mutable","name":"value","nameLocation":"32936:5:27","nodeType":"VariableDeclaration","scope":8763,"src":"32929:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8739,"name":"int256","nodeType":"ElementaryTypeName","src":"32929:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"32928:14:27"},"returnParameters":{"id":8744,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8743,"mutability":"mutable","name":"downcasted","nameLocation":"32972:10:27","nodeType":"VariableDeclaration","scope":8763,"src":"32966:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"},"typeName":{"id":8742,"name":"int24","nodeType":"ElementaryTypeName","src":"32966:5:27","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"visibility":"internal"}],"src":"32965:18:27"},"scope":8846,"src":"32912:220:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8788,"nodeType":"Block","src":"33522:148:27","statements":[{"expression":{"id":8776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8771,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8769,"src":"33532:10:27","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8774,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8766,"src":"33551:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8773,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33545:5:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int16_$","typeString":"type(int16)"},"typeName":{"id":8772,"name":"int16","nodeType":"ElementaryTypeName","src":"33545:5:27","typeDescriptions":{}}},"id":8775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33545:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"src":"33532:25:27","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"id":8777,"nodeType":"ExpressionStatement","src":"33532:25:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8778,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8769,"src":"33571:10:27","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8779,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8766,"src":"33585:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"33571:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8787,"nodeType":"IfStatement","src":"33567:97:27","trueBody":{"id":8786,"nodeType":"Block","src":"33592:72:27","statements":[{"errorCall":{"arguments":[{"hexValue":"3136","id":8782,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33643:2:27","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},{"id":8783,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8766,"src":"33647:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8781,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"33613:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33613:40:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8785,"nodeType":"RevertStatement","src":"33606:47:27"}]}}]},"documentation":{"id":8764,"nodeType":"StructuredDocumentation","src":"33138:307:27","text":" @dev Returns the downcasted int16 from int256, reverting on\n overflow (when the input is less than smallest int16 or\n greater than largest int16).\n Counterpart to Solidity's `int16` operator.\n Requirements:\n - input must fit into 16 bits"},"id":8789,"implemented":true,"kind":"function","modifiers":[],"name":"toInt16","nameLocation":"33459:7:27","nodeType":"FunctionDefinition","parameters":{"id":8767,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8766,"mutability":"mutable","name":"value","nameLocation":"33474:5:27","nodeType":"VariableDeclaration","scope":8789,"src":"33467:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8765,"name":"int256","nodeType":"ElementaryTypeName","src":"33467:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"33466:14:27"},"returnParameters":{"id":8770,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8769,"mutability":"mutable","name":"downcasted","nameLocation":"33510:10:27","nodeType":"VariableDeclaration","scope":8789,"src":"33504:16:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"},"typeName":{"id":8768,"name":"int16","nodeType":"ElementaryTypeName","src":"33504:5:27","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"visibility":"internal"}],"src":"33503:18:27"},"scope":8846,"src":"33450:220:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8814,"nodeType":"Block","src":"34053:146:27","statements":[{"expression":{"id":8802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8797,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8795,"src":"34063:10:27","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8800,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8792,"src":"34081:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8799,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34076:4:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int8_$","typeString":"type(int8)"},"typeName":{"id":8798,"name":"int8","nodeType":"ElementaryTypeName","src":"34076:4:27","typeDescriptions":{}}},"id":8801,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34076:11:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"src":"34063:24:27","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"id":8803,"nodeType":"ExpressionStatement","src":"34063:24:27"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8804,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8795,"src":"34101:10:27","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8805,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8792,"src":"34115:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"34101:19:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8813,"nodeType":"IfStatement","src":"34097:96:27","trueBody":{"id":8812,"nodeType":"Block","src":"34122:71:27","statements":[{"errorCall":{"arguments":[{"hexValue":"38","id":8808,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34173:1:27","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},{"id":8809,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8792,"src":"34176:5:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8807,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7113,"src":"34143:29:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8810,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34143:39:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8811,"nodeType":"RevertStatement","src":"34136:46:27"}]}}]},"documentation":{"id":8790,"nodeType":"StructuredDocumentation","src":"33676:302:27","text":" @dev Returns the downcasted int8 from int256, reverting on\n overflow (when the input is less than smallest int8 or\n greater than largest int8).\n Counterpart to Solidity's `int8` operator.\n Requirements:\n - input must fit into 8 bits"},"id":8815,"implemented":true,"kind":"function","modifiers":[],"name":"toInt8","nameLocation":"33992:6:27","nodeType":"FunctionDefinition","parameters":{"id":8793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8792,"mutability":"mutable","name":"value","nameLocation":"34006:5:27","nodeType":"VariableDeclaration","scope":8815,"src":"33999:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8791,"name":"int256","nodeType":"ElementaryTypeName","src":"33999:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"33998:14:27"},"returnParameters":{"id":8796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8795,"mutability":"mutable","name":"downcasted","nameLocation":"34041:10:27","nodeType":"VariableDeclaration","scope":8815,"src":"34036:15:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"},"typeName":{"id":8794,"name":"int8","nodeType":"ElementaryTypeName","src":"34036:4:27","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"visibility":"internal"}],"src":"34035:17:27"},"scope":8846,"src":"33983:216:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8844,"nodeType":"Block","src":"34439:250:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8832,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8823,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8818,"src":"34552:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[{"expression":{"arguments":[{"id":8828,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34573:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":8827,"name":"int256","nodeType":"ElementaryTypeName","src":"34573:6:27","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"}],"id":8826,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"34568:4:27","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8829,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34568:12:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int256","typeString":"type(int256)"}},"id":8830,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"34581:3:27","memberName":"max","nodeType":"MemberAccess","src":"34568:16:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8825,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34560:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":8824,"name":"uint256","nodeType":"ElementaryTypeName","src":"34560:7:27","typeDescriptions":{}}},"id":8831,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34560:25:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34552:33:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8838,"nodeType":"IfStatement","src":"34548:105:27","trueBody":{"id":8837,"nodeType":"Block","src":"34587:66:27","statements":[{"errorCall":{"arguments":[{"id":8834,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8818,"src":"34636:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8833,"name":"SafeCastOverflowedUintToInt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7118,"src":"34608:27:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":8835,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34608:34:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8836,"nodeType":"RevertStatement","src":"34601:41:27"}]}},{"expression":{"arguments":[{"id":8841,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8818,"src":"34676:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8840,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34669:6:27","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":8839,"name":"int256","nodeType":"ElementaryTypeName","src":"34669:6:27","typeDescriptions":{}}},"id":8842,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34669:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":8822,"id":8843,"nodeType":"Return","src":"34662:20:27"}]},"documentation":{"id":8816,"nodeType":"StructuredDocumentation","src":"34205:165:27","text":" @dev Converts an unsigned uint256 into a signed int256.\n Requirements:\n - input must be less than or equal to maxInt256."},"id":8845,"implemented":true,"kind":"function","modifiers":[],"name":"toInt256","nameLocation":"34384:8:27","nodeType":"FunctionDefinition","parameters":{"id":8819,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8818,"mutability":"mutable","name":"value","nameLocation":"34401:5:27","nodeType":"VariableDeclaration","scope":8845,"src":"34393:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8817,"name":"uint256","nodeType":"ElementaryTypeName","src":"34393:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34392:15:27"},"returnParameters":{"id":8822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8821,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8845,"src":"34431:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8820,"name":"int256","nodeType":"ElementaryTypeName","src":"34431:6:27","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"34430:8:27"},"scope":8846,"src":"34375:314:27","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":8847,"src":"764:33927:27","usedErrors":[7101,7106,7113,7118],"usedEvents":[]}],"src":"192:34500:27"},"id":27},"contracts/ProtocolFeeControllerMigration.sol":{"ast":{"absolutePath":"contracts/ProtocolFeeControllerMigration.sol","exportedSymbols":{"IAuthentication":[47],"IBasicAuthorizer":[32],"IProtocolFeeController":[613],"IVault":[651],"IVaultAdmin":[941],"PoolConfig":[2145],"PoolRoleAccounts":[2217],"ProtocolFeeController":[6083],"ProtocolFeeControllerMigration":[9147],"ReentrancyGuardTransient":[4215]},"id":9148,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":8848,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:28"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","id":8850,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9148,"sourceUnit":48,"src":"72:116:28","symbolAliases":[{"foreign":{"id":8849,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"81:15:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol","id":8852,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9148,"sourceUnit":33,"src":"189:114:28","symbolAliases":[{"foreign":{"id":8851,"name":"IBasicAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32,"src":"198:16:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":8854,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9148,"sourceUnit":614,"src":"304:113:28","symbolAliases":[{"foreign":{"id":8853,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":613,"src":"313:22:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":8857,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9148,"sourceUnit":2412,"src":"418:107:28","symbolAliases":[{"foreign":{"id":8855,"name":"PoolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2217,"src":"427:16:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":8856,"name":"PoolConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2145,"src":"445:10:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","id":8859,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9148,"sourceUnit":942,"src":"526:91:28","symbolAliases":[{"foreign":{"id":8858,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":941,"src":"535:11:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":8861,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9148,"sourceUnit":652,"src":"618:81:28","symbolAliases":[{"foreign":{"id":8860,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":651,"src":"627:6:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","file":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","id":8863,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9148,"sourceUnit":6084,"src":"701:100:28","symbolAliases":[{"foreign":{"id":8862,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6083,"src":"710:21:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":8865,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9148,"sourceUnit":4216,"src":"802:132:28","symbolAliases":[{"foreign":{"id":8864,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4215,"src":"815:24:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":8867,"name":"ReentrancyGuardTransient","nameLocations":["2120:24:28"],"nodeType":"IdentifierPath","referencedDeclaration":4215,"src":"2120:24:28"},"id":8868,"nodeType":"InheritanceSpecifier","src":"2120:24:28"}],"canonicalName":"ProtocolFeeControllerMigration","contractDependencies":[],"contractKind":"contract","documentation":{"id":8866,"nodeType":"StructuredDocumentation","src":"936:1140:28","text":" @notice Migrate from the original ProtocolFeeController to one with extra events.\n @dev These events enable tracking pool protocol fees under all circumstances (in particular, when protocol fees are\n initially turned off). It also adds some infrastructure that makes future migrations easier, and removes redundant\n poolCreator storage.\n This simple migration assumes:\n 1) There are no pools with pool creators\n 2) There are no pools with protocol fee exemptions or overrides\n 3) Migrating the complete list of pools can be done in a single transaction.\n These simplifications enable simply calling `migrateFeeController` once with the complete list of pools.\n After the migration, the Vault will point to the new fee controller, and any collection thereafter will go there.\n If there are any residual fee amounts in the old fee controller (i.e., that were collected but not withdrawn),\n governance will still need to withdraw from the old fee controller. Otherwise, no further interaction with the old\n controller is necessary.\n Associated with `20250221-protocol-fee-controller-migration`."},"fullyImplemented":true,"id":9147,"linearizedBaseContracts":[9147,4215],"name":"ProtocolFeeControllerMigration","nameLocation":"2086:30:28","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"7ea3a964","id":8871,"mutability":"immutable","name":"oldFeeController","nameLocation":"2191:16:28","nodeType":"VariableDeclaration","scope":9147,"src":"2151:56:28","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"},"typeName":{"id":8870,"nodeType":"UserDefinedTypeName","pathNode":{"id":8869,"name":"IProtocolFeeController","nameLocations":["2151:22:28"],"nodeType":"IdentifierPath","referencedDeclaration":613,"src":"2151:22:28"},"referencedDeclaration":613,"src":"2151:22:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"visibility":"public"},{"constant":false,"functionSelector":"51da116d","id":8874,"mutability":"immutable","name":"newFeeController","nameLocation":"2253:16:28","nodeType":"VariableDeclaration","scope":9147,"src":"2213:56:28","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"},"typeName":{"id":8873,"nodeType":"UserDefinedTypeName","pathNode":{"id":8872,"name":"IProtocolFeeController","nameLocations":["2213:22:28"],"nodeType":"IdentifierPath","referencedDeclaration":613,"src":"2213:22:28"},"referencedDeclaration":613,"src":"2213:22:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"visibility":"public"},{"constant":false,"functionSelector":"fbfa77cf","id":8877,"mutability":"immutable","name":"vault","nameLocation":"2300:5:28","nodeType":"VariableDeclaration","scope":9147,"src":"2276:29:28","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":8876,"nodeType":"UserDefinedTypeName","pathNode":{"id":8875,"name":"IVault","nameLocations":["2276:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"2276:6:28"},"referencedDeclaration":651,"src":"2276:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"public"},{"constant":false,"id":8880,"mutability":"immutable","name":"_authorizer","nameLocation":"2411:11:28","nodeType":"VariableDeclaration","scope":9147,"src":"2375:47:28","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"},"typeName":{"id":8879,"nodeType":"UserDefinedTypeName","pathNode":{"id":8878,"name":"IBasicAuthorizer","nameLocations":["2375:16:28"],"nodeType":"IdentifierPath","referencedDeclaration":32,"src":"2375:16:28"},"referencedDeclaration":32,"src":"2375:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"visibility":"internal"},{"constant":false,"id":8882,"mutability":"mutable","name":"_finalized","nameLocation":"2526:10:28","nodeType":"VariableDeclaration","scope":9147,"src":"2512:24:28","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8881,"name":"bool","nodeType":"ElementaryTypeName","src":"2512:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"documentation":{"id":8883,"nodeType":"StructuredDocumentation","src":"2543:262:28","text":" @notice Attempt to deploy this contract with invalid parameters.\n @dev ProtocolFeeController contracts return the address of the Vault they were deployed with. Ensure that both\n the old and new controllers reference the same vault."},"errorSelector":"d6f1cb05","id":8885,"name":"InvalidFeeController","nameLocation":"2816:20:28","nodeType":"ErrorDefinition","parameters":{"id":8884,"nodeType":"ParameterList","parameters":[],"src":"2836:2:28"},"src":"2810:29:28"},{"documentation":{"id":8886,"nodeType":"StructuredDocumentation","src":"2845:49:28","text":"@notice Migration can only be performed once."},"errorSelector":"ca1c3cbc","id":8888,"name":"AlreadyMigrated","nameLocation":"2905:15:28","nodeType":"ErrorDefinition","parameters":{"id":8887,"nodeType":"ParameterList","parameters":[],"src":"2920:2:28"},"src":"2899:24:28"},{"body":{"id":8936,"nodeType":"Block","src":"2998:477:28","statements":[{"expression":{"id":8901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8897,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8871,"src":"3008:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8898,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8891,"src":"3027:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":8899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3034:24:28","memberName":"getProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":1900,"src":"3027:31:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IProtocolFeeController_$613_$","typeString":"function () view external returns (contract IProtocolFeeController)"}},"id":8900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3027:33:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"src":"3008:52:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":8902,"nodeType":"ExpressionStatement","src":"3008:52:28"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"id":8907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8903,"name":"_newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8894,"src":"3193:17:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":8904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3211:5:28","memberName":"vault","nodeType":"MemberAccess","referencedDeclaration":419,"src":"3193:23:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IVault_$651_$","typeString":"function () view external returns (contract IVault)"}},"id":8905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3193:25:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8906,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8891,"src":"3222:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"src":"3193:35:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"},"id":8910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8908,"name":"_newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8894,"src":"3232:17:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":8909,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8871,"src":"3253:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"src":"3232:37:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3193:76:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8916,"nodeType":"IfStatement","src":"3189:136:28","trueBody":{"id":8915,"nodeType":"Block","src":"3271:54:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":8912,"name":"InvalidFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8885,"src":"3292:20:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":8913,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3292:22:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8914,"nodeType":"RevertStatement","src":"3285:29:28"}]}},{"expression":{"id":8919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8917,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8877,"src":"3335:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8918,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8891,"src":"3343:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"src":"3335:14:28","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":8920,"nodeType":"ExpressionStatement","src":"3335:14:28"},{"expression":{"id":8923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8921,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8874,"src":"3359:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8922,"name":"_newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8894,"src":"3378:17:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"src":"3359:36:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":8924,"nodeType":"ExpressionStatement","src":"3359:36:28"},{"expression":{"id":8934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8925,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8880,"src":"3406:11:28","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8929,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8877,"src":"3445:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":8930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3451:13:28","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":1965,"src":"3445:19:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$73_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":8931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3445:21:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"}],"id":8928,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3437:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8927,"name":"address","nodeType":"ElementaryTypeName","src":"3437:7:28","typeDescriptions":{}}},"id":8932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3437:30:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":8926,"name":"IBasicAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32,"src":"3420:16:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasicAuthorizer_$32_$","typeString":"type(contract IBasicAuthorizer)"}},"id":8933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3420:48:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"src":"3406:62:28","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":8935,"nodeType":"ExpressionStatement","src":"3406:62:28"}]},"id":8937,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":8895,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8891,"mutability":"mutable","name":"_vault","nameLocation":"2948:6:28","nodeType":"VariableDeclaration","scope":8937,"src":"2941:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":8890,"nodeType":"UserDefinedTypeName","pathNode":{"id":8889,"name":"IVault","nameLocations":["2941:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"2941:6:28"},"referencedDeclaration":651,"src":"2941:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":8894,"mutability":"mutable","name":"_newFeeController","nameLocation":"2979:17:28","nodeType":"VariableDeclaration","scope":8937,"src":"2956:40:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"},"typeName":{"id":8893,"nodeType":"UserDefinedTypeName","pathNode":{"id":8892,"name":"IProtocolFeeController","nameLocations":["2956:22:28"],"nodeType":"IdentifierPath","referencedDeclaration":613,"src":"2956:22:28"},"referencedDeclaration":613,"src":"2956:22:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"2940:57:28"},"returnParameters":{"id":8896,"nodeType":"ParameterList","parameters":[],"src":"2998:0:28"},"scope":9147,"src":"2929:546:28","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":9005,"nodeType":"Block","src":"3997:1509:28","statements":[{"condition":{"id":8946,"name":"_finalized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8882,"src":"4011:10:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8951,"nodeType":"IfStatement","src":"4007:65:28","trueBody":{"id":8950,"nodeType":"Block","src":"4023:49:28","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":8947,"name":"AlreadyMigrated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8888,"src":"4044:15:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":8948,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4044:17:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8949,"nodeType":"RevertStatement","src":"4037:24:28"}]}},{"expression":{"id":8954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8952,"name":"_finalized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8882,"src":"4082:10:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":8953,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4095:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"4082:17:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8955,"nodeType":"ExpressionStatement","src":"4082:17:28"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":8956,"name":"_migrateGlobalPercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9102,"src":"4110:25:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":8957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4110:27:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8958,"nodeType":"ExpressionStatement","src":"4110:27:28"},{"body":{"id":8988,"nodeType":"Block","src":"5012:284:28","statements":[{"assignments":[8971],"declarations":[{"constant":false,"id":8971,"mutability":"mutable","name":"pool","nameLocation":"5034:4:28","nodeType":"VariableDeclaration","scope":8988,"src":"5026:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":8970,"name":"address","nodeType":"ElementaryTypeName","src":"5026:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":8975,"initialValue":{"baseExpression":{"id":8972,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8941,"src":"5041:5:28","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":8974,"indexExpression":{"id":8973,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8960,"src":"5047:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5041:8:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5026:23:28"},{"expression":{"arguments":[{"id":8979,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8971,"src":"5211:4:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8976,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8874,"src":"5162:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":8978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5179:31:28","memberName":"updateProtocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":515,"src":"5162:48:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":8980,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5162:54:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8981,"nodeType":"ExpressionStatement","src":"5162:54:28"},{"expression":{"arguments":[{"id":8985,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8971,"src":"5280:4:28","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8982,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8874,"src":"5230:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":8984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5247:32:28","memberName":"updateProtocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":521,"src":"5230:49:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":8986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5230:55:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8987,"nodeType":"ExpressionStatement","src":"5230:55:28"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8963,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8960,"src":"4989:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":8964,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8941,"src":"4993:5:28","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":8965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4999:6:28","memberName":"length","nodeType":"MemberAccess","src":"4993:12:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4989:16:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8989,"initializationExpression":{"assignments":[8960],"declarations":[{"constant":false,"id":8960,"mutability":"mutable","name":"i","nameLocation":"4982:1:28","nodeType":"VariableDeclaration","scope":8989,"src":"4974:9:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8959,"name":"uint256","nodeType":"ElementaryTypeName","src":"4974:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8962,"initialValue":{"hexValue":"30","id":8961,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4986:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4974:13:28"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":8968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5007:3:28","subExpression":{"id":8967,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8960,"src":"5009:1:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":8969,"nodeType":"ExpressionStatement","src":"5007:3:28"},"nodeType":"ForStatement","src":"4969:327:28"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":8990,"name":"_migrateFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9146,"src":"5357:21:28","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":8991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5357:23:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":8992,"nodeType":"ExpressionStatement","src":"5357:23:28"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":8996,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8880,"src":"5451:11:28","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":8997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5463:18:28","memberName":"DEFAULT_ADMIN_ROLE","nodeType":"MemberAccess","referencedDeclaration":10,"src":"5451:30:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bytes32_$","typeString":"function () view external returns (bytes32)"}},"id":8998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5451:32:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9001,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5493:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9147","typeString":"contract ProtocolFeeControllerMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9147","typeString":"contract ProtocolFeeControllerMigration"}],"id":9000,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5485:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":8999,"name":"address","nodeType":"ElementaryTypeName","src":"5485:7:28","typeDescriptions":{}}},"id":9002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5485:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":8993,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8880,"src":"5426:11:28","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":8995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5438:12:28","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":31,"src":"5426:24:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9003,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5426:73:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9004,"nodeType":"ExpressionStatement","src":"5426:73:28"}]},"documentation":{"id":8938,"nodeType":"StructuredDocumentation","src":"3481:427:28","text":" @notice Permissionless migration function.\n @dev Call this with the full set of pools to perform the migration. After this runs, the Vault will point to the\n new fee controller, which will have a copy of all the relevant state from the old controller. Also, all\n permissions will be revoked, and the contract will be disabled.\n @param pools The complete set of pools to migrate"},"functionSelector":"c2ad0f14","id":9006,"implemented":true,"kind":"function","modifiers":[{"id":8944,"kind":"modifierInvocation","modifierName":{"id":8943,"name":"nonReentrant","nameLocations":["3984:12:28"],"nodeType":"IdentifierPath","referencedDeclaration":4170,"src":"3984:12:28"},"nodeType":"ModifierInvocation","src":"3984:12:28"}],"name":"migrateFeeController","nameLocation":"3922:20:28","nodeType":"FunctionDefinition","parameters":{"id":8942,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8941,"mutability":"mutable","name":"pools","nameLocation":"3960:5:28","nodeType":"VariableDeclaration","scope":9006,"src":"3943:22:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":8939,"name":"address","nodeType":"ElementaryTypeName","src":"3943:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":8940,"nodeType":"ArrayTypeName","src":"3943:9:28","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"3942:24:28"},"returnParameters":{"id":8945,"nodeType":"ParameterList","parameters":[],"src":"3997:0:28"},"scope":9147,"src":"3913:1593:28","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"body":{"id":9101,"nodeType":"Block","src":"5558:1135:28","statements":[{"assignments":[9010],"declarations":[{"constant":false,"id":9010,"mutability":"mutable","name":"swapFeeRole","nameLocation":"5653:11:28","nodeType":"VariableDeclaration","scope":9101,"src":"5645:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9009,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5645:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":9022,"initialValue":{"arguments":[{"expression":{"expression":{"id":9018,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":613,"src":"5735:22:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolFeeController_$613_$","typeString":"type(contract IProtocolFeeController)"}},"id":9019,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5758:34:28","memberName":"setGlobalProtocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":541,"src":"5735:57:28","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_uint256_$returns$__$","typeString":"function IProtocolFeeController.setGlobalProtocolSwapFeePercentage(uint256)"}},"id":9020,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5793:8:28","memberName":"selector","nodeType":"MemberAccess","src":"5735:66:28","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"arguments":[{"arguments":[{"id":9014,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8874,"src":"5691:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}],"id":9013,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5683:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9012,"name":"address","nodeType":"ElementaryTypeName","src":"5683:7:28","typeDescriptions":{}}},"id":9015,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5683:25:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9011,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"5667:15:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAuthentication_$47_$","typeString":"type(contract IAuthentication)"}},"id":9016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5667:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthentication_$47","typeString":"contract IAuthentication"}},"id":9017,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5710:11:28","memberName":"getActionId","nodeType":"MemberAccess","referencedDeclaration":46,"src":"5667:54:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view external returns (bytes32)"}},"id":9021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5667:144:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5645:166:28"},{"assignments":[9024],"declarations":[{"constant":false,"id":9024,"mutability":"mutable","name":"yieldFeeRole","nameLocation":"5830:12:28","nodeType":"VariableDeclaration","scope":9101,"src":"5822:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9023,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5822:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":9036,"initialValue":{"arguments":[{"expression":{"expression":{"id":9032,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":613,"src":"5913:22:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolFeeController_$613_$","typeString":"type(contract IProtocolFeeController)"}},"id":9033,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5936:35:28","memberName":"setGlobalProtocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":547,"src":"5913:58:28","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_uint256_$returns$__$","typeString":"function IProtocolFeeController.setGlobalProtocolYieldFeePercentage(uint256)"}},"id":9034,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5972:8:28","memberName":"selector","nodeType":"MemberAccess","src":"5913:67:28","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"arguments":[{"arguments":[{"id":9028,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8874,"src":"5869:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}],"id":9027,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5861:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9026,"name":"address","nodeType":"ElementaryTypeName","src":"5861:7:28","typeDescriptions":{}}},"id":9029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5861:25:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9025,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"5845:15:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAuthentication_$47_$","typeString":"type(contract IAuthentication)"}},"id":9030,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5845:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthentication_$47","typeString":"contract IAuthentication"}},"id":9031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5888:11:28","memberName":"getActionId","nodeType":"MemberAccess","referencedDeclaration":46,"src":"5845:54:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view external returns (bytes32)"}},"id":9035,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5845:145:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5822:168:28"},{"expression":{"arguments":[{"id":9040,"name":"swapFeeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9010,"src":"6023:11:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9043,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6044:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9147","typeString":"contract ProtocolFeeControllerMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9147","typeString":"contract ProtocolFeeControllerMigration"}],"id":9042,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6036:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9041,"name":"address","nodeType":"ElementaryTypeName","src":"6036:7:28","typeDescriptions":{}}},"id":9044,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6036:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9037,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8880,"src":"6001:11:28","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6013:9:28","memberName":"grantRole","nodeType":"MemberAccess","referencedDeclaration":17,"src":"6001:21:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9045,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6001:49:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9046,"nodeType":"ExpressionStatement","src":"6001:49:28"},{"expression":{"arguments":[{"id":9050,"name":"yieldFeeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9024,"src":"6082:12:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9053,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6104:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9147","typeString":"contract ProtocolFeeControllerMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9147","typeString":"contract ProtocolFeeControllerMigration"}],"id":9052,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6096:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9051,"name":"address","nodeType":"ElementaryTypeName","src":"6096:7:28","typeDescriptions":{}}},"id":9054,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6096:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9047,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8880,"src":"6060:11:28","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6072:9:28","memberName":"grantRole","nodeType":"MemberAccess","referencedDeclaration":17,"src":"6060:21:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9055,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6060:50:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9056,"nodeType":"ExpressionStatement","src":"6060:50:28"},{"assignments":[9058],"declarations":[{"constant":false,"id":9058,"mutability":"mutable","name":"globalSwapFeePercentage","nameLocation":"6176:23:28","nodeType":"VariableDeclaration","scope":9101,"src":"6168:31:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9057,"name":"uint256","nodeType":"ElementaryTypeName","src":"6168:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9062,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9059,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8871,"src":"6202:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":9060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6219:34:28","memberName":"getGlobalProtocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":431,"src":"6202:51:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":9061,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6202:53:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6168:87:28"},{"assignments":[9064],"declarations":[{"constant":false,"id":9064,"mutability":"mutable","name":"globalYieldFeePercentage","nameLocation":"6273:24:28","nodeType":"VariableDeclaration","scope":9101,"src":"6265:32:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9063,"name":"uint256","nodeType":"ElementaryTypeName","src":"6265:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9068,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9065,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8871,"src":"6300:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":9066,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6317:35:28","memberName":"getGlobalProtocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":437,"src":"6300:52:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":9067,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6300:54:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6265:89:28"},{"expression":{"arguments":[{"id":9072,"name":"globalSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9058,"src":"6417:23:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9069,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8874,"src":"6365:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":9071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6382:34:28","memberName":"setGlobalProtocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":541,"src":"6365:51:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256) external"}},"id":9073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6365:76:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9074,"nodeType":"ExpressionStatement","src":"6365:76:28"},{"expression":{"arguments":[{"id":9078,"name":"globalYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9064,"src":"6504:24:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9075,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8874,"src":"6451:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":9077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6468:35:28","memberName":"setGlobalProtocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":547,"src":"6451:52:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256) external"}},"id":9079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6451:78:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9080,"nodeType":"ExpressionStatement","src":"6451:78:28"},{"expression":{"arguments":[{"id":9084,"name":"swapFeeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9010,"src":"6596:11:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9087,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6617:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9147","typeString":"contract ProtocolFeeControllerMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9147","typeString":"contract ProtocolFeeControllerMigration"}],"id":9086,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6609:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9085,"name":"address","nodeType":"ElementaryTypeName","src":"6609:7:28","typeDescriptions":{}}},"id":9088,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6609:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9081,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8880,"src":"6571:11:28","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6583:12:28","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":31,"src":"6571:24:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6571:52:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9090,"nodeType":"ExpressionStatement","src":"6571:52:28"},{"expression":{"arguments":[{"id":9094,"name":"yieldFeeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9024,"src":"6658:12:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9097,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6680:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9147","typeString":"contract ProtocolFeeControllerMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9147","typeString":"contract ProtocolFeeControllerMigration"}],"id":9096,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6672:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9095,"name":"address","nodeType":"ElementaryTypeName","src":"6672:7:28","typeDescriptions":{}}},"id":9098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6672:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9091,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8880,"src":"6633:11:28","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6645:12:28","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":31,"src":"6633:24:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6633:53:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9100,"nodeType":"ExpressionStatement","src":"6633:53:28"}]},"id":9102,"implemented":true,"kind":"function","modifiers":[],"name":"_migrateGlobalPercentages","nameLocation":"5521:25:28","nodeType":"FunctionDefinition","parameters":{"id":9007,"nodeType":"ParameterList","parameters":[],"src":"5546:2:28"},"returnParameters":{"id":9008,"nodeType":"ParameterList","parameters":[],"src":"5558:0:28"},"scope":9147,"src":"5512:1181:28","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9145,"nodeType":"Block","src":"6741:360:28","statements":[{"assignments":[9106],"declarations":[{"constant":false,"id":9106,"mutability":"mutable","name":"setFeeControllerRole","nameLocation":"6759:20:28","nodeType":"VariableDeclaration","scope":9145,"src":"6751:28:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9105,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6751:7:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":9118,"initialValue":{"arguments":[{"expression":{"expression":{"id":9114,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":941,"src":"6839:11:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultAdmin_$941_$","typeString":"type(contract IVaultAdmin)"}},"id":9115,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6851:24:28","memberName":"setProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":802,"src":"6839:36:28","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_contract$_IProtocolFeeController_$613_$returns$__$","typeString":"function IVaultAdmin.setProtocolFeeController(contract IProtocolFeeController)"}},"id":9116,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6876:8:28","memberName":"selector","nodeType":"MemberAccess","src":"6839:45:28","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"arguments":[{"arguments":[{"id":9110,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8877,"src":"6806:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}],"id":9109,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6798:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9108,"name":"address","nodeType":"ElementaryTypeName","src":"6798:7:28","typeDescriptions":{}}},"id":9111,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6798:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9107,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"6782:15:28","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAuthentication_$47_$","typeString":"type(contract IAuthentication)"}},"id":9112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6782:31:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthentication_$47","typeString":"contract IAuthentication"}},"id":9113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6814:11:28","memberName":"getActionId","nodeType":"MemberAccess","referencedDeclaration":46,"src":"6782:43:28","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view external returns (bytes32)"}},"id":9117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6782:112:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"6751:143:28"},{"expression":{"arguments":[{"id":9122,"name":"setFeeControllerRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9106,"src":"6927:20:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9125,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6957:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9147","typeString":"contract ProtocolFeeControllerMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9147","typeString":"contract ProtocolFeeControllerMigration"}],"id":9124,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6949:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9123,"name":"address","nodeType":"ElementaryTypeName","src":"6949:7:28","typeDescriptions":{}}},"id":9126,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6949:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9119,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8880,"src":"6905:11:28","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6917:9:28","memberName":"grantRole","nodeType":"MemberAccess","referencedDeclaration":17,"src":"6905:21:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6905:58:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9128,"nodeType":"ExpressionStatement","src":"6905:58:28"},{"expression":{"arguments":[{"id":9132,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8874,"src":"7005:16:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}],"expression":{"id":9129,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8877,"src":"6974:5:28","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":9131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6980:24:28","memberName":"setProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":802,"src":"6974:30:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IProtocolFeeController_$613_$returns$__$","typeString":"function (contract IProtocolFeeController) external"}},"id":9133,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6974:48:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9134,"nodeType":"ExpressionStatement","src":"6974:48:28"},{"expression":{"arguments":[{"id":9138,"name":"setFeeControllerRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9106,"src":"7058:20:28","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9141,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7088:4:28","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9147","typeString":"contract ProtocolFeeControllerMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9147","typeString":"contract ProtocolFeeControllerMigration"}],"id":9140,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7080:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9139,"name":"address","nodeType":"ElementaryTypeName","src":"7080:7:28","typeDescriptions":{}}},"id":9142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7080:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9135,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8880,"src":"7033:11:28","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7045:12:28","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":31,"src":"7033:24:28","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7033:61:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9144,"nodeType":"ExpressionStatement","src":"7033:61:28"}]},"id":9146,"implemented":true,"kind":"function","modifiers":[],"name":"_migrateFeeController","nameLocation":"6708:21:28","nodeType":"FunctionDefinition","parameters":{"id":9103,"nodeType":"ParameterList","parameters":[],"src":"6729:2:28"},"returnParameters":{"id":9104,"nodeType":"ParameterList","parameters":[],"src":"6741:0:28"},"scope":9147,"src":"6699:402:28","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":9148,"src":"2077:5026:28","usedErrors":[4159,8885,8888],"usedEvents":[]}],"src":"46:7058:28"},"id":28},"contracts/ProtocolFeeControllerMigrationV2.sol":{"ast":{"absolutePath":"contracts/ProtocolFeeControllerMigrationV2.sol","exportedSymbols":{"IAuthentication":[47],"IBasicAuthorizer":[32],"IProtocolFeeController":[613],"IVault":[651],"IVaultAdmin":[941],"PoolConfig":[2145],"PoolRoleAccounts":[2217],"ProtocolFeeController":[6083],"ProtocolFeeControllerMigration":[9147],"ProtocolFeeControllerMigrationV2":[9328],"SingletonAuthentication":[6189]},"id":9329,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":9149,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:29"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","id":9151,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9329,"sourceUnit":48,"src":"72:116:29","symbolAliases":[{"foreign":{"id":9150,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"81:15:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol","id":9153,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9329,"sourceUnit":33,"src":"189:114:29","symbolAliases":[{"foreign":{"id":9152,"name":"IBasicAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32,"src":"198:16:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":9155,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9329,"sourceUnit":614,"src":"304:113:29","symbolAliases":[{"foreign":{"id":9154,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":613,"src":"313:22:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":9158,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9329,"sourceUnit":2412,"src":"418:107:29","symbolAliases":[{"foreign":{"id":9156,"name":"PoolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2217,"src":"427:16:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":9157,"name":"PoolConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2145,"src":"445:10:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","id":9160,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9329,"sourceUnit":942,"src":"526:91:29","symbolAliases":[{"foreign":{"id":9159,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":941,"src":"535:11:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":9162,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9329,"sourceUnit":652,"src":"618:81:29","symbolAliases":[{"foreign":{"id":9161,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":651,"src":"627:6:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","id":9164,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9329,"sourceUnit":6190,"src":"701:104:29","symbolAliases":[{"foreign":{"id":9163,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6189,"src":"710:23:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","file":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","id":9166,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9329,"sourceUnit":6084,"src":"806:100:29","symbolAliases":[{"foreign":{"id":9165,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6083,"src":"815:21:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/ProtocolFeeControllerMigration.sol","file":"./ProtocolFeeControllerMigration.sol","id":9168,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9329,"sourceUnit":9148,"src":"908:86:29","symbolAliases":[{"foreign":{"id":9167,"name":"ProtocolFeeControllerMigration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9147,"src":"917:30:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":9170,"name":"ProtocolFeeControllerMigration","nameLocations":["2261:30:29"],"nodeType":"IdentifierPath","referencedDeclaration":9147,"src":"2261:30:29"},"id":9171,"nodeType":"InheritanceSpecifier","src":"2261:30:29"},{"baseName":{"id":9172,"name":"SingletonAuthentication","nameLocations":["2293:23:29"],"nodeType":"IdentifierPath","referencedDeclaration":6189,"src":"2293:23:29"},"id":9173,"nodeType":"InheritanceSpecifier","src":"2293:23:29"}],"canonicalName":"ProtocolFeeControllerMigrationV2","contractDependencies":[],"contractKind":"contract","documentation":{"id":9169,"nodeType":"StructuredDocumentation","src":"996:1219:29","text":" @notice Migrate from the original ProtocolFeeController to one with extra events.\n @dev These events enable tracking pool protocol fees under all circumstances (in particular, when protocol fees are\n initially turned off).\n After deployment, call `migratePools` as many times as necessary. The list must be generated externally, as pools\n are not iterable on-chain. The batch interface allows an unlimited number of pools to be migrated; it's possible\n there might be too many to migrate in a single call.\n The first time `migratePools` is called, the contract will first copy the global (pool-independent data). This could\n be done in a separate stage, but we're trying to keep the contract simple, vs. duplicating the staging coordinator\n system of v2 just yet.\n When all pools have been migrated, call `finalizeMigration` to disable further migration, update the address in the\n Vault, and renounce all permissions. While `migratePools` is permissionless, this call must be permissioned to\n prevent premature termination in case multiple transactions are required to migrate all the pools.\n Associated with `20250221-protocol-fee-controller-migration` (fork test only)."},"fullyImplemented":true,"id":9328,"linearizedBaseContracts":[9328,6189,2491,47,9147,4215],"name":"ProtocolFeeControllerMigrationV2","nameLocation":"2225:32:29","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":9175,"mutability":"mutable","name":"_globalPercentagesMigrated","nameLocation":"2438:26:29","nodeType":"VariableDeclaration","scope":9328,"src":"2424:40:29","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9174,"name":"bool","nodeType":"ElementaryTypeName","src":"2424:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":9177,"mutability":"mutable","name":"_migrationRole","nameLocation":"2547:14:29","nodeType":"VariableDeclaration","scope":9328,"src":"2530:31:29","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9176,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2530:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"documentation":{"id":9178,"nodeType":"StructuredDocumentation","src":"2568:86:29","text":"@notice Cannot call the base contract migration; it is invalid for this migration."},"errorSelector":"c7b08f63","id":9180,"name":"WrongMigrationVersion","nameLocation":"2665:21:29","nodeType":"ErrorDefinition","parameters":{"id":9179,"nodeType":"ParameterList","parameters":[],"src":"2686:2:29"},"src":"2659:30:29"},{"body":{"id":9220,"nodeType":"Block","src":"2876:273:29","statements":[{"expression":{"id":9208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9196,"name":"_migrationRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9177,"src":"2886:14:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"expression":{"id":9204,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6083,"src":"2971:21:29","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ProtocolFeeController_$6083_$","typeString":"type(contract ProtocolFeeController)"}},"id":9205,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2993:11:29","memberName":"migratePool","nodeType":"MemberAccess","referencedDeclaration":5563,"src":"2971:33:29","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$returns$__$","typeString":"function ProtocolFeeController.migratePool(address)"}},"id":9206,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3005:8:29","memberName":"selector","nodeType":"MemberAccess","src":"2971:42:29","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"arguments":[{"arguments":[{"id":9200,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8874,"src":"2927:16:29","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}],"id":9199,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2919:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9198,"name":"address","nodeType":"ElementaryTypeName","src":"2919:7:29","typeDescriptions":{}}},"id":9201,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2919:25:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9197,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"2903:15:29","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAuthentication_$47_$","typeString":"type(contract IAuthentication)"}},"id":9202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2903:42:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthentication_$47","typeString":"contract IAuthentication"}},"id":9203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2946:11:29","memberName":"getActionId","nodeType":"MemberAccess","referencedDeclaration":46,"src":"2903:54:29","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view external returns (bytes32)"}},"id":9207,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2903:120:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"2886:137:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":9209,"nodeType":"ExpressionStatement","src":"2886:137:29"},{"expression":{"arguments":[{"id":9213,"name":"_migrationRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9177,"src":"3112:14:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9216,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3136:4:29","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigrationV2_$9328","typeString":"contract ProtocolFeeControllerMigrationV2"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigrationV2_$9328","typeString":"contract ProtocolFeeControllerMigrationV2"}],"id":9215,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3128:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9214,"name":"address","nodeType":"ElementaryTypeName","src":"3128:7:29","typeDescriptions":{}}},"id":9217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3128:13:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9210,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8880,"src":"3090:11:29","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3102:9:29","memberName":"grantRole","nodeType":"MemberAccess","referencedDeclaration":17,"src":"3090:21:29","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9218,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3090:52:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9219,"nodeType":"ExpressionStatement","src":"3090:52:29"}]},"id":9221,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":9189,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9183,"src":"2817:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},{"id":9190,"name":"_newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9186,"src":"2825:17:29","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}}],"id":9191,"kind":"baseConstructorSpecifier","modifierName":{"id":9188,"name":"ProtocolFeeControllerMigration","nameLocations":["2786:30:29"],"nodeType":"IdentifierPath","referencedDeclaration":9147,"src":"2786:30:29"},"nodeType":"ModifierInvocation","src":"2786:57:29"},{"arguments":[{"id":9193,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9183,"src":"2868:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}}],"id":9194,"kind":"baseConstructorSpecifier","modifierName":{"id":9192,"name":"SingletonAuthentication","nameLocations":["2844:23:29"],"nodeType":"IdentifierPath","referencedDeclaration":6189,"src":"2844:23:29"},"nodeType":"ModifierInvocation","src":"2844:31:29"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":9187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9183,"mutability":"mutable","name":"_vault","nameLocation":"2723:6:29","nodeType":"VariableDeclaration","scope":9221,"src":"2716:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":9182,"nodeType":"UserDefinedTypeName","pathNode":{"id":9181,"name":"IVault","nameLocations":["2716:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"2716:6:29"},"referencedDeclaration":651,"src":"2716:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":9186,"mutability":"mutable","name":"_newFeeController","nameLocation":"2762:17:29","nodeType":"VariableDeclaration","scope":9221,"src":"2739:40:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"},"typeName":{"id":9185,"nodeType":"UserDefinedTypeName","pathNode":{"id":9184,"name":"IProtocolFeeController","nameLocations":["2739:22:29"],"nodeType":"IdentifierPath","referencedDeclaration":613,"src":"2739:22:29"},"referencedDeclaration":613,"src":"2739:22:29","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"2706:79:29"},"returnParameters":{"id":9195,"nodeType":"ParameterList","parameters":[],"src":"2876:0:29"},"scope":9328,"src":"2695:454:29","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":9273,"nodeType":"Block","src":"3627:1012:29","statements":[{"condition":{"id":9230,"name":"_finalized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8882,"src":"3641:10:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9235,"nodeType":"IfStatement","src":"3637:65:29","trueBody":{"id":9234,"nodeType":"Block","src":"3653:49:29","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9231,"name":"AlreadyMigrated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8888,"src":"3674:15:29","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9232,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3674:17:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9233,"nodeType":"RevertStatement","src":"3667:24:29"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":9238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9236,"name":"_globalPercentagesMigrated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9175,"src":"3800:26:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":9237,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3830:5:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"3800:35:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9247,"nodeType":"IfStatement","src":"3796:141:29","trueBody":{"id":9246,"nodeType":"Block","src":"3837:100:29","statements":[{"expression":{"id":9241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9239,"name":"_globalPercentagesMigrated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9175,"src":"3851:26:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":9240,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3880:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"3851:33:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9242,"nodeType":"ExpressionStatement","src":"3851:33:29"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":9243,"name":"_migrateGlobalPercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9102,"src":"3899:25:29","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":9244,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3899:27:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9245,"nodeType":"ExpressionStatement","src":"3899:27:29"}]}},{"body":{"id":9271,"nodeType":"Block","src":"4477:156:29","statements":[{"expression":{"arguments":[{"baseExpression":{"id":9266,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9225,"src":"4613:5:29","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":9268,"indexExpression":{"id":9267,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9249,"src":"4619:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4613:8:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[{"id":9262,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8874,"src":"4582:16:29","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}],"id":9261,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4574:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9260,"name":"address","nodeType":"ElementaryTypeName","src":"4574:7:29","typeDescriptions":{}}},"id":9263,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4574:25:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9259,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6083,"src":"4552:21:29","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ProtocolFeeController_$6083_$","typeString":"type(contract ProtocolFeeController)"}},"id":9264,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4552:48:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$6083","typeString":"contract ProtocolFeeController"}},"id":9265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4601:11:29","memberName":"migratePool","nodeType":"MemberAccess","referencedDeclaration":5563,"src":"4552:60:29","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":9269,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4552:70:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9270,"nodeType":"ExpressionStatement","src":"4552:70:29"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9252,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9249,"src":"4454:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":9253,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9225,"src":"4458:5:29","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":9254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4464:6:29","memberName":"length","nodeType":"MemberAccess","src":"4458:12:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4454:16:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9272,"initializationExpression":{"assignments":[9249],"declarations":[{"constant":false,"id":9249,"mutability":"mutable","name":"i","nameLocation":"4447:1:29","nodeType":"VariableDeclaration","scope":9272,"src":"4439:9:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9248,"name":"uint256","nodeType":"ElementaryTypeName","src":"4439:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9251,"initialValue":{"hexValue":"30","id":9250,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4451:1:29","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4439:13:29"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":9257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"4472:3:29","subExpression":{"id":9256,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9249,"src":"4474:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9258,"nodeType":"ExpressionStatement","src":"4472:3:29"},"nodeType":"ForStatement","src":"4434:199:29"}]},"documentation":{"id":9222,"nodeType":"StructuredDocumentation","src":"3155:391:29","text":" @notice Migrate pools from the old fee controller to the new one.\n @dev THis can be called multiple times, if there are too many pools for a single transaction. Note that the\n first time this is called, it will migrate the global fee percentages, then proceed with the first set of pools.\n @param pools The set of pools to be migrated in this call"},"functionSelector":"b8350e27","id":9274,"implemented":true,"kind":"function","modifiers":[{"id":9228,"kind":"modifierInvocation","modifierName":{"id":9227,"name":"nonReentrant","nameLocations":["3614:12:29"],"nodeType":"IdentifierPath","referencedDeclaration":4170,"src":"3614:12:29"},"nodeType":"ModifierInvocation","src":"3614:12:29"}],"name":"migratePools","nameLocation":"3560:12:29","nodeType":"FunctionDefinition","parameters":{"id":9226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9225,"mutability":"mutable","name":"pools","nameLocation":"3590:5:29","nodeType":"VariableDeclaration","scope":9274,"src":"3573:22:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":9223,"name":"address","nodeType":"ElementaryTypeName","src":"3573:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9224,"nodeType":"ArrayTypeName","src":"3573:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"3572:24:29"},"returnParameters":{"id":9229,"nodeType":"ParameterList","parameters":[],"src":"3627:0:29"},"scope":9328,"src":"3551:1088:29","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"body":{"id":9314,"nodeType":"Block","src":"4704:426:29","statements":[{"condition":{"id":9279,"name":"_finalized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8882,"src":"4718:10:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9284,"nodeType":"IfStatement","src":"4714:65:29","trueBody":{"id":9283,"nodeType":"Block","src":"4730:49:29","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9280,"name":"AlreadyMigrated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8888,"src":"4751:15:29","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4751:17:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9282,"nodeType":"RevertStatement","src":"4744:24:29"}]}},{"expression":{"id":9287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9285,"name":"_finalized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8882,"src":"4789:10:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":9286,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4802:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"4789:17:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9288,"nodeType":"ExpressionStatement","src":"4789:17:29"},{"expression":{"arguments":[{"id":9292,"name":"_migrationRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9177,"src":"4889:14:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9295,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4913:4:29","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigrationV2_$9328","typeString":"contract ProtocolFeeControllerMigrationV2"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigrationV2_$9328","typeString":"contract ProtocolFeeControllerMigrationV2"}],"id":9294,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4905:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9293,"name":"address","nodeType":"ElementaryTypeName","src":"4905:7:29","typeDescriptions":{}}},"id":9296,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4905:13:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9289,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8880,"src":"4864:11:29","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4876:12:29","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":31,"src":"4864:24:29","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9297,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4864:55:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9298,"nodeType":"ExpressionStatement","src":"4864:55:29"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":9299,"name":"_migrateFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9146,"src":"4981:21:29","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":9300,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4981:23:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9301,"nodeType":"ExpressionStatement","src":"4981:23:29"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9305,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8880,"src":"5075:11:29","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5087:18:29","memberName":"DEFAULT_ADMIN_ROLE","nodeType":"MemberAccess","referencedDeclaration":10,"src":"5075:30:29","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bytes32_$","typeString":"function () view external returns (bytes32)"}},"id":9307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5075:32:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9310,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5117:4:29","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigrationV2_$9328","typeString":"contract ProtocolFeeControllerMigrationV2"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigrationV2_$9328","typeString":"contract ProtocolFeeControllerMigrationV2"}],"id":9309,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5109:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9308,"name":"address","nodeType":"ElementaryTypeName","src":"5109:7:29","typeDescriptions":{}}},"id":9311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5109:13:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9302,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8880,"src":"5050:11:29","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5062:12:29","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":31,"src":"5050:24:29","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5050:73:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9313,"nodeType":"ExpressionStatement","src":"5050:73:29"}]},"functionSelector":"b78b6087","id":9315,"implemented":true,"kind":"function","modifiers":[{"id":9277,"kind":"modifierInvocation","modifierName":{"id":9276,"name":"authenticate","nameLocations":["4691:12:29"],"nodeType":"IdentifierPath","referencedDeclaration":2439,"src":"4691:12:29"},"nodeType":"ModifierInvocation","src":"4691:12:29"}],"name":"finalizeMigration","nameLocation":"4654:17:29","nodeType":"FunctionDefinition","parameters":{"id":9275,"nodeType":"ParameterList","parameters":[],"src":"4671:2:29"},"returnParameters":{"id":9278,"nodeType":"ParameterList","parameters":[],"src":"4704:0:29"},"scope":9328,"src":"4645:485:29","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"baseFunctions":[9006],"body":{"id":9326,"nodeType":"Block","src":"5258:146:29","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9323,"name":"WrongMigrationVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9180,"src":"5374:21:29","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5374:23:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9325,"nodeType":"RevertStatement","src":"5367:30:29"}]},"documentation":{"id":9316,"nodeType":"StructuredDocumentation","src":"5136:46:29","text":"@inheritdoc ProtocolFeeControllerMigration"},"functionSelector":"c2ad0f14","id":9327,"implemented":true,"kind":"function","modifiers":[],"name":"migrateFeeController","nameLocation":"5196:20:29","nodeType":"FunctionDefinition","overrides":{"id":9321,"nodeType":"OverrideSpecifier","overrides":[],"src":"5249:8:29"},"parameters":{"id":9320,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9319,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9327,"src":"5217:16:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":9317,"name":"address","nodeType":"ElementaryTypeName","src":"5217:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9318,"nodeType":"ArrayTypeName","src":"5217:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"5216:18:29"},"returnParameters":{"id":9322,"nodeType":"ParameterList","parameters":[],"src":"5258:0:29"},"scope":9328,"src":"5187:217:29","stateMutability":"pure","virtual":false,"visibility":"external"}],"scope":9329,"src":"2216:3190:29","usedErrors":[38,4159,8885,8888,9180],"usedEvents":[]}],"src":"46:5361:29"},"id":29}},"contracts":{"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol":{"IBasicAuthorizer":{"abi":[{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"where","type":"address"}],"name":"canPerform","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","canPerform(bytes32,address,address)":"9be2a884","grantRole(bytes32,address)":"2f2ff15d","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"where\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"params\":{\"account\":\"Account trying to perform the action\",\"actionId\":\"Identifier for the action to be performed\",\"where\":\"Target contract for the action\"},\"returns\":{\"success\":\"True if the action is permitted\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"notice\":\"Returns true if `account` can perform the action described by `actionId` in the contract `where`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol\":\"IBasicAuthorizer\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol\":{\"keccak256\":\"0x434eda908f66d99d967c2c2b233337227c331cd79655ec5b0ddcc76db7a20606\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b0b6c4bc095113dfbaeb9d9a6f9602f0f1a79b075c82d5ccccff7a1b67af1ce8\",\"dweb:/ipfs/QmaePfy8V5U9UFqkDtdTvPjJLmo1XEorPrC1fMVB35n86Y\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"IAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"notice\":\"Simple interface for permissioned calling of external functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":\"IAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"IRateProvider":{"abi":[{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getRate()":"679aefce"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getRate()\":{\"details\":\"The meaning of this rate depends on the context. Note that there may be an error associated with a token rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface does not take a rounding direction or return an error, so great care must be taken when interpreting and using rates in downstream computations.\",\"returns\":{\"rate\":\"The current token rate\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getRate()\":{\"notice\":\"An 18 decimal fixed point number representing the exchange rate of one token to another related token.\"}},\"notice\":\"General interface for token exchange rates.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":\"IRateProvider\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"IAuthorizer":{"abi":[{"inputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"where","type":"address"}],"name":"canPerform","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"canPerform(bytes32,address,address)":"9be2a884"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"where\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"params\":{\"account\":\"Account trying to perform the action\",\"actionId\":\"Identifier for the action to be performed\",\"where\":\"Target contract for the action\"},\"returns\":{\"success\":\"True if the action is permitted\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"notice\":\"Returns true if `account` can perform the action described by `actionId` in the contract `where`.\"}},\"notice\":\"Interface to the Vault's permission system.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":\"IAuthorizer\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"IHooks":{"abi":[{"inputs":[],"name":"getHookFlags","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"}],"internalType":"struct HookFlags","name":"hookFlags","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256[]","name":"amountsInScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsInRaw","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterAddLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256[]","name":"hookAdjustedAmountsInRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterInitialize","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsOutRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterRemoveLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256[]","name":"hookAdjustedAmountsOutRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountInScaled18","type":"uint256"},{"internalType":"uint256","name":"amountOutScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenInBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenOutBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AfterSwapParams","name":"params","type":"tuple"}],"name":"onAfterSwap","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"hookAdjustedAmountCalculatedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256[]","name":"maxAmountsInScaled18","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeAddLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeInitialize","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeRemoveLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"},{"internalType":"address","name":"pool","type":"address"}],"name":"onBeforeSwap","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"}],"name":"onComputeDynamicSwapFeePercentage","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"onRegister","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getHookFlags()":"d77153a7","onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)":"976907cc","onAfterInitialize(uint256[],uint256,bytes)":"38be241d","onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)":"2754888d","onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))":"18b6eb55","onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)":"45421ec7","onBeforeInitialize(uint256[],bytes)":"1c149e28","onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)":"ba5f9f40","onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)":"5211fa77","onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)":"a0e8f5ac","onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))":"0b89f182"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getHookFlags\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"}],\"internalType\":\"struct HookFlags\",\"name\":\"hookFlags\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsInRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsOutRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenInBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenOutBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AfterSwapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"onAfterSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"hookAdjustedAmountCalculatedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"onBeforeSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"onComputeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"onRegister\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that they are called in the correct order, and with the correct arguments. To maintain this security, these functions should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`, then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)\",\"kind\":\"dev\",\"methods\":{\"getHookFlags()\":{\"details\":\"The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero). `onRegister` is the only \\\"mandatory\\\" hook.\",\"returns\":{\"hookFlags\":\"Flags indicating which hooks the contract supports\"}},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsInRaw\":\"Actual amounts of tokens added, sorted in token registration order\",\"amountsInScaled18\":\"Actual amounts of tokens added, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountOut\":\"Amount of pool tokens minted\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsInRaw\":\"New amountsInRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"details\":\"Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"bptAmountOut\":\"Amount of pool tokens minted during initialization\",\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool accepts the initialization results\"}},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsOutRaw\":\"Actual amount of tokens to receive, sorted in token registration order\",\"amountsOutScaled18\":\"Scaled amount of tokens to receive, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountIn\":\"Amount of pool tokens to burn\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsOutRaw\":\"New amountsOutRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"details\":\"Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"hookAdjustedAmountCalculatedRaw\":\"New amount calculated, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"maxAmountsInScaled18\":\"Maximum amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeInitialize(uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with initialization\"}},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"maxBptAmountIn\":\"Maximum amount of input pool tokens\",\"minAmountsOutScaled18\":\"Minimum output amounts, sorted in token registration order\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"details\":\"Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"details\":\"Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\",\"staticSwapFeePercentage\":\"18-decimal FP value of the static swap fee percentage, for reference\"},\"returns\":{\"dynamicSwapFeePercentage\":\"Value of the swap fee percentage, as an 18-decimal FP value\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"details\":\"Returns true if registration was successful, and false to revert the pool registration. Make sure this function is properly implemented (e.g. check the factory, and check that the given pool is from the factory). The Vault address will be msg.sender.\",\"params\":{\"factory\":\"Address of the pool factory (contract deploying the pool)\",\"liquidityManagement\":\"Liquidity management flags indicating which functions are enabled\",\"pool\":\"Address of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"},\"returns\":{\"success\":\"True if the hook allowed the registration, false otherwise\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getHookFlags()\":{\"notice\":\"Return the set of hooks implemented by the contract.\"},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed after adding liquidity.\"},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"notice\":\"Hook to be executed after pool initialization.\"},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed after removing liquidity.\"},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"notice\":\"Called after a swap to perform further actions once the balances have been updated by the swap.\"},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed before adding liquidity.\"},\"onBeforeInitialize(uint256[],bytes)\":{\"notice\":\"Hook executed before pool initialization.\"},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed before removing liquidity.\"},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"notice\":\"Called before a swap to give the Pool an opportunity to perform actions.\"},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"notice\":\"Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\"},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"notice\":\"Hook executed when a pool is registered with a non-zero hooks contract.\"}},\"notice\":\"Interface for pool hooks.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":\"IHooks\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"IProtocolFeeController":{"abi":[{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"pool","type":"address"}],"name":"CallerIsNotPoolCreator","type":"error"},{"inputs":[],"name":"PoolCreatorFeePercentageTooHigh","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreatorNotRegistered","type":"error"},{"inputs":[],"name":"ProtocolSwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ProtocolYieldFeePercentageTooHigh","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"GlobalProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"GlobalProtocolYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateSwapFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateYieldFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PoolCreatorFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"PoolCreatorSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"PoolCreatorYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"poolCreator","type":"address"},{"indexed":false,"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"PoolWithCreatorRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolSwapFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"ProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolYieldFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"ProtocolYieldFeePercentageChanged","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"protocolFeePercentage","type":"uint256"},{"internalType":"uint256","name":"poolCreatorFeePercentage","type":"uint256"}],"name":"computeAggregateFeePercentage","outputs":[{"internalType":"uint256","name":"aggregateFeePercentage","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getGlobalProtocolSwapFeePercentage","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolYieldFeePercentage","outputs":[{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolSwapFeeInfo","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"internalType":"bool","name":"isOverride","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolYieldFeeInfo","outputs":[{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"},{"internalType":"bool","name":"isOverride","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getProtocolFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"registerPool","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setGlobalProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setGlobalProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"setPoolCreatorSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"setPoolCreatorYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"collectAggregateFees(address)":"8f4ab9ca","computeAggregateFeePercentage(uint256,uint256)":"0ddd60c6","getGlobalProtocolSwapFeePercentage()":"7869ee18","getGlobalProtocolYieldFeePercentage()":"55fb76af","getPoolCreatorFeeAmounts(address)":"9e95f3fd","getPoolCreatorSwapFeePercentage(address)":"0b8e059b","getPoolCreatorYieldFeePercentage(address)":"0252aab5","getPoolProtocolSwapFeeInfo(address)":"5c15a0b4","getPoolProtocolYieldFeeInfo(address)":"7a2b97dc","getProtocolFeeAmounts(address)":"8df44c54","isPoolRegistered(address)":"c673bdaf","registerPool(address,address,bool)":"77ff76e7","setGlobalProtocolSwapFeePercentage(uint256)":"8a3c5c69","setGlobalProtocolYieldFeePercentage(uint256)":"a93df2a4","setPoolCreatorSwapFeePercentage(address,uint256)":"1377c16c","setPoolCreatorYieldFeePercentage(address,uint256)":"3af52712","setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356","updateProtocolSwapFeePercentage(address)":"71ecc8fb","updateProtocolYieldFeePercentage(address)":"71447ea8","vault()":"fbfa77cf","withdrawPoolCreatorFees(address)":"52f125f0","withdrawPoolCreatorFees(address,address)":"f7061445","withdrawProtocolFees(address,address)":"cf7b287f","withdrawProtocolFeesForToken(address,address,address)":"b53a70b2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"CallerIsNotPoolCreator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolCreatorFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolYieldFeePercentageTooHigh\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateSwapFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateYieldFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"PoolWithCreatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeAggregateFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolSwapFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOverride\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolYieldFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOverride\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getProtocolFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"registerPool\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"params\":{\"caller\":\"The account attempting to withdraw pool creator fees\",\"pool\":\"The pool the caller tried to withdraw from\"}}],\"PoolCreatorNotRegistered(address)\":[{\"params\":{\"pool\":\"The pool with no creator\"}}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol swap fee percentages.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol yield fee percentages.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"params\":{\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"params\":{\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global swap fee percentage.\",\"params\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global yield fee percentage.\",\"params\":{\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which pool creator fees are being withdrawn\",\"recipient\":\"The recipient of the funds (the pool creator if permissionless, or another account)\",\"token\":\"The token being withdrawn\"}},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator swap fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage for the pool\"}},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator yield fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage for the pool\"}},\"PoolWithCreatorRegistered(address,address,bool)\":{\"details\":\"The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee counterpart also include the protocol fee exemption flag, we might as well include it here as well.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (non-zero, or the event would not be emitted)\",\"protocolFeeExempt\":\"True if the pool is initially exempt from protocol fees\"}},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which protocol fees are being withdrawn\",\"recipient\":\"The recipient of the funds\",\"token\":\"The token being withdrawn\"}},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the swap fee was charged\",\"token\":\"The token in which the swap fee was charged\"}},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol swap fee will be changed\",\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the yield fee was charged\",\"token\":\"The token in which the yield fee was charged\"}},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol yield fee will be changed\",\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}}},\"kind\":\"dev\",\"methods\":{\"collectAggregateFees(address)\":{\"params\":{\"pool\":\"The pool with aggregate fees\"}},\"computeAggregateFeePercentage(uint256,uint256)\":{\"details\":\"Not tied to any particular pool; this just performs the low-level \\\"additive fee\\\" calculation. Note that pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are stored in the Vault with 24-bit precision, this will truncate any values that require greater precision. It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee components, but the truncation ensures it will not revert for any valid set of fee percentages. See example below: tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60% totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000 protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400 creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600 creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360 lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\",\"params\":{\"poolCreatorFeePercentage\":\"The pool creator portion of the aggregate fee percentage\",\"protocolFeePercentage\":\"The protocol portion of the aggregate fee percentage\"},\"returns\":{\"aggregateFeePercentage\":\"The computed aggregate percentage\"}},\"getGlobalProtocolSwapFeePercentage()\":{\"returns\":{\"protocolSwapFeePercentage\":\"The global protocol swap fee percentage\"}},\"getGlobalProtocolYieldFeePercentage()\":{\"returns\":{\"protocolYieldFeePercentage\":\"The global protocol yield fee percentage\"}},\"getPoolCreatorFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getPoolCreatorSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\"}},\"getPoolCreatorYieldFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\"}},\"getPoolProtocolSwapFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"isOverride\":\"True if the protocol fee has been overridden\",\"protocolSwapFeePercentage\":\"The protocol swap fee percentage for the given pool\"}},\"getPoolProtocolYieldFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"isOverride\":\"True if the protocol fee has been overridden\",\"protocolYieldFeePercentage\":\"The protocol yield fee percentage for the given pool\"}},\"getProtocolFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\"}},\"registerPool(address,address,bool)\":{\"details\":\"This must be called from the Vault during pool registration. It will initialize the pool to the global protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate fee percentages, based on an initial pool creator fee of 0.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (or 0 if there won't be a pool creator fee)\",\"protocolFeeExempt\":\"If true, the pool is initially exempt from protocol fees\"},\"returns\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\"}},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\"}},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage to apply to the pool\"}},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage to apply to the pool\"}},\"setProtocolSwapFeePercentage(address,uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol swap fee\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol yield fee\"}},\"updateProtocolSwapFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol swap fee\"}},\"updateProtocolYieldFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol yield fee\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The Vault address\"}},\"withdrawPoolCreatorFees(address)\":{\"details\":\"Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable value, this function is permissionless.\",\"params\":{\"pool\":\"The pool on which fees were collected\"}},\"withdrawPoolCreatorFees(address,address)\":{\"details\":\"Sends swap and yield pool creator fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFees(address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFeesForToken(address,address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\",\"token\":\"Token to withdraw\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"notice\":\"Error raised if the wrong account attempts to withdraw pool creator fees.\"}],\"PoolCreatorFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\"}],\"PoolCreatorNotRegistered(address)\":[{\"notice\":\"Error raised if there is no pool creator on a withdrawal attempt from the given pool.\"}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated.\"},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated.\"},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\"},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\"},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of pool creator fees in a specific token and amount.\"},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator swap fee percentage of a pool is updated.\"},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator yield fee percentage of a pool is updated.\"},\"PoolWithCreatorRegistered(address,address,bool)\":{\"notice\":\"Emitted for pools registered with creators.\"},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of protocol fees in a specific token and amount.\"},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol swap fees in a specific token and amount.\"},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated for a specific pool.\"},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol yield fees in a specific token and amount.\"},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated for a specific pool.\"}},\"kind\":\"user\",\"methods\":{\"collectAggregateFees(address)\":{\"notice\":\"Collects aggregate fees from the Vault for a given pool.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"notice\":\"Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\"},\"getGlobalProtocolSwapFeePercentage()\":{\"notice\":\"Getter for the current global protocol swap fee.\"},\"getGlobalProtocolYieldFeePercentage()\":{\"notice\":\"Getter for the current global protocol yield fee.\"},\"getPoolCreatorFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the pool creator for withdrawal.\"},\"getPoolCreatorSwapFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator swap fee percentage for a given pool.\"},\"getPoolCreatorYieldFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator swap fee percentage for a given pool.\"},\"getPoolProtocolSwapFeeInfo(address)\":{\"notice\":\"Getter for the current protocol swap fee for a given pool.\"},\"getPoolProtocolYieldFeeInfo(address)\":{\"notice\":\"Getter for the current protocol yield fee for a given pool.\"},\"getProtocolFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the protocol for withdrawal.\"},\"isPoolRegistered(address)\":{\"notice\":\"Getter for pool registration flag.\"},\"registerPool(address,address,bool)\":{\"notice\":\"Add pool-specific entries to the protocol swap and yield percentages.\"},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"notice\":\"Set the global protocol swap fee percentage, used by standard pools.\"},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"notice\":\"Set the global protocol yield fee percentage, used by standard pools.\"},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator swap fee percentage to the specified pool.\"},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator yield fee percentage to the specified pool.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"updateProtocolSwapFeePercentage(address)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"updateProtocolYieldFeePercentage(address)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"vault()\":{\"notice\":\"Get the address of the main Vault contract.\"},\"withdrawPoolCreatorFees(address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool.\"},\"withdrawPoolCreatorFees(address,address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool. This is a permissioned function.\"},\"withdrawProtocolFees(address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\"},\"withdrawProtocolFeesForToken(address,address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\"}},\"notice\":\"Contract that handles protocol and pool creator fees for the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":\"IProtocolFeeController\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xe0e5193402394ef505f87b206d8e64e1ea8b604feeb2ea8bbd054050778c162d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c962b5d782a8ec4341741dd49daf071e23560548ad95ed00e1531379cfcf0a2e\",\"dweb:/ipfs/QmbPn63SLEZp719KdAtPa4urbhQwqYzfewWfNRtw3nyy8c\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"IVault":{"abi":[{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"tokenAllowance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBuffersPaused","outputs":[{"internalType":"bool","name":"buffersPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"yieldFeeAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"swapParams","type":"tuple"}],"name":"computeDynamicSwapFeePercentage","outputs":[{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQueryPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"emitAuxiliaryEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"enableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddLiquidityCalledFlag","outputs":[{"internalType":"bool","name":"liquidityAdded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"yieldFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBptRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferAsset","outputs":[{"internalType":"address","name":"underlyingToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"underlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"wrappedBalanceRaw","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"bufferMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"liquidityOwner","type":"address"}],"name":"getBufferOwnerShares","outputs":[{"internalType":"uint256","name":"ownerShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodDuration","outputs":[{"internalType":"uint32","name":"bufferPeriodDuration","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodEndTime","outputs":[{"internalType":"uint32","name":"bufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTotalShares","outputs":[{"internalType":"uint256","name":"bufferShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getERC4626BufferAsset","outputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getHooksConfig","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumPoolTokens","outputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumPoolTokens","outputs":[{"internalType":"uint256","name":"minTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumTradeAmount","outputs":[{"internalType":"uint256","name":"minimumTradeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumWrapAmount","outputs":[{"internalType":"uint256","name":"minimumWrapAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonzeroDeltaCount","outputs":[{"internalType":"uint256","name":"nonzeroDeltaCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolConfig","outputs":[{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"poolConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"poolMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolPausedState","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"},{"internalType":"uint32","name":"poolPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"poolBufferPeriodEndTime","type":"uint32"},{"internalType":"address","name":"pauseManager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolRoleAccounts","outputs":[{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"tokenCount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenRates","outputs":[{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getReservesOf","outputs":[{"internalType":"uint256","name":"reserveAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenDelta","outputs":[{"internalType":"int256","name":"tokenDelta","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAdmin","outputs":[{"internalType":"address","name":"vaultAdmin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"vaultExtension","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultPausedState","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"},{"internalType":"uint32","name":"vaultPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"vaultBufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"isERC4626BufferInitialized","outputs":[{"internalType":"bool","name":"isBufferInitialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInRecoveryMode","outputs":[{"internalType":"bool","name":"inRecoveryMode","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInitialized","outputs":[{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolPaused","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabled","outputs":[{"internalType":"bool","name":"queryDisabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabledPermanently","outputs":[{"internalType":"bool","name":"queryDisabledPermanently","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"unlocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isVaultPaused","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"pausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quote","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quoteAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"}],"name":"removeLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"setProtocolFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"tokenTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"unpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"updateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateYieldFeePercentage","type":"uint256"}],"name":"updateAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","addLiquidityToBuffer(address,uint256,uint256,uint256,address)":"e2a92b1a","allowance(address,address,address)":"927da105","approve(address,address,uint256)":"e1f21c67","areBuffersPaused()":"55cba7fe","balanceOf(address,address)":"f7888aec","collectAggregateFees(address)":"8f4ab9ca","computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))":"4d472bdd","disableQuery()":"de1a36a6","disableQueryPermanently()":"821440f2","disableRecoveryMode(address)":"bffb78b2","emitAuxiliaryEvent(bytes32,bytes)":"c8088247","enableQuery()":"e0d55605","enableRecoveryMode(address)":"dc3f574e","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","getActionId(bytes4)":"851c1bb3","getAddLiquidityCalledFlag(address)":"ace9b89b","getAggregateSwapFeeAmount(address,address)":"85e0b999","getAggregateYieldFeeAmount(address,address)":"00fdfa13","getAuthorizer()":"aaabadc5","getBptRate(address)":"4f037ee7","getBufferAsset(address)":"0387587d","getBufferBalance(address)":"4021fe0f","getBufferMinimumTotalSupply()":"26a8a991","getBufferOwnerShares(address,address)":"9385e39a","getBufferPeriodDuration()":"20c1fb7a","getBufferPeriodEndTime()":"cd51c12f","getBufferTotalShares(address)":"f2784e07","getCurrentLiveBalances(address)":"535cfd8a","getERC4626BufferAsset(address)":"4afbaf5a","getHooksConfig(address)":"ce8630d4","getMaximumPoolTokens()":"2e42f4d5","getMinimumPoolTokens()":"a8175b27","getMinimumTradeAmount()":"e2cb0ba0","getMinimumWrapAmount()":"53956aa2","getNonzeroDeltaCount()":"db817187","getPauseWindowEndTime()":"8a8d123a","getPoolConfig(address)":"f29486a1","getPoolData(address)":"13d21cdf","getPoolMinimumTotalSupply()":"d0965a6b","getPoolPausedState(address)":"15e32046","getPoolRoleAccounts(address)":"e9ddeb26","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getPoolTokenInfo(address)":"67e0e076","getPoolTokenRates(address)":"7e361bde","getPoolTokens(address)":"ca4f2803","getProtocolFeeController()":"85f2dbd4","getReservesOf(address)":"96787092","getStaticSwapFeePercentage(address)":"b45090f9","getTokenDelta(address)":"9e825ff5","getVaultAdmin()":"1ba0ae45","getVaultExtension()":"b9a8effa","getVaultPausedState()":"85c8c015","initialize(address,address,address[],uint256[],uint256,bytes)":"ba8a2be0","initializeBuffer(address,uint256,uint256,uint256,address)":"653eb3b0","isERC4626BufferInitialized(address)":"6844846b","isPoolInRecoveryMode(address)":"be7d628a","isPoolInitialized(address)":"532cec7c","isPoolPaused(address)":"6c9bc732","isPoolRegistered(address)":"c673bdaf","isQueryDisabled()":"b4aef0ab","isQueryDisabledPermanently()":"13ef8a5d","isUnlocked()":"8380edb7","isVaultPaused()":"098401f5","pausePool(address)":"55aca1ec","pauseVault()":"9e0879c2","pauseVaultBuffers()":"e085c5a8","quote(bytes)":"edfa3568","quoteAndRevert(bytes)":"757d64b3","registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"eeec802f","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","removeLiquidityFromBuffer(address,uint256,uint256,uint256)":"ebc7955c","removeLiquidityRecovery(address,address,uint256,uint256[])":"a07d6040","sendTo(address,address,uint256)":"ae639329","setAuthorizer(address)":"058a628f","setProtocolFeeController(address)":"2d771389","setStaticSwapFeePercentage(address,uint256)":"d15126ba","settle(address,uint256)":"15afd409","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","totalSupply(address)":"e4dc2aa4","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unlock(bytes)":"48c89491","unpausePool(address)":"f21c38cd","unpauseVault()":"0b7562be","unpauseVaultBuffers()":"b9212b49","updateAggregateSwapFeePercentage(address,uint256)":"5e0b06f4","updateAggregateYieldFeePercentage(address,uint256)":"e253670a","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAllowance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"buffersPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yieldFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQueryPermanently\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"emitAuxiliaryEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getAddLiquidityCalledFlag\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"liquidityAdded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"yieldFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityOwner\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ownerShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getERC4626BufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumTradeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumWrapAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonzeroDeltaCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"poolConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"poolPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"poolBufferPeriodEndTime\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"tokenDelta\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultAdmin\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultExtension\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"vaultPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"vaultBufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"isERC4626BufferInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isBufferInitialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"inRecoveryMode\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabledPermanently\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabledPermanently\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingInRaw\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedInRaw\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens deposited into the buffer\"}},\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"tokenAllowance\":\"Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\",\"returns\":{\"buffersPaused\":\"True if the Vault buffers are paused\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"tokenBalance\":\"Token balance of the account\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"swapFeeAmounts\":\"An array with the total swap fees collected, sorted in token registration order\",\"yieldFeeAmounts\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"dynamicSwapFeePercentage\":\"The dynamic swap fee percentage\"}},\"disableQuery()\":{\"details\":\"The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2). This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether disabling queries is completely necessary; queries can still be re-enabled after this call.\"},\"disableQueryPermanently()\":{\"details\":\"Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\"},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\"}},\"enableQuery()\":{\"details\":\"Only works if queries are not permanently disabled.\"},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\",\"params\":{\"pool\":\"The address of the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}},\"getAddLiquidityCalledFlag(address)\":{\"details\":\"Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional is the only standard way to exit a position without fees, and this flag is used to enable fees in that case. It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse than a simple swap for every pool type.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"liquidityAdded\":\"True if liquidity has been added to this pool in the current transaction Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"swapFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"yieldFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"authorizer\":\"Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingBalanceRaw\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"wrappedBalanceRaw\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"bufferMinimumTotalSupply\":\"The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"ownerShares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodDuration\":\"The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodEndTime\":\"The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"bufferShares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getERC4626BufferAsset(address)\":{\"details\":\"To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers should never call `wrapper.asset()` directly, at least without checking it against the asset registered with the Vault on initialization.\",\"params\":{\"wrappedToken\":\"The wrapped token specifying the buffer\"},\"returns\":{\"asset\":\"The underlying asset of the wrapped token\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"hooksConfig\":\"The hooks configuration as a `HooksConfig` struct\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"maxTokens\":\"The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"minTokens\":\"The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"minimumTradeAmount\":\"The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"minimumWrapAmount\":\"The minimum wrap amount in native underlying token decimals\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"nonzeroDeltaCount\":\"The current value of `_nonzeroDeltaCount`\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance. Balancer timestamps are 32 bits.\",\"returns\":{\"pauseWindowEndTime\":\"The timestamp when the Vault's pause window ends\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"poolConfig\":\"The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"poolData\":\"The `PoolData` result\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"poolMinimumTotalSupply\":\"The minimum total supply a pool can have after initialization\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period. Balancer timestamps are 32 bits.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"pauseManager\":\"The pause manager, or the zero address\",\"poolBufferPeriodEndTime\":\"The timestamp after which the Pool unpauses itself (if paused)\",\"poolPauseWindowEndTime\":\"The timestamp of the end of the Pool's pause window\",\"poolPaused\":\"True if the Pool is paused\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"roleAccounts\":\"A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"index\":\"Index corresponding to the given token in the pool's token list\",\"tokenCount\":\"Number of tokens in the pool\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"tokens\":\"List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"reserveAmount\":\"The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"swapFeePercentage\":\"The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"tokenDelta\":\"The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"vaultAdmin\":\"The address of the Vault admin\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"vaultExtension\":\"Address of the VaultExtension\"}},\"getVaultPausedState()\":{\"details\":\"Balancer timestamps are 32 bits.\",\"returns\":{\"vaultBufferPeriodEndTime\":\"The timestamp of the end of the Vault's buffer period\",\"vaultPauseWindowEndTime\":\"The timestamp of the end of the Vault's pause window\",\"vaultPaused\":\"True if the Vault is paused\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isERC4626BufferInitialized(address)\":{\"details\":\"An initialized buffer should have an asset registered in the Vault.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"isBufferInitialized\":\"True if the ERC4626 buffer is initialized\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"inRecoveryMode\":\"True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"initialized\":\"True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"poolPaused\":\"True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"registered\":\"True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"If true, queries might either be disabled temporarily or permanently.\",\"returns\":{\"queryDisabled\":\"True if query functionality is reversibly disabled\"}},\"isQueryDisabledPermanently()\":{\"details\":\"This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\",\"returns\":{\"queryDisabledPermanently\":\"True if query functionality is permanently disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"unlocked\":\"True if the Vault is unlocked, false otherwise\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `areBuffersPaused` to check the pause state of the buffers.\",\"returns\":{\"vaultPaused\":\"True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment. Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers are also paused (with `pauseVaultBuffers`).\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting buffers, and vice versa.\"},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. Balancer timestamps are 32 bits. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOut\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"tokenTotalSupply\":\"Total supply of the token\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`. If the Vault was also paused, it will remain in that state until explicitly unpaused. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateSwapFeePercentageChanged` event.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose swap fee percentage will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateYieldFeePercentageChanged` event.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose yield fee percentage will be updated\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The main Vault address.\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\"},\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"disableQuery()\":{\"notice\":\"Disables query functionality on the Vault. Can only be called by governance.\"},\"disableQueryPermanently()\":{\"notice\":\"Disables query functionality permanently on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"enableQuery()\":{\"notice\":\"Enables query functionality on the Vault. Can only be called by governance.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAddLiquidityCalledFlag(address)\":{\"notice\":\"This flag is used to detect and tax \\\"round-trip\\\" interactions (adding and removing liquidity in the same pool).\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getERC4626BufferAsset(address)\":{\"notice\":\"Gets the registered asset for a given buffer.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isERC4626BufferInitialized(address)\":{\"notice\":\"Checks if the wrapped token has an initialized buffer in the Vault.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Returns true if queries are disabled on the Vault.\"},\"isQueryDisabledPermanently()\":{\"notice\":\"Returns true if queries are disabled permanently; false if they are enabled.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"}},\"notice\":\"Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":\"IVault\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xe0e5193402394ef505f87b206d8e64e1ea8b604feeb2ea8bbd054050778c162d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c962b5d782a8ec4341741dd49daf071e23560548ad95ed00e1531379cfcf0a2e\",\"dweb:/ipfs/QmbPn63SLEZp719KdAtPa4urbhQwqYzfewWfNRtw3nyy8c\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"IVaultAdmin":{"abi":[{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBuffersPaused","outputs":[{"internalType":"bool","name":"buffersPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"yieldFeeAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQueryPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"enableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferAsset","outputs":[{"internalType":"address","name":"underlyingToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"underlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"wrappedBalanceRaw","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"bufferMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"liquidityOwner","type":"address"}],"name":"getBufferOwnerShares","outputs":[{"internalType":"uint256","name":"ownerShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodDuration","outputs":[{"internalType":"uint32","name":"bufferPeriodDuration","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodEndTime","outputs":[{"internalType":"uint32","name":"bufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTotalShares","outputs":[{"internalType":"uint256","name":"bufferShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumPoolTokens","outputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumPoolTokens","outputs":[{"internalType":"uint256","name":"minTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumTradeAmount","outputs":[{"internalType":"uint256","name":"minimumTradeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumWrapAmount","outputs":[{"internalType":"uint256","name":"minimumWrapAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"poolMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getVaultPausedState","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"},{"internalType":"uint32","name":"vaultPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"vaultBufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isVaultPaused","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"pausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"}],"name":"removeLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"setProtocolFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"unpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"updateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateYieldFeePercentage","type":"uint256"}],"name":"updateAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidityToBuffer(address,uint256,uint256,uint256,address)":"e2a92b1a","areBuffersPaused()":"55cba7fe","collectAggregateFees(address)":"8f4ab9ca","disableQuery()":"de1a36a6","disableQueryPermanently()":"821440f2","disableRecoveryMode(address)":"bffb78b2","enableQuery()":"e0d55605","enableRecoveryMode(address)":"dc3f574e","getBufferAsset(address)":"0387587d","getBufferBalance(address)":"4021fe0f","getBufferMinimumTotalSupply()":"26a8a991","getBufferOwnerShares(address,address)":"9385e39a","getBufferPeriodDuration()":"20c1fb7a","getBufferPeriodEndTime()":"cd51c12f","getBufferTotalShares(address)":"f2784e07","getMaximumPoolTokens()":"2e42f4d5","getMinimumPoolTokens()":"a8175b27","getMinimumTradeAmount()":"e2cb0ba0","getMinimumWrapAmount()":"53956aa2","getPauseWindowEndTime()":"8a8d123a","getPoolMinimumTotalSupply()":"d0965a6b","getVaultPausedState()":"85c8c015","initializeBuffer(address,uint256,uint256,uint256,address)":"653eb3b0","isVaultPaused()":"098401f5","pausePool(address)":"55aca1ec","pauseVault()":"9e0879c2","pauseVaultBuffers()":"e085c5a8","removeLiquidityFromBuffer(address,uint256,uint256,uint256)":"ebc7955c","setAuthorizer(address)":"058a628f","setProtocolFeeController(address)":"2d771389","setStaticSwapFeePercentage(address,uint256)":"d15126ba","unpausePool(address)":"f21c38cd","unpauseVault()":"0b7562be","unpauseVaultBuffers()":"b9212b49","updateAggregateSwapFeePercentage(address,uint256)":"5e0b06f4","updateAggregateYieldFeePercentage(address,uint256)":"e253670a","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"buffersPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yieldFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQueryPermanently\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityOwner\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ownerShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumTradeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumWrapAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"vaultPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"vaultBufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"`VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations, as two delegate calls add gas to each call. Most of the permissioned calls are here.\",\"kind\":\"dev\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingInRaw\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedInRaw\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens deposited into the buffer\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\",\"returns\":{\"buffersPaused\":\"True if the Vault buffers are paused\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"swapFeeAmounts\":\"An array with the total swap fees collected, sorted in token registration order\",\"yieldFeeAmounts\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"disableQuery()\":{\"details\":\"The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2). This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether disabling queries is completely necessary; queries can still be re-enabled after this call.\"},\"disableQueryPermanently()\":{\"details\":\"Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\"},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"enableQuery()\":{\"details\":\"Only works if queries are not permanently disabled.\"},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\",\"params\":{\"pool\":\"The address of the pool\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingBalanceRaw\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"wrappedBalanceRaw\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"bufferMinimumTotalSupply\":\"The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"ownerShares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodDuration\":\"The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodEndTime\":\"The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"bufferShares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"maxTokens\":\"The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"minTokens\":\"The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"minimumTradeAmount\":\"The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"minimumWrapAmount\":\"The minimum wrap amount in native underlying token decimals\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance. Balancer timestamps are 32 bits.\",\"returns\":{\"pauseWindowEndTime\":\"The timestamp when the Vault's pause window ends\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"poolMinimumTotalSupply\":\"The minimum total supply a pool can have after initialization\"}},\"getVaultPausedState()\":{\"details\":\"Balancer timestamps are 32 bits.\",\"returns\":{\"vaultBufferPeriodEndTime\":\"The timestamp of the end of the Vault's buffer period\",\"vaultPauseWindowEndTime\":\"The timestamp of the end of the Vault's pause window\",\"vaultPaused\":\"True if the Vault is paused\"}},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `areBuffersPaused` to check the pause state of the buffers.\",\"returns\":{\"vaultPaused\":\"True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment. Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers are also paused (with `pauseVaultBuffers`).\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting buffers, and vice versa.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`. If the Vault was also paused, it will remain in that state until explicitly unpaused. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateSwapFeePercentageChanged` event.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose swap fee percentage will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateYieldFeePercentageChanged` event.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose yield fee percentage will be updated\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"disableQuery()\":{\"notice\":\"Disables query functionality on the Vault. Can only be called by governance.\"},\"disableQueryPermanently()\":{\"notice\":\"Disables query functionality permanently on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"enableQuery()\":{\"notice\":\"Enables query functionality on the Vault. Can only be called by governance.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"notice\":\"Interface for functions defined on the `VaultAdmin` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":\"IVaultAdmin\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xe0e5193402394ef505f87b206d8e64e1ea8b604feeb2ea8bbd054050778c162d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c962b5d782a8ec4341741dd49daf071e23560548ad95ed00e1531379cfcf0a2e\",\"dweb:/ipfs/QmbPn63SLEZp719KdAtPa4urbhQwqYzfewWfNRtw3nyy8c\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"IVaultErrors":{"abi":[{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Errors are declared inside an interface (namespace) to improve DX with Typechain.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":\"IVaultErrors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"IVaultEvents":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Events are declared inside an interface (namespace) to improve DX with Typechain.\",\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":\"IVaultEvents\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xe0e5193402394ef505f87b206d8e64e1ea8b604feeb2ea8bbd054050778c162d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c962b5d782a8ec4341741dd49daf071e23560548ad95ed00e1531379cfcf0a2e\",\"dweb:/ipfs/QmbPn63SLEZp719KdAtPa4urbhQwqYzfewWfNRtw3nyy8c\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"IVaultExtension":{"abi":[{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"tokenAllowance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"swapParams","type":"tuple"}],"name":"computeDynamicSwapFeePercentage","outputs":[{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"emitAuxiliaryEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddLiquidityCalledFlag","outputs":[{"internalType":"bool","name":"liquidityAdded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"yieldFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBptRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getERC4626BufferAsset","outputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getHooksConfig","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonzeroDeltaCount","outputs":[{"internalType":"uint256","name":"nonzeroDeltaCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolConfig","outputs":[{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"poolConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolPausedState","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"},{"internalType":"uint32","name":"poolPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"poolBufferPeriodEndTime","type":"uint32"},{"internalType":"address","name":"pauseManager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolRoleAccounts","outputs":[{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenRates","outputs":[{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getReservesOf","outputs":[{"internalType":"uint256","name":"reserveAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenDelta","outputs":[{"internalType":"int256","name":"tokenDelta","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAdmin","outputs":[{"internalType":"address","name":"vaultAdmin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"isERC4626BufferInitialized","outputs":[{"internalType":"bool","name":"isBufferInitialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInRecoveryMode","outputs":[{"internalType":"bool","name":"inRecoveryMode","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInitialized","outputs":[{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolPaused","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabled","outputs":[{"internalType":"bool","name":"queryDisabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabledPermanently","outputs":[{"internalType":"bool","name":"queryDisabledPermanently","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"unlocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quote","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quoteAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"tokenTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address,address)":"927da105","approve(address,address,uint256)":"e1f21c67","balanceOf(address,address)":"f7888aec","computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))":"4d472bdd","emitAuxiliaryEvent(bytes32,bytes)":"c8088247","getAddLiquidityCalledFlag(address)":"ace9b89b","getAggregateSwapFeeAmount(address,address)":"85e0b999","getAggregateYieldFeeAmount(address,address)":"00fdfa13","getAuthorizer()":"aaabadc5","getBptRate(address)":"4f037ee7","getCurrentLiveBalances(address)":"535cfd8a","getERC4626BufferAsset(address)":"4afbaf5a","getHooksConfig(address)":"ce8630d4","getNonzeroDeltaCount()":"db817187","getPoolConfig(address)":"f29486a1","getPoolData(address)":"13d21cdf","getPoolPausedState(address)":"15e32046","getPoolRoleAccounts(address)":"e9ddeb26","getPoolTokenInfo(address)":"67e0e076","getPoolTokenRates(address)":"7e361bde","getPoolTokens(address)":"ca4f2803","getProtocolFeeController()":"85f2dbd4","getReservesOf(address)":"96787092","getStaticSwapFeePercentage(address)":"b45090f9","getTokenDelta(address)":"9e825ff5","getVaultAdmin()":"1ba0ae45","initialize(address,address,address[],uint256[],uint256,bytes)":"ba8a2be0","isERC4626BufferInitialized(address)":"6844846b","isPoolInRecoveryMode(address)":"be7d628a","isPoolInitialized(address)":"532cec7c","isPoolPaused(address)":"6c9bc732","isPoolRegistered(address)":"c673bdaf","isQueryDisabled()":"b4aef0ab","isQueryDisabledPermanently()":"13ef8a5d","isUnlocked()":"8380edb7","quote(bytes)":"edfa3568","quoteAndRevert(bytes)":"757d64b3","registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"eeec802f","removeLiquidityRecovery(address,address,uint256,uint256[])":"a07d6040","totalSupply(address)":"e4dc2aa4","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAllowance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"emitAuxiliaryEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getAddLiquidityCalledFlag\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"liquidityAdded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"yieldFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getERC4626BufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonzeroDeltaCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"poolConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"poolPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"poolBufferPeriodEndTime\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"tokenDelta\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultAdmin\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"isERC4626BufferInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isBufferInitialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"inRecoveryMode\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabledPermanently\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabledPermanently\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"`VaultExtension` handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and liquidity operations.\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"tokenAllowance\":\"Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"tokenBalance\":\"Token balance of the account\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"dynamicSwapFeePercentage\":\"The dynamic swap fee percentage\"}},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\"}},\"getAddLiquidityCalledFlag(address)\":{\"details\":\"Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional is the only standard way to exit a position without fees, and this flag is used to enable fees in that case. It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse than a simple swap for every pool type.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"liquidityAdded\":\"True if liquidity has been added to this pool in the current transaction Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"swapFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"yieldFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"authorizer\":\"Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getERC4626BufferAsset(address)\":{\"details\":\"To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers should never call `wrapper.asset()` directly, at least without checking it against the asset registered with the Vault on initialization.\",\"params\":{\"wrappedToken\":\"The wrapped token specifying the buffer\"},\"returns\":{\"asset\":\"The underlying asset of the wrapped token\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"hooksConfig\":\"The hooks configuration as a `HooksConfig` struct\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"nonzeroDeltaCount\":\"The current value of `_nonzeroDeltaCount`\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"poolConfig\":\"The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"poolData\":\"The `PoolData` result\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period. Balancer timestamps are 32 bits.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"pauseManager\":\"The pause manager, or the zero address\",\"poolBufferPeriodEndTime\":\"The timestamp after which the Pool unpauses itself (if paused)\",\"poolPauseWindowEndTime\":\"The timestamp of the end of the Pool's pause window\",\"poolPaused\":\"True if the Pool is paused\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"roleAccounts\":\"A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"tokens\":\"List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"reserveAmount\":\"The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"swapFeePercentage\":\"The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"tokenDelta\":\"The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"vaultAdmin\":\"The address of the Vault admin\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"isERC4626BufferInitialized(address)\":{\"details\":\"An initialized buffer should have an asset registered in the Vault.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"isBufferInitialized\":\"True if the ERC4626 buffer is initialized\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"inRecoveryMode\":\"True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"initialized\":\"True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"poolPaused\":\"True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"registered\":\"True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"If true, queries might either be disabled temporarily or permanently.\",\"returns\":{\"queryDisabled\":\"True if query functionality is reversibly disabled\"}},\"isQueryDisabledPermanently()\":{\"details\":\"This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\",\"returns\":{\"queryDisabledPermanently\":\"True if query functionality is permanently disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"unlocked\":\"True if the Vault is unlocked, false otherwise\"}},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. Balancer timestamps are 32 bits. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOut\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"tokenTotalSupply\":\"Total supply of the token\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"getAddLiquidityCalledFlag(address)\":{\"notice\":\"This flag is used to detect and tax \\\"round-trip\\\" interactions (adding and removing liquidity in the same pool).\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getERC4626BufferAsset(address)\":{\"notice\":\"Gets the registered asset for a given buffer.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"isERC4626BufferInitialized(address)\":{\"notice\":\"Checks if the wrapped token has an initialized buffer in the Vault.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Returns true if queries are disabled on the Vault.\"},\"isQueryDisabledPermanently()\":{\"notice\":\"Returns true if queries are disabled permanently; false if they are enabled.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"notice\":\"Interface for functions defined on the `VaultExtension` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":\"IVaultExtension\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xe0e5193402394ef505f87b206d8e64e1ea8b604feeb2ea8bbd054050778c162d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c962b5d782a8ec4341741dd49daf071e23560548ad95ed00e1531379cfcf0a2e\",\"dweb:/ipfs/QmbPn63SLEZp719KdAtPa4urbhQwqYzfewWfNRtw3nyy8c\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"IVaultMain":{"abi":[{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"tokenCount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"vaultExtension","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getVaultExtension()":"b9a8effa","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","sendTo(address,address,uint256)":"ae639329","settle(address,uint256)":"15afd409","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unlock(bytes)":"48c89491"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultExtension\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These are generally \\\"critical path\\\" functions (swap, add/remove liquidity) that are in the main contract for technical or performance reasons.\",\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"index\":\"Index corresponding to the given token in the pool's token list\",\"tokenCount\":\"Number of tokens in the pool\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"vaultExtension\":\"Address of the VaultExtension\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"}},\"notice\":\"Interface for functions defined on the main Vault contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":\"IVaultMain\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"Authentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be applied to external functions to make them only callable by authorized accounts. Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in multi-contract systems. There are two main uses for it: - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers unique. The contract's own address is a good option. - if the contract belongs to a family that shares action identifiers for the same functions, an identifier shared by the entire family (and no other contract) should be used instead.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"notice\":\"Building block for performing access control on external functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":\"Authentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"FixedPoint":{"abi":[{"inputs":[],"name":"ZeroDivision","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220e9cc622b7f35aaf8f3efa30ad767c4a02aedd5ccde9b7738c8491078c2823d0164736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 0xCC PUSH3 0x2B7F35 0xAA 0xF8 RETURN 0xEF LOG3 EXP 0xD7 PUSH8 0xC4A02AEDD5CCDE9B PUSH24 0x38C8491078C2823D0164736F6C634300081B003300000000 ","sourceMap":"239:5688:14:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220e9cc622b7f35aaf8f3efa30ad767c4a02aedd5ccde9b7738c8491078c2823d0164736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 0xCC PUSH3 0x2B7F35 0xAA 0xF8 RETURN 0xEF LOG3 EXP 0xD7 PUSH8 0xC4A02AEDD5CCDE9B PUSH24 0x38C8491078C2823D0164736F6C634300081B003300000000 ","sourceMap":"239:5688:14:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":\"FixedPoint\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"LogExpMath":{"abi":[{"inputs":[],"name":"BaseOutOfBounds","type":"error"},{"inputs":[],"name":"ExponentOutOfBounds","type":"error"},{"inputs":[],"name":"InvalidExponent","type":"error"},{"inputs":[],"name":"OutOfBounds","type":"error"},{"inputs":[],"name":"ProductOutOfBounds","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220f7e8e3ef4405ba858296891409b167de675961dcc03dc03125ef5eed9c9eb29264736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF7 0xE8 0xE3 0xEF PREVRANDAO SDIV 0xBA DUP6 DUP3 SWAP7 DUP10 EQ MULMOD 0xB1 PUSH8 0xDE675961DCC03DC0 BALANCE 0x25 0xEF MCOPY 0xED SWAP13 SWAP15 0xB2 SWAP3 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"595:21889:15:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220f7e8e3ef4405ba858296891409b167de675961dcc03dc03125ef5eed9c9eb29264736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF7 0xE8 0xE3 0xEF PREVRANDAO SDIV 0xBA DUP6 DUP3 SWAP7 DUP10 EQ MULMOD 0xB1 PUSH8 0xDE675961DCC03DC0 BALANCE 0x25 0xEF MCOPY 0xED SWAP13 SWAP15 0xB2 SWAP3 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"595:21889:15:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BaseOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExponentOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExponent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProductOutOfBounds\",\"type\":\"error\"}],\"devdoc\":{\"author\":\"Fernando Martinelli - @fernandomartinelliSergio Yuhjtman - @sergioyuhjtmanDaniel Fernandez - @dmf7z\",\"details\":\"Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument). Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural exponentiation and logarithm (where the base is Euler's number). All math operations are unchecked in order to save gas.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"BaseOutOfBounds()\":[{\"notice\":\"This error is thrown when a base is not within an acceptable range.\"}],\"ExponentOutOfBounds()\":[{\"notice\":\"This error is thrown when a exponent is not within an acceptable range.\"}],\"InvalidExponent()\":[{\"notice\":\"This error is thrown when an exponent used in the exp function is not within an acceptable range.\"}],\"OutOfBounds()\":[{\"notice\":\"This error is thrown when a variable or result is not within the acceptable bounds defined in the function.\"}],\"ProductOutOfBounds()\":[{\"notice\":\"This error is thrown when the exponent * ln(base) is not within an acceptable range.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":\"LogExpMath\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"ReentrancyGuardTransient":{"abi":[{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"NOTE: This variant only works on networks where EIP-1153 is available.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Variant of {ReentrancyGuard} that uses transient storage.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":\"ReentrancyGuardTransient\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"StorageSlotExtension":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212207d1ece238b2a90fbead6c43dfa8046238cc35e0b4dec12d000c4f2cebfef20e164736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH30 0x1ECE238B2A90FBEAD6C43DFA8046238CC35E0B4DEC12D000C4F2CEBFEF20 0xE1 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"278:4371:17:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212207d1ece238b2a90fbead6c43dfa8046238cc35e0b4dec12d000c4f2cebfef20e164736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH30 0x1ECE238B2A90FBEAD6C43DFA8046238CC35E0B4DEC12D000C4F2CEBFEF20 0xE1 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"278:4371:17:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"TIP: Consider using this library along with {SlotDerivation}.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":\"StorageSlotExtension\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol":{"ProtocolFeeController":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"pool","type":"address"}],"name":"CallerIsNotPoolCreator","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[],"name":"InvalidMigrationSource","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[],"name":"PoolCreatorFeePercentageTooHigh","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreatorNotRegistered","type":"error"},{"inputs":[],"name":"ProtocolSwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ProtocolYieldFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"ZeroDivision","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"GlobalProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"GlobalProtocolYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateSwapFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateYieldFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PoolCreatorFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"PoolCreatorSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"PoolCreatorYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"poolCreator","type":"address"},{"indexed":false,"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"PoolWithCreatorRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolSwapFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"ProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolYieldFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"ProtocolYieldFeePercentageChanged","type":"event"},{"inputs":[],"name":"MAX_CREATOR_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFeesHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"protocolFeePercentage","type":"uint256"},{"internalType":"uint256","name":"poolCreatorFeePercentage","type":"uint256"}],"name":"computeAggregateFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolSwapFeeInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolYieldFeeInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getProtocolFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"migratePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"registerPool","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setGlobalProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setGlobalProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"setPoolCreatorSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"setPoolCreatorYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60e03461010257601f612db938819003918201601f19168301916001600160401b038311848410176101065780849260209460405283398101031261010257516001600160a01b038116810361010257306080528060a05260c052604051612c9e908161011b8239608051816120aa015260a051818181611074015261235d015260c0518181816102530152818161036e015281816103f8015281816105170152818161058501528181610864015281816108d201528181610c7d01528181610db301528181611510015281816116b501528181611856015281816119b001528181611b2501528181612288015281816126ba0152818161283601526129110152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c9081630252aab514611ede575080630874327f14611acd5780630b8e059b14611a955780630ddd60c614611a745780631377c16c146119555780632772d156146117725780632e1d388d146119335780633af52712146117fb57806352f125f0146117d057806355fb76af146117b35780635c15a0b4146117775780635e32e4e81461177257806371447ea8146115cd57806371ecc8fb1461142957806377ff76e7146111d35780637869ee18146111b75780637a2b97dc1461114c578063851c1bb3146110fc5780638a3c5c69146110985780638d928af8146110555780638df44c5414610fcd5780638f4ab9ca14610fac5780639e95f3fd14610f20578063a93df2a414610ebb578063aaabadc514610e90578063abaa335614610ce7578063b53a70b214610c00578063c673bdaf14610bc3578063cf7b287f14610b5d578063f706144514610b28578063fa399f2a14610392578063fbfa77cf1461034f5763fd267f3914610187575f80fd5b34610323576040600319360112610323576101a0611f12565b602435906101ac61242c565b6706f05b59d3b200008211610327576101c48261288a565b6101cd816121c6565b6101d682612523565b916040516101e381611f9b565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600360205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169161027d81612aaa565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e92602092610309575b50604051908152a2005b61031290611fe4565b5f6102ff565b6040513d5f823e3d90fd5b5f80fd5b7f7e6eb7fb000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610323576020600319360112610323576103ab611f12565b6103b361282c565b6040517f8f4ab9ca0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201525f81602481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610318575f905f92610acb575b506001600160a01b0383165f52600360205267ffffffffffffffff60405f20541690600560205260405f2054905f928215159384610ac1575b84610ab1575b610472876128d2565b94905f5b8681106108225789896001600160a01b0382165f52600460205267ffffffffffffffff60405f205416905f92600660205260405f2054925f8415159485610818575b85610806575b6104c7846128d2565b96905f5b8881106104d457005b6104de818961214b565b516104ec575b6001016104cb565b986001600160a01b036104ff8b8461214b565b51169061050c8b8a61214b565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561080257604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201528181606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156107f7579082916107e0575b506107b357505f99816105c8828b61214b565b516040519081527fe505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e260206001600160a01b038c1692a383156107385761060e818a61214b565b5186156107105761061e90612575565b6001670de0b6b3a764000061065f8a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848c878301040190151502612592565b928301040190151502916001600160a01b0389165f52600760205260405f20815f5260205260405f20610693848254612568565b905561069f828b61214b565b519081848103116106e3576001936106d9916001600160a01b038c165f52600860205260405f20905f5260205260405f2092038254612568565b90555b90506104e4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001918561077d5761074a828b61214b565b51906001600160a01b038a165f52600760205260405f20905f5260205261077660405f20918254612568565b90556106dc565b610787828b61214b565b51906001600160a01b038a165f52600860205260405f20905f5260205261077660405f20918254612568565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6107e990611fe4565b6107f457808c6105b5565b80fd5b6040513d84823e3d90fd5b5080fd5b905061081281836125a5565b906104be565b82151595506104b8565b61082c818761214b565b5161083a575b600101610476565b6001600160a01b0361084c828461214b565b511690610859818861214b565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561032357604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201525f81606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561031857610aa2575b50818b7fae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f60206001600160a01b03610937868d61214b565b51936040519485521692a38815610a2757610952818861214b565b5185156107105761096290612575565b6001670de0b6b3a76400006109a3897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848b878301040190151502612592565b928301040190151502916001600160a01b038c165f52600760205260405f20815f5260205260405f206109d7848254612568565b90556109e3828961214b565b519081848103116106e357600193610a1d916001600160a01b038f165f52600860205260405f20905f5260205260405f2092038254612568565b90555b9050610832565b60019184610a6c57610a39828961214b565b51906001600160a01b038d165f52600760205260405f20905f52602052610a6560405f20918254612568565b9055610a20565b610a76828961214b565b51906001600160a01b038d165f52600860205260405f20905f52602052610a6560405f20918254612568565b610aab90611fe4565b8b6108ff565b50610abc83826125a5565b610469565b8115159450610463565b9150503d805f833e610add8183612014565b8101906040818303126103235780519167ffffffffffffffff928381116103235781610b0a9184016123cb565b92602083015190811161032357610b2192016123cb565b908361042a565b3461032357604060031936011261032357610b5b610b44611f12565b610b4c611f28565b90610b56816125e6565b612775565b005b3461032357604060031936011261032357610b76611f12565b610b7e611f28565b90610b8761242c565b610b90816128d2565b915f5b838110610b9c57005b80610bbd6001600160a01b03610bb46001948761214b565b511687856129e6565b01610b93565b34610323576020600319360112610323576001600160a01b03610be4611f12565b165f526002602052602060ff60405f2054166040519015158152f35b3461032357606060031936011261032357610c19611f12565b610c21611f28565b604435906001600160a01b039283831680840361032357604090610c4361242c565b60448251809781937fc9c1661b000000000000000000000000000000000000000000000000000000008352818716600484015260248301527f0000000000000000000000000000000000000000000000000000000000000000165afa801561031857610cb4575b610b5b93506129e6565b6040843d604011610cdf575b81610ccd60409383612014565b8101031261032357610b5b9350610caa565b3d9150610cc0565b3461032357604060031936011261032357610d00611f12565b60243590610d0c61242c565b6706f05b59d3b200008211610e6857610d248261288a565b610d2d816121c6565b610d3682612523565b91604051610d4381611f9b565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600460205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f00000000000000000000000000000000000000000000000000000000000000001691610ddd81612a78565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd926020926103095750604051908152a2005b7fa7849e8e000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576020610eaa612327565b6001600160a01b0360405191168152f35b34610323576020600319360112610323576004356706f05b59d3b200008111610e6857602081610f0b7f48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f69361288a565b610f1361242c565b80600155604051908152a1005b346103235760208060031936011261032357610f3a611f12565b90610f44826128d2565b90610f4e826120fc565b925f946001600160a01b03809116955b848110610f775760405180610f738882611f60565b0390f35b600190875f526008845260405f2083610f90838861214b565b51165f52845260405f2054610fa5828961214b565b5201610f5e565b3461032357602060031936011261032357610b5b610fc8611f12565b6121c6565b346103235760208060031936011261032357610fe7611f12565b90610ff1826128d2565b90610ffb826120fc565b925f946001600160a01b03809116955b8481106110205760405180610f738882611f60565b600190875f526007845260405f2083611039838861214b565b51165f52845260405f205461104e828961214b565b520161100b565b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610323576020600319360112610323576004356706f05b59d3b200008111610327576020816110e87fbf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d9361288a565b6110f061242c565b805f55604051908152a1005b34610323576020600319360112610323576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036103235761114460209161207f565b604051908152f35b34610323576020600319360112610323576001600160a01b0361116d611f12565b165f526004602052602060405f206040519061118882611f9b565b5467ffffffffffffffff811680835260ff604092831c1615159390920183905280519182526020820192909252f35b34610323575f6003193601126103235760205f54604051908152f35b34610323576060600319360112610323576111ec611f12565b6111f4611f28565b906044359081151592838303610323576040936112969261121361282c565b6001600160a01b0380911690815f5260209360028552875f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055865f146113fc57827fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb6113a35f995b80156113ee5788888c5f9c8d91612523565b8f51906112a282611f9b565b67ffffffffffffffff80911682526004611312868401948686528b5f5260038852604084905f209551169480549651151560401b967fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000968768ff0000000000000000809a16921617179055612523565b9560408390519761132289611f9b565b1687528087019586528a5f525260405f209451169184549351151560401b16921617179055837fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a78564828d8f611389905192839283909291602090604083019483521515910152565b0390a28b518a815290151560208201529081906040820190565b0390a2169183836113bd575b505050508351928352820152f35b7fa90fdff0801794d86ec8df4bdd2b7e627d30052d0658e18cb977b38248ee45e8918851908152a3848080836113af565b88888c6001549c8d91612523565b827fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb6113a35f5499611284565b346103235760208060031936011261032357611443611f12565b61144c816121c6565b6001600160a01b039182821692835f526003825260405f20906040519161147283611f9b565b549167ffffffffffffffff9060ff8285169485835260401c1615908582159101525f5493816115c2575b506114a357005b6114ac83612523565b9080604051926114bb84611f9b565b168252848201905f8252875f526003865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169261153a81612aaa565b843b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e936103095750604051908152a2005b90508314158761149c565b3461032357602080600319360112610323576115e7611f12565b6115f0816121c6565b6001600160a01b039182821692835f526004825260405f20906040519161161683611f9b565b549167ffffffffffffffff9060ff8285169485835260401c1615908582159101526001549381611767575b5061164857005b61165183612523565b90806040519261166084611f9b565b168252848201905f8252875f526004865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f000000000000000000000000000000000000000000000000000000000000000016926116df81612a78565b843b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd936103095750604051908152a2005b905083141587611641565b611f3e565b34610323576020600319360112610323576001600160a01b03611798611f12565b165f526003602052602060405f206040519061118882611f9b565b34610323575f600319360112610323576020600154604051908152f35b3461032357602060031936011261032357610b5b6117ec611f12565b6117f58161267b565b90612775565b3461032357604060031936011261032357611814611f12565b60243590611821816125e6565b670de0ad9b58f16000821161190b57611839816121c6565b6001600160a01b039182821692835f5260066020528160405f20557f0000000000000000000000000000000000000000000000000000000000000000169161188081612a78565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34926020926103095750604051908152a2005b7f0370da74000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576020604051670de0ad9b58f160008152f35b346103235760406003193601126103235761196e611f12565b6024359061197b816125e6565b670de0ad9b58f16000821161190b57611993816121c6565b6001600160a01b039182821692835f5260056020528160405f20557f000000000000000000000000000000000000000000000000000000000000000016916119da81612aaa565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577fb7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c92602092611a655750604051908152a2005b611a6e90611fe4565b846102ff565b346103235760406003193601126103235760206111446024356004356125a5565b34610323576020600319360112610323576001600160a01b03611ab6611f12565b165f526005602052602060405f2054604051908152f35b346103235760208060031936011261032357611ae7611f12565b611aef61242c565b6001600160a01b036040517f85f2dbd40000000000000000000000000000000000000000000000000000000081528381600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156103185782915f91611ea4575b501691308314611e7c571691825f526002815260ff60405f205416611e5057825f526002815260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556040517f5c15a0b4000000000000000000000000000000000000000000000000000000008152836004820152604081602481865afa908115610318575f905f92611e2c575b50611bf890612523565b9060405190611c0682611f9b565b67ffffffffffffffff80931682528382019015158152855f52600384528260405f209251169180549151151560401b917fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000938468ff0000000000000000809516921617179055604051917f7a2b97dc000000000000000000000000000000000000000000000000000000008352866004840152604083602481895afa928315610318575f905f94611df8575b50611cbc90612523565b938060405195611ccb87611f9b565b1685528585019315158452875f526004865260405f209451169184549351151560401b169216171790556040517f0b8e059b0000000000000000000000000000000000000000000000000000000081528360048201528181602481865afa908115610318575f91611dca575b506024928291855f526005835260405f2055604051938480927f0252aab50000000000000000000000000000000000000000000000000000000082528760048301525afa918215610318575f92611d9a575b50600691925f525260405f20555f80f35b91508082813d8311611dc3575b611db18183612014565b81010312610323576006915191611d89565b503d611da7565b90508181813d8311611df1575b611de18183612014565b8101031261032357516024611d37565b503d611dd7565b611cbc9450611e1f915060403d604011611e25575b611e178183612014565b810190612062565b93611cb2565b503d611e0d565b611bf89250611e4a915060403d604011611e2557611e178183612014565b91611bee565b827fdb771c80000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fb82fd5bf000000000000000000000000000000000000000000000000000000005f5260045ffd5b809250858092503d8311611ed7575b611ebd8183612014565b810103126103235751818116810361032357819085611b56565b503d611eb3565b34610323576020600319360112610323576020906001600160a01b03611f02611f12565b165f526006825260405f20548152f35b600435906001600160a01b038216820361032357565b602435906001600160a01b038216820361032357565b34610323575f6003193601126103235760206040516706f05b59d3b200008152f35b60209060206040818301928281528551809452019301915f5b828110611f87575050505090565b835185529381019392810192600101611f79565b6040810190811067ffffffffffffffff821117611fb757604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff8111611fb757604052565b6060810190811067ffffffffffffffff821117611fb757604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117611fb757604052565b5190811515820361032357565b91908260409103126103235761207c602083519301612055565b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526120de81611ff8565b51902090565b67ffffffffffffffff8111611fb75760051b60200190565b90612106826120e4565b6121136040519182612014565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061214182946120e4565b0190602036910137565b805182101561215f5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b67ffffffffffffffff8111611fb757601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0905f601f6001600160a01b036040519383604460209684888201947ffa399f2a0000000000000000000000000000000000000000000000000000000086521660248201526024815261223881611ff8565b604051988996879586937f48c894910000000000000000000000000000000000000000000000000000000085528b60048601525180918160248701528686015e85858286010152011681010301927f0000000000000000000000000000000000000000000000000000000000000000165af18015610318576122b8575050565b3d805f843e6122c78184612014565b82019181818403126103235780519067ffffffffffffffff821161032357019180601f84011215610323578251906122fe8261218c565b9061230c6040519283612014565b8282528383860101116103235781835f95018483015e010152565b6040517faaabadc50000000000000000000000000000000000000000000000000000000081526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa918215610318575f9261239257505090565b9091506020813d6020116123c3575b816123ae60209383612014565b81010312610323575190811681036103235790565b3d91506123a1565b9080601f83011215610323578151906020916123e6816120e4565b936123f46040519586612014565b81855260208086019260051b82010192831161032357602001905b82821061241d575050505090565b8151815290830190830161240f565b6124587fffffffff000000000000000000000000000000000000000000000000000000005f351661207f565b60206001600160a01b0361246a612327565b16916064604051809481937f9be2a88400000000000000000000000000000000000000000000000000000000835260048301523360248301523060448301525afa908115610318575f916124e9575b50156124c157565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90506020813d60201161251b575b8161250460209383612014565b810103126103235761251590612055565b5f6124b9565b3d91506124f7565b67ffffffffffffffff90818111612538571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b919082018092116106e357565b90670de0b6b3a7640000918281029281840414901517156106e357565b818102929181159184041417156106e357565b906125d264174876e8009283926125cb670de0b6b3a76400009183830383851002612592565b0490612568565b048181029181830414901517156106e35790565b6001600160a01b0390816125f98261267b565b16801561263a57330361260a575050565b7ffbecdbf4000000000000000000000000000000000000000000000000000000005f52336004521660245260445ffd5b507f8bcbf353000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b51906001600160a01b038216820361032357565b604080517fe9ddeb260000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526060816024817f000000000000000000000000000000000000000000000000000000000000000087165afa90811561276b575f916126f2575b5001511690565b90506060813d606011612763575b8161270d60609383612014565b81010312610323578151906060820182811067ffffffffffffffff821117611fb757612759918491825261274081612667565b845261274e60208201612667565b602085015201612667565b828201525f6126eb565b3d9150612700565b82513d5f823e3d90fd5b9061277f826128d2565b92905f5b848110612791575050505050565b6001906001600160a01b03806127a7838661214b565b5116818616805f5260086020818152604094855f20855f528252855f205495866127d9575b5050505050505001612783565b7f938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f993855f528352805f20865f5283525f81812055612818878d88612adc565b519586528a1694a45f8080808080806127cc565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361285e57565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b64174876e8008082048181029181830414901517156106e357036128aa57565b7f833fb3ce000000000000000000000000000000000000000000000000000000005f5260045ffd5b906001600160a01b0380604051937fca4f28030000000000000000000000000000000000000000000000000000000085521660048401525f83602481847f0000000000000000000000000000000000000000000000000000000000000000165afa928315610318575f93612948575b5050815190565b909192503d805f833e61295b8183612014565b810160209182818303126103235780519067ffffffffffffffff821161032357019281601f85011215610323578351612993816120e4565b946129a16040519687612014565b818652848087019260051b820101938411610323578401905b8382106129ce575050505050905f80612941565b815183811681036103235781529084019084016129ba565b91906001600160a01b0380931690815f52600760205260405f209284811693845f5260205260405f20549485612a1f575b505050505050565b82612a64877f1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b595602095885f526007875260405f208a5f5287525f6040812055612adc565b6040519687521694a45f8080808080612a17565b6001600160a01b03165f52600460205261207c67ffffffffffffffff60405f205416600660205260405f2054906125a5565b6001600160a01b03165f52600360205261207c67ffffffffffffffff60405f205416600560205260405f2054906125a5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082019081526001600160a01b03938416602483015260448083019590955293815292612b70925f9283929190612b39606488612014565b1694519082865af13d15612bd4573d90612b528261218c565b91612b606040519384612014565b82523d5f602084013e5b83612bdc565b8051908115159182612bb1575b5050612b865750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8192509060209181010312610323576020612bcc9101612055565b155f80612b7d565b606090612b6a565b90612c195750805115612bf157805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580612c5f575b612c2a575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15612c2256fea26469706673582212209d11f34da5b2441f152cc33b872b7e59eb999ffa46fa4cbe19faf11a783a73d264736f6c634300081b0033","opcodes":"PUSH1 0xE0 CALLVALUE PUSH2 0x102 JUMPI PUSH1 0x1F PUSH2 0x2DB9 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x106 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x102 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x102 JUMPI ADDRESS PUSH1 0x80 MSTORE DUP1 PUSH1 0xA0 MSTORE PUSH1 0xC0 MSTORE PUSH1 0x40 MLOAD PUSH2 0x2C9E SWAP1 DUP2 PUSH2 0x11B DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x20AA ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x1074 ADD MSTORE PUSH2 0x235D ADD MSTORE PUSH1 0xC0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x253 ADD MSTORE DUP2 DUP2 PUSH2 0x36E ADD MSTORE DUP2 DUP2 PUSH2 0x3F8 ADD MSTORE DUP2 DUP2 PUSH2 0x517 ADD MSTORE DUP2 DUP2 PUSH2 0x585 ADD MSTORE DUP2 DUP2 PUSH2 0x864 ADD MSTORE DUP2 DUP2 PUSH2 0x8D2 ADD MSTORE DUP2 DUP2 PUSH2 0xC7D ADD MSTORE DUP2 DUP2 PUSH2 0xDB3 ADD MSTORE DUP2 DUP2 PUSH2 0x1510 ADD MSTORE DUP2 DUP2 PUSH2 0x16B5 ADD MSTORE DUP2 DUP2 PUSH2 0x1856 ADD MSTORE DUP2 DUP2 PUSH2 0x19B0 ADD MSTORE DUP2 DUP2 PUSH2 0x1B25 ADD MSTORE DUP2 DUP2 PUSH2 0x2288 ADD MSTORE DUP2 DUP2 PUSH2 0x26BA ADD MSTORE DUP2 DUP2 PUSH2 0x2836 ADD MSTORE PUSH2 0x2911 ADD MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x252AAB5 EQ PUSH2 0x1EDE JUMPI POP DUP1 PUSH4 0x874327F EQ PUSH2 0x1ACD JUMPI DUP1 PUSH4 0xB8E059B EQ PUSH2 0x1A95 JUMPI DUP1 PUSH4 0xDDD60C6 EQ PUSH2 0x1A74 JUMPI DUP1 PUSH4 0x1377C16C EQ PUSH2 0x1955 JUMPI DUP1 PUSH4 0x2772D156 EQ PUSH2 0x1772 JUMPI DUP1 PUSH4 0x2E1D388D EQ PUSH2 0x1933 JUMPI DUP1 PUSH4 0x3AF52712 EQ PUSH2 0x17FB JUMPI DUP1 PUSH4 0x52F125F0 EQ PUSH2 0x17D0 JUMPI DUP1 PUSH4 0x55FB76AF EQ PUSH2 0x17B3 JUMPI DUP1 PUSH4 0x5C15A0B4 EQ PUSH2 0x1777 JUMPI DUP1 PUSH4 0x5E32E4E8 EQ PUSH2 0x1772 JUMPI DUP1 PUSH4 0x71447EA8 EQ PUSH2 0x15CD JUMPI DUP1 PUSH4 0x71ECC8FB EQ PUSH2 0x1429 JUMPI DUP1 PUSH4 0x77FF76E7 EQ PUSH2 0x11D3 JUMPI DUP1 PUSH4 0x7869EE18 EQ PUSH2 0x11B7 JUMPI DUP1 PUSH4 0x7A2B97DC EQ PUSH2 0x114C JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x10FC JUMPI DUP1 PUSH4 0x8A3C5C69 EQ PUSH2 0x1098 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x1055 JUMPI DUP1 PUSH4 0x8DF44C54 EQ PUSH2 0xFCD JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0xFAC JUMPI DUP1 PUSH4 0x9E95F3FD EQ PUSH2 0xF20 JUMPI DUP1 PUSH4 0xA93DF2A4 EQ PUSH2 0xEBB JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xE90 JUMPI DUP1 PUSH4 0xABAA3356 EQ PUSH2 0xCE7 JUMPI DUP1 PUSH4 0xB53A70B2 EQ PUSH2 0xC00 JUMPI DUP1 PUSH4 0xC673BDAF EQ PUSH2 0xBC3 JUMPI DUP1 PUSH4 0xCF7B287F EQ PUSH2 0xB5D JUMPI DUP1 PUSH4 0xF7061445 EQ PUSH2 0xB28 JUMPI DUP1 PUSH4 0xFA399F2A EQ PUSH2 0x392 JUMPI DUP1 PUSH4 0xFBFA77CF EQ PUSH2 0x34F JUMPI PUSH4 0xFD267F39 EQ PUSH2 0x187 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A0 PUSH2 0x1F12 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1AC PUSH2 0x242C JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0x327 JUMPI PUSH2 0x1C4 DUP3 PUSH2 0x288A JUMP JUMPDEST PUSH2 0x1CD DUP2 PUSH2 0x21C6 JUMP JUMPDEST PUSH2 0x1D6 DUP3 PUSH2 0x2523 JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0x1E3 DUP2 PUSH2 0x1F9B JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x27D DUP2 PUSH2 0x2AAA JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x312 SWAP1 PUSH2 0x1FE4 JUMP JUMPDEST PUSH0 PUSH2 0x2FF JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x3AB PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0x3B3 PUSH2 0x282C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0xACB JUMPI JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH0 SWAP3 DUP3 ISZERO ISZERO SWAP4 DUP5 PUSH2 0xAC1 JUMPI JUMPDEST DUP5 PUSH2 0xAB1 JUMPI JUMPDEST PUSH2 0x472 DUP8 PUSH2 0x28D2 JUMP JUMPDEST SWAP5 SWAP1 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x822 JUMPI DUP10 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH0 SWAP3 PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 PUSH0 DUP5 ISZERO ISZERO SWAP5 DUP6 PUSH2 0x818 JUMPI JUMPDEST DUP6 PUSH2 0x806 JUMPI JUMPDEST PUSH2 0x4C7 DUP5 PUSH2 0x28D2 JUMP JUMPDEST SWAP7 SWAP1 PUSH0 JUMPDEST DUP9 DUP2 LT PUSH2 0x4D4 JUMPI STOP JUMPDEST PUSH2 0x4DE DUP2 DUP10 PUSH2 0x214B JUMP JUMPDEST MLOAD PUSH2 0x4EC JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x4CB JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x4FF DUP12 DUP5 PUSH2 0x214B JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x50C DUP12 DUP11 PUSH2 0x214B JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x7F7 JUMPI SWAP1 DUP3 SWAP2 PUSH2 0x7E0 JUMPI JUMPDEST POP PUSH2 0x7B3 JUMPI POP PUSH0 SWAP10 DUP2 PUSH2 0x5C8 DUP3 DUP12 PUSH2 0x214B JUMP JUMPDEST MLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xE505E41B0D437B47350A9990142CCF38ACB11FFA0E5AF8F973B9E172F3D5D5E2 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP3 LOG3 DUP4 ISZERO PUSH2 0x738 JUMPI PUSH2 0x60E DUP2 DUP11 PUSH2 0x214B JUMP JUMPDEST MLOAD DUP7 ISZERO PUSH2 0x710 JUMPI PUSH2 0x61E SWAP1 PUSH2 0x2575 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x65F DUP11 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP13 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x2592 JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x693 DUP5 DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x69F DUP3 DUP12 PUSH2 0x214B JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0x6D9 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x4E4 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 SWAP2 DUP6 PUSH2 0x77D JUMPI PUSH2 0x74A DUP3 DUP12 PUSH2 0x214B JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x6DC JUMP JUMPDEST PUSH2 0x787 DUP3 DUP12 PUSH2 0x214B JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST DUP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x24 SWAP3 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH2 0x7E9 SWAP1 PUSH2 0x1FE4 JUMP JUMPDEST PUSH2 0x7F4 JUMPI DUP1 DUP13 PUSH2 0x5B5 JUMP JUMPDEST DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST SWAP1 POP PUSH2 0x812 DUP2 DUP4 PUSH2 0x25A5 JUMP JUMPDEST SWAP1 PUSH2 0x4BE JUMP JUMPDEST DUP3 ISZERO ISZERO SWAP6 POP PUSH2 0x4B8 JUMP JUMPDEST PUSH2 0x82C DUP2 DUP8 PUSH2 0x214B JUMP JUMPDEST MLOAD PUSH2 0x83A JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x476 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x84C DUP3 DUP5 PUSH2 0x214B JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x859 DUP2 DUP9 PUSH2 0x214B JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xAA2 JUMPI JUMPDEST POP DUP2 DUP12 PUSH32 0xAE7EBAD9FC3D1D17965F063FA520D393595E2EF6C8E22AE8413B60900444E19F PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x937 DUP7 DUP14 PUSH2 0x214B JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 DUP9 ISZERO PUSH2 0xA27 JUMPI PUSH2 0x952 DUP2 DUP9 PUSH2 0x214B JUMP JUMPDEST MLOAD DUP6 ISZERO PUSH2 0x710 JUMPI PUSH2 0x962 SWAP1 PUSH2 0x2575 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x9A3 DUP10 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP12 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x2592 JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x9D7 DUP5 DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x9E3 DUP3 DUP10 PUSH2 0x214B JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0xA1D SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x832 JUMP JUMPDEST PUSH1 0x1 SWAP2 DUP5 PUSH2 0xA6C JUMPI PUSH2 0xA39 DUP3 DUP10 PUSH2 0x214B JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0xA20 JUMP JUMPDEST PUSH2 0xA76 DUP3 DUP10 PUSH2 0x214B JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST PUSH2 0xAAB SWAP1 PUSH2 0x1FE4 JUMP JUMPDEST DUP12 PUSH2 0x8FF JUMP JUMPDEST POP PUSH2 0xABC DUP4 DUP3 PUSH2 0x25A5 JUMP JUMPDEST PUSH2 0x469 JUMP JUMPDEST DUP2 ISZERO ISZERO SWAP5 POP PUSH2 0x463 JUMP JUMPDEST SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xADD DUP2 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x40 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x323 JUMPI DUP2 PUSH2 0xB0A SWAP2 DUP5 ADD PUSH2 0x23CB JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x323 JUMPI PUSH2 0xB21 SWAP3 ADD PUSH2 0x23CB JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x42A JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0xB44 PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0xB4C PUSH2 0x1F28 JUMP JUMPDEST SWAP1 PUSH2 0xB56 DUP2 PUSH2 0x25E6 JUMP JUMPDEST PUSH2 0x2775 JUMP JUMPDEST STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB76 PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0xB7E PUSH2 0x1F28 JUMP JUMPDEST SWAP1 PUSH2 0xB87 PUSH2 0x242C JUMP JUMPDEST PUSH2 0xB90 DUP2 PUSH2 0x28D2 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0xB9C JUMPI STOP JUMPDEST DUP1 PUSH2 0xBBD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBB4 PUSH1 0x1 SWAP5 DUP8 PUSH2 0x214B JUMP JUMPDEST MLOAD AND DUP8 DUP6 PUSH2 0x29E6 JUMP JUMPDEST ADD PUSH2 0xB93 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBE4 PUSH2 0x1F12 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xC19 PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0xC21 PUSH2 0x1F28 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP4 AND DUP1 DUP5 SUB PUSH2 0x323 JUMPI PUSH1 0x40 SWAP1 PUSH2 0xC43 PUSH2 0x242C JUMP JUMPDEST PUSH1 0x44 DUP3 MLOAD DUP1 SWAP8 DUP2 SWAP4 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP2 DUP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xCB4 JUMPI JUMPDEST PUSH2 0xB5B SWAP4 POP PUSH2 0x29E6 JUMP JUMPDEST PUSH1 0x40 DUP5 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0xCDF JUMPI JUMPDEST DUP2 PUSH2 0xCCD PUSH1 0x40 SWAP4 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0xB5B SWAP4 POP PUSH2 0xCAA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xCC0 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xD00 PUSH2 0x1F12 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xD0C PUSH2 0x242C JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0xE68 JUMPI PUSH2 0xD24 DUP3 PUSH2 0x288A JUMP JUMPDEST PUSH2 0xD2D DUP2 PUSH2 0x21C6 JUMP JUMPDEST PUSH2 0xD36 DUP3 PUSH2 0x2523 JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0xD43 DUP2 PUSH2 0x1F9B JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0xDDD DUP2 PUSH2 0x2A78 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0xA7849E8E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0xEAA PUSH2 0x2327 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0xE68 JUMPI PUSH1 0x20 DUP2 PUSH2 0xF0B PUSH32 0x48C5C3CCEC54C4E0EA08D83D838FA9BB725EB0B52C591CB00BD6E63BCA8C44F6 SWAP4 PUSH2 0x288A JUMP JUMPDEST PUSH2 0xF13 PUSH2 0x242C JUMP JUMPDEST DUP1 PUSH1 0x1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xF3A PUSH2 0x1F12 JUMP JUMPDEST SWAP1 PUSH2 0xF44 DUP3 PUSH2 0x28D2 JUMP JUMPDEST SWAP1 PUSH2 0xF4E DUP3 PUSH2 0x20FC JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0xF77 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xF73 DUP9 DUP3 PUSH2 0x1F60 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x8 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0xF90 DUP4 DUP9 PUSH2 0x214B JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0xFA5 DUP3 DUP10 PUSH2 0x214B JUMP JUMPDEST MSTORE ADD PUSH2 0xF5E JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0xFC8 PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0x21C6 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xFE7 PUSH2 0x1F12 JUMP JUMPDEST SWAP1 PUSH2 0xFF1 DUP3 PUSH2 0x28D2 JUMP JUMPDEST SWAP1 PUSH2 0xFFB DUP3 PUSH2 0x20FC JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0x1020 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xF73 DUP9 DUP3 PUSH2 0x1F60 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x7 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x1039 DUP4 DUP9 PUSH2 0x214B JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x104E DUP3 DUP10 PUSH2 0x214B JUMP JUMPDEST MSTORE ADD PUSH2 0x100B JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0x327 JUMPI PUSH1 0x20 DUP2 PUSH2 0x10E8 PUSH32 0xBF5AC0FC89BBF8819BE79F280146B65EA2AF2A9705CD9CFE0C9D93F6E87F307D SWAP4 PUSH2 0x288A JUMP JUMPDEST PUSH2 0x10F0 PUSH2 0x242C JUMP JUMPDEST DUP1 PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI PUSH2 0x1144 PUSH1 0x20 SWAP2 PUSH2 0x207F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x116D PUSH2 0x1F12 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1188 DUP3 PUSH2 0x1F9B JUMP JUMPDEST SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP1 DUP4 MSTORE PUSH1 0xFF PUSH1 0x40 SWAP3 DUP4 SHR AND ISZERO ISZERO SWAP4 SWAP1 SWAP3 ADD DUP4 SWAP1 MSTORE DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH0 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x11EC PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0x11F4 PUSH2 0x1F28 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO SWAP3 DUP4 DUP4 SUB PUSH2 0x323 JUMPI PUSH1 0x40 SWAP4 PUSH2 0x1296 SWAP3 PUSH2 0x1213 PUSH2 0x282C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x2 DUP6 MSTORE DUP8 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE DUP7 PUSH0 EQ PUSH2 0x13FC JUMPI DUP3 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB PUSH2 0x13A3 PUSH0 SWAP10 JUMPDEST DUP1 ISZERO PUSH2 0x13EE JUMPI DUP9 DUP9 DUP13 PUSH0 SWAP13 DUP14 SWAP2 PUSH2 0x2523 JUMP JUMPDEST DUP16 MLOAD SWAP1 PUSH2 0x12A2 DUP3 PUSH2 0x1F9B JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP3 MSTORE PUSH1 0x4 PUSH2 0x1312 DUP7 DUP5 ADD SWAP5 DUP7 DUP7 MSTORE DUP12 PUSH0 MSTORE PUSH1 0x3 DUP9 MSTORE PUSH1 0x40 DUP5 SWAP1 PUSH0 KECCAK256 SWAP6 MLOAD AND SWAP5 DUP1 SLOAD SWAP7 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP7 DUP8 PUSH9 0xFF0000000000000000 DUP1 SWAP11 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH2 0x2523 JUMP JUMPDEST SWAP6 PUSH1 0x40 DUP4 SWAP1 MLOAD SWAP8 PUSH2 0x1322 DUP10 PUSH2 0x1F9B JUMP JUMPDEST AND DUP8 MSTORE DUP1 DUP8 ADD SWAP6 DUP7 MSTORE DUP11 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE DUP4 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 DUP3 DUP14 DUP16 PUSH2 0x1389 SWAP1 MLOAD SWAP3 DUP4 SWAP3 DUP4 SWAP1 SWAP3 SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x40 DUP4 ADD SWAP5 DUP4 MSTORE ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 DUP12 MLOAD DUP11 DUP2 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x40 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 AND SWAP2 DUP4 DUP4 PUSH2 0x13BD JUMPI JUMPDEST POP POP POP POP DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE RETURN JUMPDEST PUSH32 0xA90FDFF0801794D86EC8DF4BDD2B7E627D30052D0658E18CB977B38248EE45E8 SWAP2 DUP9 MLOAD SWAP1 DUP2 MSTORE LOG3 DUP5 DUP1 DUP1 DUP4 PUSH2 0x13AF JUMP JUMPDEST DUP9 DUP9 DUP13 PUSH1 0x1 SLOAD SWAP13 DUP14 SWAP2 PUSH2 0x2523 JUMP JUMPDEST DUP3 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB PUSH2 0x13A3 PUSH0 SLOAD SWAP10 PUSH2 0x1284 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1443 PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0x144C DUP2 PUSH2 0x21C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1472 DUP4 PUSH2 0x1F9B JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH0 SLOAD SWAP4 DUP2 PUSH2 0x15C2 JUMPI JUMPDEST POP PUSH2 0x14A3 JUMPI STOP JUMPDEST PUSH2 0x14AC DUP4 PUSH2 0x2523 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x14BB DUP5 PUSH2 0x1F9B JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x153A DUP2 PUSH2 0x2AAA JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x149C JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x15E7 PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0x15F0 DUP2 PUSH2 0x21C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x4 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1616 DUP4 PUSH2 0x1F9B JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH1 0x1 SLOAD SWAP4 DUP2 PUSH2 0x1767 JUMPI JUMPDEST POP PUSH2 0x1648 JUMPI STOP JUMPDEST PUSH2 0x1651 DUP4 PUSH2 0x2523 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1660 DUP5 PUSH2 0x1F9B JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x4 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x16DF DUP2 PUSH2 0x2A78 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1641 JUMP JUMPDEST PUSH2 0x1F3E JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1798 PUSH2 0x1F12 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1188 DUP3 PUSH2 0x1F9B JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x17EC PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0x17F5 DUP2 PUSH2 0x267B JUMP JUMPDEST SWAP1 PUSH2 0x2775 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1814 PUSH2 0x1F12 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1821 DUP2 PUSH2 0x25E6 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x190B JUMPI PUSH2 0x1839 DUP2 PUSH2 0x21C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1880 DUP2 PUSH2 0x2A78 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x47F70DDBC624C299CEF7841AAEA0A86B677C800203E953104E958C9EC9BDAB34 SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0x370DA7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0xDE0AD9B58F16000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x196E PUSH2 0x1F12 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x197B DUP2 PUSH2 0x25E6 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x190B JUMPI PUSH2 0x1993 DUP2 PUSH2 0x21C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x19DA DUP2 PUSH2 0x2AAA JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xB7CF36369623C01ED7B2EAFC4025224E924A2836D5FB49428A0F65417586BF5C SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x1A65 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x1A6E SWAP1 PUSH2 0x1FE4 JUMP JUMPDEST DUP5 PUSH2 0x2FF JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x1144 PUSH1 0x24 CALLDATALOAD PUSH1 0x4 CALLDATALOAD PUSH2 0x25A5 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1AB6 PUSH2 0x1F12 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1AE7 PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0x1AEF PUSH2 0x242C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP4 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0x1EA4 JUMPI JUMPDEST POP AND SWAP2 ADDRESS DUP4 EQ PUSH2 0x1E7C JUMPI AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH2 0x1E50 JUMPI DUP3 PUSH0 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x5C15A0B400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP4 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x40 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0x1E2C JUMPI JUMPDEST POP PUSH2 0x1BF8 SWAP1 PUSH2 0x2523 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1C06 DUP3 PUSH2 0x1F9B JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP4 AND DUP3 MSTORE DUP4 DUP3 ADD SWAP1 ISZERO ISZERO DUP2 MSTORE DUP6 PUSH0 MSTORE PUSH1 0x3 DUP5 MSTORE DUP3 PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND SWAP2 DUP1 SLOAD SWAP2 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP4 DUP5 PUSH9 0xFF0000000000000000 DUP1 SWAP6 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP2 PUSH32 0x7A2B97DC00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP7 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 DUP4 PUSH1 0x24 DUP2 DUP10 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP5 PUSH2 0x1DF8 JUMPI JUMPDEST POP PUSH2 0x1CBC SWAP1 PUSH2 0x2523 JUMP JUMPDEST SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x1CCB DUP8 PUSH2 0x1F9B JUMP JUMPDEST AND DUP6 MSTORE DUP6 DUP6 ADD SWAP4 ISZERO ISZERO DUP5 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x4 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xB8E059B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP4 PUSH1 0x4 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP2 PUSH2 0x1DCA JUMPI JUMPDEST POP PUSH1 0x24 SWAP3 DUP3 SWAP2 DUP6 PUSH0 MSTORE PUSH1 0x5 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0x252AAB500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP8 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP3 PUSH2 0x1D9A JUMPI JUMPDEST POP PUSH1 0x6 SWAP2 SWAP3 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP2 POP DUP1 DUP3 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1DC3 JUMPI JUMPDEST PUSH2 0x1DB1 DUP2 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH1 0x6 SWAP2 MLOAD SWAP2 PUSH2 0x1D89 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1DA7 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1DF1 JUMPI JUMPDEST PUSH2 0x1DE1 DUP2 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD PUSH1 0x24 PUSH2 0x1D37 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1DD7 JUMP JUMPDEST PUSH2 0x1CBC SWAP5 POP PUSH2 0x1E1F SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1E25 JUMPI JUMPDEST PUSH2 0x1E17 DUP2 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2062 JUMP JUMPDEST SWAP4 PUSH2 0x1CB2 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E0D JUMP JUMPDEST PUSH2 0x1BF8 SWAP3 POP PUSH2 0x1E4A SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1E25 JUMPI PUSH2 0x1E17 DUP2 DUP4 PUSH2 0x2014 JUMP JUMPDEST SWAP2 PUSH2 0x1BEE JUMP JUMPDEST DUP3 PUSH32 0xDB771C8000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xB82FD5BF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 SWAP3 POP DUP6 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x1ED7 JUMPI JUMPDEST PUSH2 0x1EBD DUP2 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 SWAP1 DUP6 PUSH2 0x1B56 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1EB3 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1F02 PUSH2 0x1F12 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x6 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x6F05B59D3B20000 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1F87 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1F79 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1FB7 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1FB7 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1FB7 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1FB7 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x323 JUMPI PUSH2 0x207C PUSH1 0x20 DUP4 MLOAD SWAP4 ADD PUSH2 0x2055 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x20DE DUP2 PUSH2 0x1FF8 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1FB7 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x2106 DUP3 PUSH2 0x20E4 JUMP JUMPDEST PUSH2 0x2113 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x2014 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x2141 DUP3 SWAP5 PUSH2 0x20E4 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x215F JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1FB7 JUMPI PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 PUSH0 PUSH1 0x1F PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP4 DUP4 PUSH1 0x44 PUSH1 0x20 SWAP7 DUP5 DUP9 DUP3 ADD SWAP5 PUSH32 0xFA399F2A00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x2238 DUP2 PUSH2 0x1FF8 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP12 PUSH1 0x4 DUP7 ADD MSTORE MLOAD DUP1 SWAP2 DUP2 PUSH1 0x24 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY DUP6 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0x22B8 JUMPI POP POP JUMP JUMPDEST RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x22C7 DUP2 DUP5 PUSH2 0x2014 JUMP JUMPDEST DUP3 ADD SWAP2 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP3 MLOAD SWAP1 PUSH2 0x22FE DUP3 PUSH2 0x218C JUMP JUMPDEST SWAP1 PUSH2 0x230C PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP3 DUP3 MSTORE DUP4 DUP4 DUP7 ADD ADD GT PUSH2 0x323 JUMPI DUP2 DUP4 PUSH0 SWAP6 ADD DUP5 DUP4 ADD MCOPY ADD ADD MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP3 PUSH2 0x2392 JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x23C3 JUMPI JUMPDEST DUP2 PUSH2 0x23AE PUSH1 0x20 SWAP4 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x23A1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x23E6 DUP2 PUSH2 0x20E4 JUMP JUMPDEST SWAP4 PUSH2 0x23F4 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x2014 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x323 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x241D JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x240F JUMP JUMPDEST PUSH2 0x2458 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x207F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x246A PUSH2 0x2327 JUMP JUMPDEST AND SWAP2 PUSH1 0x64 PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD MSTORE CALLER PUSH1 0x24 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP2 PUSH2 0x24E9 JUMPI JUMPDEST POP ISZERO PUSH2 0x24C1 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x251B JUMPI JUMPDEST DUP2 PUSH2 0x2504 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0x2515 SWAP1 PUSH2 0x2055 JUMP JUMPDEST PUSH0 PUSH2 0x24B9 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x24F7 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x2538 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x25D2 PUSH5 0x174876E800 SWAP3 DUP4 SWAP3 PUSH2 0x25CB PUSH8 0xDE0B6B3A7640000 SWAP2 DUP4 DUP4 SUB DUP4 DUP6 LT MUL PUSH2 0x2592 JUMP JUMPDEST DIV SWAP1 PUSH2 0x2568 JUMP JUMPDEST DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH2 0x25F9 DUP3 PUSH2 0x267B JUMP JUMPDEST AND DUP1 ISZERO PUSH2 0x263A JUMPI CALLER SUB PUSH2 0x260A JUMPI POP POP JUMP JUMPDEST PUSH32 0xFBECDBF400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP PUSH32 0x8BCBF35300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x60 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 DUP8 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x276B JUMPI PUSH0 SWAP2 PUSH2 0x26F2 JUMPI JUMPDEST POP ADD MLOAD AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x2763 JUMPI JUMPDEST DUP2 PUSH2 0x270D PUSH1 0x60 SWAP4 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x60 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1FB7 JUMPI PUSH2 0x2759 SWAP2 DUP5 SWAP2 DUP3 MSTORE PUSH2 0x2740 DUP2 PUSH2 0x2667 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x274E PUSH1 0x20 DUP3 ADD PUSH2 0x2667 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE ADD PUSH2 0x2667 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE PUSH0 PUSH2 0x26EB JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2700 JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH2 0x277F DUP3 PUSH2 0x28D2 JUMP JUMPDEST SWAP3 SWAP1 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x2791 JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x27A7 DUP4 DUP7 PUSH2 0x214B JUMP JUMPDEST MLOAD AND DUP2 DUP7 AND DUP1 PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP5 DUP6 PUSH0 KECCAK256 DUP6 PUSH0 MSTORE DUP3 MSTORE DUP6 PUSH0 KECCAK256 SLOAD SWAP6 DUP7 PUSH2 0x27D9 JUMPI JUMPDEST POP POP POP POP POP POP POP ADD PUSH2 0x2783 JUMP JUMPDEST PUSH32 0x938F3A3A03EE425CCC0F8010B0468938CBAFD3750FA43BBDF09C6F75E97E51F9 SWAP4 DUP6 PUSH0 MSTORE DUP4 MSTORE DUP1 PUSH0 KECCAK256 DUP7 PUSH0 MSTORE DUP4 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE PUSH2 0x2818 DUP8 DUP14 DUP9 PUSH2 0x2ADC JUMP JUMPDEST MLOAD SWAP6 DUP7 MSTORE DUP11 AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x27CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x285E JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SUB PUSH2 0x28AA JUMPI JUMP JUMPDEST PUSH32 0x833FB3CE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP4 PUSH2 0x2948 JUMPI JUMPDEST POP POP DUP2 MLOAD SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x295B DUP2 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD PUSH1 0x20 SWAP2 DUP3 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP3 DUP2 PUSH1 0x1F DUP6 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP4 MLOAD PUSH2 0x2993 DUP2 PUSH2 0x20E4 JUMP JUMPDEST SWAP5 PUSH2 0x29A1 PUSH1 0x40 MLOAD SWAP7 DUP8 PUSH2 0x2014 JUMP JUMPDEST DUP2 DUP7 MSTORE DUP5 DUP1 DUP8 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP4 DUP5 GT PUSH2 0x323 JUMPI DUP5 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x29CE JUMPI POP POP POP POP POP SWAP1 PUSH0 DUP1 PUSH2 0x2941 JUMP JUMPDEST DUP2 MLOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 MSTORE SWAP1 DUP5 ADD SWAP1 DUP5 ADD PUSH2 0x29BA JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 DUP5 DUP2 AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP5 DUP6 PUSH2 0x2A1F JUMPI JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 PUSH2 0x2A64 DUP8 PUSH32 0x1C2887FCB98F75E66BB9A36311F2D3D22FB204E6362106F30E9DF7EAF63131B5 SWAP6 PUSH1 0x20 SWAP6 DUP9 PUSH0 MSTORE PUSH1 0x7 DUP8 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP11 PUSH0 MSTORE DUP8 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH2 0x2ADC JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2A17 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH2 0x207C PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x25A5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH2 0x207C PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x25A5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP2 MSTORE SWAP3 PUSH2 0x2B70 SWAP3 PUSH0 SWAP3 DUP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2B39 PUSH1 0x64 DUP9 PUSH2 0x2014 JUMP JUMPDEST AND SWAP5 MLOAD SWAP1 DUP3 DUP7 GAS CALL RETURNDATASIZE ISZERO PUSH2 0x2BD4 JUMPI RETURNDATASIZE SWAP1 PUSH2 0x2B52 DUP3 PUSH2 0x218C JUMP JUMPDEST SWAP2 PUSH2 0x2B60 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x2014 JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMPDEST DUP4 PUSH2 0x2BDC JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x2BB1 JUMPI JUMPDEST POP POP PUSH2 0x2B86 JUMPI POP JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 SWAP3 POP SWAP1 PUSH1 0x20 SWAP2 DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x2BCC SWAP2 ADD PUSH2 0x2055 JUMP JUMPDEST ISZERO PUSH0 DUP1 PUSH2 0x2B7D JUMP JUMPDEST PUSH1 0x60 SWAP1 PUSH2 0x2B6A JUMP JUMPDEST SWAP1 PUSH2 0x2C19 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x2BF1 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x2C5F JUMPI JUMPDEST PUSH2 0x2C2A JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x2C22 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP14 GT RETURN 0x4D 0xA5 0xB2 PREVRANDAO 0x1F ISZERO 0x2C 0xC3 EXTCODESIZE DUP8 0x2B PUSH31 0x59EB999FFA46FA4CBE19FAF11A783A73D264736F6C634300081B0033000000 ","sourceMap":"3120:29542:18:-:0;;;;;;;;;;;;;-1:-1:-1;;3120:29542:18;;;;-1:-1:-1;;;;;3120:29542:18;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3120:29542:18;;;;;;978:4:19;1347:46:13;;998:14:19;;;409::20;;3120:29542:18;;;;;;;;1347:46:13;3120:29542:18;;;;;998:14:19;3120:29542:18;;;;;;;;;;409:14:20;3120:29542:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3120:29542:18;;;;;;-1:-1:-1;3120:29542:18;;;;;-1:-1:-1;3120:29542:18"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":7954,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_19863":{"entryPoint":7976,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":9831,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_uint256_dyn_fromMemory":{"entryPoint":9163,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":8277,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint256t_bool_fromMemory":{"entryPoint":8290,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":8032,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_uint256_bool":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"allocate_and_zero_memory_array_array_uint256_dyn":{"entryPoint":8444,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_uint256_dyn":{"entryPoint":8420,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":8588,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_uint256":{"entryPoint":9576,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256":{"entryPoint":9618,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256_19998":{"entryPoint":9589,"id":null,"parameterSlots":1,"returnSlots":1},"external_fun_MAX_PROTOCOL_SWAP_FEE_PERCENTAGE":{"entryPoint":7998,"id":null,"parameterSlots":0,"returnSlots":0},"finalize_allocation":{"entryPoint":8212,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_19846":{"entryPoint":8091,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_19983":{"entryPoint":8164,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_44456":{"entryPoint":8184,"id":null,"parameterSlots":1,"returnSlots":0},"fun_authenticateCaller":{"entryPoint":9260,"id":2462,"parameterSlots":0,"returnSlots":0},"fun_collectAggregateFees":{"entryPoint":8646,"id":4649,"parameterSlots":1,"returnSlots":0},"fun_computeAggregateFeePercentage":{"entryPoint":9637,"id":5296,"parameterSlots":2,"returnSlots":1},"fun_ensureCallerIsPoolCreator":{"entryPoint":9702,"id":5332,"parameterSlots":1,"returnSlots":0},"fun_ensureOnlyVault":{"entryPoint":10284,"id":6237,"parameterSlots":0,"returnSlots":0},"fun_ensureValidPrecision":{"entryPoint":10378,"id":6082,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":8319,"id":2480,"parameterSlots":1,"returnSlots":1},"fun_getAggregateFeePercentage":{"entryPoint":10872,"id":5266,"parameterSlots":1,"returnSlots":1},"fun_getAggregateFeePercentage_19984":{"entryPoint":10922,"id":5266,"parameterSlots":1,"returnSlots":1},"fun_getAuthorizer":{"entryPoint":8999,"id":6146,"parameterSlots":0,"returnSlots":1},"fun_getPoolCreator":{"entryPoint":9851,"id":5375,"parameterSlots":1,"returnSlots":1},"fun_getPoolTokensAndCount":{"entryPoint":10450,"id":5356,"parameterSlots":1,"returnSlots":2},"fun_safeTransfer":{"entryPoint":10972,"id":6598,"parameterSlots":3,"returnSlots":0},"fun_toUint64":{"entryPoint":9507,"id":7790,"parameterSlots":1,"returnSlots":1},"fun_verifyCallResultFromTarget":{"entryPoint":11228,"id":7050,"parameterSlots":3,"returnSlots":1},"fun_withdrawPoolCreatorFees":{"entryPoint":10101,"id":5985,"parameterSlots":2,"returnSlots":0},"fun_withdrawProtocolFees":{"entryPoint":10726,"id":5881,"parameterSlots":3,"returnSlots":0},"memory_array_index_access_contract_IERC20_dyn":{"entryPoint":8523,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"2420":[{"length":32,"start":8362}],"6097":[{"length":32,"start":4212},{"length":32,"start":9053}],"6199":[{"length":32,"start":595},{"length":32,"start":878},{"length":32,"start":1016},{"length":32,"start":1303},{"length":32,"start":1413},{"length":32,"start":2148},{"length":32,"start":2258},{"length":32,"start":3197},{"length":32,"start":3507},{"length":32,"start":5392},{"length":32,"start":5813},{"length":32,"start":6230},{"length":32,"start":6576},{"length":32,"start":6949},{"length":32,"start":8840},{"length":32,"start":9914},{"length":32,"start":10294},{"length":32,"start":10513}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f3560e01c9081630252aab514611ede575080630874327f14611acd5780630b8e059b14611a955780630ddd60c614611a745780631377c16c146119555780632772d156146117725780632e1d388d146119335780633af52712146117fb57806352f125f0146117d057806355fb76af146117b35780635c15a0b4146117775780635e32e4e81461177257806371447ea8146115cd57806371ecc8fb1461142957806377ff76e7146111d35780637869ee18146111b75780637a2b97dc1461114c578063851c1bb3146110fc5780638a3c5c69146110985780638d928af8146110555780638df44c5414610fcd5780638f4ab9ca14610fac5780639e95f3fd14610f20578063a93df2a414610ebb578063aaabadc514610e90578063abaa335614610ce7578063b53a70b214610c00578063c673bdaf14610bc3578063cf7b287f14610b5d578063f706144514610b28578063fa399f2a14610392578063fbfa77cf1461034f5763fd267f3914610187575f80fd5b34610323576040600319360112610323576101a0611f12565b602435906101ac61242c565b6706f05b59d3b200008211610327576101c48261288a565b6101cd816121c6565b6101d682612523565b916040516101e381611f9b565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600360205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169161027d81612aaa565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e92602092610309575b50604051908152a2005b61031290611fe4565b5f6102ff565b6040513d5f823e3d90fd5b5f80fd5b7f7e6eb7fb000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610323576020600319360112610323576103ab611f12565b6103b361282c565b6040517f8f4ab9ca0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201525f81602481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610318575f905f92610acb575b506001600160a01b0383165f52600360205267ffffffffffffffff60405f20541690600560205260405f2054905f928215159384610ac1575b84610ab1575b610472876128d2565b94905f5b8681106108225789896001600160a01b0382165f52600460205267ffffffffffffffff60405f205416905f92600660205260405f2054925f8415159485610818575b85610806575b6104c7846128d2565b96905f5b8881106104d457005b6104de818961214b565b516104ec575b6001016104cb565b986001600160a01b036104ff8b8461214b565b51169061050c8b8a61214b565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561080257604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201528181606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156107f7579082916107e0575b506107b357505f99816105c8828b61214b565b516040519081527fe505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e260206001600160a01b038c1692a383156107385761060e818a61214b565b5186156107105761061e90612575565b6001670de0b6b3a764000061065f8a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848c878301040190151502612592565b928301040190151502916001600160a01b0389165f52600760205260405f20815f5260205260405f20610693848254612568565b905561069f828b61214b565b519081848103116106e3576001936106d9916001600160a01b038c165f52600860205260405f20905f5260205260405f2092038254612568565b90555b90506104e4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001918561077d5761074a828b61214b565b51906001600160a01b038a165f52600760205260405f20905f5260205261077660405f20918254612568565b90556106dc565b610787828b61214b565b51906001600160a01b038a165f52600860205260405f20905f5260205261077660405f20918254612568565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6107e990611fe4565b6107f457808c6105b5565b80fd5b6040513d84823e3d90fd5b5080fd5b905061081281836125a5565b906104be565b82151595506104b8565b61082c818761214b565b5161083a575b600101610476565b6001600160a01b0361084c828461214b565b511690610859818861214b565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561032357604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201525f81606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561031857610aa2575b50818b7fae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f60206001600160a01b03610937868d61214b565b51936040519485521692a38815610a2757610952818861214b565b5185156107105761096290612575565b6001670de0b6b3a76400006109a3897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848b878301040190151502612592565b928301040190151502916001600160a01b038c165f52600760205260405f20815f5260205260405f206109d7848254612568565b90556109e3828961214b565b519081848103116106e357600193610a1d916001600160a01b038f165f52600860205260405f20905f5260205260405f2092038254612568565b90555b9050610832565b60019184610a6c57610a39828961214b565b51906001600160a01b038d165f52600760205260405f20905f52602052610a6560405f20918254612568565b9055610a20565b610a76828961214b565b51906001600160a01b038d165f52600860205260405f20905f52602052610a6560405f20918254612568565b610aab90611fe4565b8b6108ff565b50610abc83826125a5565b610469565b8115159450610463565b9150503d805f833e610add8183612014565b8101906040818303126103235780519167ffffffffffffffff928381116103235781610b0a9184016123cb565b92602083015190811161032357610b2192016123cb565b908361042a565b3461032357604060031936011261032357610b5b610b44611f12565b610b4c611f28565b90610b56816125e6565b612775565b005b3461032357604060031936011261032357610b76611f12565b610b7e611f28565b90610b8761242c565b610b90816128d2565b915f5b838110610b9c57005b80610bbd6001600160a01b03610bb46001948761214b565b511687856129e6565b01610b93565b34610323576020600319360112610323576001600160a01b03610be4611f12565b165f526002602052602060ff60405f2054166040519015158152f35b3461032357606060031936011261032357610c19611f12565b610c21611f28565b604435906001600160a01b039283831680840361032357604090610c4361242c565b60448251809781937fc9c1661b000000000000000000000000000000000000000000000000000000008352818716600484015260248301527f0000000000000000000000000000000000000000000000000000000000000000165afa801561031857610cb4575b610b5b93506129e6565b6040843d604011610cdf575b81610ccd60409383612014565b8101031261032357610b5b9350610caa565b3d9150610cc0565b3461032357604060031936011261032357610d00611f12565b60243590610d0c61242c565b6706f05b59d3b200008211610e6857610d248261288a565b610d2d816121c6565b610d3682612523565b91604051610d4381611f9b565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600460205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f00000000000000000000000000000000000000000000000000000000000000001691610ddd81612a78565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd926020926103095750604051908152a2005b7fa7849e8e000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576020610eaa612327565b6001600160a01b0360405191168152f35b34610323576020600319360112610323576004356706f05b59d3b200008111610e6857602081610f0b7f48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f69361288a565b610f1361242c565b80600155604051908152a1005b346103235760208060031936011261032357610f3a611f12565b90610f44826128d2565b90610f4e826120fc565b925f946001600160a01b03809116955b848110610f775760405180610f738882611f60565b0390f35b600190875f526008845260405f2083610f90838861214b565b51165f52845260405f2054610fa5828961214b565b5201610f5e565b3461032357602060031936011261032357610b5b610fc8611f12565b6121c6565b346103235760208060031936011261032357610fe7611f12565b90610ff1826128d2565b90610ffb826120fc565b925f946001600160a01b03809116955b8481106110205760405180610f738882611f60565b600190875f526007845260405f2083611039838861214b565b51165f52845260405f205461104e828961214b565b520161100b565b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610323576020600319360112610323576004356706f05b59d3b200008111610327576020816110e87fbf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d9361288a565b6110f061242c565b805f55604051908152a1005b34610323576020600319360112610323576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036103235761114460209161207f565b604051908152f35b34610323576020600319360112610323576001600160a01b0361116d611f12565b165f526004602052602060405f206040519061118882611f9b565b5467ffffffffffffffff811680835260ff604092831c1615159390920183905280519182526020820192909252f35b34610323575f6003193601126103235760205f54604051908152f35b34610323576060600319360112610323576111ec611f12565b6111f4611f28565b906044359081151592838303610323576040936112969261121361282c565b6001600160a01b0380911690815f5260209360028552875f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055865f146113fc57827fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb6113a35f995b80156113ee5788888c5f9c8d91612523565b8f51906112a282611f9b565b67ffffffffffffffff80911682526004611312868401948686528b5f5260038852604084905f209551169480549651151560401b967fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000968768ff0000000000000000809a16921617179055612523565b9560408390519761132289611f9b565b1687528087019586528a5f525260405f209451169184549351151560401b16921617179055837fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a78564828d8f611389905192839283909291602090604083019483521515910152565b0390a28b518a815290151560208201529081906040820190565b0390a2169183836113bd575b505050508351928352820152f35b7fa90fdff0801794d86ec8df4bdd2b7e627d30052d0658e18cb977b38248ee45e8918851908152a3848080836113af565b88888c6001549c8d91612523565b827fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb6113a35f5499611284565b346103235760208060031936011261032357611443611f12565b61144c816121c6565b6001600160a01b039182821692835f526003825260405f20906040519161147283611f9b565b549167ffffffffffffffff9060ff8285169485835260401c1615908582159101525f5493816115c2575b506114a357005b6114ac83612523565b9080604051926114bb84611f9b565b168252848201905f8252875f526003865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169261153a81612aaa565b843b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e936103095750604051908152a2005b90508314158761149c565b3461032357602080600319360112610323576115e7611f12565b6115f0816121c6565b6001600160a01b039182821692835f526004825260405f20906040519161161683611f9b565b549167ffffffffffffffff9060ff8285169485835260401c1615908582159101526001549381611767575b5061164857005b61165183612523565b90806040519261166084611f9b565b168252848201905f8252875f526004865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f000000000000000000000000000000000000000000000000000000000000000016926116df81612a78565b843b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd936103095750604051908152a2005b905083141587611641565b611f3e565b34610323576020600319360112610323576001600160a01b03611798611f12565b165f526003602052602060405f206040519061118882611f9b565b34610323575f600319360112610323576020600154604051908152f35b3461032357602060031936011261032357610b5b6117ec611f12565b6117f58161267b565b90612775565b3461032357604060031936011261032357611814611f12565b60243590611821816125e6565b670de0ad9b58f16000821161190b57611839816121c6565b6001600160a01b039182821692835f5260066020528160405f20557f0000000000000000000000000000000000000000000000000000000000000000169161188081612a78565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34926020926103095750604051908152a2005b7f0370da74000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576020604051670de0ad9b58f160008152f35b346103235760406003193601126103235761196e611f12565b6024359061197b816125e6565b670de0ad9b58f16000821161190b57611993816121c6565b6001600160a01b039182821692835f5260056020528160405f20557f000000000000000000000000000000000000000000000000000000000000000016916119da81612aaa565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577fb7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c92602092611a655750604051908152a2005b611a6e90611fe4565b846102ff565b346103235760406003193601126103235760206111446024356004356125a5565b34610323576020600319360112610323576001600160a01b03611ab6611f12565b165f526005602052602060405f2054604051908152f35b346103235760208060031936011261032357611ae7611f12565b611aef61242c565b6001600160a01b036040517f85f2dbd40000000000000000000000000000000000000000000000000000000081528381600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156103185782915f91611ea4575b501691308314611e7c571691825f526002815260ff60405f205416611e5057825f526002815260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556040517f5c15a0b4000000000000000000000000000000000000000000000000000000008152836004820152604081602481865afa908115610318575f905f92611e2c575b50611bf890612523565b9060405190611c0682611f9b565b67ffffffffffffffff80931682528382019015158152855f52600384528260405f209251169180549151151560401b917fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000938468ff0000000000000000809516921617179055604051917f7a2b97dc000000000000000000000000000000000000000000000000000000008352866004840152604083602481895afa928315610318575f905f94611df8575b50611cbc90612523565b938060405195611ccb87611f9b565b1685528585019315158452875f526004865260405f209451169184549351151560401b169216171790556040517f0b8e059b0000000000000000000000000000000000000000000000000000000081528360048201528181602481865afa908115610318575f91611dca575b506024928291855f526005835260405f2055604051938480927f0252aab50000000000000000000000000000000000000000000000000000000082528760048301525afa918215610318575f92611d9a575b50600691925f525260405f20555f80f35b91508082813d8311611dc3575b611db18183612014565b81010312610323576006915191611d89565b503d611da7565b90508181813d8311611df1575b611de18183612014565b8101031261032357516024611d37565b503d611dd7565b611cbc9450611e1f915060403d604011611e25575b611e178183612014565b810190612062565b93611cb2565b503d611e0d565b611bf89250611e4a915060403d604011611e2557611e178183612014565b91611bee565b827fdb771c80000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fb82fd5bf000000000000000000000000000000000000000000000000000000005f5260045ffd5b809250858092503d8311611ed7575b611ebd8183612014565b810103126103235751818116810361032357819085611b56565b503d611eb3565b34610323576020600319360112610323576020906001600160a01b03611f02611f12565b165f526006825260405f20548152f35b600435906001600160a01b038216820361032357565b602435906001600160a01b038216820361032357565b34610323575f6003193601126103235760206040516706f05b59d3b200008152f35b60209060206040818301928281528551809452019301915f5b828110611f87575050505090565b835185529381019392810192600101611f79565b6040810190811067ffffffffffffffff821117611fb757604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff8111611fb757604052565b6060810190811067ffffffffffffffff821117611fb757604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117611fb757604052565b5190811515820361032357565b91908260409103126103235761207c602083519301612055565b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526120de81611ff8565b51902090565b67ffffffffffffffff8111611fb75760051b60200190565b90612106826120e4565b6121136040519182612014565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061214182946120e4565b0190602036910137565b805182101561215f5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b67ffffffffffffffff8111611fb757601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0905f601f6001600160a01b036040519383604460209684888201947ffa399f2a0000000000000000000000000000000000000000000000000000000086521660248201526024815261223881611ff8565b604051988996879586937f48c894910000000000000000000000000000000000000000000000000000000085528b60048601525180918160248701528686015e85858286010152011681010301927f0000000000000000000000000000000000000000000000000000000000000000165af18015610318576122b8575050565b3d805f843e6122c78184612014565b82019181818403126103235780519067ffffffffffffffff821161032357019180601f84011215610323578251906122fe8261218c565b9061230c6040519283612014565b8282528383860101116103235781835f95018483015e010152565b6040517faaabadc50000000000000000000000000000000000000000000000000000000081526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa918215610318575f9261239257505090565b9091506020813d6020116123c3575b816123ae60209383612014565b81010312610323575190811681036103235790565b3d91506123a1565b9080601f83011215610323578151906020916123e6816120e4565b936123f46040519586612014565b81855260208086019260051b82010192831161032357602001905b82821061241d575050505090565b8151815290830190830161240f565b6124587fffffffff000000000000000000000000000000000000000000000000000000005f351661207f565b60206001600160a01b0361246a612327565b16916064604051809481937f9be2a88400000000000000000000000000000000000000000000000000000000835260048301523360248301523060448301525afa908115610318575f916124e9575b50156124c157565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90506020813d60201161251b575b8161250460209383612014565b810103126103235761251590612055565b5f6124b9565b3d91506124f7565b67ffffffffffffffff90818111612538571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b919082018092116106e357565b90670de0b6b3a7640000918281029281840414901517156106e357565b818102929181159184041417156106e357565b906125d264174876e8009283926125cb670de0b6b3a76400009183830383851002612592565b0490612568565b048181029181830414901517156106e35790565b6001600160a01b0390816125f98261267b565b16801561263a57330361260a575050565b7ffbecdbf4000000000000000000000000000000000000000000000000000000005f52336004521660245260445ffd5b507f8bcbf353000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b51906001600160a01b038216820361032357565b604080517fe9ddeb260000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526060816024817f000000000000000000000000000000000000000000000000000000000000000087165afa90811561276b575f916126f2575b5001511690565b90506060813d606011612763575b8161270d60609383612014565b81010312610323578151906060820182811067ffffffffffffffff821117611fb757612759918491825261274081612667565b845261274e60208201612667565b602085015201612667565b828201525f6126eb565b3d9150612700565b82513d5f823e3d90fd5b9061277f826128d2565b92905f5b848110612791575050505050565b6001906001600160a01b03806127a7838661214b565b5116818616805f5260086020818152604094855f20855f528252855f205495866127d9575b5050505050505001612783565b7f938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f993855f528352805f20865f5283525f81812055612818878d88612adc565b519586528a1694a45f8080808080806127cc565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361285e57565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b64174876e8008082048181029181830414901517156106e357036128aa57565b7f833fb3ce000000000000000000000000000000000000000000000000000000005f5260045ffd5b906001600160a01b0380604051937fca4f28030000000000000000000000000000000000000000000000000000000085521660048401525f83602481847f0000000000000000000000000000000000000000000000000000000000000000165afa928315610318575f93612948575b5050815190565b909192503d805f833e61295b8183612014565b810160209182818303126103235780519067ffffffffffffffff821161032357019281601f85011215610323578351612993816120e4565b946129a16040519687612014565b818652848087019260051b820101938411610323578401905b8382106129ce575050505050905f80612941565b815183811681036103235781529084019084016129ba565b91906001600160a01b0380931690815f52600760205260405f209284811693845f5260205260405f20549485612a1f575b505050505050565b82612a64877f1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b595602095885f526007875260405f208a5f5287525f6040812055612adc565b6040519687521694a45f8080808080612a17565b6001600160a01b03165f52600460205261207c67ffffffffffffffff60405f205416600660205260405f2054906125a5565b6001600160a01b03165f52600360205261207c67ffffffffffffffff60405f205416600560205260405f2054906125a5565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082019081526001600160a01b03938416602483015260448083019590955293815292612b70925f9283929190612b39606488612014565b1694519082865af13d15612bd4573d90612b528261218c565b91612b606040519384612014565b82523d5f602084013e5b83612bdc565b8051908115159182612bb1575b5050612b865750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8192509060209181010312610323576020612bcc9101612055565b155f80612b7d565b606090612b6a565b90612c195750805115612bf157805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580612c5f575b612c2a575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15612c2256fea26469706673582212209d11f34da5b2441f152cc33b872b7e59eb999ffa46fa4cbe19faf11a783a73d264736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x252AAB5 EQ PUSH2 0x1EDE JUMPI POP DUP1 PUSH4 0x874327F EQ PUSH2 0x1ACD JUMPI DUP1 PUSH4 0xB8E059B EQ PUSH2 0x1A95 JUMPI DUP1 PUSH4 0xDDD60C6 EQ PUSH2 0x1A74 JUMPI DUP1 PUSH4 0x1377C16C EQ PUSH2 0x1955 JUMPI DUP1 PUSH4 0x2772D156 EQ PUSH2 0x1772 JUMPI DUP1 PUSH4 0x2E1D388D EQ PUSH2 0x1933 JUMPI DUP1 PUSH4 0x3AF52712 EQ PUSH2 0x17FB JUMPI DUP1 PUSH4 0x52F125F0 EQ PUSH2 0x17D0 JUMPI DUP1 PUSH4 0x55FB76AF EQ PUSH2 0x17B3 JUMPI DUP1 PUSH4 0x5C15A0B4 EQ PUSH2 0x1777 JUMPI DUP1 PUSH4 0x5E32E4E8 EQ PUSH2 0x1772 JUMPI DUP1 PUSH4 0x71447EA8 EQ PUSH2 0x15CD JUMPI DUP1 PUSH4 0x71ECC8FB EQ PUSH2 0x1429 JUMPI DUP1 PUSH4 0x77FF76E7 EQ PUSH2 0x11D3 JUMPI DUP1 PUSH4 0x7869EE18 EQ PUSH2 0x11B7 JUMPI DUP1 PUSH4 0x7A2B97DC EQ PUSH2 0x114C JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x10FC JUMPI DUP1 PUSH4 0x8A3C5C69 EQ PUSH2 0x1098 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x1055 JUMPI DUP1 PUSH4 0x8DF44C54 EQ PUSH2 0xFCD JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0xFAC JUMPI DUP1 PUSH4 0x9E95F3FD EQ PUSH2 0xF20 JUMPI DUP1 PUSH4 0xA93DF2A4 EQ PUSH2 0xEBB JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xE90 JUMPI DUP1 PUSH4 0xABAA3356 EQ PUSH2 0xCE7 JUMPI DUP1 PUSH4 0xB53A70B2 EQ PUSH2 0xC00 JUMPI DUP1 PUSH4 0xC673BDAF EQ PUSH2 0xBC3 JUMPI DUP1 PUSH4 0xCF7B287F EQ PUSH2 0xB5D JUMPI DUP1 PUSH4 0xF7061445 EQ PUSH2 0xB28 JUMPI DUP1 PUSH4 0xFA399F2A EQ PUSH2 0x392 JUMPI DUP1 PUSH4 0xFBFA77CF EQ PUSH2 0x34F JUMPI PUSH4 0xFD267F39 EQ PUSH2 0x187 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A0 PUSH2 0x1F12 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1AC PUSH2 0x242C JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0x327 JUMPI PUSH2 0x1C4 DUP3 PUSH2 0x288A JUMP JUMPDEST PUSH2 0x1CD DUP2 PUSH2 0x21C6 JUMP JUMPDEST PUSH2 0x1D6 DUP3 PUSH2 0x2523 JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0x1E3 DUP2 PUSH2 0x1F9B JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x27D DUP2 PUSH2 0x2AAA JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x312 SWAP1 PUSH2 0x1FE4 JUMP JUMPDEST PUSH0 PUSH2 0x2FF JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x3AB PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0x3B3 PUSH2 0x282C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0xACB JUMPI JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH0 SWAP3 DUP3 ISZERO ISZERO SWAP4 DUP5 PUSH2 0xAC1 JUMPI JUMPDEST DUP5 PUSH2 0xAB1 JUMPI JUMPDEST PUSH2 0x472 DUP8 PUSH2 0x28D2 JUMP JUMPDEST SWAP5 SWAP1 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x822 JUMPI DUP10 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH0 SWAP3 PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 PUSH0 DUP5 ISZERO ISZERO SWAP5 DUP6 PUSH2 0x818 JUMPI JUMPDEST DUP6 PUSH2 0x806 JUMPI JUMPDEST PUSH2 0x4C7 DUP5 PUSH2 0x28D2 JUMP JUMPDEST SWAP7 SWAP1 PUSH0 JUMPDEST DUP9 DUP2 LT PUSH2 0x4D4 JUMPI STOP JUMPDEST PUSH2 0x4DE DUP2 DUP10 PUSH2 0x214B JUMP JUMPDEST MLOAD PUSH2 0x4EC JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x4CB JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x4FF DUP12 DUP5 PUSH2 0x214B JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x50C DUP12 DUP11 PUSH2 0x214B JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x7F7 JUMPI SWAP1 DUP3 SWAP2 PUSH2 0x7E0 JUMPI JUMPDEST POP PUSH2 0x7B3 JUMPI POP PUSH0 SWAP10 DUP2 PUSH2 0x5C8 DUP3 DUP12 PUSH2 0x214B JUMP JUMPDEST MLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xE505E41B0D437B47350A9990142CCF38ACB11FFA0E5AF8F973B9E172F3D5D5E2 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP3 LOG3 DUP4 ISZERO PUSH2 0x738 JUMPI PUSH2 0x60E DUP2 DUP11 PUSH2 0x214B JUMP JUMPDEST MLOAD DUP7 ISZERO PUSH2 0x710 JUMPI PUSH2 0x61E SWAP1 PUSH2 0x2575 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x65F DUP11 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP13 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x2592 JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x693 DUP5 DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x69F DUP3 DUP12 PUSH2 0x214B JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0x6D9 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x4E4 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 SWAP2 DUP6 PUSH2 0x77D JUMPI PUSH2 0x74A DUP3 DUP12 PUSH2 0x214B JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x6DC JUMP JUMPDEST PUSH2 0x787 DUP3 DUP12 PUSH2 0x214B JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST DUP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x24 SWAP3 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH2 0x7E9 SWAP1 PUSH2 0x1FE4 JUMP JUMPDEST PUSH2 0x7F4 JUMPI DUP1 DUP13 PUSH2 0x5B5 JUMP JUMPDEST DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST SWAP1 POP PUSH2 0x812 DUP2 DUP4 PUSH2 0x25A5 JUMP JUMPDEST SWAP1 PUSH2 0x4BE JUMP JUMPDEST DUP3 ISZERO ISZERO SWAP6 POP PUSH2 0x4B8 JUMP JUMPDEST PUSH2 0x82C DUP2 DUP8 PUSH2 0x214B JUMP JUMPDEST MLOAD PUSH2 0x83A JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x476 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x84C DUP3 DUP5 PUSH2 0x214B JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x859 DUP2 DUP9 PUSH2 0x214B JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xAA2 JUMPI JUMPDEST POP DUP2 DUP12 PUSH32 0xAE7EBAD9FC3D1D17965F063FA520D393595E2EF6C8E22AE8413B60900444E19F PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x937 DUP7 DUP14 PUSH2 0x214B JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 DUP9 ISZERO PUSH2 0xA27 JUMPI PUSH2 0x952 DUP2 DUP9 PUSH2 0x214B JUMP JUMPDEST MLOAD DUP6 ISZERO PUSH2 0x710 JUMPI PUSH2 0x962 SWAP1 PUSH2 0x2575 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x9A3 DUP10 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP12 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x2592 JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x9D7 DUP5 DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x9E3 DUP3 DUP10 PUSH2 0x214B JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0xA1D SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x832 JUMP JUMPDEST PUSH1 0x1 SWAP2 DUP5 PUSH2 0xA6C JUMPI PUSH2 0xA39 DUP3 DUP10 PUSH2 0x214B JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0xA20 JUMP JUMPDEST PUSH2 0xA76 DUP3 DUP10 PUSH2 0x214B JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2568 JUMP JUMPDEST PUSH2 0xAAB SWAP1 PUSH2 0x1FE4 JUMP JUMPDEST DUP12 PUSH2 0x8FF JUMP JUMPDEST POP PUSH2 0xABC DUP4 DUP3 PUSH2 0x25A5 JUMP JUMPDEST PUSH2 0x469 JUMP JUMPDEST DUP2 ISZERO ISZERO SWAP5 POP PUSH2 0x463 JUMP JUMPDEST SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xADD DUP2 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x40 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x323 JUMPI DUP2 PUSH2 0xB0A SWAP2 DUP5 ADD PUSH2 0x23CB JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x323 JUMPI PUSH2 0xB21 SWAP3 ADD PUSH2 0x23CB JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x42A JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0xB44 PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0xB4C PUSH2 0x1F28 JUMP JUMPDEST SWAP1 PUSH2 0xB56 DUP2 PUSH2 0x25E6 JUMP JUMPDEST PUSH2 0x2775 JUMP JUMPDEST STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB76 PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0xB7E PUSH2 0x1F28 JUMP JUMPDEST SWAP1 PUSH2 0xB87 PUSH2 0x242C JUMP JUMPDEST PUSH2 0xB90 DUP2 PUSH2 0x28D2 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0xB9C JUMPI STOP JUMPDEST DUP1 PUSH2 0xBBD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBB4 PUSH1 0x1 SWAP5 DUP8 PUSH2 0x214B JUMP JUMPDEST MLOAD AND DUP8 DUP6 PUSH2 0x29E6 JUMP JUMPDEST ADD PUSH2 0xB93 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBE4 PUSH2 0x1F12 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xC19 PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0xC21 PUSH2 0x1F28 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP4 AND DUP1 DUP5 SUB PUSH2 0x323 JUMPI PUSH1 0x40 SWAP1 PUSH2 0xC43 PUSH2 0x242C JUMP JUMPDEST PUSH1 0x44 DUP3 MLOAD DUP1 SWAP8 DUP2 SWAP4 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP2 DUP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xCB4 JUMPI JUMPDEST PUSH2 0xB5B SWAP4 POP PUSH2 0x29E6 JUMP JUMPDEST PUSH1 0x40 DUP5 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0xCDF JUMPI JUMPDEST DUP2 PUSH2 0xCCD PUSH1 0x40 SWAP4 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0xB5B SWAP4 POP PUSH2 0xCAA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xCC0 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xD00 PUSH2 0x1F12 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xD0C PUSH2 0x242C JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0xE68 JUMPI PUSH2 0xD24 DUP3 PUSH2 0x288A JUMP JUMPDEST PUSH2 0xD2D DUP2 PUSH2 0x21C6 JUMP JUMPDEST PUSH2 0xD36 DUP3 PUSH2 0x2523 JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0xD43 DUP2 PUSH2 0x1F9B JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0xDDD DUP2 PUSH2 0x2A78 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0xA7849E8E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0xEAA PUSH2 0x2327 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0xE68 JUMPI PUSH1 0x20 DUP2 PUSH2 0xF0B PUSH32 0x48C5C3CCEC54C4E0EA08D83D838FA9BB725EB0B52C591CB00BD6E63BCA8C44F6 SWAP4 PUSH2 0x288A JUMP JUMPDEST PUSH2 0xF13 PUSH2 0x242C JUMP JUMPDEST DUP1 PUSH1 0x1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xF3A PUSH2 0x1F12 JUMP JUMPDEST SWAP1 PUSH2 0xF44 DUP3 PUSH2 0x28D2 JUMP JUMPDEST SWAP1 PUSH2 0xF4E DUP3 PUSH2 0x20FC JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0xF77 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xF73 DUP9 DUP3 PUSH2 0x1F60 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x8 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0xF90 DUP4 DUP9 PUSH2 0x214B JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0xFA5 DUP3 DUP10 PUSH2 0x214B JUMP JUMPDEST MSTORE ADD PUSH2 0xF5E JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0xFC8 PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0x21C6 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xFE7 PUSH2 0x1F12 JUMP JUMPDEST SWAP1 PUSH2 0xFF1 DUP3 PUSH2 0x28D2 JUMP JUMPDEST SWAP1 PUSH2 0xFFB DUP3 PUSH2 0x20FC JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0x1020 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xF73 DUP9 DUP3 PUSH2 0x1F60 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x7 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x1039 DUP4 DUP9 PUSH2 0x214B JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x104E DUP3 DUP10 PUSH2 0x214B JUMP JUMPDEST MSTORE ADD PUSH2 0x100B JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0x327 JUMPI PUSH1 0x20 DUP2 PUSH2 0x10E8 PUSH32 0xBF5AC0FC89BBF8819BE79F280146B65EA2AF2A9705CD9CFE0C9D93F6E87F307D SWAP4 PUSH2 0x288A JUMP JUMPDEST PUSH2 0x10F0 PUSH2 0x242C JUMP JUMPDEST DUP1 PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI PUSH2 0x1144 PUSH1 0x20 SWAP2 PUSH2 0x207F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x116D PUSH2 0x1F12 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1188 DUP3 PUSH2 0x1F9B JUMP JUMPDEST SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP1 DUP4 MSTORE PUSH1 0xFF PUSH1 0x40 SWAP3 DUP4 SHR AND ISZERO ISZERO SWAP4 SWAP1 SWAP3 ADD DUP4 SWAP1 MSTORE DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH0 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x11EC PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0x11F4 PUSH2 0x1F28 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO SWAP3 DUP4 DUP4 SUB PUSH2 0x323 JUMPI PUSH1 0x40 SWAP4 PUSH2 0x1296 SWAP3 PUSH2 0x1213 PUSH2 0x282C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x2 DUP6 MSTORE DUP8 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE DUP7 PUSH0 EQ PUSH2 0x13FC JUMPI DUP3 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB PUSH2 0x13A3 PUSH0 SWAP10 JUMPDEST DUP1 ISZERO PUSH2 0x13EE JUMPI DUP9 DUP9 DUP13 PUSH0 SWAP13 DUP14 SWAP2 PUSH2 0x2523 JUMP JUMPDEST DUP16 MLOAD SWAP1 PUSH2 0x12A2 DUP3 PUSH2 0x1F9B JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP3 MSTORE PUSH1 0x4 PUSH2 0x1312 DUP7 DUP5 ADD SWAP5 DUP7 DUP7 MSTORE DUP12 PUSH0 MSTORE PUSH1 0x3 DUP9 MSTORE PUSH1 0x40 DUP5 SWAP1 PUSH0 KECCAK256 SWAP6 MLOAD AND SWAP5 DUP1 SLOAD SWAP7 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP7 DUP8 PUSH9 0xFF0000000000000000 DUP1 SWAP11 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH2 0x2523 JUMP JUMPDEST SWAP6 PUSH1 0x40 DUP4 SWAP1 MLOAD SWAP8 PUSH2 0x1322 DUP10 PUSH2 0x1F9B JUMP JUMPDEST AND DUP8 MSTORE DUP1 DUP8 ADD SWAP6 DUP7 MSTORE DUP11 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE DUP4 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 DUP3 DUP14 DUP16 PUSH2 0x1389 SWAP1 MLOAD SWAP3 DUP4 SWAP3 DUP4 SWAP1 SWAP3 SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x40 DUP4 ADD SWAP5 DUP4 MSTORE ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 DUP12 MLOAD DUP11 DUP2 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x40 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 AND SWAP2 DUP4 DUP4 PUSH2 0x13BD JUMPI JUMPDEST POP POP POP POP DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE RETURN JUMPDEST PUSH32 0xA90FDFF0801794D86EC8DF4BDD2B7E627D30052D0658E18CB977B38248EE45E8 SWAP2 DUP9 MLOAD SWAP1 DUP2 MSTORE LOG3 DUP5 DUP1 DUP1 DUP4 PUSH2 0x13AF JUMP JUMPDEST DUP9 DUP9 DUP13 PUSH1 0x1 SLOAD SWAP13 DUP14 SWAP2 PUSH2 0x2523 JUMP JUMPDEST DUP3 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB PUSH2 0x13A3 PUSH0 SLOAD SWAP10 PUSH2 0x1284 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1443 PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0x144C DUP2 PUSH2 0x21C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1472 DUP4 PUSH2 0x1F9B JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH0 SLOAD SWAP4 DUP2 PUSH2 0x15C2 JUMPI JUMPDEST POP PUSH2 0x14A3 JUMPI STOP JUMPDEST PUSH2 0x14AC DUP4 PUSH2 0x2523 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x14BB DUP5 PUSH2 0x1F9B JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x153A DUP2 PUSH2 0x2AAA JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x149C JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x15E7 PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0x15F0 DUP2 PUSH2 0x21C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x4 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1616 DUP4 PUSH2 0x1F9B JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH1 0x1 SLOAD SWAP4 DUP2 PUSH2 0x1767 JUMPI JUMPDEST POP PUSH2 0x1648 JUMPI STOP JUMPDEST PUSH2 0x1651 DUP4 PUSH2 0x2523 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1660 DUP5 PUSH2 0x1F9B JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x4 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x16DF DUP2 PUSH2 0x2A78 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1641 JUMP JUMPDEST PUSH2 0x1F3E JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1798 PUSH2 0x1F12 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1188 DUP3 PUSH2 0x1F9B JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x17EC PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0x17F5 DUP2 PUSH2 0x267B JUMP JUMPDEST SWAP1 PUSH2 0x2775 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1814 PUSH2 0x1F12 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1821 DUP2 PUSH2 0x25E6 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x190B JUMPI PUSH2 0x1839 DUP2 PUSH2 0x21C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1880 DUP2 PUSH2 0x2A78 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x47F70DDBC624C299CEF7841AAEA0A86B677C800203E953104E958C9EC9BDAB34 SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0x370DA7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0xDE0AD9B58F16000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x196E PUSH2 0x1F12 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x197B DUP2 PUSH2 0x25E6 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x190B JUMPI PUSH2 0x1993 DUP2 PUSH2 0x21C6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x19DA DUP2 PUSH2 0x2AAA JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xB7CF36369623C01ED7B2EAFC4025224E924A2836D5FB49428A0F65417586BF5C SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x1A65 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x1A6E SWAP1 PUSH2 0x1FE4 JUMP JUMPDEST DUP5 PUSH2 0x2FF JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x1144 PUSH1 0x24 CALLDATALOAD PUSH1 0x4 CALLDATALOAD PUSH2 0x25A5 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1AB6 PUSH2 0x1F12 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1AE7 PUSH2 0x1F12 JUMP JUMPDEST PUSH2 0x1AEF PUSH2 0x242C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP4 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0x1EA4 JUMPI JUMPDEST POP AND SWAP2 ADDRESS DUP4 EQ PUSH2 0x1E7C JUMPI AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH2 0x1E50 JUMPI DUP3 PUSH0 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x5C15A0B400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP4 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x40 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0x1E2C JUMPI JUMPDEST POP PUSH2 0x1BF8 SWAP1 PUSH2 0x2523 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1C06 DUP3 PUSH2 0x1F9B JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP4 AND DUP3 MSTORE DUP4 DUP3 ADD SWAP1 ISZERO ISZERO DUP2 MSTORE DUP6 PUSH0 MSTORE PUSH1 0x3 DUP5 MSTORE DUP3 PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND SWAP2 DUP1 SLOAD SWAP2 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP4 DUP5 PUSH9 0xFF0000000000000000 DUP1 SWAP6 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP2 PUSH32 0x7A2B97DC00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP7 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 DUP4 PUSH1 0x24 DUP2 DUP10 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP5 PUSH2 0x1DF8 JUMPI JUMPDEST POP PUSH2 0x1CBC SWAP1 PUSH2 0x2523 JUMP JUMPDEST SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x1CCB DUP8 PUSH2 0x1F9B JUMP JUMPDEST AND DUP6 MSTORE DUP6 DUP6 ADD SWAP4 ISZERO ISZERO DUP5 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x4 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xB8E059B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP4 PUSH1 0x4 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP2 PUSH2 0x1DCA JUMPI JUMPDEST POP PUSH1 0x24 SWAP3 DUP3 SWAP2 DUP6 PUSH0 MSTORE PUSH1 0x5 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0x252AAB500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP8 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP3 PUSH2 0x1D9A JUMPI JUMPDEST POP PUSH1 0x6 SWAP2 SWAP3 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP2 POP DUP1 DUP3 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1DC3 JUMPI JUMPDEST PUSH2 0x1DB1 DUP2 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH1 0x6 SWAP2 MLOAD SWAP2 PUSH2 0x1D89 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1DA7 JUMP JUMPDEST SWAP1 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1DF1 JUMPI JUMPDEST PUSH2 0x1DE1 DUP2 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD PUSH1 0x24 PUSH2 0x1D37 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1DD7 JUMP JUMPDEST PUSH2 0x1CBC SWAP5 POP PUSH2 0x1E1F SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1E25 JUMPI JUMPDEST PUSH2 0x1E17 DUP2 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2062 JUMP JUMPDEST SWAP4 PUSH2 0x1CB2 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E0D JUMP JUMPDEST PUSH2 0x1BF8 SWAP3 POP PUSH2 0x1E4A SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1E25 JUMPI PUSH2 0x1E17 DUP2 DUP4 PUSH2 0x2014 JUMP JUMPDEST SWAP2 PUSH2 0x1BEE JUMP JUMPDEST DUP3 PUSH32 0xDB771C8000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xB82FD5BF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 SWAP3 POP DUP6 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x1ED7 JUMPI JUMPDEST PUSH2 0x1EBD DUP2 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 SWAP1 DUP6 PUSH2 0x1B56 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1EB3 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1F02 PUSH2 0x1F12 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x6 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x6F05B59D3B20000 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1F87 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1F79 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1FB7 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1FB7 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1FB7 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1FB7 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x323 JUMPI PUSH2 0x207C PUSH1 0x20 DUP4 MLOAD SWAP4 ADD PUSH2 0x2055 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x20DE DUP2 PUSH2 0x1FF8 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1FB7 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x2106 DUP3 PUSH2 0x20E4 JUMP JUMPDEST PUSH2 0x2113 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x2014 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x2141 DUP3 SWAP5 PUSH2 0x20E4 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x215F JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1FB7 JUMPI PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 PUSH0 PUSH1 0x1F PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP4 DUP4 PUSH1 0x44 PUSH1 0x20 SWAP7 DUP5 DUP9 DUP3 ADD SWAP5 PUSH32 0xFA399F2A00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x2238 DUP2 PUSH2 0x1FF8 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP12 PUSH1 0x4 DUP7 ADD MSTORE MLOAD DUP1 SWAP2 DUP2 PUSH1 0x24 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY DUP6 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0x22B8 JUMPI POP POP JUMP JUMPDEST RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x22C7 DUP2 DUP5 PUSH2 0x2014 JUMP JUMPDEST DUP3 ADD SWAP2 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP3 MLOAD SWAP1 PUSH2 0x22FE DUP3 PUSH2 0x218C JUMP JUMPDEST SWAP1 PUSH2 0x230C PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP3 DUP3 MSTORE DUP4 DUP4 DUP7 ADD ADD GT PUSH2 0x323 JUMPI DUP2 DUP4 PUSH0 SWAP6 ADD DUP5 DUP4 ADD MCOPY ADD ADD MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP3 PUSH2 0x2392 JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x23C3 JUMPI JUMPDEST DUP2 PUSH2 0x23AE PUSH1 0x20 SWAP4 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x23A1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x23E6 DUP2 PUSH2 0x20E4 JUMP JUMPDEST SWAP4 PUSH2 0x23F4 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x2014 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x323 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x241D JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x240F JUMP JUMPDEST PUSH2 0x2458 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x207F JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x246A PUSH2 0x2327 JUMP JUMPDEST AND SWAP2 PUSH1 0x64 PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD MSTORE CALLER PUSH1 0x24 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP2 PUSH2 0x24E9 JUMPI JUMPDEST POP ISZERO PUSH2 0x24C1 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x251B JUMPI JUMPDEST DUP2 PUSH2 0x2504 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0x2515 SWAP1 PUSH2 0x2055 JUMP JUMPDEST PUSH0 PUSH2 0x24B9 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x24F7 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x2538 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x25D2 PUSH5 0x174876E800 SWAP3 DUP4 SWAP3 PUSH2 0x25CB PUSH8 0xDE0B6B3A7640000 SWAP2 DUP4 DUP4 SUB DUP4 DUP6 LT MUL PUSH2 0x2592 JUMP JUMPDEST DIV SWAP1 PUSH2 0x2568 JUMP JUMPDEST DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH2 0x25F9 DUP3 PUSH2 0x267B JUMP JUMPDEST AND DUP1 ISZERO PUSH2 0x263A JUMPI CALLER SUB PUSH2 0x260A JUMPI POP POP JUMP JUMPDEST PUSH32 0xFBECDBF400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP PUSH32 0x8BCBF35300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x60 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 DUP8 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x276B JUMPI PUSH0 SWAP2 PUSH2 0x26F2 JUMPI JUMPDEST POP ADD MLOAD AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x2763 JUMPI JUMPDEST DUP2 PUSH2 0x270D PUSH1 0x60 SWAP4 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x60 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1FB7 JUMPI PUSH2 0x2759 SWAP2 DUP5 SWAP2 DUP3 MSTORE PUSH2 0x2740 DUP2 PUSH2 0x2667 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x274E PUSH1 0x20 DUP3 ADD PUSH2 0x2667 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE ADD PUSH2 0x2667 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE PUSH0 PUSH2 0x26EB JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2700 JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH2 0x277F DUP3 PUSH2 0x28D2 JUMP JUMPDEST SWAP3 SWAP1 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x2791 JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x27A7 DUP4 DUP7 PUSH2 0x214B JUMP JUMPDEST MLOAD AND DUP2 DUP7 AND DUP1 PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP5 DUP6 PUSH0 KECCAK256 DUP6 PUSH0 MSTORE DUP3 MSTORE DUP6 PUSH0 KECCAK256 SLOAD SWAP6 DUP7 PUSH2 0x27D9 JUMPI JUMPDEST POP POP POP POP POP POP POP ADD PUSH2 0x2783 JUMP JUMPDEST PUSH32 0x938F3A3A03EE425CCC0F8010B0468938CBAFD3750FA43BBDF09C6F75E97E51F9 SWAP4 DUP6 PUSH0 MSTORE DUP4 MSTORE DUP1 PUSH0 KECCAK256 DUP7 PUSH0 MSTORE DUP4 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE PUSH2 0x2818 DUP8 DUP14 DUP9 PUSH2 0x2ADC JUMP JUMPDEST MLOAD SWAP6 DUP7 MSTORE DUP11 AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x27CC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x285E JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SUB PUSH2 0x28AA JUMPI JUMP JUMPDEST PUSH32 0x833FB3CE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP4 PUSH2 0x2948 JUMPI JUMPDEST POP POP DUP2 MLOAD SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x295B DUP2 DUP4 PUSH2 0x2014 JUMP JUMPDEST DUP2 ADD PUSH1 0x20 SWAP2 DUP3 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP3 DUP2 PUSH1 0x1F DUP6 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP4 MLOAD PUSH2 0x2993 DUP2 PUSH2 0x20E4 JUMP JUMPDEST SWAP5 PUSH2 0x29A1 PUSH1 0x40 MLOAD SWAP7 DUP8 PUSH2 0x2014 JUMP JUMPDEST DUP2 DUP7 MSTORE DUP5 DUP1 DUP8 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP4 DUP5 GT PUSH2 0x323 JUMPI DUP5 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x29CE JUMPI POP POP POP POP POP SWAP1 PUSH0 DUP1 PUSH2 0x2941 JUMP JUMPDEST DUP2 MLOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 MSTORE SWAP1 DUP5 ADD SWAP1 DUP5 ADD PUSH2 0x29BA JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 DUP5 DUP2 AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP5 DUP6 PUSH2 0x2A1F JUMPI JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 PUSH2 0x2A64 DUP8 PUSH32 0x1C2887FCB98F75E66BB9A36311F2D3D22FB204E6362106F30E9DF7EAF63131B5 SWAP6 PUSH1 0x20 SWAP6 DUP9 PUSH0 MSTORE PUSH1 0x7 DUP8 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP11 PUSH0 MSTORE DUP8 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH2 0x2ADC JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2A17 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH2 0x207C PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x25A5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH2 0x207C PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x25A5 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP2 MSTORE SWAP3 PUSH2 0x2B70 SWAP3 PUSH0 SWAP3 DUP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2B39 PUSH1 0x64 DUP9 PUSH2 0x2014 JUMP JUMPDEST AND SWAP5 MLOAD SWAP1 DUP3 DUP7 GAS CALL RETURNDATASIZE ISZERO PUSH2 0x2BD4 JUMPI RETURNDATASIZE SWAP1 PUSH2 0x2B52 DUP3 PUSH2 0x218C JUMP JUMPDEST SWAP2 PUSH2 0x2B60 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x2014 JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMPDEST DUP4 PUSH2 0x2BDC JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x2BB1 JUMPI JUMPDEST POP POP PUSH2 0x2B86 JUMPI POP JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 SWAP3 POP SWAP1 PUSH1 0x20 SWAP2 DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x2BCC SWAP2 ADD PUSH2 0x2055 JUMP JUMPDEST ISZERO PUSH0 DUP1 PUSH2 0x2B7D JUMP JUMPDEST PUSH1 0x60 SWAP1 PUSH2 0x2B6A JUMP JUMPDEST SWAP1 PUSH2 0x2C19 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x2BF1 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x2C5F JUMPI JUMPDEST PUSH2 0x2C2A JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x2C22 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP14 GT RETURN 0x4D 0xA5 0xB2 PREVRANDAO 0x1F ISZERO 0x2C 0xC3 EXTCODESIZE DUP8 0x2B PUSH31 0x59EB999FFA46FA4CBE19FAF11A783A73D264736F6C634300081B0033000000 ","sourceMap":"3120:29542:18:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;:::i;:::-;;;1525:73:13;;;:::i;:::-;4720:5:18;7248:55;;7244:127;;7402:20;;;:::i;:::-;8176:4;;;:::i;:::-;30493:39;;;:::i;:::-;3120:29542;;;;;;:::i;:::-;;;;;;;30450:129;;;3120:29542;25517:4;3120:29542;;-1:-1:-1;;;;;3120:29542:18;;;;;;;;30410:31;30450:129;3120:29542;;;;;;;;;;;;;;;;;;;;;;;;30674:6;3120:29542;30720:54;;;;:::i;:::-;30674:101;;;;;3120:29542;;;30674:101;;-1:-1:-1;;;;;3120:29542:18;;;;;30674:101;;3120:29542;;;;;;-1:-1:-1;;3120:29542:18;;;;;;-1:-1:-1;;30674:101:18;;;;;;;30791:68;30674:101;30450:129;30674:101;;;3120:29542;;;;;;;30791:68;3120:29542;30674:101;;;;:::i;:::-;3120:29542;30674:101;;;3120:29542;;;;;;;;;30674:101;3120:29542;;;7244:127;7326:34;3120:29542;7326:34;3120:29542;;7326:34;3120:29542;;;;;-1:-1:-1;;3120:29542:18;;;;;;;;-1:-1:-1;;;;;8461:6:18;3120:29542;;;;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;:::i;:::-;436:67:20;;:::i;:::-;3120:29542:18;;;9135:33;;-1:-1:-1;;;;;3120:29542:18;;;9135:33;;3120:29542;;9135:6;3120:29542;9135:6;;-1:-1:-1;;;;;9135:6:18;3120:29542;9135:33;;;;;;;3120:29542;;;9135:33;;;3120:29542;;-1:-1:-1;;;;;3120:29542:18;;;;10916:31;3120:29542;;;;;;;;;11126:30;3120:29542;;;;;;11225:30;3120:29542;11289:28;;;;:57;;;;3120:29542;11356:199;;;3120:29542;11615:28;;;:::i;:::-;11658:13;;3120:29542;11673:13;;;;;;10881:20;;-1:-1:-1;;;;;3120:29542:18;;;;;;;;;;;;;11080:134;3120:29542;;11177:31;3120:29542;;;;;;11225:30;3120:29542;11289:28;;;:57;;;;11653:1939;11356:199;;;11653:1939;11615:28;;;:::i;:::-;11658:13;;3120:29542;11673:13;;;;;;3120:29542;11688:3;11711:13;;;;:::i;:::-;3120:29542;11707:1875;;11688:3;3120:29542;;11658:13;;11707:1875;11763:13;-1:-1:-1;;;;;11763:13:18;;;;:::i;:::-;3120:29542;;11831:13;;;;;:::i;:::-;3120:29542;-1:-1:-1;;;;;9135:6:18;3120:29542;11795:50;;;;3120:29542;;11795:50;3120:29542;11795:50;;;3120:29542;11795:50;;3120:29542;11824:4;3120:29542;;;;;;;;9135:6;;3120:29542;9135:6;;-1:-1:-1;;;;;9135:6:18;3120:29542;11795:50;;;;;;;;;;;11707:1875;3120:29542;;;12020:240;3120:29542;12227:13;;;;;;:::i;:::-;3120:29542;;;;;;12188:53;3120:29542;-1:-1:-1;;;;;3120:29542:18;;12188:53;;12278:1290;;;;12884:13;;;;:::i;:::-;3120:29542;2004:6:14;;2000:58;;2153:5;;;:::i;:::-;3120:29542:18;465:4:14;1068:5;2560:120;;;;;;;;;;;;;;1068:5;:::i;:::-;1186:122;;;;;;;;;3120:29542:18;-1:-1:-1;;;;;3120:29542:18;;;;13044:19;3120:29542;;;;;;;;;;;;;13044:51;3120:29542;;;13044:51;:::i;:::-;3120:29542;;13156:13;;;;:::i;:::-;3120:29542;;;;;;;;;;;13117:70;3120:29542;-1:-1:-1;;;;;3120:29542:18;;;;13117:22;3120:29542;;;;;;;;;;;;;;;;;13117:70;:::i;:::-;3120:29542;;12278:1290;11707:1875;;;;3120:29542;;;;;;;;;;2000:58:14;2033:14;3120:29542:18;2033:14:14;3120:29542:18;;2033:14:14;12278:1290:18;3120:29542;;11289:28;;;13407:13;;;;:::i;:::-;3120:29542;;-1:-1:-1;;;;;3120:29542:18;;;;13371:19;3120:29542;;;;;;;;;;13371:49;3120:29542;;;;;;13371:49;:::i;:::-;3120:29542;;12278:1290;;13310:240;13514:13;;;;:::i;:::-;3120:29542;;-1:-1:-1;;;;;3120:29542:18;;;;13475:22;3120:29542;;;;;;;;;;13475:52;3120:29542;;;;;;13475:52;:::i;3120:29542::-;;;;;;;;;;11795:50;;;;:::i;:::-;3120:29542;;11795:50;;;;3120:29542;;;11795:50;3120:29542;;;;;;;;;11795:50;3120:29542;;;11356:199;11465:79;;;;;;:::i;:::-;11356:199;;;11289:57;11321:25;;;;-1:-1:-1;11289:57:18;;11688:3;11711:13;;;;:::i;:::-;3120:29542;11707:1875;;11688:3;3120:29542;;11658:13;;11707:1875;-1:-1:-1;;;;;11763:13:18;;;;:::i;:::-;3120:29542;;11831:13;;;;;:::i;:::-;3120:29542;-1:-1:-1;;;;;9135:6:18;3120:29542;11795:50;;;;3120:29542;;11795:50;3120:29542;11795:50;;;3120:29542;11795:50;;3120:29542;11824:4;3120:29542;;;;;;;;;9135:6;3120:29542;9135:6;;-1:-1:-1;;;;;9135:6:18;3120:29542;11795:50;;;;;;;;11707:1875;12122:13;;;12084:52;3120:29542;-1:-1:-1;;;;;12122:13:18;;;;:::i;:::-;3120:29542;;;;;;;;12084:52;;12278:1290;;;;12884:13;;;;:::i;:::-;3120:29542;2004:6:14;;2000:58;;2153:5;;;:::i;:::-;3120:29542:18;465:4:14;1068:5;2560:120;;;;;;;;;;;;;;1068:5;:::i;:::-;1186:122;;;;;;;;;3120:29542:18;-1:-1:-1;;;;;3120:29542:18;;;;13044:19;3120:29542;;;;;;;;;;;;;13044:51;3120:29542;;;13044:51;:::i;:::-;3120:29542;;13156:13;;;;:::i;:::-;3120:29542;;;;;;;;;;;13117:70;3120:29542;-1:-1:-1;;;;;3120:29542:18;;;;13117:22;3120:29542;;;;;;;;;;;;;;;;;13117:70;:::i;:::-;3120:29542;;12278:1290;11707:1875;;;;12278:1290;3120:29542;;11289:28;;;13407:13;;;;:::i;:::-;3120:29542;;-1:-1:-1;;;;;3120:29542:18;;;;13371:19;3120:29542;;;;;;;;;;13371:49;3120:29542;;;;;;13371:49;:::i;:::-;3120:29542;;12278:1290;;13310:240;13514:13;;;;:::i;:::-;3120:29542;;-1:-1:-1;;;;;3120:29542:18;;;;13475:22;3120:29542;;;;;;;;;;13475:52;3120:29542;;;;;;13475:52;:::i;11795:50::-;;;;:::i;:::-;;;;11356:199;11465:79;;;;;:::i;:::-;11356:199;;11289:57;11321:25;;;;-1:-1:-1;11289:57:18;;9135:33;;;;;;3120:29542;9135:33;;;;;;:::i;:::-;;;3120:29542;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;9135:33;;;;3120:29542;;;;;-1:-1:-1;;3120:29542:18;;;;;29041:9;3120:29542;;:::i;:::-;;;:::i;:::-;7088:4;;;;:::i;:::-;29041:9;:::i;:::-;3120:29542;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;:::i;:::-;;;:::i;:::-;1525:73:13;;;:::i;:::-;27874:28:18;;;:::i;:::-;27918:13;3120:29542;27933:13;;;;;;3120:29542;27948:3;27982:13;28049:5;-1:-1:-1;;;;;27982:13:18;3120:29542;27982:13;;;:::i;:::-;3120:29542;;28049:5;;;:::i;:::-;3120:29542;27918:13;;3120:29542;;;;;-1:-1:-1;;3120:29542:18;;;;;-1:-1:-1;;;;;3120:29542:18;;:::i;:::-;;;;14101:16;3120:29542;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;:::i;:::-;;;:::i;:::-;;;;-1:-1:-1;;;;;3120:29542:18;;;;;;;;;;1525:73:13;;;:::i;:::-;3120:29542:18;;;28331:52;;;;3120:29542;28331:52;;3120:29542;;;;28331:52;;3120:29542;;;;;28331:6;3120:29542;28331:52;;;;;;;;3120:29542;28432:5;;;;:::i;28331:52::-;3120:29542;28331:52;;3120:29542;28331:52;;;;;;3120:29542;28331:52;;;:::i;:::-;;;3120:29542;;;;28432:5;;-1:-1:-1;28331:52:18;;;;;-1:-1:-1;28331:52:18;;3120:29542;;;;;-1:-1:-1;;3120:29542:18;;;;;;;:::i;:::-;;;1525:73:13;;;:::i;:::-;4720:5:18;7581:57;;7577:130;;7738:21;;;:::i;:::-;8176:4;;;:::i;:::-;31526:40;;;:::i;:::-;3120:29542;;;;;;:::i;:::-;;;;;;;31483:130;;;3120:29542;25861:4;3120:29542;;-1:-1:-1;;;;;3120:29542:18;;;;;;;;;31483:130;3120:29542;;;;;;;;;;;;;;;;;;;;;;;;31709:6;3120:29542;31756:55;;;;:::i;:::-;31709:103;;;;;3120:29542;;;31709:103;;-1:-1:-1;;;;;3120:29542:18;;;;;31709:103;;3120:29542;;;;;;-1:-1:-1;;3120:29542:18;;;;;;-1:-1:-1;;31709:103:18;;;;;;;31828:70;31709:103;31483:130;31709:103;;;3120:29542;;;;;;31828:70;3120:29542;7577:130;7661:35;3120:29542;7661:35;3120:29542;;7661:35;3120:29542;;;;;-1:-1:-1;;3120:29542:18;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3120:29542:18;;;;;;;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;4720:5;7581:57;;7577:130;;3120:29542;7738:21;;25114:70;7738:21;;:::i;:::-;1525:73:13;;:::i;:::-;3120:29542:18;;;;;;;;25114:70;3120:29542;;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;:::i;:::-;15714:28;;;;:::i;:::-;15766:24;;;;:::i;:::-;15805:13;3120:29542;;-1:-1:-1;;;;;3120:29542:18;;;15800:124;15820:13;;;;;;3120:29542;;;;;;;:::i;:::-;;;;15835:3;3120:29542;;;;;15870:22;3120:29542;;;;;15899:13;;;;;:::i;:::-;3120:29542;;;;;;;;;;15854:59;;;;:::i;:::-;3120:29542;;15805:13;;3120:29542;;;;;-1:-1:-1;;3120:29542:18;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;:::i;:::-;15292:28;;;;:::i;:::-;15344:24;;;;:::i;:::-;15383:13;3120:29542;;-1:-1:-1;;;;;3120:29542:18;;;15378:121;15398:13;;;;;;3120:29542;;;;;;;:::i;15413:3::-;3120:29542;;;;;15448:19;3120:29542;;;;;15474:13;;;;;:::i;:::-;3120:29542;;;;;;;;;;15432:56;;;;:::i;:::-;3120:29542;;15383:13;;3120:29542;;;;;-1:-1:-1;;3120:29542:18;;;;;;;;-1:-1:-1;;;;;1216:6:19;3120:29542:18;;;;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;4720:5;7248:55;;7244:127;;3120:29542;7402:20;;24730:68;7402:20;;:::i;:::-;1525:73:13;;:::i;:::-;3120:29542:18;;;;;;;;24730:68;3120:29542;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;3120:29542:18;;;;;-1:-1:-1;;;;;3120:29542:18;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;436:67:20;21135:37:18;436:67:20;;;:::i;:::-;-1:-1:-1;;;;;3120:29542:18;;;;;;;;;20293:16;3120:29542;;;;;20318:4;3120:29542;;;;;;;20451:56;;;;;;21639:92;;3120:29542;20451:56;;20547:57;;;;;;;3120:29542;20547:57;;;21135:37;:::i;:::-;3120:29542;;;;;;:::i;:::-;;;;;;;;21320:38;21092:134;;;3120:29542;;;;;;;21052:31;3120:29542;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21320:38;:::i;:::-;3120:29542;;;;;;;;;:::i;:::-;;;;21277:135;;;3120:29542;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21534:90;3120:29542;;;21534:90;3120:29542;;21534:90;;;;3120:29542;;;;;;;;;;;;;;;;;21534:90;;;;3120:29542;;;;;;;;;;;;;;;;;;;;21639:92;;;;3120:29542;21746:25;;;21742:124;;20547:57;3120:29542;;;;;;;;;;;;;21742:124;21792:63;3120:29542;;;;;;21792:63;21742:124;;;;;;20547:57;3120:29542;;;20318:4;3120:29542;20547:57;;;21135:37;:::i;20451:56::-;3120:29542;21639:92;;3120:29542;;20451:56;;;3120:29542;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;:::i;:::-;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:29542:18;;;;;;;;16417:31;3120:29542;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;16543:81;;;;3120:29542;16539:176;;;3120:29542;16539:176;30493:39;;;:::i;:::-;3120:29542;;;;;;;;:::i;:::-;;;;30450:129;;;3120:29542;;;;;;;16417:31;3120:29542;;;;;;;;;;;;;;;;;;;;;;;;;30674:6;3120:29542;30720:54;;;;:::i;:::-;30674:101;;;;;3120:29542;;;30674:101;;-1:-1:-1;;;;;3120:29542:18;;;;;30674:101;;3120:29542;;;;;;-1:-1:-1;;3120:29542:18;;;;;;-1:-1:-1;;30674:101:18;;;;;;;30791:68;30674:101;;;3120:29542;;;;;;30791:68;3120:29542;16543:81;16576:48;;;;;16543:81;;;3120:29542;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;:::i;:::-;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:29542:18;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;16980:33;3120:29542;17028:82;;;;3120:29542;17024:179;;;3120:29542;17024:179;31526:40;;;:::i;:::-;3120:29542;;;;;;;;:::i;:::-;;;;31483:130;;;3120:29542;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31709:6;3120:29542;31756:55;;;;:::i;:::-;31709:103;;;;;3120:29542;;;31709:103;;-1:-1:-1;;;;;3120:29542:18;;;;;31709:103;;3120:29542;;;;;;-1:-1:-1;;3120:29542:18;;;;;;-1:-1:-1;;31709:103:18;;;;;;;31828:70;31709:103;;;3120:29542;;;;;;31828:70;3120:29542;17028:82;17061:49;;;;;17028:82;;;3120:29542;;:::i;:::-;;;;;-1:-1:-1;;3120:29542:18;;;;;-1:-1:-1;;;;;3120:29542:18;;:::i;:::-;;;;14307:31;3120:29542;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;3120:29542:18;;;;;;13926:33;3120:29542;;;;;;;;;;;;-1:-1:-1;;3120:29542:18;;;;;29204:21;3120:29542;;:::i;:::-;29204:21;;;:::i;:::-;;;:::i;3120:29542::-;;;;;-1:-1:-1;;3120:29542:18;;;;;;;:::i;:::-;;;7088:4;;;;:::i;:::-;4975:9;7868:56;;7864:127;;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:29542:18;;;;;;;;27306:31;3120:29542;;;;;;;27472:6;3120:29542;27519:55;;;;:::i;:::-;27472:103;;;;;3120:29542;;;27472:103;;-1:-1:-1;;;;;3120:29542:18;;;;;27472:103;;3120:29542;;;;;;-1:-1:-1;;3120:29542:18;;;;;;-1:-1:-1;;27472:103:18;;;;;;;27595:68;27472:103;3120:29542;27472:103;;;3120:29542;;;;;;27595:68;3120:29542;7864:127;7947:33;3120:29542;7947:33;3120:29542;;7947:33;3120:29542;;;;;-1:-1:-1;;3120:29542:18;;;;;;;;4975:9;3120:29542;;;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;:::i;:::-;;;7088:4;;;;:::i;:::-;4975:9;7868:56;;7864:127;;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:29542:18;;;;;;;;26923:30;3120:29542;;;;;;;27087:6;3120:29542;27133:54;;;;:::i;:::-;27087:101;;;;;3120:29542;;;27087:101;;-1:-1:-1;;;;;3120:29542:18;;;;;27087:101;;3120:29542;;;;;;-1:-1:-1;;3120:29542:18;;;;;;-1:-1:-1;;27087:101:18;;;;;;;27208:67;27087:101;3120:29542;27087:101;;;3120:29542;;;;;;27208:67;3120:29542;27087:101;;;;:::i;:::-;;;;3120:29542;;;;;-1:-1:-1;;3120:29542:18;;;;;;16154:79;3120:29542;;;;16154:79;:::i;3120:29542::-;;;;;-1:-1:-1;;3120:29542:18;;;;;-1:-1:-1;;;;;3120:29542:18;;:::i;:::-;;;;14845:30;3120:29542;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:29542:18;;;;;;;:::i;:::-;1525:73:13;;:::i;:::-;-1:-1:-1;;;;;3120:29542:18;;;23289:33;;:6;;3120:29542;23289:6;;;3120:29542;23289:33;;;;;;;;3120:29542;23289:33;;;3120:29542;;;23374:4;;23337:42;;23333:104;;3120:29542;;;;;23451:16;3120:29542;;;;;;;;23447:87;;3120:29542;;;23451:16;3120:29542;;;;;23569:4;3120:29542;;;;;;;;;;23646:49;;;3120:29542;23646:49;;3120:29542;;23646:49;3120:29542;23646:49;;;;;;;;;3120:29542;;;23646:49;;;3120:29542;23788:36;;;;:::i;:::-;3120:29542;;;;;;;:::i;:::-;;;;;;;23745:133;;;3120:29542;;;;;;;;23705:31;3120:29542;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23953:72;3120:29542;23953:72;;;3120:29542;23953:72;;3120:29542;;23953:72;3120:29542;23953:72;;;;;;;;;3120:29542;;;23953:72;;;3120:29542;24119:37;;;;:::i;:::-;3120:29542;;;;;;;;:::i;:::-;;;;24076:135;;;3120:29542;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24261:54;;;3120:29542;24261:54;;3120:29542;24261:54;;3120:29542;24261:54;;;;;;;;;3120:29542;24261:54;;;3120:29542;;;;;;;;;24222:30;3120:29542;;;;;;;;24365:55;;;;3120:29542;24365:55;;;3120:29542;24365:55;;3120:29542;24365:55;;;;;;;3120:29542;24365:55;;;3120:29542;;24325:31;3120:29542;;;;;;;;;;;;24365:55;;;;;;;;;;;;;;;;:::i;:::-;;;3120:29542;;;;24325:31;3120:29542;;24365:55;;;;;;;;24261:54;;;;;;;;;;;;;;;;:::i;:::-;;;3120:29542;;;;;;24261:54;;;;;;;23953:72;24119:37;23953:72;;;;;3120:29542;23953:72;3120:29542;23953:72;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;23646:49;23788:36;23646:49;;;;;3120:29542;23646:49;3120:29542;23646:49;;;;;;;:::i;:::-;;;;23447:87;23496:27;;3120:29542;23496:27;3120:29542;;;;23496:27;23333:104;23402:24;3120:29542;23402:24;3120:29542;;23402:24;23289:33;;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:29542;;;;;;;;;;;;23289:33;;;;;;;;;;3120:29542;;;;;-1:-1:-1;;3120:29542:18;;;;;;;-1:-1:-1;;;;;3120:29542:18;;:::i;:::-;;;;15042:31;3120:29542;;;;;;;;;;;;;-1:-1:-1;;;;;3120:29542:18;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;3120:29542:18;;;;;;:::o;:::-;;;;;-1:-1:-1;;3120:29542:18;;;;;;;;4720:5;3120:29542;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;1931:430:13:-;3120:29542:18;;;2303:50:13;;;2320:22;;3120:29542:18;;;;;;;2303:50:13;;;;;;:::i;:::-;3120:29542:18;2293:61:13;;1931:430;:::o;3120:29542:18:-;;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;8523:151::-;8598:68;8523:151;-1:-1:-1;3120:29542:18;-1:-1:-1;;;;;3120:29542:18;;8598:68;;3120:29542;8598:68;;;;;;;;;;3120:29542;8598:68;;;3120:29542;8598:68;;;;;;:::i;:::-;3120:29542;;8584:83;;;;;;;3120:29542;8584:83;;;8598:68;8584:83;;3120:29542;;;;;8598:68;3120:29542;;;;;;;;;;;;;;;;;;8584:83;;:6;;3120:29542;8584:83;;;;;;;;8523:151;;:::o;8584:83::-;;;-1:-1:-1;8584:83:18;;;;;;:::i;:::-;;;3120:29542;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;3120:29542:18;;;;;;;;;8523:151::o;1366:109:19:-;3120:29542:18;;;1442:26:19;;-1:-1:-1;;;;;1442:26:19;3120:29542:18;1442:26:19;3120:29542:18;1216:6:19;3120:29542:18;;1442:26:19;;;;;;;;;;;1435:33;;1366:109;:::o;1442:26::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:29542:18;;;;;;;;;;;;1366:109:19;:::o;1442:26::-;;;-1:-1:-1;1442:26:19;;3120:29542:18;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;1688:201:13;1762:20;1774:7;;;;1762:20;:::i;:::-;1592:60:19;-1:-1:-1;;;;;1592:15:19;;:::i;:::-;3120:29542:18;;;;;1592:60:19;;;;3120:29542:18;1592:60:19;;;;;3120:29542:18;1820:10:13;3120:29542:18;;;;1646:4:19;3120:29542:18;;;;1592:60:19;;;;;;;1774:7:13;1592:60:19;;;1688:201:13;1797:34;;1793:90;;1688:201::o;1793:90::-;1854:18;1774:7;1854:18;1592:60:19;1774:7:13;1854:18;1592:60:19;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:29542:18;;;;;;;:::i;:::-;1592:60:19;;;;;;-1:-1:-1;1592:60:19;;13291:213:27;3120:29542:18;13369:24:27;;;;13365:103;;3120:29542:18;13291:213:27;:::o;13365:103::-;13416:41;;;13447:2;13416:41;3120:29542:18;;;;13416:41:27;;3120:29542:18;;;;;;;;;;:::o;19669:4:12:-;;465::14;19669::12;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;17922:1064:18:-;;18151:104;19669:4:12;5832:87:14;;;838:5;5832:87;;;;;;;;;838:5;:::i;:::-;19669:4:12;18151:104:18;;:::i;:::-;19669:4:12;;;;;;;;;;;;;;;17922:1064:18;:::o;18992:340::-;-1:-1:-1;;;;;19088:21:18;;;;;:::i;:::-;3120:29542;19124:25;;19120:93;;19242:10;19227:25;19223:103;;18992:340;;:::o;19223:103::-;19275:40;19147:1;19275:40;19242:10;19275:40;3120:29542;;;;;19147:1;19275:40;19120:93;19172:30;;19147:1;19172:30;3120:29542;19172:30;3120:29542;;19147:1;19172:30;3120:29542;;;-1:-1:-1;;;;;3120:29542:18;;;;;;:::o;19603:201::-;3120:29542;;;;19723:32;;-1:-1:-1;;;;;3120:29542:18;;;19723:32;;;3120:29542;19723:32;3120:29542;;;19723:6;3120:29542;;19723:32;;;;;;;-1:-1:-1;19723:32:18;;;19603:201;19773:24;;3120:29542;;19603:201;:::o;19723:32::-;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:29542;;;;;;;19723:32;3120:29542;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;19723:32;;;;;;-1:-1:-1;19723:32:18;;;3120:29542;;;-1:-1:-1;3120:29542:18;;;;;29239:616;;29374:28;;;:::i;:::-;29418:13;;29430:1;29433:13;;;;;;29239:616;;;;;:::o;29448:3::-;3120:29542;;-1:-1:-1;;;;;29482:13:18;;;;;:::i;:::-;3120:29542;;;;;;29430:1;3120:29542;29537:22;3120:29542;;;;;;;29430:1;3120:29542;;29430:1;3120:29542;;;;29430:1;3120:29542;;29590:20;;29586:253;;29448:3;;;;;;;;3120:29542;29418:13;;29586:253;29758:66;3120:29542;;29430:1;3120:29542;;;;29430:1;3120:29542;;29430:1;3120:29542;;;29430:1;3120:29542;;;;29717:16;;;;;:::i;:::-;3120:29542;;;;;;29758:66;;29586:253;;;;;;;;;509:165:20;-1:-1:-1;;;;;586:6:20;3120:29542:18;564:10:20;:29;560:108;;509:165::o;560:108::-;616:41;;;564:10;616:41;3120:29542:18;;616:41:20;;31911:749:18;19669:4:12;;;;;;;;;;;;;;;;;;32512:74:18;32508:146;;31911:749::o;32508:146::-;32609:34;-1:-1:-1;32609:34:18;;-1:-1:-1;32609:34:18;19338:199;;-1:-1:-1;;;;;3120:29542:18;;;19469:26;3120:29542;19469:26;;3120:29542;19469:26;;;3120:29542;19469:26;:6;3120:29542;19469:6;;;3120:29542;19469:26;;;;;;;;;;;19338:199;19460:35;;;3120:29542;19338:199;:::o;19469:26::-;;;;;;;;;;;;;;:::i;:::-;;;3120:29542;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;19469:26;;;;;;;;;;3120:29542;;;;;;;;;;;;;;;;;;;;28451:403;;;-1:-1:-1;;;;;3120:29542:18;;;;;-1:-1:-1;3120:29542:18;28575:19;3120:29542;;;-1:-1:-1;3120:29542:18;;;;;;;-1:-1:-1;3120:29542:18;;;;-1:-1:-1;3120:29542:18;;28621:20;;28617:231;;28451:403;;;;;;;:::o;28617:231::-;3120:29542;28737:16;3120:29542;28774:63;3120:29542;;;;-1:-1:-1;3120:29542:18;28575:19;3120:29542;;;-1:-1:-1;3120:29542:18;;-1:-1:-1;3120:29542:18;;;-1:-1:-1;3120:29542:18;;;;28737:16;:::i;:::-;3120:29542;;;;;;28774:63;;28617:231;;;;;;;;17215:701;-1:-1:-1;;;;;3120:29542:18;17414:399;3120:29542;17672:32;3120:29542;;17830:79;3120:29542;;17414:399;3120:29542;;;17765:31;3120:29542;;;17414:399;3120:29542;;17830:79;;:::i;17215:701::-;-1:-1:-1;;;;;3120:29542:18;-1:-1:-1;3120:29542:18;17489:31;3120:29542;;17830:79;3120:29542;;-1:-1:-1;3120:29542:18;;;17581:30;3120:29542;;;-1:-1:-1;3120:29542:18;;17830:79;;:::i;1303:160:25:-;3120:29542:18;;;1412:43:25;;;;;;-1:-1:-1;;;;;3120:29542:18;;;1412:43:25;;;3120:29542:18;;;;;;;;;1412:43:25;;;3120:29542:18;3510:55:26;;-1:-1:-1;;;;1412:43:25;3120:29542:18;1412:43:25;3120:29542:18;;1412:43:25;:::i;:::-;3120:29542:18;3462:31:26;;;;;;;3120:29542:18;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2847:1:26;1412:43:25;3120:29542:18;;;;3510:55:26;;:::i;:::-;3120:29542:18;;4551:22:25;;;;:57;;;;3120:29542:18;4547:135:25;;;;1303:160;:::o;4547:135::-;4631:40;2847:1:26;4631:40:25;;3120:29542:18;1412:43:25;2847:1:26;4631:40:25;4551:57;4578:30;;;;1412:43;4578:30;;;3120:29542:18;;;;1412:43:25;3120:29542:18;4578:30:25;;3120:29542:18;:::i;:::-;4577:31:25;4551:57;;;;3120:29542:18;;;;;4625:582:26;;4797:8;;-1:-1:-1;3120:29542:18;;5874:21:26;:17;;6046:142;;;;;;5870:383;6225:17;5894:1;6225:17;;5894:1;6225:17;4793:408;3120:29542:18;;5045:22:26;:49;;;4793:408;5041:119;;5173:17;;:::o;5041:119::-;-1:-1:-1;;;;;5121:24:26;;5066:1;5121:24;3120:29542:18;5121:24:26;3120:29542:18;;5066:1:26;5121:24;5045:49;5071:18;;;:23;5045:49;"},"methodIdentifiers":{"MAX_CREATOR_FEE_PERCENTAGE()":"2e1d388d","MAX_PROTOCOL_SWAP_FEE_PERCENTAGE()":"2772d156","MAX_PROTOCOL_YIELD_FEE_PERCENTAGE()":"5e32e4e8","collectAggregateFees(address)":"8f4ab9ca","collectAggregateFeesHook(address)":"fa399f2a","computeAggregateFeePercentage(uint256,uint256)":"0ddd60c6","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getGlobalProtocolSwapFeePercentage()":"7869ee18","getGlobalProtocolYieldFeePercentage()":"55fb76af","getPoolCreatorFeeAmounts(address)":"9e95f3fd","getPoolCreatorSwapFeePercentage(address)":"0b8e059b","getPoolCreatorYieldFeePercentage(address)":"0252aab5","getPoolProtocolSwapFeeInfo(address)":"5c15a0b4","getPoolProtocolYieldFeeInfo(address)":"7a2b97dc","getProtocolFeeAmounts(address)":"8df44c54","getVault()":"8d928af8","isPoolRegistered(address)":"c673bdaf","migratePool(address)":"0874327f","registerPool(address,address,bool)":"77ff76e7","setGlobalProtocolSwapFeePercentage(uint256)":"8a3c5c69","setGlobalProtocolYieldFeePercentage(uint256)":"a93df2a4","setPoolCreatorSwapFeePercentage(address,uint256)":"1377c16c","setPoolCreatorYieldFeePercentage(address,uint256)":"3af52712","setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356","updateProtocolSwapFeePercentage(address)":"71ecc8fb","updateProtocolYieldFeePercentage(address)":"71447ea8","vault()":"fbfa77cf","withdrawPoolCreatorFees(address)":"52f125f0","withdrawPoolCreatorFees(address,address)":"f7061445","withdrawProtocolFees(address,address)":"cf7b287f","withdrawProtocolFeesForToken(address,address,address)":"b53a70b2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"CallerIsNotPoolCreator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMigrationSource\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolCreatorFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolYieldFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateSwapFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateYieldFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"PoolWithCreatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_CREATOR_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFeesHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeAggregateFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolSwapFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolYieldFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getProtocolFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"migratePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"registerPool\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract stores global default protocol swap and yield fees, and also tracks the values of those fees for each pool (the `PoolFeeConfig` described below). Protocol fees can always be overwritten by governance, but pool creator fees are controlled by the registered poolCreator (see `PoolRoleAccounts`). The Vault stores a single aggregate percentage for swap and yield fees; only this `ProtocolFeeController` knows the component fee percentages, and how to compute the aggregate from the components. This is done for performance reasons, to minimize gas on the critical path, as this way the Vault simply applies a single \\\"cut\\\", and stores the fee amounts separately from the pool balances. The pool creator fees are \\\"net\\\" protocol fees, meaning the protocol fee is taken first, and the pool creator fee percentage is applied to the remainder. Essentially, the protocol is paid first, then the remainder is divided between the pool creator and the LPs. There is a permissionless function (`collectAggregateFees`) that transfers these tokens from the Vault to this contract, and distributes them between the protocol and pool creator, after which they can be withdrawn at any time by governance and the pool creator, respectively. Protocol fees can be zero in some cases (e.g., the token is registered as exempt), and pool creator fees are zero if there is no creator role address defined. Protocol fees are capped at a maximum percentage (50%); pool creator fees are computed \\\"net\\\" protocol fees, so they can be any value from 0 to 100%. Any combination is possible. A protocol-fee-exempt pool with a 100% pool creator fee would send all fees to the creator. If there is no pool creator, a pool with a 50% protocol fee would divide the fees evenly between the protocol and LPs. This contract is deployed with the Vault, but can be changed by governance.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"CallerIsNotPoolCreator(address,address)\":[{\"params\":{\"caller\":\"The account attempting to withdraw pool creator fees\",\"pool\":\"The pool the caller tried to withdraw from\"}}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"PoolAlreadyRegistered(address)\":[{\"details\":\"This can happen if there is an error in the migration, or if governance somehow grants permission to `migratePool`, which should never happen.\",\"params\":{\"pool\":\"The pool\"}}],\"PoolCreatorNotRegistered(address)\":[{\"params\":{\"pool\":\"The pool with no creator\"}}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol swap fee percentages.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol yield fee percentages.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"params\":{\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"params\":{\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global swap fee percentage.\",\"params\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global yield fee percentage.\",\"params\":{\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which pool creator fees are being withdrawn\",\"recipient\":\"The recipient of the funds (the pool creator if permissionless, or another account)\",\"token\":\"The token being withdrawn\"}},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator swap fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage for the pool\"}},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator yield fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage for the pool\"}},\"PoolWithCreatorRegistered(address,address,bool)\":{\"details\":\"The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee counterpart also include the protocol fee exemption flag, we might as well include it here as well.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (non-zero, or the event would not be emitted)\",\"protocolFeeExempt\":\"True if the pool is initially exempt from protocol fees\"}},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which protocol fees are being withdrawn\",\"recipient\":\"The recipient of the funds\",\"token\":\"The token being withdrawn\"}},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the swap fee was charged\",\"token\":\"The token in which the swap fee was charged\"}},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol swap fee will be changed\",\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the yield fee was charged\",\"token\":\"The token in which the yield fee was charged\"}},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol yield fee will be changed\",\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}}},\"kind\":\"dev\",\"methods\":{\"collectAggregateFees(address)\":{\"params\":{\"pool\":\"The pool with aggregate fees\"}},\"collectAggregateFeesHook(address)\":{\"details\":\"Copy and zero out the `aggregateFeeAmounts` collected in the Vault accounting, supplying credit for each token. Then have the Vault transfer tokens to this contract, debiting each token for the amount transferred so that the transaction settles when the hook returns.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"details\":\"Not tied to any particular pool; this just performs the low-level \\\"additive fee\\\" calculation. Note that pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are stored in the Vault with 24-bit precision, this will truncate any values that require greater precision. It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee components, but the truncation ensures it will not revert for any valid set of fee percentages. See example below: tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60% totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000 protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400 creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600 creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360 lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\",\"params\":{\"poolCreatorFeePercentage\":\"The pool creator portion of the aggregate fee percentage\",\"protocolFeePercentage\":\"The protocol portion of the aggregate fee percentage\"},\"returns\":{\"_0\":\"The computed aggregate percentage\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getGlobalProtocolSwapFeePercentage()\":{\"returns\":{\"_0\":\"The global protocol swap fee percentage\"}},\"getGlobalProtocolYieldFeePercentage()\":{\"returns\":{\"_0\":\"The global protocol yield fee percentage\"}},\"getPoolCreatorFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getPoolCreatorSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\"}},\"getPoolCreatorYieldFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\"}},\"getPoolProtocolSwapFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"The protocol swap fee percentage for the given pool\",\"_1\":\"True if the protocol fee has been overridden\"}},\"getPoolProtocolYieldFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"The protocol yield fee percentage for the given pool\",\"_1\":\"True if the protocol fee has been overridden\"}},\"getProtocolFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\"}},\"migratePool(address)\":{\"details\":\"Permission should NEVER be granted to this function outside of a migration contract. It is necessary to permit migration of the `ProtocolFeeController` with all state (in particular, protocol fee overrides and pool creator fees) that cannot be written outside of the `registerPool` function called by the Vault during pool deployment. Even if governance were to grant permission to call this function, the `_registeredPools` latch keeps it safe, guaranteeing that it is impossible to use this function to change anything after registration. A pool can only be registered / configured once - either copied to a new controller in the migration context, or added normally through the Vault calling `registerPool`. Technically, since the logic prevents it from being called on the active fee controller, and on a previously registered or migrated pool, it could even be permissionless. But since we already have other permissioned functions, it doesn't really cost anything to be permissioned, and that provides another layer of security.\",\"params\":{\"pool\":\"The address of the pool to be migrated\"}},\"registerPool(address,address,bool)\":{\"details\":\"This must be called from the Vault during pool registration. It will initialize the pool to the global protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate fee percentages, based on an initial pool creator fee of 0.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (or 0 if there won't be a pool creator fee)\",\"protocolFeeExempt\":\"If true, the pool is initially exempt from protocol fees\"},\"returns\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\"}},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\"}},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage to apply to the pool\"}},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage to apply to the pool\"}},\"setProtocolSwapFeePercentage(address,uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol swap fee\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol yield fee\"}},\"updateProtocolSwapFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol swap fee\"}},\"updateProtocolYieldFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol yield fee\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The Vault address\"}},\"withdrawPoolCreatorFees(address)\":{\"details\":\"Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable value, this function is permissionless.\",\"params\":{\"pool\":\"The pool on which fees were collected\"}},\"withdrawPoolCreatorFees(address,address)\":{\"details\":\"Sends swap and yield pool creator fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFees(address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFeesForToken(address,address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\",\"token\":\"Token to withdraw\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"notice\":\"Error raised if the wrong account attempts to withdraw pool creator fees.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"InvalidMigrationSource()\":[{\"notice\":\"Migration source cannot be this contract.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"Prevent pool data from being registered more than once.\"}],\"PoolCreatorFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\"}],\"PoolCreatorNotRegistered(address)\":[{\"notice\":\"Error raised if there is no pool creator on a withdrawal attempt from the given pool.\"}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated.\"},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated.\"},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\"},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\"},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of pool creator fees in a specific token and amount.\"},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator swap fee percentage of a pool is updated.\"},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator yield fee percentage of a pool is updated.\"},\"PoolWithCreatorRegistered(address,address,bool)\":{\"notice\":\"Emitted for pools registered with creators.\"},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of protocol fees in a specific token and amount.\"},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol swap fees in a specific token and amount.\"},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated for a specific pool.\"},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol yield fees in a specific token and amount.\"},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated for a specific pool.\"}},\"kind\":\"user\",\"methods\":{\"collectAggregateFees(address)\":{\"notice\":\"Collects aggregate fees from the Vault for a given pool.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"notice\":\"Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getGlobalProtocolSwapFeePercentage()\":{\"notice\":\"Getter for the current global protocol swap fee.\"},\"getGlobalProtocolYieldFeePercentage()\":{\"notice\":\"Getter for the current global protocol yield fee.\"},\"getPoolCreatorFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the pool creator for withdrawal.\"},\"getPoolCreatorSwapFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator swap fee percentage for a given pool.\"},\"getPoolCreatorYieldFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator swap fee percentage for a given pool.\"},\"getPoolProtocolSwapFeeInfo(address)\":{\"notice\":\"Getter for the current protocol swap fee for a given pool.\"},\"getPoolProtocolYieldFeeInfo(address)\":{\"notice\":\"Getter for the current protocol yield fee for a given pool.\"},\"getProtocolFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the protocol for withdrawal.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isPoolRegistered(address)\":{\"notice\":\"Getter for pool registration flag.\"},\"migratePool(address)\":{\"notice\":\"Not exposed in the interface, this enables migration of hidden pool state.\"},\"registerPool(address,address,bool)\":{\"notice\":\"Add pool-specific entries to the protocol swap and yield percentages.\"},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"notice\":\"Set the global protocol swap fee percentage, used by standard pools.\"},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"notice\":\"Set the global protocol yield fee percentage, used by standard pools.\"},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator swap fee percentage to the specified pool.\"},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator yield fee percentage to the specified pool.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"updateProtocolSwapFeePercentage(address)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"updateProtocolYieldFeePercentage(address)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"vault()\":{\"notice\":\"Get the address of the main Vault contract.\"},\"withdrawPoolCreatorFees(address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool.\"},\"withdrawPoolCreatorFees(address,address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool. This is a permissioned function.\"},\"withdrawProtocolFees(address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\"},\"withdrawProtocolFeesForToken(address,address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\"}},\"notice\":\"Helper contract to manage protocol and creator fees outside the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\":\"ProtocolFeeController\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xe0e5193402394ef505f87b206d8e64e1ea8b604feeb2ea8bbd054050778c162d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c962b5d782a8ec4341741dd49daf071e23560548ad95ed00e1531379cfcf0a2e\",\"dweb:/ipfs/QmbPn63SLEZp719KdAtPa4urbhQwqYzfewWfNRtw3nyy8c\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\":{\"keccak256\":\"0xe45521ca4ed88ce5d25262f764132ad923c9207db89a51d5e76e960c3ee7e9f1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7f1bb43ba9746184f4a0ac05ab2b1b62bc56da755346e518c8f427478aad2a\",\"dweb:/ipfs/QmYKgjtZ7Bu8MqQPQf1YBPb8FXfWaGYtL2fMQcZR3iBod1\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x67518bf3b6bd96f5897c56867fc57f3c31bb9b97abf93cf960de145a5eb82414\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://563857d8606cbd4f727c75f09901d09ec9faa73778fe85e2af851982cdb9b6e8\",\"dweb:/ipfs/QmU7x1gWCPGPAcxA8Qq3z8hscrGRFwsc28qad4RMihZ8qB\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"SingletonAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getVault()":"8d928af8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same function name.\",\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"}},\"notice\":\"Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":\"SingletonAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xe0e5193402394ef505f87b206d8e64e1ea8b604feeb2ea8bbd054050778c162d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c962b5d782a8ec4341741dd49daf071e23560548ad95ed00e1531379cfcf0a2e\",\"dweb:/ipfs/QmbPn63SLEZp719KdAtPa4urbhQwqYzfewWfNRtw3nyy8c\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x67518bf3b6bd96f5897c56867fc57f3c31bb9b97abf93cf960de145a5eb82414\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://563857d8606cbd4f727c75f09901d09ec9faa73778fe85e2af851982cdb9b6e8\",\"dweb:/ipfs/QmU7x1gWCPGPAcxA8Qq3z8hscrGRFwsc28qad4RMihZ8qB\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"VaultGuard":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60a034606057601f60b238819003918201601f19168301916001600160401b03831184841017606457808492602094604052833981010312606057516001600160a01b03811681036060576080526040516039908160798239608051815050f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe5f80fdfea2646970667358221220e5352c394e0b3516d039a0b9edab574589fefa1f3b6e10161d67def52da9a16564736f6c634300081b0033","opcodes":"PUSH1 0xA0 CALLVALUE PUSH1 0x60 JUMPI PUSH1 0x1F PUSH1 0xB2 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH1 0x64 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH1 0x60 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH1 0x60 JUMPI PUSH1 0x80 MSTORE PUSH1 0x40 MLOAD PUSH1 0x39 SWAP1 DUP2 PUSH1 0x79 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE5 CALLDATALOAD 0x2C CODECOPY 0x4E SIGNEXTEND CALLDATALOAD AND 0xD0 CODECOPY LOG0 0xB9 0xED 0xAB JUMPI GASLIMIT DUP10 INVALID STATICCALL 0x1F EXTCODESIZE PUSH15 0x10161D67DEF52DA9A16564736F6C63 NUMBER STOP ADDMOD SHL STOP CALLER ","sourceMap":"308:368:20:-:0;;;;;;;;;;;;;-1:-1:-1;;308:368:20;;;;-1:-1:-1;;;;;308:368:20;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;308:368:20;;;;;;409:14;;308:368;;;;;;;;409:14;308:368;;;;;;-1:-1:-1;308:368:20;;;;;;-1:-1:-1;308:368:20;;;;;-1:-1:-1;308:368:20"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220e5352c394e0b3516d039a0b9edab574589fefa1f3b6e10161d67def52da9a16564736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE5 CALLDATALOAD 0x2C CODECOPY 0x4E SIGNEXTEND CALLDATALOAD AND 0xD0 CODECOPY LOG0 0xB9 0xED 0xAB JUMPI GASLIMIT DUP10 INVALID STATICCALL 0x1F EXTCODESIZE PUSH15 0x10161D67DEF52DA9A16564736F6C63 NUMBER STOP ADDMOD SHL STOP CALLER ","sourceMap":"308:368:20:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Contract that shares the modifier `onlyVault`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":\"VaultGuard\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xe0e5193402394ef505f87b206d8e64e1ea8b604feeb2ea8bbd054050778c162d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c962b5d782a8ec4341741dd49daf071e23560548ad95ed00e1531379cfcf0a2e\",\"dweb:/ipfs/QmbPn63SLEZp719KdAtPa4urbhQwqYzfewWfNRtw3nyy8c\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"IERC4626":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"asset","outputs":[{"internalType":"address","name":"assetTokenAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"convertToAssets","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"convertToShares","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxDeposit","outputs":[{"internalType":"uint256","name":"maxAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxMint","outputs":[{"internalType":"uint256","name":"maxShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxRedeem","outputs":[{"internalType":"uint256","name":"maxShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxWithdraw","outputs":[{"internalType":"uint256","name":"maxAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewDeposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewMint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewWithdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAssets","outputs":[{"internalType":"uint256","name":"totalManagedAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","asset()":"38d52e0f","balanceOf(address)":"70a08231","convertToAssets(uint256)":"07a2d13a","convertToShares(uint256)":"c6e6f592","decimals()":"313ce567","deposit(uint256,address)":"6e553f65","maxDeposit(address)":"402d267d","maxMint(address)":"c63d75b6","maxRedeem(address)":"d905777e","maxWithdraw(address)":"ce96cb77","mint(uint256,address)":"94bf804d","name()":"06fdde03","previewDeposit(uint256)":"ef8b30f7","previewMint(uint256)":"b3d7f6b9","previewRedeem(uint256)":"4cdad506","previewWithdraw(uint256)":"0a28a477","redeem(uint256,address,address)":"ba087652","symbol()":"95d89b41","totalAssets()":"01e1d114","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","withdraw(uint256,address,address)":"b460af94"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"asset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"assetTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"convertToAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"convertToShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalManagedAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC4626 \\\"Tokenized Vault Standard\\\", as defined in https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"asset()\":{\"details\":\"Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing. - MUST be an ERC-20 token contract. - MUST NOT revert.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"convertToAssets(uint256)\":{\"details\":\"Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"convertToShares(uint256)\":{\"details\":\"Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"deposit(uint256,address)\":{\"details\":\"Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the deposit execution, and are accounted for during deposit. - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"maxDeposit(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver, through a deposit call. - MUST return a limited value if receiver is subject to some deposit limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited. - MUST NOT revert.\"},\"maxMint(address)\":{\"details\":\"Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call. - MUST return a limited value if receiver is subject to some mint limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted. - MUST NOT revert.\"},\"maxRedeem(address)\":{\"details\":\"Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault, through a redeem call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock. - MUST NOT revert.\"},\"maxWithdraw(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the Vault, through a withdraw call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST NOT revert.\"},\"mint(uint256,address)\":{\"details\":\"Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint execution, and are accounted for during mint. - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"previewDeposit(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called in the same transaction. - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the deposit would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"previewMint(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the same transaction. - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by minting.\"},\"previewRedeem(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the same transaction. - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the redemption would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by redeeming.\"},\"previewWithdraw(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if called in the same transaction. - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though the withdrawal would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"redeem(uint256,address,address)\":{\"details\":\"Burns exactly shares from owner and sends assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the redeem execution, and are accounted for during redeem. - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalAssets()\":{\"details\":\"Returns the total amount of the underlying asset that is \\u201cmanaged\\u201d by Vault. - SHOULD include any compounding that occurs from yield. - MUST be inclusive of any fees that are charged against assets in the Vault. - MUST NOT revert.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"withdraw(uint256,address,address)\":{\"details\":\"Burns shares from owner and sends exactly assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the withdraw execution, and are accounted for during withdraw. - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC4626.sol\":\"IERC4626\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"IERC20":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 standard as defined in the EIP.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"IERC20Metadata":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the optional metadata functions from the ERC20 standard.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":\"IERC20Metadata\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol":{"IERC20Permit":{"abi":[{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't need to send a transaction, and thus is not required to hold Ether at all. ==== Security Considerations There are two important considerations concerning the use of `permit`. The first is that a valid permit signature expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be considered as an intention to spend the allowance in any specific way. The second is that because permits have built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be generally recommended is: ```solidity function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public { try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {} doThing(..., value); } function doThing(..., uint256 value) public { token.safeTransferFrom(msg.sender, address(this), value); ... } ``` Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also {SafeERC20-safeTransferFrom}). Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so contracts should have entry points that don't rely on permit.\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"nonces(address)\":{\"details\":\"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":\"IERC20Permit\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"SafeERC20":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"currentAllowance","type":"uint256"},{"internalType":"uint256","name":"requestedDecrease","type":"uint256"}],"name":"SafeERC20FailedDecreaseAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212202d84903a7d88d39beea6e8c10e7299cd816b0bde2b5e6443ed9adc8d7885d05564736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2D DUP5 SWAP1 GASPRICE PUSH30 0x88D39BEEA6E8C10E7299CD816B0BDE2B5E6443ED9ADC8D7885D05564736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"751:5018:25:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212202d84903a7d88d39beea6e8c10e7299cd816b0bde2b5e6443ed9adc8d7885d05564736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2D DUP5 SWAP1 GASPRICE PUSH30 0x88D39BEEA6E8C10E7299CD816B0BDE2B5E6443ED9ADC8D7885D05564736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"751:5018:25:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentAllowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requestedDecrease\",\"type\":\"uint256\"}],\"name\":\"SafeERC20FailedDecreaseAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers around ERC20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\",\"errors\":{\"SafeERC20FailedDecreaseAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failed `decreaseAllowance` request.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"SafeERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Address.sol":{"Address":{"abi":[{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212207308dc04867882e716a35b4e93fd57711740b1913fb9480b2ee92ca52acf78a664736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH20 0x8DC04867882E716A35B4E93FD57711740B1913F 0xB9 BASEFEE SIGNEXTEND 0x2E 0xE9 0x2C 0xA5 0x2A 0xCF PUSH25 0xA664736F6C634300081B003300000000000000000000000000 ","sourceMap":"195:6066:26:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212207308dc04867882e716a35b4e93fd57711740b1913fb9480b2ee92ca52acf78a664736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH20 0x8DC04867882E716A35B4E93FD57711740B1913F 0xB9 BASEFEE SIGNEXTEND 0x2E 0xE9 0x2C 0xA5 0x2A 0xCF PUSH25 0xA664736F6C634300081B003300000000000000000000000000 ","sourceMap":"195:6066:26:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"SafeCast":{"abi":[{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntDowncast","type":"error"},{"inputs":[{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntToUint","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintToInt","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220c8c1339c0f0f32d1cd42e01b472992f3fdb072f8c07de7950d5d5c048b0f797464736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC8 0xC1 CALLER SWAP13 0xF 0xF ORIGIN 0xD1 0xCD TIMESTAMP 0xE0 SHL SELFBALANCE 0x29 SWAP3 RETURN REVERT 0xB0 PUSH19 0xF8C07DE7950D5D5C048B0F797464736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"764:33927:27:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220c8c1339c0f0f32d1cd42e01b472992f3fdb072f8c07de7950d5d5c048b0f797464736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC8 0xC1 CALLER SWAP13 0xF 0xF ORIGIN 0xD1 0xCD TIMESTAMP 0xE0 SHL SELFBALANCE 0x29 SWAP3 RETURN REVERT 0xB0 PUSH19 0xF8C07DE7950D5D5C048B0F797464736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"764:33927:27:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntToUint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers over Solidity's uintXX/intXX casting operators with added overflow checks. Downcasting from uint256/int256 in Solidity does not revert on overflow. This can easily result in undesired exploitation or bugs, since developers usually assume that overflows raise errors. `SafeCast` restores this intuition by reverting the transaction when such an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.\",\"errors\":{\"SafeCastOverflowedIntDowncast(uint8,int256)\":[{\"details\":\"Value doesn't fit in an int of `bits` size.\"}],\"SafeCastOverflowedIntToUint(int256)\":[{\"details\":\"An int value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":\"SafeCast\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]}},\"version\":1}"}},"contracts/ProtocolFeeControllerMigration.sol":{"ProtocolFeeControllerMigration":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"_vault","type":"address"},{"internalType":"contract IProtocolFeeController","name":"_newFeeController","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyMigrated","type":"error"},{"inputs":[],"name":"InvalidFeeController","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"migrateFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"newFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_contract_IVault_fromMemory":{"entryPoint":753,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":698,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"6101006040908082523461020657818161155b803803809161002182856102ba565b83398101031261020657610034816102f1565b9061004260208092016102f1565b835163217cb6f560e21b81526001600160a01b039390818516908481600481855afa9081156102b0575f9161027b575b50608052855163fbfa77cf60e01b8152838616908581600481855afa90811561027157839188915f91610238575b5016149081159161022a575b5061021b57600492849260c05260a05285519283809263aaabadc560e01b82525afa918215610211575f926101d6575b50501660e05251611255908161030682396080518181816104be01528181610533015261113a015260a05181818161021d015281816102cd0152818161057b015281816105ea01528181610633015281816106a201528181610892015281816109010152818161094a015281816109b901528181610bc201526111a6015260c05181818160940152610a4f015260e05181818161031501528181610376015281816103d301528181610434015281816106eb0152818161074d015281816107ab0152818161080d01528181610aec01528181610b4d01528181610c1001528181610c7201528181610cf801528181610d400152610da20152f35b90809250813d831161020a575b6101ed81836102ba565b8101031261020657518181168103610206575f806100dc565b5f80fd5b503d6101e3565b84513d5f823e3d90fd5b63d6f1cb0560e01b5f5260045ffd5b90508560805116145f6100ac565b925050508581813d831161026a575b61025181836102ba565b81010312610206578661026484926102f1565b5f6100a0565b503d610247565b88513d5f823e3d90fd5b90508481813d83116102a9575b61029281836102ba565b81010312610206576102a3906102f1565b5f610072565b503d610288565b87513d5f823e3d90fd5b601f909101601f19168101906001600160401b038211908210176102dd57604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b03821682036102065756fe6080806040526004361015610012575f80fd5b5f905f3560e01c90816351da116d1461115e575080637ea3a964146110f0578063c2ad0f14146100bb5763fbfa77cf1461004a575f80fd5b346100b857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100b857602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b80fd5b5034610e4e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e4e5767ffffffffffffffff600435818111610e4e5736602382011215610e4e5780600401359182116110c3578160051b906040519261012b60208401856111de565b83526024602084019282010190368211610e4e57602401915b818310611096575050507f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c61106e5760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d5f5460ff8116611046577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001175f556040517f851c1bb30000000000000000000000000000000000000000000000000000000081527f8a3c5c690000000000000000000000000000000000000000000000000000000060048201526020816024817f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165afa908115610fd5575f91611014575b50604051907f851c1bb30000000000000000000000000000000000000000000000000000000082527fa93df2a400000000000000000000000000000000000000000000000000000000600483015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610fd5575f92610fe0575b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610e4e576040517f2f2ff15d000000000000000000000000000000000000000000000000000000008152600481018290523060248201525f81604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af18015610fd557610fc0575b5090839173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610a04576040517f2f2ff15d000000000000000000000000000000000000000000000000000000008152600481018390523060248201528381604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af1908115610edd578491610fac575b50506040517f7869ee1800000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610edd578491610f77575b50604051907f55fb76af00000000000000000000000000000000000000000000000000000000825260208260048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610e9b578592610f40575b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610f3c57604051907f8a3c5c69000000000000000000000000000000000000000000000000000000008252600482015284816024818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610e9b578591610f28575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610f2457604051907fa93df2a4000000000000000000000000000000000000000000000000000000008252600482015283816024818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610edd578491610f10575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610a04576040517f36568abe00000000000000000000000000000000000000000000000000000000815260048101919091523060248201528281604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af1908115610a2b578391610efc575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610a13576040517f36568abe00000000000000000000000000000000000000000000000000000000815260048101919091523060248201528181604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af18015610a0857610ee8575b505b8151811015610a36578273ffffffffffffffffffffffffffffffffffffffff60208360051b850101511673ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610a13576040517f71ecc8fb00000000000000000000000000000000000000000000000000000000815281600482015282816024818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610a2b578391610a17575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610a1357604051907f71447ea8000000000000000000000000000000000000000000000000000000008252600482015281816024818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610a08576109f0575b5050600101610851565b6109f9906111ca565b610a0457825f6109e6565b8280fd5b6040513d84823e3d90fd5b5080fd5b610a20906111ca565b610a1357815f610931565b6040513d85823e3d90fd5b828073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016604051907f851c1bb30000000000000000000000000000000000000000000000000000000082527f2d77138900000000000000000000000000000000000000000000000000000000806004840152602083602481855afa928315610edd578493610ea6575b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610e82576040517f2f2ff15d000000000000000000000000000000000000000000000000000000008152600481018490523060248201528481604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af1908115610e9b578591610e87575b5050813b15610e82578391602483926040519485938492835273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660048401525af1908115610a2b578391610e6e575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610e1e576040517f36568abe00000000000000000000000000000000000000000000000000000000815260048101919091523060248201528181604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af18015610a0857610e5a575b506040517fa217fddf00000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610a08578291610e21575b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610e1e576040517f36568abe00000000000000000000000000000000000000000000000000000000815260048101919091523060248201528181604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af18015610a0857610e0a575b507f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d80f35b610e13906111ca565b6100b8578082610de4565b50fd5b9150506020813d602011610e52575b81610e3d602093836111de565b81010312610e4e5781905183610d28565b5f80fd5b3d9150610e30565b610e63906111ca565b6100b8578082610cb4565b610e77906111ca565b610e1e578184610bf7565b505050fd5b610e90906111ca565b610e82578386610b92565b6040513d87823e3d90fd5b935091506020833d602011610ed5575b81610ec3602093836111de565b81010312610e4e578392519185610ad4565b3d9150610eb6565b6040513d86823e3d90fd5b610ef1906111ca565b610a1357815f61084f565b610f05906111ca565b610a1357815f610792565b610f19906111ca565b610a0457825f6106d2565b8380fd5b610f31906111ca565b610f2457835f61061a565b8480fd5b945090506020843d602011610f6f575b81610f5d602093836111de565b81010312610e4e57859351905f610563565b3d9150610f50565b9350506020833d602011610fa4575b81610f93602093836111de565b81010312610e4e578492515f6104ee565b3d9150610f86565b610fb5906111ca565b610a0457825f610479565b610fcc919294506111ca565b5f92905f6103b8565b6040513d5f823e3d90fd5b9091506020813d60201161100c575b81610ffc602093836111de565b81010312610e4e5751905f6102fd565b3d9150610fef565b90506020813d60201161103e575b8161102f602093836111de565b81010312610e4e57515f610262565b3d9150611022565b7fca1c3cbc000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b823573ffffffffffffffffffffffffffffffffffffffff81168103610e4e57815260209283019201610144565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b34610e4e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e4e57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610e4e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e4e5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b67ffffffffffffffff81116110c357604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110c35760405256fea264697066735822122099c1e7ab0bed7c157302cc163e0dc09d0df8a426a97850fcce96c1625fb28e1b64736f6c634300081b0033","opcodes":"PUSH2 0x100 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x206 JUMPI DUP2 DUP2 PUSH2 0x155B DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x21 DUP3 DUP6 PUSH2 0x2BA JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x206 JUMPI PUSH2 0x34 DUP2 PUSH2 0x2F1 JUMP JUMPDEST SWAP1 PUSH2 0x42 PUSH1 0x20 DUP1 SWAP3 ADD PUSH2 0x2F1 JUMP JUMPDEST DUP4 MLOAD PUSH4 0x217CB6F5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 DUP2 DUP6 AND SWAP1 DUP5 DUP2 PUSH1 0x4 DUP2 DUP6 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2B0 JUMPI PUSH0 SWAP2 PUSH2 0x27B JUMPI JUMPDEST POP PUSH1 0x80 MSTORE DUP6 MLOAD PUSH4 0xFBFA77CF PUSH1 0xE0 SHL DUP2 MSTORE DUP4 DUP7 AND SWAP1 DUP6 DUP2 PUSH1 0x4 DUP2 DUP6 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x271 JUMPI DUP4 SWAP2 DUP9 SWAP2 PUSH0 SWAP2 PUSH2 0x238 JUMPI JUMPDEST POP AND EQ SWAP1 DUP2 ISZERO SWAP2 PUSH2 0x22A JUMPI JUMPDEST POP PUSH2 0x21B JUMPI PUSH1 0x4 SWAP3 DUP5 SWAP3 PUSH1 0xC0 MSTORE PUSH1 0xA0 MSTORE DUP6 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH4 0xAAABADC5 PUSH1 0xE0 SHL DUP3 MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x211 JUMPI PUSH0 SWAP3 PUSH2 0x1D6 JUMPI JUMPDEST POP POP AND PUSH1 0xE0 MSTORE MLOAD PUSH2 0x1255 SWAP1 DUP2 PUSH2 0x306 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH2 0x4BE ADD MSTORE DUP2 DUP2 PUSH2 0x533 ADD MSTORE PUSH2 0x113A ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x21D ADD MSTORE DUP2 DUP2 PUSH2 0x2CD ADD MSTORE DUP2 DUP2 PUSH2 0x57B ADD MSTORE DUP2 DUP2 PUSH2 0x5EA ADD MSTORE DUP2 DUP2 PUSH2 0x633 ADD MSTORE DUP2 DUP2 PUSH2 0x6A2 ADD MSTORE DUP2 DUP2 PUSH2 0x892 ADD MSTORE DUP2 DUP2 PUSH2 0x901 ADD MSTORE DUP2 DUP2 PUSH2 0x94A ADD MSTORE DUP2 DUP2 PUSH2 0x9B9 ADD MSTORE DUP2 DUP2 PUSH2 0xBC2 ADD MSTORE PUSH2 0x11A6 ADD MSTORE PUSH1 0xC0 MLOAD DUP2 DUP2 DUP2 PUSH1 0x94 ADD MSTORE PUSH2 0xA4F ADD MSTORE PUSH1 0xE0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x315 ADD MSTORE DUP2 DUP2 PUSH2 0x376 ADD MSTORE DUP2 DUP2 PUSH2 0x3D3 ADD MSTORE DUP2 DUP2 PUSH2 0x434 ADD MSTORE DUP2 DUP2 PUSH2 0x6EB ADD MSTORE DUP2 DUP2 PUSH2 0x74D ADD MSTORE DUP2 DUP2 PUSH2 0x7AB ADD MSTORE DUP2 DUP2 PUSH2 0x80D ADD MSTORE DUP2 DUP2 PUSH2 0xAEC ADD MSTORE DUP2 DUP2 PUSH2 0xB4D ADD MSTORE DUP2 DUP2 PUSH2 0xC10 ADD MSTORE DUP2 DUP2 PUSH2 0xC72 ADD MSTORE DUP2 DUP2 PUSH2 0xCF8 ADD MSTORE DUP2 DUP2 PUSH2 0xD40 ADD MSTORE PUSH2 0xDA2 ADD MSTORE RETURN JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x20A JUMPI JUMPDEST PUSH2 0x1ED DUP2 DUP4 PUSH2 0x2BA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x206 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x206 JUMPI PUSH0 DUP1 PUSH2 0xDC JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x1E3 JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH4 0xD6F1CB05 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP DUP6 PUSH1 0x80 MLOAD AND EQ PUSH0 PUSH2 0xAC JUMP JUMPDEST SWAP3 POP POP POP DUP6 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x26A JUMPI JUMPDEST PUSH2 0x251 DUP2 DUP4 PUSH2 0x2BA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x206 JUMPI DUP7 PUSH2 0x264 DUP5 SWAP3 PUSH2 0x2F1 JUMP JUMPDEST PUSH0 PUSH2 0xA0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x247 JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 POP DUP5 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2A9 JUMPI JUMPDEST PUSH2 0x292 DUP2 DUP4 PUSH2 0x2BA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x206 JUMPI PUSH2 0x2A3 SWAP1 PUSH2 0x2F1 JUMP JUMPDEST PUSH0 PUSH2 0x72 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x288 JUMP JUMPDEST DUP8 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x2DD JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x206 JUMPI JUMP INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP1 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x51DA116D EQ PUSH2 0x115E JUMPI POP DUP1 PUSH4 0x7EA3A964 EQ PUSH2 0x10F0 JUMPI DUP1 PUSH4 0xC2AD0F14 EQ PUSH2 0xBB JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x4A JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xB8 JUMPI DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xB8 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xE4E JUMPI PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xE4E JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0xE4E JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0xE4E JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x10C3 JUMPI DUP2 PUSH1 0x5 SHL SWAP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x12B PUSH1 0x20 DUP5 ADD DUP6 PUSH2 0x11DE JUMP JUMPDEST DUP4 MSTORE PUSH1 0x24 PUSH1 0x20 DUP5 ADD SWAP3 DUP3 ADD ADD SWAP1 CALLDATASIZE DUP3 GT PUSH2 0xE4E JUMPI PUSH1 0x24 ADD SWAP2 JUMPDEST DUP2 DUP4 LT PUSH2 0x1096 JUMPI POP POP POP PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH2 0x106E JUMPI PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH0 SLOAD PUSH1 0xFF DUP2 AND PUSH2 0x1046 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR PUSH0 SSTORE PUSH1 0x40 MLOAD PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH32 0x8A3C5C6900000000000000000000000000000000000000000000000000000000 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xFD5 JUMPI PUSH0 SWAP2 PUSH2 0x1014 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH32 0xA93DF2A400000000000000000000000000000000000000000000000000000000 PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xFD5 JUMPI PUSH0 SWAP3 PUSH2 0xFE0 JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xE4E JUMPI PUSH1 0x40 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL DUP1 ISZERO PUSH2 0xFD5 JUMPI PUSH2 0xFC0 JUMPI JUMPDEST POP SWAP1 DUP4 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xA04 JUMPI PUSH1 0x40 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP4 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xEDD JUMPI DUP5 SWAP2 PUSH2 0xFAC JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x7869EE1800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0x4 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xEDD JUMPI DUP5 SWAP2 PUSH2 0xF77 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 PUSH32 0x55FB76AF00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xE9B JUMPI DUP6 SWAP3 PUSH2 0xF40 JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xF3C JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0x8A3C5C6900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xE9B JUMPI DUP6 SWAP2 PUSH2 0xF28 JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xF24 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xA93DF2A400000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE DUP4 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xEDD JUMPI DUP5 SWAP2 PUSH2 0xF10 JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xA04 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP3 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xA2B JUMPI DUP4 SWAP2 PUSH2 0xEFC JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xA13 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL DUP1 ISZERO PUSH2 0xA08 JUMPI PUSH2 0xEE8 JUMPI JUMPDEST POP JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0xA36 JUMPI DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 PUSH1 0x5 SHL DUP6 ADD ADD MLOAD AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xA13 JUMPI PUSH1 0x40 MLOAD PUSH32 0x71ECC8FB00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 PUSH1 0x4 DUP3 ADD MSTORE DUP3 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xA2B JUMPI DUP4 SWAP2 PUSH2 0xA17 JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xA13 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0x71447EA800000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xA08 JUMPI PUSH2 0x9F0 JUMPI JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x851 JUMP JUMPDEST PUSH2 0x9F9 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xA04 JUMPI DUP3 PUSH0 PUSH2 0x9E6 JUMP JUMPDEST DUP3 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST PUSH2 0xA20 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xA13 JUMPI DUP2 PUSH0 PUSH2 0x931 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP6 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH1 0x40 MLOAD SWAP1 PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH32 0x2D77138900000000000000000000000000000000000000000000000000000000 DUP1 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x20 DUP4 PUSH1 0x24 DUP2 DUP6 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xEDD JUMPI DUP5 SWAP4 PUSH2 0xEA6 JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xE82 JUMPI PUSH1 0x40 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP5 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP5 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xE9B JUMPI DUP6 SWAP2 PUSH2 0xE87 JUMPI JUMPDEST POP POP DUP2 EXTCODESIZE ISZERO PUSH2 0xE82 JUMPI DUP4 SWAP2 PUSH1 0x24 DUP4 SWAP3 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH1 0x4 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xA2B JUMPI DUP4 SWAP2 PUSH2 0xE6E JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xE1E JUMPI PUSH1 0x40 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL DUP1 ISZERO PUSH2 0xA08 JUMPI PUSH2 0xE5A JUMPI JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0xA217FDDF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0x4 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xA08 JUMPI DUP3 SWAP2 PUSH2 0xE21 JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xE1E JUMPI PUSH1 0x40 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL DUP1 ISZERO PUSH2 0xA08 JUMPI PUSH2 0xE0A JUMPI JUMPDEST POP PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP1 RETURN JUMPDEST PUSH2 0xE13 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xB8 JUMPI DUP1 DUP3 PUSH2 0xDE4 JUMP JUMPDEST POP REVERT JUMPDEST SWAP2 POP POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xE52 JUMPI JUMPDEST DUP2 PUSH2 0xE3D PUSH1 0x20 SWAP4 DUP4 PUSH2 0x11DE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xE4E JUMPI DUP2 SWAP1 MLOAD DUP4 PUSH2 0xD28 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xE30 JUMP JUMPDEST PUSH2 0xE63 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xB8 JUMPI DUP1 DUP3 PUSH2 0xCB4 JUMP JUMPDEST PUSH2 0xE77 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xE1E JUMPI DUP2 DUP5 PUSH2 0xBF7 JUMP JUMPDEST POP POP POP REVERT JUMPDEST PUSH2 0xE90 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xE82 JUMPI DUP4 DUP7 PUSH2 0xB92 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP8 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP4 POP SWAP2 POP PUSH1 0x20 DUP4 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xED5 JUMPI JUMPDEST DUP2 PUSH2 0xEC3 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x11DE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xE4E JUMPI DUP4 SWAP3 MLOAD SWAP2 DUP6 PUSH2 0xAD4 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xEB6 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP7 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0xEF1 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xA13 JUMPI DUP2 PUSH0 PUSH2 0x84F JUMP JUMPDEST PUSH2 0xF05 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xA13 JUMPI DUP2 PUSH0 PUSH2 0x792 JUMP JUMPDEST PUSH2 0xF19 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xA04 JUMPI DUP3 PUSH0 PUSH2 0x6D2 JUMP JUMPDEST DUP4 DUP1 REVERT JUMPDEST PUSH2 0xF31 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xF24 JUMPI DUP4 PUSH0 PUSH2 0x61A JUMP JUMPDEST DUP5 DUP1 REVERT JUMPDEST SWAP5 POP SWAP1 POP PUSH1 0x20 DUP5 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xF6F JUMPI JUMPDEST DUP2 PUSH2 0xF5D PUSH1 0x20 SWAP4 DUP4 PUSH2 0x11DE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xE4E JUMPI DUP6 SWAP4 MLOAD SWAP1 PUSH0 PUSH2 0x563 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xF50 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 DUP4 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xFA4 JUMPI JUMPDEST DUP2 PUSH2 0xF93 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x11DE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xE4E JUMPI DUP5 SWAP3 MLOAD PUSH0 PUSH2 0x4EE JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xF86 JUMP JUMPDEST PUSH2 0xFB5 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xA04 JUMPI DUP3 PUSH0 PUSH2 0x479 JUMP JUMPDEST PUSH2 0xFCC SWAP2 SWAP3 SWAP5 POP PUSH2 0x11CA JUMP JUMPDEST PUSH0 SWAP3 SWAP1 PUSH0 PUSH2 0x3B8 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x100C JUMPI JUMPDEST DUP2 PUSH2 0xFFC PUSH1 0x20 SWAP4 DUP4 PUSH2 0x11DE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xE4E JUMPI MLOAD SWAP1 PUSH0 PUSH2 0x2FD JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xFEF JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x103E JUMPI JUMPDEST DUP2 PUSH2 0x102F PUSH1 0x20 SWAP4 DUP4 PUSH2 0x11DE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xE4E JUMPI MLOAD PUSH0 PUSH2 0x262 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1022 JUMP JUMPDEST PUSH32 0xCA1C3CBC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xE4E JUMPI DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x144 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xE4E JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xE4E JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xE4E JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xE4E JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x10C3 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x10C3 JUMPI PUSH1 0x40 MSTORE JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP10 0xC1 0xE7 0xAB SIGNEXTEND 0xED PUSH29 0x157302CC163E0DC09D0DF8A426A97850FCCE96C1625FB28E1B64736F6C PUSH4 0x4300081B STOP CALLER ","sourceMap":"2077:5026:28:-:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;-1:-1:-1;;;3027:33:28;;-1:-1:-1;;;;;2077:5026:28;;;;;;3027:33;2077:5026;3027:33;2077:5026;;3027:33;;;;;;;-1:-1:-1;3027:33:28;;;-1:-1:-1;;3008:52:28;;2077:5026;;-1:-1:-1;;;3193:25:28;;2077:5026;;;;3193:25;2077:5026;3027:33;2077:5026;;3193:25;;;;;;;;;;;-1:-1:-1;3193:25:28;;;-1:-1:-1;2077:5026:28;;3193:35;;;;:76;;;-1:-1:-1;3189:136:28;;;3027:33;3335:14;;;;;3359:36;;2077:5026;;;;;;;;;3445:21;;;;;;;;;-1:-1:-1;3445:21:28;;;-1:-1:-1;2077:5026:28;;;;3406:62;2077:5026;;;;;;;3008:52;2077:5026;;;;;;;;;;;;;;;3359:36;2077:5026;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3335:14;2077:5026;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3445:21;;;;;;;;;;;;;;;;:::i;:::-;;;2077:5026;;;;;;;;;;;;3445:21;;;;2077:5026;-1:-1:-1;2077:5026:28;;3445:21;;;;;;2077:5026;;;-1:-1:-1;2077:5026:28;;;;;3189:136;3292:22;;;-1:-1:-1;3292:22:28;3027:33;-1:-1:-1;3292:22:28;3193:76;2077:5026;;;3008:52;2077:5026;;3232:37;3193:76;;;:25;;;;;;;;;;;;;;;;;;:::i;:::-;;;2077:5026;;;;;;;;;:::i;:::-;3193:25;;;;;;;;;2077:5026;;;-1:-1:-1;2077:5026:28;;;;;3027:33;;;;;;;;;;;;;;;;:::i;:::-;;;2077:5026;;;;;;;:::i;:::-;3027:33;;;;;;;;;2077:5026;;;-1:-1:-1;2077:5026:28;;;;;;;;;;-1:-1:-1;;2077:5026:28;;;;-1:-1:-1;;;;;2077:5026:28;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;2077:5026:28;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{"abi_encode_bytes32_address":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"finalize_allocation":{"entryPoint":4574,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_6997":{"entryPoint":4554,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"8871":[{"length":32,"start":1214},{"length":32,"start":1331},{"length":32,"start":4410}],"8874":[{"length":32,"start":541},{"length":32,"start":717},{"length":32,"start":1403},{"length":32,"start":1514},{"length":32,"start":1587},{"length":32,"start":1698},{"length":32,"start":2194},{"length":32,"start":2305},{"length":32,"start":2378},{"length":32,"start":2489},{"length":32,"start":3010},{"length":32,"start":4518}],"8877":[{"length":32,"start":148},{"length":32,"start":2639}],"8880":[{"length":32,"start":789},{"length":32,"start":886},{"length":32,"start":979},{"length":32,"start":1076},{"length":32,"start":1771},{"length":32,"start":1869},{"length":32,"start":1963},{"length":32,"start":2061},{"length":32,"start":2796},{"length":32,"start":2893},{"length":32,"start":3088},{"length":32,"start":3186},{"length":32,"start":3320},{"length":32,"start":3392},{"length":32,"start":3490}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f905f3560e01c90816351da116d1461115e575080637ea3a964146110f0578063c2ad0f14146100bb5763fbfa77cf1461004a575f80fd5b346100b857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100b857602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b80fd5b5034610e4e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e4e5767ffffffffffffffff600435818111610e4e5736602382011215610e4e5780600401359182116110c3578160051b906040519261012b60208401856111de565b83526024602084019282010190368211610e4e57602401915b818310611096575050507f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c61106e5760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d5f5460ff8116611046577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001175f556040517f851c1bb30000000000000000000000000000000000000000000000000000000081527f8a3c5c690000000000000000000000000000000000000000000000000000000060048201526020816024817f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165afa908115610fd5575f91611014575b50604051907f851c1bb30000000000000000000000000000000000000000000000000000000082527fa93df2a400000000000000000000000000000000000000000000000000000000600483015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610fd5575f92610fe0575b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610e4e576040517f2f2ff15d000000000000000000000000000000000000000000000000000000008152600481018290523060248201525f81604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af18015610fd557610fc0575b5090839173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610a04576040517f2f2ff15d000000000000000000000000000000000000000000000000000000008152600481018390523060248201528381604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af1908115610edd578491610fac575b50506040517f7869ee1800000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610edd578491610f77575b50604051907f55fb76af00000000000000000000000000000000000000000000000000000000825260208260048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610e9b578592610f40575b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610f3c57604051907f8a3c5c69000000000000000000000000000000000000000000000000000000008252600482015284816024818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610e9b578591610f28575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610f2457604051907fa93df2a4000000000000000000000000000000000000000000000000000000008252600482015283816024818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610edd578491610f10575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610a04576040517f36568abe00000000000000000000000000000000000000000000000000000000815260048101919091523060248201528281604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af1908115610a2b578391610efc575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610a13576040517f36568abe00000000000000000000000000000000000000000000000000000000815260048101919091523060248201528181604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af18015610a0857610ee8575b505b8151811015610a36578273ffffffffffffffffffffffffffffffffffffffff60208360051b850101511673ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610a13576040517f71ecc8fb00000000000000000000000000000000000000000000000000000000815281600482015282816024818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610a2b578391610a17575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610a1357604051907f71447ea8000000000000000000000000000000000000000000000000000000008252600482015281816024818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610a08576109f0575b5050600101610851565b6109f9906111ca565b610a0457825f6109e6565b8280fd5b6040513d84823e3d90fd5b5080fd5b610a20906111ca565b610a1357815f610931565b6040513d85823e3d90fd5b828073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016604051907f851c1bb30000000000000000000000000000000000000000000000000000000082527f2d77138900000000000000000000000000000000000000000000000000000000806004840152602083602481855afa928315610edd578493610ea6575b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610e82576040517f2f2ff15d000000000000000000000000000000000000000000000000000000008152600481018490523060248201528481604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af1908115610e9b578591610e87575b5050813b15610e82578391602483926040519485938492835273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660048401525af1908115610a2b578391610e6e575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610e1e576040517f36568abe00000000000000000000000000000000000000000000000000000000815260048101919091523060248201528181604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af18015610a0857610e5a575b506040517fa217fddf00000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610a08578291610e21575b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610e1e576040517f36568abe00000000000000000000000000000000000000000000000000000000815260048101919091523060248201528181604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af18015610a0857610e0a575b507f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d80f35b610e13906111ca565b6100b8578082610de4565b50fd5b9150506020813d602011610e52575b81610e3d602093836111de565b81010312610e4e5781905183610d28565b5f80fd5b3d9150610e30565b610e63906111ca565b6100b8578082610cb4565b610e77906111ca565b610e1e578184610bf7565b505050fd5b610e90906111ca565b610e82578386610b92565b6040513d87823e3d90fd5b935091506020833d602011610ed5575b81610ec3602093836111de565b81010312610e4e578392519185610ad4565b3d9150610eb6565b6040513d86823e3d90fd5b610ef1906111ca565b610a1357815f61084f565b610f05906111ca565b610a1357815f610792565b610f19906111ca565b610a0457825f6106d2565b8380fd5b610f31906111ca565b610f2457835f61061a565b8480fd5b945090506020843d602011610f6f575b81610f5d602093836111de565b81010312610e4e57859351905f610563565b3d9150610f50565b9350506020833d602011610fa4575b81610f93602093836111de565b81010312610e4e578492515f6104ee565b3d9150610f86565b610fb5906111ca565b610a0457825f610479565b610fcc919294506111ca565b5f92905f6103b8565b6040513d5f823e3d90fd5b9091506020813d60201161100c575b81610ffc602093836111de565b81010312610e4e5751905f6102fd565b3d9150610fef565b90506020813d60201161103e575b8161102f602093836111de565b81010312610e4e57515f610262565b3d9150611022565b7fca1c3cbc000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b823573ffffffffffffffffffffffffffffffffffffffff81168103610e4e57815260209283019201610144565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b34610e4e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e4e57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610e4e575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610e4e5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b67ffffffffffffffff81116110c357604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176110c35760405256fea264697066735822122099c1e7ab0bed7c157302cc163e0dc09d0df8a426a97850fcce96c1625fb28e1b64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP1 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x51DA116D EQ PUSH2 0x115E JUMPI POP DUP1 PUSH4 0x7EA3A964 EQ PUSH2 0x10F0 JUMPI DUP1 PUSH4 0xC2AD0F14 EQ PUSH2 0xBB JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x4A JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xB8 JUMPI DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xB8 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xE4E JUMPI PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xE4E JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0xE4E JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0xE4E JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x10C3 JUMPI DUP2 PUSH1 0x5 SHL SWAP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x12B PUSH1 0x20 DUP5 ADD DUP6 PUSH2 0x11DE JUMP JUMPDEST DUP4 MSTORE PUSH1 0x24 PUSH1 0x20 DUP5 ADD SWAP3 DUP3 ADD ADD SWAP1 CALLDATASIZE DUP3 GT PUSH2 0xE4E JUMPI PUSH1 0x24 ADD SWAP2 JUMPDEST DUP2 DUP4 LT PUSH2 0x1096 JUMPI POP POP POP PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH2 0x106E JUMPI PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH0 SLOAD PUSH1 0xFF DUP2 AND PUSH2 0x1046 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR PUSH0 SSTORE PUSH1 0x40 MLOAD PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH32 0x8A3C5C6900000000000000000000000000000000000000000000000000000000 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xFD5 JUMPI PUSH0 SWAP2 PUSH2 0x1014 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH32 0xA93DF2A400000000000000000000000000000000000000000000000000000000 PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xFD5 JUMPI PUSH0 SWAP3 PUSH2 0xFE0 JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xE4E JUMPI PUSH1 0x40 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL DUP1 ISZERO PUSH2 0xFD5 JUMPI PUSH2 0xFC0 JUMPI JUMPDEST POP SWAP1 DUP4 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xA04 JUMPI PUSH1 0x40 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP4 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xEDD JUMPI DUP5 SWAP2 PUSH2 0xFAC JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x7869EE1800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0x4 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xEDD JUMPI DUP5 SWAP2 PUSH2 0xF77 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 PUSH32 0x55FB76AF00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xE9B JUMPI DUP6 SWAP3 PUSH2 0xF40 JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xF3C JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0x8A3C5C6900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xE9B JUMPI DUP6 SWAP2 PUSH2 0xF28 JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xF24 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xA93DF2A400000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE DUP4 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xEDD JUMPI DUP5 SWAP2 PUSH2 0xF10 JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xA04 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP3 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xA2B JUMPI DUP4 SWAP2 PUSH2 0xEFC JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xA13 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL DUP1 ISZERO PUSH2 0xA08 JUMPI PUSH2 0xEE8 JUMPI JUMPDEST POP JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0xA36 JUMPI DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 PUSH1 0x5 SHL DUP6 ADD ADD MLOAD AND PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xA13 JUMPI PUSH1 0x40 MLOAD PUSH32 0x71ECC8FB00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 PUSH1 0x4 DUP3 ADD MSTORE DUP3 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xA2B JUMPI DUP4 SWAP2 PUSH2 0xA17 JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xA13 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0x71447EA800000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xA08 JUMPI PUSH2 0x9F0 JUMPI JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x851 JUMP JUMPDEST PUSH2 0x9F9 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xA04 JUMPI DUP3 PUSH0 PUSH2 0x9E6 JUMP JUMPDEST DUP3 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST PUSH2 0xA20 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xA13 JUMPI DUP2 PUSH0 PUSH2 0x931 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP6 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH1 0x40 MLOAD SWAP1 PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH32 0x2D77138900000000000000000000000000000000000000000000000000000000 DUP1 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x20 DUP4 PUSH1 0x24 DUP2 DUP6 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xEDD JUMPI DUP5 SWAP4 PUSH2 0xEA6 JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xE82 JUMPI PUSH1 0x40 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP5 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP5 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xE9B JUMPI DUP6 SWAP2 PUSH2 0xE87 JUMPI JUMPDEST POP POP DUP2 EXTCODESIZE ISZERO PUSH2 0xE82 JUMPI DUP4 SWAP2 PUSH1 0x24 DUP4 SWAP3 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH1 0x4 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xA2B JUMPI DUP4 SWAP2 PUSH2 0xE6E JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xE1E JUMPI PUSH1 0x40 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL DUP1 ISZERO PUSH2 0xA08 JUMPI PUSH2 0xE5A JUMPI JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0xA217FDDF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0x4 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xA08 JUMPI DUP3 SWAP2 PUSH2 0xE21 JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xE1E JUMPI PUSH1 0x40 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL DUP1 ISZERO PUSH2 0xA08 JUMPI PUSH2 0xE0A JUMPI JUMPDEST POP PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP1 RETURN JUMPDEST PUSH2 0xE13 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xB8 JUMPI DUP1 DUP3 PUSH2 0xDE4 JUMP JUMPDEST POP REVERT JUMPDEST SWAP2 POP POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xE52 JUMPI JUMPDEST DUP2 PUSH2 0xE3D PUSH1 0x20 SWAP4 DUP4 PUSH2 0x11DE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xE4E JUMPI DUP2 SWAP1 MLOAD DUP4 PUSH2 0xD28 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xE30 JUMP JUMPDEST PUSH2 0xE63 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xB8 JUMPI DUP1 DUP3 PUSH2 0xCB4 JUMP JUMPDEST PUSH2 0xE77 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xE1E JUMPI DUP2 DUP5 PUSH2 0xBF7 JUMP JUMPDEST POP POP POP REVERT JUMPDEST PUSH2 0xE90 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xE82 JUMPI DUP4 DUP7 PUSH2 0xB92 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP8 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP4 POP SWAP2 POP PUSH1 0x20 DUP4 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xED5 JUMPI JUMPDEST DUP2 PUSH2 0xEC3 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x11DE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xE4E JUMPI DUP4 SWAP3 MLOAD SWAP2 DUP6 PUSH2 0xAD4 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xEB6 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP7 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0xEF1 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xA13 JUMPI DUP2 PUSH0 PUSH2 0x84F JUMP JUMPDEST PUSH2 0xF05 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xA13 JUMPI DUP2 PUSH0 PUSH2 0x792 JUMP JUMPDEST PUSH2 0xF19 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xA04 JUMPI DUP3 PUSH0 PUSH2 0x6D2 JUMP JUMPDEST DUP4 DUP1 REVERT JUMPDEST PUSH2 0xF31 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xF24 JUMPI DUP4 PUSH0 PUSH2 0x61A JUMP JUMPDEST DUP5 DUP1 REVERT JUMPDEST SWAP5 POP SWAP1 POP PUSH1 0x20 DUP5 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xF6F JUMPI JUMPDEST DUP2 PUSH2 0xF5D PUSH1 0x20 SWAP4 DUP4 PUSH2 0x11DE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xE4E JUMPI DUP6 SWAP4 MLOAD SWAP1 PUSH0 PUSH2 0x563 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xF50 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 DUP4 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xFA4 JUMPI JUMPDEST DUP2 PUSH2 0xF93 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x11DE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xE4E JUMPI DUP5 SWAP3 MLOAD PUSH0 PUSH2 0x4EE JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xF86 JUMP JUMPDEST PUSH2 0xFB5 SWAP1 PUSH2 0x11CA JUMP JUMPDEST PUSH2 0xA04 JUMPI DUP3 PUSH0 PUSH2 0x479 JUMP JUMPDEST PUSH2 0xFCC SWAP2 SWAP3 SWAP5 POP PUSH2 0x11CA JUMP JUMPDEST PUSH0 SWAP3 SWAP1 PUSH0 PUSH2 0x3B8 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x100C JUMPI JUMPDEST DUP2 PUSH2 0xFFC PUSH1 0x20 SWAP4 DUP4 PUSH2 0x11DE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xE4E JUMPI MLOAD SWAP1 PUSH0 PUSH2 0x2FD JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xFEF JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x103E JUMPI JUMPDEST DUP2 PUSH2 0x102F PUSH1 0x20 SWAP4 DUP4 PUSH2 0x11DE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xE4E JUMPI MLOAD PUSH0 PUSH2 0x262 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1022 JUMP JUMPDEST PUSH32 0xCA1C3CBC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xE4E JUMPI DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x144 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xE4E JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xE4E JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xE4E JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xE4E JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x10C3 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x10C3 JUMPI PUSH1 0x40 MSTORE JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP10 0xC1 0xE7 0xAB SIGNEXTEND 0xED PUSH29 0x157302CC163E0DC09D0DF8A426A97850FCCE96C1625FB28E1B64736F6C PUSH4 0x4300081B STOP CALLER ","sourceMap":"2077:5026:28:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2276:29;2077:5026;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;2806:53:17;;;551:66:16;2806:53:17;1316:93:16;;1529:4;551:66;3051:52:17;2077:5026:28;;;;;4007:65;;2077:5026;;1529:4:16;2077:5026:28;;;;;;5667:144;;5735:66;2077:5026;5667:144;;2077:5026;;;;;5691:16;2077:5026;;5667:144;;;;;;;2077:5026;5667:144;;;2077:5026;;;;5845:145;2077:5026;5845:145;;5913:67;2077:5026;5845:145;;2077:5026;;5691:16;2077:5026;5691:16;2077:5026;5691:16;2077:5026;5845:145;;;;;;;2077:5026;5845:145;;;2077:5026;6001:11;2077:5026;6001:11;2077:5026;6001:49;;;;2077:5026;;;6001:49;;2077:5026;6001:49;;2077:5026;;;6044:4;2077:5026;;;;-1:-1:-1;2077:5026:28;;;-1:-1:-1;6001:11:28;2077:5026;;6001:49;;;;;;;;2077:5026;6001:11;;;;2077:5026;6001:11;2077:5026;6060:50;;;;2077:5026;;;6060:50;;2077:5026;6060:50;;2077:5026;;;6044:4;2077:5026;;;;6044:4;2077:5026;;;6044:4;6001:11;2077:5026;;6060:50;;;;;;;;;;;2077:5026;;;;;;6202:53;;2077:5026;6202:16;2077:5026;6202:16;2077:5026;6202:16;2077:5026;6202:53;;;;;;;;;;;2077:5026;;;;6300:54;2077:5026;6300:54;;2077:5026;6202:16;2077:5026;6202:16;2077:5026;6202:16;2077:5026;6300:54;;;;;;;;;;;2077:5026;5691:16;2077:5026;5691:16;2077:5026;6365:76;;;;2077:5026;;6365:76;5735:66;6365:76;;2077:5026;6365:76;;2077:5026;5691:16;;2077:5026;5691:16;;2077:5026;5691:16;2077:5026;6365:76;;;;;;;;;;;2077:5026;5691:16;;2077:5026;5691:16;2077:5026;6451:78;;;;2077:5026;;6451:78;5913:67;6451:78;;2077:5026;6451:78;;2077:5026;5691:16;;2077:5026;5691:16;;2077:5026;5691:16;2077:5026;6451:78;;;;;;;;;;;2077:5026;6001:11;;2077:5026;6001:11;2077:5026;6571:52;;;;2077:5026;;;6571:52;;2077:5026;6571:52;;2077:5026;;;;6044:4;2077:5026;;;;;;;;;6001:11;2077:5026;;6571:52;;;;;;;;;;;2077:5026;6001:11;;2077:5026;6001:11;2077:5026;6633:53;;;;2077:5026;;;6633:53;;2077:5026;6633:53;;2077:5026;;;;6044:4;2077:5026;;;;;;;;;6001:11;2077:5026;;6633:53;;;;;;;;2077:5026;4974:13;5007:3;2077:5026;;4989:16;;;;;2077:5026;;;;;;;;;;;;5691:16;2077:5026;5162:54;;;;2077:5026;;;5162:54;;;2077:5026;5162:54;;2077:5026;5691:16;;2077:5026;5691:16;;2077:5026;5691:16;2077:5026;5162:54;;;;;;;;;;;5007:3;5691:16;;2077:5026;5691:16;2077:5026;5230:55;;;;2077:5026;;5230:55;2077:5026;5230:55;;2077:5026;5230:55;;2077:5026;5691:16;;2077:5026;5691:16;;2077:5026;5691:16;2077:5026;5230:55;;;;;;;;5007:3;;;1529:4:16;2077:5026:28;4974:13;;5230:55;;;;:::i;:::-;2077:5026;;5230:55;;;;2077:5026;;;;5230:55;2077:5026;;;;;;;;;5230:55;2077:5026;;;5162:54;;;;:::i;:::-;2077:5026;;5162:54;;;;;2077:5026;;;;;;;;;4989:16;;6806:5;2077:5026;6806:5;2077:5026;;;6782:112;2077:5026;6782:112;;6839:45;6782:112;2077:5026;6782:112;;2077:5026;;6782:112;2077:5026;6782:112;;;;;;;;;;;;;4969:327;6001:11;2077:5026;6001:11;2077:5026;6905:58;;;;2077:5026;;;6905:58;;2077:5026;6905:58;;2077:5026;;;6044:4;2077:5026;;;;6044:4;2077:5026;;;6044:4;6001:11;2077:5026;;6905:58;;;;;;;;;;;4969:327;6974:48;;;;;;;2077:5026;;;;;;;6974:48;;;;;;;2077:5026;5691:16;2077:5026;;6974:48;;2077:5026;6974:48;;;;;;;;;;;4969:327;6001:11;;2077:5026;6001:11;2077:5026;7033:61;;;;2077:5026;;;7033:61;;2077:5026;7033:61;;2077:5026;;;;6044:4;2077:5026;;;;;;;;;6001:11;2077:5026;;7033:61;;;;;;;;4969:327;2077:5026;;;;5451:32;;2077:5026;6001:11;2077:5026;6001:11;2077:5026;6001:11;2077:5026;5451:32;;;;;;;;;;;4969:327;6001:11;2077:5026;6001:11;2077:5026;5426:73;;;;2077:5026;;;5426:73;;2077:5026;5426:73;;2077:5026;;;;6044:4;2077:5026;;;;;;;;;6001:11;2077:5026;;5426:73;;;;;;;;4969:327;3051:52:17;551:66:16;3051:52:17;2077:5026:28;;5426:73;;;;:::i;:::-;2077:5026;;5426:73;;;;;2077:5026;;5451:32;;;;2077:5026;5451:32;;2077:5026;5451:32;;;;;;2077:5026;5451:32;;;:::i;:::-;;;2077:5026;;;;;;;5451:32;;;2077:5026;;;;5451:32;;;-1:-1:-1;5451:32:28;;7033:61;;;;:::i;:::-;2077:5026;;7033:61;;;;6974:48;;;;:::i;:::-;2077:5026;;6974:48;;;;;2077:5026;;;;6905:58;;;;:::i;:::-;2077:5026;;6905:58;;;;;2077:5026;;;;;;;;;6782:112;;;;;2077:5026;6782:112;;2077:5026;6782:112;;;;;;2077:5026;6782:112;;;:::i;:::-;;;2077:5026;;;;;;;6782:112;;;;;;;-1:-1:-1;6782:112:28;;;2077:5026;;;;;;;;;6633:53;;;;:::i;:::-;2077:5026;;6633:53;;;;6571:52;;;;:::i;:::-;2077:5026;;6571:52;;;;6451:78;;;;:::i;:::-;2077:5026;;6451:78;;;;;2077:5026;;;6365:76;;;;:::i;:::-;2077:5026;;6365:76;;;;;2077:5026;;;6300:54;;;;;2077:5026;6300:54;;2077:5026;6300:54;;;;;;2077:5026;6300:54;;;:::i;:::-;;;2077:5026;;;;;;;6300:54;;;;;;;-1:-1:-1;6300:54:28;;6202:53;;;;2077:5026;6202:53;;2077:5026;6202:53;;;;;;2077:5026;6202:53;;;:::i;:::-;;;2077:5026;;;;;;;6202:53;;;;;;-1:-1:-1;6202:53:28;;6060:50;;;;:::i;:::-;2077:5026;;6060:50;;;;6001:49;;;;;;;:::i;:::-;2077:5026;6001:49;;;;;;2077:5026;;;;;;;;;5845:145;;;;2077:5026;5845:145;;2077:5026;5845:145;;;;;;2077:5026;5845:145;;;:::i;:::-;;;2077:5026;;;;;5845:145;;;;;;;-1:-1:-1;5845:145:28;;5667:144;;;2077:5026;5667:144;;2077:5026;5667:144;;;;;;2077:5026;5667:144;;;:::i;:::-;;;2077:5026;;;;;5667:144;;;;;;-1:-1:-1;5667:144:28;;4007:65;4044:17;2077:5026;4044:17;2077:5026;;4044:17;1316:93:16;1368:30;2077:5026:28;1368:30:16;2077:5026:28;;1368:30:16;2077:5026:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2151:56;2077:5026;;;;;;;;;;;;;;;;2213:56;2077:5026;2213:56;2077:5026;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o"},"methodIdentifiers":{"migrateFeeController(address[])":"c2ad0f14","newFeeController()":"51da116d","oldFeeController()":"7ea3a964","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"_vault\",\"type\":\"address\"},{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"_newFeeController\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyMigrated\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidFeeController\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"migrateFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"newFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oldFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These events enable tracking pool protocol fees under all circumstances (in particular, when protocol fees are initially turned off). It also adds some infrastructure that makes future migrations easier, and removes redundant poolCreator storage. This simple migration assumes: 1) There are no pools with pool creators 2) There are no pools with protocol fee exemptions or overrides 3) Migrating the complete list of pools can be done in a single transaction. These simplifications enable simply calling `migrateFeeController` once with the complete list of pools. After the migration, the Vault will point to the new fee controller, and any collection thereafter will go there. If there are any residual fee amounts in the old fee controller (i.e., that were collected but not withdrawn), governance will still need to withdraw from the old fee controller. Otherwise, no further interaction with the old controller is necessary. Associated with `20250221-protocol-fee-controller-migration`.\",\"errors\":{\"InvalidFeeController()\":[{\"details\":\"ProtocolFeeController contracts return the address of the Vault they were deployed with. Ensure that both the old and new controllers reference the same vault.\"}]},\"kind\":\"dev\",\"methods\":{\"migrateFeeController(address[])\":{\"details\":\"Call this with the full set of pools to perform the migration. After this runs, the Vault will point to the new fee controller, which will have a copy of all the relevant state from the old controller. Also, all permissions will be revoked, and the contract will be disabled.\",\"params\":{\"pools\":\"The complete set of pools to migrate\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyMigrated()\":[{\"notice\":\"Migration can only be performed once.\"}],\"InvalidFeeController()\":[{\"notice\":\"Attempt to deploy this contract with invalid parameters.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}]},\"kind\":\"user\",\"methods\":{\"migrateFeeController(address[])\":{\"notice\":\"Permissionless migration function.\"}},\"notice\":\"Migrate from the original ProtocolFeeController to one with extra events.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ProtocolFeeControllerMigration.sol\":\"ProtocolFeeControllerMigration\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol\":{\"keccak256\":\"0x434eda908f66d99d967c2c2b233337227c331cd79655ec5b0ddcc76db7a20606\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b0b6c4bc095113dfbaeb9d9a6f9602f0f1a79b075c82d5ccccff7a1b67af1ce8\",\"dweb:/ipfs/QmaePfy8V5U9UFqkDtdTvPjJLmo1XEorPrC1fMVB35n86Y\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xe0e5193402394ef505f87b206d8e64e1ea8b604feeb2ea8bbd054050778c162d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c962b5d782a8ec4341741dd49daf071e23560548ad95ed00e1531379cfcf0a2e\",\"dweb:/ipfs/QmbPn63SLEZp719KdAtPa4urbhQwqYzfewWfNRtw3nyy8c\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\":{\"keccak256\":\"0xe45521ca4ed88ce5d25262f764132ad923c9207db89a51d5e76e960c3ee7e9f1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7f1bb43ba9746184f4a0ac05ab2b1b62bc56da755346e518c8f427478aad2a\",\"dweb:/ipfs/QmYKgjtZ7Bu8MqQPQf1YBPb8FXfWaGYtL2fMQcZR3iBod1\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x67518bf3b6bd96f5897c56867fc57f3c31bb9b97abf93cf960de145a5eb82414\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://563857d8606cbd4f727c75f09901d09ec9faa73778fe85e2af851982cdb9b6e8\",\"dweb:/ipfs/QmU7x1gWCPGPAcxA8Qq3z8hscrGRFwsc28qad4RMihZ8qB\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"contracts/ProtocolFeeControllerMigration.sol\":{\"keccak256\":\"0xee813da8870157b65605312b549db970f60953eebaf01191c6c21b02292152b9\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://25752ef15a6940fa106538f0be3ecab62ae8b436319769556e400493417ccc74\",\"dweb:/ipfs/QmczThRsBQihuxveGf12KdtdeoQcRMaJaXapN3raD5S8vD\"]}},\"version\":1}"}},"contracts/ProtocolFeeControllerMigrationV2.sol":{"ProtocolFeeControllerMigrationV2":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"_vault","type":"address"},{"internalType":"contract IProtocolFeeController","name":"_newFeeController","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyMigrated","type":"error"},{"inputs":[],"name":"InvalidFeeController","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"WrongMigrationVersion","type":"error"},{"inputs":[],"name":"finalizeMigration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"","type":"address[]"}],"name":"migrateFeeController","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"migratePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"newFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_contract_IVault_fromMemory":{"entryPoint":868,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":813,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"61014060408181523461020d5780826113d68038038091610020828561032d565b83398101031261020d5761003382610364565b906100416020809401610364565b815163217cb6f560e21b81526001600160a01b039491600491858716919084818581865afa908115610323575f916102ee575b50608052845163fbfa77cf60e01b81528188169085818681855afa9081156102e45784918a915f916102ab575b5016149081159161029d575b5061028f57829184918760c05260a05285519283809263aaabadc560e01b82525afa908115610285579086915f9161024b575b501660e052610100943086526101209485526024838260a0511686519283809263851c1bb360e01b8252630874327f60e01b888301525afa938415610241575f94610211575b50508260015560e0511691823b1561020d575f926044849286519586938492632f2ff15d60e01b8452878401523060248401525af18015610203576101d8575b5050519061105d9283610379843960805183818161041a0152610d61015260a05183818161018901528181610297015281816109e30152610daf015260c05183818160b201526108f1015260e051838181610365015261087101525182610f20015251818181610cc10152610fae0152f35b6001600160401b0382116101f0575081525f5f610166565b604190634e487b7160e01b5f525260245ffd5b83513d5f823e3d90fd5b5f80fd5b9080929450813d831161023a575b610229818361032d565b8101031261020d5751915f80610126565b503d61021f565b85513d5f823e3d90fd5b809250848092503d831161027e575b610264818361032d565b8101031261020d5751858116810361020d5785905f6100e0565b503d61025a565b84513d5f823e3d90fd5b8263d6f1cb0560e01b5f525ffd5b90508760805116145f6100ad565b925050508581813d83116102dd575b6102c4818361032d565b8101031261020d57886102d78592610364565b5f6100a1565b503d6102ba565b87513d5f823e3d90fd5b90508481813d831161031c575b610305818361032d565b8101031261020d5761031690610364565b5f610074565b503d6102fb565b86513d5f823e3d90fd5b601f909101601f19168101906001600160401b0382119082101761035057604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b038216820361020d5756fe6080604081815260049182361015610015575f80fd5b5f925f358060e01c92836351da116d14610d85575082637ea3a96414610d35578263851c1bb314610ce55782638d928af814610c95578263aaabadc514610c5c578263b78b60871461078757508163b8350e2714610112578163c2ad0f14146100da575063fbfa77cf14610087575f80fd5b346100d657816003193601126100d6576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5080fd5b833461010f576100e936610e55565b507fc7b08f63000000000000000000000000000000000000000000000000000000008152fd5b80fd5b8383346100d65761012236610e55565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0091825c61075f576001946001845d845460ff811661073857908160ff88949360081c1615610253575b5085969373ffffffffffffffffffffffffffffffffffffffff90817f000000000000000000000000000000000000000000000000000000000000000016945b6101b7575b8780885d80f35b80979695975189101561024a578160208a60051b8301015116853b15610246578451907f0874327f000000000000000000000000000000000000000000000000000000008252848201528781602481838a5af1801561023c57610224575b508780999896979801986101ab565b61022e8891610dd3565b6102385789610215565b8680fd5b85513d8a823e3d90fd5b8780fd5b859697506101b0565b610100919293507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1617855573ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000169083517f851c1bb300000000000000000000000000000000000000000000000000000000928382527f8a3c5c690000000000000000000000000000000000000000000000000000000080868401526020908184602481865afa93841561072e578b946106ff575b5087519586527fa93df2a4000000000000000000000000000000000000000000000000000000009081888801528287602481875afa968715610618578c976106d0575b50857f00000000000000000000000000000000000000000000000000000000000000001695863b156106225789517f2f2ff15d00000000000000000000000000000000000000000000000000000000808252818b018881523060208201529091908f90829081906040010381838d5af180156106c457908f916106b0575b5050873b156106ac578a519081528981018981523060208201528e90829081906040010381838c5af1801561065a57908e91610698575b50507f0000000000000000000000000000000000000000000000000000000000000000168951907f7869ee1800000000000000000000000000000000000000000000000000000000825284828b81845afa91821561065a578a918f91879294610666575b508c51928380927f55fb76af0000000000000000000000000000000000000000000000000000000082525afa94851561065a578e95610626575b5050843b15610622578951918252888201528b8160248183885af1801561061857908c91610604575b5050823b15610600579060248b92838a51958694859384528b8401525af180156105e2579089916105ec575b5050813b156102465784517f36568abe0000000000000000000000000000000000000000000000000000000080825285820192835230602084015291899082908190604001038183875af180156105e2579089916105ce575b5050813b15610246578451908152838101928352306020840152918791839182908490829060400103925af180156105c4578793929187916105a5575b5061016c565b6105b29192939450610dd3565b6105c057908591858861059f565b8480fd5b83513d88823e3d90fd5b6105d790610dd3565b61024657878a610562565b86513d8b823e3d90fd5b6105f590610dd3565b61024657878a610509565b8a80fd5b61060d90610dd3565b610600578a8d6104dd565b89513d8e823e3d90fd5b8c80fd5b9080929550813d8311610653575b61063e8183610e14565b8101031261064f5751928e806104b4565b5f80fd5b503d610634565b8e8c51903d90823e3d90fd5b9250925081813d8311610691575b61067e8183610e14565b8101031261064f57848a9151925f61047a565b503d610674565b6106a190610dd3565b610622578c8f610416565b8d80fd5b6106b990610dd3565b6106ac578d5f6103df565b8f8d51903d90823e3d90fd5b9096508281813d83116106f8575b6106e88183610e14565b8101031261064f5751958d610361565b503d6106de565b9093508181813d8311610727575b6107178183610e14565b8101031261064f5751928c61031e565b503d61070d565b88513d8d823e3d90fd5b50847fca1c3cbc000000000000000000000000000000000000000000000000000000008152fd5b5050507f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b8385913461064f575f60031936011261064f577fffffffff000000000000000000000000000000000000000000000000000000006107c59116610ef5565b9073ffffffffffffffffffffffffffffffffffffffff806107e4610f6b565b169282519384917f9be2a8840000000000000000000000000000000000000000000000000000000083528783015233602483015230604483015281606460209687935afa908115610c52575f91610c1c575b5015610bf5575f5460ff8116610bce577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0060019116175f55807f0000000000000000000000000000000000000000000000000000000000000000169460015491863b1561064f5783517f36568abe00000000000000000000000000000000000000000000000000000000808252838201948552306020860152935f90829081906040010381838c5af18015610bc457610bb1575b50958686977f0000000000000000000000000000000000000000000000000000000000000000168551917f851c1bb30000000000000000000000000000000000000000000000000000000083527f2d771389000000000000000000000000000000000000000000000000000000009081868501528884602481865afa938415610ba7578a94610b75575b50843b15610b535787517f2f2ff15d0000000000000000000000000000000000000000000000000000000081528681018581523060208201528b90829081906040010381838a5af18015610b6b57908b91610b57575b5050823b15610b535760248a92838a51958694859384527f0000000000000000000000000000000000000000000000000000000000000000168a8401525af18015610b4957908891610b35575b5050813b1561023857845184815283810191825230602083015290879082908190604001038183865af18015610b1757908791610b21575b505083517fa217fddf00000000000000000000000000000000000000000000000000000000815285818481855afa958615610b17578796610ae4575b5050803b15610ae057835192835290820193845230602085015290928491849182908490829060400103925af1908115610ad75750610ac75750f35b610ad090610dd3565b61010f5780f35b513d84823e3d90fd5b8580fd5b819750809296503d8311610b10575b610afd8183610e14565b8101031261064f57859451938780610a8b565b503d610af3565b85513d89823e3d90fd5b610b2a90610dd3565b610ae0578588610a4f565b610b3e90610dd3565b610238578689610a17565b86513d8a823e3d90fd5b8980fd5b610b6090610dd3565b610b5357898c6109ca565b89513d8d823e3d90fd5b995092508789813d8111610ba0575b610b8e8183610e14565b8101031261064f57899851928b610974565b503d610b84565b88513d8c823e3d90fd5b610bbc919650610dd3565b5f94876108ea565b85513d5f823e3d90fd5b857fca1c3cbc000000000000000000000000000000000000000000000000000000005f525ffd5b847f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b90508381813d8311610c4b575b610c338183610e14565b8101031261064f5751801515810361064f5786610836565b503d610c29565b83513d5f823e3d90fd5b833461064f575f60031936011261064f5760209073ffffffffffffffffffffffffffffffffffffffff610c8d610f6b565b915191168152f35b833461064f575f60031936011261064f576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b83823461064f57602060031936011261064f5735907fffffffff000000000000000000000000000000000000000000000000000000008216820361064f57610d2e602092610ef5565b9051908152f35b833461064f575f60031936011261064f576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461064f575f60031936011261064f5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b67ffffffffffffffff8111610de757604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610de757604052565b60208060031983011261064f5767ffffffffffffffff9160043583811161064f578160238201121561064f578060040135938411610de7578360051b9060405194610ea36020840187610e14565b85526024602086019282010192831161064f57602401905b828210610ec9575050505090565b813573ffffffffffffffffffffffffffffffffffffffff8116810361064f578152908301908301610ebb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff821117610de75760405251902090565b6040517faaabadc500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa91821561101c575f92610fe357505090565b9091506020813d602011611014575b81610fff60209383610e14565b8101031261064f5751908116810361064f5790565b3d9150610ff2565b6040513d5f823e3d90fdfea2646970667358221220bf4d4e6761f6e4a45e5c73d20c02e4f0df7e905b725a964dfba9c48e6950e01c64736f6c634300081b0033","opcodes":"PUSH2 0x140 PUSH1 0x40 DUP2 DUP2 MSTORE CALLVALUE PUSH2 0x20D JUMPI DUP1 DUP3 PUSH2 0x13D6 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x20 DUP3 DUP6 PUSH2 0x32D JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x20D JUMPI PUSH2 0x33 DUP3 PUSH2 0x364 JUMP JUMPDEST SWAP1 PUSH2 0x41 PUSH1 0x20 DUP1 SWAP5 ADD PUSH2 0x364 JUMP JUMPDEST DUP2 MLOAD PUSH4 0x217CB6F5 PUSH1 0xE2 SHL DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP2 PUSH1 0x4 SWAP2 DUP6 DUP8 AND SWAP2 SWAP1 DUP5 DUP2 DUP6 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x323 JUMPI PUSH0 SWAP2 PUSH2 0x2EE JUMPI JUMPDEST POP PUSH1 0x80 MSTORE DUP5 MLOAD PUSH4 0xFBFA77CF PUSH1 0xE0 SHL DUP2 MSTORE DUP2 DUP9 AND SWAP1 DUP6 DUP2 DUP7 DUP2 DUP6 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E4 JUMPI DUP5 SWAP2 DUP11 SWAP2 PUSH0 SWAP2 PUSH2 0x2AB JUMPI JUMPDEST POP AND EQ SWAP1 DUP2 ISZERO SWAP2 PUSH2 0x29D JUMPI JUMPDEST POP PUSH2 0x28F JUMPI DUP3 SWAP2 DUP5 SWAP2 DUP8 PUSH1 0xC0 MSTORE PUSH1 0xA0 MSTORE DUP6 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH4 0xAAABADC5 PUSH1 0xE0 SHL DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x285 JUMPI SWAP1 DUP7 SWAP2 PUSH0 SWAP2 PUSH2 0x24B JUMPI JUMPDEST POP AND PUSH1 0xE0 MSTORE PUSH2 0x100 SWAP5 ADDRESS DUP7 MSTORE PUSH2 0x120 SWAP5 DUP6 MSTORE PUSH1 0x24 DUP4 DUP3 PUSH1 0xA0 MLOAD AND DUP7 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH4 0x851C1BB3 PUSH1 0xE0 SHL DUP3 MSTORE PUSH4 0x874327F PUSH1 0xE0 SHL DUP9 DUP4 ADD MSTORE GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x241 JUMPI PUSH0 SWAP5 PUSH2 0x211 JUMPI JUMPDEST POP POP DUP3 PUSH1 0x1 SSTORE PUSH1 0xE0 MLOAD AND SWAP2 DUP3 EXTCODESIZE ISZERO PUSH2 0x20D JUMPI PUSH0 SWAP3 PUSH1 0x44 DUP5 SWAP3 DUP7 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH4 0x2F2FF15D PUSH1 0xE0 SHL DUP5 MSTORE DUP8 DUP5 ADD MSTORE ADDRESS PUSH1 0x24 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x203 JUMPI PUSH2 0x1D8 JUMPI JUMPDEST POP POP MLOAD SWAP1 PUSH2 0x105D SWAP3 DUP4 PUSH2 0x379 DUP5 CODECOPY PUSH1 0x80 MLOAD DUP4 DUP2 DUP2 PUSH2 0x41A ADD MSTORE PUSH2 0xD61 ADD MSTORE PUSH1 0xA0 MLOAD DUP4 DUP2 DUP2 PUSH2 0x189 ADD MSTORE DUP2 DUP2 PUSH2 0x297 ADD MSTORE DUP2 DUP2 PUSH2 0x9E3 ADD MSTORE PUSH2 0xDAF ADD MSTORE PUSH1 0xC0 MLOAD DUP4 DUP2 DUP2 PUSH1 0xB2 ADD MSTORE PUSH2 0x8F1 ADD MSTORE PUSH1 0xE0 MLOAD DUP4 DUP2 DUP2 PUSH2 0x365 ADD MSTORE PUSH2 0x871 ADD MSTORE MLOAD DUP3 PUSH2 0xF20 ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0xCC1 ADD MSTORE PUSH2 0xFAE ADD MSTORE RETURN JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x1F0 JUMPI POP DUP2 MSTORE PUSH0 PUSH0 PUSH2 0x166 JUMP JUMPDEST PUSH1 0x41 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST SWAP1 DUP1 SWAP3 SWAP5 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x23A JUMPI JUMPDEST PUSH2 0x229 DUP2 DUP4 PUSH2 0x32D JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x20D JUMPI MLOAD SWAP2 PUSH0 DUP1 PUSH2 0x126 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x21F JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP1 SWAP3 POP DUP5 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x27E JUMPI JUMPDEST PUSH2 0x264 DUP2 DUP4 PUSH2 0x32D JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x20D JUMPI MLOAD DUP6 DUP2 AND DUP2 SUB PUSH2 0x20D JUMPI DUP6 SWAP1 PUSH0 PUSH2 0xE0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x25A JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 PUSH4 0xD6F1CB05 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP DUP8 PUSH1 0x80 MLOAD AND EQ PUSH0 PUSH2 0xAD JUMP JUMPDEST SWAP3 POP POP POP DUP6 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2DD JUMPI JUMPDEST PUSH2 0x2C4 DUP2 DUP4 PUSH2 0x32D JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x20D JUMPI DUP9 PUSH2 0x2D7 DUP6 SWAP3 PUSH2 0x364 JUMP JUMPDEST PUSH0 PUSH2 0xA1 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2BA JUMP JUMPDEST DUP8 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 POP DUP5 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x31C JUMPI JUMPDEST PUSH2 0x305 DUP2 DUP4 PUSH2 0x32D JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x20D JUMPI PUSH2 0x316 SWAP1 PUSH2 0x364 JUMP JUMPDEST PUSH0 PUSH2 0x74 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2FB JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x350 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x20D JUMPI JUMP INVALID PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP3 PUSH0 CALLDATALOAD DUP1 PUSH1 0xE0 SHR SWAP3 DUP4 PUSH4 0x51DA116D EQ PUSH2 0xD85 JUMPI POP DUP3 PUSH4 0x7EA3A964 EQ PUSH2 0xD35 JUMPI DUP3 PUSH4 0x851C1BB3 EQ PUSH2 0xCE5 JUMPI DUP3 PUSH4 0x8D928AF8 EQ PUSH2 0xC95 JUMPI DUP3 PUSH4 0xAAABADC5 EQ PUSH2 0xC5C JUMPI DUP3 PUSH4 0xB78B6087 EQ PUSH2 0x787 JUMPI POP DUP2 PUSH4 0xB8350E27 EQ PUSH2 0x112 JUMPI DUP2 PUSH4 0xC2AD0F14 EQ PUSH2 0xDA JUMPI POP PUSH4 0xFBFA77CF EQ PUSH2 0x87 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xD6 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD6 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP DUP1 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x10F JUMPI PUSH2 0xE9 CALLDATASIZE PUSH2 0xE55 JUMP JUMPDEST POP PUSH32 0xC7B08F6300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST DUP1 REVERT JUMPDEST DUP4 DUP4 CALLVALUE PUSH2 0xD6 JUMPI PUSH2 0x122 CALLDATASIZE PUSH2 0xE55 JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SWAP2 DUP3 TLOAD PUSH2 0x75F JUMPI PUSH1 0x1 SWAP5 PUSH1 0x1 DUP5 TSTORE DUP5 SLOAD PUSH1 0xFF DUP2 AND PUSH2 0x738 JUMPI SWAP1 DUP2 PUSH1 0xFF DUP9 SWAP5 SWAP4 PUSH1 0x8 SHR AND ISZERO PUSH2 0x253 JUMPI JUMPDEST POP DUP6 SWAP7 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 PUSH32 0x0 AND SWAP5 JUMPDEST PUSH2 0x1B7 JUMPI JUMPDEST DUP8 DUP1 DUP9 TSTORE DUP1 RETURN JUMPDEST DUP1 SWAP8 SWAP7 SWAP6 SWAP8 MLOAD DUP10 LT ISZERO PUSH2 0x24A JUMPI DUP2 PUSH1 0x20 DUP11 PUSH1 0x5 SHL DUP4 ADD ADD MLOAD AND DUP6 EXTCODESIZE ISZERO PUSH2 0x246 JUMPI DUP5 MLOAD SWAP1 PUSH32 0x874327F00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP5 DUP3 ADD MSTORE DUP8 DUP2 PUSH1 0x24 DUP2 DUP4 DUP11 GAS CALL DUP1 ISZERO PUSH2 0x23C JUMPI PUSH2 0x224 JUMPI JUMPDEST POP DUP8 DUP1 SWAP10 SWAP9 SWAP7 SWAP8 SWAP9 ADD SWAP9 PUSH2 0x1AB JUMP JUMPDEST PUSH2 0x22E DUP9 SWAP2 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x238 JUMPI DUP10 PUSH2 0x215 JUMP JUMPDEST DUP7 DUP1 REVERT JUMPDEST DUP6 MLOAD RETURNDATASIZE DUP11 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP8 DUP1 REVERT JUMPDEST DUP6 SWAP7 SWAP8 POP PUSH2 0x1B0 JUMP JUMPDEST PUSH2 0x100 SWAP2 SWAP3 SWAP4 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF AND OR DUP6 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP1 DUP4 MLOAD PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 SWAP3 DUP4 DUP3 MSTORE PUSH32 0x8A3C5C6900000000000000000000000000000000000000000000000000000000 DUP1 DUP7 DUP5 ADD MSTORE PUSH1 0x20 SWAP1 DUP2 DUP5 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x72E JUMPI DUP12 SWAP5 PUSH2 0x6FF JUMPI JUMPDEST POP DUP8 MLOAD SWAP6 DUP7 MSTORE PUSH32 0xA93DF2A400000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 DUP9 DUP9 ADD MSTORE DUP3 DUP8 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0x618 JUMPI DUP13 SWAP8 PUSH2 0x6D0 JUMPI JUMPDEST POP DUP6 PUSH32 0x0 AND SWAP6 DUP7 EXTCODESIZE ISZERO PUSH2 0x622 JUMPI DUP10 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE DUP2 DUP12 ADD DUP9 DUP2 MSTORE ADDRESS PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 SWAP1 DUP16 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP14 GAS CALL DUP1 ISZERO PUSH2 0x6C4 JUMPI SWAP1 DUP16 SWAP2 PUSH2 0x6B0 JUMPI JUMPDEST POP POP DUP8 EXTCODESIZE ISZERO PUSH2 0x6AC JUMPI DUP11 MLOAD SWAP1 DUP2 MSTORE DUP10 DUP2 ADD DUP10 DUP2 MSTORE ADDRESS PUSH1 0x20 DUP3 ADD MSTORE DUP15 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP13 GAS CALL DUP1 ISZERO PUSH2 0x65A JUMPI SWAP1 DUP15 SWAP2 PUSH2 0x698 JUMPI JUMPDEST POP POP PUSH32 0x0 AND DUP10 MLOAD SWAP1 PUSH32 0x7869EE1800000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP5 DUP3 DUP12 DUP2 DUP5 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x65A JUMPI DUP11 SWAP2 DUP16 SWAP2 DUP8 SWAP3 SWAP5 PUSH2 0x666 JUMPI JUMPDEST POP DUP13 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0x55FB76AF00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x65A JUMPI DUP15 SWAP6 PUSH2 0x626 JUMPI JUMPDEST POP POP DUP5 EXTCODESIZE ISZERO PUSH2 0x622 JUMPI DUP10 MLOAD SWAP2 DUP3 MSTORE DUP9 DUP3 ADD MSTORE DUP12 DUP2 PUSH1 0x24 DUP2 DUP4 DUP9 GAS CALL DUP1 ISZERO PUSH2 0x618 JUMPI SWAP1 DUP13 SWAP2 PUSH2 0x604 JUMPI JUMPDEST POP POP DUP3 EXTCODESIZE ISZERO PUSH2 0x600 JUMPI SWAP1 PUSH1 0x24 DUP12 SWAP3 DUP4 DUP11 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 DUP5 MSTORE DUP12 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x5E2 JUMPI SWAP1 DUP10 SWAP2 PUSH2 0x5EC JUMPI JUMPDEST POP POP DUP2 EXTCODESIZE ISZERO PUSH2 0x246 JUMPI DUP5 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE DUP6 DUP3 ADD SWAP3 DUP4 MSTORE ADDRESS PUSH1 0x20 DUP5 ADD MSTORE SWAP2 DUP10 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP8 GAS CALL DUP1 ISZERO PUSH2 0x5E2 JUMPI SWAP1 DUP10 SWAP2 PUSH2 0x5CE JUMPI JUMPDEST POP POP DUP2 EXTCODESIZE ISZERO PUSH2 0x246 JUMPI DUP5 MLOAD SWAP1 DUP2 MSTORE DUP4 DUP2 ADD SWAP3 DUP4 MSTORE ADDRESS PUSH1 0x20 DUP5 ADD MSTORE SWAP2 DUP8 SWAP2 DUP4 SWAP2 DUP3 SWAP1 DUP5 SWAP1 DUP3 SWAP1 PUSH1 0x40 ADD SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x5C4 JUMPI DUP8 SWAP4 SWAP3 SWAP2 DUP8 SWAP2 PUSH2 0x5A5 JUMPI JUMPDEST POP PUSH2 0x16C JUMP JUMPDEST PUSH2 0x5B2 SWAP2 SWAP3 SWAP4 SWAP5 POP PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x5C0 JUMPI SWAP1 DUP6 SWAP2 DUP6 DUP9 PUSH2 0x59F JUMP JUMPDEST DUP5 DUP1 REVERT JUMPDEST DUP4 MLOAD RETURNDATASIZE DUP9 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x5D7 SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x246 JUMPI DUP8 DUP11 PUSH2 0x562 JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE DUP12 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x5F5 SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x246 JUMPI DUP8 DUP11 PUSH2 0x509 JUMP JUMPDEST DUP11 DUP1 REVERT JUMPDEST PUSH2 0x60D SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x600 JUMPI DUP11 DUP14 PUSH2 0x4DD JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE DUP15 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP13 DUP1 REVERT JUMPDEST SWAP1 DUP1 SWAP3 SWAP6 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x653 JUMPI JUMPDEST PUSH2 0x63E DUP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI MLOAD SWAP3 DUP15 DUP1 PUSH2 0x4B4 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x634 JUMP JUMPDEST DUP15 DUP13 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP3 POP SWAP3 POP DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x691 JUMPI JUMPDEST PUSH2 0x67E DUP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI DUP5 DUP11 SWAP2 MLOAD SWAP3 PUSH0 PUSH2 0x47A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x674 JUMP JUMPDEST PUSH2 0x6A1 SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x622 JUMPI DUP13 DUP16 PUSH2 0x416 JUMP JUMPDEST DUP14 DUP1 REVERT JUMPDEST PUSH2 0x6B9 SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x6AC JUMPI DUP14 PUSH0 PUSH2 0x3DF JUMP JUMPDEST DUP16 DUP14 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP7 POP DUP3 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x6F8 JUMPI JUMPDEST PUSH2 0x6E8 DUP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI MLOAD SWAP6 DUP14 PUSH2 0x361 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x6DE JUMP JUMPDEST SWAP1 SWAP4 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x727 JUMPI JUMPDEST PUSH2 0x717 DUP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI MLOAD SWAP3 DUP13 PUSH2 0x31E JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x70D JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE DUP14 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP5 PUSH32 0xCA1C3CBC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP POP POP PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST DUP4 DUP6 SWAP2 CALLVALUE PUSH2 0x64F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x64F JUMPI PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x7C5 SWAP2 AND PUSH2 0xEF5 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH2 0x7E4 PUSH2 0xF6B JUMP JUMPDEST AND SWAP3 DUP3 MLOAD SWAP4 DUP5 SWAP2 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP8 DUP4 ADD MSTORE CALLER PUSH1 0x24 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE DUP2 PUSH1 0x64 PUSH1 0x20 SWAP7 DUP8 SWAP4 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xC52 JUMPI PUSH0 SWAP2 PUSH2 0xC1C JUMPI JUMPDEST POP ISZERO PUSH2 0xBF5 JUMPI PUSH0 SLOAD PUSH1 0xFF DUP2 AND PUSH2 0xBCE JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x1 SWAP2 AND OR PUSH0 SSTORE DUP1 PUSH32 0x0 AND SWAP5 PUSH1 0x1 SLOAD SWAP2 DUP7 EXTCODESIZE ISZERO PUSH2 0x64F JUMPI DUP4 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE DUP4 DUP3 ADD SWAP5 DUP6 MSTORE ADDRESS PUSH1 0x20 DUP7 ADD MSTORE SWAP4 PUSH0 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP13 GAS CALL DUP1 ISZERO PUSH2 0xBC4 JUMPI PUSH2 0xBB1 JUMPI JUMPDEST POP SWAP6 DUP7 DUP7 SWAP8 PUSH32 0x0 AND DUP6 MLOAD SWAP2 PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH32 0x2D77138900000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 DUP7 DUP6 ADD MSTORE DUP9 DUP5 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0xBA7 JUMPI DUP11 SWAP5 PUSH2 0xB75 JUMPI JUMPDEST POP DUP5 EXTCODESIZE ISZERO PUSH2 0xB53 JUMPI DUP8 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP7 DUP2 ADD DUP6 DUP2 MSTORE ADDRESS PUSH1 0x20 DUP3 ADD MSTORE DUP12 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP11 GAS CALL DUP1 ISZERO PUSH2 0xB6B JUMPI SWAP1 DUP12 SWAP2 PUSH2 0xB57 JUMPI JUMPDEST POP POP DUP3 EXTCODESIZE ISZERO PUSH2 0xB53 JUMPI PUSH1 0x24 DUP11 SWAP3 DUP4 DUP11 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 DUP5 MSTORE PUSH32 0x0 AND DUP11 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0xB49 JUMPI SWAP1 DUP9 SWAP2 PUSH2 0xB35 JUMPI JUMPDEST POP POP DUP2 EXTCODESIZE ISZERO PUSH2 0x238 JUMPI DUP5 MLOAD DUP5 DUP2 MSTORE DUP4 DUP2 ADD SWAP2 DUP3 MSTORE ADDRESS PUSH1 0x20 DUP4 ADD MSTORE SWAP1 DUP8 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP7 GAS CALL DUP1 ISZERO PUSH2 0xB17 JUMPI SWAP1 DUP8 SWAP2 PUSH2 0xB21 JUMPI JUMPDEST POP POP DUP4 MLOAD PUSH32 0xA217FDDF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP6 DUP2 DUP5 DUP2 DUP6 GAS STATICCALL SWAP6 DUP7 ISZERO PUSH2 0xB17 JUMPI DUP8 SWAP7 PUSH2 0xAE4 JUMPI JUMPDEST POP POP DUP1 EXTCODESIZE ISZERO PUSH2 0xAE0 JUMPI DUP4 MLOAD SWAP3 DUP4 MSTORE SWAP1 DUP3 ADD SWAP4 DUP5 MSTORE ADDRESS PUSH1 0x20 DUP6 ADD MSTORE SWAP1 SWAP3 DUP5 SWAP2 DUP5 SWAP2 DUP3 SWAP1 DUP5 SWAP1 DUP3 SWAP1 PUSH1 0x40 ADD SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xAD7 JUMPI POP PUSH2 0xAC7 JUMPI POP RETURN JUMPDEST PUSH2 0xAD0 SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x10F JUMPI DUP1 RETURN JUMPDEST MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP2 SWAP8 POP DUP1 SWAP3 SWAP7 POP RETURNDATASIZE DUP4 GT PUSH2 0xB10 JUMPI JUMPDEST PUSH2 0xAFD DUP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI DUP6 SWAP5 MLOAD SWAP4 DUP8 DUP1 PUSH2 0xA8B JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xAF3 JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE DUP10 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0xB2A SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0xAE0 JUMPI DUP6 DUP9 PUSH2 0xA4F JUMP JUMPDEST PUSH2 0xB3E SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x238 JUMPI DUP7 DUP10 PUSH2 0xA17 JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE DUP11 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP10 DUP1 REVERT JUMPDEST PUSH2 0xB60 SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0xB53 JUMPI DUP10 DUP13 PUSH2 0x9CA JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE DUP14 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP10 POP SWAP3 POP DUP8 DUP10 DUP2 RETURNDATASIZE DUP2 GT PUSH2 0xBA0 JUMPI JUMPDEST PUSH2 0xB8E DUP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI DUP10 SWAP9 MLOAD SWAP3 DUP12 PUSH2 0x974 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xB84 JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE DUP13 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0xBBC SWAP2 SWAP7 POP PUSH2 0xDD3 JUMP JUMPDEST PUSH0 SWAP5 DUP8 PUSH2 0x8EA JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 PUSH32 0xCA1C3CBC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP5 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP DUP4 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0xC4B JUMPI JUMPDEST PUSH2 0xC33 DUP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x64F JUMPI DUP7 PUSH2 0x836 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xC29 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x64F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x64F JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xC8D PUSH2 0xF6B JUMP JUMPDEST SWAP2 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x64F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x64F JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x64F JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x64F JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x64F JUMPI PUSH2 0xD2E PUSH1 0x20 SWAP3 PUSH2 0xEF5 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x64F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x64F JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x64F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x64F JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xDE7 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xDE7 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x64F JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x4 CALLDATALOAD DUP4 DUP2 GT PUSH2 0x64F JUMPI DUP2 PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x64F JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP4 DUP5 GT PUSH2 0xDE7 JUMPI DUP4 PUSH1 0x5 SHL SWAP1 PUSH1 0x40 MLOAD SWAP5 PUSH2 0xEA3 PUSH1 0x20 DUP5 ADD DUP8 PUSH2 0xE14 JUMP JUMPDEST DUP6 MSTORE PUSH1 0x24 PUSH1 0x20 DUP7 ADD SWAP3 DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x64F JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xEC9 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x64F JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xEBB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xDE7 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x101C JUMPI PUSH0 SWAP3 PUSH2 0xFE3 JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1014 JUMPI JUMPDEST DUP2 PUSH2 0xFFF PUSH1 0x20 SWAP4 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI MLOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x64F JUMPI SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xFF2 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBF 0x4D 0x4E PUSH8 0x61F6E4A45E5C73D2 0xC MUL 0xE4 CREATE 0xDF PUSH31 0x905B725A964DFBA9C48E6950E01C64736F6C634300081B0033000000000000 ","sourceMap":"2216:3190:29:-:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;-1:-1:-1;;;3027:33:28;;-1:-1:-1;;;;;2216:3190:29;;3027:33:28;;2216:3190:29;;;;;;;3027:33:28;2216:3190:29;;3027:33:28;;;;;;;-1:-1:-1;3027:33:28;;;-1:-1:-1;;3008:52:28;;2216:3190:29;;-1:-1:-1;;;3193:25:28;;2216:3190:29;;;;3193:25:28;2216:3190:29;3193:25:28;2216:3190:29;;3193:25:28;;;;;;;;;;;-1:-1:-1;3193:25:28;;;-1:-1:-1;2216:3190:29;;3193:35:28;;;;:76;;;-1:-1:-1;3189:136:28;;;3335:14;;;;;;;3359:36;;2216:3190:29;;;;;;;;;3445:21:28;;;;;;;;;;;;-1:-1:-1;3445:21:28;;;-1:-1:-1;2216:3190:29;;;3406:62:28;1347:46:13;978:4:19;;1347:46:13;;998:14:19;;;;2216:3190:29;;;3359:36:28;2216:3190:29;;;;;;;;;;;2903:120;;2971:42;;;2903:120;;;2216:3190;2903:120;;;;;;;-1:-1:-1;2903:120:29;;;-1:-1:-1;2216:3190:29;;;2886:137;2216:3190;;;;3090:52;;;;;;-1:-1:-1;2216:3190:29;;;;;;;;;;;;;;3090:52;;;;;2216:3190;978:4:19;2216:3190:29;;;;3090:52;;;;;;;;-1:-1:-1;2216:3190:29;;;;;;;;;;3008:52:28;2216:3190:29;;;;;;;;;;3359:36:28;2216:3190:29;;;;;;;;;;;;;;;;;;;;3335:14:28;2216:3190:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3090:52;-1:-1:-1;;;;;2216:3190:29;;;;;;;-1:-1:-1;3090:52:29;;;2216:3190;;;;;;-1:-1:-1;2216:3190:29;;;-1:-1:-1;2216:3190:29;3090:52;2216:3190;;;-1:-1:-1;2216:3190:29;;;;;3090:52;-1:-1:-1;2216:3190:29;;2903:120;;;;;;;;;;;;;;;;;:::i;:::-;;;2216:3190;;;;;2903:120;;;;;;;;;;;2216:3190;;;-1:-1:-1;2216:3190:29;;;;;3445:21:28;;;;;;;;;;;;;;;;;;:::i;:::-;;;2216:3190:29;;;;;;;;;;;;3445:21:28;;;;;;;;;;;2216:3190:29;;;-1:-1:-1;2216:3190:29;;;;;3189:136:28;3292:22;;;;-1:-1:-1;3292:22:28;-1:-1:-1;3292:22:28;3193:76;2216:3190:29;;;3008:52:28;2216:3190:29;;3232:37:28;3193:76;;;:25;;;;;;;;;;;;;;;;;;:::i;:::-;;;2216:3190:29;;;;;;;;;:::i;:::-;3193:25:28;;;;;;;;;2216:3190:29;;;-1:-1:-1;2216:3190:29;;;;;3027:33:28;;;;;;;;;;;;;;;;:::i;:::-;;;2216:3190:29;;;;;;;:::i;:::-;3027:33:28;;;;;;;;;2216:3190:29;;;-1:-1:-1;2216:3190:29;;;;;;;;;;-1:-1:-1;;2216:3190:29;;;;-1:-1:-1;;;;;2216:3190:29;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;2216:3190:29;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{"abi_decode_array_address_dyn":{"entryPoint":3669,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_bytes32_address":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"finalize_allocation":{"entryPoint":3604,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_8599":{"entryPoint":3539,"id":null,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":3829,"id":2480,"parameterSlots":1,"returnSlots":1},"fun_getAuthorizer":{"entryPoint":3947,"id":6146,"parameterSlots":0,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"2420":[{"length":32,"start":3872}],"6097":[{"length":32,"start":3265},{"length":32,"start":4014}],"8871":[{"length":32,"start":1050},{"length":32,"start":3425}],"8874":[{"length":32,"start":393},{"length":32,"start":663},{"length":32,"start":2531},{"length":32,"start":3503}],"8877":[{"length":32,"start":178},{"length":32,"start":2289}],"8880":[{"length":32,"start":869},{"length":32,"start":2161}]},"linkReferences":{},"object":"6080604081815260049182361015610015575f80fd5b5f925f358060e01c92836351da116d14610d85575082637ea3a96414610d35578263851c1bb314610ce55782638d928af814610c95578263aaabadc514610c5c578263b78b60871461078757508163b8350e2714610112578163c2ad0f14146100da575063fbfa77cf14610087575f80fd5b346100d657816003193601126100d6576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5080fd5b833461010f576100e936610e55565b507fc7b08f63000000000000000000000000000000000000000000000000000000008152fd5b80fd5b8383346100d65761012236610e55565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0091825c61075f576001946001845d845460ff811661073857908160ff88949360081c1615610253575b5085969373ffffffffffffffffffffffffffffffffffffffff90817f000000000000000000000000000000000000000000000000000000000000000016945b6101b7575b8780885d80f35b80979695975189101561024a578160208a60051b8301015116853b15610246578451907f0874327f000000000000000000000000000000000000000000000000000000008252848201528781602481838a5af1801561023c57610224575b508780999896979801986101ab565b61022e8891610dd3565b6102385789610215565b8680fd5b85513d8a823e3d90fd5b8780fd5b859697506101b0565b610100919293507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1617855573ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000169083517f851c1bb300000000000000000000000000000000000000000000000000000000928382527f8a3c5c690000000000000000000000000000000000000000000000000000000080868401526020908184602481865afa93841561072e578b946106ff575b5087519586527fa93df2a4000000000000000000000000000000000000000000000000000000009081888801528287602481875afa968715610618578c976106d0575b50857f00000000000000000000000000000000000000000000000000000000000000001695863b156106225789517f2f2ff15d00000000000000000000000000000000000000000000000000000000808252818b018881523060208201529091908f90829081906040010381838d5af180156106c457908f916106b0575b5050873b156106ac578a519081528981018981523060208201528e90829081906040010381838c5af1801561065a57908e91610698575b50507f0000000000000000000000000000000000000000000000000000000000000000168951907f7869ee1800000000000000000000000000000000000000000000000000000000825284828b81845afa91821561065a578a918f91879294610666575b508c51928380927f55fb76af0000000000000000000000000000000000000000000000000000000082525afa94851561065a578e95610626575b5050843b15610622578951918252888201528b8160248183885af1801561061857908c91610604575b5050823b15610600579060248b92838a51958694859384528b8401525af180156105e2579089916105ec575b5050813b156102465784517f36568abe0000000000000000000000000000000000000000000000000000000080825285820192835230602084015291899082908190604001038183875af180156105e2579089916105ce575b5050813b15610246578451908152838101928352306020840152918791839182908490829060400103925af180156105c4578793929187916105a5575b5061016c565b6105b29192939450610dd3565b6105c057908591858861059f565b8480fd5b83513d88823e3d90fd5b6105d790610dd3565b61024657878a610562565b86513d8b823e3d90fd5b6105f590610dd3565b61024657878a610509565b8a80fd5b61060d90610dd3565b610600578a8d6104dd565b89513d8e823e3d90fd5b8c80fd5b9080929550813d8311610653575b61063e8183610e14565b8101031261064f5751928e806104b4565b5f80fd5b503d610634565b8e8c51903d90823e3d90fd5b9250925081813d8311610691575b61067e8183610e14565b8101031261064f57848a9151925f61047a565b503d610674565b6106a190610dd3565b610622578c8f610416565b8d80fd5b6106b990610dd3565b6106ac578d5f6103df565b8f8d51903d90823e3d90fd5b9096508281813d83116106f8575b6106e88183610e14565b8101031261064f5751958d610361565b503d6106de565b9093508181813d8311610727575b6107178183610e14565b8101031261064f5751928c61031e565b503d61070d565b88513d8d823e3d90fd5b50847fca1c3cbc000000000000000000000000000000000000000000000000000000008152fd5b5050507f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b8385913461064f575f60031936011261064f577fffffffff000000000000000000000000000000000000000000000000000000006107c59116610ef5565b9073ffffffffffffffffffffffffffffffffffffffff806107e4610f6b565b169282519384917f9be2a8840000000000000000000000000000000000000000000000000000000083528783015233602483015230604483015281606460209687935afa908115610c52575f91610c1c575b5015610bf5575f5460ff8116610bce577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0060019116175f55807f0000000000000000000000000000000000000000000000000000000000000000169460015491863b1561064f5783517f36568abe00000000000000000000000000000000000000000000000000000000808252838201948552306020860152935f90829081906040010381838c5af18015610bc457610bb1575b50958686977f0000000000000000000000000000000000000000000000000000000000000000168551917f851c1bb30000000000000000000000000000000000000000000000000000000083527f2d771389000000000000000000000000000000000000000000000000000000009081868501528884602481865afa938415610ba7578a94610b75575b50843b15610b535787517f2f2ff15d0000000000000000000000000000000000000000000000000000000081528681018581523060208201528b90829081906040010381838a5af18015610b6b57908b91610b57575b5050823b15610b535760248a92838a51958694859384527f0000000000000000000000000000000000000000000000000000000000000000168a8401525af18015610b4957908891610b35575b5050813b1561023857845184815283810191825230602083015290879082908190604001038183865af18015610b1757908791610b21575b505083517fa217fddf00000000000000000000000000000000000000000000000000000000815285818481855afa958615610b17578796610ae4575b5050803b15610ae057835192835290820193845230602085015290928491849182908490829060400103925af1908115610ad75750610ac75750f35b610ad090610dd3565b61010f5780f35b513d84823e3d90fd5b8580fd5b819750809296503d8311610b10575b610afd8183610e14565b8101031261064f57859451938780610a8b565b503d610af3565b85513d89823e3d90fd5b610b2a90610dd3565b610ae0578588610a4f565b610b3e90610dd3565b610238578689610a17565b86513d8a823e3d90fd5b8980fd5b610b6090610dd3565b610b5357898c6109ca565b89513d8d823e3d90fd5b995092508789813d8111610ba0575b610b8e8183610e14565b8101031261064f57899851928b610974565b503d610b84565b88513d8c823e3d90fd5b610bbc919650610dd3565b5f94876108ea565b85513d5f823e3d90fd5b857fca1c3cbc000000000000000000000000000000000000000000000000000000005f525ffd5b847f23dada53000000000000000000000000000000000000000000000000000000005f525ffd5b90508381813d8311610c4b575b610c338183610e14565b8101031261064f5751801515810361064f5786610836565b503d610c29565b83513d5f823e3d90fd5b833461064f575f60031936011261064f5760209073ffffffffffffffffffffffffffffffffffffffff610c8d610f6b565b915191168152f35b833461064f575f60031936011261064f576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b83823461064f57602060031936011261064f5735907fffffffff000000000000000000000000000000000000000000000000000000008216820361064f57610d2e602092610ef5565b9051908152f35b833461064f575f60031936011261064f576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461064f575f60031936011261064f5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b67ffffffffffffffff8111610de757604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610de757604052565b60208060031983011261064f5767ffffffffffffffff9160043583811161064f578160238201121561064f578060040135938411610de7578360051b9060405194610ea36020840187610e14565b85526024602086019282010192831161064f57602401905b828210610ec9575050505090565b813573ffffffffffffffffffffffffffffffffffffffff8116810361064f578152908301908301610ebb565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff821117610de75760405251902090565b6040517faaabadc500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa91821561101c575f92610fe357505090565b9091506020813d602011611014575b81610fff60209383610e14565b8101031261064f5751908116810361064f5790565b3d9150610ff2565b6040513d5f823e3d90fdfea2646970667358221220bf4d4e6761f6e4a45e5c73d20c02e4f0df7e905b725a964dfba9c48e6950e01c64736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP3 PUSH0 CALLDATALOAD DUP1 PUSH1 0xE0 SHR SWAP3 DUP4 PUSH4 0x51DA116D EQ PUSH2 0xD85 JUMPI POP DUP3 PUSH4 0x7EA3A964 EQ PUSH2 0xD35 JUMPI DUP3 PUSH4 0x851C1BB3 EQ PUSH2 0xCE5 JUMPI DUP3 PUSH4 0x8D928AF8 EQ PUSH2 0xC95 JUMPI DUP3 PUSH4 0xAAABADC5 EQ PUSH2 0xC5C JUMPI DUP3 PUSH4 0xB78B6087 EQ PUSH2 0x787 JUMPI POP DUP2 PUSH4 0xB8350E27 EQ PUSH2 0x112 JUMPI DUP2 PUSH4 0xC2AD0F14 EQ PUSH2 0xDA JUMPI POP PUSH4 0xFBFA77CF EQ PUSH2 0x87 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xD6 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xD6 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP DUP1 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x10F JUMPI PUSH2 0xE9 CALLDATASIZE PUSH2 0xE55 JUMP JUMPDEST POP PUSH32 0xC7B08F6300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST DUP1 REVERT JUMPDEST DUP4 DUP4 CALLVALUE PUSH2 0xD6 JUMPI PUSH2 0x122 CALLDATASIZE PUSH2 0xE55 JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SWAP2 DUP3 TLOAD PUSH2 0x75F JUMPI PUSH1 0x1 SWAP5 PUSH1 0x1 DUP5 TSTORE DUP5 SLOAD PUSH1 0xFF DUP2 AND PUSH2 0x738 JUMPI SWAP1 DUP2 PUSH1 0xFF DUP9 SWAP5 SWAP4 PUSH1 0x8 SHR AND ISZERO PUSH2 0x253 JUMPI JUMPDEST POP DUP6 SWAP7 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 PUSH32 0x0 AND SWAP5 JUMPDEST PUSH2 0x1B7 JUMPI JUMPDEST DUP8 DUP1 DUP9 TSTORE DUP1 RETURN JUMPDEST DUP1 SWAP8 SWAP7 SWAP6 SWAP8 MLOAD DUP10 LT ISZERO PUSH2 0x24A JUMPI DUP2 PUSH1 0x20 DUP11 PUSH1 0x5 SHL DUP4 ADD ADD MLOAD AND DUP6 EXTCODESIZE ISZERO PUSH2 0x246 JUMPI DUP5 MLOAD SWAP1 PUSH32 0x874327F00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP5 DUP3 ADD MSTORE DUP8 DUP2 PUSH1 0x24 DUP2 DUP4 DUP11 GAS CALL DUP1 ISZERO PUSH2 0x23C JUMPI PUSH2 0x224 JUMPI JUMPDEST POP DUP8 DUP1 SWAP10 SWAP9 SWAP7 SWAP8 SWAP9 ADD SWAP9 PUSH2 0x1AB JUMP JUMPDEST PUSH2 0x22E DUP9 SWAP2 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x238 JUMPI DUP10 PUSH2 0x215 JUMP JUMPDEST DUP7 DUP1 REVERT JUMPDEST DUP6 MLOAD RETURNDATASIZE DUP11 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP8 DUP1 REVERT JUMPDEST DUP6 SWAP7 SWAP8 POP PUSH2 0x1B0 JUMP JUMPDEST PUSH2 0x100 SWAP2 SWAP3 SWAP4 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF AND OR DUP6 SSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP1 DUP4 MLOAD PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 SWAP3 DUP4 DUP3 MSTORE PUSH32 0x8A3C5C6900000000000000000000000000000000000000000000000000000000 DUP1 DUP7 DUP5 ADD MSTORE PUSH1 0x20 SWAP1 DUP2 DUP5 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x72E JUMPI DUP12 SWAP5 PUSH2 0x6FF JUMPI JUMPDEST POP DUP8 MLOAD SWAP6 DUP7 MSTORE PUSH32 0xA93DF2A400000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 DUP9 DUP9 ADD MSTORE DUP3 DUP8 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0x618 JUMPI DUP13 SWAP8 PUSH2 0x6D0 JUMPI JUMPDEST POP DUP6 PUSH32 0x0 AND SWAP6 DUP7 EXTCODESIZE ISZERO PUSH2 0x622 JUMPI DUP10 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE DUP2 DUP12 ADD DUP9 DUP2 MSTORE ADDRESS PUSH1 0x20 DUP3 ADD MSTORE SWAP1 SWAP2 SWAP1 DUP16 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP14 GAS CALL DUP1 ISZERO PUSH2 0x6C4 JUMPI SWAP1 DUP16 SWAP2 PUSH2 0x6B0 JUMPI JUMPDEST POP POP DUP8 EXTCODESIZE ISZERO PUSH2 0x6AC JUMPI DUP11 MLOAD SWAP1 DUP2 MSTORE DUP10 DUP2 ADD DUP10 DUP2 MSTORE ADDRESS PUSH1 0x20 DUP3 ADD MSTORE DUP15 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP13 GAS CALL DUP1 ISZERO PUSH2 0x65A JUMPI SWAP1 DUP15 SWAP2 PUSH2 0x698 JUMPI JUMPDEST POP POP PUSH32 0x0 AND DUP10 MLOAD SWAP1 PUSH32 0x7869EE1800000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP5 DUP3 DUP12 DUP2 DUP5 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x65A JUMPI DUP11 SWAP2 DUP16 SWAP2 DUP8 SWAP3 SWAP5 PUSH2 0x666 JUMPI JUMPDEST POP DUP13 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0x55FB76AF00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x65A JUMPI DUP15 SWAP6 PUSH2 0x626 JUMPI JUMPDEST POP POP DUP5 EXTCODESIZE ISZERO PUSH2 0x622 JUMPI DUP10 MLOAD SWAP2 DUP3 MSTORE DUP9 DUP3 ADD MSTORE DUP12 DUP2 PUSH1 0x24 DUP2 DUP4 DUP9 GAS CALL DUP1 ISZERO PUSH2 0x618 JUMPI SWAP1 DUP13 SWAP2 PUSH2 0x604 JUMPI JUMPDEST POP POP DUP3 EXTCODESIZE ISZERO PUSH2 0x600 JUMPI SWAP1 PUSH1 0x24 DUP12 SWAP3 DUP4 DUP11 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 DUP5 MSTORE DUP12 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x5E2 JUMPI SWAP1 DUP10 SWAP2 PUSH2 0x5EC JUMPI JUMPDEST POP POP DUP2 EXTCODESIZE ISZERO PUSH2 0x246 JUMPI DUP5 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE DUP6 DUP3 ADD SWAP3 DUP4 MSTORE ADDRESS PUSH1 0x20 DUP5 ADD MSTORE SWAP2 DUP10 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP8 GAS CALL DUP1 ISZERO PUSH2 0x5E2 JUMPI SWAP1 DUP10 SWAP2 PUSH2 0x5CE JUMPI JUMPDEST POP POP DUP2 EXTCODESIZE ISZERO PUSH2 0x246 JUMPI DUP5 MLOAD SWAP1 DUP2 MSTORE DUP4 DUP2 ADD SWAP3 DUP4 MSTORE ADDRESS PUSH1 0x20 DUP5 ADD MSTORE SWAP2 DUP8 SWAP2 DUP4 SWAP2 DUP3 SWAP1 DUP5 SWAP1 DUP3 SWAP1 PUSH1 0x40 ADD SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x5C4 JUMPI DUP8 SWAP4 SWAP3 SWAP2 DUP8 SWAP2 PUSH2 0x5A5 JUMPI JUMPDEST POP PUSH2 0x16C JUMP JUMPDEST PUSH2 0x5B2 SWAP2 SWAP3 SWAP4 SWAP5 POP PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x5C0 JUMPI SWAP1 DUP6 SWAP2 DUP6 DUP9 PUSH2 0x59F JUMP JUMPDEST DUP5 DUP1 REVERT JUMPDEST DUP4 MLOAD RETURNDATASIZE DUP9 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x5D7 SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x246 JUMPI DUP8 DUP11 PUSH2 0x562 JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE DUP12 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x5F5 SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x246 JUMPI DUP8 DUP11 PUSH2 0x509 JUMP JUMPDEST DUP11 DUP1 REVERT JUMPDEST PUSH2 0x60D SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x600 JUMPI DUP11 DUP14 PUSH2 0x4DD JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE DUP15 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP13 DUP1 REVERT JUMPDEST SWAP1 DUP1 SWAP3 SWAP6 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x653 JUMPI JUMPDEST PUSH2 0x63E DUP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI MLOAD SWAP3 DUP15 DUP1 PUSH2 0x4B4 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x634 JUMP JUMPDEST DUP15 DUP13 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP3 POP SWAP3 POP DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x691 JUMPI JUMPDEST PUSH2 0x67E DUP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI DUP5 DUP11 SWAP2 MLOAD SWAP3 PUSH0 PUSH2 0x47A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x674 JUMP JUMPDEST PUSH2 0x6A1 SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x622 JUMPI DUP13 DUP16 PUSH2 0x416 JUMP JUMPDEST DUP14 DUP1 REVERT JUMPDEST PUSH2 0x6B9 SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x6AC JUMPI DUP14 PUSH0 PUSH2 0x3DF JUMP JUMPDEST DUP16 DUP14 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP7 POP DUP3 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x6F8 JUMPI JUMPDEST PUSH2 0x6E8 DUP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI MLOAD SWAP6 DUP14 PUSH2 0x361 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x6DE JUMP JUMPDEST SWAP1 SWAP4 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x727 JUMPI JUMPDEST PUSH2 0x717 DUP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI MLOAD SWAP3 DUP13 PUSH2 0x31E JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x70D JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE DUP14 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP5 PUSH32 0xCA1C3CBC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP POP POP PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST DUP4 DUP6 SWAP2 CALLVALUE PUSH2 0x64F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x64F JUMPI PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x7C5 SWAP2 AND PUSH2 0xEF5 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH2 0x7E4 PUSH2 0xF6B JUMP JUMPDEST AND SWAP3 DUP3 MLOAD SWAP4 DUP5 SWAP2 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP8 DUP4 ADD MSTORE CALLER PUSH1 0x24 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE DUP2 PUSH1 0x64 PUSH1 0x20 SWAP7 DUP8 SWAP4 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xC52 JUMPI PUSH0 SWAP2 PUSH2 0xC1C JUMPI JUMPDEST POP ISZERO PUSH2 0xBF5 JUMPI PUSH0 SLOAD PUSH1 0xFF DUP2 AND PUSH2 0xBCE JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x1 SWAP2 AND OR PUSH0 SSTORE DUP1 PUSH32 0x0 AND SWAP5 PUSH1 0x1 SLOAD SWAP2 DUP7 EXTCODESIZE ISZERO PUSH2 0x64F JUMPI DUP4 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE DUP4 DUP3 ADD SWAP5 DUP6 MSTORE ADDRESS PUSH1 0x20 DUP7 ADD MSTORE SWAP4 PUSH0 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP13 GAS CALL DUP1 ISZERO PUSH2 0xBC4 JUMPI PUSH2 0xBB1 JUMPI JUMPDEST POP SWAP6 DUP7 DUP7 SWAP8 PUSH32 0x0 AND DUP6 MLOAD SWAP2 PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH32 0x2D77138900000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 DUP7 DUP6 ADD MSTORE DUP9 DUP5 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0xBA7 JUMPI DUP11 SWAP5 PUSH2 0xB75 JUMPI JUMPDEST POP DUP5 EXTCODESIZE ISZERO PUSH2 0xB53 JUMPI DUP8 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP7 DUP2 ADD DUP6 DUP2 MSTORE ADDRESS PUSH1 0x20 DUP3 ADD MSTORE DUP12 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP11 GAS CALL DUP1 ISZERO PUSH2 0xB6B JUMPI SWAP1 DUP12 SWAP2 PUSH2 0xB57 JUMPI JUMPDEST POP POP DUP3 EXTCODESIZE ISZERO PUSH2 0xB53 JUMPI PUSH1 0x24 DUP11 SWAP3 DUP4 DUP11 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 DUP5 MSTORE PUSH32 0x0 AND DUP11 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0xB49 JUMPI SWAP1 DUP9 SWAP2 PUSH2 0xB35 JUMPI JUMPDEST POP POP DUP2 EXTCODESIZE ISZERO PUSH2 0x238 JUMPI DUP5 MLOAD DUP5 DUP2 MSTORE DUP4 DUP2 ADD SWAP2 DUP3 MSTORE ADDRESS PUSH1 0x20 DUP4 ADD MSTORE SWAP1 DUP8 SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x40 ADD SUB DUP2 DUP4 DUP7 GAS CALL DUP1 ISZERO PUSH2 0xB17 JUMPI SWAP1 DUP8 SWAP2 PUSH2 0xB21 JUMPI JUMPDEST POP POP DUP4 MLOAD PUSH32 0xA217FDDF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP6 DUP2 DUP5 DUP2 DUP6 GAS STATICCALL SWAP6 DUP7 ISZERO PUSH2 0xB17 JUMPI DUP8 SWAP7 PUSH2 0xAE4 JUMPI JUMPDEST POP POP DUP1 EXTCODESIZE ISZERO PUSH2 0xAE0 JUMPI DUP4 MLOAD SWAP3 DUP4 MSTORE SWAP1 DUP3 ADD SWAP4 DUP5 MSTORE ADDRESS PUSH1 0x20 DUP6 ADD MSTORE SWAP1 SWAP3 DUP5 SWAP2 DUP5 SWAP2 DUP3 SWAP1 DUP5 SWAP1 DUP3 SWAP1 PUSH1 0x40 ADD SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xAD7 JUMPI POP PUSH2 0xAC7 JUMPI POP RETURN JUMPDEST PUSH2 0xAD0 SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x10F JUMPI DUP1 RETURN JUMPDEST MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP2 SWAP8 POP DUP1 SWAP3 SWAP7 POP RETURNDATASIZE DUP4 GT PUSH2 0xB10 JUMPI JUMPDEST PUSH2 0xAFD DUP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI DUP6 SWAP5 MLOAD SWAP4 DUP8 DUP1 PUSH2 0xA8B JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xAF3 JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE DUP10 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0xB2A SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0xAE0 JUMPI DUP6 DUP9 PUSH2 0xA4F JUMP JUMPDEST PUSH2 0xB3E SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0x238 JUMPI DUP7 DUP10 PUSH2 0xA17 JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE DUP11 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP10 DUP1 REVERT JUMPDEST PUSH2 0xB60 SWAP1 PUSH2 0xDD3 JUMP JUMPDEST PUSH2 0xB53 JUMPI DUP10 DUP13 PUSH2 0x9CA JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE DUP14 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP10 POP SWAP3 POP DUP8 DUP10 DUP2 RETURNDATASIZE DUP2 GT PUSH2 0xBA0 JUMPI JUMPDEST PUSH2 0xB8E DUP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI DUP10 SWAP9 MLOAD SWAP3 DUP12 PUSH2 0x974 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xB84 JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE DUP13 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0xBBC SWAP2 SWAP7 POP PUSH2 0xDD3 JUMP JUMPDEST PUSH0 SWAP5 DUP8 PUSH2 0x8EA JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 PUSH32 0xCA1C3CBC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP5 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 POP DUP4 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0xC4B JUMPI JUMPDEST PUSH2 0xC33 DUP2 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x64F JUMPI DUP7 PUSH2 0x836 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xC29 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x64F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x64F JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xC8D PUSH2 0xF6B JUMP JUMPDEST SWAP2 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x64F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x64F JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x64F JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x64F JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x64F JUMPI PUSH2 0xD2E PUSH1 0x20 SWAP3 PUSH2 0xEF5 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x64F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x64F JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x64F JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x64F JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xDE7 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xDE7 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x64F JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x4 CALLDATALOAD DUP4 DUP2 GT PUSH2 0x64F JUMPI DUP2 PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x64F JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP4 DUP5 GT PUSH2 0xDE7 JUMPI DUP4 PUSH1 0x5 SHL SWAP1 PUSH1 0x40 MLOAD SWAP5 PUSH2 0xEA3 PUSH1 0x20 DUP5 ADD DUP8 PUSH2 0xE14 JUMP JUMPDEST DUP6 MSTORE PUSH1 0x24 PUSH1 0x20 DUP7 ADD SWAP3 DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x64F JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xEC9 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x64F JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xEBB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xDE7 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x101C JUMPI PUSH0 SWAP3 PUSH2 0xFE3 JUMPI POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1014 JUMPI JUMPDEST DUP2 PUSH2 0xFFF PUSH1 0x20 SWAP4 DUP4 PUSH2 0xE14 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x64F JUMPI MLOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x64F JUMPI SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xFF2 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBF 0x4D 0x4E PUSH8 0x61F6E4A45E5C73D2 0xC MUL 0xE4 CREATE 0xDF PUSH31 0x905B725A964DFBA9C48E6950E01C64736F6C634300081B0033000000000000 ","sourceMap":"2216:3190:29:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2216:3190:29;;;;;;;;;2276:29:28;2216:3190:29;;;;;;;;;;;;;;;;:::i;:::-;;5374:23;;;;2216:3190;;;;;;;;;;;;:::i;:::-;551:66:16;2806:53:17;;;1316:93:16;;1529:4;3051:52:17;1529:4:16;3051:52:17;;2216:3190:29;;;;;3637:65;;2216:3190;;;;;;;;;;3796:141;;2216:3190;4439:13;;;;2216:3190;4582:16;;;2216:3190;4434:199;1529:4:16;;;4434:199:29;3051:52:17;;;;2216:3190:29;;4472:3;2216:3190;;;;;;4454:16;;;;;2216:3190;;;;;;;;;;4552:70;;;;;2216:3190;;4552:70;2216:3190;4552:70;;;;;2216:3190;4552:70;;2216:3190;4552:70;;;;;;;;;;;4472:3;;;;;;;;;2216:3190;4439:13;;;4552:70;;;;;:::i;:::-;2216:3190;;4552:70;;;2216:3190;;;;4552:70;2216:3190;;;;;;;;;4552:70;2216:3190;;;4454:16;;;;;;;3796:141;2216:3190;;;;;;;;;;;5691:16:28;;2216:3190:29;;;;;5667:144:28;;;;5735:66;5667:144;;;;2216:3190:29;5667:144:28;;;;2216:3190:29;5667:144:28;;;;;;;;;;;;;3796:141:29;2216:3190;;;5845:145:28;;;5913:67;5845:145;;;;;2216:3190:29;5845:145:28;;2216:3190:29;5845:145:28;;;;;;;;;;;;;3796:141:29;6001:11:28;;;2216:3190:29;6001:49:28;;;;;;2216:3190:29;;;6001:49:28;;;;;;2216:3190:29;;;6044:4:28;2216:3190:29;;;;;;;;;;;;;;;6001:49:28;;;;;;;;;;;;;;;3796:141:29;6060:50:28;;;;;;;2216:3190:29;;6060:50:28;;;;;;2216:3190:29;;;6044:4:28;2216:3190:29;;;;6044:4:28;;2216:3190:29;;;;;;6060:50:28;;;;;;;;;;;;;;;3796:141:29;6202:16:28;;;2216:3190:29;;;6202:53:28;2216:3190:29;6202:53:28;;;;;;;;;;;;;;;;;;;;;;;3796:141:29;2216:3190;;;6300:54:28;;;;2216:3190:29;6300:54:28;;;;;;;;;;;;;3796:141:29;6365:76:28;;;;;;;2216:3190:29;;6365:76:28;;;;;;2216:3190:29;6365:76:28;;2216:3190:29;6365:76:28;;;;;;;;;;;;;;3796:141:29;6451:78:28;;;;;;;2216:3190:29;;;;;;;6451:78:28;;;;;;;;;;2216:3190:29;6451:78:28;;;;;;;;;;;3796:141:29;6571:52:28;;;;;;;2216:3190:29;;;6571:52:28;;;;;;2216:3190:29;;;6044:4:28;2216:3190:29;;;;;;;;;;;;;6571:52:28;;;;;;;;;;;;;;;3796:141:29;6633:53:28;;;;;;;2216:3190:29;;6633:53:28;;;;;;2216:3190:29;;;6044:4:28;2216:3190:29;;;;;;;;;;;;;;;;;6633:53:28;;;;;;;;;;;;;;;;3796:141:29;;;;6633:53:28;;;;;;;;:::i;:::-;2216:3190:29;;6633:53:28;;;;;;;2216:3190:29;;;;6633:53:28;2216:3190:29;;;;;;;;;6571:52:28;;;;:::i;:::-;2216:3190:29;;6571:52:28;;;;;2216:3190:29;;;;;;;;;6451:78:28;;;;:::i;:::-;2216:3190:29;;6451:78:28;;;;;2216:3190:29;;;6365:76:28;;;;:::i;:::-;2216:3190:29;;6365:76:28;;;;;2216:3190:29;;;;;;;;;6365:76:28;2216:3190:29;;;6300:54:28;;;;;;;;;;;;;;;;;:::i;:::-;;;2216:3190:29;;;;;6300:54:28;;;;;2216:3190:29;;;;6300:54:28;;;;;;2216:3190:29;;;;;;;;;;;6202:53:28;;;;;;;;;;;;;;;;;:::i;:::-;;;2216:3190:29;;;;;;;;6202:53:28;;;;;;;;;6060:50;;;;:::i;:::-;2216:3190:29;;6060:50:28;;;;;2216:3190:29;;;6001:49:28;;;;:::i;:::-;2216:3190:29;;6001:49:28;;;;;2216:3190:29;;;;;;;;;;;5845:145:28;;;;;;;;;;;;;;;;;:::i;:::-;;;2216:3190:29;;;;;5845:145:28;;;;;;;;;5667:144;;;;;;;;;;;;;;;;;:::i;:::-;;;2216:3190:29;;;;;5667:144:28;;;;;;;;;;2216:3190:29;;;;;;;;;3637:65;3674:17;;;;;;1316:93:16;1368:30;;;;;;;2216:3190:29;;;;;;;;-1:-1:-1;;2216:3190:29;;;;;1774:7:13;1762:20;1774:7;;1762:20;:::i;:::-;2216:3190:29;;1592:15:19;;;:::i;:::-;2216:3190:29;;;;1592:60:19;;;2216:3190:29;1592:60:19;;;;;2216:3190:29;1820:10:13;2216:3190:29;;;;1646:4:19;2216:3190:29;;;;1592:60:19;2216:3190:29;1592:60:19;;;;;;;;;;;2216:3190:29;1592:60:19;;;2216:3190:29;1797:34:13;;1793:90;;2216:3190:29;;;;;4714:65;;2216:3190;4802:4;2216:3190;;;;;4864:11;;2216:3190;;4802:4;2216:3190;4864:55;;;;;;2216:3190;;;4864:55;;;;;;2216:3190;;;1646:4:19;2216:3190:29;;;;;;;;;;;;;4864:55;;;;;;;;;;;;2216:3190;6806:5:28;;;;;;2216:3190:29;;;6782:112:28;2216:3190:29;6782:112:28;;6839:45;6782:112;;;;;2216:3190:29;6782:112:28;;2216:3190:29;6782:112:28;;;;;;;;;;;;;2216:3190:29;6905:58:28;;;;;;2216:3190:29;;;6905:58:28;;;;;2216:3190:29;;;1646:4:19;2216:3190:29;;;;1646:4:19;;2216:3190:29;;;;;;6905:58:28;;;;;;;;;;;;;;;2216:3190:29;6974:48:28;;;;;;;2216:3190:29;;;;;;6974:48:28;;;;;;;7005:16;2216:3190:29;6974:48:28;;;2216:3190:29;6974:48:28;;;;;;;;;;;2216:3190:29;7033:61:28;;;;;;;2216:3190:29;;7033:61:28;;;;;;2216:3190:29;;;1646:4:19;2216:3190:29;;;;;;;;;;;;;7033:61:28;;;;;;;;;;;;;;;2216:3190:29;;;;;;5075:32;;;;;;;;;;;;;;;;;;2216:3190;5050:73;;;;;;;2216:3190;;5050:73;;;;;;2216:3190;;;1646:4:19;2216:3190:29;;;;;;;;;;;;;;;;;;5050:73;;;;;;;;;;;;2216:3190;;5050:73;;;;:::i;:::-;2216:3190;;5050:73;2216:3190;5050:73;2216:3190;;;;;;;;5050:73;2216:3190;;;5075:32;;;;;;;;;;;;;;;;;;:::i;:::-;;;2216:3190;;;;;;;5075:32;;;;;;;;;;;2216:3190;;;;;;;;;7033:61:28;;;;:::i;:::-;2216:3190:29;;7033:61:28;;;;6974:48;;;;:::i;:::-;2216:3190:29;;6974:48:28;;;;;2216:3190:29;;;;;;;;;6974:48:28;2216:3190:29;;;6905:58:28;;;;:::i;:::-;2216:3190:29;;6905:58:28;;;;;2216:3190:29;;;;;;;;;6782:112:28;;-1:-1:-1;6782:112:28;-1:-1:-1;6782:112:28;;;;;;;;;;;;;:::i;:::-;;;2216:3190:29;;;;;;;6782:112:28;;;;;;;;;;2216:3190:29;;;;;;;;;4864:55;;;;;;:::i;:::-;2216:3190;4864:55;;;;;2216:3190;;;;;;;;;4714:65;4751:17;;2216:3190;4751:17;2216:3190;4751:17;1793:90:13;1854:18;;2216:3190:29;1854:18:13;2216:3190:29;1854:18:13;1592:60:19;;;;;;;;;;;;;;;;:::i;:::-;;;2216:3190:29;;;;;;;;;;;;1592:60:19;;;;;;;;;2216:3190:29;;;;;;;;;;;;;;;-1:-1:-1;;2216:3190:29;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;2216:3190:29;;;;;;;;;1216:6:19;2216:3190:29;;;;;;;;;;;-1:-1:-1;;2216:3190:29;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;2216:3190:29;;;;;;;;;2151:56:28;2216:3190:29;;;;;;;;;-1:-1:-1;;2216:3190:29;;;;;;2213:56:28;2216:3190:29;2213:56:28;2216:3190:29;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;2216:3190:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;1931:430:13;2216:3190:29;;;2303:50:13;;;2320:22;;2216:3190:29;;;;;;;2303:50:13;;;2216:3190:29;;;;;;;;;;;;;;;2293:61:13;;1931:430;:::o;1366:109:19:-;2216:3190:29;;;1442:26:19;;2216:3190:29;1442:26:19;2216:3190:29;1442:26:19;2216:3190:29;1216:6:19;2216:3190:29;;1442:26:19;;;;;;;;;;;1435:33;;1366:109;:::o;1442:26::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;2216:3190:29;;;;;;;;;;;;1366:109:19;:::o;1442:26::-;;;-1:-1:-1;1442:26:19;;;2216:3190:29;;;1442:26:19;2216:3190:29;;;;"},"methodIdentifiers":{"finalizeMigration()":"b78b6087","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getVault()":"8d928af8","migrateFeeController(address[])":"c2ad0f14","migratePools(address[])":"b8350e27","newFeeController()":"51da116d","oldFeeController()":"7ea3a964","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"_vault\",\"type\":\"address\"},{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"_newFeeController\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyMigrated\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidFeeController\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongMigrationVersion\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"finalizeMigration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"name\":\"migrateFeeController\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"migratePools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"newFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oldFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These events enable tracking pool protocol fees under all circumstances (in particular, when protocol fees are initially turned off). After deployment, call `migratePools` as many times as necessary. The list must be generated externally, as pools are not iterable on-chain. The batch interface allows an unlimited number of pools to be migrated; it's possible there might be too many to migrate in a single call. The first time `migratePools` is called, the contract will first copy the global (pool-independent data). This could be done in a separate stage, but we're trying to keep the contract simple, vs. duplicating the staging coordinator system of v2 just yet. When all pools have been migrated, call `finalizeMigration` to disable further migration, update the address in the Vault, and renounce all permissions. While `migratePools` is permissionless, this call must be permissioned to prevent premature termination in case multiple transactions are required to migrate all the pools. Associated with `20250221-protocol-fee-controller-migration` (fork test only).\",\"errors\":{\"InvalidFeeController()\":[{\"details\":\"ProtocolFeeController contracts return the address of the Vault they were deployed with. Ensure that both the old and new controllers reference the same vault.\"}]},\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"migrateFeeController(address[])\":{\"details\":\"Call this with the full set of pools to perform the migration. After this runs, the Vault will point to the new fee controller, which will have a copy of all the relevant state from the old controller. Also, all permissions will be revoked, and the contract will be disabled.\",\"params\":{\"pools\":\"The complete set of pools to migrate\"}},\"migratePools(address[])\":{\"details\":\"THis can be called multiple times, if there are too many pools for a single transaction. Note that the first time this is called, it will migrate the global fee percentages, then proceed with the first set of pools.\",\"params\":{\"pools\":\"The set of pools to be migrated in this call\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyMigrated()\":[{\"notice\":\"Migration can only be performed once.\"}],\"InvalidFeeController()\":[{\"notice\":\"Attempt to deploy this contract with invalid parameters.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"WrongMigrationVersion()\":[{\"notice\":\"Cannot call the base contract migration; it is invalid for this migration.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"migrateFeeController(address[])\":{\"notice\":\"Permissionless migration function.\"},\"migratePools(address[])\":{\"notice\":\"Migrate pools from the old fee controller to the new one.\"}},\"notice\":\"Migrate from the original ProtocolFeeController to one with extra events.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ProtocolFeeControllerMigrationV2.sol\":\"ProtocolFeeControllerMigrationV2\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol\":{\"keccak256\":\"0x434eda908f66d99d967c2c2b233337227c331cd79655ec5b0ddcc76db7a20606\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b0b6c4bc095113dfbaeb9d9a6f9602f0f1a79b075c82d5ccccff7a1b67af1ce8\",\"dweb:/ipfs/QmaePfy8V5U9UFqkDtdTvPjJLmo1XEorPrC1fMVB35n86Y\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xe0e5193402394ef505f87b206d8e64e1ea8b604feeb2ea8bbd054050778c162d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c962b5d782a8ec4341741dd49daf071e23560548ad95ed00e1531379cfcf0a2e\",\"dweb:/ipfs/QmbPn63SLEZp719KdAtPa4urbhQwqYzfewWfNRtw3nyy8c\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\":{\"keccak256\":\"0xe45521ca4ed88ce5d25262f764132ad923c9207db89a51d5e76e960c3ee7e9f1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8c7f1bb43ba9746184f4a0ac05ab2b1b62bc56da755346e518c8f427478aad2a\",\"dweb:/ipfs/QmYKgjtZ7Bu8MqQPQf1YBPb8FXfWaGYtL2fMQcZR3iBod1\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x67518bf3b6bd96f5897c56867fc57f3c31bb9b97abf93cf960de145a5eb82414\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://563857d8606cbd4f727c75f09901d09ec9faa73778fe85e2af851982cdb9b6e8\",\"dweb:/ipfs/QmU7x1gWCPGPAcxA8Qq3z8hscrGRFwsc28qad4RMihZ8qB\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"contracts/ProtocolFeeControllerMigration.sol\":{\"keccak256\":\"0xee813da8870157b65605312b549db970f60953eebaf01191c6c21b02292152b9\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://25752ef15a6940fa106538f0be3ecab62ae8b436319769556e400493417ccc74\",\"dweb:/ipfs/QmczThRsBQihuxveGf12KdtdeoQcRMaJaXapN3raD5S8vD\"]},\"contracts/ProtocolFeeControllerMigrationV2.sol\":{\"keccak256\":\"0xf6e29a66c5e8c5006378992a7f3386d950d420b3abb2225e05c18bafeb75ae2f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://947d078a4dc5b45432d5ebe2ddb1f017a73908b2433d4c8d59faea22d6398bfc\",\"dweb:/ipfs/QmesMVuTfv5FQ5sXeN4VRChxaT6ryUggusgLRE1tQ9BhjW\"]}},\"version\":1}"}}}}} \ No newline at end of file +{"id":"92c7c96ba3632d1cc62db77fecb50625","_format":"hh-sol-build-info-1","solcVersion":"0.8.27","solcLongVersion":"0.8.27+commit.40a35a09","input":{"language":"Solidity","sources":{"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthorizer } from \"../vault/IAuthorizer.sol\";\n\ninterface IBasicAuthorizer is IAuthorizer {\n // solhint-disable-next-line func-name-mixedcase\n function DEFAULT_ADMIN_ROLE() external view returns (bytes32);\n\n function grantRole(bytes32 role, address account) external;\n\n function revokeRole(bytes32 role, address account) external;\n\n function renounceRole(bytes32 role, address account) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Simple interface for permissioned calling of external functions.\ninterface IAuthentication {\n /// @notice The sender does not have permission to call a function.\n error SenderNotAllowed();\n\n /**\n * @notice Returns the action identifier associated with the external function described by `selector`.\n * @param selector The 4-byte selector of the permissioned function\n * @return actionId The computed actionId\n */\n function getActionId(bytes4 selector) external view returns (bytes32 actionId);\n}\n"},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice General interface for token exchange rates.\ninterface IRateProvider {\n /**\n * @notice An 18 decimal fixed point number representing the exchange rate of one token to another related token.\n * @dev The meaning of this rate depends on the context. Note that there may be an error associated with a token\n * rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface\n * does not take a rounding direction or return an error, so great care must be taken when interpreting and using\n * rates in downstream computations.\n *\n * @return rate The current token rate\n */\n function getRate() external view returns (uint256 rate);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Interface to the Vault's permission system.\ninterface IAuthorizer {\n /**\n * @notice Returns true if `account` can perform the action described by `actionId` in the contract `where`.\n * @param actionId Identifier for the action to be performed\n * @param account Account trying to perform the action\n * @param where Target contract for the action\n * @return success True if the action is permitted\n */\n function canPerform(bytes32 actionId, address account, address where) external view returns (bool success);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n// Explicitly import VaultTypes structs because we expect this interface to be heavily used by external developers.\n// Internally, when this list gets too long, we usually just do a simple import to keep things tidy.\nimport {\n TokenConfig,\n LiquidityManagement,\n PoolSwapParams,\n AfterSwapParams,\n HookFlags,\n AddLiquidityKind,\n RemoveLiquidityKind,\n SwapKind\n} from \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for pool hooks.\n * @dev Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that\n * they are called in the correct order, and with the correct arguments. To maintain this security, these functions\n * should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`,\n * then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)\n */\ninterface IHooks {\n /***************************************************************************\n Register\n ***************************************************************************/\n\n /**\n * @notice Hook executed when a pool is registered with a non-zero hooks contract.\n * @dev Returns true if registration was successful, and false to revert the pool registration.\n * Make sure this function is properly implemented (e.g. check the factory, and check that the\n * given pool is from the factory). The Vault address will be msg.sender.\n *\n * @param factory Address of the pool factory (contract deploying the pool)\n * @param pool Address of the pool\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param liquidityManagement Liquidity management flags indicating which functions are enabled\n * @return success True if the hook allowed the registration, false otherwise\n */\n function onRegister(\n address factory,\n address pool,\n TokenConfig[] memory tokenConfig,\n LiquidityManagement calldata liquidityManagement\n ) external returns (bool success);\n\n /**\n * @notice Return the set of hooks implemented by the contract.\n * @dev The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined\n * (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero).\n * `onRegister` is the only \"mandatory\" hook.\n *\n * @return hookFlags Flags indicating which hooks the contract supports\n */\n function getHookFlags() external view returns (HookFlags memory hookFlags);\n\n /***************************************************************************\n Initialize\n ***************************************************************************/\n\n /**\n * @notice Hook executed before pool initialization.\n * @dev Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param exactAmountsIn Exact amounts of input tokens\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with initialization\n */\n function onBeforeInitialize(uint256[] memory exactAmountsIn, bytes memory userData) external returns (bool success);\n\n /**\n * @notice Hook to be executed after pool initialization.\n * @dev Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param exactAmountsIn Exact amounts of input tokens\n * @param bptAmountOut Amount of pool tokens minted during initialization\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool accepts the initialization results\n */\n function onAfterInitialize(\n uint256[] memory exactAmountsIn,\n uint256 bptAmountOut,\n bytes memory userData\n ) external returns (bool success);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Hook to be executed before adding liquidity.\n * @dev Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param maxAmountsInScaled18 Maximum amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeAddLiquidity(\n address router,\n address pool,\n AddLiquidityKind kind,\n uint256[] memory maxAmountsInScaled18,\n uint256 minBptAmountOut,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success);\n\n /**\n * @notice Hook to be executed after adding liquidity.\n * @dev Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param amountsInScaled18 Actual amounts of tokens added, sorted in token registration order\n * @param amountsInRaw Actual amounts of tokens added, sorted in token registration order\n * @param bptAmountOut Amount of pool tokens minted\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Additional (optional) data provided by the user\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook\n */\n function onAfterAddLiquidity(\n address router,\n address pool,\n AddLiquidityKind kind,\n uint256[] memory amountsInScaled18,\n uint256[] memory amountsInRaw,\n uint256 bptAmountOut,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success, uint256[] memory hookAdjustedAmountsInRaw);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Hook to be executed before removing liquidity.\n * @dev Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The type of remove liquidity operation (e.g., proportional, custom)\n * @param maxBptAmountIn Maximum amount of input pool tokens\n * @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeRemoveLiquidity(\n address router,\n address pool,\n RemoveLiquidityKind kind,\n uint256 maxBptAmountIn,\n uint256[] memory minAmountsOutScaled18,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success);\n\n /**\n * @notice Hook to be executed after removing liquidity.\n * @dev Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The type of remove liquidity operation (e.g., proportional, custom)\n * @param bptAmountIn Amount of pool tokens to burn\n * @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n * @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Additional (optional) data provided by the user\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook\n */\n function onAfterRemoveLiquidity(\n address router,\n address pool,\n RemoveLiquidityKind kind,\n uint256 bptAmountIn,\n uint256[] memory amountsOutScaled18,\n uint256[] memory amountsOutRaw,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success, uint256[] memory hookAdjustedAmountsOutRaw);\n\n /***************************************************************************\n Swap\n ***************************************************************************/\n\n /**\n * @notice Called before a swap to give the Pool an opportunity to perform actions.\n * @dev Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see PoolSwapParams for struct definition)\n * @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeSwap(PoolSwapParams calldata params, address pool) external returns (bool success);\n\n /**\n * @notice Called after a swap to perform further actions once the balances have been updated by the swap.\n * @dev Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should\n * use the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see above for struct definition)\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook\n */\n function onAfterSwap(\n AfterSwapParams calldata params\n ) external returns (bool success, uint256 hookAdjustedAmountCalculatedRaw);\n\n /**\n * @notice Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\n * @dev Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see PoolSwapParams for struct definition)\n * @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n * @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage, for reference\n * @return success True if the pool wishes to proceed with settlement\n * @return dynamicSwapFeePercentage Value of the swap fee percentage, as an 18-decimal FP value\n */\n function onComputeDynamicSwapFeePercentage(\n PoolSwapParams calldata params,\n address pool,\n uint256 staticSwapFeePercentage\n ) external view returns (bool success, uint256 dynamicSwapFeePercentage);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IVault } from \"./IVault.sol\";\n\n/// @notice Contract that handles protocol and pool creator fees for the Vault.\ninterface IProtocolFeeController {\n /**\n * @notice Emitted when the protocol swap fee percentage is updated.\n * @param swapFeePercentage The updated protocol swap fee percentage\n */\n event GlobalProtocolSwapFeePercentageChanged(uint256 swapFeePercentage);\n\n /**\n * @notice Emitted when the protocol yield fee percentage is updated.\n * @param yieldFeePercentage The updated protocol yield fee percentage\n */\n event GlobalProtocolYieldFeePercentageChanged(uint256 yieldFeePercentage);\n\n /**\n * @notice Emitted when the protocol swap fee percentage is updated for a specific pool.\n * @param pool The pool whose protocol swap fee will be changed\n * @param swapFeePercentage The updated protocol swap fee percentage\n */\n event ProtocolSwapFeePercentageChanged(address indexed pool, uint256 swapFeePercentage);\n\n /**\n * @notice Emitted when the protocol yield fee percentage is updated for a specific pool.\n * @param pool The pool whose protocol yield fee will be changed\n * @param yieldFeePercentage The updated protocol yield fee percentage\n */\n event ProtocolYieldFeePercentageChanged(address indexed pool, uint256 yieldFeePercentage);\n\n /**\n * @notice Emitted when the pool creator swap fee percentage of a pool is updated.\n * @param pool The pool whose pool creator swap fee will be changed\n * @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage for the pool\n */\n event PoolCreatorSwapFeePercentageChanged(address indexed pool, uint256 poolCreatorSwapFeePercentage);\n\n /**\n * @notice Emitted when the pool creator yield fee percentage of a pool is updated.\n * @param pool The pool whose pool creator yield fee will be changed\n * @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage for the pool\n */\n event PoolCreatorYieldFeePercentageChanged(address indexed pool, uint256 poolCreatorYieldFeePercentage);\n\n /**\n * @notice Logs the collection of protocol swap fees in a specific token and amount.\n * @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n * in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass\n * multiple operations.\n *\n * @param pool The pool on which the swap fee was charged\n * @param token The token in which the swap fee was charged\n * @param amount The amount of the token collected in fees\n */\n event ProtocolSwapFeeCollected(address indexed pool, IERC20 indexed token, uint256 amount);\n\n /**\n * @notice Logs the collection of protocol yield fees in a specific token and amount.\n * @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n * in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass\n * multiple operations.\n *\n * @param pool The pool on which the yield fee was charged\n * @param token The token in which the yield fee was charged\n * @param amount The amount of the token collected in fees\n */\n event ProtocolYieldFeeCollected(address indexed pool, IERC20 indexed token, uint256 amount);\n\n /**\n * @notice Logs the withdrawal of protocol fees in a specific token and amount.\n * @param pool The pool from which protocol fees are being withdrawn\n * @param token The token being withdrawn\n * @param recipient The recipient of the funds\n * @param amount The amount of the fee token that was withdrawn\n */\n event ProtocolFeesWithdrawn(address indexed pool, IERC20 indexed token, address indexed recipient, uint256 amount);\n\n /**\n * @notice Logs the withdrawal of pool creator fees in a specific token and amount.\n * @param pool The pool from which pool creator fees are being withdrawn\n * @param token The token being withdrawn\n * @param recipient The recipient of the funds (the pool creator if permissionless, or another account)\n * @param amount The amount of the fee token that was withdrawn\n */\n event PoolCreatorFeesWithdrawn(\n address indexed pool,\n IERC20 indexed token,\n address indexed recipient,\n uint256 amount\n );\n\n /**\n * @notice Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\n * @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n * equal the current global swap fee percentage.\n *\n * @param pool The pool being registered\n * @param aggregateSwapFeePercentage The initial aggregate swap fee percentage\n * @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially\n */\n event InitialPoolAggregateSwapFeePercentage(\n address indexed pool,\n uint256 aggregateSwapFeePercentage,\n bool isProtocolFeeExempt\n );\n\n /**\n * @notice Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\n * @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n * equal the current global yield fee percentage.\n *\n * @param pool The pool being registered\n * @param aggregateYieldFeePercentage The initial aggregate yield fee percentage\n * @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially\n */\n event InitialPoolAggregateYieldFeePercentage(\n address indexed pool,\n uint256 aggregateYieldFeePercentage,\n bool isProtocolFeeExempt\n );\n\n /**\n * @notice Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\n * @dev The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this\n * simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee\n * counterpart also include the protocol fee exemption flag, we might as well include it here as well.\n *\n * @param pool The address of the pool being registered\n * @param poolCreator The address of the pool creator (non-zero, or the event would not be emitted)\n * @param protocolFeeExempt True if the pool is initially exempt from protocol fees\n */\n event PoolRegisteredWithFeeController(address indexed pool, address indexed poolCreator, bool protocolFeeExempt);\n\n /**\n * @notice Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\n * @dev Note that this is checked for both the global and pool-specific protocol swap fee percentages.\n */\n error ProtocolSwapFeePercentageTooHigh();\n\n /**\n * @notice Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\n * @dev Note that this is checked for both the global and pool-specific protocol yield fee percentages.\n */\n error ProtocolYieldFeePercentageTooHigh();\n\n /**\n * @notice Error raised if there is no pool creator on a withdrawal attempt from the given pool.\n * @param pool The pool with no creator\n */\n error PoolCreatorNotRegistered(address pool);\n\n /**\n * @notice Error raised if the wrong account attempts to withdraw pool creator fees.\n * @param caller The account attempting to withdraw pool creator fees\n * @param pool The pool the caller tried to withdraw from\n */\n error CallerIsNotPoolCreator(address caller, address pool);\n\n /// @notice Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\n error PoolCreatorFeePercentageTooHigh();\n\n /**\n * @notice Get the address of the main Vault contract.\n * @return vault The Vault address\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Collects aggregate fees from the Vault for a given pool.\n * @param pool The pool with aggregate fees\n */\n function collectAggregateFees(address pool) external;\n\n /**\n * @notice Getter for the current global protocol swap fee.\n * @return protocolSwapFeePercentage The global protocol swap fee percentage\n */\n function getGlobalProtocolSwapFeePercentage() external view returns (uint256 protocolSwapFeePercentage);\n\n /**\n * @notice Getter for the current global protocol yield fee.\n * @return protocolYieldFeePercentage The global protocol yield fee percentage\n */\n function getGlobalProtocolYieldFeePercentage() external view returns (uint256 protocolYieldFeePercentage);\n\n /**\n * @notice Getter for pool registration flag.\n * @param pool The address of the pool\n * @return isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\n */\n function isPoolRegistered(address pool) external view returns (bool);\n\n /**\n * @notice Getter for the current protocol swap fee for a given pool.\n * @param pool The address of the pool\n * @return protocolSwapFeePercentage The protocol swap fee percentage for the given pool\n * @return isOverride True if the protocol fee has been overridden\n */\n function getPoolProtocolSwapFeeInfo(\n address pool\n ) external view returns (uint256 protocolSwapFeePercentage, bool isOverride);\n\n /**\n * @notice Getter for the current protocol yield fee for a given pool.\n * @param pool The address of the pool\n * @return protocolYieldFeePercentage The protocol yield fee percentage for the given pool\n * @return isOverride True if the protocol fee has been overridden\n */\n function getPoolProtocolYieldFeeInfo(\n address pool\n ) external view returns (uint256 protocolYieldFeePercentage, bool isOverride);\n\n /**\n * @notice Getter for the current pool creator swap fee percentage for a given pool.\n * @param pool The address of the pool\n * @return poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\n */\n function getPoolCreatorSwapFeePercentage(address pool) external view returns (uint256);\n\n /**\n * @notice Getter for the current pool creator yield fee percentage for a given pool.\n * @param pool The address of the pool\n * @return poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee\n */\n function getPoolCreatorYieldFeePercentage(address pool) external view returns (uint256);\n\n /**\n * @notice Returns the amount of each pool token allocated to the protocol for withdrawal.\n * @dev Includes both swap and yield fees.\n * @param pool The address of the pool on which fees were collected\n * @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order\n */\n function getProtocolFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts);\n\n /**\n * @notice Returns the amount of each pool token allocated to the pool creator for withdrawal.\n * @dev Includes both swap and yield fees.\n * @param pool The address of the pool on which fees were collected\n * @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order\n */\n function getPoolCreatorFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts);\n\n /**\n * @notice Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\n * @dev Not tied to any particular pool; this just performs the low-level \"additive fee\" calculation. Note that\n * pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are\n * stored in the Vault with 24-bit precision, this will truncate any values that require greater precision.\n * It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee\n * components, but the truncation ensures it will not revert for any valid set of fee percentages.\n *\n * See example below:\n *\n * tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60%\n * totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000\n * protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400\n * creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600\n * creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360\n * lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\n *\n * @param protocolFeePercentage The protocol portion of the aggregate fee percentage\n * @param poolCreatorFeePercentage The pool creator portion of the aggregate fee percentage\n * @return aggregateFeePercentage The computed aggregate percentage\n */\n function computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) external pure returns (uint256 aggregateFeePercentage);\n\n /**\n * @notice Override the protocol swap fee percentage for a specific pool.\n * @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n * from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n *\n * @param pool The pool for which we are setting the protocol swap fee\n */\n function updateProtocolSwapFeePercentage(address pool) external;\n\n /**\n * @notice Override the protocol yield fee percentage for a specific pool.\n * @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n * from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n *\n * @param pool The pool for which we are setting the protocol yield fee\n */\n function updateProtocolYieldFeePercentage(address pool) external;\n\n /***************************************************************************\n Permissioned Functions\n ***************************************************************************/\n\n /**\n * @notice Add pool-specific entries to the protocol swap and yield percentages.\n * @dev This must be called from the Vault during pool registration. It will initialize the pool to the global\n * protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate\n * fee percentages, based on an initial pool creator fee of 0.\n *\n * @param pool The address of the pool being registered\n * @param poolCreator The address of the pool creator (or 0 if there won't be a pool creator fee)\n * @param protocolFeeExempt If true, the pool is initially exempt from protocol fees\n * @return aggregateSwapFeePercentage The initial aggregate swap fee percentage\n * @return aggregateYieldFeePercentage The initial aggregate yield fee percentage\n */\n function registerPool(\n address pool,\n address poolCreator,\n bool protocolFeeExempt\n ) external returns (uint256 aggregateSwapFeePercentage, uint256 aggregateYieldFeePercentage);\n\n /**\n * @notice Set the global protocol swap fee percentage, used by standard pools.\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage\n */\n function setGlobalProtocolSwapFeePercentage(uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Set the global protocol yield fee percentage, used by standard pools.\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage\n */\n function setGlobalProtocolYieldFeePercentage(uint256 newProtocolYieldFeePercentage) external;\n\n /**\n * @notice Override the protocol swap fee percentage for a specific pool.\n * @param pool The address of the pool for which we are setting the protocol swap fee\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage for the pool\n */\n function setProtocolSwapFeePercentage(address pool, uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Override the protocol yield fee percentage for a specific pool.\n * @param pool The address of the pool for which we are setting the protocol yield fee\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage for the pool\n */\n function setProtocolYieldFeePercentage(address pool, uint256 newProtocolYieldFeePercentage) external;\n\n /**\n * @notice Assigns a new pool creator swap fee percentage to the specified pool.\n * @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n * the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n * pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n *\n * @param pool The address of the pool for which the pool creator fee will be changed\n * @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage to apply to the pool\n */\n function setPoolCreatorSwapFeePercentage(address pool, uint256 poolCreatorSwapFeePercentage) external;\n\n /**\n * @notice Assigns a new pool creator yield fee percentage to the specified pool.\n * @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n * the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n * pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n *\n * @param pool The address of the pool for which the pool creator fee will be changed\n * @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage to apply to the pool\n */\n function setPoolCreatorYieldFeePercentage(address pool, uint256 poolCreatorYieldFeePercentage) external;\n\n /**\n * @notice Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\n * @dev Sends swap and yield protocol fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n */\n function withdrawProtocolFees(address pool, address recipient) external;\n\n /**\n * @notice Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\n * @dev Sends swap and yield protocol fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n * @param token Token to withdraw\n */\n function withdrawProtocolFeesForToken(address pool, address recipient, IERC20 token) external;\n\n /**\n * @notice Withdraw collected pool creator fees for a given pool. This is a permissioned function.\n * @dev Sends swap and yield pool creator fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n */\n function withdrawPoolCreatorFees(address pool, address recipient) external;\n\n /**\n * @notice Withdraw collected pool creator fees for a given pool.\n * @dev Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable\n * value, this function is permissionless.\n *\n * @param pool The pool on which fees were collected\n */\n function withdrawPoolCreatorFees(address pool) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"../solidity-utils/helpers/IAuthentication.sol\";\nimport { IVaultExtension } from \"./IVaultExtension.sol\";\nimport { IVaultErrors } from \"./IVaultErrors.sol\";\nimport { IVaultEvents } from \"./IVaultEvents.sol\";\nimport { IVaultAdmin } from \"./IVaultAdmin.sol\";\nimport { IVaultMain } from \"./IVaultMain.sol\";\n\n/// @notice Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries.\ninterface IVault is IVaultMain, IVaultExtension, IVaultAdmin, IVaultErrors, IVaultEvents, IAuthentication {\n /// @return vault The main Vault address.\n function vault() external view override(IVaultAdmin, IVaultExtension) returns (IVault);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IVault } from \"./IVault.sol\";\n\n/**\n * @notice Interface for functions defined on the `VaultAdmin` contract.\n * @dev `VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations,\n * as two delegate calls add gas to each call. Most of the permissioned calls are here.\n */\ninterface IVaultAdmin {\n /*******************************************************************************\n Constants and immutables\n *******************************************************************************/\n\n /**\n * @notice Returns the main Vault address.\n * @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n * @return vault The address of the main Vault\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Returns the Vault's pause window end time.\n * @dev This value is immutable, and represents the timestamp after which the Vault can no longer be paused\n * by governance. Balancer timestamps are 32 bits.\n *\n * @return pauseWindowEndTime The timestamp when the Vault's pause window ends\n */\n function getPauseWindowEndTime() external view returns (uint32 pauseWindowEndTime);\n\n /**\n * @notice Returns the Vault's buffer period duration.\n * @dev This value is immutable. It represents the period during which, if paused, the Vault will remain paused.\n * This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer\n * timestamps are 32 bits.\n *\n * @return bufferPeriodDuration The length of the buffer period in seconds\n */\n function getBufferPeriodDuration() external view returns (uint32 bufferPeriodDuration);\n\n /**\n * @notice Returns the Vault's buffer period end time.\n * @dev This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer\n * timestamps are 32 bits.\n *\n * @return bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused\n */\n function getBufferPeriodEndTime() external view returns (uint32 bufferPeriodEndTime);\n\n /**\n * @notice Get the minimum number of tokens in a pool.\n * @dev We expect the vast majority of pools to be 2-token.\n * @return minTokens The minimum token count of a pool\n */\n function getMinimumPoolTokens() external pure returns (uint256 minTokens);\n\n /**\n * @notice Get the maximum number of tokens in a pool.\n * @return maxTokens The maximum token count of a pool\n */\n function getMaximumPoolTokens() external pure returns (uint256 maxTokens);\n\n /**\n * @notice Get the minimum total supply of pool tokens (BPT) for an initialized pool.\n * @dev This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT\n * is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\n *\n * @return poolMinimumTotalSupply The minimum total supply a pool can have after initialization\n */\n function getPoolMinimumTotalSupply() external pure returns (uint256 poolMinimumTotalSupply);\n\n /**\n * @notice Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\n * @dev This prevents buffers from being completely drained. When the buffer is initialized, this minimum number\n * of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal\n * to the Vault, as buffers are not tokenized.\n *\n * @return bufferMinimumTotalSupply The minimum total supply a buffer can have after initialization\n */\n function getBufferMinimumTotalSupply() external pure returns (uint256 bufferMinimumTotalSupply);\n\n /**\n * @notice Get the minimum trade amount in a pool operation.\n * @dev This limit is applied to the 18-decimal \"upscaled\" amount in any operation (swap, add/remove liquidity).\n * @return minimumTradeAmount The minimum trade amount as an 18-decimal floating point number\n */\n function getMinimumTradeAmount() external view returns (uint256 minimumTradeAmount);\n\n /**\n * @notice Get the minimum wrap amount in a buffer operation.\n * @dev This limit is applied to the wrap operation amount, in native underlying token decimals.\n * @return minimumWrapAmount The minimum wrap amount in native underlying token decimals\n */\n function getMinimumWrapAmount() external view returns (uint256 minimumWrapAmount);\n\n /*******************************************************************************\n Vault Pausing\n *******************************************************************************/\n\n /**\n * @notice Indicates whether the Vault is paused.\n * @dev If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that\n * ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not\n * also pause buffers (though we anticipate they would likely be paused and unpaused together). Call\n * `areBuffersPaused` to check the pause state of the buffers.\n *\n * @return vaultPaused True if the Vault is paused\n */\n function isVaultPaused() external view returns (bool vaultPaused);\n\n /**\n * @notice Returns the paused status, and end times of the Vault's pause window and buffer period.\n * @dev Balancer timestamps are 32 bits.\n * @return vaultPaused True if the Vault is paused\n * @return vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window\n * @return vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period\n */\n function getVaultPausedState()\n external\n view\n returns (bool vaultPaused, uint32 vaultPauseWindowEndTime, uint32 vaultBufferPeriodEndTime);\n\n /**\n * @notice Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\n * @dev This is a permissioned function that will only work during the Pause Window set during deployment.\n * Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing\n * the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers\n * are also paused (with `pauseVaultBuffers`).\n */\n function pauseVault() external;\n\n /**\n * @notice Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\n * @dev This is a permissioned function that will only work on a paused Vault within the Buffer Period set during\n * deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above,\n * ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse\n * `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\n */\n function unpauseVault() external;\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /**\n * @notice Pause the Pool: an emergency action which disables all pool functions.\n * @dev This is a permissioned function that will only work during the Pause Window set during pool factory\n * deployment.\n *\n * @param pool The pool being paused\n */\n function pausePool(address pool) external;\n\n /**\n * @notice Reverse a `pause` operation, and restore the Pool to normal functionality.\n * @dev This is a permissioned function that will only work on a paused Pool within the Buffer Period set during\n * deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\n *\n * @param pool The pool being unpaused\n */\n function unpausePool(address pool) external;\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Assigns a new static swap fee percentage to the specified pool.\n * @dev This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within\n * the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`.\n * Emits the SwapFeePercentageChanged event.\n *\n * @param pool The address of the pool for which the static swap fee will be changed\n * @param swapFeePercentage The new swap fee percentage to apply to the pool\n */\n function setStaticSwapFeePercentage(address pool, uint256 swapFeePercentage) external;\n\n /**\n * @notice Collects accumulated aggregate swap and yield fees for the specified pool.\n * @dev Fees are sent to the ProtocolFeeController address.\n * @param pool The pool on which all aggregate fees should be collected\n * @return swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n * @return yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order\n */\n function collectAggregateFees(\n address pool\n ) external returns (uint256[] memory swapFeeAmounts, uint256[] memory yieldFeeAmounts);\n\n /**\n * @notice Update an aggregate swap fee percentage.\n * @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n * for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n * fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n * that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n * Emits an `AggregateSwapFeePercentageChanged` event.\n *\n * @param pool The pool whose swap fee percentage will be updated\n * @param newAggregateSwapFeePercentage The new aggregate swap fee percentage\n */\n function updateAggregateSwapFeePercentage(address pool, uint256 newAggregateSwapFeePercentage) external;\n\n /**\n * @notice Update an aggregate yield fee percentage.\n * @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n * for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n * fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n * that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n * Emits an `AggregateYieldFeePercentageChanged` event.\n *\n * @param pool The pool whose yield fee percentage will be updated\n * @param newAggregateYieldFeePercentage The new aggregate yield fee percentage\n */\n function updateAggregateYieldFeePercentage(address pool, uint256 newAggregateYieldFeePercentage) external;\n\n /**\n * @notice Sets a new Protocol Fee Controller for the Vault.\n * @dev This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\n * @param newProtocolFeeController The address of the new Protocol Fee Controller\n */\n function setProtocolFeeController(IProtocolFeeController newProtocolFeeController) external;\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Enable recovery mode for a pool.\n * @dev This is a permissioned function. It enables a safe proportional withdrawal, with no external calls.\n * Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so\n * must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live\n * balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\n *\n * @param pool The address of the pool\n */\n function enableRecoveryMode(address pool) external;\n\n /**\n * @notice Disable recovery mode for a pool.\n * @dev This is a permissioned function. It re-syncs live balances (which could not be updated during\n * Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could\n * potentially fail if there is an issue with any associated Rate Providers.\n *\n * @param pool The address of the pool\n */\n function disableRecoveryMode(address pool) external;\n\n /*******************************************************************************\n Query Functionality\n *******************************************************************************/\n\n /**\n * @notice Disables query functionality on the Vault. Can only be called by governance.\n * @dev The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from\n * settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable\n * queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).\n * This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether\n * disabling queries is completely necessary; queries can still be re-enabled after this call.\n */\n function disableQuery() external;\n\n /**\n * @notice Disables query functionality permanently on the Vault. Can only be called by governance.\n * @dev Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\n */\n function disableQueryPermanently() external;\n\n /**\n * @notice Enables query functionality on the Vault. Can only be called by governance.\n * @dev Only works if queries are not permanently disabled.\n */\n function enableQuery() external;\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Indicates whether the Vault buffers are paused.\n * @dev When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true)\n * will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and\n * independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they\n * would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\n *\n * @return buffersPaused True if the Vault buffers are paused\n */\n function areBuffersPaused() external view returns (bool buffersPaused);\n\n /**\n * @notice Pauses native vault buffers globally.\n * @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n * `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not\n * possible to pause vault buffers individually.\n *\n * This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate\n * and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting\n * buffers, and vice versa.\n */\n function pauseVaultBuffers() external;\n\n /**\n * @notice Unpauses native vault buffers globally.\n * @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n * `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above,\n * ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`.\n * If the Vault was also paused, it will remain in that state until explicitly unpaused.\n *\n * This is a permissioned call.\n */\n function unpauseVaultBuffers() external;\n\n /**\n * @notice Initializes buffer for the given wrapped token.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param amountUnderlyingRaw Amount of underlying tokens that will be deposited into the buffer\n * @param amountWrappedRaw Amount of wrapped tokens that will be deposited into the buffer\n * @param minIssuedShares Minimum amount of shares to receive from the buffer, expressed in underlying token\n * native decimals\n * @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n * liquidity from the buffer\n * @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n * (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\n */\n function initializeBuffer(\n IERC4626 wrappedToken,\n uint256 amountUnderlyingRaw,\n uint256 amountWrappedRaw,\n uint256 minIssuedShares,\n address sharesOwner\n ) external returns (uint256 issuedShares);\n\n /**\n * @notice Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\n * @dev The buffer needs to be initialized beforehand.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param maxAmountUnderlyingInRaw Maximum amount of underlying tokens to add to the buffer. It is expressed in\n * underlying token native decimals\n * @param maxAmountWrappedInRaw Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n * token native decimals\n * @param exactSharesToIssue The value in underlying tokens that `sharesOwner` wants to add to the buffer,\n * in underlying token decimals\n * @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n * liquidity from the buffer\n * @return amountUnderlyingRaw Amount of underlying tokens deposited into the buffer\n * @return amountWrappedRaw Amount of wrapped tokens deposited into the buffer\n */\n function addLiquidityToBuffer(\n IERC4626 wrappedToken,\n uint256 maxAmountUnderlyingInRaw,\n uint256 maxAmountWrappedInRaw,\n uint256 exactSharesToIssue,\n address sharesOwner\n ) external returns (uint256 amountUnderlyingRaw, uint256 amountWrappedRaw);\n\n /**\n * @notice Removes liquidity from an internal ERC4626 buffer in the Vault.\n * @dev Only proportional exits are supported, and the sender has to be the owner of the shares.\n * This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint.\n *\n * Pre-conditions:\n * - The buffer needs to be initialized.\n * - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why\n * this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer.\n * - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\n *\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param sharesToRemove Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's\n * total shares. It is expressed in underlying token native decimals\n * @param minAmountUnderlyingOutRaw Minimum amount of underlying tokens to receive from the buffer. It is expressed\n * in underlying token native decimals\n * @param minAmountWrappedOutRaw Minimum amount of wrapped tokens to receive from the buffer. It is expressed in\n * wrapped token native decimals\n * @return removedUnderlyingBalanceRaw Amount of underlying tokens returned to the user\n * @return removedWrappedBalanceRaw Amount of wrapped tokens returned to the user\n */\n function removeLiquidityFromBuffer(\n IERC4626 wrappedToken,\n uint256 sharesToRemove,\n uint256 minAmountUnderlyingOutRaw,\n uint256 minAmountWrappedOutRaw\n ) external returns (uint256 removedUnderlyingBalanceRaw, uint256 removedWrappedBalanceRaw);\n\n /**\n * @notice Returns the asset registered for a given wrapped token.\n * @dev The asset can never change after buffer initialization.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return underlyingToken Address of the underlying token registered for the wrapper; `address(0)` if the buffer\n * has not been initialized.\n */\n function getBufferAsset(IERC4626 wrappedToken) external view returns (address underlyingToken);\n\n /**\n * @notice Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets\n * in the buffer.\n *\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param liquidityOwner Address of the user that owns liquidity in the wrapped token's buffer\n * @return ownerShares Amount of shares allocated to the liquidity owner, in native underlying token decimals\n */\n function getBufferOwnerShares(\n IERC4626 wrappedToken,\n address liquidityOwner\n ) external view returns (uint256 ownerShares);\n\n /**\n * @notice Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return bufferShares Amount of supply shares of the buffer, in native underlying token decimals\n */\n function getBufferTotalShares(IERC4626 wrappedToken) external view returns (uint256 bufferShares);\n\n /**\n * @notice Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\n * @dev All values are in native token decimals of the wrapped or underlying tokens.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return underlyingBalanceRaw Amount of underlying tokens deposited into the buffer, in native token decimals\n * @return wrappedBalanceRaw Amount of wrapped tokens deposited into the buffer, in native token decimals\n */\n function getBufferBalance(\n IERC4626 wrappedToken\n ) external view returns (uint256 underlyingBalanceRaw, uint256 wrappedBalanceRaw);\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Sets a new Authorizer for the Vault.\n * @dev This is a permissioned call. Emits an `AuthorizerChanged` event.\n * @param newAuthorizer The address of the new authorizer\n */\n function setAuthorizer(IAuthorizer newAuthorizer) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/// @notice Errors are declared inside an interface (namespace) to improve DX with Typechain.\ninterface IVaultErrors {\n /*******************************************************************************\n Registration and Initialization\n *******************************************************************************/\n\n /**\n * @notice A pool has already been registered. `registerPool` may only be called once.\n * @param pool The already registered pool\n */\n error PoolAlreadyRegistered(address pool);\n\n /**\n * @notice A pool has already been initialized. `initialize` may only be called once.\n * @param pool The already initialized pool\n */\n error PoolAlreadyInitialized(address pool);\n\n /**\n * @notice A pool has not been registered.\n * @param pool The unregistered pool\n */\n error PoolNotRegistered(address pool);\n\n /**\n * @notice A referenced pool has not been initialized.\n * @param pool The uninitialized pool\n */\n error PoolNotInitialized(address pool);\n\n /**\n * @notice A hook contract rejected a pool on registration.\n * @param poolHooksContract Address of the hook contract that rejected the pool registration\n * @param pool Address of the rejected pool\n * @param poolFactory Address of the pool factory\n */\n error HookRegistrationFailed(address poolHooksContract, address pool, address poolFactory);\n\n /**\n * @notice A token was already registered (i.e., it is a duplicate in the pool).\n * @param token The duplicate token\n */\n error TokenAlreadyRegistered(IERC20 token);\n\n /// @notice The token count is below the minimum allowed.\n error MinTokens();\n\n /// @notice The token count is above the maximum allowed.\n error MaxTokens();\n\n /// @notice Invalid tokens (e.g., zero) cannot be registered.\n error InvalidToken();\n\n /// @notice The token type given in a TokenConfig during pool registration is invalid.\n error InvalidTokenType();\n\n /// @notice The data in a TokenConfig struct is inconsistent or unsupported.\n error InvalidTokenConfiguration();\n\n /// @notice Tokens with more than 18 decimals are not supported.\n error InvalidTokenDecimals();\n\n /**\n * @notice The token list passed into an operation does not match the pool tokens in the pool.\n * @param pool Address of the pool\n * @param expectedToken The correct token at a given index in the pool\n * @param actualToken The actual token found at that index\n */\n error TokensMismatch(address pool, address expectedToken, address actualToken);\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /// @notice A transient accounting operation completed with outstanding token deltas.\n error BalanceNotSettled();\n\n /// @notice A user called a Vault function (swap, add/remove liquidity) outside the lock context.\n error VaultIsNotUnlocked();\n\n /// @notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\n error DynamicSwapFeeHookFailed();\n\n /// @notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\n error BeforeSwapHookFailed();\n\n /// @notice The pool has returned false to the afterSwap hook, indicating the transaction should revert.\n error AfterSwapHookFailed();\n\n /// @notice The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\n error BeforeInitializeHookFailed();\n\n /// @notice The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\n error AfterInitializeHookFailed();\n\n /// @notice The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\n error BeforeAddLiquidityHookFailed();\n\n /// @notice The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\n error AfterAddLiquidityHookFailed();\n\n /// @notice The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\n error BeforeRemoveLiquidityHookFailed();\n\n /// @notice The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\n error AfterRemoveLiquidityHookFailed();\n\n /// @notice An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\n error RouterNotTrusted();\n\n /*******************************************************************************\n Swaps\n *******************************************************************************/\n\n /// @notice The user tried to swap zero tokens.\n error AmountGivenZero();\n\n /// @notice The user attempted to swap a token for itself.\n error CannotSwapSameToken();\n\n /**\n * @notice The user attempted to operate with a token that is not in the pool.\n * @param token The unregistered token\n */\n error TokenNotRegistered(IERC20 token);\n\n /**\n * @notice An amount in or out has exceeded the limit specified in the swap request.\n * @param amount The total amount in or out\n * @param limit The amount of the limit that has been exceeded\n */\n error SwapLimit(uint256 amount, uint256 limit);\n\n /**\n * @notice A hook adjusted amount in or out has exceeded the limit specified in the swap request.\n * @param amount The total amount in or out\n * @param limit The amount of the limit that has been exceeded\n */\n error HookAdjustedSwapLimit(uint256 amount, uint256 limit);\n\n /// @notice The amount given or calculated for an operation is below the minimum limit.\n error TradeAmountTooSmall();\n\n /*******************************************************************************\n Add Liquidity\n *******************************************************************************/\n\n /// @notice Add liquidity kind not supported.\n error InvalidAddLiquidityKind();\n\n /**\n * @notice A required amountIn exceeds the maximum limit specified for the operation.\n * @param tokenIn The incoming token\n * @param amountIn The total token amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error AmountInAboveMax(IERC20 tokenIn, uint256 amountIn, uint256 maxAmountIn);\n\n /**\n * @notice A hook adjusted amountIn exceeds the maximum limit specified for the operation.\n * @param tokenIn The incoming token\n * @param amountIn The total token amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error HookAdjustedAmountInAboveMax(IERC20 tokenIn, uint256 amountIn, uint256 maxAmountIn);\n\n /**\n * @notice The BPT amount received from adding liquidity is below the minimum specified for the operation.\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error BptAmountOutBelowMin(uint256 amountOut, uint256 minAmountOut);\n\n /// @notice Pool does not support adding liquidity with a customized input.\n error DoesNotSupportAddLiquidityCustom();\n\n /// @notice Pool does not support adding liquidity through donation.\n error DoesNotSupportDonation();\n\n /*******************************************************************************\n Remove Liquidity\n *******************************************************************************/\n\n /// @notice Remove liquidity kind not supported.\n error InvalidRemoveLiquidityKind();\n\n /**\n * @notice The actual amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error AmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /**\n * @notice The hook adjusted amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error HookAdjustedAmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /**\n * @notice The required BPT amount in exceeds the maximum limit specified for the operation.\n * @param amountIn The total BPT amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error BptAmountInAboveMax(uint256 amountIn, uint256 maxAmountIn);\n\n /// @notice Pool does not support removing liquidity with a customized input.\n error DoesNotSupportRemoveLiquidityCustom();\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Error raised when there is an overflow in the fee calculation.\n * @dev This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole\n * (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee\n * percentages in the Vault.\n */\n error ProtocolFeesExceedTotalCollected();\n\n /**\n * @notice Error raised when the swap fee percentage is less than the minimum allowed value.\n * @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n * range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n * if it is below the minimum value returned by the pool.\n *\n * Pools with dynamic fees do not check these limits.\n */\n error SwapFeePercentageTooLow();\n\n /**\n * @notice Error raised when the swap fee percentage is greater than the maximum allowed value.\n * @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n * range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n * if it is above the maximum value returned by the pool.\n *\n * Pools with dynamic fees do not check these limits.\n */\n error SwapFeePercentageTooHigh();\n\n /**\n * @notice Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\n * @dev Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n * precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n * corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n * Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between\n * the aggregate fee calculated here and that stored in the Vault.\n */\n error FeePrecisionTooHigh();\n\n /// @notice A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\n error PercentageAboveMax();\n\n /*******************************************************************************\n Queries\n *******************************************************************************/\n\n /// @notice A user tried to execute a query operation when they were disabled.\n error QueriesDisabled();\n\n /// @notice An admin tried to re-enable queries, but they were disabled permanently.\n error QueriesDisabledPermanently();\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Cannot enable recovery mode when already enabled.\n * @param pool The pool\n */\n error PoolInRecoveryMode(address pool);\n\n /**\n * @notice Cannot disable recovery mode when not enabled.\n * @param pool The pool\n */\n error PoolNotInRecoveryMode(address pool);\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\n * @param sender The account attempting to call a permissioned function\n */\n error SenderIsNotVault(address sender);\n\n /*******************************************************************************\n Pausing\n *******************************************************************************/\n\n /// @notice The caller specified a pause window period longer than the maximum.\n error VaultPauseWindowDurationTooLarge();\n\n /// @notice The caller specified a buffer period longer than the maximum.\n error PauseBufferPeriodDurationTooLarge();\n\n /// @notice A user tried to perform an operation while the Vault was paused.\n error VaultPaused();\n\n /// @notice Governance tried to unpause the Vault when it was not paused.\n error VaultNotPaused();\n\n /// @notice Governance tried to pause the Vault after the pause period expired.\n error VaultPauseWindowExpired();\n\n /**\n * @notice A user tried to perform an operation involving a paused Pool.\n * @param pool The paused pool\n */\n error PoolPaused(address pool);\n\n /**\n * @notice Governance tried to unpause the Pool when it was not paused.\n * @param pool The unpaused pool\n */\n error PoolNotPaused(address pool);\n\n /**\n * @notice Governance tried to pause a Pool after the pause period expired.\n * @param pool The pool\n */\n error PoolPauseWindowExpired(address pool);\n\n /*******************************************************************************\n ERC4626 token buffers\n *******************************************************************************/\n\n /**\n * @notice The buffer for the given wrapped token was already initialized.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error BufferAlreadyInitialized(IERC4626 wrappedToken);\n\n /**\n * @notice The buffer for the given wrapped token was not initialized.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error BufferNotInitialized(IERC4626 wrappedToken);\n\n /// @notice The user is trying to remove more than their allocated shares from the buffer.\n error NotEnoughBufferShares();\n\n /**\n * @notice The wrapped token asset does not match the underlying token.\n * @dev This should never happen, but a malicious wrapper contract might not return the correct address.\n * Legitimate wrapper contracts should make the asset a constant or immutable value.\n *\n * @param wrappedToken The wrapped token corresponding to the buffer\n * @param underlyingToken The underlying token returned by `asset`\n */\n error WrongUnderlyingToken(IERC4626 wrappedToken, address underlyingToken);\n\n /**\n * @notice A wrapped token reported the zero address as its underlying token asset.\n * @dev This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to\n * re-initialize the buffer).\n *\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error InvalidUnderlyingToken(IERC4626 wrappedToken);\n\n /**\n * @notice The amount given to wrap/unwrap was too small, which can introduce rounding issues.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error WrapAmountTooSmall(IERC4626 wrappedToken);\n\n /// @notice Buffer operation attempted while vault buffers are paused.\n error VaultBuffersArePaused();\n\n /// @notice Buffer shares were minted to the zero address.\n error BufferSharesInvalidReceiver();\n\n /// @notice Buffer shares were burned from the zero address.\n error BufferSharesInvalidOwner();\n\n /**\n * @notice The total supply of a buffer can't be lower than the absolute minimum.\n * @param totalSupply The total supply value that was below the minimum\n */\n error BufferTotalSupplyTooLow(uint256 totalSupply);\n\n /// @dev A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\n error NotEnoughUnderlying(IERC4626 wrappedToken, uint256 expectedUnderlyingAmount, uint256 actualUnderlyingAmount);\n\n /// @dev A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\n error NotEnoughWrapped(IERC4626 wrappedToken, uint256 expectedWrappedAmount, uint256 actualWrappedAmount);\n\n /// @dev Shares issued during initialization are below the requested amount.\n error IssuedSharesBelowMin(uint256 issuedShares, uint256 minIssuedShares);\n\n /*******************************************************************************\n Miscellaneous\n *******************************************************************************/\n\n /// @notice Pool does not support adding / removing liquidity with an unbalanced input.\n error DoesNotSupportUnbalancedLiquidity();\n\n /// @notice The contract should not receive ETH.\n error CannotReceiveEth();\n\n /**\n * @notice The `VaultExtension` contract was called by an account directly.\n * @dev It can only be called by the Vault via delegatecall.\n */\n error NotVaultDelegateCall();\n\n /// @notice The `VaultExtension` contract was configured with an incorrect Vault address.\n error WrongVaultExtensionDeployment();\n\n /// @notice The `ProtocolFeeController` contract was configured with an incorrect Vault address.\n error WrongProtocolFeeControllerDeployment();\n\n /// @notice The `VaultAdmin` contract was configured with an incorrect Vault address.\n error WrongVaultAdminDeployment();\n\n /// @notice Quote reverted with a reserved error code.\n error QuoteResultSpoofed();\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IHooks } from \"./IHooks.sol\";\nimport \"./VaultTypes.sol\";\n\n/// @dev Events are declared inside an interface (namespace) to improve DX with Typechain.\ninterface IVaultEvents {\n /**\n * @notice A Pool was registered by calling `registerPool`.\n * @param pool The pool being registered\n * @param factory The factory creating the pool\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param swapFeePercentage The static swap fee of the pool\n * @param pauseWindowEndTime The pool's pause window end time\n * @param roleAccounts Addresses the Vault will allow to change certain pool settings\n * @param hooksConfig Flags indicating which hooks the pool supports and address of hooks contract\n * @param liquidityManagement Supported liquidity management hook flags\n */\n event PoolRegistered(\n address indexed pool,\n address indexed factory,\n TokenConfig[] tokenConfig,\n uint256 swapFeePercentage,\n uint32 pauseWindowEndTime,\n PoolRoleAccounts roleAccounts,\n HooksConfig hooksConfig,\n LiquidityManagement liquidityManagement\n );\n\n /**\n * @notice A Pool was initialized by calling `initialize`.\n * @param pool The pool being initialized\n */\n event PoolInitialized(address indexed pool);\n\n /**\n * @notice A swap has occurred.\n * @param pool The pool with the tokens being swapped\n * @param tokenIn The token entering the Vault (balance increases)\n * @param tokenOut The token leaving the Vault (balance decreases)\n * @param amountIn Number of tokenIn tokens\n * @param amountOut Number of tokenOut tokens\n * @param swapFeePercentage Swap fee percentage applied (can differ if dynamic)\n * @param swapFeeAmount Swap fee amount paid\n */\n event Swap(\n address indexed pool,\n IERC20 indexed tokenIn,\n IERC20 indexed tokenOut,\n uint256 amountIn,\n uint256 amountOut,\n uint256 swapFeePercentage,\n uint256 swapFeeAmount\n );\n\n /**\n * @notice A wrap operation has occurred.\n * @param wrappedToken The wrapped token address\n * @param depositedUnderlying Number of underlying tokens deposited\n * @param mintedShares Number of shares (wrapped tokens) minted\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event Wrap(\n IERC4626 indexed wrappedToken,\n uint256 depositedUnderlying,\n uint256 mintedShares,\n bytes32 bufferBalances\n );\n\n /**\n * @notice An unwrap operation has occurred.\n * @param wrappedToken The wrapped token address\n * @param burnedShares Number of shares (wrapped tokens) burned\n * @param withdrawnUnderlying Number of underlying tokens withdrawn\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event Unwrap(\n IERC4626 indexed wrappedToken,\n uint256 burnedShares,\n uint256 withdrawnUnderlying,\n bytes32 bufferBalances\n );\n\n /**\n * @notice Liquidity has been added to a pool (including initialization).\n * @param pool The pool with liquidity added\n * @param liquidityProvider The user performing the operation\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param totalSupply The total supply of the pool after the operation\n * @param amountsAddedRaw The amount of each token that was added, sorted in token registration order\n * @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order\n */\n event LiquidityAdded(\n address indexed pool,\n address indexed liquidityProvider,\n AddLiquidityKind indexed kind,\n uint256 totalSupply,\n uint256[] amountsAddedRaw,\n uint256[] swapFeeAmountsRaw\n );\n\n /**\n * @notice Liquidity has been removed from a pool.\n * @param pool The pool with liquidity removed\n * @param liquidityProvider The user performing the operation\n * @param kind The remove liquidity operation type (e.g., proportional, custom)\n * @param totalSupply The total supply of the pool after the operation\n * @param amountsRemovedRaw The amount of each token that was removed, sorted in token registration order\n * @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order\n */\n event LiquidityRemoved(\n address indexed pool,\n address indexed liquidityProvider,\n RemoveLiquidityKind indexed kind,\n uint256 totalSupply,\n uint256[] amountsRemovedRaw,\n uint256[] swapFeeAmountsRaw\n );\n\n /**\n * @notice The Vault's pause status has changed.\n * @param paused True if the Vault was paused\n */\n event VaultPausedStateChanged(bool paused);\n\n /// @notice `disableQuery` has been called on the Vault, disabling query functionality.\n event VaultQueriesDisabled();\n\n /// @notice `enableQuery` has been called on the Vault, enabling query functionality.\n event VaultQueriesEnabled();\n\n /**\n * @notice A Pool's pause status has changed.\n * @param pool The pool that was just paused or unpaused\n * @param paused True if the pool was paused\n */\n event PoolPausedStateChanged(address indexed pool, bool paused);\n\n /**\n * @notice Emitted when the swap fee percentage of a pool is updated.\n * @param swapFeePercentage The new swap fee percentage for the pool\n */\n event SwapFeePercentageChanged(address indexed pool, uint256 swapFeePercentage);\n\n /**\n * @notice Recovery mode has been enabled or disabled for a pool.\n * @param pool The pool\n * @param recoveryMode True if recovery mode was enabled\n */\n event PoolRecoveryModeStateChanged(address indexed pool, bool recoveryMode);\n\n /**\n * @notice A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\n * @dev The `ProtocolFeeController` will emit an event with the underlying change.\n * @param pool The pool whose aggregate swap fee percentage changed\n * @param aggregateSwapFeePercentage The new aggregate swap fee percentage\n */\n event AggregateSwapFeePercentageChanged(address indexed pool, uint256 aggregateSwapFeePercentage);\n\n /**\n * @notice A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\n * @dev The `ProtocolFeeController` will emit an event with the underlying change.\n * @param pool The pool whose aggregate yield fee percentage changed\n * @param aggregateYieldFeePercentage The new aggregate yield fee percentage\n */\n event AggregateYieldFeePercentageChanged(address indexed pool, uint256 aggregateYieldFeePercentage);\n\n /**\n * @notice A new authorizer is set by `setAuthorizer`.\n * @param newAuthorizer The address of the new authorizer\n */\n event AuthorizerChanged(IAuthorizer indexed newAuthorizer);\n\n /**\n * @notice A new protocol fee controller is set by `setProtocolFeeController`.\n * @param newProtocolFeeController The address of the new protocol fee controller\n */\n event ProtocolFeeControllerChanged(IProtocolFeeController indexed newProtocolFeeController);\n\n /**\n * @notice Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\n * @dev The underlying token can be derived from the wrapped token, so it's not included here.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param amountUnderlying The amount of the underlying token that was deposited\n * @param amountWrapped The amount of the wrapped token that was deposited\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event LiquidityAddedToBuffer(\n IERC4626 indexed wrappedToken,\n uint256 amountUnderlying,\n uint256 amountWrapped,\n bytes32 bufferBalances\n );\n\n /**\n * @notice Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\n * @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n * retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n * \"totalSupply\" of a buffer.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param to The owner of the minted shares\n * @param issuedShares The amount of \"internal BPT\" shares created\n */\n event BufferSharesMinted(IERC4626 indexed wrappedToken, address indexed to, uint256 issuedShares);\n\n /**\n * @notice Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\n * @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n * retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n * \"totalSupply\" of a buffer.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param from The owner of the burned shares\n * @param burnedShares The amount of \"internal BPT\" shares burned\n */\n event BufferSharesBurned(IERC4626 indexed wrappedToken, address indexed from, uint256 burnedShares);\n\n /**\n * @notice Liquidity was removed from an ERC4626 buffer.\n * @dev The underlying token can be derived from the wrapped token, so it's not included here.\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param amountUnderlying The amount of the underlying token that was withdrawn\n * @param amountWrapped The amount of the wrapped token that was withdrawn\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event LiquidityRemovedFromBuffer(\n IERC4626 indexed wrappedToken,\n uint256 amountUnderlying,\n uint256 amountWrapped,\n bytes32 bufferBalances\n );\n\n /**\n * @notice The Vault buffers pause status has changed.\n * @dev If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer`\n * set to true) will revert.\n *\n * @param paused True if the Vault buffers were paused\n */\n event VaultBuffersPausedStateChanged(bool paused);\n\n /**\n * @notice Pools can use this event to emit event data from the Vault.\n * @param pool Pool address\n * @param eventKey Event key\n * @param eventData Encoded event data\n */\n event VaultAuxiliary(address indexed pool, bytes32 indexed eventKey, bytes eventData);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IVault } from \"./IVault.sol\";\nimport { IHooks } from \"./IHooks.sol\";\nimport \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for functions defined on the `VaultExtension` contract.\n * @dev `VaultExtension` handles less critical or frequently used functions, since delegate calls through\n * the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and\n * liquidity operations.\n */\ninterface IVaultExtension {\n /*******************************************************************************\n Constants and immutables\n *******************************************************************************/\n\n /**\n * @notice Returns the main Vault address.\n * @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n * @return vault The address of the main Vault\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Returns the VaultAdmin contract address.\n * @dev The VaultAdmin contract mostly implements permissioned functions.\n * @return vaultAdmin The address of the Vault admin\n */\n function getVaultAdmin() external view returns (address vaultAdmin);\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @notice Returns whether the Vault is unlocked (i.e., executing an operation).\n * @dev The Vault must be unlocked to perform state-changing liquidity operations.\n * @return unlocked True if the Vault is unlocked, false otherwise\n */\n function isUnlocked() external view returns (bool unlocked);\n\n /**\n * @notice Returns the count of non-zero deltas.\n * @return nonzeroDeltaCount The current value of `_nonzeroDeltaCount`\n */\n function getNonzeroDeltaCount() external view returns (uint256 nonzeroDeltaCount);\n\n /**\n * @notice Retrieves the token delta for a specific token.\n * @dev This function allows reading the value from the `_tokenDeltas` mapping.\n * @param token The token for which the delta is being fetched\n * @return tokenDelta The delta of the specified token\n */\n function getTokenDelta(IERC20 token) external view returns (int256 tokenDelta);\n\n /**\n * @notice Retrieves the reserve (i.e., total Vault balance) of a given token.\n * @param token The token for which to retrieve the reserve\n * @return reserveAmount The amount of reserves for the given token\n */\n function getReservesOf(IERC20 token) external view returns (uint256 reserveAmount);\n\n /**\n * @notice This flag is used to detect and tax \"round-trip\" interactions (adding and removing liquidity in the\n * same pool).\n * @dev Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra\n * layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional\n * is the only standard way to exit a position without fees, and this flag is used to enable fees in that case.\n * It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse\n * than a simple swap for every pool type.\n *\n * @param pool Address of the pool to check\n * @return liquidityAdded True if liquidity has been added to this pool in the current transaction\n \n * Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\n */\n function getAddLiquidityCalledFlag(address pool) external view returns (bool liquidityAdded);\n\n /*******************************************************************************\n Pool Registration\n *******************************************************************************/\n\n /**\n * @notice Registers a pool, associating it with its factory and the tokens it manages.\n * @dev A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely\n * by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an\n * additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused\n * pool will automatically unpause. Balancer timestamps are 32 bits.\n *\n * A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a\n * multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to\n * the Vault.\n *\n * If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the\n * authorizer.\n *\n * @param pool The address of the pool being registered\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param swapFeePercentage The initial static swap fee percentage of the pool\n * @param pauseWindowEndTime The timestamp after which it is no longer possible to pause the pool\n * @param protocolFeeExempt If true, the pool's initial aggregate fees will be set to 0\n * @param roleAccounts Addresses the Vault will allow to change certain pool settings\n * @param poolHooksContract Contract that implements the hooks for the pool\n * @param liquidityManagement Liquidity management flags with implemented methods\n */\n function registerPool(\n address pool,\n TokenConfig[] memory tokenConfig,\n uint256 swapFeePercentage,\n uint32 pauseWindowEndTime,\n bool protocolFeeExempt,\n PoolRoleAccounts calldata roleAccounts,\n address poolHooksContract,\n LiquidityManagement calldata liquidityManagement\n ) external;\n\n /**\n * @notice Checks whether a pool is registered.\n * @param pool Address of the pool to check\n * @return registered True if the pool is registered, false otherwise\n */\n function isPoolRegistered(address pool) external view returns (bool registered);\n\n /**\n * @notice Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\n * @param pool Address of the pool to initialize\n * @param to Address that will receive the output BPT\n * @param tokens Tokens used to seed the pool (must match the registered tokens)\n * @param exactAmountsIn Exact amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param userData Additional (optional) data required for adding initial liquidity\n * @return bptAmountOut Output pool token amount\n */\n function initialize(\n address pool,\n address to,\n IERC20[] memory tokens,\n uint256[] memory exactAmountsIn,\n uint256 minBptAmountOut,\n bytes memory userData\n ) external returns (uint256 bptAmountOut);\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /**\n * @notice Checks whether a pool is initialized.\n * @dev An initialized pool can be considered registered as well.\n * @param pool Address of the pool to check\n * @return initialized True if the pool is initialized, false otherwise\n */\n function isPoolInitialized(address pool) external view returns (bool initialized);\n\n /**\n * @notice Gets the tokens registered to a pool.\n * @param pool Address of the pool\n * @return tokens List of tokens in the pool\n */\n function getPoolTokens(address pool) external view returns (IERC20[] memory tokens);\n\n /**\n * @notice Gets pool token rates.\n * @dev This function performs external calls if tokens are yield-bearing. All returned arrays are in token\n * registration order.\n *\n * @param pool Address of the pool\n * @return decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n * calculations. FP(1) for 18-decimal tokens\n * @return tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n */\n function getPoolTokenRates(\n address pool\n ) external view returns (uint256[] memory decimalScalingFactors, uint256[] memory tokenRates);\n\n /**\n * @notice Returns comprehensive pool data for the given pool.\n * @dev This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\n * @param pool The address of the pool\n * @return poolData The `PoolData` result\n */\n function getPoolData(address pool) external view returns (PoolData memory poolData);\n\n /**\n * @notice Gets the raw data for a pool: tokens, raw balances, scaling factors.\n * @param pool Address of the pool\n * @return tokens The pool tokens, sorted in registration order\n * @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n * @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n * @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order\n */\n function getPoolTokenInfo(\n address pool\n )\n external\n view\n returns (\n IERC20[] memory tokens,\n TokenInfo[] memory tokenInfo,\n uint256[] memory balancesRaw,\n uint256[] memory lastBalancesLiveScaled18\n );\n\n /**\n * @notice Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in\n * registration order.\n *\n * @param pool Address of the pool\n * @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n */\n function getCurrentLiveBalances(address pool) external view returns (uint256[] memory balancesLiveScaled18);\n\n /**\n * @notice Gets the configuration parameters of a pool.\n * @dev The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\n * @param pool Address of the pool\n * @return poolConfig The pool configuration as a `PoolConfig` struct\n */\n function getPoolConfig(address pool) external view returns (PoolConfig memory poolConfig);\n\n /**\n * @notice Gets the hooks configuration parameters of a pool.\n * @dev The `HooksConfig` contains flags indicating which pool hooks are implemented.\n * @param pool Address of the pool\n * @return hooksConfig The hooks configuration as a `HooksConfig` struct\n */\n function getHooksConfig(address pool) external view returns (HooksConfig memory hooksConfig);\n\n /**\n * @notice The current rate of a pool token (BPT) = invariant / totalSupply.\n * @param pool Address of the pool\n * @return rate BPT rate\n */\n function getBptRate(address pool) external view returns (uint256 rate);\n\n /*******************************************************************************\n Balancer Pool Tokens\n *******************************************************************************/\n\n /**\n * @notice Gets the total supply of a given ERC20 token.\n * @param token The token address\n * @return tokenTotalSupply Total supply of the token\n */\n function totalSupply(address token) external view returns (uint256 tokenTotalSupply);\n\n /**\n * @notice Gets the balance of an account for a given ERC20 token.\n * @param token Address of the token\n * @param account Address of the account\n * @return tokenBalance Token balance of the account\n */\n function balanceOf(address token, address account) external view returns (uint256 tokenBalance);\n\n /**\n * @notice Gets the allowance of a spender for a given ERC20 token and owner.\n * @param token Address of the token\n * @param owner Address of the owner\n * @param spender Address of the spender\n * @return tokenAllowance Amount of tokens the spender is allowed to spend\n */\n function allowance(address token, address owner, address spender) external view returns (uint256 tokenAllowance);\n\n /**\n * @notice Approves a spender to spend pool tokens on behalf of sender.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param owner Address of the owner\n * @param spender Address of the spender\n * @param amount Amount of tokens to approve\n * @return success True if successful, false otherwise\n */\n function approve(address owner, address spender, uint256 amount) external returns (bool success);\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /**\n * @notice Indicates whether a pool is paused.\n * @dev If a pool is paused, all non-Recovery Mode state-changing operations will revert.\n * @param pool The pool to be checked\n * @return poolPaused True if the pool is paused\n */\n function isPoolPaused(address pool) external view returns (bool poolPaused);\n\n /**\n * @notice Returns the paused status, and end times of the Pool's pause window and buffer period.\n * @dev Note that even when set to a paused state, the pool will automatically unpause at the end of\n * the buffer period. Balancer timestamps are 32 bits.\n *\n * @param pool The pool whose data is requested\n * @return poolPaused True if the Pool is paused\n * @return poolPauseWindowEndTime The timestamp of the end of the Pool's pause window\n * @return poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)\n * @return pauseManager The pause manager, or the zero address\n */\n function getPoolPausedState(\n address pool\n )\n external\n view\n returns (bool poolPaused, uint32 poolPauseWindowEndTime, uint32 poolBufferPeriodEndTime, address pauseManager);\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Checks if the wrapped token has an initialized buffer in the Vault.\n * @dev An initialized buffer should have an asset registered in the Vault.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return isBufferInitialized True if the ERC4626 buffer is initialized\n */\n function isERC4626BufferInitialized(IERC4626 wrappedToken) external view returns (bool isBufferInitialized);\n\n /**\n * @notice Gets the registered asset for a given buffer.\n * @dev To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers\n * should never call `wrapper.asset()` directly, at least without checking it against the asset registered with\n * the Vault on initialization.\n *\n * @param wrappedToken The wrapped token specifying the buffer\n * @return asset The underlying asset of the wrapped token\n */\n function getERC4626BufferAsset(IERC4626 wrappedToken) external view returns (address asset);\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\n * @param pool The address of the pool for which aggregate fees have been collected\n * @param token The address of the token in which fees have been accumulated\n * @return swapFeeAmount The total amount of fees accumulated in the specified token\n */\n function getAggregateSwapFeeAmount(address pool, IERC20 token) external view returns (uint256 swapFeeAmount);\n\n /**\n * @notice Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\n * @param pool The address of the pool for which aggregate fees have been collected\n * @param token The address of the token in which fees have been accumulated\n * @return yieldFeeAmount The total amount of fees accumulated in the specified token\n */\n function getAggregateYieldFeeAmount(address pool, IERC20 token) external view returns (uint256 yieldFeeAmount);\n\n /**\n * @notice Fetches the static swap fee percentage for a given pool.\n * @param pool The address of the pool whose static swap fee percentage is being queried\n * @return swapFeePercentage The current static swap fee percentage for the specified pool\n */\n function getStaticSwapFeePercentage(address pool) external view returns (uint256 swapFeePercentage);\n\n /**\n * @notice Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\n * @param pool The address of the pool whose roles are being queried\n * @return roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)\n */\n function getPoolRoleAccounts(address pool) external view returns (PoolRoleAccounts memory roleAccounts);\n\n /**\n * @notice Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\n * @dev Reverts if the hook doesn't return the success flag set to `true`.\n * @param pool The pool\n * @param swapParams The swap parameters used to compute the fee\n * @return dynamicSwapFeePercentage The dynamic swap fee percentage\n */\n function computeDynamicSwapFeePercentage(\n address pool,\n PoolSwapParams memory swapParams\n ) external view returns (uint256 dynamicSwapFeePercentage);\n\n /**\n * @notice Returns the Protocol Fee Controller address.\n * @return protocolFeeController Address of the ProtocolFeeController\n */\n function getProtocolFeeController() external view returns (IProtocolFeeController protocolFeeController);\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Checks whether a pool is in Recovery Mode.\n * @dev Recovery Mode enables a safe proportional withdrawal path, with no external calls.\n * @param pool Address of the pool to check\n * @return inRecoveryMode True if the pool is in Recovery Mode, false otherwise\n */\n function isPoolInRecoveryMode(address pool) external view returns (bool inRecoveryMode);\n\n /**\n * @notice Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out.\n * The request is implemented by the Vault without any interaction with the pool, ensuring that\n * it works the same for all pools, and cannot be disabled by a new pool type.\n *\n * @param pool Address of the pool\n * @param from Address of user to burn pool tokens from\n * @param exactBptAmountIn Input pool token amount\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @return amountsOut Actual calculated amounts of output tokens, sorted in token registration order\n */\n function removeLiquidityRecovery(\n address pool,\n address from,\n uint256 exactBptAmountIn,\n uint256[] memory minAmountsOut\n ) external returns (uint256[] memory amountsOut);\n\n /*******************************************************************************\n Queries\n *******************************************************************************/\n\n /**\n * @notice Performs a callback on msg.sender with arguments provided in `data`.\n * @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n * anything else will revert.\n *\n * Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n *\n * Allows the external calling of a function via the Vault contract to\n * access Vault's functions guarded by `onlyWhenUnlocked`.\n * `transient` modifier ensuring balances changes within the Vault are settled.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n * @return result Resulting data from the call\n */\n function quote(bytes calldata data) external returns (bytes memory result);\n\n /**\n * @notice Performs a callback on msg.sender with arguments provided in `data`.\n * @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n * anything else will revert.\n *\n * Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n *\n * Allows the external calling of a function via the Vault contract to\n * access Vault's functions guarded by `onlyWhenUnlocked`.\n * `transient` modifier ensuring balances changes within the Vault are settled.\n *\n * This call always reverts, returning the result in the revert reason.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n */\n function quoteAndRevert(bytes calldata data) external;\n\n /**\n * @notice Returns true if queries are disabled on the Vault.\n * @dev If true, queries might either be disabled temporarily or permanently.\n * @return queryDisabled True if query functionality is reversibly disabled\n */\n function isQueryDisabled() external view returns (bool queryDisabled);\n\n /**\n * @notice Returns true if queries are disabled permanently; false if they are enabled.\n * @dev This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\n * @return queryDisabledPermanently True if query functionality is permanently disabled\n */\n function isQueryDisabledPermanently() external view returns (bool queryDisabledPermanently);\n\n /**\n * @notice Pools can use this event to emit event data from the Vault.\n * @param eventKey Event key\n * @param eventData Encoded event data\n */\n function emitAuxiliaryEvent(bytes32 eventKey, bytes calldata eventData) external;\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Returns the Authorizer address.\n * @dev The authorizer holds the permissions granted by governance. It is set on Vault deployment,\n * and can be changed through a permissioned call.\n *\n * @return authorizer Address of the authorizer contract\n */\n function getAuthorizer() external view returns (IAuthorizer authorizer);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for functions defined on the main Vault contract.\n * @dev These are generally \"critical path\" functions (swap, add/remove liquidity) that are in the main contract\n * for technical or performance reasons.\n */\ninterface IVaultMain {\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @notice Creates a context for a sequence of operations (i.e., \"unlocks\" the Vault).\n * @dev Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`,\n * meaning all balances for the caller have to be settled at the end.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n * @return result Resulting data from the call\n */\n function unlock(bytes calldata data) external returns (bytes memory result);\n\n /**\n * @notice Settles deltas for a token; must be successful for the current lock to be released.\n * @dev Protects the caller against leftover dust in the Vault for the token being settled. The caller\n * should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any\n * excess in the Vault balance.\n *\n * If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as\n * credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail.\n *\n * If the given hint is lower than the difference in reserves, the hint is given as credit to the caller.\n * In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would\n * not affect settlement.\n *\n * The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve\n * difference equals current balance of the token minus existing reserves of the token when the function is called.\n *\n * @param token Address of the token\n * @param amountHint Amount paid as reported by the caller\n * @return credit Credit received in return of the payment\n */\n function settle(IERC20 token, uint256 amountHint) external returns (uint256 credit);\n\n /**\n * @notice Sends tokens to a recipient.\n * @dev There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel\n * debts.\n *\n * @param token Address of the token\n * @param to Recipient address\n * @param amount Amount of tokens to send\n */\n function sendTo(IERC20 token, address to, uint256 amount) external;\n\n /***************************************************************************\n Swaps\n ***************************************************************************/\n\n /**\n * @notice Swaps tokens based on provided parameters.\n * @dev All parameters are given in raw token decimal encoding.\n * @param vaultSwapParams Parameters for the swap (see above for struct definition)\n * @return amountCalculatedRaw Calculated swap amount\n * @return amountInRaw Amount of input tokens for the swap\n * @return amountOutRaw Amount of output tokens from the swap\n */\n function swap(\n VaultSwapParams memory vaultSwapParams\n ) external returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Adds liquidity to a pool.\n * @dev Caution should be exercised when adding liquidity because the Vault has the capability\n * to transfer tokens from any user, given that it holds all allowances.\n *\n * @param params Parameters for the add liquidity (see above for struct definition)\n * @return amountsIn Actual amounts of input tokens\n * @return bptAmountOut Output pool token amount\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function addLiquidity(\n AddLiquidityParams memory params\n ) external returns (uint256[] memory amountsIn, uint256 bptAmountOut, bytes memory returnData);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Removes liquidity from a pool.\n * @dev Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user.\n * Untrusted routers require prior approval from the user. This is the only function allowed to call\n * _queryModeBalanceIncrease (and only in a query context).\n *\n * @param params Parameters for the remove liquidity (see above for struct definition)\n * @return bptAmountIn Actual amount of BPT burned\n * @return amountsOut Actual amounts of output tokens\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function removeLiquidity(\n RemoveLiquidityParams memory params\n ) external returns (uint256 bptAmountIn, uint256[] memory amountsOut, bytes memory returnData);\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /**\n * @notice Gets the index of a token in a given pool.\n * @dev Reverts if the pool is not registered, or if the token does not belong to the pool.\n * @param pool Address of the pool\n * @param token Address of the token\n * @return tokenCount Number of tokens in the pool\n * @return index Index corresponding to the given token in the pool's token list\n */\n function getPoolTokenCountAndIndexOfToken(\n address pool,\n IERC20 token\n ) external view returns (uint256 tokenCount, uint256 index);\n\n /*******************************************************************************\n Balancer Pool Tokens\n *******************************************************************************/\n\n /**\n * @notice Transfers pool token from owner to a recipient.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param owner Address of the owner\n * @param to Address of the recipient\n * @param amount Amount of tokens to transfer\n * @return success True if successful, false otherwise\n */\n function transfer(address owner, address to, uint256 amount) external returns (bool);\n\n /**\n * @notice Transfers pool token from a sender to a recipient using an allowance.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param spender Address allowed to perform the transfer\n * @param from Address of the sender\n * @param to Address of the recipient\n * @param amount Amount of tokens to transfer\n * @return success True if successful, false otherwise\n */\n function transferFrom(address spender, address from, address to, uint256 amount) external returns (bool success);\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Wraps/unwraps tokens based on the parameters provided.\n * @dev All parameters are given in raw token decimal encoding. It requires the buffer to be initialized,\n * and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\n *\n * @param params Parameters for the wrap/unwrap operation (see struct definition)\n * @return amountCalculatedRaw Calculated swap amount\n * @return amountInRaw Amount of input tokens for the swap\n * @return amountOutRaw Amount of output tokens from the swap\n */\n function erc4626BufferWrapOrUnwrap(\n BufferWrapOrUnwrapParams memory params\n ) external returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw);\n\n /*******************************************************************************\n Miscellaneous\n *******************************************************************************/\n\n /**\n * @notice Returns the VaultExtension contract address.\n * @dev Function is in the main Vault contract. The VaultExtension handles less critical or frequently used\n * functions, since delegate calls through the Vault are more expensive than direct calls.\n *\n * @return vaultExtension Address of the VaultExtension\n */\n function getVaultExtension() external view returns (address vaultExtension);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IRateProvider } from \"../solidity-utils/helpers/IRateProvider.sol\";\n\n/**\n * @notice Represents a pool's liquidity management configuration.\n * @param disableUnbalancedLiquidity If set, liquidity can only be added or removed proportionally\n * @param enableAddLiquidityCustom If set, the pool has implemented `onAddLiquidityCustom`\n * @param enableRemoveLiquidityCustom If set, the pool has implemented `onRemoveLiquidityCustom`\n * @param enableDonation If set, the pool will not revert if liquidity is added with AddLiquidityKind.DONATION\n */\nstruct LiquidityManagement {\n bool disableUnbalancedLiquidity;\n bool enableAddLiquidityCustom;\n bool enableRemoveLiquidityCustom;\n bool enableDonation;\n}\n\n// @notice Custom type to store the entire configuration of the pool.\ntype PoolConfigBits is bytes32;\n\n/**\n * @notice Represents a pool's configuration (hooks configuration are separated in another struct).\n * @param liquidityManagement Flags related to adding/removing liquidity\n * @param staticSwapFeePercentage The pool's native swap fee\n * @param aggregateSwapFeePercentage The total swap fee charged, including protocol and pool creator components\n * @param aggregateYieldFeePercentage The total swap fee charged, including protocol and pool creator components\n * @param tokenDecimalDiffs Compressed storage of the token decimals of each pool token\n * @param pauseWindowEndTime Timestamp after which the pool cannot be paused\n * @param isPoolRegistered If true, the pool has been registered with the Vault\n * @param isPoolInitialized If true, the pool has been initialized with liquidity, and is available for trading\n * @param isPoolPaused If true, the pool has been paused (by governance or the pauseManager)\n * @param isPoolInRecoveryMode If true, the pool has been placed in recovery mode, enabling recovery mode withdrawals\n */\nstruct PoolConfig {\n LiquidityManagement liquidityManagement;\n uint256 staticSwapFeePercentage;\n uint256 aggregateSwapFeePercentage;\n uint256 aggregateYieldFeePercentage;\n uint40 tokenDecimalDiffs;\n uint32 pauseWindowEndTime;\n bool isPoolRegistered;\n bool isPoolInitialized;\n bool isPoolPaused;\n bool isPoolInRecoveryMode;\n}\n\n/**\n * @notice The flag portion of the `HooksConfig`.\n * @dev `enableHookAdjustedAmounts` must be true for all contracts that modify the `amountCalculated`\n * in after hooks. Otherwise, the Vault will ignore any \"hookAdjusted\" amounts. Setting any \"shouldCall\"\n * flags to true will cause the Vault to call the corresponding hook during operations.\n */\nstruct HookFlags {\n bool enableHookAdjustedAmounts;\n bool shouldCallBeforeInitialize;\n bool shouldCallAfterInitialize;\n bool shouldCallComputeDynamicSwapFee;\n bool shouldCallBeforeSwap;\n bool shouldCallAfterSwap;\n bool shouldCallBeforeAddLiquidity;\n bool shouldCallAfterAddLiquidity;\n bool shouldCallBeforeRemoveLiquidity;\n bool shouldCallAfterRemoveLiquidity;\n}\n\n/// @notice Represents a hook contract configuration for a pool (HookFlags + hooksContract address).\nstruct HooksConfig {\n bool enableHookAdjustedAmounts;\n bool shouldCallBeforeInitialize;\n bool shouldCallAfterInitialize;\n bool shouldCallComputeDynamicSwapFee;\n bool shouldCallBeforeSwap;\n bool shouldCallAfterSwap;\n bool shouldCallBeforeAddLiquidity;\n bool shouldCallAfterAddLiquidity;\n bool shouldCallBeforeRemoveLiquidity;\n bool shouldCallAfterRemoveLiquidity;\n address hooksContract;\n}\n\n/**\n * @notice Represents temporary state used during a swap operation.\n * @param indexIn The zero-based index of tokenIn\n * @param indexOut The zero-based index of tokenOut\n * @param amountGivenScaled18 The amountGiven (i.e., tokenIn for ExactIn), adjusted for token decimals\n * @param swapFeePercentage The swap fee to be applied (might be static or dynamic)\n */\nstruct SwapState {\n uint256 indexIn;\n uint256 indexOut;\n uint256 amountGivenScaled18;\n uint256 swapFeePercentage;\n}\n\n/**\n * @notice Represents the Vault's configuration.\n * @param isQueryDisabled If set to true, disables query functionality of the Vault. Can be modified by governance\n * @param isVaultPaused If set to true, swaps and add/remove liquidity operations are halted\n * @param areBuffersPaused If set to true, the Vault wrap/unwrap primitives associated with buffers will be disabled\n */\nstruct VaultState {\n bool isQueryDisabled;\n bool isVaultPaused;\n bool areBuffersPaused;\n}\n\n/**\n * @notice Represents the accounts holding certain roles for a given pool. This is passed in on pool registration.\n * @param pauseManager Account empowered to pause/unpause the pool (note that governance can always pause a pool)\n * @param swapFeeManager Account empowered to set static swap fees for a pool (or 0 to delegate to governance)\n * @param poolCreator Account empowered to set the pool creator fee (or 0 if all fees go to the protocol and LPs)\n */\nstruct PoolRoleAccounts {\n address pauseManager;\n address swapFeeManager;\n address poolCreator;\n}\n\n/*******************************************************************************\n Tokens\n*******************************************************************************/\n\n// Note that the following tokens are unsupported by the Vault. This list is not meant to be exhaustive, but covers\n// many common types of tokens that will not work with the Vault architecture. (See https://github.com/d-xo/weird-erc20\n// for examples of token features that are problematic for many protocols.)\n//\n// * Rebasing tokens (e.g., aDAI). The Vault keeps track of token balances in its internal accounting; any token whose\n// balance changes asynchronously (i.e., outside a swap or liquidity operation), would get out-of-sync with this\n// internal accounting. This category would also include \"airdrop\" tokens, whose balances can change unexpectedly.\n//\n// * Double entrypoint (e.g., old Synthetix tokens, now fixed). These could likewise bypass internal accounting by\n// registering the token under one address, then accessing it through another. This is especially troublesome\n// in v3, with the introduction of ERC4626 buffers.\n//\n// * Fee on transfer (e.g., PAXG). The Vault issues credits and debits according to given and calculated token amounts,\n// and settlement assumes that the send/receive transfer functions transfer exactly the given number of tokens.\n// If this is not the case, transactions will not settle. Unlike with the other types, which are fundamentally\n// incompatible, it would be possible to design a Router to handle this - but we didn't try it. In any case, it's\n// not supported in the current Routers.\n//\n// * Tokens with more than 18 decimals (e.g., YAM-V2). The Vault handles token scaling: i.e., handling I/O for\n// amounts in native token decimals, but doing calculations with full 18-decimal precision. This requires reading\n// and storing the decimals for each token. Since virtually all tokens are 18 or fewer decimals, and we have limited\n// storage space, 18 was a reasonable maximum. Unlike the other types, this is enforceable by the Vault. Attempting\n// to register such tokens will revert with `InvalidTokenDecimals`. Of course, we must also be able to read the token\n// decimals, so the Vault only supports tokens that implement `IERC20Metadata.decimals`, and return a value less than\n// or equal to 18.\n//\n// * Token decimals are checked and stored only once, on registration. Valid tokens store their decimals as immutable\n// variables or constants. Malicious tokens that don't respect this basic property would not work anywhere in DeFi.\n//\n// These types of tokens are supported but discouraged, as they don't tend to play well with AMMs generally.\n//\n// * Very low-decimal tokens (e.g., GUSD). The Vault has been extensively tested with 6-decimal tokens (e.g., USDC),\n// but going much below that may lead to unanticipated effects due to precision loss, especially with smaller trade\n// values.\n//\n// * Revert on zero value approval/transfer. The Vault has been tested against these, but peripheral contracts, such\n// as hooks, might not have been designed with this in mind.\n//\n// * Other types from \"weird-erc20,\" such as upgradeable, pausable, or tokens with blocklists. We have seen cases\n// where a token upgrade fails, \"bricking\" the token - and many operations on pools containing that token. Any\n// sort of \"permissioned\" token that can make transfers fail can cause operations on pools containing them to\n// revert. Even Recovery Mode cannot help then, as it does a proportional withdrawal of all tokens. If one of\n// them is bricked, the whole operation will revert. Since v3 does not have \"internal balances\" like v2, there\n// is no recourse.\n//\n// Of course, many tokens in common use have some of these \"features\" (especially centralized stable coins), so\n// we have to support them anyway. Working with common centralized tokens is a risk common to all of DeFi.\n\n/**\n * @notice Token types supported by the Vault.\n * @dev In general, pools may contain any combination of these tokens.\n *\n * STANDARD tokens (e.g., BAL, WETH) have no rate provider.\n * WITH_RATE tokens (e.g., wstETH) require a rate provider. These may be tokens like wstETH, which need to be wrapped\n * because the underlying stETH token is rebasing, and such tokens are unsupported by the Vault. They may also be\n * tokens like sEUR, which track an underlying asset, but are not yield-bearing. Finally, this encompasses\n * yield-bearing ERC4626 tokens, which can be used to facilitate swaps without requiring wrapping or unwrapping\n * in most cases. The `paysYieldFees` flag can be used to indicate whether a token is yield-bearing (e.g., waDAI),\n * not yield-bearing (e.g., sEUR), or yield-bearing but exempt from fees (e.g., in certain nested pools, where\n * yield fees are charged elsewhere).\n *\n * NB: STANDARD must always be the first enum element, so that newly initialized data structures default to Standard.\n */\nenum TokenType {\n STANDARD,\n WITH_RATE\n}\n\n/**\n * @notice Encapsulate the data required for the Vault to support a token of the given type.\n * @dev For STANDARD tokens, the rate provider address must be 0, and paysYieldFees must be false. All WITH_RATE tokens\n * need a rate provider, and may or may not be yield-bearing.\n *\n * At registration time, it is useful to include the token address along with the token parameters in the structure\n * passed to `registerPool`, as the alternative would be parallel arrays, which would be error prone and require\n * validation checks. `TokenConfig` is only used for registration, and is never put into storage (see `TokenInfo`).\n *\n * @param token The token address\n * @param tokenType The token type (see the enum for supported types)\n * @param rateProvider The rate provider for a token (see further documentation above)\n * @param paysYieldFees Flag indicating whether yield fees should be charged on this token\n */\nstruct TokenConfig {\n IERC20 token;\n TokenType tokenType;\n IRateProvider rateProvider;\n bool paysYieldFees;\n}\n\n/**\n * @notice This data structure is stored in `_poolTokenInfo`, a nested mapping from pool -> (token -> TokenInfo).\n * @dev Since the token is already the key of the nested mapping, it would be redundant (and an extra SLOAD) to store\n * it again in the struct. When we construct PoolData, the tokens are separated into their own array.\n *\n * @param tokenType The token type (see the enum for supported types)\n * @param rateProvider The rate provider for a token (see further documentation above)\n * @param paysYieldFees Flag indicating whether yield fees should be charged on this token\n */\nstruct TokenInfo {\n TokenType tokenType;\n IRateProvider rateProvider;\n bool paysYieldFees;\n}\n\n/**\n * @notice Data structure used to represent the current pool state in memory\n * @param poolConfigBits Custom type to store the entire configuration of the pool.\n * @param tokens Pool tokens, sorted in token registration order\n * @param tokenInfo Configuration data for each token, sorted in token registration order\n * @param balancesRaw Token balances in native decimals\n * @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n * @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n * @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n * calculations. It is 1e18 (FP 1) for 18-decimal tokens\n */\nstruct PoolData {\n PoolConfigBits poolConfigBits;\n IERC20[] tokens;\n TokenInfo[] tokenInfo;\n uint256[] balancesRaw;\n uint256[] balancesLiveScaled18;\n uint256[] tokenRates;\n uint256[] decimalScalingFactors;\n}\n\nenum Rounding {\n ROUND_UP,\n ROUND_DOWN\n}\n\n/*******************************************************************************\n Swaps\n*******************************************************************************/\n\nenum SwapKind {\n EXACT_IN,\n EXACT_OUT\n}\n\n// There are two \"SwapParams\" structs defined below. `VaultSwapParams` corresponds to the external swap API defined\n// in the Router contracts, which uses explicit token addresses, the amount given and limit on the calculated amount\n// expressed in native token decimals, and optional user data passed in from the caller.\n//\n// `PoolSwapParams` passes some of this information through (kind, userData), but \"translates\" the parameters to fit\n// the internal swap API used by `IBasePool`. It scales amounts to full 18-decimal precision, adds the token balances,\n// converts the raw token addresses to indices, and adds the address of the Router originating the request. It does\n// not need the limit, since this is checked at the Router level.\n\n/**\n * @notice Data passed into primary Vault `swap` operations.\n * @param kind Type of swap (Exact In or Exact Out)\n * @param pool The pool with the tokens being swapped\n * @param tokenIn The token entering the Vault (balance increases)\n * @param tokenOut The token leaving the Vault (balance decreases)\n * @param amountGivenRaw Amount specified for tokenIn or tokenOut (depending on the type of swap)\n * @param limitRaw Minimum or maximum value of the calculated amount (depending on the type of swap)\n * @param userData Additional (optional) user data\n */\nstruct VaultSwapParams {\n SwapKind kind;\n address pool;\n IERC20 tokenIn;\n IERC20 tokenOut;\n uint256 amountGivenRaw;\n uint256 limitRaw;\n bytes userData;\n}\n\n/**\n * @notice Data for a swap operation, used by contracts implementing `IBasePool`.\n * @param kind Type of swap (exact in or exact out)\n * @param amountGivenScaled18 Amount given based on kind of the swap (e.g., tokenIn for EXACT_IN)\n * @param balancesScaled18 Current pool balances\n * @param indexIn Index of tokenIn\n * @param indexOut Index of tokenOut\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param userData Additional (optional) data required for the swap\n */\nstruct PoolSwapParams {\n SwapKind kind;\n uint256 amountGivenScaled18;\n uint256[] balancesScaled18;\n uint256 indexIn;\n uint256 indexOut;\n address router;\n bytes userData;\n}\n\n/**\n * @notice Data for the hook after a swap operation.\n * @param kind Type of swap (exact in or exact out)\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param amountInScaled18 Amount of tokenIn (entering the Vault)\n * @param amountOutScaled18 Amount of tokenOut (leaving the Vault)\n * @param tokenInBalanceScaled18 Updated (after swap) balance of tokenIn\n * @param tokenOutBalanceScaled18 Updated (after swap) balance of tokenOut\n * @param amountCalculatedScaled18 Token amount calculated by the swap\n * @param amountCalculatedRaw Token amount calculated by the swap\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param pool Pool address\n * @param userData Additional (optional) data required for the swap\n */\nstruct AfterSwapParams {\n SwapKind kind;\n IERC20 tokenIn;\n IERC20 tokenOut;\n uint256 amountInScaled18;\n uint256 amountOutScaled18;\n uint256 tokenInBalanceScaled18;\n uint256 tokenOutBalanceScaled18;\n uint256 amountCalculatedScaled18;\n uint256 amountCalculatedRaw;\n address router;\n address pool;\n bytes userData;\n}\n\n/*******************************************************************************\n Add liquidity\n*******************************************************************************/\n\nenum AddLiquidityKind {\n PROPORTIONAL,\n UNBALANCED,\n SINGLE_TOKEN_EXACT_OUT,\n DONATION,\n CUSTOM\n}\n\n/**\n * @notice Data for an add liquidity operation.\n * @param pool Address of the pool\n * @param to Address of user to mint to\n * @param maxAmountsIn Maximum amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param kind Add liquidity kind\n * @param userData Optional user data\n */\nstruct AddLiquidityParams {\n address pool;\n address to;\n uint256[] maxAmountsIn;\n uint256 minBptAmountOut;\n AddLiquidityKind kind;\n bytes userData;\n}\n\n/*******************************************************************************\n Remove liquidity\n*******************************************************************************/\n\nenum RemoveLiquidityKind {\n PROPORTIONAL,\n SINGLE_TOKEN_EXACT_IN,\n SINGLE_TOKEN_EXACT_OUT,\n CUSTOM\n}\n\n/**\n * @notice Data for an remove liquidity operation.\n * @param pool Address of the pool\n * @param from Address of user to burn from\n * @param maxBptAmountIn Maximum amount of input pool tokens\n * @param minAmountsOut Minimum amounts of output tokens\n * @param kind Remove liquidity kind\n * @param userData Optional user data\n */\nstruct RemoveLiquidityParams {\n address pool;\n address from;\n uint256 maxBptAmountIn;\n uint256[] minAmountsOut;\n RemoveLiquidityKind kind;\n bytes userData;\n}\n\n/*******************************************************************************\n Remove liquidity\n*******************************************************************************/\n\nenum WrappingDirection {\n WRAP,\n UNWRAP\n}\n\n/**\n * @notice Data for a wrap/unwrap operation.\n * @param kind Type of swap (Exact In or Exact Out)\n * @param direction Direction of the wrapping operation (Wrap or Unwrap)\n * @param wrappedToken Wrapped token, compatible with interface ERC4626\n * @param amountGivenRaw Amount specified for tokenIn or tokenOut (depends on the type of swap and wrapping direction)\n * @param limitRaw Minimum or maximum amount specified for the other token (depends on the type of swap and wrapping\n * direction)\n */\nstruct BufferWrapOrUnwrapParams {\n SwapKind kind;\n WrappingDirection direction;\n IERC4626 wrappedToken;\n uint256 amountGivenRaw;\n uint256 limitRaw;\n}\n\n// Protocol Fees are 24-bit values. We transform them by multiplying by 1e11, so that they can be set to any value\n// between 0% and 100% (step 0.00001%). Protocol and pool creator fees are set in the `ProtocolFeeController`, and\n// ensure both constituent and aggregate fees do not exceed this precision.\nuint256 constant FEE_BITLENGTH = 24;\nuint256 constant FEE_SCALING_FACTOR = 1e11;\n// Used to ensure the safety of fee-related math (e.g., pools or hooks don't set it greater than 100%).\n// This value should work for practical purposes and is well within the max precision requirements.\nuint256 constant MAX_FEE_PERCENTAGE = 99.9999e16; // 99.9999%\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\";\n\n/**\n * @notice Building block for performing access control on external functions.\n * @dev This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be\n * applied to external functions to make them only callable by authorized accounts.\n *\n * Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.\n */\nabstract contract Authentication is IAuthentication {\n bytes32 private immutable _actionIdDisambiguator;\n\n /**\n * @dev The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in\n * multi-contract systems.\n *\n * There are two main uses for it:\n * - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers\n * unique. The contract's own address is a good option.\n * - if the contract belongs to a family that shares action identifiers for the same functions, an identifier\n * shared by the entire family (and no other contract) should be used instead.\n */\n constructor(bytes32 actionIdDisambiguator) {\n _actionIdDisambiguator = actionIdDisambiguator;\n }\n\n /// @dev Reverts unless the caller is allowed to call this function. Should only be applied to external functions.\n modifier authenticate() {\n _authenticateCaller();\n _;\n }\n\n /// @dev Reverts unless the caller is allowed to call the entry point function.\n function _authenticateCaller() internal view {\n bytes32 actionId = getActionId(msg.sig);\n\n if (!_canPerform(actionId, msg.sender)) {\n revert SenderNotAllowed();\n }\n }\n\n /// @inheritdoc IAuthentication\n function getActionId(bytes4 selector) public view override returns (bytes32) {\n // Each external function is dynamically assigned an action identifier as the hash of the disambiguator and the\n // function selector. Disambiguation is necessary to avoid potential collisions in the function selectors of\n // multiple contracts.\n return keccak256(abi.encodePacked(_actionIdDisambiguator, selector));\n }\n\n /**\n * @dev Derived contracts must implement this function to perform the actual access control logic.\n * @param actionId The action identifier associated with an external function\n * @param user The account performing the action\n * @return success True if the action is permitted\n */\n function _canPerform(bytes32 actionId, address user) internal view virtual returns (bool);\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { Authentication } from \"./Authentication.sol\";\n\n/// @dev Base contract for performing access control on external functions within pools.\nabstract contract CommonAuthentication is Authentication {\n IVault private immutable _vault;\n\n /**\n * @dev Allow only the swapFeeManager or governance user to call the function.\n */\n /// @notice Caller must be the swapFeeManager, if defined. Otherwise, default to governance.\n modifier onlySwapFeeManagerOrGovernance(address pool) {\n address roleAddress = _vault.getPoolRoleAccounts(pool).swapFeeManager;\n _ensureAuthenticatedByExclusiveRole(pool, roleAddress);\n _;\n }\n\n constructor(IVault vault, bytes32 actionIdDisambiguator) Authentication(actionIdDisambiguator) {\n _vault = vault;\n }\n\n function _getVault() internal view returns (IVault) {\n return _vault;\n }\n\n // Access control is delegated to the Authorizer in the `_canPerform` functions.\n function _canPerform(bytes32 actionId, address user) internal view override returns (bool) {\n return _vault.getAuthorizer().canPerform(actionId, user, address(this));\n }\n\n function _canPerform(bytes32 actionId, address account, address where) internal view returns (bool) {\n return _vault.getAuthorizer().canPerform(actionId, account, where);\n }\n\n /// @dev Ensure the sender is the roleAddress, or default to governance if roleAddress is address(0).\n function _ensureAuthenticatedByExclusiveRole(address pool, address roleAddress) internal view {\n if (roleAddress == address(0)) {\n // Defer to governance if no role assigned.\n if (_canPerform(getActionId(msg.sig), msg.sender, pool) == false) {\n revert SenderNotAllowed();\n }\n } else if (msg.sender != roleAddress) {\n revert SenderNotAllowed();\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { LogExpMath } from \"./LogExpMath.sol\";\n\n/// @notice Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision.\nlibrary FixedPoint {\n /// @notice Attempted division by zero.\n error ZeroDivision();\n\n // solhint-disable no-inline-assembly\n // solhint-disable private-vars-leading-underscore\n\n uint256 internal constant ONE = 1e18; // 18 decimal places\n uint256 internal constant TWO = 2 * ONE;\n uint256 internal constant FOUR = 4 * ONE;\n uint256 internal constant MAX_POW_RELATIVE_ERROR = 10000; // 10^(-14)\n\n function mulDown(uint256 a, uint256 b) internal pure returns (uint256) {\n // Multiplication overflow protection is provided by Solidity 0.8.x.\n uint256 product = a * b;\n\n return product / ONE;\n }\n\n function mulUp(uint256 a, uint256 b) internal pure returns (uint256 result) {\n // Multiplication overflow protection is provided by Solidity 0.8.x.\n uint256 product = a * b;\n\n // Equivalent to:\n // result = product == 0 ? 0 : ((product - 1) / FixedPoint.ONE) + 1\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(product)), add(div(sub(product, 1), ONE), 1))\n }\n }\n\n function divDown(uint256 a, uint256 b) internal pure returns (uint256) {\n // Solidity 0.8 reverts with a Panic code (0x11) if the multiplication overflows.\n uint256 aInflated = a * ONE;\n\n // Solidity 0.8 reverts with a \"Division by Zero\" Panic code (0x12) if b is zero\n return aInflated / b;\n }\n\n function divUp(uint256 a, uint256 b) internal pure returns (uint256 result) {\n return mulDivUp(a, ONE, b);\n }\n\n /// @dev Return (a * b) / c, rounding up.\n function mulDivUp(uint256 a, uint256 b, uint256 c) internal pure returns (uint256 result) {\n // This check is required because Yul's `div` doesn't revert on c==0.\n if (c == 0) {\n revert ZeroDivision();\n }\n\n // Multiple overflow protection is done by Solidity 0.8.x.\n uint256 product = a * b;\n\n // The traditional divUp formula is:\n // divUp(x, y) := (x + y - 1) / y\n // To avoid intermediate overflow in the addition, we distribute the division and get:\n // divUp(x, y) := (x - 1) / y + 1\n // Note that this requires x != 0, if x == 0 then the result is zero\n //\n // Equivalent to:\n // result = a == 0 ? 0 : (a * b - 1) / c + 1\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(product)), add(div(sub(product, 1), c), 1))\n }\n }\n\n /**\n * @dev Version of divUp when the input is raw (i.e., already \"inflated\"). For instance,\n * invariant * invariant (36 decimals) vs. invariant.mulDown(invariant) (18 decimal FP).\n * This can occur in calculations with many successive multiplications and divisions, and\n * we want to minimize the number of operations by avoiding unnecessary scaling by ONE.\n */\n function divUpRaw(uint256 a, uint256 b) internal pure returns (uint256 result) {\n // This check is required because Yul's `div` doesn't revert on b==0.\n if (b == 0) {\n revert ZeroDivision();\n }\n\n // Equivalent to:\n // result = a == 0 ? 0 : 1 + (a - 1) / b\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(a)), add(1, div(sub(a, 1), b)))\n }\n }\n\n /**\n * @dev Returns x^y, assuming both are fixed point numbers, rounding down. The result is guaranteed to not be above\n * the true value (that is, the error function expected - actual is always positive).\n */\n function powDown(uint256 x, uint256 y) internal pure returns (uint256) {\n // Optimize for when y equals 1.0, 2.0 or 4.0, as those are very simple to implement and occur often in 50/50\n // and 80/20 Weighted Pools\n if (y == ONE) {\n return x;\n } else if (y == TWO) {\n return mulDown(x, x);\n } else if (y == FOUR) {\n uint256 square = mulDown(x, x);\n return mulDown(square, square);\n } else {\n uint256 raw = LogExpMath.pow(x, y);\n uint256 maxError = mulUp(raw, MAX_POW_RELATIVE_ERROR) + 1;\n\n if (raw < maxError) {\n return 0;\n } else {\n unchecked {\n return raw - maxError;\n }\n }\n }\n }\n\n /**\n * @dev Returns x^y, assuming both are fixed point numbers, rounding up. The result is guaranteed to not be below\n * the true value (that is, the error function expected - actual is always negative).\n */\n function powUp(uint256 x, uint256 y) internal pure returns (uint256) {\n // Optimize for when y equals 1.0, 2.0 or 4.0, as those are very simple to implement and occur often in 50/50\n // and 80/20 Weighted Pools\n if (y == ONE) {\n return x;\n } else if (y == TWO) {\n return mulUp(x, x);\n } else if (y == FOUR) {\n uint256 square = mulUp(x, x);\n return mulUp(square, square);\n } else {\n uint256 raw = LogExpMath.pow(x, y);\n uint256 maxError = mulUp(raw, MAX_POW_RELATIVE_ERROR) + 1;\n\n return raw + maxError;\n }\n }\n\n /**\n * @dev Returns the complement of a value (1 - x), capped to 0 if x is larger than 1.\n *\n * Useful when computing the complement for values with some level of relative error, as it strips this error and\n * prevents intermediate negative values.\n */\n function complement(uint256 x) internal pure returns (uint256 result) {\n // Equivalent to:\n // result = (x < ONE) ? (ONE - x) : 0\n assembly (\"memory-safe\") {\n result := mul(lt(x, ONE), sub(ONE, x))\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\n// solhint-disable\n\n/**\n * @dev Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument).\n *\n * Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural\n * exponentiation and logarithm (where the base is Euler's number).\n *\n * All math operations are unchecked in order to save gas.\n *\n * @author Fernando Martinelli - @fernandomartinelli\n * @author Sergio Yuhjtman - @sergioyuhjtman\n * @author Daniel Fernandez - @dmf7z\n */\nlibrary LogExpMath {\n /// @notice This error is thrown when a base is not within an acceptable range.\n error BaseOutOfBounds();\n\n /// @notice This error is thrown when a exponent is not within an acceptable range.\n error ExponentOutOfBounds();\n\n /// @notice This error is thrown when the exponent * ln(base) is not within an acceptable range.\n error ProductOutOfBounds();\n\n /// @notice This error is thrown when an exponent used in the exp function is not within an acceptable range.\n error InvalidExponent();\n\n /// @notice This error is thrown when a variable or result is not within the acceptable bounds defined in the function.\n error OutOfBounds();\n\n // All fixed point multiplications and divisions are inlined. This means we need to divide by ONE when multiplying\n // two numbers, and multiply by ONE when dividing them.\n\n // All arguments and return values are 18 decimal fixed point numbers.\n int256 constant ONE_18 = 1e18;\n\n // Internally, intermediate values are computed with higher precision as 20 decimal fixed point numbers, and in the\n // case of ln36, 36 decimals.\n int256 constant ONE_20 = 1e20;\n int256 constant ONE_36 = 1e36;\n\n // The domain of natural exponentiation is bound by the word size and number of decimals used.\n //\n // Because internally the result will be stored using 20 decimals, the largest possible result is\n // (2^255 - 1) / 10^20, which makes the largest exponent ln((2^255 - 1) / 10^20) = 130.700829182905140221.\n // The smallest possible result is 10^(-18), which makes largest negative argument\n // ln(10^(-18)) = -41.446531673892822312.\n // We use 130.0 and -41.0 to have some safety margin.\n int256 constant MAX_NATURAL_EXPONENT = 130e18;\n int256 constant MIN_NATURAL_EXPONENT = -41e18;\n\n // Bounds for ln_36's argument. Both ln(0.9) and ln(1.1) can be represented with 36 decimal places in a fixed point\n // 256 bit integer.\n int256 constant LN_36_LOWER_BOUND = ONE_18 - 1e17;\n int256 constant LN_36_UPPER_BOUND = ONE_18 + 1e17;\n\n uint256 constant MILD_EXPONENT_BOUND = 2 ** 254 / uint256(ONE_20);\n\n // 18 decimal constants\n int256 constant x0 = 128000000000000000000; // 2ˆ7\n int256 constant a0 = 38877084059945950922200000000000000000000000000000000000; // eˆ(x0) (no decimals)\n int256 constant x1 = 64000000000000000000; // 2ˆ6\n int256 constant a1 = 6235149080811616882910000000; // eˆ(x1) (no decimals)\n\n // 20 decimal constants\n int256 constant x2 = 3200000000000000000000; // 2ˆ5\n int256 constant a2 = 7896296018268069516100000000000000; // eˆ(x2)\n int256 constant x3 = 1600000000000000000000; // 2ˆ4\n int256 constant a3 = 888611052050787263676000000; // eˆ(x3)\n int256 constant x4 = 800000000000000000000; // 2ˆ3\n int256 constant a4 = 298095798704172827474000; // eˆ(x4)\n int256 constant x5 = 400000000000000000000; // 2ˆ2\n int256 constant a5 = 5459815003314423907810; // eˆ(x5)\n int256 constant x6 = 200000000000000000000; // 2ˆ1\n int256 constant a6 = 738905609893065022723; // eˆ(x6)\n int256 constant x7 = 100000000000000000000; // 2ˆ0\n int256 constant a7 = 271828182845904523536; // eˆ(x7)\n int256 constant x8 = 50000000000000000000; // 2ˆ-1\n int256 constant a8 = 164872127070012814685; // eˆ(x8)\n int256 constant x9 = 25000000000000000000; // 2ˆ-2\n int256 constant a9 = 128402541668774148407; // eˆ(x9)\n int256 constant x10 = 12500000000000000000; // 2ˆ-3\n int256 constant a10 = 113314845306682631683; // eˆ(x10)\n int256 constant x11 = 6250000000000000000; // 2ˆ-4\n int256 constant a11 = 106449445891785942956; // eˆ(x11)\n\n /**\n * @dev Exponentiation (x^y) with unsigned 18 decimal fixed point base and exponent.\n *\n * Reverts if ln(x) * y is smaller than `MIN_NATURAL_EXPONENT`, or larger than `MAX_NATURAL_EXPONENT`.\n */\n function pow(uint256 x, uint256 y) internal pure returns (uint256) {\n if (y == 0) {\n // We solve the 0^0 indetermination by making it equal one.\n return uint256(ONE_18);\n }\n\n if (x == 0) {\n return 0;\n }\n\n // Instead of computing x^y directly, we instead rely on the properties of logarithms and exponentiation to\n // arrive at that result. In particular, exp(ln(x)) = x, and ln(x^y) = y * ln(x). This means\n // x^y = exp(y * ln(x)).\n\n // The ln function takes a signed value, so we need to make sure x fits in the signed 256 bit range.\n if (x >> 255 != 0) {\n revert BaseOutOfBounds();\n }\n int256 x_int256 = int256(x);\n\n // We will compute y * ln(x) in a single step. Depending on the value of x, we can either use ln or ln_36. In\n // both cases, we leave the division by ONE_18 (due to fixed point multiplication) to the end.\n\n // This prevents y * ln(x) from overflowing, and at the same time guarantees y fits in the signed 256 bit range.\n if (y >= MILD_EXPONENT_BOUND) {\n revert ExponentOutOfBounds();\n }\n int256 y_int256 = int256(y);\n\n int256 logx_times_y;\n unchecked {\n if (LN_36_LOWER_BOUND < x_int256 && x_int256 < LN_36_UPPER_BOUND) {\n int256 ln_36_x = _ln_36(x_int256);\n\n // ln_36_x has 36 decimal places, so multiplying by y_int256 isn't as straightforward, since we can't just\n // bring y_int256 to 36 decimal places, as it might overflow. Instead, we perform two 18 decimal\n // multiplications and add the results: one with the first 18 decimals of ln_36_x, and one with the\n // (downscaled) last 18 decimals.\n logx_times_y = ((ln_36_x / ONE_18) * y_int256 + ((ln_36_x % ONE_18) * y_int256) / ONE_18);\n } else {\n logx_times_y = _ln(x_int256) * y_int256;\n }\n logx_times_y /= ONE_18;\n }\n\n // Finally, we compute exp(y * ln(x)) to arrive at x^y\n if (!(MIN_NATURAL_EXPONENT <= logx_times_y && logx_times_y <= MAX_NATURAL_EXPONENT)) {\n revert ProductOutOfBounds();\n }\n\n return uint256(exp(logx_times_y));\n }\n\n /**\n * @dev Natural exponentiation (e^x) with signed 18 decimal fixed point exponent.\n *\n * Reverts if `x` is smaller than MIN_NATURAL_EXPONENT, or larger than `MAX_NATURAL_EXPONENT`.\n */\n function exp(int256 x) internal pure returns (int256) {\n if (!(x >= MIN_NATURAL_EXPONENT && x <= MAX_NATURAL_EXPONENT)) {\n revert InvalidExponent();\n }\n\n // We avoid using recursion here because zkSync doesn't support it.\n bool negativeExponent = false;\n\n if (x < 0) {\n // We only handle positive exponents: e^(-x) is computed as 1 / e^x. We can safely make x positive since it\n // fits in the signed 256 bit range (as it is larger than MIN_NATURAL_EXPONENT). In the negative\n // exponent case, compute e^x, then return 1 / result.\n unchecked {\n x = -x;\n }\n negativeExponent = true;\n }\n\n // First, we use the fact that e^(x+y) = e^x * e^y to decompose x into a sum of powers of two, which we call x_n,\n // where x_n == 2^(7 - n), and e^x_n = a_n has been precomputed. We choose the first x_n, x0, to equal 2^7\n // because all larger powers are larger than MAX_NATURAL_EXPONENT, and therefore not present in the\n // decomposition.\n // At the end of this process we will have the product of all e^x_n = a_n that apply, and the remainder of this\n // decomposition, which will be lower than the smallest x_n.\n // exp(x) = k_0 * a_0 * k_1 * a_1 * ... + k_n * a_n * exp(remainder), where each k_n equals either 0 or 1.\n // We mutate x by subtracting x_n, making it the remainder of the decomposition.\n\n // The first two a_n (e^(2^7) and e^(2^6)) are too large if stored as 18 decimal numbers, and could cause\n // intermediate overflows. Instead we store them as plain integers, with 0 decimals.\n // Additionally, x0 + x1 is larger than MAX_NATURAL_EXPONENT, which means they will not both be present in the\n // decomposition.\n\n // For each x_n, we test if that term is present in the decomposition (if x is larger than it), and if so deduct\n // it and compute the accumulated product.\n\n int256 firstAN;\n unchecked {\n if (x >= x0) {\n x -= x0;\n firstAN = a0;\n } else if (x >= x1) {\n x -= x1;\n firstAN = a1;\n } else {\n firstAN = 1; // One with no decimal places\n }\n\n // We now transform x into a 20 decimal fixed point number, to have enhanced precision when computing the\n // smaller terms.\n x *= 100;\n }\n\n // `product` is the accumulated product of all a_n (except a0 and a1), which starts at 20 decimal fixed point\n // one. Recall that fixed point multiplication requires dividing by ONE_20.\n int256 product = ONE_20;\n\n unchecked {\n if (x >= x2) {\n x -= x2;\n product = (product * a2) / ONE_20;\n }\n if (x >= x3) {\n x -= x3;\n product = (product * a3) / ONE_20;\n }\n if (x >= x4) {\n x -= x4;\n product = (product * a4) / ONE_20;\n }\n if (x >= x5) {\n x -= x5;\n product = (product * a5) / ONE_20;\n }\n if (x >= x6) {\n x -= x6;\n product = (product * a6) / ONE_20;\n }\n if (x >= x7) {\n x -= x7;\n product = (product * a7) / ONE_20;\n }\n if (x >= x8) {\n x -= x8;\n product = (product * a8) / ONE_20;\n }\n if (x >= x9) {\n x -= x9;\n product = (product * a9) / ONE_20;\n }\n }\n\n // x10 and x11 are unnecessary here since we have high enough precision already.\n\n // Now we need to compute e^x, where x is small (in particular, it is smaller than x9). We use the Taylor series\n // expansion for e^x: 1 + x + (x^2 / 2!) + (x^3 / 3!) + ... + (x^n / n!).\n\n int256 seriesSum = ONE_20; // The initial one in the sum, with 20 decimal places.\n int256 term; // Each term in the sum, where the nth term is (x^n / n!).\n\n // The first term is simply x.\n term = x;\n unchecked {\n seriesSum += term;\n\n // Each term (x^n / n!) equals the previous one times x, divided by n. Since x is a fixed point number,\n // multiplying by it requires dividing by ONE_20, but dividing by the non-fixed point n values does not.\n\n term = ((term * x) / ONE_20) / 2;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 3;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 4;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 5;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 6;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 7;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 8;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 9;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 10;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 11;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 12;\n seriesSum += term;\n\n // 12 Taylor terms are sufficient for 18 decimal precision.\n\n // We now have the first a_n (with no decimals), and the product of all other a_n present, and the Taylor\n // approximation of the exponentiation of the remainder (both with 20 decimals). All that remains is to multiply\n // all three (one 20 decimal fixed point multiplication, dividing by ONE_20, and one integer multiplication),\n // and then drop two digits to return an 18 decimal value.\n\n int256 result = (((product * seriesSum) / ONE_20) * firstAN) / 100;\n\n // We avoid using recursion here because zkSync doesn't support it.\n return negativeExponent ? (ONE_18 * ONE_18) / result : result;\n }\n }\n\n /// @dev Logarithm (log(arg, base), with signed 18 decimal fixed point base and argument.\n function log(int256 arg, int256 base) internal pure returns (int256) {\n // This performs a simple base change: log(arg, base) = ln(arg) / ln(base).\n\n // Both logBase and logArg are computed as 36 decimal fixed point numbers, either by using ln_36, or by\n // upscaling.\n\n int256 logBase;\n unchecked {\n if (LN_36_LOWER_BOUND < base && base < LN_36_UPPER_BOUND) {\n logBase = _ln_36(base);\n } else {\n logBase = _ln(base) * ONE_18;\n }\n }\n\n int256 logArg;\n unchecked {\n if (LN_36_LOWER_BOUND < arg && arg < LN_36_UPPER_BOUND) {\n logArg = _ln_36(arg);\n } else {\n logArg = _ln(arg) * ONE_18;\n }\n\n // When dividing, we multiply by ONE_18 to arrive at a result with 18 decimal places\n return (logArg * ONE_18) / logBase;\n }\n }\n\n /// @dev Natural logarithm (ln(a)) with signed 18 decimal fixed point argument.\n function ln(int256 a) internal pure returns (int256) {\n // The real natural logarithm is not defined for negative numbers or zero.\n if (a <= 0) {\n revert OutOfBounds();\n }\n if (LN_36_LOWER_BOUND < a && a < LN_36_UPPER_BOUND) {\n unchecked {\n return _ln_36(a) / ONE_18;\n }\n } else {\n return _ln(a);\n }\n }\n\n /// @dev Internal natural logarithm (ln(a)) with signed 18 decimal fixed point argument.\n function _ln(int256 a) private pure returns (int256) {\n // We avoid using recursion here because zkSync doesn't support it.\n bool negativeExponent = false;\n\n if (a < ONE_18) {\n // Since ln(a^k) = k * ln(a), we can compute ln(a) as ln(a) = ln((1/a)^(-1)) = - ln((1/a)). If a is less\n // than one, 1/a will be greater than one, so in this case we compute ln(1/a) and negate the final result.\n unchecked {\n a = (ONE_18 * ONE_18) / a;\n }\n negativeExponent = true;\n }\n\n // First, we use the fact that ln^(a * b) = ln(a) + ln(b) to decompose ln(a) into a sum of powers of two, which\n // we call x_n, where x_n == 2^(7 - n), which are the natural logarithm of precomputed quantities a_n (that is,\n // ln(a_n) = x_n). We choose the first x_n, x0, to equal 2^7 because the exponential of all larger powers cannot\n // be represented as 18 fixed point decimal numbers in 256 bits, and are therefore larger than a.\n // At the end of this process we will have the sum of all x_n = ln(a_n) that apply, and the remainder of this\n // decomposition, which will be lower than the smallest a_n.\n // ln(a) = k_0 * x_0 + k_1 * x_1 + ... + k_n * x_n + ln(remainder), where each k_n equals either 0 or 1.\n // We mutate a by subtracting a_n, making it the remainder of the decomposition.\n\n // For reasons related to how `exp` works, the first two a_n (e^(2^7) and e^(2^6)) are not stored as fixed point\n // numbers with 18 decimals, but instead as plain integers with 0 decimals, so we need to multiply them by\n // ONE_18 to convert them to fixed point.\n // For each a_n, we test if that term is present in the decomposition (if a is larger than it), and if so divide\n // by it and compute the accumulated sum.\n\n int256 sum = 0;\n unchecked {\n if (a >= a0 * ONE_18) {\n a /= a0; // Integer, not fixed point division\n sum += x0;\n }\n\n if (a >= a1 * ONE_18) {\n a /= a1; // Integer, not fixed point division\n sum += x1;\n }\n\n // All other a_n and x_n are stored as 20 digit fixed point numbers, so we convert the sum and a to this format.\n sum *= 100;\n a *= 100;\n\n // Because further a_n are 20 digit fixed point numbers, we multiply by ONE_20 when dividing by them.\n\n if (a >= a2) {\n a = (a * ONE_20) / a2;\n sum += x2;\n }\n\n if (a >= a3) {\n a = (a * ONE_20) / a3;\n sum += x3;\n }\n\n if (a >= a4) {\n a = (a * ONE_20) / a4;\n sum += x4;\n }\n\n if (a >= a5) {\n a = (a * ONE_20) / a5;\n sum += x5;\n }\n\n if (a >= a6) {\n a = (a * ONE_20) / a6;\n sum += x6;\n }\n\n if (a >= a7) {\n a = (a * ONE_20) / a7;\n sum += x7;\n }\n\n if (a >= a8) {\n a = (a * ONE_20) / a8;\n sum += x8;\n }\n\n if (a >= a9) {\n a = (a * ONE_20) / a9;\n sum += x9;\n }\n\n if (a >= a10) {\n a = (a * ONE_20) / a10;\n sum += x10;\n }\n\n if (a >= a11) {\n a = (a * ONE_20) / a11;\n sum += x11;\n }\n }\n\n // a is now a small number (smaller than a_11, which roughly equals 1.06). This means we can use a Taylor series\n // that converges rapidly for values of `a` close to one - the same one used in ln_36.\n // Let z = (a - 1) / (a + 1).\n // ln(a) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 20 digit fixed point division requires multiplying by ONE_20, and multiplication requires\n // division by ONE_20.\n unchecked {\n int256 z = ((a - ONE_20) * ONE_20) / (a + ONE_20);\n int256 z_squared = (z * z) / ONE_20;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n int256 num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n int256 seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 3;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 5;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 7;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 9;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 11;\n\n // 6 Taylor terms are sufficient for 36 decimal precision.\n\n // Finally, we multiply by 2 (non fixed point) to compute ln(remainder)\n seriesSum *= 2;\n\n // We now have the sum of all x_n present, and the Taylor approximation of the logarithm of the remainder (both\n // with 20 decimals). All that remains is to sum these two, and then drop two digits to return a 18 decimal\n // value.\n\n int256 result = (sum + seriesSum) / 100;\n\n // We avoid using recursion here because zkSync doesn't support it.\n return negativeExponent ? -result : result;\n }\n }\n\n /**\n * @dev Internal high precision (36 decimal places) natural logarithm (ln(x)) with signed 18 decimal fixed point argument,\n * for x close to one.\n *\n * Should only be used if x is between LN_36_LOWER_BOUND and LN_36_UPPER_BOUND.\n */\n function _ln_36(int256 x) private pure returns (int256) {\n // Since ln(1) = 0, a value of x close to one will yield a very small result, which makes using 36 digits\n // worthwhile.\n\n // First, we transform x to a 36 digit fixed point value.\n unchecked {\n x *= ONE_18;\n\n // We will use the following Taylor expansion, which converges very rapidly. Let z = (x - 1) / (x + 1).\n // ln(x) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 36 digit fixed point division requires multiplying by ONE_36, and multiplication requires\n // division by ONE_36.\n int256 z = ((x - ONE_36) * ONE_36) / (x + ONE_36);\n int256 z_squared = (z * z) / ONE_36;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n int256 num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n int256 seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 3;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 5;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 7;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 9;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 11;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 13;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 15;\n\n // 8 Taylor terms are sufficient for 36 decimal precision.\n\n // All that remains is multiplying by 2 (non fixed point).\n return seriesSum * 2;\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\nimport { StorageSlotExtension } from \"./StorageSlotExtension.sol\";\n\n/**\n * @notice Variant of {ReentrancyGuard} that uses transient storage.\n * @dev NOTE: This variant only works on networks where EIP-1153 is available.\n */\nabstract contract ReentrancyGuardTransient {\n using StorageSlotExtension for *;\n\n // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.ReentrancyGuard\")) - 1)) & ~bytes32(uint256(0xff))\n bytes32 private constant _REENTRANCY_GUARD_STORAGE =\n 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00;\n\n /// @notice Unauthorized reentrant call.\n error ReentrancyGuardReentrantCall();\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and making it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n _nonReentrantBefore();\n _;\n _nonReentrantAfter();\n }\n\n function _nonReentrantBefore() private {\n // On the first call to nonReentrant, _status will be NOT_ENTERED.\n if (_reentrancyGuardEntered()) {\n revert ReentrancyGuardReentrantCall();\n }\n\n // Any calls to nonReentrant after this point will fail.\n _REENTRANCY_GUARD_STORAGE.asBoolean().tstore(true);\n }\n\n function _nonReentrantAfter() private {\n _REENTRANCY_GUARD_STORAGE.asBoolean().tstore(false);\n }\n\n /**\n * @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n * `nonReentrant` function in the call stack.\n */\n function _reentrancyGuardEntered() internal view returns (bool) {\n return _REENTRANCY_GUARD_STORAGE.asBoolean().tload();\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\n * @dev TIP: Consider using this library along with {SlotDerivation}.\n */\nlibrary StorageSlotExtension {\n struct Int256Slot {\n int256 value;\n }\n\n /// @dev Returns an `Int256Slot` with member `value` located at `slot`.\n function getInt256Slot(bytes32 slot) internal pure returns (Int256Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /// @dev Custom type that represents a slot holding an address.\n type AddressSlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a AddressSlotType.\n function asAddress(bytes32 slot) internal pure returns (AddressSlotType) {\n return AddressSlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a boolean.\n type BooleanSlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a BooleanSlotType.\n function asBoolean(bytes32 slot) internal pure returns (BooleanSlotType) {\n return BooleanSlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a bytes32.\n type Bytes32SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a Bytes32SlotType.\n function asBytes32(bytes32 slot) internal pure returns (Bytes32SlotType) {\n return Bytes32SlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a uint256.\n type Uint256SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a Uint256SlotType.\n function asUint256(bytes32 slot) internal pure returns (Uint256SlotType) {\n return Uint256SlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding an int256.\n type Int256SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to an Int256SlotType.\n function asInt256(bytes32 slot) internal pure returns (Int256SlotType) {\n return Int256SlotType.wrap(slot);\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(AddressSlotType slot) internal view returns (address value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(AddressSlotType slot, address value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(BooleanSlotType slot) internal view returns (bool value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(BooleanSlotType slot, bool value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Bytes32SlotType slot) internal view returns (bytes32 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Bytes32SlotType slot, bytes32 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Uint256SlotType slot) internal view returns (uint256 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Uint256SlotType slot, uint256 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Int256SlotType slot) internal view returns (int256 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Int256SlotType slot, int256 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n}\n"},"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport {\n FEE_SCALING_FACTOR,\n MAX_FEE_PERCENTAGE,\n PoolRoleAccounts\n} from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\n\nimport { SingletonAuthentication } from \"./SingletonAuthentication.sol\";\nimport { VaultGuard } from \"./VaultGuard.sol\";\n\n/**\n * @notice Helper contract to manage protocol and creator fees outside the Vault.\n * @dev This contract stores global default protocol swap and yield fees, and also tracks the values of those fees\n * for each pool (the `PoolFeeConfig` described below). Protocol fees can always be overwritten by governance, but\n * pool creator fees are controlled by the registered poolCreator (see `PoolRoleAccounts`).\n *\n * The Vault stores a single aggregate percentage for swap and yield fees; only this `ProtocolFeeController` knows\n * the component fee percentages, and how to compute the aggregate from the components. This is done for performance\n * reasons, to minimize gas on the critical path, as this way the Vault simply applies a single \"cut\", and stores the\n * fee amounts separately from the pool balances.\n *\n * The pool creator fees are \"net\" protocol fees, meaning the protocol fee is taken first, and the pool creator fee\n * percentage is applied to the remainder. Essentially, the protocol is paid first, then the remainder is divided\n * between the pool creator and the LPs.\n *\n * There is a permissionless function (`collectAggregateFees`) that transfers these tokens from the Vault to this\n * contract, and distributes them between the protocol and pool creator, after which they can be withdrawn at any\n * time by governance and the pool creator, respectively.\n *\n * Protocol fees can be zero in some cases (e.g., the token is registered as exempt), and pool creator fees are zero\n * if there is no creator role address defined. Protocol fees are capped at a maximum percentage (50%); pool creator\n * fees are computed \"net\" protocol fees, so they can be any value from 0 to 100%. Any combination is possible.\n * A protocol-fee-exempt pool with a 100% pool creator fee would send all fees to the creator. If there is no pool\n * creator, a pool with a 50% protocol fee would divide the fees evenly between the protocol and LPs.\n *\n * This contract is deployed with the Vault, but can be changed by governance.\n */\ncontract ProtocolFeeController is\n IProtocolFeeController,\n SingletonAuthentication,\n ReentrancyGuardTransient,\n VaultGuard\n{\n using FixedPoint for uint256;\n using SafeERC20 for IERC20;\n using SafeCast for *;\n\n enum ProtocolFeeType {\n SWAP,\n YIELD\n }\n\n /**\n * @notice Fee configuration stored in the swap and yield fee mappings.\n * @dev Instead of storing only the fee in the mapping, also store a flag to indicate whether the fee has been\n * set by governance through a permissioned call. (The fee is stored in 64-bits, so that the struct fits\n * within a single slot.)\n *\n * We know the percentage is an 18-decimal FP value, which only takes 60 bits, so it's guaranteed to fit,\n * and we can do simple casts to truncate the high bits without needed SafeCast.\n *\n * We want to enable permissionless updates for pools, so that it is less onerous to update potentially\n * hundreds of pools if the global protocol fees change. However, we don't want to overwrite pools that\n * have had their fee percentages manually set by the DAO (i.e., after off-chain negotiation and agreement).\n *\n * @param feePercentage The raw swap or yield fee percentage\n * @param isOverride When set, this fee is controlled by governance, and cannot be changed permissionlessly\n */\n struct PoolFeeConfig {\n uint64 feePercentage;\n bool isOverride;\n }\n\n // Maximum protocol swap fee percentage. FixedPoint.ONE corresponds to a 100% fee.\n uint256 public constant MAX_PROTOCOL_SWAP_FEE_PERCENTAGE = 50e16; // 50%\n\n // Maximum protocol yield fee percentage.\n uint256 public constant MAX_PROTOCOL_YIELD_FEE_PERCENTAGE = 50e16; // 50%\n\n // Maximum pool creator (swap, yield) fee percentage.\n uint256 public constant MAX_CREATOR_FEE_PERCENTAGE = 99.999e16; // 99.999%\n\n // Global protocol swap fee.\n uint256 private _globalProtocolSwapFeePercentage;\n\n // Global protocol yield fee.\n uint256 private _globalProtocolYieldFeePercentage;\n\n // Store the pool-specific swap fee percentages (the Vault's poolConfigBits stores the aggregate percentage).\n mapping(address pool => PoolFeeConfig swapFeeConfig) internal _poolProtocolSwapFeePercentages;\n\n // Store the pool-specific yield fee percentages (the Vault's poolConfigBits stores the aggregate percentage).\n mapping(address pool => PoolFeeConfig yieldFeeConfig) internal _poolProtocolYieldFeePercentages;\n\n // Explicitly mark a pool as registered. This will enable future migrations to safely update protected state.\n mapping(address pool => bool isRegistered) internal _registeredPools;\n\n // Pool creator swap fee percentages for each pool.\n mapping(address pool => uint256 poolCreatorSwapFee) internal _poolCreatorSwapFeePercentages;\n\n // Pool creator yield fee percentages for each pool.\n mapping(address pool => uint256 poolCreatorYieldFee) internal _poolCreatorYieldFeePercentages;\n\n // Disaggregated protocol fees (from swap and yield), available for withdrawal by governance.\n mapping(address pool => mapping(IERC20 poolToken => uint256 feeAmount)) internal _protocolFeeAmounts;\n\n // Disaggregated pool creator fees (from swap and yield), available for withdrawal by the pool creator.\n mapping(address pool => mapping(IERC20 poolToken => uint256 feeAmount)) internal _poolCreatorFeeAmounts;\n\n /**\n * @notice Prevent pool data from being registered more than once.\n * @dev This can happen if there is an error in the migration, or if governance somehow grants permission to\n * `migratePool`, which should never happen.\n *\n * @param pool The pool\n */\n error PoolAlreadyRegistered(address pool);\n\n /// @notice Migration source cannot be this contract.\n error InvalidMigrationSource();\n\n // Ensure that the caller is the pool creator.\n modifier onlyPoolCreator(address pool) {\n _ensureCallerIsPoolCreator(pool);\n _;\n }\n\n // Validate the swap fee percentage against the maximum.\n modifier withValidSwapFee(uint256 newSwapFeePercentage) {\n if (newSwapFeePercentage > MAX_PROTOCOL_SWAP_FEE_PERCENTAGE) {\n revert ProtocolSwapFeePercentageTooHigh();\n }\n _ensureValidPrecision(newSwapFeePercentage);\n _;\n }\n\n // Validate the yield fee percentage against the maximum.\n modifier withValidYieldFee(uint256 newYieldFeePercentage) {\n if (newYieldFeePercentage > MAX_PROTOCOL_YIELD_FEE_PERCENTAGE) {\n revert ProtocolYieldFeePercentageTooHigh();\n }\n _ensureValidPrecision(newYieldFeePercentage);\n _;\n }\n\n modifier withValidPoolCreatorFee(uint256 newPoolCreatorFeePercentage) {\n if (newPoolCreatorFeePercentage > MAX_CREATOR_FEE_PERCENTAGE) {\n revert PoolCreatorFeePercentageTooHigh();\n }\n _;\n }\n\n // Force collection and disaggregation (e.g., before changing protocol fee percentages).\n modifier withLatestFees(address pool) {\n collectAggregateFees(pool);\n _;\n }\n\n constructor(IVault vault_) SingletonAuthentication(vault_) VaultGuard(vault_) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /// @inheritdoc IProtocolFeeController\n function vault() external view returns (IVault) {\n return _vault;\n }\n\n /// @inheritdoc IProtocolFeeController\n function collectAggregateFees(address pool) public {\n _vault.unlock(abi.encodeCall(ProtocolFeeController.collectAggregateFeesHook, pool));\n }\n\n /**\n * @dev Copy and zero out the `aggregateFeeAmounts` collected in the Vault accounting, supplying credit\n * for each token. Then have the Vault transfer tokens to this contract, debiting each token for the amount\n * transferred so that the transaction settles when the hook returns.\n */\n function collectAggregateFeesHook(address pool) external onlyVault {\n (uint256[] memory totalSwapFees, uint256[] memory totalYieldFees) = _vault.collectAggregateFees(pool);\n _receiveAggregateFees(pool, totalSwapFees, totalYieldFees);\n }\n\n /**\n * @notice Settle fee credits from the Vault.\n * @dev This must be called after calling `collectAggregateFees` in the Vault. Note that since charging protocol\n * fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection\n * happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations. The Vault\n * differentiates between swap and yield fees (since they can have different percentage values); the Controller\n * combines swap and yield fees, then allocates the total between the protocol and pool creator.\n *\n * @param pool The address of the pool on which the swap fees were charged\n * @param swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n * @param yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order\n */\n function _receiveAggregateFees(\n address pool,\n uint256[] memory swapFeeAmounts,\n uint256[] memory yieldFeeAmounts\n ) internal {\n _receiveAggregateFees(pool, ProtocolFeeType.SWAP, swapFeeAmounts);\n _receiveAggregateFees(pool, ProtocolFeeType.YIELD, yieldFeeAmounts);\n }\n\n function _receiveAggregateFees(address pool, ProtocolFeeType feeType, uint256[] memory feeAmounts) private {\n // There are two cases when we don't need to split fees (in which case we can save gas and avoid rounding\n // errors by skipping calculations) if either the protocol or pool creator fee percentage is zero.\n\n uint256 protocolFeePercentage = feeType == ProtocolFeeType.SWAP\n ? _poolProtocolSwapFeePercentages[pool].feePercentage\n : _poolProtocolYieldFeePercentages[pool].feePercentage;\n\n uint256 poolCreatorFeePercentage = feeType == ProtocolFeeType.SWAP\n ? _poolCreatorSwapFeePercentages[pool]\n : _poolCreatorYieldFeePercentages[pool];\n\n uint256 aggregateFeePercentage;\n\n bool needToSplitFees = poolCreatorFeePercentage > 0 && protocolFeePercentage > 0;\n if (needToSplitFees) {\n // Calculate once, outside the loop.\n aggregateFeePercentage = _computeAggregateFeePercentage(protocolFeePercentage, poolCreatorFeePercentage);\n }\n\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n for (uint256 i = 0; i < numTokens; ++i) {\n if (feeAmounts[i] > 0) {\n IERC20 token = poolTokens[i];\n\n _vault.sendTo(token, address(this), feeAmounts[i]);\n\n // It should be easier for off-chain processes to handle two events, rather than parsing the type\n // out of a single event.\n if (feeType == ProtocolFeeType.SWAP) {\n emit ProtocolSwapFeeCollected(pool, token, feeAmounts[i]);\n } else {\n emit ProtocolYieldFeeCollected(pool, token, feeAmounts[i]);\n }\n\n if (needToSplitFees) {\n // The Vault took a single \"cut\" for the aggregate total percentage (protocol + pool creator) for\n // this fee type (swap or yield). The first step is to reconstruct this total fee amount. Then we\n // need to \"disaggregate\" this total, dividing it between the protocol and pool creator according\n // to their individual percentages. We do this by computing the protocol portion first, then\n // assigning the remainder to the pool creator.\n uint256 totalFeeAmountRaw = feeAmounts[i].divUp(aggregateFeePercentage);\n uint256 protocolPortion = totalFeeAmountRaw.mulUp(protocolFeePercentage);\n\n _protocolFeeAmounts[pool][token] += protocolPortion;\n _poolCreatorFeeAmounts[pool][token] += feeAmounts[i] - protocolPortion;\n } else {\n // If we don't need to split, one of them must be zero.\n if (poolCreatorFeePercentage == 0) {\n _protocolFeeAmounts[pool][token] += feeAmounts[i];\n } else {\n _poolCreatorFeeAmounts[pool][token] += feeAmounts[i];\n }\n }\n }\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function getGlobalProtocolSwapFeePercentage() external view returns (uint256) {\n return _globalProtocolSwapFeePercentage;\n }\n\n /// @inheritdoc IProtocolFeeController\n function getGlobalProtocolYieldFeePercentage() external view returns (uint256) {\n return _globalProtocolYieldFeePercentage;\n }\n\n /// @inheritdoc IProtocolFeeController\n function isPoolRegistered(address pool) external view returns (bool) {\n return _registeredPools[pool];\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolProtocolSwapFeeInfo(address pool) external view returns (uint256, bool) {\n PoolFeeConfig memory config = _poolProtocolSwapFeePercentages[pool];\n\n return (config.feePercentage, config.isOverride);\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolProtocolYieldFeeInfo(address pool) external view returns (uint256, bool) {\n PoolFeeConfig memory config = _poolProtocolYieldFeePercentages[pool];\n\n return (config.feePercentage, config.isOverride);\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolCreatorSwapFeePercentage(address pool) external view returns (uint256) {\n return _poolCreatorSwapFeePercentages[pool];\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolCreatorYieldFeePercentage(address pool) external view returns (uint256) {\n return _poolCreatorYieldFeePercentages[pool];\n }\n\n /// @inheritdoc IProtocolFeeController\n function getProtocolFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts) {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n feeAmounts = new uint256[](numTokens);\n for (uint256 i = 0; i < numTokens; ++i) {\n feeAmounts[i] = _protocolFeeAmounts[pool][poolTokens[i]];\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolCreatorFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts) {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n feeAmounts = new uint256[](numTokens);\n for (uint256 i = 0; i < numTokens; ++i) {\n feeAmounts[i] = _poolCreatorFeeAmounts[pool][poolTokens[i]];\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) external pure returns (uint256) {\n return _computeAggregateFeePercentage(protocolFeePercentage, poolCreatorFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function updateProtocolSwapFeePercentage(address pool) external withLatestFees(pool) {\n PoolFeeConfig memory feeConfig = _poolProtocolSwapFeePercentages[pool];\n uint256 globalProtocolSwapFee = _globalProtocolSwapFeePercentage;\n\n if (feeConfig.isOverride == false && globalProtocolSwapFee != feeConfig.feePercentage) {\n _updatePoolSwapFeePercentage(pool, globalProtocolSwapFee, false);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function updateProtocolYieldFeePercentage(address pool) external withLatestFees(pool) {\n PoolFeeConfig memory feeConfig = _poolProtocolYieldFeePercentages[pool];\n uint256 globalProtocolYieldFee = _globalProtocolYieldFeePercentage;\n\n if (feeConfig.isOverride == false && globalProtocolYieldFee != feeConfig.feePercentage) {\n _updatePoolYieldFeePercentage(pool, globalProtocolYieldFee, false);\n }\n }\n\n function _getAggregateFeePercentage(address pool, ProtocolFeeType feeType) internal view returns (uint256) {\n uint256 protocolFeePercentage;\n uint256 poolCreatorFeePercentage;\n\n if (feeType == ProtocolFeeType.SWAP) {\n protocolFeePercentage = _poolProtocolSwapFeePercentages[pool].feePercentage;\n poolCreatorFeePercentage = _poolCreatorSwapFeePercentages[pool];\n } else {\n protocolFeePercentage = _poolProtocolYieldFeePercentages[pool].feePercentage;\n poolCreatorFeePercentage = _poolCreatorYieldFeePercentages[pool];\n }\n\n return _computeAggregateFeePercentage(protocolFeePercentage, poolCreatorFeePercentage);\n }\n\n function _computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) internal pure returns (uint256 aggregateFeePercentage) {\n aggregateFeePercentage =\n protocolFeePercentage +\n protocolFeePercentage.complement().mulDown(poolCreatorFeePercentage);\n\n // Protocol fee percentages are limited to 24-bit precision for performance reasons (i.e., to fit all the fees\n // in a single slot), and because high precision is not needed. Generally we expect protocol fees set by\n // governance to be simple integers.\n //\n // However, the pool creator fee is entirely controlled by the pool creator, and it is possible to craft a\n // valid pool creator fee percentage that would cause the aggregate fee percentage to fail the precision check.\n // This case should be rare, so we ensure this can't happen by truncating the final value.\n aggregateFeePercentage = (aggregateFeePercentage / FEE_SCALING_FACTOR) * FEE_SCALING_FACTOR;\n }\n\n function _ensureCallerIsPoolCreator(address pool) internal view {\n address poolCreator = _getPoolCreator(pool);\n\n if (poolCreator == address(0)) {\n revert PoolCreatorNotRegistered(pool);\n }\n\n if (poolCreator != msg.sender) {\n revert CallerIsNotPoolCreator(msg.sender, pool);\n }\n }\n\n function _getPoolTokensAndCount(address pool) internal view returns (IERC20[] memory tokens, uint256 numTokens) {\n tokens = _vault.getPoolTokens(pool);\n numTokens = tokens.length;\n }\n\n // Retrieve the pool creator for a pool from the Vault.\n function _getPoolCreator(address pool) internal view returns (address) {\n PoolRoleAccounts memory roleAccounts = _vault.getPoolRoleAccounts(pool);\n\n return roleAccounts.poolCreator;\n }\n\n /***************************************************************************\n Pool Migration\n ***************************************************************************/\n\n /**\n * @notice Not exposed in the interface, this enables migration of hidden pool state.\n * @dev Permission should NEVER be granted to this function outside of a migration contract. It is necessary to\n * permit migration of the `ProtocolFeeController` with all state (in particular, protocol fee overrides and pool\n * creator fees) that cannot be written outside of the `registerPool` function called by the Vault during pool\n * deployment.\n *\n * Even if governance were to grant permission to call this function, the `_registeredPools` latch keeps it safe,\n * guaranteeing that it is impossible to use this function to change anything after registration. A pool can only\n * be registered / configured once - either copied to a new controller in the migration context, or added normally\n * through the Vault calling `registerPool`.\n *\n * @param pool The address of the pool to be migrated\n */\n function migratePool(address pool) external {\n IProtocolFeeController oldFeeController = _vault.getProtocolFeeController();\n\n if (address(oldFeeController) == address(this)) {\n revert InvalidMigrationSource();\n }\n\n if (_registeredPools[pool]) {\n revert PoolAlreadyRegistered(pool);\n }\n\n _registeredPools[pool] = true;\n\n (uint256 protocolSwapFeePercentage, bool swapFeeIsOverride) = oldFeeController.getPoolProtocolSwapFeeInfo(pool);\n _poolProtocolSwapFeePercentages[pool] = PoolFeeConfig({\n feePercentage: protocolSwapFeePercentage.toUint64(),\n isOverride: swapFeeIsOverride\n });\n\n (uint256 protocolYieldFeePercentage, bool yieldFeeIsOverride) = oldFeeController.getPoolProtocolYieldFeeInfo(\n pool\n );\n _poolProtocolYieldFeePercentages[pool] = PoolFeeConfig({\n feePercentage: protocolYieldFeePercentage.toUint64(),\n isOverride: yieldFeeIsOverride\n });\n\n // On the first migration, these functions won't exist, as they were not included in the originally deployed\n // contract. This is ok, as the first time the contract will be migrated, there will be no pool creators.\n // In the event a pool that did have a pool creator was missed, the pool creator can simply set the fee\n // percentage again on the new controller. The fact that a pool has a pool creator cannot be lost, as this\n // is stored in the Vault on initial registration.\n try oldFeeController.getPoolCreatorSwapFeePercentage(pool) returns (uint256 poolCreatorSwapFeePercentage) {\n _poolCreatorSwapFeePercentages[pool] = poolCreatorSwapFeePercentage;\n } catch {}\n\n try oldFeeController.getPoolCreatorYieldFeePercentage(pool) returns (uint256 poolCreatorYieldFeePercentage) {\n _poolCreatorYieldFeePercentages[pool] = poolCreatorYieldFeePercentage;\n } catch {}\n }\n\n /***************************************************************************\n Permissioned Functions\n ***************************************************************************/\n\n /// @inheritdoc IProtocolFeeController\n function registerPool(\n address pool,\n address poolCreator,\n bool protocolFeeExempt\n ) external onlyVault returns (uint256 aggregateSwapFeePercentage, uint256 aggregateYieldFeePercentage) {\n _registeredPools[pool] = true;\n\n // Set local storage of the actual percentages for the pool (default to global).\n aggregateSwapFeePercentage = protocolFeeExempt ? 0 : _globalProtocolSwapFeePercentage;\n aggregateYieldFeePercentage = protocolFeeExempt ? 0 : _globalProtocolYieldFeePercentage;\n\n // `isOverride` is true if the pool is protocol fee exempt; otherwise, default to false.\n // If exempt, this pool cannot be updated to the current global percentage permissionlessly.\n // The percentages are 18 decimal floating point numbers, bound between 0 and the max fee (<= FixedPoint.ONE).\n // Since this fits in 64 bits, the SafeCast shouldn't be necessary, and is done out of an abundance of caution.\n _poolProtocolSwapFeePercentages[pool] = PoolFeeConfig({\n feePercentage: aggregateSwapFeePercentage.toUint64(),\n isOverride: protocolFeeExempt\n });\n _poolProtocolYieldFeePercentages[pool] = PoolFeeConfig({\n feePercentage: aggregateYieldFeePercentage.toUint64(),\n isOverride: protocolFeeExempt\n });\n\n // Allow tracking pool fee percentages in all cases (e.g., when the pool is protocol-fee exempt).\n emit InitialPoolAggregateSwapFeePercentage(pool, aggregateSwapFeePercentage, protocolFeeExempt);\n emit InitialPoolAggregateYieldFeePercentage(pool, aggregateYieldFeePercentage, protocolFeeExempt);\n\n emit PoolRegisteredWithFeeController(pool, poolCreator, protocolFeeExempt);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setGlobalProtocolSwapFeePercentage(\n uint256 newProtocolSwapFeePercentage\n ) external withValidSwapFee(newProtocolSwapFeePercentage) authenticate {\n _globalProtocolSwapFeePercentage = newProtocolSwapFeePercentage;\n\n emit GlobalProtocolSwapFeePercentageChanged(newProtocolSwapFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setGlobalProtocolYieldFeePercentage(\n uint256 newProtocolYieldFeePercentage\n ) external withValidYieldFee(newProtocolYieldFeePercentage) authenticate {\n _globalProtocolYieldFeePercentage = newProtocolYieldFeePercentage;\n\n emit GlobalProtocolYieldFeePercentageChanged(newProtocolYieldFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setProtocolSwapFeePercentage(\n address pool,\n uint256 newProtocolSwapFeePercentage\n ) external authenticate withValidSwapFee(newProtocolSwapFeePercentage) withLatestFees(pool) {\n _updatePoolSwapFeePercentage(pool, newProtocolSwapFeePercentage, true);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setProtocolYieldFeePercentage(\n address pool,\n uint256 newProtocolYieldFeePercentage\n ) external authenticate withValidYieldFee(newProtocolYieldFeePercentage) withLatestFees(pool) {\n _updatePoolYieldFeePercentage(pool, newProtocolYieldFeePercentage, true);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setPoolCreatorSwapFeePercentage(\n address pool,\n uint256 poolCreatorSwapFeePercentage\n ) external onlyPoolCreator(pool) withValidPoolCreatorFee(poolCreatorSwapFeePercentage) withLatestFees(pool) {\n _setPoolCreatorFeePercentage(pool, poolCreatorSwapFeePercentage, ProtocolFeeType.SWAP);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setPoolCreatorYieldFeePercentage(\n address pool,\n uint256 poolCreatorYieldFeePercentage\n ) external onlyPoolCreator(pool) withValidPoolCreatorFee(poolCreatorYieldFeePercentage) withLatestFees(pool) {\n _setPoolCreatorFeePercentage(pool, poolCreatorYieldFeePercentage, ProtocolFeeType.YIELD);\n }\n\n function _setPoolCreatorFeePercentage(\n address pool,\n uint256 poolCreatorFeePercentage,\n ProtocolFeeType feeType\n ) internal {\n // Need to set locally, and update the aggregate percentage in the Vault.\n if (feeType == ProtocolFeeType.SWAP) {\n _poolCreatorSwapFeePercentages[pool] = poolCreatorFeePercentage;\n\n // The Vault will also emit an `AggregateSwapFeePercentageChanged` event.\n _vault.updateAggregateSwapFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.SWAP));\n\n emit PoolCreatorSwapFeePercentageChanged(pool, poolCreatorFeePercentage);\n } else {\n _poolCreatorYieldFeePercentages[pool] = poolCreatorFeePercentage;\n\n // The Vault will also emit an `AggregateYieldFeePercentageChanged` event.\n _vault.updateAggregateYieldFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.YIELD));\n\n emit PoolCreatorYieldFeePercentageChanged(pool, poolCreatorFeePercentage);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawProtocolFees(address pool, address recipient) external authenticate {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n for (uint256 i = 0; i < numTokens; ++i) {\n IERC20 token = poolTokens[i];\n\n _withdrawProtocolFees(pool, recipient, token);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawProtocolFeesForToken(address pool, address recipient, IERC20 token) external authenticate {\n // Revert if the pool is not registered or if the token does not belong to the pool.\n _vault.getPoolTokenCountAndIndexOfToken(pool, token);\n _withdrawProtocolFees(pool, recipient, token);\n }\n\n function _withdrawProtocolFees(address pool, address recipient, IERC20 token) internal {\n uint256 amountToWithdraw = _protocolFeeAmounts[pool][token];\n if (amountToWithdraw > 0) {\n _protocolFeeAmounts[pool][token] = 0;\n token.safeTransfer(recipient, amountToWithdraw);\n\n emit ProtocolFeesWithdrawn(pool, token, recipient, amountToWithdraw);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawPoolCreatorFees(address pool, address recipient) external onlyPoolCreator(pool) {\n _withdrawPoolCreatorFees(pool, recipient);\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawPoolCreatorFees(address pool) external {\n _withdrawPoolCreatorFees(pool, _getPoolCreator(pool));\n }\n\n function _withdrawPoolCreatorFees(address pool, address recipient) private {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n for (uint256 i = 0; i < numTokens; ++i) {\n IERC20 token = poolTokens[i];\n\n uint256 amountToWithdraw = _poolCreatorFeeAmounts[pool][token];\n if (amountToWithdraw > 0) {\n _poolCreatorFeeAmounts[pool][token] = 0;\n token.safeTransfer(recipient, amountToWithdraw);\n\n emit PoolCreatorFeesWithdrawn(pool, token, recipient, amountToWithdraw);\n }\n }\n }\n\n /// @dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage.\n function _updatePoolSwapFeePercentage(address pool, uint256 newProtocolSwapFeePercentage, bool isOverride) private {\n // Update local storage of the raw percentage.\n //\n // The percentages are 18 decimal floating point numbers, bound between 0 and the max fee (<= FixedPoint.ONE).\n // Since this fits in 64 bits, the SafeCast shouldn't be necessary, and is done out of an abundance of caution.\n _poolProtocolSwapFeePercentages[pool] = PoolFeeConfig({\n feePercentage: newProtocolSwapFeePercentage.toUint64(),\n isOverride: isOverride\n });\n\n // Update the resulting aggregate swap fee value in the Vault (PoolConfig).\n _vault.updateAggregateSwapFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.SWAP));\n\n emit ProtocolSwapFeePercentageChanged(pool, newProtocolSwapFeePercentage);\n }\n\n /// @dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage.\n function _updatePoolYieldFeePercentage(\n address pool,\n uint256 newProtocolYieldFeePercentage,\n bool isOverride\n ) private {\n // Update local storage of the raw percentage.\n // The percentages are 18 decimal floating point numbers, bound between 0 and the max fee (<= FixedPoint.ONE).\n // Since this fits in 64 bits, the SafeCast shouldn't be necessary, and is done out of an abundance of caution.\n _poolProtocolYieldFeePercentages[pool] = PoolFeeConfig({\n feePercentage: newProtocolYieldFeePercentage.toUint64(),\n isOverride: isOverride\n });\n\n // Update the resulting aggregate yield fee value in the Vault (PoolConfig).\n _vault.updateAggregateYieldFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.YIELD));\n\n emit ProtocolYieldFeePercentageChanged(pool, newProtocolYieldFeePercentage);\n }\n\n function _ensureValidPrecision(uint256 feePercentage) private pure {\n // Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n // precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n // corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n // Ensure there will be no precision loss in the Vault - which would lead to a discrepancy between the\n // aggregate fee calculated here and that stored in the Vault.\n if ((feePercentage / FEE_SCALING_FACTOR) * FEE_SCALING_FACTOR != feePercentage) {\n revert IVaultErrors.FeePrecisionTooHigh();\n }\n }\n}\n"},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { CommonAuthentication } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol\";\n\n/**\n * @notice Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\n * @dev The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned\n * functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same\n * function name.\n */\nabstract contract SingletonAuthentication is CommonAuthentication {\n // Use the contract's own address to disambiguate action identifiers.\n constructor(IVault vault) CommonAuthentication(vault, bytes32(uint256(uint160(address(this))))) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /**\n * @notice Get the address of the Balancer Vault.\n * @return vault An interface pointer to the Vault\n */\n function getVault() public view returns (IVault) {\n return _getVault();\n }\n\n /**\n * @notice Get the address of the Authorizer.\n * @return authorizer An interface pointer to the Authorizer\n */\n function getAuthorizer() public view returns (IAuthorizer) {\n return getVault().getAuthorizer();\n }\n}\n"},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\n/// @notice Contract that shares the modifier `onlyVault`.\ncontract VaultGuard {\n IVault internal immutable _vault;\n\n constructor(IVault vault) {\n _vault = vault;\n }\n\n modifier onlyVault() {\n _ensureOnlyVault();\n _;\n }\n\n function _ensureOnlyVault() private view {\n if (msg.sender != address(_vault)) {\n revert IVaultErrors.SenderIsNotVault(msg.sender);\n }\n }\n}\n"},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC4626.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\nimport {IERC20Metadata} from \"../token/ERC20/extensions/IERC20Metadata.sol\";\n\n/**\n * @dev Interface of the ERC4626 \"Tokenized Vault Standard\", as defined in\n * https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\n */\ninterface IERC4626 is IERC20, IERC20Metadata {\n event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares);\n\n event Withdraw(\n address indexed sender,\n address indexed receiver,\n address indexed owner,\n uint256 assets,\n uint256 shares\n );\n\n /**\n * @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n *\n * - MUST be an ERC-20 token contract.\n * - MUST NOT revert.\n */\n function asset() external view returns (address assetTokenAddress);\n\n /**\n * @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n *\n * - SHOULD include any compounding that occurs from yield.\n * - MUST be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT revert.\n */\n function totalAssets() external view returns (uint256 totalManagedAssets);\n\n /**\n * @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n * scenario where all the conditions are met.\n *\n * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT show any variations depending on the caller.\n * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n * - MUST NOT revert.\n *\n * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n * from.\n */\n function convertToShares(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n * scenario where all the conditions are met.\n *\n * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT show any variations depending on the caller.\n * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n * - MUST NOT revert.\n *\n * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n * from.\n */\n function convertToAssets(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n * through a deposit call.\n *\n * - MUST return a limited value if receiver is subject to some deposit limit.\n * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n * - MUST NOT revert.\n */\n function maxDeposit(address receiver) external view returns (uint256 maxAssets);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n * current on-chain conditions.\n *\n * - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n * call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n * in the same transaction.\n * - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n * deposit would be accepted, regardless if the user has enough tokens approved, etc.\n * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n */\n function previewDeposit(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n *\n * - MUST emit the Deposit event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * deposit execution, and are accounted for during deposit.\n * - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n * approving enough underlying tokens to the Vault contract, etc).\n *\n * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n */\n function deposit(uint256 assets, address receiver) external returns (uint256 shares);\n\n /**\n * @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n * - MUST return a limited value if receiver is subject to some mint limit.\n * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n * - MUST NOT revert.\n */\n function maxMint(address receiver) external view returns (uint256 maxShares);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n * current on-chain conditions.\n *\n * - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n * in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n * same transaction.\n * - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n * would be accepted, regardless if the user has enough tokens approved, etc.\n * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by minting.\n */\n function previewMint(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n *\n * - MUST emit the Deposit event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n * execution, and are accounted for during mint.\n * - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n * approving enough underlying tokens to the Vault contract, etc).\n *\n * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n */\n function mint(uint256 shares, address receiver) external returns (uint256 assets);\n\n /**\n * @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n * Vault, through a withdraw call.\n *\n * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n * - MUST NOT revert.\n */\n function maxWithdraw(address owner) external view returns (uint256 maxAssets);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n * given current on-chain conditions.\n *\n * - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n * call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n * called\n * in the same transaction.\n * - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n * the withdrawal would be accepted, regardless if the user has enough shares, etc.\n * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n */\n function previewWithdraw(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n *\n * - MUST emit the Withdraw event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * withdraw execution, and are accounted for during withdraw.\n * - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n * not having enough shares, etc).\n *\n * Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n * Those methods should be performed separately.\n */\n function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares);\n\n /**\n * @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n * through a redeem call.\n *\n * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n * - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n * - MUST NOT revert.\n */\n function maxRedeem(address owner) external view returns (uint256 maxShares);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\n * given current on-chain conditions.\n *\n * - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n * in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n * same transaction.\n * - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n * redemption would be accepted, regardless if the user has enough shares, etc.\n * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by redeeming.\n */\n function previewRedeem(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n *\n * - MUST emit the Withdraw event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * redeem execution, and are accounted for during redeem.\n * - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n * not having enough shares, etc).\n *\n * NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n * Those methods should be performed separately.\n */\n function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets);\n}\n"},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC20 standard.\n */\ninterface IERC20Metadata is IERC20 {\n /**\n * @dev Returns the name of the token.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the symbol of the token.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the decimals places of the token.\n */\n function decimals() external view returns (uint8);\n}\n"},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Permit.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n *\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\n * need to send a transaction, and thus is not required to hold Ether at all.\n *\n * ==== Security Considerations\n *\n * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\n * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\n * considered as an intention to spend the allowance in any specific way. The second is that because permits have\n * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\n * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\n * generally recommended is:\n *\n * ```solidity\n * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\n * try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\n * doThing(..., value);\n * }\n *\n * function doThing(..., uint256 value) public {\n * token.safeTransferFrom(msg.sender, address(this), value);\n * ...\n * }\n * ```\n *\n * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\n * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\n * {SafeERC20-safeTransferFrom}).\n *\n * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\n * contracts should have entry points that don't rely on permit.\n */\ninterface IERC20Permit {\n /**\n * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\n * given ``owner``'s signed approval.\n *\n * IMPORTANT: The same issues {IERC20-approve} has related to transaction\n * ordering also apply here.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n * - `deadline` must be a timestamp in the future.\n * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\n * over the EIP712-formatted function arguments.\n * - the signature must use ``owner``'s current nonce (see {nonces}).\n *\n * For more information on the signature format, see the\n * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\n * section].\n *\n * CAUTION: See Security Considerations above.\n */\n function permit(\n address owner,\n address spender,\n uint256 value,\n uint256 deadline,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) external;\n\n /**\n * @dev Returns the current nonce for `owner`. This value must be\n * included whenever a signature is generated for {permit}.\n *\n * Every successful call to {permit} increases ``owner``'s nonce by one. This\n * prevents a signature from being used multiple times.\n */\n function nonces(address owner) external view returns (uint256);\n\n /**\n * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\n */\n // solhint-disable-next-line func-name-mixedcase\n function DOMAIN_SEPARATOR() external view returns (bytes32);\n}\n"},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n"},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\nimport {IERC20Permit} from \"../extensions/IERC20Permit.sol\";\nimport {Address} from \"../../../utils/Address.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n using Address for address;\n\n /**\n * @dev An operation with an ERC20 token failed.\n */\n error SafeERC20FailedOperation(address token);\n\n /**\n * @dev Indicates a failed `decreaseAllowance` request.\n */\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\n\n /**\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\n }\n\n /**\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\n */\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n }\n\n /**\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n uint256 oldAllowance = token.allowance(address(this), spender);\n forceApprove(token, spender, oldAllowance + value);\n }\n\n /**\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n * value, non-reverting calls are assumed to be successful.\n */\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\n unchecked {\n uint256 currentAllowance = token.allowance(address(this), spender);\n if (currentAllowance < requestedDecrease) {\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\n }\n forceApprove(token, spender, currentAllowance - requestedDecrease);\n }\n }\n\n /**\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n * to be set to zero before setting it to a non-zero value, such as USDT.\n */\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\n\n if (!_callOptionalReturnBool(token, approvalCall)) {\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\n _callOptionalReturn(token, approvalCall);\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n */\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\n // the target address contains contract code and also asserts for success in the low-level call.\n\n bytes memory returndata = address(token).functionCall(data);\n if (returndata.length != 0 && !abi.decode(returndata, (bool))) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.\n */\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false\n // and not revert is the subcall reverts.\n\n (bool success, bytes memory returndata) = address(token).call(data);\n return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && address(token).code.length > 0;\n }\n}\n"},"@openzeppelin/contracts/utils/Address.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error AddressInsufficientBalance(address account);\n\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedInnerCall();\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert AddressInsufficientBalance(address(this));\n }\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n if (!success) {\n revert FailedInnerCall();\n }\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {FailedInnerCall} error.\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert AddressInsufficientBalance(address(this));\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an\n * unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {FailedInnerCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.\n */\n function _revert(bytes memory returndata) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert FailedInnerCall();\n }\n }\n}\n"},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SafeCast.sol)\n// This file was procedurally generated from scripts/generate/templates/SafeCast.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\n * checks.\n *\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n * easily result in undesired exploitation or bugs, since developers usually\n * assume that overflows raise errors. `SafeCast` restores this intuition by\n * reverting the transaction when such an operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeCast {\n /**\n * @dev Value doesn't fit in an uint of `bits` size.\n */\n error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);\n\n /**\n * @dev An int value doesn't fit in an uint of `bits` size.\n */\n error SafeCastOverflowedIntToUint(int256 value);\n\n /**\n * @dev Value doesn't fit in an int of `bits` size.\n */\n error SafeCastOverflowedIntDowncast(uint8 bits, int256 value);\n\n /**\n * @dev An uint value doesn't fit in an int of `bits` size.\n */\n error SafeCastOverflowedUintToInt(uint256 value);\n\n /**\n * @dev Returns the downcasted uint248 from uint256, reverting on\n * overflow (when the input is greater than largest uint248).\n *\n * Counterpart to Solidity's `uint248` operator.\n *\n * Requirements:\n *\n * - input must fit into 248 bits\n */\n function toUint248(uint256 value) internal pure returns (uint248) {\n if (value > type(uint248).max) {\n revert SafeCastOverflowedUintDowncast(248, value);\n }\n return uint248(value);\n }\n\n /**\n * @dev Returns the downcasted uint240 from uint256, reverting on\n * overflow (when the input is greater than largest uint240).\n *\n * Counterpart to Solidity's `uint240` operator.\n *\n * Requirements:\n *\n * - input must fit into 240 bits\n */\n function toUint240(uint256 value) internal pure returns (uint240) {\n if (value > type(uint240).max) {\n revert SafeCastOverflowedUintDowncast(240, value);\n }\n return uint240(value);\n }\n\n /**\n * @dev Returns the downcasted uint232 from uint256, reverting on\n * overflow (when the input is greater than largest uint232).\n *\n * Counterpart to Solidity's `uint232` operator.\n *\n * Requirements:\n *\n * - input must fit into 232 bits\n */\n function toUint232(uint256 value) internal pure returns (uint232) {\n if (value > type(uint232).max) {\n revert SafeCastOverflowedUintDowncast(232, value);\n }\n return uint232(value);\n }\n\n /**\n * @dev Returns the downcasted uint224 from uint256, reverting on\n * overflow (when the input is greater than largest uint224).\n *\n * Counterpart to Solidity's `uint224` operator.\n *\n * Requirements:\n *\n * - input must fit into 224 bits\n */\n function toUint224(uint256 value) internal pure returns (uint224) {\n if (value > type(uint224).max) {\n revert SafeCastOverflowedUintDowncast(224, value);\n }\n return uint224(value);\n }\n\n /**\n * @dev Returns the downcasted uint216 from uint256, reverting on\n * overflow (when the input is greater than largest uint216).\n *\n * Counterpart to Solidity's `uint216` operator.\n *\n * Requirements:\n *\n * - input must fit into 216 bits\n */\n function toUint216(uint256 value) internal pure returns (uint216) {\n if (value > type(uint216).max) {\n revert SafeCastOverflowedUintDowncast(216, value);\n }\n return uint216(value);\n }\n\n /**\n * @dev Returns the downcasted uint208 from uint256, reverting on\n * overflow (when the input is greater than largest uint208).\n *\n * Counterpart to Solidity's `uint208` operator.\n *\n * Requirements:\n *\n * - input must fit into 208 bits\n */\n function toUint208(uint256 value) internal pure returns (uint208) {\n if (value > type(uint208).max) {\n revert SafeCastOverflowedUintDowncast(208, value);\n }\n return uint208(value);\n }\n\n /**\n * @dev Returns the downcasted uint200 from uint256, reverting on\n * overflow (when the input is greater than largest uint200).\n *\n * Counterpart to Solidity's `uint200` operator.\n *\n * Requirements:\n *\n * - input must fit into 200 bits\n */\n function toUint200(uint256 value) internal pure returns (uint200) {\n if (value > type(uint200).max) {\n revert SafeCastOverflowedUintDowncast(200, value);\n }\n return uint200(value);\n }\n\n /**\n * @dev Returns the downcasted uint192 from uint256, reverting on\n * overflow (when the input is greater than largest uint192).\n *\n * Counterpart to Solidity's `uint192` operator.\n *\n * Requirements:\n *\n * - input must fit into 192 bits\n */\n function toUint192(uint256 value) internal pure returns (uint192) {\n if (value > type(uint192).max) {\n revert SafeCastOverflowedUintDowncast(192, value);\n }\n return uint192(value);\n }\n\n /**\n * @dev Returns the downcasted uint184 from uint256, reverting on\n * overflow (when the input is greater than largest uint184).\n *\n * Counterpart to Solidity's `uint184` operator.\n *\n * Requirements:\n *\n * - input must fit into 184 bits\n */\n function toUint184(uint256 value) internal pure returns (uint184) {\n if (value > type(uint184).max) {\n revert SafeCastOverflowedUintDowncast(184, value);\n }\n return uint184(value);\n }\n\n /**\n * @dev Returns the downcasted uint176 from uint256, reverting on\n * overflow (when the input is greater than largest uint176).\n *\n * Counterpart to Solidity's `uint176` operator.\n *\n * Requirements:\n *\n * - input must fit into 176 bits\n */\n function toUint176(uint256 value) internal pure returns (uint176) {\n if (value > type(uint176).max) {\n revert SafeCastOverflowedUintDowncast(176, value);\n }\n return uint176(value);\n }\n\n /**\n * @dev Returns the downcasted uint168 from uint256, reverting on\n * overflow (when the input is greater than largest uint168).\n *\n * Counterpart to Solidity's `uint168` operator.\n *\n * Requirements:\n *\n * - input must fit into 168 bits\n */\n function toUint168(uint256 value) internal pure returns (uint168) {\n if (value > type(uint168).max) {\n revert SafeCastOverflowedUintDowncast(168, value);\n }\n return uint168(value);\n }\n\n /**\n * @dev Returns the downcasted uint160 from uint256, reverting on\n * overflow (when the input is greater than largest uint160).\n *\n * Counterpart to Solidity's `uint160` operator.\n *\n * Requirements:\n *\n * - input must fit into 160 bits\n */\n function toUint160(uint256 value) internal pure returns (uint160) {\n if (value > type(uint160).max) {\n revert SafeCastOverflowedUintDowncast(160, value);\n }\n return uint160(value);\n }\n\n /**\n * @dev Returns the downcasted uint152 from uint256, reverting on\n * overflow (when the input is greater than largest uint152).\n *\n * Counterpart to Solidity's `uint152` operator.\n *\n * Requirements:\n *\n * - input must fit into 152 bits\n */\n function toUint152(uint256 value) internal pure returns (uint152) {\n if (value > type(uint152).max) {\n revert SafeCastOverflowedUintDowncast(152, value);\n }\n return uint152(value);\n }\n\n /**\n * @dev Returns the downcasted uint144 from uint256, reverting on\n * overflow (when the input is greater than largest uint144).\n *\n * Counterpart to Solidity's `uint144` operator.\n *\n * Requirements:\n *\n * - input must fit into 144 bits\n */\n function toUint144(uint256 value) internal pure returns (uint144) {\n if (value > type(uint144).max) {\n revert SafeCastOverflowedUintDowncast(144, value);\n }\n return uint144(value);\n }\n\n /**\n * @dev Returns the downcasted uint136 from uint256, reverting on\n * overflow (when the input is greater than largest uint136).\n *\n * Counterpart to Solidity's `uint136` operator.\n *\n * Requirements:\n *\n * - input must fit into 136 bits\n */\n function toUint136(uint256 value) internal pure returns (uint136) {\n if (value > type(uint136).max) {\n revert SafeCastOverflowedUintDowncast(136, value);\n }\n return uint136(value);\n }\n\n /**\n * @dev Returns the downcasted uint128 from uint256, reverting on\n * overflow (when the input is greater than largest uint128).\n *\n * Counterpart to Solidity's `uint128` operator.\n *\n * Requirements:\n *\n * - input must fit into 128 bits\n */\n function toUint128(uint256 value) internal pure returns (uint128) {\n if (value > type(uint128).max) {\n revert SafeCastOverflowedUintDowncast(128, value);\n }\n return uint128(value);\n }\n\n /**\n * @dev Returns the downcasted uint120 from uint256, reverting on\n * overflow (when the input is greater than largest uint120).\n *\n * Counterpart to Solidity's `uint120` operator.\n *\n * Requirements:\n *\n * - input must fit into 120 bits\n */\n function toUint120(uint256 value) internal pure returns (uint120) {\n if (value > type(uint120).max) {\n revert SafeCastOverflowedUintDowncast(120, value);\n }\n return uint120(value);\n }\n\n /**\n * @dev Returns the downcasted uint112 from uint256, reverting on\n * overflow (when the input is greater than largest uint112).\n *\n * Counterpart to Solidity's `uint112` operator.\n *\n * Requirements:\n *\n * - input must fit into 112 bits\n */\n function toUint112(uint256 value) internal pure returns (uint112) {\n if (value > type(uint112).max) {\n revert SafeCastOverflowedUintDowncast(112, value);\n }\n return uint112(value);\n }\n\n /**\n * @dev Returns the downcasted uint104 from uint256, reverting on\n * overflow (when the input is greater than largest uint104).\n *\n * Counterpart to Solidity's `uint104` operator.\n *\n * Requirements:\n *\n * - input must fit into 104 bits\n */\n function toUint104(uint256 value) internal pure returns (uint104) {\n if (value > type(uint104).max) {\n revert SafeCastOverflowedUintDowncast(104, value);\n }\n return uint104(value);\n }\n\n /**\n * @dev Returns the downcasted uint96 from uint256, reverting on\n * overflow (when the input is greater than largest uint96).\n *\n * Counterpart to Solidity's `uint96` operator.\n *\n * Requirements:\n *\n * - input must fit into 96 bits\n */\n function toUint96(uint256 value) internal pure returns (uint96) {\n if (value > type(uint96).max) {\n revert SafeCastOverflowedUintDowncast(96, value);\n }\n return uint96(value);\n }\n\n /**\n * @dev Returns the downcasted uint88 from uint256, reverting on\n * overflow (when the input is greater than largest uint88).\n *\n * Counterpart to Solidity's `uint88` operator.\n *\n * Requirements:\n *\n * - input must fit into 88 bits\n */\n function toUint88(uint256 value) internal pure returns (uint88) {\n if (value > type(uint88).max) {\n revert SafeCastOverflowedUintDowncast(88, value);\n }\n return uint88(value);\n }\n\n /**\n * @dev Returns the downcasted uint80 from uint256, reverting on\n * overflow (when the input is greater than largest uint80).\n *\n * Counterpart to Solidity's `uint80` operator.\n *\n * Requirements:\n *\n * - input must fit into 80 bits\n */\n function toUint80(uint256 value) internal pure returns (uint80) {\n if (value > type(uint80).max) {\n revert SafeCastOverflowedUintDowncast(80, value);\n }\n return uint80(value);\n }\n\n /**\n * @dev Returns the downcasted uint72 from uint256, reverting on\n * overflow (when the input is greater than largest uint72).\n *\n * Counterpart to Solidity's `uint72` operator.\n *\n * Requirements:\n *\n * - input must fit into 72 bits\n */\n function toUint72(uint256 value) internal pure returns (uint72) {\n if (value > type(uint72).max) {\n revert SafeCastOverflowedUintDowncast(72, value);\n }\n return uint72(value);\n }\n\n /**\n * @dev Returns the downcasted uint64 from uint256, reverting on\n * overflow (when the input is greater than largest uint64).\n *\n * Counterpart to Solidity's `uint64` operator.\n *\n * Requirements:\n *\n * - input must fit into 64 bits\n */\n function toUint64(uint256 value) internal pure returns (uint64) {\n if (value > type(uint64).max) {\n revert SafeCastOverflowedUintDowncast(64, value);\n }\n return uint64(value);\n }\n\n /**\n * @dev Returns the downcasted uint56 from uint256, reverting on\n * overflow (when the input is greater than largest uint56).\n *\n * Counterpart to Solidity's `uint56` operator.\n *\n * Requirements:\n *\n * - input must fit into 56 bits\n */\n function toUint56(uint256 value) internal pure returns (uint56) {\n if (value > type(uint56).max) {\n revert SafeCastOverflowedUintDowncast(56, value);\n }\n return uint56(value);\n }\n\n /**\n * @dev Returns the downcasted uint48 from uint256, reverting on\n * overflow (when the input is greater than largest uint48).\n *\n * Counterpart to Solidity's `uint48` operator.\n *\n * Requirements:\n *\n * - input must fit into 48 bits\n */\n function toUint48(uint256 value) internal pure returns (uint48) {\n if (value > type(uint48).max) {\n revert SafeCastOverflowedUintDowncast(48, value);\n }\n return uint48(value);\n }\n\n /**\n * @dev Returns the downcasted uint40 from uint256, reverting on\n * overflow (when the input is greater than largest uint40).\n *\n * Counterpart to Solidity's `uint40` operator.\n *\n * Requirements:\n *\n * - input must fit into 40 bits\n */\n function toUint40(uint256 value) internal pure returns (uint40) {\n if (value > type(uint40).max) {\n revert SafeCastOverflowedUintDowncast(40, value);\n }\n return uint40(value);\n }\n\n /**\n * @dev Returns the downcasted uint32 from uint256, reverting on\n * overflow (when the input is greater than largest uint32).\n *\n * Counterpart to Solidity's `uint32` operator.\n *\n * Requirements:\n *\n * - input must fit into 32 bits\n */\n function toUint32(uint256 value) internal pure returns (uint32) {\n if (value > type(uint32).max) {\n revert SafeCastOverflowedUintDowncast(32, value);\n }\n return uint32(value);\n }\n\n /**\n * @dev Returns the downcasted uint24 from uint256, reverting on\n * overflow (when the input is greater than largest uint24).\n *\n * Counterpart to Solidity's `uint24` operator.\n *\n * Requirements:\n *\n * - input must fit into 24 bits\n */\n function toUint24(uint256 value) internal pure returns (uint24) {\n if (value > type(uint24).max) {\n revert SafeCastOverflowedUintDowncast(24, value);\n }\n return uint24(value);\n }\n\n /**\n * @dev Returns the downcasted uint16 from uint256, reverting on\n * overflow (when the input is greater than largest uint16).\n *\n * Counterpart to Solidity's `uint16` operator.\n *\n * Requirements:\n *\n * - input must fit into 16 bits\n */\n function toUint16(uint256 value) internal pure returns (uint16) {\n if (value > type(uint16).max) {\n revert SafeCastOverflowedUintDowncast(16, value);\n }\n return uint16(value);\n }\n\n /**\n * @dev Returns the downcasted uint8 from uint256, reverting on\n * overflow (when the input is greater than largest uint8).\n *\n * Counterpart to Solidity's `uint8` operator.\n *\n * Requirements:\n *\n * - input must fit into 8 bits\n */\n function toUint8(uint256 value) internal pure returns (uint8) {\n if (value > type(uint8).max) {\n revert SafeCastOverflowedUintDowncast(8, value);\n }\n return uint8(value);\n }\n\n /**\n * @dev Converts a signed int256 into an unsigned uint256.\n *\n * Requirements:\n *\n * - input must be greater than or equal to 0.\n */\n function toUint256(int256 value) internal pure returns (uint256) {\n if (value < 0) {\n revert SafeCastOverflowedIntToUint(value);\n }\n return uint256(value);\n }\n\n /**\n * @dev Returns the downcasted int248 from int256, reverting on\n * overflow (when the input is less than smallest int248 or\n * greater than largest int248).\n *\n * Counterpart to Solidity's `int248` operator.\n *\n * Requirements:\n *\n * - input must fit into 248 bits\n */\n function toInt248(int256 value) internal pure returns (int248 downcasted) {\n downcasted = int248(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(248, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int240 from int256, reverting on\n * overflow (when the input is less than smallest int240 or\n * greater than largest int240).\n *\n * Counterpart to Solidity's `int240` operator.\n *\n * Requirements:\n *\n * - input must fit into 240 bits\n */\n function toInt240(int256 value) internal pure returns (int240 downcasted) {\n downcasted = int240(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(240, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int232 from int256, reverting on\n * overflow (when the input is less than smallest int232 or\n * greater than largest int232).\n *\n * Counterpart to Solidity's `int232` operator.\n *\n * Requirements:\n *\n * - input must fit into 232 bits\n */\n function toInt232(int256 value) internal pure returns (int232 downcasted) {\n downcasted = int232(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(232, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int224 from int256, reverting on\n * overflow (when the input is less than smallest int224 or\n * greater than largest int224).\n *\n * Counterpart to Solidity's `int224` operator.\n *\n * Requirements:\n *\n * - input must fit into 224 bits\n */\n function toInt224(int256 value) internal pure returns (int224 downcasted) {\n downcasted = int224(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(224, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int216 from int256, reverting on\n * overflow (when the input is less than smallest int216 or\n * greater than largest int216).\n *\n * Counterpart to Solidity's `int216` operator.\n *\n * Requirements:\n *\n * - input must fit into 216 bits\n */\n function toInt216(int256 value) internal pure returns (int216 downcasted) {\n downcasted = int216(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(216, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int208 from int256, reverting on\n * overflow (when the input is less than smallest int208 or\n * greater than largest int208).\n *\n * Counterpart to Solidity's `int208` operator.\n *\n * Requirements:\n *\n * - input must fit into 208 bits\n */\n function toInt208(int256 value) internal pure returns (int208 downcasted) {\n downcasted = int208(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(208, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int200 from int256, reverting on\n * overflow (when the input is less than smallest int200 or\n * greater than largest int200).\n *\n * Counterpart to Solidity's `int200` operator.\n *\n * Requirements:\n *\n * - input must fit into 200 bits\n */\n function toInt200(int256 value) internal pure returns (int200 downcasted) {\n downcasted = int200(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(200, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int192 from int256, reverting on\n * overflow (when the input is less than smallest int192 or\n * greater than largest int192).\n *\n * Counterpart to Solidity's `int192` operator.\n *\n * Requirements:\n *\n * - input must fit into 192 bits\n */\n function toInt192(int256 value) internal pure returns (int192 downcasted) {\n downcasted = int192(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(192, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int184 from int256, reverting on\n * overflow (when the input is less than smallest int184 or\n * greater than largest int184).\n *\n * Counterpart to Solidity's `int184` operator.\n *\n * Requirements:\n *\n * - input must fit into 184 bits\n */\n function toInt184(int256 value) internal pure returns (int184 downcasted) {\n downcasted = int184(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(184, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int176 from int256, reverting on\n * overflow (when the input is less than smallest int176 or\n * greater than largest int176).\n *\n * Counterpart to Solidity's `int176` operator.\n *\n * Requirements:\n *\n * - input must fit into 176 bits\n */\n function toInt176(int256 value) internal pure returns (int176 downcasted) {\n downcasted = int176(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(176, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int168 from int256, reverting on\n * overflow (when the input is less than smallest int168 or\n * greater than largest int168).\n *\n * Counterpart to Solidity's `int168` operator.\n *\n * Requirements:\n *\n * - input must fit into 168 bits\n */\n function toInt168(int256 value) internal pure returns (int168 downcasted) {\n downcasted = int168(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(168, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int160 from int256, reverting on\n * overflow (when the input is less than smallest int160 or\n * greater than largest int160).\n *\n * Counterpart to Solidity's `int160` operator.\n *\n * Requirements:\n *\n * - input must fit into 160 bits\n */\n function toInt160(int256 value) internal pure returns (int160 downcasted) {\n downcasted = int160(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(160, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int152 from int256, reverting on\n * overflow (when the input is less than smallest int152 or\n * greater than largest int152).\n *\n * Counterpart to Solidity's `int152` operator.\n *\n * Requirements:\n *\n * - input must fit into 152 bits\n */\n function toInt152(int256 value) internal pure returns (int152 downcasted) {\n downcasted = int152(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(152, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int144 from int256, reverting on\n * overflow (when the input is less than smallest int144 or\n * greater than largest int144).\n *\n * Counterpart to Solidity's `int144` operator.\n *\n * Requirements:\n *\n * - input must fit into 144 bits\n */\n function toInt144(int256 value) internal pure returns (int144 downcasted) {\n downcasted = int144(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(144, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int136 from int256, reverting on\n * overflow (when the input is less than smallest int136 or\n * greater than largest int136).\n *\n * Counterpart to Solidity's `int136` operator.\n *\n * Requirements:\n *\n * - input must fit into 136 bits\n */\n function toInt136(int256 value) internal pure returns (int136 downcasted) {\n downcasted = int136(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(136, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int128 from int256, reverting on\n * overflow (when the input is less than smallest int128 or\n * greater than largest int128).\n *\n * Counterpart to Solidity's `int128` operator.\n *\n * Requirements:\n *\n * - input must fit into 128 bits\n */\n function toInt128(int256 value) internal pure returns (int128 downcasted) {\n downcasted = int128(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(128, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int120 from int256, reverting on\n * overflow (when the input is less than smallest int120 or\n * greater than largest int120).\n *\n * Counterpart to Solidity's `int120` operator.\n *\n * Requirements:\n *\n * - input must fit into 120 bits\n */\n function toInt120(int256 value) internal pure returns (int120 downcasted) {\n downcasted = int120(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(120, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int112 from int256, reverting on\n * overflow (when the input is less than smallest int112 or\n * greater than largest int112).\n *\n * Counterpart to Solidity's `int112` operator.\n *\n * Requirements:\n *\n * - input must fit into 112 bits\n */\n function toInt112(int256 value) internal pure returns (int112 downcasted) {\n downcasted = int112(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(112, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int104 from int256, reverting on\n * overflow (when the input is less than smallest int104 or\n * greater than largest int104).\n *\n * Counterpart to Solidity's `int104` operator.\n *\n * Requirements:\n *\n * - input must fit into 104 bits\n */\n function toInt104(int256 value) internal pure returns (int104 downcasted) {\n downcasted = int104(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(104, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int96 from int256, reverting on\n * overflow (when the input is less than smallest int96 or\n * greater than largest int96).\n *\n * Counterpart to Solidity's `int96` operator.\n *\n * Requirements:\n *\n * - input must fit into 96 bits\n */\n function toInt96(int256 value) internal pure returns (int96 downcasted) {\n downcasted = int96(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(96, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int88 from int256, reverting on\n * overflow (when the input is less than smallest int88 or\n * greater than largest int88).\n *\n * Counterpart to Solidity's `int88` operator.\n *\n * Requirements:\n *\n * - input must fit into 88 bits\n */\n function toInt88(int256 value) internal pure returns (int88 downcasted) {\n downcasted = int88(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(88, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int80 from int256, reverting on\n * overflow (when the input is less than smallest int80 or\n * greater than largest int80).\n *\n * Counterpart to Solidity's `int80` operator.\n *\n * Requirements:\n *\n * - input must fit into 80 bits\n */\n function toInt80(int256 value) internal pure returns (int80 downcasted) {\n downcasted = int80(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(80, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int72 from int256, reverting on\n * overflow (when the input is less than smallest int72 or\n * greater than largest int72).\n *\n * Counterpart to Solidity's `int72` operator.\n *\n * Requirements:\n *\n * - input must fit into 72 bits\n */\n function toInt72(int256 value) internal pure returns (int72 downcasted) {\n downcasted = int72(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(72, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int64 from int256, reverting on\n * overflow (when the input is less than smallest int64 or\n * greater than largest int64).\n *\n * Counterpart to Solidity's `int64` operator.\n *\n * Requirements:\n *\n * - input must fit into 64 bits\n */\n function toInt64(int256 value) internal pure returns (int64 downcasted) {\n downcasted = int64(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(64, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int56 from int256, reverting on\n * overflow (when the input is less than smallest int56 or\n * greater than largest int56).\n *\n * Counterpart to Solidity's `int56` operator.\n *\n * Requirements:\n *\n * - input must fit into 56 bits\n */\n function toInt56(int256 value) internal pure returns (int56 downcasted) {\n downcasted = int56(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(56, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int48 from int256, reverting on\n * overflow (when the input is less than smallest int48 or\n * greater than largest int48).\n *\n * Counterpart to Solidity's `int48` operator.\n *\n * Requirements:\n *\n * - input must fit into 48 bits\n */\n function toInt48(int256 value) internal pure returns (int48 downcasted) {\n downcasted = int48(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(48, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int40 from int256, reverting on\n * overflow (when the input is less than smallest int40 or\n * greater than largest int40).\n *\n * Counterpart to Solidity's `int40` operator.\n *\n * Requirements:\n *\n * - input must fit into 40 bits\n */\n function toInt40(int256 value) internal pure returns (int40 downcasted) {\n downcasted = int40(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(40, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int32 from int256, reverting on\n * overflow (when the input is less than smallest int32 or\n * greater than largest int32).\n *\n * Counterpart to Solidity's `int32` operator.\n *\n * Requirements:\n *\n * - input must fit into 32 bits\n */\n function toInt32(int256 value) internal pure returns (int32 downcasted) {\n downcasted = int32(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(32, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int24 from int256, reverting on\n * overflow (when the input is less than smallest int24 or\n * greater than largest int24).\n *\n * Counterpart to Solidity's `int24` operator.\n *\n * Requirements:\n *\n * - input must fit into 24 bits\n */\n function toInt24(int256 value) internal pure returns (int24 downcasted) {\n downcasted = int24(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(24, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int16 from int256, reverting on\n * overflow (when the input is less than smallest int16 or\n * greater than largest int16).\n *\n * Counterpart to Solidity's `int16` operator.\n *\n * Requirements:\n *\n * - input must fit into 16 bits\n */\n function toInt16(int256 value) internal pure returns (int16 downcasted) {\n downcasted = int16(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(16, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int8 from int256, reverting on\n * overflow (when the input is less than smallest int8 or\n * greater than largest int8).\n *\n * Counterpart to Solidity's `int8` operator.\n *\n * Requirements:\n *\n * - input must fit into 8 bits\n */\n function toInt8(int256 value) internal pure returns (int8 downcasted) {\n downcasted = int8(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(8, value);\n }\n }\n\n /**\n * @dev Converts an unsigned uint256 into a signed int256.\n *\n * Requirements:\n *\n * - input must be less than or equal to maxInt256.\n */\n function toInt256(uint256 value) internal pure returns (int256) {\n // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\n if (value > uint256(type(int256).max)) {\n revert SafeCastOverflowedUintToInt(value);\n }\n return int256(value);\n }\n}\n"},"contracts/ProtocolFeeControllerMigration.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\";\nimport { IBasicAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol\";\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { PoolRoleAccounts, PoolConfig } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\nimport { IVaultAdmin } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { SingletonAuthentication } from \"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\";\nimport { ProtocolFeeController } from \"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\";\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\n\n/**\n * @notice Migrate from the original ProtocolFeeController to one with extra events.\n * @dev These events enable tracking pool protocol fees under all circumstances (in particular, when protocol fees are\n * initially turned off).\n *\n * After deployment, call `migratePools` as many times as necessary. The list must be generated externally, as pools\n * are not iterable on-chain. The batch interface allows an unlimited number of pools to be migrated; it's possible\n * there might be too many to migrate in a single call.\n *\n * The first time `migratePools` is called, the contract will first copy the global (pool-independent data). This could\n * be done in a separate stage, but we're trying to keep the contract simple, vs. duplicating the staging coordinator\n * system of v2 just yet.\n *\n * When all pools have been migrated, call `finalizeMigration` to disable further migration, update the address in the\n * Vault, and renounce all permissions. While `migratePools` is permissionless, this call must be permissioned to\n * prevent premature termination in case multiple transactions are required to migrate all the pools.\n *\n * Associated with `20250221-protocol-fee-controller-migration` (fork test only).\n */\ncontract ProtocolFeeControllerMigration is ReentrancyGuardTransient, SingletonAuthentication {\n IProtocolFeeController public immutable oldFeeController;\n IProtocolFeeController public newFeeController;\n\n IVault public immutable vault;\n\n // IAuthorizer with interface for granting/revoking roles.\n IBasicAuthorizer internal immutable _authorizer;\n\n // Set when the operation is complete and all permissions have been renounced.\n bool internal _finalized;\n\n // Set after the global percentages have been transferred (on the first call to `migratePools`).\n bool internal _globalPercentagesMigrated;\n\n /**\n * @notice Attempt to deploy this contract with invalid parameters.\n * @dev ProtocolFeeController contracts return the address of the Vault they were deployed with. Ensure that both\n * the old and new controllers reference the same vault.\n */\n error InvalidFeeController();\n\n /// @notice Migration can only be performed once.\n error AlreadyMigrated();\n\n /*constructor(IVault _vault, IProtocolFeeController _newFeeController) SingletonAuthentication(_vault) {\n oldFeeController = _vault.getProtocolFeeController();\n\n // Ensure valid fee controllers. Also ensure that we are not trying to operate on the current fee controller.\n if (_newFeeController.vault() != _vault || _newFeeController == oldFeeController) {\n revert InvalidFeeController();\n }\n\n vault = _vault;\n newFeeController = _newFeeController;\n\n _authorizer = IBasicAuthorizer(address(vault.getAuthorizer()));\n }*/\n\n // Temporary constructor used for fork testing.\n\n constructor(IVault _vault) SingletonAuthentication(_vault) {\n oldFeeController = _vault.getProtocolFeeController();\n\n vault = _vault;\n\n _authorizer = IBasicAuthorizer(address(vault.getAuthorizer()));\n }\n\n // Temporary - delete after fork test. Run this before `migrateFeeController`.\n function setNewFeeController(IProtocolFeeController _newFeeController) external {\n newFeeController = _newFeeController;\n }\n\n /**\n * @notice Check whether migration has been completed.\n * @dev It can only be done once.\n * @return isComplete True if `finalizeMigration` has been called.\n */\n function isMigrationComplete() public view returns (bool) {\n return _finalized;\n }\n\n /**\n * @notice Migrate pools from the old fee controller to the new one.\n * @dev THis can be called multiple times, if there are too many pools for a single transaction. Note that the\n * first time this is called, it will migrate the global fee percentages, then proceed with the first set of pools.\n *\n * @param pools The set of pools to be migrated in this call\n */\n function migratePools(address[] memory pools) external virtual nonReentrant {\n if (isMigrationComplete()) {\n revert AlreadyMigrated();\n }\n\n // Migrate the global percentages only once, before the first set of pools.\n if (_globalPercentagesMigrated == false) {\n _globalPercentagesMigrated = true;\n\n _migrateGlobalPercentages();\n }\n\n // This more complex migration allows for pool creators and overrides, and uses the new features in the second\n // deployment of the `ProtocolFeeController`.\n //\n // At the end of this process, governance must still withdraw any leftover protocol fees from the old\n // controller (i.e., that have been collected but not withdrawn). Pool creators likewise would still need to\n // withdraw any leftover pool creator fees from the old controller.\n for (uint256 i = 0; i < pools.length; ++i) {\n // This function is not in the public interface.\n ProtocolFeeController(address(newFeeController)).migratePool(pools[i]);\n }\n }\n\n function finalizeMigration() external virtual authenticate {\n if (isMigrationComplete()) {\n revert AlreadyMigrated();\n }\n\n _finalized = true;\n\n // Update the fee controller in the Vault.\n _migrateFeeController();\n\n // Revoke all permissions.\n _authorizer.renounceRole(_authorizer.DEFAULT_ADMIN_ROLE(), address(this));\n }\n\n function _migrateGlobalPercentages() internal {\n // Grant global fee percentage permissions to set on new controller.\n bytes32 swapFeeRole = IAuthentication(address(newFeeController)).getActionId(\n IProtocolFeeController.setGlobalProtocolSwapFeePercentage.selector\n );\n\n bytes32 yieldFeeRole = IAuthentication(address(newFeeController)).getActionId(\n IProtocolFeeController.setGlobalProtocolYieldFeePercentage.selector\n );\n\n _authorizer.grantRole(swapFeeRole, address(this));\n _authorizer.grantRole(yieldFeeRole, address(this));\n\n // Copy percentages to new controller.\n uint256 globalSwapFeePercentage = oldFeeController.getGlobalProtocolSwapFeePercentage();\n uint256 globalYieldFeePercentage = oldFeeController.getGlobalProtocolYieldFeePercentage();\n\n newFeeController.setGlobalProtocolSwapFeePercentage(globalSwapFeePercentage);\n newFeeController.setGlobalProtocolYieldFeePercentage(globalYieldFeePercentage);\n\n // Revoke permissions.\n _authorizer.renounceRole(swapFeeRole, address(this));\n _authorizer.renounceRole(yieldFeeRole, address(this));\n }\n\n function _migrateFeeController() internal {\n bytes32 setFeeControllerRole = IAuthentication(address(vault)).getActionId(\n IVaultAdmin.setProtocolFeeController.selector\n );\n\n _authorizer.grantRole(setFeeControllerRole, address(this));\n\n vault.setProtocolFeeController(newFeeController);\n\n _authorizer.renounceRole(setFeeControllerRole, address(this));\n }\n}\n"}},"settings":{"viaIR":true,"evmVersion":"cancun","optimizer":{"enabled":true,"runs":9999,"details":{"yulDetails":{"optimizerSteps":"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu"}}},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"],"":["ast"]}}}},"output":{"errors":[{"component":"general","errorCode":"2394","formattedMessage":"Warning: Transient storage as defined by EIP-1153 can break the composability of smart contracts: Since transient storage is cleared only at the end of the transaction and not at the end of the outermost call frame to the contract within a transaction, your contract may unintentionally misbehave when invoked multiple times in a complex transaction. To avoid this, be sure to clear all transient storage at the end of any call to your contract. The use of transient storage for reentrancy guards that are cleared at the end of the call is safe.\n --> @balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol:74:13:\n |\n74 | tstore(slot, value)\n | ^^^^^^\n\n","message":"Transient storage as defined by EIP-1153 can break the composability of smart contracts: Since transient storage is cleared only at the end of the transaction and not at the end of the outermost call frame to the contract within a transaction, your contract may unintentionally misbehave when invoked multiple times in a complex transaction. To avoid this, be sure to clear all transient storage at the end of any call to your contract. The use of transient storage for reentrancy guards that are cleared at the end of the call is safe.","severity":"warning","sourceLocation":{"end":2572,"file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","start":2566},"type":"Warning"}],"sources":{"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol","exportedSymbols":{"IAuthorizer":[73],"IBasicAuthorizer":[32]},"id":33,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:0"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"../vault/IAuthorizer.sol","id":3,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":33,"sourceUnit":74,"src":"72:55:0","symbolAliases":[{"foreign":{"id":2,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73,"src":"81:11:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":4,"name":"IAuthorizer","nameLocations":["159:11:0"],"nodeType":"IdentifierPath","referencedDeclaration":73,"src":"159:11:0"},"id":5,"nodeType":"InheritanceSpecifier","src":"159:11:0"}],"canonicalName":"IBasicAuthorizer","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":32,"linearizedBaseContracts":[32,73],"name":"IBasicAuthorizer","nameLocation":"139:16:0","nodeType":"ContractDefinition","nodes":[{"functionSelector":"a217fddf","id":10,"implemented":false,"kind":"function","modifiers":[],"name":"DEFAULT_ADMIN_ROLE","nameLocation":"239:18:0","nodeType":"FunctionDefinition","parameters":{"id":6,"nodeType":"ParameterList","parameters":[],"src":"257:2:0"},"returnParameters":{"id":9,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10,"src":"283:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7,"name":"bytes32","nodeType":"ElementaryTypeName","src":"283:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"282:9:0"},"scope":32,"src":"230:62:0","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"2f2ff15d","id":17,"implemented":false,"kind":"function","modifiers":[],"name":"grantRole","nameLocation":"307:9:0","nodeType":"FunctionDefinition","parameters":{"id":15,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12,"mutability":"mutable","name":"role","nameLocation":"325:4:0","nodeType":"VariableDeclaration","scope":17,"src":"317:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11,"name":"bytes32","nodeType":"ElementaryTypeName","src":"317:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":14,"mutability":"mutable","name":"account","nameLocation":"339:7:0","nodeType":"VariableDeclaration","scope":17,"src":"331:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13,"name":"address","nodeType":"ElementaryTypeName","src":"331:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"316:31:0"},"returnParameters":{"id":16,"nodeType":"ParameterList","parameters":[],"src":"356:0:0"},"scope":32,"src":"298:59:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"d547741f","id":24,"implemented":false,"kind":"function","modifiers":[],"name":"revokeRole","nameLocation":"372:10:0","nodeType":"FunctionDefinition","parameters":{"id":22,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19,"mutability":"mutable","name":"role","nameLocation":"391:4:0","nodeType":"VariableDeclaration","scope":24,"src":"383:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18,"name":"bytes32","nodeType":"ElementaryTypeName","src":"383:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":21,"mutability":"mutable","name":"account","nameLocation":"405:7:0","nodeType":"VariableDeclaration","scope":24,"src":"397:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":20,"name":"address","nodeType":"ElementaryTypeName","src":"397:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"382:31:0"},"returnParameters":{"id":23,"nodeType":"ParameterList","parameters":[],"src":"422:0:0"},"scope":32,"src":"363:60:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"36568abe","id":31,"implemented":false,"kind":"function","modifiers":[],"name":"renounceRole","nameLocation":"438:12:0","nodeType":"FunctionDefinition","parameters":{"id":29,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26,"mutability":"mutable","name":"role","nameLocation":"459:4:0","nodeType":"VariableDeclaration","scope":31,"src":"451:12:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":25,"name":"bytes32","nodeType":"ElementaryTypeName","src":"451:7:0","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":28,"mutability":"mutable","name":"account","nameLocation":"473:7:0","nodeType":"VariableDeclaration","scope":31,"src":"465:15:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27,"name":"address","nodeType":"ElementaryTypeName","src":"465:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"450:31:0"},"returnParameters":{"id":30,"nodeType":"ParameterList","parameters":[],"src":"490:0:0"},"scope":32,"src":"429:62:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":33,"src":"129:364:0","usedErrors":[],"usedEvents":[]}],"src":"46:448:0"},"id":0},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","exportedSymbols":{"IAuthentication":[47]},"id":48,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":34,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:1"},{"abstract":false,"baseContracts":[],"canonicalName":"IAuthentication","contractDependencies":[],"contractKind":"interface","documentation":{"id":35,"nodeType":"StructuredDocumentation","src":"72:77:1","text":"@notice Simple interface for permissioned calling of external functions."},"fullyImplemented":false,"id":47,"linearizedBaseContracts":[47],"name":"IAuthentication","nameLocation":"159:15:1","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":36,"nodeType":"StructuredDocumentation","src":"181:67:1","text":"@notice The sender does not have permission to call a function."},"errorSelector":"23dada53","id":38,"name":"SenderNotAllowed","nameLocation":"259:16:1","nodeType":"ErrorDefinition","parameters":{"id":37,"nodeType":"ParameterList","parameters":[],"src":"275:2:1"},"src":"253:25:1"},{"documentation":{"id":39,"nodeType":"StructuredDocumentation","src":"284:237:1","text":" @notice Returns the action identifier associated with the external function described by `selector`.\n @param selector The 4-byte selector of the permissioned function\n @return actionId The computed actionId"},"functionSelector":"851c1bb3","id":46,"implemented":false,"kind":"function","modifiers":[],"name":"getActionId","nameLocation":"535:11:1","nodeType":"FunctionDefinition","parameters":{"id":42,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41,"mutability":"mutable","name":"selector","nameLocation":"554:8:1","nodeType":"VariableDeclaration","scope":46,"src":"547:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":40,"name":"bytes4","nodeType":"ElementaryTypeName","src":"547:6:1","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"546:17:1"},"returnParameters":{"id":45,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44,"mutability":"mutable","name":"actionId","nameLocation":"595:8:1","nodeType":"VariableDeclaration","scope":46,"src":"587:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":43,"name":"bytes32","nodeType":"ElementaryTypeName","src":"587:7:1","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"586:18:1"},"scope":47,"src":"526:79:1","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":48,"src":"149:458:1","usedErrors":[38],"usedEvents":[]}],"src":"46:562:1"},"id":1},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","exportedSymbols":{"IRateProvider":[57]},"id":58,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":49,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:2"},{"abstract":false,"baseContracts":[],"canonicalName":"IRateProvider","contractDependencies":[],"contractKind":"interface","documentation":{"id":50,"nodeType":"StructuredDocumentation","src":"72:56:2","text":"@notice General interface for token exchange rates."},"fullyImplemented":false,"id":57,"linearizedBaseContracts":[57],"name":"IRateProvider","nameLocation":"138:13:2","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":51,"nodeType":"StructuredDocumentation","src":"158:573:2","text":" @notice An 18 decimal fixed point number representing the exchange rate of one token to another related token.\n @dev The meaning of this rate depends on the context. Note that there may be an error associated with a token\n rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface\n does not take a rounding direction or return an error, so great care must be taken when interpreting and using\n rates in downstream computations.\n @return rate The current token rate"},"functionSelector":"679aefce","id":56,"implemented":false,"kind":"function","modifiers":[],"name":"getRate","nameLocation":"745:7:2","nodeType":"FunctionDefinition","parameters":{"id":52,"nodeType":"ParameterList","parameters":[],"src":"752:2:2"},"returnParameters":{"id":55,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54,"mutability":"mutable","name":"rate","nameLocation":"786:4:2","nodeType":"VariableDeclaration","scope":56,"src":"778:12:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":53,"name":"uint256","nodeType":"ElementaryTypeName","src":"778:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"777:14:2"},"scope":57,"src":"736:56:2","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":58,"src":"128:666:2","usedErrors":[],"usedEvents":[]}],"src":"46:749:2"},"id":2},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","exportedSymbols":{"IAuthorizer":[73]},"id":74,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":59,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:3"},{"abstract":false,"baseContracts":[],"canonicalName":"IAuthorizer","contractDependencies":[],"contractKind":"interface","documentation":{"id":60,"nodeType":"StructuredDocumentation","src":"72:56:3","text":"@notice Interface to the Vault's permission system."},"fullyImplemented":false,"id":73,"linearizedBaseContracts":[73],"name":"IAuthorizer","nameLocation":"138:11:3","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":61,"nodeType":"StructuredDocumentation","src":"156:354:3","text":" @notice Returns true if `account` can perform the action described by `actionId` in the contract `where`.\n @param actionId Identifier for the action to be performed\n @param account Account trying to perform the action\n @param where Target contract for the action\n @return success True if the action is permitted"},"functionSelector":"9be2a884","id":72,"implemented":false,"kind":"function","modifiers":[],"name":"canPerform","nameLocation":"524:10:3","nodeType":"FunctionDefinition","parameters":{"id":68,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63,"mutability":"mutable","name":"actionId","nameLocation":"543:8:3","nodeType":"VariableDeclaration","scope":72,"src":"535:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":62,"name":"bytes32","nodeType":"ElementaryTypeName","src":"535:7:3","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":65,"mutability":"mutable","name":"account","nameLocation":"561:7:3","nodeType":"VariableDeclaration","scope":72,"src":"553:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":64,"name":"address","nodeType":"ElementaryTypeName","src":"553:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":67,"mutability":"mutable","name":"where","nameLocation":"578:5:3","nodeType":"VariableDeclaration","scope":72,"src":"570:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":66,"name":"address","nodeType":"ElementaryTypeName","src":"570:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"534:50:3"},"returnParameters":{"id":71,"nodeType":"ParameterList","parameters":[{"constant":false,"id":70,"mutability":"mutable","name":"success","nameLocation":"613:7:3","nodeType":"VariableDeclaration","scope":72,"src":"608:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":69,"name":"bool","nodeType":"ElementaryTypeName","src":"608:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"607:14:3"},"scope":73,"src":"515:107:3","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":74,"src":"128:496:3","usedErrors":[],"usedEvents":[]}],"src":"46:579:3"},"id":3},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","exportedSymbols":{"AddLiquidityKind":[2347],"AfterSwapParams":[2341],"HookFlags":[2167],"IHooks":[275],"LiquidityManagement":[2120],"PoolSwapParams":[2312],"RemoveLiquidityKind":[2368],"SwapKind":[2275],"TokenConfig":[2234]},"id":276,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":75,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:4"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":84,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":276,"sourceUnit":2412,"src":"289:193:4","symbolAliases":[{"foreign":{"id":76,"name":"TokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2234,"src":"302:11:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":77,"name":"LiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2120,"src":"319:19:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":78,"name":"PoolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2312,"src":"344:14:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":79,"name":"AfterSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2341,"src":"364:15:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":80,"name":"HookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2167,"src":"385:9:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":81,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2347,"src":"400:16:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":82,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2368,"src":"422:19:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":83,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2275,"src":"447:8:4","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IHooks","contractDependencies":[],"contractKind":"interface","documentation":{"id":85,"nodeType":"StructuredDocumentation","src":"484:490:4","text":" @notice Interface for pool hooks.\n @dev Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that\n they are called in the correct order, and with the correct arguments. To maintain this security, these functions\n should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`,\n then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)"},"fullyImplemented":false,"id":275,"linearizedBaseContracts":[275],"name":"IHooks","nameLocation":"985:6:4","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":86,"nodeType":"StructuredDocumentation","src":"1205:769:4","text":" @notice Hook executed when a pool is registered with a non-zero hooks contract.\n @dev Returns true if registration was successful, and false to revert the pool registration.\n Make sure this function is properly implemented (e.g. check the factory, and check that the\n given pool is from the factory). The Vault address will be msg.sender.\n @param factory Address of the pool factory (contract deploying the pool)\n @param pool Address of the pool\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param liquidityManagement Liquidity management flags indicating which functions are enabled\n @return success True if the hook allowed the registration, false otherwise"},"functionSelector":"0b89f182","id":102,"implemented":false,"kind":"function","modifiers":[],"name":"onRegister","nameLocation":"1988:10:4","nodeType":"FunctionDefinition","parameters":{"id":98,"nodeType":"ParameterList","parameters":[{"constant":false,"id":88,"mutability":"mutable","name":"factory","nameLocation":"2016:7:4","nodeType":"VariableDeclaration","scope":102,"src":"2008:15:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":87,"name":"address","nodeType":"ElementaryTypeName","src":"2008:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":90,"mutability":"mutable","name":"pool","nameLocation":"2041:4:4","nodeType":"VariableDeclaration","scope":102,"src":"2033:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":89,"name":"address","nodeType":"ElementaryTypeName","src":"2033:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":94,"mutability":"mutable","name":"tokenConfig","nameLocation":"2076:11:4","nodeType":"VariableDeclaration","scope":102,"src":"2055:32:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2234_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":92,"nodeType":"UserDefinedTypeName","pathNode":{"id":91,"name":"TokenConfig","nameLocations":["2055:11:4"],"nodeType":"IdentifierPath","referencedDeclaration":2234,"src":"2055:11:4"},"referencedDeclaration":2234,"src":"2055:11:4","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2234_storage_ptr","typeString":"struct TokenConfig"}},"id":93,"nodeType":"ArrayTypeName","src":"2055:13:4","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2234_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":97,"mutability":"mutable","name":"liquidityManagement","nameLocation":"2126:19:4","nodeType":"VariableDeclaration","scope":102,"src":"2097:48:4","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2120_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":96,"nodeType":"UserDefinedTypeName","pathNode":{"id":95,"name":"LiquidityManagement","nameLocations":["2097:19:4"],"nodeType":"IdentifierPath","referencedDeclaration":2120,"src":"2097:19:4"},"referencedDeclaration":2120,"src":"2097:19:4","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2120_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"1998:153:4"},"returnParameters":{"id":101,"nodeType":"ParameterList","parameters":[{"constant":false,"id":100,"mutability":"mutable","name":"success","nameLocation":"2175:7:4","nodeType":"VariableDeclaration","scope":102,"src":"2170:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":99,"name":"bool","nodeType":"ElementaryTypeName","src":"2170:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2169:14:4"},"scope":275,"src":"1979:205:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":103,"nodeType":"StructuredDocumentation","src":"2190:412:4","text":" @notice Return the set of hooks implemented by the contract.\n @dev The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined\n (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero).\n `onRegister` is the only \"mandatory\" hook.\n @return hookFlags Flags indicating which hooks the contract supports"},"functionSelector":"d77153a7","id":109,"implemented":false,"kind":"function","modifiers":[],"name":"getHookFlags","nameLocation":"2616:12:4","nodeType":"FunctionDefinition","parameters":{"id":104,"nodeType":"ParameterList","parameters":[],"src":"2628:2:4"},"returnParameters":{"id":108,"nodeType":"ParameterList","parameters":[{"constant":false,"id":107,"mutability":"mutable","name":"hookFlags","nameLocation":"2671:9:4","nodeType":"VariableDeclaration","scope":109,"src":"2654:26:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$2167_memory_ptr","typeString":"struct HookFlags"},"typeName":{"id":106,"nodeType":"UserDefinedTypeName","pathNode":{"id":105,"name":"HookFlags","nameLocations":["2654:9:4"],"nodeType":"IdentifierPath","referencedDeclaration":2167,"src":"2654:9:4"},"referencedDeclaration":2167,"src":"2654:9:4","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$2167_storage_ptr","typeString":"struct HookFlags"}},"visibility":"internal"}],"src":"2653:28:4"},"scope":275,"src":"2607:75:4","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":110,"nodeType":"StructuredDocumentation","src":"2897:484:4","text":" @notice Hook executed before pool initialization.\n @dev Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param exactAmountsIn Exact amounts of input tokens\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with initialization"},"functionSelector":"1c149e28","id":120,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeInitialize","nameLocation":"3395:18:4","nodeType":"FunctionDefinition","parameters":{"id":116,"nodeType":"ParameterList","parameters":[{"constant":false,"id":113,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"3431:14:4","nodeType":"VariableDeclaration","scope":120,"src":"3414:31:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":111,"name":"uint256","nodeType":"ElementaryTypeName","src":"3414:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":112,"nodeType":"ArrayTypeName","src":"3414:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":115,"mutability":"mutable","name":"userData","nameLocation":"3460:8:4","nodeType":"VariableDeclaration","scope":120,"src":"3447:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":114,"name":"bytes","nodeType":"ElementaryTypeName","src":"3447:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3413:56:4"},"returnParameters":{"id":119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":118,"mutability":"mutable","name":"success","nameLocation":"3493:7:4","nodeType":"VariableDeclaration","scope":120,"src":"3488:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":117,"name":"bool","nodeType":"ElementaryTypeName","src":"3488:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3487:14:4"},"scope":275,"src":"3386:116:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":121,"nodeType":"StructuredDocumentation","src":"3508:563:4","text":" @notice Hook to be executed after pool initialization.\n @dev Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param exactAmountsIn Exact amounts of input tokens\n @param bptAmountOut Amount of pool tokens minted during initialization\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool accepts the initialization results"},"functionSelector":"38be241d","id":133,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterInitialize","nameLocation":"4085:17:4","nodeType":"FunctionDefinition","parameters":{"id":129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":124,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"4129:14:4","nodeType":"VariableDeclaration","scope":133,"src":"4112:31:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":122,"name":"uint256","nodeType":"ElementaryTypeName","src":"4112:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":123,"nodeType":"ArrayTypeName","src":"4112:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":126,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4161:12:4","nodeType":"VariableDeclaration","scope":133,"src":"4153:20:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":125,"name":"uint256","nodeType":"ElementaryTypeName","src":"4153:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":128,"mutability":"mutable","name":"userData","nameLocation":"4196:8:4","nodeType":"VariableDeclaration","scope":133,"src":"4183:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":127,"name":"bytes","nodeType":"ElementaryTypeName","src":"4183:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4102:108:4"},"returnParameters":{"id":132,"nodeType":"ParameterList","parameters":[{"constant":false,"id":131,"mutability":"mutable","name":"success","nameLocation":"4234:7:4","nodeType":"VariableDeclaration","scope":133,"src":"4229:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":130,"name":"bool","nodeType":"ElementaryTypeName","src":"4229:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4228:14:4"},"scope":275,"src":"4076:167:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":134,"nodeType":"StructuredDocumentation","src":"4461:953:4","text":" @notice Hook to be executed before adding liquidity.\n @dev Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param maxAmountsInScaled18 Maximum amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"45421ec7","id":156,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeAddLiquidity","nameLocation":"5428:20:4","nodeType":"FunctionDefinition","parameters":{"id":152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":136,"mutability":"mutable","name":"router","nameLocation":"5466:6:4","nodeType":"VariableDeclaration","scope":156,"src":"5458:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":135,"name":"address","nodeType":"ElementaryTypeName","src":"5458:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":138,"mutability":"mutable","name":"pool","nameLocation":"5490:4:4","nodeType":"VariableDeclaration","scope":156,"src":"5482:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":137,"name":"address","nodeType":"ElementaryTypeName","src":"5482:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":141,"mutability":"mutable","name":"kind","nameLocation":"5521:4:4","nodeType":"VariableDeclaration","scope":156,"src":"5504:21:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2347","typeString":"enum AddLiquidityKind"},"typeName":{"id":140,"nodeType":"UserDefinedTypeName","pathNode":{"id":139,"name":"AddLiquidityKind","nameLocations":["5504:16:4"],"nodeType":"IdentifierPath","referencedDeclaration":2347,"src":"5504:16:4"},"referencedDeclaration":2347,"src":"5504:16:4","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2347","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":144,"mutability":"mutable","name":"maxAmountsInScaled18","nameLocation":"5552:20:4","nodeType":"VariableDeclaration","scope":156,"src":"5535:37:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":142,"name":"uint256","nodeType":"ElementaryTypeName","src":"5535:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":143,"nodeType":"ArrayTypeName","src":"5535:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":146,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"5590:15:4","nodeType":"VariableDeclaration","scope":156,"src":"5582:23:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":145,"name":"uint256","nodeType":"ElementaryTypeName","src":"5582:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":149,"mutability":"mutable","name":"balancesScaled18","nameLocation":"5632:16:4","nodeType":"VariableDeclaration","scope":156,"src":"5615:33:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":147,"name":"uint256","nodeType":"ElementaryTypeName","src":"5615:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":148,"nodeType":"ArrayTypeName","src":"5615:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":151,"mutability":"mutable","name":"userData","nameLocation":"5671:8:4","nodeType":"VariableDeclaration","scope":156,"src":"5658:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":150,"name":"bytes","nodeType":"ElementaryTypeName","src":"5658:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5448:237:4"},"returnParameters":{"id":155,"nodeType":"ParameterList","parameters":[{"constant":false,"id":154,"mutability":"mutable","name":"success","nameLocation":"5709:7:4","nodeType":"VariableDeclaration","scope":156,"src":"5704:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":153,"name":"bool","nodeType":"ElementaryTypeName","src":"5704:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5703:14:4"},"scope":275,"src":"5419:299:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":157,"nodeType":"StructuredDocumentation","src":"5724:1250:4","text":" @notice Hook to be executed after adding liquidity.\n @dev Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param amountsInScaled18 Actual amounts of tokens added, sorted in token registration order\n @param amountsInRaw Actual amounts of tokens added, sorted in token registration order\n @param bptAmountOut Amount of pool tokens minted\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Additional (optional) data provided by the user\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook"},"functionSelector":"976907cc","id":185,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterAddLiquidity","nameLocation":"6988:19:4","nodeType":"FunctionDefinition","parameters":{"id":178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":159,"mutability":"mutable","name":"router","nameLocation":"7025:6:4","nodeType":"VariableDeclaration","scope":185,"src":"7017:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":158,"name":"address","nodeType":"ElementaryTypeName","src":"7017:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":161,"mutability":"mutable","name":"pool","nameLocation":"7049:4:4","nodeType":"VariableDeclaration","scope":185,"src":"7041:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":160,"name":"address","nodeType":"ElementaryTypeName","src":"7041:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":164,"mutability":"mutable","name":"kind","nameLocation":"7080:4:4","nodeType":"VariableDeclaration","scope":185,"src":"7063:21:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2347","typeString":"enum AddLiquidityKind"},"typeName":{"id":163,"nodeType":"UserDefinedTypeName","pathNode":{"id":162,"name":"AddLiquidityKind","nameLocations":["7063:16:4"],"nodeType":"IdentifierPath","referencedDeclaration":2347,"src":"7063:16:4"},"referencedDeclaration":2347,"src":"7063:16:4","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2347","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":167,"mutability":"mutable","name":"amountsInScaled18","nameLocation":"7111:17:4","nodeType":"VariableDeclaration","scope":185,"src":"7094:34:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":165,"name":"uint256","nodeType":"ElementaryTypeName","src":"7094:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":166,"nodeType":"ArrayTypeName","src":"7094:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":170,"mutability":"mutable","name":"amountsInRaw","nameLocation":"7155:12:4","nodeType":"VariableDeclaration","scope":185,"src":"7138:29:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":168,"name":"uint256","nodeType":"ElementaryTypeName","src":"7138:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":169,"nodeType":"ArrayTypeName","src":"7138:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":172,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7185:12:4","nodeType":"VariableDeclaration","scope":185,"src":"7177:20:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":171,"name":"uint256","nodeType":"ElementaryTypeName","src":"7177:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":175,"mutability":"mutable","name":"balancesScaled18","nameLocation":"7224:16:4","nodeType":"VariableDeclaration","scope":185,"src":"7207:33:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":173,"name":"uint256","nodeType":"ElementaryTypeName","src":"7207:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":174,"nodeType":"ArrayTypeName","src":"7207:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":177,"mutability":"mutable","name":"userData","nameLocation":"7263:8:4","nodeType":"VariableDeclaration","scope":185,"src":"7250:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":176,"name":"bytes","nodeType":"ElementaryTypeName","src":"7250:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7007:270:4"},"returnParameters":{"id":184,"nodeType":"ParameterList","parameters":[{"constant":false,"id":180,"mutability":"mutable","name":"success","nameLocation":"7301:7:4","nodeType":"VariableDeclaration","scope":185,"src":"7296:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":179,"name":"bool","nodeType":"ElementaryTypeName","src":"7296:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":183,"mutability":"mutable","name":"hookAdjustedAmountsInRaw","nameLocation":"7327:24:4","nodeType":"VariableDeclaration","scope":185,"src":"7310:41:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":181,"name":"uint256","nodeType":"ElementaryTypeName","src":"7310:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":182,"nodeType":"ArrayTypeName","src":"7310:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7295:57:4"},"scope":275,"src":"6979:374:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":186,"nodeType":"StructuredDocumentation","src":"7572:992:4","text":" @notice Hook to be executed before removing liquidity.\n @dev Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The type of remove liquidity operation (e.g., proportional, custom)\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"ba5f9f40","id":208,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeRemoveLiquidity","nameLocation":"8578:23:4","nodeType":"FunctionDefinition","parameters":{"id":204,"nodeType":"ParameterList","parameters":[{"constant":false,"id":188,"mutability":"mutable","name":"router","nameLocation":"8619:6:4","nodeType":"VariableDeclaration","scope":208,"src":"8611:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":187,"name":"address","nodeType":"ElementaryTypeName","src":"8611:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":190,"mutability":"mutable","name":"pool","nameLocation":"8643:4:4","nodeType":"VariableDeclaration","scope":208,"src":"8635:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":189,"name":"address","nodeType":"ElementaryTypeName","src":"8635:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":193,"mutability":"mutable","name":"kind","nameLocation":"8677:4:4","nodeType":"VariableDeclaration","scope":208,"src":"8657:24:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2368","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":192,"nodeType":"UserDefinedTypeName","pathNode":{"id":191,"name":"RemoveLiquidityKind","nameLocations":["8657:19:4"],"nodeType":"IdentifierPath","referencedDeclaration":2368,"src":"8657:19:4"},"referencedDeclaration":2368,"src":"8657:19:4","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2368","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":195,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"8699:14:4","nodeType":"VariableDeclaration","scope":208,"src":"8691:22:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":194,"name":"uint256","nodeType":"ElementaryTypeName","src":"8691:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":198,"mutability":"mutable","name":"minAmountsOutScaled18","nameLocation":"8740:21:4","nodeType":"VariableDeclaration","scope":208,"src":"8723:38:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":196,"name":"uint256","nodeType":"ElementaryTypeName","src":"8723:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":197,"nodeType":"ArrayTypeName","src":"8723:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":201,"mutability":"mutable","name":"balancesScaled18","nameLocation":"8788:16:4","nodeType":"VariableDeclaration","scope":208,"src":"8771:33:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":199,"name":"uint256","nodeType":"ElementaryTypeName","src":"8771:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":200,"nodeType":"ArrayTypeName","src":"8771:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":203,"mutability":"mutable","name":"userData","nameLocation":"8827:8:4","nodeType":"VariableDeclaration","scope":208,"src":"8814:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":202,"name":"bytes","nodeType":"ElementaryTypeName","src":"8814:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8601:240:4"},"returnParameters":{"id":207,"nodeType":"ParameterList","parameters":[{"constant":false,"id":206,"mutability":"mutable","name":"success","nameLocation":"8865:7:4","nodeType":"VariableDeclaration","scope":208,"src":"8860:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":205,"name":"bool","nodeType":"ElementaryTypeName","src":"8860:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8859:14:4"},"scope":275,"src":"8569:305:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":209,"nodeType":"StructuredDocumentation","src":"8880:1276:4","text":" @notice Hook to be executed after removing liquidity.\n @dev Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The type of remove liquidity operation (e.g., proportional, custom)\n @param bptAmountIn Amount of pool tokens to burn\n @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Additional (optional) data provided by the user\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook"},"functionSelector":"2754888d","id":237,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterRemoveLiquidity","nameLocation":"10170:22:4","nodeType":"FunctionDefinition","parameters":{"id":230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":211,"mutability":"mutable","name":"router","nameLocation":"10210:6:4","nodeType":"VariableDeclaration","scope":237,"src":"10202:14:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":210,"name":"address","nodeType":"ElementaryTypeName","src":"10202:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":213,"mutability":"mutable","name":"pool","nameLocation":"10234:4:4","nodeType":"VariableDeclaration","scope":237,"src":"10226:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":212,"name":"address","nodeType":"ElementaryTypeName","src":"10226:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":216,"mutability":"mutable","name":"kind","nameLocation":"10268:4:4","nodeType":"VariableDeclaration","scope":237,"src":"10248:24:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2368","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":215,"nodeType":"UserDefinedTypeName","pathNode":{"id":214,"name":"RemoveLiquidityKind","nameLocations":["10248:19:4"],"nodeType":"IdentifierPath","referencedDeclaration":2368,"src":"10248:19:4"},"referencedDeclaration":2368,"src":"10248:19:4","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2368","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":218,"mutability":"mutable","name":"bptAmountIn","nameLocation":"10290:11:4","nodeType":"VariableDeclaration","scope":237,"src":"10282:19:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":217,"name":"uint256","nodeType":"ElementaryTypeName","src":"10282:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":221,"mutability":"mutable","name":"amountsOutScaled18","nameLocation":"10328:18:4","nodeType":"VariableDeclaration","scope":237,"src":"10311:35:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":219,"name":"uint256","nodeType":"ElementaryTypeName","src":"10311:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":220,"nodeType":"ArrayTypeName","src":"10311:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":224,"mutability":"mutable","name":"amountsOutRaw","nameLocation":"10373:13:4","nodeType":"VariableDeclaration","scope":237,"src":"10356:30:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":222,"name":"uint256","nodeType":"ElementaryTypeName","src":"10356:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":223,"nodeType":"ArrayTypeName","src":"10356:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":227,"mutability":"mutable","name":"balancesScaled18","nameLocation":"10413:16:4","nodeType":"VariableDeclaration","scope":237,"src":"10396:33:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":225,"name":"uint256","nodeType":"ElementaryTypeName","src":"10396:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":226,"nodeType":"ArrayTypeName","src":"10396:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":229,"mutability":"mutable","name":"userData","nameLocation":"10452:8:4","nodeType":"VariableDeclaration","scope":237,"src":"10439:21:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":228,"name":"bytes","nodeType":"ElementaryTypeName","src":"10439:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10192:274:4"},"returnParameters":{"id":236,"nodeType":"ParameterList","parameters":[{"constant":false,"id":232,"mutability":"mutable","name":"success","nameLocation":"10490:7:4","nodeType":"VariableDeclaration","scope":237,"src":"10485:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":231,"name":"bool","nodeType":"ElementaryTypeName","src":"10485:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":235,"mutability":"mutable","name":"hookAdjustedAmountsOutRaw","nameLocation":"10516:25:4","nodeType":"VariableDeclaration","scope":237,"src":"10499:42:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":233,"name":"uint256","nodeType":"ElementaryTypeName","src":"10499:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":234,"nodeType":"ArrayTypeName","src":"10499:9:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10484:58:4"},"scope":275,"src":"10161:382:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":238,"nodeType":"StructuredDocumentation","src":"10753:556:4","text":" @notice Called before a swap to give the Pool an opportunity to perform actions.\n @dev Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see PoolSwapParams for struct definition)\n @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"5211fa77","id":248,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeSwap","nameLocation":"11323:12:4","nodeType":"FunctionDefinition","parameters":{"id":244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":241,"mutability":"mutable","name":"params","nameLocation":"11360:6:4","nodeType":"VariableDeclaration","scope":248,"src":"11336:30:4","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2312_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":240,"nodeType":"UserDefinedTypeName","pathNode":{"id":239,"name":"PoolSwapParams","nameLocations":["11336:14:4"],"nodeType":"IdentifierPath","referencedDeclaration":2312,"src":"11336:14:4"},"referencedDeclaration":2312,"src":"11336:14:4","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2312_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":243,"mutability":"mutable","name":"pool","nameLocation":"11376:4:4","nodeType":"VariableDeclaration","scope":248,"src":"11368:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":242,"name":"address","nodeType":"ElementaryTypeName","src":"11368:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11335:46:4"},"returnParameters":{"id":247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":246,"mutability":"mutable","name":"success","nameLocation":"11405:7:4","nodeType":"VariableDeclaration","scope":248,"src":"11400:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":245,"name":"bool","nodeType":"ElementaryTypeName","src":"11400:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11399:14:4"},"scope":275,"src":"11314:100:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":249,"nodeType":"StructuredDocumentation","src":"11420:671:4","text":" @notice Called after a swap to perform further actions once the balances have been updated by the swap.\n @dev Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should\n use the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see above for struct definition)\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook"},"functionSelector":"18b6eb55","id":259,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterSwap","nameLocation":"12105:11:4","nodeType":"FunctionDefinition","parameters":{"id":253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":252,"mutability":"mutable","name":"params","nameLocation":"12151:6:4","nodeType":"VariableDeclaration","scope":259,"src":"12126:31:4","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$2341_calldata_ptr","typeString":"struct AfterSwapParams"},"typeName":{"id":251,"nodeType":"UserDefinedTypeName","pathNode":{"id":250,"name":"AfterSwapParams","nameLocations":["12126:15:4"],"nodeType":"IdentifierPath","referencedDeclaration":2341,"src":"12126:15:4"},"referencedDeclaration":2341,"src":"12126:15:4","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$2341_storage_ptr","typeString":"struct AfterSwapParams"}},"visibility":"internal"}],"src":"12116:47:4"},"returnParameters":{"id":258,"nodeType":"ParameterList","parameters":[{"constant":false,"id":255,"mutability":"mutable","name":"success","nameLocation":"12187:7:4","nodeType":"VariableDeclaration","scope":259,"src":"12182:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":254,"name":"bool","nodeType":"ElementaryTypeName","src":"12182:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":257,"mutability":"mutable","name":"hookAdjustedAmountCalculatedRaw","nameLocation":"12204:31:4","nodeType":"VariableDeclaration","scope":259,"src":"12196:39:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":256,"name":"uint256","nodeType":"ElementaryTypeName","src":"12196:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12181:55:4"},"scope":275,"src":"12096:141:4","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":260,"nodeType":"StructuredDocumentation","src":"12243:795:4","text":" @notice Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\n @dev Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see PoolSwapParams for struct definition)\n @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage, for reference\n @return success True if the pool wishes to proceed with settlement\n @return dynamicSwapFeePercentage Value of the swap fee percentage, as an 18-decimal FP value"},"functionSelector":"a0e8f5ac","id":274,"implemented":false,"kind":"function","modifiers":[],"name":"onComputeDynamicSwapFeePercentage","nameLocation":"13052:33:4","nodeType":"FunctionDefinition","parameters":{"id":268,"nodeType":"ParameterList","parameters":[{"constant":false,"id":263,"mutability":"mutable","name":"params","nameLocation":"13119:6:4","nodeType":"VariableDeclaration","scope":274,"src":"13095:30:4","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2312_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":262,"nodeType":"UserDefinedTypeName","pathNode":{"id":261,"name":"PoolSwapParams","nameLocations":["13095:14:4"],"nodeType":"IdentifierPath","referencedDeclaration":2312,"src":"13095:14:4"},"referencedDeclaration":2312,"src":"13095:14:4","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2312_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":265,"mutability":"mutable","name":"pool","nameLocation":"13143:4:4","nodeType":"VariableDeclaration","scope":274,"src":"13135:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":264,"name":"address","nodeType":"ElementaryTypeName","src":"13135:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":267,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"13165:23:4","nodeType":"VariableDeclaration","scope":274,"src":"13157:31:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":266,"name":"uint256","nodeType":"ElementaryTypeName","src":"13157:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13085:109:4"},"returnParameters":{"id":273,"nodeType":"ParameterList","parameters":[{"constant":false,"id":270,"mutability":"mutable","name":"success","nameLocation":"13223:7:4","nodeType":"VariableDeclaration","scope":274,"src":"13218:12:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":269,"name":"bool","nodeType":"ElementaryTypeName","src":"13218:4:4","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":272,"mutability":"mutable","name":"dynamicSwapFeePercentage","nameLocation":"13240:24:4","nodeType":"VariableDeclaration","scope":274,"src":"13232:32:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":271,"name":"uint256","nodeType":"ElementaryTypeName","src":"13232:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13217:48:4"},"scope":275,"src":"13043:223:4","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":276,"src":"975:12293:4","usedErrors":[],"usedEvents":[]}],"src":"46:13223:4"},"id":4},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","exportedSymbols":{"IERC20":[6591],"IProtocolFeeController":[613],"IVault":[651]},"id":614,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":277,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:5"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":279,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":614,"sourceUnit":6592,"src":"72:72:5","symbolAliases":[{"foreign":{"id":278,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6591,"src":"81:6:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":281,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":614,"sourceUnit":652,"src":"146:38:5","symbolAliases":[{"foreign":{"id":280,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":651,"src":"155:6:5","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolFeeController","contractDependencies":[],"contractKind":"interface","documentation":{"id":282,"nodeType":"StructuredDocumentation","src":"186:80:5","text":"@notice Contract that handles protocol and pool creator fees for the Vault."},"fullyImplemented":false,"id":613,"linearizedBaseContracts":[613],"name":"IProtocolFeeController","nameLocation":"276:22:5","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":283,"nodeType":"StructuredDocumentation","src":"305:157:5","text":" @notice Emitted when the protocol swap fee percentage is updated.\n @param swapFeePercentage The updated protocol swap fee percentage"},"eventSelector":"bf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d","id":287,"name":"GlobalProtocolSwapFeePercentageChanged","nameLocation":"473:38:5","nodeType":"EventDefinition","parameters":{"id":286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":285,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"520:17:5","nodeType":"VariableDeclaration","scope":287,"src":"512:25:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":284,"name":"uint256","nodeType":"ElementaryTypeName","src":"512:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"511:27:5"},"src":"467:72:5"},{"anonymous":false,"documentation":{"id":288,"nodeType":"StructuredDocumentation","src":"545:160:5","text":" @notice Emitted when the protocol yield fee percentage is updated.\n @param yieldFeePercentage The updated protocol yield fee percentage"},"eventSelector":"48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f6","id":292,"name":"GlobalProtocolYieldFeePercentageChanged","nameLocation":"716:39:5","nodeType":"EventDefinition","parameters":{"id":291,"nodeType":"ParameterList","parameters":[{"constant":false,"id":290,"indexed":false,"mutability":"mutable","name":"yieldFeePercentage","nameLocation":"764:18:5","nodeType":"VariableDeclaration","scope":292,"src":"756:26:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":289,"name":"uint256","nodeType":"ElementaryTypeName","src":"756:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"755:28:5"},"src":"710:74:5"},{"anonymous":false,"documentation":{"id":293,"nodeType":"StructuredDocumentation","src":"790:245:5","text":" @notice Emitted when the protocol swap fee percentage is updated for a specific pool.\n @param pool The pool whose protocol swap fee will be changed\n @param swapFeePercentage The updated protocol swap fee percentage"},"eventSelector":"97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e","id":299,"name":"ProtocolSwapFeePercentageChanged","nameLocation":"1046:32:5","nodeType":"EventDefinition","parameters":{"id":298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":295,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1095:4:5","nodeType":"VariableDeclaration","scope":299,"src":"1079:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":294,"name":"address","nodeType":"ElementaryTypeName","src":"1079:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":297,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1109:17:5","nodeType":"VariableDeclaration","scope":299,"src":"1101:25:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":296,"name":"uint256","nodeType":"ElementaryTypeName","src":"1101:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1078:49:5"},"src":"1040:88:5"},{"anonymous":false,"documentation":{"id":300,"nodeType":"StructuredDocumentation","src":"1134:249:5","text":" @notice Emitted when the protocol yield fee percentage is updated for a specific pool.\n @param pool The pool whose protocol yield fee will be changed\n @param yieldFeePercentage The updated protocol yield fee percentage"},"eventSelector":"af47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd","id":306,"name":"ProtocolYieldFeePercentageChanged","nameLocation":"1394:33:5","nodeType":"EventDefinition","parameters":{"id":305,"nodeType":"ParameterList","parameters":[{"constant":false,"id":302,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1444:4:5","nodeType":"VariableDeclaration","scope":306,"src":"1428:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":301,"name":"address","nodeType":"ElementaryTypeName","src":"1428:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":304,"indexed":false,"mutability":"mutable","name":"yieldFeePercentage","nameLocation":"1458:18:5","nodeType":"VariableDeclaration","scope":306,"src":"1450:26:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":303,"name":"uint256","nodeType":"ElementaryTypeName","src":"1450:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1427:50:5"},"src":"1388:90:5"},{"anonymous":false,"documentation":{"id":307,"nodeType":"StructuredDocumentation","src":"1484:267:5","text":" @notice Emitted when the pool creator swap fee percentage of a pool is updated.\n @param pool The pool whose pool creator swap fee will be changed\n @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage for the pool"},"eventSelector":"b7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c","id":313,"name":"PoolCreatorSwapFeePercentageChanged","nameLocation":"1762:35:5","nodeType":"EventDefinition","parameters":{"id":312,"nodeType":"ParameterList","parameters":[{"constant":false,"id":309,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1814:4:5","nodeType":"VariableDeclaration","scope":313,"src":"1798:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":308,"name":"address","nodeType":"ElementaryTypeName","src":"1798:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":311,"indexed":false,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"1828:28:5","nodeType":"VariableDeclaration","scope":313,"src":"1820:36:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":310,"name":"uint256","nodeType":"ElementaryTypeName","src":"1820:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1797:60:5"},"src":"1756:102:5"},{"anonymous":false,"documentation":{"id":314,"nodeType":"StructuredDocumentation","src":"1864:271:5","text":" @notice Emitted when the pool creator yield fee percentage of a pool is updated.\n @param pool The pool whose pool creator yield fee will be changed\n @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage for the pool"},"eventSelector":"47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34","id":320,"name":"PoolCreatorYieldFeePercentageChanged","nameLocation":"2146:36:5","nodeType":"EventDefinition","parameters":{"id":319,"nodeType":"ParameterList","parameters":[{"constant":false,"id":316,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2199:4:5","nodeType":"VariableDeclaration","scope":320,"src":"2183:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":315,"name":"address","nodeType":"ElementaryTypeName","src":"2183:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":318,"indexed":false,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"2213:29:5","nodeType":"VariableDeclaration","scope":320,"src":"2205:37:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":317,"name":"uint256","nodeType":"ElementaryTypeName","src":"2205:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2182:61:5"},"src":"2140:104:5"},{"anonymous":false,"documentation":{"id":321,"nodeType":"StructuredDocumentation","src":"2250:560:5","text":" @notice Logs the collection of protocol swap fees in a specific token and amount.\n @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass\n multiple operations.\n @param pool The pool on which the swap fee was charged\n @param token The token in which the swap fee was charged\n @param amount The amount of the token collected in fees"},"eventSelector":"ae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f","id":330,"name":"ProtocolSwapFeeCollected","nameLocation":"2821:24:5","nodeType":"EventDefinition","parameters":{"id":329,"nodeType":"ParameterList","parameters":[{"constant":false,"id":323,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2862:4:5","nodeType":"VariableDeclaration","scope":330,"src":"2846:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":322,"name":"address","nodeType":"ElementaryTypeName","src":"2846:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":326,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"2883:5:5","nodeType":"VariableDeclaration","scope":330,"src":"2868:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":325,"nodeType":"UserDefinedTypeName","pathNode":{"id":324,"name":"IERC20","nameLocations":["2868:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"2868:6:5"},"referencedDeclaration":6591,"src":"2868:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":328,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2898:6:5","nodeType":"VariableDeclaration","scope":330,"src":"2890:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":327,"name":"uint256","nodeType":"ElementaryTypeName","src":"2890:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2845:60:5"},"src":"2815:91:5"},{"anonymous":false,"documentation":{"id":331,"nodeType":"StructuredDocumentation","src":"2912:564:5","text":" @notice Logs the collection of protocol yield fees in a specific token and amount.\n @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass\n multiple operations.\n @param pool The pool on which the yield fee was charged\n @param token The token in which the yield fee was charged\n @param amount The amount of the token collected in fees"},"eventSelector":"e505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e2","id":340,"name":"ProtocolYieldFeeCollected","nameLocation":"3487:25:5","nodeType":"EventDefinition","parameters":{"id":339,"nodeType":"ParameterList","parameters":[{"constant":false,"id":333,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"3529:4:5","nodeType":"VariableDeclaration","scope":340,"src":"3513:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":332,"name":"address","nodeType":"ElementaryTypeName","src":"3513:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":336,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"3550:5:5","nodeType":"VariableDeclaration","scope":340,"src":"3535:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":335,"nodeType":"UserDefinedTypeName","pathNode":{"id":334,"name":"IERC20","nameLocations":["3535:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"3535:6:5"},"referencedDeclaration":6591,"src":"3535:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":338,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"3565:6:5","nodeType":"VariableDeclaration","scope":340,"src":"3557:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":337,"name":"uint256","nodeType":"ElementaryTypeName","src":"3557:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3512:60:5"},"src":"3481:92:5"},{"anonymous":false,"documentation":{"id":341,"nodeType":"StructuredDocumentation","src":"3579:333:5","text":" @notice Logs the withdrawal of protocol fees in a specific token and amount.\n @param pool The pool from which protocol fees are being withdrawn\n @param token The token being withdrawn\n @param recipient The recipient of the funds\n @param amount The amount of the fee token that was withdrawn"},"eventSelector":"1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b5","id":352,"name":"ProtocolFeesWithdrawn","nameLocation":"3923:21:5","nodeType":"EventDefinition","parameters":{"id":351,"nodeType":"ParameterList","parameters":[{"constant":false,"id":343,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"3961:4:5","nodeType":"VariableDeclaration","scope":352,"src":"3945:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":342,"name":"address","nodeType":"ElementaryTypeName","src":"3945:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":346,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"3982:5:5","nodeType":"VariableDeclaration","scope":352,"src":"3967:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":345,"nodeType":"UserDefinedTypeName","pathNode":{"id":344,"name":"IERC20","nameLocations":["3967:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"3967:6:5"},"referencedDeclaration":6591,"src":"3967:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":348,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"4005:9:5","nodeType":"VariableDeclaration","scope":352,"src":"3989:25:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":347,"name":"address","nodeType":"ElementaryTypeName","src":"3989:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":350,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"4024:6:5","nodeType":"VariableDeclaration","scope":352,"src":"4016:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":349,"name":"uint256","nodeType":"ElementaryTypeName","src":"4016:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3944:87:5"},"src":"3917:115:5"},{"anonymous":false,"documentation":{"id":353,"nodeType":"StructuredDocumentation","src":"4038:398:5","text":" @notice Logs the withdrawal of pool creator fees in a specific token and amount.\n @param pool The pool from which pool creator fees are being withdrawn\n @param token The token being withdrawn\n @param recipient The recipient of the funds (the pool creator if permissionless, or another account)\n @param amount The amount of the fee token that was withdrawn"},"eventSelector":"938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f9","id":364,"name":"PoolCreatorFeesWithdrawn","nameLocation":"4447:24:5","nodeType":"EventDefinition","parameters":{"id":363,"nodeType":"ParameterList","parameters":[{"constant":false,"id":355,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4497:4:5","nodeType":"VariableDeclaration","scope":364,"src":"4481:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":354,"name":"address","nodeType":"ElementaryTypeName","src":"4481:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":358,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"4526:5:5","nodeType":"VariableDeclaration","scope":364,"src":"4511:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":357,"nodeType":"UserDefinedTypeName","pathNode":{"id":356,"name":"IERC20","nameLocations":["4511:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"4511:6:5"},"referencedDeclaration":6591,"src":"4511:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":360,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"4557:9:5","nodeType":"VariableDeclaration","scope":364,"src":"4541:25:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":359,"name":"address","nodeType":"ElementaryTypeName","src":"4541:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":362,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"4584:6:5","nodeType":"VariableDeclaration","scope":364,"src":"4576:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":361,"name":"uint256","nodeType":"ElementaryTypeName","src":"4576:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4471:125:5"},"src":"4441:156:5"},{"anonymous":false,"documentation":{"id":365,"nodeType":"StructuredDocumentation","src":"4603:529:5","text":" @notice Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\n @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n equal the current global swap fee percentage.\n @param pool The pool being registered\n @param aggregateSwapFeePercentage The initial aggregate swap fee percentage\n @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially"},"eventSelector":"a34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a78564","id":373,"name":"InitialPoolAggregateSwapFeePercentage","nameLocation":"5143:37:5","nodeType":"EventDefinition","parameters":{"id":372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":367,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5206:4:5","nodeType":"VariableDeclaration","scope":373,"src":"5190:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":366,"name":"address","nodeType":"ElementaryTypeName","src":"5190:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":369,"indexed":false,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"5228:26:5","nodeType":"VariableDeclaration","scope":373,"src":"5220:34:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":368,"name":"uint256","nodeType":"ElementaryTypeName","src":"5220:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":371,"indexed":false,"mutability":"mutable","name":"isProtocolFeeExempt","nameLocation":"5269:19:5","nodeType":"VariableDeclaration","scope":373,"src":"5264:24:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":370,"name":"bool","nodeType":"ElementaryTypeName","src":"5264:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5180:114:5"},"src":"5137:158:5"},{"anonymous":false,"documentation":{"id":374,"nodeType":"StructuredDocumentation","src":"5301:533:5","text":" @notice Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\n @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n equal the current global yield fee percentage.\n @param pool The pool being registered\n @param aggregateYieldFeePercentage The initial aggregate yield fee percentage\n @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially"},"eventSelector":"ce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb","id":382,"name":"InitialPoolAggregateYieldFeePercentage","nameLocation":"5845:38:5","nodeType":"EventDefinition","parameters":{"id":381,"nodeType":"ParameterList","parameters":[{"constant":false,"id":376,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5909:4:5","nodeType":"VariableDeclaration","scope":382,"src":"5893:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":375,"name":"address","nodeType":"ElementaryTypeName","src":"5893:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":378,"indexed":false,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"5931:27:5","nodeType":"VariableDeclaration","scope":382,"src":"5923:35:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":377,"name":"uint256","nodeType":"ElementaryTypeName","src":"5923:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":380,"indexed":false,"mutability":"mutable","name":"isProtocolFeeExempt","nameLocation":"5973:19:5","nodeType":"VariableDeclaration","scope":382,"src":"5968:24:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":379,"name":"bool","nodeType":"ElementaryTypeName","src":"5968:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5883:115:5"},"src":"5839:160:5"},{"anonymous":false,"documentation":{"id":383,"nodeType":"StructuredDocumentation","src":"6005:738:5","text":" @notice Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\n @dev The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this\n simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee\n counterpart also include the protocol fee exemption flag, we might as well include it here as well.\n @param pool The address of the pool being registered\n @param poolCreator The address of the pool creator (non-zero, or the event would not be emitted)\n @param protocolFeeExempt True if the pool is initially exempt from protocol fees"},"eventSelector":"d9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed07912","id":391,"name":"PoolRegisteredWithFeeController","nameLocation":"6754:31:5","nodeType":"EventDefinition","parameters":{"id":390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":385,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6802:4:5","nodeType":"VariableDeclaration","scope":391,"src":"6786:20:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":384,"name":"address","nodeType":"ElementaryTypeName","src":"6786:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":387,"indexed":true,"mutability":"mutable","name":"poolCreator","nameLocation":"6824:11:5","nodeType":"VariableDeclaration","scope":391,"src":"6808:27:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":386,"name":"address","nodeType":"ElementaryTypeName","src":"6808:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":389,"indexed":false,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"6842:17:5","nodeType":"VariableDeclaration","scope":391,"src":"6837:22:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":388,"name":"bool","nodeType":"ElementaryTypeName","src":"6837:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6785:75:5"},"src":"6748:113:5"},{"documentation":{"id":392,"nodeType":"StructuredDocumentation","src":"6867:219:5","text":" @notice Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\n @dev Note that this is checked for both the global and pool-specific protocol swap fee percentages."},"errorSelector":"7e6eb7fb","id":394,"name":"ProtocolSwapFeePercentageTooHigh","nameLocation":"7097:32:5","nodeType":"ErrorDefinition","parameters":{"id":393,"nodeType":"ParameterList","parameters":[],"src":"7129:2:5"},"src":"7091:41:5"},{"documentation":{"id":395,"nodeType":"StructuredDocumentation","src":"7138:221:5","text":" @notice Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\n @dev Note that this is checked for both the global and pool-specific protocol yield fee percentages."},"errorSelector":"a7849e8e","id":397,"name":"ProtocolYieldFeePercentageTooHigh","nameLocation":"7370:33:5","nodeType":"ErrorDefinition","parameters":{"id":396,"nodeType":"ParameterList","parameters":[],"src":"7403:2:5"},"src":"7364:42:5"},{"documentation":{"id":398,"nodeType":"StructuredDocumentation","src":"7412:156:5","text":" @notice Error raised if there is no pool creator on a withdrawal attempt from the given pool.\n @param pool The pool with no creator"},"errorSelector":"8bcbf353","id":402,"name":"PoolCreatorNotRegistered","nameLocation":"7579:24:5","nodeType":"ErrorDefinition","parameters":{"id":401,"nodeType":"ParameterList","parameters":[{"constant":false,"id":400,"mutability":"mutable","name":"pool","nameLocation":"7612:4:5","nodeType":"VariableDeclaration","scope":402,"src":"7604:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":399,"name":"address","nodeType":"ElementaryTypeName","src":"7604:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7603:14:5"},"src":"7573:45:5"},{"documentation":{"id":403,"nodeType":"StructuredDocumentation","src":"7624:236:5","text":" @notice Error raised if the wrong account attempts to withdraw pool creator fees.\n @param caller The account attempting to withdraw pool creator fees\n @param pool The pool the caller tried to withdraw from"},"errorSelector":"fbecdbf4","id":409,"name":"CallerIsNotPoolCreator","nameLocation":"7871:22:5","nodeType":"ErrorDefinition","parameters":{"id":408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":405,"mutability":"mutable","name":"caller","nameLocation":"7902:6:5","nodeType":"VariableDeclaration","scope":409,"src":"7894:14:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":404,"name":"address","nodeType":"ElementaryTypeName","src":"7894:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":407,"mutability":"mutable","name":"pool","nameLocation":"7918:4:5","nodeType":"VariableDeclaration","scope":409,"src":"7910:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":406,"name":"address","nodeType":"ElementaryTypeName","src":"7910:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7893:30:5"},"src":"7865:59:5"},{"documentation":{"id":410,"nodeType":"StructuredDocumentation","src":"7930:110:5","text":"@notice Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value."},"errorSelector":"0370da74","id":412,"name":"PoolCreatorFeePercentageTooHigh","nameLocation":"8051:31:5","nodeType":"ErrorDefinition","parameters":{"id":411,"nodeType":"ParameterList","parameters":[],"src":"8082:2:5"},"src":"8045:40:5"},{"documentation":{"id":413,"nodeType":"StructuredDocumentation","src":"8091:109:5","text":" @notice Get the address of the main Vault contract.\n @return vault The Vault address"},"functionSelector":"fbfa77cf","id":419,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"8214:5:5","nodeType":"FunctionDefinition","parameters":{"id":414,"nodeType":"ParameterList","parameters":[],"src":"8219:2:5"},"returnParameters":{"id":418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":417,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":419,"src":"8245:6:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":416,"nodeType":"UserDefinedTypeName","pathNode":{"id":415,"name":"IVault","nameLocations":["8245:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"8245:6:5"},"referencedDeclaration":651,"src":"8245:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"}],"src":"8244:8:5"},"scope":613,"src":"8205:48:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":420,"nodeType":"StructuredDocumentation","src":"8259:131:5","text":" @notice Collects aggregate fees from the Vault for a given pool.\n @param pool The pool with aggregate fees"},"functionSelector":"8f4ab9ca","id":425,"implemented":false,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"8404:20:5","nodeType":"FunctionDefinition","parameters":{"id":423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":422,"mutability":"mutable","name":"pool","nameLocation":"8433:4:5","nodeType":"VariableDeclaration","scope":425,"src":"8425:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":421,"name":"address","nodeType":"ElementaryTypeName","src":"8425:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8424:14:5"},"returnParameters":{"id":424,"nodeType":"ParameterList","parameters":[],"src":"8447:0:5"},"scope":613,"src":"8395:53:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":426,"nodeType":"StructuredDocumentation","src":"8454:156:5","text":" @notice Getter for the current global protocol swap fee.\n @return protocolSwapFeePercentage The global protocol swap fee percentage"},"functionSelector":"7869ee18","id":431,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalProtocolSwapFeePercentage","nameLocation":"8624:34:5","nodeType":"FunctionDefinition","parameters":{"id":427,"nodeType":"ParameterList","parameters":[],"src":"8658:2:5"},"returnParameters":{"id":430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":429,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"8692:25:5","nodeType":"VariableDeclaration","scope":431,"src":"8684:33:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":428,"name":"uint256","nodeType":"ElementaryTypeName","src":"8684:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8683:35:5"},"scope":613,"src":"8615:104:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":432,"nodeType":"StructuredDocumentation","src":"8725:159:5","text":" @notice Getter for the current global protocol yield fee.\n @return protocolYieldFeePercentage The global protocol yield fee percentage"},"functionSelector":"55fb76af","id":437,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalProtocolYieldFeePercentage","nameLocation":"8898:35:5","nodeType":"FunctionDefinition","parameters":{"id":433,"nodeType":"ParameterList","parameters":[],"src":"8933:2:5"},"returnParameters":{"id":436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":435,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"8967:26:5","nodeType":"VariableDeclaration","scope":437,"src":"8959:34:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":434,"name":"uint256","nodeType":"ElementaryTypeName","src":"8959:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8958:36:5"},"scope":613,"src":"8889:106:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":438,"nodeType":"StructuredDocumentation","src":"9001:207:5","text":" @notice Getter for pool registration flag.\n @param pool The address of the pool\n @return isRegistered True if the pool configuration has been set (e.g., through `registerPool`)"},"functionSelector":"c673bdaf","id":445,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"9222:16:5","nodeType":"FunctionDefinition","parameters":{"id":441,"nodeType":"ParameterList","parameters":[{"constant":false,"id":440,"mutability":"mutable","name":"pool","nameLocation":"9247:4:5","nodeType":"VariableDeclaration","scope":445,"src":"9239:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":439,"name":"address","nodeType":"ElementaryTypeName","src":"9239:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9238:14:5"},"returnParameters":{"id":444,"nodeType":"ParameterList","parameters":[{"constant":false,"id":443,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":445,"src":"9276:4:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":442,"name":"bool","nodeType":"ElementaryTypeName","src":"9276:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9275:6:5"},"scope":613,"src":"9213:69:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":446,"nodeType":"StructuredDocumentation","src":"9288:292:5","text":" @notice Getter for the current protocol swap fee for a given pool.\n @param pool The address of the pool\n @return protocolSwapFeePercentage The protocol swap fee percentage for the given pool\n @return isOverride True if the protocol fee has been overridden"},"functionSelector":"5c15a0b4","id":455,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolProtocolSwapFeeInfo","nameLocation":"9594:26:5","nodeType":"FunctionDefinition","parameters":{"id":449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":448,"mutability":"mutable","name":"pool","nameLocation":"9638:4:5","nodeType":"VariableDeclaration","scope":455,"src":"9630:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":447,"name":"address","nodeType":"ElementaryTypeName","src":"9630:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9620:28:5"},"returnParameters":{"id":454,"nodeType":"ParameterList","parameters":[{"constant":false,"id":451,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"9680:25:5","nodeType":"VariableDeclaration","scope":455,"src":"9672:33:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":450,"name":"uint256","nodeType":"ElementaryTypeName","src":"9672:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":453,"mutability":"mutable","name":"isOverride","nameLocation":"9712:10:5","nodeType":"VariableDeclaration","scope":455,"src":"9707:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":452,"name":"bool","nodeType":"ElementaryTypeName","src":"9707:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9671:52:5"},"scope":613,"src":"9585:139:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":456,"nodeType":"StructuredDocumentation","src":"9730:295:5","text":" @notice Getter for the current protocol yield fee for a given pool.\n @param pool The address of the pool\n @return protocolYieldFeePercentage The protocol yield fee percentage for the given pool\n @return isOverride True if the protocol fee has been overridden"},"functionSelector":"7a2b97dc","id":465,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolProtocolYieldFeeInfo","nameLocation":"10039:27:5","nodeType":"FunctionDefinition","parameters":{"id":459,"nodeType":"ParameterList","parameters":[{"constant":false,"id":458,"mutability":"mutable","name":"pool","nameLocation":"10084:4:5","nodeType":"VariableDeclaration","scope":465,"src":"10076:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":457,"name":"address","nodeType":"ElementaryTypeName","src":"10076:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10066:28:5"},"returnParameters":{"id":464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":461,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"10126:26:5","nodeType":"VariableDeclaration","scope":465,"src":"10118:34:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":460,"name":"uint256","nodeType":"ElementaryTypeName","src":"10118:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":463,"mutability":"mutable","name":"isOverride","nameLocation":"10159:10:5","nodeType":"VariableDeclaration","scope":465,"src":"10154:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":462,"name":"bool","nodeType":"ElementaryTypeName","src":"10154:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10117:53:5"},"scope":613,"src":"10030:141:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":466,"nodeType":"StructuredDocumentation","src":"10177:249:5","text":" @notice Getter for the current pool creator swap fee percentage for a given pool.\n @param pool The address of the pool\n @return poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee"},"functionSelector":"0b8e059b","id":473,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorSwapFeePercentage","nameLocation":"10440:31:5","nodeType":"FunctionDefinition","parameters":{"id":469,"nodeType":"ParameterList","parameters":[{"constant":false,"id":468,"mutability":"mutable","name":"pool","nameLocation":"10480:4:5","nodeType":"VariableDeclaration","scope":473,"src":"10472:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":467,"name":"address","nodeType":"ElementaryTypeName","src":"10472:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10471:14:5"},"returnParameters":{"id":472,"nodeType":"ParameterList","parameters":[{"constant":false,"id":471,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":473,"src":"10509:7:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":470,"name":"uint256","nodeType":"ElementaryTypeName","src":"10509:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10508:9:5"},"scope":613,"src":"10431:87:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":474,"nodeType":"StructuredDocumentation","src":"10524:252:5","text":" @notice Getter for the current pool creator yield fee percentage for a given pool.\n @param pool The address of the pool\n @return poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee"},"functionSelector":"0252aab5","id":481,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorYieldFeePercentage","nameLocation":"10790:32:5","nodeType":"FunctionDefinition","parameters":{"id":477,"nodeType":"ParameterList","parameters":[{"constant":false,"id":476,"mutability":"mutable","name":"pool","nameLocation":"10831:4:5","nodeType":"VariableDeclaration","scope":481,"src":"10823:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":475,"name":"address","nodeType":"ElementaryTypeName","src":"10823:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10822:14:5"},"returnParameters":{"id":480,"nodeType":"ParameterList","parameters":[{"constant":false,"id":479,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":481,"src":"10860:7:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":478,"name":"uint256","nodeType":"ElementaryTypeName","src":"10860:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10859:9:5"},"scope":613,"src":"10781:88:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":482,"nodeType":"StructuredDocumentation","src":"10875:344:5","text":" @notice Returns the amount of each pool token allocated to the protocol for withdrawal.\n @dev Includes both swap and yield fees.\n @param pool The address of the pool on which fees were collected\n @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order"},"functionSelector":"8df44c54","id":490,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeAmounts","nameLocation":"11233:21:5","nodeType":"FunctionDefinition","parameters":{"id":485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":484,"mutability":"mutable","name":"pool","nameLocation":"11263:4:5","nodeType":"VariableDeclaration","scope":490,"src":"11255:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":483,"name":"address","nodeType":"ElementaryTypeName","src":"11255:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11254:14:5"},"returnParameters":{"id":489,"nodeType":"ParameterList","parameters":[{"constant":false,"id":488,"mutability":"mutable","name":"feeAmounts","nameLocation":"11309:10:5","nodeType":"VariableDeclaration","scope":490,"src":"11292:27:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":486,"name":"uint256","nodeType":"ElementaryTypeName","src":"11292:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":487,"nodeType":"ArrayTypeName","src":"11292:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11291:29:5"},"scope":613,"src":"11224:97:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":491,"nodeType":"StructuredDocumentation","src":"11327:348:5","text":" @notice Returns the amount of each pool token allocated to the pool creator for withdrawal.\n @dev Includes both swap and yield fees.\n @param pool The address of the pool on which fees were collected\n @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order"},"functionSelector":"9e95f3fd","id":499,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorFeeAmounts","nameLocation":"11689:24:5","nodeType":"FunctionDefinition","parameters":{"id":494,"nodeType":"ParameterList","parameters":[{"constant":false,"id":493,"mutability":"mutable","name":"pool","nameLocation":"11722:4:5","nodeType":"VariableDeclaration","scope":499,"src":"11714:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":492,"name":"address","nodeType":"ElementaryTypeName","src":"11714:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11713:14:5"},"returnParameters":{"id":498,"nodeType":"ParameterList","parameters":[{"constant":false,"id":497,"mutability":"mutable","name":"feeAmounts","nameLocation":"11768:10:5","nodeType":"VariableDeclaration","scope":499,"src":"11751:27:5","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":495,"name":"uint256","nodeType":"ElementaryTypeName","src":"11751:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":496,"nodeType":"ArrayTypeName","src":"11751:9:5","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11750:29:5"},"scope":613,"src":"11680:100:5","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":500,"nodeType":"StructuredDocumentation","src":"11786:1445:5","text":" @notice Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\n @dev Not tied to any particular pool; this just performs the low-level \"additive fee\" calculation. Note that\n pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are\n stored in the Vault with 24-bit precision, this will truncate any values that require greater precision.\n It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee\n components, but the truncation ensures it will not revert for any valid set of fee percentages.\n See example below:\n tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60%\n totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000\n protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400\n creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600\n creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360\n lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\n @param protocolFeePercentage The protocol portion of the aggregate fee percentage\n @param poolCreatorFeePercentage The pool creator portion of the aggregate fee percentage\n @return aggregateFeePercentage The computed aggregate percentage"},"functionSelector":"0ddd60c6","id":509,"implemented":false,"kind":"function","modifiers":[],"name":"computeAggregateFeePercentage","nameLocation":"13245:29:5","nodeType":"FunctionDefinition","parameters":{"id":505,"nodeType":"ParameterList","parameters":[{"constant":false,"id":502,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"13292:21:5","nodeType":"VariableDeclaration","scope":509,"src":"13284:29:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":501,"name":"uint256","nodeType":"ElementaryTypeName","src":"13284:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":504,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"13331:24:5","nodeType":"VariableDeclaration","scope":509,"src":"13323:32:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":503,"name":"uint256","nodeType":"ElementaryTypeName","src":"13323:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13274:87:5"},"returnParameters":{"id":508,"nodeType":"ParameterList","parameters":[{"constant":false,"id":507,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"13393:22:5","nodeType":"VariableDeclaration","scope":509,"src":"13385:30:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":506,"name":"uint256","nodeType":"ElementaryTypeName","src":"13385:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13384:32:5"},"scope":613,"src":"13236:181:5","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":510,"nodeType":"StructuredDocumentation","src":"13423:398:5","text":" @notice Override the protocol swap fee percentage for a specific pool.\n @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n @param pool The pool for which we are setting the protocol swap fee"},"functionSelector":"71ecc8fb","id":515,"implemented":false,"kind":"function","modifiers":[],"name":"updateProtocolSwapFeePercentage","nameLocation":"13835:31:5","nodeType":"FunctionDefinition","parameters":{"id":513,"nodeType":"ParameterList","parameters":[{"constant":false,"id":512,"mutability":"mutable","name":"pool","nameLocation":"13875:4:5","nodeType":"VariableDeclaration","scope":515,"src":"13867:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":511,"name":"address","nodeType":"ElementaryTypeName","src":"13867:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13866:14:5"},"returnParameters":{"id":514,"nodeType":"ParameterList","parameters":[],"src":"13889:0:5"},"scope":613,"src":"13826:64:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":516,"nodeType":"StructuredDocumentation","src":"13896:400:5","text":" @notice Override the protocol yield fee percentage for a specific pool.\n @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n @param pool The pool for which we are setting the protocol yield fee"},"functionSelector":"71447ea8","id":521,"implemented":false,"kind":"function","modifiers":[],"name":"updateProtocolYieldFeePercentage","nameLocation":"14310:32:5","nodeType":"FunctionDefinition","parameters":{"id":519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":518,"mutability":"mutable","name":"pool","nameLocation":"14351:4:5","nodeType":"VariableDeclaration","scope":521,"src":"14343:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":517,"name":"address","nodeType":"ElementaryTypeName","src":"14343:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14342:14:5"},"returnParameters":{"id":520,"nodeType":"ParameterList","parameters":[],"src":"14365:0:5"},"scope":613,"src":"14301:65:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":522,"nodeType":"StructuredDocumentation","src":"14590:826:5","text":" @notice Add pool-specific entries to the protocol swap and yield percentages.\n @dev This must be called from the Vault during pool registration. It will initialize the pool to the global\n protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate\n fee percentages, based on an initial pool creator fee of 0.\n @param pool The address of the pool being registered\n @param poolCreator The address of the pool creator (or 0 if there won't be a pool creator fee)\n @param protocolFeeExempt If true, the pool is initially exempt from protocol fees\n @return aggregateSwapFeePercentage The initial aggregate swap fee percentage\n @return aggregateYieldFeePercentage The initial aggregate yield fee percentage"},"functionSelector":"77ff76e7","id":535,"implemented":false,"kind":"function","modifiers":[],"name":"registerPool","nameLocation":"15430:12:5","nodeType":"FunctionDefinition","parameters":{"id":529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":524,"mutability":"mutable","name":"pool","nameLocation":"15460:4:5","nodeType":"VariableDeclaration","scope":535,"src":"15452:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":523,"name":"address","nodeType":"ElementaryTypeName","src":"15452:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":526,"mutability":"mutable","name":"poolCreator","nameLocation":"15482:11:5","nodeType":"VariableDeclaration","scope":535,"src":"15474:19:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":525,"name":"address","nodeType":"ElementaryTypeName","src":"15474:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":528,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"15508:17:5","nodeType":"VariableDeclaration","scope":535,"src":"15503:22:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":527,"name":"bool","nodeType":"ElementaryTypeName","src":"15503:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15442:89:5"},"returnParameters":{"id":534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":531,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"15558:26:5","nodeType":"VariableDeclaration","scope":535,"src":"15550:34:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":530,"name":"uint256","nodeType":"ElementaryTypeName","src":"15550:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":533,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"15594:27:5","nodeType":"VariableDeclaration","scope":535,"src":"15586:35:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":532,"name":"uint256","nodeType":"ElementaryTypeName","src":"15586:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15549:73:5"},"scope":613,"src":"15421:202:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":536,"nodeType":"StructuredDocumentation","src":"15629:175:5","text":" @notice Set the global protocol swap fee percentage, used by standard pools.\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage"},"functionSelector":"8a3c5c69","id":541,"implemented":false,"kind":"function","modifiers":[],"name":"setGlobalProtocolSwapFeePercentage","nameLocation":"15818:34:5","nodeType":"FunctionDefinition","parameters":{"id":539,"nodeType":"ParameterList","parameters":[{"constant":false,"id":538,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"15861:28:5","nodeType":"VariableDeclaration","scope":541,"src":"15853:36:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":537,"name":"uint256","nodeType":"ElementaryTypeName","src":"15853:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15852:38:5"},"returnParameters":{"id":540,"nodeType":"ParameterList","parameters":[],"src":"15899:0:5"},"scope":613,"src":"15809:91:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":542,"nodeType":"StructuredDocumentation","src":"15906:178:5","text":" @notice Set the global protocol yield fee percentage, used by standard pools.\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage"},"functionSelector":"a93df2a4","id":547,"implemented":false,"kind":"function","modifiers":[],"name":"setGlobalProtocolYieldFeePercentage","nameLocation":"16098:35:5","nodeType":"FunctionDefinition","parameters":{"id":545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":544,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"16142:29:5","nodeType":"VariableDeclaration","scope":547,"src":"16134:37:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":543,"name":"uint256","nodeType":"ElementaryTypeName","src":"16134:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16133:39:5"},"returnParameters":{"id":546,"nodeType":"ParameterList","parameters":[],"src":"16181:0:5"},"scope":613,"src":"16089:93:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":548,"nodeType":"StructuredDocumentation","src":"16188:272:5","text":" @notice Override the protocol swap fee percentage for a specific pool.\n @param pool The address of the pool for which we are setting the protocol swap fee\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage for the pool"},"functionSelector":"fd267f39","id":555,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolSwapFeePercentage","nameLocation":"16474:28:5","nodeType":"FunctionDefinition","parameters":{"id":553,"nodeType":"ParameterList","parameters":[{"constant":false,"id":550,"mutability":"mutable","name":"pool","nameLocation":"16511:4:5","nodeType":"VariableDeclaration","scope":555,"src":"16503:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":549,"name":"address","nodeType":"ElementaryTypeName","src":"16503:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":552,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"16525:28:5","nodeType":"VariableDeclaration","scope":555,"src":"16517:36:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":551,"name":"uint256","nodeType":"ElementaryTypeName","src":"16517:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16502:52:5"},"returnParameters":{"id":554,"nodeType":"ParameterList","parameters":[],"src":"16563:0:5"},"scope":613,"src":"16465:99:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":556,"nodeType":"StructuredDocumentation","src":"16570:276:5","text":" @notice Override the protocol yield fee percentage for a specific pool.\n @param pool The address of the pool for which we are setting the protocol yield fee\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage for the pool"},"functionSelector":"abaa3356","id":563,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolYieldFeePercentage","nameLocation":"16860:29:5","nodeType":"FunctionDefinition","parameters":{"id":561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":558,"mutability":"mutable","name":"pool","nameLocation":"16898:4:5","nodeType":"VariableDeclaration","scope":563,"src":"16890:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":557,"name":"address","nodeType":"ElementaryTypeName","src":"16890:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":560,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"16912:29:5","nodeType":"VariableDeclaration","scope":563,"src":"16904:37:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":559,"name":"uint256","nodeType":"ElementaryTypeName","src":"16904:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16889:53:5"},"returnParameters":{"id":562,"nodeType":"ParameterList","parameters":[],"src":"16951:0:5"},"scope":613,"src":"16851:101:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":564,"nodeType":"StructuredDocumentation","src":"16958:623:5","text":" @notice Assigns a new pool creator swap fee percentage to the specified pool.\n @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n @param pool The address of the pool for which the pool creator fee will be changed\n @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage to apply to the pool"},"functionSelector":"1377c16c","id":571,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolCreatorSwapFeePercentage","nameLocation":"17595:31:5","nodeType":"FunctionDefinition","parameters":{"id":569,"nodeType":"ParameterList","parameters":[{"constant":false,"id":566,"mutability":"mutable","name":"pool","nameLocation":"17635:4:5","nodeType":"VariableDeclaration","scope":571,"src":"17627:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":565,"name":"address","nodeType":"ElementaryTypeName","src":"17627:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":568,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"17649:28:5","nodeType":"VariableDeclaration","scope":571,"src":"17641:36:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":567,"name":"uint256","nodeType":"ElementaryTypeName","src":"17641:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17626:52:5"},"returnParameters":{"id":570,"nodeType":"ParameterList","parameters":[],"src":"17687:0:5"},"scope":613,"src":"17586:102:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":572,"nodeType":"StructuredDocumentation","src":"17694:626:5","text":" @notice Assigns a new pool creator yield fee percentage to the specified pool.\n @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n @param pool The address of the pool for which the pool creator fee will be changed\n @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage to apply to the pool"},"functionSelector":"3af52712","id":579,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolCreatorYieldFeePercentage","nameLocation":"18334:32:5","nodeType":"FunctionDefinition","parameters":{"id":577,"nodeType":"ParameterList","parameters":[{"constant":false,"id":574,"mutability":"mutable","name":"pool","nameLocation":"18375:4:5","nodeType":"VariableDeclaration","scope":579,"src":"18367:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":573,"name":"address","nodeType":"ElementaryTypeName","src":"18367:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":576,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"18389:29:5","nodeType":"VariableDeclaration","scope":579,"src":"18381:37:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":575,"name":"uint256","nodeType":"ElementaryTypeName","src":"18381:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18366:53:5"},"returnParameters":{"id":578,"nodeType":"ParameterList","parameters":[],"src":"18428:0:5"},"scope":613,"src":"18325:104:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":580,"nodeType":"StructuredDocumentation","src":"18435:296:5","text":" @notice Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\n @dev Sends swap and yield protocol fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens"},"functionSelector":"cf7b287f","id":587,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawProtocolFees","nameLocation":"18745:20:5","nodeType":"FunctionDefinition","parameters":{"id":585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":582,"mutability":"mutable","name":"pool","nameLocation":"18774:4:5","nodeType":"VariableDeclaration","scope":587,"src":"18766:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":581,"name":"address","nodeType":"ElementaryTypeName","src":"18766:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":584,"mutability":"mutable","name":"recipient","nameLocation":"18788:9:5","nodeType":"VariableDeclaration","scope":587,"src":"18780:17:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":583,"name":"address","nodeType":"ElementaryTypeName","src":"18780:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18765:33:5"},"returnParameters":{"id":586,"nodeType":"ParameterList","parameters":[],"src":"18807:0:5"},"scope":613,"src":"18736:72:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":588,"nodeType":"StructuredDocumentation","src":"18814:339:5","text":" @notice Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\n @dev Sends swap and yield protocol fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens\n @param token Token to withdraw"},"functionSelector":"b53a70b2","id":598,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawProtocolFeesForToken","nameLocation":"19167:28:5","nodeType":"FunctionDefinition","parameters":{"id":596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":590,"mutability":"mutable","name":"pool","nameLocation":"19204:4:5","nodeType":"VariableDeclaration","scope":598,"src":"19196:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":589,"name":"address","nodeType":"ElementaryTypeName","src":"19196:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":592,"mutability":"mutable","name":"recipient","nameLocation":"19218:9:5","nodeType":"VariableDeclaration","scope":598,"src":"19210:17:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":591,"name":"address","nodeType":"ElementaryTypeName","src":"19210:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":595,"mutability":"mutable","name":"token","nameLocation":"19236:5:5","nodeType":"VariableDeclaration","scope":598,"src":"19229:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":594,"nodeType":"UserDefinedTypeName","pathNode":{"id":593,"name":"IERC20","nameLocations":["19229:6:5"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"19229:6:5"},"referencedDeclaration":6591,"src":"19229:6:5","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"19195:47:5"},"returnParameters":{"id":597,"nodeType":"ParameterList","parameters":[],"src":"19251:0:5"},"scope":613,"src":"19158:94:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":599,"nodeType":"StructuredDocumentation","src":"19258:291:5","text":" @notice Withdraw collected pool creator fees for a given pool. This is a permissioned function.\n @dev Sends swap and yield pool creator fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens"},"functionSelector":"f7061445","id":606,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"19563:23:5","nodeType":"FunctionDefinition","parameters":{"id":604,"nodeType":"ParameterList","parameters":[{"constant":false,"id":601,"mutability":"mutable","name":"pool","nameLocation":"19595:4:5","nodeType":"VariableDeclaration","scope":606,"src":"19587:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":600,"name":"address","nodeType":"ElementaryTypeName","src":"19587:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":603,"mutability":"mutable","name":"recipient","nameLocation":"19609:9:5","nodeType":"VariableDeclaration","scope":606,"src":"19601:17:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":602,"name":"address","nodeType":"ElementaryTypeName","src":"19601:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19586:33:5"},"returnParameters":{"id":605,"nodeType":"ParameterList","parameters":[],"src":"19628:0:5"},"scope":613,"src":"19554:75:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":607,"nodeType":"StructuredDocumentation","src":"19635:310:5","text":" @notice Withdraw collected pool creator fees for a given pool.\n @dev Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable\n value, this function is permissionless.\n @param pool The pool on which fees were collected"},"functionSelector":"52f125f0","id":612,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"19959:23:5","nodeType":"FunctionDefinition","parameters":{"id":610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":609,"mutability":"mutable","name":"pool","nameLocation":"19991:4:5","nodeType":"VariableDeclaration","scope":612,"src":"19983:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":608,"name":"address","nodeType":"ElementaryTypeName","src":"19983:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19982:14:5"},"returnParameters":{"id":611,"nodeType":"ParameterList","parameters":[],"src":"20005:0:5"},"scope":613,"src":"19950:56:5","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":614,"src":"266:19742:5","usedErrors":[394,397,402,409,412],"usedEvents":[287,292,299,306,313,320,330,340,352,364,373,382,391]}],"src":"46:19963:5"},"id":5},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","exportedSymbols":{"IAuthentication":[47],"IVault":[651],"IVaultAdmin":[941],"IVaultErrors":[1308],"IVaultEvents":[1547],"IVaultExtension":[1966],"IVaultMain":[2102]},"id":652,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":615,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:6"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"../solidity-utils/helpers/IAuthentication.sol","id":617,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":652,"sourceUnit":48,"src":"72:80:6","symbolAliases":[{"foreign":{"id":616,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"81:15:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","file":"./IVaultExtension.sol","id":619,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":652,"sourceUnit":1967,"src":"153:56:6","symbolAliases":[{"foreign":{"id":618,"name":"IVaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1966,"src":"162:15:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"./IVaultErrors.sol","id":621,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":652,"sourceUnit":1309,"src":"210:50:6","symbolAliases":[{"foreign":{"id":620,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1308,"src":"219:12:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","file":"./IVaultEvents.sol","id":623,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":652,"sourceUnit":1548,"src":"261:50:6","symbolAliases":[{"foreign":{"id":622,"name":"IVaultEvents","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1547,"src":"270:12:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","file":"./IVaultAdmin.sol","id":625,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":652,"sourceUnit":942,"src":"312:48:6","symbolAliases":[{"foreign":{"id":624,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":941,"src":"321:11:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","file":"./IVaultMain.sol","id":627,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":652,"sourceUnit":2103,"src":"361:46:6","symbolAliases":[{"foreign":{"id":626,"name":"IVaultMain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2102,"src":"370:10:6","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":629,"name":"IVaultMain","nameLocations":["539:10:6"],"nodeType":"IdentifierPath","referencedDeclaration":2102,"src":"539:10:6"},"id":630,"nodeType":"InheritanceSpecifier","src":"539:10:6"},{"baseName":{"id":631,"name":"IVaultExtension","nameLocations":["551:15:6"],"nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"551:15:6"},"id":632,"nodeType":"InheritanceSpecifier","src":"551:15:6"},{"baseName":{"id":633,"name":"IVaultAdmin","nameLocations":["568:11:6"],"nodeType":"IdentifierPath","referencedDeclaration":941,"src":"568:11:6"},"id":634,"nodeType":"InheritanceSpecifier","src":"568:11:6"},{"baseName":{"id":635,"name":"IVaultErrors","nameLocations":["581:12:6"],"nodeType":"IdentifierPath","referencedDeclaration":1308,"src":"581:12:6"},"id":636,"nodeType":"InheritanceSpecifier","src":"581:12:6"},{"baseName":{"id":637,"name":"IVaultEvents","nameLocations":["595:12:6"],"nodeType":"IdentifierPath","referencedDeclaration":1547,"src":"595:12:6"},"id":638,"nodeType":"InheritanceSpecifier","src":"595:12:6"},{"baseName":{"id":639,"name":"IAuthentication","nameLocations":["609:15:6"],"nodeType":"IdentifierPath","referencedDeclaration":47,"src":"609:15:6"},"id":640,"nodeType":"InheritanceSpecifier","src":"609:15:6"}],"canonicalName":"IVault","contractDependencies":[],"contractKind":"interface","documentation":{"id":628,"nodeType":"StructuredDocumentation","src":"409:110:6","text":"@notice Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries."},"fullyImplemented":false,"id":651,"linearizedBaseContracts":[651,47,1547,1308,941,1966,2102],"name":"IVault","nameLocation":"529:6:6","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[669,1570],"documentation":{"id":641,"nodeType":"StructuredDocumentation","src":"631:41:6","text":"@return vault The main Vault address."},"functionSelector":"fbfa77cf","id":650,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"686:5:6","nodeType":"FunctionDefinition","overrides":{"id":645,"nodeType":"OverrideSpecifier","overrides":[{"id":643,"name":"IVaultAdmin","nameLocations":["717:11:6"],"nodeType":"IdentifierPath","referencedDeclaration":941,"src":"717:11:6"},{"id":644,"name":"IVaultExtension","nameLocations":["730:15:6"],"nodeType":"IdentifierPath","referencedDeclaration":1966,"src":"730:15:6"}],"src":"708:38:6"},"parameters":{"id":642,"nodeType":"ParameterList","parameters":[],"src":"691:2:6"},"returnParameters":{"id":649,"nodeType":"ParameterList","parameters":[{"constant":false,"id":648,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":650,"src":"756:6:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":647,"nodeType":"UserDefinedTypeName","pathNode":{"id":646,"name":"IVault","nameLocations":["756:6:6"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"756:6:6"},"referencedDeclaration":651,"src":"756:6:6","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"}],"src":"755:8:6"},"scope":651,"src":"677:87:6","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":652,"src":"519:247:6","usedErrors":[38,953,958,963,968,977,983,986,989,992,995,998,1001,1010,1013,1016,1019,1022,1025,1028,1031,1034,1037,1040,1043,1046,1049,1052,1058,1065,1072,1075,1078,1088,1098,1105,1108,1111,1114,1124,1134,1141,1144,1147,1150,1153,1156,1159,1162,1165,1170,1175,1180,1183,1186,1189,1192,1195,1200,1205,1210,1216,1222,1225,1233,1239,1245,1248,1251,1254,1259,1269,1279,1286,1289,1292,1295,1298,1301,1304,1307],"usedEvents":[1346,1351,1370,1382,1394,1412,1430,1435,1438,1441,1448,1455,1462,1469,1476,1482,1488,1500,1510,1520,1532,1537,1546]}],"src":"46:721:6"},"id":6},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","exportedSymbols":{"IAuthorizer":[73],"IERC4626":[6513],"IProtocolFeeController":[613],"IVault":[651],"IVaultAdmin":[941]},"id":942,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":653,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:7"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":655,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":942,"sourceUnit":6514,"src":"72:75:7","symbolAliases":[{"foreign":{"id":654,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6513,"src":"81:8:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":657,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":942,"sourceUnit":614,"src":"149:70:7","symbolAliases":[{"foreign":{"id":656,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":613,"src":"158:22:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":659,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":942,"sourceUnit":74,"src":"220:48:7","symbolAliases":[{"foreign":{"id":658,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73,"src":"229:11:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":661,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":942,"sourceUnit":652,"src":"269:38:7","symbolAliases":[{"foreign":{"id":660,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":651,"src":"278:6:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultAdmin","contractDependencies":[],"contractKind":"interface","documentation":{"id":662,"nodeType":"StructuredDocumentation","src":"309:276:7","text":" @notice Interface for functions defined on the `VaultAdmin` contract.\n @dev `VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations,\n as two delegate calls add gas to each call. Most of the permissioned calls are here."},"fullyImplemented":false,"id":941,"linearizedBaseContracts":[941],"name":"IVaultAdmin","nameLocation":"596:11:7","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":663,"nodeType":"StructuredDocumentation","src":"841:206:7","text":" @notice Returns the main Vault address.\n @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n @return vault The address of the main Vault"},"functionSelector":"fbfa77cf","id":669,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"1061:5:7","nodeType":"FunctionDefinition","parameters":{"id":664,"nodeType":"ParameterList","parameters":[],"src":"1066:2:7"},"returnParameters":{"id":668,"nodeType":"ParameterList","parameters":[{"constant":false,"id":667,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":669,"src":"1092:6:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":666,"nodeType":"UserDefinedTypeName","pathNode":{"id":665,"name":"IVault","nameLocations":["1092:6:7"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"1092:6:7"},"referencedDeclaration":651,"src":"1092:6:7","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1091:8:7"},"scope":941,"src":"1052:48:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":670,"nodeType":"StructuredDocumentation","src":"1106:326:7","text":" @notice Returns the Vault's pause window end time.\n @dev This value is immutable, and represents the timestamp after which the Vault can no longer be paused\n by governance. Balancer timestamps are 32 bits.\n @return pauseWindowEndTime The timestamp when the Vault's pause window ends"},"functionSelector":"8a8d123a","id":675,"implemented":false,"kind":"function","modifiers":[],"name":"getPauseWindowEndTime","nameLocation":"1446:21:7","nodeType":"FunctionDefinition","parameters":{"id":671,"nodeType":"ParameterList","parameters":[],"src":"1467:2:7"},"returnParameters":{"id":674,"nodeType":"ParameterList","parameters":[{"constant":false,"id":673,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"1500:18:7","nodeType":"VariableDeclaration","scope":675,"src":"1493:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":672,"name":"uint32","nodeType":"ElementaryTypeName","src":"1493:6:7","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1492:27:7"},"scope":941,"src":"1437:83:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":676,"nodeType":"StructuredDocumentation","src":"1526:414:7","text":" @notice Returns the Vault's buffer period duration.\n @dev This value is immutable. It represents the period during which, if paused, the Vault will remain paused.\n This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer\n timestamps are 32 bits.\n @return bufferPeriodDuration The length of the buffer period in seconds"},"functionSelector":"20c1fb7a","id":681,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferPeriodDuration","nameLocation":"1954:23:7","nodeType":"FunctionDefinition","parameters":{"id":677,"nodeType":"ParameterList","parameters":[],"src":"1977:2:7"},"returnParameters":{"id":680,"nodeType":"ParameterList","parameters":[{"constant":false,"id":679,"mutability":"mutable","name":"bufferPeriodDuration","nameLocation":"2010:20:7","nodeType":"VariableDeclaration","scope":681,"src":"2003:27:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":678,"name":"uint32","nodeType":"ElementaryTypeName","src":"2003:6:7","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2002:29:7"},"scope":941,"src":"1945:87:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":682,"nodeType":"StructuredDocumentation","src":"2038:321:7","text":" @notice Returns the Vault's buffer period end time.\n @dev This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer\n timestamps are 32 bits.\n @return bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused"},"functionSelector":"cd51c12f","id":687,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferPeriodEndTime","nameLocation":"2373:22:7","nodeType":"FunctionDefinition","parameters":{"id":683,"nodeType":"ParameterList","parameters":[],"src":"2395:2:7"},"returnParameters":{"id":686,"nodeType":"ParameterList","parameters":[{"constant":false,"id":685,"mutability":"mutable","name":"bufferPeriodEndTime","nameLocation":"2428:19:7","nodeType":"VariableDeclaration","scope":687,"src":"2421:26:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":684,"name":"uint32","nodeType":"ElementaryTypeName","src":"2421:6:7","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2420:28:7"},"scope":941,"src":"2364:85:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":688,"nodeType":"StructuredDocumentation","src":"2455:193:7","text":" @notice Get the minimum number of tokens in a pool.\n @dev We expect the vast majority of pools to be 2-token.\n @return minTokens The minimum token count of a pool"},"functionSelector":"a8175b27","id":693,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumPoolTokens","nameLocation":"2662:20:7","nodeType":"FunctionDefinition","parameters":{"id":689,"nodeType":"ParameterList","parameters":[],"src":"2682:2:7"},"returnParameters":{"id":692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":691,"mutability":"mutable","name":"minTokens","nameLocation":"2716:9:7","nodeType":"VariableDeclaration","scope":693,"src":"2708:17:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":690,"name":"uint256","nodeType":"ElementaryTypeName","src":"2708:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2707:19:7"},"scope":941,"src":"2653:74:7","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":694,"nodeType":"StructuredDocumentation","src":"2733:129:7","text":" @notice Get the maximum number of tokens in a pool.\n @return maxTokens The maximum token count of a pool"},"functionSelector":"2e42f4d5","id":699,"implemented":false,"kind":"function","modifiers":[],"name":"getMaximumPoolTokens","nameLocation":"2876:20:7","nodeType":"FunctionDefinition","parameters":{"id":695,"nodeType":"ParameterList","parameters":[],"src":"2896:2:7"},"returnParameters":{"id":698,"nodeType":"ParameterList","parameters":[{"constant":false,"id":697,"mutability":"mutable","name":"maxTokens","nameLocation":"2930:9:7","nodeType":"VariableDeclaration","scope":699,"src":"2922:17:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":696,"name":"uint256","nodeType":"ElementaryTypeName","src":"2922:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2921:19:7"},"scope":941,"src":"2867:74:7","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":700,"nodeType":"StructuredDocumentation","src":"2947:439:7","text":" @notice Get the minimum total supply of pool tokens (BPT) for an initialized pool.\n @dev This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT\n is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\n @return poolMinimumTotalSupply The minimum total supply a pool can have after initialization"},"functionSelector":"d0965a6b","id":705,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolMinimumTotalSupply","nameLocation":"3400:25:7","nodeType":"FunctionDefinition","parameters":{"id":701,"nodeType":"ParameterList","parameters":[],"src":"3425:2:7"},"returnParameters":{"id":704,"nodeType":"ParameterList","parameters":[{"constant":false,"id":703,"mutability":"mutable","name":"poolMinimumTotalSupply","nameLocation":"3459:22:7","nodeType":"VariableDeclaration","scope":705,"src":"3451:30:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":702,"name":"uint256","nodeType":"ElementaryTypeName","src":"3451:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3450:32:7"},"scope":941,"src":"3391:92:7","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":706,"nodeType":"StructuredDocumentation","src":"3489:502:7","text":" @notice Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\n @dev This prevents buffers from being completely drained. When the buffer is initialized, this minimum number\n of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal\n to the Vault, as buffers are not tokenized.\n @return bufferMinimumTotalSupply The minimum total supply a buffer can have after initialization"},"functionSelector":"26a8a991","id":711,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferMinimumTotalSupply","nameLocation":"4005:27:7","nodeType":"FunctionDefinition","parameters":{"id":707,"nodeType":"ParameterList","parameters":[],"src":"4032:2:7"},"returnParameters":{"id":710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":709,"mutability":"mutable","name":"bufferMinimumTotalSupply","nameLocation":"4066:24:7","nodeType":"VariableDeclaration","scope":711,"src":"4058:32:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":708,"name":"uint256","nodeType":"ElementaryTypeName","src":"4058:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4057:34:7"},"scope":941,"src":"3996:96:7","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":712,"nodeType":"StructuredDocumentation","src":"4098:291:7","text":" @notice Get the minimum trade amount in a pool operation.\n @dev This limit is applied to the 18-decimal \"upscaled\" amount in any operation (swap, add/remove liquidity).\n @return minimumTradeAmount The minimum trade amount as an 18-decimal floating point number"},"functionSelector":"e2cb0ba0","id":717,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumTradeAmount","nameLocation":"4403:21:7","nodeType":"FunctionDefinition","parameters":{"id":713,"nodeType":"ParameterList","parameters":[],"src":"4424:2:7"},"returnParameters":{"id":716,"nodeType":"ParameterList","parameters":[{"constant":false,"id":715,"mutability":"mutable","name":"minimumTradeAmount","nameLocation":"4458:18:7","nodeType":"VariableDeclaration","scope":717,"src":"4450:26:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":714,"name":"uint256","nodeType":"ElementaryTypeName","src":"4450:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4449:28:7"},"scope":941,"src":"4394:84:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":718,"nodeType":"StructuredDocumentation","src":"4484:271:7","text":" @notice Get the minimum wrap amount in a buffer operation.\n @dev This limit is applied to the wrap operation amount, in native underlying token decimals.\n @return minimumWrapAmount The minimum wrap amount in native underlying token decimals"},"functionSelector":"53956aa2","id":723,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumWrapAmount","nameLocation":"4769:20:7","nodeType":"FunctionDefinition","parameters":{"id":719,"nodeType":"ParameterList","parameters":[],"src":"4789:2:7"},"returnParameters":{"id":722,"nodeType":"ParameterList","parameters":[{"constant":false,"id":721,"mutability":"mutable","name":"minimumWrapAmount","nameLocation":"4823:17:7","nodeType":"VariableDeclaration","scope":723,"src":"4815:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":720,"name":"uint256","nodeType":"ElementaryTypeName","src":"4815:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4814:27:7"},"scope":941,"src":"4760:82:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":724,"nodeType":"StructuredDocumentation","src":"5069:529:7","text":" @notice Indicates whether the Vault is paused.\n @dev If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that\n ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not\n also pause buffers (though we anticipate they would likely be paused and unpaused together). Call\n `areBuffersPaused` to check the pause state of the buffers.\n @return vaultPaused True if the Vault is paused"},"functionSelector":"098401f5","id":729,"implemented":false,"kind":"function","modifiers":[],"name":"isVaultPaused","nameLocation":"5612:13:7","nodeType":"FunctionDefinition","parameters":{"id":725,"nodeType":"ParameterList","parameters":[],"src":"5625:2:7"},"returnParameters":{"id":728,"nodeType":"ParameterList","parameters":[{"constant":false,"id":727,"mutability":"mutable","name":"vaultPaused","nameLocation":"5656:11:7","nodeType":"VariableDeclaration","scope":729,"src":"5651:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":726,"name":"bool","nodeType":"ElementaryTypeName","src":"5651:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5650:18:7"},"scope":941,"src":"5603:66:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":730,"nodeType":"StructuredDocumentation","src":"5675:400:7","text":" @notice Returns the paused status, and end times of the Vault's pause window and buffer period.\n @dev Balancer timestamps are 32 bits.\n @return vaultPaused True if the Vault is paused\n @return vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window\n @return vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period"},"functionSelector":"85c8c015","id":739,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultPausedState","nameLocation":"6089:19:7","nodeType":"FunctionDefinition","parameters":{"id":731,"nodeType":"ParameterList","parameters":[],"src":"6108:2:7"},"returnParameters":{"id":738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":733,"mutability":"mutable","name":"vaultPaused","nameLocation":"6163:11:7","nodeType":"VariableDeclaration","scope":739,"src":"6158:16:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":732,"name":"bool","nodeType":"ElementaryTypeName","src":"6158:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":735,"mutability":"mutable","name":"vaultPauseWindowEndTime","nameLocation":"6183:23:7","nodeType":"VariableDeclaration","scope":739,"src":"6176:30:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":734,"name":"uint32","nodeType":"ElementaryTypeName","src":"6176:6:7","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":737,"mutability":"mutable","name":"vaultBufferPeriodEndTime","nameLocation":"6215:24:7","nodeType":"VariableDeclaration","scope":739,"src":"6208:31:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":736,"name":"uint32","nodeType":"ElementaryTypeName","src":"6208:6:7","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"6157:83:7"},"scope":941,"src":"6080:161:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":740,"nodeType":"StructuredDocumentation","src":"6247:517:7","text":" @notice Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\n @dev This is a permissioned function that will only work during the Pause Window set during deployment.\n Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing\n the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers\n are also paused (with `pauseVaultBuffers`)."},"functionSelector":"9e0879c2","id":743,"implemented":false,"kind":"function","modifiers":[],"name":"pauseVault","nameLocation":"6778:10:7","nodeType":"FunctionDefinition","parameters":{"id":741,"nodeType":"ParameterList","parameters":[],"src":"6788:2:7"},"returnParameters":{"id":742,"nodeType":"ParameterList","parameters":[],"src":"6799:0:7"},"scope":941,"src":"6769:31:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":744,"nodeType":"StructuredDocumentation","src":"6806:569:7","text":" @notice Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\n @dev This is a permissioned function that will only work on a paused Vault within the Buffer Period set during\n deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above,\n ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse\n `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused."},"functionSelector":"0b7562be","id":747,"implemented":false,"kind":"function","modifiers":[],"name":"unpauseVault","nameLocation":"7389:12:7","nodeType":"FunctionDefinition","parameters":{"id":745,"nodeType":"ParameterList","parameters":[],"src":"7401:2:7"},"returnParameters":{"id":746,"nodeType":"ParameterList","parameters":[],"src":"7412:0:7"},"scope":941,"src":"7380:33:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":748,"nodeType":"StructuredDocumentation","src":"7639:276:7","text":" @notice Pause the Pool: an emergency action which disables all pool functions.\n @dev This is a permissioned function that will only work during the Pause Window set during pool factory\n deployment.\n @param pool The pool being paused"},"functionSelector":"55aca1ec","id":753,"implemented":false,"kind":"function","modifiers":[],"name":"pausePool","nameLocation":"7929:9:7","nodeType":"FunctionDefinition","parameters":{"id":751,"nodeType":"ParameterList","parameters":[{"constant":false,"id":750,"mutability":"mutable","name":"pool","nameLocation":"7947:4:7","nodeType":"VariableDeclaration","scope":753,"src":"7939:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":749,"name":"address","nodeType":"ElementaryTypeName","src":"7939:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7938:14:7"},"returnParameters":{"id":752,"nodeType":"ParameterList","parameters":[],"src":"7961:0:7"},"scope":941,"src":"7920:42:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":754,"nodeType":"StructuredDocumentation","src":"7968:366:7","text":" @notice Reverse a `pause` operation, and restore the Pool to normal functionality.\n @dev This is a permissioned function that will only work on a paused Pool within the Buffer Period set during\n deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\n @param pool The pool being unpaused"},"functionSelector":"f21c38cd","id":759,"implemented":false,"kind":"function","modifiers":[],"name":"unpausePool","nameLocation":"8348:11:7","nodeType":"FunctionDefinition","parameters":{"id":757,"nodeType":"ParameterList","parameters":[{"constant":false,"id":756,"mutability":"mutable","name":"pool","nameLocation":"8368:4:7","nodeType":"VariableDeclaration","scope":759,"src":"8360:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":755,"name":"address","nodeType":"ElementaryTypeName","src":"8360:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8359:14:7"},"returnParameters":{"id":758,"nodeType":"ParameterList","parameters":[],"src":"8382:0:7"},"scope":941,"src":"8339:44:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":760,"nodeType":"StructuredDocumentation","src":"8606:520:7","text":" @notice Assigns a new static swap fee percentage to the specified pool.\n @dev This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within\n the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`.\n Emits the SwapFeePercentageChanged event.\n @param pool The address of the pool for which the static swap fee will be changed\n @param swapFeePercentage The new swap fee percentage to apply to the pool"},"functionSelector":"d15126ba","id":767,"implemented":false,"kind":"function","modifiers":[],"name":"setStaticSwapFeePercentage","nameLocation":"9140:26:7","nodeType":"FunctionDefinition","parameters":{"id":765,"nodeType":"ParameterList","parameters":[{"constant":false,"id":762,"mutability":"mutable","name":"pool","nameLocation":"9175:4:7","nodeType":"VariableDeclaration","scope":767,"src":"9167:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":761,"name":"address","nodeType":"ElementaryTypeName","src":"9167:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":764,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"9189:17:7","nodeType":"VariableDeclaration","scope":767,"src":"9181:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":763,"name":"uint256","nodeType":"ElementaryTypeName","src":"9181:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9166:41:7"},"returnParameters":{"id":766,"nodeType":"ParameterList","parameters":[],"src":"9216:0:7"},"scope":941,"src":"9131:86:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":768,"nodeType":"StructuredDocumentation","src":"9223:463:7","text":" @notice Collects accumulated aggregate swap and yield fees for the specified pool.\n @dev Fees are sent to the ProtocolFeeController address.\n @param pool The pool on which all aggregate fees should be collected\n @return swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n @return yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order"},"functionSelector":"8f4ab9ca","id":779,"implemented":false,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"9700:20:7","nodeType":"FunctionDefinition","parameters":{"id":771,"nodeType":"ParameterList","parameters":[{"constant":false,"id":770,"mutability":"mutable","name":"pool","nameLocation":"9738:4:7","nodeType":"VariableDeclaration","scope":779,"src":"9730:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":769,"name":"address","nodeType":"ElementaryTypeName","src":"9730:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9720:28:7"},"returnParameters":{"id":778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":774,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"9784:14:7","nodeType":"VariableDeclaration","scope":779,"src":"9767:31:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":772,"name":"uint256","nodeType":"ElementaryTypeName","src":"9767:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":773,"nodeType":"ArrayTypeName","src":"9767:9:7","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":777,"mutability":"mutable","name":"yieldFeeAmounts","nameLocation":"9817:15:7","nodeType":"VariableDeclaration","scope":779,"src":"9800:32:7","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":775,"name":"uint256","nodeType":"ElementaryTypeName","src":"9800:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":776,"nodeType":"ArrayTypeName","src":"9800:9:7","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9766:67:7"},"scope":941,"src":"9691:143:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":780,"nodeType":"StructuredDocumentation","src":"9840:755:7","text":" @notice Update an aggregate swap fee percentage.\n @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n Emits an `AggregateSwapFeePercentageChanged` event.\n @param pool The pool whose swap fee percentage will be updated\n @param newAggregateSwapFeePercentage The new aggregate swap fee percentage"},"functionSelector":"5e0b06f4","id":787,"implemented":false,"kind":"function","modifiers":[],"name":"updateAggregateSwapFeePercentage","nameLocation":"10609:32:7","nodeType":"FunctionDefinition","parameters":{"id":785,"nodeType":"ParameterList","parameters":[{"constant":false,"id":782,"mutability":"mutable","name":"pool","nameLocation":"10650:4:7","nodeType":"VariableDeclaration","scope":787,"src":"10642:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":781,"name":"address","nodeType":"ElementaryTypeName","src":"10642:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":784,"mutability":"mutable","name":"newAggregateSwapFeePercentage","nameLocation":"10664:29:7","nodeType":"VariableDeclaration","scope":787,"src":"10656:37:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":783,"name":"uint256","nodeType":"ElementaryTypeName","src":"10656:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10641:53:7"},"returnParameters":{"id":786,"nodeType":"ParameterList","parameters":[],"src":"10703:0:7"},"scope":941,"src":"10600:104:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":788,"nodeType":"StructuredDocumentation","src":"10710:760:7","text":" @notice Update an aggregate yield fee percentage.\n @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n Emits an `AggregateYieldFeePercentageChanged` event.\n @param pool The pool whose yield fee percentage will be updated\n @param newAggregateYieldFeePercentage The new aggregate yield fee percentage"},"functionSelector":"e253670a","id":795,"implemented":false,"kind":"function","modifiers":[],"name":"updateAggregateYieldFeePercentage","nameLocation":"11484:33:7","nodeType":"FunctionDefinition","parameters":{"id":793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":790,"mutability":"mutable","name":"pool","nameLocation":"11526:4:7","nodeType":"VariableDeclaration","scope":795,"src":"11518:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":789,"name":"address","nodeType":"ElementaryTypeName","src":"11518:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":792,"mutability":"mutable","name":"newAggregateYieldFeePercentage","nameLocation":"11540:30:7","nodeType":"VariableDeclaration","scope":795,"src":"11532:38:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":791,"name":"uint256","nodeType":"ElementaryTypeName","src":"11532:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11517:54:7"},"returnParameters":{"id":794,"nodeType":"ParameterList","parameters":[],"src":"11580:0:7"},"scope":941,"src":"11475:106:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":796,"nodeType":"StructuredDocumentation","src":"11587:249:7","text":" @notice Sets a new Protocol Fee Controller for the Vault.\n @dev This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\n @param newProtocolFeeController The address of the new Protocol Fee Controller"},"functionSelector":"2d771389","id":802,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolFeeController","nameLocation":"11850:24:7","nodeType":"FunctionDefinition","parameters":{"id":800,"nodeType":"ParameterList","parameters":[{"constant":false,"id":799,"mutability":"mutable","name":"newProtocolFeeController","nameLocation":"11898:24:7","nodeType":"VariableDeclaration","scope":802,"src":"11875:47:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"},"typeName":{"id":798,"nodeType":"UserDefinedTypeName","pathNode":{"id":797,"name":"IProtocolFeeController","nameLocations":["11875:22:7"],"nodeType":"IdentifierPath","referencedDeclaration":613,"src":"11875:22:7"},"referencedDeclaration":613,"src":"11875:22:7","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"11874:49:7"},"returnParameters":{"id":801,"nodeType":"ParameterList","parameters":[],"src":"11932:0:7"},"scope":941,"src":"11841:92:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":803,"nodeType":"StructuredDocumentation","src":"12160:557:7","text":" @notice Enable recovery mode for a pool.\n @dev This is a permissioned function. It enables a safe proportional withdrawal, with no external calls.\n Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so\n must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live\n balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\n @param pool The address of the pool"},"functionSelector":"dc3f574e","id":808,"implemented":false,"kind":"function","modifiers":[],"name":"enableRecoveryMode","nameLocation":"12731:18:7","nodeType":"FunctionDefinition","parameters":{"id":806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":805,"mutability":"mutable","name":"pool","nameLocation":"12758:4:7","nodeType":"VariableDeclaration","scope":808,"src":"12750:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":804,"name":"address","nodeType":"ElementaryTypeName","src":"12750:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12749:14:7"},"returnParameters":{"id":807,"nodeType":"ParameterList","parameters":[],"src":"12772:0:7"},"scope":941,"src":"12722:51:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":809,"nodeType":"StructuredDocumentation","src":"12779:409:7","text":" @notice Disable recovery mode for a pool.\n @dev This is a permissioned function. It re-syncs live balances (which could not be updated during\n Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could\n potentially fail if there is an issue with any associated Rate Providers.\n @param pool The address of the pool"},"functionSelector":"bffb78b2","id":814,"implemented":false,"kind":"function","modifiers":[],"name":"disableRecoveryMode","nameLocation":"13202:19:7","nodeType":"FunctionDefinition","parameters":{"id":812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":811,"mutability":"mutable","name":"pool","nameLocation":"13230:4:7","nodeType":"VariableDeclaration","scope":814,"src":"13222:12:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":810,"name":"address","nodeType":"ElementaryTypeName","src":"13222:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13221:14:7"},"returnParameters":{"id":813,"nodeType":"ParameterList","parameters":[],"src":"13244:0:7"},"scope":941,"src":"13193:52:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":815,"nodeType":"StructuredDocumentation","src":"13476:653:7","text":" @notice Disables query functionality on the Vault. Can only be called by governance.\n @dev The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from\n settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable\n queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).\n This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether\n disabling queries is completely necessary; queries can still be re-enabled after this call."},"functionSelector":"de1a36a6","id":818,"implemented":false,"kind":"function","modifiers":[],"name":"disableQuery","nameLocation":"14143:12:7","nodeType":"FunctionDefinition","parameters":{"id":816,"nodeType":"ParameterList","parameters":[],"src":"14155:2:7"},"returnParameters":{"id":817,"nodeType":"ParameterList","parameters":[],"src":"14166:0:7"},"scope":941,"src":"14134:33:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":819,"nodeType":"StructuredDocumentation","src":"14173:223:7","text":" @notice Disables query functionality permanently on the Vault. Can only be called by governance.\n @dev Shall only be used when there is no doubt that queries pose a fundamental threat to the system."},"functionSelector":"821440f2","id":822,"implemented":false,"kind":"function","modifiers":[],"name":"disableQueryPermanently","nameLocation":"14410:23:7","nodeType":"FunctionDefinition","parameters":{"id":820,"nodeType":"ParameterList","parameters":[],"src":"14433:2:7"},"returnParameters":{"id":821,"nodeType":"ParameterList","parameters":[],"src":"14444:0:7"},"scope":941,"src":"14401:44:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":823,"nodeType":"StructuredDocumentation","src":"14451:166:7","text":" @notice Enables query functionality on the Vault. Can only be called by governance.\n @dev Only works if queries are not permanently disabled."},"functionSelector":"e0d55605","id":826,"implemented":false,"kind":"function","modifiers":[],"name":"enableQuery","nameLocation":"14631:11:7","nodeType":"FunctionDefinition","parameters":{"id":824,"nodeType":"ParameterList","parameters":[],"src":"14642:2:7"},"returnParameters":{"id":825,"nodeType":"ParameterList","parameters":[],"src":"14653:0:7"},"scope":941,"src":"14622:32:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":827,"nodeType":"StructuredDocumentation","src":"14881:590:7","text":" @notice Indicates whether the Vault buffers are paused.\n @dev When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true)\n will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and\n independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they\n would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\n @return buffersPaused True if the Vault buffers are paused"},"functionSelector":"55cba7fe","id":832,"implemented":false,"kind":"function","modifiers":[],"name":"areBuffersPaused","nameLocation":"15485:16:7","nodeType":"FunctionDefinition","parameters":{"id":828,"nodeType":"ParameterList","parameters":[],"src":"15501:2:7"},"returnParameters":{"id":831,"nodeType":"ParameterList","parameters":[{"constant":false,"id":830,"mutability":"mutable","name":"buffersPaused","nameLocation":"15532:13:7","nodeType":"VariableDeclaration","scope":832,"src":"15527:18:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":829,"name":"bool","nodeType":"ElementaryTypeName","src":"15527:4:7","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15526:20:7"},"scope":941,"src":"15476:71:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":833,"nodeType":"StructuredDocumentation","src":"15553:619:7","text":" @notice Pauses native vault buffers globally.\n @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not\n possible to pause vault buffers individually.\n This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate\n and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting\n buffers, and vice versa."},"functionSelector":"e085c5a8","id":836,"implemented":false,"kind":"function","modifiers":[],"name":"pauseVaultBuffers","nameLocation":"16186:17:7","nodeType":"FunctionDefinition","parameters":{"id":834,"nodeType":"ParameterList","parameters":[],"src":"16203:2:7"},"returnParameters":{"id":835,"nodeType":"ParameterList","parameters":[],"src":"16214:0:7"},"scope":941,"src":"16177:38:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":837,"nodeType":"StructuredDocumentation","src":"16221:545:7","text":" @notice Unpauses native vault buffers globally.\n @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above,\n ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`.\n If the Vault was also paused, it will remain in that state until explicitly unpaused.\n This is a permissioned call."},"functionSelector":"b9212b49","id":840,"implemented":false,"kind":"function","modifiers":[],"name":"unpauseVaultBuffers","nameLocation":"16780:19:7","nodeType":"FunctionDefinition","parameters":{"id":838,"nodeType":"ParameterList","parameters":[],"src":"16799:2:7"},"returnParameters":{"id":839,"nodeType":"ParameterList","parameters":[],"src":"16810:0:7"},"scope":941,"src":"16771:40:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":841,"nodeType":"StructuredDocumentation","src":"16817:860:7","text":" @notice Initializes buffer for the given wrapped token.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param amountUnderlyingRaw Amount of underlying tokens that will be deposited into the buffer\n @param amountWrappedRaw Amount of wrapped tokens that will be deposited into the buffer\n @param minIssuedShares Minimum amount of shares to receive from the buffer, expressed in underlying token\n native decimals\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n liquidity from the buffer\n @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals."},"functionSelector":"653eb3b0","id":857,"implemented":false,"kind":"function","modifiers":[],"name":"initializeBuffer","nameLocation":"17691:16:7","nodeType":"FunctionDefinition","parameters":{"id":853,"nodeType":"ParameterList","parameters":[{"constant":false,"id":844,"mutability":"mutable","name":"wrappedToken","nameLocation":"17726:12:7","nodeType":"VariableDeclaration","scope":857,"src":"17717:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"},"typeName":{"id":843,"nodeType":"UserDefinedTypeName","pathNode":{"id":842,"name":"IERC4626","nameLocations":["17717:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":6513,"src":"17717:8:7"},"referencedDeclaration":6513,"src":"17717:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":846,"mutability":"mutable","name":"amountUnderlyingRaw","nameLocation":"17756:19:7","nodeType":"VariableDeclaration","scope":857,"src":"17748:27:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":845,"name":"uint256","nodeType":"ElementaryTypeName","src":"17748:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":848,"mutability":"mutable","name":"amountWrappedRaw","nameLocation":"17793:16:7","nodeType":"VariableDeclaration","scope":857,"src":"17785:24:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":847,"name":"uint256","nodeType":"ElementaryTypeName","src":"17785:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":850,"mutability":"mutable","name":"minIssuedShares","nameLocation":"17827:15:7","nodeType":"VariableDeclaration","scope":857,"src":"17819:23:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":849,"name":"uint256","nodeType":"ElementaryTypeName","src":"17819:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":852,"mutability":"mutable","name":"sharesOwner","nameLocation":"17860:11:7","nodeType":"VariableDeclaration","scope":857,"src":"17852:19:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":851,"name":"address","nodeType":"ElementaryTypeName","src":"17852:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17707:170:7"},"returnParameters":{"id":856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":855,"mutability":"mutable","name":"issuedShares","nameLocation":"17904:12:7","nodeType":"VariableDeclaration","scope":857,"src":"17896:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":854,"name":"uint256","nodeType":"ElementaryTypeName","src":"17896:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17895:22:7"},"scope":941,"src":"17682:236:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":858,"nodeType":"StructuredDocumentation","src":"17924:1010:7","text":" @notice Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\n @dev The buffer needs to be initialized beforehand.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param maxAmountUnderlyingInRaw Maximum amount of underlying tokens to add to the buffer. It is expressed in\n underlying token native decimals\n @param maxAmountWrappedInRaw Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n token native decimals\n @param exactSharesToIssue The value in underlying tokens that `sharesOwner` wants to add to the buffer,\n in underlying token decimals\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n liquidity from the buffer\n @return amountUnderlyingRaw Amount of underlying tokens deposited into the buffer\n @return amountWrappedRaw Amount of wrapped tokens deposited into the buffer"},"functionSelector":"e2a92b1a","id":876,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityToBuffer","nameLocation":"18948:20:7","nodeType":"FunctionDefinition","parameters":{"id":870,"nodeType":"ParameterList","parameters":[{"constant":false,"id":861,"mutability":"mutable","name":"wrappedToken","nameLocation":"18987:12:7","nodeType":"VariableDeclaration","scope":876,"src":"18978:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"},"typeName":{"id":860,"nodeType":"UserDefinedTypeName","pathNode":{"id":859,"name":"IERC4626","nameLocations":["18978:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":6513,"src":"18978:8:7"},"referencedDeclaration":6513,"src":"18978:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":863,"mutability":"mutable","name":"maxAmountUnderlyingInRaw","nameLocation":"19017:24:7","nodeType":"VariableDeclaration","scope":876,"src":"19009:32:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":862,"name":"uint256","nodeType":"ElementaryTypeName","src":"19009:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":865,"mutability":"mutable","name":"maxAmountWrappedInRaw","nameLocation":"19059:21:7","nodeType":"VariableDeclaration","scope":876,"src":"19051:29:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":864,"name":"uint256","nodeType":"ElementaryTypeName","src":"19051:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":867,"mutability":"mutable","name":"exactSharesToIssue","nameLocation":"19098:18:7","nodeType":"VariableDeclaration","scope":876,"src":"19090:26:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":866,"name":"uint256","nodeType":"ElementaryTypeName","src":"19090:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":869,"mutability":"mutable","name":"sharesOwner","nameLocation":"19134:11:7","nodeType":"VariableDeclaration","scope":876,"src":"19126:19:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":868,"name":"address","nodeType":"ElementaryTypeName","src":"19126:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18968:183:7"},"returnParameters":{"id":875,"nodeType":"ParameterList","parameters":[{"constant":false,"id":872,"mutability":"mutable","name":"amountUnderlyingRaw","nameLocation":"19178:19:7","nodeType":"VariableDeclaration","scope":876,"src":"19170:27:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":871,"name":"uint256","nodeType":"ElementaryTypeName","src":"19170:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":874,"mutability":"mutable","name":"amountWrappedRaw","nameLocation":"19207:16:7","nodeType":"VariableDeclaration","scope":876,"src":"19199:24:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":873,"name":"uint256","nodeType":"ElementaryTypeName","src":"19199:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19169:55:7"},"scope":941,"src":"18939:286:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":877,"nodeType":"StructuredDocumentation","src":"19231:1458:7","text":" @notice Removes liquidity from an internal ERC4626 buffer in the Vault.\n @dev Only proportional exits are supported, and the sender has to be the owner of the shares.\n This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint.\n Pre-conditions:\n - The buffer needs to be initialized.\n - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why\n this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer.\n - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param sharesToRemove Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's\n total shares. It is expressed in underlying token native decimals\n @param minAmountUnderlyingOutRaw Minimum amount of underlying tokens to receive from the buffer. It is expressed\n in underlying token native decimals\n @param minAmountWrappedOutRaw Minimum amount of wrapped tokens to receive from the buffer. It is expressed in\n wrapped token native decimals\n @return removedUnderlyingBalanceRaw Amount of underlying tokens returned to the user\n @return removedWrappedBalanceRaw Amount of wrapped tokens returned to the user"},"functionSelector":"ebc7955c","id":893,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityFromBuffer","nameLocation":"20703:25:7","nodeType":"FunctionDefinition","parameters":{"id":887,"nodeType":"ParameterList","parameters":[{"constant":false,"id":880,"mutability":"mutable","name":"wrappedToken","nameLocation":"20747:12:7","nodeType":"VariableDeclaration","scope":893,"src":"20738:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"},"typeName":{"id":879,"nodeType":"UserDefinedTypeName","pathNode":{"id":878,"name":"IERC4626","nameLocations":["20738:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":6513,"src":"20738:8:7"},"referencedDeclaration":6513,"src":"20738:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":882,"mutability":"mutable","name":"sharesToRemove","nameLocation":"20777:14:7","nodeType":"VariableDeclaration","scope":893,"src":"20769:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":881,"name":"uint256","nodeType":"ElementaryTypeName","src":"20769:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":884,"mutability":"mutable","name":"minAmountUnderlyingOutRaw","nameLocation":"20809:25:7","nodeType":"VariableDeclaration","scope":893,"src":"20801:33:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":883,"name":"uint256","nodeType":"ElementaryTypeName","src":"20801:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":886,"mutability":"mutable","name":"minAmountWrappedOutRaw","nameLocation":"20852:22:7","nodeType":"VariableDeclaration","scope":893,"src":"20844:30:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":885,"name":"uint256","nodeType":"ElementaryTypeName","src":"20844:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20728:152:7"},"returnParameters":{"id":892,"nodeType":"ParameterList","parameters":[{"constant":false,"id":889,"mutability":"mutable","name":"removedUnderlyingBalanceRaw","nameLocation":"20907:27:7","nodeType":"VariableDeclaration","scope":893,"src":"20899:35:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":888,"name":"uint256","nodeType":"ElementaryTypeName","src":"20899:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":891,"mutability":"mutable","name":"removedWrappedBalanceRaw","nameLocation":"20944:24:7","nodeType":"VariableDeclaration","scope":893,"src":"20936:32:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":890,"name":"uint256","nodeType":"ElementaryTypeName","src":"20936:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20898:71:7"},"scope":941,"src":"20694:276:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":894,"nodeType":"StructuredDocumentation","src":"20976:382:7","text":" @notice Returns the asset registered for a given wrapped token.\n @dev The asset can never change after buffer initialization.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return underlyingToken Address of the underlying token registered for the wrapper; `address(0)` if the buffer\n has not been initialized."},"functionSelector":"0387587d","id":902,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferAsset","nameLocation":"21372:14:7","nodeType":"FunctionDefinition","parameters":{"id":898,"nodeType":"ParameterList","parameters":[{"constant":false,"id":897,"mutability":"mutable","name":"wrappedToken","nameLocation":"21396:12:7","nodeType":"VariableDeclaration","scope":902,"src":"21387:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"},"typeName":{"id":896,"nodeType":"UserDefinedTypeName","pathNode":{"id":895,"name":"IERC4626","nameLocations":["21387:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":6513,"src":"21387:8:7"},"referencedDeclaration":6513,"src":"21387:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"21386:23:7"},"returnParameters":{"id":901,"nodeType":"ParameterList","parameters":[{"constant":false,"id":900,"mutability":"mutable","name":"underlyingToken","nameLocation":"21441:15:7","nodeType":"VariableDeclaration","scope":902,"src":"21433:23:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":899,"name":"address","nodeType":"ElementaryTypeName","src":"21433:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21432:25:7"},"scope":941,"src":"21363:95:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":903,"nodeType":"StructuredDocumentation","src":"21464:441:7","text":" @notice Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets\n in the buffer.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param liquidityOwner Address of the user that owns liquidity in the wrapped token's buffer\n @return ownerShares Amount of shares allocated to the liquidity owner, in native underlying token decimals"},"functionSelector":"9385e39a","id":913,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferOwnerShares","nameLocation":"21919:20:7","nodeType":"FunctionDefinition","parameters":{"id":909,"nodeType":"ParameterList","parameters":[{"constant":false,"id":906,"mutability":"mutable","name":"wrappedToken","nameLocation":"21958:12:7","nodeType":"VariableDeclaration","scope":913,"src":"21949:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"},"typeName":{"id":905,"nodeType":"UserDefinedTypeName","pathNode":{"id":904,"name":"IERC4626","nameLocations":["21949:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":6513,"src":"21949:8:7"},"referencedDeclaration":6513,"src":"21949:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":908,"mutability":"mutable","name":"liquidityOwner","nameLocation":"21988:14:7","nodeType":"VariableDeclaration","scope":913,"src":"21980:22:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":907,"name":"address","nodeType":"ElementaryTypeName","src":"21980:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21939:69:7"},"returnParameters":{"id":912,"nodeType":"ParameterList","parameters":[{"constant":false,"id":911,"mutability":"mutable","name":"ownerShares","nameLocation":"22040:11:7","nodeType":"VariableDeclaration","scope":913,"src":"22032:19:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":910,"name":"uint256","nodeType":"ElementaryTypeName","src":"22032:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22031:21:7"},"scope":941,"src":"21910:143:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":914,"nodeType":"StructuredDocumentation","src":"22059:281:7","text":" @notice Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return bufferShares Amount of supply shares of the buffer, in native underlying token decimals"},"functionSelector":"f2784e07","id":922,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferTotalShares","nameLocation":"22354:20:7","nodeType":"FunctionDefinition","parameters":{"id":918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":917,"mutability":"mutable","name":"wrappedToken","nameLocation":"22384:12:7","nodeType":"VariableDeclaration","scope":922,"src":"22375:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"},"typeName":{"id":916,"nodeType":"UserDefinedTypeName","pathNode":{"id":915,"name":"IERC4626","nameLocations":["22375:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":6513,"src":"22375:8:7"},"referencedDeclaration":6513,"src":"22375:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"22374:23:7"},"returnParameters":{"id":921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":920,"mutability":"mutable","name":"bufferShares","nameLocation":"22429:12:7","nodeType":"VariableDeclaration","scope":922,"src":"22421:20:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":919,"name":"uint256","nodeType":"ElementaryTypeName","src":"22421:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22420:22:7"},"scope":941,"src":"22345:98:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":923,"nodeType":"StructuredDocumentation","src":"22449:521:7","text":" @notice Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\n @dev All values are in native token decimals of the wrapped or underlying tokens.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return underlyingBalanceRaw Amount of underlying tokens deposited into the buffer, in native token decimals\n @return wrappedBalanceRaw Amount of wrapped tokens deposited into the buffer, in native token decimals"},"functionSelector":"4021fe0f","id":933,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferBalance","nameLocation":"22984:16:7","nodeType":"FunctionDefinition","parameters":{"id":927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":926,"mutability":"mutable","name":"wrappedToken","nameLocation":"23019:12:7","nodeType":"VariableDeclaration","scope":933,"src":"23010:21:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"},"typeName":{"id":925,"nodeType":"UserDefinedTypeName","pathNode":{"id":924,"name":"IERC4626","nameLocations":["23010:8:7"],"nodeType":"IdentifierPath","referencedDeclaration":6513,"src":"23010:8:7"},"referencedDeclaration":6513,"src":"23010:8:7","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"23000:37:7"},"returnParameters":{"id":932,"nodeType":"ParameterList","parameters":[{"constant":false,"id":929,"mutability":"mutable","name":"underlyingBalanceRaw","nameLocation":"23069:20:7","nodeType":"VariableDeclaration","scope":933,"src":"23061:28:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":928,"name":"uint256","nodeType":"ElementaryTypeName","src":"23061:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":931,"mutability":"mutable","name":"wrappedBalanceRaw","nameLocation":"23099:17:7","nodeType":"VariableDeclaration","scope":933,"src":"23091:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":930,"name":"uint256","nodeType":"ElementaryTypeName","src":"23091:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23060:57:7"},"scope":941,"src":"22975:143:7","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":934,"nodeType":"StructuredDocumentation","src":"23342:202:7","text":" @notice Sets a new Authorizer for the Vault.\n @dev This is a permissioned call. Emits an `AuthorizerChanged` event.\n @param newAuthorizer The address of the new authorizer"},"functionSelector":"058a628f","id":940,"implemented":false,"kind":"function","modifiers":[],"name":"setAuthorizer","nameLocation":"23558:13:7","nodeType":"FunctionDefinition","parameters":{"id":938,"nodeType":"ParameterList","parameters":[{"constant":false,"id":937,"mutability":"mutable","name":"newAuthorizer","nameLocation":"23584:13:7","nodeType":"VariableDeclaration","scope":940,"src":"23572:25:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"},"typeName":{"id":936,"nodeType":"UserDefinedTypeName","pathNode":{"id":935,"name":"IAuthorizer","nameLocations":["23572:11:7"],"nodeType":"IdentifierPath","referencedDeclaration":73,"src":"23572:11:7"},"referencedDeclaration":73,"src":"23572:11:7","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"23571:27:7"},"returnParameters":{"id":939,"nodeType":"ParameterList","parameters":[],"src":"23607:0:7"},"scope":941,"src":"23549:59:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":942,"src":"586:23024:7","usedErrors":[],"usedEvents":[]}],"src":"46:23565:7"},"id":7},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","exportedSymbols":{"IERC20":[6591],"IERC4626":[6513],"IVaultErrors":[1308]},"id":1309,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":943,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:8"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":945,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1309,"sourceUnit":6514,"src":"72:75:8","symbolAliases":[{"foreign":{"id":944,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6513,"src":"81:8:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":947,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1309,"sourceUnit":6592,"src":"148:72:8","symbolAliases":[{"foreign":{"id":946,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6591,"src":"157:6:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultErrors","contractDependencies":[],"contractKind":"interface","documentation":{"id":948,"nodeType":"StructuredDocumentation","src":"222:94:8","text":"@notice Errors are declared inside an interface (namespace) to improve DX with Typechain."},"fullyImplemented":true,"id":1308,"linearizedBaseContracts":[1308],"name":"IVaultErrors","nameLocation":"326:12:8","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":949,"nodeType":"StructuredDocumentation","src":"576:149:8","text":" @notice A pool has already been registered. `registerPool` may only be called once.\n @param pool The already registered pool"},"errorSelector":"db771c80","id":953,"name":"PoolAlreadyRegistered","nameLocation":"736:21:8","nodeType":"ErrorDefinition","parameters":{"id":952,"nodeType":"ParameterList","parameters":[{"constant":false,"id":951,"mutability":"mutable","name":"pool","nameLocation":"766:4:8","nodeType":"VariableDeclaration","scope":953,"src":"758:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":950,"name":"address","nodeType":"ElementaryTypeName","src":"758:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"757:14:8"},"src":"730:42:8"},{"documentation":{"id":954,"nodeType":"StructuredDocumentation","src":"778:149:8","text":" @notice A pool has already been initialized. `initialize` may only be called once.\n @param pool The already initialized pool"},"errorSelector":"218e3747","id":958,"name":"PoolAlreadyInitialized","nameLocation":"938:22:8","nodeType":"ErrorDefinition","parameters":{"id":957,"nodeType":"ParameterList","parameters":[{"constant":false,"id":956,"mutability":"mutable","name":"pool","nameLocation":"969:4:8","nodeType":"VariableDeclaration","scope":958,"src":"961:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":955,"name":"address","nodeType":"ElementaryTypeName","src":"961:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"960:14:8"},"src":"932:43:8"},{"documentation":{"id":959,"nodeType":"StructuredDocumentation","src":"981:99:8","text":" @notice A pool has not been registered.\n @param pool The unregistered pool"},"errorSelector":"9e51bd5c","id":963,"name":"PoolNotRegistered","nameLocation":"1091:17:8","nodeType":"ErrorDefinition","parameters":{"id":962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":961,"mutability":"mutable","name":"pool","nameLocation":"1117:4:8","nodeType":"VariableDeclaration","scope":963,"src":"1109:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":960,"name":"address","nodeType":"ElementaryTypeName","src":"1109:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1108:14:8"},"src":"1085:38:8"},{"documentation":{"id":964,"nodeType":"StructuredDocumentation","src":"1129:112:8","text":" @notice A referenced pool has not been initialized.\n @param pool The uninitialized pool"},"errorSelector":"4bdace13","id":968,"name":"PoolNotInitialized","nameLocation":"1252:18:8","nodeType":"ErrorDefinition","parameters":{"id":967,"nodeType":"ParameterList","parameters":[{"constant":false,"id":966,"mutability":"mutable","name":"pool","nameLocation":"1279:4:8","nodeType":"VariableDeclaration","scope":968,"src":"1271:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":965,"name":"address","nodeType":"ElementaryTypeName","src":"1271:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1270:14:8"},"src":"1246:39:8"},{"documentation":{"id":969,"nodeType":"StructuredDocumentation","src":"1291:274:8","text":" @notice A hook contract rejected a pool on registration.\n @param poolHooksContract Address of the hook contract that rejected the pool registration\n @param pool Address of the rejected pool\n @param poolFactory Address of the pool factory"},"errorSelector":"fa93d814","id":977,"name":"HookRegistrationFailed","nameLocation":"1576:22:8","nodeType":"ErrorDefinition","parameters":{"id":976,"nodeType":"ParameterList","parameters":[{"constant":false,"id":971,"mutability":"mutable","name":"poolHooksContract","nameLocation":"1607:17:8","nodeType":"VariableDeclaration","scope":977,"src":"1599:25:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":970,"name":"address","nodeType":"ElementaryTypeName","src":"1599:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":973,"mutability":"mutable","name":"pool","nameLocation":"1634:4:8","nodeType":"VariableDeclaration","scope":977,"src":"1626:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":972,"name":"address","nodeType":"ElementaryTypeName","src":"1626:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":975,"mutability":"mutable","name":"poolFactory","nameLocation":"1648:11:8","nodeType":"VariableDeclaration","scope":977,"src":"1640:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":974,"name":"address","nodeType":"ElementaryTypeName","src":"1640:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1598:62:8"},"src":"1570:91:8"},{"documentation":{"id":978,"nodeType":"StructuredDocumentation","src":"1667:136:8","text":" @notice A token was already registered (i.e., it is a duplicate in the pool).\n @param token The duplicate token"},"errorSelector":"4f4b634e","id":983,"name":"TokenAlreadyRegistered","nameLocation":"1814:22:8","nodeType":"ErrorDefinition","parameters":{"id":982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":981,"mutability":"mutable","name":"token","nameLocation":"1844:5:8","nodeType":"VariableDeclaration","scope":983,"src":"1837:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":980,"nodeType":"UserDefinedTypeName","pathNode":{"id":979,"name":"IERC20","nameLocations":["1837:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"1837:6:8"},"referencedDeclaration":6591,"src":"1837:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1836:14:8"},"src":"1808:43:8"},{"documentation":{"id":984,"nodeType":"StructuredDocumentation","src":"1857:57:8","text":"@notice The token count is below the minimum allowed."},"errorSelector":"5ed4ba8f","id":986,"name":"MinTokens","nameLocation":"1925:9:8","nodeType":"ErrorDefinition","parameters":{"id":985,"nodeType":"ParameterList","parameters":[],"src":"1934:2:8"},"src":"1919:18:8"},{"documentation":{"id":987,"nodeType":"StructuredDocumentation","src":"1943:57:8","text":"@notice The token count is above the maximum allowed."},"errorSelector":"707bdf58","id":989,"name":"MaxTokens","nameLocation":"2011:9:8","nodeType":"ErrorDefinition","parameters":{"id":988,"nodeType":"ParameterList","parameters":[],"src":"2020:2:8"},"src":"2005:18:8"},{"documentation":{"id":990,"nodeType":"StructuredDocumentation","src":"2029:61:8","text":"@notice Invalid tokens (e.g., zero) cannot be registered."},"errorSelector":"c1ab6dc1","id":992,"name":"InvalidToken","nameLocation":"2101:12:8","nodeType":"ErrorDefinition","parameters":{"id":991,"nodeType":"ParameterList","parameters":[],"src":"2113:2:8"},"src":"2095:21:8"},{"documentation":{"id":993,"nodeType":"StructuredDocumentation","src":"2122:86:8","text":"@notice The token type given in a TokenConfig during pool registration is invalid."},"errorSelector":"a1e9dd9d","id":995,"name":"InvalidTokenType","nameLocation":"2219:16:8","nodeType":"ErrorDefinition","parameters":{"id":994,"nodeType":"ParameterList","parameters":[],"src":"2235:2:8"},"src":"2213:25:8"},{"documentation":{"id":996,"nodeType":"StructuredDocumentation","src":"2244:76:8","text":"@notice The data in a TokenConfig struct is inconsistent or unsupported."},"errorSelector":"df450632","id":998,"name":"InvalidTokenConfiguration","nameLocation":"2331:25:8","nodeType":"ErrorDefinition","parameters":{"id":997,"nodeType":"ParameterList","parameters":[],"src":"2356:2:8"},"src":"2325:34:8"},{"documentation":{"id":999,"nodeType":"StructuredDocumentation","src":"2365:64:8","text":"@notice Tokens with more than 18 decimals are not supported."},"errorSelector":"686d3607","id":1001,"name":"InvalidTokenDecimals","nameLocation":"2440:20:8","nodeType":"ErrorDefinition","parameters":{"id":1000,"nodeType":"ParameterList","parameters":[],"src":"2460:2:8"},"src":"2434:29:8"},{"documentation":{"id":1002,"nodeType":"StructuredDocumentation","src":"2469:287:8","text":" @notice The token list passed into an operation does not match the pool tokens in the pool.\n @param pool Address of the pool\n @param expectedToken The correct token at a given index in the pool\n @param actualToken The actual token found at that index"},"errorSelector":"ffe261a1","id":1010,"name":"TokensMismatch","nameLocation":"2767:14:8","nodeType":"ErrorDefinition","parameters":{"id":1009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1004,"mutability":"mutable","name":"pool","nameLocation":"2790:4:8","nodeType":"VariableDeclaration","scope":1010,"src":"2782:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1003,"name":"address","nodeType":"ElementaryTypeName","src":"2782:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1006,"mutability":"mutable","name":"expectedToken","nameLocation":"2804:13:8","nodeType":"VariableDeclaration","scope":1010,"src":"2796:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1005,"name":"address","nodeType":"ElementaryTypeName","src":"2796:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1008,"mutability":"mutable","name":"actualToken","nameLocation":"2827:11:8","nodeType":"VariableDeclaration","scope":1010,"src":"2819:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1007,"name":"address","nodeType":"ElementaryTypeName","src":"2819:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2781:58:8"},"src":"2761:79:8"},{"documentation":{"id":1011,"nodeType":"StructuredDocumentation","src":"3071:85:8","text":"@notice A transient accounting operation completed with outstanding token deltas."},"errorSelector":"20f1d86d","id":1013,"name":"BalanceNotSettled","nameLocation":"3167:17:8","nodeType":"ErrorDefinition","parameters":{"id":1012,"nodeType":"ParameterList","parameters":[],"src":"3184:2:8"},"src":"3161:26:8"},{"documentation":{"id":1014,"nodeType":"StructuredDocumentation","src":"3193:97:8","text":"@notice A user called a Vault function (swap, add/remove liquidity) outside the lock context."},"errorSelector":"c09ba736","id":1016,"name":"VaultIsNotUnlocked","nameLocation":"3301:18:8","nodeType":"ErrorDefinition","parameters":{"id":1015,"nodeType":"ParameterList","parameters":[],"src":"3319:2:8"},"src":"3295:27:8"},{"documentation":{"id":1017,"nodeType":"StructuredDocumentation","src":"3328:105:8","text":"@notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert."},"errorSelector":"53f976d4","id":1019,"name":"DynamicSwapFeeHookFailed","nameLocation":"3444:24:8","nodeType":"ErrorDefinition","parameters":{"id":1018,"nodeType":"ParameterList","parameters":[],"src":"3468:2:8"},"src":"3438:33:8"},{"documentation":{"id":1020,"nodeType":"StructuredDocumentation","src":"3477:105:8","text":"@notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert."},"errorSelector":"e91e17e7","id":1022,"name":"BeforeSwapHookFailed","nameLocation":"3593:20:8","nodeType":"ErrorDefinition","parameters":{"id":1021,"nodeType":"ParameterList","parameters":[],"src":"3613:2:8"},"src":"3587:29:8"},{"documentation":{"id":1023,"nodeType":"StructuredDocumentation","src":"3622:104:8","text":"@notice The pool has returned false to the afterSwap hook, indicating the transaction should revert."},"errorSelector":"15a29dec","id":1025,"name":"AfterSwapHookFailed","nameLocation":"3737:19:8","nodeType":"ErrorDefinition","parameters":{"id":1024,"nodeType":"ParameterList","parameters":[],"src":"3756:2:8"},"src":"3731:28:8"},{"documentation":{"id":1026,"nodeType":"StructuredDocumentation","src":"3765:111:8","text":"@notice The pool has returned false to the beforeInitialize hook, indicating the transaction should revert."},"errorSelector":"60612925","id":1028,"name":"BeforeInitializeHookFailed","nameLocation":"3887:26:8","nodeType":"ErrorDefinition","parameters":{"id":1027,"nodeType":"ParameterList","parameters":[],"src":"3913:2:8"},"src":"3881:35:8"},{"documentation":{"id":1029,"nodeType":"StructuredDocumentation","src":"3922:110:8","text":"@notice The pool has returned false to the afterInitialize hook, indicating the transaction should revert."},"errorSelector":"0f23dbc6","id":1031,"name":"AfterInitializeHookFailed","nameLocation":"4043:25:8","nodeType":"ErrorDefinition","parameters":{"id":1030,"nodeType":"ParameterList","parameters":[],"src":"4068:2:8"},"src":"4037:34:8"},{"documentation":{"id":1032,"nodeType":"StructuredDocumentation","src":"4077:113:8","text":"@notice The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert."},"errorSelector":"0b2eb652","id":1034,"name":"BeforeAddLiquidityHookFailed","nameLocation":"4201:28:8","nodeType":"ErrorDefinition","parameters":{"id":1033,"nodeType":"ParameterList","parameters":[],"src":"4229:2:8"},"src":"4195:37:8"},{"documentation":{"id":1035,"nodeType":"StructuredDocumentation","src":"4238:112:8","text":"@notice The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert."},"errorSelector":"e1249165","id":1037,"name":"AfterAddLiquidityHookFailed","nameLocation":"4361:27:8","nodeType":"ErrorDefinition","parameters":{"id":1036,"nodeType":"ParameterList","parameters":[],"src":"4388:2:8"},"src":"4355:36:8"},{"documentation":{"id":1038,"nodeType":"StructuredDocumentation","src":"4397:116:8","text":"@notice The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert."},"errorSelector":"2aaf8866","id":1040,"name":"BeforeRemoveLiquidityHookFailed","nameLocation":"4524:31:8","nodeType":"ErrorDefinition","parameters":{"id":1039,"nodeType":"ParameterList","parameters":[],"src":"4555:2:8"},"src":"4518:40:8"},{"documentation":{"id":1041,"nodeType":"StructuredDocumentation","src":"4564:115:8","text":"@notice The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert."},"errorSelector":"1d3391d8","id":1043,"name":"AfterRemoveLiquidityHookFailed","nameLocation":"4690:30:8","nodeType":"ErrorDefinition","parameters":{"id":1042,"nodeType":"ParameterList","parameters":[],"src":"4720:2:8"},"src":"4684:39:8"},{"documentation":{"id":1044,"nodeType":"StructuredDocumentation","src":"4729:115:8","text":"@notice An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance)."},"errorSelector":"e5d185cf","id":1046,"name":"RouterNotTrusted","nameLocation":"4855:16:8","nodeType":"ErrorDefinition","parameters":{"id":1045,"nodeType":"ParameterList","parameters":[],"src":"4871:2:8"},"src":"4849:25:8"},{"documentation":{"id":1047,"nodeType":"StructuredDocumentation","src":"5097:47:8","text":"@notice The user tried to swap zero tokens."},"errorSelector":"57a456b7","id":1049,"name":"AmountGivenZero","nameLocation":"5155:15:8","nodeType":"ErrorDefinition","parameters":{"id":1048,"nodeType":"ParameterList","parameters":[],"src":"5170:2:8"},"src":"5149:24:8"},{"documentation":{"id":1050,"nodeType":"StructuredDocumentation","src":"5179:58:8","text":"@notice The user attempted to swap a token for itself."},"errorSelector":"a54b181d","id":1052,"name":"CannotSwapSameToken","nameLocation":"5248:19:8","nodeType":"ErrorDefinition","parameters":{"id":1051,"nodeType":"ParameterList","parameters":[],"src":"5267:2:8"},"src":"5242:28:8"},{"documentation":{"id":1053,"nodeType":"StructuredDocumentation","src":"5276:137:8","text":" @notice The user attempted to operate with a token that is not in the pool.\n @param token The unregistered token"},"errorSelector":"ddef98d7","id":1058,"name":"TokenNotRegistered","nameLocation":"5424:18:8","nodeType":"ErrorDefinition","parameters":{"id":1057,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1056,"mutability":"mutable","name":"token","nameLocation":"5450:5:8","nodeType":"VariableDeclaration","scope":1058,"src":"5443:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":1055,"nodeType":"UserDefinedTypeName","pathNode":{"id":1054,"name":"IERC20","nameLocations":["5443:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"5443:6:8"},"referencedDeclaration":6591,"src":"5443:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"5442:14:8"},"src":"5418:39:8"},{"documentation":{"id":1059,"nodeType":"StructuredDocumentation","src":"5463:215:8","text":" @notice An amount in or out has exceeded the limit specified in the swap request.\n @param amount The total amount in or out\n @param limit The amount of the limit that has been exceeded"},"errorSelector":"e2ea151b","id":1065,"name":"SwapLimit","nameLocation":"5689:9:8","nodeType":"ErrorDefinition","parameters":{"id":1064,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1061,"mutability":"mutable","name":"amount","nameLocation":"5707:6:8","nodeType":"VariableDeclaration","scope":1065,"src":"5699:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1060,"name":"uint256","nodeType":"ElementaryTypeName","src":"5699:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1063,"mutability":"mutable","name":"limit","nameLocation":"5723:5:8","nodeType":"VariableDeclaration","scope":1065,"src":"5715:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1062,"name":"uint256","nodeType":"ElementaryTypeName","src":"5715:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5698:31:8"},"src":"5683:47:8"},{"documentation":{"id":1066,"nodeType":"StructuredDocumentation","src":"5736:228:8","text":" @notice A hook adjusted amount in or out has exceeded the limit specified in the swap request.\n @param amount The total amount in or out\n @param limit The amount of the limit that has been exceeded"},"errorSelector":"cc0e4a99","id":1072,"name":"HookAdjustedSwapLimit","nameLocation":"5975:21:8","nodeType":"ErrorDefinition","parameters":{"id":1071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1068,"mutability":"mutable","name":"amount","nameLocation":"6005:6:8","nodeType":"VariableDeclaration","scope":1072,"src":"5997:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1067,"name":"uint256","nodeType":"ElementaryTypeName","src":"5997:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1070,"mutability":"mutable","name":"limit","nameLocation":"6021:5:8","nodeType":"VariableDeclaration","scope":1072,"src":"6013:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1069,"name":"uint256","nodeType":"ElementaryTypeName","src":"6013:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5996:31:8"},"src":"5969:59:8"},{"documentation":{"id":1073,"nodeType":"StructuredDocumentation","src":"6034:87:8","text":"@notice The amount given or calculated for an operation is below the minimum limit."},"errorSelector":"1ed4d118","id":1075,"name":"TradeAmountTooSmall","nameLocation":"6132:19:8","nodeType":"ErrorDefinition","parameters":{"id":1074,"nodeType":"ParameterList","parameters":[],"src":"6151:2:8"},"src":"6126:28:8"},{"documentation":{"id":1076,"nodeType":"StructuredDocumentation","src":"6381:45:8","text":"@notice Add liquidity kind not supported."},"errorSelector":"6c02b395","id":1078,"name":"InvalidAddLiquidityKind","nameLocation":"6437:23:8","nodeType":"ErrorDefinition","parameters":{"id":1077,"nodeType":"ParameterList","parameters":[],"src":"6460:2:8"},"src":"6431:32:8"},{"documentation":{"id":1079,"nodeType":"StructuredDocumentation","src":"6469:264:8","text":" @notice A required amountIn exceeds the maximum limit specified for the operation.\n @param tokenIn The incoming token\n @param amountIn The total token amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"8eda85e4","id":1088,"name":"AmountInAboveMax","nameLocation":"6744:16:8","nodeType":"ErrorDefinition","parameters":{"id":1087,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1082,"mutability":"mutable","name":"tokenIn","nameLocation":"6768:7:8","nodeType":"VariableDeclaration","scope":1088,"src":"6761:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":1081,"nodeType":"UserDefinedTypeName","pathNode":{"id":1080,"name":"IERC20","nameLocations":["6761:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"6761:6:8"},"referencedDeclaration":6591,"src":"6761:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1084,"mutability":"mutable","name":"amountIn","nameLocation":"6785:8:8","nodeType":"VariableDeclaration","scope":1088,"src":"6777:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1083,"name":"uint256","nodeType":"ElementaryTypeName","src":"6777:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1086,"mutability":"mutable","name":"maxAmountIn","nameLocation":"6803:11:8","nodeType":"VariableDeclaration","scope":1088,"src":"6795:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1085,"name":"uint256","nodeType":"ElementaryTypeName","src":"6795:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6760:55:8"},"src":"6738:78:8"},{"documentation":{"id":1089,"nodeType":"StructuredDocumentation","src":"6822:269:8","text":" @notice A hook adjusted amountIn exceeds the maximum limit specified for the operation.\n @param tokenIn The incoming token\n @param amountIn The total token amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"cefa3afa","id":1098,"name":"HookAdjustedAmountInAboveMax","nameLocation":"7102:28:8","nodeType":"ErrorDefinition","parameters":{"id":1097,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1092,"mutability":"mutable","name":"tokenIn","nameLocation":"7138:7:8","nodeType":"VariableDeclaration","scope":1098,"src":"7131:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":1091,"nodeType":"UserDefinedTypeName","pathNode":{"id":1090,"name":"IERC20","nameLocations":["7131:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"7131:6:8"},"referencedDeclaration":6591,"src":"7131:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1094,"mutability":"mutable","name":"amountIn","nameLocation":"7155:8:8","nodeType":"VariableDeclaration","scope":1098,"src":"7147:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1093,"name":"uint256","nodeType":"ElementaryTypeName","src":"7147:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1096,"mutability":"mutable","name":"maxAmountIn","nameLocation":"7173:11:8","nodeType":"VariableDeclaration","scope":1098,"src":"7165:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1095,"name":"uint256","nodeType":"ElementaryTypeName","src":"7165:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7130:55:8"},"src":"7096:90:8"},{"documentation":{"id":1099,"nodeType":"StructuredDocumentation","src":"7192:245:8","text":" @notice The BPT amount received from adding liquidity is below the minimum specified for the operation.\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"8d261d5d","id":1105,"name":"BptAmountOutBelowMin","nameLocation":"7448:20:8","nodeType":"ErrorDefinition","parameters":{"id":1104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1101,"mutability":"mutable","name":"amountOut","nameLocation":"7477:9:8","nodeType":"VariableDeclaration","scope":1105,"src":"7469:17:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1100,"name":"uint256","nodeType":"ElementaryTypeName","src":"7469:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1103,"mutability":"mutable","name":"minAmountOut","nameLocation":"7496:12:8","nodeType":"VariableDeclaration","scope":1105,"src":"7488:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1102,"name":"uint256","nodeType":"ElementaryTypeName","src":"7488:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7468:41:8"},"src":"7442:68:8"},{"documentation":{"id":1106,"nodeType":"StructuredDocumentation","src":"7516:75:8","text":"@notice Pool does not support adding liquidity with a customized input."},"errorSelector":"4876c0bc","id":1108,"name":"DoesNotSupportAddLiquidityCustom","nameLocation":"7602:32:8","nodeType":"ErrorDefinition","parameters":{"id":1107,"nodeType":"ParameterList","parameters":[],"src":"7634:2:8"},"src":"7596:41:8"},{"documentation":{"id":1109,"nodeType":"StructuredDocumentation","src":"7643:68:8","text":"@notice Pool does not support adding liquidity through donation."},"errorSelector":"efe0265d","id":1111,"name":"DoesNotSupportDonation","nameLocation":"7722:22:8","nodeType":"ErrorDefinition","parameters":{"id":1110,"nodeType":"ParameterList","parameters":[],"src":"7744:2:8"},"src":"7716:31:8"},{"documentation":{"id":1112,"nodeType":"StructuredDocumentation","src":"7977:48:8","text":"@notice Remove liquidity kind not supported."},"errorSelector":"137a9a39","id":1114,"name":"InvalidRemoveLiquidityKind","nameLocation":"8036:26:8","nodeType":"ErrorDefinition","parameters":{"id":1113,"nodeType":"ParameterList","parameters":[],"src":"8062:2:8"},"src":"8030:35:8"},{"documentation":{"id":1115,"nodeType":"StructuredDocumentation","src":"8071:269:8","text":" @notice The actual amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"2f785e46","id":1124,"name":"AmountOutBelowMin","nameLocation":"8351:17:8","nodeType":"ErrorDefinition","parameters":{"id":1123,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1118,"mutability":"mutable","name":"tokenOut","nameLocation":"8376:8:8","nodeType":"VariableDeclaration","scope":1124,"src":"8369:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":1117,"nodeType":"UserDefinedTypeName","pathNode":{"id":1116,"name":"IERC20","nameLocations":["8369:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"8369:6:8"},"referencedDeclaration":6591,"src":"8369:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1120,"mutability":"mutable","name":"amountOut","nameLocation":"8394:9:8","nodeType":"VariableDeclaration","scope":1124,"src":"8386:17:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1119,"name":"uint256","nodeType":"ElementaryTypeName","src":"8386:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1122,"mutability":"mutable","name":"minAmountOut","nameLocation":"8413:12:8","nodeType":"VariableDeclaration","scope":1124,"src":"8405:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1121,"name":"uint256","nodeType":"ElementaryTypeName","src":"8405:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8368:58:8"},"src":"8345:82:8"},{"documentation":{"id":1125,"nodeType":"StructuredDocumentation","src":"8433:276:8","text":" @notice The hook adjusted amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"fbd8a724","id":1134,"name":"HookAdjustedAmountOutBelowMin","nameLocation":"8720:29:8","nodeType":"ErrorDefinition","parameters":{"id":1133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1128,"mutability":"mutable","name":"tokenOut","nameLocation":"8757:8:8","nodeType":"VariableDeclaration","scope":1134,"src":"8750:15:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":1127,"nodeType":"UserDefinedTypeName","pathNode":{"id":1126,"name":"IERC20","nameLocations":["8750:6:8"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"8750:6:8"},"referencedDeclaration":6591,"src":"8750:6:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1130,"mutability":"mutable","name":"amountOut","nameLocation":"8775:9:8","nodeType":"VariableDeclaration","scope":1134,"src":"8767:17:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1129,"name":"uint256","nodeType":"ElementaryTypeName","src":"8767:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1132,"mutability":"mutable","name":"minAmountOut","nameLocation":"8794:12:8","nodeType":"VariableDeclaration","scope":1134,"src":"8786:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1131,"name":"uint256","nodeType":"ElementaryTypeName","src":"8786:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8749:58:8"},"src":"8714:94:8"},{"documentation":{"id":1135,"nodeType":"StructuredDocumentation","src":"8814:228:8","text":" @notice The required BPT amount in exceeds the maximum limit specified for the operation.\n @param amountIn The total BPT amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"31d38e0b","id":1141,"name":"BptAmountInAboveMax","nameLocation":"9053:19:8","nodeType":"ErrorDefinition","parameters":{"id":1140,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1137,"mutability":"mutable","name":"amountIn","nameLocation":"9081:8:8","nodeType":"VariableDeclaration","scope":1141,"src":"9073:16:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1136,"name":"uint256","nodeType":"ElementaryTypeName","src":"9073:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1139,"mutability":"mutable","name":"maxAmountIn","nameLocation":"9099:11:8","nodeType":"VariableDeclaration","scope":1141,"src":"9091:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1138,"name":"uint256","nodeType":"ElementaryTypeName","src":"9091:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9072:39:8"},"src":"9047:65:8"},{"documentation":{"id":1142,"nodeType":"StructuredDocumentation","src":"9118:77:8","text":"@notice Pool does not support removing liquidity with a customized input."},"errorSelector":"cf0a95c0","id":1144,"name":"DoesNotSupportRemoveLiquidityCustom","nameLocation":"9206:35:8","nodeType":"ErrorDefinition","parameters":{"id":1143,"nodeType":"ParameterList","parameters":[],"src":"9241:2:8"},"src":"9200:44:8"},{"documentation":{"id":1145,"nodeType":"StructuredDocumentation","src":"9463:332:8","text":" @notice Error raised when there is an overflow in the fee calculation.\n @dev This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole\n (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee\n percentages in the Vault."},"errorSelector":"4c69ac5d","id":1147,"name":"ProtocolFeesExceedTotalCollected","nameLocation":"9806:32:8","nodeType":"ErrorDefinition","parameters":{"id":1146,"nodeType":"ParameterList","parameters":[],"src":"9838:2:8"},"src":"9800:41:8"},{"documentation":{"id":1148,"nodeType":"StructuredDocumentation","src":"9847:430:8","text":" @notice Error raised when the swap fee percentage is less than the minimum allowed value.\n @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n if it is below the minimum value returned by the pool.\n Pools with dynamic fees do not check these limits."},"errorSelector":"bfb20688","id":1150,"name":"SwapFeePercentageTooLow","nameLocation":"10288:23:8","nodeType":"ErrorDefinition","parameters":{"id":1149,"nodeType":"ParameterList","parameters":[],"src":"10311:2:8"},"src":"10282:32:8"},{"documentation":{"id":1151,"nodeType":"StructuredDocumentation","src":"10320:433:8","text":" @notice Error raised when the swap fee percentage is greater than the maximum allowed value.\n @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n if it is above the maximum value returned by the pool.\n Pools with dynamic fees do not check these limits."},"errorSelector":"7f47834b","id":1153,"name":"SwapFeePercentageTooHigh","nameLocation":"10764:24:8","nodeType":"ErrorDefinition","parameters":{"id":1152,"nodeType":"ParameterList","parameters":[],"src":"10788:2:8"},"src":"10758:33:8"},{"documentation":{"id":1154,"nodeType":"StructuredDocumentation","src":"10797:646:8","text":" @notice Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\n @dev Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between\n the aggregate fee calculated here and that stored in the Vault."},"errorSelector":"833fb3ce","id":1156,"name":"FeePrecisionTooHigh","nameLocation":"11454:19:8","nodeType":"ErrorDefinition","parameters":{"id":1155,"nodeType":"ParameterList","parameters":[],"src":"11473:2:8"},"src":"11448:28:8"},{"documentation":{"id":1157,"nodeType":"StructuredDocumentation","src":"11482:107:8","text":"@notice A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei)."},"errorSelector":"746e5940","id":1159,"name":"PercentageAboveMax","nameLocation":"11600:18:8","nodeType":"ErrorDefinition","parameters":{"id":1158,"nodeType":"ParameterList","parameters":[],"src":"11618:2:8"},"src":"11594:27:8"},{"documentation":{"id":1160,"nodeType":"StructuredDocumentation","src":"11842:78:8","text":"@notice A user tried to execute a query operation when they were disabled."},"errorSelector":"7a198886","id":1162,"name":"QueriesDisabled","nameLocation":"11931:15:8","nodeType":"ErrorDefinition","parameters":{"id":1161,"nodeType":"ParameterList","parameters":[],"src":"11946:2:8"},"src":"11925:24:8"},{"documentation":{"id":1163,"nodeType":"StructuredDocumentation","src":"11955:84:8","text":"@notice An admin tried to re-enable queries, but they were disabled permanently."},"errorSelector":"069f8cbc","id":1165,"name":"QueriesDisabledPermanently","nameLocation":"12050:26:8","nodeType":"ErrorDefinition","parameters":{"id":1164,"nodeType":"ParameterList","parameters":[],"src":"12076:2:8"},"src":"12044:35:8"},{"documentation":{"id":1166,"nodeType":"StructuredDocumentation","src":"12302:104:8","text":" @notice Cannot enable recovery mode when already enabled.\n @param pool The pool"},"errorSelector":"346d7607","id":1170,"name":"PoolInRecoveryMode","nameLocation":"12417:18:8","nodeType":"ErrorDefinition","parameters":{"id":1169,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1168,"mutability":"mutable","name":"pool","nameLocation":"12444:4:8","nodeType":"VariableDeclaration","scope":1170,"src":"12436:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1167,"name":"address","nodeType":"ElementaryTypeName","src":"12436:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12435:14:8"},"src":"12411:39:8"},{"documentation":{"id":1171,"nodeType":"StructuredDocumentation","src":"12456:101:8","text":" @notice Cannot disable recovery mode when not enabled.\n @param pool The pool"},"errorSelector":"ef029adf","id":1175,"name":"PoolNotInRecoveryMode","nameLocation":"12568:21:8","nodeType":"ErrorDefinition","parameters":{"id":1174,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1173,"mutability":"mutable","name":"pool","nameLocation":"12598:4:8","nodeType":"VariableDeclaration","scope":1175,"src":"12590:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1172,"name":"address","nodeType":"ElementaryTypeName","src":"12590:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12589:14:8"},"src":"12562:42:8"},{"documentation":{"id":1176,"nodeType":"StructuredDocumentation","src":"12828:206:8","text":" @notice Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\n @param sender The account attempting to call a permissioned function"},"errorSelector":"089676d5","id":1180,"name":"SenderIsNotVault","nameLocation":"13045:16:8","nodeType":"ErrorDefinition","parameters":{"id":1179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1178,"mutability":"mutable","name":"sender","nameLocation":"13070:6:8","nodeType":"VariableDeclaration","scope":1180,"src":"13062:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1177,"name":"address","nodeType":"ElementaryTypeName","src":"13062:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13061:16:8"},"src":"13039:39:8"},{"documentation":{"id":1181,"nodeType":"StructuredDocumentation","src":"13303:79:8","text":"@notice The caller specified a pause window period longer than the maximum."},"errorSelector":"cc0e8fe5","id":1183,"name":"VaultPauseWindowDurationTooLarge","nameLocation":"13393:32:8","nodeType":"ErrorDefinition","parameters":{"id":1182,"nodeType":"ParameterList","parameters":[],"src":"13425:2:8"},"src":"13387:41:8"},{"documentation":{"id":1184,"nodeType":"StructuredDocumentation","src":"13434:73:8","text":"@notice The caller specified a buffer period longer than the maximum."},"errorSelector":"9ea4efee","id":1186,"name":"PauseBufferPeriodDurationTooLarge","nameLocation":"13518:33:8","nodeType":"ErrorDefinition","parameters":{"id":1185,"nodeType":"ParameterList","parameters":[],"src":"13551:2:8"},"src":"13512:42:8"},{"documentation":{"id":1187,"nodeType":"StructuredDocumentation","src":"13560:76:8","text":"@notice A user tried to perform an operation while the Vault was paused."},"errorSelector":"da9f8b34","id":1189,"name":"VaultPaused","nameLocation":"13647:11:8","nodeType":"ErrorDefinition","parameters":{"id":1188,"nodeType":"ParameterList","parameters":[],"src":"13658:2:8"},"src":"13641:20:8"},{"documentation":{"id":1190,"nodeType":"StructuredDocumentation","src":"13667:73:8","text":"@notice Governance tried to unpause the Vault when it was not paused."},"errorSelector":"f7ff4dca","id":1192,"name":"VaultNotPaused","nameLocation":"13751:14:8","nodeType":"ErrorDefinition","parameters":{"id":1191,"nodeType":"ParameterList","parameters":[],"src":"13765:2:8"},"src":"13745:23:8"},{"documentation":{"id":1193,"nodeType":"StructuredDocumentation","src":"13774:79:8","text":"@notice Governance tried to pause the Vault after the pause period expired."},"errorSelector":"0e4460b7","id":1195,"name":"VaultPauseWindowExpired","nameLocation":"13864:23:8","nodeType":"ErrorDefinition","parameters":{"id":1194,"nodeType":"ParameterList","parameters":[],"src":"13887:2:8"},"src":"13858:32:8"},{"documentation":{"id":1196,"nodeType":"StructuredDocumentation","src":"13896:123:8","text":" @notice A user tried to perform an operation involving a paused Pool.\n @param pool The paused pool"},"errorSelector":"d971f597","id":1200,"name":"PoolPaused","nameLocation":"14030:10:8","nodeType":"ErrorDefinition","parameters":{"id":1199,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1198,"mutability":"mutable","name":"pool","nameLocation":"14049:4:8","nodeType":"VariableDeclaration","scope":1200,"src":"14041:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1197,"name":"address","nodeType":"ElementaryTypeName","src":"14041:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14040:14:8"},"src":"14024:31:8"},{"documentation":{"id":1201,"nodeType":"StructuredDocumentation","src":"14061:124:8","text":" @notice Governance tried to unpause the Pool when it was not paused.\n @param pool The unpaused pool"},"errorSelector":"fdcd6894","id":1205,"name":"PoolNotPaused","nameLocation":"14196:13:8","nodeType":"ErrorDefinition","parameters":{"id":1204,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1203,"mutability":"mutable","name":"pool","nameLocation":"14218:4:8","nodeType":"VariableDeclaration","scope":1205,"src":"14210:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1202,"name":"address","nodeType":"ElementaryTypeName","src":"14210:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14209:14:8"},"src":"14190:34:8"},{"documentation":{"id":1206,"nodeType":"StructuredDocumentation","src":"14230:119:8","text":" @notice Governance tried to pause a Pool after the pause period expired.\n @param pool The pool"},"errorSelector":"eb5a1217","id":1210,"name":"PoolPauseWindowExpired","nameLocation":"14360:22:8","nodeType":"ErrorDefinition","parameters":{"id":1209,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1208,"mutability":"mutable","name":"pool","nameLocation":"14391:4:8","nodeType":"VariableDeclaration","scope":1210,"src":"14383:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1207,"name":"address","nodeType":"ElementaryTypeName","src":"14383:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14382:14:8"},"src":"14354:43:8"},{"documentation":{"id":1211,"nodeType":"StructuredDocumentation","src":"14628:163:8","text":" @notice The buffer for the given wrapped token was already initialized.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"1690fa40","id":1216,"name":"BufferAlreadyInitialized","nameLocation":"14802:24:8","nodeType":"ErrorDefinition","parameters":{"id":1215,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1214,"mutability":"mutable","name":"wrappedToken","nameLocation":"14836:12:8","nodeType":"VariableDeclaration","scope":1216,"src":"14827:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"},"typeName":{"id":1213,"nodeType":"UserDefinedTypeName","pathNode":{"id":1212,"name":"IERC4626","nameLocations":["14827:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":6513,"src":"14827:8:8"},"referencedDeclaration":6513,"src":"14827:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"14826:23:8"},"src":"14796:54:8"},{"documentation":{"id":1217,"nodeType":"StructuredDocumentation","src":"14856:159:8","text":" @notice The buffer for the given wrapped token was not initialized.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"85f41299","id":1222,"name":"BufferNotInitialized","nameLocation":"15026:20:8","nodeType":"ErrorDefinition","parameters":{"id":1221,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1220,"mutability":"mutable","name":"wrappedToken","nameLocation":"15056:12:8","nodeType":"VariableDeclaration","scope":1222,"src":"15047:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"},"typeName":{"id":1219,"nodeType":"UserDefinedTypeName","pathNode":{"id":1218,"name":"IERC4626","nameLocations":["15047:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":6513,"src":"15047:8:8"},"referencedDeclaration":6513,"src":"15047:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"15046:23:8"},"src":"15020:50:8"},{"documentation":{"id":1223,"nodeType":"StructuredDocumentation","src":"15076:90:8","text":"@notice The user is trying to remove more than their allocated shares from the buffer."},"errorSelector":"98c5dbd6","id":1225,"name":"NotEnoughBufferShares","nameLocation":"15177:21:8","nodeType":"ErrorDefinition","parameters":{"id":1224,"nodeType":"ParameterList","parameters":[],"src":"15198:2:8"},"src":"15171:30:8"},{"documentation":{"id":1226,"nodeType":"StructuredDocumentation","src":"15207:436:8","text":" @notice The wrapped token asset does not match the underlying token.\n @dev This should never happen, but a malicious wrapper contract might not return the correct address.\n Legitimate wrapper contracts should make the asset a constant or immutable value.\n @param wrappedToken The wrapped token corresponding to the buffer\n @param underlyingToken The underlying token returned by `asset`"},"errorSelector":"36b18d09","id":1233,"name":"WrongUnderlyingToken","nameLocation":"15654:20:8","nodeType":"ErrorDefinition","parameters":{"id":1232,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1229,"mutability":"mutable","name":"wrappedToken","nameLocation":"15684:12:8","nodeType":"VariableDeclaration","scope":1233,"src":"15675:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"},"typeName":{"id":1228,"nodeType":"UserDefinedTypeName","pathNode":{"id":1227,"name":"IERC4626","nameLocations":["15675:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":6513,"src":"15675:8:8"},"referencedDeclaration":6513,"src":"15675:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1231,"mutability":"mutable","name":"underlyingToken","nameLocation":"15706:15:8","nodeType":"VariableDeclaration","scope":1233,"src":"15698:23:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1230,"name":"address","nodeType":"ElementaryTypeName","src":"15698:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15674:48:8"},"src":"15648:75:8"},{"documentation":{"id":1234,"nodeType":"StructuredDocumentation","src":"15729:322:8","text":" @notice A wrapped token reported the zero address as its underlying token asset.\n @dev This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to\n re-initialize the buffer).\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"d407f9c5","id":1239,"name":"InvalidUnderlyingToken","nameLocation":"16062:22:8","nodeType":"ErrorDefinition","parameters":{"id":1238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1237,"mutability":"mutable","name":"wrappedToken","nameLocation":"16094:12:8","nodeType":"VariableDeclaration","scope":1239,"src":"16085:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"},"typeName":{"id":1236,"nodeType":"UserDefinedTypeName","pathNode":{"id":1235,"name":"IERC4626","nameLocations":["16085:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":6513,"src":"16085:8:8"},"referencedDeclaration":6513,"src":"16085:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16084:23:8"},"src":"16056:52:8"},{"documentation":{"id":1240,"nodeType":"StructuredDocumentation","src":"16114:183:8","text":" @notice The amount given to wrap/unwrap was too small, which can introduce rounding issues.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"18fe7385","id":1245,"name":"WrapAmountTooSmall","nameLocation":"16308:18:8","nodeType":"ErrorDefinition","parameters":{"id":1244,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1243,"mutability":"mutable","name":"wrappedToken","nameLocation":"16336:12:8","nodeType":"VariableDeclaration","scope":1245,"src":"16327:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"},"typeName":{"id":1242,"nodeType":"UserDefinedTypeName","pathNode":{"id":1241,"name":"IERC4626","nameLocations":["16327:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":6513,"src":"16327:8:8"},"referencedDeclaration":6513,"src":"16327:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16326:23:8"},"src":"16302:48:8"},{"documentation":{"id":1246,"nodeType":"StructuredDocumentation","src":"16356:70:8","text":"@notice Buffer operation attempted while vault buffers are paused."},"errorSelector":"0f27df09","id":1248,"name":"VaultBuffersArePaused","nameLocation":"16437:21:8","nodeType":"ErrorDefinition","parameters":{"id":1247,"nodeType":"ParameterList","parameters":[],"src":"16458:2:8"},"src":"16431:30:8"},{"documentation":{"id":1249,"nodeType":"StructuredDocumentation","src":"16467:58:8","text":"@notice Buffer shares were minted to the zero address."},"errorSelector":"dbe6b10e","id":1251,"name":"BufferSharesInvalidReceiver","nameLocation":"16536:27:8","nodeType":"ErrorDefinition","parameters":{"id":1250,"nodeType":"ParameterList","parameters":[],"src":"16563:2:8"},"src":"16530:36:8"},{"documentation":{"id":1252,"nodeType":"StructuredDocumentation","src":"16572:60:8","text":"@notice Buffer shares were burned from the zero address."},"errorSelector":"586d06df","id":1254,"name":"BufferSharesInvalidOwner","nameLocation":"16643:24:8","nodeType":"ErrorDefinition","parameters":{"id":1253,"nodeType":"ParameterList","parameters":[],"src":"16667:2:8"},"src":"16637:33:8"},{"documentation":{"id":1255,"nodeType":"StructuredDocumentation","src":"16676:173:8","text":" @notice The total supply of a buffer can't be lower than the absolute minimum.\n @param totalSupply The total supply value that was below the minimum"},"errorSelector":"34bdbfaa","id":1259,"name":"BufferTotalSupplyTooLow","nameLocation":"16860:23:8","nodeType":"ErrorDefinition","parameters":{"id":1258,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1257,"mutability":"mutable","name":"totalSupply","nameLocation":"16892:11:8","nodeType":"VariableDeclaration","scope":1259,"src":"16884:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1256,"name":"uint256","nodeType":"ElementaryTypeName","src":"16884:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16883:21:8"},"src":"16854:51:8"},{"documentation":{"id":1260,"nodeType":"StructuredDocumentation","src":"16911:97:8","text":"@dev A wrap/unwrap operation consumed more or returned less underlying tokens than it should."},"errorSelector":"1c6a5375","id":1269,"name":"NotEnoughUnderlying","nameLocation":"17019:19:8","nodeType":"ErrorDefinition","parameters":{"id":1268,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1263,"mutability":"mutable","name":"wrappedToken","nameLocation":"17048:12:8","nodeType":"VariableDeclaration","scope":1269,"src":"17039:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"},"typeName":{"id":1262,"nodeType":"UserDefinedTypeName","pathNode":{"id":1261,"name":"IERC4626","nameLocations":["17039:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":6513,"src":"17039:8:8"},"referencedDeclaration":6513,"src":"17039:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1265,"mutability":"mutable","name":"expectedUnderlyingAmount","nameLocation":"17070:24:8","nodeType":"VariableDeclaration","scope":1269,"src":"17062:32:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1264,"name":"uint256","nodeType":"ElementaryTypeName","src":"17062:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1267,"mutability":"mutable","name":"actualUnderlyingAmount","nameLocation":"17104:22:8","nodeType":"VariableDeclaration","scope":1269,"src":"17096:30:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1266,"name":"uint256","nodeType":"ElementaryTypeName","src":"17096:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17038:89:8"},"src":"17013:115:8"},{"documentation":{"id":1270,"nodeType":"StructuredDocumentation","src":"17134:94:8","text":"@dev A wrap/unwrap operation consumed more or returned less wrapped tokens than it should."},"errorSelector":"1149424d","id":1279,"name":"NotEnoughWrapped","nameLocation":"17239:16:8","nodeType":"ErrorDefinition","parameters":{"id":1278,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1273,"mutability":"mutable","name":"wrappedToken","nameLocation":"17265:12:8","nodeType":"VariableDeclaration","scope":1279,"src":"17256:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"},"typeName":{"id":1272,"nodeType":"UserDefinedTypeName","pathNode":{"id":1271,"name":"IERC4626","nameLocations":["17256:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":6513,"src":"17256:8:8"},"referencedDeclaration":6513,"src":"17256:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1275,"mutability":"mutable","name":"expectedWrappedAmount","nameLocation":"17287:21:8","nodeType":"VariableDeclaration","scope":1279,"src":"17279:29:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1274,"name":"uint256","nodeType":"ElementaryTypeName","src":"17279:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1277,"mutability":"mutable","name":"actualWrappedAmount","nameLocation":"17318:19:8","nodeType":"VariableDeclaration","scope":1279,"src":"17310:27:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1276,"name":"uint256","nodeType":"ElementaryTypeName","src":"17310:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17255:83:8"},"src":"17233:106:8"},{"documentation":{"id":1280,"nodeType":"StructuredDocumentation","src":"17345:76:8","text":"@dev Shares issued during initialization are below the requested amount."},"errorSelector":"da0cb07e","id":1286,"name":"IssuedSharesBelowMin","nameLocation":"17432:20:8","nodeType":"ErrorDefinition","parameters":{"id":1285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1282,"mutability":"mutable","name":"issuedShares","nameLocation":"17461:12:8","nodeType":"VariableDeclaration","scope":1286,"src":"17453:20:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1281,"name":"uint256","nodeType":"ElementaryTypeName","src":"17453:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1284,"mutability":"mutable","name":"minIssuedShares","nameLocation":"17483:15:8","nodeType":"VariableDeclaration","scope":1286,"src":"17475:23:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1283,"name":"uint256","nodeType":"ElementaryTypeName","src":"17475:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17452:47:8"},"src":"17426:74:8"},{"documentation":{"id":1287,"nodeType":"StructuredDocumentation","src":"17727:87:8","text":"@notice Pool does not support adding / removing liquidity with an unbalanced input."},"errorSelector":"d4f5779c","id":1289,"name":"DoesNotSupportUnbalancedLiquidity","nameLocation":"17825:33:8","nodeType":"ErrorDefinition","parameters":{"id":1288,"nodeType":"ParameterList","parameters":[],"src":"17858:2:8"},"src":"17819:42:8"},{"documentation":{"id":1290,"nodeType":"StructuredDocumentation","src":"17867:48:8","text":"@notice The contract should not receive ETH."},"errorSelector":"f2238896","id":1292,"name":"CannotReceiveEth","nameLocation":"17926:16:8","nodeType":"ErrorDefinition","parameters":{"id":1291,"nodeType":"ParameterList","parameters":[],"src":"17942:2:8"},"src":"17920:25:8"},{"documentation":{"id":1293,"nodeType":"StructuredDocumentation","src":"17951:156:8","text":" @notice The `VaultExtension` contract was called by an account directly.\n @dev It can only be called by the Vault via delegatecall."},"errorSelector":"9fd25b36","id":1295,"name":"NotVaultDelegateCall","nameLocation":"18118:20:8","nodeType":"ErrorDefinition","parameters":{"id":1294,"nodeType":"ParameterList","parameters":[],"src":"18138:2:8"},"src":"18112:29:8"},{"documentation":{"id":1296,"nodeType":"StructuredDocumentation","src":"18147:89:8","text":"@notice The `VaultExtension` contract was configured with an incorrect Vault address."},"errorSelector":"1ab9d9d0","id":1298,"name":"WrongVaultExtensionDeployment","nameLocation":"18247:29:8","nodeType":"ErrorDefinition","parameters":{"id":1297,"nodeType":"ParameterList","parameters":[],"src":"18276:2:8"},"src":"18241:38:8"},{"documentation":{"id":1299,"nodeType":"StructuredDocumentation","src":"18285:96:8","text":"@notice The `ProtocolFeeController` contract was configured with an incorrect Vault address."},"errorSelector":"1bbe95c7","id":1301,"name":"WrongProtocolFeeControllerDeployment","nameLocation":"18392:36:8","nodeType":"ErrorDefinition","parameters":{"id":1300,"nodeType":"ParameterList","parameters":[],"src":"18428:2:8"},"src":"18386:45:8"},{"documentation":{"id":1302,"nodeType":"StructuredDocumentation","src":"18437:85:8","text":"@notice The `VaultAdmin` contract was configured with an incorrect Vault address."},"errorSelector":"82cc28b6","id":1304,"name":"WrongVaultAdminDeployment","nameLocation":"18533:25:8","nodeType":"ErrorDefinition","parameters":{"id":1303,"nodeType":"ParameterList","parameters":[],"src":"18558:2:8"},"src":"18527:34:8"},{"documentation":{"id":1305,"nodeType":"StructuredDocumentation","src":"18567:54:8","text":"@notice Quote reverted with a reserved error code."},"errorSelector":"28f95541","id":1307,"name":"QuoteResultSpoofed","nameLocation":"18632:18:8","nodeType":"ErrorDefinition","parameters":{"id":1306,"nodeType":"ParameterList","parameters":[],"src":"18650:2:8"},"src":"18626:27:8"}],"scope":1309,"src":"316:18339:8","usedErrors":[953,958,963,968,977,983,986,989,992,995,998,1001,1010,1013,1016,1019,1022,1025,1028,1031,1034,1037,1040,1043,1046,1049,1052,1058,1065,1072,1075,1078,1088,1098,1105,1108,1111,1114,1124,1134,1141,1144,1147,1150,1153,1156,1159,1162,1165,1170,1175,1180,1183,1186,1189,1192,1195,1200,1205,1210,1216,1222,1225,1233,1239,1245,1248,1251,1254,1259,1269,1279,1286,1289,1292,1295,1298,1301,1304,1307],"usedEvents":[]}],"src":"46:18610:8"},"id":8},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","exportedSymbols":{"AddLiquidityKind":[2347],"AddLiquidityParams":[2363],"AfterSwapParams":[2341],"BufferWrapOrUnwrapParams":[2402],"FEE_BITLENGTH":[2405],"FEE_SCALING_FACTOR":[2408],"HookFlags":[2167],"HooksConfig":[2191],"IAuthorizer":[73],"IERC20":[6591],"IERC4626":[6513],"IHooks":[275],"IProtocolFeeController":[613],"IRateProvider":[57],"IVaultEvents":[1547],"LiquidityManagement":[2120],"MAX_FEE_PERCENTAGE":[2411],"PoolConfig":[2145],"PoolConfigBits":[2122],"PoolData":[2269],"PoolRoleAccounts":[2217],"PoolSwapParams":[2312],"RemoveLiquidityKind":[2368],"RemoveLiquidityParams":[2384],"Rounding":[2272],"SwapKind":[2275],"SwapState":[2201],"TokenConfig":[2234],"TokenInfo":[2244],"TokenType":[2221],"VaultState":[2209],"VaultSwapParams":[2294],"WrappingDirection":[2387]},"id":1548,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1310,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:9"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":1312,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1548,"sourceUnit":6514,"src":"72:75:9","symbolAliases":[{"foreign":{"id":1311,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6513,"src":"81:8:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1314,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1548,"sourceUnit":6592,"src":"148:72:9","symbolAliases":[{"foreign":{"id":1313,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6591,"src":"157:6:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":1316,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1548,"sourceUnit":614,"src":"222:70:9","symbolAliases":[{"foreign":{"id":1315,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":613,"src":"231:22:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":1318,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1548,"sourceUnit":74,"src":"293:48:9","symbolAliases":[{"foreign":{"id":1317,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73,"src":"302:11:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"./IHooks.sol","id":1320,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1548,"sourceUnit":276,"src":"342:38:9","symbolAliases":[{"foreign":{"id":1319,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":275,"src":"351:6:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":1321,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1548,"sourceUnit":2412,"src":"381:26:9","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultEvents","contractDependencies":[],"contractKind":"interface","documentation":{"id":1322,"nodeType":"StructuredDocumentation","src":"409:91:9","text":"@dev Events are declared inside an interface (namespace) to improve DX with Typechain."},"fullyImplemented":true,"id":1547,"linearizedBaseContracts":[1547],"name":"IVaultEvents","nameLocation":"510:12:9","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1323,"nodeType":"StructuredDocumentation","src":"529:657:9","text":" @notice A Pool was registered by calling `registerPool`.\n @param pool The pool being registered\n @param factory The factory creating the pool\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param swapFeePercentage The static swap fee of the pool\n @param pauseWindowEndTime The pool's pause window end time\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param hooksConfig Flags indicating which hooks the pool supports and address of hooks contract\n @param liquidityManagement Supported liquidity management hook flags"},"eventSelector":"bc1561eeab9f40962e2fb827a7ff9c7cdb47a9d7c84caeefa4ed90e043842dad","id":1346,"name":"PoolRegistered","nameLocation":"1197:14:9","nodeType":"EventDefinition","parameters":{"id":1345,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1325,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1237:4:9","nodeType":"VariableDeclaration","scope":1346,"src":"1221:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1324,"name":"address","nodeType":"ElementaryTypeName","src":"1221:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1327,"indexed":true,"mutability":"mutable","name":"factory","nameLocation":"1267:7:9","nodeType":"VariableDeclaration","scope":1346,"src":"1251:23:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1326,"name":"address","nodeType":"ElementaryTypeName","src":"1251:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1331,"indexed":false,"mutability":"mutable","name":"tokenConfig","nameLocation":"1298:11:9","nodeType":"VariableDeclaration","scope":1346,"src":"1284:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2234_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":1329,"nodeType":"UserDefinedTypeName","pathNode":{"id":1328,"name":"TokenConfig","nameLocations":["1284:11:9"],"nodeType":"IdentifierPath","referencedDeclaration":2234,"src":"1284:11:9"},"referencedDeclaration":2234,"src":"1284:11:9","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2234_storage_ptr","typeString":"struct TokenConfig"}},"id":1330,"nodeType":"ArrayTypeName","src":"1284:13:9","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2234_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":1333,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1327:17:9","nodeType":"VariableDeclaration","scope":1346,"src":"1319:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1332,"name":"uint256","nodeType":"ElementaryTypeName","src":"1319:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1335,"indexed":false,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"1361:18:9","nodeType":"VariableDeclaration","scope":1346,"src":"1354:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1334,"name":"uint32","nodeType":"ElementaryTypeName","src":"1354:6:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1338,"indexed":false,"mutability":"mutable","name":"roleAccounts","nameLocation":"1406:12:9","nodeType":"VariableDeclaration","scope":1346,"src":"1389:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":1337,"nodeType":"UserDefinedTypeName","pathNode":{"id":1336,"name":"PoolRoleAccounts","nameLocations":["1389:16:9"],"nodeType":"IdentifierPath","referencedDeclaration":2217,"src":"1389:16:9"},"referencedDeclaration":2217,"src":"1389:16:9","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":1341,"indexed":false,"mutability":"mutable","name":"hooksConfig","nameLocation":"1440:11:9","nodeType":"VariableDeclaration","scope":1346,"src":"1428:23:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2191_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":1340,"nodeType":"UserDefinedTypeName","pathNode":{"id":1339,"name":"HooksConfig","nameLocations":["1428:11:9"],"nodeType":"IdentifierPath","referencedDeclaration":2191,"src":"1428:11:9"},"referencedDeclaration":2191,"src":"1428:11:9","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2191_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"},{"constant":false,"id":1344,"indexed":false,"mutability":"mutable","name":"liquidityManagement","nameLocation":"1481:19:9","nodeType":"VariableDeclaration","scope":1346,"src":"1461:39:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2120_memory_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":1343,"nodeType":"UserDefinedTypeName","pathNode":{"id":1342,"name":"LiquidityManagement","nameLocations":["1461:19:9"],"nodeType":"IdentifierPath","referencedDeclaration":2120,"src":"1461:19:9"},"referencedDeclaration":2120,"src":"1461:19:9","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2120_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"1211:295:9"},"src":"1191:316:9"},{"anonymous":false,"documentation":{"id":1347,"nodeType":"StructuredDocumentation","src":"1513:120:9","text":" @notice A Pool was initialized by calling `initialize`.\n @param pool The pool being initialized"},"eventSelector":"cad8c9d32507393b6508ca4a888b81979919b477510585bde8488f153072d6f3","id":1351,"name":"PoolInitialized","nameLocation":"1644:15:9","nodeType":"EventDefinition","parameters":{"id":1350,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1349,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1676:4:9","nodeType":"VariableDeclaration","scope":1351,"src":"1660:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1348,"name":"address","nodeType":"ElementaryTypeName","src":"1660:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1659:22:9"},"src":"1638:44:9"},{"anonymous":false,"documentation":{"id":1352,"nodeType":"StructuredDocumentation","src":"1688:478:9","text":" @notice A swap has occurred.\n @param pool The pool with the tokens being swapped\n @param tokenIn The token entering the Vault (balance increases)\n @param tokenOut The token leaving the Vault (balance decreases)\n @param amountIn Number of tokenIn tokens\n @param amountOut Number of tokenOut tokens\n @param swapFeePercentage Swap fee percentage applied (can differ if dynamic)\n @param swapFeeAmount Swap fee amount paid"},"eventSelector":"0874b2d545cb271cdbda4e093020c452328b24af12382ed62c4d00f5c26709db","id":1370,"name":"Swap","nameLocation":"2177:4:9","nodeType":"EventDefinition","parameters":{"id":1369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1354,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2207:4:9","nodeType":"VariableDeclaration","scope":1370,"src":"2191:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1353,"name":"address","nodeType":"ElementaryTypeName","src":"2191:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1357,"indexed":true,"mutability":"mutable","name":"tokenIn","nameLocation":"2236:7:9","nodeType":"VariableDeclaration","scope":1370,"src":"2221:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":1356,"nodeType":"UserDefinedTypeName","pathNode":{"id":1355,"name":"IERC20","nameLocations":["2221:6:9"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"2221:6:9"},"referencedDeclaration":6591,"src":"2221:6:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1360,"indexed":true,"mutability":"mutable","name":"tokenOut","nameLocation":"2268:8:9","nodeType":"VariableDeclaration","scope":1370,"src":"2253:23:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":1359,"nodeType":"UserDefinedTypeName","pathNode":{"id":1358,"name":"IERC20","nameLocations":["2253:6:9"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"2253:6:9"},"referencedDeclaration":6591,"src":"2253:6:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1362,"indexed":false,"mutability":"mutable","name":"amountIn","nameLocation":"2294:8:9","nodeType":"VariableDeclaration","scope":1370,"src":"2286:16:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1361,"name":"uint256","nodeType":"ElementaryTypeName","src":"2286:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1364,"indexed":false,"mutability":"mutable","name":"amountOut","nameLocation":"2320:9:9","nodeType":"VariableDeclaration","scope":1370,"src":"2312:17:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1363,"name":"uint256","nodeType":"ElementaryTypeName","src":"2312:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1366,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"2347:17:9","nodeType":"VariableDeclaration","scope":1370,"src":"2339:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1365,"name":"uint256","nodeType":"ElementaryTypeName","src":"2339:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1368,"indexed":false,"mutability":"mutable","name":"swapFeeAmount","nameLocation":"2382:13:9","nodeType":"VariableDeclaration","scope":1370,"src":"2374:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1367,"name":"uint256","nodeType":"ElementaryTypeName","src":"2374:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2181:220:9"},"src":"2171:231:9"},{"anonymous":false,"documentation":{"id":1371,"nodeType":"StructuredDocumentation","src":"2408:352:9","text":" @notice A wrap operation has occurred.\n @param wrappedToken The wrapped token address\n @param depositedUnderlying Number of underlying tokens deposited\n @param mintedShares Number of shares (wrapped tokens) minted\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"3771d13c67011e31e12031c54bb59b0bf544a80b81d280a3711e172aa8b7f47b","id":1382,"name":"Wrap","nameLocation":"2771:4:9","nodeType":"EventDefinition","parameters":{"id":1381,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1374,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"2802:12:9","nodeType":"VariableDeclaration","scope":1382,"src":"2785:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"},"typeName":{"id":1373,"nodeType":"UserDefinedTypeName","pathNode":{"id":1372,"name":"IERC4626","nameLocations":["2785:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":6513,"src":"2785:8:9"},"referencedDeclaration":6513,"src":"2785:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1376,"indexed":false,"mutability":"mutable","name":"depositedUnderlying","nameLocation":"2832:19:9","nodeType":"VariableDeclaration","scope":1382,"src":"2824:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1375,"name":"uint256","nodeType":"ElementaryTypeName","src":"2824:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1378,"indexed":false,"mutability":"mutable","name":"mintedShares","nameLocation":"2869:12:9","nodeType":"VariableDeclaration","scope":1382,"src":"2861:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1377,"name":"uint256","nodeType":"ElementaryTypeName","src":"2861:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1380,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"2899:14:9","nodeType":"VariableDeclaration","scope":1382,"src":"2891:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1379,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2891:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2775:144:9"},"src":"2765:155:9"},{"anonymous":false,"documentation":{"id":1383,"nodeType":"StructuredDocumentation","src":"2926:355:9","text":" @notice An unwrap operation has occurred.\n @param wrappedToken The wrapped token address\n @param burnedShares Number of shares (wrapped tokens) burned\n @param withdrawnUnderlying Number of underlying tokens withdrawn\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"eeb740c90bf2b18c9532eb7d473137767036d893dff3e009f32718f821b2a4c0","id":1394,"name":"Unwrap","nameLocation":"3292:6:9","nodeType":"EventDefinition","parameters":{"id":1393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1386,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"3325:12:9","nodeType":"VariableDeclaration","scope":1394,"src":"3308:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"},"typeName":{"id":1385,"nodeType":"UserDefinedTypeName","pathNode":{"id":1384,"name":"IERC4626","nameLocations":["3308:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":6513,"src":"3308:8:9"},"referencedDeclaration":6513,"src":"3308:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1388,"indexed":false,"mutability":"mutable","name":"burnedShares","nameLocation":"3355:12:9","nodeType":"VariableDeclaration","scope":1394,"src":"3347:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1387,"name":"uint256","nodeType":"ElementaryTypeName","src":"3347:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1390,"indexed":false,"mutability":"mutable","name":"withdrawnUnderlying","nameLocation":"3385:19:9","nodeType":"VariableDeclaration","scope":1394,"src":"3377:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1389,"name":"uint256","nodeType":"ElementaryTypeName","src":"3377:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1392,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"3422:14:9","nodeType":"VariableDeclaration","scope":1394,"src":"3414:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1391,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3414:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3298:144:9"},"src":"3286:157:9"},{"anonymous":false,"documentation":{"id":1395,"nodeType":"StructuredDocumentation","src":"3449:562:9","text":" @notice Liquidity has been added to a pool (including initialization).\n @param pool The pool with liquidity added\n @param liquidityProvider The user performing the operation\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param totalSupply The total supply of the pool after the operation\n @param amountsAddedRaw The amount of each token that was added, sorted in token registration order\n @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order"},"eventSelector":"a26a52d8d53702bba7f137907b8e1f99ff87f6d450144270ca25e72481cca871","id":1412,"name":"LiquidityAdded","nameLocation":"4022:14:9","nodeType":"EventDefinition","parameters":{"id":1411,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1397,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4062:4:9","nodeType":"VariableDeclaration","scope":1412,"src":"4046:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1396,"name":"address","nodeType":"ElementaryTypeName","src":"4046:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1399,"indexed":true,"mutability":"mutable","name":"liquidityProvider","nameLocation":"4092:17:9","nodeType":"VariableDeclaration","scope":1412,"src":"4076:33:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1398,"name":"address","nodeType":"ElementaryTypeName","src":"4076:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1402,"indexed":true,"mutability":"mutable","name":"kind","nameLocation":"4144:4:9","nodeType":"VariableDeclaration","scope":1412,"src":"4119:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2347","typeString":"enum AddLiquidityKind"},"typeName":{"id":1401,"nodeType":"UserDefinedTypeName","pathNode":{"id":1400,"name":"AddLiquidityKind","nameLocations":["4119:16:9"],"nodeType":"IdentifierPath","referencedDeclaration":2347,"src":"4119:16:9"},"referencedDeclaration":2347,"src":"4119:16:9","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2347","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1404,"indexed":false,"mutability":"mutable","name":"totalSupply","nameLocation":"4166:11:9","nodeType":"VariableDeclaration","scope":1412,"src":"4158:19:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1403,"name":"uint256","nodeType":"ElementaryTypeName","src":"4158:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1407,"indexed":false,"mutability":"mutable","name":"amountsAddedRaw","nameLocation":"4197:15:9","nodeType":"VariableDeclaration","scope":1412,"src":"4187:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1405,"name":"uint256","nodeType":"ElementaryTypeName","src":"4187:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1406,"nodeType":"ArrayTypeName","src":"4187:9:9","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1410,"indexed":false,"mutability":"mutable","name":"swapFeeAmountsRaw","nameLocation":"4232:17:9","nodeType":"VariableDeclaration","scope":1412,"src":"4222:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1408,"name":"uint256","nodeType":"ElementaryTypeName","src":"4222:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1409,"nodeType":"ArrayTypeName","src":"4222:9:9","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4036:219:9"},"src":"4016:240:9"},{"anonymous":false,"documentation":{"id":1413,"nodeType":"StructuredDocumentation","src":"4262:548:9","text":" @notice Liquidity has been removed from a pool.\n @param pool The pool with liquidity removed\n @param liquidityProvider The user performing the operation\n @param kind The remove liquidity operation type (e.g., proportional, custom)\n @param totalSupply The total supply of the pool after the operation\n @param amountsRemovedRaw The amount of each token that was removed, sorted in token registration order\n @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order"},"eventSelector":"fbe5b0d79fb94f1e81c0a92bf86ae9d3a19e9d1bf6202c0d3e75120f65d5d8a5","id":1430,"name":"LiquidityRemoved","nameLocation":"4821:16:9","nodeType":"EventDefinition","parameters":{"id":1429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1415,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4863:4:9","nodeType":"VariableDeclaration","scope":1430,"src":"4847:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1414,"name":"address","nodeType":"ElementaryTypeName","src":"4847:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1417,"indexed":true,"mutability":"mutable","name":"liquidityProvider","nameLocation":"4893:17:9","nodeType":"VariableDeclaration","scope":1430,"src":"4877:33:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1416,"name":"address","nodeType":"ElementaryTypeName","src":"4877:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1420,"indexed":true,"mutability":"mutable","name":"kind","nameLocation":"4948:4:9","nodeType":"VariableDeclaration","scope":1430,"src":"4920:32:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2368","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":1419,"nodeType":"UserDefinedTypeName","pathNode":{"id":1418,"name":"RemoveLiquidityKind","nameLocations":["4920:19:9"],"nodeType":"IdentifierPath","referencedDeclaration":2368,"src":"4920:19:9"},"referencedDeclaration":2368,"src":"4920:19:9","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2368","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1422,"indexed":false,"mutability":"mutable","name":"totalSupply","nameLocation":"4970:11:9","nodeType":"VariableDeclaration","scope":1430,"src":"4962:19:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1421,"name":"uint256","nodeType":"ElementaryTypeName","src":"4962:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1425,"indexed":false,"mutability":"mutable","name":"amountsRemovedRaw","nameLocation":"5001:17:9","nodeType":"VariableDeclaration","scope":1430,"src":"4991:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1423,"name":"uint256","nodeType":"ElementaryTypeName","src":"4991:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1424,"nodeType":"ArrayTypeName","src":"4991:9:9","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1428,"indexed":false,"mutability":"mutable","name":"swapFeeAmountsRaw","nameLocation":"5038:17:9","nodeType":"VariableDeclaration","scope":1430,"src":"5028:27:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1426,"name":"uint256","nodeType":"ElementaryTypeName","src":"5028:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1427,"nodeType":"ArrayTypeName","src":"5028:9:9","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4837:224:9"},"src":"4815:247:9"},{"anonymous":false,"documentation":{"id":1431,"nodeType":"StructuredDocumentation","src":"5068:114:9","text":" @notice The Vault's pause status has changed.\n @param paused True if the Vault was paused"},"eventSelector":"e0629fe656e45ad7fd63a24b899da368690024c07043b88e57aee5095b1d3d02","id":1435,"name":"VaultPausedStateChanged","nameLocation":"5193:23:9","nodeType":"EventDefinition","parameters":{"id":1434,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1433,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"5222:6:9","nodeType":"VariableDeclaration","scope":1435,"src":"5217:11:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1432,"name":"bool","nodeType":"ElementaryTypeName","src":"5217:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5216:13:9"},"src":"5187:43:9"},{"anonymous":false,"documentation":{"id":1436,"nodeType":"StructuredDocumentation","src":"5236:87:9","text":"@notice `disableQuery` has been called on the Vault, disabling query functionality."},"eventSelector":"bd204090fd387f08e3076528bf09b4fc99d8100d749eace96c06002d3fedc625","id":1438,"name":"VaultQueriesDisabled","nameLocation":"5334:20:9","nodeType":"EventDefinition","parameters":{"id":1437,"nodeType":"ParameterList","parameters":[],"src":"5354:2:9"},"src":"5328:29:9"},{"anonymous":false,"documentation":{"id":1439,"nodeType":"StructuredDocumentation","src":"5363:85:9","text":"@notice `enableQuery` has been called on the Vault, enabling query functionality."},"eventSelector":"91d7478835f2b5adc315f5aad920f4a7f0a02f7fddf3042d17b2c80168ea17f5","id":1441,"name":"VaultQueriesEnabled","nameLocation":"5459:19:9","nodeType":"EventDefinition","parameters":{"id":1440,"nodeType":"ParameterList","parameters":[],"src":"5478:2:9"},"src":"5453:28:9"},{"anonymous":false,"documentation":{"id":1442,"nodeType":"StructuredDocumentation","src":"5487:171:9","text":" @notice A Pool's pause status has changed.\n @param pool The pool that was just paused or unpaused\n @param paused True if the pool was paused"},"eventSelector":"57e20448028297190122571be7cb6c1b1ef85730c673f7c72f533c8662419aa7","id":1448,"name":"PoolPausedStateChanged","nameLocation":"5669:22:9","nodeType":"EventDefinition","parameters":{"id":1447,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1444,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5708:4:9","nodeType":"VariableDeclaration","scope":1448,"src":"5692:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1443,"name":"address","nodeType":"ElementaryTypeName","src":"5692:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1446,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"5719:6:9","nodeType":"VariableDeclaration","scope":1448,"src":"5714:11:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1445,"name":"bool","nodeType":"ElementaryTypeName","src":"5714:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5691:35:9"},"src":"5663:64:9"},{"anonymous":false,"documentation":{"id":1449,"nodeType":"StructuredDocumentation","src":"5733:158:9","text":" @notice Emitted when the swap fee percentage of a pool is updated.\n @param swapFeePercentage The new swap fee percentage for the pool"},"eventSelector":"89d41522342fabac1471ca6073a5623e5caf367b03ca6e9a001478d0cf8be4a1","id":1455,"name":"SwapFeePercentageChanged","nameLocation":"5902:24:9","nodeType":"EventDefinition","parameters":{"id":1454,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1451,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5943:4:9","nodeType":"VariableDeclaration","scope":1455,"src":"5927:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1450,"name":"address","nodeType":"ElementaryTypeName","src":"5927:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1453,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"5957:17:9","nodeType":"VariableDeclaration","scope":1455,"src":"5949:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1452,"name":"uint256","nodeType":"ElementaryTypeName","src":"5949:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5926:49:9"},"src":"5896:80:9"},{"anonymous":false,"documentation":{"id":1456,"nodeType":"StructuredDocumentation","src":"5982:170:9","text":" @notice Recovery mode has been enabled or disabled for a pool.\n @param pool The pool\n @param recoveryMode True if recovery mode was enabled"},"eventSelector":"c2354cc2f78ea57777e55ddd43a7f22b112ce98868596880edaeb22b4f9c73a9","id":1462,"name":"PoolRecoveryModeStateChanged","nameLocation":"6163:28:9","nodeType":"EventDefinition","parameters":{"id":1461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1458,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6208:4:9","nodeType":"VariableDeclaration","scope":1462,"src":"6192:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1457,"name":"address","nodeType":"ElementaryTypeName","src":"6192:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1460,"indexed":false,"mutability":"mutable","name":"recoveryMode","nameLocation":"6219:12:9","nodeType":"VariableDeclaration","scope":1462,"src":"6214:17:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1459,"name":"bool","nodeType":"ElementaryTypeName","src":"6214:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6191:41:9"},"src":"6157:76:9"},{"anonymous":false,"documentation":{"id":1463,"nodeType":"StructuredDocumentation","src":"6239:353:9","text":" @notice A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\n @dev The `ProtocolFeeController` will emit an event with the underlying change.\n @param pool The pool whose aggregate swap fee percentage changed\n @param aggregateSwapFeePercentage The new aggregate swap fee percentage"},"eventSelector":"e4d371097beea42453a37406e2aef4c04f3c548f84ac50e72578662c0dcd7354","id":1469,"name":"AggregateSwapFeePercentageChanged","nameLocation":"6603:33:9","nodeType":"EventDefinition","parameters":{"id":1468,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1465,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6653:4:9","nodeType":"VariableDeclaration","scope":1469,"src":"6637:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1464,"name":"address","nodeType":"ElementaryTypeName","src":"6637:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1467,"indexed":false,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"6667:26:9","nodeType":"VariableDeclaration","scope":1469,"src":"6659:34:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1466,"name":"uint256","nodeType":"ElementaryTypeName","src":"6659:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6636:58:9"},"src":"6597:98:9"},{"anonymous":false,"documentation":{"id":1470,"nodeType":"StructuredDocumentation","src":"6701:357:9","text":" @notice A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\n @dev The `ProtocolFeeController` will emit an event with the underlying change.\n @param pool The pool whose aggregate yield fee percentage changed\n @param aggregateYieldFeePercentage The new aggregate yield fee percentage"},"eventSelector":"606eb97d83164bd6b200d638cd49c14c65d94d4f2c674cfd85e24e0e202c3ca5","id":1476,"name":"AggregateYieldFeePercentageChanged","nameLocation":"7069:34:9","nodeType":"EventDefinition","parameters":{"id":1475,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1472,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"7120:4:9","nodeType":"VariableDeclaration","scope":1476,"src":"7104:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1471,"name":"address","nodeType":"ElementaryTypeName","src":"7104:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1474,"indexed":false,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"7134:27:9","nodeType":"VariableDeclaration","scope":1476,"src":"7126:35:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1473,"name":"uint256","nodeType":"ElementaryTypeName","src":"7126:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7103:59:9"},"src":"7063:100:9"},{"anonymous":false,"documentation":{"id":1477,"nodeType":"StructuredDocumentation","src":"7169:132:9","text":" @notice A new authorizer is set by `setAuthorizer`.\n @param newAuthorizer The address of the new authorizer"},"eventSelector":"94b979b6831a51293e2641426f97747feed46f17779fed9cd18d1ecefcfe92ef","id":1482,"name":"AuthorizerChanged","nameLocation":"7312:17:9","nodeType":"EventDefinition","parameters":{"id":1481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1480,"indexed":true,"mutability":"mutable","name":"newAuthorizer","nameLocation":"7350:13:9","nodeType":"VariableDeclaration","scope":1482,"src":"7330:33:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"},"typeName":{"id":1479,"nodeType":"UserDefinedTypeName","pathNode":{"id":1478,"name":"IAuthorizer","nameLocations":["7330:11:9"],"nodeType":"IdentifierPath","referencedDeclaration":73,"src":"7330:11:9"},"referencedDeclaration":73,"src":"7330:11:9","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"7329:35:9"},"src":"7306:59:9"},{"anonymous":false,"documentation":{"id":1483,"nodeType":"StructuredDocumentation","src":"7371:180:9","text":" @notice A new protocol fee controller is set by `setProtocolFeeController`.\n @param newProtocolFeeController The address of the new protocol fee controller"},"eventSelector":"280a60b1e63c1774d397d35cce80eb80e51408ead755fb446e6f744ce98e5df0","id":1488,"name":"ProtocolFeeControllerChanged","nameLocation":"7562:28:9","nodeType":"EventDefinition","parameters":{"id":1487,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1486,"indexed":true,"mutability":"mutable","name":"newProtocolFeeController","nameLocation":"7622:24:9","nodeType":"VariableDeclaration","scope":1488,"src":"7591:55:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"},"typeName":{"id":1485,"nodeType":"UserDefinedTypeName","pathNode":{"id":1484,"name":"IProtocolFeeController","nameLocations":["7591:22:9"],"nodeType":"IdentifierPath","referencedDeclaration":613,"src":"7591:22:9"},"referencedDeclaration":613,"src":"7591:22:9","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"7590:57:9"},"src":"7556:92:9"},{"anonymous":false,"documentation":{"id":1489,"nodeType":"StructuredDocumentation","src":"7654:553:9","text":" @notice Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\n @dev The underlying token can be derived from the wrapped token, so it's not included here.\n @param wrappedToken The wrapped token that identifies the buffer\n @param amountUnderlying The amount of the underlying token that was deposited\n @param amountWrapped The amount of the wrapped token that was deposited\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"75c4dc5f23640eeba7d404d9165f515fc3d9e23a5c8b6e2d09b4b9da56ff00a9","id":1500,"name":"LiquidityAddedToBuffer","nameLocation":"8218:22:9","nodeType":"EventDefinition","parameters":{"id":1499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1492,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"8267:12:9","nodeType":"VariableDeclaration","scope":1500,"src":"8250:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"},"typeName":{"id":1491,"nodeType":"UserDefinedTypeName","pathNode":{"id":1490,"name":"IERC4626","nameLocations":["8250:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":6513,"src":"8250:8:9"},"referencedDeclaration":6513,"src":"8250:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1494,"indexed":false,"mutability":"mutable","name":"amountUnderlying","nameLocation":"8297:16:9","nodeType":"VariableDeclaration","scope":1500,"src":"8289:24:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1493,"name":"uint256","nodeType":"ElementaryTypeName","src":"8289:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1496,"indexed":false,"mutability":"mutable","name":"amountWrapped","nameLocation":"8331:13:9","nodeType":"VariableDeclaration","scope":1500,"src":"8323:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1495,"name":"uint256","nodeType":"ElementaryTypeName","src":"8323:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1498,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"8362:14:9","nodeType":"VariableDeclaration","scope":1500,"src":"8354:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1497,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8354:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8240:142:9"},"src":"8212:171:9"},{"anonymous":false,"documentation":{"id":1501,"nodeType":"StructuredDocumentation","src":"8389:570:9","text":" @notice Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\n @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n \"totalSupply\" of a buffer.\n @param wrappedToken The wrapped token that identifies the buffer\n @param to The owner of the minted shares\n @param issuedShares The amount of \"internal BPT\" shares created"},"eventSelector":"d66f031d33381c6408f0b32c884461e5de3df8808399b6f3a3d86b1368f8ec34","id":1510,"name":"BufferSharesMinted","nameLocation":"8970:18:9","nodeType":"EventDefinition","parameters":{"id":1509,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1504,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"9006:12:9","nodeType":"VariableDeclaration","scope":1510,"src":"8989:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"},"typeName":{"id":1503,"nodeType":"UserDefinedTypeName","pathNode":{"id":1502,"name":"IERC4626","nameLocations":["8989:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":6513,"src":"8989:8:9"},"referencedDeclaration":6513,"src":"8989:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1506,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"9036:2:9","nodeType":"VariableDeclaration","scope":1510,"src":"9020:18:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1505,"name":"address","nodeType":"ElementaryTypeName","src":"9020:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1508,"indexed":false,"mutability":"mutable","name":"issuedShares","nameLocation":"9048:12:9","nodeType":"VariableDeclaration","scope":1510,"src":"9040:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1507,"name":"uint256","nodeType":"ElementaryTypeName","src":"9040:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8988:73:9"},"src":"8964:98:9"},{"anonymous":false,"documentation":{"id":1511,"nodeType":"StructuredDocumentation","src":"9068:571:9","text":" @notice Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\n @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n \"totalSupply\" of a buffer.\n @param wrappedToken The wrapped token that identifies the buffer\n @param from The owner of the burned shares\n @param burnedShares The amount of \"internal BPT\" shares burned"},"eventSelector":"4e09f7f7fc37ce2897800e2c2a9099565edb0a133d19d84a6871b3530af8846b","id":1520,"name":"BufferSharesBurned","nameLocation":"9650:18:9","nodeType":"EventDefinition","parameters":{"id":1519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1514,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"9686:12:9","nodeType":"VariableDeclaration","scope":1520,"src":"9669:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"},"typeName":{"id":1513,"nodeType":"UserDefinedTypeName","pathNode":{"id":1512,"name":"IERC4626","nameLocations":["9669:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":6513,"src":"9669:8:9"},"referencedDeclaration":6513,"src":"9669:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1516,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"9716:4:9","nodeType":"VariableDeclaration","scope":1520,"src":"9700:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1515,"name":"address","nodeType":"ElementaryTypeName","src":"9700:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1518,"indexed":false,"mutability":"mutable","name":"burnedShares","nameLocation":"9730:12:9","nodeType":"VariableDeclaration","scope":1520,"src":"9722:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1517,"name":"uint256","nodeType":"ElementaryTypeName","src":"9722:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9668:75:9"},"src":"9644:100:9"},{"anonymous":false,"documentation":{"id":1521,"nodeType":"StructuredDocumentation","src":"9750:509:9","text":" @notice Liquidity was removed from an ERC4626 buffer.\n @dev The underlying token can be derived from the wrapped token, so it's not included here.\n @param wrappedToken The wrapped token that identifies the buffer\n @param amountUnderlying The amount of the underlying token that was withdrawn\n @param amountWrapped The amount of the wrapped token that was withdrawn\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"44d97b36e99b590b3d2875aad3b167b1d7fb1e063f3f1325a1eeac76caee5113","id":1532,"name":"LiquidityRemovedFromBuffer","nameLocation":"10270:26:9","nodeType":"EventDefinition","parameters":{"id":1531,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1524,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"10323:12:9","nodeType":"VariableDeclaration","scope":1532,"src":"10306:29:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"},"typeName":{"id":1523,"nodeType":"UserDefinedTypeName","pathNode":{"id":1522,"name":"IERC4626","nameLocations":["10306:8:9"],"nodeType":"IdentifierPath","referencedDeclaration":6513,"src":"10306:8:9"},"referencedDeclaration":6513,"src":"10306:8:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1526,"indexed":false,"mutability":"mutable","name":"amountUnderlying","nameLocation":"10353:16:9","nodeType":"VariableDeclaration","scope":1532,"src":"10345:24:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1525,"name":"uint256","nodeType":"ElementaryTypeName","src":"10345:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1528,"indexed":false,"mutability":"mutable","name":"amountWrapped","nameLocation":"10387:13:9","nodeType":"VariableDeclaration","scope":1532,"src":"10379:21:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1527,"name":"uint256","nodeType":"ElementaryTypeName","src":"10379:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1530,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"10418:14:9","nodeType":"VariableDeclaration","scope":1532,"src":"10410:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1529,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10410:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"10296:142:9"},"src":"10264:175:9"},{"anonymous":false,"documentation":{"id":1533,"nodeType":"StructuredDocumentation","src":"10445:278:9","text":" @notice The Vault buffers pause status has changed.\n @dev If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer`\n set to true) will revert.\n @param paused True if the Vault buffers were paused"},"eventSelector":"300c7ca619eb846386aa0a6e5916ac2a41406448b0a2e99ba9ccafeb899015a5","id":1537,"name":"VaultBuffersPausedStateChanged","nameLocation":"10734:30:9","nodeType":"EventDefinition","parameters":{"id":1536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1535,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"10770:6:9","nodeType":"VariableDeclaration","scope":1537,"src":"10765:11:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1534,"name":"bool","nodeType":"ElementaryTypeName","src":"10765:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10764:13:9"},"src":"10728:50:9"},{"anonymous":false,"documentation":{"id":1538,"nodeType":"StructuredDocumentation","src":"10784:194:9","text":" @notice Pools can use this event to emit event data from the Vault.\n @param pool Pool address\n @param eventKey Event key\n @param eventData Encoded event data"},"eventSelector":"4bc4412e210115456903c65b5277d299a505e79f2eb852b92b1ca52d85856428","id":1546,"name":"VaultAuxiliary","nameLocation":"10989:14:9","nodeType":"EventDefinition","parameters":{"id":1545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1540,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"11020:4:9","nodeType":"VariableDeclaration","scope":1546,"src":"11004:20:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1539,"name":"address","nodeType":"ElementaryTypeName","src":"11004:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1542,"indexed":true,"mutability":"mutable","name":"eventKey","nameLocation":"11042:8:9","nodeType":"VariableDeclaration","scope":1546,"src":"11026:24:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1541,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11026:7:9","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1544,"indexed":false,"mutability":"mutable","name":"eventData","nameLocation":"11058:9:9","nodeType":"VariableDeclaration","scope":1546,"src":"11052:15:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1543,"name":"bytes","nodeType":"ElementaryTypeName","src":"11052:5:9","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11003:65:9"},"src":"10983:86:9"}],"scope":1548,"src":"500:10571:9","usedErrors":[],"usedEvents":[1346,1351,1370,1382,1394,1412,1430,1435,1438,1441,1448,1455,1462,1469,1476,1482,1488,1500,1510,1520,1532,1537,1546]}],"src":"46:11026:9"},"id":9},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","exportedSymbols":{"AddLiquidityKind":[2347],"AddLiquidityParams":[2363],"AfterSwapParams":[2341],"BufferWrapOrUnwrapParams":[2402],"FEE_BITLENGTH":[2405],"FEE_SCALING_FACTOR":[2408],"HookFlags":[2167],"HooksConfig":[2191],"IAuthorizer":[73],"IERC20":[6591],"IERC4626":[6513],"IHooks":[275],"IProtocolFeeController":[613],"IRateProvider":[57],"IVault":[651],"IVaultExtension":[1966],"LiquidityManagement":[2120],"MAX_FEE_PERCENTAGE":[2411],"PoolConfig":[2145],"PoolConfigBits":[2122],"PoolData":[2269],"PoolRoleAccounts":[2217],"PoolSwapParams":[2312],"RemoveLiquidityKind":[2368],"RemoveLiquidityParams":[2384],"Rounding":[2272],"SwapKind":[2275],"SwapState":[2201],"TokenConfig":[2234],"TokenInfo":[2244],"TokenType":[2221],"VaultState":[2209],"VaultSwapParams":[2294],"WrappingDirection":[2387]},"id":1967,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1549,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:10"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":1551,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1967,"sourceUnit":6514,"src":"72:75:10","symbolAliases":[{"foreign":{"id":1550,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6513,"src":"81:8:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1553,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1967,"sourceUnit":6592,"src":"148:72:10","symbolAliases":[{"foreign":{"id":1552,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6591,"src":"157:6:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":1555,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1967,"sourceUnit":74,"src":"222:48:10","symbolAliases":[{"foreign":{"id":1554,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73,"src":"231:11:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":1557,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1967,"sourceUnit":614,"src":"271:70:10","symbolAliases":[{"foreign":{"id":1556,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":613,"src":"280:22:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":1559,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1967,"sourceUnit":652,"src":"342:38:10","symbolAliases":[{"foreign":{"id":1558,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":651,"src":"351:6:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"./IHooks.sol","id":1561,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1967,"sourceUnit":276,"src":"381:38:10","symbolAliases":[{"foreign":{"id":1560,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":275,"src":"390:6:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":1562,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1967,"sourceUnit":2412,"src":"420:26:10","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultExtension","contractDependencies":[],"contractKind":"interface","documentation":{"id":1563,"nodeType":"StructuredDocumentation","src":"448:318:10","text":" @notice Interface for functions defined on the `VaultExtension` contract.\n @dev `VaultExtension` handles less critical or frequently used functions, since delegate calls through\n the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and\n liquidity operations."},"fullyImplemented":false,"id":1966,"linearizedBaseContracts":[1966],"name":"IVaultExtension","nameLocation":"777:15:10","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1564,"nodeType":"StructuredDocumentation","src":"1025:206:10","text":" @notice Returns the main Vault address.\n @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n @return vault The address of the main Vault"},"functionSelector":"fbfa77cf","id":1570,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"1245:5:10","nodeType":"FunctionDefinition","parameters":{"id":1565,"nodeType":"ParameterList","parameters":[],"src":"1250:2:10"},"returnParameters":{"id":1569,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1568,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1570,"src":"1276:6:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":1567,"nodeType":"UserDefinedTypeName","pathNode":{"id":1566,"name":"IVault","nameLocations":["1276:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"1276:6:10"},"referencedDeclaration":651,"src":"1276:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1275:8:10"},"scope":1966,"src":"1236:48:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1571,"nodeType":"StructuredDocumentation","src":"1290:202:10","text":" @notice Returns the VaultAdmin contract address.\n @dev The VaultAdmin contract mostly implements permissioned functions.\n @return vaultAdmin The address of the Vault admin"},"functionSelector":"1ba0ae45","id":1576,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultAdmin","nameLocation":"1506:13:10","nodeType":"FunctionDefinition","parameters":{"id":1572,"nodeType":"ParameterList","parameters":[],"src":"1519:2:10"},"returnParameters":{"id":1575,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1574,"mutability":"mutable","name":"vaultAdmin","nameLocation":"1553:10:10","nodeType":"VariableDeclaration","scope":1576,"src":"1545:18:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1573,"name":"address","nodeType":"ElementaryTypeName","src":"1545:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1544:20:10"},"scope":1966,"src":"1497:68:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1577,"nodeType":"StructuredDocumentation","src":"1793:254:10","text":" @notice Returns whether the Vault is unlocked (i.e., executing an operation).\n @dev The Vault must be unlocked to perform state-changing liquidity operations.\n @return unlocked True if the Vault is unlocked, false otherwise"},"functionSelector":"8380edb7","id":1582,"implemented":false,"kind":"function","modifiers":[],"name":"isUnlocked","nameLocation":"2061:10:10","nodeType":"FunctionDefinition","parameters":{"id":1578,"nodeType":"ParameterList","parameters":[],"src":"2071:2:10"},"returnParameters":{"id":1581,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1580,"mutability":"mutable","name":"unlocked","nameLocation":"2102:8:10","nodeType":"VariableDeclaration","scope":1582,"src":"2097:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1579,"name":"bool","nodeType":"ElementaryTypeName","src":"2097:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2096:15:10"},"scope":1966,"src":"2052:60:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1583,"nodeType":"StructuredDocumentation","src":"2118:141:10","text":" @notice Returns the count of non-zero deltas.\n @return nonzeroDeltaCount The current value of `_nonzeroDeltaCount`"},"functionSelector":"db817187","id":1588,"implemented":false,"kind":"function","modifiers":[],"name":"getNonzeroDeltaCount","nameLocation":"2273:20:10","nodeType":"FunctionDefinition","parameters":{"id":1584,"nodeType":"ParameterList","parameters":[],"src":"2293:2:10"},"returnParameters":{"id":1587,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1586,"mutability":"mutable","name":"nonzeroDeltaCount","nameLocation":"2327:17:10","nodeType":"VariableDeclaration","scope":1588,"src":"2319:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1585,"name":"uint256","nodeType":"ElementaryTypeName","src":"2319:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2318:27:10"},"scope":1966,"src":"2264:82:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1589,"nodeType":"StructuredDocumentation","src":"2352:284:10","text":" @notice Retrieves the token delta for a specific token.\n @dev This function allows reading the value from the `_tokenDeltas` mapping.\n @param token The token for which the delta is being fetched\n @return tokenDelta The delta of the specified token"},"functionSelector":"9e825ff5","id":1597,"implemented":false,"kind":"function","modifiers":[],"name":"getTokenDelta","nameLocation":"2650:13:10","nodeType":"FunctionDefinition","parameters":{"id":1593,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1592,"mutability":"mutable","name":"token","nameLocation":"2671:5:10","nodeType":"VariableDeclaration","scope":1597,"src":"2664:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":1591,"nodeType":"UserDefinedTypeName","pathNode":{"id":1590,"name":"IERC20","nameLocations":["2664:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"2664:6:10"},"referencedDeclaration":6591,"src":"2664:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2663:14:10"},"returnParameters":{"id":1596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1595,"mutability":"mutable","name":"tokenDelta","nameLocation":"2708:10:10","nodeType":"VariableDeclaration","scope":1597,"src":"2701:17:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":1594,"name":"int256","nodeType":"ElementaryTypeName","src":"2701:6:10","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"2700:19:10"},"scope":1966,"src":"2641:79:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1598,"nodeType":"StructuredDocumentation","src":"2726:230:10","text":" @notice Retrieves the reserve (i.e., total Vault balance) of a given token.\n @param token The token for which to retrieve the reserve\n @return reserveAmount The amount of reserves for the given token"},"functionSelector":"96787092","id":1606,"implemented":false,"kind":"function","modifiers":[],"name":"getReservesOf","nameLocation":"2970:13:10","nodeType":"FunctionDefinition","parameters":{"id":1602,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1601,"mutability":"mutable","name":"token","nameLocation":"2991:5:10","nodeType":"VariableDeclaration","scope":1606,"src":"2984:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":1600,"nodeType":"UserDefinedTypeName","pathNode":{"id":1599,"name":"IERC20","nameLocations":["2984:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"2984:6:10"},"referencedDeclaration":6591,"src":"2984:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2983:14:10"},"returnParameters":{"id":1605,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1604,"mutability":"mutable","name":"reserveAmount","nameLocation":"3029:13:10","nodeType":"VariableDeclaration","scope":1606,"src":"3021:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1603,"name":"uint256","nodeType":"ElementaryTypeName","src":"3021:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3020:23:10"},"scope":1966,"src":"2961:83:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1607,"nodeType":"StructuredDocumentation","src":"3050:944:10","text":" @notice This flag is used to detect and tax \"round-trip\" interactions (adding and removing liquidity in the\n same pool).\n @dev Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra\n layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional\n is the only standard way to exit a position without fees, and this flag is used to enable fees in that case.\n It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse\n than a simple swap for every pool type.\n @param pool Address of the pool to check\n @return liquidityAdded True if liquidity has been added to this pool in the current transaction\n Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session."},"functionSelector":"ace9b89b","id":1614,"implemented":false,"kind":"function","modifiers":[],"name":"getAddLiquidityCalledFlag","nameLocation":"4008:25:10","nodeType":"FunctionDefinition","parameters":{"id":1610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1609,"mutability":"mutable","name":"pool","nameLocation":"4042:4:10","nodeType":"VariableDeclaration","scope":1614,"src":"4034:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1608,"name":"address","nodeType":"ElementaryTypeName","src":"4034:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4033:14:10"},"returnParameters":{"id":1613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1612,"mutability":"mutable","name":"liquidityAdded","nameLocation":"4076:14:10","nodeType":"VariableDeclaration","scope":1614,"src":"4071:19:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1611,"name":"bool","nodeType":"ElementaryTypeName","src":"4071:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4070:21:10"},"scope":1966,"src":"3999:93:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1615,"nodeType":"StructuredDocumentation","src":"4323:1604:10","text":" @notice Registers a pool, associating it with its factory and the tokens it manages.\n @dev A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely\n by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an\n additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused\n pool will automatically unpause. Balancer timestamps are 32 bits.\n A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a\n multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to\n the Vault.\n If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the\n authorizer.\n @param pool The address of the pool being registered\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param swapFeePercentage The initial static swap fee percentage of the pool\n @param pauseWindowEndTime The timestamp after which it is no longer possible to pause the pool\n @param protocolFeeExempt If true, the pool's initial aggregate fees will be set to 0\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param poolHooksContract Contract that implements the hooks for the pool\n @param liquidityManagement Liquidity management flags with implemented methods"},"functionSelector":"eeec802f","id":1638,"implemented":false,"kind":"function","modifiers":[],"name":"registerPool","nameLocation":"5941:12:10","nodeType":"FunctionDefinition","parameters":{"id":1636,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1617,"mutability":"mutable","name":"pool","nameLocation":"5971:4:10","nodeType":"VariableDeclaration","scope":1638,"src":"5963:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1616,"name":"address","nodeType":"ElementaryTypeName","src":"5963:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1621,"mutability":"mutable","name":"tokenConfig","nameLocation":"6006:11:10","nodeType":"VariableDeclaration","scope":1638,"src":"5985:32:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2234_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":1619,"nodeType":"UserDefinedTypeName","pathNode":{"id":1618,"name":"TokenConfig","nameLocations":["5985:11:10"],"nodeType":"IdentifierPath","referencedDeclaration":2234,"src":"5985:11:10"},"referencedDeclaration":2234,"src":"5985:11:10","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$2234_storage_ptr","typeString":"struct TokenConfig"}},"id":1620,"nodeType":"ArrayTypeName","src":"5985:13:10","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$2234_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":1623,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"6035:17:10","nodeType":"VariableDeclaration","scope":1638,"src":"6027:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1622,"name":"uint256","nodeType":"ElementaryTypeName","src":"6027:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1625,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"6069:18:10","nodeType":"VariableDeclaration","scope":1638,"src":"6062:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1624,"name":"uint32","nodeType":"ElementaryTypeName","src":"6062:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1627,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"6102:17:10","nodeType":"VariableDeclaration","scope":1638,"src":"6097:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1626,"name":"bool","nodeType":"ElementaryTypeName","src":"6097:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1630,"mutability":"mutable","name":"roleAccounts","nameLocation":"6155:12:10","nodeType":"VariableDeclaration","scope":1638,"src":"6129:38:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_calldata_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":1629,"nodeType":"UserDefinedTypeName","pathNode":{"id":1628,"name":"PoolRoleAccounts","nameLocations":["6129:16:10"],"nodeType":"IdentifierPath","referencedDeclaration":2217,"src":"6129:16:10"},"referencedDeclaration":2217,"src":"6129:16:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":1632,"mutability":"mutable","name":"poolHooksContract","nameLocation":"6185:17:10","nodeType":"VariableDeclaration","scope":1638,"src":"6177:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1631,"name":"address","nodeType":"ElementaryTypeName","src":"6177:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1635,"mutability":"mutable","name":"liquidityManagement","nameLocation":"6241:19:10","nodeType":"VariableDeclaration","scope":1638,"src":"6212:48:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2120_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":1634,"nodeType":"UserDefinedTypeName","pathNode":{"id":1633,"name":"LiquidityManagement","nameLocations":["6212:19:10"],"nodeType":"IdentifierPath","referencedDeclaration":2120,"src":"6212:19:10"},"referencedDeclaration":2120,"src":"6212:19:10","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2120_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"5953:313:10"},"returnParameters":{"id":1637,"nodeType":"ParameterList","parameters":[],"src":"6275:0:10"},"scope":1966,"src":"5932:344:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1639,"nodeType":"StructuredDocumentation","src":"6282:185:10","text":" @notice Checks whether a pool is registered.\n @param pool Address of the pool to check\n @return registered True if the pool is registered, false otherwise"},"functionSelector":"c673bdaf","id":1646,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"6481:16:10","nodeType":"FunctionDefinition","parameters":{"id":1642,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1641,"mutability":"mutable","name":"pool","nameLocation":"6506:4:10","nodeType":"VariableDeclaration","scope":1646,"src":"6498:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1640,"name":"address","nodeType":"ElementaryTypeName","src":"6498:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6497:14:10"},"returnParameters":{"id":1645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1644,"mutability":"mutable","name":"registered","nameLocation":"6540:10:10","nodeType":"VariableDeclaration","scope":1646,"src":"6535:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1643,"name":"bool","nodeType":"ElementaryTypeName","src":"6535:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6534:17:10"},"scope":1966,"src":"6472:80:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1647,"nodeType":"StructuredDocumentation","src":"6558:589:10","text":" @notice Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\n @param pool Address of the pool to initialize\n @param to Address that will receive the output BPT\n @param tokens Tokens used to seed the pool (must match the registered tokens)\n @param exactAmountsIn Exact amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param userData Additional (optional) data required for adding initial liquidity\n @return bptAmountOut Output pool token amount"},"functionSelector":"ba8a2be0","id":1667,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"7161:10:10","nodeType":"FunctionDefinition","parameters":{"id":1663,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1649,"mutability":"mutable","name":"pool","nameLocation":"7189:4:10","nodeType":"VariableDeclaration","scope":1667,"src":"7181:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1648,"name":"address","nodeType":"ElementaryTypeName","src":"7181:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1651,"mutability":"mutable","name":"to","nameLocation":"7211:2:10","nodeType":"VariableDeclaration","scope":1667,"src":"7203:10:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1650,"name":"address","nodeType":"ElementaryTypeName","src":"7203:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1655,"mutability":"mutable","name":"tokens","nameLocation":"7239:6:10","nodeType":"VariableDeclaration","scope":1667,"src":"7223:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6591_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1653,"nodeType":"UserDefinedTypeName","pathNode":{"id":1652,"name":"IERC20","nameLocations":["7223:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"7223:6:10"},"referencedDeclaration":6591,"src":"7223:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"id":1654,"nodeType":"ArrayTypeName","src":"7223:8:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6591_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":1658,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"7272:14:10","nodeType":"VariableDeclaration","scope":1667,"src":"7255:31:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1656,"name":"uint256","nodeType":"ElementaryTypeName","src":"7255:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1657,"nodeType":"ArrayTypeName","src":"7255:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1660,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"7304:15:10","nodeType":"VariableDeclaration","scope":1667,"src":"7296:23:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1659,"name":"uint256","nodeType":"ElementaryTypeName","src":"7296:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1662,"mutability":"mutable","name":"userData","nameLocation":"7342:8:10","nodeType":"VariableDeclaration","scope":1667,"src":"7329:21:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1661,"name":"bytes","nodeType":"ElementaryTypeName","src":"7329:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7171:185:10"},"returnParameters":{"id":1666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1665,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7383:12:10","nodeType":"VariableDeclaration","scope":1667,"src":"7375:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1664,"name":"uint256","nodeType":"ElementaryTypeName","src":"7375:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7374:22:10"},"scope":1966,"src":"7152:245:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1668,"nodeType":"StructuredDocumentation","src":"7627:258:10","text":" @notice Checks whether a pool is initialized.\n @dev An initialized pool can be considered registered as well.\n @param pool Address of the pool to check\n @return initialized True if the pool is initialized, false otherwise"},"functionSelector":"532cec7c","id":1675,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolInitialized","nameLocation":"7899:17:10","nodeType":"FunctionDefinition","parameters":{"id":1671,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1670,"mutability":"mutable","name":"pool","nameLocation":"7925:4:10","nodeType":"VariableDeclaration","scope":1675,"src":"7917:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1669,"name":"address","nodeType":"ElementaryTypeName","src":"7917:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7916:14:10"},"returnParameters":{"id":1674,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1673,"mutability":"mutable","name":"initialized","nameLocation":"7959:11:10","nodeType":"VariableDeclaration","scope":1675,"src":"7954:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1672,"name":"bool","nodeType":"ElementaryTypeName","src":"7954:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7953:18:10"},"scope":1966,"src":"7890:82:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1676,"nodeType":"StructuredDocumentation","src":"7978:152:10","text":" @notice Gets the tokens registered to a pool.\n @param pool Address of the pool\n @return tokens List of tokens in the pool"},"functionSelector":"ca4f2803","id":1685,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokens","nameLocation":"8144:13:10","nodeType":"FunctionDefinition","parameters":{"id":1679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1678,"mutability":"mutable","name":"pool","nameLocation":"8166:4:10","nodeType":"VariableDeclaration","scope":1685,"src":"8158:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1677,"name":"address","nodeType":"ElementaryTypeName","src":"8158:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8157:14:10"},"returnParameters":{"id":1684,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1683,"mutability":"mutable","name":"tokens","nameLocation":"8211:6:10","nodeType":"VariableDeclaration","scope":1685,"src":"8195:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6591_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1681,"nodeType":"UserDefinedTypeName","pathNode":{"id":1680,"name":"IERC20","nameLocations":["8195:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"8195:6:10"},"referencedDeclaration":6591,"src":"8195:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"id":1682,"nodeType":"ArrayTypeName","src":"8195:8:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6591_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"8194:24:10"},"scope":1966,"src":"8135:84:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1686,"nodeType":"StructuredDocumentation","src":"8225:512:10","text":" @notice Gets pool token rates.\n @dev This function performs external calls if tokens are yield-bearing. All returned arrays are in token\n registration order.\n @param pool Address of the pool\n @return decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. FP(1) for 18-decimal tokens\n @return tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens"},"functionSelector":"7e361bde","id":1697,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenRates","nameLocation":"8751:17:10","nodeType":"FunctionDefinition","parameters":{"id":1689,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1688,"mutability":"mutable","name":"pool","nameLocation":"8786:4:10","nodeType":"VariableDeclaration","scope":1697,"src":"8778:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1687,"name":"address","nodeType":"ElementaryTypeName","src":"8778:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8768:28:10"},"returnParameters":{"id":1696,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1692,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"8837:21:10","nodeType":"VariableDeclaration","scope":1697,"src":"8820:38:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1690,"name":"uint256","nodeType":"ElementaryTypeName","src":"8820:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1691,"nodeType":"ArrayTypeName","src":"8820:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1695,"mutability":"mutable","name":"tokenRates","nameLocation":"8877:10:10","nodeType":"VariableDeclaration","scope":1697,"src":"8860:27:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1693,"name":"uint256","nodeType":"ElementaryTypeName","src":"8860:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1694,"nodeType":"ArrayTypeName","src":"8860:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8819:69:10"},"scope":1966,"src":"8742:147:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1698,"nodeType":"StructuredDocumentation","src":"8895:287:10","text":" @notice Returns comprehensive pool data for the given pool.\n @dev This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\n @param pool The address of the pool\n @return poolData The `PoolData` result"},"functionSelector":"13d21cdf","id":1706,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolData","nameLocation":"9196:11:10","nodeType":"FunctionDefinition","parameters":{"id":1701,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1700,"mutability":"mutable","name":"pool","nameLocation":"9216:4:10","nodeType":"VariableDeclaration","scope":1706,"src":"9208:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1699,"name":"address","nodeType":"ElementaryTypeName","src":"9208:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9207:14:10"},"returnParameters":{"id":1705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1704,"mutability":"mutable","name":"poolData","nameLocation":"9261:8:10","nodeType":"VariableDeclaration","scope":1706,"src":"9245:24:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2269_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":1703,"nodeType":"UserDefinedTypeName","pathNode":{"id":1702,"name":"PoolData","nameLocations":["9245:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":2269,"src":"9245:8:10"},"referencedDeclaration":2269,"src":"9245:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$2269_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"9244:26:10"},"scope":1966,"src":"9187:84:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1707,"nodeType":"StructuredDocumentation","src":"9277:531:10","text":" @notice Gets the raw data for a pool: tokens, raw balances, scaling factors.\n @param pool Address of the pool\n @return tokens The pool tokens, sorted in registration order\n @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order"},"functionSelector":"67e0e076","id":1726,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenInfo","nameLocation":"9822:16:10","nodeType":"FunctionDefinition","parameters":{"id":1710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1709,"mutability":"mutable","name":"pool","nameLocation":"9856:4:10","nodeType":"VariableDeclaration","scope":1726,"src":"9848:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1708,"name":"address","nodeType":"ElementaryTypeName","src":"9848:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9838:28:10"},"returnParameters":{"id":1725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1714,"mutability":"mutable","name":"tokens","nameLocation":"9943:6:10","nodeType":"VariableDeclaration","scope":1726,"src":"9927:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6591_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1712,"nodeType":"UserDefinedTypeName","pathNode":{"id":1711,"name":"IERC20","nameLocations":["9927:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"9927:6:10"},"referencedDeclaration":6591,"src":"9927:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"id":1713,"nodeType":"ArrayTypeName","src":"9927:8:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6591_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":1718,"mutability":"mutable","name":"tokenInfo","nameLocation":"9982:9:10","nodeType":"VariableDeclaration","scope":1726,"src":"9963:28:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2244_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":1716,"nodeType":"UserDefinedTypeName","pathNode":{"id":1715,"name":"TokenInfo","nameLocations":["9963:9:10"],"nodeType":"IdentifierPath","referencedDeclaration":2244,"src":"9963:9:10"},"referencedDeclaration":2244,"src":"9963:9:10","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2244_storage_ptr","typeString":"struct TokenInfo"}},"id":1717,"nodeType":"ArrayTypeName","src":"9963:11:10","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2244_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":1721,"mutability":"mutable","name":"balancesRaw","nameLocation":"10022:11:10","nodeType":"VariableDeclaration","scope":1726,"src":"10005:28:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1719,"name":"uint256","nodeType":"ElementaryTypeName","src":"10005:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1720,"nodeType":"ArrayTypeName","src":"10005:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1724,"mutability":"mutable","name":"lastBalancesLiveScaled18","nameLocation":"10064:24:10","nodeType":"VariableDeclaration","scope":1726,"src":"10047:41:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1722,"name":"uint256","nodeType":"ElementaryTypeName","src":"10047:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1723,"nodeType":"ArrayTypeName","src":"10047:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9913:185:10"},"scope":1966,"src":"9813:286:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1727,"nodeType":"StructuredDocumentation","src":"10105:312:10","text":" @notice Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in\n registration order.\n @param pool Address of the pool\n @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates"},"functionSelector":"535cfd8a","id":1735,"implemented":false,"kind":"function","modifiers":[],"name":"getCurrentLiveBalances","nameLocation":"10431:22:10","nodeType":"FunctionDefinition","parameters":{"id":1730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1729,"mutability":"mutable","name":"pool","nameLocation":"10462:4:10","nodeType":"VariableDeclaration","scope":1735,"src":"10454:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1728,"name":"address","nodeType":"ElementaryTypeName","src":"10454:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10453:14:10"},"returnParameters":{"id":1734,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1733,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"10508:20:10","nodeType":"VariableDeclaration","scope":1735,"src":"10491:37:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1731,"name":"uint256","nodeType":"ElementaryTypeName","src":"10491:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1732,"nodeType":"ArrayTypeName","src":"10491:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10490:39:10"},"scope":1966,"src":"10422:108:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1736,"nodeType":"StructuredDocumentation","src":"10536:301:10","text":" @notice Gets the configuration parameters of a pool.\n @dev The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\n @param pool Address of the pool\n @return poolConfig The pool configuration as a `PoolConfig` struct"},"functionSelector":"f29486a1","id":1744,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolConfig","nameLocation":"10851:13:10","nodeType":"FunctionDefinition","parameters":{"id":1739,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1738,"mutability":"mutable","name":"pool","nameLocation":"10873:4:10","nodeType":"VariableDeclaration","scope":1744,"src":"10865:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1737,"name":"address","nodeType":"ElementaryTypeName","src":"10865:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10864:14:10"},"returnParameters":{"id":1743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1742,"mutability":"mutable","name":"poolConfig","nameLocation":"10920:10:10","nodeType":"VariableDeclaration","scope":1744,"src":"10902:28:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$2145_memory_ptr","typeString":"struct PoolConfig"},"typeName":{"id":1741,"nodeType":"UserDefinedTypeName","pathNode":{"id":1740,"name":"PoolConfig","nameLocations":["10902:10:10"],"nodeType":"IdentifierPath","referencedDeclaration":2145,"src":"10902:10:10"},"referencedDeclaration":2145,"src":"10902:10:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$2145_storage_ptr","typeString":"struct PoolConfig"}},"visibility":"internal"}],"src":"10901:30:10"},"scope":1966,"src":"10842:90:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1745,"nodeType":"StructuredDocumentation","src":"10938:283:10","text":" @notice Gets the hooks configuration parameters of a pool.\n @dev The `HooksConfig` contains flags indicating which pool hooks are implemented.\n @param pool Address of the pool\n @return hooksConfig The hooks configuration as a `HooksConfig` struct"},"functionSelector":"ce8630d4","id":1753,"implemented":false,"kind":"function","modifiers":[],"name":"getHooksConfig","nameLocation":"11235:14:10","nodeType":"FunctionDefinition","parameters":{"id":1748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1747,"mutability":"mutable","name":"pool","nameLocation":"11258:4:10","nodeType":"VariableDeclaration","scope":1753,"src":"11250:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1746,"name":"address","nodeType":"ElementaryTypeName","src":"11250:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11249:14:10"},"returnParameters":{"id":1752,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1751,"mutability":"mutable","name":"hooksConfig","nameLocation":"11306:11:10","nodeType":"VariableDeclaration","scope":1753,"src":"11287:30:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2191_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":1750,"nodeType":"UserDefinedTypeName","pathNode":{"id":1749,"name":"HooksConfig","nameLocations":["11287:11:10"],"nodeType":"IdentifierPath","referencedDeclaration":2191,"src":"11287:11:10"},"referencedDeclaration":2191,"src":"11287:11:10","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$2191_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"}],"src":"11286:32:10"},"scope":1966,"src":"11226:93:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1754,"nodeType":"StructuredDocumentation","src":"11325:160:10","text":" @notice The current rate of a pool token (BPT) = invariant / totalSupply.\n @param pool Address of the pool\n @return rate BPT rate"},"functionSelector":"4f037ee7","id":1761,"implemented":false,"kind":"function","modifiers":[],"name":"getBptRate","nameLocation":"11499:10:10","nodeType":"FunctionDefinition","parameters":{"id":1757,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1756,"mutability":"mutable","name":"pool","nameLocation":"11518:4:10","nodeType":"VariableDeclaration","scope":1761,"src":"11510:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1755,"name":"address","nodeType":"ElementaryTypeName","src":"11510:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11509:14:10"},"returnParameters":{"id":1760,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1759,"mutability":"mutable","name":"rate","nameLocation":"11555:4:10","nodeType":"VariableDeclaration","scope":1761,"src":"11547:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1758,"name":"uint256","nodeType":"ElementaryTypeName","src":"11547:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11546:14:10"},"scope":1966,"src":"11490:71:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1762,"nodeType":"StructuredDocumentation","src":"11792:168:10","text":" @notice Gets the total supply of a given ERC20 token.\n @param token The token address\n @return tokenTotalSupply Total supply of the token"},"functionSelector":"e4dc2aa4","id":1769,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"11974:11:10","nodeType":"FunctionDefinition","parameters":{"id":1765,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1764,"mutability":"mutable","name":"token","nameLocation":"11994:5:10","nodeType":"VariableDeclaration","scope":1769,"src":"11986:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1763,"name":"address","nodeType":"ElementaryTypeName","src":"11986:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11985:15:10"},"returnParameters":{"id":1768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1767,"mutability":"mutable","name":"tokenTotalSupply","nameLocation":"12032:16:10","nodeType":"VariableDeclaration","scope":1769,"src":"12024:24:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1766,"name":"uint256","nodeType":"ElementaryTypeName","src":"12024:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12023:26:10"},"scope":1966,"src":"11965:85:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1770,"nodeType":"StructuredDocumentation","src":"12056:225:10","text":" @notice Gets the balance of an account for a given ERC20 token.\n @param token Address of the token\n @param account Address of the account\n @return tokenBalance Token balance of the account"},"functionSelector":"f7888aec","id":1779,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"12295:9:10","nodeType":"FunctionDefinition","parameters":{"id":1775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1772,"mutability":"mutable","name":"token","nameLocation":"12313:5:10","nodeType":"VariableDeclaration","scope":1779,"src":"12305:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1771,"name":"address","nodeType":"ElementaryTypeName","src":"12305:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1774,"mutability":"mutable","name":"account","nameLocation":"12328:7:10","nodeType":"VariableDeclaration","scope":1779,"src":"12320:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1773,"name":"address","nodeType":"ElementaryTypeName","src":"12320:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12304:32:10"},"returnParameters":{"id":1778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1777,"mutability":"mutable","name":"tokenBalance","nameLocation":"12368:12:10","nodeType":"VariableDeclaration","scope":1779,"src":"12360:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1776,"name":"uint256","nodeType":"ElementaryTypeName","src":"12360:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12359:22:10"},"scope":1966,"src":"12286:96:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1780,"nodeType":"StructuredDocumentation","src":"12388:299:10","text":" @notice Gets the allowance of a spender for a given ERC20 token and owner.\n @param token Address of the token\n @param owner Address of the owner\n @param spender Address of the spender\n @return tokenAllowance Amount of tokens the spender is allowed to spend"},"functionSelector":"927da105","id":1791,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"12701:9:10","nodeType":"FunctionDefinition","parameters":{"id":1787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1782,"mutability":"mutable","name":"token","nameLocation":"12719:5:10","nodeType":"VariableDeclaration","scope":1791,"src":"12711:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1781,"name":"address","nodeType":"ElementaryTypeName","src":"12711:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1784,"mutability":"mutable","name":"owner","nameLocation":"12734:5:10","nodeType":"VariableDeclaration","scope":1791,"src":"12726:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1783,"name":"address","nodeType":"ElementaryTypeName","src":"12726:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1786,"mutability":"mutable","name":"spender","nameLocation":"12749:7:10","nodeType":"VariableDeclaration","scope":1791,"src":"12741:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1785,"name":"address","nodeType":"ElementaryTypeName","src":"12741:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12710:47:10"},"returnParameters":{"id":1790,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1789,"mutability":"mutable","name":"tokenAllowance","nameLocation":"12789:14:10","nodeType":"VariableDeclaration","scope":1791,"src":"12781:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1788,"name":"uint256","nodeType":"ElementaryTypeName","src":"12781:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12780:24:10"},"scope":1966,"src":"12692:113:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1792,"nodeType":"StructuredDocumentation","src":"12811:475:10","text":" @notice Approves a spender to spend pool tokens on behalf of sender.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param owner Address of the owner\n @param spender Address of the spender\n @param amount Amount of tokens to approve\n @return success True if successful, false otherwise"},"functionSelector":"e1f21c67","id":1803,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"13300:7:10","nodeType":"FunctionDefinition","parameters":{"id":1799,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1794,"mutability":"mutable","name":"owner","nameLocation":"13316:5:10","nodeType":"VariableDeclaration","scope":1803,"src":"13308:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1793,"name":"address","nodeType":"ElementaryTypeName","src":"13308:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1796,"mutability":"mutable","name":"spender","nameLocation":"13331:7:10","nodeType":"VariableDeclaration","scope":1803,"src":"13323:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1795,"name":"address","nodeType":"ElementaryTypeName","src":"13323:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1798,"mutability":"mutable","name":"amount","nameLocation":"13348:6:10","nodeType":"VariableDeclaration","scope":1803,"src":"13340:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1797,"name":"uint256","nodeType":"ElementaryTypeName","src":"13340:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13307:48:10"},"returnParameters":{"id":1802,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1801,"mutability":"mutable","name":"success","nameLocation":"13379:7:10","nodeType":"VariableDeclaration","scope":1803,"src":"13374:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1800,"name":"bool","nodeType":"ElementaryTypeName","src":"13374:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13373:14:10"},"scope":1966,"src":"13291:97:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1804,"nodeType":"StructuredDocumentation","src":"13615:251:10","text":" @notice Indicates whether a pool is paused.\n @dev If a pool is paused, all non-Recovery Mode state-changing operations will revert.\n @param pool The pool to be checked\n @return poolPaused True if the pool is paused"},"functionSelector":"6c9bc732","id":1811,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolPaused","nameLocation":"13880:12:10","nodeType":"FunctionDefinition","parameters":{"id":1807,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1806,"mutability":"mutable","name":"pool","nameLocation":"13901:4:10","nodeType":"VariableDeclaration","scope":1811,"src":"13893:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1805,"name":"address","nodeType":"ElementaryTypeName","src":"13893:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13892:14:10"},"returnParameters":{"id":1810,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1809,"mutability":"mutable","name":"poolPaused","nameLocation":"13935:10:10","nodeType":"VariableDeclaration","scope":1811,"src":"13930:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1808,"name":"bool","nodeType":"ElementaryTypeName","src":"13930:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13929:17:10"},"scope":1966,"src":"13871:76:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1812,"nodeType":"StructuredDocumentation","src":"13953:648:10","text":" @notice Returns the paused status, and end times of the Pool's pause window and buffer period.\n @dev Note that even when set to a paused state, the pool will automatically unpause at the end of\n the buffer period. Balancer timestamps are 32 bits.\n @param pool The pool whose data is requested\n @return poolPaused True if the Pool is paused\n @return poolPauseWindowEndTime The timestamp of the end of the Pool's pause window\n @return poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)\n @return pauseManager The pause manager, or the zero address"},"functionSelector":"15e32046","id":1825,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolPausedState","nameLocation":"14615:18:10","nodeType":"FunctionDefinition","parameters":{"id":1815,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1814,"mutability":"mutable","name":"pool","nameLocation":"14651:4:10","nodeType":"VariableDeclaration","scope":1825,"src":"14643:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1813,"name":"address","nodeType":"ElementaryTypeName","src":"14643:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14633:28:10"},"returnParameters":{"id":1824,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1817,"mutability":"mutable","name":"poolPaused","nameLocation":"14714:10:10","nodeType":"VariableDeclaration","scope":1825,"src":"14709:15:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1816,"name":"bool","nodeType":"ElementaryTypeName","src":"14709:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1819,"mutability":"mutable","name":"poolPauseWindowEndTime","nameLocation":"14733:22:10","nodeType":"VariableDeclaration","scope":1825,"src":"14726:29:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1818,"name":"uint32","nodeType":"ElementaryTypeName","src":"14726:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1821,"mutability":"mutable","name":"poolBufferPeriodEndTime","nameLocation":"14764:23:10","nodeType":"VariableDeclaration","scope":1825,"src":"14757:30:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":1820,"name":"uint32","nodeType":"ElementaryTypeName","src":"14757:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":1823,"mutability":"mutable","name":"pauseManager","nameLocation":"14797:12:10","nodeType":"VariableDeclaration","scope":1825,"src":"14789:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1822,"name":"address","nodeType":"ElementaryTypeName","src":"14789:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14708:102:10"},"scope":1966,"src":"14606:205:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1826,"nodeType":"StructuredDocumentation","src":"15039:332:10","text":" @notice Checks if the wrapped token has an initialized buffer in the Vault.\n @dev An initialized buffer should have an asset registered in the Vault.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return isBufferInitialized True if the ERC4626 buffer is initialized"},"functionSelector":"6844846b","id":1834,"implemented":false,"kind":"function","modifiers":[],"name":"isERC4626BufferInitialized","nameLocation":"15385:26:10","nodeType":"FunctionDefinition","parameters":{"id":1830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1829,"mutability":"mutable","name":"wrappedToken","nameLocation":"15421:12:10","nodeType":"VariableDeclaration","scope":1834,"src":"15412:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"},"typeName":{"id":1828,"nodeType":"UserDefinedTypeName","pathNode":{"id":1827,"name":"IERC4626","nameLocations":["15412:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":6513,"src":"15412:8:10"},"referencedDeclaration":6513,"src":"15412:8:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"15411:23:10"},"returnParameters":{"id":1833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1832,"mutability":"mutable","name":"isBufferInitialized","nameLocation":"15463:19:10","nodeType":"VariableDeclaration","scope":1834,"src":"15458:24:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1831,"name":"bool","nodeType":"ElementaryTypeName","src":"15458:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15457:26:10"},"scope":1966,"src":"15376:108:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1835,"nodeType":"StructuredDocumentation","src":"15490:477:10","text":" @notice Gets the registered asset for a given buffer.\n @dev To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers\n should never call `wrapper.asset()` directly, at least without checking it against the asset registered with\n the Vault on initialization.\n @param wrappedToken The wrapped token specifying the buffer\n @return asset The underlying asset of the wrapped token"},"functionSelector":"4afbaf5a","id":1843,"implemented":false,"kind":"function","modifiers":[],"name":"getERC4626BufferAsset","nameLocation":"15981:21:10","nodeType":"FunctionDefinition","parameters":{"id":1839,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1838,"mutability":"mutable","name":"wrappedToken","nameLocation":"16012:12:10","nodeType":"VariableDeclaration","scope":1843,"src":"16003:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"},"typeName":{"id":1837,"nodeType":"UserDefinedTypeName","pathNode":{"id":1836,"name":"IERC4626","nameLocations":["16003:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":6513,"src":"16003:8:10"},"referencedDeclaration":6513,"src":"16003:8:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16002:23:10"},"returnParameters":{"id":1842,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1841,"mutability":"mutable","name":"asset","nameLocation":"16057:5:10","nodeType":"VariableDeclaration","scope":1843,"src":"16049:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1840,"name":"address","nodeType":"ElementaryTypeName","src":"16049:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16048:15:10"},"scope":1966,"src":"15972:92:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1844,"nodeType":"StructuredDocumentation","src":"16288:379:10","text":" @notice Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\n @param pool The address of the pool for which aggregate fees have been collected\n @param token The address of the token in which fees have been accumulated\n @return swapFeeAmount The total amount of fees accumulated in the specified token"},"functionSelector":"85e0b999","id":1854,"implemented":false,"kind":"function","modifiers":[],"name":"getAggregateSwapFeeAmount","nameLocation":"16681:25:10","nodeType":"FunctionDefinition","parameters":{"id":1850,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1846,"mutability":"mutable","name":"pool","nameLocation":"16715:4:10","nodeType":"VariableDeclaration","scope":1854,"src":"16707:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1845,"name":"address","nodeType":"ElementaryTypeName","src":"16707:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1849,"mutability":"mutable","name":"token","nameLocation":"16728:5:10","nodeType":"VariableDeclaration","scope":1854,"src":"16721:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":1848,"nodeType":"UserDefinedTypeName","pathNode":{"id":1847,"name":"IERC20","nameLocations":["16721:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"16721:6:10"},"referencedDeclaration":6591,"src":"16721:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"16706:28:10"},"returnParameters":{"id":1853,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1852,"mutability":"mutable","name":"swapFeeAmount","nameLocation":"16766:13:10","nodeType":"VariableDeclaration","scope":1854,"src":"16758:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1851,"name":"uint256","nodeType":"ElementaryTypeName","src":"16758:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16757:23:10"},"scope":1966,"src":"16672:109:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1855,"nodeType":"StructuredDocumentation","src":"16787:381:10","text":" @notice Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\n @param pool The address of the pool for which aggregate fees have been collected\n @param token The address of the token in which fees have been accumulated\n @return yieldFeeAmount The total amount of fees accumulated in the specified token"},"functionSelector":"00fdfa13","id":1865,"implemented":false,"kind":"function","modifiers":[],"name":"getAggregateYieldFeeAmount","nameLocation":"17182:26:10","nodeType":"FunctionDefinition","parameters":{"id":1861,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1857,"mutability":"mutable","name":"pool","nameLocation":"17217:4:10","nodeType":"VariableDeclaration","scope":1865,"src":"17209:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1856,"name":"address","nodeType":"ElementaryTypeName","src":"17209:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1860,"mutability":"mutable","name":"token","nameLocation":"17230:5:10","nodeType":"VariableDeclaration","scope":1865,"src":"17223:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":1859,"nodeType":"UserDefinedTypeName","pathNode":{"id":1858,"name":"IERC20","nameLocations":["17223:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"17223:6:10"},"referencedDeclaration":6591,"src":"17223:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"17208:28:10"},"returnParameters":{"id":1864,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1863,"mutability":"mutable","name":"yieldFeeAmount","nameLocation":"17268:14:10","nodeType":"VariableDeclaration","scope":1865,"src":"17260:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1862,"name":"uint256","nodeType":"ElementaryTypeName","src":"17260:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17259:24:10"},"scope":1966,"src":"17173:111:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1866,"nodeType":"StructuredDocumentation","src":"17290:271:10","text":" @notice Fetches the static swap fee percentage for a given pool.\n @param pool The address of the pool whose static swap fee percentage is being queried\n @return swapFeePercentage The current static swap fee percentage for the specified pool"},"functionSelector":"b45090f9","id":1873,"implemented":false,"kind":"function","modifiers":[],"name":"getStaticSwapFeePercentage","nameLocation":"17575:26:10","nodeType":"FunctionDefinition","parameters":{"id":1869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1868,"mutability":"mutable","name":"pool","nameLocation":"17610:4:10","nodeType":"VariableDeclaration","scope":1873,"src":"17602:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1867,"name":"address","nodeType":"ElementaryTypeName","src":"17602:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17601:14:10"},"returnParameters":{"id":1872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1871,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"17647:17:10","nodeType":"VariableDeclaration","scope":1873,"src":"17639:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1870,"name":"uint256","nodeType":"ElementaryTypeName","src":"17639:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17638:27:10"},"scope":1966,"src":"17566:100:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1874,"nodeType":"StructuredDocumentation","src":"17672:286:10","text":" @notice Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\n @param pool The address of the pool whose roles are being queried\n @return roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)"},"functionSelector":"e9ddeb26","id":1882,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolRoleAccounts","nameLocation":"17972:19:10","nodeType":"FunctionDefinition","parameters":{"id":1877,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1876,"mutability":"mutable","name":"pool","nameLocation":"18000:4:10","nodeType":"VariableDeclaration","scope":1882,"src":"17992:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1875,"name":"address","nodeType":"ElementaryTypeName","src":"17992:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17991:14:10"},"returnParameters":{"id":1881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1880,"mutability":"mutable","name":"roleAccounts","nameLocation":"18053:12:10","nodeType":"VariableDeclaration","scope":1882,"src":"18029:36:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":1879,"nodeType":"UserDefinedTypeName","pathNode":{"id":1878,"name":"PoolRoleAccounts","nameLocations":["18029:16:10"],"nodeType":"IdentifierPath","referencedDeclaration":2217,"src":"18029:16:10"},"referencedDeclaration":2217,"src":"18029:16:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"src":"18028:38:10"},"scope":1966,"src":"17963:104:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1883,"nodeType":"StructuredDocumentation","src":"18073:363:10","text":" @notice Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\n @dev Reverts if the hook doesn't return the success flag set to `true`.\n @param pool The pool\n @param swapParams The swap parameters used to compute the fee\n @return dynamicSwapFeePercentage The dynamic swap fee percentage"},"functionSelector":"4d472bdd","id":1893,"implemented":false,"kind":"function","modifiers":[],"name":"computeDynamicSwapFeePercentage","nameLocation":"18450:31:10","nodeType":"FunctionDefinition","parameters":{"id":1889,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1885,"mutability":"mutable","name":"pool","nameLocation":"18499:4:10","nodeType":"VariableDeclaration","scope":1893,"src":"18491:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1884,"name":"address","nodeType":"ElementaryTypeName","src":"18491:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1888,"mutability":"mutable","name":"swapParams","nameLocation":"18535:10:10","nodeType":"VariableDeclaration","scope":1893,"src":"18513:32:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2312_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":1887,"nodeType":"UserDefinedTypeName","pathNode":{"id":1886,"name":"PoolSwapParams","nameLocations":["18513:14:10"],"nodeType":"IdentifierPath","referencedDeclaration":2312,"src":"18513:14:10"},"referencedDeclaration":2312,"src":"18513:14:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$2312_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"src":"18481:70:10"},"returnParameters":{"id":1892,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1891,"mutability":"mutable","name":"dynamicSwapFeePercentage","nameLocation":"18583:24:10","nodeType":"VariableDeclaration","scope":1893,"src":"18575:32:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1890,"name":"uint256","nodeType":"ElementaryTypeName","src":"18575:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18574:34:10"},"scope":1966,"src":"18441:168:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1894,"nodeType":"StructuredDocumentation","src":"18615:145:10","text":" @notice Returns the Protocol Fee Controller address.\n @return protocolFeeController Address of the ProtocolFeeController"},"functionSelector":"85f2dbd4","id":1900,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"18774:24:10","nodeType":"FunctionDefinition","parameters":{"id":1895,"nodeType":"ParameterList","parameters":[],"src":"18798:2:10"},"returnParameters":{"id":1899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1898,"mutability":"mutable","name":"protocolFeeController","nameLocation":"18847:21:10","nodeType":"VariableDeclaration","scope":1900,"src":"18824:44:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"},"typeName":{"id":1897,"nodeType":"UserDefinedTypeName","pathNode":{"id":1896,"name":"IProtocolFeeController","nameLocations":["18824:22:10"],"nodeType":"IdentifierPath","referencedDeclaration":613,"src":"18824:22:10"},"referencedDeclaration":613,"src":"18824:22:10","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"18823:46:10"},"scope":1966,"src":"18765:105:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1901,"nodeType":"StructuredDocumentation","src":"19098:296:10","text":" @notice Checks whether a pool is in Recovery Mode.\n @dev Recovery Mode enables a safe proportional withdrawal path, with no external calls.\n @param pool Address of the pool to check\n @return inRecoveryMode True if the pool is in Recovery Mode, false otherwise"},"functionSelector":"be7d628a","id":1908,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolInRecoveryMode","nameLocation":"19408:20:10","nodeType":"FunctionDefinition","parameters":{"id":1904,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1903,"mutability":"mutable","name":"pool","nameLocation":"19437:4:10","nodeType":"VariableDeclaration","scope":1908,"src":"19429:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1902,"name":"address","nodeType":"ElementaryTypeName","src":"19429:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19428:14:10"},"returnParameters":{"id":1907,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1906,"mutability":"mutable","name":"inRecoveryMode","nameLocation":"19471:14:10","nodeType":"VariableDeclaration","scope":1908,"src":"19466:19:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1905,"name":"bool","nodeType":"ElementaryTypeName","src":"19466:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19465:21:10"},"scope":1966,"src":"19399:88:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1909,"nodeType":"StructuredDocumentation","src":"19493:679:10","text":" @notice Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out.\n The request is implemented by the Vault without any interaction with the pool, ensuring that\n it works the same for all pools, and cannot be disabled by a new pool type.\n @param pool Address of the pool\n @param from Address of user to burn pool tokens from\n @param exactBptAmountIn Input pool token amount\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @return amountsOut Actual calculated amounts of output tokens, sorted in token registration order"},"functionSelector":"a07d6040","id":1924,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityRecovery","nameLocation":"20186:23:10","nodeType":"FunctionDefinition","parameters":{"id":1919,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1911,"mutability":"mutable","name":"pool","nameLocation":"20227:4:10","nodeType":"VariableDeclaration","scope":1924,"src":"20219:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1910,"name":"address","nodeType":"ElementaryTypeName","src":"20219:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1913,"mutability":"mutable","name":"from","nameLocation":"20249:4:10","nodeType":"VariableDeclaration","scope":1924,"src":"20241:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1912,"name":"address","nodeType":"ElementaryTypeName","src":"20241:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1915,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"20271:16:10","nodeType":"VariableDeclaration","scope":1924,"src":"20263:24:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1914,"name":"uint256","nodeType":"ElementaryTypeName","src":"20263:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1918,"mutability":"mutable","name":"minAmountsOut","nameLocation":"20314:13:10","nodeType":"VariableDeclaration","scope":1924,"src":"20297:30:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1916,"name":"uint256","nodeType":"ElementaryTypeName","src":"20297:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1917,"nodeType":"ArrayTypeName","src":"20297:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"20209:124:10"},"returnParameters":{"id":1923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1922,"mutability":"mutable","name":"amountsOut","nameLocation":"20369:10:10","nodeType":"VariableDeclaration","scope":1924,"src":"20352:27:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1920,"name":"uint256","nodeType":"ElementaryTypeName","src":"20352:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1921,"nodeType":"ArrayTypeName","src":"20352:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"20351:29:10"},"scope":1966,"src":"20177:204:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1925,"nodeType":"StructuredDocumentation","src":"20602:699:10","text":" @notice Performs a callback on msg.sender with arguments provided in `data`.\n @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n anything else will revert.\n Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n Allows the external calling of a function via the Vault contract to\n access Vault's functions guarded by `onlyWhenUnlocked`.\n `transient` modifier ensuring balances changes within the Vault are settled.\n @param data Contains function signature and args to be passed to the msg.sender\n @return result Resulting data from the call"},"functionSelector":"edfa3568","id":1932,"implemented":false,"kind":"function","modifiers":[],"name":"quote","nameLocation":"21315:5:10","nodeType":"FunctionDefinition","parameters":{"id":1928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1927,"mutability":"mutable","name":"data","nameLocation":"21336:4:10","nodeType":"VariableDeclaration","scope":1932,"src":"21321:19:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1926,"name":"bytes","nodeType":"ElementaryTypeName","src":"21321:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21320:21:10"},"returnParameters":{"id":1931,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1930,"mutability":"mutable","name":"result","nameLocation":"21373:6:10","nodeType":"VariableDeclaration","scope":1932,"src":"21360:19:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1929,"name":"bytes","nodeType":"ElementaryTypeName","src":"21360:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21359:21:10"},"scope":1966,"src":"21306:75:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1933,"nodeType":"StructuredDocumentation","src":"21387:731:10","text":" @notice Performs a callback on msg.sender with arguments provided in `data`.\n @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n anything else will revert.\n Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n Allows the external calling of a function via the Vault contract to\n access Vault's functions guarded by `onlyWhenUnlocked`.\n `transient` modifier ensuring balances changes within the Vault are settled.\n This call always reverts, returning the result in the revert reason.\n @param data Contains function signature and args to be passed to the msg.sender"},"functionSelector":"757d64b3","id":1938,"implemented":false,"kind":"function","modifiers":[],"name":"quoteAndRevert","nameLocation":"22132:14:10","nodeType":"FunctionDefinition","parameters":{"id":1936,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1935,"mutability":"mutable","name":"data","nameLocation":"22162:4:10","nodeType":"VariableDeclaration","scope":1938,"src":"22147:19:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1934,"name":"bytes","nodeType":"ElementaryTypeName","src":"22147:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"22146:21:10"},"returnParameters":{"id":1937,"nodeType":"ParameterList","parameters":[],"src":"22176:0:10"},"scope":1966,"src":"22123:54:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1939,"nodeType":"StructuredDocumentation","src":"22183:239:10","text":" @notice Returns true if queries are disabled on the Vault.\n @dev If true, queries might either be disabled temporarily or permanently.\n @return queryDisabled True if query functionality is reversibly disabled"},"functionSelector":"b4aef0ab","id":1944,"implemented":false,"kind":"function","modifiers":[],"name":"isQueryDisabled","nameLocation":"22436:15:10","nodeType":"FunctionDefinition","parameters":{"id":1940,"nodeType":"ParameterList","parameters":[],"src":"22451:2:10"},"returnParameters":{"id":1943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1942,"mutability":"mutable","name":"queryDisabled","nameLocation":"22482:13:10","nodeType":"VariableDeclaration","scope":1944,"src":"22477:18:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1941,"name":"bool","nodeType":"ElementaryTypeName","src":"22477:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"22476:20:10"},"scope":1966,"src":"22427:70:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1945,"nodeType":"StructuredDocumentation","src":"22503:302:10","text":" @notice Returns true if queries are disabled permanently; false if they are enabled.\n @dev This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\n @return queryDisabledPermanently True if query functionality is permanently disabled"},"functionSelector":"13ef8a5d","id":1950,"implemented":false,"kind":"function","modifiers":[],"name":"isQueryDisabledPermanently","nameLocation":"22819:26:10","nodeType":"FunctionDefinition","parameters":{"id":1946,"nodeType":"ParameterList","parameters":[],"src":"22845:2:10"},"returnParameters":{"id":1949,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1948,"mutability":"mutable","name":"queryDisabledPermanently","nameLocation":"22876:24:10","nodeType":"VariableDeclaration","scope":1950,"src":"22871:29:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1947,"name":"bool","nodeType":"ElementaryTypeName","src":"22871:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"22870:31:10"},"scope":1966,"src":"22810:92:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1951,"nodeType":"StructuredDocumentation","src":"22908:162:10","text":" @notice Pools can use this event to emit event data from the Vault.\n @param eventKey Event key\n @param eventData Encoded event data"},"functionSelector":"c8088247","id":1958,"implemented":false,"kind":"function","modifiers":[],"name":"emitAuxiliaryEvent","nameLocation":"23084:18:10","nodeType":"FunctionDefinition","parameters":{"id":1956,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1953,"mutability":"mutable","name":"eventKey","nameLocation":"23111:8:10","nodeType":"VariableDeclaration","scope":1958,"src":"23103:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1952,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23103:7:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1955,"mutability":"mutable","name":"eventData","nameLocation":"23136:9:10","nodeType":"VariableDeclaration","scope":1958,"src":"23121:24:10","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1954,"name":"bytes","nodeType":"ElementaryTypeName","src":"23121:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"23102:44:10"},"returnParameters":{"id":1957,"nodeType":"ParameterList","parameters":[],"src":"23155:0:10"},"scope":1966,"src":"23075:81:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1959,"nodeType":"StructuredDocumentation","src":"23380:284:10","text":" @notice Returns the Authorizer address.\n @dev The authorizer holds the permissions granted by governance. It is set on Vault deployment,\n and can be changed through a permissioned call.\n @return authorizer Address of the authorizer contract"},"functionSelector":"aaabadc5","id":1965,"implemented":false,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"23678:13:10","nodeType":"FunctionDefinition","parameters":{"id":1960,"nodeType":"ParameterList","parameters":[],"src":"23691:2:10"},"returnParameters":{"id":1964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1963,"mutability":"mutable","name":"authorizer","nameLocation":"23729:10:10","nodeType":"VariableDeclaration","scope":1965,"src":"23717:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"},"typeName":{"id":1962,"nodeType":"UserDefinedTypeName","pathNode":{"id":1961,"name":"IAuthorizer","nameLocations":["23717:11:10"],"nodeType":"IdentifierPath","referencedDeclaration":73,"src":"23717:11:10"},"referencedDeclaration":73,"src":"23717:11:10","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"23716:24:10"},"scope":1966,"src":"23669:72:10","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1967,"src":"767:22976:10","usedErrors":[],"usedEvents":[]}],"src":"46:23698:10"},"id":10},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","exportedSymbols":{"AddLiquidityKind":[2347],"AddLiquidityParams":[2363],"AfterSwapParams":[2341],"BufferWrapOrUnwrapParams":[2402],"FEE_BITLENGTH":[2405],"FEE_SCALING_FACTOR":[2408],"HookFlags":[2167],"HooksConfig":[2191],"IERC20":[6591],"IERC4626":[6513],"IRateProvider":[57],"IVaultMain":[2102],"LiquidityManagement":[2120],"MAX_FEE_PERCENTAGE":[2411],"PoolConfig":[2145],"PoolConfigBits":[2122],"PoolData":[2269],"PoolRoleAccounts":[2217],"PoolSwapParams":[2312],"RemoveLiquidityKind":[2368],"RemoveLiquidityParams":[2384],"Rounding":[2272],"SwapKind":[2275],"SwapState":[2201],"TokenConfig":[2234],"TokenInfo":[2244],"TokenType":[2221],"VaultState":[2209],"VaultSwapParams":[2294],"WrappingDirection":[2387]},"id":2103,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1968,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:11"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1970,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2103,"sourceUnit":6592,"src":"72:72:11","symbolAliases":[{"foreign":{"id":1969,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6591,"src":"81:6:11","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":1971,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2103,"sourceUnit":2412,"src":"146:26:11","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultMain","contractDependencies":[],"contractKind":"interface","documentation":{"id":1972,"nodeType":"StructuredDocumentation","src":"174:232:11","text":" @notice Interface for functions defined on the main Vault contract.\n @dev These are generally \"critical path\" functions (swap, add/remove liquidity) that are in the main contract\n for technical or performance reasons."},"fullyImplemented":false,"id":2102,"linearizedBaseContracts":[2102],"name":"IVaultMain","nameLocation":"417:10:11","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1973,"nodeType":"StructuredDocumentation","src":"656:431:11","text":" @notice Creates a context for a sequence of operations (i.e., \"unlocks\" the Vault).\n @dev Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`,\n meaning all balances for the caller have to be settled at the end.\n @param data Contains function signature and args to be passed to the msg.sender\n @return result Resulting data from the call"},"functionSelector":"48c89491","id":1980,"implemented":false,"kind":"function","modifiers":[],"name":"unlock","nameLocation":"1101:6:11","nodeType":"FunctionDefinition","parameters":{"id":1976,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1975,"mutability":"mutable","name":"data","nameLocation":"1123:4:11","nodeType":"VariableDeclaration","scope":1980,"src":"1108:19:11","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1974,"name":"bytes","nodeType":"ElementaryTypeName","src":"1108:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1107:21:11"},"returnParameters":{"id":1979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1978,"mutability":"mutable","name":"result","nameLocation":"1160:6:11","nodeType":"VariableDeclaration","scope":1980,"src":"1147:19:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1977,"name":"bytes","nodeType":"ElementaryTypeName","src":"1147:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1146:21:11"},"scope":2102,"src":"1092:76:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1981,"nodeType":"StructuredDocumentation","src":"1174:1291:11","text":" @notice Settles deltas for a token; must be successful for the current lock to be released.\n @dev Protects the caller against leftover dust in the Vault for the token being settled. The caller\n should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any\n excess in the Vault balance.\n If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as\n credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail.\n If the given hint is lower than the difference in reserves, the hint is given as credit to the caller.\n In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would\n not affect settlement.\n The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve\n difference equals current balance of the token minus existing reserves of the token when the function is called.\n @param token Address of the token\n @param amountHint Amount paid as reported by the caller\n @return credit Credit received in return of the payment"},"functionSelector":"15afd409","id":1991,"implemented":false,"kind":"function","modifiers":[],"name":"settle","nameLocation":"2479:6:11","nodeType":"FunctionDefinition","parameters":{"id":1987,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1984,"mutability":"mutable","name":"token","nameLocation":"2493:5:11","nodeType":"VariableDeclaration","scope":1991,"src":"2486:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":1983,"nodeType":"UserDefinedTypeName","pathNode":{"id":1982,"name":"IERC20","nameLocations":["2486:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"2486:6:11"},"referencedDeclaration":6591,"src":"2486:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1986,"mutability":"mutable","name":"amountHint","nameLocation":"2508:10:11","nodeType":"VariableDeclaration","scope":1991,"src":"2500:18:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1985,"name":"uint256","nodeType":"ElementaryTypeName","src":"2500:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2485:34:11"},"returnParameters":{"id":1990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1989,"mutability":"mutable","name":"credit","nameLocation":"2546:6:11","nodeType":"VariableDeclaration","scope":1991,"src":"2538:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1988,"name":"uint256","nodeType":"ElementaryTypeName","src":"2538:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2537:16:11"},"scope":2102,"src":"2470:84:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1992,"nodeType":"StructuredDocumentation","src":"2560:315:11","text":" @notice Sends tokens to a recipient.\n @dev There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel\n debts.\n @param token Address of the token\n @param to Recipient address\n @param amount Amount of tokens to send"},"functionSelector":"ae639329","id":2002,"implemented":false,"kind":"function","modifiers":[],"name":"sendTo","nameLocation":"2889:6:11","nodeType":"FunctionDefinition","parameters":{"id":2000,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1995,"mutability":"mutable","name":"token","nameLocation":"2903:5:11","nodeType":"VariableDeclaration","scope":2002,"src":"2896:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":1994,"nodeType":"UserDefinedTypeName","pathNode":{"id":1993,"name":"IERC20","nameLocations":["2896:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"2896:6:11"},"referencedDeclaration":6591,"src":"2896:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1997,"mutability":"mutable","name":"to","nameLocation":"2918:2:11","nodeType":"VariableDeclaration","scope":2002,"src":"2910:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1996,"name":"address","nodeType":"ElementaryTypeName","src":"2910:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1999,"mutability":"mutable","name":"amount","nameLocation":"2930:6:11","nodeType":"VariableDeclaration","scope":2002,"src":"2922:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1998,"name":"uint256","nodeType":"ElementaryTypeName","src":"2922:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2895:42:11"},"returnParameters":{"id":2001,"nodeType":"ParameterList","parameters":[],"src":"2946:0:11"},"scope":2102,"src":"2880:67:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2003,"nodeType":"StructuredDocumentation","src":"3161:412:11","text":" @notice Swaps tokens based on provided parameters.\n @dev All parameters are given in raw token decimal encoding.\n @param vaultSwapParams Parameters for the swap (see above for struct definition)\n @return amountCalculatedRaw Calculated swap amount\n @return amountInRaw Amount of input tokens for the swap\n @return amountOutRaw Amount of output tokens from the swap"},"functionSelector":"2bfb780c","id":2015,"implemented":false,"kind":"function","modifiers":[],"name":"swap","nameLocation":"3587:4:11","nodeType":"FunctionDefinition","parameters":{"id":2007,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2006,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"3624:15:11","nodeType":"VariableDeclaration","scope":2015,"src":"3601:38:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2294_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":2005,"nodeType":"UserDefinedTypeName","pathNode":{"id":2004,"name":"VaultSwapParams","nameLocations":["3601:15:11"],"nodeType":"IdentifierPath","referencedDeclaration":2294,"src":"3601:15:11"},"referencedDeclaration":2294,"src":"3601:15:11","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$2294_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"}],"src":"3591:54:11"},"returnParameters":{"id":2014,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2009,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"3672:19:11","nodeType":"VariableDeclaration","scope":2015,"src":"3664:27:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2008,"name":"uint256","nodeType":"ElementaryTypeName","src":"3664:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2011,"mutability":"mutable","name":"amountInRaw","nameLocation":"3701:11:11","nodeType":"VariableDeclaration","scope":2015,"src":"3693:19:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2010,"name":"uint256","nodeType":"ElementaryTypeName","src":"3693:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2013,"mutability":"mutable","name":"amountOutRaw","nameLocation":"3722:12:11","nodeType":"VariableDeclaration","scope":2015,"src":"3714:20:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2012,"name":"uint256","nodeType":"ElementaryTypeName","src":"3714:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3663:72:11"},"scope":2102,"src":"3578:158:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2016,"nodeType":"StructuredDocumentation","src":"3954:523:11","text":" @notice Adds liquidity to a pool.\n @dev Caution should be exercised when adding liquidity because the Vault has the capability\n to transfer tokens from any user, given that it holds all allowances.\n @param params Parameters for the add liquidity (see above for struct definition)\n @return amountsIn Actual amounts of input tokens\n @return bptAmountOut Output pool token amount\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"4af29ec4","id":2029,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidity","nameLocation":"4491:12:11","nodeType":"FunctionDefinition","parameters":{"id":2020,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2019,"mutability":"mutable","name":"params","nameLocation":"4539:6:11","nodeType":"VariableDeclaration","scope":2029,"src":"4513:32:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2363_memory_ptr","typeString":"struct AddLiquidityParams"},"typeName":{"id":2018,"nodeType":"UserDefinedTypeName","pathNode":{"id":2017,"name":"AddLiquidityParams","nameLocations":["4513:18:11"],"nodeType":"IdentifierPath","referencedDeclaration":2363,"src":"4513:18:11"},"referencedDeclaration":2363,"src":"4513:18:11","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$2363_storage_ptr","typeString":"struct AddLiquidityParams"}},"visibility":"internal"}],"src":"4503:48:11"},"returnParameters":{"id":2028,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2023,"mutability":"mutable","name":"amountsIn","nameLocation":"4587:9:11","nodeType":"VariableDeclaration","scope":2029,"src":"4570:26:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2021,"name":"uint256","nodeType":"ElementaryTypeName","src":"4570:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2022,"nodeType":"ArrayTypeName","src":"4570:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2025,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4606:12:11","nodeType":"VariableDeclaration","scope":2029,"src":"4598:20:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2024,"name":"uint256","nodeType":"ElementaryTypeName","src":"4598:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2027,"mutability":"mutable","name":"returnData","nameLocation":"4633:10:11","nodeType":"VariableDeclaration","scope":2029,"src":"4620:23:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2026,"name":"bytes","nodeType":"ElementaryTypeName","src":"4620:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4569:75:11"},"scope":2102,"src":"4482:163:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2030,"nodeType":"StructuredDocumentation","src":"4864:644:11","text":" @notice Removes liquidity from a pool.\n @dev Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user.\n Untrusted routers require prior approval from the user. This is the only function allowed to call\n _queryModeBalanceIncrease (and only in a query context).\n @param params Parameters for the remove liquidity (see above for struct definition)\n @return bptAmountIn Actual amount of BPT burned\n @return amountsOut Actual amounts of output tokens\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"21457897","id":2043,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidity","nameLocation":"5522:15:11","nodeType":"FunctionDefinition","parameters":{"id":2034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2033,"mutability":"mutable","name":"params","nameLocation":"5576:6:11","nodeType":"VariableDeclaration","scope":2043,"src":"5547:35:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2384_memory_ptr","typeString":"struct RemoveLiquidityParams"},"typeName":{"id":2032,"nodeType":"UserDefinedTypeName","pathNode":{"id":2031,"name":"RemoveLiquidityParams","nameLocations":["5547:21:11"],"nodeType":"IdentifierPath","referencedDeclaration":2384,"src":"5547:21:11"},"referencedDeclaration":2384,"src":"5547:21:11","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$2384_storage_ptr","typeString":"struct RemoveLiquidityParams"}},"visibility":"internal"}],"src":"5537:51:11"},"returnParameters":{"id":2042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2036,"mutability":"mutable","name":"bptAmountIn","nameLocation":"5615:11:11","nodeType":"VariableDeclaration","scope":2043,"src":"5607:19:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2035,"name":"uint256","nodeType":"ElementaryTypeName","src":"5607:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2039,"mutability":"mutable","name":"amountsOut","nameLocation":"5645:10:11","nodeType":"VariableDeclaration","scope":2043,"src":"5628:27:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2037,"name":"uint256","nodeType":"ElementaryTypeName","src":"5628:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2038,"nodeType":"ArrayTypeName","src":"5628:9:11","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2041,"mutability":"mutable","name":"returnData","nameLocation":"5670:10:11","nodeType":"VariableDeclaration","scope":2043,"src":"5657:23:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2040,"name":"bytes","nodeType":"ElementaryTypeName","src":"5657:5:11","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5606:75:11"},"scope":2102,"src":"5513:169:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2044,"nodeType":"StructuredDocumentation","src":"5912:385:11","text":" @notice Gets the index of a token in a given pool.\n @dev Reverts if the pool is not registered, or if the token does not belong to the pool.\n @param pool Address of the pool\n @param token Address of the token\n @return tokenCount Number of tokens in the pool\n @return index Index corresponding to the given token in the pool's token list"},"functionSelector":"c9c1661b","id":2056,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenCountAndIndexOfToken","nameLocation":"6311:32:11","nodeType":"FunctionDefinition","parameters":{"id":2050,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2046,"mutability":"mutable","name":"pool","nameLocation":"6361:4:11","nodeType":"VariableDeclaration","scope":2056,"src":"6353:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2045,"name":"address","nodeType":"ElementaryTypeName","src":"6353:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2049,"mutability":"mutable","name":"token","nameLocation":"6382:5:11","nodeType":"VariableDeclaration","scope":2056,"src":"6375:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":2048,"nodeType":"UserDefinedTypeName","pathNode":{"id":2047,"name":"IERC20","nameLocations":["6375:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"6375:6:11"},"referencedDeclaration":6591,"src":"6375:6:11","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"6343:50:11"},"returnParameters":{"id":2055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2052,"mutability":"mutable","name":"tokenCount","nameLocation":"6425:10:11","nodeType":"VariableDeclaration","scope":2056,"src":"6417:18:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2051,"name":"uint256","nodeType":"ElementaryTypeName","src":"6417:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2054,"mutability":"mutable","name":"index","nameLocation":"6445:5:11","nodeType":"VariableDeclaration","scope":2056,"src":"6437:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2053,"name":"uint256","nodeType":"ElementaryTypeName","src":"6437:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6416:35:11"},"scope":2102,"src":"6302:150:11","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2057,"nodeType":"StructuredDocumentation","src":"6683:460:11","text":" @notice Transfers pool token from owner to a recipient.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param owner Address of the owner\n @param to Address of the recipient\n @param amount Amount of tokens to transfer\n @return success True if successful, false otherwise"},"functionSelector":"beabacc8","id":2068,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"7157:8:11","nodeType":"FunctionDefinition","parameters":{"id":2064,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2059,"mutability":"mutable","name":"owner","nameLocation":"7174:5:11","nodeType":"VariableDeclaration","scope":2068,"src":"7166:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2058,"name":"address","nodeType":"ElementaryTypeName","src":"7166:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2061,"mutability":"mutable","name":"to","nameLocation":"7189:2:11","nodeType":"VariableDeclaration","scope":2068,"src":"7181:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2060,"name":"address","nodeType":"ElementaryTypeName","src":"7181:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2063,"mutability":"mutable","name":"amount","nameLocation":"7201:6:11","nodeType":"VariableDeclaration","scope":2068,"src":"7193:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2062,"name":"uint256","nodeType":"ElementaryTypeName","src":"7193:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7165:43:11"},"returnParameters":{"id":2067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2066,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2068,"src":"7227:4:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2065,"name":"bool","nodeType":"ElementaryTypeName","src":"7227:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7226:6:11"},"scope":2102,"src":"7148:85:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2069,"nodeType":"StructuredDocumentation","src":"7239:544:11","text":" @notice Transfers pool token from a sender to a recipient using an allowance.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param spender Address allowed to perform the transfer\n @param from Address of the sender\n @param to Address of the recipient\n @param amount Amount of tokens to transfer\n @return success True if successful, false otherwise"},"functionSelector":"15dacbea","id":2082,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"7797:12:11","nodeType":"FunctionDefinition","parameters":{"id":2078,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2071,"mutability":"mutable","name":"spender","nameLocation":"7818:7:11","nodeType":"VariableDeclaration","scope":2082,"src":"7810:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2070,"name":"address","nodeType":"ElementaryTypeName","src":"7810:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2073,"mutability":"mutable","name":"from","nameLocation":"7835:4:11","nodeType":"VariableDeclaration","scope":2082,"src":"7827:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2072,"name":"address","nodeType":"ElementaryTypeName","src":"7827:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2075,"mutability":"mutable","name":"to","nameLocation":"7849:2:11","nodeType":"VariableDeclaration","scope":2082,"src":"7841:10:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2074,"name":"address","nodeType":"ElementaryTypeName","src":"7841:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2077,"mutability":"mutable","name":"amount","nameLocation":"7861:6:11","nodeType":"VariableDeclaration","scope":2082,"src":"7853:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2076,"name":"uint256","nodeType":"ElementaryTypeName","src":"7853:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7809:59:11"},"returnParameters":{"id":2081,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2080,"mutability":"mutable","name":"success","nameLocation":"7892:7:11","nodeType":"VariableDeclaration","scope":2082,"src":"7887:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2079,"name":"bool","nodeType":"ElementaryTypeName","src":"7887:4:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7886:14:11"},"scope":2102,"src":"7788:113:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2083,"nodeType":"StructuredDocumentation","src":"8128:575:11","text":" @notice Wraps/unwraps tokens based on the parameters provided.\n @dev All parameters are given in raw token decimal encoding. It requires the buffer to be initialized,\n and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\n @param params Parameters for the wrap/unwrap operation (see struct definition)\n @return amountCalculatedRaw Calculated swap amount\n @return amountInRaw Amount of input tokens for the swap\n @return amountOutRaw Amount of output tokens from the swap"},"functionSelector":"43583be5","id":2095,"implemented":false,"kind":"function","modifiers":[],"name":"erc4626BufferWrapOrUnwrap","nameLocation":"8717:25:11","nodeType":"FunctionDefinition","parameters":{"id":2087,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2086,"mutability":"mutable","name":"params","nameLocation":"8784:6:11","nodeType":"VariableDeclaration","scope":2095,"src":"8752:38:11","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2402_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams"},"typeName":{"id":2085,"nodeType":"UserDefinedTypeName","pathNode":{"id":2084,"name":"BufferWrapOrUnwrapParams","nameLocations":["8752:24:11"],"nodeType":"IdentifierPath","referencedDeclaration":2402,"src":"8752:24:11"},"referencedDeclaration":2402,"src":"8752:24:11","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$2402_storage_ptr","typeString":"struct BufferWrapOrUnwrapParams"}},"visibility":"internal"}],"src":"8742:54:11"},"returnParameters":{"id":2094,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2089,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"8823:19:11","nodeType":"VariableDeclaration","scope":2095,"src":"8815:27:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2088,"name":"uint256","nodeType":"ElementaryTypeName","src":"8815:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2091,"mutability":"mutable","name":"amountInRaw","nameLocation":"8852:11:11","nodeType":"VariableDeclaration","scope":2095,"src":"8844:19:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2090,"name":"uint256","nodeType":"ElementaryTypeName","src":"8844:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2093,"mutability":"mutable","name":"amountOutRaw","nameLocation":"8873:12:11","nodeType":"VariableDeclaration","scope":2095,"src":"8865:20:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2092,"name":"uint256","nodeType":"ElementaryTypeName","src":"8865:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8814:72:11"},"scope":2102,"src":"8708:179:11","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2096,"nodeType":"StructuredDocumentation","src":"9115:345:11","text":" @notice Returns the VaultExtension contract address.\n @dev Function is in the main Vault contract. The VaultExtension handles less critical or frequently used\n functions, since delegate calls through the Vault are more expensive than direct calls.\n @return vaultExtension Address of the VaultExtension"},"functionSelector":"b9a8effa","id":2101,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultExtension","nameLocation":"9474:17:11","nodeType":"FunctionDefinition","parameters":{"id":2097,"nodeType":"ParameterList","parameters":[],"src":"9491:2:11"},"returnParameters":{"id":2100,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2099,"mutability":"mutable","name":"vaultExtension","nameLocation":"9525:14:11","nodeType":"VariableDeclaration","scope":2101,"src":"9517:22:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2098,"name":"address","nodeType":"ElementaryTypeName","src":"9517:7:11","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9516:24:11"},"scope":2102,"src":"9465:76:11","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2103,"src":"407:9136:11","usedErrors":[],"usedEvents":[]}],"src":"46:9498:11"},"id":11},"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","exportedSymbols":{"AddLiquidityKind":[2347],"AddLiquidityParams":[2363],"AfterSwapParams":[2341],"BufferWrapOrUnwrapParams":[2402],"FEE_BITLENGTH":[2405],"FEE_SCALING_FACTOR":[2408],"HookFlags":[2167],"HooksConfig":[2191],"IERC20":[6591],"IERC4626":[6513],"IRateProvider":[57],"LiquidityManagement":[2120],"MAX_FEE_PERCENTAGE":[2411],"PoolConfig":[2145],"PoolConfigBits":[2122],"PoolData":[2269],"PoolRoleAccounts":[2217],"PoolSwapParams":[2312],"RemoveLiquidityKind":[2368],"RemoveLiquidityParams":[2384],"Rounding":[2272],"SwapKind":[2275],"SwapState":[2201],"TokenConfig":[2234],"TokenInfo":[2244],"TokenType":[2221],"VaultState":[2209],"VaultSwapParams":[2294],"WrappingDirection":[2387]},"id":2412,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2104,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:12"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2106,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2412,"sourceUnit":6592,"src":"72:72:12","symbolAliases":[{"foreign":{"id":2105,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6591,"src":"81:6:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":2108,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2412,"sourceUnit":6514,"src":"145:75:12","symbolAliases":[{"foreign":{"id":2107,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6513,"src":"154:8:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","file":"../solidity-utils/helpers/IRateProvider.sol","id":2110,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2412,"sourceUnit":58,"src":"222:76:12","symbolAliases":[{"foreign":{"id":2109,"name":"IRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":57,"src":"231:13:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"LiquidityManagement","documentation":{"id":2111,"nodeType":"StructuredDocumentation","src":"300:472:12","text":" @notice Represents a pool's liquidity management configuration.\n @param disableUnbalancedLiquidity If set, liquidity can only be added or removed proportionally\n @param enableAddLiquidityCustom If set, the pool has implemented `onAddLiquidityCustom`\n @param enableRemoveLiquidityCustom If set, the pool has implemented `onRemoveLiquidityCustom`\n @param enableDonation If set, the pool will not revert if liquidity is added with AddLiquidityKind.DONATION"},"id":2120,"members":[{"constant":false,"id":2113,"mutability":"mutable","name":"disableUnbalancedLiquidity","nameLocation":"811:26:12","nodeType":"VariableDeclaration","scope":2120,"src":"806:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2112,"name":"bool","nodeType":"ElementaryTypeName","src":"806:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2115,"mutability":"mutable","name":"enableAddLiquidityCustom","nameLocation":"848:24:12","nodeType":"VariableDeclaration","scope":2120,"src":"843:29:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2114,"name":"bool","nodeType":"ElementaryTypeName","src":"843:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2117,"mutability":"mutable","name":"enableRemoveLiquidityCustom","nameLocation":"883:27:12","nodeType":"VariableDeclaration","scope":2120,"src":"878:32:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2116,"name":"bool","nodeType":"ElementaryTypeName","src":"878:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2119,"mutability":"mutable","name":"enableDonation","nameLocation":"921:14:12","nodeType":"VariableDeclaration","scope":2120,"src":"916:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2118,"name":"bool","nodeType":"ElementaryTypeName","src":"916:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"LiquidityManagement","nameLocation":"780:19:12","nodeType":"StructDefinition","scope":2412,"src":"773:165:12","visibility":"public"},{"canonicalName":"PoolConfigBits","id":2122,"name":"PoolConfigBits","nameLocation":"1015:14:12","nodeType":"UserDefinedValueTypeDefinition","src":"1010:31:12","underlyingType":{"id":2121,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1033:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"canonicalName":"PoolConfig","documentation":{"id":2123,"nodeType":"StructuredDocumentation","src":"1043:1034:12","text":" @notice Represents a pool's configuration (hooks configuration are separated in another struct).\n @param liquidityManagement Flags related to adding/removing liquidity\n @param staticSwapFeePercentage The pool's native swap fee\n @param aggregateSwapFeePercentage The total swap fee charged, including protocol and pool creator components\n @param aggregateYieldFeePercentage The total swap fee charged, including protocol and pool creator components\n @param tokenDecimalDiffs Compressed storage of the token decimals of each pool token\n @param pauseWindowEndTime Timestamp after which the pool cannot be paused\n @param isPoolRegistered If true, the pool has been registered with the Vault\n @param isPoolInitialized If true, the pool has been initialized with liquidity, and is available for trading\n @param isPoolPaused If true, the pool has been paused (by governance or the pauseManager)\n @param isPoolInRecoveryMode If true, the pool has been placed in recovery mode, enabling recovery mode withdrawals"},"id":2145,"members":[{"constant":false,"id":2126,"mutability":"mutable","name":"liquidityManagement","nameLocation":"2122:19:12","nodeType":"VariableDeclaration","scope":2145,"src":"2102:39:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2120_storage_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":2125,"nodeType":"UserDefinedTypeName","pathNode":{"id":2124,"name":"LiquidityManagement","nameLocations":["2102:19:12"],"nodeType":"IdentifierPath","referencedDeclaration":2120,"src":"2102:19:12"},"referencedDeclaration":2120,"src":"2102:19:12","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$2120_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"},{"constant":false,"id":2128,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"2155:23:12","nodeType":"VariableDeclaration","scope":2145,"src":"2147:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2127,"name":"uint256","nodeType":"ElementaryTypeName","src":"2147:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2130,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"2192:26:12","nodeType":"VariableDeclaration","scope":2145,"src":"2184:34:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2129,"name":"uint256","nodeType":"ElementaryTypeName","src":"2184:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2132,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"2232:27:12","nodeType":"VariableDeclaration","scope":2145,"src":"2224:35:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2131,"name":"uint256","nodeType":"ElementaryTypeName","src":"2224:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2134,"mutability":"mutable","name":"tokenDecimalDiffs","nameLocation":"2272:17:12","nodeType":"VariableDeclaration","scope":2145,"src":"2265:24:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":2133,"name":"uint40","nodeType":"ElementaryTypeName","src":"2265:6:12","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"},{"constant":false,"id":2136,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"2302:18:12","nodeType":"VariableDeclaration","scope":2145,"src":"2295:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":2135,"name":"uint32","nodeType":"ElementaryTypeName","src":"2295:6:12","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":2138,"mutability":"mutable","name":"isPoolRegistered","nameLocation":"2331:16:12","nodeType":"VariableDeclaration","scope":2145,"src":"2326:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2137,"name":"bool","nodeType":"ElementaryTypeName","src":"2326:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2140,"mutability":"mutable","name":"isPoolInitialized","nameLocation":"2358:17:12","nodeType":"VariableDeclaration","scope":2145,"src":"2353:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2139,"name":"bool","nodeType":"ElementaryTypeName","src":"2353:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2142,"mutability":"mutable","name":"isPoolPaused","nameLocation":"2386:12:12","nodeType":"VariableDeclaration","scope":2145,"src":"2381:17:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2141,"name":"bool","nodeType":"ElementaryTypeName","src":"2381:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2144,"mutability":"mutable","name":"isPoolInRecoveryMode","nameLocation":"2409:20:12","nodeType":"VariableDeclaration","scope":2145,"src":"2404:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2143,"name":"bool","nodeType":"ElementaryTypeName","src":"2404:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"PoolConfig","nameLocation":"2085:10:12","nodeType":"StructDefinition","scope":2412,"src":"2078:354:12","visibility":"public"},{"canonicalName":"HookFlags","documentation":{"id":2146,"nodeType":"StructuredDocumentation","src":"2434:352:12","text":" @notice The flag portion of the `HooksConfig`.\n @dev `enableHookAdjustedAmounts` must be true for all contracts that modify the `amountCalculated`\n in after hooks. Otherwise, the Vault will ignore any \"hookAdjusted\" amounts. Setting any \"shouldCall\"\n flags to true will cause the Vault to call the corresponding hook during operations."},"id":2167,"members":[{"constant":false,"id":2148,"mutability":"mutable","name":"enableHookAdjustedAmounts","nameLocation":"2815:25:12","nodeType":"VariableDeclaration","scope":2167,"src":"2810:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2147,"name":"bool","nodeType":"ElementaryTypeName","src":"2810:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2150,"mutability":"mutable","name":"shouldCallBeforeInitialize","nameLocation":"2851:26:12","nodeType":"VariableDeclaration","scope":2167,"src":"2846:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2149,"name":"bool","nodeType":"ElementaryTypeName","src":"2846:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2152,"mutability":"mutable","name":"shouldCallAfterInitialize","nameLocation":"2888:25:12","nodeType":"VariableDeclaration","scope":2167,"src":"2883:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2151,"name":"bool","nodeType":"ElementaryTypeName","src":"2883:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2154,"mutability":"mutable","name":"shouldCallComputeDynamicSwapFee","nameLocation":"2924:31:12","nodeType":"VariableDeclaration","scope":2167,"src":"2919:36:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2153,"name":"bool","nodeType":"ElementaryTypeName","src":"2919:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2156,"mutability":"mutable","name":"shouldCallBeforeSwap","nameLocation":"2966:20:12","nodeType":"VariableDeclaration","scope":2167,"src":"2961:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2155,"name":"bool","nodeType":"ElementaryTypeName","src":"2961:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2158,"mutability":"mutable","name":"shouldCallAfterSwap","nameLocation":"2997:19:12","nodeType":"VariableDeclaration","scope":2167,"src":"2992:24:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2157,"name":"bool","nodeType":"ElementaryTypeName","src":"2992:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2160,"mutability":"mutable","name":"shouldCallBeforeAddLiquidity","nameLocation":"3027:28:12","nodeType":"VariableDeclaration","scope":2167,"src":"3022:33:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2159,"name":"bool","nodeType":"ElementaryTypeName","src":"3022:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2162,"mutability":"mutable","name":"shouldCallAfterAddLiquidity","nameLocation":"3066:27:12","nodeType":"VariableDeclaration","scope":2167,"src":"3061:32:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2161,"name":"bool","nodeType":"ElementaryTypeName","src":"3061:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2164,"mutability":"mutable","name":"shouldCallBeforeRemoveLiquidity","nameLocation":"3104:31:12","nodeType":"VariableDeclaration","scope":2167,"src":"3099:36:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2163,"name":"bool","nodeType":"ElementaryTypeName","src":"3099:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2166,"mutability":"mutable","name":"shouldCallAfterRemoveLiquidity","nameLocation":"3146:30:12","nodeType":"VariableDeclaration","scope":2167,"src":"3141:35:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2165,"name":"bool","nodeType":"ElementaryTypeName","src":"3141:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"HookFlags","nameLocation":"2794:9:12","nodeType":"StructDefinition","scope":2412,"src":"2787:392:12","visibility":"public"},{"canonicalName":"HooksConfig","documentation":{"id":2168,"nodeType":"StructuredDocumentation","src":"3181:101:12","text":"@notice Represents a hook contract configuration for a pool (HookFlags + hooksContract address)."},"id":2191,"members":[{"constant":false,"id":2170,"mutability":"mutable","name":"enableHookAdjustedAmounts","nameLocation":"3312:25:12","nodeType":"VariableDeclaration","scope":2191,"src":"3307:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2169,"name":"bool","nodeType":"ElementaryTypeName","src":"3307:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2172,"mutability":"mutable","name":"shouldCallBeforeInitialize","nameLocation":"3348:26:12","nodeType":"VariableDeclaration","scope":2191,"src":"3343:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2171,"name":"bool","nodeType":"ElementaryTypeName","src":"3343:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2174,"mutability":"mutable","name":"shouldCallAfterInitialize","nameLocation":"3385:25:12","nodeType":"VariableDeclaration","scope":2191,"src":"3380:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2173,"name":"bool","nodeType":"ElementaryTypeName","src":"3380:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2176,"mutability":"mutable","name":"shouldCallComputeDynamicSwapFee","nameLocation":"3421:31:12","nodeType":"VariableDeclaration","scope":2191,"src":"3416:36:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2175,"name":"bool","nodeType":"ElementaryTypeName","src":"3416:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2178,"mutability":"mutable","name":"shouldCallBeforeSwap","nameLocation":"3463:20:12","nodeType":"VariableDeclaration","scope":2191,"src":"3458:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2177,"name":"bool","nodeType":"ElementaryTypeName","src":"3458:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2180,"mutability":"mutable","name":"shouldCallAfterSwap","nameLocation":"3494:19:12","nodeType":"VariableDeclaration","scope":2191,"src":"3489:24:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2179,"name":"bool","nodeType":"ElementaryTypeName","src":"3489:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2182,"mutability":"mutable","name":"shouldCallBeforeAddLiquidity","nameLocation":"3524:28:12","nodeType":"VariableDeclaration","scope":2191,"src":"3519:33:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2181,"name":"bool","nodeType":"ElementaryTypeName","src":"3519:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2184,"mutability":"mutable","name":"shouldCallAfterAddLiquidity","nameLocation":"3563:27:12","nodeType":"VariableDeclaration","scope":2191,"src":"3558:32:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2183,"name":"bool","nodeType":"ElementaryTypeName","src":"3558:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2186,"mutability":"mutable","name":"shouldCallBeforeRemoveLiquidity","nameLocation":"3601:31:12","nodeType":"VariableDeclaration","scope":2191,"src":"3596:36:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2185,"name":"bool","nodeType":"ElementaryTypeName","src":"3596:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2188,"mutability":"mutable","name":"shouldCallAfterRemoveLiquidity","nameLocation":"3643:30:12","nodeType":"VariableDeclaration","scope":2191,"src":"3638:35:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2187,"name":"bool","nodeType":"ElementaryTypeName","src":"3638:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2190,"mutability":"mutable","name":"hooksContract","nameLocation":"3687:13:12","nodeType":"VariableDeclaration","scope":2191,"src":"3679:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2189,"name":"address","nodeType":"ElementaryTypeName","src":"3679:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"HooksConfig","nameLocation":"3289:11:12","nodeType":"StructDefinition","scope":2412,"src":"3282:421:12","visibility":"public"},{"canonicalName":"SwapState","documentation":{"id":2192,"nodeType":"StructuredDocumentation","src":"3705:364:12","text":" @notice Represents temporary state used during a swap operation.\n @param indexIn The zero-based index of tokenIn\n @param indexOut The zero-based index of tokenOut\n @param amountGivenScaled18 The amountGiven (i.e., tokenIn for ExactIn), adjusted for token decimals\n @param swapFeePercentage The swap fee to be applied (might be static or dynamic)"},"id":2201,"members":[{"constant":false,"id":2194,"mutability":"mutable","name":"indexIn","nameLocation":"4101:7:12","nodeType":"VariableDeclaration","scope":2201,"src":"4093:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2193,"name":"uint256","nodeType":"ElementaryTypeName","src":"4093:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2196,"mutability":"mutable","name":"indexOut","nameLocation":"4122:8:12","nodeType":"VariableDeclaration","scope":2201,"src":"4114:16:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2195,"name":"uint256","nodeType":"ElementaryTypeName","src":"4114:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2198,"mutability":"mutable","name":"amountGivenScaled18","nameLocation":"4144:19:12","nodeType":"VariableDeclaration","scope":2201,"src":"4136:27:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2197,"name":"uint256","nodeType":"ElementaryTypeName","src":"4136:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2200,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"4177:17:12","nodeType":"VariableDeclaration","scope":2201,"src":"4169:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2199,"name":"uint256","nodeType":"ElementaryTypeName","src":"4169:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"SwapState","nameLocation":"4077:9:12","nodeType":"StructDefinition","scope":2412,"src":"4070:127:12","visibility":"public"},{"canonicalName":"VaultState","documentation":{"id":2202,"nodeType":"StructuredDocumentation","src":"4199:381:12","text":" @notice Represents the Vault's configuration.\n @param isQueryDisabled If set to true, disables query functionality of the Vault. Can be modified by governance\n @param isVaultPaused If set to true, swaps and add/remove liquidity operations are halted\n @param areBuffersPaused If set to true, the Vault wrap/unwrap primitives associated with buffers will be disabled"},"id":2209,"members":[{"constant":false,"id":2204,"mutability":"mutable","name":"isQueryDisabled","nameLocation":"4610:15:12","nodeType":"VariableDeclaration","scope":2209,"src":"4605:20:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2203,"name":"bool","nodeType":"ElementaryTypeName","src":"4605:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2206,"mutability":"mutable","name":"isVaultPaused","nameLocation":"4636:13:12","nodeType":"VariableDeclaration","scope":2209,"src":"4631:18:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2205,"name":"bool","nodeType":"ElementaryTypeName","src":"4631:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2208,"mutability":"mutable","name":"areBuffersPaused","nameLocation":"4660:16:12","nodeType":"VariableDeclaration","scope":2209,"src":"4655:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2207,"name":"bool","nodeType":"ElementaryTypeName","src":"4655:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"VaultState","nameLocation":"4588:10:12","nodeType":"StructDefinition","scope":2412,"src":"4581:98:12","visibility":"public"},{"canonicalName":"PoolRoleAccounts","documentation":{"id":2210,"nodeType":"StructuredDocumentation","src":"4681:461:12","text":" @notice Represents the accounts holding certain roles for a given pool. This is passed in on pool registration.\n @param pauseManager Account empowered to pause/unpause the pool (note that governance can always pause a pool)\n @param swapFeeManager Account empowered to set static swap fees for a pool (or 0 to delegate to governance)\n @param poolCreator Account empowered to set the pool creator fee (or 0 if all fees go to the protocol and LPs)"},"id":2217,"members":[{"constant":false,"id":2212,"mutability":"mutable","name":"pauseManager","nameLocation":"5181:12:12","nodeType":"VariableDeclaration","scope":2217,"src":"5173:20:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2211,"name":"address","nodeType":"ElementaryTypeName","src":"5173:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2214,"mutability":"mutable","name":"swapFeeManager","nameLocation":"5207:14:12","nodeType":"VariableDeclaration","scope":2217,"src":"5199:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2213,"name":"address","nodeType":"ElementaryTypeName","src":"5199:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2216,"mutability":"mutable","name":"poolCreator","nameLocation":"5235:11:12","nodeType":"VariableDeclaration","scope":2217,"src":"5227:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2215,"name":"address","nodeType":"ElementaryTypeName","src":"5227:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"PoolRoleAccounts","nameLocation":"5150:16:12","nodeType":"StructDefinition","scope":2412,"src":"5143:106:12","visibility":"public"},{"canonicalName":"TokenType","documentation":{"id":2218,"nodeType":"StructuredDocumentation","src":"9245:1024:12","text":" @notice Token types supported by the Vault.\n @dev In general, pools may contain any combination of these tokens.\n STANDARD tokens (e.g., BAL, WETH) have no rate provider.\n WITH_RATE tokens (e.g., wstETH) require a rate provider. These may be tokens like wstETH, which need to be wrapped\n because the underlying stETH token is rebasing, and such tokens are unsupported by the Vault. They may also be\n tokens like sEUR, which track an underlying asset, but are not yield-bearing. Finally, this encompasses\n yield-bearing ERC4626 tokens, which can be used to facilitate swaps without requiring wrapping or unwrapping\n in most cases. The `paysYieldFees` flag can be used to indicate whether a token is yield-bearing (e.g., waDAI),\n not yield-bearing (e.g., sEUR), or yield-bearing but exempt from fees (e.g., in certain nested pools, where\n yield fees are charged elsewhere).\n NB: STANDARD must always be the first enum element, so that newly initialized data structures default to Standard."},"id":2221,"members":[{"id":2219,"name":"STANDARD","nameLocation":"10291:8:12","nodeType":"EnumValue","src":"10291:8:12"},{"id":2220,"name":"WITH_RATE","nameLocation":"10305:9:12","nodeType":"EnumValue","src":"10305:9:12"}],"name":"TokenType","nameLocation":"10275:9:12","nodeType":"EnumDefinition","src":"10270:46:12"},{"canonicalName":"TokenConfig","documentation":{"id":2222,"nodeType":"StructuredDocumentation","src":"10318:915:12","text":" @notice Encapsulate the data required for the Vault to support a token of the given type.\n @dev For STANDARD tokens, the rate provider address must be 0, and paysYieldFees must be false. All WITH_RATE tokens\n need a rate provider, and may or may not be yield-bearing.\n At registration time, it is useful to include the token address along with the token parameters in the structure\n passed to `registerPool`, as the alternative would be parallel arrays, which would be error prone and require\n validation checks. `TokenConfig` is only used for registration, and is never put into storage (see `TokenInfo`).\n @param token The token address\n @param tokenType The token type (see the enum for supported types)\n @param rateProvider The rate provider for a token (see further documentation above)\n @param paysYieldFees Flag indicating whether yield fees should be charged on this token"},"id":2234,"members":[{"constant":false,"id":2225,"mutability":"mutable","name":"token","nameLocation":"11266:5:12","nodeType":"VariableDeclaration","scope":2234,"src":"11259:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":2224,"nodeType":"UserDefinedTypeName","pathNode":{"id":2223,"name":"IERC20","nameLocations":["11259:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"11259:6:12"},"referencedDeclaration":6591,"src":"11259:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2228,"mutability":"mutable","name":"tokenType","nameLocation":"11287:9:12","nodeType":"VariableDeclaration","scope":2234,"src":"11277:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2221","typeString":"enum TokenType"},"typeName":{"id":2227,"nodeType":"UserDefinedTypeName","pathNode":{"id":2226,"name":"TokenType","nameLocations":["11277:9:12"],"nodeType":"IdentifierPath","referencedDeclaration":2221,"src":"11277:9:12"},"referencedDeclaration":2221,"src":"11277:9:12","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2221","typeString":"enum TokenType"}},"visibility":"internal"},{"constant":false,"id":2231,"mutability":"mutable","name":"rateProvider","nameLocation":"11316:12:12","nodeType":"VariableDeclaration","scope":2234,"src":"11302:26:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$57","typeString":"contract IRateProvider"},"typeName":{"id":2230,"nodeType":"UserDefinedTypeName","pathNode":{"id":2229,"name":"IRateProvider","nameLocations":["11302:13:12"],"nodeType":"IdentifierPath","referencedDeclaration":57,"src":"11302:13:12"},"referencedDeclaration":57,"src":"11302:13:12","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$57","typeString":"contract IRateProvider"}},"visibility":"internal"},{"constant":false,"id":2233,"mutability":"mutable","name":"paysYieldFees","nameLocation":"11339:13:12","nodeType":"VariableDeclaration","scope":2234,"src":"11334:18:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2232,"name":"bool","nodeType":"ElementaryTypeName","src":"11334:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"TokenConfig","nameLocation":"11241:11:12","nodeType":"StructDefinition","scope":2412,"src":"11234:121:12","visibility":"public"},{"canonicalName":"TokenInfo","documentation":{"id":2235,"nodeType":"StructuredDocumentation","src":"11357:592:12","text":" @notice This data structure is stored in `_poolTokenInfo`, a nested mapping from pool -> (token -> TokenInfo).\n @dev Since the token is already the key of the nested mapping, it would be redundant (and an extra SLOAD) to store\n it again in the struct. When we construct PoolData, the tokens are separated into their own array.\n @param tokenType The token type (see the enum for supported types)\n @param rateProvider The rate provider for a token (see further documentation above)\n @param paysYieldFees Flag indicating whether yield fees should be charged on this token"},"id":2244,"members":[{"constant":false,"id":2238,"mutability":"mutable","name":"tokenType","nameLocation":"11983:9:12","nodeType":"VariableDeclaration","scope":2244,"src":"11973:19:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2221","typeString":"enum TokenType"},"typeName":{"id":2237,"nodeType":"UserDefinedTypeName","pathNode":{"id":2236,"name":"TokenType","nameLocations":["11973:9:12"],"nodeType":"IdentifierPath","referencedDeclaration":2221,"src":"11973:9:12"},"referencedDeclaration":2221,"src":"11973:9:12","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$2221","typeString":"enum TokenType"}},"visibility":"internal"},{"constant":false,"id":2241,"mutability":"mutable","name":"rateProvider","nameLocation":"12012:12:12","nodeType":"VariableDeclaration","scope":2244,"src":"11998:26:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$57","typeString":"contract IRateProvider"},"typeName":{"id":2240,"nodeType":"UserDefinedTypeName","pathNode":{"id":2239,"name":"IRateProvider","nameLocations":["11998:13:12"],"nodeType":"IdentifierPath","referencedDeclaration":57,"src":"11998:13:12"},"referencedDeclaration":57,"src":"11998:13:12","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$57","typeString":"contract IRateProvider"}},"visibility":"internal"},{"constant":false,"id":2243,"mutability":"mutable","name":"paysYieldFees","nameLocation":"12035:13:12","nodeType":"VariableDeclaration","scope":2244,"src":"12030:18:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2242,"name":"bool","nodeType":"ElementaryTypeName","src":"12030:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"TokenInfo","nameLocation":"11957:9:12","nodeType":"StructDefinition","scope":2412,"src":"11950:101:12","visibility":"public"},{"canonicalName":"PoolData","documentation":{"id":2245,"nodeType":"StructuredDocumentation","src":"12053:761:12","text":" @notice Data structure used to represent the current pool state in memory\n @param poolConfigBits Custom type to store the entire configuration of the pool.\n @param tokens Pool tokens, sorted in token registration order\n @param tokenInfo Configuration data for each token, sorted in token registration order\n @param balancesRaw Token balances in native decimals\n @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. It is 1e18 (FP 1) for 18-decimal tokens"},"id":2269,"members":[{"constant":false,"id":2248,"mutability":"mutable","name":"poolConfigBits","nameLocation":"12852:14:12","nodeType":"VariableDeclaration","scope":2269,"src":"12837:29:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2122","typeString":"PoolConfigBits"},"typeName":{"id":2247,"nodeType":"UserDefinedTypeName","pathNode":{"id":2246,"name":"PoolConfigBits","nameLocations":["12837:14:12"],"nodeType":"IdentifierPath","referencedDeclaration":2122,"src":"12837:14:12"},"referencedDeclaration":2122,"src":"12837:14:12","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$2122","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":2252,"mutability":"mutable","name":"tokens","nameLocation":"12881:6:12","nodeType":"VariableDeclaration","scope":2269,"src":"12872:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6591_$dyn_storage_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2250,"nodeType":"UserDefinedTypeName","pathNode":{"id":2249,"name":"IERC20","nameLocations":["12872:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"12872:6:12"},"referencedDeclaration":6591,"src":"12872:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"id":2251,"nodeType":"ArrayTypeName","src":"12872:8:12","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6591_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":2256,"mutability":"mutable","name":"tokenInfo","nameLocation":"12905:9:12","nodeType":"VariableDeclaration","scope":2269,"src":"12893:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2244_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":2254,"nodeType":"UserDefinedTypeName","pathNode":{"id":2253,"name":"TokenInfo","nameLocations":["12893:9:12"],"nodeType":"IdentifierPath","referencedDeclaration":2244,"src":"12893:9:12"},"referencedDeclaration":2244,"src":"12893:9:12","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$2244_storage_ptr","typeString":"struct TokenInfo"}},"id":2255,"nodeType":"ArrayTypeName","src":"12893:11:12","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$2244_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":2259,"mutability":"mutable","name":"balancesRaw","nameLocation":"12930:11:12","nodeType":"VariableDeclaration","scope":2269,"src":"12920:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2257,"name":"uint256","nodeType":"ElementaryTypeName","src":"12920:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2258,"nodeType":"ArrayTypeName","src":"12920:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2262,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"12957:20:12","nodeType":"VariableDeclaration","scope":2269,"src":"12947:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2260,"name":"uint256","nodeType":"ElementaryTypeName","src":"12947:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2261,"nodeType":"ArrayTypeName","src":"12947:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2265,"mutability":"mutable","name":"tokenRates","nameLocation":"12993:10:12","nodeType":"VariableDeclaration","scope":2269,"src":"12983:20:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2263,"name":"uint256","nodeType":"ElementaryTypeName","src":"12983:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2264,"nodeType":"ArrayTypeName","src":"12983:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2268,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"13019:21:12","nodeType":"VariableDeclaration","scope":2269,"src":"13009:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2266,"name":"uint256","nodeType":"ElementaryTypeName","src":"13009:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2267,"nodeType":"ArrayTypeName","src":"13009:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"name":"PoolData","nameLocation":"12822:8:12","nodeType":"StructDefinition","scope":2412,"src":"12815:228:12","visibility":"public"},{"canonicalName":"Rounding","id":2272,"members":[{"id":2270,"name":"ROUND_UP","nameLocation":"13065:8:12","nodeType":"EnumValue","src":"13065:8:12"},{"id":2271,"name":"ROUND_DOWN","nameLocation":"13079:10:12","nodeType":"EnumValue","src":"13079:10:12"}],"name":"Rounding","nameLocation":"13050:8:12","nodeType":"EnumDefinition","src":"13045:46:12"},{"canonicalName":"SwapKind","id":2275,"members":[{"id":2273,"name":"EXACT_IN","nameLocation":"13318:8:12","nodeType":"EnumValue","src":"13318:8:12"},{"id":2274,"name":"EXACT_OUT","nameLocation":"13332:9:12","nodeType":"EnumValue","src":"13332:9:12"}],"name":"SwapKind","nameLocation":"13303:8:12","nodeType":"EnumDefinition","src":"13298:45:12"},{"canonicalName":"VaultSwapParams","documentation":{"id":2276,"nodeType":"StructuredDocumentation","src":"14089:558:12","text":" @notice Data passed into primary Vault `swap` operations.\n @param kind Type of swap (Exact In or Exact Out)\n @param pool The pool with the tokens being swapped\n @param tokenIn The token entering the Vault (balance increases)\n @param tokenOut The token leaving the Vault (balance decreases)\n @param amountGivenRaw Amount specified for tokenIn or tokenOut (depending on the type of swap)\n @param limitRaw Minimum or maximum value of the calculated amount (depending on the type of swap)\n @param userData Additional (optional) user data"},"id":2294,"members":[{"constant":false,"id":2279,"mutability":"mutable","name":"kind","nameLocation":"14686:4:12","nodeType":"VariableDeclaration","scope":2294,"src":"14677:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2275","typeString":"enum SwapKind"},"typeName":{"id":2278,"nodeType":"UserDefinedTypeName","pathNode":{"id":2277,"name":"SwapKind","nameLocations":["14677:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":2275,"src":"14677:8:12"},"referencedDeclaration":2275,"src":"14677:8:12","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2275","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2281,"mutability":"mutable","name":"pool","nameLocation":"14704:4:12","nodeType":"VariableDeclaration","scope":2294,"src":"14696:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2280,"name":"address","nodeType":"ElementaryTypeName","src":"14696:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2284,"mutability":"mutable","name":"tokenIn","nameLocation":"14721:7:12","nodeType":"VariableDeclaration","scope":2294,"src":"14714:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":2283,"nodeType":"UserDefinedTypeName","pathNode":{"id":2282,"name":"IERC20","nameLocations":["14714:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"14714:6:12"},"referencedDeclaration":6591,"src":"14714:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2287,"mutability":"mutable","name":"tokenOut","nameLocation":"14741:8:12","nodeType":"VariableDeclaration","scope":2294,"src":"14734:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":2286,"nodeType":"UserDefinedTypeName","pathNode":{"id":2285,"name":"IERC20","nameLocations":["14734:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"14734:6:12"},"referencedDeclaration":6591,"src":"14734:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2289,"mutability":"mutable","name":"amountGivenRaw","nameLocation":"14763:14:12","nodeType":"VariableDeclaration","scope":2294,"src":"14755:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2288,"name":"uint256","nodeType":"ElementaryTypeName","src":"14755:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2291,"mutability":"mutable","name":"limitRaw","nameLocation":"14791:8:12","nodeType":"VariableDeclaration","scope":2294,"src":"14783:16:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2290,"name":"uint256","nodeType":"ElementaryTypeName","src":"14783:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2293,"mutability":"mutable","name":"userData","nameLocation":"14811:8:12","nodeType":"VariableDeclaration","scope":2294,"src":"14805:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2292,"name":"bytes","nodeType":"ElementaryTypeName","src":"14805:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"VaultSwapParams","nameLocation":"14655:15:12","nodeType":"StructDefinition","scope":2412,"src":"14648:174:12","visibility":"public"},{"canonicalName":"PoolSwapParams","documentation":{"id":2295,"nodeType":"StructuredDocumentation","src":"14824:530:12","text":" @notice Data for a swap operation, used by contracts implementing `IBasePool`.\n @param kind Type of swap (exact in or exact out)\n @param amountGivenScaled18 Amount given based on kind of the swap (e.g., tokenIn for EXACT_IN)\n @param balancesScaled18 Current pool balances\n @param indexIn Index of tokenIn\n @param indexOut Index of tokenOut\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param userData Additional (optional) data required for the swap"},"id":2312,"members":[{"constant":false,"id":2298,"mutability":"mutable","name":"kind","nameLocation":"15392:4:12","nodeType":"VariableDeclaration","scope":2312,"src":"15383:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2275","typeString":"enum SwapKind"},"typeName":{"id":2297,"nodeType":"UserDefinedTypeName","pathNode":{"id":2296,"name":"SwapKind","nameLocations":["15383:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":2275,"src":"15383:8:12"},"referencedDeclaration":2275,"src":"15383:8:12","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2275","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2300,"mutability":"mutable","name":"amountGivenScaled18","nameLocation":"15410:19:12","nodeType":"VariableDeclaration","scope":2312,"src":"15402:27:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2299,"name":"uint256","nodeType":"ElementaryTypeName","src":"15402:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2303,"mutability":"mutable","name":"balancesScaled18","nameLocation":"15445:16:12","nodeType":"VariableDeclaration","scope":2312,"src":"15435:26:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2301,"name":"uint256","nodeType":"ElementaryTypeName","src":"15435:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2302,"nodeType":"ArrayTypeName","src":"15435:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2305,"mutability":"mutable","name":"indexIn","nameLocation":"15475:7:12","nodeType":"VariableDeclaration","scope":2312,"src":"15467:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2304,"name":"uint256","nodeType":"ElementaryTypeName","src":"15467:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2307,"mutability":"mutable","name":"indexOut","nameLocation":"15496:8:12","nodeType":"VariableDeclaration","scope":2312,"src":"15488:16:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2306,"name":"uint256","nodeType":"ElementaryTypeName","src":"15488:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2309,"mutability":"mutable","name":"router","nameLocation":"15518:6:12","nodeType":"VariableDeclaration","scope":2312,"src":"15510:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2308,"name":"address","nodeType":"ElementaryTypeName","src":"15510:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2311,"mutability":"mutable","name":"userData","nameLocation":"15536:8:12","nodeType":"VariableDeclaration","scope":2312,"src":"15530:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2310,"name":"bytes","nodeType":"ElementaryTypeName","src":"15530:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"PoolSwapParams","nameLocation":"15362:14:12","nodeType":"StructDefinition","scope":2412,"src":"15355:192:12","visibility":"public"},{"canonicalName":"AfterSwapParams","documentation":{"id":2313,"nodeType":"StructuredDocumentation","src":"15549:813:12","text":" @notice Data for the hook after a swap operation.\n @param kind Type of swap (exact in or exact out)\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param amountInScaled18 Amount of tokenIn (entering the Vault)\n @param amountOutScaled18 Amount of tokenOut (leaving the Vault)\n @param tokenInBalanceScaled18 Updated (after swap) balance of tokenIn\n @param tokenOutBalanceScaled18 Updated (after swap) balance of tokenOut\n @param amountCalculatedScaled18 Token amount calculated by the swap\n @param amountCalculatedRaw Token amount calculated by the swap\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param pool Pool address\n @param userData Additional (optional) data required for the swap"},"id":2341,"members":[{"constant":false,"id":2316,"mutability":"mutable","name":"kind","nameLocation":"16401:4:12","nodeType":"VariableDeclaration","scope":2341,"src":"16392:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2275","typeString":"enum SwapKind"},"typeName":{"id":2315,"nodeType":"UserDefinedTypeName","pathNode":{"id":2314,"name":"SwapKind","nameLocations":["16392:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":2275,"src":"16392:8:12"},"referencedDeclaration":2275,"src":"16392:8:12","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2275","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2319,"mutability":"mutable","name":"tokenIn","nameLocation":"16418:7:12","nodeType":"VariableDeclaration","scope":2341,"src":"16411:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":2318,"nodeType":"UserDefinedTypeName","pathNode":{"id":2317,"name":"IERC20","nameLocations":["16411:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"16411:6:12"},"referencedDeclaration":6591,"src":"16411:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2322,"mutability":"mutable","name":"tokenOut","nameLocation":"16438:8:12","nodeType":"VariableDeclaration","scope":2341,"src":"16431:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":2321,"nodeType":"UserDefinedTypeName","pathNode":{"id":2320,"name":"IERC20","nameLocations":["16431:6:12"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"16431:6:12"},"referencedDeclaration":6591,"src":"16431:6:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2324,"mutability":"mutable","name":"amountInScaled18","nameLocation":"16460:16:12","nodeType":"VariableDeclaration","scope":2341,"src":"16452:24:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2323,"name":"uint256","nodeType":"ElementaryTypeName","src":"16452:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2326,"mutability":"mutable","name":"amountOutScaled18","nameLocation":"16490:17:12","nodeType":"VariableDeclaration","scope":2341,"src":"16482:25:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2325,"name":"uint256","nodeType":"ElementaryTypeName","src":"16482:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2328,"mutability":"mutable","name":"tokenInBalanceScaled18","nameLocation":"16521:22:12","nodeType":"VariableDeclaration","scope":2341,"src":"16513:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2327,"name":"uint256","nodeType":"ElementaryTypeName","src":"16513:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2330,"mutability":"mutable","name":"tokenOutBalanceScaled18","nameLocation":"16557:23:12","nodeType":"VariableDeclaration","scope":2341,"src":"16549:31:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2329,"name":"uint256","nodeType":"ElementaryTypeName","src":"16549:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2332,"mutability":"mutable","name":"amountCalculatedScaled18","nameLocation":"16594:24:12","nodeType":"VariableDeclaration","scope":2341,"src":"16586:32:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2331,"name":"uint256","nodeType":"ElementaryTypeName","src":"16586:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2334,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"16632:19:12","nodeType":"VariableDeclaration","scope":2341,"src":"16624:27:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2333,"name":"uint256","nodeType":"ElementaryTypeName","src":"16624:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2336,"mutability":"mutable","name":"router","nameLocation":"16665:6:12","nodeType":"VariableDeclaration","scope":2341,"src":"16657:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2335,"name":"address","nodeType":"ElementaryTypeName","src":"16657:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2338,"mutability":"mutable","name":"pool","nameLocation":"16685:4:12","nodeType":"VariableDeclaration","scope":2341,"src":"16677:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2337,"name":"address","nodeType":"ElementaryTypeName","src":"16677:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2340,"mutability":"mutable","name":"userData","nameLocation":"16701:8:12","nodeType":"VariableDeclaration","scope":2341,"src":"16695:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2339,"name":"bytes","nodeType":"ElementaryTypeName","src":"16695:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"AfterSwapParams","nameLocation":"16370:15:12","nodeType":"StructDefinition","scope":2412,"src":"16363:349:12","visibility":"public"},{"canonicalName":"AddLiquidityKind","id":2347,"members":[{"id":2342,"name":"PROPORTIONAL","nameLocation":"16951:12:12","nodeType":"EnumValue","src":"16951:12:12"},{"id":2343,"name":"UNBALANCED","nameLocation":"16969:10:12","nodeType":"EnumValue","src":"16969:10:12"},{"id":2344,"name":"SINGLE_TOKEN_EXACT_OUT","nameLocation":"16985:22:12","nodeType":"EnumValue","src":"16985:22:12"},{"id":2345,"name":"DONATION","nameLocation":"17013:8:12","nodeType":"EnumValue","src":"17013:8:12"},{"id":2346,"name":"CUSTOM","nameLocation":"17027:6:12","nodeType":"EnumValue","src":"17027:6:12"}],"name":"AddLiquidityKind","nameLocation":"16928:16:12","nodeType":"EnumDefinition","src":"16923:112:12"},{"canonicalName":"AddLiquidityParams","documentation":{"id":2348,"nodeType":"StructuredDocumentation","src":"17037:320:12","text":" @notice Data for an add liquidity operation.\n @param pool Address of the pool\n @param to Address of user to mint to\n @param maxAmountsIn Maximum amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param kind Add liquidity kind\n @param userData Optional user data"},"id":2363,"members":[{"constant":false,"id":2350,"mutability":"mutable","name":"pool","nameLocation":"17398:4:12","nodeType":"VariableDeclaration","scope":2363,"src":"17390:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2349,"name":"address","nodeType":"ElementaryTypeName","src":"17390:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2352,"mutability":"mutable","name":"to","nameLocation":"17416:2:12","nodeType":"VariableDeclaration","scope":2363,"src":"17408:10:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2351,"name":"address","nodeType":"ElementaryTypeName","src":"17408:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2355,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"17434:12:12","nodeType":"VariableDeclaration","scope":2363,"src":"17424:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2353,"name":"uint256","nodeType":"ElementaryTypeName","src":"17424:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2354,"nodeType":"ArrayTypeName","src":"17424:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2357,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"17460:15:12","nodeType":"VariableDeclaration","scope":2363,"src":"17452:23:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2356,"name":"uint256","nodeType":"ElementaryTypeName","src":"17452:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2360,"mutability":"mutable","name":"kind","nameLocation":"17498:4:12","nodeType":"VariableDeclaration","scope":2363,"src":"17481:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2347","typeString":"enum AddLiquidityKind"},"typeName":{"id":2359,"nodeType":"UserDefinedTypeName","pathNode":{"id":2358,"name":"AddLiquidityKind","nameLocations":["17481:16:12"],"nodeType":"IdentifierPath","referencedDeclaration":2347,"src":"17481:16:12"},"referencedDeclaration":2347,"src":"17481:16:12","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$2347","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":2362,"mutability":"mutable","name":"userData","nameLocation":"17514:8:12","nodeType":"VariableDeclaration","scope":2363,"src":"17508:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2361,"name":"bytes","nodeType":"ElementaryTypeName","src":"17508:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"AddLiquidityParams","nameLocation":"17365:18:12","nodeType":"StructDefinition","scope":2412,"src":"17358:167:12","visibility":"public"},{"canonicalName":"RemoveLiquidityKind","id":2368,"members":[{"id":2364,"name":"PROPORTIONAL","nameLocation":"17770:12:12","nodeType":"EnumValue","src":"17770:12:12"},{"id":2365,"name":"SINGLE_TOKEN_EXACT_IN","nameLocation":"17788:21:12","nodeType":"EnumValue","src":"17788:21:12"},{"id":2366,"name":"SINGLE_TOKEN_EXACT_OUT","nameLocation":"17815:22:12","nodeType":"EnumValue","src":"17815:22:12"},{"id":2367,"name":"CUSTOM","nameLocation":"17843:6:12","nodeType":"EnumValue","src":"17843:6:12"}],"name":"RemoveLiquidityKind","nameLocation":"17744:19:12","nodeType":"EnumDefinition","src":"17739:112:12"},{"canonicalName":"RemoveLiquidityParams","documentation":{"id":2369,"nodeType":"StructuredDocumentation","src":"17853:330:12","text":" @notice Data for an remove liquidity operation.\n @param pool Address of the pool\n @param from Address of user to burn from\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOut Minimum amounts of output tokens\n @param kind Remove liquidity kind\n @param userData Optional user data"},"id":2384,"members":[{"constant":false,"id":2371,"mutability":"mutable","name":"pool","nameLocation":"18227:4:12","nodeType":"VariableDeclaration","scope":2384,"src":"18219:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2370,"name":"address","nodeType":"ElementaryTypeName","src":"18219:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2373,"mutability":"mutable","name":"from","nameLocation":"18245:4:12","nodeType":"VariableDeclaration","scope":2384,"src":"18237:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2372,"name":"address","nodeType":"ElementaryTypeName","src":"18237:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2375,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"18263:14:12","nodeType":"VariableDeclaration","scope":2384,"src":"18255:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2374,"name":"uint256","nodeType":"ElementaryTypeName","src":"18255:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2378,"mutability":"mutable","name":"minAmountsOut","nameLocation":"18293:13:12","nodeType":"VariableDeclaration","scope":2384,"src":"18283:23:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2376,"name":"uint256","nodeType":"ElementaryTypeName","src":"18283:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2377,"nodeType":"ArrayTypeName","src":"18283:9:12","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2381,"mutability":"mutable","name":"kind","nameLocation":"18332:4:12","nodeType":"VariableDeclaration","scope":2384,"src":"18312:24:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2368","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":2380,"nodeType":"UserDefinedTypeName","pathNode":{"id":2379,"name":"RemoveLiquidityKind","nameLocations":["18312:19:12"],"nodeType":"IdentifierPath","referencedDeclaration":2368,"src":"18312:19:12"},"referencedDeclaration":2368,"src":"18312:19:12","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$2368","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":2383,"mutability":"mutable","name":"userData","nameLocation":"18348:8:12","nodeType":"VariableDeclaration","scope":2384,"src":"18342:14:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2382,"name":"bytes","nodeType":"ElementaryTypeName","src":"18342:5:12","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"RemoveLiquidityParams","nameLocation":"18191:21:12","nodeType":"StructDefinition","scope":2412,"src":"18184:175:12","visibility":"public"},{"canonicalName":"WrappingDirection","id":2387,"members":[{"id":2385,"name":"WRAP","nameLocation":"18602:4:12","nodeType":"EnumValue","src":"18602:4:12"},{"id":2386,"name":"UNWRAP","nameLocation":"18612:6:12","nodeType":"EnumValue","src":"18612:6:12"}],"name":"WrappingDirection","nameLocation":"18578:17:12","nodeType":"EnumDefinition","src":"18573:47:12"},{"canonicalName":"BufferWrapOrUnwrapParams","documentation":{"id":2388,"nodeType":"StructuredDocumentation","src":"18622:499:12","text":" @notice Data for a wrap/unwrap operation.\n @param kind Type of swap (Exact In or Exact Out)\n @param direction Direction of the wrapping operation (Wrap or Unwrap)\n @param wrappedToken Wrapped token, compatible with interface ERC4626\n @param amountGivenRaw Amount specified for tokenIn or tokenOut (depends on the type of swap and wrapping direction)\n @param limitRaw Minimum or maximum amount specified for the other token (depends on the type of swap and wrapping\n direction)"},"id":2402,"members":[{"constant":false,"id":2391,"mutability":"mutable","name":"kind","nameLocation":"19169:4:12","nodeType":"VariableDeclaration","scope":2402,"src":"19160:13:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2275","typeString":"enum SwapKind"},"typeName":{"id":2390,"nodeType":"UserDefinedTypeName","pathNode":{"id":2389,"name":"SwapKind","nameLocations":["19160:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":2275,"src":"19160:8:12"},"referencedDeclaration":2275,"src":"19160:8:12","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$2275","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2394,"mutability":"mutable","name":"direction","nameLocation":"19197:9:12","nodeType":"VariableDeclaration","scope":2402,"src":"19179:27:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$2387","typeString":"enum WrappingDirection"},"typeName":{"id":2393,"nodeType":"UserDefinedTypeName","pathNode":{"id":2392,"name":"WrappingDirection","nameLocations":["19179:17:12"],"nodeType":"IdentifierPath","referencedDeclaration":2387,"src":"19179:17:12"},"referencedDeclaration":2387,"src":"19179:17:12","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$2387","typeString":"enum WrappingDirection"}},"visibility":"internal"},{"constant":false,"id":2397,"mutability":"mutable","name":"wrappedToken","nameLocation":"19221:12:12","nodeType":"VariableDeclaration","scope":2402,"src":"19212:21:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"},"typeName":{"id":2396,"nodeType":"UserDefinedTypeName","pathNode":{"id":2395,"name":"IERC4626","nameLocations":["19212:8:12"],"nodeType":"IdentifierPath","referencedDeclaration":6513,"src":"19212:8:12"},"referencedDeclaration":6513,"src":"19212:8:12","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$6513","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":2399,"mutability":"mutable","name":"amountGivenRaw","nameLocation":"19247:14:12","nodeType":"VariableDeclaration","scope":2402,"src":"19239:22:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2398,"name":"uint256","nodeType":"ElementaryTypeName","src":"19239:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2401,"mutability":"mutable","name":"limitRaw","nameLocation":"19275:8:12","nodeType":"VariableDeclaration","scope":2402,"src":"19267:16:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2400,"name":"uint256","nodeType":"ElementaryTypeName","src":"19267:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"BufferWrapOrUnwrapParams","nameLocation":"19129:24:12","nodeType":"StructDefinition","scope":2412,"src":"19122:164:12","visibility":"public"},{"constant":true,"id":2405,"mutability":"constant","name":"FEE_BITLENGTH","nameLocation":"19611:13:12","nodeType":"VariableDeclaration","scope":2412,"src":"19594:35:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2403,"name":"uint256","nodeType":"ElementaryTypeName","src":"19594:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3234","id":2404,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19627:2:12","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},"visibility":"internal"},{"constant":true,"id":2408,"mutability":"constant","name":"FEE_SCALING_FACTOR","nameLocation":"19648:18:12","nodeType":"VariableDeclaration","scope":2412,"src":"19631:42:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2406,"name":"uint256","nodeType":"ElementaryTypeName","src":"19631:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653131","id":2407,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19669:4:12","typeDescriptions":{"typeIdentifier":"t_rational_100000000000_by_1","typeString":"int_const 100000000000"},"value":"1e11"},"visibility":"internal"},{"constant":true,"id":2411,"mutability":"constant","name":"MAX_FEE_PERCENTAGE","nameLocation":"19896:18:12","nodeType":"VariableDeclaration","scope":2412,"src":"19879:48:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2409,"name":"uint256","nodeType":"ElementaryTypeName","src":"19879:7:12","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"39392e39393939653136","id":2410,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19917:10:12","typeDescriptions":{"typeIdentifier":"t_rational_999999000000000000_by_1","typeString":"int_const 999999000000000000"},"value":"99.9999e16"},"visibility":"internal"}],"src":"46:19895:12"},"id":12},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","exportedSymbols":{"Authentication":[2491],"IAuthentication":[47]},"id":2492,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2413,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:13"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","id":2415,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2492,"sourceUnit":48,"src":"72:116:13","symbolAliases":[{"foreign":{"id":2414,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"81:15:13","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":2417,"name":"IAuthentication","nameLocations":["625:15:13"],"nodeType":"IdentifierPath","referencedDeclaration":47,"src":"625:15:13"},"id":2418,"nodeType":"InheritanceSpecifier","src":"625:15:13"}],"canonicalName":"Authentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":2416,"nodeType":"StructuredDocumentation","src":"190:398:13","text":" @notice Building block for performing access control on external functions.\n @dev This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be\n applied to external functions to make them only callable by authorized accounts.\n Derived contracts must implement the `_canPerform` function, which holds the actual access control logic."},"fullyImplemented":false,"id":2491,"linearizedBaseContracts":[2491,47],"name":"Authentication","nameLocation":"607:14:13","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":2420,"mutability":"immutable","name":"_actionIdDisambiguator","nameLocation":"673:22:13","nodeType":"VariableDeclaration","scope":2491,"src":"647:48:13","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2419,"name":"bytes32","nodeType":"ElementaryTypeName","src":"647:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"body":{"id":2430,"nodeType":"Block","src":"1337:63:13","statements":[{"expression":{"id":2428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2426,"name":"_actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2420,"src":"1347:22:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2427,"name":"actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2423,"src":"1372:21:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1347:46:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2429,"nodeType":"ExpressionStatement","src":"1347:46:13"}]},"documentation":{"id":2421,"nodeType":"StructuredDocumentation","src":"702:587:13","text":" @dev The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in\n multi-contract systems.\n There are two main uses for it:\n - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers\n unique. The contract's own address is a good option.\n - if the contract belongs to a family that shares action identifiers for the same functions, an identifier\n shared by the entire family (and no other contract) should be used instead."},"id":2431,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":2424,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2423,"mutability":"mutable","name":"actionIdDisambiguator","nameLocation":"1314:21:13","nodeType":"VariableDeclaration","scope":2431,"src":"1306:29:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2422,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1306:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1305:31:13"},"returnParameters":{"id":2425,"nodeType":"ParameterList","parameters":[],"src":"1337:0:13"},"scope":2491,"src":"1294:106:13","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2438,"nodeType":"Block","src":"1549:49:13","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2434,"name":"_authenticateCaller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2462,"src":"1559:19:13","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":2435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1559:21:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2436,"nodeType":"ExpressionStatement","src":"1559:21:13"},{"id":2437,"nodeType":"PlaceholderStatement","src":"1590:1:13"}]},"documentation":{"id":2432,"nodeType":"StructuredDocumentation","src":"1406:114:13","text":"@dev Reverts unless the caller is allowed to call this function. Should only be applied to external functions."},"id":2439,"name":"authenticate","nameLocation":"1534:12:13","nodeType":"ModifierDefinition","parameters":{"id":2433,"nodeType":"ParameterList","parameters":[],"src":"1546:2:13"},"src":"1525:73:13","virtual":false,"visibility":"internal"},{"body":{"id":2461,"nodeType":"Block","src":"1733:156:13","statements":[{"assignments":[2444],"declarations":[{"constant":false,"id":2444,"mutability":"mutable","name":"actionId","nameLocation":"1751:8:13","nodeType":"VariableDeclaration","scope":2461,"src":"1743:16:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2443,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1743:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2449,"initialValue":{"arguments":[{"expression":{"id":2446,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1774:3:13","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1778:3:13","memberName":"sig","nodeType":"MemberAccess","src":"1774:7:13","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":2445,"name":"getActionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2480,"src":"1762:11:13","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view returns (bytes32)"}},"id":2448,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1762:20:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1743:39:13"},{"condition":{"id":2455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1797:34:13","subExpression":{"arguments":[{"id":2451,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2444,"src":"1810:8:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":2452,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1820:3:13","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1824:6:13","memberName":"sender","nodeType":"MemberAccess","src":"1820:10:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2450,"name":"_canPerform","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2490,"src":"1798:11:13","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":2454,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1798:33:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2460,"nodeType":"IfStatement","src":"1793:90:13","trueBody":{"id":2459,"nodeType":"Block","src":"1833:50:13","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2456,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38,"src":"1854:16:13","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2457,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1854:18:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2458,"nodeType":"RevertStatement","src":"1847:25:13"}]}}]},"documentation":{"id":2440,"nodeType":"StructuredDocumentation","src":"1604:79:13","text":"@dev Reverts unless the caller is allowed to call the entry point function."},"id":2462,"implemented":true,"kind":"function","modifiers":[],"name":"_authenticateCaller","nameLocation":"1697:19:13","nodeType":"FunctionDefinition","parameters":{"id":2441,"nodeType":"ParameterList","parameters":[],"src":"1716:2:13"},"returnParameters":{"id":2442,"nodeType":"ParameterList","parameters":[],"src":"1733:0:13"},"scope":2491,"src":"1688:201:13","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[46],"body":{"id":2479,"nodeType":"Block","src":"2008:353:13","statements":[{"expression":{"arguments":[{"arguments":[{"id":2474,"name":"_actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2420,"src":"2320:22:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2475,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2465,"src":"2344:8:13","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":2472,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2303:3:13","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2473,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2307:12:13","memberName":"encodePacked","nodeType":"MemberAccess","src":"2303:16:13","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":2476,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2303:50:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2471,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2293:9:13","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":2477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2293:61:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":2470,"id":2478,"nodeType":"Return","src":"2286:68:13"}]},"documentation":{"id":2463,"nodeType":"StructuredDocumentation","src":"1895:31:13","text":"@inheritdoc IAuthentication"},"functionSelector":"851c1bb3","id":2480,"implemented":true,"kind":"function","modifiers":[],"name":"getActionId","nameLocation":"1940:11:13","nodeType":"FunctionDefinition","overrides":{"id":2467,"nodeType":"OverrideSpecifier","overrides":[],"src":"1981:8:13"},"parameters":{"id":2466,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2465,"mutability":"mutable","name":"selector","nameLocation":"1959:8:13","nodeType":"VariableDeclaration","scope":2480,"src":"1952:15:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":2464,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1952:6:13","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1951:17:13"},"returnParameters":{"id":2470,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2469,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2480,"src":"1999:7:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2468,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1999:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1998:9:13"},"scope":2491,"src":"1931:430:13","stateMutability":"view","virtual":false,"visibility":"public"},{"documentation":{"id":2481,"nodeType":"StructuredDocumentation","src":"2367:304:13","text":" @dev Derived contracts must implement this function to perform the actual access control logic.\n @param actionId The action identifier associated with an external function\n @param user The account performing the action\n @return success True if the action is permitted"},"id":2490,"implemented":false,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"2685:11:13","nodeType":"FunctionDefinition","parameters":{"id":2486,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2483,"mutability":"mutable","name":"actionId","nameLocation":"2705:8:13","nodeType":"VariableDeclaration","scope":2490,"src":"2697:16:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2482,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2697:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2485,"mutability":"mutable","name":"user","nameLocation":"2723:4:13","nodeType":"VariableDeclaration","scope":2490,"src":"2715:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2484,"name":"address","nodeType":"ElementaryTypeName","src":"2715:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2696:32:13"},"returnParameters":{"id":2489,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2488,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2490,"src":"2760:4:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2487,"name":"bool","nodeType":"ElementaryTypeName","src":"2760:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2759:6:13"},"scope":2491,"src":"2676:90:13","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":2492,"src":"589:2179:13","usedErrors":[38],"usedEvents":[]}],"src":"46:2723:13"},"id":13},"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol","exportedSymbols":{"Authentication":[2491],"CommonAuthentication":[2635],"IVault":[651]},"id":2636,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2493,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:14"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":2495,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2636,"sourceUnit":652,"src":"72:81:14","symbolAliases":[{"foreign":{"id":2494,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":651,"src":"81:6:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","file":"./Authentication.sol","id":2497,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2636,"sourceUnit":2492,"src":"155:54:14","symbolAliases":[{"foreign":{"id":2496,"name":"Authentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2491,"src":"164:14:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":2499,"name":"Authentication","nameLocations":["342:14:14"],"nodeType":"IdentifierPath","referencedDeclaration":2491,"src":"342:14:14"},"id":2500,"nodeType":"InheritanceSpecifier","src":"342:14:14"}],"canonicalName":"CommonAuthentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":2498,"nodeType":"StructuredDocumentation","src":"211:89:14","text":"@dev Base contract for performing access control on external functions within pools."},"fullyImplemented":true,"id":2635,"linearizedBaseContracts":[2635,2491,47],"name":"CommonAuthentication","nameLocation":"318:20:14","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":2503,"mutability":"immutable","name":"_vault","nameLocation":"388:6:14","nodeType":"VariableDeclaration","scope":2635,"src":"363:31:14","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":2502,"nodeType":"UserDefinedTypeName","pathNode":{"id":2501,"name":"IVault","nameLocations":["363:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"363:6:14"},"referencedDeclaration":651,"src":"363:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"private"},{"body":{"id":2522,"nodeType":"Block","src":"651:161:14","statements":[{"assignments":[2509],"declarations":[{"constant":false,"id":2509,"mutability":"mutable","name":"roleAddress","nameLocation":"669:11:14","nodeType":"VariableDeclaration","scope":2522,"src":"661:19:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2508,"name":"address","nodeType":"ElementaryTypeName","src":"661:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":2515,"initialValue":{"expression":{"arguments":[{"id":2512,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2506,"src":"710:4:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":2510,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2503,"src":"683:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":2511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"690:19:14","memberName":"getPoolRoleAccounts","nodeType":"MemberAccess","referencedDeclaration":1882,"src":"683:26:14","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_PoolRoleAccounts_$2217_memory_ptr_$","typeString":"function (address) view external returns (struct PoolRoleAccounts memory)"}},"id":2513,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"683:32:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"id":2514,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"716:14:14","memberName":"swapFeeManager","nodeType":"MemberAccess","referencedDeclaration":2214,"src":"683:47:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"661:69:14"},{"expression":{"arguments":[{"id":2517,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2506,"src":"776:4:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2518,"name":"roleAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2509,"src":"782:11:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2516,"name":"_ensureAuthenticatedByExclusiveRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2634,"src":"740:35:14","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) view"}},"id":2519,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"740:54:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2520,"nodeType":"ExpressionStatement","src":"740:54:14"},{"id":2521,"nodeType":"PlaceholderStatement","src":"804:1:14"}]},"documentation":{"id":2504,"nodeType":"StructuredDocumentation","src":"500:92:14","text":"@notice Caller must be the swapFeeManager, if defined. Otherwise, default to governance."},"id":2523,"name":"onlySwapFeeManagerOrGovernance","nameLocation":"606:30:14","nodeType":"ModifierDefinition","parameters":{"id":2507,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2506,"mutability":"mutable","name":"pool","nameLocation":"645:4:14","nodeType":"VariableDeclaration","scope":2523,"src":"637:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2505,"name":"address","nodeType":"ElementaryTypeName","src":"637:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"636:14:14"},"src":"597:215:14","virtual":false,"visibility":"internal"},{"body":{"id":2538,"nodeType":"Block","src":"913:31:14","statements":[{"expression":{"id":2536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2534,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2503,"src":"923:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":2535,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2526,"src":"932:5:14","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"src":"923:14:14","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":2537,"nodeType":"ExpressionStatement","src":"923:14:14"}]},"id":2539,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":2531,"name":"actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2528,"src":"890:21:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":2532,"kind":"baseConstructorSpecifier","modifierName":{"id":2530,"name":"Authentication","nameLocations":["875:14:14"],"nodeType":"IdentifierPath","referencedDeclaration":2491,"src":"875:14:14"},"nodeType":"ModifierInvocation","src":"875:37:14"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":2529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2526,"mutability":"mutable","name":"vault","nameLocation":"837:5:14","nodeType":"VariableDeclaration","scope":2539,"src":"830:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":2525,"nodeType":"UserDefinedTypeName","pathNode":{"id":2524,"name":"IVault","nameLocations":["830:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"830:6:14"},"referencedDeclaration":651,"src":"830:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":2528,"mutability":"mutable","name":"actionIdDisambiguator","nameLocation":"852:21:14","nodeType":"VariableDeclaration","scope":2539,"src":"844:29:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2527,"name":"bytes32","nodeType":"ElementaryTypeName","src":"844:7:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"829:45:14"},"returnParameters":{"id":2533,"nodeType":"ParameterList","parameters":[],"src":"913:0:14"},"scope":2635,"src":"818:126:14","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2547,"nodeType":"Block","src":"1002:30:14","statements":[{"expression":{"id":2545,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2503,"src":"1019:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"functionReturnParameters":2544,"id":2546,"nodeType":"Return","src":"1012:13:14"}]},"id":2548,"implemented":true,"kind":"function","modifiers":[],"name":"_getVault","nameLocation":"959:9:14","nodeType":"FunctionDefinition","parameters":{"id":2540,"nodeType":"ParameterList","parameters":[],"src":"968:2:14"},"returnParameters":{"id":2544,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2543,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2548,"src":"994:6:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":2542,"nodeType":"UserDefinedTypeName","pathNode":{"id":2541,"name":"IVault","nameLocations":["994:6:14"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"994:6:14"},"referencedDeclaration":651,"src":"994:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"}],"src":"993:8:14"},"scope":2635,"src":"950:82:14","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[2490],"body":{"id":2570,"nodeType":"Block","src":"1214:88:14","statements":[{"expression":{"arguments":[{"id":2562,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2550,"src":"1265:8:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2563,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2552,"src":"1275:4:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":2566,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1289:4:14","typeDescriptions":{"typeIdentifier":"t_contract$_CommonAuthentication_$2635","typeString":"contract CommonAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CommonAuthentication_$2635","typeString":"contract CommonAuthentication"}],"id":2565,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1281:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2564,"name":"address","nodeType":"ElementaryTypeName","src":"1281:7:14","typeDescriptions":{}}},"id":2567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1281:13:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":2558,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2503,"src":"1231:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":2559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1238:13:14","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":1965,"src":"1231:20:14","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$73_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":2560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1231:22:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"}},"id":2561,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1254:10:14","memberName":"canPerform","nodeType":"MemberAccess","referencedDeclaration":72,"src":"1231:33:14","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view external returns (bool)"}},"id":2568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1231:64:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2557,"id":2569,"nodeType":"Return","src":"1224:71:14"}]},"id":2571,"implemented":true,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"1132:11:14","nodeType":"FunctionDefinition","overrides":{"id":2554,"nodeType":"OverrideSpecifier","overrides":[],"src":"1190:8:14"},"parameters":{"id":2553,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2550,"mutability":"mutable","name":"actionId","nameLocation":"1152:8:14","nodeType":"VariableDeclaration","scope":2571,"src":"1144:16:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2549,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1144:7:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2552,"mutability":"mutable","name":"user","nameLocation":"1170:4:14","nodeType":"VariableDeclaration","scope":2571,"src":"1162:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2551,"name":"address","nodeType":"ElementaryTypeName","src":"1162:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1143:32:14"},"returnParameters":{"id":2557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2556,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2571,"src":"1208:4:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2555,"name":"bool","nodeType":"ElementaryTypeName","src":"1208:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1207:6:14"},"scope":2635,"src":"1123:179:14","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2591,"nodeType":"Block","src":"1408:83:14","statements":[{"expression":{"arguments":[{"id":2586,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2573,"src":"1459:8:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2587,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2575,"src":"1469:7:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2588,"name":"where","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2577,"src":"1478:5:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":2582,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2503,"src":"1425:6:14","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":2583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1432:13:14","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":1965,"src":"1425:20:14","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$73_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":2584,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1425:22:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"}},"id":2585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1448:10:14","memberName":"canPerform","nodeType":"MemberAccess","referencedDeclaration":72,"src":"1425:33:14","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view external returns (bool)"}},"id":2589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1425:59:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2581,"id":2590,"nodeType":"Return","src":"1418:66:14"}]},"id":2592,"implemented":true,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"1317:11:14","nodeType":"FunctionDefinition","parameters":{"id":2578,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2573,"mutability":"mutable","name":"actionId","nameLocation":"1337:8:14","nodeType":"VariableDeclaration","scope":2592,"src":"1329:16:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2572,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1329:7:14","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":2575,"mutability":"mutable","name":"account","nameLocation":"1355:7:14","nodeType":"VariableDeclaration","scope":2592,"src":"1347:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2574,"name":"address","nodeType":"ElementaryTypeName","src":"1347:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2577,"mutability":"mutable","name":"where","nameLocation":"1372:5:14","nodeType":"VariableDeclaration","scope":2592,"src":"1364:13:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2576,"name":"address","nodeType":"ElementaryTypeName","src":"1364:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1328:50:14"},"returnParameters":{"id":2581,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2580,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2592,"src":"1402:4:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2579,"name":"bool","nodeType":"ElementaryTypeName","src":"1402:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1401:6:14"},"scope":2635,"src":"1308:183:14","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":2633,"nodeType":"Block","src":"1697:338:14","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2605,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2600,"name":"roleAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2597,"src":"1711:11:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":2603,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1734:1:14","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2602,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1726:7:14","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2601,"name":"address","nodeType":"ElementaryTypeName","src":"1726:7:14","typeDescriptions":{}}},"id":2604,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1726:10:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1711:25:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":2623,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1952:3:14","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1956:6:14","memberName":"sender","nodeType":"MemberAccess","src":"1952:10:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":2625,"name":"roleAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2597,"src":"1966:11:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1952:25:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2631,"nodeType":"IfStatement","src":"1948:81:14","trueBody":{"id":2630,"nodeType":"Block","src":"1979:50:14","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2627,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38,"src":"2000:16:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2000:18:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2629,"nodeType":"RevertStatement","src":"1993:25:14"}]}},"id":2632,"nodeType":"IfStatement","src":"1707:322:14","trueBody":{"id":2622,"nodeType":"Block","src":"1738:204:14","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"expression":{"id":2608,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1836:3:14","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1840:3:14","memberName":"sig","nodeType":"MemberAccess","src":"1836:7:14","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":2607,"name":"getActionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2480,"src":"1824:11:14","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view returns (bytes32)"}},"id":2610,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1824:20:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":2611,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1846:3:14","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1850:6:14","memberName":"sender","nodeType":"MemberAccess","src":"1846:10:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2613,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2595,"src":"1858:4:14","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2606,"name":"_canPerform","nodeType":"Identifier","overloadedDeclarations":[2571,2592],"referencedDeclaration":2592,"src":"1812:11:14","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view returns (bool)"}},"id":2614,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1812:51:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":2615,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1867:5:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"1812:60:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2621,"nodeType":"IfStatement","src":"1808:124:14","trueBody":{"id":2620,"nodeType":"Block","src":"1874:58:14","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2617,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38,"src":"1899:16:14","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2618,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1899:18:14","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2619,"nodeType":"RevertStatement","src":"1892:25:14"}]}}]}}]},"documentation":{"id":2593,"nodeType":"StructuredDocumentation","src":"1497:101:14","text":"@dev Ensure the sender is the roleAddress, or default to governance if roleAddress is address(0)."},"id":2634,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureAuthenticatedByExclusiveRole","nameLocation":"1612:35:14","nodeType":"FunctionDefinition","parameters":{"id":2598,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2595,"mutability":"mutable","name":"pool","nameLocation":"1656:4:14","nodeType":"VariableDeclaration","scope":2634,"src":"1648:12:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2594,"name":"address","nodeType":"ElementaryTypeName","src":"1648:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2597,"mutability":"mutable","name":"roleAddress","nameLocation":"1670:11:14","nodeType":"VariableDeclaration","scope":2634,"src":"1662:19:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2596,"name":"address","nodeType":"ElementaryTypeName","src":"1662:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1647:35:14"},"returnParameters":{"id":2599,"nodeType":"ParameterList","parameters":[],"src":"1697:0:14"},"scope":2635,"src":"1603:432:14","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":2636,"src":"300:1737:14","usedErrors":[38],"usedEvents":[]}],"src":"46:1992:14"},"id":14},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","exportedSymbols":{"FixedPoint":[2934],"LogExpMath":[4290]},"id":2935,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2637,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:15"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol","file":"./LogExpMath.sol","id":2639,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2935,"sourceUnit":4291,"src":"72:46:15","symbolAliases":[{"foreign":{"id":2638,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4290,"src":"81:10:15","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"FixedPoint","contractDependencies":[],"contractKind":"library","documentation":{"id":2640,"nodeType":"StructuredDocumentation","src":"120:119:15","text":"@notice Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision."},"fullyImplemented":true,"id":2934,"linearizedBaseContracts":[2934],"name":"FixedPoint","nameLocation":"247:10:15","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2641,"nodeType":"StructuredDocumentation","src":"264:39:15","text":"@notice Attempted division by zero."},"errorSelector":"0a0c22c7","id":2643,"name":"ZeroDivision","nameLocation":"314:12:15","nodeType":"ErrorDefinition","parameters":{"id":2642,"nodeType":"ParameterList","parameters":[],"src":"326:2:15"},"src":"308:21:15"},{"constant":true,"id":2646,"mutability":"constant","name":"ONE","nameLocation":"459:3:15","nodeType":"VariableDeclaration","scope":2934,"src":"433:36:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2644,"name":"uint256","nodeType":"ElementaryTypeName","src":"433:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653138","id":2645,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"465:4:15","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"internal"},{"constant":true,"id":2651,"mutability":"constant","name":"TWO","nameLocation":"522:3:15","nodeType":"VariableDeclaration","scope":2934,"src":"496:39:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2647,"name":"uint256","nodeType":"ElementaryTypeName","src":"496:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2650,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":2648,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"528:1:15","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2649,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2646,"src":"532:3:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"528:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":2656,"mutability":"constant","name":"FOUR","nameLocation":"567:4:15","nodeType":"VariableDeclaration","scope":2934,"src":"541:40:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2652,"name":"uint256","nodeType":"ElementaryTypeName","src":"541:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2655,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"34","id":2653,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"574:1:15","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2654,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2646,"src":"578:3:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"574:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":2659,"mutability":"constant","name":"MAX_POW_RELATIVE_ERROR","nameLocation":"613:22:15","nodeType":"VariableDeclaration","scope":2934,"src":"587:56:15","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2657,"name":"uint256","nodeType":"ElementaryTypeName","src":"587:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3130303030","id":2658,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"638:5:15","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"value":"10000"},"visibility":"internal"},{"body":{"id":2678,"nodeType":"Block","src":"733:148:15","statements":[{"assignments":[2669],"declarations":[{"constant":false,"id":2669,"mutability":"mutable","name":"product","nameLocation":"828:7:15","nodeType":"VariableDeclaration","scope":2678,"src":"820:15:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2668,"name":"uint256","nodeType":"ElementaryTypeName","src":"820:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2673,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2670,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2661,"src":"838:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2671,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2663,"src":"842:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"838:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"820:23:15"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2674,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2669,"src":"861:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":2675,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2646,"src":"871:3:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"861:13:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2667,"id":2677,"nodeType":"Return","src":"854:20:15"}]},"id":2679,"implemented":true,"kind":"function","modifiers":[],"name":"mulDown","nameLocation":"671:7:15","nodeType":"FunctionDefinition","parameters":{"id":2664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2661,"mutability":"mutable","name":"a","nameLocation":"687:1:15","nodeType":"VariableDeclaration","scope":2679,"src":"679:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2660,"name":"uint256","nodeType":"ElementaryTypeName","src":"679:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2663,"mutability":"mutable","name":"b","nameLocation":"698:1:15","nodeType":"VariableDeclaration","scope":2679,"src":"690:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2662,"name":"uint256","nodeType":"ElementaryTypeName","src":"690:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"678:22:15"},"returnParameters":{"id":2667,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2666,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2679,"src":"724:7:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2665,"name":"uint256","nodeType":"ElementaryTypeName","src":"724:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"723:9:15"},"scope":2934,"src":"662:219:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2695,"nodeType":"Block","src":"963:351:15","statements":[{"assignments":[2689],"declarations":[{"constant":false,"id":2689,"mutability":"mutable","name":"product","nameLocation":"1058:7:15","nodeType":"VariableDeclaration","scope":2695,"src":"1050:15:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2688,"name":"uint256","nodeType":"ElementaryTypeName","src":"1050:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2693,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2690,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2681,"src":"1068:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2691,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2683,"src":"1072:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1068:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1050:23:15"},{"AST":{"nativeSrc":"1211:97:15","nodeType":"YulBlock","src":"1211:97:15","statements":[{"nativeSrc":"1225:73:15","nodeType":"YulAssignment","src":"1225:73:15","value":{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"1253:7:15","nodeType":"YulIdentifier","src":"1253:7:15"}],"functionName":{"name":"iszero","nativeSrc":"1246:6:15","nodeType":"YulIdentifier","src":"1246:6:15"},"nativeSrc":"1246:15:15","nodeType":"YulFunctionCall","src":"1246:15:15"}],"functionName":{"name":"iszero","nativeSrc":"1239:6:15","nodeType":"YulIdentifier","src":"1239:6:15"},"nativeSrc":"1239:23:15","nodeType":"YulFunctionCall","src":"1239:23:15"},{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"1276:7:15","nodeType":"YulIdentifier","src":"1276:7:15"},{"kind":"number","nativeSrc":"1285:1:15","nodeType":"YulLiteral","src":"1285:1:15","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"1272:3:15","nodeType":"YulIdentifier","src":"1272:3:15"},"nativeSrc":"1272:15:15","nodeType":"YulFunctionCall","src":"1272:15:15"},{"name":"ONE","nativeSrc":"1289:3:15","nodeType":"YulIdentifier","src":"1289:3:15"}],"functionName":{"name":"div","nativeSrc":"1268:3:15","nodeType":"YulIdentifier","src":"1268:3:15"},"nativeSrc":"1268:25:15","nodeType":"YulFunctionCall","src":"1268:25:15"},{"kind":"number","nativeSrc":"1295:1:15","nodeType":"YulLiteral","src":"1295:1:15","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"1264:3:15","nodeType":"YulIdentifier","src":"1264:3:15"},"nativeSrc":"1264:33:15","nodeType":"YulFunctionCall","src":"1264:33:15"}],"functionName":{"name":"mul","nativeSrc":"1235:3:15","nodeType":"YulIdentifier","src":"1235:3:15"},"nativeSrc":"1235:63:15","nodeType":"YulFunctionCall","src":"1235:63:15"},"variableNames":[{"name":"result","nativeSrc":"1225:6:15","nodeType":"YulIdentifier","src":"1225:6:15"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":2646,"isOffset":false,"isSlot":false,"src":"1289:3:15","valueSize":1},{"declaration":2689,"isOffset":false,"isSlot":false,"src":"1253:7:15","valueSize":1},{"declaration":2689,"isOffset":false,"isSlot":false,"src":"1276:7:15","valueSize":1},{"declaration":2686,"isOffset":false,"isSlot":false,"src":"1225:6:15","valueSize":1}],"flags":["memory-safe"],"id":2694,"nodeType":"InlineAssembly","src":"1186:122:15"}]},"id":2696,"implemented":true,"kind":"function","modifiers":[],"name":"mulUp","nameLocation":"896:5:15","nodeType":"FunctionDefinition","parameters":{"id":2684,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2681,"mutability":"mutable","name":"a","nameLocation":"910:1:15","nodeType":"VariableDeclaration","scope":2696,"src":"902:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2680,"name":"uint256","nodeType":"ElementaryTypeName","src":"902:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2683,"mutability":"mutable","name":"b","nameLocation":"921:1:15","nodeType":"VariableDeclaration","scope":2696,"src":"913:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2682,"name":"uint256","nodeType":"ElementaryTypeName","src":"913:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"901:22:15"},"returnParameters":{"id":2687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2686,"mutability":"mutable","name":"result","nameLocation":"955:6:15","nodeType":"VariableDeclaration","scope":2696,"src":"947:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2685,"name":"uint256","nodeType":"ElementaryTypeName","src":"947:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"946:16:15"},"scope":2934,"src":"887:427:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2715,"nodeType":"Block","src":"1391:254:15","statements":[{"assignments":[2706],"declarations":[{"constant":false,"id":2706,"mutability":"mutable","name":"aInflated","nameLocation":"1499:9:15","nodeType":"VariableDeclaration","scope":2715,"src":"1491:17:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2705,"name":"uint256","nodeType":"ElementaryTypeName","src":"1491:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2710,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2707,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2698,"src":"1511:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2708,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2646,"src":"1515:3:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1511:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1491:27:15"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2711,"name":"aInflated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2706,"src":"1625:9:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":2712,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2700,"src":"1637:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1625:13:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2704,"id":2714,"nodeType":"Return","src":"1618:20:15"}]},"id":2716,"implemented":true,"kind":"function","modifiers":[],"name":"divDown","nameLocation":"1329:7:15","nodeType":"FunctionDefinition","parameters":{"id":2701,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2698,"mutability":"mutable","name":"a","nameLocation":"1345:1:15","nodeType":"VariableDeclaration","scope":2716,"src":"1337:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2697,"name":"uint256","nodeType":"ElementaryTypeName","src":"1337:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2700,"mutability":"mutable","name":"b","nameLocation":"1356:1:15","nodeType":"VariableDeclaration","scope":2716,"src":"1348:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2699,"name":"uint256","nodeType":"ElementaryTypeName","src":"1348:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1336:22:15"},"returnParameters":{"id":2704,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2703,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2716,"src":"1382:7:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2702,"name":"uint256","nodeType":"ElementaryTypeName","src":"1382:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1381:9:15"},"scope":2934,"src":"1320:325:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2731,"nodeType":"Block","src":"1727:43:15","statements":[{"expression":{"arguments":[{"id":2726,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2718,"src":"1753:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2727,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2646,"src":"1756:3:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2728,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2720,"src":"1761:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2725,"name":"mulDivUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2760,"src":"1744:8:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":2729,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1744:19:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2724,"id":2730,"nodeType":"Return","src":"1737:26:15"}]},"id":2732,"implemented":true,"kind":"function","modifiers":[],"name":"divUp","nameLocation":"1660:5:15","nodeType":"FunctionDefinition","parameters":{"id":2721,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2718,"mutability":"mutable","name":"a","nameLocation":"1674:1:15","nodeType":"VariableDeclaration","scope":2732,"src":"1666:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2717,"name":"uint256","nodeType":"ElementaryTypeName","src":"1666:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2720,"mutability":"mutable","name":"b","nameLocation":"1685:1:15","nodeType":"VariableDeclaration","scope":2732,"src":"1677:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2719,"name":"uint256","nodeType":"ElementaryTypeName","src":"1677:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1665:22:15"},"returnParameters":{"id":2724,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2723,"mutability":"mutable","name":"result","nameLocation":"1719:6:15","nodeType":"VariableDeclaration","scope":2732,"src":"1711:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2722,"name":"uint256","nodeType":"ElementaryTypeName","src":"1711:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1710:16:15"},"scope":2934,"src":"1651:119:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2759,"nodeType":"Block","src":"1912:774:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2746,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2744,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2739,"src":"2004:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2745,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2009:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2004:6:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2751,"nodeType":"IfStatement","src":"2000:58:15","trueBody":{"id":2750,"nodeType":"Block","src":"2012:46:15","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2747,"name":"ZeroDivision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2643,"src":"2033:12:15","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2748,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2033:14:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2749,"nodeType":"RevertStatement","src":"2026:21:15"}]}},{"assignments":[2753],"declarations":[{"constant":false,"id":2753,"mutability":"mutable","name":"product","nameLocation":"2143:7:15","nodeType":"VariableDeclaration","scope":2759,"src":"2135:15:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2752,"name":"uint256","nodeType":"ElementaryTypeName","src":"2135:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2757,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2754,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2735,"src":"2153:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":2755,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2737,"src":"2157:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2153:5:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2135:23:15"},{"AST":{"nativeSrc":"2585:95:15","nodeType":"YulBlock","src":"2585:95:15","statements":[{"nativeSrc":"2599:71:15","nodeType":"YulAssignment","src":"2599:71:15","value":{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"2627:7:15","nodeType":"YulIdentifier","src":"2627:7:15"}],"functionName":{"name":"iszero","nativeSrc":"2620:6:15","nodeType":"YulIdentifier","src":"2620:6:15"},"nativeSrc":"2620:15:15","nodeType":"YulFunctionCall","src":"2620:15:15"}],"functionName":{"name":"iszero","nativeSrc":"2613:6:15","nodeType":"YulIdentifier","src":"2613:6:15"},"nativeSrc":"2613:23:15","nodeType":"YulFunctionCall","src":"2613:23:15"},{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"2650:7:15","nodeType":"YulIdentifier","src":"2650:7:15"},{"kind":"number","nativeSrc":"2659:1:15","nodeType":"YulLiteral","src":"2659:1:15","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"2646:3:15","nodeType":"YulIdentifier","src":"2646:3:15"},"nativeSrc":"2646:15:15","nodeType":"YulFunctionCall","src":"2646:15:15"},{"name":"c","nativeSrc":"2663:1:15","nodeType":"YulIdentifier","src":"2663:1:15"}],"functionName":{"name":"div","nativeSrc":"2642:3:15","nodeType":"YulIdentifier","src":"2642:3:15"},"nativeSrc":"2642:23:15","nodeType":"YulFunctionCall","src":"2642:23:15"},{"kind":"number","nativeSrc":"2667:1:15","nodeType":"YulLiteral","src":"2667:1:15","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"2638:3:15","nodeType":"YulIdentifier","src":"2638:3:15"},"nativeSrc":"2638:31:15","nodeType":"YulFunctionCall","src":"2638:31:15"}],"functionName":{"name":"mul","nativeSrc":"2609:3:15","nodeType":"YulIdentifier","src":"2609:3:15"},"nativeSrc":"2609:61:15","nodeType":"YulFunctionCall","src":"2609:61:15"},"variableNames":[{"name":"result","nativeSrc":"2599:6:15","nodeType":"YulIdentifier","src":"2599:6:15"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":2739,"isOffset":false,"isSlot":false,"src":"2663:1:15","valueSize":1},{"declaration":2753,"isOffset":false,"isSlot":false,"src":"2627:7:15","valueSize":1},{"declaration":2753,"isOffset":false,"isSlot":false,"src":"2650:7:15","valueSize":1},{"declaration":2742,"isOffset":false,"isSlot":false,"src":"2599:6:15","valueSize":1}],"flags":["memory-safe"],"id":2758,"nodeType":"InlineAssembly","src":"2560:120:15"}]},"documentation":{"id":2733,"nodeType":"StructuredDocumentation","src":"1776:41:15","text":"@dev Return (a * b) / c, rounding up."},"id":2760,"implemented":true,"kind":"function","modifiers":[],"name":"mulDivUp","nameLocation":"1831:8:15","nodeType":"FunctionDefinition","parameters":{"id":2740,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2735,"mutability":"mutable","name":"a","nameLocation":"1848:1:15","nodeType":"VariableDeclaration","scope":2760,"src":"1840:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2734,"name":"uint256","nodeType":"ElementaryTypeName","src":"1840:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2737,"mutability":"mutable","name":"b","nameLocation":"1859:1:15","nodeType":"VariableDeclaration","scope":2760,"src":"1851:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2736,"name":"uint256","nodeType":"ElementaryTypeName","src":"1851:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2739,"mutability":"mutable","name":"c","nameLocation":"1870:1:15","nodeType":"VariableDeclaration","scope":2760,"src":"1862:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2738,"name":"uint256","nodeType":"ElementaryTypeName","src":"1862:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1839:33:15"},"returnParameters":{"id":2743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2742,"mutability":"mutable","name":"result","nameLocation":"1904:6:15","nodeType":"VariableDeclaration","scope":2760,"src":"1896:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2741,"name":"uint256","nodeType":"ElementaryTypeName","src":"1896:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1895:16:15"},"scope":2934,"src":"1822:864:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2779,"nodeType":"Block","src":"3159:345:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2770,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2765,"src":"3251:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":2771,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3256:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3251:6:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2777,"nodeType":"IfStatement","src":"3247:58:15","trueBody":{"id":2776,"nodeType":"Block","src":"3259:46:15","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":2773,"name":"ZeroDivision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2643,"src":"3280:12:15","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":2774,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3280:14:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":2775,"nodeType":"RevertStatement","src":"3273:21:15"}]}},{"AST":{"nativeSrc":"3415:83:15","nodeType":"YulBlock","src":"3415:83:15","statements":[{"nativeSrc":"3429:59:15","nodeType":"YulAssignment","src":"3429:59:15","value":{"arguments":[{"arguments":[{"arguments":[{"name":"a","nativeSrc":"3457:1:15","nodeType":"YulIdentifier","src":"3457:1:15"}],"functionName":{"name":"iszero","nativeSrc":"3450:6:15","nodeType":"YulIdentifier","src":"3450:6:15"},"nativeSrc":"3450:9:15","nodeType":"YulFunctionCall","src":"3450:9:15"}],"functionName":{"name":"iszero","nativeSrc":"3443:6:15","nodeType":"YulIdentifier","src":"3443:6:15"},"nativeSrc":"3443:17:15","nodeType":"YulFunctionCall","src":"3443:17:15"},{"arguments":[{"kind":"number","nativeSrc":"3466:1:15","nodeType":"YulLiteral","src":"3466:1:15","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"a","nativeSrc":"3477:1:15","nodeType":"YulIdentifier","src":"3477:1:15"},{"kind":"number","nativeSrc":"3480:1:15","nodeType":"YulLiteral","src":"3480:1:15","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"3473:3:15","nodeType":"YulIdentifier","src":"3473:3:15"},"nativeSrc":"3473:9:15","nodeType":"YulFunctionCall","src":"3473:9:15"},{"name":"b","nativeSrc":"3484:1:15","nodeType":"YulIdentifier","src":"3484:1:15"}],"functionName":{"name":"div","nativeSrc":"3469:3:15","nodeType":"YulIdentifier","src":"3469:3:15"},"nativeSrc":"3469:17:15","nodeType":"YulFunctionCall","src":"3469:17:15"}],"functionName":{"name":"add","nativeSrc":"3462:3:15","nodeType":"YulIdentifier","src":"3462:3:15"},"nativeSrc":"3462:25:15","nodeType":"YulFunctionCall","src":"3462:25:15"}],"functionName":{"name":"mul","nativeSrc":"3439:3:15","nodeType":"YulIdentifier","src":"3439:3:15"},"nativeSrc":"3439:49:15","nodeType":"YulFunctionCall","src":"3439:49:15"},"variableNames":[{"name":"result","nativeSrc":"3429:6:15","nodeType":"YulIdentifier","src":"3429:6:15"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":2763,"isOffset":false,"isSlot":false,"src":"3457:1:15","valueSize":1},{"declaration":2763,"isOffset":false,"isSlot":false,"src":"3477:1:15","valueSize":1},{"declaration":2765,"isOffset":false,"isSlot":false,"src":"3484:1:15","valueSize":1},{"declaration":2768,"isOffset":false,"isSlot":false,"src":"3429:6:15","valueSize":1}],"flags":["memory-safe"],"id":2778,"nodeType":"InlineAssembly","src":"3390:108:15"}]},"documentation":{"id":2761,"nodeType":"StructuredDocumentation","src":"2692:383:15","text":" @dev Version of divUp when the input is raw (i.e., already \"inflated\"). For instance,\n invariant * invariant (36 decimals) vs. invariant.mulDown(invariant) (18 decimal FP).\n This can occur in calculations with many successive multiplications and divisions, and\n we want to minimize the number of operations by avoiding unnecessary scaling by ONE."},"id":2780,"implemented":true,"kind":"function","modifiers":[],"name":"divUpRaw","nameLocation":"3089:8:15","nodeType":"FunctionDefinition","parameters":{"id":2766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2763,"mutability":"mutable","name":"a","nameLocation":"3106:1:15","nodeType":"VariableDeclaration","scope":2780,"src":"3098:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2762,"name":"uint256","nodeType":"ElementaryTypeName","src":"3098:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2765,"mutability":"mutable","name":"b","nameLocation":"3117:1:15","nodeType":"VariableDeclaration","scope":2780,"src":"3109:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2764,"name":"uint256","nodeType":"ElementaryTypeName","src":"3109:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3097:22:15"},"returnParameters":{"id":2769,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2768,"mutability":"mutable","name":"result","nameLocation":"3151:6:15","nodeType":"VariableDeclaration","scope":2780,"src":"3143:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2767,"name":"uint256","nodeType":"ElementaryTypeName","src":"3143:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3142:16:15"},"scope":2934,"src":"3080:424:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2855,"nodeType":"Block","src":"3807:723:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2792,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2790,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2785,"src":"3975:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2791,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2646,"src":"3980:3:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3975:8:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2796,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2785,"src":"4028:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2797,"name":"TWO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2651,"src":"4033:3:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4028:8:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2805,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2785,"src":"4093:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2806,"name":"FOUR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2656,"src":"4098:4:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4093:9:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2851,"nodeType":"Block","src":"4209:315:15","statements":[{"assignments":[2822],"declarations":[{"constant":false,"id":2822,"mutability":"mutable","name":"raw","nameLocation":"4231:3:15","nodeType":"VariableDeclaration","scope":2851,"src":"4223:11:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2821,"name":"uint256","nodeType":"ElementaryTypeName","src":"4223:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2828,"initialValue":{"arguments":[{"id":2825,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2783,"src":"4252:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2826,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2785,"src":"4255:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":2823,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4290,"src":"4237:10:15","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LogExpMath_$4290_$","typeString":"type(library LogExpMath)"}},"id":2824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4248:3:15","memberName":"pow","nodeType":"MemberAccess","referencedDeclaration":3193,"src":"4237:14:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2827,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4237:20:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4223:34:15"},{"assignments":[2830],"declarations":[{"constant":false,"id":2830,"mutability":"mutable","name":"maxError","nameLocation":"4279:8:15","nodeType":"VariableDeclaration","scope":2851,"src":"4271:16:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2829,"name":"uint256","nodeType":"ElementaryTypeName","src":"4271:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2837,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":2832,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2822,"src":"4296:3:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2833,"name":"MAX_POW_RELATIVE_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2659,"src":"4301:22:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2831,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2696,"src":"4290:5:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2834,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4290:34:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":2835,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4327:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4290:38:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4271:57:15"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2838,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2822,"src":"4347:3:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":2839,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2830,"src":"4353:8:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4347:14:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2849,"nodeType":"Block","src":"4410:104:15","statements":[{"id":2848,"nodeType":"UncheckedBlock","src":"4428:72:15","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2844,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2822,"src":"4467:3:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":2845,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2830,"src":"4473:8:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4467:14:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2789,"id":2847,"nodeType":"Return","src":"4460:21:15"}]}]},"id":2850,"nodeType":"IfStatement","src":"4343:171:15","trueBody":{"id":2843,"nodeType":"Block","src":"4363:41:15","statements":[{"expression":{"hexValue":"30","id":2841,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4388:1:15","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":2789,"id":2842,"nodeType":"Return","src":"4381:8:15"}]}}]},"id":2852,"nodeType":"IfStatement","src":"4089:435:15","trueBody":{"id":2820,"nodeType":"Block","src":"4104:99:15","statements":[{"assignments":[2809],"declarations":[{"constant":false,"id":2809,"mutability":"mutable","name":"square","nameLocation":"4126:6:15","nodeType":"VariableDeclaration","scope":2820,"src":"4118:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2808,"name":"uint256","nodeType":"ElementaryTypeName","src":"4118:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2814,"initialValue":{"arguments":[{"id":2811,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2783,"src":"4143:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2812,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2783,"src":"4146:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2810,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2679,"src":"4135:7:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4135:13:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4118:30:15"},{"expression":{"arguments":[{"id":2816,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2809,"src":"4177:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2817,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2809,"src":"4185:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2815,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2679,"src":"4169:7:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4169:23:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2789,"id":2819,"nodeType":"Return","src":"4162:30:15"}]}},"id":2853,"nodeType":"IfStatement","src":"4024:500:15","trueBody":{"id":2804,"nodeType":"Block","src":"4038:45:15","statements":[{"expression":{"arguments":[{"id":2800,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2783,"src":"4067:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2801,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2783,"src":"4070:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2799,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2679,"src":"4059:7:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4059:13:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2789,"id":2803,"nodeType":"Return","src":"4052:20:15"}]}},"id":2854,"nodeType":"IfStatement","src":"3971:553:15","trueBody":{"id":2795,"nodeType":"Block","src":"3985:33:15","statements":[{"expression":{"id":2793,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2783,"src":"4006:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2789,"id":2794,"nodeType":"Return","src":"3999:8:15"}]}}]},"documentation":{"id":2781,"nodeType":"StructuredDocumentation","src":"3510:221:15","text":" @dev Returns x^y, assuming both are fixed point numbers, rounding down. The result is guaranteed to not be above\n the true value (that is, the error function expected - actual is always positive)."},"id":2856,"implemented":true,"kind":"function","modifiers":[],"name":"powDown","nameLocation":"3745:7:15","nodeType":"FunctionDefinition","parameters":{"id":2786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2783,"mutability":"mutable","name":"x","nameLocation":"3761:1:15","nodeType":"VariableDeclaration","scope":2856,"src":"3753:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2782,"name":"uint256","nodeType":"ElementaryTypeName","src":"3753:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2785,"mutability":"mutable","name":"y","nameLocation":"3772:1:15","nodeType":"VariableDeclaration","scope":2856,"src":"3764:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2784,"name":"uint256","nodeType":"ElementaryTypeName","src":"3764:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3752:22:15"},"returnParameters":{"id":2789,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2788,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2856,"src":"3798:7:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2787,"name":"uint256","nodeType":"ElementaryTypeName","src":"3798:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3797:9:15"},"scope":2934,"src":"3736:794:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2922,"nodeType":"Block","src":"4829:568:15","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2866,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2861,"src":"4997:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2867,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2646,"src":"5002:3:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4997:8:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2872,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2861,"src":"5050:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2873,"name":"TWO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2651,"src":"5055:3:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5050:8:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2881,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2861,"src":"5113:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":2882,"name":"FOUR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2656,"src":"5118:4:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5113:9:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2918,"nodeType":"Block","src":"5225:166:15","statements":[{"assignments":[2898],"declarations":[{"constant":false,"id":2898,"mutability":"mutable","name":"raw","nameLocation":"5247:3:15","nodeType":"VariableDeclaration","scope":2918,"src":"5239:11:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2897,"name":"uint256","nodeType":"ElementaryTypeName","src":"5239:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2904,"initialValue":{"arguments":[{"id":2901,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2859,"src":"5268:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2902,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2861,"src":"5271:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":2899,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4290,"src":"5253:10:15","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LogExpMath_$4290_$","typeString":"type(library LogExpMath)"}},"id":2900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5264:3:15","memberName":"pow","nodeType":"MemberAccess","referencedDeclaration":3193,"src":"5253:14:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5253:20:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5239:34:15"},{"assignments":[2906],"declarations":[{"constant":false,"id":2906,"mutability":"mutable","name":"maxError","nameLocation":"5295:8:15","nodeType":"VariableDeclaration","scope":2918,"src":"5287:16:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2905,"name":"uint256","nodeType":"ElementaryTypeName","src":"5287:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2913,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":2908,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2898,"src":"5312:3:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2909,"name":"MAX_POW_RELATIVE_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2659,"src":"5317:22:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2907,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2696,"src":"5306:5:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2910,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5306:34:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":2911,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5343:1:15","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5306:38:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5287:57:15"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2914,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2898,"src":"5366:3:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":2915,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2906,"src":"5372:8:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5366:14:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2865,"id":2917,"nodeType":"Return","src":"5359:21:15"}]},"id":2919,"nodeType":"IfStatement","src":"5109:282:15","trueBody":{"id":2896,"nodeType":"Block","src":"5124:95:15","statements":[{"assignments":[2885],"declarations":[{"constant":false,"id":2885,"mutability":"mutable","name":"square","nameLocation":"5146:6:15","nodeType":"VariableDeclaration","scope":2896,"src":"5138:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2884,"name":"uint256","nodeType":"ElementaryTypeName","src":"5138:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2890,"initialValue":{"arguments":[{"id":2887,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2859,"src":"5161:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2888,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2859,"src":"5164:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2886,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2696,"src":"5155:5:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2889,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5155:11:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5138:28:15"},{"expression":{"arguments":[{"id":2892,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2885,"src":"5193:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2893,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2885,"src":"5201:6:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2891,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2696,"src":"5187:5:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2894,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5187:21:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2865,"id":2895,"nodeType":"Return","src":"5180:28:15"}]}},"id":2920,"nodeType":"IfStatement","src":"5046:345:15","trueBody":{"id":2880,"nodeType":"Block","src":"5060:43:15","statements":[{"expression":{"arguments":[{"id":2876,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2859,"src":"5087:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":2877,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2859,"src":"5090:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2875,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2696,"src":"5081:5:15","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":2878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5081:11:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2865,"id":2879,"nodeType":"Return","src":"5074:18:15"}]}},"id":2921,"nodeType":"IfStatement","src":"4993:398:15","trueBody":{"id":2871,"nodeType":"Block","src":"5007:33:15","statements":[{"expression":{"id":2869,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2859,"src":"5028:1:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2865,"id":2870,"nodeType":"Return","src":"5021:8:15"}]}}]},"documentation":{"id":2857,"nodeType":"StructuredDocumentation","src":"4536:219:15","text":" @dev Returns x^y, assuming both are fixed point numbers, rounding up. The result is guaranteed to not be below\n the true value (that is, the error function expected - actual is always negative)."},"id":2923,"implemented":true,"kind":"function","modifiers":[],"name":"powUp","nameLocation":"4769:5:15","nodeType":"FunctionDefinition","parameters":{"id":2862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2859,"mutability":"mutable","name":"x","nameLocation":"4783:1:15","nodeType":"VariableDeclaration","scope":2923,"src":"4775:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2858,"name":"uint256","nodeType":"ElementaryTypeName","src":"4775:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2861,"mutability":"mutable","name":"y","nameLocation":"4794:1:15","nodeType":"VariableDeclaration","scope":2923,"src":"4786:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2860,"name":"uint256","nodeType":"ElementaryTypeName","src":"4786:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4774:22:15"},"returnParameters":{"id":2865,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2864,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2923,"src":"4820:7:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2863,"name":"uint256","nodeType":"ElementaryTypeName","src":"4820:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4819:9:15"},"scope":2934,"src":"4760:637:15","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2932,"nodeType":"Block","src":"5750:175:15","statements":[{"AST":{"nativeSrc":"5857:62:15","nodeType":"YulBlock","src":"5857:62:15","statements":[{"nativeSrc":"5871:38:15","nodeType":"YulAssignment","src":"5871:38:15","value":{"arguments":[{"arguments":[{"name":"x","nativeSrc":"5888:1:15","nodeType":"YulIdentifier","src":"5888:1:15"},{"name":"ONE","nativeSrc":"5891:3:15","nodeType":"YulIdentifier","src":"5891:3:15"}],"functionName":{"name":"lt","nativeSrc":"5885:2:15","nodeType":"YulIdentifier","src":"5885:2:15"},"nativeSrc":"5885:10:15","nodeType":"YulFunctionCall","src":"5885:10:15"},{"arguments":[{"name":"ONE","nativeSrc":"5901:3:15","nodeType":"YulIdentifier","src":"5901:3:15"},{"name":"x","nativeSrc":"5906:1:15","nodeType":"YulIdentifier","src":"5906:1:15"}],"functionName":{"name":"sub","nativeSrc":"5897:3:15","nodeType":"YulIdentifier","src":"5897:3:15"},"nativeSrc":"5897:11:15","nodeType":"YulFunctionCall","src":"5897:11:15"}],"functionName":{"name":"mul","nativeSrc":"5881:3:15","nodeType":"YulIdentifier","src":"5881:3:15"},"nativeSrc":"5881:28:15","nodeType":"YulFunctionCall","src":"5881:28:15"},"variableNames":[{"name":"result","nativeSrc":"5871:6:15","nodeType":"YulIdentifier","src":"5871:6:15"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":2646,"isOffset":false,"isSlot":false,"src":"5891:3:15","valueSize":1},{"declaration":2646,"isOffset":false,"isSlot":false,"src":"5901:3:15","valueSize":1},{"declaration":2929,"isOffset":false,"isSlot":false,"src":"5871:6:15","valueSize":1},{"declaration":2926,"isOffset":false,"isSlot":false,"src":"5888:1:15","valueSize":1},{"declaration":2926,"isOffset":false,"isSlot":false,"src":"5906:1:15","valueSize":1}],"flags":["memory-safe"],"id":2931,"nodeType":"InlineAssembly","src":"5832:87:15"}]},"documentation":{"id":2924,"nodeType":"StructuredDocumentation","src":"5403:272:15","text":" @dev Returns the complement of a value (1 - x), capped to 0 if x is larger than 1.\n Useful when computing the complement for values with some level of relative error, as it strips this error and\n prevents intermediate negative values."},"id":2933,"implemented":true,"kind":"function","modifiers":[],"name":"complement","nameLocation":"5689:10:15","nodeType":"FunctionDefinition","parameters":{"id":2927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2926,"mutability":"mutable","name":"x","nameLocation":"5708:1:15","nodeType":"VariableDeclaration","scope":2933,"src":"5700:9:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2925,"name":"uint256","nodeType":"ElementaryTypeName","src":"5700:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5699:11:15"},"returnParameters":{"id":2930,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2929,"mutability":"mutable","name":"result","nameLocation":"5742:6:15","nodeType":"VariableDeclaration","scope":2933,"src":"5734:14:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2928,"name":"uint256","nodeType":"ElementaryTypeName","src":"5734:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5733:16:15"},"scope":2934,"src":"5680:245:15","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":2935,"src":"239:5688:15","usedErrors":[2643],"usedEvents":[]}],"src":"46:5882:15"},"id":15},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol","exportedSymbols":{"LogExpMath":[4290]},"id":4291,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":2936,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:16"},{"abstract":false,"baseContracts":[],"canonicalName":"LogExpMath","contractDependencies":[],"contractKind":"library","documentation":{"id":2937,"nodeType":"StructuredDocumentation","src":"79:515:16","text":" @dev Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument).\n Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural\n exponentiation and logarithm (where the base is Euler's number).\n All math operations are unchecked in order to save gas.\n @author Fernando Martinelli - @fernandomartinelli\n @author Sergio Yuhjtman - @sergioyuhjtman\n @author Daniel Fernandez - @dmf7z"},"fullyImplemented":true,"id":4290,"linearizedBaseContracts":[4290],"name":"LogExpMath","nameLocation":"603:10:16","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2938,"nodeType":"StructuredDocumentation","src":"620:79:16","text":"@notice This error is thrown when a base is not within an acceptable range."},"errorSelector":"022701e0","id":2940,"name":"BaseOutOfBounds","nameLocation":"710:15:16","nodeType":"ErrorDefinition","parameters":{"id":2939,"nodeType":"ParameterList","parameters":[],"src":"725:2:16"},"src":"704:24:16"},{"documentation":{"id":2941,"nodeType":"StructuredDocumentation","src":"734:83:16","text":"@notice This error is thrown when a exponent is not within an acceptable range."},"errorSelector":"d8317311","id":2943,"name":"ExponentOutOfBounds","nameLocation":"828:19:16","nodeType":"ErrorDefinition","parameters":{"id":2942,"nodeType":"ParameterList","parameters":[],"src":"847:2:16"},"src":"822:28:16"},{"documentation":{"id":2944,"nodeType":"StructuredDocumentation","src":"856:96:16","text":"@notice This error is thrown when the exponent * ln(base) is not within an acceptable range."},"errorSelector":"a2f9f7e3","id":2946,"name":"ProductOutOfBounds","nameLocation":"963:18:16","nodeType":"ErrorDefinition","parameters":{"id":2945,"nodeType":"ParameterList","parameters":[],"src":"981:2:16"},"src":"957:27:16"},{"documentation":{"id":2947,"nodeType":"StructuredDocumentation","src":"990:109:16","text":"@notice This error is thrown when an exponent used in the exp function is not within an acceptable range."},"errorSelector":"d4794efd","id":2949,"name":"InvalidExponent","nameLocation":"1110:15:16","nodeType":"ErrorDefinition","parameters":{"id":2948,"nodeType":"ParameterList","parameters":[],"src":"1125:2:16"},"src":"1104:24:16"},{"documentation":{"id":2950,"nodeType":"StructuredDocumentation","src":"1134:119:16","text":"@notice This error is thrown when a variable or result is not within the acceptable bounds defined in the function."},"errorSelector":"b4120f14","id":2952,"name":"OutOfBounds","nameLocation":"1264:11:16","nodeType":"ErrorDefinition","parameters":{"id":2951,"nodeType":"ParameterList","parameters":[],"src":"1275:2:16"},"src":"1258:20:16"},{"constant":true,"id":2955,"mutability":"constant","name":"ONE_18","nameLocation":"1555:6:16","nodeType":"VariableDeclaration","scope":4290,"src":"1539:29:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2953,"name":"int256","nodeType":"ElementaryTypeName","src":"1539:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653138","id":2954,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1564:4:16","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"internal"},{"constant":true,"id":2958,"mutability":"constant","name":"ONE_20","nameLocation":"1745:6:16","nodeType":"VariableDeclaration","scope":4290,"src":"1729:29:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2956,"name":"int256","nodeType":"ElementaryTypeName","src":"1729:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653230","id":2957,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1754:4:16","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000_by_1","typeString":"int_const 100000000000000000000"},"value":"1e20"},"visibility":"internal"},{"constant":true,"id":2961,"mutability":"constant","name":"ONE_36","nameLocation":"1780:6:16","nodeType":"VariableDeclaration","scope":4290,"src":"1764:29:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2959,"name":"int256","nodeType":"ElementaryTypeName","src":"1764:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653336","id":2960,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1789:4:16","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(29 digits omitted)...0000"},"value":"1e36"},"visibility":"internal"},{"constant":true,"id":2964,"mutability":"constant","name":"MAX_NATURAL_EXPONENT","nameLocation":"2326:20:16","nodeType":"VariableDeclaration","scope":4290,"src":"2310:45:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2962,"name":"int256","nodeType":"ElementaryTypeName","src":"2310:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313330653138","id":2963,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2349:6:16","typeDescriptions":{"typeIdentifier":"t_rational_130000000000000000000_by_1","typeString":"int_const 130000000000000000000"},"value":"130e18"},"visibility":"internal"},{"constant":true,"id":2968,"mutability":"constant","name":"MIN_NATURAL_EXPONENT","nameLocation":"2377:20:16","nodeType":"VariableDeclaration","scope":4290,"src":"2361:45:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2965,"name":"int256","nodeType":"ElementaryTypeName","src":"2361:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"id":2967,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"2400:6:16","subExpression":{"hexValue":"3431653138","id":2966,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2401:5:16","typeDescriptions":{"typeIdentifier":"t_rational_41000000000000000000_by_1","typeString":"int_const 41000000000000000000"},"value":"41e18"},"typeDescriptions":{"typeIdentifier":"t_rational_minus_41000000000000000000_by_1","typeString":"int_const -41000000000000000000"}},"visibility":"internal"},{"constant":true,"id":2973,"mutability":"constant","name":"LN_36_LOWER_BOUND","nameLocation":"2573:17:16","nodeType":"VariableDeclaration","scope":4290,"src":"2557:49:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2969,"name":"int256","nodeType":"ElementaryTypeName","src":"2557:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":2972,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":2970,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2955,"src":"2593:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31653137","id":2971,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2602:4:16","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000_by_1","typeString":"int_const 100000000000000000"},"value":"1e17"},"src":"2593:13:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":true,"id":2978,"mutability":"constant","name":"LN_36_UPPER_BOUND","nameLocation":"2628:17:16","nodeType":"VariableDeclaration","scope":4290,"src":"2612:49:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2974,"name":"int256","nodeType":"ElementaryTypeName","src":"2612:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":2977,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":2975,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2955,"src":"2648:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31653137","id":2976,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2657:4:16","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000_by_1","typeString":"int_const 100000000000000000"},"value":"1e17"},"src":"2648:13:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":true,"id":2988,"mutability":"constant","name":"MILD_EXPONENT_BOUND","nameLocation":"2685:19:16","nodeType":"VariableDeclaration","scope":4290,"src":"2668:65:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2979,"name":"uint256","nodeType":"ElementaryTypeName","src":"2668:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2987,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_rational_28948022309329048855892746252171976963317496166410141009864396001978282409984_by_1","typeString":"int_const 2894...(69 digits omitted)...9984"},"id":2982,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":2980,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2707:1:16","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"323534","id":2981,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2712:3:16","typeDescriptions":{"typeIdentifier":"t_rational_254_by_1","typeString":"int_const 254"},"value":"254"},"src":"2707:8:16","typeDescriptions":{"typeIdentifier":"t_rational_28948022309329048855892746252171976963317496166410141009864396001978282409984_by_1","typeString":"int_const 2894...(69 digits omitted)...9984"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"arguments":[{"id":2985,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"2726:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":2984,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2718:7:16","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":2983,"name":"uint256","nodeType":"ElementaryTypeName","src":"2718:7:16","typeDescriptions":{}}},"id":2986,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2718:15:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2707:26:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":2991,"mutability":"constant","name":"x0","nameLocation":"2784:2:16","nodeType":"VariableDeclaration","scope":4290,"src":"2768:42:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2989,"name":"int256","nodeType":"ElementaryTypeName","src":"2768:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313238303030303030303030303030303030303030","id":2990,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2789:21:16","typeDescriptions":{"typeIdentifier":"t_rational_128000000000000000000_by_1","typeString":"int_const 128000000000000000000"},"value":"128000000000000000000"},"visibility":"internal"},{"constant":true,"id":2994,"mutability":"constant","name":"a0","nameLocation":"2840:2:16","nodeType":"VariableDeclaration","scope":4290,"src":"2824:77:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2992,"name":"int256","nodeType":"ElementaryTypeName","src":"2824:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3338383737303834303539393435393530393232323030303030303030303030303030303030303030303030303030303030303030303030","id":2993,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2845:56:16","typeDescriptions":{"typeIdentifier":"t_rational_38877084059945950922200000000000000000000000000000000000_by_1","typeString":"int_const 3887...(48 digits omitted)...0000"},"value":"38877084059945950922200000000000000000000000000000000000"},"visibility":"internal"},{"constant":true,"id":2997,"mutability":"constant","name":"x1","nameLocation":"2948:2:16","nodeType":"VariableDeclaration","scope":4290,"src":"2932:41:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2995,"name":"int256","nodeType":"ElementaryTypeName","src":"2932:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3634303030303030303030303030303030303030","id":2996,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2953:20:16","typeDescriptions":{"typeIdentifier":"t_rational_64000000000000000000_by_1","typeString":"int_const 64000000000000000000"},"value":"64000000000000000000"},"visibility":"internal"},{"constant":true,"id":3000,"mutability":"constant","name":"a1","nameLocation":"3003:2:16","nodeType":"VariableDeclaration","scope":4290,"src":"2987:49:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":2998,"name":"int256","nodeType":"ElementaryTypeName","src":"2987:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"36323335313439303830383131363136383832393130303030303030","id":2999,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3008:28:16","typeDescriptions":{"typeIdentifier":"t_rational_6235149080811616882910000000_by_1","typeString":"int_const 6235149080811616882910000000"},"value":"6235149080811616882910000000"},"visibility":"internal"},{"constant":true,"id":3003,"mutability":"constant","name":"x2","nameLocation":"3112:2:16","nodeType":"VariableDeclaration","scope":4290,"src":"3096:43:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3001,"name":"int256","nodeType":"ElementaryTypeName","src":"3096:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"33323030303030303030303030303030303030303030","id":3002,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3117:22:16","typeDescriptions":{"typeIdentifier":"t_rational_3200000000000000000000_by_1","typeString":"int_const 3200000000000000000000"},"value":"3200000000000000000000"},"visibility":"internal"},{"constant":true,"id":3006,"mutability":"constant","name":"a2","nameLocation":"3169:2:16","nodeType":"VariableDeclaration","scope":4290,"src":"3153:55:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3004,"name":"int256","nodeType":"ElementaryTypeName","src":"3153:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"37383936323936303138323638303639353136313030303030303030303030303030","id":3005,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3174:34:16","typeDescriptions":{"typeIdentifier":"t_rational_7896296018268069516100000000000000_by_1","typeString":"int_const 7896...(26 digits omitted)...0000"},"value":"7896296018268069516100000000000000"},"visibility":"internal"},{"constant":true,"id":3009,"mutability":"constant","name":"x3","nameLocation":"3241:2:16","nodeType":"VariableDeclaration","scope":4290,"src":"3225:43:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3007,"name":"int256","nodeType":"ElementaryTypeName","src":"3225:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31363030303030303030303030303030303030303030","id":3008,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3246:22:16","typeDescriptions":{"typeIdentifier":"t_rational_1600000000000000000000_by_1","typeString":"int_const 1600000000000000000000"},"value":"1600000000000000000000"},"visibility":"internal"},{"constant":true,"id":3012,"mutability":"constant","name":"a3","nameLocation":"3298:2:16","nodeType":"VariableDeclaration","scope":4290,"src":"3282:48:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3010,"name":"int256","nodeType":"ElementaryTypeName","src":"3282:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"383838363131303532303530373837323633363736303030303030","id":3011,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3303:27:16","typeDescriptions":{"typeIdentifier":"t_rational_888611052050787263676000000_by_1","typeString":"int_const 888611052050787263676000000"},"value":"888611052050787263676000000"},"visibility":"internal"},{"constant":true,"id":3015,"mutability":"constant","name":"x4","nameLocation":"3363:2:16","nodeType":"VariableDeclaration","scope":4290,"src":"3347:42:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3013,"name":"int256","nodeType":"ElementaryTypeName","src":"3347:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"383030303030303030303030303030303030303030","id":3014,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3368:21:16","typeDescriptions":{"typeIdentifier":"t_rational_800000000000000000000_by_1","typeString":"int_const 800000000000000000000"},"value":"800000000000000000000"},"visibility":"internal"},{"constant":true,"id":3018,"mutability":"constant","name":"a4","nameLocation":"3419:2:16","nodeType":"VariableDeclaration","scope":4290,"src":"3403:45:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3016,"name":"int256","nodeType":"ElementaryTypeName","src":"3403:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323938303935373938373034313732383237343734303030","id":3017,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3424:24:16","typeDescriptions":{"typeIdentifier":"t_rational_298095798704172827474000_by_1","typeString":"int_const 298095798704172827474000"},"value":"298095798704172827474000"},"visibility":"internal"},{"constant":true,"id":3021,"mutability":"constant","name":"x5","nameLocation":"3481:2:16","nodeType":"VariableDeclaration","scope":4290,"src":"3465:42:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3019,"name":"int256","nodeType":"ElementaryTypeName","src":"3465:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"343030303030303030303030303030303030303030","id":3020,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3486:21:16","typeDescriptions":{"typeIdentifier":"t_rational_400000000000000000000_by_1","typeString":"int_const 400000000000000000000"},"value":"400000000000000000000"},"visibility":"internal"},{"constant":true,"id":3024,"mutability":"constant","name":"a5","nameLocation":"3537:2:16","nodeType":"VariableDeclaration","scope":4290,"src":"3521:43:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3022,"name":"int256","nodeType":"ElementaryTypeName","src":"3521:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"35343539383135303033333134343233393037383130","id":3023,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3542:22:16","typeDescriptions":{"typeIdentifier":"t_rational_5459815003314423907810_by_1","typeString":"int_const 5459815003314423907810"},"value":"5459815003314423907810"},"visibility":"internal"},{"constant":true,"id":3027,"mutability":"constant","name":"x6","nameLocation":"3597:2:16","nodeType":"VariableDeclaration","scope":4290,"src":"3581:42:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3025,"name":"int256","nodeType":"ElementaryTypeName","src":"3581:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323030303030303030303030303030303030303030","id":3026,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3602:21:16","typeDescriptions":{"typeIdentifier":"t_rational_200000000000000000000_by_1","typeString":"int_const 200000000000000000000"},"value":"200000000000000000000"},"visibility":"internal"},{"constant":true,"id":3030,"mutability":"constant","name":"a6","nameLocation":"3653:2:16","nodeType":"VariableDeclaration","scope":4290,"src":"3637:42:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3028,"name":"int256","nodeType":"ElementaryTypeName","src":"3637:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"373338393035363039383933303635303232373233","id":3029,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3658:21:16","typeDescriptions":{"typeIdentifier":"t_rational_738905609893065022723_by_1","typeString":"int_const 738905609893065022723"},"value":"738905609893065022723"},"visibility":"internal"},{"constant":true,"id":3033,"mutability":"constant","name":"x7","nameLocation":"3712:2:16","nodeType":"VariableDeclaration","scope":4290,"src":"3696:42:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3031,"name":"int256","nodeType":"ElementaryTypeName","src":"3696:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313030303030303030303030303030303030303030","id":3032,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3717:21:16","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000_by_1","typeString":"int_const 100000000000000000000"},"value":"100000000000000000000"},"visibility":"internal"},{"constant":true,"id":3036,"mutability":"constant","name":"a7","nameLocation":"3768:2:16","nodeType":"VariableDeclaration","scope":4290,"src":"3752:42:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3034,"name":"int256","nodeType":"ElementaryTypeName","src":"3752:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323731383238313832383435393034353233353336","id":3035,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3773:21:16","typeDescriptions":{"typeIdentifier":"t_rational_271828182845904523536_by_1","typeString":"int_const 271828182845904523536"},"value":"271828182845904523536"},"visibility":"internal"},{"constant":true,"id":3039,"mutability":"constant","name":"x8","nameLocation":"3827:2:16","nodeType":"VariableDeclaration","scope":4290,"src":"3811:41:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3037,"name":"int256","nodeType":"ElementaryTypeName","src":"3811:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3530303030303030303030303030303030303030","id":3038,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3832:20:16","typeDescriptions":{"typeIdentifier":"t_rational_50000000000000000000_by_1","typeString":"int_const 50000000000000000000"},"value":"50000000000000000000"},"visibility":"internal"},{"constant":true,"id":3042,"mutability":"constant","name":"a8","nameLocation":"3883:2:16","nodeType":"VariableDeclaration","scope":4290,"src":"3867:42:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3040,"name":"int256","nodeType":"ElementaryTypeName","src":"3867:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313634383732313237303730303132383134363835","id":3041,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3888:21:16","typeDescriptions":{"typeIdentifier":"t_rational_164872127070012814685_by_1","typeString":"int_const 164872127070012814685"},"value":"164872127070012814685"},"visibility":"internal"},{"constant":true,"id":3045,"mutability":"constant","name":"x9","nameLocation":"3942:2:16","nodeType":"VariableDeclaration","scope":4290,"src":"3926:41:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3043,"name":"int256","nodeType":"ElementaryTypeName","src":"3926:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3235303030303030303030303030303030303030","id":3044,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3947:20:16","typeDescriptions":{"typeIdentifier":"t_rational_25000000000000000000_by_1","typeString":"int_const 25000000000000000000"},"value":"25000000000000000000"},"visibility":"internal"},{"constant":true,"id":3048,"mutability":"constant","name":"a9","nameLocation":"3998:2:16","nodeType":"VariableDeclaration","scope":4290,"src":"3982:42:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3046,"name":"int256","nodeType":"ElementaryTypeName","src":"3982:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313238343032353431363638373734313438343037","id":3047,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4003:21:16","typeDescriptions":{"typeIdentifier":"t_rational_128402541668774148407_by_1","typeString":"int_const 128402541668774148407"},"value":"128402541668774148407"},"visibility":"internal"},{"constant":true,"id":3051,"mutability":"constant","name":"x10","nameLocation":"4057:3:16","nodeType":"VariableDeclaration","scope":4290,"src":"4041:42:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3049,"name":"int256","nodeType":"ElementaryTypeName","src":"4041:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3132353030303030303030303030303030303030","id":3050,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4063:20:16","typeDescriptions":{"typeIdentifier":"t_rational_12500000000000000000_by_1","typeString":"int_const 12500000000000000000"},"value":"12500000000000000000"},"visibility":"internal"},{"constant":true,"id":3054,"mutability":"constant","name":"a10","nameLocation":"4114:3:16","nodeType":"VariableDeclaration","scope":4290,"src":"4098:43:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3052,"name":"int256","nodeType":"ElementaryTypeName","src":"4098:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313133333134383435333036363832363331363833","id":3053,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4120:21:16","typeDescriptions":{"typeIdentifier":"t_rational_113314845306682631683_by_1","typeString":"int_const 113314845306682631683"},"value":"113314845306682631683"},"visibility":"internal"},{"constant":true,"id":3057,"mutability":"constant","name":"x11","nameLocation":"4175:3:16","nodeType":"VariableDeclaration","scope":4290,"src":"4159:41:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3055,"name":"int256","nodeType":"ElementaryTypeName","src":"4159:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"36323530303030303030303030303030303030","id":3056,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4181:19:16","typeDescriptions":{"typeIdentifier":"t_rational_6250000000000000000_by_1","typeString":"int_const 6250000000000000000"},"value":"6250000000000000000"},"visibility":"internal"},{"constant":true,"id":3060,"mutability":"constant","name":"a11","nameLocation":"4231:3:16","nodeType":"VariableDeclaration","scope":4290,"src":"4215:43:16","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3058,"name":"int256","nodeType":"ElementaryTypeName","src":"4215:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313036343439343435383931373835393432393536","id":3059,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4237:21:16","typeDescriptions":{"typeIdentifier":"t_rational_106449445891785942956_by_1","typeString":"int_const 106449445891785942956"},"value":"106449445891785942956"},"visibility":"internal"},{"body":{"id":3192,"nodeType":"Block","src":"4563:2233:16","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3072,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3070,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3065,"src":"4577:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3071,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4582:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4577:6:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3079,"nodeType":"IfStatement","src":"4573:131:16","trueBody":{"id":3078,"nodeType":"Block","src":"4585:119:16","statements":[{"expression":{"arguments":[{"id":3075,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2955,"src":"4686:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3074,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4678:7:16","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":3073,"name":"uint256","nodeType":"ElementaryTypeName","src":"4678:7:16","typeDescriptions":{}}},"id":3076,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4678:15:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3069,"id":3077,"nodeType":"Return","src":"4671:22:16"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3080,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3063,"src":"4718:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":3081,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4723:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4718:6:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3086,"nodeType":"IfStatement","src":"4714:45:16","trueBody":{"id":3085,"nodeType":"Block","src":"4726:33:16","statements":[{"expression":{"hexValue":"30","id":3083,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4747:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":3069,"id":3084,"nodeType":"Return","src":"4740:8:16"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3087,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3063,"src":"5133:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"323535","id":3088,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5138:3:16","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"src":"5133:8:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":3090,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5145:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5133:13:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3096,"nodeType":"IfStatement","src":"5129:68:16","trueBody":{"id":3095,"nodeType":"Block","src":"5148:49:16","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3092,"name":"BaseOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2940,"src":"5169:15:16","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5169:17:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3094,"nodeType":"RevertStatement","src":"5162:24:16"}]}},{"assignments":[3098],"declarations":[{"constant":false,"id":3098,"mutability":"mutable","name":"x_int256","nameLocation":"5213:8:16","nodeType":"VariableDeclaration","scope":3192,"src":"5206:15:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3097,"name":"int256","nodeType":"ElementaryTypeName","src":"5206:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3103,"initialValue":{"arguments":[{"id":3101,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3063,"src":"5231:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3100,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5224:6:16","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":3099,"name":"int256","nodeType":"ElementaryTypeName","src":"5224:6:16","typeDescriptions":{}}},"id":3102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5224:9:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5206:27:16"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":3106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3104,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3065,"src":"5591:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3105,"name":"MILD_EXPONENT_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2988,"src":"5596:19:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5591:24:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3111,"nodeType":"IfStatement","src":"5587:83:16","trueBody":{"id":3110,"nodeType":"Block","src":"5617:53:16","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3107,"name":"ExponentOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2943,"src":"5638:19:16","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3108,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5638:21:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3109,"nodeType":"RevertStatement","src":"5631:28:16"}]}},{"assignments":[3113],"declarations":[{"constant":false,"id":3113,"mutability":"mutable","name":"y_int256","nameLocation":"5686:8:16","nodeType":"VariableDeclaration","scope":3192,"src":"5679:15:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3112,"name":"int256","nodeType":"ElementaryTypeName","src":"5679:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3118,"initialValue":{"arguments":[{"id":3116,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3065,"src":"5704:1:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":3115,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5697:6:16","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":3114,"name":"int256","nodeType":"ElementaryTypeName","src":"5697:6:16","typeDescriptions":{}}},"id":3117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5697:9:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5679:27:16"},{"assignments":[3120],"declarations":[{"constant":false,"id":3120,"mutability":"mutable","name":"logx_times_y","nameLocation":"5724:12:16","nodeType":"VariableDeclaration","scope":3192,"src":"5717:19:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3119,"name":"int256","nodeType":"ElementaryTypeName","src":"5717:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3121,"nodeType":"VariableDeclarationStatement","src":"5717:19:16"},{"id":3170,"nodeType":"UncheckedBlock","src":"5746:790:16","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3122,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2973,"src":"5774:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3123,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3098,"src":"5794:8:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"5774:28:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3125,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3098,"src":"5806:8:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3126,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2978,"src":"5817:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"5806:28:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5774:60:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3164,"nodeType":"Block","src":"6418:72:16","statements":[{"expression":{"id":3162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3156,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3120,"src":"6436:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3158,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3098,"src":"6455:8:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3157,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4134,"src":"6451:3:16","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":3159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6451:13:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3160,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3113,"src":"6467:8:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6451:24:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6436:39:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3163,"nodeType":"ExpressionStatement","src":"6436:39:16"}]},"id":3165,"nodeType":"IfStatement","src":"5770:720:16","trueBody":{"id":3155,"nodeType":"Block","src":"5836:576:16","statements":[{"assignments":[3130],"declarations":[{"constant":false,"id":3130,"mutability":"mutable","name":"ln_36_x","nameLocation":"5861:7:16","nodeType":"VariableDeclaration","scope":3155,"src":"5854:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3129,"name":"int256","nodeType":"ElementaryTypeName","src":"5854:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3134,"initialValue":{"arguments":[{"id":3132,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3098,"src":"5878:8:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3131,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4289,"src":"5871:6:16","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":3133,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5871:16:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5854:33:16"},{"expression":{"id":3153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3135,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3120,"src":"6308:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3136,"name":"ln_36_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"6325:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3137,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2955,"src":"6335:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6325:16:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3139,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6324:18:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3140,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3113,"src":"6345:8:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6324:29:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3144,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3142,"name":"ln_36_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3130,"src":"6358:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":3143,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2955,"src":"6368:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6358:16:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3145,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6357:18:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3146,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3113,"src":"6378:8:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6357:29:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3148,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6356:31:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3149,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2955,"src":"6390:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6356:40:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6324:72:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3152,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6323:74:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6308:89:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3154,"nodeType":"ExpressionStatement","src":"6308:89:16"}]}},{"expression":{"id":3168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3166,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3120,"src":"6503:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":3167,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2955,"src":"6519:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6503:22:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3169,"nodeType":"ExpressionStatement","src":"6503:22:16"}]},{"condition":{"id":3179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6613:79:16","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3171,"name":"MIN_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2968,"src":"6615:20:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":3172,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3120,"src":"6639:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6615:36:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3176,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3174,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3120,"src":"6655:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":3175,"name":"MAX_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2964,"src":"6671:20:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6655:36:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6615:76:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":3178,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6614:78:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3184,"nodeType":"IfStatement","src":"6609:137:16","trueBody":{"id":3183,"nodeType":"Block","src":"6694:52:16","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3180,"name":"ProductOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2946,"src":"6715:18:16","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6715:20:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3182,"nodeType":"RevertStatement","src":"6708:27:16"}]}},{"expression":{"arguments":[{"arguments":[{"id":3188,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3120,"src":"6775:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3187,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3640,"src":"6771:3:16","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":3189,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6771:17:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3186,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6763:7:16","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":3185,"name":"uint256","nodeType":"ElementaryTypeName","src":"6763:7:16","typeDescriptions":{}}},"id":3190,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6763:26:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":3069,"id":3191,"nodeType":"Return","src":"6756:33:16"}]},"documentation":{"id":3061,"nodeType":"StructuredDocumentation","src":"4277:214:16","text":" @dev Exponentiation (x^y) with unsigned 18 decimal fixed point base and exponent.\n Reverts if ln(x) * y is smaller than `MIN_NATURAL_EXPONENT`, or larger than `MAX_NATURAL_EXPONENT`."},"id":3193,"implemented":true,"kind":"function","modifiers":[],"name":"pow","nameLocation":"4505:3:16","nodeType":"FunctionDefinition","parameters":{"id":3066,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3063,"mutability":"mutable","name":"x","nameLocation":"4517:1:16","nodeType":"VariableDeclaration","scope":3193,"src":"4509:9:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3062,"name":"uint256","nodeType":"ElementaryTypeName","src":"4509:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3065,"mutability":"mutable","name":"y","nameLocation":"4528:1:16","nodeType":"VariableDeclaration","scope":3193,"src":"4520:9:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3064,"name":"uint256","nodeType":"ElementaryTypeName","src":"4520:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4508:22:16"},"returnParameters":{"id":3069,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3068,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3193,"src":"4554:7:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3067,"name":"uint256","nodeType":"ElementaryTypeName","src":"4554:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4553:9:16"},"scope":4290,"src":"4496:2300:16","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3639,"nodeType":"Block","src":"7064:6082:16","statements":[{"condition":{"id":3209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"7078:57:16","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3201,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"7080:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3202,"name":"MIN_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2968,"src":"7085:20:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7080:25:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3204,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"7109:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":3205,"name":"MAX_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2964,"src":"7114:20:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7109:25:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7080:54:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":3208,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7079:56:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3214,"nodeType":"IfStatement","src":"7074:112:16","trueBody":{"id":3213,"nodeType":"Block","src":"7137:49:16","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3210,"name":"InvalidExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2949,"src":"7158:15:16","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3211,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7158:17:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3212,"nodeType":"RevertStatement","src":"7151:24:16"}]}},{"assignments":[3216],"declarations":[{"constant":false,"id":3216,"mutability":"mutable","name":"negativeExponent","nameLocation":"7277:16:16","nodeType":"VariableDeclaration","scope":3639,"src":"7272:21:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3215,"name":"bool","nodeType":"ElementaryTypeName","src":"7272:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":3218,"initialValue":{"hexValue":"66616c7365","id":3217,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7296:5:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"7272:29:16"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3219,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"7316:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":3220,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7320:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7316:5:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3233,"nodeType":"IfStatement","src":"7312:417:16","trueBody":{"id":3232,"nodeType":"Block","src":"7323:406:16","statements":[{"id":3227,"nodeType":"UncheckedBlock","src":"7633:49:16","statements":[{"expression":{"id":3225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3222,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"7661:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"7665:2:16","subExpression":{"id":3223,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"7666:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7661:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3226,"nodeType":"ExpressionStatement","src":"7661:6:16"}]},{"expression":{"id":3230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3228,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3216,"src":"7695:16:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":3229,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7714:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"7695:23:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3231,"nodeType":"ExpressionStatement","src":"7695:23:16"}]}},{"assignments":[3235],"declarations":[{"constant":false,"id":3235,"mutability":"mutable","name":"firstAN","nameLocation":"9037:7:16","nodeType":"VariableDeclaration","scope":3639,"src":"9030:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3234,"name":"int256","nodeType":"ElementaryTypeName","src":"9030:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3236,"nodeType":"VariableDeclarationStatement","src":"9030:14:16"},{"id":3272,"nodeType":"UncheckedBlock","src":"9054:457:16","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3237,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"9082:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3238,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2991,"src":"9087:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9082:7:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3249,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"9171:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3250,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2997,"src":"9176:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9171:7:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3265,"nodeType":"Block","src":"9256:74:16","statements":[{"expression":{"id":3263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3261,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3235,"src":"9274:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":3262,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9284:1:16","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9274:11:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3264,"nodeType":"ExpressionStatement","src":"9274:11:16"}]},"id":3266,"nodeType":"IfStatement","src":"9167:163:16","trueBody":{"id":3260,"nodeType":"Block","src":"9180:70:16","statements":[{"expression":{"id":3254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3252,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"9198:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3253,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2997,"src":"9203:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9198:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3255,"nodeType":"ExpressionStatement","src":"9198:7:16"},{"expression":{"id":3258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3256,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3235,"src":"9223:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3257,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3000,"src":"9233:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9223:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3259,"nodeType":"ExpressionStatement","src":"9223:12:16"}]}},"id":3267,"nodeType":"IfStatement","src":"9078:252:16","trueBody":{"id":3248,"nodeType":"Block","src":"9091:70:16","statements":[{"expression":{"id":3242,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3240,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"9109:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3241,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2991,"src":"9114:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9109:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3243,"nodeType":"ExpressionStatement","src":"9109:7:16"},{"expression":{"id":3246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3244,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3235,"src":"9134:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3245,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2994,"src":"9144:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9134:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3247,"nodeType":"ExpressionStatement","src":"9134:12:16"}]}},{"expression":{"id":3270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3268,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"9492:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":3269,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9497:3:16","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"9492:8:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3271,"nodeType":"ExpressionStatement","src":"9492:8:16"}]},{"assignments":[3274],"declarations":[{"constant":false,"id":3274,"mutability":"mutable","name":"product","nameLocation":"9730:7:16","nodeType":"VariableDeclaration","scope":3639,"src":"9723:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3273,"name":"int256","nodeType":"ElementaryTypeName","src":"9723:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3276,"initialValue":{"id":3275,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"9740:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"9723:23:16"},{"id":3421,"nodeType":"UncheckedBlock","src":"9757:957:16","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3277,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"9785:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3278,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3003,"src":"9790:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9785:7:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3294,"nodeType":"IfStatement","src":"9781:104:16","trueBody":{"id":3293,"nodeType":"Block","src":"9794:91:16","statements":[{"expression":{"id":3282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3280,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"9812:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3281,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3003,"src":"9817:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9812:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3283,"nodeType":"ExpressionStatement","src":"9812:7:16"},{"expression":{"id":3291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3284,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3274,"src":"9837:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3285,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3274,"src":"9848:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3286,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3006,"src":"9858:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9848:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3288,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9847:14:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3289,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"9864:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9847:23:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9837:33:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3292,"nodeType":"ExpressionStatement","src":"9837:33:16"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3295,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"9902:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3296,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3009,"src":"9907:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9902:7:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3312,"nodeType":"IfStatement","src":"9898:104:16","trueBody":{"id":3311,"nodeType":"Block","src":"9911:91:16","statements":[{"expression":{"id":3300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3298,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"9929:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3299,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3009,"src":"9934:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9929:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3301,"nodeType":"ExpressionStatement","src":"9929:7:16"},{"expression":{"id":3309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3302,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3274,"src":"9954:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3303,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3274,"src":"9965:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3304,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3012,"src":"9975:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9965:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3306,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9964:14:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3307,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"9981:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9964:23:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9954:33:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3310,"nodeType":"ExpressionStatement","src":"9954:33:16"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3313,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"10019:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3314,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3015,"src":"10024:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10019:7:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3330,"nodeType":"IfStatement","src":"10015:104:16","trueBody":{"id":3329,"nodeType":"Block","src":"10028:91:16","statements":[{"expression":{"id":3318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3316,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"10046:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3317,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3015,"src":"10051:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10046:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3319,"nodeType":"ExpressionStatement","src":"10046:7:16"},{"expression":{"id":3327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3320,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3274,"src":"10071:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3321,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3274,"src":"10082:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3322,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3018,"src":"10092:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10082:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3324,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10081:14:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3325,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"10098:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10081:23:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10071:33:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3328,"nodeType":"ExpressionStatement","src":"10071:33:16"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3331,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"10136:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3332,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3021,"src":"10141:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10136:7:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3348,"nodeType":"IfStatement","src":"10132:104:16","trueBody":{"id":3347,"nodeType":"Block","src":"10145:91:16","statements":[{"expression":{"id":3336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3334,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"10163:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3335,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3021,"src":"10168:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10163:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3337,"nodeType":"ExpressionStatement","src":"10163:7:16"},{"expression":{"id":3345,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3338,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3274,"src":"10188:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3339,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3274,"src":"10199:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3340,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3024,"src":"10209:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10199:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3342,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10198:14:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3343,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"10215:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10198:23:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10188:33:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3346,"nodeType":"ExpressionStatement","src":"10188:33:16"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3349,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"10253:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3350,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3027,"src":"10258:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10253:7:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3366,"nodeType":"IfStatement","src":"10249:104:16","trueBody":{"id":3365,"nodeType":"Block","src":"10262:91:16","statements":[{"expression":{"id":3354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3352,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"10280:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3353,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3027,"src":"10285:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10280:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3355,"nodeType":"ExpressionStatement","src":"10280:7:16"},{"expression":{"id":3363,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3356,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3274,"src":"10305:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3357,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3274,"src":"10316:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3358,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3030,"src":"10326:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10316:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3360,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10315:14:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3361,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"10332:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10315:23:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10305:33:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3364,"nodeType":"ExpressionStatement","src":"10305:33:16"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3367,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"10370:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3368,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3033,"src":"10375:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10370:7:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3384,"nodeType":"IfStatement","src":"10366:104:16","trueBody":{"id":3383,"nodeType":"Block","src":"10379:91:16","statements":[{"expression":{"id":3372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3370,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"10397:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3371,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3033,"src":"10402:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10397:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3373,"nodeType":"ExpressionStatement","src":"10397:7:16"},{"expression":{"id":3381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3374,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3274,"src":"10422:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3375,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3274,"src":"10433:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3376,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3036,"src":"10443:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10433:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3378,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10432:14:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3379,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"10449:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10432:23:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10422:33:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3382,"nodeType":"ExpressionStatement","src":"10422:33:16"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3385,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"10487:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3386,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3039,"src":"10492:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10487:7:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3402,"nodeType":"IfStatement","src":"10483:104:16","trueBody":{"id":3401,"nodeType":"Block","src":"10496:91:16","statements":[{"expression":{"id":3390,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3388,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"10514:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3389,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3039,"src":"10519:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10514:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3391,"nodeType":"ExpressionStatement","src":"10514:7:16"},{"expression":{"id":3399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3392,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3274,"src":"10539:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3398,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3393,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3274,"src":"10550:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3394,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3042,"src":"10560:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10550:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3396,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10549:14:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3397,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"10566:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10549:23:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10539:33:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3400,"nodeType":"ExpressionStatement","src":"10539:33:16"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3403,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"10604:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3404,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3045,"src":"10609:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10604:7:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3420,"nodeType":"IfStatement","src":"10600:104:16","trueBody":{"id":3419,"nodeType":"Block","src":"10613:91:16","statements":[{"expression":{"id":3408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3406,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"10631:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":3407,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3045,"src":"10636:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10631:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3409,"nodeType":"ExpressionStatement","src":"10631:7:16"},{"expression":{"id":3417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3410,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3274,"src":"10656:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3411,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3274,"src":"10667:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3412,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3048,"src":"10677:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10667:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3414,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10666:14:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3415,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"10683:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10666:23:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10656:33:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3418,"nodeType":"ExpressionStatement","src":"10656:33:16"}]}}]},{"assignments":[3423],"declarations":[{"constant":false,"id":3423,"mutability":"mutable","name":"seriesSum","nameLocation":"11025:9:16","nodeType":"VariableDeclaration","scope":3639,"src":"11018:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3422,"name":"int256","nodeType":"ElementaryTypeName","src":"11018:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3425,"initialValue":{"id":3424,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"11037:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"11018:25:16"},{"assignments":[3427],"declarations":[{"constant":false,"id":3427,"mutability":"mutable","name":"term","nameLocation":"11115:4:16","nodeType":"VariableDeclaration","scope":3639,"src":"11108:11:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3426,"name":"int256","nodeType":"ElementaryTypeName","src":"11108:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3428,"nodeType":"VariableDeclarationStatement","src":"11108:11:16"},{"expression":{"id":3431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3429,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"11228:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":3430,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"11235:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11228:8:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3432,"nodeType":"ExpressionStatement","src":"11228:8:16"},{"id":3638,"nodeType":"UncheckedBlock","src":"11246:1894:16","statements":[{"expression":{"id":3435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3433,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3423,"src":"11270:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3434,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"11283:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11270:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3436,"nodeType":"ExpressionStatement","src":"11270:17:16"},{"expression":{"id":3447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3437,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"11536:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3440,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3438,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"11545:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3439,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"11552:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11545:8:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3441,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11544:10:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3442,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"11557:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11544:19:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3444,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11543:21:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":3445,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11567:1:16","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"11543:25:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11536:32:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3448,"nodeType":"ExpressionStatement","src":"11536:32:16"},{"expression":{"id":3451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3449,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3423,"src":"11582:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3450,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"11595:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11582:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3452,"nodeType":"ExpressionStatement","src":"11582:17:16"},{"expression":{"id":3463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3453,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"11614:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3454,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"11623:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3455,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"11630:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11623:8:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3457,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11622:10:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3458,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"11635:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11622:19:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3460,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11621:21:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":3461,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11645:1:16","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"11621:25:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11614:32:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3464,"nodeType":"ExpressionStatement","src":"11614:32:16"},{"expression":{"id":3467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3465,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3423,"src":"11660:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3466,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"11673:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11660:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3468,"nodeType":"ExpressionStatement","src":"11660:17:16"},{"expression":{"id":3479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3469,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"11692:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3470,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"11701:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3471,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"11708:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11701:8:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3473,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11700:10:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3474,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"11713:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11700:19:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3476,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11699:21:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"34","id":3477,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11723:1:16","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"11699:25:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11692:32:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3480,"nodeType":"ExpressionStatement","src":"11692:32:16"},{"expression":{"id":3483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3481,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3423,"src":"11738:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3482,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"11751:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11738:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3484,"nodeType":"ExpressionStatement","src":"11738:17:16"},{"expression":{"id":3495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3485,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"11770:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3486,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"11779:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3487,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"11786:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11779:8:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3489,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11778:10:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3490,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"11791:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11778:19:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3492,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11777:21:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":3493,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11801:1:16","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"11777:25:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11770:32:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3496,"nodeType":"ExpressionStatement","src":"11770:32:16"},{"expression":{"id":3499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3497,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3423,"src":"11816:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3498,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"11829:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11816:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3500,"nodeType":"ExpressionStatement","src":"11816:17:16"},{"expression":{"id":3511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3501,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"11848:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3502,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"11857:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3503,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"11864:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11857:8:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3505,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11856:10:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3506,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"11869:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11856:19:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3508,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11855:21:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"36","id":3509,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11879:1:16","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"11855:25:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11848:32:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3512,"nodeType":"ExpressionStatement","src":"11848:32:16"},{"expression":{"id":3515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3513,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3423,"src":"11894:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3514,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"11907:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11894:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3516,"nodeType":"ExpressionStatement","src":"11894:17:16"},{"expression":{"id":3527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3517,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"11926:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3518,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"11935:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3519,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"11942:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11935:8:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3521,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11934:10:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3522,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"11947:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11934:19:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3524,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11933:21:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":3525,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11957:1:16","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"11933:25:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11926:32:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3528,"nodeType":"ExpressionStatement","src":"11926:32:16"},{"expression":{"id":3531,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3529,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3423,"src":"11972:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3530,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"11985:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11972:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3532,"nodeType":"ExpressionStatement","src":"11972:17:16"},{"expression":{"id":3543,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3533,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"12004:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3534,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"12013:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3535,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"12020:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12013:8:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3537,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12012:10:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3538,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"12025:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12012:19:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3540,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12011:21:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"38","id":3541,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12035:1:16","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"12011:25:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12004:32:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3544,"nodeType":"ExpressionStatement","src":"12004:32:16"},{"expression":{"id":3547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3545,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3423,"src":"12050:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3546,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"12063:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12050:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3548,"nodeType":"ExpressionStatement","src":"12050:17:16"},{"expression":{"id":3559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3549,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"12082:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3550,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"12091:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3551,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"12098:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12091:8:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3553,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12090:10:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3554,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"12103:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12090:19:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3556,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12089:21:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":3557,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12113:1:16","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"12089:25:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12082:32:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3560,"nodeType":"ExpressionStatement","src":"12082:32:16"},{"expression":{"id":3563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3561,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3423,"src":"12128:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3562,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"12141:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12128:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3564,"nodeType":"ExpressionStatement","src":"12128:17:16"},{"expression":{"id":3575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3565,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"12160:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3566,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"12169:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3567,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"12176:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12169:8:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3569,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12168:10:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3570,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"12181:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12168:19:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3572,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12167:21:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3130","id":3573,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12191:2:16","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"12167:26:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12160:33:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3576,"nodeType":"ExpressionStatement","src":"12160:33:16"},{"expression":{"id":3579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3577,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3423,"src":"12207:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3578,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"12220:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12207:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3580,"nodeType":"ExpressionStatement","src":"12207:17:16"},{"expression":{"id":3591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3581,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"12239:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3582,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"12248:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3583,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"12255:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12248:8:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3585,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12247:10:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3586,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"12260:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12247:19:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3588,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12246:21:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":3589,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12270:2:16","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"12246:26:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12239:33:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3592,"nodeType":"ExpressionStatement","src":"12239:33:16"},{"expression":{"id":3595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3593,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3423,"src":"12286:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3594,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"12299:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12286:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3596,"nodeType":"ExpressionStatement","src":"12286:17:16"},{"expression":{"id":3607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3597,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"12318:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3598,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"12327:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3599,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3196,"src":"12334:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12327:8:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3601,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12326:10:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3602,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"12339:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12326:19:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3604,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12325:21:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3132","id":3605,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12349:2:16","typeDescriptions":{"typeIdentifier":"t_rational_12_by_1","typeString":"int_const 12"},"value":"12"},"src":"12325:26:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12318:33:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3608,"nodeType":"ExpressionStatement","src":"12318:33:16"},{"expression":{"id":3611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3609,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3423,"src":"12365:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3610,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3427,"src":"12378:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12365:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3612,"nodeType":"ExpressionStatement","src":"12365:17:16"},{"assignments":[3614],"declarations":[{"constant":false,"id":3614,"mutability":"mutable","name":"result","nameLocation":"12914:6:16","nodeType":"VariableDeclaration","scope":3638,"src":"12907:13:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3613,"name":"int256","nodeType":"ElementaryTypeName","src":"12907:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3627,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3617,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3615,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3274,"src":"12926:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3616,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3423,"src":"12936:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12926:19:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3618,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12925:21:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3619,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"12949:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12925:30:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3621,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12924:32:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3622,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3235,"src":"12959:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12924:42:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3624,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12923:44:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"313030","id":3625,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12970:3:16","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"12923:50:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"12907:66:16"},{"expression":{"condition":{"id":3628,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3216,"src":"13075:16:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":3635,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3614,"src":"13123:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3636,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"13075:54:16","trueExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3634,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3631,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":3629,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2955,"src":"13095:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3630,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2955,"src":"13104:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13095:15:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3632,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"13094:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3633,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3614,"src":"13114:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13094:26:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":3200,"id":3637,"nodeType":"Return","src":"13068:61:16"}]}]},"documentation":{"id":3194,"nodeType":"StructuredDocumentation","src":"6802:203:16","text":" @dev Natural exponentiation (e^x) with signed 18 decimal fixed point exponent.\n Reverts if `x` is smaller than MIN_NATURAL_EXPONENT, or larger than `MAX_NATURAL_EXPONENT`."},"id":3640,"implemented":true,"kind":"function","modifiers":[],"name":"exp","nameLocation":"7019:3:16","nodeType":"FunctionDefinition","parameters":{"id":3197,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3196,"mutability":"mutable","name":"x","nameLocation":"7030:1:16","nodeType":"VariableDeclaration","scope":3640,"src":"7023:8:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3195,"name":"int256","nodeType":"ElementaryTypeName","src":"7023:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"7022:10:16"},"returnParameters":{"id":3200,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3199,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3640,"src":"7056:6:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3198,"name":"int256","nodeType":"ElementaryTypeName","src":"7056:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"7055:8:16"},"scope":4290,"src":"7010:6136:16","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3713,"nodeType":"Block","src":"13315:861:16","statements":[{"assignments":[3651],"declarations":[{"constant":false,"id":3651,"mutability":"mutable","name":"logBase","nameLocation":"13552:7:16","nodeType":"VariableDeclaration","scope":3713,"src":"13545:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3650,"name":"int256","nodeType":"ElementaryTypeName","src":"13545:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3652,"nodeType":"VariableDeclarationStatement","src":"13545:14:16"},{"id":3677,"nodeType":"UncheckedBlock","src":"13569:214:16","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3653,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2973,"src":"13597:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3654,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3645,"src":"13617:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13597:24:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3656,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3645,"src":"13625:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3657,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2978,"src":"13632:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13625:24:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13597:52:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3675,"nodeType":"Block","src":"13712:61:16","statements":[{"expression":{"id":3673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3667,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3651,"src":"13730:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3669,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3645,"src":"13744:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3668,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4134,"src":"13740:3:16","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":3670,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13740:9:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3671,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2955,"src":"13752:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13740:18:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13730:28:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3674,"nodeType":"ExpressionStatement","src":"13730:28:16"}]},"id":3676,"nodeType":"IfStatement","src":"13593:180:16","trueBody":{"id":3666,"nodeType":"Block","src":"13651:55:16","statements":[{"expression":{"id":3664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3660,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3651,"src":"13669:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3662,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3645,"src":"13686:4:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3661,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4289,"src":"13679:6:16","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":3663,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13679:12:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13669:22:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3665,"nodeType":"ExpressionStatement","src":"13669:22:16"}]}}]},{"assignments":[3679],"declarations":[{"constant":false,"id":3679,"mutability":"mutable","name":"logArg","nameLocation":"13800:6:16","nodeType":"VariableDeclaration","scope":3713,"src":"13793:13:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3678,"name":"int256","nodeType":"ElementaryTypeName","src":"13793:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3680,"nodeType":"VariableDeclarationStatement","src":"13793:13:16"},{"id":3712,"nodeType":"UncheckedBlock","src":"13816:354:16","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3681,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2973,"src":"13844:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3682,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3643,"src":"13864:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13844:23:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3684,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3643,"src":"13871:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3685,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2978,"src":"13877:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13871:23:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13844:50:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3703,"nodeType":"Block","src":"13955:59:16","statements":[{"expression":{"id":3701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3695,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3679,"src":"13973:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3697,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3643,"src":"13986:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3696,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4134,"src":"13982:3:16","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":3698,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13982:8:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3699,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2955,"src":"13993:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13982:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13973:26:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3702,"nodeType":"ExpressionStatement","src":"13973:26:16"}]},"id":3704,"nodeType":"IfStatement","src":"13840:174:16","trueBody":{"id":3694,"nodeType":"Block","src":"13896:53:16","statements":[{"expression":{"id":3692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3688,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3679,"src":"13914:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":3690,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3643,"src":"13930:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3689,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4289,"src":"13923:6:16","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":3691,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13923:11:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13914:20:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3693,"nodeType":"ExpressionStatement","src":"13914:20:16"}]}},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3710,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3705,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3679,"src":"14133:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3706,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2955,"src":"14142:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14133:15:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3708,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14132:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3709,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3651,"src":"14152:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14132:27:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":3649,"id":3711,"nodeType":"Return","src":"14125:34:16"}]}]},"documentation":{"id":3641,"nodeType":"StructuredDocumentation","src":"13152:89:16","text":"@dev Logarithm (log(arg, base), with signed 18 decimal fixed point base and argument."},"id":3714,"implemented":true,"kind":"function","modifiers":[],"name":"log","nameLocation":"13255:3:16","nodeType":"FunctionDefinition","parameters":{"id":3646,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3643,"mutability":"mutable","name":"arg","nameLocation":"13266:3:16","nodeType":"VariableDeclaration","scope":3714,"src":"13259:10:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3642,"name":"int256","nodeType":"ElementaryTypeName","src":"13259:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":3645,"mutability":"mutable","name":"base","nameLocation":"13278:4:16","nodeType":"VariableDeclaration","scope":3714,"src":"13271:11:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3644,"name":"int256","nodeType":"ElementaryTypeName","src":"13271:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"13258:25:16"},"returnParameters":{"id":3649,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3648,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3714,"src":"13307:6:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3647,"name":"int256","nodeType":"ElementaryTypeName","src":"13307:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"13306:8:16"},"scope":4290,"src":"13246:930:16","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":3751,"nodeType":"Block","src":"14319:353:16","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3722,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3717,"src":"14416:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"hexValue":"30","id":3723,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14421:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14416:6:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3729,"nodeType":"IfStatement","src":"14412:57:16","trueBody":{"id":3728,"nodeType":"Block","src":"14424:45:16","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":3725,"name":"OutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2952,"src":"14445:11:16","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":3726,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14445:13:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":3727,"nodeType":"RevertStatement","src":"14438:20:16"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":3736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3730,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2973,"src":"14482:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3731,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3717,"src":"14502:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14482:21:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3733,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3717,"src":"14507:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3734,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2978,"src":"14511:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14507:21:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14482:46:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":3749,"nodeType":"Block","src":"14628:38:16","statements":[{"expression":{"arguments":[{"id":3746,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3717,"src":"14653:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3745,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4134,"src":"14649:3:16","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":3747,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14649:6:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":3721,"id":3748,"nodeType":"Return","src":"14642:13:16"}]},"id":3750,"nodeType":"IfStatement","src":"14478:188:16","trueBody":{"id":3744,"nodeType":"Block","src":"14530:92:16","statements":[{"id":3743,"nodeType":"UncheckedBlock","src":"14544:68:16","statements":[{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":3738,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3717,"src":"14586:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":3737,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4289,"src":"14579:6:16","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":3739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14579:9:16","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3740,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2955,"src":"14591:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14579:18:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":3721,"id":3742,"nodeType":"Return","src":"14572:25:16"}]}]}}]},"documentation":{"id":3715,"nodeType":"StructuredDocumentation","src":"14182:79:16","text":"@dev Natural logarithm (ln(a)) with signed 18 decimal fixed point argument."},"id":3752,"implemented":true,"kind":"function","modifiers":[],"name":"ln","nameLocation":"14275:2:16","nodeType":"FunctionDefinition","parameters":{"id":3718,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3717,"mutability":"mutable","name":"a","nameLocation":"14285:1:16","nodeType":"VariableDeclaration","scope":3752,"src":"14278:8:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3716,"name":"int256","nodeType":"ElementaryTypeName","src":"14278:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14277:10:16"},"returnParameters":{"id":3721,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3720,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3752,"src":"14311:6:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3719,"name":"int256","nodeType":"ElementaryTypeName","src":"14311:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14310:8:16"},"scope":4290,"src":"14266:406:16","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4133,"nodeType":"Block","src":"14824:5531:16","statements":[{"assignments":[3761],"declarations":[{"constant":false,"id":3761,"mutability":"mutable","name":"negativeExponent","nameLocation":"14915:16:16","nodeType":"VariableDeclaration","scope":4133,"src":"14910:21:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3760,"name":"bool","nodeType":"ElementaryTypeName","src":"14910:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":3763,"initialValue":{"hexValue":"66616c7365","id":3762,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"14934:5:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"14910:29:16"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3764,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"14954:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":3765,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2955,"src":"14958:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14954:10:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3782,"nodeType":"IfStatement","src":"14950:381:16","trueBody":{"id":3781,"nodeType":"Block","src":"14966:365:16","statements":[{"id":3776,"nodeType":"UncheckedBlock","src":"15216:68:16","statements":[{"expression":{"id":3774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3767,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"15244:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3770,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":3768,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2955,"src":"15249:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3769,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2955,"src":"15258:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15249:15:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3771,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"15248:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3772,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"15268:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15248:21:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15244:25:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3775,"nodeType":"ExpressionStatement","src":"15244:25:16"}]},{"expression":{"id":3779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3777,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3761,"src":"15297:16:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":3778,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15316:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"15297:23:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3780,"nodeType":"ExpressionStatement","src":"15297:23:16"}]}},{"assignments":[3784],"declarations":[{"constant":false,"id":3784,"mutability":"mutable","name":"sum","nameLocation":"16663:3:16","nodeType":"VariableDeclaration","scope":4133,"src":"16656:10:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3783,"name":"int256","nodeType":"ElementaryTypeName","src":"16656:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":3786,"initialValue":{"hexValue":"30","id":3785,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16669:1:16","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16656:14:16"},{"id":4005,"nodeType":"UncheckedBlock","src":"16680:1674:16","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3787,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"16708:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3790,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":3788,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2994,"src":"16713:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3789,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2955,"src":"16718:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16713:11:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16708:16:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3801,"nodeType":"IfStatement","src":"16704:126:16","trueBody":{"id":3800,"nodeType":"Block","src":"16726:104:16","statements":[{"expression":{"id":3794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3792,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"16744:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":3793,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2994,"src":"16749:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16744:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3795,"nodeType":"ExpressionStatement","src":"16744:7:16"},{"expression":{"id":3798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3796,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3784,"src":"16806:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3797,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2991,"src":"16813:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16806:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3799,"nodeType":"ExpressionStatement","src":"16806:9:16"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3802,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"16848:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3805,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":3803,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3000,"src":"16853:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3804,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2955,"src":"16858:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16853:11:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16848:16:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3816,"nodeType":"IfStatement","src":"16844:126:16","trueBody":{"id":3815,"nodeType":"Block","src":"16866:104:16","statements":[{"expression":{"id":3809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3807,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"16884:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":3808,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3000,"src":"16889:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16884:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3810,"nodeType":"ExpressionStatement","src":"16884:7:16"},{"expression":{"id":3813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3811,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3784,"src":"16946:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3812,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2997,"src":"16953:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16946:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3814,"nodeType":"ExpressionStatement","src":"16946:9:16"}]}},{"expression":{"id":3819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3817,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3784,"src":"17109:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":3818,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17116:3:16","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"17109:10:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3820,"nodeType":"ExpressionStatement","src":"17109:10:16"},{"expression":{"id":3823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3821,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"17133:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":3822,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17138:3:16","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"17133:8:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3824,"nodeType":"ExpressionStatement","src":"17133:8:16"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3825,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"17276:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3826,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3006,"src":"17281:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17276:7:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3842,"nodeType":"IfStatement","src":"17272:94:16","trueBody":{"id":3841,"nodeType":"Block","src":"17285:81:16","statements":[{"expression":{"id":3835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3828,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"17303:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3829,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"17308:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3830,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"17312:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17308:10:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3832,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17307:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3833,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3006,"src":"17322:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17307:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17303:21:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3836,"nodeType":"ExpressionStatement","src":"17303:21:16"},{"expression":{"id":3839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3837,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3784,"src":"17342:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3838,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3003,"src":"17349:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17342:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3840,"nodeType":"ExpressionStatement","src":"17342:9:16"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3843,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"17384:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3844,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3012,"src":"17389:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17384:7:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3860,"nodeType":"IfStatement","src":"17380:94:16","trueBody":{"id":3859,"nodeType":"Block","src":"17393:81:16","statements":[{"expression":{"id":3853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3846,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"17411:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3847,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"17416:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3848,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"17420:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17416:10:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3850,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17415:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3851,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3012,"src":"17430:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17415:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17411:21:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3854,"nodeType":"ExpressionStatement","src":"17411:21:16"},{"expression":{"id":3857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3855,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3784,"src":"17450:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3856,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3009,"src":"17457:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17450:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3858,"nodeType":"ExpressionStatement","src":"17450:9:16"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3861,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"17492:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3862,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3018,"src":"17497:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17492:7:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3878,"nodeType":"IfStatement","src":"17488:94:16","trueBody":{"id":3877,"nodeType":"Block","src":"17501:81:16","statements":[{"expression":{"id":3871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3864,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"17519:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3867,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3865,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"17524:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3866,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"17528:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17524:10:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3868,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17523:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3869,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3018,"src":"17538:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17523:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17519:21:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3872,"nodeType":"ExpressionStatement","src":"17519:21:16"},{"expression":{"id":3875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3873,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3784,"src":"17558:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3874,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3015,"src":"17565:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17558:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3876,"nodeType":"ExpressionStatement","src":"17558:9:16"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3879,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"17600:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3880,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3024,"src":"17605:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17600:7:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3896,"nodeType":"IfStatement","src":"17596:94:16","trueBody":{"id":3895,"nodeType":"Block","src":"17609:81:16","statements":[{"expression":{"id":3889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3882,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"17627:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3883,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"17632:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3884,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"17636:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17632:10:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3886,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17631:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3887,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3024,"src":"17646:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17631:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17627:21:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3890,"nodeType":"ExpressionStatement","src":"17627:21:16"},{"expression":{"id":3893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3891,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3784,"src":"17666:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3892,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3021,"src":"17673:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17666:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3894,"nodeType":"ExpressionStatement","src":"17666:9:16"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3897,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"17708:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3898,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3030,"src":"17713:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17708:7:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3914,"nodeType":"IfStatement","src":"17704:94:16","trueBody":{"id":3913,"nodeType":"Block","src":"17717:81:16","statements":[{"expression":{"id":3907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3900,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"17735:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3901,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"17740:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3902,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"17744:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17740:10:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3904,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17739:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3905,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3030,"src":"17754:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17739:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17735:21:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3908,"nodeType":"ExpressionStatement","src":"17735:21:16"},{"expression":{"id":3911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3909,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3784,"src":"17774:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3910,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3027,"src":"17781:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17774:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3912,"nodeType":"ExpressionStatement","src":"17774:9:16"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3915,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"17816:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3916,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3036,"src":"17821:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17816:7:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3932,"nodeType":"IfStatement","src":"17812:94:16","trueBody":{"id":3931,"nodeType":"Block","src":"17825:81:16","statements":[{"expression":{"id":3925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3918,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"17843:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3919,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"17848:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3920,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"17852:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17848:10:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3922,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17847:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3923,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3036,"src":"17862:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17847:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17843:21:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3926,"nodeType":"ExpressionStatement","src":"17843:21:16"},{"expression":{"id":3929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3927,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3784,"src":"17882:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3928,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3033,"src":"17889:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17882:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3930,"nodeType":"ExpressionStatement","src":"17882:9:16"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3933,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"17924:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3934,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3042,"src":"17929:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17924:7:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3950,"nodeType":"IfStatement","src":"17920:94:16","trueBody":{"id":3949,"nodeType":"Block","src":"17933:81:16","statements":[{"expression":{"id":3943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3936,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"17951:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3937,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"17956:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3938,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"17960:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17956:10:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3940,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17955:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3941,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3042,"src":"17970:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17955:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17951:21:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3944,"nodeType":"ExpressionStatement","src":"17951:21:16"},{"expression":{"id":3947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3945,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3784,"src":"17990:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3946,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3039,"src":"17997:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17990:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3948,"nodeType":"ExpressionStatement","src":"17990:9:16"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3953,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3951,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"18032:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3952,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3048,"src":"18037:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18032:7:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3968,"nodeType":"IfStatement","src":"18028:94:16","trueBody":{"id":3967,"nodeType":"Block","src":"18041:81:16","statements":[{"expression":{"id":3961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3954,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"18059:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3955,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"18064:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3956,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"18068:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18064:10:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3958,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18063:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3959,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3048,"src":"18078:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18063:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18059:21:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3962,"nodeType":"ExpressionStatement","src":"18059:21:16"},{"expression":{"id":3965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3963,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3784,"src":"18098:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3964,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3045,"src":"18105:2:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18098:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3966,"nodeType":"ExpressionStatement","src":"18098:9:16"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3969,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"18140:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3970,"name":"a10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3054,"src":"18145:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18140:8:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":3986,"nodeType":"IfStatement","src":"18136:97:16","trueBody":{"id":3985,"nodeType":"Block","src":"18150:83:16","statements":[{"expression":{"id":3979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3972,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"18168:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3973,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"18173:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3974,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"18177:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18173:10:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3976,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18172:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3977,"name":"a10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3054,"src":"18187:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18172:18:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18168:22:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3980,"nodeType":"ExpressionStatement","src":"18168:22:16"},{"expression":{"id":3983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3981,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3784,"src":"18208:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":3982,"name":"x10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3051,"src":"18215:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18208:10:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3984,"nodeType":"ExpressionStatement","src":"18208:10:16"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3987,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"18251:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":3988,"name":"a11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3060,"src":"18256:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18251:8:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4004,"nodeType":"IfStatement","src":"18247:97:16","trueBody":{"id":4003,"nodeType":"Block","src":"18261:83:16","statements":[{"expression":{"id":3997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3990,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"18279:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":3993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":3991,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"18284:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":3992,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"18288:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18284:10:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":3994,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18283:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":3995,"name":"a11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3060,"src":"18298:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18283:18:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18279:22:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":3998,"nodeType":"ExpressionStatement","src":"18279:22:16"},{"expression":{"id":4001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":3999,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3784,"src":"18319:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":4000,"name":"x11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3057,"src":"18326:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18319:10:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4002,"nodeType":"ExpressionStatement","src":"18319:10:16"}]}}]},{"id":4132,"nodeType":"UncheckedBlock","src":"18856:1493:16","statements":[{"assignments":[4007],"declarations":[{"constant":false,"id":4007,"mutability":"mutable","name":"z","nameLocation":"18887:1:16","nodeType":"VariableDeclaration","scope":4132,"src":"18880:8:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4006,"name":"int256","nodeType":"ElementaryTypeName","src":"18880:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4020,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4010,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4008,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"18893:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":4009,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"18897:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18893:10:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4011,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18892:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4012,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"18907:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18892:21:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4014,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18891:23:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4017,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4015,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3755,"src":"18918:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":4016,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"18922:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18918:10:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4018,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18917:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18891:38:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"18880:49:16"},{"assignments":[4022],"declarations":[{"constant":false,"id":4022,"mutability":"mutable","name":"z_squared","nameLocation":"18950:9:16","nodeType":"VariableDeclaration","scope":4132,"src":"18943:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4021,"name":"int256","nodeType":"ElementaryTypeName","src":"18943:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4029,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4023,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4007,"src":"18963:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4024,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4007,"src":"18967:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18963:5:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4026,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18962:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4027,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"18972:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18962:16:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"18943:35:16"},{"assignments":[4031],"declarations":[{"constant":false,"id":4031,"mutability":"mutable","name":"num","nameLocation":"19074:3:16","nodeType":"VariableDeclaration","scope":4132,"src":"19067:10:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4030,"name":"int256","nodeType":"ElementaryTypeName","src":"19067:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4033,"initialValue":{"id":4032,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4007,"src":"19080:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"19067:14:16"},{"assignments":[4035],"declarations":[{"constant":false,"id":4035,"mutability":"mutable","name":"seriesSum","nameLocation":"19210:9:16","nodeType":"VariableDeclaration","scope":4132,"src":"19203:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4034,"name":"int256","nodeType":"ElementaryTypeName","src":"19203:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4037,"initialValue":{"id":4036,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"19222:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"19203:22:16"},{"expression":{"id":4045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4038,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"19304:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4044,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4039,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"19311:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4040,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4022,"src":"19317:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19311:15:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4042,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19310:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4043,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"19330:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19310:26:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19304:32:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4046,"nodeType":"ExpressionStatement","src":"19304:32:16"},{"expression":{"id":4051,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4047,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4035,"src":"19350:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4048,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"19363:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":4049,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19369:1:16","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"19363:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19350:20:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4052,"nodeType":"ExpressionStatement","src":"19350:20:16"},{"expression":{"id":4060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4053,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"19385:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4054,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"19392:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4055,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4022,"src":"19398:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19392:15:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4057,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19391:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4058,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"19411:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19391:26:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19385:32:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4061,"nodeType":"ExpressionStatement","src":"19385:32:16"},{"expression":{"id":4066,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4062,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4035,"src":"19431:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4063,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"19444:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":4064,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19450:1:16","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"19444:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19431:20:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4067,"nodeType":"ExpressionStatement","src":"19431:20:16"},{"expression":{"id":4075,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4068,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"19466:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4069,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"19473:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4070,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4022,"src":"19479:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19473:15:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4072,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19472:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4073,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"19492:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19472:26:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19466:32:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4076,"nodeType":"ExpressionStatement","src":"19466:32:16"},{"expression":{"id":4081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4077,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4035,"src":"19512:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4078,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"19525:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":4079,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19531:1:16","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"19525:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19512:20:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4082,"nodeType":"ExpressionStatement","src":"19512:20:16"},{"expression":{"id":4090,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4083,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"19547:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4086,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4084,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"19554:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4085,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4022,"src":"19560:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19554:15:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4087,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19553:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4088,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"19573:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19553:26:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19547:32:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4091,"nodeType":"ExpressionStatement","src":"19547:32:16"},{"expression":{"id":4096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4092,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4035,"src":"19593:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4093,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"19606:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":4094,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19612:1:16","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"19606:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19593:20:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4097,"nodeType":"ExpressionStatement","src":"19593:20:16"},{"expression":{"id":4105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4098,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"19628:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4099,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"19635:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4100,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4022,"src":"19641:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19635:15:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4102,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19634:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4103,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2958,"src":"19654:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19634:26:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19628:32:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4106,"nodeType":"ExpressionStatement","src":"19628:32:16"},{"expression":{"id":4111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4107,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4035,"src":"19674:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4108,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4031,"src":"19687:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":4109,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19693:2:16","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"19687:8:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19674:21:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4112,"nodeType":"ExpressionStatement","src":"19674:21:16"},{"expression":{"id":4115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4113,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4035,"src":"19866:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"32","id":4114,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19879:1:16","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"19866:14:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4116,"nodeType":"ExpressionStatement","src":"19866:14:16"},{"assignments":[4118],"declarations":[{"constant":false,"id":4118,"mutability":"mutable","name":"result","nameLocation":"20169:6:16","nodeType":"VariableDeclaration","scope":4132,"src":"20162:13:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4117,"name":"int256","nodeType":"ElementaryTypeName","src":"20162:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4125,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4119,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3784,"src":"20179:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":4120,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4035,"src":"20185:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20179:15:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4122,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20178:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"313030","id":4123,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20198:3:16","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"20178:23:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"20162:39:16"},{"expression":{"condition":{"id":4126,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3761,"src":"20303:16:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":4129,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4118,"src":"20332:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"20303:35:16","trueExpression":{"id":4128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"20322:7:16","subExpression":{"id":4127,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4118,"src":"20323:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":3759,"id":4131,"nodeType":"Return","src":"20296:42:16"}]}]},"documentation":{"id":3753,"nodeType":"StructuredDocumentation","src":"14678:88:16","text":"@dev Internal natural logarithm (ln(a)) with signed 18 decimal fixed point argument."},"id":4134,"implemented":true,"kind":"function","modifiers":[],"name":"_ln","nameLocation":"14780:3:16","nodeType":"FunctionDefinition","parameters":{"id":3756,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3755,"mutability":"mutable","name":"a","nameLocation":"14791:1:16","nodeType":"VariableDeclaration","scope":4134,"src":"14784:8:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3754,"name":"int256","nodeType":"ElementaryTypeName","src":"14784:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14783:10:16"},"returnParameters":{"id":3759,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3758,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4134,"src":"14816:6:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":3757,"name":"int256","nodeType":"ElementaryTypeName","src":"14816:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14815:8:16"},"scope":4290,"src":"14771:5584:16","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":4288,"nodeType":"Block","src":"20678:1804:16","statements":[{"id":4287,"nodeType":"UncheckedBlock","src":"20892:1584:16","statements":[{"expression":{"id":4144,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4142,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4137,"src":"20916:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"id":4143,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2955,"src":"20921:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20916:11:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4145,"nodeType":"ExpressionStatement","src":"20916:11:16"},{"assignments":[4147],"declarations":[{"constant":false,"id":4147,"mutability":"mutable","name":"z","nameLocation":"21315:1:16","nodeType":"VariableDeclaration","scope":4287,"src":"21308:8:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4146,"name":"int256","nodeType":"ElementaryTypeName","src":"21308:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4160,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4148,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4137,"src":"21321:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":4149,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2961,"src":"21325:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21321:10:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4151,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21320:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4152,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2961,"src":"21335:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21320:21:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4154,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21319:23:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4155,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4137,"src":"21346:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":4156,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2961,"src":"21350:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21346:10:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4158,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21345:12:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21319:38:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21308:49:16"},{"assignments":[4162],"declarations":[{"constant":false,"id":4162,"mutability":"mutable","name":"z_squared","nameLocation":"21378:9:16","nodeType":"VariableDeclaration","scope":4287,"src":"21371:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4161,"name":"int256","nodeType":"ElementaryTypeName","src":"21371:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4169,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4163,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4147,"src":"21391:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4164,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4147,"src":"21395:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21391:5:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4166,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21390:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4167,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2961,"src":"21400:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21390:16:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21371:35:16"},{"assignments":[4171],"declarations":[{"constant":false,"id":4171,"mutability":"mutable","name":"num","nameLocation":"21502:3:16","nodeType":"VariableDeclaration","scope":4287,"src":"21495:10:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4170,"name":"int256","nodeType":"ElementaryTypeName","src":"21495:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4173,"initialValue":{"id":4172,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4147,"src":"21508:1:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21495:14:16"},{"assignments":[4175],"declarations":[{"constant":false,"id":4175,"mutability":"mutable","name":"seriesSum","nameLocation":"21638:9:16","nodeType":"VariableDeclaration","scope":4287,"src":"21631:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4174,"name":"int256","nodeType":"ElementaryTypeName","src":"21631:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":4177,"initialValue":{"id":4176,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"21650:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21631:22:16"},{"expression":{"id":4185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4178,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"21732:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4179,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"21739:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4180,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4162,"src":"21745:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21739:15:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4182,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21738:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4183,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2961,"src":"21758:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21738:26:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21732:32:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4186,"nodeType":"ExpressionStatement","src":"21732:32:16"},{"expression":{"id":4191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4187,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"21778:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4188,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"21791:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":4189,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21797:1:16","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"21791:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21778:20:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4192,"nodeType":"ExpressionStatement","src":"21778:20:16"},{"expression":{"id":4200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4193,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"21813:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4194,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"21820:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4195,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4162,"src":"21826:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21820:15:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4197,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21819:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4198,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2961,"src":"21839:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21819:26:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21813:32:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4201,"nodeType":"ExpressionStatement","src":"21813:32:16"},{"expression":{"id":4206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4202,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"21859:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4203,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"21872:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":4204,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21878:1:16","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"21872:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21859:20:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4207,"nodeType":"ExpressionStatement","src":"21859:20:16"},{"expression":{"id":4215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4208,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"21894:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4214,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4209,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"21901:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4210,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4162,"src":"21907:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21901:15:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4212,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21900:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4213,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2961,"src":"21920:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21900:26:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21894:32:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4216,"nodeType":"ExpressionStatement","src":"21894:32:16"},{"expression":{"id":4221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4217,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"21940:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4218,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"21953:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":4219,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21959:1:16","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"21953:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21940:20:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4222,"nodeType":"ExpressionStatement","src":"21940:20:16"},{"expression":{"id":4230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4223,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"21975:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4224,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"21982:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4225,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4162,"src":"21988:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21982:15:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4227,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21981:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4228,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2961,"src":"22001:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21981:26:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21975:32:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4231,"nodeType":"ExpressionStatement","src":"21975:32:16"},{"expression":{"id":4236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4232,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"22021:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4233,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"22034:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":4234,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22040:1:16","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"22034:7:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22021:20:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4237,"nodeType":"ExpressionStatement","src":"22021:20:16"},{"expression":{"id":4245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4238,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"22056:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4239,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"22063:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4240,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4162,"src":"22069:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22063:15:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4242,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22062:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4243,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2961,"src":"22082:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22062:26:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22056:32:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4246,"nodeType":"ExpressionStatement","src":"22056:32:16"},{"expression":{"id":4251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4247,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"22102:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4248,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"22115:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":4249,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22121:2:16","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"22115:8:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22102:21:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4252,"nodeType":"ExpressionStatement","src":"22102:21:16"},{"expression":{"id":4260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4253,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"22138:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4254,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"22145:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4255,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4162,"src":"22151:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22145:15:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4257,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22144:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4258,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2961,"src":"22164:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22144:26:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22138:32:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4261,"nodeType":"ExpressionStatement","src":"22138:32:16"},{"expression":{"id":4266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4262,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"22184:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4263,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"22197:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3133","id":4264,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22203:2:16","typeDescriptions":{"typeIdentifier":"t_rational_13_by_1","typeString":"int_const 13"},"value":"13"},"src":"22197:8:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22184:21:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4267,"nodeType":"ExpressionStatement","src":"22184:21:16"},{"expression":{"id":4275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4268,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"22220:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4269,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"22227:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":4270,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4162,"src":"22233:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22227:15:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":4272,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22226:17:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":4273,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2961,"src":"22246:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22226:26:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22220:32:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4276,"nodeType":"ExpressionStatement","src":"22220:32:16"},{"expression":{"id":4281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4277,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"22266:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4278,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4171,"src":"22279:3:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3135","id":4279,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22285:2:16","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"15"},"src":"22279:8:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22266:21:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":4282,"nodeType":"ExpressionStatement","src":"22266:21:16"},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":4285,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4283,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4175,"src":"22452:9:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"32","id":4284,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22464:1:16","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"22452:13:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":4141,"id":4286,"nodeType":"Return","src":"22445:20:16"}]}]},"documentation":{"id":4135,"nodeType":"StructuredDocumentation","src":"20361:256:16","text":" @dev Internal high precision (36 decimal places) natural logarithm (ln(x)) with signed 18 decimal fixed point argument,\n for x close to one.\n Should only be used if x is between LN_36_LOWER_BOUND and LN_36_UPPER_BOUND."},"id":4289,"implemented":true,"kind":"function","modifiers":[],"name":"_ln_36","nameLocation":"20631:6:16","nodeType":"FunctionDefinition","parameters":{"id":4138,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4137,"mutability":"mutable","name":"x","nameLocation":"20645:1:16","nodeType":"VariableDeclaration","scope":4289,"src":"20638:8:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4136,"name":"int256","nodeType":"ElementaryTypeName","src":"20638:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20637:10:16"},"returnParameters":{"id":4141,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4140,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4289,"src":"20670:6:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4139,"name":"int256","nodeType":"ElementaryTypeName","src":"20670:6:16","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20669:8:16"},"scope":4290,"src":"20622:1860:16","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":4291,"src":"595:21889:16","usedErrors":[2940,2943,2946,2949,2952],"usedEvents":[]}],"src":"33:22452:16"},"id":16},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","exportedSymbols":{"ReentrancyGuardTransient":[4359],"StorageSlotExtension":[4572]},"id":4360,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":4292,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:17"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","file":"./StorageSlotExtension.sol","id":4294,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4360,"sourceUnit":4573,"src":"59:66:17","symbolAliases":[{"foreign":{"id":4293,"name":"StorageSlotExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4572,"src":"68:20:17","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[],"canonicalName":"ReentrancyGuardTransient","contractDependencies":[],"contractKind":"contract","documentation":{"id":4295,"nodeType":"StructuredDocumentation","src":"127:155:17","text":" @notice Variant of {ReentrancyGuard} that uses transient storage.\n @dev NOTE: This variant only works on networks where EIP-1153 is available."},"fullyImplemented":true,"id":4359,"linearizedBaseContracts":[4359],"name":"ReentrancyGuardTransient","nameLocation":"301:24:17","nodeType":"ContractDefinition","nodes":[{"global":false,"id":4297,"libraryName":{"id":4296,"name":"StorageSlotExtension","nameLocations":["338:20:17"],"nodeType":"IdentifierPath","referencedDeclaration":4572,"src":"338:20:17"},"nodeType":"UsingForDirective","src":"332:33:17"},{"constant":true,"id":4300,"mutability":"constant","name":"_REENTRANCY_GUARD_STORAGE","nameLocation":"515:25:17","nodeType":"VariableDeclaration","scope":4359,"src":"490:127:17","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4298,"name":"bytes32","nodeType":"ElementaryTypeName","src":"490:7:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307839623737396231373432326430646639323232333031386233326234643166613436653037313732336436383137653234383664303033626563633535663030","id":4299,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"551:66:17","typeDescriptions":{"typeIdentifier":"t_rational_70319816728846589445362000750570655803700195216363692647688146666176345628416_by_1","typeString":"int_const 7031...(69 digits omitted)...8416"},"value":"0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"},"visibility":"private"},{"documentation":{"id":4301,"nodeType":"StructuredDocumentation","src":"624:40:17","text":"@notice Unauthorized reentrant call."},"errorSelector":"3ee5aeb5","id":4303,"name":"ReentrancyGuardReentrantCall","nameLocation":"675:28:17","nodeType":"ErrorDefinition","parameters":{"id":4302,"nodeType":"ParameterList","parameters":[],"src":"703:2:17"},"src":"669:37:17"},{"body":{"id":4313,"nodeType":"Block","src":"1107:79:17","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":4306,"name":"_nonReentrantBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4333,"src":"1117:19:17","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":4307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1117:21:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4308,"nodeType":"ExpressionStatement","src":"1117:21:17"},{"id":4309,"nodeType":"PlaceholderStatement","src":"1148:1:17"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":4310,"name":"_nonReentrantAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4345,"src":"1159:18:17","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":4311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1159:20:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4312,"nodeType":"ExpressionStatement","src":"1159:20:17"}]},"documentation":{"id":4304,"nodeType":"StructuredDocumentation","src":"712:366:17","text":" @dev Prevents a contract from calling itself, directly or indirectly.\n Calling a `nonReentrant` function from another `nonReentrant`\n function is not supported. It is possible to prevent this from happening\n by making the `nonReentrant` function external, and making it call a\n `private` function that does the actual work."},"id":4314,"name":"nonReentrant","nameLocation":"1092:12:17","nodeType":"ModifierDefinition","parameters":{"id":4305,"nodeType":"ParameterList","parameters":[],"src":"1104:2:17"},"src":"1083:103:17","virtual":false,"visibility":"internal"},{"body":{"id":4332,"nodeType":"Block","src":"1231:310:17","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":4317,"name":"_reentrancyGuardEntered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4358,"src":"1320:23:17","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":4318,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1320:25:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4323,"nodeType":"IfStatement","src":"1316:93:17","trueBody":{"id":4322,"nodeType":"Block","src":"1347:62:17","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4319,"name":"ReentrancyGuardReentrantCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4303,"src":"1368:28:17","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4320,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1368:30:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4321,"nodeType":"RevertStatement","src":"1361:37:17"}]}},{"expression":{"arguments":[{"hexValue":"74727565","id":4329,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1529:4:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4324,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4300,"src":"1484:25:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":4326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1510:9:17","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":4410,"src":"1484:35:17","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$4395_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":4327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1484:37:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4395","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":4328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1522:6:17","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":4505,"src":"1484:44:17","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$4395_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$4395_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":4330,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1484:50:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4331,"nodeType":"ExpressionStatement","src":"1484:50:17"}]},"id":4333,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantBefore","nameLocation":"1201:19:17","nodeType":"FunctionDefinition","parameters":{"id":4315,"nodeType":"ParameterList","parameters":[],"src":"1220:2:17"},"returnParameters":{"id":4316,"nodeType":"ParameterList","parameters":[],"src":"1231:0:17"},"scope":4359,"src":"1192:349:17","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":4344,"nodeType":"Block","src":"1585:68:17","statements":[{"expression":{"arguments":[{"hexValue":"66616c7365","id":4341,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1640:5:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4336,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4300,"src":"1595:25:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":4338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1621:9:17","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":4410,"src":"1595:35:17","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$4395_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":4339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1595:37:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4395","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":4340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1633:6:17","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":4505,"src":"1595:44:17","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$4395_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$4395_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":4342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1595:51:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4343,"nodeType":"ExpressionStatement","src":"1595:51:17"}]},"id":4345,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantAfter","nameLocation":"1556:18:17","nodeType":"FunctionDefinition","parameters":{"id":4334,"nodeType":"ParameterList","parameters":[],"src":"1574:2:17"},"returnParameters":{"id":4335,"nodeType":"ParameterList","parameters":[],"src":"1585:0:17"},"scope":4359,"src":"1547:106:17","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":4357,"nodeType":"Block","src":"1896:69:17","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":4351,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4300,"src":"1913:25:17","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":4352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1939:9:17","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":4410,"src":"1913:35:17","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$4395_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":4353,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1913:37:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4395","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":4354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1951:5:17","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":4494,"src":"1913:43:17","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_BooleanSlotType_$4395_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_BooleanSlotType_$4395_$","typeString":"function (StorageSlotExtension.BooleanSlotType) view returns (bool)"}},"id":4355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1913:45:17","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":4350,"id":4356,"nodeType":"Return","src":"1906:52:17"}]},"documentation":{"id":4346,"nodeType":"StructuredDocumentation","src":"1659:168:17","text":" @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n `nonReentrant` function in the call stack."},"id":4358,"implemented":true,"kind":"function","modifiers":[],"name":"_reentrancyGuardEntered","nameLocation":"1841:23:17","nodeType":"FunctionDefinition","parameters":{"id":4347,"nodeType":"ParameterList","parameters":[],"src":"1864:2:17"},"returnParameters":{"id":4350,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4349,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4358,"src":"1890:4:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4348,"name":"bool","nodeType":"ElementaryTypeName","src":"1890:4:17","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1889:6:17"},"scope":4359,"src":"1832:133:17","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":4360,"src":"283:1684:17","usedErrors":[4303],"usedEvents":[]}],"src":"33:1935:17"},"id":17},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","exportedSymbols":{"StorageSlotExtension":[4572]},"id":4573,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":4361,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:18"},{"abstract":false,"baseContracts":[],"canonicalName":"StorageSlotExtension","contractDependencies":[],"contractKind":"library","documentation":{"id":4362,"nodeType":"StructuredDocumentation","src":"59:218:18","text":" @notice Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\n @dev TIP: Consider using this library along with {SlotDerivation}."},"fullyImplemented":true,"id":4572,"linearizedBaseContracts":[4572],"name":"StorageSlotExtension","nameLocation":"286:20:18","nodeType":"ContractDefinition","nodes":[{"canonicalName":"StorageSlotExtension.Int256Slot","id":4365,"members":[{"constant":false,"id":4364,"mutability":"mutable","name":"value","nameLocation":"348:5:18","nodeType":"VariableDeclaration","scope":4365,"src":"341:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4363,"name":"int256","nodeType":"ElementaryTypeName","src":"341:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"name":"Int256Slot","nameLocation":"320:10:18","nodeType":"StructDefinition","scope":4572,"src":"313:47:18","visibility":"public"},{"body":{"id":4375,"nodeType":"Block","src":"524:106:18","statements":[{"AST":{"nativeSrc":"586:38:18","nodeType":"YulBlock","src":"586:38:18","statements":[{"nativeSrc":"600:14:18","nodeType":"YulAssignment","src":"600:14:18","value":{"name":"slot","nativeSrc":"610:4:18","nodeType":"YulIdentifier","src":"610:4:18"},"variableNames":[{"name":"r.slot","nativeSrc":"600:6:18","nodeType":"YulIdentifier","src":"600:6:18"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4372,"isOffset":false,"isSlot":true,"src":"600:6:18","suffix":"slot","valueSize":1},{"declaration":4368,"isOffset":false,"isSlot":false,"src":"610:4:18","valueSize":1}],"id":4374,"nodeType":"InlineAssembly","src":"577:47:18"}]},"documentation":{"id":4366,"nodeType":"StructuredDocumentation","src":"366:71:18","text":"@dev Returns an `Int256Slot` with member `value` located at `slot`."},"id":4376,"implemented":true,"kind":"function","modifiers":[],"name":"getInt256Slot","nameLocation":"451:13:18","nodeType":"FunctionDefinition","parameters":{"id":4369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4368,"mutability":"mutable","name":"slot","nameLocation":"473:4:18","nodeType":"VariableDeclaration","scope":4376,"src":"465:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4367,"name":"bytes32","nodeType":"ElementaryTypeName","src":"465:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"464:14:18"},"returnParameters":{"id":4373,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4372,"mutability":"mutable","name":"r","nameLocation":"521:1:18","nodeType":"VariableDeclaration","scope":4376,"src":"502:20:18","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$4365_storage_ptr","typeString":"struct StorageSlotExtension.Int256Slot"},"typeName":{"id":4371,"nodeType":"UserDefinedTypeName","pathNode":{"id":4370,"name":"Int256Slot","nameLocations":["502:10:18"],"nodeType":"IdentifierPath","referencedDeclaration":4365,"src":"502:10:18"},"referencedDeclaration":4365,"src":"502:10:18","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$4365_storage_ptr","typeString":"struct StorageSlotExtension.Int256Slot"}},"visibility":"internal"}],"src":"501:22:18"},"scope":4572,"src":"442:188:18","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.AddressSlotType","id":4378,"name":"AddressSlotType","nameLocation":"709:15:18","nodeType":"UserDefinedValueTypeDefinition","src":"704:32:18","underlyingType":{"id":4377,"name":"bytes32","nodeType":"ElementaryTypeName","src":"728:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":4392,"nodeType":"Block","src":"873:50:18","statements":[{"expression":{"arguments":[{"id":4389,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4381,"src":"911:4:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4387,"name":"AddressSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4378,"src":"890:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressSlotType_$4378_$","typeString":"type(StorageSlotExtension.AddressSlotType)"}},"id":4388,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"906:4:18","memberName":"wrap","nodeType":"MemberAccess","src":"890:20:18","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_AddressSlotType_$4378_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.AddressSlotType)"}},"id":4390,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"890:26:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$4378","typeString":"StorageSlotExtension.AddressSlotType"}},"functionReturnParameters":4386,"id":4391,"nodeType":"Return","src":"883:33:18"}]},"documentation":{"id":4379,"nodeType":"StructuredDocumentation","src":"742:53:18","text":"@dev Cast an arbitrary slot to a AddressSlotType."},"id":4393,"implemented":true,"kind":"function","modifiers":[],"name":"asAddress","nameLocation":"809:9:18","nodeType":"FunctionDefinition","parameters":{"id":4382,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4381,"mutability":"mutable","name":"slot","nameLocation":"827:4:18","nodeType":"VariableDeclaration","scope":4393,"src":"819:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4380,"name":"bytes32","nodeType":"ElementaryTypeName","src":"819:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"818:14:18"},"returnParameters":{"id":4386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4385,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4393,"src":"856:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$4378","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":4384,"nodeType":"UserDefinedTypeName","pathNode":{"id":4383,"name":"AddressSlotType","nameLocations":["856:15:18"],"nodeType":"IdentifierPath","referencedDeclaration":4378,"src":"856:15:18"},"referencedDeclaration":4378,"src":"856:15:18","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$4378","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"}],"src":"855:17:18"},"scope":4572,"src":"800:123:18","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.BooleanSlotType","id":4395,"name":"BooleanSlotType","nameLocation":"1001:15:18","nodeType":"UserDefinedValueTypeDefinition","src":"996:32:18","underlyingType":{"id":4394,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1020:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":4409,"nodeType":"Block","src":"1165:50:18","statements":[{"expression":{"arguments":[{"id":4406,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4398,"src":"1203:4:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4404,"name":"BooleanSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4395,"src":"1182:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_BooleanSlotType_$4395_$","typeString":"type(StorageSlotExtension.BooleanSlotType)"}},"id":4405,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1198:4:18","memberName":"wrap","nodeType":"MemberAccess","src":"1182:20:18","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$4395_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":4407,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1182:26:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4395","typeString":"StorageSlotExtension.BooleanSlotType"}},"functionReturnParameters":4403,"id":4408,"nodeType":"Return","src":"1175:33:18"}]},"documentation":{"id":4396,"nodeType":"StructuredDocumentation","src":"1034:53:18","text":"@dev Cast an arbitrary slot to a BooleanSlotType."},"id":4410,"implemented":true,"kind":"function","modifiers":[],"name":"asBoolean","nameLocation":"1101:9:18","nodeType":"FunctionDefinition","parameters":{"id":4399,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4398,"mutability":"mutable","name":"slot","nameLocation":"1119:4:18","nodeType":"VariableDeclaration","scope":4410,"src":"1111:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4397,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1111:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1110:14:18"},"returnParameters":{"id":4403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4402,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4410,"src":"1148:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4395","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":4401,"nodeType":"UserDefinedTypeName","pathNode":{"id":4400,"name":"BooleanSlotType","nameLocations":["1148:15:18"],"nodeType":"IdentifierPath","referencedDeclaration":4395,"src":"1148:15:18"},"referencedDeclaration":4395,"src":"1148:15:18","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4395","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"}],"src":"1147:17:18"},"scope":4572,"src":"1092:123:18","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Bytes32SlotType","id":4412,"name":"Bytes32SlotType","nameLocation":"1293:15:18","nodeType":"UserDefinedValueTypeDefinition","src":"1288:32:18","underlyingType":{"id":4411,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1312:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":4426,"nodeType":"Block","src":"1457:50:18","statements":[{"expression":{"arguments":[{"id":4423,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4415,"src":"1495:4:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4421,"name":"Bytes32SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4412,"src":"1474:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Bytes32SlotType_$4412_$","typeString":"type(StorageSlotExtension.Bytes32SlotType)"}},"id":4422,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1490:4:18","memberName":"wrap","nodeType":"MemberAccess","src":"1474:20:18","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Bytes32SlotType_$4412_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Bytes32SlotType)"}},"id":4424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1474:26:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$4412","typeString":"StorageSlotExtension.Bytes32SlotType"}},"functionReturnParameters":4420,"id":4425,"nodeType":"Return","src":"1467:33:18"}]},"documentation":{"id":4413,"nodeType":"StructuredDocumentation","src":"1326:53:18","text":"@dev Cast an arbitrary slot to a Bytes32SlotType."},"id":4427,"implemented":true,"kind":"function","modifiers":[],"name":"asBytes32","nameLocation":"1393:9:18","nodeType":"FunctionDefinition","parameters":{"id":4416,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4415,"mutability":"mutable","name":"slot","nameLocation":"1411:4:18","nodeType":"VariableDeclaration","scope":4427,"src":"1403:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4414,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1403:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1402:14:18"},"returnParameters":{"id":4420,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4419,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4427,"src":"1440:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$4412","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":4418,"nodeType":"UserDefinedTypeName","pathNode":{"id":4417,"name":"Bytes32SlotType","nameLocations":["1440:15:18"],"nodeType":"IdentifierPath","referencedDeclaration":4412,"src":"1440:15:18"},"referencedDeclaration":4412,"src":"1440:15:18","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$4412","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"}],"src":"1439:17:18"},"scope":4572,"src":"1384:123:18","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Uint256SlotType","id":4429,"name":"Uint256SlotType","nameLocation":"1585:15:18","nodeType":"UserDefinedValueTypeDefinition","src":"1580:32:18","underlyingType":{"id":4428,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1604:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":4443,"nodeType":"Block","src":"1749:50:18","statements":[{"expression":{"arguments":[{"id":4440,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4432,"src":"1787:4:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4438,"name":"Uint256SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4429,"src":"1766:15:18","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Uint256SlotType_$4429_$","typeString":"type(StorageSlotExtension.Uint256SlotType)"}},"id":4439,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1782:4:18","memberName":"wrap","nodeType":"MemberAccess","src":"1766:20:18","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$4429_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":4441,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1766:26:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$4429","typeString":"StorageSlotExtension.Uint256SlotType"}},"functionReturnParameters":4437,"id":4442,"nodeType":"Return","src":"1759:33:18"}]},"documentation":{"id":4430,"nodeType":"StructuredDocumentation","src":"1618:53:18","text":"@dev Cast an arbitrary slot to a Uint256SlotType."},"id":4444,"implemented":true,"kind":"function","modifiers":[],"name":"asUint256","nameLocation":"1685:9:18","nodeType":"FunctionDefinition","parameters":{"id":4433,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4432,"mutability":"mutable","name":"slot","nameLocation":"1703:4:18","nodeType":"VariableDeclaration","scope":4444,"src":"1695:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4431,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1695:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1694:14:18"},"returnParameters":{"id":4437,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4436,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4444,"src":"1732:15:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$4429","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":4435,"nodeType":"UserDefinedTypeName","pathNode":{"id":4434,"name":"Uint256SlotType","nameLocations":["1732:15:18"],"nodeType":"IdentifierPath","referencedDeclaration":4429,"src":"1732:15:18"},"referencedDeclaration":4429,"src":"1732:15:18","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$4429","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"1731:17:18"},"scope":4572,"src":"1676:123:18","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Int256SlotType","id":4446,"name":"Int256SlotType","nameLocation":"1877:14:18","nodeType":"UserDefinedValueTypeDefinition","src":"1872:31:18","underlyingType":{"id":4445,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1895:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":4460,"nodeType":"Block","src":"2038:49:18","statements":[{"expression":{"arguments":[{"id":4457,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4449,"src":"2075:4:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":4455,"name":"Int256SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4446,"src":"2055:14:18","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Int256SlotType_$4446_$","typeString":"type(StorageSlotExtension.Int256SlotType)"}},"id":4456,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2070:4:18","memberName":"wrap","nodeType":"MemberAccess","src":"2055:19:18","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Int256SlotType_$4446_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Int256SlotType)"}},"id":4458,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2055:25:18","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$4446","typeString":"StorageSlotExtension.Int256SlotType"}},"functionReturnParameters":4454,"id":4459,"nodeType":"Return","src":"2048:32:18"}]},"documentation":{"id":4447,"nodeType":"StructuredDocumentation","src":"1909:53:18","text":"@dev Cast an arbitrary slot to an Int256SlotType."},"id":4461,"implemented":true,"kind":"function","modifiers":[],"name":"asInt256","nameLocation":"1976:8:18","nodeType":"FunctionDefinition","parameters":{"id":4450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4449,"mutability":"mutable","name":"slot","nameLocation":"1993:4:18","nodeType":"VariableDeclaration","scope":4461,"src":"1985:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4448,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1985:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1984:14:18"},"returnParameters":{"id":4454,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4453,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4461,"src":"2022:14:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$4446","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":4452,"nodeType":"UserDefinedTypeName","pathNode":{"id":4451,"name":"Int256SlotType","nameLocations":["2022:14:18"],"nodeType":"IdentifierPath","referencedDeclaration":4446,"src":"2022:14:18"},"referencedDeclaration":4446,"src":"2022:14:18","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$4446","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"}],"src":"2021:16:18"},"scope":4572,"src":"1967:120:18","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":4471,"nodeType":"Block","src":"2242:112:18","statements":[{"AST":{"nativeSrc":"2304:44:18","nodeType":"YulBlock","src":"2304:44:18","statements":[{"nativeSrc":"2318:20:18","nodeType":"YulAssignment","src":"2318:20:18","value":{"arguments":[{"name":"slot","nativeSrc":"2333:4:18","nodeType":"YulIdentifier","src":"2333:4:18"}],"functionName":{"name":"tload","nativeSrc":"2327:5:18","nodeType":"YulIdentifier","src":"2327:5:18"},"nativeSrc":"2327:11:18","nodeType":"YulFunctionCall","src":"2327:11:18"},"variableNames":[{"name":"value","nativeSrc":"2318:5:18","nodeType":"YulIdentifier","src":"2318:5:18"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4465,"isOffset":false,"isSlot":false,"src":"2333:4:18","valueSize":1},{"declaration":4468,"isOffset":false,"isSlot":false,"src":"2318:5:18","valueSize":1}],"id":4470,"nodeType":"InlineAssembly","src":"2295:53:18"}]},"documentation":{"id":4462,"nodeType":"StructuredDocumentation","src":"2093:69:18","text":"@dev Load the value held at location `slot` in transient storage."},"id":4472,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"2176:5:18","nodeType":"FunctionDefinition","parameters":{"id":4466,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4465,"mutability":"mutable","name":"slot","nameLocation":"2198:4:18","nodeType":"VariableDeclaration","scope":4472,"src":"2182:20:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$4378","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":4464,"nodeType":"UserDefinedTypeName","pathNode":{"id":4463,"name":"AddressSlotType","nameLocations":["2182:15:18"],"nodeType":"IdentifierPath","referencedDeclaration":4378,"src":"2182:15:18"},"referencedDeclaration":4378,"src":"2182:15:18","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$4378","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"}],"src":"2181:22:18"},"returnParameters":{"id":4469,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4468,"mutability":"mutable","name":"value","nameLocation":"2235:5:18","nodeType":"VariableDeclaration","scope":4472,"src":"2227:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4467,"name":"address","nodeType":"ElementaryTypeName","src":"2227:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2226:15:18"},"scope":4572,"src":"2167:187:18","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":4482,"nodeType":"Block","src":"2490:111:18","statements":[{"AST":{"nativeSrc":"2552:43:18","nodeType":"YulBlock","src":"2552:43:18","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"2573:4:18","nodeType":"YulIdentifier","src":"2573:4:18"},{"name":"value","nativeSrc":"2579:5:18","nodeType":"YulIdentifier","src":"2579:5:18"}],"functionName":{"name":"tstore","nativeSrc":"2566:6:18","nodeType":"YulIdentifier","src":"2566:6:18"},"nativeSrc":"2566:19:18","nodeType":"YulFunctionCall","src":"2566:19:18"},"nativeSrc":"2566:19:18","nodeType":"YulExpressionStatement","src":"2566:19:18"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4476,"isOffset":false,"isSlot":false,"src":"2573:4:18","valueSize":1},{"declaration":4478,"isOffset":false,"isSlot":false,"src":"2579:5:18","valueSize":1}],"id":4481,"nodeType":"InlineAssembly","src":"2543:52:18"}]},"documentation":{"id":4473,"nodeType":"StructuredDocumentation","src":"2360:63:18","text":"@dev Store `value` at location `slot` in transient storage."},"id":4483,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"2437:6:18","nodeType":"FunctionDefinition","parameters":{"id":4479,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4476,"mutability":"mutable","name":"slot","nameLocation":"2460:4:18","nodeType":"VariableDeclaration","scope":4483,"src":"2444:20:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$4378","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":4475,"nodeType":"UserDefinedTypeName","pathNode":{"id":4474,"name":"AddressSlotType","nameLocations":["2444:15:18"],"nodeType":"IdentifierPath","referencedDeclaration":4378,"src":"2444:15:18"},"referencedDeclaration":4378,"src":"2444:15:18","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$4378","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"},{"constant":false,"id":4478,"mutability":"mutable","name":"value","nameLocation":"2474:5:18","nodeType":"VariableDeclaration","scope":4483,"src":"2466:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4477,"name":"address","nodeType":"ElementaryTypeName","src":"2466:7:18","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2443:37:18"},"returnParameters":{"id":4480,"nodeType":"ParameterList","parameters":[],"src":"2490:0:18"},"scope":4572,"src":"2428:173:18","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4493,"nodeType":"Block","src":"2753:112:18","statements":[{"AST":{"nativeSrc":"2815:44:18","nodeType":"YulBlock","src":"2815:44:18","statements":[{"nativeSrc":"2829:20:18","nodeType":"YulAssignment","src":"2829:20:18","value":{"arguments":[{"name":"slot","nativeSrc":"2844:4:18","nodeType":"YulIdentifier","src":"2844:4:18"}],"functionName":{"name":"tload","nativeSrc":"2838:5:18","nodeType":"YulIdentifier","src":"2838:5:18"},"nativeSrc":"2838:11:18","nodeType":"YulFunctionCall","src":"2838:11:18"},"variableNames":[{"name":"value","nativeSrc":"2829:5:18","nodeType":"YulIdentifier","src":"2829:5:18"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4487,"isOffset":false,"isSlot":false,"src":"2844:4:18","valueSize":1},{"declaration":4490,"isOffset":false,"isSlot":false,"src":"2829:5:18","valueSize":1}],"id":4492,"nodeType":"InlineAssembly","src":"2806:53:18"}]},"documentation":{"id":4484,"nodeType":"StructuredDocumentation","src":"2607:69:18","text":"@dev Load the value held at location `slot` in transient storage."},"id":4494,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"2690:5:18","nodeType":"FunctionDefinition","parameters":{"id":4488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4487,"mutability":"mutable","name":"slot","nameLocation":"2712:4:18","nodeType":"VariableDeclaration","scope":4494,"src":"2696:20:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4395","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":4486,"nodeType":"UserDefinedTypeName","pathNode":{"id":4485,"name":"BooleanSlotType","nameLocations":["2696:15:18"],"nodeType":"IdentifierPath","referencedDeclaration":4395,"src":"2696:15:18"},"referencedDeclaration":4395,"src":"2696:15:18","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4395","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"}],"src":"2695:22:18"},"returnParameters":{"id":4491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4490,"mutability":"mutable","name":"value","nameLocation":"2746:5:18","nodeType":"VariableDeclaration","scope":4494,"src":"2741:10:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4489,"name":"bool","nodeType":"ElementaryTypeName","src":"2741:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2740:12:18"},"scope":4572,"src":"2681:184:18","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":4504,"nodeType":"Block","src":"2998:111:18","statements":[{"AST":{"nativeSrc":"3060:43:18","nodeType":"YulBlock","src":"3060:43:18","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"3081:4:18","nodeType":"YulIdentifier","src":"3081:4:18"},{"name":"value","nativeSrc":"3087:5:18","nodeType":"YulIdentifier","src":"3087:5:18"}],"functionName":{"name":"tstore","nativeSrc":"3074:6:18","nodeType":"YulIdentifier","src":"3074:6:18"},"nativeSrc":"3074:19:18","nodeType":"YulFunctionCall","src":"3074:19:18"},"nativeSrc":"3074:19:18","nodeType":"YulExpressionStatement","src":"3074:19:18"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4498,"isOffset":false,"isSlot":false,"src":"3081:4:18","valueSize":1},{"declaration":4500,"isOffset":false,"isSlot":false,"src":"3087:5:18","valueSize":1}],"id":4503,"nodeType":"InlineAssembly","src":"3051:52:18"}]},"documentation":{"id":4495,"nodeType":"StructuredDocumentation","src":"2871:63:18","text":"@dev Store `value` at location `slot` in transient storage."},"id":4505,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"2948:6:18","nodeType":"FunctionDefinition","parameters":{"id":4501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4498,"mutability":"mutable","name":"slot","nameLocation":"2971:4:18","nodeType":"VariableDeclaration","scope":4505,"src":"2955:20:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4395","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":4497,"nodeType":"UserDefinedTypeName","pathNode":{"id":4496,"name":"BooleanSlotType","nameLocations":["2955:15:18"],"nodeType":"IdentifierPath","referencedDeclaration":4395,"src":"2955:15:18"},"referencedDeclaration":4395,"src":"2955:15:18","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$4395","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"},{"constant":false,"id":4500,"mutability":"mutable","name":"value","nameLocation":"2982:5:18","nodeType":"VariableDeclaration","scope":4505,"src":"2977:10:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4499,"name":"bool","nodeType":"ElementaryTypeName","src":"2977:4:18","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2954:34:18"},"returnParameters":{"id":4502,"nodeType":"ParameterList","parameters":[],"src":"2998:0:18"},"scope":4572,"src":"2939:170:18","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4515,"nodeType":"Block","src":"3264:112:18","statements":[{"AST":{"nativeSrc":"3326:44:18","nodeType":"YulBlock","src":"3326:44:18","statements":[{"nativeSrc":"3340:20:18","nodeType":"YulAssignment","src":"3340:20:18","value":{"arguments":[{"name":"slot","nativeSrc":"3355:4:18","nodeType":"YulIdentifier","src":"3355:4:18"}],"functionName":{"name":"tload","nativeSrc":"3349:5:18","nodeType":"YulIdentifier","src":"3349:5:18"},"nativeSrc":"3349:11:18","nodeType":"YulFunctionCall","src":"3349:11:18"},"variableNames":[{"name":"value","nativeSrc":"3340:5:18","nodeType":"YulIdentifier","src":"3340:5:18"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4509,"isOffset":false,"isSlot":false,"src":"3355:4:18","valueSize":1},{"declaration":4512,"isOffset":false,"isSlot":false,"src":"3340:5:18","valueSize":1}],"id":4514,"nodeType":"InlineAssembly","src":"3317:53:18"}]},"documentation":{"id":4506,"nodeType":"StructuredDocumentation","src":"3115:69:18","text":"@dev Load the value held at location `slot` in transient storage."},"id":4516,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"3198:5:18","nodeType":"FunctionDefinition","parameters":{"id":4510,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4509,"mutability":"mutable","name":"slot","nameLocation":"3220:4:18","nodeType":"VariableDeclaration","scope":4516,"src":"3204:20:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$4412","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":4508,"nodeType":"UserDefinedTypeName","pathNode":{"id":4507,"name":"Bytes32SlotType","nameLocations":["3204:15:18"],"nodeType":"IdentifierPath","referencedDeclaration":4412,"src":"3204:15:18"},"referencedDeclaration":4412,"src":"3204:15:18","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$4412","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"}],"src":"3203:22:18"},"returnParameters":{"id":4513,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4512,"mutability":"mutable","name":"value","nameLocation":"3257:5:18","nodeType":"VariableDeclaration","scope":4516,"src":"3249:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4511,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3249:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3248:15:18"},"scope":4572,"src":"3189:187:18","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":4526,"nodeType":"Block","src":"3512:111:18","statements":[{"AST":{"nativeSrc":"3574:43:18","nodeType":"YulBlock","src":"3574:43:18","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"3595:4:18","nodeType":"YulIdentifier","src":"3595:4:18"},{"name":"value","nativeSrc":"3601:5:18","nodeType":"YulIdentifier","src":"3601:5:18"}],"functionName":{"name":"tstore","nativeSrc":"3588:6:18","nodeType":"YulIdentifier","src":"3588:6:18"},"nativeSrc":"3588:19:18","nodeType":"YulFunctionCall","src":"3588:19:18"},"nativeSrc":"3588:19:18","nodeType":"YulExpressionStatement","src":"3588:19:18"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4520,"isOffset":false,"isSlot":false,"src":"3595:4:18","valueSize":1},{"declaration":4522,"isOffset":false,"isSlot":false,"src":"3601:5:18","valueSize":1}],"id":4525,"nodeType":"InlineAssembly","src":"3565:52:18"}]},"documentation":{"id":4517,"nodeType":"StructuredDocumentation","src":"3382:63:18","text":"@dev Store `value` at location `slot` in transient storage."},"id":4527,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"3459:6:18","nodeType":"FunctionDefinition","parameters":{"id":4523,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4520,"mutability":"mutable","name":"slot","nameLocation":"3482:4:18","nodeType":"VariableDeclaration","scope":4527,"src":"3466:20:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$4412","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":4519,"nodeType":"UserDefinedTypeName","pathNode":{"id":4518,"name":"Bytes32SlotType","nameLocations":["3466:15:18"],"nodeType":"IdentifierPath","referencedDeclaration":4412,"src":"3466:15:18"},"referencedDeclaration":4412,"src":"3466:15:18","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$4412","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"},{"constant":false,"id":4522,"mutability":"mutable","name":"value","nameLocation":"3496:5:18","nodeType":"VariableDeclaration","scope":4527,"src":"3488:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4521,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3488:7:18","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3465:37:18"},"returnParameters":{"id":4524,"nodeType":"ParameterList","parameters":[],"src":"3512:0:18"},"scope":4572,"src":"3450:173:18","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4537,"nodeType":"Block","src":"3778:112:18","statements":[{"AST":{"nativeSrc":"3840:44:18","nodeType":"YulBlock","src":"3840:44:18","statements":[{"nativeSrc":"3854:20:18","nodeType":"YulAssignment","src":"3854:20:18","value":{"arguments":[{"name":"slot","nativeSrc":"3869:4:18","nodeType":"YulIdentifier","src":"3869:4:18"}],"functionName":{"name":"tload","nativeSrc":"3863:5:18","nodeType":"YulIdentifier","src":"3863:5:18"},"nativeSrc":"3863:11:18","nodeType":"YulFunctionCall","src":"3863:11:18"},"variableNames":[{"name":"value","nativeSrc":"3854:5:18","nodeType":"YulIdentifier","src":"3854:5:18"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4531,"isOffset":false,"isSlot":false,"src":"3869:4:18","valueSize":1},{"declaration":4534,"isOffset":false,"isSlot":false,"src":"3854:5:18","valueSize":1}],"id":4536,"nodeType":"InlineAssembly","src":"3831:53:18"}]},"documentation":{"id":4528,"nodeType":"StructuredDocumentation","src":"3629:69:18","text":"@dev Load the value held at location `slot` in transient storage."},"id":4538,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"3712:5:18","nodeType":"FunctionDefinition","parameters":{"id":4532,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4531,"mutability":"mutable","name":"slot","nameLocation":"3734:4:18","nodeType":"VariableDeclaration","scope":4538,"src":"3718:20:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$4429","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":4530,"nodeType":"UserDefinedTypeName","pathNode":{"id":4529,"name":"Uint256SlotType","nameLocations":["3718:15:18"],"nodeType":"IdentifierPath","referencedDeclaration":4429,"src":"3718:15:18"},"referencedDeclaration":4429,"src":"3718:15:18","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$4429","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"3717:22:18"},"returnParameters":{"id":4535,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4534,"mutability":"mutable","name":"value","nameLocation":"3771:5:18","nodeType":"VariableDeclaration","scope":4538,"src":"3763:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4533,"name":"uint256","nodeType":"ElementaryTypeName","src":"3763:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3762:15:18"},"scope":4572,"src":"3703:187:18","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":4548,"nodeType":"Block","src":"4026:111:18","statements":[{"AST":{"nativeSrc":"4088:43:18","nodeType":"YulBlock","src":"4088:43:18","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"4109:4:18","nodeType":"YulIdentifier","src":"4109:4:18"},{"name":"value","nativeSrc":"4115:5:18","nodeType":"YulIdentifier","src":"4115:5:18"}],"functionName":{"name":"tstore","nativeSrc":"4102:6:18","nodeType":"YulIdentifier","src":"4102:6:18"},"nativeSrc":"4102:19:18","nodeType":"YulFunctionCall","src":"4102:19:18"},"nativeSrc":"4102:19:18","nodeType":"YulExpressionStatement","src":"4102:19:18"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4542,"isOffset":false,"isSlot":false,"src":"4109:4:18","valueSize":1},{"declaration":4544,"isOffset":false,"isSlot":false,"src":"4115:5:18","valueSize":1}],"id":4547,"nodeType":"InlineAssembly","src":"4079:52:18"}]},"documentation":{"id":4539,"nodeType":"StructuredDocumentation","src":"3896:63:18","text":"@dev Store `value` at location `slot` in transient storage."},"id":4549,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"3973:6:18","nodeType":"FunctionDefinition","parameters":{"id":4545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4542,"mutability":"mutable","name":"slot","nameLocation":"3996:4:18","nodeType":"VariableDeclaration","scope":4549,"src":"3980:20:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$4429","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":4541,"nodeType":"UserDefinedTypeName","pathNode":{"id":4540,"name":"Uint256SlotType","nameLocations":["3980:15:18"],"nodeType":"IdentifierPath","referencedDeclaration":4429,"src":"3980:15:18"},"referencedDeclaration":4429,"src":"3980:15:18","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$4429","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"},{"constant":false,"id":4544,"mutability":"mutable","name":"value","nameLocation":"4010:5:18","nodeType":"VariableDeclaration","scope":4549,"src":"4002:13:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4543,"name":"uint256","nodeType":"ElementaryTypeName","src":"4002:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3979:37:18"},"returnParameters":{"id":4546,"nodeType":"ParameterList","parameters":[],"src":"4026:0:18"},"scope":4572,"src":"3964:173:18","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":4559,"nodeType":"Block","src":"4290:112:18","statements":[{"AST":{"nativeSrc":"4352:44:18","nodeType":"YulBlock","src":"4352:44:18","statements":[{"nativeSrc":"4366:20:18","nodeType":"YulAssignment","src":"4366:20:18","value":{"arguments":[{"name":"slot","nativeSrc":"4381:4:18","nodeType":"YulIdentifier","src":"4381:4:18"}],"functionName":{"name":"tload","nativeSrc":"4375:5:18","nodeType":"YulIdentifier","src":"4375:5:18"},"nativeSrc":"4375:11:18","nodeType":"YulFunctionCall","src":"4375:11:18"},"variableNames":[{"name":"value","nativeSrc":"4366:5:18","nodeType":"YulIdentifier","src":"4366:5:18"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4553,"isOffset":false,"isSlot":false,"src":"4381:4:18","valueSize":1},{"declaration":4556,"isOffset":false,"isSlot":false,"src":"4366:5:18","valueSize":1}],"id":4558,"nodeType":"InlineAssembly","src":"4343:53:18"}]},"documentation":{"id":4550,"nodeType":"StructuredDocumentation","src":"4143:69:18","text":"@dev Load the value held at location `slot` in transient storage."},"id":4560,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"4226:5:18","nodeType":"FunctionDefinition","parameters":{"id":4554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4553,"mutability":"mutable","name":"slot","nameLocation":"4247:4:18","nodeType":"VariableDeclaration","scope":4560,"src":"4232:19:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$4446","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":4552,"nodeType":"UserDefinedTypeName","pathNode":{"id":4551,"name":"Int256SlotType","nameLocations":["4232:14:18"],"nodeType":"IdentifierPath","referencedDeclaration":4446,"src":"4232:14:18"},"referencedDeclaration":4446,"src":"4232:14:18","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$4446","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"}],"src":"4231:21:18"},"returnParameters":{"id":4557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4556,"mutability":"mutable","name":"value","nameLocation":"4283:5:18","nodeType":"VariableDeclaration","scope":4560,"src":"4276:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4555,"name":"int256","nodeType":"ElementaryTypeName","src":"4276:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4275:14:18"},"scope":4572,"src":"4217:185:18","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":4570,"nodeType":"Block","src":"4536:111:18","statements":[{"AST":{"nativeSrc":"4598:43:18","nodeType":"YulBlock","src":"4598:43:18","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"4619:4:18","nodeType":"YulIdentifier","src":"4619:4:18"},{"name":"value","nativeSrc":"4625:5:18","nodeType":"YulIdentifier","src":"4625:5:18"}],"functionName":{"name":"tstore","nativeSrc":"4612:6:18","nodeType":"YulIdentifier","src":"4612:6:18"},"nativeSrc":"4612:19:18","nodeType":"YulFunctionCall","src":"4612:19:18"},"nativeSrc":"4612:19:18","nodeType":"YulExpressionStatement","src":"4612:19:18"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":4564,"isOffset":false,"isSlot":false,"src":"4619:4:18","valueSize":1},{"declaration":4566,"isOffset":false,"isSlot":false,"src":"4625:5:18","valueSize":1}],"id":4569,"nodeType":"InlineAssembly","src":"4589:52:18"}]},"documentation":{"id":4561,"nodeType":"StructuredDocumentation","src":"4408:63:18","text":"@dev Store `value` at location `slot` in transient storage."},"id":4571,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"4485:6:18","nodeType":"FunctionDefinition","parameters":{"id":4567,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4564,"mutability":"mutable","name":"slot","nameLocation":"4507:4:18","nodeType":"VariableDeclaration","scope":4571,"src":"4492:19:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$4446","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":4563,"nodeType":"UserDefinedTypeName","pathNode":{"id":4562,"name":"Int256SlotType","nameLocations":["4492:14:18"],"nodeType":"IdentifierPath","referencedDeclaration":4446,"src":"4492:14:18"},"referencedDeclaration":4446,"src":"4492:14:18","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$4446","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"},{"constant":false,"id":4566,"mutability":"mutable","name":"value","nameLocation":"4520:5:18","nodeType":"VariableDeclaration","scope":4571,"src":"4513:12:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4565,"name":"int256","nodeType":"ElementaryTypeName","src":"4513:6:18","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4491:35:18"},"returnParameters":{"id":4568,"nodeType":"ParameterList","parameters":[],"src":"4536:0:18"},"scope":4572,"src":"4476:171:18","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":4573,"src":"278:4371:18","usedErrors":[],"usedEvents":[]}],"src":"33:4617:18"},"id":18},"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","exportedSymbols":{"FEE_SCALING_FACTOR":[2408],"FixedPoint":[2934],"IERC20":[6591],"IProtocolFeeController":[613],"IVault":[651],"IVaultErrors":[1308],"MAX_FEE_PERCENTAGE":[2411],"PoolRoleAccounts":[2217],"ProtocolFeeController":[6235],"ReentrancyGuardTransient":[4359],"SafeCast":[8951],"SafeERC20":[6943],"SingletonAuthentication":[6294],"VaultGuard":[6343]},"id":6236,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4574,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:19"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":4576,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6236,"sourceUnit":6944,"src":"72:84:19","symbolAliases":[{"foreign":{"id":4575,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6943,"src":"81:9:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":4578,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6236,"sourceUnit":8952,"src":"157:75:19","symbolAliases":[{"foreign":{"id":4577,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8951,"src":"166:8:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":4580,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6236,"sourceUnit":6592,"src":"233:72:19","symbolAliases":[{"foreign":{"id":4579,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6591,"src":"242:6:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":4582,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6236,"sourceUnit":614,"src":"307:113:19","symbolAliases":[{"foreign":{"id":4581,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":613,"src":"316:22:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":4584,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6236,"sourceUnit":1309,"src":"421:93:19","symbolAliases":[{"foreign":{"id":4583,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1308,"src":"430:12:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":4586,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6236,"sourceUnit":652,"src":"515:81:19","symbolAliases":[{"foreign":{"id":4585,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":651,"src":"524:6:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":4590,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6236,"sourceUnit":2412,"src":"597:147:19","symbolAliases":[{"foreign":{"id":4587,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2408,"src":"610:18:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":4588,"name":"MAX_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2411,"src":"634:18:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":4589,"name":"PoolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2217,"src":"658:16:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":4592,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6236,"sourceUnit":4360,"src":"746:132:19","symbolAliases":[{"foreign":{"id":4591,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4359,"src":"759:24:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":4594,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6236,"sourceUnit":2935,"src":"879:92:19","symbolAliases":[{"foreign":{"id":4593,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2934,"src":"888:10:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"./SingletonAuthentication.sol","id":4596,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6236,"sourceUnit":6295,"src":"973:72:19","symbolAliases":[{"foreign":{"id":4595,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6294,"src":"982:23:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","file":"./VaultGuard.sol","id":4598,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6236,"sourceUnit":6344,"src":"1046:46:19","symbolAliases":[{"foreign":{"id":4597,"name":"VaultGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6343,"src":"1055:10:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":4600,"name":"IProtocolFeeController","nameLocations":["3158:22:19"],"nodeType":"IdentifierPath","referencedDeclaration":613,"src":"3158:22:19"},"id":4601,"nodeType":"InheritanceSpecifier","src":"3158:22:19"},{"baseName":{"id":4602,"name":"SingletonAuthentication","nameLocations":["3186:23:19"],"nodeType":"IdentifierPath","referencedDeclaration":6294,"src":"3186:23:19"},"id":4603,"nodeType":"InheritanceSpecifier","src":"3186:23:19"},{"baseName":{"id":4604,"name":"ReentrancyGuardTransient","nameLocations":["3215:24:19"],"nodeType":"IdentifierPath","referencedDeclaration":4359,"src":"3215:24:19"},"id":4605,"nodeType":"InheritanceSpecifier","src":"3215:24:19"},{"baseName":{"id":4606,"name":"VaultGuard","nameLocations":["3245:10:19"],"nodeType":"IdentifierPath","referencedDeclaration":6343,"src":"3245:10:19"},"id":4607,"nodeType":"InheritanceSpecifier","src":"3245:10:19"}],"canonicalName":"ProtocolFeeController","contractDependencies":[],"contractKind":"contract","documentation":{"id":4599,"nodeType":"StructuredDocumentation","src":"1094:2025:19","text":" @notice Helper contract to manage protocol and creator fees outside the Vault.\n @dev This contract stores global default protocol swap and yield fees, and also tracks the values of those fees\n for each pool (the `PoolFeeConfig` described below). Protocol fees can always be overwritten by governance, but\n pool creator fees are controlled by the registered poolCreator (see `PoolRoleAccounts`).\n The Vault stores a single aggregate percentage for swap and yield fees; only this `ProtocolFeeController` knows\n the component fee percentages, and how to compute the aggregate from the components. This is done for performance\n reasons, to minimize gas on the critical path, as this way the Vault simply applies a single \"cut\", and stores the\n fee amounts separately from the pool balances.\n The pool creator fees are \"net\" protocol fees, meaning the protocol fee is taken first, and the pool creator fee\n percentage is applied to the remainder. Essentially, the protocol is paid first, then the remainder is divided\n between the pool creator and the LPs.\n There is a permissionless function (`collectAggregateFees`) that transfers these tokens from the Vault to this\n contract, and distributes them between the protocol and pool creator, after which they can be withdrawn at any\n time by governance and the pool creator, respectively.\n Protocol fees can be zero in some cases (e.g., the token is registered as exempt), and pool creator fees are zero\n if there is no creator role address defined. Protocol fees are capped at a maximum percentage (50%); pool creator\n fees are computed \"net\" protocol fees, so they can be any value from 0 to 100%. Any combination is possible.\n A protocol-fee-exempt pool with a 100% pool creator fee would send all fees to the creator. If there is no pool\n creator, a pool with a 50% protocol fee would divide the fees evenly between the protocol and LPs.\n This contract is deployed with the Vault, but can be changed by governance."},"fullyImplemented":true,"id":6235,"linearizedBaseContracts":[6235,6343,4359,6294,2635,2491,47,613],"name":"ProtocolFeeController","nameLocation":"3129:21:19","nodeType":"ContractDefinition","nodes":[{"global":false,"id":4610,"libraryName":{"id":4608,"name":"FixedPoint","nameLocations":["3268:10:19"],"nodeType":"IdentifierPath","referencedDeclaration":2934,"src":"3268:10:19"},"nodeType":"UsingForDirective","src":"3262:29:19","typeName":{"id":4609,"name":"uint256","nodeType":"ElementaryTypeName","src":"3283:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":4614,"libraryName":{"id":4611,"name":"SafeERC20","nameLocations":["3302:9:19"],"nodeType":"IdentifierPath","referencedDeclaration":6943,"src":"3302:9:19"},"nodeType":"UsingForDirective","src":"3296:27:19","typeName":{"id":4613,"nodeType":"UserDefinedTypeName","pathNode":{"id":4612,"name":"IERC20","nameLocations":["3316:6:19"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"3316:6:19"},"referencedDeclaration":6591,"src":"3316:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}}},{"global":false,"id":4616,"libraryName":{"id":4615,"name":"SafeCast","nameLocations":["3334:8:19"],"nodeType":"IdentifierPath","referencedDeclaration":8951,"src":"3334:8:19"},"nodeType":"UsingForDirective","src":"3328:21:19"},{"canonicalName":"ProtocolFeeController.ProtocolFeeType","id":4619,"members":[{"id":4617,"name":"SWAP","nameLocation":"3386:4:19","nodeType":"EnumValue","src":"3386:4:19"},{"id":4618,"name":"YIELD","nameLocation":"3400:5:19","nodeType":"EnumValue","src":"3400:5:19"}],"name":"ProtocolFeeType","nameLocation":"3360:15:19","nodeType":"EnumDefinition","src":"3355:56:19"},{"canonicalName":"ProtocolFeeController.PoolFeeConfig","documentation":{"id":4620,"nodeType":"StructuredDocumentation","src":"3417:1063:19","text":" @notice Fee configuration stored in the swap and yield fee mappings.\n @dev Instead of storing only the fee in the mapping, also store a flag to indicate whether the fee has been\n set by governance through a permissioned call. (The fee is stored in 64-bits, so that the struct fits\n within a single slot.)\n We know the percentage is an 18-decimal FP value, which only takes 60 bits, so it's guaranteed to fit,\n and we can do simple casts to truncate the high bits without needed SafeCast.\n We want to enable permissionless updates for pools, so that it is less onerous to update potentially\n hundreds of pools if the global protocol fees change. However, we don't want to overwrite pools that\n have had their fee percentages manually set by the DAO (i.e., after off-chain negotiation and agreement).\n @param feePercentage The raw swap or yield fee percentage\n @param isOverride When set, this fee is controlled by governance, and cannot be changed permissionlessly"},"id":4625,"members":[{"constant":false,"id":4622,"mutability":"mutable","name":"feePercentage","nameLocation":"4523:13:19","nodeType":"VariableDeclaration","scope":4625,"src":"4516:20:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":4621,"name":"uint64","nodeType":"ElementaryTypeName","src":"4516:6:19","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":4624,"mutability":"mutable","name":"isOverride","nameLocation":"4551:10:19","nodeType":"VariableDeclaration","scope":4625,"src":"4546:15:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4623,"name":"bool","nodeType":"ElementaryTypeName","src":"4546:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"PoolFeeConfig","nameLocation":"4492:13:19","nodeType":"StructDefinition","scope":6235,"src":"4485:83:19","visibility":"public"},{"constant":true,"functionSelector":"2772d156","id":4628,"mutability":"constant","name":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","nameLocation":"4685:32:19","nodeType":"VariableDeclaration","scope":6235,"src":"4661:64:19","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4626,"name":"uint256","nodeType":"ElementaryTypeName","src":"4661:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3530653136","id":4627,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4720:5:19","typeDescriptions":{"typeIdentifier":"t_rational_500000000000000000_by_1","typeString":"int_const 500000000000000000"},"value":"50e16"},"visibility":"public"},{"constant":true,"functionSelector":"5e32e4e8","id":4631,"mutability":"constant","name":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","nameLocation":"4809:33:19","nodeType":"VariableDeclaration","scope":6235,"src":"4785:65:19","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4629,"name":"uint256","nodeType":"ElementaryTypeName","src":"4785:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3530653136","id":4630,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4845:5:19","typeDescriptions":{"typeIdentifier":"t_rational_500000000000000000_by_1","typeString":"int_const 500000000000000000"},"value":"50e16"},"visibility":"public"},{"constant":true,"functionSelector":"2e1d388d","id":4634,"mutability":"constant","name":"MAX_CREATOR_FEE_PERCENTAGE","nameLocation":"4946:26:19","nodeType":"VariableDeclaration","scope":6235,"src":"4922:62:19","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4632,"name":"uint256","nodeType":"ElementaryTypeName","src":"4922:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"39392e393939653136","id":4633,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4975:9:19","typeDescriptions":{"typeIdentifier":"t_rational_999990000000000000_by_1","typeString":"int_const 999990000000000000"},"value":"99.999e16"},"visibility":"public"},{"constant":false,"id":4636,"mutability":"mutable","name":"_globalProtocolSwapFeePercentage","nameLocation":"5051:32:19","nodeType":"VariableDeclaration","scope":6235,"src":"5035:48:19","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4635,"name":"uint256","nodeType":"ElementaryTypeName","src":"5035:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":4638,"mutability":"mutable","name":"_globalProtocolYieldFeePercentage","nameLocation":"5140:33:19","nodeType":"VariableDeclaration","scope":6235,"src":"5124:49:19","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4637,"name":"uint256","nodeType":"ElementaryTypeName","src":"5124:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":4643,"mutability":"mutable","name":"_poolProtocolSwapFeePercentages","nameLocation":"5356:31:19","nodeType":"VariableDeclaration","scope":6235,"src":"5294:93:19","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4625_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"typeName":{"id":4642,"keyName":"pool","keyNameLocation":"5310:4:19","keyType":{"id":4639,"name":"address","nodeType":"ElementaryTypeName","src":"5302:7:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5294:52:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4625_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"valueName":"swapFeeConfig","valueNameLocation":"5332:13:19","valueType":{"id":4641,"nodeType":"UserDefinedTypeName","pathNode":{"id":4640,"name":"PoolFeeConfig","nameLocations":["5318:13:19"],"nodeType":"IdentifierPath","referencedDeclaration":4625,"src":"5318:13:19"},"referencedDeclaration":4625,"src":"5318:13:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}}},"visibility":"internal"},{"constant":false,"id":4648,"mutability":"mutable","name":"_poolProtocolYieldFeePercentages","nameLocation":"5572:32:19","nodeType":"VariableDeclaration","scope":6235,"src":"5509:95:19","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4625_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"typeName":{"id":4647,"keyName":"pool","keyNameLocation":"5525:4:19","keyType":{"id":4644,"name":"address","nodeType":"ElementaryTypeName","src":"5517:7:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5509:53:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4625_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"valueName":"yieldFeeConfig","valueNameLocation":"5547:14:19","valueType":{"id":4646,"nodeType":"UserDefinedTypeName","pathNode":{"id":4645,"name":"PoolFeeConfig","nameLocations":["5533:13:19"],"nodeType":"IdentifierPath","referencedDeclaration":4625,"src":"5533:13:19"},"referencedDeclaration":4625,"src":"5533:13:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}}},"visibility":"internal"},{"constant":false,"id":4652,"mutability":"mutable","name":"_registeredPools","nameLocation":"5777:16:19","nodeType":"VariableDeclaration","scope":6235,"src":"5725:68:19","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":4651,"keyName":"pool","keyNameLocation":"5741:4:19","keyType":{"id":4649,"name":"address","nodeType":"ElementaryTypeName","src":"5733:7:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5725:42:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"isRegistered","valueNameLocation":"5754:12:19","valueType":{"id":4650,"name":"bool","nodeType":"ElementaryTypeName","src":"5749:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"},{"constant":false,"id":4656,"mutability":"mutable","name":"_poolCreatorSwapFeePercentages","nameLocation":"5917:30:19","nodeType":"VariableDeclaration","scope":6235,"src":"5856:91:19","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":4655,"keyName":"pool","keyNameLocation":"5872:4:19","keyType":{"id":4653,"name":"address","nodeType":"ElementaryTypeName","src":"5864:7:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5856:51:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"poolCreatorSwapFee","valueNameLocation":"5888:18:19","valueType":{"id":4654,"name":"uint256","nodeType":"ElementaryTypeName","src":"5880:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":4660,"mutability":"mutable","name":"_poolCreatorYieldFeePercentages","nameLocation":"6073:31:19","nodeType":"VariableDeclaration","scope":6235,"src":"6011:93:19","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":4659,"keyName":"pool","keyNameLocation":"6027:4:19","keyType":{"id":4657,"name":"address","nodeType":"ElementaryTypeName","src":"6019:7:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6011:52:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"poolCreatorYieldFee","valueNameLocation":"6043:19:19","valueType":{"id":4658,"name":"uint256","nodeType":"ElementaryTypeName","src":"6035:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":4667,"mutability":"mutable","name":"_protocolFeeAmounts","nameLocation":"6290:19:19","nodeType":"VariableDeclaration","scope":6235,"src":"6209:100:19","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6591_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"typeName":{"id":4666,"keyName":"pool","keyNameLocation":"6225:4:19","keyType":{"id":4661,"name":"address","nodeType":"ElementaryTypeName","src":"6217:7:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6209:71:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6591_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":4665,"keyName":"poolToken","keyNameLocation":"6248:9:19","keyType":{"id":4663,"nodeType":"UserDefinedTypeName","pathNode":{"id":4662,"name":"IERC20","nameLocations":["6241:6:19"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"6241:6:19"},"referencedDeclaration":6591,"src":"6241:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"6233:46:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6591_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"},"valueName":"feeAmount","valueNameLocation":"6269:9:19","valueType":{"id":4664,"name":"uint256","nodeType":"ElementaryTypeName","src":"6261:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"internal"},{"constant":false,"id":4674,"mutability":"mutable","name":"_poolCreatorFeeAmounts","nameLocation":"6505:22:19","nodeType":"VariableDeclaration","scope":6235,"src":"6424:103:19","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6591_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"typeName":{"id":4673,"keyName":"pool","keyNameLocation":"6440:4:19","keyType":{"id":4668,"name":"address","nodeType":"ElementaryTypeName","src":"6432:7:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6424:71:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6591_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":4672,"keyName":"poolToken","keyNameLocation":"6463:9:19","keyType":{"id":4670,"nodeType":"UserDefinedTypeName","pathNode":{"id":4669,"name":"IERC20","nameLocations":["6456:6:19"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"6456:6:19"},"referencedDeclaration":6591,"src":"6456:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"6448:46:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6591_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"},"valueName":"feeAmount","valueNameLocation":"6484:9:19","valueType":{"id":4671,"name":"uint256","nodeType":"ElementaryTypeName","src":"6476:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"internal"},{"documentation":{"id":4675,"nodeType":"StructuredDocumentation","src":"6534:279:19","text":" @notice Prevent pool data from being registered more than once.\n @dev This can happen if there is an error in the migration, or if governance somehow grants permission to\n `migratePool`, which should never happen.\n @param pool The pool"},"errorSelector":"db771c80","id":4679,"name":"PoolAlreadyRegistered","nameLocation":"6824:21:19","nodeType":"ErrorDefinition","parameters":{"id":4678,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4677,"mutability":"mutable","name":"pool","nameLocation":"6854:4:19","nodeType":"VariableDeclaration","scope":4679,"src":"6846:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4676,"name":"address","nodeType":"ElementaryTypeName","src":"6846:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6845:14:19"},"src":"6818:42:19"},{"documentation":{"id":4680,"nodeType":"StructuredDocumentation","src":"6866:53:19","text":"@notice Migration source cannot be this contract."},"errorSelector":"b82fd5bf","id":4682,"name":"InvalidMigrationSource","nameLocation":"6930:22:19","nodeType":"ErrorDefinition","parameters":{"id":4681,"nodeType":"ParameterList","parameters":[],"src":"6952:2:19"},"src":"6924:31:19"},{"body":{"id":4691,"nodeType":"Block","src":"7051:60:19","statements":[{"expression":{"arguments":[{"id":4687,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4684,"src":"7088:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4686,"name":"_ensureCallerIsPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5476,"src":"7061:26:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":4688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7061:32:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4689,"nodeType":"ExpressionStatement","src":"7061:32:19"},{"id":4690,"nodeType":"PlaceholderStatement","src":"7103:1:19"}]},"id":4692,"name":"onlyPoolCreator","nameLocation":"7021:15:19","nodeType":"ModifierDefinition","parameters":{"id":4685,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4684,"mutability":"mutable","name":"pool","nameLocation":"7045:4:19","nodeType":"VariableDeclaration","scope":4692,"src":"7037:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4683,"name":"address","nodeType":"ElementaryTypeName","src":"7037:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7036:14:19"},"src":"7012:99:19","virtual":false,"visibility":"internal"},{"body":{"id":4709,"nodeType":"Block","src":"7234:207:19","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4696,"name":"newSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4694,"src":"7248:20:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":4697,"name":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4628,"src":"7271:32:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7248:55:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4703,"nodeType":"IfStatement","src":"7244:127:19","trueBody":{"id":4702,"nodeType":"Block","src":"7305:66:19","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4699,"name":"ProtocolSwapFeePercentageTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":394,"src":"7326:32:19","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7326:34:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4701,"nodeType":"RevertStatement","src":"7319:41:19"}]}},{"expression":{"arguments":[{"id":4705,"name":"newSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4694,"src":"7402:20:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4704,"name":"_ensureValidPrecision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6234,"src":"7380:21:19","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":4706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7380:43:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4707,"nodeType":"ExpressionStatement","src":"7380:43:19"},{"id":4708,"nodeType":"PlaceholderStatement","src":"7433:1:19"}]},"id":4710,"name":"withValidSwapFee","nameLocation":"7187:16:19","nodeType":"ModifierDefinition","parameters":{"id":4695,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4694,"mutability":"mutable","name":"newSwapFeePercentage","nameLocation":"7212:20:19","nodeType":"VariableDeclaration","scope":4710,"src":"7204:28:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4693,"name":"uint256","nodeType":"ElementaryTypeName","src":"7204:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7203:30:19"},"src":"7178:263:19","virtual":false,"visibility":"internal"},{"body":{"id":4727,"nodeType":"Block","src":"7567:211:19","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4714,"name":"newYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4712,"src":"7581:21:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":4715,"name":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4631,"src":"7605:33:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7581:57:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4721,"nodeType":"IfStatement","src":"7577:130:19","trueBody":{"id":4720,"nodeType":"Block","src":"7640:67:19","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4717,"name":"ProtocolYieldFeePercentageTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":397,"src":"7661:33:19","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4718,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7661:35:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4719,"nodeType":"RevertStatement","src":"7654:42:19"}]}},{"expression":{"arguments":[{"id":4723,"name":"newYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4712,"src":"7738:21:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4722,"name":"_ensureValidPrecision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6234,"src":"7716:21:19","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":4724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7716:44:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4725,"nodeType":"ExpressionStatement","src":"7716:44:19"},{"id":4726,"nodeType":"PlaceholderStatement","src":"7770:1:19"}]},"id":4728,"name":"withValidYieldFee","nameLocation":"7518:17:19","nodeType":"ModifierDefinition","parameters":{"id":4713,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4712,"mutability":"mutable","name":"newYieldFeePercentage","nameLocation":"7544:21:19","nodeType":"VariableDeclaration","scope":4728,"src":"7536:29:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4711,"name":"uint256","nodeType":"ElementaryTypeName","src":"7536:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7535:31:19"},"src":"7509:269:19","virtual":false,"visibility":"internal"},{"body":{"id":4741,"nodeType":"Block","src":"7854:154:19","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4732,"name":"newPoolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4730,"src":"7868:27:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":4733,"name":"MAX_CREATOR_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4634,"src":"7898:26:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7868:56:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4739,"nodeType":"IfStatement","src":"7864:127:19","trueBody":{"id":4738,"nodeType":"Block","src":"7926:65:19","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":4735,"name":"PoolCreatorFeePercentageTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":412,"src":"7947:31:19","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":4736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7947:33:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":4737,"nodeType":"RevertStatement","src":"7940:40:19"}]}},{"id":4740,"nodeType":"PlaceholderStatement","src":"8000:1:19"}]},"id":4742,"name":"withValidPoolCreatorFee","nameLocation":"7793:23:19","nodeType":"ModifierDefinition","parameters":{"id":4731,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4730,"mutability":"mutable","name":"newPoolCreatorFeePercentage","nameLocation":"7825:27:19","nodeType":"VariableDeclaration","scope":4742,"src":"7817:35:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4729,"name":"uint256","nodeType":"ElementaryTypeName","src":"7817:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7816:37:19"},"src":"7784:224:19","virtual":false,"visibility":"internal"},{"body":{"id":4751,"nodeType":"Block","src":"8145:54:19","statements":[{"expression":{"arguments":[{"id":4747,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4744,"src":"8176:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4746,"name":"collectAggregateFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4793,"src":"8155:20:19","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":4748,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8155:26:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4749,"nodeType":"ExpressionStatement","src":"8155:26:19"},{"id":4750,"nodeType":"PlaceholderStatement","src":"8191:1:19"}]},"id":4752,"name":"withLatestFees","nameLocation":"8116:14:19","nodeType":"ModifierDefinition","parameters":{"id":4745,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4744,"mutability":"mutable","name":"pool","nameLocation":"8139:4:19","nodeType":"VariableDeclaration","scope":4752,"src":"8131:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4743,"name":"address","nodeType":"ElementaryTypeName","src":"8131:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8130:14:19"},"src":"8107:92:19","virtual":false,"visibility":"internal"},{"body":{"id":4764,"nodeType":"Block","src":"8283:64:19","statements":[]},"id":4765,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":4758,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4755,"src":"8256:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}}],"id":4759,"kind":"baseConstructorSpecifier","modifierName":{"id":4757,"name":"SingletonAuthentication","nameLocations":["8232:23:19"],"nodeType":"IdentifierPath","referencedDeclaration":6294,"src":"8232:23:19"},"nodeType":"ModifierInvocation","src":"8232:31:19"},{"arguments":[{"id":4761,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4755,"src":"8275:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}}],"id":4762,"kind":"baseConstructorSpecifier","modifierName":{"id":4760,"name":"VaultGuard","nameLocations":["8264:10:19"],"nodeType":"IdentifierPath","referencedDeclaration":6343,"src":"8264:10:19"},"nodeType":"ModifierInvocation","src":"8264:18:19"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":4756,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4755,"mutability":"mutable","name":"vault_","nameLocation":"8224:6:19","nodeType":"VariableDeclaration","scope":4765,"src":"8217:13:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":4754,"nodeType":"UserDefinedTypeName","pathNode":{"id":4753,"name":"IVault","nameLocations":["8217:6:19"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"8217:6:19"},"referencedDeclaration":651,"src":"8217:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"}],"src":"8216:15:19"},"returnParameters":{"id":4763,"nodeType":"ParameterList","parameters":[],"src":"8283:0:19"},"scope":6235,"src":"8205:142:19","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[419],"body":{"id":4774,"nodeType":"Block","src":"8444:30:19","statements":[{"expression":{"id":4772,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6304,"src":"8461:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"functionReturnParameters":4771,"id":4773,"nodeType":"Return","src":"8454:13:19"}]},"documentation":{"id":4766,"nodeType":"StructuredDocumentation","src":"8353:38:19","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"fbfa77cf","id":4775,"implemented":true,"kind":"function","modifiers":[],"name":"vault","nameLocation":"8405:5:19","nodeType":"FunctionDefinition","parameters":{"id":4767,"nodeType":"ParameterList","parameters":[],"src":"8410:2:19"},"returnParameters":{"id":4771,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4770,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4775,"src":"8436:6:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":4769,"nodeType":"UserDefinedTypeName","pathNode":{"id":4768,"name":"IVault","nameLocations":["8436:6:19"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"8436:6:19"},"referencedDeclaration":651,"src":"8436:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"}],"src":"8435:8:19"},"scope":6235,"src":"8396:78:19","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[425],"body":{"id":4792,"nodeType":"Block","src":"8574:100:19","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":4786,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6235,"src":"8613:21:19","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ProtocolFeeController_$6235_$","typeString":"type(contract ProtocolFeeController)"}},"id":4787,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8635:24:19","memberName":"collectAggregateFeesHook","nodeType":"MemberAccess","referencedDeclaration":4821,"src":"8613:46:19","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$returns$__$","typeString":"function ProtocolFeeController.collectAggregateFeesHook(address)"}},{"id":4788,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4778,"src":"8661:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$returns$__$","typeString":"function ProtocolFeeController.collectAggregateFeesHook(address)"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":4784,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8598:3:19","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":4785,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8602:10:19","memberName":"encodeCall","nodeType":"MemberAccess","src":"8598:14:19","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":4789,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8598:68:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":4781,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6304,"src":"8584:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":4783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8591:6:19","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":1980,"src":"8584:13:19","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":4790,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8584:83:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":4791,"nodeType":"ExpressionStatement","src":"8584:83:19"}]},"documentation":{"id":4776,"nodeType":"StructuredDocumentation","src":"8480:38:19","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"8f4ab9ca","id":4793,"implemented":true,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"8532:20:19","nodeType":"FunctionDefinition","parameters":{"id":4779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4778,"mutability":"mutable","name":"pool","nameLocation":"8561:4:19","nodeType":"VariableDeclaration","scope":4793,"src":"8553:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4777,"name":"address","nodeType":"ElementaryTypeName","src":"8553:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8552:14:19"},"returnParameters":{"id":4780,"nodeType":"ParameterList","parameters":[],"src":"8574:0:19"},"scope":6235,"src":"8523:151:19","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":4820,"nodeType":"Block","src":"9057:186:19","statements":[{"assignments":[4805,4808],"declarations":[{"constant":false,"id":4805,"mutability":"mutable","name":"totalSwapFees","nameLocation":"9085:13:19","nodeType":"VariableDeclaration","scope":4820,"src":"9068:30:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4803,"name":"uint256","nodeType":"ElementaryTypeName","src":"9068:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4804,"nodeType":"ArrayTypeName","src":"9068:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4808,"mutability":"mutable","name":"totalYieldFees","nameLocation":"9117:14:19","nodeType":"VariableDeclaration","scope":4820,"src":"9100:31:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4806,"name":"uint256","nodeType":"ElementaryTypeName","src":"9100:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4807,"nodeType":"ArrayTypeName","src":"9100:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":4813,"initialValue":{"arguments":[{"id":4811,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4796,"src":"9163:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":4809,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6304,"src":"9135:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":4810,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9142:20:19","memberName":"collectAggregateFees","nodeType":"MemberAccess","referencedDeclaration":779,"src":"9135:27:19","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) external returns (uint256[] memory,uint256[] memory)"}},"id":4812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9135:33:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256[] memory)"}},"nodeType":"VariableDeclarationStatement","src":"9067:101:19"},{"expression":{"arguments":[{"id":4815,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4796,"src":"9200:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4816,"name":"totalSwapFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4805,"src":"9206:13:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":4817,"name":"totalYieldFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4808,"src":"9221:14:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":4814,"name":"_receiveAggregateFees","nodeType":"Identifier","overloadedDeclarations":[4848,5052],"referencedDeclaration":4848,"src":"9178:21:19","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,uint256[] memory,uint256[] memory)"}},"id":4818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9178:58:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4819,"nodeType":"ExpressionStatement","src":"9178:58:19"}]},"documentation":{"id":4794,"nodeType":"StructuredDocumentation","src":"8680:305:19","text":" @dev Copy and zero out the `aggregateFeeAmounts` collected in the Vault accounting, supplying credit\n for each token. Then have the Vault transfer tokens to this contract, debiting each token for the amount\n transferred so that the transaction settles when the hook returns."},"functionSelector":"fa399f2a","id":4821,"implemented":true,"kind":"function","modifiers":[{"id":4799,"kind":"modifierInvocation","modifierName":{"id":4798,"name":"onlyVault","nameLocations":["9047:9:19"],"nodeType":"IdentifierPath","referencedDeclaration":6322,"src":"9047:9:19"},"nodeType":"ModifierInvocation","src":"9047:9:19"}],"name":"collectAggregateFeesHook","nameLocation":"8999:24:19","nodeType":"FunctionDefinition","parameters":{"id":4797,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4796,"mutability":"mutable","name":"pool","nameLocation":"9032:4:19","nodeType":"VariableDeclaration","scope":4821,"src":"9024:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4795,"name":"address","nodeType":"ElementaryTypeName","src":"9024:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9023:14:19"},"returnParameters":{"id":4800,"nodeType":"ParameterList","parameters":[],"src":"9057:0:19"},"scope":6235,"src":"8990:253:19","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":4847,"nodeType":"Block","src":"10334:159:19","statements":[{"expression":{"arguments":[{"id":4834,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4824,"src":"10366:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":4835,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4619,"src":"10372:15:19","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4619_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":4836,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10388:4:19","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":4617,"src":"10372:20:19","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},{"id":4837,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4827,"src":"10394:14:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":4833,"name":"_receiveAggregateFees","nodeType":"Identifier","overloadedDeclarations":[4848,5052],"referencedDeclaration":5052,"src":"10344:21:19","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_enum$_ProtocolFeeType_$4619_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType,uint256[] memory)"}},"id":4838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10344:65:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4839,"nodeType":"ExpressionStatement","src":"10344:65:19"},{"expression":{"arguments":[{"id":4841,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4824,"src":"10441:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":4842,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4619,"src":"10447:15:19","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4619_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":4843,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10463:5:19","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":4618,"src":"10447:21:19","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},{"id":4844,"name":"yieldFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4830,"src":"10470:15:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":4840,"name":"_receiveAggregateFees","nodeType":"Identifier","overloadedDeclarations":[4848,5052],"referencedDeclaration":5052,"src":"10419:21:19","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_enum$_ProtocolFeeType_$4619_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType,uint256[] memory)"}},"id":4845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10419:67:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4846,"nodeType":"ExpressionStatement","src":"10419:67:19"}]},"documentation":{"id":4822,"nodeType":"StructuredDocumentation","src":"9249:929:19","text":" @notice Settle fee credits from the Vault.\n @dev This must be called after calling `collectAggregateFees` in the Vault. Note that since charging protocol\n fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection\n happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations. The Vault\n differentiates between swap and yield fees (since they can have different percentage values); the Controller\n combines swap and yield fees, then allocates the total between the protocol and pool creator.\n @param pool The address of the pool on which the swap fees were charged\n @param swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n @param yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order"},"id":4848,"implemented":true,"kind":"function","modifiers":[],"name":"_receiveAggregateFees","nameLocation":"10192:21:19","nodeType":"FunctionDefinition","parameters":{"id":4831,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4824,"mutability":"mutable","name":"pool","nameLocation":"10231:4:19","nodeType":"VariableDeclaration","scope":4848,"src":"10223:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4823,"name":"address","nodeType":"ElementaryTypeName","src":"10223:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4827,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"10262:14:19","nodeType":"VariableDeclaration","scope":4848,"src":"10245:31:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4825,"name":"uint256","nodeType":"ElementaryTypeName","src":"10245:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4826,"nodeType":"ArrayTypeName","src":"10245:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4830,"mutability":"mutable","name":"yieldFeeAmounts","nameLocation":"10303:15:19","nodeType":"VariableDeclaration","scope":4848,"src":"10286:32:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4828,"name":"uint256","nodeType":"ElementaryTypeName","src":"10286:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4829,"nodeType":"ArrayTypeName","src":"10286:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10213:111:19"},"returnParameters":{"id":4832,"nodeType":"ParameterList","parameters":[],"src":"10334:0:19"},"scope":6235,"src":"10183:310:19","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":5051,"nodeType":"Block","src":"10606:2992:19","statements":[{"assignments":[4860],"declarations":[{"constant":false,"id":4860,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"10846:21:19","nodeType":"VariableDeclaration","scope":5051,"src":"10838:29:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4859,"name":"uint256","nodeType":"ElementaryTypeName","src":"10838:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4874,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":4864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4861,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4853,"src":"10870:7:19","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":4862,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4619,"src":"10881:15:19","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4619_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":4863,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10897:4:19","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":4617,"src":"10881:20:19","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"10870:31:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"baseExpression":{"id":4869,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4648,"src":"10982:32:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4625_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":4871,"indexExpression":{"id":4870,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4850,"src":"11015:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10982:38:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":4872,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11021:13:19","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":4622,"src":"10982:52:19","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":4873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"10870:164:19","trueExpression":{"expression":{"baseExpression":{"id":4865,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4643,"src":"10916:31:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4625_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":4867,"indexExpression":{"id":4866,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4850,"src":"10948:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10916:37:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":4868,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10954:13:19","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":4622,"src":"10916:51:19","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"VariableDeclarationStatement","src":"10838:196:19"},{"assignments":[4876],"declarations":[{"constant":false,"id":4876,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"11053:24:19","nodeType":"VariableDeclaration","scope":5051,"src":"11045:32:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4875,"name":"uint256","nodeType":"ElementaryTypeName","src":"11045:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4888,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":4880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4877,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4853,"src":"11080:7:19","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":4878,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4619,"src":"11091:15:19","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4619_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":4879,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11107:4:19","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":4617,"src":"11091:20:19","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"11080:31:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"baseExpression":{"id":4884,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4660,"src":"11177:31:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":4886,"indexExpression":{"id":4885,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4850,"src":"11209:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11177:37:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"11080:134:19","trueExpression":{"baseExpression":{"id":4881,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4656,"src":"11126:30:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":4883,"indexExpression":{"id":4882,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4850,"src":"11157:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11126:36:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11045:169:19"},{"assignments":[4890],"declarations":[{"constant":false,"id":4890,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"11233:22:19","nodeType":"VariableDeclaration","scope":5051,"src":"11225:30:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4889,"name":"uint256","nodeType":"ElementaryTypeName","src":"11225:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4891,"nodeType":"VariableDeclarationStatement","src":"11225:30:19"},{"assignments":[4893],"declarations":[{"constant":false,"id":4893,"mutability":"mutable","name":"needToSplitFees","nameLocation":"11271:15:19","nodeType":"VariableDeclaration","scope":5051,"src":"11266:20:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4892,"name":"bool","nodeType":"ElementaryTypeName","src":"11266:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":4901,"initialValue":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":4900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4894,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4876,"src":"11289:24:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":4895,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11316:1:19","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11289:28:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4897,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"11321:21:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":4898,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11345:1:19","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11321:25:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11289:57:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"11266:80:19"},{"condition":{"id":4902,"name":"needToSplitFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4893,"src":"11360:15:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":4911,"nodeType":"IfStatement","src":"11356:199:19","trueBody":{"id":4910,"nodeType":"Block","src":"11377:178:19","statements":[{"expression":{"id":4908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4903,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4890,"src":"11440:22:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":4905,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"11496:21:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":4906,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4876,"src":"11519:24:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4904,"name":"_computeAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5440,"src":"11465:30:19","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4907,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11465:79:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11440:104:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4909,"nodeType":"ExpressionStatement","src":"11440:104:19"}]}},{"assignments":[4916,4918],"declarations":[{"constant":false,"id":4916,"mutability":"mutable","name":"poolTokens","nameLocation":"11582:10:19","nodeType":"VariableDeclaration","scope":5051,"src":"11566:26:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6591_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4914,"nodeType":"UserDefinedTypeName","pathNode":{"id":4913,"name":"IERC20","nameLocations":["11566:6:19"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"11566:6:19"},"referencedDeclaration":6591,"src":"11566:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"id":4915,"nodeType":"ArrayTypeName","src":"11566:8:19","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6591_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":4918,"mutability":"mutable","name":"numTokens","nameLocation":"11602:9:19","nodeType":"VariableDeclaration","scope":5051,"src":"11594:17:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4917,"name":"uint256","nodeType":"ElementaryTypeName","src":"11594:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4922,"initialValue":{"arguments":[{"id":4920,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4850,"src":"11638:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4919,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5500,"src":"11615:22:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$6591_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":4921,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11615:28:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$6591_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"11565:78:19"},{"body":{"id":5049,"nodeType":"Block","src":"11693:1899:19","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":4933,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4856,"src":"11711:10:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4935,"indexExpression":{"id":4934,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4924,"src":"11722:1:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11711:13:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":4936,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11727:1:19","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11711:17:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5048,"nodeType":"IfStatement","src":"11707:1875:19","trueBody":{"id":5047,"nodeType":"Block","src":"11730:1852:19","statements":[{"assignments":[4940],"declarations":[{"constant":false,"id":4940,"mutability":"mutable","name":"token","nameLocation":"11755:5:19","nodeType":"VariableDeclaration","scope":5047,"src":"11748:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":4939,"nodeType":"UserDefinedTypeName","pathNode":{"id":4938,"name":"IERC20","nameLocations":["11748:6:19"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"11748:6:19"},"referencedDeclaration":6591,"src":"11748:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"}],"id":4944,"initialValue":{"baseExpression":{"id":4941,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4916,"src":"11763:10:19","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6591_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":4943,"indexExpression":{"id":4942,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4924,"src":"11774:1:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11763:13:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"11748:28:19"},{"expression":{"arguments":[{"id":4948,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4940,"src":"11809:5:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},{"arguments":[{"id":4951,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"11824:4:19","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$6235","typeString":"contract ProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeController_$6235","typeString":"contract ProtocolFeeController"}],"id":4950,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11816:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":4949,"name":"address","nodeType":"ElementaryTypeName","src":"11816:7:19","typeDescriptions":{}}},"id":4952,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11816:13:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":4953,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4856,"src":"11831:10:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4955,"indexExpression":{"id":4954,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4924,"src":"11842:1:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11831:13:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4945,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6304,"src":"11795:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":4947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11802:6:19","memberName":"sendTo","nodeType":"MemberAccess","referencedDeclaration":2002,"src":"11795:13:19","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$6591_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":4956,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11795:50:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4957,"nodeType":"ExpressionStatement","src":"11795:50:19"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":4961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4958,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4853,"src":"12024:7:19","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":4959,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4619,"src":"12035:15:19","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4619_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":4960,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12051:4:19","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":4617,"src":"12035:20:19","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"12024:31:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":4979,"nodeType":"Block","src":"12161:99:19","statements":[{"eventCall":{"arguments":[{"id":4972,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4850,"src":"12214:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4973,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4940,"src":"12220:5:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},{"baseExpression":{"id":4974,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4856,"src":"12227:10:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4976,"indexExpression":{"id":4975,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4924,"src":"12238:1:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12227:13:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4971,"name":"ProtocolYieldFeeCollected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":340,"src":"12188:25:19","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$6591_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256)"}},"id":4977,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12188:53:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4978,"nodeType":"EmitStatement","src":"12183:58:19"}]},"id":4980,"nodeType":"IfStatement","src":"12020:240:19","trueBody":{"id":4970,"nodeType":"Block","src":"12057:98:19","statements":[{"eventCall":{"arguments":[{"id":4963,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4850,"src":"12109:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":4964,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4940,"src":"12115:5:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},{"baseExpression":{"id":4965,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4856,"src":"12122:10:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4967,"indexExpression":{"id":4966,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4924,"src":"12133:1:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12122:13:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4962,"name":"ProtocolSwapFeeCollected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":330,"src":"12084:24:19","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$6591_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256)"}},"id":4968,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12084:52:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":4969,"nodeType":"EmitStatement","src":"12079:57:19"}]}},{"condition":{"id":4981,"name":"needToSplitFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4893,"src":"12282:15:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5045,"nodeType":"Block","src":"13212:356:19","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5019,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4876,"src":"13314:24:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":5020,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13342:1:19","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13314:29:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5043,"nodeType":"Block","src":"13449:101:19","statements":[{"expression":{"id":5041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":5033,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4674,"src":"13475:22:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6591_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":5036,"indexExpression":{"id":5034,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4850,"src":"13498:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13475:28:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6591_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":5037,"indexExpression":{"id":5035,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4940,"src":"13504:5:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13475:35:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"baseExpression":{"id":5038,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4856,"src":"13514:10:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5040,"indexExpression":{"id":5039,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4924,"src":"13525:1:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13514:13:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13475:52:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5042,"nodeType":"ExpressionStatement","src":"13475:52:19"}]},"id":5044,"nodeType":"IfStatement","src":"13310:240:19","trueBody":{"id":5032,"nodeType":"Block","src":"13345:98:19","statements":[{"expression":{"id":5030,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":5022,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4667,"src":"13371:19:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6591_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":5025,"indexExpression":{"id":5023,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4850,"src":"13391:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13371:25:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6591_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":5026,"indexExpression":{"id":5024,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4940,"src":"13397:5:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13371:32:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"baseExpression":{"id":5027,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4856,"src":"13407:10:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5029,"indexExpression":{"id":5028,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4924,"src":"13418:1:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13407:13:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13371:49:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5031,"nodeType":"ExpressionStatement","src":"13371:49:19"}]}}]},"id":5046,"nodeType":"IfStatement","src":"12278:1290:19","trueBody":{"id":5018,"nodeType":"Block","src":"12299:907:19","statements":[{"assignments":[4983],"declarations":[{"constant":false,"id":4983,"mutability":"mutable","name":"totalFeeAmountRaw","nameLocation":"12864:17:19","nodeType":"VariableDeclaration","scope":5018,"src":"12856:25:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4982,"name":"uint256","nodeType":"ElementaryTypeName","src":"12856:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4990,"initialValue":{"arguments":[{"id":4988,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4890,"src":"12904:22:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":4984,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4856,"src":"12884:10:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":4986,"indexExpression":{"id":4985,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4924,"src":"12895:1:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12884:13:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12898:5:19","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":2732,"src":"12884:19:19","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12884:43:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12856:71:19"},{"assignments":[4992],"declarations":[{"constant":false,"id":4992,"mutability":"mutable","name":"protocolPortion","nameLocation":"12957:15:19","nodeType":"VariableDeclaration","scope":5018,"src":"12949:23:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4991,"name":"uint256","nodeType":"ElementaryTypeName","src":"12949:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4997,"initialValue":{"arguments":[{"id":4995,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4860,"src":"12999:21:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":4993,"name":"totalFeeAmountRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4983,"src":"12975:17:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4994,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12993:5:19","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":2696,"src":"12975:23:19","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":4996,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12975:46:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12949:72:19"},{"expression":{"id":5004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":4998,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4667,"src":"13044:19:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6591_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":5001,"indexExpression":{"id":4999,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4850,"src":"13064:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13044:25:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6591_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":5002,"indexExpression":{"id":5000,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4940,"src":"13070:5:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13044:32:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":5003,"name":"protocolPortion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4992,"src":"13080:15:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13044:51:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5005,"nodeType":"ExpressionStatement","src":"13044:51:19"},{"expression":{"id":5016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":5006,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4674,"src":"13117:22:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6591_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":5009,"indexExpression":{"id":5007,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4850,"src":"13140:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13117:28:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6591_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":5010,"indexExpression":{"id":5008,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4940,"src":"13146:5:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13117:35:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":5011,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4856,"src":"13156:10:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5013,"indexExpression":{"id":5012,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4924,"src":"13167:1:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13156:13:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":5014,"name":"protocolPortion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4992,"src":"13172:15:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13156:31:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13117:70:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5017,"nodeType":"ExpressionStatement","src":"13117:70:19"}]}}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":4929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":4927,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4924,"src":"11673:1:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":4928,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4918,"src":"11677:9:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11673:13:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5050,"initializationExpression":{"assignments":[4924],"declarations":[{"constant":false,"id":4924,"mutability":"mutable","name":"i","nameLocation":"11666:1:19","nodeType":"VariableDeclaration","scope":5050,"src":"11658:9:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4923,"name":"uint256","nodeType":"ElementaryTypeName","src":"11658:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":4926,"initialValue":{"hexValue":"30","id":4925,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11670:1:19","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11658:13:19"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":4931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"11688:3:19","subExpression":{"id":4930,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4924,"src":"11690:1:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4932,"nodeType":"ExpressionStatement","src":"11688:3:19"},"nodeType":"ForStatement","src":"11653:1939:19"}]},"id":5052,"implemented":true,"kind":"function","modifiers":[],"name":"_receiveAggregateFees","nameLocation":"10508:21:19","nodeType":"FunctionDefinition","parameters":{"id":4857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4850,"mutability":"mutable","name":"pool","nameLocation":"10538:4:19","nodeType":"VariableDeclaration","scope":5052,"src":"10530:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4849,"name":"address","nodeType":"ElementaryTypeName","src":"10530:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4853,"mutability":"mutable","name":"feeType","nameLocation":"10560:7:19","nodeType":"VariableDeclaration","scope":5052,"src":"10544:23:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"typeName":{"id":4852,"nodeType":"UserDefinedTypeName","pathNode":{"id":4851,"name":"ProtocolFeeType","nameLocations":["10544:15:19"],"nodeType":"IdentifierPath","referencedDeclaration":4619,"src":"10544:15:19"},"referencedDeclaration":4619,"src":"10544:15:19","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"visibility":"internal"},{"constant":false,"id":4856,"mutability":"mutable","name":"feeAmounts","nameLocation":"10586:10:19","nodeType":"VariableDeclaration","scope":5052,"src":"10569:27:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4854,"name":"uint256","nodeType":"ElementaryTypeName","src":"10569:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4855,"nodeType":"ArrayTypeName","src":"10569:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10529:68:19"},"returnParameters":{"id":4858,"nodeType":"ParameterList","parameters":[],"src":"10606:0:19"},"scope":6235,"src":"10499:3099:19","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"baseFunctions":[431],"body":{"id":5060,"nodeType":"Block","src":"13725:56:19","statements":[{"expression":{"id":5058,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4636,"src":"13742:32:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5057,"id":5059,"nodeType":"Return","src":"13735:39:19"}]},"documentation":{"id":5053,"nodeType":"StructuredDocumentation","src":"13604:38:19","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"7869ee18","id":5061,"implemented":true,"kind":"function","modifiers":[],"name":"getGlobalProtocolSwapFeePercentage","nameLocation":"13656:34:19","nodeType":"FunctionDefinition","parameters":{"id":5054,"nodeType":"ParameterList","parameters":[],"src":"13690:2:19"},"returnParameters":{"id":5057,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5056,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5061,"src":"13716:7:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5055,"name":"uint256","nodeType":"ElementaryTypeName","src":"13716:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13715:9:19"},"scope":6235,"src":"13647:134:19","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[437],"body":{"id":5069,"nodeType":"Block","src":"13909:57:19","statements":[{"expression":{"id":5067,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4638,"src":"13926:33:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5066,"id":5068,"nodeType":"Return","src":"13919:40:19"}]},"documentation":{"id":5062,"nodeType":"StructuredDocumentation","src":"13787:38:19","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"55fb76af","id":5070,"implemented":true,"kind":"function","modifiers":[],"name":"getGlobalProtocolYieldFeePercentage","nameLocation":"13839:35:19","nodeType":"FunctionDefinition","parameters":{"id":5063,"nodeType":"ParameterList","parameters":[],"src":"13874:2:19"},"returnParameters":{"id":5066,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5065,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5070,"src":"13900:7:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5064,"name":"uint256","nodeType":"ElementaryTypeName","src":"13900:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13899:9:19"},"scope":6235,"src":"13830:136:19","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[445],"body":{"id":5082,"nodeType":"Block","src":"14084:46:19","statements":[{"expression":{"baseExpression":{"id":5078,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4652,"src":"14101:16:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":5080,"indexExpression":{"id":5079,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5073,"src":"14118:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14101:22:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":5077,"id":5081,"nodeType":"Return","src":"14094:29:19"}]},"documentation":{"id":5071,"nodeType":"StructuredDocumentation","src":"13972:38:19","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"c673bdaf","id":5083,"implemented":true,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"14024:16:19","nodeType":"FunctionDefinition","parameters":{"id":5074,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5073,"mutability":"mutable","name":"pool","nameLocation":"14049:4:19","nodeType":"VariableDeclaration","scope":5083,"src":"14041:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5072,"name":"address","nodeType":"ElementaryTypeName","src":"14041:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14040:14:19"},"returnParameters":{"id":5077,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5076,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5083,"src":"14078:4:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5075,"name":"bool","nodeType":"ElementaryTypeName","src":"14078:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14077:6:19"},"scope":6235,"src":"14015:115:19","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[455],"body":{"id":5106,"nodeType":"Block","src":"14267:143:19","statements":[{"assignments":[5095],"declarations":[{"constant":false,"id":5095,"mutability":"mutable","name":"config","nameLocation":"14298:6:19","nodeType":"VariableDeclaration","scope":5106,"src":"14277:27:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":5094,"nodeType":"UserDefinedTypeName","pathNode":{"id":5093,"name":"PoolFeeConfig","nameLocations":["14277:13:19"],"nodeType":"IdentifierPath","referencedDeclaration":4625,"src":"14277:13:19"},"referencedDeclaration":4625,"src":"14277:13:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":5099,"initialValue":{"baseExpression":{"id":5096,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4643,"src":"14307:31:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4625_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5098,"indexExpression":{"id":5097,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5086,"src":"14339:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14307:37:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"14277:67:19"},{"expression":{"components":[{"expression":{"id":5100,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5095,"src":"14363:6:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":5101,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14370:13:19","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":4622,"src":"14363:20:19","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"expression":{"id":5102,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5095,"src":"14385:6:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":5103,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14392:10:19","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":4624,"src":"14385:17:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":5104,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14362:41:19","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint64_$_t_bool_$","typeString":"tuple(uint64,bool)"}},"functionReturnParameters":5092,"id":5105,"nodeType":"Return","src":"14355:48:19"}]},"documentation":{"id":5084,"nodeType":"StructuredDocumentation","src":"14136:38:19","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"5c15a0b4","id":5107,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolProtocolSwapFeeInfo","nameLocation":"14188:26:19","nodeType":"FunctionDefinition","parameters":{"id":5087,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5086,"mutability":"mutable","name":"pool","nameLocation":"14223:4:19","nodeType":"VariableDeclaration","scope":5107,"src":"14215:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5085,"name":"address","nodeType":"ElementaryTypeName","src":"14215:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14214:14:19"},"returnParameters":{"id":5092,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5089,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5107,"src":"14252:7:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5088,"name":"uint256","nodeType":"ElementaryTypeName","src":"14252:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5091,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5107,"src":"14261:4:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5090,"name":"bool","nodeType":"ElementaryTypeName","src":"14261:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14251:15:19"},"scope":6235,"src":"14179:231:19","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[465],"body":{"id":5130,"nodeType":"Block","src":"14548:144:19","statements":[{"assignments":[5119],"declarations":[{"constant":false,"id":5119,"mutability":"mutable","name":"config","nameLocation":"14579:6:19","nodeType":"VariableDeclaration","scope":5130,"src":"14558:27:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":5118,"nodeType":"UserDefinedTypeName","pathNode":{"id":5117,"name":"PoolFeeConfig","nameLocations":["14558:13:19"],"nodeType":"IdentifierPath","referencedDeclaration":4625,"src":"14558:13:19"},"referencedDeclaration":4625,"src":"14558:13:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":5123,"initialValue":{"baseExpression":{"id":5120,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4648,"src":"14588:32:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4625_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5122,"indexExpression":{"id":5121,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5110,"src":"14621:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14588:38:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"14558:68:19"},{"expression":{"components":[{"expression":{"id":5124,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5119,"src":"14645:6:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":5125,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14652:13:19","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":4622,"src":"14645:20:19","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"expression":{"id":5126,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5119,"src":"14667:6:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":5127,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14674:10:19","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":4624,"src":"14667:17:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":5128,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14644:41:19","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint64_$_t_bool_$","typeString":"tuple(uint64,bool)"}},"functionReturnParameters":5116,"id":5129,"nodeType":"Return","src":"14637:48:19"}]},"documentation":{"id":5108,"nodeType":"StructuredDocumentation","src":"14416:38:19","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"7a2b97dc","id":5131,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolProtocolYieldFeeInfo","nameLocation":"14468:27:19","nodeType":"FunctionDefinition","parameters":{"id":5111,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5110,"mutability":"mutable","name":"pool","nameLocation":"14504:4:19","nodeType":"VariableDeclaration","scope":5131,"src":"14496:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5109,"name":"address","nodeType":"ElementaryTypeName","src":"14496:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14495:14:19"},"returnParameters":{"id":5116,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5113,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5131,"src":"14533:7:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5112,"name":"uint256","nodeType":"ElementaryTypeName","src":"14533:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5115,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5131,"src":"14542:4:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5114,"name":"bool","nodeType":"ElementaryTypeName","src":"14542:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14532:15:19"},"scope":6235,"src":"14459:233:19","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[473],"body":{"id":5143,"nodeType":"Block","src":"14828:60:19","statements":[{"expression":{"baseExpression":{"id":5139,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4656,"src":"14845:30:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5141,"indexExpression":{"id":5140,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5134,"src":"14876:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14845:36:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5138,"id":5142,"nodeType":"Return","src":"14838:43:19"}]},"documentation":{"id":5132,"nodeType":"StructuredDocumentation","src":"14698:38:19","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"0b8e059b","id":5144,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCreatorSwapFeePercentage","nameLocation":"14750:31:19","nodeType":"FunctionDefinition","parameters":{"id":5135,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5134,"mutability":"mutable","name":"pool","nameLocation":"14790:4:19","nodeType":"VariableDeclaration","scope":5144,"src":"14782:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5133,"name":"address","nodeType":"ElementaryTypeName","src":"14782:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14781:14:19"},"returnParameters":{"id":5138,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5137,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5144,"src":"14819:7:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5136,"name":"uint256","nodeType":"ElementaryTypeName","src":"14819:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14818:9:19"},"scope":6235,"src":"14741:147:19","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[481],"body":{"id":5156,"nodeType":"Block","src":"15025:61:19","statements":[{"expression":{"baseExpression":{"id":5152,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4660,"src":"15042:31:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5154,"indexExpression":{"id":5153,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5147,"src":"15074:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15042:37:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5151,"id":5155,"nodeType":"Return","src":"15035:44:19"}]},"documentation":{"id":5145,"nodeType":"StructuredDocumentation","src":"14894:38:19","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"0252aab5","id":5157,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCreatorYieldFeePercentage","nameLocation":"14946:32:19","nodeType":"FunctionDefinition","parameters":{"id":5148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5147,"mutability":"mutable","name":"pool","nameLocation":"14987:4:19","nodeType":"VariableDeclaration","scope":5157,"src":"14979:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5146,"name":"address","nodeType":"ElementaryTypeName","src":"14979:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14978:14:19"},"returnParameters":{"id":5151,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5150,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5157,"src":"15016:7:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5149,"name":"uint256","nodeType":"ElementaryTypeName","src":"15016:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15015:9:19"},"scope":6235,"src":"14937:149:19","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[490],"body":{"id":5209,"nodeType":"Block","src":"15232:273:19","statements":[{"assignments":[5170,5172],"declarations":[{"constant":false,"id":5170,"mutability":"mutable","name":"poolTokens","nameLocation":"15259:10:19","nodeType":"VariableDeclaration","scope":5209,"src":"15243:26:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6591_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":5168,"nodeType":"UserDefinedTypeName","pathNode":{"id":5167,"name":"IERC20","nameLocations":["15243:6:19"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"15243:6:19"},"referencedDeclaration":6591,"src":"15243:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"id":5169,"nodeType":"ArrayTypeName","src":"15243:8:19","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6591_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":5172,"mutability":"mutable","name":"numTokens","nameLocation":"15279:9:19","nodeType":"VariableDeclaration","scope":5209,"src":"15271:17:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5171,"name":"uint256","nodeType":"ElementaryTypeName","src":"15271:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5176,"initialValue":{"arguments":[{"id":5174,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5160,"src":"15315:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5173,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5500,"src":"15292:22:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$6591_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":5175,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15292:28:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$6591_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"15242:78:19"},{"expression":{"id":5183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5177,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5164,"src":"15331:10:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5181,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5172,"src":"15358:9:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5180,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"15344:13:19","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":5178,"name":"uint256","nodeType":"ElementaryTypeName","src":"15348:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5179,"nodeType":"ArrayTypeName","src":"15348:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":5182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15344:24:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"15331:37:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5184,"nodeType":"ExpressionStatement","src":"15331:37:19"},{"body":{"id":5207,"nodeType":"Block","src":"15418:81:19","statements":[{"expression":{"id":5205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5195,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5164,"src":"15432:10:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5197,"indexExpression":{"id":5196,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5186,"src":"15443:1:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15432:13:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"baseExpression":{"id":5198,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4667,"src":"15448:19:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6591_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":5200,"indexExpression":{"id":5199,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5160,"src":"15468:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15448:25:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6591_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":5204,"indexExpression":{"baseExpression":{"id":5201,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5170,"src":"15474:10:19","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6591_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":5203,"indexExpression":{"id":5202,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5186,"src":"15485:1:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15474:13:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15448:40:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15432:56:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5206,"nodeType":"ExpressionStatement","src":"15432:56:19"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5189,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5186,"src":"15398:1:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5190,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5172,"src":"15402:9:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15398:13:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5208,"initializationExpression":{"assignments":[5186],"declarations":[{"constant":false,"id":5186,"mutability":"mutable","name":"i","nameLocation":"15391:1:19","nodeType":"VariableDeclaration","scope":5208,"src":"15383:9:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5185,"name":"uint256","nodeType":"ElementaryTypeName","src":"15383:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5188,"initialValue":{"hexValue":"30","id":5187,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15395:1:19","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"15383:13:19"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":5193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"15413:3:19","subExpression":{"id":5192,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5186,"src":"15415:1:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5194,"nodeType":"ExpressionStatement","src":"15413:3:19"},"nodeType":"ForStatement","src":"15378:121:19"}]},"documentation":{"id":5158,"nodeType":"StructuredDocumentation","src":"15092:38:19","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"8df44c54","id":5210,"implemented":true,"kind":"function","modifiers":[],"name":"getProtocolFeeAmounts","nameLocation":"15144:21:19","nodeType":"FunctionDefinition","parameters":{"id":5161,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5160,"mutability":"mutable","name":"pool","nameLocation":"15174:4:19","nodeType":"VariableDeclaration","scope":5210,"src":"15166:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5159,"name":"address","nodeType":"ElementaryTypeName","src":"15166:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15165:14:19"},"returnParameters":{"id":5165,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5164,"mutability":"mutable","name":"feeAmounts","nameLocation":"15220:10:19","nodeType":"VariableDeclaration","scope":5210,"src":"15203:27:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":5162,"name":"uint256","nodeType":"ElementaryTypeName","src":"15203:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5163,"nodeType":"ArrayTypeName","src":"15203:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"15202:29:19"},"scope":6235,"src":"15135:370:19","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[499],"body":{"id":5262,"nodeType":"Block","src":"15654:276:19","statements":[{"assignments":[5223,5225],"declarations":[{"constant":false,"id":5223,"mutability":"mutable","name":"poolTokens","nameLocation":"15681:10:19","nodeType":"VariableDeclaration","scope":5262,"src":"15665:26:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6591_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":5221,"nodeType":"UserDefinedTypeName","pathNode":{"id":5220,"name":"IERC20","nameLocations":["15665:6:19"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"15665:6:19"},"referencedDeclaration":6591,"src":"15665:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"id":5222,"nodeType":"ArrayTypeName","src":"15665:8:19","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6591_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":5225,"mutability":"mutable","name":"numTokens","nameLocation":"15701:9:19","nodeType":"VariableDeclaration","scope":5262,"src":"15693:17:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5224,"name":"uint256","nodeType":"ElementaryTypeName","src":"15693:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5229,"initialValue":{"arguments":[{"id":5227,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5213,"src":"15737:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5226,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5500,"src":"15714:22:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$6591_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":5228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15714:28:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$6591_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"15664:78:19"},{"expression":{"id":5236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5230,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5217,"src":"15753:10:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5234,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5225,"src":"15780:9:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5233,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"15766:13:19","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":5231,"name":"uint256","nodeType":"ElementaryTypeName","src":"15770:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5232,"nodeType":"ArrayTypeName","src":"15770:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":5235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15766:24:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"15753:37:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5237,"nodeType":"ExpressionStatement","src":"15753:37:19"},{"body":{"id":5260,"nodeType":"Block","src":"15840:84:19","statements":[{"expression":{"id":5258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5248,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5217,"src":"15854:10:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5250,"indexExpression":{"id":5249,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5239,"src":"15865:1:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15854:13:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"baseExpression":{"id":5251,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4674,"src":"15870:22:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6591_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":5253,"indexExpression":{"id":5252,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5213,"src":"15893:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15870:28:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6591_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":5257,"indexExpression":{"baseExpression":{"id":5254,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5223,"src":"15899:10:19","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6591_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":5256,"indexExpression":{"id":5255,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5239,"src":"15910:1:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15899:13:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15870:43:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15854:59:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5259,"nodeType":"ExpressionStatement","src":"15854:59:19"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5242,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5239,"src":"15820:1:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5243,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5225,"src":"15824:9:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15820:13:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5261,"initializationExpression":{"assignments":[5239],"declarations":[{"constant":false,"id":5239,"mutability":"mutable","name":"i","nameLocation":"15813:1:19","nodeType":"VariableDeclaration","scope":5261,"src":"15805:9:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5238,"name":"uint256","nodeType":"ElementaryTypeName","src":"15805:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5241,"initialValue":{"hexValue":"30","id":5240,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15817:1:19","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"15805:13:19"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":5246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"15835:3:19","subExpression":{"id":5245,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5239,"src":"15837:1:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5247,"nodeType":"ExpressionStatement","src":"15835:3:19"},"nodeType":"ForStatement","src":"15800:124:19"}]},"documentation":{"id":5211,"nodeType":"StructuredDocumentation","src":"15511:38:19","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"9e95f3fd","id":5263,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCreatorFeeAmounts","nameLocation":"15563:24:19","nodeType":"FunctionDefinition","parameters":{"id":5214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5213,"mutability":"mutable","name":"pool","nameLocation":"15596:4:19","nodeType":"VariableDeclaration","scope":5263,"src":"15588:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5212,"name":"address","nodeType":"ElementaryTypeName","src":"15588:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15587:14:19"},"returnParameters":{"id":5218,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5217,"mutability":"mutable","name":"feeAmounts","nameLocation":"15642:10:19","nodeType":"VariableDeclaration","scope":5263,"src":"15625:27:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":5215,"name":"uint256","nodeType":"ElementaryTypeName","src":"15625:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5216,"nodeType":"ArrayTypeName","src":"15625:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"15624:29:19"},"scope":6235,"src":"15554:376:19","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[509],"body":{"id":5278,"nodeType":"Block","src":"16137:103:19","statements":[{"expression":{"arguments":[{"id":5274,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5266,"src":"16185:21:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5275,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5268,"src":"16208:24:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5273,"name":"_computeAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5440,"src":"16154:30:19","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5276,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16154:79:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5272,"id":5277,"nodeType":"Return","src":"16147:86:19"}]},"documentation":{"id":5264,"nodeType":"StructuredDocumentation","src":"15936:38:19","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"0ddd60c6","id":5279,"implemented":true,"kind":"function","modifiers":[],"name":"computeAggregateFeePercentage","nameLocation":"15988:29:19","nodeType":"FunctionDefinition","parameters":{"id":5269,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5266,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"16035:21:19","nodeType":"VariableDeclaration","scope":5279,"src":"16027:29:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5265,"name":"uint256","nodeType":"ElementaryTypeName","src":"16027:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5268,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"16074:24:19","nodeType":"VariableDeclaration","scope":5279,"src":"16066:32:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5267,"name":"uint256","nodeType":"ElementaryTypeName","src":"16066:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16017:87:19"},"returnParameters":{"id":5272,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5271,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5279,"src":"16128:7:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5270,"name":"uint256","nodeType":"ElementaryTypeName","src":"16128:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16127:9:19"},"scope":6235,"src":"15979:261:19","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[515],"body":{"id":5316,"nodeType":"Block","src":"16374:347:19","statements":[{"assignments":[5290],"declarations":[{"constant":false,"id":5290,"mutability":"mutable","name":"feeConfig","nameLocation":"16405:9:19","nodeType":"VariableDeclaration","scope":5316,"src":"16384:30:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":5289,"nodeType":"UserDefinedTypeName","pathNode":{"id":5288,"name":"PoolFeeConfig","nameLocations":["16384:13:19"],"nodeType":"IdentifierPath","referencedDeclaration":4625,"src":"16384:13:19"},"referencedDeclaration":4625,"src":"16384:13:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":5294,"initialValue":{"baseExpression":{"id":5291,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4643,"src":"16417:31:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4625_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5293,"indexExpression":{"id":5292,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5282,"src":"16449:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16417:37:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"16384:70:19"},{"assignments":[5296],"declarations":[{"constant":false,"id":5296,"mutability":"mutable","name":"globalProtocolSwapFee","nameLocation":"16472:21:19","nodeType":"VariableDeclaration","scope":5316,"src":"16464:29:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5295,"name":"uint256","nodeType":"ElementaryTypeName","src":"16464:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5298,"initialValue":{"id":5297,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4636,"src":"16496:32:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16464:64:19"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":5299,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5290,"src":"16543:9:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":5300,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16553:10:19","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":4624,"src":"16543:20:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":5301,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16567:5:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"16543:29:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5303,"name":"globalProtocolSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5296,"src":"16576:21:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":5304,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5290,"src":"16601:9:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":5305,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16611:13:19","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":4622,"src":"16601:23:19","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"16576:48:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16543:81:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5315,"nodeType":"IfStatement","src":"16539:176:19","trueBody":{"id":5314,"nodeType":"Block","src":"16626:89:19","statements":[{"expression":{"arguments":[{"id":5309,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5282,"src":"16669:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5310,"name":"globalProtocolSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5296,"src":"16675:21:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":5311,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16698:5:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5308,"name":"_updatePoolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6175,"src":"16640:28:19","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":5312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16640:64:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5313,"nodeType":"ExpressionStatement","src":"16640:64:19"}]}}]},"documentation":{"id":5280,"nodeType":"StructuredDocumentation","src":"16246:38:19","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"71ecc8fb","id":5317,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":5285,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5282,"src":"16368:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5286,"kind":"modifierInvocation","modifierName":{"id":5284,"name":"withLatestFees","nameLocations":["16353:14:19"],"nodeType":"IdentifierPath","referencedDeclaration":4752,"src":"16353:14:19"},"nodeType":"ModifierInvocation","src":"16353:20:19"}],"name":"updateProtocolSwapFeePercentage","nameLocation":"16298:31:19","nodeType":"FunctionDefinition","parameters":{"id":5283,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5282,"mutability":"mutable","name":"pool","nameLocation":"16338:4:19","nodeType":"VariableDeclaration","scope":5317,"src":"16330:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5281,"name":"address","nodeType":"ElementaryTypeName","src":"16330:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16329:14:19"},"returnParameters":{"id":5287,"nodeType":"ParameterList","parameters":[],"src":"16374:0:19"},"scope":6235,"src":"16289:432:19","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[521],"body":{"id":5354,"nodeType":"Block","src":"16856:353:19","statements":[{"assignments":[5328],"declarations":[{"constant":false,"id":5328,"mutability":"mutable","name":"feeConfig","nameLocation":"16887:9:19","nodeType":"VariableDeclaration","scope":5354,"src":"16866:30:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":5327,"nodeType":"UserDefinedTypeName","pathNode":{"id":5326,"name":"PoolFeeConfig","nameLocations":["16866:13:19"],"nodeType":"IdentifierPath","referencedDeclaration":4625,"src":"16866:13:19"},"referencedDeclaration":4625,"src":"16866:13:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":5332,"initialValue":{"baseExpression":{"id":5329,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4648,"src":"16899:32:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4625_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5331,"indexExpression":{"id":5330,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5320,"src":"16932:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16899:38:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"16866:71:19"},{"assignments":[5334],"declarations":[{"constant":false,"id":5334,"mutability":"mutable","name":"globalProtocolYieldFee","nameLocation":"16955:22:19","nodeType":"VariableDeclaration","scope":5354,"src":"16947:30:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5333,"name":"uint256","nodeType":"ElementaryTypeName","src":"16947:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5336,"initialValue":{"id":5335,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4638,"src":"16980:33:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16947:66:19"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5345,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":5337,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5328,"src":"17028:9:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":5338,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17038:10:19","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":4624,"src":"17028:20:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":5339,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17052:5:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"17028:29:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5341,"name":"globalProtocolYieldFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5334,"src":"17061:22:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":5342,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5328,"src":"17087:9:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":5343,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17097:13:19","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":4622,"src":"17087:23:19","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17061:49:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"17028:82:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5353,"nodeType":"IfStatement","src":"17024:179:19","trueBody":{"id":5352,"nodeType":"Block","src":"17112:91:19","statements":[{"expression":{"arguments":[{"id":5347,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5320,"src":"17156:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5348,"name":"globalProtocolYieldFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5334,"src":"17162:22:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":5349,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17186:5:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5346,"name":"_updatePoolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6213,"src":"17126:29:19","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":5350,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17126:66:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5351,"nodeType":"ExpressionStatement","src":"17126:66:19"}]}}]},"documentation":{"id":5318,"nodeType":"StructuredDocumentation","src":"16727:38:19","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"71447ea8","id":5355,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":5323,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5320,"src":"16850:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5324,"kind":"modifierInvocation","modifierName":{"id":5322,"name":"withLatestFees","nameLocations":["16835:14:19"],"nodeType":"IdentifierPath","referencedDeclaration":4752,"src":"16835:14:19"},"nodeType":"ModifierInvocation","src":"16835:20:19"}],"name":"updateProtocolYieldFeePercentage","nameLocation":"16779:32:19","nodeType":"FunctionDefinition","parameters":{"id":5321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5320,"mutability":"mutable","name":"pool","nameLocation":"16820:4:19","nodeType":"VariableDeclaration","scope":5355,"src":"16812:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5319,"name":"address","nodeType":"ElementaryTypeName","src":"16812:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16811:14:19"},"returnParameters":{"id":5325,"nodeType":"ParameterList","parameters":[],"src":"16856:0:19"},"scope":6235,"src":"16770:439:19","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":5409,"nodeType":"Block","src":"17322:594:19","statements":[{"assignments":[5366],"declarations":[{"constant":false,"id":5366,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"17340:21:19","nodeType":"VariableDeclaration","scope":5409,"src":"17332:29:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5365,"name":"uint256","nodeType":"ElementaryTypeName","src":"17332:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5367,"nodeType":"VariableDeclarationStatement","src":"17332:29:19"},{"assignments":[5369],"declarations":[{"constant":false,"id":5369,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"17379:24:19","nodeType":"VariableDeclaration","scope":5409,"src":"17371:32:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5368,"name":"uint256","nodeType":"ElementaryTypeName","src":"17371:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5370,"nodeType":"VariableDeclarationStatement","src":"17371:32:19"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":5374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5371,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5360,"src":"17418:7:19","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":5372,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4619,"src":"17429:15:19","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4619_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":5373,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"17445:4:19","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":4617,"src":"17429:20:19","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"17418:31:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5402,"nodeType":"Block","src":"17634:179:19","statements":[{"expression":{"id":5394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5389,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5366,"src":"17648:21:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":5390,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4648,"src":"17672:32:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4625_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5392,"indexExpression":{"id":5391,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5357,"src":"17705:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17672:38:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":5393,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17711:13:19","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":4622,"src":"17672:52:19","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17648:76:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5395,"nodeType":"ExpressionStatement","src":"17648:76:19"},{"expression":{"id":5400,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5396,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5369,"src":"17738:24:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":5397,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4660,"src":"17765:31:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5399,"indexExpression":{"id":5398,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5357,"src":"17797:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17765:37:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17738:64:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5401,"nodeType":"ExpressionStatement","src":"17738:64:19"}]},"id":5403,"nodeType":"IfStatement","src":"17414:399:19","trueBody":{"id":5388,"nodeType":"Block","src":"17451:177:19","statements":[{"expression":{"id":5380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5375,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5366,"src":"17465:21:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":5376,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4643,"src":"17489:31:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4625_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5378,"indexExpression":{"id":5377,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5357,"src":"17521:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17489:37:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":5379,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17527:13:19","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":4622,"src":"17489:51:19","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17465:75:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5381,"nodeType":"ExpressionStatement","src":"17465:75:19"},{"expression":{"id":5386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5382,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5369,"src":"17554:24:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":5383,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4656,"src":"17581:30:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5385,"indexExpression":{"id":5384,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5357,"src":"17612:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17581:36:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17554:63:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5387,"nodeType":"ExpressionStatement","src":"17554:63:19"}]}},{"expression":{"arguments":[{"id":5405,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5366,"src":"17861:21:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5406,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5369,"src":"17884:24:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5404,"name":"_computeAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5440,"src":"17830:30:19","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5407,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17830:79:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5364,"id":5408,"nodeType":"Return","src":"17823:86:19"}]},"id":5410,"implemented":true,"kind":"function","modifiers":[],"name":"_getAggregateFeePercentage","nameLocation":"17224:26:19","nodeType":"FunctionDefinition","parameters":{"id":5361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5357,"mutability":"mutable","name":"pool","nameLocation":"17259:4:19","nodeType":"VariableDeclaration","scope":5410,"src":"17251:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5356,"name":"address","nodeType":"ElementaryTypeName","src":"17251:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5360,"mutability":"mutable","name":"feeType","nameLocation":"17281:7:19","nodeType":"VariableDeclaration","scope":5410,"src":"17265:23:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"typeName":{"id":5359,"nodeType":"UserDefinedTypeName","pathNode":{"id":5358,"name":"ProtocolFeeType","nameLocations":["17265:15:19"],"nodeType":"IdentifierPath","referencedDeclaration":4619,"src":"17265:15:19"},"referencedDeclaration":4619,"src":"17265:15:19","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"visibility":"internal"}],"src":"17250:39:19"},"returnParameters":{"id":5364,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5363,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5410,"src":"17313:7:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5362,"name":"uint256","nodeType":"ElementaryTypeName","src":"17313:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17312:9:19"},"scope":6235,"src":"17215:701:19","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":5439,"nodeType":"Block","src":"18104:882:19","statements":[{"expression":{"id":5428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5419,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5417,"src":"18114:22:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5420,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5412,"src":"18151:21:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"id":5425,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5414,"src":"18230:24:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5421,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5412,"src":"18187:21:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18209:10:19","memberName":"complement","nodeType":"MemberAccess","referencedDeclaration":2933,"src":"18187:32:19","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":5423,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18187:34:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18222:7:19","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":2679,"src":"18187:42:19","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":5426,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18187:68:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18151:104:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18114:141:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5429,"nodeType":"ExpressionStatement","src":"18114:141:19"},{"expression":{"id":5437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5430,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5417,"src":"18888:22:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5431,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5417,"src":"18914:22:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":5432,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2408,"src":"18939:18:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18914:43:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":5434,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18913:45:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":5435,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2408,"src":"18961:18:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18913:66:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18888:91:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5438,"nodeType":"ExpressionStatement","src":"18888:91:19"}]},"id":5440,"implemented":true,"kind":"function","modifiers":[],"name":"_computeAggregateFeePercentage","nameLocation":"17931:30:19","nodeType":"FunctionDefinition","parameters":{"id":5415,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5412,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"17979:21:19","nodeType":"VariableDeclaration","scope":5440,"src":"17971:29:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5411,"name":"uint256","nodeType":"ElementaryTypeName","src":"17971:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5414,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"18018:24:19","nodeType":"VariableDeclaration","scope":5440,"src":"18010:32:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5413,"name":"uint256","nodeType":"ElementaryTypeName","src":"18010:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17961:87:19"},"returnParameters":{"id":5418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5417,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"18080:22:19","nodeType":"VariableDeclaration","scope":5440,"src":"18072:30:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5416,"name":"uint256","nodeType":"ElementaryTypeName","src":"18072:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18071:32:19"},"scope":6235,"src":"17922:1064:19","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5475,"nodeType":"Block","src":"19056:276:19","statements":[{"assignments":[5446],"declarations":[{"constant":false,"id":5446,"mutability":"mutable","name":"poolCreator","nameLocation":"19074:11:19","nodeType":"VariableDeclaration","scope":5475,"src":"19066:19:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5445,"name":"address","nodeType":"ElementaryTypeName","src":"19066:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":5450,"initialValue":{"arguments":[{"id":5448,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5442,"src":"19104:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5447,"name":"_getPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5519,"src":"19088:15:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_address_$","typeString":"function (address) view returns (address)"}},"id":5449,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19088:21:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"19066:43:19"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5451,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5446,"src":"19124:11:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":5454,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19147:1:19","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":5453,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19139:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5452,"name":"address","nodeType":"ElementaryTypeName","src":"19139:7:19","typeDescriptions":{}}},"id":5455,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19139:10:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"19124:25:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5462,"nodeType":"IfStatement","src":"19120:93:19","trueBody":{"id":5461,"nodeType":"Block","src":"19151:62:19","statements":[{"errorCall":{"arguments":[{"id":5458,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5442,"src":"19197:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5457,"name":"PoolCreatorNotRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":402,"src":"19172:24:19","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":5459,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19172:30:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5460,"nodeType":"RevertStatement","src":"19165:37:19"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5463,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5446,"src":"19227:11:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":5464,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19242:3:19","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19246:6:19","memberName":"sender","nodeType":"MemberAccess","src":"19242:10:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"19227:25:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5474,"nodeType":"IfStatement","src":"19223:103:19","trueBody":{"id":5473,"nodeType":"Block","src":"19254:72:19","statements":[{"errorCall":{"arguments":[{"expression":{"id":5468,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19298:3:19","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19302:6:19","memberName":"sender","nodeType":"MemberAccess","src":"19298:10:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5470,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5442,"src":"19310:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":5467,"name":"CallerIsNotPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":409,"src":"19275:22:19","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address) pure returns (error)"}},"id":5471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19275:40:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5472,"nodeType":"RevertStatement","src":"19268:47:19"}]}}]},"id":5476,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureCallerIsPoolCreator","nameLocation":"19001:26:19","nodeType":"FunctionDefinition","parameters":{"id":5443,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5442,"mutability":"mutable","name":"pool","nameLocation":"19036:4:19","nodeType":"VariableDeclaration","scope":5476,"src":"19028:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5441,"name":"address","nodeType":"ElementaryTypeName","src":"19028:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19027:14:19"},"returnParameters":{"id":5444,"nodeType":"ParameterList","parameters":[],"src":"19056:0:19"},"scope":6235,"src":"18992:340:19","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":5499,"nodeType":"Block","src":"19450:87:19","statements":[{"expression":{"id":5492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5487,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5483,"src":"19460:6:19","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6591_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5490,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5478,"src":"19490:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5488,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6304,"src":"19469:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":5489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19476:13:19","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":1685,"src":"19469:20:19","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$6591_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":5491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19469:26:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6591_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"src":"19460:35:19","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6591_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":5493,"nodeType":"ExpressionStatement","src":"19460:35:19"},{"expression":{"id":5497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5494,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5485,"src":"19505:9:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":5495,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5483,"src":"19517:6:19","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6591_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":5496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19524:6:19","memberName":"length","nodeType":"MemberAccess","src":"19517:13:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19505:25:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5498,"nodeType":"ExpressionStatement","src":"19505:25:19"}]},"id":5500,"implemented":true,"kind":"function","modifiers":[],"name":"_getPoolTokensAndCount","nameLocation":"19347:22:19","nodeType":"FunctionDefinition","parameters":{"id":5479,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5478,"mutability":"mutable","name":"pool","nameLocation":"19378:4:19","nodeType":"VariableDeclaration","scope":5500,"src":"19370:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5477,"name":"address","nodeType":"ElementaryTypeName","src":"19370:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19369:14:19"},"returnParameters":{"id":5486,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5483,"mutability":"mutable","name":"tokens","nameLocation":"19423:6:19","nodeType":"VariableDeclaration","scope":5500,"src":"19407:22:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6591_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":5481,"nodeType":"UserDefinedTypeName","pathNode":{"id":5480,"name":"IERC20","nameLocations":["19407:6:19"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"19407:6:19"},"referencedDeclaration":6591,"src":"19407:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"id":5482,"nodeType":"ArrayTypeName","src":"19407:8:19","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6591_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":5485,"mutability":"mutable","name":"numTokens","nameLocation":"19439:9:19","nodeType":"VariableDeclaration","scope":5500,"src":"19431:17:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5484,"name":"uint256","nodeType":"ElementaryTypeName","src":"19431:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19406:43:19"},"scope":6235,"src":"19338:199:19","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":5518,"nodeType":"Block","src":"19674:130:19","statements":[{"assignments":[5509],"declarations":[{"constant":false,"id":5509,"mutability":"mutable","name":"roleAccounts","nameLocation":"19708:12:19","nodeType":"VariableDeclaration","scope":5518,"src":"19684:36:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":5508,"nodeType":"UserDefinedTypeName","pathNode":{"id":5507,"name":"PoolRoleAccounts","nameLocations":["19684:16:19"],"nodeType":"IdentifierPath","referencedDeclaration":2217,"src":"19684:16:19"},"referencedDeclaration":2217,"src":"19684:16:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"id":5514,"initialValue":{"arguments":[{"id":5512,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5502,"src":"19750:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5510,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6304,"src":"19723:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":5511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19730:19:19","memberName":"getPoolRoleAccounts","nodeType":"MemberAccess","referencedDeclaration":1882,"src":"19723:26:19","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_PoolRoleAccounts_$2217_memory_ptr_$","typeString":"function (address) view external returns (struct PoolRoleAccounts memory)"}},"id":5513,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19723:32:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"nodeType":"VariableDeclarationStatement","src":"19684:71:19"},{"expression":{"expression":{"id":5515,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5509,"src":"19773:12:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$2217_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"id":5516,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19786:11:19","memberName":"poolCreator","nodeType":"MemberAccess","referencedDeclaration":2216,"src":"19773:24:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":5506,"id":5517,"nodeType":"Return","src":"19766:31:19"}]},"id":5519,"implemented":true,"kind":"function","modifiers":[],"name":"_getPoolCreator","nameLocation":"19612:15:19","nodeType":"FunctionDefinition","parameters":{"id":5503,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5502,"mutability":"mutable","name":"pool","nameLocation":"19636:4:19","nodeType":"VariableDeclaration","scope":5519,"src":"19628:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5501,"name":"address","nodeType":"ElementaryTypeName","src":"19628:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19627:14:19"},"returnParameters":{"id":5506,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5505,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5519,"src":"19665:7:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5504,"name":"address","nodeType":"ElementaryTypeName","src":"19665:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19664:9:19"},"scope":6235,"src":"19603:201:19","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":5637,"nodeType":"Block","src":"21015:1936:19","statements":[{"assignments":[5527],"declarations":[{"constant":false,"id":5527,"mutability":"mutable","name":"oldFeeController","nameLocation":"21048:16:19","nodeType":"VariableDeclaration","scope":5637,"src":"21025:39:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"},"typeName":{"id":5526,"nodeType":"UserDefinedTypeName","pathNode":{"id":5525,"name":"IProtocolFeeController","nameLocations":["21025:22:19"],"nodeType":"IdentifierPath","referencedDeclaration":613,"src":"21025:22:19"},"referencedDeclaration":613,"src":"21025:22:19","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"id":5531,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5528,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6304,"src":"21067:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":5529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21074:24:19","memberName":"getProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":1900,"src":"21067:31:19","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IProtocolFeeController_$613_$","typeString":"function () view external returns (contract IProtocolFeeController)"}},"id":5530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21067:33:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"nodeType":"VariableDeclarationStatement","src":"21025:75:19"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":5534,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5527,"src":"21123:16:19","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}],"id":5533,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21115:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5532,"name":"address","nodeType":"ElementaryTypeName","src":"21115:7:19","typeDescriptions":{}}},"id":5535,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21115:25:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":5538,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"21152:4:19","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$6235","typeString":"contract ProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeController_$6235","typeString":"contract ProtocolFeeController"}],"id":5537,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21144:7:19","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5536,"name":"address","nodeType":"ElementaryTypeName","src":"21144:7:19","typeDescriptions":{}}},"id":5539,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21144:13:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21115:42:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5545,"nodeType":"IfStatement","src":"21111:104:19","trueBody":{"id":5544,"nodeType":"Block","src":"21159:56:19","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5541,"name":"InvalidMigrationSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4682,"src":"21180:22:19","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5542,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21180:24:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5543,"nodeType":"RevertStatement","src":"21173:31:19"}]}},{"condition":{"baseExpression":{"id":5546,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4652,"src":"21229:16:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":5548,"indexExpression":{"id":5547,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5522,"src":"21246:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21229:22:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5554,"nodeType":"IfStatement","src":"21225:87:19","trueBody":{"id":5553,"nodeType":"Block","src":"21253:59:19","statements":[{"errorCall":{"arguments":[{"id":5550,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5522,"src":"21296:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5549,"name":"PoolAlreadyRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4679,"src":"21274:21:19","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":5551,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21274:27:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5552,"nodeType":"RevertStatement","src":"21267:34:19"}]}},{"expression":{"id":5559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5555,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4652,"src":"21322:16:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":5557,"indexExpression":{"id":5556,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5522,"src":"21339:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21322:22:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":5558,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"21347:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"21322:29:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5560,"nodeType":"ExpressionStatement","src":"21322:29:19"},{"assignments":[5562,5564],"declarations":[{"constant":false,"id":5562,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"21371:25:19","nodeType":"VariableDeclaration","scope":5637,"src":"21363:33:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5561,"name":"uint256","nodeType":"ElementaryTypeName","src":"21363:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5564,"mutability":"mutable","name":"swapFeeIsOverride","nameLocation":"21403:17:19","nodeType":"VariableDeclaration","scope":5637,"src":"21398:22:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5563,"name":"bool","nodeType":"ElementaryTypeName","src":"21398:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":5569,"initialValue":{"arguments":[{"id":5567,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5522,"src":"21468:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5565,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5527,"src":"21424:16:19","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":5566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21441:26:19","memberName":"getPoolProtocolSwapFeeInfo","nodeType":"MemberAccess","referencedDeclaration":455,"src":"21424:43:19","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$_t_bool_$","typeString":"function (address) view external returns (uint256,bool)"}},"id":5568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21424:49:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"21362:111:19"},{"expression":{"id":5579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5570,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4643,"src":"21483:31:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4625_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5572,"indexExpression":{"id":5571,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5522,"src":"21515:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21483:37:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5574,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5562,"src":"21566:25:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21592:8:19","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":7895,"src":"21566:34:19","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":5576,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21566:36:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":5577,"name":"swapFeeIsOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5564,"src":"21628:17:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5573,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4625,"src":"21523:13:19","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$4625_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":5578,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["21551:13:19","21616:10:19"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"21523:133:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"21483:173:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":5580,"nodeType":"ExpressionStatement","src":"21483:173:19"},{"assignments":[5582,5584],"declarations":[{"constant":false,"id":5582,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"21676:26:19","nodeType":"VariableDeclaration","scope":5637,"src":"21668:34:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5581,"name":"uint256","nodeType":"ElementaryTypeName","src":"21668:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5584,"mutability":"mutable","name":"yieldFeeIsOverride","nameLocation":"21709:18:19","nodeType":"VariableDeclaration","scope":5637,"src":"21704:23:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5583,"name":"bool","nodeType":"ElementaryTypeName","src":"21704:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":5589,"initialValue":{"arguments":[{"id":5587,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5522,"src":"21789:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5585,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5527,"src":"21731:16:19","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":5586,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21748:27:19","memberName":"getPoolProtocolYieldFeeInfo","nodeType":"MemberAccess","referencedDeclaration":465,"src":"21731:44:19","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$_t_bool_$","typeString":"function (address) view external returns (uint256,bool)"}},"id":5588,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21731:72:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"21667:136:19"},{"expression":{"id":5599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5590,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4648,"src":"21813:32:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4625_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5592,"indexExpression":{"id":5591,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5522,"src":"21846:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21813:38:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5594,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5582,"src":"21897:26:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21924:8:19","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":7895,"src":"21897:35:19","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":5596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21897:37:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":5597,"name":"yieldFeeIsOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5584,"src":"21960:18:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5593,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4625,"src":"21854:13:19","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$4625_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":5598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["21882:13:19","21948:10:19"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"21854:135:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"21813:176:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":5600,"nodeType":"ExpressionStatement","src":"21813:176:19"},{"clauses":[{"block":{"id":5614,"nodeType":"Block","src":"22623:92:19","statements":[{"expression":{"id":5612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5608,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4656,"src":"22637:30:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5610,"indexExpression":{"id":5609,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5522,"src":"22668:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22637:36:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5611,"name":"poolCreatorSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5606,"src":"22676:28:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22637:67:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5613,"nodeType":"ExpressionStatement","src":"22637:67:19"}]},"errorName":"","id":5615,"nodeType":"TryCatchClause","parameters":{"id":5607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5606,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"22593:28:19","nodeType":"VariableDeclaration","scope":5615,"src":"22585:36:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5605,"name":"uint256","nodeType":"ElementaryTypeName","src":"22585:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22584:38:19"},"src":"22576:139:19"},{"block":{"id":5616,"nodeType":"Block","src":"22722:2:19","statements":[]},"errorName":"","id":5617,"nodeType":"TryCatchClause","src":"22716:8:19"}],"externalCall":{"arguments":[{"id":5603,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5522,"src":"22570:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5601,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5527,"src":"22521:16:19","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":5602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22538:31:19","memberName":"getPoolCreatorSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":473,"src":"22521:48:19","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":5604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22521:54:19","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5618,"nodeType":"TryStatement","src":"22517:207:19"},{"clauses":[{"block":{"id":5632,"nodeType":"Block","src":"22842:94:19","statements":[{"expression":{"id":5630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5626,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4660,"src":"22856:31:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5628,"indexExpression":{"id":5627,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5522,"src":"22888:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22856:37:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5629,"name":"poolCreatorYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5624,"src":"22896:29:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22856:69:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5631,"nodeType":"ExpressionStatement","src":"22856:69:19"}]},"errorName":"","id":5633,"nodeType":"TryCatchClause","parameters":{"id":5625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5624,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"22811:29:19","nodeType":"VariableDeclaration","scope":5633,"src":"22803:37:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5623,"name":"uint256","nodeType":"ElementaryTypeName","src":"22803:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22802:39:19"},"src":"22794:142:19"},{"block":{"id":5634,"nodeType":"Block","src":"22943:2:19","statements":[]},"errorName":"","id":5635,"nodeType":"TryCatchClause","src":"22937:8:19"}],"externalCall":{"arguments":[{"id":5621,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5522,"src":"22788:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5619,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5527,"src":"22738:16:19","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":5620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22755:32:19","memberName":"getPoolCreatorYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":481,"src":"22738:49:19","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":5622,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22738:55:19","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5636,"nodeType":"TryStatement","src":"22734:211:19"}]},"documentation":{"id":5520,"nodeType":"StructuredDocumentation","src":"20021:945:19","text":" @notice Not exposed in the interface, this enables migration of hidden pool state.\n @dev Permission should NEVER be granted to this function outside of a migration contract. It is necessary to\n permit migration of the `ProtocolFeeController` with all state (in particular, protocol fee overrides and pool\n creator fees) that cannot be written outside of the `registerPool` function called by the Vault during pool\n deployment.\n Even if governance were to grant permission to call this function, the `_registeredPools` latch keeps it safe,\n guaranteeing that it is impossible to use this function to change anything after registration. A pool can only\n be registered / configured once - either copied to a new controller in the migration context, or added normally\n through the Vault calling `registerPool`.\n @param pool The address of the pool to be migrated"},"functionSelector":"0874327f","id":5638,"implemented":true,"kind":"function","modifiers":[],"name":"migratePool","nameLocation":"20980:11:19","nodeType":"FunctionDefinition","parameters":{"id":5523,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5522,"mutability":"mutable","name":"pool","nameLocation":"21000:4:19","nodeType":"VariableDeclaration","scope":5638,"src":"20992:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5521,"name":"address","nodeType":"ElementaryTypeName","src":"20992:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"20991:14:19"},"returnParameters":{"id":5524,"nodeType":"ParameterList","parameters":[],"src":"21015:0:19"},"scope":6235,"src":"20971:1980:19","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[535],"body":{"id":5714,"nodeType":"Block","src":"23430:1540:19","statements":[{"expression":{"id":5658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5654,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4652,"src":"23440:16:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":5656,"indexExpression":{"id":5655,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5641,"src":"23457:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23440:22:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":5657,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"23465:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"23440:29:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5659,"nodeType":"ExpressionStatement","src":"23440:29:19"},{"expression":{"id":5665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5660,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5650,"src":"23569:26:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"id":5661,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5645,"src":"23598:17:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":5663,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4636,"src":"23622:32:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"23598:56:19","trueExpression":{"hexValue":"30","id":5662,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23618:1:19","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23569:85:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5666,"nodeType":"ExpressionStatement","src":"23569:85:19"},{"expression":{"id":5672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5667,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5652,"src":"23664:27:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"id":5668,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5645,"src":"23694:17:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":5670,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4638,"src":"23718:33:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"23694:57:19","trueExpression":{"hexValue":"30","id":5669,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23714:1:19","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23664:87:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5673,"nodeType":"ExpressionStatement","src":"23664:87:19"},{"expression":{"id":5683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5674,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4643,"src":"24199:31:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4625_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5676,"indexExpression":{"id":5675,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5641,"src":"24231:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24199:37:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5678,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5650,"src":"24282:26:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24309:8:19","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":7895,"src":"24282:35:19","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":5680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24282:37:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":5681,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5645,"src":"24345:17:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5677,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4625,"src":"24239:13:19","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$4625_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":5682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["24267:13:19","24333:10:19"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"24239:134:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"24199:174:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":5684,"nodeType":"ExpressionStatement","src":"24199:174:19"},{"expression":{"id":5694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5685,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4648,"src":"24383:32:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4625_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":5687,"indexExpression":{"id":5686,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5641,"src":"24416:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24383:38:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5689,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5652,"src":"24467:27:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24495:8:19","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":7895,"src":"24467:36:19","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":5691,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24467:38:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":5692,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5645,"src":"24531:17:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5688,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4625,"src":"24424:13:19","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$4625_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":5693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["24452:13:19","24519:10:19"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"24424:135:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"24383:176:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":5695,"nodeType":"ExpressionStatement","src":"24383:176:19"},{"eventCall":{"arguments":[{"id":5697,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5641,"src":"24719:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5698,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5650,"src":"24725:26:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5699,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5645,"src":"24753:17:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5696,"name":"InitialPoolAggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":373,"src":"24681:37:19","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":5700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24681:90:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5701,"nodeType":"EmitStatement","src":"24676:95:19"},{"eventCall":{"arguments":[{"id":5703,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5641,"src":"24825:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5704,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5652,"src":"24831:27:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5705,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5645,"src":"24860:17:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5702,"name":"InitialPoolAggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":382,"src":"24786:38:19","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":5706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24786:92:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5707,"nodeType":"EmitStatement","src":"24781:97:19"},{"eventCall":{"arguments":[{"id":5709,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5641,"src":"24926:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5710,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5643,"src":"24932:11:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5711,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5645,"src":"24945:17:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5708,"name":"PoolRegisteredWithFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":391,"src":"24894:31:19","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,bool)"}},"id":5712,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24894:69:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5713,"nodeType":"EmitStatement","src":"24889:74:19"}]},"documentation":{"id":5639,"nodeType":"StructuredDocumentation","src":"23175:38:19","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"77ff76e7","id":5715,"implemented":true,"kind":"function","modifiers":[{"id":5648,"kind":"modifierInvocation","modifierName":{"id":5647,"name":"onlyVault","nameLocations":["23338:9:19"],"nodeType":"IdentifierPath","referencedDeclaration":6322,"src":"23338:9:19"},"nodeType":"ModifierInvocation","src":"23338:9:19"}],"name":"registerPool","nameLocation":"23227:12:19","nodeType":"FunctionDefinition","parameters":{"id":5646,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5641,"mutability":"mutable","name":"pool","nameLocation":"23257:4:19","nodeType":"VariableDeclaration","scope":5715,"src":"23249:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5640,"name":"address","nodeType":"ElementaryTypeName","src":"23249:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5643,"mutability":"mutable","name":"poolCreator","nameLocation":"23279:11:19","nodeType":"VariableDeclaration","scope":5715,"src":"23271:19:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5642,"name":"address","nodeType":"ElementaryTypeName","src":"23271:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5645,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"23305:17:19","nodeType":"VariableDeclaration","scope":5715,"src":"23300:22:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5644,"name":"bool","nodeType":"ElementaryTypeName","src":"23300:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"23239:89:19"},"returnParameters":{"id":5653,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5650,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"23365:26:19","nodeType":"VariableDeclaration","scope":5715,"src":"23357:34:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5649,"name":"uint256","nodeType":"ElementaryTypeName","src":"23357:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5652,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"23401:27:19","nodeType":"VariableDeclaration","scope":5715,"src":"23393:35:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5651,"name":"uint256","nodeType":"ElementaryTypeName","src":"23393:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23356:73:19"},"scope":6235,"src":"23218:1752:19","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[541],"body":{"id":5734,"nodeType":"Block","src":"25184:164:19","statements":[{"expression":{"id":5728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5726,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4636,"src":"25194:32:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5727,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5718,"src":"25229:28:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25194:63:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5729,"nodeType":"ExpressionStatement","src":"25194:63:19"},{"eventCall":{"arguments":[{"id":5731,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5718,"src":"25312:28:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5730,"name":"GlobalProtocolSwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":287,"src":"25273:38:19","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":5732,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25273:68:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5733,"nodeType":"EmitStatement","src":"25268:73:19"}]},"documentation":{"id":5716,"nodeType":"StructuredDocumentation","src":"24976:38:19","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"8a3c5c69","id":5735,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":5721,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5718,"src":"25141:28:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":5722,"kind":"modifierInvocation","modifierName":{"id":5720,"name":"withValidSwapFee","nameLocations":["25124:16:19"],"nodeType":"IdentifierPath","referencedDeclaration":4710,"src":"25124:16:19"},"nodeType":"ModifierInvocation","src":"25124:46:19"},{"id":5724,"kind":"modifierInvocation","modifierName":{"id":5723,"name":"authenticate","nameLocations":["25171:12:19"],"nodeType":"IdentifierPath","referencedDeclaration":2439,"src":"25171:12:19"},"nodeType":"ModifierInvocation","src":"25171:12:19"}],"name":"setGlobalProtocolSwapFeePercentage","nameLocation":"25028:34:19","nodeType":"FunctionDefinition","parameters":{"id":5719,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5718,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"25080:28:19","nodeType":"VariableDeclaration","scope":5735,"src":"25072:36:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5717,"name":"uint256","nodeType":"ElementaryTypeName","src":"25072:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25062:52:19"},"returnParameters":{"id":5725,"nodeType":"ParameterList","parameters":[],"src":"25184:0:19"},"scope":6235,"src":"25019:329:19","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[547],"body":{"id":5754,"nodeType":"Block","src":"25566:168:19","statements":[{"expression":{"id":5748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5746,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4638,"src":"25576:33:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5747,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5738,"src":"25612:29:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25576:65:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5749,"nodeType":"ExpressionStatement","src":"25576:65:19"},{"eventCall":{"arguments":[{"id":5751,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5738,"src":"25697:29:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5750,"name":"GlobalProtocolYieldFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":292,"src":"25657:39:19","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":5752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25657:70:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5753,"nodeType":"EmitStatement","src":"25652:75:19"}]},"documentation":{"id":5736,"nodeType":"StructuredDocumentation","src":"25354:38:19","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"a93df2a4","id":5755,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":5741,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5738,"src":"25522:29:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":5742,"kind":"modifierInvocation","modifierName":{"id":5740,"name":"withValidYieldFee","nameLocations":["25504:17:19"],"nodeType":"IdentifierPath","referencedDeclaration":4728,"src":"25504:17:19"},"nodeType":"ModifierInvocation","src":"25504:48:19"},{"id":5744,"kind":"modifierInvocation","modifierName":{"id":5743,"name":"authenticate","nameLocations":["25553:12:19"],"nodeType":"IdentifierPath","referencedDeclaration":2439,"src":"25553:12:19"},"nodeType":"ModifierInvocation","src":"25553:12:19"}],"name":"setGlobalProtocolYieldFeePercentage","nameLocation":"25406:35:19","nodeType":"FunctionDefinition","parameters":{"id":5739,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5738,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"25459:29:19","nodeType":"VariableDeclaration","scope":5755,"src":"25451:37:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5737,"name":"uint256","nodeType":"ElementaryTypeName","src":"25451:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25441:53:19"},"returnParameters":{"id":5745,"nodeType":"ParameterList","parameters":[],"src":"25566:0:19"},"scope":6235,"src":"25397:337:19","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[555],"body":{"id":5777,"nodeType":"Block","src":"25985:87:19","statements":[{"expression":{"arguments":[{"id":5772,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5758,"src":"26024:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5773,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5760,"src":"26030:28:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":5774,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"26060:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5771,"name":"_updatePoolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6175,"src":"25995:28:19","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":5775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25995:70:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5776,"nodeType":"ExpressionStatement","src":"25995:70:19"}]},"documentation":{"id":5756,"nodeType":"StructuredDocumentation","src":"25740:38:19","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"fd267f39","id":5778,"implemented":true,"kind":"function","modifiers":[{"id":5763,"kind":"modifierInvocation","modifierName":{"id":5762,"name":"authenticate","nameLocations":["25904:12:19"],"nodeType":"IdentifierPath","referencedDeclaration":2439,"src":"25904:12:19"},"nodeType":"ModifierInvocation","src":"25904:12:19"},{"arguments":[{"id":5765,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5760,"src":"25934:28:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":5766,"kind":"modifierInvocation","modifierName":{"id":5764,"name":"withValidSwapFee","nameLocations":["25917:16:19"],"nodeType":"IdentifierPath","referencedDeclaration":4710,"src":"25917:16:19"},"nodeType":"ModifierInvocation","src":"25917:46:19"},{"arguments":[{"id":5768,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5758,"src":"25979:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5769,"kind":"modifierInvocation","modifierName":{"id":5767,"name":"withLatestFees","nameLocations":["25964:14:19"],"nodeType":"IdentifierPath","referencedDeclaration":4752,"src":"25964:14:19"},"nodeType":"ModifierInvocation","src":"25964:20:19"}],"name":"setProtocolSwapFeePercentage","nameLocation":"25792:28:19","nodeType":"FunctionDefinition","parameters":{"id":5761,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5758,"mutability":"mutable","name":"pool","nameLocation":"25838:4:19","nodeType":"VariableDeclaration","scope":5778,"src":"25830:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5757,"name":"address","nodeType":"ElementaryTypeName","src":"25830:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5760,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"25860:28:19","nodeType":"VariableDeclaration","scope":5778,"src":"25852:36:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5759,"name":"uint256","nodeType":"ElementaryTypeName","src":"25852:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25820:74:19"},"returnParameters":{"id":5770,"nodeType":"ParameterList","parameters":[],"src":"25985:0:19"},"scope":6235,"src":"25783:289:19","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[563],"body":{"id":5800,"nodeType":"Block","src":"26327:89:19","statements":[{"expression":{"arguments":[{"id":5795,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5781,"src":"26367:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5796,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5783,"src":"26373:29:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":5797,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"26404:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":5794,"name":"_updatePoolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6213,"src":"26337:29:19","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":5798,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26337:72:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5799,"nodeType":"ExpressionStatement","src":"26337:72:19"}]},"documentation":{"id":5779,"nodeType":"StructuredDocumentation","src":"26078:38:19","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"abaa3356","id":5801,"implemented":true,"kind":"function","modifiers":[{"id":5786,"kind":"modifierInvocation","modifierName":{"id":5785,"name":"authenticate","nameLocations":["26244:12:19"],"nodeType":"IdentifierPath","referencedDeclaration":2439,"src":"26244:12:19"},"nodeType":"ModifierInvocation","src":"26244:12:19"},{"arguments":[{"id":5788,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5783,"src":"26275:29:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":5789,"kind":"modifierInvocation","modifierName":{"id":5787,"name":"withValidYieldFee","nameLocations":["26257:17:19"],"nodeType":"IdentifierPath","referencedDeclaration":4728,"src":"26257:17:19"},"nodeType":"ModifierInvocation","src":"26257:48:19"},{"arguments":[{"id":5791,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5781,"src":"26321:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5792,"kind":"modifierInvocation","modifierName":{"id":5790,"name":"withLatestFees","nameLocations":["26306:14:19"],"nodeType":"IdentifierPath","referencedDeclaration":4752,"src":"26306:14:19"},"nodeType":"ModifierInvocation","src":"26306:20:19"}],"name":"setProtocolYieldFeePercentage","nameLocation":"26130:29:19","nodeType":"FunctionDefinition","parameters":{"id":5784,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5781,"mutability":"mutable","name":"pool","nameLocation":"26177:4:19","nodeType":"VariableDeclaration","scope":5801,"src":"26169:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5780,"name":"address","nodeType":"ElementaryTypeName","src":"26169:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5783,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"26199:29:19","nodeType":"VariableDeclaration","scope":5801,"src":"26191:37:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5782,"name":"uint256","nodeType":"ElementaryTypeName","src":"26191:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26159:75:19"},"returnParameters":{"id":5793,"nodeType":"ParameterList","parameters":[],"src":"26327:0:19"},"scope":6235,"src":"26121:295:19","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[571],"body":{"id":5825,"nodeType":"Block","src":"26686:103:19","statements":[{"expression":{"arguments":[{"id":5819,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5804,"src":"26725:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5820,"name":"poolCreatorSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5806,"src":"26731:28:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":5821,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4619,"src":"26761:15:19","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4619_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":5822,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"26777:4:19","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":4617,"src":"26761:20:19","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":5818,"name":"_setPoolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5913,"src":"26696:28:19","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_enum$_ProtocolFeeType_$4619_$returns$__$","typeString":"function (address,uint256,enum ProtocolFeeController.ProtocolFeeType)"}},"id":5823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26696:86:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5824,"nodeType":"ExpressionStatement","src":"26696:86:19"}]},"documentation":{"id":5802,"nodeType":"StructuredDocumentation","src":"26422:38:19","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"1377c16c","id":5826,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":5809,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5804,"src":"26605:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5810,"kind":"modifierInvocation","modifierName":{"id":5808,"name":"onlyPoolCreator","nameLocations":["26589:15:19"],"nodeType":"IdentifierPath","referencedDeclaration":4692,"src":"26589:15:19"},"nodeType":"ModifierInvocation","src":"26589:21:19"},{"arguments":[{"id":5812,"name":"poolCreatorSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5806,"src":"26635:28:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":5813,"kind":"modifierInvocation","modifierName":{"id":5811,"name":"withValidPoolCreatorFee","nameLocations":["26611:23:19"],"nodeType":"IdentifierPath","referencedDeclaration":4742,"src":"26611:23:19"},"nodeType":"ModifierInvocation","src":"26611:53:19"},{"arguments":[{"id":5815,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5804,"src":"26680:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5816,"kind":"modifierInvocation","modifierName":{"id":5814,"name":"withLatestFees","nameLocations":["26665:14:19"],"nodeType":"IdentifierPath","referencedDeclaration":4752,"src":"26665:14:19"},"nodeType":"ModifierInvocation","src":"26665:20:19"}],"name":"setPoolCreatorSwapFeePercentage","nameLocation":"26474:31:19","nodeType":"FunctionDefinition","parameters":{"id":5807,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5804,"mutability":"mutable","name":"pool","nameLocation":"26523:4:19","nodeType":"VariableDeclaration","scope":5826,"src":"26515:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5803,"name":"address","nodeType":"ElementaryTypeName","src":"26515:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5806,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"26545:28:19","nodeType":"VariableDeclaration","scope":5826,"src":"26537:36:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5805,"name":"uint256","nodeType":"ElementaryTypeName","src":"26537:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26505:74:19"},"returnParameters":{"id":5817,"nodeType":"ParameterList","parameters":[],"src":"26686:0:19"},"scope":6235,"src":"26465:324:19","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[579],"body":{"id":5850,"nodeType":"Block","src":"27062:105:19","statements":[{"expression":{"arguments":[{"id":5844,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5829,"src":"27101:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5845,"name":"poolCreatorYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5831,"src":"27107:29:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":5846,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4619,"src":"27138:15:19","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4619_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":5847,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"27154:5:19","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":4618,"src":"27138:21:19","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":5843,"name":"_setPoolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5913,"src":"27072:28:19","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_enum$_ProtocolFeeType_$4619_$returns$__$","typeString":"function (address,uint256,enum ProtocolFeeController.ProtocolFeeType)"}},"id":5848,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27072:88:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5849,"nodeType":"ExpressionStatement","src":"27072:88:19"}]},"documentation":{"id":5827,"nodeType":"StructuredDocumentation","src":"26795:38:19","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"3af52712","id":5851,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":5834,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5829,"src":"26980:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5835,"kind":"modifierInvocation","modifierName":{"id":5833,"name":"onlyPoolCreator","nameLocations":["26964:15:19"],"nodeType":"IdentifierPath","referencedDeclaration":4692,"src":"26964:15:19"},"nodeType":"ModifierInvocation","src":"26964:21:19"},{"arguments":[{"id":5837,"name":"poolCreatorYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5831,"src":"27010:29:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":5838,"kind":"modifierInvocation","modifierName":{"id":5836,"name":"withValidPoolCreatorFee","nameLocations":["26986:23:19"],"nodeType":"IdentifierPath","referencedDeclaration":4742,"src":"26986:23:19"},"nodeType":"ModifierInvocation","src":"26986:54:19"},{"arguments":[{"id":5840,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5829,"src":"27056:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5841,"kind":"modifierInvocation","modifierName":{"id":5839,"name":"withLatestFees","nameLocations":["27041:14:19"],"nodeType":"IdentifierPath","referencedDeclaration":4752,"src":"27041:14:19"},"nodeType":"ModifierInvocation","src":"27041:20:19"}],"name":"setPoolCreatorYieldFeePercentage","nameLocation":"26847:32:19","nodeType":"FunctionDefinition","parameters":{"id":5832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5829,"mutability":"mutable","name":"pool","nameLocation":"26897:4:19","nodeType":"VariableDeclaration","scope":5851,"src":"26889:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5828,"name":"address","nodeType":"ElementaryTypeName","src":"26889:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5831,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"26919:29:19","nodeType":"VariableDeclaration","scope":5851,"src":"26911:37:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5830,"name":"uint256","nodeType":"ElementaryTypeName","src":"26911:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26879:75:19"},"returnParameters":{"id":5842,"nodeType":"ParameterList","parameters":[],"src":"27062:0:19"},"scope":6235,"src":"26838:329:19","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":5912,"nodeType":"Block","src":"27323:900:19","statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":5864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5861,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5858,"src":"27419:7:19","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":5862,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4619,"src":"27430:15:19","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4619_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":5863,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"27446:4:19","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":4617,"src":"27430:20:19","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"27419:31:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":5910,"nodeType":"Block","src":"27835:382:19","statements":[{"expression":{"id":5892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5888,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4660,"src":"27849:31:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5890,"indexExpression":{"id":5889,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5853,"src":"27881:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"27849:37:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5891,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5855,"src":"27889:24:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27849:64:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5893,"nodeType":"ExpressionStatement","src":"27849:64:19"},{"expression":{"arguments":[{"id":5897,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5853,"src":"28056:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":5899,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5853,"src":"28089:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":5900,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4619,"src":"28095:15:19","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4619_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":5901,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"28111:5:19","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":4618,"src":"28095:21:19","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":5898,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5410,"src":"28062:26:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$4619_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":5902,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28062:55:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":5894,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6304,"src":"28015:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":5896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28022:33:19","memberName":"updateAggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":795,"src":"28015:40:19","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":5903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28015:103:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5904,"nodeType":"ExpressionStatement","src":"28015:103:19"},{"eventCall":{"arguments":[{"id":5906,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5853,"src":"28175:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5907,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5855,"src":"28181:24:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5905,"name":"PoolCreatorYieldFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":320,"src":"28138:36:19","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":5908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28138:68:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5909,"nodeType":"EmitStatement","src":"28133:73:19"}]},"id":5911,"nodeType":"IfStatement","src":"27415:802:19","trueBody":{"id":5887,"nodeType":"Block","src":"27452:377:19","statements":[{"expression":{"id":5869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5865,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4656,"src":"27466:30:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":5867,"indexExpression":{"id":5866,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5853,"src":"27497:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"27466:36:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5868,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5855,"src":"27505:24:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27466:63:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5870,"nodeType":"ExpressionStatement","src":"27466:63:19"},{"expression":{"arguments":[{"id":5874,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5853,"src":"27670:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":5876,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5853,"src":"27703:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":5877,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4619,"src":"27709:15:19","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4619_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":5878,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"27725:4:19","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":4617,"src":"27709:20:19","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":5875,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5410,"src":"27676:26:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$4619_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":5879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27676:54:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":5871,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6304,"src":"27630:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":5873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27637:32:19","memberName":"updateAggregateSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":787,"src":"27630:39:19","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":5880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27630:101:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5881,"nodeType":"ExpressionStatement","src":"27630:101:19"},{"eventCall":{"arguments":[{"id":5883,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5853,"src":"27787:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5884,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5855,"src":"27793:24:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5882,"name":"PoolCreatorSwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":313,"src":"27751:35:19","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":5885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27751:67:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5886,"nodeType":"EmitStatement","src":"27746:72:19"}]}}]},"id":5913,"implemented":true,"kind":"function","modifiers":[],"name":"_setPoolCreatorFeePercentage","nameLocation":"27182:28:19","nodeType":"FunctionDefinition","parameters":{"id":5859,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5853,"mutability":"mutable","name":"pool","nameLocation":"27228:4:19","nodeType":"VariableDeclaration","scope":5913,"src":"27220:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5852,"name":"address","nodeType":"ElementaryTypeName","src":"27220:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5855,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"27250:24:19","nodeType":"VariableDeclaration","scope":5913,"src":"27242:32:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5854,"name":"uint256","nodeType":"ElementaryTypeName","src":"27242:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5858,"mutability":"mutable","name":"feeType","nameLocation":"27300:7:19","nodeType":"VariableDeclaration","scope":5913,"src":"27284:23:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"typeName":{"id":5857,"nodeType":"UserDefinedTypeName","pathNode":{"id":5856,"name":"ProtocolFeeType","nameLocations":["27284:15:19"],"nodeType":"IdentifierPath","referencedDeclaration":4619,"src":"27284:15:19"},"referencedDeclaration":4619,"src":"27284:15:19","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"visibility":"internal"}],"src":"27210:103:19"},"returnParameters":{"id":5860,"nodeType":"ParameterList","parameters":[],"src":"27323:0:19"},"scope":6235,"src":"27173:1050:19","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[587],"body":{"id":5959,"nodeType":"Block","src":"28357:258:19","statements":[{"assignments":[5927,5929],"declarations":[{"constant":false,"id":5927,"mutability":"mutable","name":"poolTokens","nameLocation":"28384:10:19","nodeType":"VariableDeclaration","scope":5959,"src":"28368:26:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6591_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":5925,"nodeType":"UserDefinedTypeName","pathNode":{"id":5924,"name":"IERC20","nameLocations":["28368:6:19"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"28368:6:19"},"referencedDeclaration":6591,"src":"28368:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"id":5926,"nodeType":"ArrayTypeName","src":"28368:8:19","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6591_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":5929,"mutability":"mutable","name":"numTokens","nameLocation":"28404:9:19","nodeType":"VariableDeclaration","scope":5959,"src":"28396:17:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5928,"name":"uint256","nodeType":"ElementaryTypeName","src":"28396:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5933,"initialValue":{"arguments":[{"id":5931,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5916,"src":"28440:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5930,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5500,"src":"28417:22:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$6591_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":5932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28417:28:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$6591_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"28367:78:19"},{"body":{"id":5957,"nodeType":"Block","src":"28496:113:19","statements":[{"assignments":[5946],"declarations":[{"constant":false,"id":5946,"mutability":"mutable","name":"token","nameLocation":"28517:5:19","nodeType":"VariableDeclaration","scope":5957,"src":"28510:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":5945,"nodeType":"UserDefinedTypeName","pathNode":{"id":5944,"name":"IERC20","nameLocations":["28510:6:19"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"28510:6:19"},"referencedDeclaration":6591,"src":"28510:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"}],"id":5950,"initialValue":{"baseExpression":{"id":5947,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5927,"src":"28525:10:19","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6591_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":5949,"indexExpression":{"id":5948,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5935,"src":"28536:1:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28525:13:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"28510:28:19"},{"expression":{"arguments":[{"id":5952,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5916,"src":"28575:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5953,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5918,"src":"28581:9:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5954,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5946,"src":"28592:5:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}],"id":5951,"name":"_withdrawProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6033,"src":"28553:21:19","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$6591_$returns$__$","typeString":"function (address,address,contract IERC20)"}},"id":5955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28553:45:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5956,"nodeType":"ExpressionStatement","src":"28553:45:19"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5938,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5935,"src":"28476:1:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5939,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5929,"src":"28480:9:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28476:13:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5958,"initializationExpression":{"assignments":[5935],"declarations":[{"constant":false,"id":5935,"mutability":"mutable","name":"i","nameLocation":"28469:1:19","nodeType":"VariableDeclaration","scope":5958,"src":"28461:9:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5934,"name":"uint256","nodeType":"ElementaryTypeName","src":"28461:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5937,"initialValue":{"hexValue":"30","id":5936,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28473:1:19","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"28461:13:19"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":5942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"28491:3:19","subExpression":{"id":5941,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5935,"src":"28493:1:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5943,"nodeType":"ExpressionStatement","src":"28491:3:19"},"nodeType":"ForStatement","src":"28456:153:19"}]},"documentation":{"id":5914,"nodeType":"StructuredDocumentation","src":"28229:38:19","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"cf7b287f","id":5960,"implemented":true,"kind":"function","modifiers":[{"id":5921,"kind":"modifierInvocation","modifierName":{"id":5920,"name":"authenticate","nameLocations":["28344:12:19"],"nodeType":"IdentifierPath","referencedDeclaration":2439,"src":"28344:12:19"},"nodeType":"ModifierInvocation","src":"28344:12:19"}],"name":"withdrawProtocolFees","nameLocation":"28281:20:19","nodeType":"FunctionDefinition","parameters":{"id":5919,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5916,"mutability":"mutable","name":"pool","nameLocation":"28310:4:19","nodeType":"VariableDeclaration","scope":5960,"src":"28302:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5915,"name":"address","nodeType":"ElementaryTypeName","src":"28302:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5918,"mutability":"mutable","name":"recipient","nameLocation":"28324:9:19","nodeType":"VariableDeclaration","scope":5960,"src":"28316:17:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5917,"name":"address","nodeType":"ElementaryTypeName","src":"28316:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"28301:33:19"},"returnParameters":{"id":5922,"nodeType":"ParameterList","parameters":[],"src":"28357:0:19"},"scope":6235,"src":"28272:343:19","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[598],"body":{"id":5986,"nodeType":"Block","src":"28771:217:19","statements":[{"expression":{"arguments":[{"id":5976,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5963,"src":"28914:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5977,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5968,"src":"28920:5:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}],"expression":{"id":5973,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6304,"src":"28874:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":5975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28881:32:19","memberName":"getPoolTokenCountAndIndexOfToken","nodeType":"MemberAccess","referencedDeclaration":2056,"src":"28874:39:19","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_contract$_IERC20_$6591_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,contract IERC20) view external returns (uint256,uint256)"}},"id":5978,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28874:52:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"id":5979,"nodeType":"ExpressionStatement","src":"28874:52:19"},{"expression":{"arguments":[{"id":5981,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5963,"src":"28958:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5982,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5965,"src":"28964:9:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5983,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5968,"src":"28975:5:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}],"id":5980,"name":"_withdrawProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6033,"src":"28936:21:19","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$6591_$returns$__$","typeString":"function (address,address,contract IERC20)"}},"id":5984,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28936:45:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5985,"nodeType":"ExpressionStatement","src":"28936:45:19"}]},"documentation":{"id":5961,"nodeType":"StructuredDocumentation","src":"28621:38:19","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"b53a70b2","id":5987,"implemented":true,"kind":"function","modifiers":[{"id":5971,"kind":"modifierInvocation","modifierName":{"id":5970,"name":"authenticate","nameLocations":["28758:12:19"],"nodeType":"IdentifierPath","referencedDeclaration":2439,"src":"28758:12:19"},"nodeType":"ModifierInvocation","src":"28758:12:19"}],"name":"withdrawProtocolFeesForToken","nameLocation":"28673:28:19","nodeType":"FunctionDefinition","parameters":{"id":5969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5963,"mutability":"mutable","name":"pool","nameLocation":"28710:4:19","nodeType":"VariableDeclaration","scope":5987,"src":"28702:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5962,"name":"address","nodeType":"ElementaryTypeName","src":"28702:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5965,"mutability":"mutable","name":"recipient","nameLocation":"28724:9:19","nodeType":"VariableDeclaration","scope":5987,"src":"28716:17:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5964,"name":"address","nodeType":"ElementaryTypeName","src":"28716:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5968,"mutability":"mutable","name":"token","nameLocation":"28742:5:19","nodeType":"VariableDeclaration","scope":5987,"src":"28735:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":5967,"nodeType":"UserDefinedTypeName","pathNode":{"id":5966,"name":"IERC20","nameLocations":["28735:6:19"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"28735:6:19"},"referencedDeclaration":6591,"src":"28735:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"28701:47:19"},"returnParameters":{"id":5972,"nodeType":"ParameterList","parameters":[],"src":"28771:0:19"},"scope":6235,"src":"28664:324:19","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":6032,"nodeType":"Block","src":"29081:316:19","statements":[{"assignments":[5998],"declarations":[{"constant":false,"id":5998,"mutability":"mutable","name":"amountToWithdraw","nameLocation":"29099:16:19","nodeType":"VariableDeclaration","scope":6032,"src":"29091:24:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5997,"name":"uint256","nodeType":"ElementaryTypeName","src":"29091:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6004,"initialValue":{"baseExpression":{"baseExpression":{"id":5999,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4667,"src":"29118:19:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6591_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":6001,"indexExpression":{"id":6000,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5989,"src":"29138:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29118:25:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6591_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":6003,"indexExpression":{"id":6002,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5994,"src":"29144:5:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29118:32:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"29091:59:19"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6005,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5998,"src":"29164:16:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":6006,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29183:1:19","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"29164:20:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6031,"nodeType":"IfStatement","src":"29160:231:19","trueBody":{"id":6030,"nodeType":"Block","src":"29186:205:19","statements":[{"expression":{"id":6014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":6008,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4667,"src":"29200:19:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6591_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":6011,"indexExpression":{"id":6009,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5989,"src":"29220:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29200:25:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6591_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":6012,"indexExpression":{"id":6010,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5994,"src":"29226:5:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"29200:32:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":6013,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29235:1:19","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"29200:36:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6015,"nodeType":"ExpressionStatement","src":"29200:36:19"},{"expression":{"arguments":[{"id":6019,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5991,"src":"29269:9:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6020,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5998,"src":"29280:16:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6016,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5994,"src":"29250:5:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"id":6018,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29256:12:19","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":6703,"src":"29250:18:19","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6591_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$6591_$","typeString":"function (contract IERC20,address,uint256)"}},"id":6021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29250:47:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6022,"nodeType":"ExpressionStatement","src":"29250:47:19"},{"eventCall":{"arguments":[{"id":6024,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5989,"src":"29339:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6025,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5994,"src":"29345:5:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},{"id":6026,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5991,"src":"29352:9:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6027,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5998,"src":"29363:16:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6023,"name":"ProtocolFeesWithdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":352,"src":"29317:21:19","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$6591_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,address,uint256)"}},"id":6028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29317:63:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6029,"nodeType":"EmitStatement","src":"29312:68:19"}]}}]},"id":6033,"implemented":true,"kind":"function","modifiers":[],"name":"_withdrawProtocolFees","nameLocation":"29003:21:19","nodeType":"FunctionDefinition","parameters":{"id":5995,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5989,"mutability":"mutable","name":"pool","nameLocation":"29033:4:19","nodeType":"VariableDeclaration","scope":6033,"src":"29025:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5988,"name":"address","nodeType":"ElementaryTypeName","src":"29025:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5991,"mutability":"mutable","name":"recipient","nameLocation":"29047:9:19","nodeType":"VariableDeclaration","scope":6033,"src":"29039:17:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5990,"name":"address","nodeType":"ElementaryTypeName","src":"29039:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5994,"mutability":"mutable","name":"token","nameLocation":"29065:5:19","nodeType":"VariableDeclaration","scope":6033,"src":"29058:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":5993,"nodeType":"UserDefinedTypeName","pathNode":{"id":5992,"name":"IERC20","nameLocations":["29058:6:19"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"29058:6:19"},"referencedDeclaration":6591,"src":"29058:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"29024:47:19"},"returnParameters":{"id":5996,"nodeType":"ParameterList","parameters":[],"src":"29081:0:19"},"scope":6235,"src":"28994:403:19","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[606],"body":{"id":6049,"nodeType":"Block","src":"29543:58:19","statements":[{"expression":{"arguments":[{"id":6045,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6036,"src":"29578:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6046,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6038,"src":"29584:9:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":6044,"name":"_withdrawPoolCreatorFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6137,"src":"29553:24:19","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":6047,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29553:41:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6048,"nodeType":"ExpressionStatement","src":"29553:41:19"}]},"documentation":{"id":6034,"nodeType":"StructuredDocumentation","src":"29403:38:19","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"f7061445","id":6050,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":6041,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6036,"src":"29537:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":6042,"kind":"modifierInvocation","modifierName":{"id":6040,"name":"onlyPoolCreator","nameLocations":["29521:15:19"],"nodeType":"IdentifierPath","referencedDeclaration":4692,"src":"29521:15:19"},"nodeType":"ModifierInvocation","src":"29521:21:19"}],"name":"withdrawPoolCreatorFees","nameLocation":"29455:23:19","nodeType":"FunctionDefinition","parameters":{"id":6039,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6036,"mutability":"mutable","name":"pool","nameLocation":"29487:4:19","nodeType":"VariableDeclaration","scope":6050,"src":"29479:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6035,"name":"address","nodeType":"ElementaryTypeName","src":"29479:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6038,"mutability":"mutable","name":"recipient","nameLocation":"29501:9:19","nodeType":"VariableDeclaration","scope":6050,"src":"29493:17:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6037,"name":"address","nodeType":"ElementaryTypeName","src":"29493:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"29478:33:19"},"returnParameters":{"id":6043,"nodeType":"ParameterList","parameters":[],"src":"29543:0:19"},"scope":6235,"src":"29446:155:19","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[612],"body":{"id":6063,"nodeType":"Block","src":"29706:70:19","statements":[{"expression":{"arguments":[{"id":6057,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6053,"src":"29741:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":6059,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6053,"src":"29763:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6058,"name":"_getPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5519,"src":"29747:15:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_address_$","typeString":"function (address) view returns (address)"}},"id":6060,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29747:21:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":6056,"name":"_withdrawPoolCreatorFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6137,"src":"29716:24:19","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":6061,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29716:53:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6062,"nodeType":"ExpressionStatement","src":"29716:53:19"}]},"documentation":{"id":6051,"nodeType":"StructuredDocumentation","src":"29607:38:19","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"52f125f0","id":6064,"implemented":true,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"29659:23:19","nodeType":"FunctionDefinition","parameters":{"id":6054,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6053,"mutability":"mutable","name":"pool","nameLocation":"29691:4:19","nodeType":"VariableDeclaration","scope":6064,"src":"29683:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6052,"name":"address","nodeType":"ElementaryTypeName","src":"29683:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"29682:14:19"},"returnParameters":{"id":6055,"nodeType":"ParameterList","parameters":[],"src":"29706:0:19"},"scope":6235,"src":"29650:126:19","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":6136,"nodeType":"Block","src":"29857:541:19","statements":[{"assignments":[6075,6077],"declarations":[{"constant":false,"id":6075,"mutability":"mutable","name":"poolTokens","nameLocation":"29884:10:19","nodeType":"VariableDeclaration","scope":6136,"src":"29868:26:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6591_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":6073,"nodeType":"UserDefinedTypeName","pathNode":{"id":6072,"name":"IERC20","nameLocations":["29868:6:19"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"29868:6:19"},"referencedDeclaration":6591,"src":"29868:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"id":6074,"nodeType":"ArrayTypeName","src":"29868:8:19","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6591_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":6077,"mutability":"mutable","name":"numTokens","nameLocation":"29904:9:19","nodeType":"VariableDeclaration","scope":6136,"src":"29896:17:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6076,"name":"uint256","nodeType":"ElementaryTypeName","src":"29896:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6081,"initialValue":{"arguments":[{"id":6079,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6066,"src":"29940:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6078,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5500,"src":"29917:22:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$6591_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":6080,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29917:28:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$6591_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"29867:78:19"},{"body":{"id":6134,"nodeType":"Block","src":"29996:396:19","statements":[{"assignments":[6094],"declarations":[{"constant":false,"id":6094,"mutability":"mutable","name":"token","nameLocation":"30017:5:19","nodeType":"VariableDeclaration","scope":6134,"src":"30010:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":6093,"nodeType":"UserDefinedTypeName","pathNode":{"id":6092,"name":"IERC20","nameLocations":["30010:6:19"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"30010:6:19"},"referencedDeclaration":6591,"src":"30010:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"}],"id":6098,"initialValue":{"baseExpression":{"id":6095,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6075,"src":"30025:10:19","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$6591_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":6097,"indexExpression":{"id":6096,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6083,"src":"30036:1:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30025:13:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"30010:28:19"},{"assignments":[6100],"declarations":[{"constant":false,"id":6100,"mutability":"mutable","name":"amountToWithdraw","nameLocation":"30061:16:19","nodeType":"VariableDeclaration","scope":6134,"src":"30053:24:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6099,"name":"uint256","nodeType":"ElementaryTypeName","src":"30053:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6106,"initialValue":{"baseExpression":{"baseExpression":{"id":6101,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4674,"src":"30080:22:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6591_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":6103,"indexExpression":{"id":6102,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6066,"src":"30103:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30080:28:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6591_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":6105,"indexExpression":{"id":6104,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6094,"src":"30109:5:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30080:35:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30053:62:19"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6107,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6100,"src":"30133:16:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":6108,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30152:1:19","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"30133:20:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6133,"nodeType":"IfStatement","src":"30129:253:19","trueBody":{"id":6132,"nodeType":"Block","src":"30155:227:19","statements":[{"expression":{"id":6116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":6110,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4674,"src":"30173:22:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$6591_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":6113,"indexExpression":{"id":6111,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6066,"src":"30196:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30173:28:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$6591_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":6114,"indexExpression":{"id":6112,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6094,"src":"30202:5:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"30173:35:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":6115,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30211:1:19","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"30173:39:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6117,"nodeType":"ExpressionStatement","src":"30173:39:19"},{"expression":{"arguments":[{"id":6121,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6068,"src":"30249:9:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6122,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6100,"src":"30260:16:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6118,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6094,"src":"30230:5:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"id":6120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30236:12:19","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":6703,"src":"30230:18:19","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6591_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$6591_$","typeString":"function (contract IERC20,address,uint256)"}},"id":6123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30230:47:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6124,"nodeType":"ExpressionStatement","src":"30230:47:19"},{"eventCall":{"arguments":[{"id":6126,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6066,"src":"30326:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6127,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6094,"src":"30332:5:19","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},{"id":6128,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6068,"src":"30339:9:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6129,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6100,"src":"30350:16:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6125,"name":"PoolCreatorFeesWithdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":364,"src":"30301:24:19","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$6591_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,address,uint256)"}},"id":6130,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30301:66:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6131,"nodeType":"EmitStatement","src":"30296:71:19"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6086,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6083,"src":"29976:1:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6087,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6077,"src":"29980:9:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29976:13:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6135,"initializationExpression":{"assignments":[6083],"declarations":[{"constant":false,"id":6083,"mutability":"mutable","name":"i","nameLocation":"29969:1:19","nodeType":"VariableDeclaration","scope":6135,"src":"29961:9:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6082,"name":"uint256","nodeType":"ElementaryTypeName","src":"29961:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6085,"initialValue":{"hexValue":"30","id":6084,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29973:1:19","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"29961:13:19"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":6090,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"29991:3:19","subExpression":{"id":6089,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6083,"src":"29993:1:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6091,"nodeType":"ExpressionStatement","src":"29991:3:19"},"nodeType":"ForStatement","src":"29956:436:19"}]},"id":6137,"implemented":true,"kind":"function","modifiers":[],"name":"_withdrawPoolCreatorFees","nameLocation":"29791:24:19","nodeType":"FunctionDefinition","parameters":{"id":6069,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6066,"mutability":"mutable","name":"pool","nameLocation":"29824:4:19","nodeType":"VariableDeclaration","scope":6137,"src":"29816:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6065,"name":"address","nodeType":"ElementaryTypeName","src":"29816:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6068,"mutability":"mutable","name":"recipient","nameLocation":"29838:9:19","nodeType":"VariableDeclaration","scope":6137,"src":"29830:17:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6067,"name":"address","nodeType":"ElementaryTypeName","src":"29830:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"29815:33:19"},"returnParameters":{"id":6070,"nodeType":"ParameterList","parameters":[],"src":"29857:0:19"},"scope":6235,"src":"29782:616:19","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":6174,"nodeType":"Block","src":"30638:771:19","statements":[{"expression":{"id":6156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6147,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4643,"src":"30953:31:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4625_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":6149,"indexExpression":{"id":6148,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6140,"src":"30985:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"30953:37:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6151,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6142,"src":"31036:28:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31065:8:19","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":7895,"src":"31036:37:19","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":6153,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31036:39:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":6154,"name":"isOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6144,"src":"31101:10:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":6150,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4625,"src":"30993:13:19","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$4625_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":6155,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["31021:13:19","31089:10:19"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"30993:129:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"30953:169:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":6157,"nodeType":"ExpressionStatement","src":"30953:169:19"},{"expression":{"arguments":[{"id":6161,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6140,"src":"31257:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":6163,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6140,"src":"31290:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":6164,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4619,"src":"31296:15:19","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4619_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":6165,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"31312:4:19","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":4617,"src":"31296:20:19","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":6162,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5410,"src":"31263:26:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$4619_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":6166,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31263:54:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6158,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6304,"src":"31217:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":6160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31224:32:19","memberName":"updateAggregateSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":787,"src":"31217:39:19","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":6167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31217:101:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6168,"nodeType":"ExpressionStatement","src":"31217:101:19"},{"eventCall":{"arguments":[{"id":6170,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6140,"src":"31367:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6171,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6142,"src":"31373:28:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6169,"name":"ProtocolSwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":299,"src":"31334:32:19","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":6172,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31334:68:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6173,"nodeType":"EmitStatement","src":"31329:73:19"}]},"documentation":{"id":6138,"nodeType":"StructuredDocumentation","src":"30404:114:19","text":"@dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage."},"id":6175,"implemented":true,"kind":"function","modifiers":[],"name":"_updatePoolSwapFeePercentage","nameLocation":"30532:28:19","nodeType":"FunctionDefinition","parameters":{"id":6145,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6140,"mutability":"mutable","name":"pool","nameLocation":"30569:4:19","nodeType":"VariableDeclaration","scope":6175,"src":"30561:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6139,"name":"address","nodeType":"ElementaryTypeName","src":"30561:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6142,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"30583:28:19","nodeType":"VariableDeclaration","scope":6175,"src":"30575:36:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6141,"name":"uint256","nodeType":"ElementaryTypeName","src":"30575:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6144,"mutability":"mutable","name":"isOverride","nameLocation":"30618:10:19","nodeType":"VariableDeclaration","scope":6175,"src":"30613:15:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6143,"name":"bool","nodeType":"ElementaryTypeName","src":"30613:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"30560:69:19"},"returnParameters":{"id":6146,"nodeType":"ParameterList","parameters":[],"src":"30638:0:19"},"scope":6235,"src":"30523:886:19","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":6212,"nodeType":"Block","src":"31681:767:19","statements":[{"expression":{"id":6194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6185,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4648,"src":"31985:32:19","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$4625_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":6187,"indexExpression":{"id":6186,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6178,"src":"32018:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"31985:38:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6189,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6180,"src":"32069:29:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32099:8:19","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":7895,"src":"32069:38:19","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":6191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32069:40:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":6192,"name":"isOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6182,"src":"32135:10:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":6188,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4625,"src":"32026:13:19","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$4625_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":6193,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["32054:13:19","32123:10:19"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"32026:130:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"31985:171:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$4625_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":6195,"nodeType":"ExpressionStatement","src":"31985:171:19"},{"expression":{"arguments":[{"id":6199,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6178,"src":"32293:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":6201,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6178,"src":"32326:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":6202,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4619,"src":"32332:15:19","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$4619_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":6203,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"32348:5:19","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":4618,"src":"32332:21:19","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$4619","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":6200,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5410,"src":"32299:26:19","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$4619_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":6204,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32299:55:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6196,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6304,"src":"32252:6:19","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":6198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32259:33:19","memberName":"updateAggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":795,"src":"32252:40:19","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":6205,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32252:103:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6206,"nodeType":"ExpressionStatement","src":"32252:103:19"},{"eventCall":{"arguments":[{"id":6208,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6178,"src":"32405:4:19","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6209,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6180,"src":"32411:29:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6207,"name":"ProtocolYieldFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":306,"src":"32371:33:19","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":6210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32371:70:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6211,"nodeType":"EmitStatement","src":"32366:75:19"}]},"documentation":{"id":6176,"nodeType":"StructuredDocumentation","src":"31415:114:19","text":"@dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage."},"id":6213,"implemented":true,"kind":"function","modifiers":[],"name":"_updatePoolYieldFeePercentage","nameLocation":"31543:29:19","nodeType":"FunctionDefinition","parameters":{"id":6183,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6178,"mutability":"mutable","name":"pool","nameLocation":"31590:4:19","nodeType":"VariableDeclaration","scope":6213,"src":"31582:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6177,"name":"address","nodeType":"ElementaryTypeName","src":"31582:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6180,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"31612:29:19","nodeType":"VariableDeclaration","scope":6213,"src":"31604:37:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6179,"name":"uint256","nodeType":"ElementaryTypeName","src":"31604:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6182,"mutability":"mutable","name":"isOverride","nameLocation":"31656:10:19","nodeType":"VariableDeclaration","scope":6213,"src":"31651:15:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6181,"name":"bool","nodeType":"ElementaryTypeName","src":"31651:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"31572:100:19"},"returnParameters":{"id":6184,"nodeType":"ParameterList","parameters":[],"src":"31681:0:19"},"scope":6235,"src":"31534:914:19","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":6233,"nodeType":"Block","src":"32521:682:19","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6218,"name":"feePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6215,"src":"33056:13:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":6219,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2408,"src":"33072:18:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33056:34:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6221,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"33055:36:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6222,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2408,"src":"33094:18:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33055:57:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":6224,"name":"feePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6215,"src":"33116:13:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33055:74:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6232,"nodeType":"IfStatement","src":"33051:146:19","trueBody":{"id":6231,"nodeType":"Block","src":"33131:66:19","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":6226,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1308,"src":"33152:12:19","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1308_$","typeString":"type(contract IVaultErrors)"}},"id":6228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33165:19:19","memberName":"FeePrecisionTooHigh","nodeType":"MemberAccess","referencedDeclaration":1156,"src":"33152:32:19","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33152:34:19","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6230,"nodeType":"RevertStatement","src":"33145:41:19"}]}}]},"id":6234,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureValidPrecision","nameLocation":"32463:21:19","nodeType":"FunctionDefinition","parameters":{"id":6216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6215,"mutability":"mutable","name":"feePercentage","nameLocation":"32493:13:19","nodeType":"VariableDeclaration","scope":6234,"src":"32485:21:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6214,"name":"uint256","nodeType":"ElementaryTypeName","src":"32485:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"32484:23:19"},"returnParameters":{"id":6217,"nodeType":"ParameterList","parameters":[],"src":"32521:0:19"},"scope":6235,"src":"32454:749:19","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":6236,"src":"3120:30085:19","usedErrors":[38,394,397,402,409,412,1156,1180,2643,4303,4679,4682,6670,6951,6956,6959,7206],"usedEvents":[287,292,299,306,313,320,330,340,352,364,373,382,391]}],"src":"46:33160:19"},"id":19},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","exportedSymbols":{"CommonAuthentication":[2635],"IAuthorizer":[73],"IVault":[651],"SingletonAuthentication":[6294]},"id":6295,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6237,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:20"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":6239,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6295,"sourceUnit":74,"src":"72:91:20","symbolAliases":[{"foreign":{"id":6238,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":73,"src":"81:11:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":6241,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6295,"sourceUnit":652,"src":"164:81:20","symbolAliases":[{"foreign":{"id":6240,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":651,"src":"173:6:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol","id":6243,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6295,"sourceUnit":2636,"src":"247:115:20","symbolAliases":[{"foreign":{"id":6242,"name":"CommonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2635,"src":"256:20:20","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":6245,"name":"CommonAuthentication","nameLocations":["784:20:20"],"nodeType":"IdentifierPath","referencedDeclaration":2635,"src":"784:20:20"},"id":6246,"nodeType":"InheritanceSpecifier","src":"784:20:20"}],"canonicalName":"SingletonAuthentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":6244,"nodeType":"StructuredDocumentation","src":"364:374:20","text":" @notice Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\n @dev The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned\n functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same\n function name."},"fullyImplemented":true,"id":6294,"linearizedBaseContracts":[6294,2635,2491,47],"name":"SingletonAuthentication","nameLocation":"757:23:20","nodeType":"ContractDefinition","nodes":[{"body":{"id":6268,"nodeType":"Block","src":"981:64:20","statements":[]},"id":6269,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":6252,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6249,"src":"932:5:20","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"id":6261,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"971:4:20","typeDescriptions":{"typeIdentifier":"t_contract$_SingletonAuthentication_$6294","typeString":"contract SingletonAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SingletonAuthentication_$6294","typeString":"contract SingletonAuthentication"}],"id":6260,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"963:7:20","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6259,"name":"address","nodeType":"ElementaryTypeName","src":"963:7:20","typeDescriptions":{}}},"id":6262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"963:13:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6258,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"955:7:20","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":6257,"name":"uint160","nodeType":"ElementaryTypeName","src":"955:7:20","typeDescriptions":{}}},"id":6263,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"955:22:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":6256,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"947:7:20","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":6255,"name":"uint256","nodeType":"ElementaryTypeName","src":"947:7:20","typeDescriptions":{}}},"id":6264,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"947:31:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6254,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"939:7:20","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":6253,"name":"bytes32","nodeType":"ElementaryTypeName","src":"939:7:20","typeDescriptions":{}}},"id":6265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"939:40:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":6266,"kind":"baseConstructorSpecifier","modifierName":{"id":6251,"name":"CommonAuthentication","nameLocations":["911:20:20"],"nodeType":"IdentifierPath","referencedDeclaration":2635,"src":"911:20:20"},"nodeType":"ModifierInvocation","src":"911:69:20"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":6250,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6249,"mutability":"mutable","name":"vault","nameLocation":"904:5:20","nodeType":"VariableDeclaration","scope":6269,"src":"897:12:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":6248,"nodeType":"UserDefinedTypeName","pathNode":{"id":6247,"name":"IVault","nameLocations":["897:6:20"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"897:6:20"},"referencedDeclaration":651,"src":"897:6:20","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"}],"src":"896:14:20"},"returnParameters":{"id":6267,"nodeType":"ParameterList","parameters":[],"src":"981:0:20"},"scope":6294,"src":"885:160:20","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6279,"nodeType":"Block","src":"1225:35:20","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6276,"name":"_getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2548,"src":"1242:9:20","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$651_$","typeString":"function () view returns (contract IVault)"}},"id":6277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1242:11:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"functionReturnParameters":6275,"id":6278,"nodeType":"Return","src":"1235:18:20"}]},"documentation":{"id":6270,"nodeType":"StructuredDocumentation","src":"1051:120:20","text":" @notice Get the address of the Balancer Vault.\n @return vault An interface pointer to the Vault"},"functionSelector":"8d928af8","id":6280,"implemented":true,"kind":"function","modifiers":[],"name":"getVault","nameLocation":"1185:8:20","nodeType":"FunctionDefinition","parameters":{"id":6271,"nodeType":"ParameterList","parameters":[],"src":"1193:2:20"},"returnParameters":{"id":6275,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6274,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6280,"src":"1217:6:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":6273,"nodeType":"UserDefinedTypeName","pathNode":{"id":6272,"name":"IVault","nameLocations":["1217:6:20"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"1217:6:20"},"referencedDeclaration":651,"src":"1217:6:20","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1216:8:20"},"scope":6294,"src":"1176:84:20","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":6292,"nodeType":"Block","src":"1456:50:20","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6287,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6280,"src":"1473:8:20","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$651_$","typeString":"function () view returns (contract IVault)"}},"id":6288,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1473:10:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":6289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1484:13:20","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":1965,"src":"1473:24:20","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$73_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":6290,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1473:26:20","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"}},"functionReturnParameters":6286,"id":6291,"nodeType":"Return","src":"1466:33:20"}]},"documentation":{"id":6281,"nodeType":"StructuredDocumentation","src":"1266:126:20","text":" @notice Get the address of the Authorizer.\n @return authorizer An interface pointer to the Authorizer"},"functionSelector":"aaabadc5","id":6293,"implemented":true,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"1406:13:20","nodeType":"FunctionDefinition","parameters":{"id":6282,"nodeType":"ParameterList","parameters":[],"src":"1419:2:20"},"returnParameters":{"id":6286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6285,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6293,"src":"1443:11:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"},"typeName":{"id":6284,"nodeType":"UserDefinedTypeName","pathNode":{"id":6283,"name":"IAuthorizer","nameLocations":["1443:11:20"],"nodeType":"IdentifierPath","referencedDeclaration":73,"src":"1443:11:20"},"referencedDeclaration":73,"src":"1443:11:20","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"1442:13:20"},"scope":6294,"src":"1397:109:20","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":6295,"src":"739:769:20","usedErrors":[38],"usedEvents":[]}],"src":"46:1463:20"},"id":20},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","exportedSymbols":{"IVault":[651],"IVaultErrors":[1308],"VaultGuard":[6343]},"id":6344,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6296,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:21"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":6298,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6344,"sourceUnit":1309,"src":"72:93:21","symbolAliases":[{"foreign":{"id":6297,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1308,"src":"81:12:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":6300,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6344,"sourceUnit":652,"src":"166:81:21","symbolAliases":[{"foreign":{"id":6299,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":651,"src":"175:6:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"VaultGuard","contractDependencies":[],"contractKind":"contract","documentation":{"id":6301,"nodeType":"StructuredDocumentation","src":"249:59:21","text":"@notice Contract that shares the modifier `onlyVault`."},"fullyImplemented":true,"id":6343,"linearizedBaseContracts":[6343],"name":"VaultGuard","nameLocation":"317:10:21","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":6304,"mutability":"immutable","name":"_vault","nameLocation":"360:6:21","nodeType":"VariableDeclaration","scope":6343,"src":"334:32:21","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":6303,"nodeType":"UserDefinedTypeName","pathNode":{"id":6302,"name":"IVault","nameLocations":["334:6:21"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"334:6:21"},"referencedDeclaration":651,"src":"334:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"},{"body":{"id":6314,"nodeType":"Block","src":"399:31:21","statements":[{"expression":{"id":6312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6310,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6304,"src":"409:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6311,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6307,"src":"418:5:21","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"src":"409:14:21","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":6313,"nodeType":"ExpressionStatement","src":"409:14:21"}]},"id":6315,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":6308,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6307,"mutability":"mutable","name":"vault","nameLocation":"392:5:21","nodeType":"VariableDeclaration","scope":6315,"src":"385:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":6306,"nodeType":"UserDefinedTypeName","pathNode":{"id":6305,"name":"IVault","nameLocations":["385:6:21"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"385:6:21"},"referencedDeclaration":651,"src":"385:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"}],"src":"384:14:21"},"returnParameters":{"id":6309,"nodeType":"ParameterList","parameters":[],"src":"399:0:21"},"scope":6343,"src":"373:57:21","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":6321,"nodeType":"Block","src":"457:46:21","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":6317,"name":"_ensureOnlyVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6342,"src":"467:16:21","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":6318,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"467:18:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6319,"nodeType":"ExpressionStatement","src":"467:18:21"},{"id":6320,"nodeType":"PlaceholderStatement","src":"495:1:21"}]},"id":6322,"name":"onlyVault","nameLocation":"445:9:21","nodeType":"ModifierDefinition","parameters":{"id":6316,"nodeType":"ParameterList","parameters":[],"src":"454:2:21"},"src":"436:67:21","virtual":false,"visibility":"internal"},{"body":{"id":6341,"nodeType":"Block","src":"550:124:21","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":6331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6325,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"564:3:21","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"568:6:21","memberName":"sender","nodeType":"MemberAccess","src":"564:10:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":6329,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6304,"src":"586:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}],"id":6328,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"578:7:21","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6327,"name":"address","nodeType":"ElementaryTypeName","src":"578:7:21","typeDescriptions":{}}},"id":6330,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"578:15:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"564:29:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6340,"nodeType":"IfStatement","src":"560:108:21","trueBody":{"id":6339,"nodeType":"Block","src":"595:73:21","statements":[{"errorCall":{"arguments":[{"expression":{"id":6335,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"646:3:21","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":6336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"650:6:21","memberName":"sender","nodeType":"MemberAccess","src":"646:10:21","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6332,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1308,"src":"616:12:21","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$1308_$","typeString":"type(contract IVaultErrors)"}},"id":6334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"629:16:21","memberName":"SenderIsNotVault","nodeType":"MemberAccess","referencedDeclaration":1180,"src":"616:29:21","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":6337,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"616:41:21","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6338,"nodeType":"RevertStatement","src":"609:48:21"}]}}]},"id":6342,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureOnlyVault","nameLocation":"518:16:21","nodeType":"FunctionDefinition","parameters":{"id":6323,"nodeType":"ParameterList","parameters":[],"src":"534:2:21"},"returnParameters":{"id":6324,"nodeType":"ParameterList","parameters":[],"src":"550:0:21"},"scope":6343,"src":"509:165:21","stateMutability":"view","virtual":false,"visibility":"private"}],"scope":6344,"src":"308:368:21","usedErrors":[],"usedEvents":[]}],"src":"46:631:21"},"id":21},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","exportedSymbols":{"IERC20":[6591],"IERC20Metadata":[6617],"IERC4626":[6513]},"id":6514,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6345,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"107:24:22"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../token/ERC20/IERC20.sol","id":6347,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6514,"sourceUnit":6592,"src":"133:49:22","symbolAliases":[{"foreign":{"id":6346,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6591,"src":"141:6:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"../token/ERC20/extensions/IERC20Metadata.sol","id":6349,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6514,"sourceUnit":6618,"src":"183:76:22","symbolAliases":[{"foreign":{"id":6348,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6617,"src":"191:14:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6351,"name":"IERC20","nameLocations":["420:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"420:6:22"},"id":6352,"nodeType":"InheritanceSpecifier","src":"420:6:22"},{"baseName":{"id":6353,"name":"IERC20Metadata","nameLocations":["428:14:22"],"nodeType":"IdentifierPath","referencedDeclaration":6617,"src":"428:14:22"},"id":6354,"nodeType":"InheritanceSpecifier","src":"428:14:22"}],"canonicalName":"IERC4626","contractDependencies":[],"contractKind":"interface","documentation":{"id":6350,"nodeType":"StructuredDocumentation","src":"261:136:22","text":" @dev Interface of the ERC4626 \"Tokenized Vault Standard\", as defined in\n https://eips.ethereum.org/EIPS/eip-4626[ERC-4626]."},"fullyImplemented":false,"id":6513,"linearizedBaseContracts":[6513,6617,6591],"name":"IERC4626","nameLocation":"408:8:22","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"dcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7","id":6364,"name":"Deposit","nameLocation":"455:7:22","nodeType":"EventDefinition","parameters":{"id":6363,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6356,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"479:6:22","nodeType":"VariableDeclaration","scope":6364,"src":"463:22:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6355,"name":"address","nodeType":"ElementaryTypeName","src":"463:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6358,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"503:5:22","nodeType":"VariableDeclaration","scope":6364,"src":"487:21:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6357,"name":"address","nodeType":"ElementaryTypeName","src":"487:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6360,"indexed":false,"mutability":"mutable","name":"assets","nameLocation":"518:6:22","nodeType":"VariableDeclaration","scope":6364,"src":"510:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6359,"name":"uint256","nodeType":"ElementaryTypeName","src":"510:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6362,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"534:6:22","nodeType":"VariableDeclaration","scope":6364,"src":"526:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6361,"name":"uint256","nodeType":"ElementaryTypeName","src":"526:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"462:79:22"},"src":"449:93:22"},{"anonymous":false,"eventSelector":"fbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db","id":6376,"name":"Withdraw","nameLocation":"554:8:22","nodeType":"EventDefinition","parameters":{"id":6375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6366,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"588:6:22","nodeType":"VariableDeclaration","scope":6376,"src":"572:22:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6365,"name":"address","nodeType":"ElementaryTypeName","src":"572:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6368,"indexed":true,"mutability":"mutable","name":"receiver","nameLocation":"620:8:22","nodeType":"VariableDeclaration","scope":6376,"src":"604:24:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6367,"name":"address","nodeType":"ElementaryTypeName","src":"604:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6370,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"654:5:22","nodeType":"VariableDeclaration","scope":6376,"src":"638:21:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6369,"name":"address","nodeType":"ElementaryTypeName","src":"638:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6372,"indexed":false,"mutability":"mutable","name":"assets","nameLocation":"677:6:22","nodeType":"VariableDeclaration","scope":6376,"src":"669:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6371,"name":"uint256","nodeType":"ElementaryTypeName","src":"669:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6374,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"701:6:22","nodeType":"VariableDeclaration","scope":6376,"src":"693:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6373,"name":"uint256","nodeType":"ElementaryTypeName","src":"693:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"562:151:22"},"src":"548:166:22"},{"documentation":{"id":6377,"nodeType":"StructuredDocumentation","src":"720:207:22","text":" @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n - MUST be an ERC-20 token contract.\n - MUST NOT revert."},"functionSelector":"38d52e0f","id":6382,"implemented":false,"kind":"function","modifiers":[],"name":"asset","nameLocation":"941:5:22","nodeType":"FunctionDefinition","parameters":{"id":6378,"nodeType":"ParameterList","parameters":[],"src":"946:2:22"},"returnParameters":{"id":6381,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6380,"mutability":"mutable","name":"assetTokenAddress","nameLocation":"980:17:22","nodeType":"VariableDeclaration","scope":6382,"src":"972:25:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6379,"name":"address","nodeType":"ElementaryTypeName","src":"972:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"971:27:22"},"scope":6513,"src":"932:67:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6383,"nodeType":"StructuredDocumentation","src":"1005:286:22","text":" @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n - SHOULD include any compounding that occurs from yield.\n - MUST be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT revert."},"functionSelector":"01e1d114","id":6388,"implemented":false,"kind":"function","modifiers":[],"name":"totalAssets","nameLocation":"1305:11:22","nodeType":"FunctionDefinition","parameters":{"id":6384,"nodeType":"ParameterList","parameters":[],"src":"1316:2:22"},"returnParameters":{"id":6387,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6386,"mutability":"mutable","name":"totalManagedAssets","nameLocation":"1350:18:22","nodeType":"VariableDeclaration","scope":6388,"src":"1342:26:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6385,"name":"uint256","nodeType":"ElementaryTypeName","src":"1342:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1341:28:22"},"scope":6513,"src":"1296:74:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6389,"nodeType":"StructuredDocumentation","src":"1376:720:22","text":" @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from."},"functionSelector":"c6e6f592","id":6396,"implemented":false,"kind":"function","modifiers":[],"name":"convertToShares","nameLocation":"2110:15:22","nodeType":"FunctionDefinition","parameters":{"id":6392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6391,"mutability":"mutable","name":"assets","nameLocation":"2134:6:22","nodeType":"VariableDeclaration","scope":6396,"src":"2126:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6390,"name":"uint256","nodeType":"ElementaryTypeName","src":"2126:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2125:16:22"},"returnParameters":{"id":6395,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6394,"mutability":"mutable","name":"shares","nameLocation":"2173:6:22","nodeType":"VariableDeclaration","scope":6396,"src":"2165:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6393,"name":"uint256","nodeType":"ElementaryTypeName","src":"2165:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2164:16:22"},"scope":6513,"src":"2101:80:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6397,"nodeType":"StructuredDocumentation","src":"2187:720:22","text":" @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from."},"functionSelector":"07a2d13a","id":6404,"implemented":false,"kind":"function","modifiers":[],"name":"convertToAssets","nameLocation":"2921:15:22","nodeType":"FunctionDefinition","parameters":{"id":6400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6399,"mutability":"mutable","name":"shares","nameLocation":"2945:6:22","nodeType":"VariableDeclaration","scope":6404,"src":"2937:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6398,"name":"uint256","nodeType":"ElementaryTypeName","src":"2937:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2936:16:22"},"returnParameters":{"id":6403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6402,"mutability":"mutable","name":"assets","nameLocation":"2984:6:22","nodeType":"VariableDeclaration","scope":6404,"src":"2976:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6401,"name":"uint256","nodeType":"ElementaryTypeName","src":"2976:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2975:16:22"},"scope":6513,"src":"2912:80:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6405,"nodeType":"StructuredDocumentation","src":"2998:386:22","text":" @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n through a deposit call.\n - MUST return a limited value if receiver is subject to some deposit limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n - MUST NOT revert."},"functionSelector":"402d267d","id":6412,"implemented":false,"kind":"function","modifiers":[],"name":"maxDeposit","nameLocation":"3398:10:22","nodeType":"FunctionDefinition","parameters":{"id":6408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6407,"mutability":"mutable","name":"receiver","nameLocation":"3417:8:22","nodeType":"VariableDeclaration","scope":6412,"src":"3409:16:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6406,"name":"address","nodeType":"ElementaryTypeName","src":"3409:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3408:18:22"},"returnParameters":{"id":6411,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6410,"mutability":"mutable","name":"maxAssets","nameLocation":"3458:9:22","nodeType":"VariableDeclaration","scope":6412,"src":"3450:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6409,"name":"uint256","nodeType":"ElementaryTypeName","src":"3450:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3449:19:22"},"scope":6513,"src":"3389:80:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6413,"nodeType":"StructuredDocumentation","src":"3475:1012:22","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n current on-chain conditions.\n - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n in the same transaction.\n - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n deposit would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing."},"functionSelector":"ef8b30f7","id":6420,"implemented":false,"kind":"function","modifiers":[],"name":"previewDeposit","nameLocation":"4501:14:22","nodeType":"FunctionDefinition","parameters":{"id":6416,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6415,"mutability":"mutable","name":"assets","nameLocation":"4524:6:22","nodeType":"VariableDeclaration","scope":6420,"src":"4516:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6414,"name":"uint256","nodeType":"ElementaryTypeName","src":"4516:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4515:16:22"},"returnParameters":{"id":6419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6418,"mutability":"mutable","name":"shares","nameLocation":"4563:6:22","nodeType":"VariableDeclaration","scope":6420,"src":"4555:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6417,"name":"uint256","nodeType":"ElementaryTypeName","src":"4555:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4554:16:22"},"scope":6513,"src":"4492:79:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6421,"nodeType":"StructuredDocumentation","src":"4577:651:22","text":" @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n deposit execution, and are accounted for during deposit.\n - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"functionSelector":"6e553f65","id":6430,"implemented":false,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"5242:7:22","nodeType":"FunctionDefinition","parameters":{"id":6426,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6423,"mutability":"mutable","name":"assets","nameLocation":"5258:6:22","nodeType":"VariableDeclaration","scope":6430,"src":"5250:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6422,"name":"uint256","nodeType":"ElementaryTypeName","src":"5250:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6425,"mutability":"mutable","name":"receiver","nameLocation":"5274:8:22","nodeType":"VariableDeclaration","scope":6430,"src":"5266:16:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6424,"name":"address","nodeType":"ElementaryTypeName","src":"5266:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5249:34:22"},"returnParameters":{"id":6429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6428,"mutability":"mutable","name":"shares","nameLocation":"5310:6:22","nodeType":"VariableDeclaration","scope":6430,"src":"5302:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6427,"name":"uint256","nodeType":"ElementaryTypeName","src":"5302:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5301:16:22"},"scope":6513,"src":"5233:85:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6431,"nodeType":"StructuredDocumentation","src":"5324:341:22","text":" @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n - MUST return a limited value if receiver is subject to some mint limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n - MUST NOT revert."},"functionSelector":"c63d75b6","id":6438,"implemented":false,"kind":"function","modifiers":[],"name":"maxMint","nameLocation":"5679:7:22","nodeType":"FunctionDefinition","parameters":{"id":6434,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6433,"mutability":"mutable","name":"receiver","nameLocation":"5695:8:22","nodeType":"VariableDeclaration","scope":6438,"src":"5687:16:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6432,"name":"address","nodeType":"ElementaryTypeName","src":"5687:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5686:18:22"},"returnParameters":{"id":6437,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6436,"mutability":"mutable","name":"maxShares","nameLocation":"5736:9:22","nodeType":"VariableDeclaration","scope":6438,"src":"5728:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6435,"name":"uint256","nodeType":"ElementaryTypeName","src":"5728:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5727:19:22"},"scope":6513,"src":"5670:77:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6439,"nodeType":"StructuredDocumentation","src":"5753:984:22","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n same transaction.\n - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by minting."},"functionSelector":"b3d7f6b9","id":6446,"implemented":false,"kind":"function","modifiers":[],"name":"previewMint","nameLocation":"6751:11:22","nodeType":"FunctionDefinition","parameters":{"id":6442,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6441,"mutability":"mutable","name":"shares","nameLocation":"6771:6:22","nodeType":"VariableDeclaration","scope":6446,"src":"6763:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6440,"name":"uint256","nodeType":"ElementaryTypeName","src":"6763:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6762:16:22"},"returnParameters":{"id":6445,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6444,"mutability":"mutable","name":"assets","nameLocation":"6810:6:22","nodeType":"VariableDeclaration","scope":6446,"src":"6802:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6443,"name":"uint256","nodeType":"ElementaryTypeName","src":"6802:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6801:16:22"},"scope":6513,"src":"6742:76:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6447,"nodeType":"StructuredDocumentation","src":"6824:642:22","text":" @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n execution, and are accounted for during mint.\n - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"functionSelector":"94bf804d","id":6456,"implemented":false,"kind":"function","modifiers":[],"name":"mint","nameLocation":"7480:4:22","nodeType":"FunctionDefinition","parameters":{"id":6452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6449,"mutability":"mutable","name":"shares","nameLocation":"7493:6:22","nodeType":"VariableDeclaration","scope":6456,"src":"7485:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6448,"name":"uint256","nodeType":"ElementaryTypeName","src":"7485:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6451,"mutability":"mutable","name":"receiver","nameLocation":"7509:8:22","nodeType":"VariableDeclaration","scope":6456,"src":"7501:16:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6450,"name":"address","nodeType":"ElementaryTypeName","src":"7501:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7484:34:22"},"returnParameters":{"id":6455,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6454,"mutability":"mutable","name":"assets","nameLocation":"7545:6:22","nodeType":"VariableDeclaration","scope":6456,"src":"7537:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6453,"name":"uint256","nodeType":"ElementaryTypeName","src":"7537:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7536:16:22"},"scope":6513,"src":"7471:82:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6457,"nodeType":"StructuredDocumentation","src":"7559:293:22","text":" @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n Vault, through a withdraw call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST NOT revert."},"functionSelector":"ce96cb77","id":6464,"implemented":false,"kind":"function","modifiers":[],"name":"maxWithdraw","nameLocation":"7866:11:22","nodeType":"FunctionDefinition","parameters":{"id":6460,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6459,"mutability":"mutable","name":"owner","nameLocation":"7886:5:22","nodeType":"VariableDeclaration","scope":6464,"src":"7878:13:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6458,"name":"address","nodeType":"ElementaryTypeName","src":"7878:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7877:15:22"},"returnParameters":{"id":6463,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6462,"mutability":"mutable","name":"maxAssets","nameLocation":"7924:9:22","nodeType":"VariableDeclaration","scope":6464,"src":"7916:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6461,"name":"uint256","nodeType":"ElementaryTypeName","src":"7916:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7915:19:22"},"scope":6513,"src":"7857:78:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6465,"nodeType":"StructuredDocumentation","src":"7941:1034:22","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n given current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n called\n in the same transaction.\n - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n the withdrawal would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing."},"functionSelector":"0a28a477","id":6472,"implemented":false,"kind":"function","modifiers":[],"name":"previewWithdraw","nameLocation":"8989:15:22","nodeType":"FunctionDefinition","parameters":{"id":6468,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6467,"mutability":"mutable","name":"assets","nameLocation":"9013:6:22","nodeType":"VariableDeclaration","scope":6472,"src":"9005:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6466,"name":"uint256","nodeType":"ElementaryTypeName","src":"9005:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9004:16:22"},"returnParameters":{"id":6471,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6470,"mutability":"mutable","name":"shares","nameLocation":"9052:6:22","nodeType":"VariableDeclaration","scope":6472,"src":"9044:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6469,"name":"uint256","nodeType":"ElementaryTypeName","src":"9044:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9043:16:22"},"scope":6513,"src":"8980:80:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6473,"nodeType":"StructuredDocumentation","src":"9066:670:22","text":" @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n withdraw execution, and are accounted for during withdraw.\n - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately."},"functionSelector":"b460af94","id":6484,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"9750:8:22","nodeType":"FunctionDefinition","parameters":{"id":6480,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6475,"mutability":"mutable","name":"assets","nameLocation":"9767:6:22","nodeType":"VariableDeclaration","scope":6484,"src":"9759:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6474,"name":"uint256","nodeType":"ElementaryTypeName","src":"9759:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6477,"mutability":"mutable","name":"receiver","nameLocation":"9783:8:22","nodeType":"VariableDeclaration","scope":6484,"src":"9775:16:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6476,"name":"address","nodeType":"ElementaryTypeName","src":"9775:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6479,"mutability":"mutable","name":"owner","nameLocation":"9801:5:22","nodeType":"VariableDeclaration","scope":6484,"src":"9793:13:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6478,"name":"address","nodeType":"ElementaryTypeName","src":"9793:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9758:49:22"},"returnParameters":{"id":6483,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6482,"mutability":"mutable","name":"shares","nameLocation":"9834:6:22","nodeType":"VariableDeclaration","scope":6484,"src":"9826:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6481,"name":"uint256","nodeType":"ElementaryTypeName","src":"9826:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9825:16:22"},"scope":6513,"src":"9741:101:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6485,"nodeType":"StructuredDocumentation","src":"9848:381:22","text":" @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n through a redeem call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n - MUST NOT revert."},"functionSelector":"d905777e","id":6492,"implemented":false,"kind":"function","modifiers":[],"name":"maxRedeem","nameLocation":"10243:9:22","nodeType":"FunctionDefinition","parameters":{"id":6488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6487,"mutability":"mutable","name":"owner","nameLocation":"10261:5:22","nodeType":"VariableDeclaration","scope":6492,"src":"10253:13:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6486,"name":"address","nodeType":"ElementaryTypeName","src":"10253:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10252:15:22"},"returnParameters":{"id":6491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6490,"mutability":"mutable","name":"maxShares","nameLocation":"10299:9:22","nodeType":"VariableDeclaration","scope":6492,"src":"10291:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6489,"name":"uint256","nodeType":"ElementaryTypeName","src":"10291:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10290:19:22"},"scope":6513,"src":"10234:76:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6493,"nodeType":"StructuredDocumentation","src":"10316:1010:22","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\n given current on-chain conditions.\n - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n same transaction.\n - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n redemption would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by redeeming."},"functionSelector":"4cdad506","id":6500,"implemented":false,"kind":"function","modifiers":[],"name":"previewRedeem","nameLocation":"11340:13:22","nodeType":"FunctionDefinition","parameters":{"id":6496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6495,"mutability":"mutable","name":"shares","nameLocation":"11362:6:22","nodeType":"VariableDeclaration","scope":6500,"src":"11354:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6494,"name":"uint256","nodeType":"ElementaryTypeName","src":"11354:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11353:16:22"},"returnParameters":{"id":6499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6498,"mutability":"mutable","name":"assets","nameLocation":"11401:6:22","nodeType":"VariableDeclaration","scope":6500,"src":"11393:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6497,"name":"uint256","nodeType":"ElementaryTypeName","src":"11393:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11392:16:22"},"scope":6513,"src":"11331:78:22","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6501,"nodeType":"StructuredDocumentation","src":"11415:661:22","text":" @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n redeem execution, and are accounted for during redeem.\n - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately."},"functionSelector":"ba087652","id":6512,"implemented":false,"kind":"function","modifiers":[],"name":"redeem","nameLocation":"12090:6:22","nodeType":"FunctionDefinition","parameters":{"id":6508,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6503,"mutability":"mutable","name":"shares","nameLocation":"12105:6:22","nodeType":"VariableDeclaration","scope":6512,"src":"12097:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6502,"name":"uint256","nodeType":"ElementaryTypeName","src":"12097:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6505,"mutability":"mutable","name":"receiver","nameLocation":"12121:8:22","nodeType":"VariableDeclaration","scope":6512,"src":"12113:16:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6504,"name":"address","nodeType":"ElementaryTypeName","src":"12113:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6507,"mutability":"mutable","name":"owner","nameLocation":"12139:5:22","nodeType":"VariableDeclaration","scope":6512,"src":"12131:13:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6506,"name":"address","nodeType":"ElementaryTypeName","src":"12131:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12096:49:22"},"returnParameters":{"id":6511,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6510,"mutability":"mutable","name":"assets","nameLocation":"12172:6:22","nodeType":"VariableDeclaration","scope":6512,"src":"12164:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6509,"name":"uint256","nodeType":"ElementaryTypeName","src":"12164:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12163:16:22"},"scope":6513,"src":"12081:99:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":6514,"src":"398:11784:22","usedErrors":[],"usedEvents":[6364,6376,6525,6534]}],"src":"107:12076:22"},"id":22},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","exportedSymbols":{"IERC20":[6591]},"id":6592,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6515,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"106:24:23"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20","contractDependencies":[],"contractKind":"interface","documentation":{"id":6516,"nodeType":"StructuredDocumentation","src":"132:70:23","text":" @dev Interface of the ERC20 standard as defined in the EIP."},"fullyImplemented":false,"id":6591,"linearizedBaseContracts":[6591],"name":"IERC20","nameLocation":"213:6:23","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":6517,"nodeType":"StructuredDocumentation","src":"226:158:23","text":" @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."},"eventSelector":"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","id":6525,"name":"Transfer","nameLocation":"395:8:23","nodeType":"EventDefinition","parameters":{"id":6524,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6519,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"420:4:23","nodeType":"VariableDeclaration","scope":6525,"src":"404:20:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6518,"name":"address","nodeType":"ElementaryTypeName","src":"404:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6521,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"442:2:23","nodeType":"VariableDeclaration","scope":6525,"src":"426:18:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6520,"name":"address","nodeType":"ElementaryTypeName","src":"426:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6523,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"454:5:23","nodeType":"VariableDeclaration","scope":6525,"src":"446:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6522,"name":"uint256","nodeType":"ElementaryTypeName","src":"446:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"403:57:23"},"src":"389:72:23"},{"anonymous":false,"documentation":{"id":6526,"nodeType":"StructuredDocumentation","src":"467:148:23","text":" @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."},"eventSelector":"8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","id":6534,"name":"Approval","nameLocation":"626:8:23","nodeType":"EventDefinition","parameters":{"id":6533,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6528,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"651:5:23","nodeType":"VariableDeclaration","scope":6534,"src":"635:21:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6527,"name":"address","nodeType":"ElementaryTypeName","src":"635:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6530,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"674:7:23","nodeType":"VariableDeclaration","scope":6534,"src":"658:23:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6529,"name":"address","nodeType":"ElementaryTypeName","src":"658:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6532,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"691:5:23","nodeType":"VariableDeclaration","scope":6534,"src":"683:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6531,"name":"uint256","nodeType":"ElementaryTypeName","src":"683:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"634:63:23"},"src":"620:78:23"},{"documentation":{"id":6535,"nodeType":"StructuredDocumentation","src":"704:65:23","text":" @dev Returns the value of tokens in existence."},"functionSelector":"18160ddd","id":6540,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"783:11:23","nodeType":"FunctionDefinition","parameters":{"id":6536,"nodeType":"ParameterList","parameters":[],"src":"794:2:23"},"returnParameters":{"id":6539,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6538,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6540,"src":"820:7:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6537,"name":"uint256","nodeType":"ElementaryTypeName","src":"820:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"819:9:23"},"scope":6591,"src":"774:55:23","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6541,"nodeType":"StructuredDocumentation","src":"835:71:23","text":" @dev Returns the value of tokens owned by `account`."},"functionSelector":"70a08231","id":6548,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"920:9:23","nodeType":"FunctionDefinition","parameters":{"id":6544,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6543,"mutability":"mutable","name":"account","nameLocation":"938:7:23","nodeType":"VariableDeclaration","scope":6548,"src":"930:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6542,"name":"address","nodeType":"ElementaryTypeName","src":"930:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"929:17:23"},"returnParameters":{"id":6547,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6546,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6548,"src":"970:7:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6545,"name":"uint256","nodeType":"ElementaryTypeName","src":"970:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"969:9:23"},"scope":6591,"src":"911:68:23","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6549,"nodeType":"StructuredDocumentation","src":"985:213:23","text":" @dev Moves a `value` amount of tokens from the caller's account to `to`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"a9059cbb","id":6558,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"1212:8:23","nodeType":"FunctionDefinition","parameters":{"id":6554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6551,"mutability":"mutable","name":"to","nameLocation":"1229:2:23","nodeType":"VariableDeclaration","scope":6558,"src":"1221:10:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6550,"name":"address","nodeType":"ElementaryTypeName","src":"1221:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6553,"mutability":"mutable","name":"value","nameLocation":"1241:5:23","nodeType":"VariableDeclaration","scope":6558,"src":"1233:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6552,"name":"uint256","nodeType":"ElementaryTypeName","src":"1233:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1220:27:23"},"returnParameters":{"id":6557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6556,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6558,"src":"1266:4:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6555,"name":"bool","nodeType":"ElementaryTypeName","src":"1266:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1265:6:23"},"scope":6591,"src":"1203:69:23","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6559,"nodeType":"StructuredDocumentation","src":"1278:264:23","text":" @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called."},"functionSelector":"dd62ed3e","id":6568,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"1556:9:23","nodeType":"FunctionDefinition","parameters":{"id":6564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6561,"mutability":"mutable","name":"owner","nameLocation":"1574:5:23","nodeType":"VariableDeclaration","scope":6568,"src":"1566:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6560,"name":"address","nodeType":"ElementaryTypeName","src":"1566:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6563,"mutability":"mutable","name":"spender","nameLocation":"1589:7:23","nodeType":"VariableDeclaration","scope":6568,"src":"1581:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6562,"name":"address","nodeType":"ElementaryTypeName","src":"1581:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1565:32:23"},"returnParameters":{"id":6567,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6566,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6568,"src":"1621:7:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6565,"name":"uint256","nodeType":"ElementaryTypeName","src":"1621:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1620:9:23"},"scope":6591,"src":"1547:83:23","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6569,"nodeType":"StructuredDocumentation","src":"1636:667:23","text":" @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event."},"functionSelector":"095ea7b3","id":6578,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"2317:7:23","nodeType":"FunctionDefinition","parameters":{"id":6574,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6571,"mutability":"mutable","name":"spender","nameLocation":"2333:7:23","nodeType":"VariableDeclaration","scope":6578,"src":"2325:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6570,"name":"address","nodeType":"ElementaryTypeName","src":"2325:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6573,"mutability":"mutable","name":"value","nameLocation":"2350:5:23","nodeType":"VariableDeclaration","scope":6578,"src":"2342:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6572,"name":"uint256","nodeType":"ElementaryTypeName","src":"2342:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2324:32:23"},"returnParameters":{"id":6577,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6576,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6578,"src":"2375:4:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6575,"name":"bool","nodeType":"ElementaryTypeName","src":"2375:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2374:6:23"},"scope":6591,"src":"2308:73:23","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6579,"nodeType":"StructuredDocumentation","src":"2387:297:23","text":" @dev Moves a `value` amount of tokens from `from` to `to` using the\n allowance mechanism. `value` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"23b872dd","id":6590,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"2698:12:23","nodeType":"FunctionDefinition","parameters":{"id":6586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6581,"mutability":"mutable","name":"from","nameLocation":"2719:4:23","nodeType":"VariableDeclaration","scope":6590,"src":"2711:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6580,"name":"address","nodeType":"ElementaryTypeName","src":"2711:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6583,"mutability":"mutable","name":"to","nameLocation":"2733:2:23","nodeType":"VariableDeclaration","scope":6590,"src":"2725:10:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6582,"name":"address","nodeType":"ElementaryTypeName","src":"2725:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6585,"mutability":"mutable","name":"value","nameLocation":"2745:5:23","nodeType":"VariableDeclaration","scope":6590,"src":"2737:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6584,"name":"uint256","nodeType":"ElementaryTypeName","src":"2737:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2710:41:23"},"returnParameters":{"id":6589,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6588,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6590,"src":"2770:4:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6587,"name":"bool","nodeType":"ElementaryTypeName","src":"2770:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2769:6:23"},"scope":6591,"src":"2689:87:23","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":6592,"src":"203:2575:23","usedErrors":[],"usedEvents":[6525,6534]}],"src":"106:2673:23"},"id":23},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","exportedSymbols":{"IERC20":[6591],"IERC20Metadata":[6617]},"id":6618,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6593,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"125:24:24"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","id":6595,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6618,"sourceUnit":6592,"src":"151:37:24","symbolAliases":[{"foreign":{"id":6594,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6591,"src":"159:6:24","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":6597,"name":"IERC20","nameLocations":["305:6:24"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"305:6:24"},"id":6598,"nodeType":"InheritanceSpecifier","src":"305:6:24"}],"canonicalName":"IERC20Metadata","contractDependencies":[],"contractKind":"interface","documentation":{"id":6596,"nodeType":"StructuredDocumentation","src":"190:86:24","text":" @dev Interface for the optional metadata functions from the ERC20 standard."},"fullyImplemented":false,"id":6617,"linearizedBaseContracts":[6617,6591],"name":"IERC20Metadata","nameLocation":"287:14:24","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":6599,"nodeType":"StructuredDocumentation","src":"318:54:24","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":6604,"implemented":false,"kind":"function","modifiers":[],"name":"name","nameLocation":"386:4:24","nodeType":"FunctionDefinition","parameters":{"id":6600,"nodeType":"ParameterList","parameters":[],"src":"390:2:24"},"returnParameters":{"id":6603,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6602,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6604,"src":"416:13:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":6601,"name":"string","nodeType":"ElementaryTypeName","src":"416:6:24","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"415:15:24"},"scope":6617,"src":"377:54:24","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6605,"nodeType":"StructuredDocumentation","src":"437:56:24","text":" @dev Returns the symbol of the token."},"functionSelector":"95d89b41","id":6610,"implemented":false,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"507:6:24","nodeType":"FunctionDefinition","parameters":{"id":6606,"nodeType":"ParameterList","parameters":[],"src":"513:2:24"},"returnParameters":{"id":6609,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6608,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6610,"src":"539:13:24","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":6607,"name":"string","nodeType":"ElementaryTypeName","src":"539:6:24","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"538:15:24"},"scope":6617,"src":"498:56:24","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6611,"nodeType":"StructuredDocumentation","src":"560:65:24","text":" @dev Returns the decimals places of the token."},"functionSelector":"313ce567","id":6616,"implemented":false,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"639:8:24","nodeType":"FunctionDefinition","parameters":{"id":6612,"nodeType":"ParameterList","parameters":[],"src":"647:2:24"},"returnParameters":{"id":6615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6614,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6616,"src":"673:5:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":6613,"name":"uint8","nodeType":"ElementaryTypeName","src":"673:5:24","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"672:7:24"},"scope":6617,"src":"630:50:24","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6618,"src":"277:405:24","usedErrors":[],"usedEvents":[6525,6534]}],"src":"125:558:24"},"id":24},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol","exportedSymbols":{"IERC20Permit":[6653]},"id":6654,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6619,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"123:24:25"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20Permit","contractDependencies":[],"contractKind":"interface","documentation":{"id":6620,"nodeType":"StructuredDocumentation","src":"149:1963:25","text":" @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\n need to send a transaction, and thus is not required to hold Ether at all.\n ==== Security Considerations\n There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\n expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\n considered as an intention to spend the allowance in any specific way. The second is that because permits have\n built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\n take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\n generally recommended is:\n ```solidity\n function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\n try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\n doThing(..., value);\n }\n function doThing(..., uint256 value) public {\n token.safeTransferFrom(msg.sender, address(this), value);\n ...\n }\n ```\n Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\n `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\n {SafeERC20-safeTransferFrom}).\n Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\n contracts should have entry points that don't rely on permit."},"fullyImplemented":false,"id":6653,"linearizedBaseContracts":[6653],"name":"IERC20Permit","nameLocation":"2123:12:25","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":6621,"nodeType":"StructuredDocumentation","src":"2142:850:25","text":" @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\n given ``owner``'s signed approval.\n IMPORTANT: The same issues {IERC20-approve} has related to transaction\n ordering also apply here.\n Emits an {Approval} event.\n Requirements:\n - `spender` cannot be the zero address.\n - `deadline` must be a timestamp in the future.\n - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\n over the EIP712-formatted function arguments.\n - the signature must use ``owner``'s current nonce (see {nonces}).\n For more information on the signature format, see the\n https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\n section].\n CAUTION: See Security Considerations above."},"functionSelector":"d505accf","id":6638,"implemented":false,"kind":"function","modifiers":[],"name":"permit","nameLocation":"3006:6:25","nodeType":"FunctionDefinition","parameters":{"id":6636,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6623,"mutability":"mutable","name":"owner","nameLocation":"3030:5:25","nodeType":"VariableDeclaration","scope":6638,"src":"3022:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6622,"name":"address","nodeType":"ElementaryTypeName","src":"3022:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6625,"mutability":"mutable","name":"spender","nameLocation":"3053:7:25","nodeType":"VariableDeclaration","scope":6638,"src":"3045:15:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6624,"name":"address","nodeType":"ElementaryTypeName","src":"3045:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6627,"mutability":"mutable","name":"value","nameLocation":"3078:5:25","nodeType":"VariableDeclaration","scope":6638,"src":"3070:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6626,"name":"uint256","nodeType":"ElementaryTypeName","src":"3070:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6629,"mutability":"mutable","name":"deadline","nameLocation":"3101:8:25","nodeType":"VariableDeclaration","scope":6638,"src":"3093:16:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6628,"name":"uint256","nodeType":"ElementaryTypeName","src":"3093:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6631,"mutability":"mutable","name":"v","nameLocation":"3125:1:25","nodeType":"VariableDeclaration","scope":6638,"src":"3119:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":6630,"name":"uint8","nodeType":"ElementaryTypeName","src":"3119:5:25","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":6633,"mutability":"mutable","name":"r","nameLocation":"3144:1:25","nodeType":"VariableDeclaration","scope":6638,"src":"3136:9:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6632,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3136:7:25","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6635,"mutability":"mutable","name":"s","nameLocation":"3163:1:25","nodeType":"VariableDeclaration","scope":6638,"src":"3155:9:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6634,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3155:7:25","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3012:158:25"},"returnParameters":{"id":6637,"nodeType":"ParameterList","parameters":[],"src":"3179:0:25"},"scope":6653,"src":"2997:183:25","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":6639,"nodeType":"StructuredDocumentation","src":"3186:294:25","text":" @dev Returns the current nonce for `owner`. This value must be\n included whenever a signature is generated for {permit}.\n Every successful call to {permit} increases ``owner``'s nonce by one. This\n prevents a signature from being used multiple times."},"functionSelector":"7ecebe00","id":6646,"implemented":false,"kind":"function","modifiers":[],"name":"nonces","nameLocation":"3494:6:25","nodeType":"FunctionDefinition","parameters":{"id":6642,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6641,"mutability":"mutable","name":"owner","nameLocation":"3509:5:25","nodeType":"VariableDeclaration","scope":6646,"src":"3501:13:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6640,"name":"address","nodeType":"ElementaryTypeName","src":"3501:7:25","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3500:15:25"},"returnParameters":{"id":6645,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6644,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6646,"src":"3539:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6643,"name":"uint256","nodeType":"ElementaryTypeName","src":"3539:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3538:9:25"},"scope":6653,"src":"3485:63:25","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":6647,"nodeType":"StructuredDocumentation","src":"3554:128:25","text":" @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}."},"functionSelector":"3644e515","id":6652,"implemented":false,"kind":"function","modifiers":[],"name":"DOMAIN_SEPARATOR","nameLocation":"3749:16:25","nodeType":"FunctionDefinition","parameters":{"id":6648,"nodeType":"ParameterList","parameters":[],"src":"3765:2:25"},"returnParameters":{"id":6651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6650,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6652,"src":"3791:7:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6649,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3791:7:25","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3790:9:25"},"scope":6653,"src":"3740:60:25","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":6654,"src":"2113:1689:25","usedErrors":[],"usedEvents":[]}],"src":"123:3680:25"},"id":25},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","exportedSymbols":{"Address":[7196],"IERC20":[6591],"IERC20Permit":[6653],"SafeERC20":[6943]},"id":6944,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6655,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"115:24:26"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","id":6657,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6944,"sourceUnit":6592,"src":"141:37:26","symbolAliases":[{"foreign":{"id":6656,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6591,"src":"149:6:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol","file":"../extensions/IERC20Permit.sol","id":6659,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6944,"sourceUnit":6654,"src":"179:60:26","symbolAliases":[{"foreign":{"id":6658,"name":"IERC20Permit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6653,"src":"187:12:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"../../../utils/Address.sol","id":6661,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6944,"sourceUnit":7197,"src":"240:51:26","symbolAliases":[{"foreign":{"id":6660,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7196,"src":"248:7:26","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"SafeERC20","contractDependencies":[],"contractKind":"library","documentation":{"id":6662,"nodeType":"StructuredDocumentation","src":"293:457:26","text":" @title SafeERC20\n @dev Wrappers around ERC20 operations that throw on failure (when the token\n contract returns false). Tokens that return no value (and instead revert or\n throw on failure) are also supported, non-reverting calls are assumed to be\n successful.\n To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n which allows you to call the safe operations as `token.safeTransfer(...)`, etc."},"fullyImplemented":true,"id":6943,"linearizedBaseContracts":[6943],"name":"SafeERC20","nameLocation":"759:9:26","nodeType":"ContractDefinition","nodes":[{"global":false,"id":6665,"libraryName":{"id":6663,"name":"Address","nameLocations":["781:7:26"],"nodeType":"IdentifierPath","referencedDeclaration":7196,"src":"781:7:26"},"nodeType":"UsingForDirective","src":"775:26:26","typeName":{"id":6664,"name":"address","nodeType":"ElementaryTypeName","src":"793:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"documentation":{"id":6666,"nodeType":"StructuredDocumentation","src":"807:64:26","text":" @dev An operation with an ERC20 token failed."},"errorSelector":"5274afe7","id":6670,"name":"SafeERC20FailedOperation","nameLocation":"882:24:26","nodeType":"ErrorDefinition","parameters":{"id":6669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6668,"mutability":"mutable","name":"token","nameLocation":"915:5:26","nodeType":"VariableDeclaration","scope":6670,"src":"907:13:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6667,"name":"address","nodeType":"ElementaryTypeName","src":"907:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"906:15:26"},"src":"876:46:26"},{"documentation":{"id":6671,"nodeType":"StructuredDocumentation","src":"928:71:26","text":" @dev Indicates a failed `decreaseAllowance` request."},"errorSelector":"e570110f","id":6679,"name":"SafeERC20FailedDecreaseAllowance","nameLocation":"1010:32:26","nodeType":"ErrorDefinition","parameters":{"id":6678,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6673,"mutability":"mutable","name":"spender","nameLocation":"1051:7:26","nodeType":"VariableDeclaration","scope":6679,"src":"1043:15:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6672,"name":"address","nodeType":"ElementaryTypeName","src":"1043:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6675,"mutability":"mutable","name":"currentAllowance","nameLocation":"1068:16:26","nodeType":"VariableDeclaration","scope":6679,"src":"1060:24:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6674,"name":"uint256","nodeType":"ElementaryTypeName","src":"1060:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6677,"mutability":"mutable","name":"requestedDecrease","nameLocation":"1094:17:26","nodeType":"VariableDeclaration","scope":6679,"src":"1086:25:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6676,"name":"uint256","nodeType":"ElementaryTypeName","src":"1086:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1042:70:26"},"src":"1004:109:26"},{"body":{"id":6702,"nodeType":"Block","src":"1375:88:26","statements":[{"expression":{"arguments":[{"id":6691,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6683,"src":"1405:5:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":6694,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6683,"src":"1427:5:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"id":6695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1433:8:26","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":6558,"src":"1427:14:26","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":6696,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6685,"src":"1444:2:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6697,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6687,"src":"1448:5:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6698,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1443:11:26","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":6692,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1412:3:26","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":6693,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1416:10:26","memberName":"encodeCall","nodeType":"MemberAccess","src":"1412:14:26","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":6699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1412:43:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6690,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6893,"src":"1385:19:26","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6591_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":6700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1385:71:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6701,"nodeType":"ExpressionStatement","src":"1385:71:26"}]},"documentation":{"id":6680,"nodeType":"StructuredDocumentation","src":"1119:179:26","text":" @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n non-reverting calls are assumed to be successful."},"id":6703,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransfer","nameLocation":"1312:12:26","nodeType":"FunctionDefinition","parameters":{"id":6688,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6683,"mutability":"mutable","name":"token","nameLocation":"1332:5:26","nodeType":"VariableDeclaration","scope":6703,"src":"1325:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":6682,"nodeType":"UserDefinedTypeName","pathNode":{"id":6681,"name":"IERC20","nameLocations":["1325:6:26"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"1325:6:26"},"referencedDeclaration":6591,"src":"1325:6:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":6685,"mutability":"mutable","name":"to","nameLocation":"1347:2:26","nodeType":"VariableDeclaration","scope":6703,"src":"1339:10:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6684,"name":"address","nodeType":"ElementaryTypeName","src":"1339:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6687,"mutability":"mutable","name":"value","nameLocation":"1359:5:26","nodeType":"VariableDeclaration","scope":6703,"src":"1351:13:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6686,"name":"uint256","nodeType":"ElementaryTypeName","src":"1351:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1324:41:26"},"returnParameters":{"id":6689,"nodeType":"ParameterList","parameters":[],"src":"1375:0:26"},"scope":6943,"src":"1303:160:26","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6729,"nodeType":"Block","src":"1792:98:26","statements":[{"expression":{"arguments":[{"id":6717,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6707,"src":"1822:5:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":6720,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6707,"src":"1844:5:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"id":6721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1850:12:26","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":6590,"src":"1844:18:26","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},{"components":[{"id":6722,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6709,"src":"1865:4:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6723,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6711,"src":"1871:2:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6724,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6713,"src":"1875:5:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6725,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1864:17:26","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}],"expression":{"id":6718,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1829:3:26","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":6719,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1833:10:26","memberName":"encodeCall","nodeType":"MemberAccess","src":"1829:14:26","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":6726,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1829:53:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6716,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6893,"src":"1802:19:26","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6591_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":6727,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1802:81:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6728,"nodeType":"ExpressionStatement","src":"1802:81:26"}]},"documentation":{"id":6704,"nodeType":"StructuredDocumentation","src":"1469:228:26","text":" @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n calling contract. If `token` returns no value, non-reverting calls are assumed to be successful."},"id":6730,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"1711:16:26","nodeType":"FunctionDefinition","parameters":{"id":6714,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6707,"mutability":"mutable","name":"token","nameLocation":"1735:5:26","nodeType":"VariableDeclaration","scope":6730,"src":"1728:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":6706,"nodeType":"UserDefinedTypeName","pathNode":{"id":6705,"name":"IERC20","nameLocations":["1728:6:26"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"1728:6:26"},"referencedDeclaration":6591,"src":"1728:6:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":6709,"mutability":"mutable","name":"from","nameLocation":"1750:4:26","nodeType":"VariableDeclaration","scope":6730,"src":"1742:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6708,"name":"address","nodeType":"ElementaryTypeName","src":"1742:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6711,"mutability":"mutable","name":"to","nameLocation":"1764:2:26","nodeType":"VariableDeclaration","scope":6730,"src":"1756:10:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6710,"name":"address","nodeType":"ElementaryTypeName","src":"1756:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6713,"mutability":"mutable","name":"value","nameLocation":"1776:5:26","nodeType":"VariableDeclaration","scope":6730,"src":"1768:13:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6712,"name":"uint256","nodeType":"ElementaryTypeName","src":"1768:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1727:55:26"},"returnParameters":{"id":6715,"nodeType":"ParameterList","parameters":[],"src":"1792:0:26"},"scope":6943,"src":"1702:188:26","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6760,"nodeType":"Block","src":"2167:139:26","statements":[{"assignments":[6742],"declarations":[{"constant":false,"id":6742,"mutability":"mutable","name":"oldAllowance","nameLocation":"2185:12:26","nodeType":"VariableDeclaration","scope":6760,"src":"2177:20:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6741,"name":"uint256","nodeType":"ElementaryTypeName","src":"2177:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6751,"initialValue":{"arguments":[{"arguments":[{"id":6747,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2224:4:26","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$6943","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$6943","typeString":"library SafeERC20"}],"id":6746,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2216:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6745,"name":"address","nodeType":"ElementaryTypeName","src":"2216:7:26","typeDescriptions":{}}},"id":6748,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2216:13:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6749,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6736,"src":"2231:7:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6743,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6734,"src":"2200:5:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"id":6744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2206:9:26","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":6568,"src":"2200:15:26","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":6750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2200:39:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2177:62:26"},{"expression":{"arguments":[{"id":6753,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6734,"src":"2262:5:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},{"id":6754,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6736,"src":"2269:7:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6755,"name":"oldAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6742,"src":"2278:12:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":6756,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6738,"src":"2293:5:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2278:20:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6752,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6851,"src":"2249:12:26","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6591_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":6758,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2249:50:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6759,"nodeType":"ExpressionStatement","src":"2249:50:26"}]},"documentation":{"id":6731,"nodeType":"StructuredDocumentation","src":"1896:180:26","text":" @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful."},"id":6761,"implemented":true,"kind":"function","modifiers":[],"name":"safeIncreaseAllowance","nameLocation":"2090:21:26","nodeType":"FunctionDefinition","parameters":{"id":6739,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6734,"mutability":"mutable","name":"token","nameLocation":"2119:5:26","nodeType":"VariableDeclaration","scope":6761,"src":"2112:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":6733,"nodeType":"UserDefinedTypeName","pathNode":{"id":6732,"name":"IERC20","nameLocations":["2112:6:26"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"2112:6:26"},"referencedDeclaration":6591,"src":"2112:6:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":6736,"mutability":"mutable","name":"spender","nameLocation":"2134:7:26","nodeType":"VariableDeclaration","scope":6761,"src":"2126:15:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6735,"name":"address","nodeType":"ElementaryTypeName","src":"2126:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6738,"mutability":"mutable","name":"value","nameLocation":"2151:5:26","nodeType":"VariableDeclaration","scope":6761,"src":"2143:13:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6737,"name":"uint256","nodeType":"ElementaryTypeName","src":"2143:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2111:46:26"},"returnParameters":{"id":6740,"nodeType":"ParameterList","parameters":[],"src":"2167:0:26"},"scope":6943,"src":"2081:225:26","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6803,"nodeType":"Block","src":"2607:370:26","statements":[{"id":6802,"nodeType":"UncheckedBlock","src":"2617:354:26","statements":[{"assignments":[6773],"declarations":[{"constant":false,"id":6773,"mutability":"mutable","name":"currentAllowance","nameLocation":"2649:16:26","nodeType":"VariableDeclaration","scope":6802,"src":"2641:24:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6772,"name":"uint256","nodeType":"ElementaryTypeName","src":"2641:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6782,"initialValue":{"arguments":[{"arguments":[{"id":6778,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2692:4:26","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$6943","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$6943","typeString":"library SafeERC20"}],"id":6777,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2684:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6776,"name":"address","nodeType":"ElementaryTypeName","src":"2684:7:26","typeDescriptions":{}}},"id":6779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2684:13:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6780,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6767,"src":"2699:7:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":6774,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6765,"src":"2668:5:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"id":6775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2674:9:26","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":6568,"src":"2668:15:26","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":6781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2668:39:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2641:66:26"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6783,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6773,"src":"2725:16:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6784,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6769,"src":"2744:17:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2725:36:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6793,"nodeType":"IfStatement","src":"2721:160:26","trueBody":{"id":6792,"nodeType":"Block","src":"2763:118:26","statements":[{"errorCall":{"arguments":[{"id":6787,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6767,"src":"2821:7:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6788,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6773,"src":"2830:16:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6789,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6769,"src":"2848:17:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6786,"name":"SafeERC20FailedDecreaseAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6679,"src":"2788:32:26","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":6790,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2788:78:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6791,"nodeType":"RevertStatement","src":"2781:85:26"}]}},{"expression":{"arguments":[{"id":6795,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6765,"src":"2907:5:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},{"id":6796,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6767,"src":"2914:7:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6797,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6773,"src":"2923:16:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":6798,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6769,"src":"2942:17:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2923:36:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6794,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6851,"src":"2894:12:26","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6591_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":6800,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2894:66:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6801,"nodeType":"ExpressionStatement","src":"2894:66:26"}]}]},"documentation":{"id":6762,"nodeType":"StructuredDocumentation","src":"2312:192:26","text":" @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n value, non-reverting calls are assumed to be successful."},"id":6804,"implemented":true,"kind":"function","modifiers":[],"name":"safeDecreaseAllowance","nameLocation":"2518:21:26","nodeType":"FunctionDefinition","parameters":{"id":6770,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6765,"mutability":"mutable","name":"token","nameLocation":"2547:5:26","nodeType":"VariableDeclaration","scope":6804,"src":"2540:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":6764,"nodeType":"UserDefinedTypeName","pathNode":{"id":6763,"name":"IERC20","nameLocations":["2540:6:26"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"2540:6:26"},"referencedDeclaration":6591,"src":"2540:6:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":6767,"mutability":"mutable","name":"spender","nameLocation":"2562:7:26","nodeType":"VariableDeclaration","scope":6804,"src":"2554:15:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6766,"name":"address","nodeType":"ElementaryTypeName","src":"2554:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6769,"mutability":"mutable","name":"requestedDecrease","nameLocation":"2579:17:26","nodeType":"VariableDeclaration","scope":6804,"src":"2571:25:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6768,"name":"uint256","nodeType":"ElementaryTypeName","src":"2571:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2539:58:26"},"returnParameters":{"id":6771,"nodeType":"ParameterList","parameters":[],"src":"2607:0:26"},"scope":6943,"src":"2509:468:26","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6850,"nodeType":"Block","src":"3373:303:26","statements":[{"assignments":[6816],"declarations":[{"constant":false,"id":6816,"mutability":"mutable","name":"approvalCall","nameLocation":"3396:12:26","nodeType":"VariableDeclaration","scope":6850,"src":"3383:25:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6815,"name":"bytes","nodeType":"ElementaryTypeName","src":"3383:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":6825,"initialValue":{"arguments":[{"expression":{"id":6819,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6808,"src":"3426:5:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"id":6820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3432:7:26","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":6578,"src":"3426:13:26","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":6821,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6810,"src":"3442:7:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":6822,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6812,"src":"3451:5:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6823,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3441:16:26","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":6817,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3411:3:26","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":6818,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3415:10:26","memberName":"encodeCall","nodeType":"MemberAccess","src":"3411:14:26","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":6824,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3411:47:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3383:75:26"},{"condition":{"id":6830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3473:45:26","subExpression":{"arguments":[{"id":6827,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6808,"src":"3498:5:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},{"id":6828,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6816,"src":"3505:12:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6826,"name":"_callOptionalReturnBool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6942,"src":"3474:23:26","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6591_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (contract IERC20,bytes memory) returns (bool)"}},"id":6829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3474:44:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6849,"nodeType":"IfStatement","src":"3469:201:26","trueBody":{"id":6848,"nodeType":"Block","src":"3520:150:26","statements":[{"expression":{"arguments":[{"id":6832,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6808,"src":"3554:5:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":6835,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6808,"src":"3576:5:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"id":6836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3582:7:26","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":6578,"src":"3576:13:26","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":6837,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6810,"src":"3592:7:26","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":6838,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3601:1:26","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":6839,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3591:12:26","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(address,int_const 0)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(address,int_const 0)"}],"expression":{"id":6833,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3561:3:26","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":6834,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3565:10:26","memberName":"encodeCall","nodeType":"MemberAccess","src":"3561:14:26","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":6840,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3561:43:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6831,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6893,"src":"3534:19:26","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6591_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":6841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3534:71:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6842,"nodeType":"ExpressionStatement","src":"3534:71:26"},{"expression":{"arguments":[{"id":6844,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6808,"src":"3639:5:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},{"id":6845,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6816,"src":"3646:12:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6843,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6893,"src":"3619:19:26","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$6591_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":6846,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3619:40:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6847,"nodeType":"ExpressionStatement","src":"3619:40:26"}]}}]},"documentation":{"id":6805,"nodeType":"StructuredDocumentation","src":"2983:308:26","text":" @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n to be set to zero before setting it to a non-zero value, such as USDT."},"id":6851,"implemented":true,"kind":"function","modifiers":[],"name":"forceApprove","nameLocation":"3305:12:26","nodeType":"FunctionDefinition","parameters":{"id":6813,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6808,"mutability":"mutable","name":"token","nameLocation":"3325:5:26","nodeType":"VariableDeclaration","scope":6851,"src":"3318:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":6807,"nodeType":"UserDefinedTypeName","pathNode":{"id":6806,"name":"IERC20","nameLocations":["3318:6:26"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"3318:6:26"},"referencedDeclaration":6591,"src":"3318:6:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":6810,"mutability":"mutable","name":"spender","nameLocation":"3340:7:26","nodeType":"VariableDeclaration","scope":6851,"src":"3332:15:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6809,"name":"address","nodeType":"ElementaryTypeName","src":"3332:7:26","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6812,"mutability":"mutable","name":"value","nameLocation":"3357:5:26","nodeType":"VariableDeclaration","scope":6851,"src":"3349:13:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6811,"name":"uint256","nodeType":"ElementaryTypeName","src":"3349:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3317:46:26"},"returnParameters":{"id":6814,"nodeType":"ParameterList","parameters":[],"src":"3373:0:26"},"scope":6943,"src":"3296:380:26","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6892,"nodeType":"Block","src":"4129:559:26","statements":[{"assignments":[6861],"declarations":[{"constant":false,"id":6861,"mutability":"mutable","name":"returndata","nameLocation":"4491:10:26","nodeType":"VariableDeclaration","scope":6892,"src":"4478:23:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6860,"name":"bytes","nodeType":"ElementaryTypeName","src":"4478:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":6869,"initialValue":{"arguments":[{"id":6867,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6857,"src":"4532:4:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":6864,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6855,"src":"4512:5:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}],"id":6863,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4504:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6862,"name":"address","nodeType":"ElementaryTypeName","src":"4504:7:26","typeDescriptions":{}}},"id":6865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4504:14:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4519:12:26","memberName":"functionCall","nodeType":"MemberAccess","referencedDeclaration":7017,"src":"4504:27:26","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$attached_to$_t_address_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":6868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4504:33:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"4478:59:26"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6870,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6861,"src":"4551:10:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":6871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4562:6:26","memberName":"length","nodeType":"MemberAccess","src":"4551:17:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":6872,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4572:1:26","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4551:22:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"id":6881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4577:31:26","subExpression":{"arguments":[{"id":6876,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6861,"src":"4589:10:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":6878,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4602:4:26","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":{"id":6877,"name":"bool","nodeType":"ElementaryTypeName","src":"4602:4:26","typeDescriptions":{}}}],"id":6879,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"4601:6:26","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}],"expression":{"id":6874,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4578:3:26","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":6875,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4582:6:26","memberName":"decode","nodeType":"MemberAccess","src":"4578:10:26","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":6880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4578:30:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4551:57:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6891,"nodeType":"IfStatement","src":"4547:135:26","trueBody":{"id":6890,"nodeType":"Block","src":"4610:72:26","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":6886,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6855,"src":"4664:5:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}],"id":6885,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4656:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6884,"name":"address","nodeType":"ElementaryTypeName","src":"4656:7:26","typeDescriptions":{}}},"id":6887,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4656:14:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6883,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6670,"src":"4631:24:26","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":6888,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4631:40:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6889,"nodeType":"RevertStatement","src":"4624:47:26"}]}}]},"documentation":{"id":6852,"nodeType":"StructuredDocumentation","src":"3682:372:26","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants)."},"id":6893,"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturn","nameLocation":"4068:19:26","nodeType":"FunctionDefinition","parameters":{"id":6858,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6855,"mutability":"mutable","name":"token","nameLocation":"4095:5:26","nodeType":"VariableDeclaration","scope":6893,"src":"4088:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":6854,"nodeType":"UserDefinedTypeName","pathNode":{"id":6853,"name":"IERC20","nameLocations":["4088:6:26"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"4088:6:26"},"referencedDeclaration":6591,"src":"4088:6:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":6857,"mutability":"mutable","name":"data","nameLocation":"4115:4:26","nodeType":"VariableDeclaration","scope":6893,"src":"4102:17:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6856,"name":"bytes","nodeType":"ElementaryTypeName","src":"4102:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4087:33:26"},"returnParameters":{"id":6859,"nodeType":"ParameterList","parameters":[],"src":"4129:0:26"},"scope":6943,"src":"4059:629:26","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":6941,"nodeType":"Block","src":"5278:489:26","statements":[{"assignments":[6905,6907],"declarations":[{"constant":false,"id":6905,"mutability":"mutable","name":"success","nameLocation":"5579:7:26","nodeType":"VariableDeclaration","scope":6941,"src":"5574:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6904,"name":"bool","nodeType":"ElementaryTypeName","src":"5574:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":6907,"mutability":"mutable","name":"returndata","nameLocation":"5601:10:26","nodeType":"VariableDeclaration","scope":6941,"src":"5588:23:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6906,"name":"bytes","nodeType":"ElementaryTypeName","src":"5588:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":6915,"initialValue":{"arguments":[{"id":6913,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6899,"src":"5635:4:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":6910,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6897,"src":"5623:5:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}],"id":6909,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5615:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6908,"name":"address","nodeType":"ElementaryTypeName","src":"5615:7:26","typeDescriptions":{}}},"id":6911,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5615:14:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5630:4:26","memberName":"call","nodeType":"MemberAccess","src":"5615:19:26","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":6914,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5615:25:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"5573:67:26"},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6916,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6905,"src":"5657:7:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6920,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6917,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6907,"src":"5669:10:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":6918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5680:6:26","memberName":"length","nodeType":"MemberAccess","src":"5669:17:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":6919,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5690:1:26","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5669:22:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":6923,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6907,"src":"5706:10:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":6925,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5719:4:26","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":{"id":6924,"name":"bool","nodeType":"ElementaryTypeName","src":"5719:4:26","typeDescriptions":{}}}],"id":6926,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"5718:6:26","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}],"expression":{"id":6921,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5695:3:26","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":6922,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5699:6:26","memberName":"decode","nodeType":"MemberAccess","src":"5695:10:26","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":6927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5695:30:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5669:56:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":6929,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5668:58:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5657:69:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"arguments":[{"id":6933,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6897,"src":"5738:5:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}],"id":6932,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5730:7:26","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6931,"name":"address","nodeType":"ElementaryTypeName","src":"5730:7:26","typeDescriptions":{}}},"id":6934,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5730:14:26","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5745:4:26","memberName":"code","nodeType":"MemberAccess","src":"5730:19:26","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":6936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5750:6:26","memberName":"length","nodeType":"MemberAccess","src":"5730:26:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":6937,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5759:1:26","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5730:30:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5657:103:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":6903,"id":6940,"nodeType":"Return","src":"5650:110:26"}]},"documentation":{"id":6894,"nodeType":"StructuredDocumentation","src":"4694:490:26","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants).\n This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead."},"id":6942,"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturnBool","nameLocation":"5198:23:26","nodeType":"FunctionDefinition","parameters":{"id":6900,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6897,"mutability":"mutable","name":"token","nameLocation":"5229:5:26","nodeType":"VariableDeclaration","scope":6942,"src":"5222:12:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"},"typeName":{"id":6896,"nodeType":"UserDefinedTypeName","pathNode":{"id":6895,"name":"IERC20","nameLocations":["5222:6:26"],"nodeType":"IdentifierPath","referencedDeclaration":6591,"src":"5222:6:26"},"referencedDeclaration":6591,"src":"5222:6:26","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$6591","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":6899,"mutability":"mutable","name":"data","nameLocation":"5249:4:26","nodeType":"VariableDeclaration","scope":6942,"src":"5236:17:26","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6898,"name":"bytes","nodeType":"ElementaryTypeName","src":"5236:5:26","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5221:33:26"},"returnParameters":{"id":6903,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6902,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6942,"src":"5272:4:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6901,"name":"bool","nodeType":"ElementaryTypeName","src":"5272:4:26","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5271:6:26"},"scope":6943,"src":"5189:578:26","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":6944,"src":"751:5018:26","usedErrors":[6670,6679],"usedEvents":[]}],"src":"115:5655:26"},"id":26},"@openzeppelin/contracts/utils/Address.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","exportedSymbols":{"Address":[7196]},"id":7197,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":6945,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"101:24:27"},{"abstract":false,"baseContracts":[],"canonicalName":"Address","contractDependencies":[],"contractKind":"library","documentation":{"id":6946,"nodeType":"StructuredDocumentation","src":"127:67:27","text":" @dev Collection of functions related to the address type"},"fullyImplemented":true,"id":7196,"linearizedBaseContracts":[7196],"name":"Address","nameLocation":"203:7:27","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":6947,"nodeType":"StructuredDocumentation","src":"217:94:27","text":" @dev The ETH balance of the account is not enough to perform the operation."},"errorSelector":"cd786059","id":6951,"name":"AddressInsufficientBalance","nameLocation":"322:26:27","nodeType":"ErrorDefinition","parameters":{"id":6950,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6949,"mutability":"mutable","name":"account","nameLocation":"357:7:27","nodeType":"VariableDeclaration","scope":6951,"src":"349:15:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6948,"name":"address","nodeType":"ElementaryTypeName","src":"349:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"348:17:27"},"src":"316:50:27"},{"documentation":{"id":6952,"nodeType":"StructuredDocumentation","src":"372:75:27","text":" @dev There's no code at `target` (it is not a contract)."},"errorSelector":"9996b315","id":6956,"name":"AddressEmptyCode","nameLocation":"458:16:27","nodeType":"ErrorDefinition","parameters":{"id":6955,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6954,"mutability":"mutable","name":"target","nameLocation":"483:6:27","nodeType":"VariableDeclaration","scope":6956,"src":"475:14:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6953,"name":"address","nodeType":"ElementaryTypeName","src":"475:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"474:16:27"},"src":"452:39:27"},{"documentation":{"id":6957,"nodeType":"StructuredDocumentation","src":"497:89:27","text":" @dev A call to an address target failed. The target may have reverted."},"errorSelector":"1425ea42","id":6959,"name":"FailedInnerCall","nameLocation":"597:15:27","nodeType":"ErrorDefinition","parameters":{"id":6958,"nodeType":"ParameterList","parameters":[],"src":"612:2:27"},"src":"591:24:27"},{"body":{"id":6999,"nodeType":"Block","src":"1602:260:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":6969,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1624:4:27","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$7196","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$7196","typeString":"library Address"}],"id":6968,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1616:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6967,"name":"address","nodeType":"ElementaryTypeName","src":"1616:7:27","typeDescriptions":{}}},"id":6970,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1616:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":6971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1630:7:27","memberName":"balance","nodeType":"MemberAccess","src":"1616:21:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6972,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6964,"src":"1640:6:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1616:30:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6982,"nodeType":"IfStatement","src":"1612:109:27","trueBody":{"id":6981,"nodeType":"Block","src":"1648:73:27","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":6977,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1704:4:27","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$7196","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$7196","typeString":"library Address"}],"id":6976,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1696:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6975,"name":"address","nodeType":"ElementaryTypeName","src":"1696:7:27","typeDescriptions":{}}},"id":6978,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1696:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":6974,"name":"AddressInsufficientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6951,"src":"1669:26:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":6979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1669:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6980,"nodeType":"RevertStatement","src":"1662:48:27"}]}},{"assignments":[6984,null],"declarations":[{"constant":false,"id":6984,"mutability":"mutable","name":"success","nameLocation":"1737:7:27","nodeType":"VariableDeclaration","scope":6999,"src":"1732:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":6983,"name":"bool","nodeType":"ElementaryTypeName","src":"1732:4:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":6991,"initialValue":{"arguments":[{"hexValue":"","id":6989,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1780:2:27","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":6985,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6962,"src":"1750:9:27","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":6986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1760:4:27","memberName":"call","nodeType":"MemberAccess","src":"1750:14:27","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":6988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":6987,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6964,"src":"1772:6:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"1750:29:27","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":6990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1750:33:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"1731:52:27"},{"condition":{"id":6993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1797:8:27","subExpression":{"id":6992,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6984,"src":"1798:7:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6998,"nodeType":"IfStatement","src":"1793:63:27","trueBody":{"id":6997,"nodeType":"Block","src":"1807:49:27","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6994,"name":"FailedInnerCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6959,"src":"1828:15:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1828:17:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6996,"nodeType":"RevertStatement","src":"1821:24:27"}]}}]},"documentation":{"id":6960,"nodeType":"StructuredDocumentation","src":"621:905:27","text":" @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."},"id":7000,"implemented":true,"kind":"function","modifiers":[],"name":"sendValue","nameLocation":"1540:9:27","nodeType":"FunctionDefinition","parameters":{"id":6965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6962,"mutability":"mutable","name":"recipient","nameLocation":"1566:9:27","nodeType":"VariableDeclaration","scope":7000,"src":"1550:25:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":6961,"name":"address","nodeType":"ElementaryTypeName","src":"1550:15:27","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":6964,"mutability":"mutable","name":"amount","nameLocation":"1585:6:27","nodeType":"VariableDeclaration","scope":7000,"src":"1577:14:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6963,"name":"uint256","nodeType":"ElementaryTypeName","src":"1577:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1549:43:27"},"returnParameters":{"id":6966,"nodeType":"ParameterList","parameters":[],"src":"1602:0:27"},"scope":7196,"src":"1531:331:27","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7016,"nodeType":"Block","src":"2794:62:27","statements":[{"expression":{"arguments":[{"id":7011,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7003,"src":"2833:6:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7012,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7005,"src":"2841:4:27","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":7013,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2847:1:27","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":7010,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7063,"src":"2811:21:27","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256) returns (bytes memory)"}},"id":7014,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2811:38:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":7009,"id":7015,"nodeType":"Return","src":"2804:45:27"}]},"documentation":{"id":7001,"nodeType":"StructuredDocumentation","src":"1868:832:27","text":" @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason or custom error, it is bubbled\n up by this function (like regular Solidity function calls). However, if\n the call reverted with no returned reason, this function reverts with a\n {FailedInnerCall} error.\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert."},"id":7017,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"2714:12:27","nodeType":"FunctionDefinition","parameters":{"id":7006,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7003,"mutability":"mutable","name":"target","nameLocation":"2735:6:27","nodeType":"VariableDeclaration","scope":7017,"src":"2727:14:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7002,"name":"address","nodeType":"ElementaryTypeName","src":"2727:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7005,"mutability":"mutable","name":"data","nameLocation":"2756:4:27","nodeType":"VariableDeclaration","scope":7017,"src":"2743:17:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7004,"name":"bytes","nodeType":"ElementaryTypeName","src":"2743:5:27","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2726:35:27"},"returnParameters":{"id":7009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7008,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7017,"src":"2780:12:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7007,"name":"bytes","nodeType":"ElementaryTypeName","src":"2780:5:27","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2779:14:27"},"scope":7196,"src":"2705:151:27","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7062,"nodeType":"Block","src":"3293:279:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":7031,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3315:4:27","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$7196","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$7196","typeString":"library Address"}],"id":7030,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3307:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7029,"name":"address","nodeType":"ElementaryTypeName","src":"3307:7:27","typeDescriptions":{}}},"id":7032,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3307:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3321:7:27","memberName":"balance","nodeType":"MemberAccess","src":"3307:21:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":7034,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7024,"src":"3331:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3307:29:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7044,"nodeType":"IfStatement","src":"3303:108:27","trueBody":{"id":7043,"nodeType":"Block","src":"3338:73:27","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":7039,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3394:4:27","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$7196","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$7196","typeString":"library Address"}],"id":7038,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3386:7:27","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7037,"name":"address","nodeType":"ElementaryTypeName","src":"3386:7:27","typeDescriptions":{}}},"id":7040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3386:13:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7036,"name":"AddressInsufficientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6951,"src":"3359:26:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":7041,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3359:41:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7042,"nodeType":"RevertStatement","src":"3352:48:27"}]}},{"assignments":[7046,7048],"declarations":[{"constant":false,"id":7046,"mutability":"mutable","name":"success","nameLocation":"3426:7:27","nodeType":"VariableDeclaration","scope":7062,"src":"3421:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7045,"name":"bool","nodeType":"ElementaryTypeName","src":"3421:4:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":7048,"mutability":"mutable","name":"returndata","nameLocation":"3448:10:27","nodeType":"VariableDeclaration","scope":7062,"src":"3435:23:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7047,"name":"bytes","nodeType":"ElementaryTypeName","src":"3435:5:27","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":7055,"initialValue":{"arguments":[{"id":7053,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7022,"src":"3488:4:27","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":7049,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7020,"src":"3462:6:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3469:4:27","memberName":"call","nodeType":"MemberAccess","src":"3462:11:27","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":7052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":7051,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7024,"src":"3481:5:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"3462:25:27","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":7054,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3462:31:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3420:73:27"},{"expression":{"arguments":[{"id":7057,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7020,"src":"3537:6:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7058,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7046,"src":"3545:7:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":7059,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7048,"src":"3554:10:27","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7056,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7155,"src":"3510:26:27","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":7060,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3510:55:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":7028,"id":7061,"nodeType":"Return","src":"3503:62:27"}]},"documentation":{"id":7018,"nodeType":"StructuredDocumentation","src":"2862:313:27","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`."},"id":7063,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"3189:21:27","nodeType":"FunctionDefinition","parameters":{"id":7025,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7020,"mutability":"mutable","name":"target","nameLocation":"3219:6:27","nodeType":"VariableDeclaration","scope":7063,"src":"3211:14:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7019,"name":"address","nodeType":"ElementaryTypeName","src":"3211:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7022,"mutability":"mutable","name":"data","nameLocation":"3240:4:27","nodeType":"VariableDeclaration","scope":7063,"src":"3227:17:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7021,"name":"bytes","nodeType":"ElementaryTypeName","src":"3227:5:27","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":7024,"mutability":"mutable","name":"value","nameLocation":"3254:5:27","nodeType":"VariableDeclaration","scope":7063,"src":"3246:13:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7023,"name":"uint256","nodeType":"ElementaryTypeName","src":"3246:7:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3210:50:27"},"returnParameters":{"id":7028,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7027,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7063,"src":"3279:12:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7026,"name":"bytes","nodeType":"ElementaryTypeName","src":"3279:5:27","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3278:14:27"},"scope":7196,"src":"3180:392:27","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7088,"nodeType":"Block","src":"3811:154:27","statements":[{"assignments":[7074,7076],"declarations":[{"constant":false,"id":7074,"mutability":"mutable","name":"success","nameLocation":"3827:7:27","nodeType":"VariableDeclaration","scope":7088,"src":"3822:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7073,"name":"bool","nodeType":"ElementaryTypeName","src":"3822:4:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":7076,"mutability":"mutable","name":"returndata","nameLocation":"3849:10:27","nodeType":"VariableDeclaration","scope":7088,"src":"3836:23:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7075,"name":"bytes","nodeType":"ElementaryTypeName","src":"3836:5:27","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":7081,"initialValue":{"arguments":[{"id":7079,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7068,"src":"3881:4:27","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":7077,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7066,"src":"3863:6:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3870:10:27","memberName":"staticcall","nodeType":"MemberAccess","src":"3863:17:27","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":7080,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3863:23:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3821:65:27"},{"expression":{"arguments":[{"id":7083,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7066,"src":"3930:6:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7084,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7074,"src":"3938:7:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":7085,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7076,"src":"3947:10:27","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7082,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7155,"src":"3903:26:27","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":7086,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3903:55:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":7072,"id":7087,"nodeType":"Return","src":"3896:62:27"}]},"documentation":{"id":7064,"nodeType":"StructuredDocumentation","src":"3578:128:27","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call."},"id":7089,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"3720:18:27","nodeType":"FunctionDefinition","parameters":{"id":7069,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7066,"mutability":"mutable","name":"target","nameLocation":"3747:6:27","nodeType":"VariableDeclaration","scope":7089,"src":"3739:14:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7065,"name":"address","nodeType":"ElementaryTypeName","src":"3739:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7068,"mutability":"mutable","name":"data","nameLocation":"3768:4:27","nodeType":"VariableDeclaration","scope":7089,"src":"3755:17:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7067,"name":"bytes","nodeType":"ElementaryTypeName","src":"3755:5:27","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3738:35:27"},"returnParameters":{"id":7072,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7071,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7089,"src":"3797:12:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7070,"name":"bytes","nodeType":"ElementaryTypeName","src":"3797:5:27","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3796:14:27"},"scope":7196,"src":"3711:254:27","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7114,"nodeType":"Block","src":"4203:156:27","statements":[{"assignments":[7100,7102],"declarations":[{"constant":false,"id":7100,"mutability":"mutable","name":"success","nameLocation":"4219:7:27","nodeType":"VariableDeclaration","scope":7114,"src":"4214:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7099,"name":"bool","nodeType":"ElementaryTypeName","src":"4214:4:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":7102,"mutability":"mutable","name":"returndata","nameLocation":"4241:10:27","nodeType":"VariableDeclaration","scope":7114,"src":"4228:23:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7101,"name":"bytes","nodeType":"ElementaryTypeName","src":"4228:5:27","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":7107,"initialValue":{"arguments":[{"id":7105,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7094,"src":"4275:4:27","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":7103,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7092,"src":"4255:6:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4262:12:27","memberName":"delegatecall","nodeType":"MemberAccess","src":"4255:19:27","typeDescriptions":{"typeIdentifier":"t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) returns (bool,bytes memory)"}},"id":7106,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4255:25:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"4213:67:27"},{"expression":{"arguments":[{"id":7109,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7092,"src":"4324:6:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":7110,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7100,"src":"4332:7:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":7111,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7102,"src":"4341:10:27","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7108,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7155,"src":"4297:26:27","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":7112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4297:55:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":7098,"id":7113,"nodeType":"Return","src":"4290:62:27"}]},"documentation":{"id":7090,"nodeType":"StructuredDocumentation","src":"3971:130:27","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call."},"id":7115,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"4115:20:27","nodeType":"FunctionDefinition","parameters":{"id":7095,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7092,"mutability":"mutable","name":"target","nameLocation":"4144:6:27","nodeType":"VariableDeclaration","scope":7115,"src":"4136:14:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7091,"name":"address","nodeType":"ElementaryTypeName","src":"4136:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7094,"mutability":"mutable","name":"data","nameLocation":"4165:4:27","nodeType":"VariableDeclaration","scope":7115,"src":"4152:17:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7093,"name":"bytes","nodeType":"ElementaryTypeName","src":"4152:5:27","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4135:35:27"},"returnParameters":{"id":7098,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7097,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7115,"src":"4189:12:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7096,"name":"bytes","nodeType":"ElementaryTypeName","src":"4189:5:27","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4188:14:27"},"scope":7196,"src":"4106:253:27","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7154,"nodeType":"Block","src":"4783:424:27","statements":[{"condition":{"id":7128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4797:8:27","subExpression":{"id":7127,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7120,"src":"4798:7:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7152,"nodeType":"Block","src":"4857:344:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7134,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7122,"src":"5045:10:27","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5056:6:27","memberName":"length","nodeType":"MemberAccess","src":"5045:17:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":7136,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5066:1:27","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5045:22:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":7138,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7118,"src":"5071:6:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5078:4:27","memberName":"code","nodeType":"MemberAccess","src":"5071:11:27","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5083:6:27","memberName":"length","nodeType":"MemberAccess","src":"5071:18:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":7141,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5093:1:27","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5071:23:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5045:49:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7149,"nodeType":"IfStatement","src":"5041:119:27","trueBody":{"id":7148,"nodeType":"Block","src":"5096:64:27","statements":[{"errorCall":{"arguments":[{"id":7145,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7118,"src":"5138:6:27","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7144,"name":"AddressEmptyCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6956,"src":"5121:16:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":7146,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5121:24:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7147,"nodeType":"RevertStatement","src":"5114:31:27"}]}},{"expression":{"id":7150,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7122,"src":"5180:10:27","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":7126,"id":7151,"nodeType":"Return","src":"5173:17:27"}]},"id":7153,"nodeType":"IfStatement","src":"4793:408:27","trueBody":{"id":7133,"nodeType":"Block","src":"4807:44:27","statements":[{"expression":{"arguments":[{"id":7130,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7122,"src":"4829:10:27","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7129,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7195,"src":"4821:7:27","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":7131,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4821:19:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7132,"nodeType":"ExpressionStatement","src":"4821:19:27"}]}}]},"documentation":{"id":7116,"nodeType":"StructuredDocumentation","src":"4365:255:27","text":" @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an\n unsuccessful call."},"id":7155,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResultFromTarget","nameLocation":"4634:26:27","nodeType":"FunctionDefinition","parameters":{"id":7123,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7118,"mutability":"mutable","name":"target","nameLocation":"4678:6:27","nodeType":"VariableDeclaration","scope":7155,"src":"4670:14:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7117,"name":"address","nodeType":"ElementaryTypeName","src":"4670:7:27","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7120,"mutability":"mutable","name":"success","nameLocation":"4699:7:27","nodeType":"VariableDeclaration","scope":7155,"src":"4694:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7119,"name":"bool","nodeType":"ElementaryTypeName","src":"4694:4:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":7122,"mutability":"mutable","name":"returndata","nameLocation":"4729:10:27","nodeType":"VariableDeclaration","scope":7155,"src":"4716:23:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7121,"name":"bytes","nodeType":"ElementaryTypeName","src":"4716:5:27","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4660:85:27"},"returnParameters":{"id":7126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7125,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7155,"src":"4769:12:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7124,"name":"bytes","nodeType":"ElementaryTypeName","src":"4769:5:27","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4768:14:27"},"scope":7196,"src":"4625:582:27","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7176,"nodeType":"Block","src":"5509:122:27","statements":[{"condition":{"id":7166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"5523:8:27","subExpression":{"id":7165,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7158,"src":"5524:7:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7174,"nodeType":"Block","src":"5583:42:27","statements":[{"expression":{"id":7172,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7160,"src":"5604:10:27","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":7164,"id":7173,"nodeType":"Return","src":"5597:17:27"}]},"id":7175,"nodeType":"IfStatement","src":"5519:106:27","trueBody":{"id":7171,"nodeType":"Block","src":"5533:44:27","statements":[{"expression":{"arguments":[{"id":7168,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7160,"src":"5555:10:27","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":7167,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7195,"src":"5547:7:27","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":7169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5547:19:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7170,"nodeType":"ExpressionStatement","src":"5547:19:27"}]}}]},"documentation":{"id":7156,"nodeType":"StructuredDocumentation","src":"5213:189:27","text":" @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n revert reason or with a default {FailedInnerCall} error."},"id":7177,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResult","nameLocation":"5416:16:27","nodeType":"FunctionDefinition","parameters":{"id":7161,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7158,"mutability":"mutable","name":"success","nameLocation":"5438:7:27","nodeType":"VariableDeclaration","scope":7177,"src":"5433:12:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7157,"name":"bool","nodeType":"ElementaryTypeName","src":"5433:4:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":7160,"mutability":"mutable","name":"returndata","nameLocation":"5460:10:27","nodeType":"VariableDeclaration","scope":7177,"src":"5447:23:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7159,"name":"bytes","nodeType":"ElementaryTypeName","src":"5447:5:27","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5432:39:27"},"returnParameters":{"id":7164,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7163,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7177,"src":"5495:12:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7162,"name":"bytes","nodeType":"ElementaryTypeName","src":"5495:5:27","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5494:14:27"},"scope":7196,"src":"5407:224:27","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7194,"nodeType":"Block","src":"5798:461:27","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":7183,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7180,"src":"5874:10:27","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":7184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5885:6:27","memberName":"length","nodeType":"MemberAccess","src":"5874:17:27","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":7185,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5894:1:27","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5874:21:27","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7192,"nodeType":"Block","src":"6204:49:27","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7189,"name":"FailedInnerCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6959,"src":"6225:15:27","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7190,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6225:17:27","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7191,"nodeType":"RevertStatement","src":"6218:24:27"}]},"id":7193,"nodeType":"IfStatement","src":"5870:383:27","trueBody":{"id":7188,"nodeType":"Block","src":"5897:301:27","statements":[{"AST":{"nativeSrc":"6055:133:27","nodeType":"YulBlock","src":"6055:133:27","statements":[{"nativeSrc":"6073:40:27","nodeType":"YulVariableDeclaration","src":"6073:40:27","value":{"arguments":[{"name":"returndata","nativeSrc":"6102:10:27","nodeType":"YulIdentifier","src":"6102:10:27"}],"functionName":{"name":"mload","nativeSrc":"6096:5:27","nodeType":"YulIdentifier","src":"6096:5:27"},"nativeSrc":"6096:17:27","nodeType":"YulFunctionCall","src":"6096:17:27"},"variables":[{"name":"returndata_size","nativeSrc":"6077:15:27","nodeType":"YulTypedName","src":"6077:15:27","type":""}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"6141:2:27","nodeType":"YulLiteral","src":"6141:2:27","type":"","value":"32"},{"name":"returndata","nativeSrc":"6145:10:27","nodeType":"YulIdentifier","src":"6145:10:27"}],"functionName":{"name":"add","nativeSrc":"6137:3:27","nodeType":"YulIdentifier","src":"6137:3:27"},"nativeSrc":"6137:19:27","nodeType":"YulFunctionCall","src":"6137:19:27"},{"name":"returndata_size","nativeSrc":"6158:15:27","nodeType":"YulIdentifier","src":"6158:15:27"}],"functionName":{"name":"revert","nativeSrc":"6130:6:27","nodeType":"YulIdentifier","src":"6130:6:27"},"nativeSrc":"6130:44:27","nodeType":"YulFunctionCall","src":"6130:44:27"},"nativeSrc":"6130:44:27","nodeType":"YulExpressionStatement","src":"6130:44:27"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":7180,"isOffset":false,"isSlot":false,"src":"6102:10:27","valueSize":1},{"declaration":7180,"isOffset":false,"isSlot":false,"src":"6145:10:27","valueSize":1}],"id":7187,"nodeType":"InlineAssembly","src":"6046:142:27"}]}}]},"documentation":{"id":7178,"nodeType":"StructuredDocumentation","src":"5637:101:27","text":" @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}."},"id":7195,"implemented":true,"kind":"function","modifiers":[],"name":"_revert","nameLocation":"5752:7:27","nodeType":"FunctionDefinition","parameters":{"id":7181,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7180,"mutability":"mutable","name":"returndata","nameLocation":"5773:10:27","nodeType":"VariableDeclaration","scope":7195,"src":"5760:23:27","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":7179,"name":"bytes","nodeType":"ElementaryTypeName","src":"5760:5:27","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5759:25:27"},"returnParameters":{"id":7182,"nodeType":"ParameterList","parameters":[],"src":"5798:0:27"},"scope":7196,"src":"5743:516:27","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":7197,"src":"195:6066:27","usedErrors":[6951,6956,6959],"usedEvents":[]}],"src":"101:6161:27"},"id":27},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","exportedSymbols":{"SafeCast":[8951]},"id":8952,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":7198,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"192:24:28"},{"abstract":false,"baseContracts":[],"canonicalName":"SafeCast","contractDependencies":[],"contractKind":"library","documentation":{"id":7199,"nodeType":"StructuredDocumentation","src":"218:545:28","text":" @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\n checks.\n Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n easily result in undesired exploitation or bugs, since developers usually\n assume that overflows raise errors. `SafeCast` restores this intuition by\n reverting the transaction when such an operation overflows.\n Using this library instead of the unchecked operations eliminates an entire\n class of bugs, so it's recommended to use it always."},"fullyImplemented":true,"id":8951,"linearizedBaseContracts":[8951],"name":"SafeCast","nameLocation":"772:8:28","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":7200,"nodeType":"StructuredDocumentation","src":"787:68:28","text":" @dev Value doesn't fit in an uint of `bits` size."},"errorSelector":"6dfcc650","id":7206,"name":"SafeCastOverflowedUintDowncast","nameLocation":"866:30:28","nodeType":"ErrorDefinition","parameters":{"id":7205,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7202,"mutability":"mutable","name":"bits","nameLocation":"903:4:28","nodeType":"VariableDeclaration","scope":7206,"src":"897:10:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7201,"name":"uint8","nodeType":"ElementaryTypeName","src":"897:5:28","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":7204,"mutability":"mutable","name":"value","nameLocation":"917:5:28","nodeType":"VariableDeclaration","scope":7206,"src":"909:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7203,"name":"uint256","nodeType":"ElementaryTypeName","src":"909:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"896:27:28"},"src":"860:64:28"},{"documentation":{"id":7207,"nodeType":"StructuredDocumentation","src":"930:75:28","text":" @dev An int value doesn't fit in an uint of `bits` size."},"errorSelector":"a8ce4432","id":7211,"name":"SafeCastOverflowedIntToUint","nameLocation":"1016:27:28","nodeType":"ErrorDefinition","parameters":{"id":7210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7209,"mutability":"mutable","name":"value","nameLocation":"1051:5:28","nodeType":"VariableDeclaration","scope":7211,"src":"1044:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":7208,"name":"int256","nodeType":"ElementaryTypeName","src":"1044:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1043:14:28"},"src":"1010:48:28"},{"documentation":{"id":7212,"nodeType":"StructuredDocumentation","src":"1064:67:28","text":" @dev Value doesn't fit in an int of `bits` size."},"errorSelector":"327269a7","id":7218,"name":"SafeCastOverflowedIntDowncast","nameLocation":"1142:29:28","nodeType":"ErrorDefinition","parameters":{"id":7217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7214,"mutability":"mutable","name":"bits","nameLocation":"1178:4:28","nodeType":"VariableDeclaration","scope":7218,"src":"1172:10:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":7213,"name":"uint8","nodeType":"ElementaryTypeName","src":"1172:5:28","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":7216,"mutability":"mutable","name":"value","nameLocation":"1191:5:28","nodeType":"VariableDeclaration","scope":7218,"src":"1184:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":7215,"name":"int256","nodeType":"ElementaryTypeName","src":"1184:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1171:26:28"},"src":"1136:62:28"},{"documentation":{"id":7219,"nodeType":"StructuredDocumentation","src":"1204:75:28","text":" @dev An uint value doesn't fit in an int of `bits` size."},"errorSelector":"24775e06","id":7223,"name":"SafeCastOverflowedUintToInt","nameLocation":"1290:27:28","nodeType":"ErrorDefinition","parameters":{"id":7222,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7221,"mutability":"mutable","name":"value","nameLocation":"1326:5:28","nodeType":"VariableDeclaration","scope":7223,"src":"1318:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7220,"name":"uint256","nodeType":"ElementaryTypeName","src":"1318:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1317:15:28"},"src":"1284:49:28"},{"body":{"id":7250,"nodeType":"Block","src":"1690:152:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7231,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7226,"src":"1704:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7234,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1717:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"},"typeName":{"id":7233,"name":"uint248","nodeType":"ElementaryTypeName","src":"1717:7:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"}],"id":7232,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"1712:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7235,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1712:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint248","typeString":"type(uint248)"}},"id":7236,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1726:3:28","memberName":"max","nodeType":"MemberAccess","src":"1712:17:28","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"src":"1704:25:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7244,"nodeType":"IfStatement","src":"1700:105:28","trueBody":{"id":7243,"nodeType":"Block","src":"1731:74:28","statements":[{"errorCall":{"arguments":[{"hexValue":"323438","id":7239,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1783:3:28","typeDescriptions":{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},"value":"248"},{"id":7240,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7226,"src":"1788:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7238,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"1752:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7241,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1752:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7242,"nodeType":"RevertStatement","src":"1745:49:28"}]}},{"expression":{"arguments":[{"id":7247,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7226,"src":"1829:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7246,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1821:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"},"typeName":{"id":7245,"name":"uint248","nodeType":"ElementaryTypeName","src":"1821:7:28","typeDescriptions":{}}},"id":7248,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1821:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"functionReturnParameters":7230,"id":7249,"nodeType":"Return","src":"1814:21:28"}]},"documentation":{"id":7224,"nodeType":"StructuredDocumentation","src":"1339:280:28","text":" @dev Returns the downcasted uint248 from uint256, reverting on\n overflow (when the input is greater than largest uint248).\n Counterpart to Solidity's `uint248` operator.\n Requirements:\n - input must fit into 248 bits"},"id":7251,"implemented":true,"kind":"function","modifiers":[],"name":"toUint248","nameLocation":"1633:9:28","nodeType":"FunctionDefinition","parameters":{"id":7227,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7226,"mutability":"mutable","name":"value","nameLocation":"1651:5:28","nodeType":"VariableDeclaration","scope":7251,"src":"1643:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7225,"name":"uint256","nodeType":"ElementaryTypeName","src":"1643:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1642:15:28"},"returnParameters":{"id":7230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7229,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7251,"src":"1681:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"},"typeName":{"id":7228,"name":"uint248","nodeType":"ElementaryTypeName","src":"1681:7:28","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"visibility":"internal"}],"src":"1680:9:28"},"scope":8951,"src":"1624:218:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7278,"nodeType":"Block","src":"2199:152:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7259,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7254,"src":"2213:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7262,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2226:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"},"typeName":{"id":7261,"name":"uint240","nodeType":"ElementaryTypeName","src":"2226:7:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"}],"id":7260,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2221:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7263,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2221:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint240","typeString":"type(uint240)"}},"id":7264,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2235:3:28","memberName":"max","nodeType":"MemberAccess","src":"2221:17:28","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"src":"2213:25:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7272,"nodeType":"IfStatement","src":"2209:105:28","trueBody":{"id":7271,"nodeType":"Block","src":"2240:74:28","statements":[{"errorCall":{"arguments":[{"hexValue":"323430","id":7267,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2292:3:28","typeDescriptions":{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},"value":"240"},{"id":7268,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7254,"src":"2297:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7266,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"2261:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7269,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2261:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7270,"nodeType":"RevertStatement","src":"2254:49:28"}]}},{"expression":{"arguments":[{"id":7275,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7254,"src":"2338:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7274,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2330:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"},"typeName":{"id":7273,"name":"uint240","nodeType":"ElementaryTypeName","src":"2330:7:28","typeDescriptions":{}}},"id":7276,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2330:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"functionReturnParameters":7258,"id":7277,"nodeType":"Return","src":"2323:21:28"}]},"documentation":{"id":7252,"nodeType":"StructuredDocumentation","src":"1848:280:28","text":" @dev Returns the downcasted uint240 from uint256, reverting on\n overflow (when the input is greater than largest uint240).\n Counterpart to Solidity's `uint240` operator.\n Requirements:\n - input must fit into 240 bits"},"id":7279,"implemented":true,"kind":"function","modifiers":[],"name":"toUint240","nameLocation":"2142:9:28","nodeType":"FunctionDefinition","parameters":{"id":7255,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7254,"mutability":"mutable","name":"value","nameLocation":"2160:5:28","nodeType":"VariableDeclaration","scope":7279,"src":"2152:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7253,"name":"uint256","nodeType":"ElementaryTypeName","src":"2152:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2151:15:28"},"returnParameters":{"id":7258,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7257,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7279,"src":"2190:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"},"typeName":{"id":7256,"name":"uint240","nodeType":"ElementaryTypeName","src":"2190:7:28","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"visibility":"internal"}],"src":"2189:9:28"},"scope":8951,"src":"2133:218:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7306,"nodeType":"Block","src":"2708:152:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7287,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7282,"src":"2722:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7290,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2735:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"},"typeName":{"id":7289,"name":"uint232","nodeType":"ElementaryTypeName","src":"2735:7:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"}],"id":7288,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2730:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7291,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2730:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint232","typeString":"type(uint232)"}},"id":7292,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2744:3:28","memberName":"max","nodeType":"MemberAccess","src":"2730:17:28","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"src":"2722:25:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7300,"nodeType":"IfStatement","src":"2718:105:28","trueBody":{"id":7299,"nodeType":"Block","src":"2749:74:28","statements":[{"errorCall":{"arguments":[{"hexValue":"323332","id":7295,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2801:3:28","typeDescriptions":{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},"value":"232"},{"id":7296,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7282,"src":"2806:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7294,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"2770:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7297,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2770:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7298,"nodeType":"RevertStatement","src":"2763:49:28"}]}},{"expression":{"arguments":[{"id":7303,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7282,"src":"2847:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7302,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2839:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"},"typeName":{"id":7301,"name":"uint232","nodeType":"ElementaryTypeName","src":"2839:7:28","typeDescriptions":{}}},"id":7304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2839:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"functionReturnParameters":7286,"id":7305,"nodeType":"Return","src":"2832:21:28"}]},"documentation":{"id":7280,"nodeType":"StructuredDocumentation","src":"2357:280:28","text":" @dev Returns the downcasted uint232 from uint256, reverting on\n overflow (when the input is greater than largest uint232).\n Counterpart to Solidity's `uint232` operator.\n Requirements:\n - input must fit into 232 bits"},"id":7307,"implemented":true,"kind":"function","modifiers":[],"name":"toUint232","nameLocation":"2651:9:28","nodeType":"FunctionDefinition","parameters":{"id":7283,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7282,"mutability":"mutable","name":"value","nameLocation":"2669:5:28","nodeType":"VariableDeclaration","scope":7307,"src":"2661:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7281,"name":"uint256","nodeType":"ElementaryTypeName","src":"2661:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2660:15:28"},"returnParameters":{"id":7286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7285,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7307,"src":"2699:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"},"typeName":{"id":7284,"name":"uint232","nodeType":"ElementaryTypeName","src":"2699:7:28","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"visibility":"internal"}],"src":"2698:9:28"},"scope":8951,"src":"2642:218:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7334,"nodeType":"Block","src":"3217:152:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7315,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7310,"src":"3231:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7318,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3244:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":7317,"name":"uint224","nodeType":"ElementaryTypeName","src":"3244:7:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"}],"id":7316,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3239:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7319,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3239:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint224","typeString":"type(uint224)"}},"id":7320,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3253:3:28","memberName":"max","nodeType":"MemberAccess","src":"3239:17:28","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"src":"3231:25:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7328,"nodeType":"IfStatement","src":"3227:105:28","trueBody":{"id":7327,"nodeType":"Block","src":"3258:74:28","statements":[{"errorCall":{"arguments":[{"hexValue":"323234","id":7323,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3310:3:28","typeDescriptions":{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},"value":"224"},{"id":7324,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7310,"src":"3315:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7322,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"3279:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7325,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3279:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7326,"nodeType":"RevertStatement","src":"3272:49:28"}]}},{"expression":{"arguments":[{"id":7331,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7310,"src":"3356:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7330,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3348:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":7329,"name":"uint224","nodeType":"ElementaryTypeName","src":"3348:7:28","typeDescriptions":{}}},"id":7332,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3348:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"functionReturnParameters":7314,"id":7333,"nodeType":"Return","src":"3341:21:28"}]},"documentation":{"id":7308,"nodeType":"StructuredDocumentation","src":"2866:280:28","text":" @dev Returns the downcasted uint224 from uint256, reverting on\n overflow (when the input is greater than largest uint224).\n Counterpart to Solidity's `uint224` operator.\n Requirements:\n - input must fit into 224 bits"},"id":7335,"implemented":true,"kind":"function","modifiers":[],"name":"toUint224","nameLocation":"3160:9:28","nodeType":"FunctionDefinition","parameters":{"id":7311,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7310,"mutability":"mutable","name":"value","nameLocation":"3178:5:28","nodeType":"VariableDeclaration","scope":7335,"src":"3170:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7309,"name":"uint256","nodeType":"ElementaryTypeName","src":"3170:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3169:15:28"},"returnParameters":{"id":7314,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7313,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7335,"src":"3208:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"},"typeName":{"id":7312,"name":"uint224","nodeType":"ElementaryTypeName","src":"3208:7:28","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"visibility":"internal"}],"src":"3207:9:28"},"scope":8951,"src":"3151:218:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7362,"nodeType":"Block","src":"3726:152:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7343,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7338,"src":"3740:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7346,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3753:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"},"typeName":{"id":7345,"name":"uint216","nodeType":"ElementaryTypeName","src":"3753:7:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"}],"id":7344,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3748:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7347,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3748:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint216","typeString":"type(uint216)"}},"id":7348,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3762:3:28","memberName":"max","nodeType":"MemberAccess","src":"3748:17:28","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"src":"3740:25:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7356,"nodeType":"IfStatement","src":"3736:105:28","trueBody":{"id":7355,"nodeType":"Block","src":"3767:74:28","statements":[{"errorCall":{"arguments":[{"hexValue":"323136","id":7351,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3819:3:28","typeDescriptions":{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},"value":"216"},{"id":7352,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7338,"src":"3824:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7350,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"3788:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7353,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3788:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7354,"nodeType":"RevertStatement","src":"3781:49:28"}]}},{"expression":{"arguments":[{"id":7359,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7338,"src":"3865:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7358,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3857:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"},"typeName":{"id":7357,"name":"uint216","nodeType":"ElementaryTypeName","src":"3857:7:28","typeDescriptions":{}}},"id":7360,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3857:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"functionReturnParameters":7342,"id":7361,"nodeType":"Return","src":"3850:21:28"}]},"documentation":{"id":7336,"nodeType":"StructuredDocumentation","src":"3375:280:28","text":" @dev Returns the downcasted uint216 from uint256, reverting on\n overflow (when the input is greater than largest uint216).\n Counterpart to Solidity's `uint216` operator.\n Requirements:\n - input must fit into 216 bits"},"id":7363,"implemented":true,"kind":"function","modifiers":[],"name":"toUint216","nameLocation":"3669:9:28","nodeType":"FunctionDefinition","parameters":{"id":7339,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7338,"mutability":"mutable","name":"value","nameLocation":"3687:5:28","nodeType":"VariableDeclaration","scope":7363,"src":"3679:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7337,"name":"uint256","nodeType":"ElementaryTypeName","src":"3679:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3678:15:28"},"returnParameters":{"id":7342,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7341,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7363,"src":"3717:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"},"typeName":{"id":7340,"name":"uint216","nodeType":"ElementaryTypeName","src":"3717:7:28","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"visibility":"internal"}],"src":"3716:9:28"},"scope":8951,"src":"3660:218:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7390,"nodeType":"Block","src":"4235:152:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7371,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7366,"src":"4249:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7374,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4262:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"},"typeName":{"id":7373,"name":"uint208","nodeType":"ElementaryTypeName","src":"4262:7:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"}],"id":7372,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4257:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7375,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4257:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint208","typeString":"type(uint208)"}},"id":7376,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4271:3:28","memberName":"max","nodeType":"MemberAccess","src":"4257:17:28","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"src":"4249:25:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7384,"nodeType":"IfStatement","src":"4245:105:28","trueBody":{"id":7383,"nodeType":"Block","src":"4276:74:28","statements":[{"errorCall":{"arguments":[{"hexValue":"323038","id":7379,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4328:3:28","typeDescriptions":{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},"value":"208"},{"id":7380,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7366,"src":"4333:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7378,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"4297:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7381,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4297:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7382,"nodeType":"RevertStatement","src":"4290:49:28"}]}},{"expression":{"arguments":[{"id":7387,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7366,"src":"4374:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7386,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4366:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"},"typeName":{"id":7385,"name":"uint208","nodeType":"ElementaryTypeName","src":"4366:7:28","typeDescriptions":{}}},"id":7388,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4366:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"functionReturnParameters":7370,"id":7389,"nodeType":"Return","src":"4359:21:28"}]},"documentation":{"id":7364,"nodeType":"StructuredDocumentation","src":"3884:280:28","text":" @dev Returns the downcasted uint208 from uint256, reverting on\n overflow (when the input is greater than largest uint208).\n Counterpart to Solidity's `uint208` operator.\n Requirements:\n - input must fit into 208 bits"},"id":7391,"implemented":true,"kind":"function","modifiers":[],"name":"toUint208","nameLocation":"4178:9:28","nodeType":"FunctionDefinition","parameters":{"id":7367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7366,"mutability":"mutable","name":"value","nameLocation":"4196:5:28","nodeType":"VariableDeclaration","scope":7391,"src":"4188:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7365,"name":"uint256","nodeType":"ElementaryTypeName","src":"4188:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4187:15:28"},"returnParameters":{"id":7370,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7369,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7391,"src":"4226:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"},"typeName":{"id":7368,"name":"uint208","nodeType":"ElementaryTypeName","src":"4226:7:28","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"visibility":"internal"}],"src":"4225:9:28"},"scope":8951,"src":"4169:218:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7418,"nodeType":"Block","src":"4744:152:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7399,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7394,"src":"4758:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7402,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4771:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"},"typeName":{"id":7401,"name":"uint200","nodeType":"ElementaryTypeName","src":"4771:7:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"}],"id":7400,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4766:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7403,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4766:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint200","typeString":"type(uint200)"}},"id":7404,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4780:3:28","memberName":"max","nodeType":"MemberAccess","src":"4766:17:28","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"src":"4758:25:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7412,"nodeType":"IfStatement","src":"4754:105:28","trueBody":{"id":7411,"nodeType":"Block","src":"4785:74:28","statements":[{"errorCall":{"arguments":[{"hexValue":"323030","id":7407,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4837:3:28","typeDescriptions":{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},"value":"200"},{"id":7408,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7394,"src":"4842:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7406,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"4806:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4806:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7410,"nodeType":"RevertStatement","src":"4799:49:28"}]}},{"expression":{"arguments":[{"id":7415,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7394,"src":"4883:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7414,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4875:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"},"typeName":{"id":7413,"name":"uint200","nodeType":"ElementaryTypeName","src":"4875:7:28","typeDescriptions":{}}},"id":7416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4875:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"functionReturnParameters":7398,"id":7417,"nodeType":"Return","src":"4868:21:28"}]},"documentation":{"id":7392,"nodeType":"StructuredDocumentation","src":"4393:280:28","text":" @dev Returns the downcasted uint200 from uint256, reverting on\n overflow (when the input is greater than largest uint200).\n Counterpart to Solidity's `uint200` operator.\n Requirements:\n - input must fit into 200 bits"},"id":7419,"implemented":true,"kind":"function","modifiers":[],"name":"toUint200","nameLocation":"4687:9:28","nodeType":"FunctionDefinition","parameters":{"id":7395,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7394,"mutability":"mutable","name":"value","nameLocation":"4705:5:28","nodeType":"VariableDeclaration","scope":7419,"src":"4697:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7393,"name":"uint256","nodeType":"ElementaryTypeName","src":"4697:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4696:15:28"},"returnParameters":{"id":7398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7397,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7419,"src":"4735:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"},"typeName":{"id":7396,"name":"uint200","nodeType":"ElementaryTypeName","src":"4735:7:28","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"visibility":"internal"}],"src":"4734:9:28"},"scope":8951,"src":"4678:218:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7446,"nodeType":"Block","src":"5253:152:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7427,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7422,"src":"5267:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7430,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5280:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"},"typeName":{"id":7429,"name":"uint192","nodeType":"ElementaryTypeName","src":"5280:7:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"}],"id":7428,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5275:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7431,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5275:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint192","typeString":"type(uint192)"}},"id":7432,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5289:3:28","memberName":"max","nodeType":"MemberAccess","src":"5275:17:28","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"src":"5267:25:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7440,"nodeType":"IfStatement","src":"5263:105:28","trueBody":{"id":7439,"nodeType":"Block","src":"5294:74:28","statements":[{"errorCall":{"arguments":[{"hexValue":"313932","id":7435,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5346:3:28","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},{"id":7436,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7422,"src":"5351:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7434,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"5315:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5315:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7438,"nodeType":"RevertStatement","src":"5308:49:28"}]}},{"expression":{"arguments":[{"id":7443,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7422,"src":"5392:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7442,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5384:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"},"typeName":{"id":7441,"name":"uint192","nodeType":"ElementaryTypeName","src":"5384:7:28","typeDescriptions":{}}},"id":7444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5384:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"functionReturnParameters":7426,"id":7445,"nodeType":"Return","src":"5377:21:28"}]},"documentation":{"id":7420,"nodeType":"StructuredDocumentation","src":"4902:280:28","text":" @dev Returns the downcasted uint192 from uint256, reverting on\n overflow (when the input is greater than largest uint192).\n Counterpart to Solidity's `uint192` operator.\n Requirements:\n - input must fit into 192 bits"},"id":7447,"implemented":true,"kind":"function","modifiers":[],"name":"toUint192","nameLocation":"5196:9:28","nodeType":"FunctionDefinition","parameters":{"id":7423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7422,"mutability":"mutable","name":"value","nameLocation":"5214:5:28","nodeType":"VariableDeclaration","scope":7447,"src":"5206:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7421,"name":"uint256","nodeType":"ElementaryTypeName","src":"5206:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5205:15:28"},"returnParameters":{"id":7426,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7425,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7447,"src":"5244:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"},"typeName":{"id":7424,"name":"uint192","nodeType":"ElementaryTypeName","src":"5244:7:28","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"visibility":"internal"}],"src":"5243:9:28"},"scope":8951,"src":"5187:218:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7474,"nodeType":"Block","src":"5762:152:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7455,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7450,"src":"5776:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7458,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5789:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"},"typeName":{"id":7457,"name":"uint184","nodeType":"ElementaryTypeName","src":"5789:7:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"}],"id":7456,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5784:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7459,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5784:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint184","typeString":"type(uint184)"}},"id":7460,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5798:3:28","memberName":"max","nodeType":"MemberAccess","src":"5784:17:28","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"src":"5776:25:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7468,"nodeType":"IfStatement","src":"5772:105:28","trueBody":{"id":7467,"nodeType":"Block","src":"5803:74:28","statements":[{"errorCall":{"arguments":[{"hexValue":"313834","id":7463,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5855:3:28","typeDescriptions":{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},"value":"184"},{"id":7464,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7450,"src":"5860:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7462,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"5824:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7465,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5824:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7466,"nodeType":"RevertStatement","src":"5817:49:28"}]}},{"expression":{"arguments":[{"id":7471,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7450,"src":"5901:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7470,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5893:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"},"typeName":{"id":7469,"name":"uint184","nodeType":"ElementaryTypeName","src":"5893:7:28","typeDescriptions":{}}},"id":7472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5893:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"functionReturnParameters":7454,"id":7473,"nodeType":"Return","src":"5886:21:28"}]},"documentation":{"id":7448,"nodeType":"StructuredDocumentation","src":"5411:280:28","text":" @dev Returns the downcasted uint184 from uint256, reverting on\n overflow (when the input is greater than largest uint184).\n Counterpart to Solidity's `uint184` operator.\n Requirements:\n - input must fit into 184 bits"},"id":7475,"implemented":true,"kind":"function","modifiers":[],"name":"toUint184","nameLocation":"5705:9:28","nodeType":"FunctionDefinition","parameters":{"id":7451,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7450,"mutability":"mutable","name":"value","nameLocation":"5723:5:28","nodeType":"VariableDeclaration","scope":7475,"src":"5715:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7449,"name":"uint256","nodeType":"ElementaryTypeName","src":"5715:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5714:15:28"},"returnParameters":{"id":7454,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7453,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7475,"src":"5753:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"},"typeName":{"id":7452,"name":"uint184","nodeType":"ElementaryTypeName","src":"5753:7:28","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"visibility":"internal"}],"src":"5752:9:28"},"scope":8951,"src":"5696:218:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7502,"nodeType":"Block","src":"6271:152:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7483,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7478,"src":"6285:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7486,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6298:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"},"typeName":{"id":7485,"name":"uint176","nodeType":"ElementaryTypeName","src":"6298:7:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"}],"id":7484,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6293:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7487,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6293:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint176","typeString":"type(uint176)"}},"id":7488,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6307:3:28","memberName":"max","nodeType":"MemberAccess","src":"6293:17:28","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"src":"6285:25:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7496,"nodeType":"IfStatement","src":"6281:105:28","trueBody":{"id":7495,"nodeType":"Block","src":"6312:74:28","statements":[{"errorCall":{"arguments":[{"hexValue":"313736","id":7491,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6364:3:28","typeDescriptions":{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},"value":"176"},{"id":7492,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7478,"src":"6369:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7490,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"6333:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7493,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6333:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7494,"nodeType":"RevertStatement","src":"6326:49:28"}]}},{"expression":{"arguments":[{"id":7499,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7478,"src":"6410:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7498,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6402:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"},"typeName":{"id":7497,"name":"uint176","nodeType":"ElementaryTypeName","src":"6402:7:28","typeDescriptions":{}}},"id":7500,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6402:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"functionReturnParameters":7482,"id":7501,"nodeType":"Return","src":"6395:21:28"}]},"documentation":{"id":7476,"nodeType":"StructuredDocumentation","src":"5920:280:28","text":" @dev Returns the downcasted uint176 from uint256, reverting on\n overflow (when the input is greater than largest uint176).\n Counterpart to Solidity's `uint176` operator.\n Requirements:\n - input must fit into 176 bits"},"id":7503,"implemented":true,"kind":"function","modifiers":[],"name":"toUint176","nameLocation":"6214:9:28","nodeType":"FunctionDefinition","parameters":{"id":7479,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7478,"mutability":"mutable","name":"value","nameLocation":"6232:5:28","nodeType":"VariableDeclaration","scope":7503,"src":"6224:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7477,"name":"uint256","nodeType":"ElementaryTypeName","src":"6224:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6223:15:28"},"returnParameters":{"id":7482,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7481,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7503,"src":"6262:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"},"typeName":{"id":7480,"name":"uint176","nodeType":"ElementaryTypeName","src":"6262:7:28","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"visibility":"internal"}],"src":"6261:9:28"},"scope":8951,"src":"6205:218:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7530,"nodeType":"Block","src":"6780:152:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7511,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7506,"src":"6794:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7514,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6807:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"},"typeName":{"id":7513,"name":"uint168","nodeType":"ElementaryTypeName","src":"6807:7:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"}],"id":7512,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6802:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7515,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6802:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint168","typeString":"type(uint168)"}},"id":7516,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6816:3:28","memberName":"max","nodeType":"MemberAccess","src":"6802:17:28","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"src":"6794:25:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7524,"nodeType":"IfStatement","src":"6790:105:28","trueBody":{"id":7523,"nodeType":"Block","src":"6821:74:28","statements":[{"errorCall":{"arguments":[{"hexValue":"313638","id":7519,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6873:3:28","typeDescriptions":{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},"value":"168"},{"id":7520,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7506,"src":"6878:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7518,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"6842:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7521,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6842:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7522,"nodeType":"RevertStatement","src":"6835:49:28"}]}},{"expression":{"arguments":[{"id":7527,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7506,"src":"6919:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7526,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6911:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"},"typeName":{"id":7525,"name":"uint168","nodeType":"ElementaryTypeName","src":"6911:7:28","typeDescriptions":{}}},"id":7528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6911:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"functionReturnParameters":7510,"id":7529,"nodeType":"Return","src":"6904:21:28"}]},"documentation":{"id":7504,"nodeType":"StructuredDocumentation","src":"6429:280:28","text":" @dev Returns the downcasted uint168 from uint256, reverting on\n overflow (when the input is greater than largest uint168).\n Counterpart to Solidity's `uint168` operator.\n Requirements:\n - input must fit into 168 bits"},"id":7531,"implemented":true,"kind":"function","modifiers":[],"name":"toUint168","nameLocation":"6723:9:28","nodeType":"FunctionDefinition","parameters":{"id":7507,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7506,"mutability":"mutable","name":"value","nameLocation":"6741:5:28","nodeType":"VariableDeclaration","scope":7531,"src":"6733:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7505,"name":"uint256","nodeType":"ElementaryTypeName","src":"6733:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6732:15:28"},"returnParameters":{"id":7510,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7509,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7531,"src":"6771:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"},"typeName":{"id":7508,"name":"uint168","nodeType":"ElementaryTypeName","src":"6771:7:28","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"visibility":"internal"}],"src":"6770:9:28"},"scope":8951,"src":"6714:218:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7558,"nodeType":"Block","src":"7289:152:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7539,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7534,"src":"7303:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7542,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7316:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":7541,"name":"uint160","nodeType":"ElementaryTypeName","src":"7316:7:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"}],"id":7540,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"7311:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7543,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7311:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint160","typeString":"type(uint160)"}},"id":7544,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7325:3:28","memberName":"max","nodeType":"MemberAccess","src":"7311:17:28","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"src":"7303:25:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7552,"nodeType":"IfStatement","src":"7299:105:28","trueBody":{"id":7551,"nodeType":"Block","src":"7330:74:28","statements":[{"errorCall":{"arguments":[{"hexValue":"313630","id":7547,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7382:3:28","typeDescriptions":{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},"value":"160"},{"id":7548,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7534,"src":"7387:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7546,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"7351:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7351:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7550,"nodeType":"RevertStatement","src":"7344:49:28"}]}},{"expression":{"arguments":[{"id":7555,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7534,"src":"7428:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7554,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7420:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":7553,"name":"uint160","nodeType":"ElementaryTypeName","src":"7420:7:28","typeDescriptions":{}}},"id":7556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7420:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"functionReturnParameters":7538,"id":7557,"nodeType":"Return","src":"7413:21:28"}]},"documentation":{"id":7532,"nodeType":"StructuredDocumentation","src":"6938:280:28","text":" @dev Returns the downcasted uint160 from uint256, reverting on\n overflow (when the input is greater than largest uint160).\n Counterpart to Solidity's `uint160` operator.\n Requirements:\n - input must fit into 160 bits"},"id":7559,"implemented":true,"kind":"function","modifiers":[],"name":"toUint160","nameLocation":"7232:9:28","nodeType":"FunctionDefinition","parameters":{"id":7535,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7534,"mutability":"mutable","name":"value","nameLocation":"7250:5:28","nodeType":"VariableDeclaration","scope":7559,"src":"7242:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7533,"name":"uint256","nodeType":"ElementaryTypeName","src":"7242:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7241:15:28"},"returnParameters":{"id":7538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7537,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7559,"src":"7280:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"},"typeName":{"id":7536,"name":"uint160","nodeType":"ElementaryTypeName","src":"7280:7:28","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"visibility":"internal"}],"src":"7279:9:28"},"scope":8951,"src":"7223:218:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7586,"nodeType":"Block","src":"7798:152:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7567,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7562,"src":"7812:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7570,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7825:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"},"typeName":{"id":7569,"name":"uint152","nodeType":"ElementaryTypeName","src":"7825:7:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"}],"id":7568,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"7820:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7571,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7820:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint152","typeString":"type(uint152)"}},"id":7572,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7834:3:28","memberName":"max","nodeType":"MemberAccess","src":"7820:17:28","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"src":"7812:25:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7580,"nodeType":"IfStatement","src":"7808:105:28","trueBody":{"id":7579,"nodeType":"Block","src":"7839:74:28","statements":[{"errorCall":{"arguments":[{"hexValue":"313532","id":7575,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7891:3:28","typeDescriptions":{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},"value":"152"},{"id":7576,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7562,"src":"7896:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7574,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"7860:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7860:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7578,"nodeType":"RevertStatement","src":"7853:49:28"}]}},{"expression":{"arguments":[{"id":7583,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7562,"src":"7937:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7582,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7929:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"},"typeName":{"id":7581,"name":"uint152","nodeType":"ElementaryTypeName","src":"7929:7:28","typeDescriptions":{}}},"id":7584,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7929:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"functionReturnParameters":7566,"id":7585,"nodeType":"Return","src":"7922:21:28"}]},"documentation":{"id":7560,"nodeType":"StructuredDocumentation","src":"7447:280:28","text":" @dev Returns the downcasted uint152 from uint256, reverting on\n overflow (when the input is greater than largest uint152).\n Counterpart to Solidity's `uint152` operator.\n Requirements:\n - input must fit into 152 bits"},"id":7587,"implemented":true,"kind":"function","modifiers":[],"name":"toUint152","nameLocation":"7741:9:28","nodeType":"FunctionDefinition","parameters":{"id":7563,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7562,"mutability":"mutable","name":"value","nameLocation":"7759:5:28","nodeType":"VariableDeclaration","scope":7587,"src":"7751:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7561,"name":"uint256","nodeType":"ElementaryTypeName","src":"7751:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7750:15:28"},"returnParameters":{"id":7566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7565,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7587,"src":"7789:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"},"typeName":{"id":7564,"name":"uint152","nodeType":"ElementaryTypeName","src":"7789:7:28","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"visibility":"internal"}],"src":"7788:9:28"},"scope":8951,"src":"7732:218:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7614,"nodeType":"Block","src":"8307:152:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7595,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7590,"src":"8321:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7598,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8334:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"},"typeName":{"id":7597,"name":"uint144","nodeType":"ElementaryTypeName","src":"8334:7:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"}],"id":7596,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8329:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7599,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8329:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint144","typeString":"type(uint144)"}},"id":7600,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8343:3:28","memberName":"max","nodeType":"MemberAccess","src":"8329:17:28","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"src":"8321:25:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7608,"nodeType":"IfStatement","src":"8317:105:28","trueBody":{"id":7607,"nodeType":"Block","src":"8348:74:28","statements":[{"errorCall":{"arguments":[{"hexValue":"313434","id":7603,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8400:3:28","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},"value":"144"},{"id":7604,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7590,"src":"8405:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7602,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"8369:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7605,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8369:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7606,"nodeType":"RevertStatement","src":"8362:49:28"}]}},{"expression":{"arguments":[{"id":7611,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7590,"src":"8446:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7610,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8438:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"},"typeName":{"id":7609,"name":"uint144","nodeType":"ElementaryTypeName","src":"8438:7:28","typeDescriptions":{}}},"id":7612,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8438:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"functionReturnParameters":7594,"id":7613,"nodeType":"Return","src":"8431:21:28"}]},"documentation":{"id":7588,"nodeType":"StructuredDocumentation","src":"7956:280:28","text":" @dev Returns the downcasted uint144 from uint256, reverting on\n overflow (when the input is greater than largest uint144).\n Counterpart to Solidity's `uint144` operator.\n Requirements:\n - input must fit into 144 bits"},"id":7615,"implemented":true,"kind":"function","modifiers":[],"name":"toUint144","nameLocation":"8250:9:28","nodeType":"FunctionDefinition","parameters":{"id":7591,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7590,"mutability":"mutable","name":"value","nameLocation":"8268:5:28","nodeType":"VariableDeclaration","scope":7615,"src":"8260:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7589,"name":"uint256","nodeType":"ElementaryTypeName","src":"8260:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8259:15:28"},"returnParameters":{"id":7594,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7593,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7615,"src":"8298:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"},"typeName":{"id":7592,"name":"uint144","nodeType":"ElementaryTypeName","src":"8298:7:28","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"visibility":"internal"}],"src":"8297:9:28"},"scope":8951,"src":"8241:218:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7642,"nodeType":"Block","src":"8816:152:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7623,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7618,"src":"8830:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7626,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8843:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"},"typeName":{"id":7625,"name":"uint136","nodeType":"ElementaryTypeName","src":"8843:7:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"}],"id":7624,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8838:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7627,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8838:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint136","typeString":"type(uint136)"}},"id":7628,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8852:3:28","memberName":"max","nodeType":"MemberAccess","src":"8838:17:28","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"src":"8830:25:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7636,"nodeType":"IfStatement","src":"8826:105:28","trueBody":{"id":7635,"nodeType":"Block","src":"8857:74:28","statements":[{"errorCall":{"arguments":[{"hexValue":"313336","id":7631,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8909:3:28","typeDescriptions":{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},"value":"136"},{"id":7632,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7618,"src":"8914:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7630,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"8878:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7633,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8878:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7634,"nodeType":"RevertStatement","src":"8871:49:28"}]}},{"expression":{"arguments":[{"id":7639,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7618,"src":"8955:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7638,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8947:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"},"typeName":{"id":7637,"name":"uint136","nodeType":"ElementaryTypeName","src":"8947:7:28","typeDescriptions":{}}},"id":7640,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8947:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"functionReturnParameters":7622,"id":7641,"nodeType":"Return","src":"8940:21:28"}]},"documentation":{"id":7616,"nodeType":"StructuredDocumentation","src":"8465:280:28","text":" @dev Returns the downcasted uint136 from uint256, reverting on\n overflow (when the input is greater than largest uint136).\n Counterpart to Solidity's `uint136` operator.\n Requirements:\n - input must fit into 136 bits"},"id":7643,"implemented":true,"kind":"function","modifiers":[],"name":"toUint136","nameLocation":"8759:9:28","nodeType":"FunctionDefinition","parameters":{"id":7619,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7618,"mutability":"mutable","name":"value","nameLocation":"8777:5:28","nodeType":"VariableDeclaration","scope":7643,"src":"8769:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7617,"name":"uint256","nodeType":"ElementaryTypeName","src":"8769:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8768:15:28"},"returnParameters":{"id":7622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7621,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7643,"src":"8807:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"},"typeName":{"id":7620,"name":"uint136","nodeType":"ElementaryTypeName","src":"8807:7:28","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"visibility":"internal"}],"src":"8806:9:28"},"scope":8951,"src":"8750:218:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7670,"nodeType":"Block","src":"9325:152:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7651,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7646,"src":"9339:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7654,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9352:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":7653,"name":"uint128","nodeType":"ElementaryTypeName","src":"9352:7:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"}],"id":7652,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9347:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7655,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9347:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint128","typeString":"type(uint128)"}},"id":7656,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9361:3:28","memberName":"max","nodeType":"MemberAccess","src":"9347:17:28","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"9339:25:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7664,"nodeType":"IfStatement","src":"9335:105:28","trueBody":{"id":7663,"nodeType":"Block","src":"9366:74:28","statements":[{"errorCall":{"arguments":[{"hexValue":"313238","id":7659,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9418:3:28","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},{"id":7660,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7646,"src":"9423:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7658,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"9387:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7661,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9387:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7662,"nodeType":"RevertStatement","src":"9380:49:28"}]}},{"expression":{"arguments":[{"id":7667,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7646,"src":"9464:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7666,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9456:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":7665,"name":"uint128","nodeType":"ElementaryTypeName","src":"9456:7:28","typeDescriptions":{}}},"id":7668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9456:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":7650,"id":7669,"nodeType":"Return","src":"9449:21:28"}]},"documentation":{"id":7644,"nodeType":"StructuredDocumentation","src":"8974:280:28","text":" @dev Returns the downcasted uint128 from uint256, reverting on\n overflow (when the input is greater than largest uint128).\n Counterpart to Solidity's `uint128` operator.\n Requirements:\n - input must fit into 128 bits"},"id":7671,"implemented":true,"kind":"function","modifiers":[],"name":"toUint128","nameLocation":"9268:9:28","nodeType":"FunctionDefinition","parameters":{"id":7647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7646,"mutability":"mutable","name":"value","nameLocation":"9286:5:28","nodeType":"VariableDeclaration","scope":7671,"src":"9278:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7645,"name":"uint256","nodeType":"ElementaryTypeName","src":"9278:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9277:15:28"},"returnParameters":{"id":7650,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7649,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7671,"src":"9316:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":7648,"name":"uint128","nodeType":"ElementaryTypeName","src":"9316:7:28","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"9315:9:28"},"scope":8951,"src":"9259:218:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7698,"nodeType":"Block","src":"9834:152:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7685,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7679,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7674,"src":"9848:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7682,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9861:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"},"typeName":{"id":7681,"name":"uint120","nodeType":"ElementaryTypeName","src":"9861:7:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"}],"id":7680,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9856:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7683,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9856:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint120","typeString":"type(uint120)"}},"id":7684,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9870:3:28","memberName":"max","nodeType":"MemberAccess","src":"9856:17:28","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"src":"9848:25:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7692,"nodeType":"IfStatement","src":"9844:105:28","trueBody":{"id":7691,"nodeType":"Block","src":"9875:74:28","statements":[{"errorCall":{"arguments":[{"hexValue":"313230","id":7687,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9927:3:28","typeDescriptions":{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},"value":"120"},{"id":7688,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7674,"src":"9932:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7686,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"9896:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7689,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9896:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7690,"nodeType":"RevertStatement","src":"9889:49:28"}]}},{"expression":{"arguments":[{"id":7695,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7674,"src":"9973:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7694,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9965:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"},"typeName":{"id":7693,"name":"uint120","nodeType":"ElementaryTypeName","src":"9965:7:28","typeDescriptions":{}}},"id":7696,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9965:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"functionReturnParameters":7678,"id":7697,"nodeType":"Return","src":"9958:21:28"}]},"documentation":{"id":7672,"nodeType":"StructuredDocumentation","src":"9483:280:28","text":" @dev Returns the downcasted uint120 from uint256, reverting on\n overflow (when the input is greater than largest uint120).\n Counterpart to Solidity's `uint120` operator.\n Requirements:\n - input must fit into 120 bits"},"id":7699,"implemented":true,"kind":"function","modifiers":[],"name":"toUint120","nameLocation":"9777:9:28","nodeType":"FunctionDefinition","parameters":{"id":7675,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7674,"mutability":"mutable","name":"value","nameLocation":"9795:5:28","nodeType":"VariableDeclaration","scope":7699,"src":"9787:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7673,"name":"uint256","nodeType":"ElementaryTypeName","src":"9787:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9786:15:28"},"returnParameters":{"id":7678,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7677,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7699,"src":"9825:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"},"typeName":{"id":7676,"name":"uint120","nodeType":"ElementaryTypeName","src":"9825:7:28","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"visibility":"internal"}],"src":"9824:9:28"},"scope":8951,"src":"9768:218:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7726,"nodeType":"Block","src":"10343:152:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7707,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7702,"src":"10357:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7710,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10370:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"},"typeName":{"id":7709,"name":"uint112","nodeType":"ElementaryTypeName","src":"10370:7:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"}],"id":7708,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10365:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7711,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10365:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint112","typeString":"type(uint112)"}},"id":7712,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10379:3:28","memberName":"max","nodeType":"MemberAccess","src":"10365:17:28","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"src":"10357:25:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7720,"nodeType":"IfStatement","src":"10353:105:28","trueBody":{"id":7719,"nodeType":"Block","src":"10384:74:28","statements":[{"errorCall":{"arguments":[{"hexValue":"313132","id":7715,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10436:3:28","typeDescriptions":{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},"value":"112"},{"id":7716,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7702,"src":"10441:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7714,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"10405:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7717,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10405:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7718,"nodeType":"RevertStatement","src":"10398:49:28"}]}},{"expression":{"arguments":[{"id":7723,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7702,"src":"10482:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7722,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10474:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"},"typeName":{"id":7721,"name":"uint112","nodeType":"ElementaryTypeName","src":"10474:7:28","typeDescriptions":{}}},"id":7724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10474:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"functionReturnParameters":7706,"id":7725,"nodeType":"Return","src":"10467:21:28"}]},"documentation":{"id":7700,"nodeType":"StructuredDocumentation","src":"9992:280:28","text":" @dev Returns the downcasted uint112 from uint256, reverting on\n overflow (when the input is greater than largest uint112).\n Counterpart to Solidity's `uint112` operator.\n Requirements:\n - input must fit into 112 bits"},"id":7727,"implemented":true,"kind":"function","modifiers":[],"name":"toUint112","nameLocation":"10286:9:28","nodeType":"FunctionDefinition","parameters":{"id":7703,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7702,"mutability":"mutable","name":"value","nameLocation":"10304:5:28","nodeType":"VariableDeclaration","scope":7727,"src":"10296:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7701,"name":"uint256","nodeType":"ElementaryTypeName","src":"10296:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10295:15:28"},"returnParameters":{"id":7706,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7705,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7727,"src":"10334:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"},"typeName":{"id":7704,"name":"uint112","nodeType":"ElementaryTypeName","src":"10334:7:28","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"visibility":"internal"}],"src":"10333:9:28"},"scope":8951,"src":"10277:218:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7754,"nodeType":"Block","src":"10852:152:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7735,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7730,"src":"10866:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7738,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10879:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"},"typeName":{"id":7737,"name":"uint104","nodeType":"ElementaryTypeName","src":"10879:7:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"}],"id":7736,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10874:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7739,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10874:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint104","typeString":"type(uint104)"}},"id":7740,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10888:3:28","memberName":"max","nodeType":"MemberAccess","src":"10874:17:28","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"src":"10866:25:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7748,"nodeType":"IfStatement","src":"10862:105:28","trueBody":{"id":7747,"nodeType":"Block","src":"10893:74:28","statements":[{"errorCall":{"arguments":[{"hexValue":"313034","id":7743,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10945:3:28","typeDescriptions":{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},"value":"104"},{"id":7744,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7730,"src":"10950:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7742,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"10914:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7745,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10914:42:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7746,"nodeType":"RevertStatement","src":"10907:49:28"}]}},{"expression":{"arguments":[{"id":7751,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7730,"src":"10991:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7750,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10983:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"},"typeName":{"id":7749,"name":"uint104","nodeType":"ElementaryTypeName","src":"10983:7:28","typeDescriptions":{}}},"id":7752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10983:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"functionReturnParameters":7734,"id":7753,"nodeType":"Return","src":"10976:21:28"}]},"documentation":{"id":7728,"nodeType":"StructuredDocumentation","src":"10501:280:28","text":" @dev Returns the downcasted uint104 from uint256, reverting on\n overflow (when the input is greater than largest uint104).\n Counterpart to Solidity's `uint104` operator.\n Requirements:\n - input must fit into 104 bits"},"id":7755,"implemented":true,"kind":"function","modifiers":[],"name":"toUint104","nameLocation":"10795:9:28","nodeType":"FunctionDefinition","parameters":{"id":7731,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7730,"mutability":"mutable","name":"value","nameLocation":"10813:5:28","nodeType":"VariableDeclaration","scope":7755,"src":"10805:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7729,"name":"uint256","nodeType":"ElementaryTypeName","src":"10805:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10804:15:28"},"returnParameters":{"id":7734,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7733,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7755,"src":"10843:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"},"typeName":{"id":7732,"name":"uint104","nodeType":"ElementaryTypeName","src":"10843:7:28","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"visibility":"internal"}],"src":"10842:9:28"},"scope":8951,"src":"10786:218:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7782,"nodeType":"Block","src":"11355:149:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7763,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7758,"src":"11369:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7766,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11382:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":7765,"name":"uint96","nodeType":"ElementaryTypeName","src":"11382:6:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"}],"id":7764,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"11377:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7767,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11377:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint96","typeString":"type(uint96)"}},"id":7768,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11390:3:28","memberName":"max","nodeType":"MemberAccess","src":"11377:16:28","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"src":"11369:24:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7776,"nodeType":"IfStatement","src":"11365:103:28","trueBody":{"id":7775,"nodeType":"Block","src":"11395:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"3936","id":7771,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11447:2:28","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"value":"96"},{"id":7772,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7758,"src":"11451:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7770,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"11416:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7773,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11416:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7774,"nodeType":"RevertStatement","src":"11409:48:28"}]}},{"expression":{"arguments":[{"id":7779,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7758,"src":"11491:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7778,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11484:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":7777,"name":"uint96","nodeType":"ElementaryTypeName","src":"11484:6:28","typeDescriptions":{}}},"id":7780,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11484:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"functionReturnParameters":7762,"id":7781,"nodeType":"Return","src":"11477:20:28"}]},"documentation":{"id":7756,"nodeType":"StructuredDocumentation","src":"11010:276:28","text":" @dev Returns the downcasted uint96 from uint256, reverting on\n overflow (when the input is greater than largest uint96).\n Counterpart to Solidity's `uint96` operator.\n Requirements:\n - input must fit into 96 bits"},"id":7783,"implemented":true,"kind":"function","modifiers":[],"name":"toUint96","nameLocation":"11300:8:28","nodeType":"FunctionDefinition","parameters":{"id":7759,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7758,"mutability":"mutable","name":"value","nameLocation":"11317:5:28","nodeType":"VariableDeclaration","scope":7783,"src":"11309:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7757,"name":"uint256","nodeType":"ElementaryTypeName","src":"11309:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11308:15:28"},"returnParameters":{"id":7762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7761,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7783,"src":"11347:6:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":7760,"name":"uint96","nodeType":"ElementaryTypeName","src":"11347:6:28","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"}],"src":"11346:8:28"},"scope":8951,"src":"11291:213:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7810,"nodeType":"Block","src":"11855:149:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7791,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7786,"src":"11869:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7794,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11882:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"},"typeName":{"id":7793,"name":"uint88","nodeType":"ElementaryTypeName","src":"11882:6:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"}],"id":7792,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"11877:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7795,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11877:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint88","typeString":"type(uint88)"}},"id":7796,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11890:3:28","memberName":"max","nodeType":"MemberAccess","src":"11877:16:28","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"src":"11869:24:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7804,"nodeType":"IfStatement","src":"11865:103:28","trueBody":{"id":7803,"nodeType":"Block","src":"11895:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"3838","id":7799,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11947:2:28","typeDescriptions":{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},"value":"88"},{"id":7800,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7786,"src":"11951:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7798,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"11916:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7801,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11916:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7802,"nodeType":"RevertStatement","src":"11909:48:28"}]}},{"expression":{"arguments":[{"id":7807,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7786,"src":"11991:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7806,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11984:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"},"typeName":{"id":7805,"name":"uint88","nodeType":"ElementaryTypeName","src":"11984:6:28","typeDescriptions":{}}},"id":7808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11984:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"functionReturnParameters":7790,"id":7809,"nodeType":"Return","src":"11977:20:28"}]},"documentation":{"id":7784,"nodeType":"StructuredDocumentation","src":"11510:276:28","text":" @dev Returns the downcasted uint88 from uint256, reverting on\n overflow (when the input is greater than largest uint88).\n Counterpart to Solidity's `uint88` operator.\n Requirements:\n - input must fit into 88 bits"},"id":7811,"implemented":true,"kind":"function","modifiers":[],"name":"toUint88","nameLocation":"11800:8:28","nodeType":"FunctionDefinition","parameters":{"id":7787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7786,"mutability":"mutable","name":"value","nameLocation":"11817:5:28","nodeType":"VariableDeclaration","scope":7811,"src":"11809:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7785,"name":"uint256","nodeType":"ElementaryTypeName","src":"11809:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11808:15:28"},"returnParameters":{"id":7790,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7789,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7811,"src":"11847:6:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"},"typeName":{"id":7788,"name":"uint88","nodeType":"ElementaryTypeName","src":"11847:6:28","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"visibility":"internal"}],"src":"11846:8:28"},"scope":8951,"src":"11791:213:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7838,"nodeType":"Block","src":"12355:149:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7819,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7814,"src":"12369:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7822,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12382:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"},"typeName":{"id":7821,"name":"uint80","nodeType":"ElementaryTypeName","src":"12382:6:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"}],"id":7820,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"12377:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7823,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12377:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint80","typeString":"type(uint80)"}},"id":7824,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12390:3:28","memberName":"max","nodeType":"MemberAccess","src":"12377:16:28","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"src":"12369:24:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7832,"nodeType":"IfStatement","src":"12365:103:28","trueBody":{"id":7831,"nodeType":"Block","src":"12395:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"3830","id":7827,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12447:2:28","typeDescriptions":{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},"value":"80"},{"id":7828,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7814,"src":"12451:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7826,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"12416:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12416:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7830,"nodeType":"RevertStatement","src":"12409:48:28"}]}},{"expression":{"arguments":[{"id":7835,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7814,"src":"12491:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7834,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12484:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"},"typeName":{"id":7833,"name":"uint80","nodeType":"ElementaryTypeName","src":"12484:6:28","typeDescriptions":{}}},"id":7836,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12484:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"functionReturnParameters":7818,"id":7837,"nodeType":"Return","src":"12477:20:28"}]},"documentation":{"id":7812,"nodeType":"StructuredDocumentation","src":"12010:276:28","text":" @dev Returns the downcasted uint80 from uint256, reverting on\n overflow (when the input is greater than largest uint80).\n Counterpart to Solidity's `uint80` operator.\n Requirements:\n - input must fit into 80 bits"},"id":7839,"implemented":true,"kind":"function","modifiers":[],"name":"toUint80","nameLocation":"12300:8:28","nodeType":"FunctionDefinition","parameters":{"id":7815,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7814,"mutability":"mutable","name":"value","nameLocation":"12317:5:28","nodeType":"VariableDeclaration","scope":7839,"src":"12309:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7813,"name":"uint256","nodeType":"ElementaryTypeName","src":"12309:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12308:15:28"},"returnParameters":{"id":7818,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7817,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7839,"src":"12347:6:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":7816,"name":"uint80","nodeType":"ElementaryTypeName","src":"12347:6:28","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"12346:8:28"},"scope":8951,"src":"12291:213:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7866,"nodeType":"Block","src":"12855:149:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7847,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7842,"src":"12869:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7850,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12882:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"},"typeName":{"id":7849,"name":"uint72","nodeType":"ElementaryTypeName","src":"12882:6:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"}],"id":7848,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"12877:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7851,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12877:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint72","typeString":"type(uint72)"}},"id":7852,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12890:3:28","memberName":"max","nodeType":"MemberAccess","src":"12877:16:28","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"src":"12869:24:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7860,"nodeType":"IfStatement","src":"12865:103:28","trueBody":{"id":7859,"nodeType":"Block","src":"12895:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"3732","id":7855,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12947:2:28","typeDescriptions":{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},"value":"72"},{"id":7856,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7842,"src":"12951:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7854,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"12916:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12916:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7858,"nodeType":"RevertStatement","src":"12909:48:28"}]}},{"expression":{"arguments":[{"id":7863,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7842,"src":"12991:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7862,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12984:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"},"typeName":{"id":7861,"name":"uint72","nodeType":"ElementaryTypeName","src":"12984:6:28","typeDescriptions":{}}},"id":7864,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12984:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"functionReturnParameters":7846,"id":7865,"nodeType":"Return","src":"12977:20:28"}]},"documentation":{"id":7840,"nodeType":"StructuredDocumentation","src":"12510:276:28","text":" @dev Returns the downcasted uint72 from uint256, reverting on\n overflow (when the input is greater than largest uint72).\n Counterpart to Solidity's `uint72` operator.\n Requirements:\n - input must fit into 72 bits"},"id":7867,"implemented":true,"kind":"function","modifiers":[],"name":"toUint72","nameLocation":"12800:8:28","nodeType":"FunctionDefinition","parameters":{"id":7843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7842,"mutability":"mutable","name":"value","nameLocation":"12817:5:28","nodeType":"VariableDeclaration","scope":7867,"src":"12809:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7841,"name":"uint256","nodeType":"ElementaryTypeName","src":"12809:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12808:15:28"},"returnParameters":{"id":7846,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7845,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7867,"src":"12847:6:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"},"typeName":{"id":7844,"name":"uint72","nodeType":"ElementaryTypeName","src":"12847:6:28","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"visibility":"internal"}],"src":"12846:8:28"},"scope":8951,"src":"12791:213:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7894,"nodeType":"Block","src":"13355:149:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7875,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7870,"src":"13369:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7878,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13382:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":7877,"name":"uint64","nodeType":"ElementaryTypeName","src":"13382:6:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"}],"id":7876,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"13377:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7879,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13377:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint64","typeString":"type(uint64)"}},"id":7880,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13390:3:28","memberName":"max","nodeType":"MemberAccess","src":"13377:16:28","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"13369:24:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7888,"nodeType":"IfStatement","src":"13365:103:28","trueBody":{"id":7887,"nodeType":"Block","src":"13395:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"3634","id":7883,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13447:2:28","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},{"id":7884,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7870,"src":"13451:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7882,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"13416:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13416:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7886,"nodeType":"RevertStatement","src":"13409:48:28"}]}},{"expression":{"arguments":[{"id":7891,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7870,"src":"13491:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7890,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13484:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":7889,"name":"uint64","nodeType":"ElementaryTypeName","src":"13484:6:28","typeDescriptions":{}}},"id":7892,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13484:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":7874,"id":7893,"nodeType":"Return","src":"13477:20:28"}]},"documentation":{"id":7868,"nodeType":"StructuredDocumentation","src":"13010:276:28","text":" @dev Returns the downcasted uint64 from uint256, reverting on\n overflow (when the input is greater than largest uint64).\n Counterpart to Solidity's `uint64` operator.\n Requirements:\n - input must fit into 64 bits"},"id":7895,"implemented":true,"kind":"function","modifiers":[],"name":"toUint64","nameLocation":"13300:8:28","nodeType":"FunctionDefinition","parameters":{"id":7871,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7870,"mutability":"mutable","name":"value","nameLocation":"13317:5:28","nodeType":"VariableDeclaration","scope":7895,"src":"13309:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7869,"name":"uint256","nodeType":"ElementaryTypeName","src":"13309:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13308:15:28"},"returnParameters":{"id":7874,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7873,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7895,"src":"13347:6:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":7872,"name":"uint64","nodeType":"ElementaryTypeName","src":"13347:6:28","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"13346:8:28"},"scope":8951,"src":"13291:213:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7922,"nodeType":"Block","src":"13855:149:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7903,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7898,"src":"13869:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7906,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13882:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"},"typeName":{"id":7905,"name":"uint56","nodeType":"ElementaryTypeName","src":"13882:6:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"}],"id":7904,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"13877:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7907,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13877:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint56","typeString":"type(uint56)"}},"id":7908,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13890:3:28","memberName":"max","nodeType":"MemberAccess","src":"13877:16:28","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"src":"13869:24:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7916,"nodeType":"IfStatement","src":"13865:103:28","trueBody":{"id":7915,"nodeType":"Block","src":"13895:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"3536","id":7911,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13947:2:28","typeDescriptions":{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},"value":"56"},{"id":7912,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7898,"src":"13951:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7910,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"13916:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7913,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13916:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7914,"nodeType":"RevertStatement","src":"13909:48:28"}]}},{"expression":{"arguments":[{"id":7919,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7898,"src":"13991:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7918,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13984:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"},"typeName":{"id":7917,"name":"uint56","nodeType":"ElementaryTypeName","src":"13984:6:28","typeDescriptions":{}}},"id":7920,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13984:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"functionReturnParameters":7902,"id":7921,"nodeType":"Return","src":"13977:20:28"}]},"documentation":{"id":7896,"nodeType":"StructuredDocumentation","src":"13510:276:28","text":" @dev Returns the downcasted uint56 from uint256, reverting on\n overflow (when the input is greater than largest uint56).\n Counterpart to Solidity's `uint56` operator.\n Requirements:\n - input must fit into 56 bits"},"id":7923,"implemented":true,"kind":"function","modifiers":[],"name":"toUint56","nameLocation":"13800:8:28","nodeType":"FunctionDefinition","parameters":{"id":7899,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7898,"mutability":"mutable","name":"value","nameLocation":"13817:5:28","nodeType":"VariableDeclaration","scope":7923,"src":"13809:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7897,"name":"uint256","nodeType":"ElementaryTypeName","src":"13809:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13808:15:28"},"returnParameters":{"id":7902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7901,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7923,"src":"13847:6:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"},"typeName":{"id":7900,"name":"uint56","nodeType":"ElementaryTypeName","src":"13847:6:28","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"visibility":"internal"}],"src":"13846:8:28"},"scope":8951,"src":"13791:213:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7950,"nodeType":"Block","src":"14355:149:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7931,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7926,"src":"14369:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7934,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14382:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"},"typeName":{"id":7933,"name":"uint48","nodeType":"ElementaryTypeName","src":"14382:6:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"}],"id":7932,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"14377:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7935,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14377:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint48","typeString":"type(uint48)"}},"id":7936,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14390:3:28","memberName":"max","nodeType":"MemberAccess","src":"14377:16:28","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"14369:24:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7944,"nodeType":"IfStatement","src":"14365:103:28","trueBody":{"id":7943,"nodeType":"Block","src":"14395:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"3438","id":7939,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14447:2:28","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},{"id":7940,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7926,"src":"14451:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7938,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"14416:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7941,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14416:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7942,"nodeType":"RevertStatement","src":"14409:48:28"}]}},{"expression":{"arguments":[{"id":7947,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7926,"src":"14491:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7946,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14484:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"},"typeName":{"id":7945,"name":"uint48","nodeType":"ElementaryTypeName","src":"14484:6:28","typeDescriptions":{}}},"id":7948,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14484:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":7930,"id":7949,"nodeType":"Return","src":"14477:20:28"}]},"documentation":{"id":7924,"nodeType":"StructuredDocumentation","src":"14010:276:28","text":" @dev Returns the downcasted uint48 from uint256, reverting on\n overflow (when the input is greater than largest uint48).\n Counterpart to Solidity's `uint48` operator.\n Requirements:\n - input must fit into 48 bits"},"id":7951,"implemented":true,"kind":"function","modifiers":[],"name":"toUint48","nameLocation":"14300:8:28","nodeType":"FunctionDefinition","parameters":{"id":7927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7926,"mutability":"mutable","name":"value","nameLocation":"14317:5:28","nodeType":"VariableDeclaration","scope":7951,"src":"14309:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7925,"name":"uint256","nodeType":"ElementaryTypeName","src":"14309:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14308:15:28"},"returnParameters":{"id":7930,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7929,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7951,"src":"14347:6:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":7928,"name":"uint48","nodeType":"ElementaryTypeName","src":"14347:6:28","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"14346:8:28"},"scope":8951,"src":"14291:213:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7978,"nodeType":"Block","src":"14855:149:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7959,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7954,"src":"14869:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7962,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14882:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":7961,"name":"uint40","nodeType":"ElementaryTypeName","src":"14882:6:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"}],"id":7960,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"14877:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7963,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14877:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint40","typeString":"type(uint40)"}},"id":7964,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14890:3:28","memberName":"max","nodeType":"MemberAccess","src":"14877:16:28","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"14869:24:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7972,"nodeType":"IfStatement","src":"14865:103:28","trueBody":{"id":7971,"nodeType":"Block","src":"14895:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"3430","id":7967,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14947:2:28","typeDescriptions":{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},"value":"40"},{"id":7968,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7954,"src":"14951:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7966,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"14916:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7969,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14916:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7970,"nodeType":"RevertStatement","src":"14909:48:28"}]}},{"expression":{"arguments":[{"id":7975,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7954,"src":"14991:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7974,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14984:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":7973,"name":"uint40","nodeType":"ElementaryTypeName","src":"14984:6:28","typeDescriptions":{}}},"id":7976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14984:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"functionReturnParameters":7958,"id":7977,"nodeType":"Return","src":"14977:20:28"}]},"documentation":{"id":7952,"nodeType":"StructuredDocumentation","src":"14510:276:28","text":" @dev Returns the downcasted uint40 from uint256, reverting on\n overflow (when the input is greater than largest uint40).\n Counterpart to Solidity's `uint40` operator.\n Requirements:\n - input must fit into 40 bits"},"id":7979,"implemented":true,"kind":"function","modifiers":[],"name":"toUint40","nameLocation":"14800:8:28","nodeType":"FunctionDefinition","parameters":{"id":7955,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7954,"mutability":"mutable","name":"value","nameLocation":"14817:5:28","nodeType":"VariableDeclaration","scope":7979,"src":"14809:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7953,"name":"uint256","nodeType":"ElementaryTypeName","src":"14809:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14808:15:28"},"returnParameters":{"id":7958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7957,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7979,"src":"14847:6:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":7956,"name":"uint40","nodeType":"ElementaryTypeName","src":"14847:6:28","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"14846:8:28"},"scope":8951,"src":"14791:213:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8006,"nodeType":"Block","src":"15355:149:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7987,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7982,"src":"15369:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":7990,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15382:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":7989,"name":"uint32","nodeType":"ElementaryTypeName","src":"15382:6:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"}],"id":7988,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"15377:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":7991,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15377:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint32","typeString":"type(uint32)"}},"id":7992,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15390:3:28","memberName":"max","nodeType":"MemberAccess","src":"15377:16:28","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"15369:24:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8000,"nodeType":"IfStatement","src":"15365:103:28","trueBody":{"id":7999,"nodeType":"Block","src":"15395:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"3332","id":7995,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15447:2:28","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"id":7996,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7982,"src":"15451:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7994,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"15416:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":7997,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15416:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7998,"nodeType":"RevertStatement","src":"15409:48:28"}]}},{"expression":{"arguments":[{"id":8003,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7982,"src":"15491:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8002,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15484:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":8001,"name":"uint32","nodeType":"ElementaryTypeName","src":"15484:6:28","typeDescriptions":{}}},"id":8004,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15484:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":7986,"id":8005,"nodeType":"Return","src":"15477:20:28"}]},"documentation":{"id":7980,"nodeType":"StructuredDocumentation","src":"15010:276:28","text":" @dev Returns the downcasted uint32 from uint256, reverting on\n overflow (when the input is greater than largest uint32).\n Counterpart to Solidity's `uint32` operator.\n Requirements:\n - input must fit into 32 bits"},"id":8007,"implemented":true,"kind":"function","modifiers":[],"name":"toUint32","nameLocation":"15300:8:28","nodeType":"FunctionDefinition","parameters":{"id":7983,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7982,"mutability":"mutable","name":"value","nameLocation":"15317:5:28","nodeType":"VariableDeclaration","scope":8007,"src":"15309:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7981,"name":"uint256","nodeType":"ElementaryTypeName","src":"15309:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15308:15:28"},"returnParameters":{"id":7986,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7985,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8007,"src":"15347:6:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":7984,"name":"uint32","nodeType":"ElementaryTypeName","src":"15347:6:28","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"15346:8:28"},"scope":8951,"src":"15291:213:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8034,"nodeType":"Block","src":"15855:149:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8015,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8010,"src":"15869:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8018,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15882:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"},"typeName":{"id":8017,"name":"uint24","nodeType":"ElementaryTypeName","src":"15882:6:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"}],"id":8016,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"15877:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15877:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint24","typeString":"type(uint24)"}},"id":8020,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15890:3:28","memberName":"max","nodeType":"MemberAccess","src":"15877:16:28","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"src":"15869:24:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8028,"nodeType":"IfStatement","src":"15865:103:28","trueBody":{"id":8027,"nodeType":"Block","src":"15895:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"3234","id":8023,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15947:2:28","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},{"id":8024,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8010,"src":"15951:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8022,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"15916:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8025,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15916:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8026,"nodeType":"RevertStatement","src":"15909:48:28"}]}},{"expression":{"arguments":[{"id":8031,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8010,"src":"15991:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8030,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15984:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"},"typeName":{"id":8029,"name":"uint24","nodeType":"ElementaryTypeName","src":"15984:6:28","typeDescriptions":{}}},"id":8032,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15984:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"functionReturnParameters":8014,"id":8033,"nodeType":"Return","src":"15977:20:28"}]},"documentation":{"id":8008,"nodeType":"StructuredDocumentation","src":"15510:276:28","text":" @dev Returns the downcasted uint24 from uint256, reverting on\n overflow (when the input is greater than largest uint24).\n Counterpart to Solidity's `uint24` operator.\n Requirements:\n - input must fit into 24 bits"},"id":8035,"implemented":true,"kind":"function","modifiers":[],"name":"toUint24","nameLocation":"15800:8:28","nodeType":"FunctionDefinition","parameters":{"id":8011,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8010,"mutability":"mutable","name":"value","nameLocation":"15817:5:28","nodeType":"VariableDeclaration","scope":8035,"src":"15809:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8009,"name":"uint256","nodeType":"ElementaryTypeName","src":"15809:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15808:15:28"},"returnParameters":{"id":8014,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8013,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8035,"src":"15847:6:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"},"typeName":{"id":8012,"name":"uint24","nodeType":"ElementaryTypeName","src":"15847:6:28","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"visibility":"internal"}],"src":"15846:8:28"},"scope":8951,"src":"15791:213:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8062,"nodeType":"Block","src":"16355:149:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8043,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8038,"src":"16369:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8046,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16382:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":8045,"name":"uint16","nodeType":"ElementaryTypeName","src":"16382:6:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"}],"id":8044,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"16377:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8047,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16377:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint16","typeString":"type(uint16)"}},"id":8048,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16390:3:28","memberName":"max","nodeType":"MemberAccess","src":"16377:16:28","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"16369:24:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8056,"nodeType":"IfStatement","src":"16365:103:28","trueBody":{"id":8055,"nodeType":"Block","src":"16395:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"3136","id":8051,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16447:2:28","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},{"id":8052,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8038,"src":"16451:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8050,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"16416:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16416:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8054,"nodeType":"RevertStatement","src":"16409:48:28"}]}},{"expression":{"arguments":[{"id":8059,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8038,"src":"16491:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8058,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16484:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":8057,"name":"uint16","nodeType":"ElementaryTypeName","src":"16484:6:28","typeDescriptions":{}}},"id":8060,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16484:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"functionReturnParameters":8042,"id":8061,"nodeType":"Return","src":"16477:20:28"}]},"documentation":{"id":8036,"nodeType":"StructuredDocumentation","src":"16010:276:28","text":" @dev Returns the downcasted uint16 from uint256, reverting on\n overflow (when the input is greater than largest uint16).\n Counterpart to Solidity's `uint16` operator.\n Requirements:\n - input must fit into 16 bits"},"id":8063,"implemented":true,"kind":"function","modifiers":[],"name":"toUint16","nameLocation":"16300:8:28","nodeType":"FunctionDefinition","parameters":{"id":8039,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8038,"mutability":"mutable","name":"value","nameLocation":"16317:5:28","nodeType":"VariableDeclaration","scope":8063,"src":"16309:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8037,"name":"uint256","nodeType":"ElementaryTypeName","src":"16309:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16308:15:28"},"returnParameters":{"id":8042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8041,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8063,"src":"16347:6:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":8040,"name":"uint16","nodeType":"ElementaryTypeName","src":"16347:6:28","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"16346:8:28"},"scope":8951,"src":"16291:213:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8090,"nodeType":"Block","src":"16849:146:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8071,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8066,"src":"16863:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":8074,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16876:5:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":8073,"name":"uint8","nodeType":"ElementaryTypeName","src":"16876:5:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"}],"id":8072,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"16871:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8075,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16871:11:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint8","typeString":"type(uint8)"}},"id":8076,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16883:3:28","memberName":"max","nodeType":"MemberAccess","src":"16871:15:28","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"16863:23:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8084,"nodeType":"IfStatement","src":"16859:101:28","trueBody":{"id":8083,"nodeType":"Block","src":"16888:72:28","statements":[{"errorCall":{"arguments":[{"hexValue":"38","id":8079,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16940:1:28","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},{"id":8080,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8066,"src":"16943:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8078,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7206,"src":"16909:30:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":8081,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16909:40:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8082,"nodeType":"RevertStatement","src":"16902:47:28"}]}},{"expression":{"arguments":[{"id":8087,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8066,"src":"16982:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8086,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16976:5:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":8085,"name":"uint8","nodeType":"ElementaryTypeName","src":"16976:5:28","typeDescriptions":{}}},"id":8088,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16976:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":8070,"id":8089,"nodeType":"Return","src":"16969:19:28"}]},"documentation":{"id":8064,"nodeType":"StructuredDocumentation","src":"16510:272:28","text":" @dev Returns the downcasted uint8 from uint256, reverting on\n overflow (when the input is greater than largest uint8).\n Counterpart to Solidity's `uint8` operator.\n Requirements:\n - input must fit into 8 bits"},"id":8091,"implemented":true,"kind":"function","modifiers":[],"name":"toUint8","nameLocation":"16796:7:28","nodeType":"FunctionDefinition","parameters":{"id":8067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8066,"mutability":"mutable","name":"value","nameLocation":"16812:5:28","nodeType":"VariableDeclaration","scope":8091,"src":"16804:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8065,"name":"uint256","nodeType":"ElementaryTypeName","src":"16804:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16803:15:28"},"returnParameters":{"id":8070,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8069,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8091,"src":"16842:5:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":8068,"name":"uint8","nodeType":"ElementaryTypeName","src":"16842:5:28","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"16841:7:28"},"scope":8951,"src":"16787:208:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8113,"nodeType":"Block","src":"17231:128:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8099,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8094,"src":"17245:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":8100,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17253:1:28","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17245:9:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8107,"nodeType":"IfStatement","src":"17241:81:28","trueBody":{"id":8106,"nodeType":"Block","src":"17256:66:28","statements":[{"errorCall":{"arguments":[{"id":8103,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8094,"src":"17305:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8102,"name":"SafeCastOverflowedIntToUint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7211,"src":"17277:27:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_int256_$returns$_t_error_$","typeString":"function (int256) pure returns (error)"}},"id":8104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17277:34:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8105,"nodeType":"RevertStatement","src":"17270:41:28"}]}},{"expression":{"arguments":[{"id":8110,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8094,"src":"17346:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8109,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17338:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":8108,"name":"uint256","nodeType":"ElementaryTypeName","src":"17338:7:28","typeDescriptions":{}}},"id":8111,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17338:14:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8098,"id":8112,"nodeType":"Return","src":"17331:21:28"}]},"documentation":{"id":8092,"nodeType":"StructuredDocumentation","src":"17001:160:28","text":" @dev Converts a signed int256 into an unsigned uint256.\n Requirements:\n - input must be greater than or equal to 0."},"id":8114,"implemented":true,"kind":"function","modifiers":[],"name":"toUint256","nameLocation":"17175:9:28","nodeType":"FunctionDefinition","parameters":{"id":8095,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8094,"mutability":"mutable","name":"value","nameLocation":"17192:5:28","nodeType":"VariableDeclaration","scope":8114,"src":"17185:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8093,"name":"int256","nodeType":"ElementaryTypeName","src":"17185:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"17184:14:28"},"returnParameters":{"id":8098,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8097,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8114,"src":"17222:7:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8096,"name":"uint256","nodeType":"ElementaryTypeName","src":"17222:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17221:9:28"},"scope":8951,"src":"17166:193:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8139,"nodeType":"Block","src":"17756:150:28","statements":[{"expression":{"id":8127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8122,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8120,"src":"17766:10:28","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8125,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8117,"src":"17786:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8124,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17779:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int248_$","typeString":"type(int248)"},"typeName":{"id":8123,"name":"int248","nodeType":"ElementaryTypeName","src":"17779:6:28","typeDescriptions":{}}},"id":8126,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17779:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"src":"17766:26:28","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"id":8128,"nodeType":"ExpressionStatement","src":"17766:26:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8129,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8120,"src":"17806:10:28","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8130,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8117,"src":"17820:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17806:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8138,"nodeType":"IfStatement","src":"17802:98:28","trueBody":{"id":8137,"nodeType":"Block","src":"17827:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"323438","id":8133,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17878:3:28","typeDescriptions":{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},"value":"248"},{"id":8134,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8117,"src":"17883:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8132,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"17848:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8135,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17848:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8136,"nodeType":"RevertStatement","src":"17841:48:28"}]}}]},"documentation":{"id":8115,"nodeType":"StructuredDocumentation","src":"17365:312:28","text":" @dev Returns the downcasted int248 from int256, reverting on\n overflow (when the input is less than smallest int248 or\n greater than largest int248).\n Counterpart to Solidity's `int248` operator.\n Requirements:\n - input must fit into 248 bits"},"id":8140,"implemented":true,"kind":"function","modifiers":[],"name":"toInt248","nameLocation":"17691:8:28","nodeType":"FunctionDefinition","parameters":{"id":8118,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8117,"mutability":"mutable","name":"value","nameLocation":"17707:5:28","nodeType":"VariableDeclaration","scope":8140,"src":"17700:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8116,"name":"int256","nodeType":"ElementaryTypeName","src":"17700:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"17699:14:28"},"returnParameters":{"id":8121,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8120,"mutability":"mutable","name":"downcasted","nameLocation":"17744:10:28","nodeType":"VariableDeclaration","scope":8140,"src":"17737:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"},"typeName":{"id":8119,"name":"int248","nodeType":"ElementaryTypeName","src":"17737:6:28","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"visibility":"internal"}],"src":"17736:19:28"},"scope":8951,"src":"17682:224:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8165,"nodeType":"Block","src":"18303:150:28","statements":[{"expression":{"id":8153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8148,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8146,"src":"18313:10:28","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8151,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8143,"src":"18333:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8150,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18326:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int240_$","typeString":"type(int240)"},"typeName":{"id":8149,"name":"int240","nodeType":"ElementaryTypeName","src":"18326:6:28","typeDescriptions":{}}},"id":8152,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18326:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"src":"18313:26:28","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"id":8154,"nodeType":"ExpressionStatement","src":"18313:26:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8155,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8146,"src":"18353:10:28","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8156,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8143,"src":"18367:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18353:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8164,"nodeType":"IfStatement","src":"18349:98:28","trueBody":{"id":8163,"nodeType":"Block","src":"18374:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"323430","id":8159,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18425:3:28","typeDescriptions":{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},"value":"240"},{"id":8160,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8143,"src":"18430:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8158,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"18395:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8161,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18395:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8162,"nodeType":"RevertStatement","src":"18388:48:28"}]}}]},"documentation":{"id":8141,"nodeType":"StructuredDocumentation","src":"17912:312:28","text":" @dev Returns the downcasted int240 from int256, reverting on\n overflow (when the input is less than smallest int240 or\n greater than largest int240).\n Counterpart to Solidity's `int240` operator.\n Requirements:\n - input must fit into 240 bits"},"id":8166,"implemented":true,"kind":"function","modifiers":[],"name":"toInt240","nameLocation":"18238:8:28","nodeType":"FunctionDefinition","parameters":{"id":8144,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8143,"mutability":"mutable","name":"value","nameLocation":"18254:5:28","nodeType":"VariableDeclaration","scope":8166,"src":"18247:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8142,"name":"int256","nodeType":"ElementaryTypeName","src":"18247:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"18246:14:28"},"returnParameters":{"id":8147,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8146,"mutability":"mutable","name":"downcasted","nameLocation":"18291:10:28","nodeType":"VariableDeclaration","scope":8166,"src":"18284:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"},"typeName":{"id":8145,"name":"int240","nodeType":"ElementaryTypeName","src":"18284:6:28","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"visibility":"internal"}],"src":"18283:19:28"},"scope":8951,"src":"18229:224:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8191,"nodeType":"Block","src":"18850:150:28","statements":[{"expression":{"id":8179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8174,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8172,"src":"18860:10:28","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8177,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8169,"src":"18880:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8176,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18873:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int232_$","typeString":"type(int232)"},"typeName":{"id":8175,"name":"int232","nodeType":"ElementaryTypeName","src":"18873:6:28","typeDescriptions":{}}},"id":8178,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18873:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"src":"18860:26:28","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"id":8180,"nodeType":"ExpressionStatement","src":"18860:26:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8181,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8172,"src":"18900:10:28","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8182,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8169,"src":"18914:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18900:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8190,"nodeType":"IfStatement","src":"18896:98:28","trueBody":{"id":8189,"nodeType":"Block","src":"18921:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"323332","id":8185,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18972:3:28","typeDescriptions":{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},"value":"232"},{"id":8186,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8169,"src":"18977:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8184,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"18942:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18942:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8188,"nodeType":"RevertStatement","src":"18935:48:28"}]}}]},"documentation":{"id":8167,"nodeType":"StructuredDocumentation","src":"18459:312:28","text":" @dev Returns the downcasted int232 from int256, reverting on\n overflow (when the input is less than smallest int232 or\n greater than largest int232).\n Counterpart to Solidity's `int232` operator.\n Requirements:\n - input must fit into 232 bits"},"id":8192,"implemented":true,"kind":"function","modifiers":[],"name":"toInt232","nameLocation":"18785:8:28","nodeType":"FunctionDefinition","parameters":{"id":8170,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8169,"mutability":"mutable","name":"value","nameLocation":"18801:5:28","nodeType":"VariableDeclaration","scope":8192,"src":"18794:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8168,"name":"int256","nodeType":"ElementaryTypeName","src":"18794:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"18793:14:28"},"returnParameters":{"id":8173,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8172,"mutability":"mutable","name":"downcasted","nameLocation":"18838:10:28","nodeType":"VariableDeclaration","scope":8192,"src":"18831:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"},"typeName":{"id":8171,"name":"int232","nodeType":"ElementaryTypeName","src":"18831:6:28","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"visibility":"internal"}],"src":"18830:19:28"},"scope":8951,"src":"18776:224:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8217,"nodeType":"Block","src":"19397:150:28","statements":[{"expression":{"id":8205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8200,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8198,"src":"19407:10:28","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8203,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8195,"src":"19427:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8202,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19420:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int224_$","typeString":"type(int224)"},"typeName":{"id":8201,"name":"int224","nodeType":"ElementaryTypeName","src":"19420:6:28","typeDescriptions":{}}},"id":8204,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19420:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"src":"19407:26:28","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"id":8206,"nodeType":"ExpressionStatement","src":"19407:26:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8207,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8198,"src":"19447:10:28","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8208,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8195,"src":"19461:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19447:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8216,"nodeType":"IfStatement","src":"19443:98:28","trueBody":{"id":8215,"nodeType":"Block","src":"19468:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"323234","id":8211,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19519:3:28","typeDescriptions":{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},"value":"224"},{"id":8212,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8195,"src":"19524:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8210,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"19489:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8213,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19489:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8214,"nodeType":"RevertStatement","src":"19482:48:28"}]}}]},"documentation":{"id":8193,"nodeType":"StructuredDocumentation","src":"19006:312:28","text":" @dev Returns the downcasted int224 from int256, reverting on\n overflow (when the input is less than smallest int224 or\n greater than largest int224).\n Counterpart to Solidity's `int224` operator.\n Requirements:\n - input must fit into 224 bits"},"id":8218,"implemented":true,"kind":"function","modifiers":[],"name":"toInt224","nameLocation":"19332:8:28","nodeType":"FunctionDefinition","parameters":{"id":8196,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8195,"mutability":"mutable","name":"value","nameLocation":"19348:5:28","nodeType":"VariableDeclaration","scope":8218,"src":"19341:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8194,"name":"int256","nodeType":"ElementaryTypeName","src":"19341:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"19340:14:28"},"returnParameters":{"id":8199,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8198,"mutability":"mutable","name":"downcasted","nameLocation":"19385:10:28","nodeType":"VariableDeclaration","scope":8218,"src":"19378:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"},"typeName":{"id":8197,"name":"int224","nodeType":"ElementaryTypeName","src":"19378:6:28","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"visibility":"internal"}],"src":"19377:19:28"},"scope":8951,"src":"19323:224:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8243,"nodeType":"Block","src":"19944:150:28","statements":[{"expression":{"id":8231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8226,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8224,"src":"19954:10:28","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8229,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8221,"src":"19974:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8228,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19967:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int216_$","typeString":"type(int216)"},"typeName":{"id":8227,"name":"int216","nodeType":"ElementaryTypeName","src":"19967:6:28","typeDescriptions":{}}},"id":8230,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19967:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"src":"19954:26:28","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"id":8232,"nodeType":"ExpressionStatement","src":"19954:26:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8233,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8224,"src":"19994:10:28","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8234,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8221,"src":"20008:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19994:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8242,"nodeType":"IfStatement","src":"19990:98:28","trueBody":{"id":8241,"nodeType":"Block","src":"20015:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"323136","id":8237,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20066:3:28","typeDescriptions":{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},"value":"216"},{"id":8238,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8221,"src":"20071:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8236,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"20036:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20036:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8240,"nodeType":"RevertStatement","src":"20029:48:28"}]}}]},"documentation":{"id":8219,"nodeType":"StructuredDocumentation","src":"19553:312:28","text":" @dev Returns the downcasted int216 from int256, reverting on\n overflow (when the input is less than smallest int216 or\n greater than largest int216).\n Counterpart to Solidity's `int216` operator.\n Requirements:\n - input must fit into 216 bits"},"id":8244,"implemented":true,"kind":"function","modifiers":[],"name":"toInt216","nameLocation":"19879:8:28","nodeType":"FunctionDefinition","parameters":{"id":8222,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8221,"mutability":"mutable","name":"value","nameLocation":"19895:5:28","nodeType":"VariableDeclaration","scope":8244,"src":"19888:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8220,"name":"int256","nodeType":"ElementaryTypeName","src":"19888:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"19887:14:28"},"returnParameters":{"id":8225,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8224,"mutability":"mutable","name":"downcasted","nameLocation":"19932:10:28","nodeType":"VariableDeclaration","scope":8244,"src":"19925:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"},"typeName":{"id":8223,"name":"int216","nodeType":"ElementaryTypeName","src":"19925:6:28","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"visibility":"internal"}],"src":"19924:19:28"},"scope":8951,"src":"19870:224:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8269,"nodeType":"Block","src":"20491:150:28","statements":[{"expression":{"id":8257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8252,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8250,"src":"20501:10:28","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8255,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8247,"src":"20521:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8254,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20514:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int208_$","typeString":"type(int208)"},"typeName":{"id":8253,"name":"int208","nodeType":"ElementaryTypeName","src":"20514:6:28","typeDescriptions":{}}},"id":8256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20514:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"src":"20501:26:28","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"id":8258,"nodeType":"ExpressionStatement","src":"20501:26:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8259,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8250,"src":"20541:10:28","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8260,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8247,"src":"20555:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20541:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8268,"nodeType":"IfStatement","src":"20537:98:28","trueBody":{"id":8267,"nodeType":"Block","src":"20562:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"323038","id":8263,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20613:3:28","typeDescriptions":{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},"value":"208"},{"id":8264,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8247,"src":"20618:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8262,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"20583:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20583:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8266,"nodeType":"RevertStatement","src":"20576:48:28"}]}}]},"documentation":{"id":8245,"nodeType":"StructuredDocumentation","src":"20100:312:28","text":" @dev Returns the downcasted int208 from int256, reverting on\n overflow (when the input is less than smallest int208 or\n greater than largest int208).\n Counterpart to Solidity's `int208` operator.\n Requirements:\n - input must fit into 208 bits"},"id":8270,"implemented":true,"kind":"function","modifiers":[],"name":"toInt208","nameLocation":"20426:8:28","nodeType":"FunctionDefinition","parameters":{"id":8248,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8247,"mutability":"mutable","name":"value","nameLocation":"20442:5:28","nodeType":"VariableDeclaration","scope":8270,"src":"20435:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8246,"name":"int256","nodeType":"ElementaryTypeName","src":"20435:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20434:14:28"},"returnParameters":{"id":8251,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8250,"mutability":"mutable","name":"downcasted","nameLocation":"20479:10:28","nodeType":"VariableDeclaration","scope":8270,"src":"20472:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"},"typeName":{"id":8249,"name":"int208","nodeType":"ElementaryTypeName","src":"20472:6:28","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"visibility":"internal"}],"src":"20471:19:28"},"scope":8951,"src":"20417:224:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8295,"nodeType":"Block","src":"21038:150:28","statements":[{"expression":{"id":8283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8278,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8276,"src":"21048:10:28","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8281,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8273,"src":"21068:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8280,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21061:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int200_$","typeString":"type(int200)"},"typeName":{"id":8279,"name":"int200","nodeType":"ElementaryTypeName","src":"21061:6:28","typeDescriptions":{}}},"id":8282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21061:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"src":"21048:26:28","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"id":8284,"nodeType":"ExpressionStatement","src":"21048:26:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8285,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8276,"src":"21088:10:28","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8286,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8273,"src":"21102:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21088:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8294,"nodeType":"IfStatement","src":"21084:98:28","trueBody":{"id":8293,"nodeType":"Block","src":"21109:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"323030","id":8289,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21160:3:28","typeDescriptions":{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},"value":"200"},{"id":8290,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8273,"src":"21165:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8288,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"21130:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8291,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21130:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8292,"nodeType":"RevertStatement","src":"21123:48:28"}]}}]},"documentation":{"id":8271,"nodeType":"StructuredDocumentation","src":"20647:312:28","text":" @dev Returns the downcasted int200 from int256, reverting on\n overflow (when the input is less than smallest int200 or\n greater than largest int200).\n Counterpart to Solidity's `int200` operator.\n Requirements:\n - input must fit into 200 bits"},"id":8296,"implemented":true,"kind":"function","modifiers":[],"name":"toInt200","nameLocation":"20973:8:28","nodeType":"FunctionDefinition","parameters":{"id":8274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8273,"mutability":"mutable","name":"value","nameLocation":"20989:5:28","nodeType":"VariableDeclaration","scope":8296,"src":"20982:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8272,"name":"int256","nodeType":"ElementaryTypeName","src":"20982:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20981:14:28"},"returnParameters":{"id":8277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8276,"mutability":"mutable","name":"downcasted","nameLocation":"21026:10:28","nodeType":"VariableDeclaration","scope":8296,"src":"21019:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"},"typeName":{"id":8275,"name":"int200","nodeType":"ElementaryTypeName","src":"21019:6:28","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"visibility":"internal"}],"src":"21018:19:28"},"scope":8951,"src":"20964:224:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8321,"nodeType":"Block","src":"21585:150:28","statements":[{"expression":{"id":8309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8304,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8302,"src":"21595:10:28","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8307,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8299,"src":"21615:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8306,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21608:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int192_$","typeString":"type(int192)"},"typeName":{"id":8305,"name":"int192","nodeType":"ElementaryTypeName","src":"21608:6:28","typeDescriptions":{}}},"id":8308,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21608:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"src":"21595:26:28","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"id":8310,"nodeType":"ExpressionStatement","src":"21595:26:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8311,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8302,"src":"21635:10:28","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8312,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8299,"src":"21649:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21635:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8320,"nodeType":"IfStatement","src":"21631:98:28","trueBody":{"id":8319,"nodeType":"Block","src":"21656:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"313932","id":8315,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21707:3:28","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},{"id":8316,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8299,"src":"21712:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8314,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"21677:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8317,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21677:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8318,"nodeType":"RevertStatement","src":"21670:48:28"}]}}]},"documentation":{"id":8297,"nodeType":"StructuredDocumentation","src":"21194:312:28","text":" @dev Returns the downcasted int192 from int256, reverting on\n overflow (when the input is less than smallest int192 or\n greater than largest int192).\n Counterpart to Solidity's `int192` operator.\n Requirements:\n - input must fit into 192 bits"},"id":8322,"implemented":true,"kind":"function","modifiers":[],"name":"toInt192","nameLocation":"21520:8:28","nodeType":"FunctionDefinition","parameters":{"id":8300,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8299,"mutability":"mutable","name":"value","nameLocation":"21536:5:28","nodeType":"VariableDeclaration","scope":8322,"src":"21529:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8298,"name":"int256","nodeType":"ElementaryTypeName","src":"21529:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"21528:14:28"},"returnParameters":{"id":8303,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8302,"mutability":"mutable","name":"downcasted","nameLocation":"21573:10:28","nodeType":"VariableDeclaration","scope":8322,"src":"21566:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"},"typeName":{"id":8301,"name":"int192","nodeType":"ElementaryTypeName","src":"21566:6:28","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"visibility":"internal"}],"src":"21565:19:28"},"scope":8951,"src":"21511:224:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8347,"nodeType":"Block","src":"22132:150:28","statements":[{"expression":{"id":8335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8330,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8328,"src":"22142:10:28","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8333,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8325,"src":"22162:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8332,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22155:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int184_$","typeString":"type(int184)"},"typeName":{"id":8331,"name":"int184","nodeType":"ElementaryTypeName","src":"22155:6:28","typeDescriptions":{}}},"id":8334,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22155:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"src":"22142:26:28","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"id":8336,"nodeType":"ExpressionStatement","src":"22142:26:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8337,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8328,"src":"22182:10:28","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8338,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8325,"src":"22196:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22182:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8346,"nodeType":"IfStatement","src":"22178:98:28","trueBody":{"id":8345,"nodeType":"Block","src":"22203:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"313834","id":8341,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22254:3:28","typeDescriptions":{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},"value":"184"},{"id":8342,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8325,"src":"22259:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8340,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"22224:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8343,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22224:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8344,"nodeType":"RevertStatement","src":"22217:48:28"}]}}]},"documentation":{"id":8323,"nodeType":"StructuredDocumentation","src":"21741:312:28","text":" @dev Returns the downcasted int184 from int256, reverting on\n overflow (when the input is less than smallest int184 or\n greater than largest int184).\n Counterpart to Solidity's `int184` operator.\n Requirements:\n - input must fit into 184 bits"},"id":8348,"implemented":true,"kind":"function","modifiers":[],"name":"toInt184","nameLocation":"22067:8:28","nodeType":"FunctionDefinition","parameters":{"id":8326,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8325,"mutability":"mutable","name":"value","nameLocation":"22083:5:28","nodeType":"VariableDeclaration","scope":8348,"src":"22076:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8324,"name":"int256","nodeType":"ElementaryTypeName","src":"22076:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"22075:14:28"},"returnParameters":{"id":8329,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8328,"mutability":"mutable","name":"downcasted","nameLocation":"22120:10:28","nodeType":"VariableDeclaration","scope":8348,"src":"22113:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"},"typeName":{"id":8327,"name":"int184","nodeType":"ElementaryTypeName","src":"22113:6:28","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"visibility":"internal"}],"src":"22112:19:28"},"scope":8951,"src":"22058:224:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8373,"nodeType":"Block","src":"22679:150:28","statements":[{"expression":{"id":8361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8356,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8354,"src":"22689:10:28","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8359,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8351,"src":"22709:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8358,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22702:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int176_$","typeString":"type(int176)"},"typeName":{"id":8357,"name":"int176","nodeType":"ElementaryTypeName","src":"22702:6:28","typeDescriptions":{}}},"id":8360,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22702:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"src":"22689:26:28","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"id":8362,"nodeType":"ExpressionStatement","src":"22689:26:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8363,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8354,"src":"22729:10:28","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8364,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8351,"src":"22743:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22729:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8372,"nodeType":"IfStatement","src":"22725:98:28","trueBody":{"id":8371,"nodeType":"Block","src":"22750:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"313736","id":8367,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22801:3:28","typeDescriptions":{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},"value":"176"},{"id":8368,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8351,"src":"22806:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8366,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"22771:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22771:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8370,"nodeType":"RevertStatement","src":"22764:48:28"}]}}]},"documentation":{"id":8349,"nodeType":"StructuredDocumentation","src":"22288:312:28","text":" @dev Returns the downcasted int176 from int256, reverting on\n overflow (when the input is less than smallest int176 or\n greater than largest int176).\n Counterpart to Solidity's `int176` operator.\n Requirements:\n - input must fit into 176 bits"},"id":8374,"implemented":true,"kind":"function","modifiers":[],"name":"toInt176","nameLocation":"22614:8:28","nodeType":"FunctionDefinition","parameters":{"id":8352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8351,"mutability":"mutable","name":"value","nameLocation":"22630:5:28","nodeType":"VariableDeclaration","scope":8374,"src":"22623:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8350,"name":"int256","nodeType":"ElementaryTypeName","src":"22623:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"22622:14:28"},"returnParameters":{"id":8355,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8354,"mutability":"mutable","name":"downcasted","nameLocation":"22667:10:28","nodeType":"VariableDeclaration","scope":8374,"src":"22660:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"},"typeName":{"id":8353,"name":"int176","nodeType":"ElementaryTypeName","src":"22660:6:28","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"visibility":"internal"}],"src":"22659:19:28"},"scope":8951,"src":"22605:224:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8399,"nodeType":"Block","src":"23226:150:28","statements":[{"expression":{"id":8387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8382,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8380,"src":"23236:10:28","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8385,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8377,"src":"23256:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8384,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23249:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int168_$","typeString":"type(int168)"},"typeName":{"id":8383,"name":"int168","nodeType":"ElementaryTypeName","src":"23249:6:28","typeDescriptions":{}}},"id":8386,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23249:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"src":"23236:26:28","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"id":8388,"nodeType":"ExpressionStatement","src":"23236:26:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8389,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8380,"src":"23276:10:28","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8390,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8377,"src":"23290:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"23276:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8398,"nodeType":"IfStatement","src":"23272:98:28","trueBody":{"id":8397,"nodeType":"Block","src":"23297:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"313638","id":8393,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23348:3:28","typeDescriptions":{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},"value":"168"},{"id":8394,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8377,"src":"23353:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8392,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"23318:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23318:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8396,"nodeType":"RevertStatement","src":"23311:48:28"}]}}]},"documentation":{"id":8375,"nodeType":"StructuredDocumentation","src":"22835:312:28","text":" @dev Returns the downcasted int168 from int256, reverting on\n overflow (when the input is less than smallest int168 or\n greater than largest int168).\n Counterpart to Solidity's `int168` operator.\n Requirements:\n - input must fit into 168 bits"},"id":8400,"implemented":true,"kind":"function","modifiers":[],"name":"toInt168","nameLocation":"23161:8:28","nodeType":"FunctionDefinition","parameters":{"id":8378,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8377,"mutability":"mutable","name":"value","nameLocation":"23177:5:28","nodeType":"VariableDeclaration","scope":8400,"src":"23170:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8376,"name":"int256","nodeType":"ElementaryTypeName","src":"23170:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"23169:14:28"},"returnParameters":{"id":8381,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8380,"mutability":"mutable","name":"downcasted","nameLocation":"23214:10:28","nodeType":"VariableDeclaration","scope":8400,"src":"23207:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"},"typeName":{"id":8379,"name":"int168","nodeType":"ElementaryTypeName","src":"23207:6:28","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"visibility":"internal"}],"src":"23206:19:28"},"scope":8951,"src":"23152:224:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8425,"nodeType":"Block","src":"23773:150:28","statements":[{"expression":{"id":8413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8408,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8406,"src":"23783:10:28","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8411,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8403,"src":"23803:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8410,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23796:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int160_$","typeString":"type(int160)"},"typeName":{"id":8409,"name":"int160","nodeType":"ElementaryTypeName","src":"23796:6:28","typeDescriptions":{}}},"id":8412,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23796:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"src":"23783:26:28","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"id":8414,"nodeType":"ExpressionStatement","src":"23783:26:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8415,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8406,"src":"23823:10:28","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8416,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8403,"src":"23837:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"23823:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8424,"nodeType":"IfStatement","src":"23819:98:28","trueBody":{"id":8423,"nodeType":"Block","src":"23844:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"313630","id":8419,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23895:3:28","typeDescriptions":{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},"value":"160"},{"id":8420,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8403,"src":"23900:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8418,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"23865:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23865:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8422,"nodeType":"RevertStatement","src":"23858:48:28"}]}}]},"documentation":{"id":8401,"nodeType":"StructuredDocumentation","src":"23382:312:28","text":" @dev Returns the downcasted int160 from int256, reverting on\n overflow (when the input is less than smallest int160 or\n greater than largest int160).\n Counterpart to Solidity's `int160` operator.\n Requirements:\n - input must fit into 160 bits"},"id":8426,"implemented":true,"kind":"function","modifiers":[],"name":"toInt160","nameLocation":"23708:8:28","nodeType":"FunctionDefinition","parameters":{"id":8404,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8403,"mutability":"mutable","name":"value","nameLocation":"23724:5:28","nodeType":"VariableDeclaration","scope":8426,"src":"23717:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8402,"name":"int256","nodeType":"ElementaryTypeName","src":"23717:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"23716:14:28"},"returnParameters":{"id":8407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8406,"mutability":"mutable","name":"downcasted","nameLocation":"23761:10:28","nodeType":"VariableDeclaration","scope":8426,"src":"23754:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"},"typeName":{"id":8405,"name":"int160","nodeType":"ElementaryTypeName","src":"23754:6:28","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"visibility":"internal"}],"src":"23753:19:28"},"scope":8951,"src":"23699:224:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8451,"nodeType":"Block","src":"24320:150:28","statements":[{"expression":{"id":8439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8434,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8432,"src":"24330:10:28","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8437,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8429,"src":"24350:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8436,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24343:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int152_$","typeString":"type(int152)"},"typeName":{"id":8435,"name":"int152","nodeType":"ElementaryTypeName","src":"24343:6:28","typeDescriptions":{}}},"id":8438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24343:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"src":"24330:26:28","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"id":8440,"nodeType":"ExpressionStatement","src":"24330:26:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8441,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8432,"src":"24370:10:28","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8442,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8429,"src":"24384:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"24370:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8450,"nodeType":"IfStatement","src":"24366:98:28","trueBody":{"id":8449,"nodeType":"Block","src":"24391:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"313532","id":8445,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24442:3:28","typeDescriptions":{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},"value":"152"},{"id":8446,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8429,"src":"24447:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8444,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"24412:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8447,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24412:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8448,"nodeType":"RevertStatement","src":"24405:48:28"}]}}]},"documentation":{"id":8427,"nodeType":"StructuredDocumentation","src":"23929:312:28","text":" @dev Returns the downcasted int152 from int256, reverting on\n overflow (when the input is less than smallest int152 or\n greater than largest int152).\n Counterpart to Solidity's `int152` operator.\n Requirements:\n - input must fit into 152 bits"},"id":8452,"implemented":true,"kind":"function","modifiers":[],"name":"toInt152","nameLocation":"24255:8:28","nodeType":"FunctionDefinition","parameters":{"id":8430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8429,"mutability":"mutable","name":"value","nameLocation":"24271:5:28","nodeType":"VariableDeclaration","scope":8452,"src":"24264:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8428,"name":"int256","nodeType":"ElementaryTypeName","src":"24264:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"24263:14:28"},"returnParameters":{"id":8433,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8432,"mutability":"mutable","name":"downcasted","nameLocation":"24308:10:28","nodeType":"VariableDeclaration","scope":8452,"src":"24301:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"},"typeName":{"id":8431,"name":"int152","nodeType":"ElementaryTypeName","src":"24301:6:28","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"visibility":"internal"}],"src":"24300:19:28"},"scope":8951,"src":"24246:224:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8477,"nodeType":"Block","src":"24867:150:28","statements":[{"expression":{"id":8465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8460,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8458,"src":"24877:10:28","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8463,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8455,"src":"24897:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8462,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24890:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int144_$","typeString":"type(int144)"},"typeName":{"id":8461,"name":"int144","nodeType":"ElementaryTypeName","src":"24890:6:28","typeDescriptions":{}}},"id":8464,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24890:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"src":"24877:26:28","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"id":8466,"nodeType":"ExpressionStatement","src":"24877:26:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8467,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8458,"src":"24917:10:28","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8468,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8455,"src":"24931:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"24917:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8476,"nodeType":"IfStatement","src":"24913:98:28","trueBody":{"id":8475,"nodeType":"Block","src":"24938:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"313434","id":8471,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24989:3:28","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},"value":"144"},{"id":8472,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8455,"src":"24994:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8470,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"24959:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24959:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8474,"nodeType":"RevertStatement","src":"24952:48:28"}]}}]},"documentation":{"id":8453,"nodeType":"StructuredDocumentation","src":"24476:312:28","text":" @dev Returns the downcasted int144 from int256, reverting on\n overflow (when the input is less than smallest int144 or\n greater than largest int144).\n Counterpart to Solidity's `int144` operator.\n Requirements:\n - input must fit into 144 bits"},"id":8478,"implemented":true,"kind":"function","modifiers":[],"name":"toInt144","nameLocation":"24802:8:28","nodeType":"FunctionDefinition","parameters":{"id":8456,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8455,"mutability":"mutable","name":"value","nameLocation":"24818:5:28","nodeType":"VariableDeclaration","scope":8478,"src":"24811:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8454,"name":"int256","nodeType":"ElementaryTypeName","src":"24811:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"24810:14:28"},"returnParameters":{"id":8459,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8458,"mutability":"mutable","name":"downcasted","nameLocation":"24855:10:28","nodeType":"VariableDeclaration","scope":8478,"src":"24848:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"},"typeName":{"id":8457,"name":"int144","nodeType":"ElementaryTypeName","src":"24848:6:28","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"visibility":"internal"}],"src":"24847:19:28"},"scope":8951,"src":"24793:224:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8503,"nodeType":"Block","src":"25414:150:28","statements":[{"expression":{"id":8491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8486,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8484,"src":"25424:10:28","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8489,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8481,"src":"25444:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8488,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25437:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int136_$","typeString":"type(int136)"},"typeName":{"id":8487,"name":"int136","nodeType":"ElementaryTypeName","src":"25437:6:28","typeDescriptions":{}}},"id":8490,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25437:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"src":"25424:26:28","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"id":8492,"nodeType":"ExpressionStatement","src":"25424:26:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8493,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8484,"src":"25464:10:28","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8494,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8481,"src":"25478:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"25464:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8502,"nodeType":"IfStatement","src":"25460:98:28","trueBody":{"id":8501,"nodeType":"Block","src":"25485:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"313336","id":8497,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25536:3:28","typeDescriptions":{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},"value":"136"},{"id":8498,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8481,"src":"25541:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8496,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"25506:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8499,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25506:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8500,"nodeType":"RevertStatement","src":"25499:48:28"}]}}]},"documentation":{"id":8479,"nodeType":"StructuredDocumentation","src":"25023:312:28","text":" @dev Returns the downcasted int136 from int256, reverting on\n overflow (when the input is less than smallest int136 or\n greater than largest int136).\n Counterpart to Solidity's `int136` operator.\n Requirements:\n - input must fit into 136 bits"},"id":8504,"implemented":true,"kind":"function","modifiers":[],"name":"toInt136","nameLocation":"25349:8:28","nodeType":"FunctionDefinition","parameters":{"id":8482,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8481,"mutability":"mutable","name":"value","nameLocation":"25365:5:28","nodeType":"VariableDeclaration","scope":8504,"src":"25358:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8480,"name":"int256","nodeType":"ElementaryTypeName","src":"25358:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"25357:14:28"},"returnParameters":{"id":8485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8484,"mutability":"mutable","name":"downcasted","nameLocation":"25402:10:28","nodeType":"VariableDeclaration","scope":8504,"src":"25395:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"},"typeName":{"id":8483,"name":"int136","nodeType":"ElementaryTypeName","src":"25395:6:28","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"visibility":"internal"}],"src":"25394:19:28"},"scope":8951,"src":"25340:224:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8529,"nodeType":"Block","src":"25961:150:28","statements":[{"expression":{"id":8517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8512,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8510,"src":"25971:10:28","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8515,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8507,"src":"25991:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8514,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25984:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int128_$","typeString":"type(int128)"},"typeName":{"id":8513,"name":"int128","nodeType":"ElementaryTypeName","src":"25984:6:28","typeDescriptions":{}}},"id":8516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25984:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"src":"25971:26:28","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"id":8518,"nodeType":"ExpressionStatement","src":"25971:26:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8519,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8510,"src":"26011:10:28","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8520,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8507,"src":"26025:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"26011:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8528,"nodeType":"IfStatement","src":"26007:98:28","trueBody":{"id":8527,"nodeType":"Block","src":"26032:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"313238","id":8523,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26083:3:28","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},{"id":8524,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8507,"src":"26088:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8522,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"26053:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26053:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8526,"nodeType":"RevertStatement","src":"26046:48:28"}]}}]},"documentation":{"id":8505,"nodeType":"StructuredDocumentation","src":"25570:312:28","text":" @dev Returns the downcasted int128 from int256, reverting on\n overflow (when the input is less than smallest int128 or\n greater than largest int128).\n Counterpart to Solidity's `int128` operator.\n Requirements:\n - input must fit into 128 bits"},"id":8530,"implemented":true,"kind":"function","modifiers":[],"name":"toInt128","nameLocation":"25896:8:28","nodeType":"FunctionDefinition","parameters":{"id":8508,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8507,"mutability":"mutable","name":"value","nameLocation":"25912:5:28","nodeType":"VariableDeclaration","scope":8530,"src":"25905:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8506,"name":"int256","nodeType":"ElementaryTypeName","src":"25905:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"25904:14:28"},"returnParameters":{"id":8511,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8510,"mutability":"mutable","name":"downcasted","nameLocation":"25949:10:28","nodeType":"VariableDeclaration","scope":8530,"src":"25942:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"},"typeName":{"id":8509,"name":"int128","nodeType":"ElementaryTypeName","src":"25942:6:28","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"visibility":"internal"}],"src":"25941:19:28"},"scope":8951,"src":"25887:224:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8555,"nodeType":"Block","src":"26508:150:28","statements":[{"expression":{"id":8543,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8538,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8536,"src":"26518:10:28","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8541,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8533,"src":"26538:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8540,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"26531:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int120_$","typeString":"type(int120)"},"typeName":{"id":8539,"name":"int120","nodeType":"ElementaryTypeName","src":"26531:6:28","typeDescriptions":{}}},"id":8542,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26531:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"src":"26518:26:28","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"id":8544,"nodeType":"ExpressionStatement","src":"26518:26:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8545,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8536,"src":"26558:10:28","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8546,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8533,"src":"26572:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"26558:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8554,"nodeType":"IfStatement","src":"26554:98:28","trueBody":{"id":8553,"nodeType":"Block","src":"26579:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"313230","id":8549,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26630:3:28","typeDescriptions":{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},"value":"120"},{"id":8550,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8533,"src":"26635:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8548,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"26600:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8551,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26600:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8552,"nodeType":"RevertStatement","src":"26593:48:28"}]}}]},"documentation":{"id":8531,"nodeType":"StructuredDocumentation","src":"26117:312:28","text":" @dev Returns the downcasted int120 from int256, reverting on\n overflow (when the input is less than smallest int120 or\n greater than largest int120).\n Counterpart to Solidity's `int120` operator.\n Requirements:\n - input must fit into 120 bits"},"id":8556,"implemented":true,"kind":"function","modifiers":[],"name":"toInt120","nameLocation":"26443:8:28","nodeType":"FunctionDefinition","parameters":{"id":8534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8533,"mutability":"mutable","name":"value","nameLocation":"26459:5:28","nodeType":"VariableDeclaration","scope":8556,"src":"26452:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8532,"name":"int256","nodeType":"ElementaryTypeName","src":"26452:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"26451:14:28"},"returnParameters":{"id":8537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8536,"mutability":"mutable","name":"downcasted","nameLocation":"26496:10:28","nodeType":"VariableDeclaration","scope":8556,"src":"26489:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"},"typeName":{"id":8535,"name":"int120","nodeType":"ElementaryTypeName","src":"26489:6:28","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"visibility":"internal"}],"src":"26488:19:28"},"scope":8951,"src":"26434:224:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8581,"nodeType":"Block","src":"27055:150:28","statements":[{"expression":{"id":8569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8564,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8562,"src":"27065:10:28","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8567,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8559,"src":"27085:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8566,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27078:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int112_$","typeString":"type(int112)"},"typeName":{"id":8565,"name":"int112","nodeType":"ElementaryTypeName","src":"27078:6:28","typeDescriptions":{}}},"id":8568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27078:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"src":"27065:26:28","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"id":8570,"nodeType":"ExpressionStatement","src":"27065:26:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8571,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8562,"src":"27105:10:28","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8572,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8559,"src":"27119:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"27105:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8580,"nodeType":"IfStatement","src":"27101:98:28","trueBody":{"id":8579,"nodeType":"Block","src":"27126:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"313132","id":8575,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27177:3:28","typeDescriptions":{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},"value":"112"},{"id":8576,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8559,"src":"27182:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8574,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"27147:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27147:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8578,"nodeType":"RevertStatement","src":"27140:48:28"}]}}]},"documentation":{"id":8557,"nodeType":"StructuredDocumentation","src":"26664:312:28","text":" @dev Returns the downcasted int112 from int256, reverting on\n overflow (when the input is less than smallest int112 or\n greater than largest int112).\n Counterpart to Solidity's `int112` operator.\n Requirements:\n - input must fit into 112 bits"},"id":8582,"implemented":true,"kind":"function","modifiers":[],"name":"toInt112","nameLocation":"26990:8:28","nodeType":"FunctionDefinition","parameters":{"id":8560,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8559,"mutability":"mutable","name":"value","nameLocation":"27006:5:28","nodeType":"VariableDeclaration","scope":8582,"src":"26999:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8558,"name":"int256","nodeType":"ElementaryTypeName","src":"26999:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"26998:14:28"},"returnParameters":{"id":8563,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8562,"mutability":"mutable","name":"downcasted","nameLocation":"27043:10:28","nodeType":"VariableDeclaration","scope":8582,"src":"27036:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"},"typeName":{"id":8561,"name":"int112","nodeType":"ElementaryTypeName","src":"27036:6:28","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"visibility":"internal"}],"src":"27035:19:28"},"scope":8951,"src":"26981:224:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8607,"nodeType":"Block","src":"27602:150:28","statements":[{"expression":{"id":8595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8590,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8588,"src":"27612:10:28","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8593,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8585,"src":"27632:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8592,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27625:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int104_$","typeString":"type(int104)"},"typeName":{"id":8591,"name":"int104","nodeType":"ElementaryTypeName","src":"27625:6:28","typeDescriptions":{}}},"id":8594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27625:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"src":"27612:26:28","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"id":8596,"nodeType":"ExpressionStatement","src":"27612:26:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8597,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8588,"src":"27652:10:28","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8598,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8585,"src":"27666:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"27652:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8606,"nodeType":"IfStatement","src":"27648:98:28","trueBody":{"id":8605,"nodeType":"Block","src":"27673:73:28","statements":[{"errorCall":{"arguments":[{"hexValue":"313034","id":8601,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27724:3:28","typeDescriptions":{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},"value":"104"},{"id":8602,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8585,"src":"27729:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8600,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"27694:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27694:41:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8604,"nodeType":"RevertStatement","src":"27687:48:28"}]}}]},"documentation":{"id":8583,"nodeType":"StructuredDocumentation","src":"27211:312:28","text":" @dev Returns the downcasted int104 from int256, reverting on\n overflow (when the input is less than smallest int104 or\n greater than largest int104).\n Counterpart to Solidity's `int104` operator.\n Requirements:\n - input must fit into 104 bits"},"id":8608,"implemented":true,"kind":"function","modifiers":[],"name":"toInt104","nameLocation":"27537:8:28","nodeType":"FunctionDefinition","parameters":{"id":8586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8585,"mutability":"mutable","name":"value","nameLocation":"27553:5:28","nodeType":"VariableDeclaration","scope":8608,"src":"27546:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8584,"name":"int256","nodeType":"ElementaryTypeName","src":"27546:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"27545:14:28"},"returnParameters":{"id":8589,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8588,"mutability":"mutable","name":"downcasted","nameLocation":"27590:10:28","nodeType":"VariableDeclaration","scope":8608,"src":"27583:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"},"typeName":{"id":8587,"name":"int104","nodeType":"ElementaryTypeName","src":"27583:6:28","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"visibility":"internal"}],"src":"27582:19:28"},"scope":8951,"src":"27528:224:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8633,"nodeType":"Block","src":"28142:148:28","statements":[{"expression":{"id":8621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8616,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8614,"src":"28152:10:28","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8619,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8611,"src":"28171:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8618,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28165:5:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int96_$","typeString":"type(int96)"},"typeName":{"id":8617,"name":"int96","nodeType":"ElementaryTypeName","src":"28165:5:28","typeDescriptions":{}}},"id":8620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28165:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"src":"28152:25:28","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"id":8622,"nodeType":"ExpressionStatement","src":"28152:25:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8623,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8614,"src":"28191:10:28","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8624,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8611,"src":"28205:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"28191:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8632,"nodeType":"IfStatement","src":"28187:97:28","trueBody":{"id":8631,"nodeType":"Block","src":"28212:72:28","statements":[{"errorCall":{"arguments":[{"hexValue":"3936","id":8627,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28263:2:28","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"value":"96"},{"id":8628,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8611,"src":"28267:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8626,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"28233:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8629,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28233:40:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8630,"nodeType":"RevertStatement","src":"28226:47:28"}]}}]},"documentation":{"id":8609,"nodeType":"StructuredDocumentation","src":"27758:307:28","text":" @dev Returns the downcasted int96 from int256, reverting on\n overflow (when the input is less than smallest int96 or\n greater than largest int96).\n Counterpart to Solidity's `int96` operator.\n Requirements:\n - input must fit into 96 bits"},"id":8634,"implemented":true,"kind":"function","modifiers":[],"name":"toInt96","nameLocation":"28079:7:28","nodeType":"FunctionDefinition","parameters":{"id":8612,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8611,"mutability":"mutable","name":"value","nameLocation":"28094:5:28","nodeType":"VariableDeclaration","scope":8634,"src":"28087:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8610,"name":"int256","nodeType":"ElementaryTypeName","src":"28087:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"28086:14:28"},"returnParameters":{"id":8615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8614,"mutability":"mutable","name":"downcasted","nameLocation":"28130:10:28","nodeType":"VariableDeclaration","scope":8634,"src":"28124:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"},"typeName":{"id":8613,"name":"int96","nodeType":"ElementaryTypeName","src":"28124:5:28","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"visibility":"internal"}],"src":"28123:18:28"},"scope":8951,"src":"28070:220:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8659,"nodeType":"Block","src":"28680:148:28","statements":[{"expression":{"id":8647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8642,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8640,"src":"28690:10:28","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8645,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8637,"src":"28709:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8644,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28703:5:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int88_$","typeString":"type(int88)"},"typeName":{"id":8643,"name":"int88","nodeType":"ElementaryTypeName","src":"28703:5:28","typeDescriptions":{}}},"id":8646,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28703:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"src":"28690:25:28","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"id":8648,"nodeType":"ExpressionStatement","src":"28690:25:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8649,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8640,"src":"28729:10:28","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8650,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8637,"src":"28743:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"28729:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8658,"nodeType":"IfStatement","src":"28725:97:28","trueBody":{"id":8657,"nodeType":"Block","src":"28750:72:28","statements":[{"errorCall":{"arguments":[{"hexValue":"3838","id":8653,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28801:2:28","typeDescriptions":{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},"value":"88"},{"id":8654,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8637,"src":"28805:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8652,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"28771:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28771:40:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8656,"nodeType":"RevertStatement","src":"28764:47:28"}]}}]},"documentation":{"id":8635,"nodeType":"StructuredDocumentation","src":"28296:307:28","text":" @dev Returns the downcasted int88 from int256, reverting on\n overflow (when the input is less than smallest int88 or\n greater than largest int88).\n Counterpart to Solidity's `int88` operator.\n Requirements:\n - input must fit into 88 bits"},"id":8660,"implemented":true,"kind":"function","modifiers":[],"name":"toInt88","nameLocation":"28617:7:28","nodeType":"FunctionDefinition","parameters":{"id":8638,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8637,"mutability":"mutable","name":"value","nameLocation":"28632:5:28","nodeType":"VariableDeclaration","scope":8660,"src":"28625:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8636,"name":"int256","nodeType":"ElementaryTypeName","src":"28625:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"28624:14:28"},"returnParameters":{"id":8641,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8640,"mutability":"mutable","name":"downcasted","nameLocation":"28668:10:28","nodeType":"VariableDeclaration","scope":8660,"src":"28662:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"},"typeName":{"id":8639,"name":"int88","nodeType":"ElementaryTypeName","src":"28662:5:28","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"visibility":"internal"}],"src":"28661:18:28"},"scope":8951,"src":"28608:220:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8685,"nodeType":"Block","src":"29218:148:28","statements":[{"expression":{"id":8673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8668,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8666,"src":"29228:10:28","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8671,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8663,"src":"29247:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8670,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29241:5:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int80_$","typeString":"type(int80)"},"typeName":{"id":8669,"name":"int80","nodeType":"ElementaryTypeName","src":"29241:5:28","typeDescriptions":{}}},"id":8672,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29241:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"src":"29228:25:28","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"id":8674,"nodeType":"ExpressionStatement","src":"29228:25:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8675,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8666,"src":"29267:10:28","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8676,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8663,"src":"29281:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"29267:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8684,"nodeType":"IfStatement","src":"29263:97:28","trueBody":{"id":8683,"nodeType":"Block","src":"29288:72:28","statements":[{"errorCall":{"arguments":[{"hexValue":"3830","id":8679,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29339:2:28","typeDescriptions":{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},"value":"80"},{"id":8680,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8663,"src":"29343:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8678,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"29309:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8681,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29309:40:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8682,"nodeType":"RevertStatement","src":"29302:47:28"}]}}]},"documentation":{"id":8661,"nodeType":"StructuredDocumentation","src":"28834:307:28","text":" @dev Returns the downcasted int80 from int256, reverting on\n overflow (when the input is less than smallest int80 or\n greater than largest int80).\n Counterpart to Solidity's `int80` operator.\n Requirements:\n - input must fit into 80 bits"},"id":8686,"implemented":true,"kind":"function","modifiers":[],"name":"toInt80","nameLocation":"29155:7:28","nodeType":"FunctionDefinition","parameters":{"id":8664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8663,"mutability":"mutable","name":"value","nameLocation":"29170:5:28","nodeType":"VariableDeclaration","scope":8686,"src":"29163:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8662,"name":"int256","nodeType":"ElementaryTypeName","src":"29163:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"29162:14:28"},"returnParameters":{"id":8667,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8666,"mutability":"mutable","name":"downcasted","nameLocation":"29206:10:28","nodeType":"VariableDeclaration","scope":8686,"src":"29200:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"},"typeName":{"id":8665,"name":"int80","nodeType":"ElementaryTypeName","src":"29200:5:28","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"visibility":"internal"}],"src":"29199:18:28"},"scope":8951,"src":"29146:220:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8711,"nodeType":"Block","src":"29756:148:28","statements":[{"expression":{"id":8699,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8694,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8692,"src":"29766:10:28","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8697,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8689,"src":"29785:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8696,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29779:5:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int72_$","typeString":"type(int72)"},"typeName":{"id":8695,"name":"int72","nodeType":"ElementaryTypeName","src":"29779:5:28","typeDescriptions":{}}},"id":8698,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29779:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"src":"29766:25:28","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"id":8700,"nodeType":"ExpressionStatement","src":"29766:25:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8701,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8692,"src":"29805:10:28","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8702,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8689,"src":"29819:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"29805:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8710,"nodeType":"IfStatement","src":"29801:97:28","trueBody":{"id":8709,"nodeType":"Block","src":"29826:72:28","statements":[{"errorCall":{"arguments":[{"hexValue":"3732","id":8705,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29877:2:28","typeDescriptions":{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},"value":"72"},{"id":8706,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8689,"src":"29881:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8704,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"29847:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29847:40:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8708,"nodeType":"RevertStatement","src":"29840:47:28"}]}}]},"documentation":{"id":8687,"nodeType":"StructuredDocumentation","src":"29372:307:28","text":" @dev Returns the downcasted int72 from int256, reverting on\n overflow (when the input is less than smallest int72 or\n greater than largest int72).\n Counterpart to Solidity's `int72` operator.\n Requirements:\n - input must fit into 72 bits"},"id":8712,"implemented":true,"kind":"function","modifiers":[],"name":"toInt72","nameLocation":"29693:7:28","nodeType":"FunctionDefinition","parameters":{"id":8690,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8689,"mutability":"mutable","name":"value","nameLocation":"29708:5:28","nodeType":"VariableDeclaration","scope":8712,"src":"29701:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8688,"name":"int256","nodeType":"ElementaryTypeName","src":"29701:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"29700:14:28"},"returnParameters":{"id":8693,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8692,"mutability":"mutable","name":"downcasted","nameLocation":"29744:10:28","nodeType":"VariableDeclaration","scope":8712,"src":"29738:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"},"typeName":{"id":8691,"name":"int72","nodeType":"ElementaryTypeName","src":"29738:5:28","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"visibility":"internal"}],"src":"29737:18:28"},"scope":8951,"src":"29684:220:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8737,"nodeType":"Block","src":"30294:148:28","statements":[{"expression":{"id":8725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8720,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8718,"src":"30304:10:28","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8723,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8715,"src":"30323:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8722,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30317:5:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int64_$","typeString":"type(int64)"},"typeName":{"id":8721,"name":"int64","nodeType":"ElementaryTypeName","src":"30317:5:28","typeDescriptions":{}}},"id":8724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30317:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"src":"30304:25:28","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"id":8726,"nodeType":"ExpressionStatement","src":"30304:25:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8727,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8718,"src":"30343:10:28","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8728,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8715,"src":"30357:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"30343:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8736,"nodeType":"IfStatement","src":"30339:97:28","trueBody":{"id":8735,"nodeType":"Block","src":"30364:72:28","statements":[{"errorCall":{"arguments":[{"hexValue":"3634","id":8731,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30415:2:28","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},{"id":8732,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8715,"src":"30419:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8730,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"30385:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8733,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30385:40:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8734,"nodeType":"RevertStatement","src":"30378:47:28"}]}}]},"documentation":{"id":8713,"nodeType":"StructuredDocumentation","src":"29910:307:28","text":" @dev Returns the downcasted int64 from int256, reverting on\n overflow (when the input is less than smallest int64 or\n greater than largest int64).\n Counterpart to Solidity's `int64` operator.\n Requirements:\n - input must fit into 64 bits"},"id":8738,"implemented":true,"kind":"function","modifiers":[],"name":"toInt64","nameLocation":"30231:7:28","nodeType":"FunctionDefinition","parameters":{"id":8716,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8715,"mutability":"mutable","name":"value","nameLocation":"30246:5:28","nodeType":"VariableDeclaration","scope":8738,"src":"30239:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8714,"name":"int256","nodeType":"ElementaryTypeName","src":"30239:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"30238:14:28"},"returnParameters":{"id":8719,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8718,"mutability":"mutable","name":"downcasted","nameLocation":"30282:10:28","nodeType":"VariableDeclaration","scope":8738,"src":"30276:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"},"typeName":{"id":8717,"name":"int64","nodeType":"ElementaryTypeName","src":"30276:5:28","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"visibility":"internal"}],"src":"30275:18:28"},"scope":8951,"src":"30222:220:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8763,"nodeType":"Block","src":"30832:148:28","statements":[{"expression":{"id":8751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8746,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8744,"src":"30842:10:28","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8749,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8741,"src":"30861:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8748,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30855:5:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int56_$","typeString":"type(int56)"},"typeName":{"id":8747,"name":"int56","nodeType":"ElementaryTypeName","src":"30855:5:28","typeDescriptions":{}}},"id":8750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30855:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"src":"30842:25:28","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"id":8752,"nodeType":"ExpressionStatement","src":"30842:25:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8753,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8744,"src":"30881:10:28","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8754,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8741,"src":"30895:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"30881:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8762,"nodeType":"IfStatement","src":"30877:97:28","trueBody":{"id":8761,"nodeType":"Block","src":"30902:72:28","statements":[{"errorCall":{"arguments":[{"hexValue":"3536","id":8757,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30953:2:28","typeDescriptions":{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},"value":"56"},{"id":8758,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8741,"src":"30957:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8756,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"30923:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30923:40:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8760,"nodeType":"RevertStatement","src":"30916:47:28"}]}}]},"documentation":{"id":8739,"nodeType":"StructuredDocumentation","src":"30448:307:28","text":" @dev Returns the downcasted int56 from int256, reverting on\n overflow (when the input is less than smallest int56 or\n greater than largest int56).\n Counterpart to Solidity's `int56` operator.\n Requirements:\n - input must fit into 56 bits"},"id":8764,"implemented":true,"kind":"function","modifiers":[],"name":"toInt56","nameLocation":"30769:7:28","nodeType":"FunctionDefinition","parameters":{"id":8742,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8741,"mutability":"mutable","name":"value","nameLocation":"30784:5:28","nodeType":"VariableDeclaration","scope":8764,"src":"30777:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8740,"name":"int256","nodeType":"ElementaryTypeName","src":"30777:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"30776:14:28"},"returnParameters":{"id":8745,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8744,"mutability":"mutable","name":"downcasted","nameLocation":"30820:10:28","nodeType":"VariableDeclaration","scope":8764,"src":"30814:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"},"typeName":{"id":8743,"name":"int56","nodeType":"ElementaryTypeName","src":"30814:5:28","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"visibility":"internal"}],"src":"30813:18:28"},"scope":8951,"src":"30760:220:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8789,"nodeType":"Block","src":"31370:148:28","statements":[{"expression":{"id":8777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8772,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8770,"src":"31380:10:28","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8775,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8767,"src":"31399:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8774,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31393:5:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int48_$","typeString":"type(int48)"},"typeName":{"id":8773,"name":"int48","nodeType":"ElementaryTypeName","src":"31393:5:28","typeDescriptions":{}}},"id":8776,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31393:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"src":"31380:25:28","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"id":8778,"nodeType":"ExpressionStatement","src":"31380:25:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8779,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8770,"src":"31419:10:28","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8780,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8767,"src":"31433:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"31419:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8788,"nodeType":"IfStatement","src":"31415:97:28","trueBody":{"id":8787,"nodeType":"Block","src":"31440:72:28","statements":[{"errorCall":{"arguments":[{"hexValue":"3438","id":8783,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31491:2:28","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},{"id":8784,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8767,"src":"31495:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8782,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"31461:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8785,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31461:40:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8786,"nodeType":"RevertStatement","src":"31454:47:28"}]}}]},"documentation":{"id":8765,"nodeType":"StructuredDocumentation","src":"30986:307:28","text":" @dev Returns the downcasted int48 from int256, reverting on\n overflow (when the input is less than smallest int48 or\n greater than largest int48).\n Counterpart to Solidity's `int48` operator.\n Requirements:\n - input must fit into 48 bits"},"id":8790,"implemented":true,"kind":"function","modifiers":[],"name":"toInt48","nameLocation":"31307:7:28","nodeType":"FunctionDefinition","parameters":{"id":8768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8767,"mutability":"mutable","name":"value","nameLocation":"31322:5:28","nodeType":"VariableDeclaration","scope":8790,"src":"31315:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8766,"name":"int256","nodeType":"ElementaryTypeName","src":"31315:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"31314:14:28"},"returnParameters":{"id":8771,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8770,"mutability":"mutable","name":"downcasted","nameLocation":"31358:10:28","nodeType":"VariableDeclaration","scope":8790,"src":"31352:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"},"typeName":{"id":8769,"name":"int48","nodeType":"ElementaryTypeName","src":"31352:5:28","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"visibility":"internal"}],"src":"31351:18:28"},"scope":8951,"src":"31298:220:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8815,"nodeType":"Block","src":"31908:148:28","statements":[{"expression":{"id":8803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8798,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8796,"src":"31918:10:28","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8801,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8793,"src":"31937:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8800,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31931:5:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int40_$","typeString":"type(int40)"},"typeName":{"id":8799,"name":"int40","nodeType":"ElementaryTypeName","src":"31931:5:28","typeDescriptions":{}}},"id":8802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31931:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"src":"31918:25:28","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"id":8804,"nodeType":"ExpressionStatement","src":"31918:25:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8805,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8796,"src":"31957:10:28","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8806,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8793,"src":"31971:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"31957:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8814,"nodeType":"IfStatement","src":"31953:97:28","trueBody":{"id":8813,"nodeType":"Block","src":"31978:72:28","statements":[{"errorCall":{"arguments":[{"hexValue":"3430","id":8809,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32029:2:28","typeDescriptions":{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},"value":"40"},{"id":8810,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8793,"src":"32033:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8808,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"31999:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8811,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31999:40:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8812,"nodeType":"RevertStatement","src":"31992:47:28"}]}}]},"documentation":{"id":8791,"nodeType":"StructuredDocumentation","src":"31524:307:28","text":" @dev Returns the downcasted int40 from int256, reverting on\n overflow (when the input is less than smallest int40 or\n greater than largest int40).\n Counterpart to Solidity's `int40` operator.\n Requirements:\n - input must fit into 40 bits"},"id":8816,"implemented":true,"kind":"function","modifiers":[],"name":"toInt40","nameLocation":"31845:7:28","nodeType":"FunctionDefinition","parameters":{"id":8794,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8793,"mutability":"mutable","name":"value","nameLocation":"31860:5:28","nodeType":"VariableDeclaration","scope":8816,"src":"31853:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8792,"name":"int256","nodeType":"ElementaryTypeName","src":"31853:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"31852:14:28"},"returnParameters":{"id":8797,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8796,"mutability":"mutable","name":"downcasted","nameLocation":"31896:10:28","nodeType":"VariableDeclaration","scope":8816,"src":"31890:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"},"typeName":{"id":8795,"name":"int40","nodeType":"ElementaryTypeName","src":"31890:5:28","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"visibility":"internal"}],"src":"31889:18:28"},"scope":8951,"src":"31836:220:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8841,"nodeType":"Block","src":"32446:148:28","statements":[{"expression":{"id":8829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8824,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8822,"src":"32456:10:28","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8827,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8819,"src":"32475:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8826,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32469:5:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int32_$","typeString":"type(int32)"},"typeName":{"id":8825,"name":"int32","nodeType":"ElementaryTypeName","src":"32469:5:28","typeDescriptions":{}}},"id":8828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32469:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"src":"32456:25:28","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"id":8830,"nodeType":"ExpressionStatement","src":"32456:25:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8831,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8822,"src":"32495:10:28","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8832,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8819,"src":"32509:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"32495:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8840,"nodeType":"IfStatement","src":"32491:97:28","trueBody":{"id":8839,"nodeType":"Block","src":"32516:72:28","statements":[{"errorCall":{"arguments":[{"hexValue":"3332","id":8835,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32567:2:28","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"id":8836,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8819,"src":"32571:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8834,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"32537:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32537:40:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8838,"nodeType":"RevertStatement","src":"32530:47:28"}]}}]},"documentation":{"id":8817,"nodeType":"StructuredDocumentation","src":"32062:307:28","text":" @dev Returns the downcasted int32 from int256, reverting on\n overflow (when the input is less than smallest int32 or\n greater than largest int32).\n Counterpart to Solidity's `int32` operator.\n Requirements:\n - input must fit into 32 bits"},"id":8842,"implemented":true,"kind":"function","modifiers":[],"name":"toInt32","nameLocation":"32383:7:28","nodeType":"FunctionDefinition","parameters":{"id":8820,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8819,"mutability":"mutable","name":"value","nameLocation":"32398:5:28","nodeType":"VariableDeclaration","scope":8842,"src":"32391:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8818,"name":"int256","nodeType":"ElementaryTypeName","src":"32391:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"32390:14:28"},"returnParameters":{"id":8823,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8822,"mutability":"mutable","name":"downcasted","nameLocation":"32434:10:28","nodeType":"VariableDeclaration","scope":8842,"src":"32428:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"},"typeName":{"id":8821,"name":"int32","nodeType":"ElementaryTypeName","src":"32428:5:28","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"visibility":"internal"}],"src":"32427:18:28"},"scope":8951,"src":"32374:220:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8867,"nodeType":"Block","src":"32984:148:28","statements":[{"expression":{"id":8855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8850,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8848,"src":"32994:10:28","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8853,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8845,"src":"33013:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8852,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33007:5:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int24_$","typeString":"type(int24)"},"typeName":{"id":8851,"name":"int24","nodeType":"ElementaryTypeName","src":"33007:5:28","typeDescriptions":{}}},"id":8854,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33007:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"src":"32994:25:28","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"id":8856,"nodeType":"ExpressionStatement","src":"32994:25:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8857,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8848,"src":"33033:10:28","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8858,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8845,"src":"33047:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"33033:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8866,"nodeType":"IfStatement","src":"33029:97:28","trueBody":{"id":8865,"nodeType":"Block","src":"33054:72:28","statements":[{"errorCall":{"arguments":[{"hexValue":"3234","id":8861,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33105:2:28","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},{"id":8862,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8845,"src":"33109:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8860,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"33075:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33075:40:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8864,"nodeType":"RevertStatement","src":"33068:47:28"}]}}]},"documentation":{"id":8843,"nodeType":"StructuredDocumentation","src":"32600:307:28","text":" @dev Returns the downcasted int24 from int256, reverting on\n overflow (when the input is less than smallest int24 or\n greater than largest int24).\n Counterpart to Solidity's `int24` operator.\n Requirements:\n - input must fit into 24 bits"},"id":8868,"implemented":true,"kind":"function","modifiers":[],"name":"toInt24","nameLocation":"32921:7:28","nodeType":"FunctionDefinition","parameters":{"id":8846,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8845,"mutability":"mutable","name":"value","nameLocation":"32936:5:28","nodeType":"VariableDeclaration","scope":8868,"src":"32929:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8844,"name":"int256","nodeType":"ElementaryTypeName","src":"32929:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"32928:14:28"},"returnParameters":{"id":8849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8848,"mutability":"mutable","name":"downcasted","nameLocation":"32972:10:28","nodeType":"VariableDeclaration","scope":8868,"src":"32966:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"},"typeName":{"id":8847,"name":"int24","nodeType":"ElementaryTypeName","src":"32966:5:28","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"visibility":"internal"}],"src":"32965:18:28"},"scope":8951,"src":"32912:220:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8893,"nodeType":"Block","src":"33522:148:28","statements":[{"expression":{"id":8881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8876,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8874,"src":"33532:10:28","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8879,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8871,"src":"33551:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8878,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33545:5:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int16_$","typeString":"type(int16)"},"typeName":{"id":8877,"name":"int16","nodeType":"ElementaryTypeName","src":"33545:5:28","typeDescriptions":{}}},"id":8880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33545:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"src":"33532:25:28","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"id":8882,"nodeType":"ExpressionStatement","src":"33532:25:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8883,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8874,"src":"33571:10:28","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8884,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8871,"src":"33585:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"33571:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8892,"nodeType":"IfStatement","src":"33567:97:28","trueBody":{"id":8891,"nodeType":"Block","src":"33592:72:28","statements":[{"errorCall":{"arguments":[{"hexValue":"3136","id":8887,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33643:2:28","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},{"id":8888,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8871,"src":"33647:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8886,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"33613:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8889,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33613:40:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8890,"nodeType":"RevertStatement","src":"33606:47:28"}]}}]},"documentation":{"id":8869,"nodeType":"StructuredDocumentation","src":"33138:307:28","text":" @dev Returns the downcasted int16 from int256, reverting on\n overflow (when the input is less than smallest int16 or\n greater than largest int16).\n Counterpart to Solidity's `int16` operator.\n Requirements:\n - input must fit into 16 bits"},"id":8894,"implemented":true,"kind":"function","modifiers":[],"name":"toInt16","nameLocation":"33459:7:28","nodeType":"FunctionDefinition","parameters":{"id":8872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8871,"mutability":"mutable","name":"value","nameLocation":"33474:5:28","nodeType":"VariableDeclaration","scope":8894,"src":"33467:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8870,"name":"int256","nodeType":"ElementaryTypeName","src":"33467:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"33466:14:28"},"returnParameters":{"id":8875,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8874,"mutability":"mutable","name":"downcasted","nameLocation":"33510:10:28","nodeType":"VariableDeclaration","scope":8894,"src":"33504:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"},"typeName":{"id":8873,"name":"int16","nodeType":"ElementaryTypeName","src":"33504:5:28","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"visibility":"internal"}],"src":"33503:18:28"},"scope":8951,"src":"33450:220:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8919,"nodeType":"Block","src":"34053:146:28","statements":[{"expression":{"id":8907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8902,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8900,"src":"34063:10:28","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8905,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8897,"src":"34081:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8904,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34076:4:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int8_$","typeString":"type(int8)"},"typeName":{"id":8903,"name":"int8","nodeType":"ElementaryTypeName","src":"34076:4:28","typeDescriptions":{}}},"id":8906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34076:11:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"src":"34063:24:28","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"id":8908,"nodeType":"ExpressionStatement","src":"34063:24:28"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8909,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8900,"src":"34101:10:28","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":8910,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8897,"src":"34115:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"34101:19:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8918,"nodeType":"IfStatement","src":"34097:96:28","trueBody":{"id":8917,"nodeType":"Block","src":"34122:71:28","statements":[{"errorCall":{"arguments":[{"hexValue":"38","id":8913,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34173:1:28","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},{"id":8914,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8897,"src":"34176:5:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8912,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"34143:29:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":8915,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34143:39:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8916,"nodeType":"RevertStatement","src":"34136:46:28"}]}}]},"documentation":{"id":8895,"nodeType":"StructuredDocumentation","src":"33676:302:28","text":" @dev Returns the downcasted int8 from int256, reverting on\n overflow (when the input is less than smallest int8 or\n greater than largest int8).\n Counterpart to Solidity's `int8` operator.\n Requirements:\n - input must fit into 8 bits"},"id":8920,"implemented":true,"kind":"function","modifiers":[],"name":"toInt8","nameLocation":"33992:6:28","nodeType":"FunctionDefinition","parameters":{"id":8898,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8897,"mutability":"mutable","name":"value","nameLocation":"34006:5:28","nodeType":"VariableDeclaration","scope":8920,"src":"33999:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8896,"name":"int256","nodeType":"ElementaryTypeName","src":"33999:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"33998:14:28"},"returnParameters":{"id":8901,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8900,"mutability":"mutable","name":"downcasted","nameLocation":"34041:10:28","nodeType":"VariableDeclaration","scope":8920,"src":"34036:15:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"},"typeName":{"id":8899,"name":"int8","nodeType":"ElementaryTypeName","src":"34036:4:28","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"visibility":"internal"}],"src":"34035:17:28"},"scope":8951,"src":"33983:216:28","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8949,"nodeType":"Block","src":"34439:250:28","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8928,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8923,"src":"34552:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[{"expression":{"arguments":[{"id":8933,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34573:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":8932,"name":"int256","nodeType":"ElementaryTypeName","src":"34573:6:28","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"}],"id":8931,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"34568:4:28","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":8934,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34568:12:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int256","typeString":"type(int256)"}},"id":8935,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"34581:3:28","memberName":"max","nodeType":"MemberAccess","src":"34568:16:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8930,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34560:7:28","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":8929,"name":"uint256","nodeType":"ElementaryTypeName","src":"34560:7:28","typeDescriptions":{}}},"id":8936,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34560:25:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34552:33:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8943,"nodeType":"IfStatement","src":"34548:105:28","trueBody":{"id":8942,"nodeType":"Block","src":"34587:66:28","statements":[{"errorCall":{"arguments":[{"id":8939,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8923,"src":"34636:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8938,"name":"SafeCastOverflowedUintToInt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7223,"src":"34608:27:28","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":8940,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34608:34:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8941,"nodeType":"RevertStatement","src":"34601:41:28"}]}},{"expression":{"arguments":[{"id":8946,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8923,"src":"34676:5:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8945,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34669:6:28","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":8944,"name":"int256","nodeType":"ElementaryTypeName","src":"34669:6:28","typeDescriptions":{}}},"id":8947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34669:13:28","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":8927,"id":8948,"nodeType":"Return","src":"34662:20:28"}]},"documentation":{"id":8921,"nodeType":"StructuredDocumentation","src":"34205:165:28","text":" @dev Converts an unsigned uint256 into a signed int256.\n Requirements:\n - input must be less than or equal to maxInt256."},"id":8950,"implemented":true,"kind":"function","modifiers":[],"name":"toInt256","nameLocation":"34384:8:28","nodeType":"FunctionDefinition","parameters":{"id":8924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8923,"mutability":"mutable","name":"value","nameLocation":"34401:5:28","nodeType":"VariableDeclaration","scope":8950,"src":"34393:13:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8922,"name":"uint256","nodeType":"ElementaryTypeName","src":"34393:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34392:15:28"},"returnParameters":{"id":8927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8926,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8950,"src":"34431:6:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8925,"name":"int256","nodeType":"ElementaryTypeName","src":"34431:6:28","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"34430:8:28"},"scope":8951,"src":"34375:314:28","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":8952,"src":"764:33927:28","usedErrors":[7206,7211,7218,7223],"usedEvents":[]}],"src":"192:34500:28"},"id":28},"contracts/ProtocolFeeControllerMigration.sol":{"ast":{"absolutePath":"contracts/ProtocolFeeControllerMigration.sol","exportedSymbols":{"IAuthentication":[47],"IBasicAuthorizer":[32],"IProtocolFeeController":[613],"IVault":[651],"IVaultAdmin":[941],"PoolConfig":[2145],"PoolRoleAccounts":[2217],"ProtocolFeeController":[6235],"ProtocolFeeControllerMigration":[9277],"ReentrancyGuardTransient":[4359],"SingletonAuthentication":[6294]},"id":9278,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":8953,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:29"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","id":8955,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9278,"sourceUnit":48,"src":"72:116:29","symbolAliases":[{"foreign":{"id":8954,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"81:15:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol","id":8957,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9278,"sourceUnit":33,"src":"189:114:29","symbolAliases":[{"foreign":{"id":8956,"name":"IBasicAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32,"src":"198:16:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":8959,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9278,"sourceUnit":614,"src":"304:113:29","symbolAliases":[{"foreign":{"id":8958,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":613,"src":"313:22:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":8962,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9278,"sourceUnit":2412,"src":"418:107:29","symbolAliases":[{"foreign":{"id":8960,"name":"PoolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2217,"src":"427:16:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":8961,"name":"PoolConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2145,"src":"445:10:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","id":8964,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9278,"sourceUnit":942,"src":"526:91:29","symbolAliases":[{"foreign":{"id":8963,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":941,"src":"535:11:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":8966,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9278,"sourceUnit":652,"src":"618:81:29","symbolAliases":[{"foreign":{"id":8965,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":651,"src":"627:6:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","id":8968,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9278,"sourceUnit":6295,"src":"701:104:29","symbolAliases":[{"foreign":{"id":8967,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6294,"src":"710:23:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","file":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","id":8970,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9278,"sourceUnit":6236,"src":"806:100:29","symbolAliases":[{"foreign":{"id":8969,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6235,"src":"815:21:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":8972,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9278,"sourceUnit":4360,"src":"907:132:29","symbolAliases":[{"foreign":{"id":8971,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4359,"src":"920:24:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":8974,"name":"ReentrancyGuardTransient","nameLocations":["2304:24:29"],"nodeType":"IdentifierPath","referencedDeclaration":4359,"src":"2304:24:29"},"id":8975,"nodeType":"InheritanceSpecifier","src":"2304:24:29"},{"baseName":{"id":8976,"name":"SingletonAuthentication","nameLocations":["2330:23:29"],"nodeType":"IdentifierPath","referencedDeclaration":6294,"src":"2330:23:29"},"id":8977,"nodeType":"InheritanceSpecifier","src":"2330:23:29"}],"canonicalName":"ProtocolFeeControllerMigration","contractDependencies":[],"contractKind":"contract","documentation":{"id":8973,"nodeType":"StructuredDocumentation","src":"1041:1219:29","text":" @notice Migrate from the original ProtocolFeeController to one with extra events.\n @dev These events enable tracking pool protocol fees under all circumstances (in particular, when protocol fees are\n initially turned off).\n After deployment, call `migratePools` as many times as necessary. The list must be generated externally, as pools\n are not iterable on-chain. The batch interface allows an unlimited number of pools to be migrated; it's possible\n there might be too many to migrate in a single call.\n The first time `migratePools` is called, the contract will first copy the global (pool-independent data). This could\n be done in a separate stage, but we're trying to keep the contract simple, vs. duplicating the staging coordinator\n system of v2 just yet.\n When all pools have been migrated, call `finalizeMigration` to disable further migration, update the address in the\n Vault, and renounce all permissions. While `migratePools` is permissionless, this call must be permissioned to\n prevent premature termination in case multiple transactions are required to migrate all the pools.\n Associated with `20250221-protocol-fee-controller-migration` (fork test only)."},"fullyImplemented":true,"id":9277,"linearizedBaseContracts":[9277,6294,2635,2491,47,4359],"name":"ProtocolFeeControllerMigration","nameLocation":"2270:30:29","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"7ea3a964","id":8980,"mutability":"immutable","name":"oldFeeController","nameLocation":"2400:16:29","nodeType":"VariableDeclaration","scope":9277,"src":"2360:56:29","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"},"typeName":{"id":8979,"nodeType":"UserDefinedTypeName","pathNode":{"id":8978,"name":"IProtocolFeeController","nameLocations":["2360:22:29"],"nodeType":"IdentifierPath","referencedDeclaration":613,"src":"2360:22:29"},"referencedDeclaration":613,"src":"2360:22:29","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"visibility":"public"},{"constant":false,"functionSelector":"51da116d","id":8983,"mutability":"mutable","name":"newFeeController","nameLocation":"2452:16:29","nodeType":"VariableDeclaration","scope":9277,"src":"2422:46:29","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"},"typeName":{"id":8982,"nodeType":"UserDefinedTypeName","pathNode":{"id":8981,"name":"IProtocolFeeController","nameLocations":["2422:22:29"],"nodeType":"IdentifierPath","referencedDeclaration":613,"src":"2422:22:29"},"referencedDeclaration":613,"src":"2422:22:29","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"visibility":"public"},{"constant":false,"functionSelector":"fbfa77cf","id":8986,"mutability":"immutable","name":"vault","nameLocation":"2499:5:29","nodeType":"VariableDeclaration","scope":9277,"src":"2475:29:29","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":8985,"nodeType":"UserDefinedTypeName","pathNode":{"id":8984,"name":"IVault","nameLocations":["2475:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"2475:6:29"},"referencedDeclaration":651,"src":"2475:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"public"},{"constant":false,"id":8989,"mutability":"immutable","name":"_authorizer","nameLocation":"2610:11:29","nodeType":"VariableDeclaration","scope":9277,"src":"2574:47:29","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"},"typeName":{"id":8988,"nodeType":"UserDefinedTypeName","pathNode":{"id":8987,"name":"IBasicAuthorizer","nameLocations":["2574:16:29"],"nodeType":"IdentifierPath","referencedDeclaration":32,"src":"2574:16:29"},"referencedDeclaration":32,"src":"2574:16:29","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"visibility":"internal"},{"constant":false,"id":8991,"mutability":"mutable","name":"_finalized","nameLocation":"2725:10:29","nodeType":"VariableDeclaration","scope":9277,"src":"2711:24:29","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8990,"name":"bool","nodeType":"ElementaryTypeName","src":"2711:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":8993,"mutability":"mutable","name":"_globalPercentagesMigrated","nameLocation":"2857:26:29","nodeType":"VariableDeclaration","scope":9277,"src":"2843:40:29","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8992,"name":"bool","nodeType":"ElementaryTypeName","src":"2843:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"documentation":{"id":8994,"nodeType":"StructuredDocumentation","src":"2890:262:29","text":" @notice Attempt to deploy this contract with invalid parameters.\n @dev ProtocolFeeController contracts return the address of the Vault they were deployed with. Ensure that both\n the old and new controllers reference the same vault."},"errorSelector":"d6f1cb05","id":8996,"name":"InvalidFeeController","nameLocation":"3163:20:29","nodeType":"ErrorDefinition","parameters":{"id":8995,"nodeType":"ParameterList","parameters":[],"src":"3183:2:29"},"src":"3157:29:29"},{"documentation":{"id":8997,"nodeType":"StructuredDocumentation","src":"3192:49:29","text":"@notice Migration can only be performed once."},"errorSelector":"ca1c3cbc","id":8999,"name":"AlreadyMigrated","nameLocation":"3252:15:29","nodeType":"ErrorDefinition","parameters":{"id":8998,"nodeType":"ParameterList","parameters":[],"src":"3267:2:29"},"src":"3246:24:29"},{"body":{"id":9029,"nodeType":"Block","src":"3976:167:29","statements":[{"expression":{"id":9012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9008,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8980,"src":"3986:16:29","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9009,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9002,"src":"4005:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":9010,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4012:24:29","memberName":"getProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":1900,"src":"4005:31:29","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IProtocolFeeController_$613_$","typeString":"function () view external returns (contract IProtocolFeeController)"}},"id":9011,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4005:33:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"src":"3986:52:29","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":9013,"nodeType":"ExpressionStatement","src":"3986:52:29"},{"expression":{"id":9016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9014,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8986,"src":"4049:5:29","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9015,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9002,"src":"4057:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"src":"4049:14:29","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":9017,"nodeType":"ExpressionStatement","src":"4049:14:29"},{"expression":{"id":9027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9018,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8989,"src":"4074:11:29","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9022,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8986,"src":"4113:5:29","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":9023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4119:13:29","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":1965,"src":"4113:19:29","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$73_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":9024,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4113:21:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAuthorizer_$73","typeString":"contract IAuthorizer"}],"id":9021,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4105:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9020,"name":"address","nodeType":"ElementaryTypeName","src":"4105:7:29","typeDescriptions":{}}},"id":9025,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4105:30:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9019,"name":"IBasicAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32,"src":"4088:16:29","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasicAuthorizer_$32_$","typeString":"type(contract IBasicAuthorizer)"}},"id":9026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4088:48:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"src":"4074:62:29","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9028,"nodeType":"ExpressionStatement","src":"4074:62:29"}]},"id":9030,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":9005,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9002,"src":"3968:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}}],"id":9006,"kind":"baseConstructorSpecifier","modifierName":{"id":9004,"name":"SingletonAuthentication","nameLocations":["3944:23:29"],"nodeType":"IdentifierPath","referencedDeclaration":6294,"src":"3944:23:29"},"nodeType":"ModifierInvocation","src":"3944:31:29"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":9003,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9002,"mutability":"mutable","name":"_vault","nameLocation":"3936:6:29","nodeType":"VariableDeclaration","scope":9030,"src":"3929:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"},"typeName":{"id":9001,"nodeType":"UserDefinedTypeName","pathNode":{"id":9000,"name":"IVault","nameLocations":["3929:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":651,"src":"3929:6:29"},"referencedDeclaration":651,"src":"3929:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"visibility":"internal"}],"src":"3928:15:29"},"returnParameters":{"id":9007,"nodeType":"ParameterList","parameters":[],"src":"3976:0:29"},"scope":9277,"src":"3917:226:29","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":9040,"nodeType":"Block","src":"4312:53:29","statements":[{"expression":{"id":9038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9036,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8983,"src":"4322:16:29","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":9037,"name":"_newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9033,"src":"4341:17:29","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"src":"4322:36:29","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":9039,"nodeType":"ExpressionStatement","src":"4322:36:29"}]},"functionSelector":"bba1af47","id":9041,"implemented":true,"kind":"function","modifiers":[],"name":"setNewFeeController","nameLocation":"4241:19:29","nodeType":"FunctionDefinition","parameters":{"id":9034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9033,"mutability":"mutable","name":"_newFeeController","nameLocation":"4284:17:29","nodeType":"VariableDeclaration","scope":9041,"src":"4261:40:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"},"typeName":{"id":9032,"nodeType":"UserDefinedTypeName","pathNode":{"id":9031,"name":"IProtocolFeeController","nameLocations":["4261:22:29"],"nodeType":"IdentifierPath","referencedDeclaration":613,"src":"4261:22:29"},"referencedDeclaration":613,"src":"4261:22:29","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"4260:42:29"},"returnParameters":{"id":9035,"nodeType":"ParameterList","parameters":[],"src":"4312:0:29"},"scope":9277,"src":"4232:133:29","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":9049,"nodeType":"Block","src":"4613:34:29","statements":[{"expression":{"id":9047,"name":"_finalized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8991,"src":"4630:10:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":9046,"id":9048,"nodeType":"Return","src":"4623:17:29"}]},"documentation":{"id":9042,"nodeType":"StructuredDocumentation","src":"4371:179:29","text":" @notice Check whether migration has been completed.\n @dev It can only be done once.\n @return isComplete True if `finalizeMigration` has been called."},"functionSelector":"d7128084","id":9050,"implemented":true,"kind":"function","modifiers":[],"name":"isMigrationComplete","nameLocation":"4564:19:29","nodeType":"FunctionDefinition","parameters":{"id":9043,"nodeType":"ParameterList","parameters":[],"src":"4583:2:29"},"returnParameters":{"id":9046,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9045,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9050,"src":"4607:4:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9044,"name":"bool","nodeType":"ElementaryTypeName","src":"4607:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4606:6:29"},"scope":9277,"src":"4555:92:29","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":9103,"nodeType":"Block","src":"5125:1023:29","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":9059,"name":"isMigrationComplete","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9050,"src":"5139:19:29","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":9060,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5139:21:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9065,"nodeType":"IfStatement","src":"5135:76:29","trueBody":{"id":9064,"nodeType":"Block","src":"5162:49:29","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9061,"name":"AlreadyMigrated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8999,"src":"5183:15:29","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5183:17:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9063,"nodeType":"RevertStatement","src":"5176:24:29"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":9068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9066,"name":"_globalPercentagesMigrated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8993,"src":"5309:26:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":9067,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5339:5:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"5309:35:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9077,"nodeType":"IfStatement","src":"5305:141:29","trueBody":{"id":9076,"nodeType":"Block","src":"5346:100:29","statements":[{"expression":{"id":9071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9069,"name":"_globalPercentagesMigrated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8993,"src":"5360:26:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":9070,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5389:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"5360:33:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9072,"nodeType":"ExpressionStatement","src":"5360:33:29"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":9073,"name":"_migrateGlobalPercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9232,"src":"5408:25:29","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":9074,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5408:27:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9075,"nodeType":"ExpressionStatement","src":"5408:27:29"}]}},{"body":{"id":9101,"nodeType":"Block","src":"5986:156:29","statements":[{"expression":{"arguments":[{"baseExpression":{"id":9096,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9054,"src":"6122:5:29","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":9098,"indexExpression":{"id":9097,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9079,"src":"6128:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6122:8:29","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[{"id":9092,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8983,"src":"6091:16:29","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}],"id":9091,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6083:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9090,"name":"address","nodeType":"ElementaryTypeName","src":"6083:7:29","typeDescriptions":{}}},"id":9093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6083:25:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9089,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6235,"src":"6061:21:29","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ProtocolFeeController_$6235_$","typeString":"type(contract ProtocolFeeController)"}},"id":9094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6061:48:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$6235","typeString":"contract ProtocolFeeController"}},"id":9095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6110:11:29","memberName":"migratePool","nodeType":"MemberAccess","referencedDeclaration":5638,"src":"6061:60:29","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":9099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6061:70:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9100,"nodeType":"ExpressionStatement","src":"6061:70:29"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9082,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9079,"src":"5963:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":9083,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9054,"src":"5967:5:29","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":9084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5973:6:29","memberName":"length","nodeType":"MemberAccess","src":"5967:12:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5963:16:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9102,"initializationExpression":{"assignments":[9079],"declarations":[{"constant":false,"id":9079,"mutability":"mutable","name":"i","nameLocation":"5956:1:29","nodeType":"VariableDeclaration","scope":9102,"src":"5948:9:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9078,"name":"uint256","nodeType":"ElementaryTypeName","src":"5948:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9081,"initialValue":{"hexValue":"30","id":9080,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5960:1:29","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5948:13:29"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":9087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5981:3:29","subExpression":{"id":9086,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9079,"src":"5983:1:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9088,"nodeType":"ExpressionStatement","src":"5981:3:29"},"nodeType":"ForStatement","src":"5943:199:29"}]},"documentation":{"id":9051,"nodeType":"StructuredDocumentation","src":"4653:391:29","text":" @notice Migrate pools from the old fee controller to the new one.\n @dev THis can be called multiple times, if there are too many pools for a single transaction. Note that the\n first time this is called, it will migrate the global fee percentages, then proceed with the first set of pools.\n @param pools The set of pools to be migrated in this call"},"functionSelector":"b8350e27","id":9104,"implemented":true,"kind":"function","modifiers":[{"id":9057,"kind":"modifierInvocation","modifierName":{"id":9056,"name":"nonReentrant","nameLocations":["5112:12:29"],"nodeType":"IdentifierPath","referencedDeclaration":4314,"src":"5112:12:29"},"nodeType":"ModifierInvocation","src":"5112:12:29"}],"name":"migratePools","nameLocation":"5058:12:29","nodeType":"FunctionDefinition","parameters":{"id":9055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9054,"mutability":"mutable","name":"pools","nameLocation":"5088:5:29","nodeType":"VariableDeclaration","scope":9104,"src":"5071:22:29","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":9052,"name":"address","nodeType":"ElementaryTypeName","src":"5071:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":9053,"nodeType":"ArrayTypeName","src":"5071:9:29","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"5070:24:29"},"returnParameters":{"id":9058,"nodeType":"ParameterList","parameters":[],"src":"5125:0:29"},"scope":9277,"src":"5049:1099:29","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"body":{"id":9135,"nodeType":"Block","src":"6213:324:29","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":9109,"name":"isMigrationComplete","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9050,"src":"6227:19:29","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":9110,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6227:21:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9115,"nodeType":"IfStatement","src":"6223:76:29","trueBody":{"id":9114,"nodeType":"Block","src":"6250:49:29","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9111,"name":"AlreadyMigrated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8999,"src":"6271:15:29","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6271:17:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9113,"nodeType":"RevertStatement","src":"6264:24:29"}]}},{"expression":{"id":9118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9116,"name":"_finalized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8991,"src":"6309:10:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":9117,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6322:4:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"6309:17:29","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9119,"nodeType":"ExpressionStatement","src":"6309:17:29"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":9120,"name":"_migrateFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9276,"src":"6388:21:29","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":9121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6388:23:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9122,"nodeType":"ExpressionStatement","src":"6388:23:29"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9126,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8989,"src":"6482:11:29","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6494:18:29","memberName":"DEFAULT_ADMIN_ROLE","nodeType":"MemberAccess","referencedDeclaration":10,"src":"6482:30:29","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_bytes32_$","typeString":"function () view external returns (bytes32)"}},"id":9128,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6482:32:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9131,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6524:4:29","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9277","typeString":"contract ProtocolFeeControllerMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9277","typeString":"contract ProtocolFeeControllerMigration"}],"id":9130,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6516:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9129,"name":"address","nodeType":"ElementaryTypeName","src":"6516:7:29","typeDescriptions":{}}},"id":9132,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6516:13:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9123,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8989,"src":"6457:11:29","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6469:12:29","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":31,"src":"6457:24:29","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9133,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6457:73:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9134,"nodeType":"ExpressionStatement","src":"6457:73:29"}]},"functionSelector":"b78b6087","id":9136,"implemented":true,"kind":"function","modifiers":[{"id":9107,"kind":"modifierInvocation","modifierName":{"id":9106,"name":"authenticate","nameLocations":["6200:12:29"],"nodeType":"IdentifierPath","referencedDeclaration":2439,"src":"6200:12:29"},"nodeType":"ModifierInvocation","src":"6200:12:29"}],"name":"finalizeMigration","nameLocation":"6163:17:29","nodeType":"FunctionDefinition","parameters":{"id":9105,"nodeType":"ParameterList","parameters":[],"src":"6180:2:29"},"returnParameters":{"id":9108,"nodeType":"ParameterList","parameters":[],"src":"6213:0:29"},"scope":9277,"src":"6154:383:29","stateMutability":"nonpayable","virtual":true,"visibility":"external"},{"body":{"id":9231,"nodeType":"Block","src":"6589:1135:29","statements":[{"assignments":[9140],"declarations":[{"constant":false,"id":9140,"mutability":"mutable","name":"swapFeeRole","nameLocation":"6684:11:29","nodeType":"VariableDeclaration","scope":9231,"src":"6676:19:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9139,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6676:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":9152,"initialValue":{"arguments":[{"expression":{"expression":{"id":9148,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":613,"src":"6766:22:29","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolFeeController_$613_$","typeString":"type(contract IProtocolFeeController)"}},"id":9149,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6789:34:29","memberName":"setGlobalProtocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":541,"src":"6766:57:29","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_uint256_$returns$__$","typeString":"function IProtocolFeeController.setGlobalProtocolSwapFeePercentage(uint256)"}},"id":9150,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6824:8:29","memberName":"selector","nodeType":"MemberAccess","src":"6766:66:29","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"arguments":[{"arguments":[{"id":9144,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8983,"src":"6722:16:29","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}],"id":9143,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6714:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9142,"name":"address","nodeType":"ElementaryTypeName","src":"6714:7:29","typeDescriptions":{}}},"id":9145,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6714:25:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9141,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"6698:15:29","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAuthentication_$47_$","typeString":"type(contract IAuthentication)"}},"id":9146,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6698:42:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthentication_$47","typeString":"contract IAuthentication"}},"id":9147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6741:11:29","memberName":"getActionId","nodeType":"MemberAccess","referencedDeclaration":46,"src":"6698:54:29","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view external returns (bytes32)"}},"id":9151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6698:144:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"6676:166:29"},{"assignments":[9154],"declarations":[{"constant":false,"id":9154,"mutability":"mutable","name":"yieldFeeRole","nameLocation":"6861:12:29","nodeType":"VariableDeclaration","scope":9231,"src":"6853:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9153,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6853:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":9166,"initialValue":{"arguments":[{"expression":{"expression":{"id":9162,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":613,"src":"6944:22:29","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IProtocolFeeController_$613_$","typeString":"type(contract IProtocolFeeController)"}},"id":9163,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6967:35:29","memberName":"setGlobalProtocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":547,"src":"6944:58:29","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_uint256_$returns$__$","typeString":"function IProtocolFeeController.setGlobalProtocolYieldFeePercentage(uint256)"}},"id":9164,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7003:8:29","memberName":"selector","nodeType":"MemberAccess","src":"6944:67:29","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"arguments":[{"arguments":[{"id":9158,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8983,"src":"6900:16:29","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}],"id":9157,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6892:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9156,"name":"address","nodeType":"ElementaryTypeName","src":"6892:7:29","typeDescriptions":{}}},"id":9159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6892:25:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9155,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"6876:15:29","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAuthentication_$47_$","typeString":"type(contract IAuthentication)"}},"id":9160,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6876:42:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthentication_$47","typeString":"contract IAuthentication"}},"id":9161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6919:11:29","memberName":"getActionId","nodeType":"MemberAccess","referencedDeclaration":46,"src":"6876:54:29","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view external returns (bytes32)"}},"id":9165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6876:145:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"6853:168:29"},{"expression":{"arguments":[{"id":9170,"name":"swapFeeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9140,"src":"7054:11:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9173,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7075:4:29","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9277","typeString":"contract ProtocolFeeControllerMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9277","typeString":"contract ProtocolFeeControllerMigration"}],"id":9172,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7067:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9171,"name":"address","nodeType":"ElementaryTypeName","src":"7067:7:29","typeDescriptions":{}}},"id":9174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7067:13:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9167,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8989,"src":"7032:11:29","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7044:9:29","memberName":"grantRole","nodeType":"MemberAccess","referencedDeclaration":17,"src":"7032:21:29","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9175,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7032:49:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9176,"nodeType":"ExpressionStatement","src":"7032:49:29"},{"expression":{"arguments":[{"id":9180,"name":"yieldFeeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9154,"src":"7113:12:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9183,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7135:4:29","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9277","typeString":"contract ProtocolFeeControllerMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9277","typeString":"contract ProtocolFeeControllerMigration"}],"id":9182,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7127:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9181,"name":"address","nodeType":"ElementaryTypeName","src":"7127:7:29","typeDescriptions":{}}},"id":9184,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7127:13:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9177,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8989,"src":"7091:11:29","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7103:9:29","memberName":"grantRole","nodeType":"MemberAccess","referencedDeclaration":17,"src":"7091:21:29","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7091:50:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9186,"nodeType":"ExpressionStatement","src":"7091:50:29"},{"assignments":[9188],"declarations":[{"constant":false,"id":9188,"mutability":"mutable","name":"globalSwapFeePercentage","nameLocation":"7207:23:29","nodeType":"VariableDeclaration","scope":9231,"src":"7199:31:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9187,"name":"uint256","nodeType":"ElementaryTypeName","src":"7199:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9192,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9189,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8980,"src":"7233:16:29","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":9190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7250:34:29","memberName":"getGlobalProtocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":431,"src":"7233:51:29","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":9191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7233:53:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7199:87:29"},{"assignments":[9194],"declarations":[{"constant":false,"id":9194,"mutability":"mutable","name":"globalYieldFeePercentage","nameLocation":"7304:24:29","nodeType":"VariableDeclaration","scope":9231,"src":"7296:32:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9193,"name":"uint256","nodeType":"ElementaryTypeName","src":"7296:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9198,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9195,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8980,"src":"7331:16:29","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":9196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7348:35:29","memberName":"getGlobalProtocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":437,"src":"7331:52:29","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":9197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7331:54:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7296:89:29"},{"expression":{"arguments":[{"id":9202,"name":"globalSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9188,"src":"7448:23:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9199,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8983,"src":"7396:16:29","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":9201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7413:34:29","memberName":"setGlobalProtocolSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":541,"src":"7396:51:29","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256) external"}},"id":9203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7396:76:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9204,"nodeType":"ExpressionStatement","src":"7396:76:29"},{"expression":{"arguments":[{"id":9208,"name":"globalYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9194,"src":"7535:24:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9205,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8983,"src":"7482:16:29","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}},"id":9207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7499:35:29","memberName":"setGlobalProtocolYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":547,"src":"7482:52:29","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256) external"}},"id":9209,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7482:78:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9210,"nodeType":"ExpressionStatement","src":"7482:78:29"},{"expression":{"arguments":[{"id":9214,"name":"swapFeeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9140,"src":"7627:11:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9217,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7648:4:29","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9277","typeString":"contract ProtocolFeeControllerMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9277","typeString":"contract ProtocolFeeControllerMigration"}],"id":9216,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7640:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9215,"name":"address","nodeType":"ElementaryTypeName","src":"7640:7:29","typeDescriptions":{}}},"id":9218,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7640:13:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9211,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8989,"src":"7602:11:29","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7614:12:29","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":31,"src":"7602:24:29","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7602:52:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9220,"nodeType":"ExpressionStatement","src":"7602:52:29"},{"expression":{"arguments":[{"id":9224,"name":"yieldFeeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9154,"src":"7689:12:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9227,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7711:4:29","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9277","typeString":"contract ProtocolFeeControllerMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9277","typeString":"contract ProtocolFeeControllerMigration"}],"id":9226,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7703:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9225,"name":"address","nodeType":"ElementaryTypeName","src":"7703:7:29","typeDescriptions":{}}},"id":9228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7703:13:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9221,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8989,"src":"7664:11:29","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7676:12:29","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":31,"src":"7664:24:29","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7664:53:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9230,"nodeType":"ExpressionStatement","src":"7664:53:29"}]},"id":9232,"implemented":true,"kind":"function","modifiers":[],"name":"_migrateGlobalPercentages","nameLocation":"6552:25:29","nodeType":"FunctionDefinition","parameters":{"id":9137,"nodeType":"ParameterList","parameters":[],"src":"6577:2:29"},"returnParameters":{"id":9138,"nodeType":"ParameterList","parameters":[],"src":"6589:0:29"},"scope":9277,"src":"6543:1181:29","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":9275,"nodeType":"Block","src":"7772:360:29","statements":[{"assignments":[9236],"declarations":[{"constant":false,"id":9236,"mutability":"mutable","name":"setFeeControllerRole","nameLocation":"7790:20:29","nodeType":"VariableDeclaration","scope":9275,"src":"7782:28:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9235,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7782:7:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":9248,"initialValue":{"arguments":[{"expression":{"expression":{"id":9244,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":941,"src":"7870:11:29","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultAdmin_$941_$","typeString":"type(contract IVaultAdmin)"}},"id":9245,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7882:24:29","memberName":"setProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":802,"src":"7870:36:29","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_contract$_IProtocolFeeController_$613_$returns$__$","typeString":"function IVaultAdmin.setProtocolFeeController(contract IProtocolFeeController)"}},"id":9246,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7907:8:29","memberName":"selector","nodeType":"MemberAccess","src":"7870:45:29","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"arguments":[{"arguments":[{"id":9240,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8986,"src":"7837:5:29","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}],"id":9239,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7829:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9238,"name":"address","nodeType":"ElementaryTypeName","src":"7829:7:29","typeDescriptions":{}}},"id":9241,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7829:14:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":9237,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47,"src":"7813:15:29","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAuthentication_$47_$","typeString":"type(contract IAuthentication)"}},"id":9242,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7813:31:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthentication_$47","typeString":"contract IAuthentication"}},"id":9243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7845:11:29","memberName":"getActionId","nodeType":"MemberAccess","referencedDeclaration":46,"src":"7813:43:29","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view external returns (bytes32)"}},"id":9247,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7813:112:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"7782:143:29"},{"expression":{"arguments":[{"id":9252,"name":"setFeeControllerRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9236,"src":"7958:20:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9255,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7988:4:29","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9277","typeString":"contract ProtocolFeeControllerMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9277","typeString":"contract ProtocolFeeControllerMigration"}],"id":9254,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7980:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9253,"name":"address","nodeType":"ElementaryTypeName","src":"7980:7:29","typeDescriptions":{}}},"id":9256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7980:13:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9249,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8989,"src":"7936:11:29","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7948:9:29","memberName":"grantRole","nodeType":"MemberAccess","referencedDeclaration":17,"src":"7936:21:29","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9257,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7936:58:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9258,"nodeType":"ExpressionStatement","src":"7936:58:29"},{"expression":{"arguments":[{"id":9262,"name":"newFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8983,"src":"8036:16:29","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$613","typeString":"contract IProtocolFeeController"}],"expression":{"id":9259,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8986,"src":"8005:5:29","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$651","typeString":"contract IVault"}},"id":9261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8011:24:29","memberName":"setProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":802,"src":"8005:30:29","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IProtocolFeeController_$613_$returns$__$","typeString":"function (contract IProtocolFeeController) external"}},"id":9263,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8005:48:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9264,"nodeType":"ExpressionStatement","src":"8005:48:29"},{"expression":{"arguments":[{"id":9268,"name":"setFeeControllerRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9236,"src":"8089:20:29","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":9271,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8119:4:29","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9277","typeString":"contract ProtocolFeeControllerMigration"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeControllerMigration_$9277","typeString":"contract ProtocolFeeControllerMigration"}],"id":9270,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8111:7:29","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":9269,"name":"address","nodeType":"ElementaryTypeName","src":"8111:7:29","typeDescriptions":{}}},"id":9272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8111:13:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":9265,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8989,"src":"8064:11:29","typeDescriptions":{"typeIdentifier":"t_contract$_IBasicAuthorizer_$32","typeString":"contract IBasicAuthorizer"}},"id":9267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8076:12:29","memberName":"renounceRole","nodeType":"MemberAccess","referencedDeclaration":31,"src":"8064:24:29","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) external"}},"id":9273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8064:61:29","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9274,"nodeType":"ExpressionStatement","src":"8064:61:29"}]},"id":9276,"implemented":true,"kind":"function","modifiers":[],"name":"_migrateFeeController","nameLocation":"7739:21:29","nodeType":"FunctionDefinition","parameters":{"id":9233,"nodeType":"ParameterList","parameters":[],"src":"7760:2:29"},"returnParameters":{"id":9234,"nodeType":"ParameterList","parameters":[],"src":"7772:0:29"},"scope":9277,"src":"7730:402:29","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":9278,"src":"2261:5873:29","usedErrors":[38,4303,8996,8999],"usedEvents":[]}],"src":"46:8089:29"},"id":29}},"contracts":{"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol":{"IBasicAuthorizer":{"abi":[{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"where","type":"address"}],"name":"canPerform","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","canPerform(bytes32,address,address)":"9be2a884","grantRole(bytes32,address)":"2f2ff15d","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"where\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"params\":{\"account\":\"Account trying to perform the action\",\"actionId\":\"Identifier for the action to be performed\",\"where\":\"Target contract for the action\"},\"returns\":{\"success\":\"True if the action is permitted\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"notice\":\"Returns true if `account` can perform the action described by `actionId` in the contract `where`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol\":\"IBasicAuthorizer\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol\":{\"keccak256\":\"0x434eda908f66d99d967c2c2b233337227c331cd79655ec5b0ddcc76db7a20606\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b0b6c4bc095113dfbaeb9d9a6f9602f0f1a79b075c82d5ccccff7a1b67af1ce8\",\"dweb:/ipfs/QmaePfy8V5U9UFqkDtdTvPjJLmo1XEorPrC1fMVB35n86Y\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"IAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"notice\":\"Simple interface for permissioned calling of external functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":\"IAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"IRateProvider":{"abi":[{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getRate()":"679aefce"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getRate()\":{\"details\":\"The meaning of this rate depends on the context. Note that there may be an error associated with a token rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface does not take a rounding direction or return an error, so great care must be taken when interpreting and using rates in downstream computations.\",\"returns\":{\"rate\":\"The current token rate\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getRate()\":{\"notice\":\"An 18 decimal fixed point number representing the exchange rate of one token to another related token.\"}},\"notice\":\"General interface for token exchange rates.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":\"IRateProvider\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"IAuthorizer":{"abi":[{"inputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"where","type":"address"}],"name":"canPerform","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"canPerform(bytes32,address,address)":"9be2a884"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"where\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"params\":{\"account\":\"Account trying to perform the action\",\"actionId\":\"Identifier for the action to be performed\",\"where\":\"Target contract for the action\"},\"returns\":{\"success\":\"True if the action is permitted\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"notice\":\"Returns true if `account` can perform the action described by `actionId` in the contract `where`.\"}},\"notice\":\"Interface to the Vault's permission system.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":\"IAuthorizer\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"IHooks":{"abi":[{"inputs":[],"name":"getHookFlags","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"}],"internalType":"struct HookFlags","name":"hookFlags","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256[]","name":"amountsInScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsInRaw","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterAddLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256[]","name":"hookAdjustedAmountsInRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterInitialize","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsOutRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterRemoveLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256[]","name":"hookAdjustedAmountsOutRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountInScaled18","type":"uint256"},{"internalType":"uint256","name":"amountOutScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenInBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenOutBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AfterSwapParams","name":"params","type":"tuple"}],"name":"onAfterSwap","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"hookAdjustedAmountCalculatedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256[]","name":"maxAmountsInScaled18","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeAddLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeInitialize","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeRemoveLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"},{"internalType":"address","name":"pool","type":"address"}],"name":"onBeforeSwap","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"}],"name":"onComputeDynamicSwapFeePercentage","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"onRegister","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getHookFlags()":"d77153a7","onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)":"976907cc","onAfterInitialize(uint256[],uint256,bytes)":"38be241d","onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)":"2754888d","onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))":"18b6eb55","onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)":"45421ec7","onBeforeInitialize(uint256[],bytes)":"1c149e28","onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)":"ba5f9f40","onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)":"5211fa77","onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)":"a0e8f5ac","onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))":"0b89f182"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getHookFlags\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"}],\"internalType\":\"struct HookFlags\",\"name\":\"hookFlags\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsInRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsOutRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenInBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenOutBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AfterSwapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"onAfterSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"hookAdjustedAmountCalculatedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"onBeforeSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"onComputeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"onRegister\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that they are called in the correct order, and with the correct arguments. To maintain this security, these functions should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`, then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)\",\"kind\":\"dev\",\"methods\":{\"getHookFlags()\":{\"details\":\"The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero). `onRegister` is the only \\\"mandatory\\\" hook.\",\"returns\":{\"hookFlags\":\"Flags indicating which hooks the contract supports\"}},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsInRaw\":\"Actual amounts of tokens added, sorted in token registration order\",\"amountsInScaled18\":\"Actual amounts of tokens added, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountOut\":\"Amount of pool tokens minted\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsInRaw\":\"New amountsInRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"details\":\"Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"bptAmountOut\":\"Amount of pool tokens minted during initialization\",\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool accepts the initialization results\"}},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsOutRaw\":\"Actual amount of tokens to receive, sorted in token registration order\",\"amountsOutScaled18\":\"Scaled amount of tokens to receive, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountIn\":\"Amount of pool tokens to burn\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsOutRaw\":\"New amountsOutRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"details\":\"Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"hookAdjustedAmountCalculatedRaw\":\"New amount calculated, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"maxAmountsInScaled18\":\"Maximum amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeInitialize(uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with initialization\"}},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"maxBptAmountIn\":\"Maximum amount of input pool tokens\",\"minAmountsOutScaled18\":\"Minimum output amounts, sorted in token registration order\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"details\":\"Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"details\":\"Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\",\"staticSwapFeePercentage\":\"18-decimal FP value of the static swap fee percentage, for reference\"},\"returns\":{\"dynamicSwapFeePercentage\":\"Value of the swap fee percentage, as an 18-decimal FP value\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"details\":\"Returns true if registration was successful, and false to revert the pool registration. Make sure this function is properly implemented (e.g. check the factory, and check that the given pool is from the factory). The Vault address will be msg.sender.\",\"params\":{\"factory\":\"Address of the pool factory (contract deploying the pool)\",\"liquidityManagement\":\"Liquidity management flags indicating which functions are enabled\",\"pool\":\"Address of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"},\"returns\":{\"success\":\"True if the hook allowed the registration, false otherwise\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getHookFlags()\":{\"notice\":\"Return the set of hooks implemented by the contract.\"},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed after adding liquidity.\"},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"notice\":\"Hook to be executed after pool initialization.\"},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed after removing liquidity.\"},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"notice\":\"Called after a swap to perform further actions once the balances have been updated by the swap.\"},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed before adding liquidity.\"},\"onBeforeInitialize(uint256[],bytes)\":{\"notice\":\"Hook executed before pool initialization.\"},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed before removing liquidity.\"},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"notice\":\"Called before a swap to give the Pool an opportunity to perform actions.\"},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"notice\":\"Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\"},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"notice\":\"Hook executed when a pool is registered with a non-zero hooks contract.\"}},\"notice\":\"Interface for pool hooks.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":\"IHooks\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"IProtocolFeeController":{"abi":[{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"pool","type":"address"}],"name":"CallerIsNotPoolCreator","type":"error"},{"inputs":[],"name":"PoolCreatorFeePercentageTooHigh","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreatorNotRegistered","type":"error"},{"inputs":[],"name":"ProtocolSwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ProtocolYieldFeePercentageTooHigh","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"GlobalProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"GlobalProtocolYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateSwapFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateYieldFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PoolCreatorFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"PoolCreatorSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"PoolCreatorYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"poolCreator","type":"address"},{"indexed":false,"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"PoolRegisteredWithFeeController","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolSwapFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"ProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolYieldFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"ProtocolYieldFeePercentageChanged","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"protocolFeePercentage","type":"uint256"},{"internalType":"uint256","name":"poolCreatorFeePercentage","type":"uint256"}],"name":"computeAggregateFeePercentage","outputs":[{"internalType":"uint256","name":"aggregateFeePercentage","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getGlobalProtocolSwapFeePercentage","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolYieldFeePercentage","outputs":[{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolSwapFeeInfo","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"internalType":"bool","name":"isOverride","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolYieldFeeInfo","outputs":[{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"},{"internalType":"bool","name":"isOverride","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getProtocolFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"registerPool","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setGlobalProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setGlobalProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"setPoolCreatorSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"setPoolCreatorYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"collectAggregateFees(address)":"8f4ab9ca","computeAggregateFeePercentage(uint256,uint256)":"0ddd60c6","getGlobalProtocolSwapFeePercentage()":"7869ee18","getGlobalProtocolYieldFeePercentage()":"55fb76af","getPoolCreatorFeeAmounts(address)":"9e95f3fd","getPoolCreatorSwapFeePercentage(address)":"0b8e059b","getPoolCreatorYieldFeePercentage(address)":"0252aab5","getPoolProtocolSwapFeeInfo(address)":"5c15a0b4","getPoolProtocolYieldFeeInfo(address)":"7a2b97dc","getProtocolFeeAmounts(address)":"8df44c54","isPoolRegistered(address)":"c673bdaf","registerPool(address,address,bool)":"77ff76e7","setGlobalProtocolSwapFeePercentage(uint256)":"8a3c5c69","setGlobalProtocolYieldFeePercentage(uint256)":"a93df2a4","setPoolCreatorSwapFeePercentage(address,uint256)":"1377c16c","setPoolCreatorYieldFeePercentage(address,uint256)":"3af52712","setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356","updateProtocolSwapFeePercentage(address)":"71ecc8fb","updateProtocolYieldFeePercentage(address)":"71447ea8","vault()":"fbfa77cf","withdrawPoolCreatorFees(address)":"52f125f0","withdrawPoolCreatorFees(address,address)":"f7061445","withdrawProtocolFees(address,address)":"cf7b287f","withdrawProtocolFeesForToken(address,address,address)":"b53a70b2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"CallerIsNotPoolCreator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolCreatorFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolYieldFeePercentageTooHigh\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateSwapFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateYieldFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"PoolRegisteredWithFeeController\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeAggregateFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolSwapFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOverride\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolYieldFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOverride\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getProtocolFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"registerPool\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"params\":{\"caller\":\"The account attempting to withdraw pool creator fees\",\"pool\":\"The pool the caller tried to withdraw from\"}}],\"PoolCreatorNotRegistered(address)\":[{\"params\":{\"pool\":\"The pool with no creator\"}}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol swap fee percentages.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol yield fee percentages.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"params\":{\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"params\":{\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global swap fee percentage.\",\"params\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global yield fee percentage.\",\"params\":{\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which pool creator fees are being withdrawn\",\"recipient\":\"The recipient of the funds (the pool creator if permissionless, or another account)\",\"token\":\"The token being withdrawn\"}},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator swap fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage for the pool\"}},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator yield fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage for the pool\"}},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"details\":\"The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee counterpart also include the protocol fee exemption flag, we might as well include it here as well.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (non-zero, or the event would not be emitted)\",\"protocolFeeExempt\":\"True if the pool is initially exempt from protocol fees\"}},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which protocol fees are being withdrawn\",\"recipient\":\"The recipient of the funds\",\"token\":\"The token being withdrawn\"}},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the swap fee was charged\",\"token\":\"The token in which the swap fee was charged\"}},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol swap fee will be changed\",\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the yield fee was charged\",\"token\":\"The token in which the yield fee was charged\"}},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol yield fee will be changed\",\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}}},\"kind\":\"dev\",\"methods\":{\"collectAggregateFees(address)\":{\"params\":{\"pool\":\"The pool with aggregate fees\"}},\"computeAggregateFeePercentage(uint256,uint256)\":{\"details\":\"Not tied to any particular pool; this just performs the low-level \\\"additive fee\\\" calculation. Note that pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are stored in the Vault with 24-bit precision, this will truncate any values that require greater precision. It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee components, but the truncation ensures it will not revert for any valid set of fee percentages. See example below: tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60% totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000 protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400 creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600 creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360 lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\",\"params\":{\"poolCreatorFeePercentage\":\"The pool creator portion of the aggregate fee percentage\",\"protocolFeePercentage\":\"The protocol portion of the aggregate fee percentage\"},\"returns\":{\"aggregateFeePercentage\":\"The computed aggregate percentage\"}},\"getGlobalProtocolSwapFeePercentage()\":{\"returns\":{\"protocolSwapFeePercentage\":\"The global protocol swap fee percentage\"}},\"getGlobalProtocolYieldFeePercentage()\":{\"returns\":{\"protocolYieldFeePercentage\":\"The global protocol yield fee percentage\"}},\"getPoolCreatorFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getPoolCreatorSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\"}},\"getPoolCreatorYieldFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee\"}},\"getPoolProtocolSwapFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"isOverride\":\"True if the protocol fee has been overridden\",\"protocolSwapFeePercentage\":\"The protocol swap fee percentage for the given pool\"}},\"getPoolProtocolYieldFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"isOverride\":\"True if the protocol fee has been overridden\",\"protocolYieldFeePercentage\":\"The protocol yield fee percentage for the given pool\"}},\"getProtocolFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\"}},\"registerPool(address,address,bool)\":{\"details\":\"This must be called from the Vault during pool registration. It will initialize the pool to the global protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate fee percentages, based on an initial pool creator fee of 0.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (or 0 if there won't be a pool creator fee)\",\"protocolFeeExempt\":\"If true, the pool is initially exempt from protocol fees\"},\"returns\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\"}},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\"}},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage to apply to the pool\"}},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage to apply to the pool\"}},\"setProtocolSwapFeePercentage(address,uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol swap fee\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol yield fee\"}},\"updateProtocolSwapFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol swap fee\"}},\"updateProtocolYieldFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol yield fee\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The Vault address\"}},\"withdrawPoolCreatorFees(address)\":{\"details\":\"Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable value, this function is permissionless.\",\"params\":{\"pool\":\"The pool on which fees were collected\"}},\"withdrawPoolCreatorFees(address,address)\":{\"details\":\"Sends swap and yield pool creator fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFees(address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFeesForToken(address,address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\",\"token\":\"Token to withdraw\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"notice\":\"Error raised if the wrong account attempts to withdraw pool creator fees.\"}],\"PoolCreatorFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\"}],\"PoolCreatorNotRegistered(address)\":[{\"notice\":\"Error raised if there is no pool creator on a withdrawal attempt from the given pool.\"}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated.\"},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated.\"},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\"},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\"},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of pool creator fees in a specific token and amount.\"},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator swap fee percentage of a pool is updated.\"},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator yield fee percentage of a pool is updated.\"},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"notice\":\"Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\"},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of protocol fees in a specific token and amount.\"},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol swap fees in a specific token and amount.\"},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated for a specific pool.\"},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol yield fees in a specific token and amount.\"},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated for a specific pool.\"}},\"kind\":\"user\",\"methods\":{\"collectAggregateFees(address)\":{\"notice\":\"Collects aggregate fees from the Vault for a given pool.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"notice\":\"Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\"},\"getGlobalProtocolSwapFeePercentage()\":{\"notice\":\"Getter for the current global protocol swap fee.\"},\"getGlobalProtocolYieldFeePercentage()\":{\"notice\":\"Getter for the current global protocol yield fee.\"},\"getPoolCreatorFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the pool creator for withdrawal.\"},\"getPoolCreatorSwapFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator swap fee percentage for a given pool.\"},\"getPoolCreatorYieldFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator yield fee percentage for a given pool.\"},\"getPoolProtocolSwapFeeInfo(address)\":{\"notice\":\"Getter for the current protocol swap fee for a given pool.\"},\"getPoolProtocolYieldFeeInfo(address)\":{\"notice\":\"Getter for the current protocol yield fee for a given pool.\"},\"getProtocolFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the protocol for withdrawal.\"},\"isPoolRegistered(address)\":{\"notice\":\"Getter for pool registration flag.\"},\"registerPool(address,address,bool)\":{\"notice\":\"Add pool-specific entries to the protocol swap and yield percentages.\"},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"notice\":\"Set the global protocol swap fee percentage, used by standard pools.\"},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"notice\":\"Set the global protocol yield fee percentage, used by standard pools.\"},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator swap fee percentage to the specified pool.\"},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator yield fee percentage to the specified pool.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"updateProtocolSwapFeePercentage(address)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"updateProtocolYieldFeePercentage(address)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"vault()\":{\"notice\":\"Get the address of the main Vault contract.\"},\"withdrawPoolCreatorFees(address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool.\"},\"withdrawPoolCreatorFees(address,address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool. This is a permissioned function.\"},\"withdrawProtocolFees(address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\"},\"withdrawProtocolFeesForToken(address,address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\"}},\"notice\":\"Contract that handles protocol and pool creator fees for the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":\"IProtocolFeeController\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"IVault":{"abi":[{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"tokenAllowance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBuffersPaused","outputs":[{"internalType":"bool","name":"buffersPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"yieldFeeAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"swapParams","type":"tuple"}],"name":"computeDynamicSwapFeePercentage","outputs":[{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQueryPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"emitAuxiliaryEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"enableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddLiquidityCalledFlag","outputs":[{"internalType":"bool","name":"liquidityAdded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"yieldFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBptRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferAsset","outputs":[{"internalType":"address","name":"underlyingToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"underlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"wrappedBalanceRaw","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"bufferMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"liquidityOwner","type":"address"}],"name":"getBufferOwnerShares","outputs":[{"internalType":"uint256","name":"ownerShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodDuration","outputs":[{"internalType":"uint32","name":"bufferPeriodDuration","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodEndTime","outputs":[{"internalType":"uint32","name":"bufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTotalShares","outputs":[{"internalType":"uint256","name":"bufferShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getERC4626BufferAsset","outputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getHooksConfig","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumPoolTokens","outputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumPoolTokens","outputs":[{"internalType":"uint256","name":"minTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumTradeAmount","outputs":[{"internalType":"uint256","name":"minimumTradeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumWrapAmount","outputs":[{"internalType":"uint256","name":"minimumWrapAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonzeroDeltaCount","outputs":[{"internalType":"uint256","name":"nonzeroDeltaCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolConfig","outputs":[{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"poolConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"poolMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolPausedState","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"},{"internalType":"uint32","name":"poolPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"poolBufferPeriodEndTime","type":"uint32"},{"internalType":"address","name":"pauseManager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolRoleAccounts","outputs":[{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"tokenCount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenRates","outputs":[{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getReservesOf","outputs":[{"internalType":"uint256","name":"reserveAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenDelta","outputs":[{"internalType":"int256","name":"tokenDelta","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAdmin","outputs":[{"internalType":"address","name":"vaultAdmin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"vaultExtension","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultPausedState","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"},{"internalType":"uint32","name":"vaultPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"vaultBufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"isERC4626BufferInitialized","outputs":[{"internalType":"bool","name":"isBufferInitialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInRecoveryMode","outputs":[{"internalType":"bool","name":"inRecoveryMode","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInitialized","outputs":[{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolPaused","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabled","outputs":[{"internalType":"bool","name":"queryDisabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabledPermanently","outputs":[{"internalType":"bool","name":"queryDisabledPermanently","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"unlocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isVaultPaused","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"pausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quote","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quoteAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"}],"name":"removeLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"setProtocolFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"tokenTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"unpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"updateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateYieldFeePercentage","type":"uint256"}],"name":"updateAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","addLiquidityToBuffer(address,uint256,uint256,uint256,address)":"e2a92b1a","allowance(address,address,address)":"927da105","approve(address,address,uint256)":"e1f21c67","areBuffersPaused()":"55cba7fe","balanceOf(address,address)":"f7888aec","collectAggregateFees(address)":"8f4ab9ca","computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))":"4d472bdd","disableQuery()":"de1a36a6","disableQueryPermanently()":"821440f2","disableRecoveryMode(address)":"bffb78b2","emitAuxiliaryEvent(bytes32,bytes)":"c8088247","enableQuery()":"e0d55605","enableRecoveryMode(address)":"dc3f574e","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","getActionId(bytes4)":"851c1bb3","getAddLiquidityCalledFlag(address)":"ace9b89b","getAggregateSwapFeeAmount(address,address)":"85e0b999","getAggregateYieldFeeAmount(address,address)":"00fdfa13","getAuthorizer()":"aaabadc5","getBptRate(address)":"4f037ee7","getBufferAsset(address)":"0387587d","getBufferBalance(address)":"4021fe0f","getBufferMinimumTotalSupply()":"26a8a991","getBufferOwnerShares(address,address)":"9385e39a","getBufferPeriodDuration()":"20c1fb7a","getBufferPeriodEndTime()":"cd51c12f","getBufferTotalShares(address)":"f2784e07","getCurrentLiveBalances(address)":"535cfd8a","getERC4626BufferAsset(address)":"4afbaf5a","getHooksConfig(address)":"ce8630d4","getMaximumPoolTokens()":"2e42f4d5","getMinimumPoolTokens()":"a8175b27","getMinimumTradeAmount()":"e2cb0ba0","getMinimumWrapAmount()":"53956aa2","getNonzeroDeltaCount()":"db817187","getPauseWindowEndTime()":"8a8d123a","getPoolConfig(address)":"f29486a1","getPoolData(address)":"13d21cdf","getPoolMinimumTotalSupply()":"d0965a6b","getPoolPausedState(address)":"15e32046","getPoolRoleAccounts(address)":"e9ddeb26","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getPoolTokenInfo(address)":"67e0e076","getPoolTokenRates(address)":"7e361bde","getPoolTokens(address)":"ca4f2803","getProtocolFeeController()":"85f2dbd4","getReservesOf(address)":"96787092","getStaticSwapFeePercentage(address)":"b45090f9","getTokenDelta(address)":"9e825ff5","getVaultAdmin()":"1ba0ae45","getVaultExtension()":"b9a8effa","getVaultPausedState()":"85c8c015","initialize(address,address,address[],uint256[],uint256,bytes)":"ba8a2be0","initializeBuffer(address,uint256,uint256,uint256,address)":"653eb3b0","isERC4626BufferInitialized(address)":"6844846b","isPoolInRecoveryMode(address)":"be7d628a","isPoolInitialized(address)":"532cec7c","isPoolPaused(address)":"6c9bc732","isPoolRegistered(address)":"c673bdaf","isQueryDisabled()":"b4aef0ab","isQueryDisabledPermanently()":"13ef8a5d","isUnlocked()":"8380edb7","isVaultPaused()":"098401f5","pausePool(address)":"55aca1ec","pauseVault()":"9e0879c2","pauseVaultBuffers()":"e085c5a8","quote(bytes)":"edfa3568","quoteAndRevert(bytes)":"757d64b3","registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"eeec802f","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","removeLiquidityFromBuffer(address,uint256,uint256,uint256)":"ebc7955c","removeLiquidityRecovery(address,address,uint256,uint256[])":"a07d6040","sendTo(address,address,uint256)":"ae639329","setAuthorizer(address)":"058a628f","setProtocolFeeController(address)":"2d771389","setStaticSwapFeePercentage(address,uint256)":"d15126ba","settle(address,uint256)":"15afd409","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","totalSupply(address)":"e4dc2aa4","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unlock(bytes)":"48c89491","unpausePool(address)":"f21c38cd","unpauseVault()":"0b7562be","unpauseVaultBuffers()":"b9212b49","updateAggregateSwapFeePercentage(address,uint256)":"5e0b06f4","updateAggregateYieldFeePercentage(address,uint256)":"e253670a","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAllowance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"buffersPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yieldFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQueryPermanently\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"emitAuxiliaryEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getAddLiquidityCalledFlag\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"liquidityAdded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"yieldFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityOwner\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ownerShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getERC4626BufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumTradeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumWrapAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonzeroDeltaCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"poolConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"poolPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"poolBufferPeriodEndTime\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"tokenDelta\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultAdmin\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultExtension\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"vaultPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"vaultBufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"isERC4626BufferInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isBufferInitialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"inRecoveryMode\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabledPermanently\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabledPermanently\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingInRaw\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedInRaw\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens deposited into the buffer\"}},\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"tokenAllowance\":\"Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\",\"returns\":{\"buffersPaused\":\"True if the Vault buffers are paused\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"tokenBalance\":\"Token balance of the account\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"swapFeeAmounts\":\"An array with the total swap fees collected, sorted in token registration order\",\"yieldFeeAmounts\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"dynamicSwapFeePercentage\":\"The dynamic swap fee percentage\"}},\"disableQuery()\":{\"details\":\"The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2). This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether disabling queries is completely necessary; queries can still be re-enabled after this call.\"},\"disableQueryPermanently()\":{\"details\":\"Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\"},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\"}},\"enableQuery()\":{\"details\":\"Only works if queries are not permanently disabled.\"},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\",\"params\":{\"pool\":\"The address of the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}},\"getAddLiquidityCalledFlag(address)\":{\"details\":\"Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional is the only standard way to exit a position without fees, and this flag is used to enable fees in that case. It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse than a simple swap for every pool type.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"liquidityAdded\":\"True if liquidity has been added to this pool in the current transaction Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"swapFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"yieldFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"authorizer\":\"Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingBalanceRaw\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"wrappedBalanceRaw\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"bufferMinimumTotalSupply\":\"The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"ownerShares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodDuration\":\"The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodEndTime\":\"The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"bufferShares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getERC4626BufferAsset(address)\":{\"details\":\"To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers should never call `wrapper.asset()` directly, at least without checking it against the asset registered with the Vault on initialization.\",\"params\":{\"wrappedToken\":\"The wrapped token specifying the buffer\"},\"returns\":{\"asset\":\"The underlying asset of the wrapped token\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"hooksConfig\":\"The hooks configuration as a `HooksConfig` struct\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"maxTokens\":\"The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"minTokens\":\"The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"minimumTradeAmount\":\"The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"minimumWrapAmount\":\"The minimum wrap amount in native underlying token decimals\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"nonzeroDeltaCount\":\"The current value of `_nonzeroDeltaCount`\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance. Balancer timestamps are 32 bits.\",\"returns\":{\"pauseWindowEndTime\":\"The timestamp when the Vault's pause window ends\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"poolConfig\":\"The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"poolData\":\"The `PoolData` result\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"poolMinimumTotalSupply\":\"The minimum total supply a pool can have after initialization\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period. Balancer timestamps are 32 bits.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"pauseManager\":\"The pause manager, or the zero address\",\"poolBufferPeriodEndTime\":\"The timestamp after which the Pool unpauses itself (if paused)\",\"poolPauseWindowEndTime\":\"The timestamp of the end of the Pool's pause window\",\"poolPaused\":\"True if the Pool is paused\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"roleAccounts\":\"A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"index\":\"Index corresponding to the given token in the pool's token list\",\"tokenCount\":\"Number of tokens in the pool\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"tokens\":\"List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"reserveAmount\":\"The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"swapFeePercentage\":\"The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"tokenDelta\":\"The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"vaultAdmin\":\"The address of the Vault admin\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"vaultExtension\":\"Address of the VaultExtension\"}},\"getVaultPausedState()\":{\"details\":\"Balancer timestamps are 32 bits.\",\"returns\":{\"vaultBufferPeriodEndTime\":\"The timestamp of the end of the Vault's buffer period\",\"vaultPauseWindowEndTime\":\"The timestamp of the end of the Vault's pause window\",\"vaultPaused\":\"True if the Vault is paused\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isERC4626BufferInitialized(address)\":{\"details\":\"An initialized buffer should have an asset registered in the Vault.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"isBufferInitialized\":\"True if the ERC4626 buffer is initialized\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"inRecoveryMode\":\"True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"initialized\":\"True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"poolPaused\":\"True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"registered\":\"True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"If true, queries might either be disabled temporarily or permanently.\",\"returns\":{\"queryDisabled\":\"True if query functionality is reversibly disabled\"}},\"isQueryDisabledPermanently()\":{\"details\":\"This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\",\"returns\":{\"queryDisabledPermanently\":\"True if query functionality is permanently disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"unlocked\":\"True if the Vault is unlocked, false otherwise\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `areBuffersPaused` to check the pause state of the buffers.\",\"returns\":{\"vaultPaused\":\"True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment. Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers are also paused (with `pauseVaultBuffers`).\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting buffers, and vice versa.\"},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. Balancer timestamps are 32 bits. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOut\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"tokenTotalSupply\":\"Total supply of the token\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`. If the Vault was also paused, it will remain in that state until explicitly unpaused. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateSwapFeePercentageChanged` event.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose swap fee percentage will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateYieldFeePercentageChanged` event.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose yield fee percentage will be updated\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The main Vault address.\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\"},\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"disableQuery()\":{\"notice\":\"Disables query functionality on the Vault. Can only be called by governance.\"},\"disableQueryPermanently()\":{\"notice\":\"Disables query functionality permanently on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"enableQuery()\":{\"notice\":\"Enables query functionality on the Vault. Can only be called by governance.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAddLiquidityCalledFlag(address)\":{\"notice\":\"This flag is used to detect and tax \\\"round-trip\\\" interactions (adding and removing liquidity in the same pool).\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getERC4626BufferAsset(address)\":{\"notice\":\"Gets the registered asset for a given buffer.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isERC4626BufferInitialized(address)\":{\"notice\":\"Checks if the wrapped token has an initialized buffer in the Vault.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Returns true if queries are disabled on the Vault.\"},\"isQueryDisabledPermanently()\":{\"notice\":\"Returns true if queries are disabled permanently; false if they are enabled.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"}},\"notice\":\"Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":\"IVault\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"IVaultAdmin":{"abi":[{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBuffersPaused","outputs":[{"internalType":"bool","name":"buffersPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"yieldFeeAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQueryPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"enableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferAsset","outputs":[{"internalType":"address","name":"underlyingToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"underlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"wrappedBalanceRaw","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"bufferMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"liquidityOwner","type":"address"}],"name":"getBufferOwnerShares","outputs":[{"internalType":"uint256","name":"ownerShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodDuration","outputs":[{"internalType":"uint32","name":"bufferPeriodDuration","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodEndTime","outputs":[{"internalType":"uint32","name":"bufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTotalShares","outputs":[{"internalType":"uint256","name":"bufferShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumPoolTokens","outputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumPoolTokens","outputs":[{"internalType":"uint256","name":"minTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumTradeAmount","outputs":[{"internalType":"uint256","name":"minimumTradeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumWrapAmount","outputs":[{"internalType":"uint256","name":"minimumWrapAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"poolMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getVaultPausedState","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"},{"internalType":"uint32","name":"vaultPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"vaultBufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isVaultPaused","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"pausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"}],"name":"removeLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"setProtocolFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"unpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"updateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateYieldFeePercentage","type":"uint256"}],"name":"updateAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidityToBuffer(address,uint256,uint256,uint256,address)":"e2a92b1a","areBuffersPaused()":"55cba7fe","collectAggregateFees(address)":"8f4ab9ca","disableQuery()":"de1a36a6","disableQueryPermanently()":"821440f2","disableRecoveryMode(address)":"bffb78b2","enableQuery()":"e0d55605","enableRecoveryMode(address)":"dc3f574e","getBufferAsset(address)":"0387587d","getBufferBalance(address)":"4021fe0f","getBufferMinimumTotalSupply()":"26a8a991","getBufferOwnerShares(address,address)":"9385e39a","getBufferPeriodDuration()":"20c1fb7a","getBufferPeriodEndTime()":"cd51c12f","getBufferTotalShares(address)":"f2784e07","getMaximumPoolTokens()":"2e42f4d5","getMinimumPoolTokens()":"a8175b27","getMinimumTradeAmount()":"e2cb0ba0","getMinimumWrapAmount()":"53956aa2","getPauseWindowEndTime()":"8a8d123a","getPoolMinimumTotalSupply()":"d0965a6b","getVaultPausedState()":"85c8c015","initializeBuffer(address,uint256,uint256,uint256,address)":"653eb3b0","isVaultPaused()":"098401f5","pausePool(address)":"55aca1ec","pauseVault()":"9e0879c2","pauseVaultBuffers()":"e085c5a8","removeLiquidityFromBuffer(address,uint256,uint256,uint256)":"ebc7955c","setAuthorizer(address)":"058a628f","setProtocolFeeController(address)":"2d771389","setStaticSwapFeePercentage(address,uint256)":"d15126ba","unpausePool(address)":"f21c38cd","unpauseVault()":"0b7562be","unpauseVaultBuffers()":"b9212b49","updateAggregateSwapFeePercentage(address,uint256)":"5e0b06f4","updateAggregateYieldFeePercentage(address,uint256)":"e253670a","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"buffersPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yieldFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQueryPermanently\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityOwner\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ownerShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumTradeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumWrapAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"vaultPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"vaultBufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"`VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations, as two delegate calls add gas to each call. Most of the permissioned calls are here.\",\"kind\":\"dev\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingInRaw\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedInRaw\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens deposited into the buffer\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\",\"returns\":{\"buffersPaused\":\"True if the Vault buffers are paused\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"swapFeeAmounts\":\"An array with the total swap fees collected, sorted in token registration order\",\"yieldFeeAmounts\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"disableQuery()\":{\"details\":\"The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2). This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether disabling queries is completely necessary; queries can still be re-enabled after this call.\"},\"disableQueryPermanently()\":{\"details\":\"Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\"},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"enableQuery()\":{\"details\":\"Only works if queries are not permanently disabled.\"},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\",\"params\":{\"pool\":\"The address of the pool\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingBalanceRaw\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"wrappedBalanceRaw\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"bufferMinimumTotalSupply\":\"The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"ownerShares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodDuration\":\"The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodEndTime\":\"The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"bufferShares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"maxTokens\":\"The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"minTokens\":\"The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"minimumTradeAmount\":\"The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"minimumWrapAmount\":\"The minimum wrap amount in native underlying token decimals\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance. Balancer timestamps are 32 bits.\",\"returns\":{\"pauseWindowEndTime\":\"The timestamp when the Vault's pause window ends\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"poolMinimumTotalSupply\":\"The minimum total supply a pool can have after initialization\"}},\"getVaultPausedState()\":{\"details\":\"Balancer timestamps are 32 bits.\",\"returns\":{\"vaultBufferPeriodEndTime\":\"The timestamp of the end of the Vault's buffer period\",\"vaultPauseWindowEndTime\":\"The timestamp of the end of the Vault's pause window\",\"vaultPaused\":\"True if the Vault is paused\"}},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `areBuffersPaused` to check the pause state of the buffers.\",\"returns\":{\"vaultPaused\":\"True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment. Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers are also paused (with `pauseVaultBuffers`).\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting buffers, and vice versa.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`. If the Vault was also paused, it will remain in that state until explicitly unpaused. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateSwapFeePercentageChanged` event.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose swap fee percentage will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateYieldFeePercentageChanged` event.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose yield fee percentage will be updated\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"disableQuery()\":{\"notice\":\"Disables query functionality on the Vault. Can only be called by governance.\"},\"disableQueryPermanently()\":{\"notice\":\"Disables query functionality permanently on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"enableQuery()\":{\"notice\":\"Enables query functionality on the Vault. Can only be called by governance.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"notice\":\"Interface for functions defined on the `VaultAdmin` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":\"IVaultAdmin\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"IVaultErrors":{"abi":[{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Errors are declared inside an interface (namespace) to improve DX with Typechain.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":\"IVaultErrors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"IVaultEvents":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Events are declared inside an interface (namespace) to improve DX with Typechain.\",\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":\"IVaultEvents\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"IVaultExtension":{"abi":[{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"tokenAllowance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"swapParams","type":"tuple"}],"name":"computeDynamicSwapFeePercentage","outputs":[{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"emitAuxiliaryEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddLiquidityCalledFlag","outputs":[{"internalType":"bool","name":"liquidityAdded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"yieldFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBptRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getERC4626BufferAsset","outputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getHooksConfig","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonzeroDeltaCount","outputs":[{"internalType":"uint256","name":"nonzeroDeltaCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolConfig","outputs":[{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"poolConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolPausedState","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"},{"internalType":"uint32","name":"poolPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"poolBufferPeriodEndTime","type":"uint32"},{"internalType":"address","name":"pauseManager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolRoleAccounts","outputs":[{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenRates","outputs":[{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getReservesOf","outputs":[{"internalType":"uint256","name":"reserveAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenDelta","outputs":[{"internalType":"int256","name":"tokenDelta","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAdmin","outputs":[{"internalType":"address","name":"vaultAdmin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"isERC4626BufferInitialized","outputs":[{"internalType":"bool","name":"isBufferInitialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInRecoveryMode","outputs":[{"internalType":"bool","name":"inRecoveryMode","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInitialized","outputs":[{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolPaused","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabled","outputs":[{"internalType":"bool","name":"queryDisabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabledPermanently","outputs":[{"internalType":"bool","name":"queryDisabledPermanently","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"unlocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quote","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quoteAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"tokenTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address,address)":"927da105","approve(address,address,uint256)":"e1f21c67","balanceOf(address,address)":"f7888aec","computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))":"4d472bdd","emitAuxiliaryEvent(bytes32,bytes)":"c8088247","getAddLiquidityCalledFlag(address)":"ace9b89b","getAggregateSwapFeeAmount(address,address)":"85e0b999","getAggregateYieldFeeAmount(address,address)":"00fdfa13","getAuthorizer()":"aaabadc5","getBptRate(address)":"4f037ee7","getCurrentLiveBalances(address)":"535cfd8a","getERC4626BufferAsset(address)":"4afbaf5a","getHooksConfig(address)":"ce8630d4","getNonzeroDeltaCount()":"db817187","getPoolConfig(address)":"f29486a1","getPoolData(address)":"13d21cdf","getPoolPausedState(address)":"15e32046","getPoolRoleAccounts(address)":"e9ddeb26","getPoolTokenInfo(address)":"67e0e076","getPoolTokenRates(address)":"7e361bde","getPoolTokens(address)":"ca4f2803","getProtocolFeeController()":"85f2dbd4","getReservesOf(address)":"96787092","getStaticSwapFeePercentage(address)":"b45090f9","getTokenDelta(address)":"9e825ff5","getVaultAdmin()":"1ba0ae45","initialize(address,address,address[],uint256[],uint256,bytes)":"ba8a2be0","isERC4626BufferInitialized(address)":"6844846b","isPoolInRecoveryMode(address)":"be7d628a","isPoolInitialized(address)":"532cec7c","isPoolPaused(address)":"6c9bc732","isPoolRegistered(address)":"c673bdaf","isQueryDisabled()":"b4aef0ab","isQueryDisabledPermanently()":"13ef8a5d","isUnlocked()":"8380edb7","quote(bytes)":"edfa3568","quoteAndRevert(bytes)":"757d64b3","registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"eeec802f","removeLiquidityRecovery(address,address,uint256,uint256[])":"a07d6040","totalSupply(address)":"e4dc2aa4","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAllowance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"emitAuxiliaryEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getAddLiquidityCalledFlag\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"liquidityAdded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"yieldFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getERC4626BufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonzeroDeltaCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"poolConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"poolPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"poolBufferPeriodEndTime\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"tokenDelta\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultAdmin\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"isERC4626BufferInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isBufferInitialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"inRecoveryMode\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabledPermanently\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabledPermanently\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"`VaultExtension` handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and liquidity operations.\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"tokenAllowance\":\"Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"tokenBalance\":\"Token balance of the account\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"dynamicSwapFeePercentage\":\"The dynamic swap fee percentage\"}},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\"}},\"getAddLiquidityCalledFlag(address)\":{\"details\":\"Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional is the only standard way to exit a position without fees, and this flag is used to enable fees in that case. It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse than a simple swap for every pool type.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"liquidityAdded\":\"True if liquidity has been added to this pool in the current transaction Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"swapFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"yieldFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"authorizer\":\"Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getERC4626BufferAsset(address)\":{\"details\":\"To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers should never call `wrapper.asset()` directly, at least without checking it against the asset registered with the Vault on initialization.\",\"params\":{\"wrappedToken\":\"The wrapped token specifying the buffer\"},\"returns\":{\"asset\":\"The underlying asset of the wrapped token\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"hooksConfig\":\"The hooks configuration as a `HooksConfig` struct\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"nonzeroDeltaCount\":\"The current value of `_nonzeroDeltaCount`\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"poolConfig\":\"The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"poolData\":\"The `PoolData` result\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period. Balancer timestamps are 32 bits.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"pauseManager\":\"The pause manager, or the zero address\",\"poolBufferPeriodEndTime\":\"The timestamp after which the Pool unpauses itself (if paused)\",\"poolPauseWindowEndTime\":\"The timestamp of the end of the Pool's pause window\",\"poolPaused\":\"True if the Pool is paused\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"roleAccounts\":\"A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"tokens\":\"List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"reserveAmount\":\"The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"swapFeePercentage\":\"The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"tokenDelta\":\"The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"vaultAdmin\":\"The address of the Vault admin\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"isERC4626BufferInitialized(address)\":{\"details\":\"An initialized buffer should have an asset registered in the Vault.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"isBufferInitialized\":\"True if the ERC4626 buffer is initialized\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"inRecoveryMode\":\"True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"initialized\":\"True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"poolPaused\":\"True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"registered\":\"True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"If true, queries might either be disabled temporarily or permanently.\",\"returns\":{\"queryDisabled\":\"True if query functionality is reversibly disabled\"}},\"isQueryDisabledPermanently()\":{\"details\":\"This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\",\"returns\":{\"queryDisabledPermanently\":\"True if query functionality is permanently disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"unlocked\":\"True if the Vault is unlocked, false otherwise\"}},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. Balancer timestamps are 32 bits. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOut\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"tokenTotalSupply\":\"Total supply of the token\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"getAddLiquidityCalledFlag(address)\":{\"notice\":\"This flag is used to detect and tax \\\"round-trip\\\" interactions (adding and removing liquidity in the same pool).\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getERC4626BufferAsset(address)\":{\"notice\":\"Gets the registered asset for a given buffer.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"isERC4626BufferInitialized(address)\":{\"notice\":\"Checks if the wrapped token has an initialized buffer in the Vault.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Returns true if queries are disabled on the Vault.\"},\"isQueryDisabledPermanently()\":{\"notice\":\"Returns true if queries are disabled permanently; false if they are enabled.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"notice\":\"Interface for functions defined on the `VaultExtension` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":\"IVaultExtension\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"IVaultMain":{"abi":[{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"tokenCount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"vaultExtension","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getVaultExtension()":"b9a8effa","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","sendTo(address,address,uint256)":"ae639329","settle(address,uint256)":"15afd409","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unlock(bytes)":"48c89491"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultExtension\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These are generally \\\"critical path\\\" functions (swap, add/remove liquidity) that are in the main contract for technical or performance reasons.\",\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"index\":\"Index corresponding to the given token in the pool's token list\",\"tokenCount\":\"Number of tokens in the pool\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"vaultExtension\":\"Address of the VaultExtension\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"}},\"notice\":\"Interface for functions defined on the main Vault contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":\"IVaultMain\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"Authentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be applied to external functions to make them only callable by authorized accounts. Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in multi-contract systems. There are two main uses for it: - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers unique. The contract's own address is a good option. - if the contract belongs to a family that shares action identifiers for the same functions, an identifier shared by the entire family (and no other contract) should be used instead.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"notice\":\"Building block for performing access control on external functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":\"Authentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol":{"CommonAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Base contract for performing access control on external functions within pools.\",\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol\":\"CommonAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol\":{\"keccak256\":\"0x89bd8b60aa203c8aa72af6e88671af68f4407a26dd3e0541b0e4dc387fd0081e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://411eb9ee6df963198102de5ae597c1f1377b0a45be23f17d38463f2eeefa2b0a\",\"dweb:/ipfs/QmcEaMawADJEyLswG5hhvhQuTNV3XUxBVu3YZCbJzQkoJ7\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"FixedPoint":{"abi":[{"inputs":[],"name":"ZeroDivision","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220e9cc622b7f35aaf8f3efa30ad767c4a02aedd5ccde9b7738c8491078c2823d0164736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 0xCC PUSH3 0x2B7F35 0xAA 0xF8 RETURN 0xEF LOG3 EXP 0xD7 PUSH8 0xC4A02AEDD5CCDE9B PUSH24 0x38C8491078C2823D0164736F6C634300081B003300000000 ","sourceMap":"239:5688:15:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220e9cc622b7f35aaf8f3efa30ad767c4a02aedd5ccde9b7738c8491078c2823d0164736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 0xCC PUSH3 0x2B7F35 0xAA 0xF8 RETURN 0xEF LOG3 EXP 0xD7 PUSH8 0xC4A02AEDD5CCDE9B PUSH24 0x38C8491078C2823D0164736F6C634300081B003300000000 ","sourceMap":"239:5688:15:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":\"FixedPoint\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"LogExpMath":{"abi":[{"inputs":[],"name":"BaseOutOfBounds","type":"error"},{"inputs":[],"name":"ExponentOutOfBounds","type":"error"},{"inputs":[],"name":"InvalidExponent","type":"error"},{"inputs":[],"name":"OutOfBounds","type":"error"},{"inputs":[],"name":"ProductOutOfBounds","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220f7e8e3ef4405ba858296891409b167de675961dcc03dc03125ef5eed9c9eb29264736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF7 0xE8 0xE3 0xEF PREVRANDAO SDIV 0xBA DUP6 DUP3 SWAP7 DUP10 EQ MULMOD 0xB1 PUSH8 0xDE675961DCC03DC0 BALANCE 0x25 0xEF MCOPY 0xED SWAP13 SWAP15 0xB2 SWAP3 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"595:21889:16:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220f7e8e3ef4405ba858296891409b167de675961dcc03dc03125ef5eed9c9eb29264736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF7 0xE8 0xE3 0xEF PREVRANDAO SDIV 0xBA DUP6 DUP3 SWAP7 DUP10 EQ MULMOD 0xB1 PUSH8 0xDE675961DCC03DC0 BALANCE 0x25 0xEF MCOPY 0xED SWAP13 SWAP15 0xB2 SWAP3 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"595:21889:16:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BaseOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExponentOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExponent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProductOutOfBounds\",\"type\":\"error\"}],\"devdoc\":{\"author\":\"Fernando Martinelli - @fernandomartinelliSergio Yuhjtman - @sergioyuhjtmanDaniel Fernandez - @dmf7z\",\"details\":\"Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument). Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural exponentiation and logarithm (where the base is Euler's number). All math operations are unchecked in order to save gas.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"BaseOutOfBounds()\":[{\"notice\":\"This error is thrown when a base is not within an acceptable range.\"}],\"ExponentOutOfBounds()\":[{\"notice\":\"This error is thrown when a exponent is not within an acceptable range.\"}],\"InvalidExponent()\":[{\"notice\":\"This error is thrown when an exponent used in the exp function is not within an acceptable range.\"}],\"OutOfBounds()\":[{\"notice\":\"This error is thrown when a variable or result is not within the acceptable bounds defined in the function.\"}],\"ProductOutOfBounds()\":[{\"notice\":\"This error is thrown when the exponent * ln(base) is not within an acceptable range.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":\"LogExpMath\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"ReentrancyGuardTransient":{"abi":[{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"NOTE: This variant only works on networks where EIP-1153 is available.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Variant of {ReentrancyGuard} that uses transient storage.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":\"ReentrancyGuardTransient\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"StorageSlotExtension":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212207d1ece238b2a90fbead6c43dfa8046238cc35e0b4dec12d000c4f2cebfef20e164736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH30 0x1ECE238B2A90FBEAD6C43DFA8046238CC35E0B4DEC12D000C4F2CEBFEF20 0xE1 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"278:4371:18:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212207d1ece238b2a90fbead6c43dfa8046238cc35e0b4dec12d000c4f2cebfef20e164736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH30 0x1ECE238B2A90FBEAD6C43DFA8046238CC35E0B4DEC12D000C4F2CEBFEF20 0xE1 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"278:4371:18:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"TIP: Consider using this library along with {SlotDerivation}.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":\"StorageSlotExtension\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol":{"ProtocolFeeController":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"pool","type":"address"}],"name":"CallerIsNotPoolCreator","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[],"name":"InvalidMigrationSource","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[],"name":"PoolCreatorFeePercentageTooHigh","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreatorNotRegistered","type":"error"},{"inputs":[],"name":"ProtocolSwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ProtocolYieldFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"ZeroDivision","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"GlobalProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"GlobalProtocolYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateSwapFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateYieldFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PoolCreatorFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"PoolCreatorSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"PoolCreatorYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"poolCreator","type":"address"},{"indexed":false,"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"PoolRegisteredWithFeeController","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolSwapFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"ProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolYieldFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"ProtocolYieldFeePercentageChanged","type":"event"},{"inputs":[],"name":"MAX_CREATOR_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFeesHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"protocolFeePercentage","type":"uint256"},{"internalType":"uint256","name":"poolCreatorFeePercentage","type":"uint256"}],"name":"computeAggregateFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolSwapFeeInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolYieldFeeInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getProtocolFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"migratePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"registerPool","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setGlobalProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setGlobalProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"setPoolCreatorSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"setPoolCreatorYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60e03461010957601f612e7d38819003918201601f19168301916001600160401b0383118484101761010d5780849260209460405283398101031261010957516001600160a01b038116810361010957306080528060a05260c052604051612d5b9081610122823960805181612172015260a051818181610ed6015281816110fc0152612883015260c0518181816102530152818161036e015281816103f8015281816105170152818161058501528181610864015281816108d201528181610c7d01528181610db3015281816115d60152818161177b0152818161191c01528181611a7601528181611be401528181612350015281816126060152818161278201526129ce0152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c9081630252aab514611fa6575080630874327f14611b935780630b8e059b14611b5b5780630ddd60c614611b3a5780631377c16c14611a1b5780632772d156146118385780632e1d388d146119f95780633af52712146118c157806352f125f01461189657806355fb76af146118795780635c15a0b41461183d5780635e32e4e81461183857806371447ea81461169357806371ecc8fb146114ef57806377ff76e71461125b5780637869ee181461123f5780637a2b97dc146111d4578063851c1bb3146111845780638a3c5c69146111205780638d928af8146110dd5780638df44c54146110555780638f4ab9ca146110345780639e95f3fd14610fa8578063a93df2a414610f43578063aaabadc514610e90578063abaa335614610ce7578063b53a70b214610c00578063c673bdaf14610bc3578063cf7b287f14610b5d578063f706144514610b28578063fa399f2a14610392578063fbfa77cf1461034f5763fd267f3914610187575f80fd5b34610323576040600319360112610323576101a0611fda565b602435906101ac61281e565b6706f05b59d3b200008211610327576101c4826127d6565b6101cd8161228e565b6101d68261246f565b916040516101e381612063565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600260205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169161027d81612b67565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e92602092610309575b50604051908152a2005b610312906120ac565b5f6102ff565b6040513d5f823e3d90fd5b5f80fd5b7f7e6eb7fb000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610323576020600319360112610323576103ab611fda565b6103b3612778565b6040517f8f4ab9ca0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201525f81602481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610318575f905f92610acb575b506001600160a01b0383165f52600260205267ffffffffffffffff60405f20541690600560205260405f2054905f928215159384610ac1575b84610ab1575b6104728761298f565b94905f5b8681106108225789896001600160a01b0382165f52600360205267ffffffffffffffff60405f205416905f92600660205260405f2054925f8415159485610818575b85610806575b6104c78461298f565b96905f5b8881106104d457005b6104de8189612213565b516104ec575b6001016104cb565b986001600160a01b036104ff8b84612213565b51169061050c8b8a612213565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561080257604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201528181606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156107f7579082916107e0575b506107b357505f99816105c8828b612213565b516040519081527fe505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e260206001600160a01b038c1692a383156107385761060e818a612213565b5186156107105761061e906124c1565b6001670de0b6b3a764000061065f8a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848c8783010401901515026124de565b928301040190151502916001600160a01b0389165f52600760205260405f20815f5260205260405f206106938482546124b4565b905561069f828b612213565b519081848103116106e3576001936106d9916001600160a01b038c165f52600860205260405f20905f5260205260405f20920382546124b4565b90555b90506104e4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001918561077d5761074a828b612213565b51906001600160a01b038a165f52600760205260405f20905f5260205261077660405f209182546124b4565b90556106dc565b610787828b612213565b51906001600160a01b038a165f52600860205260405f20905f5260205261077660405f209182546124b4565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6107e9906120ac565b6107f457808c6105b5565b80fd5b6040513d84823e3d90fd5b5080fd5b905061081281836124f1565b906104be565b82151595506104b8565b61082c8187612213565b5161083a575b600101610476565b6001600160a01b0361084c8284612213565b5116906108598188612213565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561032357604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201525f81606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561031857610aa2575b50818b7fae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f60206001600160a01b03610937868d612213565b51936040519485521692a38815610a27576109528188612213565b51851561071057610962906124c1565b6001670de0b6b3a76400006109a3897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848b8783010401901515026124de565b928301040190151502916001600160a01b038c165f52600760205260405f20815f5260205260405f206109d78482546124b4565b90556109e38289612213565b519081848103116106e357600193610a1d916001600160a01b038f165f52600860205260405f20905f5260205260405f20920382546124b4565b90555b9050610832565b60019184610a6c57610a398289612213565b51906001600160a01b038d165f52600760205260405f20905f52602052610a6560405f209182546124b4565b9055610a20565b610a768289612213565b51906001600160a01b038d165f52600860205260405f20905f52602052610a6560405f209182546124b4565b610aab906120ac565b8b6108ff565b50610abc83826124f1565b610469565b8115159450610463565b9150503d805f833e610add81836120dc565b8101906040818303126103235780519167ffffffffffffffff928381116103235781610b0a91840161240e565b92602083015190811161032357610b21920161240e565b908361042a565b3461032357604060031936011261032357610b5b610b44611fda565b610b4c611ff0565b90610b5681612532565b6126c1565b005b3461032357604060031936011261032357610b76611fda565b610b7e611ff0565b90610b8761281e565b610b908161298f565b915f5b838110610b9c57005b80610bbd6001600160a01b03610bb460019487612213565b51168785612aa3565b01610b93565b34610323576020600319360112610323576001600160a01b03610be4611fda565b165f526004602052602060ff60405f2054166040519015158152f35b3461032357606060031936011261032357610c19611fda565b610c21611ff0565b604435906001600160a01b039283831680840361032357604090610c4361281e565b60448251809781937fc9c1661b000000000000000000000000000000000000000000000000000000008352818716600484015260248301527f0000000000000000000000000000000000000000000000000000000000000000165afa801561031857610cb4575b610b5b9350612aa3565b6040843d604011610cdf575b81610ccd604093836120dc565b8101031261032357610b5b9350610caa565b3d9150610cc0565b3461032357604060031936011261032357610d00611fda565b60243590610d0c61281e565b6706f05b59d3b200008211610e6857610d24826127d6565b610d2d8161228e565b610d368261246f565b91604051610d4381612063565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600360205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f00000000000000000000000000000000000000000000000000000000000000001691610ddd81612b35565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd926020926103095750604051908152a2005b7fa7849e8e000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576040517faaabadc50000000000000000000000000000000000000000000000000000000081526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa908115610318576020925f92610f14575b5060405191168152f35b610f35919250833d8511610f3c575b610f2d81836120dc565b8101906123ef565b9083610f0a565b503d610f23565b34610323576020600319360112610323576004356706f05b59d3b200008111610e6857602081610f937f48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f6936127d6565b610f9b61281e565b80600155604051908152a1005b346103235760208060031936011261032357610fc2611fda565b90610fcc8261298f565b90610fd6826121c4565b925f946001600160a01b03809116955b848110610fff5760405180610ffb8882612028565b0390f35b600190875f526008845260405f20836110188388612213565b51165f52845260405f205461102d8289612213565b5201610fe6565b3461032357602060031936011261032357610b5b611050611fda565b61228e565b34610323576020806003193601126103235761106f611fda565b906110798261298f565b90611083826121c4565b925f946001600160a01b03809116955b8481106110a85760405180610ffb8882612028565b600190875f526007845260405f20836110c18388612213565b51165f52845260405f20546110d68289612213565b5201611093565b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610323576020600319360112610323576004356706f05b59d3b200008111610327576020816111707fbf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d936127d6565b61117861281e565b805f55604051908152a1005b34610323576020600319360112610323576004357fffffffff0000000000000000000000000000000000000000000000000000000081168103610323576111cc602091612147565b604051908152f35b34610323576020600319360112610323576001600160a01b036111f5611fda565b165f526003602052602060405f206040519061121082612063565b5467ffffffffffffffff811680835260ff604092831c1615159390920183905280519182526020820192909252f35b34610323575f6003193601126103235760205f54604051908152f35b3461032357606060031936011261032357611274611fda565b61127c611ff0565b90604435918215159081840361032357611294612778565b6001600160a01b0380931691825f52826020926004845260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055865f146114e457835f9687925b8915611469578483878c5f9b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611454967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb985b6113698461246f565b6040519061137682612063565b67ffffffffffffffff809116825260036113e6868401948686528b5f5260028852604084905f209551169480549651151560401b967fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000968768ff0000000000000000809a1692161717905561246f565b956040839051976113f689612063565b1687528087019586528a5f525260405f209451169184549351151560401b16921617179055604061143a905192839283909291602090604083019483521515910152565b0390a28d518c815290151560208201529081906040820190565b0390a289519586521693a38351928352820152f35b8483878c6001549b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611454967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb98611360565b835f549687926112e5565b346103235760208060031936011261032357611509611fda565b6115128161228e565b6001600160a01b039182821692835f526002825260405f20906040519161153883612063565b549167ffffffffffffffff9060ff8285169485835260401c1615908582159101525f549381611688575b5061156957005b6115728361246f565b90806040519261158184612063565b168252848201905f8252875f526002865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169261160081612b67565b843b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e936103095750604051908152a2005b905083141587611562565b3461032357602080600319360112610323576116ad611fda565b6116b68161228e565b6001600160a01b039182821692835f526003825260405f2090604051916116dc83612063565b549167ffffffffffffffff9060ff8285169485835260401c161590858215910152600154938161182d575b5061170e57005b6117178361246f565b90806040519261172684612063565b168252848201905f8252875f526003865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f000000000000000000000000000000000000000000000000000000000000000016926117a581612b35565b843b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd936103095750604051908152a2005b905083141587611707565b612006565b34610323576020600319360112610323576001600160a01b0361185e611fda565b165f526002602052602060405f206040519061121082612063565b34610323575f600319360112610323576020600154604051908152f35b3461032357602060031936011261032357610b5b6118b2611fda565b6118bb816125c7565b906126c1565b34610323576040600319360112610323576118da611fda565b602435906118e781612532565b670de0ad9b58f1600082116119d1576118ff8161228e565b6001600160a01b039182821692835f5260066020528160405f20557f0000000000000000000000000000000000000000000000000000000000000000169161194681612b35565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34926020926103095750604051908152a2005b7f0370da74000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576020604051670de0ad9b58f160008152f35b3461032357604060031936011261032357611a34611fda565b60243590611a4181612532565b670de0ad9b58f1600082116119d157611a598161228e565b6001600160a01b039182821692835f5260056020528160405f20557f00000000000000000000000000000000000000000000000000000000000000001691611aa081612b67565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577fb7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c92602092611b2b5750604051908152a2005b611b34906120ac565b846102ff565b346103235760406003193601126103235760206111cc6024356004356124f1565b34610323576020600319360112610323576001600160a01b03611b7c611fda565b165f526005602052602060405f2054604051908152f35b346103235760208060031936011261032357611bad611fda565b906001600160a01b036040517f85f2dbd40000000000000000000000000000000000000000000000000000000081528281600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156103185782915f91611f6c575b501692308414611f44571690815f526004815260ff60405f205416611f1857815f526004815260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556040517f5c15a0b4000000000000000000000000000000000000000000000000000000008152826004820152604081602481875afa908115610318575f905f92611ef4575b50611cb79061246f565b9060405190611cc582612063565b67ffffffffffffffff80931682528382019015158152845f52600284528260405f209251169180549151151560401b917fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000938468ff0000000000000000809516921617179055604051917f7a2b97dc0000000000000000000000000000000000000000000000000000000083528560048401526040836024818a5afa928315610318575f905f94611ec0575b50611d7b9061246f565b938060405195611d8a87612063565b1685528585019315158452865f526003865260405f209451169184549351151560401b169216171790556040517f0b8e059b0000000000000000000000000000000000000000000000000000000081528260048201528181602481875afa5f9181611e8e575b50938291602495611e7c575b50604051948580927f0252aab50000000000000000000000000000000000000000000000000000000082528660048301525afa5f9381611e4d575b50611e3e57005b6006915f525260405f20555f80f35b9093508181813d8311611e75575b611e6581836120dc565b8101031261032357519284611e37565b503d611e5b565b845f526005835260405f205585611dfc565b9150938282813d8311611eb9575b611ea681836120dc565b8101031261032357905190936024611df0565b503d611e9c565b611d7b9450611ee7915060403d604011611eed575b611edf81836120dc565b81019061212a565b93611d71565b503d611ed5565b611cb79250611f12915060403d604011611eed57611edf81836120dc565b91611cad565b507fdb771c80000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fb82fd5bf000000000000000000000000000000000000000000000000000000005f5260045ffd5b809250848092503d8311611f9f575b611f8581836120dc565b810103126103235751818116810361032357819085611c15565b503d611f7b565b34610323576020600319360112610323576020906001600160a01b03611fca611fda565b165f526006825260405f20548152f35b600435906001600160a01b038216820361032357565b602435906001600160a01b038216820361032357565b34610323575f6003193601126103235760206040516706f05b59d3b200008152f35b60209060206040818301928281528551809452019301915f5b82811061204f575050505090565b835185529381019392810192600101612041565b6040810190811067ffffffffffffffff82111761207f57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161207f57604052565b6060810190811067ffffffffffffffff82111761207f57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761207f57604052565b5190811515820361032357565b91908260409103126103235761214460208351930161211d565b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526121a6816120c0565b51902090565b67ffffffffffffffff811161207f5760051b60200190565b906121ce826121ac565b6121db60405191826120dc565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061220982946121ac565b0190602036910137565b80518210156122275760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b67ffffffffffffffff811161207f57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0905f601f6001600160a01b036040519383604460209684888201947ffa399f2a00000000000000000000000000000000000000000000000000000000865216602482015260248152612300816120c0565b604051988996879586937f48c894910000000000000000000000000000000000000000000000000000000085528b60048601525180918160248701528686015e85858286010152011681010301927f0000000000000000000000000000000000000000000000000000000000000000165af1801561031857612380575050565b3d805f843e61238f81846120dc565b82019181818403126103235780519067ffffffffffffffff821161032357019180601f84011215610323578251906123c682612254565b906123d460405192836120dc565b8282528383860101116103235781835f95018483015e010152565b9081602091031261032357516001600160a01b03811681036103235790565b9080601f8301121561032357815190602091612429816121ac565b9361243760405195866120dc565b81855260208086019260051b82010192831161032357602001905b828210612460575050505090565b81518152908301908301612452565b67ffffffffffffffff90818111612484571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b919082018092116106e357565b90670de0b6b3a7640000918281029281840414901517156106e357565b818102929181159184041417156106e357565b9061251e64174876e800928392612517670de0b6b3a764000091838303838510026124de565b04906124b4565b048181029181830414901517156106e35790565b6001600160a01b039081612545826125c7565b168015612586573303612556575050565b7ffbecdbf4000000000000000000000000000000000000000000000000000000005f52336004521660245260445ffd5b507f8bcbf353000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b51906001600160a01b038216820361032357565b604080517fe9ddeb260000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526060816024817f000000000000000000000000000000000000000000000000000000000000000087165afa9081156126b7575f9161263e575b5001511690565b90506060813d6060116126af575b81612659606093836120dc565b81010312610323578151906060820182811067ffffffffffffffff82111761207f576126a5918491825261268c816125b3565b845261269a602082016125b3565b6020850152016125b3565b828201525f612637565b3d915061264c565b82513d5f823e3d90fd5b906126cb8261298f565b92905f5b8481106126dd575050505050565b6001906001600160a01b03806126f38386612213565b5116818616805f5260086020818152604094855f20855f528252855f20549586612725575b50505050505050016126cf565b7f938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f993855f528352805f20865f5283525f81812055612764878d88612b99565b519586528a1694a45f808080808080612718565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036127aa57565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b64174876e8008082048181029181830414901517156106e357036127f657565b7f833fb3ce000000000000000000000000000000000000000000000000000000005f5260045ffd5b61284a7fffffffff000000000000000000000000000000000000000000000000000000005f3516612147565b6001600160a01b036040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156103185784925f9261296d575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610318575f92612937575b50501561290f57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d8311612966575b61294e81836120dc565b810103126103235761295f9061211d565b5f80612906565b503d612944565b606491925061298890843d8611610f3c57610f2d81836120dc565b91906128b5565b906001600160a01b0380604051937fca4f28030000000000000000000000000000000000000000000000000000000085521660048401525f83602481847f0000000000000000000000000000000000000000000000000000000000000000165afa928315610318575f93612a05575b5050815190565b909192503d805f833e612a1881836120dc565b810160209182818303126103235780519067ffffffffffffffff821161032357019281601f85011215610323578351612a50816121ac565b94612a5e60405196876120dc565b818652848087019260051b820101938411610323578401905b838210612a8b575050505050905f806129fe565b81518381168103610323578152908401908401612a77565b91906001600160a01b0380931690815f52600760205260405f209284811693845f5260205260405f20549485612adc575b505050505050565b82612b21877f1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b595602095885f526007875260405f208a5f5287525f6040812055612b99565b6040519687521694a45f8080808080612ad4565b6001600160a01b03165f52600360205261214467ffffffffffffffff60405f205416600660205260405f2054906124f1565b6001600160a01b03165f52600260205261214467ffffffffffffffff60405f205416600560205260405f2054906124f1565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082019081526001600160a01b03938416602483015260448083019590955293815292612c2d925f9283929190612bf66064886120dc565b1694519082865af13d15612c91573d90612c0f82612254565b91612c1d60405193846120dc565b82523d5f602084013e5b83612c99565b8051908115159182612c6e575b5050612c435750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8192509060209181010312610323576020612c89910161211d565b155f80612c3a565b606090612c27565b90612cd65750805115612cae57805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580612d1c575b612ce7575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15612cdf56fea2646970667358221220779606b3785feb7919003f1a04823c3563027f2fdbcc858f33e7d2f27b80b35b64736f6c634300081b0033","opcodes":"PUSH1 0xE0 CALLVALUE PUSH2 0x109 JUMPI PUSH1 0x1F PUSH2 0x2E7D CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x10D JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x109 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x109 JUMPI ADDRESS PUSH1 0x80 MSTORE DUP1 PUSH1 0xA0 MSTORE PUSH1 0xC0 MSTORE PUSH1 0x40 MLOAD PUSH2 0x2D5B SWAP1 DUP2 PUSH2 0x122 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x2172 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0xED6 ADD MSTORE DUP2 DUP2 PUSH2 0x10FC ADD MSTORE PUSH2 0x2883 ADD MSTORE PUSH1 0xC0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x253 ADD MSTORE DUP2 DUP2 PUSH2 0x36E ADD MSTORE DUP2 DUP2 PUSH2 0x3F8 ADD MSTORE DUP2 DUP2 PUSH2 0x517 ADD MSTORE DUP2 DUP2 PUSH2 0x585 ADD MSTORE DUP2 DUP2 PUSH2 0x864 ADD MSTORE DUP2 DUP2 PUSH2 0x8D2 ADD MSTORE DUP2 DUP2 PUSH2 0xC7D ADD MSTORE DUP2 DUP2 PUSH2 0xDB3 ADD MSTORE DUP2 DUP2 PUSH2 0x15D6 ADD MSTORE DUP2 DUP2 PUSH2 0x177B ADD MSTORE DUP2 DUP2 PUSH2 0x191C ADD MSTORE DUP2 DUP2 PUSH2 0x1A76 ADD MSTORE DUP2 DUP2 PUSH2 0x1BE4 ADD MSTORE DUP2 DUP2 PUSH2 0x2350 ADD MSTORE DUP2 DUP2 PUSH2 0x2606 ADD MSTORE DUP2 DUP2 PUSH2 0x2782 ADD MSTORE PUSH2 0x29CE ADD MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x252AAB5 EQ PUSH2 0x1FA6 JUMPI POP DUP1 PUSH4 0x874327F EQ PUSH2 0x1B93 JUMPI DUP1 PUSH4 0xB8E059B EQ PUSH2 0x1B5B JUMPI DUP1 PUSH4 0xDDD60C6 EQ PUSH2 0x1B3A JUMPI DUP1 PUSH4 0x1377C16C EQ PUSH2 0x1A1B JUMPI DUP1 PUSH4 0x2772D156 EQ PUSH2 0x1838 JUMPI DUP1 PUSH4 0x2E1D388D EQ PUSH2 0x19F9 JUMPI DUP1 PUSH4 0x3AF52712 EQ PUSH2 0x18C1 JUMPI DUP1 PUSH4 0x52F125F0 EQ PUSH2 0x1896 JUMPI DUP1 PUSH4 0x55FB76AF EQ PUSH2 0x1879 JUMPI DUP1 PUSH4 0x5C15A0B4 EQ PUSH2 0x183D JUMPI DUP1 PUSH4 0x5E32E4E8 EQ PUSH2 0x1838 JUMPI DUP1 PUSH4 0x71447EA8 EQ PUSH2 0x1693 JUMPI DUP1 PUSH4 0x71ECC8FB EQ PUSH2 0x14EF JUMPI DUP1 PUSH4 0x77FF76E7 EQ PUSH2 0x125B JUMPI DUP1 PUSH4 0x7869EE18 EQ PUSH2 0x123F JUMPI DUP1 PUSH4 0x7A2B97DC EQ PUSH2 0x11D4 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x1184 JUMPI DUP1 PUSH4 0x8A3C5C69 EQ PUSH2 0x1120 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x10DD JUMPI DUP1 PUSH4 0x8DF44C54 EQ PUSH2 0x1055 JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0x1034 JUMPI DUP1 PUSH4 0x9E95F3FD EQ PUSH2 0xFA8 JUMPI DUP1 PUSH4 0xA93DF2A4 EQ PUSH2 0xF43 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xE90 JUMPI DUP1 PUSH4 0xABAA3356 EQ PUSH2 0xCE7 JUMPI DUP1 PUSH4 0xB53A70B2 EQ PUSH2 0xC00 JUMPI DUP1 PUSH4 0xC673BDAF EQ PUSH2 0xBC3 JUMPI DUP1 PUSH4 0xCF7B287F EQ PUSH2 0xB5D JUMPI DUP1 PUSH4 0xF7061445 EQ PUSH2 0xB28 JUMPI DUP1 PUSH4 0xFA399F2A EQ PUSH2 0x392 JUMPI DUP1 PUSH4 0xFBFA77CF EQ PUSH2 0x34F JUMPI PUSH4 0xFD267F39 EQ PUSH2 0x187 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A0 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1AC PUSH2 0x281E JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0x327 JUMPI PUSH2 0x1C4 DUP3 PUSH2 0x27D6 JUMP JUMPDEST PUSH2 0x1CD DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH2 0x1D6 DUP3 PUSH2 0x246F JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0x1E3 DUP2 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x27D DUP2 PUSH2 0x2B67 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x312 SWAP1 PUSH2 0x20AC JUMP JUMPDEST PUSH0 PUSH2 0x2FF JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x3AB PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x3B3 PUSH2 0x2778 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0xACB JUMPI JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH0 SWAP3 DUP3 ISZERO ISZERO SWAP4 DUP5 PUSH2 0xAC1 JUMPI JUMPDEST DUP5 PUSH2 0xAB1 JUMPI JUMPDEST PUSH2 0x472 DUP8 PUSH2 0x298F JUMP JUMPDEST SWAP5 SWAP1 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x822 JUMPI DUP10 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH0 SWAP3 PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 PUSH0 DUP5 ISZERO ISZERO SWAP5 DUP6 PUSH2 0x818 JUMPI JUMPDEST DUP6 PUSH2 0x806 JUMPI JUMPDEST PUSH2 0x4C7 DUP5 PUSH2 0x298F JUMP JUMPDEST SWAP7 SWAP1 PUSH0 JUMPDEST DUP9 DUP2 LT PUSH2 0x4D4 JUMPI STOP JUMPDEST PUSH2 0x4DE DUP2 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH2 0x4EC JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x4CB JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x4FF DUP12 DUP5 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x50C DUP12 DUP11 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x7F7 JUMPI SWAP1 DUP3 SWAP2 PUSH2 0x7E0 JUMPI JUMPDEST POP PUSH2 0x7B3 JUMPI POP PUSH0 SWAP10 DUP2 PUSH2 0x5C8 DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xE505E41B0D437B47350A9990142CCF38ACB11FFA0E5AF8F973B9E172F3D5D5E2 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP3 LOG3 DUP4 ISZERO PUSH2 0x738 JUMPI PUSH2 0x60E DUP2 DUP11 PUSH2 0x2213 JUMP JUMPDEST MLOAD DUP7 ISZERO PUSH2 0x710 JUMPI PUSH2 0x61E SWAP1 PUSH2 0x24C1 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x65F DUP11 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP13 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x24DE JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x693 DUP5 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x69F DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0x6D9 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x4E4 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 SWAP2 DUP6 PUSH2 0x77D JUMPI PUSH2 0x74A DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x6DC JUMP JUMPDEST PUSH2 0x787 DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST DUP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x24 SWAP3 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH2 0x7E9 SWAP1 PUSH2 0x20AC JUMP JUMPDEST PUSH2 0x7F4 JUMPI DUP1 DUP13 PUSH2 0x5B5 JUMP JUMPDEST DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST SWAP1 POP PUSH2 0x812 DUP2 DUP4 PUSH2 0x24F1 JUMP JUMPDEST SWAP1 PUSH2 0x4BE JUMP JUMPDEST DUP3 ISZERO ISZERO SWAP6 POP PUSH2 0x4B8 JUMP JUMPDEST PUSH2 0x82C DUP2 DUP8 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH2 0x83A JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x476 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x84C DUP3 DUP5 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x859 DUP2 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xAA2 JUMPI JUMPDEST POP DUP2 DUP12 PUSH32 0xAE7EBAD9FC3D1D17965F063FA520D393595E2EF6C8E22AE8413B60900444E19F PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x937 DUP7 DUP14 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 DUP9 ISZERO PUSH2 0xA27 JUMPI PUSH2 0x952 DUP2 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD DUP6 ISZERO PUSH2 0x710 JUMPI PUSH2 0x962 SWAP1 PUSH2 0x24C1 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x9A3 DUP10 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP12 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x24DE JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x9D7 DUP5 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x9E3 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0xA1D SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x832 JUMP JUMPDEST PUSH1 0x1 SWAP2 DUP5 PUSH2 0xA6C JUMPI PUSH2 0xA39 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0xA20 JUMP JUMPDEST PUSH2 0xA76 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST PUSH2 0xAAB SWAP1 PUSH2 0x20AC JUMP JUMPDEST DUP12 PUSH2 0x8FF JUMP JUMPDEST POP PUSH2 0xABC DUP4 DUP3 PUSH2 0x24F1 JUMP JUMPDEST PUSH2 0x469 JUMP JUMPDEST DUP2 ISZERO ISZERO SWAP5 POP PUSH2 0x463 JUMP JUMPDEST SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xADD DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x40 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x323 JUMPI DUP2 PUSH2 0xB0A SWAP2 DUP5 ADD PUSH2 0x240E JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x323 JUMPI PUSH2 0xB21 SWAP3 ADD PUSH2 0x240E JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x42A JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0xB44 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xB4C PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH2 0xB56 DUP2 PUSH2 0x2532 JUMP JUMPDEST PUSH2 0x26C1 JUMP JUMPDEST STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB76 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xB7E PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH2 0xB87 PUSH2 0x281E JUMP JUMPDEST PUSH2 0xB90 DUP2 PUSH2 0x298F JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0xB9C JUMPI STOP JUMPDEST DUP1 PUSH2 0xBBD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBB4 PUSH1 0x1 SWAP5 DUP8 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND DUP8 DUP6 PUSH2 0x2AA3 JUMP JUMPDEST ADD PUSH2 0xB93 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBE4 PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xC19 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xC21 PUSH2 0x1FF0 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP4 AND DUP1 DUP5 SUB PUSH2 0x323 JUMPI PUSH1 0x40 SWAP1 PUSH2 0xC43 PUSH2 0x281E JUMP JUMPDEST PUSH1 0x44 DUP3 MLOAD DUP1 SWAP8 DUP2 SWAP4 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP2 DUP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xCB4 JUMPI JUMPDEST PUSH2 0xB5B SWAP4 POP PUSH2 0x2AA3 JUMP JUMPDEST PUSH1 0x40 DUP5 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0xCDF JUMPI JUMPDEST DUP2 PUSH2 0xCCD PUSH1 0x40 SWAP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0xB5B SWAP4 POP PUSH2 0xCAA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xCC0 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xD00 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xD0C PUSH2 0x281E JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0xE68 JUMPI PUSH2 0xD24 DUP3 PUSH2 0x27D6 JUMP JUMPDEST PUSH2 0xD2D DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH2 0xD36 DUP3 PUSH2 0x246F JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0xD43 DUP2 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0xDDD DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0xA7849E8E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0xF14 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xF35 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0xF3C JUMPI JUMPDEST PUSH2 0xF2D DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x23EF JUMP JUMPDEST SWAP1 DUP4 PUSH2 0xF0A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xF23 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0xE68 JUMPI PUSH1 0x20 DUP2 PUSH2 0xF93 PUSH32 0x48C5C3CCEC54C4E0EA08D83D838FA9BB725EB0B52C591CB00BD6E63BCA8C44F6 SWAP4 PUSH2 0x27D6 JUMP JUMPDEST PUSH2 0xF9B PUSH2 0x281E JUMP JUMPDEST DUP1 PUSH1 0x1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xFC2 PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH2 0xFCC DUP3 PUSH2 0x298F JUMP JUMPDEST SWAP1 PUSH2 0xFD6 DUP3 PUSH2 0x21C4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0xFFF JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xFFB DUP9 DUP3 PUSH2 0x2028 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x8 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x1018 DUP4 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x102D DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MSTORE ADD PUSH2 0xFE6 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x1050 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x228E JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x106F PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH2 0x1079 DUP3 PUSH2 0x298F JUMP JUMPDEST SWAP1 PUSH2 0x1083 DUP3 PUSH2 0x21C4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0x10A8 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xFFB DUP9 DUP3 PUSH2 0x2028 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x7 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x10C1 DUP4 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x10D6 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MSTORE ADD PUSH2 0x1093 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0x327 JUMPI PUSH1 0x20 DUP2 PUSH2 0x1170 PUSH32 0xBF5AC0FC89BBF8819BE79F280146B65EA2AF2A9705CD9CFE0C9D93F6E87F307D SWAP4 PUSH2 0x27D6 JUMP JUMPDEST PUSH2 0x1178 PUSH2 0x281E JUMP JUMPDEST DUP1 PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI PUSH2 0x11CC PUSH1 0x20 SWAP2 PUSH2 0x2147 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x11F5 PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1210 DUP3 PUSH2 0x2063 JUMP JUMPDEST SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP1 DUP4 MSTORE PUSH1 0xFF PUSH1 0x40 SWAP3 DUP4 SHR AND ISZERO ISZERO SWAP4 SWAP1 SWAP3 ADD DUP4 SWAP1 MSTORE DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH0 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1274 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x127C PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 ISZERO ISZERO SWAP1 DUP2 DUP5 SUB PUSH2 0x323 JUMPI PUSH2 0x1294 PUSH2 0x2778 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP2 DUP3 PUSH0 MSTORE DUP3 PUSH1 0x20 SWAP3 PUSH1 0x4 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE DUP7 PUSH0 EQ PUSH2 0x14E4 JUMPI DUP4 PUSH0 SWAP7 DUP8 SWAP3 JUMPDEST DUP10 ISZERO PUSH2 0x1469 JUMPI DUP5 DUP4 DUP8 DUP13 PUSH0 SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1454 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 JUMPDEST PUSH2 0x1369 DUP5 PUSH2 0x246F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1376 DUP3 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP3 MSTORE PUSH1 0x3 PUSH2 0x13E6 DUP7 DUP5 ADD SWAP5 DUP7 DUP7 MSTORE DUP12 PUSH0 MSTORE PUSH1 0x2 DUP9 MSTORE PUSH1 0x40 DUP5 SWAP1 PUSH0 KECCAK256 SWAP6 MLOAD AND SWAP5 DUP1 SLOAD SWAP7 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP7 DUP8 PUSH9 0xFF0000000000000000 DUP1 SWAP11 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH2 0x246F JUMP JUMPDEST SWAP6 PUSH1 0x40 DUP4 SWAP1 MLOAD SWAP8 PUSH2 0x13F6 DUP10 PUSH2 0x2063 JUMP JUMPDEST AND DUP8 MSTORE DUP1 DUP8 ADD SWAP6 DUP7 MSTORE DUP11 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 PUSH2 0x143A SWAP1 MLOAD SWAP3 DUP4 SWAP3 DUP4 SWAP1 SWAP3 SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x40 DUP4 ADD SWAP5 DUP4 MSTORE ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 DUP14 MLOAD DUP13 DUP2 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x40 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 DUP10 MLOAD SWAP6 DUP7 MSTORE AND SWAP4 LOG3 DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE RETURN JUMPDEST DUP5 DUP4 DUP8 DUP13 PUSH1 0x1 SLOAD SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1454 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 PUSH2 0x1360 JUMP JUMPDEST DUP4 PUSH0 SLOAD SWAP7 DUP8 SWAP3 PUSH2 0x12E5 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1509 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x1512 DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1538 DUP4 PUSH2 0x2063 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH0 SLOAD SWAP4 DUP2 PUSH2 0x1688 JUMPI JUMPDEST POP PUSH2 0x1569 JUMPI STOP JUMPDEST PUSH2 0x1572 DUP4 PUSH2 0x246F JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1581 DUP5 PUSH2 0x2063 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x2 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x1600 DUP2 PUSH2 0x2B67 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1562 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x16AD PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x16B6 DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x16DC DUP4 PUSH2 0x2063 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH1 0x1 SLOAD SWAP4 DUP2 PUSH2 0x182D JUMPI JUMPDEST POP PUSH2 0x170E JUMPI STOP JUMPDEST PUSH2 0x1717 DUP4 PUSH2 0x246F JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1726 DUP5 PUSH2 0x2063 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x17A5 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1707 JUMP JUMPDEST PUSH2 0x2006 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x185E PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1210 DUP3 PUSH2 0x2063 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x18B2 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x18BB DUP2 PUSH2 0x25C7 JUMP JUMPDEST SWAP1 PUSH2 0x26C1 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x18DA PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x18E7 DUP2 PUSH2 0x2532 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x19D1 JUMPI PUSH2 0x18FF DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1946 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x47F70DDBC624C299CEF7841AAEA0A86B677C800203E953104E958C9EC9BDAB34 SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0x370DA7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0xDE0AD9B58F16000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A34 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1A41 DUP2 PUSH2 0x2532 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x19D1 JUMPI PUSH2 0x1A59 DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1AA0 DUP2 PUSH2 0x2B67 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xB7CF36369623C01ED7B2EAFC4025224E924A2836D5FB49428A0F65417586BF5C SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x1B2B JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x1B34 SWAP1 PUSH2 0x20AC JUMP JUMPDEST DUP5 PUSH2 0x2FF JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x11CC PUSH1 0x24 CALLDATALOAD PUSH1 0x4 CALLDATALOAD PUSH2 0x24F1 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1B7C PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1BAD PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0x1F6C JUMPI JUMPDEST POP AND SWAP3 ADDRESS DUP5 EQ PUSH2 0x1F44 JUMPI AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH2 0x1F18 JUMPI DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x5C15A0B400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x40 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0x1EF4 JUMPI JUMPDEST POP PUSH2 0x1CB7 SWAP1 PUSH2 0x246F JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1CC5 DUP3 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP4 AND DUP3 MSTORE DUP4 DUP3 ADD SWAP1 ISZERO ISZERO DUP2 MSTORE DUP5 PUSH0 MSTORE PUSH1 0x2 DUP5 MSTORE DUP3 PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND SWAP2 DUP1 SLOAD SWAP2 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP4 DUP5 PUSH9 0xFF0000000000000000 DUP1 SWAP6 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP2 PUSH32 0x7A2B97DC00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP6 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 DUP4 PUSH1 0x24 DUP2 DUP11 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP5 PUSH2 0x1EC0 JUMPI JUMPDEST POP PUSH2 0x1D7B SWAP1 PUSH2 0x246F JUMP JUMPDEST SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x1D8A DUP8 PUSH2 0x2063 JUMP JUMPDEST AND DUP6 MSTORE DUP6 DUP6 ADD SWAP4 ISZERO ISZERO DUP5 MSTORE DUP7 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xB8E059B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL PUSH0 SWAP2 DUP2 PUSH2 0x1E8E JUMPI JUMPDEST POP SWAP4 DUP3 SWAP2 PUSH1 0x24 SWAP6 PUSH2 0x1E7C JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x252AAB500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL PUSH0 SWAP4 DUP2 PUSH2 0x1E4D JUMPI JUMPDEST POP PUSH2 0x1E3E JUMPI STOP JUMPDEST PUSH1 0x6 SWAP2 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP1 SWAP4 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1E75 JUMPI JUMPDEST PUSH2 0x1E65 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD SWAP3 DUP5 PUSH2 0x1E37 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E5B JUMP JUMPDEST DUP5 PUSH0 MSTORE PUSH1 0x5 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE DUP6 PUSH2 0x1DFC JUMP JUMPDEST SWAP2 POP SWAP4 DUP3 DUP3 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1EB9 JUMPI JUMPDEST PUSH2 0x1EA6 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI SWAP1 MLOAD SWAP1 SWAP4 PUSH1 0x24 PUSH2 0x1DF0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E9C JUMP JUMPDEST PUSH2 0x1D7B SWAP5 POP PUSH2 0x1EE7 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1EED JUMPI JUMPDEST PUSH2 0x1EDF DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x212A JUMP JUMPDEST SWAP4 PUSH2 0x1D71 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1ED5 JUMP JUMPDEST PUSH2 0x1CB7 SWAP3 POP PUSH2 0x1F12 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1EED JUMPI PUSH2 0x1EDF DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST SWAP2 PUSH2 0x1CAD JUMP JUMPDEST POP PUSH32 0xDB771C8000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xB82FD5BF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 SWAP3 POP DUP5 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x1F9F JUMPI JUMPDEST PUSH2 0x1F85 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 SWAP1 DUP6 PUSH2 0x1C15 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1F7B JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1FCA PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x6 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x6F05B59D3B20000 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x204F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2041 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x323 JUMPI PUSH2 0x2144 PUSH1 0x20 DUP4 MLOAD SWAP4 ADD PUSH2 0x211D JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x21A6 DUP2 PUSH2 0x20C0 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x21CE DUP3 PUSH2 0x21AC JUMP JUMPDEST PUSH2 0x21DB PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x20DC JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x2209 DUP3 SWAP5 PUSH2 0x21AC JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x2227 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 PUSH0 PUSH1 0x1F PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP4 DUP4 PUSH1 0x44 PUSH1 0x20 SWAP7 DUP5 DUP9 DUP3 ADD SWAP5 PUSH32 0xFA399F2A00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x2300 DUP2 PUSH2 0x20C0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP12 PUSH1 0x4 DUP7 ADD MSTORE MLOAD DUP1 SWAP2 DUP2 PUSH1 0x24 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY DUP6 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0x2380 JUMPI POP POP JUMP JUMPDEST RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x238F DUP2 DUP5 PUSH2 0x20DC JUMP JUMPDEST DUP3 ADD SWAP2 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP3 MLOAD SWAP1 PUSH2 0x23C6 DUP3 PUSH2 0x2254 JUMP JUMPDEST SWAP1 PUSH2 0x23D4 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP3 DUP3 MSTORE DUP4 DUP4 DUP7 ADD ADD GT PUSH2 0x323 JUMPI DUP2 DUP4 PUSH0 SWAP6 ADD DUP5 DUP4 ADD MCOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x323 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x2429 DUP2 PUSH2 0x21AC JUMP JUMPDEST SWAP4 PUSH2 0x2437 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x20DC JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x323 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x2460 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x2452 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x2484 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x251E PUSH5 0x174876E800 SWAP3 DUP4 SWAP3 PUSH2 0x2517 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP4 DUP4 SUB DUP4 DUP6 LT MUL PUSH2 0x24DE JUMP JUMPDEST DIV SWAP1 PUSH2 0x24B4 JUMP JUMPDEST DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH2 0x2545 DUP3 PUSH2 0x25C7 JUMP JUMPDEST AND DUP1 ISZERO PUSH2 0x2586 JUMPI CALLER SUB PUSH2 0x2556 JUMPI POP POP JUMP JUMPDEST PUSH32 0xFBECDBF400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP PUSH32 0x8BCBF35300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x60 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 DUP8 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x26B7 JUMPI PUSH0 SWAP2 PUSH2 0x263E JUMPI JUMPDEST POP ADD MLOAD AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x26AF JUMPI JUMPDEST DUP2 PUSH2 0x2659 PUSH1 0x60 SWAP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x60 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH2 0x26A5 SWAP2 DUP5 SWAP2 DUP3 MSTORE PUSH2 0x268C DUP2 PUSH2 0x25B3 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x269A PUSH1 0x20 DUP3 ADD PUSH2 0x25B3 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE ADD PUSH2 0x25B3 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE PUSH0 PUSH2 0x2637 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x264C JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH2 0x26CB DUP3 PUSH2 0x298F JUMP JUMPDEST SWAP3 SWAP1 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x26DD JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x26F3 DUP4 DUP7 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND DUP2 DUP7 AND DUP1 PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP5 DUP6 PUSH0 KECCAK256 DUP6 PUSH0 MSTORE DUP3 MSTORE DUP6 PUSH0 KECCAK256 SLOAD SWAP6 DUP7 PUSH2 0x2725 JUMPI JUMPDEST POP POP POP POP POP POP POP ADD PUSH2 0x26CF JUMP JUMPDEST PUSH32 0x938F3A3A03EE425CCC0F8010B0468938CBAFD3750FA43BBDF09C6F75E97E51F9 SWAP4 DUP6 PUSH0 MSTORE DUP4 MSTORE DUP1 PUSH0 KECCAK256 DUP7 PUSH0 MSTORE DUP4 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE PUSH2 0x2764 DUP8 DUP14 DUP9 PUSH2 0x2B99 JUMP JUMPDEST MLOAD SWAP6 DUP7 MSTORE DUP11 AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2718 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x27AA JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SUB PUSH2 0x27F6 JUMPI JUMP JUMPDEST PUSH32 0x833FB3CE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x284A PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x2147 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x296D JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP3 PUSH2 0x2937 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x290F JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2966 JUMPI JUMPDEST PUSH2 0x294E DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0x295F SWAP1 PUSH2 0x211D JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x2906 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2944 JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x2988 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xF3C JUMPI PUSH2 0xF2D DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x28B5 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP4 PUSH2 0x2A05 JUMPI JUMPDEST POP POP DUP2 MLOAD SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2A18 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD PUSH1 0x20 SWAP2 DUP3 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP3 DUP2 PUSH1 0x1F DUP6 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP4 MLOAD PUSH2 0x2A50 DUP2 PUSH2 0x21AC JUMP JUMPDEST SWAP5 PUSH2 0x2A5E PUSH1 0x40 MLOAD SWAP7 DUP8 PUSH2 0x20DC JUMP JUMPDEST DUP2 DUP7 MSTORE DUP5 DUP1 DUP8 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP4 DUP5 GT PUSH2 0x323 JUMPI DUP5 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x2A8B JUMPI POP POP POP POP POP SWAP1 PUSH0 DUP1 PUSH2 0x29FE JUMP JUMPDEST DUP2 MLOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 MSTORE SWAP1 DUP5 ADD SWAP1 DUP5 ADD PUSH2 0x2A77 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 DUP5 DUP2 AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP5 DUP6 PUSH2 0x2ADC JUMPI JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 PUSH2 0x2B21 DUP8 PUSH32 0x1C2887FCB98F75E66BB9A36311F2D3D22FB204E6362106F30E9DF7EAF63131B5 SWAP6 PUSH1 0x20 SWAP6 DUP9 PUSH0 MSTORE PUSH1 0x7 DUP8 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP11 PUSH0 MSTORE DUP8 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH2 0x2B99 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2AD4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH2 0x2144 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x24F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH2 0x2144 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x24F1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP2 MSTORE SWAP3 PUSH2 0x2C2D SWAP3 PUSH0 SWAP3 DUP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2BF6 PUSH1 0x64 DUP9 PUSH2 0x20DC JUMP JUMPDEST AND SWAP5 MLOAD SWAP1 DUP3 DUP7 GAS CALL RETURNDATASIZE ISZERO PUSH2 0x2C91 JUMPI RETURNDATASIZE SWAP1 PUSH2 0x2C0F DUP3 PUSH2 0x2254 JUMP JUMPDEST SWAP2 PUSH2 0x2C1D PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x20DC JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMPDEST DUP4 PUSH2 0x2C99 JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x2C6E JUMPI JUMPDEST POP POP PUSH2 0x2C43 JUMPI POP JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 SWAP3 POP SWAP1 PUSH1 0x20 SWAP2 DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x2C89 SWAP2 ADD PUSH2 0x211D JUMP JUMPDEST ISZERO PUSH0 DUP1 PUSH2 0x2C3A JUMP JUMPDEST PUSH1 0x60 SWAP1 PUSH2 0x2C27 JUMP JUMPDEST SWAP1 PUSH2 0x2CD6 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x2CAE JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x2D1C JUMPI JUMPDEST PUSH2 0x2CE7 JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x2CDF JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH24 0x9606B3785FEB7919003F1A04823C3563027F2FDBCC858F33 0xE7 0xD2 CALLCODE PUSH28 0x80B35B64736F6C634300081B00330000000000000000000000000000 ","sourceMap":"3120:30085:19:-:0;;;;;;;;;;;;;-1:-1:-1;;3120:30085:19;;;;-1:-1:-1;;;;;3120:30085:19;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3120:30085:19;;;;;;971:4:20;1347:46:13;;923:14:14;;;409::21;;3120:30085:19;;;;;;;;1347:46:13;3120:30085:19;;;;;923:14:14;3120:30085:19;;;;;;;;;;;;;;;409:14:21;3120:30085:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3120:30085:19;;;;;;-1:-1:-1;3120:30085:19;;;;;-1:-1:-1;3120:30085:19"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":8176,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_18593":{"entryPoint":8154,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":9651,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_uint256_dyn_fromMemory":{"entryPoint":9230,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":8477,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":9199,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint256t_bool_fromMemory":{"entryPoint":8490,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":8232,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_uint256_bool":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"allocate_and_zero_memory_array_array_uint256_dyn":{"entryPoint":8644,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_uint256_dyn":{"entryPoint":8620,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":8788,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_uint256":{"entryPoint":9396,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256":{"entryPoint":9438,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256_18743":{"entryPoint":9409,"id":null,"parameterSlots":1,"returnSlots":1},"external_fun_MAX_PROTOCOL_SWAP_FEE_PERCENTAGE":{"entryPoint":8198,"id":null,"parameterSlots":0,"returnSlots":0},"finalize_allocation":{"entryPoint":8412,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_18595":{"entryPoint":8291,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_18728":{"entryPoint":8364,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_43115":{"entryPoint":8384,"id":null,"parameterSlots":1,"returnSlots":0},"fun_authenticateCaller":{"entryPoint":10270,"id":2462,"parameterSlots":0,"returnSlots":0},"fun_collectAggregateFees":{"entryPoint":8846,"id":4793,"parameterSlots":1,"returnSlots":0},"fun_computeAggregateFeePercentage":{"entryPoint":9457,"id":5440,"parameterSlots":2,"returnSlots":1},"fun_ensureCallerIsPoolCreator":{"entryPoint":9522,"id":5476,"parameterSlots":1,"returnSlots":0},"fun_ensureOnlyVault":{"entryPoint":10104,"id":6342,"parameterSlots":0,"returnSlots":0},"fun_ensureValidPrecision":{"entryPoint":10198,"id":6234,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":8519,"id":2480,"parameterSlots":1,"returnSlots":1},"fun_getAggregateFeePercentage":{"entryPoint":11061,"id":5410,"parameterSlots":1,"returnSlots":1},"fun_getAggregateFeePercentage_18729":{"entryPoint":11111,"id":5410,"parameterSlots":1,"returnSlots":1},"fun_getPoolCreator":{"entryPoint":9671,"id":5519,"parameterSlots":1,"returnSlots":1},"fun_getPoolTokensAndCount":{"entryPoint":10639,"id":5500,"parameterSlots":1,"returnSlots":2},"fun_safeTransfer":{"entryPoint":11161,"id":6703,"parameterSlots":3,"returnSlots":0},"fun_toUint64":{"entryPoint":9327,"id":7895,"parameterSlots":1,"returnSlots":1},"fun_verifyCallResultFromTarget":{"entryPoint":11417,"id":7155,"parameterSlots":3,"returnSlots":1},"fun_withdrawPoolCreatorFees":{"entryPoint":9921,"id":6137,"parameterSlots":2,"returnSlots":0},"fun_withdrawProtocolFees":{"entryPoint":10915,"id":6033,"parameterSlots":3,"returnSlots":0},"memory_array_index_access_contract_IERC20_dyn":{"entryPoint":8723,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"2420":[{"length":32,"start":8562}],"2503":[{"length":32,"start":3798},{"length":32,"start":4348},{"length":32,"start":10371}],"6304":[{"length":32,"start":595},{"length":32,"start":878},{"length":32,"start":1016},{"length":32,"start":1303},{"length":32,"start":1413},{"length":32,"start":2148},{"length":32,"start":2258},{"length":32,"start":3197},{"length":32,"start":3507},{"length":32,"start":5590},{"length":32,"start":6011},{"length":32,"start":6428},{"length":32,"start":6774},{"length":32,"start":7140},{"length":32,"start":9040},{"length":32,"start":9734},{"length":32,"start":10114},{"length":32,"start":10702}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f3560e01c9081630252aab514611fa6575080630874327f14611b935780630b8e059b14611b5b5780630ddd60c614611b3a5780631377c16c14611a1b5780632772d156146118385780632e1d388d146119f95780633af52712146118c157806352f125f01461189657806355fb76af146118795780635c15a0b41461183d5780635e32e4e81461183857806371447ea81461169357806371ecc8fb146114ef57806377ff76e71461125b5780637869ee181461123f5780637a2b97dc146111d4578063851c1bb3146111845780638a3c5c69146111205780638d928af8146110dd5780638df44c54146110555780638f4ab9ca146110345780639e95f3fd14610fa8578063a93df2a414610f43578063aaabadc514610e90578063abaa335614610ce7578063b53a70b214610c00578063c673bdaf14610bc3578063cf7b287f14610b5d578063f706144514610b28578063fa399f2a14610392578063fbfa77cf1461034f5763fd267f3914610187575f80fd5b34610323576040600319360112610323576101a0611fda565b602435906101ac61281e565b6706f05b59d3b200008211610327576101c4826127d6565b6101cd8161228e565b6101d68261246f565b916040516101e381612063565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600260205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169161027d81612b67565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e92602092610309575b50604051908152a2005b610312906120ac565b5f6102ff565b6040513d5f823e3d90fd5b5f80fd5b7f7e6eb7fb000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610323576020600319360112610323576103ab611fda565b6103b3612778565b6040517f8f4ab9ca0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201525f81602481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610318575f905f92610acb575b506001600160a01b0383165f52600260205267ffffffffffffffff60405f20541690600560205260405f2054905f928215159384610ac1575b84610ab1575b6104728761298f565b94905f5b8681106108225789896001600160a01b0382165f52600360205267ffffffffffffffff60405f205416905f92600660205260405f2054925f8415159485610818575b85610806575b6104c78461298f565b96905f5b8881106104d457005b6104de8189612213565b516104ec575b6001016104cb565b986001600160a01b036104ff8b84612213565b51169061050c8b8a612213565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561080257604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201528181606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156107f7579082916107e0575b506107b357505f99816105c8828b612213565b516040519081527fe505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e260206001600160a01b038c1692a383156107385761060e818a612213565b5186156107105761061e906124c1565b6001670de0b6b3a764000061065f8a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848c8783010401901515026124de565b928301040190151502916001600160a01b0389165f52600760205260405f20815f5260205260405f206106938482546124b4565b905561069f828b612213565b519081848103116106e3576001936106d9916001600160a01b038c165f52600860205260405f20905f5260205260405f20920382546124b4565b90555b90506104e4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001918561077d5761074a828b612213565b51906001600160a01b038a165f52600760205260405f20905f5260205261077660405f209182546124b4565b90556106dc565b610787828b612213565b51906001600160a01b038a165f52600860205260405f20905f5260205261077660405f209182546124b4565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6107e9906120ac565b6107f457808c6105b5565b80fd5b6040513d84823e3d90fd5b5080fd5b905061081281836124f1565b906104be565b82151595506104b8565b61082c8187612213565b5161083a575b600101610476565b6001600160a01b0361084c8284612213565b5116906108598188612213565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561032357604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201525f81606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561031857610aa2575b50818b7fae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f60206001600160a01b03610937868d612213565b51936040519485521692a38815610a27576109528188612213565b51851561071057610962906124c1565b6001670de0b6b3a76400006109a3897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848b8783010401901515026124de565b928301040190151502916001600160a01b038c165f52600760205260405f20815f5260205260405f206109d78482546124b4565b90556109e38289612213565b519081848103116106e357600193610a1d916001600160a01b038f165f52600860205260405f20905f5260205260405f20920382546124b4565b90555b9050610832565b60019184610a6c57610a398289612213565b51906001600160a01b038d165f52600760205260405f20905f52602052610a6560405f209182546124b4565b9055610a20565b610a768289612213565b51906001600160a01b038d165f52600860205260405f20905f52602052610a6560405f209182546124b4565b610aab906120ac565b8b6108ff565b50610abc83826124f1565b610469565b8115159450610463565b9150503d805f833e610add81836120dc565b8101906040818303126103235780519167ffffffffffffffff928381116103235781610b0a91840161240e565b92602083015190811161032357610b21920161240e565b908361042a565b3461032357604060031936011261032357610b5b610b44611fda565b610b4c611ff0565b90610b5681612532565b6126c1565b005b3461032357604060031936011261032357610b76611fda565b610b7e611ff0565b90610b8761281e565b610b908161298f565b915f5b838110610b9c57005b80610bbd6001600160a01b03610bb460019487612213565b51168785612aa3565b01610b93565b34610323576020600319360112610323576001600160a01b03610be4611fda565b165f526004602052602060ff60405f2054166040519015158152f35b3461032357606060031936011261032357610c19611fda565b610c21611ff0565b604435906001600160a01b039283831680840361032357604090610c4361281e565b60448251809781937fc9c1661b000000000000000000000000000000000000000000000000000000008352818716600484015260248301527f0000000000000000000000000000000000000000000000000000000000000000165afa801561031857610cb4575b610b5b9350612aa3565b6040843d604011610cdf575b81610ccd604093836120dc565b8101031261032357610b5b9350610caa565b3d9150610cc0565b3461032357604060031936011261032357610d00611fda565b60243590610d0c61281e565b6706f05b59d3b200008211610e6857610d24826127d6565b610d2d8161228e565b610d368261246f565b91604051610d4381612063565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600360205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f00000000000000000000000000000000000000000000000000000000000000001691610ddd81612b35565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd926020926103095750604051908152a2005b7fa7849e8e000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576040517faaabadc50000000000000000000000000000000000000000000000000000000081526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa908115610318576020925f92610f14575b5060405191168152f35b610f35919250833d8511610f3c575b610f2d81836120dc565b8101906123ef565b9083610f0a565b503d610f23565b34610323576020600319360112610323576004356706f05b59d3b200008111610e6857602081610f937f48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f6936127d6565b610f9b61281e565b80600155604051908152a1005b346103235760208060031936011261032357610fc2611fda565b90610fcc8261298f565b90610fd6826121c4565b925f946001600160a01b03809116955b848110610fff5760405180610ffb8882612028565b0390f35b600190875f526008845260405f20836110188388612213565b51165f52845260405f205461102d8289612213565b5201610fe6565b3461032357602060031936011261032357610b5b611050611fda565b61228e565b34610323576020806003193601126103235761106f611fda565b906110798261298f565b90611083826121c4565b925f946001600160a01b03809116955b8481106110a85760405180610ffb8882612028565b600190875f526007845260405f20836110c18388612213565b51165f52845260405f20546110d68289612213565b5201611093565b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610323576020600319360112610323576004356706f05b59d3b200008111610327576020816111707fbf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d936127d6565b61117861281e565b805f55604051908152a1005b34610323576020600319360112610323576004357fffffffff0000000000000000000000000000000000000000000000000000000081168103610323576111cc602091612147565b604051908152f35b34610323576020600319360112610323576001600160a01b036111f5611fda565b165f526003602052602060405f206040519061121082612063565b5467ffffffffffffffff811680835260ff604092831c1615159390920183905280519182526020820192909252f35b34610323575f6003193601126103235760205f54604051908152f35b3461032357606060031936011261032357611274611fda565b61127c611ff0565b90604435918215159081840361032357611294612778565b6001600160a01b0380931691825f52826020926004845260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055865f146114e457835f9687925b8915611469578483878c5f9b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611454967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb985b6113698461246f565b6040519061137682612063565b67ffffffffffffffff809116825260036113e6868401948686528b5f5260028852604084905f209551169480549651151560401b967fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000968768ff0000000000000000809a1692161717905561246f565b956040839051976113f689612063565b1687528087019586528a5f525260405f209451169184549351151560401b16921617179055604061143a905192839283909291602090604083019483521515910152565b0390a28d518c815290151560208201529081906040820190565b0390a289519586521693a38351928352820152f35b8483878c6001549b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611454967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb98611360565b835f549687926112e5565b346103235760208060031936011261032357611509611fda565b6115128161228e565b6001600160a01b039182821692835f526002825260405f20906040519161153883612063565b549167ffffffffffffffff9060ff8285169485835260401c1615908582159101525f549381611688575b5061156957005b6115728361246f565b90806040519261158184612063565b168252848201905f8252875f526002865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169261160081612b67565b843b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e936103095750604051908152a2005b905083141587611562565b3461032357602080600319360112610323576116ad611fda565b6116b68161228e565b6001600160a01b039182821692835f526003825260405f2090604051916116dc83612063565b549167ffffffffffffffff9060ff8285169485835260401c161590858215910152600154938161182d575b5061170e57005b6117178361246f565b90806040519261172684612063565b168252848201905f8252875f526003865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f000000000000000000000000000000000000000000000000000000000000000016926117a581612b35565b843b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd936103095750604051908152a2005b905083141587611707565b612006565b34610323576020600319360112610323576001600160a01b0361185e611fda565b165f526002602052602060405f206040519061121082612063565b34610323575f600319360112610323576020600154604051908152f35b3461032357602060031936011261032357610b5b6118b2611fda565b6118bb816125c7565b906126c1565b34610323576040600319360112610323576118da611fda565b602435906118e781612532565b670de0ad9b58f1600082116119d1576118ff8161228e565b6001600160a01b039182821692835f5260066020528160405f20557f0000000000000000000000000000000000000000000000000000000000000000169161194681612b35565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34926020926103095750604051908152a2005b7f0370da74000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576020604051670de0ad9b58f160008152f35b3461032357604060031936011261032357611a34611fda565b60243590611a4181612532565b670de0ad9b58f1600082116119d157611a598161228e565b6001600160a01b039182821692835f5260056020528160405f20557f00000000000000000000000000000000000000000000000000000000000000001691611aa081612b67565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577fb7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c92602092611b2b5750604051908152a2005b611b34906120ac565b846102ff565b346103235760406003193601126103235760206111cc6024356004356124f1565b34610323576020600319360112610323576001600160a01b03611b7c611fda565b165f526005602052602060405f2054604051908152f35b346103235760208060031936011261032357611bad611fda565b906001600160a01b036040517f85f2dbd40000000000000000000000000000000000000000000000000000000081528281600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156103185782915f91611f6c575b501692308414611f44571690815f526004815260ff60405f205416611f1857815f526004815260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556040517f5c15a0b4000000000000000000000000000000000000000000000000000000008152826004820152604081602481875afa908115610318575f905f92611ef4575b50611cb79061246f565b9060405190611cc582612063565b67ffffffffffffffff80931682528382019015158152845f52600284528260405f209251169180549151151560401b917fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000938468ff0000000000000000809516921617179055604051917f7a2b97dc0000000000000000000000000000000000000000000000000000000083528560048401526040836024818a5afa928315610318575f905f94611ec0575b50611d7b9061246f565b938060405195611d8a87612063565b1685528585019315158452865f526003865260405f209451169184549351151560401b169216171790556040517f0b8e059b0000000000000000000000000000000000000000000000000000000081528260048201528181602481875afa5f9181611e8e575b50938291602495611e7c575b50604051948580927f0252aab50000000000000000000000000000000000000000000000000000000082528660048301525afa5f9381611e4d575b50611e3e57005b6006915f525260405f20555f80f35b9093508181813d8311611e75575b611e6581836120dc565b8101031261032357519284611e37565b503d611e5b565b845f526005835260405f205585611dfc565b9150938282813d8311611eb9575b611ea681836120dc565b8101031261032357905190936024611df0565b503d611e9c565b611d7b9450611ee7915060403d604011611eed575b611edf81836120dc565b81019061212a565b93611d71565b503d611ed5565b611cb79250611f12915060403d604011611eed57611edf81836120dc565b91611cad565b507fdb771c80000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fb82fd5bf000000000000000000000000000000000000000000000000000000005f5260045ffd5b809250848092503d8311611f9f575b611f8581836120dc565b810103126103235751818116810361032357819085611c15565b503d611f7b565b34610323576020600319360112610323576020906001600160a01b03611fca611fda565b165f526006825260405f20548152f35b600435906001600160a01b038216820361032357565b602435906001600160a01b038216820361032357565b34610323575f6003193601126103235760206040516706f05b59d3b200008152f35b60209060206040818301928281528551809452019301915f5b82811061204f575050505090565b835185529381019392810192600101612041565b6040810190811067ffffffffffffffff82111761207f57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161207f57604052565b6060810190811067ffffffffffffffff82111761207f57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761207f57604052565b5190811515820361032357565b91908260409103126103235761214460208351930161211d565b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526121a6816120c0565b51902090565b67ffffffffffffffff811161207f5760051b60200190565b906121ce826121ac565b6121db60405191826120dc565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061220982946121ac565b0190602036910137565b80518210156122275760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b67ffffffffffffffff811161207f57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0905f601f6001600160a01b036040519383604460209684888201947ffa399f2a00000000000000000000000000000000000000000000000000000000865216602482015260248152612300816120c0565b604051988996879586937f48c894910000000000000000000000000000000000000000000000000000000085528b60048601525180918160248701528686015e85858286010152011681010301927f0000000000000000000000000000000000000000000000000000000000000000165af1801561031857612380575050565b3d805f843e61238f81846120dc565b82019181818403126103235780519067ffffffffffffffff821161032357019180601f84011215610323578251906123c682612254565b906123d460405192836120dc565b8282528383860101116103235781835f95018483015e010152565b9081602091031261032357516001600160a01b03811681036103235790565b9080601f8301121561032357815190602091612429816121ac565b9361243760405195866120dc565b81855260208086019260051b82010192831161032357602001905b828210612460575050505090565b81518152908301908301612452565b67ffffffffffffffff90818111612484571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b919082018092116106e357565b90670de0b6b3a7640000918281029281840414901517156106e357565b818102929181159184041417156106e357565b9061251e64174876e800928392612517670de0b6b3a764000091838303838510026124de565b04906124b4565b048181029181830414901517156106e35790565b6001600160a01b039081612545826125c7565b168015612586573303612556575050565b7ffbecdbf4000000000000000000000000000000000000000000000000000000005f52336004521660245260445ffd5b507f8bcbf353000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b51906001600160a01b038216820361032357565b604080517fe9ddeb260000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526060816024817f000000000000000000000000000000000000000000000000000000000000000087165afa9081156126b7575f9161263e575b5001511690565b90506060813d6060116126af575b81612659606093836120dc565b81010312610323578151906060820182811067ffffffffffffffff82111761207f576126a5918491825261268c816125b3565b845261269a602082016125b3565b6020850152016125b3565b828201525f612637565b3d915061264c565b82513d5f823e3d90fd5b906126cb8261298f565b92905f5b8481106126dd575050505050565b6001906001600160a01b03806126f38386612213565b5116818616805f5260086020818152604094855f20855f528252855f20549586612725575b50505050505050016126cf565b7f938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f993855f528352805f20865f5283525f81812055612764878d88612b99565b519586528a1694a45f808080808080612718565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036127aa57565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b64174876e8008082048181029181830414901517156106e357036127f657565b7f833fb3ce000000000000000000000000000000000000000000000000000000005f5260045ffd5b61284a7fffffffff000000000000000000000000000000000000000000000000000000005f3516612147565b6001600160a01b036040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156103185784925f9261296d575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610318575f92612937575b50501561290f57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d8311612966575b61294e81836120dc565b810103126103235761295f9061211d565b5f80612906565b503d612944565b606491925061298890843d8611610f3c57610f2d81836120dc565b91906128b5565b906001600160a01b0380604051937fca4f28030000000000000000000000000000000000000000000000000000000085521660048401525f83602481847f0000000000000000000000000000000000000000000000000000000000000000165afa928315610318575f93612a05575b5050815190565b909192503d805f833e612a1881836120dc565b810160209182818303126103235780519067ffffffffffffffff821161032357019281601f85011215610323578351612a50816121ac565b94612a5e60405196876120dc565b818652848087019260051b820101938411610323578401905b838210612a8b575050505050905f806129fe565b81518381168103610323578152908401908401612a77565b91906001600160a01b0380931690815f52600760205260405f209284811693845f5260205260405f20549485612adc575b505050505050565b82612b21877f1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b595602095885f526007875260405f208a5f5287525f6040812055612b99565b6040519687521694a45f8080808080612ad4565b6001600160a01b03165f52600360205261214467ffffffffffffffff60405f205416600660205260405f2054906124f1565b6001600160a01b03165f52600260205261214467ffffffffffffffff60405f205416600560205260405f2054906124f1565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082019081526001600160a01b03938416602483015260448083019590955293815292612c2d925f9283929190612bf66064886120dc565b1694519082865af13d15612c91573d90612c0f82612254565b91612c1d60405193846120dc565b82523d5f602084013e5b83612c99565b8051908115159182612c6e575b5050612c435750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8192509060209181010312610323576020612c89910161211d565b155f80612c3a565b606090612c27565b90612cd65750805115612cae57805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580612d1c575b612ce7575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15612cdf56fea2646970667358221220779606b3785feb7919003f1a04823c3563027f2fdbcc858f33e7d2f27b80b35b64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x252AAB5 EQ PUSH2 0x1FA6 JUMPI POP DUP1 PUSH4 0x874327F EQ PUSH2 0x1B93 JUMPI DUP1 PUSH4 0xB8E059B EQ PUSH2 0x1B5B JUMPI DUP1 PUSH4 0xDDD60C6 EQ PUSH2 0x1B3A JUMPI DUP1 PUSH4 0x1377C16C EQ PUSH2 0x1A1B JUMPI DUP1 PUSH4 0x2772D156 EQ PUSH2 0x1838 JUMPI DUP1 PUSH4 0x2E1D388D EQ PUSH2 0x19F9 JUMPI DUP1 PUSH4 0x3AF52712 EQ PUSH2 0x18C1 JUMPI DUP1 PUSH4 0x52F125F0 EQ PUSH2 0x1896 JUMPI DUP1 PUSH4 0x55FB76AF EQ PUSH2 0x1879 JUMPI DUP1 PUSH4 0x5C15A0B4 EQ PUSH2 0x183D JUMPI DUP1 PUSH4 0x5E32E4E8 EQ PUSH2 0x1838 JUMPI DUP1 PUSH4 0x71447EA8 EQ PUSH2 0x1693 JUMPI DUP1 PUSH4 0x71ECC8FB EQ PUSH2 0x14EF JUMPI DUP1 PUSH4 0x77FF76E7 EQ PUSH2 0x125B JUMPI DUP1 PUSH4 0x7869EE18 EQ PUSH2 0x123F JUMPI DUP1 PUSH4 0x7A2B97DC EQ PUSH2 0x11D4 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x1184 JUMPI DUP1 PUSH4 0x8A3C5C69 EQ PUSH2 0x1120 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x10DD JUMPI DUP1 PUSH4 0x8DF44C54 EQ PUSH2 0x1055 JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0x1034 JUMPI DUP1 PUSH4 0x9E95F3FD EQ PUSH2 0xFA8 JUMPI DUP1 PUSH4 0xA93DF2A4 EQ PUSH2 0xF43 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xE90 JUMPI DUP1 PUSH4 0xABAA3356 EQ PUSH2 0xCE7 JUMPI DUP1 PUSH4 0xB53A70B2 EQ PUSH2 0xC00 JUMPI DUP1 PUSH4 0xC673BDAF EQ PUSH2 0xBC3 JUMPI DUP1 PUSH4 0xCF7B287F EQ PUSH2 0xB5D JUMPI DUP1 PUSH4 0xF7061445 EQ PUSH2 0xB28 JUMPI DUP1 PUSH4 0xFA399F2A EQ PUSH2 0x392 JUMPI DUP1 PUSH4 0xFBFA77CF EQ PUSH2 0x34F JUMPI PUSH4 0xFD267F39 EQ PUSH2 0x187 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A0 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1AC PUSH2 0x281E JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0x327 JUMPI PUSH2 0x1C4 DUP3 PUSH2 0x27D6 JUMP JUMPDEST PUSH2 0x1CD DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH2 0x1D6 DUP3 PUSH2 0x246F JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0x1E3 DUP2 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x27D DUP2 PUSH2 0x2B67 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x312 SWAP1 PUSH2 0x20AC JUMP JUMPDEST PUSH0 PUSH2 0x2FF JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x3AB PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x3B3 PUSH2 0x2778 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0xACB JUMPI JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH0 SWAP3 DUP3 ISZERO ISZERO SWAP4 DUP5 PUSH2 0xAC1 JUMPI JUMPDEST DUP5 PUSH2 0xAB1 JUMPI JUMPDEST PUSH2 0x472 DUP8 PUSH2 0x298F JUMP JUMPDEST SWAP5 SWAP1 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x822 JUMPI DUP10 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH0 SWAP3 PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 PUSH0 DUP5 ISZERO ISZERO SWAP5 DUP6 PUSH2 0x818 JUMPI JUMPDEST DUP6 PUSH2 0x806 JUMPI JUMPDEST PUSH2 0x4C7 DUP5 PUSH2 0x298F JUMP JUMPDEST SWAP7 SWAP1 PUSH0 JUMPDEST DUP9 DUP2 LT PUSH2 0x4D4 JUMPI STOP JUMPDEST PUSH2 0x4DE DUP2 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH2 0x4EC JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x4CB JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x4FF DUP12 DUP5 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x50C DUP12 DUP11 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x7F7 JUMPI SWAP1 DUP3 SWAP2 PUSH2 0x7E0 JUMPI JUMPDEST POP PUSH2 0x7B3 JUMPI POP PUSH0 SWAP10 DUP2 PUSH2 0x5C8 DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xE505E41B0D437B47350A9990142CCF38ACB11FFA0E5AF8F973B9E172F3D5D5E2 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP3 LOG3 DUP4 ISZERO PUSH2 0x738 JUMPI PUSH2 0x60E DUP2 DUP11 PUSH2 0x2213 JUMP JUMPDEST MLOAD DUP7 ISZERO PUSH2 0x710 JUMPI PUSH2 0x61E SWAP1 PUSH2 0x24C1 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x65F DUP11 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP13 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x24DE JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x693 DUP5 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x69F DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0x6D9 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x4E4 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 SWAP2 DUP6 PUSH2 0x77D JUMPI PUSH2 0x74A DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x6DC JUMP JUMPDEST PUSH2 0x787 DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST DUP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x24 SWAP3 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH2 0x7E9 SWAP1 PUSH2 0x20AC JUMP JUMPDEST PUSH2 0x7F4 JUMPI DUP1 DUP13 PUSH2 0x5B5 JUMP JUMPDEST DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST SWAP1 POP PUSH2 0x812 DUP2 DUP4 PUSH2 0x24F1 JUMP JUMPDEST SWAP1 PUSH2 0x4BE JUMP JUMPDEST DUP3 ISZERO ISZERO SWAP6 POP PUSH2 0x4B8 JUMP JUMPDEST PUSH2 0x82C DUP2 DUP8 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH2 0x83A JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x476 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x84C DUP3 DUP5 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x859 DUP2 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xAA2 JUMPI JUMPDEST POP DUP2 DUP12 PUSH32 0xAE7EBAD9FC3D1D17965F063FA520D393595E2EF6C8E22AE8413B60900444E19F PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x937 DUP7 DUP14 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 DUP9 ISZERO PUSH2 0xA27 JUMPI PUSH2 0x952 DUP2 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD DUP6 ISZERO PUSH2 0x710 JUMPI PUSH2 0x962 SWAP1 PUSH2 0x24C1 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x9A3 DUP10 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP12 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x24DE JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x9D7 DUP5 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x9E3 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0xA1D SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x832 JUMP JUMPDEST PUSH1 0x1 SWAP2 DUP5 PUSH2 0xA6C JUMPI PUSH2 0xA39 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0xA20 JUMP JUMPDEST PUSH2 0xA76 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST PUSH2 0xAAB SWAP1 PUSH2 0x20AC JUMP JUMPDEST DUP12 PUSH2 0x8FF JUMP JUMPDEST POP PUSH2 0xABC DUP4 DUP3 PUSH2 0x24F1 JUMP JUMPDEST PUSH2 0x469 JUMP JUMPDEST DUP2 ISZERO ISZERO SWAP5 POP PUSH2 0x463 JUMP JUMPDEST SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xADD DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x40 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x323 JUMPI DUP2 PUSH2 0xB0A SWAP2 DUP5 ADD PUSH2 0x240E JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x323 JUMPI PUSH2 0xB21 SWAP3 ADD PUSH2 0x240E JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x42A JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0xB44 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xB4C PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH2 0xB56 DUP2 PUSH2 0x2532 JUMP JUMPDEST PUSH2 0x26C1 JUMP JUMPDEST STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB76 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xB7E PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH2 0xB87 PUSH2 0x281E JUMP JUMPDEST PUSH2 0xB90 DUP2 PUSH2 0x298F JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0xB9C JUMPI STOP JUMPDEST DUP1 PUSH2 0xBBD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBB4 PUSH1 0x1 SWAP5 DUP8 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND DUP8 DUP6 PUSH2 0x2AA3 JUMP JUMPDEST ADD PUSH2 0xB93 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBE4 PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xC19 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xC21 PUSH2 0x1FF0 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP4 AND DUP1 DUP5 SUB PUSH2 0x323 JUMPI PUSH1 0x40 SWAP1 PUSH2 0xC43 PUSH2 0x281E JUMP JUMPDEST PUSH1 0x44 DUP3 MLOAD DUP1 SWAP8 DUP2 SWAP4 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP2 DUP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xCB4 JUMPI JUMPDEST PUSH2 0xB5B SWAP4 POP PUSH2 0x2AA3 JUMP JUMPDEST PUSH1 0x40 DUP5 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0xCDF JUMPI JUMPDEST DUP2 PUSH2 0xCCD PUSH1 0x40 SWAP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0xB5B SWAP4 POP PUSH2 0xCAA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xCC0 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xD00 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xD0C PUSH2 0x281E JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0xE68 JUMPI PUSH2 0xD24 DUP3 PUSH2 0x27D6 JUMP JUMPDEST PUSH2 0xD2D DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH2 0xD36 DUP3 PUSH2 0x246F JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0xD43 DUP2 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0xDDD DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0xA7849E8E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0xF14 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xF35 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0xF3C JUMPI JUMPDEST PUSH2 0xF2D DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x23EF JUMP JUMPDEST SWAP1 DUP4 PUSH2 0xF0A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xF23 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0xE68 JUMPI PUSH1 0x20 DUP2 PUSH2 0xF93 PUSH32 0x48C5C3CCEC54C4E0EA08D83D838FA9BB725EB0B52C591CB00BD6E63BCA8C44F6 SWAP4 PUSH2 0x27D6 JUMP JUMPDEST PUSH2 0xF9B PUSH2 0x281E JUMP JUMPDEST DUP1 PUSH1 0x1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xFC2 PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH2 0xFCC DUP3 PUSH2 0x298F JUMP JUMPDEST SWAP1 PUSH2 0xFD6 DUP3 PUSH2 0x21C4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0xFFF JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xFFB DUP9 DUP3 PUSH2 0x2028 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x8 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x1018 DUP4 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x102D DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MSTORE ADD PUSH2 0xFE6 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x1050 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x228E JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x106F PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH2 0x1079 DUP3 PUSH2 0x298F JUMP JUMPDEST SWAP1 PUSH2 0x1083 DUP3 PUSH2 0x21C4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0x10A8 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xFFB DUP9 DUP3 PUSH2 0x2028 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x7 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x10C1 DUP4 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x10D6 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MSTORE ADD PUSH2 0x1093 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0x327 JUMPI PUSH1 0x20 DUP2 PUSH2 0x1170 PUSH32 0xBF5AC0FC89BBF8819BE79F280146B65EA2AF2A9705CD9CFE0C9D93F6E87F307D SWAP4 PUSH2 0x27D6 JUMP JUMPDEST PUSH2 0x1178 PUSH2 0x281E JUMP JUMPDEST DUP1 PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI PUSH2 0x11CC PUSH1 0x20 SWAP2 PUSH2 0x2147 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x11F5 PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1210 DUP3 PUSH2 0x2063 JUMP JUMPDEST SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP1 DUP4 MSTORE PUSH1 0xFF PUSH1 0x40 SWAP3 DUP4 SHR AND ISZERO ISZERO SWAP4 SWAP1 SWAP3 ADD DUP4 SWAP1 MSTORE DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH0 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1274 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x127C PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 ISZERO ISZERO SWAP1 DUP2 DUP5 SUB PUSH2 0x323 JUMPI PUSH2 0x1294 PUSH2 0x2778 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP2 DUP3 PUSH0 MSTORE DUP3 PUSH1 0x20 SWAP3 PUSH1 0x4 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE DUP7 PUSH0 EQ PUSH2 0x14E4 JUMPI DUP4 PUSH0 SWAP7 DUP8 SWAP3 JUMPDEST DUP10 ISZERO PUSH2 0x1469 JUMPI DUP5 DUP4 DUP8 DUP13 PUSH0 SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1454 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 JUMPDEST PUSH2 0x1369 DUP5 PUSH2 0x246F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1376 DUP3 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP3 MSTORE PUSH1 0x3 PUSH2 0x13E6 DUP7 DUP5 ADD SWAP5 DUP7 DUP7 MSTORE DUP12 PUSH0 MSTORE PUSH1 0x2 DUP9 MSTORE PUSH1 0x40 DUP5 SWAP1 PUSH0 KECCAK256 SWAP6 MLOAD AND SWAP5 DUP1 SLOAD SWAP7 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP7 DUP8 PUSH9 0xFF0000000000000000 DUP1 SWAP11 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH2 0x246F JUMP JUMPDEST SWAP6 PUSH1 0x40 DUP4 SWAP1 MLOAD SWAP8 PUSH2 0x13F6 DUP10 PUSH2 0x2063 JUMP JUMPDEST AND DUP8 MSTORE DUP1 DUP8 ADD SWAP6 DUP7 MSTORE DUP11 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 PUSH2 0x143A SWAP1 MLOAD SWAP3 DUP4 SWAP3 DUP4 SWAP1 SWAP3 SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x40 DUP4 ADD SWAP5 DUP4 MSTORE ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 DUP14 MLOAD DUP13 DUP2 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x40 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 DUP10 MLOAD SWAP6 DUP7 MSTORE AND SWAP4 LOG3 DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE RETURN JUMPDEST DUP5 DUP4 DUP8 DUP13 PUSH1 0x1 SLOAD SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1454 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 PUSH2 0x1360 JUMP JUMPDEST DUP4 PUSH0 SLOAD SWAP7 DUP8 SWAP3 PUSH2 0x12E5 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1509 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x1512 DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1538 DUP4 PUSH2 0x2063 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH0 SLOAD SWAP4 DUP2 PUSH2 0x1688 JUMPI JUMPDEST POP PUSH2 0x1569 JUMPI STOP JUMPDEST PUSH2 0x1572 DUP4 PUSH2 0x246F JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1581 DUP5 PUSH2 0x2063 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x2 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x1600 DUP2 PUSH2 0x2B67 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1562 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x16AD PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x16B6 DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x16DC DUP4 PUSH2 0x2063 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH1 0x1 SLOAD SWAP4 DUP2 PUSH2 0x182D JUMPI JUMPDEST POP PUSH2 0x170E JUMPI STOP JUMPDEST PUSH2 0x1717 DUP4 PUSH2 0x246F JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1726 DUP5 PUSH2 0x2063 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x17A5 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1707 JUMP JUMPDEST PUSH2 0x2006 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x185E PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1210 DUP3 PUSH2 0x2063 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x18B2 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x18BB DUP2 PUSH2 0x25C7 JUMP JUMPDEST SWAP1 PUSH2 0x26C1 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x18DA PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x18E7 DUP2 PUSH2 0x2532 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x19D1 JUMPI PUSH2 0x18FF DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1946 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x47F70DDBC624C299CEF7841AAEA0A86B677C800203E953104E958C9EC9BDAB34 SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0x370DA7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0xDE0AD9B58F16000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A34 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1A41 DUP2 PUSH2 0x2532 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x19D1 JUMPI PUSH2 0x1A59 DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1AA0 DUP2 PUSH2 0x2B67 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xB7CF36369623C01ED7B2EAFC4025224E924A2836D5FB49428A0F65417586BF5C SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x1B2B JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x1B34 SWAP1 PUSH2 0x20AC JUMP JUMPDEST DUP5 PUSH2 0x2FF JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x11CC PUSH1 0x24 CALLDATALOAD PUSH1 0x4 CALLDATALOAD PUSH2 0x24F1 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1B7C PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1BAD PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0x1F6C JUMPI JUMPDEST POP AND SWAP3 ADDRESS DUP5 EQ PUSH2 0x1F44 JUMPI AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH2 0x1F18 JUMPI DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x5C15A0B400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x40 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0x1EF4 JUMPI JUMPDEST POP PUSH2 0x1CB7 SWAP1 PUSH2 0x246F JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1CC5 DUP3 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP4 AND DUP3 MSTORE DUP4 DUP3 ADD SWAP1 ISZERO ISZERO DUP2 MSTORE DUP5 PUSH0 MSTORE PUSH1 0x2 DUP5 MSTORE DUP3 PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND SWAP2 DUP1 SLOAD SWAP2 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP4 DUP5 PUSH9 0xFF0000000000000000 DUP1 SWAP6 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP2 PUSH32 0x7A2B97DC00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP6 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 DUP4 PUSH1 0x24 DUP2 DUP11 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP5 PUSH2 0x1EC0 JUMPI JUMPDEST POP PUSH2 0x1D7B SWAP1 PUSH2 0x246F JUMP JUMPDEST SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x1D8A DUP8 PUSH2 0x2063 JUMP JUMPDEST AND DUP6 MSTORE DUP6 DUP6 ADD SWAP4 ISZERO ISZERO DUP5 MSTORE DUP7 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xB8E059B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL PUSH0 SWAP2 DUP2 PUSH2 0x1E8E JUMPI JUMPDEST POP SWAP4 DUP3 SWAP2 PUSH1 0x24 SWAP6 PUSH2 0x1E7C JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x252AAB500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL PUSH0 SWAP4 DUP2 PUSH2 0x1E4D JUMPI JUMPDEST POP PUSH2 0x1E3E JUMPI STOP JUMPDEST PUSH1 0x6 SWAP2 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP1 SWAP4 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1E75 JUMPI JUMPDEST PUSH2 0x1E65 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD SWAP3 DUP5 PUSH2 0x1E37 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E5B JUMP JUMPDEST DUP5 PUSH0 MSTORE PUSH1 0x5 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE DUP6 PUSH2 0x1DFC JUMP JUMPDEST SWAP2 POP SWAP4 DUP3 DUP3 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1EB9 JUMPI JUMPDEST PUSH2 0x1EA6 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI SWAP1 MLOAD SWAP1 SWAP4 PUSH1 0x24 PUSH2 0x1DF0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E9C JUMP JUMPDEST PUSH2 0x1D7B SWAP5 POP PUSH2 0x1EE7 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1EED JUMPI JUMPDEST PUSH2 0x1EDF DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x212A JUMP JUMPDEST SWAP4 PUSH2 0x1D71 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1ED5 JUMP JUMPDEST PUSH2 0x1CB7 SWAP3 POP PUSH2 0x1F12 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1EED JUMPI PUSH2 0x1EDF DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST SWAP2 PUSH2 0x1CAD JUMP JUMPDEST POP PUSH32 0xDB771C8000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xB82FD5BF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 SWAP3 POP DUP5 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x1F9F JUMPI JUMPDEST PUSH2 0x1F85 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 SWAP1 DUP6 PUSH2 0x1C15 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1F7B JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1FCA PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x6 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x6F05B59D3B20000 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x204F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2041 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x323 JUMPI PUSH2 0x2144 PUSH1 0x20 DUP4 MLOAD SWAP4 ADD PUSH2 0x211D JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x21A6 DUP2 PUSH2 0x20C0 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x21CE DUP3 PUSH2 0x21AC JUMP JUMPDEST PUSH2 0x21DB PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x20DC JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x2209 DUP3 SWAP5 PUSH2 0x21AC JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x2227 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 PUSH0 PUSH1 0x1F PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP4 DUP4 PUSH1 0x44 PUSH1 0x20 SWAP7 DUP5 DUP9 DUP3 ADD SWAP5 PUSH32 0xFA399F2A00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x2300 DUP2 PUSH2 0x20C0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP12 PUSH1 0x4 DUP7 ADD MSTORE MLOAD DUP1 SWAP2 DUP2 PUSH1 0x24 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY DUP6 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0x2380 JUMPI POP POP JUMP JUMPDEST RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x238F DUP2 DUP5 PUSH2 0x20DC JUMP JUMPDEST DUP3 ADD SWAP2 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP3 MLOAD SWAP1 PUSH2 0x23C6 DUP3 PUSH2 0x2254 JUMP JUMPDEST SWAP1 PUSH2 0x23D4 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP3 DUP3 MSTORE DUP4 DUP4 DUP7 ADD ADD GT PUSH2 0x323 JUMPI DUP2 DUP4 PUSH0 SWAP6 ADD DUP5 DUP4 ADD MCOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x323 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x2429 DUP2 PUSH2 0x21AC JUMP JUMPDEST SWAP4 PUSH2 0x2437 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x20DC JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x323 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x2460 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x2452 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x2484 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x251E PUSH5 0x174876E800 SWAP3 DUP4 SWAP3 PUSH2 0x2517 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP4 DUP4 SUB DUP4 DUP6 LT MUL PUSH2 0x24DE JUMP JUMPDEST DIV SWAP1 PUSH2 0x24B4 JUMP JUMPDEST DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH2 0x2545 DUP3 PUSH2 0x25C7 JUMP JUMPDEST AND DUP1 ISZERO PUSH2 0x2586 JUMPI CALLER SUB PUSH2 0x2556 JUMPI POP POP JUMP JUMPDEST PUSH32 0xFBECDBF400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP PUSH32 0x8BCBF35300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x60 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 DUP8 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x26B7 JUMPI PUSH0 SWAP2 PUSH2 0x263E JUMPI JUMPDEST POP ADD MLOAD AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x26AF JUMPI JUMPDEST DUP2 PUSH2 0x2659 PUSH1 0x60 SWAP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x60 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH2 0x26A5 SWAP2 DUP5 SWAP2 DUP3 MSTORE PUSH2 0x268C DUP2 PUSH2 0x25B3 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x269A PUSH1 0x20 DUP3 ADD PUSH2 0x25B3 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE ADD PUSH2 0x25B3 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE PUSH0 PUSH2 0x2637 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x264C JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH2 0x26CB DUP3 PUSH2 0x298F JUMP JUMPDEST SWAP3 SWAP1 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x26DD JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x26F3 DUP4 DUP7 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND DUP2 DUP7 AND DUP1 PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP5 DUP6 PUSH0 KECCAK256 DUP6 PUSH0 MSTORE DUP3 MSTORE DUP6 PUSH0 KECCAK256 SLOAD SWAP6 DUP7 PUSH2 0x2725 JUMPI JUMPDEST POP POP POP POP POP POP POP ADD PUSH2 0x26CF JUMP JUMPDEST PUSH32 0x938F3A3A03EE425CCC0F8010B0468938CBAFD3750FA43BBDF09C6F75E97E51F9 SWAP4 DUP6 PUSH0 MSTORE DUP4 MSTORE DUP1 PUSH0 KECCAK256 DUP7 PUSH0 MSTORE DUP4 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE PUSH2 0x2764 DUP8 DUP14 DUP9 PUSH2 0x2B99 JUMP JUMPDEST MLOAD SWAP6 DUP7 MSTORE DUP11 AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2718 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x27AA JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SUB PUSH2 0x27F6 JUMPI JUMP JUMPDEST PUSH32 0x833FB3CE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x284A PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x2147 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x296D JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP3 PUSH2 0x2937 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x290F JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2966 JUMPI JUMPDEST PUSH2 0x294E DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0x295F SWAP1 PUSH2 0x211D JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x2906 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2944 JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x2988 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xF3C JUMPI PUSH2 0xF2D DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x28B5 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP4 PUSH2 0x2A05 JUMPI JUMPDEST POP POP DUP2 MLOAD SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2A18 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD PUSH1 0x20 SWAP2 DUP3 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP3 DUP2 PUSH1 0x1F DUP6 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP4 MLOAD PUSH2 0x2A50 DUP2 PUSH2 0x21AC JUMP JUMPDEST SWAP5 PUSH2 0x2A5E PUSH1 0x40 MLOAD SWAP7 DUP8 PUSH2 0x20DC JUMP JUMPDEST DUP2 DUP7 MSTORE DUP5 DUP1 DUP8 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP4 DUP5 GT PUSH2 0x323 JUMPI DUP5 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x2A8B JUMPI POP POP POP POP POP SWAP1 PUSH0 DUP1 PUSH2 0x29FE JUMP JUMPDEST DUP2 MLOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 MSTORE SWAP1 DUP5 ADD SWAP1 DUP5 ADD PUSH2 0x2A77 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 DUP5 DUP2 AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP5 DUP6 PUSH2 0x2ADC JUMPI JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 PUSH2 0x2B21 DUP8 PUSH32 0x1C2887FCB98F75E66BB9A36311F2D3D22FB204E6362106F30E9DF7EAF63131B5 SWAP6 PUSH1 0x20 SWAP6 DUP9 PUSH0 MSTORE PUSH1 0x7 DUP8 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP11 PUSH0 MSTORE DUP8 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH2 0x2B99 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2AD4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH2 0x2144 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x24F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH2 0x2144 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x24F1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP2 MSTORE SWAP3 PUSH2 0x2C2D SWAP3 PUSH0 SWAP3 DUP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2BF6 PUSH1 0x64 DUP9 PUSH2 0x20DC JUMP JUMPDEST AND SWAP5 MLOAD SWAP1 DUP3 DUP7 GAS CALL RETURNDATASIZE ISZERO PUSH2 0x2C91 JUMPI RETURNDATASIZE SWAP1 PUSH2 0x2C0F DUP3 PUSH2 0x2254 JUMP JUMPDEST SWAP2 PUSH2 0x2C1D PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x20DC JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMPDEST DUP4 PUSH2 0x2C99 JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x2C6E JUMPI JUMPDEST POP POP PUSH2 0x2C43 JUMPI POP JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 SWAP3 POP SWAP1 PUSH1 0x20 SWAP2 DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x2C89 SWAP2 ADD PUSH2 0x211D JUMP JUMPDEST ISZERO PUSH0 DUP1 PUSH2 0x2C3A JUMP JUMPDEST PUSH1 0x60 SWAP1 PUSH2 0x2C27 JUMP JUMPDEST SWAP1 PUSH2 0x2CD6 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x2CAE JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x2D1C JUMPI JUMPDEST PUSH2 0x2CE7 JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x2CDF JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH24 0x9606B3785FEB7919003F1A04823C3563027F2FDBCC858F33 0xE7 0xD2 CALLCODE PUSH28 0x80B35B64736F6C634300081B00330000000000000000000000000000 ","sourceMap":"3120:30085:19:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1473:26:20;3120:30085:19;1473:26:20;;;3120:30085:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30085:19;;;;;;;:::i;:::-;;;1525:73:13;;;:::i;:::-;4720:5:19;7248:55;;7244:127;;7402:20;;;:::i;:::-;8176:4;;;:::i;:::-;31036:39;;;:::i;:::-;3120:30085;;;;;;:::i;:::-;;;;;;;30993:129;;;3120:30085;26060:4;3120:30085;;-1:-1:-1;;;;;3120:30085:19;;;;;;;;30953:31;30993:129;3120:30085;;;;;;;;;;;;;;;;;;;;;;;;31217:6;3120:30085;31263:54;;;;:::i;:::-;31217:101;;;;;3120:30085;;;31217:101;;-1:-1:-1;;;;;3120:30085:19;;;;;31217:101;;3120:30085;;;;;;-1:-1:-1;;3120:30085:19;;;;;;-1:-1:-1;;31217:101:19;;;;;;;31334:68;31217:101;30993:129;31217:101;;;3120:30085;;;;;;;31334:68;3120:30085;31217:101;;;;:::i;:::-;3120:30085;31217:101;;;3120:30085;;;;;;;;;31217:101;3120:30085;;;7244:127;7326:34;3120:30085;7326:34;3120:30085;;7326:34;3120:30085;;;;;-1:-1:-1;;3120:30085:19;;;;;;;;-1:-1:-1;;;;;8461:6:19;3120:30085;;;;;;;;;-1:-1:-1;;3120:30085:19;;;;;;;:::i;:::-;436:67:21;;:::i;:::-;3120:30085:19;;;9135:33;;-1:-1:-1;;;;;3120:30085:19;;;9135:33;;3120:30085;;9135:6;3120:30085;9135:6;;-1:-1:-1;;;;;9135:6:19;3120:30085;9135:33;;;;;;;3120:30085;;;9135:33;;;3120:30085;;-1:-1:-1;;;;;3120:30085:19;;;;;;;;;;;;;;11126:30;3120:30085;;;;;;11225:30;3120:30085;11289:28;;;;:57;;;;3120:30085;11356:199;;;3120:30085;11615:28;;;:::i;:::-;11658:13;;3120:30085;11673:13;;;;;;10881:20;;-1:-1:-1;;;;;3120:30085:19;;;;10982:32;3120:30085;;;;;;;;11080:134;3120:30085;;11177:31;3120:30085;;;;;;11225:30;3120:30085;11289:28;;;:57;;;;11653:1939;11356:199;;;11653:1939;11615:28;;;:::i;:::-;11658:13;;3120:30085;11673:13;;;;;;3120:30085;11688:3;11711:13;;;;:::i;:::-;3120:30085;11707:1875;;11688:3;3120:30085;;11658:13;;11707:1875;11763:13;-1:-1:-1;;;;;11763:13:19;;;;:::i;:::-;3120:30085;;11831:13;;;;;:::i;:::-;3120:30085;-1:-1:-1;;;;;9135:6:19;3120:30085;11795:50;;;;3120:30085;;11795:50;3120:30085;11795:50;;;3120:30085;11795:50;;3120:30085;11824:4;3120:30085;;;;;;;;9135:6;;3120:30085;9135:6;;-1:-1:-1;;;;;9135:6:19;3120:30085;11795:50;;;;;;;;;;;11707:1875;3120:30085;;;12020:240;3120:30085;12227:13;;;;;;:::i;:::-;3120:30085;;;;;;12188:53;3120:30085;-1:-1:-1;;;;;3120:30085:19;;12188:53;;12278:1290;;;;12884:13;;;;:::i;:::-;3120:30085;2004:6:15;;2000:58;;2153:5;;;:::i;:::-;3120:30085:19;465:4:15;1068:5;2560:120;;;;;;;;;;;;;;1068:5;:::i;:::-;1186:122;;;;;;;;;3120:30085:19;-1:-1:-1;;;;;3120:30085:19;;;;13044:19;3120:30085;;;;;;;;;;;;;13044:51;3120:30085;;;13044:51;:::i;:::-;3120:30085;;13156:13;;;;:::i;:::-;3120:30085;;;;;;;;;;;13117:70;3120:30085;-1:-1:-1;;;;;3120:30085:19;;;;13117:22;3120:30085;;;;;;;;;;;;;;;;;13117:70;:::i;:::-;3120:30085;;12278:1290;11707:1875;;;;3120:30085;;;;;;;;;;2000:58:15;2033:14;3120:30085:19;2033:14:15;3120:30085:19;;2033:14:15;12278:1290:19;3120:30085;;11289:28;;;13407:13;;;;:::i;:::-;3120:30085;;-1:-1:-1;;;;;3120:30085:19;;;;13371:19;3120:30085;;;;;;;;;;13371:49;3120:30085;;;;;;13371:49;:::i;:::-;3120:30085;;12278:1290;;13310:240;13514:13;;;;:::i;:::-;3120:30085;;-1:-1:-1;;;;;3120:30085:19;;;;13475:22;3120:30085;;;;;;;;;;13475:52;3120:30085;;;;;;13475:52;:::i;3120:30085::-;;;;;;;;;;11795:50;;;;:::i;:::-;3120:30085;;11795:50;;;;3120:30085;;;11795:50;3120:30085;;;;;;;;;11795:50;3120:30085;;;11356:199;11465:79;;;;;;:::i;:::-;11356:199;;;11289:57;11321:25;;;;-1:-1:-1;11289:57:19;;11688:3;11711:13;;;;:::i;:::-;3120:30085;11707:1875;;11688:3;3120:30085;;11658:13;;11707:1875;-1:-1:-1;;;;;11763:13:19;;;;:::i;:::-;3120:30085;;11831:13;;;;;:::i;:::-;3120:30085;-1:-1:-1;;;;;9135:6:19;3120:30085;11795:50;;;;3120:30085;;11795:50;3120:30085;11795:50;;;3120:30085;11795:50;;3120:30085;11824:4;3120:30085;;;;;;;;;9135:6;3120:30085;9135:6;;-1:-1:-1;;;;;9135:6:19;3120:30085;11795:50;;;;;;;;11707:1875;12122:13;;;12084:52;3120:30085;-1:-1:-1;;;;;12122:13:19;;;;:::i;:::-;3120:30085;;;;;;;;12084:52;;12278:1290;;;;12884:13;;;;:::i;:::-;3120:30085;2004:6:15;;2000:58;;2153:5;;;:::i;:::-;3120:30085:19;465:4:15;1068:5;2560:120;;;;;;;;;;;;;;1068:5;:::i;:::-;1186:122;;;;;;;;;3120:30085:19;-1:-1:-1;;;;;3120:30085:19;;;;13044:19;3120:30085;;;;;;;;;;;;;13044:51;3120:30085;;;13044:51;:::i;:::-;3120:30085;;13156:13;;;;:::i;:::-;3120:30085;;;;;;;;;;;13117:70;3120:30085;-1:-1:-1;;;;;3120:30085:19;;;;13117:22;3120:30085;;;;;;;;;;;;;;;;;13117:70;:::i;:::-;3120:30085;;12278:1290;11707:1875;;;;12278:1290;3120:30085;;11289:28;;;13407:13;;;;:::i;:::-;3120:30085;;-1:-1:-1;;;;;3120:30085:19;;;;13371:19;3120:30085;;;;;;;;;;13371:49;3120:30085;;;;;;13371:49;:::i;:::-;3120:30085;;12278:1290;;13310:240;13514:13;;;;:::i;:::-;3120:30085;;-1:-1:-1;;;;;3120:30085:19;;;;13475:22;3120:30085;;;;;;;;;;13475:52;3120:30085;;;;;;13475:52;:::i;11795:50::-;;;;:::i;:::-;;;;11356:199;11465:79;;;;;:::i;:::-;11356:199;;11289:57;11321:25;;;;-1:-1:-1;11289:57:19;;9135:33;;;;;;3120:30085;9135:33;;;;;;:::i;:::-;;;3120:30085;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;9135:33;;;;3120:30085;;;;;-1:-1:-1;;3120:30085:19;;;;;29584:9;3120:30085;;:::i;:::-;;;:::i;:::-;7088:4;;;;:::i;:::-;29584:9;:::i;:::-;3120:30085;;;;;;-1:-1:-1;;3120:30085:19;;;;;;;:::i;:::-;;;:::i;:::-;1525:73:13;;;:::i;:::-;28417:28:19;;;:::i;:::-;28461:13;3120:30085;28476:13;;;;;;3120:30085;28491:3;28525:13;28592:5;-1:-1:-1;;;;;28525:13:19;3120:30085;28525:13;;;:::i;:::-;3120:30085;;28592:5;;;:::i;:::-;3120:30085;28461:13;;3120:30085;;;;;-1:-1:-1;;3120:30085:19;;;;;-1:-1:-1;;;;;3120:30085:19;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30085:19;;;;;;;:::i;:::-;;;:::i;:::-;;;;-1:-1:-1;;;;;3120:30085:19;;;;;;;;;;1525:73:13;;;:::i;:::-;3120:30085:19;;;28874:52;;;;3120:30085;28874:52;;3120:30085;;;;28874:52;;3120:30085;;;;;28874:6;3120:30085;28874:52;;;;;;;;3120:30085;28975:5;;;;:::i;28874:52::-;3120:30085;28874:52;;3120:30085;28874:52;;;;;;3120:30085;28874:52;;;:::i;:::-;;;3120:30085;;;;28975:5;;-1:-1:-1;28874:52:19;;;;;-1:-1:-1;28874:52:19;;3120:30085;;;;;-1:-1:-1;;3120:30085:19;;;;;;;:::i;:::-;;;1525:73:13;;;:::i;:::-;4720:5:19;7581:57;;7577:130;;7738:21;;;:::i;:::-;8176:4;;;:::i;:::-;32069:40;;;:::i;:::-;3120:30085;;;;;;:::i;:::-;;;;;;;32026:130;;;3120:30085;26404:4;3120:30085;;-1:-1:-1;;;;;3120:30085:19;;;;;;;;31985:32;32026:130;3120:30085;;;;;;;;;;;;;;;;;;;;;;;;32252:6;3120:30085;32299:55;;;;:::i;:::-;32252:103;;;;;3120:30085;;;32252:103;;-1:-1:-1;;;;;3120:30085:19;;;;;32252:103;;3120:30085;;;;;;-1:-1:-1;;3120:30085:19;;;;;;-1:-1:-1;;32252:103:19;;;;;;;32371:70;32252:103;32026:130;32252:103;;;3120:30085;;;;;;32371:70;3120:30085;7577:130;7661:35;3120:30085;7661:35;3120:30085;;7661:35;3120:30085;;;;;-1:-1:-1;;3120:30085:19;;;;;;;;1473:26:20;;-1:-1:-1;;;;;1473:26:20;3120:30085:19;;;1019:6:14;3120:30085:19;;1473:26:20;;;;;;;;;3120:30085:19;1473:26:20;;;3120:30085:19;;;;;;;;;1473:26:20;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;3120:30085:19;;;;;-1:-1:-1;;3120:30085:19;;;;;;;4720:5;7581:57;;7577:130;;3120:30085;7738:21;;25657:70;7738:21;;:::i;:::-;1525:73:13;;:::i;:::-;3120:30085:19;;;;;;;;25657:70;3120:30085;;;;;;;-1:-1:-1;;3120:30085:19;;;;;;;:::i;:::-;15714:28;;;;:::i;:::-;15766:24;;;;:::i;:::-;15805:13;3120:30085;;-1:-1:-1;;;;;3120:30085:19;;;15800:124;15820:13;;;;;;3120:30085;;;;;;;:::i;:::-;;;;15835:3;3120:30085;;;;;15870:22;3120:30085;;;;;15899:13;;;;;:::i;:::-;3120:30085;;;;;;;;;;15854:59;;;;:::i;:::-;3120:30085;;15805:13;;3120:30085;;;;;-1:-1:-1;;3120:30085:19;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;-1:-1:-1;;3120:30085:19;;;;;;;:::i;:::-;15292:28;;;;:::i;:::-;15344:24;;;;:::i;:::-;15383:13;3120:30085;;-1:-1:-1;;;;;3120:30085:19;;;15378:121;15398:13;;;;;;3120:30085;;;;;;;:::i;15413:3::-;3120:30085;;;;;15448:19;3120:30085;;;;;15474:13;;;;;:::i;:::-;3120:30085;;;;;;;;;;15432:56;;;;:::i;:::-;3120:30085;;15383:13;;3120:30085;;;;;-1:-1:-1;;3120:30085:19;;;;;;;;-1:-1:-1;;;;;1019:6:14;3120:30085:19;;;;;;;;;-1:-1:-1;;3120:30085:19;;;;;;;4720:5;7248:55;;7244:127;;3120:30085;7402:20;;25273:68;7402:20;;:::i;:::-;1525:73:13;;:::i;:::-;3120:30085:19;;;;;;;;25273:68;3120:30085;;;;;;-1:-1:-1;;3120:30085:19;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;3120:30085:19;;;;;-1:-1:-1;;;;;3120:30085:19;;:::i;:::-;;;;14588:32;3120:30085;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30085:19;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30085:19;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;436:67:21;;:::i;:::-;-1:-1:-1;;;;;3120:30085:19;;;;;;;;;;;;;;;;23465:4;3120:30085;;;;;;;23598:56;;;;;;3120:30085;23598:56;;;;23694:57;;;;;;;;3120:30085;23694:57;24681:90;3120:30085;23694:57;24894:69;23694:57;;;24786:92;23694:57;24786:92;23694:57;;24282:37;;;:::i;:::-;3120:30085;;;;;;:::i;:::-;;;;;;;24383:32;24467:38;24239:134;;;3120:30085;;;;;;;24199:31;3120:30085;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24467:38;:::i;:::-;3120:30085;;;;;;;;;:::i;:::-;;;;24424:135;;;3120:30085;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24681:90;3120:30085;;24681:90;;;;3120:30085;;;;;;;;;;;;;;;;;24681:90;;;;3120:30085;;;;;;;;;;;;;;;;;;;;24786:92;;;;3120:30085;;;;;;24894:69;;3120:30085;;;;;;;;;23694:57;3120:30085;;;;23465:4;3120:30085;23694:57;24681:90;3120:30085;23694:57;24894:69;23694:57;;;24786:92;23694:57;24786:92;23694:57;;;23598:56;3120:30085;;;23598:56;;;;;3120:30085;;;;;;-1:-1:-1;;3120:30085:19;;;;;;;:::i;:::-;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:30085:19;;;;;;;;16417:31;3120:30085;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;16543:81;;;;3120:30085;16539:176;;;3120:30085;16539:176;31036:39;;;:::i;:::-;3120:30085;;;;;;;;:::i;:::-;;;;30993:129;;;3120:30085;;;;;;;16417:31;3120:30085;;;;;;;;;;;;;;;;;;;;;;;;;31217:6;3120:30085;31263:54;;;;:::i;:::-;31217:101;;;;;3120:30085;;;31217:101;;-1:-1:-1;;;;;3120:30085:19;;;;;31217:101;;3120:30085;;;;;;-1:-1:-1;;3120:30085:19;;;;;;-1:-1:-1;;31217:101:19;;;;;;;31334:68;31217:101;;;3120:30085;;;;;;31334:68;3120:30085;16543:81;16576:48;;;;;16543:81;;;3120:30085;;;;;;-1:-1:-1;;3120:30085:19;;;;;;;:::i;:::-;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:30085:19;;;;;;;;16899:32;3120:30085;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;16980:33;3120:30085;17028:82;;;;3120:30085;17024:179;;;3120:30085;17024:179;32069:40;;;:::i;:::-;3120:30085;;;;;;;;:::i;:::-;;;;32026:130;;;3120:30085;;;;;;;16899:32;3120:30085;;;;;;;;;;;;;;;;;;;;;;;;;32252:6;3120:30085;32299:55;;;;:::i;:::-;32252:103;;;;;3120:30085;;;32252:103;;-1:-1:-1;;;;;3120:30085:19;;;;;32252:103;;3120:30085;;;;;;-1:-1:-1;;3120:30085:19;;;;;;-1:-1:-1;;32252:103:19;;;;;;;32371:70;32252:103;;;3120:30085;;;;;;32371:70;3120:30085;17028:82;17061:49;;;;;17028:82;;;3120:30085;;:::i;:::-;;;;;-1:-1:-1;;3120:30085:19;;;;;-1:-1:-1;;;;;3120:30085:19;;:::i;:::-;;;;14307:31;3120:30085;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;3120:30085:19;;;;;;13926:33;3120:30085;;;;;;;;;;;;-1:-1:-1;;3120:30085:19;;;;;29747:21;3120:30085;;:::i;:::-;29747:21;;;:::i;:::-;;;:::i;3120:30085::-;;;;;-1:-1:-1;;3120:30085:19;;;;;;;:::i;:::-;;;7088:4;;;;:::i;:::-;4975:9;7868:56;;7864:127;;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:30085:19;;;;;;;;27849:31;3120:30085;;;;;;;28015:6;3120:30085;28062:55;;;;:::i;:::-;28015:103;;;;;3120:30085;;;28015:103;;-1:-1:-1;;;;;3120:30085:19;;;;;28015:103;;3120:30085;;;;;;-1:-1:-1;;3120:30085:19;;;;;;-1:-1:-1;;28015:103:19;;;;;;;28138:68;28015:103;3120:30085;28015:103;;;3120:30085;;;;;;28138:68;3120:30085;7864:127;7947:33;3120:30085;7947:33;3120:30085;;7947:33;3120:30085;;;;;-1:-1:-1;;3120:30085:19;;;;;;;;4975:9;3120:30085;;;;;;;;-1:-1:-1;;3120:30085:19;;;;;;;:::i;:::-;;;7088:4;;;;:::i;:::-;4975:9;7868:56;;7864:127;;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:30085:19;;;;;;;;27466:30;3120:30085;;;;;;;27630:6;3120:30085;27676:54;;;;:::i;:::-;27630:101;;;;;3120:30085;;;27630:101;;-1:-1:-1;;;;;3120:30085:19;;;;;27630:101;;3120:30085;;;;;;-1:-1:-1;;3120:30085:19;;;;;;-1:-1:-1;;27630:101:19;;;;;;;27751:67;27630:101;3120:30085;27630:101;;;3120:30085;;;;;;27751:67;3120:30085;27630:101;;;;:::i;:::-;;;;3120:30085;;;;;-1:-1:-1;;3120:30085:19;;;;;;16154:79;3120:30085;;;;16154:79;:::i;3120:30085::-;;;;;-1:-1:-1;;3120:30085:19;;;;;-1:-1:-1;;;;;3120:30085:19;;:::i;:::-;;;;14845:30;3120:30085;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30085:19;;;;;;;:::i;:::-;;-1:-1:-1;;;;;3120:30085:19;;;21067:33;;:6;;3120:30085;21067:6;;;3120:30085;21067:33;;;;;;;;3120:30085;21067:33;;;3120:30085;;;21152:4;;21115:42;;21111:104;;3120:30085;;;;;;;;;;;;;;21225:87;;3120:30085;;;;;;;;;21347:4;3120:30085;;;;;;;;;;21424:49;;;3120:30085;21424:49;;3120:30085;;21424:49;3120:30085;21424:49;;;;;;;;;3120:30085;;;21424:49;;;3120:30085;21566:36;;;;:::i;:::-;3120:30085;;;;;;;:::i;:::-;;;;;;;21523:133;;;3120:30085;;;;;;;;21483:31;3120:30085;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21731:72;3120:30085;21731:72;;;3120:30085;21731:72;;3120:30085;;21731:72;3120:30085;21731:72;;;;;;;;;3120:30085;;;21731:72;;;3120:30085;21897:37;;;;:::i;:::-;3120:30085;;;;;;;;:::i;:::-;;;;21854:135;;;3120:30085;;;;;;;;21813:32;3120:30085;;;;;;;;;;;;;;;;;;;;;;;;;;;22521:54;;;3120:30085;22521:54;;3120:30085;22521:54;;3120:30085;22521:54;;;;3120:30085;;22521:54;;;3120:30085;22517:207;;;;3120:30085;22517:207;;;3120:30085;;;;22738:55;;;;3120:30085;22738:55;;;3120:30085;22738:55;;3120:30085;22738:55;;3120:30085;;22738:55;;;3120:30085;22734:211;;;3120:30085;22734:211;22856:31;3120:30085;;;;;;;;;;;22738:55;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30085;;;;;22738:55;;;;;;;;;22517:207;3120:30085;;;22637:30;3120:30085;;;;;;22517:207;;;22521:54;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30085;;;;;;22521:54;;3120:30085;22521:54;;;;;;;21731:72;21897:37;21731:72;;;;;3120:30085;21731:72;3120:30085;21731:72;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;21424:49;21566:36;21424:49;;;;;3120:30085;21424:49;3120:30085;21424:49;;;;;;;:::i;:::-;;;;21225:87;21274:27;;3120:30085;21274:27;3120:30085;;;;21274:27;21111:104;21180:24;3120:30085;21180:24;3120:30085;;21180:24;21067:33;;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30085;;;;;;;;;;;;21067:33;;;;;;;;;;3120:30085;;;;;-1:-1:-1;;3120:30085:19;;;;;;;-1:-1:-1;;;;;3120:30085:19;;:::i;:::-;;;;15042:31;3120:30085;;;;;;;;;;;;;-1:-1:-1;;;;;3120:30085:19;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;3120:30085:19;;;;;;:::o;:::-;;;;;-1:-1:-1;;3120:30085:19;;;;;;;;4720:5;3120:30085;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;1931:430:13:-;3120:30085:19;;;2303:50:13;;;2320:22;;3120:30085:19;;;;;;;2303:50:13;;;;;;:::i;:::-;3120:30085:19;2293:61:13;;1931:430;:::o;3120:30085:19:-;;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;8523:151::-;8598:68;8523:151;-1:-1:-1;3120:30085:19;-1:-1:-1;;;;;3120:30085:19;;8598:68;;3120:30085;8598:68;;;;;;;;;;3120:30085;8598:68;;;3120:30085;8598:68;;;;;;:::i;:::-;3120:30085;;8584:83;;;;;;;3120:30085;8584:83;;;8598:68;8584:83;;3120:30085;;;;;8598:68;3120:30085;;;;;;;;;;;;;;;;;;8584:83;;:6;;3120:30085;8584:83;;;;;;;;8523:151;;:::o;8584:83::-;;;-1:-1:-1;8584:83:19;;;;;;:::i;:::-;;;3120:30085;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;3120:30085:19;;;;;;;;;8523:151::o;3120:30085::-;;;;;;;;;;-1:-1:-1;;;;;3120:30085:19;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;13291:213:28;3120:30085:19;13369:24:28;;;;13365:103;;3120:30085:19;13291:213:28;:::o;13365:103::-;13416:41;;;13447:2;13416:41;3120:30085:19;;;;13416:41:28;;3120:30085:19;;;;;;;;;;:::o;19669:4:12:-;;465::15;19669::12;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;17922:1064:19:-;;18151:104;19669:4:12;5832:87:15;;;838:5;5832:87;;;;;;;;;838:5;:::i;:::-;19669:4:12;18151:104:19;;:::i;:::-;19669:4:12;;;;;;;;;;;;;;;17922:1064:19;:::o;18992:340::-;-1:-1:-1;;;;;19088:21:19;;;;;:::i;:::-;3120:30085;19124:25;;19120:93;;19242:10;19227:25;19223:103;;18992:340;;:::o;19223:103::-;19275:40;19147:1;19275:40;19242:10;19275:40;3120:30085;;;;;19147:1;19275:40;19120:93;19172:30;;19147:1;19172:30;3120:30085;19172:30;3120:30085;;19147:1;19172:30;3120:30085;;;-1:-1:-1;;;;;3120:30085:19;;;;;;:::o;19603:201::-;3120:30085;;;;19723:32;;-1:-1:-1;;;;;3120:30085:19;;;19723:32;;;3120:30085;19723:32;3120:30085;;;19723:6;3120:30085;;19723:32;;;;;;;-1:-1:-1;19723:32:19;;;19603:201;19773:24;;3120:30085;;19603:201;:::o;19723:32::-;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30085;;;;;;;19723:32;3120:30085;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;19723:32;;;;;;-1:-1:-1;19723:32:19;;;3120:30085;;;-1:-1:-1;3120:30085:19;;;;;29782:616;;29917:28;;;:::i;:::-;29961:13;;29973:1;29976:13;;;;;;29782:616;;;;;:::o;29991:3::-;3120:30085;;-1:-1:-1;;;;;30025:13:19;;;;;:::i;:::-;3120:30085;;;;;;29973:1;3120:30085;30080:22;3120:30085;;;;;;;29973:1;3120:30085;;29973:1;3120:30085;;;;29973:1;3120:30085;;30133:20;;30129:253;;29991:3;;;;;;;;3120:30085;29961:13;;30129:253;30301:66;3120:30085;;29973:1;3120:30085;;;;29973:1;3120:30085;;29973:1;3120:30085;;;29973:1;3120:30085;;;;30260:16;;;;;:::i;:::-;3120:30085;;;;;;30301:66;;30129:253;;;;;;;;;509:165:21;-1:-1:-1;;;;;586:6:21;3120:30085:19;564:10:21;:29;560:108;;509:165::o;560:108::-;616:41;;;564:10;616:41;3120:30085:19;;616:41:21;;32454:749:19;19669:4:12;;;;;;;;;;;;;;;;;;33055:74:19;33051:146;;32454:749::o;33051:146::-;33152:34;-1:-1:-1;33152:34:19;;-1:-1:-1;33152:34:19;1688:201:13;1762:20;1774:7;;;;1762:20;:::i;:::-;-1:-1:-1;;;;;3120:30085:19;;;1231:22:14;;;:6;;;:22;:6;;;3120:30085:19;1231:22:14;;;;;;;;;1774:7:13;1231:22:14;;;1688:201:13;3120:30085:19;;;;;1231:64:14;;;;;3120:30085:19;1231:64:14;;:22;:64;;3120:30085:19;1820:10:13;3120:30085:19;;;;1289:4:14;3120:30085:19;;;;;1231:64:14;;;;;;;1774:7:13;1231:64:14;;;1688:201:13;1797:34;;;1793:90;;1688:201::o;1793:90::-;1854:18;1774:7;1854:18;1231:22:14;1774:7:13;1854:18;1231:64:14;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30085:19;;;;;;;:::i;:::-;1231:64:14;;;;;;;;;:22;3120:30085:19;1231:22:14;;;;;;;;;;;;;;;:::i;:::-;;;;;19338:199:19;;-1:-1:-1;;;;;3120:30085:19;;;19469:26;3120:30085;19469:26;;3120:30085;19469:26;;;3120:30085;19469:26;:6;3120:30085;19469:6;;;3120:30085;19469:26;;;;;;;;;;;19338:199;19460:35;;;3120:30085;19338:199;:::o;19469:26::-;;;;;;;;;;;;;;:::i;:::-;;;3120:30085;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;19469:26;;;;;;;;;;3120:30085;;;;;;;;;;;;;;;;;;;;28994:403;;;-1:-1:-1;;;;;3120:30085:19;;;;;-1:-1:-1;3120:30085:19;29118:19;3120:30085;;;-1:-1:-1;3120:30085:19;;;;;;;-1:-1:-1;3120:30085:19;;;;-1:-1:-1;3120:30085:19;;29164:20;;29160:231;;28994:403;;;;;;;:::o;29160:231::-;3120:30085;29280:16;3120:30085;29317:63;3120:30085;;;;-1:-1:-1;3120:30085:19;29118:19;3120:30085;;;-1:-1:-1;3120:30085:19;;-1:-1:-1;3120:30085:19;;;-1:-1:-1;3120:30085:19;;;;29280:16;:::i;:::-;3120:30085;;;;;;29317:63;;29160:231;;;;;;;;17215:701;-1:-1:-1;;;;;3120:30085:19;17414:399;3120:30085;17672:32;3120:30085;;17830:79;3120:30085;;17414:399;3120:30085;;;17765:31;3120:30085;;;17414:399;3120:30085;;17830:79;;:::i;17215:701::-;-1:-1:-1;;;;;3120:30085:19;-1:-1:-1;3120:30085:19;;;;17830:79;3120:30085;;-1:-1:-1;3120:30085:19;;;17581:30;3120:30085;;;-1:-1:-1;3120:30085:19;;17830:79;;:::i;1303:160:26:-;3120:30085:19;;;1412:43:26;;;;;;-1:-1:-1;;;;;3120:30085:19;;;1412:43:26;;;3120:30085:19;;;;;;;;;1412:43:26;;;3120:30085:19;3510:55:27;;-1:-1:-1;;;;1412:43:26;3120:30085:19;1412:43:26;3120:30085:19;;1412:43:26;:::i;:::-;3120:30085:19;3462:31:27;;;;;;;3120:30085:19;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2847:1:27;1412:43:26;3120:30085:19;;;;3510:55:27;;:::i;:::-;3120:30085:19;;4551:22:26;;;;:57;;;;3120:30085:19;4547:135:26;;;;1303:160;:::o;4547:135::-;4631:40;2847:1:27;4631:40:26;;3120:30085:19;1412:43:26;2847:1:27;4631:40:26;4551:57;4578:30;;;;1412:43;4578:30;;;3120:30085:19;;;;1412:43:26;3120:30085:19;4578:30:26;;3120:30085:19;:::i;:::-;4577:31:26;4551:57;;;;3120:30085:19;;;;;4625:582:27;;4797:8;;-1:-1:-1;3120:30085:19;;5874:21:27;:17;;6046:142;;;;;;5870:383;6225:17;5894:1;6225:17;;5894:1;6225:17;4793:408;3120:30085:19;;5045:22:27;:49;;;4793:408;5041:119;;5173:17;;:::o;5041:119::-;-1:-1:-1;;;;;5121:24:27;;5066:1;5121:24;3120:30085:19;5121:24:27;3120:30085:19;;5066:1:27;5121:24;5045:49;5071:18;;;:23;5045:49;"},"methodIdentifiers":{"MAX_CREATOR_FEE_PERCENTAGE()":"2e1d388d","MAX_PROTOCOL_SWAP_FEE_PERCENTAGE()":"2772d156","MAX_PROTOCOL_YIELD_FEE_PERCENTAGE()":"5e32e4e8","collectAggregateFees(address)":"8f4ab9ca","collectAggregateFeesHook(address)":"fa399f2a","computeAggregateFeePercentage(uint256,uint256)":"0ddd60c6","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getGlobalProtocolSwapFeePercentage()":"7869ee18","getGlobalProtocolYieldFeePercentage()":"55fb76af","getPoolCreatorFeeAmounts(address)":"9e95f3fd","getPoolCreatorSwapFeePercentage(address)":"0b8e059b","getPoolCreatorYieldFeePercentage(address)":"0252aab5","getPoolProtocolSwapFeeInfo(address)":"5c15a0b4","getPoolProtocolYieldFeeInfo(address)":"7a2b97dc","getProtocolFeeAmounts(address)":"8df44c54","getVault()":"8d928af8","isPoolRegistered(address)":"c673bdaf","migratePool(address)":"0874327f","registerPool(address,address,bool)":"77ff76e7","setGlobalProtocolSwapFeePercentage(uint256)":"8a3c5c69","setGlobalProtocolYieldFeePercentage(uint256)":"a93df2a4","setPoolCreatorSwapFeePercentage(address,uint256)":"1377c16c","setPoolCreatorYieldFeePercentage(address,uint256)":"3af52712","setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356","updateProtocolSwapFeePercentage(address)":"71ecc8fb","updateProtocolYieldFeePercentage(address)":"71447ea8","vault()":"fbfa77cf","withdrawPoolCreatorFees(address)":"52f125f0","withdrawPoolCreatorFees(address,address)":"f7061445","withdrawProtocolFees(address,address)":"cf7b287f","withdrawProtocolFeesForToken(address,address,address)":"b53a70b2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"CallerIsNotPoolCreator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMigrationSource\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolCreatorFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolYieldFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateSwapFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateYieldFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"PoolRegisteredWithFeeController\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_CREATOR_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFeesHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeAggregateFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolSwapFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolYieldFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getProtocolFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"migratePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"registerPool\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract stores global default protocol swap and yield fees, and also tracks the values of those fees for each pool (the `PoolFeeConfig` described below). Protocol fees can always be overwritten by governance, but pool creator fees are controlled by the registered poolCreator (see `PoolRoleAccounts`). The Vault stores a single aggregate percentage for swap and yield fees; only this `ProtocolFeeController` knows the component fee percentages, and how to compute the aggregate from the components. This is done for performance reasons, to minimize gas on the critical path, as this way the Vault simply applies a single \\\"cut\\\", and stores the fee amounts separately from the pool balances. The pool creator fees are \\\"net\\\" protocol fees, meaning the protocol fee is taken first, and the pool creator fee percentage is applied to the remainder. Essentially, the protocol is paid first, then the remainder is divided between the pool creator and the LPs. There is a permissionless function (`collectAggregateFees`) that transfers these tokens from the Vault to this contract, and distributes them between the protocol and pool creator, after which they can be withdrawn at any time by governance and the pool creator, respectively. Protocol fees can be zero in some cases (e.g., the token is registered as exempt), and pool creator fees are zero if there is no creator role address defined. Protocol fees are capped at a maximum percentage (50%); pool creator fees are computed \\\"net\\\" protocol fees, so they can be any value from 0 to 100%. Any combination is possible. A protocol-fee-exempt pool with a 100% pool creator fee would send all fees to the creator. If there is no pool creator, a pool with a 50% protocol fee would divide the fees evenly between the protocol and LPs. This contract is deployed with the Vault, but can be changed by governance.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"CallerIsNotPoolCreator(address,address)\":[{\"params\":{\"caller\":\"The account attempting to withdraw pool creator fees\",\"pool\":\"The pool the caller tried to withdraw from\"}}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"PoolAlreadyRegistered(address)\":[{\"details\":\"This can happen if there is an error in the migration, or if governance somehow grants permission to `migratePool`, which should never happen.\",\"params\":{\"pool\":\"The pool\"}}],\"PoolCreatorNotRegistered(address)\":[{\"params\":{\"pool\":\"The pool with no creator\"}}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol swap fee percentages.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol yield fee percentages.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"params\":{\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"params\":{\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global swap fee percentage.\",\"params\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global yield fee percentage.\",\"params\":{\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which pool creator fees are being withdrawn\",\"recipient\":\"The recipient of the funds (the pool creator if permissionless, or another account)\",\"token\":\"The token being withdrawn\"}},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator swap fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage for the pool\"}},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator yield fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage for the pool\"}},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"details\":\"The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee counterpart also include the protocol fee exemption flag, we might as well include it here as well.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (non-zero, or the event would not be emitted)\",\"protocolFeeExempt\":\"True if the pool is initially exempt from protocol fees\"}},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which protocol fees are being withdrawn\",\"recipient\":\"The recipient of the funds\",\"token\":\"The token being withdrawn\"}},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the swap fee was charged\",\"token\":\"The token in which the swap fee was charged\"}},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol swap fee will be changed\",\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the yield fee was charged\",\"token\":\"The token in which the yield fee was charged\"}},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol yield fee will be changed\",\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}}},\"kind\":\"dev\",\"methods\":{\"collectAggregateFees(address)\":{\"params\":{\"pool\":\"The pool with aggregate fees\"}},\"collectAggregateFeesHook(address)\":{\"details\":\"Copy and zero out the `aggregateFeeAmounts` collected in the Vault accounting, supplying credit for each token. Then have the Vault transfer tokens to this contract, debiting each token for the amount transferred so that the transaction settles when the hook returns.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"details\":\"Not tied to any particular pool; this just performs the low-level \\\"additive fee\\\" calculation. Note that pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are stored in the Vault with 24-bit precision, this will truncate any values that require greater precision. It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee components, but the truncation ensures it will not revert for any valid set of fee percentages. See example below: tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60% totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000 protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400 creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600 creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360 lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\",\"params\":{\"poolCreatorFeePercentage\":\"The pool creator portion of the aggregate fee percentage\",\"protocolFeePercentage\":\"The protocol portion of the aggregate fee percentage\"},\"returns\":{\"_0\":\"The computed aggregate percentage\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getGlobalProtocolSwapFeePercentage()\":{\"returns\":{\"_0\":\"The global protocol swap fee percentage\"}},\"getGlobalProtocolYieldFeePercentage()\":{\"returns\":{\"_0\":\"The global protocol yield fee percentage\"}},\"getPoolCreatorFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getPoolCreatorSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\"}},\"getPoolCreatorYieldFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee\"}},\"getPoolProtocolSwapFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"The protocol swap fee percentage for the given pool\",\"_1\":\"True if the protocol fee has been overridden\"}},\"getPoolProtocolYieldFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"The protocol yield fee percentage for the given pool\",\"_1\":\"True if the protocol fee has been overridden\"}},\"getProtocolFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\"}},\"migratePool(address)\":{\"details\":\"Permission should NEVER be granted to this function outside of a migration contract. It is necessary to permit migration of the `ProtocolFeeController` with all state (in particular, protocol fee overrides and pool creator fees) that cannot be written outside of the `registerPool` function called by the Vault during pool deployment. Even if governance were to grant permission to call this function, the `_registeredPools` latch keeps it safe, guaranteeing that it is impossible to use this function to change anything after registration. A pool can only be registered / configured once - either copied to a new controller in the migration context, or added normally through the Vault calling `registerPool`.\",\"params\":{\"pool\":\"The address of the pool to be migrated\"}},\"registerPool(address,address,bool)\":{\"details\":\"This must be called from the Vault during pool registration. It will initialize the pool to the global protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate fee percentages, based on an initial pool creator fee of 0.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (or 0 if there won't be a pool creator fee)\",\"protocolFeeExempt\":\"If true, the pool is initially exempt from protocol fees\"},\"returns\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\"}},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\"}},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage to apply to the pool\"}},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage to apply to the pool\"}},\"setProtocolSwapFeePercentage(address,uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol swap fee\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol yield fee\"}},\"updateProtocolSwapFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol swap fee\"}},\"updateProtocolYieldFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol yield fee\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The Vault address\"}},\"withdrawPoolCreatorFees(address)\":{\"details\":\"Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable value, this function is permissionless.\",\"params\":{\"pool\":\"The pool on which fees were collected\"}},\"withdrawPoolCreatorFees(address,address)\":{\"details\":\"Sends swap and yield pool creator fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFees(address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFeesForToken(address,address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\",\"token\":\"Token to withdraw\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"notice\":\"Error raised if the wrong account attempts to withdraw pool creator fees.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"InvalidMigrationSource()\":[{\"notice\":\"Migration source cannot be this contract.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"Prevent pool data from being registered more than once.\"}],\"PoolCreatorFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\"}],\"PoolCreatorNotRegistered(address)\":[{\"notice\":\"Error raised if there is no pool creator on a withdrawal attempt from the given pool.\"}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated.\"},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated.\"},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\"},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\"},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of pool creator fees in a specific token and amount.\"},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator swap fee percentage of a pool is updated.\"},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator yield fee percentage of a pool is updated.\"},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"notice\":\"Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\"},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of protocol fees in a specific token and amount.\"},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol swap fees in a specific token and amount.\"},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated for a specific pool.\"},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol yield fees in a specific token and amount.\"},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated for a specific pool.\"}},\"kind\":\"user\",\"methods\":{\"collectAggregateFees(address)\":{\"notice\":\"Collects aggregate fees from the Vault for a given pool.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"notice\":\"Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getGlobalProtocolSwapFeePercentage()\":{\"notice\":\"Getter for the current global protocol swap fee.\"},\"getGlobalProtocolYieldFeePercentage()\":{\"notice\":\"Getter for the current global protocol yield fee.\"},\"getPoolCreatorFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the pool creator for withdrawal.\"},\"getPoolCreatorSwapFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator swap fee percentage for a given pool.\"},\"getPoolCreatorYieldFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator yield fee percentage for a given pool.\"},\"getPoolProtocolSwapFeeInfo(address)\":{\"notice\":\"Getter for the current protocol swap fee for a given pool.\"},\"getPoolProtocolYieldFeeInfo(address)\":{\"notice\":\"Getter for the current protocol yield fee for a given pool.\"},\"getProtocolFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the protocol for withdrawal.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isPoolRegistered(address)\":{\"notice\":\"Getter for pool registration flag.\"},\"migratePool(address)\":{\"notice\":\"Not exposed in the interface, this enables migration of hidden pool state.\"},\"registerPool(address,address,bool)\":{\"notice\":\"Add pool-specific entries to the protocol swap and yield percentages.\"},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"notice\":\"Set the global protocol swap fee percentage, used by standard pools.\"},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"notice\":\"Set the global protocol yield fee percentage, used by standard pools.\"},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator swap fee percentage to the specified pool.\"},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator yield fee percentage to the specified pool.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"updateProtocolSwapFeePercentage(address)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"updateProtocolYieldFeePercentage(address)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"vault()\":{\"notice\":\"Get the address of the main Vault contract.\"},\"withdrawPoolCreatorFees(address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool.\"},\"withdrawPoolCreatorFees(address,address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool. This is a permissioned function.\"},\"withdrawProtocolFees(address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\"},\"withdrawProtocolFeesForToken(address,address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\"}},\"notice\":\"Helper contract to manage protocol and creator fees outside the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\":\"ProtocolFeeController\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol\":{\"keccak256\":\"0x89bd8b60aa203c8aa72af6e88671af68f4407a26dd3e0541b0e4dc387fd0081e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://411eb9ee6df963198102de5ae597c1f1377b0a45be23f17d38463f2eeefa2b0a\",\"dweb:/ipfs/QmcEaMawADJEyLswG5hhvhQuTNV3XUxBVu3YZCbJzQkoJ7\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\":{\"keccak256\":\"0x11b6e6c5d818d4f7c2ad5afbbd226230deb0f1c42b5cac2159dd66a8d0c9a1b6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://25e64898f2101a3c2492bdf08837b049859306df52fdfc925588cbcd39c01b02\",\"dweb:/ipfs/QmVC7Qs2X7XLwdswtp7Tzu5bYvGQyGfpL3YkYr6tJBHaEn\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x4910eb69dc3e3141803a36fb176349ae3d774f4a9811e4d486c44bf6a8e4e055\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://afec051b387a1dad075acfbe0093b443e9e5827e29f7b960af3c1b69645aa290\",\"dweb:/ipfs/QmdLcyhmHCiEyVbFsVByyjEdUn9pDTzVAPNyBpdH2YEs4Y\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"SingletonAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getVault()":"8d928af8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same function name.\",\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"}},\"notice\":\"Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":\"SingletonAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol\":{\"keccak256\":\"0x89bd8b60aa203c8aa72af6e88671af68f4407a26dd3e0541b0e4dc387fd0081e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://411eb9ee6df963198102de5ae597c1f1377b0a45be23f17d38463f2eeefa2b0a\",\"dweb:/ipfs/QmcEaMawADJEyLswG5hhvhQuTNV3XUxBVu3YZCbJzQkoJ7\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x4910eb69dc3e3141803a36fb176349ae3d774f4a9811e4d486c44bf6a8e4e055\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://afec051b387a1dad075acfbe0093b443e9e5827e29f7b960af3c1b69645aa290\",\"dweb:/ipfs/QmdLcyhmHCiEyVbFsVByyjEdUn9pDTzVAPNyBpdH2YEs4Y\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"VaultGuard":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60a034606057601f60b238819003918201601f19168301916001600160401b03831184841017606457808492602094604052833981010312606057516001600160a01b03811681036060576080526040516039908160798239608051815050f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe5f80fdfea26469706673582212205eb38cb825d4eb9173120381e173db99b9a726aee63c8bf1b9ab18ca0b07c5c964736f6c634300081b0033","opcodes":"PUSH1 0xA0 CALLVALUE PUSH1 0x60 JUMPI PUSH1 0x1F PUSH1 0xB2 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH1 0x64 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH1 0x60 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH1 0x60 JUMPI PUSH1 0x80 MSTORE PUSH1 0x40 MLOAD PUSH1 0x39 SWAP1 DUP2 PUSH1 0x79 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MCOPY 0xB3 DUP13 0xB8 0x25 0xD4 0xEB SWAP2 PUSH20 0x120381E173DB99B9A726AEE63C8BF1B9AB18CA0B SMOD 0xC5 0xC9 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"308:368:21:-:0;;;;;;;;;;;;;-1:-1:-1;;308:368:21;;;;-1:-1:-1;;;;;308:368:21;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;308:368:21;;;;;;409:14;;308:368;;;;;;;;409:14;308:368;;;;;;-1:-1:-1;308:368:21;;;;;;-1:-1:-1;308:368:21;;;;;-1:-1:-1;308:368:21"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212205eb38cb825d4eb9173120381e173db99b9a726aee63c8bf1b9ab18ca0b07c5c964736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MCOPY 0xB3 DUP13 0xB8 0x25 0xD4 0xEB SWAP2 PUSH20 0x120381E173DB99B9A726AEE63C8BF1B9AB18CA0B SMOD 0xC5 0xC9 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"308:368:21:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Contract that shares the modifier `onlyVault`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":\"VaultGuard\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"IERC4626":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"asset","outputs":[{"internalType":"address","name":"assetTokenAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"convertToAssets","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"convertToShares","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxDeposit","outputs":[{"internalType":"uint256","name":"maxAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxMint","outputs":[{"internalType":"uint256","name":"maxShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxRedeem","outputs":[{"internalType":"uint256","name":"maxShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxWithdraw","outputs":[{"internalType":"uint256","name":"maxAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewDeposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewMint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewWithdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAssets","outputs":[{"internalType":"uint256","name":"totalManagedAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","asset()":"38d52e0f","balanceOf(address)":"70a08231","convertToAssets(uint256)":"07a2d13a","convertToShares(uint256)":"c6e6f592","decimals()":"313ce567","deposit(uint256,address)":"6e553f65","maxDeposit(address)":"402d267d","maxMint(address)":"c63d75b6","maxRedeem(address)":"d905777e","maxWithdraw(address)":"ce96cb77","mint(uint256,address)":"94bf804d","name()":"06fdde03","previewDeposit(uint256)":"ef8b30f7","previewMint(uint256)":"b3d7f6b9","previewRedeem(uint256)":"4cdad506","previewWithdraw(uint256)":"0a28a477","redeem(uint256,address,address)":"ba087652","symbol()":"95d89b41","totalAssets()":"01e1d114","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","withdraw(uint256,address,address)":"b460af94"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"asset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"assetTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"convertToAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"convertToShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalManagedAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC4626 \\\"Tokenized Vault Standard\\\", as defined in https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"asset()\":{\"details\":\"Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing. - MUST be an ERC-20 token contract. - MUST NOT revert.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"convertToAssets(uint256)\":{\"details\":\"Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"convertToShares(uint256)\":{\"details\":\"Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"deposit(uint256,address)\":{\"details\":\"Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the deposit execution, and are accounted for during deposit. - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"maxDeposit(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver, through a deposit call. - MUST return a limited value if receiver is subject to some deposit limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited. - MUST NOT revert.\"},\"maxMint(address)\":{\"details\":\"Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call. - MUST return a limited value if receiver is subject to some mint limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted. - MUST NOT revert.\"},\"maxRedeem(address)\":{\"details\":\"Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault, through a redeem call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock. - MUST NOT revert.\"},\"maxWithdraw(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the Vault, through a withdraw call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST NOT revert.\"},\"mint(uint256,address)\":{\"details\":\"Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint execution, and are accounted for during mint. - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"previewDeposit(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called in the same transaction. - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the deposit would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"previewMint(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the same transaction. - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by minting.\"},\"previewRedeem(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the same transaction. - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the redemption would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by redeeming.\"},\"previewWithdraw(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if called in the same transaction. - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though the withdrawal would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"redeem(uint256,address,address)\":{\"details\":\"Burns exactly shares from owner and sends assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the redeem execution, and are accounted for during redeem. - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalAssets()\":{\"details\":\"Returns the total amount of the underlying asset that is \\u201cmanaged\\u201d by Vault. - SHOULD include any compounding that occurs from yield. - MUST be inclusive of any fees that are charged against assets in the Vault. - MUST NOT revert.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"withdraw(uint256,address,address)\":{\"details\":\"Burns shares from owner and sends exactly assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the withdraw execution, and are accounted for during withdraw. - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC4626.sol\":\"IERC4626\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"IERC20":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 standard as defined in the EIP.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"IERC20Metadata":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the optional metadata functions from the ERC20 standard.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":\"IERC20Metadata\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol":{"IERC20Permit":{"abi":[{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't need to send a transaction, and thus is not required to hold Ether at all. ==== Security Considerations There are two important considerations concerning the use of `permit`. The first is that a valid permit signature expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be considered as an intention to spend the allowance in any specific way. The second is that because permits have built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be generally recommended is: ```solidity function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public { try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {} doThing(..., value); } function doThing(..., uint256 value) public { token.safeTransferFrom(msg.sender, address(this), value); ... } ``` Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also {SafeERC20-safeTransferFrom}). Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so contracts should have entry points that don't rely on permit.\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"nonces(address)\":{\"details\":\"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":\"IERC20Permit\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"SafeERC20":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"currentAllowance","type":"uint256"},{"internalType":"uint256","name":"requestedDecrease","type":"uint256"}],"name":"SafeERC20FailedDecreaseAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212202d84903a7d88d39beea6e8c10e7299cd816b0bde2b5e6443ed9adc8d7885d05564736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2D DUP5 SWAP1 GASPRICE PUSH30 0x88D39BEEA6E8C10E7299CD816B0BDE2B5E6443ED9ADC8D7885D05564736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"751:5018:26:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212202d84903a7d88d39beea6e8c10e7299cd816b0bde2b5e6443ed9adc8d7885d05564736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2D DUP5 SWAP1 GASPRICE PUSH30 0x88D39BEEA6E8C10E7299CD816B0BDE2B5E6443ED9ADC8D7885D05564736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"751:5018:26:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentAllowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requestedDecrease\",\"type\":\"uint256\"}],\"name\":\"SafeERC20FailedDecreaseAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers around ERC20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\",\"errors\":{\"SafeERC20FailedDecreaseAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failed `decreaseAllowance` request.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"SafeERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Address.sol":{"Address":{"abi":[{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212207308dc04867882e716a35b4e93fd57711740b1913fb9480b2ee92ca52acf78a664736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH20 0x8DC04867882E716A35B4E93FD57711740B1913F 0xB9 BASEFEE SIGNEXTEND 0x2E 0xE9 0x2C 0xA5 0x2A 0xCF PUSH25 0xA664736F6C634300081B003300000000000000000000000000 ","sourceMap":"195:6066:27:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212207308dc04867882e716a35b4e93fd57711740b1913fb9480b2ee92ca52acf78a664736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH20 0x8DC04867882E716A35B4E93FD57711740B1913F 0xB9 BASEFEE SIGNEXTEND 0x2E 0xE9 0x2C 0xA5 0x2A 0xCF PUSH25 0xA664736F6C634300081B003300000000000000000000000000 ","sourceMap":"195:6066:27:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"SafeCast":{"abi":[{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntDowncast","type":"error"},{"inputs":[{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntToUint","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintToInt","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220c8c1339c0f0f32d1cd42e01b472992f3fdb072f8c07de7950d5d5c048b0f797464736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC8 0xC1 CALLER SWAP13 0xF 0xF ORIGIN 0xD1 0xCD TIMESTAMP 0xE0 SHL SELFBALANCE 0x29 SWAP3 RETURN REVERT 0xB0 PUSH19 0xF8C07DE7950D5D5C048B0F797464736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"764:33927:28:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220c8c1339c0f0f32d1cd42e01b472992f3fdb072f8c07de7950d5d5c048b0f797464736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC8 0xC1 CALLER SWAP13 0xF 0xF ORIGIN 0xD1 0xCD TIMESTAMP 0xE0 SHL SELFBALANCE 0x29 SWAP3 RETURN REVERT 0xB0 PUSH19 0xF8C07DE7950D5D5C048B0F797464736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"764:33927:28:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntToUint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers over Solidity's uintXX/intXX casting operators with added overflow checks. Downcasting from uint256/int256 in Solidity does not revert on overflow. This can easily result in undesired exploitation or bugs, since developers usually assume that overflows raise errors. `SafeCast` restores this intuition by reverting the transaction when such an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.\",\"errors\":{\"SafeCastOverflowedIntDowncast(uint8,int256)\":[{\"details\":\"Value doesn't fit in an int of `bits` size.\"}],\"SafeCastOverflowedIntToUint(int256)\":[{\"details\":\"An int value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":\"SafeCast\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]}},\"version\":1}"}},"contracts/ProtocolFeeControllerMigration.sol":{"ProtocolFeeControllerMigration":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"_vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyMigrated","type":"error"},{"inputs":[],"name":"InvalidFeeController","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"finalizeMigration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMigrationComplete","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"name":"migratePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"newFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"_newFeeController","type":"address"}],"name":"setNewFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"finalize_allocation":{"entryPoint":451,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"linkReferences":{},"object":"610120604081815234610169578161149a803803809161001f82856101c3565b833960209384918101031261016957516001600160a01b0390818116808203610169573060805260a0829052835163217cb6f560e21b81528581600481855afa9081156101b957908692915f9161017e575b509260049360c05260e05284519283809263aaabadc560e01b82525afa938415610174575f94610137575b5050610100921682525161129f91826101fb8339608051826111f2015260a051828181610b3801528181610fc90152611052015260c0518281816105b50152818161062a01526110f2015260e05182818160ba0152610c5b0152518181816104290152818161048c015281816104ea0152818161052b01528181610740015281816107a301528181610801015281816108430152610c960152f35b9080929450813d831161016d575b61014f81836101c3565b810103126101695751828116810361016957915f8061009c565b5f80fd5b503d610145565b83513d5f823e3d90fd5b8381939492503d83116101b2575b61019681836101c3565b8101031261016957519083821682036101695785916004610071565b503d61018c565b85513d5f823e3d90fd5b601f909101601f19168101906001600160401b038211908210176101e657604052565b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f905f358060e01c91826351da116d14611116575081637ea3a964146110c6578163851c1bb3146110765781638d928af814611026578163aaabadc514610f76578163b78b608714610ab357508063b8350e2714610167578063bba1af4714610106578063d7128084146100e15763fbfa77cf1461008e575f80fd5b346100de57806003193601126100de57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b80fd5b50346100de57806003193601126100de5760ff6020915460a01c166040519015158152f35b50346100de5760206003193601126100de5760043573ffffffffffffffffffffffffffffffffffffffff8116809103610163577fffffffffffffffffffffffff000000000000000000000000000000000000000082541617815580f35b5080fd5b50346100de5760206003193601126100de5767ffffffffffffffff6004358181116108a457366023820112156108a4578060040135918211610a86578160051b90604051926101b96020840185611186565b835260246020840192820101903682116108db57602401915b818310610a59575050507f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c610a315760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d815460ff8160a01c16610a09578060ff849260a81c1615610314575b50805b82518110156102ed5773ffffffffffffffffffffffffffffffffffffffff808354169060208360051b8601015116813b156102e95783916024839260405194859384927f0874327f00000000000000000000000000000000000000000000000000000000845260048401525af19081156102de5783916102ca575b5050600101610245565b6102d390611145565b61016357815f6102c0565b6040513d85823e3d90fd5b8380fd5b50807f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d80f35b8075010000000000000000000000000000000000000000007fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff73ffffffffffffffffffffffffffffffffffffffff9316178355166040517f851c1bb3000000000000000000000000000000000000000000000000000000008082527f8a3c5c69000000000000000000000000000000000000000000000000000000006004830152602082602481865afa9182156108bc5784926109d1575b5060209060246040518095819382527fa93df2a40000000000000000000000000000000000000000000000000000000060048301525afa9182156102de57839261099a575b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156108a4576040517f2f2ff15d0000000000000000000000000000000000000000000000000000000080825260048201839052306024830152908481604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af19081156108f3578591610986575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156102e957604051908152600481018390523060248201528381604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af19081156108bc578491610972575b50506040517f7869ee1800000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156108bc57849161093d575b50604051907f55fb76af00000000000000000000000000000000000000000000000000000000825260208260048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9182156108f3578592610902575b5073ffffffffffffffffffffffffffffffffffffffff85541690813b156108fe5785916024839260405194859384927f8a3c5c6900000000000000000000000000000000000000000000000000000000845260048401525af19081156108f35785916108df575b505473ffffffffffffffffffffffffffffffffffffffff1690813b156108db5784916024839260405194859384927fa93df2a400000000000000000000000000000000000000000000000000000000845260048401525af19081156108bc5784916108c7575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156108a4576040517f36568abe0000000000000000000000000000000000000000000000000000000080825260048201929092523060248201528381604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af19081156108bc5784916108a8575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156108a45760405190815260048101919091523060248201528181604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af1801561089957156102425761088e90611145565b61016357815f610242565b6040513d84823e3d90fd5b8280fd5b6108b190611145565b6108a457825f6107e8565b6040513d86823e3d90fd5b6108d090611145565b6108a457825f610727565b8480fd5b6108e890611145565b6102e957835f6106c1565b6040513d87823e3d90fd5b8580fd5b945090506020843d602011610935575b8161091f60209383611186565b8101031261093157859351905f61065a565b5f80fd5b3d9150610912565b9350506020833d60201161096a575b8161095960209383611186565b81010312610931578492515f6105e5565b3d915061094c565b61097b90611145565b6108a457825f610570565b61098f90611145565b6102e957835f6104d1565b925090506020823d6020116109c9575b816109b760209383611186565b8101031261093157839151905f610411565b3d91506109aa565b935090506020833d602011610a01575b816109ee60209383611186565b81010312610931579151849260206103cc565b3d91506109e1565b6004837fca1c3cbc000000000000000000000000000000000000000000000000000000008152fd5b6004827f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b823573ffffffffffffffffffffffffffffffffffffffff811681036108fe578152602092830192016101d2565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b905034610931575f600319360112610931577fffffffff00000000000000000000000000000000000000000000000000000000610af091166111c7565b9073ffffffffffffffffffffffffffffffffffffffff604051927faaabadc50000000000000000000000000000000000000000000000000000000084526020938481600481867f0000000000000000000000000000000000000000000000000000000000000000165afa8015610e8457839286925f92610f44575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa908115610e84575f91610f0e575b5015610ee6575f5460ff8160a01c16610ebe577fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000175f556040517f851c1bb30000000000000000000000000000000000000000000000000000000081527f2d7713890000000000000000000000000000000000000000000000000000000060048201819052937f000000000000000000000000000000000000000000000000000000000000000083168183602481845afa928315610e84575f93610e8f575b50837f00000000000000000000000000000000000000000000000000000000000000001693843b15610931576040517f2f2ff15d000000000000000000000000000000000000000000000000000000008152600481018590523060248201525f81604481838a5af18015610e8457610e71575b50958596865416823b15610e6d5760248792836040519586948593845260048401525af19081156108f3578591610e59575b5050823b15610e0f576040517f36568abe000000000000000000000000000000000000000000000000000000008082526004820193909352306024820152848160448183885af19081156108f3578591610e45575b50506040517fa217fddf0000000000000000000000000000000000000000000000000000000081528181600481875afa9182156108f3578592610e14575b5050823b15610e0f5760405191825260048201523060248201529082908290604490829084905af1801561089957610dff5750f35b610e0890611145565b6100de5780f35b505050fd5b8195508092503d8311610e3e575b610e2c8183611186565b81010312610931578392515f80610dca565b503d610e22565b610e4e90611145565b610e0f57835f610d8c565b610e6290611145565b610e0f57835f610d37565b8680fd5b610e7c919650611145565b5f945f610d05565b6040513d5f823e3d90fd5b9092508181813d8311610eb7575b610ea78183611186565b810103126109315751915f610c92565b503d610e9d565b7fca1c3cbc000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90508381813d8311610f3d575b610f258183611186565b8101031261093157518015158103610931575f610bbc565b503d610f1b565b6064919250610f6890843d8611610f6f575b610f608183611186565b81019061123d565b9190610b6b565b503d610f56565b34610931575f600319360112610931576040517faaabadc500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa908115610e84576020925f92611007575b5060405191168152f35b61101f919250833d8511610f6f57610f608183611186565b9083610ffd565b34610931575f60031936011261093157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610931576020600319360112610931576004357fffffffff0000000000000000000000000000000000000000000000000000000081168103610931576110be6020916111c7565b604051908152f35b34610931575f60031936011261093157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610931575f6003193601126109315760209073ffffffffffffffffffffffffffffffffffffffff5f54168152f35b67ffffffffffffffff811161115957604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761115957604052565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176111595760405251902090565b90816020910312610931575173ffffffffffffffffffffffffffffffffffffffff81168103610931579056fea2646970667358221220af9ff083a28d67ed36b023f4ca0b05ea33e3e5dc407c20a91f546c2d81aaa95764736f6c634300081b0033","opcodes":"PUSH2 0x120 PUSH1 0x40 DUP2 DUP2 MSTORE CALLVALUE PUSH2 0x169 JUMPI DUP2 PUSH2 0x149A DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x1F DUP3 DUP6 PUSH2 0x1C3 JUMP JUMPDEST DUP4 CODECOPY PUSH1 0x20 SWAP4 DUP5 SWAP2 DUP2 ADD SUB SLT PUSH2 0x169 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP2 AND DUP1 DUP3 SUB PUSH2 0x169 JUMPI ADDRESS PUSH1 0x80 MSTORE PUSH1 0xA0 DUP3 SWAP1 MSTORE DUP4 MLOAD PUSH4 0x217CB6F5 PUSH1 0xE2 SHL DUP2 MSTORE DUP6 DUP2 PUSH1 0x4 DUP2 DUP6 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1B9 JUMPI SWAP1 DUP7 SWAP3 SWAP2 PUSH0 SWAP2 PUSH2 0x17E JUMPI JUMPDEST POP SWAP3 PUSH1 0x4 SWAP4 PUSH1 0xC0 MSTORE PUSH1 0xE0 MSTORE DUP5 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH4 0xAAABADC5 PUSH1 0xE0 SHL DUP3 MSTORE GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x174 JUMPI PUSH0 SWAP5 PUSH2 0x137 JUMPI JUMPDEST POP POP PUSH2 0x100 SWAP3 AND DUP3 MSTORE MLOAD PUSH2 0x129F SWAP2 DUP3 PUSH2 0x1FB DUP4 CODECOPY PUSH1 0x80 MLOAD DUP3 PUSH2 0x11F2 ADD MSTORE PUSH1 0xA0 MLOAD DUP3 DUP2 DUP2 PUSH2 0xB38 ADD MSTORE DUP2 DUP2 PUSH2 0xFC9 ADD MSTORE PUSH2 0x1052 ADD MSTORE PUSH1 0xC0 MLOAD DUP3 DUP2 DUP2 PUSH2 0x5B5 ADD MSTORE DUP2 DUP2 PUSH2 0x62A ADD MSTORE PUSH2 0x10F2 ADD MSTORE PUSH1 0xE0 MLOAD DUP3 DUP2 DUP2 PUSH1 0xBA ADD MSTORE PUSH2 0xC5B ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0x429 ADD MSTORE DUP2 DUP2 PUSH2 0x48C ADD MSTORE DUP2 DUP2 PUSH2 0x4EA ADD MSTORE DUP2 DUP2 PUSH2 0x52B ADD MSTORE DUP2 DUP2 PUSH2 0x740 ADD MSTORE DUP2 DUP2 PUSH2 0x7A3 ADD MSTORE DUP2 DUP2 PUSH2 0x801 ADD MSTORE DUP2 DUP2 PUSH2 0x843 ADD MSTORE PUSH2 0xC96 ADD MSTORE RETURN JUMPDEST SWAP1 DUP1 SWAP3 SWAP5 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x16D JUMPI JUMPDEST PUSH2 0x14F DUP2 DUP4 PUSH2 0x1C3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x169 JUMPI MLOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x169 JUMPI SWAP2 PUSH0 DUP1 PUSH2 0x9C JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x145 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 DUP2 SWAP4 SWAP5 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x1B2 JUMPI JUMPDEST PUSH2 0x196 DUP2 DUP4 PUSH2 0x1C3 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x169 JUMPI MLOAD SWAP1 DUP4 DUP3 AND DUP3 SUB PUSH2 0x169 JUMPI DUP6 SWAP2 PUSH1 0x4 PUSH2 0x71 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x18C JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x1E6 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP1 PUSH0 CALLDATALOAD DUP1 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x51DA116D EQ PUSH2 0x1116 JUMPI POP DUP2 PUSH4 0x7EA3A964 EQ PUSH2 0x10C6 JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0x1076 JUMPI DUP2 PUSH4 0x8D928AF8 EQ PUSH2 0x1026 JUMPI DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0xF76 JUMPI DUP2 PUSH4 0xB78B6087 EQ PUSH2 0xAB3 JUMPI POP DUP1 PUSH4 0xB8350E27 EQ PUSH2 0x167 JUMPI DUP1 PUSH4 0xBBA1AF47 EQ PUSH2 0x106 JUMPI DUP1 PUSH4 0xD7128084 EQ PUSH2 0xE1 JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x8E JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xDE JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDE JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xDE JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDE JUMPI PUSH1 0xFF PUSH1 0x20 SWAP2 SLOAD PUSH1 0xA0 SHR AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0xDE JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDE JUMPI PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x163 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR DUP2 SSTORE DUP1 RETURN JUMPDEST POP DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xDE JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDE JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x8A4 JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x8A4 JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP2 DUP3 GT PUSH2 0xA86 JUMPI DUP2 PUSH1 0x5 SHL SWAP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1B9 PUSH1 0x20 DUP5 ADD DUP6 PUSH2 0x1186 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x24 PUSH1 0x20 DUP5 ADD SWAP3 DUP3 ADD ADD SWAP1 CALLDATASIZE DUP3 GT PUSH2 0x8DB JUMPI PUSH1 0x24 ADD SWAP2 JUMPDEST DUP2 DUP4 LT PUSH2 0xA59 JUMPI POP POP POP PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH2 0xA31 JUMPI PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP2 SLOAD PUSH1 0xFF DUP2 PUSH1 0xA0 SHR AND PUSH2 0xA09 JUMPI DUP1 PUSH1 0xFF DUP5 SWAP3 PUSH1 0xA8 SHR AND ISZERO PUSH2 0x314 JUMPI JUMPDEST POP DUP1 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x2ED JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 SLOAD AND SWAP1 PUSH1 0x20 DUP4 PUSH1 0x5 SHL DUP7 ADD ADD MLOAD AND DUP2 EXTCODESIZE ISZERO PUSH2 0x2E9 JUMPI DUP4 SWAP2 PUSH1 0x24 DUP4 SWAP3 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x874327F00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2DE JUMPI DUP4 SWAP2 PUSH2 0x2CA JUMPI JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x245 JUMP JUMPDEST PUSH2 0x2D3 SWAP1 PUSH2 0x1145 JUMP JUMPDEST PUSH2 0x163 JUMPI DUP2 PUSH0 PUSH2 0x2C0 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP6 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 DUP1 REVERT JUMPDEST POP DUP1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP1 RETURN JUMPDEST DUP1 PUSH22 0x1000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 AND OR DUP4 SSTORE AND PUSH1 0x40 MLOAD PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH32 0x8A3C5C6900000000000000000000000000000000000000000000000000000000 PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x8BC JUMPI DUP5 SWAP3 PUSH2 0x9D1 JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH1 0x24 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 DUP3 MSTORE PUSH32 0xA93DF2A400000000000000000000000000000000000000000000000000000000 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x2DE JUMPI DUP4 SWAP3 PUSH2 0x99A JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x8A4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH1 0x4 DUP3 ADD DUP4 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE SWAP1 DUP5 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x8F3 JUMPI DUP6 SWAP2 PUSH2 0x986 JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x2E9 JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP4 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x8BC JUMPI DUP5 SWAP2 PUSH2 0x972 JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x7869EE1800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0x4 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x8BC JUMPI DUP5 SWAP2 PUSH2 0x93D JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 PUSH32 0x55FB76AF00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x8F3 JUMPI DUP6 SWAP3 PUSH2 0x902 JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 SLOAD AND SWAP1 DUP2 EXTCODESIZE ISZERO PUSH2 0x8FE JUMPI DUP6 SWAP2 PUSH1 0x24 DUP4 SWAP3 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x8A3C5C6900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x8F3 JUMPI DUP6 SWAP2 PUSH2 0x8DF JUMPI JUMPDEST POP SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 EXTCODESIZE ISZERO PUSH2 0x8DB JUMPI DUP5 SWAP2 PUSH1 0x24 DUP4 SWAP3 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0xA93DF2A400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x8BC JUMPI DUP5 SWAP2 PUSH2 0x8C7 JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x8A4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH1 0x4 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP4 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x8BC JUMPI DUP5 SWAP2 PUSH2 0x8A8 JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x8A4 JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL DUP1 ISZERO PUSH2 0x899 JUMPI ISZERO PUSH2 0x242 JUMPI PUSH2 0x88E SWAP1 PUSH2 0x1145 JUMP JUMPDEST PUSH2 0x163 JUMPI DUP2 PUSH0 PUSH2 0x242 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP1 REVERT JUMPDEST PUSH2 0x8B1 SWAP1 PUSH2 0x1145 JUMP JUMPDEST PUSH2 0x8A4 JUMPI DUP3 PUSH0 PUSH2 0x7E8 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP7 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x8D0 SWAP1 PUSH2 0x1145 JUMP JUMPDEST PUSH2 0x8A4 JUMPI DUP3 PUSH0 PUSH2 0x727 JUMP JUMPDEST DUP5 DUP1 REVERT JUMPDEST PUSH2 0x8E8 SWAP1 PUSH2 0x1145 JUMP JUMPDEST PUSH2 0x2E9 JUMPI DUP4 PUSH0 PUSH2 0x6C1 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP8 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST SWAP5 POP SWAP1 POP PUSH1 0x20 DUP5 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x935 JUMPI JUMPDEST DUP2 PUSH2 0x91F PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1186 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x931 JUMPI DUP6 SWAP4 MLOAD SWAP1 PUSH0 PUSH2 0x65A JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x912 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 DUP4 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x96A JUMPI JUMPDEST DUP2 PUSH2 0x959 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1186 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x931 JUMPI DUP5 SWAP3 MLOAD PUSH0 PUSH2 0x5E5 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x94C JUMP JUMPDEST PUSH2 0x97B SWAP1 PUSH2 0x1145 JUMP JUMPDEST PUSH2 0x8A4 JUMPI DUP3 PUSH0 PUSH2 0x570 JUMP JUMPDEST PUSH2 0x98F SWAP1 PUSH2 0x1145 JUMP JUMPDEST PUSH2 0x2E9 JUMPI DUP4 PUSH0 PUSH2 0x4D1 JUMP JUMPDEST SWAP3 POP SWAP1 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x9C9 JUMPI JUMPDEST DUP2 PUSH2 0x9B7 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1186 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x931 JUMPI DUP4 SWAP2 MLOAD SWAP1 PUSH0 PUSH2 0x411 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x9AA JUMP JUMPDEST SWAP4 POP SWAP1 POP PUSH1 0x20 DUP4 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xA01 JUMPI JUMPDEST DUP2 PUSH2 0x9EE PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1186 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x931 JUMPI SWAP2 MLOAD DUP5 SWAP3 PUSH1 0x20 PUSH2 0x3CC JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x9E1 JUMP JUMPDEST PUSH1 0x4 DUP4 PUSH32 0xCA1C3CBC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP3 PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x8FE JUMPI DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x1D2 JUMP JUMPDEST PUSH1 0x24 DUP4 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x931 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x931 JUMPI PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0xAF0 SWAP2 AND PUSH2 0x11C7 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP3 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP2 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0xE84 JUMPI DUP4 SWAP3 DUP7 SWAP3 PUSH0 SWAP3 PUSH2 0xF44 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xE84 JUMPI PUSH0 SWAP2 PUSH2 0xF0E JUMPI JUMPDEST POP ISZERO PUSH2 0xEE6 JUMPI PUSH0 SLOAD PUSH1 0xFF DUP2 PUSH1 0xA0 SHR AND PUSH2 0xEBE JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH21 0x10000000000000000000000000000000000000000 OR PUSH0 SSTORE PUSH1 0x40 MLOAD PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH32 0x2D77138900000000000000000000000000000000000000000000000000000000 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE SWAP4 PUSH32 0x0 DUP4 AND DUP2 DUP4 PUSH1 0x24 DUP2 DUP5 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xE84 JUMPI PUSH0 SWAP4 PUSH2 0xE8F JUMPI JUMPDEST POP DUP4 PUSH32 0x0 AND SWAP4 DUP5 EXTCODESIZE ISZERO PUSH2 0x931 JUMPI PUSH1 0x40 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x44 DUP2 DUP4 DUP11 GAS CALL DUP1 ISZERO PUSH2 0xE84 JUMPI PUSH2 0xE71 JUMPI JUMPDEST POP SWAP6 DUP6 SWAP7 DUP7 SLOAD AND DUP3 EXTCODESIZE ISZERO PUSH2 0xE6D JUMPI PUSH1 0x24 DUP8 SWAP3 DUP4 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x8F3 JUMPI DUP6 SWAP2 PUSH2 0xE59 JUMPI JUMPDEST POP POP DUP3 EXTCODESIZE ISZERO PUSH2 0xE0F JUMPI PUSH1 0x40 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH1 0x4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP5 DUP2 PUSH1 0x44 DUP2 DUP4 DUP9 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x8F3 JUMPI DUP6 SWAP2 PUSH2 0xE45 JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xA217FDDF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP2 PUSH1 0x4 DUP2 DUP8 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x8F3 JUMPI DUP6 SWAP3 PUSH2 0xE14 JUMPI JUMPDEST POP POP DUP3 EXTCODESIZE ISZERO PUSH2 0xE0F JUMPI PUSH1 0x40 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP1 DUP3 SWAP1 DUP3 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL DUP1 ISZERO PUSH2 0x899 JUMPI PUSH2 0xDFF JUMPI POP RETURN JUMPDEST PUSH2 0xE08 SWAP1 PUSH2 0x1145 JUMP JUMPDEST PUSH2 0xDE JUMPI DUP1 RETURN JUMPDEST POP POP POP REVERT JUMPDEST DUP2 SWAP6 POP DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xE3E JUMPI JUMPDEST PUSH2 0xE2C DUP2 DUP4 PUSH2 0x1186 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x931 JUMPI DUP4 SWAP3 MLOAD PUSH0 DUP1 PUSH2 0xDCA JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xE22 JUMP JUMPDEST PUSH2 0xE4E SWAP1 PUSH2 0x1145 JUMP JUMPDEST PUSH2 0xE0F JUMPI DUP4 PUSH0 PUSH2 0xD8C JUMP JUMPDEST PUSH2 0xE62 SWAP1 PUSH2 0x1145 JUMP JUMPDEST PUSH2 0xE0F JUMPI DUP4 PUSH0 PUSH2 0xD37 JUMP JUMPDEST DUP7 DUP1 REVERT JUMPDEST PUSH2 0xE7C SWAP2 SWAP7 POP PUSH2 0x1145 JUMP JUMPDEST PUSH0 SWAP5 PUSH0 PUSH2 0xD05 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP3 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0xEB7 JUMPI JUMPDEST PUSH2 0xEA7 DUP2 DUP4 PUSH2 0x1186 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x931 JUMPI MLOAD SWAP2 PUSH0 PUSH2 0xC92 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xE9D JUMP JUMPDEST PUSH32 0xCA1C3CBC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP DUP4 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0xF3D JUMPI JUMPDEST PUSH2 0xF25 DUP2 DUP4 PUSH2 0x1186 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x931 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x931 JUMPI PUSH0 PUSH2 0xBBC JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xF1B JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0xF68 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xF6F JUMPI JUMPDEST PUSH2 0xF60 DUP2 DUP4 PUSH2 0x1186 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x123D JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0xB6B JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xF56 JUMP JUMPDEST CALLVALUE PUSH2 0x931 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x931 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xE84 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0x1007 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x101F SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0xF6F JUMPI PUSH2 0xF60 DUP2 DUP4 PUSH2 0x1186 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0xFFD JUMP JUMPDEST CALLVALUE PUSH2 0x931 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x931 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x931 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x931 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x931 JUMPI PUSH2 0x10BE PUSH1 0x20 SWAP2 PUSH2 0x11C7 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x931 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x931 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x931 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x931 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND DUP2 MSTORE RETURN JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1159 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1159 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1159 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x931 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x931 JUMPI SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAF SWAP16 CREATE DUP4 LOG2 DUP14 PUSH8 0xED36B023F4CA0B05 0xEA CALLER 0xE3 0xE5 0xDC BLOCKHASH PUSH29 0x20A91F546C2D81AAA95764736F6C634300081B00330000000000000000 ","sourceMap":"2261:5873:29:-:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;2261:5873:29;;;;;;;;;971:4:20;1347:46:13;;923:14:14;;;;2261:5873:29;;-1:-1:-1;;;4005:33:29;;;2261:5873;4005:33;2261:5873;4005:33;;;;;;;;;;;;-1:-1:-1;4005:33:29;;;-1:-1:-1;3986:52:29;;4005:33;3986:52;;;2261:5873;4049:14;2261:5873;;;;;;;;;4113:21;;;;;;;;;-1:-1:-1;4113:21:29;;;-1:-1:-1;4074:62:29;;;2261:5873;;4074:62;;2261:5873;;;;;;;1347:46:13;2261:5873:29;;;;;923:14:14;2261:5873:29;;;;;;;;;;;;;;;3986:52;2261:5873;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4113:21;;;;;;;;;;;;;;;;;:::i;:::-;;;2261:5873;;;;;;;;;;;;4113:21;;;;;2261:5873;-1:-1:-1;2261:5873:29;;4113:21;;;;;;2261:5873;;;-1:-1:-1;2261:5873:29;;;;;4005:33;;;;;;;;;;;;;;;;;:::i;:::-;;;2261:5873;;;;;;;;;;;;;4005:33;;;;;;;;;;;2261:5873;;;-1:-1:-1;2261:5873:29;;;;;;;;;;-1:-1:-1;;2261:5873:29;;;;-1:-1:-1;;;;;2261:5873:29;;;;;;;;;;:::o;:::-;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":4669,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bytes32_address":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"finalize_allocation":{"entryPoint":4486,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_10260":{"entryPoint":4421,"id":null,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":4551,"id":2480,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"2420":[{"length":32,"start":4594}],"2503":[{"length":32,"start":2872},{"length":32,"start":4041},{"length":32,"start":4178}],"8980":[{"length":32,"start":1461},{"length":32,"start":1578},{"length":32,"start":4338}],"8986":[{"length":32,"start":186},{"length":32,"start":3163}],"8989":[{"length":32,"start":1065},{"length":32,"start":1164},{"length":32,"start":1258},{"length":32,"start":1323},{"length":32,"start":1856},{"length":32,"start":1955},{"length":32,"start":2049},{"length":32,"start":2115},{"length":32,"start":3222}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f905f358060e01c91826351da116d14611116575081637ea3a964146110c6578163851c1bb3146110765781638d928af814611026578163aaabadc514610f76578163b78b608714610ab357508063b8350e2714610167578063bba1af4714610106578063d7128084146100e15763fbfa77cf1461008e575f80fd5b346100de57806003193601126100de57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b80fd5b50346100de57806003193601126100de5760ff6020915460a01c166040519015158152f35b50346100de5760206003193601126100de5760043573ffffffffffffffffffffffffffffffffffffffff8116809103610163577fffffffffffffffffffffffff000000000000000000000000000000000000000082541617815580f35b5080fd5b50346100de5760206003193601126100de5767ffffffffffffffff6004358181116108a457366023820112156108a4578060040135918211610a86578160051b90604051926101b96020840185611186565b835260246020840192820101903682116108db57602401915b818310610a59575050507f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c610a315760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d815460ff8160a01c16610a09578060ff849260a81c1615610314575b50805b82518110156102ed5773ffffffffffffffffffffffffffffffffffffffff808354169060208360051b8601015116813b156102e95783916024839260405194859384927f0874327f00000000000000000000000000000000000000000000000000000000845260048401525af19081156102de5783916102ca575b5050600101610245565b6102d390611145565b61016357815f6102c0565b6040513d85823e3d90fd5b8380fd5b50807f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d80f35b8075010000000000000000000000000000000000000000007fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff73ffffffffffffffffffffffffffffffffffffffff9316178355166040517f851c1bb3000000000000000000000000000000000000000000000000000000008082527f8a3c5c69000000000000000000000000000000000000000000000000000000006004830152602082602481865afa9182156108bc5784926109d1575b5060209060246040518095819382527fa93df2a40000000000000000000000000000000000000000000000000000000060048301525afa9182156102de57839261099a575b5073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156108a4576040517f2f2ff15d0000000000000000000000000000000000000000000000000000000080825260048201839052306024830152908481604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af19081156108f3578591610986575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156102e957604051908152600481018390523060248201528381604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af19081156108bc578491610972575b50506040517f7869ee1800000000000000000000000000000000000000000000000000000000815260208160048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156108bc57849161093d575b50604051907f55fb76af00000000000000000000000000000000000000000000000000000000825260208260048173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9182156108f3578592610902575b5073ffffffffffffffffffffffffffffffffffffffff85541690813b156108fe5785916024839260405194859384927f8a3c5c6900000000000000000000000000000000000000000000000000000000845260048401525af19081156108f35785916108df575b505473ffffffffffffffffffffffffffffffffffffffff1690813b156108db5784916024839260405194859384927fa93df2a400000000000000000000000000000000000000000000000000000000845260048401525af19081156108bc5784916108c7575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156108a4576040517f36568abe0000000000000000000000000000000000000000000000000000000080825260048201929092523060248201528381604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af19081156108bc5784916108a8575b505073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156108a45760405190815260048101919091523060248201528181604481837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af1801561089957156102425761088e90611145565b61016357815f610242565b6040513d84823e3d90fd5b8280fd5b6108b190611145565b6108a457825f6107e8565b6040513d86823e3d90fd5b6108d090611145565b6108a457825f610727565b8480fd5b6108e890611145565b6102e957835f6106c1565b6040513d87823e3d90fd5b8580fd5b945090506020843d602011610935575b8161091f60209383611186565b8101031261093157859351905f61065a565b5f80fd5b3d9150610912565b9350506020833d60201161096a575b8161095960209383611186565b81010312610931578492515f6105e5565b3d915061094c565b61097b90611145565b6108a457825f610570565b61098f90611145565b6102e957835f6104d1565b925090506020823d6020116109c9575b816109b760209383611186565b8101031261093157839151905f610411565b3d91506109aa565b935090506020833d602011610a01575b816109ee60209383611186565b81010312610931579151849260206103cc565b3d91506109e1565b6004837fca1c3cbc000000000000000000000000000000000000000000000000000000008152fd5b6004827f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b823573ffffffffffffffffffffffffffffffffffffffff811681036108fe578152602092830192016101d2565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b905034610931575f600319360112610931577fffffffff00000000000000000000000000000000000000000000000000000000610af091166111c7565b9073ffffffffffffffffffffffffffffffffffffffff604051927faaabadc50000000000000000000000000000000000000000000000000000000084526020938481600481867f0000000000000000000000000000000000000000000000000000000000000000165afa8015610e8457839286925f92610f44575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa908115610e84575f91610f0e575b5015610ee6575f5460ff8160a01c16610ebe577fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000175f556040517f851c1bb30000000000000000000000000000000000000000000000000000000081527f2d7713890000000000000000000000000000000000000000000000000000000060048201819052937f000000000000000000000000000000000000000000000000000000000000000083168183602481845afa928315610e84575f93610e8f575b50837f00000000000000000000000000000000000000000000000000000000000000001693843b15610931576040517f2f2ff15d000000000000000000000000000000000000000000000000000000008152600481018590523060248201525f81604481838a5af18015610e8457610e71575b50958596865416823b15610e6d5760248792836040519586948593845260048401525af19081156108f3578591610e59575b5050823b15610e0f576040517f36568abe000000000000000000000000000000000000000000000000000000008082526004820193909352306024820152848160448183885af19081156108f3578591610e45575b50506040517fa217fddf0000000000000000000000000000000000000000000000000000000081528181600481875afa9182156108f3578592610e14575b5050823b15610e0f5760405191825260048201523060248201529082908290604490829084905af1801561089957610dff5750f35b610e0890611145565b6100de5780f35b505050fd5b8195508092503d8311610e3e575b610e2c8183611186565b81010312610931578392515f80610dca565b503d610e22565b610e4e90611145565b610e0f57835f610d8c565b610e6290611145565b610e0f57835f610d37565b8680fd5b610e7c919650611145565b5f945f610d05565b6040513d5f823e3d90fd5b9092508181813d8311610eb7575b610ea78183611186565b810103126109315751915f610c92565b503d610e9d565b7fca1c3cbc000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90508381813d8311610f3d575b610f258183611186565b8101031261093157518015158103610931575f610bbc565b503d610f1b565b6064919250610f6890843d8611610f6f575b610f608183611186565b81019061123d565b9190610b6b565b503d610f56565b34610931575f600319360112610931576040517faaabadc500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa908115610e84576020925f92611007575b5060405191168152f35b61101f919250833d8511610f6f57610f608183611186565b9083610ffd565b34610931575f60031936011261093157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610931576020600319360112610931576004357fffffffff0000000000000000000000000000000000000000000000000000000081168103610931576110be6020916111c7565b604051908152f35b34610931575f60031936011261093157602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610931575f6003193601126109315760209073ffffffffffffffffffffffffffffffffffffffff5f54168152f35b67ffffffffffffffff811161115957604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761115957604052565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176111595760405251902090565b90816020910312610931575173ffffffffffffffffffffffffffffffffffffffff81168103610931579056fea2646970667358221220af9ff083a28d67ed36b023f4ca0b05ea33e3e5dc407c20a91f546c2d81aaa95764736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP1 PUSH0 CALLDATALOAD DUP1 PUSH1 0xE0 SHR SWAP2 DUP3 PUSH4 0x51DA116D EQ PUSH2 0x1116 JUMPI POP DUP2 PUSH4 0x7EA3A964 EQ PUSH2 0x10C6 JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0x1076 JUMPI DUP2 PUSH4 0x8D928AF8 EQ PUSH2 0x1026 JUMPI DUP2 PUSH4 0xAAABADC5 EQ PUSH2 0xF76 JUMPI DUP2 PUSH4 0xB78B6087 EQ PUSH2 0xAB3 JUMPI POP DUP1 PUSH4 0xB8350E27 EQ PUSH2 0x167 JUMPI DUP1 PUSH4 0xBBA1AF47 EQ PUSH2 0x106 JUMPI DUP1 PUSH4 0xD7128084 EQ PUSH2 0xE1 JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x8E JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xDE JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDE JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xDE JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDE JUMPI PUSH1 0xFF PUSH1 0x20 SWAP2 SLOAD PUSH1 0xA0 SHR AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0xDE JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDE JUMPI PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x163 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR DUP2 SSTORE DUP1 RETURN JUMPDEST POP DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xDE JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xDE JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x8A4 JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x8A4 JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP2 DUP3 GT PUSH2 0xA86 JUMPI DUP2 PUSH1 0x5 SHL SWAP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1B9 PUSH1 0x20 DUP5 ADD DUP6 PUSH2 0x1186 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x24 PUSH1 0x20 DUP5 ADD SWAP3 DUP3 ADD ADD SWAP1 CALLDATASIZE DUP3 GT PUSH2 0x8DB JUMPI PUSH1 0x24 ADD SWAP2 JUMPDEST DUP2 DUP4 LT PUSH2 0xA59 JUMPI POP POP POP PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH2 0xA31 JUMPI PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP2 SLOAD PUSH1 0xFF DUP2 PUSH1 0xA0 SHR AND PUSH2 0xA09 JUMPI DUP1 PUSH1 0xFF DUP5 SWAP3 PUSH1 0xA8 SHR AND ISZERO PUSH2 0x314 JUMPI JUMPDEST POP DUP1 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x2ED JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 SLOAD AND SWAP1 PUSH1 0x20 DUP4 PUSH1 0x5 SHL DUP7 ADD ADD MLOAD AND DUP2 EXTCODESIZE ISZERO PUSH2 0x2E9 JUMPI DUP4 SWAP2 PUSH1 0x24 DUP4 SWAP3 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x874327F00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2DE JUMPI DUP4 SWAP2 PUSH2 0x2CA JUMPI JUMPDEST POP POP PUSH1 0x1 ADD PUSH2 0x245 JUMP JUMPDEST PUSH2 0x2D3 SWAP1 PUSH2 0x1145 JUMP JUMPDEST PUSH2 0x163 JUMPI DUP2 PUSH0 PUSH2 0x2C0 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP6 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 DUP1 REVERT JUMPDEST POP DUP1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP1 RETURN JUMPDEST DUP1 PUSH22 0x1000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 AND OR DUP4 SSTORE AND PUSH1 0x40 MLOAD PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH32 0x8A3C5C6900000000000000000000000000000000000000000000000000000000 PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x8BC JUMPI DUP5 SWAP3 PUSH2 0x9D1 JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH1 0x24 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 DUP3 MSTORE PUSH32 0xA93DF2A400000000000000000000000000000000000000000000000000000000 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x2DE JUMPI DUP4 SWAP3 PUSH2 0x99A JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x8A4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH1 0x4 DUP3 ADD DUP4 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE SWAP1 DUP5 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x8F3 JUMPI DUP6 SWAP2 PUSH2 0x986 JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x2E9 JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP4 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x8BC JUMPI DUP5 SWAP2 PUSH2 0x972 JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0x7869EE1800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 PUSH1 0x4 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x8BC JUMPI DUP5 SWAP2 PUSH2 0x93D JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 PUSH32 0x55FB76AF00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x8F3 JUMPI DUP6 SWAP3 PUSH2 0x902 JUMPI JUMPDEST POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 SLOAD AND SWAP1 DUP2 EXTCODESIZE ISZERO PUSH2 0x8FE JUMPI DUP6 SWAP2 PUSH1 0x24 DUP4 SWAP3 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x8A3C5C6900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x8F3 JUMPI DUP6 SWAP2 PUSH2 0x8DF JUMPI JUMPDEST POP SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 DUP2 EXTCODESIZE ISZERO PUSH2 0x8DB JUMPI DUP5 SWAP2 PUSH1 0x24 DUP4 SWAP3 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0xA93DF2A400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x8BC JUMPI DUP5 SWAP2 PUSH2 0x8C7 JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x8A4 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH1 0x4 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP4 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x8BC JUMPI DUP5 SWAP2 PUSH2 0x8A8 JUMPI JUMPDEST POP POP PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x8A4 JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x44 DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL DUP1 ISZERO PUSH2 0x899 JUMPI ISZERO PUSH2 0x242 JUMPI PUSH2 0x88E SWAP1 PUSH2 0x1145 JUMP JUMPDEST PUSH2 0x163 JUMPI DUP2 PUSH0 PUSH2 0x242 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP1 REVERT JUMPDEST PUSH2 0x8B1 SWAP1 PUSH2 0x1145 JUMP JUMPDEST PUSH2 0x8A4 JUMPI DUP3 PUSH0 PUSH2 0x7E8 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP7 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x8D0 SWAP1 PUSH2 0x1145 JUMP JUMPDEST PUSH2 0x8A4 JUMPI DUP3 PUSH0 PUSH2 0x727 JUMP JUMPDEST DUP5 DUP1 REVERT JUMPDEST PUSH2 0x8E8 SWAP1 PUSH2 0x1145 JUMP JUMPDEST PUSH2 0x2E9 JUMPI DUP4 PUSH0 PUSH2 0x6C1 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP8 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST SWAP5 POP SWAP1 POP PUSH1 0x20 DUP5 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x935 JUMPI JUMPDEST DUP2 PUSH2 0x91F PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1186 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x931 JUMPI DUP6 SWAP4 MLOAD SWAP1 PUSH0 PUSH2 0x65A JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x912 JUMP JUMPDEST SWAP4 POP POP PUSH1 0x20 DUP4 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x96A JUMPI JUMPDEST DUP2 PUSH2 0x959 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1186 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x931 JUMPI DUP5 SWAP3 MLOAD PUSH0 PUSH2 0x5E5 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x94C JUMP JUMPDEST PUSH2 0x97B SWAP1 PUSH2 0x1145 JUMP JUMPDEST PUSH2 0x8A4 JUMPI DUP3 PUSH0 PUSH2 0x570 JUMP JUMPDEST PUSH2 0x98F SWAP1 PUSH2 0x1145 JUMP JUMPDEST PUSH2 0x2E9 JUMPI DUP4 PUSH0 PUSH2 0x4D1 JUMP JUMPDEST SWAP3 POP SWAP1 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x9C9 JUMPI JUMPDEST DUP2 PUSH2 0x9B7 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1186 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x931 JUMPI DUP4 SWAP2 MLOAD SWAP1 PUSH0 PUSH2 0x411 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x9AA JUMP JUMPDEST SWAP4 POP SWAP1 POP PUSH1 0x20 DUP4 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xA01 JUMPI JUMPDEST DUP2 PUSH2 0x9EE PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1186 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x931 JUMPI SWAP2 MLOAD DUP5 SWAP3 PUSH1 0x20 PUSH2 0x3CC JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x9E1 JUMP JUMPDEST PUSH1 0x4 DUP4 PUSH32 0xCA1C3CBC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP3 PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST DUP3 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x8FE JUMPI DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 ADD SWAP3 ADD PUSH2 0x1D2 JUMP JUMPDEST PUSH1 0x24 DUP4 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x931 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x931 JUMPI PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0xAF0 SWAP2 AND PUSH2 0x11C7 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP3 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP2 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0xE84 JUMPI DUP4 SWAP3 DUP7 SWAP3 PUSH0 SWAP3 PUSH2 0xF44 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xE84 JUMPI PUSH0 SWAP2 PUSH2 0xF0E JUMPI JUMPDEST POP ISZERO PUSH2 0xEE6 JUMPI PUSH0 SLOAD PUSH1 0xFF DUP2 PUSH1 0xA0 SHR AND PUSH2 0xEBE JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH21 0x10000000000000000000000000000000000000000 OR PUSH0 SSTORE PUSH1 0x40 MLOAD PUSH32 0x851C1BB300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH32 0x2D77138900000000000000000000000000000000000000000000000000000000 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE SWAP4 PUSH32 0x0 DUP4 AND DUP2 DUP4 PUSH1 0x24 DUP2 DUP5 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xE84 JUMPI PUSH0 SWAP4 PUSH2 0xE8F JUMPI JUMPDEST POP DUP4 PUSH32 0x0 AND SWAP4 DUP5 EXTCODESIZE ISZERO PUSH2 0x931 JUMPI PUSH1 0x40 MLOAD PUSH32 0x2F2FF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP6 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x44 DUP2 DUP4 DUP11 GAS CALL DUP1 ISZERO PUSH2 0xE84 JUMPI PUSH2 0xE71 JUMPI JUMPDEST POP SWAP6 DUP6 SWAP7 DUP7 SLOAD AND DUP3 EXTCODESIZE ISZERO PUSH2 0xE6D JUMPI PUSH1 0x24 DUP8 SWAP3 DUP4 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x8F3 JUMPI DUP6 SWAP2 PUSH2 0xE59 JUMPI JUMPDEST POP POP DUP3 EXTCODESIZE ISZERO PUSH2 0xE0F JUMPI PUSH1 0x40 MLOAD PUSH32 0x36568ABE00000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE PUSH1 0x4 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE DUP5 DUP2 PUSH1 0x44 DUP2 DUP4 DUP9 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x8F3 JUMPI DUP6 SWAP2 PUSH2 0xE45 JUMPI JUMPDEST POP POP PUSH1 0x40 MLOAD PUSH32 0xA217FDDF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP2 PUSH1 0x4 DUP2 DUP8 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x8F3 JUMPI DUP6 SWAP3 PUSH2 0xE14 JUMPI JUMPDEST POP POP DUP3 EXTCODESIZE ISZERO PUSH2 0xE0F JUMPI PUSH1 0x40 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP1 DUP3 SWAP1 DUP3 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL DUP1 ISZERO PUSH2 0x899 JUMPI PUSH2 0xDFF JUMPI POP RETURN JUMPDEST PUSH2 0xE08 SWAP1 PUSH2 0x1145 JUMP JUMPDEST PUSH2 0xDE JUMPI DUP1 RETURN JUMPDEST POP POP POP REVERT JUMPDEST DUP2 SWAP6 POP DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0xE3E JUMPI JUMPDEST PUSH2 0xE2C DUP2 DUP4 PUSH2 0x1186 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x931 JUMPI DUP4 SWAP3 MLOAD PUSH0 DUP1 PUSH2 0xDCA JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xE22 JUMP JUMPDEST PUSH2 0xE4E SWAP1 PUSH2 0x1145 JUMP JUMPDEST PUSH2 0xE0F JUMPI DUP4 PUSH0 PUSH2 0xD8C JUMP JUMPDEST PUSH2 0xE62 SWAP1 PUSH2 0x1145 JUMP JUMPDEST PUSH2 0xE0F JUMPI DUP4 PUSH0 PUSH2 0xD37 JUMP JUMPDEST DUP7 DUP1 REVERT JUMPDEST PUSH2 0xE7C SWAP2 SWAP7 POP PUSH2 0x1145 JUMP JUMPDEST PUSH0 SWAP5 PUSH0 PUSH2 0xD05 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP3 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0xEB7 JUMPI JUMPDEST PUSH2 0xEA7 DUP2 DUP4 PUSH2 0x1186 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x931 JUMPI MLOAD SWAP2 PUSH0 PUSH2 0xC92 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xE9D JUMP JUMPDEST PUSH32 0xCA1C3CBC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP DUP4 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0xF3D JUMPI JUMPDEST PUSH2 0xF25 DUP2 DUP4 PUSH2 0x1186 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x931 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x931 JUMPI PUSH0 PUSH2 0xBBC JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xF1B JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0xF68 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xF6F JUMPI JUMPDEST PUSH2 0xF60 DUP2 DUP4 PUSH2 0x1186 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x123D JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0xB6B JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xF56 JUMP JUMPDEST CALLVALUE PUSH2 0x931 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x931 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xE84 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0x1007 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x101F SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0xF6F JUMPI PUSH2 0xF60 DUP2 DUP4 PUSH2 0x1186 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0xFFD JUMP JUMPDEST CALLVALUE PUSH2 0x931 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x931 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x931 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x931 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x931 JUMPI PUSH2 0x10BE PUSH1 0x20 SWAP2 PUSH2 0x11C7 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x931 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x931 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x931 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x931 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND DUP2 MSTORE RETURN JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1159 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1159 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1159 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x931 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x931 JUMPI SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAF SWAP16 CREATE DUP4 LOG2 DUP14 PUSH8 0xED36B023F4CA0B05 0xEA CALLER 0xE3 0xE5 0xDC BLOCKHASH PUSH29 0x20A91F546C2D81AAA95764736F6C634300081B00330000000000000000 ","sourceMap":"2261:5873:29:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1473:26:20;2261:5873:29;1473:26:20;;;2261:5873:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2261:5873:29;;;;;;;;;2475:29;2261:5873;;;;;;;;;;;;;-1:-1:-1;;2261:5873:29;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2261:5873:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2261:5873:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;2806:53:18;;;551:66:17;2806:53:18;1316:93:17;;1529:4;551:66;3051:52:18;2261:5873:29;;;;;;;5135:76;;2261:5873;;;;;;;;5305:141;;2261:5873;5948:13;;5981:3;2261:5873;;5963:16;;;;;2261:5873;;;;;;;;;;;;;;;6061:70;;;;;2261:5873;;;;;;;6061:70;;;;;2261:5873;6061:70;;2261:5873;6061:70;;2261:5873;6061:70;;;;;;;;;;;5981:3;;;1529:4:17;2261:5873:29;5948:13;;6061:70;;;;:::i;:::-;2261:5873;;6061:70;;;;;2261:5873;;;;;;;;;6061:70;2261:5873;;;5963:16;;3051:52:18;551:66:17;3051:52:18;2261:5873:29;;5305:141;2261:5873;;;;;;;;;;;;;6698:144;;;6766:66;2261:5873;6698:144;;2261:5873;;6698:144;2261:5873;6698:144;;;;;;;;;;;;;5305:141;2261:5873;;;;;;6876:145;;;;;;6944:67;2261:5873;6876:145;;2261:5873;6876:145;;;;;;;;;;;5305:141;7032:11;2261:5873;7032:11;2261:5873;7032:49;;;;2261:5873;;;7032:49;;;2261:5873;7032:49;;2261:5873;;;7075:4;2261:5873;;;;;7075:4;2261:5873;;;7075:4;7032:11;2261:5873;;7032:49;;;;;;;;;;;5305:141;7032:11;;2261:5873;7032:11;2261:5873;7091:50;;;;2261:5873;;7091:50;;;2261:5873;7091:50;;2261:5873;;;7075:4;2261:5873;;;;7075:4;2261:5873;;;7075:4;7032:11;2261:5873;;7091:50;;;;;;;;;;;5305:141;2261:5873;;;;;7233:53;;2261:5873;7233:16;2261:5873;7233:16;2261:5873;7233:16;2261:5873;7233:53;;;;;;;;;;;5305:141;2261:5873;;;7331:54;2261:5873;7331:54;;2261:5873;7233:16;2261:5873;7233:16;2261:5873;7233:16;2261:5873;7331:54;;;;;;;;;;;5305:141;2261:5873;;;;;7396:76;;;;;;2261:5873;;;;;;;7396:76;;;;;6766:66;7396:76;;2261:5873;7396:76;;2261:5873;7396:76;;;;;;;;;;;5305:141;-1:-1:-1;2261:5873:29;;;;7482:78;;;;;2261:5873;;;;;;;7482:78;;;;;6944:67;7482:78;;2261:5873;7482:78;;2261:5873;7482:78;;;;;;;;;;;5305:141;7032:11;;2261:5873;7032:11;2261:5873;7602:52;;;;2261:5873;;;7602:52;;;2261:5873;7602:52;;2261:5873;;;;7075:4;2261:5873;;;;;;;;;7032:11;2261:5873;;7602:52;;;;;;;;;;;5305:141;7032:11;;2261:5873;7032:11;2261:5873;7664:53;;;;2261:5873;;7664:53;;;2261:5873;7664:53;;2261:5873;;;;7075:4;2261:5873;;;;;;;;;7032:11;2261:5873;;7664:53;;;;;;;5305:141;7664:53;;;;:::i;:::-;2261:5873;;7664:53;;5305:141;;7664:53;2261:5873;;;;;;;;;7664:53;2261:5873;;;7602:52;;;;:::i;:::-;2261:5873;;7602:52;;;;;2261:5873;;;;;;;;;7482:78;;;;:::i;:::-;2261:5873;;7482:78;;;;;2261:5873;;;7396:76;;;;:::i;:::-;2261:5873;;7396:76;;;;;2261:5873;;;;;;;;;7396:76;2261:5873;;;7331:54;;;;;2261:5873;7331:54;;2261:5873;7331:54;;;;;;2261:5873;7331:54;;;:::i;:::-;;;2261:5873;;;;;;;7331:54;;;;2261:5873;;;;7331:54;;;-1:-1:-1;7331:54:29;;7233:53;;;;2261:5873;7233:53;;2261:5873;7233:53;;;;;;2261:5873;7233:53;;;:::i;:::-;;;2261:5873;;;;;;;7233:53;;;;;;-1:-1:-1;7233:53:29;;7091:50;;;;:::i;:::-;2261:5873;;7091:50;;;;7032:49;;;;:::i;:::-;2261:5873;;7032:49;;;;6876:145;;;;;2261:5873;6876:145;;2261:5873;6876:145;;;;;;2261:5873;6876:145;;;:::i;:::-;;;2261:5873;;;;;;;6876:145;;;;;;;-1:-1:-1;6876:145:29;;6698:144;;;;;2261:5873;6698:144;;2261:5873;6698:144;;;;;;2261:5873;6698:144;;;:::i;:::-;;;2261:5873;;;;;;;;;6698:144;;;;;-1:-1:-1;6698:144:29;;5135:76;2261:5873;5183:17;;;;;1316:93:17;2261:5873:29;1368:30:17;;;;;2261:5873:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2261:5873:29;;;;;1774:7:13;1762:20;1774:7;;1762:20;:::i;:::-;2261:5873:29;;;;1231:22:14;2261:5873:29;1231:22:14;;;:6;;;2261:5873:29;1231:6:14;;;2261:5873:29;1231:22:14;;;;;;;;;;2261:5873:29;1231:22:14;;;2261:5873:29;;;;;;1231:64:14;;;;;2261:5873:29;1231:64:14;;2261:5873:29;1231:64:14;;2261:5873:29;1820:10:13;2261:5873:29;;;;1289:4:14;2261:5873:29;;;;;1231:64:14;;;;;;;2261:5873:29;1231:64:14;;;2261:5873:29;1797:34:13;;1793:90;;2261:5873:29;;;;;;;6223:76;;2261:5873;;;;;;;;;7813:112;;7870:45;2261:5873;7813:112;;2261:5873;;;7870:45;7837:5;2261:5873;;;;;;;7813:112;;;;;;;2261:5873;7813:112;;;2261:5873;7936:11;;;2261:5873;7936:58;;;;;;2261:5873;;;7936:58;;2261:5873;7936:58;;2261:5873;;;1289:4:14;2261:5873:29;;;;-1:-1:-1;2261:5873:29;;;-1:-1:-1;7936:58:29;;;;;;;;;2261:5873;;;;;;;;8005:48;;;;;2261:5873;;;;;;8005:48;;;;;;;2261:5873;8005:48;;2261:5873;8005:48;;;;;;;;;;;2261:5873;8064:61;;;;;;;2261:5873;;;8064:61;;;2261:5873;8064:61;;2261:5873;;;;1289:4:14;2261:5873:29;;;;;;;;;8064:61;;;;;;;;;;;;2261:5873;;;;;;6482:32;;;;2261:5873;6482:32;;;;;;;;;;;;;2261:5873;6457:73;;;;;;;2261:5873;;6457:73;;;2261:5873;6457:73;;2261:5873;1289:4:14;2261:5873:29;;;;;;;;;;;;;;;6457:73;;;;;;;;2261:5873;;6457:73;;;;:::i;:::-;2261:5873;;6457:73;2261:5873;6457:73;2261:5873;;;;6482:32;;;;;;;;;;;;;;;;;:::i;:::-;;;2261:5873;;;;;;;6482:32;;;;;;;;;8064:61;;;;:::i;:::-;2261:5873;;8064:61;;;;8005:48;;;;:::i;:::-;2261:5873;;8005:48;;;;;2261:5873;;;7936:58;;;;;;:::i;:::-;2261:5873;7936:58;;;;;2261:5873;;;;;;;;;7813:112;;;;;;;;;;;;;;;;;:::i;:::-;;;2261:5873;;;;;7813:112;;;;;;;;;6223:76;6271:17;2261:5873;6271:17;2261:5873;;6271:17;1793:90:13;1854:18;2261:5873:29;1854:18:13;2261:5873:29;;1854:18:13;1231:64:14;;;;;;;;;;;;;;;;:::i;:::-;;;2261:5873:29;;;;;;;;;;;;1231:64:14;;;;;;;;:22;2261:5873:29;1231:22:14;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;2261:5873:29;;;;;-1:-1:-1;;2261:5873:29;;;;;;;;1473:26:20;;2261:5873:29;1473:26:20;2261:5873:29;;;1019:6:14;2261:5873:29;;1473:26:20;;;;;;;;;2261:5873:29;1473:26:20;;;2261:5873:29;;;;;;;;;1473:26:20;;;;;;;;;;;;;;;:::i;:::-;;;;;2261:5873:29;;;;;-1:-1:-1;;2261:5873:29;;;;;;;;;1019:6:14;2261:5873:29;;;;;;;;;-1:-1:-1;;2261:5873:29;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;2261:5873:29;;;;;;;;;2360:56;2261:5873;;;;;;;;;-1:-1:-1;;2261:5873:29;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1931:430:13:-;2261:5873:29;;;2303:50:13;;;2320:22;;2261:5873:29;;;;;;;2303:50:13;;;2261:5873:29;;;;;;;;;;;;;;;2293:61:13;;1931:430;:::o;2261:5873:29:-;;;;;;;;;;;;;;;;;;:::o"},"methodIdentifiers":{"finalizeMigration()":"b78b6087","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getVault()":"8d928af8","isMigrationComplete()":"d7128084","migratePools(address[])":"b8350e27","newFeeController()":"51da116d","oldFeeController()":"7ea3a964","setNewFeeController(address)":"bba1af47","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"_vault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AlreadyMigrated\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidFeeController\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"finalizeMigration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isMigrationComplete\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"name\":\"migratePools\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"newFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"oldFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"_newFeeController\",\"type\":\"address\"}],\"name\":\"setNewFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These events enable tracking pool protocol fees under all circumstances (in particular, when protocol fees are initially turned off). After deployment, call `migratePools` as many times as necessary. The list must be generated externally, as pools are not iterable on-chain. The batch interface allows an unlimited number of pools to be migrated; it's possible there might be too many to migrate in a single call. The first time `migratePools` is called, the contract will first copy the global (pool-independent data). This could be done in a separate stage, but we're trying to keep the contract simple, vs. duplicating the staging coordinator system of v2 just yet. When all pools have been migrated, call `finalizeMigration` to disable further migration, update the address in the Vault, and renounce all permissions. While `migratePools` is permissionless, this call must be permissioned to prevent premature termination in case multiple transactions are required to migrate all the pools. Associated with `20250221-protocol-fee-controller-migration` (fork test only).\",\"errors\":{\"InvalidFeeController()\":[{\"details\":\"ProtocolFeeController contracts return the address of the Vault they were deployed with. Ensure that both the old and new controllers reference the same vault.\"}]},\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isMigrationComplete()\":{\"details\":\"It can only be done once.\",\"returns\":{\"_0\":\"isComplete True if `finalizeMigration` has been called.\"}},\"migratePools(address[])\":{\"details\":\"THis can be called multiple times, if there are too many pools for a single transaction. Note that the first time this is called, it will migrate the global fee percentages, then proceed with the first set of pools.\",\"params\":{\"pools\":\"The set of pools to be migrated in this call\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AlreadyMigrated()\":[{\"notice\":\"Migration can only be performed once.\"}],\"InvalidFeeController()\":[{\"notice\":\"Attempt to deploy this contract with invalid parameters.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isMigrationComplete()\":{\"notice\":\"Check whether migration has been completed.\"},\"migratePools(address[])\":{\"notice\":\"Migrate pools from the old fee controller to the new one.\"}},\"notice\":\"Migrate from the original ProtocolFeeController to one with extra events.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/ProtocolFeeControllerMigration.sol\":\"ProtocolFeeControllerMigration\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/governance-scripts/IBasicAuthorizer.sol\":{\"keccak256\":\"0x434eda908f66d99d967c2c2b233337227c331cd79655ec5b0ddcc76db7a20606\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b0b6c4bc095113dfbaeb9d9a6f9602f0f1a79b075c82d5ccccff7a1b67af1ce8\",\"dweb:/ipfs/QmaePfy8V5U9UFqkDtdTvPjJLmo1XEorPrC1fMVB35n86Y\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol\":{\"keccak256\":\"0x89bd8b60aa203c8aa72af6e88671af68f4407a26dd3e0541b0e4dc387fd0081e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://411eb9ee6df963198102de5ae597c1f1377b0a45be23f17d38463f2eeefa2b0a\",\"dweb:/ipfs/QmcEaMawADJEyLswG5hhvhQuTNV3XUxBVu3YZCbJzQkoJ7\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\":{\"keccak256\":\"0x11b6e6c5d818d4f7c2ad5afbbd226230deb0f1c42b5cac2159dd66a8d0c9a1b6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://25e64898f2101a3c2492bdf08837b049859306df52fdfc925588cbcd39c01b02\",\"dweb:/ipfs/QmVC7Qs2X7XLwdswtp7Tzu5bYvGQyGfpL3YkYr6tJBHaEn\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x4910eb69dc3e3141803a36fb176349ae3d774f4a9811e4d486c44bf6a8e4e055\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://afec051b387a1dad075acfbe0093b443e9e5827e29f7b960af3c1b69645aa290\",\"dweb:/ipfs/QmdLcyhmHCiEyVbFsVByyjEdUn9pDTzVAPNyBpdH2YEs4Y\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"contracts/ProtocolFeeControllerMigration.sol\":{\"keccak256\":\"0xfbed62949fb87d7c6b4a71ff61f1efa1b7c30f0a1f65f6a4c02635571629b23e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7375596362c0d5e9ce58b79c8209d9c500f831dc957ccf42a98c0f87f32d1bb4\",\"dweb:/ipfs/QmdG7DioPXXiLoQGU53TgUzdvRhM4u81M8wGDc8RLdRhJU\"]}},\"version\":1}"}}}}} \ No newline at end of file diff --git a/v3/scripts/20250221-protocol-fee-controller-migration/build-info/WeightedPoolFactory.json b/v3/scripts/20250221-protocol-fee-controller-migration/build-info/WeightedPoolFactory.json new file mode 100644 index 00000000..17cf8eb1 --- /dev/null +++ b/v3/scripts/20250221-protocol-fee-controller-migration/build-info/WeightedPoolFactory.json @@ -0,0 +1 @@ +{"id":"4a7168426535c7d0dcf8b229cc4b862c","_format":"hh-sol-build-info-1","solcVersion":"0.8.27","solcLongVersion":"0.8.27+commit.40a35a09","input":{"language":"Solidity","sources":{"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { TokenInfo } from \"../vault/VaultTypes.sol\";\n\n/**\n * @notice Convenience interface for pools, to get easy access to information stored in the Vault.\n * Intended mostly for off-chain requests; pools do not need to implement this to work properly.\n */\ninterface IPoolInfo {\n /**\n * @notice Gets the tokens registered in the pool.\n * @return tokens List of tokens in the pool, sorted in registration order\n */\n function getTokens() external view returns (IERC20[] memory tokens);\n\n /**\n * @notice Gets the raw data for the pool: tokens, token info, raw balances, and last live balances.\n * @return tokens Pool tokens, sorted in token registration order\n * @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n * @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n * @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order\n */\n function getTokenInfo()\n external\n view\n returns (\n IERC20[] memory tokens,\n TokenInfo[] memory tokenInfo,\n uint256[] memory balancesRaw,\n uint256[] memory lastBalancesLiveScaled18\n );\n\n /**\n * @notice Gets the current live balances of the pool as fixed point, 18-decimal numbers.\n * @dev Note that live balances will not necessarily be accurate if the pool is in Recovery Mode.\n * Withdrawals in Recovery Mode do not make external calls (including those necessary for updating live balances),\n * so if there are withdrawals, raw and live balances will be out of sync until Recovery Mode is disabled.\n *\n * @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n */\n function getCurrentLiveBalances() external view returns (uint256[] memory balancesLiveScaled18);\n\n /**\n * @notice Fetches the static swap fee percentage for the pool.\n * @return staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage\n */\n function getStaticSwapFeePercentage() external view returns (uint256 staticSwapFeePercentage);\n\n /**\n * @notice Gets the aggregate swap and yield fee percentages for a pool.\n * @dev These are determined by the current protocol and pool creator fees, set in the `ProtocolFeeController`.\n * @return aggregateSwapFeePercentage The aggregate percentage fee applied to swaps\n * @return aggregateYieldFeePercentage The aggregate percentage fee applied to yield\n */\n function getAggregateFeePercentages()\n external\n view\n returns (uint256 aggregateSwapFeePercentage, uint256 aggregateYieldFeePercentage);\n}\n"},"@balancer-labs/v3-interfaces/contracts/pool-weighted/ILBPool.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IBasePool } from \"../vault/IBasePool.sol\";\n\n/**\n * @notice Structure containing LBP-specific parameters.\n * @dev These parameters are immutable, representing the configuration of a single token sale, running from `startTime`\n * to `endTime`. Swaps may only occur while the sale is active. If `blockProjectTokenSwapsIn` is true, users may only\n * purchase project tokens with the reserve currency.\n *\n * @param owner The account with permission to change the static swap fee percentage\n * @param projectToken The token being sold\n * @param reserveToken The token used to buy the project token (e.g., USDC or WETH)\n * @param projectTokenStartWeight The project token weight at the start of the sale (normally higher than the reserve)\n * @param reserveTokenStartWeight The reserve token weight at the start of the sale (normally lower than the project)\n * @param projectTokenEndWeight The project token weight at the end of the sale (should go down over time)\n * @param reserveTokenEndWeight The reserve token weight at the end of the sale (should go up over time)\n * @param startTime The timestamp at the beginning of the sale - initialization/funding must occur before this time\n * @param endTime the timestamp at the end of the sale - withdrawal of proceeds becomes possible after this time\n * @param blockProjectTokenSwapsIn If set, the pool only supports one-way \"token distribution\"\n */\nstruct LBPParams {\n address owner;\n IERC20 projectToken;\n IERC20 reserveToken;\n uint256 projectTokenStartWeight;\n uint256 reserveTokenStartWeight;\n uint256 projectTokenEndWeight;\n uint256 reserveTokenEndWeight;\n uint256 startTime;\n uint256 endTime;\n bool blockProjectTokenSwapsIn;\n}\n\n/**\n * @notice Liquidity Bootstrapping Pool data that cannot change after deployment.\n * @param tokens Pool tokens, sorted in token registration order\n * @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n * calculations. FP(1) for 18-decimal tokens\n * @param startWeights Starting weights for the LBP, sorted in token registration order\n * @param endWeights Ending weights for the LBP, sorted in token registration order\n * @param startTime Timestamp of the start of the sale, when all liquidity is present and swaps are enabled\n * @param endTime Timestamp of the end of the sale, when swaps are disabled, and liquidity can be removed\n * @param projectTokenIndex The index of token (in `tokens`) being distributed through the sale\n * @param reserveTokenIndex The index of the token (in `tokens`) used to purchase project tokens\n * @param isProjectTokenSwapInBlocked If true, it is impossible to sell the project token back into the pool\n */\nstruct LBPoolImmutableData {\n IERC20[] tokens;\n uint256[] decimalScalingFactors;\n uint256[] startWeights;\n uint256[] endWeights;\n uint256 startTime;\n uint256 endTime;\n uint256 projectTokenIndex;\n uint256 reserveTokenIndex;\n bool isProjectTokenSwapInBlocked;\n}\n\n/**\n * @notice Snapshot of current Weighted Pool data that can change.\n * @dev Note that live balances will not necessarily be accurate if the pool is in Recovery Mode. Withdrawals\n * in Recovery Mode do not make external calls (including those necessary for updating live balances), so if\n * there are withdrawals, raw and live balances will be out of sync until Recovery Mode is disabled.\n *\n * @param balancesLiveScaled18 18-decimal FP token balances, sorted in token registration order\n * @param normalizedWeights Current token weights, sorted in token registration order\n * @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage\n * @param totalSupply The current total supply of the pool tokens (BPT)\n * @param isPoolInitialized If false, the pool has not been seeded with initial liquidity, so operations will revert\n * @param isPoolPaused If true, the pool is paused, and all non-recovery-mode state-changing operations will revert\n * @param isPoolInRecoveryMode If true, Recovery Mode withdrawals are enabled, and live balances may be inaccurate\n * @param isSwapEnabled If true, the sale is ongoing, and swaps are enabled (unless the pool is paused)\n */\nstruct LBPoolDynamicData {\n uint256[] balancesLiveScaled18;\n uint256[] normalizedWeights;\n uint256 staticSwapFeePercentage;\n uint256 totalSupply;\n bool isPoolInitialized;\n bool isPoolPaused;\n bool isPoolInRecoveryMode;\n bool isSwapEnabled;\n}\n\n/**\n * @notice Full LBP interface - base pool plus immutable/dynamic field getters.\n * @dev There is some redundancy here to cover all use cases. Project and reserve tokens can be read directly, if that\n * is all that's needed. Those who already need the more complete data in `LBPoolImmutableData` can recover these\n * values without further calls by indexing into the `tokens` array with `projectTokenIndex` and `reserveTokenIndex`.\n */\ninterface ILBPool is IBasePool {\n /**\n * @notice Get dynamic pool data relevant to swap/add/remove calculations.\n * @return data A struct containing all dynamic LBP parameters\n */\n function getLBPoolDynamicData() external view returns (LBPoolDynamicData memory data);\n\n /**\n * @notice Get immutable pool data relevant to swap/add/remove calculations.\n * @return data A struct containing all immutable LBP parameters\n */\n function getLBPoolImmutableData() external view returns (LBPoolImmutableData memory data);\n\n /**\n * @notice Get the project token for this LBP.\n * @dev This is the token being distributed through the sale. It is also available in the immutable data, but this\n * getter is provided as a convenience for those who only need the project token address.\n *\n * @return projectToken The address of the project token\n */\n function getProjectToken() external view returns (IERC20);\n\n /**\n * @notice Get the reserve token for this LBP.\n * @dev This is the token exchanged for the project token (usually a stablecoin or WETH). It is also available in\n * the immutable data, but this getter is provided as a convenience for those who only need the reserve token\n * address.\n *\n * @return reserveToken The address of the reserve token\n */\n function getReserveToken() external view returns (IERC20);\n}\n"},"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IBasePool } from \"../vault/IBasePool.sol\";\n\n/**\n * @notice Weighted Pool data that cannot change after deployment.\n * @param tokens Pool tokens, sorted in token registration order\n * @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n * calculations. FP(1) for 18-decimal tokens\n * @param normalizedWeights The token weights, sorted in token registration order\n */\nstruct WeightedPoolImmutableData {\n IERC20[] tokens;\n uint256[] decimalScalingFactors;\n uint256[] normalizedWeights;\n}\n\n/**\n * @notice Snapshot of current Weighted Pool data that can change.\n * @dev Note that live balances will not necessarily be accurate if the pool is in Recovery Mode. Withdrawals\n * in Recovery Mode do not make external calls (including those necessary for updating live balances), so if\n * there are withdrawals, raw and live balances will be out of sync until Recovery Mode is disabled.\n *\n * @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n * @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n * @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage\n * @param totalSupply The current total supply of the pool tokens (BPT)\n * @param isPoolInitialized If false, the pool has not been seeded with initial liquidity, so operations will revert\n * @param isPoolPaused If true, the pool is paused, and all non-recovery-mode state-changing operations will revert\n * @param isPoolInRecoveryMode If true, Recovery Mode withdrawals are enabled, and live balances may be inaccurate\n */\nstruct WeightedPoolDynamicData {\n uint256[] balancesLiveScaled18;\n uint256[] tokenRates;\n uint256 staticSwapFeePercentage;\n uint256 totalSupply;\n bool isPoolInitialized;\n bool isPoolPaused;\n bool isPoolInRecoveryMode;\n}\n\n/// @notice Full Weighted pool interface.\ninterface IWeightedPool is IBasePool {\n /// @notice Indicates that one of the pool tokens' weight is below the minimum allowed.\n error MinWeight();\n\n /// @notice Indicates that the sum of the pool tokens' weights is not FixedPoint.ONE.\n error NormalizedWeightInvariant();\n\n /**\n * @notice Get the normalized weights.\n * @return normalizedWeights The normalized weights, sorted in token registration order\n */\n function getNormalizedWeights() external view returns (uint256[] memory normalizedWeights);\n\n /**\n * @notice Get dynamic pool data relevant to swap/add/remove calculations.\n * @return data A struct containing all dynamic weighted pool parameters\n */\n function getWeightedPoolDynamicData() external view returns (WeightedPoolDynamicData memory data);\n\n /**\n * @notice Get immutable pool data relevant to swap/add/remove calculations.\n * @return data A struct containing all immutable weighted pool parameters\n */\n function getWeightedPoolImmutableData() external view returns (WeightedPoolImmutableData memory data);\n}\n"},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Simple interface for permissioned calling of external functions.\ninterface IAuthentication {\n /// @notice The sender does not have permission to call a function.\n error SenderNotAllowed();\n\n /**\n * @notice Returns the action identifier associated with the external function described by `selector`.\n * @param selector The 4-byte selector of the permissioned function\n * @return actionId The computed actionId\n */\n function getActionId(bytes4 selector) external view returns (bytes32 actionId);\n}\n"},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IPoolVersion.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Simple interface to retrieve the version of pools deployed by a pool factory.\ninterface IPoolVersion {\n /**\n * @notice Returns a JSON representation of the deployed pool version containing name, version number and task ID.\n * @dev This is typically only useful in complex Pool deployment schemes, where multiple subsystems need to know\n * about each other. Note that this value will only be set at factory creation time.\n *\n * @return poolVersion A string representation of the pool version\n */\n function getPoolVersion() external view returns (string memory poolVersion);\n}\n"},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice General interface for token exchange rates.\ninterface IRateProvider {\n /**\n * @notice An 18 decimal fixed point number representing the exchange rate of one token to another related token.\n * @dev The meaning of this rate depends on the context. Note that there may be an error associated with a token\n * rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface\n * does not take a rounding direction or return an error, so great care must be taken when interpreting and using\n * rates in downstream computations.\n *\n * @return rate The current token rate\n */\n function getRate() external view returns (uint256 rate);\n}\n"},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Simple interface to retrieve the version of a deployed contract.\ninterface IVersion {\n /**\n * @notice Return arbitrary text representing the version of a contract.\n * @dev For standard Balancer contracts, returns a JSON representation of the contract version containing name,\n * version number and task ID. See real examples in the deployment repo; local tests just use plain text strings.\n *\n * @return version The version string corresponding to the current deployed contract\n */\n function version() external view returns (string memory);\n}\n"},"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/**\n * @notice Interface for WETH9.\n * See https://github.com/gnosis/canonical-weth/blob/0dd1ea3e295eef916d0c6223ec63141137d22d67/contracts/WETH9.sol\n */\ninterface IWETH is IERC20 {\n /**\n * @notice \"wrap\" native ETH to WETH.\n * @dev The amount is msg.value.\n */\n function deposit() external payable;\n\n /**\n * @notice \"unwrap\" WETH to native ETH.\n * @param amount The amount to withdraw\n */\n function withdraw(uint256 amount) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/test/IVaultAdminMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\ninterface IVaultAdminMock {\n function manualPauseVault() external;\n\n function manualUnpauseVault() external;\n\n function manualPausePool(address pool) external;\n\n function manualUnpausePool(address pool) external;\n\n function manualEnableRecoveryMode(address pool) external;\n\n function manualDisableRecoveryMode(address pool) external;\n\n function manualReentrancyInitializeBuffer(\n IERC4626 wrappedToken,\n uint256 amountUnderlying,\n uint256 amountWrapped,\n uint256 minIssuedShares,\n address sharesOwner\n ) external;\n\n /// @dev Adds liquidity to buffer unbalanced, so it can unbalance the buffer.\n function addLiquidityToBufferUnbalancedForTests(\n IERC4626 wrappedToken,\n uint256 underlyingAmount,\n uint256 wrappedAmount\n ) external;\n\n function manualReentrancyAddLiquidityToBuffer(\n IERC4626 wrappedToken,\n uint256 maxAmountUnderlyingInRaw,\n uint256 maxAmountWrappedInRaw,\n uint256 exactSharesToIssue,\n address sharesOwner\n ) external;\n\n function manualReentrancyRemoveLiquidityFromBufferHook(\n IERC4626 wrappedToken,\n uint256 sharesToRemove,\n uint256 minAmountUnderlyingOut,\n uint256 minAmountWrappedOut,\n address sharesOwner\n ) external;\n\n function manualReentrancyDisableRecoveryMode(address pool) external;\n\n function mockWithValidPercentage(uint256 percentage) external view;\n\n function mockEnsurePoolNotInRecoveryMode(address pool) external view;\n\n function manualMintBufferShares(IERC4626 wrappedToken, address to, uint256 amount) external;\n\n function manualBurnBufferShares(IERC4626 wrappedToken, address from, uint256 amount) external;\n\n function manualMintMinimumBufferSupplyReserve(IERC4626 wrappedToken) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/test/IVaultExtensionMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { TokenConfig, PoolRoleAccounts, LiquidityManagement } from \"../../contracts/vault/VaultTypes.sol\";\n\ninterface IVaultExtensionMock {\n // Used in tests to circumvent minimum swap fees.\n function manuallySetSwapFee(address pool, uint256 swapFeePercentage) external;\n\n function manualRegisterPoolReentrancy(\n address pool,\n TokenConfig[] memory tokenConfig,\n uint256 swapFeePercentage,\n uint32 pauseWindowEndTime,\n bool protocolFeeExempt,\n PoolRoleAccounts calldata roleAccounts,\n address poolHooksContract,\n LiquidityManagement calldata liquidityManagement\n ) external;\n\n function manualInitializePoolReentrancy(\n address pool,\n address to,\n IERC20[] memory tokens,\n uint256[] memory exactAmountsIn,\n uint256 minBptAmountOut,\n bytes memory userData\n ) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/test/IVaultMainMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IRateProvider } from \"../solidity-utils/helpers/IRateProvider.sol\";\nimport \"../vault/VaultTypes.sol\";\n\ninterface IVaultMainMock {\n function getPoolFactoryMock() external view returns (address);\n\n function burnERC20(address token, address from, uint256 amount) external;\n\n function mintERC20(address token, address to, uint256 amount) external;\n\n function manualRegisterPool(address pool, IERC20[] memory tokens) external;\n\n function manualRegisterPoolWithSwapFee(address pool, IERC20[] memory tokens, uint256 swapFeePercentage) external;\n\n function manualRegisterPoolPassThruTokens(address pool, IERC20[] memory tokens) external;\n\n function manualRegisterPoolAtTimestamp(\n address pool,\n IERC20[] memory tokens,\n uint32 timestamp,\n PoolRoleAccounts memory roleAccounts\n ) external;\n\n function manualSetPoolRegistered(address pool, bool status) external;\n\n function manualSetInitializedPool(address pool, bool isPoolInitialized) external;\n\n function manualSetPoolPaused(address, bool) external;\n\n function manualSetPoolPauseWindowEndTime(address, uint32) external;\n\n function manualSetVaultPaused(bool) external;\n\n function manualSetVaultState(bool, bool) external;\n\n function manualSetPoolTokenInfo(address, TokenConfig[] memory) external;\n\n function manualSetPoolTokenInfo(address, IERC20[] memory, TokenInfo[] memory) external;\n\n function manualSetPoolConfig(address pool, PoolConfig memory config) external;\n\n function manualSetHooksConfig(address pool, HooksConfig memory config) external;\n\n function manualSetStaticSwapFeePercentage(address pool, uint256 value) external;\n\n /// @dev Does not check the value against any min/max limits normally enforced by the pool.\n function manualUnsafeSetStaticSwapFeePercentage(address pool, uint256 value) external;\n\n function manualSetPoolTokens(address pool, IERC20[] memory tokens) external;\n\n function manualSetPoolTokensAndBalances(address, IERC20[] memory, uint256[] memory, uint256[] memory) external;\n\n function manualSetPoolBalances(address, uint256[] memory, uint256[] memory) external;\n\n function manualSetPoolConfigBits(address pool, PoolConfigBits config) external;\n\n function mockIsUnlocked() external view;\n\n function mockWithInitializedPool(address pool) external view;\n\n function ensurePoolNotPaused(address) external view;\n\n function ensureUnpausedAndGetVaultState(address) external view returns (VaultState memory);\n\n function internalGetBufferUnderlyingImbalance(IERC4626 wrappedToken) external view returns (int256);\n\n function internalGetBufferWrappedImbalance(IERC4626 wrappedToken) external view returns (int256);\n\n function getBufferTokenBalancesBytes(IERC4626 wrappedToken) external view returns (bytes32);\n\n function recoveryModeExit(address pool) external view;\n\n function loadPoolDataUpdatingBalancesAndYieldFees(\n address pool,\n Rounding roundingDirection\n ) external returns (PoolData memory);\n\n function loadPoolDataUpdatingBalancesAndYieldFeesReentrancy(\n address pool,\n Rounding roundingDirection\n ) external returns (PoolData memory);\n\n function manualWritePoolBalancesToStorage(address pool, PoolData memory poolData) external;\n\n function getRawBalances(address pool) external view returns (uint256[] memory balancesRaw);\n\n function getLastLiveBalances(address pool) external view returns (uint256[] memory lastBalancesLiveScaled18);\n\n function updateLiveTokenBalanceInPoolData(\n PoolData memory poolData,\n uint256 newRawBalance,\n Rounding roundingDirection,\n uint256 tokenIndex\n ) external pure returns (PoolData memory);\n\n function computeYieldFeesDue(\n PoolData memory poolData,\n uint256 lastLiveBalance,\n uint256 tokenIndex,\n uint256 aggregateYieldFeePercentage\n ) external pure returns (uint256);\n\n function guardedCheckEntered() external;\n\n function unguardedCheckNotEntered() external view;\n\n // Convenience functions for constructing TokenConfig arrays\n\n function buildTokenConfig(IERC20[] memory tokens) external view returns (TokenConfig[] memory tokenConfig);\n\n /// @dev Infers TokenType (STANDARD or WITH_RATE) from the presence or absence of the rate provider.\n function buildTokenConfig(\n IERC20[] memory tokens,\n IRateProvider[] memory rateProviders\n ) external view returns (TokenConfig[] memory tokenConfig);\n\n /// @dev Infers TokenType (STANDARD or WITH_RATE) from the presence or absence of the rate provider.\n function buildTokenConfig(\n IERC20[] memory tokens,\n IRateProvider[] memory rateProviders,\n bool[] memory yieldFeeFlags\n ) external view returns (TokenConfig[] memory tokenConfig);\n\n function buildTokenConfig(\n IERC20[] memory tokens,\n TokenType[] memory tokenTypes,\n IRateProvider[] memory rateProviders,\n bool[] memory yieldFeeFlags\n ) external view returns (TokenConfig[] memory tokenConfig);\n\n function accountDelta(IERC20 token, int256 delta) external;\n\n function supplyCredit(IERC20 token, uint256 credit) external;\n\n function takeDebt(IERC20 token, uint256 debt) external;\n\n function manualSetAccountDelta(IERC20 token, int256 delta) external;\n\n function manualSetNonZeroDeltaCount(uint256 deltaCount) external;\n\n function manualSetReservesOf(IERC20 token, uint256 reserves) external;\n\n function manualInternalSwap(\n VaultSwapParams memory vaultSwapParams,\n SwapState memory state,\n PoolData memory poolData\n )\n external\n returns (\n uint256 amountCalculatedRaw,\n uint256 amountCalculatedScaled18,\n uint256 amountIn,\n uint256 amountOut,\n VaultSwapParams memory,\n SwapState memory,\n PoolData memory\n );\n\n function manualReentrancySwap(\n VaultSwapParams memory vaultSwapParams,\n SwapState memory state,\n PoolData memory poolData\n ) external;\n\n function manualGetAggregateSwapFeeAmount(address pool, IERC20 token) external view returns (uint256);\n\n function manualGetAggregateYieldFeeAmount(address pool, IERC20 token) external view returns (uint256);\n\n function manualSetAggregateSwapFeeAmount(address pool, IERC20 token, uint256 value) external;\n\n function manualSetAggregateYieldFeeAmount(address pool, IERC20 token, uint256 value) external;\n\n function manualSetAggregateSwapFeePercentage(address pool, uint256 value) external;\n\n function manualSetAggregateYieldFeePercentage(address pool, uint256 value) external;\n\n function manualBuildPoolSwapParams(\n VaultSwapParams memory vaultSwapParams,\n SwapState memory state,\n PoolData memory poolData\n ) external view returns (PoolSwapParams memory);\n\n function manualComputeAndChargeAggregateSwapFees(\n PoolData memory poolData,\n uint256 totalSwapFeeAmountScaled18,\n address pool,\n IERC20 token,\n uint256 index\n ) external returns (uint256 totalSwapFeeAmountRaw, uint256 aggregateSwapFeeAmountRaw);\n\n function manualUpdatePoolDataLiveBalancesAndRates(\n address pool,\n PoolData memory poolData,\n Rounding roundingDirection\n ) external view returns (PoolData memory);\n\n function manualAddLiquidity(\n PoolData memory poolData,\n AddLiquidityParams memory params,\n uint256[] memory maxAmountsInScaled18\n )\n external\n returns (\n PoolData memory updatedPoolData,\n uint256[] memory amountsInRaw,\n uint256[] memory amountsInScaled18,\n uint256 bptAmountOut,\n bytes memory returnData\n );\n\n function manualReentrancyAddLiquidity(\n PoolData memory poolData,\n AddLiquidityParams memory params,\n uint256[] memory maxAmountsInScaled18\n ) external;\n\n function forceUnlock() external;\n\n function forceLock() external;\n\n function manualRemoveLiquidity(\n PoolData memory poolData,\n RemoveLiquidityParams memory params,\n uint256[] memory minAmountsOutScaled18\n )\n external\n returns (\n PoolData memory updatedPoolData,\n uint256 bptAmountIn,\n uint256[] memory amountsOutRaw,\n uint256[] memory amountsOutScaled18,\n bytes memory returnData\n );\n\n function manualReentrancyRemoveLiquidity(\n PoolData memory poolData,\n RemoveLiquidityParams memory params,\n uint256[] memory minAmountsOutScaled18\n ) external;\n\n function manualSettleWrap(\n IERC20 underlyingToken,\n IERC20 wrappedToken,\n uint256 underlyingHint,\n uint256 wrappedHint\n ) external;\n\n function manualSettleUnwrap(\n IERC20 underlyingToken,\n IERC20 wrappedToken,\n uint256 underlyingHint,\n uint256 wrappedHint\n ) external;\n\n function manualTransfer(IERC20 token, address to, uint256 amount) external;\n\n function manualGetPoolConfigBits(address pool) external view returns (PoolConfigBits);\n\n function manualErc4626BufferWrapOrUnwrapReentrancy(\n BufferWrapOrUnwrapParams memory params\n ) external returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw);\n\n function manualSetBufferAsset(IERC4626 wrappedToken, address underlyingToken) external;\n\n function manualSetBufferOwnerShares(IERC4626 wrappedToken, address owner, uint256 shares) external;\n\n function manualSetBufferTotalShares(IERC4626 wrappedToken, uint256 shares) external;\n\n function manualSetBufferBalances(IERC4626 wrappedToken, uint256 underlyingAmount, uint256 wrappedAmount) external;\n\n function manualSettleReentrancy(IERC20 token) external returns (uint256 paid);\n\n function manualSendToReentrancy(IERC20 token, address to, uint256 amount) external;\n\n function manualFindTokenIndex(IERC20[] memory tokens, IERC20 token) external pure returns (uint256 index);\n\n function manualSetAddLiquidityCalledFlag(address pool, bool flag) external;\n\n function manualSetPoolCreator(address pool, address newPoolCreator) external;\n\n function ensureValidTradeAmount(uint256 tradeAmount) external view;\n\n function ensureValidSwapAmount(uint256 tradeAmount) external view;\n\n function manualUpdateAggregateSwapFeePercentage(address pool, uint256 newAggregateSwapFeePercentage) external;\n\n function manualGetAddLiquidityCalledFlagBySession(address pool, uint256 sessionId) external view returns (bool);\n\n function manualGetCurrentUnlockSessionId() external view returns (uint256);\n\n function manualComputeAmountGivenScaled18(\n VaultSwapParams memory vaultSwapParams,\n PoolData memory poolData,\n SwapState memory swapState\n ) external pure returns (uint256);\n\n function manualLoadSwapState(\n VaultSwapParams memory vaultSwapParams,\n PoolData memory poolData\n ) external pure returns (SwapState memory swapState);\n\n function previewDeposit(IERC4626 wrapper, uint256 amountInUnderlying) external returns (uint256 amountOutWrapped);\n\n function previewMint(IERC4626 wrapper, uint256 amountOutWrapped) external returns (uint256 amountInUnderlying);\n\n function previewRedeem(IERC4626 wrapper, uint256 amountInWrapped) external returns (uint256 amountOutUnderlying);\n\n function previewWithdraw(IERC4626 wrapper, uint256 amountOutUnderlying) external returns (uint256 amountInWrapped);\n}\n"},"@balancer-labs/v3-interfaces/contracts/test/IVaultMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20Errors } from \"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\";\n\nimport { IVaultExtensionMock } from \"./IVaultExtensionMock.sol\";\nimport { IVaultStorageMock } from \"./IVaultStorageMock.sol\";\nimport { IVaultAdminMock } from \"./IVaultAdminMock.sol\";\nimport { IVaultMainMock } from \"./IVaultMainMock.sol\";\nimport { IVault } from \"../vault/IVault.sol\";\n\n/// @dev One-fits-all solution for hardhat tests. Use the typechain type for errors, events and functions.\ninterface IVaultMock is IVault, IVaultMainMock, IVaultExtensionMock, IVaultAdminMock, IVaultStorageMock, IERC20Errors {\n // solhint-disable-previous-line no-empty-blocks\n}\n"},"@balancer-labs/v3-interfaces/contracts/test/IVaultStorageMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { StorageSlotExtension } from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\";\n\nimport {\n TokenDeltaMappingSlotType\n} from \"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\";\n\ninterface IVaultStorageMock {\n function manualGetIsUnlocked() external pure returns (StorageSlotExtension.BooleanSlotType slot);\n\n function manualGetNonzeroDeltaCount() external pure returns (StorageSlotExtension.Uint256SlotType slot);\n\n function manualGetTokenDeltas() external pure returns (TokenDeltaMappingSlotType slot);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Interface to the Vault's permission system.\ninterface IAuthorizer {\n /**\n * @notice Returns true if `account` can perform the action described by `actionId` in the contract `where`.\n * @param actionId Identifier for the action to be performed\n * @param account Account trying to perform the action\n * @param where Target contract for the action\n * @return success True if the action is permitted\n */\n function canPerform(bytes32 actionId, address account, address where) external view returns (bool success);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IUnbalancedLiquidityInvariantRatioBounds } from \"./IUnbalancedLiquidityInvariantRatioBounds.sol\";\nimport { ISwapFeePercentageBounds } from \"./ISwapFeePercentageBounds.sol\";\nimport { PoolSwapParams, Rounding, SwapKind } from \"./VaultTypes.sol\";\n\n/**\n * @notice Base interface for a Balancer Pool.\n * @dev All pool types should implement this interface. Note that it also requires implementation of:\n * - `ISwapFeePercentageBounds` to specify the minimum and maximum swap fee percentages.\n * - `IUnbalancedLiquidityInvariantRatioBounds` to specify how much the invariant can change during an unbalanced\n * liquidity operation.\n */\ninterface IBasePool is ISwapFeePercentageBounds, IUnbalancedLiquidityInvariantRatioBounds {\n /***************************************************************************\n Invariant\n ***************************************************************************/\n\n /**\n * @notice Computes the pool's invariant.\n * @dev This function computes the invariant based on current balances (and potentially other pool state).\n * The rounding direction must be respected for the Vault to round in the pool's favor when calling this function.\n * If the invariant computation involves no precision loss (e.g. simple sum of balances), the same result can be\n * returned for both rounding directions.\n *\n * You can think of the invariant as a measure of the \"value\" of the pool, which is related to the total liquidity\n * (i.e., the \"BPT rate\" is `invariant` / `totalSupply`). Two critical properties must hold:\n *\n * 1) The invariant should not change due to a swap. In practice, it can *increase* due to swap fees, which\n * effectively add liquidity after the swap - but it should never decrease.\n *\n * 2) The invariant must be \"linear\"; i.e., increasing the balances proportionally must increase the invariant in\n * the same proportion: inv(a * n, b * n, c * n) = inv(a, b, c) * n\n *\n * Property #1 is required to prevent \"round trip\" paths that drain value from the pool (and all LP shareholders).\n * Intuitively, an accurate pricing algorithm ensures the user gets an equal value of token out given token in, so\n * the total value should not change.\n *\n * Property #2 is essential for the \"fungibility\" of LP shares. If it did not hold, then different users depositing\n * the same total value would get a different number of LP shares. In that case, LP shares would not be\n * interchangeable, as they must be in a fair DEX.\n *\n * @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n * @param rounding Rounding direction to consider when computing the invariant\n * @return invariant The calculated invariant of the pool, represented as a uint256\n */\n function computeInvariant(\n uint256[] memory balancesLiveScaled18,\n Rounding rounding\n ) external view returns (uint256 invariant);\n\n /**\n * @notice Computes a new token balance, given the invariant growth ratio and all other balances.\n * @dev Similar to V2's `_getTokenBalanceGivenInvariantAndAllOtherBalances` in StableMath.\n * The pool must round up for the Vault to round in the protocol's favor when calling this function.\n *\n * @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n * @param tokenInIndex The index of the token we're computing the balance for, sorted in token registration order\n * @param invariantRatio The ratio of the new invariant (after an operation) to the old\n * @return newBalance The new balance of the selected token, after the operation\n */\n function computeBalance(\n uint256[] memory balancesLiveScaled18,\n uint256 tokenInIndex,\n uint256 invariantRatio\n ) external view returns (uint256 newBalance);\n\n /***************************************************************************\n Swaps\n ***************************************************************************/\n\n /**\n * @notice Execute a swap in the pool.\n * @param params Swap parameters (see above for struct definition)\n * @return amountCalculatedScaled18 Calculated amount for the swap operation\n */\n function onSwap(PoolSwapParams calldata params) external returns (uint256 amountCalculatedScaled18);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"../solidity-utils/helpers/IAuthentication.sol\";\n\n/**\n * @notice Base interface for a Balancer Pool Factory.\n * @dev All pool factories should be derived from `BasePoolFactory` to enable common behavior for all pool types\n * (e.g., address prediction, tracking deployed pools, and governance-facilitated migration).\n */\ninterface IBasePoolFactory is IAuthentication {\n /**\n * @notice A pool was deployed.\n * @param pool The address of the new pool\n */\n event PoolCreated(address indexed pool);\n\n /// @notice The factory was disabled by governance.\n event FactoryDisabled();\n\n /// @notice Attempted pool creation after the factory was disabled.\n error Disabled();\n\n /// @notice A pool index is beyond the current bounds of the array.\n error IndexOutOfBounds();\n\n /**\n * @notice Check whether a pool was deployed by this factory.\n * @param pool The pool to check\n * @return success True if `pool` was created by this factory\n */\n function isPoolFromFactory(address pool) external view returns (bool success);\n\n /**\n * @notice Return the total number of pools deployed by this factory.\n * @dev This can then be used to \"paginate\" calls to `getPools` to control gas costs.\n * @return poolCount The number of pools deployed by this factory\n */\n function getPoolCount() external view returns (uint256 poolCount);\n\n /**\n * @notice Return a subset of the list of pools deployed by this factory.\n * @dev `start` must be a valid index, but if `count` exceeds the total length, it will not revert, but simply\n * stop at the end and return fewer results than requested.\n *\n * @param start The index of the first pool to return\n * @param count The maximum number of pools to return\n * @return pools The list of pools deployed by this factory, starting at `start` and returning up to `count` pools\n */\n function getPoolsInRange(uint256 start, uint256 count) external view returns (address[] memory pools);\n\n /**\n * @notice Return the complete list of pools deployed by this factory.\n * @return pools The list of pools deployed by this factory\n */\n function getPools() external view returns (address[] memory pools);\n\n /**\n * @notice Return the address where a new pool will be deployed, based on the factory address and salt.\n * @param constructorArgs The arguments used to create the pool\n * @param salt The salt used to deploy the pool\n * @return deploymentAddress The predicted address of the pool, given the salt\n */\n function getDeploymentAddress(\n bytes memory constructorArgs,\n bytes32 salt\n ) external view returns (address deploymentAddress);\n\n /**\n * @notice Check whether this factory has been disabled by governance.\n * @return success True if this factory was disabled\n */\n function isDisabled() external view returns (bool success);\n\n /**\n * @notice Disable the factory, preventing the creation of more pools.\n * @dev Existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled.\n */\n function disable() external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IBatchRouter.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { AddLiquidityKind, RemoveLiquidityKind, SwapKind } from \"./VaultTypes.sol\";\n\n/// @notice Interface for the `BatchRouter`, supporting multi-hop swaps.\ninterface IBatchRouter {\n /***************************************************************************\n Swaps\n ***************************************************************************/\n\n struct SwapPathStep {\n address pool;\n IERC20 tokenOut;\n // If true, the \"pool\" is an ERC4626 Buffer. Used to wrap/unwrap tokens if pool doesn't have enough liquidity.\n bool isBuffer;\n }\n\n struct SwapPathExactAmountIn {\n IERC20 tokenIn;\n // For each step:\n // If tokenIn == pool, use removeLiquidity SINGLE_TOKEN_EXACT_IN.\n // If tokenOut == pool, use addLiquidity UNBALANCED.\n SwapPathStep[] steps;\n uint256 exactAmountIn;\n uint256 minAmountOut;\n }\n\n struct SwapPathExactAmountOut {\n IERC20 tokenIn;\n // for each step:\n // If tokenIn == pool, use removeLiquidity SINGLE_TOKEN_EXACT_OUT.\n // If tokenOut == pool, use addLiquidity SINGLE_TOKEN_EXACT_OUT.\n SwapPathStep[] steps;\n uint256 maxAmountIn;\n uint256 exactAmountOut;\n }\n\n struct SwapExactInHookParams {\n address sender;\n SwapPathExactAmountIn[] paths;\n uint256 deadline;\n bool wethIsEth;\n bytes userData;\n }\n\n struct SwapExactOutHookParams {\n address sender;\n SwapPathExactAmountOut[] paths;\n uint256 deadline;\n bool wethIsEth;\n bytes userData;\n }\n\n /**\n * @notice Executes a swap operation involving multiple paths (steps), specifying exact input token amounts.\n * @param paths Swap paths from token in to token out, specifying exact amounts in\n * @param deadline Deadline for the swap, after which it will revert\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data required for the swap\n * @return pathAmountsOut Calculated amounts of output tokens corresponding to the last step of each given path\n * @return tokensOut Output token addresses\n * @return amountsOut Calculated amounts of output tokens, ordered by output token address\n */\n function swapExactIn(\n SwapPathExactAmountIn[] memory paths,\n uint256 deadline,\n bool wethIsEth,\n bytes calldata userData\n )\n external\n payable\n returns (uint256[] memory pathAmountsOut, address[] memory tokensOut, uint256[] memory amountsOut);\n\n /**\n * @notice Executes a swap operation involving multiple paths (steps), specifying exact output token amounts.\n * @param paths Swap paths from token in to token out, specifying exact amounts out\n * @param deadline Deadline for the swap\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data required for the swap\n * @return pathAmountsIn Calculated amounts of input tokens corresponding to the first step of each given path\n * @return tokensIn Input token addresses\n * @return amountsIn Calculated amounts of input tokens, ordered by input token address\n */\n function swapExactOut(\n SwapPathExactAmountOut[] memory paths,\n uint256 deadline,\n bool wethIsEth,\n bytes calldata userData\n ) external payable returns (uint256[] memory pathAmountsIn, address[] memory tokensIn, uint256[] memory amountsIn);\n\n /***************************************************************************\n Queries\n ***************************************************************************/\n\n /**\n * @notice Queries a swap operation involving multiple paths (steps), specifying exact input token amounts.\n * @dev Min amounts out specified in the paths are ignored.\n * @param paths Swap paths from token in to token out, specifying exact amounts in\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data required for the query\n * @return pathAmountsOut Calculated amounts of output tokens corresponding to the last step of each given path\n * @return tokensOut Output token addresses\n * @return amountsOut Calculated amounts of output tokens to be received, ordered by output token address\n */\n function querySwapExactIn(\n SwapPathExactAmountIn[] memory paths,\n address sender,\n bytes calldata userData\n ) external returns (uint256[] memory pathAmountsOut, address[] memory tokensOut, uint256[] memory amountsOut);\n\n /**\n * @notice Queries a swap operation involving multiple paths (steps), specifying exact output token amounts.\n * @dev Max amounts in specified in the paths are ignored.\n * @param paths Swap paths from token in to token out, specifying exact amounts out\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data required for the query\n * @return pathAmountsIn Calculated amounts of input tokens corresponding to the last step of each given path\n * @return tokensIn Input token addresses\n * @return amountsIn Calculated amounts of input tokens to be received, ordered by input token address\n */\n function querySwapExactOut(\n SwapPathExactAmountOut[] memory paths,\n address sender,\n bytes calldata userData\n ) external returns (uint256[] memory pathAmountsIn, address[] memory tokensIn, uint256[] memory amountsIn);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IBufferRouter.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { AddLiquidityKind, RemoveLiquidityKind, SwapKind } from \"./VaultTypes.sol\";\n\n/// @notice User-friendly interface for Buffer liquidity operations with the Vault.\ninterface IBufferRouter {\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Adds liquidity for the first time to an internal ERC4626 buffer in the Vault.\n * @dev Calling this method binds the wrapped token to its underlying asset internally; the asset in the wrapper\n * cannot change afterwards, or every other operation on that wrapper (add / remove / wrap / unwrap) will fail.\n * To avoid unexpected behavior, always initialize buffers before creating or initializing any pools that contain\n * the wrapped tokens to be used with them.\n *\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param exactAmountUnderlyingIn Amount of underlying tokens that will be deposited into the buffer\n * @param exactAmountWrappedIn Amount of wrapped tokens that will be deposited into the buffer\n * @param minIssuedShares Minimum amount of shares to receive from the buffer, expressed in underlying token\n * native decimals\n * @return issuedShares the amount of tokens sharesOwner has in the buffer, denominated in underlying tokens\n * (This is the BPT of the Vault's internal ERC4626 buffer.)\n */\n function initializeBuffer(\n IERC4626 wrappedToken,\n uint256 exactAmountUnderlyingIn,\n uint256 exactAmountWrappedIn,\n uint256 minIssuedShares\n ) external returns (uint256 issuedShares);\n\n /**\n * @notice Adds liquidity proportionally to an internal ERC4626 buffer in the Vault.\n * @dev Requires the buffer to be initialized beforehand. Restricting adds to proportional simplifies the Vault\n * code, avoiding rounding issues and minimum amount checks. It is possible to add unbalanced by interacting\n * with the wrapper contract directly.\n *\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param maxAmountUnderlyingIn Maximum amount of underlying tokens to add to the buffer. It is expressed in\n * underlying token native decimals\n * @param maxAmountWrappedIn Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n * token native decimals\n * @param exactSharesToIssue The amount of shares that `sharesOwner` wants to add to the buffer, in underlying\n * token decimals\n * @return amountUnderlyingIn Amount of underlying tokens deposited into the buffer\n * @return amountWrappedIn Amount of wrapped tokens deposited into the buffer\n */\n function addLiquidityToBuffer(\n IERC4626 wrappedToken,\n uint256 maxAmountUnderlyingIn,\n uint256 maxAmountWrappedIn,\n uint256 exactSharesToIssue\n ) external returns (uint256 amountUnderlyingIn, uint256 amountWrappedIn);\n\n /**\n * @notice Queries an `initializeBuffer` operation without actually executing it.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param exactAmountUnderlyingIn Amount of underlying tokens that the sender wishes to deposit into the buffer\n * @param exactAmountWrappedIn Amount of wrapped tokens that the sender wishes to deposit into the buffer\n * @return issuedShares The amount of shares that would be minted, in underlying token decimals\n */\n function queryInitializeBuffer(\n IERC4626 wrappedToken,\n uint256 exactAmountUnderlyingIn,\n uint256 exactAmountWrappedIn\n ) external returns (uint256 issuedShares);\n\n /**\n * @notice Queries an `addLiquidityToBuffer` operation without actually executing it.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param exactSharesToIssue The amount of shares that would be minted, in underlying token decimals\n * @return amountUnderlyingIn Amount of underlying tokens that would be deposited into the buffer\n * @return amountWrappedIn Amount of wrapped tokens that would be deposited into the buffer\n */\n function queryAddLiquidityToBuffer(\n IERC4626 wrappedToken,\n uint256 exactSharesToIssue\n ) external returns (uint256 amountUnderlyingIn, uint256 amountWrappedIn);\n\n /**\n * @notice Queries an `removeLiquidityFromBuffer` operation without actually executing it.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param exactSharesToRemove The amount of shares that would be burned, in underlying token decimals\n * @return removedUnderlyingBalanceOut Amount of underlying tokens that would be removed from the buffer\n * @return removedWrappedBalanceOut Amount of wrapped tokens that would be removed from the buffer\n */\n function queryRemoveLiquidityFromBuffer(\n IERC4626 wrappedToken,\n uint256 exactSharesToRemove\n ) external returns (uint256 removedUnderlyingBalanceOut, uint256 removedWrappedBalanceOut);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IERC20MultiTokenErrors.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\ninterface IERC20MultiTokenErrors {\n /**\n * @notice The total supply of a pool token can't be lower than the absolute minimum.\n * @param totalSupply The total supply value that was below the minimum\n */\n error PoolTotalSupplyTooLow(uint256 totalSupply);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n// Explicitly import VaultTypes structs because we expect this interface to be heavily used by external developers.\n// Internally, when this list gets too long, we usually just do a simple import to keep things tidy.\nimport {\n TokenConfig,\n LiquidityManagement,\n PoolSwapParams,\n AfterSwapParams,\n HookFlags,\n AddLiquidityKind,\n RemoveLiquidityKind,\n SwapKind\n} from \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for pool hooks.\n * @dev Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that\n * they are called in the correct order, and with the correct arguments. To maintain this security, these functions\n * should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`,\n * then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)\n */\ninterface IHooks {\n /***************************************************************************\n Register\n ***************************************************************************/\n\n /**\n * @notice Hook executed when a pool is registered with a non-zero hooks contract.\n * @dev Returns true if registration was successful, and false to revert the pool registration.\n * Make sure this function is properly implemented (e.g. check the factory, and check that the\n * given pool is from the factory). The Vault address will be msg.sender.\n *\n * @param factory Address of the pool factory (contract deploying the pool)\n * @param pool Address of the pool\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param liquidityManagement Liquidity management flags indicating which functions are enabled\n * @return success True if the hook allowed the registration, false otherwise\n */\n function onRegister(\n address factory,\n address pool,\n TokenConfig[] memory tokenConfig,\n LiquidityManagement calldata liquidityManagement\n ) external returns (bool success);\n\n /**\n * @notice Return the set of hooks implemented by the contract.\n * @dev The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined\n * (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero).\n * `onRegister` is the only \"mandatory\" hook.\n *\n * @return hookFlags Flags indicating which hooks the contract supports\n */\n function getHookFlags() external view returns (HookFlags memory hookFlags);\n\n /***************************************************************************\n Initialize\n ***************************************************************************/\n\n /**\n * @notice Hook executed before pool initialization.\n * @dev Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param exactAmountsIn Exact amounts of input tokens\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with initialization\n */\n function onBeforeInitialize(uint256[] memory exactAmountsIn, bytes memory userData) external returns (bool success);\n\n /**\n * @notice Hook to be executed after pool initialization.\n * @dev Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param exactAmountsIn Exact amounts of input tokens\n * @param bptAmountOut Amount of pool tokens minted during initialization\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool accepts the initialization results\n */\n function onAfterInitialize(\n uint256[] memory exactAmountsIn,\n uint256 bptAmountOut,\n bytes memory userData\n ) external returns (bool success);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Hook to be executed before adding liquidity.\n * @dev Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param maxAmountsInScaled18 Maximum amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeAddLiquidity(\n address router,\n address pool,\n AddLiquidityKind kind,\n uint256[] memory maxAmountsInScaled18,\n uint256 minBptAmountOut,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success);\n\n /**\n * @notice Hook to be executed after adding liquidity.\n * @dev Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param amountsInScaled18 Actual amounts of tokens added, sorted in token registration order\n * @param amountsInRaw Actual amounts of tokens added, sorted in token registration order\n * @param bptAmountOut Amount of pool tokens minted\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Additional (optional) data provided by the user\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook\n */\n function onAfterAddLiquidity(\n address router,\n address pool,\n AddLiquidityKind kind,\n uint256[] memory amountsInScaled18,\n uint256[] memory amountsInRaw,\n uint256 bptAmountOut,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success, uint256[] memory hookAdjustedAmountsInRaw);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Hook to be executed before removing liquidity.\n * @dev Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The type of remove liquidity operation (e.g., proportional, custom)\n * @param maxBptAmountIn Maximum amount of input pool tokens\n * @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Optional, arbitrary data sent with the encoded request\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeRemoveLiquidity(\n address router,\n address pool,\n RemoveLiquidityKind kind,\n uint256 maxBptAmountIn,\n uint256[] memory minAmountsOutScaled18,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success);\n\n /**\n * @notice Hook to be executed after removing liquidity.\n * @dev Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n * @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n * @param kind The type of remove liquidity operation (e.g., proportional, custom)\n * @param bptAmountIn Amount of pool tokens to burn\n * @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n * @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Additional (optional) data provided by the user\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook\n */\n function onAfterRemoveLiquidity(\n address router,\n address pool,\n RemoveLiquidityKind kind,\n uint256 bptAmountIn,\n uint256[] memory amountsOutScaled18,\n uint256[] memory amountsOutRaw,\n uint256[] memory balancesScaled18,\n bytes memory userData\n ) external returns (bool success, uint256[] memory hookAdjustedAmountsOutRaw);\n\n /***************************************************************************\n Swap\n ***************************************************************************/\n\n /**\n * @notice Called before a swap to give the Pool an opportunity to perform actions.\n * @dev Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the\n * `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see PoolSwapParams for struct definition)\n * @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n * @return success True if the pool wishes to proceed with settlement\n */\n function onBeforeSwap(PoolSwapParams calldata params, address pool) external returns (bool success);\n\n /**\n * @notice Called after a swap to perform further actions once the balances have been updated by the swap.\n * @dev Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore\n * `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should\n * use the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see above for struct definition)\n * @return success True if the pool wishes to proceed with settlement\n * @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook\n */\n function onAfterSwap(\n AfterSwapParams calldata params\n ) external returns (bool success, uint256 hookAdjustedAmountCalculatedRaw);\n\n /**\n * @notice Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\n * @dev Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use\n * the `onlyVault` modifier to guarantee this is only called by the Vault.\n *\n * @param params Swap parameters (see PoolSwapParams for struct definition)\n * @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n * @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage, for reference\n * @return success True if the pool wishes to proceed with settlement\n * @return dynamicSwapFeePercentage Value of the swap fee percentage, as an 18-decimal FP value\n */\n function onComputeDynamicSwapFeePercentage(\n PoolSwapParams calldata params,\n address pool,\n uint256 staticSwapFeePercentage\n ) external view returns (bool success, uint256 dynamicSwapFeePercentage);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IPoolLiquidity.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Interface for custom liquidity operations.\ninterface IPoolLiquidity {\n /**\n * @notice Add liquidity to the pool with a custom hook.\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param maxAmountsInScaled18 Maximum input amounts, sorted in token registration order\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Arbitrary data sent with the encoded request\n * @return amountsInScaled18 Input token amounts, sorted in token registration order\n * @return bptAmountOut Calculated pool token amount to receive\n * @return swapFeeAmountsScaled18 The amount of swap fees charged for each token\n * @return returnData Arbitrary data with an encoded response from the pool\n */\n function onAddLiquidityCustom(\n address router,\n uint256[] memory maxAmountsInScaled18,\n uint256 minBptAmountOut,\n uint256[] memory balancesScaled18,\n bytes memory userData\n )\n external\n returns (\n uint256[] memory amountsInScaled18,\n uint256 bptAmountOut,\n uint256[] memory swapFeeAmountsScaled18,\n bytes memory returnData\n );\n\n /**\n * @notice Remove liquidity from the pool with a custom hook.\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param maxBptAmountIn Maximum amount of input pool tokens\n * @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n * @param balancesScaled18 Current pool balances, sorted in token registration order\n * @param userData Arbitrary data sent with the encoded request\n * @return bptAmountIn Calculated pool token amount to burn\n * @return amountsOutScaled18 Amount of tokens to receive, sorted in token registration order\n * @return swapFeeAmountsScaled18 The amount of swap fees charged for each token\n * @return returnData Arbitrary data with an encoded response from the pool\n */\n function onRemoveLiquidityCustom(\n address router,\n uint256 maxBptAmountIn,\n uint256[] memory minAmountsOutScaled18,\n uint256[] memory balancesScaled18,\n bytes memory userData\n )\n external\n returns (\n uint256 bptAmountIn,\n uint256[] memory amountsOutScaled18,\n uint256[] memory swapFeeAmountsScaled18,\n bytes memory returnData\n );\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IVault } from \"./IVault.sol\";\n\n/// @notice Contract that handles protocol and pool creator fees for the Vault.\ninterface IProtocolFeeController {\n /**\n * @notice Emitted when the protocol swap fee percentage is updated.\n * @param swapFeePercentage The updated protocol swap fee percentage\n */\n event GlobalProtocolSwapFeePercentageChanged(uint256 swapFeePercentage);\n\n /**\n * @notice Emitted when the protocol yield fee percentage is updated.\n * @param yieldFeePercentage The updated protocol yield fee percentage\n */\n event GlobalProtocolYieldFeePercentageChanged(uint256 yieldFeePercentage);\n\n /**\n * @notice Emitted when the protocol swap fee percentage is updated for a specific pool.\n * @param pool The pool whose protocol swap fee will be changed\n * @param swapFeePercentage The updated protocol swap fee percentage\n */\n event ProtocolSwapFeePercentageChanged(address indexed pool, uint256 swapFeePercentage);\n\n /**\n * @notice Emitted when the protocol yield fee percentage is updated for a specific pool.\n * @param pool The pool whose protocol yield fee will be changed\n * @param yieldFeePercentage The updated protocol yield fee percentage\n */\n event ProtocolYieldFeePercentageChanged(address indexed pool, uint256 yieldFeePercentage);\n\n /**\n * @notice Emitted when the pool creator swap fee percentage of a pool is updated.\n * @param pool The pool whose pool creator swap fee will be changed\n * @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage for the pool\n */\n event PoolCreatorSwapFeePercentageChanged(address indexed pool, uint256 poolCreatorSwapFeePercentage);\n\n /**\n * @notice Emitted when the pool creator yield fee percentage of a pool is updated.\n * @param pool The pool whose pool creator yield fee will be changed\n * @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage for the pool\n */\n event PoolCreatorYieldFeePercentageChanged(address indexed pool, uint256 poolCreatorYieldFeePercentage);\n\n /**\n * @notice Logs the collection of protocol swap fees in a specific token and amount.\n * @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n * in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass\n * multiple operations.\n *\n * @param pool The pool on which the swap fee was charged\n * @param token The token in which the swap fee was charged\n * @param amount The amount of the token collected in fees\n */\n event ProtocolSwapFeeCollected(address indexed pool, IERC20 indexed token, uint256 amount);\n\n /**\n * @notice Logs the collection of protocol yield fees in a specific token and amount.\n * @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n * in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass\n * multiple operations.\n *\n * @param pool The pool on which the yield fee was charged\n * @param token The token in which the yield fee was charged\n * @param amount The amount of the token collected in fees\n */\n event ProtocolYieldFeeCollected(address indexed pool, IERC20 indexed token, uint256 amount);\n\n /**\n * @notice Logs the withdrawal of protocol fees in a specific token and amount.\n * @param pool The pool from which protocol fees are being withdrawn\n * @param token The token being withdrawn\n * @param recipient The recipient of the funds\n * @param amount The amount of the fee token that was withdrawn\n */\n event ProtocolFeesWithdrawn(address indexed pool, IERC20 indexed token, address indexed recipient, uint256 amount);\n\n /**\n * @notice Logs the withdrawal of pool creator fees in a specific token and amount.\n * @param pool The pool from which pool creator fees are being withdrawn\n * @param token The token being withdrawn\n * @param recipient The recipient of the funds (the pool creator if permissionless, or another account)\n * @param amount The amount of the fee token that was withdrawn\n */\n event PoolCreatorFeesWithdrawn(\n address indexed pool,\n IERC20 indexed token,\n address indexed recipient,\n uint256 amount\n );\n\n /**\n * @notice Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\n * @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n * equal the current global swap fee percentage.\n *\n * @param pool The pool being registered\n * @param aggregateSwapFeePercentage The initial aggregate swap fee percentage\n * @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially\n */\n event InitialPoolAggregateSwapFeePercentage(\n address indexed pool,\n uint256 aggregateSwapFeePercentage,\n bool isProtocolFeeExempt\n );\n\n /**\n * @notice Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\n * @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n * equal the current global yield fee percentage.\n *\n * @param pool The pool being registered\n * @param aggregateYieldFeePercentage The initial aggregate yield fee percentage\n * @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially\n */\n event InitialPoolAggregateYieldFeePercentage(\n address indexed pool,\n uint256 aggregateYieldFeePercentage,\n bool isProtocolFeeExempt\n );\n\n /**\n * @notice Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\n * @dev The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this\n * simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee\n * counterpart also include the protocol fee exemption flag, we might as well include it here as well.\n *\n * @param pool The address of the pool being registered\n * @param poolCreator The address of the pool creator (non-zero, or the event would not be emitted)\n * @param protocolFeeExempt True if the pool is initially exempt from protocol fees\n */\n event PoolRegisteredWithFeeController(address indexed pool, address indexed poolCreator, bool protocolFeeExempt);\n\n /**\n * @notice Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\n * @dev Note that this is checked for both the global and pool-specific protocol swap fee percentages.\n */\n error ProtocolSwapFeePercentageTooHigh();\n\n /**\n * @notice Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\n * @dev Note that this is checked for both the global and pool-specific protocol yield fee percentages.\n */\n error ProtocolYieldFeePercentageTooHigh();\n\n /**\n * @notice Error raised if there is no pool creator on a withdrawal attempt from the given pool.\n * @param pool The pool with no creator\n */\n error PoolCreatorNotRegistered(address pool);\n\n /**\n * @notice Error raised if the wrong account attempts to withdraw pool creator fees.\n * @param caller The account attempting to withdraw pool creator fees\n * @param pool The pool the caller tried to withdraw from\n */\n error CallerIsNotPoolCreator(address caller, address pool);\n\n /// @notice Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\n error PoolCreatorFeePercentageTooHigh();\n\n /**\n * @notice Get the address of the main Vault contract.\n * @return vault The Vault address\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Collects aggregate fees from the Vault for a given pool.\n * @param pool The pool with aggregate fees\n */\n function collectAggregateFees(address pool) external;\n\n /**\n * @notice Getter for the current global protocol swap fee.\n * @return protocolSwapFeePercentage The global protocol swap fee percentage\n */\n function getGlobalProtocolSwapFeePercentage() external view returns (uint256 protocolSwapFeePercentage);\n\n /**\n * @notice Getter for the current global protocol yield fee.\n * @return protocolYieldFeePercentage The global protocol yield fee percentage\n */\n function getGlobalProtocolYieldFeePercentage() external view returns (uint256 protocolYieldFeePercentage);\n\n /**\n * @notice Getter for pool registration flag.\n * @param pool The address of the pool\n * @return isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\n */\n function isPoolRegistered(address pool) external view returns (bool);\n\n /**\n * @notice Getter for the current protocol swap fee for a given pool.\n * @param pool The address of the pool\n * @return protocolSwapFeePercentage The protocol swap fee percentage for the given pool\n * @return isOverride True if the protocol fee has been overridden\n */\n function getPoolProtocolSwapFeeInfo(\n address pool\n ) external view returns (uint256 protocolSwapFeePercentage, bool isOverride);\n\n /**\n * @notice Getter for the current protocol yield fee for a given pool.\n * @param pool The address of the pool\n * @return protocolYieldFeePercentage The protocol yield fee percentage for the given pool\n * @return isOverride True if the protocol fee has been overridden\n */\n function getPoolProtocolYieldFeeInfo(\n address pool\n ) external view returns (uint256 protocolYieldFeePercentage, bool isOverride);\n\n /**\n * @notice Getter for the current pool creator swap fee percentage for a given pool.\n * @param pool The address of the pool\n * @return poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\n */\n function getPoolCreatorSwapFeePercentage(address pool) external view returns (uint256);\n\n /**\n * @notice Getter for the current pool creator yield fee percentage for a given pool.\n * @param pool The address of the pool\n * @return poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee\n */\n function getPoolCreatorYieldFeePercentage(address pool) external view returns (uint256);\n\n /**\n * @notice Returns the amount of each pool token allocated to the protocol for withdrawal.\n * @dev Includes both swap and yield fees.\n * @param pool The address of the pool on which fees were collected\n * @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order\n */\n function getProtocolFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts);\n\n /**\n * @notice Returns the amount of each pool token allocated to the pool creator for withdrawal.\n * @dev Includes both swap and yield fees.\n * @param pool The address of the pool on which fees were collected\n * @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order\n */\n function getPoolCreatorFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts);\n\n /**\n * @notice Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\n * @dev Not tied to any particular pool; this just performs the low-level \"additive fee\" calculation. Note that\n * pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are\n * stored in the Vault with 24-bit precision, this will truncate any values that require greater precision.\n * It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee\n * components, but the truncation ensures it will not revert for any valid set of fee percentages.\n *\n * See example below:\n *\n * tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60%\n * totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000\n * protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400\n * creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600\n * creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360\n * lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\n *\n * @param protocolFeePercentage The protocol portion of the aggregate fee percentage\n * @param poolCreatorFeePercentage The pool creator portion of the aggregate fee percentage\n * @return aggregateFeePercentage The computed aggregate percentage\n */\n function computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) external pure returns (uint256 aggregateFeePercentage);\n\n /**\n * @notice Override the protocol swap fee percentage for a specific pool.\n * @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n * from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n *\n * @param pool The pool for which we are setting the protocol swap fee\n */\n function updateProtocolSwapFeePercentage(address pool) external;\n\n /**\n * @notice Override the protocol yield fee percentage for a specific pool.\n * @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n * from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n *\n * @param pool The pool for which we are setting the protocol yield fee\n */\n function updateProtocolYieldFeePercentage(address pool) external;\n\n /***************************************************************************\n Permissioned Functions\n ***************************************************************************/\n\n /**\n * @notice Add pool-specific entries to the protocol swap and yield percentages.\n * @dev This must be called from the Vault during pool registration. It will initialize the pool to the global\n * protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate\n * fee percentages, based on an initial pool creator fee of 0.\n *\n * @param pool The address of the pool being registered\n * @param poolCreator The address of the pool creator (or 0 if there won't be a pool creator fee)\n * @param protocolFeeExempt If true, the pool is initially exempt from protocol fees\n * @return aggregateSwapFeePercentage The initial aggregate swap fee percentage\n * @return aggregateYieldFeePercentage The initial aggregate yield fee percentage\n */\n function registerPool(\n address pool,\n address poolCreator,\n bool protocolFeeExempt\n ) external returns (uint256 aggregateSwapFeePercentage, uint256 aggregateYieldFeePercentage);\n\n /**\n * @notice Set the global protocol swap fee percentage, used by standard pools.\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage\n */\n function setGlobalProtocolSwapFeePercentage(uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Set the global protocol yield fee percentage, used by standard pools.\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage\n */\n function setGlobalProtocolYieldFeePercentage(uint256 newProtocolYieldFeePercentage) external;\n\n /**\n * @notice Override the protocol swap fee percentage for a specific pool.\n * @param pool The address of the pool for which we are setting the protocol swap fee\n * @param newProtocolSwapFeePercentage The new protocol swap fee percentage for the pool\n */\n function setProtocolSwapFeePercentage(address pool, uint256 newProtocolSwapFeePercentage) external;\n\n /**\n * @notice Override the protocol yield fee percentage for a specific pool.\n * @param pool The address of the pool for which we are setting the protocol yield fee\n * @param newProtocolYieldFeePercentage The new protocol yield fee percentage for the pool\n */\n function setProtocolYieldFeePercentage(address pool, uint256 newProtocolYieldFeePercentage) external;\n\n /**\n * @notice Assigns a new pool creator swap fee percentage to the specified pool.\n * @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n * the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n * pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n *\n * @param pool The address of the pool for which the pool creator fee will be changed\n * @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage to apply to the pool\n */\n function setPoolCreatorSwapFeePercentage(address pool, uint256 poolCreatorSwapFeePercentage) external;\n\n /**\n * @notice Assigns a new pool creator yield fee percentage to the specified pool.\n * @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n * the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n * pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n *\n * @param pool The address of the pool for which the pool creator fee will be changed\n * @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage to apply to the pool\n */\n function setPoolCreatorYieldFeePercentage(address pool, uint256 poolCreatorYieldFeePercentage) external;\n\n /**\n * @notice Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\n * @dev Sends swap and yield protocol fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n */\n function withdrawProtocolFees(address pool, address recipient) external;\n\n /**\n * @notice Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\n * @dev Sends swap and yield protocol fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n * @param token Token to withdraw\n */\n function withdrawProtocolFeesForToken(address pool, address recipient, IERC20 token) external;\n\n /**\n * @notice Withdraw collected pool creator fees for a given pool. This is a permissioned function.\n * @dev Sends swap and yield pool creator fees to the recipient.\n * @param pool The pool on which fees were collected\n * @param recipient Address to send the tokens\n */\n function withdrawPoolCreatorFees(address pool, address recipient) external;\n\n /**\n * @notice Withdraw collected pool creator fees for a given pool.\n * @dev Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable\n * value, this function is permissionless.\n *\n * @param pool The pool on which fees were collected\n */\n function withdrawPoolCreatorFees(address pool) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { AddLiquidityKind, RemoveLiquidityKind, SwapKind } from \"./VaultTypes.sol\";\n\n/// @notice User-friendly interface to basic Vault operations: swap, add/remove liquidity, and associated queries.\ninterface IRouter {\n /***************************************************************************\n Pool Initialization\n ***************************************************************************/\n\n /**\n * @notice Data for the pool initialization hook.\n * @param sender Account originating the pool initialization operation\n * @param pool Address of the liquidity pool\n * @param tokens Pool tokens, in token registration order\n * @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n * @param minBptAmountOut Minimum amount of pool tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to add initial liquidity\n */\n struct InitializeHookParams {\n address sender;\n address pool;\n IERC20[] tokens;\n uint256[] exactAmountsIn;\n uint256 minBptAmountOut;\n bool wethIsEth;\n bytes userData;\n }\n\n /**\n * @notice Initialize a liquidity pool.\n * @param pool Address of the liquidity pool\n * @param tokens Pool tokens, in token registration order\n * @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n * @param minBptAmountOut Minimum amount of pool tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to add initial liquidity\n * @return bptAmountOut Actual amount of pool tokens minted in exchange for initial liquidity\n */\n function initialize(\n address pool,\n IERC20[] memory tokens,\n uint256[] memory exactAmountsIn,\n uint256 minBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 bptAmountOut);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Adds liquidity to a pool with proportional token amounts, receiving an exact amount of pool tokens.\n * @param pool Address of the liquidity pool\n * @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n * @param exactBptAmountOut Exact amount of pool tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to add liquidity\n * @return amountsIn Actual amounts of tokens added, sorted in token registration order\n */\n function addLiquidityProportional(\n address pool,\n uint256[] memory maxAmountsIn,\n uint256 exactBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256[] memory amountsIn);\n\n /**\n * @notice Adds liquidity to a pool with arbitrary token amounts.\n * @param pool Address of the liquidity pool\n * @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n * @param minBptAmountOut Minimum amount of pool tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to add liquidity\n * @return bptAmountOut Actual amount of pool tokens received\n */\n function addLiquidityUnbalanced(\n address pool,\n uint256[] memory exactAmountsIn,\n uint256 minBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 bptAmountOut);\n\n /**\n * @notice Adds liquidity to a pool in a single token, receiving an exact amount of pool tokens.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token used to add liquidity\n * @param maxAmountIn Maximum amount of tokens to be added\n * @param exactBptAmountOut Exact amount of pool tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to add liquidity\n * @return amountIn Actual amount of tokens added\n */\n function addLiquiditySingleTokenExactOut(\n address pool,\n IERC20 tokenIn,\n uint256 maxAmountIn,\n uint256 exactBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 amountIn);\n\n /**\n * @notice Adds liquidity to a pool by donating the amounts in (no BPT out).\n * @dev To support donation, the pool config `enableDonation` flag must be set to true.\n * @param pool Address of the liquidity pool\n * @param amountsIn Amounts of tokens to be donated, sorted in token registration order\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to donate liquidity\n */\n function donate(address pool, uint256[] memory amountsIn, bool wethIsEth, bytes memory userData) external payable;\n\n /**\n * @notice Adds liquidity to a pool with a custom request.\n * @dev The given maximum and minimum amounts given may be interpreted as exact depending on the pool type.\n * In any case the caller can expect them to be hard boundaries for the request.\n *\n * @param pool Address of the liquidity pool\n * @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n * @param minBptAmountOut Minimum amount of pool tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to add liquidity\n * @return amountsIn Actual amounts of tokens added, sorted in token registration order\n * @return bptAmountOut Actual amount of pool tokens received\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function addLiquidityCustom(\n address pool,\n uint256[] memory maxAmountsIn,\n uint256 minBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256[] memory amountsIn, uint256 bptAmountOut, bytes memory returnData);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Removes liquidity with proportional token amounts from a pool, burning an exact pool token amount.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to remove liquidity\n * @return amountsOut Actual amounts of tokens received, sorted in token registration order\n */\n function removeLiquidityProportional(\n address pool,\n uint256 exactBptAmountIn,\n uint256[] memory minAmountsOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256[] memory amountsOut);\n\n /**\n * @notice Removes liquidity from a pool via a single token, burning an exact pool token amount.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided\n * @param tokenOut Token used to remove liquidity\n * @param minAmountOut Minimum amount of tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to remove liquidity\n * @return amountOut Actual amount of tokens received\n */\n function removeLiquiditySingleTokenExactIn(\n address pool,\n uint256 exactBptAmountIn,\n IERC20 tokenOut,\n uint256 minAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 amountOut);\n\n /**\n * @notice Removes liquidity from a pool via a single token, specifying the exact amount of tokens to receive.\n * @param pool Address of the liquidity pool\n * @param maxBptAmountIn Maximum amount of pool tokens provided\n * @param tokenOut Token used to remove liquidity\n * @param exactAmountOut Exact amount of tokens to be received\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to remove liquidity\n * @return bptAmountIn Actual amount of pool tokens burned\n */\n function removeLiquiditySingleTokenExactOut(\n address pool,\n uint256 maxBptAmountIn,\n IERC20 tokenOut,\n uint256 exactAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 bptAmountIn);\n\n /**\n * @notice Removes liquidity from a pool with a custom request.\n * @dev The given maximum and minimum amounts given may be interpreted as exact depending on the pool type.\n * In any case the caller can expect them to be hard boundaries for the request.\n *\n * @param pool Address of the liquidity pool\n * @param maxBptAmountIn Maximum amount of pool tokens provided\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to remove liquidity\n * @return bptAmountIn Actual amount of pool tokens burned\n * @return amountsOut Actual amounts of tokens received, sorted in token registration order\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function removeLiquidityCustom(\n address pool,\n uint256 maxBptAmountIn,\n uint256[] memory minAmountsOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable returns (uint256 bptAmountIn, uint256[] memory amountsOut, bytes memory returnData);\n\n /**\n * @notice Removes liquidity proportionally, burning an exact pool token amount. Only available in Recovery Mode.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @return amountsOut Actual amounts of tokens received, sorted in token registration order\n */\n function removeLiquidityRecovery(\n address pool,\n uint256 exactBptAmountIn,\n uint256[] memory minAmountsOut\n ) external payable returns (uint256[] memory amountsOut);\n\n /***************************************************************************\n Swaps\n ***************************************************************************/\n\n /**\n * @notice Data for the swap hook.\n * @param sender Account initiating the swap operation\n * @param kind Type of swap (exact in or exact out)\n * @param pool Address of the liquidity pool\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param amountGiven Amount given based on kind of the swap (e.g., tokenIn for exact in)\n * @param limit Maximum or minimum amount based on the kind of swap (e.g., maxAmountIn for exact out)\n * @param deadline Deadline for the swap, after which it will revert\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the swap request\n */\n struct SwapSingleTokenHookParams {\n address sender;\n SwapKind kind;\n address pool;\n IERC20 tokenIn;\n IERC20 tokenOut;\n uint256 amountGiven;\n uint256 limit;\n uint256 deadline;\n bool wethIsEth;\n bytes userData;\n }\n\n /**\n * @notice Executes a swap operation specifying an exact input token amount.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param exactAmountIn Exact amounts of input tokens to send\n * @param minAmountOut Minimum amount of tokens to be received\n * @param deadline Deadline for the swap, after which it will revert\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the swap request\n * @return amountOut Calculated amount of output tokens to be received in exchange for the given input tokens\n */\n function swapSingleTokenExactIn(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 exactAmountIn,\n uint256 minAmountOut,\n uint256 deadline,\n bool wethIsEth,\n bytes calldata userData\n ) external payable returns (uint256 amountOut);\n\n /**\n * @notice Executes a swap operation specifying an exact output token amount.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param exactAmountOut Exact amounts of input tokens to receive\n * @param maxAmountIn Maximum amount of tokens to be sent\n * @param deadline Deadline for the swap, after which it will revert\n * @param userData Additional (optional) data sent with the swap request\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @return amountIn Calculated amount of input tokens to be sent in exchange for the requested output tokens\n */\n function swapSingleTokenExactOut(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 exactAmountOut,\n uint256 maxAmountIn,\n uint256 deadline,\n bool wethIsEth,\n bytes calldata userData\n ) external payable returns (uint256 amountIn);\n\n /***************************************************************************\n Queries\n ***************************************************************************/\n\n /**\n * @notice Queries an `addLiquidityProportional` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountOut Exact amount of pool tokens to be received\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountsIn Expected amounts of tokens to add, sorted in token registration order\n */\n function queryAddLiquidityProportional(\n address pool,\n uint256 exactBptAmountOut,\n address sender,\n bytes memory userData\n ) external returns (uint256[] memory amountsIn);\n\n /**\n * @notice Queries an `addLiquidityUnbalanced` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return bptAmountOut Expected amount of pool tokens to receive\n */\n function queryAddLiquidityUnbalanced(\n address pool,\n uint256[] memory exactAmountsIn,\n address sender,\n bytes memory userData\n ) external returns (uint256 bptAmountOut);\n\n /**\n * @notice Queries an `addLiquiditySingleTokenExactOut` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token used to add liquidity\n * @param exactBptAmountOut Expected exact amount of pool tokens to receive\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountIn Expected amount of tokens to add\n */\n function queryAddLiquiditySingleTokenExactOut(\n address pool,\n IERC20 tokenIn,\n uint256 exactBptAmountOut,\n address sender,\n bytes memory userData\n ) external returns (uint256 amountIn);\n\n /**\n * @notice Queries an `addLiquidityCustom` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n * @param minBptAmountOut Expected minimum amount of pool tokens to receive\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountsIn Expected amounts of tokens to add, sorted in token registration order\n * @return bptAmountOut Expected amount of pool tokens to receive\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function queryAddLiquidityCustom(\n address pool,\n uint256[] memory maxAmountsIn,\n uint256 minBptAmountOut,\n address sender,\n bytes memory userData\n ) external returns (uint256[] memory amountsIn, uint256 bptAmountOut, bytes memory returnData);\n\n /**\n * @notice Queries a `removeLiquidityProportional` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided for the query\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountsOut Expected amounts of tokens to receive, sorted in token registration order\n */\n function queryRemoveLiquidityProportional(\n address pool,\n uint256 exactBptAmountIn,\n address sender,\n bytes memory userData\n ) external returns (uint256[] memory amountsOut);\n\n /**\n * @notice Queries a `removeLiquiditySingleTokenExactIn` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided for the query\n * @param tokenOut Token used to remove liquidity\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountOut Expected amount of tokens to receive\n */\n function queryRemoveLiquiditySingleTokenExactIn(\n address pool,\n uint256 exactBptAmountIn,\n IERC20 tokenOut,\n address sender,\n bytes memory userData\n ) external returns (uint256 amountOut);\n\n /**\n * @notice Queries a `removeLiquiditySingleTokenExactOut` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param tokenOut Token used to remove liquidity\n * @param exactAmountOut Expected exact amount of tokens to receive\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return bptAmountIn Expected amount of pool tokens to burn\n */\n function queryRemoveLiquiditySingleTokenExactOut(\n address pool,\n IERC20 tokenOut,\n uint256 exactAmountOut,\n address sender,\n bytes memory userData\n ) external returns (uint256 bptAmountIn);\n\n /**\n * @notice Queries a `removeLiquidityCustom` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param maxBptAmountIn Maximum amount of pool tokens provided\n * @param minAmountsOut Expected minimum amounts of tokens to receive, sorted in token registration order\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return bptAmountIn Expected amount of pool tokens to burn\n * @return amountsOut Expected amounts of tokens to receive, sorted in token registration order\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function queryRemoveLiquidityCustom(\n address pool,\n uint256 maxBptAmountIn,\n uint256[] memory minAmountsOut,\n address sender,\n bytes memory userData\n ) external returns (uint256 bptAmountIn, uint256[] memory amountsOut, bytes memory returnData);\n\n /**\n * @notice Queries a `removeLiquidityRecovery` operation without actually executing it.\n * @param pool Address of the liquidity pool\n * @param exactBptAmountIn Exact amount of pool tokens provided for the query\n * @return amountsOut Expected amounts of tokens to receive, sorted in token registration order\n */\n function queryRemoveLiquidityRecovery(\n address pool,\n uint256 exactBptAmountIn\n ) external returns (uint256[] memory amountsOut);\n\n /**\n * @notice Queries a swap operation specifying an exact input token amount without actually executing it.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param exactAmountIn Exact amounts of input tokens to send\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountOut Calculated amount of output tokens to be received in exchange for the given input tokens\n */\n function querySwapSingleTokenExactIn(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 exactAmountIn,\n address sender,\n bytes calldata userData\n ) external returns (uint256 amountOut);\n\n /**\n * @notice Queries a swap operation specifying an exact output token amount without actually executing it.\n * @param pool Address of the liquidity pool\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param exactAmountOut Exact amounts of input tokens to receive\n * @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n * @param userData Additional (optional) data sent with the query request\n * @return amountIn Calculated amount of input tokens to be sent in exchange for the requested output tokens\n */\n function querySwapSingleTokenExactOut(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 exactAmountOut,\n address sender,\n bytes calldata userData\n ) external returns (uint256 amountIn);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IRouterCommon.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAllowanceTransfer } from \"permit2/src/interfaces/IAllowanceTransfer.sol\";\nimport { IPermit2 } from \"permit2/src/interfaces/IPermit2.sol\";\nimport { AddLiquidityKind, RemoveLiquidityKind } from \"./VaultTypes.sol\";\n\nimport { IWETH } from \"../solidity-utils/misc/IWETH.sol\";\n\n/// @notice Interface for functions shared between the `Router` and `BatchRouter`.\ninterface IRouterCommon {\n /**\n * @notice Data for the add liquidity hook.\n * @param sender Account originating the add liquidity operation\n * @param pool Address of the liquidity pool\n * @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n * @param minBptAmountOut Minimum amount of pool tokens to be received\n * @param kind Type of join (e.g., single or multi-token)\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to add liquidity\n */\n struct AddLiquidityHookParams {\n address sender;\n address pool;\n uint256[] maxAmountsIn;\n uint256 minBptAmountOut;\n AddLiquidityKind kind;\n bool wethIsEth;\n bytes userData;\n }\n\n /**\n * @notice Data for the remove liquidity hook.\n * @param sender Account originating the remove liquidity operation\n * @param pool Address of the liquidity pool\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @param maxBptAmountIn Maximum amount of pool tokens provided\n * @param kind Type of exit (e.g., single or multi-token)\n * @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n * @param userData Additional (optional) data sent with the request to remove liquidity\n */\n struct RemoveLiquidityHookParams {\n address sender;\n address pool;\n uint256[] minAmountsOut;\n uint256 maxBptAmountIn;\n RemoveLiquidityKind kind;\n bool wethIsEth;\n bytes userData;\n }\n\n /*******************************************************************************\n Utils\n *******************************************************************************/\n\n /// @notice Returns WETH contract address.\n function getWeth() external view returns (IWETH);\n\n /// @notice Returns Permit2 contract address.\n function getPermit2() external view returns (IPermit2);\n\n struct PermitApproval {\n address token;\n address owner;\n address spender;\n uint256 amount;\n uint256 nonce;\n uint256 deadline;\n }\n\n /**\n * @notice Permits multiple allowances and executes a batch of function calls on this contract.\n * @param permitBatch An array of `PermitApproval` structs, each representing an ERC20 permit request\n * @param permitSignatures An array of bytes, corresponding to the permit request signature in `permitBatch`\n * @param permit2Batch A batch of permit2 approvals\n * @param permit2Signature A permit2 signature for the batch approval\n * @param multicallData An array of bytes arrays, each representing an encoded function call on this contract\n * @return results Array of bytes arrays, each representing the return data from each function call executed\n */\n function permitBatchAndCall(\n PermitApproval[] calldata permitBatch,\n bytes[] calldata permitSignatures,\n IAllowanceTransfer.PermitBatch calldata permit2Batch,\n bytes calldata permit2Signature,\n bytes[] calldata multicallData\n ) external payable returns (bytes[] memory results);\n\n /**\n * @notice Executes a batch of function calls on this contract.\n * @param data Encoded function calls to be executed in the batch.\n * @return results Array of bytes arrays, each representing the return data from each function call executed.\n */\n function multicall(bytes[] calldata data) external payable returns (bytes[] memory results);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/ISenderGuard.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Interface for functions shared across all trusted routers.\ninterface ISenderGuard {\n /// @notice Incoming ETH transfer from an address that is not WETH.\n error EthTransfer();\n\n /// @notice The swap transaction was not validated before the specified deadline timestamp.\n error SwapDeadline();\n\n /**\n * @notice Get the first sender which initialized the call to Router.\n * @return sender The address of the sender\n */\n function getSender() external view returns (address sender);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Return the minimum/maximum swap fee percentages for a pool.\n * @dev The Vault does not enforce bounds on swap fee percentages; `IBasePool` implements this interface to ensure\n * that new pool developers think about and set these bounds according to their specific pool type.\n *\n * A minimum swap fee might be necessary to ensure mathematical soundness (e.g., Weighted Pools, which use the power\n * function in the invariant). A maximum swap fee is general protection for users. With no limits at the Vault level,\n * a pool could specify a near 100% swap fee, effectively disabling trading. Though there are some use cases, such as\n * LVR/MEV strategies, where a very high fee makes sense.\n *\n * Note that the Vault does ensure that dynamic and aggregate fees are less than 100% to prevent attempting to allocate\n * more fees than were collected by the operation. The true `MAX_FEE_PERCENTAGE` is defined in VaultTypes.sol, and is\n * the highest value below 100% that satisfies the precision requirements.\n */\ninterface ISwapFeePercentageBounds {\n /// @return minimumSwapFeePercentage The minimum swap fee percentage for a pool\n function getMinimumSwapFeePercentage() external view returns (uint256 minimumSwapFeePercentage);\n\n /// @return maximumSwapFeePercentage The maximum swap fee percentage for a pool\n function getMaximumSwapFeePercentage() external view returns (uint256 maximumSwapFeePercentage);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Return the minimum/maximum invariant ratios allowed during an unbalanced liquidity operation.\n * @dev The Vault does not enforce any \"baseline\" bounds on invariant ratios, since such bounds are highly specific\n * and dependent on the math of each pool type. Instead, the Vault reads invariant ratio bounds from the pools.\n * `IBasePool` implements this interface to ensure that new pool developers think about and set these bounds according\n * to their pool type's math.\n *\n * For instance, Balancer Weighted Pool math involves exponentiation (the `pow` function), which uses natural\n * logarithms and a discrete Taylor series expansion to compute x^y values for the 18-decimal floating point numbers\n * used in all Vault computations. See `LogExpMath` and `WeightedMath` for a derivation of the bounds for these pools.\n */\ninterface IUnbalancedLiquidityInvariantRatioBounds {\n /// @return minimumInvariantRatio The minimum invariant ratio for a pool during unbalanced remove liquidity\n function getMinimumInvariantRatio() external view returns (uint256 minimumInvariantRatio);\n\n /// @return maximumInvariantRatio The maximum invariant ratio for a pool during unbalanced add liquidity\n function getMaximumInvariantRatio() external view returns (uint256 maximumInvariantRatio);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"../solidity-utils/helpers/IAuthentication.sol\";\nimport { IVaultExtension } from \"./IVaultExtension.sol\";\nimport { IVaultErrors } from \"./IVaultErrors.sol\";\nimport { IVaultEvents } from \"./IVaultEvents.sol\";\nimport { IVaultAdmin } from \"./IVaultAdmin.sol\";\nimport { IVaultMain } from \"./IVaultMain.sol\";\n\n/// @notice Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries.\ninterface IVault is IVaultMain, IVaultExtension, IVaultAdmin, IVaultErrors, IVaultEvents, IAuthentication {\n /// @return vault The main Vault address.\n function vault() external view override(IVaultAdmin, IVaultExtension) returns (IVault);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IVault } from \"./IVault.sol\";\n\n/**\n * @notice Interface for functions defined on the `VaultAdmin` contract.\n * @dev `VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations,\n * as two delegate calls add gas to each call. Most of the permissioned calls are here.\n */\ninterface IVaultAdmin {\n /*******************************************************************************\n Constants and immutables\n *******************************************************************************/\n\n /**\n * @notice Returns the main Vault address.\n * @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n * @return vault The address of the main Vault\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Returns the Vault's pause window end time.\n * @dev This value is immutable, and represents the timestamp after which the Vault can no longer be paused\n * by governance. Balancer timestamps are 32 bits.\n *\n * @return pauseWindowEndTime The timestamp when the Vault's pause window ends\n */\n function getPauseWindowEndTime() external view returns (uint32 pauseWindowEndTime);\n\n /**\n * @notice Returns the Vault's buffer period duration.\n * @dev This value is immutable. It represents the period during which, if paused, the Vault will remain paused.\n * This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer\n * timestamps are 32 bits.\n *\n * @return bufferPeriodDuration The length of the buffer period in seconds\n */\n function getBufferPeriodDuration() external view returns (uint32 bufferPeriodDuration);\n\n /**\n * @notice Returns the Vault's buffer period end time.\n * @dev This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer\n * timestamps are 32 bits.\n *\n * @return bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused\n */\n function getBufferPeriodEndTime() external view returns (uint32 bufferPeriodEndTime);\n\n /**\n * @notice Get the minimum number of tokens in a pool.\n * @dev We expect the vast majority of pools to be 2-token.\n * @return minTokens The minimum token count of a pool\n */\n function getMinimumPoolTokens() external pure returns (uint256 minTokens);\n\n /**\n * @notice Get the maximum number of tokens in a pool.\n * @return maxTokens The maximum token count of a pool\n */\n function getMaximumPoolTokens() external pure returns (uint256 maxTokens);\n\n /**\n * @notice Get the minimum total supply of pool tokens (BPT) for an initialized pool.\n * @dev This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT\n * is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\n *\n * @return poolMinimumTotalSupply The minimum total supply a pool can have after initialization\n */\n function getPoolMinimumTotalSupply() external pure returns (uint256 poolMinimumTotalSupply);\n\n /**\n * @notice Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\n * @dev This prevents buffers from being completely drained. When the buffer is initialized, this minimum number\n * of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal\n * to the Vault, as buffers are not tokenized.\n *\n * @return bufferMinimumTotalSupply The minimum total supply a buffer can have after initialization\n */\n function getBufferMinimumTotalSupply() external pure returns (uint256 bufferMinimumTotalSupply);\n\n /**\n * @notice Get the minimum trade amount in a pool operation.\n * @dev This limit is applied to the 18-decimal \"upscaled\" amount in any operation (swap, add/remove liquidity).\n * @return minimumTradeAmount The minimum trade amount as an 18-decimal floating point number\n */\n function getMinimumTradeAmount() external view returns (uint256 minimumTradeAmount);\n\n /**\n * @notice Get the minimum wrap amount in a buffer operation.\n * @dev This limit is applied to the wrap operation amount, in native underlying token decimals.\n * @return minimumWrapAmount The minimum wrap amount in native underlying token decimals\n */\n function getMinimumWrapAmount() external view returns (uint256 minimumWrapAmount);\n\n /*******************************************************************************\n Vault Pausing\n *******************************************************************************/\n\n /**\n * @notice Indicates whether the Vault is paused.\n * @dev If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that\n * ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not\n * also pause buffers (though we anticipate they would likely be paused and unpaused together). Call\n * `areBuffersPaused` to check the pause state of the buffers.\n *\n * @return vaultPaused True if the Vault is paused\n */\n function isVaultPaused() external view returns (bool vaultPaused);\n\n /**\n * @notice Returns the paused status, and end times of the Vault's pause window and buffer period.\n * @dev Balancer timestamps are 32 bits.\n * @return vaultPaused True if the Vault is paused\n * @return vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window\n * @return vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period\n */\n function getVaultPausedState()\n external\n view\n returns (bool vaultPaused, uint32 vaultPauseWindowEndTime, uint32 vaultBufferPeriodEndTime);\n\n /**\n * @notice Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\n * @dev This is a permissioned function that will only work during the Pause Window set during deployment.\n * Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing\n * the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers\n * are also paused (with `pauseVaultBuffers`).\n */\n function pauseVault() external;\n\n /**\n * @notice Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\n * @dev This is a permissioned function that will only work on a paused Vault within the Buffer Period set during\n * deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above,\n * ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse\n * `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\n */\n function unpauseVault() external;\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /**\n * @notice Pause the Pool: an emergency action which disables all pool functions.\n * @dev This is a permissioned function that will only work during the Pause Window set during pool factory\n * deployment.\n *\n * @param pool The pool being paused\n */\n function pausePool(address pool) external;\n\n /**\n * @notice Reverse a `pause` operation, and restore the Pool to normal functionality.\n * @dev This is a permissioned function that will only work on a paused Pool within the Buffer Period set during\n * deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\n *\n * @param pool The pool being unpaused\n */\n function unpausePool(address pool) external;\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Assigns a new static swap fee percentage to the specified pool.\n * @dev This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within\n * the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`.\n * Emits the SwapFeePercentageChanged event.\n *\n * @param pool The address of the pool for which the static swap fee will be changed\n * @param swapFeePercentage The new swap fee percentage to apply to the pool\n */\n function setStaticSwapFeePercentage(address pool, uint256 swapFeePercentage) external;\n\n /**\n * @notice Collects accumulated aggregate swap and yield fees for the specified pool.\n * @dev Fees are sent to the ProtocolFeeController address.\n * @param pool The pool on which all aggregate fees should be collected\n * @return swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n * @return yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order\n */\n function collectAggregateFees(\n address pool\n ) external returns (uint256[] memory swapFeeAmounts, uint256[] memory yieldFeeAmounts);\n\n /**\n * @notice Update an aggregate swap fee percentage.\n * @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n * for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n * fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n * that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n * Emits an `AggregateSwapFeePercentageChanged` event.\n *\n * @param pool The pool whose swap fee percentage will be updated\n * @param newAggregateSwapFeePercentage The new aggregate swap fee percentage\n */\n function updateAggregateSwapFeePercentage(address pool, uint256 newAggregateSwapFeePercentage) external;\n\n /**\n * @notice Update an aggregate yield fee percentage.\n * @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n * for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n * fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n * that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n * Emits an `AggregateYieldFeePercentageChanged` event.\n *\n * @param pool The pool whose yield fee percentage will be updated\n * @param newAggregateYieldFeePercentage The new aggregate yield fee percentage\n */\n function updateAggregateYieldFeePercentage(address pool, uint256 newAggregateYieldFeePercentage) external;\n\n /**\n * @notice Sets a new Protocol Fee Controller for the Vault.\n * @dev This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\n * @param newProtocolFeeController The address of the new Protocol Fee Controller\n */\n function setProtocolFeeController(IProtocolFeeController newProtocolFeeController) external;\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Enable recovery mode for a pool.\n * @dev This is a permissioned function. It enables a safe proportional withdrawal, with no external calls.\n * Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so\n * must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live\n * balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\n *\n * @param pool The address of the pool\n */\n function enableRecoveryMode(address pool) external;\n\n /**\n * @notice Disable recovery mode for a pool.\n * @dev This is a permissioned function. It re-syncs live balances (which could not be updated during\n * Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could\n * potentially fail if there is an issue with any associated Rate Providers.\n *\n * @param pool The address of the pool\n */\n function disableRecoveryMode(address pool) external;\n\n /*******************************************************************************\n Query Functionality\n *******************************************************************************/\n\n /**\n * @notice Disables query functionality on the Vault. Can only be called by governance.\n * @dev The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from\n * settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable\n * queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).\n * This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether\n * disabling queries is completely necessary; queries can still be re-enabled after this call.\n */\n function disableQuery() external;\n\n /**\n * @notice Disables query functionality permanently on the Vault. Can only be called by governance.\n * @dev Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\n */\n function disableQueryPermanently() external;\n\n /**\n * @notice Enables query functionality on the Vault. Can only be called by governance.\n * @dev Only works if queries are not permanently disabled.\n */\n function enableQuery() external;\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Indicates whether the Vault buffers are paused.\n * @dev When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true)\n * will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and\n * independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they\n * would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\n *\n * @return buffersPaused True if the Vault buffers are paused\n */\n function areBuffersPaused() external view returns (bool buffersPaused);\n\n /**\n * @notice Pauses native vault buffers globally.\n * @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n * `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not\n * possible to pause vault buffers individually.\n *\n * This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate\n * and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting\n * buffers, and vice versa.\n */\n function pauseVaultBuffers() external;\n\n /**\n * @notice Unpauses native vault buffers globally.\n * @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n * `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above,\n * ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`.\n * If the Vault was also paused, it will remain in that state until explicitly unpaused.\n *\n * This is a permissioned call.\n */\n function unpauseVaultBuffers() external;\n\n /**\n * @notice Initializes buffer for the given wrapped token.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param amountUnderlyingRaw Amount of underlying tokens that will be deposited into the buffer\n * @param amountWrappedRaw Amount of wrapped tokens that will be deposited into the buffer\n * @param minIssuedShares Minimum amount of shares to receive from the buffer, expressed in underlying token\n * native decimals\n * @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n * liquidity from the buffer\n * @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n * (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\n */\n function initializeBuffer(\n IERC4626 wrappedToken,\n uint256 amountUnderlyingRaw,\n uint256 amountWrappedRaw,\n uint256 minIssuedShares,\n address sharesOwner\n ) external returns (uint256 issuedShares);\n\n /**\n * @notice Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\n * @dev The buffer needs to be initialized beforehand.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param maxAmountUnderlyingInRaw Maximum amount of underlying tokens to add to the buffer. It is expressed in\n * underlying token native decimals\n * @param maxAmountWrappedInRaw Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n * token native decimals\n * @param exactSharesToIssue The value in underlying tokens that `sharesOwner` wants to add to the buffer,\n * in underlying token decimals\n * @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n * liquidity from the buffer\n * @return amountUnderlyingRaw Amount of underlying tokens deposited into the buffer\n * @return amountWrappedRaw Amount of wrapped tokens deposited into the buffer\n */\n function addLiquidityToBuffer(\n IERC4626 wrappedToken,\n uint256 maxAmountUnderlyingInRaw,\n uint256 maxAmountWrappedInRaw,\n uint256 exactSharesToIssue,\n address sharesOwner\n ) external returns (uint256 amountUnderlyingRaw, uint256 amountWrappedRaw);\n\n /**\n * @notice Removes liquidity from an internal ERC4626 buffer in the Vault.\n * @dev Only proportional exits are supported, and the sender has to be the owner of the shares.\n * This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint.\n *\n * Pre-conditions:\n * - The buffer needs to be initialized.\n * - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why\n * this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer.\n * - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\n *\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param sharesToRemove Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's\n * total shares. It is expressed in underlying token native decimals\n * @param minAmountUnderlyingOutRaw Minimum amount of underlying tokens to receive from the buffer. It is expressed\n * in underlying token native decimals\n * @param minAmountWrappedOutRaw Minimum amount of wrapped tokens to receive from the buffer. It is expressed in\n * wrapped token native decimals\n * @return removedUnderlyingBalanceRaw Amount of underlying tokens returned to the user\n * @return removedWrappedBalanceRaw Amount of wrapped tokens returned to the user\n */\n function removeLiquidityFromBuffer(\n IERC4626 wrappedToken,\n uint256 sharesToRemove,\n uint256 minAmountUnderlyingOutRaw,\n uint256 minAmountWrappedOutRaw\n ) external returns (uint256 removedUnderlyingBalanceRaw, uint256 removedWrappedBalanceRaw);\n\n /**\n * @notice Returns the asset registered for a given wrapped token.\n * @dev The asset can never change after buffer initialization.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return underlyingToken Address of the underlying token registered for the wrapper; `address(0)` if the buffer\n * has not been initialized.\n */\n function getBufferAsset(IERC4626 wrappedToken) external view returns (address underlyingToken);\n\n /**\n * @notice Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets\n * in the buffer.\n *\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param liquidityOwner Address of the user that owns liquidity in the wrapped token's buffer\n * @return ownerShares Amount of shares allocated to the liquidity owner, in native underlying token decimals\n */\n function getBufferOwnerShares(\n IERC4626 wrappedToken,\n address liquidityOwner\n ) external view returns (uint256 ownerShares);\n\n /**\n * @notice Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return bufferShares Amount of supply shares of the buffer, in native underlying token decimals\n */\n function getBufferTotalShares(IERC4626 wrappedToken) external view returns (uint256 bufferShares);\n\n /**\n * @notice Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\n * @dev All values are in native token decimals of the wrapped or underlying tokens.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return underlyingBalanceRaw Amount of underlying tokens deposited into the buffer, in native token decimals\n * @return wrappedBalanceRaw Amount of wrapped tokens deposited into the buffer, in native token decimals\n */\n function getBufferBalance(\n IERC4626 wrappedToken\n ) external view returns (uint256 underlyingBalanceRaw, uint256 wrappedBalanceRaw);\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Sets a new Authorizer for the Vault.\n * @dev This is a permissioned call. Emits an `AuthorizerChanged` event.\n * @param newAuthorizer The address of the new authorizer\n */\n function setAuthorizer(IAuthorizer newAuthorizer) external;\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/// @notice Errors are declared inside an interface (namespace) to improve DX with Typechain.\ninterface IVaultErrors {\n /*******************************************************************************\n Registration and Initialization\n *******************************************************************************/\n\n /**\n * @notice A pool has already been registered. `registerPool` may only be called once.\n * @param pool The already registered pool\n */\n error PoolAlreadyRegistered(address pool);\n\n /**\n * @notice A pool has already been initialized. `initialize` may only be called once.\n * @param pool The already initialized pool\n */\n error PoolAlreadyInitialized(address pool);\n\n /**\n * @notice A pool has not been registered.\n * @param pool The unregistered pool\n */\n error PoolNotRegistered(address pool);\n\n /**\n * @notice A referenced pool has not been initialized.\n * @param pool The uninitialized pool\n */\n error PoolNotInitialized(address pool);\n\n /**\n * @notice A hook contract rejected a pool on registration.\n * @param poolHooksContract Address of the hook contract that rejected the pool registration\n * @param pool Address of the rejected pool\n * @param poolFactory Address of the pool factory\n */\n error HookRegistrationFailed(address poolHooksContract, address pool, address poolFactory);\n\n /**\n * @notice A token was already registered (i.e., it is a duplicate in the pool).\n * @param token The duplicate token\n */\n error TokenAlreadyRegistered(IERC20 token);\n\n /// @notice The token count is below the minimum allowed.\n error MinTokens();\n\n /// @notice The token count is above the maximum allowed.\n error MaxTokens();\n\n /// @notice Invalid tokens (e.g., zero) cannot be registered.\n error InvalidToken();\n\n /// @notice The token type given in a TokenConfig during pool registration is invalid.\n error InvalidTokenType();\n\n /// @notice The data in a TokenConfig struct is inconsistent or unsupported.\n error InvalidTokenConfiguration();\n\n /// @notice Tokens with more than 18 decimals are not supported.\n error InvalidTokenDecimals();\n\n /**\n * @notice The token list passed into an operation does not match the pool tokens in the pool.\n * @param pool Address of the pool\n * @param expectedToken The correct token at a given index in the pool\n * @param actualToken The actual token found at that index\n */\n error TokensMismatch(address pool, address expectedToken, address actualToken);\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /// @notice A transient accounting operation completed with outstanding token deltas.\n error BalanceNotSettled();\n\n /// @notice A user called a Vault function (swap, add/remove liquidity) outside the lock context.\n error VaultIsNotUnlocked();\n\n /// @notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\n error DynamicSwapFeeHookFailed();\n\n /// @notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\n error BeforeSwapHookFailed();\n\n /// @notice The pool has returned false to the afterSwap hook, indicating the transaction should revert.\n error AfterSwapHookFailed();\n\n /// @notice The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\n error BeforeInitializeHookFailed();\n\n /// @notice The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\n error AfterInitializeHookFailed();\n\n /// @notice The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\n error BeforeAddLiquidityHookFailed();\n\n /// @notice The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\n error AfterAddLiquidityHookFailed();\n\n /// @notice The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\n error BeforeRemoveLiquidityHookFailed();\n\n /// @notice The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\n error AfterRemoveLiquidityHookFailed();\n\n /// @notice An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\n error RouterNotTrusted();\n\n /*******************************************************************************\n Swaps\n *******************************************************************************/\n\n /// @notice The user tried to swap zero tokens.\n error AmountGivenZero();\n\n /// @notice The user attempted to swap a token for itself.\n error CannotSwapSameToken();\n\n /**\n * @notice The user attempted to operate with a token that is not in the pool.\n * @param token The unregistered token\n */\n error TokenNotRegistered(IERC20 token);\n\n /**\n * @notice An amount in or out has exceeded the limit specified in the swap request.\n * @param amount The total amount in or out\n * @param limit The amount of the limit that has been exceeded\n */\n error SwapLimit(uint256 amount, uint256 limit);\n\n /**\n * @notice A hook adjusted amount in or out has exceeded the limit specified in the swap request.\n * @param amount The total amount in or out\n * @param limit The amount of the limit that has been exceeded\n */\n error HookAdjustedSwapLimit(uint256 amount, uint256 limit);\n\n /// @notice The amount given or calculated for an operation is below the minimum limit.\n error TradeAmountTooSmall();\n\n /*******************************************************************************\n Add Liquidity\n *******************************************************************************/\n\n /// @notice Add liquidity kind not supported.\n error InvalidAddLiquidityKind();\n\n /**\n * @notice A required amountIn exceeds the maximum limit specified for the operation.\n * @param tokenIn The incoming token\n * @param amountIn The total token amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error AmountInAboveMax(IERC20 tokenIn, uint256 amountIn, uint256 maxAmountIn);\n\n /**\n * @notice A hook adjusted amountIn exceeds the maximum limit specified for the operation.\n * @param tokenIn The incoming token\n * @param amountIn The total token amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error HookAdjustedAmountInAboveMax(IERC20 tokenIn, uint256 amountIn, uint256 maxAmountIn);\n\n /**\n * @notice The BPT amount received from adding liquidity is below the minimum specified for the operation.\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error BptAmountOutBelowMin(uint256 amountOut, uint256 minAmountOut);\n\n /// @notice Pool does not support adding liquidity with a customized input.\n error DoesNotSupportAddLiquidityCustom();\n\n /// @notice Pool does not support adding liquidity through donation.\n error DoesNotSupportDonation();\n\n /*******************************************************************************\n Remove Liquidity\n *******************************************************************************/\n\n /// @notice Remove liquidity kind not supported.\n error InvalidRemoveLiquidityKind();\n\n /**\n * @notice The actual amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error AmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /**\n * @notice The hook adjusted amount out is below the minimum limit specified for the operation.\n * @param tokenOut The outgoing token\n * @param amountOut The total BPT amount out\n * @param minAmountOut The amount of the limit that has been exceeded\n */\n error HookAdjustedAmountOutBelowMin(IERC20 tokenOut, uint256 amountOut, uint256 minAmountOut);\n\n /**\n * @notice The required BPT amount in exceeds the maximum limit specified for the operation.\n * @param amountIn The total BPT amount in\n * @param maxAmountIn The amount of the limit that has been exceeded\n */\n error BptAmountInAboveMax(uint256 amountIn, uint256 maxAmountIn);\n\n /// @notice Pool does not support removing liquidity with a customized input.\n error DoesNotSupportRemoveLiquidityCustom();\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Error raised when there is an overflow in the fee calculation.\n * @dev This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole\n * (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee\n * percentages in the Vault.\n */\n error ProtocolFeesExceedTotalCollected();\n\n /**\n * @notice Error raised when the swap fee percentage is less than the minimum allowed value.\n * @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n * range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n * if it is below the minimum value returned by the pool.\n *\n * Pools with dynamic fees do not check these limits.\n */\n error SwapFeePercentageTooLow();\n\n /**\n * @notice Error raised when the swap fee percentage is greater than the maximum allowed value.\n * @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n * range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n * if it is above the maximum value returned by the pool.\n *\n * Pools with dynamic fees do not check these limits.\n */\n error SwapFeePercentageTooHigh();\n\n /**\n * @notice Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\n * @dev Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n * precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n * corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n * Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between\n * the aggregate fee calculated here and that stored in the Vault.\n */\n error FeePrecisionTooHigh();\n\n /// @notice A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\n error PercentageAboveMax();\n\n /*******************************************************************************\n Queries\n *******************************************************************************/\n\n /// @notice A user tried to execute a query operation when they were disabled.\n error QueriesDisabled();\n\n /// @notice An admin tried to re-enable queries, but they were disabled permanently.\n error QueriesDisabledPermanently();\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Cannot enable recovery mode when already enabled.\n * @param pool The pool\n */\n error PoolInRecoveryMode(address pool);\n\n /**\n * @notice Cannot disable recovery mode when not enabled.\n * @param pool The pool\n */\n error PoolNotInRecoveryMode(address pool);\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\n * @param sender The account attempting to call a permissioned function\n */\n error SenderIsNotVault(address sender);\n\n /*******************************************************************************\n Pausing\n *******************************************************************************/\n\n /// @notice The caller specified a pause window period longer than the maximum.\n error VaultPauseWindowDurationTooLarge();\n\n /// @notice The caller specified a buffer period longer than the maximum.\n error PauseBufferPeriodDurationTooLarge();\n\n /// @notice A user tried to perform an operation while the Vault was paused.\n error VaultPaused();\n\n /// @notice Governance tried to unpause the Vault when it was not paused.\n error VaultNotPaused();\n\n /// @notice Governance tried to pause the Vault after the pause period expired.\n error VaultPauseWindowExpired();\n\n /**\n * @notice A user tried to perform an operation involving a paused Pool.\n * @param pool The paused pool\n */\n error PoolPaused(address pool);\n\n /**\n * @notice Governance tried to unpause the Pool when it was not paused.\n * @param pool The unpaused pool\n */\n error PoolNotPaused(address pool);\n\n /**\n * @notice Governance tried to pause a Pool after the pause period expired.\n * @param pool The pool\n */\n error PoolPauseWindowExpired(address pool);\n\n /*******************************************************************************\n ERC4626 token buffers\n *******************************************************************************/\n\n /**\n * @notice The buffer for the given wrapped token was already initialized.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error BufferAlreadyInitialized(IERC4626 wrappedToken);\n\n /**\n * @notice The buffer for the given wrapped token was not initialized.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error BufferNotInitialized(IERC4626 wrappedToken);\n\n /// @notice The user is trying to remove more than their allocated shares from the buffer.\n error NotEnoughBufferShares();\n\n /**\n * @notice The wrapped token asset does not match the underlying token.\n * @dev This should never happen, but a malicious wrapper contract might not return the correct address.\n * Legitimate wrapper contracts should make the asset a constant or immutable value.\n *\n * @param wrappedToken The wrapped token corresponding to the buffer\n * @param underlyingToken The underlying token returned by `asset`\n */\n error WrongUnderlyingToken(IERC4626 wrappedToken, address underlyingToken);\n\n /**\n * @notice A wrapped token reported the zero address as its underlying token asset.\n * @dev This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to\n * re-initialize the buffer).\n *\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error InvalidUnderlyingToken(IERC4626 wrappedToken);\n\n /**\n * @notice The amount given to wrap/unwrap was too small, which can introduce rounding issues.\n * @param wrappedToken The wrapped token corresponding to the buffer\n */\n error WrapAmountTooSmall(IERC4626 wrappedToken);\n\n /// @notice Buffer operation attempted while vault buffers are paused.\n error VaultBuffersArePaused();\n\n /// @notice Buffer shares were minted to the zero address.\n error BufferSharesInvalidReceiver();\n\n /// @notice Buffer shares were burned from the zero address.\n error BufferSharesInvalidOwner();\n\n /**\n * @notice The total supply of a buffer can't be lower than the absolute minimum.\n * @param totalSupply The total supply value that was below the minimum\n */\n error BufferTotalSupplyTooLow(uint256 totalSupply);\n\n /// @dev A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\n error NotEnoughUnderlying(IERC4626 wrappedToken, uint256 expectedUnderlyingAmount, uint256 actualUnderlyingAmount);\n\n /// @dev A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\n error NotEnoughWrapped(IERC4626 wrappedToken, uint256 expectedWrappedAmount, uint256 actualWrappedAmount);\n\n /// @dev Shares issued during initialization are below the requested amount.\n error IssuedSharesBelowMin(uint256 issuedShares, uint256 minIssuedShares);\n\n /*******************************************************************************\n Miscellaneous\n *******************************************************************************/\n\n /// @notice Pool does not support adding / removing liquidity with an unbalanced input.\n error DoesNotSupportUnbalancedLiquidity();\n\n /// @notice The contract should not receive ETH.\n error CannotReceiveEth();\n\n /**\n * @notice The `VaultExtension` contract was called by an account directly.\n * @dev It can only be called by the Vault via delegatecall.\n */\n error NotVaultDelegateCall();\n\n /// @notice The `VaultExtension` contract was configured with an incorrect Vault address.\n error WrongVaultExtensionDeployment();\n\n /// @notice The `ProtocolFeeController` contract was configured with an incorrect Vault address.\n error WrongProtocolFeeControllerDeployment();\n\n /// @notice The `VaultAdmin` contract was configured with an incorrect Vault address.\n error WrongVaultAdminDeployment();\n\n /// @notice Quote reverted with a reserved error code.\n error QuoteResultSpoofed();\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IHooks } from \"./IHooks.sol\";\nimport \"./VaultTypes.sol\";\n\n/// @dev Events are declared inside an interface (namespace) to improve DX with Typechain.\ninterface IVaultEvents {\n /**\n * @notice A Pool was registered by calling `registerPool`.\n * @param pool The pool being registered\n * @param factory The factory creating the pool\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param swapFeePercentage The static swap fee of the pool\n * @param pauseWindowEndTime The pool's pause window end time\n * @param roleAccounts Addresses the Vault will allow to change certain pool settings\n * @param hooksConfig Flags indicating which hooks the pool supports and address of hooks contract\n * @param liquidityManagement Supported liquidity management hook flags\n */\n event PoolRegistered(\n address indexed pool,\n address indexed factory,\n TokenConfig[] tokenConfig,\n uint256 swapFeePercentage,\n uint32 pauseWindowEndTime,\n PoolRoleAccounts roleAccounts,\n HooksConfig hooksConfig,\n LiquidityManagement liquidityManagement\n );\n\n /**\n * @notice A Pool was initialized by calling `initialize`.\n * @param pool The pool being initialized\n */\n event PoolInitialized(address indexed pool);\n\n /**\n * @notice A swap has occurred.\n * @param pool The pool with the tokens being swapped\n * @param tokenIn The token entering the Vault (balance increases)\n * @param tokenOut The token leaving the Vault (balance decreases)\n * @param amountIn Number of tokenIn tokens\n * @param amountOut Number of tokenOut tokens\n * @param swapFeePercentage Swap fee percentage applied (can differ if dynamic)\n * @param swapFeeAmount Swap fee amount paid\n */\n event Swap(\n address indexed pool,\n IERC20 indexed tokenIn,\n IERC20 indexed tokenOut,\n uint256 amountIn,\n uint256 amountOut,\n uint256 swapFeePercentage,\n uint256 swapFeeAmount\n );\n\n /**\n * @notice A wrap operation has occurred.\n * @param wrappedToken The wrapped token address\n * @param depositedUnderlying Number of underlying tokens deposited\n * @param mintedShares Number of shares (wrapped tokens) minted\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event Wrap(\n IERC4626 indexed wrappedToken,\n uint256 depositedUnderlying,\n uint256 mintedShares,\n bytes32 bufferBalances\n );\n\n /**\n * @notice An unwrap operation has occurred.\n * @param wrappedToken The wrapped token address\n * @param burnedShares Number of shares (wrapped tokens) burned\n * @param withdrawnUnderlying Number of underlying tokens withdrawn\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event Unwrap(\n IERC4626 indexed wrappedToken,\n uint256 burnedShares,\n uint256 withdrawnUnderlying,\n bytes32 bufferBalances\n );\n\n /**\n * @notice Liquidity has been added to a pool (including initialization).\n * @param pool The pool with liquidity added\n * @param liquidityProvider The user performing the operation\n * @param kind The add liquidity operation type (e.g., proportional, custom)\n * @param totalSupply The total supply of the pool after the operation\n * @param amountsAddedRaw The amount of each token that was added, sorted in token registration order\n * @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order\n */\n event LiquidityAdded(\n address indexed pool,\n address indexed liquidityProvider,\n AddLiquidityKind indexed kind,\n uint256 totalSupply,\n uint256[] amountsAddedRaw,\n uint256[] swapFeeAmountsRaw\n );\n\n /**\n * @notice Liquidity has been removed from a pool.\n * @param pool The pool with liquidity removed\n * @param liquidityProvider The user performing the operation\n * @param kind The remove liquidity operation type (e.g., proportional, custom)\n * @param totalSupply The total supply of the pool after the operation\n * @param amountsRemovedRaw The amount of each token that was removed, sorted in token registration order\n * @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order\n */\n event LiquidityRemoved(\n address indexed pool,\n address indexed liquidityProvider,\n RemoveLiquidityKind indexed kind,\n uint256 totalSupply,\n uint256[] amountsRemovedRaw,\n uint256[] swapFeeAmountsRaw\n );\n\n /**\n * @notice The Vault's pause status has changed.\n * @param paused True if the Vault was paused\n */\n event VaultPausedStateChanged(bool paused);\n\n /// @notice `disableQuery` has been called on the Vault, disabling query functionality.\n event VaultQueriesDisabled();\n\n /// @notice `enableQuery` has been called on the Vault, enabling query functionality.\n event VaultQueriesEnabled();\n\n /**\n * @notice A Pool's pause status has changed.\n * @param pool The pool that was just paused or unpaused\n * @param paused True if the pool was paused\n */\n event PoolPausedStateChanged(address indexed pool, bool paused);\n\n /**\n * @notice Emitted when the swap fee percentage of a pool is updated.\n * @param swapFeePercentage The new swap fee percentage for the pool\n */\n event SwapFeePercentageChanged(address indexed pool, uint256 swapFeePercentage);\n\n /**\n * @notice Recovery mode has been enabled or disabled for a pool.\n * @param pool The pool\n * @param recoveryMode True if recovery mode was enabled\n */\n event PoolRecoveryModeStateChanged(address indexed pool, bool recoveryMode);\n\n /**\n * @notice A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\n * @dev The `ProtocolFeeController` will emit an event with the underlying change.\n * @param pool The pool whose aggregate swap fee percentage changed\n * @param aggregateSwapFeePercentage The new aggregate swap fee percentage\n */\n event AggregateSwapFeePercentageChanged(address indexed pool, uint256 aggregateSwapFeePercentage);\n\n /**\n * @notice A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\n * @dev The `ProtocolFeeController` will emit an event with the underlying change.\n * @param pool The pool whose aggregate yield fee percentage changed\n * @param aggregateYieldFeePercentage The new aggregate yield fee percentage\n */\n event AggregateYieldFeePercentageChanged(address indexed pool, uint256 aggregateYieldFeePercentage);\n\n /**\n * @notice A new authorizer is set by `setAuthorizer`.\n * @param newAuthorizer The address of the new authorizer\n */\n event AuthorizerChanged(IAuthorizer indexed newAuthorizer);\n\n /**\n * @notice A new protocol fee controller is set by `setProtocolFeeController`.\n * @param newProtocolFeeController The address of the new protocol fee controller\n */\n event ProtocolFeeControllerChanged(IProtocolFeeController indexed newProtocolFeeController);\n\n /**\n * @notice Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\n * @dev The underlying token can be derived from the wrapped token, so it's not included here.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param amountUnderlying The amount of the underlying token that was deposited\n * @param amountWrapped The amount of the wrapped token that was deposited\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event LiquidityAddedToBuffer(\n IERC4626 indexed wrappedToken,\n uint256 amountUnderlying,\n uint256 amountWrapped,\n bytes32 bufferBalances\n );\n\n /**\n * @notice Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\n * @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n * retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n * \"totalSupply\" of a buffer.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param to The owner of the minted shares\n * @param issuedShares The amount of \"internal BPT\" shares created\n */\n event BufferSharesMinted(IERC4626 indexed wrappedToken, address indexed to, uint256 issuedShares);\n\n /**\n * @notice Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\n * @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n * retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n * \"totalSupply\" of a buffer.\n *\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param from The owner of the burned shares\n * @param burnedShares The amount of \"internal BPT\" shares burned\n */\n event BufferSharesBurned(IERC4626 indexed wrappedToken, address indexed from, uint256 burnedShares);\n\n /**\n * @notice Liquidity was removed from an ERC4626 buffer.\n * @dev The underlying token can be derived from the wrapped token, so it's not included here.\n * @param wrappedToken The wrapped token that identifies the buffer\n * @param amountUnderlying The amount of the underlying token that was withdrawn\n * @param amountWrapped The amount of the wrapped token that was withdrawn\n * @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)\n */\n event LiquidityRemovedFromBuffer(\n IERC4626 indexed wrappedToken,\n uint256 amountUnderlying,\n uint256 amountWrapped,\n bytes32 bufferBalances\n );\n\n /**\n * @notice The Vault buffers pause status has changed.\n * @dev If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer`\n * set to true) will revert.\n *\n * @param paused True if the Vault buffers were paused\n */\n event VaultBuffersPausedStateChanged(bool paused);\n\n /**\n * @notice Pools can use this event to emit event data from the Vault.\n * @param pool Pool address\n * @param eventKey Event key\n * @param eventData Encoded event data\n */\n event VaultAuxiliary(address indexed pool, bytes32 indexed eventKey, bytes eventData);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IAuthorizer } from \"./IAuthorizer.sol\";\nimport { IProtocolFeeController } from \"./IProtocolFeeController.sol\";\nimport { IVault } from \"./IVault.sol\";\nimport { IHooks } from \"./IHooks.sol\";\nimport \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for functions defined on the `VaultExtension` contract.\n * @dev `VaultExtension` handles less critical or frequently used functions, since delegate calls through\n * the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and\n * liquidity operations.\n */\ninterface IVaultExtension {\n /*******************************************************************************\n Constants and immutables\n *******************************************************************************/\n\n /**\n * @notice Returns the main Vault address.\n * @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n * @return vault The address of the main Vault\n */\n function vault() external view returns (IVault);\n\n /**\n * @notice Returns the VaultAdmin contract address.\n * @dev The VaultAdmin contract mostly implements permissioned functions.\n * @return vaultAdmin The address of the Vault admin\n */\n function getVaultAdmin() external view returns (address vaultAdmin);\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @notice Returns whether the Vault is unlocked (i.e., executing an operation).\n * @dev The Vault must be unlocked to perform state-changing liquidity operations.\n * @return unlocked True if the Vault is unlocked, false otherwise\n */\n function isUnlocked() external view returns (bool unlocked);\n\n /**\n * @notice Returns the count of non-zero deltas.\n * @return nonzeroDeltaCount The current value of `_nonzeroDeltaCount`\n */\n function getNonzeroDeltaCount() external view returns (uint256 nonzeroDeltaCount);\n\n /**\n * @notice Retrieves the token delta for a specific token.\n * @dev This function allows reading the value from the `_tokenDeltas` mapping.\n * @param token The token for which the delta is being fetched\n * @return tokenDelta The delta of the specified token\n */\n function getTokenDelta(IERC20 token) external view returns (int256 tokenDelta);\n\n /**\n * @notice Retrieves the reserve (i.e., total Vault balance) of a given token.\n * @param token The token for which to retrieve the reserve\n * @return reserveAmount The amount of reserves for the given token\n */\n function getReservesOf(IERC20 token) external view returns (uint256 reserveAmount);\n\n /**\n * @notice This flag is used to detect and tax \"round-trip\" interactions (adding and removing liquidity in the\n * same pool).\n * @dev Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra\n * layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional\n * is the only standard way to exit a position without fees, and this flag is used to enable fees in that case.\n * It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse\n * than a simple swap for every pool type.\n *\n * @param pool Address of the pool to check\n * @return liquidityAdded True if liquidity has been added to this pool in the current transaction\n \n * Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\n */\n function getAddLiquidityCalledFlag(address pool) external view returns (bool liquidityAdded);\n\n /*******************************************************************************\n Pool Registration\n *******************************************************************************/\n\n /**\n * @notice Registers a pool, associating it with its factory and the tokens it manages.\n * @dev A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely\n * by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an\n * additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused\n * pool will automatically unpause. Balancer timestamps are 32 bits.\n *\n * A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a\n * multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to\n * the Vault.\n *\n * If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the\n * authorizer.\n *\n * @param pool The address of the pool being registered\n * @param tokenConfig An array of descriptors for the tokens the pool will manage\n * @param swapFeePercentage The initial static swap fee percentage of the pool\n * @param pauseWindowEndTime The timestamp after which it is no longer possible to pause the pool\n * @param protocolFeeExempt If true, the pool's initial aggregate fees will be set to 0\n * @param roleAccounts Addresses the Vault will allow to change certain pool settings\n * @param poolHooksContract Contract that implements the hooks for the pool\n * @param liquidityManagement Liquidity management flags with implemented methods\n */\n function registerPool(\n address pool,\n TokenConfig[] memory tokenConfig,\n uint256 swapFeePercentage,\n uint32 pauseWindowEndTime,\n bool protocolFeeExempt,\n PoolRoleAccounts calldata roleAccounts,\n address poolHooksContract,\n LiquidityManagement calldata liquidityManagement\n ) external;\n\n /**\n * @notice Checks whether a pool is registered.\n * @param pool Address of the pool to check\n * @return registered True if the pool is registered, false otherwise\n */\n function isPoolRegistered(address pool) external view returns (bool registered);\n\n /**\n * @notice Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\n * @param pool Address of the pool to initialize\n * @param to Address that will receive the output BPT\n * @param tokens Tokens used to seed the pool (must match the registered tokens)\n * @param exactAmountsIn Exact amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param userData Additional (optional) data required for adding initial liquidity\n * @return bptAmountOut Output pool token amount\n */\n function initialize(\n address pool,\n address to,\n IERC20[] memory tokens,\n uint256[] memory exactAmountsIn,\n uint256 minBptAmountOut,\n bytes memory userData\n ) external returns (uint256 bptAmountOut);\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /**\n * @notice Checks whether a pool is initialized.\n * @dev An initialized pool can be considered registered as well.\n * @param pool Address of the pool to check\n * @return initialized True if the pool is initialized, false otherwise\n */\n function isPoolInitialized(address pool) external view returns (bool initialized);\n\n /**\n * @notice Gets the tokens registered to a pool.\n * @param pool Address of the pool\n * @return tokens List of tokens in the pool\n */\n function getPoolTokens(address pool) external view returns (IERC20[] memory tokens);\n\n /**\n * @notice Gets pool token rates.\n * @dev This function performs external calls if tokens are yield-bearing. All returned arrays are in token\n * registration order.\n *\n * @param pool Address of the pool\n * @return decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n * calculations. FP(1) for 18-decimal tokens\n * @return tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n */\n function getPoolTokenRates(\n address pool\n ) external view returns (uint256[] memory decimalScalingFactors, uint256[] memory tokenRates);\n\n /**\n * @notice Returns comprehensive pool data for the given pool.\n * @dev This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\n * @param pool The address of the pool\n * @return poolData The `PoolData` result\n */\n function getPoolData(address pool) external view returns (PoolData memory poolData);\n\n /**\n * @notice Gets the raw data for a pool: tokens, raw balances, scaling factors.\n * @param pool Address of the pool\n * @return tokens The pool tokens, sorted in registration order\n * @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n * @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n * @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order\n */\n function getPoolTokenInfo(\n address pool\n )\n external\n view\n returns (\n IERC20[] memory tokens,\n TokenInfo[] memory tokenInfo,\n uint256[] memory balancesRaw,\n uint256[] memory lastBalancesLiveScaled18\n );\n\n /**\n * @notice Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in\n * registration order.\n *\n * @param pool Address of the pool\n * @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n */\n function getCurrentLiveBalances(address pool) external view returns (uint256[] memory balancesLiveScaled18);\n\n /**\n * @notice Gets the configuration parameters of a pool.\n * @dev The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\n * @param pool Address of the pool\n * @return poolConfig The pool configuration as a `PoolConfig` struct\n */\n function getPoolConfig(address pool) external view returns (PoolConfig memory poolConfig);\n\n /**\n * @notice Gets the hooks configuration parameters of a pool.\n * @dev The `HooksConfig` contains flags indicating which pool hooks are implemented.\n * @param pool Address of the pool\n * @return hooksConfig The hooks configuration as a `HooksConfig` struct\n */\n function getHooksConfig(address pool) external view returns (HooksConfig memory hooksConfig);\n\n /**\n * @notice The current rate of a pool token (BPT) = invariant / totalSupply.\n * @param pool Address of the pool\n * @return rate BPT rate\n */\n function getBptRate(address pool) external view returns (uint256 rate);\n\n /*******************************************************************************\n Balancer Pool Tokens\n *******************************************************************************/\n\n /**\n * @notice Gets the total supply of a given ERC20 token.\n * @param token The token address\n * @return tokenTotalSupply Total supply of the token\n */\n function totalSupply(address token) external view returns (uint256 tokenTotalSupply);\n\n /**\n * @notice Gets the balance of an account for a given ERC20 token.\n * @param token Address of the token\n * @param account Address of the account\n * @return tokenBalance Token balance of the account\n */\n function balanceOf(address token, address account) external view returns (uint256 tokenBalance);\n\n /**\n * @notice Gets the allowance of a spender for a given ERC20 token and owner.\n * @param token Address of the token\n * @param owner Address of the owner\n * @param spender Address of the spender\n * @return tokenAllowance Amount of tokens the spender is allowed to spend\n */\n function allowance(address token, address owner, address spender) external view returns (uint256 tokenAllowance);\n\n /**\n * @notice Approves a spender to spend pool tokens on behalf of sender.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param owner Address of the owner\n * @param spender Address of the spender\n * @param amount Amount of tokens to approve\n * @return success True if successful, false otherwise\n */\n function approve(address owner, address spender, uint256 amount) external returns (bool success);\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /**\n * @notice Indicates whether a pool is paused.\n * @dev If a pool is paused, all non-Recovery Mode state-changing operations will revert.\n * @param pool The pool to be checked\n * @return poolPaused True if the pool is paused\n */\n function isPoolPaused(address pool) external view returns (bool poolPaused);\n\n /**\n * @notice Returns the paused status, and end times of the Pool's pause window and buffer period.\n * @dev Note that even when set to a paused state, the pool will automatically unpause at the end of\n * the buffer period. Balancer timestamps are 32 bits.\n *\n * @param pool The pool whose data is requested\n * @return poolPaused True if the Pool is paused\n * @return poolPauseWindowEndTime The timestamp of the end of the Pool's pause window\n * @return poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)\n * @return pauseManager The pause manager, or the zero address\n */\n function getPoolPausedState(\n address pool\n )\n external\n view\n returns (bool poolPaused, uint32 poolPauseWindowEndTime, uint32 poolBufferPeriodEndTime, address pauseManager);\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Checks if the wrapped token has an initialized buffer in the Vault.\n * @dev An initialized buffer should have an asset registered in the Vault.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @return isBufferInitialized True if the ERC4626 buffer is initialized\n */\n function isERC4626BufferInitialized(IERC4626 wrappedToken) external view returns (bool isBufferInitialized);\n\n /**\n * @notice Gets the registered asset for a given buffer.\n * @dev To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers\n * should never call `wrapper.asset()` directly, at least without checking it against the asset registered with\n * the Vault on initialization.\n *\n * @param wrappedToken The wrapped token specifying the buffer\n * @return asset The underlying asset of the wrapped token\n */\n function getERC4626BufferAsset(IERC4626 wrappedToken) external view returns (address asset);\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /**\n * @notice Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\n * @param pool The address of the pool for which aggregate fees have been collected\n * @param token The address of the token in which fees have been accumulated\n * @return swapFeeAmount The total amount of fees accumulated in the specified token\n */\n function getAggregateSwapFeeAmount(address pool, IERC20 token) external view returns (uint256 swapFeeAmount);\n\n /**\n * @notice Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\n * @param pool The address of the pool for which aggregate fees have been collected\n * @param token The address of the token in which fees have been accumulated\n * @return yieldFeeAmount The total amount of fees accumulated in the specified token\n */\n function getAggregateYieldFeeAmount(address pool, IERC20 token) external view returns (uint256 yieldFeeAmount);\n\n /**\n * @notice Fetches the static swap fee percentage for a given pool.\n * @param pool The address of the pool whose static swap fee percentage is being queried\n * @return swapFeePercentage The current static swap fee percentage for the specified pool\n */\n function getStaticSwapFeePercentage(address pool) external view returns (uint256 swapFeePercentage);\n\n /**\n * @notice Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\n * @param pool The address of the pool whose roles are being queried\n * @return roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)\n */\n function getPoolRoleAccounts(address pool) external view returns (PoolRoleAccounts memory roleAccounts);\n\n /**\n * @notice Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\n * @dev Reverts if the hook doesn't return the success flag set to `true`.\n * @param pool The pool\n * @param swapParams The swap parameters used to compute the fee\n * @return dynamicSwapFeePercentage The dynamic swap fee percentage\n */\n function computeDynamicSwapFeePercentage(\n address pool,\n PoolSwapParams memory swapParams\n ) external view returns (uint256 dynamicSwapFeePercentage);\n\n /**\n * @notice Returns the Protocol Fee Controller address.\n * @return protocolFeeController Address of the ProtocolFeeController\n */\n function getProtocolFeeController() external view returns (IProtocolFeeController protocolFeeController);\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /**\n * @notice Checks whether a pool is in Recovery Mode.\n * @dev Recovery Mode enables a safe proportional withdrawal path, with no external calls.\n * @param pool Address of the pool to check\n * @return inRecoveryMode True if the pool is in Recovery Mode, false otherwise\n */\n function isPoolInRecoveryMode(address pool) external view returns (bool inRecoveryMode);\n\n /**\n * @notice Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out.\n * The request is implemented by the Vault without any interaction with the pool, ensuring that\n * it works the same for all pools, and cannot be disabled by a new pool type.\n *\n * @param pool Address of the pool\n * @param from Address of user to burn pool tokens from\n * @param exactBptAmountIn Input pool token amount\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @return amountsOut Actual calculated amounts of output tokens, sorted in token registration order\n */\n function removeLiquidityRecovery(\n address pool,\n address from,\n uint256 exactBptAmountIn,\n uint256[] memory minAmountsOut\n ) external returns (uint256[] memory amountsOut);\n\n /*******************************************************************************\n Queries\n *******************************************************************************/\n\n /**\n * @notice Performs a callback on msg.sender with arguments provided in `data`.\n * @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n * anything else will revert.\n *\n * Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n *\n * Allows the external calling of a function via the Vault contract to\n * access Vault's functions guarded by `onlyWhenUnlocked`.\n * `transient` modifier ensuring balances changes within the Vault are settled.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n * @return result Resulting data from the call\n */\n function quote(bytes calldata data) external returns (bytes memory result);\n\n /**\n * @notice Performs a callback on msg.sender with arguments provided in `data`.\n * @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n * anything else will revert.\n *\n * Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n *\n * Allows the external calling of a function via the Vault contract to\n * access Vault's functions guarded by `onlyWhenUnlocked`.\n * `transient` modifier ensuring balances changes within the Vault are settled.\n *\n * This call always reverts, returning the result in the revert reason.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n */\n function quoteAndRevert(bytes calldata data) external;\n\n /**\n * @notice Returns true if queries are disabled on the Vault.\n * @dev If true, queries might either be disabled temporarily or permanently.\n * @return queryDisabled True if query functionality is reversibly disabled\n */\n function isQueryDisabled() external view returns (bool queryDisabled);\n\n /**\n * @notice Returns true if queries are disabled permanently; false if they are enabled.\n * @dev This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\n * @return queryDisabledPermanently True if query functionality is permanently disabled\n */\n function isQueryDisabledPermanently() external view returns (bool queryDisabledPermanently);\n\n /**\n * @notice Pools can use this event to emit event data from the Vault.\n * @param eventKey Event key\n * @param eventData Encoded event data\n */\n function emitAuxiliaryEvent(bytes32 eventKey, bytes calldata eventData) external;\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /**\n * @notice Returns the Authorizer address.\n * @dev The authorizer holds the permissions granted by governance. It is set on Vault deployment,\n * and can be changed through a permissioned call.\n *\n * @return authorizer Address of the authorizer contract\n */\n function getAuthorizer() external view returns (IAuthorizer authorizer);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport \"./VaultTypes.sol\";\n\n/**\n * @notice Interface for functions defined on the main Vault contract.\n * @dev These are generally \"critical path\" functions (swap, add/remove liquidity) that are in the main contract\n * for technical or performance reasons.\n */\ninterface IVaultMain {\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @notice Creates a context for a sequence of operations (i.e., \"unlocks\" the Vault).\n * @dev Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`,\n * meaning all balances for the caller have to be settled at the end.\n *\n * @param data Contains function signature and args to be passed to the msg.sender\n * @return result Resulting data from the call\n */\n function unlock(bytes calldata data) external returns (bytes memory result);\n\n /**\n * @notice Settles deltas for a token; must be successful for the current lock to be released.\n * @dev Protects the caller against leftover dust in the Vault for the token being settled. The caller\n * should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any\n * excess in the Vault balance.\n *\n * If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as\n * credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail.\n *\n * If the given hint is lower than the difference in reserves, the hint is given as credit to the caller.\n * In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would\n * not affect settlement.\n *\n * The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve\n * difference equals current balance of the token minus existing reserves of the token when the function is called.\n *\n * @param token Address of the token\n * @param amountHint Amount paid as reported by the caller\n * @return credit Credit received in return of the payment\n */\n function settle(IERC20 token, uint256 amountHint) external returns (uint256 credit);\n\n /**\n * @notice Sends tokens to a recipient.\n * @dev There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel\n * debts.\n *\n * @param token Address of the token\n * @param to Recipient address\n * @param amount Amount of tokens to send\n */\n function sendTo(IERC20 token, address to, uint256 amount) external;\n\n /***************************************************************************\n Swaps\n ***************************************************************************/\n\n /**\n * @notice Swaps tokens based on provided parameters.\n * @dev All parameters are given in raw token decimal encoding.\n * @param vaultSwapParams Parameters for the swap (see above for struct definition)\n * @return amountCalculatedRaw Calculated swap amount\n * @return amountInRaw Amount of input tokens for the swap\n * @return amountOutRaw Amount of output tokens from the swap\n */\n function swap(\n VaultSwapParams memory vaultSwapParams\n ) external returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw);\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /**\n * @notice Adds liquidity to a pool.\n * @dev Caution should be exercised when adding liquidity because the Vault has the capability\n * to transfer tokens from any user, given that it holds all allowances.\n *\n * @param params Parameters for the add liquidity (see above for struct definition)\n * @return amountsIn Actual amounts of input tokens\n * @return bptAmountOut Output pool token amount\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function addLiquidity(\n AddLiquidityParams memory params\n ) external returns (uint256[] memory amountsIn, uint256 bptAmountOut, bytes memory returnData);\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /**\n * @notice Removes liquidity from a pool.\n * @dev Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user.\n * Untrusted routers require prior approval from the user. This is the only function allowed to call\n * _queryModeBalanceIncrease (and only in a query context).\n *\n * @param params Parameters for the remove liquidity (see above for struct definition)\n * @return bptAmountIn Actual amount of BPT burned\n * @return amountsOut Actual amounts of output tokens\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function removeLiquidity(\n RemoveLiquidityParams memory params\n ) external returns (uint256 bptAmountIn, uint256[] memory amountsOut, bytes memory returnData);\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /**\n * @notice Gets the index of a token in a given pool.\n * @dev Reverts if the pool is not registered, or if the token does not belong to the pool.\n * @param pool Address of the pool\n * @param token Address of the token\n * @return tokenCount Number of tokens in the pool\n * @return index Index corresponding to the given token in the pool's token list\n */\n function getPoolTokenCountAndIndexOfToken(\n address pool,\n IERC20 token\n ) external view returns (uint256 tokenCount, uint256 index);\n\n /*******************************************************************************\n Balancer Pool Tokens\n *******************************************************************************/\n\n /**\n * @notice Transfers pool token from owner to a recipient.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param owner Address of the owner\n * @param to Address of the recipient\n * @param amount Amount of tokens to transfer\n * @return success True if successful, false otherwise\n */\n function transfer(address owner, address to, uint256 amount) external returns (bool);\n\n /**\n * @notice Transfers pool token from a sender to a recipient using an allowance.\n * @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n * the pool contract, so msg.sender is used as the token address.\n *\n * @param spender Address allowed to perform the transfer\n * @param from Address of the sender\n * @param to Address of the recipient\n * @param amount Amount of tokens to transfer\n * @return success True if successful, false otherwise\n */\n function transferFrom(address spender, address from, address to, uint256 amount) external returns (bool success);\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /**\n * @notice Wraps/unwraps tokens based on the parameters provided.\n * @dev All parameters are given in raw token decimal encoding. It requires the buffer to be initialized,\n * and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\n *\n * @param params Parameters for the wrap/unwrap operation (see struct definition)\n * @return amountCalculatedRaw Calculated swap amount\n * @return amountInRaw Amount of input tokens for the swap\n * @return amountOutRaw Amount of output tokens from the swap\n */\n function erc4626BufferWrapOrUnwrap(\n BufferWrapOrUnwrapParams memory params\n ) external returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw);\n\n /*******************************************************************************\n Miscellaneous\n *******************************************************************************/\n\n /**\n * @notice Returns the VaultExtension contract address.\n * @dev Function is in the main Vault contract. The VaultExtension handles less critical or frequently used\n * functions, since delegate calls through the Vault are more expensive than direct calls.\n *\n * @return vaultExtension Address of the VaultExtension\n */\n function getVaultExtension() external view returns (address vaultExtension);\n}\n"},"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IRateProvider } from \"../solidity-utils/helpers/IRateProvider.sol\";\n\n/**\n * @notice Represents a pool's liquidity management configuration.\n * @param disableUnbalancedLiquidity If set, liquidity can only be added or removed proportionally\n * @param enableAddLiquidityCustom If set, the pool has implemented `onAddLiquidityCustom`\n * @param enableRemoveLiquidityCustom If set, the pool has implemented `onRemoveLiquidityCustom`\n * @param enableDonation If set, the pool will not revert if liquidity is added with AddLiquidityKind.DONATION\n */\nstruct LiquidityManagement {\n bool disableUnbalancedLiquidity;\n bool enableAddLiquidityCustom;\n bool enableRemoveLiquidityCustom;\n bool enableDonation;\n}\n\n// @notice Custom type to store the entire configuration of the pool.\ntype PoolConfigBits is bytes32;\n\n/**\n * @notice Represents a pool's configuration (hooks configuration are separated in another struct).\n * @param liquidityManagement Flags related to adding/removing liquidity\n * @param staticSwapFeePercentage The pool's native swap fee\n * @param aggregateSwapFeePercentage The total swap fee charged, including protocol and pool creator components\n * @param aggregateYieldFeePercentage The total swap fee charged, including protocol and pool creator components\n * @param tokenDecimalDiffs Compressed storage of the token decimals of each pool token\n * @param pauseWindowEndTime Timestamp after which the pool cannot be paused\n * @param isPoolRegistered If true, the pool has been registered with the Vault\n * @param isPoolInitialized If true, the pool has been initialized with liquidity, and is available for trading\n * @param isPoolPaused If true, the pool has been paused (by governance or the pauseManager)\n * @param isPoolInRecoveryMode If true, the pool has been placed in recovery mode, enabling recovery mode withdrawals\n */\nstruct PoolConfig {\n LiquidityManagement liquidityManagement;\n uint256 staticSwapFeePercentage;\n uint256 aggregateSwapFeePercentage;\n uint256 aggregateYieldFeePercentage;\n uint40 tokenDecimalDiffs;\n uint32 pauseWindowEndTime;\n bool isPoolRegistered;\n bool isPoolInitialized;\n bool isPoolPaused;\n bool isPoolInRecoveryMode;\n}\n\n/**\n * @notice The flag portion of the `HooksConfig`.\n * @dev `enableHookAdjustedAmounts` must be true for all contracts that modify the `amountCalculated`\n * in after hooks. Otherwise, the Vault will ignore any \"hookAdjusted\" amounts. Setting any \"shouldCall\"\n * flags to true will cause the Vault to call the corresponding hook during operations.\n */\nstruct HookFlags {\n bool enableHookAdjustedAmounts;\n bool shouldCallBeforeInitialize;\n bool shouldCallAfterInitialize;\n bool shouldCallComputeDynamicSwapFee;\n bool shouldCallBeforeSwap;\n bool shouldCallAfterSwap;\n bool shouldCallBeforeAddLiquidity;\n bool shouldCallAfterAddLiquidity;\n bool shouldCallBeforeRemoveLiquidity;\n bool shouldCallAfterRemoveLiquidity;\n}\n\n/// @notice Represents a hook contract configuration for a pool (HookFlags + hooksContract address).\nstruct HooksConfig {\n bool enableHookAdjustedAmounts;\n bool shouldCallBeforeInitialize;\n bool shouldCallAfterInitialize;\n bool shouldCallComputeDynamicSwapFee;\n bool shouldCallBeforeSwap;\n bool shouldCallAfterSwap;\n bool shouldCallBeforeAddLiquidity;\n bool shouldCallAfterAddLiquidity;\n bool shouldCallBeforeRemoveLiquidity;\n bool shouldCallAfterRemoveLiquidity;\n address hooksContract;\n}\n\n/**\n * @notice Represents temporary state used during a swap operation.\n * @param indexIn The zero-based index of tokenIn\n * @param indexOut The zero-based index of tokenOut\n * @param amountGivenScaled18 The amountGiven (i.e., tokenIn for ExactIn), adjusted for token decimals\n * @param swapFeePercentage The swap fee to be applied (might be static or dynamic)\n */\nstruct SwapState {\n uint256 indexIn;\n uint256 indexOut;\n uint256 amountGivenScaled18;\n uint256 swapFeePercentage;\n}\n\n/**\n * @notice Represents the Vault's configuration.\n * @param isQueryDisabled If set to true, disables query functionality of the Vault. Can be modified by governance\n * @param isVaultPaused If set to true, swaps and add/remove liquidity operations are halted\n * @param areBuffersPaused If set to true, the Vault wrap/unwrap primitives associated with buffers will be disabled\n */\nstruct VaultState {\n bool isQueryDisabled;\n bool isVaultPaused;\n bool areBuffersPaused;\n}\n\n/**\n * @notice Represents the accounts holding certain roles for a given pool. This is passed in on pool registration.\n * @param pauseManager Account empowered to pause/unpause the pool (note that governance can always pause a pool)\n * @param swapFeeManager Account empowered to set static swap fees for a pool (or 0 to delegate to governance)\n * @param poolCreator Account empowered to set the pool creator fee (or 0 if all fees go to the protocol and LPs)\n */\nstruct PoolRoleAccounts {\n address pauseManager;\n address swapFeeManager;\n address poolCreator;\n}\n\n/*******************************************************************************\n Tokens\n*******************************************************************************/\n\n// Note that the following tokens are unsupported by the Vault. This list is not meant to be exhaustive, but covers\n// many common types of tokens that will not work with the Vault architecture. (See https://github.com/d-xo/weird-erc20\n// for examples of token features that are problematic for many protocols.)\n//\n// * Rebasing tokens (e.g., aDAI). The Vault keeps track of token balances in its internal accounting; any token whose\n// balance changes asynchronously (i.e., outside a swap or liquidity operation), would get out-of-sync with this\n// internal accounting. This category would also include \"airdrop\" tokens, whose balances can change unexpectedly.\n//\n// * Double entrypoint (e.g., old Synthetix tokens, now fixed). These could likewise bypass internal accounting by\n// registering the token under one address, then accessing it through another. This is especially troublesome\n// in v3, with the introduction of ERC4626 buffers.\n//\n// * Fee on transfer (e.g., PAXG). The Vault issues credits and debits according to given and calculated token amounts,\n// and settlement assumes that the send/receive transfer functions transfer exactly the given number of tokens.\n// If this is not the case, transactions will not settle. Unlike with the other types, which are fundamentally\n// incompatible, it would be possible to design a Router to handle this - but we didn't try it. In any case, it's\n// not supported in the current Routers.\n//\n// * Tokens with more than 18 decimals (e.g., YAM-V2). The Vault handles token scaling: i.e., handling I/O for\n// amounts in native token decimals, but doing calculations with full 18-decimal precision. This requires reading\n// and storing the decimals for each token. Since virtually all tokens are 18 or fewer decimals, and we have limited\n// storage space, 18 was a reasonable maximum. Unlike the other types, this is enforceable by the Vault. Attempting\n// to register such tokens will revert with `InvalidTokenDecimals`. Of course, we must also be able to read the token\n// decimals, so the Vault only supports tokens that implement `IERC20Metadata.decimals`, and return a value less than\n// or equal to 18.\n//\n// * Token decimals are checked and stored only once, on registration. Valid tokens store their decimals as immutable\n// variables or constants. Malicious tokens that don't respect this basic property would not work anywhere in DeFi.\n//\n// These types of tokens are supported but discouraged, as they don't tend to play well with AMMs generally.\n//\n// * Very low-decimal tokens (e.g., GUSD). The Vault has been extensively tested with 6-decimal tokens (e.g., USDC),\n// but going much below that may lead to unanticipated effects due to precision loss, especially with smaller trade\n// values.\n//\n// * Revert on zero value approval/transfer. The Vault has been tested against these, but peripheral contracts, such\n// as hooks, might not have been designed with this in mind.\n//\n// * Other types from \"weird-erc20,\" such as upgradeable, pausable, or tokens with blocklists. We have seen cases\n// where a token upgrade fails, \"bricking\" the token - and many operations on pools containing that token. Any\n// sort of \"permissioned\" token that can make transfers fail can cause operations on pools containing them to\n// revert. Even Recovery Mode cannot help then, as it does a proportional withdrawal of all tokens. If one of\n// them is bricked, the whole operation will revert. Since v3 does not have \"internal balances\" like v2, there\n// is no recourse.\n//\n// Of course, many tokens in common use have some of these \"features\" (especially centralized stable coins), so\n// we have to support them anyway. Working with common centralized tokens is a risk common to all of DeFi.\n\n/**\n * @notice Token types supported by the Vault.\n * @dev In general, pools may contain any combination of these tokens.\n *\n * STANDARD tokens (e.g., BAL, WETH) have no rate provider.\n * WITH_RATE tokens (e.g., wstETH) require a rate provider. These may be tokens like wstETH, which need to be wrapped\n * because the underlying stETH token is rebasing, and such tokens are unsupported by the Vault. They may also be\n * tokens like sEUR, which track an underlying asset, but are not yield-bearing. Finally, this encompasses\n * yield-bearing ERC4626 tokens, which can be used to facilitate swaps without requiring wrapping or unwrapping\n * in most cases. The `paysYieldFees` flag can be used to indicate whether a token is yield-bearing (e.g., waDAI),\n * not yield-bearing (e.g., sEUR), or yield-bearing but exempt from fees (e.g., in certain nested pools, where\n * yield fees are charged elsewhere).\n *\n * NB: STANDARD must always be the first enum element, so that newly initialized data structures default to Standard.\n */\nenum TokenType {\n STANDARD,\n WITH_RATE\n}\n\n/**\n * @notice Encapsulate the data required for the Vault to support a token of the given type.\n * @dev For STANDARD tokens, the rate provider address must be 0, and paysYieldFees must be false. All WITH_RATE tokens\n * need a rate provider, and may or may not be yield-bearing.\n *\n * At registration time, it is useful to include the token address along with the token parameters in the structure\n * passed to `registerPool`, as the alternative would be parallel arrays, which would be error prone and require\n * validation checks. `TokenConfig` is only used for registration, and is never put into storage (see `TokenInfo`).\n *\n * @param token The token address\n * @param tokenType The token type (see the enum for supported types)\n * @param rateProvider The rate provider for a token (see further documentation above)\n * @param paysYieldFees Flag indicating whether yield fees should be charged on this token\n */\nstruct TokenConfig {\n IERC20 token;\n TokenType tokenType;\n IRateProvider rateProvider;\n bool paysYieldFees;\n}\n\n/**\n * @notice This data structure is stored in `_poolTokenInfo`, a nested mapping from pool -> (token -> TokenInfo).\n * @dev Since the token is already the key of the nested mapping, it would be redundant (and an extra SLOAD) to store\n * it again in the struct. When we construct PoolData, the tokens are separated into their own array.\n *\n * @param tokenType The token type (see the enum for supported types)\n * @param rateProvider The rate provider for a token (see further documentation above)\n * @param paysYieldFees Flag indicating whether yield fees should be charged on this token\n */\nstruct TokenInfo {\n TokenType tokenType;\n IRateProvider rateProvider;\n bool paysYieldFees;\n}\n\n/**\n * @notice Data structure used to represent the current pool state in memory\n * @param poolConfigBits Custom type to store the entire configuration of the pool.\n * @param tokens Pool tokens, sorted in token registration order\n * @param tokenInfo Configuration data for each token, sorted in token registration order\n * @param balancesRaw Token balances in native decimals\n * @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n * @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n * @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n * calculations. It is 1e18 (FP 1) for 18-decimal tokens\n */\nstruct PoolData {\n PoolConfigBits poolConfigBits;\n IERC20[] tokens;\n TokenInfo[] tokenInfo;\n uint256[] balancesRaw;\n uint256[] balancesLiveScaled18;\n uint256[] tokenRates;\n uint256[] decimalScalingFactors;\n}\n\nenum Rounding {\n ROUND_UP,\n ROUND_DOWN\n}\n\n/*******************************************************************************\n Swaps\n*******************************************************************************/\n\nenum SwapKind {\n EXACT_IN,\n EXACT_OUT\n}\n\n// There are two \"SwapParams\" structs defined below. `VaultSwapParams` corresponds to the external swap API defined\n// in the Router contracts, which uses explicit token addresses, the amount given and limit on the calculated amount\n// expressed in native token decimals, and optional user data passed in from the caller.\n//\n// `PoolSwapParams` passes some of this information through (kind, userData), but \"translates\" the parameters to fit\n// the internal swap API used by `IBasePool`. It scales amounts to full 18-decimal precision, adds the token balances,\n// converts the raw token addresses to indices, and adds the address of the Router originating the request. It does\n// not need the limit, since this is checked at the Router level.\n\n/**\n * @notice Data passed into primary Vault `swap` operations.\n * @param kind Type of swap (Exact In or Exact Out)\n * @param pool The pool with the tokens being swapped\n * @param tokenIn The token entering the Vault (balance increases)\n * @param tokenOut The token leaving the Vault (balance decreases)\n * @param amountGivenRaw Amount specified for tokenIn or tokenOut (depending on the type of swap)\n * @param limitRaw Minimum or maximum value of the calculated amount (depending on the type of swap)\n * @param userData Additional (optional) user data\n */\nstruct VaultSwapParams {\n SwapKind kind;\n address pool;\n IERC20 tokenIn;\n IERC20 tokenOut;\n uint256 amountGivenRaw;\n uint256 limitRaw;\n bytes userData;\n}\n\n/**\n * @notice Data for a swap operation, used by contracts implementing `IBasePool`.\n * @param kind Type of swap (exact in or exact out)\n * @param amountGivenScaled18 Amount given based on kind of the swap (e.g., tokenIn for EXACT_IN)\n * @param balancesScaled18 Current pool balances\n * @param indexIn Index of tokenIn\n * @param indexOut Index of tokenOut\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param userData Additional (optional) data required for the swap\n */\nstruct PoolSwapParams {\n SwapKind kind;\n uint256 amountGivenScaled18;\n uint256[] balancesScaled18;\n uint256 indexIn;\n uint256 indexOut;\n address router;\n bytes userData;\n}\n\n/**\n * @notice Data for the hook after a swap operation.\n * @param kind Type of swap (exact in or exact out)\n * @param tokenIn Token to be swapped from\n * @param tokenOut Token to be swapped to\n * @param amountInScaled18 Amount of tokenIn (entering the Vault)\n * @param amountOutScaled18 Amount of tokenOut (leaving the Vault)\n * @param tokenInBalanceScaled18 Updated (after swap) balance of tokenIn\n * @param tokenOutBalanceScaled18 Updated (after swap) balance of tokenOut\n * @param amountCalculatedScaled18 Token amount calculated by the swap\n * @param amountCalculatedRaw Token amount calculated by the swap\n * @param router The address (usually a router contract) that initiated a swap operation on the Vault\n * @param pool Pool address\n * @param userData Additional (optional) data required for the swap\n */\nstruct AfterSwapParams {\n SwapKind kind;\n IERC20 tokenIn;\n IERC20 tokenOut;\n uint256 amountInScaled18;\n uint256 amountOutScaled18;\n uint256 tokenInBalanceScaled18;\n uint256 tokenOutBalanceScaled18;\n uint256 amountCalculatedScaled18;\n uint256 amountCalculatedRaw;\n address router;\n address pool;\n bytes userData;\n}\n\n/*******************************************************************************\n Add liquidity\n*******************************************************************************/\n\nenum AddLiquidityKind {\n PROPORTIONAL,\n UNBALANCED,\n SINGLE_TOKEN_EXACT_OUT,\n DONATION,\n CUSTOM\n}\n\n/**\n * @notice Data for an add liquidity operation.\n * @param pool Address of the pool\n * @param to Address of user to mint to\n * @param maxAmountsIn Maximum amounts of input tokens\n * @param minBptAmountOut Minimum amount of output pool tokens\n * @param kind Add liquidity kind\n * @param userData Optional user data\n */\nstruct AddLiquidityParams {\n address pool;\n address to;\n uint256[] maxAmountsIn;\n uint256 minBptAmountOut;\n AddLiquidityKind kind;\n bytes userData;\n}\n\n/*******************************************************************************\n Remove liquidity\n*******************************************************************************/\n\nenum RemoveLiquidityKind {\n PROPORTIONAL,\n SINGLE_TOKEN_EXACT_IN,\n SINGLE_TOKEN_EXACT_OUT,\n CUSTOM\n}\n\n/**\n * @notice Data for an remove liquidity operation.\n * @param pool Address of the pool\n * @param from Address of user to burn from\n * @param maxBptAmountIn Maximum amount of input pool tokens\n * @param minAmountsOut Minimum amounts of output tokens\n * @param kind Remove liquidity kind\n * @param userData Optional user data\n */\nstruct RemoveLiquidityParams {\n address pool;\n address from;\n uint256 maxBptAmountIn;\n uint256[] minAmountsOut;\n RemoveLiquidityKind kind;\n bytes userData;\n}\n\n/*******************************************************************************\n Remove liquidity\n*******************************************************************************/\n\nenum WrappingDirection {\n WRAP,\n UNWRAP\n}\n\n/**\n * @notice Data for a wrap/unwrap operation.\n * @param kind Type of swap (Exact In or Exact Out)\n * @param direction Direction of the wrapping operation (Wrap or Unwrap)\n * @param wrappedToken Wrapped token, compatible with interface ERC4626\n * @param amountGivenRaw Amount specified for tokenIn or tokenOut (depends on the type of swap and wrapping direction)\n * @param limitRaw Minimum or maximum amount specified for the other token (depends on the type of swap and wrapping\n * direction)\n */\nstruct BufferWrapOrUnwrapParams {\n SwapKind kind;\n WrappingDirection direction;\n IERC4626 wrappedToken;\n uint256 amountGivenRaw;\n uint256 limitRaw;\n}\n\n// Protocol Fees are 24-bit values. We transform them by multiplying by 1e11, so that they can be set to any value\n// between 0% and 100% (step 0.00001%). Protocol and pool creator fees are set in the `ProtocolFeeController`, and\n// ensure both constituent and aggregate fees do not exceed this precision.\nuint256 constant FEE_BITLENGTH = 24;\nuint256 constant FEE_SCALING_FACTOR = 1e11;\n// Used to ensure the safety of fee-related math (e.g., pools or hooks don't set it greater than 100%).\n// This value should work for practical purposes and is well within the max precision requirements.\nuint256 constant MAX_FEE_PERCENTAGE = 99.9999e16; // 99.9999%\n"},"@balancer-labs/v3-pool-utils/contracts/BasePoolAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { CommonAuthentication } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol\";\n\n/// @dev Base contract for performing access control on external functions within pools.\nabstract contract BasePoolAuthentication is CommonAuthentication {\n IVault private immutable _vault;\n\n /**\n * @dev Pools should use the pool factory as the disambiguator passed into the base Authentication contract.\n * Otherwise, permissions would conflict if different pools reused function names.\n */\n constructor(IVault vault, address factory) CommonAuthentication(vault, bytes32(uint256(uint160(factory)))) {\n // solhint-disable-previous-line no-empty-blocks\n }\n}\n"},"@balancer-labs/v3-pool-utils/contracts/BasePoolFactory.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { Create2 } from \"@openzeppelin/contracts/utils/Create2.sol\";\n\nimport { IBasePoolFactory } from \"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport {\n TokenConfig,\n PoolRoleAccounts,\n LiquidityManagement\n} from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { FactoryWidePauseWindow } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/FactoryWidePauseWindow.sol\";\nimport { SingletonAuthentication } from \"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\";\n\n/**\n * @notice Base contract for Pool factories.\n *\n * Pools are deployed from factories to allow third parties to more easily reason about them. Unknown Pools may have\n * arbitrary logic: being able to assert that a Pool's behavior follows certain rules (those imposed by the contracts\n * created by the factory) is very powerful.\n *\n * Note that in v3, the factory alone is not enough to ensure the safety of a pool. v3 pools can have arbitrary hook\n * contracts, rate providers, complex tokens, and configuration that significantly impacts pool behavior. Specialty\n * factories can be designed to limit their pools range of behavior (e.g., weighted 80/20 factories where the token\n * count and weights are fixed).\n *\n * Since we expect to release new versions of pool types regularly - and the blockchain is forever - versioning will\n * become increasingly important. Governance can deprecate a factory by calling `disable`, which will permanently\n * prevent the creation of any future pools from the factory.\n *\n * Use of factories is also important for security. Calls to `registerPool` or `initialize` made directly on the Vault\n * could potentially be frontrun. In the case of registration, a DoS attack could register a pool with malicious\n * parameters, causing the legitimate registration transaction to fail. The standard Balancer factories avoid this by\n * deploying and registering in a single `create` function.\n *\n * It would also be possible to frontrun `initialize` (e.g., with unbalanced liquidity), and cause the intended\n * initialization to fail. Like registration, initialization only happens once. The Balancer standard factories do not\n * initialize on create, as this would be more complex (e.g., requiring token approvals), and it's very common for the\n * deployment and funding to be performed from different accounts. Also, frontrunning `initialize` doesn't have serious\n * consequences, beyond being a DoS.\n *\n * Nevertheless, this is a factor to consider when launching new pools. To avoid any possibility of frontrunning,\n * the best practice would be to create (i.e., deploy and register) and initialize in the same transaction.\n */\nabstract contract BasePoolFactory is IBasePoolFactory, SingletonAuthentication, FactoryWidePauseWindow {\n mapping(address pool => bool isFromFactory) private _isPoolFromFactory;\n address[] private _pools;\n\n bool private _disabled;\n\n // Store the creationCode of the contract to be deployed by create2.\n bytes private _creationCode;\n\n /// @notice A pool creator was specified for a pool from a Balancer core pool type.\n error StandardPoolWithCreator();\n\n constructor(\n IVault vault,\n uint32 pauseWindowDuration,\n bytes memory creationCode\n ) SingletonAuthentication(vault) FactoryWidePauseWindow(pauseWindowDuration) {\n _creationCode = creationCode;\n }\n\n /// @inheritdoc IBasePoolFactory\n function isPoolFromFactory(address pool) external view returns (bool) {\n return _isPoolFromFactory[pool];\n }\n\n /// @inheritdoc IBasePoolFactory\n function getPoolCount() external view returns (uint256) {\n return _pools.length;\n }\n\n /// @inheritdoc IBasePoolFactory\n function getPools() external view returns (address[] memory) {\n return _pools;\n }\n\n /// @inheritdoc IBasePoolFactory\n function getPoolsInRange(uint256 start, uint256 count) external view returns (address[] memory pools) {\n uint256 length = _pools.length;\n if (start >= length) {\n revert IndexOutOfBounds();\n }\n\n // If `count` requests more pools than we have available, stop at the end of the array.\n uint256 end = start + count;\n if (end > length) {\n count = length - start;\n }\n\n pools = new address[](count);\n for (uint256 i = 0; i < count; i++) {\n pools[i] = _pools[start + i];\n }\n }\n\n /// @inheritdoc IBasePoolFactory\n function isDisabled() public view returns (bool) {\n return _disabled;\n }\n\n /// @inheritdoc IBasePoolFactory\n function getDeploymentAddress(bytes memory constructorArgs, bytes32 salt) public view returns (address) {\n bytes memory creationCode = abi.encodePacked(_creationCode, constructorArgs);\n bytes32 creationCodeHash = keccak256(creationCode);\n bytes32 finalSalt = _computeFinalSalt(salt);\n\n return Create2.computeAddress(finalSalt, creationCodeHash);\n }\n\n /// @inheritdoc IBasePoolFactory\n function disable() external authenticate {\n _ensureEnabled();\n\n _disabled = true;\n\n emit FactoryDisabled();\n }\n\n function _ensureEnabled() internal view {\n if (isDisabled()) {\n revert Disabled();\n }\n }\n\n function _registerPoolWithFactory(address pool) internal virtual {\n _ensureEnabled();\n\n _isPoolFromFactory[pool] = true;\n _pools.push(pool);\n\n emit PoolCreated(pool);\n }\n\n /**\n * @dev Factories that require a custom-calculated salt can override to replace this default salt processing.\n * By default, the pool address determinants include the sender and chain id, as well as the user-provided salt,\n * so contracts will generally not have the same address on different L2s.\n */\n function _computeFinalSalt(bytes32 salt) internal view virtual returns (bytes32) {\n return keccak256(abi.encode(msg.sender, block.chainid, salt));\n }\n\n function _create(bytes memory constructorArgs, bytes32 salt) internal returns (address pool) {\n bytes memory creationCode = abi.encodePacked(_creationCode, constructorArgs);\n bytes32 finalSalt = _computeFinalSalt(salt);\n pool = Create2.deploy(0, finalSalt, creationCode);\n\n _registerPoolWithFactory(pool);\n }\n\n function _registerPoolWithVault(\n address pool,\n TokenConfig[] memory tokens,\n uint256 swapFeePercentage,\n bool protocolFeeExempt,\n PoolRoleAccounts memory roleAccounts,\n address poolHooksContract,\n LiquidityManagement memory liquidityManagement\n ) internal {\n getVault().registerPool(\n pool,\n tokens,\n swapFeePercentage,\n getNewPoolPauseWindowEndTime(),\n protocolFeeExempt,\n roleAccounts,\n poolHooksContract,\n liquidityManagement\n );\n }\n\n /// @notice A common place to retrieve a default hooks contract. Currently set to address(0) (i.e. no hooks).\n function getDefaultPoolHooksContract() public pure returns (address) {\n return address(0);\n }\n\n /**\n * @notice Convenience function for constructing a LiquidityManagement object.\n * @dev Users can call this to create a structure with all false arguments, then set the ones they need to true.\n * @return liquidityManagement Liquidity management flags, all initialized to false\n */\n function getDefaultLiquidityManagement() public pure returns (LiquidityManagement memory liquidityManagement) {\n // solhint-disable-previous-line no-empty-blocks\n }\n}\n"},"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { TokenInfo, PoolConfig } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\nimport { IPoolInfo } from \"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\n/**\n * @notice Standard implementation of the `IPoolInfo` interface.\n * @dev Balancer standard pools inherit from this optional interface to provide a standard off-chain interface for\n * commonly requested data.\n */\ncontract PoolInfo is IPoolInfo {\n IVault private immutable _vault;\n\n constructor(IVault vault) {\n _vault = vault;\n }\n\n /// @inheritdoc IPoolInfo\n function getTokens() external view returns (IERC20[] memory tokens) {\n return _vault.getPoolTokens(address(this));\n }\n\n /// @inheritdoc IPoolInfo\n function getTokenInfo()\n external\n view\n returns (\n IERC20[] memory tokens,\n TokenInfo[] memory tokenInfo,\n uint256[] memory balancesRaw,\n uint256[] memory lastBalancesLiveScaled18\n )\n {\n return _vault.getPoolTokenInfo(address(this));\n }\n\n /// @inheritdoc IPoolInfo\n function getCurrentLiveBalances() external view returns (uint256[] memory balancesLiveScaled18) {\n return _vault.getCurrentLiveBalances(address(this));\n }\n\n /// @inheritdoc IPoolInfo\n function getStaticSwapFeePercentage() external view returns (uint256) {\n return _vault.getStaticSwapFeePercentage((address(this)));\n }\n\n /// @inheritdoc IPoolInfo\n function getAggregateFeePercentages()\n external\n view\n returns (uint256 aggregateSwapFeePercentage, uint256 aggregateYieldFeePercentage)\n {\n PoolConfig memory poolConfig = _vault.getPoolConfig(address(this));\n\n aggregateSwapFeePercentage = poolConfig.aggregateSwapFeePercentage;\n aggregateYieldFeePercentage = poolConfig.aggregateYieldFeePercentage;\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthentication } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\";\n\n/**\n * @notice Building block for performing access control on external functions.\n * @dev This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be\n * applied to external functions to make them only callable by authorized accounts.\n *\n * Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.\n */\nabstract contract Authentication is IAuthentication {\n bytes32 private immutable _actionIdDisambiguator;\n\n /**\n * @dev The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in\n * multi-contract systems.\n *\n * There are two main uses for it:\n * - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers\n * unique. The contract's own address is a good option.\n * - if the contract belongs to a family that shares action identifiers for the same functions, an identifier\n * shared by the entire family (and no other contract) should be used instead.\n */\n constructor(bytes32 actionIdDisambiguator) {\n _actionIdDisambiguator = actionIdDisambiguator;\n }\n\n /// @dev Reverts unless the caller is allowed to call this function. Should only be applied to external functions.\n modifier authenticate() {\n _authenticateCaller();\n _;\n }\n\n /// @dev Reverts unless the caller is allowed to call the entry point function.\n function _authenticateCaller() internal view {\n bytes32 actionId = getActionId(msg.sig);\n\n if (!_canPerform(actionId, msg.sender)) {\n revert SenderNotAllowed();\n }\n }\n\n /// @inheritdoc IAuthentication\n function getActionId(bytes4 selector) public view override returns (bytes32) {\n // Each external function is dynamically assigned an action identifier as the hash of the disambiguator and the\n // function selector. Disambiguation is necessary to avoid potential collisions in the function selectors of\n // multiple contracts.\n return keccak256(abi.encodePacked(_actionIdDisambiguator, selector));\n }\n\n /**\n * @dev Derived contracts must implement this function to perform the actual access control logic.\n * @param actionId The action identifier associated with an external function\n * @param user The account performing the action\n * @return success True if the action is permitted\n */\n function _canPerform(bytes32 actionId, address user) internal view virtual returns (bool);\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/BufferHelpers.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\n\nimport { PackedTokenBalance } from \"./PackedTokenBalance.sol\";\n\nlibrary BufferHelpers {\n using PackedTokenBalance for bytes32;\n using SafeCast for *;\n\n /**\n * @notice Returns the imbalance of a buffer in terms of the underlying asset.\n * @dev The imbalance refers to the difference between the buffer's underlying asset balance and its wrapped asset\n * balance, both expressed in terms of the underlying asset. A positive imbalance means the buffer holds more\n * underlying assets than wrapped assets, indicating that the excess underlying should be wrapped to restore\n * balance. Conversely, a negative imbalance means the buffer has more wrapped assets than underlying assets, so\n * during a wrap operation, fewer underlying tokens need to be wrapped, and the surplus wrapped tokens can be\n * returned to the caller.\n * For instance, consider the following scenario:\n * - buffer balances: 2 wrapped and 10 underlying\n * - wrapped rate: 2\n * - normalized buffer balances: 4 wrapped as underlying (2 wrapped * rate) and 10 underlying\n * - underlying token imbalance = (10 - 4) / 2 = 3 underlying\n * We need to wrap 3 underlying tokens to rebalance the buffer.\n * - 3 underlying = 1.5 wrapped\n * - final balances: 3.5 wrapped (2 existing + 1.5 new) and 7 underlying (10 existing - 3)\n * These balances are equal value, given the rate.\n */\n function getBufferUnderlyingImbalance(bytes32 bufferBalance, IERC4626 wrappedToken) internal view returns (int256) {\n int256 underlyingBalance = bufferBalance.getBalanceRaw().toInt256();\n\n int256 wrappedBalanceAsUnderlying = 0;\n if (bufferBalance.getBalanceDerived() > 0) {\n // The buffer underlying imbalance is used when wrapping (it means, deposit underlying and get wrapped\n // tokens), so we use `previewMint` to convert wrapped balance to underlying. The `mint` function is used\n // here, as it performs the inverse of a `deposit` operation.\n wrappedBalanceAsUnderlying = wrappedToken.previewMint(bufferBalance.getBalanceDerived()).toInt256();\n }\n\n // The return value may be positive (excess of underlying) or negative (excess of wrapped).\n return (underlyingBalance - wrappedBalanceAsUnderlying) / 2;\n }\n\n /**\n * @notice Returns the imbalance of a buffer in terms of the wrapped asset.\n * @dev The imbalance refers to the difference between the buffer's underlying asset balance and its wrapped asset\n * balance, both expressed in terms of the wrapped asset. A positive imbalance means the buffer holds more\n * wrapped assets than underlying assets, indicating that the excess wrapped should be unwrapped to restore\n * balance. Conversely, a negative imbalance means the buffer has more underlying assets than wrapped assets, so\n * during an unwrap operation, fewer wrapped tokens need to be unwrapped, and the surplus underlying tokens can be\n * returned to the caller.\n * For instance, consider the following scenario:\n * - buffer balances: 10 wrapped and 4 underlying\n * - wrapped rate: 2\n * - normalized buffer balances: 10 wrapped and 2 underlying as wrapped (2 underlying / rate)\n * - imbalance of wrapped = (10 - 2) / 2 = 4 wrapped\n * We need to unwrap 4 wrapped tokens to rebalance the buffer.\n * - 4 wrapped = 8 underlying\n * - final balances: 6 wrapped (10 existing - 4) and 12 underlying (4 existing + 8 new)\n * These balances are equal value, given the rate.\n */\n function getBufferWrappedImbalance(bytes32 bufferBalance, IERC4626 wrappedToken) internal view returns (int256) {\n int256 wrappedBalance = bufferBalance.getBalanceDerived().toInt256();\n\n int256 underlyingBalanceAsWrapped = 0;\n if (bufferBalance.getBalanceRaw() > 0) {\n // The buffer wrapped imbalance is used when unwrapping (it means, deposit wrapped and get underlying\n // tokens), so we use `previewWithdraw` to convert underlying balance to wrapped. The `withdraw` function\n // is used here, as it performs the inverse of a `redeem` operation.\n underlyingBalanceAsWrapped = wrappedToken.previewWithdraw(bufferBalance.getBalanceRaw()).toInt256();\n }\n\n // The return value may be positive (excess of wrapped) or negative (excess of underlying).\n return (wrappedBalance - underlyingBalanceAsWrapped) / 2;\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/// @notice Library of helper functions related to typecasting arrays.\nlibrary CastingHelpers {\n /// @dev Returns a native array of addresses as an IERC20[] array.\n function asIERC20(address[] memory addresses) internal pure returns (IERC20[] memory tokens) {\n // solhint-disable-next-line no-inline-assembly\n assembly (\"memory-safe\") {\n tokens := addresses\n }\n }\n\n /// @dev Returns an IERC20[] array as an address[] array.\n function asAddress(IERC20[] memory tokens) internal pure returns (address[] memory addresses) {\n // solhint-disable-next-line no-inline-assembly\n assembly (\"memory-safe\") {\n addresses := tokens\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { Authentication } from \"./Authentication.sol\";\n\n/// @dev Base contract for performing access control on external functions within pools.\nabstract contract CommonAuthentication is Authentication {\n IVault private immutable _vault;\n\n /**\n * @dev Allow only the swapFeeManager or governance user to call the function.\n */\n /// @notice Caller must be the swapFeeManager, if defined. Otherwise, default to governance.\n modifier onlySwapFeeManagerOrGovernance(address pool) {\n address roleAddress = _vault.getPoolRoleAccounts(pool).swapFeeManager;\n _ensureAuthenticatedByExclusiveRole(pool, roleAddress);\n _;\n }\n\n constructor(IVault vault, bytes32 actionIdDisambiguator) Authentication(actionIdDisambiguator) {\n _vault = vault;\n }\n\n function _getVault() internal view returns (IVault) {\n return _vault;\n }\n\n // Access control is delegated to the Authorizer in the `_canPerform` functions.\n function _canPerform(bytes32 actionId, address user) internal view override returns (bool) {\n return _vault.getAuthorizer().canPerform(actionId, user, address(this));\n }\n\n function _canPerform(bytes32 actionId, address account, address where) internal view returns (bool) {\n return _vault.getAuthorizer().canPerform(actionId, account, where);\n }\n\n /// @dev Ensure the sender is the roleAddress, or default to governance if roleAddress is address(0).\n function _ensureAuthenticatedByExclusiveRole(address pool, address roleAddress) internal view {\n if (roleAddress == address(0)) {\n // Defer to governance if no role assigned.\n if (_canPerform(getActionId(msg.sig), msg.sender, pool) == false) {\n revert SenderNotAllowed();\n }\n } else if (msg.sender != roleAddress) {\n revert SenderNotAllowed();\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/// @notice Library used to check whether the current operation was initiated through a static call.\nlibrary EVMCallModeHelpers {\n /// @notice A state-changing transaction was initiated in a context that only allows static calls.\n error NotStaticCall();\n\n /**\n * @dev Detects whether the current transaction is a static call.\n * A static call is one where `tx.origin` equals 0x0 for most implementations.\n * See this tweet for a table on how transaction parameters are set on different platforms:\n * https://twitter.com/0xkarmacoma/status/1493380279309717505\n *\n * Solidity eth_call reference docs are here: https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_call\n */\n function isStaticCall() internal view returns (bool) {\n return tx.origin == address(0);\n // solhint-disable-previous-line avoid-tx-origin\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/FactoryWidePauseWindow.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Base contract for v3 factories to support pause windows for pools based on the factory deployment time.\n * @dev Each pool deployment calls `getPauseWindowDuration` on the factory so that all Pools created by this factory\n * will share the same Pause Window end time, after which both old and new Pools will not be pausable.\n *\n * All pools are reversibly pausable until the pause window expires. Afterward, there is an additional buffer\n * period, set to the same duration as the Vault's buffer period. If a pool was paused, it will remain paused\n * through this buffer period, and cannot be unpaused.\n *\n * When the buffer period expires, it will unpause automatically, and remain permissionless forever after.\n */\ncontract FactoryWidePauseWindow {\n // This contract relies on timestamps - the usual caveats apply.\n // solhint-disable not-rely-on-time\n\n // The pause window end time is stored in 32 bits.\n uint32 private constant _MAX_TIMESTAMP = type(uint32).max;\n\n uint32 private immutable _pauseWindowDuration;\n\n // Time when the pause window for all created Pools expires.\n uint32 private immutable _poolsPauseWindowEndTime;\n\n /// @notice The factory deployer gave a duration that would overflow the Unix timestamp.\n error PoolPauseWindowDurationOverflow();\n\n constructor(uint32 pauseWindowDuration) {\n uint256 pauseWindowEndTime = block.timestamp + pauseWindowDuration;\n\n if (pauseWindowEndTime > _MAX_TIMESTAMP) {\n revert PoolPauseWindowDurationOverflow();\n }\n\n _pauseWindowDuration = pauseWindowDuration;\n\n // Direct cast is safe, as it was checked above.\n _poolsPauseWindowEndTime = uint32(pauseWindowEndTime);\n }\n\n /**\n * @notice Return the pause window duration. This is the time pools will be pausable after factory deployment.\n * @return pauseWindowDuration The duration in seconds\n */\n function getPauseWindowDuration() external view returns (uint32) {\n return _pauseWindowDuration;\n }\n\n /**\n * @notice Returns the original factory pauseWindowEndTime, regardless of the current time.\n * @return pauseWindowEndTime The end time as a timestamp\n */\n function getOriginalPauseWindowEndTime() external view returns (uint32) {\n return _poolsPauseWindowEndTime;\n }\n\n /**\n * @notice Returns the current pauseWindowEndTime that will be applied to Pools created by this factory.\n * @dev We intend for all pools deployed by this factory to have the same pause window end time (i.e., after\n * this date, all future pools will be unpausable). This function will return `_poolsPauseWindowEndTime`\n * until it passes, after which it will return 0.\n *\n * @return pauseWindowEndTime The resolved pause window end time (0 indicating it's no longer pausable)\n */\n function getNewPoolPauseWindowEndTime() public view returns (uint32) {\n // We know _poolsPauseWindowEndTime <= _MAX_TIMESTAMP (checked above).\n // Do not truncate timestamp; it should still return 0 after _MAX_TIMESTAMP.\n return (block.timestamp < _poolsPauseWindowEndTime) ? _poolsPauseWindowEndTime : 0;\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { CastingHelpers } from \"./CastingHelpers.sol\";\n\nlibrary InputHelpers {\n /// @notice Arrays passed to a function and intended to be parallel have different lengths.\n error InputLengthMismatch();\n\n /**\n * @notice More than one non-zero value was given for a single token operation.\n * @dev Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value,\n * corresponding to the token being added or removed. This error results if there are multiple non-zero entries.\n */\n error MultipleNonZeroInputs();\n\n /**\n * @notice No valid input was given for a single token operation.\n * @dev Input arrays for single token add/remove liquidity operations are expected to have one non-zero value,\n * corresponding to the token being added or removed. This error results if all entries are zero.\n */\n error AllZeroInputs();\n\n /**\n * @notice The tokens supplied to an array argument were not sorted in numerical order.\n * @dev Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can\n * predict the token order without having to query the Vault. (It is also legacy v2 behavior.)\n */\n error TokensNotSorted();\n\n function ensureInputLengthMatch(uint256 a, uint256 b) internal pure {\n if (a != b) {\n revert InputLengthMismatch();\n }\n }\n\n function ensureInputLengthMatch(uint256 a, uint256 b, uint256 c) internal pure {\n if (a != b || b != c) {\n revert InputLengthMismatch();\n }\n }\n\n // Find the single non-zero input; revert if there is not exactly one such value.\n function getSingleInputIndex(uint256[] memory maxAmountsIn) internal pure returns (uint256 inputIndex) {\n uint256 length = maxAmountsIn.length;\n inputIndex = length;\n\n for (uint256 i = 0; i < length; ++i) {\n if (maxAmountsIn[i] != 0) {\n if (inputIndex != length) {\n revert MultipleNonZeroInputs();\n }\n inputIndex = i;\n }\n }\n\n if (inputIndex >= length) {\n revert AllZeroInputs();\n }\n\n return inputIndex;\n }\n\n /**\n * @dev Sort an array of tokens, mutating in place (and also returning them).\n * This assumes the tokens have been (or will be) validated elsewhere for length\n * and non-duplication. All this does is the sorting.\n *\n * A bubble sort should be gas- and bytecode-efficient enough for such small arrays.\n * Could have also done \"manual\" comparisons for each of the cases, but this is\n * about the same number of operations, and more concise.\n *\n * This is less efficient for larger token count (i.e., above 4), but such pools should\n * be rare. And in any case, sorting is only done on-chain in test code.\n */\n function sortTokens(IERC20[] memory tokens) internal pure returns (IERC20[] memory) {\n for (uint256 i = 0; i < tokens.length - 1; ++i) {\n for (uint256 j = 0; j < tokens.length - i - 1; ++j) {\n if (tokens[j] > tokens[j + 1]) {\n // Swap if they're out of order.\n (tokens[j], tokens[j + 1]) = (tokens[j + 1], tokens[j]);\n }\n }\n }\n\n return tokens;\n }\n\n /// @dev Ensure an array of tokens is sorted. As above, does not validate length or uniqueness.\n function ensureSortedTokens(IERC20[] memory tokens) internal pure {\n if (tokens.length < 2) {\n return;\n }\n\n IERC20 previous = tokens[0];\n\n for (uint256 i = 1; i < tokens.length; ++i) {\n IERC20 current = tokens[i];\n\n if (previous > current) {\n revert TokensNotSorted();\n }\n\n previous = current;\n }\n }\n\n /// @dev Ensure an array of amounts is sorted. As above, does not validate length or uniqueness.\n function ensureSortedAmounts(uint256[] memory amounts) internal pure {\n if (amounts.length < 2) {\n return;\n }\n\n uint256 previous = amounts[0];\n\n for (uint256 i = 1; i < amounts.length; ++i) {\n uint256 current = amounts[i];\n\n if (previous > current) {\n revert TokensNotSorted();\n }\n\n previous = current;\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n/**\n * @notice This library represents a data structure for packing a token's current raw and derived balances. A derived\n * balance can be the \"last\" live balance scaled18 of the raw token, or the balance of the wrapped version of the\n * token in a vault buffer, among others.\n *\n * @dev We could use a Solidity struct to pack balance values together in a single storage slot, but unfortunately\n * Solidity only allows for structs to live in either storage, calldata or memory. Because a memory struct still takes\n * up a slot in the stack (to store its memory location), and because the entire balance fits in a single stack slot\n * (two 128 bit values), using memory is strictly less gas performant. Therefore, we do manual packing and unpacking.\n *\n * We could also use custom types now, but given the simplicity here, and the existing EnumerableMap type, it seemed\n * easier to leave it as a bytes32.\n */\nlibrary PackedTokenBalance {\n // The 'rawBalance' portion of the balance is stored in the least significant 128 bits of a 256 bit word, while the\n // The 'derivedBalance' part uses the remaining 128 bits.\n uint256 private constant _MAX_BALANCE = 2 ** (128) - 1;\n\n /// @notice One of the balances is above the maximum value that can be stored.\n error BalanceOverflow();\n\n function getBalanceRaw(bytes32 balance) internal pure returns (uint256) {\n return uint256(balance) & _MAX_BALANCE;\n }\n\n function getBalanceDerived(bytes32 balance) internal pure returns (uint256) {\n return uint256(balance >> 128) & _MAX_BALANCE;\n }\n\n /// @dev Sets only the raw balance of balances and returns the new bytes32 balance.\n function setBalanceRaw(bytes32 balance, uint256 newBalanceRaw) internal pure returns (bytes32) {\n return toPackedBalance(newBalanceRaw, getBalanceDerived(balance));\n }\n\n /// @dev Sets only the derived balance of balances and returns the new bytes32 balance.\n function setBalanceDerived(bytes32 balance, uint256 newBalanceDerived) internal pure returns (bytes32) {\n return toPackedBalance(getBalanceRaw(balance), newBalanceDerived);\n }\n\n /// @dev Validates the size of `balanceRaw` and `balanceDerived`, then returns a packed balance bytes32.\n function toPackedBalance(uint256 balanceRaw, uint256 balanceDerived) internal pure returns (bytes32) {\n if (balanceRaw > _MAX_BALANCE || balanceDerived > _MAX_BALANCE) {\n revert BalanceOverflow();\n }\n\n return _pack(balanceRaw, balanceDerived);\n }\n\n /// @dev Decode and fetch both balances.\n function fromPackedBalance(bytes32 balance) internal pure returns (uint256 balanceRaw, uint256 balanceDerived) {\n return (getBalanceRaw(balance), getBalanceDerived(balance));\n }\n\n /// @dev Packs two uint128 values into a packed balance bytes32. It does not check balance sizes.\n function _pack(uint256 leastSignificant, uint256 mostSignificant) private pure returns (bytes32) {\n return bytes32((mostSignificant << 128) + leastSignificant);\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n// solhint-disable no-inline-assembly\n\n/// @notice Support `quoteAndRevert`: a v2-style query which always reverts, and returns the result in the return data.\nlibrary RevertCodec {\n /**\n * @notice On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\n * @param result The result of the query operation\n */\n error Result(bytes result);\n\n /// @notice Handle the \"reverted without a reason\" case (i.e., no return data).\n error ErrorSelectorNotFound();\n\n function catchEncodedResult(bytes memory resultRaw) internal pure returns (bytes memory) {\n bytes4 errorSelector = RevertCodec.parseSelector(resultRaw);\n if (errorSelector != Result.selector) {\n // Bubble up error message if the revert reason is not the expected one.\n RevertCodec.bubbleUpRevert(resultRaw);\n }\n\n uint256 resultRawLength = resultRaw.length;\n assembly (\"memory-safe\") {\n resultRaw := add(resultRaw, 0x04) // Slice the sighash\n mstore(resultRaw, sub(resultRawLength, 4)) // Set proper length\n }\n\n return abi.decode(resultRaw, (bytes));\n }\n\n /// @dev Returns the first 4 bytes in an array, reverting if the length is < 4.\n function parseSelector(bytes memory callResult) internal pure returns (bytes4 errorSelector) {\n if (callResult.length < 4) {\n revert ErrorSelectorNotFound();\n }\n assembly (\"memory-safe\") {\n errorSelector := mload(add(callResult, 0x20)) // Load the first 4 bytes from data (skip length offset)\n }\n }\n\n /// @dev Taken from Openzeppelin's Address.\n function bubbleUpRevert(bytes memory returnData) internal pure {\n // Look for revert reason and bubble it up if present.\n if (returnData.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly.\n\n assembly (\"memory-safe\") {\n let return_data_size := mload(returnData)\n revert(add(32, returnData), return_data_size)\n }\n } else {\n revert ErrorSelectorNotFound();\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { FixedPoint } from \"../math/FixedPoint.sol\";\nimport { InputHelpers } from \"./InputHelpers.sol\";\n\n/**\n * @notice Helper functions to apply/undo token decimal and rate adjustments, rounding in the direction indicated.\n * @dev To simplify Pool logic, all token balances and amounts are normalized to behave as if the token had\n * 18 decimals. When comparing DAI (18 decimals) and USDC (6 decimals), 1 USDC and 1 DAI would both be\n * represented as 1e18. This allows us to not consider differences in token decimals in the internal Pool\n * math, simplifying it greatly.\n *\n * The Vault does not support tokens with more than 18 decimals (see `_MAX_TOKEN_DECIMALS` in `VaultStorage`),\n * or tokens that do not implement `IERC20Metadata.decimals`.\n *\n * These helpers can also be used to scale amounts by other 18-decimal floating point values, such as rates.\n */\nlibrary ScalingHelpers {\n using FixedPoint for *;\n using ScalingHelpers for uint256;\n\n /***************************************************************************\n Single Value Functions\n ***************************************************************************/\n\n /**\n * @notice Applies `scalingFactor` and `tokenRate` to `amount`.\n * @dev This may result in a larger or equal value, depending on whether it needed scaling/rate adjustment or not.\n * The result is rounded down.\n *\n * @param amount Amount to be scaled up to 18 decimals\n * @param scalingFactor The token decimal scaling factor, `10^(18-tokenDecimals)`\n * @param tokenRate The token rate scaling factor\n * @return result The final 18-decimal precision result, rounded down\n */\n function toScaled18ApplyRateRoundDown(\n uint256 amount,\n uint256 scalingFactor,\n uint256 tokenRate\n ) internal pure returns (uint256) {\n return (amount * scalingFactor).mulDown(tokenRate);\n }\n\n /**\n * @notice Applies `scalingFactor` and `tokenRate` to `amount`.\n * @dev This may result in a larger or equal value, depending on whether it needed scaling/rate adjustment or not.\n * The result is rounded up.\n *\n * @param amount Amount to be scaled up to 18 decimals\n * @param scalingFactor The token decimal scaling factor, `10^(18-tokenDecimals)`\n * @param tokenRate The token rate scaling factor\n * @return result The final 18-decimal precision result, rounded up\n */\n function toScaled18ApplyRateRoundUp(\n uint256 amount,\n uint256 scalingFactor,\n uint256 tokenRate\n ) internal pure returns (uint256) {\n return (amount * scalingFactor).mulUp(tokenRate);\n }\n\n /**\n * @notice Reverses the `scalingFactor` and `tokenRate` applied to `amount`.\n * @dev This may result in a smaller or equal value, depending on whether it needed scaling/rate adjustment or not.\n * The result is rounded down.\n *\n * @param amount Amount to be scaled down to native token decimals\n * @param scalingFactor The token decimal scaling factor, `10^(18-tokenDecimals)`\n * @param tokenRate The token rate scaling factor\n * @return result The final native decimal result, rounded down\n */\n function toRawUndoRateRoundDown(\n uint256 amount,\n uint256 scalingFactor,\n uint256 tokenRate\n ) internal pure returns (uint256) {\n // Do division last. Scaling factor is not a FP18, but a FP18 normalized by FP(1).\n // `scalingFactor * tokenRate` is a precise FP18, so there is no rounding direction here.\n return FixedPoint.divDown(amount, scalingFactor * tokenRate);\n }\n\n /**\n * @notice Reverses the `scalingFactor` and `tokenRate` applied to `amount`.\n * @dev This may result in a smaller or equal value, depending on whether it needed scaling/rate adjustment or not.\n * The result is rounded up.\n *\n * @param amount Amount to be scaled down to native token decimals\n * @param scalingFactor The token decimal scaling factor, `10^(18-tokenDecimals)`\n * @param tokenRate The token rate scaling factor\n * @return result The final native decimal result, rounded up\n */\n function toRawUndoRateRoundUp(\n uint256 amount,\n uint256 scalingFactor,\n uint256 tokenRate\n ) internal pure returns (uint256) {\n // Do division last. Scaling factor is not a FP18, but a FP18 normalized by FP(1).\n // `scalingFactor * tokenRate` is a precise FP18, so there is no rounding direction here.\n return FixedPoint.divUp(amount, scalingFactor * tokenRate);\n }\n\n /***************************************************************************\n Array Functions\n ***************************************************************************/\n\n function copyToArray(uint256[] memory from, uint256[] memory to) internal pure {\n uint256 length = from.length;\n InputHelpers.ensureInputLengthMatch(length, to.length);\n\n // solhint-disable-next-line no-inline-assembly\n assembly (\"memory-safe\") {\n mcopy(add(to, 0x20), add(from, 0x20), mul(length, 0x20))\n }\n }\n\n /**\n * @notice Same as `toScaled18ApplyRateRoundDown`, but for an entire array.\n * @dev This function does not return anything, but instead *mutates* the `amounts` array.\n * @param amounts Amounts to be scaled up to 18 decimals, sorted in token registration order\n * @param scalingFactors The token decimal scaling factors, sorted in token registration order\n * @param tokenRates The token rate scaling factors, sorted in token registration order\n */\n function toScaled18ApplyRateRoundDownArray(\n uint256[] memory amounts,\n uint256[] memory scalingFactors,\n uint256[] memory tokenRates\n ) internal pure {\n uint256 length = amounts.length;\n InputHelpers.ensureInputLengthMatch(length, scalingFactors.length, tokenRates.length);\n\n for (uint256 i = 0; i < length; ++i) {\n amounts[i] = amounts[i].toScaled18ApplyRateRoundDown(scalingFactors[i], tokenRates[i]);\n }\n }\n\n /**\n * @notice Same as `toScaled18ApplyRateRoundDown`, but returns a new array, leaving the original intact.\n * @param amounts Amounts to be scaled up to 18 decimals, sorted in token registration order\n * @param scalingFactors The token decimal scaling factors, sorted in token registration order\n * @param tokenRates The token rate scaling factors, sorted in token registration order\n * @return results The final 18 decimal results, sorted in token registration order, rounded down\n */\n function copyToScaled18ApplyRateRoundDownArray(\n uint256[] memory amounts,\n uint256[] memory scalingFactors,\n uint256[] memory tokenRates\n ) internal pure returns (uint256[] memory) {\n uint256 length = amounts.length;\n InputHelpers.ensureInputLengthMatch(length, scalingFactors.length, tokenRates.length);\n uint256[] memory amountsScaled18 = new uint256[](length);\n\n for (uint256 i = 0; i < length; ++i) {\n amountsScaled18[i] = amounts[i].toScaled18ApplyRateRoundDown(scalingFactors[i], tokenRates[i]);\n }\n\n return amountsScaled18;\n }\n\n /**\n * @notice Same as `toScaled18ApplyRateRoundUp`, but for an entire array.\n * @dev This function does not return anything, but instead *mutates* the `amounts` array.\n * @param amounts Amounts to be scaled up to 18 decimals, sorted in token registration order\n * @param scalingFactors The token decimal scaling factors, sorted in token registration order\n * @param tokenRates The token rate scaling factors, sorted in token registration order\n */\n function toScaled18ApplyRateRoundUpArray(\n uint256[] memory amounts,\n uint256[] memory scalingFactors,\n uint256[] memory tokenRates\n ) internal pure {\n uint256 length = amounts.length;\n InputHelpers.ensureInputLengthMatch(length, scalingFactors.length, tokenRates.length);\n\n for (uint256 i = 0; i < length; ++i) {\n amounts[i] = amounts[i].toScaled18ApplyRateRoundUp(scalingFactors[i], tokenRates[i]);\n }\n }\n\n /**\n * @notice Same as `toScaled18ApplyRateRoundUp`, but returns a new array, leaving the original intact.\n * @param amounts Amounts to be scaled up to 18 decimals, sorted in token registration order\n * @param scalingFactors The token decimal scaling factors, sorted in token registration order\n * @param tokenRates The token rate scaling factors, sorted in token registration order\n * @return results The final 18 decimal results, sorted in token registration order, rounded up\n */\n function copyToScaled18ApplyRateRoundUpArray(\n uint256[] memory amounts,\n uint256[] memory scalingFactors,\n uint256[] memory tokenRates\n ) internal pure returns (uint256[] memory) {\n uint256 length = amounts.length;\n InputHelpers.ensureInputLengthMatch(length, scalingFactors.length, tokenRates.length);\n uint256[] memory amountsScaled18 = new uint256[](length);\n\n for (uint256 i = 0; i < length; ++i) {\n amountsScaled18[i] = amounts[i].toScaled18ApplyRateRoundUp(scalingFactors[i], tokenRates[i]);\n }\n\n return amountsScaled18;\n }\n\n /**\n * @notice Rounds up a rate informed by a rate provider.\n * @dev Rates calculated by an external rate provider have rounding errors. Intuitively, a rate provider\n * rounds the rate down so the pool math is executed with conservative amounts. However, when upscaling or\n * downscaling the amount out, the rate should be rounded up to make sure the amounts scaled are conservative.\n * @param rate The original rate\n * @return roundedRate The final rate, with rounding applied\n */\n function computeRateRoundUp(uint256 rate) internal pure returns (uint256) {\n uint256 roundedRate;\n // If rate is divisible by FixedPoint.ONE, roundedRate and rate will be equal. It means that rate has 18 zeros,\n // so there's no rounding issue and the rate should not be rounded up.\n unchecked {\n roundedRate = (rate / FixedPoint.ONE) * FixedPoint.ONE;\n }\n return roundedRate == rate ? rate : rate + 1;\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { StorageSlotExtension } from \"../openzeppelin/StorageSlotExtension.sol\";\nimport { SlotDerivation } from \"../openzeppelin/SlotDerivation.sol\";\n\ntype TokenDeltaMappingSlotType is bytes32;\ntype AddressToUintMappingSlot is bytes32;\ntype UintToAddressToBooleanMappingSlot is bytes32;\ntype AddressArraySlotType is bytes32;\n\n/**\n * @notice Helper functions to read and write values from transient storage, including support for arrays and mappings.\n * @dev This is temporary, based on Open Zeppelin's partially released library. When the final version is published, we\n * should be able to remove our copies and import directly from OZ. When Solidity catches up and puts direct support\n * for transient storage in the language, we should be able to get rid of this altogether.\n *\n * This only works on networks where EIP-1153 is supported.\n */\nlibrary TransientStorageHelpers {\n using SlotDerivation for *;\n using StorageSlotExtension for *;\n\n /// @notice An index is out of bounds on an array operation (e.g., at).\n error TransientIndexOutOfBounds();\n\n // Calculate the slot for a transient storage variable.\n function calculateSlot(string memory domain, string memory varName) internal pure returns (bytes32) {\n return\n keccak256(\n abi.encode(uint256(keccak256(abi.encodePacked(\"balancer-labs.v3.storage.\", domain, \".\", varName))) - 1)\n ) & ~bytes32(uint256(0xff));\n }\n\n /***************************************************************************\n Mappings\n ***************************************************************************/\n\n function tGet(TokenDeltaMappingSlotType slot, IERC20 k1) internal view returns (int256) {\n return TokenDeltaMappingSlotType.unwrap(slot).deriveMapping(address(k1)).asInt256().tload();\n }\n\n function tSet(TokenDeltaMappingSlotType slot, IERC20 k1, int256 value) internal {\n TokenDeltaMappingSlotType.unwrap(slot).deriveMapping(address(k1)).asInt256().tstore(value);\n }\n\n function tGet(AddressToUintMappingSlot slot, address key) internal view returns (uint256) {\n return AddressToUintMappingSlot.unwrap(slot).deriveMapping(key).asUint256().tload();\n }\n\n function tSet(AddressToUintMappingSlot slot, address key, uint256 value) internal {\n AddressToUintMappingSlot.unwrap(slot).deriveMapping(key).asUint256().tstore(value);\n }\n\n function tGet(\n UintToAddressToBooleanMappingSlot slot,\n uint256 uintKey,\n address addressKey\n ) internal view returns (bool) {\n return\n UintToAddressToBooleanMappingSlot\n .unwrap(slot)\n .deriveMapping(uintKey)\n .deriveMapping(addressKey)\n .asBoolean()\n .tload();\n }\n\n function tSet(UintToAddressToBooleanMappingSlot slot, uint256 uintKey, address addressKey, bool value) internal {\n UintToAddressToBooleanMappingSlot\n .unwrap(slot)\n .deriveMapping(uintKey)\n .deriveMapping(addressKey)\n .asBoolean()\n .tstore(value);\n }\n\n // Implement the common \"+=\" operation: map[key] += value.\n function tAdd(AddressToUintMappingSlot slot, address key, uint256 value) internal {\n AddressToUintMappingSlot.unwrap(slot).deriveMapping(key).asUint256().tstore(tGet(slot, key) + value);\n }\n\n function tSub(AddressToUintMappingSlot slot, address key, uint256 value) internal {\n AddressToUintMappingSlot.unwrap(slot).deriveMapping(key).asUint256().tstore(tGet(slot, key) - value);\n }\n\n /***************************************************************************\n Arrays\n ***************************************************************************/\n\n function tLength(AddressArraySlotType slot) internal view returns (uint256) {\n return AddressArraySlotType.unwrap(slot).asUint256().tload();\n }\n\n function tAt(AddressArraySlotType slot, uint256 index) internal view returns (address) {\n _ensureIndexWithinBounds(slot, index);\n return AddressArraySlotType.unwrap(slot).deriveArray().offset(index).asAddress().tload();\n }\n\n function tSet(AddressArraySlotType slot, uint256 index, address value) internal {\n _ensureIndexWithinBounds(slot, index);\n AddressArraySlotType.unwrap(slot).deriveArray().offset(index).asAddress().tstore(value);\n }\n\n function _ensureIndexWithinBounds(AddressArraySlotType slot, uint256 index) private view {\n uint256 length = AddressArraySlotType.unwrap(slot).asUint256().tload();\n if (index >= length) {\n revert TransientIndexOutOfBounds();\n }\n }\n\n function tUncheckedAt(AddressArraySlotType slot, uint256 index) internal view returns (address) {\n return AddressArraySlotType.unwrap(slot).deriveArray().offset(index).asAddress().tload();\n }\n\n function tUncheckedSet(AddressArraySlotType slot, uint256 index, address value) internal {\n AddressArraySlotType.unwrap(slot).deriveArray().offset(index).asAddress().tstore(value);\n }\n\n function tPush(AddressArraySlotType slot, address value) internal {\n // Store the value at offset corresponding to the current length.\n uint256 length = AddressArraySlotType.unwrap(slot).asUint256().tload();\n AddressArraySlotType.unwrap(slot).deriveArray().offset(length).asAddress().tstore(value);\n // Update current length to consider the new value.\n AddressArraySlotType.unwrap(slot).asUint256().tstore(length + 1);\n }\n\n function tPop(AddressArraySlotType slot) internal returns (address value) {\n uint256 lastElementIndex = AddressArraySlotType.unwrap(slot).asUint256().tload() - 1;\n // Update length to last element. When the index is 0, the slot that holds the length is cleared out.\n AddressArraySlotType.unwrap(slot).asUint256().tstore(lastElementIndex);\n StorageSlotExtension.AddressSlotType lastElementSlot = AddressArraySlotType\n .unwrap(slot)\n .deriveArray()\n .offset(lastElementIndex)\n .asAddress();\n // Return last element.\n value = lastElementSlot.tload();\n // Clear value in temporary storage.\n lastElementSlot.tstore(address(0));\n }\n\n /***************************************************************************\n Uint256 Values\n ***************************************************************************/\n\n function tIncrement(StorageSlotExtension.Uint256SlotType slot) internal {\n slot.tstore(slot.tload() + 1);\n }\n\n function tDecrement(StorageSlotExtension.Uint256SlotType slot) internal {\n slot.tstore(slot.tload() - 1);\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVersion } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\";\n\n/**\n * @notice Retrieves a contract's version from storage.\n * @dev The version is set at deployment time and cannot be changed. It would be immutable, but immutable strings\n * are not yet supported.\n *\n * Contracts like factories and pools should have versions. These typically take the form of JSON strings containing\n * detailed information about the deployment. For instance:\n *\n * `{name: 'ChildChainGaugeFactory', version: 2, deployment: '20230316-child-chain-gauge-factory-v2'}`\n */\ncontract Version is IVersion {\n string private _version;\n\n constructor(string memory version_) {\n _setVersion(version_);\n }\n\n /**\n * @notice Getter for the version.\n * @return version The stored contract version\n */\n function version() external view returns (string memory) {\n return _version;\n }\n\n /// @dev Internal setter that allows this contract to be used in proxies.\n function _setVersion(string memory newVersion) internal {\n _version = newVersion;\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SignedMath } from \"@openzeppelin/contracts/utils/math/SignedMath.sol\";\nimport { Math } from \"@openzeppelin/contracts/utils/math/Math.sol\";\n\n/**\n * @notice Library for encoding and decoding values stored inside a 256 bit word.\n * @dev Typically used to pack multiple values in a single slot, saving gas by performing fewer storage accesses.\n *\n * Each value is defined by its size and the least significant bit in the word, also known as offset. For example, two\n * 128 bit values may be encoded in a word by assigning one an offset of 0, and the other an offset of 128.\n *\n * We could use Solidity structs to pack values together in a single storage slot instead of relying on a custom and\n * error-prone library, but unfortunately Solidity only allows for structs to live in either storage, calldata or\n * memory. Because a memory struct uses not just memory but also a slot in the stack (to store its memory location),\n * using memory for word-sized values (i.e. of 256 bits or less) is strictly less gas performant, and doesn't even\n * prevent stack-too-deep issues. This is compounded by the fact that Balancer contracts typically are memory-\n * intensive, and the cost of accessing memory increases quadratically with the number of allocated words. Manual\n * packing and unpacking is therefore the preferred approach.\n */\nlibrary WordCodec {\n using Math for uint256;\n using SignedMath for int256;\n\n // solhint-disable no-inline-assembly\n\n /// @notice Function called with an invalid value.\n error CodecOverflow();\n\n /// @notice Function called with an invalid bitLength or offset.\n error OutOfBounds();\n\n /***************************************************************************\n In-place Insertion\n ***************************************************************************/\n\n /**\n * @dev Inserts an unsigned integer of bitLength, shifted by an offset, into a 256 bit word,\n * replacing the old value. Returns the new word.\n */\n function insertUint(\n bytes32 word,\n uint256 value,\n uint256 offset,\n uint256 bitLength\n ) internal pure returns (bytes32 result) {\n _validateEncodingParams(value, offset, bitLength);\n // Equivalent to:\n // uint256 mask = (1 << bitLength) - 1;\n // bytes32 clearedWord = bytes32(uint256(word) & ~(mask << offset));\n // result = clearedWord | bytes32(value << offset);\n\n assembly (\"memory-safe\") {\n let mask := sub(shl(bitLength, 1), 1)\n let clearedWord := and(word, not(shl(offset, mask)))\n result := or(clearedWord, shl(offset, value))\n }\n }\n\n /**\n * @dev Inserts an address (160 bits), shifted by an offset, into a 256 bit word,\n * replacing the old value. Returns the new word.\n */\n function insertAddress(bytes32 word, address value, uint256 offset) internal pure returns (bytes32 result) {\n uint256 addressBitLength = 160;\n _validateEncodingParams(uint256(uint160(value)), offset, addressBitLength);\n // Equivalent to:\n // uint256 mask = (1 << bitLength) - 1;\n // bytes32 clearedWord = bytes32(uint256(word) & ~(mask << offset));\n // result = clearedWord | bytes32(value << offset);\n\n assembly (\"memory-safe\") {\n let mask := sub(shl(addressBitLength, 1), 1)\n let clearedWord := and(word, not(shl(offset, mask)))\n result := or(clearedWord, shl(offset, value))\n }\n }\n\n /**\n * @dev Inserts a signed integer shifted by an offset into a 256 bit word, replacing the old value. Returns\n * the new word.\n *\n * Assumes `value` can be represented using `bitLength` bits.\n */\n function insertInt(bytes32 word, int256 value, uint256 offset, uint256 bitLength) internal pure returns (bytes32) {\n _validateEncodingParams(value, offset, bitLength);\n\n uint256 mask = (1 << bitLength) - 1;\n bytes32 clearedWord = bytes32(uint256(word) & ~(mask << offset));\n // Integer values need masking to remove the upper bits of negative values.\n return clearedWord | bytes32((uint256(value) & mask) << offset);\n }\n\n /***************************************************************************\n Encoding\n ***************************************************************************/\n\n /**\n * @dev Encodes an unsigned integer shifted by an offset. Ensures value fits within\n * `bitLength` bits.\n *\n * The return value can be ORed bitwise with other encoded values to form a 256 bit word.\n */\n function encodeUint(uint256 value, uint256 offset, uint256 bitLength) internal pure returns (bytes32) {\n _validateEncodingParams(value, offset, bitLength);\n\n return bytes32(value << offset);\n }\n\n /**\n * @dev Encodes a signed integer shifted by an offset.\n *\n * The return value can be ORed bitwise with other encoded values to form a 256 bit word.\n */\n function encodeInt(int256 value, uint256 offset, uint256 bitLength) internal pure returns (bytes32) {\n _validateEncodingParams(value, offset, bitLength);\n\n uint256 mask = (1 << bitLength) - 1;\n // Integer values need masking to remove the upper bits of negative values.\n return bytes32((uint256(value) & mask) << offset);\n }\n\n /***************************************************************************\n Decoding\n ***************************************************************************/\n\n /// @dev Decodes and returns an unsigned integer with `bitLength` bits, shifted by an offset, from a 256 bit word.\n function decodeUint(bytes32 word, uint256 offset, uint256 bitLength) internal pure returns (uint256 result) {\n // Equivalent to:\n // result = uint256(word >> offset) & ((1 << bitLength) - 1);\n\n assembly (\"memory-safe\") {\n result := and(shr(offset, word), sub(shl(bitLength, 1), 1))\n }\n }\n\n /// @dev Decodes and returns a signed integer with `bitLength` bits, shifted by an offset, from a 256 bit word.\n function decodeInt(bytes32 word, uint256 offset, uint256 bitLength) internal pure returns (int256 result) {\n int256 maxInt = int256((1 << (bitLength - 1)) - 1);\n uint256 mask = (1 << bitLength) - 1;\n\n int256 value = int256(uint256(word >> offset) & mask);\n // In case the decoded value is greater than the max positive integer that can be represented with bitLength\n // bits, we know it was originally a negative integer. Therefore, we mask it to restore the sign in the 256 bit\n // representation.\n //\n // Equivalent to:\n // result = value > maxInt ? (value | int256(~mask)) : value;\n\n assembly (\"memory-safe\") {\n result := or(mul(gt(value, maxInt), not(mask)), value)\n }\n }\n\n /// @dev Decodes and returns an address (160 bits), shifted by an offset, from a 256 bit word.\n function decodeAddress(bytes32 word, uint256 offset) internal pure returns (address result) {\n // Equivalent to:\n // result = address(word >> offset) & ((1 << bitLength) - 1);\n\n assembly (\"memory-safe\") {\n result := and(shr(offset, word), sub(shl(160, 1), 1))\n }\n }\n\n /***************************************************************************\n Special Cases\n ***************************************************************************/\n\n /// @dev Decodes and returns a boolean shifted by an offset from a 256 bit word.\n function decodeBool(bytes32 word, uint256 offset) internal pure returns (bool result) {\n // Equivalent to:\n // result = (uint256(word >> offset) & 1) == 1;\n\n assembly (\"memory-safe\") {\n result := and(shr(offset, word), 1)\n }\n }\n\n /**\n * @dev Inserts a boolean value shifted by an offset into a 256 bit word, replacing the old value.\n * Returns the new word.\n */\n function insertBool(bytes32 word, bool value, uint256 offset) internal pure returns (bytes32 result) {\n // Equivalent to:\n // bytes32 clearedWord = bytes32(uint256(word) & ~(1 << offset));\n // bytes32 referenceInsertBool = clearedWord | bytes32(uint256(value ? 1 : 0) << offset);\n\n assembly (\"memory-safe\") {\n let clearedWord := and(word, not(shl(offset, 1)))\n result := or(clearedWord, shl(offset, value))\n }\n }\n\n /***************************************************************************\n Helpers\n ***************************************************************************/\n\n function _validateEncodingParams(uint256 value, uint256 offset, uint256 bitLength) private pure {\n if (offset >= 256) {\n revert OutOfBounds();\n }\n // We never accept 256 bit values (which would make the codec pointless), and the larger the offset the smaller\n // the maximum bit length.\n if (!(bitLength >= 1 && bitLength <= Math.min(255, 256 - offset))) {\n revert OutOfBounds();\n }\n\n // Testing unsigned values for size is straightforward: their upper bits must be cleared.\n if (value >> bitLength != 0) {\n revert CodecOverflow();\n }\n }\n\n function _validateEncodingParams(int256 value, uint256 offset, uint256 bitLength) private pure {\n if (offset >= 256) {\n revert OutOfBounds();\n }\n // We never accept 256 bit values (which would make the codec pointless), and the larger the offset the smaller\n // the maximum bit length.\n if (!(bitLength >= 1 && bitLength <= Math.min(255, 256 - offset))) {\n revert OutOfBounds();\n }\n\n // Testing signed values for size is a bit more involved.\n if (value >= 0) {\n // For positive values, we can simply check that the upper bits are clear. Notice we remove one bit from the\n // length for the sign bit.\n if (value >> (bitLength - 1) != 0) {\n revert CodecOverflow();\n }\n } else {\n // Negative values can receive the same treatment by making them positive, with the caveat that the range\n // for negative values in two's complement supports one more value than for the positive case.\n if ((value + 1).abs() >> (bitLength - 1) != 0) {\n revert CodecOverflow();\n }\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { LogExpMath } from \"./LogExpMath.sol\";\n\n/// @notice Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision.\nlibrary FixedPoint {\n /// @notice Attempted division by zero.\n error ZeroDivision();\n\n // solhint-disable no-inline-assembly\n // solhint-disable private-vars-leading-underscore\n\n uint256 internal constant ONE = 1e18; // 18 decimal places\n uint256 internal constant TWO = 2 * ONE;\n uint256 internal constant FOUR = 4 * ONE;\n uint256 internal constant MAX_POW_RELATIVE_ERROR = 10000; // 10^(-14)\n\n function mulDown(uint256 a, uint256 b) internal pure returns (uint256) {\n // Multiplication overflow protection is provided by Solidity 0.8.x.\n uint256 product = a * b;\n\n return product / ONE;\n }\n\n function mulUp(uint256 a, uint256 b) internal pure returns (uint256 result) {\n // Multiplication overflow protection is provided by Solidity 0.8.x.\n uint256 product = a * b;\n\n // Equivalent to:\n // result = product == 0 ? 0 : ((product - 1) / FixedPoint.ONE) + 1\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(product)), add(div(sub(product, 1), ONE), 1))\n }\n }\n\n function divDown(uint256 a, uint256 b) internal pure returns (uint256) {\n // Solidity 0.8 reverts with a Panic code (0x11) if the multiplication overflows.\n uint256 aInflated = a * ONE;\n\n // Solidity 0.8 reverts with a \"Division by Zero\" Panic code (0x12) if b is zero\n return aInflated / b;\n }\n\n function divUp(uint256 a, uint256 b) internal pure returns (uint256 result) {\n return mulDivUp(a, ONE, b);\n }\n\n /// @dev Return (a * b) / c, rounding up.\n function mulDivUp(uint256 a, uint256 b, uint256 c) internal pure returns (uint256 result) {\n // This check is required because Yul's `div` doesn't revert on c==0.\n if (c == 0) {\n revert ZeroDivision();\n }\n\n // Multiple overflow protection is done by Solidity 0.8.x.\n uint256 product = a * b;\n\n // The traditional divUp formula is:\n // divUp(x, y) := (x + y - 1) / y\n // To avoid intermediate overflow in the addition, we distribute the division and get:\n // divUp(x, y) := (x - 1) / y + 1\n // Note that this requires x != 0, if x == 0 then the result is zero\n //\n // Equivalent to:\n // result = a == 0 ? 0 : (a * b - 1) / c + 1\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(product)), add(div(sub(product, 1), c), 1))\n }\n }\n\n /**\n * @dev Version of divUp when the input is raw (i.e., already \"inflated\"). For instance,\n * invariant * invariant (36 decimals) vs. invariant.mulDown(invariant) (18 decimal FP).\n * This can occur in calculations with many successive multiplications and divisions, and\n * we want to minimize the number of operations by avoiding unnecessary scaling by ONE.\n */\n function divUpRaw(uint256 a, uint256 b) internal pure returns (uint256 result) {\n // This check is required because Yul's `div` doesn't revert on b==0.\n if (b == 0) {\n revert ZeroDivision();\n }\n\n // Equivalent to:\n // result = a == 0 ? 0 : 1 + (a - 1) / b\n assembly (\"memory-safe\") {\n result := mul(iszero(iszero(a)), add(1, div(sub(a, 1), b)))\n }\n }\n\n /**\n * @dev Returns x^y, assuming both are fixed point numbers, rounding down. The result is guaranteed to not be above\n * the true value (that is, the error function expected - actual is always positive).\n */\n function powDown(uint256 x, uint256 y) internal pure returns (uint256) {\n // Optimize for when y equals 1.0, 2.0 or 4.0, as those are very simple to implement and occur often in 50/50\n // and 80/20 Weighted Pools\n if (y == ONE) {\n return x;\n } else if (y == TWO) {\n return mulDown(x, x);\n } else if (y == FOUR) {\n uint256 square = mulDown(x, x);\n return mulDown(square, square);\n } else {\n uint256 raw = LogExpMath.pow(x, y);\n uint256 maxError = mulUp(raw, MAX_POW_RELATIVE_ERROR) + 1;\n\n if (raw < maxError) {\n return 0;\n } else {\n unchecked {\n return raw - maxError;\n }\n }\n }\n }\n\n /**\n * @dev Returns x^y, assuming both are fixed point numbers, rounding up. The result is guaranteed to not be below\n * the true value (that is, the error function expected - actual is always negative).\n */\n function powUp(uint256 x, uint256 y) internal pure returns (uint256) {\n // Optimize for when y equals 1.0, 2.0 or 4.0, as those are very simple to implement and occur often in 50/50\n // and 80/20 Weighted Pools\n if (y == ONE) {\n return x;\n } else if (y == TWO) {\n return mulUp(x, x);\n } else if (y == FOUR) {\n uint256 square = mulUp(x, x);\n return mulUp(square, square);\n } else {\n uint256 raw = LogExpMath.pow(x, y);\n uint256 maxError = mulUp(raw, MAX_POW_RELATIVE_ERROR) + 1;\n\n return raw + maxError;\n }\n }\n\n /**\n * @dev Returns the complement of a value (1 - x), capped to 0 if x is larger than 1.\n *\n * Useful when computing the complement for values with some level of relative error, as it strips this error and\n * prevents intermediate negative values.\n */\n function complement(uint256 x) internal pure returns (uint256 result) {\n // Equivalent to:\n // result = (x < ONE) ? (ONE - x) : 0\n assembly (\"memory-safe\") {\n result := mul(lt(x, ONE), sub(ONE, x))\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\n// solhint-disable\n\n/**\n * @dev Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument).\n *\n * Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural\n * exponentiation and logarithm (where the base is Euler's number).\n *\n * All math operations are unchecked in order to save gas.\n *\n * @author Fernando Martinelli - @fernandomartinelli\n * @author Sergio Yuhjtman - @sergioyuhjtman\n * @author Daniel Fernandez - @dmf7z\n */\nlibrary LogExpMath {\n /// @notice This error is thrown when a base is not within an acceptable range.\n error BaseOutOfBounds();\n\n /// @notice This error is thrown when a exponent is not within an acceptable range.\n error ExponentOutOfBounds();\n\n /// @notice This error is thrown when the exponent * ln(base) is not within an acceptable range.\n error ProductOutOfBounds();\n\n /// @notice This error is thrown when an exponent used in the exp function is not within an acceptable range.\n error InvalidExponent();\n\n /// @notice This error is thrown when a variable or result is not within the acceptable bounds defined in the function.\n error OutOfBounds();\n\n // All fixed point multiplications and divisions are inlined. This means we need to divide by ONE when multiplying\n // two numbers, and multiply by ONE when dividing them.\n\n // All arguments and return values are 18 decimal fixed point numbers.\n int256 constant ONE_18 = 1e18;\n\n // Internally, intermediate values are computed with higher precision as 20 decimal fixed point numbers, and in the\n // case of ln36, 36 decimals.\n int256 constant ONE_20 = 1e20;\n int256 constant ONE_36 = 1e36;\n\n // The domain of natural exponentiation is bound by the word size and number of decimals used.\n //\n // Because internally the result will be stored using 20 decimals, the largest possible result is\n // (2^255 - 1) / 10^20, which makes the largest exponent ln((2^255 - 1) / 10^20) = 130.700829182905140221.\n // The smallest possible result is 10^(-18), which makes largest negative argument\n // ln(10^(-18)) = -41.446531673892822312.\n // We use 130.0 and -41.0 to have some safety margin.\n int256 constant MAX_NATURAL_EXPONENT = 130e18;\n int256 constant MIN_NATURAL_EXPONENT = -41e18;\n\n // Bounds for ln_36's argument. Both ln(0.9) and ln(1.1) can be represented with 36 decimal places in a fixed point\n // 256 bit integer.\n int256 constant LN_36_LOWER_BOUND = ONE_18 - 1e17;\n int256 constant LN_36_UPPER_BOUND = ONE_18 + 1e17;\n\n uint256 constant MILD_EXPONENT_BOUND = 2 ** 254 / uint256(ONE_20);\n\n // 18 decimal constants\n int256 constant x0 = 128000000000000000000; // 2ˆ7\n int256 constant a0 = 38877084059945950922200000000000000000000000000000000000; // eˆ(x0) (no decimals)\n int256 constant x1 = 64000000000000000000; // 2ˆ6\n int256 constant a1 = 6235149080811616882910000000; // eˆ(x1) (no decimals)\n\n // 20 decimal constants\n int256 constant x2 = 3200000000000000000000; // 2ˆ5\n int256 constant a2 = 7896296018268069516100000000000000; // eˆ(x2)\n int256 constant x3 = 1600000000000000000000; // 2ˆ4\n int256 constant a3 = 888611052050787263676000000; // eˆ(x3)\n int256 constant x4 = 800000000000000000000; // 2ˆ3\n int256 constant a4 = 298095798704172827474000; // eˆ(x4)\n int256 constant x5 = 400000000000000000000; // 2ˆ2\n int256 constant a5 = 5459815003314423907810; // eˆ(x5)\n int256 constant x6 = 200000000000000000000; // 2ˆ1\n int256 constant a6 = 738905609893065022723; // eˆ(x6)\n int256 constant x7 = 100000000000000000000; // 2ˆ0\n int256 constant a7 = 271828182845904523536; // eˆ(x7)\n int256 constant x8 = 50000000000000000000; // 2ˆ-1\n int256 constant a8 = 164872127070012814685; // eˆ(x8)\n int256 constant x9 = 25000000000000000000; // 2ˆ-2\n int256 constant a9 = 128402541668774148407; // eˆ(x9)\n int256 constant x10 = 12500000000000000000; // 2ˆ-3\n int256 constant a10 = 113314845306682631683; // eˆ(x10)\n int256 constant x11 = 6250000000000000000; // 2ˆ-4\n int256 constant a11 = 106449445891785942956; // eˆ(x11)\n\n /**\n * @dev Exponentiation (x^y) with unsigned 18 decimal fixed point base and exponent.\n *\n * Reverts if ln(x) * y is smaller than `MIN_NATURAL_EXPONENT`, or larger than `MAX_NATURAL_EXPONENT`.\n */\n function pow(uint256 x, uint256 y) internal pure returns (uint256) {\n if (y == 0) {\n // We solve the 0^0 indetermination by making it equal one.\n return uint256(ONE_18);\n }\n\n if (x == 0) {\n return 0;\n }\n\n // Instead of computing x^y directly, we instead rely on the properties of logarithms and exponentiation to\n // arrive at that result. In particular, exp(ln(x)) = x, and ln(x^y) = y * ln(x). This means\n // x^y = exp(y * ln(x)).\n\n // The ln function takes a signed value, so we need to make sure x fits in the signed 256 bit range.\n if (x >> 255 != 0) {\n revert BaseOutOfBounds();\n }\n int256 x_int256 = int256(x);\n\n // We will compute y * ln(x) in a single step. Depending on the value of x, we can either use ln or ln_36. In\n // both cases, we leave the division by ONE_18 (due to fixed point multiplication) to the end.\n\n // This prevents y * ln(x) from overflowing, and at the same time guarantees y fits in the signed 256 bit range.\n if (y >= MILD_EXPONENT_BOUND) {\n revert ExponentOutOfBounds();\n }\n int256 y_int256 = int256(y);\n\n int256 logx_times_y;\n unchecked {\n if (LN_36_LOWER_BOUND < x_int256 && x_int256 < LN_36_UPPER_BOUND) {\n int256 ln_36_x = _ln_36(x_int256);\n\n // ln_36_x has 36 decimal places, so multiplying by y_int256 isn't as straightforward, since we can't just\n // bring y_int256 to 36 decimal places, as it might overflow. Instead, we perform two 18 decimal\n // multiplications and add the results: one with the first 18 decimals of ln_36_x, and one with the\n // (downscaled) last 18 decimals.\n logx_times_y = ((ln_36_x / ONE_18) * y_int256 + ((ln_36_x % ONE_18) * y_int256) / ONE_18);\n } else {\n logx_times_y = _ln(x_int256) * y_int256;\n }\n logx_times_y /= ONE_18;\n }\n\n // Finally, we compute exp(y * ln(x)) to arrive at x^y\n if (!(MIN_NATURAL_EXPONENT <= logx_times_y && logx_times_y <= MAX_NATURAL_EXPONENT)) {\n revert ProductOutOfBounds();\n }\n\n return uint256(exp(logx_times_y));\n }\n\n /**\n * @dev Natural exponentiation (e^x) with signed 18 decimal fixed point exponent.\n *\n * Reverts if `x` is smaller than MIN_NATURAL_EXPONENT, or larger than `MAX_NATURAL_EXPONENT`.\n */\n function exp(int256 x) internal pure returns (int256) {\n if (!(x >= MIN_NATURAL_EXPONENT && x <= MAX_NATURAL_EXPONENT)) {\n revert InvalidExponent();\n }\n\n // We avoid using recursion here because zkSync doesn't support it.\n bool negativeExponent = false;\n\n if (x < 0) {\n // We only handle positive exponents: e^(-x) is computed as 1 / e^x. We can safely make x positive since it\n // fits in the signed 256 bit range (as it is larger than MIN_NATURAL_EXPONENT). In the negative\n // exponent case, compute e^x, then return 1 / result.\n unchecked {\n x = -x;\n }\n negativeExponent = true;\n }\n\n // First, we use the fact that e^(x+y) = e^x * e^y to decompose x into a sum of powers of two, which we call x_n,\n // where x_n == 2^(7 - n), and e^x_n = a_n has been precomputed. We choose the first x_n, x0, to equal 2^7\n // because all larger powers are larger than MAX_NATURAL_EXPONENT, and therefore not present in the\n // decomposition.\n // At the end of this process we will have the product of all e^x_n = a_n that apply, and the remainder of this\n // decomposition, which will be lower than the smallest x_n.\n // exp(x) = k_0 * a_0 * k_1 * a_1 * ... + k_n * a_n * exp(remainder), where each k_n equals either 0 or 1.\n // We mutate x by subtracting x_n, making it the remainder of the decomposition.\n\n // The first two a_n (e^(2^7) and e^(2^6)) are too large if stored as 18 decimal numbers, and could cause\n // intermediate overflows. Instead we store them as plain integers, with 0 decimals.\n // Additionally, x0 + x1 is larger than MAX_NATURAL_EXPONENT, which means they will not both be present in the\n // decomposition.\n\n // For each x_n, we test if that term is present in the decomposition (if x is larger than it), and if so deduct\n // it and compute the accumulated product.\n\n int256 firstAN;\n unchecked {\n if (x >= x0) {\n x -= x0;\n firstAN = a0;\n } else if (x >= x1) {\n x -= x1;\n firstAN = a1;\n } else {\n firstAN = 1; // One with no decimal places\n }\n\n // We now transform x into a 20 decimal fixed point number, to have enhanced precision when computing the\n // smaller terms.\n x *= 100;\n }\n\n // `product` is the accumulated product of all a_n (except a0 and a1), which starts at 20 decimal fixed point\n // one. Recall that fixed point multiplication requires dividing by ONE_20.\n int256 product = ONE_20;\n\n unchecked {\n if (x >= x2) {\n x -= x2;\n product = (product * a2) / ONE_20;\n }\n if (x >= x3) {\n x -= x3;\n product = (product * a3) / ONE_20;\n }\n if (x >= x4) {\n x -= x4;\n product = (product * a4) / ONE_20;\n }\n if (x >= x5) {\n x -= x5;\n product = (product * a5) / ONE_20;\n }\n if (x >= x6) {\n x -= x6;\n product = (product * a6) / ONE_20;\n }\n if (x >= x7) {\n x -= x7;\n product = (product * a7) / ONE_20;\n }\n if (x >= x8) {\n x -= x8;\n product = (product * a8) / ONE_20;\n }\n if (x >= x9) {\n x -= x9;\n product = (product * a9) / ONE_20;\n }\n }\n\n // x10 and x11 are unnecessary here since we have high enough precision already.\n\n // Now we need to compute e^x, where x is small (in particular, it is smaller than x9). We use the Taylor series\n // expansion for e^x: 1 + x + (x^2 / 2!) + (x^3 / 3!) + ... + (x^n / n!).\n\n int256 seriesSum = ONE_20; // The initial one in the sum, with 20 decimal places.\n int256 term; // Each term in the sum, where the nth term is (x^n / n!).\n\n // The first term is simply x.\n term = x;\n unchecked {\n seriesSum += term;\n\n // Each term (x^n / n!) equals the previous one times x, divided by n. Since x is a fixed point number,\n // multiplying by it requires dividing by ONE_20, but dividing by the non-fixed point n values does not.\n\n term = ((term * x) / ONE_20) / 2;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 3;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 4;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 5;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 6;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 7;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 8;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 9;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 10;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 11;\n seriesSum += term;\n\n term = ((term * x) / ONE_20) / 12;\n seriesSum += term;\n\n // 12 Taylor terms are sufficient for 18 decimal precision.\n\n // We now have the first a_n (with no decimals), and the product of all other a_n present, and the Taylor\n // approximation of the exponentiation of the remainder (both with 20 decimals). All that remains is to multiply\n // all three (one 20 decimal fixed point multiplication, dividing by ONE_20, and one integer multiplication),\n // and then drop two digits to return an 18 decimal value.\n\n int256 result = (((product * seriesSum) / ONE_20) * firstAN) / 100;\n\n // We avoid using recursion here because zkSync doesn't support it.\n return negativeExponent ? (ONE_18 * ONE_18) / result : result;\n }\n }\n\n /// @dev Logarithm (log(arg, base), with signed 18 decimal fixed point base and argument.\n function log(int256 arg, int256 base) internal pure returns (int256) {\n // This performs a simple base change: log(arg, base) = ln(arg) / ln(base).\n\n // Both logBase and logArg are computed as 36 decimal fixed point numbers, either by using ln_36, or by\n // upscaling.\n\n int256 logBase;\n unchecked {\n if (LN_36_LOWER_BOUND < base && base < LN_36_UPPER_BOUND) {\n logBase = _ln_36(base);\n } else {\n logBase = _ln(base) * ONE_18;\n }\n }\n\n int256 logArg;\n unchecked {\n if (LN_36_LOWER_BOUND < arg && arg < LN_36_UPPER_BOUND) {\n logArg = _ln_36(arg);\n } else {\n logArg = _ln(arg) * ONE_18;\n }\n\n // When dividing, we multiply by ONE_18 to arrive at a result with 18 decimal places\n return (logArg * ONE_18) / logBase;\n }\n }\n\n /// @dev Natural logarithm (ln(a)) with signed 18 decimal fixed point argument.\n function ln(int256 a) internal pure returns (int256) {\n // The real natural logarithm is not defined for negative numbers or zero.\n if (a <= 0) {\n revert OutOfBounds();\n }\n if (LN_36_LOWER_BOUND < a && a < LN_36_UPPER_BOUND) {\n unchecked {\n return _ln_36(a) / ONE_18;\n }\n } else {\n return _ln(a);\n }\n }\n\n /// @dev Internal natural logarithm (ln(a)) with signed 18 decimal fixed point argument.\n function _ln(int256 a) private pure returns (int256) {\n // We avoid using recursion here because zkSync doesn't support it.\n bool negativeExponent = false;\n\n if (a < ONE_18) {\n // Since ln(a^k) = k * ln(a), we can compute ln(a) as ln(a) = ln((1/a)^(-1)) = - ln((1/a)). If a is less\n // than one, 1/a will be greater than one, so in this case we compute ln(1/a) and negate the final result.\n unchecked {\n a = (ONE_18 * ONE_18) / a;\n }\n negativeExponent = true;\n }\n\n // First, we use the fact that ln^(a * b) = ln(a) + ln(b) to decompose ln(a) into a sum of powers of two, which\n // we call x_n, where x_n == 2^(7 - n), which are the natural logarithm of precomputed quantities a_n (that is,\n // ln(a_n) = x_n). We choose the first x_n, x0, to equal 2^7 because the exponential of all larger powers cannot\n // be represented as 18 fixed point decimal numbers in 256 bits, and are therefore larger than a.\n // At the end of this process we will have the sum of all x_n = ln(a_n) that apply, and the remainder of this\n // decomposition, which will be lower than the smallest a_n.\n // ln(a) = k_0 * x_0 + k_1 * x_1 + ... + k_n * x_n + ln(remainder), where each k_n equals either 0 or 1.\n // We mutate a by subtracting a_n, making it the remainder of the decomposition.\n\n // For reasons related to how `exp` works, the first two a_n (e^(2^7) and e^(2^6)) are not stored as fixed point\n // numbers with 18 decimals, but instead as plain integers with 0 decimals, so we need to multiply them by\n // ONE_18 to convert them to fixed point.\n // For each a_n, we test if that term is present in the decomposition (if a is larger than it), and if so divide\n // by it and compute the accumulated sum.\n\n int256 sum = 0;\n unchecked {\n if (a >= a0 * ONE_18) {\n a /= a0; // Integer, not fixed point division\n sum += x0;\n }\n\n if (a >= a1 * ONE_18) {\n a /= a1; // Integer, not fixed point division\n sum += x1;\n }\n\n // All other a_n and x_n are stored as 20 digit fixed point numbers, so we convert the sum and a to this format.\n sum *= 100;\n a *= 100;\n\n // Because further a_n are 20 digit fixed point numbers, we multiply by ONE_20 when dividing by them.\n\n if (a >= a2) {\n a = (a * ONE_20) / a2;\n sum += x2;\n }\n\n if (a >= a3) {\n a = (a * ONE_20) / a3;\n sum += x3;\n }\n\n if (a >= a4) {\n a = (a * ONE_20) / a4;\n sum += x4;\n }\n\n if (a >= a5) {\n a = (a * ONE_20) / a5;\n sum += x5;\n }\n\n if (a >= a6) {\n a = (a * ONE_20) / a6;\n sum += x6;\n }\n\n if (a >= a7) {\n a = (a * ONE_20) / a7;\n sum += x7;\n }\n\n if (a >= a8) {\n a = (a * ONE_20) / a8;\n sum += x8;\n }\n\n if (a >= a9) {\n a = (a * ONE_20) / a9;\n sum += x9;\n }\n\n if (a >= a10) {\n a = (a * ONE_20) / a10;\n sum += x10;\n }\n\n if (a >= a11) {\n a = (a * ONE_20) / a11;\n sum += x11;\n }\n }\n\n // a is now a small number (smaller than a_11, which roughly equals 1.06). This means we can use a Taylor series\n // that converges rapidly for values of `a` close to one - the same one used in ln_36.\n // Let z = (a - 1) / (a + 1).\n // ln(a) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 20 digit fixed point division requires multiplying by ONE_20, and multiplication requires\n // division by ONE_20.\n unchecked {\n int256 z = ((a - ONE_20) * ONE_20) / (a + ONE_20);\n int256 z_squared = (z * z) / ONE_20;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n int256 num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n int256 seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 3;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 5;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 7;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 9;\n\n num = (num * z_squared) / ONE_20;\n seriesSum += num / 11;\n\n // 6 Taylor terms are sufficient for 36 decimal precision.\n\n // Finally, we multiply by 2 (non fixed point) to compute ln(remainder)\n seriesSum *= 2;\n\n // We now have the sum of all x_n present, and the Taylor approximation of the logarithm of the remainder (both\n // with 20 decimals). All that remains is to sum these two, and then drop two digits to return a 18 decimal\n // value.\n\n int256 result = (sum + seriesSum) / 100;\n\n // We avoid using recursion here because zkSync doesn't support it.\n return negativeExponent ? -result : result;\n }\n }\n\n /**\n * @dev Internal high precision (36 decimal places) natural logarithm (ln(x)) with signed 18 decimal fixed point argument,\n * for x close to one.\n *\n * Should only be used if x is between LN_36_LOWER_BOUND and LN_36_UPPER_BOUND.\n */\n function _ln_36(int256 x) private pure returns (int256) {\n // Since ln(1) = 0, a value of x close to one will yield a very small result, which makes using 36 digits\n // worthwhile.\n\n // First, we transform x to a 36 digit fixed point value.\n unchecked {\n x *= ONE_18;\n\n // We will use the following Taylor expansion, which converges very rapidly. Let z = (x - 1) / (x + 1).\n // ln(x) = 2 * (z + z^3 / 3 + z^5 / 5 + z^7 / 7 + ... + z^(2 * n + 1) / (2 * n + 1))\n\n // Recall that 36 digit fixed point division requires multiplying by ONE_36, and multiplication requires\n // division by ONE_36.\n int256 z = ((x - ONE_36) * ONE_36) / (x + ONE_36);\n int256 z_squared = (z * z) / ONE_36;\n\n // num is the numerator of the series: the z^(2 * n + 1) term\n int256 num = z;\n\n // seriesSum holds the accumulated sum of each term in the series, starting with the initial z\n int256 seriesSum = num;\n\n // In each step, the numerator is multiplied by z^2\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 3;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 5;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 7;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 9;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 11;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 13;\n\n num = (num * z_squared) / ONE_36;\n seriesSum += num / 15;\n\n // 8 Taylor terms are sufficient for 36 decimal precision.\n\n // All that remains is multiplying by 2 (non fixed point).\n return seriesSum * 2;\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/math/WeightedMath.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { FixedPoint } from \"./FixedPoint.sol\";\n\n/**\n * @notice Implementation of Balancer Weighted Math, essentially unchanged since v1.\n * @dev It is a generalization of the x * y = k constant product formula, accounting for cases with more than two\n * tokens, and weights that are not 50/50.\n *\n * See https://docs.balancer.fi/concepts/explore-available-balancer-pools/weighted-pool/weighted-math.html\n *\n * For security reasons, to help ensure that for all possible \"round trip\" paths the caller always receives the same\n * or fewer tokens than supplied, we have chosen the rounding direction to favor the protocol in all cases.\n */\nlibrary WeightedMath {\n using FixedPoint for uint256;\n\n /// @notice User attempted to extract a disproportionate amountOut of tokens from a pool.\n error MaxOutRatio();\n\n /// @notice User attempted to add a disproportionate amountIn of tokens to a pool.\n error MaxInRatio();\n\n /**\n * @notice Error thrown when the calculated invariant is zero, indicating an issue with the invariant calculation.\n * @dev Most commonly, this happens when a token balance is zero.\n */\n error ZeroInvariant();\n\n // Pool limits that arise from limitations in the fixed point power function. When computing x^y, the valid range\n // of `x` is -41 (ExpMin) to 130 (ExpMax). See `LogExpMath.sol` for the derivation of these values.\n //\n // Invariant calculation:\n // In computing `balance^normalizedWeight`, `log(balance) * normalizedWeight` must fall within the `pow` function\n // bounds described above. Since 0.01 <= normalizedWeight <= 0.99, the balance is constrained to the range between\n // e^(ExpMin) and e^(ExpMax).\n //\n // This corresponds to 10^(-18) < balance < 2^(188.56). Since the maximum balance is 2^(128) - 1, the invariant\n // calculation is unconstrained by the `pow` function limits.\n //\n // It's a different story with `computeBalanceOutGivenInvariant` (inverse invariant):\n // This uses the power function to raise the invariant ratio to the power of 1/weight. Similar to the computation\n // for the invariant, this means the following expression must hold:\n // ExpMin < log(invariantRatio) * 1/weight < ExpMax\n //\n // Given the valid range of weights (i.e., 1 < 1/weight < 100), we have:\n // ExpMin/100 < log(invariantRatio) < ExpMax/100, or e^(-0.41) < invariantRatio < e^(1.3). Numerically, this\n // constrains the invariantRatio to between 0.661 and 3.695. For an added safety margin, we set the limits to\n // 0.7 < invariantRatio < 3.\n\n // Swap limits: amounts swapped may not be larger than this percentage of the total balance.\n uint256 internal constant _MAX_IN_RATIO = 30e16; // 30%\n uint256 internal constant _MAX_OUT_RATIO = 30e16; // 30%\n\n // Invariant growth limit: non-proportional add cannot cause the invariant to increase by more than this ratio.\n uint256 internal constant _MAX_INVARIANT_RATIO = 300e16; // 300%\n // Invariant shrink limit: non-proportional remove cannot cause the invariant to decrease by less than this ratio.\n uint256 internal constant _MIN_INVARIANT_RATIO = 70e16; // 70%\n\n /**\n * @notice Compute the invariant, rounding down.\n * @dev The invariant functions are called by the Vault during various liquidity operations, and require a specific\n * rounding direction in order to ensure safety (i.e., that the final result is always rounded in favor of the\n * protocol. The invariant (i.e., all token balances) must always be greater than 0, or it will revert.\n *\n * @param normalizedWeights The pool token weights, sorted in token registration order\n * @param balances The pool token balances, sorted in token registration order\n * @return invariant The invariant, rounded down\n */\n function computeInvariantDown(\n uint256[] memory normalizedWeights,\n uint256[] memory balances\n ) internal pure returns (uint256 invariant) {\n /**********************************************************************************************\n // invariant _____ //\n // wi = weight index i | | wi //\n // bi = balance index i | | bi ^ = i //\n // i = invariant //\n **********************************************************************************************/\n\n invariant = FixedPoint.ONE;\n for (uint256 i = 0; i < normalizedWeights.length; ++i) {\n invariant = invariant.mulDown(balances[i].powDown(normalizedWeights[i]));\n }\n\n if (invariant == 0) {\n revert ZeroInvariant();\n }\n }\n\n /**\n * @notice Compute the invariant, rounding up.\n * @dev The invariant functions are called by the Vault during various liquidity operations, and require a specific\n * rounding direction in order to ensure safety (i.e., that the final result is always rounded in favor of the\n * protocol. The invariant (i.e., all token balances) must always be greater than 0, or it will revert.\n *\n * @param normalizedWeights The pool token weights, sorted in token registration order\n * @param balances The pool token balances, sorted in token registration order\n * @return invariant The invariant, rounded up\n */\n function computeInvariantUp(\n uint256[] memory normalizedWeights,\n uint256[] memory balances\n ) internal pure returns (uint256 invariant) {\n /**********************************************************************************************\n // invariant _____ //\n // wi = weight index i | | wi //\n // bi = balance index i | | bi ^ = i //\n // i = invariant //\n **********************************************************************************************/\n\n invariant = FixedPoint.ONE;\n for (uint256 i = 0; i < normalizedWeights.length; ++i) {\n invariant = invariant.mulUp(balances[i].powUp(normalizedWeights[i]));\n }\n\n if (invariant == 0) {\n revert ZeroInvariant();\n }\n }\n\n /**\n * @notice Compute a token balance after a liquidity operation, given the current balance and invariant ratio.\n * @dev This is called as part of the \"inverse invariant\" `computeBalance` calculation.\n * @param currentBalance The current balance of the token\n * @param weight The weight of the token\n * @param invariantRatio The invariant ratio (i.e., new/old; will be > 1 for add; < 1 for remove)\n * @return newBalance The adjusted token balance after the operation\n */\n function computeBalanceOutGivenInvariant(\n uint256 currentBalance,\n uint256 weight,\n uint256 invariantRatio\n ) internal pure returns (uint256 newBalance) {\n /******************************************************************************************\n // calculateBalanceGivenInvariant //\n // o = balanceOut //\n // b = balanceIn (1 / w) //\n // w = weight o = b * i ^ //\n // i = invariantRatio //\n ******************************************************************************************/\n\n // Rounds result up overall, rounding up the two individual steps:\n // - balanceRatio = invariantRatio ^ (1 / weight)\n // - newBalance = balance * balanceRatio\n //\n // Regarding `balanceRatio`, the exponent is always > FP(1), but the invariant ratio can be either greater or\n // lower than FP(1) depending on whether this is solving an `add` or a `remove` operation.\n // - For i > 1, we need to round the exponent up, as i^x is monotonically increasing for i > 1.\n // - For i < 1, we need to round the exponent down, as as i^x is monotonically decreasing for i < 1.\n\n function(uint256, uint256) internal pure returns (uint256) divUpOrDown = invariantRatio > 1\n ? FixedPoint.divUp\n : FixedPoint.divDown;\n\n // Calculate by how much the token balance has to increase to match the invariantRatio.\n uint256 balanceRatio = invariantRatio.powUp(divUpOrDown(FixedPoint.ONE, weight));\n\n return currentBalance.mulUp(balanceRatio);\n }\n\n /**\n * @notice Compute the `amountOut` of tokenOut in a swap, given the current balances and weights.\n * @param balanceIn The current balance of `tokenIn`\n * @param weightIn The weight of `tokenIn`\n * @param balanceOut The current balance of `tokenOut`\n * @param weightOut The weight of `tokenOut`\n * @param amountIn The exact amount of `tokenIn` (i.e., the amount given in an ExactIn swap)\n * @return amountOut The calculated amount of `tokenOut` returned in an ExactIn swap\n */\n function computeOutGivenExactIn(\n uint256 balanceIn,\n uint256 weightIn,\n uint256 balanceOut,\n uint256 weightOut,\n uint256 amountIn\n ) internal pure returns (uint256 amountOut) {\n /**********************************************************************************************\n // outGivenExactIn //\n // aO = amountOut //\n // bO = balanceOut //\n // bI = balanceIn / / bI \\ (wI / wO) \\ //\n // aI = amountIn aO = bO * | 1 - | -------------------------- | ^ | //\n // wI = weightIn \\ \\ ( bI + aI ) / / //\n // wO = weightOut //\n **********************************************************************************************/\n\n // Amount out, so we round down overall.\n\n // The multiplication rounds down, and the subtrahend (power) rounds up (so the base rounds up too).\n // Because bI / (bI + aI) <= 1, the exponent rounds down.\n\n // Cannot exceed maximum in ratio.\n if (amountIn > balanceIn.mulDown(_MAX_IN_RATIO)) {\n revert MaxInRatio();\n }\n\n uint256 denominator = balanceIn + amountIn;\n uint256 base = balanceIn.divUp(denominator);\n uint256 exponent = weightIn.divDown(weightOut);\n uint256 power = base.powUp(exponent);\n\n // Because of rounding up, power can be greater than one. Using complement prevents reverts.\n return balanceOut.mulDown(power.complement());\n }\n\n /**\n * @notice Compute the `amountIn` of tokenIn in a swap, given the current balances and weights.\n * @param balanceIn The current balance of `tokenIn`\n * @param weightIn The weight of `tokenIn`\n * @param balanceOut The current balance of `tokenOut`\n * @param weightOut The weight of `tokenOut`\n * @param amountOut The exact amount of `tokenOut` (i.e., the amount given in an ExactOut swap)\n * @return amountIn The calculated amount of `tokenIn` returned in an ExactOut swap\n */\n function computeInGivenExactOut(\n uint256 balanceIn,\n uint256 weightIn,\n uint256 balanceOut,\n uint256 weightOut,\n uint256 amountOut\n ) internal pure returns (uint256 amountIn) {\n /**********************************************************************************************\n // inGivenExactOut //\n // aO = amountOut //\n // bO = balanceOut //\n // bI = balanceIn / / bO \\ (wO / wI) \\ //\n // aI = amountIn aI = bI * | | -------------------------- | ^ - 1 | //\n // wI = weightIn \\ \\ ( bO - aO ) / / //\n // wO = weightOut //\n **********************************************************************************************/\n\n // Amount in, so we round up overall.\n\n // The multiplication rounds up, and the power rounds up (so the base rounds up too).\n // Because b0 / (b0 - a0) >= 1, the exponent rounds up.\n\n // Cannot exceed maximum out ratio.\n if (amountOut > balanceOut.mulDown(_MAX_OUT_RATIO)) {\n revert MaxOutRatio();\n }\n\n uint256 base = balanceOut.divUp(balanceOut - amountOut);\n uint256 exponent = weightOut.divUp(weightIn);\n uint256 power = base.powUp(exponent);\n\n // Because the base is larger than one (and the power rounds up), the power should always be larger than one, so\n // the following subtraction should never revert.\n uint256 ratio = power - FixedPoint.ONE;\n\n return balanceIn.mulUp(ratio);\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\nimport { StorageSlotExtension } from \"./StorageSlotExtension.sol\";\n\n/**\n * @notice Variant of {ReentrancyGuard} that uses transient storage.\n * @dev NOTE: This variant only works on networks where EIP-1153 is available.\n */\nabstract contract ReentrancyGuardTransient {\n using StorageSlotExtension for *;\n\n // keccak256(abi.encode(uint256(keccak256(\"openzeppelin.storage.ReentrancyGuard\")) - 1)) & ~bytes32(uint256(0xff))\n bytes32 private constant _REENTRANCY_GUARD_STORAGE =\n 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00;\n\n /// @notice Unauthorized reentrant call.\n error ReentrancyGuardReentrantCall();\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and making it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n _nonReentrantBefore();\n _;\n _nonReentrantAfter();\n }\n\n function _nonReentrantBefore() private {\n // On the first call to nonReentrant, _status will be NOT_ENTERED.\n if (_reentrancyGuardEntered()) {\n revert ReentrancyGuardReentrantCall();\n }\n\n // Any calls to nonReentrant after this point will fail.\n _REENTRANCY_GUARD_STORAGE.asBoolean().tstore(true);\n }\n\n function _nonReentrantAfter() private {\n _REENTRANCY_GUARD_STORAGE.asBoolean().tstore(false);\n }\n\n /**\n * @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n * `nonReentrant` function in the call stack.\n */\n function _reentrancyGuardEntered() internal view returns (bool) {\n return _REENTRANCY_GUARD_STORAGE.asBoolean().tload();\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol":{"content":"// SPDX-License-Identifier: MIT\n// This file was procedurally generated from scripts/generate/templates/SlotDerivation.js.\n\n// Taken from https://raw.githubusercontent.com/Amxx/openzeppelin-contracts/ce497cb05ca05bb9aa2b86ec1d99e6454e7ab2e9/contracts/utils/SlotDerivation.sol\n\npragma solidity ^0.8.20;\n\n/**\n * @notice Library for computing storage (and transient storage) locations from namespaces and deriving slots\n * corresponding to standard patterns.\n * @dev The derivation method for array and mapping matches the storage layout used by the solidity language/compiler.\n *\n * See https://docs.soliditylang.org/en/v0.8.20/internals/layout_in_storage.html#mappings-and-dynamic-arrays[Solidity docs for mappings and dynamic arrays.].\n *\n * Example usage:\n * ```solidity\n * contract Example {\n * // Add the library methods\n * using StorageSlot for bytes32;\n * using SlotDerivation for bytes32;\n *\n * // Declare a namespace\n * string private constant _NAMESPACE = \"\" // eg. OpenZeppelin.Slot\n *\n * function setValueInNamespace(uint256 key, address newValue) internal {\n * _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value = newValue;\n * }\n *\n * function getValueInNamespace(uint256 key) internal view returns (address) {\n * return _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value;\n * }\n * }\n * ```\n *\n * TIP: Consider using this library along with {StorageSlot}.\n *\n * NOTE: This library provides a way to manipulate storage locations in a non-standard way. Tooling for checking\n * upgrade safety will ignore the slots accessed through this library.\n */\nlibrary SlotDerivation {\n /// @dev Derive an ERC-7201 slot from a string (namespace).\n function erc7201Slot(string memory namespace) internal pure returns (bytes32 slot) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, sub(keccak256(add(namespace, 0x20), mload(namespace)), 1))\n slot := and(keccak256(0x00, 0x20), not(0xff))\n }\n }\n\n /// @dev Add an offset to a slot to get the n-th element of a structure or an array.\n function offset(bytes32 slot, uint256 pos) internal pure returns (bytes32 result) {\n unchecked {\n return bytes32(uint256(slot) + pos);\n }\n }\n\n /// @dev Derive the location of the first element in an array from the slot where the length is stored.\n function deriveArray(bytes32 slot) internal pure returns (bytes32 result) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, slot)\n result := keccak256(0x00, 0x20)\n }\n }\n\n /// @dev Derive the location of a mapping element from the key.\n function deriveMapping(bytes32 slot, address key) internal pure returns (bytes32 result) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, key)\n mstore(0x20, slot)\n result := keccak256(0x00, 0x40)\n }\n }\n\n /// @dev Derive the location of a mapping element from the key.\n function deriveMapping(bytes32 slot, bool key) internal pure returns (bytes32 result) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, key)\n mstore(0x20, slot)\n result := keccak256(0x00, 0x40)\n }\n }\n\n /// @dev Derive the location of a mapping element from the key.\n function deriveMapping(bytes32 slot, bytes32 key) internal pure returns (bytes32 result) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, key)\n mstore(0x20, slot)\n result := keccak256(0x00, 0x40)\n }\n }\n\n /// @dev Derive the location of a mapping element from the key.\n function deriveMapping(bytes32 slot, uint256 key) internal pure returns (bytes32 result) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, key)\n mstore(0x20, slot)\n result := keccak256(0x00, 0x40)\n }\n }\n\n /// @dev Derive the location of a mapping element from the key.\n function deriveMapping(bytes32 slot, int256 key) internal pure returns (bytes32 result) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, key)\n mstore(0x20, slot)\n result := keccak256(0x00, 0x40)\n }\n }\n\n /// @dev Derive the location of a mapping element from the key.\n function deriveMapping(bytes32 slot, string memory key) internal pure returns (bytes32 result) {\n /// @solidity memory-safe-assembly\n assembly {\n let length := mload(key)\n let begin := add(key, 0x20)\n let end := add(begin, length)\n let cache := mload(end)\n mstore(end, slot)\n result := keccak256(begin, add(length, 0x20))\n mstore(end, cache)\n }\n }\n\n /// @dev Derive the location of a mapping element from the key.\n function deriveMapping(bytes32 slot, bytes memory key) internal pure returns (bytes32 result) {\n /// @solidity memory-safe-assembly\n assembly {\n let length := mload(key)\n let begin := add(key, 0x20)\n let end := add(begin, length)\n let cache := mload(end)\n mstore(end, slot)\n result := keccak256(begin, add(length, 0x20))\n mstore(end, cache)\n }\n }\n}"},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\n/**\n * @notice Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\n * @dev TIP: Consider using this library along with {SlotDerivation}.\n */\nlibrary StorageSlotExtension {\n struct Int256Slot {\n int256 value;\n }\n\n /// @dev Returns an `Int256Slot` with member `value` located at `slot`.\n function getInt256Slot(bytes32 slot) internal pure returns (Int256Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /// @dev Custom type that represents a slot holding an address.\n type AddressSlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a AddressSlotType.\n function asAddress(bytes32 slot) internal pure returns (AddressSlotType) {\n return AddressSlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a boolean.\n type BooleanSlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a BooleanSlotType.\n function asBoolean(bytes32 slot) internal pure returns (BooleanSlotType) {\n return BooleanSlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a bytes32.\n type Bytes32SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a Bytes32SlotType.\n function asBytes32(bytes32 slot) internal pure returns (Bytes32SlotType) {\n return Bytes32SlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding a uint256.\n type Uint256SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to a Uint256SlotType.\n function asUint256(bytes32 slot) internal pure returns (Uint256SlotType) {\n return Uint256SlotType.wrap(slot);\n }\n\n /// @dev Custom type that represents a slot holding an int256.\n type Int256SlotType is bytes32;\n\n /// @dev Cast an arbitrary slot to an Int256SlotType.\n function asInt256(bytes32 slot) internal pure returns (Int256SlotType) {\n return Int256SlotType.wrap(slot);\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(AddressSlotType slot) internal view returns (address value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(AddressSlotType slot, address value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(BooleanSlotType slot) internal view returns (bool value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(BooleanSlotType slot, bool value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Bytes32SlotType slot) internal view returns (bytes32 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Bytes32SlotType slot, bytes32 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Uint256SlotType slot) internal view returns (uint256 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Uint256SlotType slot, uint256 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n\n /// @dev Load the value held at location `slot` in transient storage.\n function tload(Int256SlotType slot) internal view returns (int256 value) {\n /// @solidity memory-safe-assembly\n assembly {\n value := tload(slot)\n }\n }\n\n /// @dev Store `value` at location `slot` in transient storage.\n function tstore(Int256SlotType slot, int256 value) internal {\n /// @solidity memory-safe-assembly\n assembly {\n tstore(slot, value)\n }\n }\n}\n"},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/TransientEnumerableSet.sol":{"content":"// SPDX-License-Identifier: MIT\n\npragma solidity ^0.8.24;\n\nimport { StorageSlotExtension } from \"./StorageSlotExtension.sol\";\nimport {\n AddressArraySlotType,\n AddressToUintMappingSlot,\n TransientStorageHelpers\n} from \"../helpers/TransientStorageHelpers.sol\";\n\n/**\n * @notice Library for managing sets of primitive types.\n * @dev See https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive types.\n *\n * Based on the EnumerableSet library from OpenZeppelin Contracts, altered to remove the base private functions that\n * work on bytes32, replacing them with a native implementation for address values, to reduce bytecode size and\n * runtime costs. It also uses transient storage.\n *\n * The `unchecked_at` function was also added, which allows for more gas efficient data reads in some scenarios.\n *\n * Sets have the following properties:\n *\n * - Elements are added, removed, and checked for existence in constant time (O(1)).\n * - Elements are enumerated in O(n). No guarantees are made on the ordering.\n *\n * ```\n * contract Example {\n * // Add the library methods\n * using TransientEnumerableSet for TransientEnumerableSet.AddressSet;\n *\n * // Declare a set state variable\n * TransientEnumerableSet.AddressSet private mySet;\n * }\n * ```\n */\nlibrary TransientEnumerableSet {\n using TransientStorageHelpers for *;\n using StorageSlotExtension for StorageSlotExtension.Uint256SlotType;\n\n // The original OpenZeppelin implementation uses a generic Set type with bytes32 values: this was replaced with\n // AddressSet, which uses address keys natively, resulting in more dense bytecode.\n\n // solhint-disable func-name-mixedcase\n\n struct AddressSet {\n // Storage of set values.\n address[] __values;\n // Position of the value in the `values` array, plus 1 because index 0\n // means a value is not in the set.\n mapping(address addressKey => uint256 indexValue) __indexes;\n }\n\n /// @notice An index is beyond the current bounds of the set.\n error IndexOutOfBounds();\n\n /// @notice An element that is not present in the set.\n error ElementNotFound();\n\n /**\n * @dev Add a value to a set. O(1).\n *\n * Returns true if the value was added to the set, if it was not already present.\n */\n function add(AddressSet storage set, address value) internal returns (bool) {\n if (!contains(set, value)) {\n _values(set).tPush(value);\n\n // The value is stored at length-1, but we add 1 to all indexes\n // and use 0 as a sentinel value.\n _indexes(set).tSet(value, _values(set).tLength());\n\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * @dev Removes a value from a set. O(1).\n *\n * Returns true if the value was removed from the set; i.e., if it was present.\n */\n function remove(AddressSet storage set, address value) internal returns (bool) {\n // We read and store the value's index to prevent multiple reads from the same storage slot.\n uint256 valueIndex = _indexes(set).tGet(value);\n\n if (valueIndex != 0) {\n // Equivalent to contains(set, value)\n // To delete an element from the _values array in O(1), we swap the element to delete with the last one in\n // the array, and then remove the last element (sometimes called as 'swap and pop').\n // This modifies the order of the array, as noted in {at}.\n uint256 toDeleteIndex;\n uint256 lastIndex;\n\n unchecked {\n toDeleteIndex = valueIndex - 1;\n lastIndex = _values(set).tLength() - 1;\n }\n\n // The swap is only necessary if we're not removing the last element.\n if (toDeleteIndex != lastIndex) {\n address lastValue = _values(set).tAt(lastIndex);\n\n // Move the last entry to the index of the entry to delete.\n _values(set).tSet(toDeleteIndex, lastValue);\n\n // Update the index for the moved value.\n _indexes(set).tSet(lastValue, valueIndex); // = toDeleteIndex + 1; all indices are 1-based\n }\n\n // Delete the slot where the moved value was stored.\n _values(set).tPop();\n\n // We need to delete the index for the deleted slot with transient storage because another operation in the\n // same transaction may want to add the same element to the array again.\n _indexes(set).tSet(value, 0);\n\n return true;\n } else {\n return false;\n }\n }\n\n /// @dev Returns true if the value is in the set. O(1).\n function contains(AddressSet storage set, address value) internal view returns (bool) {\n return _indexes(set).tGet(value) != 0;\n }\n\n /// @dev Returns the number of values on the set. O(1).\n function length(AddressSet storage set) internal view returns (uint256) {\n return _values(set).tLength();\n }\n\n /**\n * @dev Returns the value stored at position `index` in the set. O(1).\n *\n * Note that there are no guarantees on the ordering of values inside the\n * array, and it may change when more values are added or removed.\n *\n * Requirements:\n *\n * - `index` must be strictly less than {length}.\n */\n function at(AddressSet storage set, uint256 index) internal view returns (address) {\n if (index >= _values(set).tLength()) {\n revert IndexOutOfBounds();\n }\n\n return unchecked_at(set, index);\n }\n\n /**\n * @dev Same as {at}, except this doesn't revert if `index` it outside of the set (i.e. if it is equal or larger\n * than {length}). O(1).\n *\n * This function performs one less storage read than {at}, but should only be used when `index` is known to be\n * within bounds.\n */\n function unchecked_at(AddressSet storage set, uint256 index) internal view returns (address) {\n return _values(set).tUncheckedAt(index);\n }\n\n /// @dev Return the index of an element in the set, or revert if not found.\n function indexOf(AddressSet storage set, address value) internal view returns (uint256) {\n uint256 rawIndex = _indexes(set).tGet(value);\n\n if (rawIndex == 0) {\n revert ElementNotFound();\n }\n\n unchecked {\n return rawIndex - 1;\n }\n }\n\n /**\n * @dev Same as {indexOf}, except this doesn't revert if the element isn't present in the set.\n * In this case, it returns 0.\n *\n * This function performs one less storage read than {indexOf}, but should only be used when `index` is known to be\n * within bounds.\n */\n function unchecked_indexOf(AddressSet storage set, address value) internal view returns (uint256) {\n uint256 rawIndex = _indexes(set).tGet(value);\n\n unchecked {\n return rawIndex == 0 ? 0 : rawIndex - 1;\n }\n }\n\n // Transient storage functions\n\n /// @dev Return the raw contents of the underlying address array.\n function values(AddressSet storage set) internal view returns (address[] memory memValues) {\n uint256 len = _values(set).tLength();\n memValues = new address[](len);\n\n for (uint256 i = 0; i < len; ++i) {\n memValues[i] = _values(set).tUncheckedAt(i);\n }\n }\n\n // solhint-disable no-inline-assembly\n\n function _values(AddressSet storage set) private view returns (AddressArraySlotType slot) {\n address[] storage structValues = set.__values;\n\n assembly (\"memory-safe\") {\n slot := structValues.slot\n }\n }\n\n function _indexes(AddressSet storage set) private view returns (AddressToUintMappingSlot slot) {\n mapping(address addressKey => uint256 indexValue) storage indexes = set.__indexes;\n\n assembly (\"memory-safe\") {\n slot := indexes.slot\n }\n }\n}\n"},"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20Metadata } from \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\";\nimport { IERC20Permit } from \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\";\nimport { ERC165 } from \"@openzeppelin/contracts/utils/introspection/ERC165.sol\";\nimport { EIP712 } from \"@openzeppelin/contracts/utils/cryptography/EIP712.sol\";\nimport { ECDSA } from \"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { Nonces } from \"@openzeppelin/contracts/utils/Nonces.sol\";\n\nimport { IRateProvider } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { VaultGuard } from \"./VaultGuard.sol\";\n\n/**\n * @notice `BalancerPoolToken` is a fully ERC20-compatible token to be used as the base contract for Balancer Pools,\n * with all the data and implementation delegated to the ERC20Multitoken contract.\n\n * @dev Implementation of the ERC-20 Permit extension allowing approvals to be made via signatures, as defined in\n * https://eips.ethereum.org/EIPS/eip-2612[ERC-2612].\n */\ncontract BalancerPoolToken is IERC20, IERC20Metadata, IERC20Permit, IRateProvider, EIP712, Nonces, ERC165, VaultGuard {\n bytes32 public constant PERMIT_TYPEHASH =\n keccak256(\"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\");\n\n /**\n * @notice Operation failed due to an expired permit signature.\n * @param deadline The permit deadline that expired\n */\n error ERC2612ExpiredSignature(uint256 deadline);\n\n /**\n * @notice Operation failed due to a non-matching signature.\n * @param signer The address corresponding to the signature provider\n * @param owner The address of the owner (expected value of the signature provider)\n */\n error ERC2612InvalidSigner(address signer, address owner);\n\n // EIP712 also defines _name.\n string private _bptName;\n string private _bptSymbol;\n\n constructor(IVault vault_, string memory bptName, string memory bptSymbol) EIP712(bptName, \"1\") VaultGuard(vault_) {\n _bptName = bptName;\n _bptSymbol = bptSymbol;\n }\n\n /// @inheritdoc IERC20Metadata\n function name() external view returns (string memory) {\n return _bptName;\n }\n\n /// @inheritdoc IERC20Metadata\n function symbol() external view returns (string memory) {\n return _bptSymbol;\n }\n\n /// @inheritdoc IERC20Metadata\n function decimals() external pure returns (uint8) {\n // Always 18 decimals for BPT.\n return 18;\n }\n\n /// @inheritdoc IERC20\n function totalSupply() public view returns (uint256) {\n return _vault.totalSupply(address(this));\n }\n\n function getVault() public view returns (IVault) {\n return _vault;\n }\n\n /// @inheritdoc IERC20\n function balanceOf(address account) external view returns (uint256) {\n return _vault.balanceOf(address(this), account);\n }\n\n /// @inheritdoc IERC20\n function transfer(address to, uint256 amount) external returns (bool) {\n // Vault will perform the transfer and call emitTransfer to emit the event from this contract.\n _vault.transfer(msg.sender, to, amount);\n return true;\n }\n\n /// @inheritdoc IERC20\n function allowance(address owner, address spender) external view returns (uint256) {\n return _vault.allowance(address(this), owner, spender);\n }\n\n /// @inheritdoc IERC20\n function approve(address spender, uint256 amount) external returns (bool) {\n // Vault will perform the approval and call emitApproval to emit the event from this contract.\n _vault.approve(msg.sender, spender, amount);\n return true;\n }\n\n /// @inheritdoc IERC20\n function transferFrom(address from, address to, uint256 amount) external returns (bool) {\n // Vault will perform the transfer and call emitTransfer to emit the event from this contract.\n _vault.transferFrom(msg.sender, from, to, amount);\n return true;\n }\n\n /**\n * Accounting is centralized in the MultiToken contract, and the actual transfers and approvals are done there.\n * Operations can be initiated from either the token contract or the MultiToken.\n *\n * To maintain compliance with the ERC-20 standard, and conform to the expectations of off-chain processes,\n * the MultiToken calls `emitTransfer` and `emitApproval` during those operations, so that the event is emitted\n * only from the token contract. These events are NOT defined in the MultiToken contract.\n */\n\n /// @dev Emit the Transfer event. This function can only be called by the MultiToken.\n function emitTransfer(address from, address to, uint256 amount) external onlyVault {\n emit Transfer(from, to, amount);\n }\n\n /// @dev Emit the Approval event. This function can only be called by the MultiToken.\n function emitApproval(address owner, address spender, uint256 amount) external onlyVault {\n emit Approval(owner, spender, amount);\n }\n\n // @inheritdoc IERC20Permit\n function permit(\n address owner,\n address spender,\n uint256 amount,\n uint256 deadline,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) public virtual {\n // solhint-disable-next-line not-rely-on-time\n if (block.timestamp > deadline) {\n revert ERC2612ExpiredSignature(deadline);\n }\n\n bytes32 structHash = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, amount, _useNonce(owner), deadline));\n\n bytes32 hash = _hashTypedDataV4(structHash);\n\n address signer = ECDSA.recover(hash, v, r, s);\n if (signer != owner) {\n revert ERC2612InvalidSigner(signer, owner);\n }\n\n _vault.approve(owner, spender, amount);\n }\n\n // @inheritdoc IERC20Permit\n function nonces(address owner) public view virtual override(IERC20Permit, Nonces) returns (uint256) {\n return super.nonces(owner);\n }\n\n /// @notice Increment the sender's nonce to revoke any currently granted (but not yet executed) `permit`.\n function incrementNonce() external {\n _useNonce(msg.sender);\n }\n\n // @inheritdoc IERC20Permit\n // solhint-disable-next-line func-name-mixedcase\n function DOMAIN_SEPARATOR() external view virtual returns (bytes32) {\n return _domainSeparatorV4();\n }\n\n /**\n * @notice Get the BPT rate, which is defined as: pool invariant/total supply.\n * @dev The VaultExtension contract defines a default implementation (`getBptRate`) to calculate the rate\n * of any given pool, which should be sufficient in nearly all cases.\n *\n * @return rate Rate of the pool's BPT\n */\n function getRate() public view virtual returns (uint256) {\n return getVault().getBptRate(address(this));\n }\n}\n"},"@balancer-labs/v3-vault/contracts/BaseHooks.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IHooks } from \"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\";\nimport {\n AddLiquidityKind,\n HookFlags,\n LiquidityManagement,\n RemoveLiquidityKind,\n TokenConfig,\n PoolSwapParams,\n AfterSwapParams\n} from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\n/**\n * @notice Base for pool hooks contracts.\n * @dev Hook contracts that only implement a subset of callbacks can inherit from here instead of IHooks,\n * and only override what they need. `VaultGuard` allows use of the `onlyVault` modifier, which isn't used\n * in this abstract contract, but should be used in real derived hook contracts.\n */\nabstract contract BaseHooks is IHooks {\n /// @inheritdoc IHooks\n function onRegister(\n address,\n address,\n TokenConfig[] memory,\n LiquidityManagement calldata\n ) public virtual returns (bool) {\n // By default, deny all factories. This method must be overwritten by the hook contract.\n return false;\n }\n\n /// @inheritdoc IHooks\n function getHookFlags() public view virtual returns (HookFlags memory);\n\n /// @inheritdoc IHooks\n function onBeforeInitialize(uint256[] memory, bytes memory) public virtual returns (bool) {\n return false;\n }\n\n /// @inheritdoc IHooks\n function onAfterInitialize(uint256[] memory, uint256, bytes memory) public virtual returns (bool) {\n return false;\n }\n\n /// @inheritdoc IHooks\n function onBeforeAddLiquidity(\n address,\n address,\n AddLiquidityKind,\n uint256[] memory,\n uint256,\n uint256[] memory,\n bytes memory\n ) public virtual returns (bool) {\n return false;\n }\n\n /// @inheritdoc IHooks\n function onAfterAddLiquidity(\n address,\n address,\n AddLiquidityKind,\n uint256[] memory,\n uint256[] memory amountsInRaw,\n uint256,\n uint256[] memory,\n bytes memory\n ) public virtual returns (bool, uint256[] memory) {\n return (false, amountsInRaw);\n }\n\n /// @inheritdoc IHooks\n function onBeforeRemoveLiquidity(\n address,\n address,\n RemoveLiquidityKind,\n uint256,\n uint256[] memory,\n uint256[] memory,\n bytes memory\n ) public virtual returns (bool) {\n return false;\n }\n\n /// @inheritdoc IHooks\n function onAfterRemoveLiquidity(\n address,\n address,\n RemoveLiquidityKind,\n uint256,\n uint256[] memory,\n uint256[] memory amountsOutRaw,\n uint256[] memory,\n bytes memory\n ) public virtual returns (bool, uint256[] memory) {\n return (false, amountsOutRaw);\n }\n\n /// @inheritdoc IHooks\n function onBeforeSwap(PoolSwapParams calldata, address) public virtual returns (bool) {\n // return false to trigger an error if shouldCallBeforeSwap is true but this function is not overridden.\n return false;\n }\n\n /// @inheritdoc IHooks\n function onAfterSwap(AfterSwapParams calldata) public virtual returns (bool, uint256) {\n // return false to trigger an error if shouldCallAfterSwap is true but this function is not overridden.\n // The second argument is not used.\n return (false, 0);\n }\n\n /// @inheritdoc IHooks\n function onComputeDynamicSwapFeePercentage(\n PoolSwapParams calldata,\n address,\n uint256\n ) public view virtual returns (bool, uint256) {\n return (false, 0);\n }\n}\n"},"@balancer-labs/v3-vault/contracts/BasePoolMath.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IBasePool } from \"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\";\nimport { Rounding } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\n\nlibrary BasePoolMath {\n using FixedPoint for uint256;\n\n /**\n * @notice An add liquidity operation increased the invariant above the limit.\n * @dev This value is determined by each pool type, and depends on the specific math used to compute\n * the price curve.\n *\n * @param invariantRatio The ratio of the new invariant (after an operation) to the old\n * @param maxInvariantRatio The maximum allowed invariant ratio\n */\n error InvariantRatioAboveMax(uint256 invariantRatio, uint256 maxInvariantRatio);\n\n /**\n * @notice A remove liquidity operation decreased the invariant below the limit.\n * @dev This value is determined by each pool type, and depends on the specific math used to compute\n * the price curve.\n *\n * @param invariantRatio The ratio of the new invariant (after an operation) to the old\n * @param minInvariantRatio The minimum allowed invariant ratio\n */\n error InvariantRatioBelowMin(uint256 invariantRatio, uint256 minInvariantRatio);\n\n // For security reasons, to help ensure that for all possible \"round trip\" paths the caller always receives the\n // same or fewer tokens than supplied, we have chosen the rounding direction to favor the protocol in all cases.\n\n /**\n * @notice Computes the proportional amounts of tokens to be deposited into the pool.\n * @dev This function computes the amount of each token that needs to be deposited in order to mint a specific\n * amount of pool tokens (BPT). It ensures that the amounts of tokens deposited are proportional to the current\n * pool balances.\n *\n * Calculation: For each token, amountIn = balance * (bptAmountOut / bptTotalSupply).\n * Rounding up is used to ensure that the pool is not underfunded.\n *\n * @param balances Array of current token balances in the pool\n * @param bptTotalSupply Total supply of the pool tokens (BPT)\n * @param bptAmountOut The amount of pool tokens that need to be minted\n * @return amountsIn Array of amounts for each token to be deposited\n */\n function computeProportionalAmountsIn(\n uint256[] memory balances,\n uint256 bptTotalSupply,\n uint256 bptAmountOut\n ) internal pure returns (uint256[] memory amountsIn) {\n /************************************************************************************\n // computeProportionalAmountsIn //\n // (per token) //\n // aI = amountIn / bptOut \\ //\n // b = balance aI = b * | ----------------- | //\n // bptOut = bptAmountOut \\ bptTotalSupply / //\n // bpt = bptTotalSupply //\n ************************************************************************************/\n\n // Create a new array to hold the amounts of each token to be deposited.\n amountsIn = new uint256[](balances.length);\n for (uint256 i = 0; i < balances.length; ++i) {\n // Since we multiply and divide we don't need to use FP math.\n // We're calculating amounts in so we round up.\n amountsIn[i] = balances[i].mulDivUp(bptAmountOut, bptTotalSupply);\n }\n }\n\n /**\n * @notice Computes the proportional amounts of tokens to be withdrawn from the pool.\n * @dev This function computes the amount of each token that will be withdrawn in exchange for burning\n * a specific amount of pool tokens (BPT). It ensures that the amounts of tokens withdrawn are proportional\n * to the current pool balances.\n *\n * Calculation: For each token, amountOut = balance * (bptAmountIn / bptTotalSupply).\n * Rounding down is used to prevent withdrawing more than the pool can afford.\n *\n * @param balances Array of current token balances in the pool\n * @param bptTotalSupply Total supply of the pool tokens (BPT)\n * @param bptAmountIn The amount of pool tokens that will be burned\n * @return amountsOut Array of amounts for each token to be withdrawn\n */\n function computeProportionalAmountsOut(\n uint256[] memory balances,\n uint256 bptTotalSupply,\n uint256 bptAmountIn\n ) internal pure returns (uint256[] memory amountsOut) {\n /**********************************************************************************************\n // computeProportionalAmountsOut //\n // (per token) //\n // aO = tokenAmountOut / bptIn \\ //\n // b = tokenBalance a0 = b * | --------------------- | //\n // bptIn = bptAmountIn \\ bptTotalSupply / //\n // bpt = bptTotalSupply //\n **********************************************************************************************/\n\n // Create a new array to hold the amounts of each token to be withdrawn.\n amountsOut = new uint256[](balances.length);\n for (uint256 i = 0; i < balances.length; ++i) {\n // Since we multiply and divide we don't need to use FP math.\n // Round down since we're calculating amounts out.\n amountsOut[i] = (balances[i] * bptAmountIn) / bptTotalSupply;\n }\n }\n\n /**\n * @notice Computes the amount of pool tokens (BPT) to be minted for an unbalanced liquidity addition.\n * @dev This function handles liquidity addition where the proportion of tokens deposited does not match\n * the current pool composition. It considers the current balances, exact amounts of tokens to be added,\n * total supply, and swap fee percentage. The function calculates a new invariant with the added tokens,\n * applying swap fees if necessary, and then calculates the amount of BPT to mint based on the change\n * in the invariant.\n *\n * @param currentBalances Current pool balances, sorted in token registration order\n * @param exactAmounts Array of exact amounts for each token to be added to the pool\n * @param totalSupply The current total supply of the pool tokens (BPT)\n * @param swapFeePercentage The swap fee percentage applied to the transaction\n * @param pool The pool to which we're adding liquidity\n * @return bptAmountOut The amount of pool tokens (BPT) that will be minted as a result of the liquidity addition\n * @return swapFeeAmounts The amount of swap fees charged for each token\n */\n function computeAddLiquidityUnbalanced(\n uint256[] memory currentBalances,\n uint256[] memory exactAmounts,\n uint256 totalSupply,\n uint256 swapFeePercentage,\n IBasePool pool\n ) internal view returns (uint256 bptAmountOut, uint256[] memory swapFeeAmounts) {\n /***********************************************************************\n // //\n // s = totalSupply (iFees - iCur) //\n // b = tokenBalance bptOut = s * -------------- //\n // bptOut = bptAmountOut iCur //\n // iFees = invariantWithFeesApplied //\n // iCur = currentInvariant //\n // iNew = newInvariant //\n ***********************************************************************/\n\n // Determine the number of tokens in the pool.\n uint256 numTokens = currentBalances.length;\n\n // Create a new array to hold the updated balances after the addition.\n uint256[] memory newBalances = new uint256[](numTokens);\n // Create a new array to hold the swap fee amount for each token.\n swapFeeAmounts = new uint256[](numTokens);\n\n // Loop through each token, updating the balance with the added amount.\n for (uint256 i = 0; i < numTokens; ++i) {\n newBalances[i] = currentBalances[i] + exactAmounts[i] - 1; // Undo balance round up for new balances.\n }\n\n // Calculate the new invariant ratio by dividing the new invariant by the old invariant.\n // Rounding current invariant up reduces BPT amount out at the end (see comments below).\n uint256 currentInvariant = pool.computeInvariant(currentBalances, Rounding.ROUND_UP);\n // Round down to make `taxableAmount` larger below.\n uint256 invariantRatio = pool.computeInvariant(newBalances, Rounding.ROUND_DOWN).divDown(currentInvariant);\n\n ensureInvariantRatioBelowMaximumBound(pool, invariantRatio);\n\n // Loop through each token to apply fees if necessary.\n for (uint256 i = 0; i < numTokens; ++i) {\n // Check if the new balance is greater than the equivalent proportional balance.\n // If so, calculate the taxable amount, rounding in favor of the protocol.\n // We round the second term down to subtract less and get a higher `taxableAmount`,\n // which charges higher swap fees. This will lower `newBalances`, which in turn lowers\n // `invariantWithFeesApplied` below.\n uint256 proportionalTokenBalance = invariantRatio.mulDown(currentBalances[i]);\n if (newBalances[i] > proportionalTokenBalance) {\n uint256 taxableAmount;\n unchecked {\n taxableAmount = newBalances[i] - proportionalTokenBalance;\n }\n // Calculate the fee amount.\n swapFeeAmounts[i] = taxableAmount.mulUp(swapFeePercentage);\n\n // Subtract the fee from the new balance.\n // We are essentially imposing swap fees on non-proportional incoming amounts.\n // Note: `swapFeeAmounts` should always be <= `taxableAmount` since `swapFeePercentage` is <= FP(1),\n // but since that's not verifiable within this contract, a checked subtraction is preferred.\n newBalances[i] = newBalances[i] - swapFeeAmounts[i];\n }\n }\n\n // Calculate the new invariant with fees applied.\n // This invariant should be lower than the original one, so we don't need to check invariant ratio bounds again.\n // Rounding down makes bptAmountOut go down (see comment below).\n uint256 invariantWithFeesApplied = pool.computeInvariant(newBalances, Rounding.ROUND_DOWN);\n\n // Calculate the amount of BPT to mint. This is done by multiplying the\n // total supply with the ratio of the change in invariant.\n // Since we multiply and divide we don't need to use FP math.\n // Round down since we're calculating BPT amount out. This is the most important result of this function,\n // equivalent to:\n // `totalSupply * (invariantWithFeesApplied / currentInvariant - 1)`\n\n // Then, to round `bptAmountOut` down we use `invariantWithFeesApplied` rounded down and `currentInvariant`\n // rounded up.\n // If rounding makes `invariantWithFeesApplied` smaller or equal to `currentInvariant`, this would effectively\n // be a donation. In that case we just let checked math revert for simplicity; it's not a valid use-case to\n // support at this point.\n bptAmountOut = (totalSupply * (invariantWithFeesApplied - currentInvariant)) / currentInvariant;\n }\n\n /**\n * @notice Computes the amount of input token needed to receive an exact amount of pool tokens (BPT) in a\n * single-token liquidity addition.\n * @dev This function is used when a user wants to add liquidity to the pool by specifying the exact amount\n * of pool tokens they want to receive, and the function calculates the corresponding amount of the input token.\n * It considers the current pool balances, total supply, swap fee percentage, and the desired BPT amount.\n *\n * @param currentBalances Array of current token balances in the pool, sorted in token registration order\n * @param tokenInIndex Index of the input token for which the amount needs to be calculated\n * @param exactBptAmountOut Exact amount of pool tokens (BPT) the user wants to receive\n * @param totalSupply The current total supply of the pool tokens (BPT)\n * @param swapFeePercentage The swap fee percentage applied to the taxable amount\n * @param pool The pool to which we're adding liquidity\n * @return amountInWithFee The amount of input token needed, including the swap fee, to receive the exact BPT amount\n * @return swapFeeAmounts The amount of swap fees charged for each token\n */\n function computeAddLiquiditySingleTokenExactOut(\n uint256[] memory currentBalances,\n uint256 tokenInIndex,\n uint256 exactBptAmountOut,\n uint256 totalSupply,\n uint256 swapFeePercentage,\n IBasePool pool\n ) internal view returns (uint256 amountInWithFee, uint256[] memory swapFeeAmounts) {\n // Calculate new supply after minting exactBptAmountOut.\n uint256 newSupply = exactBptAmountOut + totalSupply;\n\n // Calculate the initial amount of the input token needed for the desired amount of BPT out\n // \"divUp\" leads to a higher \"newBalance\", which in turn results in a larger \"amountIn\".\n // This leads to receiving more tokens for the same amount of BPT minted.\n uint256 invariantRatio = newSupply.divUp(totalSupply);\n ensureInvariantRatioBelowMaximumBound(pool, invariantRatio);\n\n uint256 newBalance = pool.computeBalance(currentBalances, tokenInIndex, invariantRatio);\n\n // Compute the amount to be deposited into the pool.\n uint256 amountIn = newBalance - currentBalances[tokenInIndex];\n\n // Calculate the non-taxable amount, which is the new balance proportionate to the BPT minted.\n // Since we multiply and divide we don't need to use FP math.\n // Rounding down makes `taxableAmount` larger, which in turn makes `fee` larger below.\n uint256 nonTaxableBalance = (newSupply * currentBalances[tokenInIndex]) / totalSupply;\n\n // Calculate the taxable amount, which is the difference between the actual new balance and\n // the non-taxable balance.\n uint256 taxableAmount = newBalance - nonTaxableBalance;\n\n // Calculate the swap fee based on the taxable amount and the swap fee percentage.\n uint256 fee = taxableAmount.divUp(swapFeePercentage.complement()) - taxableAmount;\n\n // Create swap fees amount array and set the single fee we charge.\n swapFeeAmounts = new uint256[](currentBalances.length);\n swapFeeAmounts[tokenInIndex] = fee;\n\n // Return the total amount of input token needed, including the swap fee.\n amountInWithFee = amountIn + fee;\n }\n\n /**\n * @notice Computes the amount of pool tokens to burn to receive exact amount out.\n * @param currentBalances Current pool balances, sorted in token registration order\n * @param tokenOutIndex Index of the token to receive in exchange for pool tokens burned\n * @param exactAmountOut Exact amount of tokens to receive\n * @param totalSupply The current total supply of the pool tokens (BPT)\n * @param swapFeePercentage The swap fee percentage applied to the taxable amount\n * @param pool The pool from which we're removing liquidity\n * @return bptAmountIn Amount of pool tokens to burn\n * @return swapFeeAmounts The amount of swap fees charged for each token\n */\n function computeRemoveLiquiditySingleTokenExactOut(\n uint256[] memory currentBalances,\n uint256 tokenOutIndex,\n uint256 exactAmountOut,\n uint256 totalSupply,\n uint256 swapFeePercentage,\n IBasePool pool\n ) internal view returns (uint256 bptAmountIn, uint256[] memory swapFeeAmounts) {\n // Determine the number of tokens in the pool.\n uint256 numTokens = currentBalances.length;\n\n // Create a new array to hold the updated balances.\n uint256[] memory newBalances = new uint256[](numTokens);\n\n // Copy currentBalances to newBalances.\n for (uint256 i = 0; i < numTokens; ++i) {\n newBalances[i] = currentBalances[i] - 1;\n }\n\n // Update the balance of tokenOutIndex with exactAmountOut.\n newBalances[tokenOutIndex] = newBalances[tokenOutIndex] - exactAmountOut;\n\n // Calculate the new invariant using the new balances (after the removal).\n // Calculate the new invariant ratio by dividing the new invariant by the old invariant.\n // Calculate the new proportional balance by multiplying the new invariant ratio by the current balance.\n // Calculate the taxable amount by subtracting the new balance from the equivalent proportional balance.\n // We round `currentInvariant` up as it affects the calculated `bptAmountIn` directly (see below).\n uint256 currentInvariant = pool.computeInvariant(currentBalances, Rounding.ROUND_UP);\n\n // We round invariant ratio up (see reason below).\n // This invariant ratio could be rounded up even more by rounding `currentInvariant` down. But since it only\n // affects the taxable amount and the fee calculation, whereas `currentInvariant` affects BPT in more directly,\n // we use `currentInvariant` rounded up here as well.\n uint256 invariantRatio = pool.computeInvariant(newBalances, Rounding.ROUND_UP).divUp(currentInvariant);\n\n ensureInvariantRatioAboveMinimumBound(pool, invariantRatio);\n\n // Taxable amount is proportional to invariant ratio; a larger taxable amount rounds in the Vault's favor.\n uint256 taxableAmount = invariantRatio.mulUp(currentBalances[tokenOutIndex]) - newBalances[tokenOutIndex];\n\n // Calculate the swap fee based on the taxable amount and the swap fee percentage.\n // Fee is proportional to taxable amount; larger fee rounds in the Vault's favor.\n uint256 fee = taxableAmount.divUp(swapFeePercentage.complement()) - taxableAmount;\n\n // Update new balances array with a fee.\n newBalances[tokenOutIndex] = newBalances[tokenOutIndex] - fee;\n\n // Calculate the new invariant with fees applied.\n // Larger fee means `invariantWithFeesApplied` goes lower.\n uint256 invariantWithFeesApplied = pool.computeInvariant(newBalances, Rounding.ROUND_DOWN);\n\n // Create swap fees amount array and set the single fee we charge.\n swapFeeAmounts = new uint256[](numTokens);\n swapFeeAmounts[tokenOutIndex] = fee;\n\n // Calculate the amount of BPT to burn. This is done by multiplying the total supply by the ratio of the\n // invariant delta to the current invariant.\n //\n // Calculating BPT amount in, so we round up. This is the most important result of this function, equivalent to:\n // `totalSupply * (1 - invariantWithFeesApplied / currentInvariant)`.\n // Then, to round `bptAmountIn` up we use `invariantWithFeesApplied` rounded down and `currentInvariant`\n // rounded up.\n //\n // Since `currentInvariant` is rounded up and `invariantWithFeesApplied` is rounded down, the difference\n // should always be positive. The checked math will revert if that is not the case.\n bptAmountIn = totalSupply.mulDivUp(currentInvariant - invariantWithFeesApplied, currentInvariant);\n }\n\n /**\n * @notice Computes the amount of a single token to withdraw for a given amount of BPT to burn.\n * @dev It computes the output token amount for an exact input of BPT, considering current balances,\n * total supply, and swap fees.\n *\n * @param currentBalances The current token balances in the pool\n * @param tokenOutIndex The index of the token to be withdrawn\n * @param exactBptAmountIn The exact amount of BPT the user wants to burn\n * @param totalSupply The current total supply of the pool tokens (BPT)\n * @param swapFeePercentage The swap fee percentage applied to the taxable amount\n * @param pool The pool from which we're removing liquidity\n * @return amountOutWithFee The amount of the output token the user receives, accounting for swap fees\n * @return swapFeeAmounts The total amount of swap fees charged\n */\n function computeRemoveLiquiditySingleTokenExactIn(\n uint256[] memory currentBalances,\n uint256 tokenOutIndex,\n uint256 exactBptAmountIn,\n uint256 totalSupply,\n uint256 swapFeePercentage,\n IBasePool pool\n ) internal view returns (uint256 amountOutWithFee, uint256[] memory swapFeeAmounts) {\n // Calculate new supply accounting for burning exactBptAmountIn.\n uint256 newSupply = totalSupply - exactBptAmountIn;\n uint256 invariantRatio = newSupply.divUp(totalSupply);\n ensureInvariantRatioAboveMinimumBound(pool, invariantRatio);\n\n // Calculate the new balance of the output token after the BPT burn.\n // \"divUp\" leads to a higher \"newBalance\", which in turn results in a lower \"amountOut\", but also a lower\n // \"taxableAmount\". Although the former leads to giving less tokens for the same amount of BPT burned,\n // the latter leads to charging less swap fees. In consequence, a conflict of interests arises regarding\n // the rounding of \"newBalance\"; we prioritize getting a lower \"amountOut\".\n uint256 newBalance = pool.computeBalance(currentBalances, tokenOutIndex, invariantRatio);\n\n // Compute the amount to be withdrawn from the pool.\n uint256 amountOut = currentBalances[tokenOutIndex] - newBalance;\n\n // Calculate the new balance proportionate to the amount of BPT burned.\n // We round up: higher `newBalanceBeforeTax` makes `taxableAmount` go up, which rounds in the Vault's favor.\n uint256 newBalanceBeforeTax = newSupply.mulDivUp(currentBalances[tokenOutIndex], totalSupply);\n\n // Compute the taxable amount: the difference between the new proportional and disproportional balances.\n uint256 taxableAmount = newBalanceBeforeTax - newBalance;\n\n // Calculate the swap fee on the taxable amount.\n uint256 fee = taxableAmount.mulUp(swapFeePercentage);\n\n // Create swap fees amount array and set the single fee we charge.\n swapFeeAmounts = new uint256[](currentBalances.length);\n swapFeeAmounts[tokenOutIndex] = fee;\n\n // Return the net amount after subtracting the fee.\n amountOutWithFee = amountOut - fee;\n }\n\n /**\n * @notice Validate the invariant ratio against the maximum bound.\n * @dev This is checked when we're adding liquidity, so the `invariantRatio` > 1.\n * @param pool The pool to which we're adding liquidity\n * @param invariantRatio The ratio of the new invariant (after an operation) to the old\n */\n function ensureInvariantRatioBelowMaximumBound(IBasePool pool, uint256 invariantRatio) internal view {\n uint256 maxInvariantRatio = pool.getMaximumInvariantRatio();\n if (invariantRatio > maxInvariantRatio) {\n revert InvariantRatioAboveMax(invariantRatio, maxInvariantRatio);\n }\n }\n\n /**\n * @notice Validate the invariant ratio against the maximum bound.\n * @dev This is checked when we're removing liquidity, so the `invariantRatio` < 1.\n * @param pool The pool from which we're removing liquidity\n * @param invariantRatio The ratio of the new invariant (after an operation) to the old\n */\n function ensureInvariantRatioAboveMinimumBound(IBasePool pool, uint256 invariantRatio) internal view {\n uint256 minInvariantRatio = pool.getMinimumInvariantRatio();\n if (invariantRatio < minInvariantRatio) {\n revert InvariantRatioBelowMin(invariantRatio, minInvariantRatio);\n }\n }\n}\n"},"@balancer-labs/v3-vault/contracts/BatchRouter.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { IPermit2 } from \"permit2/src/interfaces/IPermit2.sol\";\n\nimport { IBatchRouter } from \"@balancer-labs/v3-interfaces/contracts/vault/IBatchRouter.sol\";\nimport { IWETH } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { EVMCallModeHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol\";\nimport { CastingHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\";\nimport { InputHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\";\nimport {\n TransientEnumerableSet\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/TransientEnumerableSet.sol\";\nimport {\n TransientStorageHelpers\n} from \"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\";\n\nimport { BatchRouterCommon } from \"./BatchRouterCommon.sol\";\n\nstruct SwapStepLocals {\n bool isFirstStep;\n bool isLastStep;\n}\n\n/**\n * @notice Entrypoint for batch swaps, and batch swap queries.\n * @dev The external API functions unlock the Vault, which calls back into the corresponding hook functions.\n * These interpret the steps and paths in the input data, perform token accounting (in transient storage, to save gas),\n * settle with the Vault, and handle wrapping and unwrapping ETH.\n */\ncontract BatchRouter is IBatchRouter, BatchRouterCommon {\n using CastingHelpers for *;\n using TransientEnumerableSet for TransientEnumerableSet.AddressSet;\n using TransientStorageHelpers for *;\n using SafeERC20 for IERC20;\n using SafeCast for *;\n\n constructor(\n IVault vault,\n IWETH weth,\n IPermit2 permit2,\n string memory routerVersion\n ) BatchRouterCommon(vault, weth, permit2, routerVersion) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /***************************************************************************\n Swaps\n ***************************************************************************/\n\n /// @inheritdoc IBatchRouter\n function swapExactIn(\n SwapPathExactAmountIn[] memory paths,\n uint256 deadline,\n bool wethIsEth,\n bytes calldata userData\n )\n external\n payable\n saveSender(msg.sender)\n returns (uint256[] memory pathAmountsOut, address[] memory tokensOut, uint256[] memory amountsOut)\n {\n return\n abi.decode(\n _vault.unlock(\n abi.encodeCall(\n BatchRouter.swapExactInHook,\n SwapExactInHookParams({\n sender: msg.sender,\n paths: paths,\n deadline: deadline,\n wethIsEth: wethIsEth,\n userData: userData\n })\n )\n ),\n (uint256[], address[], uint256[])\n );\n }\n\n /// @inheritdoc IBatchRouter\n function swapExactOut(\n SwapPathExactAmountOut[] memory paths,\n uint256 deadline,\n bool wethIsEth,\n bytes calldata userData\n )\n external\n payable\n saveSender(msg.sender)\n returns (uint256[] memory pathAmountsIn, address[] memory tokensIn, uint256[] memory amountsIn)\n {\n return\n abi.decode(\n _vault.unlock(\n abi.encodeCall(\n BatchRouter.swapExactOutHook,\n SwapExactOutHookParams({\n sender: msg.sender,\n paths: paths,\n deadline: deadline,\n wethIsEth: wethIsEth,\n userData: userData\n })\n )\n ),\n (uint256[], address[], uint256[])\n );\n }\n\n function swapExactInHook(\n SwapExactInHookParams calldata params\n )\n external\n nonReentrant\n onlyVault\n returns (uint256[] memory pathAmountsOut, address[] memory tokensOut, uint256[] memory amountsOut)\n {\n (pathAmountsOut, tokensOut, amountsOut) = _swapExactInHook(params);\n\n _settlePaths(params.sender, params.wethIsEth);\n }\n\n function _swapExactInHook(\n SwapExactInHookParams calldata params\n ) internal returns (uint256[] memory pathAmountsOut, address[] memory tokensOut, uint256[] memory amountsOut) {\n // The deadline is timestamp-based: it should not be relied upon for sub-minute accuracy.\n // solhint-disable-next-line not-rely-on-time\n if (block.timestamp > params.deadline) {\n revert SwapDeadline();\n }\n\n pathAmountsOut = _computePathAmountsOut(params);\n\n // The hook writes current swap token and token amounts out.\n // We copy that information to memory to return it before it is deleted during settlement.\n tokensOut = _currentSwapTokensOut().values();\n amountsOut = new uint256[](tokensOut.length);\n for (uint256 i = 0; i < tokensOut.length; ++i) {\n amountsOut[i] =\n _currentSwapTokenOutAmounts().tGet(tokensOut[i]) +\n _settledTokenAmounts().tGet(tokensOut[i]);\n _settledTokenAmounts().tSet(tokensOut[i], 0);\n }\n }\n\n function _computePathAmountsOut(\n SwapExactInHookParams calldata params\n ) internal returns (uint256[] memory pathAmountsOut) {\n pathAmountsOut = new uint256[](params.paths.length);\n\n for (uint256 i = 0; i < params.paths.length; ++i) {\n SwapPathExactAmountIn memory path = params.paths[i];\n\n // These two variables shall be updated at the end of each step to be used as inputs of the next one.\n // The initial values are the given token and amount in for the current path.\n uint256 stepExactAmountIn = path.exactAmountIn;\n IERC20 stepTokenIn = path.tokenIn;\n\n if (path.steps[0].isBuffer && EVMCallModeHelpers.isStaticCall() == false) {\n // If first step is a buffer, take the token in advance. We need this to wrap/unwrap.\n _takeTokenIn(params.sender, stepTokenIn, stepExactAmountIn, params.wethIsEth);\n } else {\n // Paths may (or may not) share the same token in. To minimize token transfers, we store the addresses\n // in a set with unique addresses that can be iterated later on.\n // For example, if all paths share the same token in, the set will end up with only one entry.\n _currentSwapTokensIn().add(address(stepTokenIn));\n _currentSwapTokenInAmounts().tAdd(address(stepTokenIn), stepExactAmountIn);\n }\n\n for (uint256 j = 0; j < path.steps.length; ++j) {\n SwapStepLocals memory stepLocals;\n stepLocals.isLastStep = (j == path.steps.length - 1);\n stepLocals.isFirstStep = (j == 0);\n uint256 minAmountOut;\n\n // minAmountOut only applies to the last step.\n if (stepLocals.isLastStep) {\n minAmountOut = path.minAmountOut;\n } else {\n minAmountOut = 0;\n }\n\n SwapPathStep memory step = path.steps[j];\n\n if (step.isBuffer) {\n (, , uint256 amountOut) = _vault.erc4626BufferWrapOrUnwrap(\n BufferWrapOrUnwrapParams({\n kind: SwapKind.EXACT_IN,\n direction: step.pool == address(stepTokenIn)\n ? WrappingDirection.UNWRAP\n : WrappingDirection.WRAP,\n wrappedToken: IERC4626(step.pool),\n amountGivenRaw: stepExactAmountIn,\n limitRaw: minAmountOut\n })\n );\n\n if (stepLocals.isLastStep) {\n // The amount out for the last step of the path should be recorded for the return value, and the\n // amount for the token should be sent back to the sender later on.\n pathAmountsOut[i] = amountOut;\n _currentSwapTokensOut().add(address(step.tokenOut));\n _currentSwapTokenOutAmounts().tAdd(address(step.tokenOut), amountOut);\n } else {\n // Input for the next step is output of current step.\n stepExactAmountIn = amountOut;\n // The token in for the next step is the token out of the current step.\n stepTokenIn = step.tokenOut;\n }\n } else if (address(stepTokenIn) == step.pool) {\n // Token in is BPT: remove liquidity - Single token exact in\n\n // Remove liquidity is not transient when it comes to BPT, meaning the caller needs to have the\n // required amount when performing the operation. These tokens might be the output of a previous\n // step, in which case the user will have a BPT credit.\n\n if (stepLocals.isFirstStep) {\n if (stepExactAmountIn > 0 && params.sender != address(this)) {\n // If this is the first step, the sender must have the tokens. Therefore, we can transfer\n // them to the Router, which acts as an intermediary. If the sender is the Router, we just\n // skip this step (useful for queries).\n //\n // This saves one permit(1) approval for the BPT to the Router; if we burned tokens\n // directly from the sender we would need their approval.\n _permit2.transferFrom(\n params.sender,\n address(this),\n stepExactAmountIn.toUint160(),\n address(stepTokenIn)\n );\n }\n\n // BPT is burned instantly, so we don't need to send it back later.\n if (_currentSwapTokenInAmounts().tGet(address(stepTokenIn)) > 0) {\n _currentSwapTokenInAmounts().tSub(address(stepTokenIn), stepExactAmountIn);\n }\n } else {\n // If this is an intermediate step, we don't expect the sender to have BPT to burn.\n // Then, we flashloan tokens here (which should in practice just use existing credit).\n _vault.sendTo(IERC20(step.pool), address(this), stepExactAmountIn);\n }\n\n // minAmountOut cannot be 0 in this case, as that would send an array of 0s to the Vault, which\n // wouldn't know which token to use.\n (uint256[] memory amountsOut, uint256 tokenIndex) = _getSingleInputArrayAndTokenIndex(\n step.pool,\n step.tokenOut,\n minAmountOut == 0 ? 1 : minAmountOut\n );\n\n // Router is always an intermediary in this case. The Vault will burn tokens from the Router, so\n // Router is both owner and spender (which doesn't need approval).\n // Reusing `amountsOut` as input argument and function output to prevent stack too deep error.\n (, amountsOut, ) = _vault.removeLiquidity(\n RemoveLiquidityParams({\n pool: step.pool,\n from: address(this),\n maxBptAmountIn: stepExactAmountIn,\n minAmountsOut: amountsOut,\n kind: RemoveLiquidityKind.SINGLE_TOKEN_EXACT_IN,\n userData: params.userData\n })\n );\n\n if (stepLocals.isLastStep) {\n // The amount out for the last step of the path should be recorded for the return value, and the\n // amount for the token should be sent back to the sender later on.\n pathAmountsOut[i] = amountsOut[tokenIndex];\n _currentSwapTokensOut().add(address(step.tokenOut));\n _currentSwapTokenOutAmounts().tAdd(address(step.tokenOut), amountsOut[tokenIndex]);\n } else {\n // Input for the next step is output of current step.\n stepExactAmountIn = amountsOut[tokenIndex];\n // The token in for the next step is the token out of the current step.\n stepTokenIn = step.tokenOut;\n }\n } else if (address(step.tokenOut) == step.pool) {\n // Token out is BPT: add liquidity - Single token exact in (unbalanced).\n (uint256[] memory exactAmountsIn, ) = _getSingleInputArrayAndTokenIndex(\n step.pool,\n stepTokenIn,\n stepExactAmountIn\n );\n\n (, uint256 bptAmountOut, ) = _vault.addLiquidity(\n AddLiquidityParams({\n pool: step.pool,\n to: stepLocals.isLastStep ? params.sender : address(_vault),\n maxAmountsIn: exactAmountsIn,\n minBptAmountOut: minAmountOut,\n kind: AddLiquidityKind.UNBALANCED,\n userData: params.userData\n })\n );\n\n if (stepLocals.isLastStep) {\n // The amount out for the last step of the path should be recorded for the return value.\n // We do not need to register the amount out in _currentSwapTokenOutAmounts since the BPT\n // is minted directly to the sender, so this step can be considered settled at this point.\n pathAmountsOut[i] = bptAmountOut;\n _currentSwapTokensOut().add(address(step.tokenOut));\n _settledTokenAmounts().tAdd(address(step.tokenOut), bptAmountOut);\n } else {\n // Input for the next step is output of current step.\n stepExactAmountIn = bptAmountOut;\n // The token in for the next step is the token out of the current step.\n stepTokenIn = step.tokenOut;\n // If this is an intermediate step, BPT is minted to the Vault so we just get the credit.\n _vault.settle(IERC20(step.pool), bptAmountOut);\n }\n } else {\n // No BPT involved in the operation: regular swap exact in.\n (, , uint256 amountOut) = _vault.swap(\n VaultSwapParams({\n kind: SwapKind.EXACT_IN,\n pool: step.pool,\n tokenIn: stepTokenIn,\n tokenOut: step.tokenOut,\n amountGivenRaw: stepExactAmountIn,\n limitRaw: minAmountOut,\n userData: params.userData\n })\n );\n\n if (stepLocals.isLastStep) {\n // The amount out for the last step of the path should be recorded for the return value, and the\n // amount for the token should be sent back to the sender later on.\n pathAmountsOut[i] = amountOut;\n _currentSwapTokensOut().add(address(step.tokenOut));\n _currentSwapTokenOutAmounts().tAdd(address(step.tokenOut), amountOut);\n } else {\n // Input for the next step is output of current step.\n stepExactAmountIn = amountOut;\n // The token in for the next step is the token out of the current step.\n stepTokenIn = step.tokenOut;\n }\n }\n }\n }\n }\n\n function swapExactOutHook(\n SwapExactOutHookParams calldata params\n )\n external\n nonReentrant\n onlyVault\n returns (uint256[] memory pathAmountsIn, address[] memory tokensIn, uint256[] memory amountsIn)\n {\n (pathAmountsIn, tokensIn, amountsIn) = _swapExactOutHook(params);\n\n _settlePaths(params.sender, params.wethIsEth);\n }\n\n function _swapExactOutHook(\n SwapExactOutHookParams calldata params\n ) internal returns (uint256[] memory pathAmountsIn, address[] memory tokensIn, uint256[] memory amountsIn) {\n // The deadline is timestamp-based: it should not be relied upon for sub-minute accuracy.\n // solhint-disable-next-line not-rely-on-time\n if (block.timestamp > params.deadline) {\n revert SwapDeadline();\n }\n\n pathAmountsIn = _computePathAmountsIn(params);\n\n // The hook writes current swap token and token amounts in.\n // We copy that information to memory to return it before it is deleted during settlement.\n tokensIn = _currentSwapTokensIn().values(); // Copy transient storage to memory\n amountsIn = new uint256[](tokensIn.length);\n for (uint256 i = 0; i < tokensIn.length; ++i) {\n amountsIn[i] = _currentSwapTokenInAmounts().tGet(tokensIn[i]) + _settledTokenAmounts().tGet(tokensIn[i]);\n _settledTokenAmounts().tSet(tokensIn[i], 0);\n }\n }\n\n /**\n * @dev Executes every swap path in the given input parameters.\n * Computes inputs for the path, and aggregates them by token and amounts as well in transient storage.\n */\n function _computePathAmountsIn(\n SwapExactOutHookParams calldata params\n ) internal returns (uint256[] memory pathAmountsIn) {\n pathAmountsIn = new uint256[](params.paths.length);\n\n for (uint256 i = 0; i < params.paths.length; ++i) {\n SwapPathExactAmountOut memory path = params.paths[i];\n // This variable shall be updated at the end of each step to be used as input of the next one.\n // The first value corresponds to the given amount out for the current path.\n uint256 stepExactAmountOut = path.exactAmountOut;\n\n // Paths may (or may not) share the same token in. To minimize token transfers, we store the addresses in\n // a set with unique addresses that can be iterated later on.\n //\n // For example, if all paths share the same token in, the set will end up with only one entry.\n // Since the path is 'given out', the output of the operation specified by the last step in each path will\n // be added to calculate the amounts in for each token.\n _currentSwapTokensIn().add(address(path.tokenIn));\n\n // Backwards iteration: the exact amount out applies to the last step, so we cannot iterate from first to\n // last. The calculated input of step (j) is the exact amount out for step (j - 1).\n for (int256 j = int256(path.steps.length - 1); j >= 0; --j) {\n SwapPathStep memory step = path.steps[uint256(j)];\n SwapStepLocals memory stepLocals;\n stepLocals.isLastStep = (j == 0);\n stepLocals.isFirstStep = (uint256(j) == path.steps.length - 1);\n\n // These two variables are set at the beginning of the iteration and are used as inputs for\n // the operation described by the step.\n uint256 stepMaxAmountIn;\n IERC20 stepTokenIn;\n\n if (stepLocals.isFirstStep) {\n // The first step in the iteration is the last one in the given array of steps, and it\n // specifies the output token for the step as well as the exact amount out for that token.\n // Output amounts are stored to send them later on.\n _currentSwapTokensOut().add(address(step.tokenOut));\n _currentSwapTokenOutAmounts().tAdd(address(step.tokenOut), stepExactAmountOut);\n }\n\n if (stepLocals.isLastStep) {\n // In backwards order, the last step is the first one in the given path.\n // The given token in and max amount in apply for this step.\n stepMaxAmountIn = path.maxAmountIn;\n stepTokenIn = path.tokenIn;\n } else {\n // For every other intermediate step, no maximum input applies.\n // The input token for this step is the output token of the previous given step.\n // We use uint128 to prevent Vault's internal scaling from overflowing.\n stepMaxAmountIn = _MAX_AMOUNT;\n stepTokenIn = path.steps[uint256(j - 1)].tokenOut;\n }\n\n if (step.isBuffer) {\n if (stepLocals.isLastStep && EVMCallModeHelpers.isStaticCall() == false) {\n // The buffer will need this token to wrap/unwrap, so take it from the user in advance.\n _takeTokenIn(params.sender, path.tokenIn, path.maxAmountIn, params.wethIsEth);\n }\n\n (, uint256 amountIn, ) = _vault.erc4626BufferWrapOrUnwrap(\n BufferWrapOrUnwrapParams({\n kind: SwapKind.EXACT_OUT,\n direction: step.pool == address(stepTokenIn)\n ? WrappingDirection.UNWRAP\n : WrappingDirection.WRAP,\n wrappedToken: IERC4626(step.pool),\n amountGivenRaw: stepExactAmountOut,\n limitRaw: stepMaxAmountIn\n })\n );\n\n if (stepLocals.isLastStep) {\n pathAmountsIn[i] = amountIn;\n // Since the token was taken in advance, returns to the user what is left from the\n // wrap/unwrap operation.\n _currentSwapTokensOut().add(address(stepTokenIn));\n _currentSwapTokenOutAmounts().tAdd(address(stepTokenIn), path.maxAmountIn - amountIn);\n // `settledTokenAmounts` is used to return the `amountsIn` at the end of the operation, which\n // is only amountIn. The difference between maxAmountIn and amountIn will be paid during\n // settle.\n _settledTokenAmounts().tAdd(address(path.tokenIn), amountIn);\n } else {\n stepExactAmountOut = amountIn;\n }\n } else if (address(stepTokenIn) == step.pool) {\n // Token in is BPT: remove liquidity - Single token exact out\n\n // Remove liquidity is not transient when it comes to BPT, meaning the caller needs to have the\n // required amount when performing the operation. In this case, the BPT amount needed for the\n // operation is not known in advance, so we take a flashloan for all the available reserves.\n //\n // The last step is the one that defines the inputs for this path. The caller should have enough\n // BPT to burn already if that's the case, so we just skip this step if so.\n if (stepLocals.isLastStep == false) {\n stepMaxAmountIn = _vault.getReservesOf(stepTokenIn);\n _vault.sendTo(IERC20(step.pool), address(this), stepMaxAmountIn);\n } else if (params.sender != address(this)) {\n // The last step being executed is the first step in the swap path, meaning that it's the one\n // that defines the inputs of the path.\n //\n // In that case, the sender must have the tokens. Therefore, we can transfer them\n // to the Router, which acts as an intermediary. If the sender is the Router, we just skip this\n // step (useful for queries).\n _permit2.transferFrom(\n params.sender,\n address(this),\n stepMaxAmountIn.toUint160(),\n address(stepTokenIn)\n );\n }\n\n (uint256[] memory exactAmountsOut, ) = _getSingleInputArrayAndTokenIndex(\n step.pool,\n step.tokenOut,\n stepExactAmountOut\n );\n\n // Router is always an intermediary in this case. The Vault will burn tokens from the Router, so\n // Router is both owner and spender (which doesn't need approval).\n (uint256 bptAmountIn, , ) = _vault.removeLiquidity(\n RemoveLiquidityParams({\n pool: step.pool,\n from: address(this),\n maxBptAmountIn: stepMaxAmountIn,\n minAmountsOut: exactAmountsOut,\n kind: RemoveLiquidityKind.SINGLE_TOKEN_EXACT_OUT,\n userData: params.userData\n })\n );\n\n if (stepLocals.isLastStep) {\n // BPT is burned instantly, so we don't need to send it to the Vault during settlement.\n pathAmountsIn[i] = bptAmountIn;\n _settledTokenAmounts().tAdd(address(stepTokenIn), bptAmountIn);\n\n // Refund unused portion of BPT to the user.alias\n if (bptAmountIn < stepMaxAmountIn && params.sender != address(this)) {\n stepTokenIn.safeTransfer(address(params.sender), stepMaxAmountIn - bptAmountIn);\n }\n } else {\n // Output for the step (j - 1) is the input of step (j).\n stepExactAmountOut = bptAmountIn;\n // Refund unused portion of BPT flashloan to the Vault.\n if (bptAmountIn < stepMaxAmountIn) {\n uint256 refundAmount = stepMaxAmountIn - bptAmountIn;\n stepTokenIn.safeTransfer(address(_vault), refundAmount);\n _vault.settle(stepTokenIn, refundAmount);\n }\n }\n } else if (address(step.tokenOut) == step.pool) {\n // Token out is BPT: add liquidity - Single token exact out.\n (uint256[] memory stepAmountsIn, uint256 tokenIndex) = _getSingleInputArrayAndTokenIndex(\n step.pool,\n stepTokenIn,\n stepMaxAmountIn\n );\n\n // Reusing `amountsIn` as input argument and function output to prevent stack too deep error.\n (stepAmountsIn, , ) = _vault.addLiquidity(\n AddLiquidityParams({\n pool: step.pool,\n to: stepLocals.isFirstStep ? params.sender : address(_vault),\n maxAmountsIn: stepAmountsIn,\n minBptAmountOut: stepExactAmountOut,\n kind: AddLiquidityKind.SINGLE_TOKEN_EXACT_OUT,\n userData: params.userData\n })\n );\n\n if (stepLocals.isLastStep) {\n // The amount out for the last step of the path should be recorded for the return value.\n pathAmountsIn[i] = stepAmountsIn[tokenIndex];\n _currentSwapTokenInAmounts().tAdd(address(stepTokenIn), stepAmountsIn[tokenIndex]);\n } else {\n stepExactAmountOut = stepAmountsIn[tokenIndex];\n }\n\n // The first step executed determines the outputs for the path, since this is given out.\n if (stepLocals.isFirstStep) {\n // Instead of sending tokens back to the Vault, we can just discount it from whatever\n // the Vault owes the sender to make one less transfer.\n _currentSwapTokenOutAmounts().tSub(address(step.tokenOut), stepExactAmountOut);\n } else {\n // If it's not the first step, BPT is minted to the Vault so we just get the credit.\n _vault.settle(IERC20(step.pool), stepExactAmountOut);\n }\n } else {\n // No BPT involved in the operation: regular swap exact out.\n (, uint256 amountIn, ) = _vault.swap(\n VaultSwapParams({\n kind: SwapKind.EXACT_OUT,\n pool: step.pool,\n tokenIn: stepTokenIn,\n tokenOut: step.tokenOut,\n amountGivenRaw: stepExactAmountOut,\n limitRaw: stepMaxAmountIn,\n userData: params.userData\n })\n );\n\n if (stepLocals.isLastStep) {\n pathAmountsIn[i] = amountIn;\n _currentSwapTokenInAmounts().tAdd(address(stepTokenIn), amountIn);\n } else {\n stepExactAmountOut = amountIn;\n }\n }\n }\n }\n }\n\n /***************************************************************************\n Queries\n ***************************************************************************/\n\n /// @inheritdoc IBatchRouter\n function querySwapExactIn(\n SwapPathExactAmountIn[] memory paths,\n address sender,\n bytes calldata userData\n )\n external\n saveSender(sender)\n returns (uint256[] memory pathAmountsOut, address[] memory tokensOut, uint256[] memory amountsOut)\n {\n for (uint256 i = 0; i < paths.length; ++i) {\n paths[i].minAmountOut = 0;\n }\n\n return\n abi.decode(\n _vault.quote(\n abi.encodeCall(\n BatchRouter.querySwapExactInHook,\n SwapExactInHookParams({\n sender: address(this),\n paths: paths,\n deadline: type(uint256).max,\n wethIsEth: false,\n userData: userData\n })\n )\n ),\n (uint256[], address[], uint256[])\n );\n }\n\n /// @inheritdoc IBatchRouter\n function querySwapExactOut(\n SwapPathExactAmountOut[] memory paths,\n address sender,\n bytes calldata userData\n )\n external\n saveSender(sender)\n returns (uint256[] memory pathAmountsIn, address[] memory tokensIn, uint256[] memory amountsIn)\n {\n for (uint256 i = 0; i < paths.length; ++i) {\n paths[i].maxAmountIn = _MAX_AMOUNT;\n }\n\n return\n abi.decode(\n _vault.quote(\n abi.encodeCall(\n BatchRouter.querySwapExactOutHook,\n SwapExactOutHookParams({\n sender: address(this),\n paths: paths,\n deadline: type(uint256).max,\n wethIsEth: false,\n userData: userData\n })\n )\n ),\n (uint256[], address[], uint256[])\n );\n }\n\n function querySwapExactInHook(\n SwapExactInHookParams calldata params\n )\n external\n nonReentrant\n onlyVault\n returns (uint256[] memory pathAmountsOut, address[] memory tokensOut, uint256[] memory amountsOut)\n {\n (pathAmountsOut, tokensOut, amountsOut) = _swapExactInHook(params);\n }\n\n function querySwapExactOutHook(\n SwapExactOutHookParams calldata params\n )\n external\n nonReentrant\n onlyVault\n returns (uint256[] memory pathAmountsIn, address[] memory tokensIn, uint256[] memory amountsIn)\n {\n (pathAmountsIn, tokensIn, amountsIn) = _swapExactOutHook(params);\n }\n}\n"},"@balancer-labs/v3-vault/contracts/BatchRouterCommon.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { IPermit2 } from \"permit2/src/interfaces/IPermit2.sol\";\n\nimport { IWETH } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport {\n TransientEnumerableSet\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/TransientEnumerableSet.sol\";\nimport {\n TransientStorageHelpers,\n AddressToUintMappingSlot\n} from \"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\";\n\nimport { RouterCommon } from \"./RouterCommon.sol\";\n\n/// @notice Transient storage for Batch and Composite Liquidity Router operations.\nabstract contract BatchRouterCommon is RouterCommon {\n using TransientEnumerableSet for TransientEnumerableSet.AddressSet;\n using TransientStorageHelpers for *;\n\n // solhint-disable var-name-mixedcase\n\n // NOTE: If you use a constant, then it is simply replaced everywhere when this constant is used\n // by what is written after =. If you use immutable, the value is first calculated and\n // then replaced everywhere. That means that if a constant has executable variables,\n // they will be executed every time the constant is used.\n bytes32 private immutable _CURRENT_SWAP_TOKEN_IN_SLOT = _calculateBatchRouterStorageSlot(\"currentSwapTokensIn\");\n bytes32 private immutable _CURRENT_SWAP_TOKEN_OUT_SLOT = _calculateBatchRouterStorageSlot(\"currentSwapTokensOut\");\n bytes32 private immutable _CURRENT_SWAP_TOKEN_IN_AMOUNTS_SLOT =\n _calculateBatchRouterStorageSlot(\"currentSwapTokenInAmounts\");\n bytes32 private immutable _CURRENT_SWAP_TOKEN_OUT_AMOUNTS_SLOT =\n _calculateBatchRouterStorageSlot(\"currentSwapTokenOutAmounts\");\n bytes32 private immutable _SETTLED_TOKEN_AMOUNTS_SLOT = _calculateBatchRouterStorageSlot(\"settledTokenAmounts\");\n\n // solhint-enable var-name-mixedcase\n // solhint-disable no-inline-assembly\n\n constructor(\n IVault vault,\n IWETH weth,\n IPermit2 permit2,\n string memory routerVersion\n ) RouterCommon(vault, weth, permit2, routerVersion) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n // We use transient storage to track tokens and amounts flowing in and out of a batch swap.\n // Set of input tokens involved in a batch swap.\n function _currentSwapTokensIn() internal view returns (TransientEnumerableSet.AddressSet storage enumerableSet) {\n bytes32 slot = _CURRENT_SWAP_TOKEN_IN_SLOT;\n assembly (\"memory-safe\") {\n enumerableSet.slot := slot\n }\n }\n\n function _currentSwapTokensOut() internal view returns (TransientEnumerableSet.AddressSet storage enumerableSet) {\n bytes32 slot = _CURRENT_SWAP_TOKEN_OUT_SLOT;\n assembly (\"memory-safe\") {\n enumerableSet.slot := slot\n }\n }\n\n // token in -> amount: tracks token in amounts within a batch swap.\n function _currentSwapTokenInAmounts() internal view returns (AddressToUintMappingSlot slot) {\n return AddressToUintMappingSlot.wrap(_CURRENT_SWAP_TOKEN_IN_AMOUNTS_SLOT);\n }\n\n // token out -> amount: tracks token out amounts within a batch swap.\n function _currentSwapTokenOutAmounts() internal view returns (AddressToUintMappingSlot slot) {\n return AddressToUintMappingSlot.wrap(_CURRENT_SWAP_TOKEN_OUT_AMOUNTS_SLOT);\n }\n\n // token -> amount that is part of the current input / output amounts, but is settled preemptively.\n // This situation happens whenever there is BPT involved in the operation, which is minted and burned instantly.\n // Since those amounts are not tracked in the inputs / outputs to settle, we need to track them elsewhere\n // to return the correct total amounts in and out for each token involved in the operation.\n function _settledTokenAmounts() internal view returns (AddressToUintMappingSlot slot) {\n return AddressToUintMappingSlot.wrap(_SETTLED_TOKEN_AMOUNTS_SLOT);\n }\n\n function _calculateBatchRouterStorageSlot(string memory key) internal pure returns (bytes32) {\n return TransientStorageHelpers.calculateSlot(type(BatchRouterCommon).name, key);\n }\n\n /*******************************************************************************\n Settlement\n *******************************************************************************/\n\n /// @notice Settles batch and composite liquidity operations, after credits and debits are computed.\n function _settlePaths(address sender, bool wethIsEth) internal {\n // numTokensIn / Out may be 0 if the inputs and / or outputs are not transient.\n // For example, a swap starting with a 'remove liquidity' step will already have burned the input tokens,\n // in which case there is nothing to settle. Then, since we're iterating backwards below, we need to be able\n // to subtract 1 from these quantities without reverting, which is why we use signed integers.\n int256 numTokensIn = int256(_currentSwapTokensIn().length());\n int256 numTokensOut = int256(_currentSwapTokensOut().length());\n\n // Iterate backwards, from the last element to 0 (included).\n // Removing the last element from a set is cheaper than removing the first one.\n for (int256 i = int256(numTokensIn - 1); i >= 0; --i) {\n address tokenIn = _currentSwapTokensIn().unchecked_at(uint256(i));\n _takeTokenIn(sender, IERC20(tokenIn), _currentSwapTokenInAmounts().tGet(tokenIn), wethIsEth);\n // Erases delta, in case more than one batch router operation is called in the same transaction.\n _currentSwapTokenInAmounts().tSet(tokenIn, 0);\n _currentSwapTokensIn().remove(tokenIn);\n }\n\n for (int256 i = int256(numTokensOut - 1); i >= 0; --i) {\n address tokenOut = _currentSwapTokensOut().unchecked_at(uint256(i));\n _sendTokenOut(sender, IERC20(tokenOut), _currentSwapTokenOutAmounts().tGet(tokenOut), wethIsEth);\n // Erases delta, in case more than one batch router operation is called in the same transaction.\n _currentSwapTokenOutAmounts().tSet(tokenOut, 0);\n _currentSwapTokensOut().remove(tokenOut);\n }\n\n // Return the rest of ETH to sender.\n _returnEth(sender);\n }\n}\n"},"@balancer-labs/v3-vault/contracts/BufferRouter.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\nimport { IPermit2 } from \"permit2/src/interfaces/IPermit2.sol\";\n\nimport { IBufferRouter } from \"@balancer-labs/v3-interfaces/contracts/vault/IBufferRouter.sol\";\nimport { IWETH } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol\";\nimport { IVaultAdmin } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { RouterCommon } from \"./RouterCommon.sol\";\n\n/**\n * @notice Entrypoint for swaps, liquidity operations, and corresponding queries.\n * @dev The external API functions unlock the Vault, which calls back into the corresponding hook functions.\n * These interact with the Vault, transfer tokens, settle accounting, and handle wrapping and unwrapping ETH.\n */\ncontract BufferRouter is IBufferRouter, RouterCommon {\n using Address for address;\n\n constructor(\n IVault vault,\n IWETH weth,\n IPermit2 permit2,\n string memory routerVersion\n ) RouterCommon(vault, weth, permit2, routerVersion) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /// @inheritdoc IBufferRouter\n function initializeBuffer(\n IERC4626 wrappedToken,\n uint256 exactAmountUnderlyingIn,\n uint256 exactAmountWrappedIn,\n uint256 minIssuedShares\n ) external returns (uint256 issuedShares) {\n return\n abi.decode(\n _vault.unlock(\n abi.encodeCall(\n BufferRouter.initializeBufferHook,\n (\n wrappedToken,\n exactAmountUnderlyingIn,\n exactAmountWrappedIn,\n minIssuedShares,\n msg.sender // sharesOwner\n )\n )\n ),\n (uint256)\n );\n }\n\n /**\n * @notice Hook for initializing a vault buffer.\n * @dev Can only be called by the Vault. Buffers must be initialized before use.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param exactAmountUnderlyingIn Amount of underlying tokens that will be deposited into the buffer\n * @param exactAmountWrappedIn Amount of wrapped tokens that will be deposited into the buffer\n * @param minIssuedShares Minimum amount of shares to receive, in underlying token native decimals\n * @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to\n * remove liquidity from the buffer\n * @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n * (This is the BPT of an internal ERC4626 buffer)\n */\n function initializeBufferHook(\n IERC4626 wrappedToken,\n uint256 exactAmountUnderlyingIn,\n uint256 exactAmountWrappedIn,\n uint256 minIssuedShares,\n address sharesOwner\n ) external nonReentrant onlyVault returns (uint256 issuedShares) {\n issuedShares = _vault.initializeBuffer(\n wrappedToken,\n exactAmountUnderlyingIn,\n exactAmountWrappedIn,\n minIssuedShares,\n sharesOwner\n );\n\n address asset = _vault.getERC4626BufferAsset(wrappedToken);\n _takeTokenIn(sharesOwner, IERC20(asset), exactAmountUnderlyingIn, false);\n _takeTokenIn(sharesOwner, IERC20(address(wrappedToken)), exactAmountWrappedIn, false);\n }\n\n /// @inheritdoc IBufferRouter\n function addLiquidityToBuffer(\n IERC4626 wrappedToken,\n uint256 maxAmountUnderlyingIn,\n uint256 maxAmountWrappedIn,\n uint256 exactSharesToIssue\n ) external returns (uint256 amountUnderlyingIn, uint256 amountWrappedIn) {\n return\n abi.decode(\n _vault.unlock(\n abi.encodeCall(\n BufferRouter.addLiquidityToBufferHook,\n (\n wrappedToken,\n maxAmountUnderlyingIn,\n maxAmountWrappedIn,\n exactSharesToIssue,\n msg.sender // sharesOwner\n )\n )\n ),\n (uint256, uint256)\n );\n }\n\n /**\n * @notice Hook for adding liquidity to vault buffers. The Vault will enforce that the buffer is initialized.\n * @dev Can only be called by the Vault.\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param maxAmountUnderlyingIn Maximum amount of underlying tokens to add to the buffer. It is expressed in\n * underlying token native decimals\n * @param maxAmountWrappedIn Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n * token native decimals\n * @param exactSharesToIssue The value in underlying tokens that `sharesOwner` wants to add to the buffer,\n * in underlying token decimals\n * @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to\n * remove liquidity from the buffer\n * @return amountUnderlyingIn Amount of underlying tokens deposited into the buffer\n * @return amountWrappedIn Amount of wrapped tokens deposited into the buffer\n */\n function addLiquidityToBufferHook(\n IERC4626 wrappedToken,\n uint256 maxAmountUnderlyingIn,\n uint256 maxAmountWrappedIn,\n uint256 exactSharesToIssue,\n address sharesOwner\n ) external nonReentrant onlyVault returns (uint256 amountUnderlyingIn, uint256 amountWrappedIn) {\n (amountUnderlyingIn, amountWrappedIn) = _vault.addLiquidityToBuffer(\n wrappedToken,\n maxAmountUnderlyingIn,\n maxAmountWrappedIn,\n exactSharesToIssue,\n sharesOwner\n );\n\n address asset = _vault.getERC4626BufferAsset(wrappedToken);\n _takeTokenIn(sharesOwner, IERC20(asset), amountUnderlyingIn, false);\n _takeTokenIn(sharesOwner, IERC20(address(wrappedToken)), amountWrappedIn, false);\n }\n\n /// @inheritdoc IBufferRouter\n function queryInitializeBuffer(\n IERC4626 wrappedToken,\n uint256 exactAmountUnderlyingIn,\n uint256 exactAmountWrappedIn\n ) external returns (uint256 issuedShares) {\n return\n abi.decode(\n _vault.quote(\n abi.encodeCall(\n BufferRouter.queryInitializeBufferHook,\n (wrappedToken, exactAmountUnderlyingIn, exactAmountWrappedIn)\n )\n ),\n (uint256)\n );\n }\n\n function queryInitializeBufferHook(\n IERC4626 wrappedToken,\n uint256 exactAmountUnderlyingIn,\n uint256 exactAmountWrappedIn\n ) external nonReentrant onlyVault returns (uint256 issuedShares) {\n issuedShares = _vault.initializeBuffer(\n wrappedToken,\n exactAmountUnderlyingIn,\n exactAmountWrappedIn,\n 0,\n address(this)\n );\n }\n\n /// @inheritdoc IBufferRouter\n function queryAddLiquidityToBuffer(\n IERC4626 wrappedToken,\n uint256 exactSharesToIssue\n ) external returns (uint256 amountUnderlyingIn, uint256 amountWrappedIn) {\n return\n abi.decode(\n _vault.quote(\n abi.encodeCall(BufferRouter.queryAddLiquidityToBufferHook, (wrappedToken, exactSharesToIssue))\n ),\n (uint256, uint256)\n );\n }\n\n function queryAddLiquidityToBufferHook(\n IERC4626 wrappedToken,\n uint256 exactSharesToIssue\n ) external nonReentrant onlyVault returns (uint256 amountUnderlyingIn, uint256 amountWrappedIn) {\n (amountUnderlyingIn, amountWrappedIn) = _vault.addLiquidityToBuffer(\n wrappedToken,\n type(uint128).max,\n type(uint128).max,\n exactSharesToIssue,\n address(this)\n );\n }\n\n /// @inheritdoc IBufferRouter\n function queryRemoveLiquidityFromBuffer(\n IERC4626 wrappedToken,\n uint256 exactSharesToRemove\n ) external returns (uint256 removedUnderlyingBalanceOut, uint256 removedWrappedBalanceOut) {\n return\n abi.decode(\n _vault.quote(\n abi.encodeCall(BufferRouter.queryRemoveLiquidityFromBufferHook, (wrappedToken, exactSharesToRemove))\n ),\n (uint256, uint256)\n );\n }\n\n function queryRemoveLiquidityFromBufferHook(\n IERC4626 wrappedToken,\n uint256 exactSharesToRemove\n ) external nonReentrant onlyVault returns (uint256 removedUnderlyingBalanceOut, uint256 removedWrappedBalanceOut) {\n return _vault.removeLiquidityFromBuffer(wrappedToken, exactSharesToRemove, 0, 0);\n }\n}\n"},"@balancer-labs/v3-vault/contracts/lib/HooksConfigLib.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IHooks } from \"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\";\nimport \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { WordCodec } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\";\n\nimport { PoolConfigConst } from \"./PoolConfigConst.sol\";\n\n/**\n * @notice Helper functions to read and write the packed hook configuration flags stored in `_poolConfigBits`.\n * @dev This library has two additional functions. `toHooksConfig` constructs a `HooksConfig` structure from the\n * PoolConfig and the hooks contract address. Also, there are `call` functions that forward the arguments\n * to the corresponding functions in the hook contract, then validate and return the results.\n *\n * Note that the entire configuration of each pool is stored in the `_poolConfigBits` mapping (one slot per pool).\n * This includes the data in the `PoolConfig` struct, plus the data in the `HookFlags` struct. The layout (i.e.,\n * offsets for each data field) is specified in `PoolConfigConst`.\n *\n * There are two libraries for interpreting these data. This one parses fields related to hooks, and also\n * contains helpers for the struct building and hooks contract forwarding functions described above. `PoolConfigLib`\n * contains helpers related to the non-hook-related flags, along with aggregate fee percentages and other data\n * associated with pools.\n *\n * The `PoolData` struct contains the raw bitmap with the entire pool state (`PoolConfigBits`), plus the token\n * configuration, scaling factors, and dynamic information such as current balances and rates.\n *\n * The hooks contract addresses themselves are stored in a separate `_hooksContracts` mapping.\n */\nlibrary HooksConfigLib {\n using WordCodec for bytes32;\n using HooksConfigLib for PoolConfigBits;\n\n function enableHookAdjustedAmounts(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.ENABLE_HOOK_ADJUSTED_AMOUNTS_OFFSET);\n }\n\n function setHookAdjustedAmounts(PoolConfigBits config, bool value) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(value, PoolConfigConst.ENABLE_HOOK_ADJUSTED_AMOUNTS_OFFSET)\n );\n }\n\n function shouldCallBeforeInitialize(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.BEFORE_INITIALIZE_OFFSET);\n }\n\n function setShouldCallBeforeInitialize(PoolConfigBits config, bool value) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(value, PoolConfigConst.BEFORE_INITIALIZE_OFFSET)\n );\n }\n\n function shouldCallAfterInitialize(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.AFTER_INITIALIZE_OFFSET);\n }\n\n function setShouldCallAfterInitialize(PoolConfigBits config, bool value) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(value, PoolConfigConst.AFTER_INITIALIZE_OFFSET)\n );\n }\n\n function shouldCallComputeDynamicSwapFee(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.DYNAMIC_SWAP_FEE_OFFSET);\n }\n\n function setShouldCallComputeDynamicSwapFee(\n PoolConfigBits config,\n bool value\n ) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(value, PoolConfigConst.DYNAMIC_SWAP_FEE_OFFSET)\n );\n }\n\n function shouldCallBeforeSwap(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.BEFORE_SWAP_OFFSET);\n }\n\n function setShouldCallBeforeSwap(PoolConfigBits config, bool value) internal pure returns (PoolConfigBits) {\n return PoolConfigBits.wrap(PoolConfigBits.unwrap(config).insertBool(value, PoolConfigConst.BEFORE_SWAP_OFFSET));\n }\n\n function shouldCallAfterSwap(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.AFTER_SWAP_OFFSET);\n }\n\n function setShouldCallAfterSwap(PoolConfigBits config, bool value) internal pure returns (PoolConfigBits) {\n return PoolConfigBits.wrap(PoolConfigBits.unwrap(config).insertBool(value, PoolConfigConst.AFTER_SWAP_OFFSET));\n }\n\n function shouldCallBeforeAddLiquidity(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.BEFORE_ADD_LIQUIDITY_OFFSET);\n }\n\n function setShouldCallBeforeAddLiquidity(PoolConfigBits config, bool value) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(value, PoolConfigConst.BEFORE_ADD_LIQUIDITY_OFFSET)\n );\n }\n\n function shouldCallAfterAddLiquidity(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.AFTER_ADD_LIQUIDITY_OFFSET);\n }\n\n function setShouldCallAfterAddLiquidity(PoolConfigBits config, bool value) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(value, PoolConfigConst.AFTER_ADD_LIQUIDITY_OFFSET)\n );\n }\n\n function shouldCallBeforeRemoveLiquidity(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.BEFORE_REMOVE_LIQUIDITY_OFFSET);\n }\n\n function setShouldCallBeforeRemoveLiquidity(\n PoolConfigBits config,\n bool value\n ) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(value, PoolConfigConst.BEFORE_REMOVE_LIQUIDITY_OFFSET)\n );\n }\n\n function shouldCallAfterRemoveLiquidity(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.AFTER_REMOVE_LIQUIDITY_OFFSET);\n }\n\n function setShouldCallAfterRemoveLiquidity(\n PoolConfigBits config,\n bool value\n ) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(value, PoolConfigConst.AFTER_REMOVE_LIQUIDITY_OFFSET)\n );\n }\n\n function toHooksConfig(PoolConfigBits config, IHooks hooksContract) internal pure returns (HooksConfig memory) {\n return\n HooksConfig({\n enableHookAdjustedAmounts: config.enableHookAdjustedAmounts(),\n shouldCallBeforeInitialize: config.shouldCallBeforeInitialize(),\n shouldCallAfterInitialize: config.shouldCallAfterInitialize(),\n shouldCallBeforeAddLiquidity: config.shouldCallBeforeAddLiquidity(),\n shouldCallAfterAddLiquidity: config.shouldCallAfterAddLiquidity(),\n shouldCallBeforeRemoveLiquidity: config.shouldCallBeforeRemoveLiquidity(),\n shouldCallAfterRemoveLiquidity: config.shouldCallAfterRemoveLiquidity(),\n shouldCallComputeDynamicSwapFee: config.shouldCallComputeDynamicSwapFee(),\n shouldCallBeforeSwap: config.shouldCallBeforeSwap(),\n shouldCallAfterSwap: config.shouldCallAfterSwap(),\n hooksContract: address(hooksContract)\n });\n }\n\n /**\n * @dev Call the `onComputeDynamicSwapFeePercentage` hook and return the result. Reverts on failure.\n * @param swapParams The swap parameters used to calculate the fee\n * @param pool Pool address\n * @param staticSwapFeePercentage Value of the static swap fee, for reference\n * @param hooksContract Storage slot with the address of the hooks contract\n * @return swapFeePercentage The calculated swap fee percentage\n */\n function callComputeDynamicSwapFeeHook(\n PoolSwapParams memory swapParams,\n address pool,\n uint256 staticSwapFeePercentage,\n IHooks hooksContract\n ) internal view returns (uint256) {\n (bool success, uint256 swapFeePercentage) = hooksContract.onComputeDynamicSwapFeePercentage(\n swapParams,\n pool,\n staticSwapFeePercentage\n );\n\n if (success == false) {\n revert IVaultErrors.DynamicSwapFeeHookFailed();\n }\n\n // A 100% fee is not supported. In the ExactOut case, the Vault divides by the complement of the swap fee.\n // The minimum precision constraint provides an additional buffer.\n if (swapFeePercentage > MAX_FEE_PERCENTAGE) {\n revert IVaultErrors.PercentageAboveMax();\n }\n\n return swapFeePercentage;\n }\n\n /**\n * @dev Call the `onBeforeSwap` hook. Reverts on failure.\n * @param swapParams The swap parameters used in the hook\n * @param pool Pool address\n * @param hooksContract Storage slot with the address of the hooks contract\n */\n function callBeforeSwapHook(PoolSwapParams memory swapParams, address pool, IHooks hooksContract) internal {\n if (hooksContract.onBeforeSwap(swapParams, pool) == false) {\n // Hook contract implements onBeforeSwap, but it has failed, so reverts the transaction.\n revert IVaultErrors.BeforeSwapHookFailed();\n }\n }\n\n /**\n * @dev Call the `onAfterSwap` hook, then validate and return the result. Reverts on failure, or if the limits\n * are violated. If the hook contract did not enable hook-adjusted amounts, it will ignore the hook results and\n * return the original `amountCalculatedRaw`.\n *\n * @param config The encoded pool configuration\n * @param amountCalculatedScaled18 Token amount calculated by the swap\n * @param amountCalculatedRaw Token amount calculated by the swap\n * @param router Router address\n * @param vaultSwapParams The swap parameters\n * @param state Temporary state used in swap operations\n * @param poolData Struct containing balance and token information of the pool\n * @param hooksContract Storage slot with the address of the hooks contract\n * @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook\n */\n function callAfterSwapHook(\n PoolConfigBits config,\n uint256 amountCalculatedScaled18,\n uint256 amountCalculatedRaw,\n address router,\n VaultSwapParams memory vaultSwapParams,\n SwapState memory state,\n PoolData memory poolData,\n IHooks hooksContract\n ) internal returns (uint256) {\n // Adjust balances for the AfterSwap hook.\n (uint256 amountInScaled18, uint256 amountOutScaled18) = vaultSwapParams.kind == SwapKind.EXACT_IN\n ? (state.amountGivenScaled18, amountCalculatedScaled18)\n : (amountCalculatedScaled18, state.amountGivenScaled18);\n\n (bool success, uint256 hookAdjustedAmountCalculatedRaw) = hooksContract.onAfterSwap(\n AfterSwapParams({\n kind: vaultSwapParams.kind,\n tokenIn: vaultSwapParams.tokenIn,\n tokenOut: vaultSwapParams.tokenOut,\n amountInScaled18: amountInScaled18,\n amountOutScaled18: amountOutScaled18,\n tokenInBalanceScaled18: poolData.balancesLiveScaled18[state.indexIn],\n tokenOutBalanceScaled18: poolData.balancesLiveScaled18[state.indexOut],\n amountCalculatedScaled18: amountCalculatedScaled18,\n amountCalculatedRaw: amountCalculatedRaw,\n router: router,\n pool: vaultSwapParams.pool,\n userData: vaultSwapParams.userData\n })\n );\n\n if (success == false) {\n // Hook contract implements onAfterSwap, but it has failed, so reverts the transaction.\n revert IVaultErrors.AfterSwapHookFailed();\n }\n\n // If hook adjusted amounts is not enabled, ignore amounts returned by the hook\n if (config.enableHookAdjustedAmounts() == false) {\n return amountCalculatedRaw;\n }\n\n if (\n (vaultSwapParams.kind == SwapKind.EXACT_IN && hookAdjustedAmountCalculatedRaw < vaultSwapParams.limitRaw) ||\n (vaultSwapParams.kind == SwapKind.EXACT_OUT && hookAdjustedAmountCalculatedRaw > vaultSwapParams.limitRaw)\n ) {\n revert IVaultErrors.HookAdjustedSwapLimit(hookAdjustedAmountCalculatedRaw, vaultSwapParams.limitRaw);\n }\n\n return hookAdjustedAmountCalculatedRaw;\n }\n\n /**\n * @dev Call the `onBeforeAddLiquidity` hook. Reverts on failure.\n * @param router Router address\n * @param maxAmountsInScaled18 An array with maximum amounts for each input token of the add liquidity operation\n * @param params The add liquidity parameters\n * @param poolData Struct containing balance and token information of the pool\n * @param hooksContract Storage slot with the address of the hooks contract\n */\n function callBeforeAddLiquidityHook(\n address router,\n uint256[] memory maxAmountsInScaled18,\n AddLiquidityParams memory params,\n PoolData memory poolData,\n IHooks hooksContract\n ) internal {\n if (\n hooksContract.onBeforeAddLiquidity(\n router,\n params.pool,\n params.kind,\n maxAmountsInScaled18,\n params.minBptAmountOut,\n poolData.balancesLiveScaled18,\n params.userData\n ) == false\n ) {\n revert IVaultErrors.BeforeAddLiquidityHookFailed();\n }\n }\n\n /**\n * @dev Call the `onAfterAddLiquidity` hook, then validate and return the result. Reverts on failure, or if\n * the limits are violated. If the contract did not enable hook-adjusted amounts, it will ignore the hook\n * results and return the original `amountsInRaw`.\n *\n * @param config The encoded pool configuration\n * @param router Router address\n * @param amountsInScaled18 An array with amounts for each input token of the add liquidity operation\n * @param amountsInRaw An array with amounts for each input token of the add liquidity operation\n * @param bptAmountOut The BPT amount a user will receive after add liquidity operation succeeds\n * @param params The add liquidity parameters\n * @param poolData Struct containing balance and token information of the pool\n * @param hooksContract Storage slot with the address of the hooks contract\n * @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook\n */\n function callAfterAddLiquidityHook(\n PoolConfigBits config,\n address router,\n uint256[] memory amountsInScaled18,\n uint256[] memory amountsInRaw,\n uint256 bptAmountOut,\n AddLiquidityParams memory params,\n PoolData memory poolData,\n IHooks hooksContract\n ) internal returns (uint256[] memory) {\n (bool success, uint256[] memory hookAdjustedAmountsInRaw) = hooksContract.onAfterAddLiquidity(\n router,\n params.pool,\n params.kind,\n amountsInScaled18,\n amountsInRaw,\n bptAmountOut,\n poolData.balancesLiveScaled18,\n params.userData\n );\n\n if (success == false || hookAdjustedAmountsInRaw.length != amountsInRaw.length) {\n revert IVaultErrors.AfterAddLiquidityHookFailed();\n }\n\n // If hook adjusted amounts is not enabled, ignore amounts returned by the hook\n if (config.enableHookAdjustedAmounts() == false) {\n return amountsInRaw;\n }\n\n for (uint256 i = 0; i < hookAdjustedAmountsInRaw.length; i++) {\n if (hookAdjustedAmountsInRaw[i] > params.maxAmountsIn[i]) {\n revert IVaultErrors.HookAdjustedAmountInAboveMax(\n poolData.tokens[i],\n hookAdjustedAmountsInRaw[i],\n params.maxAmountsIn[i]\n );\n }\n }\n\n return hookAdjustedAmountsInRaw;\n }\n\n /**\n * @dev Call the `onBeforeRemoveLiquidity` hook. Reverts on failure.\n * @param minAmountsOutScaled18 Minimum amounts for each output token of the remove liquidity operation\n * @param router Router address\n * @param params The remove liquidity parameters\n * @param poolData Struct containing balance and token information of the pool\n * @param hooksContract Storage slot with the address of the hooks contract\n */\n function callBeforeRemoveLiquidityHook(\n uint256[] memory minAmountsOutScaled18,\n address router,\n RemoveLiquidityParams memory params,\n PoolData memory poolData,\n IHooks hooksContract\n ) internal {\n if (\n hooksContract.onBeforeRemoveLiquidity(\n router,\n params.pool,\n params.kind,\n params.maxBptAmountIn,\n minAmountsOutScaled18,\n poolData.balancesLiveScaled18,\n params.userData\n ) == false\n ) {\n revert IVaultErrors.BeforeRemoveLiquidityHookFailed();\n }\n }\n\n /**\n * @dev Call the `onAfterRemoveLiquidity` hook, then validate and return the result. Reverts on failure, or if\n * the limits are violated. If the contract did not enable hook-adjusted amounts, it will ignore the hook\n * results and return the original `amountsOutRaw`.\n *\n * @param config The encoded pool configuration\n * @param router Router address\n * @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n * @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n * @param bptAmountIn The BPT amount a user will need burn to remove the liquidity of the pool\n * @param params The remove liquidity parameters\n * @param poolData Struct containing balance and token information of the pool\n * @param hooksContract Storage slot with the address of the hooks contract\n * @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook\n */\n function callAfterRemoveLiquidityHook(\n PoolConfigBits config,\n address router,\n uint256[] memory amountsOutScaled18,\n uint256[] memory amountsOutRaw,\n uint256 bptAmountIn,\n RemoveLiquidityParams memory params,\n PoolData memory poolData,\n IHooks hooksContract\n ) internal returns (uint256[] memory) {\n (bool success, uint256[] memory hookAdjustedAmountsOutRaw) = hooksContract.onAfterRemoveLiquidity(\n router,\n params.pool,\n params.kind,\n bptAmountIn,\n amountsOutScaled18,\n amountsOutRaw,\n poolData.balancesLiveScaled18,\n params.userData\n );\n\n if (success == false || hookAdjustedAmountsOutRaw.length != amountsOutRaw.length) {\n revert IVaultErrors.AfterRemoveLiquidityHookFailed();\n }\n\n // If hook adjusted amounts is not enabled, ignore amounts returned by the hook\n if (config.enableHookAdjustedAmounts() == false) {\n return amountsOutRaw;\n }\n\n for (uint256 i = 0; i < hookAdjustedAmountsOutRaw.length; i++) {\n if (hookAdjustedAmountsOutRaw[i] < params.minAmountsOut[i]) {\n revert IVaultErrors.HookAdjustedAmountOutBelowMin(\n poolData.tokens[i],\n hookAdjustedAmountsOutRaw[i],\n params.minAmountsOut[i]\n );\n }\n }\n\n return hookAdjustedAmountsOutRaw;\n }\n\n /**\n * @dev Call the `onBeforeInitialize` hook. Reverts on failure.\n * @param exactAmountsInScaled18 An array with the initial liquidity of the pool\n * @param userData Additional (optional) data required for adding initial liquidity\n * @param hooksContract Storage slot with the address of the hooks contract\n */\n function callBeforeInitializeHook(\n uint256[] memory exactAmountsInScaled18,\n bytes memory userData,\n IHooks hooksContract\n ) internal {\n if (hooksContract.onBeforeInitialize(exactAmountsInScaled18, userData) == false) {\n revert IVaultErrors.BeforeInitializeHookFailed();\n }\n }\n\n /**\n * @dev Call the `onAfterInitialize` hook. Reverts on failure.\n * @param exactAmountsInScaled18 An array with the initial liquidity of the pool\n * @param bptAmountOut The BPT amount a user will receive after initialization operation succeeds\n * @param userData Additional (optional) data required for adding initial liquidity\n * @param hooksContract Storage slot with the address of the hooks contract\n */\n function callAfterInitializeHook(\n uint256[] memory exactAmountsInScaled18,\n uint256 bptAmountOut,\n bytes memory userData,\n IHooks hooksContract\n ) internal {\n if (hooksContract.onAfterInitialize(exactAmountsInScaled18, bptAmountOut, userData) == false) {\n revert IVaultErrors.AfterInitializeHookFailed();\n }\n }\n}\n"},"@balancer-labs/v3-vault/contracts/lib/PoolConfigConst.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { FEE_BITLENGTH } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\n/**\n * @notice Helper functions to read and write the packed configuration flags stored in `_poolConfigBits`.\n * @dev Note that the entire configuration of each pool is stored in the `_poolConfigBits` mapping (one slot per pool).\n * This includes the data in the `PoolConfig` struct, plus the data in the `HookFlags` struct. The layout (i.e.,\n * offsets for each data field) is specified here.\n *\n * There are two libraries for interpreting these data. `HooksConfigLib` parses fields related to hooks, while\n * `PoolConfigLib` contains helpers related to the non-hook-related flags, along with aggregate fee percentages\n * and other data associated with pools.\n */\nlibrary PoolConfigConst {\n // Bit offsets for main pool config settings.\n uint8 public constant POOL_REGISTERED_OFFSET = 0;\n uint8 public constant POOL_INITIALIZED_OFFSET = POOL_REGISTERED_OFFSET + 1;\n uint8 public constant POOL_PAUSED_OFFSET = POOL_INITIALIZED_OFFSET + 1;\n uint8 public constant POOL_RECOVERY_MODE_OFFSET = POOL_PAUSED_OFFSET + 1;\n\n // Bit offsets for liquidity operations.\n uint8 public constant UNBALANCED_LIQUIDITY_OFFSET = POOL_RECOVERY_MODE_OFFSET + 1;\n uint8 public constant ADD_LIQUIDITY_CUSTOM_OFFSET = UNBALANCED_LIQUIDITY_OFFSET + 1;\n uint8 public constant REMOVE_LIQUIDITY_CUSTOM_OFFSET = ADD_LIQUIDITY_CUSTOM_OFFSET + 1;\n uint8 public constant DONATION_OFFSET = REMOVE_LIQUIDITY_CUSTOM_OFFSET + 1;\n\n // Bit offsets for hooks config.\n uint8 public constant BEFORE_INITIALIZE_OFFSET = DONATION_OFFSET + 1;\n uint8 public constant ENABLE_HOOK_ADJUSTED_AMOUNTS_OFFSET = BEFORE_INITIALIZE_OFFSET + 1;\n uint8 public constant AFTER_INITIALIZE_OFFSET = ENABLE_HOOK_ADJUSTED_AMOUNTS_OFFSET + 1;\n uint8 public constant DYNAMIC_SWAP_FEE_OFFSET = AFTER_INITIALIZE_OFFSET + 1;\n uint8 public constant BEFORE_SWAP_OFFSET = DYNAMIC_SWAP_FEE_OFFSET + 1;\n uint8 public constant AFTER_SWAP_OFFSET = BEFORE_SWAP_OFFSET + 1;\n uint8 public constant BEFORE_ADD_LIQUIDITY_OFFSET = AFTER_SWAP_OFFSET + 1;\n uint8 public constant AFTER_ADD_LIQUIDITY_OFFSET = BEFORE_ADD_LIQUIDITY_OFFSET + 1;\n uint8 public constant BEFORE_REMOVE_LIQUIDITY_OFFSET = AFTER_ADD_LIQUIDITY_OFFSET + 1;\n uint8 public constant AFTER_REMOVE_LIQUIDITY_OFFSET = BEFORE_REMOVE_LIQUIDITY_OFFSET + 1;\n\n // Bit offsets for uint values.\n uint8 public constant STATIC_SWAP_FEE_OFFSET = AFTER_REMOVE_LIQUIDITY_OFFSET + 1;\n uint256 public constant AGGREGATE_SWAP_FEE_OFFSET = STATIC_SWAP_FEE_OFFSET + FEE_BITLENGTH;\n uint256 public constant AGGREGATE_YIELD_FEE_OFFSET = AGGREGATE_SWAP_FEE_OFFSET + FEE_BITLENGTH;\n uint256 public constant DECIMAL_SCALING_FACTORS_OFFSET = AGGREGATE_YIELD_FEE_OFFSET + FEE_BITLENGTH;\n uint256 public constant PAUSE_WINDOW_END_TIME_OFFSET =\n DECIMAL_SCALING_FACTORS_OFFSET + TOKEN_DECIMAL_DIFFS_BITLENGTH;\n\n // Uses a uint40 to pack the values: 8 tokens * 5 bits/token.\n // This maximum token count is also hard-coded in the Vault.\n uint8 public constant TOKEN_DECIMAL_DIFFS_BITLENGTH = 40;\n uint8 public constant DECIMAL_DIFF_BITLENGTH = 5;\n\n uint8 public constant TIMESTAMP_BITLENGTH = 32;\n}\n"},"@balancer-labs/v3-vault/contracts/lib/PoolConfigLib.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { WordCodec } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\";\n\nimport { PoolConfigConst } from \"./PoolConfigConst.sol\";\n\n/**\n * @notice Helper functions to read and write the packed hook configuration flags stored in `_poolConfigBits`.\n * @dev Note that the entire configuration of each pool is stored in the `_poolConfigBits` mapping (one slot\n * per pool). This includes the data in the `PoolConfig` struct, plus the data in the `HookFlags` struct.\n * The layout (i.e., offsets for each data field) is specified in `PoolConfigConst`.\n *\n * There are two libraries for interpreting these data. `HooksConfigLib` parses fields related to hooks, while\n * this one contains helpers related to the non-hook-related flags, along with aggregate fee percentages and\n * other data associated with pools.\n *\n * The `PoolData` struct contains the raw bitmap with the entire pool state (`PoolConfigBits`), plus the token\n * configuration, scaling factors, and dynamic information such as current balances and rates.\n */\nlibrary PoolConfigLib {\n using WordCodec for bytes32;\n using PoolConfigLib for PoolConfigBits;\n\n // Bit offsets for main pool config settings.\n function isPoolRegistered(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.POOL_REGISTERED_OFFSET);\n }\n\n function setPoolRegistered(PoolConfigBits config, bool value) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(value, PoolConfigConst.POOL_REGISTERED_OFFSET)\n );\n }\n\n function isPoolInitialized(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.POOL_INITIALIZED_OFFSET);\n }\n\n function setPoolInitialized(PoolConfigBits config, bool value) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(value, PoolConfigConst.POOL_INITIALIZED_OFFSET)\n );\n }\n\n function isPoolPaused(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.POOL_PAUSED_OFFSET);\n }\n\n function setPoolPaused(PoolConfigBits config, bool value) internal pure returns (PoolConfigBits) {\n return PoolConfigBits.wrap(PoolConfigBits.unwrap(config).insertBool(value, PoolConfigConst.POOL_PAUSED_OFFSET));\n }\n\n function isPoolInRecoveryMode(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.POOL_RECOVERY_MODE_OFFSET);\n }\n\n function setPoolInRecoveryMode(PoolConfigBits config, bool value) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(value, PoolConfigConst.POOL_RECOVERY_MODE_OFFSET)\n );\n }\n\n // Bit offsets for liquidity operations.\n function supportsUnbalancedLiquidity(PoolConfigBits config) internal pure returns (bool) {\n // NOTE: The unbalanced liquidity flag is default-on (false means it is supported).\n // This function returns the inverted value.\n return !PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.UNBALANCED_LIQUIDITY_OFFSET);\n }\n\n function requireUnbalancedLiquidityEnabled(PoolConfigBits config) internal pure {\n if (config.supportsUnbalancedLiquidity() == false) {\n revert IVaultErrors.DoesNotSupportUnbalancedLiquidity();\n }\n }\n\n function setDisableUnbalancedLiquidity(\n PoolConfigBits config,\n bool disableUnbalancedLiquidity\n ) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(\n disableUnbalancedLiquidity,\n PoolConfigConst.UNBALANCED_LIQUIDITY_OFFSET\n )\n );\n }\n\n function supportsAddLiquidityCustom(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.ADD_LIQUIDITY_CUSTOM_OFFSET);\n }\n\n function requireAddLiquidityCustomEnabled(PoolConfigBits config) internal pure {\n if (config.supportsAddLiquidityCustom() == false) {\n revert IVaultErrors.DoesNotSupportAddLiquidityCustom();\n }\n }\n\n function setAddLiquidityCustom(\n PoolConfigBits config,\n bool enableAddLiquidityCustom\n ) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(\n enableAddLiquidityCustom,\n PoolConfigConst.ADD_LIQUIDITY_CUSTOM_OFFSET\n )\n );\n }\n\n function supportsRemoveLiquidityCustom(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.REMOVE_LIQUIDITY_CUSTOM_OFFSET);\n }\n\n function requireRemoveLiquidityCustomEnabled(PoolConfigBits config) internal pure {\n if (config.supportsRemoveLiquidityCustom() == false) {\n revert IVaultErrors.DoesNotSupportRemoveLiquidityCustom();\n }\n }\n\n function setRemoveLiquidityCustom(\n PoolConfigBits config,\n bool enableRemoveLiquidityCustom\n ) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(\n enableRemoveLiquidityCustom,\n PoolConfigConst.REMOVE_LIQUIDITY_CUSTOM_OFFSET\n )\n );\n }\n\n function supportsDonation(PoolConfigBits config) internal pure returns (bool) {\n return PoolConfigBits.unwrap(config).decodeBool(PoolConfigConst.DONATION_OFFSET);\n }\n\n function setDonation(PoolConfigBits config, bool enableDonation) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertBool(enableDonation, PoolConfigConst.DONATION_OFFSET)\n );\n }\n\n function requireDonationEnabled(PoolConfigBits config) internal pure {\n if (config.supportsDonation() == false) {\n revert IVaultErrors.DoesNotSupportDonation();\n }\n }\n\n // Bit offsets for uint values.\n function getStaticSwapFeePercentage(PoolConfigBits config) internal pure returns (uint256) {\n return\n PoolConfigBits.unwrap(config).decodeUint(PoolConfigConst.STATIC_SWAP_FEE_OFFSET, FEE_BITLENGTH) *\n FEE_SCALING_FACTOR;\n }\n\n function setStaticSwapFeePercentage(PoolConfigBits config, uint256 value) internal pure returns (PoolConfigBits) {\n // A 100% fee is not supported. In the ExactOut case, the Vault divides by the complement of the swap fee.\n // The max fee percentage is slightly below 100%.\n if (value > MAX_FEE_PERCENTAGE) {\n revert IVaultErrors.PercentageAboveMax();\n }\n value /= FEE_SCALING_FACTOR;\n\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertUint(value, PoolConfigConst.STATIC_SWAP_FEE_OFFSET, FEE_BITLENGTH)\n );\n }\n\n function getAggregateSwapFeePercentage(PoolConfigBits config) internal pure returns (uint256) {\n return\n PoolConfigBits.unwrap(config).decodeUint(PoolConfigConst.AGGREGATE_SWAP_FEE_OFFSET, FEE_BITLENGTH) *\n FEE_SCALING_FACTOR;\n }\n\n function setAggregateSwapFeePercentage(\n PoolConfigBits config,\n uint256 value\n ) internal pure returns (PoolConfigBits) {\n if (value > MAX_FEE_PERCENTAGE) {\n revert IVaultErrors.PercentageAboveMax();\n }\n value /= FEE_SCALING_FACTOR;\n\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertUint(\n value,\n PoolConfigConst.AGGREGATE_SWAP_FEE_OFFSET,\n FEE_BITLENGTH\n )\n );\n }\n\n function getAggregateYieldFeePercentage(PoolConfigBits config) internal pure returns (uint256) {\n return\n PoolConfigBits.unwrap(config).decodeUint(PoolConfigConst.AGGREGATE_YIELD_FEE_OFFSET, FEE_BITLENGTH) *\n FEE_SCALING_FACTOR;\n }\n\n function setAggregateYieldFeePercentage(\n PoolConfigBits config,\n uint256 value\n ) internal pure returns (PoolConfigBits) {\n if (value > MAX_FEE_PERCENTAGE) {\n revert IVaultErrors.PercentageAboveMax();\n }\n value /= FEE_SCALING_FACTOR;\n\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertUint(\n value,\n PoolConfigConst.AGGREGATE_YIELD_FEE_OFFSET,\n FEE_BITLENGTH\n )\n );\n }\n\n function getTokenDecimalDiffs(PoolConfigBits config) internal pure returns (uint40) {\n return\n uint40(\n PoolConfigBits.unwrap(config).decodeUint(\n PoolConfigConst.DECIMAL_SCALING_FACTORS_OFFSET,\n PoolConfigConst.TOKEN_DECIMAL_DIFFS_BITLENGTH\n )\n );\n }\n\n function getDecimalScalingFactors(\n PoolConfigBits config,\n uint256 numTokens\n ) internal pure returns (uint256[] memory) {\n uint256[] memory scalingFactors = new uint256[](numTokens);\n\n bytes32 tokenDecimalDiffs = bytes32(uint256(config.getTokenDecimalDiffs()));\n\n for (uint256 i = 0; i < numTokens; ++i) {\n uint256 decimalDiff = tokenDecimalDiffs.decodeUint(\n i * PoolConfigConst.DECIMAL_DIFF_BITLENGTH,\n PoolConfigConst.DECIMAL_DIFF_BITLENGTH\n );\n\n // This is a \"raw\" factor, not a fixed point number. It should be applied using raw math to raw amounts\n // instead of using FP multiplication.\n scalingFactors[i] = 10 ** decimalDiff;\n }\n\n return scalingFactors;\n }\n\n function setTokenDecimalDiffs(PoolConfigBits config, uint40 value) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertUint(\n value,\n PoolConfigConst.DECIMAL_SCALING_FACTORS_OFFSET,\n PoolConfigConst.TOKEN_DECIMAL_DIFFS_BITLENGTH\n )\n );\n }\n\n function getPauseWindowEndTime(PoolConfigBits config) internal pure returns (uint32) {\n return\n uint32(\n PoolConfigBits.unwrap(config).decodeUint(\n PoolConfigConst.PAUSE_WINDOW_END_TIME_OFFSET,\n PoolConfigConst.TIMESTAMP_BITLENGTH\n )\n );\n }\n\n function setPauseWindowEndTime(PoolConfigBits config, uint32 value) internal pure returns (PoolConfigBits) {\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertUint(\n value,\n PoolConfigConst.PAUSE_WINDOW_END_TIME_OFFSET,\n PoolConfigConst.TIMESTAMP_BITLENGTH\n )\n );\n }\n\n // Convert from an array of decimal differences, to the encoded 40-bit value (8 tokens * 5 bits/token).\n function toTokenDecimalDiffs(uint8[] memory tokenDecimalDiffs) internal pure returns (uint40) {\n bytes32 value;\n\n for (uint256 i = 0; i < tokenDecimalDiffs.length; ++i) {\n value = value.insertUint(\n tokenDecimalDiffs[i],\n i * PoolConfigConst.DECIMAL_DIFF_BITLENGTH,\n PoolConfigConst.DECIMAL_DIFF_BITLENGTH\n );\n }\n\n return uint40(uint256(value));\n }\n}\n"},"@balancer-labs/v3-vault/contracts/lib/PoolDataLib.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { PoolData, TokenInfo, TokenType, Rounding } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\n\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\nimport { ScalingHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol\";\nimport { PackedTokenBalance } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\";\n\nimport { PoolConfigBits, PoolConfigLib } from \"./PoolConfigLib.sol\";\n\n/**\n * @notice Helper functions to read/write a `PoolData` struct.\n * @dev Note that the entire configuration of each pool is stored in the `_poolConfigBits` mapping (one slot per pool).\n * This includes the data in the `PoolConfig` struct, plus the data in the `HookFlags` struct. The layout (i.e.,\n * offsets for each data field) is specified in `PoolConfigConst`.\n *\n * The `PoolData` struct contains the raw bitmap with the entire pool state (`PoolConfigBits`), plus the token\n * configuration, scaling factors, and dynamic information such as current balances and rates.\n */\nlibrary PoolDataLib {\n using PackedTokenBalance for bytes32;\n using FixedPoint for *;\n using ScalingHelpers for *;\n using PoolConfigLib for PoolConfigBits;\n\n function load(\n PoolData memory poolData,\n mapping(uint256 tokenIndex => bytes32 packedTokenBalance) storage poolTokenBalances,\n PoolConfigBits poolConfigBits,\n mapping(IERC20 poolToken => TokenInfo tokenInfo) storage poolTokenInfo,\n IERC20[] storage tokens,\n Rounding roundingDirection\n ) internal view {\n uint256 numTokens = tokens.length;\n\n poolData.poolConfigBits = poolConfigBits;\n poolData.tokens = tokens;\n poolData.tokenInfo = new TokenInfo[](numTokens);\n poolData.balancesRaw = new uint256[](numTokens);\n poolData.balancesLiveScaled18 = new uint256[](numTokens);\n poolData.decimalScalingFactors = PoolConfigLib.getDecimalScalingFactors(poolData.poolConfigBits, numTokens);\n poolData.tokenRates = new uint256[](numTokens);\n\n bool poolSubjectToYieldFees = poolData.poolConfigBits.isPoolInitialized() &&\n poolData.poolConfigBits.getAggregateYieldFeePercentage() > 0 &&\n poolData.poolConfigBits.isPoolInRecoveryMode() == false;\n\n for (uint256 i = 0; i < numTokens; ++i) {\n TokenInfo memory tokenInfo = poolTokenInfo[poolData.tokens[i]];\n bytes32 packedBalance = poolTokenBalances[i];\n\n poolData.tokenInfo[i] = tokenInfo;\n poolData.tokenRates[i] = getTokenRate(tokenInfo);\n updateRawAndLiveBalance(poolData, i, packedBalance.getBalanceRaw(), roundingDirection);\n\n // If there are no yield fees, we can save gas by skipping to the next token now.\n if (poolSubjectToYieldFees == false) {\n continue;\n }\n\n // `poolData` already has live balances computed from raw balances according to the token rates and the\n // given rounding direction. Charging a yield fee changes the raw balance, in which case the safest and\n // most numerically precise way to adjust the live balance is to simply repeat the scaling (hence the\n // second call below).\n\n // The Vault actually guarantees that a token with paysYieldFees set is a WITH_RATE token, so technically\n // we could just check the flag, but we don't want to introduce that dependency for a slight gas savings.\n bool tokenSubjectToYieldFees = tokenInfo.paysYieldFees && tokenInfo.tokenType == TokenType.WITH_RATE;\n\n // Do not charge yield fees before the pool is initialized, or in recovery mode.\n if (tokenSubjectToYieldFees) {\n uint256 aggregateYieldFeePercentage = poolData.poolConfigBits.getAggregateYieldFeePercentage();\n uint256 balanceRaw = poolData.balancesRaw[i];\n\n uint256 aggregateYieldFeeAmountRaw = _computeYieldFeesDue(\n poolData,\n packedBalance.getBalanceDerived(),\n i,\n aggregateYieldFeePercentage\n );\n\n if (aggregateYieldFeeAmountRaw > 0) {\n updateRawAndLiveBalance(poolData, i, balanceRaw - aggregateYieldFeeAmountRaw, roundingDirection);\n }\n }\n }\n }\n\n function syncPoolBalancesAndFees(\n PoolData memory poolData,\n mapping(uint256 tokenIndex => bytes32 packedTokenBalance) storage poolTokenBalances,\n mapping(IERC20 token => bytes32 packedFeeAmounts) storage poolAggregateProtocolFeeAmounts\n ) internal {\n uint256 numTokens = poolData.balancesRaw.length;\n\n for (uint256 i = 0; i < numTokens; ++i) {\n IERC20 token = poolData.tokens[i];\n bytes32 packedBalances = poolTokenBalances[i];\n uint256 storedBalanceRaw = packedBalances.getBalanceRaw();\n\n // `poolData` now has balances updated with yield fees.\n // If yield fees are not 0, then the stored balance is greater than the one in memory.\n if (storedBalanceRaw > poolData.balancesRaw[i]) {\n // Both Swap and Yield fees are stored together in a `PackedTokenBalance`.\n // We have designated \"Derived\" the derived half for Yield fee storage.\n bytes32 packedProtocolFeeAmounts = poolAggregateProtocolFeeAmounts[token];\n poolAggregateProtocolFeeAmounts[token] = packedProtocolFeeAmounts.setBalanceDerived(\n packedProtocolFeeAmounts.getBalanceDerived() + (storedBalanceRaw - poolData.balancesRaw[i])\n );\n }\n\n poolTokenBalances[i] = PackedTokenBalance.toPackedBalance(\n poolData.balancesRaw[i],\n poolData.balancesLiveScaled18[i]\n );\n }\n }\n\n /**\n * @dev This is typically called after a reentrant callback (e.g., a \"before\" liquidity operation callback),\n * to refresh the poolData struct with any balances (or rates) that might have changed.\n *\n * Preconditions: tokenConfig, balancesRaw, and decimalScalingFactors must be current in `poolData`.\n * Side effects: mutates tokenRates, balancesLiveScaled18 in `poolData`.\n */\n function reloadBalancesAndRates(\n PoolData memory poolData,\n mapping(uint256 tokenIndex => bytes32 packedTokenBalance) storage poolTokenBalances,\n Rounding roundingDirection\n ) internal view {\n uint256 numTokens = poolData.tokens.length;\n\n // It's possible a reentrant hook changed the raw balances in Vault storage.\n // Update them before computing the live balances.\n bytes32 packedBalance;\n\n for (uint256 i = 0; i < numTokens; ++i) {\n poolData.tokenRates[i] = getTokenRate(poolData.tokenInfo[i]);\n\n packedBalance = poolTokenBalances[i];\n\n // Note the order dependency. This requires up-to-date tokenRate for the token at index `i` in `poolData`.\n updateRawAndLiveBalance(poolData, i, packedBalance.getBalanceRaw(), roundingDirection);\n }\n }\n\n function getTokenRate(TokenInfo memory tokenInfo) internal view returns (uint256 rate) {\n TokenType tokenType = tokenInfo.tokenType;\n\n if (tokenType == TokenType.STANDARD) {\n rate = FixedPoint.ONE;\n } else if (tokenType == TokenType.WITH_RATE) {\n rate = tokenInfo.rateProvider.getRate();\n } else {\n revert IVaultErrors.InvalidTokenConfiguration();\n }\n }\n\n function updateRawAndLiveBalance(\n PoolData memory poolData,\n uint256 tokenIndex,\n uint256 newRawBalance,\n Rounding roundingDirection\n ) internal pure {\n poolData.balancesRaw[tokenIndex] = newRawBalance;\n\n function(uint256, uint256, uint256) internal pure returns (uint256) _upOrDown = roundingDirection ==\n Rounding.ROUND_UP\n ? ScalingHelpers.toScaled18ApplyRateRoundUp\n : ScalingHelpers.toScaled18ApplyRateRoundDown;\n\n poolData.balancesLiveScaled18[tokenIndex] = _upOrDown(\n newRawBalance,\n poolData.decimalScalingFactors[tokenIndex],\n poolData.tokenRates[tokenIndex]\n );\n }\n\n // solhint-disable-next-line private-vars-leading-underscore\n function _computeYieldFeesDue(\n PoolData memory poolData,\n uint256 lastLiveBalance,\n uint256 tokenIndex,\n uint256 aggregateYieldFeePercentage\n ) internal pure returns (uint256 aggregateYieldFeeAmountRaw) {\n uint256 currentLiveBalance = poolData.balancesLiveScaled18[tokenIndex];\n\n // Do not charge fees if rates go down. If the rate were to go up, down, and back up again, protocol fees\n // would be charged multiple times on the \"same\" yield. For tokens subject to yield fees, this should not\n // happen, or at least be very rare. It can be addressed for known volatile rates by setting the yield fee\n // exempt flag on registration, or compensated off-chain if there is an incident with a normally\n // well-behaved rate provider.\n if (currentLiveBalance > lastLiveBalance) {\n unchecked {\n // Magnitudes are checked above, so it's safe to do unchecked math here.\n uint256 aggregateYieldFeeAmountScaled18 = (currentLiveBalance - lastLiveBalance).mulUp(\n aggregateYieldFeePercentage\n );\n\n // A pool is subject to yield fees if poolSubjectToYieldFees is true, meaning that\n // `protocolYieldFeePercentage > 0`. So, we don't need to check this again in here, saving some gas.\n aggregateYieldFeeAmountRaw = aggregateYieldFeeAmountScaled18.toRawUndoRateRoundDown(\n poolData.decimalScalingFactors[tokenIndex],\n poolData.tokenRates[tokenIndex]\n );\n }\n }\n }\n}\n"},"@balancer-labs/v3-vault/contracts/lib/RouterWethLib.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\n\nimport { IWETH } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { StorageSlotExtension } from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\";\nimport {\n TransientStorageHelpers\n} from \"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\";\n\nlibrary RouterWethLib {\n using Address for address payable;\n using StorageSlotExtension for *;\n using SafeERC20 for IWETH;\n\n /// @notice The amount of ETH paid is insufficient to complete this operation.\n error InsufficientEth();\n\n function wrapEthAndSettle(IWETH weth, IVault vault, uint256 amountToSettle) internal {\n if (address(this).balance < amountToSettle) {\n revert InsufficientEth();\n }\n\n // wrap amountIn to WETH.\n weth.deposit{ value: amountToSettle }();\n // send WETH to Vault.\n weth.safeTransfer(address(vault), amountToSettle);\n // update Vault accounting.\n vault.settle(weth, amountToSettle);\n }\n\n function unwrapWethAndTransferToSender(IWETH weth, IVault vault, address sender, uint256 amountToSend) internal {\n // Receive the WETH amountOut.\n vault.sendTo(weth, address(this), amountToSend);\n // Withdraw WETH to ETH.\n weth.withdraw(amountToSend);\n // Send ETH to sender.\n payable(sender).sendValue(amountToSend);\n }\n}\n"},"@balancer-labs/v3-vault/contracts/lib/VaultExtensionsLib.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\n\n/**\n * @notice Ensure functions in extension contracts can only be called through the main Vault.\n * @dev The Vault is composed of three contracts, using the Proxy pattern from OpenZeppelin. `ensureVaultDelegateCall`\n * can be called on the locally stored Vault address by modifiers in extension contracts to ensure that their functions\n * can only be called through the main Vault. Because the storage *layout* is shared (through inheritance of\n * `VaultStorage`), but each contract actually has its own storage, we need to make sure we are always calling in the\n * main Vault context, to avoid referencing storage in the extension contracts.\n */\nlibrary VaultExtensionsLib {\n function ensureVaultDelegateCall(IVault vault) internal view {\n // If this is a delegate call from the Vault, the address of the contract should be the Vault's,\n // not the extension.\n if (address(this) != address(vault)) {\n revert IVaultErrors.NotVaultDelegateCall();\n }\n }\n}\n"},"@balancer-labs/v3-vault/contracts/lib/VaultStateLib.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { WordCodec } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\";\n\n// @notice Custom type to store the Vault configuration.\ntype VaultStateBits is bytes32;\n\n/// @notice Helper functions for reading and writing the `VaultState` struct.\nlibrary VaultStateLib {\n using WordCodec for bytes32;\n\n // Bit offsets for the Vault state flags.\n uint256 public constant QUERY_DISABLED_OFFSET = 0;\n uint256 public constant VAULT_PAUSED_OFFSET = QUERY_DISABLED_OFFSET + 1;\n uint256 public constant BUFFER_PAUSED_OFFSET = VAULT_PAUSED_OFFSET + 1;\n\n function isQueryDisabled(VaultStateBits config) internal pure returns (bool) {\n return VaultStateBits.unwrap(config).decodeBool(QUERY_DISABLED_OFFSET);\n }\n\n function setQueryDisabled(VaultStateBits config, bool value) internal pure returns (VaultStateBits) {\n return VaultStateBits.wrap(VaultStateBits.unwrap(config).insertBool(value, QUERY_DISABLED_OFFSET));\n }\n\n function isVaultPaused(VaultStateBits config) internal pure returns (bool) {\n return VaultStateBits.unwrap(config).decodeBool(VAULT_PAUSED_OFFSET);\n }\n\n function setVaultPaused(VaultStateBits config, bool value) internal pure returns (VaultStateBits) {\n return VaultStateBits.wrap(VaultStateBits.unwrap(config).insertBool(value, VAULT_PAUSED_OFFSET));\n }\n\n function areBuffersPaused(VaultStateBits config) internal pure returns (bool) {\n return VaultStateBits.unwrap(config).decodeBool(BUFFER_PAUSED_OFFSET);\n }\n\n function setBuffersPaused(VaultStateBits config, bool value) internal pure returns (VaultStateBits) {\n return VaultStateBits.wrap(VaultStateBits.unwrap(config).insertBool(value, BUFFER_PAUSED_OFFSET));\n }\n}\n"},"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport {\n FEE_SCALING_FACTOR,\n MAX_FEE_PERCENTAGE,\n PoolRoleAccounts\n} from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\n\nimport { SingletonAuthentication } from \"./SingletonAuthentication.sol\";\nimport { VaultGuard } from \"./VaultGuard.sol\";\n\n/**\n * @notice Helper contract to manage protocol and creator fees outside the Vault.\n * @dev This contract stores global default protocol swap and yield fees, and also tracks the values of those fees\n * for each pool (the `PoolFeeConfig` described below). Protocol fees can always be overwritten by governance, but\n * pool creator fees are controlled by the registered poolCreator (see `PoolRoleAccounts`).\n *\n * The Vault stores a single aggregate percentage for swap and yield fees; only this `ProtocolFeeController` knows\n * the component fee percentages, and how to compute the aggregate from the components. This is done for performance\n * reasons, to minimize gas on the critical path, as this way the Vault simply applies a single \"cut\", and stores the\n * fee amounts separately from the pool balances.\n *\n * The pool creator fees are \"net\" protocol fees, meaning the protocol fee is taken first, and the pool creator fee\n * percentage is applied to the remainder. Essentially, the protocol is paid first, then the remainder is divided\n * between the pool creator and the LPs.\n *\n * There is a permissionless function (`collectAggregateFees`) that transfers these tokens from the Vault to this\n * contract, and distributes them between the protocol and pool creator, after which they can be withdrawn at any\n * time by governance and the pool creator, respectively.\n *\n * Protocol fees can be zero in some cases (e.g., the token is registered as exempt), and pool creator fees are zero\n * if there is no creator role address defined. Protocol fees are capped at a maximum percentage (50%); pool creator\n * fees are computed \"net\" protocol fees, so they can be any value from 0 to 100%. Any combination is possible.\n * A protocol-fee-exempt pool with a 100% pool creator fee would send all fees to the creator. If there is no pool\n * creator, a pool with a 50% protocol fee would divide the fees evenly between the protocol and LPs.\n *\n * This contract is deployed with the Vault, but can be changed by governance.\n */\ncontract ProtocolFeeController is\n IProtocolFeeController,\n SingletonAuthentication,\n ReentrancyGuardTransient,\n VaultGuard\n{\n using FixedPoint for uint256;\n using SafeERC20 for IERC20;\n using SafeCast for *;\n\n enum ProtocolFeeType {\n SWAP,\n YIELD\n }\n\n /**\n * @notice Fee configuration stored in the swap and yield fee mappings.\n * @dev Instead of storing only the fee in the mapping, also store a flag to indicate whether the fee has been\n * set by governance through a permissioned call. (The fee is stored in 64-bits, so that the struct fits\n * within a single slot.)\n *\n * We know the percentage is an 18-decimal FP value, which only takes 60 bits, so it's guaranteed to fit,\n * and we can do simple casts to truncate the high bits without needed SafeCast.\n *\n * We want to enable permissionless updates for pools, so that it is less onerous to update potentially\n * hundreds of pools if the global protocol fees change. However, we don't want to overwrite pools that\n * have had their fee percentages manually set by the DAO (i.e., after off-chain negotiation and agreement).\n *\n * @param feePercentage The raw swap or yield fee percentage\n * @param isOverride When set, this fee is controlled by governance, and cannot be changed permissionlessly\n */\n struct PoolFeeConfig {\n uint64 feePercentage;\n bool isOverride;\n }\n\n // Maximum protocol swap fee percentage. FixedPoint.ONE corresponds to a 100% fee.\n uint256 public constant MAX_PROTOCOL_SWAP_FEE_PERCENTAGE = 50e16; // 50%\n\n // Maximum protocol yield fee percentage.\n uint256 public constant MAX_PROTOCOL_YIELD_FEE_PERCENTAGE = 50e16; // 50%\n\n // Maximum pool creator (swap, yield) fee percentage.\n uint256 public constant MAX_CREATOR_FEE_PERCENTAGE = 99.999e16; // 99.999%\n\n // Global protocol swap fee.\n uint256 private _globalProtocolSwapFeePercentage;\n\n // Global protocol yield fee.\n uint256 private _globalProtocolYieldFeePercentage;\n\n // Store the pool-specific swap fee percentages (the Vault's poolConfigBits stores the aggregate percentage).\n mapping(address pool => PoolFeeConfig swapFeeConfig) internal _poolProtocolSwapFeePercentages;\n\n // Store the pool-specific yield fee percentages (the Vault's poolConfigBits stores the aggregate percentage).\n mapping(address pool => PoolFeeConfig yieldFeeConfig) internal _poolProtocolYieldFeePercentages;\n\n // Explicitly mark a pool as registered. This will enable future migrations to safely update protected state.\n mapping(address pool => bool isRegistered) internal _registeredPools;\n\n // Pool creator swap fee percentages for each pool.\n mapping(address pool => uint256 poolCreatorSwapFee) internal _poolCreatorSwapFeePercentages;\n\n // Pool creator yield fee percentages for each pool.\n mapping(address pool => uint256 poolCreatorYieldFee) internal _poolCreatorYieldFeePercentages;\n\n // Disaggregated protocol fees (from swap and yield), available for withdrawal by governance.\n mapping(address pool => mapping(IERC20 poolToken => uint256 feeAmount)) internal _protocolFeeAmounts;\n\n // Disaggregated pool creator fees (from swap and yield), available for withdrawal by the pool creator.\n mapping(address pool => mapping(IERC20 poolToken => uint256 feeAmount)) internal _poolCreatorFeeAmounts;\n\n /**\n * @notice Prevent pool data from being registered more than once.\n * @dev This can happen if there is an error in the migration, or if governance somehow grants permission to\n * `migratePool`, which should never happen.\n *\n * @param pool The pool\n */\n error PoolAlreadyRegistered(address pool);\n\n /// @notice Migration source cannot be this contract.\n error InvalidMigrationSource();\n\n // Ensure that the caller is the pool creator.\n modifier onlyPoolCreator(address pool) {\n _ensureCallerIsPoolCreator(pool);\n _;\n }\n\n // Validate the swap fee percentage against the maximum.\n modifier withValidSwapFee(uint256 newSwapFeePercentage) {\n if (newSwapFeePercentage > MAX_PROTOCOL_SWAP_FEE_PERCENTAGE) {\n revert ProtocolSwapFeePercentageTooHigh();\n }\n _ensureValidPrecision(newSwapFeePercentage);\n _;\n }\n\n // Validate the yield fee percentage against the maximum.\n modifier withValidYieldFee(uint256 newYieldFeePercentage) {\n if (newYieldFeePercentage > MAX_PROTOCOL_YIELD_FEE_PERCENTAGE) {\n revert ProtocolYieldFeePercentageTooHigh();\n }\n _ensureValidPrecision(newYieldFeePercentage);\n _;\n }\n\n modifier withValidPoolCreatorFee(uint256 newPoolCreatorFeePercentage) {\n if (newPoolCreatorFeePercentage > MAX_CREATOR_FEE_PERCENTAGE) {\n revert PoolCreatorFeePercentageTooHigh();\n }\n _;\n }\n\n // Force collection and disaggregation (e.g., before changing protocol fee percentages).\n modifier withLatestFees(address pool) {\n collectAggregateFees(pool);\n _;\n }\n\n constructor(IVault vault_) SingletonAuthentication(vault_) VaultGuard(vault_) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /// @inheritdoc IProtocolFeeController\n function vault() external view returns (IVault) {\n return _vault;\n }\n\n /// @inheritdoc IProtocolFeeController\n function collectAggregateFees(address pool) public {\n _vault.unlock(abi.encodeCall(ProtocolFeeController.collectAggregateFeesHook, pool));\n }\n\n /**\n * @dev Copy and zero out the `aggregateFeeAmounts` collected in the Vault accounting, supplying credit\n * for each token. Then have the Vault transfer tokens to this contract, debiting each token for the amount\n * transferred so that the transaction settles when the hook returns.\n */\n function collectAggregateFeesHook(address pool) external onlyVault {\n (uint256[] memory totalSwapFees, uint256[] memory totalYieldFees) = _vault.collectAggregateFees(pool);\n _receiveAggregateFees(pool, totalSwapFees, totalYieldFees);\n }\n\n /**\n * @notice Settle fee credits from the Vault.\n * @dev This must be called after calling `collectAggregateFees` in the Vault. Note that since charging protocol\n * fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection\n * happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations. The Vault\n * differentiates between swap and yield fees (since they can have different percentage values); the Controller\n * combines swap and yield fees, then allocates the total between the protocol and pool creator.\n *\n * @param pool The address of the pool on which the swap fees were charged\n * @param swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n * @param yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order\n */\n function _receiveAggregateFees(\n address pool,\n uint256[] memory swapFeeAmounts,\n uint256[] memory yieldFeeAmounts\n ) internal {\n _receiveAggregateFees(pool, ProtocolFeeType.SWAP, swapFeeAmounts);\n _receiveAggregateFees(pool, ProtocolFeeType.YIELD, yieldFeeAmounts);\n }\n\n function _receiveAggregateFees(address pool, ProtocolFeeType feeType, uint256[] memory feeAmounts) private {\n // There are two cases when we don't need to split fees (in which case we can save gas and avoid rounding\n // errors by skipping calculations) if either the protocol or pool creator fee percentage is zero.\n\n uint256 protocolFeePercentage = feeType == ProtocolFeeType.SWAP\n ? _poolProtocolSwapFeePercentages[pool].feePercentage\n : _poolProtocolYieldFeePercentages[pool].feePercentage;\n\n uint256 poolCreatorFeePercentage = feeType == ProtocolFeeType.SWAP\n ? _poolCreatorSwapFeePercentages[pool]\n : _poolCreatorYieldFeePercentages[pool];\n\n uint256 aggregateFeePercentage;\n\n bool needToSplitFees = poolCreatorFeePercentage > 0 && protocolFeePercentage > 0;\n if (needToSplitFees) {\n // Calculate once, outside the loop.\n aggregateFeePercentage = _computeAggregateFeePercentage(protocolFeePercentage, poolCreatorFeePercentage);\n }\n\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n for (uint256 i = 0; i < numTokens; ++i) {\n if (feeAmounts[i] > 0) {\n IERC20 token = poolTokens[i];\n\n _vault.sendTo(token, address(this), feeAmounts[i]);\n\n // It should be easier for off-chain processes to handle two events, rather than parsing the type\n // out of a single event.\n if (feeType == ProtocolFeeType.SWAP) {\n emit ProtocolSwapFeeCollected(pool, token, feeAmounts[i]);\n } else {\n emit ProtocolYieldFeeCollected(pool, token, feeAmounts[i]);\n }\n\n if (needToSplitFees) {\n // The Vault took a single \"cut\" for the aggregate total percentage (protocol + pool creator) for\n // this fee type (swap or yield). The first step is to reconstruct this total fee amount. Then we\n // need to \"disaggregate\" this total, dividing it between the protocol and pool creator according\n // to their individual percentages. We do this by computing the protocol portion first, then\n // assigning the remainder to the pool creator.\n uint256 totalFeeAmountRaw = feeAmounts[i].divUp(aggregateFeePercentage);\n uint256 protocolPortion = totalFeeAmountRaw.mulUp(protocolFeePercentage);\n\n _protocolFeeAmounts[pool][token] += protocolPortion;\n _poolCreatorFeeAmounts[pool][token] += feeAmounts[i] - protocolPortion;\n } else {\n // If we don't need to split, one of them must be zero.\n if (poolCreatorFeePercentage == 0) {\n _protocolFeeAmounts[pool][token] += feeAmounts[i];\n } else {\n _poolCreatorFeeAmounts[pool][token] += feeAmounts[i];\n }\n }\n }\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function getGlobalProtocolSwapFeePercentage() external view returns (uint256) {\n return _globalProtocolSwapFeePercentage;\n }\n\n /// @inheritdoc IProtocolFeeController\n function getGlobalProtocolYieldFeePercentage() external view returns (uint256) {\n return _globalProtocolYieldFeePercentage;\n }\n\n /// @inheritdoc IProtocolFeeController\n function isPoolRegistered(address pool) external view returns (bool) {\n return _registeredPools[pool];\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolProtocolSwapFeeInfo(address pool) external view returns (uint256, bool) {\n PoolFeeConfig memory config = _poolProtocolSwapFeePercentages[pool];\n\n return (config.feePercentage, config.isOverride);\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolProtocolYieldFeeInfo(address pool) external view returns (uint256, bool) {\n PoolFeeConfig memory config = _poolProtocolYieldFeePercentages[pool];\n\n return (config.feePercentage, config.isOverride);\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolCreatorSwapFeePercentage(address pool) external view returns (uint256) {\n return _poolCreatorSwapFeePercentages[pool];\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolCreatorYieldFeePercentage(address pool) external view returns (uint256) {\n return _poolCreatorYieldFeePercentages[pool];\n }\n\n /// @inheritdoc IProtocolFeeController\n function getProtocolFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts) {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n feeAmounts = new uint256[](numTokens);\n for (uint256 i = 0; i < numTokens; ++i) {\n feeAmounts[i] = _protocolFeeAmounts[pool][poolTokens[i]];\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function getPoolCreatorFeeAmounts(address pool) external view returns (uint256[] memory feeAmounts) {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n feeAmounts = new uint256[](numTokens);\n for (uint256 i = 0; i < numTokens; ++i) {\n feeAmounts[i] = _poolCreatorFeeAmounts[pool][poolTokens[i]];\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) external pure returns (uint256) {\n return _computeAggregateFeePercentage(protocolFeePercentage, poolCreatorFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function updateProtocolSwapFeePercentage(address pool) external withLatestFees(pool) {\n PoolFeeConfig memory feeConfig = _poolProtocolSwapFeePercentages[pool];\n uint256 globalProtocolSwapFee = _globalProtocolSwapFeePercentage;\n\n if (feeConfig.isOverride == false && globalProtocolSwapFee != feeConfig.feePercentage) {\n _updatePoolSwapFeePercentage(pool, globalProtocolSwapFee, false);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function updateProtocolYieldFeePercentage(address pool) external withLatestFees(pool) {\n PoolFeeConfig memory feeConfig = _poolProtocolYieldFeePercentages[pool];\n uint256 globalProtocolYieldFee = _globalProtocolYieldFeePercentage;\n\n if (feeConfig.isOverride == false && globalProtocolYieldFee != feeConfig.feePercentage) {\n _updatePoolYieldFeePercentage(pool, globalProtocolYieldFee, false);\n }\n }\n\n function _getAggregateFeePercentage(address pool, ProtocolFeeType feeType) internal view returns (uint256) {\n uint256 protocolFeePercentage;\n uint256 poolCreatorFeePercentage;\n\n if (feeType == ProtocolFeeType.SWAP) {\n protocolFeePercentage = _poolProtocolSwapFeePercentages[pool].feePercentage;\n poolCreatorFeePercentage = _poolCreatorSwapFeePercentages[pool];\n } else {\n protocolFeePercentage = _poolProtocolYieldFeePercentages[pool].feePercentage;\n poolCreatorFeePercentage = _poolCreatorYieldFeePercentages[pool];\n }\n\n return _computeAggregateFeePercentage(protocolFeePercentage, poolCreatorFeePercentage);\n }\n\n function _computeAggregateFeePercentage(\n uint256 protocolFeePercentage,\n uint256 poolCreatorFeePercentage\n ) internal pure returns (uint256 aggregateFeePercentage) {\n aggregateFeePercentage =\n protocolFeePercentage +\n protocolFeePercentage.complement().mulDown(poolCreatorFeePercentage);\n\n // Protocol fee percentages are limited to 24-bit precision for performance reasons (i.e., to fit all the fees\n // in a single slot), and because high precision is not needed. Generally we expect protocol fees set by\n // governance to be simple integers.\n //\n // However, the pool creator fee is entirely controlled by the pool creator, and it is possible to craft a\n // valid pool creator fee percentage that would cause the aggregate fee percentage to fail the precision check.\n // This case should be rare, so we ensure this can't happen by truncating the final value.\n aggregateFeePercentage = (aggregateFeePercentage / FEE_SCALING_FACTOR) * FEE_SCALING_FACTOR;\n }\n\n function _ensureCallerIsPoolCreator(address pool) internal view {\n address poolCreator = _getPoolCreator(pool);\n\n if (poolCreator == address(0)) {\n revert PoolCreatorNotRegistered(pool);\n }\n\n if (poolCreator != msg.sender) {\n revert CallerIsNotPoolCreator(msg.sender, pool);\n }\n }\n\n function _getPoolTokensAndCount(address pool) internal view returns (IERC20[] memory tokens, uint256 numTokens) {\n tokens = _vault.getPoolTokens(pool);\n numTokens = tokens.length;\n }\n\n // Retrieve the pool creator for a pool from the Vault.\n function _getPoolCreator(address pool) internal view returns (address) {\n PoolRoleAccounts memory roleAccounts = _vault.getPoolRoleAccounts(pool);\n\n return roleAccounts.poolCreator;\n }\n\n /***************************************************************************\n Pool Migration\n ***************************************************************************/\n\n /**\n * @notice Not exposed in the interface, this enables migration of hidden pool state.\n * @dev Permission should NEVER be granted to this function outside of a migration contract. It is necessary to\n * permit migration of the `ProtocolFeeController` with all state (in particular, protocol fee overrides and pool\n * creator fees) that cannot be written outside of the `registerPool` function called by the Vault during pool\n * deployment.\n *\n * Even if governance were to grant permission to call this function, the `_registeredPools` latch keeps it safe,\n * guaranteeing that it is impossible to use this function to change anything after registration. A pool can only\n * be registered / configured once - either copied to a new controller in the migration context, or added normally\n * through the Vault calling `registerPool`.\n *\n * @param pool The address of the pool to be migrated\n */\n function migratePool(address pool) external {\n IProtocolFeeController oldFeeController = _vault.getProtocolFeeController();\n\n if (address(oldFeeController) == address(this)) {\n revert InvalidMigrationSource();\n }\n\n if (_registeredPools[pool]) {\n revert PoolAlreadyRegistered(pool);\n }\n\n _registeredPools[pool] = true;\n\n (uint256 protocolSwapFeePercentage, bool swapFeeIsOverride) = oldFeeController.getPoolProtocolSwapFeeInfo(pool);\n _poolProtocolSwapFeePercentages[pool] = PoolFeeConfig({\n feePercentage: protocolSwapFeePercentage.toUint64(),\n isOverride: swapFeeIsOverride\n });\n\n (uint256 protocolYieldFeePercentage, bool yieldFeeIsOverride) = oldFeeController.getPoolProtocolYieldFeeInfo(\n pool\n );\n _poolProtocolYieldFeePercentages[pool] = PoolFeeConfig({\n feePercentage: protocolYieldFeePercentage.toUint64(),\n isOverride: yieldFeeIsOverride\n });\n\n // On the first migration, these functions won't exist, as they were not included in the originally deployed\n // contract. This is ok, as the first time the contract will be migrated, there will be no pool creators.\n // In the event a pool that did have a pool creator was missed, the pool creator can simply set the fee\n // percentage again on the new controller. The fact that a pool has a pool creator cannot be lost, as this\n // is stored in the Vault on initial registration.\n try oldFeeController.getPoolCreatorSwapFeePercentage(pool) returns (uint256 poolCreatorSwapFeePercentage) {\n _poolCreatorSwapFeePercentages[pool] = poolCreatorSwapFeePercentage;\n } catch {}\n\n try oldFeeController.getPoolCreatorYieldFeePercentage(pool) returns (uint256 poolCreatorYieldFeePercentage) {\n _poolCreatorYieldFeePercentages[pool] = poolCreatorYieldFeePercentage;\n } catch {}\n }\n\n /***************************************************************************\n Permissioned Functions\n ***************************************************************************/\n\n /// @inheritdoc IProtocolFeeController\n function registerPool(\n address pool,\n address poolCreator,\n bool protocolFeeExempt\n ) external onlyVault returns (uint256 aggregateSwapFeePercentage, uint256 aggregateYieldFeePercentage) {\n _registeredPools[pool] = true;\n\n // Set local storage of the actual percentages for the pool (default to global).\n aggregateSwapFeePercentage = protocolFeeExempt ? 0 : _globalProtocolSwapFeePercentage;\n aggregateYieldFeePercentage = protocolFeeExempt ? 0 : _globalProtocolYieldFeePercentage;\n\n // `isOverride` is true if the pool is protocol fee exempt; otherwise, default to false.\n // If exempt, this pool cannot be updated to the current global percentage permissionlessly.\n // The percentages are 18 decimal floating point numbers, bound between 0 and the max fee (<= FixedPoint.ONE).\n // Since this fits in 64 bits, the SafeCast shouldn't be necessary, and is done out of an abundance of caution.\n _poolProtocolSwapFeePercentages[pool] = PoolFeeConfig({\n feePercentage: aggregateSwapFeePercentage.toUint64(),\n isOverride: protocolFeeExempt\n });\n _poolProtocolYieldFeePercentages[pool] = PoolFeeConfig({\n feePercentage: aggregateYieldFeePercentage.toUint64(),\n isOverride: protocolFeeExempt\n });\n\n // Allow tracking pool fee percentages in all cases (e.g., when the pool is protocol-fee exempt).\n emit InitialPoolAggregateSwapFeePercentage(pool, aggregateSwapFeePercentage, protocolFeeExempt);\n emit InitialPoolAggregateYieldFeePercentage(pool, aggregateYieldFeePercentage, protocolFeeExempt);\n\n emit PoolRegisteredWithFeeController(pool, poolCreator, protocolFeeExempt);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setGlobalProtocolSwapFeePercentage(\n uint256 newProtocolSwapFeePercentage\n ) external withValidSwapFee(newProtocolSwapFeePercentage) authenticate {\n _globalProtocolSwapFeePercentage = newProtocolSwapFeePercentage;\n\n emit GlobalProtocolSwapFeePercentageChanged(newProtocolSwapFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setGlobalProtocolYieldFeePercentage(\n uint256 newProtocolYieldFeePercentage\n ) external withValidYieldFee(newProtocolYieldFeePercentage) authenticate {\n _globalProtocolYieldFeePercentage = newProtocolYieldFeePercentage;\n\n emit GlobalProtocolYieldFeePercentageChanged(newProtocolYieldFeePercentage);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setProtocolSwapFeePercentage(\n address pool,\n uint256 newProtocolSwapFeePercentage\n ) external authenticate withValidSwapFee(newProtocolSwapFeePercentage) withLatestFees(pool) {\n _updatePoolSwapFeePercentage(pool, newProtocolSwapFeePercentage, true);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setProtocolYieldFeePercentage(\n address pool,\n uint256 newProtocolYieldFeePercentage\n ) external authenticate withValidYieldFee(newProtocolYieldFeePercentage) withLatestFees(pool) {\n _updatePoolYieldFeePercentage(pool, newProtocolYieldFeePercentage, true);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setPoolCreatorSwapFeePercentage(\n address pool,\n uint256 poolCreatorSwapFeePercentage\n ) external onlyPoolCreator(pool) withValidPoolCreatorFee(poolCreatorSwapFeePercentage) withLatestFees(pool) {\n _setPoolCreatorFeePercentage(pool, poolCreatorSwapFeePercentage, ProtocolFeeType.SWAP);\n }\n\n /// @inheritdoc IProtocolFeeController\n function setPoolCreatorYieldFeePercentage(\n address pool,\n uint256 poolCreatorYieldFeePercentage\n ) external onlyPoolCreator(pool) withValidPoolCreatorFee(poolCreatorYieldFeePercentage) withLatestFees(pool) {\n _setPoolCreatorFeePercentage(pool, poolCreatorYieldFeePercentage, ProtocolFeeType.YIELD);\n }\n\n function _setPoolCreatorFeePercentage(\n address pool,\n uint256 poolCreatorFeePercentage,\n ProtocolFeeType feeType\n ) internal {\n // Need to set locally, and update the aggregate percentage in the Vault.\n if (feeType == ProtocolFeeType.SWAP) {\n _poolCreatorSwapFeePercentages[pool] = poolCreatorFeePercentage;\n\n // The Vault will also emit an `AggregateSwapFeePercentageChanged` event.\n _vault.updateAggregateSwapFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.SWAP));\n\n emit PoolCreatorSwapFeePercentageChanged(pool, poolCreatorFeePercentage);\n } else {\n _poolCreatorYieldFeePercentages[pool] = poolCreatorFeePercentage;\n\n // The Vault will also emit an `AggregateYieldFeePercentageChanged` event.\n _vault.updateAggregateYieldFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.YIELD));\n\n emit PoolCreatorYieldFeePercentageChanged(pool, poolCreatorFeePercentage);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawProtocolFees(address pool, address recipient) external authenticate {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n for (uint256 i = 0; i < numTokens; ++i) {\n IERC20 token = poolTokens[i];\n\n _withdrawProtocolFees(pool, recipient, token);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawProtocolFeesForToken(address pool, address recipient, IERC20 token) external authenticate {\n // Revert if the pool is not registered or if the token does not belong to the pool.\n _vault.getPoolTokenCountAndIndexOfToken(pool, token);\n _withdrawProtocolFees(pool, recipient, token);\n }\n\n function _withdrawProtocolFees(address pool, address recipient, IERC20 token) internal {\n uint256 amountToWithdraw = _protocolFeeAmounts[pool][token];\n if (amountToWithdraw > 0) {\n _protocolFeeAmounts[pool][token] = 0;\n token.safeTransfer(recipient, amountToWithdraw);\n\n emit ProtocolFeesWithdrawn(pool, token, recipient, amountToWithdraw);\n }\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawPoolCreatorFees(address pool, address recipient) external onlyPoolCreator(pool) {\n _withdrawPoolCreatorFees(pool, recipient);\n }\n\n /// @inheritdoc IProtocolFeeController\n function withdrawPoolCreatorFees(address pool) external {\n _withdrawPoolCreatorFees(pool, _getPoolCreator(pool));\n }\n\n function _withdrawPoolCreatorFees(address pool, address recipient) private {\n (IERC20[] memory poolTokens, uint256 numTokens) = _getPoolTokensAndCount(pool);\n\n for (uint256 i = 0; i < numTokens; ++i) {\n IERC20 token = poolTokens[i];\n\n uint256 amountToWithdraw = _poolCreatorFeeAmounts[pool][token];\n if (amountToWithdraw > 0) {\n _poolCreatorFeeAmounts[pool][token] = 0;\n token.safeTransfer(recipient, amountToWithdraw);\n\n emit PoolCreatorFeesWithdrawn(pool, token, recipient, amountToWithdraw);\n }\n }\n }\n\n /// @dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage.\n function _updatePoolSwapFeePercentage(address pool, uint256 newProtocolSwapFeePercentage, bool isOverride) private {\n // Update local storage of the raw percentage.\n //\n // The percentages are 18 decimal floating point numbers, bound between 0 and the max fee (<= FixedPoint.ONE).\n // Since this fits in 64 bits, the SafeCast shouldn't be necessary, and is done out of an abundance of caution.\n _poolProtocolSwapFeePercentages[pool] = PoolFeeConfig({\n feePercentage: newProtocolSwapFeePercentage.toUint64(),\n isOverride: isOverride\n });\n\n // Update the resulting aggregate swap fee value in the Vault (PoolConfig).\n _vault.updateAggregateSwapFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.SWAP));\n\n emit ProtocolSwapFeePercentageChanged(pool, newProtocolSwapFeePercentage);\n }\n\n /// @dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage.\n function _updatePoolYieldFeePercentage(\n address pool,\n uint256 newProtocolYieldFeePercentage,\n bool isOverride\n ) private {\n // Update local storage of the raw percentage.\n // The percentages are 18 decimal floating point numbers, bound between 0 and the max fee (<= FixedPoint.ONE).\n // Since this fits in 64 bits, the SafeCast shouldn't be necessary, and is done out of an abundance of caution.\n _poolProtocolYieldFeePercentages[pool] = PoolFeeConfig({\n feePercentage: newProtocolYieldFeePercentage.toUint64(),\n isOverride: isOverride\n });\n\n // Update the resulting aggregate yield fee value in the Vault (PoolConfig).\n _vault.updateAggregateYieldFeePercentage(pool, _getAggregateFeePercentage(pool, ProtocolFeeType.YIELD));\n\n emit ProtocolYieldFeePercentageChanged(pool, newProtocolYieldFeePercentage);\n }\n\n function _ensureValidPrecision(uint256 feePercentage) private pure {\n // Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n // precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n // corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n // Ensure there will be no precision loss in the Vault - which would lead to a discrepancy between the\n // aggregate fee calculated here and that stored in the Vault.\n if ((feePercentage / FEE_SCALING_FACTOR) * FEE_SCALING_FACTOR != feePercentage) {\n revert IVaultErrors.FeePrecisionTooHigh();\n }\n }\n}\n"},"@balancer-labs/v3-vault/contracts/Router.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\nimport { IPermit2 } from \"permit2/src/interfaces/IPermit2.sol\";\n\nimport { IWETH } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol\";\nimport { IRouter } from \"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { RouterWethLib } from \"./lib/RouterWethLib.sol\";\nimport { RouterCommon } from \"./RouterCommon.sol\";\n\n/**\n * @notice Entrypoint for swaps, liquidity operations, and corresponding queries.\n * @dev The external API functions unlock the Vault, which calls back into the corresponding hook functions.\n * These interact with the Vault, transfer tokens, settle accounting, and handle wrapping and unwrapping ETH.\n */\ncontract Router is IRouter, RouterCommon {\n using Address for address payable;\n using RouterWethLib for IWETH;\n using SafeCast for *;\n\n constructor(\n IVault vault,\n IWETH weth,\n IPermit2 permit2,\n string memory routerVersion\n ) RouterCommon(vault, weth, permit2, routerVersion) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /*******************************************************************************\n Pool Initialization\n *******************************************************************************/\n\n /// @inheritdoc IRouter\n function initialize(\n address pool,\n IERC20[] memory tokens,\n uint256[] memory exactAmountsIn,\n uint256 minBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable saveSender(msg.sender) returns (uint256 bptAmountOut) {\n return\n abi.decode(\n _vault.unlock(\n abi.encodeCall(\n Router.initializeHook,\n InitializeHookParams({\n sender: msg.sender,\n pool: pool,\n tokens: tokens,\n exactAmountsIn: exactAmountsIn,\n minBptAmountOut: minBptAmountOut,\n wethIsEth: wethIsEth,\n userData: userData\n })\n )\n ),\n (uint256)\n );\n }\n\n /**\n * @notice Hook for initialization.\n * @dev Can only be called by the Vault.\n * @param params Initialization parameters (see IRouter for struct definition)\n * @return bptAmountOut BPT amount minted in exchange for the input tokens\n */\n function initializeHook(\n InitializeHookParams calldata params\n ) external nonReentrant onlyVault returns (uint256 bptAmountOut) {\n bptAmountOut = _vault.initialize(\n params.pool,\n params.sender,\n params.tokens,\n params.exactAmountsIn,\n params.minBptAmountOut,\n params.userData\n );\n\n for (uint256 i = 0; i < params.tokens.length; ++i) {\n IERC20 token = params.tokens[i];\n uint256 amountIn = params.exactAmountsIn[i];\n\n if (amountIn == 0) {\n continue;\n }\n\n // There can be only one WETH token in the pool.\n if (params.wethIsEth && address(token) == address(_weth)) {\n _weth.wrapEthAndSettle(_vault, amountIn);\n } else {\n // Transfer tokens from the user to the Vault.\n // Any value over MAX_UINT128 would revert above in `initialize`, so this SafeCast shouldn't be\n // necessary. Done out of an abundance of caution.\n _permit2.transferFrom(params.sender, address(_vault), amountIn.toUint160(), address(token));\n _vault.settle(token, amountIn);\n }\n }\n\n // Return ETH dust.\n _returnEth(params.sender);\n }\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /// @inheritdoc IRouter\n function addLiquidityProportional(\n address pool,\n uint256[] memory maxAmountsIn,\n uint256 exactBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable saveSender(msg.sender) returns (uint256[] memory amountsIn) {\n (amountsIn, , ) = abi.decode(\n _vault.unlock(\n abi.encodeCall(\n Router.addLiquidityHook,\n AddLiquidityHookParams({\n sender: msg.sender,\n pool: pool,\n maxAmountsIn: maxAmountsIn,\n minBptAmountOut: exactBptAmountOut,\n kind: AddLiquidityKind.PROPORTIONAL,\n wethIsEth: wethIsEth,\n userData: userData\n })\n )\n ),\n (uint256[], uint256, bytes)\n );\n }\n\n /// @inheritdoc IRouter\n function addLiquidityUnbalanced(\n address pool,\n uint256[] memory exactAmountsIn,\n uint256 minBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable saveSender(msg.sender) returns (uint256 bptAmountOut) {\n (, bptAmountOut, ) = abi.decode(\n _vault.unlock(\n abi.encodeCall(\n Router.addLiquidityHook,\n AddLiquidityHookParams({\n sender: msg.sender,\n pool: pool,\n maxAmountsIn: exactAmountsIn,\n minBptAmountOut: minBptAmountOut,\n kind: AddLiquidityKind.UNBALANCED,\n wethIsEth: wethIsEth,\n userData: userData\n })\n )\n ),\n (uint256[], uint256, bytes)\n );\n }\n\n /// @inheritdoc IRouter\n function addLiquiditySingleTokenExactOut(\n address pool,\n IERC20 tokenIn,\n uint256 maxAmountIn,\n uint256 exactBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable saveSender(msg.sender) returns (uint256 amountIn) {\n (uint256[] memory maxAmountsIn, uint256 tokenIndex) = _getSingleInputArrayAndTokenIndex(\n pool,\n tokenIn,\n maxAmountIn\n );\n\n (uint256[] memory amountsIn, , ) = abi.decode(\n _vault.unlock(\n abi.encodeCall(\n Router.addLiquidityHook,\n AddLiquidityHookParams({\n sender: msg.sender,\n pool: pool,\n maxAmountsIn: maxAmountsIn,\n minBptAmountOut: exactBptAmountOut,\n kind: AddLiquidityKind.SINGLE_TOKEN_EXACT_OUT,\n wethIsEth: wethIsEth,\n userData: userData\n })\n )\n ),\n (uint256[], uint256, bytes)\n );\n\n return amountsIn[tokenIndex];\n }\n\n /// @inheritdoc IRouter\n function donate(\n address pool,\n uint256[] memory amountsIn,\n bool wethIsEth,\n bytes memory userData\n ) external payable saveSender(msg.sender) {\n _vault.unlock(\n abi.encodeCall(\n Router.addLiquidityHook,\n AddLiquidityHookParams({\n sender: msg.sender,\n pool: pool,\n maxAmountsIn: amountsIn,\n minBptAmountOut: 0,\n kind: AddLiquidityKind.DONATION,\n wethIsEth: wethIsEth,\n userData: userData\n })\n )\n );\n }\n\n /// @inheritdoc IRouter\n function addLiquidityCustom(\n address pool,\n uint256[] memory maxAmountsIn,\n uint256 minBptAmountOut,\n bool wethIsEth,\n bytes memory userData\n )\n external\n payable\n saveSender(msg.sender)\n returns (uint256[] memory amountsIn, uint256 bptAmountOut, bytes memory returnData)\n {\n return\n abi.decode(\n _vault.unlock(\n abi.encodeCall(\n Router.addLiquidityHook,\n AddLiquidityHookParams({\n sender: msg.sender,\n pool: pool,\n maxAmountsIn: maxAmountsIn,\n minBptAmountOut: minBptAmountOut,\n kind: AddLiquidityKind.CUSTOM,\n wethIsEth: wethIsEth,\n userData: userData\n })\n )\n ),\n (uint256[], uint256, bytes)\n );\n }\n\n /**\n * @notice Hook for adding liquidity.\n * @dev Can only be called by the Vault.\n * @param params Add liquidity parameters (see IRouter for struct definition)\n * @return amountsIn Actual amounts in required for the join\n * @return bptAmountOut BPT amount minted in exchange for the input tokens\n * @return returnData Arbitrary data with encoded response from the pool\n */\n function addLiquidityHook(\n AddLiquidityHookParams calldata params\n )\n external\n nonReentrant\n onlyVault\n returns (uint256[] memory amountsIn, uint256 bptAmountOut, bytes memory returnData)\n {\n (amountsIn, bptAmountOut, returnData) = _vault.addLiquidity(\n AddLiquidityParams({\n pool: params.pool,\n to: params.sender,\n maxAmountsIn: params.maxAmountsIn,\n minBptAmountOut: params.minBptAmountOut,\n kind: params.kind,\n userData: params.userData\n })\n );\n\n // maxAmountsIn length is checked against tokens length at the Vault.\n IERC20[] memory tokens = _vault.getPoolTokens(params.pool);\n\n for (uint256 i = 0; i < tokens.length; ++i) {\n IERC20 token = tokens[i];\n uint256 amountIn = amountsIn[i];\n\n if (amountIn == 0) {\n continue;\n }\n\n // There can be only one WETH token in the pool.\n if (params.wethIsEth && address(token) == address(_weth)) {\n _weth.wrapEthAndSettle(_vault, amountIn);\n } else {\n // Any value over MAX_UINT128 would revert above in `addLiquidity`, so this SafeCast shouldn't be\n // necessary. Done out of an abundance of caution.\n _permit2.transferFrom(params.sender, address(_vault), amountIn.toUint160(), address(token));\n _vault.settle(token, amountIn);\n }\n }\n\n // Send remaining ETH to the user.\n _returnEth(params.sender);\n }\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /// @inheritdoc IRouter\n function removeLiquidityProportional(\n address pool,\n uint256 exactBptAmountIn,\n uint256[] memory minAmountsOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable saveSender(msg.sender) returns (uint256[] memory amountsOut) {\n (, amountsOut, ) = abi.decode(\n _vault.unlock(\n abi.encodeCall(\n Router.removeLiquidityHook,\n RemoveLiquidityHookParams({\n sender: msg.sender,\n pool: pool,\n minAmountsOut: minAmountsOut,\n maxBptAmountIn: exactBptAmountIn,\n kind: RemoveLiquidityKind.PROPORTIONAL,\n wethIsEth: wethIsEth,\n userData: userData\n })\n )\n ),\n (uint256, uint256[], bytes)\n );\n }\n\n /// @inheritdoc IRouter\n function removeLiquiditySingleTokenExactIn(\n address pool,\n uint256 exactBptAmountIn,\n IERC20 tokenOut,\n uint256 minAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable saveSender(msg.sender) returns (uint256 amountOut) {\n (uint256[] memory minAmountsOut, uint256 tokenIndex) = _getSingleInputArrayAndTokenIndex(\n pool,\n tokenOut,\n minAmountOut\n );\n\n (, uint256[] memory amountsOut, ) = abi.decode(\n _vault.unlock(\n abi.encodeCall(\n Router.removeLiquidityHook,\n RemoveLiquidityHookParams({\n sender: msg.sender,\n pool: pool,\n minAmountsOut: minAmountsOut,\n maxBptAmountIn: exactBptAmountIn,\n kind: RemoveLiquidityKind.SINGLE_TOKEN_EXACT_IN,\n wethIsEth: wethIsEth,\n userData: userData\n })\n )\n ),\n (uint256, uint256[], bytes)\n );\n\n return amountsOut[tokenIndex];\n }\n\n /// @inheritdoc IRouter\n function removeLiquiditySingleTokenExactOut(\n address pool,\n uint256 maxBptAmountIn,\n IERC20 tokenOut,\n uint256 exactAmountOut,\n bool wethIsEth,\n bytes memory userData\n ) external payable saveSender(msg.sender) returns (uint256 bptAmountIn) {\n (uint256[] memory minAmountsOut, ) = _getSingleInputArrayAndTokenIndex(pool, tokenOut, exactAmountOut);\n\n (bptAmountIn, , ) = abi.decode(\n _vault.unlock(\n abi.encodeCall(\n Router.removeLiquidityHook,\n RemoveLiquidityHookParams({\n sender: msg.sender,\n pool: pool,\n minAmountsOut: minAmountsOut,\n maxBptAmountIn: maxBptAmountIn,\n kind: RemoveLiquidityKind.SINGLE_TOKEN_EXACT_OUT,\n wethIsEth: wethIsEth,\n userData: userData\n })\n )\n ),\n (uint256, uint256[], bytes)\n );\n\n return bptAmountIn;\n }\n\n /// @inheritdoc IRouter\n function removeLiquidityCustom(\n address pool,\n uint256 maxBptAmountIn,\n uint256[] memory minAmountsOut,\n bool wethIsEth,\n bytes memory userData\n )\n external\n payable\n saveSender(msg.sender)\n returns (uint256 bptAmountIn, uint256[] memory amountsOut, bytes memory returnData)\n {\n return\n abi.decode(\n _vault.unlock(\n abi.encodeCall(\n Router.removeLiquidityHook,\n RemoveLiquidityHookParams({\n sender: msg.sender,\n pool: pool,\n minAmountsOut: minAmountsOut,\n maxBptAmountIn: maxBptAmountIn,\n kind: RemoveLiquidityKind.CUSTOM,\n wethIsEth: wethIsEth,\n userData: userData\n })\n )\n ),\n (uint256, uint256[], bytes)\n );\n }\n\n /// @inheritdoc IRouter\n function removeLiquidityRecovery(\n address pool,\n uint256 exactBptAmountIn,\n uint256[] memory minAmountsOut\n ) external payable returns (uint256[] memory amountsOut) {\n amountsOut = abi.decode(\n _vault.unlock(\n abi.encodeCall(Router.removeLiquidityRecoveryHook, (pool, msg.sender, exactBptAmountIn, minAmountsOut))\n ),\n (uint256[])\n );\n }\n\n /**\n * @notice Hook for removing liquidity.\n * @dev Can only be called by the Vault.\n * @param params Remove liquidity parameters (see IRouter for struct definition)\n * @return bptAmountIn BPT amount burned for the output tokens\n * @return amountsOut Actual token amounts transferred in exchange for the BPT\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function removeLiquidityHook(\n RemoveLiquidityHookParams calldata params\n )\n external\n nonReentrant\n onlyVault\n returns (uint256 bptAmountIn, uint256[] memory amountsOut, bytes memory returnData)\n {\n (bptAmountIn, amountsOut, returnData) = _vault.removeLiquidity(\n RemoveLiquidityParams({\n pool: params.pool,\n from: params.sender,\n maxBptAmountIn: params.maxBptAmountIn,\n minAmountsOut: params.minAmountsOut,\n kind: params.kind,\n userData: params.userData\n })\n );\n\n // minAmountsOut length is checked against tokens length at the Vault.\n IERC20[] memory tokens = _vault.getPoolTokens(params.pool);\n\n for (uint256 i = 0; i < tokens.length; ++i) {\n uint256 amountOut = amountsOut[i];\n if (amountOut == 0) {\n continue;\n }\n\n IERC20 token = tokens[i];\n\n // There can be only one WETH token in the pool.\n if (params.wethIsEth && address(token) == address(_weth)) {\n _weth.unwrapWethAndTransferToSender(_vault, params.sender, amountOut);\n } else {\n // Transfer the token to the sender (amountOut).\n _vault.sendTo(token, params.sender, amountOut);\n }\n }\n\n _returnEth(params.sender);\n }\n\n /**\n * @notice Hook for removing liquidity in Recovery Mode.\n * @dev Can only be called by the Vault, when the pool is in Recovery Mode.\n * @param pool Address of the liquidity pool\n * @param sender Account originating the remove liquidity operation\n * @param exactBptAmountIn BPT amount burned for the output tokens\n * @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n * @return amountsOut Actual token amounts transferred in exchange for the BPT\n */\n function removeLiquidityRecoveryHook(\n address pool,\n address sender,\n uint256 exactBptAmountIn,\n uint256[] memory minAmountsOut\n ) external nonReentrant onlyVault returns (uint256[] memory amountsOut) {\n amountsOut = _vault.removeLiquidityRecovery(pool, sender, exactBptAmountIn, minAmountsOut);\n\n IERC20[] memory tokens = _vault.getPoolTokens(pool);\n\n for (uint256 i = 0; i < tokens.length; ++i) {\n uint256 amountOut = amountsOut[i];\n if (amountOut > 0) {\n // Transfer the token to the sender (amountOut).\n _vault.sendTo(tokens[i], sender, amountOut);\n }\n }\n\n _returnEth(sender);\n }\n\n /***************************************************************************\n Swaps\n ***************************************************************************/\n\n /// @inheritdoc IRouter\n function swapSingleTokenExactIn(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 exactAmountIn,\n uint256 minAmountOut,\n uint256 deadline,\n bool wethIsEth,\n bytes calldata userData\n ) external payable saveSender(msg.sender) returns (uint256) {\n return\n abi.decode(\n _vault.unlock(\n abi.encodeCall(\n Router.swapSingleTokenHook,\n SwapSingleTokenHookParams({\n sender: msg.sender,\n kind: SwapKind.EXACT_IN,\n pool: pool,\n tokenIn: tokenIn,\n tokenOut: tokenOut,\n amountGiven: exactAmountIn,\n limit: minAmountOut,\n deadline: deadline,\n wethIsEth: wethIsEth,\n userData: userData\n })\n )\n ),\n (uint256)\n );\n }\n\n /// @inheritdoc IRouter\n function swapSingleTokenExactOut(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 exactAmountOut,\n uint256 maxAmountIn,\n uint256 deadline,\n bool wethIsEth,\n bytes calldata userData\n ) external payable saveSender(msg.sender) returns (uint256) {\n return\n abi.decode(\n _vault.unlock(\n abi.encodeCall(\n Router.swapSingleTokenHook,\n SwapSingleTokenHookParams({\n sender: msg.sender,\n kind: SwapKind.EXACT_OUT,\n pool: pool,\n tokenIn: tokenIn,\n tokenOut: tokenOut,\n amountGiven: exactAmountOut,\n limit: maxAmountIn,\n deadline: deadline,\n wethIsEth: wethIsEth,\n userData: userData\n })\n )\n ),\n (uint256)\n );\n }\n\n /**\n * @notice Hook for swaps.\n * @dev Can only be called by the Vault. Also handles native ETH.\n * @param params Swap parameters (see IRouter for struct definition)\n * @return amountCalculated Token amount calculated by the pool math (e.g., amountOut for an exact in swap)\n */\n function swapSingleTokenHook(\n SwapSingleTokenHookParams calldata params\n ) external nonReentrant onlyVault returns (uint256) {\n (uint256 amountCalculated, uint256 amountIn, uint256 amountOut) = _swapHook(params);\n\n IERC20 tokenIn = params.tokenIn;\n\n _takeTokenIn(params.sender, tokenIn, amountIn, params.wethIsEth);\n _sendTokenOut(params.sender, params.tokenOut, amountOut, params.wethIsEth);\n\n if (tokenIn == _weth) {\n // Return the rest of ETH to sender\n _returnEth(params.sender);\n }\n\n return amountCalculated;\n }\n\n function _swapHook(\n SwapSingleTokenHookParams calldata params\n ) internal returns (uint256 amountCalculated, uint256 amountIn, uint256 amountOut) {\n // The deadline is timestamp-based: it should not be relied upon for sub-minute accuracy.\n // solhint-disable-next-line not-rely-on-time\n if (block.timestamp > params.deadline) {\n revert SwapDeadline();\n }\n\n (amountCalculated, amountIn, amountOut) = _vault.swap(\n VaultSwapParams({\n kind: params.kind,\n pool: params.pool,\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n amountGivenRaw: params.amountGiven,\n limitRaw: params.limit,\n userData: params.userData\n })\n );\n }\n\n /*******************************************************************************\n Queries\n *******************************************************************************/\n\n /// @inheritdoc IRouter\n function queryAddLiquidityProportional(\n address pool,\n uint256 exactBptAmountOut,\n address sender,\n bytes memory userData\n ) external saveSender(sender) returns (uint256[] memory amountsIn) {\n (amountsIn, , ) = abi.decode(\n _vault.quote(\n abi.encodeCall(\n Router.queryAddLiquidityHook,\n AddLiquidityHookParams({\n // We use the Router as a sender to simplify basic query functions,\n // but it is possible to add liquidity to any recipient.\n sender: address(this),\n pool: pool,\n maxAmountsIn: _maxTokenLimits(pool),\n minBptAmountOut: exactBptAmountOut,\n kind: AddLiquidityKind.PROPORTIONAL,\n wethIsEth: false,\n userData: userData\n })\n )\n ),\n (uint256[], uint256, bytes)\n );\n }\n\n /// @inheritdoc IRouter\n function queryAddLiquidityUnbalanced(\n address pool,\n uint256[] memory exactAmountsIn,\n address sender,\n bytes memory userData\n ) external saveSender(sender) returns (uint256 bptAmountOut) {\n (, bptAmountOut, ) = abi.decode(\n _vault.quote(\n abi.encodeCall(\n Router.queryAddLiquidityHook,\n AddLiquidityHookParams({\n // We use the Router as a sender to simplify basic query functions,\n // but it is possible to add liquidity to any recipient.\n sender: address(this),\n pool: pool,\n maxAmountsIn: exactAmountsIn,\n minBptAmountOut: 0,\n kind: AddLiquidityKind.UNBALANCED,\n wethIsEth: false,\n userData: userData\n })\n )\n ),\n (uint256[], uint256, bytes)\n );\n }\n\n /// @inheritdoc IRouter\n function queryAddLiquiditySingleTokenExactOut(\n address pool,\n IERC20 tokenIn,\n uint256 exactBptAmountOut,\n address sender,\n bytes memory userData\n ) external saveSender(sender) returns (uint256 amountIn) {\n (uint256[] memory maxAmountsIn, uint256 tokenIndex) = _getSingleInputArrayAndTokenIndex(\n pool,\n tokenIn,\n _MAX_AMOUNT\n );\n\n (uint256[] memory amountsIn, , ) = abi.decode(\n _vault.quote(\n abi.encodeCall(\n Router.queryAddLiquidityHook,\n AddLiquidityHookParams({\n // We use the Router as a sender to simplify basic query functions,\n // but it is possible to add liquidity to any recipient.\n sender: address(this),\n pool: pool,\n maxAmountsIn: maxAmountsIn,\n minBptAmountOut: exactBptAmountOut,\n kind: AddLiquidityKind.SINGLE_TOKEN_EXACT_OUT,\n wethIsEth: false,\n userData: userData\n })\n )\n ),\n (uint256[], uint256, bytes)\n );\n\n return amountsIn[tokenIndex];\n }\n\n /// @inheritdoc IRouter\n function queryAddLiquidityCustom(\n address pool,\n uint256[] memory maxAmountsIn,\n uint256 minBptAmountOut,\n address sender,\n bytes memory userData\n ) external saveSender(sender) returns (uint256[] memory amountsIn, uint256 bptAmountOut, bytes memory returnData) {\n return\n abi.decode(\n _vault.quote(\n abi.encodeCall(\n Router.queryAddLiquidityHook,\n AddLiquidityHookParams({\n // We use the Router as a sender to simplify basic query functions,\n // but it is possible to add liquidity to any recipient.\n sender: address(this),\n pool: pool,\n maxAmountsIn: maxAmountsIn,\n minBptAmountOut: minBptAmountOut,\n kind: AddLiquidityKind.CUSTOM,\n wethIsEth: false,\n userData: userData\n })\n )\n ),\n (uint256[], uint256, bytes)\n );\n }\n\n /**\n * @notice Hook for add liquidity queries.\n * @dev Can only be called by the Vault.\n * @param params Add liquidity parameters (see IRouter for struct definition)\n * @return amountsIn Actual token amounts in required as inputs\n * @return bptAmountOut Expected pool tokens to be minted\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function queryAddLiquidityHook(\n AddLiquidityHookParams calldata params\n ) external onlyVault returns (uint256[] memory amountsIn, uint256 bptAmountOut, bytes memory returnData) {\n (amountsIn, bptAmountOut, returnData) = _vault.addLiquidity(\n AddLiquidityParams({\n pool: params.pool,\n to: params.sender,\n maxAmountsIn: params.maxAmountsIn,\n minBptAmountOut: params.minBptAmountOut,\n kind: params.kind,\n userData: params.userData\n })\n );\n }\n\n /// @inheritdoc IRouter\n function queryRemoveLiquidityProportional(\n address pool,\n uint256 exactBptAmountIn,\n address sender,\n bytes memory userData\n ) external saveSender(sender) returns (uint256[] memory amountsOut) {\n uint256[] memory minAmountsOut = new uint256[](_vault.getPoolTokens(pool).length);\n (, amountsOut, ) = abi.decode(\n _vault.quote(\n abi.encodeCall(\n Router.queryRemoveLiquidityHook,\n RemoveLiquidityHookParams({\n // We use the Router as a sender to simplify basic query functions,\n // but it is possible to remove liquidity from any sender.\n sender: address(this),\n pool: pool,\n minAmountsOut: minAmountsOut,\n maxBptAmountIn: exactBptAmountIn,\n kind: RemoveLiquidityKind.PROPORTIONAL,\n wethIsEth: false,\n userData: userData\n })\n )\n ),\n (uint256, uint256[], bytes)\n );\n }\n\n /// @inheritdoc IRouter\n function queryRemoveLiquiditySingleTokenExactIn(\n address pool,\n uint256 exactBptAmountIn,\n IERC20 tokenOut,\n address sender,\n bytes memory userData\n ) external saveSender(sender) returns (uint256 amountOut) {\n // We cannot use 0 as min amount out, as this value is used to figure out the token index.\n (uint256[] memory minAmountsOut, uint256 tokenIndex) = _getSingleInputArrayAndTokenIndex(pool, tokenOut, 1);\n\n (, uint256[] memory amountsOut, ) = abi.decode(\n _vault.quote(\n abi.encodeCall(\n Router.queryRemoveLiquidityHook,\n RemoveLiquidityHookParams({\n // We use the Router as a sender to simplify basic query functions,\n // but it is possible to remove liquidity from any sender.\n sender: address(this),\n pool: pool,\n minAmountsOut: minAmountsOut,\n maxBptAmountIn: exactBptAmountIn,\n kind: RemoveLiquidityKind.SINGLE_TOKEN_EXACT_IN,\n wethIsEth: false,\n userData: userData\n })\n )\n ),\n (uint256, uint256[], bytes)\n );\n\n return amountsOut[tokenIndex];\n }\n\n /// @inheritdoc IRouter\n function queryRemoveLiquiditySingleTokenExactOut(\n address pool,\n IERC20 tokenOut,\n uint256 exactAmountOut,\n address sender,\n bytes memory userData\n ) external saveSender(sender) returns (uint256 bptAmountIn) {\n (uint256[] memory minAmountsOut, ) = _getSingleInputArrayAndTokenIndex(pool, tokenOut, exactAmountOut);\n\n (bptAmountIn, , ) = abi.decode(\n _vault.quote(\n abi.encodeCall(\n Router.queryRemoveLiquidityHook,\n RemoveLiquidityHookParams({\n // We use the Router as a sender to simplify basic query functions,\n // but it is possible to remove liquidity from any sender.\n sender: address(this),\n pool: pool,\n minAmountsOut: minAmountsOut,\n maxBptAmountIn: _MAX_AMOUNT,\n kind: RemoveLiquidityKind.SINGLE_TOKEN_EXACT_OUT,\n wethIsEth: false,\n userData: userData\n })\n )\n ),\n (uint256, uint256[], bytes)\n );\n\n return bptAmountIn;\n }\n\n /// @inheritdoc IRouter\n function queryRemoveLiquidityCustom(\n address pool,\n uint256 maxBptAmountIn,\n uint256[] memory minAmountsOut,\n address sender,\n bytes memory userData\n ) external saveSender(sender) returns (uint256 bptAmountIn, uint256[] memory amountsOut, bytes memory returnData) {\n return\n abi.decode(\n _vault.quote(\n abi.encodeCall(\n Router.queryRemoveLiquidityHook,\n RemoveLiquidityHookParams({\n // We use the Router as a sender to simplify basic query functions,\n // but it is possible to remove liquidity from any sender.\n sender: address(this),\n pool: pool,\n minAmountsOut: minAmountsOut,\n maxBptAmountIn: maxBptAmountIn,\n kind: RemoveLiquidityKind.CUSTOM,\n wethIsEth: false,\n userData: userData\n })\n )\n ),\n (uint256, uint256[], bytes)\n );\n }\n\n /// @inheritdoc IRouter\n function queryRemoveLiquidityRecovery(\n address pool,\n uint256 exactBptAmountIn\n ) external returns (uint256[] memory amountsOut) {\n return\n abi.decode(\n _vault.quote(\n abi.encodeCall(Router.queryRemoveLiquidityRecoveryHook, (pool, address(this), exactBptAmountIn))\n ),\n (uint256[])\n );\n }\n\n /**\n * @notice Hook for remove liquidity queries.\n * @dev Can only be called by the Vault.\n * @param params Remove liquidity parameters (see IRouter for struct definition)\n * @return bptAmountIn Pool token amount to be burned for the output tokens\n * @return amountsOut Expected token amounts to be transferred to the sender\n * @return returnData Arbitrary (optional) data with an encoded response from the pool\n */\n function queryRemoveLiquidityHook(\n RemoveLiquidityHookParams calldata params\n ) external onlyVault returns (uint256 bptAmountIn, uint256[] memory amountsOut, bytes memory returnData) {\n return\n _vault.removeLiquidity(\n RemoveLiquidityParams({\n pool: params.pool,\n from: params.sender,\n maxBptAmountIn: params.maxBptAmountIn,\n minAmountsOut: params.minAmountsOut,\n kind: params.kind,\n userData: params.userData\n })\n );\n }\n\n /**\n * @notice Hook for remove liquidity queries.\n * @dev Can only be called by the Vault.\n * @param pool The liquidity pool\n * @param sender Account originating the remove liquidity operation\n * @param exactBptAmountIn Pool token amount to be burned for the output tokens\n * @return amountsOut Expected token amounts to be transferred to the sender\n */\n function queryRemoveLiquidityRecoveryHook(\n address pool,\n address sender,\n uint256 exactBptAmountIn\n ) external onlyVault returns (uint256[] memory amountsOut) {\n uint256[] memory minAmountsOut = new uint256[](_vault.getPoolTokens(pool).length);\n return _vault.removeLiquidityRecovery(pool, sender, exactBptAmountIn, minAmountsOut);\n }\n\n /// @inheritdoc IRouter\n function querySwapSingleTokenExactIn(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 exactAmountIn,\n address sender,\n bytes memory userData\n ) external saveSender(sender) returns (uint256 amountCalculated) {\n return\n abi.decode(\n _vault.quote(\n abi.encodeCall(\n Router.querySwapHook,\n SwapSingleTokenHookParams({\n sender: msg.sender,\n kind: SwapKind.EXACT_IN,\n pool: pool,\n tokenIn: tokenIn,\n tokenOut: tokenOut,\n amountGiven: exactAmountIn,\n limit: 0,\n deadline: _MAX_AMOUNT,\n wethIsEth: false,\n userData: userData\n })\n )\n ),\n (uint256)\n );\n }\n\n /// @inheritdoc IRouter\n function querySwapSingleTokenExactOut(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 exactAmountOut,\n address sender,\n bytes memory userData\n ) external saveSender(sender) returns (uint256 amountCalculated) {\n return\n abi.decode(\n _vault.quote(\n abi.encodeCall(\n Router.querySwapHook,\n SwapSingleTokenHookParams({\n sender: msg.sender,\n kind: SwapKind.EXACT_OUT,\n pool: pool,\n tokenIn: tokenIn,\n tokenOut: tokenOut,\n amountGiven: exactAmountOut,\n limit: _MAX_AMOUNT,\n deadline: type(uint256).max,\n wethIsEth: false,\n userData: userData\n })\n )\n ),\n (uint256)\n );\n }\n\n /**\n * @notice Hook for swap queries.\n * @dev Can only be called by the Vault. Also handles native ETH.\n * @param params Swap parameters (see IRouter for struct definition)\n * @return amountCalculated Token amount calculated by the pool math (e.g., amountOut for an exact in swap)\n */\n function querySwapHook(\n SwapSingleTokenHookParams calldata params\n ) external nonReentrant onlyVault returns (uint256) {\n (uint256 amountCalculated, , ) = _swapHook(params);\n\n return amountCalculated;\n }\n}\n"},"@balancer-labs/v3-vault/contracts/RouterCommon.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20Permit } from \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\nimport { IPermit2 } from \"permit2/src/interfaces/IPermit2.sol\";\n\nimport { IRouterCommon } from \"@balancer-labs/v3-interfaces/contracts/vault/IRouterCommon.sol\";\nimport { IWETH } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol\";\nimport { IAllowanceTransfer } from \"permit2/src/interfaces/IAllowanceTransfer.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { InputHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\";\nimport { RevertCodec } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\";\nimport { Version } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\";\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\nimport { StorageSlotExtension } from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\";\nimport {\n TransientStorageHelpers\n} from \"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\";\n\nimport { SenderGuard } from \"./SenderGuard.sol\";\nimport { RouterWethLib } from \"./lib/RouterWethLib.sol\";\nimport { VaultGuard } from \"./VaultGuard.sol\";\n\n/**\n * @notice Abstract base contract for functions shared among all Routers.\n * @dev Common functionality includes access to the sender (which would normally be obscured, since msg.sender in the\n * Vault is the Router contract itself, not the account that invoked the Router), versioning, and the external\n * invocation functions (`permitBatchAndCall` and `multicall`).\n */\nabstract contract RouterCommon is IRouterCommon, SenderGuard, VaultGuard, ReentrancyGuardTransient, Version {\n using Address for address payable;\n using StorageSlotExtension for *;\n using RouterWethLib for IWETH;\n using SafeCast for *;\n\n // NOTE: If you use a constant, then it is simply replaced everywhere when this constant is used by what is written\n // after =. If you use immutable, the value is first calculated and then replaced everywhere. That means that if a\n // constant has executable variables, they will be executed every time the constant is used.\n\n // solhint-disable-next-line var-name-mixedcase\n bytes32 private immutable _IS_RETURN_ETH_LOCKED_SLOT =\n TransientStorageHelpers.calculateSlot(type(RouterCommon).name, \"isReturnEthLocked\");\n\n // solhint-disable-next-line var-name-mixedcase\n IWETH internal immutable _weth;\n\n IPermit2 internal immutable _permit2;\n\n /**\n * @notice Locks the return of excess ETH to the sender until the end of the function.\n * @dev This also encompasses the `saveSender` functionality.\n */\n modifier saveSenderAndManageEth() {\n bool isExternalSender = _saveSender(msg.sender);\n\n // Revert if a function with this modifier is called recursively (e.g., multicall).\n if (_isReturnEthLockedSlot().tload()) {\n revert ReentrancyGuardReentrantCall();\n }\n\n // Lock the return of ETH during execution\n _isReturnEthLockedSlot().tstore(true);\n _;\n _isReturnEthLockedSlot().tstore(false);\n\n address sender = _getSenderSlot().tload();\n _discardSenderIfRequired(isExternalSender);\n\n _returnEth(sender);\n }\n\n constructor(\n IVault vault,\n IWETH weth,\n IPermit2 permit2,\n string memory routerVersion\n ) SenderGuard() VaultGuard(vault) Version(routerVersion) {\n _weth = weth;\n _permit2 = permit2;\n }\n\n /// @inheritdoc IRouterCommon\n function getWeth() external view returns (IWETH) {\n return _weth;\n }\n\n /// @inheritdoc IRouterCommon\n function getPermit2() external view returns (IPermit2) {\n return _permit2;\n }\n\n /*******************************************************************************\n Utilities\n *******************************************************************************/\n\n struct SignatureParts {\n bytes32 r;\n bytes32 s;\n uint8 v;\n }\n\n /// @inheritdoc IRouterCommon\n function permitBatchAndCall(\n PermitApproval[] calldata permitBatch,\n bytes[] calldata permitSignatures,\n IAllowanceTransfer.PermitBatch calldata permit2Batch,\n bytes calldata permit2Signature,\n bytes[] calldata multicallData\n ) external payable virtual returns (bytes[] memory results) {\n _permitBatch(permitBatch, permitSignatures, permit2Batch, permit2Signature);\n\n // Execute all the required operations once permissions have been granted.\n return multicall(multicallData);\n }\n\n function _permitBatch(\n PermitApproval[] calldata permitBatch,\n bytes[] calldata permitSignatures,\n IAllowanceTransfer.PermitBatch calldata permit2Batch,\n bytes calldata permit2Signature\n ) internal nonReentrant {\n InputHelpers.ensureInputLengthMatch(permitBatch.length, permitSignatures.length);\n\n // Use Permit (ERC-2612) to grant allowances to Permit2 for tokens to swap,\n // and grant allowances to Vault for BPT tokens.\n for (uint256 i = 0; i < permitBatch.length; ++i) {\n bytes memory signature = permitSignatures[i];\n\n SignatureParts memory signatureParts = _getSignatureParts(signature);\n PermitApproval memory permitApproval = permitBatch[i];\n\n try\n IERC20Permit(permitApproval.token).permit(\n permitApproval.owner,\n address(this),\n permitApproval.amount,\n permitApproval.deadline,\n signatureParts.v,\n signatureParts.r,\n signatureParts.s\n )\n {\n // solhint-disable-previous-line no-empty-blocks\n // OK; carry on.\n } catch (bytes memory returnData) {\n // Did it fail because the permit was executed (possible DoS attack to make the transaction revert),\n // or was it something else (e.g., deadline, invalid signature)?\n if (\n IERC20(permitApproval.token).allowance(permitApproval.owner, address(this)) != permitApproval.amount\n ) {\n // It was something else, or allowance was used, so we should revert. Bubble up the revert reason.\n RevertCodec.bubbleUpRevert(returnData);\n }\n }\n }\n\n // Only call permit2 if there's something to do.\n if (permit2Batch.details.length > 0) {\n // Use Permit2 for tokens that are swapped and added into the Vault. Note that this call on Permit2 is\n // theoretically also vulnerable to the same DoS attack as above. This edge case was not mitigated\n // on-chain, mainly due to the increased complexity and cost of protecting the batch call.\n //\n // If this is a concern, we recommend submitting through a private node to avoid front-running the public\n // mempool. In any case, best practice is to always use expiring, limited approvals, and only with known\n // and trusted contracts.\n //\n // See https://www.immunebytes.com/blog/permit2-erc-20-token-approvals-and-associated-risks/.\n\n _permit2.permit(msg.sender, permit2Batch, permit2Signature);\n }\n }\n\n /// @inheritdoc IRouterCommon\n function multicall(\n bytes[] calldata data\n ) public payable virtual saveSenderAndManageEth returns (bytes[] memory results) {\n results = new bytes[](data.length);\n for (uint256 i = 0; i < data.length; ++i) {\n results[i] = Address.functionDelegateCall(address(this), data[i]);\n }\n return results;\n }\n\n function _getSignatureParts(bytes memory signature) private pure returns (SignatureParts memory signatureParts) {\n bytes32 r;\n bytes32 s;\n uint8 v;\n\n // solhint-disable-next-line no-inline-assembly\n assembly (\"memory-safe\") {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n\n signatureParts.r = r;\n signatureParts.s = s;\n signatureParts.v = v;\n }\n\n /**\n * @dev Returns excess ETH back to the contract caller. Checks for sufficient ETH balance are made right before\n * each deposit, ensuring it will revert with a friendly custom error. If there is any balance remaining when\n * `_returnEth` is called, return it to the sender.\n *\n * Because the caller might not know exactly how much ETH a Vault action will require, they may send extra.\n * Note that this excess value is returned *to the contract caller* (msg.sender). If caller and e.g. swap sender\n * are not the same (because the caller is a relayer for the sender), then it is up to the caller to manage this\n * returned ETH.\n */\n function _returnEth(address sender) internal {\n // It's cheaper to check the balance and return early than checking a transient variable.\n // Moreover, most operations will not have ETH to return.\n uint256 excess = address(this).balance;\n if (excess == 0) {\n return;\n }\n\n // If the return of ETH is locked, then don't return it,\n // because _returnEth will be called again at the end of the call.\n if (_isReturnEthLockedSlot().tload()) {\n return;\n }\n\n payable(sender).sendValue(excess);\n }\n\n /**\n * @dev Returns an array with `amountGiven` at `tokenIndex`, and 0 for every other index.\n * The returned array length matches the number of tokens in the pool.\n * Reverts if the given index is greater than or equal to the pool number of tokens.\n */\n function _getSingleInputArrayAndTokenIndex(\n address pool,\n IERC20 token,\n uint256 amountGiven\n ) internal view returns (uint256[] memory amountsGiven, uint256 tokenIndex) {\n uint256 numTokens;\n (numTokens, tokenIndex) = _vault.getPoolTokenCountAndIndexOfToken(pool, token);\n amountsGiven = new uint256[](numTokens);\n amountsGiven[tokenIndex] = amountGiven;\n }\n\n function _takeTokenIn(address sender, IERC20 tokenIn, uint256 amountIn, bool wethIsEth) internal {\n // If the tokenIn is ETH, then wrap `amountIn` into WETH.\n if (wethIsEth && tokenIn == _weth) {\n _weth.wrapEthAndSettle(_vault, amountIn);\n } else {\n if (amountIn > 0) {\n // Send the tokenIn amount to the Vault.\n _permit2.transferFrom(sender, address(_vault), amountIn.toUint160(), address(tokenIn));\n _vault.settle(tokenIn, amountIn);\n }\n }\n }\n\n function _sendTokenOut(address sender, IERC20 tokenOut, uint256 amountOut, bool wethIsEth) internal {\n if (amountOut == 0) {\n return;\n }\n\n // If the tokenOut is ETH, then unwrap `amountOut` into ETH.\n if (wethIsEth && tokenOut == _weth) {\n _weth.unwrapWethAndTransferToSender(_vault, sender, amountOut);\n } else {\n // Receive the tokenOut amountOut.\n _vault.sendTo(tokenOut, sender, amountOut);\n }\n }\n\n function _maxTokenLimits(address pool) internal view returns (uint256[] memory maxLimits) {\n uint256 numTokens = _vault.getPoolTokens(pool).length;\n maxLimits = new uint256[](numTokens);\n for (uint256 i = 0; i < numTokens; ++i) {\n maxLimits[i] = _MAX_AMOUNT;\n }\n }\n\n function _isReturnEthLockedSlot() internal view returns (StorageSlotExtension.BooleanSlotType) {\n return _IS_RETURN_ETH_LOCKED_SLOT.asBoolean();\n }\n\n /**\n * @dev Enables the Router to receive ETH. This is required for it to be able to unwrap WETH, which sends ETH to the\n * caller.\n *\n * Any ETH sent to the Router outside of the WETH unwrapping mechanism would be forever locked inside the Router, so\n * we prevent that from happening. Other mechanisms used to send ETH to the Router (such as being the recipient of\n * an ETH swap, Pool exit or withdrawal, contract self-destruction, or receiving the block mining reward) will\n * result in locked funds, but are not otherwise a security or soundness issue. This check only exists as an attempt\n * to prevent user error.\n */\n receive() external payable {\n if (msg.sender != address(_weth)) {\n revert EthTransfer();\n }\n }\n}\n"},"@balancer-labs/v3-vault/contracts/SenderGuard.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IWETH } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol\";\nimport { ISenderGuard } from \"@balancer-labs/v3-interfaces/contracts/vault/ISenderGuard.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { StorageSlotExtension } from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\";\nimport {\n TransientStorageHelpers\n} from \"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\";\n\n/**\n * @notice Abstract base contract for functions shared among all Routers.\n * @dev Common functionality includes access to the sender (which would normally be obscured, since msg.sender in the\n * Vault is the Router contract itself, not the account that invoked the Router), versioning, and the external\n * invocation functions (`permitBatchAndCall` and `multicall`).\n */\nabstract contract SenderGuard is ISenderGuard {\n using StorageSlotExtension for *;\n\n // NOTE: If you use a constant, then it is simply replaced everywhere when this constant is used by what is written\n // after =. If you use immutable, the value is first calculated and then replaced everywhere. That means that if a\n // constant has executable variables, they will be executed every time the constant is used.\n\n // solhint-disable-next-line var-name-mixedcase\n bytes32 private immutable _SENDER_SLOT = TransientStorageHelpers.calculateSlot(type(SenderGuard).name, \"sender\");\n\n // Raw token balances are stored in half a slot, so the max is uint128. Moreover, given that amounts are usually\n // scaled inside the Vault, sending type(uint256).max would result in an overflow and revert.\n uint256 internal constant _MAX_AMOUNT = type(uint128).max;\n\n /**\n * @notice Saves the user or contract that initiated the current operation.\n * @dev It is possible to nest router calls (e.g., with reentrant hooks), but the sender returned by the Router's\n * `getSender` function will always be the \"outermost\" caller. Some transactions require the Router to identify\n * multiple senders. Consider the following example:\n *\n * - ContractA has a function that calls the Router, then calls ContractB with the output. ContractB in turn\n * calls back into the Router.\n * - Imagine further that ContractA is a pool with a \"before\" hook that also calls the Router.\n *\n * When the user calls the function on ContractA, there are three calls to the Router in the same transaction:\n * - 1st call: When ContractA calls the Router directly, to initiate an operation on the pool (say, a swap).\n * (Sender is contractA, initiator of the operation.)\n *\n * - 2nd call: When the pool operation invokes a hook (say onBeforeSwap), which calls back into the Router.\n * This is a \"nested\" call within the original pool operation. The nested call returns, then the\n * before hook returns, the Router completes the operation, and finally returns back to ContractA\n * with the result (e.g., a calculated amount of tokens).\n * (Nested call; sender is still ContractA through all of this.)\n *\n * - 3rd call: When the first operation is complete, ContractA calls ContractB, which in turn calls the Router.\n * (Not nested, as the original router call from contractA has returned. Sender is now ContractB.)\n */\n modifier saveSender(address sender) {\n bool isExternalSender = _saveSender(sender);\n _;\n _discardSenderIfRequired(isExternalSender);\n }\n\n function _saveSender(address sender) internal returns (bool isExternalSender) {\n address savedSender = _getSenderSlot().tload();\n\n // NOTE: Only the most external sender will be saved by the Router.\n if (savedSender == address(0)) {\n _getSenderSlot().tstore(sender);\n isExternalSender = true;\n }\n }\n\n function _discardSenderIfRequired(bool isExternalSender) internal {\n // Only the external sender shall be cleaned up; if it's not an external sender it means that\n // the value was not saved in this modifier.\n if (isExternalSender) {\n _getSenderSlot().tstore(address(0));\n }\n }\n\n constructor() {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /// @inheritdoc ISenderGuard\n function getSender() external view returns (address) {\n return _getSenderSlot().tload();\n }\n\n function _getSenderSlot() internal view returns (StorageSlotExtension.AddressSlotType) {\n return _SENDER_SLOT.asAddress();\n }\n}\n"},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { CommonAuthentication } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol\";\n\n/**\n * @notice Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\n * @dev The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned\n * functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same\n * function name.\n */\nabstract contract SingletonAuthentication is CommonAuthentication {\n // Use the contract's own address to disambiguate action identifiers.\n constructor(IVault vault) CommonAuthentication(vault, bytes32(uint256(uint160(address(this))))) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n /**\n * @notice Get the address of the Balancer Vault.\n * @return vault An interface pointer to the Vault\n */\n function getVault() public view returns (IVault) {\n return _getVault();\n }\n\n /**\n * @notice Get the address of the Authorizer.\n * @return authorizer An interface pointer to the Authorizer\n */\n function getAuthorizer() public view returns (IAuthorizer) {\n return getVault().getAuthorizer();\n }\n}\n"},"@balancer-labs/v3-vault/contracts/test/BasePoolMathMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { PoolSwapParams, Rounding } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\nimport { IBasePool } from \"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\";\n\nimport { BasePoolMath } from \"../BasePoolMath.sol\";\n\nabstract contract BasePoolMathMock is IBasePool {\n function computeInvariant(uint256[] memory balances, Rounding) public view virtual returns (uint256);\n\n function computeBalance(\n uint256[] memory balances,\n uint256 tokenInIndex,\n uint256 invariantRatio\n ) external view virtual returns (uint256 newBalance);\n\n function computeProportionalAmountsIn(\n uint256[] memory balances,\n uint256 bptTotalSupply,\n uint256 bptAmountOut\n ) external pure returns (uint256[] memory) {\n return BasePoolMath.computeProportionalAmountsIn(balances, bptTotalSupply, bptAmountOut);\n }\n\n function computeProportionalAmountsOut(\n uint256[] memory balances,\n uint256 bptTotalSupply,\n uint256 bptAmountIn\n ) external pure returns (uint256[] memory) {\n return BasePoolMath.computeProportionalAmountsOut(balances, bptTotalSupply, bptAmountIn);\n }\n\n function computeAddLiquidityUnbalanced(\n uint256[] memory currentBalances,\n uint256[] memory exactAmounts,\n uint256 totalSupply,\n uint256 swapFeePercentage\n ) external view returns (uint256 bptAmountOut, uint256[] memory swapFeeAmounts) {\n return\n BasePoolMath.computeAddLiquidityUnbalanced(\n currentBalances,\n exactAmounts,\n totalSupply,\n swapFeePercentage,\n IBasePool(address(this))\n );\n }\n\n function computeAddLiquiditySingleTokenExactOut(\n uint256[] memory currentBalances,\n uint256 tokenInIndex,\n uint256 exactBptAmountOut,\n uint256 totalSupply,\n uint256 swapFeePercentage\n ) external view returns (uint256 amountInWithFee, uint256[] memory swapFeeAmounts) {\n return\n BasePoolMath.computeAddLiquiditySingleTokenExactOut(\n currentBalances,\n tokenInIndex,\n exactBptAmountOut,\n totalSupply,\n swapFeePercentage,\n IBasePool(address(this))\n );\n }\n\n function computeRemoveLiquiditySingleTokenExactOut(\n uint256[] memory currentBalances,\n uint256 tokenOutIndex,\n uint256 exactAmountOut,\n uint256 totalSupply,\n uint256 swapFeePercentage\n ) external view returns (uint256 bptAmountIn, uint256[] memory swapFeeAmounts) {\n return\n BasePoolMath.computeRemoveLiquiditySingleTokenExactOut(\n currentBalances,\n tokenOutIndex,\n exactAmountOut,\n totalSupply,\n swapFeePercentage,\n IBasePool(address(this))\n );\n }\n\n function computeRemoveLiquiditySingleTokenExactIn(\n uint256[] memory currentBalances,\n uint256 tokenOutIndex,\n uint256 exactBptAmountIn,\n uint256 totalSupply,\n uint256 swapFeePercentage\n ) external view returns (uint256 amountOutWithFee, uint256[] memory swapFeeAmounts) {\n return\n BasePoolMath.computeRemoveLiquiditySingleTokenExactIn(\n currentBalances,\n tokenOutIndex,\n exactBptAmountIn,\n totalSupply,\n swapFeePercentage,\n IBasePool(address(this))\n );\n }\n\n function getMinimumInvariantRatio() external pure override returns (uint256) {\n return 0;\n }\n\n function getMaximumInvariantRatio() external pure override returns (uint256) {\n return 1_000_000 * 1e18;\n }\n\n function getMinimumSwapFeePercentage() external pure override returns (uint256) {\n return 0;\n }\n\n function getMaximumSwapFeePercentage() external pure override returns (uint256) {\n return 1e18;\n }\n\n function onSwap(PoolSwapParams calldata) external pure returns (uint256) {\n revert(\"Not implemented\");\n }\n}\n"},"@balancer-labs/v3-vault/contracts/test/BasicAuthorizerMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\n\ncontract BasicAuthorizerMock is IAuthorizer {\n // Simple, to avoid bringing in EnumerableSet, etc.\n mapping(bytes32 actionId => mapping(address account => bool hasRole)) private _roles;\n\n // Could generalize better, but wanted to make minimal changes.\n mapping(bytes32 actionId => mapping(address account => mapping(address whereAddress => bool hasRole)))\n private _specificRoles;\n\n /// @inheritdoc IAuthorizer\n function canPerform(bytes32 role, address account, address where) external view returns (bool) {\n return hasSpecificRole(role, account, where) || hasRole(role, account);\n }\n\n function grantRole(bytes32 role, address account) external {\n _roles[role][account] = true;\n }\n\n function revokeRole(bytes32 role, address account) external {\n _roles[role][account] = false;\n }\n\n function hasRole(bytes32 role, address account) public view returns (bool) {\n return _roles[role][account];\n }\n\n // Functions for targeted permissions\n\n function grantSpecificRole(bytes32 role, address account, address where) external {\n _specificRoles[role][account][where] = true;\n }\n\n function revokeSpecificRole(bytes32 role, address account, address where) external {\n _specificRoles[role][account][where] = false;\n }\n\n function hasSpecificRole(bytes32 role, address account, address where) public view returns (bool) {\n return _specificRoles[role][account][where];\n }\n}\n"},"@balancer-labs/v3-vault/contracts/test/BatchRouterMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IPermit2 } from \"permit2/src/interfaces/IPermit2.sol\";\n\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport { IWETH } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol\";\n\nimport {\n AddressToUintMappingSlot\n} from \"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\";\nimport {\n TransientEnumerableSet\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/TransientEnumerableSet.sol\";\n\nimport { BatchRouter } from \"../BatchRouter.sol\";\n\nstring constant MOCK_BATCH_ROUTER_VERSION = \"Mock BatchRouter v1\";\n\ncontract BatchRouterMock is BatchRouter {\n constructor(\n IVault vault,\n IWETH weth,\n IPermit2 permit2\n ) BatchRouter(vault, weth, permit2, MOCK_BATCH_ROUTER_VERSION) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n function manualGetCurrentSwapTokensInSlot() external view returns (bytes32) {\n TransientEnumerableSet.AddressSet storage enumerableSet = _currentSwapTokensIn();\n\n bytes32 slot;\n assembly {\n slot := enumerableSet.slot\n }\n\n return slot;\n }\n\n function manualGetCurrentSwapTokensOutSlot() external view returns (bytes32) {\n TransientEnumerableSet.AddressSet storage enumerableSet = _currentSwapTokensOut();\n\n bytes32 slot;\n assembly {\n slot := enumerableSet.slot\n }\n\n return slot;\n }\n\n function manualGetCurrentSwapTokenInAmounts() external view returns (AddressToUintMappingSlot) {\n return _currentSwapTokenInAmounts();\n }\n\n function manualGetCurrentSwapTokenOutAmounts() external view returns (AddressToUintMappingSlot) {\n return _currentSwapTokenOutAmounts();\n }\n\n function manualGetSettledTokenAmounts() external view returns (AddressToUintMappingSlot) {\n return _settledTokenAmounts();\n }\n}\n"},"@balancer-labs/v3-vault/contracts/test/BufferRouterMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IPermit2 } from \"permit2/src/interfaces/IPermit2.sol\";\n\nimport { IWETH } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { BufferRouter } from \"../BufferRouter.sol\";\n\nstring constant MOCK_BUFFER_ROUTER_VERSION = \"Mock Router v1\";\n\ncontract BufferRouterMock is BufferRouter {\n error MockErrorCode();\n\n constructor(\n IVault vault,\n IWETH weth,\n IPermit2 permit2\n ) BufferRouter(vault, weth, permit2, MOCK_BUFFER_ROUTER_VERSION) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n function manualReentrancyAddLiquidityToBufferHook() external nonReentrant {\n BufferRouter(payable(this)).addLiquidityToBufferHook(IERC4626(address(0)), 0, 0, 0, address(0));\n }\n\n function manualReentrancyInitializeBufferHook() external nonReentrant {\n BufferRouter(payable(this)).initializeBufferHook(IERC4626(address(0)), 0, 0, 0, address(0));\n }\n}\n"},"@balancer-labs/v3-vault/contracts/test/InputHelpersMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { TokenConfig } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { InputHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\";\n\ncontract InputHelpersMock {\n function sortTokens(IERC20[] memory tokens) external pure returns (IERC20[] memory) {\n return InputHelpers.sortTokens(tokens);\n }\n\n function ensureSortedTokens(IERC20[] memory tokens) external pure {\n InputHelpers.ensureSortedTokens(tokens);\n }\n\n function sortTokenConfig(TokenConfig[] memory tokenConfig) public pure returns (TokenConfig[] memory) {\n for (uint256 i = 0; i < tokenConfig.length - 1; ++i) {\n for (uint256 j = 0; j < tokenConfig.length - i - 1; j++) {\n if (tokenConfig[j].token > tokenConfig[j + 1].token) {\n // Swap if they're out of order.\n (tokenConfig[j], tokenConfig[j + 1]) = (tokenConfig[j + 1], tokenConfig[j]);\n }\n }\n }\n\n return tokenConfig;\n }\n}\n"},"@balancer-labs/v3-vault/contracts/test/PoolFactoryMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { Create2 } from \"@openzeppelin/contracts/utils/Create2.sol\";\n\nimport { IBasePoolFactory } from \"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { FactoryWidePauseWindow } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/FactoryWidePauseWindow.sol\";\n\nimport { SingletonAuthentication } from \"../SingletonAuthentication.sol\";\nimport { PoolMock } from \"./PoolMock.sol\";\n\ncontract PoolFactoryMock is IBasePoolFactory, SingletonAuthentication, FactoryWidePauseWindow {\n uint256 private constant DEFAULT_SWAP_FEE = 0;\n\n IVault private immutable _vault;\n\n // Avoid dependency on BasePoolFactory; copy storage here.\n mapping(address pool => bool isFromFactory) private _isPoolFromFactory;\n bool private _disabled;\n\n constructor(\n IVault vault,\n uint32 pauseWindowDuration\n ) SingletonAuthentication(vault) FactoryWidePauseWindow(pauseWindowDuration) {\n _vault = vault;\n }\n\n function createPool(string memory name, string memory symbol) external returns (address) {\n PoolMock newPool = new PoolMock(IVault(address(_vault)), name, symbol);\n _registerPoolWithFactory(address(newPool));\n return address(newPool);\n }\n\n function registerTestPool(address pool, TokenConfig[] memory tokenConfig) external {\n PoolRoleAccounts memory roleAccounts;\n\n _vault.registerPool(\n pool,\n tokenConfig,\n DEFAULT_SWAP_FEE,\n getNewPoolPauseWindowEndTime(),\n false,\n roleAccounts,\n address(0), // No hook contract\n _getDefaultLiquidityManagement()\n );\n }\n\n function registerPoolWithHook(address pool, TokenConfig[] memory tokenConfig, address poolHooksContract) external {\n PoolRoleAccounts memory roleAccounts;\n\n _vault.registerPool(\n pool,\n tokenConfig,\n DEFAULT_SWAP_FEE,\n getNewPoolPauseWindowEndTime(),\n false,\n roleAccounts,\n poolHooksContract,\n _getDefaultLiquidityManagement()\n );\n }\n\n function registerTestPool(\n address pool,\n TokenConfig[] memory tokenConfig,\n address poolHooksContract,\n address poolCreator\n ) external {\n PoolRoleAccounts memory roleAccounts;\n roleAccounts.poolCreator = poolCreator;\n\n _vault.registerPool(\n pool,\n tokenConfig,\n DEFAULT_SWAP_FEE,\n getNewPoolPauseWindowEndTime(),\n false,\n roleAccounts,\n poolHooksContract,\n _getDefaultLiquidityManagement()\n );\n }\n\n function registerGeneralTestPool(\n address pool,\n TokenConfig[] memory tokenConfig,\n uint256 swapFee,\n uint32 pauseWindowDuration,\n bool protocolFeeExempt,\n PoolRoleAccounts memory roleAccounts,\n address poolHooksContract\n ) external {\n _vault.registerPool(\n pool,\n tokenConfig,\n swapFee,\n uint32(block.timestamp) + pauseWindowDuration,\n protocolFeeExempt,\n roleAccounts,\n poolHooksContract,\n _getDefaultLiquidityManagement()\n );\n }\n\n function registerPool(\n address pool,\n TokenConfig[] memory tokenConfig,\n PoolRoleAccounts memory roleAccounts,\n address poolHooksContract,\n LiquidityManagement calldata liquidityManagement\n ) external {\n _vault.registerPool(\n pool,\n tokenConfig,\n DEFAULT_SWAP_FEE,\n getNewPoolPauseWindowEndTime(),\n false,\n roleAccounts,\n poolHooksContract,\n liquidityManagement\n );\n }\n\n function registerPoolWithSwapFee(\n address pool,\n TokenConfig[] memory tokenConfig,\n uint256 swapFeePercentage,\n address poolHooksContract,\n LiquidityManagement calldata liquidityManagement\n ) external {\n PoolRoleAccounts memory roleAccounts;\n\n _vault.registerPool(\n pool,\n tokenConfig,\n swapFeePercentage,\n getNewPoolPauseWindowEndTime(),\n false,\n roleAccounts,\n poolHooksContract,\n liquidityManagement\n );\n }\n\n // For tests; otherwise can't get the exact event arguments.\n function registerPoolAtTimestamp(\n address pool,\n TokenConfig[] memory tokenConfig,\n uint32 timestamp,\n PoolRoleAccounts memory roleAccounts,\n address poolHooksContract,\n LiquidityManagement calldata liquidityManagement\n ) external {\n _vault.registerPool(\n pool,\n tokenConfig,\n DEFAULT_SWAP_FEE,\n timestamp,\n false,\n roleAccounts,\n poolHooksContract,\n liquidityManagement\n );\n }\n\n function _getDefaultLiquidityManagement() private pure returns (LiquidityManagement memory) {\n LiquidityManagement memory liquidityManagement;\n liquidityManagement.enableAddLiquidityCustom = true;\n liquidityManagement.enableRemoveLiquidityCustom = true;\n return liquidityManagement;\n }\n\n /// @inheritdoc IBasePoolFactory\n function isPoolFromFactory(address pool) external view returns (bool) {\n return _isPoolFromFactory[pool];\n }\n\n function getPoolCount() external pure returns (uint256) {\n revert(\"Not implemented\");\n }\n\n function getPools() external pure returns (address[] memory) {\n revert(\"Not implemented\");\n }\n\n function getPoolsInRange(uint256, uint256) external pure returns (address[] memory) {\n revert(\"Not implemented\");\n }\n\n /// @inheritdoc IBasePoolFactory\n function isDisabled() public view returns (bool) {\n return _disabled;\n }\n\n /// @inheritdoc IBasePoolFactory\n function getDeploymentAddress(\n bytes memory constructorArgs,\n bytes32 salt\n ) public view returns (address deployAddress) {\n bytes memory creationCode = abi.encodePacked(type(PoolMock).creationCode, constructorArgs);\n bytes32 creationCodeHash = keccak256(creationCode);\n bytes32 finalSalt = _computeFinalSalt(salt);\n\n return Create2.computeAddress(finalSalt, creationCodeHash, address(this));\n }\n\n /// @inheritdoc IBasePoolFactory\n function disable() external authenticate {\n _ensureEnabled();\n\n _disabled = true;\n\n emit FactoryDisabled();\n }\n\n function _registerPoolWithFactory(address pool) internal virtual {\n _ensureEnabled();\n\n _isPoolFromFactory[pool] = true;\n\n emit PoolCreated(pool);\n }\n\n // Functions from BasePoolFactory\n\n function _ensureEnabled() internal view {\n if (isDisabled()) {\n revert Disabled();\n }\n }\n\n function _computeFinalSalt(bytes32 salt) internal view virtual returns (bytes32) {\n return keccak256(abi.encode(msg.sender, block.chainid, salt));\n }\n}\n"},"@balancer-labs/v3-vault/contracts/test/PoolHooksMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\n\nimport { ISenderGuard } from \"@balancer-labs/v3-interfaces/contracts/vault/ISenderGuard.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport { IVaultMock } from \"@balancer-labs/v3-interfaces/contracts/test/IVaultMock.sol\";\nimport \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\nimport { ScalingHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol\";\n\nimport { RateProviderMock } from \"./RateProviderMock.sol\";\nimport { VaultGuard } from \"../VaultGuard.sol\";\nimport { BaseHooks } from \"../BaseHooks.sol\";\n\ncontract PoolHooksMock is BaseHooks, VaultGuard {\n using FixedPoint for uint256;\n using ScalingHelpers for uint256;\n\n bool public failOnAfterInitialize;\n bool public failOnBeforeInitialize;\n bool public failOnComputeDynamicSwapFeeHook;\n bool public failOnBeforeSwapHook;\n bool public failOnAfterSwapHook;\n bool public failOnBeforeAddLiquidity;\n bool public failOnAfterAddLiquidity;\n bool public failOnBeforeRemoveLiquidity;\n bool public failOnAfterRemoveLiquidity;\n\n bool public shouldForceHookAdjustedAmounts;\n uint256[] public forcedHookAdjustedAmountsLiquidity;\n\n bool public changeTokenRateOnBeforeSwapHook;\n bool public changeTokenRateOnBeforeInitialize;\n bool public changeTokenRateOnBeforeAddLiquidity;\n bool public changeTokenRateOnBeforeRemoveLiquidity;\n\n bool public changePoolBalancesOnBeforeSwapHook;\n bool public changePoolBalancesOnBeforeAddLiquidityHook;\n bool public changePoolBalancesOnBeforeRemoveLiquidityHook;\n\n bool public shouldSettleDiscount;\n uint256 public hookSwapFeePercentage;\n uint256 public hookSwapDiscountPercentage;\n uint256 public addLiquidityHookFeePercentage;\n uint256 public addLiquidityHookDiscountPercentage;\n uint256 public removeLiquidityHookFeePercentage;\n uint256 public removeLiquidityHookDiscountPercentage;\n\n bool public swapReentrancyHookActive;\n address private _swapHookContract;\n bytes private _swapHookCalldata;\n\n RateProviderMock private _rateProvider;\n uint256 private _newTokenRate;\n uint256 private _dynamicSwapFee;\n address private _pool;\n address private _specialSender;\n uint256[] private _newBalancesRaw;\n\n // Bool created because in some tests the test file is used as router and does not implement getSender.\n bool public shouldIgnoreSavedSender;\n address private _savedSender;\n\n mapping(address pool => bool isFromFactory) private _allowedFactories;\n\n HookFlags private _hookFlags;\n\n constructor(IVault vault) VaultGuard(vault) {\n shouldSettleDiscount = true;\n }\n\n function onRegister(\n address factory,\n address,\n TokenConfig[] memory,\n LiquidityManagement calldata\n ) public view override returns (bool) {\n return _allowedFactories[factory];\n }\n\n function getHookFlags() public view override returns (HookFlags memory) {\n return _hookFlags;\n }\n\n function setHookFlags(HookFlags memory hookFlags) external {\n _hookFlags = hookFlags;\n }\n\n function onBeforeInitialize(uint256[] memory, bytes memory) public override returns (bool) {\n if (changeTokenRateOnBeforeInitialize) {\n _updateTokenRate();\n }\n\n return !failOnBeforeInitialize;\n }\n\n function onAfterInitialize(uint256[] memory, uint256, bytes memory) public view override returns (bool) {\n return !failOnAfterInitialize;\n }\n\n function onComputeDynamicSwapFeePercentage(\n PoolSwapParams calldata params,\n address,\n uint256\n ) public view override returns (bool, uint256) {\n uint256 finalSwapFee = _dynamicSwapFee;\n\n if (_specialSender != address(0)) {\n // Check the sender.\n address swapper = ISenderGuard(params.router).getSender();\n if (swapper == _specialSender) {\n finalSwapFee = 0;\n }\n }\n\n return (!failOnComputeDynamicSwapFeeHook, finalSwapFee);\n }\n\n function onBeforeSwap(PoolSwapParams calldata params, address) public override returns (bool) {\n if (shouldIgnoreSavedSender == false) {\n _savedSender = ISenderGuard(params.router).getSender();\n }\n\n if (changeTokenRateOnBeforeSwapHook) {\n _updateTokenRate();\n }\n\n if (changePoolBalancesOnBeforeSwapHook) {\n _setBalancesInVault();\n }\n\n if (swapReentrancyHookActive) {\n require(_swapHookContract != address(0), \"Hook contract not set\");\n require(_swapHookCalldata.length != 0, \"Hook calldata is empty\");\n swapReentrancyHookActive = false;\n Address.functionCall(_swapHookContract, _swapHookCalldata);\n }\n\n return !failOnBeforeSwapHook;\n }\n\n function onAfterSwap(AfterSwapParams calldata params) public override returns (bool, uint256) {\n // Check that actual pool balances match.\n (IERC20[] memory tokens, , uint256[] memory balancesRaw, ) = _vault.getPoolTokenInfo(params.pool);\n\n uint256[] memory currentLiveBalances = IVaultMock(address(_vault)).getCurrentLiveBalances(params.pool);\n\n (uint256[] memory scalingFactors, uint256[] memory rates) = _vault.getPoolTokenRates(params.pool);\n\n for (uint256 i = 0; i < tokens.length; ++i) {\n if (tokens[i] == params.tokenIn) {\n if (params.tokenInBalanceScaled18 != currentLiveBalances[i]) {\n return (false, params.amountCalculatedRaw);\n }\n uint256 expectedTokenInBalanceRaw = params.tokenInBalanceScaled18.toRawUndoRateRoundDown(\n scalingFactors[i],\n rates[i]\n );\n if (expectedTokenInBalanceRaw != balancesRaw[i]) {\n return (false, params.amountCalculatedRaw);\n }\n } else if (tokens[i] == params.tokenOut) {\n if (params.tokenOutBalanceScaled18 != currentLiveBalances[i]) {\n return (false, params.amountCalculatedRaw);\n }\n uint256 expectedTokenOutBalanceRaw = params.tokenOutBalanceScaled18.toRawUndoRateRoundDown(\n scalingFactors[i],\n rates[i]\n );\n if (expectedTokenOutBalanceRaw != balancesRaw[i]) {\n return (false, params.amountCalculatedRaw);\n }\n }\n }\n\n uint256 hookAdjustedAmountCalculatedRaw = params.amountCalculatedRaw;\n if (hookSwapFeePercentage > 0) {\n uint256 hookFee = hookAdjustedAmountCalculatedRaw.mulDown(hookSwapFeePercentage);\n if (hookFee > 0) {\n if (params.kind == SwapKind.EXACT_IN) {\n hookAdjustedAmountCalculatedRaw -= hookFee;\n _vault.sendTo(params.tokenOut, address(this), hookFee);\n } else {\n hookAdjustedAmountCalculatedRaw += hookFee;\n _vault.sendTo(params.tokenIn, address(this), hookFee);\n }\n }\n } else if (hookSwapDiscountPercentage > 0) {\n uint256 hookDiscount = hookAdjustedAmountCalculatedRaw.mulDown(hookSwapDiscountPercentage);\n if (hookDiscount > 0) {\n if (params.kind == SwapKind.EXACT_IN) {\n hookAdjustedAmountCalculatedRaw += hookDiscount;\n\n if (shouldSettleDiscount) {\n params.tokenOut.transfer(address(_vault), hookDiscount);\n _vault.settle(params.tokenOut, hookDiscount);\n }\n } else {\n hookAdjustedAmountCalculatedRaw -= hookDiscount;\n\n if (shouldSettleDiscount) {\n params.tokenIn.transfer(address(_vault), hookDiscount);\n _vault.settle(params.tokenIn, hookDiscount);\n }\n }\n }\n }\n\n return (params.amountCalculatedScaled18 > 0 && !failOnAfterSwapHook, hookAdjustedAmountCalculatedRaw);\n }\n\n // Liquidity lifecycle hooks\n\n function onBeforeAddLiquidity(\n address router,\n address,\n AddLiquidityKind,\n uint256[] memory,\n uint256,\n uint256[] memory,\n bytes memory\n ) public override returns (bool) {\n if (shouldIgnoreSavedSender == false) {\n _savedSender = ISenderGuard(router).getSender();\n }\n\n if (changeTokenRateOnBeforeAddLiquidity) {\n _updateTokenRate();\n }\n\n if (changePoolBalancesOnBeforeAddLiquidityHook) {\n _setBalancesInVault();\n }\n\n return !failOnBeforeAddLiquidity;\n }\n\n function onBeforeRemoveLiquidity(\n address router,\n address,\n RemoveLiquidityKind,\n uint256,\n uint256[] memory,\n uint256[] memory,\n bytes memory\n ) public override returns (bool) {\n if (shouldIgnoreSavedSender == false) {\n _savedSender = ISenderGuard(router).getSender();\n }\n\n if (changeTokenRateOnBeforeRemoveLiquidity) {\n _updateTokenRate();\n }\n\n if (changePoolBalancesOnBeforeRemoveLiquidityHook) {\n _setBalancesInVault();\n }\n\n return !failOnBeforeRemoveLiquidity;\n }\n\n function onAfterAddLiquidity(\n address,\n address pool,\n AddLiquidityKind,\n uint256[] memory,\n uint256[] memory amountsInRaw,\n uint256,\n uint256[] memory,\n bytes memory\n ) public override returns (bool, uint256[] memory hookAdjustedAmountsInRaw) {\n // Forces the hook answer to test HooksConfigLib.\n if (shouldForceHookAdjustedAmounts) {\n return (true, forcedHookAdjustedAmountsLiquidity);\n }\n\n (IERC20[] memory tokens, , , ) = _vault.getPoolTokenInfo(pool);\n hookAdjustedAmountsInRaw = amountsInRaw;\n\n if (addLiquidityHookFeePercentage > 0) {\n for (uint256 i = 0; i < amountsInRaw.length; i++) {\n uint256 hookFee = amountsInRaw[i].mulDown(addLiquidityHookFeePercentage);\n if (hookFee > 0) {\n hookAdjustedAmountsInRaw[i] += hookFee;\n _vault.sendTo(tokens[i], address(this), hookFee);\n }\n }\n } else if (addLiquidityHookDiscountPercentage > 0) {\n for (uint256 i = 0; i < amountsInRaw.length; i++) {\n IERC20 token = tokens[i];\n\n uint256 hookDiscount = amountsInRaw[i].mulDown(addLiquidityHookDiscountPercentage);\n if (hookDiscount > 0) {\n token.transfer(address(_vault), hookDiscount);\n hookAdjustedAmountsInRaw[i] -= hookDiscount;\n _vault.settle(token, hookDiscount);\n }\n }\n }\n\n return (!failOnAfterAddLiquidity, hookAdjustedAmountsInRaw);\n }\n\n function onAfterRemoveLiquidity(\n address,\n address pool,\n RemoveLiquidityKind,\n uint256,\n uint256[] memory,\n uint256[] memory amountsOutRaw,\n uint256[] memory,\n bytes memory\n ) public override returns (bool, uint256[] memory hookAdjustedAmountsOutRaw) {\n // Forces the hook answer to test HooksConfigLib.\n if (shouldForceHookAdjustedAmounts) {\n return (true, forcedHookAdjustedAmountsLiquidity);\n }\n\n (IERC20[] memory tokens, , , ) = _vault.getPoolTokenInfo(pool);\n hookAdjustedAmountsOutRaw = amountsOutRaw;\n\n if (removeLiquidityHookFeePercentage > 0) {\n for (uint256 i = 0; i < amountsOutRaw.length; i++) {\n uint256 hookFee = amountsOutRaw[i].mulDown(removeLiquidityHookFeePercentage);\n if (hookFee > 0) {\n hookAdjustedAmountsOutRaw[i] -= hookFee;\n _vault.sendTo(tokens[i], address(this), hookFee);\n }\n }\n } else if (removeLiquidityHookDiscountPercentage > 0) {\n for (uint256 i = 0; i < amountsOutRaw.length; i++) {\n uint256 hookDiscount = amountsOutRaw[i].mulDown(removeLiquidityHookDiscountPercentage);\n IERC20 token = tokens[i];\n\n if (hookDiscount > 0) {\n token.transfer(address(_vault), hookDiscount);\n hookAdjustedAmountsOutRaw[i] += hookDiscount;\n _vault.settle(token, hookDiscount);\n }\n }\n }\n\n return (!failOnAfterRemoveLiquidity, hookAdjustedAmountsOutRaw);\n }\n\n /***********************************************************\n Set flags to fail\n ***********************************************************/\n\n function setFailOnAfterInitializeHook(bool fail) external {\n failOnAfterInitialize = fail;\n }\n\n function setFailOnBeforeInitializeHook(bool fail) external {\n failOnBeforeInitialize = fail;\n }\n\n function setFailOnComputeDynamicSwapFeeHook(bool fail) external {\n failOnComputeDynamicSwapFeeHook = fail;\n }\n\n function setFailOnBeforeSwapHook(bool fail) external {\n failOnBeforeSwapHook = fail;\n }\n\n function setFailOnAfterSwapHook(bool fail) external {\n failOnAfterSwapHook = fail;\n }\n\n function setFailOnBeforeAddLiquidityHook(bool fail) external {\n failOnBeforeAddLiquidity = fail;\n }\n\n function setFailOnAfterAddLiquidityHook(bool fail) external {\n failOnAfterAddLiquidity = fail;\n }\n\n function setFailOnBeforeRemoveLiquidityHook(bool fail) external {\n failOnBeforeRemoveLiquidity = fail;\n }\n\n function setFailOnAfterRemoveLiquidityHook(bool fail) external {\n failOnAfterRemoveLiquidity = fail;\n }\n\n /***********************************************************\n Set hooks behavior\n ***********************************************************/\n\n function setChangePoolBalancesOnBeforeSwapHook(bool changeBalances, uint256[] memory newBalancesRaw) external {\n changePoolBalancesOnBeforeSwapHook = changeBalances;\n _newBalancesRaw = newBalancesRaw;\n }\n\n function setChangePoolBalancesOnBeforeAddLiquidityHook(\n bool changeBalances,\n uint256[] memory newBalancesRaw\n ) external {\n changePoolBalancesOnBeforeAddLiquidityHook = changeBalances;\n _newBalancesRaw = newBalancesRaw;\n }\n\n function setChangePoolBalancesOnBeforeRemoveLiquidityHook(\n bool changeBalances,\n uint256[] memory newBalancesRaw\n ) external {\n changePoolBalancesOnBeforeRemoveLiquidityHook = changeBalances;\n _newBalancesRaw = newBalancesRaw;\n }\n\n function setChangeTokenRateOnBeforeInitializeHook(\n bool changeRate,\n RateProviderMock rateProvider,\n uint256 newTokenRate\n ) external {\n changeTokenRateOnBeforeInitialize = changeRate;\n _rateProvider = rateProvider;\n _newTokenRate = newTokenRate;\n }\n\n function setChangeTokenRateOnBeforeSwapHook(\n bool changeRate,\n RateProviderMock rateProvider,\n uint256 newTokenRate\n ) external {\n changeTokenRateOnBeforeSwapHook = changeRate;\n _rateProvider = rateProvider;\n _newTokenRate = newTokenRate;\n }\n\n function setChangeTokenRateOnBeforeAddLiquidityHook(\n bool changeRate,\n RateProviderMock rateProvider,\n uint256 newTokenRate\n ) external {\n changeTokenRateOnBeforeAddLiquidity = changeRate;\n _rateProvider = rateProvider;\n _newTokenRate = newTokenRate;\n }\n\n function setChangeTokenRateOnBeforeRemoveLiquidityHook(\n bool changeRate,\n RateProviderMock rateProvider,\n uint256 newTokenRate\n ) external {\n changeTokenRateOnBeforeRemoveLiquidity = changeRate;\n _rateProvider = rateProvider;\n _newTokenRate = newTokenRate;\n }\n\n function setSwapReentrancyHookActive(bool _swapReentrancyHookActive) external {\n swapReentrancyHookActive = _swapReentrancyHookActive;\n }\n\n function setSwapReentrancyHook(address hookContract, bytes calldata data) external {\n _swapHookContract = hookContract;\n _swapHookCalldata = data;\n }\n\n function setSpecialSender(address sender) external {\n _specialSender = sender;\n }\n\n function setDynamicSwapFeePercentage(uint256 dynamicSwapFee) external {\n _dynamicSwapFee = dynamicSwapFee;\n }\n\n function setPool(address pool) external {\n _pool = pool;\n }\n\n function setShouldSettleDiscount(bool shouldSettleDiscountFlag) external {\n shouldSettleDiscount = shouldSettleDiscountFlag;\n }\n\n function setHookSwapFeePercentage(uint256 feePercentage) external {\n hookSwapFeePercentage = feePercentage;\n }\n\n function setHookSwapDiscountPercentage(uint256 discountPercentage) external {\n hookSwapDiscountPercentage = discountPercentage;\n }\n\n function setAddLiquidityHookFeePercentage(uint256 hookFeePercentage) public {\n addLiquidityHookFeePercentage = hookFeePercentage;\n }\n\n function setAddLiquidityHookDiscountPercentage(uint256 hookDiscountPercentage) public {\n addLiquidityHookDiscountPercentage = hookDiscountPercentage;\n }\n\n function setRemoveLiquidityHookFeePercentage(uint256 hookFeePercentage) public {\n removeLiquidityHookFeePercentage = hookFeePercentage;\n }\n\n function setRemoveLiquidityHookDiscountPercentage(uint256 hookDiscountPercentage) public {\n removeLiquidityHookDiscountPercentage = hookDiscountPercentage;\n }\n\n function enableForcedHookAdjustedAmountsLiquidity(uint256[] memory hookAdjustedAmountsLiquidity) public {\n shouldForceHookAdjustedAmounts = true;\n forcedHookAdjustedAmountsLiquidity = hookAdjustedAmountsLiquidity;\n }\n\n function disableForcedHookAdjustedAmounts() public {\n shouldForceHookAdjustedAmounts = false;\n }\n\n function allowFactory(address factory) external {\n _allowedFactories[factory] = true;\n }\n\n function denyFactory(address factory) external {\n _allowedFactories[factory] = false;\n }\n\n function setShouldIgnoreSavedSender(bool value) external {\n shouldIgnoreSavedSender = value;\n }\n\n function getSavedSender() external view returns (address) {\n return _savedSender;\n }\n\n /****************************************************************\n Helpers\n ****************************************************************/\n function _updateTokenRate() private {\n _rateProvider.mockRate(_newTokenRate);\n }\n\n function _setBalancesInVault() private {\n IERC20[] memory poolTokens = _vault.getPoolTokens(_pool);\n // We don't care about last live balances here, so we just use the same raw balances.\n IVaultMock(address(_vault)).manualSetPoolTokensAndBalances(_pool, poolTokens, _newBalancesRaw, _newBalancesRaw);\n }\n}\n"},"@balancer-labs/v3-vault/contracts/test/PoolMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IPoolLiquidity } from \"@balancer-labs/v3-interfaces/contracts/vault/IPoolLiquidity.sol\";\nimport { IBasePool } from \"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { BasePoolAuthentication } from \"@balancer-labs/v3-pool-utils/contracts/BasePoolAuthentication.sol\";\nimport { PoolInfo } from \"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol\";\n\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\n\nimport { BalancerPoolToken } from \"../BalancerPoolToken.sol\";\n\ncontract PoolMock is IBasePool, IPoolLiquidity, BalancerPoolToken, BasePoolAuthentication, PoolInfo {\n using FixedPoint for uint256;\n\n // Amounts in are multiplied by the multiplier, amounts out are divided by it.\n uint256 private _multiplier = FixedPoint.ONE;\n\n // If non-zero, use this return value for `getRate` (otherwise, defer to BalancerPoolToken's base implementation).\n uint256 private _mockRate;\n\n constructor(\n IVault vault,\n string memory name,\n string memory symbol\n ) BalancerPoolToken(vault, name, symbol) BasePoolAuthentication(vault, msg.sender) PoolInfo(vault) {\n // solhint-previous-line no-empty-blocks\n }\n\n function computeInvariant(uint256[] memory balances, Rounding) public pure returns (uint256) {\n // inv = x + y\n uint256 invariant;\n for (uint256 i = 0; i < balances.length; ++i) {\n invariant += balances[i];\n }\n return invariant;\n }\n\n /// @inheritdoc IBasePool\n function computeBalance(\n uint256[] memory balances,\n uint256 tokenInIndex,\n uint256 invariantRatio\n ) external pure returns (uint256 newBalance) {\n // inv = x + y\n uint256 invariant = computeInvariant(balances, Rounding.ROUND_DOWN);\n return (balances[tokenInIndex] + invariant.mulDown(invariantRatio)) - invariant;\n }\n\n function setMultiplier(uint256 newMultiplier) external {\n _multiplier = newMultiplier;\n }\n\n function onSwap(PoolSwapParams calldata params) external view override returns (uint256 amountCalculated) {\n return\n params.kind == SwapKind.EXACT_IN\n ? params.amountGivenScaled18.mulDown(_multiplier)\n : params.amountGivenScaled18.divDown(_multiplier);\n }\n\n function onAddLiquidityCustom(\n address,\n uint256[] memory maxAmountsInScaled18,\n uint256 minBptAmountOut,\n uint256[] memory,\n bytes memory userData\n ) external pure override returns (uint256[] memory, uint256, uint256[] memory, bytes memory) {\n return (maxAmountsInScaled18, minBptAmountOut, new uint256[](maxAmountsInScaled18.length), userData);\n }\n\n function onRemoveLiquidityCustom(\n address,\n uint256 maxBptAmountIn,\n uint256[] memory minAmountsOut,\n uint256[] memory,\n bytes memory userData\n ) external pure override returns (uint256, uint256[] memory, uint256[] memory, bytes memory) {\n return (maxBptAmountIn, minAmountsOut, new uint256[](minAmountsOut.length), userData);\n }\n\n function mockEventFunction(uint256 testValue) external {\n _vault.emitAuxiliaryEvent(\"TestEvent\", abi.encode(testValue));\n }\n\n /// @dev Even though pools do not handle scaling, we still need this for the tests.\n function getDecimalScalingFactors() external view returns (uint256[] memory scalingFactors) {\n (scalingFactors, ) = _vault.getPoolTokenRates(address(this));\n }\n\n function getMinimumSwapFeePercentage() external pure override returns (uint256) {\n return 0;\n }\n\n function getMaximumSwapFeePercentage() external pure override returns (uint256) {\n return FixedPoint.ONE;\n }\n\n function getMinimumInvariantRatio() external view virtual override returns (uint256) {\n return 0;\n }\n\n function getMaximumInvariantRatio() external view virtual override returns (uint256) {\n return 1e40; // Something just really big; should always work\n }\n\n function setMockRate(uint256 mockRate) external {\n _mockRate = mockRate;\n }\n\n function getRate() public view override returns (uint256) {\n return _mockRate == 0 ? super.getRate() : _mockRate;\n }\n}\n"},"@balancer-labs/v3-vault/contracts/test/ProtocolFeeControllerMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IVaultMock } from \"@balancer-labs/v3-interfaces/contracts/test/IVaultMock.sol\";\n\nimport { ProtocolFeeController } from \"../ProtocolFeeController.sol\";\n\ncontract ProtocolFeeControllerMock is ProtocolFeeController {\n constructor(IVaultMock vault_) ProtocolFeeController(vault_) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n function getPoolTokensAndCount(address pool) external view returns (IERC20[] memory tokens, uint256 numTokens) {\n return _getPoolTokensAndCount(pool);\n }\n\n function getPoolCreatorInfo(\n address pool\n ) external view returns (address poolCreator, uint256 creatorSwapFeePercentage, uint256 creatorYieldFeePercentage) {\n return (_getPoolCreator(pool), _poolCreatorSwapFeePercentages[pool], _poolCreatorYieldFeePercentages[pool]);\n }\n\n /// @dev Set pool creator swap fee percentage without any constraints.\n function manualSetPoolCreatorSwapFeePercentage(address pool, uint256 poolCreatorSwapFeePercentage) external {\n _poolCreatorSwapFeePercentages[pool] = poolCreatorSwapFeePercentage;\n IVaultMock(address(_vault)).manualUpdateAggregateSwapFeePercentage(\n pool,\n _getAggregateFeePercentage(pool, ProtocolFeeType.SWAP)\n );\n }\n}\n"},"@balancer-labs/v3-vault/contracts/test/RateProviderMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IRateProvider } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\";\n\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\n\ncontract RateProviderMock is IRateProvider {\n uint256 internal _rate;\n\n constructor() {\n _rate = FixedPoint.ONE;\n }\n\n /// @inheritdoc IRateProvider\n function getRate() external view override returns (uint256) {\n return _rate;\n }\n\n function mockRate(uint256 newRate) external {\n _rate = newRate;\n }\n}\n"},"@balancer-labs/v3-vault/contracts/test/RouterMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { IPermit2 } from \"permit2/src/interfaces/IPermit2.sol\";\n\nimport { IWETH } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol\";\nimport { SwapKind } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\nimport { IRouter } from \"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { RevertCodec } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\";\n\nimport { Router } from \"../Router.sol\";\n\nstring constant MOCK_ROUTER_VERSION = \"Mock Router v1\";\n\ncontract RouterMock is Router {\n using SafeCast for *;\n\n error MockErrorCode();\n\n constructor(IVault vault, IWETH weth, IPermit2 permit2) Router(vault, weth, permit2, MOCK_ROUTER_VERSION) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n function manualReentrancyInitializeHook() external nonReentrant {\n IRouter.InitializeHookParams memory hookParams;\n Router(payable(this)).initializeHook(hookParams);\n }\n\n function manualReentrancyAddLiquidityHook() external nonReentrant {\n AddLiquidityHookParams memory params;\n Router(payable(this)).addLiquidityHook(params);\n }\n\n function manualReentrancyRemoveLiquidityHook() external nonReentrant {\n RemoveLiquidityHookParams memory params;\n Router(payable(this)).removeLiquidityHook(params);\n }\n\n function manualReentrancyRemoveLiquidityRecoveryHook() external nonReentrant {\n Router(payable(this)).removeLiquidityRecoveryHook(address(0), address(0), 0, new uint256[](2));\n }\n\n function manualReentrancySwapSingleTokenHook() external nonReentrant {\n IRouter.SwapSingleTokenHookParams memory params;\n Router(payable(this)).swapSingleTokenHook(params);\n }\n\n function manualReentrancyQuerySwapHook() external nonReentrant {\n IRouter.SwapSingleTokenHookParams memory params;\n Router(payable(this)).querySwapHook(params);\n }\n\n function getSingleInputArrayAndTokenIndex(\n address pool,\n IERC20 token,\n uint256 amountGiven\n ) external view returns (uint256[] memory amountsGiven, uint256 tokenIndex) {\n return _getSingleInputArrayAndTokenIndex(pool, token, amountGiven);\n }\n\n function querySwapSingleTokenExactInAndRevert(\n address pool,\n IERC20 tokenIn,\n IERC20 tokenOut,\n uint256 exactAmountIn,\n bytes calldata userData\n ) external returns (uint256 amountCalculated) {\n try\n _vault.quoteAndRevert(\n abi.encodeCall(\n Router.querySwapHook,\n SwapSingleTokenHookParams({\n sender: msg.sender,\n kind: SwapKind.EXACT_IN,\n pool: pool,\n tokenIn: tokenIn,\n tokenOut: tokenOut,\n amountGiven: exactAmountIn,\n limit: 0,\n deadline: _MAX_AMOUNT,\n wethIsEth: false,\n userData: userData\n })\n )\n )\n {\n revert(\"Unexpected success\");\n } catch (bytes memory result) {\n return abi.decode(RevertCodec.catchEncodedResult(result), (uint256));\n }\n }\n\n function querySpoof() external returns (uint256) {\n try _vault.quoteAndRevert(abi.encodeWithSelector(RouterMock.querySpoofHook.selector)) {\n revert(\"Unexpected success\");\n } catch (bytes memory result) {\n return abi.decode(RevertCodec.catchEncodedResult(result), (uint256));\n }\n }\n\n function querySpoofHook() external pure {\n revert RevertCodec.Result(abi.encode(uint256(1234)));\n }\n\n function queryRevertErrorCode() external returns (uint256) {\n try _vault.quoteAndRevert(abi.encodeWithSelector(RouterMock.queryRevertErrorCodeHook.selector)) {\n revert(\"Unexpected success\");\n } catch (bytes memory result) {\n return abi.decode(RevertCodec.catchEncodedResult(result), (uint256));\n }\n }\n\n function queryRevertErrorCodeHook() external pure {\n revert MockErrorCode();\n }\n\n function queryRevertLegacy() external returns (uint256) {\n try _vault.quoteAndRevert(abi.encodeWithSelector(RouterMock.queryRevertLegacyHook.selector)) {\n revert(\"Unexpected success\");\n } catch (bytes memory result) {\n return abi.decode(RevertCodec.catchEncodedResult(result), (uint256));\n }\n }\n\n function queryRevertLegacyHook() external pure {\n revert(\"Legacy revert reason\");\n }\n\n function queryRevertPanic() external returns (uint256) {\n try _vault.quoteAndRevert(abi.encodeWithSelector(RouterMock.queryRevertPanicHook.selector)) {\n revert(\"Unexpected success\");\n } catch (bytes memory result) {\n return abi.decode(RevertCodec.catchEncodedResult(result), (uint256));\n }\n }\n\n function queryRevertPanicHook() external pure returns (uint256) {\n uint256 a = 10;\n uint256 b = 0;\n return a / b;\n }\n\n function queryRevertNoReason() external returns (uint256) {\n try _vault.quoteAndRevert(abi.encodeWithSelector(RouterMock.queryRevertNoReasonHook.selector)) {\n revert(\"Unexpected success\");\n } catch (bytes memory result) {\n return abi.decode(RevertCodec.catchEncodedResult(result), (uint256));\n }\n }\n\n function queryRevertNoReasonHook() external pure returns (uint256) {\n revert();\n }\n\n struct ManualAddRemoveLiquidityParams {\n address pool;\n address sender;\n uint256[] maxAmountsIn;\n uint256 minBptAmountOut;\n }\n\n function manualAddAndRemoveLiquidity(\n ManualAddRemoveLiquidityParams calldata params\n )\n external\n saveSender(msg.sender)\n returns (uint256[] memory amountsIn, uint256 bptAmountOut, uint256 bptAmountIn, uint256[] memory amountsOut)\n {\n return\n abi.decode(\n _vault.unlock(abi.encodeCall(RouterMock.manualAddAndRemoveLiquidityHook, params)),\n (uint256[], uint256, uint256, uint256[])\n );\n }\n\n function manualAddAndRemoveLiquidityHook(\n ManualAddRemoveLiquidityParams calldata params\n )\n external\n returns (uint256[] memory amountsIn, uint256 bptAmountOut, uint256 bptAmountIn, uint256[] memory amountsOut)\n {\n (amountsIn, bptAmountOut, ) = _vault.addLiquidity(\n AddLiquidityParams({\n pool: params.pool,\n to: params.sender,\n maxAmountsIn: params.maxAmountsIn,\n minBptAmountOut: params.minBptAmountOut,\n kind: AddLiquidityKind.PROPORTIONAL,\n userData: bytes(\"\")\n })\n );\n\n // maxAmountsIn length is checked against tokens length at the Vault.\n IERC20[] memory tokens = _vault.getPoolTokens(params.pool);\n\n for (uint256 i = 0; i < tokens.length; ++i) {\n IERC20 token = tokens[i];\n uint256 amountIn = amountsIn[i];\n if (amountIn == 0) {\n continue;\n }\n\n // Any value over MAX_UINT128 would revert above in `addLiquidity`, so this SafeCast shouldn't be\n // necessary. Done out of an abundance of caution.\n _permit2.transferFrom(params.sender, address(_vault), amountIn.toUint160(), address(token));\n _vault.settle(token, amountIn);\n }\n\n (bptAmountIn, amountsOut, ) = _vault.removeLiquidity(\n RemoveLiquidityParams({\n pool: params.pool,\n from: params.sender,\n maxBptAmountIn: IERC20(params.pool).balanceOf(params.sender),\n minAmountsOut: new uint256[](tokens.length),\n kind: RemoveLiquidityKind.PROPORTIONAL,\n userData: bytes(\"\")\n })\n );\n\n for (uint256 i = 0; i < tokens.length; ++i) {\n IERC20 token = tokens[i];\n uint256 amountOut = amountsOut[i];\n if (amountOut == 0) {\n continue;\n }\n\n // Transfer the token to the sender (amountOut).\n _vault.sendTo(token, params.sender, amountOut);\n }\n }\n}\n"},"@balancer-labs/v3-vault/contracts/test/VaultAdminMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\n\nimport { IVaultAdminMock } from \"@balancer-labs/v3-interfaces/contracts/test/IVaultAdminMock.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { PackedTokenBalance } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\";\n\nimport { VaultAdmin } from \"../VaultAdmin.sol\";\n\ncontract VaultAdminMock is IVaultAdminMock, VaultAdmin {\n using PackedTokenBalance for bytes32;\n\n constructor(\n IVault mainVault,\n uint32 pauseWindowDuration,\n uint32 bufferPeriodDuration,\n uint256 minTradeAmount,\n uint256 minWrapAmount\n ) VaultAdmin(mainVault, pauseWindowDuration, bufferPeriodDuration, minTradeAmount, minWrapAmount) {}\n\n function manualPauseVault() external {\n _setVaultPaused(true);\n }\n\n function manualUnpauseVault() external {\n _setVaultPaused(false);\n }\n\n function manualPausePool(address pool) external {\n _poolRoleAccounts[pool].pauseManager = msg.sender;\n _setPoolPaused(pool, true);\n }\n\n function manualUnpausePool(address pool) external {\n _poolRoleAccounts[pool].pauseManager = msg.sender;\n _setPoolPaused(pool, false);\n }\n\n function manualEnableRecoveryMode(address pool) external {\n _ensurePoolNotInRecoveryMode(pool);\n _setPoolRecoveryMode(pool, true);\n }\n\n function manualDisableRecoveryMode(address pool) external {\n _ensurePoolInRecoveryMode(pool);\n _setPoolRecoveryMode(pool, false);\n }\n\n function manualReentrancyInitializeBuffer(\n IERC4626 wrappedToken,\n uint256 amountUnderlying,\n uint256 amountWrapped,\n uint256 minIssuedShares,\n address sharesOwner\n ) external nonReentrant {\n IVault(address(this)).initializeBuffer(\n wrappedToken,\n amountUnderlying,\n amountWrapped,\n minIssuedShares,\n sharesOwner\n );\n }\n\n /// @dev Adds liquidity to buffer unbalanced, so it can unbalance the buffer.\n function addLiquidityToBufferUnbalancedForTests(\n IERC4626 wrappedToken,\n uint256 underlyingAmount,\n uint256 wrappedAmount\n ) public {\n bytes32 bufferBalances = _bufferTokenBalances[wrappedToken];\n\n if (underlyingAmount > 0) {\n IERC20(wrappedToken.asset()).transferFrom(msg.sender, address(this), underlyingAmount);\n _reservesOf[IERC20(wrappedToken.asset())] += underlyingAmount;\n // Issued shares amount = underlying amount.\n _bufferTotalShares[wrappedToken] += underlyingAmount;\n _bufferLpShares[wrappedToken][msg.sender] += underlyingAmount;\n }\n if (wrappedAmount > 0) {\n IERC20(address(wrappedToken)).transferFrom(msg.sender, address(this), wrappedAmount);\n _reservesOf[IERC20(address(wrappedToken))] += wrappedAmount;\n uint256 issuedSharesAmount = wrappedToken.previewRedeem(wrappedAmount);\n _bufferTotalShares[wrappedToken] += issuedSharesAmount;\n _bufferLpShares[wrappedToken][msg.sender] += issuedSharesAmount;\n }\n\n bufferBalances = PackedTokenBalance.toPackedBalance(\n bufferBalances.getBalanceRaw() + underlyingAmount,\n bufferBalances.getBalanceDerived() + wrappedAmount\n );\n _bufferTokenBalances[wrappedToken] = bufferBalances;\n }\n\n function manualReentrancyAddLiquidityToBuffer(\n IERC4626 wrappedToken,\n uint256 maxAmountUnderlyingInRaw,\n uint256 maxAmountWrappedInRaw,\n uint256 exactSharesToIssue,\n address sharesOwner\n ) external nonReentrant {\n IVault(address(this)).addLiquidityToBuffer(\n wrappedToken,\n maxAmountUnderlyingInRaw,\n maxAmountWrappedInRaw,\n exactSharesToIssue,\n sharesOwner\n );\n }\n\n function manualReentrancyRemoveLiquidityFromBufferHook(\n IERC4626 wrappedToken,\n uint256 sharesToRemove,\n uint256 minAmountUnderlyingOut,\n uint256 minAmountWrappedOut,\n address sharesOwner\n ) external nonReentrant {\n this.removeLiquidityFromBufferHook(\n wrappedToken,\n sharesToRemove,\n minAmountUnderlyingOut,\n minAmountWrappedOut,\n sharesOwner\n );\n }\n\n function manualReentrancyDisableRecoveryMode(address pool) external nonReentrant {\n this.disableRecoveryMode(pool);\n }\n\n function mockWithValidPercentage(uint256 percentage) external pure withValidPercentage(percentage) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n function mockEnsurePoolNotInRecoveryMode(address pool) external view {\n _ensurePoolNotInRecoveryMode(pool);\n }\n\n function manualMintBufferShares(IERC4626 wrappedToken, address to, uint256 amount) external {\n _mintBufferShares(wrappedToken, to, amount);\n }\n\n function manualBurnBufferShares(IERC4626 wrappedToken, address from, uint256 amount) external {\n _burnBufferShares(wrappedToken, from, amount);\n }\n\n function manualMintMinimumBufferSupplyReserve(IERC4626 wrappedToken) external {\n _mintMinimumBufferSupplyReserve(wrappedToken);\n }\n}\n"},"@balancer-labs/v3-vault/contracts/test/VaultExtensionMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport {\n TokenConfig,\n PoolRoleAccounts,\n LiquidityManagement\n} from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\nimport { IVaultExtensionMock } from \"@balancer-labs/v3-interfaces/contracts/test/IVaultExtensionMock.sol\";\nimport { IVaultAdmin } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { PoolConfigLib, PoolConfigBits } from \"../lib/PoolConfigLib.sol\";\nimport { VaultExtension } from \"../VaultExtension.sol\";\n\ncontract VaultExtensionMock is IVaultExtensionMock, VaultExtension {\n using PoolConfigLib for PoolConfigBits;\n\n constructor(IVault vault, IVaultAdmin vaultAdmin) VaultExtension(vault, vaultAdmin) {}\n\n function mockExtensionHash(bytes calldata input) external payable returns (bytes32) {\n return keccak256(input);\n }\n\n function manuallySetSwapFee(address pool, uint256 newSwapFee) external {\n _poolConfigBits[pool] = _poolConfigBits[pool].setStaticSwapFeePercentage(newSwapFee);\n }\n\n function manualRegisterPoolReentrancy(\n address pool,\n TokenConfig[] memory tokenConfig,\n uint256 swapFeePercentage,\n uint32 pauseWindowEndTime,\n bool protocolFeeExempt,\n PoolRoleAccounts calldata roleAccounts,\n address poolHooksContract,\n LiquidityManagement calldata liquidityManagement\n ) external nonReentrant {\n IVault(address(this)).registerPool(\n pool,\n tokenConfig,\n swapFeePercentage,\n pauseWindowEndTime,\n protocolFeeExempt,\n roleAccounts,\n poolHooksContract,\n liquidityManagement\n );\n }\n\n function manualInitializePoolReentrancy(\n address pool,\n address to,\n IERC20[] memory tokens,\n uint256[] memory exactAmountsIn,\n uint256 minBptAmountOut,\n bytes memory userData\n ) external nonReentrant {\n IVault(address(this)).initialize(pool, to, tokens, exactAmountsIn, minBptAmountOut, userData);\n }\n}\n"},"@balancer-labs/v3-vault/contracts/test/VaultMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { IRateProvider } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\";\nimport { IVaultExtension } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\";\nimport { IVaultMainMock } from \"@balancer-labs/v3-interfaces/contracts/test/IVaultMainMock.sol\";\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\nimport { IVaultAdmin } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport { IHooks } from \"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\";\nimport \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { StorageSlotExtension } from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\";\nimport { PackedTokenBalance } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\";\nimport { BufferHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/BufferHelpers.sol\";\nimport {\n TransientStorageHelpers,\n TokenDeltaMappingSlotType\n} from \"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\";\nimport { WordCodec } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\";\n\nimport { VaultStateLib, VaultStateBits } from \"../lib/VaultStateLib.sol\";\nimport { PoolConfigLib, PoolConfigBits } from \"../lib/PoolConfigLib.sol\";\nimport { HooksConfigLib } from \"../lib/HooksConfigLib.sol\";\nimport { InputHelpersMock } from \"./InputHelpersMock.sol\";\nimport { PoolFactoryMock } from \"./PoolFactoryMock.sol\";\nimport { VaultExtension } from \"../VaultExtension.sol\";\nimport { PoolConfigConst } from \"../lib/PoolConfigConst.sol\";\nimport { PoolDataLib } from \"../lib/PoolDataLib.sol\";\nimport { Vault } from \"../Vault.sol\";\n\nstruct SwapInternalStateLocals {\n VaultSwapParams vaultSwapParams;\n SwapState swapState;\n PoolData poolData;\n VaultState vaultState;\n}\n\ncontract VaultMock is IVaultMainMock, Vault {\n using PackedTokenBalance for bytes32;\n using PoolConfigLib for PoolConfigBits;\n using HooksConfigLib for PoolConfigBits;\n using VaultStateLib for VaultStateBits;\n using BufferHelpers for bytes32;\n using PoolDataLib for PoolData;\n using TransientStorageHelpers for *;\n using StorageSlotExtension for *;\n using WordCodec for bytes32;\n\n PoolFactoryMock private immutable _poolFactoryMock;\n InputHelpersMock private immutable _inputHelpersMock;\n\n constructor(\n IVaultExtension vaultExtension,\n IAuthorizer authorizer,\n IProtocolFeeController protocolFeeController\n ) Vault(vaultExtension, authorizer, protocolFeeController) {\n uint32 pauseWindowEndTime = IVaultAdmin(address(vaultExtension)).getPauseWindowEndTime();\n uint32 bufferPeriodDuration = IVaultAdmin(address(vaultExtension)).getBufferPeriodDuration();\n _poolFactoryMock = new PoolFactoryMock(IVault(address(this)), pauseWindowEndTime - bufferPeriodDuration);\n _inputHelpersMock = new InputHelpersMock();\n }\n\n function getPoolFactoryMock() external view returns (address) {\n return address(_poolFactoryMock);\n }\n\n function burnERC20(address token, address from, uint256 amount) external {\n _burn(token, from, amount);\n }\n\n function mintERC20(address token, address to, uint256 amount) external {\n _mint(token, to, amount);\n }\n\n // Used for testing pool registration, which is ordinarily done in the pool factory.\n // The Mock pool has an argument for whether or not to register on deployment. To call register pool\n // separately, deploy it with the registration flag false, then call this function.\n function manualRegisterPool(address pool, IERC20[] memory tokens) external whenVaultNotPaused {\n PoolRoleAccounts memory roleAccounts;\n\n _poolFactoryMock.registerPool(\n pool,\n buildTokenConfig(tokens),\n roleAccounts,\n address(0), // No hook contract\n _getDefaultLiquidityManagement()\n );\n }\n\n function manualRegisterPoolWithSwapFee(\n address pool,\n IERC20[] memory tokens,\n uint256 swapFeePercentage\n ) external whenVaultNotPaused {\n LiquidityManagement memory liquidityManagement = _getDefaultLiquidityManagement();\n liquidityManagement.disableUnbalancedLiquidity = true;\n\n _poolFactoryMock.registerPoolWithSwapFee(\n pool,\n buildTokenConfig(tokens),\n swapFeePercentage,\n address(0), // No hook contract\n liquidityManagement\n );\n }\n\n function manualRegisterPoolPassThruTokens(address pool, IERC20[] memory tokens) external {\n TokenConfig[] memory tokenConfig = new TokenConfig[](tokens.length);\n PoolRoleAccounts memory roleAccounts;\n\n for (uint256 i = 0; i < tokens.length; ++i) {\n tokenConfig[i].token = tokens[i];\n }\n\n _poolFactoryMock.registerPool(\n pool,\n tokenConfig,\n roleAccounts,\n address(0), // No hook contract\n _getDefaultLiquidityManagement()\n );\n }\n\n function manualRegisterPoolAtTimestamp(\n address pool,\n IERC20[] memory tokens,\n uint32 timestamp,\n PoolRoleAccounts memory roleAccounts\n ) external whenVaultNotPaused {\n _poolFactoryMock.registerPoolAtTimestamp(\n pool,\n buildTokenConfig(tokens),\n timestamp,\n roleAccounts,\n address(0), // No hook contract\n _getDefaultLiquidityManagement()\n );\n }\n\n function manualSetPoolRegistered(address pool, bool status) public {\n _poolConfigBits[pool] = _poolConfigBits[pool].setPoolRegistered(status);\n }\n\n function manualSetInitializedPool(address pool, bool isPoolInitialized) public {\n _poolConfigBits[pool] = _poolConfigBits[pool].setPoolInitialized(isPoolInitialized);\n }\n\n function manualSetPoolPauseWindowEndTime(address pool, uint32 pauseWindowEndTime) public {\n _poolConfigBits[pool] = _poolConfigBits[pool].setPauseWindowEndTime(pauseWindowEndTime);\n }\n\n function manualSetPoolPaused(address pool, bool isPoolPaused) public {\n _poolConfigBits[pool] = _poolConfigBits[pool].setPoolPaused(isPoolPaused);\n }\n\n function manualSetVaultPaused(bool isVaultPaused) public {\n _vaultStateBits = _vaultStateBits.setVaultPaused(isVaultPaused);\n }\n\n function manualSetVaultState(bool isVaultPaused, bool isQueryDisabled) public {\n _vaultStateBits = _vaultStateBits.setVaultPaused(isVaultPaused).setQueryDisabled(isQueryDisabled);\n }\n\n function manualSetPoolConfig(address pool, PoolConfig memory config) public {\n PoolConfigBits poolConfigBits = _poolConfigBits[pool];\n\n poolConfigBits = poolConfigBits.setPoolRegistered(config.isPoolRegistered);\n poolConfigBits = poolConfigBits.setPoolInitialized(config.isPoolInitialized);\n poolConfigBits = poolConfigBits.setPoolInRecoveryMode(config.isPoolInRecoveryMode);\n poolConfigBits = poolConfigBits.setPoolPaused(config.isPoolPaused);\n poolConfigBits = poolConfigBits.setStaticSwapFeePercentage(config.staticSwapFeePercentage);\n poolConfigBits = _manualSetAggregateSwapFeePercentage(poolConfigBits, config.aggregateSwapFeePercentage);\n poolConfigBits = poolConfigBits.setAggregateYieldFeePercentage(config.aggregateYieldFeePercentage);\n poolConfigBits = poolConfigBits.setTokenDecimalDiffs(config.tokenDecimalDiffs);\n poolConfigBits = poolConfigBits.setPauseWindowEndTime(config.pauseWindowEndTime);\n poolConfigBits = poolConfigBits.setDisableUnbalancedLiquidity(\n config.liquidityManagement.disableUnbalancedLiquidity\n );\n poolConfigBits = poolConfigBits.setAddLiquidityCustom(config.liquidityManagement.enableAddLiquidityCustom);\n poolConfigBits = poolConfigBits.setRemoveLiquidityCustom(\n config.liquidityManagement.enableRemoveLiquidityCustom\n );\n poolConfigBits = poolConfigBits.setDonation(config.liquidityManagement.enableDonation);\n\n _poolConfigBits[pool] = poolConfigBits;\n }\n\n function manualSetStaticSwapFeePercentage(address pool, uint256 value) public {\n _setStaticSwapFeePercentage(pool, value);\n }\n\n function manualUnsafeSetStaticSwapFeePercentage(address pool, uint256 value) public {\n _poolConfigBits[pool] = _poolConfigBits[pool].setStaticSwapFeePercentage(value);\n }\n\n function manualSetHooksConfig(address pool, HooksConfig memory hooksConfig) public {\n PoolConfigBits poolConfigBits = _poolConfigBits[pool];\n\n poolConfigBits = poolConfigBits.setHookAdjustedAmounts(hooksConfig.enableHookAdjustedAmounts);\n poolConfigBits = poolConfigBits.setShouldCallBeforeInitialize(hooksConfig.shouldCallBeforeInitialize);\n poolConfigBits = poolConfigBits.setShouldCallAfterInitialize(hooksConfig.shouldCallAfterInitialize);\n poolConfigBits = poolConfigBits.setShouldCallComputeDynamicSwapFee(hooksConfig.shouldCallComputeDynamicSwapFee);\n poolConfigBits = poolConfigBits.setShouldCallBeforeSwap(hooksConfig.shouldCallBeforeSwap);\n poolConfigBits = poolConfigBits.setShouldCallAfterSwap(hooksConfig.shouldCallAfterSwap);\n poolConfigBits = poolConfigBits.setShouldCallBeforeAddLiquidity(hooksConfig.shouldCallBeforeAddLiquidity);\n poolConfigBits = poolConfigBits.setShouldCallAfterAddLiquidity(hooksConfig.shouldCallAfterAddLiquidity);\n poolConfigBits = poolConfigBits.setShouldCallBeforeRemoveLiquidity(hooksConfig.shouldCallBeforeRemoveLiquidity);\n poolConfigBits = poolConfigBits.setShouldCallAfterRemoveLiquidity(hooksConfig.shouldCallAfterRemoveLiquidity);\n\n _poolConfigBits[pool] = poolConfigBits;\n _hooksContracts[pool] = IHooks(hooksConfig.hooksContract);\n }\n\n function manualSetPoolConfigBits(address pool, PoolConfigBits config) public {\n _poolConfigBits[pool] = config;\n }\n\n function manualSetPoolTokenInfo(address pool, TokenConfig[] memory tokenConfig) public {\n for (uint256 i = 0; i < tokenConfig.length; ++i) {\n _poolTokenInfo[pool][tokenConfig[i].token] = TokenInfo({\n tokenType: tokenConfig[i].tokenType,\n rateProvider: tokenConfig[i].rateProvider,\n paysYieldFees: tokenConfig[i].paysYieldFees\n });\n }\n }\n\n function manualSetPoolTokenInfo(address pool, IERC20[] memory tokens, TokenInfo[] memory tokenInfo) public {\n for (uint256 i = 0; i < tokens.length; ++i) {\n _poolTokenInfo[pool][tokens[i]] = tokenInfo[i];\n }\n }\n\n function manualSetPoolTokens(address pool, IERC20[] memory tokens) public {\n _poolTokens[pool] = tokens;\n }\n\n function manualSetPoolTokensAndBalances(\n address pool,\n IERC20[] memory tokens,\n uint256[] memory tokenBalanceRaw,\n uint256[] memory tokenBalanceLiveScaled18\n ) public {\n require(tokens.length == tokenBalanceRaw.length, \"VaultMock: TOKENS_LENGTH_MISMATCH\");\n require(tokens.length == tokenBalanceLiveScaled18.length, \"VaultMock: TOKENS_LENGTH_MISMATCH\");\n\n mapping(uint256 tokenIndex => bytes32 packedTokenBalance) storage poolTokenBalances = _poolTokenBalances[pool];\n for (uint256 i = 0; i < tokens.length; ++i) {\n poolTokenBalances[i] = PackedTokenBalance.toPackedBalance(tokenBalanceRaw[i], tokenBalanceLiveScaled18[i]);\n }\n\n _poolTokens[pool] = tokens;\n }\n\n function manualSetPoolBalances(\n address pool,\n uint256[] memory tokenBalanceRaw,\n uint256[] memory tokenBalanceLiveScaled18\n ) public {\n IERC20[] memory tokens = _poolTokens[pool];\n\n require(tokens.length == tokenBalanceRaw.length, \"VaultMock: TOKENS_LENGTH_MISMATCH\");\n require(tokens.length == tokenBalanceLiveScaled18.length, \"VaultMock: TOKENS_LENGTH_MISMATCH\");\n\n mapping(uint256 tokenIndex => bytes32 packedTokenBalance) storage poolTokenBalances = _poolTokenBalances[pool];\n for (uint256 i = 0; i < tokens.length; ++i) {\n poolTokenBalances[i] = PackedTokenBalance.toPackedBalance(tokenBalanceRaw[i], tokenBalanceLiveScaled18[i]);\n }\n }\n\n function mockIsUnlocked() public view onlyWhenUnlocked {}\n\n function mockWithInitializedPool(address pool) public view withInitializedPool(pool) {}\n\n function ensurePoolNotPaused(address pool) public view {\n _ensurePoolNotPaused(pool);\n }\n\n function ensureUnpausedAndGetVaultState(address pool) public view returns (VaultState memory vaultState) {\n _ensureUnpaused(pool);\n VaultStateBits state = _vaultStateBits;\n vaultState = VaultState({\n isQueryDisabled: state.isQueryDisabled(),\n isVaultPaused: state.isVaultPaused(),\n areBuffersPaused: state.areBuffersPaused()\n });\n }\n\n function buildTokenConfig(IERC20[] memory tokens) public view returns (TokenConfig[] memory tokenConfig) {\n tokenConfig = new TokenConfig[](tokens.length);\n for (uint256 i = 0; i < tokens.length; ++i) {\n tokenConfig[i].token = tokens[i];\n }\n\n tokenConfig = _inputHelpersMock.sortTokenConfig(tokenConfig);\n }\n\n function buildTokenConfig(\n IERC20[] memory tokens,\n IRateProvider[] memory rateProviders\n ) public view returns (TokenConfig[] memory tokenConfig) {\n tokenConfig = new TokenConfig[](tokens.length);\n for (uint256 i = 0; i < tokens.length; ++i) {\n tokenConfig[i].token = tokens[i];\n tokenConfig[i].rateProvider = rateProviders[i];\n tokenConfig[i].tokenType = rateProviders[i] == IRateProvider(address(0))\n ? TokenType.STANDARD\n : TokenType.WITH_RATE;\n }\n\n tokenConfig = _inputHelpersMock.sortTokenConfig(tokenConfig);\n }\n\n function buildTokenConfig(\n IERC20[] memory tokens,\n IRateProvider[] memory rateProviders,\n bool[] memory yieldFeeFlags\n ) public view returns (TokenConfig[] memory tokenConfig) {\n tokenConfig = new TokenConfig[](tokens.length);\n for (uint256 i = 0; i < tokens.length; ++i) {\n tokenConfig[i].token = tokens[i];\n tokenConfig[i].rateProvider = rateProviders[i];\n tokenConfig[i].tokenType = rateProviders[i] == IRateProvider(address(0))\n ? TokenType.STANDARD\n : TokenType.WITH_RATE;\n tokenConfig[i].paysYieldFees = yieldFeeFlags[i];\n }\n\n tokenConfig = _inputHelpersMock.sortTokenConfig(tokenConfig);\n }\n\n function buildTokenConfig(\n IERC20[] memory tokens,\n TokenType[] memory tokenTypes,\n IRateProvider[] memory rateProviders,\n bool[] memory yieldFeeFlags\n ) public view returns (TokenConfig[] memory tokenConfig) {\n tokenConfig = new TokenConfig[](tokens.length);\n for (uint256 i = 0; i < tokens.length; ++i) {\n tokenConfig[i].token = tokens[i];\n tokenConfig[i].tokenType = tokenTypes[i];\n tokenConfig[i].rateProvider = rateProviders[i];\n tokenConfig[i].paysYieldFees = yieldFeeFlags[i];\n }\n\n tokenConfig = _inputHelpersMock.sortTokenConfig(tokenConfig);\n }\n\n function recoveryModeExit(address pool) external view onlyInRecoveryMode(pool) {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n function loadPoolDataUpdatingBalancesAndYieldFees(\n address pool,\n Rounding roundingDirection\n ) external returns (PoolData memory) {\n return _loadPoolDataUpdatingBalancesAndYieldFees(pool, roundingDirection);\n }\n\n function loadPoolDataUpdatingBalancesAndYieldFeesReentrancy(\n address pool,\n Rounding roundingDirection\n ) external nonReentrant returns (PoolData memory) {\n return _loadPoolDataUpdatingBalancesAndYieldFees(pool, roundingDirection);\n }\n\n function updateLiveTokenBalanceInPoolData(\n PoolData memory poolData,\n uint256 newRawBalance,\n Rounding roundingDirection,\n uint256 tokenIndex\n ) external pure returns (PoolData memory) {\n _updateRawAndLiveTokenBalancesInPoolData(poolData, newRawBalance, roundingDirection, tokenIndex);\n return poolData;\n }\n\n function computeYieldFeesDue(\n PoolData memory poolData,\n uint256 lastLiveBalance,\n uint256 tokenIndex,\n uint256 aggregateYieldFeePercentage\n ) external pure returns (uint256) {\n return PoolDataLib._computeYieldFeesDue(poolData, lastLiveBalance, tokenIndex, aggregateYieldFeePercentage);\n }\n\n function manualWritePoolBalancesToStorage(address pool, PoolData memory poolData) external {\n _writePoolBalancesToStorage(pool, poolData);\n }\n\n function getRawBalances(address pool) external view returns (uint256[] memory balancesRaw) {\n mapping(uint256 tokenIndex => bytes32 packedTokenBalance) storage poolTokenBalances = _poolTokenBalances[pool];\n\n uint256 numTokens = _poolTokens[pool].length;\n balancesRaw = new uint256[](numTokens);\n\n for (uint256 i = 0; i < numTokens; ++i) {\n balancesRaw[i] = poolTokenBalances[i].getBalanceRaw();\n }\n }\n\n function getLastLiveBalances(address pool) external view returns (uint256[] memory lastBalancesLiveScaled18) {\n mapping(uint256 tokenIndex => bytes32 packedTokenBalance) storage poolTokenBalances = _poolTokenBalances[pool];\n\n uint256 numTokens = _poolTokens[pool].length;\n lastBalancesLiveScaled18 = new uint256[](numTokens);\n\n for (uint256 i = 0; i < numTokens; ++i) {\n lastBalancesLiveScaled18[i] = poolTokenBalances[i].getBalanceDerived();\n }\n }\n\n function guardedCheckEntered() external nonReentrant {\n require(reentrancyGuardEntered());\n }\n\n function unguardedCheckNotEntered() external view {\n require(!reentrancyGuardEntered());\n }\n\n function accountDelta(IERC20 token, int256 delta) external {\n _accountDelta(token, delta);\n }\n\n function supplyCredit(IERC20 token, uint256 credit) external {\n _supplyCredit(token, credit);\n }\n\n function takeDebt(IERC20 token, uint256 debt) external {\n _takeDebt(token, debt);\n }\n\n function manualSetAccountDelta(IERC20 token, int256 delta) external {\n _tokenDeltas().tSet(token, delta);\n }\n\n function manualSetNonZeroDeltaCount(uint256 deltaCount) external {\n _nonZeroDeltaCount().tstore(deltaCount);\n }\n\n function manualSetReservesOf(IERC20 token, uint256 reserves) external {\n _reservesOf[token] = reserves;\n }\n\n function manualInternalSwap(\n VaultSwapParams memory vaultSwapParams,\n SwapState memory state,\n PoolData memory poolData\n )\n external\n returns (\n uint256 amountCalculatedRaw,\n uint256 amountCalculatedScaled18,\n uint256 amountIn,\n uint256 amountOut,\n VaultSwapParams memory,\n SwapState memory,\n PoolData memory\n )\n {\n PoolSwapParams memory poolSwapParams = _buildPoolSwapParams(vaultSwapParams, state, poolData);\n\n (amountCalculatedRaw, amountCalculatedScaled18, amountIn, amountOut) = _swap(\n vaultSwapParams,\n state,\n poolData,\n poolSwapParams\n );\n\n return (amountCalculatedRaw, amountCalculatedScaled18, amountIn, amountOut, vaultSwapParams, state, poolData);\n }\n\n function manualReentrancySwap(\n VaultSwapParams memory vaultSwapParams,\n SwapState memory state,\n PoolData memory poolData\n ) external nonReentrant {\n PoolSwapParams memory poolSwapParams = _buildPoolSwapParams(vaultSwapParams, state, poolData);\n _swap(vaultSwapParams, state, poolData, poolSwapParams);\n }\n\n function manualGetAggregateSwapFeeAmount(address pool, IERC20 token) external view returns (uint256) {\n return _aggregateFeeAmounts[pool][token].getBalanceRaw();\n }\n\n function manualGetAggregateYieldFeeAmount(address pool, IERC20 token) external view returns (uint256) {\n return _aggregateFeeAmounts[pool][token].getBalanceDerived();\n }\n\n function manualSetAggregateSwapFeeAmount(address pool, IERC20 token, uint256 value) external {\n _aggregateFeeAmounts[pool][token] = _aggregateFeeAmounts[pool][token].setBalanceRaw(value);\n }\n\n function manualSetAggregateYieldFeeAmount(address pool, IERC20 token, uint256 value) external {\n _aggregateFeeAmounts[pool][token] = _aggregateFeeAmounts[pool][token].setBalanceDerived(value);\n }\n\n function manualSetAggregateSwapFeePercentage(address pool, uint256 value) external {\n _poolConfigBits[pool] = _poolConfigBits[pool].setAggregateSwapFeePercentage(value);\n }\n\n function manualSetAggregateYieldFeePercentage(address pool, uint256 value) external {\n _poolConfigBits[pool] = _poolConfigBits[pool].setAggregateYieldFeePercentage(value);\n }\n\n function manualBuildPoolSwapParams(\n VaultSwapParams memory vaultSwapParams,\n SwapState memory state,\n PoolData memory poolData\n ) external view returns (PoolSwapParams memory) {\n return _buildPoolSwapParams(vaultSwapParams, state, poolData);\n }\n\n function manualComputeAndChargeAggregateSwapFees(\n PoolData memory poolData,\n uint256 totalSwapFeeAmountScaled18,\n address pool,\n IERC20 token,\n uint256 index\n ) external returns (uint256 totalSwapFeeAmountRaw, uint256 aggregateSwapFeeAmountRaw) {\n return _computeAndChargeAggregateSwapFees(poolData, totalSwapFeeAmountScaled18, pool, token, index);\n }\n\n function manualUpdatePoolDataLiveBalancesAndRates(\n address pool,\n PoolData memory poolData,\n Rounding roundingDirection\n ) external view returns (PoolData memory) {\n poolData.reloadBalancesAndRates(_poolTokenBalances[pool], roundingDirection);\n\n return poolData;\n }\n\n function manualAddLiquidity(\n PoolData memory poolData,\n AddLiquidityParams memory params,\n uint256[] memory maxAmountsInScaled18\n )\n external\n returns (\n PoolData memory updatedPoolData,\n uint256[] memory amountsInRaw,\n uint256[] memory amountsInScaled18,\n uint256 bptAmountOut,\n bytes memory returnData\n )\n {\n bytes32 paramsHashBefore = keccak256(abi.encode(params));\n\n (amountsInRaw, amountsInScaled18, bptAmountOut, returnData) = _addLiquidity(\n poolData,\n params,\n maxAmountsInScaled18\n );\n\n require(paramsHashBefore == keccak256(abi.encode(params)), \"Input parameters have changed\");\n\n updatedPoolData = poolData;\n }\n\n function manualReentrancyAddLiquidity(\n PoolData memory poolData,\n AddLiquidityParams memory params,\n uint256[] memory maxAmountsInScaled18\n ) external nonReentrant {\n _addLiquidity(poolData, params, maxAmountsInScaled18);\n }\n\n function manualRemoveLiquidity(\n PoolData memory poolData,\n RemoveLiquidityParams memory params,\n uint256[] memory minAmountsOutScaled18\n )\n external\n returns (\n PoolData memory updatedPoolData,\n uint256 bptAmountIn,\n uint256[] memory amountsOutRaw,\n uint256[] memory amountsOutScaled18,\n bytes memory returnData\n )\n {\n bytes32 paramsHashBefore = keccak256(abi.encode(params));\n\n (bptAmountIn, amountsOutRaw, amountsOutScaled18, returnData) = _removeLiquidity(\n poolData,\n params,\n minAmountsOutScaled18\n );\n\n require(paramsHashBefore == keccak256(abi.encode(params)), \"Input parameters have changed\");\n\n updatedPoolData = poolData;\n }\n\n function manualReentrancyRemoveLiquidity(\n PoolData memory poolData,\n RemoveLiquidityParams memory params,\n uint256[] memory minAmountsOutScaled18\n ) external nonReentrant {\n _removeLiquidity(poolData, params, minAmountsOutScaled18);\n }\n\n function internalGetBufferUnderlyingImbalance(IERC4626 wrappedToken) external view returns (int256) {\n bytes32 bufferBalance = _bufferTokenBalances[wrappedToken];\n return bufferBalance.getBufferUnderlyingImbalance(wrappedToken);\n }\n\n function internalGetBufferWrappedImbalance(IERC4626 wrappedToken) external view returns (int256) {\n bytes32 bufferBalance = _bufferTokenBalances[wrappedToken];\n return bufferBalance.getBufferWrappedImbalance(wrappedToken);\n }\n\n function getBufferTokenBalancesBytes(IERC4626 wrappedToken) external view returns (bytes32) {\n return _bufferTokenBalances[wrappedToken];\n }\n\n function manualSettleWrap(\n IERC20 underlyingToken,\n IERC20 wrappedToken,\n uint256 underlyingHint,\n uint256 wrappedHint\n ) external {\n _settleWrap(underlyingToken, wrappedToken, underlyingHint, wrappedHint);\n }\n\n function manualSettleUnwrap(\n IERC20 underlyingToken,\n IERC20 wrappedToken,\n uint256 underlyingHint,\n uint256 wrappedHint\n ) external {\n _settleUnwrap(underlyingToken, wrappedToken, underlyingHint, wrappedHint);\n }\n\n function manualTransfer(IERC20 token, address to, uint256 amount) external {\n token.transfer(to, amount);\n }\n\n function forceUnlock() public {\n _isUnlocked().tstore(true);\n }\n\n function forceLock() public {\n _isUnlocked().tstore(false);\n }\n\n function manualGetPoolConfigBits(address pool) external view returns (PoolConfigBits) {\n return _poolConfigBits[pool];\n }\n\n function manualGetIsUnlocked() external view returns (StorageSlotExtension.BooleanSlotType slot) {\n return _isUnlocked();\n }\n\n function manualGetNonzeroDeltaCount() external view returns (StorageSlotExtension.Uint256SlotType slot) {\n return _nonZeroDeltaCount();\n }\n\n function manualGetTokenDeltas() external view returns (TokenDeltaMappingSlotType slot) {\n return _tokenDeltas();\n }\n\n function manualSetBufferAsset(IERC4626 wrappedToken, address underlyingToken) external {\n _bufferAssets[wrappedToken] = underlyingToken;\n }\n\n function manualSetBufferOwnerShares(IERC4626 wrappedToken, address owner, uint256 shares) external {\n _bufferLpShares[wrappedToken][owner] = shares;\n }\n\n function manualSetBufferTotalShares(IERC4626 wrappedToken, uint256 shares) external {\n _bufferTotalShares[wrappedToken] = shares;\n }\n\n function manualSetBufferBalances(IERC4626 wrappedToken, uint256 underlyingAmount, uint256 wrappedAmount) external {\n _bufferTokenBalances[wrappedToken] = PackedTokenBalance.toPackedBalance(underlyingAmount, wrappedAmount);\n }\n\n function manualErc4626BufferWrapOrUnwrapReentrancy(\n BufferWrapOrUnwrapParams memory params\n ) external nonReentrant returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw) {\n return IVault(address(this)).erc4626BufferWrapOrUnwrap(params);\n }\n\n function manualSettleReentrancy(IERC20 token) public nonReentrant returns (uint256 paid) {\n return IVault(address(this)).settle(token, 0);\n }\n\n function manualSendToReentrancy(IERC20 token, address to, uint256 amount) public nonReentrant {\n IVault(address(this)).sendTo(token, to, amount);\n }\n\n function manualFindTokenIndex(IERC20[] memory tokens, IERC20 token) public pure returns (uint256 index) {\n return _findTokenIndex(tokens, token);\n }\n\n function manualSetAddLiquidityCalledFlag(address pool, bool flag) public {\n _addLiquidityCalled().tSet(_sessionIdSlot().tload(), pool, flag);\n }\n\n function manualGetAddLiquidityCalledFlagBySession(address pool, uint256 sessionId) public view returns (bool) {\n return _addLiquidityCalled().tGet(sessionId, pool);\n }\n\n function manualGetCurrentUnlockSessionId() public view returns (uint256) {\n return _sessionIdSlot().tload();\n }\n\n function manualComputeAmountGivenScaled18(\n VaultSwapParams memory vaultSwapParams,\n PoolData memory poolData,\n SwapState memory swapState\n ) public pure returns (uint256) {\n return _computeAmountGivenScaled18(vaultSwapParams, poolData, swapState);\n }\n\n function manualLoadSwapState(\n VaultSwapParams memory vaultSwapParams,\n PoolData memory poolData\n ) public pure returns (SwapState memory swapState) {\n return _loadSwapState(vaultSwapParams, poolData);\n }\n\n function _getDefaultLiquidityManagement() private pure returns (LiquidityManagement memory) {\n LiquidityManagement memory liquidityManagement;\n liquidityManagement.enableAddLiquidityCustom = true;\n liquidityManagement.enableRemoveLiquidityCustom = true;\n return liquidityManagement;\n }\n\n function manualSetPoolCreator(address pool, address newPoolCreator) public {\n _poolRoleAccounts[pool].poolCreator = newPoolCreator;\n }\n\n function ensureValidTradeAmount(uint256 tradeAmount) external view {\n _ensureValidTradeAmount(tradeAmount);\n }\n\n function ensureValidSwapAmount(uint256 tradeAmount) external view {\n _ensureValidSwapAmount(tradeAmount);\n }\n\n function manualUpdateAggregateSwapFeePercentage(address pool, uint256 newAggregateSwapFeePercentage) external {\n _poolConfigBits[pool] = _manualSetAggregateSwapFeePercentage(\n _poolConfigBits[pool],\n newAggregateSwapFeePercentage\n );\n }\n\n function _manualSetAggregateSwapFeePercentage(\n PoolConfigBits config,\n uint256 value\n ) internal pure returns (PoolConfigBits) {\n value /= FEE_SCALING_FACTOR;\n\n return\n PoolConfigBits.wrap(\n PoolConfigBits.unwrap(config).insertUint(\n value,\n PoolConfigConst.AGGREGATE_SWAP_FEE_OFFSET,\n FEE_BITLENGTH\n )\n );\n }\n\n function previewDeposit(IERC4626 wrapper, uint256 amountInUnderlying) external returns (uint256 amountOutWrapped) {\n if (amountInUnderlying == 0 || wrapper.previewDeposit(amountInUnderlying - 1) == 0) {\n return 0;\n }\n\n (, amountOutWrapped, ) = _wrapWithBuffer(\n SwapKind.EXACT_IN,\n IERC20(wrapper.asset()),\n wrapper,\n amountInUnderlying\n );\n }\n\n function previewMint(IERC4626 wrapper, uint256 amountOutWrapped) external returns (uint256 amountInUnderlying) {\n if (amountOutWrapped == 0) {\n return 0;\n }\n\n (amountInUnderlying, , ) = _wrapWithBuffer(\n SwapKind.EXACT_OUT,\n IERC20(wrapper.asset()),\n wrapper,\n amountOutWrapped\n );\n }\n\n function previewRedeem(IERC4626 wrapper, uint256 amountInWrapped) external returns (uint256 amountOutUnderlying) {\n if (amountInWrapped == 0 || wrapper.previewRedeem(amountInWrapped - 1) == 0) {\n return 0;\n }\n\n (, amountOutUnderlying, ) = _unwrapWithBuffer(\n SwapKind.EXACT_IN,\n IERC20(wrapper.asset()),\n wrapper,\n amountInWrapped\n );\n }\n\n function previewWithdraw(IERC4626 wrapper, uint256 amountOutUnderlying) external returns (uint256 amountInWrapped) {\n if (amountOutUnderlying == 0) {\n return 0;\n }\n\n (amountInWrapped, , ) = _unwrapWithBuffer(\n SwapKind.EXACT_OUT,\n IERC20(wrapper.asset()),\n wrapper,\n amountOutUnderlying\n );\n }\n}\n"},"@balancer-labs/v3-vault/contracts/token/ERC20MultiToken.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20Errors } from \"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\";\n\nimport { IERC20MultiTokenErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IERC20MultiTokenErrors.sol\";\n\nimport { EVMCallModeHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol\";\n\nimport { BalancerPoolToken } from \"../BalancerPoolToken.sol\";\n\n/**\n * @notice Store Token data and handle accounting for pool tokens in the Vault.\n * @dev The ERC20MultiToken is an ERC20-focused multi-token implementation that is fully compatible with the ERC20 API\n * on the token side. It also allows for the minting and burning of tokens on the multi-token side.\n */\nabstract contract ERC20MultiToken is IERC20Errors, IERC20MultiTokenErrors {\n // Minimum total supply amount.\n uint256 internal constant _POOL_MINIMUM_TOTAL_SUPPLY = 1e6;\n\n /**\n * @notice Pool tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\n * @param pool The pool token being transferred\n * @param from The token source\n * @param to The token destination\n * @param value The number of tokens\n */\n event Transfer(address indexed pool, address indexed from, address indexed to, uint256 value);\n\n /**\n * @notice The allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\n * @param pool The pool token receiving the allowance\n * @param owner The token holder\n * @param spender The account being authorized to spend a given amount of the token\n * @param value The number of tokens spender is authorized to transfer from owner\n */\n event Approval(address indexed pool, address indexed owner, address indexed spender, uint256 value);\n\n // Users' pool token (BPT) balances.\n mapping(address token => mapping(address owner => uint256 balance)) private _balances;\n\n // Users' pool token (BPT) allowances.\n mapping(address token => mapping(address owner => mapping(address spender => uint256 allowance)))\n private _allowances;\n\n // Total supply of all pool tokens (BPT). These are tokens minted and burned by the Vault.\n // The Vault balances of regular pool tokens are stored in `_reservesOf`.\n mapping(address token => uint256 totalSupply) private _totalSupplyOf;\n\n function _totalSupply(address pool) internal view returns (uint256) {\n return _totalSupplyOf[pool];\n }\n\n function _balanceOf(address pool, address account) internal view returns (uint256) {\n return _balances[pool][account];\n }\n\n function _allowance(address pool, address owner, address spender) internal view returns (uint256) {\n // Owner can spend anything without approval\n if (owner == spender) {\n return type(uint256).max;\n } else {\n return _allowances[pool][owner][spender];\n }\n }\n\n /**\n * @dev DO NOT CALL THIS METHOD!\n * Only `removeLiquidity` in the Vault may call this - in a query context - to allow burning tokens the caller\n * does not have.\n */\n function _queryModeBalanceIncrease(address pool, address to, uint256 amount) internal {\n // Enforce that this can only be called in a read-only, query context.\n if (EVMCallModeHelpers.isStaticCall() == false) {\n revert EVMCallModeHelpers.NotStaticCall();\n }\n\n // Increase `to` balance to ensure the burn function succeeds during query.\n _balances[address(pool)][to] += amount;\n }\n\n function _mint(address pool, address to, uint256 amount) internal {\n if (to == address(0)) {\n revert ERC20InvalidReceiver(to);\n }\n\n uint256 newTotalSupply = _totalSupplyOf[pool] + amount;\n unchecked {\n // Overflow is not possible. balance + amount is at most totalSupply + amount, which is checked above.\n _balances[pool][to] += amount;\n }\n\n _ensurePoolMinimumTotalSupply(newTotalSupply);\n\n _totalSupplyOf[pool] = newTotalSupply;\n\n emit Transfer(pool, address(0), to, amount);\n\n // We also emit the \"transfer\" event on the pool token to ensure full compliance with the ERC20 standard.\n BalancerPoolToken(pool).emitTransfer(address(0), to, amount);\n }\n\n function _ensurePoolMinimumTotalSupply(uint256 newTotalSupply) internal pure {\n if (newTotalSupply < _POOL_MINIMUM_TOTAL_SUPPLY) {\n revert PoolTotalSupplyTooLow(newTotalSupply);\n }\n }\n\n function _mintMinimumSupplyReserve(address pool) internal {\n _totalSupplyOf[pool] += _POOL_MINIMUM_TOTAL_SUPPLY;\n unchecked {\n // Overflow is not possible. balance + amount is at most totalSupply + amount, which is checked above.\n _balances[pool][address(0)] += _POOL_MINIMUM_TOTAL_SUPPLY;\n }\n emit Transfer(pool, address(0), address(0), _POOL_MINIMUM_TOTAL_SUPPLY);\n\n // We also emit the \"transfer\" event on the pool token to ensure full compliance with the ERC20 standard.\n BalancerPoolToken(pool).emitTransfer(address(0), address(0), _POOL_MINIMUM_TOTAL_SUPPLY);\n }\n\n function _burn(address pool, address from, uint256 amount) internal {\n if (from == address(0)) {\n revert ERC20InvalidSender(from);\n }\n\n uint256 accountBalance = _balances[pool][from];\n if (amount > accountBalance) {\n revert ERC20InsufficientBalance(from, accountBalance, amount);\n }\n\n unchecked {\n _balances[pool][from] = accountBalance - amount;\n }\n uint256 newTotalSupply = _totalSupplyOf[pool] - amount;\n\n _ensurePoolMinimumTotalSupply(newTotalSupply);\n\n _totalSupplyOf[pool] = newTotalSupply;\n\n // We also emit the \"transfer\" event on the pool token to ensure full compliance with the ERC20 standard.\n // If this function fails we keep going, as this is used in recovery mode.\n // Well-behaved pools will just emit an event here, so they should never fail.\n try BalancerPoolToken(pool).emitTransfer(from, address(0), amount) {} catch {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n // Emit the internal event last to spend some gas after try / catch.\n emit Transfer(pool, from, address(0), amount);\n }\n\n function _transfer(address pool, address from, address to, uint256 amount) internal {\n if (from == address(0)) {\n revert ERC20InvalidSender(from);\n }\n\n if (to == address(0)) {\n revert ERC20InvalidReceiver(to);\n }\n\n uint256 fromBalance = _balances[pool][from];\n if (amount > fromBalance) {\n revert ERC20InsufficientBalance(from, fromBalance, amount);\n }\n\n unchecked {\n _balances[pool][from] = fromBalance - amount;\n // Overflow is not possible. The sum of all balances is capped by totalSupply, and that sum is preserved by\n // decrementing then incrementing.\n _balances[pool][to] += amount;\n }\n\n emit Transfer(pool, from, to, amount);\n\n // We also emit the \"transfer\" event on the pool token to ensure full compliance with the ERC20 standard.\n BalancerPoolToken(pool).emitTransfer(from, to, amount);\n }\n\n function _approve(address pool, address owner, address spender, uint256 amount) internal {\n if (owner == address(0)) {\n revert ERC20InvalidApprover(owner);\n }\n\n if (spender == address(0)) {\n revert ERC20InvalidSpender(spender);\n }\n\n _allowances[pool][owner][spender] = amount;\n\n // We also emit the \"approve\" event on the pool token to ensure full compliance with the ERC20 standard.\n // If this function fails we keep going, as this is used in recovery mode.\n // Well-behaved pools will just emit an event here, so they should never fail.\n try BalancerPoolToken(pool).emitApproval(owner, spender, amount) {} catch {\n // solhint-disable-previous-line no-empty-blocks\n }\n\n // Emit the internal event last to spend some gas after try / catch.\n emit Approval(pool, owner, spender, amount);\n }\n\n function _spendAllowance(address pool, address owner, address spender, uint256 amount) internal {\n uint256 currentAllowance = _allowance(pool, owner, spender);\n if (currentAllowance != type(uint256).max) {\n if (amount > currentAllowance) {\n revert ERC20InsufficientAllowance(spender, currentAllowance, amount);\n }\n\n unchecked {\n _approve(pool, owner, spender, currentAllowance - amount);\n }\n }\n }\n}\n"},"@balancer-labs/v3-vault/contracts/Vault.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\nimport { Proxy } from \"@openzeppelin/contracts/proxy/Proxy.sol\";\n\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { IVaultExtension } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\";\nimport { IPoolLiquidity } from \"@balancer-labs/v3-interfaces/contracts/vault/IPoolLiquidity.sol\";\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\nimport { IVaultAdmin } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\";\nimport { IVaultMain } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\";\nimport { IBasePool } from \"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\";\nimport { IHooks } from \"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\";\nimport \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { StorageSlotExtension } from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\";\nimport { PackedTokenBalance } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\";\nimport { ScalingHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol\";\nimport { CastingHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\";\nimport { BufferHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/BufferHelpers.sol\";\nimport { InputHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\";\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\nimport {\n TransientStorageHelpers\n} from \"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\";\n\nimport { VaultStateLib, VaultStateBits } from \"./lib/VaultStateLib.sol\";\nimport { HooksConfigLib } from \"./lib/HooksConfigLib.sol\";\nimport { PoolConfigLib } from \"./lib/PoolConfigLib.sol\";\nimport { PoolDataLib } from \"./lib/PoolDataLib.sol\";\nimport { BasePoolMath } from \"./BasePoolMath.sol\";\nimport { VaultCommon } from \"./VaultCommon.sol\";\n\ncontract Vault is IVaultMain, VaultCommon, Proxy {\n using PackedTokenBalance for bytes32;\n using BufferHelpers for bytes32;\n using InputHelpers for uint256;\n using FixedPoint for *;\n using Address for *;\n using CastingHelpers for uint256[];\n using SafeCast for *;\n using SafeERC20 for IERC20;\n using PoolConfigLib for PoolConfigBits;\n using HooksConfigLib for PoolConfigBits;\n using VaultStateLib for VaultStateBits;\n using ScalingHelpers for *;\n using TransientStorageHelpers for *;\n using StorageSlotExtension for *;\n using PoolDataLib for PoolData;\n\n // Local reference to the Proxy pattern Vault extension contract.\n IVaultExtension private immutable _vaultExtension;\n\n constructor(IVaultExtension vaultExtension, IAuthorizer authorizer, IProtocolFeeController protocolFeeController) {\n if (address(vaultExtension.vault()) != address(this)) {\n revert WrongVaultExtensionDeployment();\n }\n\n if (address(protocolFeeController.vault()) != address(this)) {\n revert WrongProtocolFeeControllerDeployment();\n }\n\n _vaultExtension = vaultExtension;\n _protocolFeeController = protocolFeeController;\n\n _vaultPauseWindowEndTime = IVaultAdmin(address(vaultExtension)).getPauseWindowEndTime();\n _vaultBufferPeriodDuration = IVaultAdmin(address(vaultExtension)).getBufferPeriodDuration();\n _vaultBufferPeriodEndTime = IVaultAdmin(address(vaultExtension)).getBufferPeriodEndTime();\n\n _MINIMUM_TRADE_AMOUNT = IVaultAdmin(address(vaultExtension)).getMinimumTradeAmount();\n _MINIMUM_WRAP_AMOUNT = IVaultAdmin(address(vaultExtension)).getMinimumWrapAmount();\n\n _authorizer = authorizer;\n }\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @dev This modifier is used for functions that temporarily modify the token deltas\n * of the Vault, but expect to revert or settle balances by the end of their execution.\n * It works by ensuring that the balances are properly settled by the time the last\n * operation is executed.\n *\n * This is useful for functions like `unlock`, which perform arbitrary external calls:\n * we can keep track of temporary deltas changes, and make sure they are settled by the\n * time the external call is complete.\n */\n modifier transient() {\n bool isUnlockedBefore = _isUnlocked().tload();\n\n if (isUnlockedBefore == false) {\n _isUnlocked().tstore(true);\n }\n\n // The caller does everything here and has to settle all outstanding balances.\n _;\n\n if (isUnlockedBefore == false) {\n if (_nonZeroDeltaCount().tload() != 0) {\n revert BalanceNotSettled();\n }\n\n _isUnlocked().tstore(false);\n\n // If a user adds liquidity to a pool, then does a proportional withdrawal from that pool during the same\n // interaction, the system charges a \"round-trip\" fee on the withdrawal. This fee makes it harder for an\n // user to add liquidity to a pool using a virtually infinite flash loan, swapping in the same pool in a way\n // that benefits him and removes liquidity in the same transaction, which is not a valid use case.\n //\n // Here we introduce the \"session\" concept, to prevent this fee from being charged accidentally. For\n // example, if an aggregator or account abstraction contract bundled several unrelated operations in the\n // same transaction that involved the same pool with different senders, the guardrail could be triggered\n // for a user doing a simple withdrawal. If proper limits were set, the whole transaction would revert,\n // and if they were not, the user would be unfairly \"taxed.\"\n //\n // Defining an \"interaction\" this way - as a single `unlock` call vs. an entire transaction - prevents the\n // guardrail from being triggered in the cases described above.\n\n // Increase session counter after locking the Vault.\n _sessionIdSlot().tIncrement();\n }\n }\n\n /// @inheritdoc IVaultMain\n function unlock(bytes calldata data) external transient returns (bytes memory result) {\n return (msg.sender).functionCall(data);\n }\n\n /// @inheritdoc IVaultMain\n function settle(IERC20 token, uint256 amountHint) external nonReentrant onlyWhenUnlocked returns (uint256 credit) {\n uint256 reservesBefore = _reservesOf[token];\n uint256 currentReserves = token.balanceOf(address(this));\n _reservesOf[token] = currentReserves;\n credit = currentReserves - reservesBefore;\n\n // If the given hint is equal or greater to the reserve difference, we just take the actual reserve difference\n // as the paid amount; the actual balance of the tokens in the Vault is what matters here.\n if (credit > amountHint) {\n // If the difference in reserves is higher than the amount claimed to be paid by the caller, there was some\n // leftover that had been sent to the Vault beforehand, which was not incorporated into the reserves.\n // In that case, we simply discard the leftover by considering the given hint as the amount paid.\n // In turn, this gives the caller credit for the given amount hint, which is what the caller is expecting.\n credit = amountHint;\n }\n\n _supplyCredit(token, credit);\n }\n\n /// @inheritdoc IVaultMain\n function sendTo(IERC20 token, address to, uint256 amount) external nonReentrant onlyWhenUnlocked {\n _takeDebt(token, amount);\n _reservesOf[token] -= amount;\n\n token.safeTransfer(to, amount);\n }\n\n /*******************************************************************************\n Pool Operations\n *******************************************************************************/\n\n // The Vault performs all upscaling and downscaling (due to token decimals, rates, etc.), so that the pools\n // don't have to. However, scaling inevitably leads to rounding errors, so we take great care to ensure that\n // any rounding errors favor the Vault. An important invariant of the system is that there is no repeatable\n // path where tokensOut > tokensIn.\n //\n // In general, this means rounding up any values entering the Vault, and rounding down any values leaving\n // the Vault, so that external users either pay a little extra or receive a little less in the case of a\n // rounding error.\n //\n // However, it's not always straightforward to determine the correct rounding direction, given the presence\n // and complexity of intermediate steps. An \"amountIn\" sounds like it should be rounded up: but only if that\n // is the amount actually being transferred. If instead it is an amount sent to the pool math, where rounding\n // up would result in a *higher* calculated amount out, that would favor the user instead of the Vault. So in\n // that case, amountIn should be rounded down.\n //\n // See comments justifying the rounding direction in each case.\n //\n // This reasoning applies to Weighted Pool math, and is likely to apply to others as well, but of course\n // it's possible a new pool type might not conform. Duplicate the tests for new pool types (e.g., Stable Math).\n // Also, the final code should ensure that we are not relying entirely on the rounding directions here,\n // but have enough additional layers (e.g., minimum amounts, buffer wei on all transfers) to guarantee safety,\n // even if it turns out these directions are incorrect for a new pool type.\n\n /*******************************************************************************\n Swaps\n *******************************************************************************/\n\n /// @inheritdoc IVaultMain\n function swap(\n VaultSwapParams memory vaultSwapParams\n )\n external\n onlyWhenUnlocked\n withInitializedPool(vaultSwapParams.pool)\n returns (uint256 amountCalculated, uint256 amountIn, uint256 amountOut)\n {\n _ensureUnpaused(vaultSwapParams.pool);\n\n if (vaultSwapParams.amountGivenRaw == 0) {\n revert AmountGivenZero();\n }\n\n if (vaultSwapParams.tokenIn == vaultSwapParams.tokenOut) {\n revert CannotSwapSameToken();\n }\n\n // `_loadPoolDataUpdatingBalancesAndYieldFees` is non-reentrant, as it updates storage as well\n // as filling in poolData in memory. Since the swap hooks are reentrant and could do anything, including\n // change these balances, we cannot defer settlement until `_swap`.\n //\n // Sets all fields in `poolData`. Side effects: updates `_poolTokenBalances`, `_aggregateFeeAmounts`\n // in storage.\n PoolData memory poolData = _loadPoolDataUpdatingBalancesAndYieldFees(vaultSwapParams.pool, Rounding.ROUND_DOWN);\n SwapState memory swapState = _loadSwapState(vaultSwapParams, poolData);\n PoolSwapParams memory poolSwapParams = _buildPoolSwapParams(vaultSwapParams, swapState, poolData);\n\n if (poolData.poolConfigBits.shouldCallBeforeSwap()) {\n HooksConfigLib.callBeforeSwapHook(\n poolSwapParams,\n vaultSwapParams.pool,\n _hooksContracts[vaultSwapParams.pool]\n );\n\n // The call to `onBeforeSwap` could potentially update token rates and balances.\n // We update `poolData.tokenRates`, `poolData.rawBalances` and `poolData.balancesLiveScaled18`\n // to ensure the `onSwap` and `onComputeDynamicSwapFeePercentage` are called with the current values.\n poolData.reloadBalancesAndRates(_poolTokenBalances[vaultSwapParams.pool], Rounding.ROUND_DOWN);\n\n // Also update amountGivenScaled18, as it will now be used in the swap, and the rates might have changed.\n swapState.amountGivenScaled18 = _computeAmountGivenScaled18(vaultSwapParams, poolData, swapState);\n\n poolSwapParams = _buildPoolSwapParams(vaultSwapParams, swapState, poolData);\n }\n\n // Note that this must be called *after* the before hook, to guarantee that the swap params are the same\n // as those passed to the main operation.\n //\n // At this point, the static swap fee percentage is loaded in the `swapState` as the default, to be used\n // unless the pool has a dynamic swap fee. It is also passed into the hook, to support common cases\n // where the dynamic fee computation logic uses it.\n if (poolData.poolConfigBits.shouldCallComputeDynamicSwapFee()) {\n swapState.swapFeePercentage = HooksConfigLib.callComputeDynamicSwapFeeHook(\n poolSwapParams,\n vaultSwapParams.pool,\n swapState.swapFeePercentage,\n _hooksContracts[vaultSwapParams.pool]\n );\n }\n\n // Non-reentrant call that updates accounting.\n // The following side-effects are important to note:\n // PoolData balancesRaw and balancesLiveScaled18 are adjusted for swap amounts and fees inside of _swap.\n uint256 amountCalculatedScaled18;\n (amountCalculated, amountCalculatedScaled18, amountIn, amountOut) = _swap(\n vaultSwapParams,\n swapState,\n poolData,\n poolSwapParams\n );\n\n // The new amount calculated is 'amountCalculated + delta'. If the underlying hook fails, or limits are\n // violated, `onAfterSwap` will revert. Uses msg.sender as the Router (the contract that called the Vault).\n if (poolData.poolConfigBits.shouldCallAfterSwap()) {\n // `hooksContract` needed to fix stack too deep.\n IHooks hooksContract = _hooksContracts[vaultSwapParams.pool];\n\n amountCalculated = poolData.poolConfigBits.callAfterSwapHook(\n amountCalculatedScaled18,\n amountCalculated,\n msg.sender,\n vaultSwapParams,\n swapState,\n poolData,\n hooksContract\n );\n }\n\n if (vaultSwapParams.kind == SwapKind.EXACT_IN) {\n amountOut = amountCalculated;\n } else {\n amountIn = amountCalculated;\n }\n }\n\n function _loadSwapState(\n VaultSwapParams memory vaultSwapParams,\n PoolData memory poolData\n ) internal pure returns (SwapState memory swapState) {\n swapState.indexIn = _findTokenIndex(poolData.tokens, vaultSwapParams.tokenIn);\n swapState.indexOut = _findTokenIndex(poolData.tokens, vaultSwapParams.tokenOut);\n\n swapState.amountGivenScaled18 = _computeAmountGivenScaled18(vaultSwapParams, poolData, swapState);\n swapState.swapFeePercentage = poolData.poolConfigBits.getStaticSwapFeePercentage();\n }\n\n function _buildPoolSwapParams(\n VaultSwapParams memory vaultSwapParams,\n SwapState memory swapState,\n PoolData memory poolData\n ) internal view returns (PoolSwapParams memory) {\n // Uses msg.sender as the Router (the contract that called the Vault).\n return\n PoolSwapParams({\n kind: vaultSwapParams.kind,\n amountGivenScaled18: swapState.amountGivenScaled18,\n balancesScaled18: poolData.balancesLiveScaled18,\n indexIn: swapState.indexIn,\n indexOut: swapState.indexOut,\n router: msg.sender,\n userData: vaultSwapParams.userData\n });\n }\n\n /**\n * @dev Preconditions: decimalScalingFactors and tokenRates in `poolData` must be current.\n * Uses amountGivenRaw and kind from `vaultSwapParams`.\n */\n function _computeAmountGivenScaled18(\n VaultSwapParams memory vaultSwapParams,\n PoolData memory poolData,\n SwapState memory swapState\n ) internal pure returns (uint256) {\n // If the amountGiven is entering the pool math (ExactIn), round down, since a lower apparent amountIn leads\n // to a lower calculated amountOut, favoring the pool.\n return\n vaultSwapParams.kind == SwapKind.EXACT_IN\n ? vaultSwapParams.amountGivenRaw.toScaled18ApplyRateRoundDown(\n poolData.decimalScalingFactors[swapState.indexIn],\n poolData.tokenRates[swapState.indexIn]\n )\n : vaultSwapParams.amountGivenRaw.toScaled18ApplyRateRoundUp(\n poolData.decimalScalingFactors[swapState.indexOut],\n // If the swap is ExactOut, the amountGiven is the amount of tokenOut. So, we want to use the rate\n // rounded up to calculate the amountGivenScaled18, because if this value is bigger, the\n // amountCalculatedRaw will be bigger, implying that the user will pay for any rounding\n // inconsistency, and not the Vault.\n poolData.tokenRates[swapState.indexOut].computeRateRoundUp()\n );\n }\n\n /**\n * @dev Auxiliary struct to prevent stack-too-deep issues inside `_swap` function.\n * Total swap fees include LP (pool) fees and aggregate (protocol + pool creator) fees.\n */\n struct SwapInternalLocals {\n uint256 totalSwapFeeAmountScaled18;\n uint256 totalSwapFeeAmountRaw;\n uint256 aggregateFeeAmountRaw;\n }\n\n /**\n * @dev Main non-reentrant portion of the swap, which calls the pool hook and updates accounting. `vaultSwapParams`\n * are passed to the pool's `onSwap` hook.\n *\n * Preconditions: complete `SwapParams`, `SwapState`, and `PoolData`.\n * Side effects: mutates balancesRaw and balancesLiveScaled18 in `poolData`.\n * Updates `_aggregateFeeAmounts`, and `_poolTokenBalances` in storage.\n * Emits Swap event.\n */\n function _swap(\n VaultSwapParams memory vaultSwapParams,\n SwapState memory swapState,\n PoolData memory poolData,\n PoolSwapParams memory poolSwapParams\n )\n internal\n nonReentrant\n returns (\n uint256 amountCalculatedRaw,\n uint256 amountCalculatedScaled18,\n uint256 amountInRaw,\n uint256 amountOutRaw\n )\n {\n SwapInternalLocals memory locals;\n\n if (vaultSwapParams.kind == SwapKind.EXACT_IN) {\n // Round up to avoid losses during precision loss.\n locals.totalSwapFeeAmountScaled18 = poolSwapParams.amountGivenScaled18.mulUp(swapState.swapFeePercentage);\n poolSwapParams.amountGivenScaled18 -= locals.totalSwapFeeAmountScaled18;\n }\n\n _ensureValidSwapAmount(poolSwapParams.amountGivenScaled18);\n\n // Perform the swap request hook and compute the new balances for 'token in' and 'token out' after the swap.\n amountCalculatedScaled18 = IBasePool(vaultSwapParams.pool).onSwap(poolSwapParams);\n\n _ensureValidSwapAmount(amountCalculatedScaled18);\n\n // Note that balances are kept in memory, and are not fully computed until the `setPoolBalances` below.\n // Intervening code cannot read balances from storage, as they are temporarily out-of-sync here. This function\n // is nonReentrant, to guard against read-only reentrancy issues.\n\n // (1) and (2): get raw amounts and check limits.\n if (vaultSwapParams.kind == SwapKind.EXACT_IN) {\n // Restore the original input value; this function should not mutate memory inputs.\n // At this point swap fee amounts have already been computed for EXACT_IN.\n poolSwapParams.amountGivenScaled18 = swapState.amountGivenScaled18;\n\n // For `ExactIn` the amount calculated is leaving the Vault, so we round down.\n amountCalculatedRaw = amountCalculatedScaled18.toRawUndoRateRoundDown(\n poolData.decimalScalingFactors[swapState.indexOut],\n // If the swap is ExactIn, the amountCalculated is the amount of tokenOut. So, we want to use the rate\n // rounded up to calculate the amountCalculatedRaw, because scale down (undo rate) is a division, the\n // larger the rate, the smaller the amountCalculatedRaw. So, any rounding imprecision will stay in the\n // Vault and not be drained by the user.\n poolData.tokenRates[swapState.indexOut].computeRateRoundUp()\n );\n\n (amountInRaw, amountOutRaw) = (vaultSwapParams.amountGivenRaw, amountCalculatedRaw);\n\n if (amountOutRaw < vaultSwapParams.limitRaw) {\n revert SwapLimit(amountOutRaw, vaultSwapParams.limitRaw);\n }\n } else {\n // To ensure symmetry with EXACT_IN, the swap fee used by ExactOut is\n // `amountCalculated * fee% / (100% - fee%)`. Add it to the calculated amountIn. Round up to avoid losing\n // value due to precision loss. Note that if the `swapFeePercentage` were 100% here, this would revert with\n // division by zero. We protect against this by ensuring in PoolConfigLib and HooksConfigLib that all swap\n // fees (static, dynamic, pool creator, and aggregate) are less than 100%.\n locals.totalSwapFeeAmountScaled18 = amountCalculatedScaled18.mulDivUp(\n swapState.swapFeePercentage,\n swapState.swapFeePercentage.complement()\n );\n\n amountCalculatedScaled18 += locals.totalSwapFeeAmountScaled18;\n\n // For `ExactOut` the amount calculated is entering the Vault, so we round up.\n amountCalculatedRaw = amountCalculatedScaled18.toRawUndoRateRoundUp(\n poolData.decimalScalingFactors[swapState.indexIn],\n poolData.tokenRates[swapState.indexIn]\n );\n\n (amountInRaw, amountOutRaw) = (amountCalculatedRaw, vaultSwapParams.amountGivenRaw);\n\n if (amountInRaw > vaultSwapParams.limitRaw) {\n revert SwapLimit(amountInRaw, vaultSwapParams.limitRaw);\n }\n }\n\n // 3) Deltas: debit for token in, credit for token out.\n _takeDebt(vaultSwapParams.tokenIn, amountInRaw);\n _supplyCredit(vaultSwapParams.tokenOut, amountOutRaw);\n\n // 4) Compute and charge protocol and creator fees.\n // Note that protocol fee storage is updated before balance storage, as the final raw balances need to take\n // the fees into account.\n (locals.totalSwapFeeAmountRaw, locals.aggregateFeeAmountRaw) = _computeAndChargeAggregateSwapFees(\n poolData,\n locals.totalSwapFeeAmountScaled18,\n vaultSwapParams.pool,\n vaultSwapParams.tokenIn,\n swapState.indexIn\n );\n\n // 5) Pool balances: raw and live.\n\n poolData.updateRawAndLiveBalance(\n swapState.indexIn,\n poolData.balancesRaw[swapState.indexIn] + amountInRaw - locals.aggregateFeeAmountRaw,\n Rounding.ROUND_DOWN\n );\n poolData.updateRawAndLiveBalance(\n swapState.indexOut,\n poolData.balancesRaw[swapState.indexOut] - amountOutRaw,\n Rounding.ROUND_DOWN\n );\n\n // 6) Store pool balances, raw and live (only index in and out).\n mapping(uint256 tokenIndex => bytes32 packedTokenBalance) storage poolBalances = _poolTokenBalances[\n vaultSwapParams.pool\n ];\n poolBalances[swapState.indexIn] = PackedTokenBalance.toPackedBalance(\n poolData.balancesRaw[swapState.indexIn],\n poolData.balancesLiveScaled18[swapState.indexIn]\n );\n poolBalances[swapState.indexOut] = PackedTokenBalance.toPackedBalance(\n poolData.balancesRaw[swapState.indexOut],\n poolData.balancesLiveScaled18[swapState.indexOut]\n );\n\n // 7) Off-chain events.\n emit Swap(\n vaultSwapParams.pool,\n vaultSwapParams.tokenIn,\n vaultSwapParams.tokenOut,\n amountInRaw,\n amountOutRaw,\n swapState.swapFeePercentage,\n locals.totalSwapFeeAmountRaw\n );\n }\n\n /***************************************************************************\n Add Liquidity\n ***************************************************************************/\n\n /// @inheritdoc IVaultMain\n function addLiquidity(\n AddLiquidityParams memory params\n )\n external\n onlyWhenUnlocked\n withInitializedPool(params.pool)\n returns (uint256[] memory amountsIn, uint256 bptAmountOut, bytes memory returnData)\n {\n // Round balances up when adding liquidity:\n // If proportional, higher balances = higher proportional amountsIn, favoring the pool.\n // If unbalanced, higher balances = lower invariant ratio with fees.\n // bptOut = supply * (ratio - 1), so lower ratio = less bptOut, favoring the pool.\n\n _ensureUnpaused(params.pool);\n _addLiquidityCalled().tSet(_sessionIdSlot().tload(), params.pool, true);\n\n // `_loadPoolDataUpdatingBalancesAndYieldFees` is non-reentrant, as it updates storage as well\n // as filling in poolData in memory. Since the add liquidity hooks are reentrant and could do anything,\n // including change these balances, we cannot defer settlement until `_addLiquidity`.\n //\n // Sets all fields in `poolData`. Side effects: updates `_poolTokenBalances`, and\n // `_aggregateFeeAmounts` in storage.\n PoolData memory poolData = _loadPoolDataUpdatingBalancesAndYieldFees(params.pool, Rounding.ROUND_UP);\n InputHelpers.ensureInputLengthMatch(poolData.tokens.length, params.maxAmountsIn.length);\n\n // Amounts are entering pool math, so round down.\n // Introducing `maxAmountsInScaled18` here and passing it through to _addLiquidity is not ideal,\n // but it avoids the even worse options of mutating amountsIn inside AddLiquidityParams,\n // or cluttering the AddLiquidityParams interface by adding amountsInScaled18.\n uint256[] memory maxAmountsInScaled18 = params.maxAmountsIn.copyToScaled18ApplyRateRoundDownArray(\n poolData.decimalScalingFactors,\n poolData.tokenRates\n );\n\n if (poolData.poolConfigBits.shouldCallBeforeAddLiquidity()) {\n HooksConfigLib.callBeforeAddLiquidityHook(\n msg.sender,\n maxAmountsInScaled18,\n params,\n poolData,\n _hooksContracts[params.pool]\n );\n // The hook might have altered the balances, so we need to read them again to ensure that the data\n // are fresh moving forward. We also need to upscale (adding liquidity, so round up) again.\n poolData.reloadBalancesAndRates(_poolTokenBalances[params.pool], Rounding.ROUND_UP);\n\n // Also update maxAmountsInScaled18, as the rates might have changed.\n maxAmountsInScaled18 = params.maxAmountsIn.copyToScaled18ApplyRateRoundDownArray(\n poolData.decimalScalingFactors,\n poolData.tokenRates\n );\n }\n\n // The bulk of the work is done here: the corresponding Pool hook is called, and the final balances\n // are computed. This function is non-reentrant, as it performs the accounting updates.\n //\n // Note that poolData is mutated to update the Raw and Live balances, so they are accurate when passed\n // into the AfterAddLiquidity hook.\n //\n // `amountsInScaled18` will be overwritten in the custom case, so we need to pass it back and forth to\n // encapsulate that logic in `_addLiquidity`.\n uint256[] memory amountsInScaled18;\n (amountsIn, amountsInScaled18, bptAmountOut, returnData) = _addLiquidity(\n poolData,\n params,\n maxAmountsInScaled18\n );\n\n // AmountsIn can be changed by onAfterAddLiquidity if the hook charges fees or gives discounts.\n // Uses msg.sender as the Router (the contract that called the Vault).\n if (poolData.poolConfigBits.shouldCallAfterAddLiquidity()) {\n // `hooksContract` needed to fix stack too deep.\n IHooks hooksContract = _hooksContracts[params.pool];\n\n amountsIn = poolData.poolConfigBits.callAfterAddLiquidityHook(\n msg.sender,\n amountsInScaled18,\n amountsIn,\n bptAmountOut,\n params,\n poolData,\n hooksContract\n );\n }\n }\n\n // Avoid \"stack too deep\" - without polluting the Add/RemoveLiquidity params interface.\n struct LiquidityLocals {\n uint256 numTokens;\n uint256 aggregateSwapFeeAmountRaw;\n uint256 tokenIndex;\n }\n\n /**\n * @dev Calls the appropriate pool hook and calculates the required inputs and outputs for the operation\n * considering the given kind, and updates the Vault's internal accounting. This includes:\n * - Setting pool balances\n * - Taking debt from the liquidity provider\n * - Minting pool tokens\n * - Emitting events\n *\n * It is non-reentrant, as it performs external calls and updates the Vault's state accordingly.\n */\n function _addLiquidity(\n PoolData memory poolData,\n AddLiquidityParams memory params,\n uint256[] memory maxAmountsInScaled18\n )\n internal\n nonReentrant\n returns (\n uint256[] memory amountsInRaw,\n uint256[] memory amountsInScaled18,\n uint256 bptAmountOut,\n bytes memory returnData\n )\n {\n LiquidityLocals memory locals;\n locals.numTokens = poolData.tokens.length;\n amountsInRaw = new uint256[](locals.numTokens);\n // `swapFeeAmounts` stores scaled18 amounts first, and is then reused to store raw amounts.\n uint256[] memory swapFeeAmounts;\n\n if (params.kind == AddLiquidityKind.PROPORTIONAL) {\n bptAmountOut = params.minBptAmountOut;\n // Initializes the swapFeeAmounts empty array (no swap fees on proportional add liquidity).\n swapFeeAmounts = new uint256[](locals.numTokens);\n\n amountsInScaled18 = BasePoolMath.computeProportionalAmountsIn(\n poolData.balancesLiveScaled18,\n _totalSupply(params.pool),\n bptAmountOut\n );\n } else if (params.kind == AddLiquidityKind.DONATION) {\n poolData.poolConfigBits.requireDonationEnabled();\n\n swapFeeAmounts = new uint256[](maxAmountsInScaled18.length);\n bptAmountOut = 0;\n amountsInScaled18 = maxAmountsInScaled18;\n } else if (params.kind == AddLiquidityKind.UNBALANCED) {\n poolData.poolConfigBits.requireUnbalancedLiquidityEnabled();\n\n amountsInScaled18 = maxAmountsInScaled18;\n // Deep copy given max amounts in raw to calculated amounts in raw to avoid scaling later, ensuring that\n // `maxAmountsIn` is preserved.\n ScalingHelpers.copyToArray(params.maxAmountsIn, amountsInRaw);\n\n (bptAmountOut, swapFeeAmounts) = BasePoolMath.computeAddLiquidityUnbalanced(\n poolData.balancesLiveScaled18,\n maxAmountsInScaled18,\n _totalSupply(params.pool),\n poolData.poolConfigBits.getStaticSwapFeePercentage(),\n IBasePool(params.pool)\n );\n } else if (params.kind == AddLiquidityKind.SINGLE_TOKEN_EXACT_OUT) {\n poolData.poolConfigBits.requireUnbalancedLiquidityEnabled();\n\n bptAmountOut = params.minBptAmountOut;\n locals.tokenIndex = InputHelpers.getSingleInputIndex(maxAmountsInScaled18);\n\n amountsInScaled18 = maxAmountsInScaled18;\n (amountsInScaled18[locals.tokenIndex], swapFeeAmounts) = BasePoolMath\n .computeAddLiquiditySingleTokenExactOut(\n poolData.balancesLiveScaled18,\n locals.tokenIndex,\n bptAmountOut,\n _totalSupply(params.pool),\n poolData.poolConfigBits.getStaticSwapFeePercentage(),\n IBasePool(params.pool)\n );\n } else if (params.kind == AddLiquidityKind.CUSTOM) {\n poolData.poolConfigBits.requireAddLiquidityCustomEnabled();\n\n // Uses msg.sender as the Router (the contract that called the Vault).\n (amountsInScaled18, bptAmountOut, swapFeeAmounts, returnData) = IPoolLiquidity(params.pool)\n .onAddLiquidityCustom(\n msg.sender,\n maxAmountsInScaled18,\n params.minBptAmountOut,\n poolData.balancesLiveScaled18,\n params.userData\n );\n } else {\n revert InvalidAddLiquidityKind();\n }\n\n // At this point we have the calculated BPT amount.\n if (bptAmountOut < params.minBptAmountOut) {\n revert BptAmountOutBelowMin(bptAmountOut, params.minBptAmountOut);\n }\n\n _ensureValidTradeAmount(bptAmountOut);\n\n for (uint256 i = 0; i < locals.numTokens; ++i) {\n uint256 amountInRaw;\n\n // 1) Calculate raw amount in.\n {\n uint256 amountInScaled18 = amountsInScaled18[i];\n _ensureValidTradeAmount(amountInScaled18);\n\n // If the value in memory is not set, convert scaled amount to raw.\n if (amountsInRaw[i] == 0) {\n // amountsInRaw are amounts actually entering the Pool, so we round up.\n // Do not mutate in place yet, as we need them scaled for the `onAfterAddLiquidity` hook.\n amountInRaw = amountInScaled18.toRawUndoRateRoundUp(\n poolData.decimalScalingFactors[i],\n poolData.tokenRates[i]\n );\n\n amountsInRaw[i] = amountInRaw;\n } else {\n // Exact in requests will have the raw amount in memory already, so we use it moving forward and\n // skip downscaling.\n amountInRaw = amountsInRaw[i];\n }\n }\n\n IERC20 token = poolData.tokens[i];\n\n // 2) Check limits for raw amounts.\n if (amountInRaw > params.maxAmountsIn[i]) {\n revert AmountInAboveMax(token, amountInRaw, params.maxAmountsIn[i]);\n }\n\n // 3) Deltas: Debit of token[i] for amountInRaw.\n _takeDebt(token, amountInRaw);\n\n // 4) Compute and charge protocol and creator fees.\n // swapFeeAmounts[i] is now raw instead of scaled.\n (swapFeeAmounts[i], locals.aggregateSwapFeeAmountRaw) = _computeAndChargeAggregateSwapFees(\n poolData,\n swapFeeAmounts[i],\n params.pool,\n token,\n i\n );\n\n // 5) Pool balances: raw and live.\n // We need regular balances to complete the accounting, and the upscaled balances\n // to use in the `after` hook later on.\n\n // A pool's token balance increases by amounts in after adding liquidity, minus fees.\n poolData.updateRawAndLiveBalance(\n i,\n poolData.balancesRaw[i] + amountInRaw - locals.aggregateSwapFeeAmountRaw,\n Rounding.ROUND_DOWN\n );\n }\n\n // 6) Store pool balances, raw and live.\n _writePoolBalancesToStorage(params.pool, poolData);\n\n // 7) BPT supply adjustment.\n // When adding liquidity, we must mint tokens concurrently with updating pool balances,\n // as the pool's math relies on totalSupply.\n _mint(address(params.pool), params.to, bptAmountOut);\n\n // 8) Off-chain events.\n emit LiquidityAdded(\n params.pool,\n params.to,\n params.kind,\n _totalSupply(params.pool),\n amountsInRaw,\n swapFeeAmounts\n );\n }\n\n /***************************************************************************\n Remove Liquidity\n ***************************************************************************/\n\n /// @inheritdoc IVaultMain\n function removeLiquidity(\n RemoveLiquidityParams memory params\n )\n external\n onlyWhenUnlocked\n withInitializedPool(params.pool)\n returns (uint256 bptAmountIn, uint256[] memory amountsOut, bytes memory returnData)\n {\n // Round down when removing liquidity:\n // If proportional, lower balances = lower proportional amountsOut, favoring the pool.\n // If unbalanced, lower balances = lower invariant ratio without fees.\n // bptIn = supply * (1 - ratio), so lower ratio = more bptIn, favoring the pool.\n _ensureUnpaused(params.pool);\n\n // `_loadPoolDataUpdatingBalancesAndYieldFees` is non-reentrant, as it updates storage as well\n // as filling in poolData in memory. Since the swap hooks are reentrant and could do anything, including\n // change these balances, we cannot defer settlement until `_removeLiquidity`.\n //\n // Sets all fields in `poolData`. Side effects: updates `_poolTokenBalances` and\n // `_aggregateFeeAmounts in storage.\n PoolData memory poolData = _loadPoolDataUpdatingBalancesAndYieldFees(params.pool, Rounding.ROUND_DOWN);\n InputHelpers.ensureInputLengthMatch(poolData.tokens.length, params.minAmountsOut.length);\n\n // Amounts are entering pool math; higher amounts would burn more BPT, so round up to favor the pool.\n // Do not mutate minAmountsOut, so that we can directly compare the raw limits later, without potentially\n // losing precision by scaling up and then down.\n uint256[] memory minAmountsOutScaled18 = params.minAmountsOut.copyToScaled18ApplyRateRoundUpArray(\n poolData.decimalScalingFactors,\n poolData.tokenRates\n );\n\n // Uses msg.sender as the Router (the contract that called the Vault).\n if (poolData.poolConfigBits.shouldCallBeforeRemoveLiquidity()) {\n HooksConfigLib.callBeforeRemoveLiquidityHook(\n minAmountsOutScaled18,\n msg.sender,\n params,\n poolData,\n _hooksContracts[params.pool]\n );\n\n // The hook might alter the balances, so we need to read them again to ensure that the data is\n // fresh moving forward. We also need to upscale (removing liquidity, so round down) again.\n poolData.reloadBalancesAndRates(_poolTokenBalances[params.pool], Rounding.ROUND_DOWN);\n\n // Also update minAmountsOutScaled18, as the rates might have changed.\n minAmountsOutScaled18 = params.minAmountsOut.copyToScaled18ApplyRateRoundUpArray(\n poolData.decimalScalingFactors,\n poolData.tokenRates\n );\n }\n\n // The bulk of the work is done here: the corresponding Pool hook is called, and the final balances\n // are computed. This function is non-reentrant, as it performs the accounting updates.\n //\n // Note that poolData is mutated to update the Raw and Live balances, so they are accurate when passed\n // into the AfterRemoveLiquidity hook.\n uint256[] memory amountsOutScaled18;\n (bptAmountIn, amountsOut, amountsOutScaled18, returnData) = _removeLiquidity(\n poolData,\n params,\n minAmountsOutScaled18\n );\n\n // AmountsOut can be changed by onAfterRemoveLiquidity if the hook charges fees or gives discounts.\n // Uses msg.sender as the Router (the contract that called the Vault).\n if (poolData.poolConfigBits.shouldCallAfterRemoveLiquidity()) {\n // `hooksContract` needed to fix stack too deep.\n IHooks hooksContract = _hooksContracts[params.pool];\n\n amountsOut = poolData.poolConfigBits.callAfterRemoveLiquidityHook(\n msg.sender,\n amountsOutScaled18,\n amountsOut,\n bptAmountIn,\n params,\n poolData,\n hooksContract\n );\n }\n }\n\n /**\n * @dev Calls the appropriate pool hook and calculates the required inputs and outputs for the operation\n * considering the given kind, and updates the Vault's internal accounting. This includes:\n * - Setting pool balances\n * - Supplying credit to the liquidity provider\n * - Burning pool tokens\n * - Emitting events\n *\n * It is non-reentrant, as it performs external calls and updates the Vault's state accordingly.\n */\n function _removeLiquidity(\n PoolData memory poolData,\n RemoveLiquidityParams memory params,\n uint256[] memory minAmountsOutScaled18\n )\n internal\n nonReentrant\n returns (\n uint256 bptAmountIn,\n uint256[] memory amountsOutRaw,\n uint256[] memory amountsOutScaled18,\n bytes memory returnData\n )\n {\n LiquidityLocals memory locals;\n locals.numTokens = poolData.tokens.length;\n amountsOutRaw = new uint256[](locals.numTokens);\n // `swapFeeAmounts` stores scaled18 amounts first, and is then reused to store raw amounts.\n uint256[] memory swapFeeAmounts;\n\n if (params.kind == RemoveLiquidityKind.PROPORTIONAL) {\n bptAmountIn = params.maxBptAmountIn;\n swapFeeAmounts = new uint256[](locals.numTokens);\n amountsOutScaled18 = BasePoolMath.computeProportionalAmountsOut(\n poolData.balancesLiveScaled18,\n _totalSupply(params.pool),\n bptAmountIn\n );\n\n // Charge round-trip fee if liquidity was added to this pool in the same unlock call; this is not really a\n // valid use case, and may be an attack. Use caution when removing liquidity through a Safe or other\n // multisig / non-EOA address. Use \"sign and execute,\" ideally through a private node (or at least not\n // allowing public execution) to avoid front-running, and always set strict limits so that it will revert\n // if any unexpected fees are charged. (It is also possible to check whether the flag has been set before\n // withdrawing, by calling `getAddLiquidityCalledFlag`.)\n if (_addLiquidityCalled().tGet(_sessionIdSlot().tload(), params.pool)) {\n uint256 swapFeePercentage = poolData.poolConfigBits.getStaticSwapFeePercentage();\n for (uint256 i = 0; i < locals.numTokens; ++i) {\n swapFeeAmounts[i] = amountsOutScaled18[i].mulUp(swapFeePercentage);\n amountsOutScaled18[i] -= swapFeeAmounts[i];\n }\n }\n } else if (params.kind == RemoveLiquidityKind.SINGLE_TOKEN_EXACT_IN) {\n poolData.poolConfigBits.requireUnbalancedLiquidityEnabled();\n bptAmountIn = params.maxBptAmountIn;\n amountsOutScaled18 = minAmountsOutScaled18;\n locals.tokenIndex = InputHelpers.getSingleInputIndex(params.minAmountsOut);\n\n (amountsOutScaled18[locals.tokenIndex], swapFeeAmounts) = BasePoolMath\n .computeRemoveLiquiditySingleTokenExactIn(\n poolData.balancesLiveScaled18,\n locals.tokenIndex,\n bptAmountIn,\n _totalSupply(params.pool),\n poolData.poolConfigBits.getStaticSwapFeePercentage(),\n IBasePool(params.pool)\n );\n } else if (params.kind == RemoveLiquidityKind.SINGLE_TOKEN_EXACT_OUT) {\n poolData.poolConfigBits.requireUnbalancedLiquidityEnabled();\n amountsOutScaled18 = minAmountsOutScaled18;\n locals.tokenIndex = InputHelpers.getSingleInputIndex(params.minAmountsOut);\n amountsOutRaw[locals.tokenIndex] = params.minAmountsOut[locals.tokenIndex];\n\n (bptAmountIn, swapFeeAmounts) = BasePoolMath.computeRemoveLiquiditySingleTokenExactOut(\n poolData.balancesLiveScaled18,\n locals.tokenIndex,\n amountsOutScaled18[locals.tokenIndex],\n _totalSupply(params.pool),\n poolData.poolConfigBits.getStaticSwapFeePercentage(),\n IBasePool(params.pool)\n );\n } else if (params.kind == RemoveLiquidityKind.CUSTOM) {\n poolData.poolConfigBits.requireRemoveLiquidityCustomEnabled();\n // Uses msg.sender as the Router (the contract that called the Vault).\n (bptAmountIn, amountsOutScaled18, swapFeeAmounts, returnData) = IPoolLiquidity(params.pool)\n .onRemoveLiquidityCustom(\n msg.sender,\n params.maxBptAmountIn,\n minAmountsOutScaled18,\n poolData.balancesLiveScaled18,\n params.userData\n );\n } else {\n revert InvalidRemoveLiquidityKind();\n }\n\n if (bptAmountIn > params.maxBptAmountIn) {\n revert BptAmountInAboveMax(bptAmountIn, params.maxBptAmountIn);\n }\n\n _ensureValidTradeAmount(bptAmountIn);\n\n for (uint256 i = 0; i < locals.numTokens; ++i) {\n uint256 amountOutRaw;\n\n // 1) Calculate raw amount out.\n {\n uint256 amountOutScaled18 = amountsOutScaled18[i];\n _ensureValidTradeAmount(amountOutScaled18);\n\n // If the value in memory is not set, convert scaled amount to raw.\n if (amountsOutRaw[i] == 0) {\n // amountsOut are amounts exiting the Pool, so we round down.\n // Do not mutate in place yet, as we need them scaled for the `onAfterRemoveLiquidity` hook.\n amountOutRaw = amountOutScaled18.toRawUndoRateRoundDown(\n poolData.decimalScalingFactors[i],\n poolData.tokenRates[i]\n );\n amountsOutRaw[i] = amountOutRaw;\n } else {\n // Exact out requests will have the raw amount in memory already, so we use it moving forward and\n // skip downscaling.\n amountOutRaw = amountsOutRaw[i];\n }\n }\n\n IERC20 token = poolData.tokens[i];\n // 2) Check limits for raw amounts.\n if (amountOutRaw < params.minAmountsOut[i]) {\n revert AmountOutBelowMin(token, amountOutRaw, params.minAmountsOut[i]);\n }\n\n // 3) Deltas: Credit token[i] for amountOutRaw.\n _supplyCredit(token, amountOutRaw);\n\n // 4) Compute and charge protocol and creator fees.\n // swapFeeAmounts[i] is now raw instead of scaled.\n (swapFeeAmounts[i], locals.aggregateSwapFeeAmountRaw) = _computeAndChargeAggregateSwapFees(\n poolData,\n swapFeeAmounts[i],\n params.pool,\n token,\n i\n );\n\n // 5) Pool balances: raw and live.\n // We need regular balances to complete the accounting, and the upscaled balances\n // to use in the `after` hook later on.\n\n // A Pool's token balance always decreases after an exit (potentially by 0).\n // Also adjust by protocol and pool creator fees.\n poolData.updateRawAndLiveBalance(\n i,\n poolData.balancesRaw[i] - (amountOutRaw + locals.aggregateSwapFeeAmountRaw),\n Rounding.ROUND_DOWN\n );\n }\n\n // 6) Store pool balances, raw and live.\n _writePoolBalancesToStorage(params.pool, poolData);\n\n // 7) BPT supply adjustment.\n // Uses msg.sender as the Router (the contract that called the Vault).\n _spendAllowance(address(params.pool), params.from, msg.sender, bptAmountIn);\n\n if (_isQueryContext()) {\n // Increase `from` balance to ensure the burn function succeeds.\n _queryModeBalanceIncrease(params.pool, params.from, bptAmountIn);\n }\n // When removing liquidity, we must burn tokens concurrently with updating pool balances,\n // as the pool's math relies on totalSupply.\n // Burning will be reverted if it results in a total supply less than the _POOL_MINIMUM_TOTAL_SUPPLY.\n _burn(address(params.pool), params.from, bptAmountIn);\n\n // 8) Off-chain events.\n emit LiquidityRemoved(\n params.pool,\n params.from,\n params.kind,\n _totalSupply(params.pool),\n amountsOutRaw,\n swapFeeAmounts\n );\n }\n\n /**\n * @dev Preconditions: poolConfigBits, decimalScalingFactors, tokenRates in `poolData`.\n * Side effects: updates `_aggregateFeeAmounts` storage.\n * Note that this computes the aggregate total of the protocol fees and stores it, without emitting any events.\n * Splitting the fees and event emission occur during fee collection.\n * Should only be called in a non-reentrant context.\n *\n * @return totalSwapFeeAmountRaw Total swap fees raw (LP + aggregate protocol fees)\n * @return aggregateSwapFeeAmountRaw Sum of protocol and pool creator fees raw\n */\n function _computeAndChargeAggregateSwapFees(\n PoolData memory poolData,\n uint256 totalSwapFeeAmountScaled18,\n address pool,\n IERC20 token,\n uint256 index\n ) internal returns (uint256 totalSwapFeeAmountRaw, uint256 aggregateSwapFeeAmountRaw) {\n // If totalSwapFeeAmountScaled18 equals zero, no need to charge anything.\n if (totalSwapFeeAmountScaled18 > 0) {\n // The total swap fee does not go into the pool; amountIn does, and the raw fee at this point does not\n // modify it. Given that all of the fee may belong to the pool creator (i.e. outside pool balances),\n // we round down to protect the invariant.\n\n totalSwapFeeAmountRaw = totalSwapFeeAmountScaled18.toRawUndoRateRoundDown(\n poolData.decimalScalingFactors[index],\n poolData.tokenRates[index]\n );\n\n // Aggregate fees are not charged in Recovery Mode, but we still calculate and return the raw total swap\n // fee above for off-chain reporting purposes.\n if (poolData.poolConfigBits.isPoolInRecoveryMode() == false) {\n uint256 aggregateSwapFeePercentage = poolData.poolConfigBits.getAggregateSwapFeePercentage();\n\n // We have already calculated raw total fees rounding up.\n // Total fees = LP fees + aggregate fees, so by rounding aggregate fees down we round the fee split in\n // the LPs' favor, in turn increasing token balances and the pool invariant.\n aggregateSwapFeeAmountRaw = totalSwapFeeAmountRaw.mulDown(aggregateSwapFeePercentage);\n\n // Ensure we can never charge more than the total swap fee.\n if (aggregateSwapFeeAmountRaw > totalSwapFeeAmountRaw) {\n revert ProtocolFeesExceedTotalCollected();\n }\n\n // Both Swap and Yield fees are stored together in a PackedTokenBalance.\n // We have designated \"Raw\" the derived half for Swap fee storage.\n bytes32 currentPackedBalance = _aggregateFeeAmounts[pool][token];\n _aggregateFeeAmounts[pool][token] = currentPackedBalance.setBalanceRaw(\n currentPackedBalance.getBalanceRaw() + aggregateSwapFeeAmountRaw\n );\n }\n }\n }\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /// @inheritdoc IVaultMain\n function getPoolTokenCountAndIndexOfToken(\n address pool,\n IERC20 token\n ) external view withRegisteredPool(pool) returns (uint256, uint256) {\n IERC20[] memory poolTokens = _poolTokens[pool];\n\n uint256 index = _findTokenIndex(poolTokens, token);\n\n return (poolTokens.length, index);\n }\n\n /*******************************************************************************\n Balancer Pool Tokens\n *******************************************************************************/\n\n /// @inheritdoc IVaultMain\n function transfer(address owner, address to, uint256 amount) external returns (bool) {\n _transfer(msg.sender, owner, to, amount);\n return true;\n }\n\n /// @inheritdoc IVaultMain\n function transferFrom(address spender, address from, address to, uint256 amount) external returns (bool) {\n _spendAllowance(msg.sender, from, spender, amount);\n _transfer(msg.sender, from, to, amount);\n return true;\n }\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /// @inheritdoc IVaultMain\n function erc4626BufferWrapOrUnwrap(\n BufferWrapOrUnwrapParams memory params\n )\n external\n onlyWhenUnlocked\n whenVaultBuffersAreNotPaused\n withInitializedBuffer(params.wrappedToken)\n nonReentrant\n returns (uint256 amountCalculatedRaw, uint256 amountInRaw, uint256 amountOutRaw)\n {\n IERC20 underlyingToken = IERC20(params.wrappedToken.asset());\n _ensureCorrectBufferAsset(params.wrappedToken, address(underlyingToken));\n\n _ensureValidWrapAmount(params.wrappedToken, params.amountGivenRaw);\n\n if (params.direction == WrappingDirection.UNWRAP) {\n bytes32 bufferBalances;\n (amountInRaw, amountOutRaw, bufferBalances) = _unwrapWithBuffer(\n params.kind,\n underlyingToken,\n params.wrappedToken,\n params.amountGivenRaw\n );\n emit Unwrap(params.wrappedToken, amountInRaw, amountOutRaw, bufferBalances);\n } else {\n bytes32 bufferBalances;\n (amountInRaw, amountOutRaw, bufferBalances) = _wrapWithBuffer(\n params.kind,\n underlyingToken,\n params.wrappedToken,\n params.amountGivenRaw\n );\n emit Wrap(params.wrappedToken, amountInRaw, amountOutRaw, bufferBalances);\n }\n\n if (params.kind == SwapKind.EXACT_IN) {\n if (amountOutRaw < params.limitRaw) {\n revert SwapLimit(amountOutRaw, params.limitRaw);\n }\n amountCalculatedRaw = amountOutRaw;\n } else {\n if (amountInRaw > params.limitRaw) {\n revert SwapLimit(amountInRaw, params.limitRaw);\n }\n amountCalculatedRaw = amountInRaw;\n }\n\n _ensureValidWrapAmount(params.wrappedToken, amountCalculatedRaw);\n }\n\n // If amount is too small, rounding issues can be introduced that favor the user and can leak value\n // from the buffer.\n // _MINIMUM_WRAP_AMOUNT prevents it. Most tokens have protections against it already; this is just an extra layer\n // of security.\n function _ensureValidWrapAmount(IERC4626 wrappedToken, uint256 amount) private view {\n if (amount < _MINIMUM_WRAP_AMOUNT) {\n revert WrapAmountTooSmall(wrappedToken);\n }\n }\n\n /**\n * @dev If the buffer has enough liquidity, it uses the internal ERC4626 buffer to perform the wrap\n * operation without any external calls. If not, it wraps the assets needed to fulfill the trade + the imbalance\n * of assets in the buffer, so that the buffer is rebalanced at the end of the operation.\n *\n * Updates `_reservesOf` and token deltas in storage.\n */\n function _wrapWithBuffer(\n SwapKind kind,\n IERC20 underlyingToken,\n IERC4626 wrappedToken,\n uint256 amountGiven\n ) internal returns (uint256 amountInUnderlying, uint256 amountOutWrapped, bytes32 bufferBalances) {\n if (kind == SwapKind.EXACT_IN) {\n // EXACT_IN wrap, so AmountGiven is an underlying amount. `deposit` is the ERC4626 operation that receives\n // an underlying amount in and calculates the wrapped amount out with the correct rounding. 1 wei is\n // removed from amountGiven to compensate for any rate manipulation. Also, 1 wei is removed from the\n // preview result to compensate for any rounding imprecision, so that the buffer does not leak value.\n (amountInUnderlying, amountOutWrapped) = (amountGiven, wrappedToken.previewDeposit(amountGiven - 1) - 1);\n } else {\n // EXACT_OUT wrap, so AmountGiven is a wrapped amount. `mint` is the ERC4626 operation that receives a\n // wrapped amount out and calculates the underlying amount in with the correct rounding. 1 wei is\n // added to amountGiven to compensate for any rate manipulation. Also, 1 wei is added to the\n // preview result to compensate for any rounding imprecision, so that the buffer does not leak value.\n (amountInUnderlying, amountOutWrapped) = (wrappedToken.previewMint(amountGiven + 1) + 1, amountGiven);\n }\n\n bufferBalances = _bufferTokenBalances[wrappedToken];\n\n // If it's a query, the Vault may not have enough underlying tokens to wrap. Since in a query we do not expect\n // the sender to pay for underlying tokens to wrap upfront, return the calculated amount without checking for\n // the imbalance.\n if (_isQueryContext()) {\n return (amountInUnderlying, amountOutWrapped, bufferBalances);\n }\n\n if (bufferBalances.getBalanceDerived() >= amountOutWrapped) {\n // The buffer has enough liquidity to facilitate the wrap without making an external call.\n uint256 newDerivedBalance;\n unchecked {\n // We have verified above that this is safe to do unchecked.\n newDerivedBalance = bufferBalances.getBalanceDerived() - amountOutWrapped;\n }\n\n bufferBalances = PackedTokenBalance.toPackedBalance(\n bufferBalances.getBalanceRaw() + amountInUnderlying,\n newDerivedBalance\n );\n _bufferTokenBalances[wrappedToken] = bufferBalances;\n } else {\n // The buffer does not have enough liquidity to facilitate the wrap without making an external call.\n // We wrap the user's tokens via an external call and additionally rebalance the buffer if it has an\n // imbalance of underlying tokens.\n\n // Expected amount of underlying deposited into the wrapper protocol.\n uint256 vaultUnderlyingDeltaHint;\n // Expected amount of wrapped minted by the wrapper protocol.\n uint256 vaultWrappedDeltaHint;\n\n if (kind == SwapKind.EXACT_IN) {\n // EXACT_IN requires the exact amount of underlying tokens to be deposited, so we call deposit.\n // The amount of underlying tokens to deposit is the necessary amount to fulfill the trade\n // (amountInUnderlying), plus the amount needed to leave the buffer rebalanced 50/50 at the end\n // (bufferUnderlyingImbalance). `bufferUnderlyingImbalance` may be positive if the buffer has an excess\n // of underlying, or negative if the buffer has an excess of wrapped tokens. `vaultUnderlyingDeltaHint`\n // will always be a positive number, because if `abs(bufferUnderlyingImbalance) > amountInUnderlying`\n // and `bufferUnderlyingImbalance < 0`, it means the buffer has enough liquidity to fulfill the trade\n // (i.e. `bufferBalances.getBalanceDerived() >= amountOutWrapped`).\n int256 bufferUnderlyingImbalance = bufferBalances.getBufferUnderlyingImbalance(wrappedToken);\n vaultUnderlyingDeltaHint = (amountInUnderlying.toInt256() + bufferUnderlyingImbalance).toUint256();\n underlyingToken.forceApprove(address(wrappedToken), vaultUnderlyingDeltaHint);\n vaultWrappedDeltaHint = wrappedToken.deposit(vaultUnderlyingDeltaHint, address(this));\n } else {\n // EXACT_OUT requires the exact amount of wrapped tokens to be minted, so we call mint.\n // The amount of wrapped tokens to mint is the amount necessary to fulfill the trade\n // (amountOutWrapped), minus the excess amount of wrapped tokens in the buffer (bufferWrappedImbalance).\n // `bufferWrappedImbalance` may be positive if buffer has an excess of wrapped assets or negative if\n // the buffer has an excess of underlying assets. `vaultWrappedDeltaHint` will always be a positive\n // number, because if `abs(bufferWrappedImbalance) > amountOutWrapped` and `bufferWrappedImbalance > 0`,\n // it means the buffer has enough liquidity to fulfill the trade\n // (i.e. `bufferBalances.getBalanceDerived() >= amountOutWrapped`).\n int256 bufferWrappedImbalance = bufferBalances.getBufferWrappedImbalance(wrappedToken);\n vaultWrappedDeltaHint = (amountOutWrapped.toInt256() - bufferWrappedImbalance).toUint256();\n\n // For Wrap ExactOut, we also need to calculate `vaultUnderlyingDeltaHint` before the mint operation,\n // to approve the transfer of underlying tokens to the wrapper protocol.\n vaultUnderlyingDeltaHint = wrappedToken.previewMint(vaultWrappedDeltaHint);\n\n // The mint operation returns exactly `vaultWrappedDeltaHint` shares. To do so, it withdraws underlying\n // tokens from the Vault and returns the shares. So, the Vault needs to approve the transfer of\n // underlying tokens to the wrapper.\n underlyingToken.forceApprove(address(wrappedToken), vaultUnderlyingDeltaHint);\n\n vaultUnderlyingDeltaHint = wrappedToken.mint(vaultWrappedDeltaHint, address(this));\n }\n\n // Remove approval, in case deposit/mint consumed less tokens than we approved.\n // E.g., A malicious wrapper could not consume all of the underlying tokens and use the Vault approval to\n // drain the Vault.\n underlyingToken.forceApprove(address(wrappedToken), 0);\n\n // Check if the Vault's underlying balance decreased by `vaultUnderlyingDeltaHint` and the Vault's\n // wrapped balance increased by `vaultWrappedDeltaHint`. If not, it reverts.\n _settleWrap(underlyingToken, IERC20(wrappedToken), vaultUnderlyingDeltaHint, vaultWrappedDeltaHint);\n\n // In a wrap operation, the buffer underlying balance increases by `amountInUnderlying` (the amount that\n // the caller deposited into the buffer) and decreases by `vaultUnderlyingDeltaHint` (the amount of\n // underlying deposited by the buffer into the wrapper protocol). Conversely, the buffer wrapped balance\n // decreases by `amountOutWrapped` (the amount of wrapped tokens that the buffer returned to the caller)\n // and increases by `vaultWrappedDeltaHint` (the amount of wrapped tokens minted by the wrapper protocol).\n bufferBalances = PackedTokenBalance.toPackedBalance(\n bufferBalances.getBalanceRaw() + amountInUnderlying - vaultUnderlyingDeltaHint,\n bufferBalances.getBalanceDerived() + vaultWrappedDeltaHint - amountOutWrapped\n );\n _bufferTokenBalances[wrappedToken] = bufferBalances;\n }\n\n _takeDebt(underlyingToken, amountInUnderlying);\n _supplyCredit(wrappedToken, amountOutWrapped);\n }\n\n /**\n * @dev If the buffer has enough liquidity, it uses the internal ERC4626 buffer to perform the unwrap\n * operation without any external calls. If not, it unwraps the assets needed to fulfill the trade + the imbalance\n * of assets in the buffer, so that the buffer is rebalanced at the end of the operation.\n *\n * Updates `_reservesOf` and token deltas in storage.\n */\n function _unwrapWithBuffer(\n SwapKind kind,\n IERC20 underlyingToken,\n IERC4626 wrappedToken,\n uint256 amountGiven\n ) internal returns (uint256 amountInWrapped, uint256 amountOutUnderlying, bytes32 bufferBalances) {\n if (kind == SwapKind.EXACT_IN) {\n // EXACT_IN unwrap, so AmountGiven is a wrapped amount. `redeem` is the ERC4626 operation that receives a\n // wrapped amount in and calculates the underlying amount out with the correct rounding. 1 wei is removed\n // from amountGiven to compensate for any rate manipulation. Also, 1 wei is removed from the preview result\n // to compensate for any rounding imprecision, so that the buffer does not leak value.\n (amountInWrapped, amountOutUnderlying) = (amountGiven, wrappedToken.previewRedeem(amountGiven - 1) - 1);\n } else {\n // EXACT_OUT unwrap, so AmountGiven is an underlying amount. `withdraw` is the ERC4626 operation that\n // receives an underlying amount out and calculates the wrapped amount in with the correct rounding. 1 wei\n // is added to amountGiven to compensate for any rate manipulation. Also, 1 wei is added to the preview\n // result to compensate for any rounding imprecision, so that the buffer does not leak value.\n (amountInWrapped, amountOutUnderlying) = (wrappedToken.previewWithdraw(amountGiven + 1) + 1, amountGiven);\n }\n\n bufferBalances = _bufferTokenBalances[wrappedToken];\n\n // If it's a query, the Vault may not have enough wrapped tokens to unwrap. Since in a query we do not expect\n // the sender to pay for wrapped tokens to unwrap upfront, return the calculated amount without checking for\n // the imbalance.\n if (_isQueryContext()) {\n return (amountInWrapped, amountOutUnderlying, bufferBalances);\n }\n\n if (bufferBalances.getBalanceRaw() >= amountOutUnderlying) {\n // The buffer has enough liquidity to facilitate the wrap without making an external call.\n uint256 newRawBalance;\n unchecked {\n // We have verified above that this is safe to do unchecked.\n newRawBalance = bufferBalances.getBalanceRaw() - amountOutUnderlying;\n }\n bufferBalances = PackedTokenBalance.toPackedBalance(\n newRawBalance,\n bufferBalances.getBalanceDerived() + amountInWrapped\n );\n _bufferTokenBalances[wrappedToken] = bufferBalances;\n } else {\n // The buffer does not have enough liquidity to facilitate the unwrap without making an external call.\n // We unwrap the user's tokens via an external call and additionally rebalance the buffer if it has an\n // imbalance of wrapped tokens.\n\n // Expected amount of underlying withdrawn from the wrapper protocol.\n uint256 vaultUnderlyingDeltaHint;\n // Expected amount of wrapped burned by the wrapper protocol.\n uint256 vaultWrappedDeltaHint;\n\n if (kind == SwapKind.EXACT_IN) {\n // EXACT_IN requires the exact amount of wrapped tokens to be unwrapped, so we call redeem. The amount\n // of wrapped tokens to redeem is the amount necessary to fulfill the trade (amountInWrapped), plus the\n // amount needed to leave the buffer rebalanced 50/50 at the end (bufferWrappedImbalance).\n // `bufferWrappedImbalance` may be positive if the buffer has an excess of wrapped, or negative if the\n // buffer has an excess of underlying tokens. `vaultWrappedDeltaHint` will always be a positive number,\n // because if `abs(bufferWrappedImbalance) > amountInWrapped` and `bufferWrappedImbalance < 0`, it\n // means the buffer has enough liquidity to fulfill the trade\n // (i.e. `bufferBalances.getBalanceRaw() >= amountOutUnderlying`).\n int256 bufferWrappedImbalance = bufferBalances.getBufferWrappedImbalance(wrappedToken);\n vaultWrappedDeltaHint = (amountInWrapped.toInt256() + bufferWrappedImbalance).toUint256();\n vaultUnderlyingDeltaHint = wrappedToken.redeem(vaultWrappedDeltaHint, address(this), address(this));\n } else {\n // EXACT_OUT requires the exact amount of underlying tokens to be returned, so we call withdraw.\n // The amount of underlying tokens to withdraw is the amount necessary to fulfill the trade\n // (amountOutUnderlying), minus the excess amount of underlying assets in the buffer\n // (bufferUnderlyingImbalance). `bufferUnderlyingImbalance` may be positive if the buffer has an excess\n // of underlying, or negative if the buffer has an excess of wrapped tokens. `vaultUnderlyingDeltaHint`\n // will always be a positive number, because if `abs(bufferUnderlyingImbalance) > amountOutUnderlying`\n // and `bufferUnderlyingImbalance > 0`, it means the buffer has enough liquidity to fulfill the trade\n // (i.e. `bufferBalances.getBalanceRaw() >= amountOutUnderlying`).\n int256 bufferUnderlyingImbalance = bufferBalances.getBufferUnderlyingImbalance(wrappedToken);\n vaultUnderlyingDeltaHint = (amountOutUnderlying.toInt256() - bufferUnderlyingImbalance).toUint256();\n vaultWrappedDeltaHint = wrappedToken.withdraw(vaultUnderlyingDeltaHint, address(this), address(this));\n }\n\n // Check if the Vault's underlying balance increased by `vaultUnderlyingDeltaHint` and the Vault's\n // wrapped balance decreased by `vaultWrappedDeltaHint`. If not, it reverts.\n _settleUnwrap(underlyingToken, IERC20(wrappedToken), vaultUnderlyingDeltaHint, vaultWrappedDeltaHint);\n\n // In an unwrap operation, the buffer underlying balance increases by `vaultUnderlyingDeltaHint` (the\n // amount of underlying withdrawn by the buffer from the wrapper protocol) and decreases by\n // `amountOutUnderlying` (the amount of underlying assets that the caller withdrawn from the buffer).\n // Conversely, the buffer wrapped balance increases by `amountInWrapped` (the amount of wrapped tokens that\n // the caller sent to the buffer) and decreases by `vaultWrappedDeltaHint` (the amount of wrapped tokens\n // burned by the wrapper protocol).\n bufferBalances = PackedTokenBalance.toPackedBalance(\n bufferBalances.getBalanceRaw() + vaultUnderlyingDeltaHint - amountOutUnderlying,\n bufferBalances.getBalanceDerived() + amountInWrapped - vaultWrappedDeltaHint\n );\n _bufferTokenBalances[wrappedToken] = bufferBalances;\n }\n\n _takeDebt(wrappedToken, amountInWrapped);\n _supplyCredit(underlyingToken, amountOutUnderlying);\n }\n\n /**\n * @notice Updates the reserves of the Vault after an ERC4626 wrap (deposit/mint) operation.\n * @dev If there are extra tokens in the Vault balances, these will be added to the reserves (which, in practice,\n * is equal to discarding such tokens). This approach avoids DoS attacks, when a frontrunner leaves vault balances\n * and reserves out of sync before a transaction starts.\n *\n * @param underlyingToken Underlying token of the ERC4626 wrapped token\n * @param wrappedToken ERC4626 wrapped token\n * @param underlyingDeltaHint Amount of underlying tokens the wrapper should have removed from the Vault\n * @param wrappedDeltaHint Amount of wrapped tokens the wrapper should have added to the Vault\n */\n function _settleWrap(\n IERC20 underlyingToken,\n IERC20 wrappedToken,\n uint256 underlyingDeltaHint,\n uint256 wrappedDeltaHint\n ) internal {\n // A wrap operation removes underlying tokens from the Vault, so the Vault's expected underlying balance after\n // the operation is `underlyingReservesBefore - underlyingDeltaHint`.\n uint256 expectedUnderlyingReservesAfter = _reservesOf[underlyingToken] - underlyingDeltaHint;\n\n // A wrap operation adds wrapped tokens to the Vault, so the Vault's expected wrapped balance after the\n // operation is `wrappedReservesBefore + wrappedDeltaHint`.\n uint256 expectedWrappedReservesAfter = _reservesOf[wrappedToken] + wrappedDeltaHint;\n\n _settleWrapUnwrap(underlyingToken, wrappedToken, expectedUnderlyingReservesAfter, expectedWrappedReservesAfter);\n }\n\n /**\n * @notice Updates the reserves of the Vault after an ERC4626 unwrap (withdraw/redeem) operation.\n * @dev If there are extra tokens in the Vault balances, these will be added to the reserves (which, in practice,\n * is equal to discarding such tokens). This approach avoids DoS attacks, when a frontrunner leaves vault balances\n * and state of reserves out of sync before a transaction starts.\n *\n * @param underlyingToken Underlying of ERC4626 wrapped token\n * @param wrappedToken ERC4626 wrapped token\n * @param underlyingDeltaHint Amount of underlying tokens supposedly added to the Vault\n * @param wrappedDeltaHint Amount of wrapped tokens supposedly removed from the Vault\n */\n function _settleUnwrap(\n IERC20 underlyingToken,\n IERC20 wrappedToken,\n uint256 underlyingDeltaHint,\n uint256 wrappedDeltaHint\n ) internal {\n // An unwrap operation adds underlying tokens to the Vault, so the Vault's expected underlying balance after\n // the operation is `underlyingReservesBefore + underlyingDeltaHint`.\n uint256 expectedUnderlyingReservesAfter = _reservesOf[underlyingToken] + underlyingDeltaHint;\n\n // An unwrap operation removes wrapped tokens from the Vault, so the Vault's expected wrapped balance after the\n // operation is `wrappedReservesBefore - wrappedDeltaHint`.\n uint256 expectedWrappedReservesAfter = _reservesOf[wrappedToken] - wrappedDeltaHint;\n\n _settleWrapUnwrap(underlyingToken, wrappedToken, expectedUnderlyingReservesAfter, expectedWrappedReservesAfter);\n }\n\n /**\n * @notice Updates the reserves of the Vault after an ERC4626 wrap/unwrap operation.\n * @dev If reserves of underlying or wrapped tokens are bigger than expected, the extra tokens will be discarded,\n * which avoids a possible DoS. However, if reserves are smaller than expected, it means that the wrapper didn't\n * respect the amount given and/or the amount calculated (informed by the wrapper operation and stored as a hint\n * variable), so the token is not ERC4626 compliant and the function should be reverted.\n *\n * @param underlyingToken Underlying of ERC4626 wrapped token\n * @param wrappedToken ERC4626 wrapped token\n * @param expectedUnderlyingReservesAfter Vault's expected reserves of underlying after the wrap/unwrap operation\n * @param expectedWrappedReservesAfter Vault's expected reserves of wrapped after the wrap/unwrap operation\n */\n function _settleWrapUnwrap(\n IERC20 underlyingToken,\n IERC20 wrappedToken,\n uint256 expectedUnderlyingReservesAfter,\n uint256 expectedWrappedReservesAfter\n ) internal {\n // Update the Vault's underlying reserves.\n uint256 underlyingBalancesAfter = underlyingToken.balanceOf(address(this));\n if (underlyingBalancesAfter < expectedUnderlyingReservesAfter) {\n // If Vault's underlying balance is smaller than expected, the Vault was drained and the operation should\n // revert. It may happen in different ways, depending on the wrap/unwrap operation:\n // * deposit: the wrapper didn't respect the exact amount in of underlying;\n // * mint: the underlying amount subtracted from the Vault is bigger than wrapper's calculated amount in;\n // * withdraw: the wrapper didn't respect the exact amount out of underlying;\n // * redeem: the underlying amount added to the Vault is smaller than wrapper's calculated amount out.\n revert NotEnoughUnderlying(\n IERC4626(address(wrappedToken)),\n expectedUnderlyingReservesAfter,\n underlyingBalancesAfter\n );\n }\n // Update the Vault's underlying reserves, discarding any unexpected imbalance of tokens (difference between\n // actual and expected vault balance).\n _reservesOf[underlyingToken] = underlyingBalancesAfter;\n\n // Update the Vault's wrapped reserves.\n uint256 wrappedBalancesAfter = wrappedToken.balanceOf(address(this));\n if (wrappedBalancesAfter < expectedWrappedReservesAfter) {\n // If the Vault's wrapped balance is smaller than expected, the Vault was drained and the operation should\n // revert. It may happen in different ways, depending on the wrap/unwrap operation:\n // * deposit: the wrapped amount added to the Vault is smaller than wrapper's calculated amount out;\n // * mint: the wrapper didn't respect the exact amount out of wrapped;\n // * withdraw: the wrapped amount subtracted from the Vault is bigger than wrapper's calculated amount in;\n // * redeem: the wrapper didn't respect the exact amount in of wrapped.\n revert NotEnoughWrapped(\n IERC4626(address(wrappedToken)),\n expectedWrappedReservesAfter,\n wrappedBalancesAfter\n );\n }\n // Update the Vault's wrapped reserves, discarding any unexpected surplus of tokens (difference between\n // the Vault's actual and expected balances).\n _reservesOf[wrappedToken] = wrappedBalancesAfter;\n }\n\n // Minimum token value in or out (applied to scaled18 values), enforced as a security measure to block potential\n // exploitation of rounding errors. This is called in the context of adding or removing liquidity, so zero is\n // allowed to support single-token operations.\n function _ensureValidTradeAmount(uint256 tradeAmount) internal view {\n if (tradeAmount != 0) {\n _ensureValidSwapAmount(tradeAmount);\n }\n }\n\n // Minimum token value in or out (applied to scaled18 values), enforced as a security measure to block potential\n // exploitation of rounding errors. This is called in the swap context, so zero is not a valid amount. Note that\n // since this is applied to the scaled amount, the corresponding minimum raw amount will vary according to token\n // decimals. The math functions are called with scaled amounts, and the magnitude of the minimum values is based\n // on the maximum error, so this is fine. Trying to adjust for decimals would add complexity and significant gas\n // to the critical path, so we don't do it. (Note that very low-decimal tokens don't work well in AMMs generally;\n // this is another reason to avoid them.)\n function _ensureValidSwapAmount(uint256 tradeAmount) internal view {\n if (tradeAmount < _MINIMUM_TRADE_AMOUNT) {\n revert TradeAmountTooSmall();\n }\n }\n\n /*******************************************************************************\n Miscellaneous\n *******************************************************************************/\n\n /// @inheritdoc IVaultMain\n function getVaultExtension() external view returns (address) {\n return _implementation();\n }\n\n /**\n * @inheritdoc Proxy\n * @dev Returns the VaultExtension contract, to which fallback requests are forwarded.\n */\n function _implementation() internal view override returns (address) {\n return address(_vaultExtension);\n }\n\n /*******************************************************************************\n Default handlers\n *******************************************************************************/\n\n receive() external payable {\n revert CannotReceiveEth();\n }\n\n // solhint-disable no-complex-fallback\n\n /**\n * @inheritdoc Proxy\n * @dev Override proxy implementation of `fallback` to disallow incoming ETH transfers.\n * This function actually returns whatever the VaultExtension does when handling the request.\n */\n fallback() external payable override {\n if (msg.value > 0) {\n revert CannotReceiveEth();\n }\n\n _fallback();\n }\n}\n"},"@balancer-labs/v3-vault/contracts/VaultAdmin.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\nimport { IVaultAdmin } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\";\nimport { Rounding } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { PackedTokenBalance } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\";\nimport { EVMCallModeHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol\";\nimport { Authentication } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\";\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\n\nimport { VaultStateBits, VaultStateLib } from \"./lib/VaultStateLib.sol\";\nimport { PoolConfigLib, PoolConfigBits } from \"./lib/PoolConfigLib.sol\";\nimport { VaultExtensionsLib } from \"./lib/VaultExtensionsLib.sol\";\nimport { VaultCommon } from \"./VaultCommon.sol\";\nimport { VaultGuard } from \"./VaultGuard.sol\";\n\n/**\n * @dev Bytecode extension for the Vault containing permissioned functions. Complementary to `VaultExtension`,\n * it has access to the same storage layout as the main vault.\n *\n * The functions in this contract are not meant to be called directly. They must only be called by the Vault\n * via delegate calls, so that any state modifications produced by this contract's code will actually target\n * the main Vault's state.\n *\n * The storage of this contract is in practice unused.\n */\ncontract VaultAdmin is IVaultAdmin, VaultCommon, Authentication, VaultGuard {\n using PackedTokenBalance for bytes32;\n using PoolConfigLib for PoolConfigBits;\n using VaultStateLib for VaultStateBits;\n using VaultExtensionsLib for IVault;\n using FixedPoint for uint256;\n using SafeERC20 for IERC20;\n using SafeCast for *;\n\n // Minimum BPT amount minted upon initialization.\n uint256 internal constant _BUFFER_MINIMUM_TOTAL_SUPPLY = 1e4;\n\n /// @dev Functions with this modifier can only be delegate-called by the Vault.\n modifier onlyVaultDelegateCall() {\n _vault.ensureVaultDelegateCall();\n _;\n }\n\n /// @dev Functions with this modifier can only be called by the pool creator.\n modifier onlyProtocolFeeController() {\n if (msg.sender != address(_protocolFeeController)) {\n revert SenderNotAllowed();\n }\n _;\n }\n\n /// @dev Validate aggregate percentage values.\n modifier withValidPercentage(uint256 aggregatePercentage) {\n if (aggregatePercentage > FixedPoint.ONE) {\n revert ProtocolFeesExceedTotalCollected();\n }\n _;\n }\n\n constructor(\n IVault mainVault,\n uint32 pauseWindowDuration,\n uint32 bufferPeriodDuration,\n uint256 minTradeAmount,\n uint256 minWrapAmount\n ) Authentication(bytes32(uint256(uint160(address(mainVault))))) VaultGuard(mainVault) {\n if (pauseWindowDuration > _MAX_PAUSE_WINDOW_DURATION) {\n revert VaultPauseWindowDurationTooLarge();\n }\n if (bufferPeriodDuration > _MAX_BUFFER_PERIOD_DURATION) {\n revert PauseBufferPeriodDurationTooLarge();\n }\n\n // solhint-disable-next-line not-rely-on-time\n uint32 pauseWindowEndTime = (block.timestamp + pauseWindowDuration).toUint32();\n\n _vaultPauseWindowEndTime = pauseWindowEndTime;\n _vaultBufferPeriodDuration = bufferPeriodDuration;\n _vaultBufferPeriodEndTime = pauseWindowEndTime + bufferPeriodDuration;\n\n _MINIMUM_TRADE_AMOUNT = minTradeAmount;\n _MINIMUM_WRAP_AMOUNT = minWrapAmount;\n }\n\n /*******************************************************************************\n Constants and immutables\n *******************************************************************************/\n\n /// @inheritdoc IVaultAdmin\n function vault() external view returns (IVault) {\n return _vault;\n }\n\n /// @inheritdoc IVaultAdmin\n function getPauseWindowEndTime() external view returns (uint32) {\n return _vaultPauseWindowEndTime;\n }\n\n /// @inheritdoc IVaultAdmin\n function getBufferPeriodDuration() external view returns (uint32) {\n return _vaultBufferPeriodDuration;\n }\n\n /// @inheritdoc IVaultAdmin\n function getBufferPeriodEndTime() external view returns (uint32) {\n return _vaultBufferPeriodEndTime;\n }\n\n /// @inheritdoc IVaultAdmin\n function getMinimumPoolTokens() external pure returns (uint256) {\n return _MIN_TOKENS;\n }\n\n /// @inheritdoc IVaultAdmin\n function getMaximumPoolTokens() external pure returns (uint256) {\n return _MAX_TOKENS;\n }\n\n /// @inheritdoc IVaultAdmin\n function getPoolMinimumTotalSupply() external pure returns (uint256) {\n return _POOL_MINIMUM_TOTAL_SUPPLY;\n }\n\n /// @inheritdoc IVaultAdmin\n function getBufferMinimumTotalSupply() external pure returns (uint256) {\n return _BUFFER_MINIMUM_TOTAL_SUPPLY;\n }\n\n /// @inheritdoc IVaultAdmin\n function getMinimumTradeAmount() external view returns (uint256) {\n return _MINIMUM_TRADE_AMOUNT;\n }\n\n /// @inheritdoc IVaultAdmin\n function getMinimumWrapAmount() external view returns (uint256) {\n return _MINIMUM_WRAP_AMOUNT;\n }\n\n /*******************************************************************************\n Vault Pausing\n *******************************************************************************/\n\n /// @inheritdoc IVaultAdmin\n function isVaultPaused() external view onlyVaultDelegateCall returns (bool) {\n return _isVaultPaused();\n }\n\n /// @inheritdoc IVaultAdmin\n function getVaultPausedState() external view onlyVaultDelegateCall returns (bool, uint32, uint32) {\n return (_isVaultPaused(), _vaultPauseWindowEndTime, _vaultBufferPeriodEndTime);\n }\n\n /// @inheritdoc IVaultAdmin\n function pauseVault() external onlyVaultDelegateCall authenticate {\n _setVaultPaused(true);\n }\n\n /// @inheritdoc IVaultAdmin\n function unpauseVault() external onlyVaultDelegateCall authenticate {\n _setVaultPaused(false);\n }\n\n /**\n * @dev The contract can only be paused until the end of the Pause Window, and\n * unpaused until the end of the Buffer Period.\n */\n function _setVaultPaused(bool pausing) internal {\n if (_isVaultPaused()) {\n if (pausing) {\n // Already paused, and we're trying to pause it again.\n revert VaultPaused();\n }\n\n // The Vault can always be unpaused while it's paused.\n // When the buffer period expires, `_isVaultPaused` will return false, so we would be in the outside\n // else clause, where trying to unpause will revert unconditionally.\n } else {\n if (pausing) {\n // Not already paused; we can pause within the window.\n // solhint-disable-next-line not-rely-on-time\n if (block.timestamp >= _vaultPauseWindowEndTime) {\n revert VaultPauseWindowExpired();\n }\n } else {\n // Not paused, and we're trying to unpause it.\n revert VaultNotPaused();\n }\n }\n\n VaultStateBits vaultState = _vaultStateBits;\n vaultState = vaultState.setVaultPaused(pausing);\n _vaultStateBits = vaultState;\n\n emit VaultPausedStateChanged(pausing);\n }\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /// @inheritdoc IVaultAdmin\n function pausePool(address pool) external onlyVaultDelegateCall withRegisteredPool(pool) {\n _setPoolPaused(pool, true);\n }\n\n /// @inheritdoc IVaultAdmin\n function unpausePool(address pool) external onlyVaultDelegateCall withRegisteredPool(pool) {\n _setPoolPaused(pool, false);\n }\n\n function _setPoolPaused(address pool, bool pausing) internal {\n _ensureAuthenticatedByRole(pool, _poolRoleAccounts[pool].pauseManager);\n\n PoolConfigBits config = _poolConfigBits[pool];\n\n if (_isPoolPaused(pool)) {\n if (pausing) {\n // Already paused, and we're trying to pause it again.\n revert PoolPaused(pool);\n }\n\n // The pool can always be unpaused while it's paused.\n // When the buffer period expires, `_isPoolPaused` will return false, so we would be in the outside\n // else clause, where trying to unpause will revert unconditionally.\n } else {\n if (pausing) {\n // Not already paused; we can pause within the window.\n // solhint-disable-next-line not-rely-on-time\n if (block.timestamp >= config.getPauseWindowEndTime()) {\n revert PoolPauseWindowExpired(pool);\n }\n } else {\n // Not paused, and we're trying to unpause it.\n revert PoolNotPaused(pool);\n }\n }\n\n // Update poolConfigBits.\n _poolConfigBits[pool] = config.setPoolPaused(pausing);\n\n emit PoolPausedStateChanged(pool, pausing);\n }\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n /// @inheritdoc IVaultAdmin\n function setStaticSwapFeePercentage(\n address pool,\n uint256 swapFeePercentage\n ) external onlyVaultDelegateCall withRegisteredPool(pool) {\n _ensureAuthenticatedByExclusiveRole(pool, _poolRoleAccounts[pool].swapFeeManager);\n _ensureUnpaused(pool);\n\n _setStaticSwapFeePercentage(pool, swapFeePercentage);\n }\n\n /// @inheritdoc IVaultAdmin\n function collectAggregateFees(\n address pool\n )\n public\n onlyVaultDelegateCall\n onlyWhenUnlocked\n onlyProtocolFeeController\n withRegisteredPool(pool)\n returns (uint256[] memory totalSwapFees, uint256[] memory totalYieldFees)\n {\n IERC20[] memory poolTokens = _vault.getPoolTokens(pool);\n uint256 numTokens = poolTokens.length;\n\n totalSwapFees = new uint256[](numTokens);\n totalYieldFees = new uint256[](numTokens);\n\n for (uint256 i = 0; i < poolTokens.length; ++i) {\n IERC20 token = poolTokens[i];\n\n (totalSwapFees[i], totalYieldFees[i]) = _aggregateFeeAmounts[pool][token].fromPackedBalance();\n\n if (totalSwapFees[i] > 0 || totalYieldFees[i] > 0) {\n // Supply credit for the total amount of fees.\n _aggregateFeeAmounts[pool][token] = 0;\n _supplyCredit(token, totalSwapFees[i] + totalYieldFees[i]);\n }\n }\n }\n\n /// @inheritdoc IVaultAdmin\n function updateAggregateSwapFeePercentage(\n address pool,\n uint256 newAggregateSwapFeePercentage\n )\n external\n onlyVaultDelegateCall\n withRegisteredPool(pool)\n withValidPercentage(newAggregateSwapFeePercentage)\n onlyProtocolFeeController\n {\n _poolConfigBits[pool] = _poolConfigBits[pool].setAggregateSwapFeePercentage(newAggregateSwapFeePercentage);\n\n emit AggregateSwapFeePercentageChanged(pool, newAggregateSwapFeePercentage);\n }\n\n /// @inheritdoc IVaultAdmin\n function updateAggregateYieldFeePercentage(\n address pool,\n uint256 newAggregateYieldFeePercentage\n )\n external\n onlyVaultDelegateCall\n withRegisteredPool(pool)\n withValidPercentage(newAggregateYieldFeePercentage)\n onlyProtocolFeeController\n {\n _poolConfigBits[pool] = _poolConfigBits[pool].setAggregateYieldFeePercentage(newAggregateYieldFeePercentage);\n\n emit AggregateYieldFeePercentageChanged(pool, newAggregateYieldFeePercentage);\n }\n\n /// @inheritdoc IVaultAdmin\n function setProtocolFeeController(\n IProtocolFeeController newProtocolFeeController\n ) external onlyVaultDelegateCall authenticate nonReentrant {\n _protocolFeeController = newProtocolFeeController;\n\n emit ProtocolFeeControllerChanged(newProtocolFeeController);\n }\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /// @inheritdoc IVaultAdmin\n function enableRecoveryMode(address pool) external onlyVaultDelegateCall withRegisteredPool(pool) {\n _ensurePoolNotInRecoveryMode(pool);\n\n // If the Vault or pool is pausable (and currently paused), this call is permissionless.\n if (_isPoolPaused(pool) == false && _isVaultPaused() == false) {\n // If not permissionless, authenticate with governance.\n _authenticateCaller();\n }\n\n _setPoolRecoveryMode(pool, true);\n }\n\n /// @inheritdoc IVaultAdmin\n function disableRecoveryMode(address pool) external onlyVaultDelegateCall withRegisteredPool(pool) authenticate {\n _ensurePoolInRecoveryMode(pool);\n _setPoolRecoveryMode(pool, false);\n }\n\n /**\n * @dev Reverts if the pool is in recovery mode.\n * @param pool The pool\n */\n function _ensurePoolNotInRecoveryMode(address pool) internal view {\n if (_isPoolInRecoveryMode(pool)) {\n revert PoolInRecoveryMode(pool);\n }\n }\n\n /**\n * @dev Change the recovery mode state of a pool, and emit an event. Assumes any validation (e.g., whether\n * the proposed state change is consistent) has already been done.\n *\n * @param pool The pool\n * @param recoveryMode The desired recovery mode state\n */\n function _setPoolRecoveryMode(address pool, bool recoveryMode) internal {\n if (recoveryMode == false) {\n _syncPoolBalancesAfterRecoveryMode(pool);\n }\n\n // Update poolConfigBits. `_writePoolBalancesToStorage` updates *only* balances, not yield fees, which are\n // forfeited during Recovery Mode. To prevent yield fees from being charged, `_loadPoolData` must be called\n // while still in Recovery Mode, so updating the Recovery Mode bit must be done last, after the accounting.\n _poolConfigBits[pool] = _poolConfigBits[pool].setPoolInRecoveryMode(recoveryMode);\n\n emit PoolRecoveryModeStateChanged(pool, recoveryMode);\n }\n\n /**\n * @dev Raw and live balances will diverge as tokens are withdrawn during Recovery Mode. Live balances cannot\n * be updated in Recovery Mode, as this would require making external calls to update rates, which could fail.\n * When Recovery Mode is disabled, re-sync the balances.\n */\n function _syncPoolBalancesAfterRecoveryMode(address pool) private nonReentrant {\n _writePoolBalancesToStorage(pool, _loadPoolData(pool, Rounding.ROUND_DOWN));\n }\n\n /*******************************************************************************\n Query Functionality\n *******************************************************************************/\n\n /// @inheritdoc IVaultAdmin\n function disableQuery() external onlyVaultDelegateCall authenticate {\n _disableQuery();\n }\n\n /// @inheritdoc IVaultAdmin\n function disableQueryPermanently() external onlyVaultDelegateCall authenticate {\n _queriesDisabledPermanently = true;\n _disableQuery();\n }\n\n function _disableQuery() internal {\n VaultStateBits vaultState = _vaultStateBits;\n vaultState = vaultState.setQueryDisabled(true);\n _vaultStateBits = vaultState;\n\n emit VaultQueriesDisabled();\n }\n\n /// @inheritdoc IVaultAdmin\n function enableQuery() external onlyVaultDelegateCall authenticate {\n if (_queriesDisabledPermanently) {\n revert QueriesDisabledPermanently();\n }\n\n VaultStateBits vaultState = _vaultStateBits;\n vaultState = vaultState.setQueryDisabled(false);\n _vaultStateBits = vaultState;\n\n emit VaultQueriesEnabled();\n }\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /// @inheritdoc IVaultAdmin\n function areBuffersPaused() external view onlyVaultDelegateCall returns (bool) {\n return _vaultStateBits.areBuffersPaused();\n }\n\n /// @inheritdoc IVaultAdmin\n function pauseVaultBuffers() external onlyVaultDelegateCall authenticate {\n _setVaultBufferPauseState(true);\n }\n\n /// @inheritdoc IVaultAdmin\n function unpauseVaultBuffers() external onlyVaultDelegateCall authenticate {\n _setVaultBufferPauseState(false);\n }\n\n function _setVaultBufferPauseState(bool paused) private {\n VaultStateBits vaultState = _vaultStateBits;\n vaultState = vaultState.setBuffersPaused(paused);\n _vaultStateBits = vaultState;\n\n emit VaultBuffersPausedStateChanged(paused);\n }\n\n /// @inheritdoc IVaultAdmin\n function initializeBuffer(\n IERC4626 wrappedToken,\n uint256 amountUnderlyingRaw,\n uint256 amountWrappedRaw,\n uint256 minIssuedShares,\n address sharesOwner\n )\n public\n onlyVaultDelegateCall\n onlyWhenUnlocked\n whenVaultBuffersAreNotPaused\n nonReentrant\n returns (uint256 issuedShares)\n {\n if (_bufferAssets[wrappedToken] != address(0)) {\n revert BufferAlreadyInitialized(wrappedToken);\n }\n\n address underlyingToken = wrappedToken.asset();\n\n if (underlyingToken == address(0)) {\n // Should never happen, but a malicious wrapper could return the zero address and cause the buffer\n // initialization code to run more than once.\n revert InvalidUnderlyingToken(wrappedToken);\n }\n\n // Register asset of wrapper, so it cannot change.\n _bufferAssets[wrappedToken] = underlyingToken;\n\n // Take debt for initialization assets.\n _takeDebt(IERC20(underlyingToken), amountUnderlyingRaw);\n _takeDebt(wrappedToken, amountWrappedRaw);\n\n // Update buffer balances.\n bytes32 bufferBalances = PackedTokenBalance.toPackedBalance(amountUnderlyingRaw, amountWrappedRaw);\n _bufferTokenBalances[wrappedToken] = bufferBalances;\n\n // At initialization, the initial \"BPT rate\" is 1, so the `issuedShares` is simply the sum of the initial\n // buffer token balances, converted to underlying. We use `previewRedeem` to convert wrapped to underlying,\n // since `redeem` is an EXACT_IN operation that rounds down the result.\n issuedShares = wrappedToken.previewRedeem(amountWrappedRaw) + amountUnderlyingRaw;\n _ensureBufferMinimumTotalSupply(issuedShares);\n\n // Divide `issuedShares` between the zero address, which receives the minimum supply, and the account\n // depositing the tokens to initialize the buffer, which receives the balance.\n issuedShares -= _BUFFER_MINIMUM_TOTAL_SUPPLY;\n\n _mintMinimumBufferSupplyReserve(wrappedToken);\n _mintBufferShares(wrappedToken, sharesOwner, issuedShares);\n\n if (issuedShares < minIssuedShares) {\n revert IssuedSharesBelowMin(issuedShares, minIssuedShares);\n }\n\n emit LiquidityAddedToBuffer(wrappedToken, amountUnderlyingRaw, amountWrappedRaw, bufferBalances);\n }\n\n /// @inheritdoc IVaultAdmin\n function addLiquidityToBuffer(\n IERC4626 wrappedToken,\n uint256 maxAmountUnderlyingInRaw,\n uint256 maxAmountWrappedInRaw,\n uint256 exactSharesToIssue,\n address sharesOwner\n )\n public\n onlyVaultDelegateCall\n onlyWhenUnlocked\n whenVaultBuffersAreNotPaused\n withInitializedBuffer(wrappedToken)\n nonReentrant\n returns (uint256 amountUnderlyingRaw, uint256 amountWrappedRaw)\n {\n // Check wrapped token asset correctness.\n address underlyingToken = wrappedToken.asset();\n _ensureCorrectBufferAsset(wrappedToken, underlyingToken);\n\n bytes32 bufferBalances = _bufferTokenBalances[wrappedToken];\n\n // To proportionally add liquidity to buffer, we need to calculate the buffer invariant ratio. It's calculated\n // as the amount of buffer shares the sender wants to issue (which in practice is the value that the sender\n // will add to the buffer, expressed in underlying token amounts), divided by the total shares of\n // the buffer.\n // Multiply the current buffer balance by the invariant ratio to calculate the amount of underlying and wrapped\n // tokens to add, keeping the proportion of the buffer.\n uint256 totalShares = _bufferTotalShares[wrappedToken];\n amountUnderlyingRaw = bufferBalances.getBalanceRaw().mulDivUp(exactSharesToIssue, totalShares);\n amountWrappedRaw = bufferBalances.getBalanceDerived().mulDivUp(exactSharesToIssue, totalShares);\n\n if (amountUnderlyingRaw > maxAmountUnderlyingInRaw) {\n revert AmountInAboveMax(IERC20(underlyingToken), amountUnderlyingRaw, maxAmountUnderlyingInRaw);\n }\n\n if (amountWrappedRaw > maxAmountWrappedInRaw) {\n revert AmountInAboveMax(IERC20(wrappedToken), amountWrappedRaw, maxAmountWrappedInRaw);\n }\n\n // Take debt for assets going into the buffer (wrapped and underlying).\n _takeDebt(IERC20(underlyingToken), amountUnderlyingRaw);\n _takeDebt(wrappedToken, amountWrappedRaw);\n\n // Add the amountsIn to the current buffer balances.\n bufferBalances = PackedTokenBalance.toPackedBalance(\n bufferBalances.getBalanceRaw() + amountUnderlyingRaw,\n bufferBalances.getBalanceDerived() + amountWrappedRaw\n );\n _bufferTokenBalances[wrappedToken] = bufferBalances;\n\n // Mint new shares to the owner.\n _mintBufferShares(wrappedToken, sharesOwner, exactSharesToIssue);\n\n emit LiquidityAddedToBuffer(wrappedToken, amountUnderlyingRaw, amountWrappedRaw, bufferBalances);\n }\n\n function _mintMinimumBufferSupplyReserve(IERC4626 wrappedToken) internal {\n _bufferTotalShares[wrappedToken] = _BUFFER_MINIMUM_TOTAL_SUPPLY;\n _bufferLpShares[wrappedToken][address(0)] = _BUFFER_MINIMUM_TOTAL_SUPPLY;\n\n emit BufferSharesMinted(wrappedToken, address(0), _BUFFER_MINIMUM_TOTAL_SUPPLY);\n }\n\n function _mintBufferShares(IERC4626 wrappedToken, address to, uint256 amount) internal {\n if (to == address(0)) {\n revert BufferSharesInvalidReceiver();\n }\n\n uint256 newTotalSupply = _bufferTotalShares[wrappedToken] + amount;\n\n // This is called on buffer initialization - after the minimum reserve amount has been minted - and during\n // subsequent adds, when we're increasing it, so we do not really need to check it against the minimum.\n // We do it anyway out of an abundance of caution, and to preserve symmetry with `_burnBufferShares`.\n _ensureBufferMinimumTotalSupply(newTotalSupply);\n\n _bufferTotalShares[wrappedToken] = newTotalSupply;\n _bufferLpShares[wrappedToken][to] += amount;\n\n emit BufferSharesMinted(wrappedToken, to, amount);\n }\n\n /// @inheritdoc IVaultAdmin\n function removeLiquidityFromBuffer(\n IERC4626 wrappedToken,\n uint256 sharesToRemove,\n uint256 minAmountUnderlyingOutRaw,\n uint256 minAmountWrappedOutRaw\n ) external onlyVaultDelegateCall returns (uint256 removedUnderlyingBalanceRaw, uint256 removedWrappedBalanceRaw) {\n return\n abi.decode(\n _vault.unlock(\n abi.encodeCall(\n VaultAdmin.removeLiquidityFromBufferHook,\n (wrappedToken, sharesToRemove, minAmountUnderlyingOutRaw, minAmountWrappedOutRaw, msg.sender)\n )\n ),\n (uint256, uint256)\n );\n }\n\n /**\n * @dev Internal hook for `removeLiquidityFromBuffer`. Can only be called by the Vault itself via\n * `removeLiquidityFromBuffer`, which correctly forwards the real sender as the `sharesOwner`.\n * This function must be reentrant because it calls the nonReentrant function `sendTo`. However,\n * since `sendTo` is the only function that makes external calls, `removeLiquidityFromBufferHook`\n * cannot reenter the Vault.\n *\n * @param wrappedToken Address of the wrapped token that implements IERC4626\n * @param sharesToRemove Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's\n * total shares\n * @param minAmountUnderlyingOutRaw Minimum amount of underlying tokens to receive from the buffer. It is expressed\n * in underlying token native decimals\n * @param minAmountWrappedOutRaw Minimum amount of wrapped tokens to receive from the buffer. It is expressed in\n * wrapped token native decimals\n * @param sharesOwner Owner of the shares (`msg.sender` for `removeLiquidityFromBuffer` entrypoint)\n * @return removedUnderlyingBalanceRaw Amount of underlying tokens returned to the user\n * @return removedWrappedBalanceRaw Amount of wrapped tokens returned to the user\n */\n function removeLiquidityFromBufferHook(\n IERC4626 wrappedToken,\n uint256 sharesToRemove,\n uint256 minAmountUnderlyingOutRaw,\n uint256 minAmountWrappedOutRaw,\n address sharesOwner\n )\n external\n onlyVaultDelegateCall\n onlyVault\n onlyWhenUnlocked\n withInitializedBuffer(wrappedToken)\n returns (uint256 removedUnderlyingBalanceRaw, uint256 removedWrappedBalanceRaw)\n {\n if (_isQueryContext()) {\n // Increase `sharesOwner` balance to ensure that both the share amount check and the burn function succeed.\n _queryModeBufferSharesIncrease(wrappedToken, sharesOwner, sharesToRemove);\n }\n\n if (sharesToRemove > _bufferLpShares[wrappedToken][sharesOwner]) {\n revert NotEnoughBufferShares();\n }\n\n bytes32 bufferBalances = _bufferTokenBalances[wrappedToken];\n uint256 totalShares = _bufferTotalShares[wrappedToken];\n\n removedUnderlyingBalanceRaw = (bufferBalances.getBalanceRaw() * sharesToRemove) / totalShares;\n removedWrappedBalanceRaw = (bufferBalances.getBalanceDerived() * sharesToRemove) / totalShares;\n\n // We get the underlying token stored internally as opposed to calling `asset()` in the wrapped token.\n // This is to avoid any kind of unnecessary external call; the underlying token is set during initialization\n // and can't change afterwards, so it is already validated at this point. There is no way to add liquidity\n // with an asset that differs from the one set during initialization.\n IERC20 underlyingToken = IERC20(_bufferAssets[wrappedToken]);\n\n if (removedUnderlyingBalanceRaw < minAmountUnderlyingOutRaw) {\n revert AmountInAboveMax(IERC20(underlyingToken), removedUnderlyingBalanceRaw, minAmountUnderlyingOutRaw);\n }\n\n if (removedWrappedBalanceRaw < minAmountWrappedOutRaw) {\n revert AmountInAboveMax(IERC20(wrappedToken), removedWrappedBalanceRaw, minAmountWrappedOutRaw);\n }\n\n _supplyCredit(underlyingToken, removedUnderlyingBalanceRaw);\n _supplyCredit(wrappedToken, removedWrappedBalanceRaw);\n\n bufferBalances = PackedTokenBalance.toPackedBalance(\n bufferBalances.getBalanceRaw() - removedUnderlyingBalanceRaw,\n bufferBalances.getBalanceDerived() - removedWrappedBalanceRaw\n );\n\n _bufferTokenBalances[wrappedToken] = bufferBalances;\n\n // Ensures we cannot drop the supply below the minimum.\n _burnBufferShares(wrappedToken, sharesOwner, sharesToRemove);\n\n // This triggers an external call to itself; the Vault is acting as a Router in this case.\n // `sendTo` makes external calls (`transfer`) but is non-reentrant.\n if (removedUnderlyingBalanceRaw > 0) {\n _vault.sendTo(underlyingToken, sharesOwner, removedUnderlyingBalanceRaw);\n }\n if (removedWrappedBalanceRaw > 0) {\n _vault.sendTo(wrappedToken, sharesOwner, removedWrappedBalanceRaw);\n }\n\n emit LiquidityRemovedFromBuffer(\n wrappedToken,\n removedUnderlyingBalanceRaw,\n removedWrappedBalanceRaw,\n bufferBalances\n );\n }\n\n function _burnBufferShares(IERC4626 wrappedToken, address from, uint256 amount) internal {\n if (from == address(0)) {\n revert BufferSharesInvalidOwner();\n }\n\n uint256 newTotalSupply = _bufferTotalShares[wrappedToken] - amount;\n\n // Ensure that the buffer can never be drained below the minimum total supply.\n _ensureBufferMinimumTotalSupply(newTotalSupply);\n\n _bufferTotalShares[wrappedToken] = newTotalSupply;\n _bufferLpShares[wrappedToken][from] -= amount;\n\n emit BufferSharesBurned(wrappedToken, from, amount);\n }\n\n /// @dev For query mode usage only, inside `removeLiquidityFromBuffer`.\n function _queryModeBufferSharesIncrease(IERC4626 wrappedToken, address to, uint256 amount) internal {\n // Enforce that this can only be called in a read-only, query context.\n if (EVMCallModeHelpers.isStaticCall() == false) {\n revert EVMCallModeHelpers.NotStaticCall();\n }\n\n // Increase `to` balance to ensure the burn function succeeds during query.\n _bufferLpShares[wrappedToken][to] += amount;\n }\n\n /// @inheritdoc IVaultAdmin\n function getBufferAsset(\n IERC4626 wrappedToken\n ) external view onlyVaultDelegateCall returns (address underlyingToken) {\n return _bufferAssets[wrappedToken];\n }\n\n /// @inheritdoc IVaultAdmin\n function getBufferOwnerShares(\n IERC4626 token,\n address user\n ) external view onlyVaultDelegateCall returns (uint256 shares) {\n return _bufferLpShares[token][user];\n }\n\n /// @inheritdoc IVaultAdmin\n function getBufferTotalShares(IERC4626 token) external view onlyVaultDelegateCall returns (uint256 shares) {\n return _bufferTotalShares[token];\n }\n\n /// @inheritdoc IVaultAdmin\n function getBufferBalance(IERC4626 token) external view onlyVaultDelegateCall returns (uint256, uint256) {\n // The first balance is underlying, and the last is wrapped balance.\n return (_bufferTokenBalances[token].getBalanceRaw(), _bufferTokenBalances[token].getBalanceDerived());\n }\n\n function _ensureBufferMinimumTotalSupply(uint256 newTotalSupply) private pure {\n if (newTotalSupply < _BUFFER_MINIMUM_TOTAL_SUPPLY) {\n revert BufferTotalSupplyTooLow(newTotalSupply);\n }\n }\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /// @inheritdoc IVaultAdmin\n function setAuthorizer(IAuthorizer newAuthorizer) external onlyVaultDelegateCall authenticate {\n _authorizer = newAuthorizer;\n\n emit AuthorizerChanged(newAuthorizer);\n }\n\n /// @dev Authenticate by role; otherwise fall through and check governance.\n function _ensureAuthenticatedByRole(address pool, address roleAddress) private view {\n if (msg.sender == roleAddress) {\n return;\n }\n\n _ensureAuthenticated(pool);\n }\n\n /// @dev Authenticate exclusively by role; caller must match the `roleAddress`, if assigned.\n function _ensureAuthenticatedByExclusiveRole(address pool, address roleAddress) private view {\n if (roleAddress == address(0)) {\n // Defer to governance if no role assigned.\n _ensureAuthenticated(pool);\n } else if (msg.sender != roleAddress) {\n revert SenderNotAllowed();\n }\n }\n\n /// @dev Delegate authentication to governance.\n function _ensureAuthenticated(address pool) private view {\n bytes32 actionId = getActionId(msg.sig);\n\n if (_canPerform(actionId, msg.sender, pool) == false) {\n revert SenderNotAllowed();\n }\n }\n\n /// @dev Access control is delegated to the Authorizer.\n function _canPerform(bytes32 actionId, address user) internal view override returns (bool) {\n return _authorizer.canPerform(actionId, user, address(this));\n }\n\n /// @dev Access control is delegated to the Authorizer. `where` refers to the target contract.\n function _canPerform(bytes32 actionId, address user, address where) internal view returns (bool) {\n return _authorizer.canPerform(actionId, user, where);\n }\n\n /*******************************************************************************\n Default handlers\n *******************************************************************************/\n\n receive() external payable {\n revert CannotReceiveEth();\n }\n\n // solhint-disable no-complex-fallback\n\n fallback() external payable {\n if (msg.value > 0) {\n revert CannotReceiveEth();\n }\n\n revert(\"Not implemented\");\n }\n}\n"},"@balancer-labs/v3-vault/contracts/VaultCommon.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { SafeCast } from \"@openzeppelin/contracts/utils/math/SafeCast.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { ISwapFeePercentageBounds } from \"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\";\nimport { PoolData, Rounding } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVaultEvents } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\";\n\nimport { StorageSlotExtension } from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\";\nimport { EVMCallModeHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol\";\nimport { PackedTokenBalance } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\";\nimport { ScalingHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol\";\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\nimport {\n TransientStorageHelpers\n} from \"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\";\n\nimport { VaultStateBits, VaultStateLib } from \"./lib/VaultStateLib.sol\";\nimport { PoolConfigBits, PoolConfigLib } from \"./lib/PoolConfigLib.sol\";\nimport { ERC20MultiToken } from \"./token/ERC20MultiToken.sol\";\nimport { PoolDataLib } from \"./lib/PoolDataLib.sol\";\nimport { VaultStorage } from \"./VaultStorage.sol\";\n\n/**\n * @notice Functions and modifiers shared between the main Vault and its extension contracts.\n * @dev This contract contains common utilities in the inheritance chain that require storage to work,\n * and will be required in both the main Vault and its extensions.\n */\nabstract contract VaultCommon is IVaultEvents, IVaultErrors, VaultStorage, ReentrancyGuardTransient, ERC20MultiToken {\n using PoolConfigLib for PoolConfigBits;\n using VaultStateLib for VaultStateBits;\n using SafeCast for *;\n using TransientStorageHelpers for *;\n using StorageSlotExtension for *;\n using PoolDataLib for PoolData;\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /**\n * @dev This modifier ensures that the function it modifies can only be called\n * when a tab has been opened.\n */\n modifier onlyWhenUnlocked() {\n _ensureUnlocked();\n _;\n }\n\n function _ensureUnlocked() internal view {\n if (_isUnlocked().tload() == false) {\n revert VaultIsNotUnlocked();\n }\n }\n\n /**\n * @notice Expose the state of the Vault's reentrancy guard.\n * @return True if the Vault is currently executing a nonReentrant function\n */\n function reentrancyGuardEntered() public view returns (bool) {\n return _reentrancyGuardEntered();\n }\n\n /**\n * @notice Records the `credit` for a given token.\n * @param token The ERC20 token for which the 'credit' will be accounted\n * @param credit The amount of `token` supplied to the Vault in favor of the caller\n */\n function _supplyCredit(IERC20 token, uint256 credit) internal {\n _accountDelta(token, -credit.toInt256());\n }\n\n /**\n * @notice Records the `debt` for a given token.\n * @param token The ERC20 token for which the `debt` will be accounted\n * @param debt The amount of `token` taken from the Vault in favor of the caller\n */\n function _takeDebt(IERC20 token, uint256 debt) internal {\n _accountDelta(token, debt.toInt256());\n }\n\n /**\n * @dev Accounts the delta for the given token. A positive delta represents debt,\n * while a negative delta represents surplus.\n *\n * @param token The ERC20 token for which the delta is being accounted\n * @param delta The difference in the token balance\n * Positive indicates a debit or a decrease in Vault's tokens,\n * negative indicates a credit or an increase in Vault's tokens.\n */\n function _accountDelta(IERC20 token, int256 delta) internal {\n // If the delta is zero, there's nothing to account for.\n if (delta == 0) return;\n\n // Get the current recorded delta for this token.\n int256 current = _tokenDeltas().tGet(token);\n\n // Calculate the new delta after accounting for the change.\n int256 next = current + delta;\n\n if (next == 0) {\n // If the resultant delta becomes zero after this operation,\n // decrease the count of non-zero deltas.\n _nonZeroDeltaCount().tDecrement();\n } else if (current == 0) {\n // If there was no previous delta (i.e., it was zero) and now we have one,\n // increase the count of non-zero deltas.\n _nonZeroDeltaCount().tIncrement();\n }\n\n // Update the delta for this token.\n _tokenDeltas().tSet(token, next);\n }\n\n /*******************************************************************************\n Vault Pausing\n *******************************************************************************/\n\n /// @dev Modifier to make a function callable only when the Vault is not paused.\n modifier whenVaultNotPaused() {\n _ensureVaultNotPaused();\n _;\n }\n\n /// @dev Reverts if the Vault is paused.\n function _ensureVaultNotPaused() internal view {\n if (_isVaultPaused()) {\n revert VaultPaused();\n }\n }\n\n /// @dev Reverts if the Vault or the given pool are paused.\n function _ensureUnpaused(address pool) internal view {\n _ensureVaultNotPaused();\n _ensurePoolNotPaused(pool);\n }\n\n /**\n * @dev For gas efficiency, storage is only read before `_vaultBufferPeriodEndTime`. Once we're past that\n * timestamp, the expression short-circuits false, and the Vault is permanently unpaused.\n */\n function _isVaultPaused() internal view returns (bool) {\n // solhint-disable-next-line not-rely-on-time\n return block.timestamp <= _vaultBufferPeriodEndTime && _vaultStateBits.isVaultPaused();\n }\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /// @dev Reverts if the pool is paused.\n function _ensurePoolNotPaused(address pool) internal view {\n if (_isPoolPaused(pool)) {\n revert PoolPaused(pool);\n }\n }\n\n /// @dev Check both the flag and timestamp to determine whether the pool is paused.\n function _isPoolPaused(address pool) internal view returns (bool) {\n (bool paused, ) = _getPoolPausedState(pool);\n\n return paused;\n }\n\n /// @dev Lowest level routine that plucks only the minimum necessary parts from storage.\n function _getPoolPausedState(address pool) internal view returns (bool, uint32) {\n PoolConfigBits config = _poolConfigBits[pool];\n\n bool isPoolPaused = config.isPoolPaused();\n uint32 pauseWindowEndTime = config.getPauseWindowEndTime();\n\n // Use the Vault's buffer period.\n // solhint-disable-next-line not-rely-on-time\n return (isPoolPaused && block.timestamp <= pauseWindowEndTime + _vaultBufferPeriodDuration, pauseWindowEndTime);\n }\n\n /*******************************************************************************\n Buffer Pausing\n *******************************************************************************/\n /// @dev Modifier to make a function callable only when vault buffers are not paused.\n modifier whenVaultBuffersAreNotPaused() {\n _ensureVaultBuffersAreNotPaused();\n _;\n }\n\n /// @dev Reverts if vault buffers are paused.\n function _ensureVaultBuffersAreNotPaused() internal view {\n if (_vaultStateBits.areBuffersPaused()) {\n revert VaultBuffersArePaused();\n }\n }\n\n /*******************************************************************************\n Pool Registration and Initialization\n *******************************************************************************/\n\n /// @dev Reverts unless `pool` is a registered Pool.\n modifier withRegisteredPool(address pool) {\n _ensureRegisteredPool(pool);\n _;\n }\n\n /// @dev Reverts unless `pool` is an initialized Pool.\n modifier withInitializedPool(address pool) {\n _ensureInitializedPool(pool);\n _;\n }\n\n function _ensureRegisteredPool(address pool) internal view {\n if (!_isPoolRegistered(pool)) {\n revert PoolNotRegistered(pool);\n }\n }\n\n /// @dev See `isPoolRegistered`\n function _isPoolRegistered(address pool) internal view returns (bool) {\n PoolConfigBits config = _poolConfigBits[pool];\n return config.isPoolRegistered();\n }\n\n function _ensureInitializedPool(address pool) internal view {\n if (!_isPoolInitialized(pool)) {\n revert PoolNotInitialized(pool);\n }\n }\n\n /// @dev See `isPoolInitialized`\n function _isPoolInitialized(address pool) internal view returns (bool) {\n PoolConfigBits config = _poolConfigBits[pool];\n return config.isPoolInitialized();\n }\n\n /*******************************************************************************\n Buffer Initialization & Validation\n *******************************************************************************/\n\n modifier withInitializedBuffer(IERC4626 wrappedToken) {\n _ensureBufferInitialized(wrappedToken);\n _;\n }\n\n function _ensureBufferInitialized(IERC4626 wrappedToken) internal view {\n if (_bufferAssets[wrappedToken] == address(0)) {\n revert BufferNotInitialized(wrappedToken);\n }\n }\n\n /**\n * @dev This assumes `underlyingToken` is non-zero; should be called by functions that have already ensured the\n * buffer has been initialized (e.g., those protected by `withInitializedBuffer`).\n */\n function _ensureCorrectBufferAsset(IERC4626 wrappedToken, address underlyingToken) internal view {\n if (_bufferAssets[wrappedToken] != underlyingToken) {\n // Asset was changed since the buffer was initialized.\n revert WrongUnderlyingToken(wrappedToken, underlyingToken);\n }\n }\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /**\n * @dev Packs and sets the raw and live balances of a Pool's tokens to the current values in poolData.balancesRaw\n * and poolData.liveBalances in the same storage slot.\n */\n function _writePoolBalancesToStorage(address pool, PoolData memory poolData) internal {\n mapping(uint256 tokenIndex => bytes32 packedTokenBalance) storage poolBalances = _poolTokenBalances[pool];\n\n for (uint256 i = 0; i < poolData.balancesRaw.length; ++i) {\n // We assume all newBalances are properly ordered.\n poolBalances[i] = PackedTokenBalance.toPackedBalance(\n poolData.balancesRaw[i],\n poolData.balancesLiveScaled18[i]\n );\n }\n }\n\n /**\n * @dev Fill in PoolData, including paying protocol yield fees and computing final raw and live balances.\n * In normal operation, we update both balances and fees together. However, while Recovery Mode is enabled,\n * we cannot track yield fees, as that would involve making external calls that could fail and block withdrawals.\n *\n * Therefore, disabling Recovery Mode requires writing *only* the balances to storage, so we still need this\n * as a separate function. It is normally called by `_loadPoolDataUpdatingBalancesAndYieldFees`, but in the\n * Recovery Mode special case, it is called separately, with the result passed into `_writePoolBalancesToStorage`.\n */\n function _loadPoolData(address pool, Rounding roundingDirection) internal view returns (PoolData memory poolData) {\n poolData.load(\n _poolTokenBalances[pool],\n _poolConfigBits[pool],\n _poolTokenInfo[pool],\n _poolTokens[pool],\n roundingDirection\n );\n }\n\n /**\n * @dev Fill in PoolData, including paying protocol yield fees and computing final raw and live balances.\n * This function modifies protocol fees and balance storage. Out of an abundance of caution, since `_loadPoolData`\n * makes external calls, we are making anything that calls it and then modifies storage non-reentrant.\n * Side effects: updates `_aggregateFeeAmounts` and `_poolTokenBalances` in storage.\n */\n function _loadPoolDataUpdatingBalancesAndYieldFees(\n address pool,\n Rounding roundingDirection\n ) internal nonReentrant returns (PoolData memory poolData) {\n // Initialize poolData with base information for subsequent calculations.\n poolData.load(\n _poolTokenBalances[pool],\n _poolConfigBits[pool],\n _poolTokenInfo[pool],\n _poolTokens[pool],\n roundingDirection\n );\n\n PoolDataLib.syncPoolBalancesAndFees(poolData, _poolTokenBalances[pool], _aggregateFeeAmounts[pool]);\n }\n\n /**\n * @dev Updates the raw and live balance of a given token in poolData, scaling the given raw balance by both decimal\n * and token rates, and rounding the result in the given direction. Assumes scaling factors and rates are current\n * in PoolData.\n */\n function _updateRawAndLiveTokenBalancesInPoolData(\n PoolData memory poolData,\n uint256 newRawBalance,\n Rounding roundingDirection,\n uint256 tokenIndex\n ) internal pure returns (uint256) {\n poolData.balancesRaw[tokenIndex] = newRawBalance;\n\n function(uint256, uint256, uint256) internal pure returns (uint256) _upOrDown = roundingDirection ==\n Rounding.ROUND_UP\n ? ScalingHelpers.toScaled18ApplyRateRoundUp\n : ScalingHelpers.toScaled18ApplyRateRoundDown;\n\n poolData.balancesLiveScaled18[tokenIndex] = _upOrDown(\n newRawBalance,\n poolData.decimalScalingFactors[tokenIndex],\n poolData.tokenRates[tokenIndex]\n );\n\n return _upOrDown(newRawBalance, poolData.decimalScalingFactors[tokenIndex], poolData.tokenRates[tokenIndex]);\n }\n\n function _setStaticSwapFeePercentage(address pool, uint256 swapFeePercentage) internal {\n // These cannot be called during pool construction. Pools must be deployed first, then registered.\n if (swapFeePercentage < ISwapFeePercentageBounds(pool).getMinimumSwapFeePercentage()) {\n revert SwapFeePercentageTooLow();\n }\n\n if (swapFeePercentage > ISwapFeePercentageBounds(pool).getMaximumSwapFeePercentage()) {\n revert SwapFeePercentageTooHigh();\n }\n\n // The library also checks that the percentage is <= FP(1), regardless of what the pool defines.\n _poolConfigBits[pool] = _poolConfigBits[pool].setStaticSwapFeePercentage(swapFeePercentage);\n\n emit SwapFeePercentageChanged(pool, swapFeePercentage);\n }\n\n /// @dev Find the index of a token in a token array. Reverts if not found.\n function _findTokenIndex(IERC20[] memory tokens, IERC20 token) internal pure returns (uint256) {\n for (uint256 i = 0; i < tokens.length; i++) {\n if (tokens[i] == token) {\n return i;\n }\n }\n\n revert TokenNotRegistered(token);\n }\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /// @dev Place on functions that may only be called when the associated pool is in recovery mode.\n modifier onlyInRecoveryMode(address pool) {\n _ensurePoolInRecoveryMode(pool);\n _;\n }\n\n /// @dev Reverts if the pool is not in recovery mode.\n function _ensurePoolInRecoveryMode(address pool) internal view {\n if (!_isPoolInRecoveryMode(pool)) {\n revert PoolNotInRecoveryMode(pool);\n }\n }\n\n /**\n * @notice Checks whether a pool is in recovery mode.\n * @param pool Address of the pool to check\n * @return inRecoveryMode True if the pool is in recovery mode, false otherwise\n */\n function _isPoolInRecoveryMode(address pool) internal view returns (bool) {\n return _poolConfigBits[pool].isPoolInRecoveryMode();\n }\n\n function _isQueryContext() internal view returns (bool) {\n return EVMCallModeHelpers.isStaticCall() && _vaultStateBits.isQueryDisabled() == false;\n }\n}\n"},"@balancer-labs/v3-vault/contracts/VaultExtension.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20Metadata } from \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\";\nimport { IERC4626 } from \"@openzeppelin/contracts/interfaces/IERC4626.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\nimport { Proxy } from \"@openzeppelin/contracts/proxy/Proxy.sol\";\n\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { IRateProvider } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\";\nimport { IVaultExtension } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\";\nimport { IVaultAdmin } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\";\nimport { IBasePool } from \"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\";\nimport { IHooks } from \"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { StorageSlotExtension } from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\";\nimport { EVMCallModeHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol\";\nimport { PackedTokenBalance } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\";\nimport { ScalingHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol\";\nimport { CastingHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\";\nimport { InputHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\";\nimport { RevertCodec } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\";\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\nimport {\n TransientStorageHelpers\n} from \"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\";\n\nimport { VaultStateBits, VaultStateLib } from \"./lib/VaultStateLib.sol\";\nimport { PoolConfigLib, PoolConfigBits } from \"./lib/PoolConfigLib.sol\";\nimport { VaultExtensionsLib } from \"./lib/VaultExtensionsLib.sol\";\nimport { HooksConfigLib } from \"./lib/HooksConfigLib.sol\";\nimport { PoolDataLib } from \"./lib/PoolDataLib.sol\";\nimport { BasePoolMath } from \"./BasePoolMath.sol\";\nimport { VaultCommon } from \"./VaultCommon.sol\";\n\n/**\n * @notice Bytecode extension for the Vault containing permissionless functions outside the critical path.\n * It has access to the same storage layout as the main vault.\n *\n * The functions in this contract are not meant to be called directly. They must only be called by the Vault\n * via delegate calls, so that any state modifications produced by this contract's code will actually target\n * the main Vault's state.\n *\n * The storage of this contract is in practice unused.\n */\ncontract VaultExtension is IVaultExtension, VaultCommon, Proxy {\n using Address for *;\n using CastingHelpers for uint256[];\n using FixedPoint for uint256;\n using PackedTokenBalance for bytes32;\n using PoolConfigLib for PoolConfigBits;\n using HooksConfigLib for PoolConfigBits;\n using VaultStateLib for VaultStateBits;\n using InputHelpers for uint256;\n using ScalingHelpers for *;\n using VaultExtensionsLib for IVault;\n using TransientStorageHelpers for *;\n using StorageSlotExtension for *;\n using PoolDataLib for PoolData;\n\n IVault private immutable _vault;\n IVaultAdmin private immutable _vaultAdmin;\n\n /// @dev Functions with this modifier can only be delegate-called by the Vault.\n modifier onlyVaultDelegateCall() {\n _ensureVaultDelegateCall();\n _;\n }\n\n function _ensureVaultDelegateCall() internal view {\n _vault.ensureVaultDelegateCall();\n }\n\n constructor(IVault mainVault, IVaultAdmin vaultAdmin) {\n if (vaultAdmin.vault() != mainVault) {\n revert WrongVaultAdminDeployment();\n }\n\n _vaultPauseWindowEndTime = vaultAdmin.getPauseWindowEndTime();\n _vaultBufferPeriodDuration = vaultAdmin.getBufferPeriodDuration();\n _vaultBufferPeriodEndTime = vaultAdmin.getBufferPeriodEndTime();\n\n _vault = mainVault;\n _vaultAdmin = vaultAdmin;\n }\n\n /*******************************************************************************\n Constants and immutables\n *******************************************************************************/\n\n /// @inheritdoc IVaultExtension\n function vault() external view returns (IVault) {\n return _vault;\n }\n\n /// @inheritdoc IVaultExtension\n function getVaultAdmin() external view returns (address) {\n return _implementation();\n }\n\n /*******************************************************************************\n Transient Accounting\n *******************************************************************************/\n\n /// @inheritdoc IVaultExtension\n function isUnlocked() external view onlyVaultDelegateCall returns (bool) {\n return _isUnlocked().tload();\n }\n\n /// @inheritdoc IVaultExtension\n function getNonzeroDeltaCount() external view onlyVaultDelegateCall returns (uint256) {\n return _nonZeroDeltaCount().tload();\n }\n\n /// @inheritdoc IVaultExtension\n function getTokenDelta(IERC20 token) external view onlyVaultDelegateCall returns (int256) {\n return _tokenDeltas().tGet(token);\n }\n\n /// @inheritdoc IVaultExtension\n function getReservesOf(IERC20 token) external view onlyVaultDelegateCall returns (uint256) {\n return _reservesOf[token];\n }\n\n /// @inheritdoc IVaultExtension\n function getAddLiquidityCalledFlag(address pool) external view onlyVaultDelegateCall returns (bool) {\n return _addLiquidityCalled().tGet(_sessionIdSlot().tload(), pool);\n }\n\n /*******************************************************************************\n Pool Registration\n *******************************************************************************/\n\n struct PoolRegistrationParams {\n TokenConfig[] tokenConfig;\n uint256 swapFeePercentage;\n uint32 pauseWindowEndTime;\n bool protocolFeeExempt;\n PoolRoleAccounts roleAccounts;\n address poolHooksContract;\n LiquidityManagement liquidityManagement;\n }\n\n /// @inheritdoc IVaultExtension\n function registerPool(\n address pool,\n TokenConfig[] memory tokenConfig,\n uint256 swapFeePercentage,\n uint32 pauseWindowEndTime,\n bool protocolFeeExempt,\n PoolRoleAccounts calldata roleAccounts,\n address poolHooksContract,\n LiquidityManagement calldata liquidityManagement\n ) external onlyVaultDelegateCall nonReentrant whenVaultNotPaused {\n _registerPool(\n pool,\n PoolRegistrationParams({\n tokenConfig: tokenConfig,\n swapFeePercentage: swapFeePercentage,\n pauseWindowEndTime: pauseWindowEndTime,\n protocolFeeExempt: protocolFeeExempt,\n roleAccounts: roleAccounts,\n poolHooksContract: poolHooksContract,\n liquidityManagement: liquidityManagement\n })\n );\n }\n\n /**\n * @dev The function will register the pool, setting its tokens with an initial balance of zero.\n * The function also checks for valid token addresses and ensures that the pool and tokens aren't\n * already registered.\n *\n * Emits a `PoolRegistered` event upon successful registration.\n */\n function _registerPool(address pool, PoolRegistrationParams memory params) internal {\n // Ensure the pool isn't already registered.\n if (_isPoolRegistered(pool)) {\n revert PoolAlreadyRegistered(pool);\n }\n\n uint256 numTokens = params.tokenConfig.length;\n if (numTokens < _MIN_TOKENS) {\n revert MinTokens();\n }\n if (numTokens > _MAX_TOKENS) {\n revert MaxTokens();\n }\n\n uint8[] memory tokenDecimalDiffs = new uint8[](numTokens);\n IERC20 previousToken;\n\n for (uint256 i = 0; i < numTokens; ++i) {\n TokenConfig memory tokenData = params.tokenConfig[i];\n IERC20 token = tokenData.token;\n\n // Ensure that the token address is valid.\n if (address(token) == address(0) || address(token) == pool) {\n revert InvalidToken();\n }\n\n // Enforce token sorting. (`previousToken` will be the zero address on the first iteration.)\n if (token < previousToken) {\n revert InputHelpers.TokensNotSorted();\n }\n\n if (token == previousToken) {\n revert TokenAlreadyRegistered(token);\n }\n\n bool hasRateProvider = tokenData.rateProvider != IRateProvider(address(0));\n\n _poolTokenInfo[pool][token] = TokenInfo({\n tokenType: tokenData.tokenType,\n rateProvider: tokenData.rateProvider,\n paysYieldFees: tokenData.paysYieldFees\n });\n\n if (tokenData.tokenType == TokenType.STANDARD) {\n if (hasRateProvider || tokenData.paysYieldFees) {\n revert InvalidTokenConfiguration();\n }\n } else if (tokenData.tokenType == TokenType.WITH_RATE) {\n if (hasRateProvider == false) {\n revert InvalidTokenConfiguration();\n }\n } else {\n revert InvalidTokenType();\n }\n\n // Store the token decimal conversion factor as a delta from the maximum supported value.\n uint8 tokenDecimals = IERC20Metadata(address(token)).decimals();\n\n if (tokenDecimals > _MAX_TOKEN_DECIMALS) {\n revert InvalidTokenDecimals();\n } else {\n unchecked {\n tokenDecimalDiffs[i] = _MAX_TOKEN_DECIMALS - tokenDecimals;\n }\n }\n\n // Store token and seed the next iteration.\n _poolTokens[pool].push(token);\n previousToken = token;\n }\n\n // Store the role account addresses (for getters).\n _poolRoleAccounts[pool] = params.roleAccounts;\n\n PoolConfigBits poolConfigBits;\n\n // Store the configuration, and mark the pool as registered.\n {\n // Initialize the pool-specific protocol fee values to the current global defaults.\n (uint256 aggregateSwapFeePercentage, uint256 aggregateYieldFeePercentage) = _protocolFeeController\n .registerPool(pool, params.roleAccounts.poolCreator, params.protocolFeeExempt);\n\n poolConfigBits = poolConfigBits.setPoolRegistered(true);\n poolConfigBits = poolConfigBits.setDisableUnbalancedLiquidity(\n params.liquidityManagement.disableUnbalancedLiquidity\n );\n poolConfigBits = poolConfigBits.setAddLiquidityCustom(params.liquidityManagement.enableAddLiquidityCustom);\n poolConfigBits = poolConfigBits.setRemoveLiquidityCustom(\n params.liquidityManagement.enableRemoveLiquidityCustom\n );\n poolConfigBits = poolConfigBits.setDonation(params.liquidityManagement.enableDonation);\n poolConfigBits = poolConfigBits.setTokenDecimalDiffs(PoolConfigLib.toTokenDecimalDiffs(tokenDecimalDiffs));\n poolConfigBits = poolConfigBits.setPauseWindowEndTime(params.pauseWindowEndTime);\n poolConfigBits = poolConfigBits.setAggregateSwapFeePercentage(aggregateSwapFeePercentage);\n poolConfigBits = poolConfigBits.setAggregateYieldFeePercentage(aggregateYieldFeePercentage);\n\n if (params.poolHooksContract != address(0)) {\n // If a hook address was passed, make sure that hook trusts the pool factory.\n if (\n IHooks(params.poolHooksContract).onRegister(\n msg.sender,\n pool,\n params.tokenConfig,\n params.liquidityManagement\n ) == false\n ) {\n revert HookRegistrationFailed(params.poolHooksContract, pool, msg.sender);\n }\n\n // Gets the default HooksConfig from the hook contract and saves it in the Vault state.\n // Storing into hooksConfig first avoids stack-too-deep.\n HookFlags memory hookFlags = IHooks(params.poolHooksContract).getHookFlags();\n\n // When enableHookAdjustedAmounts == true, hooks are able to modify the result of a liquidity or swap\n // operation by implementing an after hook. For simplicity, the Vault only supports modifying the\n // calculated part of the operation. As such, when a hook supports adjusted amounts, it cannot support\n // unbalanced liquidity operations, as this would introduce instances where the amount calculated is the\n // input amount (EXACT_OUT).\n if (\n hookFlags.enableHookAdjustedAmounts &&\n params.liquidityManagement.disableUnbalancedLiquidity == false\n ) {\n revert HookRegistrationFailed(params.poolHooksContract, pool, msg.sender);\n }\n\n poolConfigBits = poolConfigBits.setHookAdjustedAmounts(hookFlags.enableHookAdjustedAmounts);\n poolConfigBits = poolConfigBits.setShouldCallBeforeInitialize(hookFlags.shouldCallBeforeInitialize);\n poolConfigBits = poolConfigBits.setShouldCallAfterInitialize(hookFlags.shouldCallAfterInitialize);\n poolConfigBits = poolConfigBits.setShouldCallComputeDynamicSwapFee(\n hookFlags.shouldCallComputeDynamicSwapFee\n );\n poolConfigBits = poolConfigBits.setShouldCallBeforeSwap(hookFlags.shouldCallBeforeSwap);\n poolConfigBits = poolConfigBits.setShouldCallAfterSwap(hookFlags.shouldCallAfterSwap);\n poolConfigBits = poolConfigBits.setShouldCallBeforeAddLiquidity(hookFlags.shouldCallBeforeAddLiquidity);\n poolConfigBits = poolConfigBits.setShouldCallAfterAddLiquidity(hookFlags.shouldCallAfterAddLiquidity);\n poolConfigBits = poolConfigBits.setShouldCallBeforeRemoveLiquidity(\n hookFlags.shouldCallBeforeRemoveLiquidity\n );\n poolConfigBits = poolConfigBits.setShouldCallAfterRemoveLiquidity(\n hookFlags.shouldCallAfterRemoveLiquidity\n );\n }\n\n _poolConfigBits[pool] = poolConfigBits;\n _hooksContracts[pool] = IHooks(params.poolHooksContract);\n }\n\n // Static swap fee percentage has special limits, so we don't use the library function directly.\n _setStaticSwapFeePercentage(pool, params.swapFeePercentage);\n\n // Emit an event to log the pool registration (pass msg.sender as the factory argument).\n emit PoolRegistered(\n pool,\n msg.sender,\n params.tokenConfig,\n params.swapFeePercentage,\n params.pauseWindowEndTime,\n params.roleAccounts,\n poolConfigBits.toHooksConfig(IHooks(params.poolHooksContract)),\n params.liquidityManagement\n );\n }\n\n /// @inheritdoc IVaultExtension\n function isPoolRegistered(address pool) external view onlyVaultDelegateCall returns (bool) {\n return _isPoolRegistered(pool);\n }\n\n /// @inheritdoc IVaultExtension\n function initialize(\n address pool,\n address to,\n IERC20[] memory tokens,\n uint256[] memory exactAmountsIn,\n uint256 minBptAmountOut,\n bytes memory userData\n )\n external\n onlyVaultDelegateCall\n onlyWhenUnlocked\n withRegisteredPool(pool)\n nonReentrant\n returns (uint256 bptAmountOut)\n {\n _ensureUnpaused(pool);\n\n // Balances are zero until after initialize is called, so there is no need to charge pending yield fee here.\n PoolData memory poolData = _loadPoolData(pool, Rounding.ROUND_DOWN);\n\n if (poolData.poolConfigBits.isPoolInitialized()) {\n revert PoolAlreadyInitialized(pool);\n }\n uint256 numTokens = poolData.tokens.length;\n\n InputHelpers.ensureInputLengthMatch(numTokens, exactAmountsIn.length);\n\n // Amounts are entering pool math, so round down. A lower invariant after the join means less bptOut,\n // favoring the pool.\n uint256[] memory exactAmountsInScaled18 = exactAmountsIn.copyToScaled18ApplyRateRoundDownArray(\n poolData.decimalScalingFactors,\n poolData.tokenRates\n );\n\n if (poolData.poolConfigBits.shouldCallBeforeInitialize()) {\n HooksConfigLib.callBeforeInitializeHook(exactAmountsInScaled18, userData, _hooksContracts[pool]);\n // The before hook is reentrant, and could have changed token rates.\n // Updating balances here is unnecessary since they're 0, but we do not special case before init\n // for the sake of bytecode size.\n poolData.reloadBalancesAndRates(_poolTokenBalances[pool], Rounding.ROUND_DOWN);\n\n // Also update `exactAmountsInScaled18`, in case the underlying rates changed.\n exactAmountsInScaled18 = exactAmountsIn.copyToScaled18ApplyRateRoundDownArray(\n poolData.decimalScalingFactors,\n poolData.tokenRates\n );\n }\n\n bptAmountOut = _initialize(pool, to, poolData, tokens, exactAmountsIn, exactAmountsInScaled18, minBptAmountOut);\n\n if (poolData.poolConfigBits.shouldCallAfterInitialize()) {\n // `hooksContract` needed to fix stack too deep.\n IHooks hooksContract = _hooksContracts[pool];\n\n HooksConfigLib.callAfterInitializeHook(exactAmountsInScaled18, bptAmountOut, userData, hooksContract);\n }\n }\n\n function _initialize(\n address pool,\n address to,\n PoolData memory poolData,\n IERC20[] memory tokens,\n uint256[] memory exactAmountsIn,\n uint256[] memory exactAmountsInScaled18,\n uint256 minBptAmountOut\n ) internal returns (uint256 bptAmountOut) {\n mapping(uint256 tokenIndex => bytes32 packedTokenBalance) storage poolBalances = _poolTokenBalances[pool];\n\n for (uint256 i = 0; i < poolData.tokens.length; ++i) {\n IERC20 actualToken = poolData.tokens[i];\n\n // Tokens passed into `initialize` are the \"expected\" tokens.\n if (actualToken != tokens[i]) {\n revert TokensMismatch(pool, address(tokens[i]), address(actualToken));\n }\n\n // Debit token[i] for amountIn.\n _takeDebt(actualToken, exactAmountsIn[i]);\n\n // Store the new Pool balances (and initial last live balances).\n poolBalances[i] = PackedTokenBalance.toPackedBalance(exactAmountsIn[i], exactAmountsInScaled18[i]);\n }\n\n poolData.poolConfigBits = poolData.poolConfigBits.setPoolInitialized(true);\n\n // Store config and mark the pool as initialized.\n _poolConfigBits[pool] = poolData.poolConfigBits;\n\n // Pass scaled balances to the pool.\n bptAmountOut = IBasePool(pool).computeInvariant(exactAmountsInScaled18, Rounding.ROUND_DOWN);\n\n _ensurePoolMinimumTotalSupply(bptAmountOut);\n\n // At this point we know that bptAmountOut >= _POOL_MINIMUM_TOTAL_SUPPLY, so this will not revert.\n bptAmountOut -= _POOL_MINIMUM_TOTAL_SUPPLY;\n // When adding liquidity, we must mint tokens concurrently with updating pool balances,\n // as the pool's math relies on totalSupply.\n // Minting will be reverted if it results in a total supply less than the _POOL_MINIMUM_TOTAL_SUPPLY.\n _mintMinimumSupplyReserve(address(pool));\n _mint(address(pool), to, bptAmountOut);\n\n // At this point we have the calculated BPT amount.\n if (bptAmountOut < minBptAmountOut) {\n revert BptAmountOutBelowMin(bptAmountOut, minBptAmountOut);\n }\n\n emit LiquidityAdded(\n pool,\n to,\n AddLiquidityKind.UNBALANCED,\n _totalSupply(pool),\n exactAmountsIn,\n new uint256[](poolData.tokens.length)\n );\n\n // Emit an event to log the pool initialization.\n emit PoolInitialized(pool);\n }\n\n /*******************************************************************************\n Pool Information\n *******************************************************************************/\n\n /// @inheritdoc IVaultExtension\n function isPoolInitialized(\n address pool\n ) external view onlyVaultDelegateCall withRegisteredPool(pool) returns (bool) {\n return _isPoolInitialized(pool);\n }\n\n /// @inheritdoc IVaultExtension\n function getPoolTokens(\n address pool\n ) external view onlyVaultDelegateCall withRegisteredPool(pool) returns (IERC20[] memory tokens) {\n return _poolTokens[pool];\n }\n\n /// @inheritdoc IVaultExtension\n function getPoolTokenRates(\n address pool\n )\n external\n view\n onlyVaultDelegateCall\n withRegisteredPool(pool)\n returns (uint256[] memory decimalScalingFactors, uint256[] memory tokenRates)\n {\n // Retrieve the mapping of tokens and their balances for the specified pool.\n PoolConfigBits poolConfig = _poolConfigBits[pool];\n\n IERC20[] memory tokens = _poolTokens[pool];\n uint256 numTokens = tokens.length;\n decimalScalingFactors = PoolConfigLib.getDecimalScalingFactors(poolConfig, numTokens);\n tokenRates = new uint256[](numTokens);\n\n for (uint256 i = 0; i < numTokens; ++i) {\n TokenInfo memory tokenInfo = _poolTokenInfo[pool][tokens[i]];\n tokenRates[i] = PoolDataLib.getTokenRate(tokenInfo);\n }\n }\n\n /// @inheritdoc IVaultExtension\n function getPoolData(\n address pool\n ) external view onlyVaultDelegateCall withInitializedPool(pool) returns (PoolData memory) {\n return _loadPoolData(pool, Rounding.ROUND_DOWN);\n }\n\n /// @inheritdoc IVaultExtension\n function getPoolTokenInfo(\n address pool\n )\n external\n view\n onlyVaultDelegateCall\n withRegisteredPool(pool)\n returns (\n IERC20[] memory tokens,\n TokenInfo[] memory tokenInfo,\n uint256[] memory balancesRaw,\n uint256[] memory lastBalancesLiveScaled18\n )\n {\n // Retrieve the mapping of tokens and their balances for the specified pool.\n mapping(uint256 tokenIndex => bytes32 packedTokenBalance) storage poolTokenBalances = _poolTokenBalances[pool];\n tokens = _poolTokens[pool];\n uint256 numTokens = tokens.length;\n tokenInfo = new TokenInfo[](numTokens);\n balancesRaw = new uint256[](numTokens);\n lastBalancesLiveScaled18 = new uint256[](numTokens);\n\n for (uint256 i = 0; i < numTokens; ++i) {\n bytes32 packedBalance = poolTokenBalances[i];\n tokenInfo[i] = _poolTokenInfo[pool][tokens[i]];\n balancesRaw[i] = packedBalance.getBalanceRaw();\n lastBalancesLiveScaled18[i] = packedBalance.getBalanceDerived();\n }\n }\n\n /// @inheritdoc IVaultExtension\n function getCurrentLiveBalances(\n address pool\n ) external view onlyVaultDelegateCall withRegisteredPool(pool) returns (uint256[] memory balancesLiveScaled18) {\n return _loadPoolData(pool, Rounding.ROUND_DOWN).balancesLiveScaled18;\n }\n\n /// @inheritdoc IVaultExtension\n function getPoolConfig(\n address pool\n ) external view onlyVaultDelegateCall withRegisteredPool(pool) returns (PoolConfig memory) {\n PoolConfigBits config = _poolConfigBits[pool];\n\n return\n PoolConfig({\n isPoolRegistered: config.isPoolRegistered(),\n isPoolInitialized: config.isPoolInitialized(),\n isPoolPaused: config.isPoolPaused(),\n isPoolInRecoveryMode: config.isPoolInRecoveryMode(),\n staticSwapFeePercentage: config.getStaticSwapFeePercentage(),\n aggregateSwapFeePercentage: config.getAggregateSwapFeePercentage(),\n aggregateYieldFeePercentage: config.getAggregateYieldFeePercentage(),\n tokenDecimalDiffs: config.getTokenDecimalDiffs(),\n pauseWindowEndTime: config.getPauseWindowEndTime(),\n liquidityManagement: LiquidityManagement({\n // NOTE: In contrast to the other flags, supportsUnbalancedLiquidity is enabled by default.\n disableUnbalancedLiquidity: !config.supportsUnbalancedLiquidity(),\n enableAddLiquidityCustom: config.supportsAddLiquidityCustom(),\n enableRemoveLiquidityCustom: config.supportsRemoveLiquidityCustom(),\n enableDonation: config.supportsDonation()\n })\n });\n }\n\n /// @inheritdoc IVaultExtension\n function getHooksConfig(\n address pool\n ) external view onlyVaultDelegateCall withRegisteredPool(pool) returns (HooksConfig memory) {\n return _poolConfigBits[pool].toHooksConfig(_hooksContracts[pool]);\n }\n\n /// @inheritdoc IVaultExtension\n function getBptRate(\n address pool\n ) external view onlyVaultDelegateCall withInitializedPool(pool) returns (uint256 rate) {\n PoolData memory poolData = _loadPoolData(pool, Rounding.ROUND_DOWN);\n uint256 invariant = IBasePool(pool).computeInvariant(poolData.balancesLiveScaled18, Rounding.ROUND_DOWN);\n\n return invariant.divDown(_totalSupply(pool));\n }\n\n /*******************************************************************************\n Balancer Pool Tokens\n *******************************************************************************/\n\n /// @inheritdoc IVaultExtension\n function totalSupply(address token) external view onlyVaultDelegateCall returns (uint256) {\n return _totalSupply(token);\n }\n\n /// @inheritdoc IVaultExtension\n function balanceOf(address token, address account) external view onlyVaultDelegateCall returns (uint256) {\n return _balanceOf(token, account);\n }\n\n /// @inheritdoc IVaultExtension\n function allowance(\n address token,\n address owner,\n address spender\n ) external view onlyVaultDelegateCall returns (uint256) {\n return _allowance(token, owner, spender);\n }\n\n /// @inheritdoc IVaultExtension\n function approve(address owner, address spender, uint256 amount) external onlyVaultDelegateCall returns (bool) {\n _approve(msg.sender, owner, spender, amount);\n return true;\n }\n\n /*******************************************************************************\n Pool Pausing\n *******************************************************************************/\n\n /// @inheritdoc IVaultExtension\n function isPoolPaused(address pool) external view onlyVaultDelegateCall withRegisteredPool(pool) returns (bool) {\n return _isPoolPaused(pool);\n }\n\n /// @inheritdoc IVaultExtension\n function getPoolPausedState(\n address pool\n ) external view onlyVaultDelegateCall withRegisteredPool(pool) returns (bool, uint32, uint32, address) {\n (bool paused, uint32 pauseWindowEndTime) = _getPoolPausedState(pool);\n\n return (\n paused,\n pauseWindowEndTime,\n pauseWindowEndTime + _vaultBufferPeriodDuration,\n _poolRoleAccounts[pool].pauseManager\n );\n }\n\n /*******************************************************************************\n ERC4626 Buffers\n *******************************************************************************/\n\n /// @inheritdoc IVaultExtension\n function isERC4626BufferInitialized(IERC4626 wrappedToken) external view onlyVaultDelegateCall returns (bool) {\n return _bufferAssets[wrappedToken] != address(0);\n }\n\n /// @inheritdoc IVaultExtension\n function getERC4626BufferAsset(IERC4626 wrappedToken) external view onlyVaultDelegateCall returns (address asset) {\n return _bufferAssets[wrappedToken];\n }\n\n /*******************************************************************************\n Fees\n *******************************************************************************/\n\n // Swap and Yield fees are both stored using the PackedTokenBalance library, which is usually used for\n // balances that are related (e.g., raw and live). In this case, it holds two uncorrelated values: swap\n // and yield fee amounts, arbitrarily assigning \"Raw\" to Swap and \"Derived\" to Yield.\n\n /// @inheritdoc IVaultExtension\n function getAggregateSwapFeeAmount(\n address pool,\n IERC20 token\n ) external view onlyVaultDelegateCall withRegisteredPool(pool) returns (uint256) {\n return _aggregateFeeAmounts[pool][token].getBalanceRaw();\n }\n\n /// @inheritdoc IVaultExtension\n function getAggregateYieldFeeAmount(\n address pool,\n IERC20 token\n ) external view onlyVaultDelegateCall withRegisteredPool(pool) returns (uint256) {\n return _aggregateFeeAmounts[pool][token].getBalanceDerived();\n }\n\n /// @inheritdoc IVaultExtension\n function getStaticSwapFeePercentage(\n address pool\n ) external view onlyVaultDelegateCall withRegisteredPool(pool) returns (uint256) {\n PoolConfigBits config = _poolConfigBits[pool];\n return config.getStaticSwapFeePercentage();\n }\n\n /// @inheritdoc IVaultExtension\n function getPoolRoleAccounts(\n address pool\n ) external view onlyVaultDelegateCall withRegisteredPool(pool) returns (PoolRoleAccounts memory) {\n return _poolRoleAccounts[pool];\n }\n\n /// @inheritdoc IVaultExtension\n function computeDynamicSwapFeePercentage(\n address pool,\n PoolSwapParams memory swapParams\n ) external view onlyVaultDelegateCall withInitializedPool(pool) returns (uint256 dynamicSwapFeePercentage) {\n return\n HooksConfigLib.callComputeDynamicSwapFeeHook(\n swapParams,\n pool,\n _poolConfigBits[pool].getStaticSwapFeePercentage(),\n _hooksContracts[pool]\n );\n }\n\n /// @inheritdoc IVaultExtension\n function getProtocolFeeController() external view onlyVaultDelegateCall returns (IProtocolFeeController) {\n return _protocolFeeController;\n }\n\n /*******************************************************************************\n Recovery Mode\n *******************************************************************************/\n\n /// @inheritdoc IVaultExtension\n function isPoolInRecoveryMode(\n address pool\n ) external view onlyVaultDelegateCall withRegisteredPool(pool) returns (bool) {\n return _isPoolInRecoveryMode(pool);\n }\n\n // Needed to avoid stack-too-deep.\n struct RecoveryLocals {\n IERC20[] tokens;\n uint256 swapFeePercentage;\n uint256 numTokens;\n uint256[] swapFeeAmountsRaw;\n uint256[] balancesRaw;\n bool chargeRoundtripFee;\n }\n\n /// @inheritdoc IVaultExtension\n function removeLiquidityRecovery(\n address pool,\n address from,\n uint256 exactBptAmountIn,\n uint256[] memory minAmountsOut\n )\n external\n onlyVaultDelegateCall\n onlyWhenUnlocked\n nonReentrant\n withInitializedPool(pool)\n onlyInRecoveryMode(pool)\n returns (uint256[] memory amountsOutRaw)\n {\n // Retrieve the mapping of tokens and their balances for the specified pool.\n mapping(uint256 tokenIndex => bytes32 packedTokenBalance) storage poolTokenBalances = _poolTokenBalances[pool];\n RecoveryLocals memory locals;\n\n // Initialize arrays to store tokens and balances based on the number of tokens in the pool.\n locals.tokens = _poolTokens[pool];\n locals.numTokens = locals.tokens.length;\n\n locals.balancesRaw = new uint256[](locals.numTokens);\n bytes32 packedBalances;\n\n for (uint256 i = 0; i < locals.numTokens; ++i) {\n locals.balancesRaw[i] = poolTokenBalances[i].getBalanceRaw();\n }\n\n amountsOutRaw = BasePoolMath.computeProportionalAmountsOut(\n locals.balancesRaw,\n _totalSupply(pool),\n exactBptAmountIn\n );\n\n // Normally we expect recovery mode withdrawals to be stand-alone operations. If there is a previous add\n // operation in this transaction, this might be an attack, so we apply the same guardrail used for regular\n // proportional withdrawals. To keep things simple, all we do is reduce the `amountsOut`, leaving the \"fee\"\n // tokens in the pool.\n locals.swapFeeAmountsRaw = new uint256[](locals.numTokens);\n locals.chargeRoundtripFee = _addLiquidityCalled().tGet(_sessionIdSlot().tload(), pool);\n\n // Don't make the call to retrieve the fee unless we have to.\n if (locals.chargeRoundtripFee) {\n locals.swapFeePercentage = _poolConfigBits[pool].getStaticSwapFeePercentage();\n }\n\n for (uint256 i = 0; i < locals.numTokens; ++i) {\n if (locals.chargeRoundtripFee) {\n locals.swapFeeAmountsRaw[i] = amountsOutRaw[i].mulUp(locals.swapFeePercentage);\n amountsOutRaw[i] -= locals.swapFeeAmountsRaw[i];\n }\n\n if (amountsOutRaw[i] < minAmountsOut[i]) {\n revert AmountOutBelowMin(locals.tokens[i], amountsOutRaw[i], minAmountsOut[i]);\n }\n\n // Credit token[i] for amountOut.\n _supplyCredit(locals.tokens[i], amountsOutRaw[i]);\n\n // Compute the new Pool balances. A Pool's token balance always decreases after an exit\n // (potentially by 0).\n locals.balancesRaw[i] -= amountsOutRaw[i];\n }\n\n // Store the new pool balances - raw only, since we don't have rates in Recovery Mode.\n // In Recovery Mode, raw and last live balances will get out of sync. This is corrected when the pool is taken\n // out of Recovery Mode.\n mapping(uint256 tokenIndex => bytes32 packedTokenBalance) storage poolBalances = _poolTokenBalances[pool];\n\n for (uint256 i = 0; i < locals.numTokens; ++i) {\n packedBalances = poolBalances[i];\n poolBalances[i] = packedBalances.setBalanceRaw(locals.balancesRaw[i]);\n }\n\n _spendAllowance(pool, from, msg.sender, exactBptAmountIn);\n\n if (_isQueryContext()) {\n // Increase `from` balance to ensure the burn function succeeds.\n _queryModeBalanceIncrease(pool, from, exactBptAmountIn);\n }\n // When removing liquidity, we must burn tokens concurrently with updating pool balances,\n // as the pool's math relies on totalSupply.\n //\n // Burning will be reverted if it results in a total supply less than the _MINIMUM_TOTAL_SUPPLY.\n _burn(pool, from, exactBptAmountIn);\n\n emit LiquidityRemoved(\n pool,\n from,\n RemoveLiquidityKind.PROPORTIONAL,\n _totalSupply(pool),\n amountsOutRaw,\n locals.swapFeeAmountsRaw\n );\n }\n\n /*******************************************************************************\n Queries\n *******************************************************************************/\n\n /// @dev Ensure that only static calls are made to the functions with this modifier.\n modifier query() {\n _setupQuery();\n _;\n }\n\n function _setupQuery() internal {\n if (EVMCallModeHelpers.isStaticCall() == false) {\n revert EVMCallModeHelpers.NotStaticCall();\n }\n\n bool _isQueryDisabled = _vaultStateBits.isQueryDisabled();\n if (_isQueryDisabled) {\n revert QueriesDisabled();\n }\n\n // Unlock so that `onlyWhenUnlocked` does not revert.\n _isUnlocked().tstore(true);\n }\n\n /// @inheritdoc IVaultExtension\n function quote(bytes calldata data) external query onlyVaultDelegateCall returns (bytes memory result) {\n // Forward the incoming call to the original sender of this transaction.\n return (msg.sender).functionCall(data);\n }\n\n /// @inheritdoc IVaultExtension\n function quoteAndRevert(bytes calldata data) external query onlyVaultDelegateCall {\n // Forward the incoming call to the original sender of this transaction.\n // solhint-disable-next-line avoid-low-level-calls\n (bool success, bytes memory result) = (msg.sender).call(data);\n if (success) {\n // This will only revert if result is empty and sender account has no code.\n Address.verifyCallResultFromTarget(msg.sender, success, result);\n // Send result in revert reason.\n revert RevertCodec.Result(result);\n } else {\n // If the call reverted with a spoofed `QuoteResult`, we catch it and bubble up a different reason.\n bytes4 errorSelector = RevertCodec.parseSelector(result);\n if (errorSelector == RevertCodec.Result.selector) {\n revert QuoteResultSpoofed();\n }\n\n // Otherwise we bubble up the original revert reason.\n RevertCodec.bubbleUpRevert(result);\n }\n }\n\n /// @inheritdoc IVaultExtension\n function isQueryDisabled() external view onlyVaultDelegateCall returns (bool) {\n return _vaultStateBits.isQueryDisabled();\n }\n\n /// @inheritdoc IVaultExtension\n function isQueryDisabledPermanently() external view onlyVaultDelegateCall returns (bool) {\n return _queriesDisabledPermanently;\n }\n\n /*******************************************************************************\n Authentication\n *******************************************************************************/\n\n /// @inheritdoc IVaultExtension\n function getAuthorizer() external view onlyVaultDelegateCall returns (IAuthorizer) {\n return _authorizer;\n }\n\n /*******************************************************************************\n Miscellaneous\n *******************************************************************************/\n\n /**\n * @inheritdoc Proxy\n * @dev Returns the VaultAdmin contract, to which fallback requests are forwarded.\n */\n function _implementation() internal view override returns (address) {\n return address(_vaultAdmin);\n }\n\n /// @inheritdoc IVaultExtension\n function emitAuxiliaryEvent(\n bytes32 eventKey,\n bytes calldata eventData\n ) external onlyVaultDelegateCall withRegisteredPool(msg.sender) {\n emit VaultAuxiliary(msg.sender, eventKey, eventData);\n }\n\n /*******************************************************************************\n Default handlers\n *******************************************************************************/\n\n receive() external payable {\n revert CannotReceiveEth();\n }\n\n // solhint-disable no-complex-fallback\n\n /**\n * @inheritdoc Proxy\n * @dev Override proxy implementation of `fallback` to disallow incoming ETH transfers.\n * This function actually returns whatever the VaultAdmin does when handling the request.\n */\n fallback() external payable override {\n if (msg.value > 0) {\n revert CannotReceiveEth();\n }\n\n _fallback();\n }\n}\n"},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\n/// @notice Contract that shares the modifier `onlyVault`.\ncontract VaultGuard {\n IVault internal immutable _vault;\n\n constructor(IVault vault) {\n _vault = vault;\n }\n\n modifier onlyVault() {\n _ensureOnlyVault();\n _;\n }\n\n function _ensureOnlyVault() private view {\n if (msg.sender != address(_vault)) {\n revert IVaultErrors.SenderIsNotVault(msg.sender);\n }\n }\n}\n"},"@balancer-labs/v3-vault/contracts/VaultStorage.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IProtocolFeeController } from \"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\";\nimport { IVaultExtension } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\";\nimport { IAuthorizer } from \"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\";\nimport { IHooks } from \"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\";\nimport \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { StorageSlotExtension } from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\";\nimport {\n TransientStorageHelpers,\n TokenDeltaMappingSlotType,\n UintToAddressToBooleanMappingSlot\n} from \"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\";\n\nimport { VaultStateBits } from \"./lib/VaultStateLib.sol\";\nimport { PoolConfigBits } from \"./lib/PoolConfigLib.sol\";\n\n// solhint-disable max-states-count\n\n/**\n * @notice Storage layout for the Vault.\n * @dev This contract has no code, but is inherited by all three Vault contracts. In order to ensure that *only* the\n * Vault contract's storage is actually used, calls to the extension contracts must be delegate calls made through the\n * main Vault.\n */\ncontract VaultStorage {\n using StorageSlotExtension for *;\n\n /***************************************************************************\n Constants\n ***************************************************************************/\n\n // Pools can have between two and eight tokens.\n uint256 internal constant _MIN_TOKENS = 2;\n // This maximum token count is also implicitly hard-coded in `PoolConfigLib` (through packing `tokenDecimalDiffs`).\n uint256 internal constant _MAX_TOKENS = 8;\n // Tokens with more than 18 decimals are not supported. Tokens must also implement `IERC20Metadata.decimals`.\n uint8 internal constant _MAX_TOKEN_DECIMALS = 18;\n\n // Maximum pause and buffer period durations.\n uint256 internal constant _MAX_PAUSE_WINDOW_DURATION = 365 days * 4;\n uint256 internal constant _MAX_BUFFER_PERIOD_DURATION = 180 days;\n\n // Minimum swap amount (applied to scaled18 values), enforced as a security measure to block potential\n // exploitation of rounding errors.\n // solhint-disable-next-line var-name-mixedcase\n uint256 internal immutable _MINIMUM_TRADE_AMOUNT;\n\n // Minimum given amount to wrap/unwrap (applied to native decimal values), to avoid rounding issues.\n // solhint-disable-next-line var-name-mixedcase\n uint256 internal immutable _MINIMUM_WRAP_AMOUNT;\n\n /***************************************************************************\n Transient Storage Declarations\n ***************************************************************************/\n\n // NOTE: If you use a constant, then it is simply replaced everywhere when this constant is used\n // by what is written after =. If you use immutable, the value is first calculated and\n // then replaced everywhere. That means that if a constant has executable variables,\n // they will be executed every time the constant is used.\n\n // solhint-disable var-name-mixedcase\n bytes32 private immutable _IS_UNLOCKED_SLOT = _calculateVaultStorageSlot(\"isUnlocked\");\n bytes32 private immutable _NON_ZERO_DELTA_COUNT_SLOT = _calculateVaultStorageSlot(\"nonZeroDeltaCount\");\n bytes32 private immutable _TOKEN_DELTAS_SLOT = _calculateVaultStorageSlot(\"tokenDeltas\");\n bytes32 private immutable _ADD_LIQUIDITY_CALLED_SLOT = _calculateVaultStorageSlot(\"addLiquidityCalled\");\n bytes32 private immutable _SESSION_ID_SLOT = _calculateVaultStorageSlot(\"sessionId\");\n // solhint-enable var-name-mixedcase\n\n /***************************************************************************\n Pool State\n ***************************************************************************/\n\n // Pool-specific configuration data (e.g., fees, pause window, configuration flags).\n mapping(address pool => PoolConfigBits poolConfig) internal _poolConfigBits;\n\n // Accounts assigned to specific roles; e.g., pauseManager, swapManager.\n mapping(address pool => PoolRoleAccounts roleAccounts) internal _poolRoleAccounts;\n\n // The hooks contracts associated with each pool.\n mapping(address pool => IHooks hooksContract) internal _hooksContracts;\n\n // The set of tokens associated with each pool.\n mapping(address pool => IERC20[] poolTokens) internal _poolTokens;\n\n // The token configuration of each Pool's tokens.\n mapping(address pool => mapping(IERC20 token => TokenInfo tokenInfo)) internal _poolTokenInfo;\n\n // Structure containing the current raw and \"last live\" scaled balances. Last live balances are used for\n // yield fee computation, and since these have rates applied, they are stored as scaled 18-decimal FP values.\n // Each value takes up half the storage slot (i.e., 128 bits).\n mapping(address pool => mapping(uint256 tokenIndex => bytes32 packedTokenBalance)) internal _poolTokenBalances;\n\n // Aggregate protocol swap/yield fees accumulated in the Vault for harvest.\n // Reusing PackedTokenBalance for the bytes32 values to save bytecode (despite differing semantics).\n // It's arbitrary which is which: we define raw = swap; derived = yield.\n mapping(address pool => mapping(IERC20 token => bytes32 packedFeeAmounts)) internal _aggregateFeeAmounts;\n\n /***************************************************************************\n Vault State\n ***************************************************************************/\n\n // The Pause Window and Buffer Period are timestamp-based: they should not be relied upon for sub-minute accuracy.\n uint32 internal immutable _vaultPauseWindowEndTime;\n uint32 internal immutable _vaultBufferPeriodEndTime;\n\n // Stored as a convenience, to avoid calculating it on every operation.\n uint32 internal immutable _vaultBufferPeriodDuration;\n\n // Bytes32 with pause flags for the Vault, buffers, and queries.\n VaultStateBits internal _vaultStateBits;\n\n /**\n * @dev Represents the total reserve of each ERC20 token. It should be always equal to `token.balanceOf(vault)`,\n * except during `unlock`.\n */\n mapping(IERC20 token => uint256 vaultBalance) internal _reservesOf;\n\n /// @dev Flag that prevents re-enabling queries.\n bool internal _queriesDisabledPermanently;\n\n /***************************************************************************\n Contract References\n ***************************************************************************/\n\n // Upgradeable contract in charge of setting permissions.\n IAuthorizer internal _authorizer;\n\n // Contract that receives aggregate swap and yield fees.\n IProtocolFeeController internal _protocolFeeController;\n\n /***************************************************************************\n ERC4626 Buffers\n ***************************************************************************/\n\n // Any ERC4626 token can trade using a buffer, which is like a pool, but internal to the Vault.\n // The registry key is the wrapped token address, so there can only ever be one buffer per wrapped token.\n // This means they are permissionless, and have no registration function.\n //\n // Anyone can add liquidity to a buffer\n\n // A buffer will only ever have two tokens: wrapped and underlying. We pack the wrapped and underlying balances\n // into a single bytes32, interpreted with the `PackedTokenBalance` library.\n\n // ERC4626 token address -> PackedTokenBalance, which stores both the underlying and wrapped token balances.\n // Reusing PackedTokenBalance to save bytecode (despite differing semantics).\n // It's arbitrary which is which: we define raw = underlying token; derived = wrapped token.\n mapping(IERC4626 wrappedToken => bytes32 packedTokenBalance) internal _bufferTokenBalances;\n\n // The LP balances for buffers. LP balances are not tokenized (i.e., represented by ERC20 tokens like BPT), but\n // rather accounted for within the Vault.\n\n // Track the internal \"BPT\" shares of each buffer depositor.\n mapping(IERC4626 wrappedToken => mapping(address user => uint256 userShares)) internal _bufferLpShares;\n\n // Total LP shares.\n mapping(IERC4626 wrappedToken => uint256 totalShares) internal _bufferTotalShares;\n\n // Prevents a malicious ERC4626 from changing the asset after the buffer was initialized.\n mapping(IERC4626 wrappedToken => address underlyingToken) internal _bufferAssets;\n\n /***************************************************************************\n Transient Storage Access\n ***************************************************************************/\n\n function _isUnlocked() internal view returns (StorageSlotExtension.BooleanSlotType slot) {\n return _IS_UNLOCKED_SLOT.asBoolean();\n }\n\n function _nonZeroDeltaCount() internal view returns (StorageSlotExtension.Uint256SlotType slot) {\n return _NON_ZERO_DELTA_COUNT_SLOT.asUint256();\n }\n\n function _tokenDeltas() internal view returns (TokenDeltaMappingSlotType slot) {\n return TokenDeltaMappingSlotType.wrap(_TOKEN_DELTAS_SLOT);\n }\n\n function _addLiquidityCalled() internal view returns (UintToAddressToBooleanMappingSlot slot) {\n return UintToAddressToBooleanMappingSlot.wrap(_ADD_LIQUIDITY_CALLED_SLOT);\n }\n\n function _sessionIdSlot() internal view returns (StorageSlotExtension.Uint256SlotType slot) {\n return _SESSION_ID_SLOT.asUint256();\n }\n\n function _calculateVaultStorageSlot(string memory key) private pure returns (bytes32) {\n return TransientStorageHelpers.calculateSlot(type(VaultStorage).name, key);\n }\n}\n"},"@openzeppelin/contracts/access/Ownable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n /**\n * @dev The caller account is not authorized to perform an operation.\n */\n error OwnableUnauthorizedAccount(address account);\n\n /**\n * @dev The owner is not a valid owner account. (eg. `address(0)`)\n */\n error OwnableInvalidOwner(address owner);\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n */\n constructor(address initialOwner) {\n if (initialOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n if (owner() != _msgSender()) {\n revert OwnableUnauthorizedAccount(_msgSender());\n }\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby disabling any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n if (newOwner == address(0)) {\n revert OwnableInvalidOwner(address(0));\n }\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n"},"@openzeppelin/contracts/access/Ownable2Step.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable2Step.sol)\n\npragma solidity ^0.8.20;\n\nimport {Ownable} from \"./Ownable.sol\";\n\n/**\n * @dev Contract module which provides access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is specified at deployment time in the constructor for `Ownable`. This\n * can later be changed with {transferOwnership} and {acceptOwnership}.\n *\n * This module is used through inheritance. It will make available all functions\n * from parent (Ownable).\n */\nabstract contract Ownable2Step is Ownable {\n address private _pendingOwner;\n\n event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Returns the address of the pending owner.\n */\n function pendingOwner() public view virtual returns (address) {\n return _pendingOwner;\n }\n\n /**\n * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual override onlyOwner {\n _pendingOwner = newOwner;\n emit OwnershipTransferStarted(owner(), newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual override {\n delete _pendingOwner;\n super._transferOwnership(newOwner);\n }\n\n /**\n * @dev The new owner accepts the ownership transfer.\n */\n function acceptOwnership() public virtual {\n address sender = _msgSender();\n if (pendingOwner() != sender) {\n revert OwnableUnauthorizedAccount(sender);\n }\n _transferOwnership(sender);\n }\n}\n"},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/draft-IERC6093.sol)\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard ERC20 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.\n */\ninterface IERC20Errors {\n /**\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param balance Current balance for the interacting account.\n * @param needed Minimum amount required to perform a transfer.\n */\n error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC20InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC20InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n * @param spender Address that may be allowed to operate on tokens without being their owner.\n * @param allowance Amount of tokens a `spender` is allowed to operate with.\n * @param needed Minimum amount required to perform a transfer.\n */\n error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC20InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n * @param spender Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC20InvalidSpender(address spender);\n}\n\n/**\n * @dev Standard ERC721 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.\n */\ninterface IERC721Errors {\n /**\n * @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.\n * Used in balance queries.\n * @param owner Address of the current owner of a token.\n */\n error ERC721InvalidOwner(address owner);\n\n /**\n * @dev Indicates a `tokenId` whose `owner` is the zero address.\n * @param tokenId Identifier number of a token.\n */\n error ERC721NonexistentToken(uint256 tokenId);\n\n /**\n * @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param tokenId Identifier number of a token.\n * @param owner Address of the current owner of a token.\n */\n error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC721InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC721InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n * @param tokenId Identifier number of a token.\n */\n error ERC721InsufficientApproval(address operator, uint256 tokenId);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC721InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC721InvalidOperator(address operator);\n}\n\n/**\n * @dev Standard ERC1155 Errors\n * Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.\n */\ninterface IERC1155Errors {\n /**\n * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n * @param balance Current balance for the interacting account.\n * @param needed Minimum amount required to perform a transfer.\n * @param tokenId Identifier number of a token.\n */\n error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);\n\n /**\n * @dev Indicates a failure with the token `sender`. Used in transfers.\n * @param sender Address whose tokens are being transferred.\n */\n error ERC1155InvalidSender(address sender);\n\n /**\n * @dev Indicates a failure with the token `receiver`. Used in transfers.\n * @param receiver Address to which tokens are being transferred.\n */\n error ERC1155InvalidReceiver(address receiver);\n\n /**\n * @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n * @param owner Address of the current owner of a token.\n */\n error ERC1155MissingApprovalForAll(address operator, address owner);\n\n /**\n * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n * @param approver Address initiating an approval operation.\n */\n error ERC1155InvalidApprover(address approver);\n\n /**\n * @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n * @param operator Address that may be allowed to operate on tokens without being their owner.\n */\n error ERC1155InvalidOperator(address operator);\n\n /**\n * @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n * Used in batch transfers.\n * @param idsLength Length of the array of token identifiers\n * @param valuesLength Length of the array of token amounts\n */\n error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);\n}\n"},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC4626.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../token/ERC20/IERC20.sol\";\nimport {IERC20Metadata} from \"../token/ERC20/extensions/IERC20Metadata.sol\";\n\n/**\n * @dev Interface of the ERC4626 \"Tokenized Vault Standard\", as defined in\n * https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\n */\ninterface IERC4626 is IERC20, IERC20Metadata {\n event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares);\n\n event Withdraw(\n address indexed sender,\n address indexed receiver,\n address indexed owner,\n uint256 assets,\n uint256 shares\n );\n\n /**\n * @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n *\n * - MUST be an ERC-20 token contract.\n * - MUST NOT revert.\n */\n function asset() external view returns (address assetTokenAddress);\n\n /**\n * @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n *\n * - SHOULD include any compounding that occurs from yield.\n * - MUST be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT revert.\n */\n function totalAssets() external view returns (uint256 totalManagedAssets);\n\n /**\n * @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n * scenario where all the conditions are met.\n *\n * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT show any variations depending on the caller.\n * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n * - MUST NOT revert.\n *\n * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n * from.\n */\n function convertToShares(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n * scenario where all the conditions are met.\n *\n * - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n * - MUST NOT show any variations depending on the caller.\n * - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n * - MUST NOT revert.\n *\n * NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n * “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n * from.\n */\n function convertToAssets(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n * through a deposit call.\n *\n * - MUST return a limited value if receiver is subject to some deposit limit.\n * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n * - MUST NOT revert.\n */\n function maxDeposit(address receiver) external view returns (uint256 maxAssets);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n * current on-chain conditions.\n *\n * - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n * call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n * in the same transaction.\n * - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n * deposit would be accepted, regardless if the user has enough tokens approved, etc.\n * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n */\n function previewDeposit(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n *\n * - MUST emit the Deposit event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * deposit execution, and are accounted for during deposit.\n * - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n * approving enough underlying tokens to the Vault contract, etc).\n *\n * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n */\n function deposit(uint256 assets, address receiver) external returns (uint256 shares);\n\n /**\n * @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n * - MUST return a limited value if receiver is subject to some mint limit.\n * - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n * - MUST NOT revert.\n */\n function maxMint(address receiver) external view returns (uint256 maxShares);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n * current on-chain conditions.\n *\n * - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n * in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n * same transaction.\n * - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n * would be accepted, regardless if the user has enough tokens approved, etc.\n * - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by minting.\n */\n function previewMint(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n *\n * - MUST emit the Deposit event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n * execution, and are accounted for during mint.\n * - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n * approving enough underlying tokens to the Vault contract, etc).\n *\n * NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token.\n */\n function mint(uint256 shares, address receiver) external returns (uint256 assets);\n\n /**\n * @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n * Vault, through a withdraw call.\n *\n * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n * - MUST NOT revert.\n */\n function maxWithdraw(address owner) external view returns (uint256 maxAssets);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n * given current on-chain conditions.\n *\n * - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n * call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n * called\n * in the same transaction.\n * - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n * the withdrawal would be accepted, regardless if the user has enough shares, etc.\n * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by depositing.\n */\n function previewWithdraw(uint256 assets) external view returns (uint256 shares);\n\n /**\n * @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n *\n * - MUST emit the Withdraw event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * withdraw execution, and are accounted for during withdraw.\n * - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n * not having enough shares, etc).\n *\n * Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n * Those methods should be performed separately.\n */\n function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares);\n\n /**\n * @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n * through a redeem call.\n *\n * - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n * - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n * - MUST NOT revert.\n */\n function maxRedeem(address owner) external view returns (uint256 maxShares);\n\n /**\n * @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\n * given current on-chain conditions.\n *\n * - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n * in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n * same transaction.\n * - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n * redemption would be accepted, regardless if the user has enough shares, etc.\n * - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n * - MUST NOT revert.\n *\n * NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n * share price or some other type of condition, meaning the depositor will lose assets by redeeming.\n */\n function previewRedeem(uint256 shares) external view returns (uint256 assets);\n\n /**\n * @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n *\n * - MUST emit the Withdraw event.\n * - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n * redeem execution, and are accounted for during redeem.\n * - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n * not having enough shares, etc).\n *\n * NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n * Those methods should be performed separately.\n */\n function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets);\n}\n"},"@openzeppelin/contracts/interfaces/IERC5267.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC5267.sol)\n\npragma solidity ^0.8.20;\n\ninterface IERC5267 {\n /**\n * @dev MAY be emitted to signal that the domain could have changed.\n */\n event EIP712DomainChanged();\n\n /**\n * @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\n * signature.\n */\n function eip712Domain()\n external\n view\n returns (\n bytes1 fields,\n string memory name,\n string memory version,\n uint256 chainId,\n address verifyingContract,\n bytes32 salt,\n uint256[] memory extensions\n );\n}\n"},"@openzeppelin/contracts/proxy/Proxy.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overridden so it returns the address to which the fallback\n * function and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback() external payable virtual {\n _fallback();\n }\n}\n"},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Metadata.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\n\n/**\n * @dev Interface for the optional metadata functions from the ERC20 standard.\n */\ninterface IERC20Metadata is IERC20 {\n /**\n * @dev Returns the name of the token.\n */\n function name() external view returns (string memory);\n\n /**\n * @dev Returns the symbol of the token.\n */\n function symbol() external view returns (string memory);\n\n /**\n * @dev Returns the decimals places of the token.\n */\n function decimals() external view returns (uint8);\n}\n"},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/extensions/IERC20Permit.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n *\n * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\n * need to send a transaction, and thus is not required to hold Ether at all.\n *\n * ==== Security Considerations\n *\n * There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\n * expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\n * considered as an intention to spend the allowance in any specific way. The second is that because permits have\n * built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\n * take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\n * generally recommended is:\n *\n * ```solidity\n * function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\n * try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\n * doThing(..., value);\n * }\n *\n * function doThing(..., uint256 value) public {\n * token.safeTransferFrom(msg.sender, address(this), value);\n * ...\n * }\n * ```\n *\n * Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\n * `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\n * {SafeERC20-safeTransferFrom}).\n *\n * Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\n * contracts should have entry points that don't rely on permit.\n */\ninterface IERC20Permit {\n /**\n * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\n * given ``owner``'s signed approval.\n *\n * IMPORTANT: The same issues {IERC20-approve} has related to transaction\n * ordering also apply here.\n *\n * Emits an {Approval} event.\n *\n * Requirements:\n *\n * - `spender` cannot be the zero address.\n * - `deadline` must be a timestamp in the future.\n * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\n * over the EIP712-formatted function arguments.\n * - the signature must use ``owner``'s current nonce (see {nonces}).\n *\n * For more information on the signature format, see the\n * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\n * section].\n *\n * CAUTION: See Security Considerations above.\n */\n function permit(\n address owner,\n address spender,\n uint256 value,\n uint256 deadline,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) external;\n\n /**\n * @dev Returns the current nonce for `owner`. This value must be\n * included whenever a signature is generated for {permit}.\n *\n * Every successful call to {permit} increases ``owner``'s nonce by one. This\n * prevents a signature from being used multiple times.\n */\n function nonces(address owner) external view returns (uint256);\n\n /**\n * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\n */\n // solhint-disable-next-line func-name-mixedcase\n function DOMAIN_SEPARATOR() external view returns (bytes32);\n}\n"},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n\n /**\n * @dev Returns the value of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the value of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves a `value` amount of tokens from the caller's account to `to`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address to, uint256 value) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n * caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 value) external returns (bool);\n\n /**\n * @dev Moves a `value` amount of tokens from `from` to `to` using the\n * allowance mechanism. `value` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(address from, address to, uint256 value) external returns (bool);\n}\n"},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20} from \"../IERC20.sol\";\nimport {IERC20Permit} from \"../extensions/IERC20Permit.sol\";\nimport {Address} from \"../../../utils/Address.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n using Address for address;\n\n /**\n * @dev An operation with an ERC20 token failed.\n */\n error SafeERC20FailedOperation(address token);\n\n /**\n * @dev Indicates a failed `decreaseAllowance` request.\n */\n error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);\n\n /**\n * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeTransfer(IERC20 token, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));\n }\n\n /**\n * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.\n */\n function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {\n _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));\n }\n\n /**\n * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful.\n */\n function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {\n uint256 oldAllowance = token.allowance(address(this), spender);\n forceApprove(token, spender, oldAllowance + value);\n }\n\n /**\n * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n * value, non-reverting calls are assumed to be successful.\n */\n function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {\n unchecked {\n uint256 currentAllowance = token.allowance(address(this), spender);\n if (currentAllowance < requestedDecrease) {\n revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);\n }\n forceApprove(token, spender, currentAllowance - requestedDecrease);\n }\n }\n\n /**\n * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n * to be set to zero before setting it to a non-zero value, such as USDT.\n */\n function forceApprove(IERC20 token, address spender, uint256 value) internal {\n bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));\n\n if (!_callOptionalReturnBool(token, approvalCall)) {\n _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));\n _callOptionalReturn(token, approvalCall);\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n */\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that\n // the target address contains contract code and also asserts for success in the low-level call.\n\n bytes memory returndata = address(token).functionCall(data);\n if (returndata.length != 0 && !abi.decode(returndata, (bool))) {\n revert SafeERC20FailedOperation(address(token));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n *\n * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead.\n */\n function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false\n // and not revert is the subcall reverts.\n\n (bool success, bytes memory returndata) = address(token).call(data);\n return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && address(token).code.length > 0;\n }\n}\n"},"@openzeppelin/contracts/utils/Address.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev The ETH balance of the account is not enough to perform the operation.\n */\n error AddressInsufficientBalance(address account);\n\n /**\n * @dev There's no code at `target` (it is not a contract).\n */\n error AddressEmptyCode(address target);\n\n /**\n * @dev A call to an address target failed. The target may have reverted.\n */\n error FailedInnerCall();\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n if (address(this).balance < amount) {\n revert AddressInsufficientBalance(address(this));\n }\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n if (!success) {\n revert FailedInnerCall();\n }\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason or custom error, it is bubbled\n * up by this function (like regular Solidity function calls). However, if\n * the call reverted with no returned reason, this function reverts with a\n * {FailedInnerCall} error.\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n */\n function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {\n if (address(this).balance < value) {\n revert AddressInsufficientBalance(address(this));\n }\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResultFromTarget(target, success, returndata);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an\n * unsuccessful call.\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata\n ) internal view returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n // only check if target is a contract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n if (returndata.length == 0 && target.code.length == 0) {\n revert AddressEmptyCode(target);\n }\n return returndata;\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n * revert reason or with a default {FailedInnerCall} error.\n */\n function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {\n if (!success) {\n _revert(returndata);\n } else {\n return returndata;\n }\n }\n\n /**\n * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}.\n */\n function _revert(bytes memory returndata) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert FailedInnerCall();\n }\n }\n}\n"},"@openzeppelin/contracts/utils/Context.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n"},"@openzeppelin/contracts/utils/Create2.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Create2.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\n * `CREATE2` can be used to compute in advance the address where a smart\n * contract will be deployed, which allows for interesting new mechanisms known\n * as 'counterfactual interactions'.\n *\n * See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\n * information.\n */\nlibrary Create2 {\n /**\n * @dev Not enough balance for performing a CREATE2 deploy.\n */\n error Create2InsufficientBalance(uint256 balance, uint256 needed);\n\n /**\n * @dev There's no code to deploy.\n */\n error Create2EmptyBytecode();\n\n /**\n * @dev The deployment failed.\n */\n error Create2FailedDeployment();\n\n /**\n * @dev Deploys a contract using `CREATE2`. The address where the contract\n * will be deployed can be known in advance via {computeAddress}.\n *\n * The bytecode for a contract can be obtained from Solidity with\n * `type(contractName).creationCode`.\n *\n * Requirements:\n *\n * - `bytecode` must not be empty.\n * - `salt` must have not been used for `bytecode` already.\n * - the factory must have a balance of at least `amount`.\n * - if `amount` is non-zero, `bytecode` must have a `payable` constructor.\n */\n function deploy(uint256 amount, bytes32 salt, bytes memory bytecode) internal returns (address addr) {\n if (address(this).balance < amount) {\n revert Create2InsufficientBalance(address(this).balance, amount);\n }\n if (bytecode.length == 0) {\n revert Create2EmptyBytecode();\n }\n /// @solidity memory-safe-assembly\n assembly {\n addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)\n }\n if (addr == address(0)) {\n revert Create2FailedDeployment();\n }\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\n * `bytecodeHash` or `salt` will result in a new destination address.\n */\n function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {\n return computeAddress(salt, bytecodeHash, address(this));\n }\n\n /**\n * @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\n * `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.\n */\n function computeAddress(bytes32 salt, bytes32 bytecodeHash, address deployer) internal pure returns (address addr) {\n /// @solidity memory-safe-assembly\n assembly {\n let ptr := mload(0x40) // Get free memory pointer\n\n // | | ↓ ptr ... ↓ ptr + 0x0B (start) ... ↓ ptr + 0x20 ... ↓ ptr + 0x40 ... |\n // |-------------------|---------------------------------------------------------------------------|\n // | bytecodeHash | CCCCCCCCCCCCC...CC |\n // | salt | BBBBBBBBBBBBB...BB |\n // | deployer | 000000...0000AAAAAAAAAAAAAAAAAAA...AA |\n // | 0xFF | FF |\n // |-------------------|---------------------------------------------------------------------------|\n // | memory | 000000...00FFAAAAAAAAAAAAAAAAAAA...AABBBBBBBBBBBBB...BBCCCCCCCCCCCCC...CC |\n // | keccak(start, 85) | ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ |\n\n mstore(add(ptr, 0x40), bytecodeHash)\n mstore(add(ptr, 0x20), salt)\n mstore(ptr, deployer) // Right-aligned with 12 preceding garbage bytes\n let start := add(ptr, 0x0b) // The hashed data starts at the final garbage byte which we will set to 0xff\n mstore8(start, 0xff)\n addr := keccak256(start, 85)\n }\n }\n}\n"},"@openzeppelin/contracts/utils/cryptography/ECDSA.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/ECDSA.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n *\n * These functions can be used to verify that a message was signed by the holder\n * of the private keys of a given address.\n */\nlibrary ECDSA {\n enum RecoverError {\n NoError,\n InvalidSignature,\n InvalidSignatureLength,\n InvalidSignatureS\n }\n\n /**\n * @dev The signature derives the `address(0)`.\n */\n error ECDSAInvalidSignature();\n\n /**\n * @dev The signature has an invalid length.\n */\n error ECDSAInvalidSignatureLength(uint256 length);\n\n /**\n * @dev The signature has an S value that is in the upper half order.\n */\n error ECDSAInvalidSignatureS(bytes32 s);\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not\n * return address(0) without also returning an error description. Errors are documented using an enum (error type)\n * and a bytes32 providing additional information about the error.\n *\n * If no error is returned, then the address can be used for verification purposes.\n *\n * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\n *\n * Documentation for signature generation:\n * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]\n */\n function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError, bytes32) {\n if (signature.length == 65) {\n bytes32 r;\n bytes32 s;\n uint8 v;\n // ecrecover takes the signature parameters, and the only way to get them\n // currently is to use assembly.\n /// @solidity memory-safe-assembly\n assembly {\n r := mload(add(signature, 0x20))\n s := mload(add(signature, 0x40))\n v := byte(0, mload(add(signature, 0x60)))\n }\n return tryRecover(hash, v, r, s);\n } else {\n return (address(0), RecoverError.InvalidSignatureLength, bytes32(signature.length));\n }\n }\n\n /**\n * @dev Returns the address that signed a hashed message (`hash`) with\n * `signature`. This address can then be used for verification purposes.\n *\n * The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n * this function rejects them by requiring the `s` value to be in the lower\n * half order, and the `v` value to be either 27 or 28.\n *\n * IMPORTANT: `hash` _must_ be the result of a hash operation for the\n * verification to be secure: it is possible to craft signatures that\n * recover to arbitrary addresses for non-hashed data. A safe way to ensure\n * this is by receiving a hash of the original message (which may otherwise\n * be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\n */\n function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, signature);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n *\n * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]\n */\n function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError, bytes32) {\n unchecked {\n bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);\n // We do not check for an overflow here since the shift operation results in 0 or 1.\n uint8 v = uint8((uint256(vs) >> 255) + 27);\n return tryRecover(hash, v, r, s);\n }\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately.\n */\n function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, r, vs);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function tryRecover(\n bytes32 hash,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) internal pure returns (address, RecoverError, bytes32) {\n // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature\n // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines\n // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most\n // signatures from current libraries generate a unique signature with an s-value in the lower half order.\n //\n // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value\n // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or\n // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept\n // these malleable signatures as well.\n if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {\n return (address(0), RecoverError.InvalidSignatureS, s);\n }\n\n // If the signature is valid (and not malleable), return the signer address\n address signer = ecrecover(hash, v, r, s);\n if (signer == address(0)) {\n return (address(0), RecoverError.InvalidSignature, bytes32(0));\n }\n\n return (signer, RecoverError.NoError, bytes32(0));\n }\n\n /**\n * @dev Overload of {ECDSA-recover} that receives the `v`,\n * `r` and `s` signature fields separately.\n */\n function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {\n (address recovered, RecoverError error, bytes32 errorArg) = tryRecover(hash, v, r, s);\n _throwError(error, errorArg);\n return recovered;\n }\n\n /**\n * @dev Optionally reverts with the corresponding custom error according to the `error` argument provided.\n */\n function _throwError(RecoverError error, bytes32 errorArg) private pure {\n if (error == RecoverError.NoError) {\n return; // no error: do nothing\n } else if (error == RecoverError.InvalidSignature) {\n revert ECDSAInvalidSignature();\n } else if (error == RecoverError.InvalidSignatureLength) {\n revert ECDSAInvalidSignatureLength(uint256(errorArg));\n } else if (error == RecoverError.InvalidSignatureS) {\n revert ECDSAInvalidSignatureS(errorArg);\n }\n }\n}\n"},"@openzeppelin/contracts/utils/cryptography/EIP712.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/EIP712.sol)\n\npragma solidity ^0.8.20;\n\nimport {MessageHashUtils} from \"./MessageHashUtils.sol\";\nimport {ShortStrings, ShortString} from \"../ShortStrings.sol\";\nimport {IERC5267} from \"../../interfaces/IERC5267.sol\";\n\n/**\n * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n *\n * The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose\n * encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract\n * does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to\n * produce the hash of their typed data using a combination of `abi.encode` and `keccak256`.\n *\n * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n * ({_hashTypedDataV4}).\n *\n * The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n * the chain id to protect against replay attacks on an eventual fork of the chain.\n *\n * NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n *\n * NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\n * separator of the implementation contract. This will cause the {_domainSeparatorV4} function to always rebuild the\n * separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\n *\n * @custom:oz-upgrades-unsafe-allow state-variable-immutable\n */\nabstract contract EIP712 is IERC5267 {\n using ShortStrings for *;\n\n bytes32 private constant TYPE_HASH =\n keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\");\n\n // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to\n // invalidate the cached domain separator if the chain id changes.\n bytes32 private immutable _cachedDomainSeparator;\n uint256 private immutable _cachedChainId;\n address private immutable _cachedThis;\n\n bytes32 private immutable _hashedName;\n bytes32 private immutable _hashedVersion;\n\n ShortString private immutable _name;\n ShortString private immutable _version;\n string private _nameFallback;\n string private _versionFallback;\n\n /**\n * @dev Initializes the domain separator and parameter caches.\n *\n * The meaning of `name` and `version` is specified in\n * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n *\n * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n * - `version`: the current major version of the signing domain.\n *\n * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n * contract upgrade].\n */\n constructor(string memory name, string memory version) {\n _name = name.toShortStringWithFallback(_nameFallback);\n _version = version.toShortStringWithFallback(_versionFallback);\n _hashedName = keccak256(bytes(name));\n _hashedVersion = keccak256(bytes(version));\n\n _cachedChainId = block.chainid;\n _cachedDomainSeparator = _buildDomainSeparator();\n _cachedThis = address(this);\n }\n\n /**\n * @dev Returns the domain separator for the current chain.\n */\n function _domainSeparatorV4() internal view returns (bytes32) {\n if (address(this) == _cachedThis && block.chainid == _cachedChainId) {\n return _cachedDomainSeparator;\n } else {\n return _buildDomainSeparator();\n }\n }\n\n function _buildDomainSeparator() private view returns (bytes32) {\n return keccak256(abi.encode(TYPE_HASH, _hashedName, _hashedVersion, block.chainid, address(this)));\n }\n\n /**\n * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n * function returns the hash of the fully encoded EIP712 message for this domain.\n *\n * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n *\n * ```solidity\n * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n * keccak256(\"Mail(address to,string contents)\"),\n * mailTo,\n * keccak256(bytes(mailContents))\n * )));\n * address signer = ECDSA.recover(digest, signature);\n * ```\n */\n function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {\n return MessageHashUtils.toTypedDataHash(_domainSeparatorV4(), structHash);\n }\n\n /**\n * @dev See {IERC-5267}.\n */\n function eip712Domain()\n public\n view\n virtual\n returns (\n bytes1 fields,\n string memory name,\n string memory version,\n uint256 chainId,\n address verifyingContract,\n bytes32 salt,\n uint256[] memory extensions\n )\n {\n return (\n hex\"0f\", // 01111\n _EIP712Name(),\n _EIP712Version(),\n block.chainid,\n address(this),\n bytes32(0),\n new uint256[](0)\n );\n }\n\n /**\n * @dev The name parameter for the EIP712 domain.\n *\n * NOTE: By default this function reads _name which is an immutable value.\n * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\n */\n // solhint-disable-next-line func-name-mixedcase\n function _EIP712Name() internal view returns (string memory) {\n return _name.toStringWithFallback(_nameFallback);\n }\n\n /**\n * @dev The version parameter for the EIP712 domain.\n *\n * NOTE: By default this function reads _version which is an immutable value.\n * It only reads from storage if necessary (in case the value is too large to fit in a ShortString).\n */\n // solhint-disable-next-line func-name-mixedcase\n function _EIP712Version() internal view returns (string memory) {\n return _version.toStringWithFallback(_versionFallback);\n }\n}\n"},"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/MessageHashUtils.sol)\n\npragma solidity ^0.8.20;\n\nimport {Strings} from \"../Strings.sol\";\n\n/**\n * @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.\n *\n * The library provides methods for generating a hash of a message that conforms to the\n * https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]\n * specifications.\n */\nlibrary MessageHashUtils {\n /**\n * @dev Returns the keccak256 digest of an EIP-191 signed data with version\n * `0x45` (`personal_sign` messages).\n *\n * The digest is calculated by prefixing a bytes32 `messageHash` with\n * `\"\\x19Ethereum Signed Message:\\n32\"` and hashing the result. It corresponds with the\n * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\n *\n * NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with\n * keccak256, although any bytes32 value can be safely used because the final digest will\n * be re-hashed.\n *\n * See {ECDSA-recover}.\n */\n function toEthSignedMessageHash(bytes32 messageHash) internal pure returns (bytes32 digest) {\n /// @solidity memory-safe-assembly\n assembly {\n mstore(0x00, \"\\x19Ethereum Signed Message:\\n32\") // 32 is the bytes-length of messageHash\n mstore(0x1c, messageHash) // 0x1c (28) is the length of the prefix\n digest := keccak256(0x00, 0x3c) // 0x3c is the length of the prefix (0x1c) + messageHash (0x20)\n }\n }\n\n /**\n * @dev Returns the keccak256 digest of an EIP-191 signed data with version\n * `0x45` (`personal_sign` messages).\n *\n * The digest is calculated by prefixing an arbitrary `message` with\n * `\"\\x19Ethereum Signed Message:\\n\" + len(message)` and hashing the result. It corresponds with the\n * hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\n *\n * See {ECDSA-recover}.\n */\n function toEthSignedMessageHash(bytes memory message) internal pure returns (bytes32) {\n return\n keccak256(bytes.concat(\"\\x19Ethereum Signed Message:\\n\", bytes(Strings.toString(message.length)), message));\n }\n\n /**\n * @dev Returns the keccak256 digest of an EIP-191 signed data with version\n * `0x00` (data with intended validator).\n *\n * The digest is calculated by prefixing an arbitrary `data` with `\"\\x19\\x00\"` and the intended\n * `validator` address. Then hashing the result.\n *\n * See {ECDSA-recover}.\n */\n function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) {\n return keccak256(abi.encodePacked(hex\"19_00\", validator, data));\n }\n\n /**\n * @dev Returns the keccak256 digest of an EIP-712 typed data (EIP-191 version `0x01`).\n *\n * The digest is calculated from a `domainSeparator` and a `structHash`, by prefixing them with\n * `\\x19\\x01` and hashing the result. It corresponds to the hash signed by the\n * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] JSON-RPC method as part of EIP-712.\n *\n * See {ECDSA-recover}.\n */\n function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 digest) {\n /// @solidity memory-safe-assembly\n assembly {\n let ptr := mload(0x40)\n mstore(ptr, hex\"19_01\")\n mstore(add(ptr, 0x02), domainSeparator)\n mstore(add(ptr, 0x22), structHash)\n digest := keccak256(ptr, 0x42)\n }\n }\n}\n"},"@openzeppelin/contracts/utils/introspection/ERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC165} from \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n"},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n"},"@openzeppelin/contracts/utils/math/Math.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n /**\n * @dev Muldiv operation overflow.\n */\n error MathOverflowedMulDiv();\n\n enum Rounding {\n Floor, // Toward negative infinity\n Ceil, // Toward positive infinity\n Trunc, // Toward zero\n Expand // Away from zero\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, with an overflow flag.\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n }\n\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds towards infinity instead\n * of rounding towards zero.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n if (b == 0) {\n // Guarantee the same behavior as in a regular Solidity division.\n return a / b;\n }\n\n // (a + b - 1) / b can overflow on addition, so we distribute.\n return a == 0 ? 0 : (a - 1) / b + 1;\n }\n\n /**\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\n * denominator == 0.\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\n * Uniswap Labs also under MIT license.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {\n unchecked {\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n // variables such that product = prod1 * 2^256 + prod0.\n uint256 prod0 = x * y; // Least significant 256 bits of the product\n uint256 prod1; // Most significant 256 bits of the product\n assembly {\n let mm := mulmod(x, y, not(0))\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n }\n\n // Handle non-overflow cases, 256 by 256 division.\n if (prod1 == 0) {\n // Solidity will revert if denominator == 0, unlike the div opcode on its own.\n // The surrounding unchecked block does not change this fact.\n // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.\n return prod0 / denominator;\n }\n\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\n if (denominator <= prod1) {\n revert MathOverflowedMulDiv();\n }\n\n ///////////////////////////////////////////////\n // 512 by 256 division.\n ///////////////////////////////////////////////\n\n // Make division exact by subtracting the remainder from [prod1 prod0].\n uint256 remainder;\n assembly {\n // Compute remainder using mulmod.\n remainder := mulmod(x, y, denominator)\n\n // Subtract 256 bit number from 512 bit number.\n prod1 := sub(prod1, gt(remainder, prod0))\n prod0 := sub(prod0, remainder)\n }\n\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator.\n // Always >= 1. See https://cs.stackexchange.com/q/138556/92363.\n\n uint256 twos = denominator & (0 - denominator);\n assembly {\n // Divide denominator by twos.\n denominator := div(denominator, twos)\n\n // Divide [prod1 prod0] by twos.\n prod0 := div(prod0, twos)\n\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\n twos := add(div(sub(0, twos), twos), 1)\n }\n\n // Shift in bits from prod1 into prod0.\n prod0 |= prod1 * twos;\n\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\n // four bits. That is, denominator * inv = 1 mod 2^4.\n uint256 inverse = (3 * denominator) ^ 2;\n\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also\n // works in modular arithmetic, doubling the correct bits in each step.\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\n\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\n // is no longer required.\n result = prod0 * inverse;\n return result;\n }\n }\n\n /**\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\n */\n function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {\n uint256 result = mulDiv(x, y, denominator);\n if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {\n result += 1;\n }\n return result;\n }\n\n /**\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\n * towards zero.\n *\n * Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11).\n */\n function sqrt(uint256 a) internal pure returns (uint256) {\n if (a == 0) {\n return 0;\n }\n\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\n //\n // We know that the \"msb\" (most significant bit) of our target number `a` is a power of 2 such that we have\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\n //\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\n // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\n // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\n //\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\n uint256 result = 1 << (log2(a) >> 1);\n\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\n // into the expected uint128 result.\n unchecked {\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n return min(result, a / result);\n }\n }\n\n /**\n * @notice Calculates sqrt(a), following the selected rounding direction.\n */\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = sqrt(a);\n return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 2 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n */\n function log2(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 128;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 64;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 32;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 16;\n }\n if (value >> 8 > 0) {\n value >>= 8;\n result += 8;\n }\n if (value >> 4 > 0) {\n value >>= 4;\n result += 4;\n }\n if (value >> 2 > 0) {\n value >>= 2;\n result += 2;\n }\n if (value >> 1 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log2(value);\n return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 10 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n */\n function log10(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >= 10 ** 64) {\n value /= 10 ** 64;\n result += 64;\n }\n if (value >= 10 ** 32) {\n value /= 10 ** 32;\n result += 32;\n }\n if (value >= 10 ** 16) {\n value /= 10 ** 16;\n result += 16;\n }\n if (value >= 10 ** 8) {\n value /= 10 ** 8;\n result += 8;\n }\n if (value >= 10 ** 4) {\n value /= 10 ** 4;\n result += 4;\n }\n if (value >= 10 ** 2) {\n value /= 10 ** 2;\n result += 2;\n }\n if (value >= 10 ** 1) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log10(value);\n return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 256 of a positive value rounded towards zero.\n * Returns 0 if given 0.\n *\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n */\n function log256(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 16;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 8;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 4;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 2;\n }\n if (value >> 8 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log256(value);\n return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers.\n */\n function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {\n return uint8(rounding) % 2 == 1;\n }\n}\n"},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SafeCast.sol)\n// This file was procedurally generated from scripts/generate/templates/SafeCast.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\n * checks.\n *\n * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n * easily result in undesired exploitation or bugs, since developers usually\n * assume that overflows raise errors. `SafeCast` restores this intuition by\n * reverting the transaction when such an operation overflows.\n *\n * Using this library instead of the unchecked operations eliminates an entire\n * class of bugs, so it's recommended to use it always.\n */\nlibrary SafeCast {\n /**\n * @dev Value doesn't fit in an uint of `bits` size.\n */\n error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value);\n\n /**\n * @dev An int value doesn't fit in an uint of `bits` size.\n */\n error SafeCastOverflowedIntToUint(int256 value);\n\n /**\n * @dev Value doesn't fit in an int of `bits` size.\n */\n error SafeCastOverflowedIntDowncast(uint8 bits, int256 value);\n\n /**\n * @dev An uint value doesn't fit in an int of `bits` size.\n */\n error SafeCastOverflowedUintToInt(uint256 value);\n\n /**\n * @dev Returns the downcasted uint248 from uint256, reverting on\n * overflow (when the input is greater than largest uint248).\n *\n * Counterpart to Solidity's `uint248` operator.\n *\n * Requirements:\n *\n * - input must fit into 248 bits\n */\n function toUint248(uint256 value) internal pure returns (uint248) {\n if (value > type(uint248).max) {\n revert SafeCastOverflowedUintDowncast(248, value);\n }\n return uint248(value);\n }\n\n /**\n * @dev Returns the downcasted uint240 from uint256, reverting on\n * overflow (when the input is greater than largest uint240).\n *\n * Counterpart to Solidity's `uint240` operator.\n *\n * Requirements:\n *\n * - input must fit into 240 bits\n */\n function toUint240(uint256 value) internal pure returns (uint240) {\n if (value > type(uint240).max) {\n revert SafeCastOverflowedUintDowncast(240, value);\n }\n return uint240(value);\n }\n\n /**\n * @dev Returns the downcasted uint232 from uint256, reverting on\n * overflow (when the input is greater than largest uint232).\n *\n * Counterpart to Solidity's `uint232` operator.\n *\n * Requirements:\n *\n * - input must fit into 232 bits\n */\n function toUint232(uint256 value) internal pure returns (uint232) {\n if (value > type(uint232).max) {\n revert SafeCastOverflowedUintDowncast(232, value);\n }\n return uint232(value);\n }\n\n /**\n * @dev Returns the downcasted uint224 from uint256, reverting on\n * overflow (when the input is greater than largest uint224).\n *\n * Counterpart to Solidity's `uint224` operator.\n *\n * Requirements:\n *\n * - input must fit into 224 bits\n */\n function toUint224(uint256 value) internal pure returns (uint224) {\n if (value > type(uint224).max) {\n revert SafeCastOverflowedUintDowncast(224, value);\n }\n return uint224(value);\n }\n\n /**\n * @dev Returns the downcasted uint216 from uint256, reverting on\n * overflow (when the input is greater than largest uint216).\n *\n * Counterpart to Solidity's `uint216` operator.\n *\n * Requirements:\n *\n * - input must fit into 216 bits\n */\n function toUint216(uint256 value) internal pure returns (uint216) {\n if (value > type(uint216).max) {\n revert SafeCastOverflowedUintDowncast(216, value);\n }\n return uint216(value);\n }\n\n /**\n * @dev Returns the downcasted uint208 from uint256, reverting on\n * overflow (when the input is greater than largest uint208).\n *\n * Counterpart to Solidity's `uint208` operator.\n *\n * Requirements:\n *\n * - input must fit into 208 bits\n */\n function toUint208(uint256 value) internal pure returns (uint208) {\n if (value > type(uint208).max) {\n revert SafeCastOverflowedUintDowncast(208, value);\n }\n return uint208(value);\n }\n\n /**\n * @dev Returns the downcasted uint200 from uint256, reverting on\n * overflow (when the input is greater than largest uint200).\n *\n * Counterpart to Solidity's `uint200` operator.\n *\n * Requirements:\n *\n * - input must fit into 200 bits\n */\n function toUint200(uint256 value) internal pure returns (uint200) {\n if (value > type(uint200).max) {\n revert SafeCastOverflowedUintDowncast(200, value);\n }\n return uint200(value);\n }\n\n /**\n * @dev Returns the downcasted uint192 from uint256, reverting on\n * overflow (when the input is greater than largest uint192).\n *\n * Counterpart to Solidity's `uint192` operator.\n *\n * Requirements:\n *\n * - input must fit into 192 bits\n */\n function toUint192(uint256 value) internal pure returns (uint192) {\n if (value > type(uint192).max) {\n revert SafeCastOverflowedUintDowncast(192, value);\n }\n return uint192(value);\n }\n\n /**\n * @dev Returns the downcasted uint184 from uint256, reverting on\n * overflow (when the input is greater than largest uint184).\n *\n * Counterpart to Solidity's `uint184` operator.\n *\n * Requirements:\n *\n * - input must fit into 184 bits\n */\n function toUint184(uint256 value) internal pure returns (uint184) {\n if (value > type(uint184).max) {\n revert SafeCastOverflowedUintDowncast(184, value);\n }\n return uint184(value);\n }\n\n /**\n * @dev Returns the downcasted uint176 from uint256, reverting on\n * overflow (when the input is greater than largest uint176).\n *\n * Counterpart to Solidity's `uint176` operator.\n *\n * Requirements:\n *\n * - input must fit into 176 bits\n */\n function toUint176(uint256 value) internal pure returns (uint176) {\n if (value > type(uint176).max) {\n revert SafeCastOverflowedUintDowncast(176, value);\n }\n return uint176(value);\n }\n\n /**\n * @dev Returns the downcasted uint168 from uint256, reverting on\n * overflow (when the input is greater than largest uint168).\n *\n * Counterpart to Solidity's `uint168` operator.\n *\n * Requirements:\n *\n * - input must fit into 168 bits\n */\n function toUint168(uint256 value) internal pure returns (uint168) {\n if (value > type(uint168).max) {\n revert SafeCastOverflowedUintDowncast(168, value);\n }\n return uint168(value);\n }\n\n /**\n * @dev Returns the downcasted uint160 from uint256, reverting on\n * overflow (when the input is greater than largest uint160).\n *\n * Counterpart to Solidity's `uint160` operator.\n *\n * Requirements:\n *\n * - input must fit into 160 bits\n */\n function toUint160(uint256 value) internal pure returns (uint160) {\n if (value > type(uint160).max) {\n revert SafeCastOverflowedUintDowncast(160, value);\n }\n return uint160(value);\n }\n\n /**\n * @dev Returns the downcasted uint152 from uint256, reverting on\n * overflow (when the input is greater than largest uint152).\n *\n * Counterpart to Solidity's `uint152` operator.\n *\n * Requirements:\n *\n * - input must fit into 152 bits\n */\n function toUint152(uint256 value) internal pure returns (uint152) {\n if (value > type(uint152).max) {\n revert SafeCastOverflowedUintDowncast(152, value);\n }\n return uint152(value);\n }\n\n /**\n * @dev Returns the downcasted uint144 from uint256, reverting on\n * overflow (when the input is greater than largest uint144).\n *\n * Counterpart to Solidity's `uint144` operator.\n *\n * Requirements:\n *\n * - input must fit into 144 bits\n */\n function toUint144(uint256 value) internal pure returns (uint144) {\n if (value > type(uint144).max) {\n revert SafeCastOverflowedUintDowncast(144, value);\n }\n return uint144(value);\n }\n\n /**\n * @dev Returns the downcasted uint136 from uint256, reverting on\n * overflow (when the input is greater than largest uint136).\n *\n * Counterpart to Solidity's `uint136` operator.\n *\n * Requirements:\n *\n * - input must fit into 136 bits\n */\n function toUint136(uint256 value) internal pure returns (uint136) {\n if (value > type(uint136).max) {\n revert SafeCastOverflowedUintDowncast(136, value);\n }\n return uint136(value);\n }\n\n /**\n * @dev Returns the downcasted uint128 from uint256, reverting on\n * overflow (when the input is greater than largest uint128).\n *\n * Counterpart to Solidity's `uint128` operator.\n *\n * Requirements:\n *\n * - input must fit into 128 bits\n */\n function toUint128(uint256 value) internal pure returns (uint128) {\n if (value > type(uint128).max) {\n revert SafeCastOverflowedUintDowncast(128, value);\n }\n return uint128(value);\n }\n\n /**\n * @dev Returns the downcasted uint120 from uint256, reverting on\n * overflow (when the input is greater than largest uint120).\n *\n * Counterpart to Solidity's `uint120` operator.\n *\n * Requirements:\n *\n * - input must fit into 120 bits\n */\n function toUint120(uint256 value) internal pure returns (uint120) {\n if (value > type(uint120).max) {\n revert SafeCastOverflowedUintDowncast(120, value);\n }\n return uint120(value);\n }\n\n /**\n * @dev Returns the downcasted uint112 from uint256, reverting on\n * overflow (when the input is greater than largest uint112).\n *\n * Counterpart to Solidity's `uint112` operator.\n *\n * Requirements:\n *\n * - input must fit into 112 bits\n */\n function toUint112(uint256 value) internal pure returns (uint112) {\n if (value > type(uint112).max) {\n revert SafeCastOverflowedUintDowncast(112, value);\n }\n return uint112(value);\n }\n\n /**\n * @dev Returns the downcasted uint104 from uint256, reverting on\n * overflow (when the input is greater than largest uint104).\n *\n * Counterpart to Solidity's `uint104` operator.\n *\n * Requirements:\n *\n * - input must fit into 104 bits\n */\n function toUint104(uint256 value) internal pure returns (uint104) {\n if (value > type(uint104).max) {\n revert SafeCastOverflowedUintDowncast(104, value);\n }\n return uint104(value);\n }\n\n /**\n * @dev Returns the downcasted uint96 from uint256, reverting on\n * overflow (when the input is greater than largest uint96).\n *\n * Counterpart to Solidity's `uint96` operator.\n *\n * Requirements:\n *\n * - input must fit into 96 bits\n */\n function toUint96(uint256 value) internal pure returns (uint96) {\n if (value > type(uint96).max) {\n revert SafeCastOverflowedUintDowncast(96, value);\n }\n return uint96(value);\n }\n\n /**\n * @dev Returns the downcasted uint88 from uint256, reverting on\n * overflow (when the input is greater than largest uint88).\n *\n * Counterpart to Solidity's `uint88` operator.\n *\n * Requirements:\n *\n * - input must fit into 88 bits\n */\n function toUint88(uint256 value) internal pure returns (uint88) {\n if (value > type(uint88).max) {\n revert SafeCastOverflowedUintDowncast(88, value);\n }\n return uint88(value);\n }\n\n /**\n * @dev Returns the downcasted uint80 from uint256, reverting on\n * overflow (when the input is greater than largest uint80).\n *\n * Counterpart to Solidity's `uint80` operator.\n *\n * Requirements:\n *\n * - input must fit into 80 bits\n */\n function toUint80(uint256 value) internal pure returns (uint80) {\n if (value > type(uint80).max) {\n revert SafeCastOverflowedUintDowncast(80, value);\n }\n return uint80(value);\n }\n\n /**\n * @dev Returns the downcasted uint72 from uint256, reverting on\n * overflow (when the input is greater than largest uint72).\n *\n * Counterpart to Solidity's `uint72` operator.\n *\n * Requirements:\n *\n * - input must fit into 72 bits\n */\n function toUint72(uint256 value) internal pure returns (uint72) {\n if (value > type(uint72).max) {\n revert SafeCastOverflowedUintDowncast(72, value);\n }\n return uint72(value);\n }\n\n /**\n * @dev Returns the downcasted uint64 from uint256, reverting on\n * overflow (when the input is greater than largest uint64).\n *\n * Counterpart to Solidity's `uint64` operator.\n *\n * Requirements:\n *\n * - input must fit into 64 bits\n */\n function toUint64(uint256 value) internal pure returns (uint64) {\n if (value > type(uint64).max) {\n revert SafeCastOverflowedUintDowncast(64, value);\n }\n return uint64(value);\n }\n\n /**\n * @dev Returns the downcasted uint56 from uint256, reverting on\n * overflow (when the input is greater than largest uint56).\n *\n * Counterpart to Solidity's `uint56` operator.\n *\n * Requirements:\n *\n * - input must fit into 56 bits\n */\n function toUint56(uint256 value) internal pure returns (uint56) {\n if (value > type(uint56).max) {\n revert SafeCastOverflowedUintDowncast(56, value);\n }\n return uint56(value);\n }\n\n /**\n * @dev Returns the downcasted uint48 from uint256, reverting on\n * overflow (when the input is greater than largest uint48).\n *\n * Counterpart to Solidity's `uint48` operator.\n *\n * Requirements:\n *\n * - input must fit into 48 bits\n */\n function toUint48(uint256 value) internal pure returns (uint48) {\n if (value > type(uint48).max) {\n revert SafeCastOverflowedUintDowncast(48, value);\n }\n return uint48(value);\n }\n\n /**\n * @dev Returns the downcasted uint40 from uint256, reverting on\n * overflow (when the input is greater than largest uint40).\n *\n * Counterpart to Solidity's `uint40` operator.\n *\n * Requirements:\n *\n * - input must fit into 40 bits\n */\n function toUint40(uint256 value) internal pure returns (uint40) {\n if (value > type(uint40).max) {\n revert SafeCastOverflowedUintDowncast(40, value);\n }\n return uint40(value);\n }\n\n /**\n * @dev Returns the downcasted uint32 from uint256, reverting on\n * overflow (when the input is greater than largest uint32).\n *\n * Counterpart to Solidity's `uint32` operator.\n *\n * Requirements:\n *\n * - input must fit into 32 bits\n */\n function toUint32(uint256 value) internal pure returns (uint32) {\n if (value > type(uint32).max) {\n revert SafeCastOverflowedUintDowncast(32, value);\n }\n return uint32(value);\n }\n\n /**\n * @dev Returns the downcasted uint24 from uint256, reverting on\n * overflow (when the input is greater than largest uint24).\n *\n * Counterpart to Solidity's `uint24` operator.\n *\n * Requirements:\n *\n * - input must fit into 24 bits\n */\n function toUint24(uint256 value) internal pure returns (uint24) {\n if (value > type(uint24).max) {\n revert SafeCastOverflowedUintDowncast(24, value);\n }\n return uint24(value);\n }\n\n /**\n * @dev Returns the downcasted uint16 from uint256, reverting on\n * overflow (when the input is greater than largest uint16).\n *\n * Counterpart to Solidity's `uint16` operator.\n *\n * Requirements:\n *\n * - input must fit into 16 bits\n */\n function toUint16(uint256 value) internal pure returns (uint16) {\n if (value > type(uint16).max) {\n revert SafeCastOverflowedUintDowncast(16, value);\n }\n return uint16(value);\n }\n\n /**\n * @dev Returns the downcasted uint8 from uint256, reverting on\n * overflow (when the input is greater than largest uint8).\n *\n * Counterpart to Solidity's `uint8` operator.\n *\n * Requirements:\n *\n * - input must fit into 8 bits\n */\n function toUint8(uint256 value) internal pure returns (uint8) {\n if (value > type(uint8).max) {\n revert SafeCastOverflowedUintDowncast(8, value);\n }\n return uint8(value);\n }\n\n /**\n * @dev Converts a signed int256 into an unsigned uint256.\n *\n * Requirements:\n *\n * - input must be greater than or equal to 0.\n */\n function toUint256(int256 value) internal pure returns (uint256) {\n if (value < 0) {\n revert SafeCastOverflowedIntToUint(value);\n }\n return uint256(value);\n }\n\n /**\n * @dev Returns the downcasted int248 from int256, reverting on\n * overflow (when the input is less than smallest int248 or\n * greater than largest int248).\n *\n * Counterpart to Solidity's `int248` operator.\n *\n * Requirements:\n *\n * - input must fit into 248 bits\n */\n function toInt248(int256 value) internal pure returns (int248 downcasted) {\n downcasted = int248(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(248, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int240 from int256, reverting on\n * overflow (when the input is less than smallest int240 or\n * greater than largest int240).\n *\n * Counterpart to Solidity's `int240` operator.\n *\n * Requirements:\n *\n * - input must fit into 240 bits\n */\n function toInt240(int256 value) internal pure returns (int240 downcasted) {\n downcasted = int240(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(240, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int232 from int256, reverting on\n * overflow (when the input is less than smallest int232 or\n * greater than largest int232).\n *\n * Counterpart to Solidity's `int232` operator.\n *\n * Requirements:\n *\n * - input must fit into 232 bits\n */\n function toInt232(int256 value) internal pure returns (int232 downcasted) {\n downcasted = int232(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(232, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int224 from int256, reverting on\n * overflow (when the input is less than smallest int224 or\n * greater than largest int224).\n *\n * Counterpart to Solidity's `int224` operator.\n *\n * Requirements:\n *\n * - input must fit into 224 bits\n */\n function toInt224(int256 value) internal pure returns (int224 downcasted) {\n downcasted = int224(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(224, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int216 from int256, reverting on\n * overflow (when the input is less than smallest int216 or\n * greater than largest int216).\n *\n * Counterpart to Solidity's `int216` operator.\n *\n * Requirements:\n *\n * - input must fit into 216 bits\n */\n function toInt216(int256 value) internal pure returns (int216 downcasted) {\n downcasted = int216(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(216, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int208 from int256, reverting on\n * overflow (when the input is less than smallest int208 or\n * greater than largest int208).\n *\n * Counterpart to Solidity's `int208` operator.\n *\n * Requirements:\n *\n * - input must fit into 208 bits\n */\n function toInt208(int256 value) internal pure returns (int208 downcasted) {\n downcasted = int208(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(208, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int200 from int256, reverting on\n * overflow (when the input is less than smallest int200 or\n * greater than largest int200).\n *\n * Counterpart to Solidity's `int200` operator.\n *\n * Requirements:\n *\n * - input must fit into 200 bits\n */\n function toInt200(int256 value) internal pure returns (int200 downcasted) {\n downcasted = int200(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(200, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int192 from int256, reverting on\n * overflow (when the input is less than smallest int192 or\n * greater than largest int192).\n *\n * Counterpart to Solidity's `int192` operator.\n *\n * Requirements:\n *\n * - input must fit into 192 bits\n */\n function toInt192(int256 value) internal pure returns (int192 downcasted) {\n downcasted = int192(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(192, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int184 from int256, reverting on\n * overflow (when the input is less than smallest int184 or\n * greater than largest int184).\n *\n * Counterpart to Solidity's `int184` operator.\n *\n * Requirements:\n *\n * - input must fit into 184 bits\n */\n function toInt184(int256 value) internal pure returns (int184 downcasted) {\n downcasted = int184(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(184, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int176 from int256, reverting on\n * overflow (when the input is less than smallest int176 or\n * greater than largest int176).\n *\n * Counterpart to Solidity's `int176` operator.\n *\n * Requirements:\n *\n * - input must fit into 176 bits\n */\n function toInt176(int256 value) internal pure returns (int176 downcasted) {\n downcasted = int176(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(176, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int168 from int256, reverting on\n * overflow (when the input is less than smallest int168 or\n * greater than largest int168).\n *\n * Counterpart to Solidity's `int168` operator.\n *\n * Requirements:\n *\n * - input must fit into 168 bits\n */\n function toInt168(int256 value) internal pure returns (int168 downcasted) {\n downcasted = int168(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(168, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int160 from int256, reverting on\n * overflow (when the input is less than smallest int160 or\n * greater than largest int160).\n *\n * Counterpart to Solidity's `int160` operator.\n *\n * Requirements:\n *\n * - input must fit into 160 bits\n */\n function toInt160(int256 value) internal pure returns (int160 downcasted) {\n downcasted = int160(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(160, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int152 from int256, reverting on\n * overflow (when the input is less than smallest int152 or\n * greater than largest int152).\n *\n * Counterpart to Solidity's `int152` operator.\n *\n * Requirements:\n *\n * - input must fit into 152 bits\n */\n function toInt152(int256 value) internal pure returns (int152 downcasted) {\n downcasted = int152(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(152, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int144 from int256, reverting on\n * overflow (when the input is less than smallest int144 or\n * greater than largest int144).\n *\n * Counterpart to Solidity's `int144` operator.\n *\n * Requirements:\n *\n * - input must fit into 144 bits\n */\n function toInt144(int256 value) internal pure returns (int144 downcasted) {\n downcasted = int144(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(144, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int136 from int256, reverting on\n * overflow (when the input is less than smallest int136 or\n * greater than largest int136).\n *\n * Counterpart to Solidity's `int136` operator.\n *\n * Requirements:\n *\n * - input must fit into 136 bits\n */\n function toInt136(int256 value) internal pure returns (int136 downcasted) {\n downcasted = int136(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(136, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int128 from int256, reverting on\n * overflow (when the input is less than smallest int128 or\n * greater than largest int128).\n *\n * Counterpart to Solidity's `int128` operator.\n *\n * Requirements:\n *\n * - input must fit into 128 bits\n */\n function toInt128(int256 value) internal pure returns (int128 downcasted) {\n downcasted = int128(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(128, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int120 from int256, reverting on\n * overflow (when the input is less than smallest int120 or\n * greater than largest int120).\n *\n * Counterpart to Solidity's `int120` operator.\n *\n * Requirements:\n *\n * - input must fit into 120 bits\n */\n function toInt120(int256 value) internal pure returns (int120 downcasted) {\n downcasted = int120(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(120, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int112 from int256, reverting on\n * overflow (when the input is less than smallest int112 or\n * greater than largest int112).\n *\n * Counterpart to Solidity's `int112` operator.\n *\n * Requirements:\n *\n * - input must fit into 112 bits\n */\n function toInt112(int256 value) internal pure returns (int112 downcasted) {\n downcasted = int112(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(112, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int104 from int256, reverting on\n * overflow (when the input is less than smallest int104 or\n * greater than largest int104).\n *\n * Counterpart to Solidity's `int104` operator.\n *\n * Requirements:\n *\n * - input must fit into 104 bits\n */\n function toInt104(int256 value) internal pure returns (int104 downcasted) {\n downcasted = int104(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(104, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int96 from int256, reverting on\n * overflow (when the input is less than smallest int96 or\n * greater than largest int96).\n *\n * Counterpart to Solidity's `int96` operator.\n *\n * Requirements:\n *\n * - input must fit into 96 bits\n */\n function toInt96(int256 value) internal pure returns (int96 downcasted) {\n downcasted = int96(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(96, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int88 from int256, reverting on\n * overflow (when the input is less than smallest int88 or\n * greater than largest int88).\n *\n * Counterpart to Solidity's `int88` operator.\n *\n * Requirements:\n *\n * - input must fit into 88 bits\n */\n function toInt88(int256 value) internal pure returns (int88 downcasted) {\n downcasted = int88(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(88, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int80 from int256, reverting on\n * overflow (when the input is less than smallest int80 or\n * greater than largest int80).\n *\n * Counterpart to Solidity's `int80` operator.\n *\n * Requirements:\n *\n * - input must fit into 80 bits\n */\n function toInt80(int256 value) internal pure returns (int80 downcasted) {\n downcasted = int80(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(80, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int72 from int256, reverting on\n * overflow (when the input is less than smallest int72 or\n * greater than largest int72).\n *\n * Counterpart to Solidity's `int72` operator.\n *\n * Requirements:\n *\n * - input must fit into 72 bits\n */\n function toInt72(int256 value) internal pure returns (int72 downcasted) {\n downcasted = int72(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(72, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int64 from int256, reverting on\n * overflow (when the input is less than smallest int64 or\n * greater than largest int64).\n *\n * Counterpart to Solidity's `int64` operator.\n *\n * Requirements:\n *\n * - input must fit into 64 bits\n */\n function toInt64(int256 value) internal pure returns (int64 downcasted) {\n downcasted = int64(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(64, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int56 from int256, reverting on\n * overflow (when the input is less than smallest int56 or\n * greater than largest int56).\n *\n * Counterpart to Solidity's `int56` operator.\n *\n * Requirements:\n *\n * - input must fit into 56 bits\n */\n function toInt56(int256 value) internal pure returns (int56 downcasted) {\n downcasted = int56(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(56, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int48 from int256, reverting on\n * overflow (when the input is less than smallest int48 or\n * greater than largest int48).\n *\n * Counterpart to Solidity's `int48` operator.\n *\n * Requirements:\n *\n * - input must fit into 48 bits\n */\n function toInt48(int256 value) internal pure returns (int48 downcasted) {\n downcasted = int48(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(48, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int40 from int256, reverting on\n * overflow (when the input is less than smallest int40 or\n * greater than largest int40).\n *\n * Counterpart to Solidity's `int40` operator.\n *\n * Requirements:\n *\n * - input must fit into 40 bits\n */\n function toInt40(int256 value) internal pure returns (int40 downcasted) {\n downcasted = int40(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(40, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int32 from int256, reverting on\n * overflow (when the input is less than smallest int32 or\n * greater than largest int32).\n *\n * Counterpart to Solidity's `int32` operator.\n *\n * Requirements:\n *\n * - input must fit into 32 bits\n */\n function toInt32(int256 value) internal pure returns (int32 downcasted) {\n downcasted = int32(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(32, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int24 from int256, reverting on\n * overflow (when the input is less than smallest int24 or\n * greater than largest int24).\n *\n * Counterpart to Solidity's `int24` operator.\n *\n * Requirements:\n *\n * - input must fit into 24 bits\n */\n function toInt24(int256 value) internal pure returns (int24 downcasted) {\n downcasted = int24(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(24, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int16 from int256, reverting on\n * overflow (when the input is less than smallest int16 or\n * greater than largest int16).\n *\n * Counterpart to Solidity's `int16` operator.\n *\n * Requirements:\n *\n * - input must fit into 16 bits\n */\n function toInt16(int256 value) internal pure returns (int16 downcasted) {\n downcasted = int16(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(16, value);\n }\n }\n\n /**\n * @dev Returns the downcasted int8 from int256, reverting on\n * overflow (when the input is less than smallest int8 or\n * greater than largest int8).\n *\n * Counterpart to Solidity's `int8` operator.\n *\n * Requirements:\n *\n * - input must fit into 8 bits\n */\n function toInt8(int256 value) internal pure returns (int8 downcasted) {\n downcasted = int8(value);\n if (downcasted != value) {\n revert SafeCastOverflowedIntDowncast(8, value);\n }\n }\n\n /**\n * @dev Converts an unsigned uint256 into a signed int256.\n *\n * Requirements:\n *\n * - input must be less than or equal to maxInt256.\n */\n function toInt256(uint256 value) internal pure returns (int256) {\n // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive\n if (value > uint256(type(int256).max)) {\n revert SafeCastOverflowedUintToInt(value);\n }\n return int256(value);\n }\n}\n"},"@openzeppelin/contracts/utils/math/SignedMath.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Standard signed math utilities missing in the Solidity language.\n */\nlibrary SignedMath {\n /**\n * @dev Returns the largest of two signed numbers.\n */\n function max(int256 a, int256 b) internal pure returns (int256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two signed numbers.\n */\n function min(int256 a, int256 b) internal pure returns (int256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two signed numbers without overflow.\n * The result is rounded towards zero.\n */\n function average(int256 a, int256 b) internal pure returns (int256) {\n // Formula from the book \"Hacker's Delight\"\n int256 x = (a & b) + ((a ^ b) >> 1);\n return x + (int256(uint256(x) >> 255) & (a ^ b));\n }\n\n /**\n * @dev Returns the absolute unsigned value of a signed value.\n */\n function abs(int256 n) internal pure returns (uint256) {\n unchecked {\n // must be unchecked in order to support `n = type(int256).min`\n return uint256(n >= 0 ? n : -n);\n }\n }\n}\n"},"@openzeppelin/contracts/utils/Nonces.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Nonces.sol)\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides tracking nonces for addresses. Nonces will only increment.\n */\nabstract contract Nonces {\n /**\n * @dev The nonce used for an `account` is not the expected current nonce.\n */\n error InvalidAccountNonce(address account, uint256 currentNonce);\n\n mapping(address account => uint256) private _nonces;\n\n /**\n * @dev Returns the next unused nonce for an address.\n */\n function nonces(address owner) public view virtual returns (uint256) {\n return _nonces[owner];\n }\n\n /**\n * @dev Consumes a nonce.\n *\n * Returns the current value and increments nonce.\n */\n function _useNonce(address owner) internal virtual returns (uint256) {\n // For each account, the nonce has an initial value of 0, can only be incremented by one, and cannot be\n // decremented or reset. This guarantees that the nonce never overflows.\n unchecked {\n // It is important to do x++ and not ++x here.\n return _nonces[owner]++;\n }\n }\n\n /**\n * @dev Same as {_useNonce} but checking that `nonce` is the next valid for `owner`.\n */\n function _useCheckedNonce(address owner, uint256 nonce) internal virtual {\n uint256 current = _useNonce(owner);\n if (nonce != current) {\n revert InvalidAccountNonce(owner, current);\n }\n }\n}\n"},"@openzeppelin/contracts/utils/ShortStrings.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/ShortStrings.sol)\n\npragma solidity ^0.8.20;\n\nimport {StorageSlot} from \"./StorageSlot.sol\";\n\n// | string | 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA |\n// | length | 0x BB |\ntype ShortString is bytes32;\n\n/**\n * @dev This library provides functions to convert short memory strings\n * into a `ShortString` type that can be used as an immutable variable.\n *\n * Strings of arbitrary length can be optimized using this library if\n * they are short enough (up to 31 bytes) by packing them with their\n * length (1 byte) in a single EVM word (32 bytes). Additionally, a\n * fallback mechanism can be used for every other case.\n *\n * Usage example:\n *\n * ```solidity\n * contract Named {\n * using ShortStrings for *;\n *\n * ShortString private immutable _name;\n * string private _nameFallback;\n *\n * constructor(string memory contractName) {\n * _name = contractName.toShortStringWithFallback(_nameFallback);\n * }\n *\n * function name() external view returns (string memory) {\n * return _name.toStringWithFallback(_nameFallback);\n * }\n * }\n * ```\n */\nlibrary ShortStrings {\n // Used as an identifier for strings longer than 31 bytes.\n bytes32 private constant FALLBACK_SENTINEL = 0x00000000000000000000000000000000000000000000000000000000000000FF;\n\n error StringTooLong(string str);\n error InvalidShortString();\n\n /**\n * @dev Encode a string of at most 31 chars into a `ShortString`.\n *\n * This will trigger a `StringTooLong` error is the input string is too long.\n */\n function toShortString(string memory str) internal pure returns (ShortString) {\n bytes memory bstr = bytes(str);\n if (bstr.length > 31) {\n revert StringTooLong(str);\n }\n return ShortString.wrap(bytes32(uint256(bytes32(bstr)) | bstr.length));\n }\n\n /**\n * @dev Decode a `ShortString` back to a \"normal\" string.\n */\n function toString(ShortString sstr) internal pure returns (string memory) {\n uint256 len = byteLength(sstr);\n // using `new string(len)` would work locally but is not memory safe.\n string memory str = new string(32);\n /// @solidity memory-safe-assembly\n assembly {\n mstore(str, len)\n mstore(add(str, 0x20), sstr)\n }\n return str;\n }\n\n /**\n * @dev Return the length of a `ShortString`.\n */\n function byteLength(ShortString sstr) internal pure returns (uint256) {\n uint256 result = uint256(ShortString.unwrap(sstr)) & 0xFF;\n if (result > 31) {\n revert InvalidShortString();\n }\n return result;\n }\n\n /**\n * @dev Encode a string into a `ShortString`, or write it to storage if it is too long.\n */\n function toShortStringWithFallback(string memory value, string storage store) internal returns (ShortString) {\n if (bytes(value).length < 32) {\n return toShortString(value);\n } else {\n StorageSlot.getStringSlot(store).value = value;\n return ShortString.wrap(FALLBACK_SENTINEL);\n }\n }\n\n /**\n * @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}.\n */\n function toStringWithFallback(ShortString value, string storage store) internal pure returns (string memory) {\n if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\n return toString(value);\n } else {\n return store;\n }\n }\n\n /**\n * @dev Return the length of a string that was encoded to `ShortString` or written to storage using\n * {setWithFallback}.\n *\n * WARNING: This will return the \"byte length\" of the string. This may not reflect the actual length in terms of\n * actual characters as the UTF-8 encoding of a single character can span over multiple bytes.\n */\n function byteLengthWithFallback(ShortString value, string storage store) internal view returns (uint256) {\n if (ShortString.unwrap(value) != FALLBACK_SENTINEL) {\n return byteLength(value);\n } else {\n return bytes(store).length;\n }\n }\n}\n"},"@openzeppelin/contracts/utils/StorageSlot.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/StorageSlot.sol)\n// This file was procedurally generated from scripts/generate/templates/StorageSlot.js.\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```solidity\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(newImplementation.code.length > 0);\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n struct StringSlot {\n string value;\n }\n\n struct BytesSlot {\n bytes value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `StringSlot` with member `value` located at `slot`.\n */\n function getStringSlot(bytes32 slot) internal pure returns (StringSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `StringSlot` representation of the string storage pointer `store`.\n */\n function getStringSlot(string storage store) internal pure returns (StringSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := store.slot\n }\n }\n\n /**\n * @dev Returns an `BytesSlot` with member `value` located at `slot`.\n */\n function getBytesSlot(bytes32 slot) internal pure returns (BytesSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`.\n */\n function getBytesSlot(bytes storage store) internal pure returns (BytesSlot storage r) {\n /// @solidity memory-safe-assembly\n assembly {\n r.slot := store.slot\n }\n }\n}\n"},"@openzeppelin/contracts/utils/Strings.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol)\n\npragma solidity ^0.8.20;\n\nimport {Math} from \"./math/Math.sol\";\nimport {SignedMath} from \"./math/SignedMath.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n bytes16 private constant HEX_DIGITS = \"0123456789abcdef\";\n uint8 private constant ADDRESS_LENGTH = 20;\n\n /**\n * @dev The `value` string doesn't fit in the specified `length`.\n */\n error StringsInsufficientHexLength(uint256 value, uint256 length);\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n unchecked {\n uint256 length = Math.log10(value) + 1;\n string memory buffer = new string(length);\n uint256 ptr;\n /// @solidity memory-safe-assembly\n assembly {\n ptr := add(buffer, add(32, length))\n }\n while (true) {\n ptr--;\n /// @solidity memory-safe-assembly\n assembly {\n mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))\n }\n value /= 10;\n if (value == 0) break;\n }\n return buffer;\n }\n }\n\n /**\n * @dev Converts a `int256` to its ASCII `string` decimal representation.\n */\n function toStringSigned(int256 value) internal pure returns (string memory) {\n return string.concat(value < 0 ? \"-\" : \"\", toString(SignedMath.abs(value)));\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n unchecked {\n return toHexString(value, Math.log256(value) + 1);\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n uint256 localValue = value;\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = HEX_DIGITS[localValue & 0xf];\n localValue >>= 4;\n }\n if (localValue != 0) {\n revert StringsInsufficientHexLength(value, length);\n }\n return string(buffer);\n }\n\n /**\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\n * representation.\n */\n function toHexString(address addr) internal pure returns (string memory) {\n return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);\n }\n\n /**\n * @dev Returns true if the two strings are equal.\n */\n function equal(string memory a, string memory b) internal pure returns (bool) {\n return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));\n }\n}\n"},"contracts/lbp/LBPool.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { Ownable2Step } from \"@openzeppelin/contracts/access/Ownable2Step.sol\";\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { Ownable } from \"@openzeppelin/contracts/access/Ownable.sol\";\n\nimport { ISenderGuard } from \"@balancer-labs/v3-interfaces/contracts/vault/ISenderGuard.sol\";\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IBasePool } from \"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport {\n IWeightedPool,\n WeightedPoolDynamicData,\n WeightedPoolImmutableData\n} from \"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol\";\nimport {\n ILBPool,\n LBPoolImmutableData,\n LBPoolDynamicData,\n LBPParams\n} from \"@balancer-labs/v3-interfaces/contracts/pool-weighted/ILBPool.sol\";\nimport \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { InputHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\";\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\nimport { BaseHooks } from \"@balancer-labs/v3-vault/contracts/BaseHooks.sol\";\n\nimport { GradualValueChange } from \"../lib/GradualValueChange.sol\";\nimport { WeightedPool } from \"../WeightedPool.sol\";\nimport { LBPoolLib } from \"../lib/LBPoolLib.sol\";\n\n/**\n * @notice Weighted Pool with mutable weights, designed to support v3 Liquidity Bootstrapping.\n * @dev Inheriting from WeightedPool is only slightly wasteful (setting 2 immutable weights and `_totalTokens`,\n * which will not be used later), and it is tremendously helpful for pool validation and any potential future\n * base contract changes.\n */\ncontract LBPool is ILBPool, WeightedPool, Ownable2Step, BaseHooks {\n // The sale parameters are timestamp-based: they should not be relied upon for sub-minute accuracy.\n // solhint-disable not-rely-on-time\n\n // LBPs are constrained to two tokens: project and reserve.\n uint256 private constant _TWO_TOKENS = 2;\n\n // LBPools are deployed with the Balancer standard router address, which we know reliably reports the true sender.\n address private immutable _trustedRouter;\n\n // The project token is the one being launched; the reserve token is the token used to buy them (usually\n // a stablecoin or WETH).\n IERC20 private immutable _projectToken;\n IERC20 private immutable _reserveToken;\n\n uint256 private immutable _projectTokenIndex;\n uint256 private immutable _reserveTokenIndex;\n\n uint256 private immutable _startTime;\n uint256 private immutable _endTime;\n\n uint256 private immutable _projectTokenStartWeight;\n uint256 private immutable _reserveTokenStartWeight;\n uint256 private immutable _projectTokenEndWeight;\n uint256 private immutable _reserveTokenEndWeight;\n\n // If true, project tokens can only be bought, not sold back to the pool (i.e., they cannot be the `tokenIn`\n // of a swap)\n bool private immutable _blockProjectTokenSwapsIn;\n\n /**\n * @notice Emitted on deployment to record the sale parameters.\n * @param startTime The starting timestamp of the update\n * @param endTime The ending timestamp of the update\n * @param startWeights The weights at the start of the update\n * @param endWeights The final weights after the update is completed\n */\n event GradualWeightUpdateScheduled(\n uint256 startTime,\n uint256 endTime,\n uint256[] startWeights,\n uint256[] endWeights\n );\n\n /// @notice Swaps are disabled except during the sale (i.e., between and start and end times).\n error SwapsDisabled();\n\n /// @notice Removing liquidity is not allowed before the end of the sale.\n error RemovingLiquidityNotAllowed();\n\n /// @notice The pool does not allow adding liquidity except during initialization and before the weight update.\n error AddingLiquidityNotAllowed();\n\n /// @notice THe LBP configuration prohibits selling the project token back into the pool.\n error SwapOfProjectTokenIn();\n\n /// @notice LBPs are WeightedPools by inheritance, but WeightedPool immutable/dynamic getters are wrong for LBPs.\n error NotImplemented();\n\n /// @notice Only allow adding liquidity (including initialization) before the sale.\n modifier onlyBeforeSale() {\n if (block.timestamp >= _startTime) {\n revert AddingLiquidityNotAllowed();\n }\n _;\n }\n\n constructor(\n string memory name,\n string memory symbol,\n LBPParams memory lbpParams,\n IVault vault,\n address trustedRouter,\n string memory version\n ) WeightedPool(_buildWeightedPoolParams(name, symbol, version, lbpParams), vault) Ownable(lbpParams.owner) {\n // Checks that the weights are valid and `endTime` is after `startTime`. If `startTime` is in the past,\n // avoid abrupt weight changes by overriding it with the current block time.\n _startTime = LBPoolLib.verifyWeightUpdateParameters(\n lbpParams.startTime,\n lbpParams.endTime,\n lbpParams.projectTokenStartWeight,\n lbpParams.reserveTokenStartWeight,\n lbpParams.projectTokenEndWeight,\n lbpParams.reserveTokenEndWeight\n );\n _endTime = lbpParams.endTime;\n\n // Set the trusted router (passed down from the factory), and the rest of the immutable variables.\n _trustedRouter = trustedRouter;\n\n _projectToken = lbpParams.projectToken;\n _reserveToken = lbpParams.reserveToken;\n\n _blockProjectTokenSwapsIn = lbpParams.blockProjectTokenSwapsIn;\n\n _projectTokenStartWeight = lbpParams.projectTokenStartWeight;\n _reserveTokenStartWeight = lbpParams.reserveTokenStartWeight;\n\n _projectTokenEndWeight = lbpParams.projectTokenEndWeight;\n _reserveTokenEndWeight = lbpParams.reserveTokenEndWeight;\n\n (_projectTokenIndex, _reserveTokenIndex) = lbpParams.projectToken < lbpParams.reserveToken ? (0, 1) : (1, 0);\n\n // Preserve event compatibility with previous LBP versions.\n uint256[] memory startWeights = new uint256[](_TWO_TOKENS);\n uint256[] memory endWeights = new uint256[](_TWO_TOKENS);\n (startWeights[_projectTokenIndex], startWeights[_reserveTokenIndex]) = (\n lbpParams.projectTokenStartWeight,\n lbpParams.reserveTokenStartWeight\n );\n (endWeights[_projectTokenIndex], endWeights[_reserveTokenIndex]) = (\n lbpParams.projectTokenEndWeight,\n lbpParams.reserveTokenEndWeight\n );\n\n emit GradualWeightUpdateScheduled(_startTime, _endTime, startWeights, endWeights);\n }\n\n /**\n * @notice Returns the trusted router, which is used to initialize and seed the pool.\n * @return trustedRouter Address of the trusted router (i.e., one that reliably reports the sender)\n */\n function getTrustedRouter() external view returns (address) {\n return _trustedRouter;\n }\n\n /// @inheritdoc ILBPool\n function getProjectToken() external view returns (IERC20) {\n return _projectToken;\n }\n\n /// @inheritdoc ILBPool\n function getReserveToken() external view returns (IERC20) {\n return _reserveToken;\n }\n\n /**\n * @notice Return start time, end time, and endWeights as an array.\n * @dev Current weights should be retrieved via `getNormalizedWeights()`.\n * @return startTime The starting timestamp of any ongoing weight change\n * @return endTime The ending timestamp of any ongoing weight change\n * @return startWeights The \"initial\" weights, sorted in token registration order\n * @return endWeights The \"destination\" weights, sorted in token registration order\n */\n function getGradualWeightUpdateParams()\n public\n view\n returns (uint256 startTime, uint256 endTime, uint256[] memory startWeights, uint256[] memory endWeights)\n {\n startTime = _startTime;\n endTime = _endTime;\n\n startWeights = new uint256[](_TWO_TOKENS);\n (startWeights[_projectTokenIndex], startWeights[_reserveTokenIndex]) = (\n _projectTokenStartWeight,\n _reserveTokenStartWeight\n );\n\n endWeights = new uint256[](_TWO_TOKENS);\n (endWeights[_projectTokenIndex], endWeights[_reserveTokenIndex]) = (\n _projectTokenEndWeight,\n _reserveTokenEndWeight\n );\n }\n\n /**\n * @notice Indicate whether or not swaps are enabled for this pool.\n * @dev For LBPs, swaps are enabled during the token sale, between the start and end times. Note that this does\n * not check whether the pool or Vault is paused, which can only happen through governance action. This can be\n * checked using `getPoolConfig` on the Vault, or by calling `getLBPoolDynamicData` here.\n *\n * @return swapEnabled True if the sale is in progress\n */\n function isSwapEnabled() external view returns (bool) {\n return _isSwapEnabled();\n }\n\n function _isSwapEnabled() internal view returns (bool) {\n return block.timestamp >= _startTime && block.timestamp <= _endTime;\n }\n\n /**\n * @notice Indicate whether project tokens can be sold back into the pool.\n * @dev Note that theoretically, anyone holding project tokens could create a new pool alongside the LBP that did\n * allow \"selling\" project tokens. This restriction only applies to the primary LBP.\n *\n * @return isProjectTokenSwapInBlocked If true, acquired project tokens cannot be traded for reserve in this pool\n */\n function isProjectTokenSwapInBlocked() external view returns (bool) {\n return _blockProjectTokenSwapsIn;\n }\n\n /**\n * @notice Not implemented; reverts unconditionally.\n * @dev This is because the LBP dynamic data also includes the weights, so overriding this would be incomplete\n * and potentially misleading.\n */\n function getWeightedPoolDynamicData() external pure override returns (WeightedPoolDynamicData memory) {\n revert NotImplemented();\n }\n\n /**\n * @notice Not implemented; reverts unconditionally.\n * @dev This is because in the standard Weighted Pool, weights are included in the immutable data. In the LBP,\n * weights can change, so they are instead part of the dynamic data.\n */\n function getWeightedPoolImmutableData() external pure override returns (WeightedPoolImmutableData memory) {\n revert NotImplemented();\n }\n\n /// @inheritdoc ILBPool\n function getLBPoolDynamicData() external view override returns (LBPoolDynamicData memory data) {\n data.balancesLiveScaled18 = _vault.getCurrentLiveBalances(address(this));\n data.normalizedWeights = _getNormalizedWeights();\n data.staticSwapFeePercentage = _vault.getStaticSwapFeePercentage((address(this)));\n data.totalSupply = totalSupply();\n\n PoolConfig memory poolConfig = _vault.getPoolConfig(address(this));\n data.isPoolInitialized = poolConfig.isPoolInitialized;\n data.isPoolPaused = poolConfig.isPoolPaused;\n data.isPoolInRecoveryMode = poolConfig.isPoolInRecoveryMode;\n data.isSwapEnabled = _isSwapEnabled();\n }\n\n /// @inheritdoc ILBPool\n function getLBPoolImmutableData() external view override returns (LBPoolImmutableData memory data) {\n data.tokens = _vault.getPoolTokens(address(this));\n data.projectTokenIndex = _projectTokenIndex;\n data.reserveTokenIndex = _reserveTokenIndex;\n\n (data.decimalScalingFactors, ) = _vault.getPoolTokenRates(address(this));\n data.isProjectTokenSwapInBlocked = _blockProjectTokenSwapsIn;\n data.startTime = _startTime;\n data.endTime = _endTime;\n\n data.startWeights = new uint256[](_TWO_TOKENS);\n data.startWeights[_projectTokenIndex] = _projectTokenStartWeight;\n data.startWeights[_reserveTokenIndex] = _reserveTokenStartWeight;\n\n data.endWeights = new uint256[](_TWO_TOKENS);\n data.endWeights[_projectTokenIndex] = _projectTokenEndWeight;\n data.endWeights[_reserveTokenIndex] = _reserveTokenEndWeight;\n }\n\n /*******************************************************************************\n Base Pool Hooks\n *******************************************************************************/\n\n /// @inheritdoc WeightedPool\n function onSwap(\n PoolSwapParams memory request\n ) public view override(IBasePool, WeightedPool) onlyVault returns (uint256) {\n // Block if the sale has not started or has ended.\n if (_isSwapEnabled() == false) {\n revert SwapsDisabled();\n }\n\n // If project token swaps are blocked, project token must be the token out.\n if (_blockProjectTokenSwapsIn && request.indexOut != _projectTokenIndex) {\n revert SwapOfProjectTokenIn();\n }\n\n return super.onSwap(request);\n }\n\n /*******************************************************************************\n Pool Hooks\n *******************************************************************************/\n\n /**\n * @notice Hook to be executed when the pool is registered.\n * @dev Returns true if registration was successful; false will revert with `HookRegistrationFailed`.\n * @param pool Address of the pool (must be this contract for LBPs: the pool is also the hook)\n * @param tokenConfig The token configuration of the pool being registered (e.g., type)\n * @return success True if the hook allowed the registration, false otherwise\n */\n function onRegister(\n address,\n address pool,\n TokenConfig[] memory tokenConfig,\n LiquidityManagement calldata\n ) public view override onlyVault returns (bool) {\n // These preconditions are guaranteed by the standard LBPoolFactory, but check anyway.\n InputHelpers.ensureInputLengthMatch(_TWO_TOKENS, tokenConfig.length);\n\n // Ensure there are no \"WITH_RATE\" tokens. We don't need to check anything else, as the Vault has already\n // ensured we don't have a STANDARD token with a rate provider.\n if (tokenConfig[0].tokenType != TokenType.STANDARD || tokenConfig[1].tokenType != TokenType.STANDARD) {\n revert IVaultErrors.InvalidTokenConfiguration();\n }\n\n return pool == address(this);\n }\n\n /**\n * @notice Return the HookFlags struct, which indicates which hooks this contract supports.\n * @dev For each flag set to true, the Vault will call the corresponding hook.\n * @return hookFlags Flags indicating which hooks are supported for LBPs\n */\n function getHookFlags() public pure override returns (HookFlags memory hookFlags) {\n // Required to enforce single-LP liquidity provision, and ensure all funding occurs before the sale.\n hookFlags.shouldCallBeforeInitialize = true;\n hookFlags.shouldCallBeforeAddLiquidity = true;\n\n // Required to enforce the liquidity can only be withdrawn after the end of the sale.\n hookFlags.shouldCallBeforeRemoveLiquidity = true;\n }\n\n /**\n * @notice Block initialization if the sale has already started.\n * @dev Take care to set the start time far enough in advance to allow for funding; otherwise the pool will remain\n * unfunded and need to be redeployed. Note that initialization does not pass the router address, so we cannot\n * directly check that here, though there has to be a call on the trusted router for its `getSender` to be\n * non-zero.\n *\n * @return success Always true: allow the initialization to proceed if the time condition has been met\n */\n function onBeforeInitialize(\n uint256[] memory,\n bytes memory\n ) public view override onlyVault onlyBeforeSale returns (bool) {\n return ISenderGuard(_trustedRouter).getSender() == owner();\n }\n\n /**\n * @notice Allow the owner to add liquidity before the start of the sale.\n * @param router The router used for the operation\n * @return success True (allowing the operation to proceed) if the owner is calling through the trusted router\n */\n function onBeforeAddLiquidity(\n address router,\n address,\n AddLiquidityKind,\n uint256[] memory,\n uint256,\n uint256[] memory,\n bytes memory\n ) public view override onlyVault onlyBeforeSale returns (bool) {\n return router == _trustedRouter && ISenderGuard(router).getSender() == owner();\n }\n\n /**\n * @notice Only allow requests after the weight update is finished, and the sale is complete.\n * @return success Always true; if removing liquidity is not allowed, revert here with a more specific error\n */\n function onBeforeRemoveLiquidity(\n address,\n address,\n RemoveLiquidityKind,\n uint256,\n uint256[] memory,\n uint256[] memory,\n bytes memory\n ) public view override onlyVault returns (bool) {\n // Only allow removing liquidity after end time.\n if (block.timestamp <= _endTime) {\n revert RemovingLiquidityNotAllowed();\n }\n\n return true;\n }\n\n /*******************************************************************************\n Internal Functions\n *******************************************************************************/\n\n function _getNormalizedWeight(uint256 tokenIndex) internal view override returns (uint256) {\n if (tokenIndex < _TWO_TOKENS) {\n return _getNormalizedWeights()[tokenIndex];\n }\n\n revert IVaultErrors.InvalidToken();\n }\n\n function _getNormalizedWeights() internal view override returns (uint256[] memory) {\n uint256[] memory normalizedWeights = new uint256[](_TWO_TOKENS);\n normalizedWeights[_projectTokenIndex] = _getProjectTokenNormalizedWeight();\n normalizedWeights[_reserveTokenIndex] = FixedPoint.ONE - normalizedWeights[_projectTokenIndex];\n\n return normalizedWeights;\n }\n\n function _getProjectTokenNormalizedWeight() internal view returns (uint256) {\n uint256 pctProgress = GradualValueChange.calculateValueChangeProgress(_startTime, _endTime);\n\n return GradualValueChange.interpolateValue(_projectTokenStartWeight, _projectTokenEndWeight, pctProgress);\n }\n\n // Build the required struct for initializing the underlying WeightedPool. Called on construction.\n function _buildWeightedPoolParams(\n string memory name,\n string memory symbol,\n string memory version,\n LBPParams memory lbpParams\n ) private pure returns (NewPoolParams memory) {\n (uint256 projectTokenIndex, uint256 reserveTokenIndex) = lbpParams.projectToken < lbpParams.reserveToken\n ? (0, 1)\n : (1, 0);\n\n uint256[] memory normalizedWeights = new uint256[](_TWO_TOKENS);\n normalizedWeights[projectTokenIndex] = lbpParams.projectTokenStartWeight;\n normalizedWeights[reserveTokenIndex] = lbpParams.reserveTokenStartWeight;\n\n // The WeightedPool will validate the starting weights (i.e., ensure they respect the minimum and sum to ONE).\n return\n NewPoolParams({\n name: name,\n symbol: symbol,\n numTokens: _TWO_TOKENS,\n normalizedWeights: normalizedWeights,\n version: version\n });\n }\n}\n"},"contracts/lbp/LBPoolFactory.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\nimport { IPoolVersion } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IPoolVersion.sol\";\nimport { TokenConfig, PoolRoleAccounts } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\nimport { LBPParams } from \"@balancer-labs/v3-interfaces/contracts/pool-weighted/ILBPool.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport {\n ReentrancyGuardTransient\n} from \"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\";\nimport { BasePoolFactory } from \"@balancer-labs/v3-pool-utils/contracts/BasePoolFactory.sol\";\nimport { Version } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\";\n\nimport { LBPoolLib } from \"../lib/LBPoolLib.sol\";\nimport { LBPool } from \"./LBPool.sol\";\n\n/**\n * @notice LBPool Factory.\n * @dev This is a factory specific to LBPools, allowing only two tokens and restricting the LBP to a single token sale,\n * with parameters specified on deployment.\n */\ncontract LBPoolFactory is IPoolVersion, ReentrancyGuardTransient, BasePoolFactory, Version {\n // LBPs are constrained to two tokens: project (the token being sold), and reserve (e.g., USDC or WETH).\n uint256 private constant _TWO_TOKENS = 2;\n\n string private _poolVersion;\n\n address internal immutable _trustedRouter;\n\n /**\n * @notice Emitted on deployment so that offchain processes know which token is which from the beginning.\n * @dev This information is also available onchain through immutable data and explicit getters on the pool.\n * @param pool The address of the new pool\n * @param projectToken The address of the project token (being distributed in the sale)\n * @param reserveToken The address of the reserve token (used to purchase the project token)\n */\n event LBPoolCreated(address indexed pool, IERC20 indexed projectToken, IERC20 indexed reserveToken);\n\n /// @notice The zero address was given for the trusted router.\n error InvalidTrustedRouter();\n\n /// @notice The owner is the zero address.\n error InvalidOwner();\n\n constructor(\n IVault vault,\n uint32 pauseWindowDuration,\n string memory factoryVersion,\n string memory poolVersion,\n address trustedRouter\n ) BasePoolFactory(vault, pauseWindowDuration, type(LBPool).creationCode) Version(factoryVersion) {\n if (trustedRouter == address(0)) {\n revert InvalidTrustedRouter();\n }\n\n // LBPools are deployed with a router known to reliably report the originating address on operations.\n // This is used to ensure that only the owner can add liquidity to an LBP.\n _trustedRouter = trustedRouter;\n\n _poolVersion = poolVersion;\n }\n\n /// @inheritdoc IPoolVersion\n function getPoolVersion() external view returns (string memory) {\n return _poolVersion;\n }\n\n /// @notice Returns trusted router, which is the gateway to add liquidity to the pool.\n function getTrustedRouter() external view returns (address) {\n return _trustedRouter;\n }\n\n /**\n * @notice Deploys a new `LBPool`.\n * @dev This method does not support native ETH management; WETH needs to be used instead.\n * @param name The name of the pool\n * @param symbol The symbol of the pool\n * @param lbpParams The LBP configuration (see ILBPool for the struct definition)\n * @param swapFeePercentage Initial swap fee percentage (bound by the WeightedPool range)\n * @param salt The salt value that will be passed to create3 deployment\n */\n function create(\n string memory name,\n string memory symbol,\n LBPParams memory lbpParams,\n uint256 swapFeePercentage,\n bytes32 salt\n ) external nonReentrant returns (address pool) {\n if (lbpParams.owner == address(0)) {\n revert InvalidOwner();\n }\n\n PoolRoleAccounts memory roleAccounts;\n\n // This account can change the static swap fee for the pool.\n roleAccounts.swapFeeManager = lbpParams.owner;\n\n // Validate weight parameters and temporal constraints prior to deployment.\n // This validation is duplicated in the pool contract but performed here to surface precise error messages,\n // as create2 would otherwise mask the underlying revert reason.\n LBPoolLib.verifyWeightUpdateParameters(\n lbpParams.startTime,\n lbpParams.endTime,\n lbpParams.projectTokenStartWeight,\n lbpParams.reserveTokenStartWeight,\n lbpParams.projectTokenEndWeight,\n lbpParams.reserveTokenEndWeight\n );\n\n pool = _create(abi.encode(name, symbol, lbpParams, getVault(), _trustedRouter, _poolVersion), salt);\n\n emit LBPoolCreated(pool, lbpParams.projectToken, lbpParams.reserveToken);\n\n _registerPoolWithVault(\n pool,\n _buildTokenConfig(lbpParams.projectToken, lbpParams.reserveToken),\n swapFeePercentage,\n false, // not exempt from protocol fees\n roleAccounts,\n pool, // register the pool itself as the hook contract\n getDefaultLiquidityManagement()\n );\n }\n\n function _buildTokenConfig(\n IERC20 projectToken,\n IERC20 reserveToken\n ) private pure returns (TokenConfig[] memory tokenConfig) {\n tokenConfig = new TokenConfig[](_TWO_TOKENS);\n\n (tokenConfig[0].token, tokenConfig[1].token) = projectToken < reserveToken\n ? (projectToken, reserveToken)\n : (reserveToken, projectToken);\n }\n}\n"},"contracts/lib/GradualValueChange.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\nimport { Math } from \"@openzeppelin/contracts/utils/math/Math.sol\";\n\npragma solidity ^0.8.24;\n\n// solhint-disable not-rely-on-time\n\nlibrary GradualValueChange {\n /// @dev Indicates that the start time is after the end time\n error GradualUpdateTimeTravel(uint256 resolvedStartTime, uint256 endTime);\n\n using FixedPoint for uint256;\n\n function getInterpolatedValue(\n uint256 startValue,\n uint256 endValue,\n uint256 startTime,\n uint256 endTime\n ) internal view returns (uint256) {\n uint256 pctProgress = calculateValueChangeProgress(startTime, endTime);\n\n return interpolateValue(startValue, endValue, pctProgress);\n }\n\n function resolveStartTime(uint256 startTime, uint256 endTime) internal view returns (uint256 resolvedStartTime) {\n // If the start time is in the past, \"fast forward\" to start now\n // This avoids discontinuities in the value curve. Otherwise, if you set the start/end times with\n // only 10% of the period in the future, the value would immediately jump 90%\n resolvedStartTime = Math.max(block.timestamp, startTime);\n\n if (resolvedStartTime >= endTime) {\n revert GradualUpdateTimeTravel(resolvedStartTime, endTime);\n }\n }\n\n function interpolateValue(\n uint256 startValue,\n uint256 endValue,\n uint256 pctProgress\n ) internal pure returns (uint256) {\n if (pctProgress >= FixedPoint.ONE || startValue == endValue) {\n return endValue;\n }\n\n if (pctProgress == 0) {\n return startValue;\n }\n\n unchecked {\n if (startValue > endValue) {\n uint256 delta = pctProgress.mulDown(startValue - endValue);\n return startValue - delta;\n } else {\n uint256 delta = pctProgress.mulDown(endValue - startValue);\n return startValue + delta;\n }\n }\n }\n\n /**\n * @dev Returns a fixed-point number representing how far along the current value change is, where 0 means the\n * change has not yet started, and FixedPoint.ONE means it has fully completed.\n */\n function calculateValueChangeProgress(uint256 startTime, uint256 endTime) internal view returns (uint256) {\n if (block.timestamp >= endTime) {\n return FixedPoint.ONE;\n } else if (block.timestamp <= startTime) {\n return 0;\n }\n\n // No need for checked math as the magnitudes are verified above: endTime > block.timestamp > startTime\n uint256 totalSeconds;\n uint256 secondsElapsed;\n\n unchecked {\n totalSeconds = endTime - startTime;\n secondsElapsed = block.timestamp - startTime;\n }\n\n // We don't need to consider zero division here as this is covered above.\n return secondsElapsed.divDown(totalSeconds);\n }\n}\n"},"contracts/lib/LBPoolLib.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IWeightedPool } from \"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol\";\n\nimport { InputHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\";\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\n\nimport { GradualValueChange } from \"./GradualValueChange.sol\";\n\nlibrary LBPoolLib {\n // Matches Weighted Pool min weight.\n uint256 internal constant _MIN_WEIGHT = 1e16; // 1%\n\n /**\n * @dev Normalize `startTime` to block.now (`actualStartTime`) if it's in the past, and verify that\n * `endTime` > `actualStartTime` as well as token weights.\n */\n function verifyWeightUpdateParameters(\n uint256 startTime,\n uint256 endTime,\n uint256 projectStartWeight,\n uint256 reserveStartWeight,\n uint256 projectEndWeight,\n uint256 reserveEndWeight\n ) internal view returns (uint256 actualStartTime) {\n if (\n projectStartWeight < _MIN_WEIGHT ||\n reserveStartWeight < _MIN_WEIGHT ||\n projectEndWeight < _MIN_WEIGHT ||\n reserveEndWeight < _MIN_WEIGHT\n ) {\n revert IWeightedPool.MinWeight();\n }\n\n if (\n projectStartWeight + reserveStartWeight != FixedPoint.ONE ||\n projectEndWeight + reserveEndWeight != FixedPoint.ONE\n ) {\n revert IWeightedPool.NormalizedWeightInvariant();\n }\n\n actualStartTime = GradualValueChange.resolveStartTime(startTime, endTime);\n\n return actualStartTime;\n }\n}\n"},"contracts/test/GradualValueChangeMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport \"../lib/GradualValueChange.sol\";\n\ncontract GradualValueChangeMock {\n function getInterpolatedValue(\n uint256 startValue,\n uint256 endValue,\n uint256 startTime,\n uint256 endTime\n ) public view returns (uint256) {\n return GradualValueChange.getInterpolatedValue(startValue, endValue, startTime, endTime);\n }\n\n function resolveStartTime(uint256 startTime, uint256 endTime) public view returns (uint256) {\n return GradualValueChange.resolveStartTime(startTime, endTime);\n }\n\n function interpolateValue(uint256 startValue, uint256 endValue, uint256 pctProgress) public pure returns (uint256) {\n return GradualValueChange.interpolateValue(startValue, endValue, pctProgress);\n }\n\n function calculateValueChangeProgress(uint256 startTime, uint256 endTime) public view returns (uint256) {\n return GradualValueChange.calculateValueChangeProgress(startTime, endTime);\n }\n}\n"},"contracts/test/HardhatImports.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\n// This file is needed to compile artifacts from another repository using Hardhat.\nimport { VaultMock } from \"@balancer-labs/v3-vault/contracts/test/VaultMock.sol\";\nimport { BasicAuthorizerMock } from \"@balancer-labs/v3-vault/contracts/test/BasicAuthorizerMock.sol\";\nimport { VaultAdminMock } from \"@balancer-labs/v3-vault/contracts/test/VaultAdminMock.sol\";\nimport { VaultExtensionMock } from \"@balancer-labs/v3-vault/contracts/test/VaultExtensionMock.sol\";\nimport { ProtocolFeeControllerMock } from \"@balancer-labs/v3-vault/contracts/test/ProtocolFeeControllerMock.sol\";\nimport { RouterMock } from \"@balancer-labs/v3-vault/contracts/test/RouterMock.sol\";\nimport { BatchRouterMock } from \"@balancer-labs/v3-vault/contracts/test/BatchRouterMock.sol\";\nimport { BufferRouterMock } from \"@balancer-labs/v3-vault/contracts/test/BufferRouterMock.sol\";\nimport { PoolHooksMock } from \"@balancer-labs/v3-vault/contracts/test/PoolHooksMock.sol\";\nimport { RateProviderMock } from \"@balancer-labs/v3-vault/contracts/test/RateProviderMock.sol\";\n"},"contracts/test/WeightedBasePoolMathMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { WeightedMath } from \"@balancer-labs/v3-solidity-utils/contracts/math/WeightedMath.sol\";\nimport { Rounding } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { BasePoolMathMock } from \"@balancer-labs/v3-vault/contracts/test/BasePoolMathMock.sol\";\n\n// Mock Weighted5050 to test rounding in BasePoolMath for consistency with other implementations.\ncontract WeightedBasePoolMathMock is BasePoolMathMock {\n uint256[] public weights;\n\n constructor(uint256[] memory _weights) {\n weights = _weights;\n }\n\n function computeInvariant(\n uint256[] memory balancesLiveScaled18,\n Rounding rounding\n ) public view override returns (uint256) {\n if (rounding == Rounding.ROUND_DOWN) {\n return WeightedMath.computeInvariantDown(weights, balancesLiveScaled18);\n } else {\n return WeightedMath.computeInvariantUp(weights, balancesLiveScaled18);\n }\n }\n\n function computeBalance(\n uint256[] memory balancesLiveScaled18,\n uint256 tokenInIndex,\n uint256 invariantRatio\n ) external view override returns (uint256 newBalance) {\n return\n WeightedMath.computeBalanceOutGivenInvariant(\n balancesLiveScaled18[tokenInIndex],\n weights[tokenInIndex],\n invariantRatio\n );\n }\n}\n"},"contracts/test/WeightedMathMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { Rounding } from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { WeightedMath } from \"@balancer-labs/v3-solidity-utils/contracts/math/WeightedMath.sol\";\n\ncontract WeightedMathMock {\n function computeInvariant(\n uint256[] memory normalizedWeights,\n uint256[] memory balances,\n Rounding rounding\n ) external pure returns (uint256) {\n if (rounding == Rounding.ROUND_DOWN) {\n return WeightedMath.computeInvariantDown(normalizedWeights, balances);\n } else {\n return WeightedMath.computeInvariantUp(normalizedWeights, balances);\n }\n }\n\n function computeOutGivenExactIn(\n uint256 balanceIn,\n uint256 weightIn,\n uint256 balanceOut,\n uint256 weightOut,\n uint256 amountIn\n ) external pure returns (uint256) {\n return WeightedMath.computeOutGivenExactIn(balanceIn, weightIn, balanceOut, weightOut, amountIn);\n }\n\n function computeInGivenExactOut(\n uint256 balanceIn,\n uint256 weightIn,\n uint256 balanceOut,\n uint256 weightOut,\n uint256 amountOut\n ) external pure returns (uint256) {\n return WeightedMath.computeInGivenExactOut(balanceIn, weightIn, balanceOut, weightOut, amountOut);\n }\n}\n"},"contracts/test/WeightedPoolMock.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\n\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\n\nimport { WeightedPool } from \"../WeightedPool.sol\";\n\ncontract WeightedPoolMock is WeightedPool {\n // Local storage of weights, so that they can be changed for tests.\n uint256[] private _normalizedWeights;\n\n constructor(NewPoolParams memory params, IVault vault) WeightedPool(params, vault) {\n _normalizedWeights = new uint256[](params.numTokens);\n\n for (uint256 i = 0; i < params.numTokens; ++i) {\n _normalizedWeights[i] = params.normalizedWeights[i];\n }\n }\n\n function setNormalizedWeight(uint256 tokenIndex, uint256 newWeight) external {\n if (tokenIndex < _normalizedWeights.length) {\n _normalizedWeights[tokenIndex] = newWeight;\n }\n }\n\n // Helper for most common case of setting weights - for two token pools.\n function setNormalizedWeights(uint256[2] memory newWeights) external {\n require(newWeights[0] + newWeights[1] == FixedPoint.ONE, \"Weights don't total 1\");\n\n _normalizedWeights[0] = newWeights[0];\n _normalizedWeights[1] = newWeights[1];\n }\n\n function _getNormalizedWeight(uint256 tokenIndex) internal view override returns (uint256) {\n if (tokenIndex < _normalizedWeights.length) {\n return _normalizedWeights[tokenIndex];\n } else {\n revert IVaultErrors.InvalidToken();\n }\n }\n\n function _getNormalizedWeights() internal view override returns (uint256[] memory) {\n return _normalizedWeights;\n }\n}\n"},"contracts/WeightedPool.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { ISwapFeePercentageBounds } from \"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\";\nimport {\n IUnbalancedLiquidityInvariantRatioBounds\n} from \"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\";\nimport { IVaultErrors } from \"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\";\nimport { IBasePool } from \"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport {\n IWeightedPool,\n WeightedPoolDynamicData,\n WeightedPoolImmutableData\n} from \"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol\";\nimport \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { InputHelpers } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\";\nimport { WeightedMath } from \"@balancer-labs/v3-solidity-utils/contracts/math/WeightedMath.sol\";\nimport { BalancerPoolToken } from \"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol\";\nimport { FixedPoint } from \"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\";\nimport { Version } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\";\nimport { PoolInfo } from \"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol\";\n\n/**\n * @notice Standard Balancer Weighted Pool, with fixed weights.\n * @dev Weighted Pools are designed for uncorrelated assets, and use `WeightedMath` (from Balancer v1 and v2)\n * to compute the price curve.\n *\n * There can be up to 8 tokens in a weighted pool (same as v2), and the normalized weights (expressed as 18-decimal\n * floating point numbers), must sum to FixedPoint.ONE. Weights cannot be changed after deployment.\n *\n * The swap fee percentage is bounded by minimum and maximum values (same as were used in v2).\n */\ncontract WeightedPool is IWeightedPool, BalancerPoolToken, PoolInfo, Version {\n /// @dev Struct with data for deploying a new WeightedPool. `normalizedWeights` length must match `numTokens`.\n struct NewPoolParams {\n string name;\n string symbol;\n uint256 numTokens;\n uint256[] normalizedWeights;\n string version;\n }\n\n // Fees are 18-decimal, floating point values, which will be stored in the Vault using 24 bits.\n // This means they have 0.00001% resolution (i.e., any non-zero bits < 1e11 will cause precision loss).\n // Minimum values help make the math well-behaved (i.e., the swap fee should overwhelm any rounding error).\n // Maximum values protect users by preventing permissioned actors from setting excessively high swap fees.\n uint256 private constant _MIN_SWAP_FEE_PERCENTAGE = 0.001e16; // 0.001%\n uint256 private constant _MAX_SWAP_FEE_PERCENTAGE = 10e16; // 10%\n\n // A minimum normalized weight imposes a maximum weight ratio. We need this due to limitations in the\n // implementation of the fixed point power function, as these ratios are often exponents.\n uint256 internal constant _MIN_WEIGHT = 1e16; // 1%\n\n uint256 private immutable _totalTokens;\n\n uint256 internal immutable _normalizedWeight0;\n uint256 internal immutable _normalizedWeight1;\n uint256 internal immutable _normalizedWeight2;\n uint256 internal immutable _normalizedWeight3;\n uint256 internal immutable _normalizedWeight4;\n uint256 internal immutable _normalizedWeight5;\n uint256 internal immutable _normalizedWeight6;\n uint256 internal immutable _normalizedWeight7;\n\n /**\n * @notice `getRate` from `IRateProvider` was called on a Weighted Pool.\n * @dev It is not safe to nest Weighted Pools as WITH_RATE tokens in other pools, where they function as their own\n * rate provider. The default `getRate` implementation from `BalancerPoolToken` computes the BPT rate using the\n * invariant, which has a non-trivial (and non-linear) error. Without the ability to specify a rounding direction,\n * the rate could be manipulable.\n *\n * It is fine to nest Weighted Pools as STANDARD tokens, or to use them with external rate providers that are\n * stable and have at most 1 wei of rounding error (e.g., oracle-based).\n */\n error WeightedPoolBptRateUnsupported();\n\n constructor(\n NewPoolParams memory params,\n IVault vault\n ) BalancerPoolToken(vault, params.name, params.symbol) PoolInfo(vault) Version(params.version) {\n _totalTokens = params.numTokens;\n InputHelpers.ensureInputLengthMatch(_totalTokens, params.normalizedWeights.length);\n\n // Ensure each normalized weight is above the minimum.\n uint256 normalizedSum = 0;\n for (uint8 i = 0; i < _totalTokens; ++i) {\n uint256 normalizedWeight = params.normalizedWeights[i];\n\n if (normalizedWeight < _MIN_WEIGHT) {\n revert MinWeight();\n }\n normalizedSum = normalizedSum + normalizedWeight;\n\n // prettier-ignore\n if (i == 0) { _normalizedWeight0 = normalizedWeight; }\n else if (i == 1) { _normalizedWeight1 = normalizedWeight; }\n else if (i == 2) { _normalizedWeight2 = normalizedWeight; }\n else if (i == 3) { _normalizedWeight3 = normalizedWeight; }\n else if (i == 4) { _normalizedWeight4 = normalizedWeight; }\n else if (i == 5) { _normalizedWeight5 = normalizedWeight; }\n else if (i == 6) { _normalizedWeight6 = normalizedWeight; }\n else if (i == 7) { _normalizedWeight7 = normalizedWeight; }\n }\n\n // Ensure that the normalized weights sum to ONE.\n if (normalizedSum != FixedPoint.ONE) {\n revert NormalizedWeightInvariant();\n }\n }\n\n /// @inheritdoc IBasePool\n function computeInvariant(uint256[] memory balancesLiveScaled18, Rounding rounding) public view returns (uint256) {\n function(uint256[] memory, uint256[] memory) internal pure returns (uint256) _upOrDown = rounding ==\n Rounding.ROUND_UP\n ? WeightedMath.computeInvariantUp\n : WeightedMath.computeInvariantDown;\n\n return _upOrDown(_getNormalizedWeights(), balancesLiveScaled18);\n }\n\n /// @inheritdoc IBasePool\n function computeBalance(\n uint256[] memory balancesLiveScaled18,\n uint256 tokenInIndex,\n uint256 invariantRatio\n ) external view returns (uint256 newBalance) {\n return\n WeightedMath.computeBalanceOutGivenInvariant(\n balancesLiveScaled18[tokenInIndex],\n _getNormalizedWeight(tokenInIndex),\n invariantRatio\n );\n }\n\n /// @inheritdoc IWeightedPool\n function getNormalizedWeights() external view returns (uint256[] memory) {\n return _getNormalizedWeights();\n }\n\n /// @inheritdoc IBasePool\n function onSwap(PoolSwapParams memory request) public view virtual onlyVault returns (uint256) {\n uint256 balanceTokenInScaled18 = request.balancesScaled18[request.indexIn];\n uint256 balanceTokenOutScaled18 = request.balancesScaled18[request.indexOut];\n\n if (request.kind == SwapKind.EXACT_IN) {\n uint256 amountOutScaled18 = WeightedMath.computeOutGivenExactIn(\n balanceTokenInScaled18,\n _getNormalizedWeight(request.indexIn),\n balanceTokenOutScaled18,\n _getNormalizedWeight(request.indexOut),\n request.amountGivenScaled18\n );\n\n return amountOutScaled18;\n } else {\n uint256 amountInScaled18 = WeightedMath.computeInGivenExactOut(\n balanceTokenInScaled18,\n _getNormalizedWeight(request.indexIn),\n balanceTokenOutScaled18,\n _getNormalizedWeight(request.indexOut),\n request.amountGivenScaled18\n );\n\n // Fees are added after scaling happens, to reduce the complexity of the rounding direction analysis.\n return amountInScaled18;\n }\n }\n\n function _getNormalizedWeight(uint256 tokenIndex) internal view virtual returns (uint256) {\n // prettier-ignore\n if (tokenIndex == 0) { return _normalizedWeight0; }\n else if (tokenIndex == 1) { return _normalizedWeight1; }\n else if (tokenIndex == 2) { return _normalizedWeight2; }\n else if (tokenIndex == 3) { return _normalizedWeight3; }\n else if (tokenIndex == 4) { return _normalizedWeight4; }\n else if (tokenIndex == 5) { return _normalizedWeight5; }\n else if (tokenIndex == 6) { return _normalizedWeight6; }\n else if (tokenIndex == 7) { return _normalizedWeight7; }\n else {\n revert IVaultErrors.InvalidToken();\n }\n }\n\n function _getNormalizedWeights() internal view virtual returns (uint256[] memory) {\n uint256 totalTokens = _totalTokens;\n uint256[] memory normalizedWeights = new uint256[](totalTokens);\n\n // prettier-ignore\n {\n normalizedWeights[0] = _normalizedWeight0;\n normalizedWeights[1] = _normalizedWeight1;\n if (totalTokens > 2) { normalizedWeights[2] = _normalizedWeight2; } else { return normalizedWeights; }\n if (totalTokens > 3) { normalizedWeights[3] = _normalizedWeight3; } else { return normalizedWeights; }\n if (totalTokens > 4) { normalizedWeights[4] = _normalizedWeight4; } else { return normalizedWeights; }\n if (totalTokens > 5) { normalizedWeights[5] = _normalizedWeight5; } else { return normalizedWeights; }\n if (totalTokens > 6) { normalizedWeights[6] = _normalizedWeight6; } else { return normalizedWeights; }\n if (totalTokens > 7) { normalizedWeights[7] = _normalizedWeight7; }\n }\n\n return normalizedWeights;\n }\n\n /// @inheritdoc ISwapFeePercentageBounds\n function getMinimumSwapFeePercentage() external pure returns (uint256) {\n return _MIN_SWAP_FEE_PERCENTAGE;\n }\n\n /// @inheritdoc ISwapFeePercentageBounds\n function getMaximumSwapFeePercentage() external pure returns (uint256) {\n return _MAX_SWAP_FEE_PERCENTAGE;\n }\n\n /// @inheritdoc IUnbalancedLiquidityInvariantRatioBounds\n function getMinimumInvariantRatio() external pure returns (uint256) {\n return WeightedMath._MIN_INVARIANT_RATIO;\n }\n\n /// @inheritdoc IUnbalancedLiquidityInvariantRatioBounds\n function getMaximumInvariantRatio() external pure returns (uint256) {\n return WeightedMath._MAX_INVARIANT_RATIO;\n }\n\n /// @inheritdoc IWeightedPool\n function getWeightedPoolDynamicData() external view virtual returns (WeightedPoolDynamicData memory data) {\n data.balancesLiveScaled18 = _vault.getCurrentLiveBalances(address(this));\n (, data.tokenRates) = _vault.getPoolTokenRates(address(this));\n data.staticSwapFeePercentage = _vault.getStaticSwapFeePercentage((address(this)));\n data.totalSupply = totalSupply();\n\n PoolConfig memory poolConfig = _vault.getPoolConfig(address(this));\n data.isPoolInitialized = poolConfig.isPoolInitialized;\n data.isPoolPaused = poolConfig.isPoolPaused;\n data.isPoolInRecoveryMode = poolConfig.isPoolInRecoveryMode;\n }\n\n /// @inheritdoc IWeightedPool\n function getWeightedPoolImmutableData() external view virtual returns (WeightedPoolImmutableData memory data) {\n data.tokens = _vault.getPoolTokens(address(this));\n (data.decimalScalingFactors, ) = _vault.getPoolTokenRates(address(this));\n data.normalizedWeights = _getNormalizedWeights();\n }\n\n /// @inheritdoc IRateProvider\n function getRate() public pure override returns (uint256) {\n revert WeightedPoolBptRateUnsupported();\n }\n}\n"},"contracts/WeightedPool8020Factory.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IERC20Metadata } from \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\";\n\nimport { IPoolVersion } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IPoolVersion.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { BasePoolFactory } from \"@balancer-labs/v3-pool-utils/contracts/BasePoolFactory.sol\";\nimport { Version } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\";\n\nimport { WeightedPool } from \"./WeightedPool.sol\";\n\n/**\n * @notice Weighted Pool factory for 80/20 pools.\n * @dev These are standard Weighted Pools, but constrained to two tokens and 80/20 weights, greatly simplifying their\n * configuration. This is an example of a customized factory, designed to deploy special-purpose pools.\n *\n * It does not allow hooks, and has a custom salt computation that does not consider the deployer address.\n *\n * See https://medium.com/balancer-protocol/the-8020-initiative-64a7a6cab976 for one use case, and\n * https://medium.com/balancer-protocol/80-20-balancer-pools-ad7fed816c8d for a general discussion of the benefits of\n * 80/20 pools.\n */\ncontract WeightedPool8020Factory is IPoolVersion, BasePoolFactory, Version {\n uint256 private constant _EIGHTY = 80e16; // 80%\n uint256 private constant _TWENTY = 20e16; // 20%\n\n string private _poolVersion;\n\n constructor(\n IVault vault,\n uint32 pauseWindowDuration,\n string memory factoryVersion,\n string memory poolVersion\n ) BasePoolFactory(vault, pauseWindowDuration, type(WeightedPool).creationCode) Version(factoryVersion) {\n _poolVersion = poolVersion;\n }\n\n /// @inheritdoc IPoolVersion\n function getPoolVersion() external view returns (string memory) {\n return _poolVersion;\n }\n\n /**\n * @notice Deploys a new `WeightedPool`.\n * @dev Since tokens must be sorted, pass in explicit 80/20 token config structs. This assumes both tokens support\n * the `IERC20Metadata` interface with `symbol` that returns a string. Otherwise, use the regular\n * `WeightedPoolFactory`.\n *\n * @param highWeightTokenConfig The token configuration of the high weight token\n * @param lowWeightTokenConfig The token configuration of the low weight token\n * @param roleAccounts Addresses the Vault will allow to change certain pool settings\n * @param swapFeePercentage Initial swap fee percentage\n * @return pool The pool address\n */\n function create(\n TokenConfig memory highWeightTokenConfig,\n TokenConfig memory lowWeightTokenConfig,\n PoolRoleAccounts memory roleAccounts,\n uint256 swapFeePercentage\n ) external returns (address pool) {\n if (roleAccounts.poolCreator != address(0)) {\n revert StandardPoolWithCreator();\n }\n\n IERC20 highWeightToken = highWeightTokenConfig.token;\n IERC20 lowWeightToken = lowWeightTokenConfig.token;\n\n TokenConfig[] memory tokenConfig = new TokenConfig[](2);\n uint256[] memory weights = new uint256[](2);\n\n // Tokens must be sorted.\n (uint256 highWeightTokenIdx, uint256 lowWeightTokenIdx) = highWeightToken > lowWeightToken ? (1, 0) : (0, 1);\n\n weights[highWeightTokenIdx] = _EIGHTY;\n weights[lowWeightTokenIdx] = _TWENTY;\n\n tokenConfig[highWeightTokenIdx] = highWeightTokenConfig;\n tokenConfig[lowWeightTokenIdx] = lowWeightTokenConfig;\n\n bytes memory constructorArgs = _calculateConstructorArgs(highWeightToken, lowWeightToken);\n bytes32 salt = _calculateSalt(highWeightToken, lowWeightToken);\n\n pool = _create(constructorArgs, salt);\n\n // Using empty pool hooks for standard 80/20 pool.\n _registerPoolWithVault(\n pool,\n tokenConfig,\n swapFeePercentage,\n false, // not exempt from protocol fees\n roleAccounts,\n getDefaultPoolHooksContract(),\n getDefaultLiquidityManagement()\n );\n }\n\n /**\n * @notice Gets the address of the pool with the respective tokens and weights.\n * @param highWeightToken The token with 80% weight in the pool.\n * @param lowWeightToken The token with 20% weight in the pool.\n * @return pool Address of the pool\n */\n function getPool(IERC20 highWeightToken, IERC20 lowWeightToken) external view returns (address pool) {\n bytes memory constructorArgs = _calculateConstructorArgs(highWeightToken, lowWeightToken);\n bytes32 salt = _calculateSalt(highWeightToken, lowWeightToken);\n\n pool = getDeploymentAddress(constructorArgs, salt);\n }\n\n function _calculateSalt(IERC20 highWeightToken, IERC20 lowWeightToken) internal view returns (bytes32 salt) {\n salt = keccak256(abi.encode(block.chainid, highWeightToken, lowWeightToken));\n }\n\n function _calculateConstructorArgs(\n IERC20 highWeightToken,\n IERC20 lowWeightToken\n ) private view returns (bytes memory constructorArgs) {\n // Tokens must be sorted.\n (uint256 highWeightTokenIdx, uint256 lowWeightTokenIdx) = highWeightToken > lowWeightToken ? (1, 0) : (0, 1);\n\n string memory highWeightTokenSymbol = IERC20Metadata(address(highWeightToken)).symbol();\n string memory lowWeightTokenSymbol = IERC20Metadata(address(lowWeightToken)).symbol();\n\n uint256[] memory weights = new uint256[](2);\n weights[highWeightTokenIdx] = _EIGHTY;\n weights[lowWeightTokenIdx] = _TWENTY;\n\n constructorArgs = abi.encode(\n WeightedPool.NewPoolParams({\n name: string.concat(\"Balancer 80 \", highWeightTokenSymbol, \" 20 \", lowWeightTokenSymbol),\n symbol: string.concat(\"B-80\", highWeightTokenSymbol, \"-20\", lowWeightTokenSymbol),\n numTokens: 2,\n normalizedWeights: weights,\n version: _poolVersion\n }),\n getVault()\n );\n }\n\n /**\n * @dev By default, the BasePoolFactory adds the sender and chainId to compute a final salt.\n * Override this to make it use the canonical address salt directly.\n */\n function _computeFinalSalt(bytes32 salt) internal pure override returns (bytes32) {\n return salt;\n }\n}\n"},"contracts/WeightedPoolFactory.sol":{"content":"// SPDX-License-Identifier: GPL-3.0-or-later\n\npragma solidity ^0.8.24;\n\nimport { IPoolVersion } from \"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IPoolVersion.sol\";\nimport { IVault } from \"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\";\nimport {\n TokenConfig,\n PoolRoleAccounts,\n LiquidityManagement\n} from \"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\";\n\nimport { BasePoolFactory } from \"@balancer-labs/v3-pool-utils/contracts/BasePoolFactory.sol\";\nimport { Version } from \"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\";\n\nimport { WeightedPool } from \"./WeightedPool.sol\";\n\n/**\n * @notice General Weighted Pool factory\n * @dev This is the most general factory, which allows up to eight tokens and arbitrary weights.\n */\ncontract WeightedPoolFactory is IPoolVersion, BasePoolFactory, Version {\n string private _poolVersion;\n\n constructor(\n IVault vault,\n uint32 pauseWindowDuration,\n string memory factoryVersion,\n string memory poolVersion\n ) BasePoolFactory(vault, pauseWindowDuration, type(WeightedPool).creationCode) Version(factoryVersion) {\n _poolVersion = poolVersion;\n }\n\n /// @inheritdoc IPoolVersion\n function getPoolVersion() external view returns (string memory) {\n return _poolVersion;\n }\n\n /**\n * @notice Deploys a new `WeightedPool`.\n * @dev Tokens must be sorted for pool registration.\n * @param name The name of the pool\n * @param symbol The symbol of the pool\n * @param tokens An array of descriptors for the tokens the pool will manage\n * @param normalizedWeights The pool weights (must add to FixedPoint.ONE)\n * @param roleAccounts Addresses the Vault will allow to change certain pool settings\n * @param swapFeePercentage Initial swap fee percentage\n * @param poolHooksContract Contract that implements the hooks for the pool\n * @param enableDonation If true, the pool will support the donation add liquidity mechanism\n * @param disableUnbalancedLiquidity If true, only proportional add and remove liquidity are accepted\n * @param salt The salt value that will be passed to create2 deployment\n */\n function create(\n string memory name,\n string memory symbol,\n TokenConfig[] memory tokens,\n uint256[] memory normalizedWeights,\n PoolRoleAccounts memory roleAccounts,\n uint256 swapFeePercentage,\n address poolHooksContract,\n bool enableDonation,\n bool disableUnbalancedLiquidity,\n bytes32 salt\n ) external returns (address pool) {\n LiquidityManagement memory liquidityManagement = getDefaultLiquidityManagement();\n liquidityManagement.enableDonation = enableDonation;\n // disableUnbalancedLiquidity must be set to true if a hook has the flag enableHookAdjustedAmounts = true.\n liquidityManagement.disableUnbalancedLiquidity = disableUnbalancedLiquidity;\n\n pool = _create(\n abi.encode(\n WeightedPool.NewPoolParams({\n name: name,\n symbol: symbol,\n numTokens: tokens.length,\n normalizedWeights: normalizedWeights,\n version: _poolVersion\n }),\n getVault()\n ),\n salt\n );\n\n _registerPoolWithVault(\n pool,\n tokens,\n swapFeePercentage,\n false, // not exempt from protocol fees\n roleAccounts,\n poolHooksContract,\n liquidityManagement\n );\n }\n}\n"},"permit2/src/interfaces/IAllowanceTransfer.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IEIP712} from \"./IEIP712.sol\";\n\n/// @title AllowanceTransfer\n/// @notice Handles ERC20 token permissions through signature based allowance setting and ERC20 token transfers by checking allowed amounts\n/// @dev Requires user's token approval on the Permit2 contract\ninterface IAllowanceTransfer is IEIP712 {\n /// @notice Thrown when an allowance on a token has expired.\n /// @param deadline The timestamp at which the allowed amount is no longer valid\n error AllowanceExpired(uint256 deadline);\n\n /// @notice Thrown when an allowance on a token has been depleted.\n /// @param amount The maximum amount allowed\n error InsufficientAllowance(uint256 amount);\n\n /// @notice Thrown when too many nonces are invalidated.\n error ExcessiveInvalidation();\n\n /// @notice Emits an event when the owner successfully invalidates an ordered nonce.\n event NonceInvalidation(\n address indexed owner, address indexed token, address indexed spender, uint48 newNonce, uint48 oldNonce\n );\n\n /// @notice Emits an event when the owner successfully sets permissions on a token for the spender.\n event Approval(\n address indexed owner, address indexed token, address indexed spender, uint160 amount, uint48 expiration\n );\n\n /// @notice Emits an event when the owner successfully sets permissions using a permit signature on a token for the spender.\n event Permit(\n address indexed owner,\n address indexed token,\n address indexed spender,\n uint160 amount,\n uint48 expiration,\n uint48 nonce\n );\n\n /// @notice Emits an event when the owner sets the allowance back to 0 with the lockdown function.\n event Lockdown(address indexed owner, address token, address spender);\n\n /// @notice The permit data for a token\n struct PermitDetails {\n // ERC20 token address\n address token;\n // the maximum amount allowed to spend\n uint160 amount;\n // timestamp at which a spender's token allowances become invalid\n uint48 expiration;\n // an incrementing value indexed per owner,token,and spender for each signature\n uint48 nonce;\n }\n\n /// @notice The permit message signed for a single token allowance\n struct PermitSingle {\n // the permit data for a single token alownce\n PermitDetails details;\n // address permissioned on the allowed tokens\n address spender;\n // deadline on the permit signature\n uint256 sigDeadline;\n }\n\n /// @notice The permit message signed for multiple token allowances\n struct PermitBatch {\n // the permit data for multiple token allowances\n PermitDetails[] details;\n // address permissioned on the allowed tokens\n address spender;\n // deadline on the permit signature\n uint256 sigDeadline;\n }\n\n /// @notice The saved permissions\n /// @dev This info is saved per owner, per token, per spender and all signed over in the permit message\n /// @dev Setting amount to type(uint160).max sets an unlimited approval\n struct PackedAllowance {\n // amount allowed\n uint160 amount;\n // permission expiry\n uint48 expiration;\n // an incrementing value indexed per owner,token,and spender for each signature\n uint48 nonce;\n }\n\n /// @notice A token spender pair.\n struct TokenSpenderPair {\n // the token the spender is approved\n address token;\n // the spender address\n address spender;\n }\n\n /// @notice Details for a token transfer.\n struct AllowanceTransferDetails {\n // the owner of the token\n address from;\n // the recipient of the token\n address to;\n // the amount of the token\n uint160 amount;\n // the token to be transferred\n address token;\n }\n\n /// @notice A mapping from owner address to token address to spender address to PackedAllowance struct, which contains details and conditions of the approval.\n /// @notice The mapping is indexed in the above order see: allowance[ownerAddress][tokenAddress][spenderAddress]\n /// @dev The packed slot holds the allowed amount, expiration at which the allowed amount is no longer valid, and current nonce thats updated on any signature based approvals.\n function allowance(address user, address token, address spender)\n external\n view\n returns (uint160 amount, uint48 expiration, uint48 nonce);\n\n /// @notice Approves the spender to use up to amount of the specified token up until the expiration\n /// @param token The token to approve\n /// @param spender The spender address to approve\n /// @param amount The approved amount of the token\n /// @param expiration The timestamp at which the approval is no longer valid\n /// @dev The packed allowance also holds a nonce, which will stay unchanged in approve\n /// @dev Setting amount to type(uint160).max sets an unlimited approval\n function approve(address token, address spender, uint160 amount, uint48 expiration) external;\n\n /// @notice Permit a spender to a given amount of the owners token via the owner's EIP-712 signature\n /// @dev May fail if the owner's nonce was invalidated in-flight by invalidateNonce\n /// @param owner The owner of the tokens being approved\n /// @param permitSingle Data signed over by the owner specifying the terms of approval\n /// @param signature The owner's signature over the permit data\n function permit(address owner, PermitSingle memory permitSingle, bytes calldata signature) external;\n\n /// @notice Permit a spender to the signed amounts of the owners tokens via the owner's EIP-712 signature\n /// @dev May fail if the owner's nonce was invalidated in-flight by invalidateNonce\n /// @param owner The owner of the tokens being approved\n /// @param permitBatch Data signed over by the owner specifying the terms of approval\n /// @param signature The owner's signature over the permit data\n function permit(address owner, PermitBatch memory permitBatch, bytes calldata signature) external;\n\n /// @notice Transfer approved tokens from one address to another\n /// @param from The address to transfer from\n /// @param to The address of the recipient\n /// @param amount The amount of the token to transfer\n /// @param token The token address to transfer\n /// @dev Requires the from address to have approved at least the desired amount\n /// of tokens to msg.sender.\n function transferFrom(address from, address to, uint160 amount, address token) external;\n\n /// @notice Transfer approved tokens in a batch\n /// @param transferDetails Array of owners, recipients, amounts, and tokens for the transfers\n /// @dev Requires the from addresses to have approved at least the desired amount\n /// of tokens to msg.sender.\n function transferFrom(AllowanceTransferDetails[] calldata transferDetails) external;\n\n /// @notice Enables performing a \"lockdown\" of the sender's Permit2 identity\n /// by batch revoking approvals\n /// @param approvals Array of approvals to revoke.\n function lockdown(TokenSpenderPair[] calldata approvals) external;\n\n /// @notice Invalidate nonces for a given (token, spender) pair\n /// @param token The token to invalidate nonces for\n /// @param spender The spender to invalidate nonces for\n /// @param newNonce The new nonce to set. Invalidates all nonces less than it.\n /// @dev Can't invalidate more than 2**16 nonces per transaction.\n function invalidateNonces(address token, address spender, uint48 newNonce) external;\n}\n"},"permit2/src/interfaces/IEIP712.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IEIP712 {\n function DOMAIN_SEPARATOR() external view returns (bytes32);\n}\n"},"permit2/src/interfaces/IPermit2.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {ISignatureTransfer} from \"./ISignatureTransfer.sol\";\nimport {IAllowanceTransfer} from \"./IAllowanceTransfer.sol\";\n\n/// @notice Permit2 handles signature-based transfers in SignatureTransfer and allowance-based transfers in AllowanceTransfer.\n/// @dev Users must approve Permit2 before calling any of the transfer functions.\ninterface IPermit2 is ISignatureTransfer, IAllowanceTransfer {\n// IPermit2 unifies the two interfaces so users have maximal flexibility with their approval.\n}\n"},"permit2/src/interfaces/ISignatureTransfer.sol":{"content":"// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport {IEIP712} from \"./IEIP712.sol\";\n\n/// @title SignatureTransfer\n/// @notice Handles ERC20 token transfers through signature based actions\n/// @dev Requires user's token approval on the Permit2 contract\ninterface ISignatureTransfer is IEIP712 {\n /// @notice Thrown when the requested amount for a transfer is larger than the permissioned amount\n /// @param maxAmount The maximum amount a spender can request to transfer\n error InvalidAmount(uint256 maxAmount);\n\n /// @notice Thrown when the number of tokens permissioned to a spender does not match the number of tokens being transferred\n /// @dev If the spender does not need to transfer the number of tokens permitted, the spender can request amount 0 to be transferred\n error LengthMismatch();\n\n /// @notice Emits an event when the owner successfully invalidates an unordered nonce.\n event UnorderedNonceInvalidation(address indexed owner, uint256 word, uint256 mask);\n\n /// @notice The token and amount details for a transfer signed in the permit transfer signature\n struct TokenPermissions {\n // ERC20 token address\n address token;\n // the maximum amount that can be spent\n uint256 amount;\n }\n\n /// @notice The signed permit message for a single token transfer\n struct PermitTransferFrom {\n TokenPermissions permitted;\n // a unique value for every token owner's signature to prevent signature replays\n uint256 nonce;\n // deadline on the permit signature\n uint256 deadline;\n }\n\n /// @notice Specifies the recipient address and amount for batched transfers.\n /// @dev Recipients and amounts correspond to the index of the signed token permissions array.\n /// @dev Reverts if the requested amount is greater than the permitted signed amount.\n struct SignatureTransferDetails {\n // recipient address\n address to;\n // spender requested amount\n uint256 requestedAmount;\n }\n\n /// @notice Used to reconstruct the signed permit message for multiple token transfers\n /// @dev Do not need to pass in spender address as it is required that it is msg.sender\n /// @dev Note that a user still signs over a spender address\n struct PermitBatchTransferFrom {\n // the tokens and corresponding amounts permitted for a transfer\n TokenPermissions[] permitted;\n // a unique value for every token owner's signature to prevent signature replays\n uint256 nonce;\n // deadline on the permit signature\n uint256 deadline;\n }\n\n /// @notice A map from token owner address and a caller specified word index to a bitmap. Used to set bits in the bitmap to prevent against signature replay protection\n /// @dev Uses unordered nonces so that permit messages do not need to be spent in a certain order\n /// @dev The mapping is indexed first by the token owner, then by an index specified in the nonce\n /// @dev It returns a uint256 bitmap\n /// @dev The index, or wordPosition is capped at type(uint248).max\n function nonceBitmap(address, uint256) external view returns (uint256);\n\n /// @notice Transfers a token using a signed permit message\n /// @dev Reverts if the requested amount is greater than the permitted signed amount\n /// @param permit The permit data signed over by the owner\n /// @param owner The owner of the tokens to transfer\n /// @param transferDetails The spender's requested transfer details for the permitted token\n /// @param signature The signature to verify\n function permitTransferFrom(\n PermitTransferFrom memory permit,\n SignatureTransferDetails calldata transferDetails,\n address owner,\n bytes calldata signature\n ) external;\n\n /// @notice Transfers a token using a signed permit message\n /// @notice Includes extra data provided by the caller to verify signature over\n /// @dev The witness type string must follow EIP712 ordering of nested structs and must include the TokenPermissions type definition\n /// @dev Reverts if the requested amount is greater than the permitted signed amount\n /// @param permit The permit data signed over by the owner\n /// @param owner The owner of the tokens to transfer\n /// @param transferDetails The spender's requested transfer details for the permitted token\n /// @param witness Extra data to include when checking the user signature\n /// @param witnessTypeString The EIP-712 type definition for remaining string stub of the typehash\n /// @param signature The signature to verify\n function permitWitnessTransferFrom(\n PermitTransferFrom memory permit,\n SignatureTransferDetails calldata transferDetails,\n address owner,\n bytes32 witness,\n string calldata witnessTypeString,\n bytes calldata signature\n ) external;\n\n /// @notice Transfers multiple tokens using a signed permit message\n /// @param permit The permit data signed over by the owner\n /// @param owner The owner of the tokens to transfer\n /// @param transferDetails Specifies the recipient and requested amount for the token transfer\n /// @param signature The signature to verify\n function permitTransferFrom(\n PermitBatchTransferFrom memory permit,\n SignatureTransferDetails[] calldata transferDetails,\n address owner,\n bytes calldata signature\n ) external;\n\n /// @notice Transfers multiple tokens using a signed permit message\n /// @dev The witness type string must follow EIP712 ordering of nested structs and must include the TokenPermissions type definition\n /// @notice Includes extra data provided by the caller to verify signature over\n /// @param permit The permit data signed over by the owner\n /// @param owner The owner of the tokens to transfer\n /// @param transferDetails Specifies the recipient and requested amount for the token transfer\n /// @param witness Extra data to include when checking the user signature\n /// @param witnessTypeString The EIP-712 type definition for remaining string stub of the typehash\n /// @param signature The signature to verify\n function permitWitnessTransferFrom(\n PermitBatchTransferFrom memory permit,\n SignatureTransferDetails[] calldata transferDetails,\n address owner,\n bytes32 witness,\n string calldata witnessTypeString,\n bytes calldata signature\n ) external;\n\n /// @notice Invalidates the bits specified in mask for the bitmap at the word position\n /// @dev The wordPos is maxed at type(uint248).max\n /// @param wordPos A number to index the nonceBitmap at\n /// @param mask A bitmap masked against msg.sender's current bitmap at the word position\n function invalidateUnorderedNonces(uint256 wordPos, uint256 mask) external;\n}\n"}},"settings":{"viaIR":true,"evmVersion":"cancun","optimizer":{"enabled":true,"runs":9999,"details":{"yulDetails":{"optimizerSteps":"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu"}}},"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"],"":["ast"]}}}},"output":{"errors":[{"component":"general","errorCode":"2394","formattedMessage":"Warning: Transient storage as defined by EIP-1153 can break the composability of smart contracts: Since transient storage is cleared only at the end of the transaction and not at the end of the outermost call frame to the contract within a transaction, your contract may unintentionally misbehave when invoked multiple times in a complex transaction. To avoid this, be sure to clear all transient storage at the end of any call to your contract. The use of transient storage for reentrancy guards that are cleared at the end of the call is safe.\n --> @balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol:74:13:\n |\n74 | tstore(slot, value)\n | ^^^^^^\n\n","message":"Transient storage as defined by EIP-1153 can break the composability of smart contracts: Since transient storage is cleared only at the end of the transaction and not at the end of the outermost call frame to the contract within a transaction, your contract may unintentionally misbehave when invoked multiple times in a complex transaction. To avoid this, be sure to clear all transient storage at the end of any call to your contract. The use of transient storage for reentrancy guards that are cleared at the end of the call is safe.","severity":"warning","sourceLocation":{"end":2572,"file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","start":2566},"type":"Warning"},{"component":"general","errorCode":"5574","formattedMessage":"Warning: Contract code size is 27392 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low \"runs\" value!), turning off revert strings, or using libraries.\n --> @balancer-labs/v3-vault/contracts/Vault.sol:40:1:\n |\n40 | contract Vault is IVaultMain, VaultCommon, Proxy {\n | ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"Contract code size is 27392 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low \"runs\" value!), turning off revert strings, or using libraries.","severity":"warning","sourceLocation":{"end":82098,"file":"@balancer-labs/v3-vault/contracts/Vault.sol","start":2550},"type":"Warning"},{"component":"general","errorCode":"5574","formattedMessage":"Warning: Contract code size is 27490 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low \"runs\" value!), turning off revert strings, or using libraries.\n --> @balancer-labs/v3-vault/contracts/test/RouterMock.sol:22:1:\n |\n22 | contract RouterMock is Router {\n | ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"Contract code size is 27490 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low \"runs\" value!), turning off revert strings, or using libraries.","severity":"warning","sourceLocation":{"end":8785,"file":"@balancer-labs/v3-vault/contracts/test/RouterMock.sol","start":978},"type":"Warning"},{"component":"general","errorCode":"5574","formattedMessage":"Warning: Contract code size is 51075 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low \"runs\" value!), turning off revert strings, or using libraries.\n --> @balancer-labs/v3-vault/contracts/test/VaultMock.sol:44:1:\n |\n44 | contract VaultMock is IVaultMainMock, Vault {\n | ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"Contract code size is 51075 bytes and exceeds 24576 bytes (a limit introduced in Spurious Dragon). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low \"runs\" value!), turning off revert strings, or using libraries.","severity":"warning","sourceLocation":{"end":32305,"file":"@balancer-labs/v3-vault/contracts/test/VaultMock.sol","start":2335},"type":"Warning"},{"component":"general","errorCode":"3860","formattedMessage":"Warning: Contract initcode size is 73962 bytes and exceeds 49152 bytes (a limit introduced in Shanghai). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low \"runs\" value!), turning off revert strings, or using libraries.\n --> @balancer-labs/v3-vault/contracts/test/VaultMock.sol:44:1:\n |\n44 | contract VaultMock is IVaultMainMock, Vault {\n | ^ (Relevant source part starts here and spans across multiple lines).\n\n","message":"Contract initcode size is 73962 bytes and exceeds 49152 bytes (a limit introduced in Shanghai). This contract may not be deployable on Mainnet. Consider enabling the optimizer (with a low \"runs\" value!), turning off revert strings, or using libraries.","severity":"warning","sourceLocation":{"end":32305,"file":"@balancer-labs/v3-vault/contracts/test/VaultMock.sol","start":2335},"type":"Warning"}],"sources":{"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol","exportedSymbols":{"IERC20":[40109],"IPoolInfo":[54],"TokenInfo":[4704]},"id":55,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:0"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":3,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":55,"sourceUnit":40110,"src":"72:72:0","symbolAliases":[{"foreign":{"id":2,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"81:6:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"../vault/VaultTypes.sol","id":5,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":55,"sourceUnit":4872,"src":"146:52:0","symbolAliases":[{"foreign":{"id":4,"name":"TokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4704,"src":"155:9:0","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IPoolInfo","contractDependencies":[],"contractKind":"interface","documentation":{"id":6,"nodeType":"StructuredDocumentation","src":"200:203:0","text":" @notice Convenience interface for pools, to get easy access to information stored in the Vault.\n Intended mostly for off-chain requests; pools do not need to implement this to work properly."},"fullyImplemented":false,"id":54,"linearizedBaseContracts":[54],"name":"IPoolInfo","nameLocation":"414:9:0","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":7,"nodeType":"StructuredDocumentation","src":"430:145:0","text":" @notice Gets the tokens registered in the pool.\n @return tokens List of tokens in the pool, sorted in registration order"},"functionSelector":"aa6ca808","id":14,"implemented":false,"kind":"function","modifiers":[],"name":"getTokens","nameLocation":"589:9:0","nodeType":"FunctionDefinition","parameters":{"id":8,"nodeType":"ParameterList","parameters":[],"src":"598:2:0"},"returnParameters":{"id":13,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12,"mutability":"mutable","name":"tokens","nameLocation":"640:6:0","nodeType":"VariableDeclaration","scope":14,"src":"624:22:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":10,"nodeType":"UserDefinedTypeName","pathNode":{"id":9,"name":"IERC20","nameLocations":["624:6:0"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"624:6:0"},"referencedDeclaration":40109,"src":"624:6:0","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":11,"nodeType":"ArrayTypeName","src":"624:8:0","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"623:24:0"},"scope":54,"src":"580:68:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":15,"nodeType":"StructuredDocumentation","src":"654:515:0","text":" @notice Gets the raw data for the pool: tokens, token info, raw balances, and last live balances.\n @return tokens Pool tokens, sorted in token registration order\n @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order"},"functionSelector":"abb1dc44","id":32,"implemented":false,"kind":"function","modifiers":[],"name":"getTokenInfo","nameLocation":"1183:12:0","nodeType":"FunctionDefinition","parameters":{"id":16,"nodeType":"ParameterList","parameters":[],"src":"1195:2:0"},"returnParameters":{"id":31,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20,"mutability":"mutable","name":"tokens","nameLocation":"1274:6:0","nodeType":"VariableDeclaration","scope":32,"src":"1258:22:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":18,"nodeType":"UserDefinedTypeName","pathNode":{"id":17,"name":"IERC20","nameLocations":["1258:6:0"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"1258:6:0"},"referencedDeclaration":40109,"src":"1258:6:0","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":19,"nodeType":"ArrayTypeName","src":"1258:8:0","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":24,"mutability":"mutable","name":"tokenInfo","nameLocation":"1313:9:0","nodeType":"VariableDeclaration","scope":32,"src":"1294:28:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4704_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":22,"nodeType":"UserDefinedTypeName","pathNode":{"id":21,"name":"TokenInfo","nameLocations":["1294:9:0"],"nodeType":"IdentifierPath","referencedDeclaration":4704,"src":"1294:9:0"},"referencedDeclaration":4704,"src":"1294:9:0","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_storage_ptr","typeString":"struct TokenInfo"}},"id":23,"nodeType":"ArrayTypeName","src":"1294:11:0","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4704_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":27,"mutability":"mutable","name":"balancesRaw","nameLocation":"1353:11:0","nodeType":"VariableDeclaration","scope":32,"src":"1336:28:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":25,"name":"uint256","nodeType":"ElementaryTypeName","src":"1336:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26,"nodeType":"ArrayTypeName","src":"1336:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":30,"mutability":"mutable","name":"lastBalancesLiveScaled18","nameLocation":"1395:24:0","nodeType":"VariableDeclaration","scope":32,"src":"1378:41:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":28,"name":"uint256","nodeType":"ElementaryTypeName","src":"1378:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29,"nodeType":"ArrayTypeName","src":"1378:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1244:185:0"},"scope":54,"src":"1174:256:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":33,"nodeType":"StructuredDocumentation","src":"1436:555:0","text":" @notice Gets the current live balances of the pool as fixed point, 18-decimal numbers.\n @dev Note that live balances will not necessarily be accurate if the pool is in Recovery Mode.\n Withdrawals in Recovery Mode do not make external calls (including those necessary for updating live balances),\n so if there are withdrawals, raw and live balances will be out of sync until Recovery Mode is disabled.\n @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates"},"functionSelector":"b156aa0a","id":39,"implemented":false,"kind":"function","modifiers":[],"name":"getCurrentLiveBalances","nameLocation":"2005:22:0","nodeType":"FunctionDefinition","parameters":{"id":34,"nodeType":"ParameterList","parameters":[],"src":"2027:2:0"},"returnParameters":{"id":38,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"2070:20:0","nodeType":"VariableDeclaration","scope":39,"src":"2053:37:0","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":35,"name":"uint256","nodeType":"ElementaryTypeName","src":"2053:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36,"nodeType":"ArrayTypeName","src":"2053:9:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"2052:39:0"},"scope":54,"src":"1996:96:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":40,"nodeType":"StructuredDocumentation","src":"2098:172:0","text":" @notice Fetches the static swap fee percentage for the pool.\n @return staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage"},"functionSelector":"d335b0cf","id":45,"implemented":false,"kind":"function","modifiers":[],"name":"getStaticSwapFeePercentage","nameLocation":"2284:26:0","nodeType":"FunctionDefinition","parameters":{"id":41,"nodeType":"ParameterList","parameters":[],"src":"2310:2:0"},"returnParameters":{"id":44,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"2344:23:0","nodeType":"VariableDeclaration","scope":45,"src":"2336:31:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42,"name":"uint256","nodeType":"ElementaryTypeName","src":"2336:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2335:33:0"},"scope":54,"src":"2275:94:0","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":46,"nodeType":"StructuredDocumentation","src":"2375:381:0","text":" @notice Gets the aggregate swap and yield fee percentages for a pool.\n @dev These are determined by the current protocol and pool creator fees, set in the `ProtocolFeeController`.\n @return aggregateSwapFeePercentage The aggregate percentage fee applied to swaps\n @return aggregateYieldFeePercentage The aggregate percentage fee applied to yield"},"functionSelector":"81fa807c","id":53,"implemented":false,"kind":"function","modifiers":[],"name":"getAggregateFeePercentages","nameLocation":"2770:26:0","nodeType":"FunctionDefinition","parameters":{"id":47,"nodeType":"ParameterList","parameters":[],"src":"2796:2:0"},"returnParameters":{"id":52,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"2854:26:0","nodeType":"VariableDeclaration","scope":53,"src":"2846:34:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48,"name":"uint256","nodeType":"ElementaryTypeName","src":"2846:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":51,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"2890:27:0","nodeType":"VariableDeclaration","scope":53,"src":"2882:35:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50,"name":"uint256","nodeType":"ElementaryTypeName","src":"2882:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2845:73:0"},"scope":54,"src":"2761:158:0","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":55,"src":"404:2517:0","usedErrors":[],"usedEvents":[]}],"src":"46:2876:0"},"id":0},"@balancer-labs/v3-interfaces/contracts/pool-weighted/ILBPool.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/pool-weighted/ILBPool.sol","exportedSymbols":{"IBasePool":[1505],"IERC20":[40109],"ILBPool":[161],"LBPParams":[84],"LBPoolDynamicData":[129],"LBPoolImmutableData":[109]},"id":162,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":56,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:1"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":58,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":162,"sourceUnit":40110,"src":"72:72:1","symbolAliases":[{"foreign":{"id":57,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"81:6:1","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol","file":"../vault/IBasePool.sol","id":60,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":162,"sourceUnit":1506,"src":"146:51:1","symbolAliases":[{"foreign":{"id":59,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1505,"src":"155:9:1","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"LBPParams","documentation":{"id":61,"nodeType":"StructuredDocumentation","src":"199:1345:1","text":" @notice Structure containing LBP-specific parameters.\n @dev These parameters are immutable, representing the configuration of a single token sale, running from `startTime`\n to `endTime`. Swaps may only occur while the sale is active. If `blockProjectTokenSwapsIn` is true, users may only\n purchase project tokens with the reserve currency.\n @param owner The account with permission to change the static swap fee percentage\n @param projectToken The token being sold\n @param reserveToken The token used to buy the project token (e.g., USDC or WETH)\n @param projectTokenStartWeight The project token weight at the start of the sale (normally higher than the reserve)\n @param reserveTokenStartWeight The reserve token weight at the start of the sale (normally lower than the project)\n @param projectTokenEndWeight The project token weight at the end of the sale (should go down over time)\n @param reserveTokenEndWeight The reserve token weight at the end of the sale (should go up over time)\n @param startTime The timestamp at the beginning of the sale - initialization/funding must occur before this time\n @param endTime the timestamp at the end of the sale - withdrawal of proceeds becomes possible after this time\n @param blockProjectTokenSwapsIn If set, the pool only supports one-way \"token distribution\""},"id":84,"members":[{"constant":false,"id":63,"mutability":"mutable","name":"owner","nameLocation":"1576:5:1","nodeType":"VariableDeclaration","scope":84,"src":"1568:13:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62,"name":"address","nodeType":"ElementaryTypeName","src":"1568:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":66,"mutability":"mutable","name":"projectToken","nameLocation":"1594:12:1","nodeType":"VariableDeclaration","scope":84,"src":"1587:19:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":65,"nodeType":"UserDefinedTypeName","pathNode":{"id":64,"name":"IERC20","nameLocations":["1587:6:1"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"1587:6:1"},"referencedDeclaration":40109,"src":"1587:6:1","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":69,"mutability":"mutable","name":"reserveToken","nameLocation":"1619:12:1","nodeType":"VariableDeclaration","scope":84,"src":"1612:19:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":68,"nodeType":"UserDefinedTypeName","pathNode":{"id":67,"name":"IERC20","nameLocations":["1612:6:1"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"1612:6:1"},"referencedDeclaration":40109,"src":"1612:6:1","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":71,"mutability":"mutable","name":"projectTokenStartWeight","nameLocation":"1645:23:1","nodeType":"VariableDeclaration","scope":84,"src":"1637:31:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":70,"name":"uint256","nodeType":"ElementaryTypeName","src":"1637:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":73,"mutability":"mutable","name":"reserveTokenStartWeight","nameLocation":"1682:23:1","nodeType":"VariableDeclaration","scope":84,"src":"1674:31:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":72,"name":"uint256","nodeType":"ElementaryTypeName","src":"1674:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":75,"mutability":"mutable","name":"projectTokenEndWeight","nameLocation":"1719:21:1","nodeType":"VariableDeclaration","scope":84,"src":"1711:29:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":74,"name":"uint256","nodeType":"ElementaryTypeName","src":"1711:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":77,"mutability":"mutable","name":"reserveTokenEndWeight","nameLocation":"1754:21:1","nodeType":"VariableDeclaration","scope":84,"src":"1746:29:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":76,"name":"uint256","nodeType":"ElementaryTypeName","src":"1746:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":79,"mutability":"mutable","name":"startTime","nameLocation":"1789:9:1","nodeType":"VariableDeclaration","scope":84,"src":"1781:17:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":78,"name":"uint256","nodeType":"ElementaryTypeName","src":"1781:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":81,"mutability":"mutable","name":"endTime","nameLocation":"1812:7:1","nodeType":"VariableDeclaration","scope":84,"src":"1804:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":80,"name":"uint256","nodeType":"ElementaryTypeName","src":"1804:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":83,"mutability":"mutable","name":"blockProjectTokenSwapsIn","nameLocation":"1830:24:1","nodeType":"VariableDeclaration","scope":84,"src":"1825:29:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":82,"name":"bool","nodeType":"ElementaryTypeName","src":"1825:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"LBPParams","nameLocation":"1552:9:1","nodeType":"StructDefinition","scope":162,"src":"1545:312:1","visibility":"public"},{"canonicalName":"LBPoolImmutableData","documentation":{"id":85,"nodeType":"StructuredDocumentation","src":"1859:996:1","text":" @notice Liquidity Bootstrapping Pool data that cannot change after deployment.\n @param tokens Pool tokens, sorted in token registration order\n @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. FP(1) for 18-decimal tokens\n @param startWeights Starting weights for the LBP, sorted in token registration order\n @param endWeights Ending weights for the LBP, sorted in token registration order\n @param startTime Timestamp of the start of the sale, when all liquidity is present and swaps are enabled\n @param endTime Timestamp of the end of the sale, when swaps are disabled, and liquidity can be removed\n @param projectTokenIndex The index of token (in `tokens`) being distributed through the sale\n @param reserveTokenIndex The index of the token (in `tokens`) used to purchase project tokens\n @param isProjectTokenSwapInBlocked If true, it is impossible to sell the project token back into the pool"},"id":109,"members":[{"constant":false,"id":89,"mutability":"mutable","name":"tokens","nameLocation":"2898:6:1","nodeType":"VariableDeclaration","scope":109,"src":"2889:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":87,"nodeType":"UserDefinedTypeName","pathNode":{"id":86,"name":"IERC20","nameLocations":["2889:6:1"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"2889:6:1"},"referencedDeclaration":40109,"src":"2889:6:1","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":88,"nodeType":"ArrayTypeName","src":"2889:8:1","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":92,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"2920:21:1","nodeType":"VariableDeclaration","scope":109,"src":"2910:31:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":90,"name":"uint256","nodeType":"ElementaryTypeName","src":"2910:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":91,"nodeType":"ArrayTypeName","src":"2910:9:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":95,"mutability":"mutable","name":"startWeights","nameLocation":"2957:12:1","nodeType":"VariableDeclaration","scope":109,"src":"2947:22:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":93,"name":"uint256","nodeType":"ElementaryTypeName","src":"2947:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":94,"nodeType":"ArrayTypeName","src":"2947:9:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":98,"mutability":"mutable","name":"endWeights","nameLocation":"2985:10:1","nodeType":"VariableDeclaration","scope":109,"src":"2975:20:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":96,"name":"uint256","nodeType":"ElementaryTypeName","src":"2975:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":97,"nodeType":"ArrayTypeName","src":"2975:9:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":100,"mutability":"mutable","name":"startTime","nameLocation":"3009:9:1","nodeType":"VariableDeclaration","scope":109,"src":"3001:17:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":99,"name":"uint256","nodeType":"ElementaryTypeName","src":"3001:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":102,"mutability":"mutable","name":"endTime","nameLocation":"3032:7:1","nodeType":"VariableDeclaration","scope":109,"src":"3024:15:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":101,"name":"uint256","nodeType":"ElementaryTypeName","src":"3024:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":104,"mutability":"mutable","name":"projectTokenIndex","nameLocation":"3053:17:1","nodeType":"VariableDeclaration","scope":109,"src":"3045:25:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":103,"name":"uint256","nodeType":"ElementaryTypeName","src":"3045:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":106,"mutability":"mutable","name":"reserveTokenIndex","nameLocation":"3084:17:1","nodeType":"VariableDeclaration","scope":109,"src":"3076:25:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":105,"name":"uint256","nodeType":"ElementaryTypeName","src":"3076:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":108,"mutability":"mutable","name":"isProjectTokenSwapInBlocked","nameLocation":"3112:27:1","nodeType":"VariableDeclaration","scope":109,"src":"3107:32:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":107,"name":"bool","nodeType":"ElementaryTypeName","src":"3107:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"LBPoolImmutableData","nameLocation":"2863:19:1","nodeType":"StructDefinition","scope":162,"src":"2856:286:1","visibility":"public"},{"canonicalName":"LBPoolDynamicData","documentation":{"id":110,"nodeType":"StructuredDocumentation","src":"3144:1191:1","text":" @notice Snapshot of current Weighted Pool data that can change.\n @dev Note that live balances will not necessarily be accurate if the pool is in Recovery Mode. Withdrawals\n in Recovery Mode do not make external calls (including those necessary for updating live balances), so if\n there are withdrawals, raw and live balances will be out of sync until Recovery Mode is disabled.\n @param balancesLiveScaled18 18-decimal FP token balances, sorted in token registration order\n @param normalizedWeights Current token weights, sorted in token registration order\n @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage\n @param totalSupply The current total supply of the pool tokens (BPT)\n @param isPoolInitialized If false, the pool has not been seeded with initial liquidity, so operations will revert\n @param isPoolPaused If true, the pool is paused, and all non-recovery-mode state-changing operations will revert\n @param isPoolInRecoveryMode If true, Recovery Mode withdrawals are enabled, and live balances may be inaccurate\n @param isSwapEnabled If true, the sale is ongoing, and swaps are enabled (unless the pool is paused)"},"id":129,"members":[{"constant":false,"id":113,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"4377:20:1","nodeType":"VariableDeclaration","scope":129,"src":"4367:30:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":111,"name":"uint256","nodeType":"ElementaryTypeName","src":"4367:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":112,"nodeType":"ArrayTypeName","src":"4367:9:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":116,"mutability":"mutable","name":"normalizedWeights","nameLocation":"4413:17:1","nodeType":"VariableDeclaration","scope":129,"src":"4403:27:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":114,"name":"uint256","nodeType":"ElementaryTypeName","src":"4403:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":115,"nodeType":"ArrayTypeName","src":"4403:9:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":118,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"4444:23:1","nodeType":"VariableDeclaration","scope":129,"src":"4436:31:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":117,"name":"uint256","nodeType":"ElementaryTypeName","src":"4436:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":120,"mutability":"mutable","name":"totalSupply","nameLocation":"4481:11:1","nodeType":"VariableDeclaration","scope":129,"src":"4473:19:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":119,"name":"uint256","nodeType":"ElementaryTypeName","src":"4473:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":122,"mutability":"mutable","name":"isPoolInitialized","nameLocation":"4503:17:1","nodeType":"VariableDeclaration","scope":129,"src":"4498:22:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":121,"name":"bool","nodeType":"ElementaryTypeName","src":"4498:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":124,"mutability":"mutable","name":"isPoolPaused","nameLocation":"4531:12:1","nodeType":"VariableDeclaration","scope":129,"src":"4526:17:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":123,"name":"bool","nodeType":"ElementaryTypeName","src":"4526:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":126,"mutability":"mutable","name":"isPoolInRecoveryMode","nameLocation":"4554:20:1","nodeType":"VariableDeclaration","scope":129,"src":"4549:25:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":125,"name":"bool","nodeType":"ElementaryTypeName","src":"4549:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":128,"mutability":"mutable","name":"isSwapEnabled","nameLocation":"4585:13:1","nodeType":"VariableDeclaration","scope":129,"src":"4580:18:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":127,"name":"bool","nodeType":"ElementaryTypeName","src":"4580:4:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"LBPoolDynamicData","nameLocation":"4343:17:1","nodeType":"StructDefinition","scope":162,"src":"4336:265:1","visibility":"public"},{"abstract":false,"baseContracts":[{"baseName":{"id":131,"name":"IBasePool","nameLocations":["5063:9:1"],"nodeType":"IdentifierPath","referencedDeclaration":1505,"src":"5063:9:1"},"id":132,"nodeType":"InheritanceSpecifier","src":"5063:9:1"}],"canonicalName":"ILBPool","contractDependencies":[],"contractKind":"interface","documentation":{"id":130,"nodeType":"StructuredDocumentation","src":"4603:438:1","text":" @notice Full LBP interface - base pool plus immutable/dynamic field getters.\n @dev There is some redundancy here to cover all use cases. Project and reserve tokens can be read directly, if that\n is all that's needed. Those who already need the more complete data in `LBPoolImmutableData` can recover these\n values without further calls by indexing into the `tokens` array with `projectTokenIndex` and `reserveTokenIndex`."},"fullyImplemented":false,"id":161,"linearizedBaseContracts":[161,1505,3073,3057],"name":"ILBPool","nameLocation":"5052:7:1","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":133,"nodeType":"StructuredDocumentation","src":"5079:157:1","text":" @notice Get dynamic pool data relevant to swap/add/remove calculations.\n @return data A struct containing all dynamic LBP parameters"},"functionSelector":"e565c29e","id":139,"implemented":false,"kind":"function","modifiers":[],"name":"getLBPoolDynamicData","nameLocation":"5250:20:1","nodeType":"FunctionDefinition","parameters":{"id":134,"nodeType":"ParameterList","parameters":[],"src":"5270:2:1"},"returnParameters":{"id":138,"nodeType":"ParameterList","parameters":[{"constant":false,"id":137,"mutability":"mutable","name":"data","nameLocation":"5321:4:1","nodeType":"VariableDeclaration","scope":139,"src":"5296:29:1","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LBPoolDynamicData_$129_memory_ptr","typeString":"struct LBPoolDynamicData"},"typeName":{"id":136,"nodeType":"UserDefinedTypeName","pathNode":{"id":135,"name":"LBPoolDynamicData","nameLocations":["5296:17:1"],"nodeType":"IdentifierPath","referencedDeclaration":129,"src":"5296:17:1"},"referencedDeclaration":129,"src":"5296:17:1","typeDescriptions":{"typeIdentifier":"t_struct$_LBPoolDynamicData_$129_storage_ptr","typeString":"struct LBPoolDynamicData"}},"visibility":"internal"}],"src":"5295:31:1"},"scope":161,"src":"5241:86:1","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":140,"nodeType":"StructuredDocumentation","src":"5333:161:1","text":" @notice Get immutable pool data relevant to swap/add/remove calculations.\n @return data A struct containing all immutable LBP parameters"},"functionSelector":"0ca89848","id":146,"implemented":false,"kind":"function","modifiers":[],"name":"getLBPoolImmutableData","nameLocation":"5508:22:1","nodeType":"FunctionDefinition","parameters":{"id":141,"nodeType":"ParameterList","parameters":[],"src":"5530:2:1"},"returnParameters":{"id":145,"nodeType":"ParameterList","parameters":[{"constant":false,"id":144,"mutability":"mutable","name":"data","nameLocation":"5583:4:1","nodeType":"VariableDeclaration","scope":146,"src":"5556:31:1","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LBPoolImmutableData_$109_memory_ptr","typeString":"struct LBPoolImmutableData"},"typeName":{"id":143,"nodeType":"UserDefinedTypeName","pathNode":{"id":142,"name":"LBPoolImmutableData","nameLocations":["5556:19:1"],"nodeType":"IdentifierPath","referencedDeclaration":109,"src":"5556:19:1"},"referencedDeclaration":109,"src":"5556:19:1","typeDescriptions":{"typeIdentifier":"t_struct$_LBPoolImmutableData_$109_storage_ptr","typeString":"struct LBPoolImmutableData"}},"visibility":"internal"}],"src":"5555:33:1"},"scope":161,"src":"5499:90:1","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":147,"nodeType":"StructuredDocumentation","src":"5595:343:1","text":" @notice Get the project token for this LBP.\n @dev This is the token being distributed through the sale. It is also available in the immutable data, but this\n getter is provided as a convenience for those who only need the project token address.\n @return projectToken The address of the project token"},"functionSelector":"4837c596","id":153,"implemented":false,"kind":"function","modifiers":[],"name":"getProjectToken","nameLocation":"5952:15:1","nodeType":"FunctionDefinition","parameters":{"id":148,"nodeType":"ParameterList","parameters":[],"src":"5967:2:1"},"returnParameters":{"id":152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":151,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":153,"src":"5993:6:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":150,"nodeType":"UserDefinedTypeName","pathNode":{"id":149,"name":"IERC20","nameLocations":["5993:6:1"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"5993:6:1"},"referencedDeclaration":40109,"src":"5993:6:1","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"5992:8:1"},"scope":161,"src":"5943:58:1","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":154,"nodeType":"StructuredDocumentation","src":"6007:378:1","text":" @notice Get the reserve token for this LBP.\n @dev This is the token exchanged for the project token (usually a stablecoin or WETH). It is also available in\n the immutable data, but this getter is provided as a convenience for those who only need the reserve token\n address.\n @return reserveToken The address of the reserve token"},"functionSelector":"e594203d","id":160,"implemented":false,"kind":"function","modifiers":[],"name":"getReserveToken","nameLocation":"6399:15:1","nodeType":"FunctionDefinition","parameters":{"id":155,"nodeType":"ParameterList","parameters":[],"src":"6414:2:1"},"returnParameters":{"id":159,"nodeType":"ParameterList","parameters":[{"constant":false,"id":158,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":160,"src":"6440:6:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":157,"nodeType":"UserDefinedTypeName","pathNode":{"id":156,"name":"IERC20","nameLocations":["6440:6:1"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"6440:6:1"},"referencedDeclaration":40109,"src":"6440:6:1","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"6439:8:1"},"scope":161,"src":"6390:58:1","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":162,"src":"5042:1408:1","usedErrors":[],"usedEvents":[]}],"src":"46:6405:1"},"id":1},"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol","exportedSymbols":{"IBasePool":[1505],"IERC20":[40109],"IWeightedPool":[228],"WeightedPoolDynamicData":[197],"WeightedPoolImmutableData":[179]},"id":229,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":163,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:2"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":165,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":229,"sourceUnit":40110,"src":"72:72:2","symbolAliases":[{"foreign":{"id":164,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"81:6:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol","file":"../vault/IBasePool.sol","id":167,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":229,"sourceUnit":1506,"src":"146:51:2","symbolAliases":[{"foreign":{"id":166,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1505,"src":"155:9:2","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"WeightedPoolImmutableData","documentation":{"id":168,"nodeType":"StructuredDocumentation","src":"199:375:2","text":" @notice Weighted Pool data that cannot change after deployment.\n @param tokens Pool tokens, sorted in token registration order\n @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. FP(1) for 18-decimal tokens\n @param normalizedWeights The token weights, sorted in token registration order"},"id":179,"members":[{"constant":false,"id":172,"mutability":"mutable","name":"tokens","nameLocation":"623:6:2","nodeType":"VariableDeclaration","scope":179,"src":"614:15:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":170,"nodeType":"UserDefinedTypeName","pathNode":{"id":169,"name":"IERC20","nameLocations":["614:6:2"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"614:6:2"},"referencedDeclaration":40109,"src":"614:6:2","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":171,"nodeType":"ArrayTypeName","src":"614:8:2","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":175,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"645:21:2","nodeType":"VariableDeclaration","scope":179,"src":"635:31:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":173,"name":"uint256","nodeType":"ElementaryTypeName","src":"635:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":174,"nodeType":"ArrayTypeName","src":"635:9:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":178,"mutability":"mutable","name":"normalizedWeights","nameLocation":"682:17:2","nodeType":"VariableDeclaration","scope":179,"src":"672:27:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":176,"name":"uint256","nodeType":"ElementaryTypeName","src":"672:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":177,"nodeType":"ArrayTypeName","src":"672:9:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"name":"WeightedPoolImmutableData","nameLocation":"582:25:2","nodeType":"StructDefinition","scope":229,"src":"575:127:2","visibility":"public"},{"canonicalName":"WeightedPoolDynamicData","documentation":{"id":180,"nodeType":"StructuredDocumentation","src":"704:1121:2","text":" @notice Snapshot of current Weighted Pool data that can change.\n @dev Note that live balances will not necessarily be accurate if the pool is in Recovery Mode. Withdrawals\n in Recovery Mode do not make external calls (including those necessary for updating live balances), so if\n there are withdrawals, raw and live balances will be out of sync until Recovery Mode is disabled.\n @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage\n @param totalSupply The current total supply of the pool tokens (BPT)\n @param isPoolInitialized If false, the pool has not been seeded with initial liquidity, so operations will revert\n @param isPoolPaused If true, the pool is paused, and all non-recovery-mode state-changing operations will revert\n @param isPoolInRecoveryMode If true, Recovery Mode withdrawals are enabled, and live balances may be inaccurate"},"id":197,"members":[{"constant":false,"id":183,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"1873:20:2","nodeType":"VariableDeclaration","scope":197,"src":"1863:30:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":181,"name":"uint256","nodeType":"ElementaryTypeName","src":"1863:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":182,"nodeType":"ArrayTypeName","src":"1863:9:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":186,"mutability":"mutable","name":"tokenRates","nameLocation":"1909:10:2","nodeType":"VariableDeclaration","scope":197,"src":"1899:20:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":184,"name":"uint256","nodeType":"ElementaryTypeName","src":"1899:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":185,"nodeType":"ArrayTypeName","src":"1899:9:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":188,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"1933:23:2","nodeType":"VariableDeclaration","scope":197,"src":"1925:31:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":187,"name":"uint256","nodeType":"ElementaryTypeName","src":"1925:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":190,"mutability":"mutable","name":"totalSupply","nameLocation":"1970:11:2","nodeType":"VariableDeclaration","scope":197,"src":"1962:19:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":189,"name":"uint256","nodeType":"ElementaryTypeName","src":"1962:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":192,"mutability":"mutable","name":"isPoolInitialized","nameLocation":"1992:17:2","nodeType":"VariableDeclaration","scope":197,"src":"1987:22:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":191,"name":"bool","nodeType":"ElementaryTypeName","src":"1987:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":194,"mutability":"mutable","name":"isPoolPaused","nameLocation":"2020:12:2","nodeType":"VariableDeclaration","scope":197,"src":"2015:17:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":193,"name":"bool","nodeType":"ElementaryTypeName","src":"2015:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":196,"mutability":"mutable","name":"isPoolInRecoveryMode","nameLocation":"2043:20:2","nodeType":"VariableDeclaration","scope":197,"src":"2038:25:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":195,"name":"bool","nodeType":"ElementaryTypeName","src":"2038:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"WeightedPoolDynamicData","nameLocation":"1833:23:2","nodeType":"StructDefinition","scope":229,"src":"1826:240:2","visibility":"public"},{"abstract":false,"baseContracts":[{"baseName":{"id":199,"name":"IBasePool","nameLocations":["2137:9:2"],"nodeType":"IdentifierPath","referencedDeclaration":1505,"src":"2137:9:2"},"id":200,"nodeType":"InheritanceSpecifier","src":"2137:9:2"}],"canonicalName":"IWeightedPool","contractDependencies":[],"contractKind":"interface","documentation":{"id":198,"nodeType":"StructuredDocumentation","src":"2068:42:2","text":"@notice Full Weighted pool interface."},"fullyImplemented":false,"id":228,"linearizedBaseContracts":[228,1505,3073,3057],"name":"IWeightedPool","nameLocation":"2120:13:2","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":201,"nodeType":"StructuredDocumentation","src":"2153:87:2","text":"@notice Indicates that one of the pool tokens' weight is below the minimum allowed."},"errorSelector":"bd393583","id":203,"name":"MinWeight","nameLocation":"2251:9:2","nodeType":"ErrorDefinition","parameters":{"id":202,"nodeType":"ParameterList","parameters":[],"src":"2260:2:2"},"src":"2245:18:2"},{"documentation":{"id":204,"nodeType":"StructuredDocumentation","src":"2269:85:2","text":"@notice Indicates that the sum of the pool tokens' weights is not FixedPoint.ONE."},"errorSelector":"39cf114e","id":206,"name":"NormalizedWeightInvariant","nameLocation":"2365:25:2","nodeType":"ErrorDefinition","parameters":{"id":205,"nodeType":"ParameterList","parameters":[],"src":"2390:2:2"},"src":"2359:34:2"},{"documentation":{"id":207,"nodeType":"StructuredDocumentation","src":"2399:146:2","text":" @notice Get the normalized weights.\n @return normalizedWeights The normalized weights, sorted in token registration order"},"functionSelector":"f89f27ed","id":213,"implemented":false,"kind":"function","modifiers":[],"name":"getNormalizedWeights","nameLocation":"2559:20:2","nodeType":"FunctionDefinition","parameters":{"id":208,"nodeType":"ParameterList","parameters":[],"src":"2579:2:2"},"returnParameters":{"id":212,"nodeType":"ParameterList","parameters":[{"constant":false,"id":211,"mutability":"mutable","name":"normalizedWeights","nameLocation":"2622:17:2","nodeType":"VariableDeclaration","scope":213,"src":"2605:34:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":209,"name":"uint256","nodeType":"ElementaryTypeName","src":"2605:7:2","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":210,"nodeType":"ArrayTypeName","src":"2605:9:2","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"2604:36:2"},"scope":228,"src":"2550:91:2","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":214,"nodeType":"StructuredDocumentation","src":"2647:167:2","text":" @notice Get dynamic pool data relevant to swap/add/remove calculations.\n @return data A struct containing all dynamic weighted pool parameters"},"functionSelector":"c0bc6f33","id":220,"implemented":false,"kind":"function","modifiers":[],"name":"getWeightedPoolDynamicData","nameLocation":"2828:26:2","nodeType":"FunctionDefinition","parameters":{"id":215,"nodeType":"ParameterList","parameters":[],"src":"2854:2:2"},"returnParameters":{"id":219,"nodeType":"ParameterList","parameters":[{"constant":false,"id":218,"mutability":"mutable","name":"data","nameLocation":"2911:4:2","nodeType":"VariableDeclaration","scope":220,"src":"2880:35:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_WeightedPoolDynamicData_$197_memory_ptr","typeString":"struct WeightedPoolDynamicData"},"typeName":{"id":217,"nodeType":"UserDefinedTypeName","pathNode":{"id":216,"name":"WeightedPoolDynamicData","nameLocations":["2880:23:2"],"nodeType":"IdentifierPath","referencedDeclaration":197,"src":"2880:23:2"},"referencedDeclaration":197,"src":"2880:23:2","typeDescriptions":{"typeIdentifier":"t_struct$_WeightedPoolDynamicData_$197_storage_ptr","typeString":"struct WeightedPoolDynamicData"}},"visibility":"internal"}],"src":"2879:37:2"},"scope":228,"src":"2819:98:2","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":221,"nodeType":"StructuredDocumentation","src":"2923:171:2","text":" @notice Get immutable pool data relevant to swap/add/remove calculations.\n @return data A struct containing all immutable weighted pool parameters"},"functionSelector":"53b79bd7","id":227,"implemented":false,"kind":"function","modifiers":[],"name":"getWeightedPoolImmutableData","nameLocation":"3108:28:2","nodeType":"FunctionDefinition","parameters":{"id":222,"nodeType":"ParameterList","parameters":[],"src":"3136:2:2"},"returnParameters":{"id":226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":225,"mutability":"mutable","name":"data","nameLocation":"3195:4:2","nodeType":"VariableDeclaration","scope":227,"src":"3162:37:2","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_WeightedPoolImmutableData_$179_memory_ptr","typeString":"struct WeightedPoolImmutableData"},"typeName":{"id":224,"nodeType":"UserDefinedTypeName","pathNode":{"id":223,"name":"WeightedPoolImmutableData","nameLocations":["3162:25:2"],"nodeType":"IdentifierPath","referencedDeclaration":179,"src":"3162:25:2"},"referencedDeclaration":179,"src":"3162:25:2","typeDescriptions":{"typeIdentifier":"t_struct$_WeightedPoolImmutableData_$179_storage_ptr","typeString":"struct WeightedPoolImmutableData"}},"visibility":"internal"}],"src":"3161:39:2"},"scope":228,"src":"3099:102:2","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":229,"src":"2110:1093:2","usedErrors":[203,206],"usedEvents":[]}],"src":"46:3158:2"},"id":2},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","exportedSymbols":{"IAuthentication":[243]},"id":244,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":230,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:3"},{"abstract":false,"baseContracts":[],"canonicalName":"IAuthentication","contractDependencies":[],"contractKind":"interface","documentation":{"id":231,"nodeType":"StructuredDocumentation","src":"72:77:3","text":"@notice Simple interface for permissioned calling of external functions."},"fullyImplemented":false,"id":243,"linearizedBaseContracts":[243],"name":"IAuthentication","nameLocation":"159:15:3","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":232,"nodeType":"StructuredDocumentation","src":"181:67:3","text":"@notice The sender does not have permission to call a function."},"errorSelector":"23dada53","id":234,"name":"SenderNotAllowed","nameLocation":"259:16:3","nodeType":"ErrorDefinition","parameters":{"id":233,"nodeType":"ParameterList","parameters":[],"src":"275:2:3"},"src":"253:25:3"},{"documentation":{"id":235,"nodeType":"StructuredDocumentation","src":"284:237:3","text":" @notice Returns the action identifier associated with the external function described by `selector`.\n @param selector The 4-byte selector of the permissioned function\n @return actionId The computed actionId"},"functionSelector":"851c1bb3","id":242,"implemented":false,"kind":"function","modifiers":[],"name":"getActionId","nameLocation":"535:11:3","nodeType":"FunctionDefinition","parameters":{"id":238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":237,"mutability":"mutable","name":"selector","nameLocation":"554:8:3","nodeType":"VariableDeclaration","scope":242,"src":"547:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":236,"name":"bytes4","nodeType":"ElementaryTypeName","src":"547:6:3","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"546:17:3"},"returnParameters":{"id":241,"nodeType":"ParameterList","parameters":[{"constant":false,"id":240,"mutability":"mutable","name":"actionId","nameLocation":"595:8:3","nodeType":"VariableDeclaration","scope":242,"src":"587:16:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":239,"name":"bytes32","nodeType":"ElementaryTypeName","src":"587:7:3","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"586:18:3"},"scope":243,"src":"526:79:3","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":244,"src":"149:458:3","usedErrors":[234],"usedEvents":[]}],"src":"46:562:3"},"id":3},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IPoolVersion.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IPoolVersion.sol","exportedSymbols":{"IPoolVersion":[253]},"id":254,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":245,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:4"},{"abstract":false,"baseContracts":[],"canonicalName":"IPoolVersion","contractDependencies":[],"contractKind":"interface","documentation":{"id":246,"nodeType":"StructuredDocumentation","src":"72:90:4","text":"@notice Simple interface to retrieve the version of pools deployed by a pool factory."},"fullyImplemented":false,"id":253,"linearizedBaseContracts":[253],"name":"IPoolVersion","nameLocation":"172:12:4","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":247,"nodeType":"StructuredDocumentation","src":"191:414:4","text":" @notice Returns a JSON representation of the deployed pool version containing name, version number and task ID.\n @dev This is typically only useful in complex Pool deployment schemes, where multiple subsystems need to know\n about each other. Note that this value will only be set at factory creation time.\n @return poolVersion A string representation of the pool version"},"functionSelector":"3f819b6f","id":252,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolVersion","nameLocation":"619:14:4","nodeType":"FunctionDefinition","parameters":{"id":248,"nodeType":"ParameterList","parameters":[],"src":"633:2:4"},"returnParameters":{"id":251,"nodeType":"ParameterList","parameters":[{"constant":false,"id":250,"mutability":"mutable","name":"poolVersion","nameLocation":"673:11:4","nodeType":"VariableDeclaration","scope":252,"src":"659:25:4","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":249,"name":"string","nodeType":"ElementaryTypeName","src":"659:6:4","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"658:27:4"},"scope":253,"src":"610:76:4","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":254,"src":"162:526:4","usedErrors":[],"usedEvents":[]}],"src":"46:643:4"},"id":4},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","exportedSymbols":{"IRateProvider":[263]},"id":264,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":255,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:5"},{"abstract":false,"baseContracts":[],"canonicalName":"IRateProvider","contractDependencies":[],"contractKind":"interface","documentation":{"id":256,"nodeType":"StructuredDocumentation","src":"72:56:5","text":"@notice General interface for token exchange rates."},"fullyImplemented":false,"id":263,"linearizedBaseContracts":[263],"name":"IRateProvider","nameLocation":"138:13:5","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":257,"nodeType":"StructuredDocumentation","src":"158:573:5","text":" @notice An 18 decimal fixed point number representing the exchange rate of one token to another related token.\n @dev The meaning of this rate depends on the context. Note that there may be an error associated with a token\n rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface\n does not take a rounding direction or return an error, so great care must be taken when interpreting and using\n rates in downstream computations.\n @return rate The current token rate"},"functionSelector":"679aefce","id":262,"implemented":false,"kind":"function","modifiers":[],"name":"getRate","nameLocation":"745:7:5","nodeType":"FunctionDefinition","parameters":{"id":258,"nodeType":"ParameterList","parameters":[],"src":"752:2:5"},"returnParameters":{"id":261,"nodeType":"ParameterList","parameters":[{"constant":false,"id":260,"mutability":"mutable","name":"rate","nameLocation":"786:4:5","nodeType":"VariableDeclaration","scope":262,"src":"778:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":259,"name":"uint256","nodeType":"ElementaryTypeName","src":"778:7:5","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"777:14:5"},"scope":263,"src":"736:56:5","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":264,"src":"128:666:5","usedErrors":[],"usedEvents":[]}],"src":"46:749:5"},"id":5},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol","exportedSymbols":{"IVersion":[273]},"id":274,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":265,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:6"},{"abstract":false,"baseContracts":[],"canonicalName":"IVersion","contractDependencies":[],"contractKind":"interface","documentation":{"id":266,"nodeType":"StructuredDocumentation","src":"72:77:6","text":"@notice Simple interface to retrieve the version of a deployed contract."},"fullyImplemented":false,"id":273,"linearizedBaseContracts":[273],"name":"IVersion","nameLocation":"159:8:6","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":267,"nodeType":"StructuredDocumentation","src":"174:418:6","text":" @notice Return arbitrary text representing the version of a contract.\n @dev For standard Balancer contracts, returns a JSON representation of the contract version containing name,\n version number and task ID. See real examples in the deployment repo; local tests just use plain text strings.\n @return version The version string corresponding to the current deployed contract"},"functionSelector":"54fd4d50","id":272,"implemented":false,"kind":"function","modifiers":[],"name":"version","nameLocation":"606:7:6","nodeType":"FunctionDefinition","parameters":{"id":268,"nodeType":"ParameterList","parameters":[],"src":"613:2:6"},"returnParameters":{"id":271,"nodeType":"ParameterList","parameters":[{"constant":false,"id":270,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":272,"src":"639:13:6","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":269,"name":"string","nodeType":"ElementaryTypeName","src":"639:6:6","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"638:15:6"},"scope":273,"src":"597:57:6","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":274,"src":"149:507:6","usedErrors":[],"usedEvents":[]}],"src":"46:611:6"},"id":6},"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol","exportedSymbols":{"IERC20":[40109],"IWETH":[291]},"id":292,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":275,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:7"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":277,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":292,"sourceUnit":40110,"src":"59:72:7","symbolAliases":[{"foreign":{"id":276,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"68:6:7","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":279,"name":"IERC20","nameLocations":["306:6:7"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"306:6:7"},"id":280,"nodeType":"InheritanceSpecifier","src":"306:6:7"}],"canonicalName":"IWETH","contractDependencies":[],"contractKind":"interface","documentation":{"id":278,"nodeType":"StructuredDocumentation","src":"133:153:7","text":" @notice Interface for WETH9.\n See https://github.com/gnosis/canonical-weth/blob/0dd1ea3e295eef916d0c6223ec63141137d22d67/contracts/WETH9.sol"},"fullyImplemented":false,"id":291,"linearizedBaseContracts":[291,40109],"name":"IWETH","nameLocation":"297:5:7","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":281,"nodeType":"StructuredDocumentation","src":"319:90:7","text":" @notice \"wrap\" native ETH to WETH.\n @dev The amount is msg.value."},"functionSelector":"d0e30db0","id":284,"implemented":false,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"423:7:7","nodeType":"FunctionDefinition","parameters":{"id":282,"nodeType":"ParameterList","parameters":[],"src":"430:2:7"},"returnParameters":{"id":283,"nodeType":"ParameterList","parameters":[],"src":"449:0:7"},"scope":291,"src":"414:36:7","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":285,"nodeType":"StructuredDocumentation","src":"456:99:7","text":" @notice \"unwrap\" WETH to native ETH.\n @param amount The amount to withdraw"},"functionSelector":"2e1a7d4d","id":290,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"569:8:7","nodeType":"FunctionDefinition","parameters":{"id":288,"nodeType":"ParameterList","parameters":[{"constant":false,"id":287,"mutability":"mutable","name":"amount","nameLocation":"586:6:7","nodeType":"VariableDeclaration","scope":290,"src":"578:14:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":286,"name":"uint256","nodeType":"ElementaryTypeName","src":"578:7:7","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"577:16:7"},"returnParameters":{"id":289,"nodeType":"ParameterList","parameters":[],"src":"602:0:7"},"scope":291,"src":"560:43:7","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":292,"src":"287:318:7","usedErrors":[],"usedEvents":[40043,40052]}],"src":"33:573:7"},"id":7},"@balancer-labs/v3-interfaces/contracts/test/IVaultAdminMock.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/test/IVaultAdminMock.sol","exportedSymbols":{"IERC4626":[39833],"IVaultAdminMock":[416]},"id":417,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":293,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:8"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":295,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":417,"sourceUnit":39834,"src":"72:75:8","symbolAliases":[{"foreign":{"id":294,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39833,"src":"81:8:8","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultAdminMock","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":416,"linearizedBaseContracts":[416],"name":"IVaultAdminMock","nameLocation":"159:15:8","nodeType":"ContractDefinition","nodes":[{"functionSelector":"071d8a02","id":298,"implemented":false,"kind":"function","modifiers":[],"name":"manualPauseVault","nameLocation":"190:16:8","nodeType":"FunctionDefinition","parameters":{"id":296,"nodeType":"ParameterList","parameters":[],"src":"206:2:8"},"returnParameters":{"id":297,"nodeType":"ParameterList","parameters":[],"src":"217:0:8"},"scope":416,"src":"181:37:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"cc671ff7","id":301,"implemented":false,"kind":"function","modifiers":[],"name":"manualUnpauseVault","nameLocation":"233:18:8","nodeType":"FunctionDefinition","parameters":{"id":299,"nodeType":"ParameterList","parameters":[],"src":"251:2:8"},"returnParameters":{"id":300,"nodeType":"ParameterList","parameters":[],"src":"262:0:8"},"scope":416,"src":"224:39:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"1558356e","id":306,"implemented":false,"kind":"function","modifiers":[],"name":"manualPausePool","nameLocation":"278:15:8","nodeType":"FunctionDefinition","parameters":{"id":304,"nodeType":"ParameterList","parameters":[{"constant":false,"id":303,"mutability":"mutable","name":"pool","nameLocation":"302:4:8","nodeType":"VariableDeclaration","scope":306,"src":"294:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":302,"name":"address","nodeType":"ElementaryTypeName","src":"294:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"293:14:8"},"returnParameters":{"id":305,"nodeType":"ParameterList","parameters":[],"src":"316:0:8"},"scope":416,"src":"269:48:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"52b9e33d","id":311,"implemented":false,"kind":"function","modifiers":[],"name":"manualUnpausePool","nameLocation":"332:17:8","nodeType":"FunctionDefinition","parameters":{"id":309,"nodeType":"ParameterList","parameters":[{"constant":false,"id":308,"mutability":"mutable","name":"pool","nameLocation":"358:4:8","nodeType":"VariableDeclaration","scope":311,"src":"350:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":307,"name":"address","nodeType":"ElementaryTypeName","src":"350:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"349:14:8"},"returnParameters":{"id":310,"nodeType":"ParameterList","parameters":[],"src":"372:0:8"},"scope":416,"src":"323:50:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"27521d0c","id":316,"implemented":false,"kind":"function","modifiers":[],"name":"manualEnableRecoveryMode","nameLocation":"388:24:8","nodeType":"FunctionDefinition","parameters":{"id":314,"nodeType":"ParameterList","parameters":[{"constant":false,"id":313,"mutability":"mutable","name":"pool","nameLocation":"421:4:8","nodeType":"VariableDeclaration","scope":316,"src":"413:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":312,"name":"address","nodeType":"ElementaryTypeName","src":"413:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"412:14:8"},"returnParameters":{"id":315,"nodeType":"ParameterList","parameters":[],"src":"435:0:8"},"scope":416,"src":"379:57:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"7578abb9","id":321,"implemented":false,"kind":"function","modifiers":[],"name":"manualDisableRecoveryMode","nameLocation":"451:25:8","nodeType":"FunctionDefinition","parameters":{"id":319,"nodeType":"ParameterList","parameters":[{"constant":false,"id":318,"mutability":"mutable","name":"pool","nameLocation":"485:4:8","nodeType":"VariableDeclaration","scope":321,"src":"477:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":317,"name":"address","nodeType":"ElementaryTypeName","src":"477:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"476:14:8"},"returnParameters":{"id":320,"nodeType":"ParameterList","parameters":[],"src":"499:0:8"},"scope":416,"src":"442:58:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"b61398cd","id":335,"implemented":false,"kind":"function","modifiers":[],"name":"manualReentrancyInitializeBuffer","nameLocation":"515:32:8","nodeType":"FunctionDefinition","parameters":{"id":333,"nodeType":"ParameterList","parameters":[{"constant":false,"id":324,"mutability":"mutable","name":"wrappedToken","nameLocation":"566:12:8","nodeType":"VariableDeclaration","scope":335,"src":"557:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":323,"nodeType":"UserDefinedTypeName","pathNode":{"id":322,"name":"IERC4626","nameLocations":["557:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"557:8:8"},"referencedDeclaration":39833,"src":"557:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":326,"mutability":"mutable","name":"amountUnderlying","nameLocation":"596:16:8","nodeType":"VariableDeclaration","scope":335,"src":"588:24:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":325,"name":"uint256","nodeType":"ElementaryTypeName","src":"588:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":328,"mutability":"mutable","name":"amountWrapped","nameLocation":"630:13:8","nodeType":"VariableDeclaration","scope":335,"src":"622:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":327,"name":"uint256","nodeType":"ElementaryTypeName","src":"622:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":330,"mutability":"mutable","name":"minIssuedShares","nameLocation":"661:15:8","nodeType":"VariableDeclaration","scope":335,"src":"653:23:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":329,"name":"uint256","nodeType":"ElementaryTypeName","src":"653:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":332,"mutability":"mutable","name":"sharesOwner","nameLocation":"694:11:8","nodeType":"VariableDeclaration","scope":335,"src":"686:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":331,"name":"address","nodeType":"ElementaryTypeName","src":"686:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"547:164:8"},"returnParameters":{"id":334,"nodeType":"ParameterList","parameters":[],"src":"720:0:8"},"scope":416,"src":"506:215:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":336,"nodeType":"StructuredDocumentation","src":"727:77:8","text":"@dev Adds liquidity to buffer unbalanced, so it can unbalance the buffer."},"functionSelector":"1f568ea3","id":346,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityToBufferUnbalancedForTests","nameLocation":"818:38:8","nodeType":"FunctionDefinition","parameters":{"id":344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":339,"mutability":"mutable","name":"wrappedToken","nameLocation":"875:12:8","nodeType":"VariableDeclaration","scope":346,"src":"866:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":338,"nodeType":"UserDefinedTypeName","pathNode":{"id":337,"name":"IERC4626","nameLocations":["866:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"866:8:8"},"referencedDeclaration":39833,"src":"866:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":341,"mutability":"mutable","name":"underlyingAmount","nameLocation":"905:16:8","nodeType":"VariableDeclaration","scope":346,"src":"897:24:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":340,"name":"uint256","nodeType":"ElementaryTypeName","src":"897:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":343,"mutability":"mutable","name":"wrappedAmount","nameLocation":"939:13:8","nodeType":"VariableDeclaration","scope":346,"src":"931:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":342,"name":"uint256","nodeType":"ElementaryTypeName","src":"931:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"856:102:8"},"returnParameters":{"id":345,"nodeType":"ParameterList","parameters":[],"src":"967:0:8"},"scope":416,"src":"809:159:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"9260d920","id":360,"implemented":false,"kind":"function","modifiers":[],"name":"manualReentrancyAddLiquidityToBuffer","nameLocation":"983:36:8","nodeType":"FunctionDefinition","parameters":{"id":358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":349,"mutability":"mutable","name":"wrappedToken","nameLocation":"1038:12:8","nodeType":"VariableDeclaration","scope":360,"src":"1029:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":348,"nodeType":"UserDefinedTypeName","pathNode":{"id":347,"name":"IERC4626","nameLocations":["1029:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"1029:8:8"},"referencedDeclaration":39833,"src":"1029:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":351,"mutability":"mutable","name":"maxAmountUnderlyingInRaw","nameLocation":"1068:24:8","nodeType":"VariableDeclaration","scope":360,"src":"1060:32:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":350,"name":"uint256","nodeType":"ElementaryTypeName","src":"1060:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":353,"mutability":"mutable","name":"maxAmountWrappedInRaw","nameLocation":"1110:21:8","nodeType":"VariableDeclaration","scope":360,"src":"1102:29:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":352,"name":"uint256","nodeType":"ElementaryTypeName","src":"1102:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":355,"mutability":"mutable","name":"exactSharesToIssue","nameLocation":"1149:18:8","nodeType":"VariableDeclaration","scope":360,"src":"1141:26:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":354,"name":"uint256","nodeType":"ElementaryTypeName","src":"1141:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":357,"mutability":"mutable","name":"sharesOwner","nameLocation":"1185:11:8","nodeType":"VariableDeclaration","scope":360,"src":"1177:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":356,"name":"address","nodeType":"ElementaryTypeName","src":"1177:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1019:183:8"},"returnParameters":{"id":359,"nodeType":"ParameterList","parameters":[],"src":"1211:0:8"},"scope":416,"src":"974:238:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"c7b3b3a9","id":374,"implemented":false,"kind":"function","modifiers":[],"name":"manualReentrancyRemoveLiquidityFromBufferHook","nameLocation":"1227:45:8","nodeType":"FunctionDefinition","parameters":{"id":372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":363,"mutability":"mutable","name":"wrappedToken","nameLocation":"1291:12:8","nodeType":"VariableDeclaration","scope":374,"src":"1282:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":362,"nodeType":"UserDefinedTypeName","pathNode":{"id":361,"name":"IERC4626","nameLocations":["1282:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"1282:8:8"},"referencedDeclaration":39833,"src":"1282:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":365,"mutability":"mutable","name":"sharesToRemove","nameLocation":"1321:14:8","nodeType":"VariableDeclaration","scope":374,"src":"1313:22:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":364,"name":"uint256","nodeType":"ElementaryTypeName","src":"1313:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":367,"mutability":"mutable","name":"minAmountUnderlyingOut","nameLocation":"1353:22:8","nodeType":"VariableDeclaration","scope":374,"src":"1345:30:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":366,"name":"uint256","nodeType":"ElementaryTypeName","src":"1345:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":369,"mutability":"mutable","name":"minAmountWrappedOut","nameLocation":"1393:19:8","nodeType":"VariableDeclaration","scope":374,"src":"1385:27:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":368,"name":"uint256","nodeType":"ElementaryTypeName","src":"1385:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":371,"mutability":"mutable","name":"sharesOwner","nameLocation":"1430:11:8","nodeType":"VariableDeclaration","scope":374,"src":"1422:19:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":370,"name":"address","nodeType":"ElementaryTypeName","src":"1422:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1272:175:8"},"returnParameters":{"id":373,"nodeType":"ParameterList","parameters":[],"src":"1456:0:8"},"scope":416,"src":"1218:239:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"16df26cb","id":379,"implemented":false,"kind":"function","modifiers":[],"name":"manualReentrancyDisableRecoveryMode","nameLocation":"1472:35:8","nodeType":"FunctionDefinition","parameters":{"id":377,"nodeType":"ParameterList","parameters":[{"constant":false,"id":376,"mutability":"mutable","name":"pool","nameLocation":"1516:4:8","nodeType":"VariableDeclaration","scope":379,"src":"1508:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":375,"name":"address","nodeType":"ElementaryTypeName","src":"1508:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1507:14:8"},"returnParameters":{"id":378,"nodeType":"ParameterList","parameters":[],"src":"1530:0:8"},"scope":416,"src":"1463:68:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"88e5101a","id":384,"implemented":false,"kind":"function","modifiers":[],"name":"mockWithValidPercentage","nameLocation":"1546:23:8","nodeType":"FunctionDefinition","parameters":{"id":382,"nodeType":"ParameterList","parameters":[{"constant":false,"id":381,"mutability":"mutable","name":"percentage","nameLocation":"1578:10:8","nodeType":"VariableDeclaration","scope":384,"src":"1570:18:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":380,"name":"uint256","nodeType":"ElementaryTypeName","src":"1570:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1569:20:8"},"returnParameters":{"id":383,"nodeType":"ParameterList","parameters":[],"src":"1603:0:8"},"scope":416,"src":"1537:67:8","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"0b9df1f6","id":389,"implemented":false,"kind":"function","modifiers":[],"name":"mockEnsurePoolNotInRecoveryMode","nameLocation":"1619:31:8","nodeType":"FunctionDefinition","parameters":{"id":387,"nodeType":"ParameterList","parameters":[{"constant":false,"id":386,"mutability":"mutable","name":"pool","nameLocation":"1659:4:8","nodeType":"VariableDeclaration","scope":389,"src":"1651:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":385,"name":"address","nodeType":"ElementaryTypeName","src":"1651:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1650:14:8"},"returnParameters":{"id":388,"nodeType":"ParameterList","parameters":[],"src":"1678:0:8"},"scope":416,"src":"1610:69:8","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"6b230291","id":399,"implemented":false,"kind":"function","modifiers":[],"name":"manualMintBufferShares","nameLocation":"1694:22:8","nodeType":"FunctionDefinition","parameters":{"id":397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":392,"mutability":"mutable","name":"wrappedToken","nameLocation":"1726:12:8","nodeType":"VariableDeclaration","scope":399,"src":"1717:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":391,"nodeType":"UserDefinedTypeName","pathNode":{"id":390,"name":"IERC4626","nameLocations":["1717:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"1717:8:8"},"referencedDeclaration":39833,"src":"1717:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":394,"mutability":"mutable","name":"to","nameLocation":"1748:2:8","nodeType":"VariableDeclaration","scope":399,"src":"1740:10:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":393,"name":"address","nodeType":"ElementaryTypeName","src":"1740:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":396,"mutability":"mutable","name":"amount","nameLocation":"1760:6:8","nodeType":"VariableDeclaration","scope":399,"src":"1752:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":395,"name":"uint256","nodeType":"ElementaryTypeName","src":"1752:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1716:51:8"},"returnParameters":{"id":398,"nodeType":"ParameterList","parameters":[],"src":"1776:0:8"},"scope":416,"src":"1685:92:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"e8338894","id":409,"implemented":false,"kind":"function","modifiers":[],"name":"manualBurnBufferShares","nameLocation":"1792:22:8","nodeType":"FunctionDefinition","parameters":{"id":407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":402,"mutability":"mutable","name":"wrappedToken","nameLocation":"1824:12:8","nodeType":"VariableDeclaration","scope":409,"src":"1815:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":401,"nodeType":"UserDefinedTypeName","pathNode":{"id":400,"name":"IERC4626","nameLocations":["1815:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"1815:8:8"},"referencedDeclaration":39833,"src":"1815:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":404,"mutability":"mutable","name":"from","nameLocation":"1846:4:8","nodeType":"VariableDeclaration","scope":409,"src":"1838:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":403,"name":"address","nodeType":"ElementaryTypeName","src":"1838:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":406,"mutability":"mutable","name":"amount","nameLocation":"1860:6:8","nodeType":"VariableDeclaration","scope":409,"src":"1852:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":405,"name":"uint256","nodeType":"ElementaryTypeName","src":"1852:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1814:53:8"},"returnParameters":{"id":408,"nodeType":"ParameterList","parameters":[],"src":"1876:0:8"},"scope":416,"src":"1783:94:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"e99ac9a3","id":415,"implemented":false,"kind":"function","modifiers":[],"name":"manualMintMinimumBufferSupplyReserve","nameLocation":"1892:36:8","nodeType":"FunctionDefinition","parameters":{"id":413,"nodeType":"ParameterList","parameters":[{"constant":false,"id":412,"mutability":"mutable","name":"wrappedToken","nameLocation":"1938:12:8","nodeType":"VariableDeclaration","scope":415,"src":"1929:21:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":411,"nodeType":"UserDefinedTypeName","pathNode":{"id":410,"name":"IERC4626","nameLocations":["1929:8:8"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"1929:8:8"},"referencedDeclaration":39833,"src":"1929:8:8","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"1928:23:8"},"returnParameters":{"id":414,"nodeType":"ParameterList","parameters":[],"src":"1960:0:8"},"scope":416,"src":"1883:78:8","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":417,"src":"149:1814:8","usedErrors":[],"usedEvents":[]}],"src":"46:1918:8"},"id":8},"@balancer-labs/v3-interfaces/contracts/test/IVaultExtensionMock.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/test/IVaultExtensionMock.sol","exportedSymbols":{"IERC20":[40109],"IVaultExtensionMock":[473],"LiquidityManagement":[4580],"PoolRoleAccounts":[4677],"TokenConfig":[4694]},"id":474,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":418,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:9"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":420,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":474,"sourceUnit":40110,"src":"72:72:9","symbolAliases":[{"foreign":{"id":419,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"81:6:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"../../contracts/vault/VaultTypes.sol","id":424,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":474,"sourceUnit":4872,"src":"146:106:9","symbolAliases":[{"foreign":{"id":421,"name":"TokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4694,"src":"155:11:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":422,"name":"PoolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4677,"src":"168:16:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":423,"name":"LiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4580,"src":"186:19:9","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultExtensionMock","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":473,"linearizedBaseContracts":[473],"name":"IVaultExtensionMock","nameLocation":"264:19:9","nodeType":"ContractDefinition","nodes":[{"functionSelector":"70600089","id":431,"implemented":false,"kind":"function","modifiers":[],"name":"manuallySetSwapFee","nameLocation":"353:18:9","nodeType":"FunctionDefinition","parameters":{"id":429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":426,"mutability":"mutable","name":"pool","nameLocation":"380:4:9","nodeType":"VariableDeclaration","scope":431,"src":"372:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":425,"name":"address","nodeType":"ElementaryTypeName","src":"372:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":428,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"394:17:9","nodeType":"VariableDeclaration","scope":431,"src":"386:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":427,"name":"uint256","nodeType":"ElementaryTypeName","src":"386:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"371:41:9"},"returnParameters":{"id":430,"nodeType":"ParameterList","parameters":[],"src":"421:0:9"},"scope":473,"src":"344:78:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"e68010c6","id":454,"implemented":false,"kind":"function","modifiers":[],"name":"manualRegisterPoolReentrancy","nameLocation":"437:28:9","nodeType":"FunctionDefinition","parameters":{"id":452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":433,"mutability":"mutable","name":"pool","nameLocation":"483:4:9","nodeType":"VariableDeclaration","scope":454,"src":"475:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":432,"name":"address","nodeType":"ElementaryTypeName","src":"475:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":437,"mutability":"mutable","name":"tokenConfig","nameLocation":"518:11:9","nodeType":"VariableDeclaration","scope":454,"src":"497:32:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":435,"nodeType":"UserDefinedTypeName","pathNode":{"id":434,"name":"TokenConfig","nameLocations":["497:11:9"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"497:11:9"},"referencedDeclaration":4694,"src":"497:11:9","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":436,"nodeType":"ArrayTypeName","src":"497:13:9","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":439,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"547:17:9","nodeType":"VariableDeclaration","scope":454,"src":"539:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":438,"name":"uint256","nodeType":"ElementaryTypeName","src":"539:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":441,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"581:18:9","nodeType":"VariableDeclaration","scope":454,"src":"574:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":440,"name":"uint32","nodeType":"ElementaryTypeName","src":"574:6:9","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":443,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"614:17:9","nodeType":"VariableDeclaration","scope":454,"src":"609:22:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":442,"name":"bool","nodeType":"ElementaryTypeName","src":"609:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":446,"mutability":"mutable","name":"roleAccounts","nameLocation":"667:12:9","nodeType":"VariableDeclaration","scope":454,"src":"641:38:9","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_calldata_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":445,"nodeType":"UserDefinedTypeName","pathNode":{"id":444,"name":"PoolRoleAccounts","nameLocations":["641:16:9"],"nodeType":"IdentifierPath","referencedDeclaration":4677,"src":"641:16:9"},"referencedDeclaration":4677,"src":"641:16:9","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":448,"mutability":"mutable","name":"poolHooksContract","nameLocation":"697:17:9","nodeType":"VariableDeclaration","scope":454,"src":"689:25:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":447,"name":"address","nodeType":"ElementaryTypeName","src":"689:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":451,"mutability":"mutable","name":"liquidityManagement","nameLocation":"753:19:9","nodeType":"VariableDeclaration","scope":454,"src":"724:48:9","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":450,"nodeType":"UserDefinedTypeName","pathNode":{"id":449,"name":"LiquidityManagement","nameLocations":["724:19:9"],"nodeType":"IdentifierPath","referencedDeclaration":4580,"src":"724:19:9"},"referencedDeclaration":4580,"src":"724:19:9","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"465:313:9"},"returnParameters":{"id":453,"nodeType":"ParameterList","parameters":[],"src":"787:0:9"},"scope":473,"src":"428:360:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"809846d1","id":472,"implemented":false,"kind":"function","modifiers":[],"name":"manualInitializePoolReentrancy","nameLocation":"803:30:9","nodeType":"FunctionDefinition","parameters":{"id":470,"nodeType":"ParameterList","parameters":[{"constant":false,"id":456,"mutability":"mutable","name":"pool","nameLocation":"851:4:9","nodeType":"VariableDeclaration","scope":472,"src":"843:12:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":455,"name":"address","nodeType":"ElementaryTypeName","src":"843:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":458,"mutability":"mutable","name":"to","nameLocation":"873:2:9","nodeType":"VariableDeclaration","scope":472,"src":"865:10:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":457,"name":"address","nodeType":"ElementaryTypeName","src":"865:7:9","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":462,"mutability":"mutable","name":"tokens","nameLocation":"901:6:9","nodeType":"VariableDeclaration","scope":472,"src":"885:22:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":460,"nodeType":"UserDefinedTypeName","pathNode":{"id":459,"name":"IERC20","nameLocations":["885:6:9"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"885:6:9"},"referencedDeclaration":40109,"src":"885:6:9","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":461,"nodeType":"ArrayTypeName","src":"885:8:9","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":465,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"934:14:9","nodeType":"VariableDeclaration","scope":472,"src":"917:31:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":463,"name":"uint256","nodeType":"ElementaryTypeName","src":"917:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":464,"nodeType":"ArrayTypeName","src":"917:9:9","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":467,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"966:15:9","nodeType":"VariableDeclaration","scope":472,"src":"958:23:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":466,"name":"uint256","nodeType":"ElementaryTypeName","src":"958:7:9","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":469,"mutability":"mutable","name":"userData","nameLocation":"1004:8:9","nodeType":"VariableDeclaration","scope":472,"src":"991:21:9","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":468,"name":"bytes","nodeType":"ElementaryTypeName","src":"991:5:9","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"833:185:9"},"returnParameters":{"id":471,"nodeType":"ParameterList","parameters":[],"src":"1027:0:9"},"scope":473,"src":"794:234:9","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":474,"src":"254:776:9","usedErrors":[],"usedEvents":[]}],"src":"46:985:9"},"id":9},"@balancer-labs/v3-interfaces/contracts/test/IVaultMainMock.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/test/IVaultMainMock.sol","exportedSymbols":{"AddLiquidityKind":[4807],"AddLiquidityParams":[4823],"AfterSwapParams":[4801],"BufferWrapOrUnwrapParams":[4862],"FEE_BITLENGTH":[4865],"FEE_SCALING_FACTOR":[4868],"HookFlags":[4627],"HooksConfig":[4651],"IERC20":[40109],"IERC4626":[39833],"IRateProvider":[263],"IVaultMainMock":[1386],"LiquidityManagement":[4580],"MAX_FEE_PERCENTAGE":[4871],"PoolConfig":[4605],"PoolConfigBits":[4582],"PoolData":[4729],"PoolRoleAccounts":[4677],"PoolSwapParams":[4772],"RemoveLiquidityKind":[4828],"RemoveLiquidityParams":[4844],"Rounding":[4732],"SwapKind":[4735],"SwapState":[4661],"TokenConfig":[4694],"TokenInfo":[4704],"TokenType":[4681],"VaultState":[4669],"VaultSwapParams":[4754],"WrappingDirection":[4847]},"id":1387,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":475,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:10"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":477,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1387,"sourceUnit":39834,"src":"72:75:10","symbolAliases":[{"foreign":{"id":476,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39833,"src":"81:8:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":479,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1387,"sourceUnit":40110,"src":"148:72:10","symbolAliases":[{"foreign":{"id":478,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"157:6:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","file":"../solidity-utils/helpers/IRateProvider.sol","id":481,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1387,"sourceUnit":264,"src":"222:76:10","symbolAliases":[{"foreign":{"id":480,"name":"IRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":263,"src":"231:13:10","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"../vault/VaultTypes.sol","id":482,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1387,"sourceUnit":4872,"src":"299:33:10","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultMainMock","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":1386,"linearizedBaseContracts":[1386],"name":"IVaultMainMock","nameLocation":"344:14:10","nodeType":"ContractDefinition","nodes":[{"functionSelector":"87a76c59","id":487,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolFactoryMock","nameLocation":"374:18:10","nodeType":"FunctionDefinition","parameters":{"id":483,"nodeType":"ParameterList","parameters":[],"src":"392:2:10"},"returnParameters":{"id":486,"nodeType":"ParameterList","parameters":[{"constant":false,"id":485,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":487,"src":"418:7:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":484,"name":"address","nodeType":"ElementaryTypeName","src":"418:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"417:9:10"},"scope":1386,"src":"365:62:10","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"1d27af68","id":496,"implemented":false,"kind":"function","modifiers":[],"name":"burnERC20","nameLocation":"442:9:10","nodeType":"FunctionDefinition","parameters":{"id":494,"nodeType":"ParameterList","parameters":[{"constant":false,"id":489,"mutability":"mutable","name":"token","nameLocation":"460:5:10","nodeType":"VariableDeclaration","scope":496,"src":"452:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":488,"name":"address","nodeType":"ElementaryTypeName","src":"452:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":491,"mutability":"mutable","name":"from","nameLocation":"475:4:10","nodeType":"VariableDeclaration","scope":496,"src":"467:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":490,"name":"address","nodeType":"ElementaryTypeName","src":"467:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":493,"mutability":"mutable","name":"amount","nameLocation":"489:6:10","nodeType":"VariableDeclaration","scope":496,"src":"481:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":492,"name":"uint256","nodeType":"ElementaryTypeName","src":"481:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"451:45:10"},"returnParameters":{"id":495,"nodeType":"ParameterList","parameters":[],"src":"505:0:10"},"scope":1386,"src":"433:73:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"47c07e88","id":505,"implemented":false,"kind":"function","modifiers":[],"name":"mintERC20","nameLocation":"521:9:10","nodeType":"FunctionDefinition","parameters":{"id":503,"nodeType":"ParameterList","parameters":[{"constant":false,"id":498,"mutability":"mutable","name":"token","nameLocation":"539:5:10","nodeType":"VariableDeclaration","scope":505,"src":"531:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":497,"name":"address","nodeType":"ElementaryTypeName","src":"531:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":500,"mutability":"mutable","name":"to","nameLocation":"554:2:10","nodeType":"VariableDeclaration","scope":505,"src":"546:10:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":499,"name":"address","nodeType":"ElementaryTypeName","src":"546:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":502,"mutability":"mutable","name":"amount","nameLocation":"566:6:10","nodeType":"VariableDeclaration","scope":505,"src":"558:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":501,"name":"uint256","nodeType":"ElementaryTypeName","src":"558:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"530:43:10"},"returnParameters":{"id":504,"nodeType":"ParameterList","parameters":[],"src":"582:0:10"},"scope":1386,"src":"512:71:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"851c65a3","id":514,"implemented":false,"kind":"function","modifiers":[],"name":"manualRegisterPool","nameLocation":"598:18:10","nodeType":"FunctionDefinition","parameters":{"id":512,"nodeType":"ParameterList","parameters":[{"constant":false,"id":507,"mutability":"mutable","name":"pool","nameLocation":"625:4:10","nodeType":"VariableDeclaration","scope":514,"src":"617:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":506,"name":"address","nodeType":"ElementaryTypeName","src":"617:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":511,"mutability":"mutable","name":"tokens","nameLocation":"647:6:10","nodeType":"VariableDeclaration","scope":514,"src":"631:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":509,"nodeType":"UserDefinedTypeName","pathNode":{"id":508,"name":"IERC20","nameLocations":["631:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"631:6:10"},"referencedDeclaration":40109,"src":"631:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":510,"nodeType":"ArrayTypeName","src":"631:8:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"616:38:10"},"returnParameters":{"id":513,"nodeType":"ParameterList","parameters":[],"src":"663:0:10"},"scope":1386,"src":"589:75:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"1f495f79","id":525,"implemented":false,"kind":"function","modifiers":[],"name":"manualRegisterPoolWithSwapFee","nameLocation":"679:29:10","nodeType":"FunctionDefinition","parameters":{"id":523,"nodeType":"ParameterList","parameters":[{"constant":false,"id":516,"mutability":"mutable","name":"pool","nameLocation":"717:4:10","nodeType":"VariableDeclaration","scope":525,"src":"709:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":515,"name":"address","nodeType":"ElementaryTypeName","src":"709:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":520,"mutability":"mutable","name":"tokens","nameLocation":"739:6:10","nodeType":"VariableDeclaration","scope":525,"src":"723:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":518,"nodeType":"UserDefinedTypeName","pathNode":{"id":517,"name":"IERC20","nameLocations":["723:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"723:6:10"},"referencedDeclaration":40109,"src":"723:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":519,"nodeType":"ArrayTypeName","src":"723:8:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":522,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"755:17:10","nodeType":"VariableDeclaration","scope":525,"src":"747:25:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":521,"name":"uint256","nodeType":"ElementaryTypeName","src":"747:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"708:65:10"},"returnParameters":{"id":524,"nodeType":"ParameterList","parameters":[],"src":"782:0:10"},"scope":1386,"src":"670:113:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"32333ce6","id":534,"implemented":false,"kind":"function","modifiers":[],"name":"manualRegisterPoolPassThruTokens","nameLocation":"798:32:10","nodeType":"FunctionDefinition","parameters":{"id":532,"nodeType":"ParameterList","parameters":[{"constant":false,"id":527,"mutability":"mutable","name":"pool","nameLocation":"839:4:10","nodeType":"VariableDeclaration","scope":534,"src":"831:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":526,"name":"address","nodeType":"ElementaryTypeName","src":"831:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":531,"mutability":"mutable","name":"tokens","nameLocation":"861:6:10","nodeType":"VariableDeclaration","scope":534,"src":"845:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":529,"nodeType":"UserDefinedTypeName","pathNode":{"id":528,"name":"IERC20","nameLocations":["845:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"845:6:10"},"referencedDeclaration":40109,"src":"845:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":530,"nodeType":"ArrayTypeName","src":"845:8:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"830:38:10"},"returnParameters":{"id":533,"nodeType":"ParameterList","parameters":[],"src":"877:0:10"},"scope":1386,"src":"789:89:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"0362a513","id":548,"implemented":false,"kind":"function","modifiers":[],"name":"manualRegisterPoolAtTimestamp","nameLocation":"893:29:10","nodeType":"FunctionDefinition","parameters":{"id":546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":536,"mutability":"mutable","name":"pool","nameLocation":"940:4:10","nodeType":"VariableDeclaration","scope":548,"src":"932:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":535,"name":"address","nodeType":"ElementaryTypeName","src":"932:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":540,"mutability":"mutable","name":"tokens","nameLocation":"970:6:10","nodeType":"VariableDeclaration","scope":548,"src":"954:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":538,"nodeType":"UserDefinedTypeName","pathNode":{"id":537,"name":"IERC20","nameLocations":["954:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"954:6:10"},"referencedDeclaration":40109,"src":"954:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":539,"nodeType":"ArrayTypeName","src":"954:8:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":542,"mutability":"mutable","name":"timestamp","nameLocation":"993:9:10","nodeType":"VariableDeclaration","scope":548,"src":"986:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":541,"name":"uint32","nodeType":"ElementaryTypeName","src":"986:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":545,"mutability":"mutable","name":"roleAccounts","nameLocation":"1036:12:10","nodeType":"VariableDeclaration","scope":548,"src":"1012:36:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":544,"nodeType":"UserDefinedTypeName","pathNode":{"id":543,"name":"PoolRoleAccounts","nameLocations":["1012:16:10"],"nodeType":"IdentifierPath","referencedDeclaration":4677,"src":"1012:16:10"},"referencedDeclaration":4677,"src":"1012:16:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"src":"922:132:10"},"returnParameters":{"id":547,"nodeType":"ParameterList","parameters":[],"src":"1063:0:10"},"scope":1386,"src":"884:180:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"352339ee","id":555,"implemented":false,"kind":"function","modifiers":[],"name":"manualSetPoolRegistered","nameLocation":"1079:23:10","nodeType":"FunctionDefinition","parameters":{"id":553,"nodeType":"ParameterList","parameters":[{"constant":false,"id":550,"mutability":"mutable","name":"pool","nameLocation":"1111:4:10","nodeType":"VariableDeclaration","scope":555,"src":"1103:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":549,"name":"address","nodeType":"ElementaryTypeName","src":"1103:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":552,"mutability":"mutable","name":"status","nameLocation":"1122:6:10","nodeType":"VariableDeclaration","scope":555,"src":"1117:11:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":551,"name":"bool","nodeType":"ElementaryTypeName","src":"1117:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1102:27:10"},"returnParameters":{"id":554,"nodeType":"ParameterList","parameters":[],"src":"1138:0:10"},"scope":1386,"src":"1070:69:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"5e3e00fa","id":562,"implemented":false,"kind":"function","modifiers":[],"name":"manualSetInitializedPool","nameLocation":"1154:24:10","nodeType":"FunctionDefinition","parameters":{"id":560,"nodeType":"ParameterList","parameters":[{"constant":false,"id":557,"mutability":"mutable","name":"pool","nameLocation":"1187:4:10","nodeType":"VariableDeclaration","scope":562,"src":"1179:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":556,"name":"address","nodeType":"ElementaryTypeName","src":"1179:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":559,"mutability":"mutable","name":"isPoolInitialized","nameLocation":"1198:17:10","nodeType":"VariableDeclaration","scope":562,"src":"1193:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":558,"name":"bool","nodeType":"ElementaryTypeName","src":"1193:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1178:38:10"},"returnParameters":{"id":561,"nodeType":"ParameterList","parameters":[],"src":"1225:0:10"},"scope":1386,"src":"1145:81:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"cbde2b68","id":569,"implemented":false,"kind":"function","modifiers":[],"name":"manualSetPoolPaused","nameLocation":"1241:19:10","nodeType":"FunctionDefinition","parameters":{"id":567,"nodeType":"ParameterList","parameters":[{"constant":false,"id":564,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":569,"src":"1261:7:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":563,"name":"address","nodeType":"ElementaryTypeName","src":"1261:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":566,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":569,"src":"1270:4:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":565,"name":"bool","nodeType":"ElementaryTypeName","src":"1270:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1260:15:10"},"returnParameters":{"id":568,"nodeType":"ParameterList","parameters":[],"src":"1284:0:10"},"scope":1386,"src":"1232:53:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"0c87409b","id":576,"implemented":false,"kind":"function","modifiers":[],"name":"manualSetPoolPauseWindowEndTime","nameLocation":"1300:31:10","nodeType":"FunctionDefinition","parameters":{"id":574,"nodeType":"ParameterList","parameters":[{"constant":false,"id":571,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":576,"src":"1332:7:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":570,"name":"address","nodeType":"ElementaryTypeName","src":"1332:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":573,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":576,"src":"1341:6:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":572,"name":"uint32","nodeType":"ElementaryTypeName","src":"1341:6:10","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1331:17:10"},"returnParameters":{"id":575,"nodeType":"ParameterList","parameters":[],"src":"1357:0:10"},"scope":1386,"src":"1291:67:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"692407ae","id":581,"implemented":false,"kind":"function","modifiers":[],"name":"manualSetVaultPaused","nameLocation":"1373:20:10","nodeType":"FunctionDefinition","parameters":{"id":579,"nodeType":"ParameterList","parameters":[{"constant":false,"id":578,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":581,"src":"1394:4:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":577,"name":"bool","nodeType":"ElementaryTypeName","src":"1394:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1393:6:10"},"returnParameters":{"id":580,"nodeType":"ParameterList","parameters":[],"src":"1408:0:10"},"scope":1386,"src":"1364:45:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"10c1dc41","id":588,"implemented":false,"kind":"function","modifiers":[],"name":"manualSetVaultState","nameLocation":"1424:19:10","nodeType":"FunctionDefinition","parameters":{"id":586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":583,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":588,"src":"1444:4:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":582,"name":"bool","nodeType":"ElementaryTypeName","src":"1444:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":585,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":588,"src":"1450:4:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":584,"name":"bool","nodeType":"ElementaryTypeName","src":"1450:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1443:12:10"},"returnParameters":{"id":587,"nodeType":"ParameterList","parameters":[],"src":"1464:0:10"},"scope":1386,"src":"1415:50:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"dab50579","id":597,"implemented":false,"kind":"function","modifiers":[],"name":"manualSetPoolTokenInfo","nameLocation":"1480:22:10","nodeType":"FunctionDefinition","parameters":{"id":595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":590,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":597,"src":"1503:7:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":589,"name":"address","nodeType":"ElementaryTypeName","src":"1503:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":594,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":597,"src":"1512:20:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":592,"nodeType":"UserDefinedTypeName","pathNode":{"id":591,"name":"TokenConfig","nameLocations":["1512:11:10"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"1512:11:10"},"referencedDeclaration":4694,"src":"1512:11:10","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":593,"nodeType":"ArrayTypeName","src":"1512:13:10","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"}],"src":"1502:31:10"},"returnParameters":{"id":596,"nodeType":"ParameterList","parameters":[],"src":"1542:0:10"},"scope":1386,"src":"1471:72:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"bb14e466","id":610,"implemented":false,"kind":"function","modifiers":[],"name":"manualSetPoolTokenInfo","nameLocation":"1558:22:10","nodeType":"FunctionDefinition","parameters":{"id":608,"nodeType":"ParameterList","parameters":[{"constant":false,"id":599,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":610,"src":"1581:7:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":598,"name":"address","nodeType":"ElementaryTypeName","src":"1581:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":603,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":610,"src":"1590:15:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":601,"nodeType":"UserDefinedTypeName","pathNode":{"id":600,"name":"IERC20","nameLocations":["1590:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"1590:6:10"},"referencedDeclaration":40109,"src":"1590:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":602,"nodeType":"ArrayTypeName","src":"1590:8:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":607,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":610,"src":"1607:18:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4704_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":605,"nodeType":"UserDefinedTypeName","pathNode":{"id":604,"name":"TokenInfo","nameLocations":["1607:9:10"],"nodeType":"IdentifierPath","referencedDeclaration":4704,"src":"1607:9:10"},"referencedDeclaration":4704,"src":"1607:9:10","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_storage_ptr","typeString":"struct TokenInfo"}},"id":606,"nodeType":"ArrayTypeName","src":"1607:11:10","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4704_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"}],"src":"1580:46:10"},"returnParameters":{"id":609,"nodeType":"ParameterList","parameters":[],"src":"1635:0:10"},"scope":1386,"src":"1549:87:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"5c1c1c81","id":618,"implemented":false,"kind":"function","modifiers":[],"name":"manualSetPoolConfig","nameLocation":"1651:19:10","nodeType":"FunctionDefinition","parameters":{"id":616,"nodeType":"ParameterList","parameters":[{"constant":false,"id":612,"mutability":"mutable","name":"pool","nameLocation":"1679:4:10","nodeType":"VariableDeclaration","scope":618,"src":"1671:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":611,"name":"address","nodeType":"ElementaryTypeName","src":"1671:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":615,"mutability":"mutable","name":"config","nameLocation":"1703:6:10","nodeType":"VariableDeclaration","scope":618,"src":"1685:24:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig"},"typeName":{"id":614,"nodeType":"UserDefinedTypeName","pathNode":{"id":613,"name":"PoolConfig","nameLocations":["1685:10:10"],"nodeType":"IdentifierPath","referencedDeclaration":4605,"src":"1685:10:10"},"referencedDeclaration":4605,"src":"1685:10:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_storage_ptr","typeString":"struct PoolConfig"}},"visibility":"internal"}],"src":"1670:40:10"},"returnParameters":{"id":617,"nodeType":"ParameterList","parameters":[],"src":"1719:0:10"},"scope":1386,"src":"1642:78:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"c1fdcd62","id":626,"implemented":false,"kind":"function","modifiers":[],"name":"manualSetHooksConfig","nameLocation":"1735:20:10","nodeType":"FunctionDefinition","parameters":{"id":624,"nodeType":"ParameterList","parameters":[{"constant":false,"id":620,"mutability":"mutable","name":"pool","nameLocation":"1764:4:10","nodeType":"VariableDeclaration","scope":626,"src":"1756:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":619,"name":"address","nodeType":"ElementaryTypeName","src":"1756:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":623,"mutability":"mutable","name":"config","nameLocation":"1789:6:10","nodeType":"VariableDeclaration","scope":626,"src":"1770:25:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4651_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":622,"nodeType":"UserDefinedTypeName","pathNode":{"id":621,"name":"HooksConfig","nameLocations":["1770:11:10"],"nodeType":"IdentifierPath","referencedDeclaration":4651,"src":"1770:11:10"},"referencedDeclaration":4651,"src":"1770:11:10","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4651_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"}],"src":"1755:41:10"},"returnParameters":{"id":625,"nodeType":"ParameterList","parameters":[],"src":"1805:0:10"},"scope":1386,"src":"1726:80:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"195aaef9","id":633,"implemented":false,"kind":"function","modifiers":[],"name":"manualSetStaticSwapFeePercentage","nameLocation":"1821:32:10","nodeType":"FunctionDefinition","parameters":{"id":631,"nodeType":"ParameterList","parameters":[{"constant":false,"id":628,"mutability":"mutable","name":"pool","nameLocation":"1862:4:10","nodeType":"VariableDeclaration","scope":633,"src":"1854:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":627,"name":"address","nodeType":"ElementaryTypeName","src":"1854:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":630,"mutability":"mutable","name":"value","nameLocation":"1876:5:10","nodeType":"VariableDeclaration","scope":633,"src":"1868:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":629,"name":"uint256","nodeType":"ElementaryTypeName","src":"1868:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1853:29:10"},"returnParameters":{"id":632,"nodeType":"ParameterList","parameters":[],"src":"1891:0:10"},"scope":1386,"src":"1812:80:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":634,"nodeType":"StructuredDocumentation","src":"1898:91:10","text":"@dev Does not check the value against any min/max limits normally enforced by the pool."},"functionSelector":"2b766278","id":641,"implemented":false,"kind":"function","modifiers":[],"name":"manualUnsafeSetStaticSwapFeePercentage","nameLocation":"2003:38:10","nodeType":"FunctionDefinition","parameters":{"id":639,"nodeType":"ParameterList","parameters":[{"constant":false,"id":636,"mutability":"mutable","name":"pool","nameLocation":"2050:4:10","nodeType":"VariableDeclaration","scope":641,"src":"2042:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":635,"name":"address","nodeType":"ElementaryTypeName","src":"2042:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":638,"mutability":"mutable","name":"value","nameLocation":"2064:5:10","nodeType":"VariableDeclaration","scope":641,"src":"2056:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":637,"name":"uint256","nodeType":"ElementaryTypeName","src":"2056:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2041:29:10"},"returnParameters":{"id":640,"nodeType":"ParameterList","parameters":[],"src":"2079:0:10"},"scope":1386,"src":"1994:86:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"82ea1749","id":650,"implemented":false,"kind":"function","modifiers":[],"name":"manualSetPoolTokens","nameLocation":"2095:19:10","nodeType":"FunctionDefinition","parameters":{"id":648,"nodeType":"ParameterList","parameters":[{"constant":false,"id":643,"mutability":"mutable","name":"pool","nameLocation":"2123:4:10","nodeType":"VariableDeclaration","scope":650,"src":"2115:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":642,"name":"address","nodeType":"ElementaryTypeName","src":"2115:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":647,"mutability":"mutable","name":"tokens","nameLocation":"2145:6:10","nodeType":"VariableDeclaration","scope":650,"src":"2129:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":645,"nodeType":"UserDefinedTypeName","pathNode":{"id":644,"name":"IERC20","nameLocations":["2129:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"2129:6:10"},"referencedDeclaration":40109,"src":"2129:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":646,"nodeType":"ArrayTypeName","src":"2129:8:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"2114:38:10"},"returnParameters":{"id":649,"nodeType":"ParameterList","parameters":[],"src":"2161:0:10"},"scope":1386,"src":"2086:76:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"d8f4cf3c","id":665,"implemented":false,"kind":"function","modifiers":[],"name":"manualSetPoolTokensAndBalances","nameLocation":"2177:30:10","nodeType":"FunctionDefinition","parameters":{"id":663,"nodeType":"ParameterList","parameters":[{"constant":false,"id":652,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":665,"src":"2208:7:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":651,"name":"address","nodeType":"ElementaryTypeName","src":"2208:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":656,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":665,"src":"2217:15:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":654,"nodeType":"UserDefinedTypeName","pathNode":{"id":653,"name":"IERC20","nameLocations":["2217:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"2217:6:10"},"referencedDeclaration":40109,"src":"2217:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":655,"nodeType":"ArrayTypeName","src":"2217:8:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":659,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":665,"src":"2234:16:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":657,"name":"uint256","nodeType":"ElementaryTypeName","src":"2234:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":658,"nodeType":"ArrayTypeName","src":"2234:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":662,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":665,"src":"2252:16:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":660,"name":"uint256","nodeType":"ElementaryTypeName","src":"2252:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":661,"nodeType":"ArrayTypeName","src":"2252:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"2207:62:10"},"returnParameters":{"id":664,"nodeType":"ParameterList","parameters":[],"src":"2278:0:10"},"scope":1386,"src":"2168:111:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"1c4e1e23","id":676,"implemented":false,"kind":"function","modifiers":[],"name":"manualSetPoolBalances","nameLocation":"2294:21:10","nodeType":"FunctionDefinition","parameters":{"id":674,"nodeType":"ParameterList","parameters":[{"constant":false,"id":667,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":676,"src":"2316:7:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":666,"name":"address","nodeType":"ElementaryTypeName","src":"2316:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":670,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":676,"src":"2325:16:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":668,"name":"uint256","nodeType":"ElementaryTypeName","src":"2325:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":669,"nodeType":"ArrayTypeName","src":"2325:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":673,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":676,"src":"2343:16:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":671,"name":"uint256","nodeType":"ElementaryTypeName","src":"2343:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":672,"nodeType":"ArrayTypeName","src":"2343:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"2315:45:10"},"returnParameters":{"id":675,"nodeType":"ParameterList","parameters":[],"src":"2369:0:10"},"scope":1386,"src":"2285:85:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"df138458","id":684,"implemented":false,"kind":"function","modifiers":[],"name":"manualSetPoolConfigBits","nameLocation":"2385:23:10","nodeType":"FunctionDefinition","parameters":{"id":682,"nodeType":"ParameterList","parameters":[{"constant":false,"id":678,"mutability":"mutable","name":"pool","nameLocation":"2417:4:10","nodeType":"VariableDeclaration","scope":684,"src":"2409:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":677,"name":"address","nodeType":"ElementaryTypeName","src":"2409:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":681,"mutability":"mutable","name":"config","nameLocation":"2438:6:10","nodeType":"VariableDeclaration","scope":684,"src":"2423:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":680,"nodeType":"UserDefinedTypeName","pathNode":{"id":679,"name":"PoolConfigBits","nameLocations":["2423:14:10"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"2423:14:10"},"referencedDeclaration":4582,"src":"2423:14:10","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"2408:37:10"},"returnParameters":{"id":683,"nodeType":"ParameterList","parameters":[],"src":"2454:0:10"},"scope":1386,"src":"2376:79:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"b8caceee","id":687,"implemented":false,"kind":"function","modifiers":[],"name":"mockIsUnlocked","nameLocation":"2470:14:10","nodeType":"FunctionDefinition","parameters":{"id":685,"nodeType":"ParameterList","parameters":[],"src":"2484:2:10"},"returnParameters":{"id":686,"nodeType":"ParameterList","parameters":[],"src":"2500:0:10"},"scope":1386,"src":"2461:40:10","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"62691e5f","id":692,"implemented":false,"kind":"function","modifiers":[],"name":"mockWithInitializedPool","nameLocation":"2516:23:10","nodeType":"FunctionDefinition","parameters":{"id":690,"nodeType":"ParameterList","parameters":[{"constant":false,"id":689,"mutability":"mutable","name":"pool","nameLocation":"2548:4:10","nodeType":"VariableDeclaration","scope":692,"src":"2540:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":688,"name":"address","nodeType":"ElementaryTypeName","src":"2540:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2539:14:10"},"returnParameters":{"id":691,"nodeType":"ParameterList","parameters":[],"src":"2567:0:10"},"scope":1386,"src":"2507:61:10","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"02e1a4aa","id":697,"implemented":false,"kind":"function","modifiers":[],"name":"ensurePoolNotPaused","nameLocation":"2583:19:10","nodeType":"FunctionDefinition","parameters":{"id":695,"nodeType":"ParameterList","parameters":[{"constant":false,"id":694,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":697,"src":"2603:7:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":693,"name":"address","nodeType":"ElementaryTypeName","src":"2603:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2602:9:10"},"returnParameters":{"id":696,"nodeType":"ParameterList","parameters":[],"src":"2625:0:10"},"scope":1386,"src":"2574:52:10","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"e460a8a9","id":705,"implemented":false,"kind":"function","modifiers":[],"name":"ensureUnpausedAndGetVaultState","nameLocation":"2641:30:10","nodeType":"FunctionDefinition","parameters":{"id":700,"nodeType":"ParameterList","parameters":[{"constant":false,"id":699,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":705,"src":"2672:7:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":698,"name":"address","nodeType":"ElementaryTypeName","src":"2672:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2671:9:10"},"returnParameters":{"id":704,"nodeType":"ParameterList","parameters":[{"constant":false,"id":703,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":705,"src":"2704:17:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultState_$4669_memory_ptr","typeString":"struct VaultState"},"typeName":{"id":702,"nodeType":"UserDefinedTypeName","pathNode":{"id":701,"name":"VaultState","nameLocations":["2704:10:10"],"nodeType":"IdentifierPath","referencedDeclaration":4669,"src":"2704:10:10"},"referencedDeclaration":4669,"src":"2704:10:10","typeDescriptions":{"typeIdentifier":"t_struct$_VaultState_$4669_storage_ptr","typeString":"struct VaultState"}},"visibility":"internal"}],"src":"2703:19:10"},"scope":1386,"src":"2632:91:10","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"2606a4de","id":713,"implemented":false,"kind":"function","modifiers":[],"name":"internalGetBufferUnderlyingImbalance","nameLocation":"2738:36:10","nodeType":"FunctionDefinition","parameters":{"id":709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":708,"mutability":"mutable","name":"wrappedToken","nameLocation":"2784:12:10","nodeType":"VariableDeclaration","scope":713,"src":"2775:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":707,"nodeType":"UserDefinedTypeName","pathNode":{"id":706,"name":"IERC4626","nameLocations":["2775:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"2775:8:10"},"referencedDeclaration":39833,"src":"2775:8:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"2774:23:10"},"returnParameters":{"id":712,"nodeType":"ParameterList","parameters":[{"constant":false,"id":711,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":713,"src":"2821:6:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":710,"name":"int256","nodeType":"ElementaryTypeName","src":"2821:6:10","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"2820:8:10"},"scope":1386,"src":"2729:100:10","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"a40f9592","id":721,"implemented":false,"kind":"function","modifiers":[],"name":"internalGetBufferWrappedImbalance","nameLocation":"2844:33:10","nodeType":"FunctionDefinition","parameters":{"id":717,"nodeType":"ParameterList","parameters":[{"constant":false,"id":716,"mutability":"mutable","name":"wrappedToken","nameLocation":"2887:12:10","nodeType":"VariableDeclaration","scope":721,"src":"2878:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":715,"nodeType":"UserDefinedTypeName","pathNode":{"id":714,"name":"IERC4626","nameLocations":["2878:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"2878:8:10"},"referencedDeclaration":39833,"src":"2878:8:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"2877:23:10"},"returnParameters":{"id":720,"nodeType":"ParameterList","parameters":[{"constant":false,"id":719,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":721,"src":"2924:6:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":718,"name":"int256","nodeType":"ElementaryTypeName","src":"2924:6:10","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"2923:8:10"},"scope":1386,"src":"2835:97:10","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"e5b08ffb","id":729,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferTokenBalancesBytes","nameLocation":"2947:27:10","nodeType":"FunctionDefinition","parameters":{"id":725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":724,"mutability":"mutable","name":"wrappedToken","nameLocation":"2984:12:10","nodeType":"VariableDeclaration","scope":729,"src":"2975:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":723,"nodeType":"UserDefinedTypeName","pathNode":{"id":722,"name":"IERC4626","nameLocations":["2975:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"2975:8:10"},"referencedDeclaration":39833,"src":"2975:8:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"2974:23:10"},"returnParameters":{"id":728,"nodeType":"ParameterList","parameters":[{"constant":false,"id":727,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":729,"src":"3021:7:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":726,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3021:7:10","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3020:9:10"},"scope":1386,"src":"2938:92:10","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"87a530f8","id":734,"implemented":false,"kind":"function","modifiers":[],"name":"recoveryModeExit","nameLocation":"3045:16:10","nodeType":"FunctionDefinition","parameters":{"id":732,"nodeType":"ParameterList","parameters":[{"constant":false,"id":731,"mutability":"mutable","name":"pool","nameLocation":"3070:4:10","nodeType":"VariableDeclaration","scope":734,"src":"3062:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":730,"name":"address","nodeType":"ElementaryTypeName","src":"3062:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3061:14:10"},"returnParameters":{"id":733,"nodeType":"ParameterList","parameters":[],"src":"3089:0:10"},"scope":1386,"src":"3036:54:10","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"0f682ba0","id":745,"implemented":false,"kind":"function","modifiers":[],"name":"loadPoolDataUpdatingBalancesAndYieldFees","nameLocation":"3105:40:10","nodeType":"FunctionDefinition","parameters":{"id":740,"nodeType":"ParameterList","parameters":[{"constant":false,"id":736,"mutability":"mutable","name":"pool","nameLocation":"3163:4:10","nodeType":"VariableDeclaration","scope":745,"src":"3155:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":735,"name":"address","nodeType":"ElementaryTypeName","src":"3155:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":739,"mutability":"mutable","name":"roundingDirection","nameLocation":"3186:17:10","nodeType":"VariableDeclaration","scope":745,"src":"3177:26:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"},"typeName":{"id":738,"nodeType":"UserDefinedTypeName","pathNode":{"id":737,"name":"Rounding","nameLocations":["3177:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4732,"src":"3177:8:10"},"referencedDeclaration":4732,"src":"3177:8:10","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"visibility":"internal"}],"src":"3145:64:10"},"returnParameters":{"id":744,"nodeType":"ParameterList","parameters":[{"constant":false,"id":743,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":745,"src":"3228:15:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":742,"nodeType":"UserDefinedTypeName","pathNode":{"id":741,"name":"PoolData","nameLocations":["3228:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"3228:8:10"},"referencedDeclaration":4729,"src":"3228:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"3227:17:10"},"scope":1386,"src":"3096:149:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"dc4402ed","id":756,"implemented":false,"kind":"function","modifiers":[],"name":"loadPoolDataUpdatingBalancesAndYieldFeesReentrancy","nameLocation":"3260:50:10","nodeType":"FunctionDefinition","parameters":{"id":751,"nodeType":"ParameterList","parameters":[{"constant":false,"id":747,"mutability":"mutable","name":"pool","nameLocation":"3328:4:10","nodeType":"VariableDeclaration","scope":756,"src":"3320:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":746,"name":"address","nodeType":"ElementaryTypeName","src":"3320:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":750,"mutability":"mutable","name":"roundingDirection","nameLocation":"3351:17:10","nodeType":"VariableDeclaration","scope":756,"src":"3342:26:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"},"typeName":{"id":749,"nodeType":"UserDefinedTypeName","pathNode":{"id":748,"name":"Rounding","nameLocations":["3342:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4732,"src":"3342:8:10"},"referencedDeclaration":4732,"src":"3342:8:10","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"visibility":"internal"}],"src":"3310:64:10"},"returnParameters":{"id":755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":754,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":756,"src":"3393:15:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":753,"nodeType":"UserDefinedTypeName","pathNode":{"id":752,"name":"PoolData","nameLocations":["3393:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"3393:8:10"},"referencedDeclaration":4729,"src":"3393:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"3392:17:10"},"scope":1386,"src":"3251:159:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"0f619655","id":764,"implemented":false,"kind":"function","modifiers":[],"name":"manualWritePoolBalancesToStorage","nameLocation":"3425:32:10","nodeType":"FunctionDefinition","parameters":{"id":762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":758,"mutability":"mutable","name":"pool","nameLocation":"3466:4:10","nodeType":"VariableDeclaration","scope":764,"src":"3458:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":757,"name":"address","nodeType":"ElementaryTypeName","src":"3458:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":761,"mutability":"mutable","name":"poolData","nameLocation":"3488:8:10","nodeType":"VariableDeclaration","scope":764,"src":"3472:24:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":760,"nodeType":"UserDefinedTypeName","pathNode":{"id":759,"name":"PoolData","nameLocations":["3472:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"3472:8:10"},"referencedDeclaration":4729,"src":"3472:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"3457:40:10"},"returnParameters":{"id":763,"nodeType":"ParameterList","parameters":[],"src":"3506:0:10"},"scope":1386,"src":"3416:91:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"19a24bcb","id":772,"implemented":false,"kind":"function","modifiers":[],"name":"getRawBalances","nameLocation":"3522:14:10","nodeType":"FunctionDefinition","parameters":{"id":767,"nodeType":"ParameterList","parameters":[{"constant":false,"id":766,"mutability":"mutable","name":"pool","nameLocation":"3545:4:10","nodeType":"VariableDeclaration","scope":772,"src":"3537:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":765,"name":"address","nodeType":"ElementaryTypeName","src":"3537:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3536:14:10"},"returnParameters":{"id":771,"nodeType":"ParameterList","parameters":[{"constant":false,"id":770,"mutability":"mutable","name":"balancesRaw","nameLocation":"3591:11:10","nodeType":"VariableDeclaration","scope":772,"src":"3574:28:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":768,"name":"uint256","nodeType":"ElementaryTypeName","src":"3574:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":769,"nodeType":"ArrayTypeName","src":"3574:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"3573:30:10"},"scope":1386,"src":"3513:91:10","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"3cce2585","id":780,"implemented":false,"kind":"function","modifiers":[],"name":"getLastLiveBalances","nameLocation":"3619:19:10","nodeType":"FunctionDefinition","parameters":{"id":775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":774,"mutability":"mutable","name":"pool","nameLocation":"3647:4:10","nodeType":"VariableDeclaration","scope":780,"src":"3639:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":773,"name":"address","nodeType":"ElementaryTypeName","src":"3639:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3638:14:10"},"returnParameters":{"id":779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":778,"mutability":"mutable","name":"lastBalancesLiveScaled18","nameLocation":"3693:24:10","nodeType":"VariableDeclaration","scope":780,"src":"3676:41:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":776,"name":"uint256","nodeType":"ElementaryTypeName","src":"3676:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":777,"nodeType":"ArrayTypeName","src":"3676:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"3675:43:10"},"scope":1386,"src":"3610:109:10","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"aa01edb3","id":796,"implemented":false,"kind":"function","modifiers":[],"name":"updateLiveTokenBalanceInPoolData","nameLocation":"3734:32:10","nodeType":"FunctionDefinition","parameters":{"id":791,"nodeType":"ParameterList","parameters":[{"constant":false,"id":783,"mutability":"mutable","name":"poolData","nameLocation":"3792:8:10","nodeType":"VariableDeclaration","scope":796,"src":"3776:24:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":782,"nodeType":"UserDefinedTypeName","pathNode":{"id":781,"name":"PoolData","nameLocations":["3776:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"3776:8:10"},"referencedDeclaration":4729,"src":"3776:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":785,"mutability":"mutable","name":"newRawBalance","nameLocation":"3818:13:10","nodeType":"VariableDeclaration","scope":796,"src":"3810:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":784,"name":"uint256","nodeType":"ElementaryTypeName","src":"3810:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":788,"mutability":"mutable","name":"roundingDirection","nameLocation":"3850:17:10","nodeType":"VariableDeclaration","scope":796,"src":"3841:26:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"},"typeName":{"id":787,"nodeType":"UserDefinedTypeName","pathNode":{"id":786,"name":"Rounding","nameLocations":["3841:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4732,"src":"3841:8:10"},"referencedDeclaration":4732,"src":"3841:8:10","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"visibility":"internal"},{"constant":false,"id":790,"mutability":"mutable","name":"tokenIndex","nameLocation":"3885:10:10","nodeType":"VariableDeclaration","scope":796,"src":"3877:18:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":789,"name":"uint256","nodeType":"ElementaryTypeName","src":"3877:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3766:135:10"},"returnParameters":{"id":795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":794,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":796,"src":"3925:15:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":793,"nodeType":"UserDefinedTypeName","pathNode":{"id":792,"name":"PoolData","nameLocations":["3925:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"3925:8:10"},"referencedDeclaration":4729,"src":"3925:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"3924:17:10"},"scope":1386,"src":"3725:217:10","stateMutability":"pure","virtual":false,"visibility":"external"},{"functionSelector":"08bade29","id":810,"implemented":false,"kind":"function","modifiers":[],"name":"computeYieldFeesDue","nameLocation":"3957:19:10","nodeType":"FunctionDefinition","parameters":{"id":806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":799,"mutability":"mutable","name":"poolData","nameLocation":"4002:8:10","nodeType":"VariableDeclaration","scope":810,"src":"3986:24:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":798,"nodeType":"UserDefinedTypeName","pathNode":{"id":797,"name":"PoolData","nameLocations":["3986:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"3986:8:10"},"referencedDeclaration":4729,"src":"3986:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":801,"mutability":"mutable","name":"lastLiveBalance","nameLocation":"4028:15:10","nodeType":"VariableDeclaration","scope":810,"src":"4020:23:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":800,"name":"uint256","nodeType":"ElementaryTypeName","src":"4020:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":803,"mutability":"mutable","name":"tokenIndex","nameLocation":"4061:10:10","nodeType":"VariableDeclaration","scope":810,"src":"4053:18:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":802,"name":"uint256","nodeType":"ElementaryTypeName","src":"4053:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":805,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"4089:27:10","nodeType":"VariableDeclaration","scope":810,"src":"4081:35:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":804,"name":"uint256","nodeType":"ElementaryTypeName","src":"4081:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3976:146:10"},"returnParameters":{"id":809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":808,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":810,"src":"4146:7:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":807,"name":"uint256","nodeType":"ElementaryTypeName","src":"4146:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4145:9:10"},"scope":1386,"src":"3948:207:10","stateMutability":"pure","virtual":false,"visibility":"external"},{"functionSelector":"a408f312","id":813,"implemented":false,"kind":"function","modifiers":[],"name":"guardedCheckEntered","nameLocation":"4170:19:10","nodeType":"FunctionDefinition","parameters":{"id":811,"nodeType":"ParameterList","parameters":[],"src":"4189:2:10"},"returnParameters":{"id":812,"nodeType":"ParameterList","parameters":[],"src":"4200:0:10"},"scope":1386,"src":"4161:40:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"cecc95a7","id":816,"implemented":false,"kind":"function","modifiers":[],"name":"unguardedCheckNotEntered","nameLocation":"4216:24:10","nodeType":"FunctionDefinition","parameters":{"id":814,"nodeType":"ParameterList","parameters":[],"src":"4240:2:10"},"returnParameters":{"id":815,"nodeType":"ParameterList","parameters":[],"src":"4256:0:10"},"scope":1386,"src":"4207:50:10","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"24e7176b","id":827,"implemented":false,"kind":"function","modifiers":[],"name":"buildTokenConfig","nameLocation":"4338:16:10","nodeType":"FunctionDefinition","parameters":{"id":821,"nodeType":"ParameterList","parameters":[{"constant":false,"id":820,"mutability":"mutable","name":"tokens","nameLocation":"4371:6:10","nodeType":"VariableDeclaration","scope":827,"src":"4355:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":818,"nodeType":"UserDefinedTypeName","pathNode":{"id":817,"name":"IERC20","nameLocations":["4355:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"4355:6:10"},"referencedDeclaration":40109,"src":"4355:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":819,"nodeType":"ArrayTypeName","src":"4355:8:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"4354:24:10"},"returnParameters":{"id":826,"nodeType":"ParameterList","parameters":[{"constant":false,"id":825,"mutability":"mutable","name":"tokenConfig","nameLocation":"4423:11:10","nodeType":"VariableDeclaration","scope":827,"src":"4402:32:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":823,"nodeType":"UserDefinedTypeName","pathNode":{"id":822,"name":"TokenConfig","nameLocations":["4402:11:10"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"4402:11:10"},"referencedDeclaration":4694,"src":"4402:11:10","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":824,"nodeType":"ArrayTypeName","src":"4402:13:10","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"}],"src":"4401:34:10"},"scope":1386,"src":"4329:107:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":828,"nodeType":"StructuredDocumentation","src":"4442:100:10","text":"@dev Infers TokenType (STANDARD or WITH_RATE) from the presence or absence of the rate provider."},"functionSelector":"5f70f542","id":843,"implemented":false,"kind":"function","modifiers":[],"name":"buildTokenConfig","nameLocation":"4556:16:10","nodeType":"FunctionDefinition","parameters":{"id":837,"nodeType":"ParameterList","parameters":[{"constant":false,"id":832,"mutability":"mutable","name":"tokens","nameLocation":"4598:6:10","nodeType":"VariableDeclaration","scope":843,"src":"4582:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":830,"nodeType":"UserDefinedTypeName","pathNode":{"id":829,"name":"IERC20","nameLocations":["4582:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"4582:6:10"},"referencedDeclaration":40109,"src":"4582:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":831,"nodeType":"ArrayTypeName","src":"4582:8:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":836,"mutability":"mutable","name":"rateProviders","nameLocation":"4637:13:10","nodeType":"VariableDeclaration","scope":843,"src":"4614:36:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IRateProvider_$263_$dyn_memory_ptr","typeString":"contract IRateProvider[]"},"typeName":{"baseType":{"id":834,"nodeType":"UserDefinedTypeName","pathNode":{"id":833,"name":"IRateProvider","nameLocations":["4614:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":263,"src":"4614:13:10"},"referencedDeclaration":263,"src":"4614:13:10","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"}},"id":835,"nodeType":"ArrayTypeName","src":"4614:15:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IRateProvider_$263_$dyn_storage_ptr","typeString":"contract IRateProvider[]"}},"visibility":"internal"}],"src":"4572:84:10"},"returnParameters":{"id":842,"nodeType":"ParameterList","parameters":[{"constant":false,"id":841,"mutability":"mutable","name":"tokenConfig","nameLocation":"4701:11:10","nodeType":"VariableDeclaration","scope":843,"src":"4680:32:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":839,"nodeType":"UserDefinedTypeName","pathNode":{"id":838,"name":"TokenConfig","nameLocations":["4680:11:10"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"4680:11:10"},"referencedDeclaration":4694,"src":"4680:11:10","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":840,"nodeType":"ArrayTypeName","src":"4680:13:10","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"}],"src":"4679:34:10"},"scope":1386,"src":"4547:167:10","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":844,"nodeType":"StructuredDocumentation","src":"4720:100:10","text":"@dev Infers TokenType (STANDARD or WITH_RATE) from the presence or absence of the rate provider."},"functionSelector":"e5948689","id":862,"implemented":false,"kind":"function","modifiers":[],"name":"buildTokenConfig","nameLocation":"4834:16:10","nodeType":"FunctionDefinition","parameters":{"id":856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":848,"mutability":"mutable","name":"tokens","nameLocation":"4876:6:10","nodeType":"VariableDeclaration","scope":862,"src":"4860:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":846,"nodeType":"UserDefinedTypeName","pathNode":{"id":845,"name":"IERC20","nameLocations":["4860:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"4860:6:10"},"referencedDeclaration":40109,"src":"4860:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":847,"nodeType":"ArrayTypeName","src":"4860:8:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":852,"mutability":"mutable","name":"rateProviders","nameLocation":"4915:13:10","nodeType":"VariableDeclaration","scope":862,"src":"4892:36:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IRateProvider_$263_$dyn_memory_ptr","typeString":"contract IRateProvider[]"},"typeName":{"baseType":{"id":850,"nodeType":"UserDefinedTypeName","pathNode":{"id":849,"name":"IRateProvider","nameLocations":["4892:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":263,"src":"4892:13:10"},"referencedDeclaration":263,"src":"4892:13:10","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"}},"id":851,"nodeType":"ArrayTypeName","src":"4892:15:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IRateProvider_$263_$dyn_storage_ptr","typeString":"contract IRateProvider[]"}},"visibility":"internal"},{"constant":false,"id":855,"mutability":"mutable","name":"yieldFeeFlags","nameLocation":"4952:13:10","nodeType":"VariableDeclaration","scope":862,"src":"4938:27:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_memory_ptr","typeString":"bool[]"},"typeName":{"baseType":{"id":853,"name":"bool","nodeType":"ElementaryTypeName","src":"4938:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":854,"nodeType":"ArrayTypeName","src":"4938:6:10","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_storage_ptr","typeString":"bool[]"}},"visibility":"internal"}],"src":"4850:121:10"},"returnParameters":{"id":861,"nodeType":"ParameterList","parameters":[{"constant":false,"id":860,"mutability":"mutable","name":"tokenConfig","nameLocation":"5016:11:10","nodeType":"VariableDeclaration","scope":862,"src":"4995:32:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":858,"nodeType":"UserDefinedTypeName","pathNode":{"id":857,"name":"TokenConfig","nameLocations":["4995:11:10"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"4995:11:10"},"referencedDeclaration":4694,"src":"4995:11:10","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":859,"nodeType":"ArrayTypeName","src":"4995:13:10","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"}],"src":"4994:34:10"},"scope":1386,"src":"4825:204:10","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"608256f7","id":884,"implemented":false,"kind":"function","modifiers":[],"name":"buildTokenConfig","nameLocation":"5044:16:10","nodeType":"FunctionDefinition","parameters":{"id":878,"nodeType":"ParameterList","parameters":[{"constant":false,"id":866,"mutability":"mutable","name":"tokens","nameLocation":"5086:6:10","nodeType":"VariableDeclaration","scope":884,"src":"5070:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":864,"nodeType":"UserDefinedTypeName","pathNode":{"id":863,"name":"IERC20","nameLocations":["5070:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"5070:6:10"},"referencedDeclaration":40109,"src":"5070:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":865,"nodeType":"ArrayTypeName","src":"5070:8:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":870,"mutability":"mutable","name":"tokenTypes","nameLocation":"5121:10:10","nodeType":"VariableDeclaration","scope":884,"src":"5102:29:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_TokenType_$4681_$dyn_memory_ptr","typeString":"enum TokenType[]"},"typeName":{"baseType":{"id":868,"nodeType":"UserDefinedTypeName","pathNode":{"id":867,"name":"TokenType","nameLocations":["5102:9:10"],"nodeType":"IdentifierPath","referencedDeclaration":4681,"src":"5102:9:10"},"referencedDeclaration":4681,"src":"5102:9:10","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"id":869,"nodeType":"ArrayTypeName","src":"5102:11:10","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_TokenType_$4681_$dyn_storage_ptr","typeString":"enum TokenType[]"}},"visibility":"internal"},{"constant":false,"id":874,"mutability":"mutable","name":"rateProviders","nameLocation":"5164:13:10","nodeType":"VariableDeclaration","scope":884,"src":"5141:36:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IRateProvider_$263_$dyn_memory_ptr","typeString":"contract IRateProvider[]"},"typeName":{"baseType":{"id":872,"nodeType":"UserDefinedTypeName","pathNode":{"id":871,"name":"IRateProvider","nameLocations":["5141:13:10"],"nodeType":"IdentifierPath","referencedDeclaration":263,"src":"5141:13:10"},"referencedDeclaration":263,"src":"5141:13:10","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"}},"id":873,"nodeType":"ArrayTypeName","src":"5141:15:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IRateProvider_$263_$dyn_storage_ptr","typeString":"contract IRateProvider[]"}},"visibility":"internal"},{"constant":false,"id":877,"mutability":"mutable","name":"yieldFeeFlags","nameLocation":"5201:13:10","nodeType":"VariableDeclaration","scope":884,"src":"5187:27:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_memory_ptr","typeString":"bool[]"},"typeName":{"baseType":{"id":875,"name":"bool","nodeType":"ElementaryTypeName","src":"5187:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":876,"nodeType":"ArrayTypeName","src":"5187:6:10","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_storage_ptr","typeString":"bool[]"}},"visibility":"internal"}],"src":"5060:160:10"},"returnParameters":{"id":883,"nodeType":"ParameterList","parameters":[{"constant":false,"id":882,"mutability":"mutable","name":"tokenConfig","nameLocation":"5265:11:10","nodeType":"VariableDeclaration","scope":884,"src":"5244:32:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":880,"nodeType":"UserDefinedTypeName","pathNode":{"id":879,"name":"TokenConfig","nameLocations":["5244:11:10"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"5244:11:10"},"referencedDeclaration":4694,"src":"5244:11:10","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":881,"nodeType":"ArrayTypeName","src":"5244:13:10","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"}],"src":"5243:34:10"},"scope":1386,"src":"5035:243:10","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"80047e26","id":892,"implemented":false,"kind":"function","modifiers":[],"name":"accountDelta","nameLocation":"5293:12:10","nodeType":"FunctionDefinition","parameters":{"id":890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":887,"mutability":"mutable","name":"token","nameLocation":"5313:5:10","nodeType":"VariableDeclaration","scope":892,"src":"5306:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":886,"nodeType":"UserDefinedTypeName","pathNode":{"id":885,"name":"IERC20","nameLocations":["5306:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"5306:6:10"},"referencedDeclaration":40109,"src":"5306:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":889,"mutability":"mutable","name":"delta","nameLocation":"5327:5:10","nodeType":"VariableDeclaration","scope":892,"src":"5320:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":888,"name":"int256","nodeType":"ElementaryTypeName","src":"5320:6:10","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"5305:28:10"},"returnParameters":{"id":891,"nodeType":"ParameterList","parameters":[],"src":"5342:0:10"},"scope":1386,"src":"5284:59:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"b1740c2d","id":900,"implemented":false,"kind":"function","modifiers":[],"name":"supplyCredit","nameLocation":"5358:12:10","nodeType":"FunctionDefinition","parameters":{"id":898,"nodeType":"ParameterList","parameters":[{"constant":false,"id":895,"mutability":"mutable","name":"token","nameLocation":"5378:5:10","nodeType":"VariableDeclaration","scope":900,"src":"5371:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":894,"nodeType":"UserDefinedTypeName","pathNode":{"id":893,"name":"IERC20","nameLocations":["5371:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"5371:6:10"},"referencedDeclaration":40109,"src":"5371:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":897,"mutability":"mutable","name":"credit","nameLocation":"5393:6:10","nodeType":"VariableDeclaration","scope":900,"src":"5385:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":896,"name":"uint256","nodeType":"ElementaryTypeName","src":"5385:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5370:30:10"},"returnParameters":{"id":899,"nodeType":"ParameterList","parameters":[],"src":"5409:0:10"},"scope":1386,"src":"5349:61:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"3e262ba3","id":908,"implemented":false,"kind":"function","modifiers":[],"name":"takeDebt","nameLocation":"5425:8:10","nodeType":"FunctionDefinition","parameters":{"id":906,"nodeType":"ParameterList","parameters":[{"constant":false,"id":903,"mutability":"mutable","name":"token","nameLocation":"5441:5:10","nodeType":"VariableDeclaration","scope":908,"src":"5434:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":902,"nodeType":"UserDefinedTypeName","pathNode":{"id":901,"name":"IERC20","nameLocations":["5434:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"5434:6:10"},"referencedDeclaration":40109,"src":"5434:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":905,"mutability":"mutable","name":"debt","nameLocation":"5456:4:10","nodeType":"VariableDeclaration","scope":908,"src":"5448:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":904,"name":"uint256","nodeType":"ElementaryTypeName","src":"5448:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5433:28:10"},"returnParameters":{"id":907,"nodeType":"ParameterList","parameters":[],"src":"5470:0:10"},"scope":1386,"src":"5416:55:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"d0643b8c","id":916,"implemented":false,"kind":"function","modifiers":[],"name":"manualSetAccountDelta","nameLocation":"5486:21:10","nodeType":"FunctionDefinition","parameters":{"id":914,"nodeType":"ParameterList","parameters":[{"constant":false,"id":911,"mutability":"mutable","name":"token","nameLocation":"5515:5:10","nodeType":"VariableDeclaration","scope":916,"src":"5508:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":910,"nodeType":"UserDefinedTypeName","pathNode":{"id":909,"name":"IERC20","nameLocations":["5508:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"5508:6:10"},"referencedDeclaration":40109,"src":"5508:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":913,"mutability":"mutable","name":"delta","nameLocation":"5529:5:10","nodeType":"VariableDeclaration","scope":916,"src":"5522:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":912,"name":"int256","nodeType":"ElementaryTypeName","src":"5522:6:10","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"5507:28:10"},"returnParameters":{"id":915,"nodeType":"ParameterList","parameters":[],"src":"5544:0:10"},"scope":1386,"src":"5477:68:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"5eeae6eb","id":921,"implemented":false,"kind":"function","modifiers":[],"name":"manualSetNonZeroDeltaCount","nameLocation":"5560:26:10","nodeType":"FunctionDefinition","parameters":{"id":919,"nodeType":"ParameterList","parameters":[{"constant":false,"id":918,"mutability":"mutable","name":"deltaCount","nameLocation":"5595:10:10","nodeType":"VariableDeclaration","scope":921,"src":"5587:18:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":917,"name":"uint256","nodeType":"ElementaryTypeName","src":"5587:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5586:20:10"},"returnParameters":{"id":920,"nodeType":"ParameterList","parameters":[],"src":"5615:0:10"},"scope":1386,"src":"5551:65:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"d64bc25d","id":929,"implemented":false,"kind":"function","modifiers":[],"name":"manualSetReservesOf","nameLocation":"5631:19:10","nodeType":"FunctionDefinition","parameters":{"id":927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":924,"mutability":"mutable","name":"token","nameLocation":"5658:5:10","nodeType":"VariableDeclaration","scope":929,"src":"5651:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":923,"nodeType":"UserDefinedTypeName","pathNode":{"id":922,"name":"IERC20","nameLocations":["5651:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"5651:6:10"},"referencedDeclaration":40109,"src":"5651:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":926,"mutability":"mutable","name":"reserves","nameLocation":"5673:8:10","nodeType":"VariableDeclaration","scope":929,"src":"5665:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":925,"name":"uint256","nodeType":"ElementaryTypeName","src":"5665:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5650:32:10"},"returnParameters":{"id":928,"nodeType":"ParameterList","parameters":[],"src":"5691:0:10"},"scope":1386,"src":"5622:70:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"25b6a844","id":958,"implemented":false,"kind":"function","modifiers":[],"name":"manualInternalSwap","nameLocation":"5707:18:10","nodeType":"FunctionDefinition","parameters":{"id":939,"nodeType":"ParameterList","parameters":[{"constant":false,"id":932,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"5758:15:10","nodeType":"VariableDeclaration","scope":958,"src":"5735:38:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":931,"nodeType":"UserDefinedTypeName","pathNode":{"id":930,"name":"VaultSwapParams","nameLocations":["5735:15:10"],"nodeType":"IdentifierPath","referencedDeclaration":4754,"src":"5735:15:10"},"referencedDeclaration":4754,"src":"5735:15:10","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"},{"constant":false,"id":935,"mutability":"mutable","name":"state","nameLocation":"5800:5:10","nodeType":"VariableDeclaration","scope":958,"src":"5783:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState"},"typeName":{"id":934,"nodeType":"UserDefinedTypeName","pathNode":{"id":933,"name":"SwapState","nameLocations":["5783:9:10"],"nodeType":"IdentifierPath","referencedDeclaration":4661,"src":"5783:9:10"},"referencedDeclaration":4661,"src":"5783:9:10","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_storage_ptr","typeString":"struct SwapState"}},"visibility":"internal"},{"constant":false,"id":938,"mutability":"mutable","name":"poolData","nameLocation":"5831:8:10","nodeType":"VariableDeclaration","scope":958,"src":"5815:24:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":937,"nodeType":"UserDefinedTypeName","pathNode":{"id":936,"name":"PoolData","nameLocations":["5815:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"5815:8:10"},"referencedDeclaration":4729,"src":"5815:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"5725:120:10"},"returnParameters":{"id":957,"nodeType":"ParameterList","parameters":[{"constant":false,"id":941,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"5901:19:10","nodeType":"VariableDeclaration","scope":958,"src":"5893:27:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":940,"name":"uint256","nodeType":"ElementaryTypeName","src":"5893:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":943,"mutability":"mutable","name":"amountCalculatedScaled18","nameLocation":"5942:24:10","nodeType":"VariableDeclaration","scope":958,"src":"5934:32:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":942,"name":"uint256","nodeType":"ElementaryTypeName","src":"5934:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":945,"mutability":"mutable","name":"amountIn","nameLocation":"5988:8:10","nodeType":"VariableDeclaration","scope":958,"src":"5980:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":944,"name":"uint256","nodeType":"ElementaryTypeName","src":"5980:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":947,"mutability":"mutable","name":"amountOut","nameLocation":"6018:9:10","nodeType":"VariableDeclaration","scope":958,"src":"6010:17:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":946,"name":"uint256","nodeType":"ElementaryTypeName","src":"6010:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":950,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":958,"src":"6041:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":949,"nodeType":"UserDefinedTypeName","pathNode":{"id":948,"name":"VaultSwapParams","nameLocations":["6041:15:10"],"nodeType":"IdentifierPath","referencedDeclaration":4754,"src":"6041:15:10"},"referencedDeclaration":4754,"src":"6041:15:10","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"},{"constant":false,"id":953,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":958,"src":"6077:16:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState"},"typeName":{"id":952,"nodeType":"UserDefinedTypeName","pathNode":{"id":951,"name":"SwapState","nameLocations":["6077:9:10"],"nodeType":"IdentifierPath","referencedDeclaration":4661,"src":"6077:9:10"},"referencedDeclaration":4661,"src":"6077:9:10","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_storage_ptr","typeString":"struct SwapState"}},"visibility":"internal"},{"constant":false,"id":956,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":958,"src":"6107:15:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":955,"nodeType":"UserDefinedTypeName","pathNode":{"id":954,"name":"PoolData","nameLocations":["6107:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"6107:8:10"},"referencedDeclaration":4729,"src":"6107:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"5879:253:10"},"scope":1386,"src":"5698:435:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"96e74a27","id":970,"implemented":false,"kind":"function","modifiers":[],"name":"manualReentrancySwap","nameLocation":"6148:20:10","nodeType":"FunctionDefinition","parameters":{"id":968,"nodeType":"ParameterList","parameters":[{"constant":false,"id":961,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"6201:15:10","nodeType":"VariableDeclaration","scope":970,"src":"6178:38:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":960,"nodeType":"UserDefinedTypeName","pathNode":{"id":959,"name":"VaultSwapParams","nameLocations":["6178:15:10"],"nodeType":"IdentifierPath","referencedDeclaration":4754,"src":"6178:15:10"},"referencedDeclaration":4754,"src":"6178:15:10","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"},{"constant":false,"id":964,"mutability":"mutable","name":"state","nameLocation":"6243:5:10","nodeType":"VariableDeclaration","scope":970,"src":"6226:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState"},"typeName":{"id":963,"nodeType":"UserDefinedTypeName","pathNode":{"id":962,"name":"SwapState","nameLocations":["6226:9:10"],"nodeType":"IdentifierPath","referencedDeclaration":4661,"src":"6226:9:10"},"referencedDeclaration":4661,"src":"6226:9:10","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_storage_ptr","typeString":"struct SwapState"}},"visibility":"internal"},{"constant":false,"id":967,"mutability":"mutable","name":"poolData","nameLocation":"6274:8:10","nodeType":"VariableDeclaration","scope":970,"src":"6258:24:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":966,"nodeType":"UserDefinedTypeName","pathNode":{"id":965,"name":"PoolData","nameLocations":["6258:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"6258:8:10"},"referencedDeclaration":4729,"src":"6258:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"6168:120:10"},"returnParameters":{"id":969,"nodeType":"ParameterList","parameters":[],"src":"6297:0:10"},"scope":1386,"src":"6139:159:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"36918d6e","id":980,"implemented":false,"kind":"function","modifiers":[],"name":"manualGetAggregateSwapFeeAmount","nameLocation":"6313:31:10","nodeType":"FunctionDefinition","parameters":{"id":976,"nodeType":"ParameterList","parameters":[{"constant":false,"id":972,"mutability":"mutable","name":"pool","nameLocation":"6353:4:10","nodeType":"VariableDeclaration","scope":980,"src":"6345:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":971,"name":"address","nodeType":"ElementaryTypeName","src":"6345:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":975,"mutability":"mutable","name":"token","nameLocation":"6366:5:10","nodeType":"VariableDeclaration","scope":980,"src":"6359:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":974,"nodeType":"UserDefinedTypeName","pathNode":{"id":973,"name":"IERC20","nameLocations":["6359:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"6359:6:10"},"referencedDeclaration":40109,"src":"6359:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"6344:28:10"},"returnParameters":{"id":979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":978,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":980,"src":"6396:7:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":977,"name":"uint256","nodeType":"ElementaryTypeName","src":"6396:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6395:9:10"},"scope":1386,"src":"6304:101:10","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"8f5aeb4b","id":990,"implemented":false,"kind":"function","modifiers":[],"name":"manualGetAggregateYieldFeeAmount","nameLocation":"6420:32:10","nodeType":"FunctionDefinition","parameters":{"id":986,"nodeType":"ParameterList","parameters":[{"constant":false,"id":982,"mutability":"mutable","name":"pool","nameLocation":"6461:4:10","nodeType":"VariableDeclaration","scope":990,"src":"6453:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":981,"name":"address","nodeType":"ElementaryTypeName","src":"6453:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":985,"mutability":"mutable","name":"token","nameLocation":"6474:5:10","nodeType":"VariableDeclaration","scope":990,"src":"6467:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":984,"nodeType":"UserDefinedTypeName","pathNode":{"id":983,"name":"IERC20","nameLocations":["6467:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"6467:6:10"},"referencedDeclaration":40109,"src":"6467:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"6452:28:10"},"returnParameters":{"id":989,"nodeType":"ParameterList","parameters":[{"constant":false,"id":988,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":990,"src":"6504:7:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":987,"name":"uint256","nodeType":"ElementaryTypeName","src":"6504:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6503:9:10"},"scope":1386,"src":"6411:102:10","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"44ea8763","id":1000,"implemented":false,"kind":"function","modifiers":[],"name":"manualSetAggregateSwapFeeAmount","nameLocation":"6528:31:10","nodeType":"FunctionDefinition","parameters":{"id":998,"nodeType":"ParameterList","parameters":[{"constant":false,"id":992,"mutability":"mutable","name":"pool","nameLocation":"6568:4:10","nodeType":"VariableDeclaration","scope":1000,"src":"6560:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":991,"name":"address","nodeType":"ElementaryTypeName","src":"6560:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":995,"mutability":"mutable","name":"token","nameLocation":"6581:5:10","nodeType":"VariableDeclaration","scope":1000,"src":"6574:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":994,"nodeType":"UserDefinedTypeName","pathNode":{"id":993,"name":"IERC20","nameLocations":["6574:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"6574:6:10"},"referencedDeclaration":40109,"src":"6574:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":997,"mutability":"mutable","name":"value","nameLocation":"6596:5:10","nodeType":"VariableDeclaration","scope":1000,"src":"6588:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":996,"name":"uint256","nodeType":"ElementaryTypeName","src":"6588:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6559:43:10"},"returnParameters":{"id":999,"nodeType":"ParameterList","parameters":[],"src":"6611:0:10"},"scope":1386,"src":"6519:93:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"7004b0f1","id":1010,"implemented":false,"kind":"function","modifiers":[],"name":"manualSetAggregateYieldFeeAmount","nameLocation":"6627:32:10","nodeType":"FunctionDefinition","parameters":{"id":1008,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1002,"mutability":"mutable","name":"pool","nameLocation":"6668:4:10","nodeType":"VariableDeclaration","scope":1010,"src":"6660:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1001,"name":"address","nodeType":"ElementaryTypeName","src":"6660:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1005,"mutability":"mutable","name":"token","nameLocation":"6681:5:10","nodeType":"VariableDeclaration","scope":1010,"src":"6674:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":1004,"nodeType":"UserDefinedTypeName","pathNode":{"id":1003,"name":"IERC20","nameLocations":["6674:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"6674:6:10"},"referencedDeclaration":40109,"src":"6674:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1007,"mutability":"mutable","name":"value","nameLocation":"6696:5:10","nodeType":"VariableDeclaration","scope":1010,"src":"6688:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1006,"name":"uint256","nodeType":"ElementaryTypeName","src":"6688:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6659:43:10"},"returnParameters":{"id":1009,"nodeType":"ParameterList","parameters":[],"src":"6711:0:10"},"scope":1386,"src":"6618:94:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"cfcc2209","id":1017,"implemented":false,"kind":"function","modifiers":[],"name":"manualSetAggregateSwapFeePercentage","nameLocation":"6727:35:10","nodeType":"FunctionDefinition","parameters":{"id":1015,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1012,"mutability":"mutable","name":"pool","nameLocation":"6771:4:10","nodeType":"VariableDeclaration","scope":1017,"src":"6763:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1011,"name":"address","nodeType":"ElementaryTypeName","src":"6763:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1014,"mutability":"mutable","name":"value","nameLocation":"6785:5:10","nodeType":"VariableDeclaration","scope":1017,"src":"6777:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1013,"name":"uint256","nodeType":"ElementaryTypeName","src":"6777:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6762:29:10"},"returnParameters":{"id":1016,"nodeType":"ParameterList","parameters":[],"src":"6800:0:10"},"scope":1386,"src":"6718:83:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"920af066","id":1024,"implemented":false,"kind":"function","modifiers":[],"name":"manualSetAggregateYieldFeePercentage","nameLocation":"6816:36:10","nodeType":"FunctionDefinition","parameters":{"id":1022,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1019,"mutability":"mutable","name":"pool","nameLocation":"6861:4:10","nodeType":"VariableDeclaration","scope":1024,"src":"6853:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1018,"name":"address","nodeType":"ElementaryTypeName","src":"6853:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1021,"mutability":"mutable","name":"value","nameLocation":"6875:5:10","nodeType":"VariableDeclaration","scope":1024,"src":"6867:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1020,"name":"uint256","nodeType":"ElementaryTypeName","src":"6867:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6852:29:10"},"returnParameters":{"id":1023,"nodeType":"ParameterList","parameters":[],"src":"6890:0:10"},"scope":1386,"src":"6807:84:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"16a573c2","id":1039,"implemented":false,"kind":"function","modifiers":[],"name":"manualBuildPoolSwapParams","nameLocation":"6906:25:10","nodeType":"FunctionDefinition","parameters":{"id":1034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1027,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"6964:15:10","nodeType":"VariableDeclaration","scope":1039,"src":"6941:38:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":1026,"nodeType":"UserDefinedTypeName","pathNode":{"id":1025,"name":"VaultSwapParams","nameLocations":["6941:15:10"],"nodeType":"IdentifierPath","referencedDeclaration":4754,"src":"6941:15:10"},"referencedDeclaration":4754,"src":"6941:15:10","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"},{"constant":false,"id":1030,"mutability":"mutable","name":"state","nameLocation":"7006:5:10","nodeType":"VariableDeclaration","scope":1039,"src":"6989:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState"},"typeName":{"id":1029,"nodeType":"UserDefinedTypeName","pathNode":{"id":1028,"name":"SwapState","nameLocations":["6989:9:10"],"nodeType":"IdentifierPath","referencedDeclaration":4661,"src":"6989:9:10"},"referencedDeclaration":4661,"src":"6989:9:10","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_storage_ptr","typeString":"struct SwapState"}},"visibility":"internal"},{"constant":false,"id":1033,"mutability":"mutable","name":"poolData","nameLocation":"7037:8:10","nodeType":"VariableDeclaration","scope":1039,"src":"7021:24:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":1032,"nodeType":"UserDefinedTypeName","pathNode":{"id":1031,"name":"PoolData","nameLocations":["7021:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"7021:8:10"},"referencedDeclaration":4729,"src":"7021:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"6931:120:10"},"returnParameters":{"id":1038,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1037,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1039,"src":"7075:21:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":1036,"nodeType":"UserDefinedTypeName","pathNode":{"id":1035,"name":"PoolSwapParams","nameLocations":["7075:14:10"],"nodeType":"IdentifierPath","referencedDeclaration":4772,"src":"7075:14:10"},"referencedDeclaration":4772,"src":"7075:14:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"src":"7074:23:10"},"scope":1386,"src":"6897:201:10","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"be6b4d2a","id":1058,"implemented":false,"kind":"function","modifiers":[],"name":"manualComputeAndChargeAggregateSwapFees","nameLocation":"7113:39:10","nodeType":"FunctionDefinition","parameters":{"id":1052,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1042,"mutability":"mutable","name":"poolData","nameLocation":"7178:8:10","nodeType":"VariableDeclaration","scope":1058,"src":"7162:24:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":1041,"nodeType":"UserDefinedTypeName","pathNode":{"id":1040,"name":"PoolData","nameLocations":["7162:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"7162:8:10"},"referencedDeclaration":4729,"src":"7162:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":1044,"mutability":"mutable","name":"totalSwapFeeAmountScaled18","nameLocation":"7204:26:10","nodeType":"VariableDeclaration","scope":1058,"src":"7196:34:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1043,"name":"uint256","nodeType":"ElementaryTypeName","src":"7196:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1046,"mutability":"mutable","name":"pool","nameLocation":"7248:4:10","nodeType":"VariableDeclaration","scope":1058,"src":"7240:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1045,"name":"address","nodeType":"ElementaryTypeName","src":"7240:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1049,"mutability":"mutable","name":"token","nameLocation":"7269:5:10","nodeType":"VariableDeclaration","scope":1058,"src":"7262:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":1048,"nodeType":"UserDefinedTypeName","pathNode":{"id":1047,"name":"IERC20","nameLocations":["7262:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"7262:6:10"},"referencedDeclaration":40109,"src":"7262:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1051,"mutability":"mutable","name":"index","nameLocation":"7292:5:10","nodeType":"VariableDeclaration","scope":1058,"src":"7284:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1050,"name":"uint256","nodeType":"ElementaryTypeName","src":"7284:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7152:151:10"},"returnParameters":{"id":1057,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1054,"mutability":"mutable","name":"totalSwapFeeAmountRaw","nameLocation":"7330:21:10","nodeType":"VariableDeclaration","scope":1058,"src":"7322:29:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1053,"name":"uint256","nodeType":"ElementaryTypeName","src":"7322:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1056,"mutability":"mutable","name":"aggregateSwapFeeAmountRaw","nameLocation":"7361:25:10","nodeType":"VariableDeclaration","scope":1058,"src":"7353:33:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1055,"name":"uint256","nodeType":"ElementaryTypeName","src":"7353:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7321:66:10"},"scope":1386,"src":"7104:284:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"d86c3fef","id":1072,"implemented":false,"kind":"function","modifiers":[],"name":"manualUpdatePoolDataLiveBalancesAndRates","nameLocation":"7403:40:10","nodeType":"FunctionDefinition","parameters":{"id":1067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1060,"mutability":"mutable","name":"pool","nameLocation":"7461:4:10","nodeType":"VariableDeclaration","scope":1072,"src":"7453:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1059,"name":"address","nodeType":"ElementaryTypeName","src":"7453:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1063,"mutability":"mutable","name":"poolData","nameLocation":"7491:8:10","nodeType":"VariableDeclaration","scope":1072,"src":"7475:24:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":1062,"nodeType":"UserDefinedTypeName","pathNode":{"id":1061,"name":"PoolData","nameLocations":["7475:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"7475:8:10"},"referencedDeclaration":4729,"src":"7475:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":1066,"mutability":"mutable","name":"roundingDirection","nameLocation":"7518:17:10","nodeType":"VariableDeclaration","scope":1072,"src":"7509:26:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"},"typeName":{"id":1065,"nodeType":"UserDefinedTypeName","pathNode":{"id":1064,"name":"Rounding","nameLocations":["7509:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4732,"src":"7509:8:10"},"referencedDeclaration":4732,"src":"7509:8:10","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"visibility":"internal"}],"src":"7443:98:10"},"returnParameters":{"id":1071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1070,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1072,"src":"7565:15:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":1069,"nodeType":"UserDefinedTypeName","pathNode":{"id":1068,"name":"PoolData","nameLocations":["7565:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"7565:8:10"},"referencedDeclaration":4729,"src":"7565:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"7564:17:10"},"scope":1386,"src":"7394:188:10","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"0790de46","id":1097,"implemented":false,"kind":"function","modifiers":[],"name":"manualAddLiquidity","nameLocation":"7597:18:10","nodeType":"FunctionDefinition","parameters":{"id":1082,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1075,"mutability":"mutable","name":"poolData","nameLocation":"7641:8:10","nodeType":"VariableDeclaration","scope":1097,"src":"7625:24:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":1074,"nodeType":"UserDefinedTypeName","pathNode":{"id":1073,"name":"PoolData","nameLocations":["7625:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"7625:8:10"},"referencedDeclaration":4729,"src":"7625:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":1078,"mutability":"mutable","name":"params","nameLocation":"7685:6:10","nodeType":"VariableDeclaration","scope":1097,"src":"7659:32:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams"},"typeName":{"id":1077,"nodeType":"UserDefinedTypeName","pathNode":{"id":1076,"name":"AddLiquidityParams","nameLocations":["7659:18:10"],"nodeType":"IdentifierPath","referencedDeclaration":4823,"src":"7659:18:10"},"referencedDeclaration":4823,"src":"7659:18:10","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_storage_ptr","typeString":"struct AddLiquidityParams"}},"visibility":"internal"},{"constant":false,"id":1081,"mutability":"mutable","name":"maxAmountsInScaled18","nameLocation":"7718:20:10","nodeType":"VariableDeclaration","scope":1097,"src":"7701:37:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1079,"name":"uint256","nodeType":"ElementaryTypeName","src":"7701:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1080,"nodeType":"ArrayTypeName","src":"7701:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7615:129:10"},"returnParameters":{"id":1096,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1085,"mutability":"mutable","name":"updatedPoolData","nameLocation":"7808:15:10","nodeType":"VariableDeclaration","scope":1097,"src":"7792:31:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":1084,"nodeType":"UserDefinedTypeName","pathNode":{"id":1083,"name":"PoolData","nameLocations":["7792:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"7792:8:10"},"referencedDeclaration":4729,"src":"7792:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":1088,"mutability":"mutable","name":"amountsInRaw","nameLocation":"7854:12:10","nodeType":"VariableDeclaration","scope":1097,"src":"7837:29:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1086,"name":"uint256","nodeType":"ElementaryTypeName","src":"7837:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1087,"nodeType":"ArrayTypeName","src":"7837:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1091,"mutability":"mutable","name":"amountsInScaled18","nameLocation":"7897:17:10","nodeType":"VariableDeclaration","scope":1097,"src":"7880:34:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1089,"name":"uint256","nodeType":"ElementaryTypeName","src":"7880:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1090,"nodeType":"ArrayTypeName","src":"7880:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1093,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7936:12:10","nodeType":"VariableDeclaration","scope":1097,"src":"7928:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1092,"name":"uint256","nodeType":"ElementaryTypeName","src":"7928:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1095,"mutability":"mutable","name":"returnData","nameLocation":"7975:10:10","nodeType":"VariableDeclaration","scope":1097,"src":"7962:23:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1094,"name":"bytes","nodeType":"ElementaryTypeName","src":"7962:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7778:217:10"},"scope":1386,"src":"7588:408:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"eeda9991","id":1109,"implemented":false,"kind":"function","modifiers":[],"name":"manualReentrancyAddLiquidity","nameLocation":"8011:28:10","nodeType":"FunctionDefinition","parameters":{"id":1107,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1100,"mutability":"mutable","name":"poolData","nameLocation":"8065:8:10","nodeType":"VariableDeclaration","scope":1109,"src":"8049:24:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":1099,"nodeType":"UserDefinedTypeName","pathNode":{"id":1098,"name":"PoolData","nameLocations":["8049:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"8049:8:10"},"referencedDeclaration":4729,"src":"8049:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":1103,"mutability":"mutable","name":"params","nameLocation":"8109:6:10","nodeType":"VariableDeclaration","scope":1109,"src":"8083:32:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams"},"typeName":{"id":1102,"nodeType":"UserDefinedTypeName","pathNode":{"id":1101,"name":"AddLiquidityParams","nameLocations":["8083:18:10"],"nodeType":"IdentifierPath","referencedDeclaration":4823,"src":"8083:18:10"},"referencedDeclaration":4823,"src":"8083:18:10","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_storage_ptr","typeString":"struct AddLiquidityParams"}},"visibility":"internal"},{"constant":false,"id":1106,"mutability":"mutable","name":"maxAmountsInScaled18","nameLocation":"8142:20:10","nodeType":"VariableDeclaration","scope":1109,"src":"8125:37:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1104,"name":"uint256","nodeType":"ElementaryTypeName","src":"8125:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1105,"nodeType":"ArrayTypeName","src":"8125:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8039:129:10"},"returnParameters":{"id":1108,"nodeType":"ParameterList","parameters":[],"src":"8177:0:10"},"scope":1386,"src":"8002:176:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"7965c967","id":1112,"implemented":false,"kind":"function","modifiers":[],"name":"forceUnlock","nameLocation":"8193:11:10","nodeType":"FunctionDefinition","parameters":{"id":1110,"nodeType":"ParameterList","parameters":[],"src":"8204:2:10"},"returnParameters":{"id":1111,"nodeType":"ParameterList","parameters":[],"src":"8215:0:10"},"scope":1386,"src":"8184:32:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"6d4908c4","id":1115,"implemented":false,"kind":"function","modifiers":[],"name":"forceLock","nameLocation":"8231:9:10","nodeType":"FunctionDefinition","parameters":{"id":1113,"nodeType":"ParameterList","parameters":[],"src":"8240:2:10"},"returnParameters":{"id":1114,"nodeType":"ParameterList","parameters":[],"src":"8251:0:10"},"scope":1386,"src":"8222:30:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"f1320097","id":1140,"implemented":false,"kind":"function","modifiers":[],"name":"manualRemoveLiquidity","nameLocation":"8267:21:10","nodeType":"FunctionDefinition","parameters":{"id":1125,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1118,"mutability":"mutable","name":"poolData","nameLocation":"8314:8:10","nodeType":"VariableDeclaration","scope":1140,"src":"8298:24:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":1117,"nodeType":"UserDefinedTypeName","pathNode":{"id":1116,"name":"PoolData","nameLocations":["8298:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"8298:8:10"},"referencedDeclaration":4729,"src":"8298:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":1121,"mutability":"mutable","name":"params","nameLocation":"8361:6:10","nodeType":"VariableDeclaration","scope":1140,"src":"8332:35:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams"},"typeName":{"id":1120,"nodeType":"UserDefinedTypeName","pathNode":{"id":1119,"name":"RemoveLiquidityParams","nameLocations":["8332:21:10"],"nodeType":"IdentifierPath","referencedDeclaration":4844,"src":"8332:21:10"},"referencedDeclaration":4844,"src":"8332:21:10","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_storage_ptr","typeString":"struct RemoveLiquidityParams"}},"visibility":"internal"},{"constant":false,"id":1124,"mutability":"mutable","name":"minAmountsOutScaled18","nameLocation":"8394:21:10","nodeType":"VariableDeclaration","scope":1140,"src":"8377:38:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1122,"name":"uint256","nodeType":"ElementaryTypeName","src":"8377:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1123,"nodeType":"ArrayTypeName","src":"8377:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8288:133:10"},"returnParameters":{"id":1139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1128,"mutability":"mutable","name":"updatedPoolData","nameLocation":"8485:15:10","nodeType":"VariableDeclaration","scope":1140,"src":"8469:31:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":1127,"nodeType":"UserDefinedTypeName","pathNode":{"id":1126,"name":"PoolData","nameLocations":["8469:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"8469:8:10"},"referencedDeclaration":4729,"src":"8469:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":1130,"mutability":"mutable","name":"bptAmountIn","nameLocation":"8522:11:10","nodeType":"VariableDeclaration","scope":1140,"src":"8514:19:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1129,"name":"uint256","nodeType":"ElementaryTypeName","src":"8514:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1133,"mutability":"mutable","name":"amountsOutRaw","nameLocation":"8564:13:10","nodeType":"VariableDeclaration","scope":1140,"src":"8547:30:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1131,"name":"uint256","nodeType":"ElementaryTypeName","src":"8547:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1132,"nodeType":"ArrayTypeName","src":"8547:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1136,"mutability":"mutable","name":"amountsOutScaled18","nameLocation":"8608:18:10","nodeType":"VariableDeclaration","scope":1140,"src":"8591:35:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1134,"name":"uint256","nodeType":"ElementaryTypeName","src":"8591:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1135,"nodeType":"ArrayTypeName","src":"8591:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1138,"mutability":"mutable","name":"returnData","nameLocation":"8653:10:10","nodeType":"VariableDeclaration","scope":1140,"src":"8640:23:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1137,"name":"bytes","nodeType":"ElementaryTypeName","src":"8640:5:10","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8455:218:10"},"scope":1386,"src":"8258:416:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"28121e27","id":1152,"implemented":false,"kind":"function","modifiers":[],"name":"manualReentrancyRemoveLiquidity","nameLocation":"8689:31:10","nodeType":"FunctionDefinition","parameters":{"id":1150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1143,"mutability":"mutable","name":"poolData","nameLocation":"8746:8:10","nodeType":"VariableDeclaration","scope":1152,"src":"8730:24:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":1142,"nodeType":"UserDefinedTypeName","pathNode":{"id":1141,"name":"PoolData","nameLocations":["8730:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"8730:8:10"},"referencedDeclaration":4729,"src":"8730:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":1146,"mutability":"mutable","name":"params","nameLocation":"8793:6:10","nodeType":"VariableDeclaration","scope":1152,"src":"8764:35:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams"},"typeName":{"id":1145,"nodeType":"UserDefinedTypeName","pathNode":{"id":1144,"name":"RemoveLiquidityParams","nameLocations":["8764:21:10"],"nodeType":"IdentifierPath","referencedDeclaration":4844,"src":"8764:21:10"},"referencedDeclaration":4844,"src":"8764:21:10","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_storage_ptr","typeString":"struct RemoveLiquidityParams"}},"visibility":"internal"},{"constant":false,"id":1149,"mutability":"mutable","name":"minAmountsOutScaled18","nameLocation":"8826:21:10","nodeType":"VariableDeclaration","scope":1152,"src":"8809:38:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1147,"name":"uint256","nodeType":"ElementaryTypeName","src":"8809:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1148,"nodeType":"ArrayTypeName","src":"8809:9:10","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8720:133:10"},"returnParameters":{"id":1151,"nodeType":"ParameterList","parameters":[],"src":"8862:0:10"},"scope":1386,"src":"8680:183:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"ac004855","id":1165,"implemented":false,"kind":"function","modifiers":[],"name":"manualSettleWrap","nameLocation":"8878:16:10","nodeType":"FunctionDefinition","parameters":{"id":1163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1155,"mutability":"mutable","name":"underlyingToken","nameLocation":"8911:15:10","nodeType":"VariableDeclaration","scope":1165,"src":"8904:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":1154,"nodeType":"UserDefinedTypeName","pathNode":{"id":1153,"name":"IERC20","nameLocations":["8904:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"8904:6:10"},"referencedDeclaration":40109,"src":"8904:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1158,"mutability":"mutable","name":"wrappedToken","nameLocation":"8943:12:10","nodeType":"VariableDeclaration","scope":1165,"src":"8936:19:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":1157,"nodeType":"UserDefinedTypeName","pathNode":{"id":1156,"name":"IERC20","nameLocations":["8936:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"8936:6:10"},"referencedDeclaration":40109,"src":"8936:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1160,"mutability":"mutable","name":"underlyingHint","nameLocation":"8973:14:10","nodeType":"VariableDeclaration","scope":1165,"src":"8965:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1159,"name":"uint256","nodeType":"ElementaryTypeName","src":"8965:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1162,"mutability":"mutable","name":"wrappedHint","nameLocation":"9005:11:10","nodeType":"VariableDeclaration","scope":1165,"src":"8997:19:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1161,"name":"uint256","nodeType":"ElementaryTypeName","src":"8997:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8894:128:10"},"returnParameters":{"id":1164,"nodeType":"ParameterList","parameters":[],"src":"9031:0:10"},"scope":1386,"src":"8869:163:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"b6f680f4","id":1178,"implemented":false,"kind":"function","modifiers":[],"name":"manualSettleUnwrap","nameLocation":"9047:18:10","nodeType":"FunctionDefinition","parameters":{"id":1176,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1168,"mutability":"mutable","name":"underlyingToken","nameLocation":"9082:15:10","nodeType":"VariableDeclaration","scope":1178,"src":"9075:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":1167,"nodeType":"UserDefinedTypeName","pathNode":{"id":1166,"name":"IERC20","nameLocations":["9075:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"9075:6:10"},"referencedDeclaration":40109,"src":"9075:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1171,"mutability":"mutable","name":"wrappedToken","nameLocation":"9114:12:10","nodeType":"VariableDeclaration","scope":1178,"src":"9107:19:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":1170,"nodeType":"UserDefinedTypeName","pathNode":{"id":1169,"name":"IERC20","nameLocations":["9107:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"9107:6:10"},"referencedDeclaration":40109,"src":"9107:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1173,"mutability":"mutable","name":"underlyingHint","nameLocation":"9144:14:10","nodeType":"VariableDeclaration","scope":1178,"src":"9136:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1172,"name":"uint256","nodeType":"ElementaryTypeName","src":"9136:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1175,"mutability":"mutable","name":"wrappedHint","nameLocation":"9176:11:10","nodeType":"VariableDeclaration","scope":1178,"src":"9168:19:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1174,"name":"uint256","nodeType":"ElementaryTypeName","src":"9168:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9065:128:10"},"returnParameters":{"id":1177,"nodeType":"ParameterList","parameters":[],"src":"9202:0:10"},"scope":1386,"src":"9038:165:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"00d7aadb","id":1188,"implemented":false,"kind":"function","modifiers":[],"name":"manualTransfer","nameLocation":"9218:14:10","nodeType":"FunctionDefinition","parameters":{"id":1186,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1181,"mutability":"mutable","name":"token","nameLocation":"9240:5:10","nodeType":"VariableDeclaration","scope":1188,"src":"9233:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":1180,"nodeType":"UserDefinedTypeName","pathNode":{"id":1179,"name":"IERC20","nameLocations":["9233:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"9233:6:10"},"referencedDeclaration":40109,"src":"9233:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1183,"mutability":"mutable","name":"to","nameLocation":"9255:2:10","nodeType":"VariableDeclaration","scope":1188,"src":"9247:10:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1182,"name":"address","nodeType":"ElementaryTypeName","src":"9247:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1185,"mutability":"mutable","name":"amount","nameLocation":"9267:6:10","nodeType":"VariableDeclaration","scope":1188,"src":"9259:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1184,"name":"uint256","nodeType":"ElementaryTypeName","src":"9259:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9232:42:10"},"returnParameters":{"id":1187,"nodeType":"ParameterList","parameters":[],"src":"9283:0:10"},"scope":1386,"src":"9209:75:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"557dba68","id":1196,"implemented":false,"kind":"function","modifiers":[],"name":"manualGetPoolConfigBits","nameLocation":"9299:23:10","nodeType":"FunctionDefinition","parameters":{"id":1191,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1190,"mutability":"mutable","name":"pool","nameLocation":"9331:4:10","nodeType":"VariableDeclaration","scope":1196,"src":"9323:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1189,"name":"address","nodeType":"ElementaryTypeName","src":"9323:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9322:14:10"},"returnParameters":{"id":1195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1194,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1196,"src":"9360:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":1193,"nodeType":"UserDefinedTypeName","pathNode":{"id":1192,"name":"PoolConfigBits","nameLocations":["9360:14:10"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"9360:14:10"},"referencedDeclaration":4582,"src":"9360:14:10","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"9359:16:10"},"scope":1386,"src":"9290:86:10","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"370bc8da","id":1208,"implemented":false,"kind":"function","modifiers":[],"name":"manualErc4626BufferWrapOrUnwrapReentrancy","nameLocation":"9391:41:10","nodeType":"FunctionDefinition","parameters":{"id":1200,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1199,"mutability":"mutable","name":"params","nameLocation":"9474:6:10","nodeType":"VariableDeclaration","scope":1208,"src":"9442:38:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams"},"typeName":{"id":1198,"nodeType":"UserDefinedTypeName","pathNode":{"id":1197,"name":"BufferWrapOrUnwrapParams","nameLocations":["9442:24:10"],"nodeType":"IdentifierPath","referencedDeclaration":4862,"src":"9442:24:10"},"referencedDeclaration":4862,"src":"9442:24:10","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_storage_ptr","typeString":"struct BufferWrapOrUnwrapParams"}},"visibility":"internal"}],"src":"9432:54:10"},"returnParameters":{"id":1207,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1202,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"9513:19:10","nodeType":"VariableDeclaration","scope":1208,"src":"9505:27:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1201,"name":"uint256","nodeType":"ElementaryTypeName","src":"9505:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1204,"mutability":"mutable","name":"amountInRaw","nameLocation":"9542:11:10","nodeType":"VariableDeclaration","scope":1208,"src":"9534:19:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1203,"name":"uint256","nodeType":"ElementaryTypeName","src":"9534:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1206,"mutability":"mutable","name":"amountOutRaw","nameLocation":"9563:12:10","nodeType":"VariableDeclaration","scope":1208,"src":"9555:20:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1205,"name":"uint256","nodeType":"ElementaryTypeName","src":"9555:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9504:72:10"},"scope":1386,"src":"9382:195:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"ab62c2b6","id":1216,"implemented":false,"kind":"function","modifiers":[],"name":"manualSetBufferAsset","nameLocation":"9592:20:10","nodeType":"FunctionDefinition","parameters":{"id":1214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1211,"mutability":"mutable","name":"wrappedToken","nameLocation":"9622:12:10","nodeType":"VariableDeclaration","scope":1216,"src":"9613:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":1210,"nodeType":"UserDefinedTypeName","pathNode":{"id":1209,"name":"IERC4626","nameLocations":["9613:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"9613:8:10"},"referencedDeclaration":39833,"src":"9613:8:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1213,"mutability":"mutable","name":"underlyingToken","nameLocation":"9644:15:10","nodeType":"VariableDeclaration","scope":1216,"src":"9636:23:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1212,"name":"address","nodeType":"ElementaryTypeName","src":"9636:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9612:48:10"},"returnParameters":{"id":1215,"nodeType":"ParameterList","parameters":[],"src":"9669:0:10"},"scope":1386,"src":"9583:87:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"ff44deab","id":1226,"implemented":false,"kind":"function","modifiers":[],"name":"manualSetBufferOwnerShares","nameLocation":"9685:26:10","nodeType":"FunctionDefinition","parameters":{"id":1224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1219,"mutability":"mutable","name":"wrappedToken","nameLocation":"9721:12:10","nodeType":"VariableDeclaration","scope":1226,"src":"9712:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":1218,"nodeType":"UserDefinedTypeName","pathNode":{"id":1217,"name":"IERC4626","nameLocations":["9712:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"9712:8:10"},"referencedDeclaration":39833,"src":"9712:8:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1221,"mutability":"mutable","name":"owner","nameLocation":"9743:5:10","nodeType":"VariableDeclaration","scope":1226,"src":"9735:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1220,"name":"address","nodeType":"ElementaryTypeName","src":"9735:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1223,"mutability":"mutable","name":"shares","nameLocation":"9758:6:10","nodeType":"VariableDeclaration","scope":1226,"src":"9750:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1222,"name":"uint256","nodeType":"ElementaryTypeName","src":"9750:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9711:54:10"},"returnParameters":{"id":1225,"nodeType":"ParameterList","parameters":[],"src":"9774:0:10"},"scope":1386,"src":"9676:99:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"3cb5b2af","id":1234,"implemented":false,"kind":"function","modifiers":[],"name":"manualSetBufferTotalShares","nameLocation":"9790:26:10","nodeType":"FunctionDefinition","parameters":{"id":1232,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1229,"mutability":"mutable","name":"wrappedToken","nameLocation":"9826:12:10","nodeType":"VariableDeclaration","scope":1234,"src":"9817:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":1228,"nodeType":"UserDefinedTypeName","pathNode":{"id":1227,"name":"IERC4626","nameLocations":["9817:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"9817:8:10"},"referencedDeclaration":39833,"src":"9817:8:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1231,"mutability":"mutable","name":"shares","nameLocation":"9848:6:10","nodeType":"VariableDeclaration","scope":1234,"src":"9840:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1230,"name":"uint256","nodeType":"ElementaryTypeName","src":"9840:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9816:39:10"},"returnParameters":{"id":1233,"nodeType":"ParameterList","parameters":[],"src":"9864:0:10"},"scope":1386,"src":"9781:84:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"0ee4cdd8","id":1244,"implemented":false,"kind":"function","modifiers":[],"name":"manualSetBufferBalances","nameLocation":"9880:23:10","nodeType":"FunctionDefinition","parameters":{"id":1242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1237,"mutability":"mutable","name":"wrappedToken","nameLocation":"9913:12:10","nodeType":"VariableDeclaration","scope":1244,"src":"9904:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":1236,"nodeType":"UserDefinedTypeName","pathNode":{"id":1235,"name":"IERC4626","nameLocations":["9904:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"9904:8:10"},"referencedDeclaration":39833,"src":"9904:8:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1239,"mutability":"mutable","name":"underlyingAmount","nameLocation":"9935:16:10","nodeType":"VariableDeclaration","scope":1244,"src":"9927:24:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1238,"name":"uint256","nodeType":"ElementaryTypeName","src":"9927:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1241,"mutability":"mutable","name":"wrappedAmount","nameLocation":"9961:13:10","nodeType":"VariableDeclaration","scope":1244,"src":"9953:21:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1240,"name":"uint256","nodeType":"ElementaryTypeName","src":"9953:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9903:72:10"},"returnParameters":{"id":1243,"nodeType":"ParameterList","parameters":[],"src":"9984:0:10"},"scope":1386,"src":"9871:114:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"2d1c3beb","id":1252,"implemented":false,"kind":"function","modifiers":[],"name":"manualSettleReentrancy","nameLocation":"10000:22:10","nodeType":"FunctionDefinition","parameters":{"id":1248,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1247,"mutability":"mutable","name":"token","nameLocation":"10030:5:10","nodeType":"VariableDeclaration","scope":1252,"src":"10023:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":1246,"nodeType":"UserDefinedTypeName","pathNode":{"id":1245,"name":"IERC20","nameLocations":["10023:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"10023:6:10"},"referencedDeclaration":40109,"src":"10023:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"10022:14:10"},"returnParameters":{"id":1251,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1250,"mutability":"mutable","name":"paid","nameLocation":"10063:4:10","nodeType":"VariableDeclaration","scope":1252,"src":"10055:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1249,"name":"uint256","nodeType":"ElementaryTypeName","src":"10055:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10054:14:10"},"scope":1386,"src":"9991:78:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"d01a3269","id":1262,"implemented":false,"kind":"function","modifiers":[],"name":"manualSendToReentrancy","nameLocation":"10084:22:10","nodeType":"FunctionDefinition","parameters":{"id":1260,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1255,"mutability":"mutable","name":"token","nameLocation":"10114:5:10","nodeType":"VariableDeclaration","scope":1262,"src":"10107:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":1254,"nodeType":"UserDefinedTypeName","pathNode":{"id":1253,"name":"IERC20","nameLocations":["10107:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"10107:6:10"},"referencedDeclaration":40109,"src":"10107:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1257,"mutability":"mutable","name":"to","nameLocation":"10129:2:10","nodeType":"VariableDeclaration","scope":1262,"src":"10121:10:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1256,"name":"address","nodeType":"ElementaryTypeName","src":"10121:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1259,"mutability":"mutable","name":"amount","nameLocation":"10141:6:10","nodeType":"VariableDeclaration","scope":1262,"src":"10133:14:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1258,"name":"uint256","nodeType":"ElementaryTypeName","src":"10133:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10106:42:10"},"returnParameters":{"id":1261,"nodeType":"ParameterList","parameters":[],"src":"10157:0:10"},"scope":1386,"src":"10075:83:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"ebfeb0a1","id":1274,"implemented":false,"kind":"function","modifiers":[],"name":"manualFindTokenIndex","nameLocation":"10173:20:10","nodeType":"FunctionDefinition","parameters":{"id":1270,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1266,"mutability":"mutable","name":"tokens","nameLocation":"10210:6:10","nodeType":"VariableDeclaration","scope":1274,"src":"10194:22:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":1264,"nodeType":"UserDefinedTypeName","pathNode":{"id":1263,"name":"IERC20","nameLocations":["10194:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"10194:6:10"},"referencedDeclaration":40109,"src":"10194:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":1265,"nodeType":"ArrayTypeName","src":"10194:8:10","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":1269,"mutability":"mutable","name":"token","nameLocation":"10225:5:10","nodeType":"VariableDeclaration","scope":1274,"src":"10218:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":1268,"nodeType":"UserDefinedTypeName","pathNode":{"id":1267,"name":"IERC20","nameLocations":["10218:6:10"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"10218:6:10"},"referencedDeclaration":40109,"src":"10218:6:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"10193:38:10"},"returnParameters":{"id":1273,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1272,"mutability":"mutable","name":"index","nameLocation":"10263:5:10","nodeType":"VariableDeclaration","scope":1274,"src":"10255:13:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1271,"name":"uint256","nodeType":"ElementaryTypeName","src":"10255:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10254:15:10"},"scope":1386,"src":"10164:106:10","stateMutability":"pure","virtual":false,"visibility":"external"},{"functionSelector":"e2ddce11","id":1281,"implemented":false,"kind":"function","modifiers":[],"name":"manualSetAddLiquidityCalledFlag","nameLocation":"10285:31:10","nodeType":"FunctionDefinition","parameters":{"id":1279,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1276,"mutability":"mutable","name":"pool","nameLocation":"10325:4:10","nodeType":"VariableDeclaration","scope":1281,"src":"10317:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1275,"name":"address","nodeType":"ElementaryTypeName","src":"10317:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1278,"mutability":"mutable","name":"flag","nameLocation":"10336:4:10","nodeType":"VariableDeclaration","scope":1281,"src":"10331:9:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1277,"name":"bool","nodeType":"ElementaryTypeName","src":"10331:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10316:25:10"},"returnParameters":{"id":1280,"nodeType":"ParameterList","parameters":[],"src":"10350:0:10"},"scope":1386,"src":"10276:75:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"79a2c0ac","id":1288,"implemented":false,"kind":"function","modifiers":[],"name":"manualSetPoolCreator","nameLocation":"10366:20:10","nodeType":"FunctionDefinition","parameters":{"id":1286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1283,"mutability":"mutable","name":"pool","nameLocation":"10395:4:10","nodeType":"VariableDeclaration","scope":1288,"src":"10387:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1282,"name":"address","nodeType":"ElementaryTypeName","src":"10387:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1285,"mutability":"mutable","name":"newPoolCreator","nameLocation":"10409:14:10","nodeType":"VariableDeclaration","scope":1288,"src":"10401:22:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1284,"name":"address","nodeType":"ElementaryTypeName","src":"10401:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10386:38:10"},"returnParameters":{"id":1287,"nodeType":"ParameterList","parameters":[],"src":"10433:0:10"},"scope":1386,"src":"10357:77:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"2cbbf198","id":1293,"implemented":false,"kind":"function","modifiers":[],"name":"ensureValidTradeAmount","nameLocation":"10449:22:10","nodeType":"FunctionDefinition","parameters":{"id":1291,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1290,"mutability":"mutable","name":"tradeAmount","nameLocation":"10480:11:10","nodeType":"VariableDeclaration","scope":1293,"src":"10472:19:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1289,"name":"uint256","nodeType":"ElementaryTypeName","src":"10472:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10471:21:10"},"returnParameters":{"id":1292,"nodeType":"ParameterList","parameters":[],"src":"10506:0:10"},"scope":1386,"src":"10440:67:10","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"b4eb0bf9","id":1298,"implemented":false,"kind":"function","modifiers":[],"name":"ensureValidSwapAmount","nameLocation":"10522:21:10","nodeType":"FunctionDefinition","parameters":{"id":1296,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1295,"mutability":"mutable","name":"tradeAmount","nameLocation":"10552:11:10","nodeType":"VariableDeclaration","scope":1298,"src":"10544:19:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1294,"name":"uint256","nodeType":"ElementaryTypeName","src":"10544:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10543:21:10"},"returnParameters":{"id":1297,"nodeType":"ParameterList","parameters":[],"src":"10578:0:10"},"scope":1386,"src":"10513:66:10","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"a03b23ef","id":1305,"implemented":false,"kind":"function","modifiers":[],"name":"manualUpdateAggregateSwapFeePercentage","nameLocation":"10594:38:10","nodeType":"FunctionDefinition","parameters":{"id":1303,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1300,"mutability":"mutable","name":"pool","nameLocation":"10641:4:10","nodeType":"VariableDeclaration","scope":1305,"src":"10633:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1299,"name":"address","nodeType":"ElementaryTypeName","src":"10633:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1302,"mutability":"mutable","name":"newAggregateSwapFeePercentage","nameLocation":"10655:29:10","nodeType":"VariableDeclaration","scope":1305,"src":"10647:37:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1301,"name":"uint256","nodeType":"ElementaryTypeName","src":"10647:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10632:53:10"},"returnParameters":{"id":1304,"nodeType":"ParameterList","parameters":[],"src":"10694:0:10"},"scope":1386,"src":"10585:110:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"420f4a45","id":1314,"implemented":false,"kind":"function","modifiers":[],"name":"manualGetAddLiquidityCalledFlagBySession","nameLocation":"10710:40:10","nodeType":"FunctionDefinition","parameters":{"id":1310,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1307,"mutability":"mutable","name":"pool","nameLocation":"10759:4:10","nodeType":"VariableDeclaration","scope":1314,"src":"10751:12:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1306,"name":"address","nodeType":"ElementaryTypeName","src":"10751:7:10","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1309,"mutability":"mutable","name":"sessionId","nameLocation":"10773:9:10","nodeType":"VariableDeclaration","scope":1314,"src":"10765:17:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1308,"name":"uint256","nodeType":"ElementaryTypeName","src":"10765:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10750:33:10"},"returnParameters":{"id":1313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1312,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1314,"src":"10807:4:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1311,"name":"bool","nodeType":"ElementaryTypeName","src":"10807:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10806:6:10"},"scope":1386,"src":"10701:112:10","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"81e4b7e9","id":1319,"implemented":false,"kind":"function","modifiers":[],"name":"manualGetCurrentUnlockSessionId","nameLocation":"10828:31:10","nodeType":"FunctionDefinition","parameters":{"id":1315,"nodeType":"ParameterList","parameters":[],"src":"10859:2:10"},"returnParameters":{"id":1318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1317,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1319,"src":"10885:7:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1316,"name":"uint256","nodeType":"ElementaryTypeName","src":"10885:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10884:9:10"},"scope":1386,"src":"10819:75:10","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"06bf83b1","id":1333,"implemented":false,"kind":"function","modifiers":[],"name":"manualComputeAmountGivenScaled18","nameLocation":"10909:32:10","nodeType":"FunctionDefinition","parameters":{"id":1329,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1322,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"10974:15:10","nodeType":"VariableDeclaration","scope":1333,"src":"10951:38:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":1321,"nodeType":"UserDefinedTypeName","pathNode":{"id":1320,"name":"VaultSwapParams","nameLocations":["10951:15:10"],"nodeType":"IdentifierPath","referencedDeclaration":4754,"src":"10951:15:10"},"referencedDeclaration":4754,"src":"10951:15:10","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"},{"constant":false,"id":1325,"mutability":"mutable","name":"poolData","nameLocation":"11015:8:10","nodeType":"VariableDeclaration","scope":1333,"src":"10999:24:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":1324,"nodeType":"UserDefinedTypeName","pathNode":{"id":1323,"name":"PoolData","nameLocations":["10999:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"10999:8:10"},"referencedDeclaration":4729,"src":"10999:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":1328,"mutability":"mutable","name":"swapState","nameLocation":"11050:9:10","nodeType":"VariableDeclaration","scope":1333,"src":"11033:26:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState"},"typeName":{"id":1327,"nodeType":"UserDefinedTypeName","pathNode":{"id":1326,"name":"SwapState","nameLocations":["11033:9:10"],"nodeType":"IdentifierPath","referencedDeclaration":4661,"src":"11033:9:10"},"referencedDeclaration":4661,"src":"11033:9:10","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_storage_ptr","typeString":"struct SwapState"}},"visibility":"internal"}],"src":"10941:124:10"},"returnParameters":{"id":1332,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1331,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1333,"src":"11089:7:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1330,"name":"uint256","nodeType":"ElementaryTypeName","src":"11089:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11088:9:10"},"scope":1386,"src":"10900:198:10","stateMutability":"pure","virtual":false,"visibility":"external"},{"functionSelector":"4594871a","id":1345,"implemented":false,"kind":"function","modifiers":[],"name":"manualLoadSwapState","nameLocation":"11113:19:10","nodeType":"FunctionDefinition","parameters":{"id":1340,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1336,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"11165:15:10","nodeType":"VariableDeclaration","scope":1345,"src":"11142:38:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":1335,"nodeType":"UserDefinedTypeName","pathNode":{"id":1334,"name":"VaultSwapParams","nameLocations":["11142:15:10"],"nodeType":"IdentifierPath","referencedDeclaration":4754,"src":"11142:15:10"},"referencedDeclaration":4754,"src":"11142:15:10","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"},{"constant":false,"id":1339,"mutability":"mutable","name":"poolData","nameLocation":"11206:8:10","nodeType":"VariableDeclaration","scope":1345,"src":"11190:24:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":1338,"nodeType":"UserDefinedTypeName","pathNode":{"id":1337,"name":"PoolData","nameLocations":["11190:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"11190:8:10"},"referencedDeclaration":4729,"src":"11190:8:10","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"11132:88:10"},"returnParameters":{"id":1344,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1343,"mutability":"mutable","name":"swapState","nameLocation":"11261:9:10","nodeType":"VariableDeclaration","scope":1345,"src":"11244:26:10","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState"},"typeName":{"id":1342,"nodeType":"UserDefinedTypeName","pathNode":{"id":1341,"name":"SwapState","nameLocations":["11244:9:10"],"nodeType":"IdentifierPath","referencedDeclaration":4661,"src":"11244:9:10"},"referencedDeclaration":4661,"src":"11244:9:10","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_storage_ptr","typeString":"struct SwapState"}},"visibility":"internal"}],"src":"11243:28:10"},"scope":1386,"src":"11104:168:10","stateMutability":"pure","virtual":false,"visibility":"external"},{"functionSelector":"b8f82b26","id":1355,"implemented":false,"kind":"function","modifiers":[],"name":"previewDeposit","nameLocation":"11287:14:10","nodeType":"FunctionDefinition","parameters":{"id":1351,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1348,"mutability":"mutable","name":"wrapper","nameLocation":"11311:7:10","nodeType":"VariableDeclaration","scope":1355,"src":"11302:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":1347,"nodeType":"UserDefinedTypeName","pathNode":{"id":1346,"name":"IERC4626","nameLocations":["11302:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"11302:8:10"},"referencedDeclaration":39833,"src":"11302:8:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1350,"mutability":"mutable","name":"amountInUnderlying","nameLocation":"11328:18:10","nodeType":"VariableDeclaration","scope":1355,"src":"11320:26:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1349,"name":"uint256","nodeType":"ElementaryTypeName","src":"11320:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11301:46:10"},"returnParameters":{"id":1354,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1353,"mutability":"mutable","name":"amountOutWrapped","nameLocation":"11374:16:10","nodeType":"VariableDeclaration","scope":1355,"src":"11366:24:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1352,"name":"uint256","nodeType":"ElementaryTypeName","src":"11366:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11365:26:10"},"scope":1386,"src":"11278:114:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"d1f810a5","id":1365,"implemented":false,"kind":"function","modifiers":[],"name":"previewMint","nameLocation":"11407:11:10","nodeType":"FunctionDefinition","parameters":{"id":1361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1358,"mutability":"mutable","name":"wrapper","nameLocation":"11428:7:10","nodeType":"VariableDeclaration","scope":1365,"src":"11419:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":1357,"nodeType":"UserDefinedTypeName","pathNode":{"id":1356,"name":"IERC4626","nameLocations":["11419:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"11419:8:10"},"referencedDeclaration":39833,"src":"11419:8:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1360,"mutability":"mutable","name":"amountOutWrapped","nameLocation":"11445:16:10","nodeType":"VariableDeclaration","scope":1365,"src":"11437:24:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1359,"name":"uint256","nodeType":"ElementaryTypeName","src":"11437:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11418:44:10"},"returnParameters":{"id":1364,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1363,"mutability":"mutable","name":"amountInUnderlying","nameLocation":"11489:18:10","nodeType":"VariableDeclaration","scope":1365,"src":"11481:26:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1362,"name":"uint256","nodeType":"ElementaryTypeName","src":"11481:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11480:28:10"},"scope":1386,"src":"11398:111:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"cbe52ae3","id":1375,"implemented":false,"kind":"function","modifiers":[],"name":"previewRedeem","nameLocation":"11524:13:10","nodeType":"FunctionDefinition","parameters":{"id":1371,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1368,"mutability":"mutable","name":"wrapper","nameLocation":"11547:7:10","nodeType":"VariableDeclaration","scope":1375,"src":"11538:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":1367,"nodeType":"UserDefinedTypeName","pathNode":{"id":1366,"name":"IERC4626","nameLocations":["11538:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"11538:8:10"},"referencedDeclaration":39833,"src":"11538:8:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1370,"mutability":"mutable","name":"amountInWrapped","nameLocation":"11564:15:10","nodeType":"VariableDeclaration","scope":1375,"src":"11556:23:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1369,"name":"uint256","nodeType":"ElementaryTypeName","src":"11556:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11537:43:10"},"returnParameters":{"id":1374,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1373,"mutability":"mutable","name":"amountOutUnderlying","nameLocation":"11607:19:10","nodeType":"VariableDeclaration","scope":1375,"src":"11599:27:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1372,"name":"uint256","nodeType":"ElementaryTypeName","src":"11599:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11598:29:10"},"scope":1386,"src":"11515:113:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"bbc6f1dc","id":1385,"implemented":false,"kind":"function","modifiers":[],"name":"previewWithdraw","nameLocation":"11643:15:10","nodeType":"FunctionDefinition","parameters":{"id":1381,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1378,"mutability":"mutable","name":"wrapper","nameLocation":"11668:7:10","nodeType":"VariableDeclaration","scope":1385,"src":"11659:16:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":1377,"nodeType":"UserDefinedTypeName","pathNode":{"id":1376,"name":"IERC4626","nameLocations":["11659:8:10"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"11659:8:10"},"referencedDeclaration":39833,"src":"11659:8:10","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1380,"mutability":"mutable","name":"amountOutUnderlying","nameLocation":"11685:19:10","nodeType":"VariableDeclaration","scope":1385,"src":"11677:27:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1379,"name":"uint256","nodeType":"ElementaryTypeName","src":"11677:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11658:47:10"},"returnParameters":{"id":1384,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1383,"mutability":"mutable","name":"amountInWrapped","nameLocation":"11732:15:10","nodeType":"VariableDeclaration","scope":1385,"src":"11724:23:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1382,"name":"uint256","nodeType":"ElementaryTypeName","src":"11724:7:10","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11723:25:10"},"scope":1386,"src":"11634:115:10","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1387,"src":"334:11417:10","usedErrors":[],"usedEvents":[]}],"src":"46:11706:10"},"id":10},"@balancer-labs/v3-interfaces/contracts/test/IVaultMock.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/test/IVaultMock.sol","exportedSymbols":{"IERC20Errors":[39900],"IVault":[3111],"IVaultAdminMock":[416],"IVaultExtensionMock":[473],"IVaultMainMock":[1386],"IVaultMock":[1414],"IVaultStorageMock":[1439]},"id":1415,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1388,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:11"},{"absolutePath":"@openzeppelin/contracts/interfaces/draft-IERC6093.sol","file":"@openzeppelin/contracts/interfaces/draft-IERC6093.sol","id":1390,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1415,"sourceUnit":39996,"src":"72:85:11","symbolAliases":[{"foreign":{"id":1389,"name":"IERC20Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39900,"src":"81:12:11","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/test/IVaultExtensionMock.sol","file":"./IVaultExtensionMock.sol","id":1392,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1415,"sourceUnit":474,"src":"159:64:11","symbolAliases":[{"foreign":{"id":1391,"name":"IVaultExtensionMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":473,"src":"168:19:11","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/test/IVaultStorageMock.sol","file":"./IVaultStorageMock.sol","id":1394,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1415,"sourceUnit":1440,"src":"224:60:11","symbolAliases":[{"foreign":{"id":1393,"name":"IVaultStorageMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1439,"src":"233:17:11","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/test/IVaultAdminMock.sol","file":"./IVaultAdminMock.sol","id":1396,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1415,"sourceUnit":417,"src":"285:56:11","symbolAliases":[{"foreign":{"id":1395,"name":"IVaultAdminMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":416,"src":"294:15:11","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/test/IVaultMainMock.sol","file":"./IVaultMainMock.sol","id":1398,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1415,"sourceUnit":1387,"src":"342:54:11","symbolAliases":[{"foreign":{"id":1397,"name":"IVaultMainMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1386,"src":"351:14:11","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"../vault/IVault.sol","id":1400,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1415,"sourceUnit":3112,"src":"397:45:11","symbolAliases":[{"foreign":{"id":1399,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"406:6:11","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":1402,"name":"IVault","nameLocations":["575:6:11"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"575:6:11"},"id":1403,"nodeType":"InheritanceSpecifier","src":"575:6:11"},{"baseName":{"id":1404,"name":"IVaultMainMock","nameLocations":["583:14:11"],"nodeType":"IdentifierPath","referencedDeclaration":1386,"src":"583:14:11"},"id":1405,"nodeType":"InheritanceSpecifier","src":"583:14:11"},{"baseName":{"id":1406,"name":"IVaultExtensionMock","nameLocations":["599:19:11"],"nodeType":"IdentifierPath","referencedDeclaration":473,"src":"599:19:11"},"id":1407,"nodeType":"InheritanceSpecifier","src":"599:19:11"},{"baseName":{"id":1408,"name":"IVaultAdminMock","nameLocations":["620:15:11"],"nodeType":"IdentifierPath","referencedDeclaration":416,"src":"620:15:11"},"id":1409,"nodeType":"InheritanceSpecifier","src":"620:15:11"},{"baseName":{"id":1410,"name":"IVaultStorageMock","nameLocations":["637:17:11"],"nodeType":"IdentifierPath","referencedDeclaration":1439,"src":"637:17:11"},"id":1411,"nodeType":"InheritanceSpecifier","src":"637:17:11"},{"baseName":{"id":1412,"name":"IERC20Errors","nameLocations":["656:12:11"],"nodeType":"IdentifierPath","referencedDeclaration":39900,"src":"656:12:11"},"id":1413,"nodeType":"InheritanceSpecifier","src":"656:12:11"}],"canonicalName":"IVaultMock","contractDependencies":[],"contractKind":"interface","documentation":{"id":1401,"nodeType":"StructuredDocumentation","src":"444:107:11","text":"@dev One-fits-all solution for hardhat tests. Use the typechain type for errors, events and functions."},"fullyImplemented":false,"id":1414,"linearizedBaseContracts":[1414,39900,1439,416,473,1386,3111,243,4007,3768,3401,4426,4562],"name":"IVaultMock","nameLocation":"561:10:11","nodeType":"ContractDefinition","nodes":[],"scope":1415,"src":"551:174:11","usedErrors":[234,3413,3418,3423,3428,3437,3443,3446,3449,3452,3455,3458,3461,3470,3473,3476,3479,3482,3485,3488,3491,3494,3497,3500,3503,3506,3509,3512,3518,3525,3532,3535,3538,3548,3558,3565,3568,3571,3574,3584,3594,3601,3604,3607,3610,3613,3616,3619,3622,3625,3630,3635,3640,3643,3646,3649,3652,3655,3660,3665,3670,3676,3682,3685,3693,3699,3705,3708,3711,3714,3719,3729,3739,3746,3749,3752,3755,3758,3761,3764,3767,39870,39875,39880,39889,39894,39899],"usedEvents":[3806,3811,3830,3842,3854,3872,3890,3895,3898,3901,3908,3915,3922,3929,3936,3942,3948,3960,3970,3980,3992,3997,4006]}],"src":"46:680:11"},"id":11},"@balancer-labs/v3-interfaces/contracts/test/IVaultStorageMock.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/test/IVaultStorageMock.sol","exportedSymbols":{"IVaultStorageMock":[1439],"StorageSlotExtension":[10285],"TokenDeltaMappingSlotType":[6858]},"id":1440,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1416,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:12"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","id":1418,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1440,"sourceUnit":10286,"src":"72:120:12","symbolAliases":[{"foreign":{"id":1417,"name":"StorageSlotExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10285,"src":"81:20:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","id":1420,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1440,"sourceUnit":7443,"src":"194:127:12","symbolAliases":[{"foreign":{"id":1419,"name":"TokenDeltaMappingSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6858,"src":"207:25:12","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultStorageMock","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":1439,"linearizedBaseContracts":[1439],"name":"IVaultStorageMock","nameLocation":"333:17:12","nodeType":"ContractDefinition","nodes":[{"functionSelector":"b2469499","id":1426,"implemented":false,"kind":"function","modifiers":[],"name":"manualGetIsUnlocked","nameLocation":"366:19:12","nodeType":"FunctionDefinition","parameters":{"id":1421,"nodeType":"ParameterList","parameters":[],"src":"385:2:12"},"returnParameters":{"id":1425,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1424,"mutability":"mutable","name":"slot","nameLocation":"448:4:12","nodeType":"VariableDeclaration","scope":1426,"src":"411:41:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":1423,"nodeType":"UserDefinedTypeName","pathNode":{"id":1422,"name":"StorageSlotExtension.BooleanSlotType","nameLocations":["411:20:12","432:15:12"],"nodeType":"IdentifierPath","referencedDeclaration":10108,"src":"411:36:12"},"referencedDeclaration":10108,"src":"411:36:12","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"}],"src":"410:43:12"},"scope":1439,"src":"357:97:12","stateMutability":"pure","virtual":false,"visibility":"external"},{"functionSelector":"155075e6","id":1432,"implemented":false,"kind":"function","modifiers":[],"name":"manualGetNonzeroDeltaCount","nameLocation":"469:26:12","nodeType":"FunctionDefinition","parameters":{"id":1427,"nodeType":"ParameterList","parameters":[],"src":"495:2:12"},"returnParameters":{"id":1431,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1430,"mutability":"mutable","name":"slot","nameLocation":"558:4:12","nodeType":"VariableDeclaration","scope":1432,"src":"521:41:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":1429,"nodeType":"UserDefinedTypeName","pathNode":{"id":1428,"name":"StorageSlotExtension.Uint256SlotType","nameLocations":["521:20:12","542:15:12"],"nodeType":"IdentifierPath","referencedDeclaration":10142,"src":"521:36:12"},"referencedDeclaration":10142,"src":"521:36:12","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"520:43:12"},"scope":1439,"src":"460:104:12","stateMutability":"pure","virtual":false,"visibility":"external"},{"functionSelector":"1f4475c5","id":1438,"implemented":false,"kind":"function","modifiers":[],"name":"manualGetTokenDeltas","nameLocation":"579:20:12","nodeType":"FunctionDefinition","parameters":{"id":1433,"nodeType":"ParameterList","parameters":[],"src":"599:2:12"},"returnParameters":{"id":1437,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1436,"mutability":"mutable","name":"slot","nameLocation":"651:4:12","nodeType":"VariableDeclaration","scope":1438,"src":"625:30:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858","typeString":"TokenDeltaMappingSlotType"},"typeName":{"id":1435,"nodeType":"UserDefinedTypeName","pathNode":{"id":1434,"name":"TokenDeltaMappingSlotType","nameLocations":["625:25:12"],"nodeType":"IdentifierPath","referencedDeclaration":6858,"src":"625:25:12"},"referencedDeclaration":6858,"src":"625:25:12","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858","typeString":"TokenDeltaMappingSlotType"}},"visibility":"internal"}],"src":"624:32:12"},"scope":1439,"src":"570:87:12","stateMutability":"pure","virtual":false,"visibility":"external"}],"scope":1440,"src":"323:336:12","usedErrors":[],"usedEvents":[]}],"src":"46:614:12"},"id":12},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","exportedSymbols":{"IAuthorizer":[1455]},"id":1456,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1441,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:13"},{"abstract":false,"baseContracts":[],"canonicalName":"IAuthorizer","contractDependencies":[],"contractKind":"interface","documentation":{"id":1442,"nodeType":"StructuredDocumentation","src":"72:56:13","text":"@notice Interface to the Vault's permission system."},"fullyImplemented":false,"id":1455,"linearizedBaseContracts":[1455],"name":"IAuthorizer","nameLocation":"138:11:13","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1443,"nodeType":"StructuredDocumentation","src":"156:354:13","text":" @notice Returns true if `account` can perform the action described by `actionId` in the contract `where`.\n @param actionId Identifier for the action to be performed\n @param account Account trying to perform the action\n @param where Target contract for the action\n @return success True if the action is permitted"},"functionSelector":"9be2a884","id":1454,"implemented":false,"kind":"function","modifiers":[],"name":"canPerform","nameLocation":"524:10:13","nodeType":"FunctionDefinition","parameters":{"id":1450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1445,"mutability":"mutable","name":"actionId","nameLocation":"543:8:13","nodeType":"VariableDeclaration","scope":1454,"src":"535:16:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1444,"name":"bytes32","nodeType":"ElementaryTypeName","src":"535:7:13","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1447,"mutability":"mutable","name":"account","nameLocation":"561:7:13","nodeType":"VariableDeclaration","scope":1454,"src":"553:15:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1446,"name":"address","nodeType":"ElementaryTypeName","src":"553:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1449,"mutability":"mutable","name":"where","nameLocation":"578:5:13","nodeType":"VariableDeclaration","scope":1454,"src":"570:13:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1448,"name":"address","nodeType":"ElementaryTypeName","src":"570:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"534:50:13"},"returnParameters":{"id":1453,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1452,"mutability":"mutable","name":"success","nameLocation":"613:7:13","nodeType":"VariableDeclaration","scope":1454,"src":"608:12:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1451,"name":"bool","nodeType":"ElementaryTypeName","src":"608:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"607:14:13"},"scope":1455,"src":"515:107:13","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1456,"src":"128:496:13","usedErrors":[],"usedEvents":[]}],"src":"46:579:13"},"id":13},"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol","exportedSymbols":{"IBasePool":[1505],"ISwapFeePercentageBounds":[3057],"IUnbalancedLiquidityInvariantRatioBounds":[3073],"PoolSwapParams":[4772],"Rounding":[4732],"SwapKind":[4735]},"id":1506,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1457,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:14"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol","file":"./IUnbalancedLiquidityInvariantRatioBounds.sol","id":1459,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1506,"sourceUnit":3074,"src":"72:106:14","symbolAliases":[{"foreign":{"id":1458,"name":"IUnbalancedLiquidityInvariantRatioBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3073,"src":"81:40:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol","file":"./ISwapFeePercentageBounds.sol","id":1461,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1506,"sourceUnit":3058,"src":"179:74:14","symbolAliases":[{"foreign":{"id":1460,"name":"ISwapFeePercentageBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3057,"src":"188:24:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":1465,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1506,"sourceUnit":4872,"src":"254:70:14","symbolAliases":[{"foreign":{"id":1462,"name":"PoolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4772,"src":"263:14:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1463,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"279:8:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1464,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"289:8:14","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":1467,"name":"ISwapFeePercentageBounds","nameLocations":["733:24:14"],"nodeType":"IdentifierPath","referencedDeclaration":3057,"src":"733:24:14"},"id":1468,"nodeType":"InheritanceSpecifier","src":"733:24:14"},{"baseName":{"id":1469,"name":"IUnbalancedLiquidityInvariantRatioBounds","nameLocations":["759:40:14"],"nodeType":"IdentifierPath","referencedDeclaration":3073,"src":"759:40:14"},"id":1470,"nodeType":"InheritanceSpecifier","src":"759:40:14"}],"canonicalName":"IBasePool","contractDependencies":[],"contractKind":"interface","documentation":{"id":1466,"nodeType":"StructuredDocumentation","src":"326:383:14","text":" @notice Base interface for a Balancer Pool.\n @dev All pool types should implement this interface. Note that it also requires implementation of:\n - `ISwapFeePercentageBounds` to specify the minimum and maximum swap fee percentages.\n - `IUnbalancedLiquidityInvariantRatioBounds` to specify how much the invariant can change during an unbalanced\n liquidity operation."},"fullyImplemented":false,"id":1505,"linearizedBaseContracts":[1505,3073,3057],"name":"IBasePool","nameLocation":"720:9:14","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1471,"nodeType":"StructuredDocumentation","src":"1014:1934:14","text":" @notice Computes the pool's invariant.\n @dev This function computes the invariant based on current balances (and potentially other pool state).\n The rounding direction must be respected for the Vault to round in the pool's favor when calling this function.\n If the invariant computation involves no precision loss (e.g. simple sum of balances), the same result can be\n returned for both rounding directions.\n You can think of the invariant as a measure of the \"value\" of the pool, which is related to the total liquidity\n (i.e., the \"BPT rate\" is `invariant` / `totalSupply`). Two critical properties must hold:\n 1) The invariant should not change due to a swap. In practice, it can *increase* due to swap fees, which\n effectively add liquidity after the swap - but it should never decrease.\n 2) The invariant must be \"linear\"; i.e., increasing the balances proportionally must increase the invariant in\n the same proportion: inv(a * n, b * n, c * n) = inv(a, b, c) * n\n Property #1 is required to prevent \"round trip\" paths that drain value from the pool (and all LP shareholders).\n Intuitively, an accurate pricing algorithm ensures the user gets an equal value of token out given token in, so\n the total value should not change.\n Property #2 is essential for the \"fungibility\" of LP shares. If it did not hold, then different users depositing\n the same total value would get a different number of LP shares. In that case, LP shares would not be\n interchangeable, as they must be in a fair DEX.\n @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n @param rounding Rounding direction to consider when computing the invariant\n @return invariant The calculated invariant of the pool, represented as a uint256"},"functionSelector":"984de9e8","id":1482,"implemented":false,"kind":"function","modifiers":[],"name":"computeInvariant","nameLocation":"2962:16:14","nodeType":"FunctionDefinition","parameters":{"id":1478,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1474,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"3005:20:14","nodeType":"VariableDeclaration","scope":1482,"src":"2988:37:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1472,"name":"uint256","nodeType":"ElementaryTypeName","src":"2988:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1473,"nodeType":"ArrayTypeName","src":"2988:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1477,"mutability":"mutable","name":"rounding","nameLocation":"3044:8:14","nodeType":"VariableDeclaration","scope":1482,"src":"3035:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"},"typeName":{"id":1476,"nodeType":"UserDefinedTypeName","pathNode":{"id":1475,"name":"Rounding","nameLocations":["3035:8:14"],"nodeType":"IdentifierPath","referencedDeclaration":4732,"src":"3035:8:14"},"referencedDeclaration":4732,"src":"3035:8:14","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"visibility":"internal"}],"src":"2978:80:14"},"returnParameters":{"id":1481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1480,"mutability":"mutable","name":"invariant","nameLocation":"3090:9:14","nodeType":"VariableDeclaration","scope":1482,"src":"3082:17:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1479,"name":"uint256","nodeType":"ElementaryTypeName","src":"3082:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3081:19:14"},"scope":1505,"src":"2953:148:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1483,"nodeType":"StructuredDocumentation","src":"3107:725:14","text":" @notice Computes a new token balance, given the invariant growth ratio and all other balances.\n @dev Similar to V2's `_getTokenBalanceGivenInvariantAndAllOtherBalances` in StableMath.\n The pool must round up for the Vault to round in the protocol's favor when calling this function.\n @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n @param tokenInIndex The index of the token we're computing the balance for, sorted in token registration order\n @param invariantRatio The ratio of the new invariant (after an operation) to the old\n @return newBalance The new balance of the selected token, after the operation"},"functionSelector":"16a0b3e0","id":1495,"implemented":false,"kind":"function","modifiers":[],"name":"computeBalance","nameLocation":"3846:14:14","nodeType":"FunctionDefinition","parameters":{"id":1491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1486,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"3887:20:14","nodeType":"VariableDeclaration","scope":1495,"src":"3870:37:14","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1484,"name":"uint256","nodeType":"ElementaryTypeName","src":"3870:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1485,"nodeType":"ArrayTypeName","src":"3870:9:14","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1488,"mutability":"mutable","name":"tokenInIndex","nameLocation":"3925:12:14","nodeType":"VariableDeclaration","scope":1495,"src":"3917:20:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1487,"name":"uint256","nodeType":"ElementaryTypeName","src":"3917:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1490,"mutability":"mutable","name":"invariantRatio","nameLocation":"3955:14:14","nodeType":"VariableDeclaration","scope":1495,"src":"3947:22:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1489,"name":"uint256","nodeType":"ElementaryTypeName","src":"3947:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3860:115:14"},"returnParameters":{"id":1494,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1493,"mutability":"mutable","name":"newBalance","nameLocation":"4007:10:14","nodeType":"VariableDeclaration","scope":1495,"src":"3999:18:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1492,"name":"uint256","nodeType":"ElementaryTypeName","src":"3999:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3998:20:14"},"scope":1505,"src":"3837:182:14","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1496,"nodeType":"StructuredDocumentation","src":"4233:206:14","text":" @notice Execute a swap in the pool.\n @param params Swap parameters (see above for struct definition)\n @return amountCalculatedScaled18 Calculated amount for the swap operation"},"functionSelector":"72c98186","id":1504,"implemented":false,"kind":"function","modifiers":[],"name":"onSwap","nameLocation":"4453:6:14","nodeType":"FunctionDefinition","parameters":{"id":1500,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1499,"mutability":"mutable","name":"params","nameLocation":"4484:6:14","nodeType":"VariableDeclaration","scope":1504,"src":"4460:30:14","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":1498,"nodeType":"UserDefinedTypeName","pathNode":{"id":1497,"name":"PoolSwapParams","nameLocations":["4460:14:14"],"nodeType":"IdentifierPath","referencedDeclaration":4772,"src":"4460:14:14"},"referencedDeclaration":4772,"src":"4460:14:14","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"src":"4459:32:14"},"returnParameters":{"id":1503,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1502,"mutability":"mutable","name":"amountCalculatedScaled18","nameLocation":"4518:24:14","nodeType":"VariableDeclaration","scope":1504,"src":"4510:32:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1501,"name":"uint256","nodeType":"ElementaryTypeName","src":"4510:7:14","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4509:34:14"},"scope":1505,"src":"4444:100:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1506,"src":"710:3836:14","usedErrors":[],"usedEvents":[]}],"src":"46:4501:14"},"id":14},"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol","exportedSymbols":{"IAuthentication":[243],"IBasePoolFactory":[1579]},"id":1580,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1507,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:15"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"../solidity-utils/helpers/IAuthentication.sol","id":1509,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1580,"sourceUnit":244,"src":"72:80:15","symbolAliases":[{"foreign":{"id":1508,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":243,"src":"81:15:15","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":1511,"name":"IAuthentication","nameLocations":["454:15:15"],"nodeType":"IdentifierPath","referencedDeclaration":243,"src":"454:15:15"},"id":1512,"nodeType":"InheritanceSpecifier","src":"454:15:15"}],"canonicalName":"IBasePoolFactory","contractDependencies":[],"contractKind":"interface","documentation":{"id":1510,"nodeType":"StructuredDocumentation","src":"154:269:15","text":" @notice Base interface for a Balancer Pool Factory.\n @dev All pool factories should be derived from `BasePoolFactory` to enable common behavior for all pool types\n (e.g., address prediction, tracking deployed pools, and governance-facilitated migration)."},"fullyImplemented":false,"id":1579,"linearizedBaseContracts":[1579,243],"name":"IBasePoolFactory","nameLocation":"434:16:15","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1513,"nodeType":"StructuredDocumentation","src":"476:94:15","text":" @notice A pool was deployed.\n @param pool The address of the new pool"},"eventSelector":"83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc","id":1517,"name":"PoolCreated","nameLocation":"581:11:15","nodeType":"EventDefinition","parameters":{"id":1516,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1515,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"609:4:15","nodeType":"VariableDeclaration","scope":1517,"src":"593:20:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1514,"name":"address","nodeType":"ElementaryTypeName","src":"593:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"592:22:15"},"src":"575:40:15"},{"anonymous":false,"documentation":{"id":1518,"nodeType":"StructuredDocumentation","src":"621:51:15","text":"@notice The factory was disabled by governance."},"eventSelector":"432acbfd662dbb5d8b378384a67159b47ca9d0f1b79f97cf64cf8585fa362d50","id":1520,"name":"FactoryDisabled","nameLocation":"683:15:15","nodeType":"EventDefinition","parameters":{"id":1519,"nodeType":"ParameterList","parameters":[],"src":"698:2:15"},"src":"677:24:15"},{"documentation":{"id":1521,"nodeType":"StructuredDocumentation","src":"707:67:15","text":"@notice Attempted pool creation after the factory was disabled."},"errorSelector":"75884cda","id":1523,"name":"Disabled","nameLocation":"785:8:15","nodeType":"ErrorDefinition","parameters":{"id":1522,"nodeType":"ParameterList","parameters":[],"src":"793:2:15"},"src":"779:17:15"},{"documentation":{"id":1524,"nodeType":"StructuredDocumentation","src":"802:67:15","text":"@notice A pool index is beyond the current bounds of the array."},"errorSelector":"4e23d035","id":1526,"name":"IndexOutOfBounds","nameLocation":"880:16:15","nodeType":"ErrorDefinition","parameters":{"id":1525,"nodeType":"ParameterList","parameters":[],"src":"896:2:15"},"src":"874:25:15"},{"documentation":{"id":1527,"nodeType":"StructuredDocumentation","src":"905:180:15","text":" @notice Check whether a pool was deployed by this factory.\n @param pool The pool to check\n @return success True if `pool` was created by this factory"},"functionSelector":"6634b753","id":1534,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolFromFactory","nameLocation":"1099:17:15","nodeType":"FunctionDefinition","parameters":{"id":1530,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1529,"mutability":"mutable","name":"pool","nameLocation":"1125:4:15","nodeType":"VariableDeclaration","scope":1534,"src":"1117:12:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1528,"name":"address","nodeType":"ElementaryTypeName","src":"1117:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1116:14:15"},"returnParameters":{"id":1533,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1532,"mutability":"mutable","name":"success","nameLocation":"1159:7:15","nodeType":"VariableDeclaration","scope":1534,"src":"1154:12:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1531,"name":"bool","nodeType":"ElementaryTypeName","src":"1154:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1153:14:15"},"scope":1579,"src":"1090:78:15","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1535,"nodeType":"StructuredDocumentation","src":"1174:245:15","text":" @notice Return the total number of pools deployed by this factory.\n @dev This can then be used to \"paginate\" calls to `getPools` to control gas costs.\n @return poolCount The number of pools deployed by this factory"},"functionSelector":"8eec5d70","id":1540,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCount","nameLocation":"1433:12:15","nodeType":"FunctionDefinition","parameters":{"id":1536,"nodeType":"ParameterList","parameters":[],"src":"1445:2:15"},"returnParameters":{"id":1539,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1538,"mutability":"mutable","name":"poolCount","nameLocation":"1479:9:15","nodeType":"VariableDeclaration","scope":1540,"src":"1471:17:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1537,"name":"uint256","nodeType":"ElementaryTypeName","src":"1471:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1470:19:15"},"scope":1579,"src":"1424:66:15","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1541,"nodeType":"StructuredDocumentation","src":"1496:510:15","text":" @notice Return a subset of the list of pools deployed by this factory.\n @dev `start` must be a valid index, but if `count` exceeds the total length, it will not revert, but simply\n stop at the end and return fewer results than requested.\n @param start The index of the first pool to return\n @param count The maximum number of pools to return\n @return pools The list of pools deployed by this factory, starting at `start` and returning up to `count` pools"},"functionSelector":"53a72f7e","id":1551,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolsInRange","nameLocation":"2020:15:15","nodeType":"FunctionDefinition","parameters":{"id":1546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1543,"mutability":"mutable","name":"start","nameLocation":"2044:5:15","nodeType":"VariableDeclaration","scope":1551,"src":"2036:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1542,"name":"uint256","nodeType":"ElementaryTypeName","src":"2036:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1545,"mutability":"mutable","name":"count","nameLocation":"2059:5:15","nodeType":"VariableDeclaration","scope":1551,"src":"2051:13:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1544,"name":"uint256","nodeType":"ElementaryTypeName","src":"2051:7:15","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2035:30:15"},"returnParameters":{"id":1550,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1549,"mutability":"mutable","name":"pools","nameLocation":"2106:5:15","nodeType":"VariableDeclaration","scope":1551,"src":"2089:22:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1547,"name":"address","nodeType":"ElementaryTypeName","src":"2089:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1548,"nodeType":"ArrayTypeName","src":"2089:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2088:24:15"},"scope":1579,"src":"2011:102:15","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1552,"nodeType":"StructuredDocumentation","src":"2119:150:15","text":" @notice Return the complete list of pools deployed by this factory.\n @return pools The list of pools deployed by this factory"},"functionSelector":"673a2a1f","id":1558,"implemented":false,"kind":"function","modifiers":[],"name":"getPools","nameLocation":"2283:8:15","nodeType":"FunctionDefinition","parameters":{"id":1553,"nodeType":"ParameterList","parameters":[],"src":"2291:2:15"},"returnParameters":{"id":1557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1556,"mutability":"mutable","name":"pools","nameLocation":"2334:5:15","nodeType":"VariableDeclaration","scope":1558,"src":"2317:22:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1554,"name":"address","nodeType":"ElementaryTypeName","src":"2317:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1555,"nodeType":"ArrayTypeName","src":"2317:9:15","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2316:24:15"},"scope":1579,"src":"2274:67:15","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1559,"nodeType":"StructuredDocumentation","src":"2347:322:15","text":" @notice Return the address where a new pool will be deployed, based on the factory address and salt.\n @param constructorArgs The arguments used to create the pool\n @param salt The salt used to deploy the pool\n @return deploymentAddress The predicted address of the pool, given the salt"},"functionSelector":"44f6fec7","id":1568,"implemented":false,"kind":"function","modifiers":[],"name":"getDeploymentAddress","nameLocation":"2683:20:15","nodeType":"FunctionDefinition","parameters":{"id":1564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1561,"mutability":"mutable","name":"constructorArgs","nameLocation":"2726:15:15","nodeType":"VariableDeclaration","scope":1568,"src":"2713:28:15","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1560,"name":"bytes","nodeType":"ElementaryTypeName","src":"2713:5:15","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":1563,"mutability":"mutable","name":"salt","nameLocation":"2759:4:15","nodeType":"VariableDeclaration","scope":1568,"src":"2751:12:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1562,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2751:7:15","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2703:66:15"},"returnParameters":{"id":1567,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1566,"mutability":"mutable","name":"deploymentAddress","nameLocation":"2801:17:15","nodeType":"VariableDeclaration","scope":1568,"src":"2793:25:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1565,"name":"address","nodeType":"ElementaryTypeName","src":"2793:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2792:27:15"},"scope":1579,"src":"2674:146:15","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1569,"nodeType":"StructuredDocumentation","src":"2826:143:15","text":" @notice Check whether this factory has been disabled by governance.\n @return success True if this factory was disabled"},"functionSelector":"6c57f5a9","id":1574,"implemented":false,"kind":"function","modifiers":[],"name":"isDisabled","nameLocation":"2983:10:15","nodeType":"FunctionDefinition","parameters":{"id":1570,"nodeType":"ParameterList","parameters":[],"src":"2993:2:15"},"returnParameters":{"id":1573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1572,"mutability":"mutable","name":"success","nameLocation":"3024:7:15","nodeType":"VariableDeclaration","scope":1574,"src":"3019:12:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1571,"name":"bool","nodeType":"ElementaryTypeName","src":"3019:4:15","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3018:14:15"},"scope":1579,"src":"2974:59:15","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1575,"nodeType":"StructuredDocumentation","src":"3039:182:15","text":" @notice Disable the factory, preventing the creation of more pools.\n @dev Existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled."},"functionSelector":"2f2770db","id":1578,"implemented":false,"kind":"function","modifiers":[],"name":"disable","nameLocation":"3235:7:15","nodeType":"FunctionDefinition","parameters":{"id":1576,"nodeType":"ParameterList","parameters":[],"src":"3242:2:15"},"returnParameters":{"id":1577,"nodeType":"ParameterList","parameters":[],"src":"3253:0:15"},"scope":1579,"src":"3226:28:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1580,"src":"424:2832:15","usedErrors":[234,1523,1526],"usedEvents":[1517,1520]}],"src":"46:3211:15"},"id":15},"@balancer-labs/v3-interfaces/contracts/vault/IBatchRouter.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBatchRouter.sol","exportedSymbols":{"AddLiquidityKind":[4807],"IBatchRouter":[1735],"IERC20":[40109],"RemoveLiquidityKind":[4828],"SwapKind":[4735]},"id":1736,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1581,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:16"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":1583,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1736,"sourceUnit":40110,"src":"72:72:16","symbolAliases":[{"foreign":{"id":1582,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"81:6:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":1587,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1736,"sourceUnit":4872,"src":"146:83:16","symbolAliases":[{"foreign":{"id":1584,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4807,"src":"155:16:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1585,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4828,"src":"173:19:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1586,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"194:8:16","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IBatchRouter","contractDependencies":[],"contractKind":"interface","documentation":{"id":1588,"nodeType":"StructuredDocumentation","src":"231:73:16","text":"@notice Interface for the `BatchRouter`, supporting multi-hop swaps."},"fullyImplemented":false,"id":1735,"linearizedBaseContracts":[1735],"name":"IBatchRouter","nameLocation":"314:12:16","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IBatchRouter.SwapPathStep","id":1596,"members":[{"constant":false,"id":1590,"mutability":"mutable","name":"pool","nameLocation":"579:4:16","nodeType":"VariableDeclaration","scope":1596,"src":"571:12:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1589,"name":"address","nodeType":"ElementaryTypeName","src":"571:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1593,"mutability":"mutable","name":"tokenOut","nameLocation":"600:8:16","nodeType":"VariableDeclaration","scope":1596,"src":"593:15:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":1592,"nodeType":"UserDefinedTypeName","pathNode":{"id":1591,"name":"IERC20","nameLocations":["593:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"593:6:16"},"referencedDeclaration":40109,"src":"593:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1595,"mutability":"mutable","name":"isBuffer","nameLocation":"742:8:16","nodeType":"VariableDeclaration","scope":1596,"src":"737:13:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1594,"name":"bool","nodeType":"ElementaryTypeName","src":"737:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"SwapPathStep","nameLocation":"548:12:16","nodeType":"StructDefinition","scope":1735,"src":"541:216:16","visibility":"public"},{"canonicalName":"IBatchRouter.SwapPathExactAmountIn","id":1608,"members":[{"constant":false,"id":1599,"mutability":"mutable","name":"tokenIn","nameLocation":"809:7:16","nodeType":"VariableDeclaration","scope":1608,"src":"802:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":1598,"nodeType":"UserDefinedTypeName","pathNode":{"id":1597,"name":"IERC20","nameLocations":["802:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"802:6:16"},"referencedDeclaration":40109,"src":"802:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1603,"mutability":"mutable","name":"steps","nameLocation":"1002:5:16","nodeType":"VariableDeclaration","scope":1608,"src":"987:20:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1596_storage_$dyn_storage_ptr","typeString":"struct IBatchRouter.SwapPathStep[]"},"typeName":{"baseType":{"id":1601,"nodeType":"UserDefinedTypeName","pathNode":{"id":1600,"name":"SwapPathStep","nameLocations":["987:12:16"],"nodeType":"IdentifierPath","referencedDeclaration":1596,"src":"987:12:16"},"referencedDeclaration":1596,"src":"987:12:16","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_storage_ptr","typeString":"struct IBatchRouter.SwapPathStep"}},"id":1602,"nodeType":"ArrayTypeName","src":"987:14:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1596_storage_$dyn_storage_ptr","typeString":"struct IBatchRouter.SwapPathStep[]"}},"visibility":"internal"},{"constant":false,"id":1605,"mutability":"mutable","name":"exactAmountIn","nameLocation":"1025:13:16","nodeType":"VariableDeclaration","scope":1608,"src":"1017:21:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1604,"name":"uint256","nodeType":"ElementaryTypeName","src":"1017:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1607,"mutability":"mutable","name":"minAmountOut","nameLocation":"1056:12:16","nodeType":"VariableDeclaration","scope":1608,"src":"1048:20:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1606,"name":"uint256","nodeType":"ElementaryTypeName","src":"1048:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"SwapPathExactAmountIn","nameLocation":"770:21:16","nodeType":"StructDefinition","scope":1735,"src":"763:312:16","visibility":"public"},{"canonicalName":"IBatchRouter.SwapPathExactAmountOut","id":1620,"members":[{"constant":false,"id":1611,"mutability":"mutable","name":"tokenIn","nameLocation":"1128:7:16","nodeType":"VariableDeclaration","scope":1620,"src":"1121:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":1610,"nodeType":"UserDefinedTypeName","pathNode":{"id":1609,"name":"IERC20","nameLocations":["1121:6:16"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"1121:6:16"},"referencedDeclaration":40109,"src":"1121:6:16","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":1615,"mutability":"mutable","name":"steps","nameLocation":"1334:5:16","nodeType":"VariableDeclaration","scope":1620,"src":"1319:20:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1596_storage_$dyn_storage_ptr","typeString":"struct IBatchRouter.SwapPathStep[]"},"typeName":{"baseType":{"id":1613,"nodeType":"UserDefinedTypeName","pathNode":{"id":1612,"name":"SwapPathStep","nameLocations":["1319:12:16"],"nodeType":"IdentifierPath","referencedDeclaration":1596,"src":"1319:12:16"},"referencedDeclaration":1596,"src":"1319:12:16","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_storage_ptr","typeString":"struct IBatchRouter.SwapPathStep"}},"id":1614,"nodeType":"ArrayTypeName","src":"1319:14:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1596_storage_$dyn_storage_ptr","typeString":"struct IBatchRouter.SwapPathStep[]"}},"visibility":"internal"},{"constant":false,"id":1617,"mutability":"mutable","name":"maxAmountIn","nameLocation":"1357:11:16","nodeType":"VariableDeclaration","scope":1620,"src":"1349:19:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1616,"name":"uint256","nodeType":"ElementaryTypeName","src":"1349:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1619,"mutability":"mutable","name":"exactAmountOut","nameLocation":"1386:14:16","nodeType":"VariableDeclaration","scope":1620,"src":"1378:22:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1618,"name":"uint256","nodeType":"ElementaryTypeName","src":"1378:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"SwapPathExactAmountOut","nameLocation":"1088:22:16","nodeType":"StructDefinition","scope":1735,"src":"1081:326:16","visibility":"public"},{"canonicalName":"IBatchRouter.SwapExactInHookParams","id":1633,"members":[{"constant":false,"id":1622,"mutability":"mutable","name":"sender","nameLocation":"1460:6:16","nodeType":"VariableDeclaration","scope":1633,"src":"1452:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1621,"name":"address","nodeType":"ElementaryTypeName","src":"1452:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1626,"mutability":"mutable","name":"paths","nameLocation":"1500:5:16","nodeType":"VariableDeclaration","scope":1633,"src":"1476:29:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountIn_$1608_storage_$dyn_storage_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn[]"},"typeName":{"baseType":{"id":1624,"nodeType":"UserDefinedTypeName","pathNode":{"id":1623,"name":"SwapPathExactAmountIn","nameLocations":["1476:21:16"],"nodeType":"IdentifierPath","referencedDeclaration":1608,"src":"1476:21:16"},"referencedDeclaration":1608,"src":"1476:21:16","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountIn_$1608_storage_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn"}},"id":1625,"nodeType":"ArrayTypeName","src":"1476:23:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountIn_$1608_storage_$dyn_storage_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn[]"}},"visibility":"internal"},{"constant":false,"id":1628,"mutability":"mutable","name":"deadline","nameLocation":"1523:8:16","nodeType":"VariableDeclaration","scope":1633,"src":"1515:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1627,"name":"uint256","nodeType":"ElementaryTypeName","src":"1515:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1630,"mutability":"mutable","name":"wethIsEth","nameLocation":"1546:9:16","nodeType":"VariableDeclaration","scope":1633,"src":"1541:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1629,"name":"bool","nodeType":"ElementaryTypeName","src":"1541:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1632,"mutability":"mutable","name":"userData","nameLocation":"1571:8:16","nodeType":"VariableDeclaration","scope":1633,"src":"1565:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":1631,"name":"bytes","nodeType":"ElementaryTypeName","src":"1565:5:16","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"SwapExactInHookParams","nameLocation":"1420:21:16","nodeType":"StructDefinition","scope":1735,"src":"1413:173:16","visibility":"public"},{"canonicalName":"IBatchRouter.SwapExactOutHookParams","id":1646,"members":[{"constant":false,"id":1635,"mutability":"mutable","name":"sender","nameLocation":"1640:6:16","nodeType":"VariableDeclaration","scope":1646,"src":"1632:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1634,"name":"address","nodeType":"ElementaryTypeName","src":"1632:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1639,"mutability":"mutable","name":"paths","nameLocation":"1681:5:16","nodeType":"VariableDeclaration","scope":1646,"src":"1656:30:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountOut_$1620_storage_$dyn_storage_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut[]"},"typeName":{"baseType":{"id":1637,"nodeType":"UserDefinedTypeName","pathNode":{"id":1636,"name":"SwapPathExactAmountOut","nameLocations":["1656:22:16"],"nodeType":"IdentifierPath","referencedDeclaration":1620,"src":"1656:22:16"},"referencedDeclaration":1620,"src":"1656:22:16","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountOut_$1620_storage_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut"}},"id":1638,"nodeType":"ArrayTypeName","src":"1656:24:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountOut_$1620_storage_$dyn_storage_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut[]"}},"visibility":"internal"},{"constant":false,"id":1641,"mutability":"mutable","name":"deadline","nameLocation":"1704:8:16","nodeType":"VariableDeclaration","scope":1646,"src":"1696:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1640,"name":"uint256","nodeType":"ElementaryTypeName","src":"1696:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1643,"mutability":"mutable","name":"wethIsEth","nameLocation":"1727:9:16","nodeType":"VariableDeclaration","scope":1646,"src":"1722:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1642,"name":"bool","nodeType":"ElementaryTypeName","src":"1722:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1645,"mutability":"mutable","name":"userData","nameLocation":"1752:8:16","nodeType":"VariableDeclaration","scope":1646,"src":"1746:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":1644,"name":"bytes","nodeType":"ElementaryTypeName","src":"1746:5:16","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"SwapExactOutHookParams","nameLocation":"1599:22:16","nodeType":"StructDefinition","scope":1735,"src":"1592:175:16","visibility":"public"},{"documentation":{"id":1647,"nodeType":"StructuredDocumentation","src":"1773:728:16","text":" @notice Executes a swap operation involving multiple paths (steps), specifying exact input token amounts.\n @param paths Swap paths from token in to token out, specifying exact amounts in\n @param deadline Deadline for the swap, after which it will revert\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data required for the swap\n @return pathAmountsOut Calculated amounts of output tokens corresponding to the last step of each given path\n @return tokensOut Output token addresses\n @return amountsOut Calculated amounts of output tokens, ordered by output token address"},"functionSelector":"286f580d","id":1669,"implemented":false,"kind":"function","modifiers":[],"name":"swapExactIn","nameLocation":"2515:11:16","nodeType":"FunctionDefinition","parameters":{"id":1658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1651,"mutability":"mutable","name":"paths","nameLocation":"2567:5:16","nodeType":"VariableDeclaration","scope":1669,"src":"2536:36:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountIn_$1608_memory_ptr_$dyn_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn[]"},"typeName":{"baseType":{"id":1649,"nodeType":"UserDefinedTypeName","pathNode":{"id":1648,"name":"SwapPathExactAmountIn","nameLocations":["2536:21:16"],"nodeType":"IdentifierPath","referencedDeclaration":1608,"src":"2536:21:16"},"referencedDeclaration":1608,"src":"2536:21:16","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountIn_$1608_storage_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn"}},"id":1650,"nodeType":"ArrayTypeName","src":"2536:23:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountIn_$1608_storage_$dyn_storage_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn[]"}},"visibility":"internal"},{"constant":false,"id":1653,"mutability":"mutable","name":"deadline","nameLocation":"2590:8:16","nodeType":"VariableDeclaration","scope":1669,"src":"2582:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1652,"name":"uint256","nodeType":"ElementaryTypeName","src":"2582:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1655,"mutability":"mutable","name":"wethIsEth","nameLocation":"2613:9:16","nodeType":"VariableDeclaration","scope":1669,"src":"2608:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1654,"name":"bool","nodeType":"ElementaryTypeName","src":"2608:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1657,"mutability":"mutable","name":"userData","nameLocation":"2647:8:16","nodeType":"VariableDeclaration","scope":1669,"src":"2632:23:16","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1656,"name":"bytes","nodeType":"ElementaryTypeName","src":"2632:5:16","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2526:135:16"},"returnParameters":{"id":1668,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1661,"mutability":"mutable","name":"pathAmountsOut","nameLocation":"2729:14:16","nodeType":"VariableDeclaration","scope":1669,"src":"2712:31:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1659,"name":"uint256","nodeType":"ElementaryTypeName","src":"2712:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1660,"nodeType":"ArrayTypeName","src":"2712:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1664,"mutability":"mutable","name":"tokensOut","nameLocation":"2762:9:16","nodeType":"VariableDeclaration","scope":1669,"src":"2745:26:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1662,"name":"address","nodeType":"ElementaryTypeName","src":"2745:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1663,"nodeType":"ArrayTypeName","src":"2745:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":1667,"mutability":"mutable","name":"amountsOut","nameLocation":"2790:10:16","nodeType":"VariableDeclaration","scope":1669,"src":"2773:27:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1665,"name":"uint256","nodeType":"ElementaryTypeName","src":"2773:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1666,"nodeType":"ArrayTypeName","src":"2773:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"2711:90:16"},"scope":1735,"src":"2506:296:16","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":1670,"nodeType":"StructuredDocumentation","src":"2808:696:16","text":" @notice Executes a swap operation involving multiple paths (steps), specifying exact output token amounts.\n @param paths Swap paths from token in to token out, specifying exact amounts out\n @param deadline Deadline for the swap\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data required for the swap\n @return pathAmountsIn Calculated amounts of input tokens corresponding to the first step of each given path\n @return tokensIn Input token addresses\n @return amountsIn Calculated amounts of input tokens, ordered by input token address"},"functionSelector":"8eb1b65e","id":1692,"implemented":false,"kind":"function","modifiers":[],"name":"swapExactOut","nameLocation":"3518:12:16","nodeType":"FunctionDefinition","parameters":{"id":1681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1674,"mutability":"mutable","name":"paths","nameLocation":"3572:5:16","nodeType":"VariableDeclaration","scope":1692,"src":"3540:37:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountOut_$1620_memory_ptr_$dyn_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut[]"},"typeName":{"baseType":{"id":1672,"nodeType":"UserDefinedTypeName","pathNode":{"id":1671,"name":"SwapPathExactAmountOut","nameLocations":["3540:22:16"],"nodeType":"IdentifierPath","referencedDeclaration":1620,"src":"3540:22:16"},"referencedDeclaration":1620,"src":"3540:22:16","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountOut_$1620_storage_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut"}},"id":1673,"nodeType":"ArrayTypeName","src":"3540:24:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountOut_$1620_storage_$dyn_storage_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut[]"}},"visibility":"internal"},{"constant":false,"id":1676,"mutability":"mutable","name":"deadline","nameLocation":"3595:8:16","nodeType":"VariableDeclaration","scope":1692,"src":"3587:16:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1675,"name":"uint256","nodeType":"ElementaryTypeName","src":"3587:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1678,"mutability":"mutable","name":"wethIsEth","nameLocation":"3618:9:16","nodeType":"VariableDeclaration","scope":1692,"src":"3613:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1677,"name":"bool","nodeType":"ElementaryTypeName","src":"3613:4:16","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1680,"mutability":"mutable","name":"userData","nameLocation":"3652:8:16","nodeType":"VariableDeclaration","scope":1692,"src":"3637:23:16","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1679,"name":"bytes","nodeType":"ElementaryTypeName","src":"3637:5:16","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3530:136:16"},"returnParameters":{"id":1691,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1684,"mutability":"mutable","name":"pathAmountsIn","nameLocation":"3710:13:16","nodeType":"VariableDeclaration","scope":1692,"src":"3693:30:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1682,"name":"uint256","nodeType":"ElementaryTypeName","src":"3693:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1683,"nodeType":"ArrayTypeName","src":"3693:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1687,"mutability":"mutable","name":"tokensIn","nameLocation":"3742:8:16","nodeType":"VariableDeclaration","scope":1692,"src":"3725:25:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1685,"name":"address","nodeType":"ElementaryTypeName","src":"3725:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1686,"nodeType":"ArrayTypeName","src":"3725:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":1690,"mutability":"mutable","name":"amountsIn","nameLocation":"3769:9:16","nodeType":"VariableDeclaration","scope":1692,"src":"3752:26:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1688,"name":"uint256","nodeType":"ElementaryTypeName","src":"3752:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1689,"nodeType":"ArrayTypeName","src":"3752:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"3692:87:16"},"scope":1735,"src":"3509:271:16","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":1693,"nodeType":"StructuredDocumentation","src":"3994:737:16","text":" @notice Queries a swap operation involving multiple paths (steps), specifying exact input token amounts.\n @dev Min amounts out specified in the paths are ignored.\n @param paths Swap paths from token in to token out, specifying exact amounts in\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data required for the query\n @return pathAmountsOut Calculated amounts of output tokens corresponding to the last step of each given path\n @return tokensOut Output token addresses\n @return amountsOut Calculated amounts of output tokens to be received, ordered by output token address"},"functionSelector":"e3b5dff4","id":1713,"implemented":false,"kind":"function","modifiers":[],"name":"querySwapExactIn","nameLocation":"4745:16:16","nodeType":"FunctionDefinition","parameters":{"id":1702,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1697,"mutability":"mutable","name":"paths","nameLocation":"4802:5:16","nodeType":"VariableDeclaration","scope":1713,"src":"4771:36:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountIn_$1608_memory_ptr_$dyn_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn[]"},"typeName":{"baseType":{"id":1695,"nodeType":"UserDefinedTypeName","pathNode":{"id":1694,"name":"SwapPathExactAmountIn","nameLocations":["4771:21:16"],"nodeType":"IdentifierPath","referencedDeclaration":1608,"src":"4771:21:16"},"referencedDeclaration":1608,"src":"4771:21:16","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountIn_$1608_storage_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn"}},"id":1696,"nodeType":"ArrayTypeName","src":"4771:23:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountIn_$1608_storage_$dyn_storage_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn[]"}},"visibility":"internal"},{"constant":false,"id":1699,"mutability":"mutable","name":"sender","nameLocation":"4825:6:16","nodeType":"VariableDeclaration","scope":1713,"src":"4817:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1698,"name":"address","nodeType":"ElementaryTypeName","src":"4817:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1701,"mutability":"mutable","name":"userData","nameLocation":"4856:8:16","nodeType":"VariableDeclaration","scope":1713,"src":"4841:23:16","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1700,"name":"bytes","nodeType":"ElementaryTypeName","src":"4841:5:16","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4761:109:16"},"returnParameters":{"id":1712,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1705,"mutability":"mutable","name":"pathAmountsOut","nameLocation":"4906:14:16","nodeType":"VariableDeclaration","scope":1713,"src":"4889:31:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1703,"name":"uint256","nodeType":"ElementaryTypeName","src":"4889:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1704,"nodeType":"ArrayTypeName","src":"4889:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1708,"mutability":"mutable","name":"tokensOut","nameLocation":"4939:9:16","nodeType":"VariableDeclaration","scope":1713,"src":"4922:26:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1706,"name":"address","nodeType":"ElementaryTypeName","src":"4922:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1707,"nodeType":"ArrayTypeName","src":"4922:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":1711,"mutability":"mutable","name":"amountsOut","nameLocation":"4967:10:16","nodeType":"VariableDeclaration","scope":1713,"src":"4950:27:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1709,"name":"uint256","nodeType":"ElementaryTypeName","src":"4950:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1710,"nodeType":"ArrayTypeName","src":"4950:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4888:90:16"},"scope":1735,"src":"4736:243:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1714,"nodeType":"StructuredDocumentation","src":"4985:731:16","text":" @notice Queries a swap operation involving multiple paths (steps), specifying exact output token amounts.\n @dev Max amounts in specified in the paths are ignored.\n @param paths Swap paths from token in to token out, specifying exact amounts out\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data required for the query\n @return pathAmountsIn Calculated amounts of input tokens corresponding to the last step of each given path\n @return tokensIn Input token addresses\n @return amountsIn Calculated amounts of input tokens to be received, ordered by input token address"},"functionSelector":"2950286e","id":1734,"implemented":false,"kind":"function","modifiers":[],"name":"querySwapExactOut","nameLocation":"5730:17:16","nodeType":"FunctionDefinition","parameters":{"id":1723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1718,"mutability":"mutable","name":"paths","nameLocation":"5789:5:16","nodeType":"VariableDeclaration","scope":1734,"src":"5757:37:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountOut_$1620_memory_ptr_$dyn_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut[]"},"typeName":{"baseType":{"id":1716,"nodeType":"UserDefinedTypeName","pathNode":{"id":1715,"name":"SwapPathExactAmountOut","nameLocations":["5757:22:16"],"nodeType":"IdentifierPath","referencedDeclaration":1620,"src":"5757:22:16"},"referencedDeclaration":1620,"src":"5757:22:16","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountOut_$1620_storage_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut"}},"id":1717,"nodeType":"ArrayTypeName","src":"5757:24:16","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountOut_$1620_storage_$dyn_storage_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut[]"}},"visibility":"internal"},{"constant":false,"id":1720,"mutability":"mutable","name":"sender","nameLocation":"5812:6:16","nodeType":"VariableDeclaration","scope":1734,"src":"5804:14:16","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1719,"name":"address","nodeType":"ElementaryTypeName","src":"5804:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1722,"mutability":"mutable","name":"userData","nameLocation":"5843:8:16","nodeType":"VariableDeclaration","scope":1734,"src":"5828:23:16","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1721,"name":"bytes","nodeType":"ElementaryTypeName","src":"5828:5:16","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5747:110:16"},"returnParameters":{"id":1733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1726,"mutability":"mutable","name":"pathAmountsIn","nameLocation":"5893:13:16","nodeType":"VariableDeclaration","scope":1734,"src":"5876:30:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1724,"name":"uint256","nodeType":"ElementaryTypeName","src":"5876:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1725,"nodeType":"ArrayTypeName","src":"5876:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1729,"mutability":"mutable","name":"tokensIn","nameLocation":"5925:8:16","nodeType":"VariableDeclaration","scope":1734,"src":"5908:25:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":1727,"name":"address","nodeType":"ElementaryTypeName","src":"5908:7:16","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":1728,"nodeType":"ArrayTypeName","src":"5908:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":1732,"mutability":"mutable","name":"amountsIn","nameLocation":"5952:9:16","nodeType":"VariableDeclaration","scope":1734,"src":"5935:26:16","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1730,"name":"uint256","nodeType":"ElementaryTypeName","src":"5935:7:16","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1731,"nodeType":"ArrayTypeName","src":"5935:9:16","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"5875:87:16"},"scope":1735,"src":"5721:242:16","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1736,"src":"304:5661:16","usedErrors":[],"usedEvents":[]}],"src":"46:5920:16"},"id":16},"@balancer-labs/v3-interfaces/contracts/vault/IBufferRouter.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBufferRouter.sol","exportedSymbols":{"AddLiquidityKind":[4807],"IBufferRouter":[1816],"IERC4626":[39833],"RemoveLiquidityKind":[4828],"SwapKind":[4735]},"id":1817,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1737,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:17"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":1739,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1817,"sourceUnit":39834,"src":"72:75:17","symbolAliases":[{"foreign":{"id":1738,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39833,"src":"81:8:17","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":1743,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1817,"sourceUnit":4872,"src":"149:83:17","symbolAliases":[{"foreign":{"id":1740,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4807,"src":"158:16:17","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1741,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4828,"src":"176:19:17","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1742,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"197:8:17","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IBufferRouter","contractDependencies":[],"contractKind":"interface","documentation":{"id":1744,"nodeType":"StructuredDocumentation","src":"234:84:17","text":"@notice User-friendly interface for Buffer liquidity operations with the Vault."},"fullyImplemented":false,"id":1816,"linearizedBaseContracts":[1816],"name":"IBufferRouter","nameLocation":"328:13:17","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1745,"nodeType":"StructuredDocumentation","src":"569:1109:17","text":" @notice Adds liquidity for the first time to an internal ERC4626 buffer in the Vault.\n @dev Calling this method binds the wrapped token to its underlying asset internally; the asset in the wrapper\n cannot change afterwards, or every other operation on that wrapper (add / remove / wrap / unwrap) will fail.\n To avoid unexpected behavior, always initialize buffers before creating or initializing any pools that contain\n the wrapped tokens to be used with them.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param exactAmountUnderlyingIn Amount of underlying tokens that will be deposited into the buffer\n @param exactAmountWrappedIn Amount of wrapped tokens that will be deposited into the buffer\n @param minIssuedShares Minimum amount of shares to receive from the buffer, expressed in underlying token\n native decimals\n @return issuedShares the amount of tokens sharesOwner has in the buffer, denominated in underlying tokens\n (This is the BPT of the Vault's internal ERC4626 buffer.)"},"functionSelector":"b365a3c2","id":1759,"implemented":false,"kind":"function","modifiers":[],"name":"initializeBuffer","nameLocation":"1692:16:17","nodeType":"FunctionDefinition","parameters":{"id":1755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1748,"mutability":"mutable","name":"wrappedToken","nameLocation":"1727:12:17","nodeType":"VariableDeclaration","scope":1759,"src":"1718:21:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":1747,"nodeType":"UserDefinedTypeName","pathNode":{"id":1746,"name":"IERC4626","nameLocations":["1718:8:17"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"1718:8:17"},"referencedDeclaration":39833,"src":"1718:8:17","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1750,"mutability":"mutable","name":"exactAmountUnderlyingIn","nameLocation":"1757:23:17","nodeType":"VariableDeclaration","scope":1759,"src":"1749:31:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1749,"name":"uint256","nodeType":"ElementaryTypeName","src":"1749:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1752,"mutability":"mutable","name":"exactAmountWrappedIn","nameLocation":"1798:20:17","nodeType":"VariableDeclaration","scope":1759,"src":"1790:28:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1751,"name":"uint256","nodeType":"ElementaryTypeName","src":"1790:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1754,"mutability":"mutable","name":"minIssuedShares","nameLocation":"1836:15:17","nodeType":"VariableDeclaration","scope":1759,"src":"1828:23:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1753,"name":"uint256","nodeType":"ElementaryTypeName","src":"1828:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1708:149:17"},"returnParameters":{"id":1758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1757,"mutability":"mutable","name":"issuedShares","nameLocation":"1884:12:17","nodeType":"VariableDeclaration","scope":1759,"src":"1876:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1756,"name":"uint256","nodeType":"ElementaryTypeName","src":"1876:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1875:22:17"},"scope":1816,"src":"1683:215:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1760,"nodeType":"StructuredDocumentation","src":"1904:1064:17","text":" @notice Adds liquidity proportionally to an internal ERC4626 buffer in the Vault.\n @dev Requires the buffer to be initialized beforehand. Restricting adds to proportional simplifies the Vault\n code, avoiding rounding issues and minimum amount checks. It is possible to add unbalanced by interacting\n with the wrapper contract directly.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param maxAmountUnderlyingIn Maximum amount of underlying tokens to add to the buffer. It is expressed in\n underlying token native decimals\n @param maxAmountWrappedIn Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n token native decimals\n @param exactSharesToIssue The amount of shares that `sharesOwner` wants to add to the buffer, in underlying\n token decimals\n @return amountUnderlyingIn Amount of underlying tokens deposited into the buffer\n @return amountWrappedIn Amount of wrapped tokens deposited into the buffer"},"functionSelector":"502383f4","id":1776,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityToBuffer","nameLocation":"2982:20:17","nodeType":"FunctionDefinition","parameters":{"id":1770,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1763,"mutability":"mutable","name":"wrappedToken","nameLocation":"3021:12:17","nodeType":"VariableDeclaration","scope":1776,"src":"3012:21:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":1762,"nodeType":"UserDefinedTypeName","pathNode":{"id":1761,"name":"IERC4626","nameLocations":["3012:8:17"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"3012:8:17"},"referencedDeclaration":39833,"src":"3012:8:17","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1765,"mutability":"mutable","name":"maxAmountUnderlyingIn","nameLocation":"3051:21:17","nodeType":"VariableDeclaration","scope":1776,"src":"3043:29:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1764,"name":"uint256","nodeType":"ElementaryTypeName","src":"3043:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1767,"mutability":"mutable","name":"maxAmountWrappedIn","nameLocation":"3090:18:17","nodeType":"VariableDeclaration","scope":1776,"src":"3082:26:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1766,"name":"uint256","nodeType":"ElementaryTypeName","src":"3082:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1769,"mutability":"mutable","name":"exactSharesToIssue","nameLocation":"3126:18:17","nodeType":"VariableDeclaration","scope":1776,"src":"3118:26:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1768,"name":"uint256","nodeType":"ElementaryTypeName","src":"3118:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3002:148:17"},"returnParameters":{"id":1775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1772,"mutability":"mutable","name":"amountUnderlyingIn","nameLocation":"3177:18:17","nodeType":"VariableDeclaration","scope":1776,"src":"3169:26:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1771,"name":"uint256","nodeType":"ElementaryTypeName","src":"3169:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1774,"mutability":"mutable","name":"amountWrappedIn","nameLocation":"3205:15:17","nodeType":"VariableDeclaration","scope":1776,"src":"3197:23:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1773,"name":"uint256","nodeType":"ElementaryTypeName","src":"3197:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3168:53:17"},"scope":1816,"src":"2973:249:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1777,"nodeType":"StructuredDocumentation","src":"3228:504:17","text":" @notice Queries an `initializeBuffer` operation without actually executing it.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param exactAmountUnderlyingIn Amount of underlying tokens that the sender wishes to deposit into the buffer\n @param exactAmountWrappedIn Amount of wrapped tokens that the sender wishes to deposit into the buffer\n @return issuedShares The amount of shares that would be minted, in underlying token decimals"},"functionSelector":"e0fefe35","id":1789,"implemented":false,"kind":"function","modifiers":[],"name":"queryInitializeBuffer","nameLocation":"3746:21:17","nodeType":"FunctionDefinition","parameters":{"id":1785,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1780,"mutability":"mutable","name":"wrappedToken","nameLocation":"3786:12:17","nodeType":"VariableDeclaration","scope":1789,"src":"3777:21:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":1779,"nodeType":"UserDefinedTypeName","pathNode":{"id":1778,"name":"IERC4626","nameLocations":["3777:8:17"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"3777:8:17"},"referencedDeclaration":39833,"src":"3777:8:17","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1782,"mutability":"mutable","name":"exactAmountUnderlyingIn","nameLocation":"3816:23:17","nodeType":"VariableDeclaration","scope":1789,"src":"3808:31:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1781,"name":"uint256","nodeType":"ElementaryTypeName","src":"3808:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1784,"mutability":"mutable","name":"exactAmountWrappedIn","nameLocation":"3857:20:17","nodeType":"VariableDeclaration","scope":1789,"src":"3849:28:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1783,"name":"uint256","nodeType":"ElementaryTypeName","src":"3849:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3767:116:17"},"returnParameters":{"id":1788,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1787,"mutability":"mutable","name":"issuedShares","nameLocation":"3910:12:17","nodeType":"VariableDeclaration","scope":1789,"src":"3902:20:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1786,"name":"uint256","nodeType":"ElementaryTypeName","src":"3902:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3901:22:17"},"scope":1816,"src":"3737:187:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1790,"nodeType":"StructuredDocumentation","src":"3930:485:17","text":" @notice Queries an `addLiquidityToBuffer` operation without actually executing it.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param exactSharesToIssue The amount of shares that would be minted, in underlying token decimals\n @return amountUnderlyingIn Amount of underlying tokens that would be deposited into the buffer\n @return amountWrappedIn Amount of wrapped tokens that would be deposited into the buffer"},"functionSelector":"662727cc","id":1802,"implemented":false,"kind":"function","modifiers":[],"name":"queryAddLiquidityToBuffer","nameLocation":"4429:25:17","nodeType":"FunctionDefinition","parameters":{"id":1796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1793,"mutability":"mutable","name":"wrappedToken","nameLocation":"4473:12:17","nodeType":"VariableDeclaration","scope":1802,"src":"4464:21:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":1792,"nodeType":"UserDefinedTypeName","pathNode":{"id":1791,"name":"IERC4626","nameLocations":["4464:8:17"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"4464:8:17"},"referencedDeclaration":39833,"src":"4464:8:17","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1795,"mutability":"mutable","name":"exactSharesToIssue","nameLocation":"4503:18:17","nodeType":"VariableDeclaration","scope":1802,"src":"4495:26:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1794,"name":"uint256","nodeType":"ElementaryTypeName","src":"4495:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4454:73:17"},"returnParameters":{"id":1801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1798,"mutability":"mutable","name":"amountUnderlyingIn","nameLocation":"4554:18:17","nodeType":"VariableDeclaration","scope":1802,"src":"4546:26:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1797,"name":"uint256","nodeType":"ElementaryTypeName","src":"4546:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1800,"mutability":"mutable","name":"amountWrappedIn","nameLocation":"4582:15:17","nodeType":"VariableDeclaration","scope":1802,"src":"4574:23:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1799,"name":"uint256","nodeType":"ElementaryTypeName","src":"4574:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4545:53:17"},"scope":1816,"src":"4420:179:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1803,"nodeType":"StructuredDocumentation","src":"4605:505:17","text":" @notice Queries an `removeLiquidityFromBuffer` operation without actually executing it.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param exactSharesToRemove The amount of shares that would be burned, in underlying token decimals\n @return removedUnderlyingBalanceOut Amount of underlying tokens that would be removed from the buffer\n @return removedWrappedBalanceOut Amount of wrapped tokens that would be removed from the buffer"},"functionSelector":"13f7bb4d","id":1815,"implemented":false,"kind":"function","modifiers":[],"name":"queryRemoveLiquidityFromBuffer","nameLocation":"5124:30:17","nodeType":"FunctionDefinition","parameters":{"id":1809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1806,"mutability":"mutable","name":"wrappedToken","nameLocation":"5173:12:17","nodeType":"VariableDeclaration","scope":1815,"src":"5164:21:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":1805,"nodeType":"UserDefinedTypeName","pathNode":{"id":1804,"name":"IERC4626","nameLocations":["5164:8:17"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"5164:8:17"},"referencedDeclaration":39833,"src":"5164:8:17","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":1808,"mutability":"mutable","name":"exactSharesToRemove","nameLocation":"5203:19:17","nodeType":"VariableDeclaration","scope":1815,"src":"5195:27:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1807,"name":"uint256","nodeType":"ElementaryTypeName","src":"5195:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5154:74:17"},"returnParameters":{"id":1814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1811,"mutability":"mutable","name":"removedUnderlyingBalanceOut","nameLocation":"5255:27:17","nodeType":"VariableDeclaration","scope":1815,"src":"5247:35:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1810,"name":"uint256","nodeType":"ElementaryTypeName","src":"5247:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1813,"mutability":"mutable","name":"removedWrappedBalanceOut","nameLocation":"5292:24:17","nodeType":"VariableDeclaration","scope":1815,"src":"5284:32:17","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1812,"name":"uint256","nodeType":"ElementaryTypeName","src":"5284:7:17","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5246:71:17"},"scope":1816,"src":"5115:203:17","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1817,"src":"318:5002:17","usedErrors":[],"usedEvents":[]}],"src":"46:5275:17"},"id":17},"@balancer-labs/v3-interfaces/contracts/vault/IERC20MultiTokenErrors.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IERC20MultiTokenErrors.sol","exportedSymbols":{"IERC20MultiTokenErrors":[1824]},"id":1825,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1818,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:18"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20MultiTokenErrors","contractDependencies":[],"contractKind":"interface","fullyImplemented":true,"id":1824,"linearizedBaseContracts":[1824],"name":"IERC20MultiTokenErrors","nameLocation":"82:22:18","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1819,"nodeType":"StructuredDocumentation","src":"111:177:18","text":" @notice The total supply of a pool token can't be lower than the absolute minimum.\n @param totalSupply The total supply value that was below the minimum"},"errorSelector":"d38d20fc","id":1823,"name":"PoolTotalSupplyTooLow","nameLocation":"299:21:18","nodeType":"ErrorDefinition","parameters":{"id":1822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1821,"mutability":"mutable","name":"totalSupply","nameLocation":"329:11:18","nodeType":"VariableDeclaration","scope":1823,"src":"321:19:18","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1820,"name":"uint256","nodeType":"ElementaryTypeName","src":"321:7:18","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"320:21:18"},"src":"293:49:18"}],"scope":1825,"src":"72:272:18","usedErrors":[1823],"usedEvents":[]}],"src":"46:299:18"},"id":18},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","exportedSymbols":{"AddLiquidityKind":[4807],"AfterSwapParams":[4801],"HookFlags":[4627],"IHooks":[2026],"LiquidityManagement":[4580],"PoolSwapParams":[4772],"RemoveLiquidityKind":[4828],"SwapKind":[4735],"TokenConfig":[4694]},"id":2027,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":1826,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:19"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":1835,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2027,"sourceUnit":4872,"src":"289:193:19","symbolAliases":[{"foreign":{"id":1827,"name":"TokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4694,"src":"302:11:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1828,"name":"LiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4580,"src":"319:19:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1829,"name":"PoolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4772,"src":"344:14:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1830,"name":"AfterSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4801,"src":"364:15:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1831,"name":"HookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4627,"src":"385:9:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1832,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4807,"src":"400:16:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1833,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4828,"src":"422:19:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":1834,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"447:8:19","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IHooks","contractDependencies":[],"contractKind":"interface","documentation":{"id":1836,"nodeType":"StructuredDocumentation","src":"484:490:19","text":" @notice Interface for pool hooks.\n @dev Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that\n they are called in the correct order, and with the correct arguments. To maintain this security, these functions\n should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`,\n then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)"},"fullyImplemented":false,"id":2026,"linearizedBaseContracts":[2026],"name":"IHooks","nameLocation":"985:6:19","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1837,"nodeType":"StructuredDocumentation","src":"1205:769:19","text":" @notice Hook executed when a pool is registered with a non-zero hooks contract.\n @dev Returns true if registration was successful, and false to revert the pool registration.\n Make sure this function is properly implemented (e.g. check the factory, and check that the\n given pool is from the factory). The Vault address will be msg.sender.\n @param factory Address of the pool factory (contract deploying the pool)\n @param pool Address of the pool\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param liquidityManagement Liquidity management flags indicating which functions are enabled\n @return success True if the hook allowed the registration, false otherwise"},"functionSelector":"0b89f182","id":1853,"implemented":false,"kind":"function","modifiers":[],"name":"onRegister","nameLocation":"1988:10:19","nodeType":"FunctionDefinition","parameters":{"id":1849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1839,"mutability":"mutable","name":"factory","nameLocation":"2016:7:19","nodeType":"VariableDeclaration","scope":1853,"src":"2008:15:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1838,"name":"address","nodeType":"ElementaryTypeName","src":"2008:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1841,"mutability":"mutable","name":"pool","nameLocation":"2041:4:19","nodeType":"VariableDeclaration","scope":1853,"src":"2033:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1840,"name":"address","nodeType":"ElementaryTypeName","src":"2033:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1845,"mutability":"mutable","name":"tokenConfig","nameLocation":"2076:11:19","nodeType":"VariableDeclaration","scope":1853,"src":"2055:32:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":1843,"nodeType":"UserDefinedTypeName","pathNode":{"id":1842,"name":"TokenConfig","nameLocations":["2055:11:19"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"2055:11:19"},"referencedDeclaration":4694,"src":"2055:11:19","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":1844,"nodeType":"ArrayTypeName","src":"2055:13:19","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":1848,"mutability":"mutable","name":"liquidityManagement","nameLocation":"2126:19:19","nodeType":"VariableDeclaration","scope":1853,"src":"2097:48:19","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":1847,"nodeType":"UserDefinedTypeName","pathNode":{"id":1846,"name":"LiquidityManagement","nameLocations":["2097:19:19"],"nodeType":"IdentifierPath","referencedDeclaration":4580,"src":"2097:19:19"},"referencedDeclaration":4580,"src":"2097:19:19","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"1998:153:19"},"returnParameters":{"id":1852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1851,"mutability":"mutable","name":"success","nameLocation":"2175:7:19","nodeType":"VariableDeclaration","scope":1853,"src":"2170:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1850,"name":"bool","nodeType":"ElementaryTypeName","src":"2170:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2169:14:19"},"scope":2026,"src":"1979:205:19","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1854,"nodeType":"StructuredDocumentation","src":"2190:412:19","text":" @notice Return the set of hooks implemented by the contract.\n @dev The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined\n (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero).\n `onRegister` is the only \"mandatory\" hook.\n @return hookFlags Flags indicating which hooks the contract supports"},"functionSelector":"d77153a7","id":1860,"implemented":false,"kind":"function","modifiers":[],"name":"getHookFlags","nameLocation":"2616:12:19","nodeType":"FunctionDefinition","parameters":{"id":1855,"nodeType":"ParameterList","parameters":[],"src":"2628:2:19"},"returnParameters":{"id":1859,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1858,"mutability":"mutable","name":"hookFlags","nameLocation":"2671:9:19","nodeType":"VariableDeclaration","scope":1860,"src":"2654:26:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_memory_ptr","typeString":"struct HookFlags"},"typeName":{"id":1857,"nodeType":"UserDefinedTypeName","pathNode":{"id":1856,"name":"HookFlags","nameLocations":["2654:9:19"],"nodeType":"IdentifierPath","referencedDeclaration":4627,"src":"2654:9:19"},"referencedDeclaration":4627,"src":"2654:9:19","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_storage_ptr","typeString":"struct HookFlags"}},"visibility":"internal"}],"src":"2653:28:19"},"scope":2026,"src":"2607:75:19","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1861,"nodeType":"StructuredDocumentation","src":"2897:484:19","text":" @notice Hook executed before pool initialization.\n @dev Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param exactAmountsIn Exact amounts of input tokens\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with initialization"},"functionSelector":"1c149e28","id":1871,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeInitialize","nameLocation":"3395:18:19","nodeType":"FunctionDefinition","parameters":{"id":1867,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1864,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"3431:14:19","nodeType":"VariableDeclaration","scope":1871,"src":"3414:31:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1862,"name":"uint256","nodeType":"ElementaryTypeName","src":"3414:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1863,"nodeType":"ArrayTypeName","src":"3414:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1866,"mutability":"mutable","name":"userData","nameLocation":"3460:8:19","nodeType":"VariableDeclaration","scope":1871,"src":"3447:21:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1865,"name":"bytes","nodeType":"ElementaryTypeName","src":"3447:5:19","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3413:56:19"},"returnParameters":{"id":1870,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1869,"mutability":"mutable","name":"success","nameLocation":"3493:7:19","nodeType":"VariableDeclaration","scope":1871,"src":"3488:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1868,"name":"bool","nodeType":"ElementaryTypeName","src":"3488:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3487:14:19"},"scope":2026,"src":"3386:116:19","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1872,"nodeType":"StructuredDocumentation","src":"3508:563:19","text":" @notice Hook to be executed after pool initialization.\n @dev Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param exactAmountsIn Exact amounts of input tokens\n @param bptAmountOut Amount of pool tokens minted during initialization\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool accepts the initialization results"},"functionSelector":"38be241d","id":1884,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterInitialize","nameLocation":"4085:17:19","nodeType":"FunctionDefinition","parameters":{"id":1880,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1875,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"4129:14:19","nodeType":"VariableDeclaration","scope":1884,"src":"4112:31:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1873,"name":"uint256","nodeType":"ElementaryTypeName","src":"4112:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1874,"nodeType":"ArrayTypeName","src":"4112:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1877,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4161:12:19","nodeType":"VariableDeclaration","scope":1884,"src":"4153:20:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1876,"name":"uint256","nodeType":"ElementaryTypeName","src":"4153:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1879,"mutability":"mutable","name":"userData","nameLocation":"4196:8:19","nodeType":"VariableDeclaration","scope":1884,"src":"4183:21:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1878,"name":"bytes","nodeType":"ElementaryTypeName","src":"4183:5:19","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4102:108:19"},"returnParameters":{"id":1883,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1882,"mutability":"mutable","name":"success","nameLocation":"4234:7:19","nodeType":"VariableDeclaration","scope":1884,"src":"4229:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1881,"name":"bool","nodeType":"ElementaryTypeName","src":"4229:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4228:14:19"},"scope":2026,"src":"4076:167:19","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1885,"nodeType":"StructuredDocumentation","src":"4461:953:19","text":" @notice Hook to be executed before adding liquidity.\n @dev Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param maxAmountsInScaled18 Maximum amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"45421ec7","id":1907,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeAddLiquidity","nameLocation":"5428:20:19","nodeType":"FunctionDefinition","parameters":{"id":1903,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1887,"mutability":"mutable","name":"router","nameLocation":"5466:6:19","nodeType":"VariableDeclaration","scope":1907,"src":"5458:14:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1886,"name":"address","nodeType":"ElementaryTypeName","src":"5458:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1889,"mutability":"mutable","name":"pool","nameLocation":"5490:4:19","nodeType":"VariableDeclaration","scope":1907,"src":"5482:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1888,"name":"address","nodeType":"ElementaryTypeName","src":"5482:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1892,"mutability":"mutable","name":"kind","nameLocation":"5521:4:19","nodeType":"VariableDeclaration","scope":1907,"src":"5504:21:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},"typeName":{"id":1891,"nodeType":"UserDefinedTypeName","pathNode":{"id":1890,"name":"AddLiquidityKind","nameLocations":["5504:16:19"],"nodeType":"IdentifierPath","referencedDeclaration":4807,"src":"5504:16:19"},"referencedDeclaration":4807,"src":"5504:16:19","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1895,"mutability":"mutable","name":"maxAmountsInScaled18","nameLocation":"5552:20:19","nodeType":"VariableDeclaration","scope":1907,"src":"5535:37:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1893,"name":"uint256","nodeType":"ElementaryTypeName","src":"5535:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1894,"nodeType":"ArrayTypeName","src":"5535:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1897,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"5590:15:19","nodeType":"VariableDeclaration","scope":1907,"src":"5582:23:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1896,"name":"uint256","nodeType":"ElementaryTypeName","src":"5582:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1900,"mutability":"mutable","name":"balancesScaled18","nameLocation":"5632:16:19","nodeType":"VariableDeclaration","scope":1907,"src":"5615:33:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1898,"name":"uint256","nodeType":"ElementaryTypeName","src":"5615:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1899,"nodeType":"ArrayTypeName","src":"5615:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1902,"mutability":"mutable","name":"userData","nameLocation":"5671:8:19","nodeType":"VariableDeclaration","scope":1907,"src":"5658:21:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1901,"name":"bytes","nodeType":"ElementaryTypeName","src":"5658:5:19","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5448:237:19"},"returnParameters":{"id":1906,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1905,"mutability":"mutable","name":"success","nameLocation":"5709:7:19","nodeType":"VariableDeclaration","scope":1907,"src":"5704:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1904,"name":"bool","nodeType":"ElementaryTypeName","src":"5704:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5703:14:19"},"scope":2026,"src":"5419:299:19","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1908,"nodeType":"StructuredDocumentation","src":"5724:1250:19","text":" @notice Hook to be executed after adding liquidity.\n @dev Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated an add liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param amountsInScaled18 Actual amounts of tokens added, sorted in token registration order\n @param amountsInRaw Actual amounts of tokens added, sorted in token registration order\n @param bptAmountOut Amount of pool tokens minted\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Additional (optional) data provided by the user\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook"},"functionSelector":"976907cc","id":1936,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterAddLiquidity","nameLocation":"6988:19:19","nodeType":"FunctionDefinition","parameters":{"id":1929,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1910,"mutability":"mutable","name":"router","nameLocation":"7025:6:19","nodeType":"VariableDeclaration","scope":1936,"src":"7017:14:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1909,"name":"address","nodeType":"ElementaryTypeName","src":"7017:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1912,"mutability":"mutable","name":"pool","nameLocation":"7049:4:19","nodeType":"VariableDeclaration","scope":1936,"src":"7041:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1911,"name":"address","nodeType":"ElementaryTypeName","src":"7041:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1915,"mutability":"mutable","name":"kind","nameLocation":"7080:4:19","nodeType":"VariableDeclaration","scope":1936,"src":"7063:21:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},"typeName":{"id":1914,"nodeType":"UserDefinedTypeName","pathNode":{"id":1913,"name":"AddLiquidityKind","nameLocations":["7063:16:19"],"nodeType":"IdentifierPath","referencedDeclaration":4807,"src":"7063:16:19"},"referencedDeclaration":4807,"src":"7063:16:19","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1918,"mutability":"mutable","name":"amountsInScaled18","nameLocation":"7111:17:19","nodeType":"VariableDeclaration","scope":1936,"src":"7094:34:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1916,"name":"uint256","nodeType":"ElementaryTypeName","src":"7094:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1917,"nodeType":"ArrayTypeName","src":"7094:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1921,"mutability":"mutable","name":"amountsInRaw","nameLocation":"7155:12:19","nodeType":"VariableDeclaration","scope":1936,"src":"7138:29:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1919,"name":"uint256","nodeType":"ElementaryTypeName","src":"7138:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1920,"nodeType":"ArrayTypeName","src":"7138:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1923,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7185:12:19","nodeType":"VariableDeclaration","scope":1936,"src":"7177:20:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1922,"name":"uint256","nodeType":"ElementaryTypeName","src":"7177:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1926,"mutability":"mutable","name":"balancesScaled18","nameLocation":"7224:16:19","nodeType":"VariableDeclaration","scope":1936,"src":"7207:33:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1924,"name":"uint256","nodeType":"ElementaryTypeName","src":"7207:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1925,"nodeType":"ArrayTypeName","src":"7207:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1928,"mutability":"mutable","name":"userData","nameLocation":"7263:8:19","nodeType":"VariableDeclaration","scope":1936,"src":"7250:21:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1927,"name":"bytes","nodeType":"ElementaryTypeName","src":"7250:5:19","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7007:270:19"},"returnParameters":{"id":1935,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1931,"mutability":"mutable","name":"success","nameLocation":"7301:7:19","nodeType":"VariableDeclaration","scope":1936,"src":"7296:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1930,"name":"bool","nodeType":"ElementaryTypeName","src":"7296:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1934,"mutability":"mutable","name":"hookAdjustedAmountsInRaw","nameLocation":"7327:24:19","nodeType":"VariableDeclaration","scope":1936,"src":"7310:41:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1932,"name":"uint256","nodeType":"ElementaryTypeName","src":"7310:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1933,"nodeType":"ArrayTypeName","src":"7310:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7295:57:19"},"scope":2026,"src":"6979:374:19","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1937,"nodeType":"StructuredDocumentation","src":"7572:992:19","text":" @notice Hook to be executed before removing liquidity.\n @dev Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The type of remove liquidity operation (e.g., proportional, custom)\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Optional, arbitrary data sent with the encoded request\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"ba5f9f40","id":1959,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeRemoveLiquidity","nameLocation":"8578:23:19","nodeType":"FunctionDefinition","parameters":{"id":1955,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1939,"mutability":"mutable","name":"router","nameLocation":"8619:6:19","nodeType":"VariableDeclaration","scope":1959,"src":"8611:14:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1938,"name":"address","nodeType":"ElementaryTypeName","src":"8611:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1941,"mutability":"mutable","name":"pool","nameLocation":"8643:4:19","nodeType":"VariableDeclaration","scope":1959,"src":"8635:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1940,"name":"address","nodeType":"ElementaryTypeName","src":"8635:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1944,"mutability":"mutable","name":"kind","nameLocation":"8677:4:19","nodeType":"VariableDeclaration","scope":1959,"src":"8657:24:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":1943,"nodeType":"UserDefinedTypeName","pathNode":{"id":1942,"name":"RemoveLiquidityKind","nameLocations":["8657:19:19"],"nodeType":"IdentifierPath","referencedDeclaration":4828,"src":"8657:19:19"},"referencedDeclaration":4828,"src":"8657:19:19","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1946,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"8699:14:19","nodeType":"VariableDeclaration","scope":1959,"src":"8691:22:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1945,"name":"uint256","nodeType":"ElementaryTypeName","src":"8691:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1949,"mutability":"mutable","name":"minAmountsOutScaled18","nameLocation":"8740:21:19","nodeType":"VariableDeclaration","scope":1959,"src":"8723:38:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1947,"name":"uint256","nodeType":"ElementaryTypeName","src":"8723:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1948,"nodeType":"ArrayTypeName","src":"8723:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1952,"mutability":"mutable","name":"balancesScaled18","nameLocation":"8788:16:19","nodeType":"VariableDeclaration","scope":1959,"src":"8771:33:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1950,"name":"uint256","nodeType":"ElementaryTypeName","src":"8771:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1951,"nodeType":"ArrayTypeName","src":"8771:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1954,"mutability":"mutable","name":"userData","nameLocation":"8827:8:19","nodeType":"VariableDeclaration","scope":1959,"src":"8814:21:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1953,"name":"bytes","nodeType":"ElementaryTypeName","src":"8814:5:19","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8601:240:19"},"returnParameters":{"id":1958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1957,"mutability":"mutable","name":"success","nameLocation":"8865:7:19","nodeType":"VariableDeclaration","scope":1959,"src":"8860:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1956,"name":"bool","nodeType":"ElementaryTypeName","src":"8860:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8859:14:19"},"scope":2026,"src":"8569:305:19","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1960,"nodeType":"StructuredDocumentation","src":"8880:1276:19","text":" @notice Hook to be executed after removing liquidity.\n @dev Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param router The address (usually a router contract) that initiated a remove liquidity operation on the Vault\n @param pool Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\n @param kind The type of remove liquidity operation (e.g., proportional, custom)\n @param bptAmountIn Amount of pool tokens to burn\n @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Additional (optional) data provided by the user\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook"},"functionSelector":"2754888d","id":1988,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterRemoveLiquidity","nameLocation":"10170:22:19","nodeType":"FunctionDefinition","parameters":{"id":1981,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1962,"mutability":"mutable","name":"router","nameLocation":"10210:6:19","nodeType":"VariableDeclaration","scope":1988,"src":"10202:14:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1961,"name":"address","nodeType":"ElementaryTypeName","src":"10202:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1964,"mutability":"mutable","name":"pool","nameLocation":"10234:4:19","nodeType":"VariableDeclaration","scope":1988,"src":"10226:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1963,"name":"address","nodeType":"ElementaryTypeName","src":"10226:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1967,"mutability":"mutable","name":"kind","nameLocation":"10268:4:19","nodeType":"VariableDeclaration","scope":1988,"src":"10248:24:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":1966,"nodeType":"UserDefinedTypeName","pathNode":{"id":1965,"name":"RemoveLiquidityKind","nameLocations":["10248:19:19"],"nodeType":"IdentifierPath","referencedDeclaration":4828,"src":"10248:19:19"},"referencedDeclaration":4828,"src":"10248:19:19","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":1969,"mutability":"mutable","name":"bptAmountIn","nameLocation":"10290:11:19","nodeType":"VariableDeclaration","scope":1988,"src":"10282:19:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1968,"name":"uint256","nodeType":"ElementaryTypeName","src":"10282:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1972,"mutability":"mutable","name":"amountsOutScaled18","nameLocation":"10328:18:19","nodeType":"VariableDeclaration","scope":1988,"src":"10311:35:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1970,"name":"uint256","nodeType":"ElementaryTypeName","src":"10311:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1971,"nodeType":"ArrayTypeName","src":"10311:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1975,"mutability":"mutable","name":"amountsOutRaw","nameLocation":"10373:13:19","nodeType":"VariableDeclaration","scope":1988,"src":"10356:30:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1973,"name":"uint256","nodeType":"ElementaryTypeName","src":"10356:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1974,"nodeType":"ArrayTypeName","src":"10356:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1978,"mutability":"mutable","name":"balancesScaled18","nameLocation":"10413:16:19","nodeType":"VariableDeclaration","scope":1988,"src":"10396:33:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1976,"name":"uint256","nodeType":"ElementaryTypeName","src":"10396:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1977,"nodeType":"ArrayTypeName","src":"10396:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":1980,"mutability":"mutable","name":"userData","nameLocation":"10452:8:19","nodeType":"VariableDeclaration","scope":1988,"src":"10439:21:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1979,"name":"bytes","nodeType":"ElementaryTypeName","src":"10439:5:19","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"10192:274:19"},"returnParameters":{"id":1987,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1983,"mutability":"mutable","name":"success","nameLocation":"10490:7:19","nodeType":"VariableDeclaration","scope":1988,"src":"10485:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1982,"name":"bool","nodeType":"ElementaryTypeName","src":"10485:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":1986,"mutability":"mutable","name":"hookAdjustedAmountsOutRaw","nameLocation":"10516:25:19","nodeType":"VariableDeclaration","scope":1988,"src":"10499:42:19","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":1984,"name":"uint256","nodeType":"ElementaryTypeName","src":"10499:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1985,"nodeType":"ArrayTypeName","src":"10499:9:19","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10484:58:19"},"scope":2026,"src":"10161:382:19","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1989,"nodeType":"StructuredDocumentation","src":"10753:556:19","text":" @notice Called before a swap to give the Pool an opportunity to perform actions.\n @dev Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the\n `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see PoolSwapParams for struct definition)\n @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n @return success True if the pool wishes to proceed with settlement"},"functionSelector":"5211fa77","id":1999,"implemented":false,"kind":"function","modifiers":[],"name":"onBeforeSwap","nameLocation":"11323:12:19","nodeType":"FunctionDefinition","parameters":{"id":1995,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1992,"mutability":"mutable","name":"params","nameLocation":"11360:6:19","nodeType":"VariableDeclaration","scope":1999,"src":"11336:30:19","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":1991,"nodeType":"UserDefinedTypeName","pathNode":{"id":1990,"name":"PoolSwapParams","nameLocations":["11336:14:19"],"nodeType":"IdentifierPath","referencedDeclaration":4772,"src":"11336:14:19"},"referencedDeclaration":4772,"src":"11336:14:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":1994,"mutability":"mutable","name":"pool","nameLocation":"11376:4:19","nodeType":"VariableDeclaration","scope":1999,"src":"11368:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1993,"name":"address","nodeType":"ElementaryTypeName","src":"11368:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11335:46:19"},"returnParameters":{"id":1998,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1997,"mutability":"mutable","name":"success","nameLocation":"11405:7:19","nodeType":"VariableDeclaration","scope":1999,"src":"11400:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1996,"name":"bool","nodeType":"ElementaryTypeName","src":"11400:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11399:14:19"},"scope":2026,"src":"11314:100:19","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2000,"nodeType":"StructuredDocumentation","src":"11420:671:19","text":" @notice Called after a swap to perform further actions once the balances have been updated by the swap.\n @dev Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore\n `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should\n use the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see above for struct definition)\n @return success True if the pool wishes to proceed with settlement\n @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook"},"functionSelector":"18b6eb55","id":2010,"implemented":false,"kind":"function","modifiers":[],"name":"onAfterSwap","nameLocation":"12105:11:19","nodeType":"FunctionDefinition","parameters":{"id":2004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2003,"mutability":"mutable","name":"params","nameLocation":"12151:6:19","nodeType":"VariableDeclaration","scope":2010,"src":"12126:31:19","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_calldata_ptr","typeString":"struct AfterSwapParams"},"typeName":{"id":2002,"nodeType":"UserDefinedTypeName","pathNode":{"id":2001,"name":"AfterSwapParams","nameLocations":["12126:15:19"],"nodeType":"IdentifierPath","referencedDeclaration":4801,"src":"12126:15:19"},"referencedDeclaration":4801,"src":"12126:15:19","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_storage_ptr","typeString":"struct AfterSwapParams"}},"visibility":"internal"}],"src":"12116:47:19"},"returnParameters":{"id":2009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2006,"mutability":"mutable","name":"success","nameLocation":"12187:7:19","nodeType":"VariableDeclaration","scope":2010,"src":"12182:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2005,"name":"bool","nodeType":"ElementaryTypeName","src":"12182:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2008,"mutability":"mutable","name":"hookAdjustedAmountCalculatedRaw","nameLocation":"12204:31:19","nodeType":"VariableDeclaration","scope":2010,"src":"12196:39:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2007,"name":"uint256","nodeType":"ElementaryTypeName","src":"12196:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12181:55:19"},"scope":2026,"src":"12096:141:19","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2011,"nodeType":"StructuredDocumentation","src":"12243:795:19","text":" @notice Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\n @dev Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use\n the `onlyVault` modifier to guarantee this is only called by the Vault.\n @param params Swap parameters (see PoolSwapParams for struct definition)\n @param pool Pool address, used to get pool information from the Vault (poolData, token config, etc.)\n @param staticSwapFeePercentage 18-decimal FP value of the static swap fee percentage, for reference\n @return success True if the pool wishes to proceed with settlement\n @return dynamicSwapFeePercentage Value of the swap fee percentage, as an 18-decimal FP value"},"functionSelector":"a0e8f5ac","id":2025,"implemented":false,"kind":"function","modifiers":[],"name":"onComputeDynamicSwapFeePercentage","nameLocation":"13052:33:19","nodeType":"FunctionDefinition","parameters":{"id":2019,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2014,"mutability":"mutable","name":"params","nameLocation":"13119:6:19","nodeType":"VariableDeclaration","scope":2025,"src":"13095:30:19","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":2013,"nodeType":"UserDefinedTypeName","pathNode":{"id":2012,"name":"PoolSwapParams","nameLocations":["13095:14:19"],"nodeType":"IdentifierPath","referencedDeclaration":4772,"src":"13095:14:19"},"referencedDeclaration":4772,"src":"13095:14:19","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":2016,"mutability":"mutable","name":"pool","nameLocation":"13143:4:19","nodeType":"VariableDeclaration","scope":2025,"src":"13135:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2015,"name":"address","nodeType":"ElementaryTypeName","src":"13135:7:19","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2018,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"13165:23:19","nodeType":"VariableDeclaration","scope":2025,"src":"13157:31:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2017,"name":"uint256","nodeType":"ElementaryTypeName","src":"13157:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13085:109:19"},"returnParameters":{"id":2024,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2021,"mutability":"mutable","name":"success","nameLocation":"13223:7:19","nodeType":"VariableDeclaration","scope":2025,"src":"13218:12:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2020,"name":"bool","nodeType":"ElementaryTypeName","src":"13218:4:19","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2023,"mutability":"mutable","name":"dynamicSwapFeePercentage","nameLocation":"13240:24:19","nodeType":"VariableDeclaration","scope":2025,"src":"13232:32:19","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2022,"name":"uint256","nodeType":"ElementaryTypeName","src":"13232:7:19","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13217:48:19"},"scope":2026,"src":"13043:223:19","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2027,"src":"975:12293:19","usedErrors":[],"usedEvents":[]}],"src":"46:13223:19"},"id":19},"@balancer-labs/v3-interfaces/contracts/vault/IPoolLiquidity.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IPoolLiquidity.sol","exportedSymbols":{"IPoolLiquidity":[2082]},"id":2083,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2028,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:20"},{"abstract":false,"baseContracts":[],"canonicalName":"IPoolLiquidity","contractDependencies":[],"contractKind":"interface","documentation":{"id":2029,"nodeType":"StructuredDocumentation","src":"72:55:20","text":"@notice Interface for custom liquidity operations."},"fullyImplemented":false,"id":2082,"linearizedBaseContracts":[2082],"name":"IPoolLiquidity","nameLocation":"137:14:20","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":2030,"nodeType":"StructuredDocumentation","src":"158:817:20","text":" @notice Add liquidity to the pool with a custom hook.\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param maxAmountsInScaled18 Maximum input amounts, sorted in token registration order\n @param minBptAmountOut Minimum amount of output pool tokens\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Arbitrary data sent with the encoded request\n @return amountsInScaled18 Input token amounts, sorted in token registration order\n @return bptAmountOut Calculated pool token amount to receive\n @return swapFeeAmountsScaled18 The amount of swap fees charged for each token\n @return returnData Arbitrary data with an encoded response from the pool"},"functionSelector":"e4c43663","id":2055,"implemented":false,"kind":"function","modifiers":[],"name":"onAddLiquidityCustom","nameLocation":"989:20:20","nodeType":"FunctionDefinition","parameters":{"id":2043,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2032,"mutability":"mutable","name":"router","nameLocation":"1027:6:20","nodeType":"VariableDeclaration","scope":2055,"src":"1019:14:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2031,"name":"address","nodeType":"ElementaryTypeName","src":"1019:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2035,"mutability":"mutable","name":"maxAmountsInScaled18","nameLocation":"1060:20:20","nodeType":"VariableDeclaration","scope":2055,"src":"1043:37:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2033,"name":"uint256","nodeType":"ElementaryTypeName","src":"1043:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2034,"nodeType":"ArrayTypeName","src":"1043:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2037,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"1098:15:20","nodeType":"VariableDeclaration","scope":2055,"src":"1090:23:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2036,"name":"uint256","nodeType":"ElementaryTypeName","src":"1090:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2040,"mutability":"mutable","name":"balancesScaled18","nameLocation":"1140:16:20","nodeType":"VariableDeclaration","scope":2055,"src":"1123:33:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2038,"name":"uint256","nodeType":"ElementaryTypeName","src":"1123:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2039,"nodeType":"ArrayTypeName","src":"1123:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2042,"mutability":"mutable","name":"userData","nameLocation":"1179:8:20","nodeType":"VariableDeclaration","scope":2055,"src":"1166:21:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2041,"name":"bytes","nodeType":"ElementaryTypeName","src":"1166:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1009:184:20"},"returnParameters":{"id":2054,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2046,"mutability":"mutable","name":"amountsInScaled18","nameLocation":"1258:17:20","nodeType":"VariableDeclaration","scope":2055,"src":"1241:34:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2044,"name":"uint256","nodeType":"ElementaryTypeName","src":"1241:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2045,"nodeType":"ArrayTypeName","src":"1241:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2048,"mutability":"mutable","name":"bptAmountOut","nameLocation":"1297:12:20","nodeType":"VariableDeclaration","scope":2055,"src":"1289:20:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2047,"name":"uint256","nodeType":"ElementaryTypeName","src":"1289:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2051,"mutability":"mutable","name":"swapFeeAmountsScaled18","nameLocation":"1340:22:20","nodeType":"VariableDeclaration","scope":2055,"src":"1323:39:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2049,"name":"uint256","nodeType":"ElementaryTypeName","src":"1323:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2050,"nodeType":"ArrayTypeName","src":"1323:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2053,"mutability":"mutable","name":"returnData","nameLocation":"1389:10:20","nodeType":"VariableDeclaration","scope":2055,"src":"1376:23:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2052,"name":"bytes","nodeType":"ElementaryTypeName","src":"1376:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1227:182:20"},"scope":2082,"src":"980:430:20","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2056,"nodeType":"StructuredDocumentation","src":"1416:827:20","text":" @notice Remove liquidity from the pool with a custom hook.\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOutScaled18 Minimum output amounts, sorted in token registration order\n @param balancesScaled18 Current pool balances, sorted in token registration order\n @param userData Arbitrary data sent with the encoded request\n @return bptAmountIn Calculated pool token amount to burn\n @return amountsOutScaled18 Amount of tokens to receive, sorted in token registration order\n @return swapFeeAmountsScaled18 The amount of swap fees charged for each token\n @return returnData Arbitrary data with an encoded response from the pool"},"functionSelector":"ab68e28c","id":2081,"implemented":false,"kind":"function","modifiers":[],"name":"onRemoveLiquidityCustom","nameLocation":"2257:23:20","nodeType":"FunctionDefinition","parameters":{"id":2069,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2058,"mutability":"mutable","name":"router","nameLocation":"2298:6:20","nodeType":"VariableDeclaration","scope":2081,"src":"2290:14:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2057,"name":"address","nodeType":"ElementaryTypeName","src":"2290:7:20","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2060,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"2322:14:20","nodeType":"VariableDeclaration","scope":2081,"src":"2314:22:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2059,"name":"uint256","nodeType":"ElementaryTypeName","src":"2314:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2063,"mutability":"mutable","name":"minAmountsOutScaled18","nameLocation":"2363:21:20","nodeType":"VariableDeclaration","scope":2081,"src":"2346:38:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2061,"name":"uint256","nodeType":"ElementaryTypeName","src":"2346:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2062,"nodeType":"ArrayTypeName","src":"2346:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2066,"mutability":"mutable","name":"balancesScaled18","nameLocation":"2411:16:20","nodeType":"VariableDeclaration","scope":2081,"src":"2394:33:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2064,"name":"uint256","nodeType":"ElementaryTypeName","src":"2394:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2065,"nodeType":"ArrayTypeName","src":"2394:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2068,"mutability":"mutable","name":"userData","nameLocation":"2450:8:20","nodeType":"VariableDeclaration","scope":2081,"src":"2437:21:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2067,"name":"bytes","nodeType":"ElementaryTypeName","src":"2437:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2280:184:20"},"returnParameters":{"id":2080,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2071,"mutability":"mutable","name":"bptAmountIn","nameLocation":"2520:11:20","nodeType":"VariableDeclaration","scope":2081,"src":"2512:19:20","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2070,"name":"uint256","nodeType":"ElementaryTypeName","src":"2512:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2074,"mutability":"mutable","name":"amountsOutScaled18","nameLocation":"2562:18:20","nodeType":"VariableDeclaration","scope":2081,"src":"2545:35:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2072,"name":"uint256","nodeType":"ElementaryTypeName","src":"2545:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2073,"nodeType":"ArrayTypeName","src":"2545:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2077,"mutability":"mutable","name":"swapFeeAmountsScaled18","nameLocation":"2611:22:20","nodeType":"VariableDeclaration","scope":2081,"src":"2594:39:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2075,"name":"uint256","nodeType":"ElementaryTypeName","src":"2594:7:20","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2076,"nodeType":"ArrayTypeName","src":"2594:9:20","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2079,"mutability":"mutable","name":"returnData","nameLocation":"2660:10:20","nodeType":"VariableDeclaration","scope":2081,"src":"2647:23:20","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2078,"name":"bytes","nodeType":"ElementaryTypeName","src":"2647:5:20","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2498:182:20"},"scope":2082,"src":"2248:433:20","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":2083,"src":"127:2556:20","usedErrors":[],"usedEvents":[]}],"src":"46:2638:20"},"id":20},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","exportedSymbols":{"IERC20":[40109],"IProtocolFeeController":[2420],"IVault":[3111]},"id":2421,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2084,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:21"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2086,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2421,"sourceUnit":40110,"src":"72:72:21","symbolAliases":[{"foreign":{"id":2085,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"81:6:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":2088,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2421,"sourceUnit":3112,"src":"146:38:21","symbolAliases":[{"foreign":{"id":2087,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"155:6:21","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IProtocolFeeController","contractDependencies":[],"contractKind":"interface","documentation":{"id":2089,"nodeType":"StructuredDocumentation","src":"186:80:21","text":"@notice Contract that handles protocol and pool creator fees for the Vault."},"fullyImplemented":false,"id":2420,"linearizedBaseContracts":[2420],"name":"IProtocolFeeController","nameLocation":"276:22:21","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":2090,"nodeType":"StructuredDocumentation","src":"305:157:21","text":" @notice Emitted when the protocol swap fee percentage is updated.\n @param swapFeePercentage The updated protocol swap fee percentage"},"eventSelector":"bf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d","id":2094,"name":"GlobalProtocolSwapFeePercentageChanged","nameLocation":"473:38:21","nodeType":"EventDefinition","parameters":{"id":2093,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2092,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"520:17:21","nodeType":"VariableDeclaration","scope":2094,"src":"512:25:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2091,"name":"uint256","nodeType":"ElementaryTypeName","src":"512:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"511:27:21"},"src":"467:72:21"},{"anonymous":false,"documentation":{"id":2095,"nodeType":"StructuredDocumentation","src":"545:160:21","text":" @notice Emitted when the protocol yield fee percentage is updated.\n @param yieldFeePercentage The updated protocol yield fee percentage"},"eventSelector":"48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f6","id":2099,"name":"GlobalProtocolYieldFeePercentageChanged","nameLocation":"716:39:21","nodeType":"EventDefinition","parameters":{"id":2098,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2097,"indexed":false,"mutability":"mutable","name":"yieldFeePercentage","nameLocation":"764:18:21","nodeType":"VariableDeclaration","scope":2099,"src":"756:26:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2096,"name":"uint256","nodeType":"ElementaryTypeName","src":"756:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"755:28:21"},"src":"710:74:21"},{"anonymous":false,"documentation":{"id":2100,"nodeType":"StructuredDocumentation","src":"790:245:21","text":" @notice Emitted when the protocol swap fee percentage is updated for a specific pool.\n @param pool The pool whose protocol swap fee will be changed\n @param swapFeePercentage The updated protocol swap fee percentage"},"eventSelector":"97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e","id":2106,"name":"ProtocolSwapFeePercentageChanged","nameLocation":"1046:32:21","nodeType":"EventDefinition","parameters":{"id":2105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2102,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1095:4:21","nodeType":"VariableDeclaration","scope":2106,"src":"1079:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2101,"name":"address","nodeType":"ElementaryTypeName","src":"1079:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2104,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1109:17:21","nodeType":"VariableDeclaration","scope":2106,"src":"1101:25:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2103,"name":"uint256","nodeType":"ElementaryTypeName","src":"1101:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1078:49:21"},"src":"1040:88:21"},{"anonymous":false,"documentation":{"id":2107,"nodeType":"StructuredDocumentation","src":"1134:249:21","text":" @notice Emitted when the protocol yield fee percentage is updated for a specific pool.\n @param pool The pool whose protocol yield fee will be changed\n @param yieldFeePercentage The updated protocol yield fee percentage"},"eventSelector":"af47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd","id":2113,"name":"ProtocolYieldFeePercentageChanged","nameLocation":"1394:33:21","nodeType":"EventDefinition","parameters":{"id":2112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2109,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1444:4:21","nodeType":"VariableDeclaration","scope":2113,"src":"1428:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2108,"name":"address","nodeType":"ElementaryTypeName","src":"1428:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2111,"indexed":false,"mutability":"mutable","name":"yieldFeePercentage","nameLocation":"1458:18:21","nodeType":"VariableDeclaration","scope":2113,"src":"1450:26:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2110,"name":"uint256","nodeType":"ElementaryTypeName","src":"1450:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1427:50:21"},"src":"1388:90:21"},{"anonymous":false,"documentation":{"id":2114,"nodeType":"StructuredDocumentation","src":"1484:267:21","text":" @notice Emitted when the pool creator swap fee percentage of a pool is updated.\n @param pool The pool whose pool creator swap fee will be changed\n @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage for the pool"},"eventSelector":"b7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c","id":2120,"name":"PoolCreatorSwapFeePercentageChanged","nameLocation":"1762:35:21","nodeType":"EventDefinition","parameters":{"id":2119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2116,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1814:4:21","nodeType":"VariableDeclaration","scope":2120,"src":"1798:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2115,"name":"address","nodeType":"ElementaryTypeName","src":"1798:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2118,"indexed":false,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"1828:28:21","nodeType":"VariableDeclaration","scope":2120,"src":"1820:36:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2117,"name":"uint256","nodeType":"ElementaryTypeName","src":"1820:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1797:60:21"},"src":"1756:102:21"},{"anonymous":false,"documentation":{"id":2121,"nodeType":"StructuredDocumentation","src":"1864:271:21","text":" @notice Emitted when the pool creator yield fee percentage of a pool is updated.\n @param pool The pool whose pool creator yield fee will be changed\n @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage for the pool"},"eventSelector":"47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34","id":2127,"name":"PoolCreatorYieldFeePercentageChanged","nameLocation":"2146:36:21","nodeType":"EventDefinition","parameters":{"id":2126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2123,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2199:4:21","nodeType":"VariableDeclaration","scope":2127,"src":"2183:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2122,"name":"address","nodeType":"ElementaryTypeName","src":"2183:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2125,"indexed":false,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"2213:29:21","nodeType":"VariableDeclaration","scope":2127,"src":"2205:37:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2124,"name":"uint256","nodeType":"ElementaryTypeName","src":"2205:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2182:61:21"},"src":"2140:104:21"},{"anonymous":false,"documentation":{"id":2128,"nodeType":"StructuredDocumentation","src":"2250:560:21","text":" @notice Logs the collection of protocol swap fees in a specific token and amount.\n @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass\n multiple operations.\n @param pool The pool on which the swap fee was charged\n @param token The token in which the swap fee was charged\n @param amount The amount of the token collected in fees"},"eventSelector":"ae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f","id":2137,"name":"ProtocolSwapFeeCollected","nameLocation":"2821:24:21","nodeType":"EventDefinition","parameters":{"id":2136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2130,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2862:4:21","nodeType":"VariableDeclaration","scope":2137,"src":"2846:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2129,"name":"address","nodeType":"ElementaryTypeName","src":"2846:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2133,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"2883:5:21","nodeType":"VariableDeclaration","scope":2137,"src":"2868:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":2132,"nodeType":"UserDefinedTypeName","pathNode":{"id":2131,"name":"IERC20","nameLocations":["2868:6:21"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"2868:6:21"},"referencedDeclaration":40109,"src":"2868:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2135,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"2898:6:21","nodeType":"VariableDeclaration","scope":2137,"src":"2890:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2134,"name":"uint256","nodeType":"ElementaryTypeName","src":"2890:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2845:60:21"},"src":"2815:91:21"},{"anonymous":false,"documentation":{"id":2138,"nodeType":"StructuredDocumentation","src":"2912:564:21","text":" @notice Logs the collection of protocol yield fees in a specific token and amount.\n @dev Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs\n in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass\n multiple operations.\n @param pool The pool on which the yield fee was charged\n @param token The token in which the yield fee was charged\n @param amount The amount of the token collected in fees"},"eventSelector":"e505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e2","id":2147,"name":"ProtocolYieldFeeCollected","nameLocation":"3487:25:21","nodeType":"EventDefinition","parameters":{"id":2146,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2140,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"3529:4:21","nodeType":"VariableDeclaration","scope":2147,"src":"3513:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2139,"name":"address","nodeType":"ElementaryTypeName","src":"3513:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2143,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"3550:5:21","nodeType":"VariableDeclaration","scope":2147,"src":"3535:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":2142,"nodeType":"UserDefinedTypeName","pathNode":{"id":2141,"name":"IERC20","nameLocations":["3535:6:21"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"3535:6:21"},"referencedDeclaration":40109,"src":"3535:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2145,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"3565:6:21","nodeType":"VariableDeclaration","scope":2147,"src":"3557:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2144,"name":"uint256","nodeType":"ElementaryTypeName","src":"3557:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3512:60:21"},"src":"3481:92:21"},{"anonymous":false,"documentation":{"id":2148,"nodeType":"StructuredDocumentation","src":"3579:333:21","text":" @notice Logs the withdrawal of protocol fees in a specific token and amount.\n @param pool The pool from which protocol fees are being withdrawn\n @param token The token being withdrawn\n @param recipient The recipient of the funds\n @param amount The amount of the fee token that was withdrawn"},"eventSelector":"1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b5","id":2159,"name":"ProtocolFeesWithdrawn","nameLocation":"3923:21:21","nodeType":"EventDefinition","parameters":{"id":2158,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2150,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"3961:4:21","nodeType":"VariableDeclaration","scope":2159,"src":"3945:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2149,"name":"address","nodeType":"ElementaryTypeName","src":"3945:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2153,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"3982:5:21","nodeType":"VariableDeclaration","scope":2159,"src":"3967:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":2152,"nodeType":"UserDefinedTypeName","pathNode":{"id":2151,"name":"IERC20","nameLocations":["3967:6:21"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"3967:6:21"},"referencedDeclaration":40109,"src":"3967:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2155,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"4005:9:21","nodeType":"VariableDeclaration","scope":2159,"src":"3989:25:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2154,"name":"address","nodeType":"ElementaryTypeName","src":"3989:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2157,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"4024:6:21","nodeType":"VariableDeclaration","scope":2159,"src":"4016:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2156,"name":"uint256","nodeType":"ElementaryTypeName","src":"4016:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3944:87:21"},"src":"3917:115:21"},{"anonymous":false,"documentation":{"id":2160,"nodeType":"StructuredDocumentation","src":"4038:398:21","text":" @notice Logs the withdrawal of pool creator fees in a specific token and amount.\n @param pool The pool from which pool creator fees are being withdrawn\n @param token The token being withdrawn\n @param recipient The recipient of the funds (the pool creator if permissionless, or another account)\n @param amount The amount of the fee token that was withdrawn"},"eventSelector":"938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f9","id":2171,"name":"PoolCreatorFeesWithdrawn","nameLocation":"4447:24:21","nodeType":"EventDefinition","parameters":{"id":2170,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2162,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4497:4:21","nodeType":"VariableDeclaration","scope":2171,"src":"4481:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2161,"name":"address","nodeType":"ElementaryTypeName","src":"4481:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2165,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"4526:5:21","nodeType":"VariableDeclaration","scope":2171,"src":"4511:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":2164,"nodeType":"UserDefinedTypeName","pathNode":{"id":2163,"name":"IERC20","nameLocations":["4511:6:21"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"4511:6:21"},"referencedDeclaration":40109,"src":"4511:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2167,"indexed":true,"mutability":"mutable","name":"recipient","nameLocation":"4557:9:21","nodeType":"VariableDeclaration","scope":2171,"src":"4541:25:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2166,"name":"address","nodeType":"ElementaryTypeName","src":"4541:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2169,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"4584:6:21","nodeType":"VariableDeclaration","scope":2171,"src":"4576:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2168,"name":"uint256","nodeType":"ElementaryTypeName","src":"4576:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4471:125:21"},"src":"4441:156:21"},{"anonymous":false,"documentation":{"id":2172,"nodeType":"StructuredDocumentation","src":"4603:529:21","text":" @notice Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\n @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n equal the current global swap fee percentage.\n @param pool The pool being registered\n @param aggregateSwapFeePercentage The initial aggregate swap fee percentage\n @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially"},"eventSelector":"a34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a78564","id":2180,"name":"InitialPoolAggregateSwapFeePercentage","nameLocation":"5143:37:21","nodeType":"EventDefinition","parameters":{"id":2179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2174,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5206:4:21","nodeType":"VariableDeclaration","scope":2180,"src":"5190:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2173,"name":"address","nodeType":"ElementaryTypeName","src":"5190:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2176,"indexed":false,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"5228:26:21","nodeType":"VariableDeclaration","scope":2180,"src":"5220:34:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2175,"name":"uint256","nodeType":"ElementaryTypeName","src":"5220:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2178,"indexed":false,"mutability":"mutable","name":"isProtocolFeeExempt","nameLocation":"5269:19:21","nodeType":"VariableDeclaration","scope":2180,"src":"5264:24:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2177,"name":"bool","nodeType":"ElementaryTypeName","src":"5264:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5180:114:21"},"src":"5137:158:21"},{"anonymous":false,"documentation":{"id":2181,"nodeType":"StructuredDocumentation","src":"5301:533:21","text":" @notice Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\n @dev If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will\n equal the current global yield fee percentage.\n @param pool The pool being registered\n @param aggregateYieldFeePercentage The initial aggregate yield fee percentage\n @param isProtocolFeeExempt True if the pool is exempt from taking protocol fees initially"},"eventSelector":"ce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb","id":2189,"name":"InitialPoolAggregateYieldFeePercentage","nameLocation":"5845:38:21","nodeType":"EventDefinition","parameters":{"id":2188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2183,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5909:4:21","nodeType":"VariableDeclaration","scope":2189,"src":"5893:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2182,"name":"address","nodeType":"ElementaryTypeName","src":"5893:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2185,"indexed":false,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"5931:27:21","nodeType":"VariableDeclaration","scope":2189,"src":"5923:35:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2184,"name":"uint256","nodeType":"ElementaryTypeName","src":"5923:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2187,"indexed":false,"mutability":"mutable","name":"isProtocolFeeExempt","nameLocation":"5973:19:21","nodeType":"VariableDeclaration","scope":2189,"src":"5968:24:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2186,"name":"bool","nodeType":"ElementaryTypeName","src":"5968:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5883:115:21"},"src":"5839:160:21"},{"anonymous":false,"documentation":{"id":2190,"nodeType":"StructuredDocumentation","src":"6005:738:21","text":" @notice Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\n @dev The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this\n simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee\n counterpart also include the protocol fee exemption flag, we might as well include it here as well.\n @param pool The address of the pool being registered\n @param poolCreator The address of the pool creator (non-zero, or the event would not be emitted)\n @param protocolFeeExempt True if the pool is initially exempt from protocol fees"},"eventSelector":"d9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed07912","id":2198,"name":"PoolRegisteredWithFeeController","nameLocation":"6754:31:21","nodeType":"EventDefinition","parameters":{"id":2197,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2192,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6802:4:21","nodeType":"VariableDeclaration","scope":2198,"src":"6786:20:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2191,"name":"address","nodeType":"ElementaryTypeName","src":"6786:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2194,"indexed":true,"mutability":"mutable","name":"poolCreator","nameLocation":"6824:11:21","nodeType":"VariableDeclaration","scope":2198,"src":"6808:27:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2193,"name":"address","nodeType":"ElementaryTypeName","src":"6808:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2196,"indexed":false,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"6842:17:21","nodeType":"VariableDeclaration","scope":2198,"src":"6837:22:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2195,"name":"bool","nodeType":"ElementaryTypeName","src":"6837:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6785:75:21"},"src":"6748:113:21"},{"documentation":{"id":2199,"nodeType":"StructuredDocumentation","src":"6867:219:21","text":" @notice Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\n @dev Note that this is checked for both the global and pool-specific protocol swap fee percentages."},"errorSelector":"7e6eb7fb","id":2201,"name":"ProtocolSwapFeePercentageTooHigh","nameLocation":"7097:32:21","nodeType":"ErrorDefinition","parameters":{"id":2200,"nodeType":"ParameterList","parameters":[],"src":"7129:2:21"},"src":"7091:41:21"},{"documentation":{"id":2202,"nodeType":"StructuredDocumentation","src":"7138:221:21","text":" @notice Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\n @dev Note that this is checked for both the global and pool-specific protocol yield fee percentages."},"errorSelector":"a7849e8e","id":2204,"name":"ProtocolYieldFeePercentageTooHigh","nameLocation":"7370:33:21","nodeType":"ErrorDefinition","parameters":{"id":2203,"nodeType":"ParameterList","parameters":[],"src":"7403:2:21"},"src":"7364:42:21"},{"documentation":{"id":2205,"nodeType":"StructuredDocumentation","src":"7412:156:21","text":" @notice Error raised if there is no pool creator on a withdrawal attempt from the given pool.\n @param pool The pool with no creator"},"errorSelector":"8bcbf353","id":2209,"name":"PoolCreatorNotRegistered","nameLocation":"7579:24:21","nodeType":"ErrorDefinition","parameters":{"id":2208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2207,"mutability":"mutable","name":"pool","nameLocation":"7612:4:21","nodeType":"VariableDeclaration","scope":2209,"src":"7604:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2206,"name":"address","nodeType":"ElementaryTypeName","src":"7604:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7603:14:21"},"src":"7573:45:21"},{"documentation":{"id":2210,"nodeType":"StructuredDocumentation","src":"7624:236:21","text":" @notice Error raised if the wrong account attempts to withdraw pool creator fees.\n @param caller The account attempting to withdraw pool creator fees\n @param pool The pool the caller tried to withdraw from"},"errorSelector":"fbecdbf4","id":2216,"name":"CallerIsNotPoolCreator","nameLocation":"7871:22:21","nodeType":"ErrorDefinition","parameters":{"id":2215,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2212,"mutability":"mutable","name":"caller","nameLocation":"7902:6:21","nodeType":"VariableDeclaration","scope":2216,"src":"7894:14:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2211,"name":"address","nodeType":"ElementaryTypeName","src":"7894:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2214,"mutability":"mutable","name":"pool","nameLocation":"7918:4:21","nodeType":"VariableDeclaration","scope":2216,"src":"7910:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2213,"name":"address","nodeType":"ElementaryTypeName","src":"7910:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7893:30:21"},"src":"7865:59:21"},{"documentation":{"id":2217,"nodeType":"StructuredDocumentation","src":"7930:110:21","text":"@notice Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value."},"errorSelector":"0370da74","id":2219,"name":"PoolCreatorFeePercentageTooHigh","nameLocation":"8051:31:21","nodeType":"ErrorDefinition","parameters":{"id":2218,"nodeType":"ParameterList","parameters":[],"src":"8082:2:21"},"src":"8045:40:21"},{"documentation":{"id":2220,"nodeType":"StructuredDocumentation","src":"8091:109:21","text":" @notice Get the address of the main Vault contract.\n @return vault The Vault address"},"functionSelector":"fbfa77cf","id":2226,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"8214:5:21","nodeType":"FunctionDefinition","parameters":{"id":2221,"nodeType":"ParameterList","parameters":[],"src":"8219:2:21"},"returnParameters":{"id":2225,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2224,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2226,"src":"8245:6:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":2223,"nodeType":"UserDefinedTypeName","pathNode":{"id":2222,"name":"IVault","nameLocations":["8245:6:21"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"8245:6:21"},"referencedDeclaration":3111,"src":"8245:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"}],"src":"8244:8:21"},"scope":2420,"src":"8205:48:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2227,"nodeType":"StructuredDocumentation","src":"8259:131:21","text":" @notice Collects aggregate fees from the Vault for a given pool.\n @param pool The pool with aggregate fees"},"functionSelector":"8f4ab9ca","id":2232,"implemented":false,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"8404:20:21","nodeType":"FunctionDefinition","parameters":{"id":2230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2229,"mutability":"mutable","name":"pool","nameLocation":"8433:4:21","nodeType":"VariableDeclaration","scope":2232,"src":"8425:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2228,"name":"address","nodeType":"ElementaryTypeName","src":"8425:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8424:14:21"},"returnParameters":{"id":2231,"nodeType":"ParameterList","parameters":[],"src":"8447:0:21"},"scope":2420,"src":"8395:53:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2233,"nodeType":"StructuredDocumentation","src":"8454:156:21","text":" @notice Getter for the current global protocol swap fee.\n @return protocolSwapFeePercentage The global protocol swap fee percentage"},"functionSelector":"7869ee18","id":2238,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalProtocolSwapFeePercentage","nameLocation":"8624:34:21","nodeType":"FunctionDefinition","parameters":{"id":2234,"nodeType":"ParameterList","parameters":[],"src":"8658:2:21"},"returnParameters":{"id":2237,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2236,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"8692:25:21","nodeType":"VariableDeclaration","scope":2238,"src":"8684:33:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2235,"name":"uint256","nodeType":"ElementaryTypeName","src":"8684:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8683:35:21"},"scope":2420,"src":"8615:104:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2239,"nodeType":"StructuredDocumentation","src":"8725:159:21","text":" @notice Getter for the current global protocol yield fee.\n @return protocolYieldFeePercentage The global protocol yield fee percentage"},"functionSelector":"55fb76af","id":2244,"implemented":false,"kind":"function","modifiers":[],"name":"getGlobalProtocolYieldFeePercentage","nameLocation":"8898:35:21","nodeType":"FunctionDefinition","parameters":{"id":2240,"nodeType":"ParameterList","parameters":[],"src":"8933:2:21"},"returnParameters":{"id":2243,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2242,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"8967:26:21","nodeType":"VariableDeclaration","scope":2244,"src":"8959:34:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2241,"name":"uint256","nodeType":"ElementaryTypeName","src":"8959:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8958:36:21"},"scope":2420,"src":"8889:106:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2245,"nodeType":"StructuredDocumentation","src":"9001:207:21","text":" @notice Getter for pool registration flag.\n @param pool The address of the pool\n @return isRegistered True if the pool configuration has been set (e.g., through `registerPool`)"},"functionSelector":"c673bdaf","id":2252,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"9222:16:21","nodeType":"FunctionDefinition","parameters":{"id":2248,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2247,"mutability":"mutable","name":"pool","nameLocation":"9247:4:21","nodeType":"VariableDeclaration","scope":2252,"src":"9239:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2246,"name":"address","nodeType":"ElementaryTypeName","src":"9239:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9238:14:21"},"returnParameters":{"id":2251,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2250,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2252,"src":"9276:4:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2249,"name":"bool","nodeType":"ElementaryTypeName","src":"9276:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9275:6:21"},"scope":2420,"src":"9213:69:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2253,"nodeType":"StructuredDocumentation","src":"9288:292:21","text":" @notice Getter for the current protocol swap fee for a given pool.\n @param pool The address of the pool\n @return protocolSwapFeePercentage The protocol swap fee percentage for the given pool\n @return isOverride True if the protocol fee has been overridden"},"functionSelector":"5c15a0b4","id":2262,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolProtocolSwapFeeInfo","nameLocation":"9594:26:21","nodeType":"FunctionDefinition","parameters":{"id":2256,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2255,"mutability":"mutable","name":"pool","nameLocation":"9638:4:21","nodeType":"VariableDeclaration","scope":2262,"src":"9630:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2254,"name":"address","nodeType":"ElementaryTypeName","src":"9630:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9620:28:21"},"returnParameters":{"id":2261,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2258,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"9680:25:21","nodeType":"VariableDeclaration","scope":2262,"src":"9672:33:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2257,"name":"uint256","nodeType":"ElementaryTypeName","src":"9672:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2260,"mutability":"mutable","name":"isOverride","nameLocation":"9712:10:21","nodeType":"VariableDeclaration","scope":2262,"src":"9707:15:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2259,"name":"bool","nodeType":"ElementaryTypeName","src":"9707:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9671:52:21"},"scope":2420,"src":"9585:139:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2263,"nodeType":"StructuredDocumentation","src":"9730:295:21","text":" @notice Getter for the current protocol yield fee for a given pool.\n @param pool The address of the pool\n @return protocolYieldFeePercentage The protocol yield fee percentage for the given pool\n @return isOverride True if the protocol fee has been overridden"},"functionSelector":"7a2b97dc","id":2272,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolProtocolYieldFeeInfo","nameLocation":"10039:27:21","nodeType":"FunctionDefinition","parameters":{"id":2266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2265,"mutability":"mutable","name":"pool","nameLocation":"10084:4:21","nodeType":"VariableDeclaration","scope":2272,"src":"10076:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2264,"name":"address","nodeType":"ElementaryTypeName","src":"10076:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10066:28:21"},"returnParameters":{"id":2271,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2268,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"10126:26:21","nodeType":"VariableDeclaration","scope":2272,"src":"10118:34:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2267,"name":"uint256","nodeType":"ElementaryTypeName","src":"10118:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2270,"mutability":"mutable","name":"isOverride","nameLocation":"10159:10:21","nodeType":"VariableDeclaration","scope":2272,"src":"10154:15:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2269,"name":"bool","nodeType":"ElementaryTypeName","src":"10154:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10117:53:21"},"scope":2420,"src":"10030:141:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2273,"nodeType":"StructuredDocumentation","src":"10177:249:21","text":" @notice Getter for the current pool creator swap fee percentage for a given pool.\n @param pool The address of the pool\n @return poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee"},"functionSelector":"0b8e059b","id":2280,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorSwapFeePercentage","nameLocation":"10440:31:21","nodeType":"FunctionDefinition","parameters":{"id":2276,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2275,"mutability":"mutable","name":"pool","nameLocation":"10480:4:21","nodeType":"VariableDeclaration","scope":2280,"src":"10472:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2274,"name":"address","nodeType":"ElementaryTypeName","src":"10472:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10471:14:21"},"returnParameters":{"id":2279,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2278,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2280,"src":"10509:7:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2277,"name":"uint256","nodeType":"ElementaryTypeName","src":"10509:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10508:9:21"},"scope":2420,"src":"10431:87:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2281,"nodeType":"StructuredDocumentation","src":"10524:252:21","text":" @notice Getter for the current pool creator yield fee percentage for a given pool.\n @param pool The address of the pool\n @return poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee"},"functionSelector":"0252aab5","id":2288,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorYieldFeePercentage","nameLocation":"10790:32:21","nodeType":"FunctionDefinition","parameters":{"id":2284,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2283,"mutability":"mutable","name":"pool","nameLocation":"10831:4:21","nodeType":"VariableDeclaration","scope":2288,"src":"10823:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2282,"name":"address","nodeType":"ElementaryTypeName","src":"10823:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10822:14:21"},"returnParameters":{"id":2287,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2286,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2288,"src":"10860:7:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2285,"name":"uint256","nodeType":"ElementaryTypeName","src":"10860:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10859:9:21"},"scope":2420,"src":"10781:88:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2289,"nodeType":"StructuredDocumentation","src":"10875:344:21","text":" @notice Returns the amount of each pool token allocated to the protocol for withdrawal.\n @dev Includes both swap and yield fees.\n @param pool The address of the pool on which fees were collected\n @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order"},"functionSelector":"8df44c54","id":2297,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeAmounts","nameLocation":"11233:21:21","nodeType":"FunctionDefinition","parameters":{"id":2292,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2291,"mutability":"mutable","name":"pool","nameLocation":"11263:4:21","nodeType":"VariableDeclaration","scope":2297,"src":"11255:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2290,"name":"address","nodeType":"ElementaryTypeName","src":"11255:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11254:14:21"},"returnParameters":{"id":2296,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2295,"mutability":"mutable","name":"feeAmounts","nameLocation":"11309:10:21","nodeType":"VariableDeclaration","scope":2297,"src":"11292:27:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2293,"name":"uint256","nodeType":"ElementaryTypeName","src":"11292:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2294,"nodeType":"ArrayTypeName","src":"11292:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11291:29:21"},"scope":2420,"src":"11224:97:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2298,"nodeType":"StructuredDocumentation","src":"11327:348:21","text":" @notice Returns the amount of each pool token allocated to the pool creator for withdrawal.\n @dev Includes both swap and yield fees.\n @param pool The address of the pool on which fees were collected\n @return feeAmounts The total amounts of each token available for withdrawal, sorted in token registration order"},"functionSelector":"9e95f3fd","id":2306,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolCreatorFeeAmounts","nameLocation":"11689:24:21","nodeType":"FunctionDefinition","parameters":{"id":2301,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2300,"mutability":"mutable","name":"pool","nameLocation":"11722:4:21","nodeType":"VariableDeclaration","scope":2306,"src":"11714:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2299,"name":"address","nodeType":"ElementaryTypeName","src":"11714:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11713:14:21"},"returnParameters":{"id":2305,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2304,"mutability":"mutable","name":"feeAmounts","nameLocation":"11768:10:21","nodeType":"VariableDeclaration","scope":2306,"src":"11751:27:21","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2302,"name":"uint256","nodeType":"ElementaryTypeName","src":"11751:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2303,"nodeType":"ArrayTypeName","src":"11751:9:21","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11750:29:21"},"scope":2420,"src":"11680:100:21","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2307,"nodeType":"StructuredDocumentation","src":"11786:1445:21","text":" @notice Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\n @dev Not tied to any particular pool; this just performs the low-level \"additive fee\" calculation. Note that\n pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are\n stored in the Vault with 24-bit precision, this will truncate any values that require greater precision.\n It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee\n components, but the truncation ensures it will not revert for any valid set of fee percentages.\n See example below:\n tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60%\n totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000\n protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400\n creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600\n creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360\n lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\n @param protocolFeePercentage The protocol portion of the aggregate fee percentage\n @param poolCreatorFeePercentage The pool creator portion of the aggregate fee percentage\n @return aggregateFeePercentage The computed aggregate percentage"},"functionSelector":"0ddd60c6","id":2316,"implemented":false,"kind":"function","modifiers":[],"name":"computeAggregateFeePercentage","nameLocation":"13245:29:21","nodeType":"FunctionDefinition","parameters":{"id":2312,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2309,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"13292:21:21","nodeType":"VariableDeclaration","scope":2316,"src":"13284:29:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2308,"name":"uint256","nodeType":"ElementaryTypeName","src":"13284:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2311,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"13331:24:21","nodeType":"VariableDeclaration","scope":2316,"src":"13323:32:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2310,"name":"uint256","nodeType":"ElementaryTypeName","src":"13323:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13274:87:21"},"returnParameters":{"id":2315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2314,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"13393:22:21","nodeType":"VariableDeclaration","scope":2316,"src":"13385:30:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2313,"name":"uint256","nodeType":"ElementaryTypeName","src":"13385:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13384:32:21"},"scope":2420,"src":"13236:181:21","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":2317,"nodeType":"StructuredDocumentation","src":"13423:398:21","text":" @notice Override the protocol swap fee percentage for a specific pool.\n @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n @param pool The pool for which we are setting the protocol swap fee"},"functionSelector":"71ecc8fb","id":2322,"implemented":false,"kind":"function","modifiers":[],"name":"updateProtocolSwapFeePercentage","nameLocation":"13835:31:21","nodeType":"FunctionDefinition","parameters":{"id":2320,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2319,"mutability":"mutable","name":"pool","nameLocation":"13875:4:21","nodeType":"VariableDeclaration","scope":2322,"src":"13867:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2318,"name":"address","nodeType":"ElementaryTypeName","src":"13867:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13866:14:21"},"returnParameters":{"id":2321,"nodeType":"ParameterList","parameters":[],"src":"13889:0:21"},"scope":2420,"src":"13826:64:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2323,"nodeType":"StructuredDocumentation","src":"13896:400:21","text":" @notice Override the protocol yield fee percentage for a specific pool.\n @dev This is a permissionless call, and will set the pool's fee to the current global fee, if it is different\n from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\n @param pool The pool for which we are setting the protocol yield fee"},"functionSelector":"71447ea8","id":2328,"implemented":false,"kind":"function","modifiers":[],"name":"updateProtocolYieldFeePercentage","nameLocation":"14310:32:21","nodeType":"FunctionDefinition","parameters":{"id":2326,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2325,"mutability":"mutable","name":"pool","nameLocation":"14351:4:21","nodeType":"VariableDeclaration","scope":2328,"src":"14343:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2324,"name":"address","nodeType":"ElementaryTypeName","src":"14343:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14342:14:21"},"returnParameters":{"id":2327,"nodeType":"ParameterList","parameters":[],"src":"14365:0:21"},"scope":2420,"src":"14301:65:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2329,"nodeType":"StructuredDocumentation","src":"14590:826:21","text":" @notice Add pool-specific entries to the protocol swap and yield percentages.\n @dev This must be called from the Vault during pool registration. It will initialize the pool to the global\n protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate\n fee percentages, based on an initial pool creator fee of 0.\n @param pool The address of the pool being registered\n @param poolCreator The address of the pool creator (or 0 if there won't be a pool creator fee)\n @param protocolFeeExempt If true, the pool is initially exempt from protocol fees\n @return aggregateSwapFeePercentage The initial aggregate swap fee percentage\n @return aggregateYieldFeePercentage The initial aggregate yield fee percentage"},"functionSelector":"77ff76e7","id":2342,"implemented":false,"kind":"function","modifiers":[],"name":"registerPool","nameLocation":"15430:12:21","nodeType":"FunctionDefinition","parameters":{"id":2336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2331,"mutability":"mutable","name":"pool","nameLocation":"15460:4:21","nodeType":"VariableDeclaration","scope":2342,"src":"15452:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2330,"name":"address","nodeType":"ElementaryTypeName","src":"15452:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2333,"mutability":"mutable","name":"poolCreator","nameLocation":"15482:11:21","nodeType":"VariableDeclaration","scope":2342,"src":"15474:19:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2332,"name":"address","nodeType":"ElementaryTypeName","src":"15474:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2335,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"15508:17:21","nodeType":"VariableDeclaration","scope":2342,"src":"15503:22:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2334,"name":"bool","nodeType":"ElementaryTypeName","src":"15503:4:21","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15442:89:21"},"returnParameters":{"id":2341,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2338,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"15558:26:21","nodeType":"VariableDeclaration","scope":2342,"src":"15550:34:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2337,"name":"uint256","nodeType":"ElementaryTypeName","src":"15550:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2340,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"15594:27:21","nodeType":"VariableDeclaration","scope":2342,"src":"15586:35:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2339,"name":"uint256","nodeType":"ElementaryTypeName","src":"15586:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15549:73:21"},"scope":2420,"src":"15421:202:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2343,"nodeType":"StructuredDocumentation","src":"15629:175:21","text":" @notice Set the global protocol swap fee percentage, used by standard pools.\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage"},"functionSelector":"8a3c5c69","id":2348,"implemented":false,"kind":"function","modifiers":[],"name":"setGlobalProtocolSwapFeePercentage","nameLocation":"15818:34:21","nodeType":"FunctionDefinition","parameters":{"id":2346,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2345,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"15861:28:21","nodeType":"VariableDeclaration","scope":2348,"src":"15853:36:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2344,"name":"uint256","nodeType":"ElementaryTypeName","src":"15853:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15852:38:21"},"returnParameters":{"id":2347,"nodeType":"ParameterList","parameters":[],"src":"15899:0:21"},"scope":2420,"src":"15809:91:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2349,"nodeType":"StructuredDocumentation","src":"15906:178:21","text":" @notice Set the global protocol yield fee percentage, used by standard pools.\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage"},"functionSelector":"a93df2a4","id":2354,"implemented":false,"kind":"function","modifiers":[],"name":"setGlobalProtocolYieldFeePercentage","nameLocation":"16098:35:21","nodeType":"FunctionDefinition","parameters":{"id":2352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2351,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"16142:29:21","nodeType":"VariableDeclaration","scope":2354,"src":"16134:37:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2350,"name":"uint256","nodeType":"ElementaryTypeName","src":"16134:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16133:39:21"},"returnParameters":{"id":2353,"nodeType":"ParameterList","parameters":[],"src":"16181:0:21"},"scope":2420,"src":"16089:93:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2355,"nodeType":"StructuredDocumentation","src":"16188:272:21","text":" @notice Override the protocol swap fee percentage for a specific pool.\n @param pool The address of the pool for which we are setting the protocol swap fee\n @param newProtocolSwapFeePercentage The new protocol swap fee percentage for the pool"},"functionSelector":"fd267f39","id":2362,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolSwapFeePercentage","nameLocation":"16474:28:21","nodeType":"FunctionDefinition","parameters":{"id":2360,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2357,"mutability":"mutable","name":"pool","nameLocation":"16511:4:21","nodeType":"VariableDeclaration","scope":2362,"src":"16503:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2356,"name":"address","nodeType":"ElementaryTypeName","src":"16503:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2359,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"16525:28:21","nodeType":"VariableDeclaration","scope":2362,"src":"16517:36:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2358,"name":"uint256","nodeType":"ElementaryTypeName","src":"16517:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16502:52:21"},"returnParameters":{"id":2361,"nodeType":"ParameterList","parameters":[],"src":"16563:0:21"},"scope":2420,"src":"16465:99:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2363,"nodeType":"StructuredDocumentation","src":"16570:276:21","text":" @notice Override the protocol yield fee percentage for a specific pool.\n @param pool The address of the pool for which we are setting the protocol yield fee\n @param newProtocolYieldFeePercentage The new protocol yield fee percentage for the pool"},"functionSelector":"abaa3356","id":2370,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolYieldFeePercentage","nameLocation":"16860:29:21","nodeType":"FunctionDefinition","parameters":{"id":2368,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2365,"mutability":"mutable","name":"pool","nameLocation":"16898:4:21","nodeType":"VariableDeclaration","scope":2370,"src":"16890:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2364,"name":"address","nodeType":"ElementaryTypeName","src":"16890:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2367,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"16912:29:21","nodeType":"VariableDeclaration","scope":2370,"src":"16904:37:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2366,"name":"uint256","nodeType":"ElementaryTypeName","src":"16904:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16889:53:21"},"returnParameters":{"id":2369,"nodeType":"ParameterList","parameters":[],"src":"16951:0:21"},"scope":2420,"src":"16851:101:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2371,"nodeType":"StructuredDocumentation","src":"16958:623:21","text":" @notice Assigns a new pool creator swap fee percentage to the specified pool.\n @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n @param pool The address of the pool for which the pool creator fee will be changed\n @param poolCreatorSwapFeePercentage The new pool creator swap fee percentage to apply to the pool"},"functionSelector":"1377c16c","id":2378,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolCreatorSwapFeePercentage","nameLocation":"17595:31:21","nodeType":"FunctionDefinition","parameters":{"id":2376,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2373,"mutability":"mutable","name":"pool","nameLocation":"17635:4:21","nodeType":"VariableDeclaration","scope":2378,"src":"17627:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2372,"name":"address","nodeType":"ElementaryTypeName","src":"17627:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2375,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"17649:28:21","nodeType":"VariableDeclaration","scope":2378,"src":"17641:36:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2374,"name":"uint256","nodeType":"ElementaryTypeName","src":"17641:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17626:52:21"},"returnParameters":{"id":2377,"nodeType":"ParameterList","parameters":[],"src":"17687:0:21"},"scope":2420,"src":"17586:102:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2379,"nodeType":"StructuredDocumentation","src":"17694:626:21","text":" @notice Assigns a new pool creator yield fee percentage to the specified pool.\n @dev Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to\n the \"net\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the\n pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\n @param pool The address of the pool for which the pool creator fee will be changed\n @param poolCreatorYieldFeePercentage The new pool creator yield fee percentage to apply to the pool"},"functionSelector":"3af52712","id":2386,"implemented":false,"kind":"function","modifiers":[],"name":"setPoolCreatorYieldFeePercentage","nameLocation":"18334:32:21","nodeType":"FunctionDefinition","parameters":{"id":2384,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2381,"mutability":"mutable","name":"pool","nameLocation":"18375:4:21","nodeType":"VariableDeclaration","scope":2386,"src":"18367:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2380,"name":"address","nodeType":"ElementaryTypeName","src":"18367:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2383,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"18389:29:21","nodeType":"VariableDeclaration","scope":2386,"src":"18381:37:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2382,"name":"uint256","nodeType":"ElementaryTypeName","src":"18381:7:21","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18366:53:21"},"returnParameters":{"id":2385,"nodeType":"ParameterList","parameters":[],"src":"18428:0:21"},"scope":2420,"src":"18325:104:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2387,"nodeType":"StructuredDocumentation","src":"18435:296:21","text":" @notice Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\n @dev Sends swap and yield protocol fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens"},"functionSelector":"cf7b287f","id":2394,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawProtocolFees","nameLocation":"18745:20:21","nodeType":"FunctionDefinition","parameters":{"id":2392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2389,"mutability":"mutable","name":"pool","nameLocation":"18774:4:21","nodeType":"VariableDeclaration","scope":2394,"src":"18766:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2388,"name":"address","nodeType":"ElementaryTypeName","src":"18766:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2391,"mutability":"mutable","name":"recipient","nameLocation":"18788:9:21","nodeType":"VariableDeclaration","scope":2394,"src":"18780:17:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2390,"name":"address","nodeType":"ElementaryTypeName","src":"18780:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18765:33:21"},"returnParameters":{"id":2393,"nodeType":"ParameterList","parameters":[],"src":"18807:0:21"},"scope":2420,"src":"18736:72:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2395,"nodeType":"StructuredDocumentation","src":"18814:339:21","text":" @notice Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\n @dev Sends swap and yield protocol fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens\n @param token Token to withdraw"},"functionSelector":"b53a70b2","id":2405,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawProtocolFeesForToken","nameLocation":"19167:28:21","nodeType":"FunctionDefinition","parameters":{"id":2403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2397,"mutability":"mutable","name":"pool","nameLocation":"19204:4:21","nodeType":"VariableDeclaration","scope":2405,"src":"19196:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2396,"name":"address","nodeType":"ElementaryTypeName","src":"19196:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2399,"mutability":"mutable","name":"recipient","nameLocation":"19218:9:21","nodeType":"VariableDeclaration","scope":2405,"src":"19210:17:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2398,"name":"address","nodeType":"ElementaryTypeName","src":"19210:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2402,"mutability":"mutable","name":"token","nameLocation":"19236:5:21","nodeType":"VariableDeclaration","scope":2405,"src":"19229:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":2401,"nodeType":"UserDefinedTypeName","pathNode":{"id":2400,"name":"IERC20","nameLocations":["19229:6:21"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"19229:6:21"},"referencedDeclaration":40109,"src":"19229:6:21","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"19195:47:21"},"returnParameters":{"id":2404,"nodeType":"ParameterList","parameters":[],"src":"19251:0:21"},"scope":2420,"src":"19158:94:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2406,"nodeType":"StructuredDocumentation","src":"19258:291:21","text":" @notice Withdraw collected pool creator fees for a given pool. This is a permissioned function.\n @dev Sends swap and yield pool creator fees to the recipient.\n @param pool The pool on which fees were collected\n @param recipient Address to send the tokens"},"functionSelector":"f7061445","id":2413,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"19563:23:21","nodeType":"FunctionDefinition","parameters":{"id":2411,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2408,"mutability":"mutable","name":"pool","nameLocation":"19595:4:21","nodeType":"VariableDeclaration","scope":2413,"src":"19587:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2407,"name":"address","nodeType":"ElementaryTypeName","src":"19587:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2410,"mutability":"mutable","name":"recipient","nameLocation":"19609:9:21","nodeType":"VariableDeclaration","scope":2413,"src":"19601:17:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2409,"name":"address","nodeType":"ElementaryTypeName","src":"19601:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19586:33:21"},"returnParameters":{"id":2412,"nodeType":"ParameterList","parameters":[],"src":"19628:0:21"},"scope":2420,"src":"19554:75:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2414,"nodeType":"StructuredDocumentation","src":"19635:310:21","text":" @notice Withdraw collected pool creator fees for a given pool.\n @dev Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable\n value, this function is permissionless.\n @param pool The pool on which fees were collected"},"functionSelector":"52f125f0","id":2419,"implemented":false,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"19959:23:21","nodeType":"FunctionDefinition","parameters":{"id":2417,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2416,"mutability":"mutable","name":"pool","nameLocation":"19991:4:21","nodeType":"VariableDeclaration","scope":2419,"src":"19983:12:21","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2415,"name":"address","nodeType":"ElementaryTypeName","src":"19983:7:21","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19982:14:21"},"returnParameters":{"id":2418,"nodeType":"ParameterList","parameters":[],"src":"20005:0:21"},"scope":2420,"src":"19950:56:21","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":2421,"src":"266:19742:21","usedErrors":[2201,2204,2209,2216,2219],"usedEvents":[2094,2099,2106,2113,2120,2127,2137,2147,2159,2171,2180,2189,2198]}],"src":"46:19963:21"},"id":21},"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol","exportedSymbols":{"AddLiquidityKind":[4807],"IERC20":[40109],"IERC4626":[39833],"IRouter":[2917],"RemoveLiquidityKind":[4828],"SwapKind":[4735]},"id":2918,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2422,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:22"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":2424,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2918,"sourceUnit":39834,"src":"72:75:22","symbolAliases":[{"foreign":{"id":2423,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39833,"src":"81:8:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":2426,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2918,"sourceUnit":40110,"src":"148:72:22","symbolAliases":[{"foreign":{"id":2425,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"157:6:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":2430,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2918,"sourceUnit":4872,"src":"222:83:22","symbolAliases":[{"foreign":{"id":2427,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4807,"src":"231:16:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":2428,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4828,"src":"249:19:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":2429,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"270:8:22","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IRouter","contractDependencies":[],"contractKind":"interface","documentation":{"id":2431,"nodeType":"StructuredDocumentation","src":"307:115:22","text":"@notice User-friendly interface to basic Vault operations: swap, add/remove liquidity, and associated queries."},"fullyImplemented":false,"id":2917,"linearizedBaseContracts":[2917],"name":"IRouter","nameLocation":"432:7:22","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IRouter.InitializeHookParams","documentation":{"id":2432,"nodeType":"StructuredDocumentation","src":"661:637:22","text":" @notice Data for the pool initialization hook.\n @param sender Account originating the pool initialization operation\n @param pool Address of the liquidity pool\n @param tokens Pool tokens, in token registration order\n @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n @param minBptAmountOut Minimum amount of pool tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to add initial liquidity"},"id":2450,"members":[{"constant":false,"id":2434,"mutability":"mutable","name":"sender","nameLocation":"1349:6:22","nodeType":"VariableDeclaration","scope":2450,"src":"1341:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2433,"name":"address","nodeType":"ElementaryTypeName","src":"1341:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2436,"mutability":"mutable","name":"pool","nameLocation":"1373:4:22","nodeType":"VariableDeclaration","scope":2450,"src":"1365:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2435,"name":"address","nodeType":"ElementaryTypeName","src":"1365:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2440,"mutability":"mutable","name":"tokens","nameLocation":"1396:6:22","nodeType":"VariableDeclaration","scope":2450,"src":"1387:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2438,"nodeType":"UserDefinedTypeName","pathNode":{"id":2437,"name":"IERC20","nameLocations":["1387:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"1387:6:22"},"referencedDeclaration":40109,"src":"1387:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":2439,"nodeType":"ArrayTypeName","src":"1387:8:22","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":2443,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"1422:14:22","nodeType":"VariableDeclaration","scope":2450,"src":"1412:24:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2441,"name":"uint256","nodeType":"ElementaryTypeName","src":"1412:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2442,"nodeType":"ArrayTypeName","src":"1412:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2445,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"1454:15:22","nodeType":"VariableDeclaration","scope":2450,"src":"1446:23:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2444,"name":"uint256","nodeType":"ElementaryTypeName","src":"1446:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2447,"mutability":"mutable","name":"wethIsEth","nameLocation":"1484:9:22","nodeType":"VariableDeclaration","scope":2450,"src":"1479:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2446,"name":"bool","nodeType":"ElementaryTypeName","src":"1479:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2449,"mutability":"mutable","name":"userData","nameLocation":"1509:8:22","nodeType":"VariableDeclaration","scope":2450,"src":"1503:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2448,"name":"bytes","nodeType":"ElementaryTypeName","src":"1503:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"InitializeHookParams","nameLocation":"1310:20:22","nodeType":"StructDefinition","scope":2917,"src":"1303:221:22","visibility":"public"},{"documentation":{"id":2451,"nodeType":"StructuredDocumentation","src":"1530:650:22","text":" @notice Initialize a liquidity pool.\n @param pool Address of the liquidity pool\n @param tokens Pool tokens, in token registration order\n @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n @param minBptAmountOut Minimum amount of pool tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to add initial liquidity\n @return bptAmountOut Actual amount of pool tokens minted in exchange for initial liquidity"},"functionSelector":"026b3d95","id":2471,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"2194:10:22","nodeType":"FunctionDefinition","parameters":{"id":2467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2453,"mutability":"mutable","name":"pool","nameLocation":"2222:4:22","nodeType":"VariableDeclaration","scope":2471,"src":"2214:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2452,"name":"address","nodeType":"ElementaryTypeName","src":"2214:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2457,"mutability":"mutable","name":"tokens","nameLocation":"2252:6:22","nodeType":"VariableDeclaration","scope":2471,"src":"2236:22:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":2455,"nodeType":"UserDefinedTypeName","pathNode":{"id":2454,"name":"IERC20","nameLocations":["2236:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"2236:6:22"},"referencedDeclaration":40109,"src":"2236:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":2456,"nodeType":"ArrayTypeName","src":"2236:8:22","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":2460,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"2285:14:22","nodeType":"VariableDeclaration","scope":2471,"src":"2268:31:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2458,"name":"uint256","nodeType":"ElementaryTypeName","src":"2268:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2459,"nodeType":"ArrayTypeName","src":"2268:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2462,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"2317:15:22","nodeType":"VariableDeclaration","scope":2471,"src":"2309:23:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2461,"name":"uint256","nodeType":"ElementaryTypeName","src":"2309:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2464,"mutability":"mutable","name":"wethIsEth","nameLocation":"2347:9:22","nodeType":"VariableDeclaration","scope":2471,"src":"2342:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2463,"name":"bool","nodeType":"ElementaryTypeName","src":"2342:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2466,"mutability":"mutable","name":"userData","nameLocation":"2379:8:22","nodeType":"VariableDeclaration","scope":2471,"src":"2366:21:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2465,"name":"bytes","nodeType":"ElementaryTypeName","src":"2366:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2204:189:22"},"returnParameters":{"id":2470,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2469,"mutability":"mutable","name":"bptAmountOut","nameLocation":"2428:12:22","nodeType":"VariableDeclaration","scope":2471,"src":"2420:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2468,"name":"uint256","nodeType":"ElementaryTypeName","src":"2420:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2419:22:22"},"scope":2917,"src":"2185:257:22","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2472,"nodeType":"StructuredDocumentation","src":"2660:645:22","text":" @notice Adds liquidity to a pool with proportional token amounts, receiving an exact amount of pool tokens.\n @param pool Address of the liquidity pool\n @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n @param exactBptAmountOut Exact amount of pool tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to add liquidity\n @return amountsIn Actual amounts of tokens added, sorted in token registration order"},"functionSelector":"724dba33","id":2489,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityProportional","nameLocation":"3319:24:22","nodeType":"FunctionDefinition","parameters":{"id":2484,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2474,"mutability":"mutable","name":"pool","nameLocation":"3361:4:22","nodeType":"VariableDeclaration","scope":2489,"src":"3353:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2473,"name":"address","nodeType":"ElementaryTypeName","src":"3353:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2477,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"3392:12:22","nodeType":"VariableDeclaration","scope":2489,"src":"3375:29:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2475,"name":"uint256","nodeType":"ElementaryTypeName","src":"3375:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2476,"nodeType":"ArrayTypeName","src":"3375:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2479,"mutability":"mutable","name":"exactBptAmountOut","nameLocation":"3422:17:22","nodeType":"VariableDeclaration","scope":2489,"src":"3414:25:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2478,"name":"uint256","nodeType":"ElementaryTypeName","src":"3414:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2481,"mutability":"mutable","name":"wethIsEth","nameLocation":"3454:9:22","nodeType":"VariableDeclaration","scope":2489,"src":"3449:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2480,"name":"bool","nodeType":"ElementaryTypeName","src":"3449:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2483,"mutability":"mutable","name":"userData","nameLocation":"3486:8:22","nodeType":"VariableDeclaration","scope":2489,"src":"3473:21:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2482,"name":"bytes","nodeType":"ElementaryTypeName","src":"3473:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3343:157:22"},"returnParameters":{"id":2488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2487,"mutability":"mutable","name":"amountsIn","nameLocation":"3544:9:22","nodeType":"VariableDeclaration","scope":2489,"src":"3527:26:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2485,"name":"uint256","nodeType":"ElementaryTypeName","src":"3527:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2486,"nodeType":"ArrayTypeName","src":"3527:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"3526:28:22"},"scope":2917,"src":"3310:245:22","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2490,"nodeType":"StructuredDocumentation","src":"3561:574:22","text":" @notice Adds liquidity to a pool with arbitrary token amounts.\n @param pool Address of the liquidity pool\n @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n @param minBptAmountOut Minimum amount of pool tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to add liquidity\n @return bptAmountOut Actual amount of pool tokens received"},"functionSelector":"c08bc851","id":2506,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityUnbalanced","nameLocation":"4149:22:22","nodeType":"FunctionDefinition","parameters":{"id":2502,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2492,"mutability":"mutable","name":"pool","nameLocation":"4189:4:22","nodeType":"VariableDeclaration","scope":2506,"src":"4181:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2491,"name":"address","nodeType":"ElementaryTypeName","src":"4181:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2495,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"4220:14:22","nodeType":"VariableDeclaration","scope":2506,"src":"4203:31:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2493,"name":"uint256","nodeType":"ElementaryTypeName","src":"4203:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2494,"nodeType":"ArrayTypeName","src":"4203:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2497,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"4252:15:22","nodeType":"VariableDeclaration","scope":2506,"src":"4244:23:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2496,"name":"uint256","nodeType":"ElementaryTypeName","src":"4244:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2499,"mutability":"mutable","name":"wethIsEth","nameLocation":"4282:9:22","nodeType":"VariableDeclaration","scope":2506,"src":"4277:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2498,"name":"bool","nodeType":"ElementaryTypeName","src":"4277:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2501,"mutability":"mutable","name":"userData","nameLocation":"4314:8:22","nodeType":"VariableDeclaration","scope":2506,"src":"4301:21:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2500,"name":"bytes","nodeType":"ElementaryTypeName","src":"4301:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4171:157:22"},"returnParameters":{"id":2505,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2504,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4363:12:22","nodeType":"VariableDeclaration","scope":2506,"src":"4355:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2503,"name":"uint256","nodeType":"ElementaryTypeName","src":"4355:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4354:22:22"},"scope":2917,"src":"4140:237:22","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2507,"nodeType":"StructuredDocumentation","src":"4383:605:22","text":" @notice Adds liquidity to a pool in a single token, receiving an exact amount of pool tokens.\n @param pool Address of the liquidity pool\n @param tokenIn Token used to add liquidity\n @param maxAmountIn Maximum amount of tokens to be added\n @param exactBptAmountOut Exact amount of pool tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to add liquidity\n @return amountIn Actual amount of tokens added"},"functionSelector":"72657d17","id":2525,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquiditySingleTokenExactOut","nameLocation":"5002:31:22","nodeType":"FunctionDefinition","parameters":{"id":2521,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2509,"mutability":"mutable","name":"pool","nameLocation":"5051:4:22","nodeType":"VariableDeclaration","scope":2525,"src":"5043:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2508,"name":"address","nodeType":"ElementaryTypeName","src":"5043:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2512,"mutability":"mutable","name":"tokenIn","nameLocation":"5072:7:22","nodeType":"VariableDeclaration","scope":2525,"src":"5065:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":2511,"nodeType":"UserDefinedTypeName","pathNode":{"id":2510,"name":"IERC20","nameLocations":["5065:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"5065:6:22"},"referencedDeclaration":40109,"src":"5065:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2514,"mutability":"mutable","name":"maxAmountIn","nameLocation":"5097:11:22","nodeType":"VariableDeclaration","scope":2525,"src":"5089:19:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2513,"name":"uint256","nodeType":"ElementaryTypeName","src":"5089:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2516,"mutability":"mutable","name":"exactBptAmountOut","nameLocation":"5126:17:22","nodeType":"VariableDeclaration","scope":2525,"src":"5118:25:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2515,"name":"uint256","nodeType":"ElementaryTypeName","src":"5118:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2518,"mutability":"mutable","name":"wethIsEth","nameLocation":"5158:9:22","nodeType":"VariableDeclaration","scope":2525,"src":"5153:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2517,"name":"bool","nodeType":"ElementaryTypeName","src":"5153:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2520,"mutability":"mutable","name":"userData","nameLocation":"5190:8:22","nodeType":"VariableDeclaration","scope":2525,"src":"5177:21:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2519,"name":"bytes","nodeType":"ElementaryTypeName","src":"5177:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5033:171:22"},"returnParameters":{"id":2524,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2523,"mutability":"mutable","name":"amountIn","nameLocation":"5239:8:22","nodeType":"VariableDeclaration","scope":2525,"src":"5231:16:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2522,"name":"uint256","nodeType":"ElementaryTypeName","src":"5231:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5230:18:22"},"scope":2917,"src":"4993:256:22","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2526,"nodeType":"StructuredDocumentation","src":"5255:530:22","text":" @notice Adds liquidity to a pool by donating the amounts in (no BPT out).\n @dev To support donation, the pool config `enableDonation` flag must be set to true.\n @param pool Address of the liquidity pool\n @param amountsIn Amounts of tokens to be donated, sorted in token registration order\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to donate liquidity"},"functionSelector":"bf6ee3fd","id":2538,"implemented":false,"kind":"function","modifiers":[],"name":"donate","nameLocation":"5799:6:22","nodeType":"FunctionDefinition","parameters":{"id":2536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2528,"mutability":"mutable","name":"pool","nameLocation":"5814:4:22","nodeType":"VariableDeclaration","scope":2538,"src":"5806:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2527,"name":"address","nodeType":"ElementaryTypeName","src":"5806:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2531,"mutability":"mutable","name":"amountsIn","nameLocation":"5837:9:22","nodeType":"VariableDeclaration","scope":2538,"src":"5820:26:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2529,"name":"uint256","nodeType":"ElementaryTypeName","src":"5820:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2530,"nodeType":"ArrayTypeName","src":"5820:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2533,"mutability":"mutable","name":"wethIsEth","nameLocation":"5853:9:22","nodeType":"VariableDeclaration","scope":2538,"src":"5848:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2532,"name":"bool","nodeType":"ElementaryTypeName","src":"5848:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2535,"mutability":"mutable","name":"userData","nameLocation":"5877:8:22","nodeType":"VariableDeclaration","scope":2538,"src":"5864:21:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2534,"name":"bytes","nodeType":"ElementaryTypeName","src":"5864:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5805:81:22"},"returnParameters":{"id":2537,"nodeType":"ParameterList","parameters":[],"src":"5903:0:22"},"scope":2917,"src":"5790:114:22","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2539,"nodeType":"StructuredDocumentation","src":"5910:954:22","text":" @notice Adds liquidity to a pool with a custom request.\n @dev The given maximum and minimum amounts given may be interpreted as exact depending on the pool type.\n In any case the caller can expect them to be hard boundaries for the request.\n @param pool Address of the liquidity pool\n @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n @param minBptAmountOut Minimum amount of pool tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to add liquidity\n @return amountsIn Actual amounts of tokens added, sorted in token registration order\n @return bptAmountOut Actual amount of pool tokens received\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"0ca078ec","id":2560,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityCustom","nameLocation":"6878:18:22","nodeType":"FunctionDefinition","parameters":{"id":2551,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2541,"mutability":"mutable","name":"pool","nameLocation":"6914:4:22","nodeType":"VariableDeclaration","scope":2560,"src":"6906:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2540,"name":"address","nodeType":"ElementaryTypeName","src":"6906:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2544,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"6945:12:22","nodeType":"VariableDeclaration","scope":2560,"src":"6928:29:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2542,"name":"uint256","nodeType":"ElementaryTypeName","src":"6928:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2543,"nodeType":"ArrayTypeName","src":"6928:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2546,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"6975:15:22","nodeType":"VariableDeclaration","scope":2560,"src":"6967:23:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2545,"name":"uint256","nodeType":"ElementaryTypeName","src":"6967:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2548,"mutability":"mutable","name":"wethIsEth","nameLocation":"7005:9:22","nodeType":"VariableDeclaration","scope":2560,"src":"7000:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2547,"name":"bool","nodeType":"ElementaryTypeName","src":"7000:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2550,"mutability":"mutable","name":"userData","nameLocation":"7037:8:22","nodeType":"VariableDeclaration","scope":2560,"src":"7024:21:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2549,"name":"bytes","nodeType":"ElementaryTypeName","src":"7024:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6896:155:22"},"returnParameters":{"id":2559,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2554,"mutability":"mutable","name":"amountsIn","nameLocation":"7095:9:22","nodeType":"VariableDeclaration","scope":2560,"src":"7078:26:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2552,"name":"uint256","nodeType":"ElementaryTypeName","src":"7078:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2553,"nodeType":"ArrayTypeName","src":"7078:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2556,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7114:12:22","nodeType":"VariableDeclaration","scope":2560,"src":"7106:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2555,"name":"uint256","nodeType":"ElementaryTypeName","src":"7106:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2558,"mutability":"mutable","name":"returnData","nameLocation":"7141:10:22","nodeType":"VariableDeclaration","scope":2560,"src":"7128:23:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2557,"name":"bytes","nodeType":"ElementaryTypeName","src":"7128:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7077:75:22"},"scope":2917,"src":"6869:284:22","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2561,"nodeType":"StructuredDocumentation","src":"7372:648:22","text":" @notice Removes liquidity with proportional token amounts from a pool, burning an exact pool token amount.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to remove liquidity\n @return amountsOut Actual amounts of tokens received, sorted in token registration order"},"functionSelector":"51682750","id":2578,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityProportional","nameLocation":"8034:27:22","nodeType":"FunctionDefinition","parameters":{"id":2573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2563,"mutability":"mutable","name":"pool","nameLocation":"8079:4:22","nodeType":"VariableDeclaration","scope":2578,"src":"8071:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2562,"name":"address","nodeType":"ElementaryTypeName","src":"8071:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2565,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"8101:16:22","nodeType":"VariableDeclaration","scope":2578,"src":"8093:24:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2564,"name":"uint256","nodeType":"ElementaryTypeName","src":"8093:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2568,"mutability":"mutable","name":"minAmountsOut","nameLocation":"8144:13:22","nodeType":"VariableDeclaration","scope":2578,"src":"8127:30:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2566,"name":"uint256","nodeType":"ElementaryTypeName","src":"8127:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2567,"nodeType":"ArrayTypeName","src":"8127:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2570,"mutability":"mutable","name":"wethIsEth","nameLocation":"8172:9:22","nodeType":"VariableDeclaration","scope":2578,"src":"8167:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2569,"name":"bool","nodeType":"ElementaryTypeName","src":"8167:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2572,"mutability":"mutable","name":"userData","nameLocation":"8204:8:22","nodeType":"VariableDeclaration","scope":2578,"src":"8191:21:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2571,"name":"bytes","nodeType":"ElementaryTypeName","src":"8191:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8061:157:22"},"returnParameters":{"id":2577,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2576,"mutability":"mutable","name":"amountsOut","nameLocation":"8262:10:22","nodeType":"VariableDeclaration","scope":2578,"src":"8245:27:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2574,"name":"uint256","nodeType":"ElementaryTypeName","src":"8245:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2575,"nodeType":"ArrayTypeName","src":"8245:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8244:29:22"},"scope":2917,"src":"8025:249:22","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2579,"nodeType":"StructuredDocumentation","src":"8280:613:22","text":" @notice Removes liquidity from a pool via a single token, burning an exact pool token amount.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided\n @param tokenOut Token used to remove liquidity\n @param minAmountOut Minimum amount of tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to remove liquidity\n @return amountOut Actual amount of tokens received"},"functionSelector":"ecb2182c","id":2597,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquiditySingleTokenExactIn","nameLocation":"8907:33:22","nodeType":"FunctionDefinition","parameters":{"id":2593,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2581,"mutability":"mutable","name":"pool","nameLocation":"8958:4:22","nodeType":"VariableDeclaration","scope":2597,"src":"8950:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2580,"name":"address","nodeType":"ElementaryTypeName","src":"8950:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2583,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"8980:16:22","nodeType":"VariableDeclaration","scope":2597,"src":"8972:24:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2582,"name":"uint256","nodeType":"ElementaryTypeName","src":"8972:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2586,"mutability":"mutable","name":"tokenOut","nameLocation":"9013:8:22","nodeType":"VariableDeclaration","scope":2597,"src":"9006:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":2585,"nodeType":"UserDefinedTypeName","pathNode":{"id":2584,"name":"IERC20","nameLocations":["9006:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"9006:6:22"},"referencedDeclaration":40109,"src":"9006:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2588,"mutability":"mutable","name":"minAmountOut","nameLocation":"9039:12:22","nodeType":"VariableDeclaration","scope":2597,"src":"9031:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2587,"name":"uint256","nodeType":"ElementaryTypeName","src":"9031:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2590,"mutability":"mutable","name":"wethIsEth","nameLocation":"9066:9:22","nodeType":"VariableDeclaration","scope":2597,"src":"9061:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2589,"name":"bool","nodeType":"ElementaryTypeName","src":"9061:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2592,"mutability":"mutable","name":"userData","nameLocation":"9098:8:22","nodeType":"VariableDeclaration","scope":2597,"src":"9085:21:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2591,"name":"bytes","nodeType":"ElementaryTypeName","src":"9085:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8940:172:22"},"returnParameters":{"id":2596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2595,"mutability":"mutable","name":"amountOut","nameLocation":"9147:9:22","nodeType":"VariableDeclaration","scope":2597,"src":"9139:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2594,"name":"uint256","nodeType":"ElementaryTypeName","src":"9139:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9138:19:22"},"scope":2917,"src":"8898:260:22","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2598,"nodeType":"StructuredDocumentation","src":"9164:632:22","text":" @notice Removes liquidity from a pool via a single token, specifying the exact amount of tokens to receive.\n @param pool Address of the liquidity pool\n @param maxBptAmountIn Maximum amount of pool tokens provided\n @param tokenOut Token used to remove liquidity\n @param exactAmountOut Exact amount of tokens to be received\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to remove liquidity\n @return bptAmountIn Actual amount of pool tokens burned"},"functionSelector":"e7326def","id":2616,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquiditySingleTokenExactOut","nameLocation":"9810:34:22","nodeType":"FunctionDefinition","parameters":{"id":2612,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2600,"mutability":"mutable","name":"pool","nameLocation":"9862:4:22","nodeType":"VariableDeclaration","scope":2616,"src":"9854:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2599,"name":"address","nodeType":"ElementaryTypeName","src":"9854:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2602,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"9884:14:22","nodeType":"VariableDeclaration","scope":2616,"src":"9876:22:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2601,"name":"uint256","nodeType":"ElementaryTypeName","src":"9876:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2605,"mutability":"mutable","name":"tokenOut","nameLocation":"9915:8:22","nodeType":"VariableDeclaration","scope":2616,"src":"9908:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":2604,"nodeType":"UserDefinedTypeName","pathNode":{"id":2603,"name":"IERC20","nameLocations":["9908:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"9908:6:22"},"referencedDeclaration":40109,"src":"9908:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2607,"mutability":"mutable","name":"exactAmountOut","nameLocation":"9941:14:22","nodeType":"VariableDeclaration","scope":2616,"src":"9933:22:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2606,"name":"uint256","nodeType":"ElementaryTypeName","src":"9933:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2609,"mutability":"mutable","name":"wethIsEth","nameLocation":"9970:9:22","nodeType":"VariableDeclaration","scope":2616,"src":"9965:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2608,"name":"bool","nodeType":"ElementaryTypeName","src":"9965:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2611,"mutability":"mutable","name":"userData","nameLocation":"10002:8:22","nodeType":"VariableDeclaration","scope":2616,"src":"9989:21:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2610,"name":"bytes","nodeType":"ElementaryTypeName","src":"9989:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9844:172:22"},"returnParameters":{"id":2615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2614,"mutability":"mutable","name":"bptAmountIn","nameLocation":"10051:11:22","nodeType":"VariableDeclaration","scope":2616,"src":"10043:19:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2613,"name":"uint256","nodeType":"ElementaryTypeName","src":"10043:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10042:21:22"},"scope":2917,"src":"9801:263:22","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2617,"nodeType":"StructuredDocumentation","src":"10070:960:22","text":" @notice Removes liquidity from a pool with a custom request.\n @dev The given maximum and minimum amounts given may be interpreted as exact depending on the pool type.\n In any case the caller can expect them to be hard boundaries for the request.\n @param pool Address of the liquidity pool\n @param maxBptAmountIn Maximum amount of pool tokens provided\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to remove liquidity\n @return bptAmountIn Actual amount of pool tokens burned\n @return amountsOut Actual amounts of tokens received, sorted in token registration order\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"82bf2b24","id":2638,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityCustom","nameLocation":"11044:21:22","nodeType":"FunctionDefinition","parameters":{"id":2629,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2619,"mutability":"mutable","name":"pool","nameLocation":"11083:4:22","nodeType":"VariableDeclaration","scope":2638,"src":"11075:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2618,"name":"address","nodeType":"ElementaryTypeName","src":"11075:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2621,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"11105:14:22","nodeType":"VariableDeclaration","scope":2638,"src":"11097:22:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2620,"name":"uint256","nodeType":"ElementaryTypeName","src":"11097:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2624,"mutability":"mutable","name":"minAmountsOut","nameLocation":"11146:13:22","nodeType":"VariableDeclaration","scope":2638,"src":"11129:30:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2622,"name":"uint256","nodeType":"ElementaryTypeName","src":"11129:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2623,"nodeType":"ArrayTypeName","src":"11129:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2626,"mutability":"mutable","name":"wethIsEth","nameLocation":"11174:9:22","nodeType":"VariableDeclaration","scope":2638,"src":"11169:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2625,"name":"bool","nodeType":"ElementaryTypeName","src":"11169:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2628,"mutability":"mutable","name":"userData","nameLocation":"11206:8:22","nodeType":"VariableDeclaration","scope":2638,"src":"11193:21:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2627,"name":"bytes","nodeType":"ElementaryTypeName","src":"11193:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11065:155:22"},"returnParameters":{"id":2637,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2631,"mutability":"mutable","name":"bptAmountIn","nameLocation":"11255:11:22","nodeType":"VariableDeclaration","scope":2638,"src":"11247:19:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2630,"name":"uint256","nodeType":"ElementaryTypeName","src":"11247:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2634,"mutability":"mutable","name":"amountsOut","nameLocation":"11285:10:22","nodeType":"VariableDeclaration","scope":2638,"src":"11268:27:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2632,"name":"uint256","nodeType":"ElementaryTypeName","src":"11268:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2633,"nodeType":"ArrayTypeName","src":"11268:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2636,"mutability":"mutable","name":"returnData","nameLocation":"11310:10:22","nodeType":"VariableDeclaration","scope":2638,"src":"11297:23:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2635,"name":"bytes","nodeType":"ElementaryTypeName","src":"11297:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11246:75:22"},"scope":2917,"src":"11035:287:22","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2639,"nodeType":"StructuredDocumentation","src":"11328:447:22","text":" @notice Removes liquidity proportionally, burning an exact pool token amount. Only available in Recovery Mode.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @return amountsOut Actual amounts of tokens received, sorted in token registration order"},"functionSelector":"08c04793","id":2652,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityRecovery","nameLocation":"11789:23:22","nodeType":"FunctionDefinition","parameters":{"id":2647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2641,"mutability":"mutable","name":"pool","nameLocation":"11830:4:22","nodeType":"VariableDeclaration","scope":2652,"src":"11822:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2640,"name":"address","nodeType":"ElementaryTypeName","src":"11822:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2643,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"11852:16:22","nodeType":"VariableDeclaration","scope":2652,"src":"11844:24:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2642,"name":"uint256","nodeType":"ElementaryTypeName","src":"11844:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2646,"mutability":"mutable","name":"minAmountsOut","nameLocation":"11895:13:22","nodeType":"VariableDeclaration","scope":2652,"src":"11878:30:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2644,"name":"uint256","nodeType":"ElementaryTypeName","src":"11878:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2645,"nodeType":"ArrayTypeName","src":"11878:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11812:102:22"},"returnParameters":{"id":2651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2650,"mutability":"mutable","name":"amountsOut","nameLocation":"11958:10:22","nodeType":"VariableDeclaration","scope":2652,"src":"11941:27:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2648,"name":"uint256","nodeType":"ElementaryTypeName","src":"11941:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2649,"nodeType":"ArrayTypeName","src":"11941:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11940:29:22"},"scope":2917,"src":"11780:190:22","stateMutability":"payable","virtual":false,"visibility":"external"},{"canonicalName":"IRouter.SwapSingleTokenHookParams","documentation":{"id":2653,"nodeType":"StructuredDocumentation","src":"12184:770:22","text":" @notice Data for the swap hook.\n @param sender Account initiating the swap operation\n @param kind Type of swap (exact in or exact out)\n @param pool Address of the liquidity pool\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param amountGiven Amount given based on kind of the swap (e.g., tokenIn for exact in)\n @param limit Maximum or minimum amount based on the kind of swap (e.g., maxAmountIn for exact out)\n @param deadline Deadline for the swap, after which it will revert\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the swap request"},"id":2677,"members":[{"constant":false,"id":2655,"mutability":"mutable","name":"sender","nameLocation":"13010:6:22","nodeType":"VariableDeclaration","scope":2677,"src":"13002:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2654,"name":"address","nodeType":"ElementaryTypeName","src":"13002:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2658,"mutability":"mutable","name":"kind","nameLocation":"13035:4:22","nodeType":"VariableDeclaration","scope":2677,"src":"13026:13:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},"typeName":{"id":2657,"nodeType":"UserDefinedTypeName","pathNode":{"id":2656,"name":"SwapKind","nameLocations":["13026:8:22"],"nodeType":"IdentifierPath","referencedDeclaration":4735,"src":"13026:8:22"},"referencedDeclaration":4735,"src":"13026:8:22","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":2660,"mutability":"mutable","name":"pool","nameLocation":"13057:4:22","nodeType":"VariableDeclaration","scope":2677,"src":"13049:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2659,"name":"address","nodeType":"ElementaryTypeName","src":"13049:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2663,"mutability":"mutable","name":"tokenIn","nameLocation":"13078:7:22","nodeType":"VariableDeclaration","scope":2677,"src":"13071:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":2662,"nodeType":"UserDefinedTypeName","pathNode":{"id":2661,"name":"IERC20","nameLocations":["13071:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"13071:6:22"},"referencedDeclaration":40109,"src":"13071:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2666,"mutability":"mutable","name":"tokenOut","nameLocation":"13102:8:22","nodeType":"VariableDeclaration","scope":2677,"src":"13095:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":2665,"nodeType":"UserDefinedTypeName","pathNode":{"id":2664,"name":"IERC20","nameLocations":["13095:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"13095:6:22"},"referencedDeclaration":40109,"src":"13095:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2668,"mutability":"mutable","name":"amountGiven","nameLocation":"13128:11:22","nodeType":"VariableDeclaration","scope":2677,"src":"13120:19:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2667,"name":"uint256","nodeType":"ElementaryTypeName","src":"13120:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2670,"mutability":"mutable","name":"limit","nameLocation":"13157:5:22","nodeType":"VariableDeclaration","scope":2677,"src":"13149:13:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2669,"name":"uint256","nodeType":"ElementaryTypeName","src":"13149:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2672,"mutability":"mutable","name":"deadline","nameLocation":"13180:8:22","nodeType":"VariableDeclaration","scope":2677,"src":"13172:16:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2671,"name":"uint256","nodeType":"ElementaryTypeName","src":"13172:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2674,"mutability":"mutable","name":"wethIsEth","nameLocation":"13203:9:22","nodeType":"VariableDeclaration","scope":2677,"src":"13198:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2673,"name":"bool","nodeType":"ElementaryTypeName","src":"13198:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2676,"mutability":"mutable","name":"userData","nameLocation":"13228:8:22","nodeType":"VariableDeclaration","scope":2677,"src":"13222:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2675,"name":"bytes","nodeType":"ElementaryTypeName","src":"13222:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"SwapSingleTokenHookParams","nameLocation":"12966:25:22","nodeType":"StructDefinition","scope":2917,"src":"12959:284:22","visibility":"public"},{"documentation":{"id":2678,"nodeType":"StructuredDocumentation","src":"13249:744:22","text":" @notice Executes a swap operation specifying an exact input token amount.\n @param pool Address of the liquidity pool\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param exactAmountIn Exact amounts of input tokens to send\n @param minAmountOut Minimum amount of tokens to be received\n @param deadline Deadline for the swap, after which it will revert\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the swap request\n @return amountOut Calculated amount of output tokens to be received in exchange for the given input tokens"},"functionSelector":"750283bc","id":2701,"implemented":false,"kind":"function","modifiers":[],"name":"swapSingleTokenExactIn","nameLocation":"14007:22:22","nodeType":"FunctionDefinition","parameters":{"id":2697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2680,"mutability":"mutable","name":"pool","nameLocation":"14047:4:22","nodeType":"VariableDeclaration","scope":2701,"src":"14039:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2679,"name":"address","nodeType":"ElementaryTypeName","src":"14039:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2683,"mutability":"mutable","name":"tokenIn","nameLocation":"14068:7:22","nodeType":"VariableDeclaration","scope":2701,"src":"14061:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":2682,"nodeType":"UserDefinedTypeName","pathNode":{"id":2681,"name":"IERC20","nameLocations":["14061:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"14061:6:22"},"referencedDeclaration":40109,"src":"14061:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2686,"mutability":"mutable","name":"tokenOut","nameLocation":"14092:8:22","nodeType":"VariableDeclaration","scope":2701,"src":"14085:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":2685,"nodeType":"UserDefinedTypeName","pathNode":{"id":2684,"name":"IERC20","nameLocations":["14085:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"14085:6:22"},"referencedDeclaration":40109,"src":"14085:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2688,"mutability":"mutable","name":"exactAmountIn","nameLocation":"14118:13:22","nodeType":"VariableDeclaration","scope":2701,"src":"14110:21:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2687,"name":"uint256","nodeType":"ElementaryTypeName","src":"14110:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2690,"mutability":"mutable","name":"minAmountOut","nameLocation":"14149:12:22","nodeType":"VariableDeclaration","scope":2701,"src":"14141:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2689,"name":"uint256","nodeType":"ElementaryTypeName","src":"14141:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2692,"mutability":"mutable","name":"deadline","nameLocation":"14179:8:22","nodeType":"VariableDeclaration","scope":2701,"src":"14171:16:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2691,"name":"uint256","nodeType":"ElementaryTypeName","src":"14171:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2694,"mutability":"mutable","name":"wethIsEth","nameLocation":"14202:9:22","nodeType":"VariableDeclaration","scope":2701,"src":"14197:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2693,"name":"bool","nodeType":"ElementaryTypeName","src":"14197:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2696,"mutability":"mutable","name":"userData","nameLocation":"14236:8:22","nodeType":"VariableDeclaration","scope":2701,"src":"14221:23:22","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2695,"name":"bytes","nodeType":"ElementaryTypeName","src":"14221:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"14029:221:22"},"returnParameters":{"id":2700,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2699,"mutability":"mutable","name":"amountOut","nameLocation":"14285:9:22","nodeType":"VariableDeclaration","scope":2701,"src":"14277:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2698,"name":"uint256","nodeType":"ElementaryTypeName","src":"14277:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14276:19:22"},"scope":2917,"src":"13998:298:22","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2702,"nodeType":"StructuredDocumentation","src":"14302:743:22","text":" @notice Executes a swap operation specifying an exact output token amount.\n @param pool Address of the liquidity pool\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param exactAmountOut Exact amounts of input tokens to receive\n @param maxAmountIn Maximum amount of tokens to be sent\n @param deadline Deadline for the swap, after which it will revert\n @param userData Additional (optional) data sent with the swap request\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @return amountIn Calculated amount of input tokens to be sent in exchange for the requested output tokens"},"functionSelector":"94e86ef8","id":2725,"implemented":false,"kind":"function","modifiers":[],"name":"swapSingleTokenExactOut","nameLocation":"15059:23:22","nodeType":"FunctionDefinition","parameters":{"id":2721,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2704,"mutability":"mutable","name":"pool","nameLocation":"15100:4:22","nodeType":"VariableDeclaration","scope":2725,"src":"15092:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2703,"name":"address","nodeType":"ElementaryTypeName","src":"15092:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2707,"mutability":"mutable","name":"tokenIn","nameLocation":"15121:7:22","nodeType":"VariableDeclaration","scope":2725,"src":"15114:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":2706,"nodeType":"UserDefinedTypeName","pathNode":{"id":2705,"name":"IERC20","nameLocations":["15114:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"15114:6:22"},"referencedDeclaration":40109,"src":"15114:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2710,"mutability":"mutable","name":"tokenOut","nameLocation":"15145:8:22","nodeType":"VariableDeclaration","scope":2725,"src":"15138:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":2709,"nodeType":"UserDefinedTypeName","pathNode":{"id":2708,"name":"IERC20","nameLocations":["15138:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"15138:6:22"},"referencedDeclaration":40109,"src":"15138:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2712,"mutability":"mutable","name":"exactAmountOut","nameLocation":"15171:14:22","nodeType":"VariableDeclaration","scope":2725,"src":"15163:22:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2711,"name":"uint256","nodeType":"ElementaryTypeName","src":"15163:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2714,"mutability":"mutable","name":"maxAmountIn","nameLocation":"15203:11:22","nodeType":"VariableDeclaration","scope":2725,"src":"15195:19:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2713,"name":"uint256","nodeType":"ElementaryTypeName","src":"15195:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2716,"mutability":"mutable","name":"deadline","nameLocation":"15232:8:22","nodeType":"VariableDeclaration","scope":2725,"src":"15224:16:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2715,"name":"uint256","nodeType":"ElementaryTypeName","src":"15224:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2718,"mutability":"mutable","name":"wethIsEth","nameLocation":"15255:9:22","nodeType":"VariableDeclaration","scope":2725,"src":"15250:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2717,"name":"bool","nodeType":"ElementaryTypeName","src":"15250:4:22","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2720,"mutability":"mutable","name":"userData","nameLocation":"15289:8:22","nodeType":"VariableDeclaration","scope":2725,"src":"15274:23:22","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2719,"name":"bytes","nodeType":"ElementaryTypeName","src":"15274:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"15082:221:22"},"returnParameters":{"id":2724,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2723,"mutability":"mutable","name":"amountIn","nameLocation":"15338:8:22","nodeType":"VariableDeclaration","scope":2725,"src":"15330:16:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2722,"name":"uint256","nodeType":"ElementaryTypeName","src":"15330:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15329:18:22"},"scope":2917,"src":"15050:298:22","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":2726,"nodeType":"StructuredDocumentation","src":"15563:518:22","text":" @notice Queries an `addLiquidityProportional` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param exactBptAmountOut Exact amount of pool tokens to be received\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountsIn Expected amounts of tokens to add, sorted in token registration order"},"functionSelector":"9de90518","id":2740,"implemented":false,"kind":"function","modifiers":[],"name":"queryAddLiquidityProportional","nameLocation":"16095:29:22","nodeType":"FunctionDefinition","parameters":{"id":2735,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2728,"mutability":"mutable","name":"pool","nameLocation":"16142:4:22","nodeType":"VariableDeclaration","scope":2740,"src":"16134:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2727,"name":"address","nodeType":"ElementaryTypeName","src":"16134:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2730,"mutability":"mutable","name":"exactBptAmountOut","nameLocation":"16164:17:22","nodeType":"VariableDeclaration","scope":2740,"src":"16156:25:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2729,"name":"uint256","nodeType":"ElementaryTypeName","src":"16156:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2732,"mutability":"mutable","name":"sender","nameLocation":"16199:6:22","nodeType":"VariableDeclaration","scope":2740,"src":"16191:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2731,"name":"address","nodeType":"ElementaryTypeName","src":"16191:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2734,"mutability":"mutable","name":"userData","nameLocation":"16228:8:22","nodeType":"VariableDeclaration","scope":2740,"src":"16215:21:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2733,"name":"bytes","nodeType":"ElementaryTypeName","src":"16215:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"16124:118:22"},"returnParameters":{"id":2739,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2738,"mutability":"mutable","name":"amountsIn","nameLocation":"16278:9:22","nodeType":"VariableDeclaration","scope":2740,"src":"16261:26:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2736,"name":"uint256","nodeType":"ElementaryTypeName","src":"16261:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2737,"nodeType":"ArrayTypeName","src":"16261:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"16260:28:22"},"scope":2917,"src":"16086:203:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2741,"nodeType":"StructuredDocumentation","src":"16295:517:22","text":" @notice Queries an `addLiquidityUnbalanced` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param exactAmountsIn Exact amounts of tokens to be added, sorted in token registration order\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return bptAmountOut Expected amount of pool tokens to receive"},"functionSelector":"da001f7d","id":2755,"implemented":false,"kind":"function","modifiers":[],"name":"queryAddLiquidityUnbalanced","nameLocation":"16826:27:22","nodeType":"FunctionDefinition","parameters":{"id":2751,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2743,"mutability":"mutable","name":"pool","nameLocation":"16871:4:22","nodeType":"VariableDeclaration","scope":2755,"src":"16863:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2742,"name":"address","nodeType":"ElementaryTypeName","src":"16863:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2746,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"16902:14:22","nodeType":"VariableDeclaration","scope":2755,"src":"16885:31:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2744,"name":"uint256","nodeType":"ElementaryTypeName","src":"16885:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2745,"nodeType":"ArrayTypeName","src":"16885:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2748,"mutability":"mutable","name":"sender","nameLocation":"16934:6:22","nodeType":"VariableDeclaration","scope":2755,"src":"16926:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2747,"name":"address","nodeType":"ElementaryTypeName","src":"16926:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2750,"mutability":"mutable","name":"userData","nameLocation":"16963:8:22","nodeType":"VariableDeclaration","scope":2755,"src":"16950:21:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2749,"name":"bytes","nodeType":"ElementaryTypeName","src":"16950:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"16853:124:22"},"returnParameters":{"id":2754,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2753,"mutability":"mutable","name":"bptAmountOut","nameLocation":"17004:12:22","nodeType":"VariableDeclaration","scope":2755,"src":"16996:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2752,"name":"uint256","nodeType":"ElementaryTypeName","src":"16996:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16995:22:22"},"scope":2917,"src":"16817:201:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2756,"nodeType":"StructuredDocumentation","src":"17024:542:22","text":" @notice Queries an `addLiquiditySingleTokenExactOut` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param tokenIn Token used to add liquidity\n @param exactBptAmountOut Expected exact amount of pool tokens to receive\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountIn Expected amount of tokens to add"},"functionSelector":"1d56798d","id":2772,"implemented":false,"kind":"function","modifiers":[],"name":"queryAddLiquiditySingleTokenExactOut","nameLocation":"17580:36:22","nodeType":"FunctionDefinition","parameters":{"id":2768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2758,"mutability":"mutable","name":"pool","nameLocation":"17634:4:22","nodeType":"VariableDeclaration","scope":2772,"src":"17626:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2757,"name":"address","nodeType":"ElementaryTypeName","src":"17626:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2761,"mutability":"mutable","name":"tokenIn","nameLocation":"17655:7:22","nodeType":"VariableDeclaration","scope":2772,"src":"17648:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":2760,"nodeType":"UserDefinedTypeName","pathNode":{"id":2759,"name":"IERC20","nameLocations":["17648:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"17648:6:22"},"referencedDeclaration":40109,"src":"17648:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2763,"mutability":"mutable","name":"exactBptAmountOut","nameLocation":"17680:17:22","nodeType":"VariableDeclaration","scope":2772,"src":"17672:25:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2762,"name":"uint256","nodeType":"ElementaryTypeName","src":"17672:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2765,"mutability":"mutable","name":"sender","nameLocation":"17715:6:22","nodeType":"VariableDeclaration","scope":2772,"src":"17707:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2764,"name":"address","nodeType":"ElementaryTypeName","src":"17707:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2767,"mutability":"mutable","name":"userData","nameLocation":"17744:8:22","nodeType":"VariableDeclaration","scope":2772,"src":"17731:21:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2766,"name":"bytes","nodeType":"ElementaryTypeName","src":"17731:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"17616:142:22"},"returnParameters":{"id":2771,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2770,"mutability":"mutable","name":"amountIn","nameLocation":"17785:8:22","nodeType":"VariableDeclaration","scope":2772,"src":"17777:16:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2769,"name":"uint256","nodeType":"ElementaryTypeName","src":"17777:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17776:18:22"},"scope":2917,"src":"17571:224:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2773,"nodeType":"StructuredDocumentation","src":"17801:779:22","text":" @notice Queries an `addLiquidityCustom` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n @param minBptAmountOut Expected minimum amount of pool tokens to receive\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountsIn Expected amounts of tokens to add, sorted in token registration order\n @return bptAmountOut Expected amount of pool tokens to receive\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"452db952","id":2794,"implemented":false,"kind":"function","modifiers":[],"name":"queryAddLiquidityCustom","nameLocation":"18594:23:22","nodeType":"FunctionDefinition","parameters":{"id":2785,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2775,"mutability":"mutable","name":"pool","nameLocation":"18635:4:22","nodeType":"VariableDeclaration","scope":2794,"src":"18627:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2774,"name":"address","nodeType":"ElementaryTypeName","src":"18627:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2778,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"18666:12:22","nodeType":"VariableDeclaration","scope":2794,"src":"18649:29:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2776,"name":"uint256","nodeType":"ElementaryTypeName","src":"18649:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2777,"nodeType":"ArrayTypeName","src":"18649:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2780,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"18696:15:22","nodeType":"VariableDeclaration","scope":2794,"src":"18688:23:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2779,"name":"uint256","nodeType":"ElementaryTypeName","src":"18688:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2782,"mutability":"mutable","name":"sender","nameLocation":"18729:6:22","nodeType":"VariableDeclaration","scope":2794,"src":"18721:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2781,"name":"address","nodeType":"ElementaryTypeName","src":"18721:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2784,"mutability":"mutable","name":"userData","nameLocation":"18758:8:22","nodeType":"VariableDeclaration","scope":2794,"src":"18745:21:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2783,"name":"bytes","nodeType":"ElementaryTypeName","src":"18745:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"18617:155:22"},"returnParameters":{"id":2793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2788,"mutability":"mutable","name":"amountsIn","nameLocation":"18808:9:22","nodeType":"VariableDeclaration","scope":2794,"src":"18791:26:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2786,"name":"uint256","nodeType":"ElementaryTypeName","src":"18791:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2787,"nodeType":"ArrayTypeName","src":"18791:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2790,"mutability":"mutable","name":"bptAmountOut","nameLocation":"18827:12:22","nodeType":"VariableDeclaration","scope":2794,"src":"18819:20:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2789,"name":"uint256","nodeType":"ElementaryTypeName","src":"18819:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2792,"mutability":"mutable","name":"returnData","nameLocation":"18854:10:22","nodeType":"VariableDeclaration","scope":2794,"src":"18841:23:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2791,"name":"bytes","nodeType":"ElementaryTypeName","src":"18841:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"18790:75:22"},"scope":2917,"src":"18585:281:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2795,"nodeType":"StructuredDocumentation","src":"18872:532:22","text":" @notice Queries a `removeLiquidityProportional` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided for the query\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountsOut Expected amounts of tokens to receive, sorted in token registration order"},"functionSelector":"0f710888","id":2809,"implemented":false,"kind":"function","modifiers":[],"name":"queryRemoveLiquidityProportional","nameLocation":"19418:32:22","nodeType":"FunctionDefinition","parameters":{"id":2804,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2797,"mutability":"mutable","name":"pool","nameLocation":"19468:4:22","nodeType":"VariableDeclaration","scope":2809,"src":"19460:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2796,"name":"address","nodeType":"ElementaryTypeName","src":"19460:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2799,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"19490:16:22","nodeType":"VariableDeclaration","scope":2809,"src":"19482:24:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2798,"name":"uint256","nodeType":"ElementaryTypeName","src":"19482:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2801,"mutability":"mutable","name":"sender","nameLocation":"19524:6:22","nodeType":"VariableDeclaration","scope":2809,"src":"19516:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2800,"name":"address","nodeType":"ElementaryTypeName","src":"19516:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2803,"mutability":"mutable","name":"userData","nameLocation":"19553:8:22","nodeType":"VariableDeclaration","scope":2809,"src":"19540:21:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2802,"name":"bytes","nodeType":"ElementaryTypeName","src":"19540:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"19450:117:22"},"returnParameters":{"id":2808,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2807,"mutability":"mutable","name":"amountsOut","nameLocation":"19603:10:22","nodeType":"VariableDeclaration","scope":2809,"src":"19586:27:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2805,"name":"uint256","nodeType":"ElementaryTypeName","src":"19586:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2806,"nodeType":"ArrayTypeName","src":"19586:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"19585:29:22"},"scope":2917,"src":"19409:206:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2810,"nodeType":"StructuredDocumentation","src":"19621:554:22","text":" @notice Queries a `removeLiquiditySingleTokenExactIn` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided for the query\n @param tokenOut Token used to remove liquidity\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountOut Expected amount of tokens to receive"},"functionSelector":"23b39241","id":2826,"implemented":false,"kind":"function","modifiers":[],"name":"queryRemoveLiquiditySingleTokenExactIn","nameLocation":"20189:38:22","nodeType":"FunctionDefinition","parameters":{"id":2822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2812,"mutability":"mutable","name":"pool","nameLocation":"20245:4:22","nodeType":"VariableDeclaration","scope":2826,"src":"20237:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2811,"name":"address","nodeType":"ElementaryTypeName","src":"20237:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2814,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"20267:16:22","nodeType":"VariableDeclaration","scope":2826,"src":"20259:24:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2813,"name":"uint256","nodeType":"ElementaryTypeName","src":"20259:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2817,"mutability":"mutable","name":"tokenOut","nameLocation":"20300:8:22","nodeType":"VariableDeclaration","scope":2826,"src":"20293:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":2816,"nodeType":"UserDefinedTypeName","pathNode":{"id":2815,"name":"IERC20","nameLocations":["20293:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"20293:6:22"},"referencedDeclaration":40109,"src":"20293:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2819,"mutability":"mutable","name":"sender","nameLocation":"20326:6:22","nodeType":"VariableDeclaration","scope":2826,"src":"20318:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2818,"name":"address","nodeType":"ElementaryTypeName","src":"20318:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2821,"mutability":"mutable","name":"userData","nameLocation":"20355:8:22","nodeType":"VariableDeclaration","scope":2826,"src":"20342:21:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2820,"name":"bytes","nodeType":"ElementaryTypeName","src":"20342:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"20227:142:22"},"returnParameters":{"id":2825,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2824,"mutability":"mutable","name":"amountOut","nameLocation":"20396:9:22","nodeType":"VariableDeclaration","scope":2826,"src":"20388:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2823,"name":"uint256","nodeType":"ElementaryTypeName","src":"20388:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20387:19:22"},"scope":2917,"src":"20180:227:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2827,"nodeType":"StructuredDocumentation","src":"20413:549:22","text":" @notice Queries a `removeLiquiditySingleTokenExactOut` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param tokenOut Token used to remove liquidity\n @param exactAmountOut Expected exact amount of tokens to receive\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return bptAmountIn Expected amount of pool tokens to burn"},"functionSelector":"53d0bb98","id":2843,"implemented":false,"kind":"function","modifiers":[],"name":"queryRemoveLiquiditySingleTokenExactOut","nameLocation":"20976:39:22","nodeType":"FunctionDefinition","parameters":{"id":2839,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2829,"mutability":"mutable","name":"pool","nameLocation":"21033:4:22","nodeType":"VariableDeclaration","scope":2843,"src":"21025:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2828,"name":"address","nodeType":"ElementaryTypeName","src":"21025:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2832,"mutability":"mutable","name":"tokenOut","nameLocation":"21054:8:22","nodeType":"VariableDeclaration","scope":2843,"src":"21047:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":2831,"nodeType":"UserDefinedTypeName","pathNode":{"id":2830,"name":"IERC20","nameLocations":["21047:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"21047:6:22"},"referencedDeclaration":40109,"src":"21047:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2834,"mutability":"mutable","name":"exactAmountOut","nameLocation":"21080:14:22","nodeType":"VariableDeclaration","scope":2843,"src":"21072:22:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2833,"name":"uint256","nodeType":"ElementaryTypeName","src":"21072:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2836,"mutability":"mutable","name":"sender","nameLocation":"21112:6:22","nodeType":"VariableDeclaration","scope":2843,"src":"21104:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2835,"name":"address","nodeType":"ElementaryTypeName","src":"21104:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2838,"mutability":"mutable","name":"userData","nameLocation":"21141:8:22","nodeType":"VariableDeclaration","scope":2843,"src":"21128:21:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2837,"name":"bytes","nodeType":"ElementaryTypeName","src":"21128:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21015:140:22"},"returnParameters":{"id":2842,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2841,"mutability":"mutable","name":"bptAmountIn","nameLocation":"21182:11:22","nodeType":"VariableDeclaration","scope":2843,"src":"21174:19:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2840,"name":"uint256","nodeType":"ElementaryTypeName","src":"21174:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"21173:21:22"},"scope":2917,"src":"20967:228:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2844,"nodeType":"StructuredDocumentation","src":"21201:779:22","text":" @notice Queries a `removeLiquidityCustom` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param maxBptAmountIn Maximum amount of pool tokens provided\n @param minAmountsOut Expected minimum amounts of tokens to receive, sorted in token registration order\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return bptAmountIn Expected amount of pool tokens to burn\n @return amountsOut Expected amounts of tokens to receive, sorted in token registration order\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"c330c7be","id":2865,"implemented":false,"kind":"function","modifiers":[],"name":"queryRemoveLiquidityCustom","nameLocation":"21994:26:22","nodeType":"FunctionDefinition","parameters":{"id":2856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2846,"mutability":"mutable","name":"pool","nameLocation":"22038:4:22","nodeType":"VariableDeclaration","scope":2865,"src":"22030:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2845,"name":"address","nodeType":"ElementaryTypeName","src":"22030:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2848,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"22060:14:22","nodeType":"VariableDeclaration","scope":2865,"src":"22052:22:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2847,"name":"uint256","nodeType":"ElementaryTypeName","src":"22052:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2851,"mutability":"mutable","name":"minAmountsOut","nameLocation":"22101:13:22","nodeType":"VariableDeclaration","scope":2865,"src":"22084:30:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2849,"name":"uint256","nodeType":"ElementaryTypeName","src":"22084:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2850,"nodeType":"ArrayTypeName","src":"22084:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2853,"mutability":"mutable","name":"sender","nameLocation":"22132:6:22","nodeType":"VariableDeclaration","scope":2865,"src":"22124:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2852,"name":"address","nodeType":"ElementaryTypeName","src":"22124:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2855,"mutability":"mutable","name":"userData","nameLocation":"22161:8:22","nodeType":"VariableDeclaration","scope":2865,"src":"22148:21:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2854,"name":"bytes","nodeType":"ElementaryTypeName","src":"22148:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"22020:155:22"},"returnParameters":{"id":2864,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2858,"mutability":"mutable","name":"bptAmountIn","nameLocation":"22202:11:22","nodeType":"VariableDeclaration","scope":2865,"src":"22194:19:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2857,"name":"uint256","nodeType":"ElementaryTypeName","src":"22194:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2861,"mutability":"mutable","name":"amountsOut","nameLocation":"22232:10:22","nodeType":"VariableDeclaration","scope":2865,"src":"22215:27:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2859,"name":"uint256","nodeType":"ElementaryTypeName","src":"22215:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2860,"nodeType":"ArrayTypeName","src":"22215:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2863,"mutability":"mutable","name":"returnData","nameLocation":"22257:10:22","nodeType":"VariableDeclaration","scope":2865,"src":"22244:23:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":2862,"name":"bytes","nodeType":"ElementaryTypeName","src":"22244:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"22193:75:22"},"scope":2917,"src":"21985:284:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2866,"nodeType":"StructuredDocumentation","src":"22275:334:22","text":" @notice Queries a `removeLiquidityRecovery` operation without actually executing it.\n @param pool Address of the liquidity pool\n @param exactBptAmountIn Exact amount of pool tokens provided for the query\n @return amountsOut Expected amounts of tokens to receive, sorted in token registration order"},"functionSelector":"b037ed36","id":2876,"implemented":false,"kind":"function","modifiers":[],"name":"queryRemoveLiquidityRecovery","nameLocation":"22623:28:22","nodeType":"FunctionDefinition","parameters":{"id":2871,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2868,"mutability":"mutable","name":"pool","nameLocation":"22669:4:22","nodeType":"VariableDeclaration","scope":2876,"src":"22661:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2867,"name":"address","nodeType":"ElementaryTypeName","src":"22661:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2870,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"22691:16:22","nodeType":"VariableDeclaration","scope":2876,"src":"22683:24:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2869,"name":"uint256","nodeType":"ElementaryTypeName","src":"22683:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22651:62:22"},"returnParameters":{"id":2875,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2874,"mutability":"mutable","name":"amountsOut","nameLocation":"22749:10:22","nodeType":"VariableDeclaration","scope":2876,"src":"22732:27:22","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2872,"name":"uint256","nodeType":"ElementaryTypeName","src":"22732:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2873,"nodeType":"ArrayTypeName","src":"22732:9:22","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"22731:29:22"},"scope":2917,"src":"22614:147:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2877,"nodeType":"StructuredDocumentation","src":"22767:637:22","text":" @notice Queries a swap operation specifying an exact input token amount without actually executing it.\n @param pool Address of the liquidity pool\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param exactAmountIn Exact amounts of input tokens to send\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountOut Calculated amount of output tokens to be received in exchange for the given input tokens"},"functionSelector":"3ebc54e5","id":2896,"implemented":false,"kind":"function","modifiers":[],"name":"querySwapSingleTokenExactIn","nameLocation":"23418:27:22","nodeType":"FunctionDefinition","parameters":{"id":2892,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2879,"mutability":"mutable","name":"pool","nameLocation":"23463:4:22","nodeType":"VariableDeclaration","scope":2896,"src":"23455:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2878,"name":"address","nodeType":"ElementaryTypeName","src":"23455:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2882,"mutability":"mutable","name":"tokenIn","nameLocation":"23484:7:22","nodeType":"VariableDeclaration","scope":2896,"src":"23477:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":2881,"nodeType":"UserDefinedTypeName","pathNode":{"id":2880,"name":"IERC20","nameLocations":["23477:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"23477:6:22"},"referencedDeclaration":40109,"src":"23477:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2885,"mutability":"mutable","name":"tokenOut","nameLocation":"23508:8:22","nodeType":"VariableDeclaration","scope":2896,"src":"23501:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":2884,"nodeType":"UserDefinedTypeName","pathNode":{"id":2883,"name":"IERC20","nameLocations":["23501:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"23501:6:22"},"referencedDeclaration":40109,"src":"23501:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2887,"mutability":"mutable","name":"exactAmountIn","nameLocation":"23534:13:22","nodeType":"VariableDeclaration","scope":2896,"src":"23526:21:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2886,"name":"uint256","nodeType":"ElementaryTypeName","src":"23526:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2889,"mutability":"mutable","name":"sender","nameLocation":"23565:6:22","nodeType":"VariableDeclaration","scope":2896,"src":"23557:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2888,"name":"address","nodeType":"ElementaryTypeName","src":"23557:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2891,"mutability":"mutable","name":"userData","nameLocation":"23596:8:22","nodeType":"VariableDeclaration","scope":2896,"src":"23581:23:22","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2890,"name":"bytes","nodeType":"ElementaryTypeName","src":"23581:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"23445:165:22"},"returnParameters":{"id":2895,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2894,"mutability":"mutable","name":"amountOut","nameLocation":"23637:9:22","nodeType":"VariableDeclaration","scope":2896,"src":"23629:17:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2893,"name":"uint256","nodeType":"ElementaryTypeName","src":"23629:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23628:19:22"},"scope":2917,"src":"23409:239:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":2897,"nodeType":"StructuredDocumentation","src":"23654:641:22","text":" @notice Queries a swap operation specifying an exact output token amount without actually executing it.\n @param pool Address of the liquidity pool\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param exactAmountOut Exact amounts of input tokens to receive\n @param sender The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\n @param userData Additional (optional) data sent with the query request\n @return amountIn Calculated amount of input tokens to be sent in exchange for the requested output tokens"},"functionSelector":"175d4408","id":2916,"implemented":false,"kind":"function","modifiers":[],"name":"querySwapSingleTokenExactOut","nameLocation":"24309:28:22","nodeType":"FunctionDefinition","parameters":{"id":2912,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2899,"mutability":"mutable","name":"pool","nameLocation":"24355:4:22","nodeType":"VariableDeclaration","scope":2916,"src":"24347:12:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2898,"name":"address","nodeType":"ElementaryTypeName","src":"24347:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2902,"mutability":"mutable","name":"tokenIn","nameLocation":"24376:7:22","nodeType":"VariableDeclaration","scope":2916,"src":"24369:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":2901,"nodeType":"UserDefinedTypeName","pathNode":{"id":2900,"name":"IERC20","nameLocations":["24369:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"24369:6:22"},"referencedDeclaration":40109,"src":"24369:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2905,"mutability":"mutable","name":"tokenOut","nameLocation":"24400:8:22","nodeType":"VariableDeclaration","scope":2916,"src":"24393:15:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":2904,"nodeType":"UserDefinedTypeName","pathNode":{"id":2903,"name":"IERC20","nameLocations":["24393:6:22"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"24393:6:22"},"referencedDeclaration":40109,"src":"24393:6:22","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":2907,"mutability":"mutable","name":"exactAmountOut","nameLocation":"24426:14:22","nodeType":"VariableDeclaration","scope":2916,"src":"24418:22:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2906,"name":"uint256","nodeType":"ElementaryTypeName","src":"24418:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2909,"mutability":"mutable","name":"sender","nameLocation":"24458:6:22","nodeType":"VariableDeclaration","scope":2916,"src":"24450:14:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2908,"name":"address","nodeType":"ElementaryTypeName","src":"24450:7:22","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2911,"mutability":"mutable","name":"userData","nameLocation":"24489:8:22","nodeType":"VariableDeclaration","scope":2916,"src":"24474:23:22","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":2910,"name":"bytes","nodeType":"ElementaryTypeName","src":"24474:5:22","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"24337:166:22"},"returnParameters":{"id":2915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2914,"mutability":"mutable","name":"amountIn","nameLocation":"24530:8:22","nodeType":"VariableDeclaration","scope":2916,"src":"24522:16:22","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2913,"name":"uint256","nodeType":"ElementaryTypeName","src":"24522:7:22","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"24521:18:22"},"scope":2917,"src":"24300:240:22","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":2918,"src":"422:24120:22","usedErrors":[],"usedEvents":[]}],"src":"46:24497:22"},"id":22},"@balancer-labs/v3-interfaces/contracts/vault/IRouterCommon.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IRouterCommon.sol","exportedSymbols":{"AddLiquidityKind":[4807],"IAllowanceTransfer":[48558],"IPermit2":[48578],"IRouterCommon":[3025],"IWETH":[291],"RemoveLiquidityKind":[4828]},"id":3026,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":2919,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:23"},{"absolutePath":"permit2/src/interfaces/IAllowanceTransfer.sol","file":"permit2/src/interfaces/IAllowanceTransfer.sol","id":2921,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3026,"sourceUnit":48559,"src":"72:83:23","symbolAliases":[{"foreign":{"id":2920,"name":"IAllowanceTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48558,"src":"81:18:23","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"permit2/src/interfaces/IPermit2.sol","file":"permit2/src/interfaces/IPermit2.sol","id":2923,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3026,"sourceUnit":48579,"src":"156:63:23","symbolAliases":[{"foreign":{"id":2922,"name":"IPermit2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48578,"src":"165:8:23","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":2926,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3026,"sourceUnit":4872,"src":"220:73:23","symbolAliases":[{"foreign":{"id":2924,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4807,"src":"229:16:23","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":2925,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4828,"src":"247:19:23","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol","file":"../solidity-utils/misc/IWETH.sol","id":2928,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3026,"sourceUnit":292,"src":"295:57:23","symbolAliases":[{"foreign":{"id":2927,"name":"IWETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":291,"src":"304:5:23","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IRouterCommon","contractDependencies":[],"contractKind":"interface","documentation":{"id":2929,"nodeType":"StructuredDocumentation","src":"354:83:23","text":"@notice Interface for functions shared between the `Router` and `BatchRouter`."},"fullyImplemented":false,"id":3025,"linearizedBaseContracts":[3025],"name":"IRouterCommon","nameLocation":"447:13:23","nodeType":"ContractDefinition","nodes":[{"canonicalName":"IRouterCommon.AddLiquidityHookParams","documentation":{"id":2930,"nodeType":"StructuredDocumentation","src":"467:617:23","text":" @notice Data for the add liquidity hook.\n @param sender Account originating the add liquidity operation\n @param pool Address of the liquidity pool\n @param maxAmountsIn Maximum amounts of tokens to be added, sorted in token registration order\n @param minBptAmountOut Minimum amount of pool tokens to be received\n @param kind Type of join (e.g., single or multi-token)\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to add liquidity"},"id":2947,"members":[{"constant":false,"id":2932,"mutability":"mutable","name":"sender","nameLocation":"1137:6:23","nodeType":"VariableDeclaration","scope":2947,"src":"1129:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2931,"name":"address","nodeType":"ElementaryTypeName","src":"1129:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2934,"mutability":"mutable","name":"pool","nameLocation":"1161:4:23","nodeType":"VariableDeclaration","scope":2947,"src":"1153:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2933,"name":"address","nodeType":"ElementaryTypeName","src":"1153:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2937,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"1185:12:23","nodeType":"VariableDeclaration","scope":2947,"src":"1175:22:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2935,"name":"uint256","nodeType":"ElementaryTypeName","src":"1175:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2936,"nodeType":"ArrayTypeName","src":"1175:9:23","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2939,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"1215:15:23","nodeType":"VariableDeclaration","scope":2947,"src":"1207:23:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2938,"name":"uint256","nodeType":"ElementaryTypeName","src":"1207:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2942,"mutability":"mutable","name":"kind","nameLocation":"1257:4:23","nodeType":"VariableDeclaration","scope":2947,"src":"1240:21:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},"typeName":{"id":2941,"nodeType":"UserDefinedTypeName","pathNode":{"id":2940,"name":"AddLiquidityKind","nameLocations":["1240:16:23"],"nodeType":"IdentifierPath","referencedDeclaration":4807,"src":"1240:16:23"},"referencedDeclaration":4807,"src":"1240:16:23","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":2944,"mutability":"mutable","name":"wethIsEth","nameLocation":"1276:9:23","nodeType":"VariableDeclaration","scope":2947,"src":"1271:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2943,"name":"bool","nodeType":"ElementaryTypeName","src":"1271:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2946,"mutability":"mutable","name":"userData","nameLocation":"1301:8:23","nodeType":"VariableDeclaration","scope":2947,"src":"1295:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2945,"name":"bytes","nodeType":"ElementaryTypeName","src":"1295:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"AddLiquidityHookParams","nameLocation":"1096:22:23","nodeType":"StructDefinition","scope":3025,"src":"1089:227:23","visibility":"public"},{"canonicalName":"IRouterCommon.RemoveLiquidityHookParams","documentation":{"id":2948,"nodeType":"StructuredDocumentation","src":"1322:623:23","text":" @notice Data for the remove liquidity hook.\n @param sender Account originating the remove liquidity operation\n @param pool Address of the liquidity pool\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @param maxBptAmountIn Maximum amount of pool tokens provided\n @param kind Type of exit (e.g., single or multi-token)\n @param wethIsEth If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\n @param userData Additional (optional) data sent with the request to remove liquidity"},"id":2965,"members":[{"constant":false,"id":2950,"mutability":"mutable","name":"sender","nameLocation":"2001:6:23","nodeType":"VariableDeclaration","scope":2965,"src":"1993:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2949,"name":"address","nodeType":"ElementaryTypeName","src":"1993:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2952,"mutability":"mutable","name":"pool","nameLocation":"2025:4:23","nodeType":"VariableDeclaration","scope":2965,"src":"2017:12:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2951,"name":"address","nodeType":"ElementaryTypeName","src":"2017:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2955,"mutability":"mutable","name":"minAmountsOut","nameLocation":"2049:13:23","nodeType":"VariableDeclaration","scope":2965,"src":"2039:23:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":2953,"name":"uint256","nodeType":"ElementaryTypeName","src":"2039:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2954,"nodeType":"ArrayTypeName","src":"2039:9:23","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":2957,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"2080:14:23","nodeType":"VariableDeclaration","scope":2965,"src":"2072:22:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2956,"name":"uint256","nodeType":"ElementaryTypeName","src":"2072:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2960,"mutability":"mutable","name":"kind","nameLocation":"2124:4:23","nodeType":"VariableDeclaration","scope":2965,"src":"2104:24:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":2959,"nodeType":"UserDefinedTypeName","pathNode":{"id":2958,"name":"RemoveLiquidityKind","nameLocations":["2104:19:23"],"nodeType":"IdentifierPath","referencedDeclaration":4828,"src":"2104:19:23"},"referencedDeclaration":4828,"src":"2104:19:23","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":2962,"mutability":"mutable","name":"wethIsEth","nameLocation":"2143:9:23","nodeType":"VariableDeclaration","scope":2965,"src":"2138:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2961,"name":"bool","nodeType":"ElementaryTypeName","src":"2138:4:23","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":2964,"mutability":"mutable","name":"userData","nameLocation":"2168:8:23","nodeType":"VariableDeclaration","scope":2965,"src":"2162:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":2963,"name":"bytes","nodeType":"ElementaryTypeName","src":"2162:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"RemoveLiquidityHookParams","nameLocation":"1957:25:23","nodeType":"StructDefinition","scope":3025,"src":"1950:233:23","visibility":"public"},{"documentation":{"id":2966,"nodeType":"StructuredDocumentation","src":"2407:42:23","text":"@notice Returns WETH contract address."},"functionSelector":"107c279f","id":2972,"implemented":false,"kind":"function","modifiers":[],"name":"getWeth","nameLocation":"2463:7:23","nodeType":"FunctionDefinition","parameters":{"id":2967,"nodeType":"ParameterList","parameters":[],"src":"2470:2:23"},"returnParameters":{"id":2971,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2970,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2972,"src":"2496:5:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"},"typeName":{"id":2969,"nodeType":"UserDefinedTypeName","pathNode":{"id":2968,"name":"IWETH","nameLocations":["2496:5:23"],"nodeType":"IdentifierPath","referencedDeclaration":291,"src":"2496:5:23"},"referencedDeclaration":291,"src":"2496:5:23","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},"visibility":"internal"}],"src":"2495:7:23"},"scope":3025,"src":"2454:49:23","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":2973,"nodeType":"StructuredDocumentation","src":"2509:45:23","text":"@notice Returns Permit2 contract address."},"functionSelector":"1bbf2e23","id":2979,"implemented":false,"kind":"function","modifiers":[],"name":"getPermit2","nameLocation":"2568:10:23","nodeType":"FunctionDefinition","parameters":{"id":2974,"nodeType":"ParameterList","parameters":[],"src":"2578:2:23"},"returnParameters":{"id":2978,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2977,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2979,"src":"2604:8:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"},"typeName":{"id":2976,"nodeType":"UserDefinedTypeName","pathNode":{"id":2975,"name":"IPermit2","nameLocations":["2604:8:23"],"nodeType":"IdentifierPath","referencedDeclaration":48578,"src":"2604:8:23"},"referencedDeclaration":48578,"src":"2604:8:23","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"}},"visibility":"internal"}],"src":"2603:10:23"},"scope":3025,"src":"2559:55:23","stateMutability":"view","virtual":false,"visibility":"external"},{"canonicalName":"IRouterCommon.PermitApproval","id":2992,"members":[{"constant":false,"id":2981,"mutability":"mutable","name":"token","nameLocation":"2660:5:23","nodeType":"VariableDeclaration","scope":2992,"src":"2652:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2980,"name":"address","nodeType":"ElementaryTypeName","src":"2652:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2983,"mutability":"mutable","name":"owner","nameLocation":"2683:5:23","nodeType":"VariableDeclaration","scope":2992,"src":"2675:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2982,"name":"address","nodeType":"ElementaryTypeName","src":"2675:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2985,"mutability":"mutable","name":"spender","nameLocation":"2706:7:23","nodeType":"VariableDeclaration","scope":2992,"src":"2698:15:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2984,"name":"address","nodeType":"ElementaryTypeName","src":"2698:7:23","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2987,"mutability":"mutable","name":"amount","nameLocation":"2731:6:23","nodeType":"VariableDeclaration","scope":2992,"src":"2723:14:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2986,"name":"uint256","nodeType":"ElementaryTypeName","src":"2723:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2989,"mutability":"mutable","name":"nonce","nameLocation":"2755:5:23","nodeType":"VariableDeclaration","scope":2992,"src":"2747:13:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2988,"name":"uint256","nodeType":"ElementaryTypeName","src":"2747:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2991,"mutability":"mutable","name":"deadline","nameLocation":"2778:8:23","nodeType":"VariableDeclaration","scope":2992,"src":"2770:16:23","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2990,"name":"uint256","nodeType":"ElementaryTypeName","src":"2770:7:23","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"PermitApproval","nameLocation":"2627:14:23","nodeType":"StructDefinition","scope":3025,"src":"2620:173:23","visibility":"public"},{"documentation":{"id":2993,"nodeType":"StructuredDocumentation","src":"2799:687:23","text":" @notice Permits multiple allowances and executes a batch of function calls on this contract.\n @param permitBatch An array of `PermitApproval` structs, each representing an ERC20 permit request\n @param permitSignatures An array of bytes, corresponding to the permit request signature in `permitBatch`\n @param permit2Batch A batch of permit2 approvals\n @param permit2Signature A permit2 signature for the batch approval\n @param multicallData An array of bytes arrays, each representing an encoded function call on this contract\n @return results Array of bytes arrays, each representing the return data from each function call executed"},"functionSelector":"19c6989f","id":3014,"implemented":false,"kind":"function","modifiers":[],"name":"permitBatchAndCall","nameLocation":"3500:18:23","nodeType":"FunctionDefinition","parameters":{"id":3009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2997,"mutability":"mutable","name":"permitBatch","nameLocation":"3554:11:23","nodeType":"VariableDeclaration","scope":3014,"src":"3528:37:23","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_PermitApproval_$2992_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouterCommon.PermitApproval[]"},"typeName":{"baseType":{"id":2995,"nodeType":"UserDefinedTypeName","pathNode":{"id":2994,"name":"PermitApproval","nameLocations":["3528:14:23"],"nodeType":"IdentifierPath","referencedDeclaration":2992,"src":"3528:14:23"},"referencedDeclaration":2992,"src":"3528:14:23","typeDescriptions":{"typeIdentifier":"t_struct$_PermitApproval_$2992_storage_ptr","typeString":"struct IRouterCommon.PermitApproval"}},"id":2996,"nodeType":"ArrayTypeName","src":"3528:16:23","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_PermitApproval_$2992_storage_$dyn_storage_ptr","typeString":"struct IRouterCommon.PermitApproval[]"}},"visibility":"internal"},{"constant":false,"id":3000,"mutability":"mutable","name":"permitSignatures","nameLocation":"3592:16:23","nodeType":"VariableDeclaration","scope":3014,"src":"3575:33:23","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":2998,"name":"bytes","nodeType":"ElementaryTypeName","src":"3575:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":2999,"nodeType":"ArrayTypeName","src":"3575:7:23","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"},{"constant":false,"id":3003,"mutability":"mutable","name":"permit2Batch","nameLocation":"3658:12:23","nodeType":"VariableDeclaration","scope":3014,"src":"3618:52:23","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PermitBatch_$48445_calldata_ptr","typeString":"struct IAllowanceTransfer.PermitBatch"},"typeName":{"id":3002,"nodeType":"UserDefinedTypeName","pathNode":{"id":3001,"name":"IAllowanceTransfer.PermitBatch","nameLocations":["3618:18:23","3637:11:23"],"nodeType":"IdentifierPath","referencedDeclaration":48445,"src":"3618:30:23"},"referencedDeclaration":48445,"src":"3618:30:23","typeDescriptions":{"typeIdentifier":"t_struct$_PermitBatch_$48445_storage_ptr","typeString":"struct IAllowanceTransfer.PermitBatch"}},"visibility":"internal"},{"constant":false,"id":3005,"mutability":"mutable","name":"permit2Signature","nameLocation":"3695:16:23","nodeType":"VariableDeclaration","scope":3014,"src":"3680:31:23","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":3004,"name":"bytes","nodeType":"ElementaryTypeName","src":"3680:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":3008,"mutability":"mutable","name":"multicallData","nameLocation":"3738:13:23","nodeType":"VariableDeclaration","scope":3014,"src":"3721:30:23","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":3006,"name":"bytes","nodeType":"ElementaryTypeName","src":"3721:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":3007,"nodeType":"ArrayTypeName","src":"3721:7:23","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"3518:239:23"},"returnParameters":{"id":3013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3012,"mutability":"mutable","name":"results","nameLocation":"3799:7:23","nodeType":"VariableDeclaration","scope":3014,"src":"3784:22:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":3010,"name":"bytes","nodeType":"ElementaryTypeName","src":"3784:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":3011,"nodeType":"ArrayTypeName","src":"3784:7:23","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"3783:24:23"},"scope":3025,"src":"3491:317:23","stateMutability":"payable","virtual":false,"visibility":"external"},{"documentation":{"id":3015,"nodeType":"StructuredDocumentation","src":"3814:264:23","text":" @notice Executes a batch of function calls on this contract.\n @param data Encoded function calls to be executed in the batch.\n @return results Array of bytes arrays, each representing the return data from each function call executed."},"functionSelector":"ac9650d8","id":3024,"implemented":false,"kind":"function","modifiers":[],"name":"multicall","nameLocation":"4092:9:23","nodeType":"FunctionDefinition","parameters":{"id":3019,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3018,"mutability":"mutable","name":"data","nameLocation":"4119:4:23","nodeType":"VariableDeclaration","scope":3024,"src":"4102:21:23","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":3016,"name":"bytes","nodeType":"ElementaryTypeName","src":"4102:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":3017,"nodeType":"ArrayTypeName","src":"4102:7:23","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"4101:23:23"},"returnParameters":{"id":3023,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3022,"mutability":"mutable","name":"results","nameLocation":"4166:7:23","nodeType":"VariableDeclaration","scope":3024,"src":"4151:22:23","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":3020,"name":"bytes","nodeType":"ElementaryTypeName","src":"4151:5:23","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":3021,"nodeType":"ArrayTypeName","src":"4151:7:23","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"4150:24:23"},"scope":3025,"src":"4083:92:23","stateMutability":"payable","virtual":false,"visibility":"external"}],"scope":3026,"src":"437:3740:23","usedErrors":[],"usedEvents":[]}],"src":"46:4132:23"},"id":23},"@balancer-labs/v3-interfaces/contracts/vault/ISenderGuard.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/ISenderGuard.sol","exportedSymbols":{"ISenderGuard":[3041]},"id":3042,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3027,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:24"},{"abstract":false,"baseContracts":[],"canonicalName":"ISenderGuard","contractDependencies":[],"contractKind":"interface","documentation":{"id":3028,"nodeType":"StructuredDocumentation","src":"72:71:24","text":"@notice Interface for functions shared across all trusted routers."},"fullyImplemented":false,"id":3041,"linearizedBaseContracts":[3041],"name":"ISenderGuard","nameLocation":"153:12:24","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3029,"nodeType":"StructuredDocumentation","src":"172:67:24","text":"@notice Incoming ETH transfer from an address that is not WETH."},"errorSelector":"0540ddf6","id":3031,"name":"EthTransfer","nameLocation":"250:11:24","nodeType":"ErrorDefinition","parameters":{"id":3030,"nodeType":"ParameterList","parameters":[],"src":"261:2:24"},"src":"244:20:24"},{"documentation":{"id":3032,"nodeType":"StructuredDocumentation","src":"270:91:24","text":"@notice The swap transaction was not validated before the specified deadline timestamp."},"errorSelector":"e08b8af0","id":3034,"name":"SwapDeadline","nameLocation":"372:12:24","nodeType":"ErrorDefinition","parameters":{"id":3033,"nodeType":"ParameterList","parameters":[],"src":"384:2:24"},"src":"366:21:24"},{"documentation":{"id":3035,"nodeType":"StructuredDocumentation","src":"393:133:24","text":" @notice Get the first sender which initialized the call to Router.\n @return sender The address of the sender"},"functionSelector":"5e01eb5a","id":3040,"implemented":false,"kind":"function","modifiers":[],"name":"getSender","nameLocation":"540:9:24","nodeType":"FunctionDefinition","parameters":{"id":3036,"nodeType":"ParameterList","parameters":[],"src":"549:2:24"},"returnParameters":{"id":3039,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3038,"mutability":"mutable","name":"sender","nameLocation":"583:6:24","nodeType":"VariableDeclaration","scope":3040,"src":"575:14:24","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3037,"name":"address","nodeType":"ElementaryTypeName","src":"575:7:24","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"574:16:24"},"scope":3041,"src":"531:60:24","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3042,"src":"143:450:24","usedErrors":[3031,3034],"usedEvents":[]}],"src":"46:548:24"},"id":24},"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol","exportedSymbols":{"ISwapFeePercentageBounds":[3057]},"id":3058,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3043,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:25"},{"abstract":false,"baseContracts":[],"canonicalName":"ISwapFeePercentageBounds","contractDependencies":[],"contractKind":"interface","documentation":{"id":3044,"nodeType":"StructuredDocumentation","src":"72:1023:25","text":" @notice Return the minimum/maximum swap fee percentages for a pool.\n @dev The Vault does not enforce bounds on swap fee percentages; `IBasePool` implements this interface to ensure\n that new pool developers think about and set these bounds according to their specific pool type.\n A minimum swap fee might be necessary to ensure mathematical soundness (e.g., Weighted Pools, which use the power\n function in the invariant). A maximum swap fee is general protection for users. With no limits at the Vault level,\n a pool could specify a near 100% swap fee, effectively disabling trading. Though there are some use cases, such as\n LVR/MEV strategies, where a very high fee makes sense.\n Note that the Vault does ensure that dynamic and aggregate fees are less than 100% to prevent attempting to allocate\n more fees than were collected by the operation. The true `MAX_FEE_PERCENTAGE` is defined in VaultTypes.sol, and is\n the highest value below 100% that satisfies the precision requirements."},"fullyImplemented":false,"id":3057,"linearizedBaseContracts":[3057],"name":"ISwapFeePercentageBounds","nameLocation":"1106:24:25","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3045,"nodeType":"StructuredDocumentation","src":"1137:79:25","text":"@return minimumSwapFeePercentage The minimum swap fee percentage for a pool"},"functionSelector":"ce20ece7","id":3050,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumSwapFeePercentage","nameLocation":"1230:27:25","nodeType":"FunctionDefinition","parameters":{"id":3046,"nodeType":"ParameterList","parameters":[],"src":"1257:2:25"},"returnParameters":{"id":3049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3048,"mutability":"mutable","name":"minimumSwapFeePercentage","nameLocation":"1291:24:25","nodeType":"VariableDeclaration","scope":3050,"src":"1283:32:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3047,"name":"uint256","nodeType":"ElementaryTypeName","src":"1283:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1282:34:25"},"scope":3057,"src":"1221:96:25","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3051,"nodeType":"StructuredDocumentation","src":"1323:79:25","text":"@return maximumSwapFeePercentage The maximum swap fee percentage for a pool"},"functionSelector":"654cf15d","id":3056,"implemented":false,"kind":"function","modifiers":[],"name":"getMaximumSwapFeePercentage","nameLocation":"1416:27:25","nodeType":"FunctionDefinition","parameters":{"id":3052,"nodeType":"ParameterList","parameters":[],"src":"1443:2:25"},"returnParameters":{"id":3055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3054,"mutability":"mutable","name":"maximumSwapFeePercentage","nameLocation":"1477:24:25","nodeType":"VariableDeclaration","scope":3056,"src":"1469:32:25","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3053,"name":"uint256","nodeType":"ElementaryTypeName","src":"1469:7:25","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1468:34:25"},"scope":3057,"src":"1407:96:25","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3058,"src":"1096:409:25","usedErrors":[],"usedEvents":[]}],"src":"46:1460:25"},"id":25},"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol","exportedSymbols":{"IUnbalancedLiquidityInvariantRatioBounds":[3073]},"id":3074,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3059,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:26"},{"abstract":false,"baseContracts":[],"canonicalName":"IUnbalancedLiquidityInvariantRatioBounds","contractDependencies":[],"contractKind":"interface","documentation":{"id":3060,"nodeType":"StructuredDocumentation","src":"72:838:26","text":" @notice Return the minimum/maximum invariant ratios allowed during an unbalanced liquidity operation.\n @dev The Vault does not enforce any \"baseline\" bounds on invariant ratios, since such bounds are highly specific\n and dependent on the math of each pool type. Instead, the Vault reads invariant ratio bounds from the pools.\n `IBasePool` implements this interface to ensure that new pool developers think about and set these bounds according\n to their pool type's math.\n For instance, Balancer Weighted Pool math involves exponentiation (the `pow` function), which uses natural\n logarithms and a discrete Taylor series expansion to compute x^y values for the 18-decimal floating point numbers\n used in all Vault computations. See `LogExpMath` and `WeightedMath` for a derivation of the bounds for these pools."},"fullyImplemented":false,"id":3073,"linearizedBaseContracts":[3073],"name":"IUnbalancedLiquidityInvariantRatioBounds","nameLocation":"921:40:26","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3061,"nodeType":"StructuredDocumentation","src":"968:107:26","text":"@return minimumInvariantRatio The minimum invariant ratio for a pool during unbalanced remove liquidity"},"functionSelector":"b677fa56","id":3066,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumInvariantRatio","nameLocation":"1089:24:26","nodeType":"FunctionDefinition","parameters":{"id":3062,"nodeType":"ParameterList","parameters":[],"src":"1113:2:26"},"returnParameters":{"id":3065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3064,"mutability":"mutable","name":"minimumInvariantRatio","nameLocation":"1147:21:26","nodeType":"VariableDeclaration","scope":3066,"src":"1139:29:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3063,"name":"uint256","nodeType":"ElementaryTypeName","src":"1139:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1138:31:26"},"scope":3073,"src":"1080:90:26","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3067,"nodeType":"StructuredDocumentation","src":"1176:104:26","text":"@return maximumInvariantRatio The maximum invariant ratio for a pool during unbalanced add liquidity"},"functionSelector":"273c1adf","id":3072,"implemented":false,"kind":"function","modifiers":[],"name":"getMaximumInvariantRatio","nameLocation":"1294:24:26","nodeType":"FunctionDefinition","parameters":{"id":3068,"nodeType":"ParameterList","parameters":[],"src":"1318:2:26"},"returnParameters":{"id":3071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3070,"mutability":"mutable","name":"maximumInvariantRatio","nameLocation":"1352:21:26","nodeType":"VariableDeclaration","scope":3072,"src":"1344:29:26","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3069,"name":"uint256","nodeType":"ElementaryTypeName","src":"1344:7:26","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1343:31:26"},"scope":3073,"src":"1285:90:26","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3074,"src":"911:466:26","usedErrors":[],"usedEvents":[]}],"src":"46:1332:26"},"id":26},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","exportedSymbols":{"IAuthentication":[243],"IVault":[3111],"IVaultAdmin":[3401],"IVaultErrors":[3768],"IVaultEvents":[4007],"IVaultExtension":[4426],"IVaultMain":[4562]},"id":3112,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3075,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:27"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"../solidity-utils/helpers/IAuthentication.sol","id":3077,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3112,"sourceUnit":244,"src":"72:80:27","symbolAliases":[{"foreign":{"id":3076,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":243,"src":"81:15:27","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","file":"./IVaultExtension.sol","id":3079,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3112,"sourceUnit":4427,"src":"153:56:27","symbolAliases":[{"foreign":{"id":3078,"name":"IVaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4426,"src":"162:15:27","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"./IVaultErrors.sol","id":3081,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3112,"sourceUnit":3769,"src":"210:50:27","symbolAliases":[{"foreign":{"id":3080,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"219:12:27","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","file":"./IVaultEvents.sol","id":3083,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3112,"sourceUnit":4008,"src":"261:50:27","symbolAliases":[{"foreign":{"id":3082,"name":"IVaultEvents","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4007,"src":"270:12:27","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","file":"./IVaultAdmin.sol","id":3085,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3112,"sourceUnit":3402,"src":"312:48:27","symbolAliases":[{"foreign":{"id":3084,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3401,"src":"321:11:27","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","file":"./IVaultMain.sol","id":3087,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3112,"sourceUnit":4563,"src":"361:46:27","symbolAliases":[{"foreign":{"id":3086,"name":"IVaultMain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4562,"src":"370:10:27","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":3089,"name":"IVaultMain","nameLocations":["539:10:27"],"nodeType":"IdentifierPath","referencedDeclaration":4562,"src":"539:10:27"},"id":3090,"nodeType":"InheritanceSpecifier","src":"539:10:27"},{"baseName":{"id":3091,"name":"IVaultExtension","nameLocations":["551:15:27"],"nodeType":"IdentifierPath","referencedDeclaration":4426,"src":"551:15:27"},"id":3092,"nodeType":"InheritanceSpecifier","src":"551:15:27"},{"baseName":{"id":3093,"name":"IVaultAdmin","nameLocations":["568:11:27"],"nodeType":"IdentifierPath","referencedDeclaration":3401,"src":"568:11:27"},"id":3094,"nodeType":"InheritanceSpecifier","src":"568:11:27"},{"baseName":{"id":3095,"name":"IVaultErrors","nameLocations":["581:12:27"],"nodeType":"IdentifierPath","referencedDeclaration":3768,"src":"581:12:27"},"id":3096,"nodeType":"InheritanceSpecifier","src":"581:12:27"},{"baseName":{"id":3097,"name":"IVaultEvents","nameLocations":["595:12:27"],"nodeType":"IdentifierPath","referencedDeclaration":4007,"src":"595:12:27"},"id":3098,"nodeType":"InheritanceSpecifier","src":"595:12:27"},{"baseName":{"id":3099,"name":"IAuthentication","nameLocations":["609:15:27"],"nodeType":"IdentifierPath","referencedDeclaration":243,"src":"609:15:27"},"id":3100,"nodeType":"InheritanceSpecifier","src":"609:15:27"}],"canonicalName":"IVault","contractDependencies":[],"contractKind":"interface","documentation":{"id":3088,"nodeType":"StructuredDocumentation","src":"409:110:27","text":"@notice Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries."},"fullyImplemented":false,"id":3111,"linearizedBaseContracts":[3111,243,4007,3768,3401,4426,4562],"name":"IVault","nameLocation":"529:6:27","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[3129,4030],"documentation":{"id":3101,"nodeType":"StructuredDocumentation","src":"631:41:27","text":"@return vault The main Vault address."},"functionSelector":"fbfa77cf","id":3110,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"686:5:27","nodeType":"FunctionDefinition","overrides":{"id":3105,"nodeType":"OverrideSpecifier","overrides":[{"id":3103,"name":"IVaultAdmin","nameLocations":["717:11:27"],"nodeType":"IdentifierPath","referencedDeclaration":3401,"src":"717:11:27"},{"id":3104,"name":"IVaultExtension","nameLocations":["730:15:27"],"nodeType":"IdentifierPath","referencedDeclaration":4426,"src":"730:15:27"}],"src":"708:38:27"},"parameters":{"id":3102,"nodeType":"ParameterList","parameters":[],"src":"691:2:27"},"returnParameters":{"id":3109,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3108,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3110,"src":"756:6:27","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":3107,"nodeType":"UserDefinedTypeName","pathNode":{"id":3106,"name":"IVault","nameLocations":["756:6:27"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"756:6:27"},"referencedDeclaration":3111,"src":"756:6:27","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"}],"src":"755:8:27"},"scope":3111,"src":"677:87:27","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":3112,"src":"519:247:27","usedErrors":[234,3413,3418,3423,3428,3437,3443,3446,3449,3452,3455,3458,3461,3470,3473,3476,3479,3482,3485,3488,3491,3494,3497,3500,3503,3506,3509,3512,3518,3525,3532,3535,3538,3548,3558,3565,3568,3571,3574,3584,3594,3601,3604,3607,3610,3613,3616,3619,3622,3625,3630,3635,3640,3643,3646,3649,3652,3655,3660,3665,3670,3676,3682,3685,3693,3699,3705,3708,3711,3714,3719,3729,3739,3746,3749,3752,3755,3758,3761,3764,3767],"usedEvents":[3806,3811,3830,3842,3854,3872,3890,3895,3898,3901,3908,3915,3922,3929,3936,3942,3948,3960,3970,3980,3992,3997,4006]}],"src":"46:721:27"},"id":27},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","exportedSymbols":{"IAuthorizer":[1455],"IERC4626":[39833],"IProtocolFeeController":[2420],"IVault":[3111],"IVaultAdmin":[3401]},"id":3402,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3113,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:28"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":3115,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3402,"sourceUnit":39834,"src":"72:75:28","symbolAliases":[{"foreign":{"id":3114,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39833,"src":"81:8:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":3117,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3402,"sourceUnit":2421,"src":"149:70:28","symbolAliases":[{"foreign":{"id":3116,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2420,"src":"158:22:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":3119,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3402,"sourceUnit":1456,"src":"220:48:28","symbolAliases":[{"foreign":{"id":3118,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1455,"src":"229:11:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":3121,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3402,"sourceUnit":3112,"src":"269:38:28","symbolAliases":[{"foreign":{"id":3120,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"278:6:28","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultAdmin","contractDependencies":[],"contractKind":"interface","documentation":{"id":3122,"nodeType":"StructuredDocumentation","src":"309:276:28","text":" @notice Interface for functions defined on the `VaultAdmin` contract.\n @dev `VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations,\n as two delegate calls add gas to each call. Most of the permissioned calls are here."},"fullyImplemented":false,"id":3401,"linearizedBaseContracts":[3401],"name":"IVaultAdmin","nameLocation":"596:11:28","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3123,"nodeType":"StructuredDocumentation","src":"841:206:28","text":" @notice Returns the main Vault address.\n @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n @return vault The address of the main Vault"},"functionSelector":"fbfa77cf","id":3129,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"1061:5:28","nodeType":"FunctionDefinition","parameters":{"id":3124,"nodeType":"ParameterList","parameters":[],"src":"1066:2:28"},"returnParameters":{"id":3128,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3127,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":3129,"src":"1092:6:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":3126,"nodeType":"UserDefinedTypeName","pathNode":{"id":3125,"name":"IVault","nameLocations":["1092:6:28"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"1092:6:28"},"referencedDeclaration":3111,"src":"1092:6:28","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1091:8:28"},"scope":3401,"src":"1052:48:28","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3130,"nodeType":"StructuredDocumentation","src":"1106:326:28","text":" @notice Returns the Vault's pause window end time.\n @dev This value is immutable, and represents the timestamp after which the Vault can no longer be paused\n by governance. Balancer timestamps are 32 bits.\n @return pauseWindowEndTime The timestamp when the Vault's pause window ends"},"functionSelector":"8a8d123a","id":3135,"implemented":false,"kind":"function","modifiers":[],"name":"getPauseWindowEndTime","nameLocation":"1446:21:28","nodeType":"FunctionDefinition","parameters":{"id":3131,"nodeType":"ParameterList","parameters":[],"src":"1467:2:28"},"returnParameters":{"id":3134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3133,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"1500:18:28","nodeType":"VariableDeclaration","scope":3135,"src":"1493:25:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3132,"name":"uint32","nodeType":"ElementaryTypeName","src":"1493:6:28","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1492:27:28"},"scope":3401,"src":"1437:83:28","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3136,"nodeType":"StructuredDocumentation","src":"1526:414:28","text":" @notice Returns the Vault's buffer period duration.\n @dev This value is immutable. It represents the period during which, if paused, the Vault will remain paused.\n This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer\n timestamps are 32 bits.\n @return bufferPeriodDuration The length of the buffer period in seconds"},"functionSelector":"20c1fb7a","id":3141,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferPeriodDuration","nameLocation":"1954:23:28","nodeType":"FunctionDefinition","parameters":{"id":3137,"nodeType":"ParameterList","parameters":[],"src":"1977:2:28"},"returnParameters":{"id":3140,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3139,"mutability":"mutable","name":"bufferPeriodDuration","nameLocation":"2010:20:28","nodeType":"VariableDeclaration","scope":3141,"src":"2003:27:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3138,"name":"uint32","nodeType":"ElementaryTypeName","src":"2003:6:28","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2002:29:28"},"scope":3401,"src":"1945:87:28","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3142,"nodeType":"StructuredDocumentation","src":"2038:321:28","text":" @notice Returns the Vault's buffer period end time.\n @dev This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer\n timestamps are 32 bits.\n @return bufferPeriodEndTime The timestamp after which the Vault remains permanently unpaused"},"functionSelector":"cd51c12f","id":3147,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferPeriodEndTime","nameLocation":"2373:22:28","nodeType":"FunctionDefinition","parameters":{"id":3143,"nodeType":"ParameterList","parameters":[],"src":"2395:2:28"},"returnParameters":{"id":3146,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3145,"mutability":"mutable","name":"bufferPeriodEndTime","nameLocation":"2428:19:28","nodeType":"VariableDeclaration","scope":3147,"src":"2421:26:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3144,"name":"uint32","nodeType":"ElementaryTypeName","src":"2421:6:28","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2420:28:28"},"scope":3401,"src":"2364:85:28","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3148,"nodeType":"StructuredDocumentation","src":"2455:193:28","text":" @notice Get the minimum number of tokens in a pool.\n @dev We expect the vast majority of pools to be 2-token.\n @return minTokens The minimum token count of a pool"},"functionSelector":"a8175b27","id":3153,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumPoolTokens","nameLocation":"2662:20:28","nodeType":"FunctionDefinition","parameters":{"id":3149,"nodeType":"ParameterList","parameters":[],"src":"2682:2:28"},"returnParameters":{"id":3152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3151,"mutability":"mutable","name":"minTokens","nameLocation":"2716:9:28","nodeType":"VariableDeclaration","scope":3153,"src":"2708:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3150,"name":"uint256","nodeType":"ElementaryTypeName","src":"2708:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2707:19:28"},"scope":3401,"src":"2653:74:28","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":3154,"nodeType":"StructuredDocumentation","src":"2733:129:28","text":" @notice Get the maximum number of tokens in a pool.\n @return maxTokens The maximum token count of a pool"},"functionSelector":"2e42f4d5","id":3159,"implemented":false,"kind":"function","modifiers":[],"name":"getMaximumPoolTokens","nameLocation":"2876:20:28","nodeType":"FunctionDefinition","parameters":{"id":3155,"nodeType":"ParameterList","parameters":[],"src":"2896:2:28"},"returnParameters":{"id":3158,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3157,"mutability":"mutable","name":"maxTokens","nameLocation":"2930:9:28","nodeType":"VariableDeclaration","scope":3159,"src":"2922:17:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3156,"name":"uint256","nodeType":"ElementaryTypeName","src":"2922:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2921:19:28"},"scope":3401,"src":"2867:74:28","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":3160,"nodeType":"StructuredDocumentation","src":"2947:439:28","text":" @notice Get the minimum total supply of pool tokens (BPT) for an initialized pool.\n @dev This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT\n is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\n @return poolMinimumTotalSupply The minimum total supply a pool can have after initialization"},"functionSelector":"d0965a6b","id":3165,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolMinimumTotalSupply","nameLocation":"3400:25:28","nodeType":"FunctionDefinition","parameters":{"id":3161,"nodeType":"ParameterList","parameters":[],"src":"3425:2:28"},"returnParameters":{"id":3164,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3163,"mutability":"mutable","name":"poolMinimumTotalSupply","nameLocation":"3459:22:28","nodeType":"VariableDeclaration","scope":3165,"src":"3451:30:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3162,"name":"uint256","nodeType":"ElementaryTypeName","src":"3451:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3450:32:28"},"scope":3401,"src":"3391:92:28","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":3166,"nodeType":"StructuredDocumentation","src":"3489:502:28","text":" @notice Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\n @dev This prevents buffers from being completely drained. When the buffer is initialized, this minimum number\n of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal\n to the Vault, as buffers are not tokenized.\n @return bufferMinimumTotalSupply The minimum total supply a buffer can have after initialization"},"functionSelector":"26a8a991","id":3171,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferMinimumTotalSupply","nameLocation":"4005:27:28","nodeType":"FunctionDefinition","parameters":{"id":3167,"nodeType":"ParameterList","parameters":[],"src":"4032:2:28"},"returnParameters":{"id":3170,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3169,"mutability":"mutable","name":"bufferMinimumTotalSupply","nameLocation":"4066:24:28","nodeType":"VariableDeclaration","scope":3171,"src":"4058:32:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3168,"name":"uint256","nodeType":"ElementaryTypeName","src":"4058:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4057:34:28"},"scope":3401,"src":"3996:96:28","stateMutability":"pure","virtual":false,"visibility":"external"},{"documentation":{"id":3172,"nodeType":"StructuredDocumentation","src":"4098:291:28","text":" @notice Get the minimum trade amount in a pool operation.\n @dev This limit is applied to the 18-decimal \"upscaled\" amount in any operation (swap, add/remove liquidity).\n @return minimumTradeAmount The minimum trade amount as an 18-decimal floating point number"},"functionSelector":"e2cb0ba0","id":3177,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumTradeAmount","nameLocation":"4403:21:28","nodeType":"FunctionDefinition","parameters":{"id":3173,"nodeType":"ParameterList","parameters":[],"src":"4424:2:28"},"returnParameters":{"id":3176,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3175,"mutability":"mutable","name":"minimumTradeAmount","nameLocation":"4458:18:28","nodeType":"VariableDeclaration","scope":3177,"src":"4450:26:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3174,"name":"uint256","nodeType":"ElementaryTypeName","src":"4450:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4449:28:28"},"scope":3401,"src":"4394:84:28","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3178,"nodeType":"StructuredDocumentation","src":"4484:271:28","text":" @notice Get the minimum wrap amount in a buffer operation.\n @dev This limit is applied to the wrap operation amount, in native underlying token decimals.\n @return minimumWrapAmount The minimum wrap amount in native underlying token decimals"},"functionSelector":"53956aa2","id":3183,"implemented":false,"kind":"function","modifiers":[],"name":"getMinimumWrapAmount","nameLocation":"4769:20:28","nodeType":"FunctionDefinition","parameters":{"id":3179,"nodeType":"ParameterList","parameters":[],"src":"4789:2:28"},"returnParameters":{"id":3182,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3181,"mutability":"mutable","name":"minimumWrapAmount","nameLocation":"4823:17:28","nodeType":"VariableDeclaration","scope":3183,"src":"4815:25:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3180,"name":"uint256","nodeType":"ElementaryTypeName","src":"4815:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4814:27:28"},"scope":3401,"src":"4760:82:28","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3184,"nodeType":"StructuredDocumentation","src":"5069:529:28","text":" @notice Indicates whether the Vault is paused.\n @dev If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that\n ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not\n also pause buffers (though we anticipate they would likely be paused and unpaused together). Call\n `areBuffersPaused` to check the pause state of the buffers.\n @return vaultPaused True if the Vault is paused"},"functionSelector":"098401f5","id":3189,"implemented":false,"kind":"function","modifiers":[],"name":"isVaultPaused","nameLocation":"5612:13:28","nodeType":"FunctionDefinition","parameters":{"id":3185,"nodeType":"ParameterList","parameters":[],"src":"5625:2:28"},"returnParameters":{"id":3188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3187,"mutability":"mutable","name":"vaultPaused","nameLocation":"5656:11:28","nodeType":"VariableDeclaration","scope":3189,"src":"5651:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3186,"name":"bool","nodeType":"ElementaryTypeName","src":"5651:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5650:18:28"},"scope":3401,"src":"5603:66:28","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3190,"nodeType":"StructuredDocumentation","src":"5675:400:28","text":" @notice Returns the paused status, and end times of the Vault's pause window and buffer period.\n @dev Balancer timestamps are 32 bits.\n @return vaultPaused True if the Vault is paused\n @return vaultPauseWindowEndTime The timestamp of the end of the Vault's pause window\n @return vaultBufferPeriodEndTime The timestamp of the end of the Vault's buffer period"},"functionSelector":"85c8c015","id":3199,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultPausedState","nameLocation":"6089:19:28","nodeType":"FunctionDefinition","parameters":{"id":3191,"nodeType":"ParameterList","parameters":[],"src":"6108:2:28"},"returnParameters":{"id":3198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3193,"mutability":"mutable","name":"vaultPaused","nameLocation":"6163:11:28","nodeType":"VariableDeclaration","scope":3199,"src":"6158:16:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3192,"name":"bool","nodeType":"ElementaryTypeName","src":"6158:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":3195,"mutability":"mutable","name":"vaultPauseWindowEndTime","nameLocation":"6183:23:28","nodeType":"VariableDeclaration","scope":3199,"src":"6176:30:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3194,"name":"uint32","nodeType":"ElementaryTypeName","src":"6176:6:28","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":3197,"mutability":"mutable","name":"vaultBufferPeriodEndTime","nameLocation":"6215:24:28","nodeType":"VariableDeclaration","scope":3199,"src":"6208:31:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3196,"name":"uint32","nodeType":"ElementaryTypeName","src":"6208:6:28","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"6157:83:28"},"scope":3401,"src":"6080:161:28","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3200,"nodeType":"StructuredDocumentation","src":"6247:517:28","text":" @notice Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\n @dev This is a permissioned function that will only work during the Pause Window set during deployment.\n Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing\n the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers\n are also paused (with `pauseVaultBuffers`)."},"functionSelector":"9e0879c2","id":3203,"implemented":false,"kind":"function","modifiers":[],"name":"pauseVault","nameLocation":"6778:10:28","nodeType":"FunctionDefinition","parameters":{"id":3201,"nodeType":"ParameterList","parameters":[],"src":"6788:2:28"},"returnParameters":{"id":3202,"nodeType":"ParameterList","parameters":[],"src":"6799:0:28"},"scope":3401,"src":"6769:31:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3204,"nodeType":"StructuredDocumentation","src":"6806:569:28","text":" @notice Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\n @dev This is a permissioned function that will only work on a paused Vault within the Buffer Period set during\n deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above,\n ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse\n `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused."},"functionSelector":"0b7562be","id":3207,"implemented":false,"kind":"function","modifiers":[],"name":"unpauseVault","nameLocation":"7389:12:28","nodeType":"FunctionDefinition","parameters":{"id":3205,"nodeType":"ParameterList","parameters":[],"src":"7401:2:28"},"returnParameters":{"id":3206,"nodeType":"ParameterList","parameters":[],"src":"7412:0:28"},"scope":3401,"src":"7380:33:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3208,"nodeType":"StructuredDocumentation","src":"7639:276:28","text":" @notice Pause the Pool: an emergency action which disables all pool functions.\n @dev This is a permissioned function that will only work during the Pause Window set during pool factory\n deployment.\n @param pool The pool being paused"},"functionSelector":"55aca1ec","id":3213,"implemented":false,"kind":"function","modifiers":[],"name":"pausePool","nameLocation":"7929:9:28","nodeType":"FunctionDefinition","parameters":{"id":3211,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3210,"mutability":"mutable","name":"pool","nameLocation":"7947:4:28","nodeType":"VariableDeclaration","scope":3213,"src":"7939:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3209,"name":"address","nodeType":"ElementaryTypeName","src":"7939:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7938:14:28"},"returnParameters":{"id":3212,"nodeType":"ParameterList","parameters":[],"src":"7961:0:28"},"scope":3401,"src":"7920:42:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3214,"nodeType":"StructuredDocumentation","src":"7968:366:28","text":" @notice Reverse a `pause` operation, and restore the Pool to normal functionality.\n @dev This is a permissioned function that will only work on a paused Pool within the Buffer Period set during\n deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\n @param pool The pool being unpaused"},"functionSelector":"f21c38cd","id":3219,"implemented":false,"kind":"function","modifiers":[],"name":"unpausePool","nameLocation":"8348:11:28","nodeType":"FunctionDefinition","parameters":{"id":3217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3216,"mutability":"mutable","name":"pool","nameLocation":"8368:4:28","nodeType":"VariableDeclaration","scope":3219,"src":"8360:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3215,"name":"address","nodeType":"ElementaryTypeName","src":"8360:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8359:14:28"},"returnParameters":{"id":3218,"nodeType":"ParameterList","parameters":[],"src":"8382:0:28"},"scope":3401,"src":"8339:44:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3220,"nodeType":"StructuredDocumentation","src":"8606:520:28","text":" @notice Assigns a new static swap fee percentage to the specified pool.\n @dev This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within\n the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`.\n Emits the SwapFeePercentageChanged event.\n @param pool The address of the pool for which the static swap fee will be changed\n @param swapFeePercentage The new swap fee percentage to apply to the pool"},"functionSelector":"d15126ba","id":3227,"implemented":false,"kind":"function","modifiers":[],"name":"setStaticSwapFeePercentage","nameLocation":"9140:26:28","nodeType":"FunctionDefinition","parameters":{"id":3225,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3222,"mutability":"mutable","name":"pool","nameLocation":"9175:4:28","nodeType":"VariableDeclaration","scope":3227,"src":"9167:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3221,"name":"address","nodeType":"ElementaryTypeName","src":"9167:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3224,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"9189:17:28","nodeType":"VariableDeclaration","scope":3227,"src":"9181:25:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3223,"name":"uint256","nodeType":"ElementaryTypeName","src":"9181:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9166:41:28"},"returnParameters":{"id":3226,"nodeType":"ParameterList","parameters":[],"src":"9216:0:28"},"scope":3401,"src":"9131:86:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3228,"nodeType":"StructuredDocumentation","src":"9223:463:28","text":" @notice Collects accumulated aggregate swap and yield fees for the specified pool.\n @dev Fees are sent to the ProtocolFeeController address.\n @param pool The pool on which all aggregate fees should be collected\n @return swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n @return yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order"},"functionSelector":"8f4ab9ca","id":3239,"implemented":false,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"9700:20:28","nodeType":"FunctionDefinition","parameters":{"id":3231,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3230,"mutability":"mutable","name":"pool","nameLocation":"9738:4:28","nodeType":"VariableDeclaration","scope":3239,"src":"9730:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3229,"name":"address","nodeType":"ElementaryTypeName","src":"9730:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9720:28:28"},"returnParameters":{"id":3238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3234,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"9784:14:28","nodeType":"VariableDeclaration","scope":3239,"src":"9767:31:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3232,"name":"uint256","nodeType":"ElementaryTypeName","src":"9767:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3233,"nodeType":"ArrayTypeName","src":"9767:9:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3237,"mutability":"mutable","name":"yieldFeeAmounts","nameLocation":"9817:15:28","nodeType":"VariableDeclaration","scope":3239,"src":"9800:32:28","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3235,"name":"uint256","nodeType":"ElementaryTypeName","src":"9800:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3236,"nodeType":"ArrayTypeName","src":"9800:9:28","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9766:67:28"},"scope":3401,"src":"9691:143:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3240,"nodeType":"StructuredDocumentation","src":"9840:755:28","text":" @notice Update an aggregate swap fee percentage.\n @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n Emits an `AggregateSwapFeePercentageChanged` event.\n @param pool The pool whose swap fee percentage will be updated\n @param newAggregateSwapFeePercentage The new aggregate swap fee percentage"},"functionSelector":"5e0b06f4","id":3247,"implemented":false,"kind":"function","modifiers":[],"name":"updateAggregateSwapFeePercentage","nameLocation":"10609:32:28","nodeType":"FunctionDefinition","parameters":{"id":3245,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3242,"mutability":"mutable","name":"pool","nameLocation":"10650:4:28","nodeType":"VariableDeclaration","scope":3247,"src":"10642:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3241,"name":"address","nodeType":"ElementaryTypeName","src":"10642:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3244,"mutability":"mutable","name":"newAggregateSwapFeePercentage","nameLocation":"10664:29:28","nodeType":"VariableDeclaration","scope":3247,"src":"10656:37:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3243,"name":"uint256","nodeType":"ElementaryTypeName","src":"10656:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10641:53:28"},"returnParameters":{"id":3246,"nodeType":"ParameterList","parameters":[],"src":"10703:0:28"},"scope":3401,"src":"10600:104:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3248,"nodeType":"StructuredDocumentation","src":"10710:760:28","text":" @notice Update an aggregate yield fee percentage.\n @dev Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee\n for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's\n fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also\n that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol).\n Emits an `AggregateYieldFeePercentageChanged` event.\n @param pool The pool whose yield fee percentage will be updated\n @param newAggregateYieldFeePercentage The new aggregate yield fee percentage"},"functionSelector":"e253670a","id":3255,"implemented":false,"kind":"function","modifiers":[],"name":"updateAggregateYieldFeePercentage","nameLocation":"11484:33:28","nodeType":"FunctionDefinition","parameters":{"id":3253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3250,"mutability":"mutable","name":"pool","nameLocation":"11526:4:28","nodeType":"VariableDeclaration","scope":3255,"src":"11518:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3249,"name":"address","nodeType":"ElementaryTypeName","src":"11518:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3252,"mutability":"mutable","name":"newAggregateYieldFeePercentage","nameLocation":"11540:30:28","nodeType":"VariableDeclaration","scope":3255,"src":"11532:38:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3251,"name":"uint256","nodeType":"ElementaryTypeName","src":"11532:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11517:54:28"},"returnParameters":{"id":3254,"nodeType":"ParameterList","parameters":[],"src":"11580:0:28"},"scope":3401,"src":"11475:106:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3256,"nodeType":"StructuredDocumentation","src":"11587:249:28","text":" @notice Sets a new Protocol Fee Controller for the Vault.\n @dev This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\n @param newProtocolFeeController The address of the new Protocol Fee Controller"},"functionSelector":"2d771389","id":3262,"implemented":false,"kind":"function","modifiers":[],"name":"setProtocolFeeController","nameLocation":"11850:24:28","nodeType":"FunctionDefinition","parameters":{"id":3260,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3259,"mutability":"mutable","name":"newProtocolFeeController","nameLocation":"11898:24:28","nodeType":"VariableDeclaration","scope":3262,"src":"11875:47:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"},"typeName":{"id":3258,"nodeType":"UserDefinedTypeName","pathNode":{"id":3257,"name":"IProtocolFeeController","nameLocations":["11875:22:28"],"nodeType":"IdentifierPath","referencedDeclaration":2420,"src":"11875:22:28"},"referencedDeclaration":2420,"src":"11875:22:28","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"11874:49:28"},"returnParameters":{"id":3261,"nodeType":"ParameterList","parameters":[],"src":"11932:0:28"},"scope":3401,"src":"11841:92:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3263,"nodeType":"StructuredDocumentation","src":"12160:557:28","text":" @notice Enable recovery mode for a pool.\n @dev This is a permissioned function. It enables a safe proportional withdrawal, with no external calls.\n Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so\n must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live\n balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\n @param pool The address of the pool"},"functionSelector":"dc3f574e","id":3268,"implemented":false,"kind":"function","modifiers":[],"name":"enableRecoveryMode","nameLocation":"12731:18:28","nodeType":"FunctionDefinition","parameters":{"id":3266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3265,"mutability":"mutable","name":"pool","nameLocation":"12758:4:28","nodeType":"VariableDeclaration","scope":3268,"src":"12750:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3264,"name":"address","nodeType":"ElementaryTypeName","src":"12750:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12749:14:28"},"returnParameters":{"id":3267,"nodeType":"ParameterList","parameters":[],"src":"12772:0:28"},"scope":3401,"src":"12722:51:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3269,"nodeType":"StructuredDocumentation","src":"12779:409:28","text":" @notice Disable recovery mode for a pool.\n @dev This is a permissioned function. It re-syncs live balances (which could not be updated during\n Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could\n potentially fail if there is an issue with any associated Rate Providers.\n @param pool The address of the pool"},"functionSelector":"bffb78b2","id":3274,"implemented":false,"kind":"function","modifiers":[],"name":"disableRecoveryMode","nameLocation":"13202:19:28","nodeType":"FunctionDefinition","parameters":{"id":3272,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3271,"mutability":"mutable","name":"pool","nameLocation":"13230:4:28","nodeType":"VariableDeclaration","scope":3274,"src":"13222:12:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3270,"name":"address","nodeType":"ElementaryTypeName","src":"13222:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13221:14:28"},"returnParameters":{"id":3273,"nodeType":"ParameterList","parameters":[],"src":"13244:0:28"},"scope":3401,"src":"13193:52:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3275,"nodeType":"StructuredDocumentation","src":"13476:653:28","text":" @notice Disables query functionality on the Vault. Can only be called by governance.\n @dev The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from\n settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable\n queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2).\n This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether\n disabling queries is completely necessary; queries can still be re-enabled after this call."},"functionSelector":"de1a36a6","id":3278,"implemented":false,"kind":"function","modifiers":[],"name":"disableQuery","nameLocation":"14143:12:28","nodeType":"FunctionDefinition","parameters":{"id":3276,"nodeType":"ParameterList","parameters":[],"src":"14155:2:28"},"returnParameters":{"id":3277,"nodeType":"ParameterList","parameters":[],"src":"14166:0:28"},"scope":3401,"src":"14134:33:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3279,"nodeType":"StructuredDocumentation","src":"14173:223:28","text":" @notice Disables query functionality permanently on the Vault. Can only be called by governance.\n @dev Shall only be used when there is no doubt that queries pose a fundamental threat to the system."},"functionSelector":"821440f2","id":3282,"implemented":false,"kind":"function","modifiers":[],"name":"disableQueryPermanently","nameLocation":"14410:23:28","nodeType":"FunctionDefinition","parameters":{"id":3280,"nodeType":"ParameterList","parameters":[],"src":"14433:2:28"},"returnParameters":{"id":3281,"nodeType":"ParameterList","parameters":[],"src":"14444:0:28"},"scope":3401,"src":"14401:44:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3283,"nodeType":"StructuredDocumentation","src":"14451:166:28","text":" @notice Enables query functionality on the Vault. Can only be called by governance.\n @dev Only works if queries are not permanently disabled."},"functionSelector":"e0d55605","id":3286,"implemented":false,"kind":"function","modifiers":[],"name":"enableQuery","nameLocation":"14631:11:28","nodeType":"FunctionDefinition","parameters":{"id":3284,"nodeType":"ParameterList","parameters":[],"src":"14642:2:28"},"returnParameters":{"id":3285,"nodeType":"ParameterList","parameters":[],"src":"14653:0:28"},"scope":3401,"src":"14622:32:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3287,"nodeType":"StructuredDocumentation","src":"14881:590:28","text":" @notice Indicates whether the Vault buffers are paused.\n @dev When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true)\n will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and\n independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they\n would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\n @return buffersPaused True if the Vault buffers are paused"},"functionSelector":"55cba7fe","id":3292,"implemented":false,"kind":"function","modifiers":[],"name":"areBuffersPaused","nameLocation":"15485:16:28","nodeType":"FunctionDefinition","parameters":{"id":3288,"nodeType":"ParameterList","parameters":[],"src":"15501:2:28"},"returnParameters":{"id":3291,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3290,"mutability":"mutable","name":"buffersPaused","nameLocation":"15532:13:28","nodeType":"VariableDeclaration","scope":3292,"src":"15527:18:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3289,"name":"bool","nodeType":"ElementaryTypeName","src":"15527:4:28","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15526:20:28"},"scope":3401,"src":"15476:71:28","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3293,"nodeType":"StructuredDocumentation","src":"15553:619:28","text":" @notice Pauses native vault buffers globally.\n @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not\n possible to pause vault buffers individually.\n This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate\n and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting\n buffers, and vice versa."},"functionSelector":"e085c5a8","id":3296,"implemented":false,"kind":"function","modifiers":[],"name":"pauseVaultBuffers","nameLocation":"16186:17:28","nodeType":"FunctionDefinition","parameters":{"id":3294,"nodeType":"ParameterList","parameters":[],"src":"16203:2:28"},"returnParameters":{"id":3295,"nodeType":"ParameterList","parameters":[],"src":"16214:0:28"},"scope":3401,"src":"16177:38:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3297,"nodeType":"StructuredDocumentation","src":"16221:545:28","text":" @notice Unpauses native vault buffers globally.\n @dev When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's\n `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above,\n ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`.\n If the Vault was also paused, it will remain in that state until explicitly unpaused.\n This is a permissioned call."},"functionSelector":"b9212b49","id":3300,"implemented":false,"kind":"function","modifiers":[],"name":"unpauseVaultBuffers","nameLocation":"16780:19:28","nodeType":"FunctionDefinition","parameters":{"id":3298,"nodeType":"ParameterList","parameters":[],"src":"16799:2:28"},"returnParameters":{"id":3299,"nodeType":"ParameterList","parameters":[],"src":"16810:0:28"},"scope":3401,"src":"16771:40:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3301,"nodeType":"StructuredDocumentation","src":"16817:860:28","text":" @notice Initializes buffer for the given wrapped token.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param amountUnderlyingRaw Amount of underlying tokens that will be deposited into the buffer\n @param amountWrappedRaw Amount of wrapped tokens that will be deposited into the buffer\n @param minIssuedShares Minimum amount of shares to receive from the buffer, expressed in underlying token\n native decimals\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n liquidity from the buffer\n @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals."},"functionSelector":"653eb3b0","id":3317,"implemented":false,"kind":"function","modifiers":[],"name":"initializeBuffer","nameLocation":"17691:16:28","nodeType":"FunctionDefinition","parameters":{"id":3313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3304,"mutability":"mutable","name":"wrappedToken","nameLocation":"17726:12:28","nodeType":"VariableDeclaration","scope":3317,"src":"17717:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":3303,"nodeType":"UserDefinedTypeName","pathNode":{"id":3302,"name":"IERC4626","nameLocations":["17717:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"17717:8:28"},"referencedDeclaration":39833,"src":"17717:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3306,"mutability":"mutable","name":"amountUnderlyingRaw","nameLocation":"17756:19:28","nodeType":"VariableDeclaration","scope":3317,"src":"17748:27:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3305,"name":"uint256","nodeType":"ElementaryTypeName","src":"17748:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3308,"mutability":"mutable","name":"amountWrappedRaw","nameLocation":"17793:16:28","nodeType":"VariableDeclaration","scope":3317,"src":"17785:24:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3307,"name":"uint256","nodeType":"ElementaryTypeName","src":"17785:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3310,"mutability":"mutable","name":"minIssuedShares","nameLocation":"17827:15:28","nodeType":"VariableDeclaration","scope":3317,"src":"17819:23:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3309,"name":"uint256","nodeType":"ElementaryTypeName","src":"17819:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3312,"mutability":"mutable","name":"sharesOwner","nameLocation":"17860:11:28","nodeType":"VariableDeclaration","scope":3317,"src":"17852:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3311,"name":"address","nodeType":"ElementaryTypeName","src":"17852:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17707:170:28"},"returnParameters":{"id":3316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3315,"mutability":"mutable","name":"issuedShares","nameLocation":"17904:12:28","nodeType":"VariableDeclaration","scope":3317,"src":"17896:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3314,"name":"uint256","nodeType":"ElementaryTypeName","src":"17896:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17895:22:28"},"scope":3401,"src":"17682:236:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3318,"nodeType":"StructuredDocumentation","src":"17924:1010:28","text":" @notice Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\n @dev The buffer needs to be initialized beforehand.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param maxAmountUnderlyingInRaw Maximum amount of underlying tokens to add to the buffer. It is expressed in\n underlying token native decimals\n @param maxAmountWrappedInRaw Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n token native decimals\n @param exactSharesToIssue The value in underlying tokens that `sharesOwner` wants to add to the buffer,\n in underlying token decimals\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to remove\n liquidity from the buffer\n @return amountUnderlyingRaw Amount of underlying tokens deposited into the buffer\n @return amountWrappedRaw Amount of wrapped tokens deposited into the buffer"},"functionSelector":"e2a92b1a","id":3336,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidityToBuffer","nameLocation":"18948:20:28","nodeType":"FunctionDefinition","parameters":{"id":3330,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3321,"mutability":"mutable","name":"wrappedToken","nameLocation":"18987:12:28","nodeType":"VariableDeclaration","scope":3336,"src":"18978:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":3320,"nodeType":"UserDefinedTypeName","pathNode":{"id":3319,"name":"IERC4626","nameLocations":["18978:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"18978:8:28"},"referencedDeclaration":39833,"src":"18978:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3323,"mutability":"mutable","name":"maxAmountUnderlyingInRaw","nameLocation":"19017:24:28","nodeType":"VariableDeclaration","scope":3336,"src":"19009:32:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3322,"name":"uint256","nodeType":"ElementaryTypeName","src":"19009:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3325,"mutability":"mutable","name":"maxAmountWrappedInRaw","nameLocation":"19059:21:28","nodeType":"VariableDeclaration","scope":3336,"src":"19051:29:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3324,"name":"uint256","nodeType":"ElementaryTypeName","src":"19051:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3327,"mutability":"mutable","name":"exactSharesToIssue","nameLocation":"19098:18:28","nodeType":"VariableDeclaration","scope":3336,"src":"19090:26:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3326,"name":"uint256","nodeType":"ElementaryTypeName","src":"19090:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3329,"mutability":"mutable","name":"sharesOwner","nameLocation":"19134:11:28","nodeType":"VariableDeclaration","scope":3336,"src":"19126:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3328,"name":"address","nodeType":"ElementaryTypeName","src":"19126:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18968:183:28"},"returnParameters":{"id":3335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3332,"mutability":"mutable","name":"amountUnderlyingRaw","nameLocation":"19178:19:28","nodeType":"VariableDeclaration","scope":3336,"src":"19170:27:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3331,"name":"uint256","nodeType":"ElementaryTypeName","src":"19170:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3334,"mutability":"mutable","name":"amountWrappedRaw","nameLocation":"19207:16:28","nodeType":"VariableDeclaration","scope":3336,"src":"19199:24:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3333,"name":"uint256","nodeType":"ElementaryTypeName","src":"19199:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19169:55:28"},"scope":3401,"src":"18939:286:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3337,"nodeType":"StructuredDocumentation","src":"19231:1458:28","text":" @notice Removes liquidity from an internal ERC4626 buffer in the Vault.\n @dev Only proportional exits are supported, and the sender has to be the owner of the shares.\n This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint.\n Pre-conditions:\n - The buffer needs to be initialized.\n - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why\n this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer.\n - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param sharesToRemove Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's\n total shares. It is expressed in underlying token native decimals\n @param minAmountUnderlyingOutRaw Minimum amount of underlying tokens to receive from the buffer. It is expressed\n in underlying token native decimals\n @param minAmountWrappedOutRaw Minimum amount of wrapped tokens to receive from the buffer. It is expressed in\n wrapped token native decimals\n @return removedUnderlyingBalanceRaw Amount of underlying tokens returned to the user\n @return removedWrappedBalanceRaw Amount of wrapped tokens returned to the user"},"functionSelector":"ebc7955c","id":3353,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityFromBuffer","nameLocation":"20703:25:28","nodeType":"FunctionDefinition","parameters":{"id":3347,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3340,"mutability":"mutable","name":"wrappedToken","nameLocation":"20747:12:28","nodeType":"VariableDeclaration","scope":3353,"src":"20738:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":3339,"nodeType":"UserDefinedTypeName","pathNode":{"id":3338,"name":"IERC4626","nameLocations":["20738:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"20738:8:28"},"referencedDeclaration":39833,"src":"20738:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3342,"mutability":"mutable","name":"sharesToRemove","nameLocation":"20777:14:28","nodeType":"VariableDeclaration","scope":3353,"src":"20769:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3341,"name":"uint256","nodeType":"ElementaryTypeName","src":"20769:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3344,"mutability":"mutable","name":"minAmountUnderlyingOutRaw","nameLocation":"20809:25:28","nodeType":"VariableDeclaration","scope":3353,"src":"20801:33:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3343,"name":"uint256","nodeType":"ElementaryTypeName","src":"20801:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3346,"mutability":"mutable","name":"minAmountWrappedOutRaw","nameLocation":"20852:22:28","nodeType":"VariableDeclaration","scope":3353,"src":"20844:30:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3345,"name":"uint256","nodeType":"ElementaryTypeName","src":"20844:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20728:152:28"},"returnParameters":{"id":3352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3349,"mutability":"mutable","name":"removedUnderlyingBalanceRaw","nameLocation":"20907:27:28","nodeType":"VariableDeclaration","scope":3353,"src":"20899:35:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3348,"name":"uint256","nodeType":"ElementaryTypeName","src":"20899:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3351,"mutability":"mutable","name":"removedWrappedBalanceRaw","nameLocation":"20944:24:28","nodeType":"VariableDeclaration","scope":3353,"src":"20936:32:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3350,"name":"uint256","nodeType":"ElementaryTypeName","src":"20936:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20898:71:28"},"scope":3401,"src":"20694:276:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":3354,"nodeType":"StructuredDocumentation","src":"20976:382:28","text":" @notice Returns the asset registered for a given wrapped token.\n @dev The asset can never change after buffer initialization.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return underlyingToken Address of the underlying token registered for the wrapper; `address(0)` if the buffer\n has not been initialized."},"functionSelector":"0387587d","id":3362,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferAsset","nameLocation":"21372:14:28","nodeType":"FunctionDefinition","parameters":{"id":3358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3357,"mutability":"mutable","name":"wrappedToken","nameLocation":"21396:12:28","nodeType":"VariableDeclaration","scope":3362,"src":"21387:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":3356,"nodeType":"UserDefinedTypeName","pathNode":{"id":3355,"name":"IERC4626","nameLocations":["21387:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"21387:8:28"},"referencedDeclaration":39833,"src":"21387:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"21386:23:28"},"returnParameters":{"id":3361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3360,"mutability":"mutable","name":"underlyingToken","nameLocation":"21441:15:28","nodeType":"VariableDeclaration","scope":3362,"src":"21433:23:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3359,"name":"address","nodeType":"ElementaryTypeName","src":"21433:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21432:25:28"},"scope":3401,"src":"21363:95:28","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3363,"nodeType":"StructuredDocumentation","src":"21464:441:28","text":" @notice Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets\n in the buffer.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param liquidityOwner Address of the user that owns liquidity in the wrapped token's buffer\n @return ownerShares Amount of shares allocated to the liquidity owner, in native underlying token decimals"},"functionSelector":"9385e39a","id":3373,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferOwnerShares","nameLocation":"21919:20:28","nodeType":"FunctionDefinition","parameters":{"id":3369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3366,"mutability":"mutable","name":"wrappedToken","nameLocation":"21958:12:28","nodeType":"VariableDeclaration","scope":3373,"src":"21949:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":3365,"nodeType":"UserDefinedTypeName","pathNode":{"id":3364,"name":"IERC4626","nameLocations":["21949:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"21949:8:28"},"referencedDeclaration":39833,"src":"21949:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3368,"mutability":"mutable","name":"liquidityOwner","nameLocation":"21988:14:28","nodeType":"VariableDeclaration","scope":3373,"src":"21980:22:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3367,"name":"address","nodeType":"ElementaryTypeName","src":"21980:7:28","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21939:69:28"},"returnParameters":{"id":3372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3371,"mutability":"mutable","name":"ownerShares","nameLocation":"22040:11:28","nodeType":"VariableDeclaration","scope":3373,"src":"22032:19:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3370,"name":"uint256","nodeType":"ElementaryTypeName","src":"22032:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22031:21:28"},"scope":3401,"src":"21910:143:28","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3374,"nodeType":"StructuredDocumentation","src":"22059:281:28","text":" @notice Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return bufferShares Amount of supply shares of the buffer, in native underlying token decimals"},"functionSelector":"f2784e07","id":3382,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferTotalShares","nameLocation":"22354:20:28","nodeType":"FunctionDefinition","parameters":{"id":3378,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3377,"mutability":"mutable","name":"wrappedToken","nameLocation":"22384:12:28","nodeType":"VariableDeclaration","scope":3382,"src":"22375:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":3376,"nodeType":"UserDefinedTypeName","pathNode":{"id":3375,"name":"IERC4626","nameLocations":["22375:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"22375:8:28"},"referencedDeclaration":39833,"src":"22375:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"22374:23:28"},"returnParameters":{"id":3381,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3380,"mutability":"mutable","name":"bufferShares","nameLocation":"22429:12:28","nodeType":"VariableDeclaration","scope":3382,"src":"22421:20:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3379,"name":"uint256","nodeType":"ElementaryTypeName","src":"22421:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22420:22:28"},"scope":3401,"src":"22345:98:28","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3383,"nodeType":"StructuredDocumentation","src":"22449:521:28","text":" @notice Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\n @dev All values are in native token decimals of the wrapped or underlying tokens.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return underlyingBalanceRaw Amount of underlying tokens deposited into the buffer, in native token decimals\n @return wrappedBalanceRaw Amount of wrapped tokens deposited into the buffer, in native token decimals"},"functionSelector":"4021fe0f","id":3393,"implemented":false,"kind":"function","modifiers":[],"name":"getBufferBalance","nameLocation":"22984:16:28","nodeType":"FunctionDefinition","parameters":{"id":3387,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3386,"mutability":"mutable","name":"wrappedToken","nameLocation":"23019:12:28","nodeType":"VariableDeclaration","scope":3393,"src":"23010:21:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":3385,"nodeType":"UserDefinedTypeName","pathNode":{"id":3384,"name":"IERC4626","nameLocations":["23010:8:28"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"23010:8:28"},"referencedDeclaration":39833,"src":"23010:8:28","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"23000:37:28"},"returnParameters":{"id":3392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3389,"mutability":"mutable","name":"underlyingBalanceRaw","nameLocation":"23069:20:28","nodeType":"VariableDeclaration","scope":3393,"src":"23061:28:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3388,"name":"uint256","nodeType":"ElementaryTypeName","src":"23061:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3391,"mutability":"mutable","name":"wrappedBalanceRaw","nameLocation":"23099:17:28","nodeType":"VariableDeclaration","scope":3393,"src":"23091:25:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3390,"name":"uint256","nodeType":"ElementaryTypeName","src":"23091:7:28","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23060:57:28"},"scope":3401,"src":"22975:143:28","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":3394,"nodeType":"StructuredDocumentation","src":"23342:202:28","text":" @notice Sets a new Authorizer for the Vault.\n @dev This is a permissioned call. Emits an `AuthorizerChanged` event.\n @param newAuthorizer The address of the new authorizer"},"functionSelector":"058a628f","id":3400,"implemented":false,"kind":"function","modifiers":[],"name":"setAuthorizer","nameLocation":"23558:13:28","nodeType":"FunctionDefinition","parameters":{"id":3398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3397,"mutability":"mutable","name":"newAuthorizer","nameLocation":"23584:13:28","nodeType":"VariableDeclaration","scope":3400,"src":"23572:25:28","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"},"typeName":{"id":3396,"nodeType":"UserDefinedTypeName","pathNode":{"id":3395,"name":"IAuthorizer","nameLocations":["23572:11:28"],"nodeType":"IdentifierPath","referencedDeclaration":1455,"src":"23572:11:28"},"referencedDeclaration":1455,"src":"23572:11:28","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"23571:27:28"},"returnParameters":{"id":3399,"nodeType":"ParameterList","parameters":[],"src":"23607:0:28"},"scope":3401,"src":"23549:59:28","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":3402,"src":"586:23024:28","usedErrors":[],"usedEvents":[]}],"src":"46:23565:28"},"id":28},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","exportedSymbols":{"IERC20":[40109],"IERC4626":[39833],"IVaultErrors":[3768]},"id":3769,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3403,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:29"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":3405,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3769,"sourceUnit":39834,"src":"72:75:29","symbolAliases":[{"foreign":{"id":3404,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39833,"src":"81:8:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":3407,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":3769,"sourceUnit":40110,"src":"148:72:29","symbolAliases":[{"foreign":{"id":3406,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"157:6:29","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultErrors","contractDependencies":[],"contractKind":"interface","documentation":{"id":3408,"nodeType":"StructuredDocumentation","src":"222:94:29","text":"@notice Errors are declared inside an interface (namespace) to improve DX with Typechain."},"fullyImplemented":true,"id":3768,"linearizedBaseContracts":[3768],"name":"IVaultErrors","nameLocation":"326:12:29","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":3409,"nodeType":"StructuredDocumentation","src":"576:149:29","text":" @notice A pool has already been registered. `registerPool` may only be called once.\n @param pool The already registered pool"},"errorSelector":"db771c80","id":3413,"name":"PoolAlreadyRegistered","nameLocation":"736:21:29","nodeType":"ErrorDefinition","parameters":{"id":3412,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3411,"mutability":"mutable","name":"pool","nameLocation":"766:4:29","nodeType":"VariableDeclaration","scope":3413,"src":"758:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3410,"name":"address","nodeType":"ElementaryTypeName","src":"758:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"757:14:29"},"src":"730:42:29"},{"documentation":{"id":3414,"nodeType":"StructuredDocumentation","src":"778:149:29","text":" @notice A pool has already been initialized. `initialize` may only be called once.\n @param pool The already initialized pool"},"errorSelector":"218e3747","id":3418,"name":"PoolAlreadyInitialized","nameLocation":"938:22:29","nodeType":"ErrorDefinition","parameters":{"id":3417,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3416,"mutability":"mutable","name":"pool","nameLocation":"969:4:29","nodeType":"VariableDeclaration","scope":3418,"src":"961:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3415,"name":"address","nodeType":"ElementaryTypeName","src":"961:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"960:14:29"},"src":"932:43:29"},{"documentation":{"id":3419,"nodeType":"StructuredDocumentation","src":"981:99:29","text":" @notice A pool has not been registered.\n @param pool The unregistered pool"},"errorSelector":"9e51bd5c","id":3423,"name":"PoolNotRegistered","nameLocation":"1091:17:29","nodeType":"ErrorDefinition","parameters":{"id":3422,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3421,"mutability":"mutable","name":"pool","nameLocation":"1117:4:29","nodeType":"VariableDeclaration","scope":3423,"src":"1109:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3420,"name":"address","nodeType":"ElementaryTypeName","src":"1109:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1108:14:29"},"src":"1085:38:29"},{"documentation":{"id":3424,"nodeType":"StructuredDocumentation","src":"1129:112:29","text":" @notice A referenced pool has not been initialized.\n @param pool The uninitialized pool"},"errorSelector":"4bdace13","id":3428,"name":"PoolNotInitialized","nameLocation":"1252:18:29","nodeType":"ErrorDefinition","parameters":{"id":3427,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3426,"mutability":"mutable","name":"pool","nameLocation":"1279:4:29","nodeType":"VariableDeclaration","scope":3428,"src":"1271:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3425,"name":"address","nodeType":"ElementaryTypeName","src":"1271:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1270:14:29"},"src":"1246:39:29"},{"documentation":{"id":3429,"nodeType":"StructuredDocumentation","src":"1291:274:29","text":" @notice A hook contract rejected a pool on registration.\n @param poolHooksContract Address of the hook contract that rejected the pool registration\n @param pool Address of the rejected pool\n @param poolFactory Address of the pool factory"},"errorSelector":"fa93d814","id":3437,"name":"HookRegistrationFailed","nameLocation":"1576:22:29","nodeType":"ErrorDefinition","parameters":{"id":3436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3431,"mutability":"mutable","name":"poolHooksContract","nameLocation":"1607:17:29","nodeType":"VariableDeclaration","scope":3437,"src":"1599:25:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3430,"name":"address","nodeType":"ElementaryTypeName","src":"1599:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3433,"mutability":"mutable","name":"pool","nameLocation":"1634:4:29","nodeType":"VariableDeclaration","scope":3437,"src":"1626:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3432,"name":"address","nodeType":"ElementaryTypeName","src":"1626:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3435,"mutability":"mutable","name":"poolFactory","nameLocation":"1648:11:29","nodeType":"VariableDeclaration","scope":3437,"src":"1640:19:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3434,"name":"address","nodeType":"ElementaryTypeName","src":"1640:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1598:62:29"},"src":"1570:91:29"},{"documentation":{"id":3438,"nodeType":"StructuredDocumentation","src":"1667:136:29","text":" @notice A token was already registered (i.e., it is a duplicate in the pool).\n @param token The duplicate token"},"errorSelector":"4f4b634e","id":3443,"name":"TokenAlreadyRegistered","nameLocation":"1814:22:29","nodeType":"ErrorDefinition","parameters":{"id":3442,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3441,"mutability":"mutable","name":"token","nameLocation":"1844:5:29","nodeType":"VariableDeclaration","scope":3443,"src":"1837:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":3440,"nodeType":"UserDefinedTypeName","pathNode":{"id":3439,"name":"IERC20","nameLocations":["1837:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"1837:6:29"},"referencedDeclaration":40109,"src":"1837:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1836:14:29"},"src":"1808:43:29"},{"documentation":{"id":3444,"nodeType":"StructuredDocumentation","src":"1857:57:29","text":"@notice The token count is below the minimum allowed."},"errorSelector":"5ed4ba8f","id":3446,"name":"MinTokens","nameLocation":"1925:9:29","nodeType":"ErrorDefinition","parameters":{"id":3445,"nodeType":"ParameterList","parameters":[],"src":"1934:2:29"},"src":"1919:18:29"},{"documentation":{"id":3447,"nodeType":"StructuredDocumentation","src":"1943:57:29","text":"@notice The token count is above the maximum allowed."},"errorSelector":"707bdf58","id":3449,"name":"MaxTokens","nameLocation":"2011:9:29","nodeType":"ErrorDefinition","parameters":{"id":3448,"nodeType":"ParameterList","parameters":[],"src":"2020:2:29"},"src":"2005:18:29"},{"documentation":{"id":3450,"nodeType":"StructuredDocumentation","src":"2029:61:29","text":"@notice Invalid tokens (e.g., zero) cannot be registered."},"errorSelector":"c1ab6dc1","id":3452,"name":"InvalidToken","nameLocation":"2101:12:29","nodeType":"ErrorDefinition","parameters":{"id":3451,"nodeType":"ParameterList","parameters":[],"src":"2113:2:29"},"src":"2095:21:29"},{"documentation":{"id":3453,"nodeType":"StructuredDocumentation","src":"2122:86:29","text":"@notice The token type given in a TokenConfig during pool registration is invalid."},"errorSelector":"a1e9dd9d","id":3455,"name":"InvalidTokenType","nameLocation":"2219:16:29","nodeType":"ErrorDefinition","parameters":{"id":3454,"nodeType":"ParameterList","parameters":[],"src":"2235:2:29"},"src":"2213:25:29"},{"documentation":{"id":3456,"nodeType":"StructuredDocumentation","src":"2244:76:29","text":"@notice The data in a TokenConfig struct is inconsistent or unsupported."},"errorSelector":"df450632","id":3458,"name":"InvalidTokenConfiguration","nameLocation":"2331:25:29","nodeType":"ErrorDefinition","parameters":{"id":3457,"nodeType":"ParameterList","parameters":[],"src":"2356:2:29"},"src":"2325:34:29"},{"documentation":{"id":3459,"nodeType":"StructuredDocumentation","src":"2365:64:29","text":"@notice Tokens with more than 18 decimals are not supported."},"errorSelector":"686d3607","id":3461,"name":"InvalidTokenDecimals","nameLocation":"2440:20:29","nodeType":"ErrorDefinition","parameters":{"id":3460,"nodeType":"ParameterList","parameters":[],"src":"2460:2:29"},"src":"2434:29:29"},{"documentation":{"id":3462,"nodeType":"StructuredDocumentation","src":"2469:287:29","text":" @notice The token list passed into an operation does not match the pool tokens in the pool.\n @param pool Address of the pool\n @param expectedToken The correct token at a given index in the pool\n @param actualToken The actual token found at that index"},"errorSelector":"ffe261a1","id":3470,"name":"TokensMismatch","nameLocation":"2767:14:29","nodeType":"ErrorDefinition","parameters":{"id":3469,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3464,"mutability":"mutable","name":"pool","nameLocation":"2790:4:29","nodeType":"VariableDeclaration","scope":3470,"src":"2782:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3463,"name":"address","nodeType":"ElementaryTypeName","src":"2782:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3466,"mutability":"mutable","name":"expectedToken","nameLocation":"2804:13:29","nodeType":"VariableDeclaration","scope":3470,"src":"2796:21:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3465,"name":"address","nodeType":"ElementaryTypeName","src":"2796:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3468,"mutability":"mutable","name":"actualToken","nameLocation":"2827:11:29","nodeType":"VariableDeclaration","scope":3470,"src":"2819:19:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3467,"name":"address","nodeType":"ElementaryTypeName","src":"2819:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2781:58:29"},"src":"2761:79:29"},{"documentation":{"id":3471,"nodeType":"StructuredDocumentation","src":"3071:85:29","text":"@notice A transient accounting operation completed with outstanding token deltas."},"errorSelector":"20f1d86d","id":3473,"name":"BalanceNotSettled","nameLocation":"3167:17:29","nodeType":"ErrorDefinition","parameters":{"id":3472,"nodeType":"ParameterList","parameters":[],"src":"3184:2:29"},"src":"3161:26:29"},{"documentation":{"id":3474,"nodeType":"StructuredDocumentation","src":"3193:97:29","text":"@notice A user called a Vault function (swap, add/remove liquidity) outside the lock context."},"errorSelector":"c09ba736","id":3476,"name":"VaultIsNotUnlocked","nameLocation":"3301:18:29","nodeType":"ErrorDefinition","parameters":{"id":3475,"nodeType":"ParameterList","parameters":[],"src":"3319:2:29"},"src":"3295:27:29"},{"documentation":{"id":3477,"nodeType":"StructuredDocumentation","src":"3328:105:29","text":"@notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert."},"errorSelector":"53f976d4","id":3479,"name":"DynamicSwapFeeHookFailed","nameLocation":"3444:24:29","nodeType":"ErrorDefinition","parameters":{"id":3478,"nodeType":"ParameterList","parameters":[],"src":"3468:2:29"},"src":"3438:33:29"},{"documentation":{"id":3480,"nodeType":"StructuredDocumentation","src":"3477:105:29","text":"@notice The pool has returned false to the beforeSwap hook, indicating the transaction should revert."},"errorSelector":"e91e17e7","id":3482,"name":"BeforeSwapHookFailed","nameLocation":"3593:20:29","nodeType":"ErrorDefinition","parameters":{"id":3481,"nodeType":"ParameterList","parameters":[],"src":"3613:2:29"},"src":"3587:29:29"},{"documentation":{"id":3483,"nodeType":"StructuredDocumentation","src":"3622:104:29","text":"@notice The pool has returned false to the afterSwap hook, indicating the transaction should revert."},"errorSelector":"15a29dec","id":3485,"name":"AfterSwapHookFailed","nameLocation":"3737:19:29","nodeType":"ErrorDefinition","parameters":{"id":3484,"nodeType":"ParameterList","parameters":[],"src":"3756:2:29"},"src":"3731:28:29"},{"documentation":{"id":3486,"nodeType":"StructuredDocumentation","src":"3765:111:29","text":"@notice The pool has returned false to the beforeInitialize hook, indicating the transaction should revert."},"errorSelector":"60612925","id":3488,"name":"BeforeInitializeHookFailed","nameLocation":"3887:26:29","nodeType":"ErrorDefinition","parameters":{"id":3487,"nodeType":"ParameterList","parameters":[],"src":"3913:2:29"},"src":"3881:35:29"},{"documentation":{"id":3489,"nodeType":"StructuredDocumentation","src":"3922:110:29","text":"@notice The pool has returned false to the afterInitialize hook, indicating the transaction should revert."},"errorSelector":"0f23dbc6","id":3491,"name":"AfterInitializeHookFailed","nameLocation":"4043:25:29","nodeType":"ErrorDefinition","parameters":{"id":3490,"nodeType":"ParameterList","parameters":[],"src":"4068:2:29"},"src":"4037:34:29"},{"documentation":{"id":3492,"nodeType":"StructuredDocumentation","src":"4077:113:29","text":"@notice The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert."},"errorSelector":"0b2eb652","id":3494,"name":"BeforeAddLiquidityHookFailed","nameLocation":"4201:28:29","nodeType":"ErrorDefinition","parameters":{"id":3493,"nodeType":"ParameterList","parameters":[],"src":"4229:2:29"},"src":"4195:37:29"},{"documentation":{"id":3495,"nodeType":"StructuredDocumentation","src":"4238:112:29","text":"@notice The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert."},"errorSelector":"e1249165","id":3497,"name":"AfterAddLiquidityHookFailed","nameLocation":"4361:27:29","nodeType":"ErrorDefinition","parameters":{"id":3496,"nodeType":"ParameterList","parameters":[],"src":"4388:2:29"},"src":"4355:36:29"},{"documentation":{"id":3498,"nodeType":"StructuredDocumentation","src":"4397:116:29","text":"@notice The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert."},"errorSelector":"2aaf8866","id":3500,"name":"BeforeRemoveLiquidityHookFailed","nameLocation":"4524:31:29","nodeType":"ErrorDefinition","parameters":{"id":3499,"nodeType":"ParameterList","parameters":[],"src":"4555:2:29"},"src":"4518:40:29"},{"documentation":{"id":3501,"nodeType":"StructuredDocumentation","src":"4564:115:29","text":"@notice The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert."},"errorSelector":"1d3391d8","id":3503,"name":"AfterRemoveLiquidityHookFailed","nameLocation":"4690:30:29","nodeType":"ErrorDefinition","parameters":{"id":3502,"nodeType":"ParameterList","parameters":[],"src":"4720:2:29"},"src":"4684:39:29"},{"documentation":{"id":3504,"nodeType":"StructuredDocumentation","src":"4729:115:29","text":"@notice An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance)."},"errorSelector":"e5d185cf","id":3506,"name":"RouterNotTrusted","nameLocation":"4855:16:29","nodeType":"ErrorDefinition","parameters":{"id":3505,"nodeType":"ParameterList","parameters":[],"src":"4871:2:29"},"src":"4849:25:29"},{"documentation":{"id":3507,"nodeType":"StructuredDocumentation","src":"5097:47:29","text":"@notice The user tried to swap zero tokens."},"errorSelector":"57a456b7","id":3509,"name":"AmountGivenZero","nameLocation":"5155:15:29","nodeType":"ErrorDefinition","parameters":{"id":3508,"nodeType":"ParameterList","parameters":[],"src":"5170:2:29"},"src":"5149:24:29"},{"documentation":{"id":3510,"nodeType":"StructuredDocumentation","src":"5179:58:29","text":"@notice The user attempted to swap a token for itself."},"errorSelector":"a54b181d","id":3512,"name":"CannotSwapSameToken","nameLocation":"5248:19:29","nodeType":"ErrorDefinition","parameters":{"id":3511,"nodeType":"ParameterList","parameters":[],"src":"5267:2:29"},"src":"5242:28:29"},{"documentation":{"id":3513,"nodeType":"StructuredDocumentation","src":"5276:137:29","text":" @notice The user attempted to operate with a token that is not in the pool.\n @param token The unregistered token"},"errorSelector":"ddef98d7","id":3518,"name":"TokenNotRegistered","nameLocation":"5424:18:29","nodeType":"ErrorDefinition","parameters":{"id":3517,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3516,"mutability":"mutable","name":"token","nameLocation":"5450:5:29","nodeType":"VariableDeclaration","scope":3518,"src":"5443:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":3515,"nodeType":"UserDefinedTypeName","pathNode":{"id":3514,"name":"IERC20","nameLocations":["5443:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"5443:6:29"},"referencedDeclaration":40109,"src":"5443:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"5442:14:29"},"src":"5418:39:29"},{"documentation":{"id":3519,"nodeType":"StructuredDocumentation","src":"5463:215:29","text":" @notice An amount in or out has exceeded the limit specified in the swap request.\n @param amount The total amount in or out\n @param limit The amount of the limit that has been exceeded"},"errorSelector":"e2ea151b","id":3525,"name":"SwapLimit","nameLocation":"5689:9:29","nodeType":"ErrorDefinition","parameters":{"id":3524,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3521,"mutability":"mutable","name":"amount","nameLocation":"5707:6:29","nodeType":"VariableDeclaration","scope":3525,"src":"5699:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3520,"name":"uint256","nodeType":"ElementaryTypeName","src":"5699:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3523,"mutability":"mutable","name":"limit","nameLocation":"5723:5:29","nodeType":"VariableDeclaration","scope":3525,"src":"5715:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3522,"name":"uint256","nodeType":"ElementaryTypeName","src":"5715:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5698:31:29"},"src":"5683:47:29"},{"documentation":{"id":3526,"nodeType":"StructuredDocumentation","src":"5736:228:29","text":" @notice A hook adjusted amount in or out has exceeded the limit specified in the swap request.\n @param amount The total amount in or out\n @param limit The amount of the limit that has been exceeded"},"errorSelector":"cc0e4a99","id":3532,"name":"HookAdjustedSwapLimit","nameLocation":"5975:21:29","nodeType":"ErrorDefinition","parameters":{"id":3531,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3528,"mutability":"mutable","name":"amount","nameLocation":"6005:6:29","nodeType":"VariableDeclaration","scope":3532,"src":"5997:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3527,"name":"uint256","nodeType":"ElementaryTypeName","src":"5997:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3530,"mutability":"mutable","name":"limit","nameLocation":"6021:5:29","nodeType":"VariableDeclaration","scope":3532,"src":"6013:13:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3529,"name":"uint256","nodeType":"ElementaryTypeName","src":"6013:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5996:31:29"},"src":"5969:59:29"},{"documentation":{"id":3533,"nodeType":"StructuredDocumentation","src":"6034:87:29","text":"@notice The amount given or calculated for an operation is below the minimum limit."},"errorSelector":"1ed4d118","id":3535,"name":"TradeAmountTooSmall","nameLocation":"6132:19:29","nodeType":"ErrorDefinition","parameters":{"id":3534,"nodeType":"ParameterList","parameters":[],"src":"6151:2:29"},"src":"6126:28:29"},{"documentation":{"id":3536,"nodeType":"StructuredDocumentation","src":"6381:45:29","text":"@notice Add liquidity kind not supported."},"errorSelector":"6c02b395","id":3538,"name":"InvalidAddLiquidityKind","nameLocation":"6437:23:29","nodeType":"ErrorDefinition","parameters":{"id":3537,"nodeType":"ParameterList","parameters":[],"src":"6460:2:29"},"src":"6431:32:29"},{"documentation":{"id":3539,"nodeType":"StructuredDocumentation","src":"6469:264:29","text":" @notice A required amountIn exceeds the maximum limit specified for the operation.\n @param tokenIn The incoming token\n @param amountIn The total token amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"8eda85e4","id":3548,"name":"AmountInAboveMax","nameLocation":"6744:16:29","nodeType":"ErrorDefinition","parameters":{"id":3547,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3542,"mutability":"mutable","name":"tokenIn","nameLocation":"6768:7:29","nodeType":"VariableDeclaration","scope":3548,"src":"6761:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":3541,"nodeType":"UserDefinedTypeName","pathNode":{"id":3540,"name":"IERC20","nameLocations":["6761:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"6761:6:29"},"referencedDeclaration":40109,"src":"6761:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3544,"mutability":"mutable","name":"amountIn","nameLocation":"6785:8:29","nodeType":"VariableDeclaration","scope":3548,"src":"6777:16:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3543,"name":"uint256","nodeType":"ElementaryTypeName","src":"6777:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3546,"mutability":"mutable","name":"maxAmountIn","nameLocation":"6803:11:29","nodeType":"VariableDeclaration","scope":3548,"src":"6795:19:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3545,"name":"uint256","nodeType":"ElementaryTypeName","src":"6795:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6760:55:29"},"src":"6738:78:29"},{"documentation":{"id":3549,"nodeType":"StructuredDocumentation","src":"6822:269:29","text":" @notice A hook adjusted amountIn exceeds the maximum limit specified for the operation.\n @param tokenIn The incoming token\n @param amountIn The total token amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"cefa3afa","id":3558,"name":"HookAdjustedAmountInAboveMax","nameLocation":"7102:28:29","nodeType":"ErrorDefinition","parameters":{"id":3557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3552,"mutability":"mutable","name":"tokenIn","nameLocation":"7138:7:29","nodeType":"VariableDeclaration","scope":3558,"src":"7131:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":3551,"nodeType":"UserDefinedTypeName","pathNode":{"id":3550,"name":"IERC20","nameLocations":["7131:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"7131:6:29"},"referencedDeclaration":40109,"src":"7131:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3554,"mutability":"mutable","name":"amountIn","nameLocation":"7155:8:29","nodeType":"VariableDeclaration","scope":3558,"src":"7147:16:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3553,"name":"uint256","nodeType":"ElementaryTypeName","src":"7147:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3556,"mutability":"mutable","name":"maxAmountIn","nameLocation":"7173:11:29","nodeType":"VariableDeclaration","scope":3558,"src":"7165:19:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3555,"name":"uint256","nodeType":"ElementaryTypeName","src":"7165:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7130:55:29"},"src":"7096:90:29"},{"documentation":{"id":3559,"nodeType":"StructuredDocumentation","src":"7192:245:29","text":" @notice The BPT amount received from adding liquidity is below the minimum specified for the operation.\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"8d261d5d","id":3565,"name":"BptAmountOutBelowMin","nameLocation":"7448:20:29","nodeType":"ErrorDefinition","parameters":{"id":3564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3561,"mutability":"mutable","name":"amountOut","nameLocation":"7477:9:29","nodeType":"VariableDeclaration","scope":3565,"src":"7469:17:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3560,"name":"uint256","nodeType":"ElementaryTypeName","src":"7469:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3563,"mutability":"mutable","name":"minAmountOut","nameLocation":"7496:12:29","nodeType":"VariableDeclaration","scope":3565,"src":"7488:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3562,"name":"uint256","nodeType":"ElementaryTypeName","src":"7488:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7468:41:29"},"src":"7442:68:29"},{"documentation":{"id":3566,"nodeType":"StructuredDocumentation","src":"7516:75:29","text":"@notice Pool does not support adding liquidity with a customized input."},"errorSelector":"4876c0bc","id":3568,"name":"DoesNotSupportAddLiquidityCustom","nameLocation":"7602:32:29","nodeType":"ErrorDefinition","parameters":{"id":3567,"nodeType":"ParameterList","parameters":[],"src":"7634:2:29"},"src":"7596:41:29"},{"documentation":{"id":3569,"nodeType":"StructuredDocumentation","src":"7643:68:29","text":"@notice Pool does not support adding liquidity through donation."},"errorSelector":"efe0265d","id":3571,"name":"DoesNotSupportDonation","nameLocation":"7722:22:29","nodeType":"ErrorDefinition","parameters":{"id":3570,"nodeType":"ParameterList","parameters":[],"src":"7744:2:29"},"src":"7716:31:29"},{"documentation":{"id":3572,"nodeType":"StructuredDocumentation","src":"7977:48:29","text":"@notice Remove liquidity kind not supported."},"errorSelector":"137a9a39","id":3574,"name":"InvalidRemoveLiquidityKind","nameLocation":"8036:26:29","nodeType":"ErrorDefinition","parameters":{"id":3573,"nodeType":"ParameterList","parameters":[],"src":"8062:2:29"},"src":"8030:35:29"},{"documentation":{"id":3575,"nodeType":"StructuredDocumentation","src":"8071:269:29","text":" @notice The actual amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"2f785e46","id":3584,"name":"AmountOutBelowMin","nameLocation":"8351:17:29","nodeType":"ErrorDefinition","parameters":{"id":3583,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3578,"mutability":"mutable","name":"tokenOut","nameLocation":"8376:8:29","nodeType":"VariableDeclaration","scope":3584,"src":"8369:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":3577,"nodeType":"UserDefinedTypeName","pathNode":{"id":3576,"name":"IERC20","nameLocations":["8369:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"8369:6:29"},"referencedDeclaration":40109,"src":"8369:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3580,"mutability":"mutable","name":"amountOut","nameLocation":"8394:9:29","nodeType":"VariableDeclaration","scope":3584,"src":"8386:17:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3579,"name":"uint256","nodeType":"ElementaryTypeName","src":"8386:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3582,"mutability":"mutable","name":"minAmountOut","nameLocation":"8413:12:29","nodeType":"VariableDeclaration","scope":3584,"src":"8405:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3581,"name":"uint256","nodeType":"ElementaryTypeName","src":"8405:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8368:58:29"},"src":"8345:82:29"},{"documentation":{"id":3585,"nodeType":"StructuredDocumentation","src":"8433:276:29","text":" @notice The hook adjusted amount out is below the minimum limit specified for the operation.\n @param tokenOut The outgoing token\n @param amountOut The total BPT amount out\n @param minAmountOut The amount of the limit that has been exceeded"},"errorSelector":"fbd8a724","id":3594,"name":"HookAdjustedAmountOutBelowMin","nameLocation":"8720:29:29","nodeType":"ErrorDefinition","parameters":{"id":3593,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3588,"mutability":"mutable","name":"tokenOut","nameLocation":"8757:8:29","nodeType":"VariableDeclaration","scope":3594,"src":"8750:15:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":3587,"nodeType":"UserDefinedTypeName","pathNode":{"id":3586,"name":"IERC20","nameLocations":["8750:6:29"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"8750:6:29"},"referencedDeclaration":40109,"src":"8750:6:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3590,"mutability":"mutable","name":"amountOut","nameLocation":"8775:9:29","nodeType":"VariableDeclaration","scope":3594,"src":"8767:17:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3589,"name":"uint256","nodeType":"ElementaryTypeName","src":"8767:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3592,"mutability":"mutable","name":"minAmountOut","nameLocation":"8794:12:29","nodeType":"VariableDeclaration","scope":3594,"src":"8786:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3591,"name":"uint256","nodeType":"ElementaryTypeName","src":"8786:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8749:58:29"},"src":"8714:94:29"},{"documentation":{"id":3595,"nodeType":"StructuredDocumentation","src":"8814:228:29","text":" @notice The required BPT amount in exceeds the maximum limit specified for the operation.\n @param amountIn The total BPT amount in\n @param maxAmountIn The amount of the limit that has been exceeded"},"errorSelector":"31d38e0b","id":3601,"name":"BptAmountInAboveMax","nameLocation":"9053:19:29","nodeType":"ErrorDefinition","parameters":{"id":3600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3597,"mutability":"mutable","name":"amountIn","nameLocation":"9081:8:29","nodeType":"VariableDeclaration","scope":3601,"src":"9073:16:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3596,"name":"uint256","nodeType":"ElementaryTypeName","src":"9073:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3599,"mutability":"mutable","name":"maxAmountIn","nameLocation":"9099:11:29","nodeType":"VariableDeclaration","scope":3601,"src":"9091:19:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3598,"name":"uint256","nodeType":"ElementaryTypeName","src":"9091:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9072:39:29"},"src":"9047:65:29"},{"documentation":{"id":3602,"nodeType":"StructuredDocumentation","src":"9118:77:29","text":"@notice Pool does not support removing liquidity with a customized input."},"errorSelector":"cf0a95c0","id":3604,"name":"DoesNotSupportRemoveLiquidityCustom","nameLocation":"9206:35:29","nodeType":"ErrorDefinition","parameters":{"id":3603,"nodeType":"ParameterList","parameters":[],"src":"9241:2:29"},"src":"9200:44:29"},{"documentation":{"id":3605,"nodeType":"StructuredDocumentation","src":"9463:332:29","text":" @notice Error raised when there is an overflow in the fee calculation.\n @dev This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole\n (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee\n percentages in the Vault."},"errorSelector":"4c69ac5d","id":3607,"name":"ProtocolFeesExceedTotalCollected","nameLocation":"9806:32:29","nodeType":"ErrorDefinition","parameters":{"id":3606,"nodeType":"ParameterList","parameters":[],"src":"9838:2:29"},"src":"9800:41:29"},{"documentation":{"id":3608,"nodeType":"StructuredDocumentation","src":"9847:430:29","text":" @notice Error raised when the swap fee percentage is less than the minimum allowed value.\n @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n if it is below the minimum value returned by the pool.\n Pools with dynamic fees do not check these limits."},"errorSelector":"bfb20688","id":3610,"name":"SwapFeePercentageTooLow","nameLocation":"10288:23:29","nodeType":"ErrorDefinition","parameters":{"id":3609,"nodeType":"ParameterList","parameters":[],"src":"10311:2:29"},"src":"10282:32:29"},{"documentation":{"id":3611,"nodeType":"StructuredDocumentation","src":"10320:433:29","text":" @notice Error raised when the swap fee percentage is greater than the maximum allowed value.\n @dev The Vault itself does not impose a universal minimum. Rather, it validates against the\n range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error\n if it is above the maximum value returned by the pool.\n Pools with dynamic fees do not check these limits."},"errorSelector":"7f47834b","id":3613,"name":"SwapFeePercentageTooHigh","nameLocation":"10764:24:29","nodeType":"ErrorDefinition","parameters":{"id":3612,"nodeType":"ParameterList","parameters":[],"src":"10788:2:29"},"src":"10758:33:29"},{"documentation":{"id":3614,"nodeType":"StructuredDocumentation","src":"10797:646:29","text":" @notice Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\n @dev Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit\n precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which\n corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%).\n Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between\n the aggregate fee calculated here and that stored in the Vault."},"errorSelector":"833fb3ce","id":3616,"name":"FeePrecisionTooHigh","nameLocation":"11454:19:29","nodeType":"ErrorDefinition","parameters":{"id":3615,"nodeType":"ParameterList","parameters":[],"src":"11473:2:29"},"src":"11448:28:29"},{"documentation":{"id":3617,"nodeType":"StructuredDocumentation","src":"11482:107:29","text":"@notice A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei)."},"errorSelector":"746e5940","id":3619,"name":"PercentageAboveMax","nameLocation":"11600:18:29","nodeType":"ErrorDefinition","parameters":{"id":3618,"nodeType":"ParameterList","parameters":[],"src":"11618:2:29"},"src":"11594:27:29"},{"documentation":{"id":3620,"nodeType":"StructuredDocumentation","src":"11842:78:29","text":"@notice A user tried to execute a query operation when they were disabled."},"errorSelector":"7a198886","id":3622,"name":"QueriesDisabled","nameLocation":"11931:15:29","nodeType":"ErrorDefinition","parameters":{"id":3621,"nodeType":"ParameterList","parameters":[],"src":"11946:2:29"},"src":"11925:24:29"},{"documentation":{"id":3623,"nodeType":"StructuredDocumentation","src":"11955:84:29","text":"@notice An admin tried to re-enable queries, but they were disabled permanently."},"errorSelector":"069f8cbc","id":3625,"name":"QueriesDisabledPermanently","nameLocation":"12050:26:29","nodeType":"ErrorDefinition","parameters":{"id":3624,"nodeType":"ParameterList","parameters":[],"src":"12076:2:29"},"src":"12044:35:29"},{"documentation":{"id":3626,"nodeType":"StructuredDocumentation","src":"12302:104:29","text":" @notice Cannot enable recovery mode when already enabled.\n @param pool The pool"},"errorSelector":"346d7607","id":3630,"name":"PoolInRecoveryMode","nameLocation":"12417:18:29","nodeType":"ErrorDefinition","parameters":{"id":3629,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3628,"mutability":"mutable","name":"pool","nameLocation":"12444:4:29","nodeType":"VariableDeclaration","scope":3630,"src":"12436:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3627,"name":"address","nodeType":"ElementaryTypeName","src":"12436:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12435:14:29"},"src":"12411:39:29"},{"documentation":{"id":3631,"nodeType":"StructuredDocumentation","src":"12456:101:29","text":" @notice Cannot disable recovery mode when not enabled.\n @param pool The pool"},"errorSelector":"ef029adf","id":3635,"name":"PoolNotInRecoveryMode","nameLocation":"12568:21:29","nodeType":"ErrorDefinition","parameters":{"id":3634,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3633,"mutability":"mutable","name":"pool","nameLocation":"12598:4:29","nodeType":"VariableDeclaration","scope":3635,"src":"12590:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3632,"name":"address","nodeType":"ElementaryTypeName","src":"12590:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12589:14:29"},"src":"12562:42:29"},{"documentation":{"id":3636,"nodeType":"StructuredDocumentation","src":"12828:206:29","text":" @notice Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\n @param sender The account attempting to call a permissioned function"},"errorSelector":"089676d5","id":3640,"name":"SenderIsNotVault","nameLocation":"13045:16:29","nodeType":"ErrorDefinition","parameters":{"id":3639,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3638,"mutability":"mutable","name":"sender","nameLocation":"13070:6:29","nodeType":"VariableDeclaration","scope":3640,"src":"13062:14:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3637,"name":"address","nodeType":"ElementaryTypeName","src":"13062:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13061:16:29"},"src":"13039:39:29"},{"documentation":{"id":3641,"nodeType":"StructuredDocumentation","src":"13303:79:29","text":"@notice The caller specified a pause window period longer than the maximum."},"errorSelector":"cc0e8fe5","id":3643,"name":"VaultPauseWindowDurationTooLarge","nameLocation":"13393:32:29","nodeType":"ErrorDefinition","parameters":{"id":3642,"nodeType":"ParameterList","parameters":[],"src":"13425:2:29"},"src":"13387:41:29"},{"documentation":{"id":3644,"nodeType":"StructuredDocumentation","src":"13434:73:29","text":"@notice The caller specified a buffer period longer than the maximum."},"errorSelector":"9ea4efee","id":3646,"name":"PauseBufferPeriodDurationTooLarge","nameLocation":"13518:33:29","nodeType":"ErrorDefinition","parameters":{"id":3645,"nodeType":"ParameterList","parameters":[],"src":"13551:2:29"},"src":"13512:42:29"},{"documentation":{"id":3647,"nodeType":"StructuredDocumentation","src":"13560:76:29","text":"@notice A user tried to perform an operation while the Vault was paused."},"errorSelector":"da9f8b34","id":3649,"name":"VaultPaused","nameLocation":"13647:11:29","nodeType":"ErrorDefinition","parameters":{"id":3648,"nodeType":"ParameterList","parameters":[],"src":"13658:2:29"},"src":"13641:20:29"},{"documentation":{"id":3650,"nodeType":"StructuredDocumentation","src":"13667:73:29","text":"@notice Governance tried to unpause the Vault when it was not paused."},"errorSelector":"f7ff4dca","id":3652,"name":"VaultNotPaused","nameLocation":"13751:14:29","nodeType":"ErrorDefinition","parameters":{"id":3651,"nodeType":"ParameterList","parameters":[],"src":"13765:2:29"},"src":"13745:23:29"},{"documentation":{"id":3653,"nodeType":"StructuredDocumentation","src":"13774:79:29","text":"@notice Governance tried to pause the Vault after the pause period expired."},"errorSelector":"0e4460b7","id":3655,"name":"VaultPauseWindowExpired","nameLocation":"13864:23:29","nodeType":"ErrorDefinition","parameters":{"id":3654,"nodeType":"ParameterList","parameters":[],"src":"13887:2:29"},"src":"13858:32:29"},{"documentation":{"id":3656,"nodeType":"StructuredDocumentation","src":"13896:123:29","text":" @notice A user tried to perform an operation involving a paused Pool.\n @param pool The paused pool"},"errorSelector":"d971f597","id":3660,"name":"PoolPaused","nameLocation":"14030:10:29","nodeType":"ErrorDefinition","parameters":{"id":3659,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3658,"mutability":"mutable","name":"pool","nameLocation":"14049:4:29","nodeType":"VariableDeclaration","scope":3660,"src":"14041:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3657,"name":"address","nodeType":"ElementaryTypeName","src":"14041:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14040:14:29"},"src":"14024:31:29"},{"documentation":{"id":3661,"nodeType":"StructuredDocumentation","src":"14061:124:29","text":" @notice Governance tried to unpause the Pool when it was not paused.\n @param pool The unpaused pool"},"errorSelector":"fdcd6894","id":3665,"name":"PoolNotPaused","nameLocation":"14196:13:29","nodeType":"ErrorDefinition","parameters":{"id":3664,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3663,"mutability":"mutable","name":"pool","nameLocation":"14218:4:29","nodeType":"VariableDeclaration","scope":3665,"src":"14210:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3662,"name":"address","nodeType":"ElementaryTypeName","src":"14210:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14209:14:29"},"src":"14190:34:29"},{"documentation":{"id":3666,"nodeType":"StructuredDocumentation","src":"14230:119:29","text":" @notice Governance tried to pause a Pool after the pause period expired.\n @param pool The pool"},"errorSelector":"eb5a1217","id":3670,"name":"PoolPauseWindowExpired","nameLocation":"14360:22:29","nodeType":"ErrorDefinition","parameters":{"id":3669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3668,"mutability":"mutable","name":"pool","nameLocation":"14391:4:29","nodeType":"VariableDeclaration","scope":3670,"src":"14383:12:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3667,"name":"address","nodeType":"ElementaryTypeName","src":"14383:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14382:14:29"},"src":"14354:43:29"},{"documentation":{"id":3671,"nodeType":"StructuredDocumentation","src":"14628:163:29","text":" @notice The buffer for the given wrapped token was already initialized.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"1690fa40","id":3676,"name":"BufferAlreadyInitialized","nameLocation":"14802:24:29","nodeType":"ErrorDefinition","parameters":{"id":3675,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3674,"mutability":"mutable","name":"wrappedToken","nameLocation":"14836:12:29","nodeType":"VariableDeclaration","scope":3676,"src":"14827:21:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":3673,"nodeType":"UserDefinedTypeName","pathNode":{"id":3672,"name":"IERC4626","nameLocations":["14827:8:29"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"14827:8:29"},"referencedDeclaration":39833,"src":"14827:8:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"14826:23:29"},"src":"14796:54:29"},{"documentation":{"id":3677,"nodeType":"StructuredDocumentation","src":"14856:159:29","text":" @notice The buffer for the given wrapped token was not initialized.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"85f41299","id":3682,"name":"BufferNotInitialized","nameLocation":"15026:20:29","nodeType":"ErrorDefinition","parameters":{"id":3681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3680,"mutability":"mutable","name":"wrappedToken","nameLocation":"15056:12:29","nodeType":"VariableDeclaration","scope":3682,"src":"15047:21:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":3679,"nodeType":"UserDefinedTypeName","pathNode":{"id":3678,"name":"IERC4626","nameLocations":["15047:8:29"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"15047:8:29"},"referencedDeclaration":39833,"src":"15047:8:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"15046:23:29"},"src":"15020:50:29"},{"documentation":{"id":3683,"nodeType":"StructuredDocumentation","src":"15076:90:29","text":"@notice The user is trying to remove more than their allocated shares from the buffer."},"errorSelector":"98c5dbd6","id":3685,"name":"NotEnoughBufferShares","nameLocation":"15177:21:29","nodeType":"ErrorDefinition","parameters":{"id":3684,"nodeType":"ParameterList","parameters":[],"src":"15198:2:29"},"src":"15171:30:29"},{"documentation":{"id":3686,"nodeType":"StructuredDocumentation","src":"15207:436:29","text":" @notice The wrapped token asset does not match the underlying token.\n @dev This should never happen, but a malicious wrapper contract might not return the correct address.\n Legitimate wrapper contracts should make the asset a constant or immutable value.\n @param wrappedToken The wrapped token corresponding to the buffer\n @param underlyingToken The underlying token returned by `asset`"},"errorSelector":"36b18d09","id":3693,"name":"WrongUnderlyingToken","nameLocation":"15654:20:29","nodeType":"ErrorDefinition","parameters":{"id":3692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3689,"mutability":"mutable","name":"wrappedToken","nameLocation":"15684:12:29","nodeType":"VariableDeclaration","scope":3693,"src":"15675:21:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":3688,"nodeType":"UserDefinedTypeName","pathNode":{"id":3687,"name":"IERC4626","nameLocations":["15675:8:29"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"15675:8:29"},"referencedDeclaration":39833,"src":"15675:8:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3691,"mutability":"mutable","name":"underlyingToken","nameLocation":"15706:15:29","nodeType":"VariableDeclaration","scope":3693,"src":"15698:23:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3690,"name":"address","nodeType":"ElementaryTypeName","src":"15698:7:29","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15674:48:29"},"src":"15648:75:29"},{"documentation":{"id":3694,"nodeType":"StructuredDocumentation","src":"15729:322:29","text":" @notice A wrapped token reported the zero address as its underlying token asset.\n @dev This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to\n re-initialize the buffer).\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"d407f9c5","id":3699,"name":"InvalidUnderlyingToken","nameLocation":"16062:22:29","nodeType":"ErrorDefinition","parameters":{"id":3698,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3697,"mutability":"mutable","name":"wrappedToken","nameLocation":"16094:12:29","nodeType":"VariableDeclaration","scope":3699,"src":"16085:21:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":3696,"nodeType":"UserDefinedTypeName","pathNode":{"id":3695,"name":"IERC4626","nameLocations":["16085:8:29"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"16085:8:29"},"referencedDeclaration":39833,"src":"16085:8:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16084:23:29"},"src":"16056:52:29"},{"documentation":{"id":3700,"nodeType":"StructuredDocumentation","src":"16114:183:29","text":" @notice The amount given to wrap/unwrap was too small, which can introduce rounding issues.\n @param wrappedToken The wrapped token corresponding to the buffer"},"errorSelector":"18fe7385","id":3705,"name":"WrapAmountTooSmall","nameLocation":"16308:18:29","nodeType":"ErrorDefinition","parameters":{"id":3704,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3703,"mutability":"mutable","name":"wrappedToken","nameLocation":"16336:12:29","nodeType":"VariableDeclaration","scope":3705,"src":"16327:21:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":3702,"nodeType":"UserDefinedTypeName","pathNode":{"id":3701,"name":"IERC4626","nameLocations":["16327:8:29"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"16327:8:29"},"referencedDeclaration":39833,"src":"16327:8:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16326:23:29"},"src":"16302:48:29"},{"documentation":{"id":3706,"nodeType":"StructuredDocumentation","src":"16356:70:29","text":"@notice Buffer operation attempted while vault buffers are paused."},"errorSelector":"0f27df09","id":3708,"name":"VaultBuffersArePaused","nameLocation":"16437:21:29","nodeType":"ErrorDefinition","parameters":{"id":3707,"nodeType":"ParameterList","parameters":[],"src":"16458:2:29"},"src":"16431:30:29"},{"documentation":{"id":3709,"nodeType":"StructuredDocumentation","src":"16467:58:29","text":"@notice Buffer shares were minted to the zero address."},"errorSelector":"dbe6b10e","id":3711,"name":"BufferSharesInvalidReceiver","nameLocation":"16536:27:29","nodeType":"ErrorDefinition","parameters":{"id":3710,"nodeType":"ParameterList","parameters":[],"src":"16563:2:29"},"src":"16530:36:29"},{"documentation":{"id":3712,"nodeType":"StructuredDocumentation","src":"16572:60:29","text":"@notice Buffer shares were burned from the zero address."},"errorSelector":"586d06df","id":3714,"name":"BufferSharesInvalidOwner","nameLocation":"16643:24:29","nodeType":"ErrorDefinition","parameters":{"id":3713,"nodeType":"ParameterList","parameters":[],"src":"16667:2:29"},"src":"16637:33:29"},{"documentation":{"id":3715,"nodeType":"StructuredDocumentation","src":"16676:173:29","text":" @notice The total supply of a buffer can't be lower than the absolute minimum.\n @param totalSupply The total supply value that was below the minimum"},"errorSelector":"34bdbfaa","id":3719,"name":"BufferTotalSupplyTooLow","nameLocation":"16860:23:29","nodeType":"ErrorDefinition","parameters":{"id":3718,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3717,"mutability":"mutable","name":"totalSupply","nameLocation":"16892:11:29","nodeType":"VariableDeclaration","scope":3719,"src":"16884:19:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3716,"name":"uint256","nodeType":"ElementaryTypeName","src":"16884:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16883:21:29"},"src":"16854:51:29"},{"documentation":{"id":3720,"nodeType":"StructuredDocumentation","src":"16911:97:29","text":"@dev A wrap/unwrap operation consumed more or returned less underlying tokens than it should."},"errorSelector":"1c6a5375","id":3729,"name":"NotEnoughUnderlying","nameLocation":"17019:19:29","nodeType":"ErrorDefinition","parameters":{"id":3728,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3723,"mutability":"mutable","name":"wrappedToken","nameLocation":"17048:12:29","nodeType":"VariableDeclaration","scope":3729,"src":"17039:21:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":3722,"nodeType":"UserDefinedTypeName","pathNode":{"id":3721,"name":"IERC4626","nameLocations":["17039:8:29"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"17039:8:29"},"referencedDeclaration":39833,"src":"17039:8:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3725,"mutability":"mutable","name":"expectedUnderlyingAmount","nameLocation":"17070:24:29","nodeType":"VariableDeclaration","scope":3729,"src":"17062:32:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3724,"name":"uint256","nodeType":"ElementaryTypeName","src":"17062:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3727,"mutability":"mutable","name":"actualUnderlyingAmount","nameLocation":"17104:22:29","nodeType":"VariableDeclaration","scope":3729,"src":"17096:30:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3726,"name":"uint256","nodeType":"ElementaryTypeName","src":"17096:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17038:89:29"},"src":"17013:115:29"},{"documentation":{"id":3730,"nodeType":"StructuredDocumentation","src":"17134:94:29","text":"@dev A wrap/unwrap operation consumed more or returned less wrapped tokens than it should."},"errorSelector":"1149424d","id":3739,"name":"NotEnoughWrapped","nameLocation":"17239:16:29","nodeType":"ErrorDefinition","parameters":{"id":3738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3733,"mutability":"mutable","name":"wrappedToken","nameLocation":"17265:12:29","nodeType":"VariableDeclaration","scope":3739,"src":"17256:21:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":3732,"nodeType":"UserDefinedTypeName","pathNode":{"id":3731,"name":"IERC4626","nameLocations":["17256:8:29"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"17256:8:29"},"referencedDeclaration":39833,"src":"17256:8:29","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3735,"mutability":"mutable","name":"expectedWrappedAmount","nameLocation":"17287:21:29","nodeType":"VariableDeclaration","scope":3739,"src":"17279:29:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3734,"name":"uint256","nodeType":"ElementaryTypeName","src":"17279:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3737,"mutability":"mutable","name":"actualWrappedAmount","nameLocation":"17318:19:29","nodeType":"VariableDeclaration","scope":3739,"src":"17310:27:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3736,"name":"uint256","nodeType":"ElementaryTypeName","src":"17310:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17255:83:29"},"src":"17233:106:29"},{"documentation":{"id":3740,"nodeType":"StructuredDocumentation","src":"17345:76:29","text":"@dev Shares issued during initialization are below the requested amount."},"errorSelector":"da0cb07e","id":3746,"name":"IssuedSharesBelowMin","nameLocation":"17432:20:29","nodeType":"ErrorDefinition","parameters":{"id":3745,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3742,"mutability":"mutable","name":"issuedShares","nameLocation":"17461:12:29","nodeType":"VariableDeclaration","scope":3746,"src":"17453:20:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3741,"name":"uint256","nodeType":"ElementaryTypeName","src":"17453:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3744,"mutability":"mutable","name":"minIssuedShares","nameLocation":"17483:15:29","nodeType":"VariableDeclaration","scope":3746,"src":"17475:23:29","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3743,"name":"uint256","nodeType":"ElementaryTypeName","src":"17475:7:29","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17452:47:29"},"src":"17426:74:29"},{"documentation":{"id":3747,"nodeType":"StructuredDocumentation","src":"17727:87:29","text":"@notice Pool does not support adding / removing liquidity with an unbalanced input."},"errorSelector":"d4f5779c","id":3749,"name":"DoesNotSupportUnbalancedLiquidity","nameLocation":"17825:33:29","nodeType":"ErrorDefinition","parameters":{"id":3748,"nodeType":"ParameterList","parameters":[],"src":"17858:2:29"},"src":"17819:42:29"},{"documentation":{"id":3750,"nodeType":"StructuredDocumentation","src":"17867:48:29","text":"@notice The contract should not receive ETH."},"errorSelector":"f2238896","id":3752,"name":"CannotReceiveEth","nameLocation":"17926:16:29","nodeType":"ErrorDefinition","parameters":{"id":3751,"nodeType":"ParameterList","parameters":[],"src":"17942:2:29"},"src":"17920:25:29"},{"documentation":{"id":3753,"nodeType":"StructuredDocumentation","src":"17951:156:29","text":" @notice The `VaultExtension` contract was called by an account directly.\n @dev It can only be called by the Vault via delegatecall."},"errorSelector":"9fd25b36","id":3755,"name":"NotVaultDelegateCall","nameLocation":"18118:20:29","nodeType":"ErrorDefinition","parameters":{"id":3754,"nodeType":"ParameterList","parameters":[],"src":"18138:2:29"},"src":"18112:29:29"},{"documentation":{"id":3756,"nodeType":"StructuredDocumentation","src":"18147:89:29","text":"@notice The `VaultExtension` contract was configured with an incorrect Vault address."},"errorSelector":"1ab9d9d0","id":3758,"name":"WrongVaultExtensionDeployment","nameLocation":"18247:29:29","nodeType":"ErrorDefinition","parameters":{"id":3757,"nodeType":"ParameterList","parameters":[],"src":"18276:2:29"},"src":"18241:38:29"},{"documentation":{"id":3759,"nodeType":"StructuredDocumentation","src":"18285:96:29","text":"@notice The `ProtocolFeeController` contract was configured with an incorrect Vault address."},"errorSelector":"1bbe95c7","id":3761,"name":"WrongProtocolFeeControllerDeployment","nameLocation":"18392:36:29","nodeType":"ErrorDefinition","parameters":{"id":3760,"nodeType":"ParameterList","parameters":[],"src":"18428:2:29"},"src":"18386:45:29"},{"documentation":{"id":3762,"nodeType":"StructuredDocumentation","src":"18437:85:29","text":"@notice The `VaultAdmin` contract was configured with an incorrect Vault address."},"errorSelector":"82cc28b6","id":3764,"name":"WrongVaultAdminDeployment","nameLocation":"18533:25:29","nodeType":"ErrorDefinition","parameters":{"id":3763,"nodeType":"ParameterList","parameters":[],"src":"18558:2:29"},"src":"18527:34:29"},{"documentation":{"id":3765,"nodeType":"StructuredDocumentation","src":"18567:54:29","text":"@notice Quote reverted with a reserved error code."},"errorSelector":"28f95541","id":3767,"name":"QuoteResultSpoofed","nameLocation":"18632:18:29","nodeType":"ErrorDefinition","parameters":{"id":3766,"nodeType":"ParameterList","parameters":[],"src":"18650:2:29"},"src":"18626:27:29"}],"scope":3769,"src":"316:18339:29","usedErrors":[3413,3418,3423,3428,3437,3443,3446,3449,3452,3455,3458,3461,3470,3473,3476,3479,3482,3485,3488,3491,3494,3497,3500,3503,3506,3509,3512,3518,3525,3532,3535,3538,3548,3558,3565,3568,3571,3574,3584,3594,3601,3604,3607,3610,3613,3616,3619,3622,3625,3630,3635,3640,3643,3646,3649,3652,3655,3660,3665,3670,3676,3682,3685,3693,3699,3705,3708,3711,3714,3719,3729,3739,3746,3749,3752,3755,3758,3761,3764,3767],"usedEvents":[]}],"src":"46:18610:29"},"id":29},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","exportedSymbols":{"AddLiquidityKind":[4807],"AddLiquidityParams":[4823],"AfterSwapParams":[4801],"BufferWrapOrUnwrapParams":[4862],"FEE_BITLENGTH":[4865],"FEE_SCALING_FACTOR":[4868],"HookFlags":[4627],"HooksConfig":[4651],"IAuthorizer":[1455],"IERC20":[40109],"IERC4626":[39833],"IHooks":[2026],"IProtocolFeeController":[2420],"IRateProvider":[263],"IVaultEvents":[4007],"LiquidityManagement":[4580],"MAX_FEE_PERCENTAGE":[4871],"PoolConfig":[4605],"PoolConfigBits":[4582],"PoolData":[4729],"PoolRoleAccounts":[4677],"PoolSwapParams":[4772],"RemoveLiquidityKind":[4828],"RemoveLiquidityParams":[4844],"Rounding":[4732],"SwapKind":[4735],"SwapState":[4661],"TokenConfig":[4694],"TokenInfo":[4704],"TokenType":[4681],"VaultState":[4669],"VaultSwapParams":[4754],"WrappingDirection":[4847]},"id":4008,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":3770,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:30"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":3772,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4008,"sourceUnit":39834,"src":"72:75:30","symbolAliases":[{"foreign":{"id":3771,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39833,"src":"81:8:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":3774,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4008,"sourceUnit":40110,"src":"148:72:30","symbolAliases":[{"foreign":{"id":3773,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"157:6:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":3776,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4008,"sourceUnit":2421,"src":"222:70:30","symbolAliases":[{"foreign":{"id":3775,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2420,"src":"231:22:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":3778,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4008,"sourceUnit":1456,"src":"293:48:30","symbolAliases":[{"foreign":{"id":3777,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1455,"src":"302:11:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"./IHooks.sol","id":3780,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4008,"sourceUnit":2027,"src":"342:38:30","symbolAliases":[{"foreign":{"id":3779,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2026,"src":"351:6:30","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":3781,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4008,"sourceUnit":4872,"src":"381:26:30","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultEvents","contractDependencies":[],"contractKind":"interface","documentation":{"id":3782,"nodeType":"StructuredDocumentation","src":"409:91:30","text":"@dev Events are declared inside an interface (namespace) to improve DX with Typechain."},"fullyImplemented":true,"id":4007,"linearizedBaseContracts":[4007],"name":"IVaultEvents","nameLocation":"510:12:30","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":3783,"nodeType":"StructuredDocumentation","src":"529:657:30","text":" @notice A Pool was registered by calling `registerPool`.\n @param pool The pool being registered\n @param factory The factory creating the pool\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param swapFeePercentage The static swap fee of the pool\n @param pauseWindowEndTime The pool's pause window end time\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param hooksConfig Flags indicating which hooks the pool supports and address of hooks contract\n @param liquidityManagement Supported liquidity management hook flags"},"eventSelector":"bc1561eeab9f40962e2fb827a7ff9c7cdb47a9d7c84caeefa4ed90e043842dad","id":3806,"name":"PoolRegistered","nameLocation":"1197:14:30","nodeType":"EventDefinition","parameters":{"id":3805,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3785,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1237:4:30","nodeType":"VariableDeclaration","scope":3806,"src":"1221:20:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3784,"name":"address","nodeType":"ElementaryTypeName","src":"1221:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3787,"indexed":true,"mutability":"mutable","name":"factory","nameLocation":"1267:7:30","nodeType":"VariableDeclaration","scope":3806,"src":"1251:23:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3786,"name":"address","nodeType":"ElementaryTypeName","src":"1251:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3791,"indexed":false,"mutability":"mutable","name":"tokenConfig","nameLocation":"1298:11:30","nodeType":"VariableDeclaration","scope":3806,"src":"1284:25:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":3789,"nodeType":"UserDefinedTypeName","pathNode":{"id":3788,"name":"TokenConfig","nameLocations":["1284:11:30"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"1284:11:30"},"referencedDeclaration":4694,"src":"1284:11:30","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":3790,"nodeType":"ArrayTypeName","src":"1284:13:30","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":3793,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1327:17:30","nodeType":"VariableDeclaration","scope":3806,"src":"1319:25:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3792,"name":"uint256","nodeType":"ElementaryTypeName","src":"1319:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3795,"indexed":false,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"1361:18:30","nodeType":"VariableDeclaration","scope":3806,"src":"1354:25:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":3794,"name":"uint32","nodeType":"ElementaryTypeName","src":"1354:6:30","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":3798,"indexed":false,"mutability":"mutable","name":"roleAccounts","nameLocation":"1406:12:30","nodeType":"VariableDeclaration","scope":3806,"src":"1389:29:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":3797,"nodeType":"UserDefinedTypeName","pathNode":{"id":3796,"name":"PoolRoleAccounts","nameLocations":["1389:16:30"],"nodeType":"IdentifierPath","referencedDeclaration":4677,"src":"1389:16:30"},"referencedDeclaration":4677,"src":"1389:16:30","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":3801,"indexed":false,"mutability":"mutable","name":"hooksConfig","nameLocation":"1440:11:30","nodeType":"VariableDeclaration","scope":3806,"src":"1428:23:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4651_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":3800,"nodeType":"UserDefinedTypeName","pathNode":{"id":3799,"name":"HooksConfig","nameLocations":["1428:11:30"],"nodeType":"IdentifierPath","referencedDeclaration":4651,"src":"1428:11:30"},"referencedDeclaration":4651,"src":"1428:11:30","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4651_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"},{"constant":false,"id":3804,"indexed":false,"mutability":"mutable","name":"liquidityManagement","nameLocation":"1481:19:30","nodeType":"VariableDeclaration","scope":3806,"src":"1461:39:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":3803,"nodeType":"UserDefinedTypeName","pathNode":{"id":3802,"name":"LiquidityManagement","nameLocations":["1461:19:30"],"nodeType":"IdentifierPath","referencedDeclaration":4580,"src":"1461:19:30"},"referencedDeclaration":4580,"src":"1461:19:30","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"1211:295:30"},"src":"1191:316:30"},{"anonymous":false,"documentation":{"id":3807,"nodeType":"StructuredDocumentation","src":"1513:120:30","text":" @notice A Pool was initialized by calling `initialize`.\n @param pool The pool being initialized"},"eventSelector":"cad8c9d32507393b6508ca4a888b81979919b477510585bde8488f153072d6f3","id":3811,"name":"PoolInitialized","nameLocation":"1644:15:30","nodeType":"EventDefinition","parameters":{"id":3810,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3809,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1676:4:30","nodeType":"VariableDeclaration","scope":3811,"src":"1660:20:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3808,"name":"address","nodeType":"ElementaryTypeName","src":"1660:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1659:22:30"},"src":"1638:44:30"},{"anonymous":false,"documentation":{"id":3812,"nodeType":"StructuredDocumentation","src":"1688:478:30","text":" @notice A swap has occurred.\n @param pool The pool with the tokens being swapped\n @param tokenIn The token entering the Vault (balance increases)\n @param tokenOut The token leaving the Vault (balance decreases)\n @param amountIn Number of tokenIn tokens\n @param amountOut Number of tokenOut tokens\n @param swapFeePercentage Swap fee percentage applied (can differ if dynamic)\n @param swapFeeAmount Swap fee amount paid"},"eventSelector":"0874b2d545cb271cdbda4e093020c452328b24af12382ed62c4d00f5c26709db","id":3830,"name":"Swap","nameLocation":"2177:4:30","nodeType":"EventDefinition","parameters":{"id":3829,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3814,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"2207:4:30","nodeType":"VariableDeclaration","scope":3830,"src":"2191:20:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3813,"name":"address","nodeType":"ElementaryTypeName","src":"2191:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3817,"indexed":true,"mutability":"mutable","name":"tokenIn","nameLocation":"2236:7:30","nodeType":"VariableDeclaration","scope":3830,"src":"2221:22:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":3816,"nodeType":"UserDefinedTypeName","pathNode":{"id":3815,"name":"IERC20","nameLocations":["2221:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"2221:6:30"},"referencedDeclaration":40109,"src":"2221:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3820,"indexed":true,"mutability":"mutable","name":"tokenOut","nameLocation":"2268:8:30","nodeType":"VariableDeclaration","scope":3830,"src":"2253:23:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":3819,"nodeType":"UserDefinedTypeName","pathNode":{"id":3818,"name":"IERC20","nameLocations":["2253:6:30"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"2253:6:30"},"referencedDeclaration":40109,"src":"2253:6:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":3822,"indexed":false,"mutability":"mutable","name":"amountIn","nameLocation":"2294:8:30","nodeType":"VariableDeclaration","scope":3830,"src":"2286:16:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3821,"name":"uint256","nodeType":"ElementaryTypeName","src":"2286:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3824,"indexed":false,"mutability":"mutable","name":"amountOut","nameLocation":"2320:9:30","nodeType":"VariableDeclaration","scope":3830,"src":"2312:17:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3823,"name":"uint256","nodeType":"ElementaryTypeName","src":"2312:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3826,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"2347:17:30","nodeType":"VariableDeclaration","scope":3830,"src":"2339:25:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3825,"name":"uint256","nodeType":"ElementaryTypeName","src":"2339:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3828,"indexed":false,"mutability":"mutable","name":"swapFeeAmount","nameLocation":"2382:13:30","nodeType":"VariableDeclaration","scope":3830,"src":"2374:21:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3827,"name":"uint256","nodeType":"ElementaryTypeName","src":"2374:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2181:220:30"},"src":"2171:231:30"},{"anonymous":false,"documentation":{"id":3831,"nodeType":"StructuredDocumentation","src":"2408:352:30","text":" @notice A wrap operation has occurred.\n @param wrappedToken The wrapped token address\n @param depositedUnderlying Number of underlying tokens deposited\n @param mintedShares Number of shares (wrapped tokens) minted\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"3771d13c67011e31e12031c54bb59b0bf544a80b81d280a3711e172aa8b7f47b","id":3842,"name":"Wrap","nameLocation":"2771:4:30","nodeType":"EventDefinition","parameters":{"id":3841,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3834,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"2802:12:30","nodeType":"VariableDeclaration","scope":3842,"src":"2785:29:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":3833,"nodeType":"UserDefinedTypeName","pathNode":{"id":3832,"name":"IERC4626","nameLocations":["2785:8:30"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"2785:8:30"},"referencedDeclaration":39833,"src":"2785:8:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3836,"indexed":false,"mutability":"mutable","name":"depositedUnderlying","nameLocation":"2832:19:30","nodeType":"VariableDeclaration","scope":3842,"src":"2824:27:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3835,"name":"uint256","nodeType":"ElementaryTypeName","src":"2824:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3838,"indexed":false,"mutability":"mutable","name":"mintedShares","nameLocation":"2869:12:30","nodeType":"VariableDeclaration","scope":3842,"src":"2861:20:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3837,"name":"uint256","nodeType":"ElementaryTypeName","src":"2861:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3840,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"2899:14:30","nodeType":"VariableDeclaration","scope":3842,"src":"2891:22:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3839,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2891:7:30","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2775:144:30"},"src":"2765:155:30"},{"anonymous":false,"documentation":{"id":3843,"nodeType":"StructuredDocumentation","src":"2926:355:30","text":" @notice An unwrap operation has occurred.\n @param wrappedToken The wrapped token address\n @param burnedShares Number of shares (wrapped tokens) burned\n @param withdrawnUnderlying Number of underlying tokens withdrawn\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"eeb740c90bf2b18c9532eb7d473137767036d893dff3e009f32718f821b2a4c0","id":3854,"name":"Unwrap","nameLocation":"3292:6:30","nodeType":"EventDefinition","parameters":{"id":3853,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3846,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"3325:12:30","nodeType":"VariableDeclaration","scope":3854,"src":"3308:29:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":3845,"nodeType":"UserDefinedTypeName","pathNode":{"id":3844,"name":"IERC4626","nameLocations":["3308:8:30"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"3308:8:30"},"referencedDeclaration":39833,"src":"3308:8:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3848,"indexed":false,"mutability":"mutable","name":"burnedShares","nameLocation":"3355:12:30","nodeType":"VariableDeclaration","scope":3854,"src":"3347:20:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3847,"name":"uint256","nodeType":"ElementaryTypeName","src":"3347:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3850,"indexed":false,"mutability":"mutable","name":"withdrawnUnderlying","nameLocation":"3385:19:30","nodeType":"VariableDeclaration","scope":3854,"src":"3377:27:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3849,"name":"uint256","nodeType":"ElementaryTypeName","src":"3377:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3852,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"3422:14:30","nodeType":"VariableDeclaration","scope":3854,"src":"3414:22:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3851,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3414:7:30","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3298:144:30"},"src":"3286:157:30"},{"anonymous":false,"documentation":{"id":3855,"nodeType":"StructuredDocumentation","src":"3449:562:30","text":" @notice Liquidity has been added to a pool (including initialization).\n @param pool The pool with liquidity added\n @param liquidityProvider The user performing the operation\n @param kind The add liquidity operation type (e.g., proportional, custom)\n @param totalSupply The total supply of the pool after the operation\n @param amountsAddedRaw The amount of each token that was added, sorted in token registration order\n @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order"},"eventSelector":"a26a52d8d53702bba7f137907b8e1f99ff87f6d450144270ca25e72481cca871","id":3872,"name":"LiquidityAdded","nameLocation":"4022:14:30","nodeType":"EventDefinition","parameters":{"id":3871,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3857,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4062:4:30","nodeType":"VariableDeclaration","scope":3872,"src":"4046:20:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3856,"name":"address","nodeType":"ElementaryTypeName","src":"4046:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3859,"indexed":true,"mutability":"mutable","name":"liquidityProvider","nameLocation":"4092:17:30","nodeType":"VariableDeclaration","scope":3872,"src":"4076:33:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3858,"name":"address","nodeType":"ElementaryTypeName","src":"4076:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3862,"indexed":true,"mutability":"mutable","name":"kind","nameLocation":"4144:4:30","nodeType":"VariableDeclaration","scope":3872,"src":"4119:29:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},"typeName":{"id":3861,"nodeType":"UserDefinedTypeName","pathNode":{"id":3860,"name":"AddLiquidityKind","nameLocations":["4119:16:30"],"nodeType":"IdentifierPath","referencedDeclaration":4807,"src":"4119:16:30"},"referencedDeclaration":4807,"src":"4119:16:30","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":3864,"indexed":false,"mutability":"mutable","name":"totalSupply","nameLocation":"4166:11:30","nodeType":"VariableDeclaration","scope":3872,"src":"4158:19:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3863,"name":"uint256","nodeType":"ElementaryTypeName","src":"4158:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3867,"indexed":false,"mutability":"mutable","name":"amountsAddedRaw","nameLocation":"4197:15:30","nodeType":"VariableDeclaration","scope":3872,"src":"4187:25:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3865,"name":"uint256","nodeType":"ElementaryTypeName","src":"4187:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3866,"nodeType":"ArrayTypeName","src":"4187:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3870,"indexed":false,"mutability":"mutable","name":"swapFeeAmountsRaw","nameLocation":"4232:17:30","nodeType":"VariableDeclaration","scope":3872,"src":"4222:27:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3868,"name":"uint256","nodeType":"ElementaryTypeName","src":"4222:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3869,"nodeType":"ArrayTypeName","src":"4222:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4036:219:30"},"src":"4016:240:30"},{"anonymous":false,"documentation":{"id":3873,"nodeType":"StructuredDocumentation","src":"4262:548:30","text":" @notice Liquidity has been removed from a pool.\n @param pool The pool with liquidity removed\n @param liquidityProvider The user performing the operation\n @param kind The remove liquidity operation type (e.g., proportional, custom)\n @param totalSupply The total supply of the pool after the operation\n @param amountsRemovedRaw The amount of each token that was removed, sorted in token registration order\n @param swapFeeAmountsRaw The total swap fees charged, sorted in token registration order"},"eventSelector":"fbe5b0d79fb94f1e81c0a92bf86ae9d3a19e9d1bf6202c0d3e75120f65d5d8a5","id":3890,"name":"LiquidityRemoved","nameLocation":"4821:16:30","nodeType":"EventDefinition","parameters":{"id":3889,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3875,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"4863:4:30","nodeType":"VariableDeclaration","scope":3890,"src":"4847:20:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3874,"name":"address","nodeType":"ElementaryTypeName","src":"4847:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3877,"indexed":true,"mutability":"mutable","name":"liquidityProvider","nameLocation":"4893:17:30","nodeType":"VariableDeclaration","scope":3890,"src":"4877:33:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3876,"name":"address","nodeType":"ElementaryTypeName","src":"4877:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3880,"indexed":true,"mutability":"mutable","name":"kind","nameLocation":"4948:4:30","nodeType":"VariableDeclaration","scope":3890,"src":"4920:32:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":3879,"nodeType":"UserDefinedTypeName","pathNode":{"id":3878,"name":"RemoveLiquidityKind","nameLocations":["4920:19:30"],"nodeType":"IdentifierPath","referencedDeclaration":4828,"src":"4920:19:30"},"referencedDeclaration":4828,"src":"4920:19:30","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":3882,"indexed":false,"mutability":"mutable","name":"totalSupply","nameLocation":"4970:11:30","nodeType":"VariableDeclaration","scope":3890,"src":"4962:19:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3881,"name":"uint256","nodeType":"ElementaryTypeName","src":"4962:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3885,"indexed":false,"mutability":"mutable","name":"amountsRemovedRaw","nameLocation":"5001:17:30","nodeType":"VariableDeclaration","scope":3890,"src":"4991:27:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3883,"name":"uint256","nodeType":"ElementaryTypeName","src":"4991:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3884,"nodeType":"ArrayTypeName","src":"4991:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":3888,"indexed":false,"mutability":"mutable","name":"swapFeeAmountsRaw","nameLocation":"5038:17:30","nodeType":"VariableDeclaration","scope":3890,"src":"5028:27:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":3886,"name":"uint256","nodeType":"ElementaryTypeName","src":"5028:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":3887,"nodeType":"ArrayTypeName","src":"5028:9:30","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4837:224:30"},"src":"4815:247:30"},{"anonymous":false,"documentation":{"id":3891,"nodeType":"StructuredDocumentation","src":"5068:114:30","text":" @notice The Vault's pause status has changed.\n @param paused True if the Vault was paused"},"eventSelector":"e0629fe656e45ad7fd63a24b899da368690024c07043b88e57aee5095b1d3d02","id":3895,"name":"VaultPausedStateChanged","nameLocation":"5193:23:30","nodeType":"EventDefinition","parameters":{"id":3894,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3893,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"5222:6:30","nodeType":"VariableDeclaration","scope":3895,"src":"5217:11:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3892,"name":"bool","nodeType":"ElementaryTypeName","src":"5217:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5216:13:30"},"src":"5187:43:30"},{"anonymous":false,"documentation":{"id":3896,"nodeType":"StructuredDocumentation","src":"5236:87:30","text":"@notice `disableQuery` has been called on the Vault, disabling query functionality."},"eventSelector":"bd204090fd387f08e3076528bf09b4fc99d8100d749eace96c06002d3fedc625","id":3898,"name":"VaultQueriesDisabled","nameLocation":"5334:20:30","nodeType":"EventDefinition","parameters":{"id":3897,"nodeType":"ParameterList","parameters":[],"src":"5354:2:30"},"src":"5328:29:30"},{"anonymous":false,"documentation":{"id":3899,"nodeType":"StructuredDocumentation","src":"5363:85:30","text":"@notice `enableQuery` has been called on the Vault, enabling query functionality."},"eventSelector":"91d7478835f2b5adc315f5aad920f4a7f0a02f7fddf3042d17b2c80168ea17f5","id":3901,"name":"VaultQueriesEnabled","nameLocation":"5459:19:30","nodeType":"EventDefinition","parameters":{"id":3900,"nodeType":"ParameterList","parameters":[],"src":"5478:2:30"},"src":"5453:28:30"},{"anonymous":false,"documentation":{"id":3902,"nodeType":"StructuredDocumentation","src":"5487:171:30","text":" @notice A Pool's pause status has changed.\n @param pool The pool that was just paused or unpaused\n @param paused True if the pool was paused"},"eventSelector":"57e20448028297190122571be7cb6c1b1ef85730c673f7c72f533c8662419aa7","id":3908,"name":"PoolPausedStateChanged","nameLocation":"5669:22:30","nodeType":"EventDefinition","parameters":{"id":3907,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3904,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5708:4:30","nodeType":"VariableDeclaration","scope":3908,"src":"5692:20:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3903,"name":"address","nodeType":"ElementaryTypeName","src":"5692:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3906,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"5719:6:30","nodeType":"VariableDeclaration","scope":3908,"src":"5714:11:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3905,"name":"bool","nodeType":"ElementaryTypeName","src":"5714:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5691:35:30"},"src":"5663:64:30"},{"anonymous":false,"documentation":{"id":3909,"nodeType":"StructuredDocumentation","src":"5733:158:30","text":" @notice Emitted when the swap fee percentage of a pool is updated.\n @param swapFeePercentage The new swap fee percentage for the pool"},"eventSelector":"89d41522342fabac1471ca6073a5623e5caf367b03ca6e9a001478d0cf8be4a1","id":3915,"name":"SwapFeePercentageChanged","nameLocation":"5902:24:30","nodeType":"EventDefinition","parameters":{"id":3914,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3911,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"5943:4:30","nodeType":"VariableDeclaration","scope":3915,"src":"5927:20:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3910,"name":"address","nodeType":"ElementaryTypeName","src":"5927:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3913,"indexed":false,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"5957:17:30","nodeType":"VariableDeclaration","scope":3915,"src":"5949:25:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3912,"name":"uint256","nodeType":"ElementaryTypeName","src":"5949:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5926:49:30"},"src":"5896:80:30"},{"anonymous":false,"documentation":{"id":3916,"nodeType":"StructuredDocumentation","src":"5982:170:30","text":" @notice Recovery mode has been enabled or disabled for a pool.\n @param pool The pool\n @param recoveryMode True if recovery mode was enabled"},"eventSelector":"c2354cc2f78ea57777e55ddd43a7f22b112ce98868596880edaeb22b4f9c73a9","id":3922,"name":"PoolRecoveryModeStateChanged","nameLocation":"6163:28:30","nodeType":"EventDefinition","parameters":{"id":3921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3918,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6208:4:30","nodeType":"VariableDeclaration","scope":3922,"src":"6192:20:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3917,"name":"address","nodeType":"ElementaryTypeName","src":"6192:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3920,"indexed":false,"mutability":"mutable","name":"recoveryMode","nameLocation":"6219:12:30","nodeType":"VariableDeclaration","scope":3922,"src":"6214:17:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3919,"name":"bool","nodeType":"ElementaryTypeName","src":"6214:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6191:41:30"},"src":"6157:76:30"},{"anonymous":false,"documentation":{"id":3923,"nodeType":"StructuredDocumentation","src":"6239:353:30","text":" @notice A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\n @dev The `ProtocolFeeController` will emit an event with the underlying change.\n @param pool The pool whose aggregate swap fee percentage changed\n @param aggregateSwapFeePercentage The new aggregate swap fee percentage"},"eventSelector":"e4d371097beea42453a37406e2aef4c04f3c548f84ac50e72578662c0dcd7354","id":3929,"name":"AggregateSwapFeePercentageChanged","nameLocation":"6603:33:30","nodeType":"EventDefinition","parameters":{"id":3928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3925,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"6653:4:30","nodeType":"VariableDeclaration","scope":3929,"src":"6637:20:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3924,"name":"address","nodeType":"ElementaryTypeName","src":"6637:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3927,"indexed":false,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"6667:26:30","nodeType":"VariableDeclaration","scope":3929,"src":"6659:34:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3926,"name":"uint256","nodeType":"ElementaryTypeName","src":"6659:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6636:58:30"},"src":"6597:98:30"},{"anonymous":false,"documentation":{"id":3930,"nodeType":"StructuredDocumentation","src":"6701:357:30","text":" @notice A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\n @dev The `ProtocolFeeController` will emit an event with the underlying change.\n @param pool The pool whose aggregate yield fee percentage changed\n @param aggregateYieldFeePercentage The new aggregate yield fee percentage"},"eventSelector":"606eb97d83164bd6b200d638cd49c14c65d94d4f2c674cfd85e24e0e202c3ca5","id":3936,"name":"AggregateYieldFeePercentageChanged","nameLocation":"7069:34:30","nodeType":"EventDefinition","parameters":{"id":3935,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3932,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"7120:4:30","nodeType":"VariableDeclaration","scope":3936,"src":"7104:20:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3931,"name":"address","nodeType":"ElementaryTypeName","src":"7104:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3934,"indexed":false,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"7134:27:30","nodeType":"VariableDeclaration","scope":3936,"src":"7126:35:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3933,"name":"uint256","nodeType":"ElementaryTypeName","src":"7126:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7103:59:30"},"src":"7063:100:30"},{"anonymous":false,"documentation":{"id":3937,"nodeType":"StructuredDocumentation","src":"7169:132:30","text":" @notice A new authorizer is set by `setAuthorizer`.\n @param newAuthorizer The address of the new authorizer"},"eventSelector":"94b979b6831a51293e2641426f97747feed46f17779fed9cd18d1ecefcfe92ef","id":3942,"name":"AuthorizerChanged","nameLocation":"7312:17:30","nodeType":"EventDefinition","parameters":{"id":3941,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3940,"indexed":true,"mutability":"mutable","name":"newAuthorizer","nameLocation":"7350:13:30","nodeType":"VariableDeclaration","scope":3942,"src":"7330:33:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"},"typeName":{"id":3939,"nodeType":"UserDefinedTypeName","pathNode":{"id":3938,"name":"IAuthorizer","nameLocations":["7330:11:30"],"nodeType":"IdentifierPath","referencedDeclaration":1455,"src":"7330:11:30"},"referencedDeclaration":1455,"src":"7330:11:30","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"7329:35:30"},"src":"7306:59:30"},{"anonymous":false,"documentation":{"id":3943,"nodeType":"StructuredDocumentation","src":"7371:180:30","text":" @notice A new protocol fee controller is set by `setProtocolFeeController`.\n @param newProtocolFeeController The address of the new protocol fee controller"},"eventSelector":"280a60b1e63c1774d397d35cce80eb80e51408ead755fb446e6f744ce98e5df0","id":3948,"name":"ProtocolFeeControllerChanged","nameLocation":"7562:28:30","nodeType":"EventDefinition","parameters":{"id":3947,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3946,"indexed":true,"mutability":"mutable","name":"newProtocolFeeController","nameLocation":"7622:24:30","nodeType":"VariableDeclaration","scope":3948,"src":"7591:55:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"},"typeName":{"id":3945,"nodeType":"UserDefinedTypeName","pathNode":{"id":3944,"name":"IProtocolFeeController","nameLocations":["7591:22:30"],"nodeType":"IdentifierPath","referencedDeclaration":2420,"src":"7591:22:30"},"referencedDeclaration":2420,"src":"7591:22:30","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"7590:57:30"},"src":"7556:92:30"},{"anonymous":false,"documentation":{"id":3949,"nodeType":"StructuredDocumentation","src":"7654:553:30","text":" @notice Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\n @dev The underlying token can be derived from the wrapped token, so it's not included here.\n @param wrappedToken The wrapped token that identifies the buffer\n @param amountUnderlying The amount of the underlying token that was deposited\n @param amountWrapped The amount of the wrapped token that was deposited\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"75c4dc5f23640eeba7d404d9165f515fc3d9e23a5c8b6e2d09b4b9da56ff00a9","id":3960,"name":"LiquidityAddedToBuffer","nameLocation":"8218:22:30","nodeType":"EventDefinition","parameters":{"id":3959,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3952,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"8267:12:30","nodeType":"VariableDeclaration","scope":3960,"src":"8250:29:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":3951,"nodeType":"UserDefinedTypeName","pathNode":{"id":3950,"name":"IERC4626","nameLocations":["8250:8:30"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"8250:8:30"},"referencedDeclaration":39833,"src":"8250:8:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3954,"indexed":false,"mutability":"mutable","name":"amountUnderlying","nameLocation":"8297:16:30","nodeType":"VariableDeclaration","scope":3960,"src":"8289:24:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3953,"name":"uint256","nodeType":"ElementaryTypeName","src":"8289:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3956,"indexed":false,"mutability":"mutable","name":"amountWrapped","nameLocation":"8331:13:30","nodeType":"VariableDeclaration","scope":3960,"src":"8323:21:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3955,"name":"uint256","nodeType":"ElementaryTypeName","src":"8323:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3958,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"8362:14:30","nodeType":"VariableDeclaration","scope":3960,"src":"8354:22:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3957,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8354:7:30","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8240:142:30"},"src":"8212:171:30"},{"anonymous":false,"documentation":{"id":3961,"nodeType":"StructuredDocumentation","src":"8389:570:30","text":" @notice Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\n @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n \"totalSupply\" of a buffer.\n @param wrappedToken The wrapped token that identifies the buffer\n @param to The owner of the minted shares\n @param issuedShares The amount of \"internal BPT\" shares created"},"eventSelector":"d66f031d33381c6408f0b32c884461e5de3df8808399b6f3a3d86b1368f8ec34","id":3970,"name":"BufferSharesMinted","nameLocation":"8970:18:30","nodeType":"EventDefinition","parameters":{"id":3969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3964,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"9006:12:30","nodeType":"VariableDeclaration","scope":3970,"src":"8989:29:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":3963,"nodeType":"UserDefinedTypeName","pathNode":{"id":3962,"name":"IERC4626","nameLocations":["8989:8:30"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"8989:8:30"},"referencedDeclaration":39833,"src":"8989:8:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3966,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"9036:2:30","nodeType":"VariableDeclaration","scope":3970,"src":"9020:18:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3965,"name":"address","nodeType":"ElementaryTypeName","src":"9020:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3968,"indexed":false,"mutability":"mutable","name":"issuedShares","nameLocation":"9048:12:30","nodeType":"VariableDeclaration","scope":3970,"src":"9040:20:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3967,"name":"uint256","nodeType":"ElementaryTypeName","src":"9040:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8988:73:30"},"src":"8964:98:30"},{"anonymous":false,"documentation":{"id":3971,"nodeType":"StructuredDocumentation","src":"9068:571:30","text":" @notice Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\n @dev The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares`\n retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the\n \"totalSupply\" of a buffer.\n @param wrappedToken The wrapped token that identifies the buffer\n @param from The owner of the burned shares\n @param burnedShares The amount of \"internal BPT\" shares burned"},"eventSelector":"4e09f7f7fc37ce2897800e2c2a9099565edb0a133d19d84a6871b3530af8846b","id":3980,"name":"BufferSharesBurned","nameLocation":"9650:18:30","nodeType":"EventDefinition","parameters":{"id":3979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3974,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"9686:12:30","nodeType":"VariableDeclaration","scope":3980,"src":"9669:29:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":3973,"nodeType":"UserDefinedTypeName","pathNode":{"id":3972,"name":"IERC4626","nameLocations":["9669:8:30"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"9669:8:30"},"referencedDeclaration":39833,"src":"9669:8:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3976,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"9716:4:30","nodeType":"VariableDeclaration","scope":3980,"src":"9700:20:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3975,"name":"address","nodeType":"ElementaryTypeName","src":"9700:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":3978,"indexed":false,"mutability":"mutable","name":"burnedShares","nameLocation":"9730:12:30","nodeType":"VariableDeclaration","scope":3980,"src":"9722:20:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3977,"name":"uint256","nodeType":"ElementaryTypeName","src":"9722:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9668:75:30"},"src":"9644:100:30"},{"anonymous":false,"documentation":{"id":3981,"nodeType":"StructuredDocumentation","src":"9750:509:30","text":" @notice Liquidity was removed from an ERC4626 buffer.\n @dev The underlying token can be derived from the wrapped token, so it's not included here.\n @param wrappedToken The wrapped token that identifies the buffer\n @param amountUnderlying The amount of the underlying token that was withdrawn\n @param amountWrapped The amount of the wrapped token that was withdrawn\n @param bufferBalances The final buffer balances, packed in 128-bit words (underlying, wrapped)"},"eventSelector":"44d97b36e99b590b3d2875aad3b167b1d7fb1e063f3f1325a1eeac76caee5113","id":3992,"name":"LiquidityRemovedFromBuffer","nameLocation":"10270:26:30","nodeType":"EventDefinition","parameters":{"id":3991,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3984,"indexed":true,"mutability":"mutable","name":"wrappedToken","nameLocation":"10323:12:30","nodeType":"VariableDeclaration","scope":3992,"src":"10306:29:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":3983,"nodeType":"UserDefinedTypeName","pathNode":{"id":3982,"name":"IERC4626","nameLocations":["10306:8:30"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"10306:8:30"},"referencedDeclaration":39833,"src":"10306:8:30","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":3986,"indexed":false,"mutability":"mutable","name":"amountUnderlying","nameLocation":"10353:16:30","nodeType":"VariableDeclaration","scope":3992,"src":"10345:24:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3985,"name":"uint256","nodeType":"ElementaryTypeName","src":"10345:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3988,"indexed":false,"mutability":"mutable","name":"amountWrapped","nameLocation":"10387:13:30","nodeType":"VariableDeclaration","scope":3992,"src":"10379:21:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":3987,"name":"uint256","nodeType":"ElementaryTypeName","src":"10379:7:30","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":3990,"indexed":false,"mutability":"mutable","name":"bufferBalances","nameLocation":"10418:14:30","nodeType":"VariableDeclaration","scope":3992,"src":"10410:22:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":3989,"name":"bytes32","nodeType":"ElementaryTypeName","src":"10410:7:30","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"10296:142:30"},"src":"10264:175:30"},{"anonymous":false,"documentation":{"id":3993,"nodeType":"StructuredDocumentation","src":"10445:278:30","text":" @notice The Vault buffers pause status has changed.\n @dev If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer`\n set to true) will revert.\n @param paused True if the Vault buffers were paused"},"eventSelector":"300c7ca619eb846386aa0a6e5916ac2a41406448b0a2e99ba9ccafeb899015a5","id":3997,"name":"VaultBuffersPausedStateChanged","nameLocation":"10734:30:30","nodeType":"EventDefinition","parameters":{"id":3996,"nodeType":"ParameterList","parameters":[{"constant":false,"id":3995,"indexed":false,"mutability":"mutable","name":"paused","nameLocation":"10770:6:30","nodeType":"VariableDeclaration","scope":3997,"src":"10765:11:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":3994,"name":"bool","nodeType":"ElementaryTypeName","src":"10765:4:30","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10764:13:30"},"src":"10728:50:30"},{"anonymous":false,"documentation":{"id":3998,"nodeType":"StructuredDocumentation","src":"10784:194:30","text":" @notice Pools can use this event to emit event data from the Vault.\n @param pool Pool address\n @param eventKey Event key\n @param eventData Encoded event data"},"eventSelector":"4bc4412e210115456903c65b5277d299a505e79f2eb852b92b1ca52d85856428","id":4006,"name":"VaultAuxiliary","nameLocation":"10989:14:30","nodeType":"EventDefinition","parameters":{"id":4005,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4000,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"11020:4:30","nodeType":"VariableDeclaration","scope":4006,"src":"11004:20:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":3999,"name":"address","nodeType":"ElementaryTypeName","src":"11004:7:30","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4002,"indexed":true,"mutability":"mutable","name":"eventKey","nameLocation":"11042:8:30","nodeType":"VariableDeclaration","scope":4006,"src":"11026:24:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4001,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11026:7:30","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4004,"indexed":false,"mutability":"mutable","name":"eventData","nameLocation":"11058:9:30","nodeType":"VariableDeclaration","scope":4006,"src":"11052:15:30","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4003,"name":"bytes","nodeType":"ElementaryTypeName","src":"11052:5:30","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11003:65:30"},"src":"10983:86:30"}],"scope":4008,"src":"500:10571:30","usedErrors":[],"usedEvents":[3806,3811,3830,3842,3854,3872,3890,3895,3898,3901,3908,3915,3922,3929,3936,3942,3948,3960,3970,3980,3992,3997,4006]}],"src":"46:11026:30"},"id":30},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","exportedSymbols":{"AddLiquidityKind":[4807],"AddLiquidityParams":[4823],"AfterSwapParams":[4801],"BufferWrapOrUnwrapParams":[4862],"FEE_BITLENGTH":[4865],"FEE_SCALING_FACTOR":[4868],"HookFlags":[4627],"HooksConfig":[4651],"IAuthorizer":[1455],"IERC20":[40109],"IERC4626":[39833],"IHooks":[2026],"IProtocolFeeController":[2420],"IRateProvider":[263],"IVault":[3111],"IVaultExtension":[4426],"LiquidityManagement":[4580],"MAX_FEE_PERCENTAGE":[4871],"PoolConfig":[4605],"PoolConfigBits":[4582],"PoolData":[4729],"PoolRoleAccounts":[4677],"PoolSwapParams":[4772],"RemoveLiquidityKind":[4828],"RemoveLiquidityParams":[4844],"Rounding":[4732],"SwapKind":[4735],"SwapState":[4661],"TokenConfig":[4694],"TokenInfo":[4704],"TokenType":[4681],"VaultState":[4669],"VaultSwapParams":[4754],"WrappingDirection":[4847]},"id":4427,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4009,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:31"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":4011,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4427,"sourceUnit":39834,"src":"72:75:31","symbolAliases":[{"foreign":{"id":4010,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39833,"src":"81:8:31","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":4013,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4427,"sourceUnit":40110,"src":"148:72:31","symbolAliases":[{"foreign":{"id":4012,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"157:6:31","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"./IAuthorizer.sol","id":4015,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4427,"sourceUnit":1456,"src":"222:48:31","symbolAliases":[{"foreign":{"id":4014,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1455,"src":"231:11:31","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"./IProtocolFeeController.sol","id":4017,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4427,"sourceUnit":2421,"src":"271:70:31","symbolAliases":[{"foreign":{"id":4016,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2420,"src":"280:22:31","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"./IVault.sol","id":4019,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4427,"sourceUnit":3112,"src":"342:38:31","symbolAliases":[{"foreign":{"id":4018,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"351:6:31","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"./IHooks.sol","id":4021,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4427,"sourceUnit":2027,"src":"381:38:31","symbolAliases":[{"foreign":{"id":4020,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2026,"src":"390:6:31","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":4022,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4427,"sourceUnit":4872,"src":"420:26:31","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultExtension","contractDependencies":[],"contractKind":"interface","documentation":{"id":4023,"nodeType":"StructuredDocumentation","src":"448:318:31","text":" @notice Interface for functions defined on the `VaultExtension` contract.\n @dev `VaultExtension` handles less critical or frequently used functions, since delegate calls through\n the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and\n liquidity operations."},"fullyImplemented":false,"id":4426,"linearizedBaseContracts":[4426],"name":"IVaultExtension","nameLocation":"777:15:31","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4024,"nodeType":"StructuredDocumentation","src":"1025:206:31","text":" @notice Returns the main Vault address.\n @dev The main Vault contains the entrypoint and main liquidity operation implementations.\n @return vault The address of the main Vault"},"functionSelector":"fbfa77cf","id":4030,"implemented":false,"kind":"function","modifiers":[],"name":"vault","nameLocation":"1245:5:31","nodeType":"FunctionDefinition","parameters":{"id":4025,"nodeType":"ParameterList","parameters":[],"src":"1250:2:31"},"returnParameters":{"id":4029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4028,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4030,"src":"1276:6:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":4027,"nodeType":"UserDefinedTypeName","pathNode":{"id":4026,"name":"IVault","nameLocations":["1276:6:31"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"1276:6:31"},"referencedDeclaration":3111,"src":"1276:6:31","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1275:8:31"},"scope":4426,"src":"1236:48:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4031,"nodeType":"StructuredDocumentation","src":"1290:202:31","text":" @notice Returns the VaultAdmin contract address.\n @dev The VaultAdmin contract mostly implements permissioned functions.\n @return vaultAdmin The address of the Vault admin"},"functionSelector":"1ba0ae45","id":4036,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultAdmin","nameLocation":"1506:13:31","nodeType":"FunctionDefinition","parameters":{"id":4032,"nodeType":"ParameterList","parameters":[],"src":"1519:2:31"},"returnParameters":{"id":4035,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4034,"mutability":"mutable","name":"vaultAdmin","nameLocation":"1553:10:31","nodeType":"VariableDeclaration","scope":4036,"src":"1545:18:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4033,"name":"address","nodeType":"ElementaryTypeName","src":"1545:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1544:20:31"},"scope":4426,"src":"1497:68:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4037,"nodeType":"StructuredDocumentation","src":"1793:254:31","text":" @notice Returns whether the Vault is unlocked (i.e., executing an operation).\n @dev The Vault must be unlocked to perform state-changing liquidity operations.\n @return unlocked True if the Vault is unlocked, false otherwise"},"functionSelector":"8380edb7","id":4042,"implemented":false,"kind":"function","modifiers":[],"name":"isUnlocked","nameLocation":"2061:10:31","nodeType":"FunctionDefinition","parameters":{"id":4038,"nodeType":"ParameterList","parameters":[],"src":"2071:2:31"},"returnParameters":{"id":4041,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4040,"mutability":"mutable","name":"unlocked","nameLocation":"2102:8:31","nodeType":"VariableDeclaration","scope":4042,"src":"2097:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4039,"name":"bool","nodeType":"ElementaryTypeName","src":"2097:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2096:15:31"},"scope":4426,"src":"2052:60:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4043,"nodeType":"StructuredDocumentation","src":"2118:141:31","text":" @notice Returns the count of non-zero deltas.\n @return nonzeroDeltaCount The current value of `_nonzeroDeltaCount`"},"functionSelector":"db817187","id":4048,"implemented":false,"kind":"function","modifiers":[],"name":"getNonzeroDeltaCount","nameLocation":"2273:20:31","nodeType":"FunctionDefinition","parameters":{"id":4044,"nodeType":"ParameterList","parameters":[],"src":"2293:2:31"},"returnParameters":{"id":4047,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4046,"mutability":"mutable","name":"nonzeroDeltaCount","nameLocation":"2327:17:31","nodeType":"VariableDeclaration","scope":4048,"src":"2319:25:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4045,"name":"uint256","nodeType":"ElementaryTypeName","src":"2319:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2318:27:31"},"scope":4426,"src":"2264:82:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4049,"nodeType":"StructuredDocumentation","src":"2352:284:31","text":" @notice Retrieves the token delta for a specific token.\n @dev This function allows reading the value from the `_tokenDeltas` mapping.\n @param token The token for which the delta is being fetched\n @return tokenDelta The delta of the specified token"},"functionSelector":"9e825ff5","id":4057,"implemented":false,"kind":"function","modifiers":[],"name":"getTokenDelta","nameLocation":"2650:13:31","nodeType":"FunctionDefinition","parameters":{"id":4053,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4052,"mutability":"mutable","name":"token","nameLocation":"2671:5:31","nodeType":"VariableDeclaration","scope":4057,"src":"2664:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":4051,"nodeType":"UserDefinedTypeName","pathNode":{"id":4050,"name":"IERC20","nameLocations":["2664:6:31"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"2664:6:31"},"referencedDeclaration":40109,"src":"2664:6:31","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2663:14:31"},"returnParameters":{"id":4056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4055,"mutability":"mutable","name":"tokenDelta","nameLocation":"2708:10:31","nodeType":"VariableDeclaration","scope":4057,"src":"2701:17:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":4054,"name":"int256","nodeType":"ElementaryTypeName","src":"2701:6:31","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"2700:19:31"},"scope":4426,"src":"2641:79:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4058,"nodeType":"StructuredDocumentation","src":"2726:230:31","text":" @notice Retrieves the reserve (i.e., total Vault balance) of a given token.\n @param token The token for which to retrieve the reserve\n @return reserveAmount The amount of reserves for the given token"},"functionSelector":"96787092","id":4066,"implemented":false,"kind":"function","modifiers":[],"name":"getReservesOf","nameLocation":"2970:13:31","nodeType":"FunctionDefinition","parameters":{"id":4062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4061,"mutability":"mutable","name":"token","nameLocation":"2991:5:31","nodeType":"VariableDeclaration","scope":4066,"src":"2984:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":4060,"nodeType":"UserDefinedTypeName","pathNode":{"id":4059,"name":"IERC20","nameLocations":["2984:6:31"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"2984:6:31"},"referencedDeclaration":40109,"src":"2984:6:31","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"2983:14:31"},"returnParameters":{"id":4065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4064,"mutability":"mutable","name":"reserveAmount","nameLocation":"3029:13:31","nodeType":"VariableDeclaration","scope":4066,"src":"3021:21:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4063,"name":"uint256","nodeType":"ElementaryTypeName","src":"3021:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3020:23:31"},"scope":4426,"src":"2961:83:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4067,"nodeType":"StructuredDocumentation","src":"3050:944:31","text":" @notice This flag is used to detect and tax \"round-trip\" interactions (adding and removing liquidity in the\n same pool).\n @dev Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra\n layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional\n is the only standard way to exit a position without fees, and this flag is used to enable fees in that case.\n It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse\n than a simple swap for every pool type.\n @param pool Address of the pool to check\n @return liquidityAdded True if liquidity has been added to this pool in the current transaction\n Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session."},"functionSelector":"ace9b89b","id":4074,"implemented":false,"kind":"function","modifiers":[],"name":"getAddLiquidityCalledFlag","nameLocation":"4008:25:31","nodeType":"FunctionDefinition","parameters":{"id":4070,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4069,"mutability":"mutable","name":"pool","nameLocation":"4042:4:31","nodeType":"VariableDeclaration","scope":4074,"src":"4034:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4068,"name":"address","nodeType":"ElementaryTypeName","src":"4034:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4033:14:31"},"returnParameters":{"id":4073,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4072,"mutability":"mutable","name":"liquidityAdded","nameLocation":"4076:14:31","nodeType":"VariableDeclaration","scope":4074,"src":"4071:19:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4071,"name":"bool","nodeType":"ElementaryTypeName","src":"4071:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4070:21:31"},"scope":4426,"src":"3999:93:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4075,"nodeType":"StructuredDocumentation","src":"4323:1604:31","text":" @notice Registers a pool, associating it with its factory and the tokens it manages.\n @dev A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely\n by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an\n additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused\n pool will automatically unpause. Balancer timestamps are 32 bits.\n A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a\n multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to\n the Vault.\n If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the\n authorizer.\n @param pool The address of the pool being registered\n @param tokenConfig An array of descriptors for the tokens the pool will manage\n @param swapFeePercentage The initial static swap fee percentage of the pool\n @param pauseWindowEndTime The timestamp after which it is no longer possible to pause the pool\n @param protocolFeeExempt If true, the pool's initial aggregate fees will be set to 0\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param poolHooksContract Contract that implements the hooks for the pool\n @param liquidityManagement Liquidity management flags with implemented methods"},"functionSelector":"eeec802f","id":4098,"implemented":false,"kind":"function","modifiers":[],"name":"registerPool","nameLocation":"5941:12:31","nodeType":"FunctionDefinition","parameters":{"id":4096,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4077,"mutability":"mutable","name":"pool","nameLocation":"5971:4:31","nodeType":"VariableDeclaration","scope":4098,"src":"5963:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4076,"name":"address","nodeType":"ElementaryTypeName","src":"5963:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4081,"mutability":"mutable","name":"tokenConfig","nameLocation":"6006:11:31","nodeType":"VariableDeclaration","scope":4098,"src":"5985:32:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":4079,"nodeType":"UserDefinedTypeName","pathNode":{"id":4078,"name":"TokenConfig","nameLocations":["5985:11:31"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"5985:11:31"},"referencedDeclaration":4694,"src":"5985:11:31","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":4080,"nodeType":"ArrayTypeName","src":"5985:13:31","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":4083,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"6035:17:31","nodeType":"VariableDeclaration","scope":4098,"src":"6027:25:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4082,"name":"uint256","nodeType":"ElementaryTypeName","src":"6027:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4085,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"6069:18:31","nodeType":"VariableDeclaration","scope":4098,"src":"6062:25:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":4084,"name":"uint32","nodeType":"ElementaryTypeName","src":"6062:6:31","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":4087,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"6102:17:31","nodeType":"VariableDeclaration","scope":4098,"src":"6097:22:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4086,"name":"bool","nodeType":"ElementaryTypeName","src":"6097:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4090,"mutability":"mutable","name":"roleAccounts","nameLocation":"6155:12:31","nodeType":"VariableDeclaration","scope":4098,"src":"6129:38:31","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_calldata_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":4089,"nodeType":"UserDefinedTypeName","pathNode":{"id":4088,"name":"PoolRoleAccounts","nameLocations":["6129:16:31"],"nodeType":"IdentifierPath","referencedDeclaration":4677,"src":"6129:16:31"},"referencedDeclaration":4677,"src":"6129:16:31","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":4092,"mutability":"mutable","name":"poolHooksContract","nameLocation":"6185:17:31","nodeType":"VariableDeclaration","scope":4098,"src":"6177:25:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4091,"name":"address","nodeType":"ElementaryTypeName","src":"6177:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4095,"mutability":"mutable","name":"liquidityManagement","nameLocation":"6241:19:31","nodeType":"VariableDeclaration","scope":4098,"src":"6212:48:31","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":4094,"nodeType":"UserDefinedTypeName","pathNode":{"id":4093,"name":"LiquidityManagement","nameLocations":["6212:19:31"],"nodeType":"IdentifierPath","referencedDeclaration":4580,"src":"6212:19:31"},"referencedDeclaration":4580,"src":"6212:19:31","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"5953:313:31"},"returnParameters":{"id":4097,"nodeType":"ParameterList","parameters":[],"src":"6275:0:31"},"scope":4426,"src":"5932:344:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4099,"nodeType":"StructuredDocumentation","src":"6282:185:31","text":" @notice Checks whether a pool is registered.\n @param pool Address of the pool to check\n @return registered True if the pool is registered, false otherwise"},"functionSelector":"c673bdaf","id":4106,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"6481:16:31","nodeType":"FunctionDefinition","parameters":{"id":4102,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4101,"mutability":"mutable","name":"pool","nameLocation":"6506:4:31","nodeType":"VariableDeclaration","scope":4106,"src":"6498:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4100,"name":"address","nodeType":"ElementaryTypeName","src":"6498:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6497:14:31"},"returnParameters":{"id":4105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4104,"mutability":"mutable","name":"registered","nameLocation":"6540:10:31","nodeType":"VariableDeclaration","scope":4106,"src":"6535:15:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4103,"name":"bool","nodeType":"ElementaryTypeName","src":"6535:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6534:17:31"},"scope":4426,"src":"6472:80:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4107,"nodeType":"StructuredDocumentation","src":"6558:589:31","text":" @notice Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\n @param pool Address of the pool to initialize\n @param to Address that will receive the output BPT\n @param tokens Tokens used to seed the pool (must match the registered tokens)\n @param exactAmountsIn Exact amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param userData Additional (optional) data required for adding initial liquidity\n @return bptAmountOut Output pool token amount"},"functionSelector":"ba8a2be0","id":4127,"implemented":false,"kind":"function","modifiers":[],"name":"initialize","nameLocation":"7161:10:31","nodeType":"FunctionDefinition","parameters":{"id":4123,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4109,"mutability":"mutable","name":"pool","nameLocation":"7189:4:31","nodeType":"VariableDeclaration","scope":4127,"src":"7181:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4108,"name":"address","nodeType":"ElementaryTypeName","src":"7181:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4111,"mutability":"mutable","name":"to","nameLocation":"7211:2:31","nodeType":"VariableDeclaration","scope":4127,"src":"7203:10:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4110,"name":"address","nodeType":"ElementaryTypeName","src":"7203:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4115,"mutability":"mutable","name":"tokens","nameLocation":"7239:6:31","nodeType":"VariableDeclaration","scope":4127,"src":"7223:22:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4113,"nodeType":"UserDefinedTypeName","pathNode":{"id":4112,"name":"IERC20","nameLocations":["7223:6:31"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"7223:6:31"},"referencedDeclaration":40109,"src":"7223:6:31","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":4114,"nodeType":"ArrayTypeName","src":"7223:8:31","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":4118,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"7272:14:31","nodeType":"VariableDeclaration","scope":4127,"src":"7255:31:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4116,"name":"uint256","nodeType":"ElementaryTypeName","src":"7255:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4117,"nodeType":"ArrayTypeName","src":"7255:9:31","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4120,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"7304:15:31","nodeType":"VariableDeclaration","scope":4127,"src":"7296:23:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4119,"name":"uint256","nodeType":"ElementaryTypeName","src":"7296:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4122,"mutability":"mutable","name":"userData","nameLocation":"7342:8:31","nodeType":"VariableDeclaration","scope":4127,"src":"7329:21:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4121,"name":"bytes","nodeType":"ElementaryTypeName","src":"7329:5:31","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7171:185:31"},"returnParameters":{"id":4126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4125,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7383:12:31","nodeType":"VariableDeclaration","scope":4127,"src":"7375:20:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4124,"name":"uint256","nodeType":"ElementaryTypeName","src":"7375:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7374:22:31"},"scope":4426,"src":"7152:245:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4128,"nodeType":"StructuredDocumentation","src":"7627:258:31","text":" @notice Checks whether a pool is initialized.\n @dev An initialized pool can be considered registered as well.\n @param pool Address of the pool to check\n @return initialized True if the pool is initialized, false otherwise"},"functionSelector":"532cec7c","id":4135,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolInitialized","nameLocation":"7899:17:31","nodeType":"FunctionDefinition","parameters":{"id":4131,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4130,"mutability":"mutable","name":"pool","nameLocation":"7925:4:31","nodeType":"VariableDeclaration","scope":4135,"src":"7917:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4129,"name":"address","nodeType":"ElementaryTypeName","src":"7917:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7916:14:31"},"returnParameters":{"id":4134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4133,"mutability":"mutable","name":"initialized","nameLocation":"7959:11:31","nodeType":"VariableDeclaration","scope":4135,"src":"7954:16:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4132,"name":"bool","nodeType":"ElementaryTypeName","src":"7954:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7953:18:31"},"scope":4426,"src":"7890:82:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4136,"nodeType":"StructuredDocumentation","src":"7978:152:31","text":" @notice Gets the tokens registered to a pool.\n @param pool Address of the pool\n @return tokens List of tokens in the pool"},"functionSelector":"ca4f2803","id":4145,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokens","nameLocation":"8144:13:31","nodeType":"FunctionDefinition","parameters":{"id":4139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4138,"mutability":"mutable","name":"pool","nameLocation":"8166:4:31","nodeType":"VariableDeclaration","scope":4145,"src":"8158:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4137,"name":"address","nodeType":"ElementaryTypeName","src":"8158:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8157:14:31"},"returnParameters":{"id":4144,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4143,"mutability":"mutable","name":"tokens","nameLocation":"8211:6:31","nodeType":"VariableDeclaration","scope":4145,"src":"8195:22:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4141,"nodeType":"UserDefinedTypeName","pathNode":{"id":4140,"name":"IERC20","nameLocations":["8195:6:31"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"8195:6:31"},"referencedDeclaration":40109,"src":"8195:6:31","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":4142,"nodeType":"ArrayTypeName","src":"8195:8:31","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"8194:24:31"},"scope":4426,"src":"8135:84:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4146,"nodeType":"StructuredDocumentation","src":"8225:512:31","text":" @notice Gets pool token rates.\n @dev This function performs external calls if tokens are yield-bearing. All returned arrays are in token\n registration order.\n @param pool Address of the pool\n @return decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. FP(1) for 18-decimal tokens\n @return tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens"},"functionSelector":"7e361bde","id":4157,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenRates","nameLocation":"8751:17:31","nodeType":"FunctionDefinition","parameters":{"id":4149,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4148,"mutability":"mutable","name":"pool","nameLocation":"8786:4:31","nodeType":"VariableDeclaration","scope":4157,"src":"8778:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4147,"name":"address","nodeType":"ElementaryTypeName","src":"8778:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8768:28:31"},"returnParameters":{"id":4156,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4152,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"8837:21:31","nodeType":"VariableDeclaration","scope":4157,"src":"8820:38:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4150,"name":"uint256","nodeType":"ElementaryTypeName","src":"8820:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4151,"nodeType":"ArrayTypeName","src":"8820:9:31","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4155,"mutability":"mutable","name":"tokenRates","nameLocation":"8877:10:31","nodeType":"VariableDeclaration","scope":4157,"src":"8860:27:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4153,"name":"uint256","nodeType":"ElementaryTypeName","src":"8860:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4154,"nodeType":"ArrayTypeName","src":"8860:9:31","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8819:69:31"},"scope":4426,"src":"8742:147:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4158,"nodeType":"StructuredDocumentation","src":"8895:287:31","text":" @notice Returns comprehensive pool data for the given pool.\n @dev This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\n @param pool The address of the pool\n @return poolData The `PoolData` result"},"functionSelector":"13d21cdf","id":4166,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolData","nameLocation":"9196:11:31","nodeType":"FunctionDefinition","parameters":{"id":4161,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4160,"mutability":"mutable","name":"pool","nameLocation":"9216:4:31","nodeType":"VariableDeclaration","scope":4166,"src":"9208:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4159,"name":"address","nodeType":"ElementaryTypeName","src":"9208:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9207:14:31"},"returnParameters":{"id":4165,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4164,"mutability":"mutable","name":"poolData","nameLocation":"9261:8:31","nodeType":"VariableDeclaration","scope":4166,"src":"9245:24:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":4163,"nodeType":"UserDefinedTypeName","pathNode":{"id":4162,"name":"PoolData","nameLocations":["9245:8:31"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"9245:8:31"},"referencedDeclaration":4729,"src":"9245:8:31","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"9244:26:31"},"scope":4426,"src":"9187:84:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4167,"nodeType":"StructuredDocumentation","src":"9277:531:31","text":" @notice Gets the raw data for a pool: tokens, raw balances, scaling factors.\n @param pool Address of the pool\n @return tokens The pool tokens, sorted in registration order\n @return tokenInfo Token info structs (type, rate provider, yield flag), sorted in token registration order\n @return balancesRaw Current native decimal balances of the pool tokens, sorted in token registration order\n @return lastBalancesLiveScaled18 Last saved live balances, sorted in token registration order"},"functionSelector":"67e0e076","id":4186,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenInfo","nameLocation":"9822:16:31","nodeType":"FunctionDefinition","parameters":{"id":4170,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4169,"mutability":"mutable","name":"pool","nameLocation":"9856:4:31","nodeType":"VariableDeclaration","scope":4186,"src":"9848:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4168,"name":"address","nodeType":"ElementaryTypeName","src":"9848:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9838:28:31"},"returnParameters":{"id":4185,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4174,"mutability":"mutable","name":"tokens","nameLocation":"9943:6:31","nodeType":"VariableDeclaration","scope":4186,"src":"9927:22:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4172,"nodeType":"UserDefinedTypeName","pathNode":{"id":4171,"name":"IERC20","nameLocations":["9927:6:31"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"9927:6:31"},"referencedDeclaration":40109,"src":"9927:6:31","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":4173,"nodeType":"ArrayTypeName","src":"9927:8:31","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":4178,"mutability":"mutable","name":"tokenInfo","nameLocation":"9982:9:31","nodeType":"VariableDeclaration","scope":4186,"src":"9963:28:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4704_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":4176,"nodeType":"UserDefinedTypeName","pathNode":{"id":4175,"name":"TokenInfo","nameLocations":["9963:9:31"],"nodeType":"IdentifierPath","referencedDeclaration":4704,"src":"9963:9:31"},"referencedDeclaration":4704,"src":"9963:9:31","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_storage_ptr","typeString":"struct TokenInfo"}},"id":4177,"nodeType":"ArrayTypeName","src":"9963:11:31","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4704_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":4181,"mutability":"mutable","name":"balancesRaw","nameLocation":"10022:11:31","nodeType":"VariableDeclaration","scope":4186,"src":"10005:28:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4179,"name":"uint256","nodeType":"ElementaryTypeName","src":"10005:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4180,"nodeType":"ArrayTypeName","src":"10005:9:31","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4184,"mutability":"mutable","name":"lastBalancesLiveScaled18","nameLocation":"10064:24:31","nodeType":"VariableDeclaration","scope":4186,"src":"10047:41:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4182,"name":"uint256","nodeType":"ElementaryTypeName","src":"10047:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4183,"nodeType":"ArrayTypeName","src":"10047:9:31","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9913:185:31"},"scope":4426,"src":"9813:286:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4187,"nodeType":"StructuredDocumentation","src":"10105:312:31","text":" @notice Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in\n registration order.\n @param pool Address of the pool\n @return balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates"},"functionSelector":"535cfd8a","id":4195,"implemented":false,"kind":"function","modifiers":[],"name":"getCurrentLiveBalances","nameLocation":"10431:22:31","nodeType":"FunctionDefinition","parameters":{"id":4190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4189,"mutability":"mutable","name":"pool","nameLocation":"10462:4:31","nodeType":"VariableDeclaration","scope":4195,"src":"10454:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4188,"name":"address","nodeType":"ElementaryTypeName","src":"10454:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10453:14:31"},"returnParameters":{"id":4194,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4193,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"10508:20:31","nodeType":"VariableDeclaration","scope":4195,"src":"10491:37:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4191,"name":"uint256","nodeType":"ElementaryTypeName","src":"10491:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4192,"nodeType":"ArrayTypeName","src":"10491:9:31","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10490:39:31"},"scope":4426,"src":"10422:108:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4196,"nodeType":"StructuredDocumentation","src":"10536:301:31","text":" @notice Gets the configuration parameters of a pool.\n @dev The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\n @param pool Address of the pool\n @return poolConfig The pool configuration as a `PoolConfig` struct"},"functionSelector":"f29486a1","id":4204,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolConfig","nameLocation":"10851:13:31","nodeType":"FunctionDefinition","parameters":{"id":4199,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4198,"mutability":"mutable","name":"pool","nameLocation":"10873:4:31","nodeType":"VariableDeclaration","scope":4204,"src":"10865:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4197,"name":"address","nodeType":"ElementaryTypeName","src":"10865:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10864:14:31"},"returnParameters":{"id":4203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4202,"mutability":"mutable","name":"poolConfig","nameLocation":"10920:10:31","nodeType":"VariableDeclaration","scope":4204,"src":"10902:28:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig"},"typeName":{"id":4201,"nodeType":"UserDefinedTypeName","pathNode":{"id":4200,"name":"PoolConfig","nameLocations":["10902:10:31"],"nodeType":"IdentifierPath","referencedDeclaration":4605,"src":"10902:10:31"},"referencedDeclaration":4605,"src":"10902:10:31","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_storage_ptr","typeString":"struct PoolConfig"}},"visibility":"internal"}],"src":"10901:30:31"},"scope":4426,"src":"10842:90:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4205,"nodeType":"StructuredDocumentation","src":"10938:283:31","text":" @notice Gets the hooks configuration parameters of a pool.\n @dev The `HooksConfig` contains flags indicating which pool hooks are implemented.\n @param pool Address of the pool\n @return hooksConfig The hooks configuration as a `HooksConfig` struct"},"functionSelector":"ce8630d4","id":4213,"implemented":false,"kind":"function","modifiers":[],"name":"getHooksConfig","nameLocation":"11235:14:31","nodeType":"FunctionDefinition","parameters":{"id":4208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4207,"mutability":"mutable","name":"pool","nameLocation":"11258:4:31","nodeType":"VariableDeclaration","scope":4213,"src":"11250:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4206,"name":"address","nodeType":"ElementaryTypeName","src":"11250:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11249:14:31"},"returnParameters":{"id":4212,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4211,"mutability":"mutable","name":"hooksConfig","nameLocation":"11306:11:31","nodeType":"VariableDeclaration","scope":4213,"src":"11287:30:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4651_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":4210,"nodeType":"UserDefinedTypeName","pathNode":{"id":4209,"name":"HooksConfig","nameLocations":["11287:11:31"],"nodeType":"IdentifierPath","referencedDeclaration":4651,"src":"11287:11:31"},"referencedDeclaration":4651,"src":"11287:11:31","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4651_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"}],"src":"11286:32:31"},"scope":4426,"src":"11226:93:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4214,"nodeType":"StructuredDocumentation","src":"11325:160:31","text":" @notice The current rate of a pool token (BPT) = invariant / totalSupply.\n @param pool Address of the pool\n @return rate BPT rate"},"functionSelector":"4f037ee7","id":4221,"implemented":false,"kind":"function","modifiers":[],"name":"getBptRate","nameLocation":"11499:10:31","nodeType":"FunctionDefinition","parameters":{"id":4217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4216,"mutability":"mutable","name":"pool","nameLocation":"11518:4:31","nodeType":"VariableDeclaration","scope":4221,"src":"11510:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4215,"name":"address","nodeType":"ElementaryTypeName","src":"11510:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11509:14:31"},"returnParameters":{"id":4220,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4219,"mutability":"mutable","name":"rate","nameLocation":"11555:4:31","nodeType":"VariableDeclaration","scope":4221,"src":"11547:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4218,"name":"uint256","nodeType":"ElementaryTypeName","src":"11547:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11546:14:31"},"scope":4426,"src":"11490:71:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4222,"nodeType":"StructuredDocumentation","src":"11792:168:31","text":" @notice Gets the total supply of a given ERC20 token.\n @param token The token address\n @return tokenTotalSupply Total supply of the token"},"functionSelector":"e4dc2aa4","id":4229,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"11974:11:31","nodeType":"FunctionDefinition","parameters":{"id":4225,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4224,"mutability":"mutable","name":"token","nameLocation":"11994:5:31","nodeType":"VariableDeclaration","scope":4229,"src":"11986:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4223,"name":"address","nodeType":"ElementaryTypeName","src":"11986:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11985:15:31"},"returnParameters":{"id":4228,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4227,"mutability":"mutable","name":"tokenTotalSupply","nameLocation":"12032:16:31","nodeType":"VariableDeclaration","scope":4229,"src":"12024:24:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4226,"name":"uint256","nodeType":"ElementaryTypeName","src":"12024:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12023:26:31"},"scope":4426,"src":"11965:85:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4230,"nodeType":"StructuredDocumentation","src":"12056:225:31","text":" @notice Gets the balance of an account for a given ERC20 token.\n @param token Address of the token\n @param account Address of the account\n @return tokenBalance Token balance of the account"},"functionSelector":"f7888aec","id":4239,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"12295:9:31","nodeType":"FunctionDefinition","parameters":{"id":4235,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4232,"mutability":"mutable","name":"token","nameLocation":"12313:5:31","nodeType":"VariableDeclaration","scope":4239,"src":"12305:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4231,"name":"address","nodeType":"ElementaryTypeName","src":"12305:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4234,"mutability":"mutable","name":"account","nameLocation":"12328:7:31","nodeType":"VariableDeclaration","scope":4239,"src":"12320:15:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4233,"name":"address","nodeType":"ElementaryTypeName","src":"12320:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12304:32:31"},"returnParameters":{"id":4238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4237,"mutability":"mutable","name":"tokenBalance","nameLocation":"12368:12:31","nodeType":"VariableDeclaration","scope":4239,"src":"12360:20:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4236,"name":"uint256","nodeType":"ElementaryTypeName","src":"12360:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12359:22:31"},"scope":4426,"src":"12286:96:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4240,"nodeType":"StructuredDocumentation","src":"12388:299:31","text":" @notice Gets the allowance of a spender for a given ERC20 token and owner.\n @param token Address of the token\n @param owner Address of the owner\n @param spender Address of the spender\n @return tokenAllowance Amount of tokens the spender is allowed to spend"},"functionSelector":"927da105","id":4251,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"12701:9:31","nodeType":"FunctionDefinition","parameters":{"id":4247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4242,"mutability":"mutable","name":"token","nameLocation":"12719:5:31","nodeType":"VariableDeclaration","scope":4251,"src":"12711:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4241,"name":"address","nodeType":"ElementaryTypeName","src":"12711:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4244,"mutability":"mutable","name":"owner","nameLocation":"12734:5:31","nodeType":"VariableDeclaration","scope":4251,"src":"12726:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4243,"name":"address","nodeType":"ElementaryTypeName","src":"12726:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4246,"mutability":"mutable","name":"spender","nameLocation":"12749:7:31","nodeType":"VariableDeclaration","scope":4251,"src":"12741:15:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4245,"name":"address","nodeType":"ElementaryTypeName","src":"12741:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12710:47:31"},"returnParameters":{"id":4250,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4249,"mutability":"mutable","name":"tokenAllowance","nameLocation":"12789:14:31","nodeType":"VariableDeclaration","scope":4251,"src":"12781:22:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4248,"name":"uint256","nodeType":"ElementaryTypeName","src":"12781:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12780:24:31"},"scope":4426,"src":"12692:113:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4252,"nodeType":"StructuredDocumentation","src":"12811:475:31","text":" @notice Approves a spender to spend pool tokens on behalf of sender.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param owner Address of the owner\n @param spender Address of the spender\n @param amount Amount of tokens to approve\n @return success True if successful, false otherwise"},"functionSelector":"e1f21c67","id":4263,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"13300:7:31","nodeType":"FunctionDefinition","parameters":{"id":4259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4254,"mutability":"mutable","name":"owner","nameLocation":"13316:5:31","nodeType":"VariableDeclaration","scope":4263,"src":"13308:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4253,"name":"address","nodeType":"ElementaryTypeName","src":"13308:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4256,"mutability":"mutable","name":"spender","nameLocation":"13331:7:31","nodeType":"VariableDeclaration","scope":4263,"src":"13323:15:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4255,"name":"address","nodeType":"ElementaryTypeName","src":"13323:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4258,"mutability":"mutable","name":"amount","nameLocation":"13348:6:31","nodeType":"VariableDeclaration","scope":4263,"src":"13340:14:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4257,"name":"uint256","nodeType":"ElementaryTypeName","src":"13340:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13307:48:31"},"returnParameters":{"id":4262,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4261,"mutability":"mutable","name":"success","nameLocation":"13379:7:31","nodeType":"VariableDeclaration","scope":4263,"src":"13374:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4260,"name":"bool","nodeType":"ElementaryTypeName","src":"13374:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13373:14:31"},"scope":4426,"src":"13291:97:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4264,"nodeType":"StructuredDocumentation","src":"13615:251:31","text":" @notice Indicates whether a pool is paused.\n @dev If a pool is paused, all non-Recovery Mode state-changing operations will revert.\n @param pool The pool to be checked\n @return poolPaused True if the pool is paused"},"functionSelector":"6c9bc732","id":4271,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolPaused","nameLocation":"13880:12:31","nodeType":"FunctionDefinition","parameters":{"id":4267,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4266,"mutability":"mutable","name":"pool","nameLocation":"13901:4:31","nodeType":"VariableDeclaration","scope":4271,"src":"13893:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4265,"name":"address","nodeType":"ElementaryTypeName","src":"13893:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13892:14:31"},"returnParameters":{"id":4270,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4269,"mutability":"mutable","name":"poolPaused","nameLocation":"13935:10:31","nodeType":"VariableDeclaration","scope":4271,"src":"13930:15:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4268,"name":"bool","nodeType":"ElementaryTypeName","src":"13930:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13929:17:31"},"scope":4426,"src":"13871:76:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4272,"nodeType":"StructuredDocumentation","src":"13953:648:31","text":" @notice Returns the paused status, and end times of the Pool's pause window and buffer period.\n @dev Note that even when set to a paused state, the pool will automatically unpause at the end of\n the buffer period. Balancer timestamps are 32 bits.\n @param pool The pool whose data is requested\n @return poolPaused True if the Pool is paused\n @return poolPauseWindowEndTime The timestamp of the end of the Pool's pause window\n @return poolBufferPeriodEndTime The timestamp after which the Pool unpauses itself (if paused)\n @return pauseManager The pause manager, or the zero address"},"functionSelector":"15e32046","id":4285,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolPausedState","nameLocation":"14615:18:31","nodeType":"FunctionDefinition","parameters":{"id":4275,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4274,"mutability":"mutable","name":"pool","nameLocation":"14651:4:31","nodeType":"VariableDeclaration","scope":4285,"src":"14643:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4273,"name":"address","nodeType":"ElementaryTypeName","src":"14643:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14633:28:31"},"returnParameters":{"id":4284,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4277,"mutability":"mutable","name":"poolPaused","nameLocation":"14714:10:31","nodeType":"VariableDeclaration","scope":4285,"src":"14709:15:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4276,"name":"bool","nodeType":"ElementaryTypeName","src":"14709:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4279,"mutability":"mutable","name":"poolPauseWindowEndTime","nameLocation":"14733:22:31","nodeType":"VariableDeclaration","scope":4285,"src":"14726:29:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":4278,"name":"uint32","nodeType":"ElementaryTypeName","src":"14726:6:31","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":4281,"mutability":"mutable","name":"poolBufferPeriodEndTime","nameLocation":"14764:23:31","nodeType":"VariableDeclaration","scope":4285,"src":"14757:30:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":4280,"name":"uint32","nodeType":"ElementaryTypeName","src":"14757:6:31","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":4283,"mutability":"mutable","name":"pauseManager","nameLocation":"14797:12:31","nodeType":"VariableDeclaration","scope":4285,"src":"14789:20:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4282,"name":"address","nodeType":"ElementaryTypeName","src":"14789:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14708:102:31"},"scope":4426,"src":"14606:205:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4286,"nodeType":"StructuredDocumentation","src":"15039:332:31","text":" @notice Checks if the wrapped token has an initialized buffer in the Vault.\n @dev An initialized buffer should have an asset registered in the Vault.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @return isBufferInitialized True if the ERC4626 buffer is initialized"},"functionSelector":"6844846b","id":4294,"implemented":false,"kind":"function","modifiers":[],"name":"isERC4626BufferInitialized","nameLocation":"15385:26:31","nodeType":"FunctionDefinition","parameters":{"id":4290,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4289,"mutability":"mutable","name":"wrappedToken","nameLocation":"15421:12:31","nodeType":"VariableDeclaration","scope":4294,"src":"15412:21:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":4288,"nodeType":"UserDefinedTypeName","pathNode":{"id":4287,"name":"IERC4626","nameLocations":["15412:8:31"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"15412:8:31"},"referencedDeclaration":39833,"src":"15412:8:31","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"15411:23:31"},"returnParameters":{"id":4293,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4292,"mutability":"mutable","name":"isBufferInitialized","nameLocation":"15463:19:31","nodeType":"VariableDeclaration","scope":4294,"src":"15458:24:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4291,"name":"bool","nodeType":"ElementaryTypeName","src":"15458:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15457:26:31"},"scope":4426,"src":"15376:108:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4295,"nodeType":"StructuredDocumentation","src":"15490:477:31","text":" @notice Gets the registered asset for a given buffer.\n @dev To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers\n should never call `wrapper.asset()` directly, at least without checking it against the asset registered with\n the Vault on initialization.\n @param wrappedToken The wrapped token specifying the buffer\n @return asset The underlying asset of the wrapped token"},"functionSelector":"4afbaf5a","id":4303,"implemented":false,"kind":"function","modifiers":[],"name":"getERC4626BufferAsset","nameLocation":"15981:21:31","nodeType":"FunctionDefinition","parameters":{"id":4299,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4298,"mutability":"mutable","name":"wrappedToken","nameLocation":"16012:12:31","nodeType":"VariableDeclaration","scope":4303,"src":"16003:21:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":4297,"nodeType":"UserDefinedTypeName","pathNode":{"id":4296,"name":"IERC4626","nameLocations":["16003:8:31"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"16003:8:31"},"referencedDeclaration":39833,"src":"16003:8:31","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"16002:23:31"},"returnParameters":{"id":4302,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4301,"mutability":"mutable","name":"asset","nameLocation":"16057:5:31","nodeType":"VariableDeclaration","scope":4303,"src":"16049:13:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4300,"name":"address","nodeType":"ElementaryTypeName","src":"16049:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16048:15:31"},"scope":4426,"src":"15972:92:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4304,"nodeType":"StructuredDocumentation","src":"16288:379:31","text":" @notice Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\n @param pool The address of the pool for which aggregate fees have been collected\n @param token The address of the token in which fees have been accumulated\n @return swapFeeAmount The total amount of fees accumulated in the specified token"},"functionSelector":"85e0b999","id":4314,"implemented":false,"kind":"function","modifiers":[],"name":"getAggregateSwapFeeAmount","nameLocation":"16681:25:31","nodeType":"FunctionDefinition","parameters":{"id":4310,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4306,"mutability":"mutable","name":"pool","nameLocation":"16715:4:31","nodeType":"VariableDeclaration","scope":4314,"src":"16707:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4305,"name":"address","nodeType":"ElementaryTypeName","src":"16707:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4309,"mutability":"mutable","name":"token","nameLocation":"16728:5:31","nodeType":"VariableDeclaration","scope":4314,"src":"16721:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":4308,"nodeType":"UserDefinedTypeName","pathNode":{"id":4307,"name":"IERC20","nameLocations":["16721:6:31"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"16721:6:31"},"referencedDeclaration":40109,"src":"16721:6:31","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"16706:28:31"},"returnParameters":{"id":4313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4312,"mutability":"mutable","name":"swapFeeAmount","nameLocation":"16766:13:31","nodeType":"VariableDeclaration","scope":4314,"src":"16758:21:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4311,"name":"uint256","nodeType":"ElementaryTypeName","src":"16758:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16757:23:31"},"scope":4426,"src":"16672:109:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4315,"nodeType":"StructuredDocumentation","src":"16787:381:31","text":" @notice Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\n @param pool The address of the pool for which aggregate fees have been collected\n @param token The address of the token in which fees have been accumulated\n @return yieldFeeAmount The total amount of fees accumulated in the specified token"},"functionSelector":"00fdfa13","id":4325,"implemented":false,"kind":"function","modifiers":[],"name":"getAggregateYieldFeeAmount","nameLocation":"17182:26:31","nodeType":"FunctionDefinition","parameters":{"id":4321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4317,"mutability":"mutable","name":"pool","nameLocation":"17217:4:31","nodeType":"VariableDeclaration","scope":4325,"src":"17209:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4316,"name":"address","nodeType":"ElementaryTypeName","src":"17209:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4320,"mutability":"mutable","name":"token","nameLocation":"17230:5:31","nodeType":"VariableDeclaration","scope":4325,"src":"17223:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":4319,"nodeType":"UserDefinedTypeName","pathNode":{"id":4318,"name":"IERC20","nameLocations":["17223:6:31"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"17223:6:31"},"referencedDeclaration":40109,"src":"17223:6:31","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"17208:28:31"},"returnParameters":{"id":4324,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4323,"mutability":"mutable","name":"yieldFeeAmount","nameLocation":"17268:14:31","nodeType":"VariableDeclaration","scope":4325,"src":"17260:22:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4322,"name":"uint256","nodeType":"ElementaryTypeName","src":"17260:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17259:24:31"},"scope":4426,"src":"17173:111:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4326,"nodeType":"StructuredDocumentation","src":"17290:271:31","text":" @notice Fetches the static swap fee percentage for a given pool.\n @param pool The address of the pool whose static swap fee percentage is being queried\n @return swapFeePercentage The current static swap fee percentage for the specified pool"},"functionSelector":"b45090f9","id":4333,"implemented":false,"kind":"function","modifiers":[],"name":"getStaticSwapFeePercentage","nameLocation":"17575:26:31","nodeType":"FunctionDefinition","parameters":{"id":4329,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4328,"mutability":"mutable","name":"pool","nameLocation":"17610:4:31","nodeType":"VariableDeclaration","scope":4333,"src":"17602:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4327,"name":"address","nodeType":"ElementaryTypeName","src":"17602:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17601:14:31"},"returnParameters":{"id":4332,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4331,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"17647:17:31","nodeType":"VariableDeclaration","scope":4333,"src":"17639:25:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4330,"name":"uint256","nodeType":"ElementaryTypeName","src":"17639:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17638:27:31"},"scope":4426,"src":"17566:100:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4334,"nodeType":"StructuredDocumentation","src":"17672:286:31","text":" @notice Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\n @param pool The address of the pool whose roles are being queried\n @return roleAccounts A struct containing the role accounts for the pool (or 0 if unassigned)"},"functionSelector":"e9ddeb26","id":4342,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolRoleAccounts","nameLocation":"17972:19:31","nodeType":"FunctionDefinition","parameters":{"id":4337,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4336,"mutability":"mutable","name":"pool","nameLocation":"18000:4:31","nodeType":"VariableDeclaration","scope":4342,"src":"17992:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4335,"name":"address","nodeType":"ElementaryTypeName","src":"17992:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17991:14:31"},"returnParameters":{"id":4341,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4340,"mutability":"mutable","name":"roleAccounts","nameLocation":"18053:12:31","nodeType":"VariableDeclaration","scope":4342,"src":"18029:36:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":4339,"nodeType":"UserDefinedTypeName","pathNode":{"id":4338,"name":"PoolRoleAccounts","nameLocations":["18029:16:31"],"nodeType":"IdentifierPath","referencedDeclaration":4677,"src":"18029:16:31"},"referencedDeclaration":4677,"src":"18029:16:31","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"src":"18028:38:31"},"scope":4426,"src":"17963:104:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4343,"nodeType":"StructuredDocumentation","src":"18073:363:31","text":" @notice Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\n @dev Reverts if the hook doesn't return the success flag set to `true`.\n @param pool The pool\n @param swapParams The swap parameters used to compute the fee\n @return dynamicSwapFeePercentage The dynamic swap fee percentage"},"functionSelector":"4d472bdd","id":4353,"implemented":false,"kind":"function","modifiers":[],"name":"computeDynamicSwapFeePercentage","nameLocation":"18450:31:31","nodeType":"FunctionDefinition","parameters":{"id":4349,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4345,"mutability":"mutable","name":"pool","nameLocation":"18499:4:31","nodeType":"VariableDeclaration","scope":4353,"src":"18491:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4344,"name":"address","nodeType":"ElementaryTypeName","src":"18491:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4348,"mutability":"mutable","name":"swapParams","nameLocation":"18535:10:31","nodeType":"VariableDeclaration","scope":4353,"src":"18513:32:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":4347,"nodeType":"UserDefinedTypeName","pathNode":{"id":4346,"name":"PoolSwapParams","nameLocations":["18513:14:31"],"nodeType":"IdentifierPath","referencedDeclaration":4772,"src":"18513:14:31"},"referencedDeclaration":4772,"src":"18513:14:31","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"src":"18481:70:31"},"returnParameters":{"id":4352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4351,"mutability":"mutable","name":"dynamicSwapFeePercentage","nameLocation":"18583:24:31","nodeType":"VariableDeclaration","scope":4353,"src":"18575:32:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4350,"name":"uint256","nodeType":"ElementaryTypeName","src":"18575:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18574:34:31"},"scope":4426,"src":"18441:168:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4354,"nodeType":"StructuredDocumentation","src":"18615:145:31","text":" @notice Returns the Protocol Fee Controller address.\n @return protocolFeeController Address of the ProtocolFeeController"},"functionSelector":"85f2dbd4","id":4360,"implemented":false,"kind":"function","modifiers":[],"name":"getProtocolFeeController","nameLocation":"18774:24:31","nodeType":"FunctionDefinition","parameters":{"id":4355,"nodeType":"ParameterList","parameters":[],"src":"18798:2:31"},"returnParameters":{"id":4359,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4358,"mutability":"mutable","name":"protocolFeeController","nameLocation":"18847:21:31","nodeType":"VariableDeclaration","scope":4360,"src":"18824:44:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"},"typeName":{"id":4357,"nodeType":"UserDefinedTypeName","pathNode":{"id":4356,"name":"IProtocolFeeController","nameLocations":["18824:22:31"],"nodeType":"IdentifierPath","referencedDeclaration":2420,"src":"18824:22:31"},"referencedDeclaration":2420,"src":"18824:22:31","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"18823:46:31"},"scope":4426,"src":"18765:105:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4361,"nodeType":"StructuredDocumentation","src":"19098:296:31","text":" @notice Checks whether a pool is in Recovery Mode.\n @dev Recovery Mode enables a safe proportional withdrawal path, with no external calls.\n @param pool Address of the pool to check\n @return inRecoveryMode True if the pool is in Recovery Mode, false otherwise"},"functionSelector":"be7d628a","id":4368,"implemented":false,"kind":"function","modifiers":[],"name":"isPoolInRecoveryMode","nameLocation":"19408:20:31","nodeType":"FunctionDefinition","parameters":{"id":4364,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4363,"mutability":"mutable","name":"pool","nameLocation":"19437:4:31","nodeType":"VariableDeclaration","scope":4368,"src":"19429:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4362,"name":"address","nodeType":"ElementaryTypeName","src":"19429:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19428:14:31"},"returnParameters":{"id":4367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4366,"mutability":"mutable","name":"inRecoveryMode","nameLocation":"19471:14:31","nodeType":"VariableDeclaration","scope":4368,"src":"19466:19:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4365,"name":"bool","nodeType":"ElementaryTypeName","src":"19466:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19465:21:31"},"scope":4426,"src":"19399:88:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4369,"nodeType":"StructuredDocumentation","src":"19493:679:31","text":" @notice Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out.\n The request is implemented by the Vault without any interaction with the pool, ensuring that\n it works the same for all pools, and cannot be disabled by a new pool type.\n @param pool Address of the pool\n @param from Address of user to burn pool tokens from\n @param exactBptAmountIn Input pool token amount\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @return amountsOut Actual calculated amounts of output tokens, sorted in token registration order"},"functionSelector":"a07d6040","id":4384,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidityRecovery","nameLocation":"20186:23:31","nodeType":"FunctionDefinition","parameters":{"id":4379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4371,"mutability":"mutable","name":"pool","nameLocation":"20227:4:31","nodeType":"VariableDeclaration","scope":4384,"src":"20219:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4370,"name":"address","nodeType":"ElementaryTypeName","src":"20219:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4373,"mutability":"mutable","name":"from","nameLocation":"20249:4:31","nodeType":"VariableDeclaration","scope":4384,"src":"20241:12:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4372,"name":"address","nodeType":"ElementaryTypeName","src":"20241:7:31","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4375,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"20271:16:31","nodeType":"VariableDeclaration","scope":4384,"src":"20263:24:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4374,"name":"uint256","nodeType":"ElementaryTypeName","src":"20263:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4378,"mutability":"mutable","name":"minAmountsOut","nameLocation":"20314:13:31","nodeType":"VariableDeclaration","scope":4384,"src":"20297:30:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4376,"name":"uint256","nodeType":"ElementaryTypeName","src":"20297:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4377,"nodeType":"ArrayTypeName","src":"20297:9:31","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"20209:124:31"},"returnParameters":{"id":4383,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4382,"mutability":"mutable","name":"amountsOut","nameLocation":"20369:10:31","nodeType":"VariableDeclaration","scope":4384,"src":"20352:27:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4380,"name":"uint256","nodeType":"ElementaryTypeName","src":"20352:7:31","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4381,"nodeType":"ArrayTypeName","src":"20352:9:31","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"20351:29:31"},"scope":4426,"src":"20177:204:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4385,"nodeType":"StructuredDocumentation","src":"20602:699:31","text":" @notice Performs a callback on msg.sender with arguments provided in `data`.\n @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n anything else will revert.\n Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n Allows the external calling of a function via the Vault contract to\n access Vault's functions guarded by `onlyWhenUnlocked`.\n `transient` modifier ensuring balances changes within the Vault are settled.\n @param data Contains function signature and args to be passed to the msg.sender\n @return result Resulting data from the call"},"functionSelector":"edfa3568","id":4392,"implemented":false,"kind":"function","modifiers":[],"name":"quote","nameLocation":"21315:5:31","nodeType":"FunctionDefinition","parameters":{"id":4388,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4387,"mutability":"mutable","name":"data","nameLocation":"21336:4:31","nodeType":"VariableDeclaration","scope":4392,"src":"21321:19:31","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":4386,"name":"bytes","nodeType":"ElementaryTypeName","src":"21321:5:31","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21320:21:31"},"returnParameters":{"id":4391,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4390,"mutability":"mutable","name":"result","nameLocation":"21373:6:31","nodeType":"VariableDeclaration","scope":4392,"src":"21360:19:31","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4389,"name":"bytes","nodeType":"ElementaryTypeName","src":"21360:5:31","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21359:21:31"},"scope":4426,"src":"21306:75:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4393,"nodeType":"StructuredDocumentation","src":"21387:731:31","text":" @notice Performs a callback on msg.sender with arguments provided in `data`.\n @dev Used to query a set of operations on the Vault. Only off-chain eth_call are allowed,\n anything else will revert.\n Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier.\n Allows the external calling of a function via the Vault contract to\n access Vault's functions guarded by `onlyWhenUnlocked`.\n `transient` modifier ensuring balances changes within the Vault are settled.\n This call always reverts, returning the result in the revert reason.\n @param data Contains function signature and args to be passed to the msg.sender"},"functionSelector":"757d64b3","id":4398,"implemented":false,"kind":"function","modifiers":[],"name":"quoteAndRevert","nameLocation":"22132:14:31","nodeType":"FunctionDefinition","parameters":{"id":4396,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4395,"mutability":"mutable","name":"data","nameLocation":"22162:4:31","nodeType":"VariableDeclaration","scope":4398,"src":"22147:19:31","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":4394,"name":"bytes","nodeType":"ElementaryTypeName","src":"22147:5:31","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"22146:21:31"},"returnParameters":{"id":4397,"nodeType":"ParameterList","parameters":[],"src":"22176:0:31"},"scope":4426,"src":"22123:54:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4399,"nodeType":"StructuredDocumentation","src":"22183:239:31","text":" @notice Returns true if queries are disabled on the Vault.\n @dev If true, queries might either be disabled temporarily or permanently.\n @return queryDisabled True if query functionality is reversibly disabled"},"functionSelector":"b4aef0ab","id":4404,"implemented":false,"kind":"function","modifiers":[],"name":"isQueryDisabled","nameLocation":"22436:15:31","nodeType":"FunctionDefinition","parameters":{"id":4400,"nodeType":"ParameterList","parameters":[],"src":"22451:2:31"},"returnParameters":{"id":4403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4402,"mutability":"mutable","name":"queryDisabled","nameLocation":"22482:13:31","nodeType":"VariableDeclaration","scope":4404,"src":"22477:18:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4401,"name":"bool","nodeType":"ElementaryTypeName","src":"22477:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"22476:20:31"},"scope":4426,"src":"22427:70:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4405,"nodeType":"StructuredDocumentation","src":"22503:302:31","text":" @notice Returns true if queries are disabled permanently; false if they are enabled.\n @dev This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\n @return queryDisabledPermanently True if query functionality is permanently disabled"},"functionSelector":"13ef8a5d","id":4410,"implemented":false,"kind":"function","modifiers":[],"name":"isQueryDisabledPermanently","nameLocation":"22819:26:31","nodeType":"FunctionDefinition","parameters":{"id":4406,"nodeType":"ParameterList","parameters":[],"src":"22845:2:31"},"returnParameters":{"id":4409,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4408,"mutability":"mutable","name":"queryDisabledPermanently","nameLocation":"22876:24:31","nodeType":"VariableDeclaration","scope":4410,"src":"22871:29:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4407,"name":"bool","nodeType":"ElementaryTypeName","src":"22871:4:31","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"22870:31:31"},"scope":4426,"src":"22810:92:31","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4411,"nodeType":"StructuredDocumentation","src":"22908:162:31","text":" @notice Pools can use this event to emit event data from the Vault.\n @param eventKey Event key\n @param eventData Encoded event data"},"functionSelector":"c8088247","id":4418,"implemented":false,"kind":"function","modifiers":[],"name":"emitAuxiliaryEvent","nameLocation":"23084:18:31","nodeType":"FunctionDefinition","parameters":{"id":4416,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4413,"mutability":"mutable","name":"eventKey","nameLocation":"23111:8:31","nodeType":"VariableDeclaration","scope":4418,"src":"23103:16:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":4412,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23103:7:31","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":4415,"mutability":"mutable","name":"eventData","nameLocation":"23136:9:31","nodeType":"VariableDeclaration","scope":4418,"src":"23121:24:31","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":4414,"name":"bytes","nodeType":"ElementaryTypeName","src":"23121:5:31","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"23102:44:31"},"returnParameters":{"id":4417,"nodeType":"ParameterList","parameters":[],"src":"23155:0:31"},"scope":4426,"src":"23075:81:31","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4419,"nodeType":"StructuredDocumentation","src":"23380:284:31","text":" @notice Returns the Authorizer address.\n @dev The authorizer holds the permissions granted by governance. It is set on Vault deployment,\n and can be changed through a permissioned call.\n @return authorizer Address of the authorizer contract"},"functionSelector":"aaabadc5","id":4425,"implemented":false,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"23678:13:31","nodeType":"FunctionDefinition","parameters":{"id":4420,"nodeType":"ParameterList","parameters":[],"src":"23691:2:31"},"returnParameters":{"id":4424,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4423,"mutability":"mutable","name":"authorizer","nameLocation":"23729:10:31","nodeType":"VariableDeclaration","scope":4425,"src":"23717:22:31","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"},"typeName":{"id":4422,"nodeType":"UserDefinedTypeName","pathNode":{"id":4421,"name":"IAuthorizer","nameLocations":["23717:11:31"],"nodeType":"IdentifierPath","referencedDeclaration":1455,"src":"23717:11:31"},"referencedDeclaration":1455,"src":"23717:11:31","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"23716:24:31"},"scope":4426,"src":"23669:72:31","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":4427,"src":"767:22976:31","usedErrors":[],"usedEvents":[]}],"src":"46:23698:31"},"id":31},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","exportedSymbols":{"AddLiquidityKind":[4807],"AddLiquidityParams":[4823],"AfterSwapParams":[4801],"BufferWrapOrUnwrapParams":[4862],"FEE_BITLENGTH":[4865],"FEE_SCALING_FACTOR":[4868],"HookFlags":[4627],"HooksConfig":[4651],"IERC20":[40109],"IERC4626":[39833],"IRateProvider":[263],"IVaultMain":[4562],"LiquidityManagement":[4580],"MAX_FEE_PERCENTAGE":[4871],"PoolConfig":[4605],"PoolConfigBits":[4582],"PoolData":[4729],"PoolRoleAccounts":[4677],"PoolSwapParams":[4772],"RemoveLiquidityKind":[4828],"RemoveLiquidityParams":[4844],"Rounding":[4732],"SwapKind":[4735],"SwapState":[4661],"TokenConfig":[4694],"TokenInfo":[4704],"TokenType":[4681],"VaultState":[4669],"VaultSwapParams":[4754],"WrappingDirection":[4847]},"id":4563,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4428,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:32"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":4430,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4563,"sourceUnit":40110,"src":"72:72:32","symbolAliases":[{"foreign":{"id":4429,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"81:6:32","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"./VaultTypes.sol","id":4431,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4563,"sourceUnit":4872,"src":"146:26:32","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"IVaultMain","contractDependencies":[],"contractKind":"interface","documentation":{"id":4432,"nodeType":"StructuredDocumentation","src":"174:232:32","text":" @notice Interface for functions defined on the main Vault contract.\n @dev These are generally \"critical path\" functions (swap, add/remove liquidity) that are in the main contract\n for technical or performance reasons."},"fullyImplemented":false,"id":4562,"linearizedBaseContracts":[4562],"name":"IVaultMain","nameLocation":"417:10:32","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":4433,"nodeType":"StructuredDocumentation","src":"656:431:32","text":" @notice Creates a context for a sequence of operations (i.e., \"unlocks\" the Vault).\n @dev Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`,\n meaning all balances for the caller have to be settled at the end.\n @param data Contains function signature and args to be passed to the msg.sender\n @return result Resulting data from the call"},"functionSelector":"48c89491","id":4440,"implemented":false,"kind":"function","modifiers":[],"name":"unlock","nameLocation":"1101:6:32","nodeType":"FunctionDefinition","parameters":{"id":4436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4435,"mutability":"mutable","name":"data","nameLocation":"1123:4:32","nodeType":"VariableDeclaration","scope":4440,"src":"1108:19:32","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":4434,"name":"bytes","nodeType":"ElementaryTypeName","src":"1108:5:32","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1107:21:32"},"returnParameters":{"id":4439,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4438,"mutability":"mutable","name":"result","nameLocation":"1160:6:32","nodeType":"VariableDeclaration","scope":4440,"src":"1147:19:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4437,"name":"bytes","nodeType":"ElementaryTypeName","src":"1147:5:32","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1146:21:32"},"scope":4562,"src":"1092:76:32","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4441,"nodeType":"StructuredDocumentation","src":"1174:1291:32","text":" @notice Settles deltas for a token; must be successful for the current lock to be released.\n @dev Protects the caller against leftover dust in the Vault for the token being settled. The caller\n should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any\n excess in the Vault balance.\n If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as\n credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail.\n If the given hint is lower than the difference in reserves, the hint is given as credit to the caller.\n In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would\n not affect settlement.\n The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve\n difference equals current balance of the token minus existing reserves of the token when the function is called.\n @param token Address of the token\n @param amountHint Amount paid as reported by the caller\n @return credit Credit received in return of the payment"},"functionSelector":"15afd409","id":4451,"implemented":false,"kind":"function","modifiers":[],"name":"settle","nameLocation":"2479:6:32","nodeType":"FunctionDefinition","parameters":{"id":4447,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4444,"mutability":"mutable","name":"token","nameLocation":"2493:5:32","nodeType":"VariableDeclaration","scope":4451,"src":"2486:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":4443,"nodeType":"UserDefinedTypeName","pathNode":{"id":4442,"name":"IERC20","nameLocations":["2486:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"2486:6:32"},"referencedDeclaration":40109,"src":"2486:6:32","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":4446,"mutability":"mutable","name":"amountHint","nameLocation":"2508:10:32","nodeType":"VariableDeclaration","scope":4451,"src":"2500:18:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4445,"name":"uint256","nodeType":"ElementaryTypeName","src":"2500:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2485:34:32"},"returnParameters":{"id":4450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4449,"mutability":"mutable","name":"credit","nameLocation":"2546:6:32","nodeType":"VariableDeclaration","scope":4451,"src":"2538:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4448,"name":"uint256","nodeType":"ElementaryTypeName","src":"2538:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2537:16:32"},"scope":4562,"src":"2470:84:32","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4452,"nodeType":"StructuredDocumentation","src":"2560:315:32","text":" @notice Sends tokens to a recipient.\n @dev There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel\n debts.\n @param token Address of the token\n @param to Recipient address\n @param amount Amount of tokens to send"},"functionSelector":"ae639329","id":4462,"implemented":false,"kind":"function","modifiers":[],"name":"sendTo","nameLocation":"2889:6:32","nodeType":"FunctionDefinition","parameters":{"id":4460,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4455,"mutability":"mutable","name":"token","nameLocation":"2903:5:32","nodeType":"VariableDeclaration","scope":4462,"src":"2896:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":4454,"nodeType":"UserDefinedTypeName","pathNode":{"id":4453,"name":"IERC20","nameLocations":["2896:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"2896:6:32"},"referencedDeclaration":40109,"src":"2896:6:32","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":4457,"mutability":"mutable","name":"to","nameLocation":"2918:2:32","nodeType":"VariableDeclaration","scope":4462,"src":"2910:10:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4456,"name":"address","nodeType":"ElementaryTypeName","src":"2910:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4459,"mutability":"mutable","name":"amount","nameLocation":"2930:6:32","nodeType":"VariableDeclaration","scope":4462,"src":"2922:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4458,"name":"uint256","nodeType":"ElementaryTypeName","src":"2922:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2895:42:32"},"returnParameters":{"id":4461,"nodeType":"ParameterList","parameters":[],"src":"2946:0:32"},"scope":4562,"src":"2880:67:32","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4463,"nodeType":"StructuredDocumentation","src":"3161:412:32","text":" @notice Swaps tokens based on provided parameters.\n @dev All parameters are given in raw token decimal encoding.\n @param vaultSwapParams Parameters for the swap (see above for struct definition)\n @return amountCalculatedRaw Calculated swap amount\n @return amountInRaw Amount of input tokens for the swap\n @return amountOutRaw Amount of output tokens from the swap"},"functionSelector":"2bfb780c","id":4475,"implemented":false,"kind":"function","modifiers":[],"name":"swap","nameLocation":"3587:4:32","nodeType":"FunctionDefinition","parameters":{"id":4467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4466,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"3624:15:32","nodeType":"VariableDeclaration","scope":4475,"src":"3601:38:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":4465,"nodeType":"UserDefinedTypeName","pathNode":{"id":4464,"name":"VaultSwapParams","nameLocations":["3601:15:32"],"nodeType":"IdentifierPath","referencedDeclaration":4754,"src":"3601:15:32"},"referencedDeclaration":4754,"src":"3601:15:32","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"}],"src":"3591:54:32"},"returnParameters":{"id":4474,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4469,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"3672:19:32","nodeType":"VariableDeclaration","scope":4475,"src":"3664:27:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4468,"name":"uint256","nodeType":"ElementaryTypeName","src":"3664:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4471,"mutability":"mutable","name":"amountInRaw","nameLocation":"3701:11:32","nodeType":"VariableDeclaration","scope":4475,"src":"3693:19:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4470,"name":"uint256","nodeType":"ElementaryTypeName","src":"3693:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4473,"mutability":"mutable","name":"amountOutRaw","nameLocation":"3722:12:32","nodeType":"VariableDeclaration","scope":4475,"src":"3714:20:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4472,"name":"uint256","nodeType":"ElementaryTypeName","src":"3714:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3663:72:32"},"scope":4562,"src":"3578:158:32","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4476,"nodeType":"StructuredDocumentation","src":"3954:523:32","text":" @notice Adds liquidity to a pool.\n @dev Caution should be exercised when adding liquidity because the Vault has the capability\n to transfer tokens from any user, given that it holds all allowances.\n @param params Parameters for the add liquidity (see above for struct definition)\n @return amountsIn Actual amounts of input tokens\n @return bptAmountOut Output pool token amount\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"4af29ec4","id":4489,"implemented":false,"kind":"function","modifiers":[],"name":"addLiquidity","nameLocation":"4491:12:32","nodeType":"FunctionDefinition","parameters":{"id":4480,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4479,"mutability":"mutable","name":"params","nameLocation":"4539:6:32","nodeType":"VariableDeclaration","scope":4489,"src":"4513:32:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams"},"typeName":{"id":4478,"nodeType":"UserDefinedTypeName","pathNode":{"id":4477,"name":"AddLiquidityParams","nameLocations":["4513:18:32"],"nodeType":"IdentifierPath","referencedDeclaration":4823,"src":"4513:18:32"},"referencedDeclaration":4823,"src":"4513:18:32","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_storage_ptr","typeString":"struct AddLiquidityParams"}},"visibility":"internal"}],"src":"4503:48:32"},"returnParameters":{"id":4488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4483,"mutability":"mutable","name":"amountsIn","nameLocation":"4587:9:32","nodeType":"VariableDeclaration","scope":4489,"src":"4570:26:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4481,"name":"uint256","nodeType":"ElementaryTypeName","src":"4570:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4482,"nodeType":"ArrayTypeName","src":"4570:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4485,"mutability":"mutable","name":"bptAmountOut","nameLocation":"4606:12:32","nodeType":"VariableDeclaration","scope":4489,"src":"4598:20:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4484,"name":"uint256","nodeType":"ElementaryTypeName","src":"4598:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4487,"mutability":"mutable","name":"returnData","nameLocation":"4633:10:32","nodeType":"VariableDeclaration","scope":4489,"src":"4620:23:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4486,"name":"bytes","nodeType":"ElementaryTypeName","src":"4620:5:32","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4569:75:32"},"scope":4562,"src":"4482:163:32","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4490,"nodeType":"StructuredDocumentation","src":"4864:644:32","text":" @notice Removes liquidity from a pool.\n @dev Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user.\n Untrusted routers require prior approval from the user. This is the only function allowed to call\n _queryModeBalanceIncrease (and only in a query context).\n @param params Parameters for the remove liquidity (see above for struct definition)\n @return bptAmountIn Actual amount of BPT burned\n @return amountsOut Actual amounts of output tokens\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"21457897","id":4503,"implemented":false,"kind":"function","modifiers":[],"name":"removeLiquidity","nameLocation":"5522:15:32","nodeType":"FunctionDefinition","parameters":{"id":4494,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4493,"mutability":"mutable","name":"params","nameLocation":"5576:6:32","nodeType":"VariableDeclaration","scope":4503,"src":"5547:35:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams"},"typeName":{"id":4492,"nodeType":"UserDefinedTypeName","pathNode":{"id":4491,"name":"RemoveLiquidityParams","nameLocations":["5547:21:32"],"nodeType":"IdentifierPath","referencedDeclaration":4844,"src":"5547:21:32"},"referencedDeclaration":4844,"src":"5547:21:32","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_storage_ptr","typeString":"struct RemoveLiquidityParams"}},"visibility":"internal"}],"src":"5537:51:32"},"returnParameters":{"id":4502,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4496,"mutability":"mutable","name":"bptAmountIn","nameLocation":"5615:11:32","nodeType":"VariableDeclaration","scope":4503,"src":"5607:19:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4495,"name":"uint256","nodeType":"ElementaryTypeName","src":"5607:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4499,"mutability":"mutable","name":"amountsOut","nameLocation":"5645:10:32","nodeType":"VariableDeclaration","scope":4503,"src":"5628:27:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4497,"name":"uint256","nodeType":"ElementaryTypeName","src":"5628:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4498,"nodeType":"ArrayTypeName","src":"5628:9:32","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4501,"mutability":"mutable","name":"returnData","nameLocation":"5670:10:32","nodeType":"VariableDeclaration","scope":4503,"src":"5657:23:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4500,"name":"bytes","nodeType":"ElementaryTypeName","src":"5657:5:32","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5606:75:32"},"scope":4562,"src":"5513:169:32","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4504,"nodeType":"StructuredDocumentation","src":"5912:385:32","text":" @notice Gets the index of a token in a given pool.\n @dev Reverts if the pool is not registered, or if the token does not belong to the pool.\n @param pool Address of the pool\n @param token Address of the token\n @return tokenCount Number of tokens in the pool\n @return index Index corresponding to the given token in the pool's token list"},"functionSelector":"c9c1661b","id":4516,"implemented":false,"kind":"function","modifiers":[],"name":"getPoolTokenCountAndIndexOfToken","nameLocation":"6311:32:32","nodeType":"FunctionDefinition","parameters":{"id":4510,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4506,"mutability":"mutable","name":"pool","nameLocation":"6361:4:32","nodeType":"VariableDeclaration","scope":4516,"src":"6353:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4505,"name":"address","nodeType":"ElementaryTypeName","src":"6353:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4509,"mutability":"mutable","name":"token","nameLocation":"6382:5:32","nodeType":"VariableDeclaration","scope":4516,"src":"6375:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":4508,"nodeType":"UserDefinedTypeName","pathNode":{"id":4507,"name":"IERC20","nameLocations":["6375:6:32"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"6375:6:32"},"referencedDeclaration":40109,"src":"6375:6:32","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"6343:50:32"},"returnParameters":{"id":4515,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4512,"mutability":"mutable","name":"tokenCount","nameLocation":"6425:10:32","nodeType":"VariableDeclaration","scope":4516,"src":"6417:18:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4511,"name":"uint256","nodeType":"ElementaryTypeName","src":"6417:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4514,"mutability":"mutable","name":"index","nameLocation":"6445:5:32","nodeType":"VariableDeclaration","scope":4516,"src":"6437:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4513,"name":"uint256","nodeType":"ElementaryTypeName","src":"6437:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6416:35:32"},"scope":4562,"src":"6302:150:32","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":4517,"nodeType":"StructuredDocumentation","src":"6683:460:32","text":" @notice Transfers pool token from owner to a recipient.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param owner Address of the owner\n @param to Address of the recipient\n @param amount Amount of tokens to transfer\n @return success True if successful, false otherwise"},"functionSelector":"beabacc8","id":4528,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"7157:8:32","nodeType":"FunctionDefinition","parameters":{"id":4524,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4519,"mutability":"mutable","name":"owner","nameLocation":"7174:5:32","nodeType":"VariableDeclaration","scope":4528,"src":"7166:13:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4518,"name":"address","nodeType":"ElementaryTypeName","src":"7166:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4521,"mutability":"mutable","name":"to","nameLocation":"7189:2:32","nodeType":"VariableDeclaration","scope":4528,"src":"7181:10:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4520,"name":"address","nodeType":"ElementaryTypeName","src":"7181:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4523,"mutability":"mutable","name":"amount","nameLocation":"7201:6:32","nodeType":"VariableDeclaration","scope":4528,"src":"7193:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4522,"name":"uint256","nodeType":"ElementaryTypeName","src":"7193:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7165:43:32"},"returnParameters":{"id":4527,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4526,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4528,"src":"7227:4:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4525,"name":"bool","nodeType":"ElementaryTypeName","src":"7227:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7226:6:32"},"scope":4562,"src":"7148:85:32","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4529,"nodeType":"StructuredDocumentation","src":"7239:544:32","text":" @notice Transfers pool token from a sender to a recipient using an allowance.\n @dev Notice that the pool token address is not included in the params. This function is exclusively called by\n the pool contract, so msg.sender is used as the token address.\n @param spender Address allowed to perform the transfer\n @param from Address of the sender\n @param to Address of the recipient\n @param amount Amount of tokens to transfer\n @return success True if successful, false otherwise"},"functionSelector":"15dacbea","id":4542,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"7797:12:32","nodeType":"FunctionDefinition","parameters":{"id":4538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4531,"mutability":"mutable","name":"spender","nameLocation":"7818:7:32","nodeType":"VariableDeclaration","scope":4542,"src":"7810:15:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4530,"name":"address","nodeType":"ElementaryTypeName","src":"7810:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4533,"mutability":"mutable","name":"from","nameLocation":"7835:4:32","nodeType":"VariableDeclaration","scope":4542,"src":"7827:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4532,"name":"address","nodeType":"ElementaryTypeName","src":"7827:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4535,"mutability":"mutable","name":"to","nameLocation":"7849:2:32","nodeType":"VariableDeclaration","scope":4542,"src":"7841:10:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4534,"name":"address","nodeType":"ElementaryTypeName","src":"7841:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4537,"mutability":"mutable","name":"amount","nameLocation":"7861:6:32","nodeType":"VariableDeclaration","scope":4542,"src":"7853:14:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4536,"name":"uint256","nodeType":"ElementaryTypeName","src":"7853:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7809:59:32"},"returnParameters":{"id":4541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4540,"mutability":"mutable","name":"success","nameLocation":"7892:7:32","nodeType":"VariableDeclaration","scope":4542,"src":"7887:12:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4539,"name":"bool","nodeType":"ElementaryTypeName","src":"7887:4:32","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7886:14:32"},"scope":4562,"src":"7788:113:32","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4543,"nodeType":"StructuredDocumentation","src":"8128:575:32","text":" @notice Wraps/unwraps tokens based on the parameters provided.\n @dev All parameters are given in raw token decimal encoding. It requires the buffer to be initialized,\n and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\n @param params Parameters for the wrap/unwrap operation (see struct definition)\n @return amountCalculatedRaw Calculated swap amount\n @return amountInRaw Amount of input tokens for the swap\n @return amountOutRaw Amount of output tokens from the swap"},"functionSelector":"43583be5","id":4555,"implemented":false,"kind":"function","modifiers":[],"name":"erc4626BufferWrapOrUnwrap","nameLocation":"8717:25:32","nodeType":"FunctionDefinition","parameters":{"id":4547,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4546,"mutability":"mutable","name":"params","nameLocation":"8784:6:32","nodeType":"VariableDeclaration","scope":4555,"src":"8752:38:32","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams"},"typeName":{"id":4545,"nodeType":"UserDefinedTypeName","pathNode":{"id":4544,"name":"BufferWrapOrUnwrapParams","nameLocations":["8752:24:32"],"nodeType":"IdentifierPath","referencedDeclaration":4862,"src":"8752:24:32"},"referencedDeclaration":4862,"src":"8752:24:32","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_storage_ptr","typeString":"struct BufferWrapOrUnwrapParams"}},"visibility":"internal"}],"src":"8742:54:32"},"returnParameters":{"id":4554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4549,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"8823:19:32","nodeType":"VariableDeclaration","scope":4555,"src":"8815:27:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4548,"name":"uint256","nodeType":"ElementaryTypeName","src":"8815:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4551,"mutability":"mutable","name":"amountInRaw","nameLocation":"8852:11:32","nodeType":"VariableDeclaration","scope":4555,"src":"8844:19:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4550,"name":"uint256","nodeType":"ElementaryTypeName","src":"8844:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4553,"mutability":"mutable","name":"amountOutRaw","nameLocation":"8873:12:32","nodeType":"VariableDeclaration","scope":4555,"src":"8865:20:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4552,"name":"uint256","nodeType":"ElementaryTypeName","src":"8865:7:32","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8814:72:32"},"scope":4562,"src":"8708:179:32","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":4556,"nodeType":"StructuredDocumentation","src":"9115:345:32","text":" @notice Returns the VaultExtension contract address.\n @dev Function is in the main Vault contract. The VaultExtension handles less critical or frequently used\n functions, since delegate calls through the Vault are more expensive than direct calls.\n @return vaultExtension Address of the VaultExtension"},"functionSelector":"b9a8effa","id":4561,"implemented":false,"kind":"function","modifiers":[],"name":"getVaultExtension","nameLocation":"9474:17:32","nodeType":"FunctionDefinition","parameters":{"id":4557,"nodeType":"ParameterList","parameters":[],"src":"9491:2:32"},"returnParameters":{"id":4560,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4559,"mutability":"mutable","name":"vaultExtension","nameLocation":"9525:14:32","nodeType":"VariableDeclaration","scope":4561,"src":"9517:22:32","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4558,"name":"address","nodeType":"ElementaryTypeName","src":"9517:7:32","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9516:24:32"},"scope":4562,"src":"9465:76:32","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":4563,"src":"407:9136:32","usedErrors":[],"usedEvents":[]}],"src":"46:9498:32"},"id":32},"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol":{"ast":{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","exportedSymbols":{"AddLiquidityKind":[4807],"AddLiquidityParams":[4823],"AfterSwapParams":[4801],"BufferWrapOrUnwrapParams":[4862],"FEE_BITLENGTH":[4865],"FEE_SCALING_FACTOR":[4868],"HookFlags":[4627],"HooksConfig":[4651],"IERC20":[40109],"IERC4626":[39833],"IRateProvider":[263],"LiquidityManagement":[4580],"MAX_FEE_PERCENTAGE":[4871],"PoolConfig":[4605],"PoolConfigBits":[4582],"PoolData":[4729],"PoolRoleAccounts":[4677],"PoolSwapParams":[4772],"RemoveLiquidityKind":[4828],"RemoveLiquidityParams":[4844],"Rounding":[4732],"SwapKind":[4735],"SwapState":[4661],"TokenConfig":[4694],"TokenInfo":[4704],"TokenType":[4681],"VaultState":[4669],"VaultSwapParams":[4754],"WrappingDirection":[4847]},"id":4872,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4564,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:33"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":4566,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4872,"sourceUnit":40110,"src":"72:72:33","symbolAliases":[{"foreign":{"id":4565,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"81:6:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":4568,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4872,"sourceUnit":39834,"src":"145:75:33","symbolAliases":[{"foreign":{"id":4567,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39833,"src":"154:8:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","file":"../solidity-utils/helpers/IRateProvider.sol","id":4570,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4872,"sourceUnit":264,"src":"222:76:33","symbolAliases":[{"foreign":{"id":4569,"name":"IRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":263,"src":"231:13:33","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"LiquidityManagement","documentation":{"id":4571,"nodeType":"StructuredDocumentation","src":"300:472:33","text":" @notice Represents a pool's liquidity management configuration.\n @param disableUnbalancedLiquidity If set, liquidity can only be added or removed proportionally\n @param enableAddLiquidityCustom If set, the pool has implemented `onAddLiquidityCustom`\n @param enableRemoveLiquidityCustom If set, the pool has implemented `onRemoveLiquidityCustom`\n @param enableDonation If set, the pool will not revert if liquidity is added with AddLiquidityKind.DONATION"},"id":4580,"members":[{"constant":false,"id":4573,"mutability":"mutable","name":"disableUnbalancedLiquidity","nameLocation":"811:26:33","nodeType":"VariableDeclaration","scope":4580,"src":"806:31:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4572,"name":"bool","nodeType":"ElementaryTypeName","src":"806:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4575,"mutability":"mutable","name":"enableAddLiquidityCustom","nameLocation":"848:24:33","nodeType":"VariableDeclaration","scope":4580,"src":"843:29:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4574,"name":"bool","nodeType":"ElementaryTypeName","src":"843:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4577,"mutability":"mutable","name":"enableRemoveLiquidityCustom","nameLocation":"883:27:33","nodeType":"VariableDeclaration","scope":4580,"src":"878:32:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4576,"name":"bool","nodeType":"ElementaryTypeName","src":"878:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4579,"mutability":"mutable","name":"enableDonation","nameLocation":"921:14:33","nodeType":"VariableDeclaration","scope":4580,"src":"916:19:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4578,"name":"bool","nodeType":"ElementaryTypeName","src":"916:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"LiquidityManagement","nameLocation":"780:19:33","nodeType":"StructDefinition","scope":4872,"src":"773:165:33","visibility":"public"},{"canonicalName":"PoolConfigBits","id":4582,"name":"PoolConfigBits","nameLocation":"1015:14:33","nodeType":"UserDefinedValueTypeDefinition","src":"1010:31:33","underlyingType":{"id":4581,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1033:7:33","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"canonicalName":"PoolConfig","documentation":{"id":4583,"nodeType":"StructuredDocumentation","src":"1043:1034:33","text":" @notice Represents a pool's configuration (hooks configuration are separated in another struct).\n @param liquidityManagement Flags related to adding/removing liquidity\n @param staticSwapFeePercentage The pool's native swap fee\n @param aggregateSwapFeePercentage The total swap fee charged, including protocol and pool creator components\n @param aggregateYieldFeePercentage The total swap fee charged, including protocol and pool creator components\n @param tokenDecimalDiffs Compressed storage of the token decimals of each pool token\n @param pauseWindowEndTime Timestamp after which the pool cannot be paused\n @param isPoolRegistered If true, the pool has been registered with the Vault\n @param isPoolInitialized If true, the pool has been initialized with liquidity, and is available for trading\n @param isPoolPaused If true, the pool has been paused (by governance or the pauseManager)\n @param isPoolInRecoveryMode If true, the pool has been placed in recovery mode, enabling recovery mode withdrawals"},"id":4605,"members":[{"constant":false,"id":4586,"mutability":"mutable","name":"liquidityManagement","nameLocation":"2122:19:33","nodeType":"VariableDeclaration","scope":4605,"src":"2102:39:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_storage_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":4585,"nodeType":"UserDefinedTypeName","pathNode":{"id":4584,"name":"LiquidityManagement","nameLocations":["2102:19:33"],"nodeType":"IdentifierPath","referencedDeclaration":4580,"src":"2102:19:33"},"referencedDeclaration":4580,"src":"2102:19:33","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"},{"constant":false,"id":4588,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"2155:23:33","nodeType":"VariableDeclaration","scope":4605,"src":"2147:31:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4587,"name":"uint256","nodeType":"ElementaryTypeName","src":"2147:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4590,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"2192:26:33","nodeType":"VariableDeclaration","scope":4605,"src":"2184:34:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4589,"name":"uint256","nodeType":"ElementaryTypeName","src":"2184:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4592,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"2232:27:33","nodeType":"VariableDeclaration","scope":4605,"src":"2224:35:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4591,"name":"uint256","nodeType":"ElementaryTypeName","src":"2224:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4594,"mutability":"mutable","name":"tokenDecimalDiffs","nameLocation":"2272:17:33","nodeType":"VariableDeclaration","scope":4605,"src":"2265:24:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":4593,"name":"uint40","nodeType":"ElementaryTypeName","src":"2265:6:33","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"},{"constant":false,"id":4596,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"2302:18:33","nodeType":"VariableDeclaration","scope":4605,"src":"2295:25:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":4595,"name":"uint32","nodeType":"ElementaryTypeName","src":"2295:6:33","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":4598,"mutability":"mutable","name":"isPoolRegistered","nameLocation":"2331:16:33","nodeType":"VariableDeclaration","scope":4605,"src":"2326:21:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4597,"name":"bool","nodeType":"ElementaryTypeName","src":"2326:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4600,"mutability":"mutable","name":"isPoolInitialized","nameLocation":"2358:17:33","nodeType":"VariableDeclaration","scope":4605,"src":"2353:22:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4599,"name":"bool","nodeType":"ElementaryTypeName","src":"2353:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4602,"mutability":"mutable","name":"isPoolPaused","nameLocation":"2386:12:33","nodeType":"VariableDeclaration","scope":4605,"src":"2381:17:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4601,"name":"bool","nodeType":"ElementaryTypeName","src":"2381:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4604,"mutability":"mutable","name":"isPoolInRecoveryMode","nameLocation":"2409:20:33","nodeType":"VariableDeclaration","scope":4605,"src":"2404:25:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4603,"name":"bool","nodeType":"ElementaryTypeName","src":"2404:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"PoolConfig","nameLocation":"2085:10:33","nodeType":"StructDefinition","scope":4872,"src":"2078:354:33","visibility":"public"},{"canonicalName":"HookFlags","documentation":{"id":4606,"nodeType":"StructuredDocumentation","src":"2434:352:33","text":" @notice The flag portion of the `HooksConfig`.\n @dev `enableHookAdjustedAmounts` must be true for all contracts that modify the `amountCalculated`\n in after hooks. Otherwise, the Vault will ignore any \"hookAdjusted\" amounts. Setting any \"shouldCall\"\n flags to true will cause the Vault to call the corresponding hook during operations."},"id":4627,"members":[{"constant":false,"id":4608,"mutability":"mutable","name":"enableHookAdjustedAmounts","nameLocation":"2815:25:33","nodeType":"VariableDeclaration","scope":4627,"src":"2810:30:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4607,"name":"bool","nodeType":"ElementaryTypeName","src":"2810:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4610,"mutability":"mutable","name":"shouldCallBeforeInitialize","nameLocation":"2851:26:33","nodeType":"VariableDeclaration","scope":4627,"src":"2846:31:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4609,"name":"bool","nodeType":"ElementaryTypeName","src":"2846:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4612,"mutability":"mutable","name":"shouldCallAfterInitialize","nameLocation":"2888:25:33","nodeType":"VariableDeclaration","scope":4627,"src":"2883:30:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4611,"name":"bool","nodeType":"ElementaryTypeName","src":"2883:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4614,"mutability":"mutable","name":"shouldCallComputeDynamicSwapFee","nameLocation":"2924:31:33","nodeType":"VariableDeclaration","scope":4627,"src":"2919:36:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4613,"name":"bool","nodeType":"ElementaryTypeName","src":"2919:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4616,"mutability":"mutable","name":"shouldCallBeforeSwap","nameLocation":"2966:20:33","nodeType":"VariableDeclaration","scope":4627,"src":"2961:25:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4615,"name":"bool","nodeType":"ElementaryTypeName","src":"2961:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4618,"mutability":"mutable","name":"shouldCallAfterSwap","nameLocation":"2997:19:33","nodeType":"VariableDeclaration","scope":4627,"src":"2992:24:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4617,"name":"bool","nodeType":"ElementaryTypeName","src":"2992:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4620,"mutability":"mutable","name":"shouldCallBeforeAddLiquidity","nameLocation":"3027:28:33","nodeType":"VariableDeclaration","scope":4627,"src":"3022:33:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4619,"name":"bool","nodeType":"ElementaryTypeName","src":"3022:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4622,"mutability":"mutable","name":"shouldCallAfterAddLiquidity","nameLocation":"3066:27:33","nodeType":"VariableDeclaration","scope":4627,"src":"3061:32:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4621,"name":"bool","nodeType":"ElementaryTypeName","src":"3061:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4624,"mutability":"mutable","name":"shouldCallBeforeRemoveLiquidity","nameLocation":"3104:31:33","nodeType":"VariableDeclaration","scope":4627,"src":"3099:36:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4623,"name":"bool","nodeType":"ElementaryTypeName","src":"3099:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4626,"mutability":"mutable","name":"shouldCallAfterRemoveLiquidity","nameLocation":"3146:30:33","nodeType":"VariableDeclaration","scope":4627,"src":"3141:35:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4625,"name":"bool","nodeType":"ElementaryTypeName","src":"3141:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"HookFlags","nameLocation":"2794:9:33","nodeType":"StructDefinition","scope":4872,"src":"2787:392:33","visibility":"public"},{"canonicalName":"HooksConfig","documentation":{"id":4628,"nodeType":"StructuredDocumentation","src":"3181:101:33","text":"@notice Represents a hook contract configuration for a pool (HookFlags + hooksContract address)."},"id":4651,"members":[{"constant":false,"id":4630,"mutability":"mutable","name":"enableHookAdjustedAmounts","nameLocation":"3312:25:33","nodeType":"VariableDeclaration","scope":4651,"src":"3307:30:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4629,"name":"bool","nodeType":"ElementaryTypeName","src":"3307:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4632,"mutability":"mutable","name":"shouldCallBeforeInitialize","nameLocation":"3348:26:33","nodeType":"VariableDeclaration","scope":4651,"src":"3343:31:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4631,"name":"bool","nodeType":"ElementaryTypeName","src":"3343:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4634,"mutability":"mutable","name":"shouldCallAfterInitialize","nameLocation":"3385:25:33","nodeType":"VariableDeclaration","scope":4651,"src":"3380:30:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4633,"name":"bool","nodeType":"ElementaryTypeName","src":"3380:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4636,"mutability":"mutable","name":"shouldCallComputeDynamicSwapFee","nameLocation":"3421:31:33","nodeType":"VariableDeclaration","scope":4651,"src":"3416:36:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4635,"name":"bool","nodeType":"ElementaryTypeName","src":"3416:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4638,"mutability":"mutable","name":"shouldCallBeforeSwap","nameLocation":"3463:20:33","nodeType":"VariableDeclaration","scope":4651,"src":"3458:25:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4637,"name":"bool","nodeType":"ElementaryTypeName","src":"3458:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4640,"mutability":"mutable","name":"shouldCallAfterSwap","nameLocation":"3494:19:33","nodeType":"VariableDeclaration","scope":4651,"src":"3489:24:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4639,"name":"bool","nodeType":"ElementaryTypeName","src":"3489:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4642,"mutability":"mutable","name":"shouldCallBeforeAddLiquidity","nameLocation":"3524:28:33","nodeType":"VariableDeclaration","scope":4651,"src":"3519:33:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4641,"name":"bool","nodeType":"ElementaryTypeName","src":"3519:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4644,"mutability":"mutable","name":"shouldCallAfterAddLiquidity","nameLocation":"3563:27:33","nodeType":"VariableDeclaration","scope":4651,"src":"3558:32:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4643,"name":"bool","nodeType":"ElementaryTypeName","src":"3558:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4646,"mutability":"mutable","name":"shouldCallBeforeRemoveLiquidity","nameLocation":"3601:31:33","nodeType":"VariableDeclaration","scope":4651,"src":"3596:36:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4645,"name":"bool","nodeType":"ElementaryTypeName","src":"3596:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4648,"mutability":"mutable","name":"shouldCallAfterRemoveLiquidity","nameLocation":"3643:30:33","nodeType":"VariableDeclaration","scope":4651,"src":"3638:35:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4647,"name":"bool","nodeType":"ElementaryTypeName","src":"3638:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4650,"mutability":"mutable","name":"hooksContract","nameLocation":"3687:13:33","nodeType":"VariableDeclaration","scope":4651,"src":"3679:21:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4649,"name":"address","nodeType":"ElementaryTypeName","src":"3679:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"HooksConfig","nameLocation":"3289:11:33","nodeType":"StructDefinition","scope":4872,"src":"3282:421:33","visibility":"public"},{"canonicalName":"SwapState","documentation":{"id":4652,"nodeType":"StructuredDocumentation","src":"3705:364:33","text":" @notice Represents temporary state used during a swap operation.\n @param indexIn The zero-based index of tokenIn\n @param indexOut The zero-based index of tokenOut\n @param amountGivenScaled18 The amountGiven (i.e., tokenIn for ExactIn), adjusted for token decimals\n @param swapFeePercentage The swap fee to be applied (might be static or dynamic)"},"id":4661,"members":[{"constant":false,"id":4654,"mutability":"mutable","name":"indexIn","nameLocation":"4101:7:33","nodeType":"VariableDeclaration","scope":4661,"src":"4093:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4653,"name":"uint256","nodeType":"ElementaryTypeName","src":"4093:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4656,"mutability":"mutable","name":"indexOut","nameLocation":"4122:8:33","nodeType":"VariableDeclaration","scope":4661,"src":"4114:16:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4655,"name":"uint256","nodeType":"ElementaryTypeName","src":"4114:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4658,"mutability":"mutable","name":"amountGivenScaled18","nameLocation":"4144:19:33","nodeType":"VariableDeclaration","scope":4661,"src":"4136:27:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4657,"name":"uint256","nodeType":"ElementaryTypeName","src":"4136:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4660,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"4177:17:33","nodeType":"VariableDeclaration","scope":4661,"src":"4169:25:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4659,"name":"uint256","nodeType":"ElementaryTypeName","src":"4169:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"SwapState","nameLocation":"4077:9:33","nodeType":"StructDefinition","scope":4872,"src":"4070:127:33","visibility":"public"},{"canonicalName":"VaultState","documentation":{"id":4662,"nodeType":"StructuredDocumentation","src":"4199:381:33","text":" @notice Represents the Vault's configuration.\n @param isQueryDisabled If set to true, disables query functionality of the Vault. Can be modified by governance\n @param isVaultPaused If set to true, swaps and add/remove liquidity operations are halted\n @param areBuffersPaused If set to true, the Vault wrap/unwrap primitives associated with buffers will be disabled"},"id":4669,"members":[{"constant":false,"id":4664,"mutability":"mutable","name":"isQueryDisabled","nameLocation":"4610:15:33","nodeType":"VariableDeclaration","scope":4669,"src":"4605:20:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4663,"name":"bool","nodeType":"ElementaryTypeName","src":"4605:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4666,"mutability":"mutable","name":"isVaultPaused","nameLocation":"4636:13:33","nodeType":"VariableDeclaration","scope":4669,"src":"4631:18:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4665,"name":"bool","nodeType":"ElementaryTypeName","src":"4631:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":4668,"mutability":"mutable","name":"areBuffersPaused","nameLocation":"4660:16:33","nodeType":"VariableDeclaration","scope":4669,"src":"4655:21:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4667,"name":"bool","nodeType":"ElementaryTypeName","src":"4655:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"VaultState","nameLocation":"4588:10:33","nodeType":"StructDefinition","scope":4872,"src":"4581:98:33","visibility":"public"},{"canonicalName":"PoolRoleAccounts","documentation":{"id":4670,"nodeType":"StructuredDocumentation","src":"4681:461:33","text":" @notice Represents the accounts holding certain roles for a given pool. This is passed in on pool registration.\n @param pauseManager Account empowered to pause/unpause the pool (note that governance can always pause a pool)\n @param swapFeeManager Account empowered to set static swap fees for a pool (or 0 to delegate to governance)\n @param poolCreator Account empowered to set the pool creator fee (or 0 if all fees go to the protocol and LPs)"},"id":4677,"members":[{"constant":false,"id":4672,"mutability":"mutable","name":"pauseManager","nameLocation":"5181:12:33","nodeType":"VariableDeclaration","scope":4677,"src":"5173:20:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4671,"name":"address","nodeType":"ElementaryTypeName","src":"5173:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4674,"mutability":"mutable","name":"swapFeeManager","nameLocation":"5207:14:33","nodeType":"VariableDeclaration","scope":4677,"src":"5199:22:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4673,"name":"address","nodeType":"ElementaryTypeName","src":"5199:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4676,"mutability":"mutable","name":"poolCreator","nameLocation":"5235:11:33","nodeType":"VariableDeclaration","scope":4677,"src":"5227:19:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4675,"name":"address","nodeType":"ElementaryTypeName","src":"5227:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"PoolRoleAccounts","nameLocation":"5150:16:33","nodeType":"StructDefinition","scope":4872,"src":"5143:106:33","visibility":"public"},{"canonicalName":"TokenType","documentation":{"id":4678,"nodeType":"StructuredDocumentation","src":"9245:1024:33","text":" @notice Token types supported by the Vault.\n @dev In general, pools may contain any combination of these tokens.\n STANDARD tokens (e.g., BAL, WETH) have no rate provider.\n WITH_RATE tokens (e.g., wstETH) require a rate provider. These may be tokens like wstETH, which need to be wrapped\n because the underlying stETH token is rebasing, and such tokens are unsupported by the Vault. They may also be\n tokens like sEUR, which track an underlying asset, but are not yield-bearing. Finally, this encompasses\n yield-bearing ERC4626 tokens, which can be used to facilitate swaps without requiring wrapping or unwrapping\n in most cases. The `paysYieldFees` flag can be used to indicate whether a token is yield-bearing (e.g., waDAI),\n not yield-bearing (e.g., sEUR), or yield-bearing but exempt from fees (e.g., in certain nested pools, where\n yield fees are charged elsewhere).\n NB: STANDARD must always be the first enum element, so that newly initialized data structures default to Standard."},"id":4681,"members":[{"id":4679,"name":"STANDARD","nameLocation":"10291:8:33","nodeType":"EnumValue","src":"10291:8:33"},{"id":4680,"name":"WITH_RATE","nameLocation":"10305:9:33","nodeType":"EnumValue","src":"10305:9:33"}],"name":"TokenType","nameLocation":"10275:9:33","nodeType":"EnumDefinition","src":"10270:46:33"},{"canonicalName":"TokenConfig","documentation":{"id":4682,"nodeType":"StructuredDocumentation","src":"10318:915:33","text":" @notice Encapsulate the data required for the Vault to support a token of the given type.\n @dev For STANDARD tokens, the rate provider address must be 0, and paysYieldFees must be false. All WITH_RATE tokens\n need a rate provider, and may or may not be yield-bearing.\n At registration time, it is useful to include the token address along with the token parameters in the structure\n passed to `registerPool`, as the alternative would be parallel arrays, which would be error prone and require\n validation checks. `TokenConfig` is only used for registration, and is never put into storage (see `TokenInfo`).\n @param token The token address\n @param tokenType The token type (see the enum for supported types)\n @param rateProvider The rate provider for a token (see further documentation above)\n @param paysYieldFees Flag indicating whether yield fees should be charged on this token"},"id":4694,"members":[{"constant":false,"id":4685,"mutability":"mutable","name":"token","nameLocation":"11266:5:33","nodeType":"VariableDeclaration","scope":4694,"src":"11259:12:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":4684,"nodeType":"UserDefinedTypeName","pathNode":{"id":4683,"name":"IERC20","nameLocations":["11259:6:33"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"11259:6:33"},"referencedDeclaration":40109,"src":"11259:6:33","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":4688,"mutability":"mutable","name":"tokenType","nameLocation":"11287:9:33","nodeType":"VariableDeclaration","scope":4694,"src":"11277:19:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"},"typeName":{"id":4687,"nodeType":"UserDefinedTypeName","pathNode":{"id":4686,"name":"TokenType","nameLocations":["11277:9:33"],"nodeType":"IdentifierPath","referencedDeclaration":4681,"src":"11277:9:33"},"referencedDeclaration":4681,"src":"11277:9:33","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"visibility":"internal"},{"constant":false,"id":4691,"mutability":"mutable","name":"rateProvider","nameLocation":"11316:12:33","nodeType":"VariableDeclaration","scope":4694,"src":"11302:26:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"},"typeName":{"id":4690,"nodeType":"UserDefinedTypeName","pathNode":{"id":4689,"name":"IRateProvider","nameLocations":["11302:13:33"],"nodeType":"IdentifierPath","referencedDeclaration":263,"src":"11302:13:33"},"referencedDeclaration":263,"src":"11302:13:33","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"}},"visibility":"internal"},{"constant":false,"id":4693,"mutability":"mutable","name":"paysYieldFees","nameLocation":"11339:13:33","nodeType":"VariableDeclaration","scope":4694,"src":"11334:18:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4692,"name":"bool","nodeType":"ElementaryTypeName","src":"11334:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"TokenConfig","nameLocation":"11241:11:33","nodeType":"StructDefinition","scope":4872,"src":"11234:121:33","visibility":"public"},{"canonicalName":"TokenInfo","documentation":{"id":4695,"nodeType":"StructuredDocumentation","src":"11357:592:33","text":" @notice This data structure is stored in `_poolTokenInfo`, a nested mapping from pool -> (token -> TokenInfo).\n @dev Since the token is already the key of the nested mapping, it would be redundant (and an extra SLOAD) to store\n it again in the struct. When we construct PoolData, the tokens are separated into their own array.\n @param tokenType The token type (see the enum for supported types)\n @param rateProvider The rate provider for a token (see further documentation above)\n @param paysYieldFees Flag indicating whether yield fees should be charged on this token"},"id":4704,"members":[{"constant":false,"id":4698,"mutability":"mutable","name":"tokenType","nameLocation":"11983:9:33","nodeType":"VariableDeclaration","scope":4704,"src":"11973:19:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"},"typeName":{"id":4697,"nodeType":"UserDefinedTypeName","pathNode":{"id":4696,"name":"TokenType","nameLocations":["11973:9:33"],"nodeType":"IdentifierPath","referencedDeclaration":4681,"src":"11973:9:33"},"referencedDeclaration":4681,"src":"11973:9:33","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"visibility":"internal"},{"constant":false,"id":4701,"mutability":"mutable","name":"rateProvider","nameLocation":"12012:12:33","nodeType":"VariableDeclaration","scope":4704,"src":"11998:26:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"},"typeName":{"id":4700,"nodeType":"UserDefinedTypeName","pathNode":{"id":4699,"name":"IRateProvider","nameLocations":["11998:13:33"],"nodeType":"IdentifierPath","referencedDeclaration":263,"src":"11998:13:33"},"referencedDeclaration":263,"src":"11998:13:33","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"}},"visibility":"internal"},{"constant":false,"id":4703,"mutability":"mutable","name":"paysYieldFees","nameLocation":"12035:13:33","nodeType":"VariableDeclaration","scope":4704,"src":"12030:18:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4702,"name":"bool","nodeType":"ElementaryTypeName","src":"12030:4:33","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"TokenInfo","nameLocation":"11957:9:33","nodeType":"StructDefinition","scope":4872,"src":"11950:101:33","visibility":"public"},{"canonicalName":"PoolData","documentation":{"id":4705,"nodeType":"StructuredDocumentation","src":"12053:761:33","text":" @notice Data structure used to represent the current pool state in memory\n @param poolConfigBits Custom type to store the entire configuration of the pool.\n @param tokens Pool tokens, sorted in token registration order\n @param tokenInfo Configuration data for each token, sorted in token registration order\n @param balancesRaw Token balances in native decimals\n @param balancesLiveScaled18 Token balances after paying yield fees, applying decimal scaling and rates\n @param tokenRates 18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\n @param decimalScalingFactors Conversion factor used to adjust for token decimals for uniform precision in\n calculations. It is 1e18 (FP 1) for 18-decimal tokens"},"id":4729,"members":[{"constant":false,"id":4708,"mutability":"mutable","name":"poolConfigBits","nameLocation":"12852:14:33","nodeType":"VariableDeclaration","scope":4729,"src":"12837:29:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":4707,"nodeType":"UserDefinedTypeName","pathNode":{"id":4706,"name":"PoolConfigBits","nameLocations":["12837:14:33"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"12837:14:33"},"referencedDeclaration":4582,"src":"12837:14:33","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":4712,"mutability":"mutable","name":"tokens","nameLocation":"12881:6:33","nodeType":"VariableDeclaration","scope":4729,"src":"12872:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":4710,"nodeType":"UserDefinedTypeName","pathNode":{"id":4709,"name":"IERC20","nameLocations":["12872:6:33"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"12872:6:33"},"referencedDeclaration":40109,"src":"12872:6:33","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":4711,"nodeType":"ArrayTypeName","src":"12872:8:33","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":4716,"mutability":"mutable","name":"tokenInfo","nameLocation":"12905:9:33","nodeType":"VariableDeclaration","scope":4729,"src":"12893:21:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4704_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":4714,"nodeType":"UserDefinedTypeName","pathNode":{"id":4713,"name":"TokenInfo","nameLocations":["12893:9:33"],"nodeType":"IdentifierPath","referencedDeclaration":4704,"src":"12893:9:33"},"referencedDeclaration":4704,"src":"12893:9:33","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_storage_ptr","typeString":"struct TokenInfo"}},"id":4715,"nodeType":"ArrayTypeName","src":"12893:11:33","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4704_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":4719,"mutability":"mutable","name":"balancesRaw","nameLocation":"12930:11:33","nodeType":"VariableDeclaration","scope":4729,"src":"12920:21:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4717,"name":"uint256","nodeType":"ElementaryTypeName","src":"12920:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4718,"nodeType":"ArrayTypeName","src":"12920:9:33","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4722,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"12957:20:33","nodeType":"VariableDeclaration","scope":4729,"src":"12947:30:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4720,"name":"uint256","nodeType":"ElementaryTypeName","src":"12947:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4721,"nodeType":"ArrayTypeName","src":"12947:9:33","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4725,"mutability":"mutable","name":"tokenRates","nameLocation":"12993:10:33","nodeType":"VariableDeclaration","scope":4729,"src":"12983:20:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4723,"name":"uint256","nodeType":"ElementaryTypeName","src":"12983:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4724,"nodeType":"ArrayTypeName","src":"12983:9:33","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4728,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"13019:21:33","nodeType":"VariableDeclaration","scope":4729,"src":"13009:31:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4726,"name":"uint256","nodeType":"ElementaryTypeName","src":"13009:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4727,"nodeType":"ArrayTypeName","src":"13009:9:33","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"name":"PoolData","nameLocation":"12822:8:33","nodeType":"StructDefinition","scope":4872,"src":"12815:228:33","visibility":"public"},{"canonicalName":"Rounding","id":4732,"members":[{"id":4730,"name":"ROUND_UP","nameLocation":"13065:8:33","nodeType":"EnumValue","src":"13065:8:33"},{"id":4731,"name":"ROUND_DOWN","nameLocation":"13079:10:33","nodeType":"EnumValue","src":"13079:10:33"}],"name":"Rounding","nameLocation":"13050:8:33","nodeType":"EnumDefinition","src":"13045:46:33"},{"canonicalName":"SwapKind","id":4735,"members":[{"id":4733,"name":"EXACT_IN","nameLocation":"13318:8:33","nodeType":"EnumValue","src":"13318:8:33"},{"id":4734,"name":"EXACT_OUT","nameLocation":"13332:9:33","nodeType":"EnumValue","src":"13332:9:33"}],"name":"SwapKind","nameLocation":"13303:8:33","nodeType":"EnumDefinition","src":"13298:45:33"},{"canonicalName":"VaultSwapParams","documentation":{"id":4736,"nodeType":"StructuredDocumentation","src":"14089:558:33","text":" @notice Data passed into primary Vault `swap` operations.\n @param kind Type of swap (Exact In or Exact Out)\n @param pool The pool with the tokens being swapped\n @param tokenIn The token entering the Vault (balance increases)\n @param tokenOut The token leaving the Vault (balance decreases)\n @param amountGivenRaw Amount specified for tokenIn or tokenOut (depending on the type of swap)\n @param limitRaw Minimum or maximum value of the calculated amount (depending on the type of swap)\n @param userData Additional (optional) user data"},"id":4754,"members":[{"constant":false,"id":4739,"mutability":"mutable","name":"kind","nameLocation":"14686:4:33","nodeType":"VariableDeclaration","scope":4754,"src":"14677:13:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},"typeName":{"id":4738,"nodeType":"UserDefinedTypeName","pathNode":{"id":4737,"name":"SwapKind","nameLocations":["14677:8:33"],"nodeType":"IdentifierPath","referencedDeclaration":4735,"src":"14677:8:33"},"referencedDeclaration":4735,"src":"14677:8:33","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":4741,"mutability":"mutable","name":"pool","nameLocation":"14704:4:33","nodeType":"VariableDeclaration","scope":4754,"src":"14696:12:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4740,"name":"address","nodeType":"ElementaryTypeName","src":"14696:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4744,"mutability":"mutable","name":"tokenIn","nameLocation":"14721:7:33","nodeType":"VariableDeclaration","scope":4754,"src":"14714:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":4743,"nodeType":"UserDefinedTypeName","pathNode":{"id":4742,"name":"IERC20","nameLocations":["14714:6:33"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"14714:6:33"},"referencedDeclaration":40109,"src":"14714:6:33","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":4747,"mutability":"mutable","name":"tokenOut","nameLocation":"14741:8:33","nodeType":"VariableDeclaration","scope":4754,"src":"14734:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":4746,"nodeType":"UserDefinedTypeName","pathNode":{"id":4745,"name":"IERC20","nameLocations":["14734:6:33"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"14734:6:33"},"referencedDeclaration":40109,"src":"14734:6:33","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":4749,"mutability":"mutable","name":"amountGivenRaw","nameLocation":"14763:14:33","nodeType":"VariableDeclaration","scope":4754,"src":"14755:22:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4748,"name":"uint256","nodeType":"ElementaryTypeName","src":"14755:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4751,"mutability":"mutable","name":"limitRaw","nameLocation":"14791:8:33","nodeType":"VariableDeclaration","scope":4754,"src":"14783:16:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4750,"name":"uint256","nodeType":"ElementaryTypeName","src":"14783:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4753,"mutability":"mutable","name":"userData","nameLocation":"14811:8:33","nodeType":"VariableDeclaration","scope":4754,"src":"14805:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4752,"name":"bytes","nodeType":"ElementaryTypeName","src":"14805:5:33","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"VaultSwapParams","nameLocation":"14655:15:33","nodeType":"StructDefinition","scope":4872,"src":"14648:174:33","visibility":"public"},{"canonicalName":"PoolSwapParams","documentation":{"id":4755,"nodeType":"StructuredDocumentation","src":"14824:530:33","text":" @notice Data for a swap operation, used by contracts implementing `IBasePool`.\n @param kind Type of swap (exact in or exact out)\n @param amountGivenScaled18 Amount given based on kind of the swap (e.g., tokenIn for EXACT_IN)\n @param balancesScaled18 Current pool balances\n @param indexIn Index of tokenIn\n @param indexOut Index of tokenOut\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param userData Additional (optional) data required for the swap"},"id":4772,"members":[{"constant":false,"id":4758,"mutability":"mutable","name":"kind","nameLocation":"15392:4:33","nodeType":"VariableDeclaration","scope":4772,"src":"15383:13:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},"typeName":{"id":4757,"nodeType":"UserDefinedTypeName","pathNode":{"id":4756,"name":"SwapKind","nameLocations":["15383:8:33"],"nodeType":"IdentifierPath","referencedDeclaration":4735,"src":"15383:8:33"},"referencedDeclaration":4735,"src":"15383:8:33","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":4760,"mutability":"mutable","name":"amountGivenScaled18","nameLocation":"15410:19:33","nodeType":"VariableDeclaration","scope":4772,"src":"15402:27:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4759,"name":"uint256","nodeType":"ElementaryTypeName","src":"15402:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4763,"mutability":"mutable","name":"balancesScaled18","nameLocation":"15445:16:33","nodeType":"VariableDeclaration","scope":4772,"src":"15435:26:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4761,"name":"uint256","nodeType":"ElementaryTypeName","src":"15435:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4762,"nodeType":"ArrayTypeName","src":"15435:9:33","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4765,"mutability":"mutable","name":"indexIn","nameLocation":"15475:7:33","nodeType":"VariableDeclaration","scope":4772,"src":"15467:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4764,"name":"uint256","nodeType":"ElementaryTypeName","src":"15467:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4767,"mutability":"mutable","name":"indexOut","nameLocation":"15496:8:33","nodeType":"VariableDeclaration","scope":4772,"src":"15488:16:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4766,"name":"uint256","nodeType":"ElementaryTypeName","src":"15488:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4769,"mutability":"mutable","name":"router","nameLocation":"15518:6:33","nodeType":"VariableDeclaration","scope":4772,"src":"15510:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4768,"name":"address","nodeType":"ElementaryTypeName","src":"15510:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4771,"mutability":"mutable","name":"userData","nameLocation":"15536:8:33","nodeType":"VariableDeclaration","scope":4772,"src":"15530:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4770,"name":"bytes","nodeType":"ElementaryTypeName","src":"15530:5:33","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"PoolSwapParams","nameLocation":"15362:14:33","nodeType":"StructDefinition","scope":4872,"src":"15355:192:33","visibility":"public"},{"canonicalName":"AfterSwapParams","documentation":{"id":4773,"nodeType":"StructuredDocumentation","src":"15549:813:33","text":" @notice Data for the hook after a swap operation.\n @param kind Type of swap (exact in or exact out)\n @param tokenIn Token to be swapped from\n @param tokenOut Token to be swapped to\n @param amountInScaled18 Amount of tokenIn (entering the Vault)\n @param amountOutScaled18 Amount of tokenOut (leaving the Vault)\n @param tokenInBalanceScaled18 Updated (after swap) balance of tokenIn\n @param tokenOutBalanceScaled18 Updated (after swap) balance of tokenOut\n @param amountCalculatedScaled18 Token amount calculated by the swap\n @param amountCalculatedRaw Token amount calculated by the swap\n @param router The address (usually a router contract) that initiated a swap operation on the Vault\n @param pool Pool address\n @param userData Additional (optional) data required for the swap"},"id":4801,"members":[{"constant":false,"id":4776,"mutability":"mutable","name":"kind","nameLocation":"16401:4:33","nodeType":"VariableDeclaration","scope":4801,"src":"16392:13:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},"typeName":{"id":4775,"nodeType":"UserDefinedTypeName","pathNode":{"id":4774,"name":"SwapKind","nameLocations":["16392:8:33"],"nodeType":"IdentifierPath","referencedDeclaration":4735,"src":"16392:8:33"},"referencedDeclaration":4735,"src":"16392:8:33","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":4779,"mutability":"mutable","name":"tokenIn","nameLocation":"16418:7:33","nodeType":"VariableDeclaration","scope":4801,"src":"16411:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":4778,"nodeType":"UserDefinedTypeName","pathNode":{"id":4777,"name":"IERC20","nameLocations":["16411:6:33"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"16411:6:33"},"referencedDeclaration":40109,"src":"16411:6:33","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":4782,"mutability":"mutable","name":"tokenOut","nameLocation":"16438:8:33","nodeType":"VariableDeclaration","scope":4801,"src":"16431:15:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":4781,"nodeType":"UserDefinedTypeName","pathNode":{"id":4780,"name":"IERC20","nameLocations":["16431:6:33"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"16431:6:33"},"referencedDeclaration":40109,"src":"16431:6:33","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":4784,"mutability":"mutable","name":"amountInScaled18","nameLocation":"16460:16:33","nodeType":"VariableDeclaration","scope":4801,"src":"16452:24:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4783,"name":"uint256","nodeType":"ElementaryTypeName","src":"16452:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4786,"mutability":"mutable","name":"amountOutScaled18","nameLocation":"16490:17:33","nodeType":"VariableDeclaration","scope":4801,"src":"16482:25:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4785,"name":"uint256","nodeType":"ElementaryTypeName","src":"16482:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4788,"mutability":"mutable","name":"tokenInBalanceScaled18","nameLocation":"16521:22:33","nodeType":"VariableDeclaration","scope":4801,"src":"16513:30:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4787,"name":"uint256","nodeType":"ElementaryTypeName","src":"16513:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4790,"mutability":"mutable","name":"tokenOutBalanceScaled18","nameLocation":"16557:23:33","nodeType":"VariableDeclaration","scope":4801,"src":"16549:31:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4789,"name":"uint256","nodeType":"ElementaryTypeName","src":"16549:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4792,"mutability":"mutable","name":"amountCalculatedScaled18","nameLocation":"16594:24:33","nodeType":"VariableDeclaration","scope":4801,"src":"16586:32:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4791,"name":"uint256","nodeType":"ElementaryTypeName","src":"16586:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4794,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"16632:19:33","nodeType":"VariableDeclaration","scope":4801,"src":"16624:27:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4793,"name":"uint256","nodeType":"ElementaryTypeName","src":"16624:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4796,"mutability":"mutable","name":"router","nameLocation":"16665:6:33","nodeType":"VariableDeclaration","scope":4801,"src":"16657:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4795,"name":"address","nodeType":"ElementaryTypeName","src":"16657:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4798,"mutability":"mutable","name":"pool","nameLocation":"16685:4:33","nodeType":"VariableDeclaration","scope":4801,"src":"16677:12:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4797,"name":"address","nodeType":"ElementaryTypeName","src":"16677:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4800,"mutability":"mutable","name":"userData","nameLocation":"16701:8:33","nodeType":"VariableDeclaration","scope":4801,"src":"16695:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4799,"name":"bytes","nodeType":"ElementaryTypeName","src":"16695:5:33","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"AfterSwapParams","nameLocation":"16370:15:33","nodeType":"StructDefinition","scope":4872,"src":"16363:349:33","visibility":"public"},{"canonicalName":"AddLiquidityKind","id":4807,"members":[{"id":4802,"name":"PROPORTIONAL","nameLocation":"16951:12:33","nodeType":"EnumValue","src":"16951:12:33"},{"id":4803,"name":"UNBALANCED","nameLocation":"16969:10:33","nodeType":"EnumValue","src":"16969:10:33"},{"id":4804,"name":"SINGLE_TOKEN_EXACT_OUT","nameLocation":"16985:22:33","nodeType":"EnumValue","src":"16985:22:33"},{"id":4805,"name":"DONATION","nameLocation":"17013:8:33","nodeType":"EnumValue","src":"17013:8:33"},{"id":4806,"name":"CUSTOM","nameLocation":"17027:6:33","nodeType":"EnumValue","src":"17027:6:33"}],"name":"AddLiquidityKind","nameLocation":"16928:16:33","nodeType":"EnumDefinition","src":"16923:112:33"},{"canonicalName":"AddLiquidityParams","documentation":{"id":4808,"nodeType":"StructuredDocumentation","src":"17037:320:33","text":" @notice Data for an add liquidity operation.\n @param pool Address of the pool\n @param to Address of user to mint to\n @param maxAmountsIn Maximum amounts of input tokens\n @param minBptAmountOut Minimum amount of output pool tokens\n @param kind Add liquidity kind\n @param userData Optional user data"},"id":4823,"members":[{"constant":false,"id":4810,"mutability":"mutable","name":"pool","nameLocation":"17398:4:33","nodeType":"VariableDeclaration","scope":4823,"src":"17390:12:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4809,"name":"address","nodeType":"ElementaryTypeName","src":"17390:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4812,"mutability":"mutable","name":"to","nameLocation":"17416:2:33","nodeType":"VariableDeclaration","scope":4823,"src":"17408:10:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4811,"name":"address","nodeType":"ElementaryTypeName","src":"17408:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4815,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"17434:12:33","nodeType":"VariableDeclaration","scope":4823,"src":"17424:22:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4813,"name":"uint256","nodeType":"ElementaryTypeName","src":"17424:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4814,"nodeType":"ArrayTypeName","src":"17424:9:33","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4817,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"17460:15:33","nodeType":"VariableDeclaration","scope":4823,"src":"17452:23:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4816,"name":"uint256","nodeType":"ElementaryTypeName","src":"17452:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4820,"mutability":"mutable","name":"kind","nameLocation":"17498:4:33","nodeType":"VariableDeclaration","scope":4823,"src":"17481:21:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},"typeName":{"id":4819,"nodeType":"UserDefinedTypeName","pathNode":{"id":4818,"name":"AddLiquidityKind","nameLocations":["17481:16:33"],"nodeType":"IdentifierPath","referencedDeclaration":4807,"src":"17481:16:33"},"referencedDeclaration":4807,"src":"17481:16:33","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":4822,"mutability":"mutable","name":"userData","nameLocation":"17514:8:33","nodeType":"VariableDeclaration","scope":4823,"src":"17508:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4821,"name":"bytes","nodeType":"ElementaryTypeName","src":"17508:5:33","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"AddLiquidityParams","nameLocation":"17365:18:33","nodeType":"StructDefinition","scope":4872,"src":"17358:167:33","visibility":"public"},{"canonicalName":"RemoveLiquidityKind","id":4828,"members":[{"id":4824,"name":"PROPORTIONAL","nameLocation":"17770:12:33","nodeType":"EnumValue","src":"17770:12:33"},{"id":4825,"name":"SINGLE_TOKEN_EXACT_IN","nameLocation":"17788:21:33","nodeType":"EnumValue","src":"17788:21:33"},{"id":4826,"name":"SINGLE_TOKEN_EXACT_OUT","nameLocation":"17815:22:33","nodeType":"EnumValue","src":"17815:22:33"},{"id":4827,"name":"CUSTOM","nameLocation":"17843:6:33","nodeType":"EnumValue","src":"17843:6:33"}],"name":"RemoveLiquidityKind","nameLocation":"17744:19:33","nodeType":"EnumDefinition","src":"17739:112:33"},{"canonicalName":"RemoveLiquidityParams","documentation":{"id":4829,"nodeType":"StructuredDocumentation","src":"17853:330:33","text":" @notice Data for an remove liquidity operation.\n @param pool Address of the pool\n @param from Address of user to burn from\n @param maxBptAmountIn Maximum amount of input pool tokens\n @param minAmountsOut Minimum amounts of output tokens\n @param kind Remove liquidity kind\n @param userData Optional user data"},"id":4844,"members":[{"constant":false,"id":4831,"mutability":"mutable","name":"pool","nameLocation":"18227:4:33","nodeType":"VariableDeclaration","scope":4844,"src":"18219:12:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4830,"name":"address","nodeType":"ElementaryTypeName","src":"18219:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4833,"mutability":"mutable","name":"from","nameLocation":"18245:4:33","nodeType":"VariableDeclaration","scope":4844,"src":"18237:12:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4832,"name":"address","nodeType":"ElementaryTypeName","src":"18237:7:33","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":4835,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"18263:14:33","nodeType":"VariableDeclaration","scope":4844,"src":"18255:22:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4834,"name":"uint256","nodeType":"ElementaryTypeName","src":"18255:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4838,"mutability":"mutable","name":"minAmountsOut","nameLocation":"18293:13:33","nodeType":"VariableDeclaration","scope":4844,"src":"18283:23:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":4836,"name":"uint256","nodeType":"ElementaryTypeName","src":"18283:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":4837,"nodeType":"ArrayTypeName","src":"18283:9:33","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":4841,"mutability":"mutable","name":"kind","nameLocation":"18332:4:33","nodeType":"VariableDeclaration","scope":4844,"src":"18312:24:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":4840,"nodeType":"UserDefinedTypeName","pathNode":{"id":4839,"name":"RemoveLiquidityKind","nameLocations":["18312:19:33"],"nodeType":"IdentifierPath","referencedDeclaration":4828,"src":"18312:19:33"},"referencedDeclaration":4828,"src":"18312:19:33","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":4843,"mutability":"mutable","name":"userData","nameLocation":"18348:8:33","nodeType":"VariableDeclaration","scope":4844,"src":"18342:14:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":4842,"name":"bytes","nodeType":"ElementaryTypeName","src":"18342:5:33","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"RemoveLiquidityParams","nameLocation":"18191:21:33","nodeType":"StructDefinition","scope":4872,"src":"18184:175:33","visibility":"public"},{"canonicalName":"WrappingDirection","id":4847,"members":[{"id":4845,"name":"WRAP","nameLocation":"18602:4:33","nodeType":"EnumValue","src":"18602:4:33"},{"id":4846,"name":"UNWRAP","nameLocation":"18612:6:33","nodeType":"EnumValue","src":"18612:6:33"}],"name":"WrappingDirection","nameLocation":"18578:17:33","nodeType":"EnumDefinition","src":"18573:47:33"},{"canonicalName":"BufferWrapOrUnwrapParams","documentation":{"id":4848,"nodeType":"StructuredDocumentation","src":"18622:499:33","text":" @notice Data for a wrap/unwrap operation.\n @param kind Type of swap (Exact In or Exact Out)\n @param direction Direction of the wrapping operation (Wrap or Unwrap)\n @param wrappedToken Wrapped token, compatible with interface ERC4626\n @param amountGivenRaw Amount specified for tokenIn or tokenOut (depends on the type of swap and wrapping direction)\n @param limitRaw Minimum or maximum amount specified for the other token (depends on the type of swap and wrapping\n direction)"},"id":4862,"members":[{"constant":false,"id":4851,"mutability":"mutable","name":"kind","nameLocation":"19169:4:33","nodeType":"VariableDeclaration","scope":4862,"src":"19160:13:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},"typeName":{"id":4850,"nodeType":"UserDefinedTypeName","pathNode":{"id":4849,"name":"SwapKind","nameLocations":["19160:8:33"],"nodeType":"IdentifierPath","referencedDeclaration":4735,"src":"19160:8:33"},"referencedDeclaration":4735,"src":"19160:8:33","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":4854,"mutability":"mutable","name":"direction","nameLocation":"19197:9:33","nodeType":"VariableDeclaration","scope":4862,"src":"19179:27:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$4847","typeString":"enum WrappingDirection"},"typeName":{"id":4853,"nodeType":"UserDefinedTypeName","pathNode":{"id":4852,"name":"WrappingDirection","nameLocations":["19179:17:33"],"nodeType":"IdentifierPath","referencedDeclaration":4847,"src":"19179:17:33"},"referencedDeclaration":4847,"src":"19179:17:33","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$4847","typeString":"enum WrappingDirection"}},"visibility":"internal"},{"constant":false,"id":4857,"mutability":"mutable","name":"wrappedToken","nameLocation":"19221:12:33","nodeType":"VariableDeclaration","scope":4862,"src":"19212:21:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":4856,"nodeType":"UserDefinedTypeName","pathNode":{"id":4855,"name":"IERC4626","nameLocations":["19212:8:33"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"19212:8:33"},"referencedDeclaration":39833,"src":"19212:8:33","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":4859,"mutability":"mutable","name":"amountGivenRaw","nameLocation":"19247:14:33","nodeType":"VariableDeclaration","scope":4862,"src":"19239:22:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4858,"name":"uint256","nodeType":"ElementaryTypeName","src":"19239:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":4861,"mutability":"mutable","name":"limitRaw","nameLocation":"19275:8:33","nodeType":"VariableDeclaration","scope":4862,"src":"19267:16:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4860,"name":"uint256","nodeType":"ElementaryTypeName","src":"19267:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"BufferWrapOrUnwrapParams","nameLocation":"19129:24:33","nodeType":"StructDefinition","scope":4872,"src":"19122:164:33","visibility":"public"},{"constant":true,"id":4865,"mutability":"constant","name":"FEE_BITLENGTH","nameLocation":"19611:13:33","nodeType":"VariableDeclaration","scope":4872,"src":"19594:35:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4863,"name":"uint256","nodeType":"ElementaryTypeName","src":"19594:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3234","id":4864,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19627:2:33","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},"visibility":"internal"},{"constant":true,"id":4868,"mutability":"constant","name":"FEE_SCALING_FACTOR","nameLocation":"19648:18:33","nodeType":"VariableDeclaration","scope":4872,"src":"19631:42:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4866,"name":"uint256","nodeType":"ElementaryTypeName","src":"19631:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653131","id":4867,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19669:4:33","typeDescriptions":{"typeIdentifier":"t_rational_100000000000_by_1","typeString":"int_const 100000000000"},"value":"1e11"},"visibility":"internal"},{"constant":true,"id":4871,"mutability":"constant","name":"MAX_FEE_PERCENTAGE","nameLocation":"19896:18:33","nodeType":"VariableDeclaration","scope":4872,"src":"19879:48:33","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4869,"name":"uint256","nodeType":"ElementaryTypeName","src":"19879:7:33","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"39392e39393939653136","id":4870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19917:10:33","typeDescriptions":{"typeIdentifier":"t_rational_999999000000000000_by_1","typeString":"int_const 999999000000000000"},"value":"99.9999e16"},"visibility":"internal"}],"src":"46:19895:33"},"id":33},"@balancer-labs/v3-pool-utils/contracts/BasePoolAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-pool-utils/contracts/BasePoolAuthentication.sol","exportedSymbols":{"BasePoolAuthentication":[4907],"CommonAuthentication":[5786],"IVault":[3111]},"id":4908,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4873,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:34"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":4875,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4908,"sourceUnit":3112,"src":"72:81:34","symbolAliases":[{"foreign":{"id":4874,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"81:6:34","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol","id":4877,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":4908,"sourceUnit":5787,"src":"155:115:34","symbolAliases":[{"foreign":{"id":4876,"name":"CommonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5786,"src":"164:20:34","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":4879,"name":"CommonAuthentication","nameLocations":["405:20:34"],"nodeType":"IdentifierPath","referencedDeclaration":5786,"src":"405:20:34"},"id":4880,"nodeType":"InheritanceSpecifier","src":"405:20:34"}],"canonicalName":"BasePoolAuthentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":4878,"nodeType":"StructuredDocumentation","src":"272:89:34","text":"@dev Base contract for performing access control on external functions within pools."},"fullyImplemented":true,"id":4907,"linearizedBaseContracts":[4907,5786,5498,243],"name":"BasePoolAuthentication","nameLocation":"379:22:34","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":4883,"mutability":"immutable","name":"_vault","nameLocation":"457:6:34","nodeType":"VariableDeclaration","scope":4907,"src":"432:31:34","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":4882,"nodeType":"UserDefinedTypeName","pathNode":{"id":4881,"name":"IVault","nameLocations":["432:6:34"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"432:6:34"},"referencedDeclaration":3111,"src":"432:6:34","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"private"},{"body":{"id":4905,"nodeType":"Block","src":"793:64:34","statements":[]},"documentation":{"id":4884,"nodeType":"StructuredDocumentation","src":"470:211:34","text":" @dev Pools should use the pool factory as the disambiguator passed into the base Authentication contract.\n Otherwise, permissions would conflict if different pools reused function names."},"id":4906,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":4892,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4887,"src":"750:5:34","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},{"arguments":[{"arguments":[{"arguments":[{"id":4899,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4889,"src":"781:7:34","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":4898,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"773:7:34","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":4897,"name":"uint160","nodeType":"ElementaryTypeName","src":"773:7:34","typeDescriptions":{}}},"id":4900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"773:16:34","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":4896,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"765:7:34","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":4895,"name":"uint256","nodeType":"ElementaryTypeName","src":"765:7:34","typeDescriptions":{}}},"id":4901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"765:25:34","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":4894,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"757:7:34","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":4893,"name":"bytes32","nodeType":"ElementaryTypeName","src":"757:7:34","typeDescriptions":{}}},"id":4902,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"757:34:34","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":4903,"kind":"baseConstructorSpecifier","modifierName":{"id":4891,"name":"CommonAuthentication","nameLocations":["729:20:34"],"nodeType":"IdentifierPath","referencedDeclaration":5786,"src":"729:20:34"},"nodeType":"ModifierInvocation","src":"729:63:34"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":4890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4887,"mutability":"mutable","name":"vault","nameLocation":"705:5:34","nodeType":"VariableDeclaration","scope":4906,"src":"698:12:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":4886,"nodeType":"UserDefinedTypeName","pathNode":{"id":4885,"name":"IVault","nameLocations":["698:6:34"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"698:6:34"},"referencedDeclaration":3111,"src":"698:6:34","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":4889,"mutability":"mutable","name":"factory","nameLocation":"720:7:34","nodeType":"VariableDeclaration","scope":4906,"src":"712:15:34","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4888,"name":"address","nodeType":"ElementaryTypeName","src":"712:7:34","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"697:31:34"},"returnParameters":{"id":4904,"nodeType":"ParameterList","parameters":[],"src":"793:0:34"},"scope":4907,"src":"686:171:34","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":4908,"src":"361:498:34","usedErrors":[234],"usedEvents":[]}],"src":"46:814:34"},"id":34},"@balancer-labs/v3-pool-utils/contracts/BasePoolFactory.sol":{"ast":{"absolutePath":"@balancer-labs/v3-pool-utils/contracts/BasePoolFactory.sol","exportedSymbols":{"BasePoolFactory":[5283],"Create2":[40839],"FactoryWidePauseWindow":[5892],"IBasePoolFactory":[1579],"IVault":[3111],"LiquidityManagement":[4580],"PoolRoleAccounts":[4677],"SingletonAuthentication":[19387],"TokenConfig":[4694]},"id":5284,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":4909,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:35"},{"absolutePath":"@openzeppelin/contracts/utils/Create2.sol","file":"@openzeppelin/contracts/utils/Create2.sol","id":4911,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5284,"sourceUnit":40840,"src":"72:68:35","symbolAliases":[{"foreign":{"id":4910,"name":"Create2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40839,"src":"81:7:35","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol","id":4913,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5284,"sourceUnit":1580,"src":"142:101:35","symbolAliases":[{"foreign":{"id":4912,"name":"IBasePoolFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1579,"src":"151:16:35","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":4915,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5284,"sourceUnit":3112,"src":"244:81:35","symbolAliases":[{"foreign":{"id":4914,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"253:6:35","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":4919,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5284,"sourceUnit":4872,"src":"326:141:35","symbolAliases":[{"foreign":{"id":4916,"name":"TokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4694,"src":"339:11:35","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":4917,"name":"PoolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4677,"src":"356:16:35","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":4918,"name":"LiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4580,"src":"378:19:35","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/FactoryWidePauseWindow.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/FactoryWidePauseWindow.sol","id":4921,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5284,"sourceUnit":5893,"src":"469:119:35","symbolAliases":[{"foreign":{"id":4920,"name":"FactoryWidePauseWindow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5892,"src":"478:22:35","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","id":4923,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5284,"sourceUnit":19388,"src":"589:104:35","symbolAliases":[{"foreign":{"id":4922,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19387,"src":"598:23:35","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":4925,"name":"IBasePoolFactory","nameLocations":["2897:16:35"],"nodeType":"IdentifierPath","referencedDeclaration":1579,"src":"2897:16:35"},"id":4926,"nodeType":"InheritanceSpecifier","src":"2897:16:35"},{"baseName":{"id":4927,"name":"SingletonAuthentication","nameLocations":["2915:23:35"],"nodeType":"IdentifierPath","referencedDeclaration":19387,"src":"2915:23:35"},"id":4928,"nodeType":"InheritanceSpecifier","src":"2915:23:35"},{"baseName":{"id":4929,"name":"FactoryWidePauseWindow","nameLocations":["2940:22:35"],"nodeType":"IdentifierPath","referencedDeclaration":5892,"src":"2940:22:35"},"id":4930,"nodeType":"InheritanceSpecifier","src":"2940:22:35"}],"canonicalName":"BasePoolFactory","contractDependencies":[],"contractKind":"contract","documentation":{"id":4924,"nodeType":"StructuredDocumentation","src":"695:2164:35","text":" @notice Base contract for Pool factories.\n Pools are deployed from factories to allow third parties to more easily reason about them. Unknown Pools may have\n arbitrary logic: being able to assert that a Pool's behavior follows certain rules (those imposed by the contracts\n created by the factory) is very powerful.\n Note that in v3, the factory alone is not enough to ensure the safety of a pool. v3 pools can have arbitrary hook\n contracts, rate providers, complex tokens, and configuration that significantly impacts pool behavior. Specialty\n factories can be designed to limit their pools range of behavior (e.g., weighted 80/20 factories where the token\n count and weights are fixed).\n Since we expect to release new versions of pool types regularly - and the blockchain is forever - versioning will\n become increasingly important. Governance can deprecate a factory by calling `disable`, which will permanently\n prevent the creation of any future pools from the factory.\n Use of factories is also important for security. Calls to `registerPool` or `initialize` made directly on the Vault\n could potentially be frontrun. In the case of registration, a DoS attack could register a pool with malicious\n parameters, causing the legitimate registration transaction to fail. The standard Balancer factories avoid this by\n deploying and registering in a single `create` function.\n It would also be possible to frontrun `initialize` (e.g., with unbalanced liquidity), and cause the intended\n initialization to fail. Like registration, initialization only happens once. The Balancer standard factories do not\n initialize on create, as this would be more complex (e.g., requiring token approvals), and it's very common for the\n deployment and funding to be performed from different accounts. Also, frontrunning `initialize` doesn't have serious\n consequences, beyond being a DoS.\n Nevertheless, this is a factor to consider when launching new pools. To avoid any possibility of frontrunning,\n the best practice would be to create (i.e., deploy and register) and initialize in the same transaction."},"fullyImplemented":true,"id":5283,"linearizedBaseContracts":[5283,5892,19387,5786,5498,1579,243],"name":"BasePoolFactory","nameLocation":"2878:15:35","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":4934,"mutability":"mutable","name":"_isPoolFromFactory","nameLocation":"3021:18:35","nodeType":"VariableDeclaration","scope":5283,"src":"2969:70:35","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":4933,"keyName":"pool","keyNameLocation":"2985:4:35","keyType":{"id":4931,"name":"address","nodeType":"ElementaryTypeName","src":"2977:7:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2969:43:35","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"isFromFactory","valueNameLocation":"2998:13:35","valueType":{"id":4932,"name":"bool","nodeType":"ElementaryTypeName","src":"2993:4:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"private"},{"constant":false,"id":4937,"mutability":"mutable","name":"_pools","nameLocation":"3063:6:35","nodeType":"VariableDeclaration","scope":5283,"src":"3045:24:35","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[]"},"typeName":{"baseType":{"id":4935,"name":"address","nodeType":"ElementaryTypeName","src":"3045:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4936,"nodeType":"ArrayTypeName","src":"3045:9:35","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"private"},{"constant":false,"id":4939,"mutability":"mutable","name":"_disabled","nameLocation":"3089:9:35","nodeType":"VariableDeclaration","scope":5283,"src":"3076:22:35","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4938,"name":"bool","nodeType":"ElementaryTypeName","src":"3076:4:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"private"},{"constant":false,"id":4941,"mutability":"mutable","name":"_creationCode","nameLocation":"3192:13:35","nodeType":"VariableDeclaration","scope":5283,"src":"3178:27:35","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes"},"typeName":{"id":4940,"name":"bytes","nodeType":"ElementaryTypeName","src":"3178:5:35","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"private"},{"documentation":{"id":4942,"nodeType":"StructuredDocumentation","src":"3212:83:35","text":"@notice A pool creator was specified for a pool from a Balancer core pool type."},"errorSelector":"61ee1764","id":4944,"name":"StandardPoolWithCreator","nameLocation":"3306:23:35","nodeType":"ErrorDefinition","parameters":{"id":4943,"nodeType":"ParameterList","parameters":[],"src":"3329:2:35"},"src":"3300:32:35"},{"body":{"id":4964,"nodeType":"Block","src":"3524:45:35","statements":[{"expression":{"id":4962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":4960,"name":"_creationCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4941,"src":"3534:13:35","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":4961,"name":"creationCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4951,"src":"3550:12:35","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"3534:28:35","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},"id":4963,"nodeType":"ExpressionStatement","src":"3534:28:35"}]},"id":4965,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":4954,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4947,"src":"3473:5:35","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"id":4955,"kind":"baseConstructorSpecifier","modifierName":{"id":4953,"name":"SingletonAuthentication","nameLocations":["3449:23:35"],"nodeType":"IdentifierPath","referencedDeclaration":19387,"src":"3449:23:35"},"nodeType":"ModifierInvocation","src":"3449:30:35"},{"arguments":[{"id":4957,"name":"pauseWindowDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4949,"src":"3503:19:35","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"id":4958,"kind":"baseConstructorSpecifier","modifierName":{"id":4956,"name":"FactoryWidePauseWindow","nameLocations":["3480:22:35"],"nodeType":"IdentifierPath","referencedDeclaration":5892,"src":"3480:22:35"},"nodeType":"ModifierInvocation","src":"3480:43:35"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":4952,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4947,"mutability":"mutable","name":"vault","nameLocation":"3366:5:35","nodeType":"VariableDeclaration","scope":4965,"src":"3359:12:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":4946,"nodeType":"UserDefinedTypeName","pathNode":{"id":4945,"name":"IVault","nameLocations":["3359:6:35"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"3359:6:35"},"referencedDeclaration":3111,"src":"3359:6:35","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":4949,"mutability":"mutable","name":"pauseWindowDuration","nameLocation":"3388:19:35","nodeType":"VariableDeclaration","scope":4965,"src":"3381:26:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":4948,"name":"uint32","nodeType":"ElementaryTypeName","src":"3381:6:35","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":4951,"mutability":"mutable","name":"creationCode","nameLocation":"3430:12:35","nodeType":"VariableDeclaration","scope":4965,"src":"3417:25:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":4950,"name":"bytes","nodeType":"ElementaryTypeName","src":"3417:5:35","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3349:99:35"},"returnParameters":{"id":4959,"nodeType":"ParameterList","parameters":[],"src":"3524:0:35"},"scope":5283,"src":"3338:231:35","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[1534],"body":{"id":4977,"nodeType":"Block","src":"3682:48:35","statements":[{"expression":{"baseExpression":{"id":4973,"name":"_isPoolFromFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4934,"src":"3699:18:35","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":4975,"indexExpression":{"id":4974,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4968,"src":"3718:4:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3699:24:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":4972,"id":4976,"nodeType":"Return","src":"3692:31:35"}]},"documentation":{"id":4966,"nodeType":"StructuredDocumentation","src":"3575:32:35","text":"@inheritdoc IBasePoolFactory"},"functionSelector":"6634b753","id":4978,"implemented":true,"kind":"function","modifiers":[],"name":"isPoolFromFactory","nameLocation":"3621:17:35","nodeType":"FunctionDefinition","parameters":{"id":4969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4968,"mutability":"mutable","name":"pool","nameLocation":"3647:4:35","nodeType":"VariableDeclaration","scope":4978,"src":"3639:12:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":4967,"name":"address","nodeType":"ElementaryTypeName","src":"3639:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3638:14:35"},"returnParameters":{"id":4972,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4971,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4978,"src":"3676:4:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":4970,"name":"bool","nodeType":"ElementaryTypeName","src":"3676:4:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3675:6:35"},"scope":5283,"src":"3612:118:35","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1540],"body":{"id":4987,"nodeType":"Block","src":"3829:37:35","statements":[{"expression":{"expression":{"id":4984,"name":"_pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4937,"src":"3846:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":4985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3853:6:35","memberName":"length","nodeType":"MemberAccess","src":"3846:13:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":4983,"id":4986,"nodeType":"Return","src":"3839:20:35"}]},"documentation":{"id":4979,"nodeType":"StructuredDocumentation","src":"3736:32:35","text":"@inheritdoc IBasePoolFactory"},"functionSelector":"8eec5d70","id":4988,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCount","nameLocation":"3782:12:35","nodeType":"FunctionDefinition","parameters":{"id":4980,"nodeType":"ParameterList","parameters":[],"src":"3794:2:35"},"returnParameters":{"id":4983,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4982,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4988,"src":"3820:7:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":4981,"name":"uint256","nodeType":"ElementaryTypeName","src":"3820:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3819:9:35"},"scope":5283,"src":"3773:93:35","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1558],"body":{"id":4997,"nodeType":"Block","src":"3970:30:35","statements":[{"expression":{"id":4995,"name":"_pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4937,"src":"3987:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"functionReturnParameters":4994,"id":4996,"nodeType":"Return","src":"3980:13:35"}]},"documentation":{"id":4989,"nodeType":"StructuredDocumentation","src":"3872:32:35","text":"@inheritdoc IBasePoolFactory"},"functionSelector":"673a2a1f","id":4998,"implemented":true,"kind":"function","modifiers":[],"name":"getPools","nameLocation":"3918:8:35","nodeType":"FunctionDefinition","parameters":{"id":4990,"nodeType":"ParameterList","parameters":[],"src":"3926:2:35"},"returnParameters":{"id":4994,"nodeType":"ParameterList","parameters":[{"constant":false,"id":4993,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":4998,"src":"3952:16:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":4991,"name":"address","nodeType":"ElementaryTypeName","src":"3952:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":4992,"nodeType":"ArrayTypeName","src":"3952:9:35","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"3951:18:35"},"scope":5283,"src":"3909:91:35","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1551],"body":{"id":5069,"nodeType":"Block","src":"4145:472:35","statements":[{"assignments":[5010],"declarations":[{"constant":false,"id":5010,"mutability":"mutable","name":"length","nameLocation":"4163:6:35","nodeType":"VariableDeclaration","scope":5069,"src":"4155:14:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5009,"name":"uint256","nodeType":"ElementaryTypeName","src":"4155:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5013,"initialValue":{"expression":{"id":5011,"name":"_pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4937,"src":"4172:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":5012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4179:6:35","memberName":"length","nodeType":"MemberAccess","src":"4172:13:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4155:30:35"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5014,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5001,"src":"4199:5:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5015,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5010,"src":"4208:6:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4199:15:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5021,"nodeType":"IfStatement","src":"4195:71:35","trueBody":{"id":5020,"nodeType":"Block","src":"4216:50:35","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5017,"name":"IndexOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1526,"src":"4237:16:35","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4237:18:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5019,"nodeType":"RevertStatement","src":"4230:25:35"}]}},{"assignments":[5023],"declarations":[{"constant":false,"id":5023,"mutability":"mutable","name":"end","nameLocation":"4380:3:35","nodeType":"VariableDeclaration","scope":5069,"src":"4372:11:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5022,"name":"uint256","nodeType":"ElementaryTypeName","src":"4372:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5027,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5026,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5024,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5001,"src":"4386:5:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":5025,"name":"count","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5003,"src":"4394:5:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4386:13:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4372:27:35"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5030,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5028,"name":"end","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5023,"src":"4413:3:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":5029,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5010,"src":"4419:6:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4413:12:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5038,"nodeType":"IfStatement","src":"4409:65:35","trueBody":{"id":5037,"nodeType":"Block","src":"4427:47:35","statements":[{"expression":{"id":5035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5031,"name":"count","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5003,"src":"4441:5:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5032,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5010,"src":"4449:6:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":5033,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5001,"src":"4458:5:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4449:14:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4441:22:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5036,"nodeType":"ExpressionStatement","src":"4441:22:35"}]}},{"expression":{"id":5045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5039,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5007,"src":"4484:5:35","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5043,"name":"count","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5003,"src":"4506:5:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5042,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"4492:13:35","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":5040,"name":"address","nodeType":"ElementaryTypeName","src":"4496:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5041,"nodeType":"ArrayTypeName","src":"4496:9:35","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":5044,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4492:20:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"4484:28:35","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":5046,"nodeType":"ExpressionStatement","src":"4484:28:35"},{"body":{"id":5067,"nodeType":"Block","src":"4558:53:35","statements":[{"expression":{"id":5065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5057,"name":"pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5007,"src":"4572:5:35","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":5059,"indexExpression":{"id":5058,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5048,"src":"4578:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4572:8:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":5060,"name":"_pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4937,"src":"4583:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":5064,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5061,"name":"start","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5001,"src":"4590:5:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":5062,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5048,"src":"4598:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4590:9:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4583:17:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4572:28:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5066,"nodeType":"ExpressionStatement","src":"4572:28:35"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5051,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5048,"src":"4542:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5052,"name":"count","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5003,"src":"4546:5:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4542:9:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5068,"initializationExpression":{"assignments":[5048],"declarations":[{"constant":false,"id":5048,"mutability":"mutable","name":"i","nameLocation":"4535:1:35","nodeType":"VariableDeclaration","scope":5068,"src":"4527:9:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5047,"name":"uint256","nodeType":"ElementaryTypeName","src":"4527:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5050,"initialValue":{"hexValue":"30","id":5049,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4539:1:35","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4527:13:35"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":5055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"4553:3:35","subExpression":{"id":5054,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5048,"src":"4553:1:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5056,"nodeType":"ExpressionStatement","src":"4553:3:35"},"nodeType":"ForStatement","src":"4522:89:35"}]},"documentation":{"id":4999,"nodeType":"StructuredDocumentation","src":"4006:32:35","text":"@inheritdoc IBasePoolFactory"},"functionSelector":"53a72f7e","id":5070,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolsInRange","nameLocation":"4052:15:35","nodeType":"FunctionDefinition","parameters":{"id":5004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5001,"mutability":"mutable","name":"start","nameLocation":"4076:5:35","nodeType":"VariableDeclaration","scope":5070,"src":"4068:13:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5000,"name":"uint256","nodeType":"ElementaryTypeName","src":"4068:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5003,"mutability":"mutable","name":"count","nameLocation":"4091:5:35","nodeType":"VariableDeclaration","scope":5070,"src":"4083:13:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5002,"name":"uint256","nodeType":"ElementaryTypeName","src":"4083:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4067:30:35"},"returnParameters":{"id":5008,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5007,"mutability":"mutable","name":"pools","nameLocation":"4138:5:35","nodeType":"VariableDeclaration","scope":5070,"src":"4121:22:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":5005,"name":"address","nodeType":"ElementaryTypeName","src":"4121:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5006,"nodeType":"ArrayTypeName","src":"4121:9:35","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"4120:24:35"},"scope":5283,"src":"4043:574:35","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1574],"body":{"id":5078,"nodeType":"Block","src":"4709:33:35","statements":[{"expression":{"id":5076,"name":"_disabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4939,"src":"4726:9:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":5075,"id":5077,"nodeType":"Return","src":"4719:16:35"}]},"documentation":{"id":5071,"nodeType":"StructuredDocumentation","src":"4623:32:35","text":"@inheritdoc IBasePoolFactory"},"functionSelector":"6c57f5a9","id":5079,"implemented":true,"kind":"function","modifiers":[],"name":"isDisabled","nameLocation":"4669:10:35","nodeType":"FunctionDefinition","parameters":{"id":5072,"nodeType":"ParameterList","parameters":[],"src":"4679:2:35"},"returnParameters":{"id":5075,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5074,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5079,"src":"4703:4:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5073,"name":"bool","nodeType":"ElementaryTypeName","src":"4703:4:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4702:6:35"},"scope":5283,"src":"4660:82:35","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[1568],"body":{"id":5115,"nodeType":"Block","src":"4889:275:35","statements":[{"assignments":[5090],"declarations":[{"constant":false,"id":5090,"mutability":"mutable","name":"creationCode","nameLocation":"4912:12:35","nodeType":"VariableDeclaration","scope":5115,"src":"4899:25:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5089,"name":"bytes","nodeType":"ElementaryTypeName","src":"4899:5:35","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":5096,"initialValue":{"arguments":[{"id":5093,"name":"_creationCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4941,"src":"4944:13:35","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},{"id":5094,"name":"constructorArgs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5082,"src":"4959:15:35","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":5091,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4927:3:35","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":5092,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4931:12:35","memberName":"encodePacked","nodeType":"MemberAccess","src":"4927:16:35","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":5095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4927:48:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"4899:76:35"},{"assignments":[5098],"declarations":[{"constant":false,"id":5098,"mutability":"mutable","name":"creationCodeHash","nameLocation":"4993:16:35","nodeType":"VariableDeclaration","scope":5115,"src":"4985:24:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5097,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4985:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":5102,"initialValue":{"arguments":[{"id":5100,"name":"creationCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5090,"src":"5022:12:35","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":5099,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"5012:9:35","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":5101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5012:23:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"4985:50:35"},{"assignments":[5104],"declarations":[{"constant":false,"id":5104,"mutability":"mutable","name":"finalSalt","nameLocation":"5053:9:35","nodeType":"VariableDeclaration","scope":5115,"src":"5045:17:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5103,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5045:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":5108,"initialValue":{"arguments":[{"id":5106,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5084,"src":"5083:4:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":5105,"name":"_computeFinalSalt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5189,"src":"5065:17:35","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) view returns (bytes32)"}},"id":5107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5065:23:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5045:43:35"},{"expression":{"arguments":[{"id":5111,"name":"finalSalt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5104,"src":"5129:9:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":5112,"name":"creationCodeHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5098,"src":"5140:16:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":5109,"name":"Create2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40839,"src":"5106:7:35","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Create2_$40839_$","typeString":"type(library Create2)"}},"id":5110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5114:14:35","memberName":"computeAddress","nodeType":"MemberAccess","referencedDeclaration":40824,"src":"5106:22:35","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32,bytes32) view returns (address)"}},"id":5113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5106:51:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":5088,"id":5114,"nodeType":"Return","src":"5099:58:35"}]},"documentation":{"id":5080,"nodeType":"StructuredDocumentation","src":"4748:32:35","text":"@inheritdoc IBasePoolFactory"},"functionSelector":"44f6fec7","id":5116,"implemented":true,"kind":"function","modifiers":[],"name":"getDeploymentAddress","nameLocation":"4794:20:35","nodeType":"FunctionDefinition","parameters":{"id":5085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5082,"mutability":"mutable","name":"constructorArgs","nameLocation":"4828:15:35","nodeType":"VariableDeclaration","scope":5116,"src":"4815:28:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5081,"name":"bytes","nodeType":"ElementaryTypeName","src":"4815:5:35","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":5084,"mutability":"mutable","name":"salt","nameLocation":"4853:4:35","nodeType":"VariableDeclaration","scope":5116,"src":"4845:12:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5083,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4845:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4814:44:35"},"returnParameters":{"id":5088,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5087,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5116,"src":"4880:7:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5086,"name":"address","nodeType":"ElementaryTypeName","src":"4880:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4879:9:35"},"scope":5283,"src":"4785:379:35","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[1578],"body":{"id":5132,"nodeType":"Block","src":"5248:93:35","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":5122,"name":"_ensureEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5144,"src":"5258:14:35","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":5123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5258:16:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5124,"nodeType":"ExpressionStatement","src":"5258:16:35"},{"expression":{"id":5127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5125,"name":"_disabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4939,"src":"5285:9:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":5126,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5297:4:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"5285:16:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5128,"nodeType":"ExpressionStatement","src":"5285:16:35"},{"eventCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5129,"name":"FactoryDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1520,"src":"5317:15:35","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$__$returns$__$","typeString":"function ()"}},"id":5130,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5317:17:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5131,"nodeType":"EmitStatement","src":"5312:22:35"}]},"documentation":{"id":5117,"nodeType":"StructuredDocumentation","src":"5170:32:35","text":"@inheritdoc IBasePoolFactory"},"functionSelector":"2f2770db","id":5133,"implemented":true,"kind":"function","modifiers":[{"id":5120,"kind":"modifierInvocation","modifierName":{"id":5119,"name":"authenticate","nameLocations":["5235:12:35"],"nodeType":"IdentifierPath","referencedDeclaration":5446,"src":"5235:12:35"},"nodeType":"ModifierInvocation","src":"5235:12:35"}],"name":"disable","nameLocation":"5216:7:35","nodeType":"FunctionDefinition","parameters":{"id":5118,"nodeType":"ParameterList","parameters":[],"src":"5223:2:35"},"returnParameters":{"id":5121,"nodeType":"ParameterList","parameters":[],"src":"5248:0:35"},"scope":5283,"src":"5207:134:35","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":5143,"nodeType":"Block","src":"5387:76:35","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":5136,"name":"isDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5079,"src":"5401:10:35","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":5137,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5401:12:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5142,"nodeType":"IfStatement","src":"5397:60:35","trueBody":{"id":5141,"nodeType":"Block","src":"5415:42:35","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5138,"name":"Disabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1523,"src":"5436:8:35","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5436:10:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5140,"nodeType":"RevertStatement","src":"5429:17:35"}]}}]},"id":5144,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureEnabled","nameLocation":"5356:14:35","nodeType":"FunctionDefinition","parameters":{"id":5134,"nodeType":"ParameterList","parameters":[],"src":"5370:2:35"},"returnParameters":{"id":5135,"nodeType":"ParameterList","parameters":[],"src":"5387:0:35"},"scope":5283,"src":"5347:116:35","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":5168,"nodeType":"Block","src":"5534:135:35","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":5149,"name":"_ensureEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5144,"src":"5544:14:35","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":5150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5544:16:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5151,"nodeType":"ExpressionStatement","src":"5544:16:35"},{"expression":{"id":5156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":5152,"name":"_isPoolFromFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4934,"src":"5571:18:35","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":5154,"indexExpression":{"id":5153,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5146,"src":"5590:4:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5571:24:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":5155,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5598:4:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"5571:31:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5157,"nodeType":"ExpressionStatement","src":"5571:31:35"},{"expression":{"arguments":[{"id":5161,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5146,"src":"5624:4:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5158,"name":"_pools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4937,"src":"5612:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"id":5160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5619:4:35","memberName":"push","nodeType":"MemberAccess","src":"5612:11:35","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_address_$dyn_storage_ptr_$_t_address_$returns$__$attached_to$_t_array$_t_address_$dyn_storage_ptr_$","typeString":"function (address[] storage pointer,address)"}},"id":5162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5612:17:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5163,"nodeType":"ExpressionStatement","src":"5612:17:35"},{"eventCall":{"arguments":[{"id":5165,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5146,"src":"5657:4:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5164,"name":"PoolCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1517,"src":"5645:11:35","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":5166,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5645:17:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5167,"nodeType":"EmitStatement","src":"5640:22:35"}]},"id":5169,"implemented":true,"kind":"function","modifiers":[],"name":"_registerPoolWithFactory","nameLocation":"5478:24:35","nodeType":"FunctionDefinition","parameters":{"id":5147,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5146,"mutability":"mutable","name":"pool","nameLocation":"5511:4:35","nodeType":"VariableDeclaration","scope":5169,"src":"5503:12:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5145,"name":"address","nodeType":"ElementaryTypeName","src":"5503:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5502:14:35"},"returnParameters":{"id":5148,"nodeType":"ParameterList","parameters":[],"src":"5534:0:35"},"scope":5283,"src":"5469:200:35","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":5188,"nodeType":"Block","src":"6082:78:35","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":5180,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6120:3:35","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6124:6:35","memberName":"sender","nodeType":"MemberAccess","src":"6120:10:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":5182,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"6132:5:35","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":5183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6138:7:35","memberName":"chainid","nodeType":"MemberAccess","src":"6132:13:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":5184,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5172,"src":"6147:4:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":5178,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"6109:3:35","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":5179,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6113:6:35","memberName":"encode","nodeType":"MemberAccess","src":"6109:10:35","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":5185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6109:43:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":5177,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"6099:9:35","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":5186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6099:54:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":5176,"id":5187,"nodeType":"Return","src":"6092:61:35"}]},"documentation":{"id":5170,"nodeType":"StructuredDocumentation","src":"5675:321:35","text":" @dev Factories that require a custom-calculated salt can override to replace this default salt processing.\n By default, the pool address determinants include the sender and chain id, as well as the user-provided salt,\n so contracts will generally not have the same address on different L2s."},"id":5189,"implemented":true,"kind":"function","modifiers":[],"name":"_computeFinalSalt","nameLocation":"6010:17:35","nodeType":"FunctionDefinition","parameters":{"id":5173,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5172,"mutability":"mutable","name":"salt","nameLocation":"6036:4:35","nodeType":"VariableDeclaration","scope":5189,"src":"6028:12:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5171,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6028:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6027:14:35"},"returnParameters":{"id":5176,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5175,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5189,"src":"6073:7:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5174,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6073:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6072:9:35"},"scope":5283,"src":"6001:159:35","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":5225,"nodeType":"Block","src":"6259:246:35","statements":[{"assignments":[5199],"declarations":[{"constant":false,"id":5199,"mutability":"mutable","name":"creationCode","nameLocation":"6282:12:35","nodeType":"VariableDeclaration","scope":5225,"src":"6269:25:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5198,"name":"bytes","nodeType":"ElementaryTypeName","src":"6269:5:35","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":5205,"initialValue":{"arguments":[{"id":5202,"name":"_creationCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4941,"src":"6314:13:35","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},{"id":5203,"name":"constructorArgs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5191,"src":"6329:15:35","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":5200,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"6297:3:35","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":5201,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6301:12:35","memberName":"encodePacked","nodeType":"MemberAccess","src":"6297:16:35","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":5204,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6297:48:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"6269:76:35"},{"assignments":[5207],"declarations":[{"constant":false,"id":5207,"mutability":"mutable","name":"finalSalt","nameLocation":"6363:9:35","nodeType":"VariableDeclaration","scope":5225,"src":"6355:17:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5206,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6355:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":5211,"initialValue":{"arguments":[{"id":5209,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5193,"src":"6393:4:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":5208,"name":"_computeFinalSalt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5189,"src":"6375:17:35","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) view returns (bytes32)"}},"id":5210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6375:23:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"6355:43:35"},{"expression":{"id":5219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5212,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5196,"src":"6408:4:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"30","id":5215,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6430:1:35","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":5216,"name":"finalSalt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5207,"src":"6433:9:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":5217,"name":"creationCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5199,"src":"6444:12:35","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":5213,"name":"Create2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40839,"src":"6415:7:35","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Create2_$40839_$","typeString":"type(library Create2)"}},"id":5214,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6423:6:35","memberName":"deploy","nodeType":"MemberAccess","referencedDeclaration":40804,"src":"6415:14:35","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$","typeString":"function (uint256,bytes32,bytes memory) returns (address)"}},"id":5218,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6415:42:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6408:49:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5220,"nodeType":"ExpressionStatement","src":"6408:49:35"},{"expression":{"arguments":[{"id":5222,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5196,"src":"6493:4:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":5221,"name":"_registerPoolWithFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5169,"src":"6468:24:35","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":5223,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6468:30:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5224,"nodeType":"ExpressionStatement","src":"6468:30:35"}]},"id":5226,"implemented":true,"kind":"function","modifiers":[],"name":"_create","nameLocation":"6175:7:35","nodeType":"FunctionDefinition","parameters":{"id":5194,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5191,"mutability":"mutable","name":"constructorArgs","nameLocation":"6196:15:35","nodeType":"VariableDeclaration","scope":5226,"src":"6183:28:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":5190,"name":"bytes","nodeType":"ElementaryTypeName","src":"6183:5:35","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":5193,"mutability":"mutable","name":"salt","nameLocation":"6221:4:35","nodeType":"VariableDeclaration","scope":5226,"src":"6213:12:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5192,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6213:7:35","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6182:44:35"},"returnParameters":{"id":5197,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5196,"mutability":"mutable","name":"pool","nameLocation":"6253:4:35","nodeType":"VariableDeclaration","scope":5226,"src":"6245:12:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5195,"name":"address","nodeType":"ElementaryTypeName","src":"6245:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6244:14:35"},"scope":5283,"src":"6166:339:35","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":5261,"nodeType":"Block","src":"6821:284:35","statements":[{"expression":{"arguments":[{"id":5250,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5228,"src":"6868:4:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5251,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5232,"src":"6886:6:35","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},{"id":5252,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5234,"src":"6906:17:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"id":5253,"name":"getNewPoolPauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5891,"src":"6937:28:35","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint32_$","typeString":"function () view returns (uint32)"}},"id":5254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6937:30:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":5255,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5236,"src":"6981:17:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":5256,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5239,"src":"7012:12:35","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},{"id":5257,"name":"poolHooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5241,"src":"7038:17:35","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5258,"name":"liquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5244,"src":"7069:19:35","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":5247,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19373,"src":"6831:8:35","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$3111_$","typeString":"function () view returns (contract IVault)"}},"id":5248,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6831:10:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":5249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6842:12:35","memberName":"registerPool","nodeType":"MemberAccess","referencedDeclaration":4098,"src":"6831:23:35","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$_t_uint256_$_t_uint32_$_t_bool_$_t_struct$_PoolRoleAccounts_$4677_memory_ptr_$_t_address_$_t_struct$_LiquidityManagement_$4580_memory_ptr_$returns$__$","typeString":"function (address,struct TokenConfig memory[] memory,uint256,uint32,bool,struct PoolRoleAccounts memory,address,struct LiquidityManagement memory) external"}},"id":5259,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6831:267:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5260,"nodeType":"ExpressionStatement","src":"6831:267:35"}]},"id":5262,"implemented":true,"kind":"function","modifiers":[],"name":"_registerPoolWithVault","nameLocation":"6520:22:35","nodeType":"FunctionDefinition","parameters":{"id":5245,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5228,"mutability":"mutable","name":"pool","nameLocation":"6560:4:35","nodeType":"VariableDeclaration","scope":5262,"src":"6552:12:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5227,"name":"address","nodeType":"ElementaryTypeName","src":"6552:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5232,"mutability":"mutable","name":"tokens","nameLocation":"6595:6:35","nodeType":"VariableDeclaration","scope":5262,"src":"6574:27:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":5230,"nodeType":"UserDefinedTypeName","pathNode":{"id":5229,"name":"TokenConfig","nameLocations":["6574:11:35"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"6574:11:35"},"referencedDeclaration":4694,"src":"6574:11:35","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":5231,"nodeType":"ArrayTypeName","src":"6574:13:35","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":5234,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"6619:17:35","nodeType":"VariableDeclaration","scope":5262,"src":"6611:25:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5233,"name":"uint256","nodeType":"ElementaryTypeName","src":"6611:7:35","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5236,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"6651:17:35","nodeType":"VariableDeclaration","scope":5262,"src":"6646:22:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5235,"name":"bool","nodeType":"ElementaryTypeName","src":"6646:4:35","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":5239,"mutability":"mutable","name":"roleAccounts","nameLocation":"6702:12:35","nodeType":"VariableDeclaration","scope":5262,"src":"6678:36:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":5238,"nodeType":"UserDefinedTypeName","pathNode":{"id":5237,"name":"PoolRoleAccounts","nameLocations":["6678:16:35"],"nodeType":"IdentifierPath","referencedDeclaration":4677,"src":"6678:16:35"},"referencedDeclaration":4677,"src":"6678:16:35","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":5241,"mutability":"mutable","name":"poolHooksContract","nameLocation":"6732:17:35","nodeType":"VariableDeclaration","scope":5262,"src":"6724:25:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5240,"name":"address","nodeType":"ElementaryTypeName","src":"6724:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5244,"mutability":"mutable","name":"liquidityManagement","nameLocation":"6786:19:35","nodeType":"VariableDeclaration","scope":5262,"src":"6759:46:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":5243,"nodeType":"UserDefinedTypeName","pathNode":{"id":5242,"name":"LiquidityManagement","nameLocations":["6759:19:35"],"nodeType":"IdentifierPath","referencedDeclaration":4580,"src":"6759:19:35"},"referencedDeclaration":4580,"src":"6759:19:35","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"6542:269:35"},"returnParameters":{"id":5246,"nodeType":"ParameterList","parameters":[],"src":"6821:0:35"},"scope":5283,"src":"6511:594:35","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":5273,"nodeType":"Block","src":"7294:34:35","statements":[{"expression":{"arguments":[{"hexValue":"30","id":5270,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7319:1:35","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":5269,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7311:7:35","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5268,"name":"address","nodeType":"ElementaryTypeName","src":"7311:7:35","typeDescriptions":{}}},"id":5271,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7311:10:35","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":5267,"id":5272,"nodeType":"Return","src":"7304:17:35"}]},"documentation":{"id":5263,"nodeType":"StructuredDocumentation","src":"7111:109:35","text":"@notice A common place to retrieve a default hooks contract. Currently set to address(0) (i.e. no hooks)."},"functionSelector":"ec888061","id":5274,"implemented":true,"kind":"function","modifiers":[],"name":"getDefaultPoolHooksContract","nameLocation":"7234:27:35","nodeType":"FunctionDefinition","parameters":{"id":5264,"nodeType":"ParameterList","parameters":[],"src":"7261:2:35"},"returnParameters":{"id":5267,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5266,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5274,"src":"7285:7:35","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5265,"name":"address","nodeType":"ElementaryTypeName","src":"7285:7:35","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7284:9:35"},"scope":5283,"src":"7225:103:35","stateMutability":"pure","virtual":false,"visibility":"public"},{"body":{"id":5281,"nodeType":"Block","src":"7748:64:35","statements":[]},"documentation":{"id":5275,"nodeType":"StructuredDocumentation","src":"7334:299:35","text":" @notice Convenience function for constructing a LiquidityManagement object.\n @dev Users can call this to create a structure with all false arguments, then set the ones they need to true.\n @return liquidityManagement Liquidity management flags, all initialized to false"},"functionSelector":"193ad50f","id":5282,"implemented":true,"kind":"function","modifiers":[],"name":"getDefaultLiquidityManagement","nameLocation":"7647:29:35","nodeType":"FunctionDefinition","parameters":{"id":5276,"nodeType":"ParameterList","parameters":[],"src":"7676:2:35"},"returnParameters":{"id":5280,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5279,"mutability":"mutable","name":"liquidityManagement","nameLocation":"7727:19:35","nodeType":"VariableDeclaration","scope":5282,"src":"7700:46:35","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":5278,"nodeType":"UserDefinedTypeName","pathNode":{"id":5277,"name":"LiquidityManagement","nameLocations":["7700:19:35"],"nodeType":"IdentifierPath","referencedDeclaration":4580,"src":"7700:19:35"},"referencedDeclaration":4580,"src":"7700:19:35","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"7699:48:35"},"scope":5283,"src":"7638:174:35","stateMutability":"pure","virtual":false,"visibility":"public"}],"scope":5284,"src":"2860:4954:35","usedErrors":[234,1523,1526,4944,5825],"usedEvents":[1517,1520]}],"src":"46:7769:35"},"id":35},"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol":{"ast":{"absolutePath":"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol","exportedSymbols":{"IERC20":[40109],"IPoolInfo":[54],"IVault":[3111],"PoolConfig":[4605],"PoolInfo":[5418],"TokenInfo":[4704]},"id":5419,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":5285,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:36"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":5287,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5419,"sourceUnit":40110,"src":"72:72:36","symbolAliases":[{"foreign":{"id":5286,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"81:6:36","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":5290,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5419,"sourceUnit":4872,"src":"146:100:36","symbolAliases":[{"foreign":{"id":5288,"name":"TokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4704,"src":"155:9:36","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":5289,"name":"PoolConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4605,"src":"166:10:36","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol","file":"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol","id":5292,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5419,"sourceUnit":55,"src":"247:92:36","symbolAliases":[{"foreign":{"id":5291,"name":"IPoolInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54,"src":"256:9:36","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":5294,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5419,"sourceUnit":3112,"src":"340:81:36","symbolAliases":[{"foreign":{"id":5293,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"349:6:36","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":5296,"name":"IPoolInfo","nameLocations":["660:9:36"],"nodeType":"IdentifierPath","referencedDeclaration":54,"src":"660:9:36"},"id":5297,"nodeType":"InheritanceSpecifier","src":"660:9:36"}],"canonicalName":"PoolInfo","contractDependencies":[],"contractKind":"contract","documentation":{"id":5295,"nodeType":"StructuredDocumentation","src":"423:215:36","text":" @notice Standard implementation of the `IPoolInfo` interface.\n @dev Balancer standard pools inherit from this optional interface to provide a standard off-chain interface for\n commonly requested data."},"fullyImplemented":true,"id":5418,"linearizedBaseContracts":[5418,54],"name":"PoolInfo","nameLocation":"648:8:36","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":5300,"mutability":"immutable","name":"_vault","nameLocation":"701:6:36","nodeType":"VariableDeclaration","scope":5418,"src":"676:31:36","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":5299,"nodeType":"UserDefinedTypeName","pathNode":{"id":5298,"name":"IVault","nameLocations":["676:6:36"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"676:6:36"},"referencedDeclaration":3111,"src":"676:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"private"},{"body":{"id":5310,"nodeType":"Block","src":"740:31:36","statements":[{"expression":{"id":5308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5306,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5300,"src":"750:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5307,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5303,"src":"759:5:36","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"src":"750:14:36","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":5309,"nodeType":"ExpressionStatement","src":"750:14:36"}]},"id":5311,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":5304,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5303,"mutability":"mutable","name":"vault","nameLocation":"733:5:36","nodeType":"VariableDeclaration","scope":5311,"src":"726:12:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":5302,"nodeType":"UserDefinedTypeName","pathNode":{"id":5301,"name":"IVault","nameLocations":["726:6:36"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"726:6:36"},"referencedDeclaration":3111,"src":"726:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"}],"src":"725:14:36"},"returnParameters":{"id":5305,"nodeType":"ParameterList","parameters":[],"src":"740:0:36"},"scope":5418,"src":"714:57:36","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[14],"body":{"id":5327,"nodeType":"Block","src":"875:59:36","statements":[{"expression":{"arguments":[{"arguments":[{"id":5323,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"921:4:36","typeDescriptions":{"typeIdentifier":"t_contract$_PoolInfo_$5418","typeString":"contract PoolInfo"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PoolInfo_$5418","typeString":"contract PoolInfo"}],"id":5322,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"913:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5321,"name":"address","nodeType":"ElementaryTypeName","src":"913:7:36","typeDescriptions":{}}},"id":5324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"913:13:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5319,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5300,"src":"892:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":5320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"899:13:36","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":4145,"src":"892:20:36","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":5325,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"892:35:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"functionReturnParameters":5318,"id":5326,"nodeType":"Return","src":"885:42:36"}]},"documentation":{"id":5312,"nodeType":"StructuredDocumentation","src":"777:25:36","text":"@inheritdoc IPoolInfo"},"functionSelector":"aa6ca808","id":5328,"implemented":true,"kind":"function","modifiers":[],"name":"getTokens","nameLocation":"816:9:36","nodeType":"FunctionDefinition","parameters":{"id":5313,"nodeType":"ParameterList","parameters":[],"src":"825:2:36"},"returnParameters":{"id":5318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5317,"mutability":"mutable","name":"tokens","nameLocation":"867:6:36","nodeType":"VariableDeclaration","scope":5328,"src":"851:22:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":5315,"nodeType":"UserDefinedTypeName","pathNode":{"id":5314,"name":"IERC20","nameLocations":["851:6:36"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"851:6:36"},"referencedDeclaration":40109,"src":"851:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":5316,"nodeType":"ArrayTypeName","src":"851:8:36","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"850:24:36"},"scope":5418,"src":"807:127:36","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[32],"body":{"id":5354,"nodeType":"Block","src":"1230:62:36","statements":[{"expression":{"arguments":[{"arguments":[{"id":5350,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1279:4:36","typeDescriptions":{"typeIdentifier":"t_contract$_PoolInfo_$5418","typeString":"contract PoolInfo"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PoolInfo_$5418","typeString":"contract PoolInfo"}],"id":5349,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1271:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5348,"name":"address","nodeType":"ElementaryTypeName","src":"1271:7:36","typeDescriptions":{}}},"id":5351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1271:13:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5346,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5300,"src":"1247:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":5347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1254:16:36","memberName":"getPoolTokenInfo","nodeType":"MemberAccess","referencedDeclaration":4186,"src":"1247:23:36","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$_t_array$_t_struct$_TokenInfo_$4704_memory_ptr_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory,struct TokenInfo memory[] memory,uint256[] memory,uint256[] memory)"}},"id":5352,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1247:38:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$_t_array$_t_struct$_TokenInfo_$4704_memory_ptr_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(contract IERC20[] memory,struct TokenInfo memory[] memory,uint256[] memory,uint256[] memory)"}},"functionReturnParameters":5345,"id":5353,"nodeType":"Return","src":"1240:45:36"}]},"documentation":{"id":5329,"nodeType":"StructuredDocumentation","src":"940:25:36","text":"@inheritdoc IPoolInfo"},"functionSelector":"abb1dc44","id":5355,"implemented":true,"kind":"function","modifiers":[],"name":"getTokenInfo","nameLocation":"979:12:36","nodeType":"FunctionDefinition","parameters":{"id":5330,"nodeType":"ParameterList","parameters":[],"src":"991:2:36"},"returnParameters":{"id":5345,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5334,"mutability":"mutable","name":"tokens","nameLocation":"1070:6:36","nodeType":"VariableDeclaration","scope":5355,"src":"1054:22:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":5332,"nodeType":"UserDefinedTypeName","pathNode":{"id":5331,"name":"IERC20","nameLocations":["1054:6:36"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"1054:6:36"},"referencedDeclaration":40109,"src":"1054:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":5333,"nodeType":"ArrayTypeName","src":"1054:8:36","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":5338,"mutability":"mutable","name":"tokenInfo","nameLocation":"1109:9:36","nodeType":"VariableDeclaration","scope":5355,"src":"1090:28:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4704_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":5336,"nodeType":"UserDefinedTypeName","pathNode":{"id":5335,"name":"TokenInfo","nameLocations":["1090:9:36"],"nodeType":"IdentifierPath","referencedDeclaration":4704,"src":"1090:9:36"},"referencedDeclaration":4704,"src":"1090:9:36","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_storage_ptr","typeString":"struct TokenInfo"}},"id":5337,"nodeType":"ArrayTypeName","src":"1090:11:36","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4704_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":5341,"mutability":"mutable","name":"balancesRaw","nameLocation":"1149:11:36","nodeType":"VariableDeclaration","scope":5355,"src":"1132:28:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":5339,"name":"uint256","nodeType":"ElementaryTypeName","src":"1132:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5340,"nodeType":"ArrayTypeName","src":"1132:9:36","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":5344,"mutability":"mutable","name":"lastBalancesLiveScaled18","nameLocation":"1191:24:36","nodeType":"VariableDeclaration","scope":5355,"src":"1174:41:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":5342,"name":"uint256","nodeType":"ElementaryTypeName","src":"1174:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5343,"nodeType":"ArrayTypeName","src":"1174:9:36","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1040:185:36"},"scope":5418,"src":"970:322:36","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[39],"body":{"id":5370,"nodeType":"Block","src":"1424:68:36","statements":[{"expression":{"arguments":[{"arguments":[{"id":5366,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1479:4:36","typeDescriptions":{"typeIdentifier":"t_contract$_PoolInfo_$5418","typeString":"contract PoolInfo"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PoolInfo_$5418","typeString":"contract PoolInfo"}],"id":5365,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1471:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5364,"name":"address","nodeType":"ElementaryTypeName","src":"1471:7:36","typeDescriptions":{}}},"id":5367,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1471:13:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5362,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5300,"src":"1441:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":5363,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1448:22:36","memberName":"getCurrentLiveBalances","nodeType":"MemberAccess","referencedDeclaration":4195,"src":"1441:29:36","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) view external returns (uint256[] memory)"}},"id":5368,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1441:44:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":5361,"id":5369,"nodeType":"Return","src":"1434:51:36"}]},"documentation":{"id":5356,"nodeType":"StructuredDocumentation","src":"1298:25:36","text":"@inheritdoc IPoolInfo"},"functionSelector":"b156aa0a","id":5371,"implemented":true,"kind":"function","modifiers":[],"name":"getCurrentLiveBalances","nameLocation":"1337:22:36","nodeType":"FunctionDefinition","parameters":{"id":5357,"nodeType":"ParameterList","parameters":[],"src":"1359:2:36"},"returnParameters":{"id":5361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5360,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"1402:20:36","nodeType":"VariableDeclaration","scope":5371,"src":"1385:37:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":5358,"name":"uint256","nodeType":"ElementaryTypeName","src":"1385:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5359,"nodeType":"ArrayTypeName","src":"1385:9:36","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1384:39:36"},"scope":5418,"src":"1328:164:36","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[45],"body":{"id":5386,"nodeType":"Block","src":"1598:74:36","statements":[{"expression":{"arguments":[{"components":[{"arguments":[{"id":5381,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1658:4:36","typeDescriptions":{"typeIdentifier":"t_contract$_PoolInfo_$5418","typeString":"contract PoolInfo"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PoolInfo_$5418","typeString":"contract PoolInfo"}],"id":5380,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1650:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5379,"name":"address","nodeType":"ElementaryTypeName","src":"1650:7:36","typeDescriptions":{}}},"id":5382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1650:13:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":5383,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1649:15:36","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5377,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5300,"src":"1615:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":5378,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1622:26:36","memberName":"getStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":4333,"src":"1615:33:36","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":5384,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1615:50:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5376,"id":5385,"nodeType":"Return","src":"1608:57:36"}]},"documentation":{"id":5372,"nodeType":"StructuredDocumentation","src":"1498:25:36","text":"@inheritdoc IPoolInfo"},"functionSelector":"d335b0cf","id":5387,"implemented":true,"kind":"function","modifiers":[],"name":"getStaticSwapFeePercentage","nameLocation":"1537:26:36","nodeType":"FunctionDefinition","parameters":{"id":5373,"nodeType":"ParameterList","parameters":[],"src":"1563:2:36"},"returnParameters":{"id":5376,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5375,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5387,"src":"1589:7:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5374,"name":"uint256","nodeType":"ElementaryTypeName","src":"1589:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1588:9:36"},"scope":5418,"src":"1528:144:36","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[53],"body":{"id":5416,"nodeType":"Block","src":"1870:238:36","statements":[{"assignments":[5397],"declarations":[{"constant":false,"id":5397,"mutability":"mutable","name":"poolConfig","nameLocation":"1898:10:36","nodeType":"VariableDeclaration","scope":5416,"src":"1880:28:36","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig"},"typeName":{"id":5396,"nodeType":"UserDefinedTypeName","pathNode":{"id":5395,"name":"PoolConfig","nameLocations":["1880:10:36"],"nodeType":"IdentifierPath","referencedDeclaration":4605,"src":"1880:10:36"},"referencedDeclaration":4605,"src":"1880:10:36","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_storage_ptr","typeString":"struct PoolConfig"}},"visibility":"internal"}],"id":5405,"initialValue":{"arguments":[{"arguments":[{"id":5402,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1940:4:36","typeDescriptions":{"typeIdentifier":"t_contract$_PoolInfo_$5418","typeString":"contract PoolInfo"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PoolInfo_$5418","typeString":"contract PoolInfo"}],"id":5401,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1932:7:36","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5400,"name":"address","nodeType":"ElementaryTypeName","src":"1932:7:36","typeDescriptions":{}}},"id":5403,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1932:13:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5398,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5300,"src":"1911:6:36","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":5399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1918:13:36","memberName":"getPoolConfig","nodeType":"MemberAccess","referencedDeclaration":4204,"src":"1911:20:36","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_PoolConfig_$4605_memory_ptr_$","typeString":"function (address) view external returns (struct PoolConfig memory)"}},"id":5404,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1911:35:36","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig memory"}},"nodeType":"VariableDeclarationStatement","src":"1880:66:36"},{"expression":{"id":5409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5406,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5391,"src":"1957:26:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":5407,"name":"poolConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5397,"src":"1986:10:36","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig memory"}},"id":5408,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1997:26:36","memberName":"aggregateSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":4590,"src":"1986:37:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1957:66:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5410,"nodeType":"ExpressionStatement","src":"1957:66:36"},{"expression":{"id":5414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5411,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5393,"src":"2033:27:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":5412,"name":"poolConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5397,"src":"2063:10:36","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig memory"}},"id":5413,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2074:27:36","memberName":"aggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":4592,"src":"2063:38:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2033:68:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5415,"nodeType":"ExpressionStatement","src":"2033:68:36"}]},"documentation":{"id":5388,"nodeType":"StructuredDocumentation","src":"1678:25:36","text":"@inheritdoc IPoolInfo"},"functionSelector":"81fa807c","id":5417,"implemented":true,"kind":"function","modifiers":[],"name":"getAggregateFeePercentages","nameLocation":"1717:26:36","nodeType":"FunctionDefinition","parameters":{"id":5389,"nodeType":"ParameterList","parameters":[],"src":"1743:2:36"},"returnParameters":{"id":5394,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5391,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"1801:26:36","nodeType":"VariableDeclaration","scope":5417,"src":"1793:34:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5390,"name":"uint256","nodeType":"ElementaryTypeName","src":"1793:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5393,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"1837:27:36","nodeType":"VariableDeclaration","scope":5417,"src":"1829:35:36","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5392,"name":"uint256","nodeType":"ElementaryTypeName","src":"1829:7:36","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1792:73:36"},"scope":5418,"src":"1708:400:36","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":5419,"src":"639:1471:36","usedErrors":[],"usedEvents":[]}],"src":"46:2065:36"},"id":36},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","exportedSymbols":{"Authentication":[5498],"IAuthentication":[243]},"id":5499,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":5420,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:37"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol","id":5422,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5499,"sourceUnit":244,"src":"72:116:37","symbolAliases":[{"foreign":{"id":5421,"name":"IAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":243,"src":"81:15:37","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":5424,"name":"IAuthentication","nameLocations":["625:15:37"],"nodeType":"IdentifierPath","referencedDeclaration":243,"src":"625:15:37"},"id":5425,"nodeType":"InheritanceSpecifier","src":"625:15:37"}],"canonicalName":"Authentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":5423,"nodeType":"StructuredDocumentation","src":"190:398:37","text":" @notice Building block for performing access control on external functions.\n @dev This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be\n applied to external functions to make them only callable by authorized accounts.\n Derived contracts must implement the `_canPerform` function, which holds the actual access control logic."},"fullyImplemented":false,"id":5498,"linearizedBaseContracts":[5498,243],"name":"Authentication","nameLocation":"607:14:37","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":5427,"mutability":"immutable","name":"_actionIdDisambiguator","nameLocation":"673:22:37","nodeType":"VariableDeclaration","scope":5498,"src":"647:48:37","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5426,"name":"bytes32","nodeType":"ElementaryTypeName","src":"647:7:37","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"body":{"id":5437,"nodeType":"Block","src":"1337:63:37","statements":[{"expression":{"id":5435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5433,"name":"_actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5427,"src":"1347:22:37","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5434,"name":"actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5430,"src":"1372:21:37","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1347:46:37","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":5436,"nodeType":"ExpressionStatement","src":"1347:46:37"}]},"documentation":{"id":5428,"nodeType":"StructuredDocumentation","src":"702:587:37","text":" @dev The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in\n multi-contract systems.\n There are two main uses for it:\n - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers\n unique. The contract's own address is a good option.\n - if the contract belongs to a family that shares action identifiers for the same functions, an identifier\n shared by the entire family (and no other contract) should be used instead."},"id":5438,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":5431,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5430,"mutability":"mutable","name":"actionIdDisambiguator","nameLocation":"1314:21:37","nodeType":"VariableDeclaration","scope":5438,"src":"1306:29:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5429,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1306:7:37","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1305:31:37"},"returnParameters":{"id":5432,"nodeType":"ParameterList","parameters":[],"src":"1337:0:37"},"scope":5498,"src":"1294:106:37","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":5445,"nodeType":"Block","src":"1549:49:37","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":5441,"name":"_authenticateCaller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5469,"src":"1559:19:37","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":5442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1559:21:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5443,"nodeType":"ExpressionStatement","src":"1559:21:37"},{"id":5444,"nodeType":"PlaceholderStatement","src":"1590:1:37"}]},"documentation":{"id":5439,"nodeType":"StructuredDocumentation","src":"1406:114:37","text":"@dev Reverts unless the caller is allowed to call this function. Should only be applied to external functions."},"id":5446,"name":"authenticate","nameLocation":"1534:12:37","nodeType":"ModifierDefinition","parameters":{"id":5440,"nodeType":"ParameterList","parameters":[],"src":"1546:2:37"},"src":"1525:73:37","virtual":false,"visibility":"internal"},{"body":{"id":5468,"nodeType":"Block","src":"1733:156:37","statements":[{"assignments":[5451],"declarations":[{"constant":false,"id":5451,"mutability":"mutable","name":"actionId","nameLocation":"1751:8:37","nodeType":"VariableDeclaration","scope":5468,"src":"1743:16:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5450,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1743:7:37","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":5456,"initialValue":{"arguments":[{"expression":{"id":5453,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1774:3:37","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1778:3:37","memberName":"sig","nodeType":"MemberAccess","src":"1774:7:37","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":5452,"name":"getActionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5487,"src":"1762:11:37","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view returns (bytes32)"}},"id":5455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1762:20:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"1743:39:37"},{"condition":{"id":5462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1797:34:37","subExpression":{"arguments":[{"id":5458,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5451,"src":"1810:8:37","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":5459,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1820:3:37","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5460,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1824:6:37","memberName":"sender","nodeType":"MemberAccess","src":"1820:10:37","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":5457,"name":"_canPerform","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5497,"src":"1798:11:37","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":5461,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1798:33:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5467,"nodeType":"IfStatement","src":"1793:90:37","trueBody":{"id":5466,"nodeType":"Block","src":"1833:50:37","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5463,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":234,"src":"1854:16:37","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5464,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1854:18:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5465,"nodeType":"RevertStatement","src":"1847:25:37"}]}}]},"documentation":{"id":5447,"nodeType":"StructuredDocumentation","src":"1604:79:37","text":"@dev Reverts unless the caller is allowed to call the entry point function."},"id":5469,"implemented":true,"kind":"function","modifiers":[],"name":"_authenticateCaller","nameLocation":"1697:19:37","nodeType":"FunctionDefinition","parameters":{"id":5448,"nodeType":"ParameterList","parameters":[],"src":"1716:2:37"},"returnParameters":{"id":5449,"nodeType":"ParameterList","parameters":[],"src":"1733:0:37"},"scope":5498,"src":"1688:201:37","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[242],"body":{"id":5486,"nodeType":"Block","src":"2008:353:37","statements":[{"expression":{"arguments":[{"arguments":[{"id":5481,"name":"_actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5427,"src":"2320:22:37","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":5482,"name":"selector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5472,"src":"2344:8:37","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":5479,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2303:3:37","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":5480,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2307:12:37","memberName":"encodePacked","nodeType":"MemberAccess","src":"2303:16:37","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":5483,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2303:50:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":5478,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2293:9:37","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":5484,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2293:61:37","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":5477,"id":5485,"nodeType":"Return","src":"2286:68:37"}]},"documentation":{"id":5470,"nodeType":"StructuredDocumentation","src":"1895:31:37","text":"@inheritdoc IAuthentication"},"functionSelector":"851c1bb3","id":5487,"implemented":true,"kind":"function","modifiers":[],"name":"getActionId","nameLocation":"1940:11:37","nodeType":"FunctionDefinition","overrides":{"id":5474,"nodeType":"OverrideSpecifier","overrides":[],"src":"1981:8:37"},"parameters":{"id":5473,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5472,"mutability":"mutable","name":"selector","nameLocation":"1959:8:37","nodeType":"VariableDeclaration","scope":5487,"src":"1952:15:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":5471,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1952:6:37","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1951:17:37"},"returnParameters":{"id":5477,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5476,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5487,"src":"1999:7:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5475,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1999:7:37","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1998:9:37"},"scope":5498,"src":"1931:430:37","stateMutability":"view","virtual":false,"visibility":"public"},{"documentation":{"id":5488,"nodeType":"StructuredDocumentation","src":"2367:304:37","text":" @dev Derived contracts must implement this function to perform the actual access control logic.\n @param actionId The action identifier associated with an external function\n @param user The account performing the action\n @return success True if the action is permitted"},"id":5497,"implemented":false,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"2685:11:37","nodeType":"FunctionDefinition","parameters":{"id":5493,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5490,"mutability":"mutable","name":"actionId","nameLocation":"2705:8:37","nodeType":"VariableDeclaration","scope":5497,"src":"2697:16:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5489,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2697:7:37","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5492,"mutability":"mutable","name":"user","nameLocation":"2723:4:37","nodeType":"VariableDeclaration","scope":5497,"src":"2715:12:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5491,"name":"address","nodeType":"ElementaryTypeName","src":"2715:7:37","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2696:32:37"},"returnParameters":{"id":5496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5495,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5497,"src":"2760:4:37","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5494,"name":"bool","nodeType":"ElementaryTypeName","src":"2760:4:37","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2759:6:37"},"scope":5498,"src":"2676:90:37","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":5499,"src":"589:2179:37","usedErrors":[234],"usedEvents":[]}],"src":"46:2723:37"},"id":37},"@balancer-labs/v3-solidity-utils/contracts/helpers/BufferHelpers.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/BufferHelpers.sol","exportedSymbols":{"BufferHelpers":[5610],"IERC4626":[39833],"PackedTokenBalance":[6344],"SafeCast":[44983]},"id":5611,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":5500,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:38"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":5502,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5611,"sourceUnit":39834,"src":"72:75:38","symbolAliases":[{"foreign":{"id":5501,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39833,"src":"81:8:38","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":5504,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5611,"sourceUnit":44984,"src":"148:75:38","symbolAliases":[{"foreign":{"id":5503,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44983,"src":"157:8:38","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","file":"./PackedTokenBalance.sol","id":5506,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5611,"sourceUnit":6345,"src":"225:62:38","symbolAliases":[{"foreign":{"id":5505,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6344,"src":"234:18:38","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"BufferHelpers","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":5610,"linearizedBaseContracts":[5610],"name":"BufferHelpers","nameLocation":"297:13:38","nodeType":"ContractDefinition","nodes":[{"global":false,"id":5509,"libraryName":{"id":5507,"name":"PackedTokenBalance","nameLocations":["323:18:38"],"nodeType":"IdentifierPath","referencedDeclaration":6344,"src":"323:18:38"},"nodeType":"UsingForDirective","src":"317:37:38","typeName":{"id":5508,"name":"bytes32","nodeType":"ElementaryTypeName","src":"346:7:38","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"global":false,"id":5511,"libraryName":{"id":5510,"name":"SafeCast","nameLocations":["365:8:38"],"nodeType":"IdentifierPath","referencedDeclaration":44983,"src":"365:8:38"},"nodeType":"UsingForDirective","src":"359:21:38"},{"body":{"id":5559,"nodeType":"Block","src":"1759:785:38","statements":[{"assignments":[5523],"declarations":[{"constant":false,"id":5523,"mutability":"mutable","name":"underlyingBalance","nameLocation":"1776:17:38","nodeType":"VariableDeclaration","scope":5559,"src":"1769:24:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5522,"name":"int256","nodeType":"ElementaryTypeName","src":"1769:6:38","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5529,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5524,"name":"bufferBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5514,"src":"1796:13:38","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":5525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1810:13:38","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":6222,"src":"1796:27:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":5526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1796:29:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1826:8:38","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":44982,"src":"1796:38:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":5528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1796:40:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"1769:67:38"},{"assignments":[5531],"declarations":[{"constant":false,"id":5531,"mutability":"mutable","name":"wrappedBalanceAsUnderlying","nameLocation":"1854:26:38","nodeType":"VariableDeclaration","scope":5559,"src":"1847:33:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5530,"name":"int256","nodeType":"ElementaryTypeName","src":"1847:6:38","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5533,"initialValue":{"hexValue":"30","id":5532,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1883:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1847:37:38"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5534,"name":"bufferBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5514,"src":"1898:13:38","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":5535,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1912:17:38","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":6239,"src":"1898:31:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":5536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1898:33:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":5537,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1934:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1898:37:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5551,"nodeType":"IfStatement","src":"1894:474:38","trueBody":{"id":5550,"nodeType":"Block","src":"1937:431:38","statements":[{"expression":{"id":5548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5539,"name":"wrappedBalanceAsUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5531,"src":"2258:26:38","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5542,"name":"bufferBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5514,"src":"2312:13:38","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":5543,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2326:17:38","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":6239,"src":"2312:31:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":5544,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2312:33:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":5540,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5517,"src":"2287:12:38","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"id":5541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2300:11:38","memberName":"previewMint","nodeType":"MemberAccess","referencedDeclaration":39766,"src":"2287:24:38","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view external returns (uint256)"}},"id":5545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2287:59:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2347:8:38","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":44982,"src":"2287:68:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":5547,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2287:70:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"2258:99:38","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5549,"nodeType":"ExpressionStatement","src":"2258:99:38"}]}},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5552,"name":"underlyingBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5523,"src":"2486:17:38","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":5553,"name":"wrappedBalanceAsUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5531,"src":"2506:26:38","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"2486:46:38","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5555,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2485:48:38","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":5556,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2536:1:38","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"2485:52:38","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":5521,"id":5558,"nodeType":"Return","src":"2478:59:38"}]},"documentation":{"id":5512,"nodeType":"StructuredDocumentation","src":"386:1253:38","text":" @notice Returns the imbalance of a buffer in terms of the underlying asset.\n @dev The imbalance refers to the difference between the buffer's underlying asset balance and its wrapped asset\n balance, both expressed in terms of the underlying asset. A positive imbalance means the buffer holds more\n underlying assets than wrapped assets, indicating that the excess underlying should be wrapped to restore\n balance. Conversely, a negative imbalance means the buffer has more wrapped assets than underlying assets, so\n during a wrap operation, fewer underlying tokens need to be wrapped, and the surplus wrapped tokens can be\n returned to the caller.\n For instance, consider the following scenario:\n - buffer balances: 2 wrapped and 10 underlying\n - wrapped rate: 2\n - normalized buffer balances: 4 wrapped as underlying (2 wrapped * rate) and 10 underlying\n - underlying token imbalance = (10 - 4) / 2 = 3 underlying\n We need to wrap 3 underlying tokens to rebalance the buffer.\n - 3 underlying = 1.5 wrapped\n - final balances: 3.5 wrapped (2 existing + 1.5 new) and 7 underlying (10 existing - 3)\n These balances are equal value, given the rate."},"id":5560,"implemented":true,"kind":"function","modifiers":[],"name":"getBufferUnderlyingImbalance","nameLocation":"1653:28:38","nodeType":"FunctionDefinition","parameters":{"id":5518,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5514,"mutability":"mutable","name":"bufferBalance","nameLocation":"1690:13:38","nodeType":"VariableDeclaration","scope":5560,"src":"1682:21:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5513,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1682:7:38","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5517,"mutability":"mutable","name":"wrappedToken","nameLocation":"1714:12:38","nodeType":"VariableDeclaration","scope":5560,"src":"1705:21:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":5516,"nodeType":"UserDefinedTypeName","pathNode":{"id":5515,"name":"IERC4626","nameLocations":["1705:8:38"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"1705:8:38"},"referencedDeclaration":39833,"src":"1705:8:38","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"1681:46:38"},"returnParameters":{"id":5521,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5520,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5560,"src":"1751:6:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5519,"name":"int256","nodeType":"ElementaryTypeName","src":"1751:6:38","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1750:8:38"},"scope":5610,"src":"1644:900:38","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":5608,"nodeType":"Block","src":"3903:785:38","statements":[{"assignments":[5572],"declarations":[{"constant":false,"id":5572,"mutability":"mutable","name":"wrappedBalance","nameLocation":"3920:14:38","nodeType":"VariableDeclaration","scope":5608,"src":"3913:21:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5571,"name":"int256","nodeType":"ElementaryTypeName","src":"3913:6:38","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5578,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5573,"name":"bufferBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5563,"src":"3937:13:38","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":5574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3951:17:38","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":6239,"src":"3937:31:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":5575,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3937:33:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3971:8:38","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":44982,"src":"3937:42:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":5577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3937:44:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"3913:68:38"},{"assignments":[5580],"declarations":[{"constant":false,"id":5580,"mutability":"mutable","name":"underlyingBalanceAsWrapped","nameLocation":"3999:26:38","nodeType":"VariableDeclaration","scope":5608,"src":"3992:33:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5579,"name":"int256","nodeType":"ElementaryTypeName","src":"3992:6:38","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":5582,"initialValue":{"hexValue":"30","id":5581,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4028:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3992:37:38"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5583,"name":"bufferBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5563,"src":"4043:13:38","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":5584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4057:13:38","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":6222,"src":"4043:27:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":5585,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4043:29:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":5586,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4075:1:38","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4043:33:38","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5600,"nodeType":"IfStatement","src":"4039:476:38","trueBody":{"id":5599,"nodeType":"Block","src":"4078:437:38","statements":[{"expression":{"id":5597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5588,"name":"underlyingBalanceAsWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5580,"src":"4405:26:38","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5591,"name":"bufferBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5563,"src":"4463:13:38","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":5592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4477:13:38","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":6222,"src":"4463:27:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":5593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4463:29:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":5589,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5566,"src":"4434:12:38","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"id":5590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4447:15:38","memberName":"previewWithdraw","nodeType":"MemberAccess","referencedDeclaration":39792,"src":"4434:28:38","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view external returns (uint256)"}},"id":5594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4434:59:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4494:8:38","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":44982,"src":"4434:68:38","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":5596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4434:70:38","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"4405:99:38","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":5598,"nodeType":"ExpressionStatement","src":"4405:99:38"}]}},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":5603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5601,"name":"wrappedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5572,"src":"4633:14:38","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":5602,"name":"underlyingBalanceAsWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5580,"src":"4650:26:38","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"4633:43:38","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":5604,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4632:45:38","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":5605,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4680:1:38","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"4632:49:38","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":5570,"id":5607,"nodeType":"Return","src":"4625:56:38"}]},"documentation":{"id":5561,"nodeType":"StructuredDocumentation","src":"2550:1236:38","text":" @notice Returns the imbalance of a buffer in terms of the wrapped asset.\n @dev The imbalance refers to the difference between the buffer's underlying asset balance and its wrapped asset\n balance, both expressed in terms of the wrapped asset. A positive imbalance means the buffer holds more\n wrapped assets than underlying assets, indicating that the excess wrapped should be unwrapped to restore\n balance. Conversely, a negative imbalance means the buffer has more underlying assets than wrapped assets, so\n during an unwrap operation, fewer wrapped tokens need to be unwrapped, and the surplus underlying tokens can be\n returned to the caller.\n For instance, consider the following scenario:\n - buffer balances: 10 wrapped and 4 underlying\n - wrapped rate: 2\n - normalized buffer balances: 10 wrapped and 2 underlying as wrapped (2 underlying / rate)\n - imbalance of wrapped = (10 - 2) / 2 = 4 wrapped\n We need to unwrap 4 wrapped tokens to rebalance the buffer.\n - 4 wrapped = 8 underlying\n - final balances: 6 wrapped (10 existing - 4) and 12 underlying (4 existing + 8 new)\n These balances are equal value, given the rate."},"id":5609,"implemented":true,"kind":"function","modifiers":[],"name":"getBufferWrappedImbalance","nameLocation":"3800:25:38","nodeType":"FunctionDefinition","parameters":{"id":5567,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5563,"mutability":"mutable","name":"bufferBalance","nameLocation":"3834:13:38","nodeType":"VariableDeclaration","scope":5609,"src":"3826:21:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5562,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3826:7:38","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5566,"mutability":"mutable","name":"wrappedToken","nameLocation":"3858:12:38","nodeType":"VariableDeclaration","scope":5609,"src":"3849:21:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":5565,"nodeType":"UserDefinedTypeName","pathNode":{"id":5564,"name":"IERC4626","nameLocations":["3849:8:38"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"3849:8:38"},"referencedDeclaration":39833,"src":"3849:8:38","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"3825:46:38"},"returnParameters":{"id":5570,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5569,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5609,"src":"3895:6:38","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":5568,"name":"int256","nodeType":"ElementaryTypeName","src":"3895:6:38","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"3894:8:38"},"scope":5610,"src":"3791:897:38","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":5611,"src":"289:4401:38","usedErrors":[],"usedEvents":[]}],"src":"46:4645:38"},"id":38},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol","exportedSymbols":{"CastingHelpers":[5642],"IERC20":[40109]},"id":5643,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":5612,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:39"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":5614,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5643,"sourceUnit":40110,"src":"72:72:39","symbolAliases":[{"foreign":{"id":5613,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"81:6:39","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"CastingHelpers","contractDependencies":[],"contractKind":"library","documentation":{"id":5615,"nodeType":"StructuredDocumentation","src":"146:71:39","text":"@notice Library of helper functions related to typecasting arrays."},"fullyImplemented":true,"id":5642,"linearizedBaseContracts":[5642],"name":"CastingHelpers","nameLocation":"225:14:39","nodeType":"ContractDefinition","nodes":[{"body":{"id":5627,"nodeType":"Block","src":"410:140:39","statements":[{"AST":{"nativeSrc":"501:43:39","nodeType":"YulBlock","src":"501:43:39","statements":[{"nativeSrc":"515:19:39","nodeType":"YulAssignment","src":"515:19:39","value":{"name":"addresses","nativeSrc":"525:9:39","nodeType":"YulIdentifier","src":"525:9:39"},"variableNames":[{"name":"tokens","nativeSrc":"515:6:39","nodeType":"YulIdentifier","src":"515:6:39"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":5619,"isOffset":false,"isSlot":false,"src":"525:9:39","valueSize":1},{"declaration":5624,"isOffset":false,"isSlot":false,"src":"515:6:39","valueSize":1}],"flags":["memory-safe"],"id":5626,"nodeType":"InlineAssembly","src":"476:68:39"}]},"documentation":{"id":5616,"nodeType":"StructuredDocumentation","src":"246:66:39","text":"@dev Returns a native array of addresses as an IERC20[] array."},"id":5628,"implemented":true,"kind":"function","modifiers":[],"name":"asIERC20","nameLocation":"326:8:39","nodeType":"FunctionDefinition","parameters":{"id":5620,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5619,"mutability":"mutable","name":"addresses","nameLocation":"352:9:39","nodeType":"VariableDeclaration","scope":5628,"src":"335:26:39","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":5617,"name":"address","nodeType":"ElementaryTypeName","src":"335:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5618,"nodeType":"ArrayTypeName","src":"335:9:39","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"334:28:39"},"returnParameters":{"id":5625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5624,"mutability":"mutable","name":"tokens","nameLocation":"402:6:39","nodeType":"VariableDeclaration","scope":5628,"src":"386:22:39","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":5622,"nodeType":"UserDefinedTypeName","pathNode":{"id":5621,"name":"IERC20","nameLocations":["386:6:39"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"386:6:39"},"referencedDeclaration":40109,"src":"386:6:39","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":5623,"nodeType":"ArrayTypeName","src":"386:8:39","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"385:24:39"},"scope":5642,"src":"317:233:39","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5640,"nodeType":"Block","src":"712:140:39","statements":[{"AST":{"nativeSrc":"803:43:39","nodeType":"YulBlock","src":"803:43:39","statements":[{"nativeSrc":"817:19:39","nodeType":"YulAssignment","src":"817:19:39","value":{"name":"tokens","nativeSrc":"830:6:39","nodeType":"YulIdentifier","src":"830:6:39"},"variableNames":[{"name":"addresses","nativeSrc":"817:9:39","nodeType":"YulIdentifier","src":"817:9:39"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":5637,"isOffset":false,"isSlot":false,"src":"817:9:39","valueSize":1},{"declaration":5633,"isOffset":false,"isSlot":false,"src":"830:6:39","valueSize":1}],"flags":["memory-safe"],"id":5639,"nodeType":"InlineAssembly","src":"778:68:39"}]},"documentation":{"id":5629,"nodeType":"StructuredDocumentation","src":"556:57:39","text":"@dev Returns an IERC20[] array as an address[] array."},"id":5641,"implemented":true,"kind":"function","modifiers":[],"name":"asAddress","nameLocation":"627:9:39","nodeType":"FunctionDefinition","parameters":{"id":5634,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5633,"mutability":"mutable","name":"tokens","nameLocation":"653:6:39","nodeType":"VariableDeclaration","scope":5641,"src":"637:22:39","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":5631,"nodeType":"UserDefinedTypeName","pathNode":{"id":5630,"name":"IERC20","nameLocations":["637:6:39"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"637:6:39"},"referencedDeclaration":40109,"src":"637:6:39","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":5632,"nodeType":"ArrayTypeName","src":"637:8:39","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"636:24:39"},"returnParameters":{"id":5638,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5637,"mutability":"mutable","name":"addresses","nameLocation":"701:9:39","nodeType":"VariableDeclaration","scope":5641,"src":"684:26:39","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":5635,"name":"address","nodeType":"ElementaryTypeName","src":"684:7:39","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":5636,"nodeType":"ArrayTypeName","src":"684:9:39","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"683:28:39"},"scope":5642,"src":"618:234:39","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":5643,"src":"217:637:39","usedErrors":[],"usedEvents":[]}],"src":"46:809:39"},"id":39},"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol","exportedSymbols":{"Authentication":[5498],"CommonAuthentication":[5786],"IVault":[3111]},"id":5787,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":5644,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:40"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":5646,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5787,"sourceUnit":3112,"src":"72:81:40","symbolAliases":[{"foreign":{"id":5645,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"81:6:40","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","file":"./Authentication.sol","id":5648,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":5787,"sourceUnit":5499,"src":"155:54:40","symbolAliases":[{"foreign":{"id":5647,"name":"Authentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5498,"src":"164:14:40","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":5650,"name":"Authentication","nameLocations":["342:14:40"],"nodeType":"IdentifierPath","referencedDeclaration":5498,"src":"342:14:40"},"id":5651,"nodeType":"InheritanceSpecifier","src":"342:14:40"}],"canonicalName":"CommonAuthentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":5649,"nodeType":"StructuredDocumentation","src":"211:89:40","text":"@dev Base contract for performing access control on external functions within pools."},"fullyImplemented":true,"id":5786,"linearizedBaseContracts":[5786,5498,243],"name":"CommonAuthentication","nameLocation":"318:20:40","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":5654,"mutability":"immutable","name":"_vault","nameLocation":"388:6:40","nodeType":"VariableDeclaration","scope":5786,"src":"363:31:40","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":5653,"nodeType":"UserDefinedTypeName","pathNode":{"id":5652,"name":"IVault","nameLocations":["363:6:40"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"363:6:40"},"referencedDeclaration":3111,"src":"363:6:40","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"private"},{"body":{"id":5673,"nodeType":"Block","src":"651:161:40","statements":[{"assignments":[5660],"declarations":[{"constant":false,"id":5660,"mutability":"mutable","name":"roleAddress","nameLocation":"669:11:40","nodeType":"VariableDeclaration","scope":5673,"src":"661:19:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5659,"name":"address","nodeType":"ElementaryTypeName","src":"661:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":5666,"initialValue":{"expression":{"arguments":[{"id":5663,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5657,"src":"710:4:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":5661,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5654,"src":"683:6:40","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":5662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"690:19:40","memberName":"getPoolRoleAccounts","nodeType":"MemberAccess","referencedDeclaration":4342,"src":"683:26:40","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_PoolRoleAccounts_$4677_memory_ptr_$","typeString":"function (address) view external returns (struct PoolRoleAccounts memory)"}},"id":5664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"683:32:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"id":5665,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"716:14:40","memberName":"swapFeeManager","nodeType":"MemberAccess","referencedDeclaration":4674,"src":"683:47:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"661:69:40"},{"expression":{"arguments":[{"id":5668,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5657,"src":"776:4:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5669,"name":"roleAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5660,"src":"782:11:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":5667,"name":"_ensureAuthenticatedByExclusiveRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5785,"src":"740:35:40","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) view"}},"id":5670,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"740:54:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":5671,"nodeType":"ExpressionStatement","src":"740:54:40"},{"id":5672,"nodeType":"PlaceholderStatement","src":"804:1:40"}]},"documentation":{"id":5655,"nodeType":"StructuredDocumentation","src":"500:92:40","text":"@notice Caller must be the swapFeeManager, if defined. Otherwise, default to governance."},"id":5674,"name":"onlySwapFeeManagerOrGovernance","nameLocation":"606:30:40","nodeType":"ModifierDefinition","parameters":{"id":5658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5657,"mutability":"mutable","name":"pool","nameLocation":"645:4:40","nodeType":"VariableDeclaration","scope":5674,"src":"637:12:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5656,"name":"address","nodeType":"ElementaryTypeName","src":"637:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"636:14:40"},"src":"597:215:40","virtual":false,"visibility":"internal"},{"body":{"id":5689,"nodeType":"Block","src":"913:31:40","statements":[{"expression":{"id":5687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5685,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5654,"src":"923:6:40","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5686,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5677,"src":"932:5:40","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"src":"923:14:40","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":5688,"nodeType":"ExpressionStatement","src":"923:14:40"}]},"id":5690,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":5682,"name":"actionIdDisambiguator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5679,"src":"890:21:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":5683,"kind":"baseConstructorSpecifier","modifierName":{"id":5681,"name":"Authentication","nameLocations":["875:14:40"],"nodeType":"IdentifierPath","referencedDeclaration":5498,"src":"875:14:40"},"nodeType":"ModifierInvocation","src":"875:37:40"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":5680,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5677,"mutability":"mutable","name":"vault","nameLocation":"837:5:40","nodeType":"VariableDeclaration","scope":5690,"src":"830:12:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":5676,"nodeType":"UserDefinedTypeName","pathNode":{"id":5675,"name":"IVault","nameLocations":["830:6:40"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"830:6:40"},"referencedDeclaration":3111,"src":"830:6:40","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":5679,"mutability":"mutable","name":"actionIdDisambiguator","nameLocation":"852:21:40","nodeType":"VariableDeclaration","scope":5690,"src":"844:29:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5678,"name":"bytes32","nodeType":"ElementaryTypeName","src":"844:7:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"829:45:40"},"returnParameters":{"id":5684,"nodeType":"ParameterList","parameters":[],"src":"913:0:40"},"scope":5786,"src":"818:126:40","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":5698,"nodeType":"Block","src":"1002:30:40","statements":[{"expression":{"id":5696,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5654,"src":"1019:6:40","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"functionReturnParameters":5695,"id":5697,"nodeType":"Return","src":"1012:13:40"}]},"id":5699,"implemented":true,"kind":"function","modifiers":[],"name":"_getVault","nameLocation":"959:9:40","nodeType":"FunctionDefinition","parameters":{"id":5691,"nodeType":"ParameterList","parameters":[],"src":"968:2:40"},"returnParameters":{"id":5695,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5694,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5699,"src":"994:6:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":5693,"nodeType":"UserDefinedTypeName","pathNode":{"id":5692,"name":"IVault","nameLocations":["994:6:40"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"994:6:40"},"referencedDeclaration":3111,"src":"994:6:40","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"}],"src":"993:8:40"},"scope":5786,"src":"950:82:40","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[5497],"body":{"id":5721,"nodeType":"Block","src":"1214:88:40","statements":[{"expression":{"arguments":[{"id":5713,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5701,"src":"1265:8:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":5714,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5703,"src":"1275:4:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":5717,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1289:4:40","typeDescriptions":{"typeIdentifier":"t_contract$_CommonAuthentication_$5786","typeString":"contract CommonAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CommonAuthentication_$5786","typeString":"contract CommonAuthentication"}],"id":5716,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1281:7:40","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5715,"name":"address","nodeType":"ElementaryTypeName","src":"1281:7:40","typeDescriptions":{}}},"id":5718,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1281:13:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5709,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5654,"src":"1231:6:40","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":5710,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1238:13:40","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":4425,"src":"1231:20:40","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$1455_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":5711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1231:22:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"}},"id":5712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1254:10:40","memberName":"canPerform","nodeType":"MemberAccess","referencedDeclaration":1454,"src":"1231:33:40","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view external returns (bool)"}},"id":5719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1231:64:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":5708,"id":5720,"nodeType":"Return","src":"1224:71:40"}]},"id":5722,"implemented":true,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"1132:11:40","nodeType":"FunctionDefinition","overrides":{"id":5705,"nodeType":"OverrideSpecifier","overrides":[],"src":"1190:8:40"},"parameters":{"id":5704,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5701,"mutability":"mutable","name":"actionId","nameLocation":"1152:8:40","nodeType":"VariableDeclaration","scope":5722,"src":"1144:16:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5700,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1144:7:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5703,"mutability":"mutable","name":"user","nameLocation":"1170:4:40","nodeType":"VariableDeclaration","scope":5722,"src":"1162:12:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5702,"name":"address","nodeType":"ElementaryTypeName","src":"1162:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1143:32:40"},"returnParameters":{"id":5708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5707,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5722,"src":"1208:4:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5706,"name":"bool","nodeType":"ElementaryTypeName","src":"1208:4:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1207:6:40"},"scope":5786,"src":"1123:179:40","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":5742,"nodeType":"Block","src":"1408:83:40","statements":[{"expression":{"arguments":[{"id":5737,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5724,"src":"1459:8:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":5738,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5726,"src":"1469:7:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5739,"name":"where","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5728,"src":"1478:5:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":5733,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5654,"src":"1425:6:40","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":5734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1432:13:40","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":4425,"src":"1425:20:40","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$1455_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":5735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1425:22:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"}},"id":5736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1448:10:40","memberName":"canPerform","nodeType":"MemberAccess","referencedDeclaration":1454,"src":"1425:33:40","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view external returns (bool)"}},"id":5740,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1425:59:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":5732,"id":5741,"nodeType":"Return","src":"1418:66:40"}]},"id":5743,"implemented":true,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"1317:11:40","nodeType":"FunctionDefinition","parameters":{"id":5729,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5724,"mutability":"mutable","name":"actionId","nameLocation":"1337:8:40","nodeType":"VariableDeclaration","scope":5743,"src":"1329:16:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":5723,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1329:7:40","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":5726,"mutability":"mutable","name":"account","nameLocation":"1355:7:40","nodeType":"VariableDeclaration","scope":5743,"src":"1347:15:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5725,"name":"address","nodeType":"ElementaryTypeName","src":"1347:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5728,"mutability":"mutable","name":"where","nameLocation":"1372:5:40","nodeType":"VariableDeclaration","scope":5743,"src":"1364:13:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5727,"name":"address","nodeType":"ElementaryTypeName","src":"1364:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1328:50:40"},"returnParameters":{"id":5732,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5731,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5743,"src":"1402:4:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5730,"name":"bool","nodeType":"ElementaryTypeName","src":"1402:4:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1401:6:40"},"scope":5786,"src":"1308:183:40","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":5784,"nodeType":"Block","src":"1697:338:40","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5751,"name":"roleAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5748,"src":"1711:11:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":5754,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1734:1:40","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":5753,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1726:7:40","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5752,"name":"address","nodeType":"ElementaryTypeName","src":"1726:7:40","typeDescriptions":{}}},"id":5755,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1726:10:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1711:25:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":5774,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1952:3:40","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1956:6:40","memberName":"sender","nodeType":"MemberAccess","src":"1952:10:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":5776,"name":"roleAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5748,"src":"1966:11:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1952:25:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5782,"nodeType":"IfStatement","src":"1948:81:40","trueBody":{"id":5781,"nodeType":"Block","src":"1979:50:40","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5778,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":234,"src":"2000:16:40","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2000:18:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5780,"nodeType":"RevertStatement","src":"1993:25:40"}]}},"id":5783,"nodeType":"IfStatement","src":"1707:322:40","trueBody":{"id":5773,"nodeType":"Block","src":"1738:204:40","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"expression":{"id":5759,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1836:3:40","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1840:3:40","memberName":"sig","nodeType":"MemberAccess","src":"1836:7:40","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":5758,"name":"getActionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5487,"src":"1824:11:40","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view returns (bytes32)"}},"id":5761,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1824:20:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":5762,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1846:3:40","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":5763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1850:6:40","memberName":"sender","nodeType":"MemberAccess","src":"1846:10:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":5764,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5746,"src":"1858:4:40","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":5757,"name":"_canPerform","nodeType":"Identifier","overloadedDeclarations":[5722,5743],"referencedDeclaration":5743,"src":"1812:11:40","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view returns (bool)"}},"id":5765,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1812:51:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":5766,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1867:5:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"1812:60:40","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5772,"nodeType":"IfStatement","src":"1808:124:40","trueBody":{"id":5771,"nodeType":"Block","src":"1874:58:40","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5768,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":234,"src":"1899:16:40","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5769,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1899:18:40","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5770,"nodeType":"RevertStatement","src":"1892:25:40"}]}}]}}]},"documentation":{"id":5744,"nodeType":"StructuredDocumentation","src":"1497:101:40","text":"@dev Ensure the sender is the roleAddress, or default to governance if roleAddress is address(0)."},"id":5785,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureAuthenticatedByExclusiveRole","nameLocation":"1612:35:40","nodeType":"FunctionDefinition","parameters":{"id":5749,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5746,"mutability":"mutable","name":"pool","nameLocation":"1656:4:40","nodeType":"VariableDeclaration","scope":5785,"src":"1648:12:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5745,"name":"address","nodeType":"ElementaryTypeName","src":"1648:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":5748,"mutability":"mutable","name":"roleAddress","nameLocation":"1670:11:40","nodeType":"VariableDeclaration","scope":5785,"src":"1662:19:40","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":5747,"name":"address","nodeType":"ElementaryTypeName","src":"1662:7:40","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1647:35:40"},"returnParameters":{"id":5750,"nodeType":"ParameterList","parameters":[],"src":"1697:0:40"},"scope":5786,"src":"1603:432:40","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":5787,"src":"300:1737:40","usedErrors":[234],"usedEvents":[]}],"src":"46:1992:40"},"id":40},"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol","exportedSymbols":{"EVMCallModeHelpers":[5808]},"id":5809,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":5788,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:41"},{"abstract":false,"baseContracts":[],"canonicalName":"EVMCallModeHelpers","contractDependencies":[],"contractKind":"library","documentation":{"id":5789,"nodeType":"StructuredDocumentation","src":"72:101:41","text":"@notice Library used to check whether the current operation was initiated through a static call."},"fullyImplemented":true,"id":5808,"linearizedBaseContracts":[5808],"name":"EVMCallModeHelpers","nameLocation":"181:18:41","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":5790,"nodeType":"StructuredDocumentation","src":"206:98:41","text":"@notice A state-changing transaction was initiated in a context that only allows static calls."},"errorSelector":"67f84ab2","id":5792,"name":"NotStaticCall","nameLocation":"315:13:41","nodeType":"ErrorDefinition","parameters":{"id":5791,"nodeType":"ParameterList","parameters":[],"src":"328:2:41"},"src":"309:22:41"},{"body":{"id":5806,"nodeType":"Block","src":"842:104:41","statements":[{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":5804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":5798,"name":"tx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-26,"src":"859:2:41","typeDescriptions":{"typeIdentifier":"t_magic_transaction","typeString":"tx"}},"id":5799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"862:6:41","memberName":"origin","nodeType":"MemberAccess","src":"859:9:41","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":5802,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"880:1:41","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":5801,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"872:7:41","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":5800,"name":"address","nodeType":"ElementaryTypeName","src":"872:7:41","typeDescriptions":{}}},"id":5803,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"872:10:41","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"859:23:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":5797,"id":5805,"nodeType":"Return","src":"852:30:41"}]},"documentation":{"id":5793,"nodeType":"StructuredDocumentation","src":"337:447:41","text":" @dev Detects whether the current transaction is a static call.\n A static call is one where `tx.origin` equals 0x0 for most implementations.\n See this tweet for a table on how transaction parameters are set on different platforms:\n https://twitter.com/0xkarmacoma/status/1493380279309717505\n Solidity eth_call reference docs are here: https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_call"},"id":5807,"implemented":true,"kind":"function","modifiers":[],"name":"isStaticCall","nameLocation":"798:12:41","nodeType":"FunctionDefinition","parameters":{"id":5794,"nodeType":"ParameterList","parameters":[],"src":"810:2:41"},"returnParameters":{"id":5797,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5796,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5807,"src":"836:4:41","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":5795,"name":"bool","nodeType":"ElementaryTypeName","src":"836:4:41","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"835:6:41"},"scope":5808,"src":"789:157:41","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":5809,"src":"173:775:41","usedErrors":[5792],"usedEvents":[]}],"src":"46:903:41"},"id":41},"@balancer-labs/v3-solidity-utils/contracts/helpers/FactoryWidePauseWindow.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/FactoryWidePauseWindow.sol","exportedSymbols":{"FactoryWidePauseWindow":[5892]},"id":5893,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":5810,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:42"},{"abstract":false,"baseContracts":[],"canonicalName":"FactoryWidePauseWindow","contractDependencies":[],"contractKind":"contract","documentation":{"id":5811,"nodeType":"StructuredDocumentation","src":"72:730:42","text":" @notice Base contract for v3 factories to support pause windows for pools based on the factory deployment time.\n @dev Each pool deployment calls `getPauseWindowDuration` on the factory so that all Pools created by this factory\n will share the same Pause Window end time, after which both old and new Pools will not be pausable.\n All pools are reversibly pausable until the pause window expires. Afterward, there is an additional buffer\n period, set to the same duration as the Vault's buffer period. If a pool was paused, it will remain paused\n through this buffer period, and cannot be unpaused.\n When the buffer period expires, it will unpause automatically, and remain permissionless forever after."},"fullyImplemented":true,"id":5892,"linearizedBaseContracts":[5892],"name":"FactoryWidePauseWindow","nameLocation":"812:22:42","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":5818,"mutability":"constant","name":"_MAX_TIMESTAMP","nameLocation":"1030:14:42","nodeType":"VariableDeclaration","scope":5892,"src":"1006:57:42","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":5812,"name":"uint32","nodeType":"ElementaryTypeName","src":"1006:6:42","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"value":{"expression":{"arguments":[{"id":5815,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1052:6:42","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":5814,"name":"uint32","nodeType":"ElementaryTypeName","src":"1052:6:42","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"}],"id":5813,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"1047:4:42","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":5816,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1047:12:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint32","typeString":"type(uint32)"}},"id":5817,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1060:3:42","memberName":"max","nodeType":"MemberAccess","src":"1047:16:42","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"private"},{"constant":false,"id":5820,"mutability":"immutable","name":"_pauseWindowDuration","nameLocation":"1095:20:42","nodeType":"VariableDeclaration","scope":5892,"src":"1070:45:42","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":5819,"name":"uint32","nodeType":"ElementaryTypeName","src":"1070:6:42","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"private"},{"constant":false,"id":5822,"mutability":"immutable","name":"_poolsPauseWindowEndTime","nameLocation":"1212:24:42","nodeType":"VariableDeclaration","scope":5892,"src":"1187:49:42","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":5821,"name":"uint32","nodeType":"ElementaryTypeName","src":"1187:6:42","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"private"},{"documentation":{"id":5823,"nodeType":"StructuredDocumentation","src":"1243:88:42","text":"@notice The factory deployer gave a duration that would overflow the Unix timestamp."},"errorSelector":"68755a11","id":5825,"name":"PoolPauseWindowDurationOverflow","nameLocation":"1342:31:42","nodeType":"ErrorDefinition","parameters":{"id":5824,"nodeType":"ParameterList","parameters":[],"src":"1373:2:42"},"src":"1336:40:42"},{"body":{"id":5856,"nodeType":"Block","src":"1422:373:42","statements":[{"assignments":[5831],"declarations":[{"constant":false,"id":5831,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"1440:18:42","nodeType":"VariableDeclaration","scope":5856,"src":"1432:26:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5830,"name":"uint256","nodeType":"ElementaryTypeName","src":"1432:7:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5836,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":5832,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"1461:5:42","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":5833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1467:9:42","memberName":"timestamp","nodeType":"MemberAccess","src":"1461:15:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":5834,"name":"pauseWindowDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5827,"src":"1479:19:42","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"1461:37:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1432:66:42"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5837,"name":"pauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5831,"src":"1513:18:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":5838,"name":"_MAX_TIMESTAMP","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5818,"src":"1534:14:42","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"1513:35:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5844,"nodeType":"IfStatement","src":"1509:106:42","trueBody":{"id":5843,"nodeType":"Block","src":"1550:65:42","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5840,"name":"PoolPauseWindowDurationOverflow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5825,"src":"1571:31:42","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1571:33:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5842,"nodeType":"RevertStatement","src":"1564:40:42"}]}},{"expression":{"id":5847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5845,"name":"_pauseWindowDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5820,"src":"1625:20:42","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5846,"name":"pauseWindowDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5827,"src":"1648:19:42","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"1625:42:42","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":5848,"nodeType":"ExpressionStatement","src":"1625:42:42"},{"expression":{"id":5854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5849,"name":"_poolsPauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5822,"src":"1735:24:42","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":5852,"name":"pauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5831,"src":"1769:18:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":5851,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1762:6:42","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":5850,"name":"uint32","nodeType":"ElementaryTypeName","src":"1762:6:42","typeDescriptions":{}}},"id":5853,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1762:26:42","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"1735:53:42","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":5855,"nodeType":"ExpressionStatement","src":"1735:53:42"}]},"id":5857,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":5828,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5827,"mutability":"mutable","name":"pauseWindowDuration","nameLocation":"1401:19:42","nodeType":"VariableDeclaration","scope":5857,"src":"1394:26:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":5826,"name":"uint32","nodeType":"ElementaryTypeName","src":"1394:6:42","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1393:28:42"},"returnParameters":{"id":5829,"nodeType":"ParameterList","parameters":[],"src":"1422:0:42"},"scope":5892,"src":"1382:413:42","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":5865,"nodeType":"Block","src":"2056:44:42","statements":[{"expression":{"id":5863,"name":"_pauseWindowDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5820,"src":"2073:20:42","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":5862,"id":5864,"nodeType":"Return","src":"2066:27:42"}]},"documentation":{"id":5858,"nodeType":"StructuredDocumentation","src":"1801:185:42","text":" @notice Return the pause window duration. This is the time pools will be pausable after factory deployment.\n @return pauseWindowDuration The duration in seconds"},"functionSelector":"78da80cb","id":5866,"implemented":true,"kind":"function","modifiers":[],"name":"getPauseWindowDuration","nameLocation":"2000:22:42","nodeType":"FunctionDefinition","parameters":{"id":5859,"nodeType":"ParameterList","parameters":[],"src":"2022:2:42"},"returnParameters":{"id":5862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5861,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5866,"src":"2048:6:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":5860,"name":"uint32","nodeType":"ElementaryTypeName","src":"2048:6:42","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2047:8:42"},"scope":5892,"src":"1991:109:42","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":5874,"nodeType":"Block","src":"2352:48:42","statements":[{"expression":{"id":5872,"name":"_poolsPauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5822,"src":"2369:24:42","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":5871,"id":5873,"nodeType":"Return","src":"2362:31:42"}]},"documentation":{"id":5867,"nodeType":"StructuredDocumentation","src":"2106:169:42","text":" @notice Returns the original factory pauseWindowEndTime, regardless of the current time.\n @return pauseWindowEndTime The end time as a timestamp"},"functionSelector":"e9d56e19","id":5875,"implemented":true,"kind":"function","modifiers":[],"name":"getOriginalPauseWindowEndTime","nameLocation":"2289:29:42","nodeType":"FunctionDefinition","parameters":{"id":5868,"nodeType":"ParameterList","parameters":[],"src":"2318:2:42"},"returnParameters":{"id":5871,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5870,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5875,"src":"2344:6:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":5869,"name":"uint32","nodeType":"ElementaryTypeName","src":"2344:6:42","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2343:8:42"},"scope":5892,"src":"2280:120:42","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":5890,"nodeType":"Block","src":"2991:263:42","statements":[{"expression":{"condition":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":5881,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3173:5:42","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":5882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3179:9:42","memberName":"timestamp","nodeType":"MemberAccess","src":"3173:15:42","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5883,"name":"_poolsPauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5822,"src":"3191:24:42","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"3173:42:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":5885,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3172:44:42","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":5887,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3246:1:42","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":5888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"3172:75:42","trueExpression":{"id":5886,"name":"_poolsPauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5822,"src":"3219:24:42","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":5880,"id":5889,"nodeType":"Return","src":"3165:82:42"}]},"documentation":{"id":5876,"nodeType":"StructuredDocumentation","src":"2406:511:42","text":" @notice Returns the current pauseWindowEndTime that will be applied to Pools created by this factory.\n @dev We intend for all pools deployed by this factory to have the same pause window end time (i.e., after\n this date, all future pools will be unpausable). This function will return `_poolsPauseWindowEndTime`\n until it passes, after which it will return 0.\n @return pauseWindowEndTime The resolved pause window end time (0 indicating it's no longer pausable)"},"functionSelector":"db035ebc","id":5891,"implemented":true,"kind":"function","modifiers":[],"name":"getNewPoolPauseWindowEndTime","nameLocation":"2931:28:42","nodeType":"FunctionDefinition","parameters":{"id":5877,"nodeType":"ParameterList","parameters":[],"src":"2959:2:42"},"returnParameters":{"id":5880,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5879,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":5891,"src":"2983:6:42","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":5878,"name":"uint32","nodeType":"ElementaryTypeName","src":"2983:6:42","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"2982:8:42"},"scope":5892,"src":"2922:332:42","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":5893,"src":"803:2453:42","usedErrors":[5825],"usedEvents":[]}],"src":"46:3211:42"},"id":42},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","exportedSymbols":{"CastingHelpers":[5642],"IERC20":[40109],"InputHelpers":[6193]},"id":6194,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":5894,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:43"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":5896,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6194,"sourceUnit":40110,"src":"72:72:43","symbolAliases":[{"foreign":{"id":5895,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"81:6:43","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol","file":"./CastingHelpers.sol","id":5898,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6194,"sourceUnit":5643,"src":"146:54:43","symbolAliases":[{"foreign":{"id":5897,"name":"CastingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5642,"src":"155:14:43","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"InputHelpers","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":6193,"linearizedBaseContracts":[6193],"name":"InputHelpers","nameLocation":"210:12:43","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":5899,"nodeType":"StructuredDocumentation","src":"229:91:43","text":"@notice Arrays passed to a function and intended to be parallel have different lengths."},"errorSelector":"aaad13f7","id":5901,"name":"InputLengthMismatch","nameLocation":"331:19:43","nodeType":"ErrorDefinition","parameters":{"id":5900,"nodeType":"ParameterList","parameters":[],"src":"350:2:43"},"src":"325:28:43"},{"documentation":{"id":5902,"nodeType":"StructuredDocumentation","src":"359:332:43","text":" @notice More than one non-zero value was given for a single token operation.\n @dev Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value,\n corresponding to the token being added or removed. This error results if there are multiple non-zero entries."},"errorSelector":"6b8c3be5","id":5904,"name":"MultipleNonZeroInputs","nameLocation":"702:21:43","nodeType":"ErrorDefinition","parameters":{"id":5903,"nodeType":"ParameterList","parameters":[],"src":"723:2:43"},"src":"696:30:43"},{"documentation":{"id":5905,"nodeType":"StructuredDocumentation","src":"732:298:43","text":" @notice No valid input was given for a single token operation.\n @dev Input arrays for single token add/remove liquidity operations are expected to have one non-zero value,\n corresponding to the token being added or removed. This error results if all entries are zero."},"errorSelector":"7e46bddc","id":5907,"name":"AllZeroInputs","nameLocation":"1041:13:43","nodeType":"ErrorDefinition","parameters":{"id":5906,"nodeType":"ParameterList","parameters":[],"src":"1054:2:43"},"src":"1035:22:43"},{"documentation":{"id":5908,"nodeType":"StructuredDocumentation","src":"1063:320:43","text":" @notice The tokens supplied to an array argument were not sorted in numerical order.\n @dev Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can\n predict the token order without having to query the Vault. (It is also legacy v2 behavior.)"},"errorSelector":"6e8f1947","id":5910,"name":"TokensNotSorted","nameLocation":"1394:15:43","nodeType":"ErrorDefinition","parameters":{"id":5909,"nodeType":"ParameterList","parameters":[],"src":"1409:2:43"},"src":"1388:24:43"},{"body":{"id":5925,"nodeType":"Block","src":"1486:81:43","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5917,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5912,"src":"1500:1:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":5918,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5914,"src":"1505:1:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1500:6:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5924,"nodeType":"IfStatement","src":"1496:65:43","trueBody":{"id":5923,"nodeType":"Block","src":"1508:53:43","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5920,"name":"InputLengthMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5901,"src":"1529:19:43","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5921,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1529:21:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5922,"nodeType":"RevertStatement","src":"1522:28:43"}]}}]},"id":5926,"implemented":true,"kind":"function","modifiers":[],"name":"ensureInputLengthMatch","nameLocation":"1427:22:43","nodeType":"FunctionDefinition","parameters":{"id":5915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5912,"mutability":"mutable","name":"a","nameLocation":"1458:1:43","nodeType":"VariableDeclaration","scope":5926,"src":"1450:9:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5911,"name":"uint256","nodeType":"ElementaryTypeName","src":"1450:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5914,"mutability":"mutable","name":"b","nameLocation":"1469:1:43","nodeType":"VariableDeclaration","scope":5926,"src":"1461:9:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5913,"name":"uint256","nodeType":"ElementaryTypeName","src":"1461:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1449:22:43"},"returnParameters":{"id":5916,"nodeType":"ParameterList","parameters":[],"src":"1486:0:43"},"scope":6193,"src":"1418:149:43","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":5947,"nodeType":"Block","src":"1652:91:43","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":5941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5935,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5928,"src":"1666:1:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":5936,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5930,"src":"1671:1:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1666:6:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5938,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5930,"src":"1676:1:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":5939,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5932,"src":"1681:1:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1676:6:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1666:16:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5946,"nodeType":"IfStatement","src":"1662:75:43","trueBody":{"id":5945,"nodeType":"Block","src":"1684:53:43","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5942,"name":"InputLengthMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5901,"src":"1705:19:43","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5943,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1705:21:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5944,"nodeType":"RevertStatement","src":"1698:28:43"}]}}]},"id":5948,"implemented":true,"kind":"function","modifiers":[],"name":"ensureInputLengthMatch","nameLocation":"1582:22:43","nodeType":"FunctionDefinition","parameters":{"id":5933,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5928,"mutability":"mutable","name":"a","nameLocation":"1613:1:43","nodeType":"VariableDeclaration","scope":5948,"src":"1605:9:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5927,"name":"uint256","nodeType":"ElementaryTypeName","src":"1605:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5930,"mutability":"mutable","name":"b","nameLocation":"1624:1:43","nodeType":"VariableDeclaration","scope":5948,"src":"1616:9:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5929,"name":"uint256","nodeType":"ElementaryTypeName","src":"1616:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":5932,"mutability":"mutable","name":"c","nameLocation":"1635:1:43","nodeType":"VariableDeclaration","scope":5948,"src":"1627:9:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5931,"name":"uint256","nodeType":"ElementaryTypeName","src":"1627:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1604:33:43"},"returnParameters":{"id":5934,"nodeType":"ParameterList","parameters":[],"src":"1652:0:43"},"scope":6193,"src":"1573:170:43","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6006,"nodeType":"Block","src":"1938:451:43","statements":[{"assignments":[5957],"declarations":[{"constant":false,"id":5957,"mutability":"mutable","name":"length","nameLocation":"1956:6:43","nodeType":"VariableDeclaration","scope":6006,"src":"1948:14:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5956,"name":"uint256","nodeType":"ElementaryTypeName","src":"1948:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5960,"initialValue":{"expression":{"id":5958,"name":"maxAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5951,"src":"1965:12:43","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1978:6:43","memberName":"length","nodeType":"MemberAccess","src":"1965:19:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1948:36:43"},{"expression":{"id":5963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5961,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5954,"src":"1994:10:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5962,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5957,"src":"2007:6:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1994:19:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5964,"nodeType":"ExpressionStatement","src":"1994:19:43"},{"body":{"id":5994,"nodeType":"Block","src":"2061:211:43","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":5975,"name":"maxAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5951,"src":"2079:12:43","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":5977,"indexExpression":{"id":5976,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5966,"src":"2092:1:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2079:15:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":5978,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2098:1:43","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2079:20:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5993,"nodeType":"IfStatement","src":"2075:187:43","trueBody":{"id":5992,"nodeType":"Block","src":"2101:161:43","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5980,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5954,"src":"2123:10:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":5981,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5957,"src":"2137:6:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2123:20:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5987,"nodeType":"IfStatement","src":"2119:97:43","trueBody":{"id":5986,"nodeType":"Block","src":"2145:71:43","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5983,"name":"MultipleNonZeroInputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5904,"src":"2174:21:43","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":5984,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2174:23:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":5985,"nodeType":"RevertStatement","src":"2167:30:43"}]}},{"expression":{"id":5990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":5988,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5954,"src":"2233:10:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":5989,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5966,"src":"2246:1:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2233:14:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5991,"nodeType":"ExpressionStatement","src":"2233:14:43"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5969,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5966,"src":"2044:1:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":5970,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5957,"src":"2048:6:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2044:10:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":5995,"initializationExpression":{"assignments":[5966],"declarations":[{"constant":false,"id":5966,"mutability":"mutable","name":"i","nameLocation":"2037:1:43","nodeType":"VariableDeclaration","scope":5995,"src":"2029:9:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5965,"name":"uint256","nodeType":"ElementaryTypeName","src":"2029:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":5968,"initialValue":{"hexValue":"30","id":5967,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2041:1:43","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2029:13:43"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":5973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"2056:3:43","subExpression":{"id":5972,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5966,"src":"2058:1:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5974,"nodeType":"ExpressionStatement","src":"2056:3:43"},"nodeType":"ForStatement","src":"2024:248:43"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":5998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":5996,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5954,"src":"2286:10:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":5997,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5957,"src":"2300:6:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2286:20:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6003,"nodeType":"IfStatement","src":"2282:73:43","trueBody":{"id":6002,"nodeType":"Block","src":"2308:47:43","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":5999,"name":"AllZeroInputs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5907,"src":"2329:13:43","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2329:15:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6001,"nodeType":"RevertStatement","src":"2322:22:43"}]}},{"expression":{"id":6004,"name":"inputIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5954,"src":"2372:10:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":5955,"id":6005,"nodeType":"Return","src":"2365:17:43"}]},"id":6007,"implemented":true,"kind":"function","modifiers":[],"name":"getSingleInputIndex","nameLocation":"1844:19:43","nodeType":"FunctionDefinition","parameters":{"id":5952,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5951,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"1881:12:43","nodeType":"VariableDeclaration","scope":6007,"src":"1864:29:43","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":5949,"name":"uint256","nodeType":"ElementaryTypeName","src":"1864:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":5950,"nodeType":"ArrayTypeName","src":"1864:9:43","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1863:31:43"},"returnParameters":{"id":5955,"nodeType":"ParameterList","parameters":[{"constant":false,"id":5954,"mutability":"mutable","name":"inputIndex","nameLocation":"1926:10:43","nodeType":"VariableDeclaration","scope":6007,"src":"1918:18:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":5953,"name":"uint256","nodeType":"ElementaryTypeName","src":"1918:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1917:20:43"},"scope":6193,"src":"1835:554:43","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6084,"nodeType":"Block","src":"3138:376:43","statements":[{"body":{"id":6080,"nodeType":"Block","src":"3196:288:43","statements":[{"body":{"id":6078,"nodeType":"Block","src":"3262:212:43","statements":[{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"id":6055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":6047,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6012,"src":"3284:6:43","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":6049,"indexExpression":{"id":6048,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6033,"src":"3291:1:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3284:9:43","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"baseExpression":{"id":6050,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6012,"src":"3296:6:43","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":6054,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6051,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6033,"src":"3303:1:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":6052,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3307:1:43","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3303:5:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3296:13:43","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"3284:25:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6077,"nodeType":"IfStatement","src":"3280:180:43","trueBody":{"id":6076,"nodeType":"Block","src":"3311:149:43","statements":[{"expression":{"id":6074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":6056,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6012,"src":"3387:6:43","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":6058,"indexExpression":{"id":6057,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6033,"src":"3394:1:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3387:9:43","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"baseExpression":{"id":6059,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6012,"src":"3398:6:43","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":6063,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6060,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6033,"src":"3405:1:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":6061,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3409:1:43","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3405:5:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3398:13:43","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"id":6064,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"3386:26:43","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC20_$40109_$_t_contract$_IERC20_$40109_$","typeString":"tuple(contract IERC20,contract IERC20)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"baseExpression":{"id":6065,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6012,"src":"3416:6:43","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":6069,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6066,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6033,"src":"3423:1:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":6067,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3427:1:43","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3423:5:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3416:13:43","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"baseExpression":{"id":6070,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6012,"src":"3431:6:43","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":6072,"indexExpression":{"id":6071,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6033,"src":"3438:1:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3431:9:43","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"id":6073,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3415:26:43","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC20_$40109_$_t_contract$_IERC20_$40109_$","typeString":"tuple(contract IERC20,contract IERC20)"}},"src":"3386:55:43","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6075,"nodeType":"ExpressionStatement","src":"3386:55:43"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6036,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6033,"src":"3230:1:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6037,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6012,"src":"3234:6:43","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":6038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3241:6:43","memberName":"length","nodeType":"MemberAccess","src":"3234:13:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":6039,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6020,"src":"3250:1:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3234:17:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":6041,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3254:1:43","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3234:21:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3230:25:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6079,"initializationExpression":{"assignments":[6033],"declarations":[{"constant":false,"id":6033,"mutability":"mutable","name":"j","nameLocation":"3223:1:43","nodeType":"VariableDeclaration","scope":6079,"src":"3215:9:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6032,"name":"uint256","nodeType":"ElementaryTypeName","src":"3215:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6035,"initialValue":{"hexValue":"30","id":6034,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3227:1:43","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3215:13:43"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":6045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3257:3:43","subExpression":{"id":6044,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6033,"src":"3259:1:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6046,"nodeType":"ExpressionStatement","src":"3257:3:43"},"nodeType":"ForStatement","src":"3210:264:43"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6023,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6020,"src":"3168:1:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6024,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6012,"src":"3172:6:43","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":6025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3179:6:43","memberName":"length","nodeType":"MemberAccess","src":"3172:13:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":6026,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3188:1:43","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3172:17:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3168:21:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6081,"initializationExpression":{"assignments":[6020],"declarations":[{"constant":false,"id":6020,"mutability":"mutable","name":"i","nameLocation":"3161:1:43","nodeType":"VariableDeclaration","scope":6081,"src":"3153:9:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6019,"name":"uint256","nodeType":"ElementaryTypeName","src":"3153:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6022,"initialValue":{"hexValue":"30","id":6021,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3165:1:43","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3153:13:43"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":6030,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3191:3:43","subExpression":{"id":6029,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6020,"src":"3193:1:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6031,"nodeType":"ExpressionStatement","src":"3191:3:43"},"nodeType":"ForStatement","src":"3148:336:43"},{"expression":{"id":6082,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6012,"src":"3501:6:43","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"functionReturnParameters":6018,"id":6083,"nodeType":"Return","src":"3494:13:43"}]},"documentation":{"id":6008,"nodeType":"StructuredDocumentation","src":"2395:654:43","text":" @dev Sort an array of tokens, mutating in place (and also returning them).\n This assumes the tokens have been (or will be) validated elsewhere for length\n and non-duplication. All this does is the sorting.\n A bubble sort should be gas- and bytecode-efficient enough for such small arrays.\n Could have also done \"manual\" comparisons for each of the cases, but this is\n about the same number of operations, and more concise.\n This is less efficient for larger token count (i.e., above 4), but such pools should\n be rare. And in any case, sorting is only done on-chain in test code."},"id":6085,"implemented":true,"kind":"function","modifiers":[],"name":"sortTokens","nameLocation":"3063:10:43","nodeType":"FunctionDefinition","parameters":{"id":6013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6012,"mutability":"mutable","name":"tokens","nameLocation":"3090:6:43","nodeType":"VariableDeclaration","scope":6085,"src":"3074:22:43","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":6010,"nodeType":"UserDefinedTypeName","pathNode":{"id":6009,"name":"IERC20","nameLocations":["3074:6:43"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"3074:6:43"},"referencedDeclaration":40109,"src":"3074:6:43","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":6011,"nodeType":"ArrayTypeName","src":"3074:8:43","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3073:24:43"},"returnParameters":{"id":6018,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6017,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6085,"src":"3121:15:43","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":6015,"nodeType":"UserDefinedTypeName","pathNode":{"id":6014,"name":"IERC20","nameLocations":["3121:6:43"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"3121:6:43"},"referencedDeclaration":40109,"src":"3121:6:43","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":6016,"nodeType":"ArrayTypeName","src":"3121:8:43","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3120:17:43"},"scope":6193,"src":"3054:460:43","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6139,"nodeType":"Block","src":"3686:341:43","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6093,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6090,"src":"3700:6:43","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":6094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3707:6:43","memberName":"length","nodeType":"MemberAccess","src":"3700:13:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"32","id":6095,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3716:1:43","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"3700:17:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6099,"nodeType":"IfStatement","src":"3696:54:43","trueBody":{"id":6098,"nodeType":"Block","src":"3719:31:43","statements":[{"functionReturnParameters":6092,"id":6097,"nodeType":"Return","src":"3733:7:43"}]}},{"assignments":[6102],"declarations":[{"constant":false,"id":6102,"mutability":"mutable","name":"previous","nameLocation":"3767:8:43","nodeType":"VariableDeclaration","scope":6139,"src":"3760:15:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":6101,"nodeType":"UserDefinedTypeName","pathNode":{"id":6100,"name":"IERC20","nameLocations":["3760:6:43"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"3760:6:43"},"referencedDeclaration":40109,"src":"3760:6:43","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"id":6106,"initialValue":{"baseExpression":{"id":6103,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6090,"src":"3778:6:43","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":6105,"indexExpression":{"hexValue":"30","id":6104,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3785:1:43","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3778:9:43","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3760:27:43"},{"body":{"id":6137,"nodeType":"Block","src":"3842:179:43","statements":[{"assignments":[6120],"declarations":[{"constant":false,"id":6120,"mutability":"mutable","name":"current","nameLocation":"3863:7:43","nodeType":"VariableDeclaration","scope":6137,"src":"3856:14:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":6119,"nodeType":"UserDefinedTypeName","pathNode":{"id":6118,"name":"IERC20","nameLocations":["3856:6:43"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"3856:6:43"},"referencedDeclaration":40109,"src":"3856:6:43","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"id":6124,"initialValue":{"baseExpression":{"id":6121,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6090,"src":"3873:6:43","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":6123,"indexExpression":{"id":6122,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6108,"src":"3880:1:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3873:9:43","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3856:26:43"},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"id":6127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6125,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6102,"src":"3901:8:43","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":6126,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6120,"src":"3912:7:43","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"3901:18:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6132,"nodeType":"IfStatement","src":"3897:81:43","trueBody":{"id":6131,"nodeType":"Block","src":"3921:57:43","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6128,"name":"TokensNotSorted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5910,"src":"3946:15:43","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6129,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3946:17:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6130,"nodeType":"RevertStatement","src":"3939:24:43"}]}},{"expression":{"id":6135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6133,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6102,"src":"3992:8:43","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6134,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6120,"src":"4003:7:43","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"3992:18:43","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":6136,"nodeType":"ExpressionStatement","src":"3992:18:43"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6111,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6108,"src":"3818:1:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":6112,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6090,"src":"3822:6:43","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":6113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3829:6:43","memberName":"length","nodeType":"MemberAccess","src":"3822:13:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3818:17:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6138,"initializationExpression":{"assignments":[6108],"declarations":[{"constant":false,"id":6108,"mutability":"mutable","name":"i","nameLocation":"3811:1:43","nodeType":"VariableDeclaration","scope":6138,"src":"3803:9:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6107,"name":"uint256","nodeType":"ElementaryTypeName","src":"3803:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6110,"initialValue":{"hexValue":"31","id":6109,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3815:1:43","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"3803:13:43"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":6116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3837:3:43","subExpression":{"id":6115,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6108,"src":"3839:1:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6117,"nodeType":"ExpressionStatement","src":"3837:3:43"},"nodeType":"ForStatement","src":"3798:223:43"}]},"documentation":{"id":6086,"nodeType":"StructuredDocumentation","src":"3520:95:43","text":"@dev Ensure an array of tokens is sorted. As above, does not validate length or uniqueness."},"id":6140,"implemented":true,"kind":"function","modifiers":[],"name":"ensureSortedTokens","nameLocation":"3629:18:43","nodeType":"FunctionDefinition","parameters":{"id":6091,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6090,"mutability":"mutable","name":"tokens","nameLocation":"3664:6:43","nodeType":"VariableDeclaration","scope":6140,"src":"3648:22:43","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":6088,"nodeType":"UserDefinedTypeName","pathNode":{"id":6087,"name":"IERC20","nameLocations":["3648:6:43"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"3648:6:43"},"referencedDeclaration":40109,"src":"3648:6:43","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":6089,"nodeType":"ArrayTypeName","src":"3648:8:43","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"3647:24:43"},"returnParameters":{"id":6092,"nodeType":"ParameterList","parameters":[],"src":"3686:0:43"},"scope":6193,"src":"3620:407:43","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6191,"nodeType":"Block","src":"4203:347:43","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6147,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6144,"src":"4217:7:43","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6148,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4225:6:43","memberName":"length","nodeType":"MemberAccess","src":"4217:14:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"32","id":6149,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4234:1:43","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"4217:18:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6153,"nodeType":"IfStatement","src":"4213:55:43","trueBody":{"id":6152,"nodeType":"Block","src":"4237:31:43","statements":[{"functionReturnParameters":6146,"id":6151,"nodeType":"Return","src":"4251:7:43"}]}},{"assignments":[6155],"declarations":[{"constant":false,"id":6155,"mutability":"mutable","name":"previous","nameLocation":"4286:8:43","nodeType":"VariableDeclaration","scope":6191,"src":"4278:16:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6154,"name":"uint256","nodeType":"ElementaryTypeName","src":"4278:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6159,"initialValue":{"baseExpression":{"id":6156,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6144,"src":"4297:7:43","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6158,"indexExpression":{"hexValue":"30","id":6157,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4305:1:43","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4297:10:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4278:29:43"},{"body":{"id":6189,"nodeType":"Block","src":"4363:181:43","statements":[{"assignments":[6172],"declarations":[{"constant":false,"id":6172,"mutability":"mutable","name":"current","nameLocation":"4385:7:43","nodeType":"VariableDeclaration","scope":6189,"src":"4377:15:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6171,"name":"uint256","nodeType":"ElementaryTypeName","src":"4377:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6176,"initialValue":{"baseExpression":{"id":6173,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6144,"src":"4395:7:43","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6175,"indexExpression":{"id":6174,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6161,"src":"4403:1:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4395:10:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4377:28:43"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6177,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6155,"src":"4424:8:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":6178,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6172,"src":"4435:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4424:18:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6184,"nodeType":"IfStatement","src":"4420:81:43","trueBody":{"id":6183,"nodeType":"Block","src":"4444:57:43","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6180,"name":"TokensNotSorted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5910,"src":"4469:15:43","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4469:17:43","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6182,"nodeType":"RevertStatement","src":"4462:24:43"}]}},{"expression":{"id":6187,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6185,"name":"previous","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6155,"src":"4515:8:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":6186,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6172,"src":"4526:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4515:18:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6188,"nodeType":"ExpressionStatement","src":"4515:18:43"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6164,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6161,"src":"4338:1:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":6165,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6144,"src":"4342:7:43","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4350:6:43","memberName":"length","nodeType":"MemberAccess","src":"4342:14:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4338:18:43","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6190,"initializationExpression":{"assignments":[6161],"declarations":[{"constant":false,"id":6161,"mutability":"mutable","name":"i","nameLocation":"4331:1:43","nodeType":"VariableDeclaration","scope":6190,"src":"4323:9:43","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6160,"name":"uint256","nodeType":"ElementaryTypeName","src":"4323:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6163,"initialValue":{"hexValue":"31","id":6162,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4335:1:43","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"VariableDeclarationStatement","src":"4323:13:43"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":6169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"4358:3:43","subExpression":{"id":6168,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6161,"src":"4360:1:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6170,"nodeType":"ExpressionStatement","src":"4358:3:43"},"nodeType":"ForStatement","src":"4318:226:43"}]},"documentation":{"id":6141,"nodeType":"StructuredDocumentation","src":"4033:96:43","text":"@dev Ensure an array of amounts is sorted. As above, does not validate length or uniqueness."},"id":6192,"implemented":true,"kind":"function","modifiers":[],"name":"ensureSortedAmounts","nameLocation":"4143:19:43","nodeType":"FunctionDefinition","parameters":{"id":6145,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6144,"mutability":"mutable","name":"amounts","nameLocation":"4180:7:43","nodeType":"VariableDeclaration","scope":6192,"src":"4163:24:43","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6142,"name":"uint256","nodeType":"ElementaryTypeName","src":"4163:7:43","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6143,"nodeType":"ArrayTypeName","src":"4163:9:43","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4162:26:43"},"returnParameters":{"id":6146,"nodeType":"ParameterList","parameters":[],"src":"4203:0:43"},"scope":6193,"src":"4134:416:43","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":6194,"src":"202:4350:43","usedErrors":[5901,5904,5907,5910],"usedEvents":[]}],"src":"46:4507:43"},"id":43},"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","exportedSymbols":{"PackedTokenBalance":[6344]},"id":6345,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6195,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:44"},{"abstract":false,"baseContracts":[],"canonicalName":"PackedTokenBalance","contractDependencies":[],"contractKind":"library","documentation":{"id":6196,"nodeType":"StructuredDocumentation","src":"72:909:44","text":" @notice This library represents a data structure for packing a token's current raw and derived balances. A derived\n balance can be the \"last\" live balance scaled18 of the raw token, or the balance of the wrapped version of the\n token in a vault buffer, among others.\n @dev We could use a Solidity struct to pack balance values together in a single storage slot, but unfortunately\n Solidity only allows for structs to live in either storage, calldata or memory. Because a memory struct still takes\n up a slot in the stack (to store its memory location), and because the entire balance fits in a single stack slot\n (two 128 bit values), using memory is strictly less gas performant. Therefore, we do manual packing and unpacking.\n We could also use custom types now, but given the simplicity here, and the existing EnumerableMap type, it seemed\n easier to leave it as a bytes32."},"fullyImplemented":true,"id":6344,"linearizedBaseContracts":[6344],"name":"PackedTokenBalance","nameLocation":"990:18:44","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":6204,"mutability":"constant","name":"_MAX_BALANCE","nameLocation":"1222:12:44","nodeType":"VariableDeclaration","scope":6344,"src":"1197:54:44","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6197,"name":"uint256","nodeType":"ElementaryTypeName","src":"1197:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_rational_340282366920938463463374607431768211455_by_1","typeString":"int_const 3402...(31 digits omitted)...1455"},"id":6203,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"},"id":6201,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":6198,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1237:1:44","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"components":[{"hexValue":"313238","id":6199,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1243:3:44","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"}],"id":6200,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1242:5:44","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"}},"src":"1237:10:44","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211456_by_1","typeString":"int_const 3402...(31 digits omitted)...1456"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":6202,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1250:1:44","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1237:14:44","typeDescriptions":{"typeIdentifier":"t_rational_340282366920938463463374607431768211455_by_1","typeString":"int_const 3402...(31 digits omitted)...1455"}},"visibility":"private"},{"documentation":{"id":6205,"nodeType":"StructuredDocumentation","src":"1258:78:44","text":"@notice One of the balances is above the maximum value that can be stored."},"errorSelector":"89560ca1","id":6207,"name":"BalanceOverflow","nameLocation":"1347:15:44","nodeType":"ErrorDefinition","parameters":{"id":6206,"nodeType":"ParameterList","parameters":[],"src":"1362:2:44"},"src":"1341:24:44"},{"body":{"id":6221,"nodeType":"Block","src":"1443:55:44","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":6216,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6209,"src":"1468:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":6215,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1460:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":6214,"name":"uint256","nodeType":"ElementaryTypeName","src":"1460:7:44","typeDescriptions":{}}},"id":6217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1460:16:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":6218,"name":"_MAX_BALANCE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6204,"src":"1479:12:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1460:31:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6213,"id":6220,"nodeType":"Return","src":"1453:38:44"}]},"id":6222,"implemented":true,"kind":"function","modifiers":[],"name":"getBalanceRaw","nameLocation":"1380:13:44","nodeType":"FunctionDefinition","parameters":{"id":6210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6209,"mutability":"mutable","name":"balance","nameLocation":"1402:7:44","nodeType":"VariableDeclaration","scope":6222,"src":"1394:15:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6208,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1394:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1393:17:44"},"returnParameters":{"id":6213,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6212,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6222,"src":"1434:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6211,"name":"uint256","nodeType":"ElementaryTypeName","src":"1434:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1433:9:44"},"scope":6344,"src":"1371:127:44","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6238,"nodeType":"Block","src":"1580:62:44","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":6233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6231,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6224,"src":"1605:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"313238","id":6232,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1616:3:44","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"1605:14:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":6230,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1597:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":6229,"name":"uint256","nodeType":"ElementaryTypeName","src":"1597:7:44","typeDescriptions":{}}},"id":6234,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1597:23:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":6235,"name":"_MAX_BALANCE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6204,"src":"1623:12:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1597:38:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6228,"id":6237,"nodeType":"Return","src":"1590:45:44"}]},"id":6239,"implemented":true,"kind":"function","modifiers":[],"name":"getBalanceDerived","nameLocation":"1513:17:44","nodeType":"FunctionDefinition","parameters":{"id":6225,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6224,"mutability":"mutable","name":"balance","nameLocation":"1539:7:44","nodeType":"VariableDeclaration","scope":6239,"src":"1531:15:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6223,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1531:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1530:17:44"},"returnParameters":{"id":6228,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6227,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6239,"src":"1571:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6226,"name":"uint256","nodeType":"ElementaryTypeName","src":"1571:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1570:9:44"},"scope":6344,"src":"1504:138:44","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6256,"nodeType":"Block","src":"1831:82:44","statements":[{"expression":{"arguments":[{"id":6250,"name":"newBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6244,"src":"1864:13:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":6252,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6242,"src":"1897:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":6251,"name":"getBalanceDerived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6239,"src":"1879:17:44","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":6253,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1879:26:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6249,"name":"toPackedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6303,"src":"1848:15:44","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":6254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1848:58:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":6248,"id":6255,"nodeType":"Return","src":"1841:65:44"}]},"documentation":{"id":6240,"nodeType":"StructuredDocumentation","src":"1648:83:44","text":"@dev Sets only the raw balance of balances and returns the new bytes32 balance."},"id":6257,"implemented":true,"kind":"function","modifiers":[],"name":"setBalanceRaw","nameLocation":"1745:13:44","nodeType":"FunctionDefinition","parameters":{"id":6245,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6242,"mutability":"mutable","name":"balance","nameLocation":"1767:7:44","nodeType":"VariableDeclaration","scope":6257,"src":"1759:15:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6241,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1759:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6244,"mutability":"mutable","name":"newBalanceRaw","nameLocation":"1784:13:44","nodeType":"VariableDeclaration","scope":6257,"src":"1776:21:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6243,"name":"uint256","nodeType":"ElementaryTypeName","src":"1776:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1758:40:44"},"returnParameters":{"id":6248,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6247,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6257,"src":"1822:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6246,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1822:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1821:9:44"},"scope":6344,"src":"1736:177:44","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6274,"nodeType":"Block","src":"2114:82:44","statements":[{"expression":{"arguments":[{"arguments":[{"id":6269,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6260,"src":"2161:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":6268,"name":"getBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6222,"src":"2147:13:44","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":6270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2147:22:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6271,"name":"newBalanceDerived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6262,"src":"2171:17:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6267,"name":"toPackedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6303,"src":"2131:15:44","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":6272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2131:58:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":6266,"id":6273,"nodeType":"Return","src":"2124:65:44"}]},"documentation":{"id":6258,"nodeType":"StructuredDocumentation","src":"1919:87:44","text":"@dev Sets only the derived balance of balances and returns the new bytes32 balance."},"id":6275,"implemented":true,"kind":"function","modifiers":[],"name":"setBalanceDerived","nameLocation":"2020:17:44","nodeType":"FunctionDefinition","parameters":{"id":6263,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6260,"mutability":"mutable","name":"balance","nameLocation":"2046:7:44","nodeType":"VariableDeclaration","scope":6275,"src":"2038:15:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6259,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2038:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":6262,"mutability":"mutable","name":"newBalanceDerived","nameLocation":"2063:17:44","nodeType":"VariableDeclaration","scope":6275,"src":"2055:25:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6261,"name":"uint256","nodeType":"ElementaryTypeName","src":"2055:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2037:44:44"},"returnParameters":{"id":6266,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6265,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6275,"src":"2105:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6264,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2105:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2104:9:44"},"scope":6344,"src":"2011:185:44","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6302,"nodeType":"Block","src":"2412:180:44","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":6291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6285,"name":"balanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6278,"src":"2426:10:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":6286,"name":"_MAX_BALANCE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6204,"src":"2439:12:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2426:25:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6288,"name":"balanceDerived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6280,"src":"2455:14:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":6289,"name":"_MAX_BALANCE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6204,"src":"2472:12:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2455:29:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2426:58:44","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6296,"nodeType":"IfStatement","src":"2422:113:44","trueBody":{"id":6295,"nodeType":"Block","src":"2486:49:44","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6292,"name":"BalanceOverflow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6207,"src":"2507:15:44","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6293,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2507:17:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6294,"nodeType":"RevertStatement","src":"2500:24:44"}]}},{"expression":{"arguments":[{"id":6298,"name":"balanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6278,"src":"2558:10:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":6299,"name":"balanceDerived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6280,"src":"2570:14:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6297,"name":"_pack","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6343,"src":"2552:5:44","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":6300,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2552:33:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":6284,"id":6301,"nodeType":"Return","src":"2545:40:44"}]},"documentation":{"id":6276,"nodeType":"StructuredDocumentation","src":"2202:104:44","text":"@dev Validates the size of `balanceRaw` and `balanceDerived`, then returns a packed balance bytes32."},"id":6303,"implemented":true,"kind":"function","modifiers":[],"name":"toPackedBalance","nameLocation":"2320:15:44","nodeType":"FunctionDefinition","parameters":{"id":6281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6278,"mutability":"mutable","name":"balanceRaw","nameLocation":"2344:10:44","nodeType":"VariableDeclaration","scope":6303,"src":"2336:18:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6277,"name":"uint256","nodeType":"ElementaryTypeName","src":"2336:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6280,"mutability":"mutable","name":"balanceDerived","nameLocation":"2364:14:44","nodeType":"VariableDeclaration","scope":6303,"src":"2356:22:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6279,"name":"uint256","nodeType":"ElementaryTypeName","src":"2356:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2335:44:44"},"returnParameters":{"id":6284,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6283,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6303,"src":"2403:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6282,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2403:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2402:9:44"},"scope":6344,"src":"2311:281:44","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6321,"nodeType":"Block","src":"2754:76:44","statements":[{"expression":{"components":[{"arguments":[{"id":6314,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6306,"src":"2786:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":6313,"name":"getBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6222,"src":"2772:13:44","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":6315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2772:22:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":6317,"name":"balance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6306,"src":"2814:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":6316,"name":"getBalanceDerived","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6239,"src":"2796:17:44","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":6318,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2796:26:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6319,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2771:52:44","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":6312,"id":6320,"nodeType":"Return","src":"2764:59:44"}]},"documentation":{"id":6304,"nodeType":"StructuredDocumentation","src":"2598:40:44","text":"@dev Decode and fetch both balances."},"id":6322,"implemented":true,"kind":"function","modifiers":[],"name":"fromPackedBalance","nameLocation":"2652:17:44","nodeType":"FunctionDefinition","parameters":{"id":6307,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6306,"mutability":"mutable","name":"balance","nameLocation":"2678:7:44","nodeType":"VariableDeclaration","scope":6322,"src":"2670:15:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6305,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2670:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2669:17:44"},"returnParameters":{"id":6312,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6309,"mutability":"mutable","name":"balanceRaw","nameLocation":"2718:10:44","nodeType":"VariableDeclaration","scope":6322,"src":"2710:18:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6308,"name":"uint256","nodeType":"ElementaryTypeName","src":"2710:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6311,"mutability":"mutable","name":"balanceDerived","nameLocation":"2738:14:44","nodeType":"VariableDeclaration","scope":6322,"src":"2730:22:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6310,"name":"uint256","nodeType":"ElementaryTypeName","src":"2730:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2709:44:44"},"scope":6344,"src":"2643:187:44","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6342,"nodeType":"Block","src":"3035:76:44","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6334,"name":"mostSignificant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6327,"src":"3061:15:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"313238","id":6335,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3080:3:44","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"3061:22:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6337,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3060:24:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":6338,"name":"leastSignificant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6325,"src":"3087:16:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3060:43:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6333,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3052:7:44","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":6332,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3052:7:44","typeDescriptions":{}}},"id":6340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3052:52:44","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":6331,"id":6341,"nodeType":"Return","src":"3045:59:44"}]},"documentation":{"id":6323,"nodeType":"StructuredDocumentation","src":"2836:97:44","text":"@dev Packs two uint128 values into a packed balance bytes32. It does not check balance sizes."},"id":6343,"implemented":true,"kind":"function","modifiers":[],"name":"_pack","nameLocation":"2947:5:44","nodeType":"FunctionDefinition","parameters":{"id":6328,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6325,"mutability":"mutable","name":"leastSignificant","nameLocation":"2961:16:44","nodeType":"VariableDeclaration","scope":6343,"src":"2953:24:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6324,"name":"uint256","nodeType":"ElementaryTypeName","src":"2953:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6327,"mutability":"mutable","name":"mostSignificant","nameLocation":"2987:15:44","nodeType":"VariableDeclaration","scope":6343,"src":"2979:23:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6326,"name":"uint256","nodeType":"ElementaryTypeName","src":"2979:7:44","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2952:51:44"},"returnParameters":{"id":6331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6330,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6343,"src":"3026:7:44","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6329,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3026:7:44","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3025:9:44"},"scope":6344,"src":"2938:173:44","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":6345,"src":"982:2131:44","usedErrors":[6207],"usedEvents":[]}],"src":"46:3068:44"},"id":44},"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol","exportedSymbols":{"RevertCodec":[6434]},"id":6435,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6346,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:45"},{"abstract":false,"baseContracts":[],"canonicalName":"RevertCodec","contractDependencies":[],"contractKind":"library","documentation":{"id":6347,"nodeType":"StructuredDocumentation","src":"111:120:45","text":"@notice Support `quoteAndRevert`: a v2-style query which always reverts, and returns the result in the return data."},"fullyImplemented":true,"id":6434,"linearizedBaseContracts":[6434],"name":"RevertCodec","nameLocation":"239:11:45","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":6348,"nodeType":"StructuredDocumentation","src":"257:183:45","text":" @notice On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\n @param result The result of the query operation"},"errorSelector":"5ab64fb8","id":6352,"name":"Result","nameLocation":"451:6:45","nodeType":"ErrorDefinition","parameters":{"id":6351,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6350,"mutability":"mutable","name":"result","nameLocation":"464:6:45","nodeType":"VariableDeclaration","scope":6352,"src":"458:12:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6349,"name":"bytes","nodeType":"ElementaryTypeName","src":"458:5:45","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"457:14:45"},"src":"445:27:45"},{"documentation":{"id":6353,"nodeType":"StructuredDocumentation","src":"478:79:45","text":"@notice Handle the \"reverted without a reason\" case (i.e., no return data)."},"errorSelector":"a7285689","id":6355,"name":"ErrorSelectorNotFound","nameLocation":"568:21:45","nodeType":"ErrorDefinition","parameters":{"id":6354,"nodeType":"ParameterList","parameters":[],"src":"589:2:45"},"src":"562:30:45"},{"body":{"id":6395,"nodeType":"Block","src":"687:559:45","statements":[{"assignments":[6363],"declarations":[{"constant":false,"id":6363,"mutability":"mutable","name":"errorSelector","nameLocation":"704:13:45","nodeType":"VariableDeclaration","scope":6395,"src":"697:20:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":6362,"name":"bytes4","nodeType":"ElementaryTypeName","src":"697:6:45","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":6368,"initialValue":{"arguments":[{"id":6366,"name":"resultRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6357,"src":"746:9:45","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":6364,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6434,"src":"720:11:45","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$6434_$","typeString":"type(library RevertCodec)"}},"id":6365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"732:13:45","memberName":"parseSelector","nodeType":"MemberAccess","referencedDeclaration":6415,"src":"720:25:45","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes4_$","typeString":"function (bytes memory) pure returns (bytes4)"}},"id":6367,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"720:36:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"697:59:45"},{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":6372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6369,"name":"errorSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6363,"src":"770:13:45","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":6370,"name":"Result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6352,"src":"787:6:45","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_bytes_memory_ptr_$returns$_t_error_$","typeString":"function (bytes memory) pure returns (error)"}},"id":6371,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"794:8:45","memberName":"selector","nodeType":"MemberAccess","src":"787:15:45","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"770:32:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6380,"nodeType":"IfStatement","src":"766:185:45","trueBody":{"id":6379,"nodeType":"Block","src":"804:147:45","statements":[{"expression":{"arguments":[{"id":6376,"name":"resultRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6357,"src":"930:9:45","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":6373,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6434,"src":"903:11:45","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$6434_$","typeString":"type(library RevertCodec)"}},"id":6375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"915:14:45","memberName":"bubbleUpRevert","nodeType":"MemberAccess","referencedDeclaration":6433,"src":"903:26:45","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":6377,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"903:37:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6378,"nodeType":"ExpressionStatement","src":"903:37:45"}]}},{"assignments":[6382],"declarations":[{"constant":false,"id":6382,"mutability":"mutable","name":"resultRawLength","nameLocation":"969:15:45","nodeType":"VariableDeclaration","scope":6395,"src":"961:23:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6381,"name":"uint256","nodeType":"ElementaryTypeName","src":"961:7:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6385,"initialValue":{"expression":{"id":6383,"name":"resultRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6357,"src":"987:9:45","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":6384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"997:6:45","memberName":"length","nodeType":"MemberAccess","src":"987:16:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"961:42:45"},{"AST":{"nativeSrc":"1038:154:45","nodeType":"YulBlock","src":"1038:154:45","statements":[{"nativeSrc":"1052:33:45","nodeType":"YulAssignment","src":"1052:33:45","value":{"arguments":[{"name":"resultRaw","nativeSrc":"1069:9:45","nodeType":"YulIdentifier","src":"1069:9:45"},{"kind":"number","nativeSrc":"1080:4:45","nodeType":"YulLiteral","src":"1080:4:45","type":"","value":"0x04"}],"functionName":{"name":"add","nativeSrc":"1065:3:45","nodeType":"YulIdentifier","src":"1065:3:45"},"nativeSrc":"1065:20:45","nodeType":"YulFunctionCall","src":"1065:20:45"},"variableNames":[{"name":"resultRaw","nativeSrc":"1052:9:45","nodeType":"YulIdentifier","src":"1052:9:45"}]},{"expression":{"arguments":[{"name":"resultRaw","nativeSrc":"1126:9:45","nodeType":"YulIdentifier","src":"1126:9:45"},{"arguments":[{"name":"resultRawLength","nativeSrc":"1141:15:45","nodeType":"YulIdentifier","src":"1141:15:45"},{"kind":"number","nativeSrc":"1158:1:45","nodeType":"YulLiteral","src":"1158:1:45","type":"","value":"4"}],"functionName":{"name":"sub","nativeSrc":"1137:3:45","nodeType":"YulIdentifier","src":"1137:3:45"},"nativeSrc":"1137:23:45","nodeType":"YulFunctionCall","src":"1137:23:45"}],"functionName":{"name":"mstore","nativeSrc":"1119:6:45","nodeType":"YulIdentifier","src":"1119:6:45"},"nativeSrc":"1119:42:45","nodeType":"YulFunctionCall","src":"1119:42:45"},"nativeSrc":"1119:42:45","nodeType":"YulExpressionStatement","src":"1119:42:45"}]},"evmVersion":"cancun","externalReferences":[{"declaration":6357,"isOffset":false,"isSlot":false,"src":"1052:9:45","valueSize":1},{"declaration":6357,"isOffset":false,"isSlot":false,"src":"1069:9:45","valueSize":1},{"declaration":6357,"isOffset":false,"isSlot":false,"src":"1126:9:45","valueSize":1},{"declaration":6382,"isOffset":false,"isSlot":false,"src":"1141:15:45","valueSize":1}],"flags":["memory-safe"],"id":6386,"nodeType":"InlineAssembly","src":"1013:179:45"},{"expression":{"arguments":[{"id":6389,"name":"resultRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6357,"src":"1220:9:45","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":6391,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1232:5:45","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":6390,"name":"bytes","nodeType":"ElementaryTypeName","src":"1232:5:45","typeDescriptions":{}}}],"id":6392,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1231:7:45","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"}],"expression":{"id":6387,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1209:3:45","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":6388,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1213:6:45","memberName":"decode","nodeType":"MemberAccess","src":"1209:10:45","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":6393,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1209:30:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":6361,"id":6394,"nodeType":"Return","src":"1202:37:45"}]},"id":6396,"implemented":true,"kind":"function","modifiers":[],"name":"catchEncodedResult","nameLocation":"607:18:45","nodeType":"FunctionDefinition","parameters":{"id":6358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6357,"mutability":"mutable","name":"resultRaw","nameLocation":"639:9:45","nodeType":"VariableDeclaration","scope":6396,"src":"626:22:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6356,"name":"bytes","nodeType":"ElementaryTypeName","src":"626:5:45","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"625:24:45"},"returnParameters":{"id":6361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6360,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6396,"src":"673:12:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6359,"name":"bytes","nodeType":"ElementaryTypeName","src":"673:5:45","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"672:14:45"},"scope":6434,"src":"598:648:45","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6414,"nodeType":"Block","src":"1429:258:45","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6404,"name":"callResult","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6399,"src":"1443:10:45","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":6405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1454:6:45","memberName":"length","nodeType":"MemberAccess","src":"1443:17:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"34","id":6406,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1463:1:45","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"1443:21:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6412,"nodeType":"IfStatement","src":"1439:82:45","trueBody":{"id":6411,"nodeType":"Block","src":"1466:55:45","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6408,"name":"ErrorSelectorNotFound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6355,"src":"1487:21:45","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6409,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1487:23:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6410,"nodeType":"RevertStatement","src":"1480:30:45"}]}},{"AST":{"nativeSrc":"1555:126:45","nodeType":"YulBlock","src":"1555:126:45","statements":[{"nativeSrc":"1569:45:45","nodeType":"YulAssignment","src":"1569:45:45","value":{"arguments":[{"arguments":[{"name":"callResult","nativeSrc":"1596:10:45","nodeType":"YulIdentifier","src":"1596:10:45"},{"kind":"number","nativeSrc":"1608:4:45","nodeType":"YulLiteral","src":"1608:4:45","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1592:3:45","nodeType":"YulIdentifier","src":"1592:3:45"},"nativeSrc":"1592:21:45","nodeType":"YulFunctionCall","src":"1592:21:45"}],"functionName":{"name":"mload","nativeSrc":"1586:5:45","nodeType":"YulIdentifier","src":"1586:5:45"},"nativeSrc":"1586:28:45","nodeType":"YulFunctionCall","src":"1586:28:45"},"variableNames":[{"name":"errorSelector","nativeSrc":"1569:13:45","nodeType":"YulIdentifier","src":"1569:13:45"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":6399,"isOffset":false,"isSlot":false,"src":"1596:10:45","valueSize":1},{"declaration":6402,"isOffset":false,"isSlot":false,"src":"1569:13:45","valueSize":1}],"flags":["memory-safe"],"id":6413,"nodeType":"InlineAssembly","src":"1530:151:45"}]},"documentation":{"id":6397,"nodeType":"StructuredDocumentation","src":"1252:79:45","text":"@dev Returns the first 4 bytes in an array, reverting if the length is < 4."},"id":6415,"implemented":true,"kind":"function","modifiers":[],"name":"parseSelector","nameLocation":"1345:13:45","nodeType":"FunctionDefinition","parameters":{"id":6400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6399,"mutability":"mutable","name":"callResult","nameLocation":"1372:10:45","nodeType":"VariableDeclaration","scope":6415,"src":"1359:23:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6398,"name":"bytes","nodeType":"ElementaryTypeName","src":"1359:5:45","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1358:25:45"},"returnParameters":{"id":6403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6402,"mutability":"mutable","name":"errorSelector","nameLocation":"1414:13:45","nodeType":"VariableDeclaration","scope":6415,"src":"1407:20:45","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":6401,"name":"bytes4","nodeType":"ElementaryTypeName","src":"1407:6:45","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"1406:22:45"},"scope":6434,"src":"1336:351:45","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6432,"nodeType":"Block","src":"1804:441:45","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":6421,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6418,"src":"1881:10:45","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":6422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1892:6:45","memberName":"length","nodeType":"MemberAccess","src":"1881:17:45","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":6423,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1901:1:45","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1881:21:45","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":6430,"nodeType":"Block","src":"2184:55:45","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":6427,"name":"ErrorSelectorNotFound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6355,"src":"2205:21:45","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":6428,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2205:23:45","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":6429,"nodeType":"RevertStatement","src":"2198:30:45"}]},"id":6431,"nodeType":"IfStatement","src":"1877:362:45","trueBody":{"id":6426,"nodeType":"Block","src":"1904:274:45","statements":[{"AST":{"nativeSrc":"2033:135:45","nodeType":"YulBlock","src":"2033:135:45","statements":[{"nativeSrc":"2051:41:45","nodeType":"YulVariableDeclaration","src":"2051:41:45","value":{"arguments":[{"name":"returnData","nativeSrc":"2081:10:45","nodeType":"YulIdentifier","src":"2081:10:45"}],"functionName":{"name":"mload","nativeSrc":"2075:5:45","nodeType":"YulIdentifier","src":"2075:5:45"},"nativeSrc":"2075:17:45","nodeType":"YulFunctionCall","src":"2075:17:45"},"variables":[{"name":"return_data_size","nativeSrc":"2055:16:45","nodeType":"YulTypedName","src":"2055:16:45","type":""}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"2120:2:45","nodeType":"YulLiteral","src":"2120:2:45","type":"","value":"32"},{"name":"returnData","nativeSrc":"2124:10:45","nodeType":"YulIdentifier","src":"2124:10:45"}],"functionName":{"name":"add","nativeSrc":"2116:3:45","nodeType":"YulIdentifier","src":"2116:3:45"},"nativeSrc":"2116:19:45","nodeType":"YulFunctionCall","src":"2116:19:45"},{"name":"return_data_size","nativeSrc":"2137:16:45","nodeType":"YulIdentifier","src":"2137:16:45"}],"functionName":{"name":"revert","nativeSrc":"2109:6:45","nodeType":"YulIdentifier","src":"2109:6:45"},"nativeSrc":"2109:45:45","nodeType":"YulFunctionCall","src":"2109:45:45"},"nativeSrc":"2109:45:45","nodeType":"YulExpressionStatement","src":"2109:45:45"}]},"evmVersion":"cancun","externalReferences":[{"declaration":6418,"isOffset":false,"isSlot":false,"src":"2081:10:45","valueSize":1},{"declaration":6418,"isOffset":false,"isSlot":false,"src":"2124:10:45","valueSize":1}],"flags":["memory-safe"],"id":6425,"nodeType":"InlineAssembly","src":"2008:160:45"}]}}]},"documentation":{"id":6416,"nodeType":"StructuredDocumentation","src":"1693:43:45","text":"@dev Taken from Openzeppelin's Address."},"id":6433,"implemented":true,"kind":"function","modifiers":[],"name":"bubbleUpRevert","nameLocation":"1750:14:45","nodeType":"FunctionDefinition","parameters":{"id":6419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6418,"mutability":"mutable","name":"returnData","nameLocation":"1778:10:45","nodeType":"VariableDeclaration","scope":6433,"src":"1765:23:45","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":6417,"name":"bytes","nodeType":"ElementaryTypeName","src":"1765:5:45","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1764:25:45"},"returnParameters":{"id":6420,"nodeType":"ParameterList","parameters":[],"src":"1804:0:45"},"scope":6434,"src":"1741:504:45","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":6435,"src":"231:2016:45","usedErrors":[6352,6355],"usedEvents":[]}],"src":"46:2202:45"},"id":45},"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol","exportedSymbols":{"FixedPoint":[8208],"InputHelpers":[6193],"ScalingHelpers":[6848]},"id":6849,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6436,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:46"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"../math/FixedPoint.sol","id":6438,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6849,"sourceUnit":8209,"src":"72:52:46","symbolAliases":[{"foreign":{"id":6437,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"81:10:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","file":"./InputHelpers.sol","id":6440,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":6849,"sourceUnit":6194,"src":"125:50:46","symbolAliases":[{"foreign":{"id":6439,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6193,"src":"134:12:46","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"ScalingHelpers","contractDependencies":[],"contractKind":"library","documentation":{"id":6441,"nodeType":"StructuredDocumentation","src":"177:760:46","text":" @notice Helper functions to apply/undo token decimal and rate adjustments, rounding in the direction indicated.\n @dev To simplify Pool logic, all token balances and amounts are normalized to behave as if the token had\n 18 decimals. When comparing DAI (18 decimals) and USDC (6 decimals), 1 USDC and 1 DAI would both be\n represented as 1e18. This allows us to not consider differences in token decimals in the internal Pool\n math, simplifying it greatly.\n The Vault does not support tokens with more than 18 decimals (see `_MAX_TOKEN_DECIMALS` in `VaultStorage`),\n or tokens that do not implement `IERC20Metadata.decimals`.\n These helpers can also be used to scale amounts by other 18-decimal floating point values, such as rates."},"fullyImplemented":true,"id":6848,"linearizedBaseContracts":[6848],"name":"ScalingHelpers","nameLocation":"946:14:46","nodeType":"ContractDefinition","nodes":[{"global":false,"id":6443,"libraryName":{"id":6442,"name":"FixedPoint","nameLocations":["973:10:46"],"nodeType":"IdentifierPath","referencedDeclaration":8208,"src":"973:10:46"},"nodeType":"UsingForDirective","src":"967:23:46"},{"global":false,"id":6446,"libraryName":{"id":6444,"name":"ScalingHelpers","nameLocations":["1001:14:46"],"nodeType":"IdentifierPath","referencedDeclaration":6848,"src":"1001:14:46"},"nodeType":"UsingForDirective","src":"995:33:46","typeName":{"id":6445,"name":"uint256","nodeType":"ElementaryTypeName","src":"1020:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"body":{"id":6466,"nodeType":"Block","src":"1928:67:46","statements":[{"expression":{"arguments":[{"id":6463,"name":"tokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6453,"src":"1978:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6460,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6458,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6449,"src":"1946:6:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6459,"name":"scalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6451,"src":"1955:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1946:22:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6461,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1945:24:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1970:7:46","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":7953,"src":"1945:32:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":6464,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1945:43:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6457,"id":6465,"nodeType":"Return","src":"1938:50:46"}]},"documentation":{"id":6447,"nodeType":"StructuredDocumentation","src":"1252:513:46","text":" @notice Applies `scalingFactor` and `tokenRate` to `amount`.\n @dev This may result in a larger or equal value, depending on whether it needed scaling/rate adjustment or not.\n The result is rounded down.\n @param amount Amount to be scaled up to 18 decimals\n @param scalingFactor The token decimal scaling factor, `10^(18-tokenDecimals)`\n @param tokenRate The token rate scaling factor\n @return result The final 18-decimal precision result, rounded down"},"id":6467,"implemented":true,"kind":"function","modifiers":[],"name":"toScaled18ApplyRateRoundDown","nameLocation":"1779:28:46","nodeType":"FunctionDefinition","parameters":{"id":6454,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6449,"mutability":"mutable","name":"amount","nameLocation":"1825:6:46","nodeType":"VariableDeclaration","scope":6467,"src":"1817:14:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6448,"name":"uint256","nodeType":"ElementaryTypeName","src":"1817:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6451,"mutability":"mutable","name":"scalingFactor","nameLocation":"1849:13:46","nodeType":"VariableDeclaration","scope":6467,"src":"1841:21:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6450,"name":"uint256","nodeType":"ElementaryTypeName","src":"1841:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6453,"mutability":"mutable","name":"tokenRate","nameLocation":"1880:9:46","nodeType":"VariableDeclaration","scope":6467,"src":"1872:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6452,"name":"uint256","nodeType":"ElementaryTypeName","src":"1872:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1807:88:46"},"returnParameters":{"id":6457,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6456,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6467,"src":"1919:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6455,"name":"uint256","nodeType":"ElementaryTypeName","src":"1919:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1918:9:46"},"scope":6848,"src":"1770:225:46","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6487,"nodeType":"Block","src":"2671:65:46","statements":[{"expression":{"arguments":[{"id":6484,"name":"tokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6474,"src":"2719:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6479,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6470,"src":"2689:6:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6480,"name":"scalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6472,"src":"2698:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2689:22:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6482,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2688:24:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2713:5:46","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":7970,"src":"2688:30:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":6485,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2688:41:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6478,"id":6486,"nodeType":"Return","src":"2681:48:46"}]},"documentation":{"id":6468,"nodeType":"StructuredDocumentation","src":"2001:509:46","text":" @notice Applies `scalingFactor` and `tokenRate` to `amount`.\n @dev This may result in a larger or equal value, depending on whether it needed scaling/rate adjustment or not.\n The result is rounded up.\n @param amount Amount to be scaled up to 18 decimals\n @param scalingFactor The token decimal scaling factor, `10^(18-tokenDecimals)`\n @param tokenRate The token rate scaling factor\n @return result The final 18-decimal precision result, rounded up"},"id":6488,"implemented":true,"kind":"function","modifiers":[],"name":"toScaled18ApplyRateRoundUp","nameLocation":"2524:26:46","nodeType":"FunctionDefinition","parameters":{"id":6475,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6470,"mutability":"mutable","name":"amount","nameLocation":"2568:6:46","nodeType":"VariableDeclaration","scope":6488,"src":"2560:14:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6469,"name":"uint256","nodeType":"ElementaryTypeName","src":"2560:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6472,"mutability":"mutable","name":"scalingFactor","nameLocation":"2592:13:46","nodeType":"VariableDeclaration","scope":6488,"src":"2584:21:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6471,"name":"uint256","nodeType":"ElementaryTypeName","src":"2584:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6474,"mutability":"mutable","name":"tokenRate","nameLocation":"2623:9:46","nodeType":"VariableDeclaration","scope":6488,"src":"2615:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6473,"name":"uint256","nodeType":"ElementaryTypeName","src":"2615:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2550:88:46"},"returnParameters":{"id":6478,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6477,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6488,"src":"2662:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6476,"name":"uint256","nodeType":"ElementaryTypeName","src":"2662:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2661:9:46"},"scope":6848,"src":"2515:221:46","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6508,"nodeType":"Block","src":"3432:266:46","statements":[{"expression":{"arguments":[{"id":6502,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6491,"src":"3657:6:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6503,"name":"scalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6493,"src":"3665:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6504,"name":"tokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6495,"src":"3681:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3665:25:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6500,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"3638:10:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$8208_$","typeString":"type(library FixedPoint)"}},"id":6501,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3649:7:46","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":7990,"src":"3638:18:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":6506,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3638:53:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6499,"id":6507,"nodeType":"Return","src":"3631:60:46"}]},"documentation":{"id":6489,"nodeType":"StructuredDocumentation","src":"2742:533:46","text":" @notice Reverses the `scalingFactor` and `tokenRate` applied to `amount`.\n @dev This may result in a smaller or equal value, depending on whether it needed scaling/rate adjustment or not.\n The result is rounded down.\n @param amount Amount to be scaled down to native token decimals\n @param scalingFactor The token decimal scaling factor, `10^(18-tokenDecimals)`\n @param tokenRate The token rate scaling factor\n @return result The final native decimal result, rounded down"},"id":6509,"implemented":true,"kind":"function","modifiers":[],"name":"toRawUndoRateRoundDown","nameLocation":"3289:22:46","nodeType":"FunctionDefinition","parameters":{"id":6496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6491,"mutability":"mutable","name":"amount","nameLocation":"3329:6:46","nodeType":"VariableDeclaration","scope":6509,"src":"3321:14:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6490,"name":"uint256","nodeType":"ElementaryTypeName","src":"3321:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6493,"mutability":"mutable","name":"scalingFactor","nameLocation":"3353:13:46","nodeType":"VariableDeclaration","scope":6509,"src":"3345:21:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6492,"name":"uint256","nodeType":"ElementaryTypeName","src":"3345:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6495,"mutability":"mutable","name":"tokenRate","nameLocation":"3384:9:46","nodeType":"VariableDeclaration","scope":6509,"src":"3376:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6494,"name":"uint256","nodeType":"ElementaryTypeName","src":"3376:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3311:88:46"},"returnParameters":{"id":6499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6498,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6509,"src":"3423:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6497,"name":"uint256","nodeType":"ElementaryTypeName","src":"3423:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3422:9:46"},"scope":6848,"src":"3280:418:46","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6529,"nodeType":"Block","src":"4388:264:46","statements":[{"expression":{"arguments":[{"id":6523,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6512,"src":"4611:6:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6524,"name":"scalingFactor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6514,"src":"4619:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":6525,"name":"tokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6516,"src":"4635:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4619:25:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6521,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"4594:10:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$8208_$","typeString":"type(library FixedPoint)"}},"id":6522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4605:5:46","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":8006,"src":"4594:16:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":6527,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4594:51:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6520,"id":6528,"nodeType":"Return","src":"4587:58:46"}]},"documentation":{"id":6510,"nodeType":"StructuredDocumentation","src":"3704:529:46","text":" @notice Reverses the `scalingFactor` and `tokenRate` applied to `amount`.\n @dev This may result in a smaller or equal value, depending on whether it needed scaling/rate adjustment or not.\n The result is rounded up.\n @param amount Amount to be scaled down to native token decimals\n @param scalingFactor The token decimal scaling factor, `10^(18-tokenDecimals)`\n @param tokenRate The token rate scaling factor\n @return result The final native decimal result, rounded up"},"id":6530,"implemented":true,"kind":"function","modifiers":[],"name":"toRawUndoRateRoundUp","nameLocation":"4247:20:46","nodeType":"FunctionDefinition","parameters":{"id":6517,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6512,"mutability":"mutable","name":"amount","nameLocation":"4285:6:46","nodeType":"VariableDeclaration","scope":6530,"src":"4277:14:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6511,"name":"uint256","nodeType":"ElementaryTypeName","src":"4277:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6514,"mutability":"mutable","name":"scalingFactor","nameLocation":"4309:13:46","nodeType":"VariableDeclaration","scope":6530,"src":"4301:21:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6513,"name":"uint256","nodeType":"ElementaryTypeName","src":"4301:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":6516,"mutability":"mutable","name":"tokenRate","nameLocation":"4340:9:46","nodeType":"VariableDeclaration","scope":6530,"src":"4332:17:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6515,"name":"uint256","nodeType":"ElementaryTypeName","src":"4332:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4267:88:46"},"returnParameters":{"id":6520,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6519,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6530,"src":"4379:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6518,"name":"uint256","nodeType":"ElementaryTypeName","src":"4379:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4378:9:46"},"scope":6848,"src":"4238:414:46","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6553,"nodeType":"Block","src":"4952:280:46","statements":[{"assignments":[6540],"declarations":[{"constant":false,"id":6540,"mutability":"mutable","name":"length","nameLocation":"4970:6:46","nodeType":"VariableDeclaration","scope":6553,"src":"4962:14:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6539,"name":"uint256","nodeType":"ElementaryTypeName","src":"4962:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6543,"initialValue":{"expression":{"id":6541,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6533,"src":"4979:4:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4984:6:46","memberName":"length","nodeType":"MemberAccess","src":"4979:11:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4962:28:46"},{"expression":{"arguments":[{"id":6547,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6540,"src":"5036:6:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":6548,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6536,"src":"5044:2:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5047:6:46","memberName":"length","nodeType":"MemberAccess","src":"5044:9:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6544,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6193,"src":"5000:12:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$6193_$","typeString":"type(library InputHelpers)"}},"id":6546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5013:22:46","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":5926,"src":"5000:35:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":6550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5000:54:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6551,"nodeType":"ExpressionStatement","src":"5000:54:46"},{"AST":{"nativeSrc":"5146:80:46","nodeType":"YulBlock","src":"5146:80:46","statements":[{"expression":{"arguments":[{"arguments":[{"name":"to","nativeSrc":"5170:2:46","nodeType":"YulIdentifier","src":"5170:2:46"},{"kind":"number","nativeSrc":"5174:4:46","nodeType":"YulLiteral","src":"5174:4:46","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"5166:3:46","nodeType":"YulIdentifier","src":"5166:3:46"},"nativeSrc":"5166:13:46","nodeType":"YulFunctionCall","src":"5166:13:46"},{"arguments":[{"name":"from","nativeSrc":"5185:4:46","nodeType":"YulIdentifier","src":"5185:4:46"},{"kind":"number","nativeSrc":"5191:4:46","nodeType":"YulLiteral","src":"5191:4:46","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"5181:3:46","nodeType":"YulIdentifier","src":"5181:3:46"},"nativeSrc":"5181:15:46","nodeType":"YulFunctionCall","src":"5181:15:46"},{"arguments":[{"name":"length","nativeSrc":"5202:6:46","nodeType":"YulIdentifier","src":"5202:6:46"},{"kind":"number","nativeSrc":"5210:4:46","nodeType":"YulLiteral","src":"5210:4:46","type":"","value":"0x20"}],"functionName":{"name":"mul","nativeSrc":"5198:3:46","nodeType":"YulIdentifier","src":"5198:3:46"},"nativeSrc":"5198:17:46","nodeType":"YulFunctionCall","src":"5198:17:46"}],"functionName":{"name":"mcopy","nativeSrc":"5160:5:46","nodeType":"YulIdentifier","src":"5160:5:46"},"nativeSrc":"5160:56:46","nodeType":"YulFunctionCall","src":"5160:56:46"},"nativeSrc":"5160:56:46","nodeType":"YulExpressionStatement","src":"5160:56:46"}]},"evmVersion":"cancun","externalReferences":[{"declaration":6533,"isOffset":false,"isSlot":false,"src":"5185:4:46","valueSize":1},{"declaration":6540,"isOffset":false,"isSlot":false,"src":"5202:6:46","valueSize":1},{"declaration":6536,"isOffset":false,"isSlot":false,"src":"5170:2:46","valueSize":1}],"flags":["memory-safe"],"id":6552,"nodeType":"InlineAssembly","src":"5121:105:46"}]},"id":6554,"implemented":true,"kind":"function","modifiers":[],"name":"copyToArray","nameLocation":"4882:11:46","nodeType":"FunctionDefinition","parameters":{"id":6537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6533,"mutability":"mutable","name":"from","nameLocation":"4911:4:46","nodeType":"VariableDeclaration","scope":6554,"src":"4894:21:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6531,"name":"uint256","nodeType":"ElementaryTypeName","src":"4894:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6532,"nodeType":"ArrayTypeName","src":"4894:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":6536,"mutability":"mutable","name":"to","nameLocation":"4934:2:46","nodeType":"VariableDeclaration","scope":6554,"src":"4917:19:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6534,"name":"uint256","nodeType":"ElementaryTypeName","src":"4917:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6535,"nodeType":"ArrayTypeName","src":"4917:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4893:44:46"},"returnParameters":{"id":6538,"nodeType":"ParameterList","parameters":[],"src":"4952:0:46"},"scope":6848,"src":"4873:359:46","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6610,"nodeType":"Block","src":"5892:301:46","statements":[{"assignments":[6568],"declarations":[{"constant":false,"id":6568,"mutability":"mutable","name":"length","nameLocation":"5910:6:46","nodeType":"VariableDeclaration","scope":6610,"src":"5902:14:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6567,"name":"uint256","nodeType":"ElementaryTypeName","src":"5902:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6571,"initialValue":{"expression":{"id":6569,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6558,"src":"5919:7:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5927:6:46","memberName":"length","nodeType":"MemberAccess","src":"5919:14:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5902:31:46"},{"expression":{"arguments":[{"id":6575,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6568,"src":"5979:6:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":6576,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6561,"src":"5987:14:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6002:6:46","memberName":"length","nodeType":"MemberAccess","src":"5987:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":6578,"name":"tokenRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6564,"src":"6010:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6021:6:46","memberName":"length","nodeType":"MemberAccess","src":"6010:17:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6572,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6193,"src":"5943:12:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$6193_$","typeString":"type(library InputHelpers)"}},"id":6574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5956:22:46","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":5948,"src":"5943:35:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256) pure"}},"id":6580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5943:85:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6581,"nodeType":"ExpressionStatement","src":"5943:85:46"},{"body":{"id":6608,"nodeType":"Block","src":"6076:111:46","statements":[{"expression":{"id":6606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6592,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6558,"src":"6090:7:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6594,"indexExpression":{"id":6593,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6583,"src":"6098:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6090:10:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":6599,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6561,"src":"6143:14:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6601,"indexExpression":{"id":6600,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6583,"src":"6158:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6143:17:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":6602,"name":"tokenRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6564,"src":"6162:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6604,"indexExpression":{"id":6603,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6583,"src":"6173:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6162:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":6595,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6558,"src":"6103:7:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6597,"indexExpression":{"id":6596,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6583,"src":"6111:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6103:10:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6598,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6114:28:46","memberName":"toScaled18ApplyRateRoundDown","nodeType":"MemberAccess","referencedDeclaration":6467,"src":"6103:39:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":6605,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6103:73:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6090:86:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6607,"nodeType":"ExpressionStatement","src":"6090:86:46"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6586,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6583,"src":"6059:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6587,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6568,"src":"6063:6:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6059:10:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6609,"initializationExpression":{"assignments":[6583],"declarations":[{"constant":false,"id":6583,"mutability":"mutable","name":"i","nameLocation":"6052:1:46","nodeType":"VariableDeclaration","scope":6609,"src":"6044:9:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6582,"name":"uint256","nodeType":"ElementaryTypeName","src":"6044:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6585,"initialValue":{"hexValue":"30","id":6584,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6056:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6044:13:46"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":6590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"6071:3:46","subExpression":{"id":6589,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6583,"src":"6073:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6591,"nodeType":"ExpressionStatement","src":"6071:3:46"},"nodeType":"ForStatement","src":"6039:148:46"}]},"documentation":{"id":6555,"nodeType":"StructuredDocumentation","src":"5238:474:46","text":" @notice Same as `toScaled18ApplyRateRoundDown`, but for an entire array.\n @dev This function does not return anything, but instead *mutates* the `amounts` array.\n @param amounts Amounts to be scaled up to 18 decimals, sorted in token registration order\n @param scalingFactors The token decimal scaling factors, sorted in token registration order\n @param tokenRates The token rate scaling factors, sorted in token registration order"},"id":6611,"implemented":true,"kind":"function","modifiers":[],"name":"toScaled18ApplyRateRoundDownArray","nameLocation":"5726:33:46","nodeType":"FunctionDefinition","parameters":{"id":6565,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6558,"mutability":"mutable","name":"amounts","nameLocation":"5786:7:46","nodeType":"VariableDeclaration","scope":6611,"src":"5769:24:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6556,"name":"uint256","nodeType":"ElementaryTypeName","src":"5769:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6557,"nodeType":"ArrayTypeName","src":"5769:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":6561,"mutability":"mutable","name":"scalingFactors","nameLocation":"5820:14:46","nodeType":"VariableDeclaration","scope":6611,"src":"5803:31:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6559,"name":"uint256","nodeType":"ElementaryTypeName","src":"5803:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6560,"nodeType":"ArrayTypeName","src":"5803:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":6564,"mutability":"mutable","name":"tokenRates","nameLocation":"5861:10:46","nodeType":"VariableDeclaration","scope":6611,"src":"5844:27:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6562,"name":"uint256","nodeType":"ElementaryTypeName","src":"5844:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6563,"nodeType":"ArrayTypeName","src":"5844:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"5759:118:46"},"returnParameters":{"id":6566,"nodeType":"ParameterList","parameters":[],"src":"5892:0:46"},"scope":6848,"src":"5717:476:46","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6683,"nodeType":"Block","src":"6920:408:46","statements":[{"assignments":[6628],"declarations":[{"constant":false,"id":6628,"mutability":"mutable","name":"length","nameLocation":"6938:6:46","nodeType":"VariableDeclaration","scope":6683,"src":"6930:14:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6627,"name":"uint256","nodeType":"ElementaryTypeName","src":"6930:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6631,"initialValue":{"expression":{"id":6629,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6615,"src":"6947:7:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6955:6:46","memberName":"length","nodeType":"MemberAccess","src":"6947:14:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6930:31:46"},{"expression":{"arguments":[{"id":6635,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6628,"src":"7007:6:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":6636,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6618,"src":"7015:14:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7030:6:46","memberName":"length","nodeType":"MemberAccess","src":"7015:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":6638,"name":"tokenRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6621,"src":"7038:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7049:6:46","memberName":"length","nodeType":"MemberAccess","src":"7038:17:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6632,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6193,"src":"6971:12:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$6193_$","typeString":"type(library InputHelpers)"}},"id":6634,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6984:22:46","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":5948,"src":"6971:35:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256) pure"}},"id":6640,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6971:85:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6641,"nodeType":"ExpressionStatement","src":"6971:85:46"},{"assignments":[6646],"declarations":[{"constant":false,"id":6646,"mutability":"mutable","name":"amountsScaled18","nameLocation":"7083:15:46","nodeType":"VariableDeclaration","scope":6683,"src":"7066:32:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6644,"name":"uint256","nodeType":"ElementaryTypeName","src":"7066:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6645,"nodeType":"ArrayTypeName","src":"7066:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":6652,"initialValue":{"arguments":[{"id":6650,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6628,"src":"7115:6:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6649,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"7101:13:46","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":6647,"name":"uint256","nodeType":"ElementaryTypeName","src":"7105:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6648,"nodeType":"ArrayTypeName","src":"7105:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":6651,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7101:21:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"7066:56:46"},{"body":{"id":6679,"nodeType":"Block","src":"7170:119:46","statements":[{"expression":{"id":6677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6663,"name":"amountsScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6646,"src":"7184:15:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6665,"indexExpression":{"id":6664,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6654,"src":"7200:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7184:18:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":6670,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6618,"src":"7245:14:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6672,"indexExpression":{"id":6671,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6654,"src":"7260:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7245:17:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":6673,"name":"tokenRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6621,"src":"7264:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6675,"indexExpression":{"id":6674,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6654,"src":"7275:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7264:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":6666,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6615,"src":"7205:7:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6668,"indexExpression":{"id":6667,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6654,"src":"7213:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7205:10:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7216:28:46","memberName":"toScaled18ApplyRateRoundDown","nodeType":"MemberAccess","referencedDeclaration":6467,"src":"7205:39:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":6676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7205:73:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7184:94:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6678,"nodeType":"ExpressionStatement","src":"7184:94:46"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6657,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6654,"src":"7153:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6658,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6628,"src":"7157:6:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7153:10:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6680,"initializationExpression":{"assignments":[6654],"declarations":[{"constant":false,"id":6654,"mutability":"mutable","name":"i","nameLocation":"7146:1:46","nodeType":"VariableDeclaration","scope":6680,"src":"7138:9:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6653,"name":"uint256","nodeType":"ElementaryTypeName","src":"7138:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6656,"initialValue":{"hexValue":"30","id":6655,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7150:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"7138:13:46"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":6661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"7165:3:46","subExpression":{"id":6660,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6654,"src":"7167:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6662,"nodeType":"ExpressionStatement","src":"7165:3:46"},"nodeType":"ForStatement","src":"7133:156:46"},{"expression":{"id":6681,"name":"amountsScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6646,"src":"7306:15:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":6626,"id":6682,"nodeType":"Return","src":"7299:22:46"}]},"documentation":{"id":6612,"nodeType":"StructuredDocumentation","src":"6199:510:46","text":" @notice Same as `toScaled18ApplyRateRoundDown`, but returns a new array, leaving the original intact.\n @param amounts Amounts to be scaled up to 18 decimals, sorted in token registration order\n @param scalingFactors The token decimal scaling factors, sorted in token registration order\n @param tokenRates The token rate scaling factors, sorted in token registration order\n @return results The final 18 decimal results, sorted in token registration order, rounded down"},"id":6684,"implemented":true,"kind":"function","modifiers":[],"name":"copyToScaled18ApplyRateRoundDownArray","nameLocation":"6723:37:46","nodeType":"FunctionDefinition","parameters":{"id":6622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6615,"mutability":"mutable","name":"amounts","nameLocation":"6787:7:46","nodeType":"VariableDeclaration","scope":6684,"src":"6770:24:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6613,"name":"uint256","nodeType":"ElementaryTypeName","src":"6770:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6614,"nodeType":"ArrayTypeName","src":"6770:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":6618,"mutability":"mutable","name":"scalingFactors","nameLocation":"6821:14:46","nodeType":"VariableDeclaration","scope":6684,"src":"6804:31:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6616,"name":"uint256","nodeType":"ElementaryTypeName","src":"6804:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6617,"nodeType":"ArrayTypeName","src":"6804:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":6621,"mutability":"mutable","name":"tokenRates","nameLocation":"6862:10:46","nodeType":"VariableDeclaration","scope":6684,"src":"6845:27:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6619,"name":"uint256","nodeType":"ElementaryTypeName","src":"6845:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6620,"nodeType":"ArrayTypeName","src":"6845:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"6760:118:46"},"returnParameters":{"id":6626,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6625,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6684,"src":"6902:16:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6623,"name":"uint256","nodeType":"ElementaryTypeName","src":"6902:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6624,"nodeType":"ArrayTypeName","src":"6902:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"6901:18:46"},"scope":6848,"src":"6714:614:46","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6740,"nodeType":"Block","src":"7984:299:46","statements":[{"assignments":[6698],"declarations":[{"constant":false,"id":6698,"mutability":"mutable","name":"length","nameLocation":"8002:6:46","nodeType":"VariableDeclaration","scope":6740,"src":"7994:14:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6697,"name":"uint256","nodeType":"ElementaryTypeName","src":"7994:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6701,"initialValue":{"expression":{"id":6699,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6688,"src":"8011:7:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8019:6:46","memberName":"length","nodeType":"MemberAccess","src":"8011:14:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7994:31:46"},{"expression":{"arguments":[{"id":6705,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6698,"src":"8071:6:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":6706,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6691,"src":"8079:14:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8094:6:46","memberName":"length","nodeType":"MemberAccess","src":"8079:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":6708,"name":"tokenRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6694,"src":"8102:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8113:6:46","memberName":"length","nodeType":"MemberAccess","src":"8102:17:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6702,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6193,"src":"8035:12:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$6193_$","typeString":"type(library InputHelpers)"}},"id":6704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8048:22:46","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":5948,"src":"8035:35:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256) pure"}},"id":6710,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8035:85:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6711,"nodeType":"ExpressionStatement","src":"8035:85:46"},{"body":{"id":6738,"nodeType":"Block","src":"8168:109:46","statements":[{"expression":{"id":6736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6722,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6688,"src":"8182:7:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6724,"indexExpression":{"id":6723,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6713,"src":"8190:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8182:10:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":6729,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6691,"src":"8233:14:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6731,"indexExpression":{"id":6730,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6713,"src":"8248:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8233:17:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":6732,"name":"tokenRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6694,"src":"8252:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6734,"indexExpression":{"id":6733,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6713,"src":"8263:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8252:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":6725,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6688,"src":"8195:7:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6727,"indexExpression":{"id":6726,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6713,"src":"8203:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8195:10:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8206:26:46","memberName":"toScaled18ApplyRateRoundUp","nodeType":"MemberAccess","referencedDeclaration":6488,"src":"8195:37:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":6735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8195:71:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8182:84:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6737,"nodeType":"ExpressionStatement","src":"8182:84:46"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6716,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6713,"src":"8151:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6717,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6698,"src":"8155:6:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8151:10:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6739,"initializationExpression":{"assignments":[6713],"declarations":[{"constant":false,"id":6713,"mutability":"mutable","name":"i","nameLocation":"8144:1:46","nodeType":"VariableDeclaration","scope":6739,"src":"8136:9:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6712,"name":"uint256","nodeType":"ElementaryTypeName","src":"8136:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6715,"initialValue":{"hexValue":"30","id":6714,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8148:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8136:13:46"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":6720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"8163:3:46","subExpression":{"id":6719,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6713,"src":"8165:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6721,"nodeType":"ExpressionStatement","src":"8163:3:46"},"nodeType":"ForStatement","src":"8131:146:46"}]},"documentation":{"id":6685,"nodeType":"StructuredDocumentation","src":"7334:472:46","text":" @notice Same as `toScaled18ApplyRateRoundUp`, but for an entire array.\n @dev This function does not return anything, but instead *mutates* the `amounts` array.\n @param amounts Amounts to be scaled up to 18 decimals, sorted in token registration order\n @param scalingFactors The token decimal scaling factors, sorted in token registration order\n @param tokenRates The token rate scaling factors, sorted in token registration order"},"id":6741,"implemented":true,"kind":"function","modifiers":[],"name":"toScaled18ApplyRateRoundUpArray","nameLocation":"7820:31:46","nodeType":"FunctionDefinition","parameters":{"id":6695,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6688,"mutability":"mutable","name":"amounts","nameLocation":"7878:7:46","nodeType":"VariableDeclaration","scope":6741,"src":"7861:24:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6686,"name":"uint256","nodeType":"ElementaryTypeName","src":"7861:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6687,"nodeType":"ArrayTypeName","src":"7861:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":6691,"mutability":"mutable","name":"scalingFactors","nameLocation":"7912:14:46","nodeType":"VariableDeclaration","scope":6741,"src":"7895:31:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6689,"name":"uint256","nodeType":"ElementaryTypeName","src":"7895:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6690,"nodeType":"ArrayTypeName","src":"7895:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":6694,"mutability":"mutable","name":"tokenRates","nameLocation":"7953:10:46","nodeType":"VariableDeclaration","scope":6741,"src":"7936:27:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6692,"name":"uint256","nodeType":"ElementaryTypeName","src":"7936:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6693,"nodeType":"ArrayTypeName","src":"7936:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7851:118:46"},"returnParameters":{"id":6696,"nodeType":"ParameterList","parameters":[],"src":"7984:0:46"},"scope":6848,"src":"7811:472:46","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6813,"nodeType":"Block","src":"9004:406:46","statements":[{"assignments":[6758],"declarations":[{"constant":false,"id":6758,"mutability":"mutable","name":"length","nameLocation":"9022:6:46","nodeType":"VariableDeclaration","scope":6813,"src":"9014:14:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6757,"name":"uint256","nodeType":"ElementaryTypeName","src":"9014:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6761,"initialValue":{"expression":{"id":6759,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6745,"src":"9031:7:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9039:6:46","memberName":"length","nodeType":"MemberAccess","src":"9031:14:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9014:31:46"},{"expression":{"arguments":[{"id":6765,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6758,"src":"9091:6:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":6766,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6748,"src":"9099:14:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9114:6:46","memberName":"length","nodeType":"MemberAccess","src":"9099:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":6768,"name":"tokenRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6751,"src":"9122:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9133:6:46","memberName":"length","nodeType":"MemberAccess","src":"9122:17:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6762,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6193,"src":"9055:12:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$6193_$","typeString":"type(library InputHelpers)"}},"id":6764,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9068:22:46","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":5948,"src":"9055:35:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256) pure"}},"id":6770,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9055:85:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6771,"nodeType":"ExpressionStatement","src":"9055:85:46"},{"assignments":[6776],"declarations":[{"constant":false,"id":6776,"mutability":"mutable","name":"amountsScaled18","nameLocation":"9167:15:46","nodeType":"VariableDeclaration","scope":6813,"src":"9150:32:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6774,"name":"uint256","nodeType":"ElementaryTypeName","src":"9150:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6775,"nodeType":"ArrayTypeName","src":"9150:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":6782,"initialValue":{"arguments":[{"id":6780,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6758,"src":"9199:6:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6779,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"9185:13:46","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":6777,"name":"uint256","nodeType":"ElementaryTypeName","src":"9189:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6778,"nodeType":"ArrayTypeName","src":"9189:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":6781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9185:21:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"9150:56:46"},{"body":{"id":6809,"nodeType":"Block","src":"9254:117:46","statements":[{"expression":{"id":6807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":6793,"name":"amountsScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6776,"src":"9268:15:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6795,"indexExpression":{"id":6794,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6784,"src":"9284:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9268:18:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":6800,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6748,"src":"9327:14:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6802,"indexExpression":{"id":6801,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6784,"src":"9342:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9327:17:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":6803,"name":"tokenRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6751,"src":"9346:10:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6805,"indexExpression":{"id":6804,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6784,"src":"9357:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9346:13:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":6796,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6745,"src":"9289:7:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":6798,"indexExpression":{"id":6797,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6784,"src":"9297:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9289:10:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9300:26:46","memberName":"toScaled18ApplyRateRoundUp","nodeType":"MemberAccess","referencedDeclaration":6488,"src":"9289:37:46","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":6806,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9289:71:46","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9268:92:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6808,"nodeType":"ExpressionStatement","src":"9268:92:46"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6787,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6784,"src":"9237:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":6788,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6758,"src":"9241:6:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9237:10:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":6810,"initializationExpression":{"assignments":[6784],"declarations":[{"constant":false,"id":6784,"mutability":"mutable","name":"i","nameLocation":"9230:1:46","nodeType":"VariableDeclaration","scope":6810,"src":"9222:9:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6783,"name":"uint256","nodeType":"ElementaryTypeName","src":"9222:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6786,"initialValue":{"hexValue":"30","id":6785,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9234:1:46","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9222:13:46"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":6791,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"9249:3:46","subExpression":{"id":6790,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6784,"src":"9251:1:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6792,"nodeType":"ExpressionStatement","src":"9249:3:46"},"nodeType":"ForStatement","src":"9217:154:46"},{"expression":{"id":6811,"name":"amountsScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6776,"src":"9388:15:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":6756,"id":6812,"nodeType":"Return","src":"9381:22:46"}]},"documentation":{"id":6742,"nodeType":"StructuredDocumentation","src":"8289:506:46","text":" @notice Same as `toScaled18ApplyRateRoundUp`, but returns a new array, leaving the original intact.\n @param amounts Amounts to be scaled up to 18 decimals, sorted in token registration order\n @param scalingFactors The token decimal scaling factors, sorted in token registration order\n @param tokenRates The token rate scaling factors, sorted in token registration order\n @return results The final 18 decimal results, sorted in token registration order, rounded up"},"id":6814,"implemented":true,"kind":"function","modifiers":[],"name":"copyToScaled18ApplyRateRoundUpArray","nameLocation":"8809:35:46","nodeType":"FunctionDefinition","parameters":{"id":6752,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6745,"mutability":"mutable","name":"amounts","nameLocation":"8871:7:46","nodeType":"VariableDeclaration","scope":6814,"src":"8854:24:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6743,"name":"uint256","nodeType":"ElementaryTypeName","src":"8854:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6744,"nodeType":"ArrayTypeName","src":"8854:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":6748,"mutability":"mutable","name":"scalingFactors","nameLocation":"8905:14:46","nodeType":"VariableDeclaration","scope":6814,"src":"8888:31:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6746,"name":"uint256","nodeType":"ElementaryTypeName","src":"8888:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6747,"nodeType":"ArrayTypeName","src":"8888:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":6751,"mutability":"mutable","name":"tokenRates","nameLocation":"8946:10:46","nodeType":"VariableDeclaration","scope":6814,"src":"8929:27:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6749,"name":"uint256","nodeType":"ElementaryTypeName","src":"8929:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6750,"nodeType":"ArrayTypeName","src":"8929:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8844:118:46"},"returnParameters":{"id":6756,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6755,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6814,"src":"8986:16:46","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":6753,"name":"uint256","nodeType":"ElementaryTypeName","src":"8986:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6754,"nodeType":"ArrayTypeName","src":"8986:9:46","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8985:18:46"},"scope":6848,"src":"8800:610:46","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6846,"nodeType":"Block","src":"10004:387:46","statements":[{"assignments":[6823],"declarations":[{"constant":false,"id":6823,"mutability":"mutable","name":"roundedRate","nameLocation":"10022:11:46","nodeType":"VariableDeclaration","scope":6846,"src":"10014:19:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6822,"name":"uint256","nodeType":"ElementaryTypeName","src":"10014:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":6824,"nodeType":"VariableDeclarationStatement","src":"10014:19:46"},{"id":6836,"nodeType":"UncheckedBlock","src":"10242:89:46","statements":[{"expression":{"id":6834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":6825,"name":"roundedRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6823,"src":"10266:11:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6826,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6817,"src":"10281:4:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"expression":{"id":6827,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"10288:10:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$8208_$","typeString":"type(library FixedPoint)"}},"id":6828,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10299:3:46","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":7920,"src":"10288:14:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10281:21:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":6830,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10280:23:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":6831,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"10306:10:46","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$8208_$","typeString":"type(library FixedPoint)"}},"id":6832,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10317:3:46","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":7920,"src":"10306:14:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10280:40:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10266:54:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6835,"nodeType":"ExpressionStatement","src":"10266:54:46"}]},{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6837,"name":"roundedRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6823,"src":"10347:11:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":6838,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6817,"src":"10362:4:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10347:19:46","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":6841,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6817,"src":"10376:4:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":6842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10383:1:46","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10376:8:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"10347:37:46","trueExpression":{"id":6840,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6817,"src":"10369:4:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6821,"id":6845,"nodeType":"Return","src":"10340:44:46"}]},"documentation":{"id":6815,"nodeType":"StructuredDocumentation","src":"9416:509:46","text":" @notice Rounds up a rate informed by a rate provider.\n @dev Rates calculated by an external rate provider have rounding errors. Intuitively, a rate provider\n rounds the rate down so the pool math is executed with conservative amounts. However, when upscaling or\n downscaling the amount out, the rate should be rounded up to make sure the amounts scaled are conservative.\n @param rate The original rate\n @return roundedRate The final rate, with rounding applied"},"id":6847,"implemented":true,"kind":"function","modifiers":[],"name":"computeRateRoundUp","nameLocation":"9939:18:46","nodeType":"FunctionDefinition","parameters":{"id":6818,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6817,"mutability":"mutable","name":"rate","nameLocation":"9966:4:46","nodeType":"VariableDeclaration","scope":6847,"src":"9958:12:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6816,"name":"uint256","nodeType":"ElementaryTypeName","src":"9958:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9957:14:46"},"returnParameters":{"id":6821,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6820,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6847,"src":"9995:7:46","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6819,"name":"uint256","nodeType":"ElementaryTypeName","src":"9995:7:46","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9994:9:46"},"scope":6848,"src":"9930:461:46","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":6849,"src":"938:9455:46","usedErrors":[],"usedEvents":[]}],"src":"46:10348:46"},"id":46},"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","exportedSymbols":{"AddressArraySlotType":[6864],"AddressToUintMappingSlot":[6860],"IERC20":[40109],"SlotDerivation":[10072],"StorageSlotExtension":[10285],"TokenDeltaMappingSlotType":[6858],"TransientStorageHelpers":[7442],"UintToAddressToBooleanMappingSlot":[6862]},"id":7443,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":6850,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:47"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":6852,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7443,"sourceUnit":40110,"src":"72:72:47","symbolAliases":[{"foreign":{"id":6851,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"81:6:47","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","file":"../openzeppelin/StorageSlotExtension.sol","id":6854,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7443,"sourceUnit":10286,"src":"146:80:47","symbolAliases":[{"foreign":{"id":6853,"name":"StorageSlotExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10285,"src":"155:20:47","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol","file":"../openzeppelin/SlotDerivation.sol","id":6856,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7443,"sourceUnit":10073,"src":"227:68:47","symbolAliases":[{"foreign":{"id":6855,"name":"SlotDerivation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10072,"src":"236:14:47","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"TokenDeltaMappingSlotType","id":6858,"name":"TokenDeltaMappingSlotType","nameLocation":"302:25:47","nodeType":"UserDefinedValueTypeDefinition","src":"297:42:47","underlyingType":{"id":6857,"name":"bytes32","nodeType":"ElementaryTypeName","src":"331:7:47","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"canonicalName":"AddressToUintMappingSlot","id":6860,"name":"AddressToUintMappingSlot","nameLocation":"345:24:47","nodeType":"UserDefinedValueTypeDefinition","src":"340:41:47","underlyingType":{"id":6859,"name":"bytes32","nodeType":"ElementaryTypeName","src":"373:7:47","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"canonicalName":"UintToAddressToBooleanMappingSlot","id":6862,"name":"UintToAddressToBooleanMappingSlot","nameLocation":"387:33:47","nodeType":"UserDefinedValueTypeDefinition","src":"382:50:47","underlyingType":{"id":6861,"name":"bytes32","nodeType":"ElementaryTypeName","src":"424:7:47","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"canonicalName":"AddressArraySlotType","id":6864,"name":"AddressArraySlotType","nameLocation":"438:20:47","nodeType":"UserDefinedValueTypeDefinition","src":"433:37:47","underlyingType":{"id":6863,"name":"bytes32","nodeType":"ElementaryTypeName","src":"462:7:47","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"abstract":false,"baseContracts":[],"canonicalName":"TransientStorageHelpers","contractDependencies":[],"contractKind":"library","documentation":{"id":6865,"nodeType":"StructuredDocumentation","src":"472:518:47","text":" @notice Helper functions to read and write values from transient storage, including support for arrays and mappings.\n @dev This is temporary, based on Open Zeppelin's partially released library. When the final version is published, we\n should be able to remove our copies and import directly from OZ. When Solidity catches up and puts direct support\n for transient storage in the language, we should be able to get rid of this altogether.\n This only works on networks where EIP-1153 is supported."},"fullyImplemented":true,"id":7442,"linearizedBaseContracts":[7442],"name":"TransientStorageHelpers","nameLocation":"999:23:47","nodeType":"ContractDefinition","nodes":[{"global":false,"id":6867,"libraryName":{"id":6866,"name":"SlotDerivation","nameLocations":["1035:14:47"],"nodeType":"IdentifierPath","referencedDeclaration":10072,"src":"1035:14:47"},"nodeType":"UsingForDirective","src":"1029:27:47"},{"global":false,"id":6869,"libraryName":{"id":6868,"name":"StorageSlotExtension","nameLocations":["1067:20:47"],"nodeType":"IdentifierPath","referencedDeclaration":10285,"src":"1067:20:47"},"nodeType":"UsingForDirective","src":"1061:33:47"},{"documentation":{"id":6870,"nodeType":"StructuredDocumentation","src":"1100:71:47","text":"@notice An index is out of bounds on an array operation (e.g., at)."},"errorSelector":"0f4ae0e4","id":6872,"name":"TransientIndexOutOfBounds","nameLocation":"1182:25:47","nodeType":"ErrorDefinition","parameters":{"id":6871,"nodeType":"ParameterList","parameters":[],"src":"1207:2:47"},"src":"1176:34:47"},{"body":{"id":6910,"nodeType":"Block","src":"1376:206:47","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":6908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":6897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"arguments":[{"hexValue":"62616c616e6365722d6c6162732e76332e73746f726167652e","id":6889,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1478:27:47","typeDescriptions":{"typeIdentifier":"t_stringliteral_8857a2dfd119cac85e8d882459e5ce77774c99d694ba0ba60adafcc29f806768","typeString":"literal_string \"balancer-labs.v3.storage.\""},"value":"balancer-labs.v3.storage."},{"id":6890,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6874,"src":"1507:6:47","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"2e","id":6891,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1515:3:47","typeDescriptions":{"typeIdentifier":"t_stringliteral_6f010af653ebe3cb07d297a4ef13366103d392ceffa68dd48232e6e9ff2187bf","typeString":"literal_string \".\""},"value":"."},{"id":6892,"name":"varName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6876,"src":"1520:7:47","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_8857a2dfd119cac85e8d882459e5ce77774c99d694ba0ba60adafcc29f806768","typeString":"literal_string \"balancer-labs.v3.storage.\""},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_stringliteral_6f010af653ebe3cb07d297a4ef13366103d392ceffa68dd48232e6e9ff2187bf","typeString":"literal_string \".\""},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":6887,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1461:3:47","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":6888,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1465:12:47","memberName":"encodePacked","nodeType":"MemberAccess","src":"1461:16:47","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":6893,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1461:67:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6886,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1451:9:47","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":6894,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1451:78:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":6885,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1443:7:47","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":6884,"name":"uint256","nodeType":"ElementaryTypeName","src":"1443:7:47","typeDescriptions":{}}},"id":6895,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1443:87:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":6896,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1533:1:47","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1443:91:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":6882,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1432:3:47","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":6883,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1436:6:47","memberName":"encode","nodeType":"MemberAccess","src":"1432:10:47","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":6898,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1432:103:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":6881,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1405:9:47","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":6899,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1405:144:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":6907,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"1552:23:47","subExpression":{"arguments":[{"arguments":[{"hexValue":"30786666","id":6904,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1569:4:47","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0xff"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"}],"id":6903,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1561:7:47","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":6902,"name":"uint256","nodeType":"ElementaryTypeName","src":"1561:7:47","typeDescriptions":{}}},"id":6905,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1561:13:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":6901,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1553:7:47","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":6900,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1553:7:47","typeDescriptions":{}}},"id":6906,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1553:22:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"1405:170:47","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":6880,"id":6909,"nodeType":"Return","src":"1386:189:47"}]},"id":6911,"implemented":true,"kind":"function","modifiers":[],"name":"calculateSlot","nameLocation":"1285:13:47","nodeType":"FunctionDefinition","parameters":{"id":6877,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6874,"mutability":"mutable","name":"domain","nameLocation":"1313:6:47","nodeType":"VariableDeclaration","scope":6911,"src":"1299:20:47","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":6873,"name":"string","nodeType":"ElementaryTypeName","src":"1299:6:47","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":6876,"mutability":"mutable","name":"varName","nameLocation":"1335:7:47","nodeType":"VariableDeclaration","scope":6911,"src":"1321:21:47","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":6875,"name":"string","nodeType":"ElementaryTypeName","src":"1321:6:47","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1298:45:47"},"returnParameters":{"id":6880,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6879,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6911,"src":"1367:7:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":6878,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1367:7:47","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1366:9:47"},"scope":7442,"src":"1276:306:47","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":6937,"nodeType":"Block","src":"1884:108:47","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":6929,"name":"k1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6917,"src":"1962:2:47","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":6928,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1954:7:47","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6927,"name":"address","nodeType":"ElementaryTypeName","src":"1954:7:47","typeDescriptions":{}}},"id":6930,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1954:11:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":6924,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6914,"src":"1934:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858","typeString":"TokenDeltaMappingSlotType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858","typeString":"TokenDeltaMappingSlotType"}],"expression":{"id":6922,"name":"TokenDeltaMappingSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6858,"src":"1901:25:47","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858_$","typeString":"type(TokenDeltaMappingSlotType)"}},"id":6923,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1927:6:47","memberName":"unwrap","nodeType":"MemberAccess","src":"1901:32:47","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858_$returns$_t_bytes32_$","typeString":"function (TokenDeltaMappingSlotType) pure returns (bytes32)"}},"id":6925,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1901:38:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":6926,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1940:13:47","memberName":"deriveMapping","nodeType":"MemberAccess","referencedDeclaration":9999,"src":"1901:52:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_address_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,address) pure returns (bytes32)"}},"id":6931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1901:65:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":6932,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1967:8:47","memberName":"asInt256","nodeType":"MemberAccess","referencedDeclaration":10174,"src":"1901:74:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Int256SlotType_$10159_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Int256SlotType)"}},"id":6933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1901:76:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$10159","typeString":"StorageSlotExtension.Int256SlotType"}},"id":6934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1978:5:47","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":10273,"src":"1901:82:47","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Int256SlotType_$10159_$returns$_t_int256_$attached_to$_t_userDefinedValueType$_Int256SlotType_$10159_$","typeString":"function (StorageSlotExtension.Int256SlotType) view returns (int256)"}},"id":6935,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1901:84:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":6921,"id":6936,"nodeType":"Return","src":"1894:91:47"}]},"id":6938,"implemented":true,"kind":"function","modifiers":[],"name":"tGet","nameLocation":"1805:4:47","nodeType":"FunctionDefinition","parameters":{"id":6918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6914,"mutability":"mutable","name":"slot","nameLocation":"1836:4:47","nodeType":"VariableDeclaration","scope":6938,"src":"1810:30:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858","typeString":"TokenDeltaMappingSlotType"},"typeName":{"id":6913,"nodeType":"UserDefinedTypeName","pathNode":{"id":6912,"name":"TokenDeltaMappingSlotType","nameLocations":["1810:25:47"],"nodeType":"IdentifierPath","referencedDeclaration":6858,"src":"1810:25:47"},"referencedDeclaration":6858,"src":"1810:25:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858","typeString":"TokenDeltaMappingSlotType"}},"visibility":"internal"},{"constant":false,"id":6917,"mutability":"mutable","name":"k1","nameLocation":"1849:2:47","nodeType":"VariableDeclaration","scope":6938,"src":"1842:9:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":6916,"nodeType":"UserDefinedTypeName","pathNode":{"id":6915,"name":"IERC20","nameLocations":["1842:6:47"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"1842:6:47"},"referencedDeclaration":40109,"src":"1842:6:47","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1809:43:47"},"returnParameters":{"id":6921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6920,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6938,"src":"1876:6:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6919,"name":"int256","nodeType":"ElementaryTypeName","src":"1876:6:47","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1875:8:47"},"scope":7442,"src":"1796:196:47","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":6966,"nodeType":"Block","src":"2078:107:47","statements":[{"expression":{"arguments":[{"id":6963,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6946,"src":"2172:5:47","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":6957,"name":"k1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6944,"src":"2149:2:47","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":6956,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2141:7:47","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":6955,"name":"address","nodeType":"ElementaryTypeName","src":"2141:7:47","typeDescriptions":{}}},"id":6958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2141:11:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":6952,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6941,"src":"2121:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858","typeString":"TokenDeltaMappingSlotType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858","typeString":"TokenDeltaMappingSlotType"}],"expression":{"id":6949,"name":"TokenDeltaMappingSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6858,"src":"2088:25:47","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858_$","typeString":"type(TokenDeltaMappingSlotType)"}},"id":6951,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2114:6:47","memberName":"unwrap","nodeType":"MemberAccess","src":"2088:32:47","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858_$returns$_t_bytes32_$","typeString":"function (TokenDeltaMappingSlotType) pure returns (bytes32)"}},"id":6953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2088:38:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":6954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2127:13:47","memberName":"deriveMapping","nodeType":"MemberAccess","referencedDeclaration":9999,"src":"2088:52:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_address_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,address) pure returns (bytes32)"}},"id":6959,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2088:65:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":6960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2154:8:47","memberName":"asInt256","nodeType":"MemberAccess","referencedDeclaration":10174,"src":"2088:74:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Int256SlotType_$10159_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Int256SlotType)"}},"id":6961,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2088:76:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$10159","typeString":"StorageSlotExtension.Int256SlotType"}},"id":6962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2165:6:47","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":10284,"src":"2088:83:47","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_Int256SlotType_$10159_$_t_int256_$returns$__$attached_to$_t_userDefinedValueType$_Int256SlotType_$10159_$","typeString":"function (StorageSlotExtension.Int256SlotType,int256)"}},"id":6964,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2088:90:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":6965,"nodeType":"ExpressionStatement","src":"2088:90:47"}]},"id":6967,"implemented":true,"kind":"function","modifiers":[],"name":"tSet","nameLocation":"2007:4:47","nodeType":"FunctionDefinition","parameters":{"id":6947,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6941,"mutability":"mutable","name":"slot","nameLocation":"2038:4:47","nodeType":"VariableDeclaration","scope":6967,"src":"2012:30:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858","typeString":"TokenDeltaMappingSlotType"},"typeName":{"id":6940,"nodeType":"UserDefinedTypeName","pathNode":{"id":6939,"name":"TokenDeltaMappingSlotType","nameLocations":["2012:25:47"],"nodeType":"IdentifierPath","referencedDeclaration":6858,"src":"2012:25:47"},"referencedDeclaration":6858,"src":"2012:25:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858","typeString":"TokenDeltaMappingSlotType"}},"visibility":"internal"},{"constant":false,"id":6944,"mutability":"mutable","name":"k1","nameLocation":"2051:2:47","nodeType":"VariableDeclaration","scope":6967,"src":"2044:9:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":6943,"nodeType":"UserDefinedTypeName","pathNode":{"id":6942,"name":"IERC20","nameLocations":["2044:6:47"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"2044:6:47"},"referencedDeclaration":40109,"src":"2044:6:47","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":6946,"mutability":"mutable","name":"value","nameLocation":"2062:5:47","nodeType":"VariableDeclaration","scope":6967,"src":"2055:12:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":6945,"name":"int256","nodeType":"ElementaryTypeName","src":"2055:6:47","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"2011:57:47"},"returnParameters":{"id":6948,"nodeType":"ParameterList","parameters":[],"src":"2078:0:47"},"scope":7442,"src":"1998:187:47","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":6989,"nodeType":"Block","src":"2281:100:47","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":6982,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6972,"src":"2350:3:47","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":6979,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6970,"src":"2330:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}],"expression":{"id":6977,"name":"AddressToUintMappingSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6860,"src":"2298:24:47","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"type(AddressToUintMappingSlot)"}},"id":6978,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2323:6:47","memberName":"unwrap","nodeType":"MemberAccess","src":"2298:31:47","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$returns$_t_bytes32_$","typeString":"function (AddressToUintMappingSlot) pure returns (bytes32)"}},"id":6980,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2298:37:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":6981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2336:13:47","memberName":"deriveMapping","nodeType":"MemberAccess","referencedDeclaration":9999,"src":"2298:51:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_address_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,address) pure returns (bytes32)"}},"id":6983,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2298:56:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":6984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2355:9:47","memberName":"asUint256","nodeType":"MemberAccess","referencedDeclaration":10157,"src":"2298:66:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$10142_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":6985,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2298:68:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":6986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2367:5:47","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":10251,"src":"2298:74:47","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Uint256SlotType_$10142_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function (StorageSlotExtension.Uint256SlotType) view returns (uint256)"}},"id":6987,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2298:76:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":6976,"id":6988,"nodeType":"Return","src":"2291:83:47"}]},"id":6990,"implemented":true,"kind":"function","modifiers":[],"name":"tGet","nameLocation":"2200:4:47","nodeType":"FunctionDefinition","parameters":{"id":6973,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6970,"mutability":"mutable","name":"slot","nameLocation":"2230:4:47","nodeType":"VariableDeclaration","scope":6990,"src":"2205:29:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"},"typeName":{"id":6969,"nodeType":"UserDefinedTypeName","pathNode":{"id":6968,"name":"AddressToUintMappingSlot","nameLocations":["2205:24:47"],"nodeType":"IdentifierPath","referencedDeclaration":6860,"src":"2205:24:47"},"referencedDeclaration":6860,"src":"2205:24:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"visibility":"internal"},{"constant":false,"id":6972,"mutability":"mutable","name":"key","nameLocation":"2244:3:47","nodeType":"VariableDeclaration","scope":6990,"src":"2236:11:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6971,"name":"address","nodeType":"ElementaryTypeName","src":"2236:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2204:44:47"},"returnParameters":{"id":6976,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6975,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":6990,"src":"2272:7:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6974,"name":"uint256","nodeType":"ElementaryTypeName","src":"2272:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2271:9:47"},"scope":7442,"src":"2191:190:47","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7014,"nodeType":"Block","src":"2469:99:47","statements":[{"expression":{"arguments":[{"id":7011,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6997,"src":"2555:5:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":7006,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6995,"src":"2531:3:47","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":7003,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6993,"src":"2511:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}],"expression":{"id":7000,"name":"AddressToUintMappingSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6860,"src":"2479:24:47","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"type(AddressToUintMappingSlot)"}},"id":7002,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2504:6:47","memberName":"unwrap","nodeType":"MemberAccess","src":"2479:31:47","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$returns$_t_bytes32_$","typeString":"function (AddressToUintMappingSlot) pure returns (bytes32)"}},"id":7004,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2479:37:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2517:13:47","memberName":"deriveMapping","nodeType":"MemberAccess","referencedDeclaration":9999,"src":"2479:51:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_address_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,address) pure returns (bytes32)"}},"id":7007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2479:56:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2536:9:47","memberName":"asUint256","nodeType":"MemberAccess","referencedDeclaration":10157,"src":"2479:66:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$10142_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":7009,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2479:68:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":7010,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2548:6:47","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":10262,"src":"2479:75:47","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_Uint256SlotType_$10142_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function (StorageSlotExtension.Uint256SlotType,uint256)"}},"id":7012,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2479:82:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7013,"nodeType":"ExpressionStatement","src":"2479:82:47"}]},"id":7015,"implemented":true,"kind":"function","modifiers":[],"name":"tSet","nameLocation":"2396:4:47","nodeType":"FunctionDefinition","parameters":{"id":6998,"nodeType":"ParameterList","parameters":[{"constant":false,"id":6993,"mutability":"mutable","name":"slot","nameLocation":"2426:4:47","nodeType":"VariableDeclaration","scope":7015,"src":"2401:29:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"},"typeName":{"id":6992,"nodeType":"UserDefinedTypeName","pathNode":{"id":6991,"name":"AddressToUintMappingSlot","nameLocations":["2401:24:47"],"nodeType":"IdentifierPath","referencedDeclaration":6860,"src":"2401:24:47"},"referencedDeclaration":6860,"src":"2401:24:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"visibility":"internal"},{"constant":false,"id":6995,"mutability":"mutable","name":"key","nameLocation":"2440:3:47","nodeType":"VariableDeclaration","scope":7015,"src":"2432:11:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":6994,"name":"address","nodeType":"ElementaryTypeName","src":"2432:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":6997,"mutability":"mutable","name":"value","nameLocation":"2453:5:47","nodeType":"VariableDeclaration","scope":7015,"src":"2445:13:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":6996,"name":"uint256","nodeType":"ElementaryTypeName","src":"2445:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2400:59:47"},"returnParameters":{"id":6999,"nodeType":"ParameterList","parameters":[],"src":"2469:0:47"},"scope":7442,"src":"2387:181:47","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7042,"nodeType":"Block","src":"2724:236:47","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":7035,"name":"addressKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7022,"src":"2888:10:47","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":7032,"name":"uintKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7020,"src":"2848:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":7029,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7018,"src":"2811:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862","typeString":"UintToAddressToBooleanMappingSlot"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862","typeString":"UintToAddressToBooleanMappingSlot"}],"expression":{"id":7027,"name":"UintToAddressToBooleanMappingSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6862,"src":"2753:33:47","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862_$","typeString":"type(UintToAddressToBooleanMappingSlot)"}},"id":7028,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2804:6:47","memberName":"unwrap","nodeType":"MemberAccess","src":"2753:57:47","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862_$returns$_t_bytes32_$","typeString":"function (UintToAddressToBooleanMappingSlot) pure returns (bytes32)"}},"id":7030,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2753:63:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2834:13:47","memberName":"deriveMapping","nodeType":"MemberAccess","referencedDeclaration":10035,"src":"2753:94:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":7033,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2753:103:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2874:13:47","memberName":"deriveMapping","nodeType":"MemberAccess","referencedDeclaration":9999,"src":"2753:134:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_address_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,address) pure returns (bytes32)"}},"id":7036,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2753:146:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2917:9:47","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":10123,"src":"2753:173:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$10108_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":7038,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2753:175:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":7039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2946:5:47","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":10207,"src":"2753:198:47","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_BooleanSlotType_$10108_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function (StorageSlotExtension.BooleanSlotType) view returns (bool)"}},"id":7040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2753:200:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":7026,"id":7041,"nodeType":"Return","src":"2734:219:47"}]},"id":7043,"implemented":true,"kind":"function","modifiers":[],"name":"tGet","nameLocation":"2583:4:47","nodeType":"FunctionDefinition","parameters":{"id":7023,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7018,"mutability":"mutable","name":"slot","nameLocation":"2631:4:47","nodeType":"VariableDeclaration","scope":7043,"src":"2597:38:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862","typeString":"UintToAddressToBooleanMappingSlot"},"typeName":{"id":7017,"nodeType":"UserDefinedTypeName","pathNode":{"id":7016,"name":"UintToAddressToBooleanMappingSlot","nameLocations":["2597:33:47"],"nodeType":"IdentifierPath","referencedDeclaration":6862,"src":"2597:33:47"},"referencedDeclaration":6862,"src":"2597:33:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862","typeString":"UintToAddressToBooleanMappingSlot"}},"visibility":"internal"},{"constant":false,"id":7020,"mutability":"mutable","name":"uintKey","nameLocation":"2653:7:47","nodeType":"VariableDeclaration","scope":7043,"src":"2645:15:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7019,"name":"uint256","nodeType":"ElementaryTypeName","src":"2645:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7022,"mutability":"mutable","name":"addressKey","nameLocation":"2678:10:47","nodeType":"VariableDeclaration","scope":7043,"src":"2670:18:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7021,"name":"address","nodeType":"ElementaryTypeName","src":"2670:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2587:107:47"},"returnParameters":{"id":7026,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7025,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7043,"src":"2718:4:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7024,"name":"bool","nodeType":"ElementaryTypeName","src":"2718:4:47","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2717:6:47"},"scope":7442,"src":"2574:386:47","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7072,"nodeType":"Block","src":"3078:203:47","statements":[{"expression":{"arguments":[{"id":7069,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7052,"src":"3268:5:47","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":7064,"name":"addressKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7050,"src":"3211:10:47","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":7061,"name":"uintKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7048,"src":"3175:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":7058,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7046,"src":"3142:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862","typeString":"UintToAddressToBooleanMappingSlot"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862","typeString":"UintToAddressToBooleanMappingSlot"}],"expression":{"id":7055,"name":"UintToAddressToBooleanMappingSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6862,"src":"3088:33:47","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862_$","typeString":"type(UintToAddressToBooleanMappingSlot)"}},"id":7057,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3135:6:47","memberName":"unwrap","nodeType":"MemberAccess","src":"3088:53:47","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862_$returns$_t_bytes32_$","typeString":"function (UintToAddressToBooleanMappingSlot) pure returns (bytes32)"}},"id":7059,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3088:59:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3161:13:47","memberName":"deriveMapping","nodeType":"MemberAccess","referencedDeclaration":10035,"src":"3088:86:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":7062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3088:95:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3197:13:47","memberName":"deriveMapping","nodeType":"MemberAccess","referencedDeclaration":9999,"src":"3088:122:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_address_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,address) pure returns (bytes32)"}},"id":7065,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3088:134:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7066,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3236:9:47","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":10123,"src":"3088:157:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$10108_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":7067,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3088:159:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":7068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3261:6:47","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":10218,"src":"3088:179:47","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$10108_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":7070,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3088:186:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7071,"nodeType":"ExpressionStatement","src":"3088:186:47"}]},"id":7073,"implemented":true,"kind":"function","modifiers":[],"name":"tSet","nameLocation":"2975:4:47","nodeType":"FunctionDefinition","parameters":{"id":7053,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7046,"mutability":"mutable","name":"slot","nameLocation":"3014:4:47","nodeType":"VariableDeclaration","scope":7073,"src":"2980:38:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862","typeString":"UintToAddressToBooleanMappingSlot"},"typeName":{"id":7045,"nodeType":"UserDefinedTypeName","pathNode":{"id":7044,"name":"UintToAddressToBooleanMappingSlot","nameLocations":["2980:33:47"],"nodeType":"IdentifierPath","referencedDeclaration":6862,"src":"2980:33:47"},"referencedDeclaration":6862,"src":"2980:33:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862","typeString":"UintToAddressToBooleanMappingSlot"}},"visibility":"internal"},{"constant":false,"id":7048,"mutability":"mutable","name":"uintKey","nameLocation":"3028:7:47","nodeType":"VariableDeclaration","scope":7073,"src":"3020:15:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7047,"name":"uint256","nodeType":"ElementaryTypeName","src":"3020:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7050,"mutability":"mutable","name":"addressKey","nameLocation":"3045:10:47","nodeType":"VariableDeclaration","scope":7073,"src":"3037:18:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7049,"name":"address","nodeType":"ElementaryTypeName","src":"3037:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7052,"mutability":"mutable","name":"value","nameLocation":"3062:5:47","nodeType":"VariableDeclaration","scope":7073,"src":"3057:10:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7051,"name":"bool","nodeType":"ElementaryTypeName","src":"3057:4:47","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2979:89:47"},"returnParameters":{"id":7054,"nodeType":"ParameterList","parameters":[],"src":"3078:0:47"},"scope":7442,"src":"2966:315:47","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7102,"nodeType":"Block","src":"3432:117:47","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":7095,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7076,"src":"3523:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},{"id":7096,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7078,"src":"3529:3:47","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"},{"typeIdentifier":"t_address","typeString":"address"}],"id":7094,"name":"tGet","nodeType":"Identifier","overloadedDeclarations":[6938,6990,7043],"referencedDeclaration":6990,"src":"3518:4:47","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$returns$_t_uint256_$","typeString":"function (AddressToUintMappingSlot,address) view returns (uint256)"}},"id":7097,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3518:15:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":7098,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7080,"src":"3536:5:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3518:23:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":7089,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7078,"src":"3494:3:47","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":7086,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7076,"src":"3474:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}],"expression":{"id":7083,"name":"AddressToUintMappingSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6860,"src":"3442:24:47","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"type(AddressToUintMappingSlot)"}},"id":7085,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3467:6:47","memberName":"unwrap","nodeType":"MemberAccess","src":"3442:31:47","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$returns$_t_bytes32_$","typeString":"function (AddressToUintMappingSlot) pure returns (bytes32)"}},"id":7087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3442:37:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3480:13:47","memberName":"deriveMapping","nodeType":"MemberAccess","referencedDeclaration":9999,"src":"3442:51:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_address_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,address) pure returns (bytes32)"}},"id":7090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3442:56:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3499:9:47","memberName":"asUint256","nodeType":"MemberAccess","referencedDeclaration":10157,"src":"3442:66:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$10142_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":7092,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3442:68:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":7093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3511:6:47","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":10262,"src":"3442:75:47","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_Uint256SlotType_$10142_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function (StorageSlotExtension.Uint256SlotType,uint256)"}},"id":7100,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3442:100:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7101,"nodeType":"ExpressionStatement","src":"3442:100:47"}]},"id":7103,"implemented":true,"kind":"function","modifiers":[],"name":"tAdd","nameLocation":"3359:4:47","nodeType":"FunctionDefinition","parameters":{"id":7081,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7076,"mutability":"mutable","name":"slot","nameLocation":"3389:4:47","nodeType":"VariableDeclaration","scope":7103,"src":"3364:29:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"},"typeName":{"id":7075,"nodeType":"UserDefinedTypeName","pathNode":{"id":7074,"name":"AddressToUintMappingSlot","nameLocations":["3364:24:47"],"nodeType":"IdentifierPath","referencedDeclaration":6860,"src":"3364:24:47"},"referencedDeclaration":6860,"src":"3364:24:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"visibility":"internal"},{"constant":false,"id":7078,"mutability":"mutable","name":"key","nameLocation":"3403:3:47","nodeType":"VariableDeclaration","scope":7103,"src":"3395:11:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7077,"name":"address","nodeType":"ElementaryTypeName","src":"3395:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7080,"mutability":"mutable","name":"value","nameLocation":"3416:5:47","nodeType":"VariableDeclaration","scope":7103,"src":"3408:13:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7079,"name":"uint256","nodeType":"ElementaryTypeName","src":"3408:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3363:59:47"},"returnParameters":{"id":7082,"nodeType":"ParameterList","parameters":[],"src":"3432:0:47"},"scope":7442,"src":"3350:199:47","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7132,"nodeType":"Block","src":"3637:117:47","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":7125,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7106,"src":"3728:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},{"id":7126,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7108,"src":"3734:3:47","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"},{"typeIdentifier":"t_address","typeString":"address"}],"id":7124,"name":"tGet","nodeType":"Identifier","overloadedDeclarations":[6938,6990,7043],"referencedDeclaration":6990,"src":"3723:4:47","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$returns$_t_uint256_$","typeString":"function (AddressToUintMappingSlot,address) view returns (uint256)"}},"id":7127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3723:15:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":7128,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7110,"src":"3741:5:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3723:23:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":7119,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7108,"src":"3699:3:47","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":7116,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7106,"src":"3679:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}],"expression":{"id":7113,"name":"AddressToUintMappingSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6860,"src":"3647:24:47","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"type(AddressToUintMappingSlot)"}},"id":7115,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3672:6:47","memberName":"unwrap","nodeType":"MemberAccess","src":"3647:31:47","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$returns$_t_bytes32_$","typeString":"function (AddressToUintMappingSlot) pure returns (bytes32)"}},"id":7117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3647:37:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3685:13:47","memberName":"deriveMapping","nodeType":"MemberAccess","referencedDeclaration":9999,"src":"3647:51:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_address_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,address) pure returns (bytes32)"}},"id":7120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3647:56:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3704:9:47","memberName":"asUint256","nodeType":"MemberAccess","referencedDeclaration":10157,"src":"3647:66:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$10142_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":7122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3647:68:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":7123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3716:6:47","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":10262,"src":"3647:75:47","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_Uint256SlotType_$10142_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function (StorageSlotExtension.Uint256SlotType,uint256)"}},"id":7130,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3647:100:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7131,"nodeType":"ExpressionStatement","src":"3647:100:47"}]},"id":7133,"implemented":true,"kind":"function","modifiers":[],"name":"tSub","nameLocation":"3564:4:47","nodeType":"FunctionDefinition","parameters":{"id":7111,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7106,"mutability":"mutable","name":"slot","nameLocation":"3594:4:47","nodeType":"VariableDeclaration","scope":7133,"src":"3569:29:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"},"typeName":{"id":7105,"nodeType":"UserDefinedTypeName","pathNode":{"id":7104,"name":"AddressToUintMappingSlot","nameLocations":["3569:24:47"],"nodeType":"IdentifierPath","referencedDeclaration":6860,"src":"3569:24:47"},"referencedDeclaration":6860,"src":"3569:24:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"visibility":"internal"},{"constant":false,"id":7108,"mutability":"mutable","name":"key","nameLocation":"3608:3:47","nodeType":"VariableDeclaration","scope":7133,"src":"3600:11:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7107,"name":"address","nodeType":"ElementaryTypeName","src":"3600:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7110,"mutability":"mutable","name":"value","nameLocation":"3621:5:47","nodeType":"VariableDeclaration","scope":7133,"src":"3613:13:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7109,"name":"uint256","nodeType":"ElementaryTypeName","src":"3613:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3568:59:47"},"returnParameters":{"id":7112,"nodeType":"ParameterList","parameters":[],"src":"3637:0:47"},"scope":7442,"src":"3555:199:47","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7150,"nodeType":"Block","src":"4044:77:47","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":7143,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7136,"src":"4089:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}],"expression":{"id":7141,"name":"AddressArraySlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6864,"src":"4061:20:47","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"type(AddressArraySlotType)"}},"id":7142,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4082:6:47","memberName":"unwrap","nodeType":"MemberAccess","src":"4061:27:47","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressArraySlotType_$6864_$returns$_t_bytes32_$","typeString":"function (AddressArraySlotType) pure returns (bytes32)"}},"id":7144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4061:33:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4095:9:47","memberName":"asUint256","nodeType":"MemberAccess","referencedDeclaration":10157,"src":"4061:43:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$10142_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":7146,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4061:45:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":7147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4107:5:47","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":10251,"src":"4061:51:47","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Uint256SlotType_$10142_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function (StorageSlotExtension.Uint256SlotType) view returns (uint256)"}},"id":7148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4061:53:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7140,"id":7149,"nodeType":"Return","src":"4054:60:47"}]},"id":7151,"implemented":true,"kind":"function","modifiers":[],"name":"tLength","nameLocation":"3977:7:47","nodeType":"FunctionDefinition","parameters":{"id":7137,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7136,"mutability":"mutable","name":"slot","nameLocation":"4006:4:47","nodeType":"VariableDeclaration","scope":7151,"src":"3985:25:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"},"typeName":{"id":7135,"nodeType":"UserDefinedTypeName","pathNode":{"id":7134,"name":"AddressArraySlotType","nameLocations":["3985:20:47"],"nodeType":"IdentifierPath","referencedDeclaration":6864,"src":"3985:20:47"},"referencedDeclaration":6864,"src":"3985:20:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}},"visibility":"internal"}],"src":"3984:27:47"},"returnParameters":{"id":7140,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7139,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7151,"src":"4035:7:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7138,"name":"uint256","nodeType":"ElementaryTypeName","src":"4035:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4034:9:47"},"scope":7442,"src":"3968:153:47","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7180,"nodeType":"Block","src":"4214:152:47","statements":[{"expression":{"arguments":[{"id":7162,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7154,"src":"4249:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}},{"id":7163,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7156,"src":"4255:5:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7161,"name":"_ensureIndexWithinBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7241,"src":"4224:24:47","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressArraySlotType_$6864_$_t_uint256_$returns$__$","typeString":"function (AddressArraySlotType,uint256) view"}},"id":7164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4224:37:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7165,"nodeType":"ExpressionStatement","src":"4224:37:47"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":7173,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7156,"src":"4333:5:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":7168,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7154,"src":"4306:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}],"expression":{"id":7166,"name":"AddressArraySlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6864,"src":"4278:20:47","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"type(AddressArraySlotType)"}},"id":7167,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4299:6:47","memberName":"unwrap","nodeType":"MemberAccess","src":"4278:27:47","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressArraySlotType_$6864_$returns$_t_bytes32_$","typeString":"function (AddressArraySlotType) pure returns (bytes32)"}},"id":7169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4278:33:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4312:11:47","memberName":"deriveArray","nodeType":"MemberAccess","referencedDeclaration":9987,"src":"4278:45:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":7171,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4278:47:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7172,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4326:6:47","memberName":"offset","nodeType":"MemberAccess","referencedDeclaration":9977,"src":"4278:54:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":7174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4278:61:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4340:9:47","memberName":"asAddress","nodeType":"MemberAccess","referencedDeclaration":10106,"src":"4278:71:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_AddressSlotType_$10091_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.AddressSlotType)"}},"id":7176,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4278:73:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$10091","typeString":"StorageSlotExtension.AddressSlotType"}},"id":7177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4352:5:47","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":10185,"src":"4278:79:47","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressSlotType_$10091_$returns$_t_address_$attached_to$_t_userDefinedValueType$_AddressSlotType_$10091_$","typeString":"function (StorageSlotExtension.AddressSlotType) view returns (address)"}},"id":7178,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4278:81:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":7160,"id":7179,"nodeType":"Return","src":"4271:88:47"}]},"id":7181,"implemented":true,"kind":"function","modifiers":[],"name":"tAt","nameLocation":"4136:3:47","nodeType":"FunctionDefinition","parameters":{"id":7157,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7154,"mutability":"mutable","name":"slot","nameLocation":"4161:4:47","nodeType":"VariableDeclaration","scope":7181,"src":"4140:25:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"},"typeName":{"id":7153,"nodeType":"UserDefinedTypeName","pathNode":{"id":7152,"name":"AddressArraySlotType","nameLocations":["4140:20:47"],"nodeType":"IdentifierPath","referencedDeclaration":6864,"src":"4140:20:47"},"referencedDeclaration":6864,"src":"4140:20:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}},"visibility":"internal"},{"constant":false,"id":7156,"mutability":"mutable","name":"index","nameLocation":"4175:5:47","nodeType":"VariableDeclaration","scope":7181,"src":"4167:13:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7155,"name":"uint256","nodeType":"ElementaryTypeName","src":"4167:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4139:42:47"},"returnParameters":{"id":7160,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7159,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7181,"src":"4205:7:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7158,"name":"address","nodeType":"ElementaryTypeName","src":"4205:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4204:9:47"},"scope":7442,"src":"4127:239:47","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7212,"nodeType":"Block","src":"4452:151:47","statements":[{"expression":{"arguments":[{"id":7192,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7184,"src":"4487:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}},{"id":7193,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7186,"src":"4493:5:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7191,"name":"_ensureIndexWithinBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7241,"src":"4462:24:47","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressArraySlotType_$6864_$_t_uint256_$returns$__$","typeString":"function (AddressArraySlotType,uint256) view"}},"id":7194,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4462:37:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7195,"nodeType":"ExpressionStatement","src":"4462:37:47"},{"expression":{"arguments":[{"id":7209,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7188,"src":"4590:5:47","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":7204,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7186,"src":"4564:5:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":7199,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7184,"src":"4537:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}],"expression":{"id":7196,"name":"AddressArraySlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6864,"src":"4509:20:47","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"type(AddressArraySlotType)"}},"id":7198,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4530:6:47","memberName":"unwrap","nodeType":"MemberAccess","src":"4509:27:47","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressArraySlotType_$6864_$returns$_t_bytes32_$","typeString":"function (AddressArraySlotType) pure returns (bytes32)"}},"id":7200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4509:33:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4543:11:47","memberName":"deriveArray","nodeType":"MemberAccess","referencedDeclaration":9987,"src":"4509:45:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":7202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4509:47:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4557:6:47","memberName":"offset","nodeType":"MemberAccess","referencedDeclaration":9977,"src":"4509:54:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":7205,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4509:61:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4571:9:47","memberName":"asAddress","nodeType":"MemberAccess","referencedDeclaration":10106,"src":"4509:71:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_AddressSlotType_$10091_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.AddressSlotType)"}},"id":7207,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4509:73:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$10091","typeString":"StorageSlotExtension.AddressSlotType"}},"id":7208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4583:6:47","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":10196,"src":"4509:80:47","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressSlotType_$10091_$_t_address_$returns$__$attached_to$_t_userDefinedValueType$_AddressSlotType_$10091_$","typeString":"function (StorageSlotExtension.AddressSlotType,address)"}},"id":7210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4509:87:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7211,"nodeType":"ExpressionStatement","src":"4509:87:47"}]},"id":7213,"implemented":true,"kind":"function","modifiers":[],"name":"tSet","nameLocation":"4381:4:47","nodeType":"FunctionDefinition","parameters":{"id":7189,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7184,"mutability":"mutable","name":"slot","nameLocation":"4407:4:47","nodeType":"VariableDeclaration","scope":7213,"src":"4386:25:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"},"typeName":{"id":7183,"nodeType":"UserDefinedTypeName","pathNode":{"id":7182,"name":"AddressArraySlotType","nameLocations":["4386:20:47"],"nodeType":"IdentifierPath","referencedDeclaration":6864,"src":"4386:20:47"},"referencedDeclaration":6864,"src":"4386:20:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}},"visibility":"internal"},{"constant":false,"id":7186,"mutability":"mutable","name":"index","nameLocation":"4421:5:47","nodeType":"VariableDeclaration","scope":7213,"src":"4413:13:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7185,"name":"uint256","nodeType":"ElementaryTypeName","src":"4413:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7188,"mutability":"mutable","name":"value","nameLocation":"4436:5:47","nodeType":"VariableDeclaration","scope":7213,"src":"4428:13:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7187,"name":"address","nodeType":"ElementaryTypeName","src":"4428:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4385:57:47"},"returnParameters":{"id":7190,"nodeType":"ParameterList","parameters":[],"src":"4452:0:47"},"scope":7442,"src":"4372:231:47","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7240,"nodeType":"Block","src":"4698:176:47","statements":[{"assignments":[7222],"declarations":[{"constant":false,"id":7222,"mutability":"mutable","name":"length","nameLocation":"4716:6:47","nodeType":"VariableDeclaration","scope":7240,"src":"4708:14:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7221,"name":"uint256","nodeType":"ElementaryTypeName","src":"4708:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7231,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":7225,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7216,"src":"4753:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}],"expression":{"id":7223,"name":"AddressArraySlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6864,"src":"4725:20:47","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"type(AddressArraySlotType)"}},"id":7224,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4746:6:47","memberName":"unwrap","nodeType":"MemberAccess","src":"4725:27:47","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressArraySlotType_$6864_$returns$_t_bytes32_$","typeString":"function (AddressArraySlotType) pure returns (bytes32)"}},"id":7226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4725:33:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4759:9:47","memberName":"asUint256","nodeType":"MemberAccess","referencedDeclaration":10157,"src":"4725:43:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$10142_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":7228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4725:45:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":7229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4771:5:47","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":10251,"src":"4725:51:47","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Uint256SlotType_$10142_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function (StorageSlotExtension.Uint256SlotType) view returns (uint256)"}},"id":7230,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4725:53:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4708:70:47"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7232,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7218,"src":"4792:5:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":7233,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7222,"src":"4801:6:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4792:15:47","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7239,"nodeType":"IfStatement","src":"4788:80:47","trueBody":{"id":7238,"nodeType":"Block","src":"4809:59:47","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7235,"name":"TransientIndexOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6872,"src":"4830:25:47","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4830:27:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7237,"nodeType":"RevertStatement","src":"4823:34:47"}]}}]},"id":7241,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureIndexWithinBounds","nameLocation":"4618:24:47","nodeType":"FunctionDefinition","parameters":{"id":7219,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7216,"mutability":"mutable","name":"slot","nameLocation":"4664:4:47","nodeType":"VariableDeclaration","scope":7241,"src":"4643:25:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"},"typeName":{"id":7215,"nodeType":"UserDefinedTypeName","pathNode":{"id":7214,"name":"AddressArraySlotType","nameLocations":["4643:20:47"],"nodeType":"IdentifierPath","referencedDeclaration":6864,"src":"4643:20:47"},"referencedDeclaration":6864,"src":"4643:20:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}},"visibility":"internal"},{"constant":false,"id":7218,"mutability":"mutable","name":"index","nameLocation":"4678:5:47","nodeType":"VariableDeclaration","scope":7241,"src":"4670:13:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7217,"name":"uint256","nodeType":"ElementaryTypeName","src":"4670:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4642:42:47"},"returnParameters":{"id":7220,"nodeType":"ParameterList","parameters":[],"src":"4698:0:47"},"scope":7442,"src":"4609:265:47","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":7265,"nodeType":"Block","src":"4976:105:47","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":7258,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7246,"src":"5048:5:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":7253,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7244,"src":"5021:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}],"expression":{"id":7251,"name":"AddressArraySlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6864,"src":"4993:20:47","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"type(AddressArraySlotType)"}},"id":7252,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5014:6:47","memberName":"unwrap","nodeType":"MemberAccess","src":"4993:27:47","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressArraySlotType_$6864_$returns$_t_bytes32_$","typeString":"function (AddressArraySlotType) pure returns (bytes32)"}},"id":7254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4993:33:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5027:11:47","memberName":"deriveArray","nodeType":"MemberAccess","referencedDeclaration":9987,"src":"4993:45:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":7256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4993:47:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5041:6:47","memberName":"offset","nodeType":"MemberAccess","referencedDeclaration":9977,"src":"4993:54:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":7259,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4993:61:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5055:9:47","memberName":"asAddress","nodeType":"MemberAccess","referencedDeclaration":10106,"src":"4993:71:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_AddressSlotType_$10091_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.AddressSlotType)"}},"id":7261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4993:73:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$10091","typeString":"StorageSlotExtension.AddressSlotType"}},"id":7262,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5067:5:47","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":10185,"src":"4993:79:47","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressSlotType_$10091_$returns$_t_address_$attached_to$_t_userDefinedValueType$_AddressSlotType_$10091_$","typeString":"function (StorageSlotExtension.AddressSlotType) view returns (address)"}},"id":7263,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4993:81:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":7250,"id":7264,"nodeType":"Return","src":"4986:88:47"}]},"id":7266,"implemented":true,"kind":"function","modifiers":[],"name":"tUncheckedAt","nameLocation":"4889:12:47","nodeType":"FunctionDefinition","parameters":{"id":7247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7244,"mutability":"mutable","name":"slot","nameLocation":"4923:4:47","nodeType":"VariableDeclaration","scope":7266,"src":"4902:25:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"},"typeName":{"id":7243,"nodeType":"UserDefinedTypeName","pathNode":{"id":7242,"name":"AddressArraySlotType","nameLocations":["4902:20:47"],"nodeType":"IdentifierPath","referencedDeclaration":6864,"src":"4902:20:47"},"referencedDeclaration":6864,"src":"4902:20:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}},"visibility":"internal"},{"constant":false,"id":7246,"mutability":"mutable","name":"index","nameLocation":"4937:5:47","nodeType":"VariableDeclaration","scope":7266,"src":"4929:13:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7245,"name":"uint256","nodeType":"ElementaryTypeName","src":"4929:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4901:42:47"},"returnParameters":{"id":7250,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7249,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7266,"src":"4967:7:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7248,"name":"address","nodeType":"ElementaryTypeName","src":"4967:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4966:9:47"},"scope":7442,"src":"4880:201:47","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":7292,"nodeType":"Block","src":"5176:104:47","statements":[{"expression":{"arguments":[{"id":7289,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7273,"src":"5267:5:47","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":7284,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7271,"src":"5241:5:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":7279,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7269,"src":"5214:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}],"expression":{"id":7276,"name":"AddressArraySlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6864,"src":"5186:20:47","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"type(AddressArraySlotType)"}},"id":7278,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5207:6:47","memberName":"unwrap","nodeType":"MemberAccess","src":"5186:27:47","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressArraySlotType_$6864_$returns$_t_bytes32_$","typeString":"function (AddressArraySlotType) pure returns (bytes32)"}},"id":7280,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5186:33:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5220:11:47","memberName":"deriveArray","nodeType":"MemberAccess","referencedDeclaration":9987,"src":"5186:45:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":7282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5186:47:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5234:6:47","memberName":"offset","nodeType":"MemberAccess","referencedDeclaration":9977,"src":"5186:54:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":7285,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5186:61:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7286,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5248:9:47","memberName":"asAddress","nodeType":"MemberAccess","referencedDeclaration":10106,"src":"5186:71:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_AddressSlotType_$10091_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.AddressSlotType)"}},"id":7287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5186:73:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$10091","typeString":"StorageSlotExtension.AddressSlotType"}},"id":7288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5260:6:47","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":10196,"src":"5186:80:47","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressSlotType_$10091_$_t_address_$returns$__$attached_to$_t_userDefinedValueType$_AddressSlotType_$10091_$","typeString":"function (StorageSlotExtension.AddressSlotType,address)"}},"id":7290,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5186:87:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7291,"nodeType":"ExpressionStatement","src":"5186:87:47"}]},"id":7293,"implemented":true,"kind":"function","modifiers":[],"name":"tUncheckedSet","nameLocation":"5096:13:47","nodeType":"FunctionDefinition","parameters":{"id":7274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7269,"mutability":"mutable","name":"slot","nameLocation":"5131:4:47","nodeType":"VariableDeclaration","scope":7293,"src":"5110:25:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"},"typeName":{"id":7268,"nodeType":"UserDefinedTypeName","pathNode":{"id":7267,"name":"AddressArraySlotType","nameLocations":["5110:20:47"],"nodeType":"IdentifierPath","referencedDeclaration":6864,"src":"5110:20:47"},"referencedDeclaration":6864,"src":"5110:20:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}},"visibility":"internal"},{"constant":false,"id":7271,"mutability":"mutable","name":"index","nameLocation":"5145:5:47","nodeType":"VariableDeclaration","scope":7293,"src":"5137:13:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7270,"name":"uint256","nodeType":"ElementaryTypeName","src":"5137:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7273,"mutability":"mutable","name":"value","nameLocation":"5160:5:47","nodeType":"VariableDeclaration","scope":7293,"src":"5152:13:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7272,"name":"address","nodeType":"ElementaryTypeName","src":"5152:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5109:57:47"},"returnParameters":{"id":7275,"nodeType":"ParameterList","parameters":[],"src":"5176:0:47"},"scope":7442,"src":"5087:193:47","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7341,"nodeType":"Block","src":"5352:393:47","statements":[{"assignments":[7302],"declarations":[{"constant":false,"id":7302,"mutability":"mutable","name":"length","nameLocation":"5444:6:47","nodeType":"VariableDeclaration","scope":7341,"src":"5436:14:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7301,"name":"uint256","nodeType":"ElementaryTypeName","src":"5436:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7311,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":7305,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7296,"src":"5481:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}],"expression":{"id":7303,"name":"AddressArraySlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6864,"src":"5453:20:47","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"type(AddressArraySlotType)"}},"id":7304,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5474:6:47","memberName":"unwrap","nodeType":"MemberAccess","src":"5453:27:47","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressArraySlotType_$6864_$returns$_t_bytes32_$","typeString":"function (AddressArraySlotType) pure returns (bytes32)"}},"id":7306,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5453:33:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5487:9:47","memberName":"asUint256","nodeType":"MemberAccess","referencedDeclaration":10157,"src":"5453:43:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$10142_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":7308,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5453:45:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":7309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5499:5:47","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":10251,"src":"5453:51:47","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Uint256SlotType_$10142_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function (StorageSlotExtension.Uint256SlotType) view returns (uint256)"}},"id":7310,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5453:53:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5436:70:47"},{"expression":{"arguments":[{"id":7325,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7298,"src":"5598:5:47","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":7320,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7302,"src":"5571:6:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":7315,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7296,"src":"5544:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}],"expression":{"id":7312,"name":"AddressArraySlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6864,"src":"5516:20:47","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"type(AddressArraySlotType)"}},"id":7314,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5537:6:47","memberName":"unwrap","nodeType":"MemberAccess","src":"5516:27:47","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressArraySlotType_$6864_$returns$_t_bytes32_$","typeString":"function (AddressArraySlotType) pure returns (bytes32)"}},"id":7316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5516:33:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5550:11:47","memberName":"deriveArray","nodeType":"MemberAccess","referencedDeclaration":9987,"src":"5516:45:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":7318,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5516:47:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5564:6:47","memberName":"offset","nodeType":"MemberAccess","referencedDeclaration":9977,"src":"5516:54:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":7321,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5516:62:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5579:9:47","memberName":"asAddress","nodeType":"MemberAccess","referencedDeclaration":10106,"src":"5516:72:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_AddressSlotType_$10091_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.AddressSlotType)"}},"id":7323,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5516:74:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$10091","typeString":"StorageSlotExtension.AddressSlotType"}},"id":7324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5591:6:47","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":10196,"src":"5516:81:47","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressSlotType_$10091_$_t_address_$returns$__$attached_to$_t_userDefinedValueType$_AddressSlotType_$10091_$","typeString":"function (StorageSlotExtension.AddressSlotType,address)"}},"id":7326,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5516:88:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7327,"nodeType":"ExpressionStatement","src":"5516:88:47"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7336,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7302,"src":"5727:6:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":7337,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5736:1:47","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5727:10:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":7331,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7296,"src":"5702:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}],"expression":{"id":7328,"name":"AddressArraySlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6864,"src":"5674:20:47","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"type(AddressArraySlotType)"}},"id":7330,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5695:6:47","memberName":"unwrap","nodeType":"MemberAccess","src":"5674:27:47","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressArraySlotType_$6864_$returns$_t_bytes32_$","typeString":"function (AddressArraySlotType) pure returns (bytes32)"}},"id":7332,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5674:33:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5708:9:47","memberName":"asUint256","nodeType":"MemberAccess","referencedDeclaration":10157,"src":"5674:43:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$10142_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":7334,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5674:45:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":7335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5720:6:47","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":10262,"src":"5674:52:47","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_Uint256SlotType_$10142_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function (StorageSlotExtension.Uint256SlotType,uint256)"}},"id":7339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5674:64:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7340,"nodeType":"ExpressionStatement","src":"5674:64:47"}]},"id":7342,"implemented":true,"kind":"function","modifiers":[],"name":"tPush","nameLocation":"5295:5:47","nodeType":"FunctionDefinition","parameters":{"id":7299,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7296,"mutability":"mutable","name":"slot","nameLocation":"5322:4:47","nodeType":"VariableDeclaration","scope":7342,"src":"5301:25:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"},"typeName":{"id":7295,"nodeType":"UserDefinedTypeName","pathNode":{"id":7294,"name":"AddressArraySlotType","nameLocations":["5301:20:47"],"nodeType":"IdentifierPath","referencedDeclaration":6864,"src":"5301:20:47"},"referencedDeclaration":6864,"src":"5301:20:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}},"visibility":"internal"},{"constant":false,"id":7298,"mutability":"mutable","name":"value","nameLocation":"5336:5:47","nodeType":"VariableDeclaration","scope":7342,"src":"5328:13:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7297,"name":"address","nodeType":"ElementaryTypeName","src":"5328:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5300:42:47"},"returnParameters":{"id":7300,"nodeType":"ParameterList","parameters":[],"src":"5352:0:47"},"scope":7442,"src":"5286:459:47","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7406,"nodeType":"Block","src":"5825:654:47","statements":[{"assignments":[7351],"declarations":[{"constant":false,"id":7351,"mutability":"mutable","name":"lastElementIndex","nameLocation":"5843:16:47","nodeType":"VariableDeclaration","scope":7406,"src":"5835:24:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7350,"name":"uint256","nodeType":"ElementaryTypeName","src":"5835:7:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7362,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":7354,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7345,"src":"5890:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}],"expression":{"id":7352,"name":"AddressArraySlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6864,"src":"5862:20:47","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"type(AddressArraySlotType)"}},"id":7353,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5883:6:47","memberName":"unwrap","nodeType":"MemberAccess","src":"5862:27:47","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressArraySlotType_$6864_$returns$_t_bytes32_$","typeString":"function (AddressArraySlotType) pure returns (bytes32)"}},"id":7355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5862:33:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5896:9:47","memberName":"asUint256","nodeType":"MemberAccess","referencedDeclaration":10157,"src":"5862:43:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$10142_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":7357,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5862:45:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":7358,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5908:5:47","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":10251,"src":"5862:51:47","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Uint256SlotType_$10142_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function (StorageSlotExtension.Uint256SlotType) view returns (uint256)"}},"id":7359,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5862:53:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":7360,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5918:1:47","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5862:57:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5835:84:47"},{"expression":{"arguments":[{"id":7371,"name":"lastElementIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7351,"src":"6092:16:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":7366,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7345,"src":"6067:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}],"expression":{"id":7363,"name":"AddressArraySlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6864,"src":"6039:20:47","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"type(AddressArraySlotType)"}},"id":7365,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6060:6:47","memberName":"unwrap","nodeType":"MemberAccess","src":"6039:27:47","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressArraySlotType_$6864_$returns$_t_bytes32_$","typeString":"function (AddressArraySlotType) pure returns (bytes32)"}},"id":7367,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6039:33:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6073:9:47","memberName":"asUint256","nodeType":"MemberAccess","referencedDeclaration":10157,"src":"6039:43:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$10142_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":7369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6039:45:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":7370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6085:6:47","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":10262,"src":"6039:52:47","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_Uint256SlotType_$10142_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function (StorageSlotExtension.Uint256SlotType,uint256)"}},"id":7372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6039:70:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7373,"nodeType":"ExpressionStatement","src":"6039:70:47"},{"assignments":[7378],"declarations":[{"constant":false,"id":7378,"mutability":"mutable","name":"lastElementSlot","nameLocation":"6156:15:47","nodeType":"VariableDeclaration","scope":7406,"src":"6119:52:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$10091","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":7377,"nodeType":"UserDefinedTypeName","pathNode":{"id":7376,"name":"StorageSlotExtension.AddressSlotType","nameLocations":["6119:20:47","6140:15:47"],"nodeType":"IdentifierPath","referencedDeclaration":10091,"src":"6119:36:47"},"referencedDeclaration":10091,"src":"6119:36:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$10091","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"}],"id":7390,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":7386,"name":"lastElementIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7351,"src":"6268:16:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":7381,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7345,"src":"6215:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}],"expression":{"id":7379,"name":"AddressArraySlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6864,"src":"6174:20:47","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"type(AddressArraySlotType)"}},"id":7380,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6208:6:47","memberName":"unwrap","nodeType":"MemberAccess","src":"6174:40:47","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_AddressArraySlotType_$6864_$returns$_t_bytes32_$","typeString":"function (AddressArraySlotType) pure returns (bytes32)"}},"id":7382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6174:46:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6234:11:47","memberName":"deriveArray","nodeType":"MemberAccess","referencedDeclaration":9987,"src":"6174:71:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (bytes32)"}},"id":7384,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6174:73:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6261:6:47","memberName":"offset","nodeType":"MemberAccess","referencedDeclaration":9977,"src":"6174:93:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":7387,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6174:111:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":7388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6299:9:47","memberName":"asAddress","nodeType":"MemberAccess","referencedDeclaration":10106,"src":"6174:134:47","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_AddressSlotType_$10091_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.AddressSlotType)"}},"id":7389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6174:136:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$10091","typeString":"StorageSlotExtension.AddressSlotType"}},"nodeType":"VariableDeclarationStatement","src":"6119:191:47"},{"expression":{"id":7395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7391,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7348,"src":"6352:5:47","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7392,"name":"lastElementSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7378,"src":"6360:15:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$10091","typeString":"StorageSlotExtension.AddressSlotType"}},"id":7393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6376:5:47","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":10185,"src":"6360:21:47","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressSlotType_$10091_$returns$_t_address_$attached_to$_t_userDefinedValueType$_AddressSlotType_$10091_$","typeString":"function (StorageSlotExtension.AddressSlotType) view returns (address)"}},"id":7394,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6360:23:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6352:31:47","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":7396,"nodeType":"ExpressionStatement","src":"6352:31:47"},{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":7402,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6469:1:47","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":7401,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6461:7:47","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":7400,"name":"address","nodeType":"ElementaryTypeName","src":"6461:7:47","typeDescriptions":{}}},"id":7403,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6461:10:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":7397,"name":"lastElementSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7378,"src":"6438:15:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$10091","typeString":"StorageSlotExtension.AddressSlotType"}},"id":7399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6454:6:47","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":10196,"src":"6438:22:47","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressSlotType_$10091_$_t_address_$returns$__$attached_to$_t_userDefinedValueType$_AddressSlotType_$10091_$","typeString":"function (StorageSlotExtension.AddressSlotType,address)"}},"id":7404,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6438:34:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7405,"nodeType":"ExpressionStatement","src":"6438:34:47"}]},"id":7407,"implemented":true,"kind":"function","modifiers":[],"name":"tPop","nameLocation":"5760:4:47","nodeType":"FunctionDefinition","parameters":{"id":7346,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7345,"mutability":"mutable","name":"slot","nameLocation":"5786:4:47","nodeType":"VariableDeclaration","scope":7407,"src":"5765:25:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"},"typeName":{"id":7344,"nodeType":"UserDefinedTypeName","pathNode":{"id":7343,"name":"AddressArraySlotType","nameLocations":["5765:20:47"],"nodeType":"IdentifierPath","referencedDeclaration":6864,"src":"5765:20:47"},"referencedDeclaration":6864,"src":"5765:20:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}},"visibility":"internal"}],"src":"5764:27:47"},"returnParameters":{"id":7349,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7348,"mutability":"mutable","name":"value","nameLocation":"5818:5:47","nodeType":"VariableDeclaration","scope":7407,"src":"5810:13:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7347,"name":"address","nodeType":"ElementaryTypeName","src":"5810:7:47","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5809:15:47"},"scope":7442,"src":"5751:728:47","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7423,"nodeType":"Block","src":"6769:46:47","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7416,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7410,"src":"6791:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":7417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6796:5:47","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":10251,"src":"6791:10:47","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Uint256SlotType_$10142_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function (StorageSlotExtension.Uint256SlotType) view returns (uint256)"}},"id":7418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6791:12:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":7419,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6806:1:47","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6791:16:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7413,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7410,"src":"6779:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":7415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6784:6:47","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":10262,"src":"6779:11:47","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_Uint256SlotType_$10142_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function (StorageSlotExtension.Uint256SlotType,uint256)"}},"id":7421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6779:29:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7422,"nodeType":"ExpressionStatement","src":"6779:29:47"}]},"id":7424,"implemented":true,"kind":"function","modifiers":[],"name":"tIncrement","nameLocation":"6706:10:47","nodeType":"FunctionDefinition","parameters":{"id":7411,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7410,"mutability":"mutable","name":"slot","nameLocation":"6754:4:47","nodeType":"VariableDeclaration","scope":7424,"src":"6717:41:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":7409,"nodeType":"UserDefinedTypeName","pathNode":{"id":7408,"name":"StorageSlotExtension.Uint256SlotType","nameLocations":["6717:20:47","6738:15:47"],"nodeType":"IdentifierPath","referencedDeclaration":10142,"src":"6717:36:47"},"referencedDeclaration":10142,"src":"6717:36:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"6716:43:47"},"returnParameters":{"id":7412,"nodeType":"ParameterList","parameters":[],"src":"6769:0:47"},"scope":7442,"src":"6697:118:47","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":7440,"nodeType":"Block","src":"6893:46:47","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":7433,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7427,"src":"6915:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":7434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6920:5:47","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":10251,"src":"6915:10:47","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Uint256SlotType_$10142_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function (StorageSlotExtension.Uint256SlotType) view returns (uint256)"}},"id":7435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6915:12:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":7436,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6930:1:47","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6915:16:47","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7430,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7427,"src":"6903:4:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":7432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6908:6:47","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":10262,"src":"6903:11:47","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_Uint256SlotType_$10142_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function (StorageSlotExtension.Uint256SlotType,uint256)"}},"id":7438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6903:29:47","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7439,"nodeType":"ExpressionStatement","src":"6903:29:47"}]},"id":7441,"implemented":true,"kind":"function","modifiers":[],"name":"tDecrement","nameLocation":"6830:10:47","nodeType":"FunctionDefinition","parameters":{"id":7428,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7427,"mutability":"mutable","name":"slot","nameLocation":"6878:4:47","nodeType":"VariableDeclaration","scope":7441,"src":"6841:41:47","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":7426,"nodeType":"UserDefinedTypeName","pathNode":{"id":7425,"name":"StorageSlotExtension.Uint256SlotType","nameLocations":["6841:20:47","6862:15:47"],"nodeType":"IdentifierPath","referencedDeclaration":10142,"src":"6841:36:47"},"referencedDeclaration":10142,"src":"6841:36:47","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"6840:43:47"},"returnParameters":{"id":7429,"nodeType":"ParameterList","parameters":[],"src":"6893:0:47"},"scope":7442,"src":"6821:118:47","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":7443,"src":"991:5950:47","usedErrors":[6872],"usedEvents":[]}],"src":"46:6896:47"},"id":47},"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","exportedSymbols":{"IVersion":[273],"Version":[7482]},"id":7483,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":7444,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:48"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol","id":7446,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7483,"sourceUnit":274,"src":"72:102:48","symbolAliases":[{"foreign":{"id":7445,"name":"IVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":273,"src":"81:8:48","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":7448,"name":"IVersion","nameLocations":["686:8:48"],"nodeType":"IdentifierPath","referencedDeclaration":273,"src":"686:8:48"},"id":7449,"nodeType":"InheritanceSpecifier","src":"686:8:48"}],"canonicalName":"Version","contractDependencies":[],"contractKind":"contract","documentation":{"id":7447,"nodeType":"StructuredDocumentation","src":"176:489:48","text":" @notice Retrieves a contract's version from storage.\n @dev The version is set at deployment time and cannot be changed. It would be immutable, but immutable strings\n are not yet supported.\n Contracts like factories and pools should have versions. These typically take the form of JSON strings containing\n detailed information about the deployment. For instance:\n `{name: 'ChildChainGaugeFactory', version: 2, deployment: '20230316-child-chain-gauge-factory-v2'}`"},"fullyImplemented":true,"id":7482,"linearizedBaseContracts":[7482,273],"name":"Version","nameLocation":"675:7:48","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":7451,"mutability":"mutable","name":"_version","nameLocation":"716:8:48","nodeType":"VariableDeclaration","scope":7482,"src":"701:23:48","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":7450,"name":"string","nodeType":"ElementaryTypeName","src":"701:6:48","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"body":{"id":7460,"nodeType":"Block","src":"767:38:48","statements":[{"expression":{"arguments":[{"id":7457,"name":"version_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7453,"src":"789:8:48","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":7456,"name":"_setVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7481,"src":"777:11:48","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":7458,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"777:21:48","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7459,"nodeType":"ExpressionStatement","src":"777:21:48"}]},"id":7461,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":7454,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7453,"mutability":"mutable","name":"version_","nameLocation":"757:8:48","nodeType":"VariableDeclaration","scope":7461,"src":"743:22:48","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":7452,"name":"string","nodeType":"ElementaryTypeName","src":"743:6:48","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"742:24:48"},"returnParameters":{"id":7455,"nodeType":"ParameterList","parameters":[],"src":"767:0:48"},"scope":7482,"src":"731:74:48","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[272],"body":{"id":7469,"nodeType":"Block","src":"974:32:48","statements":[{"expression":{"id":7467,"name":"_version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7451,"src":"991:8:48","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":7466,"id":7468,"nodeType":"Return","src":"984:15:48"}]},"documentation":{"id":7462,"nodeType":"StructuredDocumentation","src":"811:101:48","text":" @notice Getter for the version.\n @return version The stored contract version"},"functionSelector":"54fd4d50","id":7470,"implemented":true,"kind":"function","modifiers":[],"name":"version","nameLocation":"926:7:48","nodeType":"FunctionDefinition","parameters":{"id":7463,"nodeType":"ParameterList","parameters":[],"src":"933:2:48"},"returnParameters":{"id":7466,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7465,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7470,"src":"959:13:48","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":7464,"name":"string","nodeType":"ElementaryTypeName","src":"959:6:48","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"958:15:48"},"scope":7482,"src":"917:89:48","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":7480,"nodeType":"Block","src":"1146:38:48","statements":[{"expression":{"id":7478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":7476,"name":"_version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7451,"src":"1156:8:48","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":7477,"name":"newVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7473,"src":"1167:10:48","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"1156:21:48","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":7479,"nodeType":"ExpressionStatement","src":"1156:21:48"}]},"documentation":{"id":7471,"nodeType":"StructuredDocumentation","src":"1012:73:48","text":"@dev Internal setter that allows this contract to be used in proxies."},"id":7481,"implemented":true,"kind":"function","modifiers":[],"name":"_setVersion","nameLocation":"1099:11:48","nodeType":"FunctionDefinition","parameters":{"id":7474,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7473,"mutability":"mutable","name":"newVersion","nameLocation":"1125:10:48","nodeType":"VariableDeclaration","scope":7481,"src":"1111:24:48","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":7472,"name":"string","nodeType":"ElementaryTypeName","src":"1111:6:48","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1110:26:48"},"returnParameters":{"id":7475,"nodeType":"ParameterList","parameters":[],"src":"1146:0:48"},"scope":7482,"src":"1090:94:48","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":7483,"src":"666:520:48","usedErrors":[],"usedEvents":[]}],"src":"46:1141:48"},"id":48},"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol","exportedSymbols":{"Math":[43228],"SignedMath":[45088],"WordCodec":[7909]},"id":7910,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":7484,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:49"},{"absolutePath":"@openzeppelin/contracts/utils/math/SignedMath.sol","file":"@openzeppelin/contracts/utils/math/SignedMath.sol","id":7486,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7910,"sourceUnit":45089,"src":"72:79:49","symbolAliases":[{"foreign":{"id":7485,"name":"SignedMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45088,"src":"81:10:49","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/Math.sol","file":"@openzeppelin/contracts/utils/math/Math.sol","id":7488,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":7910,"sourceUnit":43229,"src":"152:67:49","symbolAliases":[{"foreign":{"id":7487,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43228,"src":"161:4:49","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"WordCodec","contractDependencies":[],"contractKind":"library","documentation":{"id":7489,"nodeType":"StructuredDocumentation","src":"221:1186:49","text":" @notice Library for encoding and decoding values stored inside a 256 bit word.\n @dev Typically used to pack multiple values in a single slot, saving gas by performing fewer storage accesses.\n Each value is defined by its size and the least significant bit in the word, also known as offset. For example, two\n 128 bit values may be encoded in a word by assigning one an offset of 0, and the other an offset of 128.\n We could use Solidity structs to pack values together in a single storage slot instead of relying on a custom and\n error-prone library, but unfortunately Solidity only allows for structs to live in either storage, calldata or\n memory. Because a memory struct uses not just memory but also a slot in the stack (to store its memory location),\n using memory for word-sized values (i.e. of 256 bits or less) is strictly less gas performant, and doesn't even\n prevent stack-too-deep issues. This is compounded by the fact that Balancer contracts typically are memory-\n intensive, and the cost of accessing memory increases quadratically with the number of allocated words. Manual\n packing and unpacking is therefore the preferred approach."},"fullyImplemented":true,"id":7909,"linearizedBaseContracts":[7909],"name":"WordCodec","nameLocation":"1416:9:49","nodeType":"ContractDefinition","nodes":[{"global":false,"id":7492,"libraryName":{"id":7490,"name":"Math","nameLocations":["1438:4:49"],"nodeType":"IdentifierPath","referencedDeclaration":43228,"src":"1438:4:49"},"nodeType":"UsingForDirective","src":"1432:23:49","typeName":{"id":7491,"name":"uint256","nodeType":"ElementaryTypeName","src":"1447:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":7495,"libraryName":{"id":7493,"name":"SignedMath","nameLocations":["1466:10:49"],"nodeType":"IdentifierPath","referencedDeclaration":45088,"src":"1466:10:49"},"nodeType":"UsingForDirective","src":"1460:28:49","typeName":{"id":7494,"name":"int256","nodeType":"ElementaryTypeName","src":"1481:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}},{"documentation":{"id":7496,"nodeType":"StructuredDocumentation","src":"1537:50:49","text":"@notice Function called with an invalid value."},"errorSelector":"e4337c05","id":7498,"name":"CodecOverflow","nameLocation":"1598:13:49","nodeType":"ErrorDefinition","parameters":{"id":7497,"nodeType":"ParameterList","parameters":[],"src":"1611:2:49"},"src":"1592:22:49"},{"documentation":{"id":7499,"nodeType":"StructuredDocumentation","src":"1620:64:49","text":"@notice Function called with an invalid bitLength or offset."},"errorSelector":"b4120f14","id":7501,"name":"OutOfBounds","nameLocation":"1695:11:49","nodeType":"ErrorDefinition","parameters":{"id":7500,"nodeType":"ParameterList","parameters":[],"src":"1706:2:49"},"src":"1689:20:49"},{"body":{"id":7522,"nodeType":"Block","src":"2258:496:49","statements":[{"expression":{"arguments":[{"id":7516,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7506,"src":"2292:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":7517,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7508,"src":"2299:6:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":7518,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7510,"src":"2307:9:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7515,"name":"_validateEncodingParams","nodeType":"Identifier","overloadedDeclarations":[7833,7908],"referencedDeclaration":7833,"src":"2268:23:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256) pure"}},"id":7519,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2268:49:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7520,"nodeType":"ExpressionStatement","src":"2268:49:49"},{"AST":{"nativeSrc":"2564:184:49","nodeType":"YulBlock","src":"2564:184:49","statements":[{"nativeSrc":"2578:37:49","nodeType":"YulVariableDeclaration","src":"2578:37:49","value":{"arguments":[{"arguments":[{"name":"bitLength","nativeSrc":"2598:9:49","nodeType":"YulIdentifier","src":"2598:9:49"},{"kind":"number","nativeSrc":"2609:1:49","nodeType":"YulLiteral","src":"2609:1:49","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"2594:3:49","nodeType":"YulIdentifier","src":"2594:3:49"},"nativeSrc":"2594:17:49","nodeType":"YulFunctionCall","src":"2594:17:49"},{"kind":"number","nativeSrc":"2613:1:49","nodeType":"YulLiteral","src":"2613:1:49","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"2590:3:49","nodeType":"YulIdentifier","src":"2590:3:49"},"nativeSrc":"2590:25:49","nodeType":"YulFunctionCall","src":"2590:25:49"},"variables":[{"name":"mask","nativeSrc":"2582:4:49","nodeType":"YulTypedName","src":"2582:4:49","type":""}]},{"nativeSrc":"2628:52:49","nodeType":"YulVariableDeclaration","src":"2628:52:49","value":{"arguments":[{"name":"word","nativeSrc":"2651:4:49","nodeType":"YulIdentifier","src":"2651:4:49"},{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"2665:6:49","nodeType":"YulIdentifier","src":"2665:6:49"},{"name":"mask","nativeSrc":"2673:4:49","nodeType":"YulIdentifier","src":"2673:4:49"}],"functionName":{"name":"shl","nativeSrc":"2661:3:49","nodeType":"YulIdentifier","src":"2661:3:49"},"nativeSrc":"2661:17:49","nodeType":"YulFunctionCall","src":"2661:17:49"}],"functionName":{"name":"not","nativeSrc":"2657:3:49","nodeType":"YulIdentifier","src":"2657:3:49"},"nativeSrc":"2657:22:49","nodeType":"YulFunctionCall","src":"2657:22:49"}],"functionName":{"name":"and","nativeSrc":"2647:3:49","nodeType":"YulIdentifier","src":"2647:3:49"},"nativeSrc":"2647:33:49","nodeType":"YulFunctionCall","src":"2647:33:49"},"variables":[{"name":"clearedWord","nativeSrc":"2632:11:49","nodeType":"YulTypedName","src":"2632:11:49","type":""}]},{"nativeSrc":"2693:45:49","nodeType":"YulAssignment","src":"2693:45:49","value":{"arguments":[{"name":"clearedWord","nativeSrc":"2706:11:49","nodeType":"YulIdentifier","src":"2706:11:49"},{"arguments":[{"name":"offset","nativeSrc":"2723:6:49","nodeType":"YulIdentifier","src":"2723:6:49"},{"name":"value","nativeSrc":"2731:5:49","nodeType":"YulIdentifier","src":"2731:5:49"}],"functionName":{"name":"shl","nativeSrc":"2719:3:49","nodeType":"YulIdentifier","src":"2719:3:49"},"nativeSrc":"2719:18:49","nodeType":"YulFunctionCall","src":"2719:18:49"}],"functionName":{"name":"or","nativeSrc":"2703:2:49","nodeType":"YulIdentifier","src":"2703:2:49"},"nativeSrc":"2703:35:49","nodeType":"YulFunctionCall","src":"2703:35:49"},"variableNames":[{"name":"result","nativeSrc":"2693:6:49","nodeType":"YulIdentifier","src":"2693:6:49"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":7510,"isOffset":false,"isSlot":false,"src":"2598:9:49","valueSize":1},{"declaration":7508,"isOffset":false,"isSlot":false,"src":"2665:6:49","valueSize":1},{"declaration":7508,"isOffset":false,"isSlot":false,"src":"2723:6:49","valueSize":1},{"declaration":7513,"isOffset":false,"isSlot":false,"src":"2693:6:49","valueSize":1},{"declaration":7506,"isOffset":false,"isSlot":false,"src":"2731:5:49","valueSize":1},{"declaration":7504,"isOffset":false,"isSlot":false,"src":"2651:4:49","valueSize":1}],"flags":["memory-safe"],"id":7521,"nodeType":"InlineAssembly","src":"2539:209:49"}]},"documentation":{"id":7502,"nodeType":"StructuredDocumentation","src":"1930:162:49","text":" @dev Inserts an unsigned integer of bitLength, shifted by an offset, into a 256 bit word,\n replacing the old value. Returns the new word."},"id":7523,"implemented":true,"kind":"function","modifiers":[],"name":"insertUint","nameLocation":"2106:10:49","nodeType":"FunctionDefinition","parameters":{"id":7511,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7504,"mutability":"mutable","name":"word","nameLocation":"2134:4:49","nodeType":"VariableDeclaration","scope":7523,"src":"2126:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7503,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2126:7:49","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7506,"mutability":"mutable","name":"value","nameLocation":"2156:5:49","nodeType":"VariableDeclaration","scope":7523,"src":"2148:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7505,"name":"uint256","nodeType":"ElementaryTypeName","src":"2148:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7508,"mutability":"mutable","name":"offset","nameLocation":"2179:6:49","nodeType":"VariableDeclaration","scope":7523,"src":"2171:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7507,"name":"uint256","nodeType":"ElementaryTypeName","src":"2171:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7510,"mutability":"mutable","name":"bitLength","nameLocation":"2203:9:49","nodeType":"VariableDeclaration","scope":7523,"src":"2195:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7509,"name":"uint256","nodeType":"ElementaryTypeName","src":"2195:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2116:102:49"},"returnParameters":{"id":7514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7513,"mutability":"mutable","name":"result","nameLocation":"2250:6:49","nodeType":"VariableDeclaration","scope":7523,"src":"2242:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7512,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2242:7:49","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2241:16:49"},"scope":7909,"src":"2097:657:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7552,"nodeType":"Block","src":"3023:568:49","statements":[{"assignments":[7536],"declarations":[{"constant":false,"id":7536,"mutability":"mutable","name":"addressBitLength","nameLocation":"3041:16:49","nodeType":"VariableDeclaration","scope":7552,"src":"3033:24:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7535,"name":"uint256","nodeType":"ElementaryTypeName","src":"3033:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7538,"initialValue":{"hexValue":"313630","id":7537,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3060:3:49","typeDescriptions":{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},"value":"160"},"nodeType":"VariableDeclarationStatement","src":"3033:30:49"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":7544,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7528,"src":"3113:5:49","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":7543,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3105:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":7542,"name":"uint160","nodeType":"ElementaryTypeName","src":"3105:7:49","typeDescriptions":{}}},"id":7545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3105:14:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":7541,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3097:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":7540,"name":"uint256","nodeType":"ElementaryTypeName","src":"3097:7:49","typeDescriptions":{}}},"id":7546,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3097:23:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":7547,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7530,"src":"3122:6:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":7548,"name":"addressBitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7536,"src":"3130:16:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7539,"name":"_validateEncodingParams","nodeType":"Identifier","overloadedDeclarations":[7833,7908],"referencedDeclaration":7833,"src":"3073:23:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256) pure"}},"id":7549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3073:74:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7550,"nodeType":"ExpressionStatement","src":"3073:74:49"},{"AST":{"nativeSrc":"3394:191:49","nodeType":"YulBlock","src":"3394:191:49","statements":[{"nativeSrc":"3408:44:49","nodeType":"YulVariableDeclaration","src":"3408:44:49","value":{"arguments":[{"arguments":[{"name":"addressBitLength","nativeSrc":"3428:16:49","nodeType":"YulIdentifier","src":"3428:16:49"},{"kind":"number","nativeSrc":"3446:1:49","nodeType":"YulLiteral","src":"3446:1:49","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"3424:3:49","nodeType":"YulIdentifier","src":"3424:3:49"},"nativeSrc":"3424:24:49","nodeType":"YulFunctionCall","src":"3424:24:49"},{"kind":"number","nativeSrc":"3450:1:49","nodeType":"YulLiteral","src":"3450:1:49","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"3420:3:49","nodeType":"YulIdentifier","src":"3420:3:49"},"nativeSrc":"3420:32:49","nodeType":"YulFunctionCall","src":"3420:32:49"},"variables":[{"name":"mask","nativeSrc":"3412:4:49","nodeType":"YulTypedName","src":"3412:4:49","type":""}]},{"nativeSrc":"3465:52:49","nodeType":"YulVariableDeclaration","src":"3465:52:49","value":{"arguments":[{"name":"word","nativeSrc":"3488:4:49","nodeType":"YulIdentifier","src":"3488:4:49"},{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"3502:6:49","nodeType":"YulIdentifier","src":"3502:6:49"},{"name":"mask","nativeSrc":"3510:4:49","nodeType":"YulIdentifier","src":"3510:4:49"}],"functionName":{"name":"shl","nativeSrc":"3498:3:49","nodeType":"YulIdentifier","src":"3498:3:49"},"nativeSrc":"3498:17:49","nodeType":"YulFunctionCall","src":"3498:17:49"}],"functionName":{"name":"not","nativeSrc":"3494:3:49","nodeType":"YulIdentifier","src":"3494:3:49"},"nativeSrc":"3494:22:49","nodeType":"YulFunctionCall","src":"3494:22:49"}],"functionName":{"name":"and","nativeSrc":"3484:3:49","nodeType":"YulIdentifier","src":"3484:3:49"},"nativeSrc":"3484:33:49","nodeType":"YulFunctionCall","src":"3484:33:49"},"variables":[{"name":"clearedWord","nativeSrc":"3469:11:49","nodeType":"YulTypedName","src":"3469:11:49","type":""}]},{"nativeSrc":"3530:45:49","nodeType":"YulAssignment","src":"3530:45:49","value":{"arguments":[{"name":"clearedWord","nativeSrc":"3543:11:49","nodeType":"YulIdentifier","src":"3543:11:49"},{"arguments":[{"name":"offset","nativeSrc":"3560:6:49","nodeType":"YulIdentifier","src":"3560:6:49"},{"name":"value","nativeSrc":"3568:5:49","nodeType":"YulIdentifier","src":"3568:5:49"}],"functionName":{"name":"shl","nativeSrc":"3556:3:49","nodeType":"YulIdentifier","src":"3556:3:49"},"nativeSrc":"3556:18:49","nodeType":"YulFunctionCall","src":"3556:18:49"}],"functionName":{"name":"or","nativeSrc":"3540:2:49","nodeType":"YulIdentifier","src":"3540:2:49"},"nativeSrc":"3540:35:49","nodeType":"YulFunctionCall","src":"3540:35:49"},"variableNames":[{"name":"result","nativeSrc":"3530:6:49","nodeType":"YulIdentifier","src":"3530:6:49"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":7536,"isOffset":false,"isSlot":false,"src":"3428:16:49","valueSize":1},{"declaration":7530,"isOffset":false,"isSlot":false,"src":"3502:6:49","valueSize":1},{"declaration":7530,"isOffset":false,"isSlot":false,"src":"3560:6:49","valueSize":1},{"declaration":7533,"isOffset":false,"isSlot":false,"src":"3530:6:49","valueSize":1},{"declaration":7528,"isOffset":false,"isSlot":false,"src":"3568:5:49","valueSize":1},{"declaration":7526,"isOffset":false,"isSlot":false,"src":"3488:4:49","valueSize":1}],"flags":["memory-safe"],"id":7551,"nodeType":"InlineAssembly","src":"3369:216:49"}]},"documentation":{"id":7524,"nodeType":"StructuredDocumentation","src":"2760:151:49","text":" @dev Inserts an address (160 bits), shifted by an offset, into a 256 bit word,\n replacing the old value. Returns the new word."},"id":7553,"implemented":true,"kind":"function","modifiers":[],"name":"insertAddress","nameLocation":"2925:13:49","nodeType":"FunctionDefinition","parameters":{"id":7531,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7526,"mutability":"mutable","name":"word","nameLocation":"2947:4:49","nodeType":"VariableDeclaration","scope":7553,"src":"2939:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7525,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2939:7:49","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7528,"mutability":"mutable","name":"value","nameLocation":"2961:5:49","nodeType":"VariableDeclaration","scope":7553,"src":"2953:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7527,"name":"address","nodeType":"ElementaryTypeName","src":"2953:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":7530,"mutability":"mutable","name":"offset","nameLocation":"2976:6:49","nodeType":"VariableDeclaration","scope":7553,"src":"2968:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7529,"name":"uint256","nodeType":"ElementaryTypeName","src":"2968:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2938:45:49"},"returnParameters":{"id":7534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7533,"mutability":"mutable","name":"result","nameLocation":"3015:6:49","nodeType":"VariableDeclaration","scope":7553,"src":"3007:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7532,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3007:7:49","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3006:16:49"},"scope":7909,"src":"2916:675:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7613,"nodeType":"Block","src":"3933:343:49","statements":[{"expression":{"arguments":[{"id":7568,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7558,"src":"3967:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},{"id":7569,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7560,"src":"3974:6:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":7570,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7562,"src":"3982:9:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7567,"name":"_validateEncodingParams","nodeType":"Identifier","overloadedDeclarations":[7833,7908],"referencedDeclaration":7908,"src":"3943:23:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (int256,uint256,uint256) pure"}},"id":7571,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3943:49:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7572,"nodeType":"ExpressionStatement","src":"3943:49:49"},{"assignments":[7574],"declarations":[{"constant":false,"id":7574,"mutability":"mutable","name":"mask","nameLocation":"4011:4:49","nodeType":"VariableDeclaration","scope":7613,"src":"4003:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7573,"name":"uint256","nodeType":"ElementaryTypeName","src":"4003:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7581,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7580,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":7575,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4019:1:49","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":7576,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7562,"src":"4024:9:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4019:14:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7578,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4018:16:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":7579,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4037:1:49","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4018:20:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4003:35:49"},{"assignments":[7583],"declarations":[{"constant":false,"id":7583,"mutability":"mutable","name":"clearedWord","nameLocation":"4056:11:49","nodeType":"VariableDeclaration","scope":7613,"src":"4048:19:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7582,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4048:7:49","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":7597,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":7588,"name":"word","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7556,"src":"4086:4:49","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":7587,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4078:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":7586,"name":"uint256","nodeType":"ElementaryTypeName","src":"4078:7:49","typeDescriptions":{}}},"id":7589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4078:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":7594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"4094:17:49","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7590,"name":"mask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7574,"src":"4096:4:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":7591,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7560,"src":"4104:6:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4096:14:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7593,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4095:16:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4078:33:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7585,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4070:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":7584,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4070:7:49","typeDescriptions":{}}},"id":7596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4070:42:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"4048:64:49"},{"expression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":7611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7598,"name":"clearedWord","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7583,"src":"4213:11:49","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":7603,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7558,"src":"4244:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":7602,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4236:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":7601,"name":"uint256","nodeType":"ElementaryTypeName","src":"4236:7:49","typeDescriptions":{}}},"id":7604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4236:14:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":7605,"name":"mask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7574,"src":"4253:4:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4236:21:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7607,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4235:23:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":7608,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7560,"src":"4262:6:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4235:33:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7600,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4227:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":7599,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4227:7:49","typeDescriptions":{}}},"id":7610,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4227:42:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"4213:56:49","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":7566,"id":7612,"nodeType":"Return","src":"4206:63:49"}]},"documentation":{"id":7554,"nodeType":"StructuredDocumentation","src":"3597:217:49","text":" @dev Inserts a signed integer shifted by an offset into a 256 bit word, replacing the old value. Returns\n the new word.\n Assumes `value` can be represented using `bitLength` bits."},"id":7614,"implemented":true,"kind":"function","modifiers":[],"name":"insertInt","nameLocation":"3828:9:49","nodeType":"FunctionDefinition","parameters":{"id":7563,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7556,"mutability":"mutable","name":"word","nameLocation":"3846:4:49","nodeType":"VariableDeclaration","scope":7614,"src":"3838:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7555,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3838:7:49","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7558,"mutability":"mutable","name":"value","nameLocation":"3859:5:49","nodeType":"VariableDeclaration","scope":7614,"src":"3852:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":7557,"name":"int256","nodeType":"ElementaryTypeName","src":"3852:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":7560,"mutability":"mutable","name":"offset","nameLocation":"3874:6:49","nodeType":"VariableDeclaration","scope":7614,"src":"3866:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7559,"name":"uint256","nodeType":"ElementaryTypeName","src":"3866:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7562,"mutability":"mutable","name":"bitLength","nameLocation":"3890:9:49","nodeType":"VariableDeclaration","scope":7614,"src":"3882:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7561,"name":"uint256","nodeType":"ElementaryTypeName","src":"3882:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3837:63:49"},"returnParameters":{"id":7566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7565,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7614,"src":"3924:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7564,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3924:7:49","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3923:9:49"},"scope":7909,"src":"3819:457:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7639,"nodeType":"Block","src":"4824:108:49","statements":[{"expression":{"arguments":[{"id":7627,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7617,"src":"4858:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":7628,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7619,"src":"4865:6:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":7629,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7621,"src":"4873:9:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7626,"name":"_validateEncodingParams","nodeType":"Identifier","overloadedDeclarations":[7833,7908],"referencedDeclaration":7833,"src":"4834:23:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256,uint256) pure"}},"id":7630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4834:49:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7631,"nodeType":"ExpressionStatement","src":"4834:49:49"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7636,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7634,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7617,"src":"4909:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":7635,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7619,"src":"4918:6:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4909:15:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7633,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4901:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":7632,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4901:7:49","typeDescriptions":{}}},"id":7637,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4901:24:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":7625,"id":7638,"nodeType":"Return","src":"4894:31:49"}]},"documentation":{"id":7615,"nodeType":"StructuredDocumentation","src":"4492:225:49","text":" @dev Encodes an unsigned integer shifted by an offset. Ensures value fits within\n `bitLength` bits.\n The return value can be ORed bitwise with other encoded values to form a 256 bit word."},"id":7640,"implemented":true,"kind":"function","modifiers":[],"name":"encodeUint","nameLocation":"4731:10:49","nodeType":"FunctionDefinition","parameters":{"id":7622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7617,"mutability":"mutable","name":"value","nameLocation":"4750:5:49","nodeType":"VariableDeclaration","scope":7640,"src":"4742:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7616,"name":"uint256","nodeType":"ElementaryTypeName","src":"4742:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7619,"mutability":"mutable","name":"offset","nameLocation":"4765:6:49","nodeType":"VariableDeclaration","scope":7640,"src":"4757:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7618,"name":"uint256","nodeType":"ElementaryTypeName","src":"4757:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7621,"mutability":"mutable","name":"bitLength","nameLocation":"4781:9:49","nodeType":"VariableDeclaration","scope":7640,"src":"4773:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7620,"name":"uint256","nodeType":"ElementaryTypeName","src":"4773:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4741:50:49"},"returnParameters":{"id":7625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7624,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7640,"src":"4815:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7623,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4815:7:49","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4814:9:49"},"scope":7909,"src":"4722:210:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7680,"nodeType":"Block","src":"5214:255:49","statements":[{"expression":{"arguments":[{"id":7653,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7643,"src":"5248:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},{"id":7654,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7645,"src":"5255:6:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":7655,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7647,"src":"5263:9:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7652,"name":"_validateEncodingParams","nodeType":"Identifier","overloadedDeclarations":[7833,7908],"referencedDeclaration":7908,"src":"5224:23:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (int256,uint256,uint256) pure"}},"id":7656,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5224:49:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":7657,"nodeType":"ExpressionStatement","src":"5224:49:49"},{"assignments":[7659],"declarations":[{"constant":false,"id":7659,"mutability":"mutable","name":"mask","nameLocation":"5292:4:49","nodeType":"VariableDeclaration","scope":7680,"src":"5284:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7658,"name":"uint256","nodeType":"ElementaryTypeName","src":"5284:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7666,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":7660,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5300:1:49","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":7661,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7647,"src":"5305:9:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5300:14:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7663,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5299:16:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":7664,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5318:1:49","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5299:20:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5284:35:49"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":7671,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7643,"src":"5437:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":7670,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5429:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":7669,"name":"uint256","nodeType":"ElementaryTypeName","src":"5429:7:49","typeDescriptions":{}}},"id":7672,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5429:14:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":7673,"name":"mask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7659,"src":"5446:4:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5429:21:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7675,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5428:23:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":7676,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7645,"src":"5455:6:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5428:33:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7668,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5420:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":7667,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5420:7:49","typeDescriptions":{}}},"id":7678,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5420:42:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":7651,"id":7679,"nodeType":"Return","src":"5413:49:49"}]},"documentation":{"id":7641,"nodeType":"StructuredDocumentation","src":"4938:171:49","text":" @dev Encodes a signed integer shifted by an offset.\n The return value can be ORed bitwise with other encoded values to form a 256 bit word."},"id":7681,"implemented":true,"kind":"function","modifiers":[],"name":"encodeInt","nameLocation":"5123:9:49","nodeType":"FunctionDefinition","parameters":{"id":7648,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7643,"mutability":"mutable","name":"value","nameLocation":"5140:5:49","nodeType":"VariableDeclaration","scope":7681,"src":"5133:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":7642,"name":"int256","nodeType":"ElementaryTypeName","src":"5133:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":7645,"mutability":"mutable","name":"offset","nameLocation":"5155:6:49","nodeType":"VariableDeclaration","scope":7681,"src":"5147:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7644,"name":"uint256","nodeType":"ElementaryTypeName","src":"5147:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7647,"mutability":"mutable","name":"bitLength","nameLocation":"5171:9:49","nodeType":"VariableDeclaration","scope":7681,"src":"5163:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7646,"name":"uint256","nodeType":"ElementaryTypeName","src":"5163:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5132:49:49"},"returnParameters":{"id":7651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7650,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7681,"src":"5205:7:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7649,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5205:7:49","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5204:9:49"},"scope":7909,"src":"5114:355:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7694,"nodeType":"Block","src":"5912:221:49","statements":[{"AST":{"nativeSrc":"6044:83:49","nodeType":"YulBlock","src":"6044:83:49","statements":[{"nativeSrc":"6058:59:49","nodeType":"YulAssignment","src":"6058:59:49","value":{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"6076:6:49","nodeType":"YulIdentifier","src":"6076:6:49"},{"name":"word","nativeSrc":"6084:4:49","nodeType":"YulIdentifier","src":"6084:4:49"}],"functionName":{"name":"shr","nativeSrc":"6072:3:49","nodeType":"YulIdentifier","src":"6072:3:49"},"nativeSrc":"6072:17:49","nodeType":"YulFunctionCall","src":"6072:17:49"},{"arguments":[{"arguments":[{"name":"bitLength","nativeSrc":"6099:9:49","nodeType":"YulIdentifier","src":"6099:9:49"},{"kind":"number","nativeSrc":"6110:1:49","nodeType":"YulLiteral","src":"6110:1:49","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"6095:3:49","nodeType":"YulIdentifier","src":"6095:3:49"},"nativeSrc":"6095:17:49","nodeType":"YulFunctionCall","src":"6095:17:49"},{"kind":"number","nativeSrc":"6114:1:49","nodeType":"YulLiteral","src":"6114:1:49","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"6091:3:49","nodeType":"YulIdentifier","src":"6091:3:49"},"nativeSrc":"6091:25:49","nodeType":"YulFunctionCall","src":"6091:25:49"}],"functionName":{"name":"and","nativeSrc":"6068:3:49","nodeType":"YulIdentifier","src":"6068:3:49"},"nativeSrc":"6068:49:49","nodeType":"YulFunctionCall","src":"6068:49:49"},"variableNames":[{"name":"result","nativeSrc":"6058:6:49","nodeType":"YulIdentifier","src":"6058:6:49"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":7688,"isOffset":false,"isSlot":false,"src":"6099:9:49","valueSize":1},{"declaration":7686,"isOffset":false,"isSlot":false,"src":"6076:6:49","valueSize":1},{"declaration":7691,"isOffset":false,"isSlot":false,"src":"6058:6:49","valueSize":1},{"declaration":7684,"isOffset":false,"isSlot":false,"src":"6084:4:49","valueSize":1}],"flags":["memory-safe"],"id":7693,"nodeType":"InlineAssembly","src":"6019:108:49"}]},"documentation":{"id":7682,"nodeType":"StructuredDocumentation","src":"5685:114:49","text":"@dev Decodes and returns an unsigned integer with `bitLength` bits, shifted by an offset, from a 256 bit word."},"id":7695,"implemented":true,"kind":"function","modifiers":[],"name":"decodeUint","nameLocation":"5813:10:49","nodeType":"FunctionDefinition","parameters":{"id":7689,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7684,"mutability":"mutable","name":"word","nameLocation":"5832:4:49","nodeType":"VariableDeclaration","scope":7695,"src":"5824:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7683,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5824:7:49","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7686,"mutability":"mutable","name":"offset","nameLocation":"5846:6:49","nodeType":"VariableDeclaration","scope":7695,"src":"5838:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7685,"name":"uint256","nodeType":"ElementaryTypeName","src":"5838:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7688,"mutability":"mutable","name":"bitLength","nameLocation":"5862:9:49","nodeType":"VariableDeclaration","scope":7695,"src":"5854:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7687,"name":"uint256","nodeType":"ElementaryTypeName","src":"5854:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5823:49:49"},"returnParameters":{"id":7692,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7691,"mutability":"mutable","name":"result","nameLocation":"5904:6:49","nodeType":"VariableDeclaration","scope":7695,"src":"5896:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7690,"name":"uint256","nodeType":"ElementaryTypeName","src":"5896:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5895:16:49"},"scope":7909,"src":"5804:329:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7746,"nodeType":"Block","src":"6361:660:49","statements":[{"assignments":[7708],"declarations":[{"constant":false,"id":7708,"mutability":"mutable","name":"maxInt","nameLocation":"6378:6:49","nodeType":"VariableDeclaration","scope":7746,"src":"6371:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":7707,"name":"int256","nodeType":"ElementaryTypeName","src":"6371:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":7721,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":7711,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6395:1:49","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7714,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7712,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7702,"src":"6401:9:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":7713,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6413:1:49","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6401:13:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7715,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6400:15:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6395:20:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7717,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6394:22:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":7718,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6419:1:49","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6394:26:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7710,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6387:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":7709,"name":"int256","nodeType":"ElementaryTypeName","src":"6387:6:49","typeDescriptions":{}}},"id":7720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6387:34:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"6371:50:49"},{"assignments":[7723],"declarations":[{"constant":false,"id":7723,"mutability":"mutable","name":"mask","nameLocation":"6439:4:49","nodeType":"VariableDeclaration","scope":7746,"src":"6431:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7722,"name":"uint256","nodeType":"ElementaryTypeName","src":"6431:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7730,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":7724,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6447:1:49","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":7725,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7702,"src":"6452:9:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6447:14:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7727,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6446:16:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":7728,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6465:1:49","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6446:20:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6431:35:49"},{"assignments":[7732],"declarations":[{"constant":false,"id":7732,"mutability":"mutable","name":"value","nameLocation":"6484:5:49","nodeType":"VariableDeclaration","scope":7746,"src":"6477:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":7731,"name":"int256","nodeType":"ElementaryTypeName","src":"6477:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":7744,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":7739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7737,"name":"word","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7698,"src":"6507:4:49","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":7738,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7700,"src":"6515:6:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6507:14:49","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":7736,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6499:7:49","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":7735,"name":"uint256","nodeType":"ElementaryTypeName","src":"6499:7:49","typeDescriptions":{}}},"id":7740,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6499:23:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":7741,"name":"mask","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7723,"src":"6525:4:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6499:30:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7734,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6492:6:49","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":7733,"name":"int256","nodeType":"ElementaryTypeName","src":"6492:6:49","typeDescriptions":{}}},"id":7743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6492:38:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"6477:53:49"},{"AST":{"nativeSrc":"6937:78:49","nodeType":"YulBlock","src":"6937:78:49","statements":[{"nativeSrc":"6951:54:49","nodeType":"YulAssignment","src":"6951:54:49","value":{"arguments":[{"arguments":[{"arguments":[{"name":"value","nativeSrc":"6971:5:49","nodeType":"YulIdentifier","src":"6971:5:49"},{"name":"maxInt","nativeSrc":"6978:6:49","nodeType":"YulIdentifier","src":"6978:6:49"}],"functionName":{"name":"gt","nativeSrc":"6968:2:49","nodeType":"YulIdentifier","src":"6968:2:49"},"nativeSrc":"6968:17:49","nodeType":"YulFunctionCall","src":"6968:17:49"},{"arguments":[{"name":"mask","nativeSrc":"6991:4:49","nodeType":"YulIdentifier","src":"6991:4:49"}],"functionName":{"name":"not","nativeSrc":"6987:3:49","nodeType":"YulIdentifier","src":"6987:3:49"},"nativeSrc":"6987:9:49","nodeType":"YulFunctionCall","src":"6987:9:49"}],"functionName":{"name":"mul","nativeSrc":"6964:3:49","nodeType":"YulIdentifier","src":"6964:3:49"},"nativeSrc":"6964:33:49","nodeType":"YulFunctionCall","src":"6964:33:49"},{"name":"value","nativeSrc":"6999:5:49","nodeType":"YulIdentifier","src":"6999:5:49"}],"functionName":{"name":"or","nativeSrc":"6961:2:49","nodeType":"YulIdentifier","src":"6961:2:49"},"nativeSrc":"6961:44:49","nodeType":"YulFunctionCall","src":"6961:44:49"},"variableNames":[{"name":"result","nativeSrc":"6951:6:49","nodeType":"YulIdentifier","src":"6951:6:49"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":7723,"isOffset":false,"isSlot":false,"src":"6991:4:49","valueSize":1},{"declaration":7708,"isOffset":false,"isSlot":false,"src":"6978:6:49","valueSize":1},{"declaration":7705,"isOffset":false,"isSlot":false,"src":"6951:6:49","valueSize":1},{"declaration":7732,"isOffset":false,"isSlot":false,"src":"6971:5:49","valueSize":1},{"declaration":7732,"isOffset":false,"isSlot":false,"src":"6999:5:49","valueSize":1}],"flags":["memory-safe"],"id":7745,"nodeType":"InlineAssembly","src":"6912:103:49"}]},"documentation":{"id":7696,"nodeType":"StructuredDocumentation","src":"6139:111:49","text":"@dev Decodes and returns a signed integer with `bitLength` bits, shifted by an offset, from a 256 bit word."},"id":7747,"implemented":true,"kind":"function","modifiers":[],"name":"decodeInt","nameLocation":"6264:9:49","nodeType":"FunctionDefinition","parameters":{"id":7703,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7698,"mutability":"mutable","name":"word","nameLocation":"6282:4:49","nodeType":"VariableDeclaration","scope":7747,"src":"6274:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7697,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6274:7:49","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7700,"mutability":"mutable","name":"offset","nameLocation":"6296:6:49","nodeType":"VariableDeclaration","scope":7747,"src":"6288:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7699,"name":"uint256","nodeType":"ElementaryTypeName","src":"6288:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7702,"mutability":"mutable","name":"bitLength","nameLocation":"6312:9:49","nodeType":"VariableDeclaration","scope":7747,"src":"6304:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7701,"name":"uint256","nodeType":"ElementaryTypeName","src":"6304:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6273:49:49"},"returnParameters":{"id":7706,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7705,"mutability":"mutable","name":"result","nameLocation":"6353:6:49","nodeType":"VariableDeclaration","scope":7747,"src":"6346:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":7704,"name":"int256","nodeType":"ElementaryTypeName","src":"6346:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"6345:15:49"},"scope":7909,"src":"6255:766:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7758,"nodeType":"Block","src":"7218:215:49","statements":[{"AST":{"nativeSrc":"7350:77:49","nodeType":"YulBlock","src":"7350:77:49","statements":[{"nativeSrc":"7364:53:49","nodeType":"YulAssignment","src":"7364:53:49","value":{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"7382:6:49","nodeType":"YulIdentifier","src":"7382:6:49"},{"name":"word","nativeSrc":"7390:4:49","nodeType":"YulIdentifier","src":"7390:4:49"}],"functionName":{"name":"shr","nativeSrc":"7378:3:49","nodeType":"YulIdentifier","src":"7378:3:49"},"nativeSrc":"7378:17:49","nodeType":"YulFunctionCall","src":"7378:17:49"},{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"7405:3:49","nodeType":"YulLiteral","src":"7405:3:49","type":"","value":"160"},{"kind":"number","nativeSrc":"7410:1:49","nodeType":"YulLiteral","src":"7410:1:49","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"7401:3:49","nodeType":"YulIdentifier","src":"7401:3:49"},"nativeSrc":"7401:11:49","nodeType":"YulFunctionCall","src":"7401:11:49"},{"kind":"number","nativeSrc":"7414:1:49","nodeType":"YulLiteral","src":"7414:1:49","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"7397:3:49","nodeType":"YulIdentifier","src":"7397:3:49"},"nativeSrc":"7397:19:49","nodeType":"YulFunctionCall","src":"7397:19:49"}],"functionName":{"name":"and","nativeSrc":"7374:3:49","nodeType":"YulIdentifier","src":"7374:3:49"},"nativeSrc":"7374:43:49","nodeType":"YulFunctionCall","src":"7374:43:49"},"variableNames":[{"name":"result","nativeSrc":"7364:6:49","nodeType":"YulIdentifier","src":"7364:6:49"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":7752,"isOffset":false,"isSlot":false,"src":"7382:6:49","valueSize":1},{"declaration":7755,"isOffset":false,"isSlot":false,"src":"7364:6:49","valueSize":1},{"declaration":7750,"isOffset":false,"isSlot":false,"src":"7390:4:49","valueSize":1}],"flags":["memory-safe"],"id":7757,"nodeType":"InlineAssembly","src":"7325:102:49"}]},"documentation":{"id":7748,"nodeType":"StructuredDocumentation","src":"7027:94:49","text":"@dev Decodes and returns an address (160 bits), shifted by an offset, from a 256 bit word."},"id":7759,"implemented":true,"kind":"function","modifiers":[],"name":"decodeAddress","nameLocation":"7135:13:49","nodeType":"FunctionDefinition","parameters":{"id":7753,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7750,"mutability":"mutable","name":"word","nameLocation":"7157:4:49","nodeType":"VariableDeclaration","scope":7759,"src":"7149:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7749,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7149:7:49","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7752,"mutability":"mutable","name":"offset","nameLocation":"7171:6:49","nodeType":"VariableDeclaration","scope":7759,"src":"7163:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7751,"name":"uint256","nodeType":"ElementaryTypeName","src":"7163:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7148:30:49"},"returnParameters":{"id":7756,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7755,"mutability":"mutable","name":"result","nameLocation":"7210:6:49","nodeType":"VariableDeclaration","scope":7759,"src":"7202:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":7754,"name":"address","nodeType":"ElementaryTypeName","src":"7202:7:49","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7201:16:49"},"scope":7909,"src":"7126:307:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7770,"nodeType":"Block","src":"7823:183:49","statements":[{"AST":{"nativeSrc":"7941:59:49","nodeType":"YulBlock","src":"7941:59:49","statements":[{"nativeSrc":"7955:35:49","nodeType":"YulAssignment","src":"7955:35:49","value":{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"7973:6:49","nodeType":"YulIdentifier","src":"7973:6:49"},{"name":"word","nativeSrc":"7981:4:49","nodeType":"YulIdentifier","src":"7981:4:49"}],"functionName":{"name":"shr","nativeSrc":"7969:3:49","nodeType":"YulIdentifier","src":"7969:3:49"},"nativeSrc":"7969:17:49","nodeType":"YulFunctionCall","src":"7969:17:49"},{"kind":"number","nativeSrc":"7988:1:49","nodeType":"YulLiteral","src":"7988:1:49","type":"","value":"1"}],"functionName":{"name":"and","nativeSrc":"7965:3:49","nodeType":"YulIdentifier","src":"7965:3:49"},"nativeSrc":"7965:25:49","nodeType":"YulFunctionCall","src":"7965:25:49"},"variableNames":[{"name":"result","nativeSrc":"7955:6:49","nodeType":"YulIdentifier","src":"7955:6:49"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":7764,"isOffset":false,"isSlot":false,"src":"7973:6:49","valueSize":1},{"declaration":7767,"isOffset":false,"isSlot":false,"src":"7955:6:49","valueSize":1},{"declaration":7762,"isOffset":false,"isSlot":false,"src":"7981:4:49","valueSize":1}],"flags":["memory-safe"],"id":7769,"nodeType":"InlineAssembly","src":"7916:84:49"}]},"documentation":{"id":7760,"nodeType":"StructuredDocumentation","src":"7652:80:49","text":"@dev Decodes and returns a boolean shifted by an offset from a 256 bit word."},"id":7771,"implemented":true,"kind":"function","modifiers":[],"name":"decodeBool","nameLocation":"7746:10:49","nodeType":"FunctionDefinition","parameters":{"id":7765,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7762,"mutability":"mutable","name":"word","nameLocation":"7765:4:49","nodeType":"VariableDeclaration","scope":7771,"src":"7757:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7761,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7757:7:49","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7764,"mutability":"mutable","name":"offset","nameLocation":"7779:6:49","nodeType":"VariableDeclaration","scope":7771,"src":"7771:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7763,"name":"uint256","nodeType":"ElementaryTypeName","src":"7771:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7756:30:49"},"returnParameters":{"id":7768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7767,"mutability":"mutable","name":"result","nameLocation":"7815:6:49","nodeType":"VariableDeclaration","scope":7771,"src":"7810:11:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7766,"name":"bool","nodeType":"ElementaryTypeName","src":"7810:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7809:13:49"},"scope":7909,"src":"7737:269:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7784,"nodeType":"Block","src":"8261:371:49","statements":[{"AST":{"nativeSrc":"8495:131:49","nodeType":"YulBlock","src":"8495:131:49","statements":[{"nativeSrc":"8509:49:49","nodeType":"YulVariableDeclaration","src":"8509:49:49","value":{"arguments":[{"name":"word","nativeSrc":"8532:4:49","nodeType":"YulIdentifier","src":"8532:4:49"},{"arguments":[{"arguments":[{"name":"offset","nativeSrc":"8546:6:49","nodeType":"YulIdentifier","src":"8546:6:49"},{"kind":"number","nativeSrc":"8554:1:49","nodeType":"YulLiteral","src":"8554:1:49","type":"","value":"1"}],"functionName":{"name":"shl","nativeSrc":"8542:3:49","nodeType":"YulIdentifier","src":"8542:3:49"},"nativeSrc":"8542:14:49","nodeType":"YulFunctionCall","src":"8542:14:49"}],"functionName":{"name":"not","nativeSrc":"8538:3:49","nodeType":"YulIdentifier","src":"8538:3:49"},"nativeSrc":"8538:19:49","nodeType":"YulFunctionCall","src":"8538:19:49"}],"functionName":{"name":"and","nativeSrc":"8528:3:49","nodeType":"YulIdentifier","src":"8528:3:49"},"nativeSrc":"8528:30:49","nodeType":"YulFunctionCall","src":"8528:30:49"},"variables":[{"name":"clearedWord","nativeSrc":"8513:11:49","nodeType":"YulTypedName","src":"8513:11:49","type":""}]},{"nativeSrc":"8571:45:49","nodeType":"YulAssignment","src":"8571:45:49","value":{"arguments":[{"name":"clearedWord","nativeSrc":"8584:11:49","nodeType":"YulIdentifier","src":"8584:11:49"},{"arguments":[{"name":"offset","nativeSrc":"8601:6:49","nodeType":"YulIdentifier","src":"8601:6:49"},{"name":"value","nativeSrc":"8609:5:49","nodeType":"YulIdentifier","src":"8609:5:49"}],"functionName":{"name":"shl","nativeSrc":"8597:3:49","nodeType":"YulIdentifier","src":"8597:3:49"},"nativeSrc":"8597:18:49","nodeType":"YulFunctionCall","src":"8597:18:49"}],"functionName":{"name":"or","nativeSrc":"8581:2:49","nodeType":"YulIdentifier","src":"8581:2:49"},"nativeSrc":"8581:35:49","nodeType":"YulFunctionCall","src":"8581:35:49"},"variableNames":[{"name":"result","nativeSrc":"8571:6:49","nodeType":"YulIdentifier","src":"8571:6:49"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":7778,"isOffset":false,"isSlot":false,"src":"8546:6:49","valueSize":1},{"declaration":7778,"isOffset":false,"isSlot":false,"src":"8601:6:49","valueSize":1},{"declaration":7781,"isOffset":false,"isSlot":false,"src":"8571:6:49","valueSize":1},{"declaration":7776,"isOffset":false,"isSlot":false,"src":"8609:5:49","valueSize":1},{"declaration":7774,"isOffset":false,"isSlot":false,"src":"8532:4:49","valueSize":1}],"flags":["memory-safe"],"id":7783,"nodeType":"InlineAssembly","src":"8470:156:49"}]},"documentation":{"id":7772,"nodeType":"StructuredDocumentation","src":"8012:143:49","text":" @dev Inserts a boolean value shifted by an offset into a 256 bit word, replacing the old value.\n Returns the new word."},"id":7785,"implemented":true,"kind":"function","modifiers":[],"name":"insertBool","nameLocation":"8169:10:49","nodeType":"FunctionDefinition","parameters":{"id":7779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7774,"mutability":"mutable","name":"word","nameLocation":"8188:4:49","nodeType":"VariableDeclaration","scope":7785,"src":"8180:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7773,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8180:7:49","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":7776,"mutability":"mutable","name":"value","nameLocation":"8199:5:49","nodeType":"VariableDeclaration","scope":7785,"src":"8194:10:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":7775,"name":"bool","nodeType":"ElementaryTypeName","src":"8194:4:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":7778,"mutability":"mutable","name":"offset","nameLocation":"8214:6:49","nodeType":"VariableDeclaration","scope":7785,"src":"8206:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7777,"name":"uint256","nodeType":"ElementaryTypeName","src":"8206:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8179:42:49"},"returnParameters":{"id":7782,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7781,"mutability":"mutable","name":"result","nameLocation":"8253:6:49","nodeType":"VariableDeclaration","scope":7785,"src":"8245:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":7780,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8245:7:49","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"8244:16:49"},"scope":7909,"src":"8160:472:49","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7832,"nodeType":"Block","src":"8942:540:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7794,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7789,"src":"8956:6:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"323536","id":7795,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8966:3:49","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"value":"256"},"src":"8956:13:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7801,"nodeType":"IfStatement","src":"8952:64:49","trueBody":{"id":7800,"nodeType":"Block","src":"8971:45:49","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7797,"name":"OutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7501,"src":"8992:11:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7798,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8992:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7799,"nodeType":"RevertStatement","src":"8985:20:49"}]}},{"condition":{"id":7816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"9184:61:49","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7802,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7791,"src":"9186:9:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"31","id":7803,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9199:1:49","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9186:14:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7805,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7791,"src":"9204:9:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"hexValue":"323535","id":7808,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9226:3:49","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"323536","id":7809,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9231:3:49","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"value":"256"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":7810,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7789,"src":"9237:6:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9231:12:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7806,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43228,"src":"9217:4:49","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$43228_$","typeString":"type(library Math)"}},"id":7807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9222:3:49","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":42379,"src":"9217:8:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":7812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9217:27:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9204:40:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9186:58:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":7815,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9185:60:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7821,"nodeType":"IfStatement","src":"9180:112:49","trueBody":{"id":7820,"nodeType":"Block","src":"9247:45:49","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7817,"name":"OutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7501,"src":"9268:11:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9268:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7819,"nodeType":"RevertStatement","src":"9261:20:49"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7822,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7787,"src":"9404:5:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"id":7823,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7791,"src":"9413:9:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9404:18:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":7825,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9426:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9404:23:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7831,"nodeType":"IfStatement","src":"9400:76:49","trueBody":{"id":7830,"nodeType":"Block","src":"9429:47:49","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7827,"name":"CodecOverflow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7498,"src":"9450:13:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9450:15:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7829,"nodeType":"RevertStatement","src":"9443:22:49"}]}}]},"id":7833,"implemented":true,"kind":"function","modifiers":[],"name":"_validateEncodingParams","nameLocation":"8855:23:49","nodeType":"FunctionDefinition","parameters":{"id":7792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7787,"mutability":"mutable","name":"value","nameLocation":"8887:5:49","nodeType":"VariableDeclaration","scope":7833,"src":"8879:13:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7786,"name":"uint256","nodeType":"ElementaryTypeName","src":"8879:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7789,"mutability":"mutable","name":"offset","nameLocation":"8902:6:49","nodeType":"VariableDeclaration","scope":7833,"src":"8894:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7788,"name":"uint256","nodeType":"ElementaryTypeName","src":"8894:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7791,"mutability":"mutable","name":"bitLength","nameLocation":"8918:9:49","nodeType":"VariableDeclaration","scope":7833,"src":"8910:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7790,"name":"uint256","nodeType":"ElementaryTypeName","src":"8910:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8878:50:49"},"returnParameters":{"id":7793,"nodeType":"ParameterList","parameters":[],"src":"8942:0:49"},"scope":7909,"src":"8846:636:49","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":7907,"nodeType":"Block","src":"9583:1080:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7842,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"9597:6:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"323536","id":7843,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9607:3:49","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"value":"256"},"src":"9597:13:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7849,"nodeType":"IfStatement","src":"9593:64:49","trueBody":{"id":7848,"nodeType":"Block","src":"9612:45:49","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7845,"name":"OutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7501,"src":"9633:11:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7846,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9633:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7847,"nodeType":"RevertStatement","src":"9626:20:49"}]}},{"condition":{"id":7864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"9825:61:49","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":7862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7850,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7839,"src":"9827:9:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"31","id":7851,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9840:1:49","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9827:14:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7853,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7839,"src":"9845:9:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"hexValue":"323535","id":7856,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9867:3:49","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"323536","id":7857,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9872:3:49","typeDescriptions":{"typeIdentifier":"t_rational_256_by_1","typeString":"int_const 256"},"value":"256"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":7858,"name":"offset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7837,"src":"9878:6:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9872:12:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":7854,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43228,"src":"9858:4:49","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$43228_$","typeString":"type(library Math)"}},"id":7855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9863:3:49","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":42379,"src":"9858:8:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":7860,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9858:27:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9845:40:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9827:58:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":7863,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9826:60:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7869,"nodeType":"IfStatement","src":"9821:112:49","trueBody":{"id":7868,"nodeType":"Block","src":"9888:45:49","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7865,"name":"OutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7501,"src":"9909:11:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9909:13:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7867,"nodeType":"RevertStatement","src":"9902:20:49"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":7872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7870,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7835,"src":"10013:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"30","id":7871,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10022:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10013:10:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":7905,"nodeType":"Block","src":"10306:351:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":7889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7887,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7835,"src":"10550:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":7888,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10558:1:49","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10550:9:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":7890,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10549:11:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":7891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10561:3:49","memberName":"abs","nodeType":"MemberAccess","referencedDeclaration":45087,"src":"10549:15:49","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_uint256_$attached_to$_t_int256_$","typeString":"function (int256) pure returns (uint256)"}},"id":7892,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10549:17:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7893,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7839,"src":"10571:9:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":7894,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10583:1:49","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10571:13:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7896,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10570:15:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10549:36:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":7898,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10589:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10549:41:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7904,"nodeType":"IfStatement","src":"10545:102:49","trueBody":{"id":7903,"nodeType":"Block","src":"10592:55:49","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7900,"name":"CodecOverflow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7498,"src":"10617:13:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10617:15:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7902,"nodeType":"RevertStatement","src":"10610:22:49"}]}}]},"id":7906,"nodeType":"IfStatement","src":"10009:648:49","trueBody":{"id":7886,"nodeType":"Block","src":"10025:275:49","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":7880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":7878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7873,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7835,"src":"10204:5:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7874,"name":"bitLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7839,"src":"10214:9:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":7875,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10226:1:49","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10214:13:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":7877,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10213:15:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10204:24:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":7879,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10232:1:49","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10204:29:49","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":7885,"nodeType":"IfStatement","src":"10200:90:49","trueBody":{"id":7884,"nodeType":"Block","src":"10235:55:49","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":7881,"name":"CodecOverflow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7498,"src":"10260:13:49","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":7882,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10260:15:49","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":7883,"nodeType":"RevertStatement","src":"10253:22:49"}]}}]}}]},"id":7908,"implemented":true,"kind":"function","modifiers":[],"name":"_validateEncodingParams","nameLocation":"9497:23:49","nodeType":"FunctionDefinition","parameters":{"id":7840,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7835,"mutability":"mutable","name":"value","nameLocation":"9528:5:49","nodeType":"VariableDeclaration","scope":7908,"src":"9521:12:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":7834,"name":"int256","nodeType":"ElementaryTypeName","src":"9521:6:49","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":7837,"mutability":"mutable","name":"offset","nameLocation":"9543:6:49","nodeType":"VariableDeclaration","scope":7908,"src":"9535:14:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7836,"name":"uint256","nodeType":"ElementaryTypeName","src":"9535:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7839,"mutability":"mutable","name":"bitLength","nameLocation":"9559:9:49","nodeType":"VariableDeclaration","scope":7908,"src":"9551:17:49","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7838,"name":"uint256","nodeType":"ElementaryTypeName","src":"9551:7:49","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9520:49:49"},"returnParameters":{"id":7841,"nodeType":"ParameterList","parameters":[],"src":"9583:0:49"},"scope":7909,"src":"9488:1175:49","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":7910,"src":"1408:9257:49","usedErrors":[7498,7501],"usedEvents":[]}],"src":"46:10620:49"},"id":49},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","exportedSymbols":{"FixedPoint":[8208],"LogExpMath":[9564]},"id":8209,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":7911,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:50"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol","file":"./LogExpMath.sol","id":7913,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":8209,"sourceUnit":9565,"src":"72:46:50","symbolAliases":[{"foreign":{"id":7912,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9564,"src":"81:10:50","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"FixedPoint","contractDependencies":[],"contractKind":"library","documentation":{"id":7914,"nodeType":"StructuredDocumentation","src":"120:119:50","text":"@notice Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision."},"fullyImplemented":true,"id":8208,"linearizedBaseContracts":[8208],"name":"FixedPoint","nameLocation":"247:10:50","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":7915,"nodeType":"StructuredDocumentation","src":"264:39:50","text":"@notice Attempted division by zero."},"errorSelector":"0a0c22c7","id":7917,"name":"ZeroDivision","nameLocation":"314:12:50","nodeType":"ErrorDefinition","parameters":{"id":7916,"nodeType":"ParameterList","parameters":[],"src":"326:2:50"},"src":"308:21:50"},{"constant":true,"id":7920,"mutability":"constant","name":"ONE","nameLocation":"459:3:50","nodeType":"VariableDeclaration","scope":8208,"src":"433:36:50","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7918,"name":"uint256","nodeType":"ElementaryTypeName","src":"433:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653138","id":7919,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"465:4:50","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"internal"},{"constant":true,"id":7925,"mutability":"constant","name":"TWO","nameLocation":"522:3:50","nodeType":"VariableDeclaration","scope":8208,"src":"496:39:50","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7921,"name":"uint256","nodeType":"ElementaryTypeName","src":"496:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7924,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":7922,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"528:1:50","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":7923,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7920,"src":"532:3:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"528:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":7930,"mutability":"constant","name":"FOUR","nameLocation":"567:4:50","nodeType":"VariableDeclaration","scope":8208,"src":"541:40:50","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7926,"name":"uint256","nodeType":"ElementaryTypeName","src":"541:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7929,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"34","id":7927,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"574:1:50","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":7928,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7920,"src":"578:3:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"574:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":7933,"mutability":"constant","name":"MAX_POW_RELATIVE_ERROR","nameLocation":"613:22:50","nodeType":"VariableDeclaration","scope":8208,"src":"587:56:50","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7931,"name":"uint256","nodeType":"ElementaryTypeName","src":"587:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3130303030","id":7932,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"638:5:50","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"value":"10000"},"visibility":"internal"},{"body":{"id":7952,"nodeType":"Block","src":"733:148:50","statements":[{"assignments":[7943],"declarations":[{"constant":false,"id":7943,"mutability":"mutable","name":"product","nameLocation":"828:7:50","nodeType":"VariableDeclaration","scope":7952,"src":"820:15:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7942,"name":"uint256","nodeType":"ElementaryTypeName","src":"820:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7947,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7944,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7935,"src":"838:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":7945,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7937,"src":"842:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"838:5:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"820:23:50"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7948,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7943,"src":"861:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":7949,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7920,"src":"871:3:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"861:13:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7941,"id":7951,"nodeType":"Return","src":"854:20:50"}]},"id":7953,"implemented":true,"kind":"function","modifiers":[],"name":"mulDown","nameLocation":"671:7:50","nodeType":"FunctionDefinition","parameters":{"id":7938,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7935,"mutability":"mutable","name":"a","nameLocation":"687:1:50","nodeType":"VariableDeclaration","scope":7953,"src":"679:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7934,"name":"uint256","nodeType":"ElementaryTypeName","src":"679:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7937,"mutability":"mutable","name":"b","nameLocation":"698:1:50","nodeType":"VariableDeclaration","scope":7953,"src":"690:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7936,"name":"uint256","nodeType":"ElementaryTypeName","src":"690:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"678:22:50"},"returnParameters":{"id":7941,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7940,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7953,"src":"724:7:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7939,"name":"uint256","nodeType":"ElementaryTypeName","src":"724:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"723:9:50"},"scope":8208,"src":"662:219:50","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7969,"nodeType":"Block","src":"963:351:50","statements":[{"assignments":[7963],"declarations":[{"constant":false,"id":7963,"mutability":"mutable","name":"product","nameLocation":"1058:7:50","nodeType":"VariableDeclaration","scope":7969,"src":"1050:15:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7962,"name":"uint256","nodeType":"ElementaryTypeName","src":"1050:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7967,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7964,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7955,"src":"1068:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":7965,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7957,"src":"1072:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1068:5:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1050:23:50"},{"AST":{"nativeSrc":"1211:97:50","nodeType":"YulBlock","src":"1211:97:50","statements":[{"nativeSrc":"1225:73:50","nodeType":"YulAssignment","src":"1225:73:50","value":{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"1253:7:50","nodeType":"YulIdentifier","src":"1253:7:50"}],"functionName":{"name":"iszero","nativeSrc":"1246:6:50","nodeType":"YulIdentifier","src":"1246:6:50"},"nativeSrc":"1246:15:50","nodeType":"YulFunctionCall","src":"1246:15:50"}],"functionName":{"name":"iszero","nativeSrc":"1239:6:50","nodeType":"YulIdentifier","src":"1239:6:50"},"nativeSrc":"1239:23:50","nodeType":"YulFunctionCall","src":"1239:23:50"},{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"1276:7:50","nodeType":"YulIdentifier","src":"1276:7:50"},{"kind":"number","nativeSrc":"1285:1:50","nodeType":"YulLiteral","src":"1285:1:50","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"1272:3:50","nodeType":"YulIdentifier","src":"1272:3:50"},"nativeSrc":"1272:15:50","nodeType":"YulFunctionCall","src":"1272:15:50"},{"name":"ONE","nativeSrc":"1289:3:50","nodeType":"YulIdentifier","src":"1289:3:50"}],"functionName":{"name":"div","nativeSrc":"1268:3:50","nodeType":"YulIdentifier","src":"1268:3:50"},"nativeSrc":"1268:25:50","nodeType":"YulFunctionCall","src":"1268:25:50"},{"kind":"number","nativeSrc":"1295:1:50","nodeType":"YulLiteral","src":"1295:1:50","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"1264:3:50","nodeType":"YulIdentifier","src":"1264:3:50"},"nativeSrc":"1264:33:50","nodeType":"YulFunctionCall","src":"1264:33:50"}],"functionName":{"name":"mul","nativeSrc":"1235:3:50","nodeType":"YulIdentifier","src":"1235:3:50"},"nativeSrc":"1235:63:50","nodeType":"YulFunctionCall","src":"1235:63:50"},"variableNames":[{"name":"result","nativeSrc":"1225:6:50","nodeType":"YulIdentifier","src":"1225:6:50"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":7920,"isOffset":false,"isSlot":false,"src":"1289:3:50","valueSize":1},{"declaration":7963,"isOffset":false,"isSlot":false,"src":"1253:7:50","valueSize":1},{"declaration":7963,"isOffset":false,"isSlot":false,"src":"1276:7:50","valueSize":1},{"declaration":7960,"isOffset":false,"isSlot":false,"src":"1225:6:50","valueSize":1}],"flags":["memory-safe"],"id":7968,"nodeType":"InlineAssembly","src":"1186:122:50"}]},"id":7970,"implemented":true,"kind":"function","modifiers":[],"name":"mulUp","nameLocation":"896:5:50","nodeType":"FunctionDefinition","parameters":{"id":7958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7955,"mutability":"mutable","name":"a","nameLocation":"910:1:50","nodeType":"VariableDeclaration","scope":7970,"src":"902:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7954,"name":"uint256","nodeType":"ElementaryTypeName","src":"902:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7957,"mutability":"mutable","name":"b","nameLocation":"921:1:50","nodeType":"VariableDeclaration","scope":7970,"src":"913:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7956,"name":"uint256","nodeType":"ElementaryTypeName","src":"913:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"901:22:50"},"returnParameters":{"id":7961,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7960,"mutability":"mutable","name":"result","nameLocation":"955:6:50","nodeType":"VariableDeclaration","scope":7970,"src":"947:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7959,"name":"uint256","nodeType":"ElementaryTypeName","src":"947:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"946:16:50"},"scope":8208,"src":"887:427:50","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":7989,"nodeType":"Block","src":"1391:254:50","statements":[{"assignments":[7980],"declarations":[{"constant":false,"id":7980,"mutability":"mutable","name":"aInflated","nameLocation":"1499:9:50","nodeType":"VariableDeclaration","scope":7989,"src":"1491:17:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7979,"name":"uint256","nodeType":"ElementaryTypeName","src":"1491:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":7984,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7981,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7972,"src":"1511:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":7982,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7920,"src":"1515:3:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1511:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1491:27:50"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":7987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":7985,"name":"aInflated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7980,"src":"1625:9:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":7986,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7974,"src":"1637:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1625:13:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7978,"id":7988,"nodeType":"Return","src":"1618:20:50"}]},"id":7990,"implemented":true,"kind":"function","modifiers":[],"name":"divDown","nameLocation":"1329:7:50","nodeType":"FunctionDefinition","parameters":{"id":7975,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7972,"mutability":"mutable","name":"a","nameLocation":"1345:1:50","nodeType":"VariableDeclaration","scope":7990,"src":"1337:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7971,"name":"uint256","nodeType":"ElementaryTypeName","src":"1337:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7974,"mutability":"mutable","name":"b","nameLocation":"1356:1:50","nodeType":"VariableDeclaration","scope":7990,"src":"1348:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7973,"name":"uint256","nodeType":"ElementaryTypeName","src":"1348:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1336:22:50"},"returnParameters":{"id":7978,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7977,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":7990,"src":"1382:7:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7976,"name":"uint256","nodeType":"ElementaryTypeName","src":"1382:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1381:9:50"},"scope":8208,"src":"1320:325:50","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8005,"nodeType":"Block","src":"1727:43:50","statements":[{"expression":{"arguments":[{"id":8000,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7992,"src":"1753:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8001,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7920,"src":"1756:3:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8002,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7994,"src":"1761:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":7999,"name":"mulDivUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8034,"src":"1744:8:50","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":8003,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1744:19:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":7998,"id":8004,"nodeType":"Return","src":"1737:26:50"}]},"id":8006,"implemented":true,"kind":"function","modifiers":[],"name":"divUp","nameLocation":"1660:5:50","nodeType":"FunctionDefinition","parameters":{"id":7995,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7992,"mutability":"mutable","name":"a","nameLocation":"1674:1:50","nodeType":"VariableDeclaration","scope":8006,"src":"1666:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7991,"name":"uint256","nodeType":"ElementaryTypeName","src":"1666:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":7994,"mutability":"mutable","name":"b","nameLocation":"1685:1:50","nodeType":"VariableDeclaration","scope":8006,"src":"1677:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7993,"name":"uint256","nodeType":"ElementaryTypeName","src":"1677:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1665:22:50"},"returnParameters":{"id":7998,"nodeType":"ParameterList","parameters":[{"constant":false,"id":7997,"mutability":"mutable","name":"result","nameLocation":"1719:6:50","nodeType":"VariableDeclaration","scope":8006,"src":"1711:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":7996,"name":"uint256","nodeType":"ElementaryTypeName","src":"1711:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1710:16:50"},"scope":8208,"src":"1651:119:50","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8033,"nodeType":"Block","src":"1912:774:50","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8018,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8013,"src":"2004:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":8019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2009:1:50","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2004:6:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8025,"nodeType":"IfStatement","src":"2000:58:50","trueBody":{"id":8024,"nodeType":"Block","src":"2012:46:50","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":8021,"name":"ZeroDivision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7917,"src":"2033:12:50","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":8022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2033:14:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8023,"nodeType":"RevertStatement","src":"2026:21:50"}]}},{"assignments":[8027],"declarations":[{"constant":false,"id":8027,"mutability":"mutable","name":"product","nameLocation":"2143:7:50","nodeType":"VariableDeclaration","scope":8033,"src":"2135:15:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8026,"name":"uint256","nodeType":"ElementaryTypeName","src":"2135:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8031,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8030,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8028,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8009,"src":"2153:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8029,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8011,"src":"2157:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2153:5:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2135:23:50"},{"AST":{"nativeSrc":"2585:95:50","nodeType":"YulBlock","src":"2585:95:50","statements":[{"nativeSrc":"2599:71:50","nodeType":"YulAssignment","src":"2599:71:50","value":{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"2627:7:50","nodeType":"YulIdentifier","src":"2627:7:50"}],"functionName":{"name":"iszero","nativeSrc":"2620:6:50","nodeType":"YulIdentifier","src":"2620:6:50"},"nativeSrc":"2620:15:50","nodeType":"YulFunctionCall","src":"2620:15:50"}],"functionName":{"name":"iszero","nativeSrc":"2613:6:50","nodeType":"YulIdentifier","src":"2613:6:50"},"nativeSrc":"2613:23:50","nodeType":"YulFunctionCall","src":"2613:23:50"},{"arguments":[{"arguments":[{"arguments":[{"name":"product","nativeSrc":"2650:7:50","nodeType":"YulIdentifier","src":"2650:7:50"},{"kind":"number","nativeSrc":"2659:1:50","nodeType":"YulLiteral","src":"2659:1:50","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"2646:3:50","nodeType":"YulIdentifier","src":"2646:3:50"},"nativeSrc":"2646:15:50","nodeType":"YulFunctionCall","src":"2646:15:50"},{"name":"c","nativeSrc":"2663:1:50","nodeType":"YulIdentifier","src":"2663:1:50"}],"functionName":{"name":"div","nativeSrc":"2642:3:50","nodeType":"YulIdentifier","src":"2642:3:50"},"nativeSrc":"2642:23:50","nodeType":"YulFunctionCall","src":"2642:23:50"},{"kind":"number","nativeSrc":"2667:1:50","nodeType":"YulLiteral","src":"2667:1:50","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"2638:3:50","nodeType":"YulIdentifier","src":"2638:3:50"},"nativeSrc":"2638:31:50","nodeType":"YulFunctionCall","src":"2638:31:50"}],"functionName":{"name":"mul","nativeSrc":"2609:3:50","nodeType":"YulIdentifier","src":"2609:3:50"},"nativeSrc":"2609:61:50","nodeType":"YulFunctionCall","src":"2609:61:50"},"variableNames":[{"name":"result","nativeSrc":"2599:6:50","nodeType":"YulIdentifier","src":"2599:6:50"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":8013,"isOffset":false,"isSlot":false,"src":"2663:1:50","valueSize":1},{"declaration":8027,"isOffset":false,"isSlot":false,"src":"2627:7:50","valueSize":1},{"declaration":8027,"isOffset":false,"isSlot":false,"src":"2650:7:50","valueSize":1},{"declaration":8016,"isOffset":false,"isSlot":false,"src":"2599:6:50","valueSize":1}],"flags":["memory-safe"],"id":8032,"nodeType":"InlineAssembly","src":"2560:120:50"}]},"documentation":{"id":8007,"nodeType":"StructuredDocumentation","src":"1776:41:50","text":"@dev Return (a * b) / c, rounding up."},"id":8034,"implemented":true,"kind":"function","modifiers":[],"name":"mulDivUp","nameLocation":"1831:8:50","nodeType":"FunctionDefinition","parameters":{"id":8014,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8009,"mutability":"mutable","name":"a","nameLocation":"1848:1:50","nodeType":"VariableDeclaration","scope":8034,"src":"1840:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8008,"name":"uint256","nodeType":"ElementaryTypeName","src":"1840:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8011,"mutability":"mutable","name":"b","nameLocation":"1859:1:50","nodeType":"VariableDeclaration","scope":8034,"src":"1851:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8010,"name":"uint256","nodeType":"ElementaryTypeName","src":"1851:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8013,"mutability":"mutable","name":"c","nameLocation":"1870:1:50","nodeType":"VariableDeclaration","scope":8034,"src":"1862:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8012,"name":"uint256","nodeType":"ElementaryTypeName","src":"1862:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1839:33:50"},"returnParameters":{"id":8017,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8016,"mutability":"mutable","name":"result","nameLocation":"1904:6:50","nodeType":"VariableDeclaration","scope":8034,"src":"1896:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8015,"name":"uint256","nodeType":"ElementaryTypeName","src":"1896:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1895:16:50"},"scope":8208,"src":"1822:864:50","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8053,"nodeType":"Block","src":"3159:345:50","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8044,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8039,"src":"3251:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":8045,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3256:1:50","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3251:6:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8051,"nodeType":"IfStatement","src":"3247:58:50","trueBody":{"id":8050,"nodeType":"Block","src":"3259:46:50","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":8047,"name":"ZeroDivision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7917,"src":"3280:12:50","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":8048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3280:14:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8049,"nodeType":"RevertStatement","src":"3273:21:50"}]}},{"AST":{"nativeSrc":"3415:83:50","nodeType":"YulBlock","src":"3415:83:50","statements":[{"nativeSrc":"3429:59:50","nodeType":"YulAssignment","src":"3429:59:50","value":{"arguments":[{"arguments":[{"arguments":[{"name":"a","nativeSrc":"3457:1:50","nodeType":"YulIdentifier","src":"3457:1:50"}],"functionName":{"name":"iszero","nativeSrc":"3450:6:50","nodeType":"YulIdentifier","src":"3450:6:50"},"nativeSrc":"3450:9:50","nodeType":"YulFunctionCall","src":"3450:9:50"}],"functionName":{"name":"iszero","nativeSrc":"3443:6:50","nodeType":"YulIdentifier","src":"3443:6:50"},"nativeSrc":"3443:17:50","nodeType":"YulFunctionCall","src":"3443:17:50"},{"arguments":[{"kind":"number","nativeSrc":"3466:1:50","nodeType":"YulLiteral","src":"3466:1:50","type":"","value":"1"},{"arguments":[{"arguments":[{"name":"a","nativeSrc":"3477:1:50","nodeType":"YulIdentifier","src":"3477:1:50"},{"kind":"number","nativeSrc":"3480:1:50","nodeType":"YulLiteral","src":"3480:1:50","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"3473:3:50","nodeType":"YulIdentifier","src":"3473:3:50"},"nativeSrc":"3473:9:50","nodeType":"YulFunctionCall","src":"3473:9:50"},{"name":"b","nativeSrc":"3484:1:50","nodeType":"YulIdentifier","src":"3484:1:50"}],"functionName":{"name":"div","nativeSrc":"3469:3:50","nodeType":"YulIdentifier","src":"3469:3:50"},"nativeSrc":"3469:17:50","nodeType":"YulFunctionCall","src":"3469:17:50"}],"functionName":{"name":"add","nativeSrc":"3462:3:50","nodeType":"YulIdentifier","src":"3462:3:50"},"nativeSrc":"3462:25:50","nodeType":"YulFunctionCall","src":"3462:25:50"}],"functionName":{"name":"mul","nativeSrc":"3439:3:50","nodeType":"YulIdentifier","src":"3439:3:50"},"nativeSrc":"3439:49:50","nodeType":"YulFunctionCall","src":"3439:49:50"},"variableNames":[{"name":"result","nativeSrc":"3429:6:50","nodeType":"YulIdentifier","src":"3429:6:50"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":8037,"isOffset":false,"isSlot":false,"src":"3457:1:50","valueSize":1},{"declaration":8037,"isOffset":false,"isSlot":false,"src":"3477:1:50","valueSize":1},{"declaration":8039,"isOffset":false,"isSlot":false,"src":"3484:1:50","valueSize":1},{"declaration":8042,"isOffset":false,"isSlot":false,"src":"3429:6:50","valueSize":1}],"flags":["memory-safe"],"id":8052,"nodeType":"InlineAssembly","src":"3390:108:50"}]},"documentation":{"id":8035,"nodeType":"StructuredDocumentation","src":"2692:383:50","text":" @dev Version of divUp when the input is raw (i.e., already \"inflated\"). For instance,\n invariant * invariant (36 decimals) vs. invariant.mulDown(invariant) (18 decimal FP).\n This can occur in calculations with many successive multiplications and divisions, and\n we want to minimize the number of operations by avoiding unnecessary scaling by ONE."},"id":8054,"implemented":true,"kind":"function","modifiers":[],"name":"divUpRaw","nameLocation":"3089:8:50","nodeType":"FunctionDefinition","parameters":{"id":8040,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8037,"mutability":"mutable","name":"a","nameLocation":"3106:1:50","nodeType":"VariableDeclaration","scope":8054,"src":"3098:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8036,"name":"uint256","nodeType":"ElementaryTypeName","src":"3098:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8039,"mutability":"mutable","name":"b","nameLocation":"3117:1:50","nodeType":"VariableDeclaration","scope":8054,"src":"3109:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8038,"name":"uint256","nodeType":"ElementaryTypeName","src":"3109:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3097:22:50"},"returnParameters":{"id":8043,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8042,"mutability":"mutable","name":"result","nameLocation":"3151:6:50","nodeType":"VariableDeclaration","scope":8054,"src":"3143:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8041,"name":"uint256","nodeType":"ElementaryTypeName","src":"3143:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3142:16:50"},"scope":8208,"src":"3080:424:50","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8129,"nodeType":"Block","src":"3807:723:50","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8066,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8064,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8059,"src":"3975:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":8065,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7920,"src":"3980:3:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3975:8:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8072,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8070,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8059,"src":"4028:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":8071,"name":"TWO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7925,"src":"4033:3:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4028:8:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8079,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8059,"src":"4093:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":8080,"name":"FOUR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7930,"src":"4098:4:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4093:9:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":8125,"nodeType":"Block","src":"4209:315:50","statements":[{"assignments":[8096],"declarations":[{"constant":false,"id":8096,"mutability":"mutable","name":"raw","nameLocation":"4231:3:50","nodeType":"VariableDeclaration","scope":8125,"src":"4223:11:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8095,"name":"uint256","nodeType":"ElementaryTypeName","src":"4223:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8102,"initialValue":{"arguments":[{"id":8099,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8057,"src":"4252:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8100,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8059,"src":"4255:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":8097,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9564,"src":"4237:10:50","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LogExpMath_$9564_$","typeString":"type(library LogExpMath)"}},"id":8098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4248:3:50","memberName":"pow","nodeType":"MemberAccess","referencedDeclaration":8467,"src":"4237:14:50","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":8101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4237:20:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4223:34:50"},{"assignments":[8104],"declarations":[{"constant":false,"id":8104,"mutability":"mutable","name":"maxError","nameLocation":"4279:8:50","nodeType":"VariableDeclaration","scope":8125,"src":"4271:16:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8103,"name":"uint256","nodeType":"ElementaryTypeName","src":"4271:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8111,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":8106,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8096,"src":"4296:3:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8107,"name":"MAX_POW_RELATIVE_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7933,"src":"4301:22:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8105,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7970,"src":"4290:5:50","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":8108,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4290:34:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":8109,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4327:1:50","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4290:38:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4271:57:50"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8112,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8096,"src":"4347:3:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":8113,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8104,"src":"4353:8:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4347:14:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":8123,"nodeType":"Block","src":"4410:104:50","statements":[{"id":8122,"nodeType":"UncheckedBlock","src":"4428:72:50","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8118,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8096,"src":"4467:3:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":8119,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8104,"src":"4473:8:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4467:14:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8063,"id":8121,"nodeType":"Return","src":"4460:21:50"}]}]},"id":8124,"nodeType":"IfStatement","src":"4343:171:50","trueBody":{"id":8117,"nodeType":"Block","src":"4363:41:50","statements":[{"expression":{"hexValue":"30","id":8115,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4388:1:50","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":8063,"id":8116,"nodeType":"Return","src":"4381:8:50"}]}}]},"id":8126,"nodeType":"IfStatement","src":"4089:435:50","trueBody":{"id":8094,"nodeType":"Block","src":"4104:99:50","statements":[{"assignments":[8083],"declarations":[{"constant":false,"id":8083,"mutability":"mutable","name":"square","nameLocation":"4126:6:50","nodeType":"VariableDeclaration","scope":8094,"src":"4118:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8082,"name":"uint256","nodeType":"ElementaryTypeName","src":"4118:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8088,"initialValue":{"arguments":[{"id":8085,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8057,"src":"4143:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8086,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8057,"src":"4146:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8084,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7953,"src":"4135:7:50","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":8087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4135:13:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4118:30:50"},{"expression":{"arguments":[{"id":8090,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8083,"src":"4177:6:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8091,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8083,"src":"4185:6:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8089,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7953,"src":"4169:7:50","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":8092,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4169:23:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8063,"id":8093,"nodeType":"Return","src":"4162:30:50"}]}},"id":8127,"nodeType":"IfStatement","src":"4024:500:50","trueBody":{"id":8078,"nodeType":"Block","src":"4038:45:50","statements":[{"expression":{"arguments":[{"id":8074,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8057,"src":"4067:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8075,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8057,"src":"4070:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8073,"name":"mulDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7953,"src":"4059:7:50","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":8076,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4059:13:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8063,"id":8077,"nodeType":"Return","src":"4052:20:50"}]}},"id":8128,"nodeType":"IfStatement","src":"3971:553:50","trueBody":{"id":8069,"nodeType":"Block","src":"3985:33:50","statements":[{"expression":{"id":8067,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8057,"src":"4006:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8063,"id":8068,"nodeType":"Return","src":"3999:8:50"}]}}]},"documentation":{"id":8055,"nodeType":"StructuredDocumentation","src":"3510:221:50","text":" @dev Returns x^y, assuming both are fixed point numbers, rounding down. The result is guaranteed to not be above\n the true value (that is, the error function expected - actual is always positive)."},"id":8130,"implemented":true,"kind":"function","modifiers":[],"name":"powDown","nameLocation":"3745:7:50","nodeType":"FunctionDefinition","parameters":{"id":8060,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8057,"mutability":"mutable","name":"x","nameLocation":"3761:1:50","nodeType":"VariableDeclaration","scope":8130,"src":"3753:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8056,"name":"uint256","nodeType":"ElementaryTypeName","src":"3753:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8059,"mutability":"mutable","name":"y","nameLocation":"3772:1:50","nodeType":"VariableDeclaration","scope":8130,"src":"3764:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8058,"name":"uint256","nodeType":"ElementaryTypeName","src":"3764:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3752:22:50"},"returnParameters":{"id":8063,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8062,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8130,"src":"3798:7:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8061,"name":"uint256","nodeType":"ElementaryTypeName","src":"3798:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3797:9:50"},"scope":8208,"src":"3736:794:50","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8196,"nodeType":"Block","src":"4829:568:50","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8140,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8135,"src":"4997:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":8141,"name":"ONE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7920,"src":"5002:3:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4997:8:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8148,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8146,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8135,"src":"5050:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":8147,"name":"TWO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7925,"src":"5055:3:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5050:8:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8155,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8135,"src":"5113:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":8156,"name":"FOUR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7930,"src":"5118:4:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5113:9:50","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":8192,"nodeType":"Block","src":"5225:166:50","statements":[{"assignments":[8172],"declarations":[{"constant":false,"id":8172,"mutability":"mutable","name":"raw","nameLocation":"5247:3:50","nodeType":"VariableDeclaration","scope":8192,"src":"5239:11:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8171,"name":"uint256","nodeType":"ElementaryTypeName","src":"5239:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8178,"initialValue":{"arguments":[{"id":8175,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8133,"src":"5268:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8176,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8135,"src":"5271:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":8173,"name":"LogExpMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9564,"src":"5253:10:50","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LogExpMath_$9564_$","typeString":"type(library LogExpMath)"}},"id":8174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5264:3:50","memberName":"pow","nodeType":"MemberAccess","referencedDeclaration":8467,"src":"5253:14:50","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":8177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5253:20:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5239:34:50"},{"assignments":[8180],"declarations":[{"constant":false,"id":8180,"mutability":"mutable","name":"maxError","nameLocation":"5295:8:50","nodeType":"VariableDeclaration","scope":8192,"src":"5287:16:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8179,"name":"uint256","nodeType":"ElementaryTypeName","src":"5287:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8187,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":8182,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8172,"src":"5312:3:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8183,"name":"MAX_POW_RELATIVE_ERROR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7933,"src":"5317:22:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8181,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7970,"src":"5306:5:50","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":8184,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5306:34:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":8185,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5343:1:50","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5306:38:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5287:57:50"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8188,"name":"raw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8172,"src":"5366:3:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":8189,"name":"maxError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8180,"src":"5372:8:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5366:14:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8139,"id":8191,"nodeType":"Return","src":"5359:21:50"}]},"id":8193,"nodeType":"IfStatement","src":"5109:282:50","trueBody":{"id":8170,"nodeType":"Block","src":"5124:95:50","statements":[{"assignments":[8159],"declarations":[{"constant":false,"id":8159,"mutability":"mutable","name":"square","nameLocation":"5146:6:50","nodeType":"VariableDeclaration","scope":8170,"src":"5138:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8158,"name":"uint256","nodeType":"ElementaryTypeName","src":"5138:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":8164,"initialValue":{"arguments":[{"id":8161,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8133,"src":"5161:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8162,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8133,"src":"5164:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8160,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7970,"src":"5155:5:50","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":8163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5155:11:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5138:28:50"},{"expression":{"arguments":[{"id":8166,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8159,"src":"5193:6:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8167,"name":"square","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8159,"src":"5201:6:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8165,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7970,"src":"5187:5:50","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":8168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5187:21:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8139,"id":8169,"nodeType":"Return","src":"5180:28:50"}]}},"id":8194,"nodeType":"IfStatement","src":"5046:345:50","trueBody":{"id":8154,"nodeType":"Block","src":"5060:43:50","statements":[{"expression":{"arguments":[{"id":8150,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8133,"src":"5087:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":8151,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8133,"src":"5090:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8149,"name":"mulUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7970,"src":"5081:5:50","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":8152,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5081:11:50","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8139,"id":8153,"nodeType":"Return","src":"5074:18:50"}]}},"id":8195,"nodeType":"IfStatement","src":"4993:398:50","trueBody":{"id":8145,"nodeType":"Block","src":"5007:33:50","statements":[{"expression":{"id":8143,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8133,"src":"5028:1:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8139,"id":8144,"nodeType":"Return","src":"5021:8:50"}]}}]},"documentation":{"id":8131,"nodeType":"StructuredDocumentation","src":"4536:219:50","text":" @dev Returns x^y, assuming both are fixed point numbers, rounding up. The result is guaranteed to not be below\n the true value (that is, the error function expected - actual is always negative)."},"id":8197,"implemented":true,"kind":"function","modifiers":[],"name":"powUp","nameLocation":"4769:5:50","nodeType":"FunctionDefinition","parameters":{"id":8136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8133,"mutability":"mutable","name":"x","nameLocation":"4783:1:50","nodeType":"VariableDeclaration","scope":8197,"src":"4775:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8132,"name":"uint256","nodeType":"ElementaryTypeName","src":"4775:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8135,"mutability":"mutable","name":"y","nameLocation":"4794:1:50","nodeType":"VariableDeclaration","scope":8197,"src":"4786:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8134,"name":"uint256","nodeType":"ElementaryTypeName","src":"4786:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4774:22:50"},"returnParameters":{"id":8139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8138,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8197,"src":"4820:7:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8137,"name":"uint256","nodeType":"ElementaryTypeName","src":"4820:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4819:9:50"},"scope":8208,"src":"4760:637:50","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8206,"nodeType":"Block","src":"5750:175:50","statements":[{"AST":{"nativeSrc":"5857:62:50","nodeType":"YulBlock","src":"5857:62:50","statements":[{"nativeSrc":"5871:38:50","nodeType":"YulAssignment","src":"5871:38:50","value":{"arguments":[{"arguments":[{"name":"x","nativeSrc":"5888:1:50","nodeType":"YulIdentifier","src":"5888:1:50"},{"name":"ONE","nativeSrc":"5891:3:50","nodeType":"YulIdentifier","src":"5891:3:50"}],"functionName":{"name":"lt","nativeSrc":"5885:2:50","nodeType":"YulIdentifier","src":"5885:2:50"},"nativeSrc":"5885:10:50","nodeType":"YulFunctionCall","src":"5885:10:50"},{"arguments":[{"name":"ONE","nativeSrc":"5901:3:50","nodeType":"YulIdentifier","src":"5901:3:50"},{"name":"x","nativeSrc":"5906:1:50","nodeType":"YulIdentifier","src":"5906:1:50"}],"functionName":{"name":"sub","nativeSrc":"5897:3:50","nodeType":"YulIdentifier","src":"5897:3:50"},"nativeSrc":"5897:11:50","nodeType":"YulFunctionCall","src":"5897:11:50"}],"functionName":{"name":"mul","nativeSrc":"5881:3:50","nodeType":"YulIdentifier","src":"5881:3:50"},"nativeSrc":"5881:28:50","nodeType":"YulFunctionCall","src":"5881:28:50"},"variableNames":[{"name":"result","nativeSrc":"5871:6:50","nodeType":"YulIdentifier","src":"5871:6:50"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":7920,"isOffset":false,"isSlot":false,"src":"5891:3:50","valueSize":1},{"declaration":7920,"isOffset":false,"isSlot":false,"src":"5901:3:50","valueSize":1},{"declaration":8203,"isOffset":false,"isSlot":false,"src":"5871:6:50","valueSize":1},{"declaration":8200,"isOffset":false,"isSlot":false,"src":"5888:1:50","valueSize":1},{"declaration":8200,"isOffset":false,"isSlot":false,"src":"5906:1:50","valueSize":1}],"flags":["memory-safe"],"id":8205,"nodeType":"InlineAssembly","src":"5832:87:50"}]},"documentation":{"id":8198,"nodeType":"StructuredDocumentation","src":"5403:272:50","text":" @dev Returns the complement of a value (1 - x), capped to 0 if x is larger than 1.\n Useful when computing the complement for values with some level of relative error, as it strips this error and\n prevents intermediate negative values."},"id":8207,"implemented":true,"kind":"function","modifiers":[],"name":"complement","nameLocation":"5689:10:50","nodeType":"FunctionDefinition","parameters":{"id":8201,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8200,"mutability":"mutable","name":"x","nameLocation":"5708:1:50","nodeType":"VariableDeclaration","scope":8207,"src":"5700:9:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8199,"name":"uint256","nodeType":"ElementaryTypeName","src":"5700:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5699:11:50"},"returnParameters":{"id":8204,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8203,"mutability":"mutable","name":"result","nameLocation":"5742:6:50","nodeType":"VariableDeclaration","scope":8207,"src":"5734:14:50","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8202,"name":"uint256","nodeType":"ElementaryTypeName","src":"5734:7:50","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5733:16:50"},"scope":8208,"src":"5680:245:50","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":8209,"src":"239:5688:50","usedErrors":[7917],"usedEvents":[]}],"src":"46:5882:50"},"id":50},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol","exportedSymbols":{"LogExpMath":[9564]},"id":9565,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":8210,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:51"},{"abstract":false,"baseContracts":[],"canonicalName":"LogExpMath","contractDependencies":[],"contractKind":"library","documentation":{"id":8211,"nodeType":"StructuredDocumentation","src":"79:515:51","text":" @dev Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument).\n Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural\n exponentiation and logarithm (where the base is Euler's number).\n All math operations are unchecked in order to save gas.\n @author Fernando Martinelli - @fernandomartinelli\n @author Sergio Yuhjtman - @sergioyuhjtman\n @author Daniel Fernandez - @dmf7z"},"fullyImplemented":true,"id":9564,"linearizedBaseContracts":[9564],"name":"LogExpMath","nameLocation":"603:10:51","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":8212,"nodeType":"StructuredDocumentation","src":"620:79:51","text":"@notice This error is thrown when a base is not within an acceptable range."},"errorSelector":"022701e0","id":8214,"name":"BaseOutOfBounds","nameLocation":"710:15:51","nodeType":"ErrorDefinition","parameters":{"id":8213,"nodeType":"ParameterList","parameters":[],"src":"725:2:51"},"src":"704:24:51"},{"documentation":{"id":8215,"nodeType":"StructuredDocumentation","src":"734:83:51","text":"@notice This error is thrown when a exponent is not within an acceptable range."},"errorSelector":"d8317311","id":8217,"name":"ExponentOutOfBounds","nameLocation":"828:19:51","nodeType":"ErrorDefinition","parameters":{"id":8216,"nodeType":"ParameterList","parameters":[],"src":"847:2:51"},"src":"822:28:51"},{"documentation":{"id":8218,"nodeType":"StructuredDocumentation","src":"856:96:51","text":"@notice This error is thrown when the exponent * ln(base) is not within an acceptable range."},"errorSelector":"a2f9f7e3","id":8220,"name":"ProductOutOfBounds","nameLocation":"963:18:51","nodeType":"ErrorDefinition","parameters":{"id":8219,"nodeType":"ParameterList","parameters":[],"src":"981:2:51"},"src":"957:27:51"},{"documentation":{"id":8221,"nodeType":"StructuredDocumentation","src":"990:109:51","text":"@notice This error is thrown when an exponent used in the exp function is not within an acceptable range."},"errorSelector":"d4794efd","id":8223,"name":"InvalidExponent","nameLocation":"1110:15:51","nodeType":"ErrorDefinition","parameters":{"id":8222,"nodeType":"ParameterList","parameters":[],"src":"1125:2:51"},"src":"1104:24:51"},{"documentation":{"id":8224,"nodeType":"StructuredDocumentation","src":"1134:119:51","text":"@notice This error is thrown when a variable or result is not within the acceptable bounds defined in the function."},"errorSelector":"b4120f14","id":8226,"name":"OutOfBounds","nameLocation":"1264:11:51","nodeType":"ErrorDefinition","parameters":{"id":8225,"nodeType":"ParameterList","parameters":[],"src":"1275:2:51"},"src":"1258:20:51"},{"constant":true,"id":8229,"mutability":"constant","name":"ONE_18","nameLocation":"1555:6:51","nodeType":"VariableDeclaration","scope":9564,"src":"1539:29:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8227,"name":"int256","nodeType":"ElementaryTypeName","src":"1539:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653138","id":8228,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1564:4:51","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"visibility":"internal"},{"constant":true,"id":8232,"mutability":"constant","name":"ONE_20","nameLocation":"1745:6:51","nodeType":"VariableDeclaration","scope":9564,"src":"1729:29:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8230,"name":"int256","nodeType":"ElementaryTypeName","src":"1729:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653230","id":8231,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1754:4:51","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000_by_1","typeString":"int_const 100000000000000000000"},"value":"1e20"},"visibility":"internal"},{"constant":true,"id":8235,"mutability":"constant","name":"ONE_36","nameLocation":"1780:6:51","nodeType":"VariableDeclaration","scope":9564,"src":"1764:29:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8233,"name":"int256","nodeType":"ElementaryTypeName","src":"1764:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31653336","id":8234,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1789:4:51","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(29 digits omitted)...0000"},"value":"1e36"},"visibility":"internal"},{"constant":true,"id":8238,"mutability":"constant","name":"MAX_NATURAL_EXPONENT","nameLocation":"2326:20:51","nodeType":"VariableDeclaration","scope":9564,"src":"2310:45:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8236,"name":"int256","nodeType":"ElementaryTypeName","src":"2310:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313330653138","id":8237,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2349:6:51","typeDescriptions":{"typeIdentifier":"t_rational_130000000000000000000_by_1","typeString":"int_const 130000000000000000000"},"value":"130e18"},"visibility":"internal"},{"constant":true,"id":8242,"mutability":"constant","name":"MIN_NATURAL_EXPONENT","nameLocation":"2377:20:51","nodeType":"VariableDeclaration","scope":9564,"src":"2361:45:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8239,"name":"int256","nodeType":"ElementaryTypeName","src":"2361:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"id":8241,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"2400:6:51","subExpression":{"hexValue":"3431653138","id":8240,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2401:5:51","typeDescriptions":{"typeIdentifier":"t_rational_41000000000000000000_by_1","typeString":"int_const 41000000000000000000"},"value":"41e18"},"typeDescriptions":{"typeIdentifier":"t_rational_minus_41000000000000000000_by_1","typeString":"int_const -41000000000000000000"}},"visibility":"internal"},{"constant":true,"id":8247,"mutability":"constant","name":"LN_36_LOWER_BOUND","nameLocation":"2573:17:51","nodeType":"VariableDeclaration","scope":9564,"src":"2557:49:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8243,"name":"int256","nodeType":"ElementaryTypeName","src":"2557:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8246,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":8244,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8229,"src":"2593:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31653137","id":8245,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2602:4:51","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000_by_1","typeString":"int_const 100000000000000000"},"value":"1e17"},"src":"2593:13:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":true,"id":8252,"mutability":"constant","name":"LN_36_UPPER_BOUND","nameLocation":"2628:17:51","nodeType":"VariableDeclaration","scope":9564,"src":"2612:49:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8248,"name":"int256","nodeType":"ElementaryTypeName","src":"2612:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8251,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":8249,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8229,"src":"2648:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31653137","id":8250,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2657:4:51","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000_by_1","typeString":"int_const 100000000000000000"},"value":"1e17"},"src":"2648:13:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":true,"id":8262,"mutability":"constant","name":"MILD_EXPONENT_BOUND","nameLocation":"2685:19:51","nodeType":"VariableDeclaration","scope":9564,"src":"2668:65:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8253,"name":"uint256","nodeType":"ElementaryTypeName","src":"2668:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8261,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_rational_28948022309329048855892746252171976963317496166410141009864396001978282409984_by_1","typeString":"int_const 2894...(69 digits omitted)...9984"},"id":8256,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":8254,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2707:1:51","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"323534","id":8255,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2712:3:51","typeDescriptions":{"typeIdentifier":"t_rational_254_by_1","typeString":"int_const 254"},"value":"254"},"src":"2707:8:51","typeDescriptions":{"typeIdentifier":"t_rational_28948022309329048855892746252171976963317496166410141009864396001978282409984_by_1","typeString":"int_const 2894...(69 digits omitted)...9984"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"arguments":[{"id":8259,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"2726:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8258,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2718:7:51","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":8257,"name":"uint256","nodeType":"ElementaryTypeName","src":"2718:7:51","typeDescriptions":{}}},"id":8260,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2718:15:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2707:26:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":true,"id":8265,"mutability":"constant","name":"x0","nameLocation":"2784:2:51","nodeType":"VariableDeclaration","scope":9564,"src":"2768:42:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8263,"name":"int256","nodeType":"ElementaryTypeName","src":"2768:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313238303030303030303030303030303030303030","id":8264,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2789:21:51","typeDescriptions":{"typeIdentifier":"t_rational_128000000000000000000_by_1","typeString":"int_const 128000000000000000000"},"value":"128000000000000000000"},"visibility":"internal"},{"constant":true,"id":8268,"mutability":"constant","name":"a0","nameLocation":"2840:2:51","nodeType":"VariableDeclaration","scope":9564,"src":"2824:77:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8266,"name":"int256","nodeType":"ElementaryTypeName","src":"2824:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3338383737303834303539393435393530393232323030303030303030303030303030303030303030303030303030303030303030303030","id":8267,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2845:56:51","typeDescriptions":{"typeIdentifier":"t_rational_38877084059945950922200000000000000000000000000000000000_by_1","typeString":"int_const 3887...(48 digits omitted)...0000"},"value":"38877084059945950922200000000000000000000000000000000000"},"visibility":"internal"},{"constant":true,"id":8271,"mutability":"constant","name":"x1","nameLocation":"2948:2:51","nodeType":"VariableDeclaration","scope":9564,"src":"2932:41:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8269,"name":"int256","nodeType":"ElementaryTypeName","src":"2932:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3634303030303030303030303030303030303030","id":8270,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2953:20:51","typeDescriptions":{"typeIdentifier":"t_rational_64000000000000000000_by_1","typeString":"int_const 64000000000000000000"},"value":"64000000000000000000"},"visibility":"internal"},{"constant":true,"id":8274,"mutability":"constant","name":"a1","nameLocation":"3003:2:51","nodeType":"VariableDeclaration","scope":9564,"src":"2987:49:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8272,"name":"int256","nodeType":"ElementaryTypeName","src":"2987:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"36323335313439303830383131363136383832393130303030303030","id":8273,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3008:28:51","typeDescriptions":{"typeIdentifier":"t_rational_6235149080811616882910000000_by_1","typeString":"int_const 6235149080811616882910000000"},"value":"6235149080811616882910000000"},"visibility":"internal"},{"constant":true,"id":8277,"mutability":"constant","name":"x2","nameLocation":"3112:2:51","nodeType":"VariableDeclaration","scope":9564,"src":"3096:43:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8275,"name":"int256","nodeType":"ElementaryTypeName","src":"3096:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"33323030303030303030303030303030303030303030","id":8276,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3117:22:51","typeDescriptions":{"typeIdentifier":"t_rational_3200000000000000000000_by_1","typeString":"int_const 3200000000000000000000"},"value":"3200000000000000000000"},"visibility":"internal"},{"constant":true,"id":8280,"mutability":"constant","name":"a2","nameLocation":"3169:2:51","nodeType":"VariableDeclaration","scope":9564,"src":"3153:55:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8278,"name":"int256","nodeType":"ElementaryTypeName","src":"3153:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"37383936323936303138323638303639353136313030303030303030303030303030","id":8279,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3174:34:51","typeDescriptions":{"typeIdentifier":"t_rational_7896296018268069516100000000000000_by_1","typeString":"int_const 7896...(26 digits omitted)...0000"},"value":"7896296018268069516100000000000000"},"visibility":"internal"},{"constant":true,"id":8283,"mutability":"constant","name":"x3","nameLocation":"3241:2:51","nodeType":"VariableDeclaration","scope":9564,"src":"3225:43:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8281,"name":"int256","nodeType":"ElementaryTypeName","src":"3225:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"31363030303030303030303030303030303030303030","id":8282,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3246:22:51","typeDescriptions":{"typeIdentifier":"t_rational_1600000000000000000000_by_1","typeString":"int_const 1600000000000000000000"},"value":"1600000000000000000000"},"visibility":"internal"},{"constant":true,"id":8286,"mutability":"constant","name":"a3","nameLocation":"3298:2:51","nodeType":"VariableDeclaration","scope":9564,"src":"3282:48:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8284,"name":"int256","nodeType":"ElementaryTypeName","src":"3282:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"383838363131303532303530373837323633363736303030303030","id":8285,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3303:27:51","typeDescriptions":{"typeIdentifier":"t_rational_888611052050787263676000000_by_1","typeString":"int_const 888611052050787263676000000"},"value":"888611052050787263676000000"},"visibility":"internal"},{"constant":true,"id":8289,"mutability":"constant","name":"x4","nameLocation":"3363:2:51","nodeType":"VariableDeclaration","scope":9564,"src":"3347:42:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8287,"name":"int256","nodeType":"ElementaryTypeName","src":"3347:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"383030303030303030303030303030303030303030","id":8288,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3368:21:51","typeDescriptions":{"typeIdentifier":"t_rational_800000000000000000000_by_1","typeString":"int_const 800000000000000000000"},"value":"800000000000000000000"},"visibility":"internal"},{"constant":true,"id":8292,"mutability":"constant","name":"a4","nameLocation":"3419:2:51","nodeType":"VariableDeclaration","scope":9564,"src":"3403:45:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8290,"name":"int256","nodeType":"ElementaryTypeName","src":"3403:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323938303935373938373034313732383237343734303030","id":8291,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3424:24:51","typeDescriptions":{"typeIdentifier":"t_rational_298095798704172827474000_by_1","typeString":"int_const 298095798704172827474000"},"value":"298095798704172827474000"},"visibility":"internal"},{"constant":true,"id":8295,"mutability":"constant","name":"x5","nameLocation":"3481:2:51","nodeType":"VariableDeclaration","scope":9564,"src":"3465:42:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8293,"name":"int256","nodeType":"ElementaryTypeName","src":"3465:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"343030303030303030303030303030303030303030","id":8294,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3486:21:51","typeDescriptions":{"typeIdentifier":"t_rational_400000000000000000000_by_1","typeString":"int_const 400000000000000000000"},"value":"400000000000000000000"},"visibility":"internal"},{"constant":true,"id":8298,"mutability":"constant","name":"a5","nameLocation":"3537:2:51","nodeType":"VariableDeclaration","scope":9564,"src":"3521:43:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8296,"name":"int256","nodeType":"ElementaryTypeName","src":"3521:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"35343539383135303033333134343233393037383130","id":8297,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3542:22:51","typeDescriptions":{"typeIdentifier":"t_rational_5459815003314423907810_by_1","typeString":"int_const 5459815003314423907810"},"value":"5459815003314423907810"},"visibility":"internal"},{"constant":true,"id":8301,"mutability":"constant","name":"x6","nameLocation":"3597:2:51","nodeType":"VariableDeclaration","scope":9564,"src":"3581:42:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8299,"name":"int256","nodeType":"ElementaryTypeName","src":"3581:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323030303030303030303030303030303030303030","id":8300,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3602:21:51","typeDescriptions":{"typeIdentifier":"t_rational_200000000000000000000_by_1","typeString":"int_const 200000000000000000000"},"value":"200000000000000000000"},"visibility":"internal"},{"constant":true,"id":8304,"mutability":"constant","name":"a6","nameLocation":"3653:2:51","nodeType":"VariableDeclaration","scope":9564,"src":"3637:42:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8302,"name":"int256","nodeType":"ElementaryTypeName","src":"3637:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"373338393035363039383933303635303232373233","id":8303,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3658:21:51","typeDescriptions":{"typeIdentifier":"t_rational_738905609893065022723_by_1","typeString":"int_const 738905609893065022723"},"value":"738905609893065022723"},"visibility":"internal"},{"constant":true,"id":8307,"mutability":"constant","name":"x7","nameLocation":"3712:2:51","nodeType":"VariableDeclaration","scope":9564,"src":"3696:42:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8305,"name":"int256","nodeType":"ElementaryTypeName","src":"3696:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313030303030303030303030303030303030303030","id":8306,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3717:21:51","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000_by_1","typeString":"int_const 100000000000000000000"},"value":"100000000000000000000"},"visibility":"internal"},{"constant":true,"id":8310,"mutability":"constant","name":"a7","nameLocation":"3768:2:51","nodeType":"VariableDeclaration","scope":9564,"src":"3752:42:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8308,"name":"int256","nodeType":"ElementaryTypeName","src":"3752:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"323731383238313832383435393034353233353336","id":8309,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3773:21:51","typeDescriptions":{"typeIdentifier":"t_rational_271828182845904523536_by_1","typeString":"int_const 271828182845904523536"},"value":"271828182845904523536"},"visibility":"internal"},{"constant":true,"id":8313,"mutability":"constant","name":"x8","nameLocation":"3827:2:51","nodeType":"VariableDeclaration","scope":9564,"src":"3811:41:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8311,"name":"int256","nodeType":"ElementaryTypeName","src":"3811:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3530303030303030303030303030303030303030","id":8312,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3832:20:51","typeDescriptions":{"typeIdentifier":"t_rational_50000000000000000000_by_1","typeString":"int_const 50000000000000000000"},"value":"50000000000000000000"},"visibility":"internal"},{"constant":true,"id":8316,"mutability":"constant","name":"a8","nameLocation":"3883:2:51","nodeType":"VariableDeclaration","scope":9564,"src":"3867:42:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8314,"name":"int256","nodeType":"ElementaryTypeName","src":"3867:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313634383732313237303730303132383134363835","id":8315,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3888:21:51","typeDescriptions":{"typeIdentifier":"t_rational_164872127070012814685_by_1","typeString":"int_const 164872127070012814685"},"value":"164872127070012814685"},"visibility":"internal"},{"constant":true,"id":8319,"mutability":"constant","name":"x9","nameLocation":"3942:2:51","nodeType":"VariableDeclaration","scope":9564,"src":"3926:41:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8317,"name":"int256","nodeType":"ElementaryTypeName","src":"3926:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3235303030303030303030303030303030303030","id":8318,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3947:20:51","typeDescriptions":{"typeIdentifier":"t_rational_25000000000000000000_by_1","typeString":"int_const 25000000000000000000"},"value":"25000000000000000000"},"visibility":"internal"},{"constant":true,"id":8322,"mutability":"constant","name":"a9","nameLocation":"3998:2:51","nodeType":"VariableDeclaration","scope":9564,"src":"3982:42:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8320,"name":"int256","nodeType":"ElementaryTypeName","src":"3982:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313238343032353431363638373734313438343037","id":8321,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4003:21:51","typeDescriptions":{"typeIdentifier":"t_rational_128402541668774148407_by_1","typeString":"int_const 128402541668774148407"},"value":"128402541668774148407"},"visibility":"internal"},{"constant":true,"id":8325,"mutability":"constant","name":"x10","nameLocation":"4057:3:51","nodeType":"VariableDeclaration","scope":9564,"src":"4041:42:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8323,"name":"int256","nodeType":"ElementaryTypeName","src":"4041:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"3132353030303030303030303030303030303030","id":8324,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4063:20:51","typeDescriptions":{"typeIdentifier":"t_rational_12500000000000000000_by_1","typeString":"int_const 12500000000000000000"},"value":"12500000000000000000"},"visibility":"internal"},{"constant":true,"id":8328,"mutability":"constant","name":"a10","nameLocation":"4114:3:51","nodeType":"VariableDeclaration","scope":9564,"src":"4098:43:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8326,"name":"int256","nodeType":"ElementaryTypeName","src":"4098:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313133333134383435333036363832363331363833","id":8327,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4120:21:51","typeDescriptions":{"typeIdentifier":"t_rational_113314845306682631683_by_1","typeString":"int_const 113314845306682631683"},"value":"113314845306682631683"},"visibility":"internal"},{"constant":true,"id":8331,"mutability":"constant","name":"x11","nameLocation":"4175:3:51","nodeType":"VariableDeclaration","scope":9564,"src":"4159:41:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8329,"name":"int256","nodeType":"ElementaryTypeName","src":"4159:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"36323530303030303030303030303030303030","id":8330,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4181:19:51","typeDescriptions":{"typeIdentifier":"t_rational_6250000000000000000_by_1","typeString":"int_const 6250000000000000000"},"value":"6250000000000000000"},"visibility":"internal"},{"constant":true,"id":8334,"mutability":"constant","name":"a11","nameLocation":"4231:3:51","nodeType":"VariableDeclaration","scope":9564,"src":"4215:43:51","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8332,"name":"int256","nodeType":"ElementaryTypeName","src":"4215:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"value":{"hexValue":"313036343439343435383931373835393432393536","id":8333,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4237:21:51","typeDescriptions":{"typeIdentifier":"t_rational_106449445891785942956_by_1","typeString":"int_const 106449445891785942956"},"value":"106449445891785942956"},"visibility":"internal"},{"body":{"id":8466,"nodeType":"Block","src":"4563:2233:51","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8344,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8339,"src":"4577:1:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":8345,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4582:1:51","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4577:6:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8353,"nodeType":"IfStatement","src":"4573:131:51","trueBody":{"id":8352,"nodeType":"Block","src":"4585:119:51","statements":[{"expression":{"arguments":[{"id":8349,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8229,"src":"4686:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8348,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4678:7:51","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":8347,"name":"uint256","nodeType":"ElementaryTypeName","src":"4678:7:51","typeDescriptions":{}}},"id":8350,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4678:15:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8343,"id":8351,"nodeType":"Return","src":"4671:22:51"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8354,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8337,"src":"4718:1:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":8355,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4723:1:51","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4718:6:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8360,"nodeType":"IfStatement","src":"4714:45:51","trueBody":{"id":8359,"nodeType":"Block","src":"4726:33:51","statements":[{"expression":{"hexValue":"30","id":8357,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4747:1:51","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":8343,"id":8358,"nodeType":"Return","src":"4740:8:51"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8363,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8361,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8337,"src":"5133:1:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"323535","id":8362,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5138:3:51","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"src":"5133:8:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":8364,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5145:1:51","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5133:13:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8370,"nodeType":"IfStatement","src":"5129:68:51","trueBody":{"id":8369,"nodeType":"Block","src":"5148:49:51","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":8366,"name":"BaseOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8214,"src":"5169:15:51","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":8367,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5169:17:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8368,"nodeType":"RevertStatement","src":"5162:24:51"}]}},{"assignments":[8372],"declarations":[{"constant":false,"id":8372,"mutability":"mutable","name":"x_int256","nameLocation":"5213:8:51","nodeType":"VariableDeclaration","scope":8466,"src":"5206:15:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8371,"name":"int256","nodeType":"ElementaryTypeName","src":"5206:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":8377,"initialValue":{"arguments":[{"id":8375,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8337,"src":"5231:1:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8374,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5224:6:51","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":8373,"name":"int256","nodeType":"ElementaryTypeName","src":"5224:6:51","typeDescriptions":{}}},"id":8376,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5224:9:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5206:27:51"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":8380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8378,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8339,"src":"5591:1:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":8379,"name":"MILD_EXPONENT_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8262,"src":"5596:19:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5591:24:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8385,"nodeType":"IfStatement","src":"5587:83:51","trueBody":{"id":8384,"nodeType":"Block","src":"5617:53:51","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":8381,"name":"ExponentOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8217,"src":"5638:19:51","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":8382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5638:21:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8383,"nodeType":"RevertStatement","src":"5631:28:51"}]}},{"assignments":[8387],"declarations":[{"constant":false,"id":8387,"mutability":"mutable","name":"y_int256","nameLocation":"5686:8:51","nodeType":"VariableDeclaration","scope":8466,"src":"5679:15:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8386,"name":"int256","nodeType":"ElementaryTypeName","src":"5679:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":8392,"initialValue":{"arguments":[{"id":8390,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8339,"src":"5704:1:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":8389,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5697:6:51","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":8388,"name":"int256","nodeType":"ElementaryTypeName","src":"5697:6:51","typeDescriptions":{}}},"id":8391,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5697:9:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5679:27:51"},{"assignments":[8394],"declarations":[{"constant":false,"id":8394,"mutability":"mutable","name":"logx_times_y","nameLocation":"5724:12:51","nodeType":"VariableDeclaration","scope":8466,"src":"5717:19:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8393,"name":"int256","nodeType":"ElementaryTypeName","src":"5717:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":8395,"nodeType":"VariableDeclarationStatement","src":"5717:19:51"},{"id":8444,"nodeType":"UncheckedBlock","src":"5746:790:51","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8398,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8396,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8247,"src":"5774:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":8397,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8372,"src":"5794:8:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"5774:28:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8399,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8372,"src":"5806:8:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":8400,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8252,"src":"5817:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"5806:28:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5774:60:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":8438,"nodeType":"Block","src":"6418:72:51","statements":[{"expression":{"id":8436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8430,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8394,"src":"6436:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":8432,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8372,"src":"6455:8:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8431,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9408,"src":"6451:3:51","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":8433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6451:13:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8434,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8387,"src":"6467:8:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6451:24:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6436:39:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8437,"nodeType":"ExpressionStatement","src":"6436:39:51"}]},"id":8439,"nodeType":"IfStatement","src":"5770:720:51","trueBody":{"id":8429,"nodeType":"Block","src":"5836:576:51","statements":[{"assignments":[8404],"declarations":[{"constant":false,"id":8404,"mutability":"mutable","name":"ln_36_x","nameLocation":"5861:7:51","nodeType":"VariableDeclaration","scope":8429,"src":"5854:14:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8403,"name":"int256","nodeType":"ElementaryTypeName","src":"5854:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":8408,"initialValue":{"arguments":[{"id":8406,"name":"x_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8372,"src":"5878:8:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8405,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9563,"src":"5871:6:51","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":8407,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5871:16:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5854:33:51"},{"expression":{"id":8427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8409,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8394,"src":"6308:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8410,"name":"ln_36_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8404,"src":"6325:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":8411,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8229,"src":"6335:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6325:16:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8413,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6324:18:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8414,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8387,"src":"6345:8:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6324:29:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8416,"name":"ln_36_x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8404,"src":"6358:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":8417,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8229,"src":"6368:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6358:16:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8419,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6357:18:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8420,"name":"y_int256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8387,"src":"6378:8:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6357:29:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8422,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6356:31:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":8423,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8229,"src":"6390:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6356:40:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6324:72:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8426,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6323:74:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6308:89:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8428,"nodeType":"ExpressionStatement","src":"6308:89:51"}]}},{"expression":{"id":8442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8440,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8394,"src":"6503:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":8441,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8229,"src":"6519:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6503:22:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8443,"nodeType":"ExpressionStatement","src":"6503:22:51"}]},{"condition":{"id":8453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"6613:79:51","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8445,"name":"MIN_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8242,"src":"6615:20:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":8446,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8394,"src":"6639:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6615:36:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8448,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8394,"src":"6655:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":8449,"name":"MAX_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8238,"src":"6671:20:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"6655:36:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6615:76:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":8452,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6614:78:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8458,"nodeType":"IfStatement","src":"6609:137:51","trueBody":{"id":8457,"nodeType":"Block","src":"6694:52:51","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":8454,"name":"ProductOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8220,"src":"6715:18:51","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":8455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6715:20:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8456,"nodeType":"RevertStatement","src":"6708:27:51"}]}},{"expression":{"arguments":[{"arguments":[{"id":8462,"name":"logx_times_y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8394,"src":"6775:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8461,"name":"exp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8914,"src":"6771:3:51","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":8463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6771:17:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8460,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6763:7:51","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":8459,"name":"uint256","nodeType":"ElementaryTypeName","src":"6763:7:51","typeDescriptions":{}}},"id":8464,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6763:26:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":8343,"id":8465,"nodeType":"Return","src":"6756:33:51"}]},"documentation":{"id":8335,"nodeType":"StructuredDocumentation","src":"4277:214:51","text":" @dev Exponentiation (x^y) with unsigned 18 decimal fixed point base and exponent.\n Reverts if ln(x) * y is smaller than `MIN_NATURAL_EXPONENT`, or larger than `MAX_NATURAL_EXPONENT`."},"id":8467,"implemented":true,"kind":"function","modifiers":[],"name":"pow","nameLocation":"4505:3:51","nodeType":"FunctionDefinition","parameters":{"id":8340,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8337,"mutability":"mutable","name":"x","nameLocation":"4517:1:51","nodeType":"VariableDeclaration","scope":8467,"src":"4509:9:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8336,"name":"uint256","nodeType":"ElementaryTypeName","src":"4509:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":8339,"mutability":"mutable","name":"y","nameLocation":"4528:1:51","nodeType":"VariableDeclaration","scope":8467,"src":"4520:9:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8338,"name":"uint256","nodeType":"ElementaryTypeName","src":"4520:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4508:22:51"},"returnParameters":{"id":8343,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8342,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8467,"src":"4554:7:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":8341,"name":"uint256","nodeType":"ElementaryTypeName","src":"4554:7:51","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4553:9:51"},"scope":9564,"src":"4496:2300:51","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8913,"nodeType":"Block","src":"7064:6082:51","statements":[{"condition":{"id":8483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"7078:57:51","subExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8475,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"7080:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":8476,"name":"MIN_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8242,"src":"7085:20:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7080:25:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8478,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"7109:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":8479,"name":"MAX_NATURAL_EXPONENT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8238,"src":"7114:20:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7109:25:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7080:54:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":8482,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7079:56:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8488,"nodeType":"IfStatement","src":"7074:112:51","trueBody":{"id":8487,"nodeType":"Block","src":"7137:49:51","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":8484,"name":"InvalidExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8223,"src":"7158:15:51","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":8485,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7158:17:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":8486,"nodeType":"RevertStatement","src":"7151:24:51"}]}},{"assignments":[8490],"declarations":[{"constant":false,"id":8490,"mutability":"mutable","name":"negativeExponent","nameLocation":"7277:16:51","nodeType":"VariableDeclaration","scope":8913,"src":"7272:21:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":8489,"name":"bool","nodeType":"ElementaryTypeName","src":"7272:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":8492,"initialValue":{"hexValue":"66616c7365","id":8491,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7296:5:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"7272:29:51"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8493,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"7316:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":8494,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7320:1:51","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7316:5:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8507,"nodeType":"IfStatement","src":"7312:417:51","trueBody":{"id":8506,"nodeType":"Block","src":"7323:406:51","statements":[{"id":8501,"nodeType":"UncheckedBlock","src":"7633:49:51","statements":[{"expression":{"id":8499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8496,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"7661:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"7665:2:51","subExpression":{"id":8497,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"7666:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"7661:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8500,"nodeType":"ExpressionStatement","src":"7661:6:51"}]},{"expression":{"id":8504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8502,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8490,"src":"7695:16:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":8503,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7714:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"7695:23:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8505,"nodeType":"ExpressionStatement","src":"7695:23:51"}]}},{"assignments":[8509],"declarations":[{"constant":false,"id":8509,"mutability":"mutable","name":"firstAN","nameLocation":"9037:7:51","nodeType":"VariableDeclaration","scope":8913,"src":"9030:14:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8508,"name":"int256","nodeType":"ElementaryTypeName","src":"9030:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":8510,"nodeType":"VariableDeclarationStatement","src":"9030:14:51"},{"id":8546,"nodeType":"UncheckedBlock","src":"9054:457:51","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8511,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"9082:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":8512,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8265,"src":"9087:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9082:7:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8523,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"9171:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":8524,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8271,"src":"9176:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9171:7:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":8539,"nodeType":"Block","src":"9256:74:51","statements":[{"expression":{"id":8537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8535,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8509,"src":"9274:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":8536,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9284:1:51","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9274:11:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8538,"nodeType":"ExpressionStatement","src":"9274:11:51"}]},"id":8540,"nodeType":"IfStatement","src":"9167:163:51","trueBody":{"id":8534,"nodeType":"Block","src":"9180:70:51","statements":[{"expression":{"id":8528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8526,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"9198:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":8527,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8271,"src":"9203:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9198:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8529,"nodeType":"ExpressionStatement","src":"9198:7:51"},{"expression":{"id":8532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8530,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8509,"src":"9223:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8531,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8274,"src":"9233:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9223:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8533,"nodeType":"ExpressionStatement","src":"9223:12:51"}]}},"id":8541,"nodeType":"IfStatement","src":"9078:252:51","trueBody":{"id":8522,"nodeType":"Block","src":"9091:70:51","statements":[{"expression":{"id":8516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8514,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"9109:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":8515,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8265,"src":"9114:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9109:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8517,"nodeType":"ExpressionStatement","src":"9109:7:51"},{"expression":{"id":8520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8518,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8509,"src":"9134:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8519,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8268,"src":"9144:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9134:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8521,"nodeType":"ExpressionStatement","src":"9134:12:51"}]}},{"expression":{"id":8544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8542,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"9492:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":8543,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9497:3:51","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"9492:8:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8545,"nodeType":"ExpressionStatement","src":"9492:8:51"}]},{"assignments":[8548],"declarations":[{"constant":false,"id":8548,"mutability":"mutable","name":"product","nameLocation":"9730:7:51","nodeType":"VariableDeclaration","scope":8913,"src":"9723:14:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8547,"name":"int256","nodeType":"ElementaryTypeName","src":"9723:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":8550,"initialValue":{"id":8549,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"9740:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"9723:23:51"},{"id":8695,"nodeType":"UncheckedBlock","src":"9757:957:51","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8551,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"9785:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":8552,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8277,"src":"9790:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9785:7:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8568,"nodeType":"IfStatement","src":"9781:104:51","trueBody":{"id":8567,"nodeType":"Block","src":"9794:91:51","statements":[{"expression":{"id":8556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8554,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"9812:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":8555,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8277,"src":"9817:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9812:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8557,"nodeType":"ExpressionStatement","src":"9812:7:51"},{"expression":{"id":8565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8558,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8548,"src":"9837:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8561,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8559,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8548,"src":"9848:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8560,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8280,"src":"9858:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9848:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8562,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9847:14:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":8563,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"9864:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9847:23:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9837:33:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8566,"nodeType":"ExpressionStatement","src":"9837:33:51"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8569,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"9902:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":8570,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8283,"src":"9907:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9902:7:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8586,"nodeType":"IfStatement","src":"9898:104:51","trueBody":{"id":8585,"nodeType":"Block","src":"9911:91:51","statements":[{"expression":{"id":8574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8572,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"9929:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":8573,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8283,"src":"9934:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9929:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8575,"nodeType":"ExpressionStatement","src":"9929:7:51"},{"expression":{"id":8583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8576,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8548,"src":"9954:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8577,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8548,"src":"9965:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8578,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8286,"src":"9975:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9965:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8580,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9964:14:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":8581,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"9981:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9964:23:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"9954:33:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8584,"nodeType":"ExpressionStatement","src":"9954:33:51"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8589,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8587,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"10019:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":8588,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8289,"src":"10024:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10019:7:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8604,"nodeType":"IfStatement","src":"10015:104:51","trueBody":{"id":8603,"nodeType":"Block","src":"10028:91:51","statements":[{"expression":{"id":8592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8590,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"10046:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":8591,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8289,"src":"10051:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10046:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8593,"nodeType":"ExpressionStatement","src":"10046:7:51"},{"expression":{"id":8601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8594,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8548,"src":"10071:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8595,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8548,"src":"10082:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8596,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8292,"src":"10092:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10082:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8598,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10081:14:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":8599,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"10098:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10081:23:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10071:33:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8602,"nodeType":"ExpressionStatement","src":"10071:33:51"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8605,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"10136:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":8606,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8295,"src":"10141:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10136:7:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8622,"nodeType":"IfStatement","src":"10132:104:51","trueBody":{"id":8621,"nodeType":"Block","src":"10145:91:51","statements":[{"expression":{"id":8610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8608,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"10163:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":8609,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8295,"src":"10168:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10163:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8611,"nodeType":"ExpressionStatement","src":"10163:7:51"},{"expression":{"id":8619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8612,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8548,"src":"10188:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8613,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8548,"src":"10199:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8614,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8298,"src":"10209:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10199:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8616,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10198:14:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":8617,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"10215:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10198:23:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10188:33:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8620,"nodeType":"ExpressionStatement","src":"10188:33:51"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8623,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"10253:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":8624,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8301,"src":"10258:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10253:7:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8640,"nodeType":"IfStatement","src":"10249:104:51","trueBody":{"id":8639,"nodeType":"Block","src":"10262:91:51","statements":[{"expression":{"id":8628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8626,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"10280:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":8627,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8301,"src":"10285:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10280:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8629,"nodeType":"ExpressionStatement","src":"10280:7:51"},{"expression":{"id":8637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8630,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8548,"src":"10305:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8636,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8631,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8548,"src":"10316:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8632,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8304,"src":"10326:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10316:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8634,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10315:14:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":8635,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"10332:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10315:23:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10305:33:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8638,"nodeType":"ExpressionStatement","src":"10305:33:51"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8641,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"10370:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":8642,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8307,"src":"10375:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10370:7:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8658,"nodeType":"IfStatement","src":"10366:104:51","trueBody":{"id":8657,"nodeType":"Block","src":"10379:91:51","statements":[{"expression":{"id":8646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8644,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"10397:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":8645,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8307,"src":"10402:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10397:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8647,"nodeType":"ExpressionStatement","src":"10397:7:51"},{"expression":{"id":8655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8648,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8548,"src":"10422:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8649,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8548,"src":"10433:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8650,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8310,"src":"10443:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10433:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8652,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10432:14:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":8653,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"10449:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10432:23:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10422:33:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8656,"nodeType":"ExpressionStatement","src":"10422:33:51"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8659,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"10487:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":8660,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8313,"src":"10492:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10487:7:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8676,"nodeType":"IfStatement","src":"10483:104:51","trueBody":{"id":8675,"nodeType":"Block","src":"10496:91:51","statements":[{"expression":{"id":8664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8662,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"10514:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":8663,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8313,"src":"10519:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10514:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8665,"nodeType":"ExpressionStatement","src":"10514:7:51"},{"expression":{"id":8673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8666,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8548,"src":"10539:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8667,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8548,"src":"10550:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8668,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8316,"src":"10560:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10550:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8670,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10549:14:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":8671,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"10566:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10549:23:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10539:33:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8674,"nodeType":"ExpressionStatement","src":"10539:33:51"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8677,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"10604:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":8678,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8319,"src":"10609:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10604:7:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":8694,"nodeType":"IfStatement","src":"10600:104:51","trueBody":{"id":8693,"nodeType":"Block","src":"10613:91:51","statements":[{"expression":{"id":8682,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8680,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"10631:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":8681,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8319,"src":"10636:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10631:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8683,"nodeType":"ExpressionStatement","src":"10631:7:51"},{"expression":{"id":8691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8684,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8548,"src":"10656:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8685,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8548,"src":"10667:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8686,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8322,"src":"10677:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10667:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8688,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10666:14:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":8689,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"10683:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10666:23:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"10656:33:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8692,"nodeType":"ExpressionStatement","src":"10656:33:51"}]}}]},{"assignments":[8697],"declarations":[{"constant":false,"id":8697,"mutability":"mutable","name":"seriesSum","nameLocation":"11025:9:51","nodeType":"VariableDeclaration","scope":8913,"src":"11018:16:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8696,"name":"int256","nodeType":"ElementaryTypeName","src":"11018:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":8699,"initialValue":{"id":8698,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"11037:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"11018:25:51"},{"assignments":[8701],"declarations":[{"constant":false,"id":8701,"mutability":"mutable","name":"term","nameLocation":"11115:4:51","nodeType":"VariableDeclaration","scope":8913,"src":"11108:11:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8700,"name":"int256","nodeType":"ElementaryTypeName","src":"11108:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":8702,"nodeType":"VariableDeclarationStatement","src":"11108:11:51"},{"expression":{"id":8705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8703,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"11228:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":8704,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"11235:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11228:8:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8706,"nodeType":"ExpressionStatement","src":"11228:8:51"},{"id":8912,"nodeType":"UncheckedBlock","src":"11246:1894:51","statements":[{"expression":{"id":8709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8707,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8697,"src":"11270:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":8708,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"11283:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11270:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8710,"nodeType":"ExpressionStatement","src":"11270:17:51"},{"expression":{"id":8721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8711,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"11536:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8714,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8712,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"11545:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8713,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"11552:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11545:8:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8715,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11544:10:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":8716,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"11557:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11544:19:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8718,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11543:21:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":8719,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11567:1:51","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"11543:25:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11536:32:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8722,"nodeType":"ExpressionStatement","src":"11536:32:51"},{"expression":{"id":8725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8723,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8697,"src":"11582:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":8724,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"11595:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11582:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8726,"nodeType":"ExpressionStatement","src":"11582:17:51"},{"expression":{"id":8737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8727,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"11614:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8728,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"11623:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8729,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"11630:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11623:8:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8731,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11622:10:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":8732,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"11635:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11622:19:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8734,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11621:21:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":8735,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11645:1:51","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"11621:25:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11614:32:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8738,"nodeType":"ExpressionStatement","src":"11614:32:51"},{"expression":{"id":8741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8739,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8697,"src":"11660:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":8740,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"11673:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11660:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8742,"nodeType":"ExpressionStatement","src":"11660:17:51"},{"expression":{"id":8753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8743,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"11692:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8746,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8744,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"11701:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8745,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"11708:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11701:8:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8747,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11700:10:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":8748,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"11713:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11700:19:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8750,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11699:21:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"34","id":8751,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11723:1:51","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"11699:25:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11692:32:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8754,"nodeType":"ExpressionStatement","src":"11692:32:51"},{"expression":{"id":8757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8755,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8697,"src":"11738:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":8756,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"11751:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11738:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8758,"nodeType":"ExpressionStatement","src":"11738:17:51"},{"expression":{"id":8769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8759,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"11770:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8760,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"11779:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8761,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"11786:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11779:8:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8763,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11778:10:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":8764,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"11791:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11778:19:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8766,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11777:21:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":8767,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11801:1:51","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"11777:25:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11770:32:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8770,"nodeType":"ExpressionStatement","src":"11770:32:51"},{"expression":{"id":8773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8771,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8697,"src":"11816:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":8772,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"11829:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11816:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8774,"nodeType":"ExpressionStatement","src":"11816:17:51"},{"expression":{"id":8785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8775,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"11848:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8776,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"11857:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8777,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"11864:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11857:8:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8779,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11856:10:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":8780,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"11869:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11856:19:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8782,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11855:21:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"36","id":8783,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11879:1:51","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"11855:25:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11848:32:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8786,"nodeType":"ExpressionStatement","src":"11848:32:51"},{"expression":{"id":8789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8787,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8697,"src":"11894:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":8788,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"11907:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11894:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8790,"nodeType":"ExpressionStatement","src":"11894:17:51"},{"expression":{"id":8801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8791,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"11926:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8792,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"11935:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8793,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"11942:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11935:8:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8795,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11934:10:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":8796,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"11947:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11934:19:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8798,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11933:21:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":8799,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11957:1:51","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"11933:25:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11926:32:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8802,"nodeType":"ExpressionStatement","src":"11926:32:51"},{"expression":{"id":8805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8803,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8697,"src":"11972:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":8804,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"11985:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"11972:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8806,"nodeType":"ExpressionStatement","src":"11972:17:51"},{"expression":{"id":8817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8807,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"12004:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8810,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8808,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"12013:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8809,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"12020:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12013:8:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8811,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12012:10:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":8812,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"12025:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12012:19:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8814,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12011:21:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"38","id":8815,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12035:1:51","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"12011:25:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12004:32:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8818,"nodeType":"ExpressionStatement","src":"12004:32:51"},{"expression":{"id":8821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8819,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8697,"src":"12050:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":8820,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"12063:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12050:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8822,"nodeType":"ExpressionStatement","src":"12050:17:51"},{"expression":{"id":8833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8823,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"12082:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8832,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8824,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"12091:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8825,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"12098:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12091:8:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8827,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12090:10:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":8828,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"12103:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12090:19:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8830,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12089:21:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":8831,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12113:1:51","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"12089:25:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12082:32:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8834,"nodeType":"ExpressionStatement","src":"12082:32:51"},{"expression":{"id":8837,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8835,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8697,"src":"12128:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":8836,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"12141:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12128:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8838,"nodeType":"ExpressionStatement","src":"12128:17:51"},{"expression":{"id":8849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8839,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"12160:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8840,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"12169:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8841,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"12176:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12169:8:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8843,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12168:10:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":8844,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"12181:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12168:19:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8846,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12167:21:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3130","id":8847,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12191:2:51","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"12167:26:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12160:33:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8850,"nodeType":"ExpressionStatement","src":"12160:33:51"},{"expression":{"id":8853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8851,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8697,"src":"12207:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":8852,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"12220:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12207:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8854,"nodeType":"ExpressionStatement","src":"12207:17:51"},{"expression":{"id":8865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8855,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"12239:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8856,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"12248:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8857,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"12255:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12248:8:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8859,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12247:10:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":8860,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"12260:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12247:19:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8862,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12246:21:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":8863,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12270:2:51","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"12246:26:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12239:33:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8866,"nodeType":"ExpressionStatement","src":"12239:33:51"},{"expression":{"id":8869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8867,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8697,"src":"12286:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":8868,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"12299:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12286:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8870,"nodeType":"ExpressionStatement","src":"12286:17:51"},{"expression":{"id":8881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8871,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"12318:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8872,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"12327:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8873,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8470,"src":"12334:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12327:8:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8875,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12326:10:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":8876,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"12339:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12326:19:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8878,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12325:21:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3132","id":8879,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12349:2:51","typeDescriptions":{"typeIdentifier":"t_rational_12_by_1","typeString":"int_const 12"},"value":"12"},"src":"12325:26:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12318:33:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8882,"nodeType":"ExpressionStatement","src":"12318:33:51"},{"expression":{"id":8885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8883,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8697,"src":"12365:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":8884,"name":"term","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8701,"src":"12378:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12365:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8886,"nodeType":"ExpressionStatement","src":"12365:17:51"},{"assignments":[8888],"declarations":[{"constant":false,"id":8888,"mutability":"mutable","name":"result","nameLocation":"12914:6:51","nodeType":"VariableDeclaration","scope":8912,"src":"12907:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8887,"name":"int256","nodeType":"ElementaryTypeName","src":"12907:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":8901,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8889,"name":"product","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8548,"src":"12926:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8890,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8697,"src":"12936:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12926:19:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8892,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12925:21:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":8893,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"12949:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12925:30:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8895,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12924:32:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8896,"name":"firstAN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8509,"src":"12959:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"12924:42:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8898,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12923:44:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"313030","id":8899,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12970:3:51","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"12923:50:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"12907:66:51"},{"expression":{"condition":{"id":8902,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8490,"src":"13075:16:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":8909,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8888,"src":"13123:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"13075:54:51","trueExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8905,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":8903,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8229,"src":"13095:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8904,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8229,"src":"13104:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13095:15:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8906,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"13094:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":8907,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8888,"src":"13114:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13094:26:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":8474,"id":8911,"nodeType":"Return","src":"13068:61:51"}]}]},"documentation":{"id":8468,"nodeType":"StructuredDocumentation","src":"6802:203:51","text":" @dev Natural exponentiation (e^x) with signed 18 decimal fixed point exponent.\n Reverts if `x` is smaller than MIN_NATURAL_EXPONENT, or larger than `MAX_NATURAL_EXPONENT`."},"id":8914,"implemented":true,"kind":"function","modifiers":[],"name":"exp","nameLocation":"7019:3:51","nodeType":"FunctionDefinition","parameters":{"id":8471,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8470,"mutability":"mutable","name":"x","nameLocation":"7030:1:51","nodeType":"VariableDeclaration","scope":8914,"src":"7023:8:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8469,"name":"int256","nodeType":"ElementaryTypeName","src":"7023:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"7022:10:51"},"returnParameters":{"id":8474,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8473,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8914,"src":"7056:6:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8472,"name":"int256","nodeType":"ElementaryTypeName","src":"7056:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"7055:8:51"},"scope":9564,"src":"7010:6136:51","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":8987,"nodeType":"Block","src":"13315:861:51","statements":[{"assignments":[8925],"declarations":[{"constant":false,"id":8925,"mutability":"mutable","name":"logBase","nameLocation":"13552:7:51","nodeType":"VariableDeclaration","scope":8987,"src":"13545:14:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8924,"name":"int256","nodeType":"ElementaryTypeName","src":"13545:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":8926,"nodeType":"VariableDeclarationStatement","src":"13545:14:51"},{"id":8951,"nodeType":"UncheckedBlock","src":"13569:214:51","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8927,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8247,"src":"13597:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":8928,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8919,"src":"13617:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13597:24:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8932,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8930,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8919,"src":"13625:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":8931,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8252,"src":"13632:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13625:24:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13597:52:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":8949,"nodeType":"Block","src":"13712:61:51","statements":[{"expression":{"id":8947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8941,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8925,"src":"13730:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":8943,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8919,"src":"13744:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8942,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9408,"src":"13740:3:51","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":8944,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13740:9:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8945,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8229,"src":"13752:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13740:18:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13730:28:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8948,"nodeType":"ExpressionStatement","src":"13730:28:51"}]},"id":8950,"nodeType":"IfStatement","src":"13593:180:51","trueBody":{"id":8940,"nodeType":"Block","src":"13651:55:51","statements":[{"expression":{"id":8938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8934,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8925,"src":"13669:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8936,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8919,"src":"13686:4:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8935,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9563,"src":"13679:6:51","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":8937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13679:12:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13669:22:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8939,"nodeType":"ExpressionStatement","src":"13669:22:51"}]}}]},{"assignments":[8953],"declarations":[{"constant":false,"id":8953,"mutability":"mutable","name":"logArg","nameLocation":"13800:6:51","nodeType":"VariableDeclaration","scope":8987,"src":"13793:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8952,"name":"int256","nodeType":"ElementaryTypeName","src":"13793:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":8954,"nodeType":"VariableDeclarationStatement","src":"13793:13:51"},{"id":8986,"nodeType":"UncheckedBlock","src":"13816:354:51","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":8961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8955,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8247,"src":"13844:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":8956,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8917,"src":"13864:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13844:23:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8958,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8917,"src":"13871:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":8959,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8252,"src":"13877:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13871:23:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13844:50:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":8977,"nodeType":"Block","src":"13955:59:51","statements":[{"expression":{"id":8975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8969,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8953,"src":"13973:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":8971,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8917,"src":"13986:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8970,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9408,"src":"13982:3:51","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":8972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13982:8:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8973,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8229,"src":"13993:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13982:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13973:26:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8976,"nodeType":"ExpressionStatement","src":"13973:26:51"}]},"id":8978,"nodeType":"IfStatement","src":"13840:174:51","trueBody":{"id":8968,"nodeType":"Block","src":"13896:53:51","statements":[{"expression":{"id":8966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":8962,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8953,"src":"13914:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":8964,"name":"arg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8917,"src":"13930:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":8963,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9563,"src":"13923:6:51","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":8965,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13923:11:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"13914:20:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":8967,"nodeType":"ExpressionStatement","src":"13914:20:51"}]}},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8979,"name":"logArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8953,"src":"14133:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":8980,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8229,"src":"14142:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14133:15:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":8982,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14132:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":8983,"name":"logBase","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8925,"src":"14152:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14132:27:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":8923,"id":8985,"nodeType":"Return","src":"14125:34:51"}]}]},"documentation":{"id":8915,"nodeType":"StructuredDocumentation","src":"13152:89:51","text":"@dev Logarithm (log(arg, base), with signed 18 decimal fixed point base and argument."},"id":8988,"implemented":true,"kind":"function","modifiers":[],"name":"log","nameLocation":"13255:3:51","nodeType":"FunctionDefinition","parameters":{"id":8920,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8917,"mutability":"mutable","name":"arg","nameLocation":"13266:3:51","nodeType":"VariableDeclaration","scope":8988,"src":"13259:10:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8916,"name":"int256","nodeType":"ElementaryTypeName","src":"13259:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":8919,"mutability":"mutable","name":"base","nameLocation":"13278:4:51","nodeType":"VariableDeclaration","scope":8988,"src":"13271:11:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8918,"name":"int256","nodeType":"ElementaryTypeName","src":"13271:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"13258:25:51"},"returnParameters":{"id":8923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8922,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":8988,"src":"13307:6:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8921,"name":"int256","nodeType":"ElementaryTypeName","src":"13307:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"13306:8:51"},"scope":9564,"src":"13246:930:51","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9025,"nodeType":"Block","src":"14319:353:51","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":8998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":8996,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8991,"src":"14416:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"hexValue":"30","id":8997,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14421:1:51","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14416:6:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9003,"nodeType":"IfStatement","src":"14412:57:51","trueBody":{"id":9002,"nodeType":"Block","src":"14424:45:51","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":8999,"name":"OutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8226,"src":"14445:11:51","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14445:13:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9001,"nodeType":"RevertStatement","src":"14438:20:51"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":9010,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9004,"name":"LN_36_LOWER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8247,"src":"14482:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":9005,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8991,"src":"14502:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14482:21:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9007,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8991,"src":"14507:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":9008,"name":"LN_36_UPPER_BOUND","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8252,"src":"14511:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14507:21:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14482:46:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":9023,"nodeType":"Block","src":"14628:38:51","statements":[{"expression":{"arguments":[{"id":9020,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8991,"src":"14653:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9019,"name":"_ln","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9408,"src":"14649:3:51","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":9021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14649:6:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":8995,"id":9022,"nodeType":"Return","src":"14642:13:51"}]},"id":9024,"nodeType":"IfStatement","src":"14478:188:51","trueBody":{"id":9018,"nodeType":"Block","src":"14530:92:51","statements":[{"id":9017,"nodeType":"UncheckedBlock","src":"14544:68:51","statements":[{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":9012,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8991,"src":"14586:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":9011,"name":"_ln_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9563,"src":"14579:6:51","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_int256_$","typeString":"function (int256) pure returns (int256)"}},"id":9013,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14579:9:51","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9014,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8229,"src":"14591:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14579:18:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":8995,"id":9016,"nodeType":"Return","src":"14572:25:51"}]}]}}]},"documentation":{"id":8989,"nodeType":"StructuredDocumentation","src":"14182:79:51","text":"@dev Natural logarithm (ln(a)) with signed 18 decimal fixed point argument."},"id":9026,"implemented":true,"kind":"function","modifiers":[],"name":"ln","nameLocation":"14275:2:51","nodeType":"FunctionDefinition","parameters":{"id":8992,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8991,"mutability":"mutable","name":"a","nameLocation":"14285:1:51","nodeType":"VariableDeclaration","scope":9026,"src":"14278:8:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8990,"name":"int256","nodeType":"ElementaryTypeName","src":"14278:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14277:10:51"},"returnParameters":{"id":8995,"nodeType":"ParameterList","parameters":[{"constant":false,"id":8994,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9026,"src":"14311:6:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":8993,"name":"int256","nodeType":"ElementaryTypeName","src":"14311:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14310:8:51"},"scope":9564,"src":"14266:406:51","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9407,"nodeType":"Block","src":"14824:5531:51","statements":[{"assignments":[9035],"declarations":[{"constant":false,"id":9035,"mutability":"mutable","name":"negativeExponent","nameLocation":"14915:16:51","nodeType":"VariableDeclaration","scope":9407,"src":"14910:21:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9034,"name":"bool","nodeType":"ElementaryTypeName","src":"14910:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":9037,"initialValue":{"hexValue":"66616c7365","id":9036,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"14934:5:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"14910:29:51"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9038,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"14954:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":9039,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8229,"src":"14958:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"14954:10:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9056,"nodeType":"IfStatement","src":"14950:381:51","trueBody":{"id":9055,"nodeType":"Block","src":"14966:365:51","statements":[{"id":9050,"nodeType":"UncheckedBlock","src":"15216:68:51","statements":[{"expression":{"id":9048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9041,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"15244:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9044,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":9042,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8229,"src":"15249:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9043,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8229,"src":"15258:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15249:15:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9045,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"15248:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9046,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"15268:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15248:21:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"15244:25:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9049,"nodeType":"ExpressionStatement","src":"15244:25:51"}]},{"expression":{"id":9053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9051,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9035,"src":"15297:16:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":9052,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15316:4:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"15297:23:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9054,"nodeType":"ExpressionStatement","src":"15297:23:51"}]}},{"assignments":[9058],"declarations":[{"constant":false,"id":9058,"mutability":"mutable","name":"sum","nameLocation":"16663:3:51","nodeType":"VariableDeclaration","scope":9407,"src":"16656:10:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9057,"name":"int256","nodeType":"ElementaryTypeName","src":"16656:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":9060,"initialValue":{"hexValue":"30","id":9059,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16669:1:51","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16656:14:51"},{"id":9279,"nodeType":"UncheckedBlock","src":"16680:1674:51","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9061,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"16708:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9064,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":9062,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8268,"src":"16713:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9063,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8229,"src":"16718:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16713:11:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16708:16:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9075,"nodeType":"IfStatement","src":"16704:126:51","trueBody":{"id":9074,"nodeType":"Block","src":"16726:104:51","statements":[{"expression":{"id":9068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9066,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"16744:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":9067,"name":"a0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8268,"src":"16749:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16744:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9069,"nodeType":"ExpressionStatement","src":"16744:7:51"},{"expression":{"id":9072,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9070,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9058,"src":"16806:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":9071,"name":"x0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8265,"src":"16813:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16806:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9073,"nodeType":"ExpressionStatement","src":"16806:9:51"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9076,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"16848:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9079,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":9077,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8274,"src":"16853:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9078,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8229,"src":"16858:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16853:11:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16848:16:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9090,"nodeType":"IfStatement","src":"16844:126:51","trueBody":{"id":9089,"nodeType":"Block","src":"16866:104:51","statements":[{"expression":{"id":9083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9081,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"16884:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":9082,"name":"a1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8274,"src":"16889:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16884:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9084,"nodeType":"ExpressionStatement","src":"16884:7:51"},{"expression":{"id":9087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9085,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9058,"src":"16946:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":9086,"name":"x1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8271,"src":"16953:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"16946:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9088,"nodeType":"ExpressionStatement","src":"16946:9:51"}]}},{"expression":{"id":9093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9091,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9058,"src":"17109:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":9092,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17116:3:51","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"17109:10:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9094,"nodeType":"ExpressionStatement","src":"17109:10:51"},{"expression":{"id":9097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9095,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"17133:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"313030","id":9096,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17138:3:51","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"17133:8:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9098,"nodeType":"ExpressionStatement","src":"17133:8:51"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9099,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"17276:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":9100,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8280,"src":"17281:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17276:7:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9116,"nodeType":"IfStatement","src":"17272:94:51","trueBody":{"id":9115,"nodeType":"Block","src":"17285:81:51","statements":[{"expression":{"id":9109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9102,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"17303:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9103,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"17308:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9104,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"17312:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17308:10:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9106,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17307:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9107,"name":"a2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8280,"src":"17322:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17307:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17303:21:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9110,"nodeType":"ExpressionStatement","src":"17303:21:51"},{"expression":{"id":9113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9111,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9058,"src":"17342:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":9112,"name":"x2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8277,"src":"17349:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17342:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9114,"nodeType":"ExpressionStatement","src":"17342:9:51"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9117,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"17384:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":9118,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8286,"src":"17389:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17384:7:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9134,"nodeType":"IfStatement","src":"17380:94:51","trueBody":{"id":9133,"nodeType":"Block","src":"17393:81:51","statements":[{"expression":{"id":9127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9120,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"17411:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9121,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"17416:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9122,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"17420:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17416:10:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9124,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17415:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9125,"name":"a3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8286,"src":"17430:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17415:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17411:21:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9128,"nodeType":"ExpressionStatement","src":"17411:21:51"},{"expression":{"id":9131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9129,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9058,"src":"17450:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":9130,"name":"x3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8283,"src":"17457:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17450:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9132,"nodeType":"ExpressionStatement","src":"17450:9:51"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9135,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"17492:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":9136,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8292,"src":"17497:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17492:7:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9152,"nodeType":"IfStatement","src":"17488:94:51","trueBody":{"id":9151,"nodeType":"Block","src":"17501:81:51","statements":[{"expression":{"id":9145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9138,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"17519:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9144,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9139,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"17524:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9140,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"17528:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17524:10:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9142,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17523:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9143,"name":"a4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8292,"src":"17538:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17523:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17519:21:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9146,"nodeType":"ExpressionStatement","src":"17519:21:51"},{"expression":{"id":9149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9147,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9058,"src":"17558:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":9148,"name":"x4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8289,"src":"17565:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17558:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9150,"nodeType":"ExpressionStatement","src":"17558:9:51"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9155,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9153,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"17600:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":9154,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8298,"src":"17605:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17600:7:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9170,"nodeType":"IfStatement","src":"17596:94:51","trueBody":{"id":9169,"nodeType":"Block","src":"17609:81:51","statements":[{"expression":{"id":9163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9156,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"17627:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9157,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"17632:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9158,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"17636:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17632:10:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9160,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17631:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9161,"name":"a5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8298,"src":"17646:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17631:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17627:21:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9164,"nodeType":"ExpressionStatement","src":"17627:21:51"},{"expression":{"id":9167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9165,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9058,"src":"17666:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":9166,"name":"x5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8295,"src":"17673:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17666:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9168,"nodeType":"ExpressionStatement","src":"17666:9:51"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9171,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"17708:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":9172,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8304,"src":"17713:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17708:7:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9188,"nodeType":"IfStatement","src":"17704:94:51","trueBody":{"id":9187,"nodeType":"Block","src":"17717:81:51","statements":[{"expression":{"id":9181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9174,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"17735:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9175,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"17740:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9176,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"17744:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17740:10:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9178,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17739:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9179,"name":"a6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8304,"src":"17754:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17739:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17735:21:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9182,"nodeType":"ExpressionStatement","src":"17735:21:51"},{"expression":{"id":9185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9183,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9058,"src":"17774:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":9184,"name":"x6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8301,"src":"17781:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17774:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9186,"nodeType":"ExpressionStatement","src":"17774:9:51"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9189,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"17816:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":9190,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8310,"src":"17821:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17816:7:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9206,"nodeType":"IfStatement","src":"17812:94:51","trueBody":{"id":9205,"nodeType":"Block","src":"17825:81:51","statements":[{"expression":{"id":9199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9192,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"17843:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9193,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"17848:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9194,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"17852:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17848:10:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9196,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17847:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9197,"name":"a7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8310,"src":"17862:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17847:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17843:21:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9200,"nodeType":"ExpressionStatement","src":"17843:21:51"},{"expression":{"id":9203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9201,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9058,"src":"17882:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":9202,"name":"x7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8307,"src":"17889:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17882:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9204,"nodeType":"ExpressionStatement","src":"17882:9:51"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9207,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"17924:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":9208,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8316,"src":"17929:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17924:7:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9224,"nodeType":"IfStatement","src":"17920:94:51","trueBody":{"id":9223,"nodeType":"Block","src":"17933:81:51","statements":[{"expression":{"id":9217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9210,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"17951:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9211,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"17956:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9212,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"17960:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17956:10:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9214,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17955:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9215,"name":"a8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8316,"src":"17970:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17955:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17951:21:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9218,"nodeType":"ExpressionStatement","src":"17951:21:51"},{"expression":{"id":9221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9219,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9058,"src":"17990:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":9220,"name":"x8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8313,"src":"17997:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17990:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9222,"nodeType":"ExpressionStatement","src":"17990:9:51"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9225,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"18032:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":9226,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8322,"src":"18037:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18032:7:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9242,"nodeType":"IfStatement","src":"18028:94:51","trueBody":{"id":9241,"nodeType":"Block","src":"18041:81:51","statements":[{"expression":{"id":9235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9228,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"18059:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9229,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"18064:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9230,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"18068:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18064:10:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9232,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18063:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9233,"name":"a9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8322,"src":"18078:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18063:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18059:21:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9236,"nodeType":"ExpressionStatement","src":"18059:21:51"},{"expression":{"id":9239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9237,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9058,"src":"18098:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":9238,"name":"x9","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8319,"src":"18105:2:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18098:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9240,"nodeType":"ExpressionStatement","src":"18098:9:51"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9243,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"18140:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":9244,"name":"a10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8328,"src":"18145:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18140:8:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9260,"nodeType":"IfStatement","src":"18136:97:51","trueBody":{"id":9259,"nodeType":"Block","src":"18150:83:51","statements":[{"expression":{"id":9253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9246,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"18168:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9247,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"18173:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9248,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"18177:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18173:10:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9250,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18172:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9251,"name":"a10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8328,"src":"18187:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18172:18:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18168:22:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9254,"nodeType":"ExpressionStatement","src":"18168:22:51"},{"expression":{"id":9257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9255,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9058,"src":"18208:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":9256,"name":"x10","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8325,"src":"18215:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18208:10:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9258,"nodeType":"ExpressionStatement","src":"18208:10:51"}]}},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9261,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"18251:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":9262,"name":"a11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8334,"src":"18256:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18251:8:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9278,"nodeType":"IfStatement","src":"18247:97:51","trueBody":{"id":9277,"nodeType":"Block","src":"18261:83:51","statements":[{"expression":{"id":9271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9264,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"18279:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9265,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"18284:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9266,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"18288:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18284:10:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9268,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18283:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9269,"name":"a11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8334,"src":"18298:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18283:18:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18279:22:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9272,"nodeType":"ExpressionStatement","src":"18279:22:51"},{"expression":{"id":9275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9273,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9058,"src":"18319:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":9274,"name":"x11","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8331,"src":"18326:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18319:10:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9276,"nodeType":"ExpressionStatement","src":"18319:10:51"}]}}]},{"id":9406,"nodeType":"UncheckedBlock","src":"18856:1493:51","statements":[{"assignments":[9281],"declarations":[{"constant":false,"id":9281,"mutability":"mutable","name":"z","nameLocation":"18887:1:51","nodeType":"VariableDeclaration","scope":9406,"src":"18880:8:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9280,"name":"int256","nodeType":"ElementaryTypeName","src":"18880:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":9294,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9282,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"18893:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":9283,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"18897:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18893:10:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9285,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18892:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9286,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"18907:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18892:21:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9288,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18891:23:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9289,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9029,"src":"18918:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":9290,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"18922:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18918:10:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9292,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18917:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18891:38:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"18880:49:51"},{"assignments":[9296],"declarations":[{"constant":false,"id":9296,"mutability":"mutable","name":"z_squared","nameLocation":"18950:9:51","nodeType":"VariableDeclaration","scope":9406,"src":"18943:16:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9295,"name":"int256","nodeType":"ElementaryTypeName","src":"18943:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":9303,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9297,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9281,"src":"18963:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9298,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9281,"src":"18967:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18963:5:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9300,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18962:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9301,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"18972:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18962:16:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"18943:35:51"},{"assignments":[9305],"declarations":[{"constant":false,"id":9305,"mutability":"mutable","name":"num","nameLocation":"19074:3:51","nodeType":"VariableDeclaration","scope":9406,"src":"19067:10:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9304,"name":"int256","nodeType":"ElementaryTypeName","src":"19067:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":9307,"initialValue":{"id":9306,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9281,"src":"19080:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"19067:14:51"},{"assignments":[9309],"declarations":[{"constant":false,"id":9309,"mutability":"mutable","name":"seriesSum","nameLocation":"19210:9:51","nodeType":"VariableDeclaration","scope":9406,"src":"19203:16:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9308,"name":"int256","nodeType":"ElementaryTypeName","src":"19203:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":9311,"initialValue":{"id":9310,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9305,"src":"19222:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"19203:22:51"},{"expression":{"id":9319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9312,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9305,"src":"19304:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9313,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9305,"src":"19311:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9314,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9296,"src":"19317:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19311:15:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9316,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19310:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9317,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"19330:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19310:26:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19304:32:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9320,"nodeType":"ExpressionStatement","src":"19304:32:51"},{"expression":{"id":9325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9321,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9309,"src":"19350:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9322,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9305,"src":"19363:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":9323,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19369:1:51","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"19363:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19350:20:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9326,"nodeType":"ExpressionStatement","src":"19350:20:51"},{"expression":{"id":9334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9327,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9305,"src":"19385:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9330,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9328,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9305,"src":"19392:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9329,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9296,"src":"19398:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19392:15:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9331,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19391:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9332,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"19411:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19391:26:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19385:32:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9335,"nodeType":"ExpressionStatement","src":"19385:32:51"},{"expression":{"id":9340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9336,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9309,"src":"19431:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9337,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9305,"src":"19444:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":9338,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19450:1:51","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"19444:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19431:20:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9341,"nodeType":"ExpressionStatement","src":"19431:20:51"},{"expression":{"id":9349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9342,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9305,"src":"19466:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9345,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9343,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9305,"src":"19473:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9344,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9296,"src":"19479:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19473:15:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9346,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19472:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9347,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"19492:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19472:26:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19466:32:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9350,"nodeType":"ExpressionStatement","src":"19466:32:51"},{"expression":{"id":9355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9351,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9309,"src":"19512:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9352,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9305,"src":"19525:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":9353,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19531:1:51","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"19525:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19512:20:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9356,"nodeType":"ExpressionStatement","src":"19512:20:51"},{"expression":{"id":9364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9357,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9305,"src":"19547:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9363,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9358,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9305,"src":"19554:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9359,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9296,"src":"19560:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19554:15:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9361,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19553:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9362,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"19573:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19553:26:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19547:32:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9365,"nodeType":"ExpressionStatement","src":"19547:32:51"},{"expression":{"id":9370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9366,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9309,"src":"19593:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9367,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9305,"src":"19606:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":9368,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19612:1:51","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"19606:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19593:20:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9371,"nodeType":"ExpressionStatement","src":"19593:20:51"},{"expression":{"id":9379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9372,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9305,"src":"19628:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9378,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9373,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9305,"src":"19635:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9374,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9296,"src":"19641:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19635:15:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9376,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19634:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9377,"name":"ONE_20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8232,"src":"19654:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19634:26:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19628:32:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9380,"nodeType":"ExpressionStatement","src":"19628:32:51"},{"expression":{"id":9385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9381,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9309,"src":"19674:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9382,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9305,"src":"19687:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":9383,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19693:2:51","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"19687:8:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19674:21:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9386,"nodeType":"ExpressionStatement","src":"19674:21:51"},{"expression":{"id":9389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9387,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9309,"src":"19866:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"hexValue":"32","id":9388,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19879:1:51","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"19866:14:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9390,"nodeType":"ExpressionStatement","src":"19866:14:51"},{"assignments":[9392],"declarations":[{"constant":false,"id":9392,"mutability":"mutable","name":"result","nameLocation":"20169:6:51","nodeType":"VariableDeclaration","scope":9406,"src":"20162:13:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9391,"name":"int256","nodeType":"ElementaryTypeName","src":"20162:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":9399,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9398,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9393,"name":"sum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9058,"src":"20179:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":9394,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9309,"src":"20185:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20179:15:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9396,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20178:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"313030","id":9397,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20198:3:51","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"value":"100"},"src":"20178:23:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"20162:39:51"},{"expression":{"condition":{"id":9400,"name":"negativeExponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9035,"src":"20303:16:51","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":9403,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9392,"src":"20332:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"20303:35:51","trueExpression":{"id":9402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"20322:7:51","subExpression":{"id":9401,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9392,"src":"20323:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":9033,"id":9405,"nodeType":"Return","src":"20296:42:51"}]}]},"documentation":{"id":9027,"nodeType":"StructuredDocumentation","src":"14678:88:51","text":"@dev Internal natural logarithm (ln(a)) with signed 18 decimal fixed point argument."},"id":9408,"implemented":true,"kind":"function","modifiers":[],"name":"_ln","nameLocation":"14780:3:51","nodeType":"FunctionDefinition","parameters":{"id":9030,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9029,"mutability":"mutable","name":"a","nameLocation":"14791:1:51","nodeType":"VariableDeclaration","scope":9408,"src":"14784:8:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9028,"name":"int256","nodeType":"ElementaryTypeName","src":"14784:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14783:10:51"},"returnParameters":{"id":9033,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9032,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9408,"src":"14816:6:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9031,"name":"int256","nodeType":"ElementaryTypeName","src":"14816:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"14815:8:51"},"scope":9564,"src":"14771:5584:51","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":9562,"nodeType":"Block","src":"20678:1804:51","statements":[{"id":9561,"nodeType":"UncheckedBlock","src":"20892:1584:51","statements":[{"expression":{"id":9418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9416,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9411,"src":"20916:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"id":9417,"name":"ONE_18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8229,"src":"20921:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20916:11:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9419,"nodeType":"ExpressionStatement","src":"20916:11:51"},{"assignments":[9421],"declarations":[{"constant":false,"id":9421,"mutability":"mutable","name":"z","nameLocation":"21315:1:51","nodeType":"VariableDeclaration","scope":9561,"src":"21308:8:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9420,"name":"int256","nodeType":"ElementaryTypeName","src":"21308:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":9434,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9422,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9411,"src":"21321:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":9423,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8235,"src":"21325:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21321:10:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9425,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21320:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9426,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8235,"src":"21335:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21320:21:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9428,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21319:23:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9429,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9411,"src":"21346:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":9430,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8235,"src":"21350:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21346:10:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9432,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21345:12:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21319:38:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21308:49:51"},{"assignments":[9436],"declarations":[{"constant":false,"id":9436,"mutability":"mutable","name":"z_squared","nameLocation":"21378:9:51","nodeType":"VariableDeclaration","scope":9561,"src":"21371:16:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9435,"name":"int256","nodeType":"ElementaryTypeName","src":"21371:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":9443,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9437,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9421,"src":"21391:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9438,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9421,"src":"21395:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21391:5:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9440,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21390:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9441,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8235,"src":"21400:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21390:16:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21371:35:51"},{"assignments":[9445],"declarations":[{"constant":false,"id":9445,"mutability":"mutable","name":"num","nameLocation":"21502:3:51","nodeType":"VariableDeclaration","scope":9561,"src":"21495:10:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9444,"name":"int256","nodeType":"ElementaryTypeName","src":"21495:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":9447,"initialValue":{"id":9446,"name":"z","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9421,"src":"21508:1:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21495:14:51"},{"assignments":[9449],"declarations":[{"constant":false,"id":9449,"mutability":"mutable","name":"seriesSum","nameLocation":"21638:9:51","nodeType":"VariableDeclaration","scope":9561,"src":"21631:16:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9448,"name":"int256","nodeType":"ElementaryTypeName","src":"21631:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":9451,"initialValue":{"id":9450,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9445,"src":"21650:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"21631:22:51"},{"expression":{"id":9459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9452,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9445,"src":"21732:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9453,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9445,"src":"21739:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9454,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9436,"src":"21745:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21739:15:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9456,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21738:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9457,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8235,"src":"21758:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21738:26:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21732:32:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9460,"nodeType":"ExpressionStatement","src":"21732:32:51"},{"expression":{"id":9465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9461,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9449,"src":"21778:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9462,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9445,"src":"21791:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":9463,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21797:1:51","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"21791:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21778:20:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9466,"nodeType":"ExpressionStatement","src":"21778:20:51"},{"expression":{"id":9474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9467,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9445,"src":"21813:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9468,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9445,"src":"21820:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9469,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9436,"src":"21826:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21820:15:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9471,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21819:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9472,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8235,"src":"21839:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21819:26:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21813:32:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9475,"nodeType":"ExpressionStatement","src":"21813:32:51"},{"expression":{"id":9480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9476,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9449,"src":"21859:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9477,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9445,"src":"21872:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"35","id":9478,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21878:1:51","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"21872:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21859:20:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9481,"nodeType":"ExpressionStatement","src":"21859:20:51"},{"expression":{"id":9489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9482,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9445,"src":"21894:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9483,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9445,"src":"21901:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9484,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9436,"src":"21907:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21901:15:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9486,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21900:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9487,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8235,"src":"21920:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21900:26:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21894:32:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9490,"nodeType":"ExpressionStatement","src":"21894:32:51"},{"expression":{"id":9495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9491,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9449,"src":"21940:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9492,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9445,"src":"21953:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"37","id":9493,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21959:1:51","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"21953:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21940:20:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9496,"nodeType":"ExpressionStatement","src":"21940:20:51"},{"expression":{"id":9504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9497,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9445,"src":"21975:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9498,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9445,"src":"21982:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9499,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9436,"src":"21988:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21982:15:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9501,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21981:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9502,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8235,"src":"22001:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21981:26:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21975:32:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9505,"nodeType":"ExpressionStatement","src":"21975:32:51"},{"expression":{"id":9510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9506,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9449,"src":"22021:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9507,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9445,"src":"22034:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"39","id":9508,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22040:1:51","typeDescriptions":{"typeIdentifier":"t_rational_9_by_1","typeString":"int_const 9"},"value":"9"},"src":"22034:7:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22021:20:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9511,"nodeType":"ExpressionStatement","src":"22021:20:51"},{"expression":{"id":9519,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9512,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9445,"src":"22056:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9513,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9445,"src":"22063:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9514,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9436,"src":"22069:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22063:15:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9516,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22062:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9517,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8235,"src":"22082:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22062:26:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22056:32:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9520,"nodeType":"ExpressionStatement","src":"22056:32:51"},{"expression":{"id":9525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9521,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9449,"src":"22102:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9522,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9445,"src":"22115:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3131","id":9523,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22121:2:51","typeDescriptions":{"typeIdentifier":"t_rational_11_by_1","typeString":"int_const 11"},"value":"11"},"src":"22115:8:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22102:21:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9526,"nodeType":"ExpressionStatement","src":"22102:21:51"},{"expression":{"id":9534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9527,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9445,"src":"22138:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9528,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9445,"src":"22145:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9529,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9436,"src":"22151:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22145:15:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9531,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22144:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9532,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8235,"src":"22164:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22144:26:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22138:32:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9535,"nodeType":"ExpressionStatement","src":"22138:32:51"},{"expression":{"id":9540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9536,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9449,"src":"22184:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9537,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9445,"src":"22197:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3133","id":9538,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22203:2:51","typeDescriptions":{"typeIdentifier":"t_rational_13_by_1","typeString":"int_const 13"},"value":"13"},"src":"22197:8:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22184:21:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9541,"nodeType":"ExpressionStatement","src":"22184:21:51"},{"expression":{"id":9549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9542,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9445,"src":"22220:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9543,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9445,"src":"22227:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":9544,"name":"z_squared","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9436,"src":"22233:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22227:15:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":9546,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22226:17:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":9547,"name":"ONE_36","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8235,"src":"22246:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22226:26:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22220:32:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9550,"nodeType":"ExpressionStatement","src":"22220:32:51"},{"expression":{"id":9555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9551,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9449,"src":"22266:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9552,"name":"num","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9445,"src":"22279:3:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3135","id":9553,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22285:2:51","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"15"},"src":"22279:8:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22266:21:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":9556,"nodeType":"ExpressionStatement","src":"22266:21:51"},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":9559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9557,"name":"seriesSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9449,"src":"22452:9:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"32","id":9558,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22464:1:51","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"22452:13:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":9415,"id":9560,"nodeType":"Return","src":"22445:20:51"}]}]},"documentation":{"id":9409,"nodeType":"StructuredDocumentation","src":"20361:256:51","text":" @dev Internal high precision (36 decimal places) natural logarithm (ln(x)) with signed 18 decimal fixed point argument,\n for x close to one.\n Should only be used if x is between LN_36_LOWER_BOUND and LN_36_UPPER_BOUND."},"id":9563,"implemented":true,"kind":"function","modifiers":[],"name":"_ln_36","nameLocation":"20631:6:51","nodeType":"FunctionDefinition","parameters":{"id":9412,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9411,"mutability":"mutable","name":"x","nameLocation":"20645:1:51","nodeType":"VariableDeclaration","scope":9563,"src":"20638:8:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9410,"name":"int256","nodeType":"ElementaryTypeName","src":"20638:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20637:10:51"},"returnParameters":{"id":9415,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9414,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9563,"src":"20670:6:51","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":9413,"name":"int256","nodeType":"ElementaryTypeName","src":"20670:6:51","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20669:8:51"},"scope":9564,"src":"20622:1860:51","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":9565,"src":"595:21889:51","usedErrors":[8214,8217,8220,8223,8226],"usedEvents":[]}],"src":"33:22452:51"},"id":51},"@balancer-labs/v3-solidity-utils/contracts/math/WeightedMath.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/WeightedMath.sol","exportedSymbols":{"FixedPoint":[8208],"WeightedMath":[9873]},"id":9874,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":9566,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:52"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"./FixedPoint.sol","id":9568,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9874,"sourceUnit":8209,"src":"72:46:52","symbolAliases":[{"foreign":{"id":9567,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"81:10:52","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"WeightedMath","contractDependencies":[],"contractKind":"library","documentation":{"id":9569,"nodeType":"StructuredDocumentation","src":"120:587:52","text":" @notice Implementation of Balancer Weighted Math, essentially unchanged since v1.\n @dev It is a generalization of the x * y = k constant product formula, accounting for cases with more than two\n tokens, and weights that are not 50/50.\n See https://docs.balancer.fi/concepts/explore-available-balancer-pools/weighted-pool/weighted-math.html\n For security reasons, to help ensure that for all possible \"round trip\" paths the caller always receives the same\n or fewer tokens than supplied, we have chosen the rounding direction to favor the protocol in all cases."},"fullyImplemented":true,"id":9873,"linearizedBaseContracts":[9873],"name":"WeightedMath","nameLocation":"716:12:52","nodeType":"ContractDefinition","nodes":[{"global":false,"id":9572,"libraryName":{"id":9570,"name":"FixedPoint","nameLocations":["741:10:52"],"nodeType":"IdentifierPath","referencedDeclaration":8208,"src":"741:10:52"},"nodeType":"UsingForDirective","src":"735:29:52","typeName":{"id":9571,"name":"uint256","nodeType":"ElementaryTypeName","src":"756:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"documentation":{"id":9573,"nodeType":"StructuredDocumentation","src":"770:89:52","text":"@notice User attempted to extract a disproportionate amountOut of tokens from a pool."},"errorSelector":"64590b9f","id":9575,"name":"MaxOutRatio","nameLocation":"870:11:52","nodeType":"ErrorDefinition","parameters":{"id":9574,"nodeType":"ParameterList","parameters":[],"src":"881:2:52"},"src":"864:20:52"},{"documentation":{"id":9576,"nodeType":"StructuredDocumentation","src":"890:82:52","text":"@notice User attempted to add a disproportionate amountIn of tokens to a pool."},"errorSelector":"340a4533","id":9578,"name":"MaxInRatio","nameLocation":"983:10:52","nodeType":"ErrorDefinition","parameters":{"id":9577,"nodeType":"ParameterList","parameters":[],"src":"993:2:52"},"src":"977:19:52"},{"documentation":{"id":9579,"nodeType":"StructuredDocumentation","src":"1002:200:52","text":" @notice Error thrown when the calculated invariant is zero, indicating an issue with the invariant calculation.\n @dev Most commonly, this happens when a token balance is zero."},"errorSelector":"26543689","id":9581,"name":"ZeroInvariant","nameLocation":"1213:13:52","nodeType":"ErrorDefinition","parameters":{"id":9580,"nodeType":"ParameterList","parameters":[],"src":"1226:2:52"},"src":"1207:22:52"},{"constant":true,"id":9584,"mutability":"constant","name":"_MAX_IN_RATIO","nameLocation":"2766:13:52","nodeType":"VariableDeclaration","scope":9873,"src":"2740:47:52","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9582,"name":"uint256","nodeType":"ElementaryTypeName","src":"2740:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3330653136","id":9583,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2782:5:52","typeDescriptions":{"typeIdentifier":"t_rational_300000000000000000_by_1","typeString":"int_const 300000000000000000"},"value":"30e16"},"visibility":"internal"},{"constant":true,"id":9587,"mutability":"constant","name":"_MAX_OUT_RATIO","nameLocation":"2826:14:52","nodeType":"VariableDeclaration","scope":9873,"src":"2800:48:52","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9585,"name":"uint256","nodeType":"ElementaryTypeName","src":"2800:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3330653136","id":9586,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2843:5:52","typeDescriptions":{"typeIdentifier":"t_rational_300000000000000000_by_1","typeString":"int_const 300000000000000000"},"value":"30e16"},"visibility":"internal"},{"constant":true,"id":9590,"mutability":"constant","name":"_MAX_INVARIANT_RATIO","nameLocation":"3004:20:52","nodeType":"VariableDeclaration","scope":9873,"src":"2978:55:52","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9588,"name":"uint256","nodeType":"ElementaryTypeName","src":"2978:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"333030653136","id":9589,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3027:6:52","typeDescriptions":{"typeIdentifier":"t_rational_3000000000000000000_by_1","typeString":"int_const 3000000000000000000"},"value":"300e16"},"visibility":"internal"},{"constant":true,"id":9593,"mutability":"constant","name":"_MIN_INVARIANT_RATIO","nameLocation":"3192:20:52","nodeType":"VariableDeclaration","scope":9873,"src":"3166:54:52","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9591,"name":"uint256","nodeType":"ElementaryTypeName","src":"3166:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3730653136","id":9592,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3215:5:52","typeDescriptions":{"typeIdentifier":"t_rational_700000000000000000_by_1","typeString":"int_const 700000000000000000"},"value":"70e16"},"visibility":"internal"},{"body":{"id":9645,"nodeType":"Block","src":"4037:906:52","statements":[{"expression":{"id":9608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9605,"name":"invariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9603,"src":"4672:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":9606,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"4684:10:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$8208_$","typeString":"type(library FixedPoint)"}},"id":9607,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4695:3:52","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":7920,"src":"4684:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4672:26:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9609,"nodeType":"ExpressionStatement","src":"4672:26:52"},{"body":{"id":9635,"nodeType":"Block","src":"4763:97:52","statements":[{"expression":{"id":9633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9621,"name":"invariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9603,"src":"4777:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"baseExpression":{"id":9628,"name":"normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9597,"src":"4827:17:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":9630,"indexExpression":{"id":9629,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9611,"src":"4845:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4827:20:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":9624,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9600,"src":"4807:8:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":9626,"indexExpression":{"id":9625,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9611,"src":"4816:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4807:11:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9627,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4819:7:52","memberName":"powDown","nodeType":"MemberAccess","referencedDeclaration":8130,"src":"4807:19:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":9631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4807:41:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9622,"name":"invariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9603,"src":"4789:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4799:7:52","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":7953,"src":"4789:17:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":9632,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4789:60:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4777:72:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9634,"nodeType":"ExpressionStatement","src":"4777:72:52"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9617,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9614,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9611,"src":"4728:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":9615,"name":"normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9597,"src":"4732:17:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":9616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4750:6:52","memberName":"length","nodeType":"MemberAccess","src":"4732:24:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4728:28:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9636,"initializationExpression":{"assignments":[9611],"declarations":[{"constant":false,"id":9611,"mutability":"mutable","name":"i","nameLocation":"4721:1:52","nodeType":"VariableDeclaration","scope":9636,"src":"4713:9:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9610,"name":"uint256","nodeType":"ElementaryTypeName","src":"4713:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9613,"initialValue":{"hexValue":"30","id":9612,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4725:1:52","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4713:13:52"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":9619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"4758:3:52","subExpression":{"id":9618,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9611,"src":"4760:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9620,"nodeType":"ExpressionStatement","src":"4758:3:52"},"nodeType":"ForStatement","src":"4708:152:52"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9637,"name":"invariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9603,"src":"4874:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":9638,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4887:1:52","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4874:14:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9644,"nodeType":"IfStatement","src":"4870:67:52","trueBody":{"id":9643,"nodeType":"Block","src":"4890:47:52","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9640,"name":"ZeroInvariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9581,"src":"4911:13:52","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4911:15:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9642,"nodeType":"RevertStatement","src":"4904:22:52"}]}}]},"documentation":{"id":9594,"nodeType":"StructuredDocumentation","src":"3234:641:52","text":" @notice Compute the invariant, rounding down.\n @dev The invariant functions are called by the Vault during various liquidity operations, and require a specific\n rounding direction in order to ensure safety (i.e., that the final result is always rounded in favor of the\n protocol. The invariant (i.e., all token balances) must always be greater than 0, or it will revert.\n @param normalizedWeights The pool token weights, sorted in token registration order\n @param balances The pool token balances, sorted in token registration order\n @return invariant The invariant, rounded down"},"id":9646,"implemented":true,"kind":"function","modifiers":[],"name":"computeInvariantDown","nameLocation":"3889:20:52","nodeType":"FunctionDefinition","parameters":{"id":9601,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9597,"mutability":"mutable","name":"normalizedWeights","nameLocation":"3936:17:52","nodeType":"VariableDeclaration","scope":9646,"src":"3919:34:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":9595,"name":"uint256","nodeType":"ElementaryTypeName","src":"3919:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9596,"nodeType":"ArrayTypeName","src":"3919:9:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":9600,"mutability":"mutable","name":"balances","nameLocation":"3980:8:52","nodeType":"VariableDeclaration","scope":9646,"src":"3963:25:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":9598,"name":"uint256","nodeType":"ElementaryTypeName","src":"3963:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9599,"nodeType":"ArrayTypeName","src":"3963:9:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"3909:85:52"},"returnParameters":{"id":9604,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9603,"mutability":"mutable","name":"invariant","nameLocation":"4026:9:52","nodeType":"VariableDeclaration","scope":9646,"src":"4018:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9602,"name":"uint256","nodeType":"ElementaryTypeName","src":"4018:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4017:19:52"},"scope":9873,"src":"3880:1063:52","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9698,"nodeType":"Block","src":"5746:902:52","statements":[{"expression":{"id":9661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9658,"name":"invariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9656,"src":"6381:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":9659,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"6393:10:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$8208_$","typeString":"type(library FixedPoint)"}},"id":9660,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6404:3:52","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":7920,"src":"6393:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6381:26:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9662,"nodeType":"ExpressionStatement","src":"6381:26:52"},{"body":{"id":9688,"nodeType":"Block","src":"6472:93:52","statements":[{"expression":{"id":9686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":9674,"name":"invariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9656,"src":"6486:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"baseExpression":{"id":9681,"name":"normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9650,"src":"6532:17:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":9683,"indexExpression":{"id":9682,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9664,"src":"6550:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6532:20:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":9677,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9653,"src":"6514:8:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":9679,"indexExpression":{"id":9678,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9664,"src":"6523:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6514:11:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6526:5:52","memberName":"powUp","nodeType":"MemberAccess","referencedDeclaration":8197,"src":"6514:17:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":9684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6514:39:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9675,"name":"invariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9656,"src":"6498:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6508:5:52","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":7970,"src":"6498:15:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":9685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6498:56:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6486:68:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9687,"nodeType":"ExpressionStatement","src":"6486:68:52"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9667,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9664,"src":"6437:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":9668,"name":"normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9650,"src":"6441:17:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":9669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6459:6:52","memberName":"length","nodeType":"MemberAccess","src":"6441:24:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6437:28:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9689,"initializationExpression":{"assignments":[9664],"declarations":[{"constant":false,"id":9664,"mutability":"mutable","name":"i","nameLocation":"6430:1:52","nodeType":"VariableDeclaration","scope":9689,"src":"6422:9:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9663,"name":"uint256","nodeType":"ElementaryTypeName","src":"6422:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9666,"initialValue":{"hexValue":"30","id":9665,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6434:1:52","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6422:13:52"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":9672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"6467:3:52","subExpression":{"id":9671,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9664,"src":"6469:1:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9673,"nodeType":"ExpressionStatement","src":"6467:3:52"},"nodeType":"ForStatement","src":"6417:148:52"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9690,"name":"invariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9656,"src":"6579:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":9691,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6592:1:52","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6579:14:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9697,"nodeType":"IfStatement","src":"6575:67:52","trueBody":{"id":9696,"nodeType":"Block","src":"6595:47:52","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9693,"name":"ZeroInvariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9581,"src":"6616:13:52","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6616:15:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9695,"nodeType":"RevertStatement","src":"6609:22:52"}]}}]},"documentation":{"id":9647,"nodeType":"StructuredDocumentation","src":"4949:637:52","text":" @notice Compute the invariant, rounding up.\n @dev The invariant functions are called by the Vault during various liquidity operations, and require a specific\n rounding direction in order to ensure safety (i.e., that the final result is always rounded in favor of the\n protocol. The invariant (i.e., all token balances) must always be greater than 0, or it will revert.\n @param normalizedWeights The pool token weights, sorted in token registration order\n @param balances The pool token balances, sorted in token registration order\n @return invariant The invariant, rounded up"},"id":9699,"implemented":true,"kind":"function","modifiers":[],"name":"computeInvariantUp","nameLocation":"5600:18:52","nodeType":"FunctionDefinition","parameters":{"id":9654,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9650,"mutability":"mutable","name":"normalizedWeights","nameLocation":"5645:17:52","nodeType":"VariableDeclaration","scope":9699,"src":"5628:34:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":9648,"name":"uint256","nodeType":"ElementaryTypeName","src":"5628:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9649,"nodeType":"ArrayTypeName","src":"5628:9:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":9653,"mutability":"mutable","name":"balances","nameLocation":"5689:8:52","nodeType":"VariableDeclaration","scope":9699,"src":"5672:25:52","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":9651,"name":"uint256","nodeType":"ElementaryTypeName","src":"5672:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9652,"nodeType":"ArrayTypeName","src":"5672:9:52","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"5618:85:52"},"returnParameters":{"id":9657,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9656,"mutability":"mutable","name":"invariant","nameLocation":"5735:9:52","nodeType":"VariableDeclaration","scope":9699,"src":"5727:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9655,"name":"uint256","nodeType":"ElementaryTypeName","src":"5727:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5726:19:52"},"scope":9873,"src":"5591:1057:52","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9746,"nodeType":"Block","src":"7337:1736:52","statements":[{"assignments":[9720],"declarations":[{"constant":false,"id":9720,"mutability":"mutable","name":"divUpOrDown","nameLocation":"8731:11:52","nodeType":"VariableDeclaration","scope":9746,"src":"8672:70:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"},"typeName":{"id":9719,"nodeType":"FunctionTypeName","parameterTypes":{"id":9715,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9712,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9719,"src":"8681:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9711,"name":"uint256","nodeType":"ElementaryTypeName","src":"8681:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9714,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9719,"src":"8690:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9713,"name":"uint256","nodeType":"ElementaryTypeName","src":"8690:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8680:18:52"},"returnParameterTypes":{"id":9718,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9717,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9719,"src":"8722:7:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9716,"name":"uint256","nodeType":"ElementaryTypeName","src":"8722:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8721:9:52"},"src":"8672:70:52","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"},"visibility":"internal"},"visibility":"internal"}],"id":9729,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9721,"name":"invariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9706,"src":"8745:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"31","id":9722,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8762:1:52","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8745:18:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":9726,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"8809:10:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$8208_$","typeString":"type(library FixedPoint)"}},"id":9727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8820:7:52","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":7990,"src":"8809:18:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":9728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"8745:82:52","trueExpression":{"expression":{"id":9724,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"8778:10:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$8208_$","typeString":"type(library FixedPoint)"}},"id":9725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8789:5:52","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":8006,"src":"8778:16:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"nodeType":"VariableDeclarationStatement","src":"8672:155:52"},{"assignments":[9731],"declarations":[{"constant":false,"id":9731,"mutability":"mutable","name":"balanceRatio","nameLocation":"8942:12:52","nodeType":"VariableDeclaration","scope":9746,"src":"8934:20:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9730,"name":"uint256","nodeType":"ElementaryTypeName","src":"8934:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9740,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":9735,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"8990:10:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$8208_$","typeString":"type(library FixedPoint)"}},"id":9736,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9001:3:52","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":7920,"src":"8990:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":9737,"name":"weight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9704,"src":"9006:6:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9734,"name":"divUpOrDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9720,"src":"8978:11:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":9738,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8978:35:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9732,"name":"invariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9706,"src":"8957:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8972:5:52","memberName":"powUp","nodeType":"MemberAccess","referencedDeclaration":8197,"src":"8957:20:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":9739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8957:57:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8934:80:52"},{"expression":{"arguments":[{"id":9743,"name":"balanceRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9731,"src":"9053:12:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9741,"name":"currentBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9702,"src":"9032:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9047:5:52","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":7970,"src":"9032:20:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":9744,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9032:34:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9710,"id":9745,"nodeType":"Return","src":"9025:41:52"}]},"documentation":{"id":9700,"nodeType":"StructuredDocumentation","src":"6654:500:52","text":" @notice Compute a token balance after a liquidity operation, given the current balance and invariant ratio.\n @dev This is called as part of the \"inverse invariant\" `computeBalance` calculation.\n @param currentBalance The current balance of the token\n @param weight The weight of the token\n @param invariantRatio The invariant ratio (i.e., new/old; will be > 1 for add; < 1 for remove)\n @return newBalance The adjusted token balance after the operation"},"id":9747,"implemented":true,"kind":"function","modifiers":[],"name":"computeBalanceOutGivenInvariant","nameLocation":"7168:31:52","nodeType":"FunctionDefinition","parameters":{"id":9707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9702,"mutability":"mutable","name":"currentBalance","nameLocation":"7217:14:52","nodeType":"VariableDeclaration","scope":9747,"src":"7209:22:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9701,"name":"uint256","nodeType":"ElementaryTypeName","src":"7209:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9704,"mutability":"mutable","name":"weight","nameLocation":"7249:6:52","nodeType":"VariableDeclaration","scope":9747,"src":"7241:14:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9703,"name":"uint256","nodeType":"ElementaryTypeName","src":"7241:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9706,"mutability":"mutable","name":"invariantRatio","nameLocation":"7273:14:52","nodeType":"VariableDeclaration","scope":9747,"src":"7265:22:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9705,"name":"uint256","nodeType":"ElementaryTypeName","src":"7265:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7199:94:52"},"returnParameters":{"id":9710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9709,"mutability":"mutable","name":"newBalance","nameLocation":"7325:10:52","nodeType":"VariableDeclaration","scope":9747,"src":"7317:18:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9708,"name":"uint256","nodeType":"ElementaryTypeName","src":"7317:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7316:20:52"},"scope":9873,"src":"7159:1914:52","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9808,"nodeType":"Block","src":"9810:1680:52","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9763,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9758,"src":"11030:8:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[{"id":9766,"name":"_MAX_IN_RATIO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9584,"src":"11059:13:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9764,"name":"balanceIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9750,"src":"11041:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11051:7:52","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":7953,"src":"11041:17:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":9767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11041:32:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11030:43:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9773,"nodeType":"IfStatement","src":"11026:93:52","trueBody":{"id":9772,"nodeType":"Block","src":"11075:44:52","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9769,"name":"MaxInRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9578,"src":"11096:10:52","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9770,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11096:12:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9771,"nodeType":"RevertStatement","src":"11089:19:52"}]}},{"assignments":[9775],"declarations":[{"constant":false,"id":9775,"mutability":"mutable","name":"denominator","nameLocation":"11137:11:52","nodeType":"VariableDeclaration","scope":9808,"src":"11129:19:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9774,"name":"uint256","nodeType":"ElementaryTypeName","src":"11129:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9779,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9776,"name":"balanceIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9750,"src":"11151:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":9777,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9758,"src":"11163:8:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11151:20:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11129:42:52"},{"assignments":[9781],"declarations":[{"constant":false,"id":9781,"mutability":"mutable","name":"base","nameLocation":"11189:4:52","nodeType":"VariableDeclaration","scope":9808,"src":"11181:12:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9780,"name":"uint256","nodeType":"ElementaryTypeName","src":"11181:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9786,"initialValue":{"arguments":[{"id":9784,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9775,"src":"11212:11:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9782,"name":"balanceIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9750,"src":"11196:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11206:5:52","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":8006,"src":"11196:15:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":9785,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11196:28:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11181:43:52"},{"assignments":[9788],"declarations":[{"constant":false,"id":9788,"mutability":"mutable","name":"exponent","nameLocation":"11242:8:52","nodeType":"VariableDeclaration","scope":9808,"src":"11234:16:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9787,"name":"uint256","nodeType":"ElementaryTypeName","src":"11234:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9793,"initialValue":{"arguments":[{"id":9791,"name":"weightOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9756,"src":"11270:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9789,"name":"weightIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9752,"src":"11253:8:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11262:7:52","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":7990,"src":"11253:16:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":9792,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11253:27:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11234:46:52"},{"assignments":[9795],"declarations":[{"constant":false,"id":9795,"mutability":"mutable","name":"power","nameLocation":"11298:5:52","nodeType":"VariableDeclaration","scope":9808,"src":"11290:13:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9794,"name":"uint256","nodeType":"ElementaryTypeName","src":"11290:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9800,"initialValue":{"arguments":[{"id":9798,"name":"exponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9788,"src":"11317:8:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9796,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9781,"src":"11306:4:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11311:5:52","memberName":"powUp","nodeType":"MemberAccess","referencedDeclaration":8197,"src":"11306:10:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":9799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11306:20:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11290:36:52"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9803,"name":"power","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9795,"src":"11464:5:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11470:10:52","memberName":"complement","nodeType":"MemberAccess","referencedDeclaration":8207,"src":"11464:16:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":9805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11464:18:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9801,"name":"balanceOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9754,"src":"11445:10:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11456:7:52","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":7953,"src":"11445:18:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":9806,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11445:38:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9762,"id":9807,"nodeType":"Return","src":"11438:45:52"}]},"documentation":{"id":9748,"nodeType":"StructuredDocumentation","src":"9079:512:52","text":" @notice Compute the `amountOut` of tokenOut in a swap, given the current balances and weights.\n @param balanceIn The current balance of `tokenIn`\n @param weightIn The weight of `tokenIn`\n @param balanceOut The current balance of `tokenOut`\n @param weightOut The weight of `tokenOut`\n @param amountIn The exact amount of `tokenIn` (i.e., the amount given in an ExactIn swap)\n @return amountOut The calculated amount of `tokenOut` returned in an ExactIn swap"},"id":9809,"implemented":true,"kind":"function","modifiers":[],"name":"computeOutGivenExactIn","nameLocation":"9605:22:52","nodeType":"FunctionDefinition","parameters":{"id":9759,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9750,"mutability":"mutable","name":"balanceIn","nameLocation":"9645:9:52","nodeType":"VariableDeclaration","scope":9809,"src":"9637:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9749,"name":"uint256","nodeType":"ElementaryTypeName","src":"9637:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9752,"mutability":"mutable","name":"weightIn","nameLocation":"9672:8:52","nodeType":"VariableDeclaration","scope":9809,"src":"9664:16:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9751,"name":"uint256","nodeType":"ElementaryTypeName","src":"9664:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9754,"mutability":"mutable","name":"balanceOut","nameLocation":"9698:10:52","nodeType":"VariableDeclaration","scope":9809,"src":"9690:18:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9753,"name":"uint256","nodeType":"ElementaryTypeName","src":"9690:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9756,"mutability":"mutable","name":"weightOut","nameLocation":"9726:9:52","nodeType":"VariableDeclaration","scope":9809,"src":"9718:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9755,"name":"uint256","nodeType":"ElementaryTypeName","src":"9718:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9758,"mutability":"mutable","name":"amountIn","nameLocation":"9753:8:52","nodeType":"VariableDeclaration","scope":9809,"src":"9745:16:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9757,"name":"uint256","nodeType":"ElementaryTypeName","src":"9745:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9627:140:52"},"returnParameters":{"id":9762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9761,"mutability":"mutable","name":"amountOut","nameLocation":"9799:9:52","nodeType":"VariableDeclaration","scope":9809,"src":"9791:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9760,"name":"uint256","nodeType":"ElementaryTypeName","src":"9791:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9790:19:52"},"scope":9873,"src":"9596:1894:52","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9871,"nodeType":"Block","src":"12227:1734:52","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9825,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9820,"src":"13428:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[{"id":9828,"name":"_MAX_OUT_RATIO","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9587,"src":"13459:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9826,"name":"balanceOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9816,"src":"13440:10:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13451:7:52","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":7953,"src":"13440:18:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":9829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13440:34:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13428:46:52","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9835,"nodeType":"IfStatement","src":"13424:97:52","trueBody":{"id":9834,"nodeType":"Block","src":"13476:45:52","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9831,"name":"MaxOutRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9575,"src":"13497:11:52","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9832,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13497:13:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9833,"nodeType":"RevertStatement","src":"13490:20:52"}]}},{"assignments":[9837],"declarations":[{"constant":false,"id":9837,"mutability":"mutable","name":"base","nameLocation":"13539:4:52","nodeType":"VariableDeclaration","scope":9871,"src":"13531:12:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9836,"name":"uint256","nodeType":"ElementaryTypeName","src":"13531:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9844,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9840,"name":"balanceOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9816,"src":"13563:10:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":9841,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9820,"src":"13576:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13563:22:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9838,"name":"balanceOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9816,"src":"13546:10:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13557:5:52","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":8006,"src":"13546:16:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":9843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13546:40:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13531:55:52"},{"assignments":[9846],"declarations":[{"constant":false,"id":9846,"mutability":"mutable","name":"exponent","nameLocation":"13604:8:52","nodeType":"VariableDeclaration","scope":9871,"src":"13596:16:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9845,"name":"uint256","nodeType":"ElementaryTypeName","src":"13596:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9851,"initialValue":{"arguments":[{"id":9849,"name":"weightIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9814,"src":"13631:8:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9847,"name":"weightOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9818,"src":"13615:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13625:5:52","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":8006,"src":"13615:15:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":9850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13615:25:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13596:44:52"},{"assignments":[9853],"declarations":[{"constant":false,"id":9853,"mutability":"mutable","name":"power","nameLocation":"13658:5:52","nodeType":"VariableDeclaration","scope":9871,"src":"13650:13:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9852,"name":"uint256","nodeType":"ElementaryTypeName","src":"13650:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9858,"initialValue":{"arguments":[{"id":9856,"name":"exponent","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9846,"src":"13677:8:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9854,"name":"base","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9837,"src":"13666:4:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13671:5:52","memberName":"powUp","nodeType":"MemberAccess","referencedDeclaration":8197,"src":"13666:10:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":9857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13666:20:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13650:36:52"},{"assignments":[9860],"declarations":[{"constant":false,"id":9860,"mutability":"mutable","name":"ratio","nameLocation":"13884:5:52","nodeType":"VariableDeclaration","scope":9871,"src":"13876:13:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9859,"name":"uint256","nodeType":"ElementaryTypeName","src":"13876:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":9865,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":9861,"name":"power","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9853,"src":"13892:5:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":9862,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"13900:10:52","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$8208_$","typeString":"type(library FixedPoint)"}},"id":9863,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13911:3:52","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":7920,"src":"13900:14:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13892:22:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13876:38:52"},{"expression":{"arguments":[{"id":9868,"name":"ratio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9860,"src":"13948:5:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":9866,"name":"balanceIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9812,"src":"13932:9:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":9867,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13942:5:52","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":7970,"src":"13932:15:52","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":9869,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13932:22:52","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":9824,"id":9870,"nodeType":"Return","src":"13925:29:52"}]},"documentation":{"id":9810,"nodeType":"StructuredDocumentation","src":"11496:512:52","text":" @notice Compute the `amountIn` of tokenIn in a swap, given the current balances and weights.\n @param balanceIn The current balance of `tokenIn`\n @param weightIn The weight of `tokenIn`\n @param balanceOut The current balance of `tokenOut`\n @param weightOut The weight of `tokenOut`\n @param amountOut The exact amount of `tokenOut` (i.e., the amount given in an ExactOut swap)\n @return amountIn The calculated amount of `tokenIn` returned in an ExactOut swap"},"id":9872,"implemented":true,"kind":"function","modifiers":[],"name":"computeInGivenExactOut","nameLocation":"12022:22:52","nodeType":"FunctionDefinition","parameters":{"id":9821,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9812,"mutability":"mutable","name":"balanceIn","nameLocation":"12062:9:52","nodeType":"VariableDeclaration","scope":9872,"src":"12054:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9811,"name":"uint256","nodeType":"ElementaryTypeName","src":"12054:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9814,"mutability":"mutable","name":"weightIn","nameLocation":"12089:8:52","nodeType":"VariableDeclaration","scope":9872,"src":"12081:16:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9813,"name":"uint256","nodeType":"ElementaryTypeName","src":"12081:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9816,"mutability":"mutable","name":"balanceOut","nameLocation":"12115:10:52","nodeType":"VariableDeclaration","scope":9872,"src":"12107:18:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9815,"name":"uint256","nodeType":"ElementaryTypeName","src":"12107:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9818,"mutability":"mutable","name":"weightOut","nameLocation":"12143:9:52","nodeType":"VariableDeclaration","scope":9872,"src":"12135:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9817,"name":"uint256","nodeType":"ElementaryTypeName","src":"12135:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":9820,"mutability":"mutable","name":"amountOut","nameLocation":"12170:9:52","nodeType":"VariableDeclaration","scope":9872,"src":"12162:17:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9819,"name":"uint256","nodeType":"ElementaryTypeName","src":"12162:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12044:141:52"},"returnParameters":{"id":9824,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9823,"mutability":"mutable","name":"amountIn","nameLocation":"12217:8:52","nodeType":"VariableDeclaration","scope":9872,"src":"12209:16:52","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9822,"name":"uint256","nodeType":"ElementaryTypeName","src":"12209:7:52","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12208:18:52"},"scope":9873,"src":"12013:1948:52","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":9874,"src":"708:13255:52","usedErrors":[9575,9578,9581],"usedEvents":[]}],"src":"46:13918:52"},"id":52},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","exportedSymbols":{"ReentrancyGuardTransient":[9942],"StorageSlotExtension":[10285]},"id":9943,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9875,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:53"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","file":"./StorageSlotExtension.sol","id":9877,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":9943,"sourceUnit":10286,"src":"59:66:53","symbolAliases":[{"foreign":{"id":9876,"name":"StorageSlotExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10285,"src":"68:20:53","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[],"canonicalName":"ReentrancyGuardTransient","contractDependencies":[],"contractKind":"contract","documentation":{"id":9878,"nodeType":"StructuredDocumentation","src":"127:155:53","text":" @notice Variant of {ReentrancyGuard} that uses transient storage.\n @dev NOTE: This variant only works on networks where EIP-1153 is available."},"fullyImplemented":true,"id":9942,"linearizedBaseContracts":[9942],"name":"ReentrancyGuardTransient","nameLocation":"301:24:53","nodeType":"ContractDefinition","nodes":[{"global":false,"id":9880,"libraryName":{"id":9879,"name":"StorageSlotExtension","nameLocations":["338:20:53"],"nodeType":"IdentifierPath","referencedDeclaration":10285,"src":"338:20:53"},"nodeType":"UsingForDirective","src":"332:33:53"},{"constant":true,"id":9883,"mutability":"constant","name":"_REENTRANCY_GUARD_STORAGE","nameLocation":"515:25:53","nodeType":"VariableDeclaration","scope":9942,"src":"490:127:53","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9881,"name":"bytes32","nodeType":"ElementaryTypeName","src":"490:7:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307839623737396231373432326430646639323232333031386233326234643166613436653037313732336436383137653234383664303033626563633535663030","id":9882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"551:66:53","typeDescriptions":{"typeIdentifier":"t_rational_70319816728846589445362000750570655803700195216363692647688146666176345628416_by_1","typeString":"int_const 7031...(69 digits omitted)...8416"},"value":"0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00"},"visibility":"private"},{"documentation":{"id":9884,"nodeType":"StructuredDocumentation","src":"624:40:53","text":"@notice Unauthorized reentrant call."},"errorSelector":"3ee5aeb5","id":9886,"name":"ReentrancyGuardReentrantCall","nameLocation":"675:28:53","nodeType":"ErrorDefinition","parameters":{"id":9885,"nodeType":"ParameterList","parameters":[],"src":"703:2:53"},"src":"669:37:53"},{"body":{"id":9896,"nodeType":"Block","src":"1107:79:53","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":9889,"name":"_nonReentrantBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9916,"src":"1117:19:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":9890,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1117:21:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9891,"nodeType":"ExpressionStatement","src":"1117:21:53"},{"id":9892,"nodeType":"PlaceholderStatement","src":"1148:1:53"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":9893,"name":"_nonReentrantAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9928,"src":"1159:18:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":9894,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1159:20:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9895,"nodeType":"ExpressionStatement","src":"1159:20:53"}]},"documentation":{"id":9887,"nodeType":"StructuredDocumentation","src":"712:366:53","text":" @dev Prevents a contract from calling itself, directly or indirectly.\n Calling a `nonReentrant` function from another `nonReentrant`\n function is not supported. It is possible to prevent this from happening\n by making the `nonReentrant` function external, and making it call a\n `private` function that does the actual work."},"id":9897,"name":"nonReentrant","nameLocation":"1092:12:53","nodeType":"ModifierDefinition","parameters":{"id":9888,"nodeType":"ParameterList","parameters":[],"src":"1104:2:53"},"src":"1083:103:53","virtual":false,"visibility":"internal"},{"body":{"id":9915,"nodeType":"Block","src":"1231:310:53","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":9900,"name":"_reentrancyGuardEntered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9941,"src":"1320:23:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":9901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1320:25:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":9906,"nodeType":"IfStatement","src":"1316:93:53","trueBody":{"id":9905,"nodeType":"Block","src":"1347:62:53","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":9902,"name":"ReentrancyGuardReentrantCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9886,"src":"1368:28:53","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":9903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1368:30:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":9904,"nodeType":"RevertStatement","src":"1361:37:53"}]}},{"expression":{"arguments":[{"hexValue":"74727565","id":9912,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1529:4:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9907,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9883,"src":"1484:25:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":9909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1510:9:53","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":10123,"src":"1484:35:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$10108_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":9910,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1484:37:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":9911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1522:6:53","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":10218,"src":"1484:44:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$10108_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":9913,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1484:50:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9914,"nodeType":"ExpressionStatement","src":"1484:50:53"}]},"id":9916,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantBefore","nameLocation":"1201:19:53","nodeType":"FunctionDefinition","parameters":{"id":9898,"nodeType":"ParameterList","parameters":[],"src":"1220:2:53"},"returnParameters":{"id":9899,"nodeType":"ParameterList","parameters":[],"src":"1231:0:53"},"scope":9942,"src":"1192:349:53","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":9927,"nodeType":"Block","src":"1585:68:53","statements":[{"expression":{"arguments":[{"hexValue":"66616c7365","id":9924,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1640:5:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9919,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9883,"src":"1595:25:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":9921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1621:9:53","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":10123,"src":"1595:35:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$10108_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":9922,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1595:37:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":9923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1633:6:53","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":10218,"src":"1595:44:53","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$10108_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":9925,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1595:51:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":9926,"nodeType":"ExpressionStatement","src":"1595:51:53"}]},"id":9928,"implemented":true,"kind":"function","modifiers":[],"name":"_nonReentrantAfter","nameLocation":"1556:18:53","nodeType":"FunctionDefinition","parameters":{"id":9917,"nodeType":"ParameterList","parameters":[],"src":"1574:2:53"},"returnParameters":{"id":9918,"nodeType":"ParameterList","parameters":[],"src":"1585:0:53"},"scope":9942,"src":"1547:106:53","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":9940,"nodeType":"Block","src":"1896:69:53","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":9934,"name":"_REENTRANCY_GUARD_STORAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9883,"src":"1913:25:53","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":9935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1939:9:53","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":10123,"src":"1913:35:53","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$10108_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":9936,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1913:37:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":9937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1951:5:53","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":10207,"src":"1913:43:53","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_BooleanSlotType_$10108_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function (StorageSlotExtension.BooleanSlotType) view returns (bool)"}},"id":9938,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1913:45:53","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":9933,"id":9939,"nodeType":"Return","src":"1906:52:53"}]},"documentation":{"id":9929,"nodeType":"StructuredDocumentation","src":"1659:168:53","text":" @dev Returns true if the reentrancy guard is currently set to \"entered\", which indicates there is a\n `nonReentrant` function in the call stack."},"id":9941,"implemented":true,"kind":"function","modifiers":[],"name":"_reentrancyGuardEntered","nameLocation":"1841:23:53","nodeType":"FunctionDefinition","parameters":{"id":9930,"nodeType":"ParameterList","parameters":[],"src":"1864:2:53"},"returnParameters":{"id":9933,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9932,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":9941,"src":"1890:4:53","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":9931,"name":"bool","nodeType":"ElementaryTypeName","src":"1890:4:53","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1889:6:53"},"scope":9942,"src":"1832:133:53","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":9943,"src":"283:1684:53","usedErrors":[9886],"usedEvents":[]}],"src":"33:1935:53"},"id":53},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol","exportedSymbols":{"SlotDerivation":[10072]},"id":10073,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":9944,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"277:24:54"},{"abstract":false,"baseContracts":[],"canonicalName":"SlotDerivation","contractDependencies":[],"contractKind":"library","documentation":{"id":9945,"nodeType":"StructuredDocumentation","src":"303:1348:54","text":" @notice Library for computing storage (and transient storage) locations from namespaces and deriving slots\n corresponding to standard patterns.\n @dev The derivation method for array and mapping matches the storage layout used by the solidity language/compiler.\n See https://docs.soliditylang.org/en/v0.8.20/internals/layout_in_storage.html#mappings-and-dynamic-arrays[Solidity docs for mappings and dynamic arrays.].\n Example usage:\n ```solidity\n contract Example {\n // Add the library methods\n using StorageSlot for bytes32;\n using SlotDerivation for bytes32;\n // Declare a namespace\n string private constant _NAMESPACE = \"\" // eg. OpenZeppelin.Slot\n function setValueInNamespace(uint256 key, address newValue) internal {\n _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value = newValue;\n }\n function getValueInNamespace(uint256 key) internal view returns (address) {\n return _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value;\n }\n }\n ```\n TIP: Consider using this library along with {StorageSlot}.\n NOTE: This library provides a way to manipulate storage locations in a non-standard way. Tooling for checking\n upgrade safety will ignore the slots accessed through this library."},"fullyImplemented":true,"id":10072,"linearizedBaseContracts":[10072],"name":"SlotDerivation","nameLocation":"1660:14:54","nodeType":"ContractDefinition","nodes":[{"body":{"id":9954,"nodeType":"Block","src":"1828:221:54","statements":[{"AST":{"nativeSrc":"1890:153:54","nodeType":"YulBlock","src":"1890:153:54","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1911:4:54","nodeType":"YulLiteral","src":"1911:4:54","type":"","value":"0x00"},{"arguments":[{"arguments":[{"arguments":[{"name":"namespace","nativeSrc":"1935:9:54","nodeType":"YulIdentifier","src":"1935:9:54"},{"kind":"number","nativeSrc":"1946:4:54","nodeType":"YulLiteral","src":"1946:4:54","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1931:3:54","nodeType":"YulIdentifier","src":"1931:3:54"},"nativeSrc":"1931:20:54","nodeType":"YulFunctionCall","src":"1931:20:54"},{"arguments":[{"name":"namespace","nativeSrc":"1959:9:54","nodeType":"YulIdentifier","src":"1959:9:54"}],"functionName":{"name":"mload","nativeSrc":"1953:5:54","nodeType":"YulIdentifier","src":"1953:5:54"},"nativeSrc":"1953:16:54","nodeType":"YulFunctionCall","src":"1953:16:54"}],"functionName":{"name":"keccak256","nativeSrc":"1921:9:54","nodeType":"YulIdentifier","src":"1921:9:54"},"nativeSrc":"1921:49:54","nodeType":"YulFunctionCall","src":"1921:49:54"},{"kind":"number","nativeSrc":"1972:1:54","nodeType":"YulLiteral","src":"1972:1:54","type":"","value":"1"}],"functionName":{"name":"sub","nativeSrc":"1917:3:54","nodeType":"YulIdentifier","src":"1917:3:54"},"nativeSrc":"1917:57:54","nodeType":"YulFunctionCall","src":"1917:57:54"}],"functionName":{"name":"mstore","nativeSrc":"1904:6:54","nodeType":"YulIdentifier","src":"1904:6:54"},"nativeSrc":"1904:71:54","nodeType":"YulFunctionCall","src":"1904:71:54"},"nativeSrc":"1904:71:54","nodeType":"YulExpressionStatement","src":"1904:71:54"},{"nativeSrc":"1988:45:54","nodeType":"YulAssignment","src":"1988:45:54","value":{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"2010:4:54","nodeType":"YulLiteral","src":"2010:4:54","type":"","value":"0x00"},{"kind":"number","nativeSrc":"2016:4:54","nodeType":"YulLiteral","src":"2016:4:54","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nativeSrc":"2000:9:54","nodeType":"YulIdentifier","src":"2000:9:54"},"nativeSrc":"2000:21:54","nodeType":"YulFunctionCall","src":"2000:21:54"},{"arguments":[{"kind":"number","nativeSrc":"2027:4:54","nodeType":"YulLiteral","src":"2027:4:54","type":"","value":"0xff"}],"functionName":{"name":"not","nativeSrc":"2023:3:54","nodeType":"YulIdentifier","src":"2023:3:54"},"nativeSrc":"2023:9:54","nodeType":"YulFunctionCall","src":"2023:9:54"}],"functionName":{"name":"and","nativeSrc":"1996:3:54","nodeType":"YulIdentifier","src":"1996:3:54"},"nativeSrc":"1996:37:54","nodeType":"YulFunctionCall","src":"1996:37:54"},"variableNames":[{"name":"slot","nativeSrc":"1988:4:54","nodeType":"YulIdentifier","src":"1988:4:54"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":9948,"isOffset":false,"isSlot":false,"src":"1935:9:54","valueSize":1},{"declaration":9948,"isOffset":false,"isSlot":false,"src":"1959:9:54","valueSize":1},{"declaration":9951,"isOffset":false,"isSlot":false,"src":"1988:4:54","valueSize":1}],"id":9953,"nodeType":"InlineAssembly","src":"1881:162:54"}]},"documentation":{"id":9946,"nodeType":"StructuredDocumentation","src":"1681:59:54","text":"@dev Derive an ERC-7201 slot from a string (namespace)."},"id":9955,"implemented":true,"kind":"function","modifiers":[],"name":"erc7201Slot","nameLocation":"1754:11:54","nodeType":"FunctionDefinition","parameters":{"id":9949,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9948,"mutability":"mutable","name":"namespace","nameLocation":"1780:9:54","nodeType":"VariableDeclaration","scope":9955,"src":"1766:23:54","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":9947,"name":"string","nodeType":"ElementaryTypeName","src":"1766:6:54","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1765:25:54"},"returnParameters":{"id":9952,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9951,"mutability":"mutable","name":"slot","nameLocation":"1822:4:54","nodeType":"VariableDeclaration","scope":9955,"src":"1814:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9950,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1814:7:54","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1813:14:54"},"scope":10072,"src":"1745:304:54","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9976,"nodeType":"Block","src":"2226:86:54","statements":[{"id":9975,"nodeType":"UncheckedBlock","src":"2236:70:54","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":9972,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":9969,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9958,"src":"2283:4:54","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":9968,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2275:7:54","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":9967,"name":"uint256","nodeType":"ElementaryTypeName","src":"2275:7:54","typeDescriptions":{}}},"id":9970,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2275:13:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":9971,"name":"pos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9960,"src":"2291:3:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2275:19:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":9966,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2267:7:54","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":9965,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2267:7:54","typeDescriptions":{}}},"id":9973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2267:28:54","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":9964,"id":9974,"nodeType":"Return","src":"2260:35:54"}]}]},"documentation":{"id":9956,"nodeType":"StructuredDocumentation","src":"2055:84:54","text":"@dev Add an offset to a slot to get the n-th element of a structure or an array."},"id":9977,"implemented":true,"kind":"function","modifiers":[],"name":"offset","nameLocation":"2153:6:54","nodeType":"FunctionDefinition","parameters":{"id":9961,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9958,"mutability":"mutable","name":"slot","nameLocation":"2168:4:54","nodeType":"VariableDeclaration","scope":9977,"src":"2160:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9957,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2160:7:54","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":9960,"mutability":"mutable","name":"pos","nameLocation":"2182:3:54","nodeType":"VariableDeclaration","scope":9977,"src":"2174:11:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":9959,"name":"uint256","nodeType":"ElementaryTypeName","src":"2174:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2159:27:54"},"returnParameters":{"id":9964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9963,"mutability":"mutable","name":"result","nameLocation":"2218:6:54","nodeType":"VariableDeclaration","scope":9977,"src":"2210:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9962,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2210:7:54","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2209:16:54"},"scope":10072,"src":"2144:168:54","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9986,"nodeType":"Block","src":"2500:154:54","statements":[{"AST":{"nativeSrc":"2562:86:54","nodeType":"YulBlock","src":"2562:86:54","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2583:4:54","nodeType":"YulLiteral","src":"2583:4:54","type":"","value":"0x00"},{"name":"slot","nativeSrc":"2589:4:54","nodeType":"YulIdentifier","src":"2589:4:54"}],"functionName":{"name":"mstore","nativeSrc":"2576:6:54","nodeType":"YulIdentifier","src":"2576:6:54"},"nativeSrc":"2576:18:54","nodeType":"YulFunctionCall","src":"2576:18:54"},"nativeSrc":"2576:18:54","nodeType":"YulExpressionStatement","src":"2576:18:54"},{"nativeSrc":"2607:31:54","nodeType":"YulAssignment","src":"2607:31:54","value":{"arguments":[{"kind":"number","nativeSrc":"2627:4:54","nodeType":"YulLiteral","src":"2627:4:54","type":"","value":"0x00"},{"kind":"number","nativeSrc":"2633:4:54","nodeType":"YulLiteral","src":"2633:4:54","type":"","value":"0x20"}],"functionName":{"name":"keccak256","nativeSrc":"2617:9:54","nodeType":"YulIdentifier","src":"2617:9:54"},"nativeSrc":"2617:21:54","nodeType":"YulFunctionCall","src":"2617:21:54"},"variableNames":[{"name":"result","nativeSrc":"2607:6:54","nodeType":"YulIdentifier","src":"2607:6:54"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":9983,"isOffset":false,"isSlot":false,"src":"2607:6:54","valueSize":1},{"declaration":9980,"isOffset":false,"isSlot":false,"src":"2589:4:54","valueSize":1}],"id":9985,"nodeType":"InlineAssembly","src":"2553:95:54"}]},"documentation":{"id":9978,"nodeType":"StructuredDocumentation","src":"2318:103:54","text":"@dev Derive the location of the first element in an array from the slot where the length is stored."},"id":9987,"implemented":true,"kind":"function","modifiers":[],"name":"deriveArray","nameLocation":"2435:11:54","nodeType":"FunctionDefinition","parameters":{"id":9981,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9980,"mutability":"mutable","name":"slot","nameLocation":"2455:4:54","nodeType":"VariableDeclaration","scope":9987,"src":"2447:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9979,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2447:7:54","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2446:14:54"},"returnParameters":{"id":9984,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9983,"mutability":"mutable","name":"result","nameLocation":"2492:6:54","nodeType":"VariableDeclaration","scope":9987,"src":"2484:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9982,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2484:7:54","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2483:16:54"},"scope":10072,"src":"2426:228:54","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":9998,"nodeType":"Block","src":"2817:184:54","statements":[{"AST":{"nativeSrc":"2879:116:54","nodeType":"YulBlock","src":"2879:116:54","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"2900:4:54","nodeType":"YulLiteral","src":"2900:4:54","type":"","value":"0x00"},{"name":"key","nativeSrc":"2906:3:54","nodeType":"YulIdentifier","src":"2906:3:54"}],"functionName":{"name":"mstore","nativeSrc":"2893:6:54","nodeType":"YulIdentifier","src":"2893:6:54"},"nativeSrc":"2893:17:54","nodeType":"YulFunctionCall","src":"2893:17:54"},"nativeSrc":"2893:17:54","nodeType":"YulExpressionStatement","src":"2893:17:54"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"2930:4:54","nodeType":"YulLiteral","src":"2930:4:54","type":"","value":"0x20"},{"name":"slot","nativeSrc":"2936:4:54","nodeType":"YulIdentifier","src":"2936:4:54"}],"functionName":{"name":"mstore","nativeSrc":"2923:6:54","nodeType":"YulIdentifier","src":"2923:6:54"},"nativeSrc":"2923:18:54","nodeType":"YulFunctionCall","src":"2923:18:54"},"nativeSrc":"2923:18:54","nodeType":"YulExpressionStatement","src":"2923:18:54"},{"nativeSrc":"2954:31:54","nodeType":"YulAssignment","src":"2954:31:54","value":{"arguments":[{"kind":"number","nativeSrc":"2974:4:54","nodeType":"YulLiteral","src":"2974:4:54","type":"","value":"0x00"},{"kind":"number","nativeSrc":"2980:4:54","nodeType":"YulLiteral","src":"2980:4:54","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nativeSrc":"2964:9:54","nodeType":"YulIdentifier","src":"2964:9:54"},"nativeSrc":"2964:21:54","nodeType":"YulFunctionCall","src":"2964:21:54"},"variableNames":[{"name":"result","nativeSrc":"2954:6:54","nodeType":"YulIdentifier","src":"2954:6:54"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":9992,"isOffset":false,"isSlot":false,"src":"2906:3:54","valueSize":1},{"declaration":9995,"isOffset":false,"isSlot":false,"src":"2954:6:54","valueSize":1},{"declaration":9990,"isOffset":false,"isSlot":false,"src":"2936:4:54","valueSize":1}],"id":9997,"nodeType":"InlineAssembly","src":"2870:125:54"}]},"documentation":{"id":9988,"nodeType":"StructuredDocumentation","src":"2660:63:54","text":"@dev Derive the location of a mapping element from the key."},"id":9999,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"2737:13:54","nodeType":"FunctionDefinition","parameters":{"id":9993,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9990,"mutability":"mutable","name":"slot","nameLocation":"2759:4:54","nodeType":"VariableDeclaration","scope":9999,"src":"2751:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9989,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2751:7:54","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":9992,"mutability":"mutable","name":"key","nameLocation":"2773:3:54","nodeType":"VariableDeclaration","scope":9999,"src":"2765:11:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":9991,"name":"address","nodeType":"ElementaryTypeName","src":"2765:7:54","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2750:27:54"},"returnParameters":{"id":9996,"nodeType":"ParameterList","parameters":[{"constant":false,"id":9995,"mutability":"mutable","name":"result","nameLocation":"2809:6:54","nodeType":"VariableDeclaration","scope":9999,"src":"2801:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":9994,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2801:7:54","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2800:16:54"},"scope":10072,"src":"2728:273:54","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10010,"nodeType":"Block","src":"3161:184:54","statements":[{"AST":{"nativeSrc":"3223:116:54","nodeType":"YulBlock","src":"3223:116:54","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3244:4:54","nodeType":"YulLiteral","src":"3244:4:54","type":"","value":"0x00"},{"name":"key","nativeSrc":"3250:3:54","nodeType":"YulIdentifier","src":"3250:3:54"}],"functionName":{"name":"mstore","nativeSrc":"3237:6:54","nodeType":"YulIdentifier","src":"3237:6:54"},"nativeSrc":"3237:17:54","nodeType":"YulFunctionCall","src":"3237:17:54"},"nativeSrc":"3237:17:54","nodeType":"YulExpressionStatement","src":"3237:17:54"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"3274:4:54","nodeType":"YulLiteral","src":"3274:4:54","type":"","value":"0x20"},{"name":"slot","nativeSrc":"3280:4:54","nodeType":"YulIdentifier","src":"3280:4:54"}],"functionName":{"name":"mstore","nativeSrc":"3267:6:54","nodeType":"YulIdentifier","src":"3267:6:54"},"nativeSrc":"3267:18:54","nodeType":"YulFunctionCall","src":"3267:18:54"},"nativeSrc":"3267:18:54","nodeType":"YulExpressionStatement","src":"3267:18:54"},{"nativeSrc":"3298:31:54","nodeType":"YulAssignment","src":"3298:31:54","value":{"arguments":[{"kind":"number","nativeSrc":"3318:4:54","nodeType":"YulLiteral","src":"3318:4:54","type":"","value":"0x00"},{"kind":"number","nativeSrc":"3324:4:54","nodeType":"YulLiteral","src":"3324:4:54","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nativeSrc":"3308:9:54","nodeType":"YulIdentifier","src":"3308:9:54"},"nativeSrc":"3308:21:54","nodeType":"YulFunctionCall","src":"3308:21:54"},"variableNames":[{"name":"result","nativeSrc":"3298:6:54","nodeType":"YulIdentifier","src":"3298:6:54"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":10004,"isOffset":false,"isSlot":false,"src":"3250:3:54","valueSize":1},{"declaration":10007,"isOffset":false,"isSlot":false,"src":"3298:6:54","valueSize":1},{"declaration":10002,"isOffset":false,"isSlot":false,"src":"3280:4:54","valueSize":1}],"id":10009,"nodeType":"InlineAssembly","src":"3214:125:54"}]},"documentation":{"id":10000,"nodeType":"StructuredDocumentation","src":"3007:63:54","text":"@dev Derive the location of a mapping element from the key."},"id":10011,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"3084:13:54","nodeType":"FunctionDefinition","parameters":{"id":10005,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10002,"mutability":"mutable","name":"slot","nameLocation":"3106:4:54","nodeType":"VariableDeclaration","scope":10011,"src":"3098:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10001,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3098:7:54","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":10004,"mutability":"mutable","name":"key","nameLocation":"3117:3:54","nodeType":"VariableDeclaration","scope":10011,"src":"3112:8:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10003,"name":"bool","nodeType":"ElementaryTypeName","src":"3112:4:54","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3097:24:54"},"returnParameters":{"id":10008,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10007,"mutability":"mutable","name":"result","nameLocation":"3153:6:54","nodeType":"VariableDeclaration","scope":10011,"src":"3145:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10006,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3145:7:54","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3144:16:54"},"scope":10072,"src":"3075:270:54","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10022,"nodeType":"Block","src":"3508:184:54","statements":[{"AST":{"nativeSrc":"3570:116:54","nodeType":"YulBlock","src":"3570:116:54","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3591:4:54","nodeType":"YulLiteral","src":"3591:4:54","type":"","value":"0x00"},{"name":"key","nativeSrc":"3597:3:54","nodeType":"YulIdentifier","src":"3597:3:54"}],"functionName":{"name":"mstore","nativeSrc":"3584:6:54","nodeType":"YulIdentifier","src":"3584:6:54"},"nativeSrc":"3584:17:54","nodeType":"YulFunctionCall","src":"3584:17:54"},"nativeSrc":"3584:17:54","nodeType":"YulExpressionStatement","src":"3584:17:54"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"3621:4:54","nodeType":"YulLiteral","src":"3621:4:54","type":"","value":"0x20"},{"name":"slot","nativeSrc":"3627:4:54","nodeType":"YulIdentifier","src":"3627:4:54"}],"functionName":{"name":"mstore","nativeSrc":"3614:6:54","nodeType":"YulIdentifier","src":"3614:6:54"},"nativeSrc":"3614:18:54","nodeType":"YulFunctionCall","src":"3614:18:54"},"nativeSrc":"3614:18:54","nodeType":"YulExpressionStatement","src":"3614:18:54"},{"nativeSrc":"3645:31:54","nodeType":"YulAssignment","src":"3645:31:54","value":{"arguments":[{"kind":"number","nativeSrc":"3665:4:54","nodeType":"YulLiteral","src":"3665:4:54","type":"","value":"0x00"},{"kind":"number","nativeSrc":"3671:4:54","nodeType":"YulLiteral","src":"3671:4:54","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nativeSrc":"3655:9:54","nodeType":"YulIdentifier","src":"3655:9:54"},"nativeSrc":"3655:21:54","nodeType":"YulFunctionCall","src":"3655:21:54"},"variableNames":[{"name":"result","nativeSrc":"3645:6:54","nodeType":"YulIdentifier","src":"3645:6:54"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":10016,"isOffset":false,"isSlot":false,"src":"3597:3:54","valueSize":1},{"declaration":10019,"isOffset":false,"isSlot":false,"src":"3645:6:54","valueSize":1},{"declaration":10014,"isOffset":false,"isSlot":false,"src":"3627:4:54","valueSize":1}],"id":10021,"nodeType":"InlineAssembly","src":"3561:125:54"}]},"documentation":{"id":10012,"nodeType":"StructuredDocumentation","src":"3351:63:54","text":"@dev Derive the location of a mapping element from the key."},"id":10023,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"3428:13:54","nodeType":"FunctionDefinition","parameters":{"id":10017,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10014,"mutability":"mutable","name":"slot","nameLocation":"3450:4:54","nodeType":"VariableDeclaration","scope":10023,"src":"3442:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10013,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3442:7:54","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":10016,"mutability":"mutable","name":"key","nameLocation":"3464:3:54","nodeType":"VariableDeclaration","scope":10023,"src":"3456:11:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10015,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3456:7:54","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3441:27:54"},"returnParameters":{"id":10020,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10019,"mutability":"mutable","name":"result","nameLocation":"3500:6:54","nodeType":"VariableDeclaration","scope":10023,"src":"3492:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10018,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3492:7:54","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3491:16:54"},"scope":10072,"src":"3419:273:54","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10034,"nodeType":"Block","src":"3855:184:54","statements":[{"AST":{"nativeSrc":"3917:116:54","nodeType":"YulBlock","src":"3917:116:54","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"3938:4:54","nodeType":"YulLiteral","src":"3938:4:54","type":"","value":"0x00"},{"name":"key","nativeSrc":"3944:3:54","nodeType":"YulIdentifier","src":"3944:3:54"}],"functionName":{"name":"mstore","nativeSrc":"3931:6:54","nodeType":"YulIdentifier","src":"3931:6:54"},"nativeSrc":"3931:17:54","nodeType":"YulFunctionCall","src":"3931:17:54"},"nativeSrc":"3931:17:54","nodeType":"YulExpressionStatement","src":"3931:17:54"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"3968:4:54","nodeType":"YulLiteral","src":"3968:4:54","type":"","value":"0x20"},{"name":"slot","nativeSrc":"3974:4:54","nodeType":"YulIdentifier","src":"3974:4:54"}],"functionName":{"name":"mstore","nativeSrc":"3961:6:54","nodeType":"YulIdentifier","src":"3961:6:54"},"nativeSrc":"3961:18:54","nodeType":"YulFunctionCall","src":"3961:18:54"},"nativeSrc":"3961:18:54","nodeType":"YulExpressionStatement","src":"3961:18:54"},{"nativeSrc":"3992:31:54","nodeType":"YulAssignment","src":"3992:31:54","value":{"arguments":[{"kind":"number","nativeSrc":"4012:4:54","nodeType":"YulLiteral","src":"4012:4:54","type":"","value":"0x00"},{"kind":"number","nativeSrc":"4018:4:54","nodeType":"YulLiteral","src":"4018:4:54","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nativeSrc":"4002:9:54","nodeType":"YulIdentifier","src":"4002:9:54"},"nativeSrc":"4002:21:54","nodeType":"YulFunctionCall","src":"4002:21:54"},"variableNames":[{"name":"result","nativeSrc":"3992:6:54","nodeType":"YulIdentifier","src":"3992:6:54"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":10028,"isOffset":false,"isSlot":false,"src":"3944:3:54","valueSize":1},{"declaration":10031,"isOffset":false,"isSlot":false,"src":"3992:6:54","valueSize":1},{"declaration":10026,"isOffset":false,"isSlot":false,"src":"3974:4:54","valueSize":1}],"id":10033,"nodeType":"InlineAssembly","src":"3908:125:54"}]},"documentation":{"id":10024,"nodeType":"StructuredDocumentation","src":"3698:63:54","text":"@dev Derive the location of a mapping element from the key."},"id":10035,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"3775:13:54","nodeType":"FunctionDefinition","parameters":{"id":10029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10026,"mutability":"mutable","name":"slot","nameLocation":"3797:4:54","nodeType":"VariableDeclaration","scope":10035,"src":"3789:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10025,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3789:7:54","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":10028,"mutability":"mutable","name":"key","nameLocation":"3811:3:54","nodeType":"VariableDeclaration","scope":10035,"src":"3803:11:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10027,"name":"uint256","nodeType":"ElementaryTypeName","src":"3803:7:54","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3788:27:54"},"returnParameters":{"id":10032,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10031,"mutability":"mutable","name":"result","nameLocation":"3847:6:54","nodeType":"VariableDeclaration","scope":10035,"src":"3839:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10030,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3839:7:54","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3838:16:54"},"scope":10072,"src":"3766:273:54","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10046,"nodeType":"Block","src":"4201:184:54","statements":[{"AST":{"nativeSrc":"4263:116:54","nodeType":"YulBlock","src":"4263:116:54","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"4284:4:54","nodeType":"YulLiteral","src":"4284:4:54","type":"","value":"0x00"},{"name":"key","nativeSrc":"4290:3:54","nodeType":"YulIdentifier","src":"4290:3:54"}],"functionName":{"name":"mstore","nativeSrc":"4277:6:54","nodeType":"YulIdentifier","src":"4277:6:54"},"nativeSrc":"4277:17:54","nodeType":"YulFunctionCall","src":"4277:17:54"},"nativeSrc":"4277:17:54","nodeType":"YulExpressionStatement","src":"4277:17:54"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"4314:4:54","nodeType":"YulLiteral","src":"4314:4:54","type":"","value":"0x20"},{"name":"slot","nativeSrc":"4320:4:54","nodeType":"YulIdentifier","src":"4320:4:54"}],"functionName":{"name":"mstore","nativeSrc":"4307:6:54","nodeType":"YulIdentifier","src":"4307:6:54"},"nativeSrc":"4307:18:54","nodeType":"YulFunctionCall","src":"4307:18:54"},"nativeSrc":"4307:18:54","nodeType":"YulExpressionStatement","src":"4307:18:54"},{"nativeSrc":"4338:31:54","nodeType":"YulAssignment","src":"4338:31:54","value":{"arguments":[{"kind":"number","nativeSrc":"4358:4:54","nodeType":"YulLiteral","src":"4358:4:54","type":"","value":"0x00"},{"kind":"number","nativeSrc":"4364:4:54","nodeType":"YulLiteral","src":"4364:4:54","type":"","value":"0x40"}],"functionName":{"name":"keccak256","nativeSrc":"4348:9:54","nodeType":"YulIdentifier","src":"4348:9:54"},"nativeSrc":"4348:21:54","nodeType":"YulFunctionCall","src":"4348:21:54"},"variableNames":[{"name":"result","nativeSrc":"4338:6:54","nodeType":"YulIdentifier","src":"4338:6:54"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":10040,"isOffset":false,"isSlot":false,"src":"4290:3:54","valueSize":1},{"declaration":10043,"isOffset":false,"isSlot":false,"src":"4338:6:54","valueSize":1},{"declaration":10038,"isOffset":false,"isSlot":false,"src":"4320:4:54","valueSize":1}],"id":10045,"nodeType":"InlineAssembly","src":"4254:125:54"}]},"documentation":{"id":10036,"nodeType":"StructuredDocumentation","src":"4045:63:54","text":"@dev Derive the location of a mapping element from the key."},"id":10047,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"4122:13:54","nodeType":"FunctionDefinition","parameters":{"id":10041,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10038,"mutability":"mutable","name":"slot","nameLocation":"4144:4:54","nodeType":"VariableDeclaration","scope":10047,"src":"4136:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10037,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4136:7:54","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":10040,"mutability":"mutable","name":"key","nameLocation":"4157:3:54","nodeType":"VariableDeclaration","scope":10047,"src":"4150:10:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":10039,"name":"int256","nodeType":"ElementaryTypeName","src":"4150:6:54","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4135:26:54"},"returnParameters":{"id":10044,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10043,"mutability":"mutable","name":"result","nameLocation":"4193:6:54","nodeType":"VariableDeclaration","scope":10047,"src":"4185:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10042,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4185:7:54","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4184:16:54"},"scope":10072,"src":"4113:272:54","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10058,"nodeType":"Block","src":"4554:353:54","statements":[{"AST":{"nativeSrc":"4616:285:54","nodeType":"YulBlock","src":"4616:285:54","statements":[{"nativeSrc":"4630:24:54","nodeType":"YulVariableDeclaration","src":"4630:24:54","value":{"arguments":[{"name":"key","nativeSrc":"4650:3:54","nodeType":"YulIdentifier","src":"4650:3:54"}],"functionName":{"name":"mload","nativeSrc":"4644:5:54","nodeType":"YulIdentifier","src":"4644:5:54"},"nativeSrc":"4644:10:54","nodeType":"YulFunctionCall","src":"4644:10:54"},"variables":[{"name":"length","nativeSrc":"4634:6:54","nodeType":"YulTypedName","src":"4634:6:54","type":""}]},{"nativeSrc":"4667:27:54","nodeType":"YulVariableDeclaration","src":"4667:27:54","value":{"arguments":[{"name":"key","nativeSrc":"4684:3:54","nodeType":"YulIdentifier","src":"4684:3:54"},{"kind":"number","nativeSrc":"4689:4:54","nodeType":"YulLiteral","src":"4689:4:54","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"4680:3:54","nodeType":"YulIdentifier","src":"4680:3:54"},"nativeSrc":"4680:14:54","nodeType":"YulFunctionCall","src":"4680:14:54"},"variables":[{"name":"begin","nativeSrc":"4671:5:54","nodeType":"YulTypedName","src":"4671:5:54","type":""}]},{"nativeSrc":"4707:29:54","nodeType":"YulVariableDeclaration","src":"4707:29:54","value":{"arguments":[{"name":"begin","nativeSrc":"4722:5:54","nodeType":"YulIdentifier","src":"4722:5:54"},{"name":"length","nativeSrc":"4729:6:54","nodeType":"YulIdentifier","src":"4729:6:54"}],"functionName":{"name":"add","nativeSrc":"4718:3:54","nodeType":"YulIdentifier","src":"4718:3:54"},"nativeSrc":"4718:18:54","nodeType":"YulFunctionCall","src":"4718:18:54"},"variables":[{"name":"end","nativeSrc":"4711:3:54","nodeType":"YulTypedName","src":"4711:3:54","type":""}]},{"nativeSrc":"4749:23:54","nodeType":"YulVariableDeclaration","src":"4749:23:54","value":{"arguments":[{"name":"end","nativeSrc":"4768:3:54","nodeType":"YulIdentifier","src":"4768:3:54"}],"functionName":{"name":"mload","nativeSrc":"4762:5:54","nodeType":"YulIdentifier","src":"4762:5:54"},"nativeSrc":"4762:10:54","nodeType":"YulFunctionCall","src":"4762:10:54"},"variables":[{"name":"cache","nativeSrc":"4753:5:54","nodeType":"YulTypedName","src":"4753:5:54","type":""}]},{"expression":{"arguments":[{"name":"end","nativeSrc":"4792:3:54","nodeType":"YulIdentifier","src":"4792:3:54"},{"name":"slot","nativeSrc":"4797:4:54","nodeType":"YulIdentifier","src":"4797:4:54"}],"functionName":{"name":"mstore","nativeSrc":"4785:6:54","nodeType":"YulIdentifier","src":"4785:6:54"},"nativeSrc":"4785:17:54","nodeType":"YulFunctionCall","src":"4785:17:54"},"nativeSrc":"4785:17:54","nodeType":"YulExpressionStatement","src":"4785:17:54"},{"nativeSrc":"4815:45:54","nodeType":"YulAssignment","src":"4815:45:54","value":{"arguments":[{"name":"begin","nativeSrc":"4835:5:54","nodeType":"YulIdentifier","src":"4835:5:54"},{"arguments":[{"name":"length","nativeSrc":"4846:6:54","nodeType":"YulIdentifier","src":"4846:6:54"},{"kind":"number","nativeSrc":"4854:4:54","nodeType":"YulLiteral","src":"4854:4:54","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"4842:3:54","nodeType":"YulIdentifier","src":"4842:3:54"},"nativeSrc":"4842:17:54","nodeType":"YulFunctionCall","src":"4842:17:54"}],"functionName":{"name":"keccak256","nativeSrc":"4825:9:54","nodeType":"YulIdentifier","src":"4825:9:54"},"nativeSrc":"4825:35:54","nodeType":"YulFunctionCall","src":"4825:35:54"},"variableNames":[{"name":"result","nativeSrc":"4815:6:54","nodeType":"YulIdentifier","src":"4815:6:54"}]},{"expression":{"arguments":[{"name":"end","nativeSrc":"4880:3:54","nodeType":"YulIdentifier","src":"4880:3:54"},{"name":"cache","nativeSrc":"4885:5:54","nodeType":"YulIdentifier","src":"4885:5:54"}],"functionName":{"name":"mstore","nativeSrc":"4873:6:54","nodeType":"YulIdentifier","src":"4873:6:54"},"nativeSrc":"4873:18:54","nodeType":"YulFunctionCall","src":"4873:18:54"},"nativeSrc":"4873:18:54","nodeType":"YulExpressionStatement","src":"4873:18:54"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":10052,"isOffset":false,"isSlot":false,"src":"4650:3:54","valueSize":1},{"declaration":10052,"isOffset":false,"isSlot":false,"src":"4684:3:54","valueSize":1},{"declaration":10055,"isOffset":false,"isSlot":false,"src":"4815:6:54","valueSize":1},{"declaration":10050,"isOffset":false,"isSlot":false,"src":"4797:4:54","valueSize":1}],"id":10057,"nodeType":"InlineAssembly","src":"4607:294:54"}]},"documentation":{"id":10048,"nodeType":"StructuredDocumentation","src":"4391:63:54","text":"@dev Derive the location of a mapping element from the key."},"id":10059,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"4468:13:54","nodeType":"FunctionDefinition","parameters":{"id":10053,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10050,"mutability":"mutable","name":"slot","nameLocation":"4490:4:54","nodeType":"VariableDeclaration","scope":10059,"src":"4482:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10049,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4482:7:54","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":10052,"mutability":"mutable","name":"key","nameLocation":"4510:3:54","nodeType":"VariableDeclaration","scope":10059,"src":"4496:17:54","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10051,"name":"string","nodeType":"ElementaryTypeName","src":"4496:6:54","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4481:33:54"},"returnParameters":{"id":10056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10055,"mutability":"mutable","name":"result","nameLocation":"4546:6:54","nodeType":"VariableDeclaration","scope":10059,"src":"4538:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10054,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4538:7:54","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4537:16:54"},"scope":10072,"src":"4459:448:54","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10070,"nodeType":"Block","src":"5075:353:54","statements":[{"AST":{"nativeSrc":"5137:285:54","nodeType":"YulBlock","src":"5137:285:54","statements":[{"nativeSrc":"5151:24:54","nodeType":"YulVariableDeclaration","src":"5151:24:54","value":{"arguments":[{"name":"key","nativeSrc":"5171:3:54","nodeType":"YulIdentifier","src":"5171:3:54"}],"functionName":{"name":"mload","nativeSrc":"5165:5:54","nodeType":"YulIdentifier","src":"5165:5:54"},"nativeSrc":"5165:10:54","nodeType":"YulFunctionCall","src":"5165:10:54"},"variables":[{"name":"length","nativeSrc":"5155:6:54","nodeType":"YulTypedName","src":"5155:6:54","type":""}]},{"nativeSrc":"5188:27:54","nodeType":"YulVariableDeclaration","src":"5188:27:54","value":{"arguments":[{"name":"key","nativeSrc":"5205:3:54","nodeType":"YulIdentifier","src":"5205:3:54"},{"kind":"number","nativeSrc":"5210:4:54","nodeType":"YulLiteral","src":"5210:4:54","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"5201:3:54","nodeType":"YulIdentifier","src":"5201:3:54"},"nativeSrc":"5201:14:54","nodeType":"YulFunctionCall","src":"5201:14:54"},"variables":[{"name":"begin","nativeSrc":"5192:5:54","nodeType":"YulTypedName","src":"5192:5:54","type":""}]},{"nativeSrc":"5228:29:54","nodeType":"YulVariableDeclaration","src":"5228:29:54","value":{"arguments":[{"name":"begin","nativeSrc":"5243:5:54","nodeType":"YulIdentifier","src":"5243:5:54"},{"name":"length","nativeSrc":"5250:6:54","nodeType":"YulIdentifier","src":"5250:6:54"}],"functionName":{"name":"add","nativeSrc":"5239:3:54","nodeType":"YulIdentifier","src":"5239:3:54"},"nativeSrc":"5239:18:54","nodeType":"YulFunctionCall","src":"5239:18:54"},"variables":[{"name":"end","nativeSrc":"5232:3:54","nodeType":"YulTypedName","src":"5232:3:54","type":""}]},{"nativeSrc":"5270:23:54","nodeType":"YulVariableDeclaration","src":"5270:23:54","value":{"arguments":[{"name":"end","nativeSrc":"5289:3:54","nodeType":"YulIdentifier","src":"5289:3:54"}],"functionName":{"name":"mload","nativeSrc":"5283:5:54","nodeType":"YulIdentifier","src":"5283:5:54"},"nativeSrc":"5283:10:54","nodeType":"YulFunctionCall","src":"5283:10:54"},"variables":[{"name":"cache","nativeSrc":"5274:5:54","nodeType":"YulTypedName","src":"5274:5:54","type":""}]},{"expression":{"arguments":[{"name":"end","nativeSrc":"5313:3:54","nodeType":"YulIdentifier","src":"5313:3:54"},{"name":"slot","nativeSrc":"5318:4:54","nodeType":"YulIdentifier","src":"5318:4:54"}],"functionName":{"name":"mstore","nativeSrc":"5306:6:54","nodeType":"YulIdentifier","src":"5306:6:54"},"nativeSrc":"5306:17:54","nodeType":"YulFunctionCall","src":"5306:17:54"},"nativeSrc":"5306:17:54","nodeType":"YulExpressionStatement","src":"5306:17:54"},{"nativeSrc":"5336:45:54","nodeType":"YulAssignment","src":"5336:45:54","value":{"arguments":[{"name":"begin","nativeSrc":"5356:5:54","nodeType":"YulIdentifier","src":"5356:5:54"},{"arguments":[{"name":"length","nativeSrc":"5367:6:54","nodeType":"YulIdentifier","src":"5367:6:54"},{"kind":"number","nativeSrc":"5375:4:54","nodeType":"YulLiteral","src":"5375:4:54","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"5363:3:54","nodeType":"YulIdentifier","src":"5363:3:54"},"nativeSrc":"5363:17:54","nodeType":"YulFunctionCall","src":"5363:17:54"}],"functionName":{"name":"keccak256","nativeSrc":"5346:9:54","nodeType":"YulIdentifier","src":"5346:9:54"},"nativeSrc":"5346:35:54","nodeType":"YulFunctionCall","src":"5346:35:54"},"variableNames":[{"name":"result","nativeSrc":"5336:6:54","nodeType":"YulIdentifier","src":"5336:6:54"}]},{"expression":{"arguments":[{"name":"end","nativeSrc":"5401:3:54","nodeType":"YulIdentifier","src":"5401:3:54"},{"name":"cache","nativeSrc":"5406:5:54","nodeType":"YulIdentifier","src":"5406:5:54"}],"functionName":{"name":"mstore","nativeSrc":"5394:6:54","nodeType":"YulIdentifier","src":"5394:6:54"},"nativeSrc":"5394:18:54","nodeType":"YulFunctionCall","src":"5394:18:54"},"nativeSrc":"5394:18:54","nodeType":"YulExpressionStatement","src":"5394:18:54"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":10064,"isOffset":false,"isSlot":false,"src":"5171:3:54","valueSize":1},{"declaration":10064,"isOffset":false,"isSlot":false,"src":"5205:3:54","valueSize":1},{"declaration":10067,"isOffset":false,"isSlot":false,"src":"5336:6:54","valueSize":1},{"declaration":10062,"isOffset":false,"isSlot":false,"src":"5318:4:54","valueSize":1}],"id":10069,"nodeType":"InlineAssembly","src":"5128:294:54"}]},"documentation":{"id":10060,"nodeType":"StructuredDocumentation","src":"4913:63:54","text":"@dev Derive the location of a mapping element from the key."},"id":10071,"implemented":true,"kind":"function","modifiers":[],"name":"deriveMapping","nameLocation":"4990:13:54","nodeType":"FunctionDefinition","parameters":{"id":10065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10062,"mutability":"mutable","name":"slot","nameLocation":"5012:4:54","nodeType":"VariableDeclaration","scope":10071,"src":"5004:12:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10061,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5004:7:54","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":10064,"mutability":"mutable","name":"key","nameLocation":"5031:3:54","nodeType":"VariableDeclaration","scope":10071,"src":"5018:16:54","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":10063,"name":"bytes","nodeType":"ElementaryTypeName","src":"5018:5:54","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5003:32:54"},"returnParameters":{"id":10068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10067,"mutability":"mutable","name":"result","nameLocation":"5067:6:54","nodeType":"VariableDeclaration","scope":10071,"src":"5059:14:54","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10066,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5059:7:54","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5058:16:54"},"scope":10072,"src":"4981:447:54","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":10073,"src":"1652:3778:54","usedErrors":[],"usedEvents":[]}],"src":"277:5153:54"},"id":54},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","exportedSymbols":{"StorageSlotExtension":[10285]},"id":10286,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":10074,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:55"},{"abstract":false,"baseContracts":[],"canonicalName":"StorageSlotExtension","contractDependencies":[],"contractKind":"library","documentation":{"id":10075,"nodeType":"StructuredDocumentation","src":"59:218:55","text":" @notice Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\n @dev TIP: Consider using this library along with {SlotDerivation}."},"fullyImplemented":true,"id":10285,"linearizedBaseContracts":[10285],"name":"StorageSlotExtension","nameLocation":"286:20:55","nodeType":"ContractDefinition","nodes":[{"canonicalName":"StorageSlotExtension.Int256Slot","id":10078,"members":[{"constant":false,"id":10077,"mutability":"mutable","name":"value","nameLocation":"348:5:55","nodeType":"VariableDeclaration","scope":10078,"src":"341:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":10076,"name":"int256","nodeType":"ElementaryTypeName","src":"341:6:55","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"name":"Int256Slot","nameLocation":"320:10:55","nodeType":"StructDefinition","scope":10285,"src":"313:47:55","visibility":"public"},{"body":{"id":10088,"nodeType":"Block","src":"524:106:55","statements":[{"AST":{"nativeSrc":"586:38:55","nodeType":"YulBlock","src":"586:38:55","statements":[{"nativeSrc":"600:14:55","nodeType":"YulAssignment","src":"600:14:55","value":{"name":"slot","nativeSrc":"610:4:55","nodeType":"YulIdentifier","src":"610:4:55"},"variableNames":[{"name":"r.slot","nativeSrc":"600:6:55","nodeType":"YulIdentifier","src":"600:6:55"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":10085,"isOffset":false,"isSlot":true,"src":"600:6:55","suffix":"slot","valueSize":1},{"declaration":10081,"isOffset":false,"isSlot":false,"src":"610:4:55","valueSize":1}],"id":10087,"nodeType":"InlineAssembly","src":"577:47:55"}]},"documentation":{"id":10079,"nodeType":"StructuredDocumentation","src":"366:71:55","text":"@dev Returns an `Int256Slot` with member `value` located at `slot`."},"id":10089,"implemented":true,"kind":"function","modifiers":[],"name":"getInt256Slot","nameLocation":"451:13:55","nodeType":"FunctionDefinition","parameters":{"id":10082,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10081,"mutability":"mutable","name":"slot","nameLocation":"473:4:55","nodeType":"VariableDeclaration","scope":10089,"src":"465:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10080,"name":"bytes32","nodeType":"ElementaryTypeName","src":"465:7:55","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"464:14:55"},"returnParameters":{"id":10086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10085,"mutability":"mutable","name":"r","nameLocation":"521:1:55","nodeType":"VariableDeclaration","scope":10089,"src":"502:20:55","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$10078_storage_ptr","typeString":"struct StorageSlotExtension.Int256Slot"},"typeName":{"id":10084,"nodeType":"UserDefinedTypeName","pathNode":{"id":10083,"name":"Int256Slot","nameLocations":["502:10:55"],"nodeType":"IdentifierPath","referencedDeclaration":10078,"src":"502:10:55"},"referencedDeclaration":10078,"src":"502:10:55","typeDescriptions":{"typeIdentifier":"t_struct$_Int256Slot_$10078_storage_ptr","typeString":"struct StorageSlotExtension.Int256Slot"}},"visibility":"internal"}],"src":"501:22:55"},"scope":10285,"src":"442:188:55","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.AddressSlotType","id":10091,"name":"AddressSlotType","nameLocation":"709:15:55","nodeType":"UserDefinedValueTypeDefinition","src":"704:32:55","underlyingType":{"id":10090,"name":"bytes32","nodeType":"ElementaryTypeName","src":"728:7:55","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":10105,"nodeType":"Block","src":"873:50:55","statements":[{"expression":{"arguments":[{"id":10102,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10094,"src":"911:4:55","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":10100,"name":"AddressSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10091,"src":"890:15:55","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressSlotType_$10091_$","typeString":"type(StorageSlotExtension.AddressSlotType)"}},"id":10101,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"906:4:55","memberName":"wrap","nodeType":"MemberAccess","src":"890:20:55","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_AddressSlotType_$10091_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.AddressSlotType)"}},"id":10103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"890:26:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$10091","typeString":"StorageSlotExtension.AddressSlotType"}},"functionReturnParameters":10099,"id":10104,"nodeType":"Return","src":"883:33:55"}]},"documentation":{"id":10092,"nodeType":"StructuredDocumentation","src":"742:53:55","text":"@dev Cast an arbitrary slot to a AddressSlotType."},"id":10106,"implemented":true,"kind":"function","modifiers":[],"name":"asAddress","nameLocation":"809:9:55","nodeType":"FunctionDefinition","parameters":{"id":10095,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10094,"mutability":"mutable","name":"slot","nameLocation":"827:4:55","nodeType":"VariableDeclaration","scope":10106,"src":"819:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10093,"name":"bytes32","nodeType":"ElementaryTypeName","src":"819:7:55","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"818:14:55"},"returnParameters":{"id":10099,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10098,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10106,"src":"856:15:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$10091","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":10097,"nodeType":"UserDefinedTypeName","pathNode":{"id":10096,"name":"AddressSlotType","nameLocations":["856:15:55"],"nodeType":"IdentifierPath","referencedDeclaration":10091,"src":"856:15:55"},"referencedDeclaration":10091,"src":"856:15:55","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$10091","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"}],"src":"855:17:55"},"scope":10285,"src":"800:123:55","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.BooleanSlotType","id":10108,"name":"BooleanSlotType","nameLocation":"1001:15:55","nodeType":"UserDefinedValueTypeDefinition","src":"996:32:55","underlyingType":{"id":10107,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1020:7:55","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":10122,"nodeType":"Block","src":"1165:50:55","statements":[{"expression":{"arguments":[{"id":10119,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10111,"src":"1203:4:55","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":10117,"name":"BooleanSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10108,"src":"1182:15:55","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"type(StorageSlotExtension.BooleanSlotType)"}},"id":10118,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1198:4:55","memberName":"wrap","nodeType":"MemberAccess","src":"1182:20:55","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":10120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1182:26:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"}},"functionReturnParameters":10116,"id":10121,"nodeType":"Return","src":"1175:33:55"}]},"documentation":{"id":10109,"nodeType":"StructuredDocumentation","src":"1034:53:55","text":"@dev Cast an arbitrary slot to a BooleanSlotType."},"id":10123,"implemented":true,"kind":"function","modifiers":[],"name":"asBoolean","nameLocation":"1101:9:55","nodeType":"FunctionDefinition","parameters":{"id":10112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10111,"mutability":"mutable","name":"slot","nameLocation":"1119:4:55","nodeType":"VariableDeclaration","scope":10123,"src":"1111:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10110,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1111:7:55","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1110:14:55"},"returnParameters":{"id":10116,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10115,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10123,"src":"1148:15:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":10114,"nodeType":"UserDefinedTypeName","pathNode":{"id":10113,"name":"BooleanSlotType","nameLocations":["1148:15:55"],"nodeType":"IdentifierPath","referencedDeclaration":10108,"src":"1148:15:55"},"referencedDeclaration":10108,"src":"1148:15:55","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"}],"src":"1147:17:55"},"scope":10285,"src":"1092:123:55","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Bytes32SlotType","id":10125,"name":"Bytes32SlotType","nameLocation":"1293:15:55","nodeType":"UserDefinedValueTypeDefinition","src":"1288:32:55","underlyingType":{"id":10124,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1312:7:55","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":10139,"nodeType":"Block","src":"1457:50:55","statements":[{"expression":{"arguments":[{"id":10136,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10128,"src":"1495:4:55","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":10134,"name":"Bytes32SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10125,"src":"1474:15:55","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Bytes32SlotType_$10125_$","typeString":"type(StorageSlotExtension.Bytes32SlotType)"}},"id":10135,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1490:4:55","memberName":"wrap","nodeType":"MemberAccess","src":"1474:20:55","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Bytes32SlotType_$10125_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Bytes32SlotType)"}},"id":10137,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1474:26:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$10125","typeString":"StorageSlotExtension.Bytes32SlotType"}},"functionReturnParameters":10133,"id":10138,"nodeType":"Return","src":"1467:33:55"}]},"documentation":{"id":10126,"nodeType":"StructuredDocumentation","src":"1326:53:55","text":"@dev Cast an arbitrary slot to a Bytes32SlotType."},"id":10140,"implemented":true,"kind":"function","modifiers":[],"name":"asBytes32","nameLocation":"1393:9:55","nodeType":"FunctionDefinition","parameters":{"id":10129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10128,"mutability":"mutable","name":"slot","nameLocation":"1411:4:55","nodeType":"VariableDeclaration","scope":10140,"src":"1403:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10127,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1403:7:55","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1402:14:55"},"returnParameters":{"id":10133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10132,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10140,"src":"1440:15:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$10125","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":10131,"nodeType":"UserDefinedTypeName","pathNode":{"id":10130,"name":"Bytes32SlotType","nameLocations":["1440:15:55"],"nodeType":"IdentifierPath","referencedDeclaration":10125,"src":"1440:15:55"},"referencedDeclaration":10125,"src":"1440:15:55","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$10125","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"}],"src":"1439:17:55"},"scope":10285,"src":"1384:123:55","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Uint256SlotType","id":10142,"name":"Uint256SlotType","nameLocation":"1585:15:55","nodeType":"UserDefinedValueTypeDefinition","src":"1580:32:55","underlyingType":{"id":10141,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1604:7:55","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":10156,"nodeType":"Block","src":"1749:50:55","statements":[{"expression":{"arguments":[{"id":10153,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10145,"src":"1787:4:55","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":10151,"name":"Uint256SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10142,"src":"1766:15:55","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"type(StorageSlotExtension.Uint256SlotType)"}},"id":10152,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1782:4:55","memberName":"wrap","nodeType":"MemberAccess","src":"1766:20:55","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":10154,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1766:26:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"functionReturnParameters":10150,"id":10155,"nodeType":"Return","src":"1759:33:55"}]},"documentation":{"id":10143,"nodeType":"StructuredDocumentation","src":"1618:53:55","text":"@dev Cast an arbitrary slot to a Uint256SlotType."},"id":10157,"implemented":true,"kind":"function","modifiers":[],"name":"asUint256","nameLocation":"1685:9:55","nodeType":"FunctionDefinition","parameters":{"id":10146,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10145,"mutability":"mutable","name":"slot","nameLocation":"1703:4:55","nodeType":"VariableDeclaration","scope":10157,"src":"1695:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10144,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1695:7:55","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1694:14:55"},"returnParameters":{"id":10150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10149,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10157,"src":"1732:15:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":10148,"nodeType":"UserDefinedTypeName","pathNode":{"id":10147,"name":"Uint256SlotType","nameLocations":["1732:15:55"],"nodeType":"IdentifierPath","referencedDeclaration":10142,"src":"1732:15:55"},"referencedDeclaration":10142,"src":"1732:15:55","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"1731:17:55"},"scope":10285,"src":"1676:123:55","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"StorageSlotExtension.Int256SlotType","id":10159,"name":"Int256SlotType","nameLocation":"1877:14:55","nodeType":"UserDefinedValueTypeDefinition","src":"1872:31:55","underlyingType":{"id":10158,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1895:7:55","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":10173,"nodeType":"Block","src":"2038:49:55","statements":[{"expression":{"arguments":[{"id":10170,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10162,"src":"2075:4:55","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":10168,"name":"Int256SlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10159,"src":"2055:14:55","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_Int256SlotType_$10159_$","typeString":"type(StorageSlotExtension.Int256SlotType)"}},"id":10169,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2070:4:55","memberName":"wrap","nodeType":"MemberAccess","src":"2055:19:55","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Int256SlotType_$10159_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Int256SlotType)"}},"id":10171,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2055:25:55","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$10159","typeString":"StorageSlotExtension.Int256SlotType"}},"functionReturnParameters":10167,"id":10172,"nodeType":"Return","src":"2048:32:55"}]},"documentation":{"id":10160,"nodeType":"StructuredDocumentation","src":"1909:53:55","text":"@dev Cast an arbitrary slot to an Int256SlotType."},"id":10174,"implemented":true,"kind":"function","modifiers":[],"name":"asInt256","nameLocation":"1976:8:55","nodeType":"FunctionDefinition","parameters":{"id":10163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10162,"mutability":"mutable","name":"slot","nameLocation":"1993:4:55","nodeType":"VariableDeclaration","scope":10174,"src":"1985:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10161,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1985:7:55","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1984:14:55"},"returnParameters":{"id":10167,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10166,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10174,"src":"2022:14:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$10159","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":10165,"nodeType":"UserDefinedTypeName","pathNode":{"id":10164,"name":"Int256SlotType","nameLocations":["2022:14:55"],"nodeType":"IdentifierPath","referencedDeclaration":10159,"src":"2022:14:55"},"referencedDeclaration":10159,"src":"2022:14:55","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$10159","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"}],"src":"2021:16:55"},"scope":10285,"src":"1967:120:55","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":10184,"nodeType":"Block","src":"2242:112:55","statements":[{"AST":{"nativeSrc":"2304:44:55","nodeType":"YulBlock","src":"2304:44:55","statements":[{"nativeSrc":"2318:20:55","nodeType":"YulAssignment","src":"2318:20:55","value":{"arguments":[{"name":"slot","nativeSrc":"2333:4:55","nodeType":"YulIdentifier","src":"2333:4:55"}],"functionName":{"name":"tload","nativeSrc":"2327:5:55","nodeType":"YulIdentifier","src":"2327:5:55"},"nativeSrc":"2327:11:55","nodeType":"YulFunctionCall","src":"2327:11:55"},"variableNames":[{"name":"value","nativeSrc":"2318:5:55","nodeType":"YulIdentifier","src":"2318:5:55"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":10178,"isOffset":false,"isSlot":false,"src":"2333:4:55","valueSize":1},{"declaration":10181,"isOffset":false,"isSlot":false,"src":"2318:5:55","valueSize":1}],"id":10183,"nodeType":"InlineAssembly","src":"2295:53:55"}]},"documentation":{"id":10175,"nodeType":"StructuredDocumentation","src":"2093:69:55","text":"@dev Load the value held at location `slot` in transient storage."},"id":10185,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"2176:5:55","nodeType":"FunctionDefinition","parameters":{"id":10179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10178,"mutability":"mutable","name":"slot","nameLocation":"2198:4:55","nodeType":"VariableDeclaration","scope":10185,"src":"2182:20:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$10091","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":10177,"nodeType":"UserDefinedTypeName","pathNode":{"id":10176,"name":"AddressSlotType","nameLocations":["2182:15:55"],"nodeType":"IdentifierPath","referencedDeclaration":10091,"src":"2182:15:55"},"referencedDeclaration":10091,"src":"2182:15:55","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$10091","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"}],"src":"2181:22:55"},"returnParameters":{"id":10182,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10181,"mutability":"mutable","name":"value","nameLocation":"2235:5:55","nodeType":"VariableDeclaration","scope":10185,"src":"2227:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10180,"name":"address","nodeType":"ElementaryTypeName","src":"2227:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2226:15:55"},"scope":10285,"src":"2167:187:55","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":10195,"nodeType":"Block","src":"2490:111:55","statements":[{"AST":{"nativeSrc":"2552:43:55","nodeType":"YulBlock","src":"2552:43:55","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"2573:4:55","nodeType":"YulIdentifier","src":"2573:4:55"},{"name":"value","nativeSrc":"2579:5:55","nodeType":"YulIdentifier","src":"2579:5:55"}],"functionName":{"name":"tstore","nativeSrc":"2566:6:55","nodeType":"YulIdentifier","src":"2566:6:55"},"nativeSrc":"2566:19:55","nodeType":"YulFunctionCall","src":"2566:19:55"},"nativeSrc":"2566:19:55","nodeType":"YulExpressionStatement","src":"2566:19:55"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":10189,"isOffset":false,"isSlot":false,"src":"2573:4:55","valueSize":1},{"declaration":10191,"isOffset":false,"isSlot":false,"src":"2579:5:55","valueSize":1}],"id":10194,"nodeType":"InlineAssembly","src":"2543:52:55"}]},"documentation":{"id":10186,"nodeType":"StructuredDocumentation","src":"2360:63:55","text":"@dev Store `value` at location `slot` in transient storage."},"id":10196,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"2437:6:55","nodeType":"FunctionDefinition","parameters":{"id":10192,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10189,"mutability":"mutable","name":"slot","nameLocation":"2460:4:55","nodeType":"VariableDeclaration","scope":10196,"src":"2444:20:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$10091","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":10188,"nodeType":"UserDefinedTypeName","pathNode":{"id":10187,"name":"AddressSlotType","nameLocations":["2444:15:55"],"nodeType":"IdentifierPath","referencedDeclaration":10091,"src":"2444:15:55"},"referencedDeclaration":10091,"src":"2444:15:55","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$10091","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"},{"constant":false,"id":10191,"mutability":"mutable","name":"value","nameLocation":"2474:5:55","nodeType":"VariableDeclaration","scope":10196,"src":"2466:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10190,"name":"address","nodeType":"ElementaryTypeName","src":"2466:7:55","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2443:37:55"},"returnParameters":{"id":10193,"nodeType":"ParameterList","parameters":[],"src":"2490:0:55"},"scope":10285,"src":"2428:173:55","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10206,"nodeType":"Block","src":"2753:112:55","statements":[{"AST":{"nativeSrc":"2815:44:55","nodeType":"YulBlock","src":"2815:44:55","statements":[{"nativeSrc":"2829:20:55","nodeType":"YulAssignment","src":"2829:20:55","value":{"arguments":[{"name":"slot","nativeSrc":"2844:4:55","nodeType":"YulIdentifier","src":"2844:4:55"}],"functionName":{"name":"tload","nativeSrc":"2838:5:55","nodeType":"YulIdentifier","src":"2838:5:55"},"nativeSrc":"2838:11:55","nodeType":"YulFunctionCall","src":"2838:11:55"},"variableNames":[{"name":"value","nativeSrc":"2829:5:55","nodeType":"YulIdentifier","src":"2829:5:55"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":10200,"isOffset":false,"isSlot":false,"src":"2844:4:55","valueSize":1},{"declaration":10203,"isOffset":false,"isSlot":false,"src":"2829:5:55","valueSize":1}],"id":10205,"nodeType":"InlineAssembly","src":"2806:53:55"}]},"documentation":{"id":10197,"nodeType":"StructuredDocumentation","src":"2607:69:55","text":"@dev Load the value held at location `slot` in transient storage."},"id":10207,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"2690:5:55","nodeType":"FunctionDefinition","parameters":{"id":10201,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10200,"mutability":"mutable","name":"slot","nameLocation":"2712:4:55","nodeType":"VariableDeclaration","scope":10207,"src":"2696:20:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":10199,"nodeType":"UserDefinedTypeName","pathNode":{"id":10198,"name":"BooleanSlotType","nameLocations":["2696:15:55"],"nodeType":"IdentifierPath","referencedDeclaration":10108,"src":"2696:15:55"},"referencedDeclaration":10108,"src":"2696:15:55","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"}],"src":"2695:22:55"},"returnParameters":{"id":10204,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10203,"mutability":"mutable","name":"value","nameLocation":"2746:5:55","nodeType":"VariableDeclaration","scope":10207,"src":"2741:10:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10202,"name":"bool","nodeType":"ElementaryTypeName","src":"2741:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2740:12:55"},"scope":10285,"src":"2681:184:55","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":10217,"nodeType":"Block","src":"2998:111:55","statements":[{"AST":{"nativeSrc":"3060:43:55","nodeType":"YulBlock","src":"3060:43:55","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"3081:4:55","nodeType":"YulIdentifier","src":"3081:4:55"},{"name":"value","nativeSrc":"3087:5:55","nodeType":"YulIdentifier","src":"3087:5:55"}],"functionName":{"name":"tstore","nativeSrc":"3074:6:55","nodeType":"YulIdentifier","src":"3074:6:55"},"nativeSrc":"3074:19:55","nodeType":"YulFunctionCall","src":"3074:19:55"},"nativeSrc":"3074:19:55","nodeType":"YulExpressionStatement","src":"3074:19:55"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":10211,"isOffset":false,"isSlot":false,"src":"3081:4:55","valueSize":1},{"declaration":10213,"isOffset":false,"isSlot":false,"src":"3087:5:55","valueSize":1}],"id":10216,"nodeType":"InlineAssembly","src":"3051:52:55"}]},"documentation":{"id":10208,"nodeType":"StructuredDocumentation","src":"2871:63:55","text":"@dev Store `value` at location `slot` in transient storage."},"id":10218,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"2948:6:55","nodeType":"FunctionDefinition","parameters":{"id":10214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10211,"mutability":"mutable","name":"slot","nameLocation":"2971:4:55","nodeType":"VariableDeclaration","scope":10218,"src":"2955:20:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":10210,"nodeType":"UserDefinedTypeName","pathNode":{"id":10209,"name":"BooleanSlotType","nameLocations":["2955:15:55"],"nodeType":"IdentifierPath","referencedDeclaration":10108,"src":"2955:15:55"},"referencedDeclaration":10108,"src":"2955:15:55","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"},{"constant":false,"id":10213,"mutability":"mutable","name":"value","nameLocation":"2982:5:55","nodeType":"VariableDeclaration","scope":10218,"src":"2977:10:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10212,"name":"bool","nodeType":"ElementaryTypeName","src":"2977:4:55","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2954:34:55"},"returnParameters":{"id":10215,"nodeType":"ParameterList","parameters":[],"src":"2998:0:55"},"scope":10285,"src":"2939:170:55","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10228,"nodeType":"Block","src":"3264:112:55","statements":[{"AST":{"nativeSrc":"3326:44:55","nodeType":"YulBlock","src":"3326:44:55","statements":[{"nativeSrc":"3340:20:55","nodeType":"YulAssignment","src":"3340:20:55","value":{"arguments":[{"name":"slot","nativeSrc":"3355:4:55","nodeType":"YulIdentifier","src":"3355:4:55"}],"functionName":{"name":"tload","nativeSrc":"3349:5:55","nodeType":"YulIdentifier","src":"3349:5:55"},"nativeSrc":"3349:11:55","nodeType":"YulFunctionCall","src":"3349:11:55"},"variableNames":[{"name":"value","nativeSrc":"3340:5:55","nodeType":"YulIdentifier","src":"3340:5:55"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":10222,"isOffset":false,"isSlot":false,"src":"3355:4:55","valueSize":1},{"declaration":10225,"isOffset":false,"isSlot":false,"src":"3340:5:55","valueSize":1}],"id":10227,"nodeType":"InlineAssembly","src":"3317:53:55"}]},"documentation":{"id":10219,"nodeType":"StructuredDocumentation","src":"3115:69:55","text":"@dev Load the value held at location `slot` in transient storage."},"id":10229,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"3198:5:55","nodeType":"FunctionDefinition","parameters":{"id":10223,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10222,"mutability":"mutable","name":"slot","nameLocation":"3220:4:55","nodeType":"VariableDeclaration","scope":10229,"src":"3204:20:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$10125","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":10221,"nodeType":"UserDefinedTypeName","pathNode":{"id":10220,"name":"Bytes32SlotType","nameLocations":["3204:15:55"],"nodeType":"IdentifierPath","referencedDeclaration":10125,"src":"3204:15:55"},"referencedDeclaration":10125,"src":"3204:15:55","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$10125","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"}],"src":"3203:22:55"},"returnParameters":{"id":10226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10225,"mutability":"mutable","name":"value","nameLocation":"3257:5:55","nodeType":"VariableDeclaration","scope":10229,"src":"3249:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10224,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3249:7:55","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3248:15:55"},"scope":10285,"src":"3189:187:55","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":10239,"nodeType":"Block","src":"3512:111:55","statements":[{"AST":{"nativeSrc":"3574:43:55","nodeType":"YulBlock","src":"3574:43:55","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"3595:4:55","nodeType":"YulIdentifier","src":"3595:4:55"},{"name":"value","nativeSrc":"3601:5:55","nodeType":"YulIdentifier","src":"3601:5:55"}],"functionName":{"name":"tstore","nativeSrc":"3588:6:55","nodeType":"YulIdentifier","src":"3588:6:55"},"nativeSrc":"3588:19:55","nodeType":"YulFunctionCall","src":"3588:19:55"},"nativeSrc":"3588:19:55","nodeType":"YulExpressionStatement","src":"3588:19:55"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":10233,"isOffset":false,"isSlot":false,"src":"3595:4:55","valueSize":1},{"declaration":10235,"isOffset":false,"isSlot":false,"src":"3601:5:55","valueSize":1}],"id":10238,"nodeType":"InlineAssembly","src":"3565:52:55"}]},"documentation":{"id":10230,"nodeType":"StructuredDocumentation","src":"3382:63:55","text":"@dev Store `value` at location `slot` in transient storage."},"id":10240,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"3459:6:55","nodeType":"FunctionDefinition","parameters":{"id":10236,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10233,"mutability":"mutable","name":"slot","nameLocation":"3482:4:55","nodeType":"VariableDeclaration","scope":10240,"src":"3466:20:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$10125","typeString":"StorageSlotExtension.Bytes32SlotType"},"typeName":{"id":10232,"nodeType":"UserDefinedTypeName","pathNode":{"id":10231,"name":"Bytes32SlotType","nameLocations":["3466:15:55"],"nodeType":"IdentifierPath","referencedDeclaration":10125,"src":"3466:15:55"},"referencedDeclaration":10125,"src":"3466:15:55","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Bytes32SlotType_$10125","typeString":"StorageSlotExtension.Bytes32SlotType"}},"visibility":"internal"},{"constant":false,"id":10235,"mutability":"mutable","name":"value","nameLocation":"3496:5:55","nodeType":"VariableDeclaration","scope":10240,"src":"3488:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10234,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3488:7:55","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3465:37:55"},"returnParameters":{"id":10237,"nodeType":"ParameterList","parameters":[],"src":"3512:0:55"},"scope":10285,"src":"3450:173:55","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10250,"nodeType":"Block","src":"3778:112:55","statements":[{"AST":{"nativeSrc":"3840:44:55","nodeType":"YulBlock","src":"3840:44:55","statements":[{"nativeSrc":"3854:20:55","nodeType":"YulAssignment","src":"3854:20:55","value":{"arguments":[{"name":"slot","nativeSrc":"3869:4:55","nodeType":"YulIdentifier","src":"3869:4:55"}],"functionName":{"name":"tload","nativeSrc":"3863:5:55","nodeType":"YulIdentifier","src":"3863:5:55"},"nativeSrc":"3863:11:55","nodeType":"YulFunctionCall","src":"3863:11:55"},"variableNames":[{"name":"value","nativeSrc":"3854:5:55","nodeType":"YulIdentifier","src":"3854:5:55"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":10244,"isOffset":false,"isSlot":false,"src":"3869:4:55","valueSize":1},{"declaration":10247,"isOffset":false,"isSlot":false,"src":"3854:5:55","valueSize":1}],"id":10249,"nodeType":"InlineAssembly","src":"3831:53:55"}]},"documentation":{"id":10241,"nodeType":"StructuredDocumentation","src":"3629:69:55","text":"@dev Load the value held at location `slot` in transient storage."},"id":10251,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"3712:5:55","nodeType":"FunctionDefinition","parameters":{"id":10245,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10244,"mutability":"mutable","name":"slot","nameLocation":"3734:4:55","nodeType":"VariableDeclaration","scope":10251,"src":"3718:20:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":10243,"nodeType":"UserDefinedTypeName","pathNode":{"id":10242,"name":"Uint256SlotType","nameLocations":["3718:15:55"],"nodeType":"IdentifierPath","referencedDeclaration":10142,"src":"3718:15:55"},"referencedDeclaration":10142,"src":"3718:15:55","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"3717:22:55"},"returnParameters":{"id":10248,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10247,"mutability":"mutable","name":"value","nameLocation":"3771:5:55","nodeType":"VariableDeclaration","scope":10251,"src":"3763:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10246,"name":"uint256","nodeType":"ElementaryTypeName","src":"3763:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3762:15:55"},"scope":10285,"src":"3703:187:55","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":10261,"nodeType":"Block","src":"4026:111:55","statements":[{"AST":{"nativeSrc":"4088:43:55","nodeType":"YulBlock","src":"4088:43:55","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"4109:4:55","nodeType":"YulIdentifier","src":"4109:4:55"},{"name":"value","nativeSrc":"4115:5:55","nodeType":"YulIdentifier","src":"4115:5:55"}],"functionName":{"name":"tstore","nativeSrc":"4102:6:55","nodeType":"YulIdentifier","src":"4102:6:55"},"nativeSrc":"4102:19:55","nodeType":"YulFunctionCall","src":"4102:19:55"},"nativeSrc":"4102:19:55","nodeType":"YulExpressionStatement","src":"4102:19:55"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":10255,"isOffset":false,"isSlot":false,"src":"4109:4:55","valueSize":1},{"declaration":10257,"isOffset":false,"isSlot":false,"src":"4115:5:55","valueSize":1}],"id":10260,"nodeType":"InlineAssembly","src":"4079:52:55"}]},"documentation":{"id":10252,"nodeType":"StructuredDocumentation","src":"3896:63:55","text":"@dev Store `value` at location `slot` in transient storage."},"id":10262,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"3973:6:55","nodeType":"FunctionDefinition","parameters":{"id":10258,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10255,"mutability":"mutable","name":"slot","nameLocation":"3996:4:55","nodeType":"VariableDeclaration","scope":10262,"src":"3980:20:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":10254,"nodeType":"UserDefinedTypeName","pathNode":{"id":10253,"name":"Uint256SlotType","nameLocations":["3980:15:55"],"nodeType":"IdentifierPath","referencedDeclaration":10142,"src":"3980:15:55"},"referencedDeclaration":10142,"src":"3980:15:55","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"},{"constant":false,"id":10257,"mutability":"mutable","name":"value","nameLocation":"4010:5:55","nodeType":"VariableDeclaration","scope":10262,"src":"4002:13:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10256,"name":"uint256","nodeType":"ElementaryTypeName","src":"4002:7:55","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3979:37:55"},"returnParameters":{"id":10259,"nodeType":"ParameterList","parameters":[],"src":"4026:0:55"},"scope":10285,"src":"3964:173:55","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10272,"nodeType":"Block","src":"4290:112:55","statements":[{"AST":{"nativeSrc":"4352:44:55","nodeType":"YulBlock","src":"4352:44:55","statements":[{"nativeSrc":"4366:20:55","nodeType":"YulAssignment","src":"4366:20:55","value":{"arguments":[{"name":"slot","nativeSrc":"4381:4:55","nodeType":"YulIdentifier","src":"4381:4:55"}],"functionName":{"name":"tload","nativeSrc":"4375:5:55","nodeType":"YulIdentifier","src":"4375:5:55"},"nativeSrc":"4375:11:55","nodeType":"YulFunctionCall","src":"4375:11:55"},"variableNames":[{"name":"value","nativeSrc":"4366:5:55","nodeType":"YulIdentifier","src":"4366:5:55"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":10266,"isOffset":false,"isSlot":false,"src":"4381:4:55","valueSize":1},{"declaration":10269,"isOffset":false,"isSlot":false,"src":"4366:5:55","valueSize":1}],"id":10271,"nodeType":"InlineAssembly","src":"4343:53:55"}]},"documentation":{"id":10263,"nodeType":"StructuredDocumentation","src":"4143:69:55","text":"@dev Load the value held at location `slot` in transient storage."},"id":10273,"implemented":true,"kind":"function","modifiers":[],"name":"tload","nameLocation":"4226:5:55","nodeType":"FunctionDefinition","parameters":{"id":10267,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10266,"mutability":"mutable","name":"slot","nameLocation":"4247:4:55","nodeType":"VariableDeclaration","scope":10273,"src":"4232:19:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$10159","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":10265,"nodeType":"UserDefinedTypeName","pathNode":{"id":10264,"name":"Int256SlotType","nameLocations":["4232:14:55"],"nodeType":"IdentifierPath","referencedDeclaration":10159,"src":"4232:14:55"},"referencedDeclaration":10159,"src":"4232:14:55","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$10159","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"}],"src":"4231:21:55"},"returnParameters":{"id":10270,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10269,"mutability":"mutable","name":"value","nameLocation":"4283:5:55","nodeType":"VariableDeclaration","scope":10273,"src":"4276:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":10268,"name":"int256","nodeType":"ElementaryTypeName","src":"4276:6:55","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4275:14:55"},"scope":10285,"src":"4217:185:55","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":10283,"nodeType":"Block","src":"4536:111:55","statements":[{"AST":{"nativeSrc":"4598:43:55","nodeType":"YulBlock","src":"4598:43:55","statements":[{"expression":{"arguments":[{"name":"slot","nativeSrc":"4619:4:55","nodeType":"YulIdentifier","src":"4619:4:55"},{"name":"value","nativeSrc":"4625:5:55","nodeType":"YulIdentifier","src":"4625:5:55"}],"functionName":{"name":"tstore","nativeSrc":"4612:6:55","nodeType":"YulIdentifier","src":"4612:6:55"},"nativeSrc":"4612:19:55","nodeType":"YulFunctionCall","src":"4612:19:55"},"nativeSrc":"4612:19:55","nodeType":"YulExpressionStatement","src":"4612:19:55"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":10277,"isOffset":false,"isSlot":false,"src":"4619:4:55","valueSize":1},{"declaration":10279,"isOffset":false,"isSlot":false,"src":"4625:5:55","valueSize":1}],"id":10282,"nodeType":"InlineAssembly","src":"4589:52:55"}]},"documentation":{"id":10274,"nodeType":"StructuredDocumentation","src":"4408:63:55","text":"@dev Store `value` at location `slot` in transient storage."},"id":10284,"implemented":true,"kind":"function","modifiers":[],"name":"tstore","nameLocation":"4485:6:55","nodeType":"FunctionDefinition","parameters":{"id":10280,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10277,"mutability":"mutable","name":"slot","nameLocation":"4507:4:55","nodeType":"VariableDeclaration","scope":10284,"src":"4492:19:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$10159","typeString":"StorageSlotExtension.Int256SlotType"},"typeName":{"id":10276,"nodeType":"UserDefinedTypeName","pathNode":{"id":10275,"name":"Int256SlotType","nameLocations":["4492:14:55"],"nodeType":"IdentifierPath","referencedDeclaration":10159,"src":"4492:14:55"},"referencedDeclaration":10159,"src":"4492:14:55","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Int256SlotType_$10159","typeString":"StorageSlotExtension.Int256SlotType"}},"visibility":"internal"},{"constant":false,"id":10279,"mutability":"mutable","name":"value","nameLocation":"4520:5:55","nodeType":"VariableDeclaration","scope":10284,"src":"4513:12:55","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":10278,"name":"int256","nodeType":"ElementaryTypeName","src":"4513:6:55","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4491:35:55"},"returnParameters":{"id":10281,"nodeType":"ParameterList","parameters":[],"src":"4536:0:55"},"scope":10285,"src":"4476:171:55","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":10286,"src":"278:4371:55","usedErrors":[],"usedEvents":[]}],"src":"33:4617:55"},"id":55},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/TransientEnumerableSet.sol":{"ast":{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/TransientEnumerableSet.sol","exportedSymbols":{"AddressArraySlotType":[6864],"AddressToUintMappingSlot":[6860],"StorageSlotExtension":[10285],"TransientEnumerableSet":[10693],"TransientStorageHelpers":[7442]},"id":10694,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":10287,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"33:24:56"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","file":"./StorageSlotExtension.sol","id":10289,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10694,"sourceUnit":10286,"src":"59:66:56","symbolAliases":[{"foreign":{"id":10288,"name":"StorageSlotExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10285,"src":"68:20:56","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","file":"../helpers/TransientStorageHelpers.sol","id":10293,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":10694,"sourceUnit":7443,"src":"126:141:56","symbolAliases":[{"foreign":{"id":10290,"name":"AddressArraySlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6864,"src":"139:20:56","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":10291,"name":"AddressToUintMappingSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6860,"src":"165:24:56","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":10292,"name":"TransientStorageHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7442,"src":"195:23:56","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"TransientEnumerableSet","contractDependencies":[],"contractKind":"library","documentation":{"id":10294,"nodeType":"StructuredDocumentation","src":"269:1014:56","text":" @notice Library for managing sets of primitive types.\n @dev See https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive types.\n Based on the EnumerableSet library from OpenZeppelin Contracts, altered to remove the base private functions that\n work on bytes32, replacing them with a native implementation for address values, to reduce bytecode size and\n runtime costs. It also uses transient storage.\n The `unchecked_at` function was also added, which allows for more gas efficient data reads in some scenarios.\n Sets have the following properties:\n - Elements are added, removed, and checked for existence in constant time (O(1)).\n - Elements are enumerated in O(n). No guarantees are made on the ordering.\n ```\n contract Example {\n // Add the library methods\n using TransientEnumerableSet for TransientEnumerableSet.AddressSet;\n // Declare a set state variable\n TransientEnumerableSet.AddressSet private mySet;\n }\n ```"},"fullyImplemented":true,"id":10693,"linearizedBaseContracts":[10693],"name":"TransientEnumerableSet","nameLocation":"1292:22:56","nodeType":"ContractDefinition","nodes":[{"global":false,"id":10296,"libraryName":{"id":10295,"name":"TransientStorageHelpers","nameLocations":["1327:23:56"],"nodeType":"IdentifierPath","referencedDeclaration":7442,"src":"1327:23:56"},"nodeType":"UsingForDirective","src":"1321:36:56"},{"global":false,"id":10300,"libraryName":{"id":10297,"name":"StorageSlotExtension","nameLocations":["1368:20:56"],"nodeType":"IdentifierPath","referencedDeclaration":10285,"src":"1368:20:56"},"nodeType":"UsingForDirective","src":"1362:68:56","typeName":{"id":10299,"nodeType":"UserDefinedTypeName","pathNode":{"id":10298,"name":"StorageSlotExtension.Uint256SlotType","nameLocations":["1393:20:56","1414:15:56"],"nodeType":"IdentifierPath","referencedDeclaration":10142,"src":"1393:36:56"},"referencedDeclaration":10142,"src":"1393:36:56","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}}},{"canonicalName":"TransientEnumerableSet.AddressSet","id":10308,"members":[{"constant":false,"id":10303,"mutability":"mutable","name":"__values","nameLocation":"1756:8:56","nodeType":"VariableDeclaration","scope":10308,"src":"1746:18:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":10301,"name":"address","nodeType":"ElementaryTypeName","src":"1746:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10302,"nodeType":"ArrayTypeName","src":"1746:9:56","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":10307,"mutability":"mutable","name":"__indexes","nameLocation":"1947:9:56","nodeType":"VariableDeclaration","scope":10308,"src":"1897:59:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":10306,"keyName":"addressKey","keyNameLocation":"1913:10:56","keyType":{"id":10304,"name":"address","nodeType":"ElementaryTypeName","src":"1905:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1897:49:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"indexValue","valueNameLocation":"1935:10:56","valueType":{"id":10305,"name":"uint256","nodeType":"ElementaryTypeName","src":"1927:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"}],"name":"AddressSet","nameLocation":"1691:10:56","nodeType":"StructDefinition","scope":10693,"src":"1684:279:56","visibility":"public"},{"documentation":{"id":10309,"nodeType":"StructuredDocumentation","src":"1969:61:56","text":"@notice An index is beyond the current bounds of the set."},"errorSelector":"4e23d035","id":10311,"name":"IndexOutOfBounds","nameLocation":"2041:16:56","nodeType":"ErrorDefinition","parameters":{"id":10310,"nodeType":"ParameterList","parameters":[],"src":"2057:2:56"},"src":"2035:25:56"},{"documentation":{"id":10312,"nodeType":"StructuredDocumentation","src":"2066:54:56","text":"@notice An element that is not present in the set."},"errorSelector":"66af5392","id":10314,"name":"ElementNotFound","nameLocation":"2131:15:56","nodeType":"ErrorDefinition","parameters":{"id":10313,"nodeType":"ParameterList","parameters":[],"src":"2146:2:56"},"src":"2125:24:56"},{"body":{"id":10356,"nodeType":"Block","src":"2380:348:56","statements":[{"condition":{"id":10329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"2394:21:56","subExpression":{"arguments":[{"id":10326,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10318,"src":"2404:3:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}},{"id":10327,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10320,"src":"2409:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"},{"typeIdentifier":"t_address","typeString":"address"}],"id":10325,"name":"contains","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10476,"src":"2395:8:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$10308_storage_ptr_$_t_address_$returns$_t_bool_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer,address) view returns (bool)"}},"id":10328,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2395:20:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":10354,"nodeType":"Block","src":"2685:37:56","statements":[{"expression":{"hexValue":"66616c7365","id":10352,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2706:5:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":10324,"id":10353,"nodeType":"Return","src":"2699:12:56"}]},"id":10355,"nodeType":"IfStatement","src":"2390:332:56","trueBody":{"id":10351,"nodeType":"Block","src":"2417:262:56","statements":[{"expression":{"arguments":[{"id":10334,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10320,"src":"2450:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":10331,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10318,"src":"2439:3:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}],"id":10330,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10674,"src":"2431:7:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$10308_storage_ptr_$returns$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer) view returns (AddressArraySlotType)"}},"id":10332,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2431:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}},"id":10333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2444:5:56","memberName":"tPush","nodeType":"MemberAccess","referencedDeclaration":7342,"src":"2431:18:56","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressArraySlotType_$6864_$_t_address_$returns$__$attached_to$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"function (AddressArraySlotType,address)"}},"id":10335,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2431:25:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10336,"nodeType":"ExpressionStatement","src":"2431:25:56"},{"expression":{"arguments":[{"id":10341,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10320,"src":"2612:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":10343,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10318,"src":"2627:3:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}],"id":10342,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10674,"src":"2619:7:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$10308_storage_ptr_$returns$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer) view returns (AddressArraySlotType)"}},"id":10344,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2619:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}},"id":10345,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2632:7:56","memberName":"tLength","nodeType":"MemberAccess","referencedDeclaration":7151,"src":"2619:20:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressArraySlotType_$6864_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"function (AddressArraySlotType) view returns (uint256)"}},"id":10346,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2619:22:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":10338,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10318,"src":"2602:3:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}],"id":10337,"name":"_indexes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10692,"src":"2593:8:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$10308_storage_ptr_$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer) view returns (AddressToUintMappingSlot)"}},"id":10339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2593:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":10340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2607:4:56","memberName":"tSet","nodeType":"MemberAccess","referencedDeclaration":7015,"src":"2593:18:56","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address,uint256)"}},"id":10347,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2593:49:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10348,"nodeType":"ExpressionStatement","src":"2593:49:56"},{"expression":{"hexValue":"74727565","id":10349,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2664:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":10324,"id":10350,"nodeType":"Return","src":"2657:11:56"}]}}]},"documentation":{"id":10315,"nodeType":"StructuredDocumentation","src":"2155:144:56","text":" @dev Add a value to a set. O(1).\n Returns true if the value was added to the set, if it was not already present."},"id":10357,"implemented":true,"kind":"function","modifiers":[],"name":"add","nameLocation":"2313:3:56","nodeType":"FunctionDefinition","parameters":{"id":10321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10318,"mutability":"mutable","name":"set","nameLocation":"2336:3:56","nodeType":"VariableDeclaration","scope":10357,"src":"2317:22:56","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"},"typeName":{"id":10317,"nodeType":"UserDefinedTypeName","pathNode":{"id":10316,"name":"AddressSet","nameLocations":["2317:10:56"],"nodeType":"IdentifierPath","referencedDeclaration":10308,"src":"2317:10:56"},"referencedDeclaration":10308,"src":"2317:10:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":10320,"mutability":"mutable","name":"value","nameLocation":"2349:5:56","nodeType":"VariableDeclaration","scope":10357,"src":"2341:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10319,"name":"address","nodeType":"ElementaryTypeName","src":"2341:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2316:39:56"},"returnParameters":{"id":10324,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10323,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10357,"src":"2374:4:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10322,"name":"bool","nodeType":"ElementaryTypeName","src":"2374:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2373:6:56"},"scope":10693,"src":"2304:424:56","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10454,"nodeType":"Block","src":"2966:1679:56","statements":[{"assignments":[10369],"declarations":[{"constant":false,"id":10369,"mutability":"mutable","name":"valueIndex","nameLocation":"3085:10:56","nodeType":"VariableDeclaration","scope":10454,"src":"3077:18:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10368,"name":"uint256","nodeType":"ElementaryTypeName","src":"3077:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10376,"initialValue":{"arguments":[{"id":10374,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10363,"src":"3117:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":10371,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10361,"src":"3107:3:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}],"id":10370,"name":"_indexes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10692,"src":"3098:8:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$10308_storage_ptr_$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer) view returns (AddressToUintMappingSlot)"}},"id":10372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3098:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":10373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3112:4:56","memberName":"tGet","nodeType":"MemberAccess","referencedDeclaration":6990,"src":"3098:18:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address) view returns (uint256)"}},"id":10375,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3098:25:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3077:46:56"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10377,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10369,"src":"3138:10:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":10378,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3152:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3138:15:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":10452,"nodeType":"Block","src":"4602:37:56","statements":[{"expression":{"hexValue":"66616c7365","id":10450,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4623:5:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":10367,"id":10451,"nodeType":"Return","src":"4616:12:56"}]},"id":10453,"nodeType":"IfStatement","src":"3134:1505:56","trueBody":{"id":10449,"nodeType":"Block","src":"3155:1441:56","statements":[{"assignments":[10381],"declarations":[{"constant":false,"id":10381,"mutability":"mutable","name":"toDeleteIndex","nameLocation":"3514:13:56","nodeType":"VariableDeclaration","scope":10449,"src":"3506:21:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10380,"name":"uint256","nodeType":"ElementaryTypeName","src":"3506:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10382,"nodeType":"VariableDeclarationStatement","src":"3506:21:56"},{"assignments":[10384],"declarations":[{"constant":false,"id":10384,"mutability":"mutable","name":"lastIndex","nameLocation":"3549:9:56","nodeType":"VariableDeclaration","scope":10449,"src":"3541:17:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10383,"name":"uint256","nodeType":"ElementaryTypeName","src":"3541:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10385,"nodeType":"VariableDeclarationStatement","src":"3541:17:56"},{"id":10402,"nodeType":"UncheckedBlock","src":"3573:129:56","statements":[{"expression":{"id":10390,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10386,"name":"toDeleteIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10381,"src":"3601:13:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10387,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10369,"src":"3617:10:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":10388,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3630:1:56","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3617:14:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3601:30:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10391,"nodeType":"ExpressionStatement","src":"3601:30:56"},{"expression":{"id":10400,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10392,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10384,"src":"3649:9:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":10394,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10361,"src":"3669:3:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}],"id":10393,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10674,"src":"3661:7:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$10308_storage_ptr_$returns$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer) view returns (AddressArraySlotType)"}},"id":10395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3661:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}},"id":10396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3674:7:56","memberName":"tLength","nodeType":"MemberAccess","referencedDeclaration":7151,"src":"3661:20:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressArraySlotType_$6864_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"function (AddressArraySlotType) view returns (uint256)"}},"id":10397,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3661:22:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":10398,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3686:1:56","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3661:26:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3649:38:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10401,"nodeType":"ExpressionStatement","src":"3649:38:56"}]},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10403,"name":"toDeleteIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10381,"src":"3802:13:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":10404,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10384,"src":"3819:9:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3802:26:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10432,"nodeType":"IfStatement","src":"3798:415:56","trueBody":{"id":10431,"nodeType":"Block","src":"3830:383:56","statements":[{"assignments":[10407],"declarations":[{"constant":false,"id":10407,"mutability":"mutable","name":"lastValue","nameLocation":"3856:9:56","nodeType":"VariableDeclaration","scope":10431,"src":"3848:17:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10406,"name":"address","nodeType":"ElementaryTypeName","src":"3848:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":10414,"initialValue":{"arguments":[{"id":10412,"name":"lastIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10384,"src":"3885:9:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":10409,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10361,"src":"3876:3:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}],"id":10408,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10674,"src":"3868:7:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$10308_storage_ptr_$returns$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer) view returns (AddressArraySlotType)"}},"id":10410,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3868:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}},"id":10411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3881:3:56","memberName":"tAt","nodeType":"MemberAccess","referencedDeclaration":7181,"src":"3868:16:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressArraySlotType_$6864_$_t_uint256_$returns$_t_address_$attached_to$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"function (AddressArraySlotType,uint256) view returns (address)"}},"id":10413,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3868:27:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3848:47:56"},{"expression":{"arguments":[{"id":10419,"name":"toDeleteIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10381,"src":"4008:13:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":10420,"name":"lastValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10407,"src":"4023:9:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":10416,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10361,"src":"3998:3:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}],"id":10415,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10674,"src":"3990:7:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$10308_storage_ptr_$returns$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer) view returns (AddressArraySlotType)"}},"id":10417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3990:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}},"id":10418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4003:4:56","memberName":"tSet","nodeType":"MemberAccess","referencedDeclaration":7213,"src":"3990:17:56","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressArraySlotType_$6864_$_t_uint256_$_t_address_$returns$__$attached_to$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"function (AddressArraySlotType,uint256,address)"}},"id":10421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3990:43:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10422,"nodeType":"ExpressionStatement","src":"3990:43:56"},{"expression":{"arguments":[{"id":10427,"name":"lastValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10407,"src":"4128:9:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10428,"name":"valueIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10369,"src":"4139:10:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":10424,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10361,"src":"4118:3:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}],"id":10423,"name":"_indexes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10692,"src":"4109:8:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$10308_storage_ptr_$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer) view returns (AddressToUintMappingSlot)"}},"id":10425,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4109:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":10426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4123:4:56","memberName":"tSet","nodeType":"MemberAccess","referencedDeclaration":7015,"src":"4109:18:56","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address,uint256)"}},"id":10429,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4109:41:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10430,"nodeType":"ExpressionStatement","src":"4109:41:56"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":10434,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10361,"src":"4300:3:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}],"id":10433,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10674,"src":"4292:7:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$10308_storage_ptr_$returns$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer) view returns (AddressArraySlotType)"}},"id":10435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4292:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}},"id":10436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4305:4:56","memberName":"tPop","nodeType":"MemberAccess","referencedDeclaration":7407,"src":"4292:17:56","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressArraySlotType_$6864_$returns$_t_address_$attached_to$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"function (AddressArraySlotType) returns (address)"}},"id":10437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4292:19:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10438,"nodeType":"ExpressionStatement","src":"4292:19:56"},{"expression":{"arguments":[{"id":10443,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10363,"src":"4550:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":10444,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4557:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"arguments":[{"id":10440,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10361,"src":"4540:3:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}],"id":10439,"name":"_indexes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10692,"src":"4531:8:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$10308_storage_ptr_$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer) view returns (AddressToUintMappingSlot)"}},"id":10441,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4531:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":10442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4545:4:56","memberName":"tSet","nodeType":"MemberAccess","referencedDeclaration":7015,"src":"4531:18:56","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address,uint256)"}},"id":10445,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4531:28:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10446,"nodeType":"ExpressionStatement","src":"4531:28:56"},{"expression":{"hexValue":"74727565","id":10447,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4581:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":10367,"id":10448,"nodeType":"Return","src":"4574:11:56"}]}}]},"documentation":{"id":10358,"nodeType":"StructuredDocumentation","src":"2734:148:56","text":" @dev Removes a value from a set. O(1).\n Returns true if the value was removed from the set; i.e., if it was present."},"id":10455,"implemented":true,"kind":"function","modifiers":[],"name":"remove","nameLocation":"2896:6:56","nodeType":"FunctionDefinition","parameters":{"id":10364,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10361,"mutability":"mutable","name":"set","nameLocation":"2922:3:56","nodeType":"VariableDeclaration","scope":10455,"src":"2903:22:56","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"},"typeName":{"id":10360,"nodeType":"UserDefinedTypeName","pathNode":{"id":10359,"name":"AddressSet","nameLocations":["2903:10:56"],"nodeType":"IdentifierPath","referencedDeclaration":10308,"src":"2903:10:56"},"referencedDeclaration":10308,"src":"2903:10:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":10363,"mutability":"mutable","name":"value","nameLocation":"2935:5:56","nodeType":"VariableDeclaration","scope":10455,"src":"2927:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10362,"name":"address","nodeType":"ElementaryTypeName","src":"2927:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2902:39:56"},"returnParameters":{"id":10367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10366,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10455,"src":"2960:4:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10365,"name":"bool","nodeType":"ElementaryTypeName","src":"2960:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2959:6:56"},"scope":10693,"src":"2887:1758:56","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":10475,"nodeType":"Block","src":"4797:54:56","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":10470,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10461,"src":"4833:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":10467,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10459,"src":"4823:3:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}],"id":10466,"name":"_indexes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10692,"src":"4814:8:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$10308_storage_ptr_$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer) view returns (AddressToUintMappingSlot)"}},"id":10468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4814:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":10469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4828:4:56","memberName":"tGet","nodeType":"MemberAccess","referencedDeclaration":6990,"src":"4814:18:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address) view returns (uint256)"}},"id":10471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4814:25:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":10472,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4843:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4814:30:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":10465,"id":10474,"nodeType":"Return","src":"4807:37:56"}]},"documentation":{"id":10456,"nodeType":"StructuredDocumentation","src":"4651:55:56","text":"@dev Returns true if the value is in the set. O(1)."},"id":10476,"implemented":true,"kind":"function","modifiers":[],"name":"contains","nameLocation":"4720:8:56","nodeType":"FunctionDefinition","parameters":{"id":10462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10459,"mutability":"mutable","name":"set","nameLocation":"4748:3:56","nodeType":"VariableDeclaration","scope":10476,"src":"4729:22:56","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"},"typeName":{"id":10458,"nodeType":"UserDefinedTypeName","pathNode":{"id":10457,"name":"AddressSet","nameLocations":["4729:10:56"],"nodeType":"IdentifierPath","referencedDeclaration":10308,"src":"4729:10:56"},"referencedDeclaration":10308,"src":"4729:10:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":10461,"mutability":"mutable","name":"value","nameLocation":"4761:5:56","nodeType":"VariableDeclaration","scope":10476,"src":"4753:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10460,"name":"address","nodeType":"ElementaryTypeName","src":"4753:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4728:39:56"},"returnParameters":{"id":10465,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10464,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10476,"src":"4791:4:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10463,"name":"bool","nodeType":"ElementaryTypeName","src":"4791:4:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4790:6:56"},"scope":10693,"src":"4711:140:56","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":10491,"nodeType":"Block","src":"4989:46:56","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":10486,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10480,"src":"5014:3:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}],"id":10485,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10674,"src":"5006:7:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$10308_storage_ptr_$returns$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer) view returns (AddressArraySlotType)"}},"id":10487,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5006:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}},"id":10488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5019:7:56","memberName":"tLength","nodeType":"MemberAccess","referencedDeclaration":7151,"src":"5006:20:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressArraySlotType_$6864_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"function (AddressArraySlotType) view returns (uint256)"}},"id":10489,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5006:22:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10484,"id":10490,"nodeType":"Return","src":"4999:29:56"}]},"documentation":{"id":10477,"nodeType":"StructuredDocumentation","src":"4857:55:56","text":"@dev Returns the number of values on the set. O(1)."},"id":10492,"implemented":true,"kind":"function","modifiers":[],"name":"length","nameLocation":"4926:6:56","nodeType":"FunctionDefinition","parameters":{"id":10481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10480,"mutability":"mutable","name":"set","nameLocation":"4952:3:56","nodeType":"VariableDeclaration","scope":10492,"src":"4933:22:56","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"},"typeName":{"id":10479,"nodeType":"UserDefinedTypeName","pathNode":{"id":10478,"name":"AddressSet","nameLocations":["4933:10:56"],"nodeType":"IdentifierPath","referencedDeclaration":10308,"src":"4933:10:56"},"referencedDeclaration":10308,"src":"4933:10:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"}},"visibility":"internal"}],"src":"4932:24:56"},"returnParameters":{"id":10484,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10483,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10492,"src":"4980:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10482,"name":"uint256","nodeType":"ElementaryTypeName","src":"4980:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4979:9:56"},"scope":10693,"src":"4917:118:56","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":10520,"nodeType":"Block","src":"5460:145:56","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10503,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10498,"src":"5474:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":10505,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10496,"src":"5491:3:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}],"id":10504,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10674,"src":"5483:7:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$10308_storage_ptr_$returns$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer) view returns (AddressArraySlotType)"}},"id":10506,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5483:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}},"id":10507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5496:7:56","memberName":"tLength","nodeType":"MemberAccess","referencedDeclaration":7151,"src":"5483:20:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressArraySlotType_$6864_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"function (AddressArraySlotType) view returns (uint256)"}},"id":10508,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5483:22:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5474:31:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10514,"nodeType":"IfStatement","src":"5470:87:56","trueBody":{"id":10513,"nodeType":"Block","src":"5507:50:56","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":10510,"name":"IndexOutOfBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10311,"src":"5528:16:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":10511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5528:18:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10512,"nodeType":"RevertStatement","src":"5521:25:56"}]}},{"expression":{"arguments":[{"id":10516,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10496,"src":"5587:3:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}},{"id":10517,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10498,"src":"5592:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10515,"name":"unchecked_at","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10540,"src":"5574:12:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$10308_storage_ptr_$_t_uint256_$returns$_t_address_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":10518,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5574:24:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":10502,"id":10519,"nodeType":"Return","src":"5567:31:56"}]},"documentation":{"id":10493,"nodeType":"StructuredDocumentation","src":"5041:331:56","text":" @dev Returns the value stored at position `index` in the set. O(1).\n Note that there are no guarantees on the ordering of values inside the\n array, and it may change when more values are added or removed.\n Requirements:\n - `index` must be strictly less than {length}."},"id":10521,"implemented":true,"kind":"function","modifiers":[],"name":"at","nameLocation":"5386:2:56","nodeType":"FunctionDefinition","parameters":{"id":10499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10496,"mutability":"mutable","name":"set","nameLocation":"5408:3:56","nodeType":"VariableDeclaration","scope":10521,"src":"5389:22:56","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"},"typeName":{"id":10495,"nodeType":"UserDefinedTypeName","pathNode":{"id":10494,"name":"AddressSet","nameLocations":["5389:10:56"],"nodeType":"IdentifierPath","referencedDeclaration":10308,"src":"5389:10:56"},"referencedDeclaration":10308,"src":"5389:10:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":10498,"mutability":"mutable","name":"index","nameLocation":"5421:5:56","nodeType":"VariableDeclaration","scope":10521,"src":"5413:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10497,"name":"uint256","nodeType":"ElementaryTypeName","src":"5413:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5388:39:56"},"returnParameters":{"id":10502,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10501,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10521,"src":"5451:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10500,"name":"address","nodeType":"ElementaryTypeName","src":"5451:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5450:9:56"},"scope":10693,"src":"5377:228:56","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":10539,"nodeType":"Block","src":"6010:56:56","statements":[{"expression":{"arguments":[{"id":10536,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10527,"src":"6053:5:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":10533,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10525,"src":"6035:3:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}],"id":10532,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10674,"src":"6027:7:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$10308_storage_ptr_$returns$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer) view returns (AddressArraySlotType)"}},"id":10534,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6027:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}},"id":10535,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6040:12:56","memberName":"tUncheckedAt","nodeType":"MemberAccess","referencedDeclaration":7266,"src":"6027:25:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressArraySlotType_$6864_$_t_uint256_$returns$_t_address_$attached_to$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"function (AddressArraySlotType,uint256) view returns (address)"}},"id":10537,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6027:32:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":10531,"id":10538,"nodeType":"Return","src":"6020:39:56"}]},"documentation":{"id":10522,"nodeType":"StructuredDocumentation","src":"5611:301:56","text":" @dev Same as {at}, except this doesn't revert if `index` it outside of the set (i.e. if it is equal or larger\n than {length}). O(1).\n This function performs one less storage read than {at}, but should only be used when `index` is known to be\n within bounds."},"id":10540,"implemented":true,"kind":"function","modifiers":[],"name":"unchecked_at","nameLocation":"5926:12:56","nodeType":"FunctionDefinition","parameters":{"id":10528,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10525,"mutability":"mutable","name":"set","nameLocation":"5958:3:56","nodeType":"VariableDeclaration","scope":10540,"src":"5939:22:56","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"},"typeName":{"id":10524,"nodeType":"UserDefinedTypeName","pathNode":{"id":10523,"name":"AddressSet","nameLocations":["5939:10:56"],"nodeType":"IdentifierPath","referencedDeclaration":10308,"src":"5939:10:56"},"referencedDeclaration":10308,"src":"5939:10:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":10527,"mutability":"mutable","name":"index","nameLocation":"5971:5:56","nodeType":"VariableDeclaration","scope":10540,"src":"5963:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10526,"name":"uint256","nodeType":"ElementaryTypeName","src":"5963:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5938:39:56"},"returnParameters":{"id":10531,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10530,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10540,"src":"6001:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10529,"name":"address","nodeType":"ElementaryTypeName","src":"6001:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6000:9:56"},"scope":10693,"src":"5917:149:56","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":10573,"nodeType":"Block","src":"6240:203:56","statements":[{"assignments":[10552],"declarations":[{"constant":false,"id":10552,"mutability":"mutable","name":"rawIndex","nameLocation":"6258:8:56","nodeType":"VariableDeclaration","scope":10573,"src":"6250:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10551,"name":"uint256","nodeType":"ElementaryTypeName","src":"6250:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10559,"initialValue":{"arguments":[{"id":10557,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10546,"src":"6288:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":10554,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10544,"src":"6278:3:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}],"id":10553,"name":"_indexes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10692,"src":"6269:8:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$10308_storage_ptr_$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer) view returns (AddressToUintMappingSlot)"}},"id":10555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6269:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":10556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6283:4:56","memberName":"tGet","nodeType":"MemberAccess","referencedDeclaration":6990,"src":"6269:18:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address) view returns (uint256)"}},"id":10558,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6269:25:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6250:44:56"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10560,"name":"rawIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10552,"src":"6309:8:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":10561,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6321:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6309:13:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10567,"nodeType":"IfStatement","src":"6305:68:56","trueBody":{"id":10566,"nodeType":"Block","src":"6324:49:56","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":10563,"name":"ElementNotFound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10314,"src":"6345:15:56","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":10564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6345:17:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":10565,"nodeType":"RevertStatement","src":"6338:24:56"}]}},{"id":10572,"nodeType":"UncheckedBlock","src":"6383:54:56","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10568,"name":"rawIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10552,"src":"6414:8:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":10569,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6425:1:56","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6414:12:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10550,"id":10571,"nodeType":"Return","src":"6407:19:56"}]}]},"documentation":{"id":10541,"nodeType":"StructuredDocumentation","src":"6072:75:56","text":"@dev Return the index of an element in the set, or revert if not found."},"id":10574,"implemented":true,"kind":"function","modifiers":[],"name":"indexOf","nameLocation":"6161:7:56","nodeType":"FunctionDefinition","parameters":{"id":10547,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10544,"mutability":"mutable","name":"set","nameLocation":"6188:3:56","nodeType":"VariableDeclaration","scope":10574,"src":"6169:22:56","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"},"typeName":{"id":10543,"nodeType":"UserDefinedTypeName","pathNode":{"id":10542,"name":"AddressSet","nameLocations":["6169:10:56"],"nodeType":"IdentifierPath","referencedDeclaration":10308,"src":"6169:10:56"},"referencedDeclaration":10308,"src":"6169:10:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":10546,"mutability":"mutable","name":"value","nameLocation":"6201:5:56","nodeType":"VariableDeclaration","scope":10574,"src":"6193:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10545,"name":"address","nodeType":"ElementaryTypeName","src":"6193:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6168:39:56"},"returnParameters":{"id":10550,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10549,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10574,"src":"6231:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10548,"name":"uint256","nodeType":"ElementaryTypeName","src":"6231:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6230:9:56"},"scope":10693,"src":"6152:291:56","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":10604,"nodeType":"Block","src":"6846:145:56","statements":[{"assignments":[10586],"declarations":[{"constant":false,"id":10586,"mutability":"mutable","name":"rawIndex","nameLocation":"6864:8:56","nodeType":"VariableDeclaration","scope":10604,"src":"6856:16:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10585,"name":"uint256","nodeType":"ElementaryTypeName","src":"6856:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10593,"initialValue":{"arguments":[{"id":10591,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10580,"src":"6894:5:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"id":10588,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10578,"src":"6884:3:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}],"id":10587,"name":"_indexes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10692,"src":"6875:8:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$10308_storage_ptr_$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer) view returns (AddressToUintMappingSlot)"}},"id":10589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6875:13:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":10590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6889:4:56","memberName":"tGet","nodeType":"MemberAccess","referencedDeclaration":6990,"src":"6875:18:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address) view returns (uint256)"}},"id":10592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6875:25:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6856:44:56"},{"id":10603,"nodeType":"UncheckedBlock","src":"6911:74:56","statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10594,"name":"rawIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10586,"src":"6942:8:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":10595,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6954:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6942:13:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10598,"name":"rawIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10586,"src":"6962:8:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":10599,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6973:1:56","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6962:12:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"6942:32:56","trueExpression":{"hexValue":"30","id":10597,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6958:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10584,"id":10602,"nodeType":"Return","src":"6935:39:56"}]}]},"documentation":{"id":10575,"nodeType":"StructuredDocumentation","src":"6449:294:56","text":" @dev Same as {indexOf}, except this doesn't revert if the element isn't present in the set.\n In this case, it returns 0.\n This function performs one less storage read than {indexOf}, but should only be used when `index` is known to be\n within bounds."},"id":10605,"implemented":true,"kind":"function","modifiers":[],"name":"unchecked_indexOf","nameLocation":"6757:17:56","nodeType":"FunctionDefinition","parameters":{"id":10581,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10578,"mutability":"mutable","name":"set","nameLocation":"6794:3:56","nodeType":"VariableDeclaration","scope":10605,"src":"6775:22:56","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"},"typeName":{"id":10577,"nodeType":"UserDefinedTypeName","pathNode":{"id":10576,"name":"AddressSet","nameLocations":["6775:10:56"],"nodeType":"IdentifierPath","referencedDeclaration":10308,"src":"6775:10:56"},"referencedDeclaration":10308,"src":"6775:10:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"}},"visibility":"internal"},{"constant":false,"id":10580,"mutability":"mutable","name":"value","nameLocation":"6807:5:56","nodeType":"VariableDeclaration","scope":10605,"src":"6799:13:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10579,"name":"address","nodeType":"ElementaryTypeName","src":"6799:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6774:39:56"},"returnParameters":{"id":10584,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10583,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10605,"src":"6837:7:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10582,"name":"uint256","nodeType":"ElementaryTypeName","src":"6837:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6836:9:56"},"scope":10693,"src":"6748:243:56","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":10654,"nodeType":"Block","src":"7194:205:56","statements":[{"assignments":[10616],"declarations":[{"constant":false,"id":10616,"mutability":"mutable","name":"len","nameLocation":"7212:3:56","nodeType":"VariableDeclaration","scope":10654,"src":"7204:11:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10615,"name":"uint256","nodeType":"ElementaryTypeName","src":"7204:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10622,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":10618,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10609,"src":"7226:3:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}],"id":10617,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10674,"src":"7218:7:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$10308_storage_ptr_$returns$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer) view returns (AddressArraySlotType)"}},"id":10619,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7218:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}},"id":10620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7231:7:56","memberName":"tLength","nodeType":"MemberAccess","referencedDeclaration":7151,"src":"7218:20:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressArraySlotType_$6864_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"function (AddressArraySlotType) view returns (uint256)"}},"id":10621,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7218:22:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7204:36:56"},{"expression":{"id":10629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10623,"name":"memValues","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10613,"src":"7250:9:56","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":10627,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10616,"src":"7276:3:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10626,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"7262:13:56","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":10624,"name":"address","nodeType":"ElementaryTypeName","src":"7266:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10625,"nodeType":"ArrayTypeName","src":"7266:9:56","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":10628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7262:18:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"7250:30:56","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":10630,"nodeType":"ExpressionStatement","src":"7250:30:56"},{"body":{"id":10652,"nodeType":"Block","src":"7325:68:56","statements":[{"expression":{"id":10650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":10641,"name":"memValues","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10613,"src":"7339:9:56","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":10643,"indexExpression":{"id":10642,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10632,"src":"7349:1:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7339:12:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":10648,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10632,"src":"7380:1:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":10645,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10609,"src":"7362:3:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}],"id":10644,"name":"_values","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10674,"src":"7354:7:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$10308_storage_ptr_$returns$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer) view returns (AddressArraySlotType)"}},"id":10646,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7354:12:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}},"id":10647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7367:12:56","memberName":"tUncheckedAt","nodeType":"MemberAccess","referencedDeclaration":7266,"src":"7354:25:56","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressArraySlotType_$6864_$_t_uint256_$returns$_t_address_$attached_to$_t_userDefinedValueType$_AddressArraySlotType_$6864_$","typeString":"function (AddressArraySlotType,uint256) view returns (address)"}},"id":10649,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7354:28:56","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7339:43:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10651,"nodeType":"ExpressionStatement","src":"7339:43:56"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":10635,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10632,"src":"7311:1:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":10636,"name":"len","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10616,"src":"7315:3:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7311:7:56","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10653,"initializationExpression":{"assignments":[10632],"declarations":[{"constant":false,"id":10632,"mutability":"mutable","name":"i","nameLocation":"7304:1:56","nodeType":"VariableDeclaration","scope":10653,"src":"7296:9:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10631,"name":"uint256","nodeType":"ElementaryTypeName","src":"7296:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":10634,"initialValue":{"hexValue":"30","id":10633,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7308:1:56","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"7296:13:56"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":10639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"7320:3:56","subExpression":{"id":10638,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10632,"src":"7322:1:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":10640,"nodeType":"ExpressionStatement","src":"7320:3:56"},"nodeType":"ForStatement","src":"7291:102:56"}]},"documentation":{"id":10606,"nodeType":"StructuredDocumentation","src":"7033:65:56","text":"@dev Return the raw contents of the underlying address array."},"id":10655,"implemented":true,"kind":"function","modifiers":[],"name":"values","nameLocation":"7112:6:56","nodeType":"FunctionDefinition","parameters":{"id":10610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10609,"mutability":"mutable","name":"set","nameLocation":"7138:3:56","nodeType":"VariableDeclaration","scope":10655,"src":"7119:22:56","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"},"typeName":{"id":10608,"nodeType":"UserDefinedTypeName","pathNode":{"id":10607,"name":"AddressSet","nameLocations":["7119:10:56"],"nodeType":"IdentifierPath","referencedDeclaration":10308,"src":"7119:10:56"},"referencedDeclaration":10308,"src":"7119:10:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"}},"visibility":"internal"}],"src":"7118:24:56"},"returnParameters":{"id":10614,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10613,"mutability":"mutable","name":"memValues","nameLocation":"7183:9:56","nodeType":"VariableDeclaration","scope":10655,"src":"7166:26:56","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":10611,"name":"address","nodeType":"ElementaryTypeName","src":"7166:7:56","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10612,"nodeType":"ArrayTypeName","src":"7166:9:56","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"7165:28:56"},"scope":10693,"src":"7103:296:56","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":10673,"nodeType":"Block","src":"7538:146:56","statements":[{"assignments":[10668],"declarations":[{"constant":false,"id":10668,"mutability":"mutable","name":"structValues","nameLocation":"7566:12:56","nodeType":"VariableDeclaration","scope":10673,"src":"7548:30:56","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":10666,"name":"address","nodeType":"ElementaryTypeName","src":"7548:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":10667,"nodeType":"ArrayTypeName","src":"7548:9:56","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":10671,"initialValue":{"expression":{"id":10669,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10658,"src":"7581:3:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}},"id":10670,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7585:8:56","memberName":"__values","nodeType":"MemberAccess","referencedDeclaration":10303,"src":"7581:12:56","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage","typeString":"address[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"7548:45:56"},{"AST":{"nativeSrc":"7629:49:56","nodeType":"YulBlock","src":"7629:49:56","statements":[{"nativeSrc":"7643:25:56","nodeType":"YulAssignment","src":"7643:25:56","value":{"name":"structValues.slot","nativeSrc":"7651:17:56","nodeType":"YulIdentifier","src":"7651:17:56"},"variableNames":[{"name":"slot","nativeSrc":"7643:4:56","nodeType":"YulIdentifier","src":"7643:4:56"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":10662,"isOffset":false,"isSlot":false,"src":"7643:4:56","valueSize":1},{"declaration":10668,"isOffset":false,"isSlot":true,"src":"7651:17:56","suffix":"slot","valueSize":1}],"flags":["memory-safe"],"id":10672,"nodeType":"InlineAssembly","src":"7604:74:56"}]},"id":10674,"implemented":true,"kind":"function","modifiers":[],"name":"_values","nameLocation":"7457:7:56","nodeType":"FunctionDefinition","parameters":{"id":10659,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10658,"mutability":"mutable","name":"set","nameLocation":"7484:3:56","nodeType":"VariableDeclaration","scope":10674,"src":"7465:22:56","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"},"typeName":{"id":10657,"nodeType":"UserDefinedTypeName","pathNode":{"id":10656,"name":"AddressSet","nameLocations":["7465:10:56"],"nodeType":"IdentifierPath","referencedDeclaration":10308,"src":"7465:10:56"},"referencedDeclaration":10308,"src":"7465:10:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"}},"visibility":"internal"}],"src":"7464:24:56"},"returnParameters":{"id":10663,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10662,"mutability":"mutable","name":"slot","nameLocation":"7532:4:56","nodeType":"VariableDeclaration","scope":10674,"src":"7511:25:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"},"typeName":{"id":10661,"nodeType":"UserDefinedTypeName","pathNode":{"id":10660,"name":"AddressArraySlotType","nameLocations":["7511:20:56"],"nodeType":"IdentifierPath","referencedDeclaration":6864,"src":"7511:20:56"},"referencedDeclaration":6864,"src":"7511:20:56","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressArraySlotType_$6864","typeString":"AddressArraySlotType"}},"visibility":"internal"}],"src":"7510:27:56"},"scope":10693,"src":"7448:236:56","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":10691,"nodeType":"Block","src":"7785:177:56","statements":[{"assignments":[10686],"declarations":[{"constant":false,"id":10686,"mutability":"mutable","name":"indexes","nameLocation":"7853:7:56","nodeType":"VariableDeclaration","scope":10691,"src":"7795:65:56","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":10685,"keyName":"addressKey","keyNameLocation":"7811:10:56","keyType":{"id":10683,"name":"address","nodeType":"ElementaryTypeName","src":"7803:7:56","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"7795:49:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"indexValue","valueNameLocation":"7833:10:56","valueType":{"id":10684,"name":"uint256","nodeType":"ElementaryTypeName","src":"7825:7:56","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"}],"id":10689,"initialValue":{"expression":{"id":10687,"name":"set","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10677,"src":"7863:3:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}},"id":10688,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7867:9:56","memberName":"__indexes","nodeType":"MemberAccess","referencedDeclaration":10307,"src":"7863:13:56","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"nodeType":"VariableDeclarationStatement","src":"7795:81:56"},{"AST":{"nativeSrc":"7912:44:56","nodeType":"YulBlock","src":"7912:44:56","statements":[{"nativeSrc":"7926:20:56","nodeType":"YulAssignment","src":"7926:20:56","value":{"name":"indexes.slot","nativeSrc":"7934:12:56","nodeType":"YulIdentifier","src":"7934:12:56"},"variableNames":[{"name":"slot","nativeSrc":"7926:4:56","nodeType":"YulIdentifier","src":"7926:4:56"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":10686,"isOffset":false,"isSlot":true,"src":"7934:12:56","suffix":"slot","valueSize":1},{"declaration":10681,"isOffset":false,"isSlot":false,"src":"7926:4:56","valueSize":1}],"flags":["memory-safe"],"id":10690,"nodeType":"InlineAssembly","src":"7887:69:56"}]},"id":10692,"implemented":true,"kind":"function","modifiers":[],"name":"_indexes","nameLocation":"7699:8:56","nodeType":"FunctionDefinition","parameters":{"id":10678,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10677,"mutability":"mutable","name":"set","nameLocation":"7727:3:56","nodeType":"VariableDeclaration","scope":10692,"src":"7708:22:56","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"},"typeName":{"id":10676,"nodeType":"UserDefinedTypeName","pathNode":{"id":10675,"name":"AddressSet","nameLocations":["7708:10:56"],"nodeType":"IdentifierPath","referencedDeclaration":10308,"src":"7708:10:56"},"referencedDeclaration":10308,"src":"7708:10:56","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"}},"visibility":"internal"}],"src":"7707:24:56"},"returnParameters":{"id":10682,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10681,"mutability":"mutable","name":"slot","nameLocation":"7779:4:56","nodeType":"VariableDeclaration","scope":10692,"src":"7754:29:56","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"},"typeName":{"id":10680,"nodeType":"UserDefinedTypeName","pathNode":{"id":10679,"name":"AddressToUintMappingSlot","nameLocations":["7754:24:56"],"nodeType":"IdentifierPath","referencedDeclaration":6860,"src":"7754:24:56"},"referencedDeclaration":6860,"src":"7754:24:56","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"visibility":"internal"}],"src":"7753:31:56"},"scope":10693,"src":"7690:272:56","stateMutability":"view","virtual":false,"visibility":"private"}],"scope":10694,"src":"1284:6680:56","usedErrors":[10311,10314],"usedEvents":[]}],"src":"33:7932:56"},"id":56},"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol","exportedSymbols":{"BalancerPoolToken":[11106],"ECDSA":[41837],"EIP712":[42064],"ERC165":[42162],"IERC20":[40109],"IERC20Metadata":[40135],"IERC20Permit":[40171],"IRateProvider":[263],"IVault":[3111],"Nonces":[40907],"VaultGuard":[28149]},"id":11107,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":10695,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:57"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","id":10697,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11107,"sourceUnit":40136,"src":"72:99:57","symbolAliases":[{"foreign":{"id":10696,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40135,"src":"81:14:57","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol","file":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol","id":10699,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11107,"sourceUnit":40172,"src":"172:95:57","symbolAliases":[{"foreign":{"id":10698,"name":"IERC20Permit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40171,"src":"181:12:57","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/introspection/ERC165.sol","file":"@openzeppelin/contracts/utils/introspection/ERC165.sol","id":10701,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11107,"sourceUnit":42163,"src":"268:80:57","symbolAliases":[{"foreign":{"id":10700,"name":"ERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42162,"src":"277:6:57","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/cryptography/EIP712.sol","file":"@openzeppelin/contracts/utils/cryptography/EIP712.sol","id":10703,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11107,"sourceUnit":42065,"src":"349:79:57","symbolAliases":[{"foreign":{"id":10702,"name":"EIP712","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42064,"src":"358:6:57","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/cryptography/ECDSA.sol","file":"@openzeppelin/contracts/utils/cryptography/ECDSA.sol","id":10705,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11107,"sourceUnit":41838,"src":"429:77:57","symbolAliases":[{"foreign":{"id":10704,"name":"ECDSA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41837,"src":"438:5:57","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":10707,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11107,"sourceUnit":40110,"src":"507:72:57","symbolAliases":[{"foreign":{"id":10706,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"516:6:57","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Nonces.sol","file":"@openzeppelin/contracts/utils/Nonces.sol","id":10709,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11107,"sourceUnit":40908,"src":"580:66:57","symbolAliases":[{"foreign":{"id":10708,"name":"Nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40907,"src":"589:6:57","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","id":10711,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11107,"sourceUnit":264,"src":"648:112:57","symbolAliases":[{"foreign":{"id":10710,"name":"IRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":263,"src":"657:13:57","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":10713,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11107,"sourceUnit":3112,"src":"761:81:57","symbolAliases":[{"foreign":{"id":10712,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"770:6:57","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","file":"./VaultGuard.sol","id":10715,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11107,"sourceUnit":28150,"src":"844:46:57","symbolAliases":[{"foreign":{"id":10714,"name":"VaultGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28149,"src":"853:10:57","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":10717,"name":"IERC20","nameLocations":["1299:6:57"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"1299:6:57"},"id":10718,"nodeType":"InheritanceSpecifier","src":"1299:6:57"},{"baseName":{"id":10719,"name":"IERC20Metadata","nameLocations":["1307:14:57"],"nodeType":"IdentifierPath","referencedDeclaration":40135,"src":"1307:14:57"},"id":10720,"nodeType":"InheritanceSpecifier","src":"1307:14:57"},{"baseName":{"id":10721,"name":"IERC20Permit","nameLocations":["1323:12:57"],"nodeType":"IdentifierPath","referencedDeclaration":40171,"src":"1323:12:57"},"id":10722,"nodeType":"InheritanceSpecifier","src":"1323:12:57"},{"baseName":{"id":10723,"name":"IRateProvider","nameLocations":["1337:13:57"],"nodeType":"IdentifierPath","referencedDeclaration":263,"src":"1337:13:57"},"id":10724,"nodeType":"InheritanceSpecifier","src":"1337:13:57"},{"baseName":{"id":10725,"name":"EIP712","nameLocations":["1352:6:57"],"nodeType":"IdentifierPath","referencedDeclaration":42064,"src":"1352:6:57"},"id":10726,"nodeType":"InheritanceSpecifier","src":"1352:6:57"},{"baseName":{"id":10727,"name":"Nonces","nameLocations":["1360:6:57"],"nodeType":"IdentifierPath","referencedDeclaration":40907,"src":"1360:6:57"},"id":10728,"nodeType":"InheritanceSpecifier","src":"1360:6:57"},{"baseName":{"id":10729,"name":"ERC165","nameLocations":["1368:6:57"],"nodeType":"IdentifierPath","referencedDeclaration":42162,"src":"1368:6:57"},"id":10730,"nodeType":"InheritanceSpecifier","src":"1368:6:57"},{"baseName":{"id":10731,"name":"VaultGuard","nameLocations":["1376:10:57"],"nodeType":"IdentifierPath","referencedDeclaration":28149,"src":"1376:10:57"},"id":10732,"nodeType":"InheritanceSpecifier","src":"1376:10:57"}],"canonicalName":"BalancerPoolToken","contractDependencies":[],"contractKind":"contract","documentation":{"id":10716,"nodeType":"StructuredDocumentation","src":"892:376:57","text":" @notice `BalancerPoolToken` is a fully ERC20-compatible token to be used as the base contract for Balancer Pools,\n with all the data and implementation delegated to the ERC20Multitoken contract.\n @dev Implementation of the ERC-20 Permit extension allowing approvals to be made via signatures, as defined in\n https://eips.ethereum.org/EIPS/eip-2612[ERC-2612]."},"fullyImplemented":true,"id":11106,"linearizedBaseContracts":[11106,28149,42162,42174,40907,42064,39858,263,40171,40135,40109],"name":"BalancerPoolToken","nameLocation":"1278:17:57","nodeType":"ContractDefinition","nodes":[{"constant":true,"functionSelector":"30adf81f","id":10737,"mutability":"constant","name":"PERMIT_TYPEHASH","nameLocation":"1417:15:57","nodeType":"VariableDeclaration","scope":11106,"src":"1393:145:57","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10733,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1393:7:57","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"5065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e6529","id":10735,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1453:84:57","typeDescriptions":{"typeIdentifier":"t_stringliteral_6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9","typeString":"literal_string \"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\""},"value":"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9","typeString":"literal_string \"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\""}],"id":10734,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1443:9:57","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":10736,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1443:95:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"documentation":{"id":10738,"nodeType":"StructuredDocumentation","src":"1545:135:57","text":" @notice Operation failed due to an expired permit signature.\n @param deadline The permit deadline that expired"},"errorSelector":"62791302","id":10742,"name":"ERC2612ExpiredSignature","nameLocation":"1691:23:57","nodeType":"ErrorDefinition","parameters":{"id":10741,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10740,"mutability":"mutable","name":"deadline","nameLocation":"1723:8:57","nodeType":"VariableDeclaration","scope":10742,"src":"1715:16:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10739,"name":"uint256","nodeType":"ElementaryTypeName","src":"1715:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1714:18:57"},"src":"1685:48:57"},{"documentation":{"id":10743,"nodeType":"StructuredDocumentation","src":"1739:237:57","text":" @notice Operation failed due to a non-matching signature.\n @param signer The address corresponding to the signature provider\n @param owner The address of the owner (expected value of the signature provider)"},"errorSelector":"4b800e46","id":10749,"name":"ERC2612InvalidSigner","nameLocation":"1987:20:57","nodeType":"ErrorDefinition","parameters":{"id":10748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10745,"mutability":"mutable","name":"signer","nameLocation":"2016:6:57","nodeType":"VariableDeclaration","scope":10749,"src":"2008:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10744,"name":"address","nodeType":"ElementaryTypeName","src":"2008:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10747,"mutability":"mutable","name":"owner","nameLocation":"2032:5:57","nodeType":"VariableDeclaration","scope":10749,"src":"2024:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10746,"name":"address","nodeType":"ElementaryTypeName","src":"2024:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2007:31:57"},"src":"1981:58:57"},{"constant":false,"id":10751,"mutability":"mutable","name":"_bptName","nameLocation":"2094:8:57","nodeType":"VariableDeclaration","scope":11106,"src":"2079:23:57","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":10750,"name":"string","nodeType":"ElementaryTypeName","src":"2079:6:57","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":10753,"mutability":"mutable","name":"_bptSymbol","nameLocation":"2123:10:57","nodeType":"VariableDeclaration","scope":11106,"src":"2108:25:57","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":10752,"name":"string","nodeType":"ElementaryTypeName","src":"2108:6:57","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"body":{"id":10778,"nodeType":"Block","src":"2255:67:57","statements":[{"expression":{"id":10772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10770,"name":"_bptName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10751,"src":"2265:8:57","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10771,"name":"bptName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10758,"src":"2276:7:57","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2265:18:57","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":10773,"nodeType":"ExpressionStatement","src":"2265:18:57"},{"expression":{"id":10776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":10774,"name":"_bptSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10753,"src":"2293:10:57","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":10775,"name":"bptSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10760,"src":"2306:9:57","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2293:22:57","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":10777,"nodeType":"ExpressionStatement","src":"2293:22:57"}]},"id":10779,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":10763,"name":"bptName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10758,"src":"2222:7:57","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"31","id":10764,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2231:3:57","typeDescriptions":{"typeIdentifier":"t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6","typeString":"literal_string \"1\""},"value":"1"}],"id":10765,"kind":"baseConstructorSpecifier","modifierName":{"id":10762,"name":"EIP712","nameLocations":["2215:6:57"],"nodeType":"IdentifierPath","referencedDeclaration":42064,"src":"2215:6:57"},"nodeType":"ModifierInvocation","src":"2215:20:57"},{"arguments":[{"id":10767,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10756,"src":"2247:6:57","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"id":10768,"kind":"baseConstructorSpecifier","modifierName":{"id":10766,"name":"VaultGuard","nameLocations":["2236:10:57"],"nodeType":"IdentifierPath","referencedDeclaration":28149,"src":"2236:10:57"},"nodeType":"ModifierInvocation","src":"2236:18:57"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":10761,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10756,"mutability":"mutable","name":"vault_","nameLocation":"2159:6:57","nodeType":"VariableDeclaration","scope":10779,"src":"2152:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":10755,"nodeType":"UserDefinedTypeName","pathNode":{"id":10754,"name":"IVault","nameLocations":["2152:6:57"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"2152:6:57"},"referencedDeclaration":3111,"src":"2152:6:57","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":10758,"mutability":"mutable","name":"bptName","nameLocation":"2181:7:57","nodeType":"VariableDeclaration","scope":10779,"src":"2167:21:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10757,"name":"string","nodeType":"ElementaryTypeName","src":"2167:6:57","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":10760,"mutability":"mutable","name":"bptSymbol","nameLocation":"2204:9:57","nodeType":"VariableDeclaration","scope":10779,"src":"2190:23:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10759,"name":"string","nodeType":"ElementaryTypeName","src":"2190:6:57","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2151:63:57"},"returnParameters":{"id":10769,"nodeType":"ParameterList","parameters":[],"src":"2255:0:57"},"scope":11106,"src":"2140:182:57","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[40122],"body":{"id":10787,"nodeType":"Block","src":"2417:32:57","statements":[{"expression":{"id":10785,"name":"_bptName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10751,"src":"2434:8:57","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":10784,"id":10786,"nodeType":"Return","src":"2427:15:57"}]},"documentation":{"id":10780,"nodeType":"StructuredDocumentation","src":"2328:30:57","text":"@inheritdoc IERC20Metadata"},"functionSelector":"06fdde03","id":10788,"implemented":true,"kind":"function","modifiers":[],"name":"name","nameLocation":"2372:4:57","nodeType":"FunctionDefinition","parameters":{"id":10781,"nodeType":"ParameterList","parameters":[],"src":"2376:2:57"},"returnParameters":{"id":10784,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10783,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10788,"src":"2402:13:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10782,"name":"string","nodeType":"ElementaryTypeName","src":"2402:6:57","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2401:15:57"},"scope":11106,"src":"2363:86:57","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[40128],"body":{"id":10796,"nodeType":"Block","src":"2546:34:57","statements":[{"expression":{"id":10794,"name":"_bptSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10753,"src":"2563:10:57","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":10793,"id":10795,"nodeType":"Return","src":"2556:17:57"}]},"documentation":{"id":10789,"nodeType":"StructuredDocumentation","src":"2455:30:57","text":"@inheritdoc IERC20Metadata"},"functionSelector":"95d89b41","id":10797,"implemented":true,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"2499:6:57","nodeType":"FunctionDefinition","parameters":{"id":10790,"nodeType":"ParameterList","parameters":[],"src":"2505:2:57"},"returnParameters":{"id":10793,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10792,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10797,"src":"2531:13:57","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":10791,"name":"string","nodeType":"ElementaryTypeName","src":"2531:6:57","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2530:15:57"},"scope":11106,"src":"2490:90:57","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[40134],"body":{"id":10805,"nodeType":"Block","src":"2671:65:57","statements":[{"expression":{"hexValue":"3138","id":10803,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2727:2:57","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"functionReturnParameters":10802,"id":10804,"nodeType":"Return","src":"2720:9:57"}]},"documentation":{"id":10798,"nodeType":"StructuredDocumentation","src":"2586:30:57","text":"@inheritdoc IERC20Metadata"},"functionSelector":"313ce567","id":10806,"implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"2630:8:57","nodeType":"FunctionDefinition","parameters":{"id":10799,"nodeType":"ParameterList","parameters":[],"src":"2638:2:57"},"returnParameters":{"id":10802,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10801,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10806,"src":"2664:5:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":10800,"name":"uint8","nodeType":"ElementaryTypeName","src":"2664:5:57","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"2663:7:57"},"scope":11106,"src":"2621:115:57","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[40058],"body":{"id":10820,"nodeType":"Block","src":"2822:57:57","statements":[{"expression":{"arguments":[{"arguments":[{"id":10816,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2866:4:57","typeDescriptions":{"typeIdentifier":"t_contract$_BalancerPoolToken_$11106","typeString":"contract BalancerPoolToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BalancerPoolToken_$11106","typeString":"contract BalancerPoolToken"}],"id":10815,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2858:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10814,"name":"address","nodeType":"ElementaryTypeName","src":"2858:7:57","typeDescriptions":{}}},"id":10817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2858:13:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":10812,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"2839:6:57","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":10813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2846:11:57","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":4229,"src":"2839:18:57","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":10818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2839:33:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10811,"id":10819,"nodeType":"Return","src":"2832:40:57"}]},"documentation":{"id":10807,"nodeType":"StructuredDocumentation","src":"2742:22:57","text":"@inheritdoc IERC20"},"functionSelector":"18160ddd","id":10821,"implemented":true,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"2778:11:57","nodeType":"FunctionDefinition","parameters":{"id":10808,"nodeType":"ParameterList","parameters":[],"src":"2789:2:57"},"returnParameters":{"id":10811,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10810,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10821,"src":"2813:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10809,"name":"uint256","nodeType":"ElementaryTypeName","src":"2813:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2812:9:57"},"scope":11106,"src":"2769:110:57","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":10829,"nodeType":"Block","src":"2934:30:57","statements":[{"expression":{"id":10827,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"2951:6:57","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"functionReturnParameters":10826,"id":10828,"nodeType":"Return","src":"2944:13:57"}]},"functionSelector":"8d928af8","id":10830,"implemented":true,"kind":"function","modifiers":[],"name":"getVault","nameLocation":"2894:8:57","nodeType":"FunctionDefinition","parameters":{"id":10822,"nodeType":"ParameterList","parameters":[],"src":"2902:2:57"},"returnParameters":{"id":10826,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10825,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10830,"src":"2926:6:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":10824,"nodeType":"UserDefinedTypeName","pathNode":{"id":10823,"name":"IVault","nameLocations":["2926:6:57"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"2926:6:57"},"referencedDeclaration":3111,"src":"2926:6:57","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"}],"src":"2925:8:57"},"scope":11106,"src":"2885:79:57","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[40066],"body":{"id":10847,"nodeType":"Block","src":"3065:64:57","statements":[{"expression":{"arguments":[{"arguments":[{"id":10842,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3107:4:57","typeDescriptions":{"typeIdentifier":"t_contract$_BalancerPoolToken_$11106","typeString":"contract BalancerPoolToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BalancerPoolToken_$11106","typeString":"contract BalancerPoolToken"}],"id":10841,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3099:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10840,"name":"address","nodeType":"ElementaryTypeName","src":"3099:7:57","typeDescriptions":{}}},"id":10843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3099:13:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10844,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10833,"src":"3114:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":10838,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"3082:6:57","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":10839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3089:9:57","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":4239,"src":"3082:16:57","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":10845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3082:40:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10837,"id":10846,"nodeType":"Return","src":"3075:47:57"}]},"documentation":{"id":10831,"nodeType":"StructuredDocumentation","src":"2970:22:57","text":"@inheritdoc IERC20"},"functionSelector":"70a08231","id":10848,"implemented":true,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"3006:9:57","nodeType":"FunctionDefinition","parameters":{"id":10834,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10833,"mutability":"mutable","name":"account","nameLocation":"3024:7:57","nodeType":"VariableDeclaration","scope":10848,"src":"3016:15:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10832,"name":"address","nodeType":"ElementaryTypeName","src":"3016:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3015:17:57"},"returnParameters":{"id":10837,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10836,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10848,"src":"3056:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10835,"name":"uint256","nodeType":"ElementaryTypeName","src":"3056:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3055:9:57"},"scope":11106,"src":"2997:132:57","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[40076],"body":{"id":10869,"nodeType":"Block","src":"3232:180:57","statements":[{"expression":{"arguments":[{"expression":{"id":10861,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3361:3:57","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":10862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3365:6:57","memberName":"sender","nodeType":"MemberAccess","src":"3361:10:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10863,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10851,"src":"3373:2:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10864,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10853,"src":"3377:6:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":10858,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"3345:6:57","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":10860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3352:8:57","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":4528,"src":"3345:15:57","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":10865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3345:39:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10866,"nodeType":"ExpressionStatement","src":"3345:39:57"},{"expression":{"hexValue":"74727565","id":10867,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3401:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":10857,"id":10868,"nodeType":"Return","src":"3394:11:57"}]},"documentation":{"id":10849,"nodeType":"StructuredDocumentation","src":"3135:22:57","text":"@inheritdoc IERC20"},"functionSelector":"a9059cbb","id":10870,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"3171:8:57","nodeType":"FunctionDefinition","parameters":{"id":10854,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10851,"mutability":"mutable","name":"to","nameLocation":"3188:2:57","nodeType":"VariableDeclaration","scope":10870,"src":"3180:10:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10850,"name":"address","nodeType":"ElementaryTypeName","src":"3180:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10853,"mutability":"mutable","name":"amount","nameLocation":"3200:6:57","nodeType":"VariableDeclaration","scope":10870,"src":"3192:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10852,"name":"uint256","nodeType":"ElementaryTypeName","src":"3192:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3179:28:57"},"returnParameters":{"id":10857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10856,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10870,"src":"3226:4:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10855,"name":"bool","nodeType":"ElementaryTypeName","src":"3226:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3225:6:57"},"scope":11106,"src":"3162:250:57","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[40086],"body":{"id":10890,"nodeType":"Block","src":"3528:71:57","statements":[{"expression":{"arguments":[{"arguments":[{"id":10884,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3570:4:57","typeDescriptions":{"typeIdentifier":"t_contract$_BalancerPoolToken_$11106","typeString":"contract BalancerPoolToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BalancerPoolToken_$11106","typeString":"contract BalancerPoolToken"}],"id":10883,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3562:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":10882,"name":"address","nodeType":"ElementaryTypeName","src":"3562:7:57","typeDescriptions":{}}},"id":10885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3562:13:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10886,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10873,"src":"3577:5:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10887,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10875,"src":"3584:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":10880,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"3545:6:57","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":10881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3552:9:57","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":4251,"src":"3545:16:57","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address,address) view external returns (uint256)"}},"id":10888,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3545:47:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":10879,"id":10889,"nodeType":"Return","src":"3538:54:57"}]},"documentation":{"id":10871,"nodeType":"StructuredDocumentation","src":"3418:22:57","text":"@inheritdoc IERC20"},"functionSelector":"dd62ed3e","id":10891,"implemented":true,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"3454:9:57","nodeType":"FunctionDefinition","parameters":{"id":10876,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10873,"mutability":"mutable","name":"owner","nameLocation":"3472:5:57","nodeType":"VariableDeclaration","scope":10891,"src":"3464:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10872,"name":"address","nodeType":"ElementaryTypeName","src":"3464:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10875,"mutability":"mutable","name":"spender","nameLocation":"3487:7:57","nodeType":"VariableDeclaration","scope":10891,"src":"3479:15:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10874,"name":"address","nodeType":"ElementaryTypeName","src":"3479:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3463:32:57"},"returnParameters":{"id":10879,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10878,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10891,"src":"3519:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10877,"name":"uint256","nodeType":"ElementaryTypeName","src":"3519:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3518:9:57"},"scope":11106,"src":"3445:154:57","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[40096],"body":{"id":10912,"nodeType":"Block","src":"3706:184:57","statements":[{"expression":{"arguments":[{"expression":{"id":10904,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3834:3:57","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":10905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3838:6:57","memberName":"sender","nodeType":"MemberAccess","src":"3834:10:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10906,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10894,"src":"3846:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10907,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10896,"src":"3855:6:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":10901,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"3819:6:57","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":10903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3826:7:57","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":4263,"src":"3819:14:57","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":10908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3819:43:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10909,"nodeType":"ExpressionStatement","src":"3819:43:57"},{"expression":{"hexValue":"74727565","id":10910,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3879:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":10900,"id":10911,"nodeType":"Return","src":"3872:11:57"}]},"documentation":{"id":10892,"nodeType":"StructuredDocumentation","src":"3605:22:57","text":"@inheritdoc IERC20"},"functionSelector":"095ea7b3","id":10913,"implemented":true,"kind":"function","modifiers":[],"name":"approve","nameLocation":"3641:7:57","nodeType":"FunctionDefinition","parameters":{"id":10897,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10894,"mutability":"mutable","name":"spender","nameLocation":"3657:7:57","nodeType":"VariableDeclaration","scope":10913,"src":"3649:15:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10893,"name":"address","nodeType":"ElementaryTypeName","src":"3649:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10896,"mutability":"mutable","name":"amount","nameLocation":"3674:6:57","nodeType":"VariableDeclaration","scope":10913,"src":"3666:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10895,"name":"uint256","nodeType":"ElementaryTypeName","src":"3666:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3648:33:57"},"returnParameters":{"id":10900,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10899,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10913,"src":"3700:4:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10898,"name":"bool","nodeType":"ElementaryTypeName","src":"3700:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3699:6:57"},"scope":11106,"src":"3632:258:57","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[40108],"body":{"id":10937,"nodeType":"Block","src":"4011:190:57","statements":[{"expression":{"arguments":[{"expression":{"id":10928,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4144:3:57","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":10929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4148:6:57","memberName":"sender","nodeType":"MemberAccess","src":"4144:10:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10930,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10916,"src":"4156:4:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10931,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10918,"src":"4162:2:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10932,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10920,"src":"4166:6:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":10925,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"4124:6:57","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":10927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4131:12:57","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":4542,"src":"4124:19:57","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,address,uint256) external returns (bool)"}},"id":10933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4124:49:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":10934,"nodeType":"ExpressionStatement","src":"4124:49:57"},{"expression":{"hexValue":"74727565","id":10935,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4190:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":10924,"id":10936,"nodeType":"Return","src":"4183:11:57"}]},"documentation":{"id":10914,"nodeType":"StructuredDocumentation","src":"3896:22:57","text":"@inheritdoc IERC20"},"functionSelector":"23b872dd","id":10938,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"3932:12:57","nodeType":"FunctionDefinition","parameters":{"id":10921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10916,"mutability":"mutable","name":"from","nameLocation":"3953:4:57","nodeType":"VariableDeclaration","scope":10938,"src":"3945:12:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10915,"name":"address","nodeType":"ElementaryTypeName","src":"3945:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10918,"mutability":"mutable","name":"to","nameLocation":"3967:2:57","nodeType":"VariableDeclaration","scope":10938,"src":"3959:10:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10917,"name":"address","nodeType":"ElementaryTypeName","src":"3959:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10920,"mutability":"mutable","name":"amount","nameLocation":"3979:6:57","nodeType":"VariableDeclaration","scope":10938,"src":"3971:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10919,"name":"uint256","nodeType":"ElementaryTypeName","src":"3971:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3944:42:57"},"returnParameters":{"id":10924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10923,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":10938,"src":"4005:4:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":10922,"name":"bool","nodeType":"ElementaryTypeName","src":"4005:4:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4004:6:57"},"scope":11106,"src":"3923:278:57","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":10956,"nodeType":"Block","src":"4927:48:57","statements":[{"eventCall":{"arguments":[{"id":10951,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10941,"src":"4951:4:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10952,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10943,"src":"4957:2:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10953,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10945,"src":"4961:6:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10950,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40043,"src":"4942:8:57","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10954,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4942:26:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10955,"nodeType":"EmitStatement","src":"4937:31:57"}]},"documentation":{"id":10939,"nodeType":"StructuredDocumentation","src":"4754:85:57","text":"@dev Emit the Transfer event. This function can only be called by the MultiToken."},"functionSelector":"23de6651","id":10957,"implemented":true,"kind":"function","modifiers":[{"id":10948,"kind":"modifierInvocation","modifierName":{"id":10947,"name":"onlyVault","nameLocations":["4917:9:57"],"nodeType":"IdentifierPath","referencedDeclaration":28128,"src":"4917:9:57"},"nodeType":"ModifierInvocation","src":"4917:9:57"}],"name":"emitTransfer","nameLocation":"4853:12:57","nodeType":"FunctionDefinition","parameters":{"id":10946,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10941,"mutability":"mutable","name":"from","nameLocation":"4874:4:57","nodeType":"VariableDeclaration","scope":10957,"src":"4866:12:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10940,"name":"address","nodeType":"ElementaryTypeName","src":"4866:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10943,"mutability":"mutable","name":"to","nameLocation":"4888:2:57","nodeType":"VariableDeclaration","scope":10957,"src":"4880:10:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10942,"name":"address","nodeType":"ElementaryTypeName","src":"4880:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10945,"mutability":"mutable","name":"amount","nameLocation":"4900:6:57","nodeType":"VariableDeclaration","scope":10957,"src":"4892:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10944,"name":"uint256","nodeType":"ElementaryTypeName","src":"4892:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4865:42:57"},"returnParameters":{"id":10949,"nodeType":"ParameterList","parameters":[],"src":"4927:0:57"},"scope":11106,"src":"4844:131:57","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":10975,"nodeType":"Block","src":"5160:54:57","statements":[{"eventCall":{"arguments":[{"id":10970,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10960,"src":"5184:5:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10971,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10962,"src":"5191:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":10972,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10964,"src":"5200:6:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10969,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40052,"src":"5175:8:57","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":10973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5175:32:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":10974,"nodeType":"EmitStatement","src":"5170:37:57"}]},"documentation":{"id":10958,"nodeType":"StructuredDocumentation","src":"4981:85:57","text":"@dev Emit the Approval event. This function can only be called by the MultiToken."},"functionSelector":"5687f2b8","id":10976,"implemented":true,"kind":"function","modifiers":[{"id":10967,"kind":"modifierInvocation","modifierName":{"id":10966,"name":"onlyVault","nameLocations":["5150:9:57"],"nodeType":"IdentifierPath","referencedDeclaration":28128,"src":"5150:9:57"},"nodeType":"ModifierInvocation","src":"5150:9:57"}],"name":"emitApproval","nameLocation":"5080:12:57","nodeType":"FunctionDefinition","parameters":{"id":10965,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10960,"mutability":"mutable","name":"owner","nameLocation":"5101:5:57","nodeType":"VariableDeclaration","scope":10976,"src":"5093:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10959,"name":"address","nodeType":"ElementaryTypeName","src":"5093:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10962,"mutability":"mutable","name":"spender","nameLocation":"5116:7:57","nodeType":"VariableDeclaration","scope":10976,"src":"5108:15:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10961,"name":"address","nodeType":"ElementaryTypeName","src":"5108:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10964,"mutability":"mutable","name":"amount","nameLocation":"5133:6:57","nodeType":"VariableDeclaration","scope":10976,"src":"5125:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10963,"name":"uint256","nodeType":"ElementaryTypeName","src":"5125:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5092:48:57"},"returnParameters":{"id":10968,"nodeType":"ParameterList","parameters":[],"src":"5160:0:57"},"scope":11106,"src":"5071:143:57","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[40156],"body":{"id":11053,"nodeType":"Block","src":"5442:545:57","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":10996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":10993,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"5510:5:57","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":10994,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5516:9:57","memberName":"timestamp","nodeType":"MemberAccess","src":"5510:15:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":10995,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10984,"src":"5528:8:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5510:26:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11002,"nodeType":"IfStatement","src":"5506:97:57","trueBody":{"id":11001,"nodeType":"Block","src":"5538:65:57","statements":[{"errorCall":{"arguments":[{"id":10998,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10984,"src":"5583:8:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":10997,"name":"ERC2612ExpiredSignature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10742,"src":"5559:23:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":10999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5559:33:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11000,"nodeType":"RevertStatement","src":"5552:40:57"}]}},{"assignments":[11004],"declarations":[{"constant":false,"id":11004,"mutability":"mutable","name":"structHash","nameLocation":"5621:10:57","nodeType":"VariableDeclaration","scope":11053,"src":"5613:18:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11003,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5613:7:57","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":11018,"initialValue":{"arguments":[{"arguments":[{"id":11008,"name":"PERMIT_TYPEHASH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10737,"src":"5655:15:57","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11009,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10978,"src":"5672:5:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11010,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10980,"src":"5679:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11011,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10982,"src":"5688:6:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":11013,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10978,"src":"5706:5:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":11012,"name":"_useNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40881,"src":"5696:9:57","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$","typeString":"function (address) returns (uint256)"}},"id":11014,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5696:16:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11015,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10984,"src":"5714:8:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11006,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5644:3:57","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":11007,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5648:6:57","memberName":"encode","nodeType":"MemberAccess","src":"5644:10:57","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":11016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5644:79:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":11005,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"5634:9:57","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":11017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5634:90:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5613:111:57"},{"assignments":[11020],"declarations":[{"constant":false,"id":11020,"mutability":"mutable","name":"hash","nameLocation":"5743:4:57","nodeType":"VariableDeclaration","scope":11053,"src":"5735:12:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11019,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5735:7:57","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":11024,"initialValue":{"arguments":[{"id":11022,"name":"structHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11004,"src":"5767:10:57","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":11021,"name":"_hashTypedDataV4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41997,"src":"5750:16:57","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) view returns (bytes32)"}},"id":11023,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5750:28:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5735:43:57"},{"assignments":[11026],"declarations":[{"constant":false,"id":11026,"mutability":"mutable","name":"signer","nameLocation":"5797:6:57","nodeType":"VariableDeclaration","scope":11053,"src":"5789:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11025,"name":"address","nodeType":"ElementaryTypeName","src":"5789:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":11034,"initialValue":{"arguments":[{"id":11029,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11020,"src":"5820:4:57","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11030,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10986,"src":"5826:1:57","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":11031,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10988,"src":"5829:1:57","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":11032,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10990,"src":"5832:1:57","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":11027,"name":"ECDSA","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41837,"src":"5806:5:57","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ECDSA_$41837_$","typeString":"type(library ECDSA)"}},"id":11028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5812:7:57","memberName":"recover","nodeType":"MemberAccess","referencedDeclaration":41787,"src":"5806:13:57","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32,uint8,bytes32,bytes32) pure returns (address)"}},"id":11033,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5806:28:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5789:45:57"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":11037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11035,"name":"signer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11026,"src":"5848:6:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":11036,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10978,"src":"5858:5:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5848:15:57","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11044,"nodeType":"IfStatement","src":"5844:88:57","trueBody":{"id":11043,"nodeType":"Block","src":"5865:67:57","statements":[{"errorCall":{"arguments":[{"id":11039,"name":"signer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11026,"src":"5907:6:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11040,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10978,"src":"5915:5:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":11038,"name":"ERC2612InvalidSigner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10749,"src":"5886:20:57","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address) pure returns (error)"}},"id":11041,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5886:35:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":11042,"nodeType":"RevertStatement","src":"5879:42:57"}]}},{"expression":{"arguments":[{"id":11048,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10978,"src":"5957:5:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11049,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10980,"src":"5964:7:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":11050,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10982,"src":"5973:6:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11045,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"5942:6:57","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":11047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5949:7:57","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":4263,"src":"5942:14:57","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":11051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5942:38:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11052,"nodeType":"ExpressionStatement","src":"5942:38:57"}]},"functionSelector":"d505accf","id":11054,"implemented":true,"kind":"function","modifiers":[],"name":"permit","nameLocation":"5261:6:57","nodeType":"FunctionDefinition","parameters":{"id":10991,"nodeType":"ParameterList","parameters":[{"constant":false,"id":10978,"mutability":"mutable","name":"owner","nameLocation":"5285:5:57","nodeType":"VariableDeclaration","scope":11054,"src":"5277:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10977,"name":"address","nodeType":"ElementaryTypeName","src":"5277:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10980,"mutability":"mutable","name":"spender","nameLocation":"5308:7:57","nodeType":"VariableDeclaration","scope":11054,"src":"5300:15:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":10979,"name":"address","nodeType":"ElementaryTypeName","src":"5300:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":10982,"mutability":"mutable","name":"amount","nameLocation":"5333:6:57","nodeType":"VariableDeclaration","scope":11054,"src":"5325:14:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10981,"name":"uint256","nodeType":"ElementaryTypeName","src":"5325:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10984,"mutability":"mutable","name":"deadline","nameLocation":"5357:8:57","nodeType":"VariableDeclaration","scope":11054,"src":"5349:16:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":10983,"name":"uint256","nodeType":"ElementaryTypeName","src":"5349:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":10986,"mutability":"mutable","name":"v","nameLocation":"5381:1:57","nodeType":"VariableDeclaration","scope":11054,"src":"5375:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":10985,"name":"uint8","nodeType":"ElementaryTypeName","src":"5375:5:57","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":10988,"mutability":"mutable","name":"r","nameLocation":"5400:1:57","nodeType":"VariableDeclaration","scope":11054,"src":"5392:9:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10987,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5392:7:57","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":10990,"mutability":"mutable","name":"s","nameLocation":"5419:1:57","nodeType":"VariableDeclaration","scope":11054,"src":"5411:9:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":10989,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5411:7:57","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5267:159:57"},"returnParameters":{"id":10992,"nodeType":"ParameterList","parameters":[],"src":"5442:0:57"},"scope":11106,"src":"5252:735:57","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[40164,40866],"body":{"id":11069,"nodeType":"Block","src":"6125:43:57","statements":[{"expression":{"arguments":[{"id":11066,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11056,"src":"6155:5:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":11064,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"6142:5:57","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_BalancerPoolToken_$11106_$","typeString":"type(contract super BalancerPoolToken)"}},"id":11065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6148:6:57","memberName":"nonces","nodeType":"MemberAccess","referencedDeclaration":40866,"src":"6142:12:57","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":11067,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6142:19:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11063,"id":11068,"nodeType":"Return","src":"6135:26:57"}]},"functionSelector":"7ecebe00","id":11070,"implemented":true,"kind":"function","modifiers":[],"name":"nonces","nameLocation":"6034:6:57","nodeType":"FunctionDefinition","overrides":{"id":11060,"nodeType":"OverrideSpecifier","overrides":[{"id":11058,"name":"IERC20Permit","nameLocations":["6085:12:57"],"nodeType":"IdentifierPath","referencedDeclaration":40171,"src":"6085:12:57"},{"id":11059,"name":"Nonces","nameLocations":["6099:6:57"],"nodeType":"IdentifierPath","referencedDeclaration":40907,"src":"6099:6:57"}],"src":"6076:30:57"},"parameters":{"id":11057,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11056,"mutability":"mutable","name":"owner","nameLocation":"6049:5:57","nodeType":"VariableDeclaration","scope":11070,"src":"6041:13:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11055,"name":"address","nodeType":"ElementaryTypeName","src":"6041:7:57","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6040:15:57"},"returnParameters":{"id":11063,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11062,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11070,"src":"6116:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11061,"name":"uint256","nodeType":"ElementaryTypeName","src":"6116:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6115:9:57"},"scope":11106,"src":"6025:143:57","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":11079,"nodeType":"Block","src":"6319:38:57","statements":[{"expression":{"arguments":[{"expression":{"id":11075,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6339:3:57","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":11076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6343:6:57","memberName":"sender","nodeType":"MemberAccess","src":"6339:10:57","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":11074,"name":"_useNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40881,"src":"6329:9:57","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$","typeString":"function (address) returns (uint256)"}},"id":11077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6329:21:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11078,"nodeType":"ExpressionStatement","src":"6329:21:57"}]},"documentation":{"id":11071,"nodeType":"StructuredDocumentation","src":"6174:105:57","text":"@notice Increment the sender's nonce to revoke any currently granted (but not yet executed) `permit`."},"functionSelector":"627cdcb9","id":11080,"implemented":true,"kind":"function","modifiers":[],"name":"incrementNonce","nameLocation":"6293:14:57","nodeType":"FunctionDefinition","parameters":{"id":11072,"nodeType":"ParameterList","parameters":[],"src":"6307:2:57"},"returnParameters":{"id":11073,"nodeType":"ParameterList","parameters":[],"src":"6319:0:57"},"scope":11106,"src":"6284:73:57","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[40170],"body":{"id":11088,"nodeType":"Block","src":"6516:44:57","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":11085,"name":"_domainSeparatorV4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41960,"src":"6533:18:57","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":11086,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6533:20:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":11084,"id":11087,"nodeType":"Return","src":"6526:27:57"}]},"functionSelector":"3644e515","id":11089,"implemented":true,"kind":"function","modifiers":[],"name":"DOMAIN_SEPARATOR","nameLocation":"6457:16:57","nodeType":"FunctionDefinition","parameters":{"id":11081,"nodeType":"ParameterList","parameters":[],"src":"6473:2:57"},"returnParameters":{"id":11084,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11083,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11089,"src":"6507:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":11082,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6507:7:57","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6506:9:57"},"scope":11106,"src":"6448:112:57","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[262],"body":{"id":11104,"nodeType":"Block","src":"6956:60:57","statements":[{"expression":{"arguments":[{"arguments":[{"id":11100,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7003:4:57","typeDescriptions":{"typeIdentifier":"t_contract$_BalancerPoolToken_$11106","typeString":"contract BalancerPoolToken"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BalancerPoolToken_$11106","typeString":"contract BalancerPoolToken"}],"id":11099,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6995:7:57","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":11098,"name":"address","nodeType":"ElementaryTypeName","src":"6995:7:57","typeDescriptions":{}}},"id":11101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6995:13:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":11095,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10830,"src":"6973:8:57","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$3111_$","typeString":"function () view returns (contract IVault)"}},"id":11096,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6973:10:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":11097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6984:10:57","memberName":"getBptRate","nodeType":"MemberAccess","referencedDeclaration":4221,"src":"6973:21:57","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":11102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6973:36:57","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":11094,"id":11103,"nodeType":"Return","src":"6966:43:57"}]},"documentation":{"id":11090,"nodeType":"StructuredDocumentation","src":"6566:328:57","text":" @notice Get the BPT rate, which is defined as: pool invariant/total supply.\n @dev The VaultExtension contract defines a default implementation (`getBptRate`) to calculate the rate\n of any given pool, which should be sufficient in nearly all cases.\n @return rate Rate of the pool's BPT"},"functionSelector":"679aefce","id":11105,"implemented":true,"kind":"function","modifiers":[],"name":"getRate","nameLocation":"6908:7:57","nodeType":"FunctionDefinition","parameters":{"id":11091,"nodeType":"ParameterList","parameters":[],"src":"6915:2:57"},"returnParameters":{"id":11094,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11093,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11105,"src":"6947:7:57","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11092,"name":"uint256","nodeType":"ElementaryTypeName","src":"6947:7:57","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6946:9:57"},"scope":11106,"src":"6899:117:57","stateMutability":"view","virtual":true,"visibility":"public"}],"scope":11107,"src":"1269:5749:57","usedErrors":[3640,10742,10749,40849,40921,40923,41500,41505,41510],"usedEvents":[39838,40043,40052]}],"src":"46:6973:57"},"id":57},"@balancer-labs/v3-vault/contracts/BaseHooks.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/BaseHooks.sol","exportedSymbols":{"AddLiquidityKind":[4807],"AfterSwapParams":[4801],"BaseHooks":[11349],"HookFlags":[4627],"IHooks":[2026],"LiquidityManagement":[4580],"PoolSwapParams":[4772],"RemoveLiquidityKind":[4828],"TokenConfig":[4694]},"id":11350,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":11108,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:58"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","id":11110,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11350,"sourceUnit":2027,"src":"72:81:58","symbolAliases":[{"foreign":{"id":11109,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2026,"src":"81:6:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":11118,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":11350,"sourceUnit":4872,"src":"154:222:58","symbolAliases":[{"foreign":{"id":11111,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4807,"src":"167:16:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":11112,"name":"HookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4627,"src":"189:9:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":11113,"name":"LiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4580,"src":"204:19:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":11114,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4828,"src":"229:19:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":11115,"name":"TokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4694,"src":"254:11:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":11116,"name":"PoolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4772,"src":"271:14:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":11117,"name":"AfterSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4801,"src":"291:15:58","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":11120,"name":"IHooks","nameLocations":["753:6:58"],"nodeType":"IdentifierPath","referencedDeclaration":2026,"src":"753:6:58"},"id":11121,"nodeType":"InheritanceSpecifier","src":"753:6:58"}],"canonicalName":"BaseHooks","contractDependencies":[],"contractKind":"contract","documentation":{"id":11119,"nodeType":"StructuredDocumentation","src":"378:343:58","text":" @notice Base for pool hooks contracts.\n @dev Hook contracts that only implement a subset of callbacks can inherit from here instead of IHooks,\n and only override what they need. `VaultGuard` allows use of the `onlyVault` modifier, which isn't used\n in this abstract contract, but should be used in real derived hook contracts."},"fullyImplemented":false,"id":11349,"linearizedBaseContracts":[11349,2026],"name":"BaseHooks","nameLocation":"740:9:58","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[1853],"body":{"id":11140,"nodeType":"Block","src":"951:126:58","statements":[{"expression":{"hexValue":"66616c7365","id":11138,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1065:5:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":11137,"id":11139,"nodeType":"Return","src":"1058:12:58"}]},"documentation":{"id":11122,"nodeType":"StructuredDocumentation","src":"766:22:58","text":"@inheritdoc IHooks"},"functionSelector":"0b89f182","id":11141,"implemented":true,"kind":"function","modifiers":[],"name":"onRegister","nameLocation":"802:10:58","nodeType":"FunctionDefinition","parameters":{"id":11134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11124,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11141,"src":"822:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11123,"name":"address","nodeType":"ElementaryTypeName","src":"822:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11126,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11141,"src":"839:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11125,"name":"address","nodeType":"ElementaryTypeName","src":"839:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11130,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11141,"src":"856:20:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":11128,"nodeType":"UserDefinedTypeName","pathNode":{"id":11127,"name":"TokenConfig","nameLocations":["856:11:58"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"856:11:58"},"referencedDeclaration":4694,"src":"856:11:58","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":11129,"nodeType":"ArrayTypeName","src":"856:13:58","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":11133,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11141,"src":"886:28:58","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":11132,"nodeType":"UserDefinedTypeName","pathNode":{"id":11131,"name":"LiquidityManagement","nameLocations":["886:19:58"],"nodeType":"IdentifierPath","referencedDeclaration":4580,"src":"886:19:58"},"referencedDeclaration":4580,"src":"886:19:58","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"812:108:58"},"returnParameters":{"id":11137,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11136,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11141,"src":"945:4:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11135,"name":"bool","nodeType":"ElementaryTypeName","src":"945:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"944:6:58"},"scope":11349,"src":"793:284:58","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[1860],"documentation":{"id":11142,"nodeType":"StructuredDocumentation","src":"1083:22:58","text":"@inheritdoc IHooks"},"functionSelector":"d77153a7","id":11148,"implemented":false,"kind":"function","modifiers":[],"name":"getHookFlags","nameLocation":"1119:12:58","nodeType":"FunctionDefinition","parameters":{"id":11143,"nodeType":"ParameterList","parameters":[],"src":"1131:2:58"},"returnParameters":{"id":11147,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11146,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11148,"src":"1163:16:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_memory_ptr","typeString":"struct HookFlags"},"typeName":{"id":11145,"nodeType":"UserDefinedTypeName","pathNode":{"id":11144,"name":"HookFlags","nameLocations":["1163:9:58"],"nodeType":"IdentifierPath","referencedDeclaration":4627,"src":"1163:9:58"},"referencedDeclaration":4627,"src":"1163:9:58","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_storage_ptr","typeString":"struct HookFlags"}},"visibility":"internal"}],"src":"1162:18:58"},"scope":11349,"src":"1110:71:58","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1871],"body":{"id":11161,"nodeType":"Block","src":"1304:29:58","statements":[{"expression":{"hexValue":"66616c7365","id":11159,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1321:5:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":11158,"id":11160,"nodeType":"Return","src":"1314:12:58"}]},"documentation":{"id":11149,"nodeType":"StructuredDocumentation","src":"1187:22:58","text":"@inheritdoc IHooks"},"functionSelector":"1c149e28","id":11162,"implemented":true,"kind":"function","modifiers":[],"name":"onBeforeInitialize","nameLocation":"1223:18:58","nodeType":"FunctionDefinition","parameters":{"id":11155,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11152,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11162,"src":"1242:16:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11150,"name":"uint256","nodeType":"ElementaryTypeName","src":"1242:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11151,"nodeType":"ArrayTypeName","src":"1242:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11154,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11162,"src":"1260:12:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11153,"name":"bytes","nodeType":"ElementaryTypeName","src":"1260:5:58","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1241:32:58"},"returnParameters":{"id":11158,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11157,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11162,"src":"1298:4:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11156,"name":"bool","nodeType":"ElementaryTypeName","src":"1298:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1297:6:58"},"scope":11349,"src":"1214:119:58","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[1884],"body":{"id":11177,"nodeType":"Block","src":"1464:29:58","statements":[{"expression":{"hexValue":"66616c7365","id":11175,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1481:5:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":11174,"id":11176,"nodeType":"Return","src":"1474:12:58"}]},"documentation":{"id":11163,"nodeType":"StructuredDocumentation","src":"1339:22:58","text":"@inheritdoc IHooks"},"functionSelector":"38be241d","id":11178,"implemented":true,"kind":"function","modifiers":[],"name":"onAfterInitialize","nameLocation":"1375:17:58","nodeType":"FunctionDefinition","parameters":{"id":11171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11166,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11178,"src":"1393:16:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11164,"name":"uint256","nodeType":"ElementaryTypeName","src":"1393:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11165,"nodeType":"ArrayTypeName","src":"1393:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11168,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11178,"src":"1411:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11167,"name":"uint256","nodeType":"ElementaryTypeName","src":"1411:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11170,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11178,"src":"1420:12:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11169,"name":"bytes","nodeType":"ElementaryTypeName","src":"1420:5:58","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1392:41:58"},"returnParameters":{"id":11174,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11173,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11178,"src":"1458:4:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11172,"name":"bool","nodeType":"ElementaryTypeName","src":"1458:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1457:6:58"},"scope":11349,"src":"1366:127:58","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[1907],"body":{"id":11203,"nodeType":"Block","src":"1743:29:58","statements":[{"expression":{"hexValue":"66616c7365","id":11201,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1760:5:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":11200,"id":11202,"nodeType":"Return","src":"1753:12:58"}]},"documentation":{"id":11179,"nodeType":"StructuredDocumentation","src":"1499:22:58","text":"@inheritdoc IHooks"},"functionSelector":"45421ec7","id":11204,"implemented":true,"kind":"function","modifiers":[],"name":"onBeforeAddLiquidity","nameLocation":"1535:20:58","nodeType":"FunctionDefinition","parameters":{"id":11197,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11181,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11204,"src":"1565:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11180,"name":"address","nodeType":"ElementaryTypeName","src":"1565:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11183,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11204,"src":"1582:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11182,"name":"address","nodeType":"ElementaryTypeName","src":"1582:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11186,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11204,"src":"1599:16:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},"typeName":{"id":11185,"nodeType":"UserDefinedTypeName","pathNode":{"id":11184,"name":"AddLiquidityKind","nameLocations":["1599:16:58"],"nodeType":"IdentifierPath","referencedDeclaration":4807,"src":"1599:16:58"},"referencedDeclaration":4807,"src":"1599:16:58","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":11189,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11204,"src":"1625:16:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11187,"name":"uint256","nodeType":"ElementaryTypeName","src":"1625:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11188,"nodeType":"ArrayTypeName","src":"1625:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11191,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11204,"src":"1651:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11190,"name":"uint256","nodeType":"ElementaryTypeName","src":"1651:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11194,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11204,"src":"1668:16:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11192,"name":"uint256","nodeType":"ElementaryTypeName","src":"1668:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11193,"nodeType":"ArrayTypeName","src":"1668:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11196,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11204,"src":"1694:12:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11195,"name":"bytes","nodeType":"ElementaryTypeName","src":"1694:5:58","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1555:157:58"},"returnParameters":{"id":11200,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11199,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11204,"src":"1737:4:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11198,"name":"bool","nodeType":"ElementaryTypeName","src":"1737:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1736:6:58"},"scope":11349,"src":"1526:246:58","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[1936],"body":{"id":11237,"nodeType":"Block","src":"2078:45:58","statements":[{"expression":{"components":[{"hexValue":"66616c7365","id":11233,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2096:5:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":11234,"name":"amountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11218,"src":"2103:12:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"id":11235,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2095:21:58","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(bool,uint256[] memory)"}},"functionReturnParameters":11232,"id":11236,"nodeType":"Return","src":"2088:28:58"}]},"documentation":{"id":11205,"nodeType":"StructuredDocumentation","src":"1778:22:58","text":"@inheritdoc IHooks"},"functionSelector":"976907cc","id":11238,"implemented":true,"kind":"function","modifiers":[],"name":"onAfterAddLiquidity","nameLocation":"1814:19:58","nodeType":"FunctionDefinition","parameters":{"id":11226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11207,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11238,"src":"1843:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11206,"name":"address","nodeType":"ElementaryTypeName","src":"1843:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11209,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11238,"src":"1860:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11208,"name":"address","nodeType":"ElementaryTypeName","src":"1860:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11212,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11238,"src":"1877:16:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},"typeName":{"id":11211,"nodeType":"UserDefinedTypeName","pathNode":{"id":11210,"name":"AddLiquidityKind","nameLocations":["1877:16:58"],"nodeType":"IdentifierPath","referencedDeclaration":4807,"src":"1877:16:58"},"referencedDeclaration":4807,"src":"1877:16:58","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":11215,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11238,"src":"1903:16:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11213,"name":"uint256","nodeType":"ElementaryTypeName","src":"1903:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11214,"nodeType":"ArrayTypeName","src":"1903:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11218,"mutability":"mutable","name":"amountsInRaw","nameLocation":"1946:12:58","nodeType":"VariableDeclaration","scope":11238,"src":"1929:29:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11216,"name":"uint256","nodeType":"ElementaryTypeName","src":"1929:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11217,"nodeType":"ArrayTypeName","src":"1929:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11220,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11238,"src":"1968:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11219,"name":"uint256","nodeType":"ElementaryTypeName","src":"1968:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11223,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11238,"src":"1985:16:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11221,"name":"uint256","nodeType":"ElementaryTypeName","src":"1985:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11222,"nodeType":"ArrayTypeName","src":"1985:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11225,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11238,"src":"2011:12:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11224,"name":"bytes","nodeType":"ElementaryTypeName","src":"2011:5:58","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1833:196:58"},"returnParameters":{"id":11232,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11228,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11238,"src":"2054:4:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11227,"name":"bool","nodeType":"ElementaryTypeName","src":"2054:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11231,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11238,"src":"2060:16:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11229,"name":"uint256","nodeType":"ElementaryTypeName","src":"2060:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11230,"nodeType":"ArrayTypeName","src":"2060:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"2053:24:58"},"scope":11349,"src":"1805:318:58","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[1959],"body":{"id":11263,"nodeType":"Block","src":"2379:29:58","statements":[{"expression":{"hexValue":"66616c7365","id":11261,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2396:5:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":11260,"id":11262,"nodeType":"Return","src":"2389:12:58"}]},"documentation":{"id":11239,"nodeType":"StructuredDocumentation","src":"2129:22:58","text":"@inheritdoc IHooks"},"functionSelector":"ba5f9f40","id":11264,"implemented":true,"kind":"function","modifiers":[],"name":"onBeforeRemoveLiquidity","nameLocation":"2165:23:58","nodeType":"FunctionDefinition","parameters":{"id":11257,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11241,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11264,"src":"2198:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11240,"name":"address","nodeType":"ElementaryTypeName","src":"2198:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11243,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11264,"src":"2215:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11242,"name":"address","nodeType":"ElementaryTypeName","src":"2215:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11246,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11264,"src":"2232:19:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":11245,"nodeType":"UserDefinedTypeName","pathNode":{"id":11244,"name":"RemoveLiquidityKind","nameLocations":["2232:19:58"],"nodeType":"IdentifierPath","referencedDeclaration":4828,"src":"2232:19:58"},"referencedDeclaration":4828,"src":"2232:19:58","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":11248,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11264,"src":"2261:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11247,"name":"uint256","nodeType":"ElementaryTypeName","src":"2261:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11251,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11264,"src":"2278:16:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11249,"name":"uint256","nodeType":"ElementaryTypeName","src":"2278:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11250,"nodeType":"ArrayTypeName","src":"2278:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11254,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11264,"src":"2304:16:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11252,"name":"uint256","nodeType":"ElementaryTypeName","src":"2304:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11253,"nodeType":"ArrayTypeName","src":"2304:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11256,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11264,"src":"2330:12:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11255,"name":"bytes","nodeType":"ElementaryTypeName","src":"2330:5:58","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2188:160:58"},"returnParameters":{"id":11260,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11259,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11264,"src":"2373:4:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11258,"name":"bool","nodeType":"ElementaryTypeName","src":"2373:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2372:6:58"},"scope":11349,"src":"2156:252:58","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[1988],"body":{"id":11297,"nodeType":"Block","src":"2721:46:58","statements":[{"expression":{"components":[{"hexValue":"66616c7365","id":11293,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2739:5:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":11294,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11280,"src":"2746:13:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"id":11295,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2738:22:58","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(bool,uint256[] memory)"}},"functionReturnParameters":11292,"id":11296,"nodeType":"Return","src":"2731:29:58"}]},"documentation":{"id":11265,"nodeType":"StructuredDocumentation","src":"2414:22:58","text":"@inheritdoc IHooks"},"functionSelector":"2754888d","id":11298,"implemented":true,"kind":"function","modifiers":[],"name":"onAfterRemoveLiquidity","nameLocation":"2450:22:58","nodeType":"FunctionDefinition","parameters":{"id":11286,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11267,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11298,"src":"2482:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11266,"name":"address","nodeType":"ElementaryTypeName","src":"2482:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11269,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11298,"src":"2499:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11268,"name":"address","nodeType":"ElementaryTypeName","src":"2499:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11272,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11298,"src":"2516:19:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":11271,"nodeType":"UserDefinedTypeName","pathNode":{"id":11270,"name":"RemoveLiquidityKind","nameLocations":["2516:19:58"],"nodeType":"IdentifierPath","referencedDeclaration":4828,"src":"2516:19:58"},"referencedDeclaration":4828,"src":"2516:19:58","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":11274,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11298,"src":"2545:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11273,"name":"uint256","nodeType":"ElementaryTypeName","src":"2545:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11277,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11298,"src":"2562:16:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11275,"name":"uint256","nodeType":"ElementaryTypeName","src":"2562:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11276,"nodeType":"ArrayTypeName","src":"2562:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11280,"mutability":"mutable","name":"amountsOutRaw","nameLocation":"2605:13:58","nodeType":"VariableDeclaration","scope":11298,"src":"2588:30:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11278,"name":"uint256","nodeType":"ElementaryTypeName","src":"2588:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11279,"nodeType":"ArrayTypeName","src":"2588:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11283,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11298,"src":"2628:16:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11281,"name":"uint256","nodeType":"ElementaryTypeName","src":"2628:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11282,"nodeType":"ArrayTypeName","src":"2628:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11285,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11298,"src":"2654:12:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":11284,"name":"bytes","nodeType":"ElementaryTypeName","src":"2654:5:58","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2472:200:58"},"returnParameters":{"id":11292,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11288,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11298,"src":"2697:4:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11287,"name":"bool","nodeType":"ElementaryTypeName","src":"2697:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11291,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11298,"src":"2703:16:58","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11289,"name":"uint256","nodeType":"ElementaryTypeName","src":"2703:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11290,"nodeType":"ArrayTypeName","src":"2703:9:58","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"2696:24:58"},"scope":11349,"src":"2441:326:58","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[1999],"body":{"id":11311,"nodeType":"Block","src":"2886:142:58","statements":[{"expression":{"hexValue":"66616c7365","id":11309,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3016:5:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":11308,"id":11310,"nodeType":"Return","src":"3009:12:58"}]},"documentation":{"id":11299,"nodeType":"StructuredDocumentation","src":"2773:22:58","text":"@inheritdoc IHooks"},"functionSelector":"5211fa77","id":11312,"implemented":true,"kind":"function","modifiers":[],"name":"onBeforeSwap","nameLocation":"2809:12:58","nodeType":"FunctionDefinition","parameters":{"id":11305,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11302,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11312,"src":"2822:23:58","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":11301,"nodeType":"UserDefinedTypeName","pathNode":{"id":11300,"name":"PoolSwapParams","nameLocations":["2822:14:58"],"nodeType":"IdentifierPath","referencedDeclaration":4772,"src":"2822:14:58"},"referencedDeclaration":4772,"src":"2822:14:58","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":11304,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11312,"src":"2847:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11303,"name":"address","nodeType":"ElementaryTypeName","src":"2847:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2821:34:58"},"returnParameters":{"id":11308,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11307,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11312,"src":"2880:4:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11306,"name":"bool","nodeType":"ElementaryTypeName","src":"2880:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2879:6:58"},"scope":11349,"src":"2800:228:58","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[2010],"body":{"id":11327,"nodeType":"Block","src":"3147:190:58","statements":[{"expression":{"components":[{"hexValue":"66616c7365","id":11323,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3321:5:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":11324,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3328:1:58","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":11325,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"3320:10:58","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":11322,"id":11326,"nodeType":"Return","src":"3313:17:58"}]},"documentation":{"id":11313,"nodeType":"StructuredDocumentation","src":"3034:22:58","text":"@inheritdoc IHooks"},"functionSelector":"18b6eb55","id":11328,"implemented":true,"kind":"function","modifiers":[],"name":"onAfterSwap","nameLocation":"3070:11:58","nodeType":"FunctionDefinition","parameters":{"id":11317,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11316,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11328,"src":"3082:24:58","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_calldata_ptr","typeString":"struct AfterSwapParams"},"typeName":{"id":11315,"nodeType":"UserDefinedTypeName","pathNode":{"id":11314,"name":"AfterSwapParams","nameLocations":["3082:15:58"],"nodeType":"IdentifierPath","referencedDeclaration":4801,"src":"3082:15:58"},"referencedDeclaration":4801,"src":"3082:15:58","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_storage_ptr","typeString":"struct AfterSwapParams"}},"visibility":"internal"}],"src":"3081:26:58"},"returnParameters":{"id":11322,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11319,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11328,"src":"3132:4:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11318,"name":"bool","nodeType":"ElementaryTypeName","src":"3132:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11321,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11328,"src":"3138:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11320,"name":"uint256","nodeType":"ElementaryTypeName","src":"3138:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3131:15:58"},"scope":11349,"src":"3061:276:58","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[2025],"body":{"id":11347,"nodeType":"Block","src":"3530:34:58","statements":[{"expression":{"components":[{"hexValue":"66616c7365","id":11343,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3548:5:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":11344,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3555:1:58","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":11345,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"3547:10:58","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":11342,"id":11346,"nodeType":"Return","src":"3540:17:58"}]},"documentation":{"id":11329,"nodeType":"StructuredDocumentation","src":"3343:22:58","text":"@inheritdoc IHooks"},"functionSelector":"a0e8f5ac","id":11348,"implemented":true,"kind":"function","modifiers":[],"name":"onComputeDynamicSwapFeePercentage","nameLocation":"3379:33:58","nodeType":"FunctionDefinition","parameters":{"id":11337,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11332,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11348,"src":"3422:23:58","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":11331,"nodeType":"UserDefinedTypeName","pathNode":{"id":11330,"name":"PoolSwapParams","nameLocations":["3422:14:58"],"nodeType":"IdentifierPath","referencedDeclaration":4772,"src":"3422:14:58"},"referencedDeclaration":4772,"src":"3422:14:58","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":11334,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11348,"src":"3455:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":11333,"name":"address","nodeType":"ElementaryTypeName","src":"3455:7:58","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":11336,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11348,"src":"3472:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11335,"name":"uint256","nodeType":"ElementaryTypeName","src":"3472:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3412:73:58"},"returnParameters":{"id":11342,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11339,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11348,"src":"3515:4:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":11338,"name":"bool","nodeType":"ElementaryTypeName","src":"3515:4:58","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":11341,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":11348,"src":"3521:7:58","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11340,"name":"uint256","nodeType":"ElementaryTypeName","src":"3521:7:58","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3514:15:58"},"scope":11349,"src":"3370:194:58","stateMutability":"view","virtual":true,"visibility":"public"}],"scope":11350,"src":"722:2844:58","usedErrors":[],"usedEvents":[]}],"src":"46:3521:58"},"id":58},"@balancer-labs/v3-vault/contracts/BasePoolMath.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/BasePoolMath.sol","exportedSymbols":{"BasePoolMath":[12083],"FixedPoint":[8208],"IBasePool":[1505],"Rounding":[4732]},"id":12084,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":11351,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:59"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol","id":11353,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12084,"sourceUnit":1506,"src":"72:87:59","symbolAliases":[{"foreign":{"id":11352,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1505,"src":"81:9:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":11355,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12084,"sourceUnit":4872,"src":"160:87:59","symbolAliases":[{"foreign":{"id":11354,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"169:8:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":11357,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":12084,"sourceUnit":8209,"src":"249:92:59","symbolAliases":[{"foreign":{"id":11356,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"258:10:59","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"BasePoolMath","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":12083,"linearizedBaseContracts":[12083],"name":"BasePoolMath","nameLocation":"351:12:59","nodeType":"ContractDefinition","nodes":[{"global":false,"id":11360,"libraryName":{"id":11358,"name":"FixedPoint","nameLocations":["376:10:59"],"nodeType":"IdentifierPath","referencedDeclaration":8208,"src":"376:10:59"},"nodeType":"UsingForDirective","src":"370:29:59","typeName":{"id":11359,"name":"uint256","nodeType":"ElementaryTypeName","src":"391:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"documentation":{"id":11361,"nodeType":"StructuredDocumentation","src":"405:390:59","text":" @notice An add liquidity operation increased the invariant above the limit.\n @dev This value is determined by each pool type, and depends on the specific math used to compute\n the price curve.\n @param invariantRatio The ratio of the new invariant (after an operation) to the old\n @param maxInvariantRatio The maximum allowed invariant ratio"},"errorSelector":"3e8960dc","id":11367,"name":"InvariantRatioAboveMax","nameLocation":"806:22:59","nodeType":"ErrorDefinition","parameters":{"id":11366,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11363,"mutability":"mutable","name":"invariantRatio","nameLocation":"837:14:59","nodeType":"VariableDeclaration","scope":11367,"src":"829:22:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11362,"name":"uint256","nodeType":"ElementaryTypeName","src":"829:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11365,"mutability":"mutable","name":"maxInvariantRatio","nameLocation":"861:17:59","nodeType":"VariableDeclaration","scope":11367,"src":"853:25:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11364,"name":"uint256","nodeType":"ElementaryTypeName","src":"853:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"828:51:59"},"src":"800:80:59"},{"documentation":{"id":11368,"nodeType":"StructuredDocumentation","src":"886:392:59","text":" @notice A remove liquidity operation decreased the invariant below the limit.\n @dev This value is determined by each pool type, and depends on the specific math used to compute\n the price curve.\n @param invariantRatio The ratio of the new invariant (after an operation) to the old\n @param minInvariantRatio The minimum allowed invariant ratio"},"errorSelector":"e31c95be","id":11374,"name":"InvariantRatioBelowMin","nameLocation":"1289:22:59","nodeType":"ErrorDefinition","parameters":{"id":11373,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11370,"mutability":"mutable","name":"invariantRatio","nameLocation":"1320:14:59","nodeType":"VariableDeclaration","scope":11374,"src":"1312:22:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11369,"name":"uint256","nodeType":"ElementaryTypeName","src":"1312:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11372,"mutability":"mutable","name":"minInvariantRatio","nameLocation":"1344:17:59","nodeType":"VariableDeclaration","scope":11374,"src":"1336:25:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11371,"name":"uint256","nodeType":"ElementaryTypeName","src":"1336:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1311:51:59"},"src":"1283:80:59"},{"body":{"id":11422,"nodeType":"Block","src":"2612:1172:59","statements":[{"expression":{"id":11395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11388,"name":"amountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11386,"src":"3456:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":11392,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11378,"src":"3482:8:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3491:6:59","memberName":"length","nodeType":"MemberAccess","src":"3482:15:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11391,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"3468:13:59","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":11389,"name":"uint256","nodeType":"ElementaryTypeName","src":"3472:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11390,"nodeType":"ArrayTypeName","src":"3472:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":11394,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3468:30:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"3456:42:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11396,"nodeType":"ExpressionStatement","src":"3456:42:59"},{"body":{"id":11420,"nodeType":"Block","src":"3554:224:59","statements":[{"expression":{"id":11418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":11408,"name":"amountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11386,"src":"3702:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11410,"indexExpression":{"id":11409,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11398,"src":"3712:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3702:12:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11415,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11382,"src":"3738:12:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11416,"name":"bptTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11380,"src":"3752:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":11411,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11378,"src":"3717:8:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11413,"indexExpression":{"id":11412,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11398,"src":"3726:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3717:11:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3729:8:59","memberName":"mulDivUp","nodeType":"MemberAccess","referencedDeclaration":8034,"src":"3717:20:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":11417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3717:50:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3702:65:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11419,"nodeType":"ExpressionStatement","src":"3702:65:59"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11401,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11398,"src":"3528:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":11402,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11378,"src":"3532:8:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3541:6:59","memberName":"length","nodeType":"MemberAccess","src":"3532:15:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3528:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11421,"initializationExpression":{"assignments":[11398],"declarations":[{"constant":false,"id":11398,"mutability":"mutable","name":"i","nameLocation":"3521:1:59","nodeType":"VariableDeclaration","scope":11421,"src":"3513:9:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11397,"name":"uint256","nodeType":"ElementaryTypeName","src":"3513:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11400,"initialValue":{"hexValue":"30","id":11399,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3525:1:59","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3513:13:59"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":11406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3549:3:59","subExpression":{"id":11405,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11398,"src":"3551:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11407,"nodeType":"ExpressionStatement","src":"3549:3:59"},"nodeType":"ForStatement","src":"3508:270:59"}]},"documentation":{"id":11375,"nodeType":"StructuredDocumentation","src":"1603:812:59","text":" @notice Computes the proportional amounts of tokens to be deposited into the pool.\n @dev This function computes the amount of each token that needs to be deposited in order to mint a specific\n amount of pool tokens (BPT). It ensures that the amounts of tokens deposited are proportional to the current\n pool balances.\n Calculation: For each token, amountIn = balance * (bptAmountOut / bptTotalSupply).\n Rounding up is used to ensure that the pool is not underfunded.\n @param balances Array of current token balances in the pool\n @param bptTotalSupply Total supply of the pool tokens (BPT)\n @param bptAmountOut The amount of pool tokens that need to be minted\n @return amountsIn Array of amounts for each token to be deposited"},"id":11423,"implemented":true,"kind":"function","modifiers":[],"name":"computeProportionalAmountsIn","nameLocation":"2429:28:59","nodeType":"FunctionDefinition","parameters":{"id":11383,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11378,"mutability":"mutable","name":"balances","nameLocation":"2484:8:59","nodeType":"VariableDeclaration","scope":11423,"src":"2467:25:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11376,"name":"uint256","nodeType":"ElementaryTypeName","src":"2467:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11377,"nodeType":"ArrayTypeName","src":"2467:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11380,"mutability":"mutable","name":"bptTotalSupply","nameLocation":"2510:14:59","nodeType":"VariableDeclaration","scope":11423,"src":"2502:22:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11379,"name":"uint256","nodeType":"ElementaryTypeName","src":"2502:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11382,"mutability":"mutable","name":"bptAmountOut","nameLocation":"2542:12:59","nodeType":"VariableDeclaration","scope":11423,"src":"2534:20:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11381,"name":"uint256","nodeType":"ElementaryTypeName","src":"2534:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2457:103:59"},"returnParameters":{"id":11387,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11386,"mutability":"mutable","name":"amountsIn","nameLocation":"2601:9:59","nodeType":"VariableDeclaration","scope":11423,"src":"2584:26:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11384,"name":"uint256","nodeType":"ElementaryTypeName","src":"2584:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11385,"nodeType":"ArrayTypeName","src":"2584:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"2583:28:59"},"scope":12083,"src":"2420:1364:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11472,"nodeType":"Block","src":"4812:1251:59","statements":[{"expression":{"id":11444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11437,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11435,"src":"5736:10:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":11441,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11427,"src":"5763:8:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5772:6:59","memberName":"length","nodeType":"MemberAccess","src":"5763:15:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11440,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"5749:13:59","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":11438,"name":"uint256","nodeType":"ElementaryTypeName","src":"5753:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11439,"nodeType":"ArrayTypeName","src":"5753:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":11443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5749:30:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"5736:43:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11445,"nodeType":"ExpressionStatement","src":"5736:43:59"},{"body":{"id":11470,"nodeType":"Block","src":"5835:222:59","statements":[{"expression":{"id":11468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":11457,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11435,"src":"5986:10:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11459,"indexExpression":{"id":11458,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11447,"src":"5997:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5986:13:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":11460,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11427,"src":"6003:8:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11462,"indexExpression":{"id":11461,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11447,"src":"6012:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6003:11:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":11463,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11431,"src":"6017:11:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6003:25:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11465,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6002:27:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":11466,"name":"bptTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11429,"src":"6032:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6002:44:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5986:60:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11469,"nodeType":"ExpressionStatement","src":"5986:60:59"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11450,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11447,"src":"5809:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":11451,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11427,"src":"5813:8:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5822:6:59","memberName":"length","nodeType":"MemberAccess","src":"5813:15:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5809:19:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11471,"initializationExpression":{"assignments":[11447],"declarations":[{"constant":false,"id":11447,"mutability":"mutable","name":"i","nameLocation":"5802:1:59","nodeType":"VariableDeclaration","scope":11471,"src":"5794:9:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11446,"name":"uint256","nodeType":"ElementaryTypeName","src":"5794:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11449,"initialValue":{"hexValue":"30","id":11448,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5806:1:59","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5794:13:59"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":11455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5830:3:59","subExpression":{"id":11454,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11447,"src":"5832:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11456,"nodeType":"ExpressionStatement","src":"5830:3:59"},"nodeType":"ForStatement","src":"5789:268:59"}]},"documentation":{"id":11424,"nodeType":"StructuredDocumentation","src":"3790:824:59","text":" @notice Computes the proportional amounts of tokens to be withdrawn from the pool.\n @dev This function computes the amount of each token that will be withdrawn in exchange for burning\n a specific amount of pool tokens (BPT). It ensures that the amounts of tokens withdrawn are proportional\n to the current pool balances.\n Calculation: For each token, amountOut = balance * (bptAmountIn / bptTotalSupply).\n Rounding down is used to prevent withdrawing more than the pool can afford.\n @param balances Array of current token balances in the pool\n @param bptTotalSupply Total supply of the pool tokens (BPT)\n @param bptAmountIn The amount of pool tokens that will be burned\n @return amountsOut Array of amounts for each token to be withdrawn"},"id":11473,"implemented":true,"kind":"function","modifiers":[],"name":"computeProportionalAmountsOut","nameLocation":"4628:29:59","nodeType":"FunctionDefinition","parameters":{"id":11432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11427,"mutability":"mutable","name":"balances","nameLocation":"4684:8:59","nodeType":"VariableDeclaration","scope":11473,"src":"4667:25:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11425,"name":"uint256","nodeType":"ElementaryTypeName","src":"4667:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11426,"nodeType":"ArrayTypeName","src":"4667:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11429,"mutability":"mutable","name":"bptTotalSupply","nameLocation":"4710:14:59","nodeType":"VariableDeclaration","scope":11473,"src":"4702:22:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11428,"name":"uint256","nodeType":"ElementaryTypeName","src":"4702:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11431,"mutability":"mutable","name":"bptAmountIn","nameLocation":"4742:11:59","nodeType":"VariableDeclaration","scope":11473,"src":"4734:19:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11430,"name":"uint256","nodeType":"ElementaryTypeName","src":"4734:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4657:102:59"},"returnParameters":{"id":11436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11435,"mutability":"mutable","name":"amountsOut","nameLocation":"4800:10:59","nodeType":"VariableDeclaration","scope":11473,"src":"4783:27:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11433,"name":"uint256","nodeType":"ElementaryTypeName","src":"4783:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11434,"nodeType":"ArrayTypeName","src":"4783:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4782:29:59"},"scope":12083,"src":"4619:1444:59","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":11653,"nodeType":"Block","src":"7540:4654:59","statements":[{"assignments":[11496],"declarations":[{"constant":false,"id":11496,"mutability":"mutable","name":"numTokens","nameLocation":"8343:9:59","nodeType":"VariableDeclaration","scope":11653,"src":"8335:17:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11495,"name":"uint256","nodeType":"ElementaryTypeName","src":"8335:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11499,"initialValue":{"expression":{"id":11497,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11477,"src":"8355:15:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8371:6:59","memberName":"length","nodeType":"MemberAccess","src":"8355:22:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8335:42:59"},{"assignments":[11504],"declarations":[{"constant":false,"id":11504,"mutability":"mutable","name":"newBalances","nameLocation":"8484:11:59","nodeType":"VariableDeclaration","scope":11653,"src":"8467:28:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11502,"name":"uint256","nodeType":"ElementaryTypeName","src":"8467:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11503,"nodeType":"ArrayTypeName","src":"8467:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":11510,"initialValue":{"arguments":[{"id":11508,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11496,"src":"8512:9:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11507,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"8498:13:59","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":11505,"name":"uint256","nodeType":"ElementaryTypeName","src":"8502:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11506,"nodeType":"ArrayTypeName","src":"8502:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":11509,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8498:24:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"8467:55:59"},{"expression":{"id":11517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11511,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11493,"src":"8606:14:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11515,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11496,"src":"8637:9:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11514,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"8623:13:59","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":11512,"name":"uint256","nodeType":"ElementaryTypeName","src":"8627:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11513,"nodeType":"ArrayTypeName","src":"8627:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":11516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8623:24:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"8606:41:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11518,"nodeType":"ExpressionStatement","src":"8606:41:59"},{"body":{"id":11543,"nodeType":"Block","src":"8778:125:59","statements":[{"expression":{"id":11541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":11529,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11504,"src":"8792:11:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11531,"indexExpression":{"id":11530,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11520,"src":"8804:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8792:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":11532,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11477,"src":"8809:15:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11534,"indexExpression":{"id":11533,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11520,"src":"8825:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8809:18:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"baseExpression":{"id":11535,"name":"exactAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11480,"src":"8830:12:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11537,"indexExpression":{"id":11536,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11520,"src":"8843:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8830:15:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8809:36:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":11539,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8848:1:59","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8809:40:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8792:57:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11542,"nodeType":"ExpressionStatement","src":"8792:57:59"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11523,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11520,"src":"8758:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11524,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11496,"src":"8762:9:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8758:13:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11544,"initializationExpression":{"assignments":[11520],"declarations":[{"constant":false,"id":11520,"mutability":"mutable","name":"i","nameLocation":"8751:1:59","nodeType":"VariableDeclaration","scope":11544,"src":"8743:9:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11519,"name":"uint256","nodeType":"ElementaryTypeName","src":"8743:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11522,"initialValue":{"hexValue":"30","id":11521,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8755:1:59","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8743:13:59"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":11527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"8773:3:59","subExpression":{"id":11526,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11520,"src":"8775:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11528,"nodeType":"ExpressionStatement","src":"8773:3:59"},"nodeType":"ForStatement","src":"8738:165:59"},{"assignments":[11546],"declarations":[{"constant":false,"id":11546,"mutability":"mutable","name":"currentInvariant","nameLocation":"9115:16:59","nodeType":"VariableDeclaration","scope":11653,"src":"9107:24:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11545,"name":"uint256","nodeType":"ElementaryTypeName","src":"9107:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11553,"initialValue":{"arguments":[{"id":11549,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11477,"src":"9156:15:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":11550,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"9173:8:59","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":11551,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9182:8:59","memberName":"ROUND_UP","nodeType":"MemberAccess","referencedDeclaration":4730,"src":"9173:17:59","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"expression":{"id":11547,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11487,"src":"9134:4:59","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}},"id":11548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9139:16:59","memberName":"computeInvariant","nodeType":"MemberAccess","referencedDeclaration":1482,"src":"9134:21:59","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_enum$_Rounding_$4732_$returns$_t_uint256_$","typeString":"function (uint256[] memory,enum Rounding) view external returns (uint256)"}},"id":11552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9134:57:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9107:84:59"},{"assignments":[11555],"declarations":[{"constant":false,"id":11555,"mutability":"mutable","name":"invariantRatio","nameLocation":"9269:14:59","nodeType":"VariableDeclaration","scope":11653,"src":"9261:22:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11554,"name":"uint256","nodeType":"ElementaryTypeName","src":"9261:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11565,"initialValue":{"arguments":[{"id":11563,"name":"currentInvariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11546,"src":"9350:16:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":11558,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11504,"src":"9308:11:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":11559,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"9321:8:59","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":11560,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9330:10:59","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":4731,"src":"9321:19:59","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"expression":{"id":11556,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11487,"src":"9286:4:59","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}},"id":11557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9291:16:59","memberName":"computeInvariant","nodeType":"MemberAccess","referencedDeclaration":1482,"src":"9286:21:59","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_enum$_Rounding_$4732_$returns$_t_uint256_$","typeString":"function (uint256[] memory,enum Rounding) view external returns (uint256)"}},"id":11561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9286:55:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9342:7:59","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":7990,"src":"9286:63:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9286:81:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9261:106:59"},{"expression":{"arguments":[{"id":11567,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11487,"src":"9416:4:59","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}},{"id":11568,"name":"invariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11555,"src":"9422:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11566,"name":"ensureInvariantRatioBelowMaximumBound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12056,"src":"9378:37:59","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IBasePool_$1505_$_t_uint256_$returns$__$","typeString":"function (contract IBasePool,uint256) view"}},"id":11569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9378:59:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11570,"nodeType":"ExpressionStatement","src":"9378:59:59"},{"body":{"id":11630,"nodeType":"Block","src":"9551:1335:59","statements":[{"assignments":[11582],"declarations":[{"constant":false,"id":11582,"mutability":"mutable","name":"proportionalTokenBalance","nameLocation":"9997:24:59","nodeType":"VariableDeclaration","scope":11630,"src":"9989:32:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11581,"name":"uint256","nodeType":"ElementaryTypeName","src":"9989:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11589,"initialValue":{"arguments":[{"baseExpression":{"id":11585,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11477,"src":"10047:15:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11587,"indexExpression":{"id":11586,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11572,"src":"10063:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10047:18:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11583,"name":"invariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11555,"src":"10024:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10039:7:59","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":7953,"src":"10024:22:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11588,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10024:42:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9989:77:59"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":11590,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11504,"src":"10084:11:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11592,"indexExpression":{"id":11591,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11572,"src":"10096:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10084:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":11593,"name":"proportionalTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11582,"src":"10101:24:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10084:41:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11629,"nodeType":"IfStatement","src":"10080:796:59","trueBody":{"id":11628,"nodeType":"Block","src":"10127:749:59","statements":[{"assignments":[11596],"declarations":[{"constant":false,"id":11596,"mutability":"mutable","name":"taxableAmount","nameLocation":"10153:13:59","nodeType":"VariableDeclaration","scope":11628,"src":"10145:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11595,"name":"uint256","nodeType":"ElementaryTypeName","src":"10145:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11597,"nodeType":"VariableDeclarationStatement","src":"10145:21:59"},{"id":11606,"nodeType":"UncheckedBlock","src":"10184:108:59","statements":[{"expression":{"id":11604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11598,"name":"taxableAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11596,"src":"10216:13:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":11599,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11504,"src":"10232:11:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11601,"indexExpression":{"id":11600,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11572,"src":"10244:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10232:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":11602,"name":"proportionalTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11582,"src":"10249:24:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10232:41:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10216:57:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11605,"nodeType":"ExpressionStatement","src":"10216:57:59"}]},{"expression":{"id":11614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":11607,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11493,"src":"10354:14:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11609,"indexExpression":{"id":11608,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11572,"src":"10369:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10354:17:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11612,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11484,"src":"10394:17:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11610,"name":"taxableAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11596,"src":"10374:13:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10388:5:59","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":7970,"src":"10374:19:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11613,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10374:38:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10354:58:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11615,"nodeType":"ExpressionStatement","src":"10354:58:59"},{"expression":{"id":11626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":11616,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11504,"src":"10810:11:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11618,"indexExpression":{"id":11617,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11572,"src":"10822:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10810:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":11619,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11504,"src":"10827:11:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11621,"indexExpression":{"id":11620,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11572,"src":"10839:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10827:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"baseExpression":{"id":11622,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11493,"src":"10844:14:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11624,"indexExpression":{"id":11623,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11572,"src":"10859:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10844:17:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10827:34:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10810:51:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11627,"nodeType":"ExpressionStatement","src":"10810:51:59"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11575,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11572,"src":"9531:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11576,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11496,"src":"9535:9:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9531:13:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11631,"initializationExpression":{"assignments":[11572],"declarations":[{"constant":false,"id":11572,"mutability":"mutable","name":"i","nameLocation":"9524:1:59","nodeType":"VariableDeclaration","scope":11631,"src":"9516:9:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11571,"name":"uint256","nodeType":"ElementaryTypeName","src":"9516:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11574,"initialValue":{"hexValue":"30","id":11573,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9528:1:59","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9516:13:59"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":11579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"9546:3:59","subExpression":{"id":11578,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11572,"src":"9548:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11580,"nodeType":"ExpressionStatement","src":"9546:3:59"},"nodeType":"ForStatement","src":"9511:1375:59"},{"assignments":[11633],"declarations":[{"constant":false,"id":11633,"mutability":"mutable","name":"invariantWithFeesApplied","nameLocation":"11156:24:59","nodeType":"VariableDeclaration","scope":11653,"src":"11148:32:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11632,"name":"uint256","nodeType":"ElementaryTypeName","src":"11148:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11640,"initialValue":{"arguments":[{"id":11636,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11504,"src":"11205:11:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":11637,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"11218:8:59","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":11638,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11227:10:59","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":4731,"src":"11218:19:59","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"expression":{"id":11634,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11487,"src":"11183:4:59","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}},"id":11635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11188:16:59","memberName":"computeInvariant","nodeType":"MemberAccess","referencedDeclaration":1482,"src":"11183:21:59","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_enum$_Rounding_$4732_$returns$_t_uint256_$","typeString":"function (uint256[] memory,enum Rounding) view external returns (uint256)"}},"id":11639,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11183:55:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11148:90:59"},{"expression":{"id":11651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11641,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11490,"src":"12092:12:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11642,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11482,"src":"12108:11:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11643,"name":"invariantWithFeesApplied","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11633,"src":"12123:24:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":11644,"name":"currentInvariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11546,"src":"12150:16:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12123:43:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11646,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12122:45:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12108:59:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11648,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12107:61:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":11649,"name":"currentInvariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11546,"src":"12171:16:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12107:80:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12092:95:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11652,"nodeType":"ExpressionStatement","src":"12092:95:59"}]},"documentation":{"id":11474,"nodeType":"StructuredDocumentation","src":"6069:1174:59","text":" @notice Computes the amount of pool tokens (BPT) to be minted for an unbalanced liquidity addition.\n @dev This function handles liquidity addition where the proportion of tokens deposited does not match\n the current pool composition. It considers the current balances, exact amounts of tokens to be added,\n total supply, and swap fee percentage. The function calculates a new invariant with the added tokens,\n applying swap fees if necessary, and then calculates the amount of BPT to mint based on the change\n in the invariant.\n @param currentBalances Current pool balances, sorted in token registration order\n @param exactAmounts Array of exact amounts for each token to be added to the pool\n @param totalSupply The current total supply of the pool tokens (BPT)\n @param swapFeePercentage The swap fee percentage applied to the transaction\n @param pool The pool to which we're adding liquidity\n @return bptAmountOut The amount of pool tokens (BPT) that will be minted as a result of the liquidity addition\n @return swapFeeAmounts The amount of swap fees charged for each token"},"id":11654,"implemented":true,"kind":"function","modifiers":[],"name":"computeAddLiquidityUnbalanced","nameLocation":"7257:29:59","nodeType":"FunctionDefinition","parameters":{"id":11488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11477,"mutability":"mutable","name":"currentBalances","nameLocation":"7313:15:59","nodeType":"VariableDeclaration","scope":11654,"src":"7296:32:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11475,"name":"uint256","nodeType":"ElementaryTypeName","src":"7296:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11476,"nodeType":"ArrayTypeName","src":"7296:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11480,"mutability":"mutable","name":"exactAmounts","nameLocation":"7355:12:59","nodeType":"VariableDeclaration","scope":11654,"src":"7338:29:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11478,"name":"uint256","nodeType":"ElementaryTypeName","src":"7338:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11479,"nodeType":"ArrayTypeName","src":"7338:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11482,"mutability":"mutable","name":"totalSupply","nameLocation":"7385:11:59","nodeType":"VariableDeclaration","scope":11654,"src":"7377:19:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11481,"name":"uint256","nodeType":"ElementaryTypeName","src":"7377:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11484,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"7414:17:59","nodeType":"VariableDeclaration","scope":11654,"src":"7406:25:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11483,"name":"uint256","nodeType":"ElementaryTypeName","src":"7406:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11487,"mutability":"mutable","name":"pool","nameLocation":"7451:4:59","nodeType":"VariableDeclaration","scope":11654,"src":"7441:14:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"},"typeName":{"id":11486,"nodeType":"UserDefinedTypeName","pathNode":{"id":11485,"name":"IBasePool","nameLocations":["7441:9:59"],"nodeType":"IdentifierPath","referencedDeclaration":1505,"src":"7441:9:59"},"referencedDeclaration":1505,"src":"7441:9:59","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}},"visibility":"internal"}],"src":"7286:175:59"},"returnParameters":{"id":11494,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11490,"mutability":"mutable","name":"bptAmountOut","nameLocation":"7493:12:59","nodeType":"VariableDeclaration","scope":11654,"src":"7485:20:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11489,"name":"uint256","nodeType":"ElementaryTypeName","src":"7485:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11493,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"7524:14:59","nodeType":"VariableDeclaration","scope":11654,"src":"7507:31:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11491,"name":"uint256","nodeType":"ElementaryTypeName","src":"7507:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11492,"nodeType":"ArrayTypeName","src":"7507:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7484:55:59"},"scope":12083,"src":"7248:4946:59","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":11761,"nodeType":"Block","src":"13760:1833:59","statements":[{"assignments":[11678],"declarations":[{"constant":false,"id":11678,"mutability":"mutable","name":"newSupply","nameLocation":"13843:9:59","nodeType":"VariableDeclaration","scope":11761,"src":"13835:17:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11677,"name":"uint256","nodeType":"ElementaryTypeName","src":"13835:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11682,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11679,"name":"exactBptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11662,"src":"13855:17:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":11680,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11664,"src":"13875:11:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13855:31:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13835:51:59"},{"assignments":[11684],"declarations":[{"constant":false,"id":11684,"mutability":"mutable","name":"invariantRatio","nameLocation":"14184:14:59","nodeType":"VariableDeclaration","scope":11761,"src":"14176:22:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11683,"name":"uint256","nodeType":"ElementaryTypeName","src":"14176:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11689,"initialValue":{"arguments":[{"id":11687,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11664,"src":"14217:11:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11685,"name":"newSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11678,"src":"14201:9:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14211:5:59","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":8006,"src":"14201:15:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14201:28:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14176:53:59"},{"expression":{"arguments":[{"id":11691,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11669,"src":"14277:4:59","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}},{"id":11692,"name":"invariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11684,"src":"14283:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11690,"name":"ensureInvariantRatioBelowMaximumBound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12056,"src":"14239:37:59","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IBasePool_$1505_$_t_uint256_$returns$__$","typeString":"function (contract IBasePool,uint256) view"}},"id":11693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14239:59:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11694,"nodeType":"ExpressionStatement","src":"14239:59:59"},{"assignments":[11696],"declarations":[{"constant":false,"id":11696,"mutability":"mutable","name":"newBalance","nameLocation":"14317:10:59","nodeType":"VariableDeclaration","scope":11761,"src":"14309:18:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11695,"name":"uint256","nodeType":"ElementaryTypeName","src":"14309:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11703,"initialValue":{"arguments":[{"id":11699,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11658,"src":"14350:15:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":11700,"name":"tokenInIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11660,"src":"14367:12:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11701,"name":"invariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11684,"src":"14381:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11697,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11669,"src":"14330:4:59","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}},"id":11698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14335:14:59","memberName":"computeBalance","nodeType":"MemberAccess","referencedDeclaration":1495,"src":"14330:19:59","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256,uint256) view external returns (uint256)"}},"id":11702,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14330:66:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14309:87:59"},{"assignments":[11705],"declarations":[{"constant":false,"id":11705,"mutability":"mutable","name":"amountIn","nameLocation":"14476:8:59","nodeType":"VariableDeclaration","scope":11761,"src":"14468:16:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11704,"name":"uint256","nodeType":"ElementaryTypeName","src":"14468:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11711,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11710,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11706,"name":"newBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11696,"src":"14487:10:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"baseExpression":{"id":11707,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11658,"src":"14500:15:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11709,"indexExpression":{"id":11708,"name":"tokenInIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11660,"src":"14516:12:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14500:29:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14487:42:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14468:61:59"},{"assignments":[11713],"declarations":[{"constant":false,"id":11713,"mutability":"mutable","name":"nonTaxableBalance","nameLocation":"14816:17:59","nodeType":"VariableDeclaration","scope":11761,"src":"14808:25:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11712,"name":"uint256","nodeType":"ElementaryTypeName","src":"14808:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11722,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11714,"name":"newSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11678,"src":"14837:9:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"baseExpression":{"id":11715,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11658,"src":"14849:15:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11717,"indexExpression":{"id":11716,"name":"tokenInIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11660,"src":"14865:12:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14849:29:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14837:41:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":11719,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14836:43:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":11720,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11664,"src":"14882:11:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14836:57:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14808:85:59"},{"assignments":[11724],"declarations":[{"constant":false,"id":11724,"mutability":"mutable","name":"taxableAmount","nameLocation":"15048:13:59","nodeType":"VariableDeclaration","scope":11761,"src":"15040:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11723,"name":"uint256","nodeType":"ElementaryTypeName","src":"15040:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11728,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11725,"name":"newBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11696,"src":"15064:10:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":11726,"name":"nonTaxableBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11713,"src":"15077:17:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15064:30:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15040:54:59"},{"assignments":[11730],"declarations":[{"constant":false,"id":11730,"mutability":"mutable","name":"fee","nameLocation":"15204:3:59","nodeType":"VariableDeclaration","scope":11761,"src":"15196:11:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11729,"name":"uint256","nodeType":"ElementaryTypeName","src":"15196:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11739,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":11733,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11666,"src":"15230:17:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15248:10:59","memberName":"complement","nodeType":"MemberAccess","referencedDeclaration":8207,"src":"15230:28:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":11735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15230:30:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11731,"name":"taxableAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11724,"src":"15210:13:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15224:5:59","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":8006,"src":"15210:19:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15210:51:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":11737,"name":"taxableAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11724,"src":"15264:13:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15210:67:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15196:81:59"},{"expression":{"id":11747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11740,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11675,"src":"15363:14:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":11744,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11658,"src":"15394:15:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15410:6:59","memberName":"length","nodeType":"MemberAccess","src":"15394:22:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11743,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"15380:13:59","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":11741,"name":"uint256","nodeType":"ElementaryTypeName","src":"15384:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11742,"nodeType":"ArrayTypeName","src":"15384:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":11746,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15380:37:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"15363:54:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11748,"nodeType":"ExpressionStatement","src":"15363:54:59"},{"expression":{"id":11753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":11749,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11675,"src":"15427:14:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11751,"indexExpression":{"id":11750,"name":"tokenInIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11660,"src":"15442:12:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15427:28:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11752,"name":"fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11730,"src":"15458:3:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15427:34:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11754,"nodeType":"ExpressionStatement","src":"15427:34:59"},{"expression":{"id":11759,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11755,"name":"amountInWithFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11672,"src":"15554:15:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11756,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11705,"src":"15572:8:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":11757,"name":"fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11730,"src":"15583:3:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15572:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15554:32:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11760,"nodeType":"ExpressionStatement","src":"15554:32:59"}]},"documentation":{"id":11655,"nodeType":"StructuredDocumentation","src":"12200:1225:59","text":" @notice Computes the amount of input token needed to receive an exact amount of pool tokens (BPT) in a\n single-token liquidity addition.\n @dev This function is used when a user wants to add liquidity to the pool by specifying the exact amount\n of pool tokens they want to receive, and the function calculates the corresponding amount of the input token.\n It considers the current pool balances, total supply, swap fee percentage, and the desired BPT amount.\n @param currentBalances Array of current token balances in the pool, sorted in token registration order\n @param tokenInIndex Index of the input token for which the amount needs to be calculated\n @param exactBptAmountOut Exact amount of pool tokens (BPT) the user wants to receive\n @param totalSupply The current total supply of the pool tokens (BPT)\n @param swapFeePercentage The swap fee percentage applied to the taxable amount\n @param pool The pool to which we're adding liquidity\n @return amountInWithFee The amount of input token needed, including the swap fee, to receive the exact BPT amount\n @return swapFeeAmounts The amount of swap fees charged for each token"},"id":11762,"implemented":true,"kind":"function","modifiers":[],"name":"computeAddLiquiditySingleTokenExactOut","nameLocation":"13439:38:59","nodeType":"FunctionDefinition","parameters":{"id":11670,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11658,"mutability":"mutable","name":"currentBalances","nameLocation":"13504:15:59","nodeType":"VariableDeclaration","scope":11762,"src":"13487:32:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11656,"name":"uint256","nodeType":"ElementaryTypeName","src":"13487:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11657,"nodeType":"ArrayTypeName","src":"13487:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11660,"mutability":"mutable","name":"tokenInIndex","nameLocation":"13537:12:59","nodeType":"VariableDeclaration","scope":11762,"src":"13529:20:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11659,"name":"uint256","nodeType":"ElementaryTypeName","src":"13529:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11662,"mutability":"mutable","name":"exactBptAmountOut","nameLocation":"13567:17:59","nodeType":"VariableDeclaration","scope":11762,"src":"13559:25:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11661,"name":"uint256","nodeType":"ElementaryTypeName","src":"13559:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11664,"mutability":"mutable","name":"totalSupply","nameLocation":"13602:11:59","nodeType":"VariableDeclaration","scope":11762,"src":"13594:19:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11663,"name":"uint256","nodeType":"ElementaryTypeName","src":"13594:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11666,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"13631:17:59","nodeType":"VariableDeclaration","scope":11762,"src":"13623:25:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11665,"name":"uint256","nodeType":"ElementaryTypeName","src":"13623:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11669,"mutability":"mutable","name":"pool","nameLocation":"13668:4:59","nodeType":"VariableDeclaration","scope":11762,"src":"13658:14:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"},"typeName":{"id":11668,"nodeType":"UserDefinedTypeName","pathNode":{"id":11667,"name":"IBasePool","nameLocations":["13658:9:59"],"nodeType":"IdentifierPath","referencedDeclaration":1505,"src":"13658:9:59"},"referencedDeclaration":1505,"src":"13658:9:59","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}},"visibility":"internal"}],"src":"13477:201:59"},"returnParameters":{"id":11676,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11672,"mutability":"mutable","name":"amountInWithFee","nameLocation":"13710:15:59","nodeType":"VariableDeclaration","scope":11762,"src":"13702:23:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11671,"name":"uint256","nodeType":"ElementaryTypeName","src":"13702:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11675,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"13744:14:59","nodeType":"VariableDeclaration","scope":11762,"src":"13727:31:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11673,"name":"uint256","nodeType":"ElementaryTypeName","src":"13727:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11674,"nodeType":"ArrayTypeName","src":"13727:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"13701:58:59"},"scope":12083,"src":"13430:2163:59","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":11926,"nodeType":"Block","src":"16633:3561:59","statements":[{"assignments":[11786],"declarations":[{"constant":false,"id":11786,"mutability":"mutable","name":"numTokens","nameLocation":"16706:9:59","nodeType":"VariableDeclaration","scope":11926,"src":"16698:17:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11785,"name":"uint256","nodeType":"ElementaryTypeName","src":"16698:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11789,"initialValue":{"expression":{"id":11787,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11766,"src":"16718:15:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16734:6:59","memberName":"length","nodeType":"MemberAccess","src":"16718:22:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16698:42:59"},{"assignments":[11794],"declarations":[{"constant":false,"id":11794,"mutability":"mutable","name":"newBalances","nameLocation":"16828:11:59","nodeType":"VariableDeclaration","scope":11926,"src":"16811:28:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11792,"name":"uint256","nodeType":"ElementaryTypeName","src":"16811:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11793,"nodeType":"ArrayTypeName","src":"16811:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":11800,"initialValue":{"arguments":[{"id":11798,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11786,"src":"16856:9:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11797,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"16842:13:59","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":11795,"name":"uint256","nodeType":"ElementaryTypeName","src":"16846:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11796,"nodeType":"ArrayTypeName","src":"16846:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":11799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16842:24:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"16811:55:59"},{"body":{"id":11821,"nodeType":"Block","src":"16965:64:59","statements":[{"expression":{"id":11819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":11811,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11794,"src":"16979:11:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11813,"indexExpression":{"id":11812,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11802,"src":"16991:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"16979:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11818,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":11814,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11766,"src":"16996:15:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11816,"indexExpression":{"id":11815,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11802,"src":"17012:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16996:18:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":11817,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17017:1:59","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"16996:22:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16979:39:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11820,"nodeType":"ExpressionStatement","src":"16979:39:59"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11805,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11802,"src":"16945:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":11806,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11786,"src":"16949:9:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16945:13:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":11822,"initializationExpression":{"assignments":[11802],"declarations":[{"constant":false,"id":11802,"mutability":"mutable","name":"i","nameLocation":"16938:1:59","nodeType":"VariableDeclaration","scope":11822,"src":"16930:9:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11801,"name":"uint256","nodeType":"ElementaryTypeName","src":"16930:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11804,"initialValue":{"hexValue":"30","id":11803,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16942:1:59","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16930:13:59"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":11809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"16960:3:59","subExpression":{"id":11808,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11802,"src":"16962:1:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11810,"nodeType":"ExpressionStatement","src":"16960:3:59"},"nodeType":"ForStatement","src":"16925:104:59"},{"expression":{"id":11831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":11823,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11794,"src":"17107:11:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11825,"indexExpression":{"id":11824,"name":"tokenOutIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11768,"src":"17119:13:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"17107:26:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":11826,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11794,"src":"17136:11:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11828,"indexExpression":{"id":11827,"name":"tokenOutIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11768,"src":"17148:13:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17136:26:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":11829,"name":"exactAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11770,"src":"17165:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17136:43:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17107:72:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11832,"nodeType":"ExpressionStatement","src":"17107:72:59"},{"assignments":[11834],"declarations":[{"constant":false,"id":11834,"mutability":"mutable","name":"currentInvariant","nameLocation":"17711:16:59","nodeType":"VariableDeclaration","scope":11926,"src":"17703:24:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11833,"name":"uint256","nodeType":"ElementaryTypeName","src":"17703:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11841,"initialValue":{"arguments":[{"id":11837,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11766,"src":"17752:15:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":11838,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"17769:8:59","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":11839,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"17778:8:59","memberName":"ROUND_UP","nodeType":"MemberAccess","referencedDeclaration":4730,"src":"17769:17:59","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"expression":{"id":11835,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11777,"src":"17730:4:59","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}},"id":11836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17735:16:59","memberName":"computeInvariant","nodeType":"MemberAccess","referencedDeclaration":1482,"src":"17730:21:59","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_enum$_Rounding_$4732_$returns$_t_uint256_$","typeString":"function (uint256[] memory,enum Rounding) view external returns (uint256)"}},"id":11840,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17730:57:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17703:84:59"},{"assignments":[11843],"declarations":[{"constant":false,"id":11843,"mutability":"mutable","name":"invariantRatio","nameLocation":"18164:14:59","nodeType":"VariableDeclaration","scope":11926,"src":"18156:22:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11842,"name":"uint256","nodeType":"ElementaryTypeName","src":"18156:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11853,"initialValue":{"arguments":[{"id":11851,"name":"currentInvariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11834,"src":"18241:16:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":11846,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11794,"src":"18203:11:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":11847,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"18216:8:59","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":11848,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"18225:8:59","memberName":"ROUND_UP","nodeType":"MemberAccess","referencedDeclaration":4730,"src":"18216:17:59","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"expression":{"id":11844,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11777,"src":"18181:4:59","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}},"id":11845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18186:16:59","memberName":"computeInvariant","nodeType":"MemberAccess","referencedDeclaration":1482,"src":"18181:21:59","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_enum$_Rounding_$4732_$returns$_t_uint256_$","typeString":"function (uint256[] memory,enum Rounding) view external returns (uint256)"}},"id":11849,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18181:53:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18235:5:59","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":8006,"src":"18181:59:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11852,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18181:77:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"18156:102:59"},{"expression":{"arguments":[{"id":11855,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11777,"src":"18307:4:59","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}},{"id":11856,"name":"invariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11843,"src":"18313:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11854,"name":"ensureInvariantRatioAboveMinimumBound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12082,"src":"18269:37:59","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IBasePool_$1505_$_t_uint256_$returns$__$","typeString":"function (contract IBasePool,uint256) view"}},"id":11857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18269:59:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11858,"nodeType":"ExpressionStatement","src":"18269:59:59"},{"assignments":[11860],"declarations":[{"constant":false,"id":11860,"mutability":"mutable","name":"taxableAmount","nameLocation":"18462:13:59","nodeType":"VariableDeclaration","scope":11926,"src":"18454:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11859,"name":"uint256","nodeType":"ElementaryTypeName","src":"18454:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11871,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"baseExpression":{"id":11863,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11766,"src":"18499:15:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11865,"indexExpression":{"id":11864,"name":"tokenOutIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11768,"src":"18515:13:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18499:30:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11861,"name":"invariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11843,"src":"18478:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18493:5:59","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":7970,"src":"18478:20:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18478:52:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"baseExpression":{"id":11867,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11794,"src":"18533:11:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11869,"indexExpression":{"id":11868,"name":"tokenOutIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11768,"src":"18545:13:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18533:26:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18478:81:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"18454:105:59"},{"assignments":[11873],"declarations":[{"constant":false,"id":11873,"mutability":"mutable","name":"fee","nameLocation":"18759:3:59","nodeType":"VariableDeclaration","scope":11926,"src":"18751:11:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11872,"name":"uint256","nodeType":"ElementaryTypeName","src":"18751:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11882,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":11876,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11774,"src":"18785:17:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18803:10:59","memberName":"complement","nodeType":"MemberAccess","referencedDeclaration":8207,"src":"18785:28:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":11878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18785:30:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11874,"name":"taxableAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11860,"src":"18765:13:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18779:5:59","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":8006,"src":"18765:19:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18765:51:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":11880,"name":"taxableAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11860,"src":"18819:13:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18765:67:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"18751:81:59"},{"expression":{"id":11891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":11883,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11794,"src":"18892:11:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11885,"indexExpression":{"id":11884,"name":"tokenOutIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11768,"src":"18904:13:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"18892:26:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":11886,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11794,"src":"18921:11:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11888,"indexExpression":{"id":11887,"name":"tokenOutIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11768,"src":"18933:13:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18921:26:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":11889,"name":"fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11873,"src":"18950:3:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18921:32:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18892:61:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11892,"nodeType":"ExpressionStatement","src":"18892:61:59"},{"assignments":[11894],"declarations":[{"constant":false,"id":11894,"mutability":"mutable","name":"invariantWithFeesApplied","nameLocation":"19097:24:59","nodeType":"VariableDeclaration","scope":11926,"src":"19089:32:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11893,"name":"uint256","nodeType":"ElementaryTypeName","src":"19089:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11901,"initialValue":{"arguments":[{"id":11897,"name":"newBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11794,"src":"19146:11:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":11898,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"19159:8:59","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":11899,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"19168:10:59","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":4731,"src":"19159:19:59","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"expression":{"id":11895,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11777,"src":"19124:4:59","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}},"id":11896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19129:16:59","memberName":"computeInvariant","nodeType":"MemberAccess","referencedDeclaration":1482,"src":"19124:21:59","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_enum$_Rounding_$4732_$returns$_t_uint256_$","typeString":"function (uint256[] memory,enum Rounding) view external returns (uint256)"}},"id":11900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19124:55:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19089:90:59"},{"expression":{"id":11908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11902,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11783,"src":"19265:14:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":11906,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11786,"src":"19296:9:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11905,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"19282:13:59","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":11903,"name":"uint256","nodeType":"ElementaryTypeName","src":"19286:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11904,"nodeType":"ArrayTypeName","src":"19286:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":11907,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19282:24:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"19265:41:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11909,"nodeType":"ExpressionStatement","src":"19265:41:59"},{"expression":{"id":11914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":11910,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11783,"src":"19316:14:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11912,"indexExpression":{"id":11911,"name":"tokenOutIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11768,"src":"19331:13:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"19316:29:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":11913,"name":"fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11873,"src":"19348:3:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19316:35:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11915,"nodeType":"ExpressionStatement","src":"19316:35:59"},{"expression":{"id":11924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":11916,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11780,"src":"20090:11:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11919,"name":"currentInvariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11834,"src":"20125:16:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":11920,"name":"invariantWithFeesApplied","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11894,"src":"20144:24:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20125:43:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11922,"name":"currentInvariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11834,"src":"20170:16:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11917,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11772,"src":"20104:11:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20116:8:59","memberName":"mulDivUp","nodeType":"MemberAccess","referencedDeclaration":8034,"src":"20104:20:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":11923,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20104:83:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20090:97:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11925,"nodeType":"ExpressionStatement","src":"20090:97:59"}]},"documentation":{"id":11763,"nodeType":"StructuredDocumentation","src":"15599:702:59","text":" @notice Computes the amount of pool tokens to burn to receive exact amount out.\n @param currentBalances Current pool balances, sorted in token registration order\n @param tokenOutIndex Index of the token to receive in exchange for pool tokens burned\n @param exactAmountOut Exact amount of tokens to receive\n @param totalSupply The current total supply of the pool tokens (BPT)\n @param swapFeePercentage The swap fee percentage applied to the taxable amount\n @param pool The pool from which we're removing liquidity\n @return bptAmountIn Amount of pool tokens to burn\n @return swapFeeAmounts The amount of swap fees charged for each token"},"id":11927,"implemented":true,"kind":"function","modifiers":[],"name":"computeRemoveLiquiditySingleTokenExactOut","nameLocation":"16315:41:59","nodeType":"FunctionDefinition","parameters":{"id":11778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11766,"mutability":"mutable","name":"currentBalances","nameLocation":"16383:15:59","nodeType":"VariableDeclaration","scope":11927,"src":"16366:32:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11764,"name":"uint256","nodeType":"ElementaryTypeName","src":"16366:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11765,"nodeType":"ArrayTypeName","src":"16366:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11768,"mutability":"mutable","name":"tokenOutIndex","nameLocation":"16416:13:59","nodeType":"VariableDeclaration","scope":11927,"src":"16408:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11767,"name":"uint256","nodeType":"ElementaryTypeName","src":"16408:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11770,"mutability":"mutable","name":"exactAmountOut","nameLocation":"16447:14:59","nodeType":"VariableDeclaration","scope":11927,"src":"16439:22:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11769,"name":"uint256","nodeType":"ElementaryTypeName","src":"16439:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11772,"mutability":"mutable","name":"totalSupply","nameLocation":"16479:11:59","nodeType":"VariableDeclaration","scope":11927,"src":"16471:19:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11771,"name":"uint256","nodeType":"ElementaryTypeName","src":"16471:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11774,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"16508:17:59","nodeType":"VariableDeclaration","scope":11927,"src":"16500:25:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11773,"name":"uint256","nodeType":"ElementaryTypeName","src":"16500:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11777,"mutability":"mutable","name":"pool","nameLocation":"16545:4:59","nodeType":"VariableDeclaration","scope":11927,"src":"16535:14:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"},"typeName":{"id":11776,"nodeType":"UserDefinedTypeName","pathNode":{"id":11775,"name":"IBasePool","nameLocations":["16535:9:59"],"nodeType":"IdentifierPath","referencedDeclaration":1505,"src":"16535:9:59"},"referencedDeclaration":1505,"src":"16535:9:59","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}},"visibility":"internal"}],"src":"16356:199:59"},"returnParameters":{"id":11784,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11780,"mutability":"mutable","name":"bptAmountIn","nameLocation":"16587:11:59","nodeType":"VariableDeclaration","scope":11927,"src":"16579:19:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11779,"name":"uint256","nodeType":"ElementaryTypeName","src":"16579:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11783,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"16617:14:59","nodeType":"VariableDeclaration","scope":11927,"src":"16600:31:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11781,"name":"uint256","nodeType":"ElementaryTypeName","src":"16600:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11782,"nodeType":"ArrayTypeName","src":"16600:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"16578:54:59"},"scope":12083,"src":"16306:3888:59","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":12029,"nodeType":"Block","src":"21412:1896:59","statements":[{"assignments":[11951],"declarations":[{"constant":false,"id":11951,"mutability":"mutable","name":"newSupply","nameLocation":"21503:9:59","nodeType":"VariableDeclaration","scope":12029,"src":"21495:17:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11950,"name":"uint256","nodeType":"ElementaryTypeName","src":"21495:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11955,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11952,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11937,"src":"21515:11:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":11953,"name":"exactBptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11935,"src":"21529:16:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21515:30:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"21495:50:59"},{"assignments":[11957],"declarations":[{"constant":false,"id":11957,"mutability":"mutable","name":"invariantRatio","nameLocation":"21563:14:59","nodeType":"VariableDeclaration","scope":12029,"src":"21555:22:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11956,"name":"uint256","nodeType":"ElementaryTypeName","src":"21555:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11962,"initialValue":{"arguments":[{"id":11960,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11937,"src":"21596:11:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11958,"name":"newSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11951,"src":"21580:9:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21590:5:59","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":8006,"src":"21580:15:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":11961,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21580:28:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"21555:53:59"},{"expression":{"arguments":[{"id":11964,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11942,"src":"21656:4:59","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}},{"id":11965,"name":"invariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11957,"src":"21662:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":11963,"name":"ensureInvariantRatioAboveMinimumBound","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12082,"src":"21618:37:59","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IBasePool_$1505_$_t_uint256_$returns$__$","typeString":"function (contract IBasePool,uint256) view"}},"id":11966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21618:59:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":11967,"nodeType":"ExpressionStatement","src":"21618:59:59"},{"assignments":[11969],"declarations":[{"constant":false,"id":11969,"mutability":"mutable","name":"newBalance","nameLocation":"22195:10:59","nodeType":"VariableDeclaration","scope":12029,"src":"22187:18:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11968,"name":"uint256","nodeType":"ElementaryTypeName","src":"22187:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11976,"initialValue":{"arguments":[{"id":11972,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11931,"src":"22228:15:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":11973,"name":"tokenOutIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11933,"src":"22245:13:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11974,"name":"invariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11957,"src":"22260:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11970,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11942,"src":"22208:4:59","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}},"id":11971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22213:14:59","memberName":"computeBalance","nodeType":"MemberAccess","referencedDeclaration":1495,"src":"22208:19:59","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256,uint256) view external returns (uint256)"}},"id":11975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22208:67:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"22187:88:59"},{"assignments":[11978],"declarations":[{"constant":false,"id":11978,"mutability":"mutable","name":"amountOut","nameLocation":"22355:9:59","nodeType":"VariableDeclaration","scope":12029,"src":"22347:17:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11977,"name":"uint256","nodeType":"ElementaryTypeName","src":"22347:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11984,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":11979,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11931,"src":"22367:15:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11981,"indexExpression":{"id":11980,"name":"tokenOutIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11933,"src":"22383:13:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22367:30:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":11982,"name":"newBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11969,"src":"22400:10:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22367:43:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"22347:63:59"},{"assignments":[11986],"declarations":[{"constant":false,"id":11986,"mutability":"mutable","name":"newBalanceBeforeTax","nameLocation":"22626:19:59","nodeType":"VariableDeclaration","scope":12029,"src":"22618:27:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11985,"name":"uint256","nodeType":"ElementaryTypeName","src":"22618:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":11994,"initialValue":{"arguments":[{"baseExpression":{"id":11989,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11931,"src":"22667:15:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":11991,"indexExpression":{"id":11990,"name":"tokenOutIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11933,"src":"22683:13:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22667:30:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":11992,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11937,"src":"22699:11:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":11987,"name":"newSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11951,"src":"22648:9:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22658:8:59","memberName":"mulDivUp","nodeType":"MemberAccess","referencedDeclaration":8034,"src":"22648:18:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":11993,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22648:63:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"22618:93:59"},{"assignments":[11996],"declarations":[{"constant":false,"id":11996,"mutability":"mutable","name":"taxableAmount","nameLocation":"22843:13:59","nodeType":"VariableDeclaration","scope":12029,"src":"22835:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11995,"name":"uint256","nodeType":"ElementaryTypeName","src":"22835:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12000,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":11999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":11997,"name":"newBalanceBeforeTax","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11986,"src":"22859:19:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":11998,"name":"newBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11969,"src":"22881:10:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22859:32:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"22835:56:59"},{"assignments":[12002],"declarations":[{"constant":false,"id":12002,"mutability":"mutable","name":"fee","nameLocation":"22967:3:59","nodeType":"VariableDeclaration","scope":12029,"src":"22959:11:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12001,"name":"uint256","nodeType":"ElementaryTypeName","src":"22959:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12007,"initialValue":{"arguments":[{"id":12005,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11939,"src":"22993:17:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":12003,"name":"taxableAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11996,"src":"22973:13:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22987:5:59","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":7970,"src":"22973:19:59","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":12006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22973:38:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"22959:52:59"},{"expression":{"id":12015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12008,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11948,"src":"23097:14:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":12012,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11931,"src":"23128:15:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23144:6:59","memberName":"length","nodeType":"MemberAccess","src":"23128:22:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12011,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"23114:13:59","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":12009,"name":"uint256","nodeType":"ElementaryTypeName","src":"23118:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12010,"nodeType":"ArrayTypeName","src":"23118:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":12014,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23114:37:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"23097:54:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12016,"nodeType":"ExpressionStatement","src":"23097:54:59"},{"expression":{"id":12021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":12017,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11948,"src":"23161:14:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12019,"indexExpression":{"id":12018,"name":"tokenOutIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11933,"src":"23176:13:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23161:29:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12020,"name":"fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12002,"src":"23193:3:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23161:35:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12022,"nodeType":"ExpressionStatement","src":"23161:35:59"},{"expression":{"id":12027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12023,"name":"amountOutWithFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11945,"src":"23267:16:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12026,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12024,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11978,"src":"23286:9:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":12025,"name":"fee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12002,"src":"23298:3:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23286:15:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23267:34:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12028,"nodeType":"ExpressionStatement","src":"23267:34:59"}]},"documentation":{"id":11928,"nodeType":"StructuredDocumentation","src":"20200:874:59","text":" @notice Computes the amount of a single token to withdraw for a given amount of BPT to burn.\n @dev It computes the output token amount for an exact input of BPT, considering current balances,\n total supply, and swap fees.\n @param currentBalances The current token balances in the pool\n @param tokenOutIndex The index of the token to be withdrawn\n @param exactBptAmountIn The exact amount of BPT the user wants to burn\n @param totalSupply The current total supply of the pool tokens (BPT)\n @param swapFeePercentage The swap fee percentage applied to the taxable amount\n @param pool The pool from which we're removing liquidity\n @return amountOutWithFee The amount of the output token the user receives, accounting for swap fees\n @return swapFeeAmounts The total amount of swap fees charged"},"id":12030,"implemented":true,"kind":"function","modifiers":[],"name":"computeRemoveLiquiditySingleTokenExactIn","nameLocation":"21088:40:59","nodeType":"FunctionDefinition","parameters":{"id":11943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11931,"mutability":"mutable","name":"currentBalances","nameLocation":"21155:15:59","nodeType":"VariableDeclaration","scope":12030,"src":"21138:32:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11929,"name":"uint256","nodeType":"ElementaryTypeName","src":"21138:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11930,"nodeType":"ArrayTypeName","src":"21138:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":11933,"mutability":"mutable","name":"tokenOutIndex","nameLocation":"21188:13:59","nodeType":"VariableDeclaration","scope":12030,"src":"21180:21:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11932,"name":"uint256","nodeType":"ElementaryTypeName","src":"21180:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11935,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"21219:16:59","nodeType":"VariableDeclaration","scope":12030,"src":"21211:24:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11934,"name":"uint256","nodeType":"ElementaryTypeName","src":"21211:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11937,"mutability":"mutable","name":"totalSupply","nameLocation":"21253:11:59","nodeType":"VariableDeclaration","scope":12030,"src":"21245:19:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11936,"name":"uint256","nodeType":"ElementaryTypeName","src":"21245:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11939,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"21282:17:59","nodeType":"VariableDeclaration","scope":12030,"src":"21274:25:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11938,"name":"uint256","nodeType":"ElementaryTypeName","src":"21274:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11942,"mutability":"mutable","name":"pool","nameLocation":"21319:4:59","nodeType":"VariableDeclaration","scope":12030,"src":"21309:14:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"},"typeName":{"id":11941,"nodeType":"UserDefinedTypeName","pathNode":{"id":11940,"name":"IBasePool","nameLocations":["21309:9:59"],"nodeType":"IdentifierPath","referencedDeclaration":1505,"src":"21309:9:59"},"referencedDeclaration":1505,"src":"21309:9:59","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}},"visibility":"internal"}],"src":"21128:201:59"},"returnParameters":{"id":11949,"nodeType":"ParameterList","parameters":[{"constant":false,"id":11945,"mutability":"mutable","name":"amountOutWithFee","nameLocation":"21361:16:59","nodeType":"VariableDeclaration","scope":12030,"src":"21353:24:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":11944,"name":"uint256","nodeType":"ElementaryTypeName","src":"21353:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":11948,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"21396:14:59","nodeType":"VariableDeclaration","scope":12030,"src":"21379:31:59","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":11946,"name":"uint256","nodeType":"ElementaryTypeName","src":"21379:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":11947,"nodeType":"ArrayTypeName","src":"21379:9:59","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"21352:59:59"},"scope":12083,"src":"21079:2229:59","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":12055,"nodeType":"Block","src":"23740:214:59","statements":[{"assignments":[12040],"declarations":[{"constant":false,"id":12040,"mutability":"mutable","name":"maxInvariantRatio","nameLocation":"23758:17:59","nodeType":"VariableDeclaration","scope":12055,"src":"23750:25:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12039,"name":"uint256","nodeType":"ElementaryTypeName","src":"23750:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12044,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12041,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12034,"src":"23778:4:59","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}},"id":12042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23783:24:59","memberName":"getMaximumInvariantRatio","nodeType":"MemberAccess","referencedDeclaration":3072,"src":"23778:29:59","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":12043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23778:31:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"23750:59:59"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12045,"name":"invariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12036,"src":"23823:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":12046,"name":"maxInvariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12040,"src":"23840:17:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23823:34:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12054,"nodeType":"IfStatement","src":"23819:129:59","trueBody":{"id":12053,"nodeType":"Block","src":"23859:89:59","statements":[{"errorCall":{"arguments":[{"id":12049,"name":"invariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12036,"src":"23903:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12050,"name":"maxInvariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12040,"src":"23919:17:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12048,"name":"InvariantRatioAboveMax","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11367,"src":"23880:22:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":12051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23880:57:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12052,"nodeType":"RevertStatement","src":"23873:64:59"}]}}]},"documentation":{"id":12031,"nodeType":"StructuredDocumentation","src":"23314:320:59","text":" @notice Validate the invariant ratio against the maximum bound.\n @dev This is checked when we're adding liquidity, so the `invariantRatio` > 1.\n @param pool The pool to which we're adding liquidity\n @param invariantRatio The ratio of the new invariant (after an operation) to the old"},"id":12056,"implemented":true,"kind":"function","modifiers":[],"name":"ensureInvariantRatioBelowMaximumBound","nameLocation":"23648:37:59","nodeType":"FunctionDefinition","parameters":{"id":12037,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12034,"mutability":"mutable","name":"pool","nameLocation":"23696:4:59","nodeType":"VariableDeclaration","scope":12056,"src":"23686:14:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"},"typeName":{"id":12033,"nodeType":"UserDefinedTypeName","pathNode":{"id":12032,"name":"IBasePool","nameLocations":["23686:9:59"],"nodeType":"IdentifierPath","referencedDeclaration":1505,"src":"23686:9:59"},"referencedDeclaration":1505,"src":"23686:9:59","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}},"visibility":"internal"},{"constant":false,"id":12036,"mutability":"mutable","name":"invariantRatio","nameLocation":"23710:14:59","nodeType":"VariableDeclaration","scope":12056,"src":"23702:22:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12035,"name":"uint256","nodeType":"ElementaryTypeName","src":"23702:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23685:40:59"},"returnParameters":{"id":12038,"nodeType":"ParameterList","parameters":[],"src":"23740:0:59"},"scope":12083,"src":"23639:315:59","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":12081,"nodeType":"Block","src":"24392:214:59","statements":[{"assignments":[12066],"declarations":[{"constant":false,"id":12066,"mutability":"mutable","name":"minInvariantRatio","nameLocation":"24410:17:59","nodeType":"VariableDeclaration","scope":12081,"src":"24402:25:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12065,"name":"uint256","nodeType":"ElementaryTypeName","src":"24402:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12070,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12067,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12060,"src":"24430:4:59","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}},"id":12068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24435:24:59","memberName":"getMinimumInvariantRatio","nodeType":"MemberAccess","referencedDeclaration":3066,"src":"24430:29:59","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":12069,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24430:31:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"24402:59:59"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12071,"name":"invariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12062,"src":"24475:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":12072,"name":"minInvariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12066,"src":"24492:17:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24475:34:59","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12080,"nodeType":"IfStatement","src":"24471:129:59","trueBody":{"id":12079,"nodeType":"Block","src":"24511:89:59","statements":[{"errorCall":{"arguments":[{"id":12075,"name":"invariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12062,"src":"24555:14:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12076,"name":"minInvariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12066,"src":"24571:17:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12074,"name":"InvariantRatioBelowMin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11374,"src":"24532:22:59","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":12077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24532:57:59","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12078,"nodeType":"RevertStatement","src":"24525:64:59"}]}}]},"documentation":{"id":12057,"nodeType":"StructuredDocumentation","src":"23960:326:59","text":" @notice Validate the invariant ratio against the maximum bound.\n @dev This is checked when we're removing liquidity, so the `invariantRatio` < 1.\n @param pool The pool from which we're removing liquidity\n @param invariantRatio The ratio of the new invariant (after an operation) to the old"},"id":12082,"implemented":true,"kind":"function","modifiers":[],"name":"ensureInvariantRatioAboveMinimumBound","nameLocation":"24300:37:59","nodeType":"FunctionDefinition","parameters":{"id":12063,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12060,"mutability":"mutable","name":"pool","nameLocation":"24348:4:59","nodeType":"VariableDeclaration","scope":12082,"src":"24338:14:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"},"typeName":{"id":12059,"nodeType":"UserDefinedTypeName","pathNode":{"id":12058,"name":"IBasePool","nameLocations":["24338:9:59"],"nodeType":"IdentifierPath","referencedDeclaration":1505,"src":"24338:9:59"},"referencedDeclaration":1505,"src":"24338:9:59","typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}},"visibility":"internal"},{"constant":false,"id":12062,"mutability":"mutable","name":"invariantRatio","nameLocation":"24362:14:59","nodeType":"VariableDeclaration","scope":12082,"src":"24354:22:59","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12061,"name":"uint256","nodeType":"ElementaryTypeName","src":"24354:7:59","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"24337:40:59"},"returnParameters":{"id":12064,"nodeType":"ParameterList","parameters":[],"src":"24392:0:59"},"scope":12083,"src":"24291:315:59","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":12084,"src":"343:24265:59","usedErrors":[11367,11374],"usedEvents":[]}],"src":"46:24563:59"},"id":59},"@balancer-labs/v3-vault/contracts/BatchRouter.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/BatchRouter.sol","exportedSymbols":{"AddLiquidityKind":[4807],"AddLiquidityParams":[4823],"AfterSwapParams":[4801],"BatchRouter":[13916],"BatchRouterCommon":[14207],"BufferWrapOrUnwrapParams":[4862],"CastingHelpers":[5642],"EVMCallModeHelpers":[5808],"FEE_BITLENGTH":[4865],"FEE_SCALING_FACTOR":[4868],"HookFlags":[4627],"HooksConfig":[4651],"IBatchRouter":[1735],"IERC20":[40109],"IERC4626":[39833],"IPermit2":[48578],"IRateProvider":[263],"IVault":[3111],"IWETH":[291],"InputHelpers":[6193],"LiquidityManagement":[4580],"MAX_FEE_PERCENTAGE":[4871],"PoolConfig":[4605],"PoolConfigBits":[4582],"PoolData":[4729],"PoolRoleAccounts":[4677],"PoolSwapParams":[4772],"RemoveLiquidityKind":[4828],"RemoveLiquidityParams":[4844],"Rounding":[4732],"SafeCast":[44983],"SafeERC20":[40461],"SwapKind":[4735],"SwapState":[4661],"SwapStepLocals":[12117],"TokenConfig":[4694],"TokenInfo":[4704],"TokenType":[4681],"TransientEnumerableSet":[10693],"TransientStorageHelpers":[7442],"VaultState":[4669],"VaultSwapParams":[4754],"WrappingDirection":[4847]},"id":13917,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":12085,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:60"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":12087,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13917,"sourceUnit":40462,"src":"72:84:60","symbolAliases":[{"foreign":{"id":12086,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40461,"src":"81:9:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":12089,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13917,"sourceUnit":44984,"src":"157:75:60","symbolAliases":[{"foreign":{"id":12088,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44983,"src":"166:8:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":12091,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13917,"sourceUnit":40110,"src":"233:72:60","symbolAliases":[{"foreign":{"id":12090,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"242:6:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"permit2/src/interfaces/IPermit2.sol","file":"permit2/src/interfaces/IPermit2.sol","id":12093,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13917,"sourceUnit":48579,"src":"306:63:60","symbolAliases":[{"foreign":{"id":12092,"name":"IPermit2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48578,"src":"315:8:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBatchRouter.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IBatchRouter.sol","id":12095,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13917,"sourceUnit":1736,"src":"371:93:60","symbolAliases":[{"foreign":{"id":12094,"name":"IBatchRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1735,"src":"380:12:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol","id":12097,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13917,"sourceUnit":292,"src":"465:93:60","symbolAliases":[{"foreign":{"id":12096,"name":"IWETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":291,"src":"474:5:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":12099,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13917,"sourceUnit":3112,"src":"559:81:60","symbolAliases":[{"foreign":{"id":12098,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"568:6:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":12100,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13917,"sourceUnit":4872,"src":"641:69:60","symbolAliases":[],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol","id":12102,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13917,"sourceUnit":5809,"src":"712:111:60","symbolAliases":[{"foreign":{"id":12101,"name":"EVMCallModeHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5808,"src":"721:18:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol","id":12104,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13917,"sourceUnit":5643,"src":"824:103:60","symbolAliases":[{"foreign":{"id":12103,"name":"CastingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5642,"src":"833:14:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","id":12106,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13917,"sourceUnit":6194,"src":"928:99:60","symbolAliases":[{"foreign":{"id":12105,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6193,"src":"937:12:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/TransientEnumerableSet.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/TransientEnumerableSet.sol","id":12108,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13917,"sourceUnit":10694,"src":"1028:128:60","symbolAliases":[{"foreign":{"id":12107,"name":"TransientEnumerableSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10693,"src":"1041:22:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","id":12110,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13917,"sourceUnit":7443,"src":"1157:125:60","symbolAliases":[{"foreign":{"id":12109,"name":"TransientStorageHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7442,"src":"1170:23:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/BatchRouterCommon.sol","file":"./BatchRouterCommon.sol","id":12112,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":13917,"sourceUnit":14208,"src":"1284:60:60","symbolAliases":[{"foreign":{"id":12111,"name":"BatchRouterCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14207,"src":"1293:17:60","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"SwapStepLocals","id":12117,"members":[{"constant":false,"id":12114,"mutability":"mutable","name":"isFirstStep","nameLocation":"1379:11:60","nodeType":"VariableDeclaration","scope":12117,"src":"1374:16:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12113,"name":"bool","nodeType":"ElementaryTypeName","src":"1374:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12116,"mutability":"mutable","name":"isLastStep","nameLocation":"1401:10:60","nodeType":"VariableDeclaration","scope":12117,"src":"1396:15:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12115,"name":"bool","nodeType":"ElementaryTypeName","src":"1396:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"SwapStepLocals","nameLocation":"1353:14:60","nodeType":"StructDefinition","scope":13917,"src":"1346:68:60","visibility":"public"},{"abstract":false,"baseContracts":[{"baseName":{"id":12119,"name":"IBatchRouter","nameLocations":["1806:12:60"],"nodeType":"IdentifierPath","referencedDeclaration":1735,"src":"1806:12:60"},"id":12120,"nodeType":"InheritanceSpecifier","src":"1806:12:60"},{"baseName":{"id":12121,"name":"BatchRouterCommon","nameLocations":["1820:17:60"],"nodeType":"IdentifierPath","referencedDeclaration":14207,"src":"1820:17:60"},"id":12122,"nodeType":"InheritanceSpecifier","src":"1820:17:60"}],"canonicalName":"BatchRouter","contractDependencies":[],"contractKind":"contract","documentation":{"id":12118,"nodeType":"StructuredDocumentation","src":"1416:365:60","text":" @notice Entrypoint for batch swaps, and batch swap queries.\n @dev The external API functions unlock the Vault, which calls back into the corresponding hook functions.\n These interpret the steps and paths in the input data, perform token accounting (in transient storage, to save gas),\n settle with the Vault, and handle wrapping and unwrapping ETH."},"fullyImplemented":true,"id":13916,"linearizedBaseContracts":[13916,14207,19198,7482,273,9942,28149,19328,3041,3025,1735],"name":"BatchRouter","nameLocation":"1791:11:60","nodeType":"ContractDefinition","nodes":[{"global":false,"id":12124,"libraryName":{"id":12123,"name":"CastingHelpers","nameLocations":["1850:14:60"],"nodeType":"IdentifierPath","referencedDeclaration":5642,"src":"1850:14:60"},"nodeType":"UsingForDirective","src":"1844:27:60"},{"global":false,"id":12128,"libraryName":{"id":12125,"name":"TransientEnumerableSet","nameLocations":["1882:22:60"],"nodeType":"IdentifierPath","referencedDeclaration":10693,"src":"1882:22:60"},"nodeType":"UsingForDirective","src":"1876:67:60","typeName":{"id":12127,"nodeType":"UserDefinedTypeName","pathNode":{"id":12126,"name":"TransientEnumerableSet.AddressSet","nameLocations":["1909:22:60","1932:10:60"],"nodeType":"IdentifierPath","referencedDeclaration":10308,"src":"1909:33:60"},"referencedDeclaration":10308,"src":"1909:33:60","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"}}},{"global":false,"id":12130,"libraryName":{"id":12129,"name":"TransientStorageHelpers","nameLocations":["1954:23:60"],"nodeType":"IdentifierPath","referencedDeclaration":7442,"src":"1954:23:60"},"nodeType":"UsingForDirective","src":"1948:36:60"},{"global":false,"id":12134,"libraryName":{"id":12131,"name":"SafeERC20","nameLocations":["1995:9:60"],"nodeType":"IdentifierPath","referencedDeclaration":40461,"src":"1995:9:60"},"nodeType":"UsingForDirective","src":"1989:27:60","typeName":{"id":12133,"nodeType":"UserDefinedTypeName","pathNode":{"id":12132,"name":"IERC20","nameLocations":["2009:6:60"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"2009:6:60"},"referencedDeclaration":40109,"src":"2009:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}},{"global":false,"id":12136,"libraryName":{"id":12135,"name":"SafeCast","nameLocations":["2027:8:60"],"nodeType":"IdentifierPath","referencedDeclaration":44983,"src":"2027:8:60"},"nodeType":"UsingForDirective","src":"2021:21:60"},{"body":{"id":12156,"nodeType":"Block","src":"2226:64:60","statements":[]},"id":12157,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":12150,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12139,"src":"2189:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},{"id":12151,"name":"weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12142,"src":"2196:4:60","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},{"id":12152,"name":"permit2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12145,"src":"2202:7:60","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"}},{"id":12153,"name":"routerVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12147,"src":"2211:13:60","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":12154,"kind":"baseConstructorSpecifier","modifierName":{"id":12149,"name":"BatchRouterCommon","nameLocations":["2171:17:60"],"nodeType":"IdentifierPath","referencedDeclaration":14207,"src":"2171:17:60"},"nodeType":"ModifierInvocation","src":"2171:54:60"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":12148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12139,"mutability":"mutable","name":"vault","nameLocation":"2076:5:60","nodeType":"VariableDeclaration","scope":12157,"src":"2069:12:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":12138,"nodeType":"UserDefinedTypeName","pathNode":{"id":12137,"name":"IVault","nameLocations":["2069:6:60"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"2069:6:60"},"referencedDeclaration":3111,"src":"2069:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":12142,"mutability":"mutable","name":"weth","nameLocation":"2097:4:60","nodeType":"VariableDeclaration","scope":12157,"src":"2091:10:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"},"typeName":{"id":12141,"nodeType":"UserDefinedTypeName","pathNode":{"id":12140,"name":"IWETH","nameLocations":["2091:5:60"],"nodeType":"IdentifierPath","referencedDeclaration":291,"src":"2091:5:60"},"referencedDeclaration":291,"src":"2091:5:60","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},"visibility":"internal"},{"constant":false,"id":12145,"mutability":"mutable","name":"permit2","nameLocation":"2120:7:60","nodeType":"VariableDeclaration","scope":12157,"src":"2111:16:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"},"typeName":{"id":12144,"nodeType":"UserDefinedTypeName","pathNode":{"id":12143,"name":"IPermit2","nameLocations":["2111:8:60"],"nodeType":"IdentifierPath","referencedDeclaration":48578,"src":"2111:8:60"},"referencedDeclaration":48578,"src":"2111:8:60","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"}},"visibility":"internal"},{"constant":false,"id":12147,"mutability":"mutable","name":"routerVersion","nameLocation":"2151:13:60","nodeType":"VariableDeclaration","scope":12157,"src":"2137:27:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":12146,"name":"string","nodeType":"ElementaryTypeName","src":"2137:6:60","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2059:111:60"},"returnParameters":{"id":12155,"nodeType":"ParameterList","parameters":[],"src":"2226:0:60"},"scope":13916,"src":"2048:242:60","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[1669],"body":{"id":12214,"nodeType":"Block","src":"2868:582:60","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":12190,"name":"BatchRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13916,"src":"3000:11:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BatchRouter_$13916_$","typeString":"type(contract BatchRouter)"}},"id":12191,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3012:15:60","memberName":"swapExactInHook","nodeType":"MemberAccess","referencedDeclaration":12309,"src":"3000:27:60","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_SwapExactInHookParams_$1633_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function BatchRouter.swapExactInHook(struct IBatchRouter.SwapExactInHookParams calldata) returns (uint256[] memory,address[] memory,uint256[] memory)"}},{"arguments":[{"expression":{"id":12193,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3113:3:60","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3117:6:60","memberName":"sender","nodeType":"MemberAccess","src":"3113:10:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12195,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12162,"src":"3160:5:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountIn_$1608_memory_ptr_$dyn_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn memory[] memory"}},{"id":12196,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12164,"src":"3205:8:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12197,"name":"wethIsEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12166,"src":"3254:9:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":12198,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12168,"src":"3303:8:60","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountIn_$1608_memory_ptr_$dyn_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn memory[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":12192,"name":"SwapExactInHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1633,"src":"3053:21:60","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_SwapExactInHookParams_$1633_storage_ptr_$","typeString":"type(struct IBatchRouter.SwapExactInHookParams storage pointer)"}},"id":12199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["3105:6:60","3153:5:60","3195:8:60","3243:9:60","3293:8:60"],"names":["sender","paths","deadline","wethIsEth","userData"],"nodeType":"FunctionCall","src":"3053:285:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_memory_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_SwapExactInHookParams_$1633_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function BatchRouter.swapExactInHook(struct IBatchRouter.SwapExactInHookParams calldata) returns (uint256[] memory,address[] memory,uint256[] memory)"},{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_memory_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams memory"}],"expression":{"id":12188,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2960:3:60","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":12189,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2964:10:60","memberName":"encodeCall","nodeType":"MemberAccess","src":"2960:14:60","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":12200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2960:400:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":12186,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"2925:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":12187,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2932:6:60","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":4440,"src":"2925:13:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":12201,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2925:453:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"baseExpression":{"id":12203,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3397:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":12202,"name":"uint256","nodeType":"ElementaryTypeName","src":"3397:7:60","typeDescriptions":{}}},"id":12204,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"3397:9:60","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}},{"baseExpression":{"id":12206,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3408:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12205,"name":"address","nodeType":"ElementaryTypeName","src":"3408:7:60","typeDescriptions":{}}},"id":12207,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"3408:9:60","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"type(address[] memory)"}},{"baseExpression":{"id":12209,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3419:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":12208,"name":"uint256","nodeType":"ElementaryTypeName","src":"3419:7:60","typeDescriptions":{}}},"id":12210,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"3419:9:60","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}}],"id":12211,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"3396:33:60","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_array$_t_address_$dyn_memory_ptr_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$","typeString":"tuple(type(uint256[] memory),type(address[] memory),type(uint256[] memory))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_array$_t_address_$dyn_memory_ptr_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$","typeString":"tuple(type(uint256[] memory),type(address[] memory),type(uint256[] memory))"}],"expression":{"id":12184,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2897:3:60","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":12185,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2901:6:60","memberName":"decode","nodeType":"MemberAccess","src":"2897:10:60","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":12212,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2897:546:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256[] memory,address[] memory,uint256[] memory)"}},"functionReturnParameters":12183,"id":12213,"nodeType":"Return","src":"2878:565:60"}]},"documentation":{"id":12158,"nodeType":"StructuredDocumentation","src":"2504:28:60","text":"@inheritdoc IBatchRouter"},"functionSelector":"286f580d","id":12215,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"expression":{"id":12171,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2745:3:60","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12172,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2749:6:60","memberName":"sender","nodeType":"MemberAccess","src":"2745:10:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":12173,"kind":"modifierInvocation","modifierName":{"id":12170,"name":"saveSender","nameLocations":["2734:10:60"],"nodeType":"IdentifierPath","referencedDeclaration":19249,"src":"2734:10:60"},"nodeType":"ModifierInvocation","src":"2734:22:60"}],"name":"swapExactIn","nameLocation":"2546:11:60","nodeType":"FunctionDefinition","parameters":{"id":12169,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12162,"mutability":"mutable","name":"paths","nameLocation":"2598:5:60","nodeType":"VariableDeclaration","scope":12215,"src":"2567:36:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountIn_$1608_memory_ptr_$dyn_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn[]"},"typeName":{"baseType":{"id":12160,"nodeType":"UserDefinedTypeName","pathNode":{"id":12159,"name":"SwapPathExactAmountIn","nameLocations":["2567:21:60"],"nodeType":"IdentifierPath","referencedDeclaration":1608,"src":"2567:21:60"},"referencedDeclaration":1608,"src":"2567:21:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountIn_$1608_storage_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn"}},"id":12161,"nodeType":"ArrayTypeName","src":"2567:23:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountIn_$1608_storage_$dyn_storage_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn[]"}},"visibility":"internal"},{"constant":false,"id":12164,"mutability":"mutable","name":"deadline","nameLocation":"2621:8:60","nodeType":"VariableDeclaration","scope":12215,"src":"2613:16:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12163,"name":"uint256","nodeType":"ElementaryTypeName","src":"2613:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12166,"mutability":"mutable","name":"wethIsEth","nameLocation":"2644:9:60","nodeType":"VariableDeclaration","scope":12215,"src":"2639:14:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12165,"name":"bool","nodeType":"ElementaryTypeName","src":"2639:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12168,"mutability":"mutable","name":"userData","nameLocation":"2678:8:60","nodeType":"VariableDeclaration","scope":12215,"src":"2663:23:60","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":12167,"name":"bytes","nodeType":"ElementaryTypeName","src":"2663:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2557:135:60"},"returnParameters":{"id":12183,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12176,"mutability":"mutable","name":"pathAmountsOut","nameLocation":"2791:14:60","nodeType":"VariableDeclaration","scope":12215,"src":"2774:31:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12174,"name":"uint256","nodeType":"ElementaryTypeName","src":"2774:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12175,"nodeType":"ArrayTypeName","src":"2774:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":12179,"mutability":"mutable","name":"tokensOut","nameLocation":"2824:9:60","nodeType":"VariableDeclaration","scope":12215,"src":"2807:26:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":12177,"name":"address","nodeType":"ElementaryTypeName","src":"2807:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":12178,"nodeType":"ArrayTypeName","src":"2807:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":12182,"mutability":"mutable","name":"amountsOut","nameLocation":"2852:10:60","nodeType":"VariableDeclaration","scope":12215,"src":"2835:27:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12180,"name":"uint256","nodeType":"ElementaryTypeName","src":"2835:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12181,"nodeType":"ArrayTypeName","src":"2835:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"2773:90:60"},"scope":13916,"src":"2537:913:60","stateMutability":"payable","virtual":false,"visibility":"external"},{"baseFunctions":[1692],"body":{"id":12272,"nodeType":"Block","src":"3819:584:60","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":12248,"name":"BatchRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13916,"src":"3951:11:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BatchRouter_$13916_$","typeString":"type(contract BatchRouter)"}},"id":12249,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3963:16:60","memberName":"swapExactOutHook","nodeType":"MemberAccess","referencedDeclaration":12996,"src":"3951:28:60","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_SwapExactOutHookParams_$1646_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function BatchRouter.swapExactOutHook(struct IBatchRouter.SwapExactOutHookParams calldata) returns (uint256[] memory,address[] memory,uint256[] memory)"}},{"arguments":[{"expression":{"id":12251,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4066:3:60","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4070:6:60","memberName":"sender","nodeType":"MemberAccess","src":"4066:10:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12253,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12220,"src":"4113:5:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountOut_$1620_memory_ptr_$dyn_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut memory[] memory"}},{"id":12254,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12222,"src":"4158:8:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12255,"name":"wethIsEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12224,"src":"4207:9:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":12256,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12226,"src":"4256:8:60","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountOut_$1620_memory_ptr_$dyn_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut memory[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":12250,"name":"SwapExactOutHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1646,"src":"4005:22:60","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_SwapExactOutHookParams_$1646_storage_ptr_$","typeString":"type(struct IBatchRouter.SwapExactOutHookParams storage pointer)"}},"id":12257,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["4058:6:60","4106:5:60","4148:8:60","4196:9:60","4246:8:60"],"names":["sender","paths","deadline","wethIsEth","userData"],"nodeType":"FunctionCall","src":"4005:286:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_memory_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_SwapExactOutHookParams_$1646_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function BatchRouter.swapExactOutHook(struct IBatchRouter.SwapExactOutHookParams calldata) returns (uint256[] memory,address[] memory,uint256[] memory)"},{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_memory_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams memory"}],"expression":{"id":12246,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3911:3:60","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":12247,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3915:10:60","memberName":"encodeCall","nodeType":"MemberAccess","src":"3911:14:60","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":12258,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3911:402:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":12244,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"3876:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":12245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3883:6:60","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":4440,"src":"3876:13:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":12259,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3876:455:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"baseExpression":{"id":12261,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4350:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":12260,"name":"uint256","nodeType":"ElementaryTypeName","src":"4350:7:60","typeDescriptions":{}}},"id":12262,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"4350:9:60","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}},{"baseExpression":{"id":12264,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4361:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12263,"name":"address","nodeType":"ElementaryTypeName","src":"4361:7:60","typeDescriptions":{}}},"id":12265,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"4361:9:60","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"type(address[] memory)"}},{"baseExpression":{"id":12267,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4372:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":12266,"name":"uint256","nodeType":"ElementaryTypeName","src":"4372:7:60","typeDescriptions":{}}},"id":12268,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"4372:9:60","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}}],"id":12269,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"4349:33:60","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_array$_t_address_$dyn_memory_ptr_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$","typeString":"tuple(type(uint256[] memory),type(address[] memory),type(uint256[] memory))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_array$_t_address_$dyn_memory_ptr_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$","typeString":"tuple(type(uint256[] memory),type(address[] memory),type(uint256[] memory))"}],"expression":{"id":12242,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3848:3:60","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":12243,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3852:6:60","memberName":"decode","nodeType":"MemberAccess","src":"3848:10:60","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":12270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3848:548:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256[] memory,address[] memory,uint256[] memory)"}},"functionReturnParameters":12241,"id":12271,"nodeType":"Return","src":"3829:567:60"}]},"documentation":{"id":12216,"nodeType":"StructuredDocumentation","src":"3456:28:60","text":"@inheritdoc IBatchRouter"},"functionSelector":"8eb1b65e","id":12273,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"expression":{"id":12229,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3699:3:60","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":12230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3703:6:60","memberName":"sender","nodeType":"MemberAccess","src":"3699:10:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":12231,"kind":"modifierInvocation","modifierName":{"id":12228,"name":"saveSender","nameLocations":["3688:10:60"],"nodeType":"IdentifierPath","referencedDeclaration":19249,"src":"3688:10:60"},"nodeType":"ModifierInvocation","src":"3688:22:60"}],"name":"swapExactOut","nameLocation":"3498:12:60","nodeType":"FunctionDefinition","parameters":{"id":12227,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12220,"mutability":"mutable","name":"paths","nameLocation":"3552:5:60","nodeType":"VariableDeclaration","scope":12273,"src":"3520:37:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountOut_$1620_memory_ptr_$dyn_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut[]"},"typeName":{"baseType":{"id":12218,"nodeType":"UserDefinedTypeName","pathNode":{"id":12217,"name":"SwapPathExactAmountOut","nameLocations":["3520:22:60"],"nodeType":"IdentifierPath","referencedDeclaration":1620,"src":"3520:22:60"},"referencedDeclaration":1620,"src":"3520:22:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountOut_$1620_storage_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut"}},"id":12219,"nodeType":"ArrayTypeName","src":"3520:24:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountOut_$1620_storage_$dyn_storage_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut[]"}},"visibility":"internal"},{"constant":false,"id":12222,"mutability":"mutable","name":"deadline","nameLocation":"3575:8:60","nodeType":"VariableDeclaration","scope":12273,"src":"3567:16:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12221,"name":"uint256","nodeType":"ElementaryTypeName","src":"3567:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":12224,"mutability":"mutable","name":"wethIsEth","nameLocation":"3598:9:60","nodeType":"VariableDeclaration","scope":12273,"src":"3593:14:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":12223,"name":"bool","nodeType":"ElementaryTypeName","src":"3593:4:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":12226,"mutability":"mutable","name":"userData","nameLocation":"3632:8:60","nodeType":"VariableDeclaration","scope":12273,"src":"3617:23:60","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":12225,"name":"bytes","nodeType":"ElementaryTypeName","src":"3617:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3510:136:60"},"returnParameters":{"id":12241,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12234,"mutability":"mutable","name":"pathAmountsIn","nameLocation":"3745:13:60","nodeType":"VariableDeclaration","scope":12273,"src":"3728:30:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12232,"name":"uint256","nodeType":"ElementaryTypeName","src":"3728:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12233,"nodeType":"ArrayTypeName","src":"3728:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":12237,"mutability":"mutable","name":"tokensIn","nameLocation":"3777:8:60","nodeType":"VariableDeclaration","scope":12273,"src":"3760:25:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":12235,"name":"address","nodeType":"ElementaryTypeName","src":"3760:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":12236,"nodeType":"ArrayTypeName","src":"3760:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":12240,"mutability":"mutable","name":"amountsIn","nameLocation":"3804:9:60","nodeType":"VariableDeclaration","scope":12273,"src":"3787:26:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12238,"name":"uint256","nodeType":"ElementaryTypeName","src":"3787:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12239,"nodeType":"ArrayTypeName","src":"3787:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"3727:87:60"},"scope":13916,"src":"3489:914:60","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":12308,"nodeType":"Block","src":"4654:139:60","statements":[{"expression":{"id":12299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":12292,"name":"pathAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12284,"src":"4665:14:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":12293,"name":"tokensOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12287,"src":"4681:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},{"id":12294,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12290,"src":"4692:10:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"id":12295,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"4664:39:60","typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256[] memory,address[] memory,uint256[] memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12297,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12276,"src":"4723:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_calldata_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_calldata_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams calldata"}],"id":12296,"name":"_swapExactInHook","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12399,"src":"4706:16:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_SwapExactInHookParams_$1633_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (struct IBatchRouter.SwapExactInHookParams calldata) returns (uint256[] memory,address[] memory,uint256[] memory)"}},"id":12298,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4706:24:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256[] memory,address[] memory,uint256[] memory)"}},"src":"4664:66:60","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12300,"nodeType":"ExpressionStatement","src":"4664:66:60"},{"expression":{"arguments":[{"expression":{"id":12302,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12276,"src":"4754:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_calldata_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams calldata"}},"id":12303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4761:6:60","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":1622,"src":"4754:13:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":12304,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12276,"src":"4769:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_calldata_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams calldata"}},"id":12305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4776:9:60","memberName":"wethIsEth","nodeType":"MemberAccess","referencedDeclaration":1630,"src":"4769:16:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":12301,"name":"_settlePaths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"4741:12:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":12306,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4741:45:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12307,"nodeType":"ExpressionStatement","src":"4741:45:60"}]},"functionSelector":"08a465f6","id":12309,"implemented":true,"kind":"function","modifiers":[{"id":12279,"kind":"modifierInvocation","modifierName":{"id":12278,"name":"nonReentrant","nameLocations":["4512:12:60"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"4512:12:60"},"nodeType":"ModifierInvocation","src":"4512:12:60"},{"id":12281,"kind":"modifierInvocation","modifierName":{"id":12280,"name":"onlyVault","nameLocations":["4533:9:60"],"nodeType":"IdentifierPath","referencedDeclaration":28128,"src":"4533:9:60"},"nodeType":"ModifierInvocation","src":"4533:9:60"}],"name":"swapExactInHook","nameLocation":"4418:15:60","nodeType":"FunctionDefinition","parameters":{"id":12277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12276,"mutability":"mutable","name":"params","nameLocation":"4474:6:60","nodeType":"VariableDeclaration","scope":12309,"src":"4443:37:60","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_calldata_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams"},"typeName":{"id":12275,"nodeType":"UserDefinedTypeName","pathNode":{"id":12274,"name":"SwapExactInHookParams","nameLocations":["4443:21:60"],"nodeType":"IdentifierPath","referencedDeclaration":1633,"src":"4443:21:60"},"referencedDeclaration":1633,"src":"4443:21:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_storage_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams"}},"visibility":"internal"}],"src":"4433:53:60"},"returnParameters":{"id":12291,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12284,"mutability":"mutable","name":"pathAmountsOut","nameLocation":"4577:14:60","nodeType":"VariableDeclaration","scope":12309,"src":"4560:31:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12282,"name":"uint256","nodeType":"ElementaryTypeName","src":"4560:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12283,"nodeType":"ArrayTypeName","src":"4560:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":12287,"mutability":"mutable","name":"tokensOut","nameLocation":"4610:9:60","nodeType":"VariableDeclaration","scope":12309,"src":"4593:26:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":12285,"name":"address","nodeType":"ElementaryTypeName","src":"4593:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":12286,"nodeType":"ArrayTypeName","src":"4593:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":12290,"mutability":"mutable","name":"amountsOut","nameLocation":"4638:10:60","nodeType":"VariableDeclaration","scope":12309,"src":"4621:27:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12288,"name":"uint256","nodeType":"ElementaryTypeName","src":"4621:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12289,"nodeType":"ArrayTypeName","src":"4621:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4559:90:60"},"scope":13916,"src":"4409:384:60","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":12398,"nodeType":"Block","src":"4986:867:60","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12324,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"5152:5:60","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":12325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5158:9:60","memberName":"timestamp","nodeType":"MemberAccess","src":"5152:15:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":12326,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12312,"src":"5170:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_calldata_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams calldata"}},"id":12327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5177:8:60","memberName":"deadline","nodeType":"MemberAccess","referencedDeclaration":1628,"src":"5170:15:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5152:33:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12333,"nodeType":"IfStatement","src":"5148:85:60","trueBody":{"id":12332,"nodeType":"Block","src":"5187:46:60","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":12329,"name":"SwapDeadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3034,"src":"5208:12:60","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":12330,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5208:14:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":12331,"nodeType":"RevertStatement","src":"5201:21:60"}]}},{"expression":{"id":12338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12334,"name":"pathAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12316,"src":"5243:14:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12336,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12312,"src":"5283:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_calldata_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_calldata_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams calldata"}],"id":12335,"name":"_computePathAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12960,"src":"5260:22:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_SwapExactInHookParams_$1633_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (struct IBatchRouter.SwapExactInHookParams calldata) returns (uint256[] memory)"}},"id":12337,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5260:30:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"5243:47:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12339,"nodeType":"ExpressionStatement","src":"5243:47:60"},{"expression":{"id":12345,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12340,"name":"tokensOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12319,"src":"5469:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12341,"name":"_currentSwapTokensOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14012,"src":"5481:21:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function () view returns (struct TransientEnumerableSet.AddressSet storage pointer)"}},"id":12342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5481:23:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}},"id":12343,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5505:6:60","memberName":"values","nodeType":"MemberAccess","referencedDeclaration":10655,"src":"5481:30:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$10308_storage_ptr_$returns$_t_array$_t_address_$dyn_memory_ptr_$attached_to$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer) view returns (address[] memory)"}},"id":12344,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5481:32:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"5469:44:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":12346,"nodeType":"ExpressionStatement","src":"5469:44:60"},{"expression":{"id":12354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12347,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12322,"src":"5523:10:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":12351,"name":"tokensOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12319,"src":"5550:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":12352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5560:6:60","memberName":"length","nodeType":"MemberAccess","src":"5550:16:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12350,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"5536:13:60","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":12348,"name":"uint256","nodeType":"ElementaryTypeName","src":"5540:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12349,"nodeType":"ArrayTypeName","src":"5540:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":12353,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5536:31:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"5523:44:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12355,"nodeType":"ExpressionStatement","src":"5523:44:60"},{"body":{"id":12396,"nodeType":"Block","src":"5624:223:60","statements":[{"expression":{"id":12385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":12367,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12322,"src":"5638:10:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12369,"indexExpression":{"id":12368,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12357,"src":"5649:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5638:13:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"baseExpression":{"id":12373,"name":"tokensOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12319,"src":"5705:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":12375,"indexExpression":{"id":12374,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12357,"src":"5715:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5705:12:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12370,"name":"_currentSwapTokenOutAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14036,"src":"5670:27:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function () view returns (AddressToUintMappingSlot)"}},"id":12371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5670:29:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":12372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5700:4:60","memberName":"tGet","nodeType":"MemberAccess","referencedDeclaration":6990,"src":"5670:34:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address) view returns (uint256)"}},"id":12376,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5670:48:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"baseExpression":{"id":12380,"name":"tokensOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12319,"src":"5765:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":12382,"indexExpression":{"id":12381,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12357,"src":"5775:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5765:12:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12377,"name":"_settledTokenAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14048,"src":"5737:20:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function () view returns (AddressToUintMappingSlot)"}},"id":12378,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5737:22:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":12379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5760:4:60","memberName":"tGet","nodeType":"MemberAccess","referencedDeclaration":6990,"src":"5737:27:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address) view returns (uint256)"}},"id":12383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5737:41:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5670:108:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5638:140:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12386,"nodeType":"ExpressionStatement","src":"5638:140:60"},{"expression":{"arguments":[{"baseExpression":{"id":12390,"name":"tokensOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12319,"src":"5820:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":12392,"indexExpression":{"id":12391,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12357,"src":"5830:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5820:12:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":12393,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5834:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12387,"name":"_settledTokenAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14048,"src":"5792:20:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function () view returns (AddressToUintMappingSlot)"}},"id":12388,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5792:22:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":12389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5815:4:60","memberName":"tSet","nodeType":"MemberAccess","referencedDeclaration":7015,"src":"5792:27:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address,uint256)"}},"id":12394,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5792:44:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12395,"nodeType":"ExpressionStatement","src":"5792:44:60"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12363,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12360,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12357,"src":"5597:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":12361,"name":"tokensOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12319,"src":"5601:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":12362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5611:6:60","memberName":"length","nodeType":"MemberAccess","src":"5601:16:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5597:20:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12397,"initializationExpression":{"assignments":[12357],"declarations":[{"constant":false,"id":12357,"mutability":"mutable","name":"i","nameLocation":"5590:1:60","nodeType":"VariableDeclaration","scope":12397,"src":"5582:9:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12356,"name":"uint256","nodeType":"ElementaryTypeName","src":"5582:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12359,"initialValue":{"hexValue":"30","id":12358,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5594:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5582:13:60"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":12365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5619:3:60","subExpression":{"id":12364,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12357,"src":"5621:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12366,"nodeType":"ExpressionStatement","src":"5619:3:60"},"nodeType":"ForStatement","src":"5577:270:60"}]},"id":12399,"implemented":true,"kind":"function","modifiers":[],"name":"_swapExactInHook","nameLocation":"4808:16:60","nodeType":"FunctionDefinition","parameters":{"id":12313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12312,"mutability":"mutable","name":"params","nameLocation":"4865:6:60","nodeType":"VariableDeclaration","scope":12399,"src":"4834:37:60","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_calldata_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams"},"typeName":{"id":12311,"nodeType":"UserDefinedTypeName","pathNode":{"id":12310,"name":"SwapExactInHookParams","nameLocations":["4834:21:60"],"nodeType":"IdentifierPath","referencedDeclaration":1633,"src":"4834:21:60"},"referencedDeclaration":1633,"src":"4834:21:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_storage_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams"}},"visibility":"internal"}],"src":"4824:53:60"},"returnParameters":{"id":12323,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12316,"mutability":"mutable","name":"pathAmountsOut","nameLocation":"4913:14:60","nodeType":"VariableDeclaration","scope":12399,"src":"4896:31:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12314,"name":"uint256","nodeType":"ElementaryTypeName","src":"4896:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12315,"nodeType":"ArrayTypeName","src":"4896:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":12319,"mutability":"mutable","name":"tokensOut","nameLocation":"4946:9:60","nodeType":"VariableDeclaration","scope":12399,"src":"4929:26:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":12317,"name":"address","nodeType":"ElementaryTypeName","src":"4929:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":12318,"nodeType":"ArrayTypeName","src":"4929:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":12322,"mutability":"mutable","name":"amountsOut","nameLocation":"4974:10:60","nodeType":"VariableDeclaration","scope":12399,"src":"4957:27:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12320,"name":"uint256","nodeType":"ElementaryTypeName","src":"4957:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12321,"nodeType":"ArrayTypeName","src":"4957:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4895:90:60"},"scope":13916,"src":"4799:1054:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":12959,"nodeType":"Block","src":"5995:11133:60","statements":[{"expression":{"id":12416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12408,"name":"pathAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12406,"src":"6005:14:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"expression":{"id":12412,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12402,"src":"6036:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_calldata_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams calldata"}},"id":12413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6043:5:60","memberName":"paths","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"6036:12:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountIn_$1608_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn calldata[] calldata"}},"id":12414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6049:6:60","memberName":"length","nodeType":"MemberAccess","src":"6036:19:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12411,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"6022:13:60","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":12409,"name":"uint256","nodeType":"ElementaryTypeName","src":"6026:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12410,"nodeType":"ArrayTypeName","src":"6026:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":12415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6022:34:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"6005:51:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12417,"nodeType":"ExpressionStatement","src":"6005:51:60"},{"body":{"id":12957,"nodeType":"Block","src":"6117:11005:60","statements":[{"assignments":[12432],"declarations":[{"constant":false,"id":12432,"mutability":"mutable","name":"path","nameLocation":"6160:4:60","nodeType":"VariableDeclaration","scope":12957,"src":"6131:33:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountIn_$1608_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn"},"typeName":{"id":12431,"nodeType":"UserDefinedTypeName","pathNode":{"id":12430,"name":"SwapPathExactAmountIn","nameLocations":["6131:21:60"],"nodeType":"IdentifierPath","referencedDeclaration":1608,"src":"6131:21:60"},"referencedDeclaration":1608,"src":"6131:21:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountIn_$1608_storage_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn"}},"visibility":"internal"}],"id":12437,"initialValue":{"baseExpression":{"expression":{"id":12433,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12402,"src":"6167:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_calldata_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams calldata"}},"id":12434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6174:5:60","memberName":"paths","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"6167:12:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountIn_$1608_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn calldata[] calldata"}},"id":12436,"indexExpression":{"id":12435,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12419,"src":"6180:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6167:15:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountIn_$1608_calldata_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn calldata"}},"nodeType":"VariableDeclarationStatement","src":"6131:51:60"},{"assignments":[12439],"declarations":[{"constant":false,"id":12439,"mutability":"mutable","name":"stepExactAmountIn","nameLocation":"6409:17:60","nodeType":"VariableDeclaration","scope":12957,"src":"6401:25:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12438,"name":"uint256","nodeType":"ElementaryTypeName","src":"6401:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12442,"initialValue":{"expression":{"id":12440,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12432,"src":"6429:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountIn_$1608_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn memory"}},"id":12441,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6434:13:60","memberName":"exactAmountIn","nodeType":"MemberAccess","referencedDeclaration":1605,"src":"6429:18:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6401:46:60"},{"assignments":[12445],"declarations":[{"constant":false,"id":12445,"mutability":"mutable","name":"stepTokenIn","nameLocation":"6468:11:60","nodeType":"VariableDeclaration","scope":12957,"src":"6461:18:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":12444,"nodeType":"UserDefinedTypeName","pathNode":{"id":12443,"name":"IERC20","nameLocations":["6461:6:60"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"6461:6:60"},"referencedDeclaration":40109,"src":"6461:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"id":12448,"initialValue":{"expression":{"id":12446,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12432,"src":"6482:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountIn_$1608_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn memory"}},"id":12447,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6487:7:60","memberName":"tokenIn","nodeType":"MemberAccess","referencedDeclaration":1599,"src":"6482:12:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"6461:33:60"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":12459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"expression":{"id":12449,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12432,"src":"6513:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountIn_$1608_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn memory"}},"id":12450,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6518:5:60","memberName":"steps","nodeType":"MemberAccess","referencedDeclaration":1603,"src":"6513:10:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1596_memory_ptr_$dyn_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory[] memory"}},"id":12452,"indexExpression":{"hexValue":"30","id":12451,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6524:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6513:13:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":12453,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6527:8:60","memberName":"isBuffer","nodeType":"MemberAccess","referencedDeclaration":1595,"src":"6513:22:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":12458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12454,"name":"EVMCallModeHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5808,"src":"6539:18:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_EVMCallModeHelpers_$5808_$","typeString":"type(library EVMCallModeHelpers)"}},"id":12455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6558:12:60","memberName":"isStaticCall","nodeType":"MemberAccess","referencedDeclaration":5807,"src":"6539:31:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":12456,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6539:33:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":12457,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6576:5:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"6539:42:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6513:68:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":12489,"nodeType":"Block","src":"6801:484:60","statements":[{"expression":{"arguments":[{"arguments":[{"id":12475,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12445,"src":"7165:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":12474,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7157:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12473,"name":"address","nodeType":"ElementaryTypeName","src":"7157:7:60","typeDescriptions":{}}},"id":12476,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7157:20:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12470,"name":"_currentSwapTokensIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14000,"src":"7130:20:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function () view returns (struct TransientEnumerableSet.AddressSet storage pointer)"}},"id":12471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7130:22:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}},"id":12472,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7153:3:60","memberName":"add","nodeType":"MemberAccess","referencedDeclaration":10357,"src":"7130:26:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$10308_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":12477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7130:48:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12478,"nodeType":"ExpressionStatement","src":"7130:48:60"},{"expression":{"arguments":[{"arguments":[{"id":12484,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12445,"src":"7238:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":12483,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7230:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12482,"name":"address","nodeType":"ElementaryTypeName","src":"7230:7:60","typeDescriptions":{}}},"id":12485,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7230:20:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12486,"name":"stepExactAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12439,"src":"7252:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12479,"name":"_currentSwapTokenInAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14024,"src":"7196:26:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function () view returns (AddressToUintMappingSlot)"}},"id":12480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7196:28:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":12481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7225:4:60","memberName":"tAdd","nodeType":"MemberAccess","referencedDeclaration":7103,"src":"7196:33:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address,uint256)"}},"id":12487,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7196:74:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12488,"nodeType":"ExpressionStatement","src":"7196:74:60"}]},"id":12490,"nodeType":"IfStatement","src":"6509:776:60","trueBody":{"id":12469,"nodeType":"Block","src":"6583:212:60","statements":[{"expression":{"arguments":[{"expression":{"id":12461,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12402,"src":"6716:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_calldata_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams calldata"}},"id":12462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6723:6:60","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":1622,"src":"6716:13:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12463,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12445,"src":"6731:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":12464,"name":"stepExactAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12439,"src":"6744:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":12465,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12402,"src":"6763:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_calldata_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams calldata"}},"id":12466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6770:9:60","memberName":"wethIsEth","nodeType":"MemberAccess","referencedDeclaration":1630,"src":"6763:16:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":12460,"name":"_takeTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19083,"src":"6703:12:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$40109_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,contract IERC20,uint256,bool)"}},"id":12467,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6703:77:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12468,"nodeType":"ExpressionStatement","src":"6703:77:60"}]}},{"body":{"id":12955,"nodeType":"Block","src":"7347:9765:60","statements":[{"assignments":[12505],"declarations":[{"constant":false,"id":12505,"mutability":"mutable","name":"stepLocals","nameLocation":"7387:10:60","nodeType":"VariableDeclaration","scope":12955,"src":"7365:32:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapStepLocals_$12117_memory_ptr","typeString":"struct SwapStepLocals"},"typeName":{"id":12504,"nodeType":"UserDefinedTypeName","pathNode":{"id":12503,"name":"SwapStepLocals","nameLocations":["7365:14:60"],"nodeType":"IdentifierPath","referencedDeclaration":12117,"src":"7365:14:60"},"referencedDeclaration":12117,"src":"7365:14:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapStepLocals_$12117_storage_ptr","typeString":"struct SwapStepLocals"}},"visibility":"internal"}],"id":12506,"nodeType":"VariableDeclarationStatement","src":"7365:32:60"},{"expression":{"id":12518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":12507,"name":"stepLocals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12505,"src":"7415:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapStepLocals_$12117_memory_ptr","typeString":"struct SwapStepLocals memory"}},"id":12509,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"7426:10:60","memberName":"isLastStep","nodeType":"MemberAccess","referencedDeclaration":12116,"src":"7415:21:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12510,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12492,"src":"7440:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":12511,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12432,"src":"7445:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountIn_$1608_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn memory"}},"id":12512,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7450:5:60","memberName":"steps","nodeType":"MemberAccess","referencedDeclaration":1603,"src":"7445:10:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1596_memory_ptr_$dyn_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory[] memory"}},"id":12513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7456:6:60","memberName":"length","nodeType":"MemberAccess","src":"7445:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":12514,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7465:1:60","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7445:21:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7440:26:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":12517,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7439:28:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7415:52:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12519,"nodeType":"ExpressionStatement","src":"7415:52:60"},{"expression":{"id":12527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":12520,"name":"stepLocals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12505,"src":"7485:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapStepLocals_$12117_memory_ptr","typeString":"struct SwapStepLocals memory"}},"id":12522,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"7496:11:60","memberName":"isFirstStep","nodeType":"MemberAccess","referencedDeclaration":12114,"src":"7485:22:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12523,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12492,"src":"7511:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":12524,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7516:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7511:6:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":12526,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7510:8:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7485:33:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12528,"nodeType":"ExpressionStatement","src":"7485:33:60"},{"assignments":[12530],"declarations":[{"constant":false,"id":12530,"mutability":"mutable","name":"minAmountOut","nameLocation":"7544:12:60","nodeType":"VariableDeclaration","scope":12955,"src":"7536:20:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12529,"name":"uint256","nodeType":"ElementaryTypeName","src":"7536:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12531,"nodeType":"VariableDeclarationStatement","src":"7536:20:60"},{"condition":{"expression":{"id":12532,"name":"stepLocals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12505,"src":"7642:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapStepLocals_$12117_memory_ptr","typeString":"struct SwapStepLocals memory"}},"id":12533,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7653:10:60","memberName":"isLastStep","nodeType":"MemberAccess","referencedDeclaration":12116,"src":"7642:21:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":12544,"nodeType":"Block","src":"7744:57:60","statements":[{"expression":{"id":12542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12540,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12530,"src":"7766:12:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":12541,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7781:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7766:16:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12543,"nodeType":"ExpressionStatement","src":"7766:16:60"}]},"id":12545,"nodeType":"IfStatement","src":"7638:163:60","trueBody":{"id":12539,"nodeType":"Block","src":"7665:73:60","statements":[{"expression":{"id":12537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12534,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12530,"src":"7687:12:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":12535,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12432,"src":"7702:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountIn_$1608_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn memory"}},"id":12536,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7707:12:60","memberName":"minAmountOut","nodeType":"MemberAccess","referencedDeclaration":1607,"src":"7702:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7687:32:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12538,"nodeType":"ExpressionStatement","src":"7687:32:60"}]}},{"assignments":[12548],"declarations":[{"constant":false,"id":12548,"mutability":"mutable","name":"step","nameLocation":"7839:4:60","nodeType":"VariableDeclaration","scope":12955,"src":"7819:24:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep"},"typeName":{"id":12547,"nodeType":"UserDefinedTypeName","pathNode":{"id":12546,"name":"SwapPathStep","nameLocations":["7819:12:60"],"nodeType":"IdentifierPath","referencedDeclaration":1596,"src":"7819:12:60"},"referencedDeclaration":1596,"src":"7819:12:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_storage_ptr","typeString":"struct IBatchRouter.SwapPathStep"}},"visibility":"internal"}],"id":12553,"initialValue":{"baseExpression":{"expression":{"id":12549,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12432,"src":"7846:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountIn_$1608_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn memory"}},"id":12550,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7851:5:60","memberName":"steps","nodeType":"MemberAccess","referencedDeclaration":1603,"src":"7846:10:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1596_memory_ptr_$dyn_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory[] memory"}},"id":12552,"indexExpression":{"id":12551,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12492,"src":"7857:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7846:13:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"nodeType":"VariableDeclarationStatement","src":"7819:40:60"},{"condition":{"expression":{"id":12554,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12548,"src":"7882:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":12555,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7887:8:60","memberName":"isBuffer","nodeType":"MemberAccess","referencedDeclaration":1595,"src":"7882:13:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":12632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":12628,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12445,"src":"9358:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":12627,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9350:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12626,"name":"address","nodeType":"ElementaryTypeName","src":"9350:7:60","typeDescriptions":{}}},"id":12629,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9350:20:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":12630,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12548,"src":"9374:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":12631,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9379:4:60","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1590,"src":"9374:9:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9350:33:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":12801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":12796,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12548,"src":"13604:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":12797,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13609:8:60","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1593,"src":"13604:13:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":12795,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13596:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12794,"name":"address","nodeType":"ElementaryTypeName","src":"13596:7:60","typeDescriptions":{}}},"id":12798,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13596:22:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":12799,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12548,"src":"13622:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":12800,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13627:4:60","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1590,"src":"13622:9:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13596:35:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":12951,"nodeType":"Block","src":"15655:1443:60","statements":[{"assignments":[null,null,12892],"declarations":[null,null,{"constant":false,"id":12892,"mutability":"mutable","name":"amountOut","nameLocation":"15770:9:60","nodeType":"VariableDeclaration","scope":12951,"src":"15762:17:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12891,"name":"uint256","nodeType":"ElementaryTypeName","src":"15762:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12909,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":12896,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"15872:8:60","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4735_$","typeString":"type(enum SwapKind)"}},"id":12897,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15881:8:60","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"15872:17:60","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},{"expression":{"id":12898,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12548,"src":"15925:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":12899,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15930:4:60","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1590,"src":"15925:9:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12900,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12445,"src":"15973:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"expression":{"id":12901,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12548,"src":"16024:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":12902,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16029:8:60","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1593,"src":"16024:13:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":12903,"name":"stepExactAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12439,"src":"16083:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12904,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12530,"src":"16140:12:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":12905,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12402,"src":"16192:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_calldata_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams calldata"}},"id":12906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16199:8:60","memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":1632,"src":"16192:15:60","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":12895,"name":"VaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4754,"src":"15820:15:60","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_VaultSwapParams_$4754_storage_ptr_$","typeString":"type(struct VaultSwapParams storage pointer)"}},"id":12907,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["15866:4:60","15919:4:60","15964:7:60","16014:8:60","16067:14:60","16130:8:60","16182:8:60"],"names":["kind","pool","tokenIn","tokenOut","amountGivenRaw","limitRaw","userData"],"nodeType":"FunctionCall","src":"15820:414:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}],"expression":{"id":12893,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"15783:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":12894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15790:4:60","memberName":"swap","nodeType":"MemberAccess","referencedDeclaration":4475,"src":"15783:11:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_VaultSwapParams_$4754_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (struct VaultSwapParams memory) external returns (uint256,uint256,uint256)"}},"id":12908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15783:473:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"15757:499:60"},{"condition":{"expression":{"id":12910,"name":"stepLocals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12505,"src":"16283:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapStepLocals_$12117_memory_ptr","typeString":"struct SwapStepLocals memory"}},"id":12911,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16294:10:60","memberName":"isLastStep","nodeType":"MemberAccess","referencedDeclaration":12116,"src":"16283:21:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":12949,"nodeType":"Block","src":"16775:305:60","statements":[{"expression":{"id":12942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12940,"name":"stepExactAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12439,"src":"16879:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12941,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12892,"src":"16899:9:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16879:29:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12943,"nodeType":"ExpressionStatement","src":"16879:29:60"},{"expression":{"id":12947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12944,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12445,"src":"17030:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":12945,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12548,"src":"17044:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":12946,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17049:8:60","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1593,"src":"17044:13:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"17030:27:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":12948,"nodeType":"ExpressionStatement","src":"17030:27:60"}]},"id":12950,"nodeType":"IfStatement","src":"16279:801:60","trueBody":{"id":12939,"nodeType":"Block","src":"16306:463:60","statements":[{"expression":{"id":12916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":12912,"name":"pathAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12406,"src":"16545:14:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12914,"indexExpression":{"id":12913,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12419,"src":"16560:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"16545:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12915,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12892,"src":"16565:9:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16545:29:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12917,"nodeType":"ExpressionStatement","src":"16545:29:60"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":12923,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12548,"src":"16636:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":12924,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16641:8:60","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1593,"src":"16636:13:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":12922,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16628:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12921,"name":"address","nodeType":"ElementaryTypeName","src":"16628:7:60","typeDescriptions":{}}},"id":12925,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16628:22:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12918,"name":"_currentSwapTokensOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14012,"src":"16600:21:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function () view returns (struct TransientEnumerableSet.AddressSet storage pointer)"}},"id":12919,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16600:23:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}},"id":12920,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16624:3:60","memberName":"add","nodeType":"MemberAccess","referencedDeclaration":10357,"src":"16600:27:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$10308_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":12926,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16600:51:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12927,"nodeType":"ExpressionStatement","src":"16600:51:60"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":12933,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12548,"src":"16720:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":12934,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16725:8:60","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1593,"src":"16720:13:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":12932,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16712:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12931,"name":"address","nodeType":"ElementaryTypeName","src":"16712:7:60","typeDescriptions":{}}},"id":12935,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16712:22:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12936,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12892,"src":"16736:9:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12928,"name":"_currentSwapTokenOutAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14036,"src":"16677:27:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function () view returns (AddressToUintMappingSlot)"}},"id":12929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16677:29:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":12930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16707:4:60","memberName":"tAdd","nodeType":"MemberAccess","referencedDeclaration":7103,"src":"16677:34:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address,uint256)"}},"id":12937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16677:69:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12938,"nodeType":"ExpressionStatement","src":"16677:69:60"}]}}]},"id":12952,"nodeType":"IfStatement","src":"13592:3506:60","trueBody":{"id":12890,"nodeType":"Block","src":"13633:2016:60","statements":[{"assignments":[12806,null],"declarations":[{"constant":false,"id":12806,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"13766:14:60","nodeType":"VariableDeclaration","scope":12890,"src":"13749:31:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12804,"name":"uint256","nodeType":"ElementaryTypeName","src":"13749:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12805,"nodeType":"ArrayTypeName","src":"13749:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},null],"id":12813,"initialValue":{"arguments":[{"expression":{"id":12808,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12548,"src":"13845:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":12809,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13850:4:60","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1590,"src":"13845:9:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12810,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12445,"src":"13880:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":12811,"name":"stepExactAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12439,"src":"13917:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12807,"name":"_getSingleInputArrayAndTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19026,"src":"13786:33:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_contract$_IERC20_$40109_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address,contract IERC20,uint256) view returns (uint256[] memory,uint256)"}},"id":12812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13786:170:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(uint256[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"13748:208:60"},{"assignments":[null,12815,null],"declarations":[null,{"constant":false,"id":12815,"mutability":"mutable","name":"bptAmountOut","nameLocation":"13990:12:60","nodeType":"VariableDeclaration","scope":12890,"src":"13982:20:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12814,"name":"uint256","nodeType":"ElementaryTypeName","src":"13982:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null],"id":12838,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":12819,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12548,"src":"14108:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":12820,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14113:4:60","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1590,"src":"14108:9:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"condition":{"expression":{"id":12821,"name":"stepLocals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12505,"src":"14151:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapStepLocals_$12117_memory_ptr","typeString":"struct SwapStepLocals memory"}},"id":12822,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14162:10:60","memberName":"isLastStep","nodeType":"MemberAccess","referencedDeclaration":12116,"src":"14151:21:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"id":12827,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"14199:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}],"id":12826,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14191:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12825,"name":"address","nodeType":"ElementaryTypeName","src":"14191:7:60","typeDescriptions":{}}},"id":12828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14191:15:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":12829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"14151:55:60","trueExpression":{"expression":{"id":12823,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12402,"src":"14175:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_calldata_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams calldata"}},"id":12824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14182:6:60","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":1622,"src":"14175:13:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12830,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12806,"src":"14250:14:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":12831,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12530,"src":"14311:12:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":12832,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4807,"src":"14359:16:60","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_AddLiquidityKind_$4807_$","typeString":"type(enum AddLiquidityKind)"}},"id":12833,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14376:10:60","memberName":"UNBALANCED","nodeType":"MemberAccess","referencedDeclaration":4803,"src":"14359:27:60","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},{"expression":{"id":12834,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12402,"src":"14426:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_calldata_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams calldata"}},"id":12835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14433:8:60","memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":1632,"src":"14426:15:60","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":12818,"name":"AddLiquidityParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4823,"src":"14053:18:60","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_AddLiquidityParams_$4823_storage_ptr_$","typeString":"type(struct AddLiquidityParams storage pointer)"}},"id":12836,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["14102:4:60","14147:2:60","14236:12:60","14294:15:60","14353:4:60","14416:8:60"],"names":["pool","to","maxAmountsIn","minBptAmountOut","kind","userData"],"nodeType":"FunctionCall","src":"14053:415:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}],"expression":{"id":12816,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"14008:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":12817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14015:12:60","memberName":"addLiquidity","nodeType":"MemberAccess","referencedDeclaration":4489,"src":"14008:19:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_AddLiquidityParams_$4823_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"function (struct AddLiquidityParams memory) external returns (uint256[] memory,uint256,bytes memory)"}},"id":12837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14008:482:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"13979:511:60"},{"condition":{"expression":{"id":12839,"name":"stepLocals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12505,"src":"14517:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapStepLocals_$12117_memory_ptr","typeString":"struct SwapStepLocals memory"}},"id":12840,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14528:10:60","memberName":"isLastStep","nodeType":"MemberAccess","referencedDeclaration":12116,"src":"14517:21:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":12888,"nodeType":"Block","src":"15137:494:60","statements":[{"expression":{"id":12871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12869,"name":"stepExactAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12439,"src":"15241:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12870,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12815,"src":"15261:12:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15241:32:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12872,"nodeType":"ExpressionStatement","src":"15241:32:60"},{"expression":{"id":12876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12873,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12445,"src":"15395:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":12874,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12548,"src":"15409:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":12875,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15414:8:60","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1593,"src":"15409:13:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"15395:27:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":12877,"nodeType":"ExpressionStatement","src":"15395:27:60"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":12882,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12548,"src":"15583:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":12883,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15588:4:60","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1590,"src":"15583:9:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12881,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"15576:6:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":12884,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15576:17:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":12885,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12815,"src":"15595:12:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":12878,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"15562:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":12880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15569:6:60","memberName":"settle","nodeType":"MemberAccess","referencedDeclaration":4451,"src":"15562:13:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$_t_uint256_$","typeString":"function (contract IERC20,uint256) external returns (uint256)"}},"id":12886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15562:46:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12887,"nodeType":"ExpressionStatement","src":"15562:46:60"}]},"id":12889,"nodeType":"IfStatement","src":"14513:1118:60","trueBody":{"id":12868,"nodeType":"Block","src":"14540:591:60","statements":[{"expression":{"id":12845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":12841,"name":"pathAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12406,"src":"14908:14:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12843,"indexExpression":{"id":12842,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12419,"src":"14923:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"14908:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12844,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12815,"src":"14928:12:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14908:32:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12846,"nodeType":"ExpressionStatement","src":"14908:32:60"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":12852,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12548,"src":"15002:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":12853,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15007:8:60","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1593,"src":"15002:13:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":12851,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14994:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12850,"name":"address","nodeType":"ElementaryTypeName","src":"14994:7:60","typeDescriptions":{}}},"id":12854,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14994:22:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12847,"name":"_currentSwapTokensOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14012,"src":"14966:21:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function () view returns (struct TransientEnumerableSet.AddressSet storage pointer)"}},"id":12848,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14966:23:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}},"id":12849,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14990:3:60","memberName":"add","nodeType":"MemberAccess","referencedDeclaration":10357,"src":"14966:27:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$10308_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":12855,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14966:51:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12856,"nodeType":"ExpressionStatement","src":"14966:51:60"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":12862,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12548,"src":"15079:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":12863,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15084:8:60","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1593,"src":"15079:13:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":12861,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15071:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12860,"name":"address","nodeType":"ElementaryTypeName","src":"15071:7:60","typeDescriptions":{}}},"id":12864,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15071:22:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12865,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12815,"src":"15095:12:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12857,"name":"_settledTokenAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14048,"src":"15043:20:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function () view returns (AddressToUintMappingSlot)"}},"id":12858,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15043:22:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":12859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15066:4:60","memberName":"tAdd","nodeType":"MemberAccess","referencedDeclaration":7103,"src":"15043:27:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address,uint256)"}},"id":12866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15043:65:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12867,"nodeType":"ExpressionStatement","src":"15043:65:60"}]}}]}},"id":12953,"nodeType":"IfStatement","src":"9346:7752:60","trueBody":{"id":12793,"nodeType":"Block","src":"9385:4201:60","statements":[{"condition":{"expression":{"id":12633,"name":"stepLocals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12505,"src":"9803:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapStepLocals_$12117_memory_ptr","typeString":"struct SwapStepLocals memory"}},"id":12634,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9814:11:60","memberName":"isFirstStep","nodeType":"MemberAccess","referencedDeclaration":12114,"src":"9803:22:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":12703,"nodeType":"Block","src":"11109:334:60","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":12693,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12548,"src":"11375:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":12694,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11380:4:60","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1590,"src":"11375:9:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12692,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"11368:6:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":12695,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11368:17:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"arguments":[{"id":12698,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"11395:4:60","typeDescriptions":{"typeIdentifier":"t_contract$_BatchRouter_$13916","typeString":"contract BatchRouter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BatchRouter_$13916","typeString":"contract BatchRouter"}],"id":12697,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11387:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12696,"name":"address","nodeType":"ElementaryTypeName","src":"11387:7:60","typeDescriptions":{}}},"id":12699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11387:13:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12700,"name":"stepExactAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12439,"src":"11402:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":12689,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"11354:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":12691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11361:6:60","memberName":"sendTo","nodeType":"MemberAccess","referencedDeclaration":4462,"src":"11354:13:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$40109_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":12701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11354:66:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12702,"nodeType":"ExpressionStatement","src":"11354:66:60"}]},"id":12704,"nodeType":"IfStatement","src":"9799:1644:60","trueBody":{"id":12688,"nodeType":"Block","src":"9827:1276:60","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":12645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12635,"name":"stepExactAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12439,"src":"9857:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":12636,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9877:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9857:21:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":12644,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12638,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12402,"src":"9882:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_calldata_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams calldata"}},"id":12639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9889:6:60","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":1622,"src":"9882:13:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":12642,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"9907:4:60","typeDescriptions":{"typeIdentifier":"t_contract$_BatchRouter_$13916","typeString":"contract BatchRouter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BatchRouter_$13916","typeString":"contract BatchRouter"}],"id":12641,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9899:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12640,"name":"address","nodeType":"ElementaryTypeName","src":"9899:7:60","typeDescriptions":{}}},"id":12643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9899:13:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9882:30:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9857:55:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12665,"nodeType":"IfStatement","src":"9853:914:60","trueBody":{"id":12664,"nodeType":"Block","src":"9914:853:60","statements":[{"expression":{"arguments":[{"expression":{"id":12649,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12402,"src":"10533:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_calldata_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams calldata"}},"id":12650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10540:6:60","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":1622,"src":"10533:13:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":12653,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"10588:4:60","typeDescriptions":{"typeIdentifier":"t_contract$_BatchRouter_$13916","typeString":"contract BatchRouter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BatchRouter_$13916","typeString":"contract BatchRouter"}],"id":12652,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10580:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12651,"name":"address","nodeType":"ElementaryTypeName","src":"10580:7:60","typeDescriptions":{}}},"id":12654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10580:13:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":12655,"name":"stepExactAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12439,"src":"10627:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10645:9:60","memberName":"toUint160","nodeType":"MemberAccess","referencedDeclaration":43591,"src":"10627:27:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint160_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint160)"}},"id":12657,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10627:29:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},{"arguments":[{"id":12660,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12445,"src":"10698:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":12659,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10690:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12658,"name":"address","nodeType":"ElementaryTypeName","src":"10690:7:60","typeDescriptions":{}}},"id":12661,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10690:20:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint160","typeString":"uint160"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":12646,"name":"_permit2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18588,"src":"10478:8:60","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"}},"id":12648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10487:12:60","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":48531,"src":"10478:21:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint160_$_t_address_$returns$__$","typeString":"function (address,address,uint160,address) external"}},"id":12662,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10478:262:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12663,"nodeType":"ExpressionStatement","src":"10478:262:60"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":12671,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12445,"src":"10931:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":12670,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10923:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12669,"name":"address","nodeType":"ElementaryTypeName","src":"10923:7:60","typeDescriptions":{}}},"id":12672,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10923:20:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12666,"name":"_currentSwapTokenInAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14024,"src":"10889:26:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function () view returns (AddressToUintMappingSlot)"}},"id":12667,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10889:28:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":12668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10918:4:60","memberName":"tGet","nodeType":"MemberAccess","referencedDeclaration":6990,"src":"10889:33:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address) view returns (uint256)"}},"id":12673,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10889:55:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":12674,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10947:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10889:59:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12687,"nodeType":"IfStatement","src":"10885:196:60","trueBody":{"id":12686,"nodeType":"Block","src":"10950:131:60","statements":[{"expression":{"arguments":[{"arguments":[{"id":12681,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12445,"src":"11022:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":12680,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11014:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12679,"name":"address","nodeType":"ElementaryTypeName","src":"11014:7:60","typeDescriptions":{}}},"id":12682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11014:20:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12683,"name":"stepExactAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12439,"src":"11036:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12676,"name":"_currentSwapTokenInAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14024,"src":"10980:26:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function () view returns (AddressToUintMappingSlot)"}},"id":12677,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10980:28:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":12678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11009:4:60","memberName":"tSub","nodeType":"MemberAccess","referencedDeclaration":7133,"src":"10980:33:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address,uint256)"}},"id":12684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10980:74:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12685,"nodeType":"ExpressionStatement","src":"10980:74:60"}]}}]}},{"assignments":[12709,12711],"declarations":[{"constant":false,"id":12709,"mutability":"mutable","name":"amountsOut","nameLocation":"11656:10:60","nodeType":"VariableDeclaration","scope":12793,"src":"11639:27:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12707,"name":"uint256","nodeType":"ElementaryTypeName","src":"11639:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12708,"nodeType":"ArrayTypeName","src":"11639:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":12711,"mutability":"mutable","name":"tokenIndex","nameLocation":"11676:10:60","nodeType":"VariableDeclaration","scope":12793,"src":"11668:18:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12710,"name":"uint256","nodeType":"ElementaryTypeName","src":"11668:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12724,"initialValue":{"arguments":[{"expression":{"id":12713,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12548,"src":"11749:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":12714,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11754:4:60","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1590,"src":"11749:9:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":12715,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12548,"src":"11784:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":12716,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11789:8:60","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1593,"src":"11784:13:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12717,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12530,"src":"11823:12:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":12718,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11839:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11823:17:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":12721,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12530,"src":"11847:12:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"11823:36:60","trueExpression":{"hexValue":"31","id":12720,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11843:1:60","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12712,"name":"_getSingleInputArrayAndTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19026,"src":"11690:33:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_contract$_IERC20_$40109_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address,contract IERC20,uint256) view returns (uint256[] memory,uint256)"}},"id":12723,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11690:191:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(uint256[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"11638:243:60"},{"expression":{"id":12744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[null,{"id":12725,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12709,"src":"12226:10:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},null],"id":12726,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"12223:16:60","typeDescriptions":{"typeIdentifier":"t_tuple$__$_t_array$_t_uint256_$dyn_memory_ptr_$__$","typeString":"tuple(,uint256[] memory,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"expression":{"id":12730,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12548,"src":"12348:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":12731,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12353:4:60","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1590,"src":"12348:9:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":12734,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"12401:4:60","typeDescriptions":{"typeIdentifier":"t_contract$_BatchRouter_$13916","typeString":"contract BatchRouter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BatchRouter_$13916","typeString":"contract BatchRouter"}],"id":12733,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12393:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12732,"name":"address","nodeType":"ElementaryTypeName","src":"12393:7:60","typeDescriptions":{}}},"id":12735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12393:13:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12736,"name":"stepExactAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12439,"src":"12452:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12737,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12709,"src":"12514:10:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":12738,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4828,"src":"12560:19:60","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RemoveLiquidityKind_$4828_$","typeString":"type(enum RemoveLiquidityKind)"}},"id":12739,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12580:21:60","memberName":"SINGLE_TOKEN_EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":4825,"src":"12560:41:60","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},{"expression":{"id":12740,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12402,"src":"12641:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_calldata_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams calldata"}},"id":12741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12648:8:60","memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":1632,"src":"12641:15:60","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":12729,"name":"RemoveLiquidityParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4844,"src":"12290:21:60","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_RemoveLiquidityParams_$4844_storage_ptr_$","typeString":"type(struct RemoveLiquidityParams storage pointer)"}},"id":12742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["12342:4:60","12387:4:60","12436:14:60","12499:13:60","12554:4:60","12631:8:60"],"names":["pool","from","maxBptAmountIn","minAmountsOut","kind","userData"],"nodeType":"FunctionCall","src":"12290:393:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}],"expression":{"id":12727,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"12242:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":12728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12249:15:60","memberName":"removeLiquidity","nodeType":"MemberAccess","referencedDeclaration":4503,"src":"12242:22:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_RemoveLiquidityParams_$4844_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function (struct RemoveLiquidityParams memory) external returns (uint256,uint256[] memory,bytes memory)"}},"id":12743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12242:463:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory,bytes memory)"}},"src":"12223:482:60","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12745,"nodeType":"ExpressionStatement","src":"12223:482:60"},{"condition":{"expression":{"id":12746,"name":"stepLocals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12505,"src":"12732:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapStepLocals_$12117_memory_ptr","typeString":"struct SwapStepLocals memory"}},"id":12747,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12743:10:60","memberName":"isLastStep","nodeType":"MemberAccess","referencedDeclaration":12116,"src":"12732:21:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":12791,"nodeType":"Block","src":"13250:318:60","statements":[{"expression":{"id":12784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12780,"name":"stepExactAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12439,"src":"13354:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":12781,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12709,"src":"13374:10:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12783,"indexExpression":{"id":12782,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12711,"src":"13385:10:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13374:22:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13354:42:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12785,"nodeType":"ExpressionStatement","src":"13354:42:60"},{"expression":{"id":12789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12786,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12445,"src":"13518:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":12787,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12548,"src":"13532:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":12788,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13537:8:60","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1593,"src":"13532:13:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"13518:27:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":12790,"nodeType":"ExpressionStatement","src":"13518:27:60"}]},"id":12792,"nodeType":"IfStatement","src":"12728:840:60","trueBody":{"id":12779,"nodeType":"Block","src":"12755:489:60","statements":[{"expression":{"id":12754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":12748,"name":"pathAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12406,"src":"12994:14:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12750,"indexExpression":{"id":12749,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12419,"src":"13009:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12994:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":12751,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12709,"src":"13014:10:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12753,"indexExpression":{"id":12752,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12711,"src":"13025:10:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13014:22:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12994:42:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12755,"nodeType":"ExpressionStatement","src":"12994:42:60"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":12761,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12548,"src":"13098:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":12762,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13103:8:60","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1593,"src":"13098:13:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":12760,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13090:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12759,"name":"address","nodeType":"ElementaryTypeName","src":"13090:7:60","typeDescriptions":{}}},"id":12763,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13090:22:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12756,"name":"_currentSwapTokensOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14012,"src":"13062:21:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function () view returns (struct TransientEnumerableSet.AddressSet storage pointer)"}},"id":12757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13062:23:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}},"id":12758,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13086:3:60","memberName":"add","nodeType":"MemberAccess","referencedDeclaration":10357,"src":"13062:27:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$10308_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":12764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13062:51:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12765,"nodeType":"ExpressionStatement","src":"13062:51:60"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":12771,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12548,"src":"13182:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":12772,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13187:8:60","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1593,"src":"13182:13:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":12770,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13174:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12769,"name":"address","nodeType":"ElementaryTypeName","src":"13174:7:60","typeDescriptions":{}}},"id":12773,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13174:22:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":12774,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12709,"src":"13198:10:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12776,"indexExpression":{"id":12775,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12711,"src":"13209:10:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13198:22:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12766,"name":"_currentSwapTokenOutAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14036,"src":"13139:27:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function () view returns (AddressToUintMappingSlot)"}},"id":12767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13139:29:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":12768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13169:4:60","memberName":"tAdd","nodeType":"MemberAccess","referencedDeclaration":7103,"src":"13139:34:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address,uint256)"}},"id":12777,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13139:82:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12778,"nodeType":"ExpressionStatement","src":"13139:82:60"}]}}]}},"id":12954,"nodeType":"IfStatement","src":"7878:9220:60","trueBody":{"id":12625,"nodeType":"Block","src":"7897:1443:60","statements":[{"assignments":[null,null,12557],"declarations":[null,null,{"constant":false,"id":12557,"mutability":"mutable","name":"amountOut","nameLocation":"7932:9:60","nodeType":"VariableDeclaration","scope":12625,"src":"7924:17:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12556,"name":"uint256","nodeType":"ElementaryTypeName","src":"7924:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12583,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":12561,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"8064:8:60","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4735_$","typeString":"type(enum SwapKind)"}},"id":12562,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8073:8:60","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"8064:17:60","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":12569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":12563,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12548,"src":"8122:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":12564,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8127:4:60","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1590,"src":"8122:9:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":12567,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12445,"src":"8143:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":12566,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8135:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12565,"name":"address","nodeType":"ElementaryTypeName","src":"8135:7:60","typeDescriptions":{}}},"id":12568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8135:20:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8122:33:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":12572,"name":"WrappingDirection","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4847,"src":"8249:17:60","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_WrappingDirection_$4847_$","typeString":"type(enum WrappingDirection)"}},"id":12573,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8267:4:60","memberName":"WRAP","nodeType":"MemberAccess","referencedDeclaration":4845,"src":"8249:22:60","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$4847","typeString":"enum WrappingDirection"}},"id":12574,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"8122:149:60","trueExpression":{"expression":{"id":12570,"name":"WrappingDirection","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4847,"src":"8190:17:60","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_WrappingDirection_$4847_$","typeString":"type(enum WrappingDirection)"}},"id":12571,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8208:6:60","memberName":"UNWRAP","nodeType":"MemberAccess","referencedDeclaration":4846,"src":"8190:24:60","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$4847","typeString":"enum WrappingDirection"}},"typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$4847","typeString":"enum WrappingDirection"}},{"arguments":[{"expression":{"id":12576,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12548,"src":"8324:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":12577,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8329:4:60","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1590,"src":"8324:9:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":12575,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39833,"src":"8315:8:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$39833_$","typeString":"type(contract IERC4626)"}},"id":12578,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8315:19:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":12579,"name":"stepExactAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12439,"src":"8380:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":12580,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12530,"src":"8437:12:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},{"typeIdentifier":"t_enum$_WrappingDirection_$4847","typeString":"enum WrappingDirection"},{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":12560,"name":"BufferWrapOrUnwrapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4862,"src":"8003:24:60","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_BufferWrapOrUnwrapParams_$4862_storage_ptr_$","typeString":"type(struct BufferWrapOrUnwrapParams storage pointer)"}},"id":12581,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["8058:4:60","8111:9:60","8301:12:60","8364:14:60","8427:8:60"],"names":["kind","direction","wrappedToken","amountGivenRaw","limitRaw"],"nodeType":"FunctionCall","src":"8003:473:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}],"expression":{"id":12558,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"7945:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":12559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7952:25:60","memberName":"erc4626BufferWrapOrUnwrap","nodeType":"MemberAccess","referencedDeclaration":4555,"src":"7945:32:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (struct BufferWrapOrUnwrapParams memory) external returns (uint256,uint256,uint256)"}},"id":12582,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7945:553:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"7919:579:60"},{"condition":{"expression":{"id":12584,"name":"stepLocals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12505,"src":"8525:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapStepLocals_$12117_memory_ptr","typeString":"struct SwapStepLocals memory"}},"id":12585,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8536:10:60","memberName":"isLastStep","nodeType":"MemberAccess","referencedDeclaration":12116,"src":"8525:21:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":12623,"nodeType":"Block","src":"9017:305:60","statements":[{"expression":{"id":12616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12614,"name":"stepExactAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12439,"src":"9121:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12615,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12557,"src":"9141:9:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9121:29:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12617,"nodeType":"ExpressionStatement","src":"9121:29:60"},{"expression":{"id":12621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":12618,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12445,"src":"9272:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":12619,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12548,"src":"9286:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":12620,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9291:8:60","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1593,"src":"9286:13:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"9272:27:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":12622,"nodeType":"ExpressionStatement","src":"9272:27:60"}]},"id":12624,"nodeType":"IfStatement","src":"8521:801:60","trueBody":{"id":12613,"nodeType":"Block","src":"8548:463:60","statements":[{"expression":{"id":12590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":12586,"name":"pathAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12406,"src":"8787:14:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":12588,"indexExpression":{"id":12587,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12419,"src":"8802:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8787:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":12589,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12557,"src":"8807:9:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8787:29:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12591,"nodeType":"ExpressionStatement","src":"8787:29:60"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":12597,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12548,"src":"8878:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":12598,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8883:8:60","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1593,"src":"8878:13:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":12596,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8870:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12595,"name":"address","nodeType":"ElementaryTypeName","src":"8870:7:60","typeDescriptions":{}}},"id":12599,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8870:22:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12592,"name":"_currentSwapTokensOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14012,"src":"8842:21:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function () view returns (struct TransientEnumerableSet.AddressSet storage pointer)"}},"id":12593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8842:23:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}},"id":12594,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8866:3:60","memberName":"add","nodeType":"MemberAccess","referencedDeclaration":10357,"src":"8842:27:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$10308_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":12600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8842:51:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12601,"nodeType":"ExpressionStatement","src":"8842:51:60"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":12607,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12548,"src":"8962:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":12608,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8967:8:60","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1593,"src":"8962:13:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":12606,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8954:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":12605,"name":"address","nodeType":"ElementaryTypeName","src":"8954:7:60","typeDescriptions":{}}},"id":12609,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8954:22:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":12610,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12557,"src":"8978:9:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":12602,"name":"_currentSwapTokenOutAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14036,"src":"8919:27:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function () view returns (AddressToUintMappingSlot)"}},"id":12603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8919:29:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":12604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8949:4:60","memberName":"tAdd","nodeType":"MemberAccess","referencedDeclaration":7103,"src":"8919:34:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address,uint256)"}},"id":12611,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8919:69:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12612,"nodeType":"ExpressionStatement","src":"8919:69:60"}]}}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12495,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12492,"src":"7319:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":12496,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12432,"src":"7323:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountIn_$1608_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn memory"}},"id":12497,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7328:5:60","memberName":"steps","nodeType":"MemberAccess","referencedDeclaration":1603,"src":"7323:10:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1596_memory_ptr_$dyn_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory[] memory"}},"id":12498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7334:6:60","memberName":"length","nodeType":"MemberAccess","src":"7323:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7319:21:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12956,"initializationExpression":{"assignments":[12492],"declarations":[{"constant":false,"id":12492,"mutability":"mutable","name":"j","nameLocation":"7312:1:60","nodeType":"VariableDeclaration","scope":12956,"src":"7304:9:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12491,"name":"uint256","nodeType":"ElementaryTypeName","src":"7304:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12494,"initialValue":{"hexValue":"30","id":12493,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7316:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"7304:13:60"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":12501,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"7342:3:60","subExpression":{"id":12500,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12492,"src":"7344:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12502,"nodeType":"ExpressionStatement","src":"7342:3:60"},"nodeType":"ForStatement","src":"7299:9813:60"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":12426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":12422,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12419,"src":"6087:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":12423,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12402,"src":"6091:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_calldata_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams calldata"}},"id":12424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6098:5:60","memberName":"paths","nodeType":"MemberAccess","referencedDeclaration":1626,"src":"6091:12:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountIn_$1608_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn calldata[] calldata"}},"id":12425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6104:6:60","memberName":"length","nodeType":"MemberAccess","src":"6091:19:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6087:23:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":12958,"initializationExpression":{"assignments":[12419],"declarations":[{"constant":false,"id":12419,"mutability":"mutable","name":"i","nameLocation":"6080:1:60","nodeType":"VariableDeclaration","scope":12958,"src":"6072:9:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":12418,"name":"uint256","nodeType":"ElementaryTypeName","src":"6072:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":12421,"initialValue":{"hexValue":"30","id":12420,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6084:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"6072:13:60"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":12428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"6112:3:60","subExpression":{"id":12427,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12419,"src":"6114:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12429,"nodeType":"ExpressionStatement","src":"6112:3:60"},"nodeType":"ForStatement","src":"6067:11055:60"}]},"id":12960,"implemented":true,"kind":"function","modifiers":[],"name":"_computePathAmountsOut","nameLocation":"5868:22:60","nodeType":"FunctionDefinition","parameters":{"id":12403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12402,"mutability":"mutable","name":"params","nameLocation":"5931:6:60","nodeType":"VariableDeclaration","scope":12960,"src":"5900:37:60","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_calldata_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams"},"typeName":{"id":12401,"nodeType":"UserDefinedTypeName","pathNode":{"id":12400,"name":"SwapExactInHookParams","nameLocations":["5900:21:60"],"nodeType":"IdentifierPath","referencedDeclaration":1633,"src":"5900:21:60"},"referencedDeclaration":1633,"src":"5900:21:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_storage_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams"}},"visibility":"internal"}],"src":"5890:53:60"},"returnParameters":{"id":12407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12406,"mutability":"mutable","name":"pathAmountsOut","nameLocation":"5979:14:60","nodeType":"VariableDeclaration","scope":12960,"src":"5962:31:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12404,"name":"uint256","nodeType":"ElementaryTypeName","src":"5962:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12405,"nodeType":"ArrayTypeName","src":"5962:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"5961:33:60"},"scope":13916,"src":"5859:11269:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":12995,"nodeType":"Block","src":"17378:137:60","statements":[{"expression":{"id":12986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":12979,"name":"pathAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12971,"src":"17389:13:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":12980,"name":"tokensIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12974,"src":"17404:8:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},{"id":12981,"name":"amountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12977,"src":"17414:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"id":12982,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"17388:36:60","typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256[] memory,address[] memory,uint256[] memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":12984,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12963,"src":"17445:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_calldata_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_calldata_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams calldata"}],"id":12983,"name":"_swapExactOutHook","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13086,"src":"17427:17:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_SwapExactOutHookParams_$1646_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (struct IBatchRouter.SwapExactOutHookParams calldata) returns (uint256[] memory,address[] memory,uint256[] memory)"}},"id":12985,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17427:25:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256[] memory,address[] memory,uint256[] memory)"}},"src":"17388:64:60","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12987,"nodeType":"ExpressionStatement","src":"17388:64:60"},{"expression":{"arguments":[{"expression":{"id":12989,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12963,"src":"17476:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_calldata_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams calldata"}},"id":12990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17483:6:60","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":1635,"src":"17476:13:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":12991,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12963,"src":"17491:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_calldata_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams calldata"}},"id":12992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17498:9:60","memberName":"wethIsEth","nodeType":"MemberAccess","referencedDeclaration":1643,"src":"17491:16:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":12988,"name":"_settlePaths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14206,"src":"17463:12:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":12993,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17463:45:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":12994,"nodeType":"ExpressionStatement","src":"17463:45:60"}]},"functionSelector":"945ed33f","id":12996,"implemented":true,"kind":"function","modifiers":[{"id":12966,"kind":"modifierInvocation","modifierName":{"id":12965,"name":"nonReentrant","nameLocations":["17239:12:60"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"17239:12:60"},"nodeType":"ModifierInvocation","src":"17239:12:60"},{"id":12968,"kind":"modifierInvocation","modifierName":{"id":12967,"name":"onlyVault","nameLocations":["17260:9:60"],"nodeType":"IdentifierPath","referencedDeclaration":28128,"src":"17260:9:60"},"nodeType":"ModifierInvocation","src":"17260:9:60"}],"name":"swapExactOutHook","nameLocation":"17143:16:60","nodeType":"FunctionDefinition","parameters":{"id":12964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12963,"mutability":"mutable","name":"params","nameLocation":"17201:6:60","nodeType":"VariableDeclaration","scope":12996,"src":"17169:38:60","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_calldata_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams"},"typeName":{"id":12962,"nodeType":"UserDefinedTypeName","pathNode":{"id":12961,"name":"SwapExactOutHookParams","nameLocations":["17169:22:60"],"nodeType":"IdentifierPath","referencedDeclaration":1646,"src":"17169:22:60"},"referencedDeclaration":1646,"src":"17169:22:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_storage_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams"}},"visibility":"internal"}],"src":"17159:54:60"},"returnParameters":{"id":12978,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12971,"mutability":"mutable","name":"pathAmountsIn","nameLocation":"17304:13:60","nodeType":"VariableDeclaration","scope":12996,"src":"17287:30:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12969,"name":"uint256","nodeType":"ElementaryTypeName","src":"17287:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12970,"nodeType":"ArrayTypeName","src":"17287:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":12974,"mutability":"mutable","name":"tokensIn","nameLocation":"17336:8:60","nodeType":"VariableDeclaration","scope":12996,"src":"17319:25:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":12972,"name":"address","nodeType":"ElementaryTypeName","src":"17319:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":12973,"nodeType":"ArrayTypeName","src":"17319:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":12977,"mutability":"mutable","name":"amountsIn","nameLocation":"17363:9:60","nodeType":"VariableDeclaration","scope":12996,"src":"17346:26:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":12975,"name":"uint256","nodeType":"ElementaryTypeName","src":"17346:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":12976,"nodeType":"ArrayTypeName","src":"17346:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"17286:87:60"},"scope":13916,"src":"17134:381:60","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":13085,"nodeType":"Block","src":"17707:858:60","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13011,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"17873:5:60","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":13012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17879:9:60","memberName":"timestamp","nodeType":"MemberAccess","src":"17873:15:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":13013,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12999,"src":"17891:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_calldata_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams calldata"}},"id":13014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17898:8:60","memberName":"deadline","nodeType":"MemberAccess","referencedDeclaration":1641,"src":"17891:15:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17873:33:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13020,"nodeType":"IfStatement","src":"17869:85:60","trueBody":{"id":13019,"nodeType":"Block","src":"17908:46:60","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":13016,"name":"SwapDeadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3034,"src":"17929:12:60","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":13017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17929:14:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":13018,"nodeType":"RevertStatement","src":"17922:21:60"}]}},{"expression":{"id":13025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13021,"name":"pathAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13003,"src":"17964:13:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":13023,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12999,"src":"18002:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_calldata_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_calldata_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams calldata"}],"id":13022,"name":"_computePathAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13695,"src":"17980:21:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_SwapExactOutHookParams_$1646_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (struct IBatchRouter.SwapExactOutHookParams calldata) returns (uint256[] memory)"}},"id":13024,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17980:29:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"17964:45:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":13026,"nodeType":"ExpressionStatement","src":"17964:45:60"},{"expression":{"id":13032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13027,"name":"tokensIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13006,"src":"18187:8:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13028,"name":"_currentSwapTokensIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14000,"src":"18198:20:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function () view returns (struct TransientEnumerableSet.AddressSet storage pointer)"}},"id":13029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18198:22:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}},"id":13030,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18221:6:60","memberName":"values","nodeType":"MemberAccess","referencedDeclaration":10655,"src":"18198:29:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$10308_storage_ptr_$returns$_t_array$_t_address_$dyn_memory_ptr_$attached_to$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer) view returns (address[] memory)"}},"id":13031,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18198:31:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"src":"18187:42:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":13033,"nodeType":"ExpressionStatement","src":"18187:42:60"},{"expression":{"id":13041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13034,"name":"amountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13009,"src":"18275:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":13038,"name":"tokensIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13006,"src":"18301:8:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":13039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18310:6:60","memberName":"length","nodeType":"MemberAccess","src":"18301:15:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13037,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"18287:13:60","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":13035,"name":"uint256","nodeType":"ElementaryTypeName","src":"18291:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13036,"nodeType":"ArrayTypeName","src":"18291:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":13040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18287:30:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"18275:42:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":13042,"nodeType":"ExpressionStatement","src":"18275:42:60"},{"body":{"id":13083,"nodeType":"Block","src":"18373:186:60","statements":[{"expression":{"id":13072,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":13054,"name":"amountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13009,"src":"18387:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":13056,"indexExpression":{"id":13055,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13044,"src":"18397:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"18387:12:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"baseExpression":{"id":13060,"name":"tokensIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13006,"src":"18436:8:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":13062,"indexExpression":{"id":13061,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13044,"src":"18445:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18436:11:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13057,"name":"_currentSwapTokenInAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14024,"src":"18402:26:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function () view returns (AddressToUintMappingSlot)"}},"id":13058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18402:28:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":13059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18431:4:60","memberName":"tGet","nodeType":"MemberAccess","referencedDeclaration":6990,"src":"18402:33:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address) view returns (uint256)"}},"id":13063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18402:46:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"baseExpression":{"id":13067,"name":"tokensIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13006,"src":"18479:8:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":13069,"indexExpression":{"id":13068,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13044,"src":"18488:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18479:11:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13064,"name":"_settledTokenAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14048,"src":"18451:20:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function () view returns (AddressToUintMappingSlot)"}},"id":13065,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18451:22:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":13066,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18474:4:60","memberName":"tGet","nodeType":"MemberAccess","referencedDeclaration":6990,"src":"18451:27:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address) view returns (uint256)"}},"id":13070,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18451:40:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18402:89:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18387:104:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13073,"nodeType":"ExpressionStatement","src":"18387:104:60"},{"expression":{"arguments":[{"baseExpression":{"id":13077,"name":"tokensIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13006,"src":"18533:8:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":13079,"indexExpression":{"id":13078,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13044,"src":"18542:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18533:11:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":13080,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18546:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13074,"name":"_settledTokenAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14048,"src":"18505:20:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function () view returns (AddressToUintMappingSlot)"}},"id":13075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18505:22:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":13076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18528:4:60","memberName":"tSet","nodeType":"MemberAccess","referencedDeclaration":7015,"src":"18505:27:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address,uint256)"}},"id":13081,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18505:43:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13082,"nodeType":"ExpressionStatement","src":"18505:43:60"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13047,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13044,"src":"18347:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":13048,"name":"tokensIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13006,"src":"18351:8:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":13049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18360:6:60","memberName":"length","nodeType":"MemberAccess","src":"18351:15:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18347:19:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13084,"initializationExpression":{"assignments":[13044],"declarations":[{"constant":false,"id":13044,"mutability":"mutable","name":"i","nameLocation":"18340:1:60","nodeType":"VariableDeclaration","scope":13084,"src":"18332:9:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13043,"name":"uint256","nodeType":"ElementaryTypeName","src":"18332:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13046,"initialValue":{"hexValue":"30","id":13045,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18344:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"18332:13:60"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":13052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"18368:3:60","subExpression":{"id":13051,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13044,"src":"18370:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13053,"nodeType":"ExpressionStatement","src":"18368:3:60"},"nodeType":"ForStatement","src":"18327:232:60"}]},"id":13086,"implemented":true,"kind":"function","modifiers":[],"name":"_swapExactOutHook","nameLocation":"17530:17:60","nodeType":"FunctionDefinition","parameters":{"id":13000,"nodeType":"ParameterList","parameters":[{"constant":false,"id":12999,"mutability":"mutable","name":"params","nameLocation":"17589:6:60","nodeType":"VariableDeclaration","scope":13086,"src":"17557:38:60","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_calldata_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams"},"typeName":{"id":12998,"nodeType":"UserDefinedTypeName","pathNode":{"id":12997,"name":"SwapExactOutHookParams","nameLocations":["17557:22:60"],"nodeType":"IdentifierPath","referencedDeclaration":1646,"src":"17557:22:60"},"referencedDeclaration":1646,"src":"17557:22:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_storage_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams"}},"visibility":"internal"}],"src":"17547:54:60"},"returnParameters":{"id":13010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13003,"mutability":"mutable","name":"pathAmountsIn","nameLocation":"17637:13:60","nodeType":"VariableDeclaration","scope":13086,"src":"17620:30:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":13001,"name":"uint256","nodeType":"ElementaryTypeName","src":"17620:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13002,"nodeType":"ArrayTypeName","src":"17620:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":13006,"mutability":"mutable","name":"tokensIn","nameLocation":"17669:8:60","nodeType":"VariableDeclaration","scope":13086,"src":"17652:25:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":13004,"name":"address","nodeType":"ElementaryTypeName","src":"17652:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":13005,"nodeType":"ArrayTypeName","src":"17652:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":13009,"mutability":"mutable","name":"amountsIn","nameLocation":"17696:9:60","nodeType":"VariableDeclaration","scope":13086,"src":"17679:26:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":13007,"name":"uint256","nodeType":"ElementaryTypeName","src":"17679:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13008,"nodeType":"ArrayTypeName","src":"17679:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"17619:87:60"},"scope":13916,"src":"17521:1044:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":13694,"nodeType":"Block","src":"18898:12104:60","statements":[{"expression":{"id":13104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13096,"name":"pathAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13094,"src":"18908:13:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"expression":{"id":13100,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13090,"src":"18938:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_calldata_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams calldata"}},"id":13101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18945:5:60","memberName":"paths","nodeType":"MemberAccess","referencedDeclaration":1639,"src":"18938:12:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountOut_$1620_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut calldata[] calldata"}},"id":13102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18951:6:60","memberName":"length","nodeType":"MemberAccess","src":"18938:19:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13099,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"18924:13:60","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":13097,"name":"uint256","nodeType":"ElementaryTypeName","src":"18928:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13098,"nodeType":"ArrayTypeName","src":"18928:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":13103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18924:34:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"18908:50:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":13105,"nodeType":"ExpressionStatement","src":"18908:50:60"},{"body":{"id":13692,"nodeType":"Block","src":"19019:11977:60","statements":[{"assignments":[13120],"declarations":[{"constant":false,"id":13120,"mutability":"mutable","name":"path","nameLocation":"19063:4:60","nodeType":"VariableDeclaration","scope":13692,"src":"19033:34:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountOut_$1620_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut"},"typeName":{"id":13119,"nodeType":"UserDefinedTypeName","pathNode":{"id":13118,"name":"SwapPathExactAmountOut","nameLocations":["19033:22:60"],"nodeType":"IdentifierPath","referencedDeclaration":1620,"src":"19033:22:60"},"referencedDeclaration":1620,"src":"19033:22:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountOut_$1620_storage_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut"}},"visibility":"internal"}],"id":13125,"initialValue":{"baseExpression":{"expression":{"id":13121,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13090,"src":"19070:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_calldata_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams calldata"}},"id":13122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19077:5:60","memberName":"paths","nodeType":"MemberAccess","referencedDeclaration":1639,"src":"19070:12:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountOut_$1620_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut calldata[] calldata"}},"id":13124,"indexExpression":{"id":13123,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13107,"src":"19083:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19070:15:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountOut_$1620_calldata_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut calldata"}},"nodeType":"VariableDeclarationStatement","src":"19033:52:60"},{"assignments":[13127],"declarations":[{"constant":false,"id":13127,"mutability":"mutable","name":"stepExactAmountOut","nameLocation":"19303:18:60","nodeType":"VariableDeclaration","scope":13692,"src":"19295:26:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13126,"name":"uint256","nodeType":"ElementaryTypeName","src":"19295:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13130,"initialValue":{"expression":{"id":13128,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13120,"src":"19324:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountOut_$1620_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut memory"}},"id":13129,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19329:14:60","memberName":"exactAmountOut","nodeType":"MemberAccess","referencedDeclaration":1619,"src":"19324:19:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19295:48:60"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":13136,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13120,"src":"19894:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountOut_$1620_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut memory"}},"id":13137,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19899:7:60","memberName":"tokenIn","nodeType":"MemberAccess","referencedDeclaration":1611,"src":"19894:12:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":13135,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19886:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13134,"name":"address","nodeType":"ElementaryTypeName","src":"19886:7:60","typeDescriptions":{}}},"id":13138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19886:21:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13131,"name":"_currentSwapTokensIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14000,"src":"19859:20:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function () view returns (struct TransientEnumerableSet.AddressSet storage pointer)"}},"id":13132,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19859:22:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}},"id":13133,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19882:3:60","memberName":"add","nodeType":"MemberAccess","referencedDeclaration":10357,"src":"19859:26:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$10308_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":13139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19859:49:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13140,"nodeType":"ExpressionStatement","src":"19859:49:60"},{"body":{"id":13690,"nodeType":"Block","src":"20197:10789:60","statements":[{"assignments":[13160],"declarations":[{"constant":false,"id":13160,"mutability":"mutable","name":"step","nameLocation":"20235:4:60","nodeType":"VariableDeclaration","scope":13690,"src":"20215:24:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep"},"typeName":{"id":13159,"nodeType":"UserDefinedTypeName","pathNode":{"id":13158,"name":"SwapPathStep","nameLocations":["20215:12:60"],"nodeType":"IdentifierPath","referencedDeclaration":1596,"src":"20215:12:60"},"referencedDeclaration":1596,"src":"20215:12:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_storage_ptr","typeString":"struct IBatchRouter.SwapPathStep"}},"visibility":"internal"}],"id":13168,"initialValue":{"baseExpression":{"expression":{"id":13161,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13120,"src":"20242:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountOut_$1620_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut memory"}},"id":13162,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20247:5:60","memberName":"steps","nodeType":"MemberAccess","referencedDeclaration":1615,"src":"20242:10:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1596_memory_ptr_$dyn_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory[] memory"}},"id":13167,"indexExpression":{"arguments":[{"id":13165,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13142,"src":"20261:1:60","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13164,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20253:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":13163,"name":"uint256","nodeType":"ElementaryTypeName","src":"20253:7:60","typeDescriptions":{}}},"id":13166,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20253:10:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20242:22:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"nodeType":"VariableDeclarationStatement","src":"20215:49:60"},{"assignments":[13171],"declarations":[{"constant":false,"id":13171,"mutability":"mutable","name":"stepLocals","nameLocation":"20304:10:60","nodeType":"VariableDeclaration","scope":13690,"src":"20282:32:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapStepLocals_$12117_memory_ptr","typeString":"struct SwapStepLocals"},"typeName":{"id":13170,"nodeType":"UserDefinedTypeName","pathNode":{"id":13169,"name":"SwapStepLocals","nameLocations":["20282:14:60"],"nodeType":"IdentifierPath","referencedDeclaration":12117,"src":"20282:14:60"},"referencedDeclaration":12117,"src":"20282:14:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapStepLocals_$12117_storage_ptr","typeString":"struct SwapStepLocals"}},"visibility":"internal"}],"id":13172,"nodeType":"VariableDeclarationStatement","src":"20282:32:60"},{"expression":{"id":13180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13173,"name":"stepLocals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13171,"src":"20332:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapStepLocals_$12117_memory_ptr","typeString":"struct SwapStepLocals memory"}},"id":13175,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"20343:10:60","memberName":"isLastStep","nodeType":"MemberAccess","referencedDeclaration":12116,"src":"20332:21:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13176,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13142,"src":"20357:1:60","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":13177,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20362:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"20357:6:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":13179,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20356:8:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"20332:32:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13181,"nodeType":"ExpressionStatement","src":"20332:32:60"},{"expression":{"id":13196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":13182,"name":"stepLocals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13171,"src":"20382:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapStepLocals_$12117_memory_ptr","typeString":"struct SwapStepLocals memory"}},"id":13184,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"20393:11:60","memberName":"isFirstStep","nodeType":"MemberAccess","referencedDeclaration":12114,"src":"20382:22:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":13187,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13142,"src":"20416:1:60","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13186,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20408:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":13185,"name":"uint256","nodeType":"ElementaryTypeName","src":"20408:7:60","typeDescriptions":{}}},"id":13188,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20408:10:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":13189,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13120,"src":"20422:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountOut_$1620_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut memory"}},"id":13190,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20427:5:60","memberName":"steps","nodeType":"MemberAccess","referencedDeclaration":1615,"src":"20422:10:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1596_memory_ptr_$dyn_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory[] memory"}},"id":13191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20433:6:60","memberName":"length","nodeType":"MemberAccess","src":"20422:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":13192,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20442:1:60","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"20422:21:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20408:35:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":13195,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"20407:37:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"20382:62:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13197,"nodeType":"ExpressionStatement","src":"20382:62:60"},{"assignments":[13199],"declarations":[{"constant":false,"id":13199,"mutability":"mutable","name":"stepMaxAmountIn","nameLocation":"20635:15:60","nodeType":"VariableDeclaration","scope":13690,"src":"20627:23:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13198,"name":"uint256","nodeType":"ElementaryTypeName","src":"20627:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13200,"nodeType":"VariableDeclarationStatement","src":"20627:23:60"},{"assignments":[13203],"declarations":[{"constant":false,"id":13203,"mutability":"mutable","name":"stepTokenIn","nameLocation":"20675:11:60","nodeType":"VariableDeclaration","scope":13690,"src":"20668:18:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":13202,"nodeType":"UserDefinedTypeName","pathNode":{"id":13201,"name":"IERC20","nameLocations":["20668:6:60"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"20668:6:60"},"referencedDeclaration":40109,"src":"20668:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"id":13204,"nodeType":"VariableDeclarationStatement","src":"20668:18:60"},{"condition":{"expression":{"id":13205,"name":"stepLocals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13171,"src":"20709:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapStepLocals_$12117_memory_ptr","typeString":"struct SwapStepLocals memory"}},"id":13206,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20720:11:60","memberName":"isFirstStep","nodeType":"MemberAccess","referencedDeclaration":12114,"src":"20709:22:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13229,"nodeType":"IfStatement","src":"20705:510:60","trueBody":{"id":13228,"nodeType":"Block","src":"20733:482:60","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":13212,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13160,"src":"21081:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":13213,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21086:8:60","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1593,"src":"21081:13:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":13211,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21073:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13210,"name":"address","nodeType":"ElementaryTypeName","src":"21073:7:60","typeDescriptions":{}}},"id":13214,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21073:22:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13207,"name":"_currentSwapTokensOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14012,"src":"21045:21:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function () view returns (struct TransientEnumerableSet.AddressSet storage pointer)"}},"id":13208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21045:23:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}},"id":13209,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21069:3:60","memberName":"add","nodeType":"MemberAccess","referencedDeclaration":10357,"src":"21045:27:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$10308_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":13215,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21045:51:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13216,"nodeType":"ExpressionStatement","src":"21045:51:60"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":13222,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13160,"src":"21161:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":13223,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21166:8:60","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1593,"src":"21161:13:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":13221,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21153:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13220,"name":"address","nodeType":"ElementaryTypeName","src":"21153:7:60","typeDescriptions":{}}},"id":13224,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21153:22:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13225,"name":"stepExactAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13127,"src":"21177:18:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13217,"name":"_currentSwapTokenOutAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14036,"src":"21118:27:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function () view returns (AddressToUintMappingSlot)"}},"id":13218,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21118:29:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":13219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21148:4:60","memberName":"tAdd","nodeType":"MemberAccess","referencedDeclaration":7103,"src":"21118:34:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address,uint256)"}},"id":13226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21118:78:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13227,"nodeType":"ExpressionStatement","src":"21118:78:60"}]}},{"condition":{"expression":{"id":13230,"name":"stepLocals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13171,"src":"21237:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapStepLocals_$12117_memory_ptr","typeString":"struct SwapStepLocals memory"}},"id":13231,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21248:10:60","memberName":"isLastStep","nodeType":"MemberAccess","referencedDeclaration":12116,"src":"21237:21:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":13260,"nodeType":"Block","src":"21563:418:60","statements":[{"expression":{"id":13245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13243,"name":"stepMaxAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13199,"src":"21862:15:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13244,"name":"_MAX_AMOUNT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19232,"src":"21880:11:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21862:29:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13246,"nodeType":"ExpressionStatement","src":"21862:29:60"},{"expression":{"id":13258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13247,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13203,"src":"21913:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"expression":{"id":13248,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13120,"src":"21927:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountOut_$1620_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut memory"}},"id":13249,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21932:5:60","memberName":"steps","nodeType":"MemberAccess","referencedDeclaration":1615,"src":"21927:10:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1596_memory_ptr_$dyn_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory[] memory"}},"id":13256,"indexExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13252,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13142,"src":"21946:1:60","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":13253,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21950:1:60","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"21946:5:60","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":13251,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21938:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":13250,"name":"uint256","nodeType":"ElementaryTypeName","src":"21938:7:60","typeDescriptions":{}}},"id":13255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21938:14:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21927:26:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":13257,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21954:8:60","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1593,"src":"21927:35:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"21913:49:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":13259,"nodeType":"ExpressionStatement","src":"21913:49:60"}]},"id":13261,"nodeType":"IfStatement","src":"21233:748:60","trueBody":{"id":13242,"nodeType":"Block","src":"21260:297:60","statements":[{"expression":{"id":13235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13232,"name":"stepMaxAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13199,"src":"21456:15:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":13233,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13120,"src":"21474:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountOut_$1620_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut memory"}},"id":13234,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21479:11:60","memberName":"maxAmountIn","nodeType":"MemberAccess","referencedDeclaration":1617,"src":"21474:16:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21456:34:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13236,"nodeType":"ExpressionStatement","src":"21456:34:60"},{"expression":{"id":13240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13237,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13203,"src":"21512:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":13238,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13120,"src":"21526:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountOut_$1620_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut memory"}},"id":13239,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21531:7:60","memberName":"tokenIn","nodeType":"MemberAccess","referencedDeclaration":1611,"src":"21526:12:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"21512:26:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":13241,"nodeType":"ExpressionStatement","src":"21512:26:60"}]}},{"condition":{"expression":{"id":13262,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13160,"src":"22003:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":13263,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22008:8:60","memberName":"isBuffer","nodeType":"MemberAccess","referencedDeclaration":1595,"src":"22003:13:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":13368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":13364,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13203,"src":"23897:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":13363,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23889:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13362,"name":"address","nodeType":"ElementaryTypeName","src":"23889:7:60","typeDescriptions":{}}},"id":13365,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23889:20:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":13366,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13160,"src":"23913:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":13367,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23918:4:60","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1590,"src":"23913:9:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"23889:33:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":13543,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":13538,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13160,"src":"27852:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":13539,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27857:8:60","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1593,"src":"27852:13:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":13537,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27844:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13536,"name":"address","nodeType":"ElementaryTypeName","src":"27844:7:60","typeDescriptions":{}}},"id":13540,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27844:22:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":13541,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13160,"src":"27870:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":13542,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27875:4:60","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1590,"src":"27870:9:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"27844:35:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":13686,"nodeType":"Block","src":"30047:925:60","statements":[{"assignments":[null,13643,null],"declarations":[null,{"constant":false,"id":13643,"mutability":"mutable","name":"amountIn","nameLocation":"30161:8:60","nodeType":"VariableDeclaration","scope":13686,"src":"30153:16:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13642,"name":"uint256","nodeType":"ElementaryTypeName","src":"30153:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null],"id":13660,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":13647,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"30264:8:60","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4735_$","typeString":"type(enum SwapKind)"}},"id":13648,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"30273:9:60","memberName":"EXACT_OUT","nodeType":"MemberAccess","referencedDeclaration":4734,"src":"30264:18:60","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},{"expression":{"id":13649,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13160,"src":"30318:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":13650,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30323:4:60","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1590,"src":"30318:9:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13651,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13203,"src":"30366:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"expression":{"id":13652,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13160,"src":"30417:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":13653,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30422:8:60","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1593,"src":"30417:13:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":13654,"name":"stepExactAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13127,"src":"30476:18:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13655,"name":"stepMaxAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13199,"src":"30534:15:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13656,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13090,"src":"30589:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_calldata_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams calldata"}},"id":13657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30596:8:60","memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":1645,"src":"30589:15:60","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":13646,"name":"VaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4754,"src":"30212:15:60","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_VaultSwapParams_$4754_storage_ptr_$","typeString":"type(struct VaultSwapParams storage pointer)"}},"id":13658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["30258:4:60","30312:4:60","30357:7:60","30407:8:60","30460:14:60","30524:8:60","30579:8:60"],"names":["kind","pool","tokenIn","tokenOut","amountGivenRaw","limitRaw","userData"],"nodeType":"FunctionCall","src":"30212:419:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}],"expression":{"id":13644,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"30175:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":13645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30182:4:60","memberName":"swap","nodeType":"MemberAccess","referencedDeclaration":4475,"src":"30175:11:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_VaultSwapParams_$4754_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (struct VaultSwapParams memory) external returns (uint256,uint256,uint256)"}},"id":13659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30175:478:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"30150:503:60"},{"condition":{"expression":{"id":13661,"name":"stepLocals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13171,"src":"30680:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapStepLocals_$12117_memory_ptr","typeString":"struct SwapStepLocals memory"}},"id":13662,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30691:10:60","memberName":"isLastStep","nodeType":"MemberAccess","referencedDeclaration":12116,"src":"30680:21:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":13684,"nodeType":"Block","src":"30876:78:60","statements":[{"expression":{"id":13682,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13680,"name":"stepExactAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13127,"src":"30902:18:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13681,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13643,"src":"30923:8:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30902:29:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13683,"nodeType":"ExpressionStatement","src":"30902:29:60"}]},"id":13685,"nodeType":"IfStatement","src":"30676:278:60","trueBody":{"id":13679,"nodeType":"Block","src":"30703:167:60","statements":[{"expression":{"id":13667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":13663,"name":"pathAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13094,"src":"30729:13:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":13665,"indexExpression":{"id":13664,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13107,"src":"30743:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"30729:16:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13666,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13643,"src":"30748:8:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30729:27:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13668,"nodeType":"ExpressionStatement","src":"30729:27:60"},{"expression":{"arguments":[{"arguments":[{"id":13674,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13203,"src":"30824:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":13673,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30816:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13672,"name":"address","nodeType":"ElementaryTypeName","src":"30816:7:60","typeDescriptions":{}}},"id":13675,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30816:20:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13676,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13643,"src":"30838:8:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13669,"name":"_currentSwapTokenInAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14024,"src":"30782:26:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function () view returns (AddressToUintMappingSlot)"}},"id":13670,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30782:28:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":13671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30811:4:60","memberName":"tAdd","nodeType":"MemberAccess","referencedDeclaration":7103,"src":"30782:33:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address,uint256)"}},"id":13677,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30782:65:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13678,"nodeType":"ExpressionStatement","src":"30782:65:60"}]}}]},"id":13687,"nodeType":"IfStatement","src":"27840:3132:60","trueBody":{"id":13641,"nodeType":"Block","src":"27881:2160:60","statements":[{"assignments":[13548,13550],"declarations":[{"constant":false,"id":13548,"mutability":"mutable","name":"stepAmountsIn","nameLocation":"28002:13:60","nodeType":"VariableDeclaration","scope":13641,"src":"27985:30:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":13546,"name":"uint256","nodeType":"ElementaryTypeName","src":"27985:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13547,"nodeType":"ArrayTypeName","src":"27985:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":13550,"mutability":"mutable","name":"tokenIndex","nameLocation":"28025:10:60","nodeType":"VariableDeclaration","scope":13641,"src":"28017:18:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13549,"name":"uint256","nodeType":"ElementaryTypeName","src":"28017:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13557,"initialValue":{"arguments":[{"expression":{"id":13552,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13160,"src":"28098:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":13553,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28103:4:60","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1590,"src":"28098:9:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13554,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13203,"src":"28133:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":13555,"name":"stepMaxAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13199,"src":"28170:15:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13551,"name":"_getSingleInputArrayAndTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19026,"src":"28039:33:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_contract$_IERC20_$40109_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address,contract IERC20,uint256) view returns (uint256[] memory,uint256)"}},"id":13556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28039:168:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(uint256[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"27984:223:60"},{"expression":{"id":13582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":13558,"name":"stepAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13548,"src":"28345:13:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},null,null],"id":13559,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"28344:19:60","typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$__$__$","typeString":"tuple(uint256[] memory,,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"expression":{"id":13563,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13160,"src":"28466:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":13564,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28471:4:60","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1590,"src":"28466:9:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"condition":{"expression":{"id":13565,"name":"stepLocals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13171,"src":"28509:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapStepLocals_$12117_memory_ptr","typeString":"struct SwapStepLocals memory"}},"id":13566,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28520:11:60","memberName":"isFirstStep","nodeType":"MemberAccess","referencedDeclaration":12114,"src":"28509:22:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"id":13571,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"28558:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}],"id":13570,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28550:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13569,"name":"address","nodeType":"ElementaryTypeName","src":"28550:7:60","typeDescriptions":{}}},"id":13572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28550:15:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":13573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"28509:56:60","trueExpression":{"expression":{"id":13567,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13090,"src":"28534:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_calldata_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams calldata"}},"id":13568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28541:6:60","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":1635,"src":"28534:13:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13574,"name":"stepAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13548,"src":"28609:13:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":13575,"name":"stepExactAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13127,"src":"28669:18:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13576,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4807,"src":"28723:16:60","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_AddLiquidityKind_$4807_$","typeString":"type(enum AddLiquidityKind)"}},"id":13577,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"28740:22:60","memberName":"SINGLE_TOKEN_EXACT_OUT","nodeType":"MemberAccess","referencedDeclaration":4804,"src":"28723:39:60","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},{"expression":{"id":13578,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13090,"src":"28802:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_calldata_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams calldata"}},"id":13579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28809:8:60","memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":1645,"src":"28802:15:60","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":13562,"name":"AddLiquidityParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4823,"src":"28411:18:60","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_AddLiquidityParams_$4823_storage_ptr_$","typeString":"type(struct AddLiquidityParams storage pointer)"}},"id":13580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["28460:4:60","28505:2:60","28595:12:60","28652:15:60","28717:4:60","28792:8:60"],"names":["pool","to","maxAmountsIn","minBptAmountOut","kind","userData"],"nodeType":"FunctionCall","src":"28411:433:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}],"expression":{"id":13560,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"28366:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":13561,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28373:12:60","memberName":"addLiquidity","nodeType":"MemberAccess","referencedDeclaration":4489,"src":"28366:19:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_AddLiquidityParams_$4823_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"function (struct AddLiquidityParams memory) external returns (uint256[] memory,uint256,bytes memory)"}},"id":13581,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28366:500:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256,bytes memory)"}},"src":"28344:522:60","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13583,"nodeType":"ExpressionStatement","src":"28344:522:60"},{"condition":{"expression":{"id":13584,"name":"stepLocals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13171,"src":"28893:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapStepLocals_$12117_memory_ptr","typeString":"struct SwapStepLocals memory"}},"id":13585,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28904:10:60","memberName":"isLastStep","nodeType":"MemberAccess","referencedDeclaration":12116,"src":"28893:21:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":13613,"nodeType":"Block","src":"29236:95:60","statements":[{"expression":{"id":13611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13607,"name":"stepExactAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13127,"src":"29262:18:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":13608,"name":"stepAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13548,"src":"29283:13:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":13610,"indexExpression":{"id":13609,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13550,"src":"29297:10:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29283:25:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29262:46:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13612,"nodeType":"ExpressionStatement","src":"29262:46:60"}]},"id":13614,"nodeType":"IfStatement","src":"28889:442:60","trueBody":{"id":13606,"nodeType":"Block","src":"28916:314:60","statements":[{"expression":{"id":13592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":13586,"name":"pathAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13094,"src":"29055:13:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":13588,"indexExpression":{"id":13587,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13107,"src":"29069:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"29055:16:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":13589,"name":"stepAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13548,"src":"29074:13:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":13591,"indexExpression":{"id":13590,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13550,"src":"29088:10:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29074:25:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29055:44:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13593,"nodeType":"ExpressionStatement","src":"29055:44:60"},{"expression":{"arguments":[{"arguments":[{"id":13599,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13203,"src":"29167:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":13598,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29159:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13597,"name":"address","nodeType":"ElementaryTypeName","src":"29159:7:60","typeDescriptions":{}}},"id":13600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29159:20:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":13601,"name":"stepAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13548,"src":"29181:13:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":13603,"indexExpression":{"id":13602,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13550,"src":"29195:10:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29181:25:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13594,"name":"_currentSwapTokenInAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14024,"src":"29125:26:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function () view returns (AddressToUintMappingSlot)"}},"id":13595,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29125:28:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":13596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29154:4:60","memberName":"tAdd","nodeType":"MemberAccess","referencedDeclaration":7103,"src":"29125:33:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address,uint256)"}},"id":13604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29125:82:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13605,"nodeType":"ExpressionStatement","src":"29125:82:60"}]}},{"condition":{"expression":{"id":13615,"name":"stepLocals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13171,"src":"29466:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapStepLocals_$12117_memory_ptr","typeString":"struct SwapStepLocals memory"}},"id":13616,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29477:11:60","memberName":"isFirstStep","nodeType":"MemberAccess","referencedDeclaration":12114,"src":"29466:22:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":13639,"nodeType":"Block","src":"29813:210:60","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":13633,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13160,"src":"29969:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":13634,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29974:4:60","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1590,"src":"29969:9:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13632,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"29962:6:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":13635,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29962:17:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":13636,"name":"stepExactAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13127,"src":"29981:18:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13629,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"29948:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":13631,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29955:6:60","memberName":"settle","nodeType":"MemberAccess","referencedDeclaration":4451,"src":"29948:13:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$_t_uint256_$","typeString":"function (contract IERC20,uint256) external returns (uint256)"}},"id":13637,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29948:52:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13638,"nodeType":"ExpressionStatement","src":"29948:52:60"}]},"id":13640,"nodeType":"IfStatement","src":"29462:561:60","trueBody":{"id":13628,"nodeType":"Block","src":"29490:317:60","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":13622,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13160,"src":"29749:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":13623,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29754:8:60","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1593,"src":"29749:13:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":13621,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29741:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13620,"name":"address","nodeType":"ElementaryTypeName","src":"29741:7:60","typeDescriptions":{}}},"id":13624,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29741:22:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13625,"name":"stepExactAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13127,"src":"29765:18:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13617,"name":"_currentSwapTokenOutAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14036,"src":"29706:27:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function () view returns (AddressToUintMappingSlot)"}},"id":13618,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29706:29:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":13619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29736:4:60","memberName":"tSub","nodeType":"MemberAccess","referencedDeclaration":7133,"src":"29706:34:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address,uint256)"}},"id":13626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29706:78:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13627,"nodeType":"ExpressionStatement","src":"29706:78:60"}]}}]}},"id":13688,"nodeType":"IfStatement","src":"23885:7087:60","trueBody":{"id":13535,"nodeType":"Block","src":"23924:3910:60","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13369,"name":"stepLocals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13171,"src":"24612:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapStepLocals_$12117_memory_ptr","typeString":"struct SwapStepLocals memory"}},"id":13370,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24623:10:60","memberName":"isLastStep","nodeType":"MemberAccess","referencedDeclaration":12116,"src":"24612:21:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":13371,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"24637:5:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"24612:30:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":13401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13395,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13090,"src":"24844:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_calldata_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams calldata"}},"id":13396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24851:6:60","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":1635,"src":"24844:13:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":13399,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"24869:4:60","typeDescriptions":{"typeIdentifier":"t_contract$_BatchRouter_$13916","typeString":"contract BatchRouter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BatchRouter_$13916","typeString":"contract BatchRouter"}],"id":13398,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24861:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13397,"name":"address","nodeType":"ElementaryTypeName","src":"24861:7:60","typeDescriptions":{}}},"id":13400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24861:13:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"24844:30:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13421,"nodeType":"IfStatement","src":"24840:814:60","trueBody":{"id":13420,"nodeType":"Block","src":"24876:778:60","statements":[{"expression":{"arguments":[{"expression":{"id":13405,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13090,"src":"25442:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_calldata_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams calldata"}},"id":13406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25449:6:60","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":1635,"src":"25442:13:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":13409,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"25493:4:60","typeDescriptions":{"typeIdentifier":"t_contract$_BatchRouter_$13916","typeString":"contract BatchRouter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BatchRouter_$13916","typeString":"contract BatchRouter"}],"id":13408,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25485:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13407,"name":"address","nodeType":"ElementaryTypeName","src":"25485:7:60","typeDescriptions":{}}},"id":13410,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25485:13:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":13411,"name":"stepMaxAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13199,"src":"25528:15:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25544:9:60","memberName":"toUint160","nodeType":"MemberAccess","referencedDeclaration":43591,"src":"25528:25:60","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint160_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint160)"}},"id":13413,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25528:27:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},{"arguments":[{"id":13416,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13203,"src":"25593:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":13415,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25585:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13414,"name":"address","nodeType":"ElementaryTypeName","src":"25585:7:60","typeDescriptions":{}}},"id":13417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25585:20:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint160","typeString":"uint160"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":13402,"name":"_permit2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18588,"src":"25391:8:60","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"}},"id":13404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25400:12:60","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":48531,"src":"25391:21:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint160_$_t_address_$returns$__$","typeString":"function (address,address,uint160,address) external"}},"id":13418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25391:240:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13419,"nodeType":"ExpressionStatement","src":"25391:240:60"}]}},"id":13422,"nodeType":"IfStatement","src":"24608:1046:60","trueBody":{"id":13394,"nodeType":"Block","src":"24644:190:60","statements":[{"expression":{"id":13378,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13373,"name":"stepMaxAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13199,"src":"24670:15:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":13376,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13203,"src":"24709:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"expression":{"id":13374,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"24688:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":13375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24695:13:60","memberName":"getReservesOf","nodeType":"MemberAccess","referencedDeclaration":4066,"src":"24688:20:60","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_contract$_IERC20_$40109_$returns$_t_uint256_$","typeString":"function (contract IERC20) view external returns (uint256)"}},"id":13377,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24688:33:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24670:51:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13379,"nodeType":"ExpressionStatement","src":"24670:51:60"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":13384,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13160,"src":"24768:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":13385,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24773:4:60","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1590,"src":"24768:9:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13383,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"24761:6:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":13386,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24761:17:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"arguments":[{"id":13389,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"24788:4:60","typeDescriptions":{"typeIdentifier":"t_contract$_BatchRouter_$13916","typeString":"contract BatchRouter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BatchRouter_$13916","typeString":"contract BatchRouter"}],"id":13388,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24780:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13387,"name":"address","nodeType":"ElementaryTypeName","src":"24780:7:60","typeDescriptions":{}}},"id":13390,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24780:13:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13391,"name":"stepMaxAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13199,"src":"24795:15:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13380,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"24747:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":13382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24754:6:60","memberName":"sendTo","nodeType":"MemberAccess","referencedDeclaration":4462,"src":"24747:13:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$40109_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":13392,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24747:64:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13393,"nodeType":"ExpressionStatement","src":"24747:64:60"}]}},{"assignments":[13427,null],"declarations":[{"constant":false,"id":13427,"mutability":"mutable","name":"exactAmountsOut","nameLocation":"25694:15:60","nodeType":"VariableDeclaration","scope":13535,"src":"25677:32:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":13425,"name":"uint256","nodeType":"ElementaryTypeName","src":"25677:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13426,"nodeType":"ArrayTypeName","src":"25677:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},null],"id":13435,"initialValue":{"arguments":[{"expression":{"id":13429,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13160,"src":"25774:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":13430,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25779:4:60","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1590,"src":"25774:9:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":13431,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13160,"src":"25809:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":13432,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25814:8:60","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":1593,"src":"25809:13:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":13433,"name":"stepExactAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13127,"src":"25848:18:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13428,"name":"_getSingleInputArrayAndTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19026,"src":"25715:33:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_contract$_IERC20_$40109_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address,contract IERC20,uint256) view returns (uint256[] memory,uint256)"}},"id":13434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25715:173:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(uint256[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"25676:212:60"},{"assignments":[13437,null,null],"declarations":[{"constant":false,"id":13437,"mutability":"mutable","name":"bptAmountIn","nameLocation":"26124:11:60","nodeType":"VariableDeclaration","scope":13535,"src":"26116:19:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13436,"name":"uint256","nodeType":"ElementaryTypeName","src":"26116:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null,null],"id":13455,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":13441,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13160,"src":"26249:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":13442,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26254:4:60","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1590,"src":"26249:9:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":13445,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"26302:4:60","typeDescriptions":{"typeIdentifier":"t_contract$_BatchRouter_$13916","typeString":"contract BatchRouter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BatchRouter_$13916","typeString":"contract BatchRouter"}],"id":13444,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"26294:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13443,"name":"address","nodeType":"ElementaryTypeName","src":"26294:7:60","typeDescriptions":{}}},"id":13446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26294:13:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13447,"name":"stepMaxAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13199,"src":"26353:15:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13448,"name":"exactAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13427,"src":"26413:15:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":13449,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4828,"src":"26464:19:60","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RemoveLiquidityKind_$4828_$","typeString":"type(enum RemoveLiquidityKind)"}},"id":13450,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"26484:22:60","memberName":"SINGLE_TOKEN_EXACT_OUT","nodeType":"MemberAccess","referencedDeclaration":4826,"src":"26464:42:60","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},{"expression":{"id":13451,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13090,"src":"26546:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_calldata_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams calldata"}},"id":13452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26553:8:60","memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":1645,"src":"26546:15:60","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":13440,"name":"RemoveLiquidityParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4844,"src":"26191:21:60","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_RemoveLiquidityParams_$4844_storage_ptr_$","typeString":"type(struct RemoveLiquidityParams storage pointer)"}},"id":13453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["26243:4:60","26288:4:60","26337:14:60","26398:13:60","26458:4:60","26536:8:60"],"names":["pool","from","maxBptAmountIn","minAmountsOut","kind","userData"],"nodeType":"FunctionCall","src":"26191:397:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}],"expression":{"id":13438,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"26143:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":13439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26150:15:60","memberName":"removeLiquidity","nodeType":"MemberAccess","referencedDeclaration":4503,"src":"26143:22:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_RemoveLiquidityParams_$4844_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function (struct RemoveLiquidityParams memory) external returns (uint256,uint256[] memory,bytes memory)"}},"id":13454,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26143:467:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"26115:495:60"},{"condition":{"expression":{"id":13456,"name":"stepLocals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13171,"src":"26637:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapStepLocals_$12117_memory_ptr","typeString":"struct SwapStepLocals memory"}},"id":13457,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26648:10:60","memberName":"isLastStep","nodeType":"MemberAccess","referencedDeclaration":12116,"src":"26637:21:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":13533,"nodeType":"Block","src":"27250:566:60","statements":[{"expression":{"id":13503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13501,"name":"stepExactAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13127,"src":"27357:18:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13502,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13437,"src":"27378:11:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27357:32:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13504,"nodeType":"ExpressionStatement","src":"27357:32:60"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13505,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13437,"src":"27499:11:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":13506,"name":"stepMaxAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13199,"src":"27513:15:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27499:29:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13532,"nodeType":"IfStatement","src":"27495:299:60","trueBody":{"id":13531,"nodeType":"Block","src":"27530:264:60","statements":[{"assignments":[13509],"declarations":[{"constant":false,"id":13509,"mutability":"mutable","name":"refundAmount","nameLocation":"27568:12:60","nodeType":"VariableDeclaration","scope":13531,"src":"27560:20:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13508,"name":"uint256","nodeType":"ElementaryTypeName","src":"27560:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13513,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13510,"name":"stepMaxAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13199,"src":"27583:15:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":13511,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13437,"src":"27601:11:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27583:29:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"27560:52:60"},{"expression":{"arguments":[{"arguments":[{"id":13519,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"27675:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}],"id":13518,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27667:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13517,"name":"address","nodeType":"ElementaryTypeName","src":"27667:7:60","typeDescriptions":{}}},"id":13520,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27667:15:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13521,"name":"refundAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13509,"src":"27684:12:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13514,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13203,"src":"27642:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":13516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27654:12:60","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":40221,"src":"27642:24:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$40109_$","typeString":"function (contract IERC20,address,uint256)"}},"id":13522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27642:55:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13523,"nodeType":"ExpressionStatement","src":"27642:55:60"},{"expression":{"arguments":[{"id":13527,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13203,"src":"27741:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":13528,"name":"refundAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13509,"src":"27754:12:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13524,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"27727:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":13526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27734:6:60","memberName":"settle","nodeType":"MemberAccess","referencedDeclaration":4451,"src":"27727:13:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$_t_uint256_$","typeString":"function (contract IERC20,uint256) external returns (uint256)"}},"id":13529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27727:40:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13530,"nodeType":"ExpressionStatement","src":"27727:40:60"}]}}]},"id":13534,"nodeType":"IfStatement","src":"26633:1183:60","trueBody":{"id":13500,"nodeType":"Block","src":"26660:584:60","statements":[{"expression":{"id":13462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":13458,"name":"pathAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13094,"src":"26798:13:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":13460,"indexExpression":{"id":13459,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13107,"src":"26812:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26798:16:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13461,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13437,"src":"26817:11:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26798:30:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13463,"nodeType":"ExpressionStatement","src":"26798:30:60"},{"expression":{"arguments":[{"arguments":[{"id":13469,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13203,"src":"26890:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":13468,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"26882:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13467,"name":"address","nodeType":"ElementaryTypeName","src":"26882:7:60","typeDescriptions":{}}},"id":13470,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26882:20:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13471,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13437,"src":"26904:11:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13464,"name":"_settledTokenAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14048,"src":"26854:20:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function () view returns (AddressToUintMappingSlot)"}},"id":13465,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26854:22:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":13466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26877:4:60","memberName":"tAdd","nodeType":"MemberAccess","referencedDeclaration":7103,"src":"26854:27:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address,uint256)"}},"id":13472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26854:62:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13473,"nodeType":"ExpressionStatement","src":"26854:62:60"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13476,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13474,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13437,"src":"27021:11:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":13475,"name":"stepMaxAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13199,"src":"27035:15:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27021:29:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":13483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13477,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13090,"src":"27054:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_calldata_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams calldata"}},"id":13478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27061:6:60","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":1635,"src":"27054:13:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":13481,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"27079:4:60","typeDescriptions":{"typeIdentifier":"t_contract$_BatchRouter_$13916","typeString":"contract BatchRouter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BatchRouter_$13916","typeString":"contract BatchRouter"}],"id":13480,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27071:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13479,"name":"address","nodeType":"ElementaryTypeName","src":"27071:7:60","typeDescriptions":{}}},"id":13482,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27071:13:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"27054:30:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"27021:63:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13499,"nodeType":"IfStatement","src":"27017:205:60","trueBody":{"id":13498,"nodeType":"Block","src":"27086:136:60","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":13490,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13090,"src":"27149:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_calldata_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams calldata"}},"id":13491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27156:6:60","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":1635,"src":"27149:13:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13489,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27141:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13488,"name":"address","nodeType":"ElementaryTypeName","src":"27141:7:60","typeDescriptions":{}}},"id":13492,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27141:22:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13493,"name":"stepMaxAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13199,"src":"27165:15:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":13494,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13437,"src":"27183:11:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27165:29:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":13485,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13203,"src":"27116:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":13487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27128:12:60","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":40221,"src":"27116:24:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$40109_$","typeString":"function (contract IERC20,address,uint256)"}},"id":13496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27116:79:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13497,"nodeType":"ExpressionStatement","src":"27116:79:60"}]}}]}}]}},"id":13689,"nodeType":"IfStatement","src":"21999:8973:60","trueBody":{"id":13361,"nodeType":"Block","src":"22018:1861:60","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13264,"name":"stepLocals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13171,"src":"22044:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapStepLocals_$12117_memory_ptr","typeString":"struct SwapStepLocals memory"}},"id":13265,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22055:10:60","memberName":"isLastStep","nodeType":"MemberAccess","referencedDeclaration":12116,"src":"22044:21:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":13270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":13266,"name":"EVMCallModeHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5808,"src":"22069:18:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_EVMCallModeHelpers_$5808_$","typeString":"type(library EVMCallModeHelpers)"}},"id":13267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22088:12:60","memberName":"isStaticCall","nodeType":"MemberAccess","referencedDeclaration":5807,"src":"22069:31:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":13268,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22069:33:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":13269,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"22106:5:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"22069:42:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"22044:67:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13284,"nodeType":"IfStatement","src":"22040:311:60","trueBody":{"id":13283,"nodeType":"Block","src":"22113:238:60","statements":[{"expression":{"arguments":[{"expression":{"id":13273,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13090,"src":"22264:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_calldata_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams calldata"}},"id":13274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22271:6:60","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":1635,"src":"22264:13:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":13275,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13120,"src":"22279:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountOut_$1620_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut memory"}},"id":13276,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22284:7:60","memberName":"tokenIn","nodeType":"MemberAccess","referencedDeclaration":1611,"src":"22279:12:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"expression":{"id":13277,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13120,"src":"22293:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountOut_$1620_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut memory"}},"id":13278,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22298:11:60","memberName":"maxAmountIn","nodeType":"MemberAccess","referencedDeclaration":1617,"src":"22293:16:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":13279,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13090,"src":"22311:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_calldata_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams calldata"}},"id":13280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22318:9:60","memberName":"wethIsEth","nodeType":"MemberAccess","referencedDeclaration":1643,"src":"22311:16:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":13272,"name":"_takeTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19083,"src":"22251:12:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$40109_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,contract IERC20,uint256,bool)"}},"id":13281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22251:77:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13282,"nodeType":"ExpressionStatement","src":"22251:77:60"}]}},{"assignments":[null,13286,null],"declarations":[null,{"constant":false,"id":13286,"mutability":"mutable","name":"amountIn","nameLocation":"22384:8:60","nodeType":"VariableDeclaration","scope":13361,"src":"22376:16:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13285,"name":"uint256","nodeType":"ElementaryTypeName","src":"22376:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null],"id":13312,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":13290,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"22517:8:60","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4735_$","typeString":"type(enum SwapKind)"}},"id":13291,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"22526:9:60","memberName":"EXACT_OUT","nodeType":"MemberAccess","referencedDeclaration":4734,"src":"22517:18:60","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":13298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13292,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13160,"src":"22576:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":13293,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22581:4:60","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1590,"src":"22576:9:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":13296,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13203,"src":"22597:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":13295,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22589:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13294,"name":"address","nodeType":"ElementaryTypeName","src":"22589:7:60","typeDescriptions":{}}},"id":13297,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22589:20:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"22576:33:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":13301,"name":"WrappingDirection","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4847,"src":"22703:17:60","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_WrappingDirection_$4847_$","typeString":"type(enum WrappingDirection)"}},"id":13302,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"22721:4:60","memberName":"WRAP","nodeType":"MemberAccess","referencedDeclaration":4845,"src":"22703:22:60","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$4847","typeString":"enum WrappingDirection"}},"id":13303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"22576:149:60","trueExpression":{"expression":{"id":13299,"name":"WrappingDirection","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4847,"src":"22644:17:60","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_WrappingDirection_$4847_$","typeString":"type(enum WrappingDirection)"}},"id":13300,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"22662:6:60","memberName":"UNWRAP","nodeType":"MemberAccess","referencedDeclaration":4846,"src":"22644:24:60","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$4847","typeString":"enum WrappingDirection"}},"typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$4847","typeString":"enum WrappingDirection"}},{"arguments":[{"expression":{"id":13305,"name":"step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13160,"src":"22778:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathStep_$1596_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory"}},"id":13306,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22783:4:60","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":1590,"src":"22778:9:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":13304,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39833,"src":"22769:8:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$39833_$","typeString":"type(contract IERC4626)"}},"id":13307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22769:19:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":13308,"name":"stepExactAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13127,"src":"22834:18:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":13309,"name":"stepMaxAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13199,"src":"22892:15:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},{"typeIdentifier":"t_enum$_WrappingDirection_$4847","typeString":"enum WrappingDirection"},{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13289,"name":"BufferWrapOrUnwrapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4862,"src":"22456:24:60","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_BufferWrapOrUnwrapParams_$4862_storage_ptr_$","typeString":"type(struct BufferWrapOrUnwrapParams storage pointer)"}},"id":13310,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["22511:4:60","22565:9:60","22755:12:60","22818:14:60","22882:8:60"],"names":["kind","direction","wrappedToken","amountGivenRaw","limitRaw"],"nodeType":"FunctionCall","src":"22456:478:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}],"expression":{"id":13287,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"22398:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":13288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22405:25:60","memberName":"erc4626BufferWrapOrUnwrap","nodeType":"MemberAccess","referencedDeclaration":4555,"src":"22398:32:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (struct BufferWrapOrUnwrapParams memory) external returns (uint256,uint256,uint256)"}},"id":13311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22398:558:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"22373:583:60"},{"condition":{"expression":{"id":13313,"name":"stepLocals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13171,"src":"22983:10:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapStepLocals_$12117_memory_ptr","typeString":"struct SwapStepLocals memory"}},"id":13314,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22994:10:60","memberName":"isLastStep","nodeType":"MemberAccess","referencedDeclaration":12116,"src":"22983:21:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":13359,"nodeType":"Block","src":"23783:78:60","statements":[{"expression":{"id":13357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":13355,"name":"stepExactAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13127,"src":"23809:18:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13356,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13286,"src":"23830:8:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23809:29:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13358,"nodeType":"ExpressionStatement","src":"23809:29:60"}]},"id":13360,"nodeType":"IfStatement","src":"22979:882:60","trueBody":{"id":13354,"nodeType":"Block","src":"23006:771:60","statements":[{"expression":{"id":13319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":13315,"name":"pathAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13094,"src":"23032:13:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":13317,"indexExpression":{"id":13316,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13107,"src":"23046:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23032:16:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13318,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13286,"src":"23051:8:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23032:27:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13320,"nodeType":"ExpressionStatement","src":"23032:27:60"},{"expression":{"arguments":[{"arguments":[{"id":13326,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13203,"src":"23278:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":13325,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23270:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13324,"name":"address","nodeType":"ElementaryTypeName","src":"23270:7:60","typeDescriptions":{}}},"id":13327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23270:20:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13321,"name":"_currentSwapTokensOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14012,"src":"23242:21:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function () view returns (struct TransientEnumerableSet.AddressSet storage pointer)"}},"id":13322,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23242:23:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}},"id":13323,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23266:3:60","memberName":"add","nodeType":"MemberAccess","referencedDeclaration":10357,"src":"23242:27:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$10308_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":13328,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23242:49:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13329,"nodeType":"ExpressionStatement","src":"23242:49:60"},{"expression":{"arguments":[{"arguments":[{"id":13335,"name":"stepTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13203,"src":"23360:11:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":13334,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23352:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13333,"name":"address","nodeType":"ElementaryTypeName","src":"23352:7:60","typeDescriptions":{}}},"id":13336,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23352:20:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":13337,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13120,"src":"23374:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountOut_$1620_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut memory"}},"id":13338,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23379:11:60","memberName":"maxAmountIn","nodeType":"MemberAccess","referencedDeclaration":1617,"src":"23374:16:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":13339,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13286,"src":"23393:8:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23374:27:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13330,"name":"_currentSwapTokenOutAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14036,"src":"23317:27:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function () view returns (AddressToUintMappingSlot)"}},"id":13331,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23317:29:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":13332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23347:4:60","memberName":"tAdd","nodeType":"MemberAccess","referencedDeclaration":7103,"src":"23317:34:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address,uint256)"}},"id":13341,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23317:85:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13342,"nodeType":"ExpressionStatement","src":"23317:85:60"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":13348,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13120,"src":"23730:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountOut_$1620_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut memory"}},"id":13349,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23735:7:60","memberName":"tokenIn","nodeType":"MemberAccess","referencedDeclaration":1611,"src":"23730:12:60","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":13347,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23722:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13346,"name":"address","nodeType":"ElementaryTypeName","src":"23722:7:60","typeDescriptions":{}}},"id":13350,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23722:21:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13351,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13286,"src":"23745:8:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13343,"name":"_settledTokenAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14048,"src":"23694:20:60","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function () view returns (AddressToUintMappingSlot)"}},"id":13344,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23694:22:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":13345,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23717:4:60","memberName":"tAdd","nodeType":"MemberAccess","referencedDeclaration":7103,"src":"23694:27:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address,uint256)"}},"id":13352,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23694:60:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13353,"nodeType":"ExpressionStatement","src":"23694:60:60"}]}}]}}]},"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":13154,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13152,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13142,"src":"20184:1:60","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"30","id":13153,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20189:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"20184:6:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13691,"initializationExpression":{"assignments":[13142],"declarations":[{"constant":false,"id":13142,"mutability":"mutable","name":"j","nameLocation":"20149:1:60","nodeType":"VariableDeclaration","scope":13691,"src":"20142:8:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":13141,"name":"int256","nodeType":"ElementaryTypeName","src":"20142:6:60","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":13151,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":13145,"name":"path","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13120,"src":"20160:4:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountOut_$1620_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut memory"}},"id":13146,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20165:5:60","memberName":"steps","nodeType":"MemberAccess","referencedDeclaration":1615,"src":"20160:10:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathStep_$1596_memory_ptr_$dyn_memory_ptr","typeString":"struct IBatchRouter.SwapPathStep memory[] memory"}},"id":13147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20171:6:60","memberName":"length","nodeType":"MemberAccess","src":"20160:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":13148,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20180:1:60","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"20160:21:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":13144,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20153:6:60","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":13143,"name":"int256","nodeType":"ElementaryTypeName","src":"20153:6:60","typeDescriptions":{}}},"id":13150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20153:29:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"20142:40:60"},"isSimpleCounterLoop":false,"loopExpression":{"expression":{"id":13156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":true,"src":"20192:3:60","subExpression":{"id":13155,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13142,"src":"20194:1:60","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":13157,"nodeType":"ExpressionStatement","src":"20192:3:60"},"nodeType":"ForStatement","src":"20137:10849:60"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13110,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13107,"src":"18989:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":13111,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13090,"src":"18993:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_calldata_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams calldata"}},"id":13112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19000:5:60","memberName":"paths","nodeType":"MemberAccess","referencedDeclaration":1639,"src":"18993:12:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountOut_$1620_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut calldata[] calldata"}},"id":13113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19006:6:60","memberName":"length","nodeType":"MemberAccess","src":"18993:19:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18989:23:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13693,"initializationExpression":{"assignments":[13107],"declarations":[{"constant":false,"id":13107,"mutability":"mutable","name":"i","nameLocation":"18982:1:60","nodeType":"VariableDeclaration","scope":13693,"src":"18974:9:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13106,"name":"uint256","nodeType":"ElementaryTypeName","src":"18974:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13109,"initialValue":{"hexValue":"30","id":13108,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18986:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"18974:13:60"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":13116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"19014:3:60","subExpression":{"id":13115,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13107,"src":"19016:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13117,"nodeType":"ExpressionStatement","src":"19014:3:60"},"nodeType":"ForStatement","src":"18969:12027:60"}]},"documentation":{"id":13087,"nodeType":"StructuredDocumentation","src":"18571:187:60","text":" @dev Executes every swap path in the given input parameters.\n Computes inputs for the path, and aggregates them by token and amounts as well in transient storage."},"id":13695,"implemented":true,"kind":"function","modifiers":[],"name":"_computePathAmountsIn","nameLocation":"18772:21:60","nodeType":"FunctionDefinition","parameters":{"id":13091,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13090,"mutability":"mutable","name":"params","nameLocation":"18835:6:60","nodeType":"VariableDeclaration","scope":13695,"src":"18803:38:60","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_calldata_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams"},"typeName":{"id":13089,"nodeType":"UserDefinedTypeName","pathNode":{"id":13088,"name":"SwapExactOutHookParams","nameLocations":["18803:22:60"],"nodeType":"IdentifierPath","referencedDeclaration":1646,"src":"18803:22:60"},"referencedDeclaration":1646,"src":"18803:22:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_storage_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams"}},"visibility":"internal"}],"src":"18793:54:60"},"returnParameters":{"id":13095,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13094,"mutability":"mutable","name":"pathAmountsIn","nameLocation":"18883:13:60","nodeType":"VariableDeclaration","scope":13695,"src":"18866:30:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":13092,"name":"uint256","nodeType":"ElementaryTypeName","src":"18866:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13093,"nodeType":"ArrayTypeName","src":"18866:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"18865:32:60"},"scope":13916,"src":"18763:12239:60","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[1713],"body":{"id":13775,"nodeType":"Block","src":"31539:697:60","statements":[{"body":{"id":13737,"nodeType":"Block","src":"31592:50:60","statements":[{"expression":{"id":13735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":13730,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13700,"src":"31606:5:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountIn_$1608_memory_ptr_$dyn_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn memory[] memory"}},"id":13732,"indexExpression":{"id":13731,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13720,"src":"31612:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"31606:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountIn_$1608_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn memory"}},"id":13733,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"31615:12:60","memberName":"minAmountOut","nodeType":"MemberAccess","referencedDeclaration":1607,"src":"31606:21:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":13734,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31630:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"31606:25:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13736,"nodeType":"ExpressionStatement","src":"31606:25:60"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13723,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13720,"src":"31569:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":13724,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13700,"src":"31573:5:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountIn_$1608_memory_ptr_$dyn_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn memory[] memory"}},"id":13725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31579:6:60","memberName":"length","nodeType":"MemberAccess","src":"31573:12:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31569:16:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13738,"initializationExpression":{"assignments":[13720],"declarations":[{"constant":false,"id":13720,"mutability":"mutable","name":"i","nameLocation":"31562:1:60","nodeType":"VariableDeclaration","scope":13738,"src":"31554:9:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13719,"name":"uint256","nodeType":"ElementaryTypeName","src":"31554:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13722,"initialValue":{"hexValue":"30","id":13721,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31566:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"31554:13:60"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":13728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"31587:3:60","subExpression":{"id":13727,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13720,"src":"31589:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13729,"nodeType":"ExpressionStatement","src":"31587:3:60"},"nodeType":"ForStatement","src":"31549:93:60"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":13745,"name":"BatchRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13916,"src":"31773:11:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BatchRouter_$13916_$","typeString":"type(contract BatchRouter)"}},"id":13746,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"31785:20:60","memberName":"querySwapExactInHook","nodeType":"MemberAccess","referencedDeclaration":13886,"src":"31773:32:60","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_SwapExactInHookParams_$1633_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function BatchRouter.querySwapExactInHook(struct IBatchRouter.SwapExactInHookParams calldata) returns (uint256[] memory,address[] memory,uint256[] memory)"}},{"arguments":[{"arguments":[{"id":13750,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"31899:4:60","typeDescriptions":{"typeIdentifier":"t_contract$_BatchRouter_$13916","typeString":"contract BatchRouter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BatchRouter_$13916","typeString":"contract BatchRouter"}],"id":13749,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31891:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13748,"name":"address","nodeType":"ElementaryTypeName","src":"31891:7:60","typeDescriptions":{}}},"id":13751,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31891:13:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13752,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13700,"src":"31941:5:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountIn_$1608_memory_ptr_$dyn_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn memory[] memory"}},{"expression":{"arguments":[{"id":13755,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31991:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":13754,"name":"uint256","nodeType":"ElementaryTypeName","src":"31991:7:60","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":13753,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"31986:4:60","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":13756,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31986:13:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":13757,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"32000:3:60","memberName":"max","nodeType":"MemberAccess","src":"31986:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":13758,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"32044:5:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":13759,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13704,"src":"32089:8:60","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountIn_$1608_memory_ptr_$dyn_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn memory[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":13747,"name":"SwapExactInHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1633,"src":"31831:21:60","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_SwapExactInHookParams_$1633_storage_ptr_$","typeString":"type(struct IBatchRouter.SwapExactInHookParams storage pointer)"}},"id":13760,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["31883:6:60","31934:5:60","31976:8:60","32033:9:60","32079:8:60"],"names":["sender","paths","deadline","wethIsEth","userData"],"nodeType":"FunctionCall","src":"31831:293:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_memory_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_SwapExactInHookParams_$1633_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function BatchRouter.querySwapExactInHook(struct IBatchRouter.SwapExactInHookParams calldata) returns (uint256[] memory,address[] memory,uint256[] memory)"},{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_memory_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams memory"}],"expression":{"id":13743,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"31733:3:60","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":13744,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"31737:10:60","memberName":"encodeCall","nodeType":"MemberAccess","src":"31733:14:60","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":13761,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31733:413:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":13741,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"31699:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":13742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31706:5:60","memberName":"quote","nodeType":"MemberAccess","referencedDeclaration":4392,"src":"31699:12:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":13762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31699:465:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"baseExpression":{"id":13764,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32183:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":13763,"name":"uint256","nodeType":"ElementaryTypeName","src":"32183:7:60","typeDescriptions":{}}},"id":13765,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"32183:9:60","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}},{"baseExpression":{"id":13767,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32194:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13766,"name":"address","nodeType":"ElementaryTypeName","src":"32194:7:60","typeDescriptions":{}}},"id":13768,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"32194:9:60","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"type(address[] memory)"}},{"baseExpression":{"id":13770,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32205:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":13769,"name":"uint256","nodeType":"ElementaryTypeName","src":"32205:7:60","typeDescriptions":{}}},"id":13771,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"32205:9:60","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}}],"id":13772,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"32182:33:60","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_array$_t_address_$dyn_memory_ptr_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$","typeString":"tuple(type(uint256[] memory),type(address[] memory),type(uint256[] memory))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_array$_t_address_$dyn_memory_ptr_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$","typeString":"tuple(type(uint256[] memory),type(address[] memory),type(uint256[] memory))"}],"expression":{"id":13739,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"31671:3:60","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":13740,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"31675:6:60","memberName":"decode","nodeType":"MemberAccess","src":"31671:10:60","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":13773,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31671:558:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256[] memory,address[] memory,uint256[] memory)"}},"functionReturnParameters":13718,"id":13774,"nodeType":"Return","src":"31652:577:60"}]},"documentation":{"id":13696,"nodeType":"StructuredDocumentation","src":"31216:28:60","text":"@inheritdoc IBatchRouter"},"functionSelector":"e3b5dff4","id":13776,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":13707,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13702,"src":"31420:6:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":13708,"kind":"modifierInvocation","modifierName":{"id":13706,"name":"saveSender","nameLocations":["31409:10:60"],"nodeType":"IdentifierPath","referencedDeclaration":19249,"src":"31409:10:60"},"nodeType":"ModifierInvocation","src":"31409:18:60"}],"name":"querySwapExactIn","nameLocation":"31258:16:60","nodeType":"FunctionDefinition","parameters":{"id":13705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13700,"mutability":"mutable","name":"paths","nameLocation":"31315:5:60","nodeType":"VariableDeclaration","scope":13776,"src":"31284:36:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountIn_$1608_memory_ptr_$dyn_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn[]"},"typeName":{"baseType":{"id":13698,"nodeType":"UserDefinedTypeName","pathNode":{"id":13697,"name":"SwapPathExactAmountIn","nameLocations":["31284:21:60"],"nodeType":"IdentifierPath","referencedDeclaration":1608,"src":"31284:21:60"},"referencedDeclaration":1608,"src":"31284:21:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountIn_$1608_storage_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn"}},"id":13699,"nodeType":"ArrayTypeName","src":"31284:23:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountIn_$1608_storage_$dyn_storage_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountIn[]"}},"visibility":"internal"},{"constant":false,"id":13702,"mutability":"mutable","name":"sender","nameLocation":"31338:6:60","nodeType":"VariableDeclaration","scope":13776,"src":"31330:14:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13701,"name":"address","nodeType":"ElementaryTypeName","src":"31330:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13704,"mutability":"mutable","name":"userData","nameLocation":"31369:8:60","nodeType":"VariableDeclaration","scope":13776,"src":"31354:23:60","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":13703,"name":"bytes","nodeType":"ElementaryTypeName","src":"31354:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"31274:109:60"},"returnParameters":{"id":13718,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13711,"mutability":"mutable","name":"pathAmountsOut","nameLocation":"31462:14:60","nodeType":"VariableDeclaration","scope":13776,"src":"31445:31:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":13709,"name":"uint256","nodeType":"ElementaryTypeName","src":"31445:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13710,"nodeType":"ArrayTypeName","src":"31445:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":13714,"mutability":"mutable","name":"tokensOut","nameLocation":"31495:9:60","nodeType":"VariableDeclaration","scope":13776,"src":"31478:26:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":13712,"name":"address","nodeType":"ElementaryTypeName","src":"31478:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":13713,"nodeType":"ArrayTypeName","src":"31478:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":13717,"mutability":"mutable","name":"amountsOut","nameLocation":"31523:10:60","nodeType":"VariableDeclaration","scope":13776,"src":"31506:27:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":13715,"name":"uint256","nodeType":"ElementaryTypeName","src":"31506:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13716,"nodeType":"ArrayTypeName","src":"31506:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"31444:90:60"},"scope":13916,"src":"31249:987:60","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1734],"body":{"id":13856,"nodeType":"Block","src":"32564:708:60","statements":[{"body":{"id":13818,"nodeType":"Block","src":"32617:59:60","statements":[{"expression":{"id":13816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":13811,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13781,"src":"32631:5:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountOut_$1620_memory_ptr_$dyn_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut memory[] memory"}},"id":13813,"indexExpression":{"id":13812,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13801,"src":"32637:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"32631:8:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountOut_$1620_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut memory"}},"id":13814,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"32640:11:60","memberName":"maxAmountIn","nodeType":"MemberAccess","referencedDeclaration":1617,"src":"32631:20:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":13815,"name":"_MAX_AMOUNT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19232,"src":"32654:11:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32631:34:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13817,"nodeType":"ExpressionStatement","src":"32631:34:60"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":13807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":13804,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13801,"src":"32594:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":13805,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13781,"src":"32598:5:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountOut_$1620_memory_ptr_$dyn_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut memory[] memory"}},"id":13806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32604:6:60","memberName":"length","nodeType":"MemberAccess","src":"32598:12:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32594:16:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":13819,"initializationExpression":{"assignments":[13801],"declarations":[{"constant":false,"id":13801,"mutability":"mutable","name":"i","nameLocation":"32587:1:60","nodeType":"VariableDeclaration","scope":13819,"src":"32579:9:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":13800,"name":"uint256","nodeType":"ElementaryTypeName","src":"32579:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":13803,"initialValue":{"hexValue":"30","id":13802,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32591:1:60","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"32579:13:60"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":13809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"32612:3:60","subExpression":{"id":13808,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13801,"src":"32614:1:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13810,"nodeType":"ExpressionStatement","src":"32612:3:60"},"nodeType":"ForStatement","src":"32574:102:60"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":13826,"name":"BatchRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13916,"src":"32807:11:60","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BatchRouter_$13916_$","typeString":"type(contract BatchRouter)"}},"id":13827,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"32819:21:60","memberName":"querySwapExactOutHook","nodeType":"MemberAccess","referencedDeclaration":13915,"src":"32807:33:60","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_SwapExactOutHookParams_$1646_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function BatchRouter.querySwapExactOutHook(struct IBatchRouter.SwapExactOutHookParams calldata) returns (uint256[] memory,address[] memory,uint256[] memory)"}},{"arguments":[{"arguments":[{"id":13831,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"32935:4:60","typeDescriptions":{"typeIdentifier":"t_contract$_BatchRouter_$13916","typeString":"contract BatchRouter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BatchRouter_$13916","typeString":"contract BatchRouter"}],"id":13830,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32927:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13829,"name":"address","nodeType":"ElementaryTypeName","src":"32927:7:60","typeDescriptions":{}}},"id":13832,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32927:13:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":13833,"name":"paths","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13781,"src":"32977:5:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountOut_$1620_memory_ptr_$dyn_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut memory[] memory"}},{"expression":{"arguments":[{"id":13836,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33027:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":13835,"name":"uint256","nodeType":"ElementaryTypeName","src":"33027:7:60","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":13834,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"33022:4:60","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":13837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33022:13:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":13838,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"33036:3:60","memberName":"max","nodeType":"MemberAccess","src":"33022:17:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":13839,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"33080:5:60","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":13840,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13785,"src":"33125:8:60","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountOut_$1620_memory_ptr_$dyn_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut memory[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":13828,"name":"SwapExactOutHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1646,"src":"32866:22:60","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_SwapExactOutHookParams_$1646_storage_ptr_$","typeString":"type(struct IBatchRouter.SwapExactOutHookParams storage pointer)"}},"id":13841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["32919:6:60","32970:5:60","33012:8:60","33069:9:60","33115:8:60"],"names":["sender","paths","deadline","wethIsEth","userData"],"nodeType":"FunctionCall","src":"32866:294:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_memory_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_SwapExactOutHookParams_$1646_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function BatchRouter.querySwapExactOutHook(struct IBatchRouter.SwapExactOutHookParams calldata) returns (uint256[] memory,address[] memory,uint256[] memory)"},{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_memory_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams memory"}],"expression":{"id":13824,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"32767:3:60","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":13825,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"32771:10:60","memberName":"encodeCall","nodeType":"MemberAccess","src":"32767:14:60","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":13842,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32767:415:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":13822,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"32733:6:60","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":13823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32740:5:60","memberName":"quote","nodeType":"MemberAccess","referencedDeclaration":4392,"src":"32733:12:60","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":13843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32733:467:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"baseExpression":{"id":13845,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33219:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":13844,"name":"uint256","nodeType":"ElementaryTypeName","src":"33219:7:60","typeDescriptions":{}}},"id":13846,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"33219:9:60","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}},{"baseExpression":{"id":13848,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33230:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":13847,"name":"address","nodeType":"ElementaryTypeName","src":"33230:7:60","typeDescriptions":{}}},"id":13849,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"33230:9:60","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"type(address[] memory)"}},{"baseExpression":{"id":13851,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33241:7:60","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":13850,"name":"uint256","nodeType":"ElementaryTypeName","src":"33241:7:60","typeDescriptions":{}}},"id":13852,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"33241:9:60","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}}],"id":13853,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"33218:33:60","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_array$_t_address_$dyn_memory_ptr_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$","typeString":"tuple(type(uint256[] memory),type(address[] memory),type(uint256[] memory))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_array$_t_address_$dyn_memory_ptr_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$","typeString":"tuple(type(uint256[] memory),type(address[] memory),type(uint256[] memory))"}],"expression":{"id":13820,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"32705:3:60","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":13821,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"32709:6:60","memberName":"decode","nodeType":"MemberAccess","src":"32705:10:60","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":13854,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32705:560:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256[] memory,address[] memory,uint256[] memory)"}},"functionReturnParameters":13799,"id":13855,"nodeType":"Return","src":"32686:579:60"}]},"documentation":{"id":13777,"nodeType":"StructuredDocumentation","src":"32242:28:60","text":"@inheritdoc IBatchRouter"},"functionSelector":"2950286e","id":13857,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":13788,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13783,"src":"32448:6:60","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":13789,"kind":"modifierInvocation","modifierName":{"id":13787,"name":"saveSender","nameLocations":["32437:10:60"],"nodeType":"IdentifierPath","referencedDeclaration":19249,"src":"32437:10:60"},"nodeType":"ModifierInvocation","src":"32437:18:60"}],"name":"querySwapExactOut","nameLocation":"32284:17:60","nodeType":"FunctionDefinition","parameters":{"id":13786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13781,"mutability":"mutable","name":"paths","nameLocation":"32343:5:60","nodeType":"VariableDeclaration","scope":13857,"src":"32311:37:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountOut_$1620_memory_ptr_$dyn_memory_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut[]"},"typeName":{"baseType":{"id":13779,"nodeType":"UserDefinedTypeName","pathNode":{"id":13778,"name":"SwapPathExactAmountOut","nameLocations":["32311:22:60"],"nodeType":"IdentifierPath","referencedDeclaration":1620,"src":"32311:22:60"},"referencedDeclaration":1620,"src":"32311:22:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapPathExactAmountOut_$1620_storage_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut"}},"id":13780,"nodeType":"ArrayTypeName","src":"32311:24:60","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SwapPathExactAmountOut_$1620_storage_$dyn_storage_ptr","typeString":"struct IBatchRouter.SwapPathExactAmountOut[]"}},"visibility":"internal"},{"constant":false,"id":13783,"mutability":"mutable","name":"sender","nameLocation":"32366:6:60","nodeType":"VariableDeclaration","scope":13857,"src":"32358:14:60","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":13782,"name":"address","nodeType":"ElementaryTypeName","src":"32358:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":13785,"mutability":"mutable","name":"userData","nameLocation":"32397:8:60","nodeType":"VariableDeclaration","scope":13857,"src":"32382:23:60","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":13784,"name":"bytes","nodeType":"ElementaryTypeName","src":"32382:5:60","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"32301:110:60"},"returnParameters":{"id":13799,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13792,"mutability":"mutable","name":"pathAmountsIn","nameLocation":"32490:13:60","nodeType":"VariableDeclaration","scope":13857,"src":"32473:30:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":13790,"name":"uint256","nodeType":"ElementaryTypeName","src":"32473:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13791,"nodeType":"ArrayTypeName","src":"32473:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":13795,"mutability":"mutable","name":"tokensIn","nameLocation":"32522:8:60","nodeType":"VariableDeclaration","scope":13857,"src":"32505:25:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":13793,"name":"address","nodeType":"ElementaryTypeName","src":"32505:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":13794,"nodeType":"ArrayTypeName","src":"32505:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":13798,"mutability":"mutable","name":"amountsIn","nameLocation":"32549:9:60","nodeType":"VariableDeclaration","scope":13857,"src":"32532:26:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":13796,"name":"uint256","nodeType":"ElementaryTypeName","src":"32532:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13797,"nodeType":"ArrayTypeName","src":"32532:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"32472:87:60"},"scope":13916,"src":"32275:997:60","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":13885,"nodeType":"Block","src":"33528:83:60","statements":[{"expression":{"id":13883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":13876,"name":"pathAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13868,"src":"33539:14:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":13877,"name":"tokensOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13871,"src":"33555:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},{"id":13878,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13874,"src":"33566:10:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"id":13879,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"33538:39:60","typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256[] memory,address[] memory,uint256[] memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":13881,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13860,"src":"33597:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_calldata_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_calldata_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams calldata"}],"id":13880,"name":"_swapExactInHook","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12399,"src":"33580:16:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_SwapExactInHookParams_$1633_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (struct IBatchRouter.SwapExactInHookParams calldata) returns (uint256[] memory,address[] memory,uint256[] memory)"}},"id":13882,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33580:24:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256[] memory,address[] memory,uint256[] memory)"}},"src":"33538:66:60","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13884,"nodeType":"ExpressionStatement","src":"33538:66:60"}]},"functionSelector":"8a12a08c","id":13886,"implemented":true,"kind":"function","modifiers":[{"id":13863,"kind":"modifierInvocation","modifierName":{"id":13862,"name":"nonReentrant","nameLocations":["33386:12:60"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"33386:12:60"},"nodeType":"ModifierInvocation","src":"33386:12:60"},{"id":13865,"kind":"modifierInvocation","modifierName":{"id":13864,"name":"onlyVault","nameLocations":["33407:9:60"],"nodeType":"IdentifierPath","referencedDeclaration":28128,"src":"33407:9:60"},"nodeType":"ModifierInvocation","src":"33407:9:60"}],"name":"querySwapExactInHook","nameLocation":"33287:20:60","nodeType":"FunctionDefinition","parameters":{"id":13861,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13860,"mutability":"mutable","name":"params","nameLocation":"33348:6:60","nodeType":"VariableDeclaration","scope":13886,"src":"33317:37:60","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_calldata_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams"},"typeName":{"id":13859,"nodeType":"UserDefinedTypeName","pathNode":{"id":13858,"name":"SwapExactInHookParams","nameLocations":["33317:21:60"],"nodeType":"IdentifierPath","referencedDeclaration":1633,"src":"33317:21:60"},"referencedDeclaration":1633,"src":"33317:21:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactInHookParams_$1633_storage_ptr","typeString":"struct IBatchRouter.SwapExactInHookParams"}},"visibility":"internal"}],"src":"33307:53:60"},"returnParameters":{"id":13875,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13868,"mutability":"mutable","name":"pathAmountsOut","nameLocation":"33451:14:60","nodeType":"VariableDeclaration","scope":13886,"src":"33434:31:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":13866,"name":"uint256","nodeType":"ElementaryTypeName","src":"33434:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13867,"nodeType":"ArrayTypeName","src":"33434:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":13871,"mutability":"mutable","name":"tokensOut","nameLocation":"33484:9:60","nodeType":"VariableDeclaration","scope":13886,"src":"33467:26:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":13869,"name":"address","nodeType":"ElementaryTypeName","src":"33467:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":13870,"nodeType":"ArrayTypeName","src":"33467:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":13874,"mutability":"mutable","name":"amountsOut","nameLocation":"33512:10:60","nodeType":"VariableDeclaration","scope":13886,"src":"33495:27:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":13872,"name":"uint256","nodeType":"ElementaryTypeName","src":"33495:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13873,"nodeType":"ArrayTypeName","src":"33495:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"33433:90:60"},"scope":13916,"src":"33278:333:60","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":13914,"nodeType":"Block","src":"33866:81:60","statements":[{"expression":{"id":13912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":13905,"name":"pathAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13897,"src":"33877:13:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":13906,"name":"tokensIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13900,"src":"33892:8:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},{"id":13907,"name":"amountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13903,"src":"33902:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"id":13908,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"33876:36:60","typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256[] memory,address[] memory,uint256[] memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":13910,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13889,"src":"33933:6:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_calldata_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_calldata_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams calldata"}],"id":13909,"name":"_swapExactOutHook","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13086,"src":"33915:17:60","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_SwapExactOutHookParams_$1646_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (struct IBatchRouter.SwapExactOutHookParams calldata) returns (uint256[] memory,address[] memory,uint256[] memory)"}},"id":13911,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33915:25:60","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256[] memory,address[] memory,uint256[] memory)"}},"src":"33876:64:60","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":13913,"nodeType":"ExpressionStatement","src":"33876:64:60"}]},"functionSelector":"5a3c3987","id":13915,"implemented":true,"kind":"function","modifiers":[{"id":13892,"kind":"modifierInvocation","modifierName":{"id":13891,"name":"nonReentrant","nameLocations":["33727:12:60"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"33727:12:60"},"nodeType":"ModifierInvocation","src":"33727:12:60"},{"id":13894,"kind":"modifierInvocation","modifierName":{"id":13893,"name":"onlyVault","nameLocations":["33748:9:60"],"nodeType":"IdentifierPath","referencedDeclaration":28128,"src":"33748:9:60"},"nodeType":"ModifierInvocation","src":"33748:9:60"}],"name":"querySwapExactOutHook","nameLocation":"33626:21:60","nodeType":"FunctionDefinition","parameters":{"id":13890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13889,"mutability":"mutable","name":"params","nameLocation":"33689:6:60","nodeType":"VariableDeclaration","scope":13915,"src":"33657:38:60","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_calldata_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams"},"typeName":{"id":13888,"nodeType":"UserDefinedTypeName","pathNode":{"id":13887,"name":"SwapExactOutHookParams","nameLocations":["33657:22:60"],"nodeType":"IdentifierPath","referencedDeclaration":1646,"src":"33657:22:60"},"referencedDeclaration":1646,"src":"33657:22:60","typeDescriptions":{"typeIdentifier":"t_struct$_SwapExactOutHookParams_$1646_storage_ptr","typeString":"struct IBatchRouter.SwapExactOutHookParams"}},"visibility":"internal"}],"src":"33647:54:60"},"returnParameters":{"id":13904,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13897,"mutability":"mutable","name":"pathAmountsIn","nameLocation":"33792:13:60","nodeType":"VariableDeclaration","scope":13915,"src":"33775:30:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":13895,"name":"uint256","nodeType":"ElementaryTypeName","src":"33775:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13896,"nodeType":"ArrayTypeName","src":"33775:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":13900,"mutability":"mutable","name":"tokensIn","nameLocation":"33824:8:60","nodeType":"VariableDeclaration","scope":13915,"src":"33807:25:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":13898,"name":"address","nodeType":"ElementaryTypeName","src":"33807:7:60","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":13899,"nodeType":"ArrayTypeName","src":"33807:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":13903,"mutability":"mutable","name":"amountsIn","nameLocation":"33851:9:60","nodeType":"VariableDeclaration","scope":13915,"src":"33834:26:60","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":13901,"name":"uint256","nodeType":"ElementaryTypeName","src":"33834:7:60","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":13902,"nodeType":"ArrayTypeName","src":"33834:9:60","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"33774:87:60"},"scope":13916,"src":"33617:330:60","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":13917,"src":"1782:32167:60","usedErrors":[3031,3034,3640,5901,6355,6872,9886,31059,40188,40469,40474,40477,43238],"usedEvents":[]}],"src":"46:33904:60"},"id":60},"@balancer-labs/v3-vault/contracts/BatchRouterCommon.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/BatchRouterCommon.sol","exportedSymbols":{"AddressToUintMappingSlot":[6860],"BatchRouterCommon":[14207],"IERC20":[40109],"IPermit2":[48578],"IVault":[3111],"IWETH":[291],"RouterCommon":[19198],"TransientEnumerableSet":[10693],"TransientStorageHelpers":[7442]},"id":14208,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":13918,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:61"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":13920,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14208,"sourceUnit":40110,"src":"72:72:61","symbolAliases":[{"foreign":{"id":13919,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"81:6:61","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"permit2/src/interfaces/IPermit2.sol","file":"permit2/src/interfaces/IPermit2.sol","id":13922,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14208,"sourceUnit":48579,"src":"145:63:61","symbolAliases":[{"foreign":{"id":13921,"name":"IPermit2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48578,"src":"154:8:61","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol","id":13924,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14208,"sourceUnit":292,"src":"210:93:61","symbolAliases":[{"foreign":{"id":13923,"name":"IWETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":291,"src":"219:5:61","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":13926,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14208,"sourceUnit":3112,"src":"304:81:61","symbolAliases":[{"foreign":{"id":13925,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"313:6:61","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/TransientEnumerableSet.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/TransientEnumerableSet.sol","id":13928,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14208,"sourceUnit":10694,"src":"387:128:61","symbolAliases":[{"foreign":{"id":13927,"name":"TransientEnumerableSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10693,"src":"400:22:61","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","id":13931,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14208,"sourceUnit":7443,"src":"516:155:61","symbolAliases":[{"foreign":{"id":13929,"name":"TransientStorageHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7442,"src":"529:23:61","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":13930,"name":"AddressToUintMappingSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6860,"src":"558:24:61","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/RouterCommon.sol","file":"./RouterCommon.sol","id":13933,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14208,"sourceUnit":19199,"src":"673:50:61","symbolAliases":[{"foreign":{"id":13932,"name":"RouterCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19198,"src":"682:12:61","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":13935,"name":"RouterCommon","nameLocations":["847:12:61"],"nodeType":"IdentifierPath","referencedDeclaration":19198,"src":"847:12:61"},"id":13936,"nodeType":"InheritanceSpecifier","src":"847:12:61"}],"canonicalName":"BatchRouterCommon","contractDependencies":[],"contractKind":"contract","documentation":{"id":13934,"nodeType":"StructuredDocumentation","src":"725:83:61","text":"@notice Transient storage for Batch and Composite Liquidity Router operations."},"fullyImplemented":true,"id":14207,"linearizedBaseContracts":[14207,19198,7482,273,9942,28149,19328,3041,3025],"name":"BatchRouterCommon","nameLocation":"826:17:61","nodeType":"ContractDefinition","nodes":[{"global":false,"id":13940,"libraryName":{"id":13937,"name":"TransientEnumerableSet","nameLocations":["872:22:61"],"nodeType":"IdentifierPath","referencedDeclaration":10693,"src":"872:22:61"},"nodeType":"UsingForDirective","src":"866:67:61","typeName":{"id":13939,"nodeType":"UserDefinedTypeName","pathNode":{"id":13938,"name":"TransientEnumerableSet.AddressSet","nameLocations":["899:22:61","922:10:61"],"nodeType":"IdentifierPath","referencedDeclaration":10308,"src":"899:33:61"},"referencedDeclaration":10308,"src":"899:33:61","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"}}},{"global":false,"id":13942,"libraryName":{"id":13941,"name":"TransientStorageHelpers","nameLocations":["944:23:61"],"nodeType":"IdentifierPath","referencedDeclaration":7442,"src":"944:23:61"},"nodeType":"UsingForDirective","src":"938:36:61"},{"constant":false,"id":13947,"mutability":"immutable","name":"_CURRENT_SWAP_TOKEN_IN_SLOT","nameLocation":"1392:27:61","nodeType":"VariableDeclaration","scope":14207,"src":"1366:111:61","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13943,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1366:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"63757272656e7453776170546f6b656e73496e","id":13945,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1455:21:61","typeDescriptions":{"typeIdentifier":"t_stringliteral_db38d8b603bf19585ea3ee5b8f4955c49de3e11adf1637055e66a2ff3908e5e7","typeString":"literal_string \"currentSwapTokensIn\""},"value":"currentSwapTokensIn"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_db38d8b603bf19585ea3ee5b8f4955c49de3e11adf1637055e66a2ff3908e5e7","typeString":"literal_string \"currentSwapTokensIn\""}],"id":13944,"name":"_calculateBatchRouterStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14065,"src":"1422:32:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":13946,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1422:55:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":13952,"mutability":"immutable","name":"_CURRENT_SWAP_TOKEN_OUT_SLOT","nameLocation":"1509:28:61","nodeType":"VariableDeclaration","scope":14207,"src":"1483:113:61","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13948,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1483:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"63757272656e7453776170546f6b656e734f7574","id":13950,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1573:22:61","typeDescriptions":{"typeIdentifier":"t_stringliteral_af9549dbf4ea4f1c4c5af3f17082e23f90c1c98c82cdb5df79140b27d0a1a69d","typeString":"literal_string \"currentSwapTokensOut\""},"value":"currentSwapTokensOut"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_af9549dbf4ea4f1c4c5af3f17082e23f90c1c98c82cdb5df79140b27d0a1a69d","typeString":"literal_string \"currentSwapTokensOut\""}],"id":13949,"name":"_calculateBatchRouterStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14065,"src":"1540:32:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":13951,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1540:56:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":13957,"mutability":"immutable","name":"_CURRENT_SWAP_TOKEN_IN_AMOUNTS_SLOT","nameLocation":"1628:35:61","nodeType":"VariableDeclaration","scope":14207,"src":"1602:133:61","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13953,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1602:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"63757272656e7453776170546f6b656e496e416d6f756e7473","id":13955,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1707:27:61","typeDescriptions":{"typeIdentifier":"t_stringliteral_68fd21cec55d1a574719beab8a054fde59037dd6b23de9157da2a19bf190439e","typeString":"literal_string \"currentSwapTokenInAmounts\""},"value":"currentSwapTokenInAmounts"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_68fd21cec55d1a574719beab8a054fde59037dd6b23de9157da2a19bf190439e","typeString":"literal_string \"currentSwapTokenInAmounts\""}],"id":13954,"name":"_calculateBatchRouterStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14065,"src":"1674:32:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":13956,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1674:61:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":13962,"mutability":"immutable","name":"_CURRENT_SWAP_TOKEN_OUT_AMOUNTS_SLOT","nameLocation":"1767:36:61","nodeType":"VariableDeclaration","scope":14207,"src":"1741:135:61","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13958,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1741:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"63757272656e7453776170546f6b656e4f7574416d6f756e7473","id":13960,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1847:28:61","typeDescriptions":{"typeIdentifier":"t_stringliteral_bba6ec86b6f674d3fff51c606a400982d54ca0dc850f3d0363f2ab3b76ae4fd3","typeString":"literal_string \"currentSwapTokenOutAmounts\""},"value":"currentSwapTokenOutAmounts"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_bba6ec86b6f674d3fff51c606a400982d54ca0dc850f3d0363f2ab3b76ae4fd3","typeString":"literal_string \"currentSwapTokenOutAmounts\""}],"id":13959,"name":"_calculateBatchRouterStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14065,"src":"1814:32:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":13961,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1814:62:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":13967,"mutability":"immutable","name":"_SETTLED_TOKEN_AMOUNTS_SLOT","nameLocation":"1908:27:61","nodeType":"VariableDeclaration","scope":14207,"src":"1882:111:61","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13963,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1882:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"736574746c6564546f6b656e416d6f756e7473","id":13965,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1971:21:61","typeDescriptions":{"typeIdentifier":"t_stringliteral_42893b4d5de9e94b21f0f9267cc9c1c0a2eefce3d3ebe62cb9fda0033fe6a721","typeString":"literal_string \"settledTokenAmounts\""},"value":"settledTokenAmounts"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_42893b4d5de9e94b21f0f9267cc9c1c0a2eefce3d3ebe62cb9fda0033fe6a721","typeString":"literal_string \"settledTokenAmounts\""}],"id":13964,"name":"_calculateBatchRouterStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14065,"src":"1938:32:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":13966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1938:55:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"body":{"id":13987,"nodeType":"Block","src":"2257:64:61","statements":[]},"id":13988,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":13981,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13970,"src":"2220:5:61","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},{"id":13982,"name":"weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13973,"src":"2227:4:61","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},{"id":13983,"name":"permit2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13976,"src":"2233:7:61","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"}},{"id":13984,"name":"routerVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13978,"src":"2242:13:61","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":13985,"kind":"baseConstructorSpecifier","modifierName":{"id":13980,"name":"RouterCommon","nameLocations":["2207:12:61"],"nodeType":"IdentifierPath","referencedDeclaration":19198,"src":"2207:12:61"},"nodeType":"ModifierInvocation","src":"2207:49:61"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":13979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13970,"mutability":"mutable","name":"vault","nameLocation":"2112:5:61","nodeType":"VariableDeclaration","scope":13988,"src":"2105:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":13969,"nodeType":"UserDefinedTypeName","pathNode":{"id":13968,"name":"IVault","nameLocations":["2105:6:61"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"2105:6:61"},"referencedDeclaration":3111,"src":"2105:6:61","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":13973,"mutability":"mutable","name":"weth","nameLocation":"2133:4:61","nodeType":"VariableDeclaration","scope":13988,"src":"2127:10:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"},"typeName":{"id":13972,"nodeType":"UserDefinedTypeName","pathNode":{"id":13971,"name":"IWETH","nameLocations":["2127:5:61"],"nodeType":"IdentifierPath","referencedDeclaration":291,"src":"2127:5:61"},"referencedDeclaration":291,"src":"2127:5:61","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},"visibility":"internal"},{"constant":false,"id":13976,"mutability":"mutable","name":"permit2","nameLocation":"2156:7:61","nodeType":"VariableDeclaration","scope":13988,"src":"2147:16:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"},"typeName":{"id":13975,"nodeType":"UserDefinedTypeName","pathNode":{"id":13974,"name":"IPermit2","nameLocations":["2147:8:61"],"nodeType":"IdentifierPath","referencedDeclaration":48578,"src":"2147:8:61"},"referencedDeclaration":48578,"src":"2147:8:61","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"}},"visibility":"internal"},{"constant":false,"id":13978,"mutability":"mutable","name":"routerVersion","nameLocation":"2187:13:61","nodeType":"VariableDeclaration","scope":13988,"src":"2173:27:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":13977,"name":"string","nodeType":"ElementaryTypeName","src":"2173:6:61","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2095:111:61"},"returnParameters":{"id":13986,"nodeType":"ParameterList","parameters":[],"src":"2257:0:61"},"scope":14207,"src":"2084:237:61","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":13999,"nodeType":"Block","src":"2588:143:61","statements":[{"assignments":[13995],"declarations":[{"constant":false,"id":13995,"mutability":"mutable","name":"slot","nameLocation":"2606:4:61","nodeType":"VariableDeclaration","scope":13999,"src":"2598:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":13994,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2598:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":13997,"initialValue":{"id":13996,"name":"_CURRENT_SWAP_TOKEN_IN_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13947,"src":"2613:27:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2598:42:61"},{"AST":{"nativeSrc":"2675:50:61","nodeType":"YulBlock","src":"2675:50:61","statements":[{"nativeSrc":"2689:26:61","nodeType":"YulAssignment","src":"2689:26:61","value":{"name":"slot","nativeSrc":"2711:4:61","nodeType":"YulIdentifier","src":"2711:4:61"},"variableNames":[{"name":"enumerableSet.slot","nativeSrc":"2689:18:61","nodeType":"YulIdentifier","src":"2689:18:61"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":13992,"isOffset":false,"isSlot":true,"src":"2689:18:61","suffix":"slot","valueSize":1},{"declaration":13995,"isOffset":false,"isSlot":false,"src":"2711:4:61","valueSize":1}],"flags":["memory-safe"],"id":13998,"nodeType":"InlineAssembly","src":"2650:75:61"}]},"id":14000,"implemented":true,"kind":"function","modifiers":[],"name":"_currentSwapTokensIn","nameLocation":"2485:20:61","nodeType":"FunctionDefinition","parameters":{"id":13989,"nodeType":"ParameterList","parameters":[],"src":"2505:2:61"},"returnParameters":{"id":13993,"nodeType":"ParameterList","parameters":[{"constant":false,"id":13992,"mutability":"mutable","name":"enumerableSet","nameLocation":"2573:13:61","nodeType":"VariableDeclaration","scope":14000,"src":"2531:55:61","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"},"typeName":{"id":13991,"nodeType":"UserDefinedTypeName","pathNode":{"id":13990,"name":"TransientEnumerableSet.AddressSet","nameLocations":["2531:22:61","2554:10:61"],"nodeType":"IdentifierPath","referencedDeclaration":10308,"src":"2531:33:61"},"referencedDeclaration":10308,"src":"2531:33:61","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"}},"visibility":"internal"}],"src":"2530:57:61"},"scope":14207,"src":"2476:255:61","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":14011,"nodeType":"Block","src":"2850:144:61","statements":[{"assignments":[14007],"declarations":[{"constant":false,"id":14007,"mutability":"mutable","name":"slot","nameLocation":"2868:4:61","nodeType":"VariableDeclaration","scope":14011,"src":"2860:12:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":14006,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2860:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":14009,"initialValue":{"id":14008,"name":"_CURRENT_SWAP_TOKEN_OUT_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13952,"src":"2875:28:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2860:43:61"},{"AST":{"nativeSrc":"2938:50:61","nodeType":"YulBlock","src":"2938:50:61","statements":[{"nativeSrc":"2952:26:61","nodeType":"YulAssignment","src":"2952:26:61","value":{"name":"slot","nativeSrc":"2974:4:61","nodeType":"YulIdentifier","src":"2974:4:61"},"variableNames":[{"name":"enumerableSet.slot","nativeSrc":"2952:18:61","nodeType":"YulIdentifier","src":"2952:18:61"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":14004,"isOffset":false,"isSlot":true,"src":"2952:18:61","suffix":"slot","valueSize":1},{"declaration":14007,"isOffset":false,"isSlot":false,"src":"2974:4:61","valueSize":1}],"flags":["memory-safe"],"id":14010,"nodeType":"InlineAssembly","src":"2913:75:61"}]},"id":14012,"implemented":true,"kind":"function","modifiers":[],"name":"_currentSwapTokensOut","nameLocation":"2746:21:61","nodeType":"FunctionDefinition","parameters":{"id":14001,"nodeType":"ParameterList","parameters":[],"src":"2767:2:61"},"returnParameters":{"id":14005,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14004,"mutability":"mutable","name":"enumerableSet","nameLocation":"2835:13:61","nodeType":"VariableDeclaration","scope":14012,"src":"2793:55:61","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"},"typeName":{"id":14003,"nodeType":"UserDefinedTypeName","pathNode":{"id":14002,"name":"TransientEnumerableSet.AddressSet","nameLocations":["2793:22:61","2816:10:61"],"nodeType":"IdentifierPath","referencedDeclaration":10308,"src":"2793:33:61"},"referencedDeclaration":10308,"src":"2793:33:61","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"}},"visibility":"internal"}],"src":"2792:57:61"},"scope":14207,"src":"2737:257:61","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":14023,"nodeType":"Block","src":"3164:90:61","statements":[{"expression":{"arguments":[{"id":14020,"name":"_CURRENT_SWAP_TOKEN_IN_AMOUNTS_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13957,"src":"3211:35:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":14018,"name":"AddressToUintMappingSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6860,"src":"3181:24:61","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"type(AddressToUintMappingSlot)"}},"id":14019,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3206:4:61","memberName":"wrap","nodeType":"MemberAccess","src":"3181:29:61","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (bytes32) pure returns (AddressToUintMappingSlot)"}},"id":14021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3181:66:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"functionReturnParameters":14017,"id":14022,"nodeType":"Return","src":"3174:73:61"}]},"id":14024,"implemented":true,"kind":"function","modifiers":[],"name":"_currentSwapTokenInAmounts","nameLocation":"3081:26:61","nodeType":"FunctionDefinition","parameters":{"id":14013,"nodeType":"ParameterList","parameters":[],"src":"3107:2:61"},"returnParameters":{"id":14017,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14016,"mutability":"mutable","name":"slot","nameLocation":"3158:4:61","nodeType":"VariableDeclaration","scope":14024,"src":"3133:29:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"},"typeName":{"id":14015,"nodeType":"UserDefinedTypeName","pathNode":{"id":14014,"name":"AddressToUintMappingSlot","nameLocations":["3133:24:61"],"nodeType":"IdentifierPath","referencedDeclaration":6860,"src":"3133:24:61"},"referencedDeclaration":6860,"src":"3133:24:61","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"visibility":"internal"}],"src":"3132:31:61"},"scope":14207,"src":"3072:182:61","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":14035,"nodeType":"Block","src":"3427:91:61","statements":[{"expression":{"arguments":[{"id":14032,"name":"_CURRENT_SWAP_TOKEN_OUT_AMOUNTS_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13962,"src":"3474:36:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":14030,"name":"AddressToUintMappingSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6860,"src":"3444:24:61","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"type(AddressToUintMappingSlot)"}},"id":14031,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3469:4:61","memberName":"wrap","nodeType":"MemberAccess","src":"3444:29:61","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (bytes32) pure returns (AddressToUintMappingSlot)"}},"id":14033,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3444:67:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"functionReturnParameters":14029,"id":14034,"nodeType":"Return","src":"3437:74:61"}]},"id":14036,"implemented":true,"kind":"function","modifiers":[],"name":"_currentSwapTokenOutAmounts","nameLocation":"3343:27:61","nodeType":"FunctionDefinition","parameters":{"id":14025,"nodeType":"ParameterList","parameters":[],"src":"3370:2:61"},"returnParameters":{"id":14029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14028,"mutability":"mutable","name":"slot","nameLocation":"3421:4:61","nodeType":"VariableDeclaration","scope":14036,"src":"3396:29:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"},"typeName":{"id":14027,"nodeType":"UserDefinedTypeName","pathNode":{"id":14026,"name":"AddressToUintMappingSlot","nameLocations":["3396:24:61"],"nodeType":"IdentifierPath","referencedDeclaration":6860,"src":"3396:24:61"},"referencedDeclaration":6860,"src":"3396:24:61","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"visibility":"internal"}],"src":"3395:31:61"},"scope":14207,"src":"3334:184:61","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":14047,"nodeType":"Block","src":"4037:82:61","statements":[{"expression":{"arguments":[{"id":14044,"name":"_SETTLED_TOKEN_AMOUNTS_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13967,"src":"4084:27:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":14042,"name":"AddressToUintMappingSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6860,"src":"4054:24:61","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"type(AddressToUintMappingSlot)"}},"id":14043,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4079:4:61","memberName":"wrap","nodeType":"MemberAccess","src":"4054:29:61","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (bytes32) pure returns (AddressToUintMappingSlot)"}},"id":14045,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4054:58:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"functionReturnParameters":14041,"id":14046,"nodeType":"Return","src":"4047:65:61"}]},"id":14048,"implemented":true,"kind":"function","modifiers":[],"name":"_settledTokenAmounts","nameLocation":"3960:20:61","nodeType":"FunctionDefinition","parameters":{"id":14037,"nodeType":"ParameterList","parameters":[],"src":"3980:2:61"},"returnParameters":{"id":14041,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14040,"mutability":"mutable","name":"slot","nameLocation":"4031:4:61","nodeType":"VariableDeclaration","scope":14048,"src":"4006:29:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"},"typeName":{"id":14039,"nodeType":"UserDefinedTypeName","pathNode":{"id":14038,"name":"AddressToUintMappingSlot","nameLocations":["4006:24:61"],"nodeType":"IdentifierPath","referencedDeclaration":6860,"src":"4006:24:61"},"referencedDeclaration":6860,"src":"4006:24:61","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"visibility":"internal"}],"src":"4005:31:61"},"scope":14207,"src":"3951:168:61","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":14064,"nodeType":"Block","src":"4218:96:61","statements":[{"expression":{"arguments":[{"expression":{"arguments":[{"id":14058,"name":"BatchRouterCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14207,"src":"4278:17:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BatchRouterCommon_$14207_$","typeString":"type(contract BatchRouterCommon)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_BatchRouterCommon_$14207_$","typeString":"type(contract BatchRouterCommon)"}],"id":14057,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4273:4:61","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14059,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4273:23:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_BatchRouterCommon_$14207","typeString":"type(contract BatchRouterCommon)"}},"id":14060,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4297:4:61","memberName":"name","nodeType":"MemberAccess","src":"4273:28:61","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":14061,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14050,"src":"4303:3:61","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":14055,"name":"TransientStorageHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7442,"src":"4235:23:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_TransientStorageHelpers_$7442_$","typeString":"type(library TransientStorageHelpers)"}},"id":14056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4259:13:61","memberName":"calculateSlot","nodeType":"MemberAccess","referencedDeclaration":6911,"src":"4235:37:61","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory,string memory) pure returns (bytes32)"}},"id":14062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4235:72:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":14054,"id":14063,"nodeType":"Return","src":"4228:79:61"}]},"id":14065,"implemented":true,"kind":"function","modifiers":[],"name":"_calculateBatchRouterStorageSlot","nameLocation":"4134:32:61","nodeType":"FunctionDefinition","parameters":{"id":14051,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14050,"mutability":"mutable","name":"key","nameLocation":"4181:3:61","nodeType":"VariableDeclaration","scope":14065,"src":"4167:17:61","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14049,"name":"string","nodeType":"ElementaryTypeName","src":"4167:6:61","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4166:19:61"},"returnParameters":{"id":14054,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14053,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14065,"src":"4209:7:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":14052,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4209:7:61","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4208:9:61"},"scope":14207,"src":"4125:189:61","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":14205,"nodeType":"Block","src":"4706:1773:61","statements":[{"assignments":[14074],"declarations":[{"constant":false,"id":14074,"mutability":"mutable","name":"numTokensIn","nameLocation":"5145:11:61","nodeType":"VariableDeclaration","scope":14205,"src":"5138:18:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":14073,"name":"int256","nodeType":"ElementaryTypeName","src":"5138:6:61","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":14082,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":14077,"name":"_currentSwapTokensIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14000,"src":"5166:20:61","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function () view returns (struct TransientEnumerableSet.AddressSet storage pointer)"}},"id":14078,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5166:22:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}},"id":14079,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5189:6:61","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":10492,"src":"5166:29:61","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$10308_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":14080,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5166:31:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14076,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5159:6:61","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":14075,"name":"int256","nodeType":"ElementaryTypeName","src":"5159:6:61","typeDescriptions":{}}},"id":14081,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5159:39:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5138:60:61"},{"assignments":[14084],"declarations":[{"constant":false,"id":14084,"mutability":"mutable","name":"numTokensOut","nameLocation":"5215:12:61","nodeType":"VariableDeclaration","scope":14205,"src":"5208:19:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":14083,"name":"int256","nodeType":"ElementaryTypeName","src":"5208:6:61","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":14092,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":14087,"name":"_currentSwapTokensOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14012,"src":"5237:21:61","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function () view returns (struct TransientEnumerableSet.AddressSet storage pointer)"}},"id":14088,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5237:23:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}},"id":14089,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5261:6:61","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":10492,"src":"5237:30:61","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$10308_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":14090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5237:32:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14086,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5230:6:61","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":14085,"name":"int256","nodeType":"ElementaryTypeName","src":"5230:6:61","typeDescriptions":{}}},"id":14091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5230:40:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5208:62:61"},{"body":{"id":14145,"nodeType":"Block","src":"5492:416:61","statements":[{"assignments":[14109],"declarations":[{"constant":false,"id":14109,"mutability":"mutable","name":"tokenIn","nameLocation":"5514:7:61","nodeType":"VariableDeclaration","scope":14145,"src":"5506:15:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14108,"name":"address","nodeType":"ElementaryTypeName","src":"5506:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":14118,"initialValue":{"arguments":[{"arguments":[{"id":14115,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14094,"src":"5568:1:61","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":14114,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5560:7:61","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":14113,"name":"uint256","nodeType":"ElementaryTypeName","src":"5560:7:61","typeDescriptions":{}}},"id":14116,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5560:10:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":14110,"name":"_currentSwapTokensIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14000,"src":"5524:20:61","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function () view returns (struct TransientEnumerableSet.AddressSet storage pointer)"}},"id":14111,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5524:22:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}},"id":14112,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5547:12:61","memberName":"unchecked_at","nodeType":"MemberAccess","referencedDeclaration":10540,"src":"5524:35:61","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$10308_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":14117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5524:47:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5506:65:61"},{"expression":{"arguments":[{"id":14120,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14068,"src":"5598:6:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":14122,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14109,"src":"5613:7:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14121,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"5606:6:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":14123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5606:15:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"arguments":[{"id":14127,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14109,"src":"5657:7:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":14124,"name":"_currentSwapTokenInAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14024,"src":"5623:26:61","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function () view returns (AddressToUintMappingSlot)"}},"id":14125,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5623:28:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":14126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5652:4:61","memberName":"tGet","nodeType":"MemberAccess","referencedDeclaration":6990,"src":"5623:33:61","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address) view returns (uint256)"}},"id":14128,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5623:42:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14129,"name":"wethIsEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14070,"src":"5667:9:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":14119,"name":"_takeTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19083,"src":"5585:12:61","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$40109_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,contract IERC20,uint256,bool)"}},"id":14130,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5585:92:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14131,"nodeType":"ExpressionStatement","src":"5585:92:61"},{"expression":{"arguments":[{"id":14135,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14109,"src":"5834:7:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":14136,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5843:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":14132,"name":"_currentSwapTokenInAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14024,"src":"5800:26:61","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function () view returns (AddressToUintMappingSlot)"}},"id":14133,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5800:28:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":14134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5829:4:61","memberName":"tSet","nodeType":"MemberAccess","referencedDeclaration":7015,"src":"5800:33:61","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address,uint256)"}},"id":14137,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5800:45:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14138,"nodeType":"ExpressionStatement","src":"5800:45:61"},{"expression":{"arguments":[{"id":14142,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14109,"src":"5889:7:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":14139,"name":"_currentSwapTokensIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14000,"src":"5859:20:61","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function () view returns (struct TransientEnumerableSet.AddressSet storage pointer)"}},"id":14140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5859:22:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}},"id":14141,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5882:6:61","memberName":"remove","nodeType":"MemberAccess","referencedDeclaration":10455,"src":"5859:29:61","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$10308_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":14143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5859:38:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14144,"nodeType":"ExpressionStatement","src":"5859:38:61"}]},"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":14104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14102,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14094,"src":"5479:1:61","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"30","id":14103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5484:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5479:6:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14146,"initializationExpression":{"assignments":[14094],"declarations":[{"constant":false,"id":14094,"mutability":"mutable","name":"i","nameLocation":"5450:1:61","nodeType":"VariableDeclaration","scope":14146,"src":"5443:8:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":14093,"name":"int256","nodeType":"ElementaryTypeName","src":"5443:6:61","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":14101,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":14099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14097,"name":"numTokensIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14074,"src":"5461:11:61","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":14098,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5475:1:61","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5461:15:61","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":14096,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5454:6:61","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":14095,"name":"int256","nodeType":"ElementaryTypeName","src":"5454:6:61","typeDescriptions":{}}},"id":14100,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5454:23:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5443:34:61"},"isSimpleCounterLoop":false,"loopExpression":{"expression":{"id":14106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":true,"src":"5487:3:61","subExpression":{"id":14105,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14094,"src":"5489:1:61","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":14107,"nodeType":"ExpressionStatement","src":"5487:3:61"},"nodeType":"ForStatement","src":"5438:470:61"},{"body":{"id":14199,"nodeType":"Block","src":"5973:426:61","statements":[{"assignments":[14163],"declarations":[{"constant":false,"id":14163,"mutability":"mutable","name":"tokenOut","nameLocation":"5995:8:61","nodeType":"VariableDeclaration","scope":14199,"src":"5987:16:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14162,"name":"address","nodeType":"ElementaryTypeName","src":"5987:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":14172,"initialValue":{"arguments":[{"arguments":[{"id":14169,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14148,"src":"6051:1:61","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":14168,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6043:7:61","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":14167,"name":"uint256","nodeType":"ElementaryTypeName","src":"6043:7:61","typeDescriptions":{}}},"id":14170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6043:10:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":14164,"name":"_currentSwapTokensOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14012,"src":"6006:21:61","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function () view returns (struct TransientEnumerableSet.AddressSet storage pointer)"}},"id":14165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6006:23:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}},"id":14166,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6030:12:61","memberName":"unchecked_at","nodeType":"MemberAccess","referencedDeclaration":10540,"src":"6006:36:61","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$10308_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":14171,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6006:48:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5987:67:61"},{"expression":{"arguments":[{"id":14174,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14068,"src":"6082:6:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":14176,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14163,"src":"6097:8:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14175,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"6090:6:61","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":14177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6090:16:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"arguments":[{"id":14181,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14163,"src":"6143:8:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":14178,"name":"_currentSwapTokenOutAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14036,"src":"6108:27:61","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function () view returns (AddressToUintMappingSlot)"}},"id":14179,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6108:29:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":14180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6138:4:61","memberName":"tGet","nodeType":"MemberAccess","referencedDeclaration":6990,"src":"6108:34:61","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address) view returns (uint256)"}},"id":14182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6108:44:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14183,"name":"wethIsEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14070,"src":"6154:9:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":14173,"name":"_sendTokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19126,"src":"6068:13:61","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$40109_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,contract IERC20,uint256,bool)"}},"id":14184,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6068:96:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14185,"nodeType":"ExpressionStatement","src":"6068:96:61"},{"expression":{"arguments":[{"id":14189,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14163,"src":"6322:8:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":14190,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6332:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":14186,"name":"_currentSwapTokenOutAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14036,"src":"6287:27:61","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function () view returns (AddressToUintMappingSlot)"}},"id":14187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6287:29:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"id":14188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6317:4:61","memberName":"tSet","nodeType":"MemberAccess","referencedDeclaration":7015,"src":"6287:34:61","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$_t_address_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function (AddressToUintMappingSlot,address,uint256)"}},"id":14191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6287:47:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14192,"nodeType":"ExpressionStatement","src":"6287:47:61"},{"expression":{"arguments":[{"id":14196,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14163,"src":"6379:8:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":14193,"name":"_currentSwapTokensOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14012,"src":"6348:21:61","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function () view returns (struct TransientEnumerableSet.AddressSet storage pointer)"}},"id":14194,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6348:23:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}},"id":14195,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6372:6:61","memberName":"remove","nodeType":"MemberAccess","referencedDeclaration":10455,"src":"6348:30:61","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$10308_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function (struct TransientEnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":14197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6348:40:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14198,"nodeType":"ExpressionStatement","src":"6348:40:61"}]},"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":14158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14156,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14148,"src":"5960:1:61","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"30","id":14157,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5965:1:61","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5960:6:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14200,"initializationExpression":{"assignments":[14148],"declarations":[{"constant":false,"id":14148,"mutability":"mutable","name":"i","nameLocation":"5930:1:61","nodeType":"VariableDeclaration","scope":14200,"src":"5923:8:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":14147,"name":"int256","nodeType":"ElementaryTypeName","src":"5923:6:61","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":14155,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":14153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14151,"name":"numTokensOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14084,"src":"5941:12:61","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":14152,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5956:1:61","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5941:16:61","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":14150,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5934:6:61","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":14149,"name":"int256","nodeType":"ElementaryTypeName","src":"5934:6:61","typeDescriptions":{}}},"id":14154,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5934:24:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"5923:35:61"},"isSimpleCounterLoop":false,"loopExpression":{"expression":{"id":14160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":true,"src":"5968:3:61","subExpression":{"id":14159,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14148,"src":"5970:1:61","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":14161,"nodeType":"ExpressionStatement","src":"5968:3:61"},"nodeType":"ForStatement","src":"5918:481:61"},{"expression":{"arguments":[{"id":14202,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14068,"src":"6465:6:61","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14201,"name":"_returnEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18982,"src":"6454:10:61","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":14203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6454:18:61","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14204,"nodeType":"ExpressionStatement","src":"6454:18:61"}]},"documentation":{"id":14066,"nodeType":"StructuredDocumentation","src":"4538:100:61","text":"@notice Settles batch and composite liquidity operations, after credits and debits are computed."},"id":14206,"implemented":true,"kind":"function","modifiers":[],"name":"_settlePaths","nameLocation":"4652:12:61","nodeType":"FunctionDefinition","parameters":{"id":14071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14068,"mutability":"mutable","name":"sender","nameLocation":"4673:6:61","nodeType":"VariableDeclaration","scope":14206,"src":"4665:14:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14067,"name":"address","nodeType":"ElementaryTypeName","src":"4665:7:61","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14070,"mutability":"mutable","name":"wethIsEth","nameLocation":"4686:9:61","nodeType":"VariableDeclaration","scope":14206,"src":"4681:14:61","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14069,"name":"bool","nodeType":"ElementaryTypeName","src":"4681:4:61","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4664:32:61"},"returnParameters":{"id":14072,"nodeType":"ParameterList","parameters":[],"src":"4706:0:61"},"scope":14207,"src":"4643:1836:61","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":14208,"src":"808:5673:61","usedErrors":[3031,3034,5901,6355,9886,40469,40474,40477],"usedEvents":[]}],"src":"46:6436:61"},"id":61},"@balancer-labs/v3-vault/contracts/BufferRouter.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/BufferRouter.sol","exportedSymbols":{"AddLiquidityKind":[4807],"AddLiquidityParams":[4823],"Address":[40714],"AfterSwapParams":[4801],"BufferRouter":[14662],"BufferWrapOrUnwrapParams":[4862],"FEE_BITLENGTH":[4865],"FEE_SCALING_FACTOR":[4868],"HookFlags":[4627],"HooksConfig":[4651],"IBufferRouter":[1816],"IERC20":[40109],"IERC4626":[39833],"IPermit2":[48578],"IRateProvider":[263],"IVault":[3111],"IVaultAdmin":[3401],"IWETH":[291],"LiquidityManagement":[4580],"MAX_FEE_PERCENTAGE":[4871],"PoolConfig":[4605],"PoolConfigBits":[4582],"PoolData":[4729],"PoolRoleAccounts":[4677],"PoolSwapParams":[4772],"RemoveLiquidityKind":[4828],"RemoveLiquidityParams":[4844],"Rounding":[4732],"RouterCommon":[19198],"SwapKind":[4735],"SwapState":[4661],"TokenConfig":[4694],"TokenInfo":[4704],"TokenType":[4681],"VaultState":[4669],"VaultSwapParams":[4754],"WrappingDirection":[4847]},"id":14663,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":14209,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:62"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":14211,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14663,"sourceUnit":39834,"src":"72:75:62","symbolAliases":[{"foreign":{"id":14210,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39833,"src":"81:8:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":14213,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14663,"sourceUnit":40110,"src":"148:72:62","symbolAliases":[{"foreign":{"id":14212,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"157:6:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"@openzeppelin/contracts/utils/Address.sol","id":14215,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14663,"sourceUnit":40715,"src":"221:68:62","symbolAliases":[{"foreign":{"id":14214,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40714,"src":"230:7:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"permit2/src/interfaces/IPermit2.sol","file":"permit2/src/interfaces/IPermit2.sol","id":14217,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14663,"sourceUnit":48579,"src":"290:63:62","symbolAliases":[{"foreign":{"id":14216,"name":"IPermit2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48578,"src":"299:8:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBufferRouter.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IBufferRouter.sol","id":14219,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14663,"sourceUnit":1817,"src":"355:95:62","symbolAliases":[{"foreign":{"id":14218,"name":"IBufferRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1816,"src":"364:13:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol","id":14221,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14663,"sourceUnit":292,"src":"451:93:62","symbolAliases":[{"foreign":{"id":14220,"name":"IWETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":291,"src":"460:5:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","id":14223,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14663,"sourceUnit":3402,"src":"545:91:62","symbolAliases":[{"foreign":{"id":14222,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3401,"src":"554:11:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":14225,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14663,"sourceUnit":3112,"src":"637:81:62","symbolAliases":[{"foreign":{"id":14224,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"646:6:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":14226,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14663,"sourceUnit":4872,"src":"719:69:62","symbolAliases":[],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/RouterCommon.sol","file":"./RouterCommon.sol","id":14228,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":14663,"sourceUnit":19199,"src":"790:50:62","symbolAliases":[{"foreign":{"id":14227,"name":"RouterCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19198,"src":"799:12:62","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":14230,"name":"IBufferRouter","nameLocations":["1176:13:62"],"nodeType":"IdentifierPath","referencedDeclaration":1816,"src":"1176:13:62"},"id":14231,"nodeType":"InheritanceSpecifier","src":"1176:13:62"},{"baseName":{"id":14232,"name":"RouterCommon","nameLocations":["1191:12:62"],"nodeType":"IdentifierPath","referencedDeclaration":19198,"src":"1191:12:62"},"id":14233,"nodeType":"InheritanceSpecifier","src":"1191:12:62"}],"canonicalName":"BufferRouter","contractDependencies":[],"contractKind":"contract","documentation":{"id":14229,"nodeType":"StructuredDocumentation","src":"842:308:62","text":" @notice Entrypoint for swaps, liquidity operations, and corresponding queries.\n @dev The external API functions unlock the Vault, which calls back into the corresponding hook functions.\n These interact with the Vault, transfer tokens, settle accounting, and handle wrapping and unwrapping ETH."},"fullyImplemented":true,"id":14662,"linearizedBaseContracts":[14662,19198,7482,273,9942,28149,19328,3041,3025,1816],"name":"BufferRouter","nameLocation":"1160:12:62","nodeType":"ContractDefinition","nodes":[{"global":false,"id":14236,"libraryName":{"id":14234,"name":"Address","nameLocations":["1216:7:62"],"nodeType":"IdentifierPath","referencedDeclaration":40714,"src":"1216:7:62"},"nodeType":"UsingForDirective","src":"1210:26:62","typeName":{"id":14235,"name":"address","nodeType":"ElementaryTypeName","src":"1228:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"body":{"id":14256,"nodeType":"Block","src":"1415:64:62","statements":[]},"id":14257,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":14250,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14239,"src":"1378:5:62","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},{"id":14251,"name":"weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14242,"src":"1385:4:62","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},{"id":14252,"name":"permit2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14245,"src":"1391:7:62","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"}},{"id":14253,"name":"routerVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14247,"src":"1400:13:62","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":14254,"kind":"baseConstructorSpecifier","modifierName":{"id":14249,"name":"RouterCommon","nameLocations":["1365:12:62"],"nodeType":"IdentifierPath","referencedDeclaration":19198,"src":"1365:12:62"},"nodeType":"ModifierInvocation","src":"1365:49:62"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":14248,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14239,"mutability":"mutable","name":"vault","nameLocation":"1270:5:62","nodeType":"VariableDeclaration","scope":14257,"src":"1263:12:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":14238,"nodeType":"UserDefinedTypeName","pathNode":{"id":14237,"name":"IVault","nameLocations":["1263:6:62"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"1263:6:62"},"referencedDeclaration":3111,"src":"1263:6:62","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":14242,"mutability":"mutable","name":"weth","nameLocation":"1291:4:62","nodeType":"VariableDeclaration","scope":14257,"src":"1285:10:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"},"typeName":{"id":14241,"nodeType":"UserDefinedTypeName","pathNode":{"id":14240,"name":"IWETH","nameLocations":["1285:5:62"],"nodeType":"IdentifierPath","referencedDeclaration":291,"src":"1285:5:62"},"referencedDeclaration":291,"src":"1285:5:62","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},"visibility":"internal"},{"constant":false,"id":14245,"mutability":"mutable","name":"permit2","nameLocation":"1314:7:62","nodeType":"VariableDeclaration","scope":14257,"src":"1305:16:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"},"typeName":{"id":14244,"nodeType":"UserDefinedTypeName","pathNode":{"id":14243,"name":"IPermit2","nameLocations":["1305:8:62"],"nodeType":"IdentifierPath","referencedDeclaration":48578,"src":"1305:8:62"},"referencedDeclaration":48578,"src":"1305:8:62","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"}},"visibility":"internal"},{"constant":false,"id":14247,"mutability":"mutable","name":"routerVersion","nameLocation":"1345:13:62","nodeType":"VariableDeclaration","scope":14257,"src":"1331:27:62","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":14246,"name":"string","nodeType":"ElementaryTypeName","src":"1331:6:62","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1253:111:62"},"returnParameters":{"id":14255,"nodeType":"ParameterList","parameters":[],"src":"1415:0:62"},"scope":14662,"src":"1242:237:62","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[1759],"body":{"id":14294,"nodeType":"Block","src":"1955:550:62","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":14278,"name":"BufferRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14662,"src":"2087:12:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BufferRouter_$14662_$","typeString":"type(contract BufferRouter)"}},"id":14279,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2100:20:62","memberName":"initializeBufferHook","nodeType":"MemberAccess","referencedDeclaration":14356,"src":"2087:33:62","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function BufferRouter.initializeBufferHook(contract IERC4626,uint256,uint256,uint256,address) returns (uint256)"}},{"components":[{"id":14280,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14261,"src":"2176:12:62","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":14281,"name":"exactAmountUnderlyingIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14263,"src":"2218:23:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14282,"name":"exactAmountWrappedIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14265,"src":"2271:20:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14283,"name":"minIssuedShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14267,"src":"2321:15:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14284,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2366:3:62","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":14285,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2370:6:62","memberName":"sender","nodeType":"MemberAccess","src":"2366:10:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":14286,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2146:271:62","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$","typeString":"tuple(contract IERC4626,uint256,uint256,uint256,address)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function BufferRouter.initializeBufferHook(contract IERC4626,uint256,uint256,uint256,address) returns (uint256)"},{"typeIdentifier":"t_tuple$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$","typeString":"tuple(contract IERC4626,uint256,uint256,uint256,address)"}],"expression":{"id":14276,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2047:3:62","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":14277,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2051:10:62","memberName":"encodeCall","nodeType":"MemberAccess","src":"2047:14:62","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":14287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2047:392:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":14274,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"2012:6:62","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":14275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2019:6:62","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":4440,"src":"2012:13:62","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":14288,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2012:445:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":14290,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2476:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":14289,"name":"uint256","nodeType":"ElementaryTypeName","src":"2476:7:62","typeDescriptions":{}}}],"id":14291,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"2475:9:62","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":14272,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1984:3:62","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":14273,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1988:6:62","memberName":"decode","nodeType":"MemberAccess","src":"1984:10:62","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":14292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1984:514:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":14271,"id":14293,"nodeType":"Return","src":"1965:533:62"}]},"documentation":{"id":14258,"nodeType":"StructuredDocumentation","src":"1706:29:62","text":"@inheritdoc IBufferRouter"},"functionSelector":"b365a3c2","id":14295,"implemented":true,"kind":"function","modifiers":[],"name":"initializeBuffer","nameLocation":"1749:16:62","nodeType":"FunctionDefinition","parameters":{"id":14268,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14261,"mutability":"mutable","name":"wrappedToken","nameLocation":"1784:12:62","nodeType":"VariableDeclaration","scope":14295,"src":"1775:21:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":14260,"nodeType":"UserDefinedTypeName","pathNode":{"id":14259,"name":"IERC4626","nameLocations":["1775:8:62"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"1775:8:62"},"referencedDeclaration":39833,"src":"1775:8:62","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":14263,"mutability":"mutable","name":"exactAmountUnderlyingIn","nameLocation":"1814:23:62","nodeType":"VariableDeclaration","scope":14295,"src":"1806:31:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14262,"name":"uint256","nodeType":"ElementaryTypeName","src":"1806:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14265,"mutability":"mutable","name":"exactAmountWrappedIn","nameLocation":"1855:20:62","nodeType":"VariableDeclaration","scope":14295,"src":"1847:28:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14264,"name":"uint256","nodeType":"ElementaryTypeName","src":"1847:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14267,"mutability":"mutable","name":"minIssuedShares","nameLocation":"1893:15:62","nodeType":"VariableDeclaration","scope":14295,"src":"1885:23:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14266,"name":"uint256","nodeType":"ElementaryTypeName","src":"1885:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1765:149:62"},"returnParameters":{"id":14271,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14270,"mutability":"mutable","name":"issuedShares","nameLocation":"1941:12:62","nodeType":"VariableDeclaration","scope":14295,"src":"1933:20:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14269,"name":"uint256","nodeType":"ElementaryTypeName","src":"1933:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1932:22:62"},"scope":14662,"src":"1740:765:62","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":14355,"nodeType":"Block","src":"3645:462:62","statements":[{"expression":{"id":14325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14316,"name":"issuedShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14314,"src":"3655:12:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":14319,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14299,"src":"3707:12:62","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":14320,"name":"exactAmountUnderlyingIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14301,"src":"3733:23:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14321,"name":"exactAmountWrappedIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14303,"src":"3770:20:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14322,"name":"minIssuedShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14305,"src":"3804:15:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14323,"name":"sharesOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14307,"src":"3833:11:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14317,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"3670:6:62","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":14318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3677:16:62","memberName":"initializeBuffer","nodeType":"MemberAccess","referencedDeclaration":3317,"src":"3670:23:62","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (contract IERC4626,uint256,uint256,uint256,address) external returns (uint256)"}},"id":14324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3670:184:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3655:199:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14326,"nodeType":"ExpressionStatement","src":"3655:199:62"},{"assignments":[14328],"declarations":[{"constant":false,"id":14328,"mutability":"mutable","name":"asset","nameLocation":"3873:5:62","nodeType":"VariableDeclaration","scope":14355,"src":"3865:13:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14327,"name":"address","nodeType":"ElementaryTypeName","src":"3865:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":14333,"initialValue":{"arguments":[{"id":14331,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14299,"src":"3910:12:62","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}],"expression":{"id":14329,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"3881:6:62","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":14330,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3888:21:62","memberName":"getERC4626BufferAsset","nodeType":"MemberAccess","referencedDeclaration":4303,"src":"3881:28:62","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_contract$_IERC4626_$39833_$returns$_t_address_$","typeString":"function (contract IERC4626) view external returns (address)"}},"id":14332,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3881:42:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3865:58:62"},{"expression":{"arguments":[{"id":14335,"name":"sharesOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14307,"src":"3946:11:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":14337,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14328,"src":"3966:5:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14336,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"3959:6:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":14338,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3959:13:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":14339,"name":"exactAmountUnderlyingIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14301,"src":"3974:23:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":14340,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3999:5:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":14334,"name":"_takeTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19083,"src":"3933:12:62","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$40109_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,contract IERC20,uint256,bool)"}},"id":14341,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3933:72:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14342,"nodeType":"ExpressionStatement","src":"3933:72:62"},{"expression":{"arguments":[{"id":14344,"name":"sharesOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14307,"src":"4028:11:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":14348,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14299,"src":"4056:12:62","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}],"id":14347,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4048:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14346,"name":"address","nodeType":"ElementaryTypeName","src":"4048:7:62","typeDescriptions":{}}},"id":14349,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4048:21:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14345,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"4041:6:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":14350,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4041:29:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":14351,"name":"exactAmountWrappedIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14303,"src":"4072:20:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":14352,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4094:5:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":14343,"name":"_takeTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19083,"src":"4015:12:62","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$40109_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,contract IERC20,uint256,bool)"}},"id":14353,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4015:85:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14354,"nodeType":"ExpressionStatement","src":"4015:85:62"}]},"documentation":{"id":14296,"nodeType":"StructuredDocumentation","src":"2511:858:62","text":" @notice Hook for initializing a vault buffer.\n @dev Can only be called by the Vault. Buffers must be initialized before use.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param exactAmountUnderlyingIn Amount of underlying tokens that will be deposited into the buffer\n @param exactAmountWrappedIn Amount of wrapped tokens that will be deposited into the buffer\n @param minIssuedShares Minimum amount of shares to receive, in underlying token native decimals\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to\n remove liquidity from the buffer\n @return issuedShares the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts.\n (This is the BPT of an internal ERC4626 buffer)"},"functionSelector":"d9f70869","id":14356,"implemented":true,"kind":"function","modifiers":[{"id":14310,"kind":"modifierInvocation","modifierName":{"id":14309,"name":"nonReentrant","nameLocations":["3591:12:62"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"3591:12:62"},"nodeType":"ModifierInvocation","src":"3591:12:62"},{"id":14312,"kind":"modifierInvocation","modifierName":{"id":14311,"name":"onlyVault","nameLocations":["3604:9:62"],"nodeType":"IdentifierPath","referencedDeclaration":28128,"src":"3604:9:62"},"nodeType":"ModifierInvocation","src":"3604:9:62"}],"name":"initializeBufferHook","nameLocation":"3383:20:62","nodeType":"FunctionDefinition","parameters":{"id":14308,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14299,"mutability":"mutable","name":"wrappedToken","nameLocation":"3422:12:62","nodeType":"VariableDeclaration","scope":14356,"src":"3413:21:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":14298,"nodeType":"UserDefinedTypeName","pathNode":{"id":14297,"name":"IERC4626","nameLocations":["3413:8:62"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"3413:8:62"},"referencedDeclaration":39833,"src":"3413:8:62","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":14301,"mutability":"mutable","name":"exactAmountUnderlyingIn","nameLocation":"3452:23:62","nodeType":"VariableDeclaration","scope":14356,"src":"3444:31:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14300,"name":"uint256","nodeType":"ElementaryTypeName","src":"3444:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14303,"mutability":"mutable","name":"exactAmountWrappedIn","nameLocation":"3493:20:62","nodeType":"VariableDeclaration","scope":14356,"src":"3485:28:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14302,"name":"uint256","nodeType":"ElementaryTypeName","src":"3485:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14305,"mutability":"mutable","name":"minIssuedShares","nameLocation":"3531:15:62","nodeType":"VariableDeclaration","scope":14356,"src":"3523:23:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14304,"name":"uint256","nodeType":"ElementaryTypeName","src":"3523:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14307,"mutability":"mutable","name":"sharesOwner","nameLocation":"3564:11:62","nodeType":"VariableDeclaration","scope":14356,"src":"3556:19:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14306,"name":"address","nodeType":"ElementaryTypeName","src":"3556:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3403:178:62"},"returnParameters":{"id":14315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14314,"mutability":"mutable","name":"issuedShares","nameLocation":"3631:12:62","nodeType":"VariableDeclaration","scope":14356,"src":"3623:20:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14313,"name":"uint256","nodeType":"ElementaryTypeName","src":"3623:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3622:22:62"},"scope":14662,"src":"3374:733:62","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1776],"body":{"id":14397,"nodeType":"Block","src":"4396:562:62","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":14379,"name":"BufferRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14662,"src":"4528:12:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BufferRouter_$14662_$","typeString":"type(contract BufferRouter)"}},"id":14380,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4541:24:62","memberName":"addLiquidityToBufferHook","nodeType":"MemberAccess","referencedDeclaration":14463,"src":"4528:37:62","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$returns$_t_uint256_$_t_uint256_$","typeString":"function BufferRouter.addLiquidityToBufferHook(contract IERC4626,uint256,uint256,uint256,address) returns (uint256,uint256)"}},{"components":[{"id":14381,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14360,"src":"4621:12:62","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":14382,"name":"maxAmountUnderlyingIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14362,"src":"4663:21:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14383,"name":"maxAmountWrappedIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14364,"src":"4714:18:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14384,"name":"exactSharesToIssue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14366,"src":"4762:18:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":14385,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4810:3:62","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":14386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4814:6:62","memberName":"sender","nodeType":"MemberAccess","src":"4810:10:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":14387,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4591:270:62","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$","typeString":"tuple(contract IERC4626,uint256,uint256,uint256,address)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$returns$_t_uint256_$_t_uint256_$","typeString":"function BufferRouter.addLiquidityToBufferHook(contract IERC4626,uint256,uint256,uint256,address) returns (uint256,uint256)"},{"typeIdentifier":"t_tuple$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$","typeString":"tuple(contract IERC4626,uint256,uint256,uint256,address)"}],"expression":{"id":14377,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4488:3:62","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":14378,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4492:10:62","memberName":"encodeCall","nodeType":"MemberAccess","src":"4488:14:62","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":14388,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4488:395:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":14375,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"4453:6:62","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":14376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4460:6:62","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":4440,"src":"4453:13:62","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":14389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4453:448:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":14391,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4920:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":14390,"name":"uint256","nodeType":"ElementaryTypeName","src":"4920:7:62","typeDescriptions":{}}},{"id":14393,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4929:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":14392,"name":"uint256","nodeType":"ElementaryTypeName","src":"4929:7:62","typeDescriptions":{}}}],"id":14394,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"4919:18:62","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$","typeString":"tuple(type(uint256),type(uint256))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$","typeString":"tuple(type(uint256),type(uint256))"}],"expression":{"id":14373,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4425:3:62","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":14374,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4429:6:62","memberName":"decode","nodeType":"MemberAccess","src":"4425:10:62","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":14395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4425:526:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":14372,"id":14396,"nodeType":"Return","src":"4406:545:62"}]},"documentation":{"id":14357,"nodeType":"StructuredDocumentation","src":"4113:29:62","text":"@inheritdoc IBufferRouter"},"functionSelector":"502383f4","id":14398,"implemented":true,"kind":"function","modifiers":[],"name":"addLiquidityToBuffer","nameLocation":"4156:20:62","nodeType":"FunctionDefinition","parameters":{"id":14367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14360,"mutability":"mutable","name":"wrappedToken","nameLocation":"4195:12:62","nodeType":"VariableDeclaration","scope":14398,"src":"4186:21:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":14359,"nodeType":"UserDefinedTypeName","pathNode":{"id":14358,"name":"IERC4626","nameLocations":["4186:8:62"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"4186:8:62"},"referencedDeclaration":39833,"src":"4186:8:62","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":14362,"mutability":"mutable","name":"maxAmountUnderlyingIn","nameLocation":"4225:21:62","nodeType":"VariableDeclaration","scope":14398,"src":"4217:29:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14361,"name":"uint256","nodeType":"ElementaryTypeName","src":"4217:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14364,"mutability":"mutable","name":"maxAmountWrappedIn","nameLocation":"4264:18:62","nodeType":"VariableDeclaration","scope":14398,"src":"4256:26:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14363,"name":"uint256","nodeType":"ElementaryTypeName","src":"4256:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14366,"mutability":"mutable","name":"exactSharesToIssue","nameLocation":"4300:18:62","nodeType":"VariableDeclaration","scope":14398,"src":"4292:26:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14365,"name":"uint256","nodeType":"ElementaryTypeName","src":"4292:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4176:148:62"},"returnParameters":{"id":14372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14369,"mutability":"mutable","name":"amountUnderlyingIn","nameLocation":"4351:18:62","nodeType":"VariableDeclaration","scope":14398,"src":"4343:26:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14368,"name":"uint256","nodeType":"ElementaryTypeName","src":"4343:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14371,"mutability":"mutable","name":"amountWrappedIn","nameLocation":"4379:15:62","nodeType":"VariableDeclaration","scope":14398,"src":"4371:23:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14370,"name":"uint256","nodeType":"ElementaryTypeName","src":"4371:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4342:53:62"},"scope":14662,"src":"4147:811:62","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":14462,"nodeType":"Block","src":"6286:480:62","statements":[{"expression":{"id":14432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":14421,"name":"amountUnderlyingIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14417,"src":"6297:18:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14422,"name":"amountWrappedIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14419,"src":"6317:15:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14423,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"6296:37:62","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":14426,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14402,"src":"6377:12:62","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":14427,"name":"maxAmountUnderlyingIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14404,"src":"6403:21:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14428,"name":"maxAmountWrappedIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14406,"src":"6438:18:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14429,"name":"exactSharesToIssue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14408,"src":"6470:18:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14430,"name":"sharesOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14410,"src":"6502:11:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14424,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"6336:6:62","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":14425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6343:20:62","memberName":"addLiquidityToBuffer","nodeType":"MemberAccess","referencedDeclaration":3336,"src":"6336:27:62","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$returns$_t_uint256_$_t_uint256_$","typeString":"function (contract IERC4626,uint256,uint256,uint256,address) external returns (uint256,uint256)"}},"id":14431,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6336:187:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"6296:227:62","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14433,"nodeType":"ExpressionStatement","src":"6296:227:62"},{"assignments":[14435],"declarations":[{"constant":false,"id":14435,"mutability":"mutable","name":"asset","nameLocation":"6542:5:62","nodeType":"VariableDeclaration","scope":14462,"src":"6534:13:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14434,"name":"address","nodeType":"ElementaryTypeName","src":"6534:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":14440,"initialValue":{"arguments":[{"id":14438,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14402,"src":"6579:12:62","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}],"expression":{"id":14436,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"6550:6:62","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":14437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6557:21:62","memberName":"getERC4626BufferAsset","nodeType":"MemberAccess","referencedDeclaration":4303,"src":"6550:28:62","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_contract$_IERC4626_$39833_$returns$_t_address_$","typeString":"function (contract IERC4626) view external returns (address)"}},"id":14439,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6550:42:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"6534:58:62"},{"expression":{"arguments":[{"id":14442,"name":"sharesOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14410,"src":"6615:11:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":14444,"name":"asset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14435,"src":"6635:5:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14443,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"6628:6:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":14445,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6628:13:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":14446,"name":"amountUnderlyingIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14417,"src":"6643:18:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":14447,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6663:5:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":14441,"name":"_takeTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19083,"src":"6602:12:62","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$40109_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,contract IERC20,uint256,bool)"}},"id":14448,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6602:67:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14449,"nodeType":"ExpressionStatement","src":"6602:67:62"},{"expression":{"arguments":[{"id":14451,"name":"sharesOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14410,"src":"6692:11:62","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"arguments":[{"id":14455,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14402,"src":"6720:12:62","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}],"id":14454,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6712:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14453,"name":"address","nodeType":"ElementaryTypeName","src":"6712:7:62","typeDescriptions":{}}},"id":14456,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6712:21:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14452,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"6705:6:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":14457,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6705:29:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":14458,"name":"amountWrappedIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14419,"src":"6736:15:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":14459,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6753:5:62","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":14450,"name":"_takeTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19083,"src":"6679:12:62","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$40109_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,contract IERC20,uint256,bool)"}},"id":14460,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6679:80:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14461,"nodeType":"ExpressionStatement","src":"6679:80:62"}]},"documentation":{"id":14399,"nodeType":"StructuredDocumentation","src":"4964:1012:62","text":" @notice Hook for adding liquidity to vault buffers. The Vault will enforce that the buffer is initialized.\n @dev Can only be called by the Vault.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param maxAmountUnderlyingIn Maximum amount of underlying tokens to add to the buffer. It is expressed in\n underlying token native decimals\n @param maxAmountWrappedIn Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped\n token native decimals\n @param exactSharesToIssue The value in underlying tokens that `sharesOwner` wants to add to the buffer,\n in underlying token decimals\n @param sharesOwner Address that will own the deposited liquidity. Only this address will be able to\n remove liquidity from the buffer\n @return amountUnderlyingIn Amount of underlying tokens deposited into the buffer\n @return amountWrappedIn Amount of wrapped tokens deposited into the buffer"},"functionSelector":"4fe56ed6","id":14463,"implemented":true,"kind":"function","modifiers":[{"id":14413,"kind":"modifierInvocation","modifierName":{"id":14412,"name":"nonReentrant","nameLocations":["6201:12:62"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"6201:12:62"},"nodeType":"ModifierInvocation","src":"6201:12:62"},{"id":14415,"kind":"modifierInvocation","modifierName":{"id":14414,"name":"onlyVault","nameLocations":["6214:9:62"],"nodeType":"IdentifierPath","referencedDeclaration":28128,"src":"6214:9:62"},"nodeType":"ModifierInvocation","src":"6214:9:62"}],"name":"addLiquidityToBufferHook","nameLocation":"5990:24:62","nodeType":"FunctionDefinition","parameters":{"id":14411,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14402,"mutability":"mutable","name":"wrappedToken","nameLocation":"6033:12:62","nodeType":"VariableDeclaration","scope":14463,"src":"6024:21:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":14401,"nodeType":"UserDefinedTypeName","pathNode":{"id":14400,"name":"IERC4626","nameLocations":["6024:8:62"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"6024:8:62"},"referencedDeclaration":39833,"src":"6024:8:62","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":14404,"mutability":"mutable","name":"maxAmountUnderlyingIn","nameLocation":"6063:21:62","nodeType":"VariableDeclaration","scope":14463,"src":"6055:29:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14403,"name":"uint256","nodeType":"ElementaryTypeName","src":"6055:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14406,"mutability":"mutable","name":"maxAmountWrappedIn","nameLocation":"6102:18:62","nodeType":"VariableDeclaration","scope":14463,"src":"6094:26:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14405,"name":"uint256","nodeType":"ElementaryTypeName","src":"6094:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14408,"mutability":"mutable","name":"exactSharesToIssue","nameLocation":"6138:18:62","nodeType":"VariableDeclaration","scope":14463,"src":"6130:26:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14407,"name":"uint256","nodeType":"ElementaryTypeName","src":"6130:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14410,"mutability":"mutable","name":"sharesOwner","nameLocation":"6174:11:62","nodeType":"VariableDeclaration","scope":14463,"src":"6166:19:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14409,"name":"address","nodeType":"ElementaryTypeName","src":"6166:7:62","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6014:177:62"},"returnParameters":{"id":14420,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14417,"mutability":"mutable","name":"amountUnderlyingIn","nameLocation":"6241:18:62","nodeType":"VariableDeclaration","scope":14463,"src":"6233:26:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14416,"name":"uint256","nodeType":"ElementaryTypeName","src":"6233:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14419,"mutability":"mutable","name":"amountWrappedIn","nameLocation":"6269:15:62","nodeType":"VariableDeclaration","scope":14463,"src":"6261:23:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14418,"name":"uint256","nodeType":"ElementaryTypeName","src":"6261:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6232:53:62"},"scope":14662,"src":"5981:785:62","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1789],"body":{"id":14495,"nodeType":"Block","src":"6993:344:62","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":14482,"name":"BufferRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14662,"src":"7124:12:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BufferRouter_$14662_$","typeString":"type(contract BufferRouter)"}},"id":14483,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7137:25:62","memberName":"queryInitializeBufferHook","nodeType":"MemberAccess","referencedDeclaration":14527,"src":"7124:38:62","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function BufferRouter.queryInitializeBufferHook(contract IERC4626,uint256,uint256) returns (uint256)"}},{"components":[{"id":14484,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14467,"src":"7189:12:62","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":14485,"name":"exactAmountUnderlyingIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14469,"src":"7203:23:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14486,"name":"exactAmountWrappedIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14471,"src":"7228:20:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14487,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7188:61:62","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$","typeString":"tuple(contract IERC4626,uint256,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function BufferRouter.queryInitializeBufferHook(contract IERC4626,uint256,uint256) returns (uint256)"},{"typeIdentifier":"t_tuple$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$","typeString":"tuple(contract IERC4626,uint256,uint256)"}],"expression":{"id":14480,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"7084:3:62","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":14481,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7088:10:62","memberName":"encodeCall","nodeType":"MemberAccess","src":"7084:14:62","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":14488,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7084:187:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":14478,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"7050:6:62","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":14479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7057:5:62","memberName":"quote","nodeType":"MemberAccess","referencedDeclaration":4392,"src":"7050:12:62","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":14489,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7050:239:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":14491,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7308:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":14490,"name":"uint256","nodeType":"ElementaryTypeName","src":"7308:7:62","typeDescriptions":{}}}],"id":14492,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"7307:9:62","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":14476,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"7022:3:62","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":14477,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7026:6:62","memberName":"decode","nodeType":"MemberAccess","src":"7022:10:62","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":14493,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7022:308:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":14475,"id":14494,"nodeType":"Return","src":"7003:327:62"}]},"documentation":{"id":14464,"nodeType":"StructuredDocumentation","src":"6772:29:62","text":"@inheritdoc IBufferRouter"},"functionSelector":"e0fefe35","id":14496,"implemented":true,"kind":"function","modifiers":[],"name":"queryInitializeBuffer","nameLocation":"6815:21:62","nodeType":"FunctionDefinition","parameters":{"id":14472,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14467,"mutability":"mutable","name":"wrappedToken","nameLocation":"6855:12:62","nodeType":"VariableDeclaration","scope":14496,"src":"6846:21:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":14466,"nodeType":"UserDefinedTypeName","pathNode":{"id":14465,"name":"IERC4626","nameLocations":["6846:8:62"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"6846:8:62"},"referencedDeclaration":39833,"src":"6846:8:62","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":14469,"mutability":"mutable","name":"exactAmountUnderlyingIn","nameLocation":"6885:23:62","nodeType":"VariableDeclaration","scope":14496,"src":"6877:31:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14468,"name":"uint256","nodeType":"ElementaryTypeName","src":"6877:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14471,"mutability":"mutable","name":"exactAmountWrappedIn","nameLocation":"6926:20:62","nodeType":"VariableDeclaration","scope":14496,"src":"6918:28:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14470,"name":"uint256","nodeType":"ElementaryTypeName","src":"6918:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6836:116:62"},"returnParameters":{"id":14475,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14474,"mutability":"mutable","name":"issuedShares","nameLocation":"6979:12:62","nodeType":"VariableDeclaration","scope":14496,"src":"6971:20:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14473,"name":"uint256","nodeType":"ElementaryTypeName","src":"6971:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6970:22:62"},"scope":14662,"src":"6806:531:62","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":14526,"nodeType":"Block","src":"7557:204:62","statements":[{"expression":{"id":14524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14512,"name":"issuedShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14510,"src":"7567:12:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":14515,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14499,"src":"7619:12:62","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":14516,"name":"exactAmountUnderlyingIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14501,"src":"7645:23:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14517,"name":"exactAmountWrappedIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14503,"src":"7682:20:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":14518,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7716:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"arguments":[{"id":14521,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7739:4:62","typeDescriptions":{"typeIdentifier":"t_contract$_BufferRouter_$14662","typeString":"contract BufferRouter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BufferRouter_$14662","typeString":"contract BufferRouter"}],"id":14520,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7731:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14519,"name":"address","nodeType":"ElementaryTypeName","src":"7731:7:62","typeDescriptions":{}}},"id":14522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7731:13:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14513,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"7582:6:62","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":14514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7589:16:62","memberName":"initializeBuffer","nodeType":"MemberAccess","referencedDeclaration":3317,"src":"7582:23:62","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (contract IERC4626,uint256,uint256,uint256,address) external returns (uint256)"}},"id":14523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7582:172:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7567:187:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14525,"nodeType":"ExpressionStatement","src":"7567:187:62"}]},"functionSelector":"a3902604","id":14527,"implemented":true,"kind":"function","modifiers":[{"id":14506,"kind":"modifierInvocation","modifierName":{"id":14505,"name":"nonReentrant","nameLocations":["7503:12:62"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"7503:12:62"},"nodeType":"ModifierInvocation","src":"7503:12:62"},{"id":14508,"kind":"modifierInvocation","modifierName":{"id":14507,"name":"onlyVault","nameLocations":["7516:9:62"],"nodeType":"IdentifierPath","referencedDeclaration":28128,"src":"7516:9:62"},"nodeType":"ModifierInvocation","src":"7516:9:62"}],"name":"queryInitializeBufferHook","nameLocation":"7352:25:62","nodeType":"FunctionDefinition","parameters":{"id":14504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14499,"mutability":"mutable","name":"wrappedToken","nameLocation":"7396:12:62","nodeType":"VariableDeclaration","scope":14527,"src":"7387:21:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":14498,"nodeType":"UserDefinedTypeName","pathNode":{"id":14497,"name":"IERC4626","nameLocations":["7387:8:62"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"7387:8:62"},"referencedDeclaration":39833,"src":"7387:8:62","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":14501,"mutability":"mutable","name":"exactAmountUnderlyingIn","nameLocation":"7426:23:62","nodeType":"VariableDeclaration","scope":14527,"src":"7418:31:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14500,"name":"uint256","nodeType":"ElementaryTypeName","src":"7418:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14503,"mutability":"mutable","name":"exactAmountWrappedIn","nameLocation":"7467:20:62","nodeType":"VariableDeclaration","scope":14527,"src":"7459:28:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14502,"name":"uint256","nodeType":"ElementaryTypeName","src":"7459:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7377:116:62"},"returnParameters":{"id":14511,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14510,"mutability":"mutable","name":"issuedShares","nameLocation":"7543:12:62","nodeType":"VariableDeclaration","scope":14527,"src":"7535:20:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14509,"name":"uint256","nodeType":"ElementaryTypeName","src":"7535:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7534:22:62"},"scope":14662,"src":"7343:418:62","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1802],"body":{"id":14560,"nodeType":"Block","src":"7980:260:62","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":14546,"name":"BufferRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14662,"src":"8086:12:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BufferRouter_$14662_$","typeString":"type(contract BufferRouter)"}},"id":14547,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8099:29:62","memberName":"queryAddLiquidityToBufferHook","nodeType":"MemberAccess","referencedDeclaration":14602,"src":"8086:42:62","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_contract$_IERC4626_$39833_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function BufferRouter.queryAddLiquidityToBufferHook(contract IERC4626,uint256) returns (uint256,uint256)"}},{"components":[{"id":14548,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14531,"src":"8131:12:62","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":14549,"name":"exactSharesToIssue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14533,"src":"8145:18:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14550,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8130:34:62","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC4626_$39833_$_t_uint256_$","typeString":"tuple(contract IERC4626,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_contract$_IERC4626_$39833_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function BufferRouter.queryAddLiquidityToBufferHook(contract IERC4626,uint256) returns (uint256,uint256)"},{"typeIdentifier":"t_tuple$_t_contract$_IERC4626_$39833_$_t_uint256_$","typeString":"tuple(contract IERC4626,uint256)"}],"expression":{"id":14544,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8071:3:62","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":14545,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8075:10:62","memberName":"encodeCall","nodeType":"MemberAccess","src":"8071:14:62","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":14551,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8071:94:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":14542,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"8037:6:62","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":14543,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8044:5:62","memberName":"quote","nodeType":"MemberAccess","referencedDeclaration":4392,"src":"8037:12:62","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":14552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8037:146:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":14554,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8202:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":14553,"name":"uint256","nodeType":"ElementaryTypeName","src":"8202:7:62","typeDescriptions":{}}},{"id":14556,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8211:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":14555,"name":"uint256","nodeType":"ElementaryTypeName","src":"8211:7:62","typeDescriptions":{}}}],"id":14557,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"8201:18:62","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$","typeString":"tuple(type(uint256),type(uint256))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$","typeString":"tuple(type(uint256),type(uint256))"}],"expression":{"id":14540,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8009:3:62","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":14541,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8013:6:62","memberName":"decode","nodeType":"MemberAccess","src":"8009:10:62","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":14558,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8009:224:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":14539,"id":14559,"nodeType":"Return","src":"7990:243:62"}]},"documentation":{"id":14528,"nodeType":"StructuredDocumentation","src":"7767:29:62","text":"@inheritdoc IBufferRouter"},"functionSelector":"662727cc","id":14561,"implemented":true,"kind":"function","modifiers":[],"name":"queryAddLiquidityToBuffer","nameLocation":"7810:25:62","nodeType":"FunctionDefinition","parameters":{"id":14534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14531,"mutability":"mutable","name":"wrappedToken","nameLocation":"7854:12:62","nodeType":"VariableDeclaration","scope":14561,"src":"7845:21:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":14530,"nodeType":"UserDefinedTypeName","pathNode":{"id":14529,"name":"IERC4626","nameLocations":["7845:8:62"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"7845:8:62"},"referencedDeclaration":39833,"src":"7845:8:62","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":14533,"mutability":"mutable","name":"exactSharesToIssue","nameLocation":"7884:18:62","nodeType":"VariableDeclaration","scope":14561,"src":"7876:26:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14532,"name":"uint256","nodeType":"ElementaryTypeName","src":"7876:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7835:73:62"},"returnParameters":{"id":14539,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14536,"mutability":"mutable","name":"amountUnderlyingIn","nameLocation":"7935:18:62","nodeType":"VariableDeclaration","scope":14561,"src":"7927:26:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14535,"name":"uint256","nodeType":"ElementaryTypeName","src":"7927:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14538,"mutability":"mutable","name":"amountWrappedIn","nameLocation":"7963:15:62","nodeType":"VariableDeclaration","scope":14561,"src":"7955:23:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14537,"name":"uint256","nodeType":"ElementaryTypeName","src":"7955:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7926:53:62"},"scope":14662,"src":"7801:439:62","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":14601,"nodeType":"Block","src":"8452:241:62","statements":[{"expression":{"id":14599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":14577,"name":"amountUnderlyingIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14573,"src":"8463:18:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14578,"name":"amountWrappedIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14575,"src":"8483:15:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14579,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"8462:37:62","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":14582,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14564,"src":"8543:12:62","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"expression":{"arguments":[{"id":14585,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8574:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":14584,"name":"uint128","nodeType":"ElementaryTypeName","src":"8574:7:62","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"}],"id":14583,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8569:4:62","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14586,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8569:13:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint128","typeString":"type(uint128)"}},"id":14587,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8583:3:62","memberName":"max","nodeType":"MemberAccess","src":"8569:17:62","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"expression":{"arguments":[{"id":14590,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8605:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":14589,"name":"uint128","nodeType":"ElementaryTypeName","src":"8605:7:62","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"}],"id":14588,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8600:4:62","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":14591,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8600:13:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint128","typeString":"type(uint128)"}},"id":14592,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8614:3:62","memberName":"max","nodeType":"MemberAccess","src":"8600:17:62","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},{"id":14593,"name":"exactSharesToIssue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14566,"src":"8631:18:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":14596,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8671:4:62","typeDescriptions":{"typeIdentifier":"t_contract$_BufferRouter_$14662","typeString":"contract BufferRouter"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BufferRouter_$14662","typeString":"contract BufferRouter"}],"id":14595,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8663:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":14594,"name":"address","nodeType":"ElementaryTypeName","src":"8663:7:62","typeDescriptions":{}}},"id":14597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8663:13:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint128","typeString":"uint128"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14580,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"8502:6:62","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":14581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8509:20:62","memberName":"addLiquidityToBuffer","nodeType":"MemberAccess","referencedDeclaration":3336,"src":"8502:27:62","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$returns$_t_uint256_$_t_uint256_$","typeString":"function (contract IERC4626,uint256,uint256,uint256,address) external returns (uint256,uint256)"}},"id":14598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8502:184:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"8462:224:62","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14600,"nodeType":"ExpressionStatement","src":"8462:224:62"}]},"functionSelector":"400f230d","id":14602,"implemented":true,"kind":"function","modifiers":[{"id":14569,"kind":"modifierInvocation","modifierName":{"id":14568,"name":"nonReentrant","nameLocations":["8367:12:62"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"8367:12:62"},"nodeType":"ModifierInvocation","src":"8367:12:62"},{"id":14571,"kind":"modifierInvocation","modifierName":{"id":14570,"name":"onlyVault","nameLocations":["8380:9:62"],"nodeType":"IdentifierPath","referencedDeclaration":28128,"src":"8380:9:62"},"nodeType":"ModifierInvocation","src":"8380:9:62"}],"name":"queryAddLiquidityToBufferHook","nameLocation":"8255:29:62","nodeType":"FunctionDefinition","parameters":{"id":14567,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14564,"mutability":"mutable","name":"wrappedToken","nameLocation":"8303:12:62","nodeType":"VariableDeclaration","scope":14602,"src":"8294:21:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":14563,"nodeType":"UserDefinedTypeName","pathNode":{"id":14562,"name":"IERC4626","nameLocations":["8294:8:62"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"8294:8:62"},"referencedDeclaration":39833,"src":"8294:8:62","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":14566,"mutability":"mutable","name":"exactSharesToIssue","nameLocation":"8333:18:62","nodeType":"VariableDeclaration","scope":14602,"src":"8325:26:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14565,"name":"uint256","nodeType":"ElementaryTypeName","src":"8325:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8284:73:62"},"returnParameters":{"id":14576,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14573,"mutability":"mutable","name":"amountUnderlyingIn","nameLocation":"8407:18:62","nodeType":"VariableDeclaration","scope":14602,"src":"8399:26:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14572,"name":"uint256","nodeType":"ElementaryTypeName","src":"8399:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14575,"mutability":"mutable","name":"amountWrappedIn","nameLocation":"8435:15:62","nodeType":"VariableDeclaration","scope":14602,"src":"8427:23:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14574,"name":"uint256","nodeType":"ElementaryTypeName","src":"8427:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8398:53:62"},"scope":14662,"src":"8246:447:62","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1815],"body":{"id":14635,"nodeType":"Block","src":"8936:266:62","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":14621,"name":"BufferRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14662,"src":"9042:12:62","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BufferRouter_$14662_$","typeString":"type(contract BufferRouter)"}},"id":14622,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9055:34:62","memberName":"queryRemoveLiquidityFromBufferHook","nodeType":"MemberAccess","referencedDeclaration":14661,"src":"9042:47:62","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_contract$_IERC4626_$39833_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function BufferRouter.queryRemoveLiquidityFromBufferHook(contract IERC4626,uint256) returns (uint256,uint256)"}},{"components":[{"id":14623,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14606,"src":"9092:12:62","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":14624,"name":"exactSharesToRemove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14608,"src":"9106:19:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":14625,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9091:35:62","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC4626_$39833_$_t_uint256_$","typeString":"tuple(contract IERC4626,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_contract$_IERC4626_$39833_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function BufferRouter.queryRemoveLiquidityFromBufferHook(contract IERC4626,uint256) returns (uint256,uint256)"},{"typeIdentifier":"t_tuple$_t_contract$_IERC4626_$39833_$_t_uint256_$","typeString":"tuple(contract IERC4626,uint256)"}],"expression":{"id":14619,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"9027:3:62","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":14620,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9031:10:62","memberName":"encodeCall","nodeType":"MemberAccess","src":"9027:14:62","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":14626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9027:100:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":14617,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"8993:6:62","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":14618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9000:5:62","memberName":"quote","nodeType":"MemberAccess","referencedDeclaration":4392,"src":"8993:12:62","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":14627,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8993:152:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":14629,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9164:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":14628,"name":"uint256","nodeType":"ElementaryTypeName","src":"9164:7:62","typeDescriptions":{}}},{"id":14631,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9173:7:62","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":14630,"name":"uint256","nodeType":"ElementaryTypeName","src":"9173:7:62","typeDescriptions":{}}}],"id":14632,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"9163:18:62","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$","typeString":"tuple(type(uint256),type(uint256))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$","typeString":"tuple(type(uint256),type(uint256))"}],"expression":{"id":14615,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8965:3:62","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":14616,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8969:6:62","memberName":"decode","nodeType":"MemberAccess","src":"8965:10:62","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":14633,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8965:230:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":14614,"id":14634,"nodeType":"Return","src":"8946:249:62"}]},"documentation":{"id":14603,"nodeType":"StructuredDocumentation","src":"8699:29:62","text":"@inheritdoc IBufferRouter"},"functionSelector":"13f7bb4d","id":14636,"implemented":true,"kind":"function","modifiers":[],"name":"queryRemoveLiquidityFromBuffer","nameLocation":"8742:30:62","nodeType":"FunctionDefinition","parameters":{"id":14609,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14606,"mutability":"mutable","name":"wrappedToken","nameLocation":"8791:12:62","nodeType":"VariableDeclaration","scope":14636,"src":"8782:21:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":14605,"nodeType":"UserDefinedTypeName","pathNode":{"id":14604,"name":"IERC4626","nameLocations":["8782:8:62"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"8782:8:62"},"referencedDeclaration":39833,"src":"8782:8:62","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":14608,"mutability":"mutable","name":"exactSharesToRemove","nameLocation":"8821:19:62","nodeType":"VariableDeclaration","scope":14636,"src":"8813:27:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14607,"name":"uint256","nodeType":"ElementaryTypeName","src":"8813:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8772:74:62"},"returnParameters":{"id":14614,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14611,"mutability":"mutable","name":"removedUnderlyingBalanceOut","nameLocation":"8873:27:62","nodeType":"VariableDeclaration","scope":14636,"src":"8865:35:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14610,"name":"uint256","nodeType":"ElementaryTypeName","src":"8865:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14613,"mutability":"mutable","name":"removedWrappedBalanceOut","nameLocation":"8910:24:62","nodeType":"VariableDeclaration","scope":14636,"src":"8902:32:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14612,"name":"uint256","nodeType":"ElementaryTypeName","src":"8902:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8864:71:62"},"scope":14662,"src":"8733:469:62","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":14660,"nodeType":"Block","src":"9438:97:62","statements":[{"expression":{"arguments":[{"id":14654,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14639,"src":"9488:12:62","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":14655,"name":"exactSharesToRemove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14641,"src":"9502:19:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":14656,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9523:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":14657,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9526:1:62","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":14652,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"9455:6:62","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":14653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9462:25:62","memberName":"removeLiquidityFromBuffer","nodeType":"MemberAccess","referencedDeclaration":3353,"src":"9455:32:62","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (contract IERC4626,uint256,uint256,uint256) external returns (uint256,uint256)"}},"id":14658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9455:73:62","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":14651,"id":14659,"nodeType":"Return","src":"9448:80:62"}]},"functionSelector":"d96af070","id":14661,"implemented":true,"kind":"function","modifiers":[{"id":14644,"kind":"modifierInvocation","modifierName":{"id":14643,"name":"nonReentrant","nameLocations":["9335:12:62"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"9335:12:62"},"nodeType":"ModifierInvocation","src":"9335:12:62"},{"id":14646,"kind":"modifierInvocation","modifierName":{"id":14645,"name":"onlyVault","nameLocations":["9348:9:62"],"nodeType":"IdentifierPath","referencedDeclaration":28128,"src":"9348:9:62"},"nodeType":"ModifierInvocation","src":"9348:9:62"}],"name":"queryRemoveLiquidityFromBufferHook","nameLocation":"9217:34:62","nodeType":"FunctionDefinition","parameters":{"id":14642,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14639,"mutability":"mutable","name":"wrappedToken","nameLocation":"9270:12:62","nodeType":"VariableDeclaration","scope":14661,"src":"9261:21:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":14638,"nodeType":"UserDefinedTypeName","pathNode":{"id":14637,"name":"IERC4626","nameLocations":["9261:8:62"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"9261:8:62"},"referencedDeclaration":39833,"src":"9261:8:62","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":14641,"mutability":"mutable","name":"exactSharesToRemove","nameLocation":"9300:19:62","nodeType":"VariableDeclaration","scope":14661,"src":"9292:27:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14640,"name":"uint256","nodeType":"ElementaryTypeName","src":"9292:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9251:74:62"},"returnParameters":{"id":14651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14648,"mutability":"mutable","name":"removedUnderlyingBalanceOut","nameLocation":"9375:27:62","nodeType":"VariableDeclaration","scope":14661,"src":"9367:35:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14647,"name":"uint256","nodeType":"ElementaryTypeName","src":"9367:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":14650,"mutability":"mutable","name":"removedWrappedBalanceOut","nameLocation":"9412:24:62","nodeType":"VariableDeclaration","scope":14661,"src":"9404:32:62","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14649,"name":"uint256","nodeType":"ElementaryTypeName","src":"9404:7:62","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9366:71:62"},"scope":14662,"src":"9208:327:62","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":14663,"src":"1151:8386:62","usedErrors":[3031,3034,3640,5901,6355,9886,31059,40188,40469,40474,40477,43238],"usedEvents":[]}],"src":"46:9492:62"},"id":62},"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","exportedSymbols":{"FEE_SCALING_FACTOR":[4868],"FixedPoint":[8208],"IERC20":[40109],"IProtocolFeeController":[2420],"IVault":[3111],"IVaultErrors":[3768],"MAX_FEE_PERCENTAGE":[4871],"PoolRoleAccounts":[4677],"ProtocolFeeController":[16325],"ReentrancyGuardTransient":[9942],"SafeCast":[44983],"SafeERC20":[40461],"SingletonAuthentication":[19387],"VaultGuard":[28149]},"id":16326,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":14664,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:63"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":14666,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16326,"sourceUnit":40462,"src":"72:84:63","symbolAliases":[{"foreign":{"id":14665,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40461,"src":"81:9:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":14668,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16326,"sourceUnit":44984,"src":"157:75:63","symbolAliases":[{"foreign":{"id":14667,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44983,"src":"166:8:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":14670,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16326,"sourceUnit":40110,"src":"233:72:63","symbolAliases":[{"foreign":{"id":14669,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"242:6:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":14672,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16326,"sourceUnit":2421,"src":"307:113:63","symbolAliases":[{"foreign":{"id":14671,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2420,"src":"316:22:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":14674,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16326,"sourceUnit":3769,"src":"421:93:63","symbolAliases":[{"foreign":{"id":14673,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"430:12:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":14676,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16326,"sourceUnit":3112,"src":"515:81:63","symbolAliases":[{"foreign":{"id":14675,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"524:6:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":14680,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16326,"sourceUnit":4872,"src":"597:147:63","symbolAliases":[{"foreign":{"id":14677,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4868,"src":"610:18:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":14678,"name":"MAX_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4871,"src":"634:18:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":14679,"name":"PoolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4677,"src":"658:16:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":14682,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16326,"sourceUnit":9943,"src":"746:132:63","symbolAliases":[{"foreign":{"id":14681,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9942,"src":"759:24:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":14684,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16326,"sourceUnit":8209,"src":"879:92:63","symbolAliases":[{"foreign":{"id":14683,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"888:10:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"./SingletonAuthentication.sol","id":14686,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16326,"sourceUnit":19388,"src":"973:72:63","symbolAliases":[{"foreign":{"id":14685,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19387,"src":"982:23:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","file":"./VaultGuard.sol","id":14688,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":16326,"sourceUnit":28150,"src":"1046:46:63","symbolAliases":[{"foreign":{"id":14687,"name":"VaultGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28149,"src":"1055:10:63","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":14690,"name":"IProtocolFeeController","nameLocations":["3158:22:63"],"nodeType":"IdentifierPath","referencedDeclaration":2420,"src":"3158:22:63"},"id":14691,"nodeType":"InheritanceSpecifier","src":"3158:22:63"},{"baseName":{"id":14692,"name":"SingletonAuthentication","nameLocations":["3186:23:63"],"nodeType":"IdentifierPath","referencedDeclaration":19387,"src":"3186:23:63"},"id":14693,"nodeType":"InheritanceSpecifier","src":"3186:23:63"},{"baseName":{"id":14694,"name":"ReentrancyGuardTransient","nameLocations":["3215:24:63"],"nodeType":"IdentifierPath","referencedDeclaration":9942,"src":"3215:24:63"},"id":14695,"nodeType":"InheritanceSpecifier","src":"3215:24:63"},{"baseName":{"id":14696,"name":"VaultGuard","nameLocations":["3245:10:63"],"nodeType":"IdentifierPath","referencedDeclaration":28149,"src":"3245:10:63"},"id":14697,"nodeType":"InheritanceSpecifier","src":"3245:10:63"}],"canonicalName":"ProtocolFeeController","contractDependencies":[],"contractKind":"contract","documentation":{"id":14689,"nodeType":"StructuredDocumentation","src":"1094:2025:63","text":" @notice Helper contract to manage protocol and creator fees outside the Vault.\n @dev This contract stores global default protocol swap and yield fees, and also tracks the values of those fees\n for each pool (the `PoolFeeConfig` described below). Protocol fees can always be overwritten by governance, but\n pool creator fees are controlled by the registered poolCreator (see `PoolRoleAccounts`).\n The Vault stores a single aggregate percentage for swap and yield fees; only this `ProtocolFeeController` knows\n the component fee percentages, and how to compute the aggregate from the components. This is done for performance\n reasons, to minimize gas on the critical path, as this way the Vault simply applies a single \"cut\", and stores the\n fee amounts separately from the pool balances.\n The pool creator fees are \"net\" protocol fees, meaning the protocol fee is taken first, and the pool creator fee\n percentage is applied to the remainder. Essentially, the protocol is paid first, then the remainder is divided\n between the pool creator and the LPs.\n There is a permissionless function (`collectAggregateFees`) that transfers these tokens from the Vault to this\n contract, and distributes them between the protocol and pool creator, after which they can be withdrawn at any\n time by governance and the pool creator, respectively.\n Protocol fees can be zero in some cases (e.g., the token is registered as exempt), and pool creator fees are zero\n if there is no creator role address defined. Protocol fees are capped at a maximum percentage (50%); pool creator\n fees are computed \"net\" protocol fees, so they can be any value from 0 to 100%. Any combination is possible.\n A protocol-fee-exempt pool with a 100% pool creator fee would send all fees to the creator. If there is no pool\n creator, a pool with a 50% protocol fee would divide the fees evenly between the protocol and LPs.\n This contract is deployed with the Vault, but can be changed by governance."},"fullyImplemented":true,"id":16325,"linearizedBaseContracts":[16325,28149,9942,19387,5786,5498,243,2420],"name":"ProtocolFeeController","nameLocation":"3129:21:63","nodeType":"ContractDefinition","nodes":[{"global":false,"id":14700,"libraryName":{"id":14698,"name":"FixedPoint","nameLocations":["3268:10:63"],"nodeType":"IdentifierPath","referencedDeclaration":8208,"src":"3268:10:63"},"nodeType":"UsingForDirective","src":"3262:29:63","typeName":{"id":14699,"name":"uint256","nodeType":"ElementaryTypeName","src":"3283:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":14704,"libraryName":{"id":14701,"name":"SafeERC20","nameLocations":["3302:9:63"],"nodeType":"IdentifierPath","referencedDeclaration":40461,"src":"3302:9:63"},"nodeType":"UsingForDirective","src":"3296:27:63","typeName":{"id":14703,"nodeType":"UserDefinedTypeName","pathNode":{"id":14702,"name":"IERC20","nameLocations":["3316:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"3316:6:63"},"referencedDeclaration":40109,"src":"3316:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}},{"global":false,"id":14706,"libraryName":{"id":14705,"name":"SafeCast","nameLocations":["3334:8:63"],"nodeType":"IdentifierPath","referencedDeclaration":44983,"src":"3334:8:63"},"nodeType":"UsingForDirective","src":"3328:21:63"},{"canonicalName":"ProtocolFeeController.ProtocolFeeType","id":14709,"members":[{"id":14707,"name":"SWAP","nameLocation":"3386:4:63","nodeType":"EnumValue","src":"3386:4:63"},{"id":14708,"name":"YIELD","nameLocation":"3400:5:63","nodeType":"EnumValue","src":"3400:5:63"}],"name":"ProtocolFeeType","nameLocation":"3360:15:63","nodeType":"EnumDefinition","src":"3355:56:63"},{"canonicalName":"ProtocolFeeController.PoolFeeConfig","documentation":{"id":14710,"nodeType":"StructuredDocumentation","src":"3417:1063:63","text":" @notice Fee configuration stored in the swap and yield fee mappings.\n @dev Instead of storing only the fee in the mapping, also store a flag to indicate whether the fee has been\n set by governance through a permissioned call. (The fee is stored in 64-bits, so that the struct fits\n within a single slot.)\n We know the percentage is an 18-decimal FP value, which only takes 60 bits, so it's guaranteed to fit,\n and we can do simple casts to truncate the high bits without needed SafeCast.\n We want to enable permissionless updates for pools, so that it is less onerous to update potentially\n hundreds of pools if the global protocol fees change. However, we don't want to overwrite pools that\n have had their fee percentages manually set by the DAO (i.e., after off-chain negotiation and agreement).\n @param feePercentage The raw swap or yield fee percentage\n @param isOverride When set, this fee is controlled by governance, and cannot be changed permissionlessly"},"id":14715,"members":[{"constant":false,"id":14712,"mutability":"mutable","name":"feePercentage","nameLocation":"4523:13:63","nodeType":"VariableDeclaration","scope":14715,"src":"4516:20:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":14711,"name":"uint64","nodeType":"ElementaryTypeName","src":"4516:6:63","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"},{"constant":false,"id":14714,"mutability":"mutable","name":"isOverride","nameLocation":"4551:10:63","nodeType":"VariableDeclaration","scope":14715,"src":"4546:15:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14713,"name":"bool","nodeType":"ElementaryTypeName","src":"4546:4:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"PoolFeeConfig","nameLocation":"4492:13:63","nodeType":"StructDefinition","scope":16325,"src":"4485:83:63","visibility":"public"},{"constant":true,"functionSelector":"2772d156","id":14718,"mutability":"constant","name":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","nameLocation":"4685:32:63","nodeType":"VariableDeclaration","scope":16325,"src":"4661:64:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14716,"name":"uint256","nodeType":"ElementaryTypeName","src":"4661:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3530653136","id":14717,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4720:5:63","typeDescriptions":{"typeIdentifier":"t_rational_500000000000000000_by_1","typeString":"int_const 500000000000000000"},"value":"50e16"},"visibility":"public"},{"constant":true,"functionSelector":"5e32e4e8","id":14721,"mutability":"constant","name":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","nameLocation":"4809:33:63","nodeType":"VariableDeclaration","scope":16325,"src":"4785:65:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14719,"name":"uint256","nodeType":"ElementaryTypeName","src":"4785:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3530653136","id":14720,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4845:5:63","typeDescriptions":{"typeIdentifier":"t_rational_500000000000000000_by_1","typeString":"int_const 500000000000000000"},"value":"50e16"},"visibility":"public"},{"constant":true,"functionSelector":"2e1d388d","id":14724,"mutability":"constant","name":"MAX_CREATOR_FEE_PERCENTAGE","nameLocation":"4946:26:63","nodeType":"VariableDeclaration","scope":16325,"src":"4922:62:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14722,"name":"uint256","nodeType":"ElementaryTypeName","src":"4922:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"39392e393939653136","id":14723,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4975:9:63","typeDescriptions":{"typeIdentifier":"t_rational_999990000000000000_by_1","typeString":"int_const 999990000000000000"},"value":"99.999e16"},"visibility":"public"},{"constant":false,"id":14726,"mutability":"mutable","name":"_globalProtocolSwapFeePercentage","nameLocation":"5051:32:63","nodeType":"VariableDeclaration","scope":16325,"src":"5035:48:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14725,"name":"uint256","nodeType":"ElementaryTypeName","src":"5035:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":14728,"mutability":"mutable","name":"_globalProtocolYieldFeePercentage","nameLocation":"5140:33:63","nodeType":"VariableDeclaration","scope":16325,"src":"5124:49:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14727,"name":"uint256","nodeType":"ElementaryTypeName","src":"5124:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":14733,"mutability":"mutable","name":"_poolProtocolSwapFeePercentages","nameLocation":"5356:31:63","nodeType":"VariableDeclaration","scope":16325,"src":"5294:93:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$14715_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"typeName":{"id":14732,"keyName":"pool","keyNameLocation":"5310:4:63","keyType":{"id":14729,"name":"address","nodeType":"ElementaryTypeName","src":"5302:7:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5294:52:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$14715_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"valueName":"swapFeeConfig","valueNameLocation":"5332:13:63","valueType":{"id":14731,"nodeType":"UserDefinedTypeName","pathNode":{"id":14730,"name":"PoolFeeConfig","nameLocations":["5318:13:63"],"nodeType":"IdentifierPath","referencedDeclaration":14715,"src":"5318:13:63"},"referencedDeclaration":14715,"src":"5318:13:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}}},"visibility":"internal"},{"constant":false,"id":14738,"mutability":"mutable","name":"_poolProtocolYieldFeePercentages","nameLocation":"5572:32:63","nodeType":"VariableDeclaration","scope":16325,"src":"5509:95:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$14715_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"typeName":{"id":14737,"keyName":"pool","keyNameLocation":"5525:4:63","keyType":{"id":14734,"name":"address","nodeType":"ElementaryTypeName","src":"5517:7:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5509:53:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$14715_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig)"},"valueName":"yieldFeeConfig","valueNameLocation":"5547:14:63","valueType":{"id":14736,"nodeType":"UserDefinedTypeName","pathNode":{"id":14735,"name":"PoolFeeConfig","nameLocations":["5533:13:63"],"nodeType":"IdentifierPath","referencedDeclaration":14715,"src":"5533:13:63"},"referencedDeclaration":14715,"src":"5533:13:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}}},"visibility":"internal"},{"constant":false,"id":14742,"mutability":"mutable","name":"_registeredPools","nameLocation":"5777:16:63","nodeType":"VariableDeclaration","scope":16325,"src":"5725:68:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":14741,"keyName":"pool","keyNameLocation":"5741:4:63","keyType":{"id":14739,"name":"address","nodeType":"ElementaryTypeName","src":"5733:7:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5725:42:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"isRegistered","valueNameLocation":"5754:12:63","valueType":{"id":14740,"name":"bool","nodeType":"ElementaryTypeName","src":"5749:4:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"},{"constant":false,"id":14746,"mutability":"mutable","name":"_poolCreatorSwapFeePercentages","nameLocation":"5917:30:63","nodeType":"VariableDeclaration","scope":16325,"src":"5856:91:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":14745,"keyName":"pool","keyNameLocation":"5872:4:63","keyType":{"id":14743,"name":"address","nodeType":"ElementaryTypeName","src":"5864:7:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5856:51:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"poolCreatorSwapFee","valueNameLocation":"5888:18:63","valueType":{"id":14744,"name":"uint256","nodeType":"ElementaryTypeName","src":"5880:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":14750,"mutability":"mutable","name":"_poolCreatorYieldFeePercentages","nameLocation":"6073:31:63","nodeType":"VariableDeclaration","scope":16325,"src":"6011:93:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":14749,"keyName":"pool","keyNameLocation":"6027:4:63","keyType":{"id":14747,"name":"address","nodeType":"ElementaryTypeName","src":"6019:7:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6011:52:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"poolCreatorYieldFee","valueNameLocation":"6043:19:63","valueType":{"id":14748,"name":"uint256","nodeType":"ElementaryTypeName","src":"6035:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":14757,"mutability":"mutable","name":"_protocolFeeAmounts","nameLocation":"6290:19:63","nodeType":"VariableDeclaration","scope":16325,"src":"6209:100:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"typeName":{"id":14756,"keyName":"pool","keyNameLocation":"6225:4:63","keyType":{"id":14751,"name":"address","nodeType":"ElementaryTypeName","src":"6217:7:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6209:71:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":14755,"keyName":"poolToken","keyNameLocation":"6248:9:63","keyType":{"id":14753,"nodeType":"UserDefinedTypeName","pathNode":{"id":14752,"name":"IERC20","nameLocations":["6241:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"6241:6:63"},"referencedDeclaration":40109,"src":"6241:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"6233:46:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"},"valueName":"feeAmount","valueNameLocation":"6269:9:63","valueType":{"id":14754,"name":"uint256","nodeType":"ElementaryTypeName","src":"6261:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"internal"},{"constant":false,"id":14764,"mutability":"mutable","name":"_poolCreatorFeeAmounts","nameLocation":"6505:22:63","nodeType":"VariableDeclaration","scope":16325,"src":"6424:103:63","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"typeName":{"id":14763,"keyName":"pool","keyNameLocation":"6440:4:63","keyType":{"id":14758,"name":"address","nodeType":"ElementaryTypeName","src":"6432:7:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"6424:71:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":14762,"keyName":"poolToken","keyNameLocation":"6463:9:63","keyType":{"id":14760,"nodeType":"UserDefinedTypeName","pathNode":{"id":14759,"name":"IERC20","nameLocations":["6456:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"6456:6:63"},"referencedDeclaration":40109,"src":"6456:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"6448:46:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"},"valueName":"feeAmount","valueNameLocation":"6484:9:63","valueType":{"id":14761,"name":"uint256","nodeType":"ElementaryTypeName","src":"6476:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"internal"},{"documentation":{"id":14765,"nodeType":"StructuredDocumentation","src":"6534:279:63","text":" @notice Prevent pool data from being registered more than once.\n @dev This can happen if there is an error in the migration, or if governance somehow grants permission to\n `migratePool`, which should never happen.\n @param pool The pool"},"errorSelector":"db771c80","id":14769,"name":"PoolAlreadyRegistered","nameLocation":"6824:21:63","nodeType":"ErrorDefinition","parameters":{"id":14768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14767,"mutability":"mutable","name":"pool","nameLocation":"6854:4:63","nodeType":"VariableDeclaration","scope":14769,"src":"6846:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14766,"name":"address","nodeType":"ElementaryTypeName","src":"6846:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6845:14:63"},"src":"6818:42:63"},{"documentation":{"id":14770,"nodeType":"StructuredDocumentation","src":"6866:53:63","text":"@notice Migration source cannot be this contract."},"errorSelector":"b82fd5bf","id":14772,"name":"InvalidMigrationSource","nameLocation":"6930:22:63","nodeType":"ErrorDefinition","parameters":{"id":14771,"nodeType":"ParameterList","parameters":[],"src":"6952:2:63"},"src":"6924:31:63"},{"body":{"id":14781,"nodeType":"Block","src":"7051:60:63","statements":[{"expression":{"arguments":[{"id":14777,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14774,"src":"7088:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14776,"name":"_ensureCallerIsPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15566,"src":"7061:26:63","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":14778,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7061:32:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14779,"nodeType":"ExpressionStatement","src":"7061:32:63"},{"id":14780,"nodeType":"PlaceholderStatement","src":"7103:1:63"}]},"id":14782,"name":"onlyPoolCreator","nameLocation":"7021:15:63","nodeType":"ModifierDefinition","parameters":{"id":14775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14774,"mutability":"mutable","name":"pool","nameLocation":"7045:4:63","nodeType":"VariableDeclaration","scope":14782,"src":"7037:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14773,"name":"address","nodeType":"ElementaryTypeName","src":"7037:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7036:14:63"},"src":"7012:99:63","virtual":false,"visibility":"internal"},{"body":{"id":14799,"nodeType":"Block","src":"7234:207:63","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14786,"name":"newSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14784,"src":"7248:20:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":14787,"name":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14718,"src":"7271:32:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7248:55:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14793,"nodeType":"IfStatement","src":"7244:127:63","trueBody":{"id":14792,"nodeType":"Block","src":"7305:66:63","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14789,"name":"ProtocolSwapFeePercentageTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2201,"src":"7326:32:63","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":14790,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7326:34:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14791,"nodeType":"RevertStatement","src":"7319:41:63"}]}},{"expression":{"arguments":[{"id":14795,"name":"newSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14784,"src":"7402:20:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14794,"name":"_ensureValidPrecision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16324,"src":"7380:21:63","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":14796,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7380:43:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14797,"nodeType":"ExpressionStatement","src":"7380:43:63"},{"id":14798,"nodeType":"PlaceholderStatement","src":"7433:1:63"}]},"id":14800,"name":"withValidSwapFee","nameLocation":"7187:16:63","nodeType":"ModifierDefinition","parameters":{"id":14785,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14784,"mutability":"mutable","name":"newSwapFeePercentage","nameLocation":"7212:20:63","nodeType":"VariableDeclaration","scope":14800,"src":"7204:28:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14783,"name":"uint256","nodeType":"ElementaryTypeName","src":"7204:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7203:30:63"},"src":"7178:263:63","virtual":false,"visibility":"internal"},{"body":{"id":14817,"nodeType":"Block","src":"7567:211:63","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14804,"name":"newYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14802,"src":"7581:21:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":14805,"name":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14721,"src":"7605:33:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7581:57:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14811,"nodeType":"IfStatement","src":"7577:130:63","trueBody":{"id":14810,"nodeType":"Block","src":"7640:67:63","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14807,"name":"ProtocolYieldFeePercentageTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2204,"src":"7661:33:63","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":14808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7661:35:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14809,"nodeType":"RevertStatement","src":"7654:42:63"}]}},{"expression":{"arguments":[{"id":14813,"name":"newYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14802,"src":"7738:21:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14812,"name":"_ensureValidPrecision","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16324,"src":"7716:21:63","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":14814,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7716:44:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14815,"nodeType":"ExpressionStatement","src":"7716:44:63"},{"id":14816,"nodeType":"PlaceholderStatement","src":"7770:1:63"}]},"id":14818,"name":"withValidYieldFee","nameLocation":"7518:17:63","nodeType":"ModifierDefinition","parameters":{"id":14803,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14802,"mutability":"mutable","name":"newYieldFeePercentage","nameLocation":"7544:21:63","nodeType":"VariableDeclaration","scope":14818,"src":"7536:29:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14801,"name":"uint256","nodeType":"ElementaryTypeName","src":"7536:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7535:31:63"},"src":"7509:269:63","virtual":false,"visibility":"internal"},{"body":{"id":14831,"nodeType":"Block","src":"7854:154:63","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14822,"name":"newPoolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14820,"src":"7868:27:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":14823,"name":"MAX_CREATOR_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14724,"src":"7898:26:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7868:56:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":14829,"nodeType":"IfStatement","src":"7864:127:63","trueBody":{"id":14828,"nodeType":"Block","src":"7926:65:63","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":14825,"name":"PoolCreatorFeePercentageTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2219,"src":"7947:31:63","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":14826,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7947:33:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":14827,"nodeType":"RevertStatement","src":"7940:40:63"}]}},{"id":14830,"nodeType":"PlaceholderStatement","src":"8000:1:63"}]},"id":14832,"name":"withValidPoolCreatorFee","nameLocation":"7793:23:63","nodeType":"ModifierDefinition","parameters":{"id":14821,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14820,"mutability":"mutable","name":"newPoolCreatorFeePercentage","nameLocation":"7825:27:63","nodeType":"VariableDeclaration","scope":14832,"src":"7817:35:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14819,"name":"uint256","nodeType":"ElementaryTypeName","src":"7817:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7816:37:63"},"src":"7784:224:63","virtual":false,"visibility":"internal"},{"body":{"id":14841,"nodeType":"Block","src":"8145:54:63","statements":[{"expression":{"arguments":[{"id":14837,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14834,"src":"8176:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":14836,"name":"collectAggregateFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14883,"src":"8155:20:63","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":14838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8155:26:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14839,"nodeType":"ExpressionStatement","src":"8155:26:63"},{"id":14840,"nodeType":"PlaceholderStatement","src":"8191:1:63"}]},"id":14842,"name":"withLatestFees","nameLocation":"8116:14:63","nodeType":"ModifierDefinition","parameters":{"id":14835,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14834,"mutability":"mutable","name":"pool","nameLocation":"8139:4:63","nodeType":"VariableDeclaration","scope":14842,"src":"8131:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14833,"name":"address","nodeType":"ElementaryTypeName","src":"8131:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8130:14:63"},"src":"8107:92:63","virtual":false,"visibility":"internal"},{"body":{"id":14854,"nodeType":"Block","src":"8283:64:63","statements":[]},"id":14855,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":14848,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14845,"src":"8256:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"id":14849,"kind":"baseConstructorSpecifier","modifierName":{"id":14847,"name":"SingletonAuthentication","nameLocations":["8232:23:63"],"nodeType":"IdentifierPath","referencedDeclaration":19387,"src":"8232:23:63"},"nodeType":"ModifierInvocation","src":"8232:31:63"},{"arguments":[{"id":14851,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14845,"src":"8275:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"id":14852,"kind":"baseConstructorSpecifier","modifierName":{"id":14850,"name":"VaultGuard","nameLocations":["8264:10:63"],"nodeType":"IdentifierPath","referencedDeclaration":28149,"src":"8264:10:63"},"nodeType":"ModifierInvocation","src":"8264:18:63"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":14846,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14845,"mutability":"mutable","name":"vault_","nameLocation":"8224:6:63","nodeType":"VariableDeclaration","scope":14855,"src":"8217:13:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":14844,"nodeType":"UserDefinedTypeName","pathNode":{"id":14843,"name":"IVault","nameLocations":["8217:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"8217:6:63"},"referencedDeclaration":3111,"src":"8217:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"}],"src":"8216:15:63"},"returnParameters":{"id":14853,"nodeType":"ParameterList","parameters":[],"src":"8283:0:63"},"scope":16325,"src":"8205:142:63","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[2226],"body":{"id":14864,"nodeType":"Block","src":"8444:30:63","statements":[{"expression":{"id":14862,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"8461:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"functionReturnParameters":14861,"id":14863,"nodeType":"Return","src":"8454:13:63"}]},"documentation":{"id":14856,"nodeType":"StructuredDocumentation","src":"8353:38:63","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"fbfa77cf","id":14865,"implemented":true,"kind":"function","modifiers":[],"name":"vault","nameLocation":"8405:5:63","nodeType":"FunctionDefinition","parameters":{"id":14857,"nodeType":"ParameterList","parameters":[],"src":"8410:2:63"},"returnParameters":{"id":14861,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14860,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":14865,"src":"8436:6:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":14859,"nodeType":"UserDefinedTypeName","pathNode":{"id":14858,"name":"IVault","nameLocations":["8436:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"8436:6:63"},"referencedDeclaration":3111,"src":"8436:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"}],"src":"8435:8:63"},"scope":16325,"src":"8396:78:63","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[2232],"body":{"id":14882,"nodeType":"Block","src":"8574:100:63","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":14876,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16325,"src":"8613:21:63","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ProtocolFeeController_$16325_$","typeString":"type(contract ProtocolFeeController)"}},"id":14877,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8635:24:63","memberName":"collectAggregateFeesHook","nodeType":"MemberAccess","referencedDeclaration":14911,"src":"8613:46:63","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$returns$__$","typeString":"function ProtocolFeeController.collectAggregateFeesHook(address)"}},{"id":14878,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14868,"src":"8661:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$returns$__$","typeString":"function ProtocolFeeController.collectAggregateFeesHook(address)"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14874,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8598:3:63","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":14875,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8602:10:63","memberName":"encodeCall","nodeType":"MemberAccess","src":"8598:14:63","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":14879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8598:68:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":14871,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"8584:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":14873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8591:6:63","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":4440,"src":"8584:13:63","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":14880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8584:83:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":14881,"nodeType":"ExpressionStatement","src":"8584:83:63"}]},"documentation":{"id":14866,"nodeType":"StructuredDocumentation","src":"8480:38:63","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"8f4ab9ca","id":14883,"implemented":true,"kind":"function","modifiers":[],"name":"collectAggregateFees","nameLocation":"8532:20:63","nodeType":"FunctionDefinition","parameters":{"id":14869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14868,"mutability":"mutable","name":"pool","nameLocation":"8561:4:63","nodeType":"VariableDeclaration","scope":14883,"src":"8553:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14867,"name":"address","nodeType":"ElementaryTypeName","src":"8553:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8552:14:63"},"returnParameters":{"id":14870,"nodeType":"ParameterList","parameters":[],"src":"8574:0:63"},"scope":16325,"src":"8523:151:63","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":14910,"nodeType":"Block","src":"9057:186:63","statements":[{"assignments":[14895,14898],"declarations":[{"constant":false,"id":14895,"mutability":"mutable","name":"totalSwapFees","nameLocation":"9085:13:63","nodeType":"VariableDeclaration","scope":14910,"src":"9068:30:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14893,"name":"uint256","nodeType":"ElementaryTypeName","src":"9068:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14894,"nodeType":"ArrayTypeName","src":"9068:9:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":14898,"mutability":"mutable","name":"totalYieldFees","nameLocation":"9117:14:63","nodeType":"VariableDeclaration","scope":14910,"src":"9100:31:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14896,"name":"uint256","nodeType":"ElementaryTypeName","src":"9100:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14897,"nodeType":"ArrayTypeName","src":"9100:9:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":14903,"initialValue":{"arguments":[{"id":14901,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14886,"src":"9163:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":14899,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"9135:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":14900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9142:20:63","memberName":"collectAggregateFees","nodeType":"MemberAccess","referencedDeclaration":3239,"src":"9135:27:63","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) external returns (uint256[] memory,uint256[] memory)"}},"id":14902,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9135:33:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256[] memory)"}},"nodeType":"VariableDeclarationStatement","src":"9067:101:63"},{"expression":{"arguments":[{"id":14905,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14886,"src":"9200:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":14906,"name":"totalSwapFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14895,"src":"9206:13:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":14907,"name":"totalYieldFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14898,"src":"9221:14:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":14904,"name":"_receiveAggregateFees","nodeType":"Identifier","overloadedDeclarations":[14938,15142],"referencedDeclaration":14938,"src":"9178:21:63","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,uint256[] memory,uint256[] memory)"}},"id":14908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9178:58:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14909,"nodeType":"ExpressionStatement","src":"9178:58:63"}]},"documentation":{"id":14884,"nodeType":"StructuredDocumentation","src":"8680:305:63","text":" @dev Copy and zero out the `aggregateFeeAmounts` collected in the Vault accounting, supplying credit\n for each token. Then have the Vault transfer tokens to this contract, debiting each token for the amount\n transferred so that the transaction settles when the hook returns."},"functionSelector":"fa399f2a","id":14911,"implemented":true,"kind":"function","modifiers":[{"id":14889,"kind":"modifierInvocation","modifierName":{"id":14888,"name":"onlyVault","nameLocations":["9047:9:63"],"nodeType":"IdentifierPath","referencedDeclaration":28128,"src":"9047:9:63"},"nodeType":"ModifierInvocation","src":"9047:9:63"}],"name":"collectAggregateFeesHook","nameLocation":"8999:24:63","nodeType":"FunctionDefinition","parameters":{"id":14887,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14886,"mutability":"mutable","name":"pool","nameLocation":"9032:4:63","nodeType":"VariableDeclaration","scope":14911,"src":"9024:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14885,"name":"address","nodeType":"ElementaryTypeName","src":"9024:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9023:14:63"},"returnParameters":{"id":14890,"nodeType":"ParameterList","parameters":[],"src":"9057:0:63"},"scope":16325,"src":"8990:253:63","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":14937,"nodeType":"Block","src":"10334:159:63","statements":[{"expression":{"arguments":[{"id":14924,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14914,"src":"10366:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14925,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14709,"src":"10372:15:63","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$14709_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":14926,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10388:4:63","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":14707,"src":"10372:20:63","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},{"id":14927,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14917,"src":"10394:14:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":14923,"name":"_receiveAggregateFees","nodeType":"Identifier","overloadedDeclarations":[14938,15142],"referencedDeclaration":15142,"src":"10344:21:63","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_enum$_ProtocolFeeType_$14709_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType,uint256[] memory)"}},"id":14928,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10344:65:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14929,"nodeType":"ExpressionStatement","src":"10344:65:63"},{"expression":{"arguments":[{"id":14931,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14914,"src":"10441:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":14932,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14709,"src":"10447:15:63","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$14709_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":14933,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10463:5:63","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":14708,"src":"10447:21:63","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},{"id":14934,"name":"yieldFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14920,"src":"10470:15:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":14930,"name":"_receiveAggregateFees","nodeType":"Identifier","overloadedDeclarations":[14938,15142],"referencedDeclaration":15142,"src":"10419:21:63","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_enum$_ProtocolFeeType_$14709_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType,uint256[] memory)"}},"id":14935,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10419:67:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":14936,"nodeType":"ExpressionStatement","src":"10419:67:63"}]},"documentation":{"id":14912,"nodeType":"StructuredDocumentation","src":"9249:929:63","text":" @notice Settle fee credits from the Vault.\n @dev This must be called after calling `collectAggregateFees` in the Vault. Note that since charging protocol\n fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection\n happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations. The Vault\n differentiates between swap and yield fees (since they can have different percentage values); the Controller\n combines swap and yield fees, then allocates the total between the protocol and pool creator.\n @param pool The address of the pool on which the swap fees were charged\n @param swapFeeAmounts An array with the total swap fees collected, sorted in token registration order\n @param yieldFeeAmounts An array with the total yield fees collected, sorted in token registration order"},"id":14938,"implemented":true,"kind":"function","modifiers":[],"name":"_receiveAggregateFees","nameLocation":"10192:21:63","nodeType":"FunctionDefinition","parameters":{"id":14921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14914,"mutability":"mutable","name":"pool","nameLocation":"10231:4:63","nodeType":"VariableDeclaration","scope":14938,"src":"10223:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14913,"name":"address","nodeType":"ElementaryTypeName","src":"10223:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14917,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"10262:14:63","nodeType":"VariableDeclaration","scope":14938,"src":"10245:31:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14915,"name":"uint256","nodeType":"ElementaryTypeName","src":"10245:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14916,"nodeType":"ArrayTypeName","src":"10245:9:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":14920,"mutability":"mutable","name":"yieldFeeAmounts","nameLocation":"10303:15:63","nodeType":"VariableDeclaration","scope":14938,"src":"10286:32:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14918,"name":"uint256","nodeType":"ElementaryTypeName","src":"10286:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14919,"nodeType":"ArrayTypeName","src":"10286:9:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10213:111:63"},"returnParameters":{"id":14922,"nodeType":"ParameterList","parameters":[],"src":"10334:0:63"},"scope":16325,"src":"10183:310:63","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":15141,"nodeType":"Block","src":"10606:2992:63","statements":[{"assignments":[14950],"declarations":[{"constant":false,"id":14950,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"10846:21:63","nodeType":"VariableDeclaration","scope":15141,"src":"10838:29:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14949,"name":"uint256","nodeType":"ElementaryTypeName","src":"10838:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14964,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":14954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14951,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14943,"src":"10870:7:63","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":14952,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14709,"src":"10881:15:63","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$14709_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":14953,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10897:4:63","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":14707,"src":"10881:20:63","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"10870:31:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"baseExpression":{"id":14959,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14738,"src":"10982:32:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$14715_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":14961,"indexExpression":{"id":14960,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14940,"src":"11015:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10982:38:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":14962,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11021:13:63","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":14712,"src":"10982:52:63","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"id":14963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"10870:164:63","trueExpression":{"expression":{"baseExpression":{"id":14955,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14733,"src":"10916:31:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$14715_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":14957,"indexExpression":{"id":14956,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14940,"src":"10948:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10916:37:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":14958,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10954:13:63","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":14712,"src":"10916:51:63","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"nodeType":"VariableDeclarationStatement","src":"10838:196:63"},{"assignments":[14966],"declarations":[{"constant":false,"id":14966,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"11053:24:63","nodeType":"VariableDeclaration","scope":15141,"src":"11045:32:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14965,"name":"uint256","nodeType":"ElementaryTypeName","src":"11045:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14978,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":14970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14967,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14943,"src":"11080:7:63","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":14968,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14709,"src":"11091:15:63","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$14709_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":14969,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11107:4:63","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":14707,"src":"11091:20:63","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"11080:31:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"baseExpression":{"id":14974,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14750,"src":"11177:31:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":14976,"indexExpression":{"id":14975,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14940,"src":"11209:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11177:37:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"11080:134:63","trueExpression":{"baseExpression":{"id":14971,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14746,"src":"11126:30:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":14973,"indexExpression":{"id":14972,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14940,"src":"11157:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11126:36:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11045:169:63"},{"assignments":[14980],"declarations":[{"constant":false,"id":14980,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"11233:22:63","nodeType":"VariableDeclaration","scope":15141,"src":"11225:30:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":14979,"name":"uint256","nodeType":"ElementaryTypeName","src":"11225:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":14981,"nodeType":"VariableDeclarationStatement","src":"11225:30:63"},{"assignments":[14983],"declarations":[{"constant":false,"id":14983,"mutability":"mutable","name":"needToSplitFees","nameLocation":"11271:15:63","nodeType":"VariableDeclaration","scope":15141,"src":"11266:20:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":14982,"name":"bool","nodeType":"ElementaryTypeName","src":"11266:4:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":14991,"initialValue":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":14990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14984,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14966,"src":"11289:24:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":14985,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11316:1:63","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11289:28:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":14989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":14987,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14950,"src":"11321:21:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":14988,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11345:1:63","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11321:25:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11289:57:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"11266:80:63"},{"condition":{"id":14992,"name":"needToSplitFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14983,"src":"11360:15:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15001,"nodeType":"IfStatement","src":"11356:199:63","trueBody":{"id":15000,"nodeType":"Block","src":"11377:178:63","statements":[{"expression":{"id":14998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":14993,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"11440:22:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":14995,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14950,"src":"11496:21:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":14996,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14966,"src":"11519:24:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":14994,"name":"_computeAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15530,"src":"11465:30:63","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":14997,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11465:79:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11440:104:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14999,"nodeType":"ExpressionStatement","src":"11440:104:63"}]}},{"assignments":[15006,15008],"declarations":[{"constant":false,"id":15006,"mutability":"mutable","name":"poolTokens","nameLocation":"11582:10:63","nodeType":"VariableDeclaration","scope":15141,"src":"11566:26:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":15004,"nodeType":"UserDefinedTypeName","pathNode":{"id":15003,"name":"IERC20","nameLocations":["11566:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"11566:6:63"},"referencedDeclaration":40109,"src":"11566:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":15005,"nodeType":"ArrayTypeName","src":"11566:8:63","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":15008,"mutability":"mutable","name":"numTokens","nameLocation":"11602:9:63","nodeType":"VariableDeclaration","scope":15141,"src":"11594:17:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15007,"name":"uint256","nodeType":"ElementaryTypeName","src":"11594:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15012,"initialValue":{"arguments":[{"id":15010,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14940,"src":"11638:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15009,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15590,"src":"11615:22:63","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":15011,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11615:28:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"11565:78:63"},{"body":{"id":15139,"nodeType":"Block","src":"11693:1899:63","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":15023,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14946,"src":"11711:10:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15025,"indexExpression":{"id":15024,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15014,"src":"11722:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11711:13:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":15026,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11727:1:63","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11711:17:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15138,"nodeType":"IfStatement","src":"11707:1875:63","trueBody":{"id":15137,"nodeType":"Block","src":"11730:1852:63","statements":[{"assignments":[15030],"declarations":[{"constant":false,"id":15030,"mutability":"mutable","name":"token","nameLocation":"11755:5:63","nodeType":"VariableDeclaration","scope":15137,"src":"11748:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":15029,"nodeType":"UserDefinedTypeName","pathNode":{"id":15028,"name":"IERC20","nameLocations":["11748:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"11748:6:63"},"referencedDeclaration":40109,"src":"11748:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"id":15034,"initialValue":{"baseExpression":{"id":15031,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15006,"src":"11763:10:63","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":15033,"indexExpression":{"id":15032,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15014,"src":"11774:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11763:13:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"11748:28:63"},{"expression":{"arguments":[{"id":15038,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15030,"src":"11809:5:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"arguments":[{"id":15041,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"11824:4:63","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$16325","typeString":"contract ProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeController_$16325","typeString":"contract ProtocolFeeController"}],"id":15040,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11816:7:63","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15039,"name":"address","nodeType":"ElementaryTypeName","src":"11816:7:63","typeDescriptions":{}}},"id":15042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11816:13:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":15043,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14946,"src":"11831:10:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15045,"indexExpression":{"id":15044,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15014,"src":"11842:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11831:13:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15035,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"11795:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":15037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11802:6:63","memberName":"sendTo","nodeType":"MemberAccess","referencedDeclaration":4462,"src":"11795:13:63","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$40109_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":15046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11795:50:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15047,"nodeType":"ExpressionStatement","src":"11795:50:63"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":15051,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15048,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14943,"src":"12024:7:63","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":15049,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14709,"src":"12035:15:63","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$14709_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":15050,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12051:4:63","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":14707,"src":"12035:20:63","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"12024:31:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":15069,"nodeType":"Block","src":"12161:99:63","statements":[{"eventCall":{"arguments":[{"id":15062,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14940,"src":"12214:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15063,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15030,"src":"12220:5:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"baseExpression":{"id":15064,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14946,"src":"12227:10:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15066,"indexExpression":{"id":15065,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15014,"src":"12238:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12227:13:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15061,"name":"ProtocolYieldFeeCollected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2147,"src":"12188:25:63","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$40109_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256)"}},"id":15067,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12188:53:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15068,"nodeType":"EmitStatement","src":"12183:58:63"}]},"id":15070,"nodeType":"IfStatement","src":"12020:240:63","trueBody":{"id":15060,"nodeType":"Block","src":"12057:98:63","statements":[{"eventCall":{"arguments":[{"id":15053,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14940,"src":"12109:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15054,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15030,"src":"12115:5:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"baseExpression":{"id":15055,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14946,"src":"12122:10:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15057,"indexExpression":{"id":15056,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15014,"src":"12133:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12122:13:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15052,"name":"ProtocolSwapFeeCollected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2137,"src":"12084:24:63","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$40109_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,uint256)"}},"id":15058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12084:52:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15059,"nodeType":"EmitStatement","src":"12079:57:63"}]}},{"condition":{"id":15071,"name":"needToSplitFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14983,"src":"12282:15:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":15135,"nodeType":"Block","src":"13212:356:63","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15109,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14966,"src":"13314:24:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":15110,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13342:1:63","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13314:29:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":15133,"nodeType":"Block","src":"13449:101:63","statements":[{"expression":{"id":15131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":15123,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14764,"src":"13475:22:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":15126,"indexExpression":{"id":15124,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14940,"src":"13498:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13475:28:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":15127,"indexExpression":{"id":15125,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15030,"src":"13504:5:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13475:35:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"baseExpression":{"id":15128,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14946,"src":"13514:10:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15130,"indexExpression":{"id":15129,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15014,"src":"13525:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13514:13:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13475:52:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15132,"nodeType":"ExpressionStatement","src":"13475:52:63"}]},"id":15134,"nodeType":"IfStatement","src":"13310:240:63","trueBody":{"id":15122,"nodeType":"Block","src":"13345:98:63","statements":[{"expression":{"id":15120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":15112,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14757,"src":"13371:19:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":15115,"indexExpression":{"id":15113,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14940,"src":"13391:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13371:25:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":15116,"indexExpression":{"id":15114,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15030,"src":"13397:5:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13371:32:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"baseExpression":{"id":15117,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14946,"src":"13407:10:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15119,"indexExpression":{"id":15118,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15014,"src":"13418:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13407:13:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13371:49:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15121,"nodeType":"ExpressionStatement","src":"13371:49:63"}]}}]},"id":15136,"nodeType":"IfStatement","src":"12278:1290:63","trueBody":{"id":15108,"nodeType":"Block","src":"12299:907:63","statements":[{"assignments":[15073],"declarations":[{"constant":false,"id":15073,"mutability":"mutable","name":"totalFeeAmountRaw","nameLocation":"12864:17:63","nodeType":"VariableDeclaration","scope":15108,"src":"12856:25:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15072,"name":"uint256","nodeType":"ElementaryTypeName","src":"12856:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15080,"initialValue":{"arguments":[{"id":15078,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14980,"src":"12904:22:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":15074,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14946,"src":"12884:10:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15076,"indexExpression":{"id":15075,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15014,"src":"12895:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12884:13:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12898:5:63","memberName":"divUp","nodeType":"MemberAccess","referencedDeclaration":8006,"src":"12884:19:63","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":15079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12884:43:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12856:71:63"},{"assignments":[15082],"declarations":[{"constant":false,"id":15082,"mutability":"mutable","name":"protocolPortion","nameLocation":"12957:15:63","nodeType":"VariableDeclaration","scope":15108,"src":"12949:23:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15081,"name":"uint256","nodeType":"ElementaryTypeName","src":"12949:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15087,"initialValue":{"arguments":[{"id":15085,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14950,"src":"12999:21:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15083,"name":"totalFeeAmountRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15073,"src":"12975:17:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12993:5:63","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":7970,"src":"12975:23:63","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":15086,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12975:46:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12949:72:63"},{"expression":{"id":15094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":15088,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14757,"src":"13044:19:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":15091,"indexExpression":{"id":15089,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14940,"src":"13064:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13044:25:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":15092,"indexExpression":{"id":15090,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15030,"src":"13070:5:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13044:32:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":15093,"name":"protocolPortion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15082,"src":"13080:15:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13044:51:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15095,"nodeType":"ExpressionStatement","src":"13044:51:63"},{"expression":{"id":15106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":15096,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14764,"src":"13117:22:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":15099,"indexExpression":{"id":15097,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14940,"src":"13140:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13117:28:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":15100,"indexExpression":{"id":15098,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15030,"src":"13146:5:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13117:35:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":15101,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14946,"src":"13156:10:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15103,"indexExpression":{"id":15102,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15014,"src":"13167:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13156:13:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":15104,"name":"protocolPortion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15082,"src":"13172:15:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13156:31:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13117:70:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15107,"nodeType":"ExpressionStatement","src":"13117:70:63"}]}}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15017,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15014,"src":"11673:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":15018,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15008,"src":"11677:9:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11673:13:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15140,"initializationExpression":{"assignments":[15014],"declarations":[{"constant":false,"id":15014,"mutability":"mutable","name":"i","nameLocation":"11666:1:63","nodeType":"VariableDeclaration","scope":15140,"src":"11658:9:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15013,"name":"uint256","nodeType":"ElementaryTypeName","src":"11658:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15016,"initialValue":{"hexValue":"30","id":15015,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11670:1:63","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11658:13:63"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":15021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"11688:3:63","subExpression":{"id":15020,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15014,"src":"11690:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15022,"nodeType":"ExpressionStatement","src":"11688:3:63"},"nodeType":"ForStatement","src":"11653:1939:63"}]},"id":15142,"implemented":true,"kind":"function","modifiers":[],"name":"_receiveAggregateFees","nameLocation":"10508:21:63","nodeType":"FunctionDefinition","parameters":{"id":14947,"nodeType":"ParameterList","parameters":[{"constant":false,"id":14940,"mutability":"mutable","name":"pool","nameLocation":"10538:4:63","nodeType":"VariableDeclaration","scope":15142,"src":"10530:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":14939,"name":"address","nodeType":"ElementaryTypeName","src":"10530:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":14943,"mutability":"mutable","name":"feeType","nameLocation":"10560:7:63","nodeType":"VariableDeclaration","scope":15142,"src":"10544:23:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"typeName":{"id":14942,"nodeType":"UserDefinedTypeName","pathNode":{"id":14941,"name":"ProtocolFeeType","nameLocations":["10544:15:63"],"nodeType":"IdentifierPath","referencedDeclaration":14709,"src":"10544:15:63"},"referencedDeclaration":14709,"src":"10544:15:63","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"visibility":"internal"},{"constant":false,"id":14946,"mutability":"mutable","name":"feeAmounts","nameLocation":"10586:10:63","nodeType":"VariableDeclaration","scope":15142,"src":"10569:27:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":14944,"name":"uint256","nodeType":"ElementaryTypeName","src":"10569:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":14945,"nodeType":"ArrayTypeName","src":"10569:9:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10529:68:63"},"returnParameters":{"id":14948,"nodeType":"ParameterList","parameters":[],"src":"10606:0:63"},"scope":16325,"src":"10499:3099:63","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"baseFunctions":[2238],"body":{"id":15150,"nodeType":"Block","src":"13725:56:63","statements":[{"expression":{"id":15148,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14726,"src":"13742:32:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15147,"id":15149,"nodeType":"Return","src":"13735:39:63"}]},"documentation":{"id":15143,"nodeType":"StructuredDocumentation","src":"13604:38:63","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"7869ee18","id":15151,"implemented":true,"kind":"function","modifiers":[],"name":"getGlobalProtocolSwapFeePercentage","nameLocation":"13656:34:63","nodeType":"FunctionDefinition","parameters":{"id":15144,"nodeType":"ParameterList","parameters":[],"src":"13690:2:63"},"returnParameters":{"id":15147,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15146,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15151,"src":"13716:7:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15145,"name":"uint256","nodeType":"ElementaryTypeName","src":"13716:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13715:9:63"},"scope":16325,"src":"13647:134:63","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[2244],"body":{"id":15159,"nodeType":"Block","src":"13909:57:63","statements":[{"expression":{"id":15157,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14728,"src":"13926:33:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15156,"id":15158,"nodeType":"Return","src":"13919:40:63"}]},"documentation":{"id":15152,"nodeType":"StructuredDocumentation","src":"13787:38:63","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"55fb76af","id":15160,"implemented":true,"kind":"function","modifiers":[],"name":"getGlobalProtocolYieldFeePercentage","nameLocation":"13839:35:63","nodeType":"FunctionDefinition","parameters":{"id":15153,"nodeType":"ParameterList","parameters":[],"src":"13874:2:63"},"returnParameters":{"id":15156,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15155,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15160,"src":"13900:7:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15154,"name":"uint256","nodeType":"ElementaryTypeName","src":"13900:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13899:9:63"},"scope":16325,"src":"13830:136:63","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[2252],"body":{"id":15172,"nodeType":"Block","src":"14084:46:63","statements":[{"expression":{"baseExpression":{"id":15168,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14742,"src":"14101:16:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":15170,"indexExpression":{"id":15169,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15163,"src":"14118:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14101:22:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":15167,"id":15171,"nodeType":"Return","src":"14094:29:63"}]},"documentation":{"id":15161,"nodeType":"StructuredDocumentation","src":"13972:38:63","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"c673bdaf","id":15173,"implemented":true,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"14024:16:63","nodeType":"FunctionDefinition","parameters":{"id":15164,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15163,"mutability":"mutable","name":"pool","nameLocation":"14049:4:63","nodeType":"VariableDeclaration","scope":15173,"src":"14041:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15162,"name":"address","nodeType":"ElementaryTypeName","src":"14041:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14040:14:63"},"returnParameters":{"id":15167,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15166,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15173,"src":"14078:4:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":15165,"name":"bool","nodeType":"ElementaryTypeName","src":"14078:4:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14077:6:63"},"scope":16325,"src":"14015:115:63","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[2262],"body":{"id":15196,"nodeType":"Block","src":"14267:143:63","statements":[{"assignments":[15185],"declarations":[{"constant":false,"id":15185,"mutability":"mutable","name":"config","nameLocation":"14298:6:63","nodeType":"VariableDeclaration","scope":15196,"src":"14277:27:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":15184,"nodeType":"UserDefinedTypeName","pathNode":{"id":15183,"name":"PoolFeeConfig","nameLocations":["14277:13:63"],"nodeType":"IdentifierPath","referencedDeclaration":14715,"src":"14277:13:63"},"referencedDeclaration":14715,"src":"14277:13:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":15189,"initialValue":{"baseExpression":{"id":15186,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14733,"src":"14307:31:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$14715_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":15188,"indexExpression":{"id":15187,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15176,"src":"14339:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14307:37:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"14277:67:63"},{"expression":{"components":[{"expression":{"id":15190,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15185,"src":"14363:6:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":15191,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14370:13:63","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":14712,"src":"14363:20:63","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"expression":{"id":15192,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15185,"src":"14385:6:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":15193,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14392:10:63","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":14714,"src":"14385:17:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":15194,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14362:41:63","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint64_$_t_bool_$","typeString":"tuple(uint64,bool)"}},"functionReturnParameters":15182,"id":15195,"nodeType":"Return","src":"14355:48:63"}]},"documentation":{"id":15174,"nodeType":"StructuredDocumentation","src":"14136:38:63","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"5c15a0b4","id":15197,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolProtocolSwapFeeInfo","nameLocation":"14188:26:63","nodeType":"FunctionDefinition","parameters":{"id":15177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15176,"mutability":"mutable","name":"pool","nameLocation":"14223:4:63","nodeType":"VariableDeclaration","scope":15197,"src":"14215:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15175,"name":"address","nodeType":"ElementaryTypeName","src":"14215:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14214:14:63"},"returnParameters":{"id":15182,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15179,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15197,"src":"14252:7:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15178,"name":"uint256","nodeType":"ElementaryTypeName","src":"14252:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15181,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15197,"src":"14261:4:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":15180,"name":"bool","nodeType":"ElementaryTypeName","src":"14261:4:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14251:15:63"},"scope":16325,"src":"14179:231:63","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[2272],"body":{"id":15220,"nodeType":"Block","src":"14548:144:63","statements":[{"assignments":[15209],"declarations":[{"constant":false,"id":15209,"mutability":"mutable","name":"config","nameLocation":"14579:6:63","nodeType":"VariableDeclaration","scope":15220,"src":"14558:27:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":15208,"nodeType":"UserDefinedTypeName","pathNode":{"id":15207,"name":"PoolFeeConfig","nameLocations":["14558:13:63"],"nodeType":"IdentifierPath","referencedDeclaration":14715,"src":"14558:13:63"},"referencedDeclaration":14715,"src":"14558:13:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":15213,"initialValue":{"baseExpression":{"id":15210,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14738,"src":"14588:32:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$14715_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":15212,"indexExpression":{"id":15211,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15200,"src":"14621:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14588:38:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"14558:68:63"},{"expression":{"components":[{"expression":{"id":15214,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15209,"src":"14645:6:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":15215,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14652:13:63","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":14712,"src":"14645:20:63","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"expression":{"id":15216,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15209,"src":"14667:6:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":15217,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14674:10:63","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":14714,"src":"14667:17:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":15218,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14644:41:63","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint64_$_t_bool_$","typeString":"tuple(uint64,bool)"}},"functionReturnParameters":15206,"id":15219,"nodeType":"Return","src":"14637:48:63"}]},"documentation":{"id":15198,"nodeType":"StructuredDocumentation","src":"14416:38:63","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"7a2b97dc","id":15221,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolProtocolYieldFeeInfo","nameLocation":"14468:27:63","nodeType":"FunctionDefinition","parameters":{"id":15201,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15200,"mutability":"mutable","name":"pool","nameLocation":"14504:4:63","nodeType":"VariableDeclaration","scope":15221,"src":"14496:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15199,"name":"address","nodeType":"ElementaryTypeName","src":"14496:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14495:14:63"},"returnParameters":{"id":15206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15203,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15221,"src":"14533:7:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15202,"name":"uint256","nodeType":"ElementaryTypeName","src":"14533:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15205,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15221,"src":"14542:4:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":15204,"name":"bool","nodeType":"ElementaryTypeName","src":"14542:4:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14532:15:63"},"scope":16325,"src":"14459:233:63","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[2280],"body":{"id":15233,"nodeType":"Block","src":"14828:60:63","statements":[{"expression":{"baseExpression":{"id":15229,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14746,"src":"14845:30:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":15231,"indexExpression":{"id":15230,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15224,"src":"14876:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14845:36:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15228,"id":15232,"nodeType":"Return","src":"14838:43:63"}]},"documentation":{"id":15222,"nodeType":"StructuredDocumentation","src":"14698:38:63","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"0b8e059b","id":15234,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCreatorSwapFeePercentage","nameLocation":"14750:31:63","nodeType":"FunctionDefinition","parameters":{"id":15225,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15224,"mutability":"mutable","name":"pool","nameLocation":"14790:4:63","nodeType":"VariableDeclaration","scope":15234,"src":"14782:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15223,"name":"address","nodeType":"ElementaryTypeName","src":"14782:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14781:14:63"},"returnParameters":{"id":15228,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15227,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15234,"src":"14819:7:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15226,"name":"uint256","nodeType":"ElementaryTypeName","src":"14819:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14818:9:63"},"scope":16325,"src":"14741:147:63","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[2288],"body":{"id":15246,"nodeType":"Block","src":"15025:61:63","statements":[{"expression":{"baseExpression":{"id":15242,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14750,"src":"15042:31:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":15244,"indexExpression":{"id":15243,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15237,"src":"15074:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15042:37:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15241,"id":15245,"nodeType":"Return","src":"15035:44:63"}]},"documentation":{"id":15235,"nodeType":"StructuredDocumentation","src":"14894:38:63","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"0252aab5","id":15247,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCreatorYieldFeePercentage","nameLocation":"14946:32:63","nodeType":"FunctionDefinition","parameters":{"id":15238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15237,"mutability":"mutable","name":"pool","nameLocation":"14987:4:63","nodeType":"VariableDeclaration","scope":15247,"src":"14979:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15236,"name":"address","nodeType":"ElementaryTypeName","src":"14979:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14978:14:63"},"returnParameters":{"id":15241,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15240,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15247,"src":"15016:7:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15239,"name":"uint256","nodeType":"ElementaryTypeName","src":"15016:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15015:9:63"},"scope":16325,"src":"14937:149:63","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[2297],"body":{"id":15299,"nodeType":"Block","src":"15232:273:63","statements":[{"assignments":[15260,15262],"declarations":[{"constant":false,"id":15260,"mutability":"mutable","name":"poolTokens","nameLocation":"15259:10:63","nodeType":"VariableDeclaration","scope":15299,"src":"15243:26:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":15258,"nodeType":"UserDefinedTypeName","pathNode":{"id":15257,"name":"IERC20","nameLocations":["15243:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"15243:6:63"},"referencedDeclaration":40109,"src":"15243:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":15259,"nodeType":"ArrayTypeName","src":"15243:8:63","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":15262,"mutability":"mutable","name":"numTokens","nameLocation":"15279:9:63","nodeType":"VariableDeclaration","scope":15299,"src":"15271:17:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15261,"name":"uint256","nodeType":"ElementaryTypeName","src":"15271:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15266,"initialValue":{"arguments":[{"id":15264,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15250,"src":"15315:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15263,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15590,"src":"15292:22:63","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":15265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15292:28:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"15242:78:63"},{"expression":{"id":15273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15267,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15254,"src":"15331:10:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15271,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15262,"src":"15358:9:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15270,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"15344:13:63","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":15268,"name":"uint256","nodeType":"ElementaryTypeName","src":"15348:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15269,"nodeType":"ArrayTypeName","src":"15348:9:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":15272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15344:24:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"15331:37:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15274,"nodeType":"ExpressionStatement","src":"15331:37:63"},{"body":{"id":15297,"nodeType":"Block","src":"15418:81:63","statements":[{"expression":{"id":15295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":15285,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15254,"src":"15432:10:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15287,"indexExpression":{"id":15286,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15276,"src":"15443:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15432:13:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"baseExpression":{"id":15288,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14757,"src":"15448:19:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":15290,"indexExpression":{"id":15289,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15250,"src":"15468:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15448:25:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":15294,"indexExpression":{"baseExpression":{"id":15291,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15260,"src":"15474:10:63","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":15293,"indexExpression":{"id":15292,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15276,"src":"15485:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15474:13:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15448:40:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15432:56:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15296,"nodeType":"ExpressionStatement","src":"15432:56:63"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15279,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15276,"src":"15398:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":15280,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15262,"src":"15402:9:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15398:13:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15298,"initializationExpression":{"assignments":[15276],"declarations":[{"constant":false,"id":15276,"mutability":"mutable","name":"i","nameLocation":"15391:1:63","nodeType":"VariableDeclaration","scope":15298,"src":"15383:9:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15275,"name":"uint256","nodeType":"ElementaryTypeName","src":"15383:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15278,"initialValue":{"hexValue":"30","id":15277,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15395:1:63","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"15383:13:63"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":15283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"15413:3:63","subExpression":{"id":15282,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15276,"src":"15415:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15284,"nodeType":"ExpressionStatement","src":"15413:3:63"},"nodeType":"ForStatement","src":"15378:121:63"}]},"documentation":{"id":15248,"nodeType":"StructuredDocumentation","src":"15092:38:63","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"8df44c54","id":15300,"implemented":true,"kind":"function","modifiers":[],"name":"getProtocolFeeAmounts","nameLocation":"15144:21:63","nodeType":"FunctionDefinition","parameters":{"id":15251,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15250,"mutability":"mutable","name":"pool","nameLocation":"15174:4:63","nodeType":"VariableDeclaration","scope":15300,"src":"15166:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15249,"name":"address","nodeType":"ElementaryTypeName","src":"15166:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15165:14:63"},"returnParameters":{"id":15255,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15254,"mutability":"mutable","name":"feeAmounts","nameLocation":"15220:10:63","nodeType":"VariableDeclaration","scope":15300,"src":"15203:27:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":15252,"name":"uint256","nodeType":"ElementaryTypeName","src":"15203:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15253,"nodeType":"ArrayTypeName","src":"15203:9:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"15202:29:63"},"scope":16325,"src":"15135:370:63","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[2306],"body":{"id":15352,"nodeType":"Block","src":"15654:276:63","statements":[{"assignments":[15313,15315],"declarations":[{"constant":false,"id":15313,"mutability":"mutable","name":"poolTokens","nameLocation":"15681:10:63","nodeType":"VariableDeclaration","scope":15352,"src":"15665:26:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":15311,"nodeType":"UserDefinedTypeName","pathNode":{"id":15310,"name":"IERC20","nameLocations":["15665:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"15665:6:63"},"referencedDeclaration":40109,"src":"15665:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":15312,"nodeType":"ArrayTypeName","src":"15665:8:63","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":15315,"mutability":"mutable","name":"numTokens","nameLocation":"15701:9:63","nodeType":"VariableDeclaration","scope":15352,"src":"15693:17:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15314,"name":"uint256","nodeType":"ElementaryTypeName","src":"15693:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15319,"initialValue":{"arguments":[{"id":15317,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15303,"src":"15737:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15316,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15590,"src":"15714:22:63","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":15318,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15714:28:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"15664:78:63"},{"expression":{"id":15326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15320,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15307,"src":"15753:10:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15324,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15315,"src":"15780:9:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15323,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"15766:13:63","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":15321,"name":"uint256","nodeType":"ElementaryTypeName","src":"15770:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15322,"nodeType":"ArrayTypeName","src":"15770:9:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":15325,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15766:24:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"15753:37:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15327,"nodeType":"ExpressionStatement","src":"15753:37:63"},{"body":{"id":15350,"nodeType":"Block","src":"15840:84:63","statements":[{"expression":{"id":15348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":15338,"name":"feeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15307,"src":"15854:10:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":15340,"indexExpression":{"id":15339,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15329,"src":"15865:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15854:13:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"baseExpression":{"id":15341,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14764,"src":"15870:22:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":15343,"indexExpression":{"id":15342,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15303,"src":"15893:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15870:28:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":15347,"indexExpression":{"baseExpression":{"id":15344,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15313,"src":"15899:10:63","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":15346,"indexExpression":{"id":15345,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15329,"src":"15910:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15899:13:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15870:43:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15854:59:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15349,"nodeType":"ExpressionStatement","src":"15854:59:63"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15332,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15329,"src":"15820:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":15333,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15315,"src":"15824:9:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15820:13:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15351,"initializationExpression":{"assignments":[15329],"declarations":[{"constant":false,"id":15329,"mutability":"mutable","name":"i","nameLocation":"15813:1:63","nodeType":"VariableDeclaration","scope":15351,"src":"15805:9:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15328,"name":"uint256","nodeType":"ElementaryTypeName","src":"15805:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15331,"initialValue":{"hexValue":"30","id":15330,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15817:1:63","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"15805:13:63"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":15336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"15835:3:63","subExpression":{"id":15335,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15329,"src":"15837:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15337,"nodeType":"ExpressionStatement","src":"15835:3:63"},"nodeType":"ForStatement","src":"15800:124:63"}]},"documentation":{"id":15301,"nodeType":"StructuredDocumentation","src":"15511:38:63","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"9e95f3fd","id":15353,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCreatorFeeAmounts","nameLocation":"15563:24:63","nodeType":"FunctionDefinition","parameters":{"id":15304,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15303,"mutability":"mutable","name":"pool","nameLocation":"15596:4:63","nodeType":"VariableDeclaration","scope":15353,"src":"15588:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15302,"name":"address","nodeType":"ElementaryTypeName","src":"15588:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15587:14:63"},"returnParameters":{"id":15308,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15307,"mutability":"mutable","name":"feeAmounts","nameLocation":"15642:10:63","nodeType":"VariableDeclaration","scope":15353,"src":"15625:27:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":15305,"name":"uint256","nodeType":"ElementaryTypeName","src":"15625:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15306,"nodeType":"ArrayTypeName","src":"15625:9:63","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"15624:29:63"},"scope":16325,"src":"15554:376:63","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[2316],"body":{"id":15368,"nodeType":"Block","src":"16137:103:63","statements":[{"expression":{"arguments":[{"id":15364,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15356,"src":"16185:21:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15365,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15358,"src":"16208:24:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15363,"name":"_computeAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15530,"src":"16154:30:63","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":15366,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16154:79:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15362,"id":15367,"nodeType":"Return","src":"16147:86:63"}]},"documentation":{"id":15354,"nodeType":"StructuredDocumentation","src":"15936:38:63","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"0ddd60c6","id":15369,"implemented":true,"kind":"function","modifiers":[],"name":"computeAggregateFeePercentage","nameLocation":"15988:29:63","nodeType":"FunctionDefinition","parameters":{"id":15359,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15356,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"16035:21:63","nodeType":"VariableDeclaration","scope":15369,"src":"16027:29:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15355,"name":"uint256","nodeType":"ElementaryTypeName","src":"16027:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15358,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"16074:24:63","nodeType":"VariableDeclaration","scope":15369,"src":"16066:32:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15357,"name":"uint256","nodeType":"ElementaryTypeName","src":"16066:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16017:87:63"},"returnParameters":{"id":15362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15361,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15369,"src":"16128:7:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15360,"name":"uint256","nodeType":"ElementaryTypeName","src":"16128:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16127:9:63"},"scope":16325,"src":"15979:261:63","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[2322],"body":{"id":15406,"nodeType":"Block","src":"16374:347:63","statements":[{"assignments":[15380],"declarations":[{"constant":false,"id":15380,"mutability":"mutable","name":"feeConfig","nameLocation":"16405:9:63","nodeType":"VariableDeclaration","scope":15406,"src":"16384:30:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":15379,"nodeType":"UserDefinedTypeName","pathNode":{"id":15378,"name":"PoolFeeConfig","nameLocations":["16384:13:63"],"nodeType":"IdentifierPath","referencedDeclaration":14715,"src":"16384:13:63"},"referencedDeclaration":14715,"src":"16384:13:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":15384,"initialValue":{"baseExpression":{"id":15381,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14733,"src":"16417:31:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$14715_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":15383,"indexExpression":{"id":15382,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15372,"src":"16449:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16417:37:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"16384:70:63"},{"assignments":[15386],"declarations":[{"constant":false,"id":15386,"mutability":"mutable","name":"globalProtocolSwapFee","nameLocation":"16472:21:63","nodeType":"VariableDeclaration","scope":15406,"src":"16464:29:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15385,"name":"uint256","nodeType":"ElementaryTypeName","src":"16464:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15388,"initialValue":{"id":15387,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14726,"src":"16496:32:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16464:64:63"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":15397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":15392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15389,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15380,"src":"16543:9:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":15390,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16553:10:63","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":14714,"src":"16543:20:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":15391,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16567:5:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"16543:29:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15393,"name":"globalProtocolSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15386,"src":"16576:21:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":15394,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15380,"src":"16601:9:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":15395,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16611:13:63","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":14712,"src":"16601:23:63","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"16576:48:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16543:81:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15405,"nodeType":"IfStatement","src":"16539:176:63","trueBody":{"id":15404,"nodeType":"Block","src":"16626:89:63","statements":[{"expression":{"arguments":[{"id":15399,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15372,"src":"16669:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15400,"name":"globalProtocolSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15386,"src":"16675:21:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":15401,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16698:5:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":15398,"name":"_updatePoolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16265,"src":"16640:28:63","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":15402,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16640:64:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15403,"nodeType":"ExpressionStatement","src":"16640:64:63"}]}}]},"documentation":{"id":15370,"nodeType":"StructuredDocumentation","src":"16246:38:63","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"71ecc8fb","id":15407,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":15375,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15372,"src":"16368:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":15376,"kind":"modifierInvocation","modifierName":{"id":15374,"name":"withLatestFees","nameLocations":["16353:14:63"],"nodeType":"IdentifierPath","referencedDeclaration":14842,"src":"16353:14:63"},"nodeType":"ModifierInvocation","src":"16353:20:63"}],"name":"updateProtocolSwapFeePercentage","nameLocation":"16298:31:63","nodeType":"FunctionDefinition","parameters":{"id":15373,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15372,"mutability":"mutable","name":"pool","nameLocation":"16338:4:63","nodeType":"VariableDeclaration","scope":15407,"src":"16330:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15371,"name":"address","nodeType":"ElementaryTypeName","src":"16330:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16329:14:63"},"returnParameters":{"id":15377,"nodeType":"ParameterList","parameters":[],"src":"16374:0:63"},"scope":16325,"src":"16289:432:63","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2328],"body":{"id":15444,"nodeType":"Block","src":"16856:353:63","statements":[{"assignments":[15418],"declarations":[{"constant":false,"id":15418,"mutability":"mutable","name":"feeConfig","nameLocation":"16887:9:63","nodeType":"VariableDeclaration","scope":15444,"src":"16866:30:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"},"typeName":{"id":15417,"nodeType":"UserDefinedTypeName","pathNode":{"id":15416,"name":"PoolFeeConfig","nameLocations":["16866:13:63"],"nodeType":"IdentifierPath","referencedDeclaration":14715,"src":"16866:13:63"},"referencedDeclaration":14715,"src":"16866:13:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_storage_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig"}},"visibility":"internal"}],"id":15422,"initialValue":{"baseExpression":{"id":15419,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14738,"src":"16899:32:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$14715_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":15421,"indexExpression":{"id":15420,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15410,"src":"16932:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16899:38:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"VariableDeclarationStatement","src":"16866:71:63"},{"assignments":[15424],"declarations":[{"constant":false,"id":15424,"mutability":"mutable","name":"globalProtocolYieldFee","nameLocation":"16955:22:63","nodeType":"VariableDeclaration","scope":15444,"src":"16947:30:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15423,"name":"uint256","nodeType":"ElementaryTypeName","src":"16947:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15426,"initialValue":{"id":15425,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14728,"src":"16980:33:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16947:66:63"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":15435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":15430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":15427,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15418,"src":"17028:9:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":15428,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17038:10:63","memberName":"isOverride","nodeType":"MemberAccess","referencedDeclaration":14714,"src":"17028:20:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":15429,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17052:5:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"17028:29:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15431,"name":"globalProtocolYieldFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15424,"src":"17061:22:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":15432,"name":"feeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15418,"src":"17087:9:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"id":15433,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17097:13:63","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":14712,"src":"17087:23:63","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17061:49:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"17028:82:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15443,"nodeType":"IfStatement","src":"17024:179:63","trueBody":{"id":15442,"nodeType":"Block","src":"17112:91:63","statements":[{"expression":{"arguments":[{"id":15437,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15410,"src":"17156:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15438,"name":"globalProtocolYieldFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15424,"src":"17162:22:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":15439,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17186:5:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":15436,"name":"_updatePoolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16303,"src":"17126:29:63","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":15440,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17126:66:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15441,"nodeType":"ExpressionStatement","src":"17126:66:63"}]}}]},"documentation":{"id":15408,"nodeType":"StructuredDocumentation","src":"16727:38:63","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"71447ea8","id":15445,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":15413,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15410,"src":"16850:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":15414,"kind":"modifierInvocation","modifierName":{"id":15412,"name":"withLatestFees","nameLocations":["16835:14:63"],"nodeType":"IdentifierPath","referencedDeclaration":14842,"src":"16835:14:63"},"nodeType":"ModifierInvocation","src":"16835:20:63"}],"name":"updateProtocolYieldFeePercentage","nameLocation":"16779:32:63","nodeType":"FunctionDefinition","parameters":{"id":15411,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15410,"mutability":"mutable","name":"pool","nameLocation":"16820:4:63","nodeType":"VariableDeclaration","scope":15445,"src":"16812:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15409,"name":"address","nodeType":"ElementaryTypeName","src":"16812:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16811:14:63"},"returnParameters":{"id":15415,"nodeType":"ParameterList","parameters":[],"src":"16856:0:63"},"scope":16325,"src":"16770:439:63","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":15499,"nodeType":"Block","src":"17322:594:63","statements":[{"assignments":[15456],"declarations":[{"constant":false,"id":15456,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"17340:21:63","nodeType":"VariableDeclaration","scope":15499,"src":"17332:29:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15455,"name":"uint256","nodeType":"ElementaryTypeName","src":"17332:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15457,"nodeType":"VariableDeclarationStatement","src":"17332:29:63"},{"assignments":[15459],"declarations":[{"constant":false,"id":15459,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"17379:24:63","nodeType":"VariableDeclaration","scope":15499,"src":"17371:32:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15458,"name":"uint256","nodeType":"ElementaryTypeName","src":"17371:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":15460,"nodeType":"VariableDeclarationStatement","src":"17371:32:63"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":15464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15461,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15450,"src":"17418:7:63","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":15462,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14709,"src":"17429:15:63","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$14709_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":15463,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"17445:4:63","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":14707,"src":"17429:20:63","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"17418:31:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":15492,"nodeType":"Block","src":"17634:179:63","statements":[{"expression":{"id":15484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15479,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15456,"src":"17648:21:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":15480,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14738,"src":"17672:32:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$14715_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":15482,"indexExpression":{"id":15481,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15447,"src":"17705:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17672:38:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":15483,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17711:13:63","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":14712,"src":"17672:52:63","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17648:76:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15485,"nodeType":"ExpressionStatement","src":"17648:76:63"},{"expression":{"id":15490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15486,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15459,"src":"17738:24:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":15487,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14750,"src":"17765:31:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":15489,"indexExpression":{"id":15488,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15447,"src":"17797:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17765:37:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17738:64:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15491,"nodeType":"ExpressionStatement","src":"17738:64:63"}]},"id":15493,"nodeType":"IfStatement","src":"17414:399:63","trueBody":{"id":15478,"nodeType":"Block","src":"17451:177:63","statements":[{"expression":{"id":15470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15465,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15456,"src":"17465:21:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"baseExpression":{"id":15466,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14733,"src":"17489:31:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$14715_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":15468,"indexExpression":{"id":15467,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15447,"src":"17521:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17489:37:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":15469,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17527:13:63","memberName":"feePercentage","nodeType":"MemberAccess","referencedDeclaration":14712,"src":"17489:51:63","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"17465:75:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15471,"nodeType":"ExpressionStatement","src":"17465:75:63"},{"expression":{"id":15476,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15472,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15459,"src":"17554:24:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":15473,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14746,"src":"17581:30:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":15475,"indexExpression":{"id":15474,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15447,"src":"17612:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17581:36:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17554:63:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15477,"nodeType":"ExpressionStatement","src":"17554:63:63"}]}},{"expression":{"arguments":[{"id":15495,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15456,"src":"17861:21:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15496,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15459,"src":"17884:24:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15494,"name":"_computeAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15530,"src":"17830:30:63","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":15497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17830:79:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":15454,"id":15498,"nodeType":"Return","src":"17823:86:63"}]},"id":15500,"implemented":true,"kind":"function","modifiers":[],"name":"_getAggregateFeePercentage","nameLocation":"17224:26:63","nodeType":"FunctionDefinition","parameters":{"id":15451,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15447,"mutability":"mutable","name":"pool","nameLocation":"17259:4:63","nodeType":"VariableDeclaration","scope":15500,"src":"17251:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15446,"name":"address","nodeType":"ElementaryTypeName","src":"17251:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15450,"mutability":"mutable","name":"feeType","nameLocation":"17281:7:63","nodeType":"VariableDeclaration","scope":15500,"src":"17265:23:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"typeName":{"id":15449,"nodeType":"UserDefinedTypeName","pathNode":{"id":15448,"name":"ProtocolFeeType","nameLocations":["17265:15:63"],"nodeType":"IdentifierPath","referencedDeclaration":14709,"src":"17265:15:63"},"referencedDeclaration":14709,"src":"17265:15:63","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"visibility":"internal"}],"src":"17250:39:63"},"returnParameters":{"id":15454,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15453,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15500,"src":"17313:7:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15452,"name":"uint256","nodeType":"ElementaryTypeName","src":"17313:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17312:9:63"},"scope":16325,"src":"17215:701:63","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":15529,"nodeType":"Block","src":"18104:882:63","statements":[{"expression":{"id":15518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15509,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15507,"src":"18114:22:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15510,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15502,"src":"18151:21:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"id":15515,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15504,"src":"18230:24:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15511,"name":"protocolFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15502,"src":"18187:21:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18209:10:63","memberName":"complement","nodeType":"MemberAccess","referencedDeclaration":8207,"src":"18187:32:63","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":15513,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18187:34:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18222:7:63","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":7953,"src":"18187:42:63","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":15516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18187:68:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18151:104:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18114:141:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15519,"nodeType":"ExpressionStatement","src":"18114:141:63"},{"expression":{"id":15527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15520,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15507,"src":"18888:22:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":15523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15521,"name":"aggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15507,"src":"18914:22:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":15522,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4868,"src":"18939:18:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18914:43:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15524,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"18913:45:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":15525,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4868,"src":"18961:18:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18913:66:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18888:91:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15528,"nodeType":"ExpressionStatement","src":"18888:91:63"}]},"id":15530,"implemented":true,"kind":"function","modifiers":[],"name":"_computeAggregateFeePercentage","nameLocation":"17931:30:63","nodeType":"FunctionDefinition","parameters":{"id":15505,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15502,"mutability":"mutable","name":"protocolFeePercentage","nameLocation":"17979:21:63","nodeType":"VariableDeclaration","scope":15530,"src":"17971:29:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15501,"name":"uint256","nodeType":"ElementaryTypeName","src":"17971:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15504,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"18018:24:63","nodeType":"VariableDeclaration","scope":15530,"src":"18010:32:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15503,"name":"uint256","nodeType":"ElementaryTypeName","src":"18010:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17961:87:63"},"returnParameters":{"id":15508,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15507,"mutability":"mutable","name":"aggregateFeePercentage","nameLocation":"18080:22:63","nodeType":"VariableDeclaration","scope":15530,"src":"18072:30:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15506,"name":"uint256","nodeType":"ElementaryTypeName","src":"18072:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18071:32:63"},"scope":16325,"src":"17922:1064:63","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":15565,"nodeType":"Block","src":"19056:276:63","statements":[{"assignments":[15536],"declarations":[{"constant":false,"id":15536,"mutability":"mutable","name":"poolCreator","nameLocation":"19074:11:63","nodeType":"VariableDeclaration","scope":15565,"src":"19066:19:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15535,"name":"address","nodeType":"ElementaryTypeName","src":"19066:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":15540,"initialValue":{"arguments":[{"id":15538,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15532,"src":"19104:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15537,"name":"_getPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15609,"src":"19088:15:63","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_address_$","typeString":"function (address) view returns (address)"}},"id":15539,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19088:21:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"19066:43:63"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":15546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15541,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15536,"src":"19124:11:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":15544,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19147:1:63","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":15543,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19139:7:63","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15542,"name":"address","nodeType":"ElementaryTypeName","src":"19139:7:63","typeDescriptions":{}}},"id":15545,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19139:10:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"19124:25:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15552,"nodeType":"IfStatement","src":"19120:93:63","trueBody":{"id":15551,"nodeType":"Block","src":"19151:62:63","statements":[{"errorCall":{"arguments":[{"id":15548,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15532,"src":"19197:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15547,"name":"PoolCreatorNotRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2209,"src":"19172:24:63","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":15549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19172:30:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15550,"nodeType":"RevertStatement","src":"19165:37:63"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":15556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15553,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15536,"src":"19227:11:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":15554,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19242:3:63","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":15555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19246:6:63","memberName":"sender","nodeType":"MemberAccess","src":"19242:10:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"19227:25:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15564,"nodeType":"IfStatement","src":"19223:103:63","trueBody":{"id":15563,"nodeType":"Block","src":"19254:72:63","statements":[{"errorCall":{"arguments":[{"expression":{"id":15558,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19298:3:63","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":15559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19302:6:63","memberName":"sender","nodeType":"MemberAccess","src":"19298:10:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15560,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15532,"src":"19310:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":15557,"name":"CallerIsNotPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2216,"src":"19275:22:63","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address) pure returns (error)"}},"id":15561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19275:40:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15562,"nodeType":"RevertStatement","src":"19268:47:63"}]}}]},"id":15566,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureCallerIsPoolCreator","nameLocation":"19001:26:63","nodeType":"FunctionDefinition","parameters":{"id":15533,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15532,"mutability":"mutable","name":"pool","nameLocation":"19036:4:63","nodeType":"VariableDeclaration","scope":15566,"src":"19028:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15531,"name":"address","nodeType":"ElementaryTypeName","src":"19028:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19027:14:63"},"returnParameters":{"id":15534,"nodeType":"ParameterList","parameters":[],"src":"19056:0:63"},"scope":16325,"src":"18992:340:63","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":15589,"nodeType":"Block","src":"19450:87:63","statements":[{"expression":{"id":15582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15577,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15573,"src":"19460:6:63","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":15580,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15568,"src":"19490:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":15578,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"19469:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":15579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19476:13:63","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":4145,"src":"19469:20:63","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":15581,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19469:26:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"src":"19460:35:63","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":15583,"nodeType":"ExpressionStatement","src":"19460:35:63"},{"expression":{"id":15587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15584,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15575,"src":"19505:9:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":15585,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15573,"src":"19517:6:63","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":15586,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19524:6:63","memberName":"length","nodeType":"MemberAccess","src":"19517:13:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19505:25:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15588,"nodeType":"ExpressionStatement","src":"19505:25:63"}]},"id":15590,"implemented":true,"kind":"function","modifiers":[],"name":"_getPoolTokensAndCount","nameLocation":"19347:22:63","nodeType":"FunctionDefinition","parameters":{"id":15569,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15568,"mutability":"mutable","name":"pool","nameLocation":"19378:4:63","nodeType":"VariableDeclaration","scope":15590,"src":"19370:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15567,"name":"address","nodeType":"ElementaryTypeName","src":"19370:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19369:14:63"},"returnParameters":{"id":15576,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15573,"mutability":"mutable","name":"tokens","nameLocation":"19423:6:63","nodeType":"VariableDeclaration","scope":15590,"src":"19407:22:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":15571,"nodeType":"UserDefinedTypeName","pathNode":{"id":15570,"name":"IERC20","nameLocations":["19407:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"19407:6:63"},"referencedDeclaration":40109,"src":"19407:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":15572,"nodeType":"ArrayTypeName","src":"19407:8:63","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":15575,"mutability":"mutable","name":"numTokens","nameLocation":"19439:9:63","nodeType":"VariableDeclaration","scope":15590,"src":"19431:17:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15574,"name":"uint256","nodeType":"ElementaryTypeName","src":"19431:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19406:43:63"},"scope":16325,"src":"19338:199:63","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":15608,"nodeType":"Block","src":"19674:130:63","statements":[{"assignments":[15599],"declarations":[{"constant":false,"id":15599,"mutability":"mutable","name":"roleAccounts","nameLocation":"19708:12:63","nodeType":"VariableDeclaration","scope":15608,"src":"19684:36:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":15598,"nodeType":"UserDefinedTypeName","pathNode":{"id":15597,"name":"PoolRoleAccounts","nameLocations":["19684:16:63"],"nodeType":"IdentifierPath","referencedDeclaration":4677,"src":"19684:16:63"},"referencedDeclaration":4677,"src":"19684:16:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"id":15604,"initialValue":{"arguments":[{"id":15602,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15592,"src":"19750:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":15600,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"19723:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":15601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19730:19:63","memberName":"getPoolRoleAccounts","nodeType":"MemberAccess","referencedDeclaration":4342,"src":"19723:26:63","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_PoolRoleAccounts_$4677_memory_ptr_$","typeString":"function (address) view external returns (struct PoolRoleAccounts memory)"}},"id":15603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19723:32:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"nodeType":"VariableDeclarationStatement","src":"19684:71:63"},{"expression":{"expression":{"id":15605,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15599,"src":"19773:12:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"id":15606,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19786:11:63","memberName":"poolCreator","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"19773:24:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":15596,"id":15607,"nodeType":"Return","src":"19766:31:63"}]},"id":15609,"implemented":true,"kind":"function","modifiers":[],"name":"_getPoolCreator","nameLocation":"19612:15:63","nodeType":"FunctionDefinition","parameters":{"id":15593,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15592,"mutability":"mutable","name":"pool","nameLocation":"19636:4:63","nodeType":"VariableDeclaration","scope":15609,"src":"19628:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15591,"name":"address","nodeType":"ElementaryTypeName","src":"19628:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19627:14:63"},"returnParameters":{"id":15596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15595,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":15609,"src":"19665:7:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15594,"name":"address","nodeType":"ElementaryTypeName","src":"19665:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19664:9:63"},"scope":16325,"src":"19603:201:63","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":15727,"nodeType":"Block","src":"21015:1936:63","statements":[{"assignments":[15617],"declarations":[{"constant":false,"id":15617,"mutability":"mutable","name":"oldFeeController","nameLocation":"21048:16:63","nodeType":"VariableDeclaration","scope":15727,"src":"21025:39:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"},"typeName":{"id":15616,"nodeType":"UserDefinedTypeName","pathNode":{"id":15615,"name":"IProtocolFeeController","nameLocations":["21025:22:63"],"nodeType":"IdentifierPath","referencedDeclaration":2420,"src":"21025:22:63"},"referencedDeclaration":2420,"src":"21025:22:63","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"id":15621,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15618,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"21067:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":15619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21074:24:63","memberName":"getProtocolFeeController","nodeType":"MemberAccess","referencedDeclaration":4360,"src":"21067:31:63","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IProtocolFeeController_$2420_$","typeString":"function () view external returns (contract IProtocolFeeController)"}},"id":15620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21067:33:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}},"nodeType":"VariableDeclarationStatement","src":"21025:75:63"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":15630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":15624,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15617,"src":"21123:16:63","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}],"id":15623,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21115:7:63","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15622,"name":"address","nodeType":"ElementaryTypeName","src":"21115:7:63","typeDescriptions":{}}},"id":15625,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21115:25:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":15628,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"21152:4:63","typeDescriptions":{"typeIdentifier":"t_contract$_ProtocolFeeController_$16325","typeString":"contract ProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_ProtocolFeeController_$16325","typeString":"contract ProtocolFeeController"}],"id":15627,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21144:7:63","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":15626,"name":"address","nodeType":"ElementaryTypeName","src":"21144:7:63","typeDescriptions":{}}},"id":15629,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21144:13:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21115:42:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15635,"nodeType":"IfStatement","src":"21111:104:63","trueBody":{"id":15634,"nodeType":"Block","src":"21159:56:63","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":15631,"name":"InvalidMigrationSource","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14772,"src":"21180:22:63","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":15632,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21180:24:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15633,"nodeType":"RevertStatement","src":"21173:31:63"}]}},{"condition":{"baseExpression":{"id":15636,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14742,"src":"21229:16:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":15638,"indexExpression":{"id":15637,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15612,"src":"21246:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21229:22:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15644,"nodeType":"IfStatement","src":"21225:87:63","trueBody":{"id":15643,"nodeType":"Block","src":"21253:59:63","statements":[{"errorCall":{"arguments":[{"id":15640,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15612,"src":"21296:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":15639,"name":"PoolAlreadyRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14769,"src":"21274:21:63","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":15641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21274:27:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":15642,"nodeType":"RevertStatement","src":"21267:34:63"}]}},{"expression":{"id":15649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":15645,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14742,"src":"21322:16:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":15647,"indexExpression":{"id":15646,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15612,"src":"21339:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21322:22:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":15648,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"21347:4:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"21322:29:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15650,"nodeType":"ExpressionStatement","src":"21322:29:63"},{"assignments":[15652,15654],"declarations":[{"constant":false,"id":15652,"mutability":"mutable","name":"protocolSwapFeePercentage","nameLocation":"21371:25:63","nodeType":"VariableDeclaration","scope":15727,"src":"21363:33:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15651,"name":"uint256","nodeType":"ElementaryTypeName","src":"21363:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15654,"mutability":"mutable","name":"swapFeeIsOverride","nameLocation":"21403:17:63","nodeType":"VariableDeclaration","scope":15727,"src":"21398:22:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":15653,"name":"bool","nodeType":"ElementaryTypeName","src":"21398:4:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":15659,"initialValue":{"arguments":[{"id":15657,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15612,"src":"21468:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":15655,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15617,"src":"21424:16:63","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}},"id":15656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21441:26:63","memberName":"getPoolProtocolSwapFeeInfo","nodeType":"MemberAccess","referencedDeclaration":2262,"src":"21424:43:63","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$_t_bool_$","typeString":"function (address) view external returns (uint256,bool)"}},"id":15658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21424:49:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"21362:111:63"},{"expression":{"id":15669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":15660,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14733,"src":"21483:31:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$14715_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":15662,"indexExpression":{"id":15661,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15612,"src":"21515:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21483:37:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15664,"name":"protocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15652,"src":"21566:25:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21592:8:63","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":43927,"src":"21566:34:63","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":15666,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21566:36:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":15667,"name":"swapFeeIsOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15654,"src":"21628:17:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":15663,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14715,"src":"21523:13:63","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$14715_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":15668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["21551:13:63","21616:10:63"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"21523:133:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"21483:173:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":15670,"nodeType":"ExpressionStatement","src":"21483:173:63"},{"assignments":[15672,15674],"declarations":[{"constant":false,"id":15672,"mutability":"mutable","name":"protocolYieldFeePercentage","nameLocation":"21676:26:63","nodeType":"VariableDeclaration","scope":15727,"src":"21668:34:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15671,"name":"uint256","nodeType":"ElementaryTypeName","src":"21668:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15674,"mutability":"mutable","name":"yieldFeeIsOverride","nameLocation":"21709:18:63","nodeType":"VariableDeclaration","scope":15727,"src":"21704:23:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":15673,"name":"bool","nodeType":"ElementaryTypeName","src":"21704:4:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":15679,"initialValue":{"arguments":[{"id":15677,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15612,"src":"21789:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":15675,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15617,"src":"21731:16:63","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}},"id":15676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21748:27:63","memberName":"getPoolProtocolYieldFeeInfo","nodeType":"MemberAccess","referencedDeclaration":2272,"src":"21731:44:63","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$_t_bool_$","typeString":"function (address) view external returns (uint256,bool)"}},"id":15678,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21731:72:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_bool_$","typeString":"tuple(uint256,bool)"}},"nodeType":"VariableDeclarationStatement","src":"21667:136:63"},{"expression":{"id":15689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":15680,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14738,"src":"21813:32:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$14715_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":15682,"indexExpression":{"id":15681,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15612,"src":"21846:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21813:38:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15684,"name":"protocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15672,"src":"21897:26:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15685,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21924:8:63","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":43927,"src":"21897:35:63","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":15686,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21897:37:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":15687,"name":"yieldFeeIsOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15674,"src":"21960:18:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":15683,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14715,"src":"21854:13:63","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$14715_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":15688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["21882:13:63","21948:10:63"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"21854:135:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"21813:176:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":15690,"nodeType":"ExpressionStatement","src":"21813:176:63"},{"clauses":[{"block":{"id":15704,"nodeType":"Block","src":"22623:92:63","statements":[{"expression":{"id":15702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":15698,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14746,"src":"22637:30:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":15700,"indexExpression":{"id":15699,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15612,"src":"22668:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22637:36:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15701,"name":"poolCreatorSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15696,"src":"22676:28:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22637:67:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15703,"nodeType":"ExpressionStatement","src":"22637:67:63"}]},"errorName":"","id":15705,"nodeType":"TryCatchClause","parameters":{"id":15697,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15696,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"22593:28:63","nodeType":"VariableDeclaration","scope":15705,"src":"22585:36:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15695,"name":"uint256","nodeType":"ElementaryTypeName","src":"22585:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22584:38:63"},"src":"22576:139:63"},{"block":{"id":15706,"nodeType":"Block","src":"22722:2:63","statements":[]},"errorName":"","id":15707,"nodeType":"TryCatchClause","src":"22716:8:63"}],"externalCall":{"arguments":[{"id":15693,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15612,"src":"22570:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":15691,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15617,"src":"22521:16:63","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}},"id":15692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22538:31:63","memberName":"getPoolCreatorSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2280,"src":"22521:48:63","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":15694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22521:54:63","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15708,"nodeType":"TryStatement","src":"22517:207:63"},{"clauses":[{"block":{"id":15722,"nodeType":"Block","src":"22842:94:63","statements":[{"expression":{"id":15720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":15716,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14750,"src":"22856:31:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":15718,"indexExpression":{"id":15717,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15612,"src":"22888:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22856:37:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15719,"name":"poolCreatorYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15714,"src":"22896:29:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22856:69:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15721,"nodeType":"ExpressionStatement","src":"22856:69:63"}]},"errorName":"","id":15723,"nodeType":"TryCatchClause","parameters":{"id":15715,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15714,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"22811:29:63","nodeType":"VariableDeclaration","scope":15723,"src":"22803:37:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15713,"name":"uint256","nodeType":"ElementaryTypeName","src":"22803:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22802:39:63"},"src":"22794:142:63"},{"block":{"id":15724,"nodeType":"Block","src":"22943:2:63","statements":[]},"errorName":"","id":15725,"nodeType":"TryCatchClause","src":"22937:8:63"}],"externalCall":{"arguments":[{"id":15711,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15612,"src":"22788:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":15709,"name":"oldFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15617,"src":"22738:16:63","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}},"id":15710,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22755:32:63","memberName":"getPoolCreatorYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2288,"src":"22738:49:63","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":15712,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22738:55:63","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15726,"nodeType":"TryStatement","src":"22734:211:63"}]},"documentation":{"id":15610,"nodeType":"StructuredDocumentation","src":"20021:945:63","text":" @notice Not exposed in the interface, this enables migration of hidden pool state.\n @dev Permission should NEVER be granted to this function outside of a migration contract. It is necessary to\n permit migration of the `ProtocolFeeController` with all state (in particular, protocol fee overrides and pool\n creator fees) that cannot be written outside of the `registerPool` function called by the Vault during pool\n deployment.\n Even if governance were to grant permission to call this function, the `_registeredPools` latch keeps it safe,\n guaranteeing that it is impossible to use this function to change anything after registration. A pool can only\n be registered / configured once - either copied to a new controller in the migration context, or added normally\n through the Vault calling `registerPool`.\n @param pool The address of the pool to be migrated"},"functionSelector":"0874327f","id":15728,"implemented":true,"kind":"function","modifiers":[],"name":"migratePool","nameLocation":"20980:11:63","nodeType":"FunctionDefinition","parameters":{"id":15613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15612,"mutability":"mutable","name":"pool","nameLocation":"21000:4:63","nodeType":"VariableDeclaration","scope":15728,"src":"20992:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15611,"name":"address","nodeType":"ElementaryTypeName","src":"20992:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"20991:14:63"},"returnParameters":{"id":15614,"nodeType":"ParameterList","parameters":[],"src":"21015:0:63"},"scope":16325,"src":"20971:1980:63","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2342],"body":{"id":15804,"nodeType":"Block","src":"23430:1540:63","statements":[{"expression":{"id":15748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":15744,"name":"_registeredPools","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14742,"src":"23440:16:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":15746,"indexExpression":{"id":15745,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15731,"src":"23457:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23440:22:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":15747,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"23465:4:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"23440:29:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":15749,"nodeType":"ExpressionStatement","src":"23440:29:63"},{"expression":{"id":15755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15750,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15740,"src":"23569:26:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"id":15751,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15735,"src":"23598:17:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":15753,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14726,"src":"23622:32:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"23598:56:63","trueExpression":{"hexValue":"30","id":15752,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23618:1:63","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23569:85:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15756,"nodeType":"ExpressionStatement","src":"23569:85:63"},{"expression":{"id":15762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15757,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15742,"src":"23664:27:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"id":15758,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15735,"src":"23694:17:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":15760,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14728,"src":"23718:33:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"23694:57:63","trueExpression":{"hexValue":"30","id":15759,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23714:1:63","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23664:87:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15763,"nodeType":"ExpressionStatement","src":"23664:87:63"},{"expression":{"id":15773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":15764,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14733,"src":"24199:31:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$14715_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":15766,"indexExpression":{"id":15765,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15731,"src":"24231:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24199:37:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15768,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15740,"src":"24282:26:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24309:8:63","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":43927,"src":"24282:35:63","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":15770,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24282:37:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":15771,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15735,"src":"24345:17:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":15767,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14715,"src":"24239:13:63","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$14715_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":15772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["24267:13:63","24333:10:63"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"24239:134:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"24199:174:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":15774,"nodeType":"ExpressionStatement","src":"24199:174:63"},{"expression":{"id":15784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":15775,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14738,"src":"24383:32:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$14715_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":15777,"indexExpression":{"id":15776,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15731,"src":"24416:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24383:38:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":15779,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15742,"src":"24467:27:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24495:8:63","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":43927,"src":"24467:36:63","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":15781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24467:38:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":15782,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15735,"src":"24531:17:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":15778,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14715,"src":"24424:13:63","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$14715_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":15783,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["24452:13:63","24519:10:63"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"24424:135:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"24383:176:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":15785,"nodeType":"ExpressionStatement","src":"24383:176:63"},{"eventCall":{"arguments":[{"id":15787,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15731,"src":"24719:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15788,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15740,"src":"24725:26:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15789,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15735,"src":"24753:17:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":15786,"name":"InitialPoolAggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2180,"src":"24681:37:63","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":15790,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24681:90:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15791,"nodeType":"EmitStatement","src":"24676:95:63"},{"eventCall":{"arguments":[{"id":15793,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15731,"src":"24825:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15794,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15742,"src":"24831:27:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":15795,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15735,"src":"24860:17:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":15792,"name":"InitialPoolAggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2189,"src":"24786:38:63","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":15796,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24786:92:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15797,"nodeType":"EmitStatement","src":"24781:97:63"},{"eventCall":{"arguments":[{"id":15799,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15731,"src":"24926:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15800,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15733,"src":"24932:11:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15801,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15735,"src":"24945:17:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":15798,"name":"PoolRegisteredWithFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2198,"src":"24894:31:63","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$","typeString":"function (address,address,bool)"}},"id":15802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24894:69:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15803,"nodeType":"EmitStatement","src":"24889:74:63"}]},"documentation":{"id":15729,"nodeType":"StructuredDocumentation","src":"23175:38:63","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"77ff76e7","id":15805,"implemented":true,"kind":"function","modifiers":[{"id":15738,"kind":"modifierInvocation","modifierName":{"id":15737,"name":"onlyVault","nameLocations":["23338:9:63"],"nodeType":"IdentifierPath","referencedDeclaration":28128,"src":"23338:9:63"},"nodeType":"ModifierInvocation","src":"23338:9:63"}],"name":"registerPool","nameLocation":"23227:12:63","nodeType":"FunctionDefinition","parameters":{"id":15736,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15731,"mutability":"mutable","name":"pool","nameLocation":"23257:4:63","nodeType":"VariableDeclaration","scope":15805,"src":"23249:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15730,"name":"address","nodeType":"ElementaryTypeName","src":"23249:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15733,"mutability":"mutable","name":"poolCreator","nameLocation":"23279:11:63","nodeType":"VariableDeclaration","scope":15805,"src":"23271:19:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15732,"name":"address","nodeType":"ElementaryTypeName","src":"23271:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15735,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"23305:17:63","nodeType":"VariableDeclaration","scope":15805,"src":"23300:22:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":15734,"name":"bool","nodeType":"ElementaryTypeName","src":"23300:4:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"23239:89:63"},"returnParameters":{"id":15743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15740,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"23365:26:63","nodeType":"VariableDeclaration","scope":15805,"src":"23357:34:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15739,"name":"uint256","nodeType":"ElementaryTypeName","src":"23357:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15742,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"23401:27:63","nodeType":"VariableDeclaration","scope":15805,"src":"23393:35:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15741,"name":"uint256","nodeType":"ElementaryTypeName","src":"23393:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23356:73:63"},"scope":16325,"src":"23218:1752:63","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2348],"body":{"id":15824,"nodeType":"Block","src":"25184:164:63","statements":[{"expression":{"id":15818,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15816,"name":"_globalProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14726,"src":"25194:32:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15817,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15808,"src":"25229:28:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25194:63:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15819,"nodeType":"ExpressionStatement","src":"25194:63:63"},{"eventCall":{"arguments":[{"id":15821,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15808,"src":"25312:28:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15820,"name":"GlobalProtocolSwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2094,"src":"25273:38:63","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":15822,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25273:68:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15823,"nodeType":"EmitStatement","src":"25268:73:63"}]},"documentation":{"id":15806,"nodeType":"StructuredDocumentation","src":"24976:38:63","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"8a3c5c69","id":15825,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":15811,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15808,"src":"25141:28:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15812,"kind":"modifierInvocation","modifierName":{"id":15810,"name":"withValidSwapFee","nameLocations":["25124:16:63"],"nodeType":"IdentifierPath","referencedDeclaration":14800,"src":"25124:16:63"},"nodeType":"ModifierInvocation","src":"25124:46:63"},{"id":15814,"kind":"modifierInvocation","modifierName":{"id":15813,"name":"authenticate","nameLocations":["25171:12:63"],"nodeType":"IdentifierPath","referencedDeclaration":5446,"src":"25171:12:63"},"nodeType":"ModifierInvocation","src":"25171:12:63"}],"name":"setGlobalProtocolSwapFeePercentage","nameLocation":"25028:34:63","nodeType":"FunctionDefinition","parameters":{"id":15809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15808,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"25080:28:63","nodeType":"VariableDeclaration","scope":15825,"src":"25072:36:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15807,"name":"uint256","nodeType":"ElementaryTypeName","src":"25072:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25062:52:63"},"returnParameters":{"id":15815,"nodeType":"ParameterList","parameters":[],"src":"25184:0:63"},"scope":16325,"src":"25019:329:63","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2354],"body":{"id":15844,"nodeType":"Block","src":"25566:168:63","statements":[{"expression":{"id":15838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":15836,"name":"_globalProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14728,"src":"25576:33:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15837,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15828,"src":"25612:29:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25576:65:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15839,"nodeType":"ExpressionStatement","src":"25576:65:63"},{"eventCall":{"arguments":[{"id":15841,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15828,"src":"25697:29:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15840,"name":"GlobalProtocolYieldFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2099,"src":"25657:39:63","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256)"}},"id":15842,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25657:70:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15843,"nodeType":"EmitStatement","src":"25652:75:63"}]},"documentation":{"id":15826,"nodeType":"StructuredDocumentation","src":"25354:38:63","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"a93df2a4","id":15845,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":15831,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15828,"src":"25522:29:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15832,"kind":"modifierInvocation","modifierName":{"id":15830,"name":"withValidYieldFee","nameLocations":["25504:17:63"],"nodeType":"IdentifierPath","referencedDeclaration":14818,"src":"25504:17:63"},"nodeType":"ModifierInvocation","src":"25504:48:63"},{"id":15834,"kind":"modifierInvocation","modifierName":{"id":15833,"name":"authenticate","nameLocations":["25553:12:63"],"nodeType":"IdentifierPath","referencedDeclaration":5446,"src":"25553:12:63"},"nodeType":"ModifierInvocation","src":"25553:12:63"}],"name":"setGlobalProtocolYieldFeePercentage","nameLocation":"25406:35:63","nodeType":"FunctionDefinition","parameters":{"id":15829,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15828,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"25459:29:63","nodeType":"VariableDeclaration","scope":15845,"src":"25451:37:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15827,"name":"uint256","nodeType":"ElementaryTypeName","src":"25451:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25441:53:63"},"returnParameters":{"id":15835,"nodeType":"ParameterList","parameters":[],"src":"25566:0:63"},"scope":16325,"src":"25397:337:63","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2362],"body":{"id":15867,"nodeType":"Block","src":"25985:87:63","statements":[{"expression":{"arguments":[{"id":15862,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15848,"src":"26024:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15863,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15850,"src":"26030:28:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":15864,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"26060:4:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":15861,"name":"_updatePoolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16265,"src":"25995:28:63","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":15865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25995:70:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15866,"nodeType":"ExpressionStatement","src":"25995:70:63"}]},"documentation":{"id":15846,"nodeType":"StructuredDocumentation","src":"25740:38:63","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"fd267f39","id":15868,"implemented":true,"kind":"function","modifiers":[{"id":15853,"kind":"modifierInvocation","modifierName":{"id":15852,"name":"authenticate","nameLocations":["25904:12:63"],"nodeType":"IdentifierPath","referencedDeclaration":5446,"src":"25904:12:63"},"nodeType":"ModifierInvocation","src":"25904:12:63"},{"arguments":[{"id":15855,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15850,"src":"25934:28:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15856,"kind":"modifierInvocation","modifierName":{"id":15854,"name":"withValidSwapFee","nameLocations":["25917:16:63"],"nodeType":"IdentifierPath","referencedDeclaration":14800,"src":"25917:16:63"},"nodeType":"ModifierInvocation","src":"25917:46:63"},{"arguments":[{"id":15858,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15848,"src":"25979:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":15859,"kind":"modifierInvocation","modifierName":{"id":15857,"name":"withLatestFees","nameLocations":["25964:14:63"],"nodeType":"IdentifierPath","referencedDeclaration":14842,"src":"25964:14:63"},"nodeType":"ModifierInvocation","src":"25964:20:63"}],"name":"setProtocolSwapFeePercentage","nameLocation":"25792:28:63","nodeType":"FunctionDefinition","parameters":{"id":15851,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15848,"mutability":"mutable","name":"pool","nameLocation":"25838:4:63","nodeType":"VariableDeclaration","scope":15868,"src":"25830:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15847,"name":"address","nodeType":"ElementaryTypeName","src":"25830:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15850,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"25860:28:63","nodeType":"VariableDeclaration","scope":15868,"src":"25852:36:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15849,"name":"uint256","nodeType":"ElementaryTypeName","src":"25852:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25820:74:63"},"returnParameters":{"id":15860,"nodeType":"ParameterList","parameters":[],"src":"25985:0:63"},"scope":16325,"src":"25783:289:63","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2370],"body":{"id":15890,"nodeType":"Block","src":"26327:89:63","statements":[{"expression":{"arguments":[{"id":15885,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15871,"src":"26367:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15886,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15873,"src":"26373:29:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"74727565","id":15887,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"26404:4:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":15884,"name":"_updatePoolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16303,"src":"26337:29:63","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,uint256,bool)"}},"id":15888,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26337:72:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15889,"nodeType":"ExpressionStatement","src":"26337:72:63"}]},"documentation":{"id":15869,"nodeType":"StructuredDocumentation","src":"26078:38:63","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"abaa3356","id":15891,"implemented":true,"kind":"function","modifiers":[{"id":15876,"kind":"modifierInvocation","modifierName":{"id":15875,"name":"authenticate","nameLocations":["26244:12:63"],"nodeType":"IdentifierPath","referencedDeclaration":5446,"src":"26244:12:63"},"nodeType":"ModifierInvocation","src":"26244:12:63"},{"arguments":[{"id":15878,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15873,"src":"26275:29:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15879,"kind":"modifierInvocation","modifierName":{"id":15877,"name":"withValidYieldFee","nameLocations":["26257:17:63"],"nodeType":"IdentifierPath","referencedDeclaration":14818,"src":"26257:17:63"},"nodeType":"ModifierInvocation","src":"26257:48:63"},{"arguments":[{"id":15881,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15871,"src":"26321:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":15882,"kind":"modifierInvocation","modifierName":{"id":15880,"name":"withLatestFees","nameLocations":["26306:14:63"],"nodeType":"IdentifierPath","referencedDeclaration":14842,"src":"26306:14:63"},"nodeType":"ModifierInvocation","src":"26306:20:63"}],"name":"setProtocolYieldFeePercentage","nameLocation":"26130:29:63","nodeType":"FunctionDefinition","parameters":{"id":15874,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15871,"mutability":"mutable","name":"pool","nameLocation":"26177:4:63","nodeType":"VariableDeclaration","scope":15891,"src":"26169:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15870,"name":"address","nodeType":"ElementaryTypeName","src":"26169:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15873,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"26199:29:63","nodeType":"VariableDeclaration","scope":15891,"src":"26191:37:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15872,"name":"uint256","nodeType":"ElementaryTypeName","src":"26191:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26159:75:63"},"returnParameters":{"id":15883,"nodeType":"ParameterList","parameters":[],"src":"26327:0:63"},"scope":16325,"src":"26121:295:63","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2378],"body":{"id":15915,"nodeType":"Block","src":"26686:103:63","statements":[{"expression":{"arguments":[{"id":15909,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15894,"src":"26725:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15910,"name":"poolCreatorSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15896,"src":"26731:28:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15911,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14709,"src":"26761:15:63","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$14709_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":15912,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"26777:4:63","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":14707,"src":"26761:20:63","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":15908,"name":"_setPoolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16003,"src":"26696:28:63","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_enum$_ProtocolFeeType_$14709_$returns$__$","typeString":"function (address,uint256,enum ProtocolFeeController.ProtocolFeeType)"}},"id":15913,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26696:86:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15914,"nodeType":"ExpressionStatement","src":"26696:86:63"}]},"documentation":{"id":15892,"nodeType":"StructuredDocumentation","src":"26422:38:63","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"1377c16c","id":15916,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":15899,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15894,"src":"26605:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":15900,"kind":"modifierInvocation","modifierName":{"id":15898,"name":"onlyPoolCreator","nameLocations":["26589:15:63"],"nodeType":"IdentifierPath","referencedDeclaration":14782,"src":"26589:15:63"},"nodeType":"ModifierInvocation","src":"26589:21:63"},{"arguments":[{"id":15902,"name":"poolCreatorSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15896,"src":"26635:28:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15903,"kind":"modifierInvocation","modifierName":{"id":15901,"name":"withValidPoolCreatorFee","nameLocations":["26611:23:63"],"nodeType":"IdentifierPath","referencedDeclaration":14832,"src":"26611:23:63"},"nodeType":"ModifierInvocation","src":"26611:53:63"},{"arguments":[{"id":15905,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15894,"src":"26680:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":15906,"kind":"modifierInvocation","modifierName":{"id":15904,"name":"withLatestFees","nameLocations":["26665:14:63"],"nodeType":"IdentifierPath","referencedDeclaration":14842,"src":"26665:14:63"},"nodeType":"ModifierInvocation","src":"26665:20:63"}],"name":"setPoolCreatorSwapFeePercentage","nameLocation":"26474:31:63","nodeType":"FunctionDefinition","parameters":{"id":15897,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15894,"mutability":"mutable","name":"pool","nameLocation":"26523:4:63","nodeType":"VariableDeclaration","scope":15916,"src":"26515:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15893,"name":"address","nodeType":"ElementaryTypeName","src":"26515:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15896,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"26545:28:63","nodeType":"VariableDeclaration","scope":15916,"src":"26537:36:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15895,"name":"uint256","nodeType":"ElementaryTypeName","src":"26537:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26505:74:63"},"returnParameters":{"id":15907,"nodeType":"ParameterList","parameters":[],"src":"26686:0:63"},"scope":16325,"src":"26465:324:63","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2386],"body":{"id":15940,"nodeType":"Block","src":"27062:105:63","statements":[{"expression":{"arguments":[{"id":15934,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15919,"src":"27101:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15935,"name":"poolCreatorYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15921,"src":"27107:29:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":15936,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14709,"src":"27138:15:63","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$14709_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":15937,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"27154:5:63","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":14708,"src":"27138:21:63","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":15933,"name":"_setPoolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16003,"src":"27072:28:63","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_enum$_ProtocolFeeType_$14709_$returns$__$","typeString":"function (address,uint256,enum ProtocolFeeController.ProtocolFeeType)"}},"id":15938,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27072:88:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15939,"nodeType":"ExpressionStatement","src":"27072:88:63"}]},"documentation":{"id":15917,"nodeType":"StructuredDocumentation","src":"26795:38:63","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"3af52712","id":15941,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":15924,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15919,"src":"26980:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":15925,"kind":"modifierInvocation","modifierName":{"id":15923,"name":"onlyPoolCreator","nameLocations":["26964:15:63"],"nodeType":"IdentifierPath","referencedDeclaration":14782,"src":"26964:15:63"},"nodeType":"ModifierInvocation","src":"26964:21:63"},{"arguments":[{"id":15927,"name":"poolCreatorYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15921,"src":"27010:29:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":15928,"kind":"modifierInvocation","modifierName":{"id":15926,"name":"withValidPoolCreatorFee","nameLocations":["26986:23:63"],"nodeType":"IdentifierPath","referencedDeclaration":14832,"src":"26986:23:63"},"nodeType":"ModifierInvocation","src":"26986:54:63"},{"arguments":[{"id":15930,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15919,"src":"27056:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":15931,"kind":"modifierInvocation","modifierName":{"id":15929,"name":"withLatestFees","nameLocations":["27041:14:63"],"nodeType":"IdentifierPath","referencedDeclaration":14842,"src":"27041:14:63"},"nodeType":"ModifierInvocation","src":"27041:20:63"}],"name":"setPoolCreatorYieldFeePercentage","nameLocation":"26847:32:63","nodeType":"FunctionDefinition","parameters":{"id":15922,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15919,"mutability":"mutable","name":"pool","nameLocation":"26897:4:63","nodeType":"VariableDeclaration","scope":15941,"src":"26889:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15918,"name":"address","nodeType":"ElementaryTypeName","src":"26889:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15921,"mutability":"mutable","name":"poolCreatorYieldFeePercentage","nameLocation":"26919:29:63","nodeType":"VariableDeclaration","scope":15941,"src":"26911:37:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15920,"name":"uint256","nodeType":"ElementaryTypeName","src":"26911:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26879:75:63"},"returnParameters":{"id":15932,"nodeType":"ParameterList","parameters":[],"src":"27062:0:63"},"scope":16325,"src":"26838:329:63","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":16002,"nodeType":"Block","src":"27323:900:63","statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"id":15954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":15951,"name":"feeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15948,"src":"27419:7:63","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":15952,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14709,"src":"27430:15:63","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$14709_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":15953,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"27446:4:63","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":14707,"src":"27430:20:63","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"src":"27419:31:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":16000,"nodeType":"Block","src":"27835:382:63","statements":[{"expression":{"id":15982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":15978,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14750,"src":"27849:31:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":15980,"indexExpression":{"id":15979,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15943,"src":"27881:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"27849:37:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15981,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15945,"src":"27889:24:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27849:64:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15983,"nodeType":"ExpressionStatement","src":"27849:64:63"},{"expression":{"arguments":[{"id":15987,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15943,"src":"28056:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":15989,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15943,"src":"28089:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15990,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14709,"src":"28095:15:63","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$14709_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":15991,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"28111:5:63","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":14708,"src":"28095:21:63","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":15988,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15500,"src":"28062:26:63","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$14709_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":15992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28062:55:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15984,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"28015:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":15986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28022:33:63","memberName":"updateAggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":3255,"src":"28015:40:63","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":15993,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28015:103:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15994,"nodeType":"ExpressionStatement","src":"28015:103:63"},{"eventCall":{"arguments":[{"id":15996,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15943,"src":"28175:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15997,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15945,"src":"28181:24:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15995,"name":"PoolCreatorYieldFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2127,"src":"28138:36:63","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":15998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28138:68:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15999,"nodeType":"EmitStatement","src":"28133:73:63"}]},"id":16001,"nodeType":"IfStatement","src":"27415:802:63","trueBody":{"id":15977,"nodeType":"Block","src":"27452:377:63","statements":[{"expression":{"id":15959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":15955,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14746,"src":"27466:30:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":15957,"indexExpression":{"id":15956,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15943,"src":"27497:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"27466:36:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":15958,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15945,"src":"27505:24:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27466:63:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":15960,"nodeType":"ExpressionStatement","src":"27466:63:63"},{"expression":{"arguments":[{"id":15964,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15943,"src":"27670:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":15966,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15943,"src":"27703:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":15967,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14709,"src":"27709:15:63","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$14709_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":15968,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"27725:4:63","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":14707,"src":"27709:20:63","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":15965,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15500,"src":"27676:26:63","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$14709_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":15969,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27676:54:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":15961,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"27630:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":15963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27637:32:63","memberName":"updateAggregateSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":3247,"src":"27630:39:63","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":15970,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27630:101:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15971,"nodeType":"ExpressionStatement","src":"27630:101:63"},{"eventCall":{"arguments":[{"id":15973,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15943,"src":"27787:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":15974,"name":"poolCreatorFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15945,"src":"27793:24:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":15972,"name":"PoolCreatorSwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2120,"src":"27751:35:63","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":15975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27751:67:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15976,"nodeType":"EmitStatement","src":"27746:72:63"}]}}]},"id":16003,"implemented":true,"kind":"function","modifiers":[],"name":"_setPoolCreatorFeePercentage","nameLocation":"27182:28:63","nodeType":"FunctionDefinition","parameters":{"id":15949,"nodeType":"ParameterList","parameters":[{"constant":false,"id":15943,"mutability":"mutable","name":"pool","nameLocation":"27228:4:63","nodeType":"VariableDeclaration","scope":16003,"src":"27220:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":15942,"name":"address","nodeType":"ElementaryTypeName","src":"27220:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":15945,"mutability":"mutable","name":"poolCreatorFeePercentage","nameLocation":"27250:24:63","nodeType":"VariableDeclaration","scope":16003,"src":"27242:32:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":15944,"name":"uint256","nodeType":"ElementaryTypeName","src":"27242:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":15948,"mutability":"mutable","name":"feeType","nameLocation":"27300:7:63","nodeType":"VariableDeclaration","scope":16003,"src":"27284:23:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"},"typeName":{"id":15947,"nodeType":"UserDefinedTypeName","pathNode":{"id":15946,"name":"ProtocolFeeType","nameLocations":["27284:15:63"],"nodeType":"IdentifierPath","referencedDeclaration":14709,"src":"27284:15:63"},"referencedDeclaration":14709,"src":"27284:15:63","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"}},"visibility":"internal"}],"src":"27210:103:63"},"returnParameters":{"id":15950,"nodeType":"ParameterList","parameters":[],"src":"27323:0:63"},"scope":16325,"src":"27173:1050:63","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[2394],"body":{"id":16049,"nodeType":"Block","src":"28357:258:63","statements":[{"assignments":[16017,16019],"declarations":[{"constant":false,"id":16017,"mutability":"mutable","name":"poolTokens","nameLocation":"28384:10:63","nodeType":"VariableDeclaration","scope":16049,"src":"28368:26:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":16015,"nodeType":"UserDefinedTypeName","pathNode":{"id":16014,"name":"IERC20","nameLocations":["28368:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"28368:6:63"},"referencedDeclaration":40109,"src":"28368:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":16016,"nodeType":"ArrayTypeName","src":"28368:8:63","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":16019,"mutability":"mutable","name":"numTokens","nameLocation":"28404:9:63","nodeType":"VariableDeclaration","scope":16049,"src":"28396:17:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16018,"name":"uint256","nodeType":"ElementaryTypeName","src":"28396:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16023,"initialValue":{"arguments":[{"id":16021,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16006,"src":"28440:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16020,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15590,"src":"28417:22:63","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":16022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28417:28:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"28367:78:63"},{"body":{"id":16047,"nodeType":"Block","src":"28496:113:63","statements":[{"assignments":[16036],"declarations":[{"constant":false,"id":16036,"mutability":"mutable","name":"token","nameLocation":"28517:5:63","nodeType":"VariableDeclaration","scope":16047,"src":"28510:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":16035,"nodeType":"UserDefinedTypeName","pathNode":{"id":16034,"name":"IERC20","nameLocations":["28510:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"28510:6:63"},"referencedDeclaration":40109,"src":"28510:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"id":16040,"initialValue":{"baseExpression":{"id":16037,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16017,"src":"28525:10:63","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":16039,"indexExpression":{"id":16038,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16025,"src":"28536:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28525:13:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"28510:28:63"},{"expression":{"arguments":[{"id":16042,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16006,"src":"28575:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16043,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16008,"src":"28581:9:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16044,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16036,"src":"28592:5:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":16041,"name":"_withdrawProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16123,"src":"28553:21:63","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$40109_$returns$__$","typeString":"function (address,address,contract IERC20)"}},"id":16045,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28553:45:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16046,"nodeType":"ExpressionStatement","src":"28553:45:63"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16030,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16028,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16025,"src":"28476:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":16029,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16019,"src":"28480:9:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28476:13:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16048,"initializationExpression":{"assignments":[16025],"declarations":[{"constant":false,"id":16025,"mutability":"mutable","name":"i","nameLocation":"28469:1:63","nodeType":"VariableDeclaration","scope":16048,"src":"28461:9:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16024,"name":"uint256","nodeType":"ElementaryTypeName","src":"28461:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16027,"initialValue":{"hexValue":"30","id":16026,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28473:1:63","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"28461:13:63"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":16032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"28491:3:63","subExpression":{"id":16031,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16025,"src":"28493:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16033,"nodeType":"ExpressionStatement","src":"28491:3:63"},"nodeType":"ForStatement","src":"28456:153:63"}]},"documentation":{"id":16004,"nodeType":"StructuredDocumentation","src":"28229:38:63","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"cf7b287f","id":16050,"implemented":true,"kind":"function","modifiers":[{"id":16011,"kind":"modifierInvocation","modifierName":{"id":16010,"name":"authenticate","nameLocations":["28344:12:63"],"nodeType":"IdentifierPath","referencedDeclaration":5446,"src":"28344:12:63"},"nodeType":"ModifierInvocation","src":"28344:12:63"}],"name":"withdrawProtocolFees","nameLocation":"28281:20:63","nodeType":"FunctionDefinition","parameters":{"id":16009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16006,"mutability":"mutable","name":"pool","nameLocation":"28310:4:63","nodeType":"VariableDeclaration","scope":16050,"src":"28302:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16005,"name":"address","nodeType":"ElementaryTypeName","src":"28302:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16008,"mutability":"mutable","name":"recipient","nameLocation":"28324:9:63","nodeType":"VariableDeclaration","scope":16050,"src":"28316:17:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16007,"name":"address","nodeType":"ElementaryTypeName","src":"28316:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"28301:33:63"},"returnParameters":{"id":16012,"nodeType":"ParameterList","parameters":[],"src":"28357:0:63"},"scope":16325,"src":"28272:343:63","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2405],"body":{"id":16076,"nodeType":"Block","src":"28771:217:63","statements":[{"expression":{"arguments":[{"id":16066,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16053,"src":"28914:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16067,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16058,"src":"28920:5:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"expression":{"id":16063,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"28874:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":16065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28881:32:63","memberName":"getPoolTokenCountAndIndexOfToken","nodeType":"MemberAccess","referencedDeclaration":4516,"src":"28874:39:63","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_contract$_IERC20_$40109_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,contract IERC20) view external returns (uint256,uint256)"}},"id":16068,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28874:52:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"id":16069,"nodeType":"ExpressionStatement","src":"28874:52:63"},{"expression":{"arguments":[{"id":16071,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16053,"src":"28958:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16072,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16055,"src":"28964:9:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16073,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16058,"src":"28975:5:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":16070,"name":"_withdrawProtocolFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16123,"src":"28936:21:63","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_contract$_IERC20_$40109_$returns$__$","typeString":"function (address,address,contract IERC20)"}},"id":16074,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28936:45:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16075,"nodeType":"ExpressionStatement","src":"28936:45:63"}]},"documentation":{"id":16051,"nodeType":"StructuredDocumentation","src":"28621:38:63","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"b53a70b2","id":16077,"implemented":true,"kind":"function","modifiers":[{"id":16061,"kind":"modifierInvocation","modifierName":{"id":16060,"name":"authenticate","nameLocations":["28758:12:63"],"nodeType":"IdentifierPath","referencedDeclaration":5446,"src":"28758:12:63"},"nodeType":"ModifierInvocation","src":"28758:12:63"}],"name":"withdrawProtocolFeesForToken","nameLocation":"28673:28:63","nodeType":"FunctionDefinition","parameters":{"id":16059,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16053,"mutability":"mutable","name":"pool","nameLocation":"28710:4:63","nodeType":"VariableDeclaration","scope":16077,"src":"28702:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16052,"name":"address","nodeType":"ElementaryTypeName","src":"28702:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16055,"mutability":"mutable","name":"recipient","nameLocation":"28724:9:63","nodeType":"VariableDeclaration","scope":16077,"src":"28716:17:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16054,"name":"address","nodeType":"ElementaryTypeName","src":"28716:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16058,"mutability":"mutable","name":"token","nameLocation":"28742:5:63","nodeType":"VariableDeclaration","scope":16077,"src":"28735:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":16057,"nodeType":"UserDefinedTypeName","pathNode":{"id":16056,"name":"IERC20","nameLocations":["28735:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"28735:6:63"},"referencedDeclaration":40109,"src":"28735:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"28701:47:63"},"returnParameters":{"id":16062,"nodeType":"ParameterList","parameters":[],"src":"28771:0:63"},"scope":16325,"src":"28664:324:63","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":16122,"nodeType":"Block","src":"29081:316:63","statements":[{"assignments":[16088],"declarations":[{"constant":false,"id":16088,"mutability":"mutable","name":"amountToWithdraw","nameLocation":"29099:16:63","nodeType":"VariableDeclaration","scope":16122,"src":"29091:24:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16087,"name":"uint256","nodeType":"ElementaryTypeName","src":"29091:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16094,"initialValue":{"baseExpression":{"baseExpression":{"id":16089,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14757,"src":"29118:19:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":16091,"indexExpression":{"id":16090,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16079,"src":"29138:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29118:25:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":16093,"indexExpression":{"id":16092,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16084,"src":"29144:5:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29118:32:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"29091:59:63"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16095,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16088,"src":"29164:16:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":16096,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29183:1:63","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"29164:20:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16121,"nodeType":"IfStatement","src":"29160:231:63","trueBody":{"id":16120,"nodeType":"Block","src":"29186:205:63","statements":[{"expression":{"id":16104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":16098,"name":"_protocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14757,"src":"29200:19:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":16101,"indexExpression":{"id":16099,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16079,"src":"29220:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29200:25:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":16102,"indexExpression":{"id":16100,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16084,"src":"29226:5:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"29200:32:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":16103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29235:1:63","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"29200:36:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16105,"nodeType":"ExpressionStatement","src":"29200:36:63"},{"expression":{"arguments":[{"id":16109,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16081,"src":"29269:9:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16110,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16088,"src":"29280:16:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16106,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16084,"src":"29250:5:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":16108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29256:12:63","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":40221,"src":"29250:18:63","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$40109_$","typeString":"function (contract IERC20,address,uint256)"}},"id":16111,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29250:47:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16112,"nodeType":"ExpressionStatement","src":"29250:47:63"},{"eventCall":{"arguments":[{"id":16114,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16079,"src":"29339:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16115,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16084,"src":"29345:5:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":16116,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16081,"src":"29352:9:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16117,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16088,"src":"29363:16:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16113,"name":"ProtocolFeesWithdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2159,"src":"29317:21:63","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$40109_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,address,uint256)"}},"id":16118,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29317:63:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16119,"nodeType":"EmitStatement","src":"29312:68:63"}]}}]},"id":16123,"implemented":true,"kind":"function","modifiers":[],"name":"_withdrawProtocolFees","nameLocation":"29003:21:63","nodeType":"FunctionDefinition","parameters":{"id":16085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16079,"mutability":"mutable","name":"pool","nameLocation":"29033:4:63","nodeType":"VariableDeclaration","scope":16123,"src":"29025:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16078,"name":"address","nodeType":"ElementaryTypeName","src":"29025:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16081,"mutability":"mutable","name":"recipient","nameLocation":"29047:9:63","nodeType":"VariableDeclaration","scope":16123,"src":"29039:17:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16080,"name":"address","nodeType":"ElementaryTypeName","src":"29039:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16084,"mutability":"mutable","name":"token","nameLocation":"29065:5:63","nodeType":"VariableDeclaration","scope":16123,"src":"29058:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":16083,"nodeType":"UserDefinedTypeName","pathNode":{"id":16082,"name":"IERC20","nameLocations":["29058:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"29058:6:63"},"referencedDeclaration":40109,"src":"29058:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"29024:47:63"},"returnParameters":{"id":16086,"nodeType":"ParameterList","parameters":[],"src":"29081:0:63"},"scope":16325,"src":"28994:403:63","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[2413],"body":{"id":16139,"nodeType":"Block","src":"29543:58:63","statements":[{"expression":{"arguments":[{"id":16135,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16126,"src":"29578:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16136,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16128,"src":"29584:9:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":16134,"name":"_withdrawPoolCreatorFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16227,"src":"29553:24:63","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":16137,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29553:41:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16138,"nodeType":"ExpressionStatement","src":"29553:41:63"}]},"documentation":{"id":16124,"nodeType":"StructuredDocumentation","src":"29403:38:63","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"f7061445","id":16140,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":16131,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16126,"src":"29537:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":16132,"kind":"modifierInvocation","modifierName":{"id":16130,"name":"onlyPoolCreator","nameLocations":["29521:15:63"],"nodeType":"IdentifierPath","referencedDeclaration":14782,"src":"29521:15:63"},"nodeType":"ModifierInvocation","src":"29521:21:63"}],"name":"withdrawPoolCreatorFees","nameLocation":"29455:23:63","nodeType":"FunctionDefinition","parameters":{"id":16129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16126,"mutability":"mutable","name":"pool","nameLocation":"29487:4:63","nodeType":"VariableDeclaration","scope":16140,"src":"29479:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16125,"name":"address","nodeType":"ElementaryTypeName","src":"29479:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16128,"mutability":"mutable","name":"recipient","nameLocation":"29501:9:63","nodeType":"VariableDeclaration","scope":16140,"src":"29493:17:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16127,"name":"address","nodeType":"ElementaryTypeName","src":"29493:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"29478:33:63"},"returnParameters":{"id":16133,"nodeType":"ParameterList","parameters":[],"src":"29543:0:63"},"scope":16325,"src":"29446:155:63","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2419],"body":{"id":16153,"nodeType":"Block","src":"29706:70:63","statements":[{"expression":{"arguments":[{"id":16147,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16143,"src":"29741:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":16149,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16143,"src":"29763:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16148,"name":"_getPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15609,"src":"29747:15:63","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_address_$","typeString":"function (address) view returns (address)"}},"id":16150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29747:21:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":16146,"name":"_withdrawPoolCreatorFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16227,"src":"29716:24:63","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":16151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29716:53:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16152,"nodeType":"ExpressionStatement","src":"29716:53:63"}]},"documentation":{"id":16141,"nodeType":"StructuredDocumentation","src":"29607:38:63","text":"@inheritdoc IProtocolFeeController"},"functionSelector":"52f125f0","id":16154,"implemented":true,"kind":"function","modifiers":[],"name":"withdrawPoolCreatorFees","nameLocation":"29659:23:63","nodeType":"FunctionDefinition","parameters":{"id":16144,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16143,"mutability":"mutable","name":"pool","nameLocation":"29691:4:63","nodeType":"VariableDeclaration","scope":16154,"src":"29683:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16142,"name":"address","nodeType":"ElementaryTypeName","src":"29683:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"29682:14:63"},"returnParameters":{"id":16145,"nodeType":"ParameterList","parameters":[],"src":"29706:0:63"},"scope":16325,"src":"29650:126:63","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":16226,"nodeType":"Block","src":"29857:541:63","statements":[{"assignments":[16165,16167],"declarations":[{"constant":false,"id":16165,"mutability":"mutable","name":"poolTokens","nameLocation":"29884:10:63","nodeType":"VariableDeclaration","scope":16226,"src":"29868:26:63","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":16163,"nodeType":"UserDefinedTypeName","pathNode":{"id":16162,"name":"IERC20","nameLocations":["29868:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"29868:6:63"},"referencedDeclaration":40109,"src":"29868:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":16164,"nodeType":"ArrayTypeName","src":"29868:8:63","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":16167,"mutability":"mutable","name":"numTokens","nameLocation":"29904:9:63","nodeType":"VariableDeclaration","scope":16226,"src":"29896:17:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16166,"name":"uint256","nodeType":"ElementaryTypeName","src":"29896:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16171,"initialValue":{"arguments":[{"id":16169,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16156,"src":"29940:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16168,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15590,"src":"29917:22:63","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":16170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29917:28:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"29867:78:63"},{"body":{"id":16224,"nodeType":"Block","src":"29996:396:63","statements":[{"assignments":[16184],"declarations":[{"constant":false,"id":16184,"mutability":"mutable","name":"token","nameLocation":"30017:5:63","nodeType":"VariableDeclaration","scope":16224,"src":"30010:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":16183,"nodeType":"UserDefinedTypeName","pathNode":{"id":16182,"name":"IERC20","nameLocations":["30010:6:63"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"30010:6:63"},"referencedDeclaration":40109,"src":"30010:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"id":16188,"initialValue":{"baseExpression":{"id":16185,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16165,"src":"30025:10:63","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":16187,"indexExpression":{"id":16186,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16173,"src":"30036:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30025:13:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"30010:28:63"},{"assignments":[16190],"declarations":[{"constant":false,"id":16190,"mutability":"mutable","name":"amountToWithdraw","nameLocation":"30061:16:63","nodeType":"VariableDeclaration","scope":16224,"src":"30053:24:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16189,"name":"uint256","nodeType":"ElementaryTypeName","src":"30053:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16196,"initialValue":{"baseExpression":{"baseExpression":{"id":16191,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14764,"src":"30080:22:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":16193,"indexExpression":{"id":16192,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16156,"src":"30103:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30080:28:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":16195,"indexExpression":{"id":16194,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16184,"src":"30109:5:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30080:35:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"30053:62:63"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16197,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16190,"src":"30133:16:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":16198,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30152:1:63","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"30133:20:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16223,"nodeType":"IfStatement","src":"30129:253:63","trueBody":{"id":16222,"nodeType":"Block","src":"30155:227:63","statements":[{"expression":{"id":16206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":16200,"name":"_poolCreatorFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14764,"src":"30173:22:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$_$","typeString":"mapping(address => mapping(contract IERC20 => uint256))"}},"id":16203,"indexExpression":{"id":16201,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16156,"src":"30196:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30173:28:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":16204,"indexExpression":{"id":16202,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16184,"src":"30202:5:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"30173:35:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":16205,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30211:1:63","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"30173:39:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16207,"nodeType":"ExpressionStatement","src":"30173:39:63"},{"expression":{"arguments":[{"id":16211,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16158,"src":"30249:9:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16212,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16190,"src":"30260:16:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16208,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16184,"src":"30230:5:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":16210,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30236:12:63","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":40221,"src":"30230:18:63","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$40109_$","typeString":"function (contract IERC20,address,uint256)"}},"id":16213,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30230:47:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16214,"nodeType":"ExpressionStatement","src":"30230:47:63"},{"eventCall":{"arguments":[{"id":16216,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16156,"src":"30326:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16217,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16184,"src":"30332:5:63","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":16218,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16158,"src":"30339:9:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16219,"name":"amountToWithdraw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16190,"src":"30350:16:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16215,"name":"PoolCreatorFeesWithdrawn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2171,"src":"30301:24:63","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$40109_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,address,uint256)"}},"id":16220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30301:66:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16221,"nodeType":"EmitStatement","src":"30296:71:63"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16176,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16173,"src":"29976:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":16177,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16167,"src":"29980:9:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29976:13:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16225,"initializationExpression":{"assignments":[16173],"declarations":[{"constant":false,"id":16173,"mutability":"mutable","name":"i","nameLocation":"29969:1:63","nodeType":"VariableDeclaration","scope":16225,"src":"29961:9:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16172,"name":"uint256","nodeType":"ElementaryTypeName","src":"29961:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16175,"initialValue":{"hexValue":"30","id":16174,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29973:1:63","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"29961:13:63"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":16180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"29991:3:63","subExpression":{"id":16179,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16173,"src":"29993:1:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16181,"nodeType":"ExpressionStatement","src":"29991:3:63"},"nodeType":"ForStatement","src":"29956:436:63"}]},"id":16227,"implemented":true,"kind":"function","modifiers":[],"name":"_withdrawPoolCreatorFees","nameLocation":"29791:24:63","nodeType":"FunctionDefinition","parameters":{"id":16159,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16156,"mutability":"mutable","name":"pool","nameLocation":"29824:4:63","nodeType":"VariableDeclaration","scope":16227,"src":"29816:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16155,"name":"address","nodeType":"ElementaryTypeName","src":"29816:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16158,"mutability":"mutable","name":"recipient","nameLocation":"29838:9:63","nodeType":"VariableDeclaration","scope":16227,"src":"29830:17:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16157,"name":"address","nodeType":"ElementaryTypeName","src":"29830:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"29815:33:63"},"returnParameters":{"id":16160,"nodeType":"ParameterList","parameters":[],"src":"29857:0:63"},"scope":16325,"src":"29782:616:63","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":16264,"nodeType":"Block","src":"30638:771:63","statements":[{"expression":{"id":16246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":16237,"name":"_poolProtocolSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14733,"src":"30953:31:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$14715_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":16239,"indexExpression":{"id":16238,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16230,"src":"30985:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"30953:37:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16241,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16232,"src":"31036:28:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16242,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31065:8:63","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":43927,"src":"31036:37:63","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":16243,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31036:39:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":16244,"name":"isOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16234,"src":"31101:10:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":16240,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14715,"src":"30993:13:63","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$14715_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":16245,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["31021:13:63","31089:10:63"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"30993:129:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"30953:169:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":16247,"nodeType":"ExpressionStatement","src":"30953:169:63"},{"expression":{"arguments":[{"id":16251,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16230,"src":"31257:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":16253,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16230,"src":"31290:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16254,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14709,"src":"31296:15:63","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$14709_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":16255,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"31312:4:63","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":14707,"src":"31296:20:63","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":16252,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15500,"src":"31263:26:63","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$14709_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":16256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31263:54:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16248,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"31217:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":16250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31224:32:63","memberName":"updateAggregateSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":3247,"src":"31217:39:63","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":16257,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31217:101:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16258,"nodeType":"ExpressionStatement","src":"31217:101:63"},{"eventCall":{"arguments":[{"id":16260,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16230,"src":"31367:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16261,"name":"newProtocolSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16232,"src":"31373:28:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16259,"name":"ProtocolSwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2106,"src":"31334:32:63","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":16262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31334:68:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16263,"nodeType":"EmitStatement","src":"31329:73:63"}]},"documentation":{"id":16228,"nodeType":"StructuredDocumentation","src":"30404:114:63","text":"@dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage."},"id":16265,"implemented":true,"kind":"function","modifiers":[],"name":"_updatePoolSwapFeePercentage","nameLocation":"30532:28:63","nodeType":"FunctionDefinition","parameters":{"id":16235,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16230,"mutability":"mutable","name":"pool","nameLocation":"30569:4:63","nodeType":"VariableDeclaration","scope":16265,"src":"30561:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16229,"name":"address","nodeType":"ElementaryTypeName","src":"30561:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16232,"mutability":"mutable","name":"newProtocolSwapFeePercentage","nameLocation":"30583:28:63","nodeType":"VariableDeclaration","scope":16265,"src":"30575:36:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16231,"name":"uint256","nodeType":"ElementaryTypeName","src":"30575:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16234,"mutability":"mutable","name":"isOverride","nameLocation":"30618:10:63","nodeType":"VariableDeclaration","scope":16265,"src":"30613:15:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16233,"name":"bool","nodeType":"ElementaryTypeName","src":"30613:4:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"30560:69:63"},"returnParameters":{"id":16236,"nodeType":"ParameterList","parameters":[],"src":"30638:0:63"},"scope":16325,"src":"30523:886:63","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":16302,"nodeType":"Block","src":"31681:767:63","statements":[{"expression":{"id":16284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":16275,"name":"_poolProtocolYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14738,"src":"31985:32:63","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolFeeConfig_$14715_storage_$","typeString":"mapping(address => struct ProtocolFeeController.PoolFeeConfig storage ref)"}},"id":16277,"indexExpression":{"id":16276,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16268,"src":"32018:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"31985:38:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16279,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16270,"src":"32069:29:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32099:8:63","memberName":"toUint64","nodeType":"MemberAccess","referencedDeclaration":43927,"src":"32069:38:63","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint64_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint64)"}},"id":16281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32069:40:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},{"id":16282,"name":"isOverride","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16272,"src":"32135:10:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint64","typeString":"uint64"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":16278,"name":"PoolFeeConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14715,"src":"32026:13:63","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolFeeConfig_$14715_storage_ptr_$","typeString":"type(struct ProtocolFeeController.PoolFeeConfig storage pointer)"}},"id":16283,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["32054:13:63","32123:10:63"],"names":["feePercentage","isOverride"],"nodeType":"FunctionCall","src":"32026:130:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_memory_ptr","typeString":"struct ProtocolFeeController.PoolFeeConfig memory"}},"src":"31985:171:63","typeDescriptions":{"typeIdentifier":"t_struct$_PoolFeeConfig_$14715_storage","typeString":"struct ProtocolFeeController.PoolFeeConfig storage ref"}},"id":16285,"nodeType":"ExpressionStatement","src":"31985:171:63"},{"expression":{"arguments":[{"id":16289,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16268,"src":"32293:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":16291,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16268,"src":"32326:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16292,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14709,"src":"32332:15:63","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$14709_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":16293,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"32348:5:63","memberName":"YIELD","nodeType":"MemberAccess","referencedDeclaration":14708,"src":"32332:21:63","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":16290,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15500,"src":"32299:26:63","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$14709_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":16294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32299:55:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16286,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"32252:6:63","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":16288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32259:33:63","memberName":"updateAggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":3255,"src":"32252:40:63","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":16295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32252:103:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16296,"nodeType":"ExpressionStatement","src":"32252:103:63"},{"eventCall":{"arguments":[{"id":16298,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16268,"src":"32405:4:63","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16299,"name":"newProtocolYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16270,"src":"32411:29:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16297,"name":"ProtocolYieldFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2113,"src":"32371:33:63","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":16300,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32371:70:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16301,"nodeType":"EmitStatement","src":"32366:75:63"}]},"documentation":{"id":16266,"nodeType":"StructuredDocumentation","src":"31415:114:63","text":"@dev Common code shared between set/update. `isOverride` will be true if governance is setting the percentage."},"id":16303,"implemented":true,"kind":"function","modifiers":[],"name":"_updatePoolYieldFeePercentage","nameLocation":"31543:29:63","nodeType":"FunctionDefinition","parameters":{"id":16273,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16268,"mutability":"mutable","name":"pool","nameLocation":"31590:4:63","nodeType":"VariableDeclaration","scope":16303,"src":"31582:12:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16267,"name":"address","nodeType":"ElementaryTypeName","src":"31582:7:63","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16270,"mutability":"mutable","name":"newProtocolYieldFeePercentage","nameLocation":"31612:29:63","nodeType":"VariableDeclaration","scope":16303,"src":"31604:37:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16269,"name":"uint256","nodeType":"ElementaryTypeName","src":"31604:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16272,"mutability":"mutable","name":"isOverride","nameLocation":"31656:10:63","nodeType":"VariableDeclaration","scope":16303,"src":"31651:15:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16271,"name":"bool","nodeType":"ElementaryTypeName","src":"31651:4:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"31572:100:63"},"returnParameters":{"id":16274,"nodeType":"ParameterList","parameters":[],"src":"31681:0:63"},"scope":16325,"src":"31534:914:63","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":16323,"nodeType":"Block","src":"32521:682:63","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16308,"name":"feePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16305,"src":"33056:13:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":16309,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4868,"src":"33072:18:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33056:34:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":16311,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"33055:36:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":16312,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4868,"src":"33094:18:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33055:57:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":16314,"name":"feePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16305,"src":"33116:13:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33055:74:63","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16322,"nodeType":"IfStatement","src":"33051:146:63","trueBody":{"id":16321,"nodeType":"Block","src":"33131:66:63","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16316,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"33152:12:63","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3768_$","typeString":"type(contract IVaultErrors)"}},"id":16318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33165:19:63","memberName":"FeePrecisionTooHigh","nodeType":"MemberAccess","referencedDeclaration":3616,"src":"33152:32:63","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":16319,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33152:34:63","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":16320,"nodeType":"RevertStatement","src":"33145:41:63"}]}}]},"id":16324,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureValidPrecision","nameLocation":"32463:21:63","nodeType":"FunctionDefinition","parameters":{"id":16306,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16305,"mutability":"mutable","name":"feePercentage","nameLocation":"32493:13:63","nodeType":"VariableDeclaration","scope":16324,"src":"32485:21:63","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16304,"name":"uint256","nodeType":"ElementaryTypeName","src":"32485:7:63","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"32484:23:63"},"returnParameters":{"id":16307,"nodeType":"ParameterList","parameters":[],"src":"32521:0:63"},"scope":16325,"src":"32454:749:63","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":16326,"src":"3120:30085:63","usedErrors":[234,2201,2204,2209,2216,2219,3616,3640,7917,9886,14769,14772,40188,40469,40474,40477,43238],"usedEvents":[2094,2099,2106,2113,2120,2127,2137,2147,2159,2171,2180,2189,2198]}],"src":"46:33160:63"},"id":63},"@balancer-labs/v3-vault/contracts/Router.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/Router.sol","exportedSymbols":{"AddLiquidityKind":[4807],"AddLiquidityParams":[4823],"Address":[40714],"AfterSwapParams":[4801],"BufferWrapOrUnwrapParams":[4862],"FEE_BITLENGTH":[4865],"FEE_SCALING_FACTOR":[4868],"HookFlags":[4627],"HooksConfig":[4651],"IERC20":[40109],"IERC4626":[39833],"IPermit2":[48578],"IRateProvider":[263],"IRouter":[2917],"IVault":[3111],"IWETH":[291],"LiquidityManagement":[4580],"MAX_FEE_PERCENTAGE":[4871],"PoolConfig":[4605],"PoolConfigBits":[4582],"PoolData":[4729],"PoolRoleAccounts":[4677],"PoolSwapParams":[4772],"RemoveLiquidityKind":[4828],"RemoveLiquidityParams":[4844],"Rounding":[4732],"Router":[18510],"RouterCommon":[19198],"RouterWethLib":[31147],"SafeCast":[44983],"SwapKind":[4735],"SwapState":[4661],"TokenConfig":[4694],"TokenInfo":[4704],"TokenType":[4681],"VaultState":[4669],"VaultSwapParams":[4754],"WrappingDirection":[4847]},"id":18511,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":16327,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:64"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":16329,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18511,"sourceUnit":39834,"src":"72:75:64","symbolAliases":[{"foreign":{"id":16328,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39833,"src":"81:8:64","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":16331,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18511,"sourceUnit":44984,"src":"148:75:64","symbolAliases":[{"foreign":{"id":16330,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44983,"src":"157:8:64","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":16333,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18511,"sourceUnit":40110,"src":"224:72:64","symbolAliases":[{"foreign":{"id":16332,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"233:6:64","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"@openzeppelin/contracts/utils/Address.sol","id":16335,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18511,"sourceUnit":40715,"src":"297:68:64","symbolAliases":[{"foreign":{"id":16334,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40714,"src":"306:7:64","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"permit2/src/interfaces/IPermit2.sol","file":"permit2/src/interfaces/IPermit2.sol","id":16337,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18511,"sourceUnit":48579,"src":"366:63:64","symbolAliases":[{"foreign":{"id":16336,"name":"IPermit2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48578,"src":"375:8:64","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol","id":16339,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18511,"sourceUnit":292,"src":"431:93:64","symbolAliases":[{"foreign":{"id":16338,"name":"IWETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":291,"src":"440:5:64","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol","id":16341,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18511,"sourceUnit":2918,"src":"525:83:64","symbolAliases":[{"foreign":{"id":16340,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2917,"src":"534:7:64","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":16343,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18511,"sourceUnit":3112,"src":"609:81:64","symbolAliases":[{"foreign":{"id":16342,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"618:6:64","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":16344,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18511,"sourceUnit":4872,"src":"691:69:64","symbolAliases":[],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/RouterWethLib.sol","file":"./lib/RouterWethLib.sol","id":16346,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18511,"sourceUnit":31148,"src":"762:56:64","symbolAliases":[{"foreign":{"id":16345,"name":"RouterWethLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31147,"src":"771:13:64","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/RouterCommon.sol","file":"./RouterCommon.sol","id":16348,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":18511,"sourceUnit":19199,"src":"819:50:64","symbolAliases":[{"foreign":{"id":16347,"name":"RouterCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19198,"src":"828:12:64","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":16350,"name":"IRouter","nameLocations":["1199:7:64"],"nodeType":"IdentifierPath","referencedDeclaration":2917,"src":"1199:7:64"},"id":16351,"nodeType":"InheritanceSpecifier","src":"1199:7:64"},{"baseName":{"id":16352,"name":"RouterCommon","nameLocations":["1208:12:64"],"nodeType":"IdentifierPath","referencedDeclaration":19198,"src":"1208:12:64"},"id":16353,"nodeType":"InheritanceSpecifier","src":"1208:12:64"}],"canonicalName":"Router","contractDependencies":[],"contractKind":"contract","documentation":{"id":16349,"nodeType":"StructuredDocumentation","src":"871:308:64","text":" @notice Entrypoint for swaps, liquidity operations, and corresponding queries.\n @dev The external API functions unlock the Vault, which calls back into the corresponding hook functions.\n These interact with the Vault, transfer tokens, settle accounting, and handle wrapping and unwrapping ETH."},"fullyImplemented":true,"id":18510,"linearizedBaseContracts":[18510,19198,7482,273,9942,28149,19328,3041,3025,2917],"name":"Router","nameLocation":"1189:6:64","nodeType":"ContractDefinition","nodes":[{"global":false,"id":16356,"libraryName":{"id":16354,"name":"Address","nameLocations":["1233:7:64"],"nodeType":"IdentifierPath","referencedDeclaration":40714,"src":"1233:7:64"},"nodeType":"UsingForDirective","src":"1227:34:64","typeName":{"id":16355,"name":"address","nodeType":"ElementaryTypeName","src":"1245:15:64","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}},{"global":false,"id":16360,"libraryName":{"id":16357,"name":"RouterWethLib","nameLocations":["1272:13:64"],"nodeType":"IdentifierPath","referencedDeclaration":31147,"src":"1272:13:64"},"nodeType":"UsingForDirective","src":"1266:30:64","typeName":{"id":16359,"nodeType":"UserDefinedTypeName","pathNode":{"id":16358,"name":"IWETH","nameLocations":["1290:5:64"],"nodeType":"IdentifierPath","referencedDeclaration":291,"src":"1290:5:64"},"referencedDeclaration":291,"src":"1290:5:64","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}}},{"global":false,"id":16362,"libraryName":{"id":16361,"name":"SafeCast","nameLocations":["1307:8:64"],"nodeType":"IdentifierPath","referencedDeclaration":44983,"src":"1307:8:64"},"nodeType":"UsingForDirective","src":"1301:21:64"},{"body":{"id":16382,"nodeType":"Block","src":"1501:64:64","statements":[]},"id":16383,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":16376,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16365,"src":"1464:5:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},{"id":16377,"name":"weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16368,"src":"1471:4:64","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},{"id":16378,"name":"permit2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16371,"src":"1477:7:64","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"}},{"id":16379,"name":"routerVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16373,"src":"1486:13:64","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":16380,"kind":"baseConstructorSpecifier","modifierName":{"id":16375,"name":"RouterCommon","nameLocations":["1451:12:64"],"nodeType":"IdentifierPath","referencedDeclaration":19198,"src":"1451:12:64"},"nodeType":"ModifierInvocation","src":"1451:49:64"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":16374,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16365,"mutability":"mutable","name":"vault","nameLocation":"1356:5:64","nodeType":"VariableDeclaration","scope":16383,"src":"1349:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":16364,"nodeType":"UserDefinedTypeName","pathNode":{"id":16363,"name":"IVault","nameLocations":["1349:6:64"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"1349:6:64"},"referencedDeclaration":3111,"src":"1349:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":16368,"mutability":"mutable","name":"weth","nameLocation":"1377:4:64","nodeType":"VariableDeclaration","scope":16383,"src":"1371:10:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"},"typeName":{"id":16367,"nodeType":"UserDefinedTypeName","pathNode":{"id":16366,"name":"IWETH","nameLocations":["1371:5:64"],"nodeType":"IdentifierPath","referencedDeclaration":291,"src":"1371:5:64"},"referencedDeclaration":291,"src":"1371:5:64","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},"visibility":"internal"},{"constant":false,"id":16371,"mutability":"mutable","name":"permit2","nameLocation":"1400:7:64","nodeType":"VariableDeclaration","scope":16383,"src":"1391:16:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"},"typeName":{"id":16370,"nodeType":"UserDefinedTypeName","pathNode":{"id":16369,"name":"IPermit2","nameLocations":["1391:8:64"],"nodeType":"IdentifierPath","referencedDeclaration":48578,"src":"1391:8:64"},"referencedDeclaration":48578,"src":"1391:8:64","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"}},"visibility":"internal"},{"constant":false,"id":16373,"mutability":"mutable","name":"routerVersion","nameLocation":"1431:13:64","nodeType":"VariableDeclaration","scope":16383,"src":"1417:27:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":16372,"name":"string","nodeType":"ElementaryTypeName","src":"1417:6:64","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1339:111:64"},"returnParameters":{"id":16381,"nodeType":"ParameterList","parameters":[],"src":"1501:0:64"},"scope":18510,"src":"1328:237:64","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[2471],"body":{"id":16433,"nodeType":"Block","src":"2102:667:64","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":16414,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"2234:6:64","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":16415,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2241:14:64","memberName":"initializeHook","nodeType":"MemberAccess","referencedDeclaration":16553,"src":"2234:21:64","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_InitializeHookParams_$2450_calldata_ptr_$returns$_t_uint256_$","typeString":"function Router.initializeHook(struct IRouter.InitializeHookParams calldata) returns (uint256)"}},{"arguments":[{"expression":{"id":16417,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2340:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":16418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2344:6:64","memberName":"sender","nodeType":"MemberAccess","src":"2340:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16419,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16386,"src":"2386:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16420,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16390,"src":"2428:6:64","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},{"id":16421,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16393,"src":"2480:14:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":16422,"name":"minBptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16395,"src":"2541:15:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16423,"name":"wethIsEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16397,"src":"2597:9:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":16424,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16399,"src":"2646:8:64","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":16416,"name":"InitializeHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2450,"src":"2281:20:64","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_InitializeHookParams_$2450_storage_ptr_$","typeString":"type(struct IRouter.InitializeHookParams storage pointer)"}},"id":16425,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["2332:6:64","2380:4:64","2420:6:64","2464:14:64","2524:15:64","2586:9:64","2636:8:64"],"names":["sender","pool","tokens","exactAmountsIn","minBptAmountOut","wethIsEth","userData"],"nodeType":"FunctionCall","src":"2281:400:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_InitializeHookParams_$2450_memory_ptr","typeString":"struct IRouter.InitializeHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_InitializeHookParams_$2450_calldata_ptr_$returns$_t_uint256_$","typeString":"function Router.initializeHook(struct IRouter.InitializeHookParams calldata) returns (uint256)"},{"typeIdentifier":"t_struct$_InitializeHookParams_$2450_memory_ptr","typeString":"struct IRouter.InitializeHookParams memory"}],"expression":{"id":16412,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2194:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":16413,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2198:10:64","memberName":"encodeCall","nodeType":"MemberAccess","src":"2194:14:64","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":16426,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2194:509:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":16410,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"2159:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":16411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2166:6:64","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":4440,"src":"2159:13:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":16427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2159:562:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":16429,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2740:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16428,"name":"uint256","nodeType":"ElementaryTypeName","src":"2740:7:64","typeDescriptions":{}}}],"id":16430,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"2739:9:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":16408,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2131:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":16409,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2135:6:64","memberName":"decode","nodeType":"MemberAccess","src":"2131:10:64","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":16431,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2131:631:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":16407,"id":16432,"nodeType":"Return","src":"2112:650:64"}]},"documentation":{"id":16384,"nodeType":"StructuredDocumentation","src":"1794:23:64","text":"@inheritdoc IRouter"},"functionSelector":"026b3d95","id":16434,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"expression":{"id":16402,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2059:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":16403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2063:6:64","memberName":"sender","nodeType":"MemberAccess","src":"2059:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":16404,"kind":"modifierInvocation","modifierName":{"id":16401,"name":"saveSender","nameLocations":["2048:10:64"],"nodeType":"IdentifierPath","referencedDeclaration":19249,"src":"2048:10:64"},"nodeType":"ModifierInvocation","src":"2048:22:64"}],"name":"initialize","nameLocation":"1831:10:64","nodeType":"FunctionDefinition","parameters":{"id":16400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16386,"mutability":"mutable","name":"pool","nameLocation":"1859:4:64","nodeType":"VariableDeclaration","scope":16434,"src":"1851:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16385,"name":"address","nodeType":"ElementaryTypeName","src":"1851:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16390,"mutability":"mutable","name":"tokens","nameLocation":"1889:6:64","nodeType":"VariableDeclaration","scope":16434,"src":"1873:22:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":16388,"nodeType":"UserDefinedTypeName","pathNode":{"id":16387,"name":"IERC20","nameLocations":["1873:6:64"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"1873:6:64"},"referencedDeclaration":40109,"src":"1873:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":16389,"nodeType":"ArrayTypeName","src":"1873:8:64","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":16393,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"1922:14:64","nodeType":"VariableDeclaration","scope":16434,"src":"1905:31:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16391,"name":"uint256","nodeType":"ElementaryTypeName","src":"1905:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16392,"nodeType":"ArrayTypeName","src":"1905:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":16395,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"1954:15:64","nodeType":"VariableDeclaration","scope":16434,"src":"1946:23:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16394,"name":"uint256","nodeType":"ElementaryTypeName","src":"1946:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16397,"mutability":"mutable","name":"wethIsEth","nameLocation":"1984:9:64","nodeType":"VariableDeclaration","scope":16434,"src":"1979:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16396,"name":"bool","nodeType":"ElementaryTypeName","src":"1979:4:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":16399,"mutability":"mutable","name":"userData","nameLocation":"2016:8:64","nodeType":"VariableDeclaration","scope":16434,"src":"2003:21:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":16398,"name":"bytes","nodeType":"ElementaryTypeName","src":"2003:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1841:189:64"},"returnParameters":{"id":16407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16406,"mutability":"mutable","name":"bptAmountOut","nameLocation":"2088:12:64","nodeType":"VariableDeclaration","scope":16434,"src":"2080:20:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16405,"name":"uint256","nodeType":"ElementaryTypeName","src":"2080:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2079:22:64"},"scope":18510,"src":"1822:947:64","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":16552,"nodeType":"Block","src":"3177:1176:64","statements":[{"expression":{"id":16463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":16447,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16445,"src":"3187:12:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":16450,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16438,"src":"3233:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeHookParams_$2450_calldata_ptr","typeString":"struct IRouter.InitializeHookParams calldata"}},"id":16451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3240:4:64","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2436,"src":"3233:11:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16452,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16438,"src":"3258:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeHookParams_$2450_calldata_ptr","typeString":"struct IRouter.InitializeHookParams calldata"}},"id":16453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3265:6:64","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":2434,"src":"3258:13:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16454,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16438,"src":"3285:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeHookParams_$2450_calldata_ptr","typeString":"struct IRouter.InitializeHookParams calldata"}},"id":16455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3292:6:64","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":2440,"src":"3285:13:64","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_calldata_ptr","typeString":"contract IERC20[] calldata"}},{"expression":{"id":16456,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16438,"src":"3312:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeHookParams_$2450_calldata_ptr","typeString":"struct IRouter.InitializeHookParams calldata"}},"id":16457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3319:14:64","memberName":"exactAmountsIn","nodeType":"MemberAccess","referencedDeclaration":2443,"src":"3312:21:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},{"expression":{"id":16458,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16438,"src":"3347:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeHookParams_$2450_calldata_ptr","typeString":"struct IRouter.InitializeHookParams calldata"}},"id":16459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3354:15:64","memberName":"minBptAmountOut","nodeType":"MemberAccess","referencedDeclaration":2445,"src":"3347:22:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":16460,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16438,"src":"3383:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeHookParams_$2450_calldata_ptr","typeString":"struct IRouter.InitializeHookParams calldata"}},"id":16461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3390:8:64","memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":2449,"src":"3383:15:64","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_calldata_ptr","typeString":"contract IERC20[] calldata"},{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":16448,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"3202:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":16449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3209:10:64","memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":4127,"src":"3202:17:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (address,address,contract IERC20[] memory,uint256[] memory,uint256,bytes memory) external returns (uint256)"}},"id":16462,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3202:206:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3187:221:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16464,"nodeType":"ExpressionStatement","src":"3187:221:64"},{"body":{"id":16545,"nodeType":"Block","src":"3470:813:64","statements":[{"assignments":[16479],"declarations":[{"constant":false,"id":16479,"mutability":"mutable","name":"token","nameLocation":"3491:5:64","nodeType":"VariableDeclaration","scope":16545,"src":"3484:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":16478,"nodeType":"UserDefinedTypeName","pathNode":{"id":16477,"name":"IERC20","nameLocations":["3484:6:64"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"3484:6:64"},"referencedDeclaration":40109,"src":"3484:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"id":16484,"initialValue":{"baseExpression":{"expression":{"id":16480,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16438,"src":"3499:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeHookParams_$2450_calldata_ptr","typeString":"struct IRouter.InitializeHookParams calldata"}},"id":16481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3506:6:64","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":2440,"src":"3499:13:64","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_calldata_ptr","typeString":"contract IERC20[] calldata"}},"id":16483,"indexExpression":{"id":16482,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16466,"src":"3513:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3499:16:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3484:31:64"},{"assignments":[16486],"declarations":[{"constant":false,"id":16486,"mutability":"mutable","name":"amountIn","nameLocation":"3537:8:64","nodeType":"VariableDeclaration","scope":16545,"src":"3529:16:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16485,"name":"uint256","nodeType":"ElementaryTypeName","src":"3529:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16491,"initialValue":{"baseExpression":{"expression":{"id":16487,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16438,"src":"3548:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeHookParams_$2450_calldata_ptr","typeString":"struct IRouter.InitializeHookParams calldata"}},"id":16488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3555:14:64","memberName":"exactAmountsIn","nodeType":"MemberAccess","referencedDeclaration":2443,"src":"3548:21:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":16490,"indexExpression":{"id":16489,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16466,"src":"3570:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3548:24:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3529:43:64"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16492,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16486,"src":"3591:8:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":16493,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3603:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3591:13:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16497,"nodeType":"IfStatement","src":"3587:60:64","trueBody":{"id":16496,"nodeType":"Block","src":"3606:41:64","statements":[{"id":16495,"nodeType":"Continue","src":"3624:8:64"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":16509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":16498,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16438,"src":"3726:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeHookParams_$2450_calldata_ptr","typeString":"struct IRouter.InitializeHookParams calldata"}},"id":16499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3733:9:64","memberName":"wethIsEth","nodeType":"MemberAccess","referencedDeclaration":2447,"src":"3726:16:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":16508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":16502,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16479,"src":"3754:5:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":16501,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3746:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16500,"name":"address","nodeType":"ElementaryTypeName","src":"3746:7:64","typeDescriptions":{}}},"id":16503,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3746:14:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":16506,"name":"_weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18585,"src":"3772:5:64","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}],"id":16505,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3764:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16504,"name":"address","nodeType":"ElementaryTypeName","src":"3764:7:64","typeDescriptions":{}}},"id":16507,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3764:14:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3746:32:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3726:52:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":16543,"nodeType":"Block","src":"3859:414:64","statements":[{"expression":{"arguments":[{"expression":{"id":16521,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16438,"src":"4141:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeHookParams_$2450_calldata_ptr","typeString":"struct IRouter.InitializeHookParams calldata"}},"id":16522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4148:6:64","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":2434,"src":"4141:13:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":16525,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"4164:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}],"id":16524,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4156:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16523,"name":"address","nodeType":"ElementaryTypeName","src":"4156:7:64","typeDescriptions":{}}},"id":16526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4156:15:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16527,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16486,"src":"4173:8:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4182:9:64","memberName":"toUint160","nodeType":"MemberAccess","referencedDeclaration":43591,"src":"4173:18:64","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint160_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint160)"}},"id":16529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4173:20:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},{"arguments":[{"id":16532,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16479,"src":"4203:5:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":16531,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4195:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16530,"name":"address","nodeType":"ElementaryTypeName","src":"4195:7:64","typeDescriptions":{}}},"id":16533,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4195:14:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint160","typeString":"uint160"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":16518,"name":"_permit2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18588,"src":"4119:8:64","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"}},"id":16520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4128:12:64","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":48531,"src":"4119:21:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint160_$_t_address_$returns$__$","typeString":"function (address,address,uint160,address) external"}},"id":16534,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4119:91:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16535,"nodeType":"ExpressionStatement","src":"4119:91:64"},{"expression":{"arguments":[{"id":16539,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16479,"src":"4242:5:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":16540,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16486,"src":"4249:8:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16536,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"4228:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":16538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4235:6:64","memberName":"settle","nodeType":"MemberAccess","referencedDeclaration":4451,"src":"4228:13:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$_t_uint256_$","typeString":"function (contract IERC20,uint256) external returns (uint256)"}},"id":16541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4228:30:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16542,"nodeType":"ExpressionStatement","src":"4228:30:64"}]},"id":16544,"nodeType":"IfStatement","src":"3722:551:64","trueBody":{"id":16517,"nodeType":"Block","src":"3780:73:64","statements":[{"expression":{"arguments":[{"id":16513,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"3821:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},{"id":16514,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16486,"src":"3829:8:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16510,"name":"_weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18585,"src":"3798:5:64","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},"id":16512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3804:16:64","memberName":"wrapEthAndSettle","nodeType":"MemberAccess","referencedDeclaration":31107,"src":"3798:22:64","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IWETH_$291_$_t_contract$_IVault_$3111_$_t_uint256_$returns$__$attached_to$_t_contract$_IWETH_$291_$","typeString":"function (contract IWETH,contract IVault,uint256)"}},"id":16515,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3798:40:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16516,"nodeType":"ExpressionStatement","src":"3798:40:64"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16473,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16469,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16466,"src":"3439:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":16470,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16438,"src":"3443:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeHookParams_$2450_calldata_ptr","typeString":"struct IRouter.InitializeHookParams calldata"}},"id":16471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3450:6:64","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":2440,"src":"3443:13:64","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_calldata_ptr","typeString":"contract IERC20[] calldata"}},"id":16472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3457:6:64","memberName":"length","nodeType":"MemberAccess","src":"3443:20:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3439:24:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16546,"initializationExpression":{"assignments":[16466],"declarations":[{"constant":false,"id":16466,"mutability":"mutable","name":"i","nameLocation":"3432:1:64","nodeType":"VariableDeclaration","scope":16546,"src":"3424:9:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16465,"name":"uint256","nodeType":"ElementaryTypeName","src":"3424:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16468,"initialValue":{"hexValue":"30","id":16467,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3436:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3424:13:64"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":16475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"3465:3:64","subExpression":{"id":16474,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16466,"src":"3467:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16476,"nodeType":"ExpressionStatement","src":"3465:3:64"},"nodeType":"ForStatement","src":"3419:864:64"},{"expression":{"arguments":[{"expression":{"id":16548,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16438,"src":"4332:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeHookParams_$2450_calldata_ptr","typeString":"struct IRouter.InitializeHookParams calldata"}},"id":16549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4339:6:64","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":2434,"src":"4332:13:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16547,"name":"_returnEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18982,"src":"4321:10:64","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":16550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4321:25:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16551,"nodeType":"ExpressionStatement","src":"4321:25:64"}]},"documentation":{"id":16435,"nodeType":"StructuredDocumentation","src":"2775:258:64","text":" @notice Hook for initialization.\n @dev Can only be called by the Vault.\n @param params Initialization parameters (see IRouter for struct definition)\n @return bptAmountOut BPT amount minted in exchange for the input tokens"},"functionSelector":"086fad66","id":16553,"implemented":true,"kind":"function","modifiers":[{"id":16441,"kind":"modifierInvocation","modifierName":{"id":16440,"name":"nonReentrant","nameLocations":["3123:12:64"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"3123:12:64"},"nodeType":"ModifierInvocation","src":"3123:12:64"},{"id":16443,"kind":"modifierInvocation","modifierName":{"id":16442,"name":"onlyVault","nameLocations":["3136:9:64"],"nodeType":"IdentifierPath","referencedDeclaration":28128,"src":"3136:9:64"},"nodeType":"ModifierInvocation","src":"3136:9:64"}],"name":"initializeHook","nameLocation":"3047:14:64","nodeType":"FunctionDefinition","parameters":{"id":16439,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16438,"mutability":"mutable","name":"params","nameLocation":"3101:6:64","nodeType":"VariableDeclaration","scope":16553,"src":"3071:36:64","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeHookParams_$2450_calldata_ptr","typeString":"struct IRouter.InitializeHookParams"},"typeName":{"id":16437,"nodeType":"UserDefinedTypeName","pathNode":{"id":16436,"name":"InitializeHookParams","nameLocations":["3071:20:64"],"nodeType":"IdentifierPath","referencedDeclaration":2450,"src":"3071:20:64"},"referencedDeclaration":2450,"src":"3071:20:64","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeHookParams_$2450_storage_ptr","typeString":"struct IRouter.InitializeHookParams"}},"visibility":"internal"}],"src":"3061:52:64"},"returnParameters":{"id":16446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16445,"mutability":"mutable","name":"bptAmountOut","nameLocation":"3163:12:64","nodeType":"VariableDeclaration","scope":16553,"src":"3155:20:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16444,"name":"uint256","nodeType":"ElementaryTypeName","src":"3155:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3154:22:64"},"scope":18510,"src":"3038:1315:64","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2489],"body":{"id":16609,"nodeType":"Block","src":"4867:643:64","statements":[{"expression":{"id":16607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":16575,"name":"amountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16573,"src":"4878:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},null,null],"id":16576,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"4877:15:64","typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$__$__$","typeString":"tuple(uint256[] memory,,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":16583,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"4986:6:64","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":16584,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4993:16:64","memberName":"addLiquidityHook","nodeType":"MemberAccess","referencedDeclaration":16977,"src":"4986:23:64","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_AddLiquidityHookParams_$2947_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"function Router.addLiquidityHook(struct IRouterCommon.AddLiquidityHookParams calldata) returns (uint256[] memory,uint256,bytes memory)"}},{"arguments":[{"expression":{"id":16586,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5088:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":16587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5092:6:64","memberName":"sender","nodeType":"MemberAccess","src":"5088:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16588,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16556,"src":"5130:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16589,"name":"maxAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16559,"src":"5174:12:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":16590,"name":"exactBptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16561,"src":"5229:17:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":16591,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4807,"src":"5278:16:64","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_AddLiquidityKind_$4807_$","typeString":"type(enum AddLiquidityKind)"}},"id":16592,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5295:12:64","memberName":"PROPORTIONAL","nodeType":"MemberAccess","referencedDeclaration":4802,"src":"5278:29:64","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},{"id":16593,"name":"wethIsEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16563,"src":"5344:9:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":16594,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16565,"src":"5389:8:64","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":16585,"name":"AddLiquidityHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2947,"src":"5031:22:64","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_AddLiquidityHookParams_$2947_storage_ptr_$","typeString":"type(struct IRouterCommon.AddLiquidityHookParams storage pointer)"}},"id":16595,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["5080:6:64","5124:4:64","5160:12:64","5212:15:64","5272:4:64","5333:9:64","5379:8:64"],"names":["sender","pool","maxAmountsIn","minBptAmountOut","kind","wethIsEth","userData"],"nodeType":"FunctionCall","src":"5031:389:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_memory_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_AddLiquidityHookParams_$2947_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"function Router.addLiquidityHook(struct IRouterCommon.AddLiquidityHookParams calldata) returns (uint256[] memory,uint256,bytes memory)"},{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_memory_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams memory"}],"expression":{"id":16581,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4950:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":16582,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4954:10:64","memberName":"encodeCall","nodeType":"MemberAccess","src":"4950:14:64","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":16596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4950:488:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":16579,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"4919:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":16580,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4926:6:64","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":4440,"src":"4919:13:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":16597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4919:533:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"baseExpression":{"id":16599,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5467:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16598,"name":"uint256","nodeType":"ElementaryTypeName","src":"5467:7:64","typeDescriptions":{}}},"id":16600,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"5467:9:64","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}},{"id":16602,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5478:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16601,"name":"uint256","nodeType":"ElementaryTypeName","src":"5478:7:64","typeDescriptions":{}}},{"id":16604,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5487:5:64","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":16603,"name":"bytes","nodeType":"ElementaryTypeName","src":"5487:5:64","typeDescriptions":{}}}],"id":16605,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"5466:27:64","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256[] memory),type(uint256),type(bytes storage pointer))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256[] memory),type(uint256),type(bytes storage pointer))"}],"expression":{"id":16577,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4895:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":16578,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4899:6:64","memberName":"decode","nodeType":"MemberAccess","src":"4895:10:64","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":16606,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4895:608:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256,bytes memory)"}},"src":"4877:626:64","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16608,"nodeType":"ExpressionStatement","src":"4877:626:64"}]},"documentation":{"id":16554,"nodeType":"StructuredDocumentation","src":"4571:23:64","text":"@inheritdoc IRouter"},"functionSelector":"724dba33","id":16610,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"expression":{"id":16568,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4818:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":16569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4822:6:64","memberName":"sender","nodeType":"MemberAccess","src":"4818:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":16570,"kind":"modifierInvocation","modifierName":{"id":16567,"name":"saveSender","nameLocations":["4807:10:64"],"nodeType":"IdentifierPath","referencedDeclaration":19249,"src":"4807:10:64"},"nodeType":"ModifierInvocation","src":"4807:22:64"}],"name":"addLiquidityProportional","nameLocation":"4608:24:64","nodeType":"FunctionDefinition","parameters":{"id":16566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16556,"mutability":"mutable","name":"pool","nameLocation":"4650:4:64","nodeType":"VariableDeclaration","scope":16610,"src":"4642:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16555,"name":"address","nodeType":"ElementaryTypeName","src":"4642:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16559,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"4681:12:64","nodeType":"VariableDeclaration","scope":16610,"src":"4664:29:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16557,"name":"uint256","nodeType":"ElementaryTypeName","src":"4664:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16558,"nodeType":"ArrayTypeName","src":"4664:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":16561,"mutability":"mutable","name":"exactBptAmountOut","nameLocation":"4711:17:64","nodeType":"VariableDeclaration","scope":16610,"src":"4703:25:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16560,"name":"uint256","nodeType":"ElementaryTypeName","src":"4703:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16563,"mutability":"mutable","name":"wethIsEth","nameLocation":"4743:9:64","nodeType":"VariableDeclaration","scope":16610,"src":"4738:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16562,"name":"bool","nodeType":"ElementaryTypeName","src":"4738:4:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":16565,"mutability":"mutable","name":"userData","nameLocation":"4775:8:64","nodeType":"VariableDeclaration","scope":16610,"src":"4762:21:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":16564,"name":"bytes","nodeType":"ElementaryTypeName","src":"4762:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4632:157:64"},"returnParameters":{"id":16574,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16573,"mutability":"mutable","name":"amountsIn","nameLocation":"4856:9:64","nodeType":"VariableDeclaration","scope":16610,"src":"4839:26:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16571,"name":"uint256","nodeType":"ElementaryTypeName","src":"4839:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16572,"nodeType":"ArrayTypeName","src":"4839:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"4838:28:64"},"scope":18510,"src":"4599:911:64","stateMutability":"payable","virtual":false,"visibility":"external"},{"baseFunctions":[2506],"body":{"id":16665,"nodeType":"Block","src":"5804:644:64","statements":[{"expression":{"id":16663,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[null,{"id":16631,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16629,"src":"5817:12:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},null],"id":16632,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"5814:18:64","typeDescriptions":{"typeIdentifier":"t_tuple$__$_t_uint256_$__$","typeString":"tuple(,uint256,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":16639,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"5926:6:64","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":16640,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5933:16:64","memberName":"addLiquidityHook","nodeType":"MemberAccess","referencedDeclaration":16977,"src":"5926:23:64","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_AddLiquidityHookParams_$2947_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"function Router.addLiquidityHook(struct IRouterCommon.AddLiquidityHookParams calldata) returns (uint256[] memory,uint256,bytes memory)"}},{"arguments":[{"expression":{"id":16642,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6028:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":16643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6032:6:64","memberName":"sender","nodeType":"MemberAccess","src":"6028:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16644,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16613,"src":"6070:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16645,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16616,"src":"6114:14:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":16646,"name":"minBptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16618,"src":"6171:15:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":16647,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4807,"src":"6218:16:64","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_AddLiquidityKind_$4807_$","typeString":"type(enum AddLiquidityKind)"}},"id":16648,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6235:10:64","memberName":"UNBALANCED","nodeType":"MemberAccess","referencedDeclaration":4803,"src":"6218:27:64","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},{"id":16649,"name":"wethIsEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16620,"src":"6282:9:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":16650,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16622,"src":"6327:8:64","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":16641,"name":"AddLiquidityHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2947,"src":"5971:22:64","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_AddLiquidityHookParams_$2947_storage_ptr_$","typeString":"type(struct IRouterCommon.AddLiquidityHookParams storage pointer)"}},"id":16651,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["6020:6:64","6064:4:64","6100:12:64","6154:15:64","6212:4:64","6271:9:64","6317:8:64"],"names":["sender","pool","maxAmountsIn","minBptAmountOut","kind","wethIsEth","userData"],"nodeType":"FunctionCall","src":"5971:387:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_memory_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_AddLiquidityHookParams_$2947_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"function Router.addLiquidityHook(struct IRouterCommon.AddLiquidityHookParams calldata) returns (uint256[] memory,uint256,bytes memory)"},{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_memory_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams memory"}],"expression":{"id":16637,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5890:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":16638,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5894:10:64","memberName":"encodeCall","nodeType":"MemberAccess","src":"5890:14:64","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":16652,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5890:486:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":16635,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"5859:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":16636,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5866:6:64","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":4440,"src":"5859:13:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":16653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5859:531:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"baseExpression":{"id":16655,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6405:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16654,"name":"uint256","nodeType":"ElementaryTypeName","src":"6405:7:64","typeDescriptions":{}}},"id":16656,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"6405:9:64","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}},{"id":16658,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6416:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16657,"name":"uint256","nodeType":"ElementaryTypeName","src":"6416:7:64","typeDescriptions":{}}},{"id":16660,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6425:5:64","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":16659,"name":"bytes","nodeType":"ElementaryTypeName","src":"6425:5:64","typeDescriptions":{}}}],"id":16661,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"6404:27:64","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256[] memory),type(uint256),type(bytes storage pointer))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256[] memory),type(uint256),type(bytes storage pointer))"}],"expression":{"id":16633,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5835:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":16634,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5839:6:64","memberName":"decode","nodeType":"MemberAccess","src":"5835:10:64","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":16662,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5835:606:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256,bytes memory)"}},"src":"5814:627:64","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16664,"nodeType":"ExpressionStatement","src":"5814:627:64"}]},"documentation":{"id":16611,"nodeType":"StructuredDocumentation","src":"5516:23:64","text":"@inheritdoc IRouter"},"functionSelector":"c08bc851","id":16666,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"expression":{"id":16625,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5761:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":16626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5765:6:64","memberName":"sender","nodeType":"MemberAccess","src":"5761:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":16627,"kind":"modifierInvocation","modifierName":{"id":16624,"name":"saveSender","nameLocations":["5750:10:64"],"nodeType":"IdentifierPath","referencedDeclaration":19249,"src":"5750:10:64"},"nodeType":"ModifierInvocation","src":"5750:22:64"}],"name":"addLiquidityUnbalanced","nameLocation":"5553:22:64","nodeType":"FunctionDefinition","parameters":{"id":16623,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16613,"mutability":"mutable","name":"pool","nameLocation":"5593:4:64","nodeType":"VariableDeclaration","scope":16666,"src":"5585:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16612,"name":"address","nodeType":"ElementaryTypeName","src":"5585:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16616,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"5624:14:64","nodeType":"VariableDeclaration","scope":16666,"src":"5607:31:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16614,"name":"uint256","nodeType":"ElementaryTypeName","src":"5607:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16615,"nodeType":"ArrayTypeName","src":"5607:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":16618,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"5656:15:64","nodeType":"VariableDeclaration","scope":16666,"src":"5648:23:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16617,"name":"uint256","nodeType":"ElementaryTypeName","src":"5648:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16620,"mutability":"mutable","name":"wethIsEth","nameLocation":"5686:9:64","nodeType":"VariableDeclaration","scope":16666,"src":"5681:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16619,"name":"bool","nodeType":"ElementaryTypeName","src":"5681:4:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":16622,"mutability":"mutable","name":"userData","nameLocation":"5718:8:64","nodeType":"VariableDeclaration","scope":16666,"src":"5705:21:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":16621,"name":"bytes","nodeType":"ElementaryTypeName","src":"5705:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5575:157:64"},"returnParameters":{"id":16630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16629,"mutability":"mutable","name":"bptAmountOut","nameLocation":"5790:12:64","nodeType":"VariableDeclaration","scope":16666,"src":"5782:20:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16628,"name":"uint256","nodeType":"ElementaryTypeName","src":"5782:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5781:22:64"},"scope":18510,"src":"5544:904:64","stateMutability":"payable","virtual":false,"visibility":"external"},{"baseFunctions":[2525],"body":{"id":16742,"nodeType":"Block","src":"6761:881:64","statements":[{"assignments":[16693,16695],"declarations":[{"constant":false,"id":16693,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"6789:12:64","nodeType":"VariableDeclaration","scope":16742,"src":"6772:29:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16691,"name":"uint256","nodeType":"ElementaryTypeName","src":"6772:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16692,"nodeType":"ArrayTypeName","src":"6772:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":16695,"mutability":"mutable","name":"tokenIndex","nameLocation":"6811:10:64","nodeType":"VariableDeclaration","scope":16742,"src":"6803:18:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16694,"name":"uint256","nodeType":"ElementaryTypeName","src":"6803:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16701,"initialValue":{"arguments":[{"id":16697,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16669,"src":"6872:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16698,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16672,"src":"6890:7:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":16699,"name":"maxAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16674,"src":"6911:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":16696,"name":"_getSingleInputArrayAndTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19026,"src":"6825:33:64","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_contract$_IERC20_$40109_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address,contract IERC20,uint256) view returns (uint256[] memory,uint256)"}},"id":16700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6825:107:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(uint256[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"6771:161:64"},{"assignments":[16706,null,null],"declarations":[{"constant":false,"id":16706,"mutability":"mutable","name":"amountsIn","nameLocation":"6961:9:64","nodeType":"VariableDeclaration","scope":16742,"src":"6944:26:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16704,"name":"uint256","nodeType":"ElementaryTypeName","src":"6944:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16705,"nodeType":"ArrayTypeName","src":"6944:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},null,null],"id":16737,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":16713,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"7069:6:64","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":16714,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7076:16:64","memberName":"addLiquidityHook","nodeType":"MemberAccess","referencedDeclaration":16977,"src":"7069:23:64","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_AddLiquidityHookParams_$2947_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"function Router.addLiquidityHook(struct IRouterCommon.AddLiquidityHookParams calldata) returns (uint256[] memory,uint256,bytes memory)"}},{"arguments":[{"expression":{"id":16716,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7171:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":16717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7175:6:64","memberName":"sender","nodeType":"MemberAccess","src":"7171:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16718,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16669,"src":"7213:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16719,"name":"maxAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16693,"src":"7257:12:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":16720,"name":"exactBptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16676,"src":"7312:17:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":16721,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4807,"src":"7361:16:64","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_AddLiquidityKind_$4807_$","typeString":"type(enum AddLiquidityKind)"}},"id":16722,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7378:22:64","memberName":"SINGLE_TOKEN_EXACT_OUT","nodeType":"MemberAccess","referencedDeclaration":4804,"src":"7361:39:64","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},{"id":16723,"name":"wethIsEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16678,"src":"7437:9:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":16724,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16680,"src":"7482:8:64","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":16715,"name":"AddLiquidityHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2947,"src":"7114:22:64","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_AddLiquidityHookParams_$2947_storage_ptr_$","typeString":"type(struct IRouterCommon.AddLiquidityHookParams storage pointer)"}},"id":16725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["7163:6:64","7207:4:64","7243:12:64","7295:15:64","7355:4:64","7426:9:64","7472:8:64"],"names":["sender","pool","maxAmountsIn","minBptAmountOut","kind","wethIsEth","userData"],"nodeType":"FunctionCall","src":"7114:399:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_memory_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_AddLiquidityHookParams_$2947_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"function Router.addLiquidityHook(struct IRouterCommon.AddLiquidityHookParams calldata) returns (uint256[] memory,uint256,bytes memory)"},{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_memory_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams memory"}],"expression":{"id":16711,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"7033:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":16712,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7037:10:64","memberName":"encodeCall","nodeType":"MemberAccess","src":"7033:14:64","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":16726,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7033:498:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":16709,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"7002:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":16710,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7009:6:64","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":4440,"src":"7002:13:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":16727,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7002:543:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"baseExpression":{"id":16729,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7560:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16728,"name":"uint256","nodeType":"ElementaryTypeName","src":"7560:7:64","typeDescriptions":{}}},"id":16730,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"7560:9:64","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}},{"id":16732,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7571:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16731,"name":"uint256","nodeType":"ElementaryTypeName","src":"7571:7:64","typeDescriptions":{}}},{"id":16734,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7580:5:64","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":16733,"name":"bytes","nodeType":"ElementaryTypeName","src":"7580:5:64","typeDescriptions":{}}}],"id":16735,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"7559:27:64","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256[] memory),type(uint256),type(bytes storage pointer))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256[] memory),type(uint256),type(bytes storage pointer))"}],"expression":{"id":16707,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"6978:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":16708,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6982:6:64","memberName":"decode","nodeType":"MemberAccess","src":"6978:10:64","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":16736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6978:618:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"6943:653:64"},{"expression":{"baseExpression":{"id":16738,"name":"amountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16706,"src":"7614:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":16740,"indexExpression":{"id":16739,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16695,"src":"7624:10:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7614:21:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":16688,"id":16741,"nodeType":"Return","src":"7607:28:64"}]},"documentation":{"id":16667,"nodeType":"StructuredDocumentation","src":"6454:23:64","text":"@inheritdoc IRouter"},"functionSelector":"72657d17","id":16743,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"expression":{"id":16683,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6722:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":16684,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6726:6:64","memberName":"sender","nodeType":"MemberAccess","src":"6722:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":16685,"kind":"modifierInvocation","modifierName":{"id":16682,"name":"saveSender","nameLocations":["6711:10:64"],"nodeType":"IdentifierPath","referencedDeclaration":19249,"src":"6711:10:64"},"nodeType":"ModifierInvocation","src":"6711:22:64"}],"name":"addLiquiditySingleTokenExactOut","nameLocation":"6491:31:64","nodeType":"FunctionDefinition","parameters":{"id":16681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16669,"mutability":"mutable","name":"pool","nameLocation":"6540:4:64","nodeType":"VariableDeclaration","scope":16743,"src":"6532:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16668,"name":"address","nodeType":"ElementaryTypeName","src":"6532:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16672,"mutability":"mutable","name":"tokenIn","nameLocation":"6561:7:64","nodeType":"VariableDeclaration","scope":16743,"src":"6554:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":16671,"nodeType":"UserDefinedTypeName","pathNode":{"id":16670,"name":"IERC20","nameLocations":["6554:6:64"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"6554:6:64"},"referencedDeclaration":40109,"src":"6554:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":16674,"mutability":"mutable","name":"maxAmountIn","nameLocation":"6586:11:64","nodeType":"VariableDeclaration","scope":16743,"src":"6578:19:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16673,"name":"uint256","nodeType":"ElementaryTypeName","src":"6578:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16676,"mutability":"mutable","name":"exactBptAmountOut","nameLocation":"6615:17:64","nodeType":"VariableDeclaration","scope":16743,"src":"6607:25:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16675,"name":"uint256","nodeType":"ElementaryTypeName","src":"6607:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16678,"mutability":"mutable","name":"wethIsEth","nameLocation":"6647:9:64","nodeType":"VariableDeclaration","scope":16743,"src":"6642:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16677,"name":"bool","nodeType":"ElementaryTypeName","src":"6642:4:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":16680,"mutability":"mutable","name":"userData","nameLocation":"6679:8:64","nodeType":"VariableDeclaration","scope":16743,"src":"6666:21:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":16679,"name":"bytes","nodeType":"ElementaryTypeName","src":"6666:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6522:171:64"},"returnParameters":{"id":16688,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16687,"mutability":"mutable","name":"amountIn","nameLocation":"6751:8:64","nodeType":"VariableDeclaration","scope":16743,"src":"6743:16:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16686,"name":"uint256","nodeType":"ElementaryTypeName","src":"6743:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6742:18:64"},"scope":18510,"src":"6482:1160:64","stateMutability":"payable","virtual":false,"visibility":"external"},{"baseFunctions":[2538],"body":{"id":16781,"nodeType":"Block","src":"7851:475:64","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":16765,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"7920:6:64","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":16766,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7927:16:64","memberName":"addLiquidityHook","nodeType":"MemberAccess","referencedDeclaration":16977,"src":"7920:23:64","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_AddLiquidityHookParams_$2947_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"function Router.addLiquidityHook(struct IRouterCommon.AddLiquidityHookParams calldata) returns (uint256[] memory,uint256,bytes memory)"}},{"arguments":[{"expression":{"id":16768,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8014:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":16769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8018:6:64","memberName":"sender","nodeType":"MemberAccess","src":"8014:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16770,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16746,"src":"8052:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16771,"name":"amountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16749,"src":"8092:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"hexValue":"30","id":16772,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8140:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"id":16773,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4807,"src":"8169:16:64","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_AddLiquidityKind_$4807_$","typeString":"type(enum AddLiquidityKind)"}},"id":16774,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8186:8:64","memberName":"DONATION","nodeType":"MemberAccess","referencedDeclaration":4805,"src":"8169:25:64","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},{"id":16775,"name":"wethIsEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16751,"src":"8227:9:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":16776,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16753,"src":"8268:8:64","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":16767,"name":"AddLiquidityHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2947,"src":"7961:22:64","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_AddLiquidityHookParams_$2947_storage_ptr_$","typeString":"type(struct IRouterCommon.AddLiquidityHookParams storage pointer)"}},"id":16777,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["8006:6:64","8046:4:64","8078:12:64","8123:15:64","8163:4:64","8216:9:64","8258:8:64"],"names":["sender","pool","maxAmountsIn","minBptAmountOut","kind","wethIsEth","userData"],"nodeType":"FunctionCall","src":"7961:334:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_memory_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_AddLiquidityHookParams_$2947_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"function Router.addLiquidityHook(struct IRouterCommon.AddLiquidityHookParams calldata) returns (uint256[] memory,uint256,bytes memory)"},{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_memory_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams memory"}],"expression":{"id":16763,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"7888:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":16764,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7892:10:64","memberName":"encodeCall","nodeType":"MemberAccess","src":"7888:14:64","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":16778,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7888:421:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":16760,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"7861:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":16762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7868:6:64","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":4440,"src":"7861:13:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":16779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7861:458:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":16780,"nodeType":"ExpressionStatement","src":"7861:458:64"}]},"documentation":{"id":16744,"nodeType":"StructuredDocumentation","src":"7648:23:64","text":"@inheritdoc IRouter"},"functionSelector":"bf6ee3fd","id":16782,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"expression":{"id":16756,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7839:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":16757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7843:6:64","memberName":"sender","nodeType":"MemberAccess","src":"7839:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":16758,"kind":"modifierInvocation","modifierName":{"id":16755,"name":"saveSender","nameLocations":["7828:10:64"],"nodeType":"IdentifierPath","referencedDeclaration":19249,"src":"7828:10:64"},"nodeType":"ModifierInvocation","src":"7828:22:64"}],"name":"donate","nameLocation":"7685:6:64","nodeType":"FunctionDefinition","parameters":{"id":16754,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16746,"mutability":"mutable","name":"pool","nameLocation":"7709:4:64","nodeType":"VariableDeclaration","scope":16782,"src":"7701:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16745,"name":"address","nodeType":"ElementaryTypeName","src":"7701:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16749,"mutability":"mutable","name":"amountsIn","nameLocation":"7740:9:64","nodeType":"VariableDeclaration","scope":16782,"src":"7723:26:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16747,"name":"uint256","nodeType":"ElementaryTypeName","src":"7723:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16748,"nodeType":"ArrayTypeName","src":"7723:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":16751,"mutability":"mutable","name":"wethIsEth","nameLocation":"7764:9:64","nodeType":"VariableDeclaration","scope":16782,"src":"7759:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16750,"name":"bool","nodeType":"ElementaryTypeName","src":"7759:4:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":16753,"mutability":"mutable","name":"userData","nameLocation":"7796:8:64","nodeType":"VariableDeclaration","scope":16782,"src":"7783:21:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":16752,"name":"bytes","nodeType":"ElementaryTypeName","src":"7783:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7691:119:64"},"returnParameters":{"id":16759,"nodeType":"ParameterList","parameters":[],"src":"7851:0:64"},"scope":18510,"src":"7676:650:64","stateMutability":"payable","virtual":false,"visibility":"external"},{"baseFunctions":[2560],"body":{"id":16839,"nodeType":"Block","src":"8703:700:64","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":16814,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"8835:6:64","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":16815,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8842:16:64","memberName":"addLiquidityHook","nodeType":"MemberAccess","referencedDeclaration":16977,"src":"8835:23:64","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_AddLiquidityHookParams_$2947_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"function Router.addLiquidityHook(struct IRouterCommon.AddLiquidityHookParams calldata) returns (uint256[] memory,uint256,bytes memory)"}},{"arguments":[{"expression":{"id":16817,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8945:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":16818,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8949:6:64","memberName":"sender","nodeType":"MemberAccess","src":"8945:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16819,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16785,"src":"8991:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":16820,"name":"maxAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16788,"src":"9039:12:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":16821,"name":"minBptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16790,"src":"9098:15:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":16822,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4807,"src":"9149:16:64","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_AddLiquidityKind_$4807_$","typeString":"type(enum AddLiquidityKind)"}},"id":16823,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9166:6:64","memberName":"CUSTOM","nodeType":"MemberAccess","referencedDeclaration":4806,"src":"9149:23:64","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},{"id":16824,"name":"wethIsEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16792,"src":"9213:9:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":16825,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16794,"src":"9262:8:64","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":16816,"name":"AddLiquidityHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2947,"src":"8884:22:64","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_AddLiquidityHookParams_$2947_storage_ptr_$","typeString":"type(struct IRouterCommon.AddLiquidityHookParams storage pointer)"}},"id":16826,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["8937:6:64","8985:4:64","9025:12:64","9081:15:64","9143:4:64","9202:9:64","9252:8:64"],"names":["sender","pool","maxAmountsIn","minBptAmountOut","kind","wethIsEth","userData"],"nodeType":"FunctionCall","src":"8884:413:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_memory_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_AddLiquidityHookParams_$2947_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"function Router.addLiquidityHook(struct IRouterCommon.AddLiquidityHookParams calldata) returns (uint256[] memory,uint256,bytes memory)"},{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_memory_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams memory"}],"expression":{"id":16812,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8795:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":16813,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8799:10:64","memberName":"encodeCall","nodeType":"MemberAccess","src":"8795:14:64","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":16827,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8795:524:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":16810,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"8760:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":16811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8767:6:64","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":4440,"src":"8760:13:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":16828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8760:577:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"baseExpression":{"id":16830,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9356:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16829,"name":"uint256","nodeType":"ElementaryTypeName","src":"9356:7:64","typeDescriptions":{}}},"id":16831,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"9356:9:64","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}},{"id":16833,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9367:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":16832,"name":"uint256","nodeType":"ElementaryTypeName","src":"9367:7:64","typeDescriptions":{}}},{"id":16835,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9376:5:64","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":16834,"name":"bytes","nodeType":"ElementaryTypeName","src":"9376:5:64","typeDescriptions":{}}}],"id":16836,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"9355:27:64","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256[] memory),type(uint256),type(bytes storage pointer))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256[] memory),type(uint256),type(bytes storage pointer))"}],"expression":{"id":16808,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"8732:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":16809,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8736:6:64","memberName":"decode","nodeType":"MemberAccess","src":"8732:10:64","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":16837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8732:664:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256,bytes memory)"}},"functionReturnParameters":16807,"id":16838,"nodeType":"Return","src":"8713:683:64"}]},"documentation":{"id":16783,"nodeType":"StructuredDocumentation","src":"8332:23:64","text":"@inheritdoc IRouter"},"functionSelector":"0ca078ec","id":16840,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"expression":{"id":16797,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8595:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":16798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8599:6:64","memberName":"sender","nodeType":"MemberAccess","src":"8595:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":16799,"kind":"modifierInvocation","modifierName":{"id":16796,"name":"saveSender","nameLocations":["8584:10:64"],"nodeType":"IdentifierPath","referencedDeclaration":19249,"src":"8584:10:64"},"nodeType":"ModifierInvocation","src":"8584:22:64"}],"name":"addLiquidityCustom","nameLocation":"8369:18:64","nodeType":"FunctionDefinition","parameters":{"id":16795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16785,"mutability":"mutable","name":"pool","nameLocation":"8405:4:64","nodeType":"VariableDeclaration","scope":16840,"src":"8397:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16784,"name":"address","nodeType":"ElementaryTypeName","src":"8397:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16788,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"8436:12:64","nodeType":"VariableDeclaration","scope":16840,"src":"8419:29:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16786,"name":"uint256","nodeType":"ElementaryTypeName","src":"8419:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16787,"nodeType":"ArrayTypeName","src":"8419:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":16790,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"8466:15:64","nodeType":"VariableDeclaration","scope":16840,"src":"8458:23:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16789,"name":"uint256","nodeType":"ElementaryTypeName","src":"8458:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16792,"mutability":"mutable","name":"wethIsEth","nameLocation":"8496:9:64","nodeType":"VariableDeclaration","scope":16840,"src":"8491:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16791,"name":"bool","nodeType":"ElementaryTypeName","src":"8491:4:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":16794,"mutability":"mutable","name":"userData","nameLocation":"8528:8:64","nodeType":"VariableDeclaration","scope":16840,"src":"8515:21:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":16793,"name":"bytes","nodeType":"ElementaryTypeName","src":"8515:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8387:155:64"},"returnParameters":{"id":16807,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16802,"mutability":"mutable","name":"amountsIn","nameLocation":"8641:9:64","nodeType":"VariableDeclaration","scope":16840,"src":"8624:26:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16800,"name":"uint256","nodeType":"ElementaryTypeName","src":"8624:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16801,"nodeType":"ArrayTypeName","src":"8624:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":16804,"mutability":"mutable","name":"bptAmountOut","nameLocation":"8660:12:64","nodeType":"VariableDeclaration","scope":16840,"src":"8652:20:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16803,"name":"uint256","nodeType":"ElementaryTypeName","src":"8652:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16806,"mutability":"mutable","name":"returnData","nameLocation":"8687:10:64","nodeType":"VariableDeclaration","scope":16840,"src":"8674:23:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":16805,"name":"bytes","nodeType":"ElementaryTypeName","src":"8674:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8623:75:64"},"scope":18510,"src":"8360:1043:64","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":16976,"nodeType":"Block","src":"10047:1403:64","statements":[{"expression":{"id":16879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":16858,"name":"amountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16852,"src":"10058:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":16859,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16854,"src":"10069:12:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":16860,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16856,"src":"10083:10:64","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":16861,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"10057:37:64","typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256,bytes memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"expression":{"id":16865,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16844,"src":"10173:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_calldata_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams calldata"}},"id":16866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10180:4:64","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2934,"src":"10173:11:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16867,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16844,"src":"10206:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_calldata_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams calldata"}},"id":16868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10213:6:64","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":2932,"src":"10206:13:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":16869,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16844,"src":"10251:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_calldata_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams calldata"}},"id":16870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10258:12:64","memberName":"maxAmountsIn","nodeType":"MemberAccess","referencedDeclaration":2937,"src":"10251:19:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},{"expression":{"id":16871,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16844,"src":"10305:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_calldata_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams calldata"}},"id":16872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10312:15:64","memberName":"minBptAmountOut","nodeType":"MemberAccess","referencedDeclaration":2939,"src":"10305:22:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":16873,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16844,"src":"10351:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_calldata_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams calldata"}},"id":16874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10358:4:64","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2942,"src":"10351:11:64","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},{"expression":{"id":16875,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16844,"src":"10390:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_calldata_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams calldata"}},"id":16876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10397:8:64","memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":2946,"src":"10390:15:64","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":16864,"name":"AddLiquidityParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4823,"src":"10130:18:64","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_AddLiquidityParams_$4823_storage_ptr_$","typeString":"type(struct AddLiquidityParams storage pointer)"}},"id":16877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["10167:4:64","10202:2:64","10237:12:64","10288:15:64","10345:4:64","10380:8:64"],"names":["pool","to","maxAmountsIn","minBptAmountOut","kind","userData"],"nodeType":"FunctionCall","src":"10130:290:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}],"expression":{"id":16862,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"10097:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":16863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10104:12:64","memberName":"addLiquidity","nodeType":"MemberAccess","referencedDeclaration":4489,"src":"10097:19:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_AddLiquidityParams_$4823_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"function (struct AddLiquidityParams memory) external returns (uint256[] memory,uint256,bytes memory)"}},"id":16878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10097:333:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256,bytes memory)"}},"src":"10057:373:64","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16880,"nodeType":"ExpressionStatement","src":"10057:373:64"},{"assignments":[16885],"declarations":[{"constant":false,"id":16885,"mutability":"mutable","name":"tokens","nameLocation":"10535:6:64","nodeType":"VariableDeclaration","scope":16976,"src":"10519:22:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":16883,"nodeType":"UserDefinedTypeName","pathNode":{"id":16882,"name":"IERC20","nameLocations":["10519:6:64"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"10519:6:64"},"referencedDeclaration":40109,"src":"10519:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":16884,"nodeType":"ArrayTypeName","src":"10519:8:64","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"id":16891,"initialValue":{"arguments":[{"expression":{"id":16888,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16844,"src":"10565:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_calldata_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams calldata"}},"id":16889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10572:4:64","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2934,"src":"10565:11:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":16886,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"10544:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":16887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10551:13:64","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":4145,"src":"10544:20:64","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":16890,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10544:33:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"VariableDeclarationStatement","src":"10519:58:64"},{"body":{"id":16969,"nodeType":"Block","src":"10632:733:64","statements":[{"assignments":[16905],"declarations":[{"constant":false,"id":16905,"mutability":"mutable","name":"token","nameLocation":"10653:5:64","nodeType":"VariableDeclaration","scope":16969,"src":"10646:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":16904,"nodeType":"UserDefinedTypeName","pathNode":{"id":16903,"name":"IERC20","nameLocations":["10646:6:64"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"10646:6:64"},"referencedDeclaration":40109,"src":"10646:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"id":16909,"initialValue":{"baseExpression":{"id":16906,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16885,"src":"10661:6:64","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":16908,"indexExpression":{"id":16907,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16893,"src":"10668:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10661:9:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"10646:24:64"},{"assignments":[16911],"declarations":[{"constant":false,"id":16911,"mutability":"mutable","name":"amountIn","nameLocation":"10692:8:64","nodeType":"VariableDeclaration","scope":16969,"src":"10684:16:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16910,"name":"uint256","nodeType":"ElementaryTypeName","src":"10684:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16915,"initialValue":{"baseExpression":{"id":16912,"name":"amountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16852,"src":"10703:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":16914,"indexExpression":{"id":16913,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16893,"src":"10713:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10703:12:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10684:31:64"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16916,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16911,"src":"10734:8:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":16917,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10746:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10734:13:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16921,"nodeType":"IfStatement","src":"10730:60:64","trueBody":{"id":16920,"nodeType":"Block","src":"10749:41:64","statements":[{"id":16919,"nodeType":"Continue","src":"10767:8:64"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":16933,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":16922,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16844,"src":"10869:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_calldata_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams calldata"}},"id":16923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10876:9:64","memberName":"wethIsEth","nodeType":"MemberAccess","referencedDeclaration":2944,"src":"10869:16:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":16932,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":16926,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16905,"src":"10897:5:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":16925,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10889:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16924,"name":"address","nodeType":"ElementaryTypeName","src":"10889:7:64","typeDescriptions":{}}},"id":16927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10889:14:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":16930,"name":"_weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18585,"src":"10915:5:64","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}],"id":16929,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10907:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16928,"name":"address","nodeType":"ElementaryTypeName","src":"10907:7:64","typeDescriptions":{}}},"id":16931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10907:14:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10889:32:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10869:52:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":16967,"nodeType":"Block","src":"11002:353:64","statements":[{"expression":{"arguments":[{"expression":{"id":16945,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16844,"src":"11223:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_calldata_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams calldata"}},"id":16946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11230:6:64","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":2932,"src":"11223:13:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":16949,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"11246:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}],"id":16948,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11238:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16947,"name":"address","nodeType":"ElementaryTypeName","src":"11238:7:64","typeDescriptions":{}}},"id":16950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11238:15:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":16951,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16911,"src":"11255:8:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11264:9:64","memberName":"toUint160","nodeType":"MemberAccess","referencedDeclaration":43591,"src":"11255:18:64","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint160_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint160)"}},"id":16953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11255:20:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},{"arguments":[{"id":16956,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16905,"src":"11285:5:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":16955,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11277:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":16954,"name":"address","nodeType":"ElementaryTypeName","src":"11277:7:64","typeDescriptions":{}}},"id":16957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11277:14:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint160","typeString":"uint160"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":16942,"name":"_permit2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18588,"src":"11201:8:64","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"}},"id":16944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11210:12:64","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":48531,"src":"11201:21:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint160_$_t_address_$returns$__$","typeString":"function (address,address,uint160,address) external"}},"id":16958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11201:91:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16959,"nodeType":"ExpressionStatement","src":"11201:91:64"},{"expression":{"arguments":[{"id":16963,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16905,"src":"11324:5:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":16964,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16911,"src":"11331:8:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16960,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"11310:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":16962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11317:6:64","memberName":"settle","nodeType":"MemberAccess","referencedDeclaration":4451,"src":"11310:13:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$_t_uint256_$","typeString":"function (contract IERC20,uint256) external returns (uint256)"}},"id":16965,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11310:30:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16966,"nodeType":"ExpressionStatement","src":"11310:30:64"}]},"id":16968,"nodeType":"IfStatement","src":"10865:490:64","trueBody":{"id":16941,"nodeType":"Block","src":"10923:73:64","statements":[{"expression":{"arguments":[{"id":16937,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"10964:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},{"id":16938,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16911,"src":"10972:8:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":16934,"name":"_weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18585,"src":"10941:5:64","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},"id":16936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10947:16:64","memberName":"wrapEthAndSettle","nodeType":"MemberAccess","referencedDeclaration":31107,"src":"10941:22:64","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IWETH_$291_$_t_contract$_IVault_$3111_$_t_uint256_$returns$__$attached_to$_t_contract$_IWETH_$291_$","typeString":"function (contract IWETH,contract IVault,uint256)"}},"id":16939,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10941:40:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16940,"nodeType":"ExpressionStatement","src":"10941:40:64"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":16899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":16896,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16893,"src":"10608:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":16897,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16885,"src":"10612:6:64","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":16898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10619:6:64","memberName":"length","nodeType":"MemberAccess","src":"10612:13:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10608:17:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":16970,"initializationExpression":{"assignments":[16893],"declarations":[{"constant":false,"id":16893,"mutability":"mutable","name":"i","nameLocation":"10601:1:64","nodeType":"VariableDeclaration","scope":16970,"src":"10593:9:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16892,"name":"uint256","nodeType":"ElementaryTypeName","src":"10593:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":16895,"initialValue":{"hexValue":"30","id":16894,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10605:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10593:13:64"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":16901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"10627:3:64","subExpression":{"id":16900,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16893,"src":"10629:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16902,"nodeType":"ExpressionStatement","src":"10627:3:64"},"nodeType":"ForStatement","src":"10588:777:64"},{"expression":{"arguments":[{"expression":{"id":16972,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16844,"src":"11429:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_calldata_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams calldata"}},"id":16973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11436:6:64","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":2932,"src":"11429:13:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":16971,"name":"_returnEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18982,"src":"11418:10:64","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":16974,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11418:25:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":16975,"nodeType":"ExpressionStatement","src":"11418:25:64"}]},"documentation":{"id":16841,"nodeType":"StructuredDocumentation","src":"9409:401:64","text":" @notice Hook for adding liquidity.\n @dev Can only be called by the Vault.\n @param params Add liquidity parameters (see IRouter for struct definition)\n @return amountsIn Actual amounts in required for the join\n @return bptAmountOut BPT amount minted in exchange for the input tokens\n @return returnData Arbitrary data with encoded response from the pool"},"functionSelector":"5b343791","id":16977,"implemented":true,"kind":"function","modifiers":[{"id":16847,"kind":"modifierInvocation","modifierName":{"id":16846,"name":"nonReentrant","nameLocations":["9920:12:64"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"9920:12:64"},"nodeType":"ModifierInvocation","src":"9920:12:64"},{"id":16849,"kind":"modifierInvocation","modifierName":{"id":16848,"name":"onlyVault","nameLocations":["9941:9:64"],"nodeType":"IdentifierPath","referencedDeclaration":28128,"src":"9941:9:64"},"nodeType":"ModifierInvocation","src":"9941:9:64"}],"name":"addLiquidityHook","nameLocation":"9824:16:64","nodeType":"FunctionDefinition","parameters":{"id":16845,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16844,"mutability":"mutable","name":"params","nameLocation":"9882:6:64","nodeType":"VariableDeclaration","scope":16977,"src":"9850:38:64","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_calldata_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams"},"typeName":{"id":16843,"nodeType":"UserDefinedTypeName","pathNode":{"id":16842,"name":"AddLiquidityHookParams","nameLocations":["9850:22:64"],"nodeType":"IdentifierPath","referencedDeclaration":2947,"src":"9850:22:64"},"referencedDeclaration":2947,"src":"9850:22:64","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_storage_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams"}},"visibility":"internal"}],"src":"9840:54:64"},"returnParameters":{"id":16857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16852,"mutability":"mutable","name":"amountsIn","nameLocation":"9985:9:64","nodeType":"VariableDeclaration","scope":16977,"src":"9968:26:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16850,"name":"uint256","nodeType":"ElementaryTypeName","src":"9968:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16851,"nodeType":"ArrayTypeName","src":"9968:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":16854,"mutability":"mutable","name":"bptAmountOut","nameLocation":"10004:12:64","nodeType":"VariableDeclaration","scope":16977,"src":"9996:20:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16853,"name":"uint256","nodeType":"ElementaryTypeName","src":"9996:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16856,"mutability":"mutable","name":"returnData","nameLocation":"10031:10:64","nodeType":"VariableDeclaration","scope":16977,"src":"10018:23:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":16855,"name":"bytes","nodeType":"ElementaryTypeName","src":"10018:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9967:75:64"},"scope":18510,"src":"9815:1635:64","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2578],"body":{"id":17033,"nodeType":"Block","src":"11969:653:64","statements":[{"expression":{"id":17031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[null,{"id":16999,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16997,"src":"11982:10:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},null],"id":17000,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"11979:16:64","typeDescriptions":{"typeIdentifier":"t_tuple$__$_t_array$_t_uint256_$dyn_memory_ptr_$__$","typeString":"tuple(,uint256[] memory,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":17007,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"12089:6:64","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":17008,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12096:19:64","memberName":"removeLiquidityHook","nodeType":"MemberAccess","referencedDeclaration":17402,"src":"12089:26:64","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function Router.removeLiquidityHook(struct IRouterCommon.RemoveLiquidityHookParams calldata) returns (uint256,uint256[] memory,bytes memory)"}},{"arguments":[{"expression":{"id":17010,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12197:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12201:6:64","memberName":"sender","nodeType":"MemberAccess","src":"12197:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17012,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16980,"src":"12239:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17013,"name":"minAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16985,"src":"12284:13:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":17014,"name":"exactBptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16982,"src":"12339:16:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17015,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4828,"src":"12387:19:64","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RemoveLiquidityKind_$4828_$","typeString":"type(enum RemoveLiquidityKind)"}},"id":17016,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12407:12:64","memberName":"PROPORTIONAL","nodeType":"MemberAccess","referencedDeclaration":4824,"src":"12387:32:64","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},{"id":17017,"name":"wethIsEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16987,"src":"12456:9:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":17018,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16989,"src":"12501:8:64","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":17009,"name":"RemoveLiquidityHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2965,"src":"12137:25:64","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_RemoveLiquidityHookParams_$2965_storage_ptr_$","typeString":"type(struct IRouterCommon.RemoveLiquidityHookParams storage pointer)"}},"id":17019,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["12189:6:64","12233:4:64","12269:13:64","12323:14:64","12381:4:64","12445:9:64","12491:8:64"],"names":["sender","pool","minAmountsOut","maxBptAmountIn","kind","wethIsEth","userData"],"nodeType":"FunctionCall","src":"12137:395:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_memory_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function Router.removeLiquidityHook(struct IRouterCommon.RemoveLiquidityHookParams calldata) returns (uint256,uint256[] memory,bytes memory)"},{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_memory_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams memory"}],"expression":{"id":17005,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"12053:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":17006,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12057:10:64","memberName":"encodeCall","nodeType":"MemberAccess","src":"12053:14:64","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":17020,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12053:497:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":17003,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"12022:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":17004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12029:6:64","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":4440,"src":"12022:13:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":17021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12022:542:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":17023,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12579:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":17022,"name":"uint256","nodeType":"ElementaryTypeName","src":"12579:7:64","typeDescriptions":{}}},{"baseExpression":{"id":17025,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12588:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":17024,"name":"uint256","nodeType":"ElementaryTypeName","src":"12588:7:64","typeDescriptions":{}}},"id":17026,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"12588:9:64","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}},{"id":17028,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12599:5:64","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":17027,"name":"bytes","nodeType":"ElementaryTypeName","src":"12599:5:64","typeDescriptions":{}}}],"id":17029,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"12578:27:64","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256),type(uint256[] memory),type(bytes storage pointer))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256),type(uint256[] memory),type(bytes storage pointer))"}],"expression":{"id":17001,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"11998:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":17002,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12002:6:64","memberName":"decode","nodeType":"MemberAccess","src":"11998:10:64","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":17030,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11998:617:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory,bytes memory)"}},"src":"11979:636:64","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17032,"nodeType":"ExpressionStatement","src":"11979:636:64"}]},"documentation":{"id":16978,"nodeType":"StructuredDocumentation","src":"11669:23:64","text":"@inheritdoc IRouter"},"functionSelector":"51682750","id":17034,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"expression":{"id":16992,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11919:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":16993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11923:6:64","memberName":"sender","nodeType":"MemberAccess","src":"11919:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":16994,"kind":"modifierInvocation","modifierName":{"id":16991,"name":"saveSender","nameLocations":["11908:10:64"],"nodeType":"IdentifierPath","referencedDeclaration":19249,"src":"11908:10:64"},"nodeType":"ModifierInvocation","src":"11908:22:64"}],"name":"removeLiquidityProportional","nameLocation":"11706:27:64","nodeType":"FunctionDefinition","parameters":{"id":16990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16980,"mutability":"mutable","name":"pool","nameLocation":"11751:4:64","nodeType":"VariableDeclaration","scope":17034,"src":"11743:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":16979,"name":"address","nodeType":"ElementaryTypeName","src":"11743:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":16982,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"11773:16:64","nodeType":"VariableDeclaration","scope":17034,"src":"11765:24:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":16981,"name":"uint256","nodeType":"ElementaryTypeName","src":"11765:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":16985,"mutability":"mutable","name":"minAmountsOut","nameLocation":"11816:13:64","nodeType":"VariableDeclaration","scope":17034,"src":"11799:30:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16983,"name":"uint256","nodeType":"ElementaryTypeName","src":"11799:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16984,"nodeType":"ArrayTypeName","src":"11799:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":16987,"mutability":"mutable","name":"wethIsEth","nameLocation":"11844:9:64","nodeType":"VariableDeclaration","scope":17034,"src":"11839:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":16986,"name":"bool","nodeType":"ElementaryTypeName","src":"11839:4:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":16989,"mutability":"mutable","name":"userData","nameLocation":"11876:8:64","nodeType":"VariableDeclaration","scope":17034,"src":"11863:21:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":16988,"name":"bytes","nodeType":"ElementaryTypeName","src":"11863:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11733:157:64"},"returnParameters":{"id":16998,"nodeType":"ParameterList","parameters":[{"constant":false,"id":16997,"mutability":"mutable","name":"amountsOut","nameLocation":"11957:10:64","nodeType":"VariableDeclaration","scope":17034,"src":"11940:27:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":16995,"name":"uint256","nodeType":"ElementaryTypeName","src":"11940:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":16996,"nodeType":"ArrayTypeName","src":"11940:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11939:29:64"},"scope":18510,"src":"11697:925:64","stateMutability":"payable","virtual":false,"visibility":"external"},{"baseFunctions":[2597],"body":{"id":17110,"nodeType":"Block","src":"12939:894:64","statements":[{"assignments":[17061,17063],"declarations":[{"constant":false,"id":17061,"mutability":"mutable","name":"minAmountsOut","nameLocation":"12967:13:64","nodeType":"VariableDeclaration","scope":17110,"src":"12950:30:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17059,"name":"uint256","nodeType":"ElementaryTypeName","src":"12950:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17060,"nodeType":"ArrayTypeName","src":"12950:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":17063,"mutability":"mutable","name":"tokenIndex","nameLocation":"12990:10:64","nodeType":"VariableDeclaration","scope":17110,"src":"12982:18:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17062,"name":"uint256","nodeType":"ElementaryTypeName","src":"12982:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17069,"initialValue":{"arguments":[{"id":17065,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17037,"src":"13051:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17066,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17042,"src":"13069:8:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":17067,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17044,"src":"13091:12:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17064,"name":"_getSingleInputArrayAndTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19026,"src":"13004:33:64","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_contract$_IERC20_$40109_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address,contract IERC20,uint256) view returns (uint256[] memory,uint256)"}},"id":17068,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13004:109:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(uint256[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"12949:164:64"},{"assignments":[null,17074,null],"declarations":[null,{"constant":false,"id":17074,"mutability":"mutable","name":"amountsOut","nameLocation":"13144:10:64","nodeType":"VariableDeclaration","scope":17110,"src":"13127:27:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17072,"name":"uint256","nodeType":"ElementaryTypeName","src":"13127:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17073,"nodeType":"ArrayTypeName","src":"13127:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},null],"id":17105,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":17081,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"13251:6:64","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":17082,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13258:19:64","memberName":"removeLiquidityHook","nodeType":"MemberAccess","referencedDeclaration":17402,"src":"13251:26:64","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function Router.removeLiquidityHook(struct IRouterCommon.RemoveLiquidityHookParams calldata) returns (uint256,uint256[] memory,bytes memory)"}},{"arguments":[{"expression":{"id":17084,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13359:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13363:6:64","memberName":"sender","nodeType":"MemberAccess","src":"13359:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17086,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17037,"src":"13401:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17087,"name":"minAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17061,"src":"13446:13:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":17088,"name":"exactBptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17039,"src":"13501:16:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17089,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4828,"src":"13549:19:64","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RemoveLiquidityKind_$4828_$","typeString":"type(enum RemoveLiquidityKind)"}},"id":17090,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13569:21:64","memberName":"SINGLE_TOKEN_EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":4825,"src":"13549:41:64","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},{"id":17091,"name":"wethIsEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17046,"src":"13627:9:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":17092,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17048,"src":"13672:8:64","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":17083,"name":"RemoveLiquidityHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2965,"src":"13299:25:64","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_RemoveLiquidityHookParams_$2965_storage_ptr_$","typeString":"type(struct IRouterCommon.RemoveLiquidityHookParams storage pointer)"}},"id":17093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["13351:6:64","13395:4:64","13431:13:64","13485:14:64","13543:4:64","13616:9:64","13662:8:64"],"names":["sender","pool","minAmountsOut","maxBptAmountIn","kind","wethIsEth","userData"],"nodeType":"FunctionCall","src":"13299:404:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_memory_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function Router.removeLiquidityHook(struct IRouterCommon.RemoveLiquidityHookParams calldata) returns (uint256,uint256[] memory,bytes memory)"},{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_memory_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams memory"}],"expression":{"id":17079,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"13215:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":17080,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13219:10:64","memberName":"encodeCall","nodeType":"MemberAccess","src":"13215:14:64","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":17094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13215:506:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":17077,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"13184:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":17078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13191:6:64","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":4440,"src":"13184:13:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":17095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13184:551:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":17097,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13750:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":17096,"name":"uint256","nodeType":"ElementaryTypeName","src":"13750:7:64","typeDescriptions":{}}},{"baseExpression":{"id":17099,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13759:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":17098,"name":"uint256","nodeType":"ElementaryTypeName","src":"13759:7:64","typeDescriptions":{}}},"id":17100,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"13759:9:64","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}},{"id":17102,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13770:5:64","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":17101,"name":"bytes","nodeType":"ElementaryTypeName","src":"13770:5:64","typeDescriptions":{}}}],"id":17103,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"13749:27:64","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256),type(uint256[] memory),type(bytes storage pointer))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256),type(uint256[] memory),type(bytes storage pointer))"}],"expression":{"id":17075,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"13160:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":17076,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13164:6:64","memberName":"decode","nodeType":"MemberAccess","src":"13160:10:64","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":17104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13160:626:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"13124:662:64"},{"expression":{"baseExpression":{"id":17106,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17074,"src":"13804:10:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17108,"indexExpression":{"id":17107,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17063,"src":"13815:10:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13804:22:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17056,"id":17109,"nodeType":"Return","src":"13797:29:64"}]},"documentation":{"id":17035,"nodeType":"StructuredDocumentation","src":"12628:23:64","text":"@inheritdoc IRouter"},"functionSelector":"ecb2182c","id":17111,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"expression":{"id":17051,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12899:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12903:6:64","memberName":"sender","nodeType":"MemberAccess","src":"12899:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":17053,"kind":"modifierInvocation","modifierName":{"id":17050,"name":"saveSender","nameLocations":["12888:10:64"],"nodeType":"IdentifierPath","referencedDeclaration":19249,"src":"12888:10:64"},"nodeType":"ModifierInvocation","src":"12888:22:64"}],"name":"removeLiquiditySingleTokenExactIn","nameLocation":"12665:33:64","nodeType":"FunctionDefinition","parameters":{"id":17049,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17037,"mutability":"mutable","name":"pool","nameLocation":"12716:4:64","nodeType":"VariableDeclaration","scope":17111,"src":"12708:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17036,"name":"address","nodeType":"ElementaryTypeName","src":"12708:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17039,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"12738:16:64","nodeType":"VariableDeclaration","scope":17111,"src":"12730:24:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17038,"name":"uint256","nodeType":"ElementaryTypeName","src":"12730:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17042,"mutability":"mutable","name":"tokenOut","nameLocation":"12771:8:64","nodeType":"VariableDeclaration","scope":17111,"src":"12764:15:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":17041,"nodeType":"UserDefinedTypeName","pathNode":{"id":17040,"name":"IERC20","nameLocations":["12764:6:64"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"12764:6:64"},"referencedDeclaration":40109,"src":"12764:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":17044,"mutability":"mutable","name":"minAmountOut","nameLocation":"12797:12:64","nodeType":"VariableDeclaration","scope":17111,"src":"12789:20:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17043,"name":"uint256","nodeType":"ElementaryTypeName","src":"12789:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17046,"mutability":"mutable","name":"wethIsEth","nameLocation":"12824:9:64","nodeType":"VariableDeclaration","scope":17111,"src":"12819:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17045,"name":"bool","nodeType":"ElementaryTypeName","src":"12819:4:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":17048,"mutability":"mutable","name":"userData","nameLocation":"12856:8:64","nodeType":"VariableDeclaration","scope":17111,"src":"12843:21:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":17047,"name":"bytes","nodeType":"ElementaryTypeName","src":"12843:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"12698:172:64"},"returnParameters":{"id":17056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17055,"mutability":"mutable","name":"amountOut","nameLocation":"12928:9:64","nodeType":"VariableDeclaration","scope":17111,"src":"12920:17:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17054,"name":"uint256","nodeType":"ElementaryTypeName","src":"12920:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12919:19:64"},"scope":18510,"src":"12656:1177:64","stateMutability":"payable","virtual":false,"visibility":"external"},{"baseFunctions":[2616],"body":{"id":17181,"nodeType":"Block","src":"14153:804:64","statements":[{"assignments":[17138,null],"declarations":[{"constant":false,"id":17138,"mutability":"mutable","name":"minAmountsOut","nameLocation":"14181:13:64","nodeType":"VariableDeclaration","scope":17181,"src":"14164:30:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17136,"name":"uint256","nodeType":"ElementaryTypeName","src":"14164:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17137,"nodeType":"ArrayTypeName","src":"14164:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},null],"id":17144,"initialValue":{"arguments":[{"id":17140,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17114,"src":"14234:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17141,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17119,"src":"14240:8:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":17142,"name":"exactAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17121,"src":"14250:14:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17139,"name":"_getSingleInputArrayAndTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19026,"src":"14200:33:64","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_contract$_IERC20_$40109_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address,contract IERC20,uint256) view returns (uint256[] memory,uint256)"}},"id":17143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14200:65:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(uint256[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"14163:102:64"},{"expression":{"id":17177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":17145,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17132,"src":"14277:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},null,null],"id":17146,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"14276:17:64","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$__$__$","typeString":"tuple(uint256,,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":17153,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"14387:6:64","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":17154,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14394:19:64","memberName":"removeLiquidityHook","nodeType":"MemberAccess","referencedDeclaration":17402,"src":"14387:26:64","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function Router.removeLiquidityHook(struct IRouterCommon.RemoveLiquidityHookParams calldata) returns (uint256,uint256[] memory,bytes memory)"}},{"arguments":[{"expression":{"id":17156,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14495:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14499:6:64","memberName":"sender","nodeType":"MemberAccess","src":"14495:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17158,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17114,"src":"14537:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17159,"name":"minAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17138,"src":"14582:13:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":17160,"name":"maxBptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17116,"src":"14637:14:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17161,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4828,"src":"14683:19:64","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RemoveLiquidityKind_$4828_$","typeString":"type(enum RemoveLiquidityKind)"}},"id":17162,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14703:22:64","memberName":"SINGLE_TOKEN_EXACT_OUT","nodeType":"MemberAccess","referencedDeclaration":4826,"src":"14683:42:64","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},{"id":17163,"name":"wethIsEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17123,"src":"14762:9:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":17164,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17125,"src":"14807:8:64","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":17155,"name":"RemoveLiquidityHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2965,"src":"14435:25:64","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_RemoveLiquidityHookParams_$2965_storage_ptr_$","typeString":"type(struct IRouterCommon.RemoveLiquidityHookParams storage pointer)"}},"id":17165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["14487:6:64","14531:4:64","14567:13:64","14621:14:64","14677:4:64","14751:9:64","14797:8:64"],"names":["sender","pool","minAmountsOut","maxBptAmountIn","kind","wethIsEth","userData"],"nodeType":"FunctionCall","src":"14435:403:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_memory_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function Router.removeLiquidityHook(struct IRouterCommon.RemoveLiquidityHookParams calldata) returns (uint256,uint256[] memory,bytes memory)"},{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_memory_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams memory"}],"expression":{"id":17151,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"14351:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":17152,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14355:10:64","memberName":"encodeCall","nodeType":"MemberAccess","src":"14351:14:64","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":17166,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14351:505:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":17149,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"14320:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":17150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14327:6:64","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":4440,"src":"14320:13:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":17167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14320:550:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":17169,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14885:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":17168,"name":"uint256","nodeType":"ElementaryTypeName","src":"14885:7:64","typeDescriptions":{}}},{"baseExpression":{"id":17171,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14894:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":17170,"name":"uint256","nodeType":"ElementaryTypeName","src":"14894:7:64","typeDescriptions":{}}},"id":17172,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"14894:9:64","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}},{"id":17174,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14905:5:64","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":17173,"name":"bytes","nodeType":"ElementaryTypeName","src":"14905:5:64","typeDescriptions":{}}}],"id":17175,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"14884:27:64","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256),type(uint256[] memory),type(bytes storage pointer))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256),type(uint256[] memory),type(bytes storage pointer))"}],"expression":{"id":17147,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"14296:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":17148,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14300:6:64","memberName":"decode","nodeType":"MemberAccess","src":"14296:10:64","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":17176,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14296:625:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory,bytes memory)"}},"src":"14276:645:64","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17178,"nodeType":"ExpressionStatement","src":"14276:645:64"},{"expression":{"id":17179,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17132,"src":"14939:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17133,"id":17180,"nodeType":"Return","src":"14932:18:64"}]},"documentation":{"id":17112,"nodeType":"StructuredDocumentation","src":"13839:23:64","text":"@inheritdoc IRouter"},"functionSelector":"e7326def","id":17182,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"expression":{"id":17128,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14111:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14115:6:64","memberName":"sender","nodeType":"MemberAccess","src":"14111:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":17130,"kind":"modifierInvocation","modifierName":{"id":17127,"name":"saveSender","nameLocations":["14100:10:64"],"nodeType":"IdentifierPath","referencedDeclaration":19249,"src":"14100:10:64"},"nodeType":"ModifierInvocation","src":"14100:22:64"}],"name":"removeLiquiditySingleTokenExactOut","nameLocation":"13876:34:64","nodeType":"FunctionDefinition","parameters":{"id":17126,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17114,"mutability":"mutable","name":"pool","nameLocation":"13928:4:64","nodeType":"VariableDeclaration","scope":17182,"src":"13920:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17113,"name":"address","nodeType":"ElementaryTypeName","src":"13920:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17116,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"13950:14:64","nodeType":"VariableDeclaration","scope":17182,"src":"13942:22:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17115,"name":"uint256","nodeType":"ElementaryTypeName","src":"13942:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17119,"mutability":"mutable","name":"tokenOut","nameLocation":"13981:8:64","nodeType":"VariableDeclaration","scope":17182,"src":"13974:15:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":17118,"nodeType":"UserDefinedTypeName","pathNode":{"id":17117,"name":"IERC20","nameLocations":["13974:6:64"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"13974:6:64"},"referencedDeclaration":40109,"src":"13974:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":17121,"mutability":"mutable","name":"exactAmountOut","nameLocation":"14007:14:64","nodeType":"VariableDeclaration","scope":17182,"src":"13999:22:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17120,"name":"uint256","nodeType":"ElementaryTypeName","src":"13999:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17123,"mutability":"mutable","name":"wethIsEth","nameLocation":"14036:9:64","nodeType":"VariableDeclaration","scope":17182,"src":"14031:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17122,"name":"bool","nodeType":"ElementaryTypeName","src":"14031:4:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":17125,"mutability":"mutable","name":"userData","nameLocation":"14068:8:64","nodeType":"VariableDeclaration","scope":17182,"src":"14055:21:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":17124,"name":"bytes","nodeType":"ElementaryTypeName","src":"14055:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"13910:172:64"},"returnParameters":{"id":17133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17132,"mutability":"mutable","name":"bptAmountIn","nameLocation":"14140:11:64","nodeType":"VariableDeclaration","scope":17182,"src":"14132:19:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17131,"name":"uint256","nodeType":"ElementaryTypeName","src":"14132:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14131:21:64"},"scope":18510,"src":"13867:1090:64","stateMutability":"payable","virtual":false,"visibility":"external"},{"baseFunctions":[2638],"body":{"id":17239,"nodeType":"Block","src":"15337:709:64","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":17214,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"15469:6:64","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":17215,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15476:19:64","memberName":"removeLiquidityHook","nodeType":"MemberAccess","referencedDeclaration":17402,"src":"15469:26:64","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function Router.removeLiquidityHook(struct IRouterCommon.RemoveLiquidityHookParams calldata) returns (uint256,uint256[] memory,bytes memory)"}},{"arguments":[{"expression":{"id":17217,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"15585:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15589:6:64","memberName":"sender","nodeType":"MemberAccess","src":"15585:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17219,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17185,"src":"15631:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17220,"name":"minAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17190,"src":"15680:13:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":17221,"name":"maxBptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17187,"src":"15739:14:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17222,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4828,"src":"15789:19:64","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RemoveLiquidityKind_$4828_$","typeString":"type(enum RemoveLiquidityKind)"}},"id":17223,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15809:6:64","memberName":"CUSTOM","nodeType":"MemberAccess","referencedDeclaration":4827,"src":"15789:26:64","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},{"id":17224,"name":"wethIsEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17192,"src":"15856:9:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":17225,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17194,"src":"15905:8:64","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":17216,"name":"RemoveLiquidityHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2965,"src":"15521:25:64","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_RemoveLiquidityHookParams_$2965_storage_ptr_$","typeString":"type(struct IRouterCommon.RemoveLiquidityHookParams storage pointer)"}},"id":17226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["15577:6:64","15625:4:64","15665:13:64","15723:14:64","15783:4:64","15845:9:64","15895:8:64"],"names":["sender","pool","minAmountsOut","maxBptAmountIn","kind","wethIsEth","userData"],"nodeType":"FunctionCall","src":"15521:419:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_memory_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function Router.removeLiquidityHook(struct IRouterCommon.RemoveLiquidityHookParams calldata) returns (uint256,uint256[] memory,bytes memory)"},{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_memory_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams memory"}],"expression":{"id":17212,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"15429:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":17213,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15433:10:64","memberName":"encodeCall","nodeType":"MemberAccess","src":"15429:14:64","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":17227,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15429:533:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":17210,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"15394:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":17211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15401:6:64","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":4440,"src":"15394:13:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":17228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15394:586:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":17230,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15999:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":17229,"name":"uint256","nodeType":"ElementaryTypeName","src":"15999:7:64","typeDescriptions":{}}},{"baseExpression":{"id":17232,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16008:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":17231,"name":"uint256","nodeType":"ElementaryTypeName","src":"16008:7:64","typeDescriptions":{}}},"id":17233,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"16008:9:64","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}},{"id":17235,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16019:5:64","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":17234,"name":"bytes","nodeType":"ElementaryTypeName","src":"16019:5:64","typeDescriptions":{}}}],"id":17236,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"15998:27:64","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256),type(uint256[] memory),type(bytes storage pointer))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256),type(uint256[] memory),type(bytes storage pointer))"}],"expression":{"id":17208,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"15366:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":17209,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15370:6:64","memberName":"decode","nodeType":"MemberAccess","src":"15366:10:64","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":17237,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15366:673:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory,bytes memory)"}},"functionReturnParameters":17207,"id":17238,"nodeType":"Return","src":"15347:692:64"}]},"documentation":{"id":17183,"nodeType":"StructuredDocumentation","src":"14963:23:64","text":"@inheritdoc IRouter"},"functionSelector":"82bf2b24","id":17240,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"expression":{"id":17197,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"15229:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15233:6:64","memberName":"sender","nodeType":"MemberAccess","src":"15229:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":17199,"kind":"modifierInvocation","modifierName":{"id":17196,"name":"saveSender","nameLocations":["15218:10:64"],"nodeType":"IdentifierPath","referencedDeclaration":19249,"src":"15218:10:64"},"nodeType":"ModifierInvocation","src":"15218:22:64"}],"name":"removeLiquidityCustom","nameLocation":"15000:21:64","nodeType":"FunctionDefinition","parameters":{"id":17195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17185,"mutability":"mutable","name":"pool","nameLocation":"15039:4:64","nodeType":"VariableDeclaration","scope":17240,"src":"15031:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17184,"name":"address","nodeType":"ElementaryTypeName","src":"15031:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17187,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"15061:14:64","nodeType":"VariableDeclaration","scope":17240,"src":"15053:22:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17186,"name":"uint256","nodeType":"ElementaryTypeName","src":"15053:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17190,"mutability":"mutable","name":"minAmountsOut","nameLocation":"15102:13:64","nodeType":"VariableDeclaration","scope":17240,"src":"15085:30:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17188,"name":"uint256","nodeType":"ElementaryTypeName","src":"15085:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17189,"nodeType":"ArrayTypeName","src":"15085:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":17192,"mutability":"mutable","name":"wethIsEth","nameLocation":"15130:9:64","nodeType":"VariableDeclaration","scope":17240,"src":"15125:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17191,"name":"bool","nodeType":"ElementaryTypeName","src":"15125:4:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":17194,"mutability":"mutable","name":"userData","nameLocation":"15162:8:64","nodeType":"VariableDeclaration","scope":17240,"src":"15149:21:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":17193,"name":"bytes","nodeType":"ElementaryTypeName","src":"15149:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"15021:155:64"},"returnParameters":{"id":17207,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17201,"mutability":"mutable","name":"bptAmountIn","nameLocation":"15266:11:64","nodeType":"VariableDeclaration","scope":17240,"src":"15258:19:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17200,"name":"uint256","nodeType":"ElementaryTypeName","src":"15258:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17204,"mutability":"mutable","name":"amountsOut","nameLocation":"15296:10:64","nodeType":"VariableDeclaration","scope":17240,"src":"15279:27:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17202,"name":"uint256","nodeType":"ElementaryTypeName","src":"15279:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17203,"nodeType":"ArrayTypeName","src":"15279:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":17206,"mutability":"mutable","name":"returnData","nameLocation":"15321:10:64","nodeType":"VariableDeclaration","scope":17240,"src":"15308:23:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":17205,"name":"bytes","nodeType":"ElementaryTypeName","src":"15308:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"15257:75:64"},"scope":18510,"src":"14991:1055:64","stateMutability":"payable","virtual":false,"visibility":"external"},{"baseFunctions":[2652],"body":{"id":17278,"nodeType":"Block","src":"16270:237:64","statements":[{"expression":{"id":17276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17254,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17252,"src":"16280:10:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":17261,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"16363:6:64","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":17262,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16370:27:64","memberName":"removeLiquidityRecoveryHook","nodeType":"MemberAccess","referencedDeclaration":17481,"src":"16363:34:64","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function Router.removeLiquidityRecoveryHook(address,address,uint256,uint256[] memory) returns (uint256[] memory)"}},{"components":[{"id":17263,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17243,"src":"16400:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17264,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"16406:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16410:6:64","memberName":"sender","nodeType":"MemberAccess","src":"16406:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17266,"name":"exactBptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17245,"src":"16418:16:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17267,"name":"minAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17248,"src":"16436:13:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"id":17268,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"16399:51:64","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(address,address,uint256,uint256[] memory)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function Router.removeLiquidityRecoveryHook(address,address,uint256,uint256[] memory) returns (uint256[] memory)"},{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(address,address,uint256,uint256[] memory)"}],"expression":{"id":17259,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"16348:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":17260,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16352:10:64","memberName":"encodeCall","nodeType":"MemberAccess","src":"16348:14:64","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":17269,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16348:103:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":17257,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"16317:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":17258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16324:6:64","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":4440,"src":"16317:13:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":17270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16317:148:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"baseExpression":{"id":17272,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16480:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":17271,"name":"uint256","nodeType":"ElementaryTypeName","src":"16480:7:64","typeDescriptions":{}}},"id":17273,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"16480:9:64","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}}],"id":17274,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"16479:11:64","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}],"expression":{"id":17255,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"16293:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":17256,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16297:6:64","memberName":"decode","nodeType":"MemberAccess","src":"16293:10:64","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":17275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16293:207:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"16280:220:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17277,"nodeType":"ExpressionStatement","src":"16280:220:64"}]},"documentation":{"id":17241,"nodeType":"StructuredDocumentation","src":"16052:23:64","text":"@inheritdoc IRouter"},"functionSelector":"08c04793","id":17279,"implemented":true,"kind":"function","modifiers":[],"name":"removeLiquidityRecovery","nameLocation":"16089:23:64","nodeType":"FunctionDefinition","parameters":{"id":17249,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17243,"mutability":"mutable","name":"pool","nameLocation":"16130:4:64","nodeType":"VariableDeclaration","scope":17279,"src":"16122:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17242,"name":"address","nodeType":"ElementaryTypeName","src":"16122:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17245,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"16152:16:64","nodeType":"VariableDeclaration","scope":17279,"src":"16144:24:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17244,"name":"uint256","nodeType":"ElementaryTypeName","src":"16144:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17248,"mutability":"mutable","name":"minAmountsOut","nameLocation":"16195:13:64","nodeType":"VariableDeclaration","scope":17279,"src":"16178:30:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17246,"name":"uint256","nodeType":"ElementaryTypeName","src":"16178:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17247,"nodeType":"ArrayTypeName","src":"16178:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"16112:102:64"},"returnParameters":{"id":17253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17252,"mutability":"mutable","name":"amountsOut","nameLocation":"16258:10:64","nodeType":"VariableDeclaration","scope":17279,"src":"16241:27:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17250,"name":"uint256","nodeType":"ElementaryTypeName","src":"16241:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17251,"nodeType":"ArrayTypeName","src":"16241:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"16240:29:64"},"scope":18510,"src":"16080:427:64","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":17401,"nodeType":"Block","src":"17182:1192:64","statements":[{"expression":{"id":17318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":17297,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17290,"src":"17193:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17298,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17293,"src":"17206:10:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":17299,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17295,"src":"17218:10:64","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":17300,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"17192:37:64","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory,bytes memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"expression":{"id":17304,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17283,"src":"17314:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams calldata"}},"id":17305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17321:4:64","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2952,"src":"17314:11:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17306,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17283,"src":"17349:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams calldata"}},"id":17307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17356:6:64","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":2950,"src":"17349:13:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17308,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17283,"src":"17396:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams calldata"}},"id":17309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17403:14:64","memberName":"maxBptAmountIn","nodeType":"MemberAccess","referencedDeclaration":2957,"src":"17396:21:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17310,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17283,"src":"17450:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams calldata"}},"id":17311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17457:13:64","memberName":"minAmountsOut","nodeType":"MemberAccess","referencedDeclaration":2955,"src":"17450:20:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},{"expression":{"id":17312,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17283,"src":"17494:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams calldata"}},"id":17313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17501:4:64","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2960,"src":"17494:11:64","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},{"expression":{"id":17314,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17283,"src":"17533:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams calldata"}},"id":17315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17540:8:64","memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":2964,"src":"17533:15:64","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"},{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":17303,"name":"RemoveLiquidityParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4844,"src":"17268:21:64","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_RemoveLiquidityParams_$4844_storage_ptr_$","typeString":"type(struct RemoveLiquidityParams storage pointer)"}},"id":17316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["17308:4:64","17343:4:64","17380:14:64","17435:13:64","17488:4:64","17523:8:64"],"names":["pool","from","maxBptAmountIn","minAmountsOut","kind","userData"],"nodeType":"FunctionCall","src":"17268:295:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}],"expression":{"id":17301,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"17232:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":17302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17239:15:64","memberName":"removeLiquidity","nodeType":"MemberAccess","referencedDeclaration":4503,"src":"17232:22:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_RemoveLiquidityParams_$4844_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function (struct RemoveLiquidityParams memory) external returns (uint256,uint256[] memory,bytes memory)"}},"id":17317,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17232:341:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory,bytes memory)"}},"src":"17192:381:64","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17319,"nodeType":"ExpressionStatement","src":"17192:381:64"},{"assignments":[17324],"declarations":[{"constant":false,"id":17324,"mutability":"mutable","name":"tokens","nameLocation":"17679:6:64","nodeType":"VariableDeclaration","scope":17401,"src":"17663:22:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":17322,"nodeType":"UserDefinedTypeName","pathNode":{"id":17321,"name":"IERC20","nameLocations":["17663:6:64"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"17663:6:64"},"referencedDeclaration":40109,"src":"17663:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":17323,"nodeType":"ArrayTypeName","src":"17663:8:64","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"id":17330,"initialValue":{"arguments":[{"expression":{"id":17327,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17283,"src":"17709:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams calldata"}},"id":17328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17716:4:64","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2952,"src":"17709:11:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":17325,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"17688:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":17326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17695:13:64","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":4145,"src":"17688:20:64","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":17329,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17688:33:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"VariableDeclarationStatement","src":"17663:58:64"},{"body":{"id":17394,"nodeType":"Block","src":"17776:556:64","statements":[{"assignments":[17343],"declarations":[{"constant":false,"id":17343,"mutability":"mutable","name":"amountOut","nameLocation":"17798:9:64","nodeType":"VariableDeclaration","scope":17394,"src":"17790:17:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17342,"name":"uint256","nodeType":"ElementaryTypeName","src":"17790:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17347,"initialValue":{"baseExpression":{"id":17344,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17293,"src":"17810:10:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17346,"indexExpression":{"id":17345,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17332,"src":"17821:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17810:13:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17790:33:64"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17350,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17348,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17343,"src":"17841:9:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":17349,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17854:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17841:14:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17353,"nodeType":"IfStatement","src":"17837:61:64","trueBody":{"id":17352,"nodeType":"Block","src":"17857:41:64","statements":[{"id":17351,"nodeType":"Continue","src":"17875:8:64"}]}},{"assignments":[17356],"declarations":[{"constant":false,"id":17356,"mutability":"mutable","name":"token","nameLocation":"17919:5:64","nodeType":"VariableDeclaration","scope":17394,"src":"17912:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":17355,"nodeType":"UserDefinedTypeName","pathNode":{"id":17354,"name":"IERC20","nameLocations":["17912:6:64"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"17912:6:64"},"referencedDeclaration":40109,"src":"17912:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"id":17360,"initialValue":{"baseExpression":{"id":17357,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"17927:6:64","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":17359,"indexExpression":{"id":17358,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17332,"src":"17934:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17927:9:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"17912:24:64"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":17372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17361,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17283,"src":"18016:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams calldata"}},"id":17362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18023:9:64","memberName":"wethIsEth","nodeType":"MemberAccess","referencedDeclaration":2962,"src":"18016:16:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":17371,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":17365,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17356,"src":"18044:5:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":17364,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18036:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17363,"name":"address","nodeType":"ElementaryTypeName","src":"18036:7:64","typeDescriptions":{}}},"id":17366,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18036:14:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":17369,"name":"_weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18585,"src":"18062:5:64","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}],"id":17368,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18054:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17367,"name":"address","nodeType":"ElementaryTypeName","src":"18054:7:64","typeDescriptions":{}}},"id":17370,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18054:14:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"18036:32:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"18016:52:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":17392,"nodeType":"Block","src":"18178:144:64","statements":[{"expression":{"arguments":[{"id":17386,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17356,"src":"18275:5:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"expression":{"id":17387,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17283,"src":"18282:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams calldata"}},"id":17388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18289:6:64","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":2950,"src":"18282:13:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17389,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17343,"src":"18297:9:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17383,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"18261:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":17385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18268:6:64","memberName":"sendTo","nodeType":"MemberAccess","referencedDeclaration":4462,"src":"18261:13:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$40109_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":17390,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18261:46:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17391,"nodeType":"ExpressionStatement","src":"18261:46:64"}]},"id":17393,"nodeType":"IfStatement","src":"18012:310:64","trueBody":{"id":17382,"nodeType":"Block","src":"18070:102:64","statements":[{"expression":{"arguments":[{"id":17376,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"18124:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},{"expression":{"id":17377,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17283,"src":"18132:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams calldata"}},"id":17378,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18139:6:64","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":2950,"src":"18132:13:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17379,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17343,"src":"18147:9:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17373,"name":"_weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18585,"src":"18088:5:64","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},"id":17375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18094:29:64","memberName":"unwrapWethAndTransferToSender","nodeType":"MemberAccess","referencedDeclaration":31146,"src":"18088:35:64","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IWETH_$291_$_t_contract$_IVault_$3111_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IWETH_$291_$","typeString":"function (contract IWETH,contract IVault,address,uint256)"}},"id":17380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18088:69:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17381,"nodeType":"ExpressionStatement","src":"18088:69:64"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17335,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17332,"src":"17752:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":17336,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17324,"src":"17756:6:64","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":17337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17763:6:64","memberName":"length","nodeType":"MemberAccess","src":"17756:13:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17752:17:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17395,"initializationExpression":{"assignments":[17332],"declarations":[{"constant":false,"id":17332,"mutability":"mutable","name":"i","nameLocation":"17745:1:64","nodeType":"VariableDeclaration","scope":17395,"src":"17737:9:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17331,"name":"uint256","nodeType":"ElementaryTypeName","src":"17737:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17334,"initialValue":{"hexValue":"30","id":17333,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17749:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"17737:13:64"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":17340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"17771:3:64","subExpression":{"id":17339,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17332,"src":"17773:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17341,"nodeType":"ExpressionStatement","src":"17771:3:64"},"nodeType":"ForStatement","src":"17732:600:64"},{"expression":{"arguments":[{"expression":{"id":17397,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17283,"src":"18353:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams calldata"}},"id":17398,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18360:6:64","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":2950,"src":"18353:13:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17396,"name":"_returnEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18982,"src":"18342:10:64","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":17399,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18342:25:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17400,"nodeType":"ExpressionStatement","src":"18342:25:64"}]},"documentation":{"id":17280,"nodeType":"StructuredDocumentation","src":"16513:426:64","text":" @notice Hook for removing liquidity.\n @dev Can only be called by the Vault.\n @param params Remove liquidity parameters (see IRouter for struct definition)\n @return bptAmountIn BPT amount burned for the output tokens\n @return amountsOut Actual token amounts transferred in exchange for the BPT\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"7b03c7ba","id":17402,"implemented":true,"kind":"function","modifiers":[{"id":17286,"kind":"modifierInvocation","modifierName":{"id":17285,"name":"nonReentrant","nameLocations":["17055:12:64"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"17055:12:64"},"nodeType":"ModifierInvocation","src":"17055:12:64"},{"id":17288,"kind":"modifierInvocation","modifierName":{"id":17287,"name":"onlyVault","nameLocations":["17076:9:64"],"nodeType":"IdentifierPath","referencedDeclaration":28128,"src":"17076:9:64"},"nodeType":"ModifierInvocation","src":"17076:9:64"}],"name":"removeLiquidityHook","nameLocation":"16953:19:64","nodeType":"FunctionDefinition","parameters":{"id":17284,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17283,"mutability":"mutable","name":"params","nameLocation":"17017:6:64","nodeType":"VariableDeclaration","scope":17402,"src":"16982:41:64","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams"},"typeName":{"id":17282,"nodeType":"UserDefinedTypeName","pathNode":{"id":17281,"name":"RemoveLiquidityHookParams","nameLocations":["16982:25:64"],"nodeType":"IdentifierPath","referencedDeclaration":2965,"src":"16982:25:64"},"referencedDeclaration":2965,"src":"16982:25:64","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_storage_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams"}},"visibility":"internal"}],"src":"16972:57:64"},"returnParameters":{"id":17296,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17290,"mutability":"mutable","name":"bptAmountIn","nameLocation":"17111:11:64","nodeType":"VariableDeclaration","scope":17402,"src":"17103:19:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17289,"name":"uint256","nodeType":"ElementaryTypeName","src":"17103:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17293,"mutability":"mutable","name":"amountsOut","nameLocation":"17141:10:64","nodeType":"VariableDeclaration","scope":17402,"src":"17124:27:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17291,"name":"uint256","nodeType":"ElementaryTypeName","src":"17124:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17292,"nodeType":"ArrayTypeName","src":"17124:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":17295,"mutability":"mutable","name":"returnData","nameLocation":"17166:10:64","nodeType":"VariableDeclaration","scope":17402,"src":"17153:23:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":17294,"name":"bytes","nodeType":"ElementaryTypeName","src":"17153:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"17102:75:64"},"scope":18510,"src":"16944:1430:64","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":17480,"nodeType":"Block","src":"19150:483:64","statements":[{"expression":{"id":17430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":17422,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17420,"src":"19160:10:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":17425,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17405,"src":"19204:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17426,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17407,"src":"19210:6:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17427,"name":"exactBptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17409,"src":"19218:16:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17428,"name":"minAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17412,"src":"19236:13:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"expression":{"id":17423,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"19173:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":17424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19180:23:64","memberName":"removeLiquidityRecovery","nodeType":"MemberAccess","referencedDeclaration":4384,"src":"19173:30:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address,address,uint256,uint256[] memory) external returns (uint256[] memory)"}},"id":17429,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19173:77:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"19160:90:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17431,"nodeType":"ExpressionStatement","src":"19160:90:64"},{"assignments":[17436],"declarations":[{"constant":false,"id":17436,"mutability":"mutable","name":"tokens","nameLocation":"19277:6:64","nodeType":"VariableDeclaration","scope":17480,"src":"19261:22:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":17434,"nodeType":"UserDefinedTypeName","pathNode":{"id":17433,"name":"IERC20","nameLocations":["19261:6:64"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"19261:6:64"},"referencedDeclaration":40109,"src":"19261:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":17435,"nodeType":"ArrayTypeName","src":"19261:8:64","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"id":17441,"initialValue":{"arguments":[{"id":17439,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17405,"src":"19307:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":17437,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"19286:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":17438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19293:13:64","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":4145,"src":"19286:20:64","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":17440,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19286:26:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"VariableDeclarationStatement","src":"19261:51:64"},{"body":{"id":17474,"nodeType":"Block","src":"19367:231:64","statements":[{"assignments":[17454],"declarations":[{"constant":false,"id":17454,"mutability":"mutable","name":"amountOut","nameLocation":"19389:9:64","nodeType":"VariableDeclaration","scope":17474,"src":"19381:17:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17453,"name":"uint256","nodeType":"ElementaryTypeName","src":"19381:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17458,"initialValue":{"baseExpression":{"id":17455,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17420,"src":"19401:10:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17457,"indexExpression":{"id":17456,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17443,"src":"19412:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19401:13:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19381:33:64"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17459,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17454,"src":"19432:9:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":17460,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19444:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"19432:13:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17473,"nodeType":"IfStatement","src":"19428:160:64","trueBody":{"id":17472,"nodeType":"Block","src":"19447:141:64","statements":[{"expression":{"arguments":[{"baseExpression":{"id":17465,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17436,"src":"19544:6:64","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":17467,"indexExpression":{"id":17466,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17443,"src":"19551:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19544:9:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":17468,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17407,"src":"19555:6:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17469,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17454,"src":"19563:9:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":17462,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"19530:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":17464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19537:6:64","memberName":"sendTo","nodeType":"MemberAccess","referencedDeclaration":4462,"src":"19530:13:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$40109_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":17470,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19530:43:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17471,"nodeType":"ExpressionStatement","src":"19530:43:64"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17446,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17443,"src":"19343:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":17447,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17436,"src":"19347:6:64","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":17448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19354:6:64","memberName":"length","nodeType":"MemberAccess","src":"19347:13:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19343:17:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17475,"initializationExpression":{"assignments":[17443],"declarations":[{"constant":false,"id":17443,"mutability":"mutable","name":"i","nameLocation":"19336:1:64","nodeType":"VariableDeclaration","scope":17475,"src":"19328:9:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17442,"name":"uint256","nodeType":"ElementaryTypeName","src":"19328:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17445,"initialValue":{"hexValue":"30","id":17444,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19340:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"19328:13:64"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":17451,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"19362:3:64","subExpression":{"id":17450,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17443,"src":"19364:1:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17452,"nodeType":"ExpressionStatement","src":"19362:3:64"},"nodeType":"ForStatement","src":"19323:275:64"},{"expression":{"arguments":[{"id":17477,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17407,"src":"19619:6:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17476,"name":"_returnEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18982,"src":"19608:10:64","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":17478,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19608:18:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17479,"nodeType":"ExpressionStatement","src":"19608:18:64"}]},"documentation":{"id":17403,"nodeType":"StructuredDocumentation","src":"18380:532:64","text":" @notice Hook for removing liquidity in Recovery Mode.\n @dev Can only be called by the Vault, when the pool is in Recovery Mode.\n @param pool Address of the liquidity pool\n @param sender Account originating the remove liquidity operation\n @param exactBptAmountIn BPT amount burned for the output tokens\n @param minAmountsOut Minimum amounts of tokens to be received, sorted in token registration order\n @return amountsOut Actual token amounts transferred in exchange for the BPT"},"functionSelector":"82cd54fb","id":17481,"implemented":true,"kind":"function","modifiers":[{"id":17415,"kind":"modifierInvocation","modifierName":{"id":17414,"name":"nonReentrant","nameLocations":["19089:12:64"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"19089:12:64"},"nodeType":"ModifierInvocation","src":"19089:12:64"},{"id":17417,"kind":"modifierInvocation","modifierName":{"id":17416,"name":"onlyVault","nameLocations":["19102:9:64"],"nodeType":"IdentifierPath","referencedDeclaration":28128,"src":"19102:9:64"},"nodeType":"ModifierInvocation","src":"19102:9:64"}],"name":"removeLiquidityRecoveryHook","nameLocation":"18926:27:64","nodeType":"FunctionDefinition","parameters":{"id":17413,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17405,"mutability":"mutable","name":"pool","nameLocation":"18971:4:64","nodeType":"VariableDeclaration","scope":17481,"src":"18963:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17404,"name":"address","nodeType":"ElementaryTypeName","src":"18963:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17407,"mutability":"mutable","name":"sender","nameLocation":"18993:6:64","nodeType":"VariableDeclaration","scope":17481,"src":"18985:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17406,"name":"address","nodeType":"ElementaryTypeName","src":"18985:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17409,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"19017:16:64","nodeType":"VariableDeclaration","scope":17481,"src":"19009:24:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17408,"name":"uint256","nodeType":"ElementaryTypeName","src":"19009:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17412,"mutability":"mutable","name":"minAmountsOut","nameLocation":"19060:13:64","nodeType":"VariableDeclaration","scope":17481,"src":"19043:30:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17410,"name":"uint256","nodeType":"ElementaryTypeName","src":"19043:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17411,"nodeType":"ArrayTypeName","src":"19043:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"18953:126:64"},"returnParameters":{"id":17421,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17420,"mutability":"mutable","name":"amountsOut","nameLocation":"19138:10:64","nodeType":"VariableDeclaration","scope":17481,"src":"19121:27:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17418,"name":"uint256","nodeType":"ElementaryTypeName","src":"19121:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17419,"nodeType":"ArrayTypeName","src":"19121:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"19120:29:64"},"scope":18510,"src":"18917:716:64","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2701],"body":{"id":17538,"nodeType":"Block","src":"20186:811:64","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":17515,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"20318:6:64","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":17516,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"20325:19:64","memberName":"swapSingleTokenHook","nodeType":"MemberAccess","referencedDeclaration":17658,"src":"20318:26:64","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr_$returns$_t_uint256_$","typeString":"function Router.swapSingleTokenHook(struct IRouter.SwapSingleTokenHookParams calldata) returns (uint256)"}},{"arguments":[{"expression":{"id":17518,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"20434:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17519,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20438:6:64","memberName":"sender","nodeType":"MemberAccess","src":"20434:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17520,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"20480:8:64","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4735_$","typeString":"type(enum SwapKind)"}},"id":17521,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"20489:8:64","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"20480:17:64","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},{"id":17522,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17484,"src":"20533:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17523,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17487,"src":"20576:7:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":17524,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17490,"src":"20623:8:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":17525,"name":"exactAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17492,"src":"20674:13:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17526,"name":"minAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17494,"src":"20724:12:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17527,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17496,"src":"20776:8:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17528,"name":"wethIsEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17498,"src":"20825:9:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":17529,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17500,"src":"20874:8:64","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":17517,"name":"SwapSingleTokenHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2677,"src":"20370:25:64","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_SwapSingleTokenHookParams_$2677_storage_ptr_$","typeString":"type(struct IRouter.SwapSingleTokenHookParams storage pointer)"}},"id":17530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["20426:6:64","20474:4:64","20527:4:64","20567:7:64","20613:8:64","20661:11:64","20717:5:64","20766:8:64","20814:9:64","20864:8:64"],"names":["sender","kind","pool","tokenIn","tokenOut","amountGiven","limit","deadline","wethIsEth","userData"],"nodeType":"FunctionCall","src":"20370:539:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_memory_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr_$returns$_t_uint256_$","typeString":"function Router.swapSingleTokenHook(struct IRouter.SwapSingleTokenHookParams calldata) returns (uint256)"},{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_memory_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams memory"}],"expression":{"id":17513,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"20278:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":17514,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"20282:10:64","memberName":"encodeCall","nodeType":"MemberAccess","src":"20278:14:64","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":17531,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20278:653:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":17511,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"20243:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":17512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20250:6:64","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":4440,"src":"20243:13:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":17532,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20243:706:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":17534,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20968:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":17533,"name":"uint256","nodeType":"ElementaryTypeName","src":"20968:7:64","typeDescriptions":{}}}],"id":17535,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"20967:9:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":17509,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"20215:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":17510,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"20219:6:64","memberName":"decode","nodeType":"MemberAccess","src":"20215:10:64","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":17536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20215:775:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17508,"id":17537,"nodeType":"Return","src":"20196:794:64"}]},"documentation":{"id":17482,"nodeType":"StructuredDocumentation","src":"19847:23:64","text":"@inheritdoc IRouter"},"functionSelector":"750283bc","id":17539,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"expression":{"id":17503,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"20156:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20160:6:64","memberName":"sender","nodeType":"MemberAccess","src":"20156:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":17505,"kind":"modifierInvocation","modifierName":{"id":17502,"name":"saveSender","nameLocations":["20145:10:64"],"nodeType":"IdentifierPath","referencedDeclaration":19249,"src":"20145:10:64"},"nodeType":"ModifierInvocation","src":"20145:22:64"}],"name":"swapSingleTokenExactIn","nameLocation":"19884:22:64","nodeType":"FunctionDefinition","parameters":{"id":17501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17484,"mutability":"mutable","name":"pool","nameLocation":"19924:4:64","nodeType":"VariableDeclaration","scope":17539,"src":"19916:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17483,"name":"address","nodeType":"ElementaryTypeName","src":"19916:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17487,"mutability":"mutable","name":"tokenIn","nameLocation":"19945:7:64","nodeType":"VariableDeclaration","scope":17539,"src":"19938:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":17486,"nodeType":"UserDefinedTypeName","pathNode":{"id":17485,"name":"IERC20","nameLocations":["19938:6:64"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"19938:6:64"},"referencedDeclaration":40109,"src":"19938:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":17490,"mutability":"mutable","name":"tokenOut","nameLocation":"19969:8:64","nodeType":"VariableDeclaration","scope":17539,"src":"19962:15:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":17489,"nodeType":"UserDefinedTypeName","pathNode":{"id":17488,"name":"IERC20","nameLocations":["19962:6:64"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"19962:6:64"},"referencedDeclaration":40109,"src":"19962:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":17492,"mutability":"mutable","name":"exactAmountIn","nameLocation":"19995:13:64","nodeType":"VariableDeclaration","scope":17539,"src":"19987:21:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17491,"name":"uint256","nodeType":"ElementaryTypeName","src":"19987:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17494,"mutability":"mutable","name":"minAmountOut","nameLocation":"20026:12:64","nodeType":"VariableDeclaration","scope":17539,"src":"20018:20:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17493,"name":"uint256","nodeType":"ElementaryTypeName","src":"20018:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17496,"mutability":"mutable","name":"deadline","nameLocation":"20056:8:64","nodeType":"VariableDeclaration","scope":17539,"src":"20048:16:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17495,"name":"uint256","nodeType":"ElementaryTypeName","src":"20048:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17498,"mutability":"mutable","name":"wethIsEth","nameLocation":"20079:9:64","nodeType":"VariableDeclaration","scope":17539,"src":"20074:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17497,"name":"bool","nodeType":"ElementaryTypeName","src":"20074:4:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":17500,"mutability":"mutable","name":"userData","nameLocation":"20113:8:64","nodeType":"VariableDeclaration","scope":17539,"src":"20098:23:64","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":17499,"name":"bytes","nodeType":"ElementaryTypeName","src":"20098:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"19906:221:64"},"returnParameters":{"id":17508,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17507,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17539,"src":"20177:7:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17506,"name":"uint256","nodeType":"ElementaryTypeName","src":"20177:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20176:9:64"},"scope":18510,"src":"19875:1122:64","stateMutability":"payable","virtual":false,"visibility":"external"},{"baseFunctions":[2725],"body":{"id":17596,"nodeType":"Block","src":"21343:812:64","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":17573,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"21475:6:64","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":17574,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"21482:19:64","memberName":"swapSingleTokenHook","nodeType":"MemberAccess","referencedDeclaration":17658,"src":"21475:26:64","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr_$returns$_t_uint256_$","typeString":"function Router.swapSingleTokenHook(struct IRouter.SwapSingleTokenHookParams calldata) returns (uint256)"}},{"arguments":[{"expression":{"id":17576,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"21591:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21595:6:64","memberName":"sender","nodeType":"MemberAccess","src":"21591:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17578,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"21637:8:64","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4735_$","typeString":"type(enum SwapKind)"}},"id":17579,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"21646:9:64","memberName":"EXACT_OUT","nodeType":"MemberAccess","referencedDeclaration":4734,"src":"21637:18:64","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},{"id":17580,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17542,"src":"21691:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17581,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17545,"src":"21734:7:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":17582,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17548,"src":"21781:8:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":17583,"name":"exactAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17550,"src":"21832:14:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17584,"name":"maxAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17552,"src":"21883:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17585,"name":"deadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17554,"src":"21934:8:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17586,"name":"wethIsEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17556,"src":"21983:9:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":17587,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17558,"src":"22032:8:64","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":17575,"name":"SwapSingleTokenHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2677,"src":"21527:25:64","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_SwapSingleTokenHookParams_$2677_storage_ptr_$","typeString":"type(struct IRouter.SwapSingleTokenHookParams storage pointer)"}},"id":17588,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["21583:6:64","21631:4:64","21685:4:64","21725:7:64","21771:8:64","21819:11:64","21876:5:64","21924:8:64","21972:9:64","22022:8:64"],"names":["sender","kind","pool","tokenIn","tokenOut","amountGiven","limit","deadline","wethIsEth","userData"],"nodeType":"FunctionCall","src":"21527:540:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_memory_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr_$returns$_t_uint256_$","typeString":"function Router.swapSingleTokenHook(struct IRouter.SwapSingleTokenHookParams calldata) returns (uint256)"},{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_memory_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams memory"}],"expression":{"id":17571,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"21435:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":17572,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"21439:10:64","memberName":"encodeCall","nodeType":"MemberAccess","src":"21435:14:64","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":17589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21435:654:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":17569,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"21400:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":17570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21407:6:64","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":4440,"src":"21400:13:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":17590,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21400:707:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":17592,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22126:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":17591,"name":"uint256","nodeType":"ElementaryTypeName","src":"22126:7:64","typeDescriptions":{}}}],"id":17593,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"22125:9:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":17567,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"21372:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":17568,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"21376:6:64","memberName":"decode","nodeType":"MemberAccess","src":"21372:10:64","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":17594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21372:776:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17566,"id":17595,"nodeType":"Return","src":"21353:795:64"}]},"documentation":{"id":17540,"nodeType":"StructuredDocumentation","src":"21003:23:64","text":"@inheritdoc IRouter"},"functionSelector":"94e86ef8","id":17597,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"expression":{"id":17561,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"21313:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":17562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21317:6:64","memberName":"sender","nodeType":"MemberAccess","src":"21313:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":17563,"kind":"modifierInvocation","modifierName":{"id":17560,"name":"saveSender","nameLocations":["21302:10:64"],"nodeType":"IdentifierPath","referencedDeclaration":19249,"src":"21302:10:64"},"nodeType":"ModifierInvocation","src":"21302:22:64"}],"name":"swapSingleTokenExactOut","nameLocation":"21040:23:64","nodeType":"FunctionDefinition","parameters":{"id":17559,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17542,"mutability":"mutable","name":"pool","nameLocation":"21081:4:64","nodeType":"VariableDeclaration","scope":17597,"src":"21073:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17541,"name":"address","nodeType":"ElementaryTypeName","src":"21073:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17545,"mutability":"mutable","name":"tokenIn","nameLocation":"21102:7:64","nodeType":"VariableDeclaration","scope":17597,"src":"21095:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":17544,"nodeType":"UserDefinedTypeName","pathNode":{"id":17543,"name":"IERC20","nameLocations":["21095:6:64"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"21095:6:64"},"referencedDeclaration":40109,"src":"21095:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":17548,"mutability":"mutable","name":"tokenOut","nameLocation":"21126:8:64","nodeType":"VariableDeclaration","scope":17597,"src":"21119:15:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":17547,"nodeType":"UserDefinedTypeName","pathNode":{"id":17546,"name":"IERC20","nameLocations":["21119:6:64"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"21119:6:64"},"referencedDeclaration":40109,"src":"21119:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":17550,"mutability":"mutable","name":"exactAmountOut","nameLocation":"21152:14:64","nodeType":"VariableDeclaration","scope":17597,"src":"21144:22:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17549,"name":"uint256","nodeType":"ElementaryTypeName","src":"21144:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17552,"mutability":"mutable","name":"maxAmountIn","nameLocation":"21184:11:64","nodeType":"VariableDeclaration","scope":17597,"src":"21176:19:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17551,"name":"uint256","nodeType":"ElementaryTypeName","src":"21176:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17554,"mutability":"mutable","name":"deadline","nameLocation":"21213:8:64","nodeType":"VariableDeclaration","scope":17597,"src":"21205:16:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17553,"name":"uint256","nodeType":"ElementaryTypeName","src":"21205:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17556,"mutability":"mutable","name":"wethIsEth","nameLocation":"21236:9:64","nodeType":"VariableDeclaration","scope":17597,"src":"21231:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":17555,"name":"bool","nodeType":"ElementaryTypeName","src":"21231:4:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":17558,"mutability":"mutable","name":"userData","nameLocation":"21270:8:64","nodeType":"VariableDeclaration","scope":17597,"src":"21255:23:64","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":17557,"name":"bytes","nodeType":"ElementaryTypeName","src":"21255:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"21063:221:64"},"returnParameters":{"id":17566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17565,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17597,"src":"21334:7:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17564,"name":"uint256","nodeType":"ElementaryTypeName","src":"21334:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"21333:9:64"},"scope":18510,"src":"21031:1124:64","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":17657,"nodeType":"Block","src":"22599:465:64","statements":[{"assignments":[17611,17613,17615],"declarations":[{"constant":false,"id":17611,"mutability":"mutable","name":"amountCalculated","nameLocation":"22618:16:64","nodeType":"VariableDeclaration","scope":17657,"src":"22610:24:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17610,"name":"uint256","nodeType":"ElementaryTypeName","src":"22610:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17613,"mutability":"mutable","name":"amountIn","nameLocation":"22644:8:64","nodeType":"VariableDeclaration","scope":17657,"src":"22636:16:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17612,"name":"uint256","nodeType":"ElementaryTypeName","src":"22636:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17615,"mutability":"mutable","name":"amountOut","nameLocation":"22662:9:64","nodeType":"VariableDeclaration","scope":17657,"src":"22654:17:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17614,"name":"uint256","nodeType":"ElementaryTypeName","src":"22654:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17619,"initialValue":{"arguments":[{"id":17617,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17601,"src":"22685:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams calldata"}],"id":17616,"name":"_swapHook","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17706,"src":"22675:9:64","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (struct IRouter.SwapSingleTokenHookParams calldata) returns (uint256,uint256,uint256)"}},"id":17618,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22675:17:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"22609:83:64"},{"assignments":[17622],"declarations":[{"constant":false,"id":17622,"mutability":"mutable","name":"tokenIn","nameLocation":"22710:7:64","nodeType":"VariableDeclaration","scope":17657,"src":"22703:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":17621,"nodeType":"UserDefinedTypeName","pathNode":{"id":17620,"name":"IERC20","nameLocations":["22703:6:64"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"22703:6:64"},"referencedDeclaration":40109,"src":"22703:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"id":17625,"initialValue":{"expression":{"id":17623,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17601,"src":"22720:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams calldata"}},"id":17624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22727:7:64","memberName":"tokenIn","nodeType":"MemberAccess","referencedDeclaration":2663,"src":"22720:14:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"22703:31:64"},{"expression":{"arguments":[{"expression":{"id":17627,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17601,"src":"22758:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams calldata"}},"id":17628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22765:6:64","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":2655,"src":"22758:13:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17629,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17622,"src":"22773:7:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":17630,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17613,"src":"22782:8:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17631,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17601,"src":"22792:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams calldata"}},"id":17632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22799:9:64","memberName":"wethIsEth","nodeType":"MemberAccess","referencedDeclaration":2674,"src":"22792:16:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":17626,"name":"_takeTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19083,"src":"22745:12:64","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$40109_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,contract IERC20,uint256,bool)"}},"id":17633,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22745:64:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17634,"nodeType":"ExpressionStatement","src":"22745:64:64"},{"expression":{"arguments":[{"expression":{"id":17636,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17601,"src":"22833:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams calldata"}},"id":17637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22840:6:64","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":2655,"src":"22833:13:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17638,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17601,"src":"22848:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams calldata"}},"id":17639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22855:8:64","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":2666,"src":"22848:15:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":17640,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17615,"src":"22865:9:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17641,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17601,"src":"22876:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams calldata"}},"id":17642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22883:9:64","memberName":"wethIsEth","nodeType":"MemberAccess","referencedDeclaration":2674,"src":"22876:16:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":17635,"name":"_sendTokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19126,"src":"22819:13:64","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_contract$_IERC20_$40109_$_t_uint256_$_t_bool_$returns$__$","typeString":"function (address,contract IERC20,uint256,bool)"}},"id":17643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22819:74:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17644,"nodeType":"ExpressionStatement","src":"22819:74:64"},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"id":17647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":17645,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17622,"src":"22908:7:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":17646,"name":"_weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18585,"src":"22919:5:64","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},"src":"22908:16:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17654,"nodeType":"IfStatement","src":"22904:120:64","trueBody":{"id":17653,"nodeType":"Block","src":"22926:98:64","statements":[{"expression":{"arguments":[{"expression":{"id":17649,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17601,"src":"22999:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams calldata"}},"id":17650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23006:6:64","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":2655,"src":"22999:13:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17648,"name":"_returnEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18982,"src":"22988:10:64","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":17651,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22988:25:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17652,"nodeType":"ExpressionStatement","src":"22988:25:64"}]}},{"expression":{"id":17655,"name":"amountCalculated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17611,"src":"23041:16:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17609,"id":17656,"nodeType":"Return","src":"23034:23:64"}]},"documentation":{"id":17598,"nodeType":"StructuredDocumentation","src":"22161:297:64","text":" @notice Hook for swaps.\n @dev Can only be called by the Vault. Also handles native ETH.\n @param params Swap parameters (see IRouter for struct definition)\n @return amountCalculated Token amount calculated by the pool math (e.g., amountOut for an exact in swap)"},"functionSelector":"68a24fe0","id":17658,"implemented":true,"kind":"function","modifiers":[{"id":17604,"kind":"modifierInvocation","modifierName":{"id":17603,"name":"nonReentrant","nameLocations":["22558:12:64"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"22558:12:64"},"nodeType":"ModifierInvocation","src":"22558:12:64"},{"id":17606,"kind":"modifierInvocation","modifierName":{"id":17605,"name":"onlyVault","nameLocations":["22571:9:64"],"nodeType":"IdentifierPath","referencedDeclaration":28128,"src":"22571:9:64"},"nodeType":"ModifierInvocation","src":"22571:9:64"}],"name":"swapSingleTokenHook","nameLocation":"22472:19:64","nodeType":"FunctionDefinition","parameters":{"id":17602,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17601,"mutability":"mutable","name":"params","nameLocation":"22536:6:64","nodeType":"VariableDeclaration","scope":17658,"src":"22501:41:64","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams"},"typeName":{"id":17600,"nodeType":"UserDefinedTypeName","pathNode":{"id":17599,"name":"SwapSingleTokenHookParams","nameLocations":["22501:25:64"],"nodeType":"IdentifierPath","referencedDeclaration":2677,"src":"22501:25:64"},"referencedDeclaration":2677,"src":"22501:25:64","typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_storage_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams"}},"visibility":"internal"}],"src":"22491:57:64"},"returnParameters":{"id":17609,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17608,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":17658,"src":"22590:7:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17607,"name":"uint256","nodeType":"ElementaryTypeName","src":"22590:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22589:9:64"},"scope":18510,"src":"22463:601:64","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":17705,"nodeType":"Block","src":"23227:661:64","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":17674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":17670,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"23393:5:64","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":17671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23399:9:64","memberName":"timestamp","nodeType":"MemberAccess","src":"23393:15:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":17672,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17661,"src":"23411:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams calldata"}},"id":17673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23418:8:64","memberName":"deadline","nodeType":"MemberAccess","referencedDeclaration":2672,"src":"23411:15:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23393:33:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":17679,"nodeType":"IfStatement","src":"23389:85:64","trueBody":{"id":17678,"nodeType":"Block","src":"23428:46:64","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":17675,"name":"SwapDeadline","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3034,"src":"23449:12:64","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":17676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23449:14:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":17677,"nodeType":"RevertStatement","src":"23442:21:64"}]}},{"expression":{"id":17703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":17680,"name":"amountCalculated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17664,"src":"23485:16:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17681,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17666,"src":"23503:8:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17682,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17668,"src":"23513:9:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":17683,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"23484:39:64","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"expression":{"id":17687,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17661,"src":"23591:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams calldata"}},"id":17688,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23598:4:64","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2658,"src":"23591:11:64","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},{"expression":{"id":17689,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17661,"src":"23626:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams calldata"}},"id":17690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23633:4:64","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2660,"src":"23626:11:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17691,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17661,"src":"23664:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams calldata"}},"id":17692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23671:7:64","memberName":"tokenIn","nodeType":"MemberAccess","referencedDeclaration":2663,"src":"23664:14:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"expression":{"id":17693,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17661,"src":"23706:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams calldata"}},"id":17694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23713:8:64","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":2666,"src":"23706:15:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"expression":{"id":17695,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17661,"src":"23755:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams calldata"}},"id":17696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23762:11:64","memberName":"amountGiven","nodeType":"MemberAccess","referencedDeclaration":2668,"src":"23755:18:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17697,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17661,"src":"23801:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams calldata"}},"id":17698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23808:5:64","memberName":"limit","nodeType":"MemberAccess","referencedDeclaration":2670,"src":"23801:12:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17699,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17661,"src":"23841:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams calldata"}},"id":17700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23848:8:64","memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":2676,"src":"23841:15:64","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":17686,"name":"VaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4754,"src":"23551:15:64","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_VaultSwapParams_$4754_storage_ptr_$","typeString":"type(struct VaultSwapParams storage pointer)"}},"id":17701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["23585:4:64","23620:4:64","23655:7:64","23696:8:64","23739:14:64","23791:8:64","23831:8:64"],"names":["kind","pool","tokenIn","tokenOut","amountGivenRaw","limitRaw","userData"],"nodeType":"FunctionCall","src":"23551:320:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}],"expression":{"id":17684,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"23526:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":17685,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23533:4:64","memberName":"swap","nodeType":"MemberAccess","referencedDeclaration":4475,"src":"23526:11:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_VaultSwapParams_$4754_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (struct VaultSwapParams memory) external returns (uint256,uint256,uint256)"}},"id":17702,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23526:355:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"src":"23484:397:64","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17704,"nodeType":"ExpressionStatement","src":"23484:397:64"}]},"id":17706,"implemented":true,"kind":"function","modifiers":[],"name":"_swapHook","nameLocation":"23079:9:64","nodeType":"FunctionDefinition","parameters":{"id":17662,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17661,"mutability":"mutable","name":"params","nameLocation":"23133:6:64","nodeType":"VariableDeclaration","scope":17706,"src":"23098:41:64","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams"},"typeName":{"id":17660,"nodeType":"UserDefinedTypeName","pathNode":{"id":17659,"name":"SwapSingleTokenHookParams","nameLocations":["23098:25:64"],"nodeType":"IdentifierPath","referencedDeclaration":2677,"src":"23098:25:64"},"referencedDeclaration":2677,"src":"23098:25:64","typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_storage_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams"}},"visibility":"internal"}],"src":"23088:57:64"},"returnParameters":{"id":17669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17664,"mutability":"mutable","name":"amountCalculated","nameLocation":"23172:16:64","nodeType":"VariableDeclaration","scope":17706,"src":"23164:24:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17663,"name":"uint256","nodeType":"ElementaryTypeName","src":"23164:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17666,"mutability":"mutable","name":"amountIn","nameLocation":"23198:8:64","nodeType":"VariableDeclaration","scope":17706,"src":"23190:16:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17665,"name":"uint256","nodeType":"ElementaryTypeName","src":"23190:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17668,"mutability":"mutable","name":"amountOut","nameLocation":"23216:9:64","nodeType":"VariableDeclaration","scope":17706,"src":"23208:17:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17667,"name":"uint256","nodeType":"ElementaryTypeName","src":"23208:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23163:63:64"},"scope":18510,"src":"23070:818:64","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[2740],"body":{"id":17762,"nodeType":"Block","src":"24361:828:64","statements":[{"expression":{"id":17760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":17724,"name":"amountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17722,"src":"24372:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},null,null],"id":17725,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"24371:15:64","typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$__$__$","typeString":"tuple(uint256[] memory,,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":17732,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"24479:6:64","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":17733,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"24486:21:64","memberName":"queryAddLiquidityHook","nodeType":"MemberAccess","referencedDeclaration":17993,"src":"24479:28:64","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_AddLiquidityHookParams_$2947_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"function Router.queryAddLiquidityHook(struct IRouterCommon.AddLiquidityHookParams calldata) returns (uint256[] memory,uint256,bytes memory)"}},{"arguments":[{"arguments":[{"id":17737,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"24767:4:64","typeDescriptions":{"typeIdentifier":"t_contract$_Router_$18510","typeString":"contract Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Router_$18510","typeString":"contract Router"}],"id":17736,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24759:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17735,"name":"address","nodeType":"ElementaryTypeName","src":"24759:7:64","typeDescriptions":{}}},"id":17738,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24759:13:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17739,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17709,"src":"24804:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":17741,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17709,"src":"24864:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":17740,"name":"_maxTokenLimits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19169,"src":"24848:15:64","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) view returns (uint256[] memory)"}},"id":17742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24848:21:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":17743,"name":"exactBptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17711,"src":"24912:17:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17744,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4807,"src":"24961:16:64","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_AddLiquidityKind_$4807_$","typeString":"type(enum AddLiquidityKind)"}},"id":17745,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"24978:12:64","memberName":"PROPORTIONAL","nodeType":"MemberAccess","referencedDeclaration":4802,"src":"24961:29:64","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},{"hexValue":"66616c7365","id":17746,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"25027:5:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":17747,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17715,"src":"25068:8:64","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":17734,"name":"AddLiquidityHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2947,"src":"24529:22:64","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_AddLiquidityHookParams_$2947_storage_ptr_$","typeString":"type(struct IRouterCommon.AddLiquidityHookParams storage pointer)"}},"id":17748,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["24751:6:64","24798:4:64","24834:12:64","24895:15:64","24955:4:64","25016:9:64","25058:8:64"],"names":["sender","pool","maxAmountsIn","minBptAmountOut","kind","wethIsEth","userData"],"nodeType":"FunctionCall","src":"24529:570:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_memory_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_AddLiquidityHookParams_$2947_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"function Router.queryAddLiquidityHook(struct IRouterCommon.AddLiquidityHookParams calldata) returns (uint256[] memory,uint256,bytes memory)"},{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_memory_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams memory"}],"expression":{"id":17730,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"24443:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":17731,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"24447:10:64","memberName":"encodeCall","nodeType":"MemberAccess","src":"24443:14:64","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":17749,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24443:674:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":17728,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"24413:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":17729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24420:5:64","memberName":"quote","nodeType":"MemberAccess","referencedDeclaration":4392,"src":"24413:12:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":17750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24413:718:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"baseExpression":{"id":17752,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25146:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":17751,"name":"uint256","nodeType":"ElementaryTypeName","src":"25146:7:64","typeDescriptions":{}}},"id":17753,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"25146:9:64","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}},{"id":17755,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25157:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":17754,"name":"uint256","nodeType":"ElementaryTypeName","src":"25157:7:64","typeDescriptions":{}}},{"id":17757,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25166:5:64","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":17756,"name":"bytes","nodeType":"ElementaryTypeName","src":"25166:5:64","typeDescriptions":{}}}],"id":17758,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"25145:27:64","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256[] memory),type(uint256),type(bytes storage pointer))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256[] memory),type(uint256),type(bytes storage pointer))"}],"expression":{"id":17726,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"24389:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":17727,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"24393:6:64","memberName":"decode","nodeType":"MemberAccess","src":"24389:10:64","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":17759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24389:793:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256,bytes memory)"}},"src":"24371:811:64","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17761,"nodeType":"ExpressionStatement","src":"24371:811:64"}]},"documentation":{"id":17707,"nodeType":"StructuredDocumentation","src":"24111:23:64","text":"@inheritdoc IRouter"},"functionSelector":"9de90518","id":17763,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":17718,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17713,"src":"24316:6:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":17719,"kind":"modifierInvocation","modifierName":{"id":17717,"name":"saveSender","nameLocations":["24305:10:64"],"nodeType":"IdentifierPath","referencedDeclaration":19249,"src":"24305:10:64"},"nodeType":"ModifierInvocation","src":"24305:18:64"}],"name":"queryAddLiquidityProportional","nameLocation":"24148:29:64","nodeType":"FunctionDefinition","parameters":{"id":17716,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17709,"mutability":"mutable","name":"pool","nameLocation":"24195:4:64","nodeType":"VariableDeclaration","scope":17763,"src":"24187:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17708,"name":"address","nodeType":"ElementaryTypeName","src":"24187:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17711,"mutability":"mutable","name":"exactBptAmountOut","nameLocation":"24217:17:64","nodeType":"VariableDeclaration","scope":17763,"src":"24209:25:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17710,"name":"uint256","nodeType":"ElementaryTypeName","src":"24209:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17713,"mutability":"mutable","name":"sender","nameLocation":"24252:6:64","nodeType":"VariableDeclaration","scope":17763,"src":"24244:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17712,"name":"address","nodeType":"ElementaryTypeName","src":"24244:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17715,"mutability":"mutable","name":"userData","nameLocation":"24281:8:64","nodeType":"VariableDeclaration","scope":17763,"src":"24268:21:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":17714,"name":"bytes","nodeType":"ElementaryTypeName","src":"24268:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"24177:118:64"},"returnParameters":{"id":17723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17722,"mutability":"mutable","name":"amountsIn","nameLocation":"24350:9:64","nodeType":"VariableDeclaration","scope":17763,"src":"24333:26:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17720,"name":"uint256","nodeType":"ElementaryTypeName","src":"24333:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17721,"nodeType":"ArrayTypeName","src":"24333:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"24332:28:64"},"scope":18510,"src":"24139:1050:64","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2755],"body":{"id":17817,"nodeType":"Block","src":"25443:806:64","statements":[{"expression":{"id":17815,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[null,{"id":17781,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17779,"src":"25456:12:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},null],"id":17782,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"25453:18:64","typeDescriptions":{"typeIdentifier":"t_tuple$__$_t_uint256_$__$","typeString":"tuple(,uint256,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":17789,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"25564:6:64","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":17790,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"25571:21:64","memberName":"queryAddLiquidityHook","nodeType":"MemberAccess","referencedDeclaration":17993,"src":"25564:28:64","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_AddLiquidityHookParams_$2947_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"function Router.queryAddLiquidityHook(struct IRouterCommon.AddLiquidityHookParams calldata) returns (uint256[] memory,uint256,bytes memory)"}},{"arguments":[{"arguments":[{"id":17794,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"25852:4:64","typeDescriptions":{"typeIdentifier":"t_contract$_Router_$18510","typeString":"contract Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Router_$18510","typeString":"contract Router"}],"id":17793,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25844:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17792,"name":"address","nodeType":"ElementaryTypeName","src":"25844:7:64","typeDescriptions":{}}},"id":17795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25844:13:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17796,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17766,"src":"25889:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17797,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17769,"src":"25933:14:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"hexValue":"30","id":17798,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25990:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"expression":{"id":17799,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4807,"src":"26023:16:64","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_AddLiquidityKind_$4807_$","typeString":"type(enum AddLiquidityKind)"}},"id":17800,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"26040:10:64","memberName":"UNBALANCED","nodeType":"MemberAccess","referencedDeclaration":4803,"src":"26023:27:64","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},{"hexValue":"66616c7365","id":17801,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"26087:5:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":17802,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17773,"src":"26128:8:64","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":17791,"name":"AddLiquidityHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2947,"src":"25614:22:64","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_AddLiquidityHookParams_$2947_storage_ptr_$","typeString":"type(struct IRouterCommon.AddLiquidityHookParams storage pointer)"}},"id":17803,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["25836:6:64","25883:4:64","25919:12:64","25973:15:64","26017:4:64","26076:9:64","26118:8:64"],"names":["sender","pool","maxAmountsIn","minBptAmountOut","kind","wethIsEth","userData"],"nodeType":"FunctionCall","src":"25614:545:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_memory_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_AddLiquidityHookParams_$2947_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"function Router.queryAddLiquidityHook(struct IRouterCommon.AddLiquidityHookParams calldata) returns (uint256[] memory,uint256,bytes memory)"},{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_memory_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams memory"}],"expression":{"id":17787,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"25528:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":17788,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"25532:10:64","memberName":"encodeCall","nodeType":"MemberAccess","src":"25528:14:64","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":17804,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25528:649:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":17785,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"25498:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":17786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25505:5:64","memberName":"quote","nodeType":"MemberAccess","referencedDeclaration":4392,"src":"25498:12:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":17805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25498:693:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"baseExpression":{"id":17807,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"26206:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":17806,"name":"uint256","nodeType":"ElementaryTypeName","src":"26206:7:64","typeDescriptions":{}}},"id":17808,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"26206:9:64","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}},{"id":17810,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"26217:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":17809,"name":"uint256","nodeType":"ElementaryTypeName","src":"26217:7:64","typeDescriptions":{}}},{"id":17812,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"26226:5:64","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":17811,"name":"bytes","nodeType":"ElementaryTypeName","src":"26226:5:64","typeDescriptions":{}}}],"id":17813,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"26205:27:64","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256[] memory),type(uint256),type(bytes storage pointer))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256[] memory),type(uint256),type(bytes storage pointer))"}],"expression":{"id":17783,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"25474:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":17784,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"25478:6:64","memberName":"decode","nodeType":"MemberAccess","src":"25474:10:64","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":17814,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25474:768:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256,bytes memory)"}},"src":"25453:789:64","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17816,"nodeType":"ExpressionStatement","src":"25453:789:64"}]},"documentation":{"id":17764,"nodeType":"StructuredDocumentation","src":"25195:23:64","text":"@inheritdoc IRouter"},"functionSelector":"da001f7d","id":17818,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":17776,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17771,"src":"25404:6:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":17777,"kind":"modifierInvocation","modifierName":{"id":17775,"name":"saveSender","nameLocations":["25393:10:64"],"nodeType":"IdentifierPath","referencedDeclaration":19249,"src":"25393:10:64"},"nodeType":"ModifierInvocation","src":"25393:18:64"}],"name":"queryAddLiquidityUnbalanced","nameLocation":"25232:27:64","nodeType":"FunctionDefinition","parameters":{"id":17774,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17766,"mutability":"mutable","name":"pool","nameLocation":"25277:4:64","nodeType":"VariableDeclaration","scope":17818,"src":"25269:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17765,"name":"address","nodeType":"ElementaryTypeName","src":"25269:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17769,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"25308:14:64","nodeType":"VariableDeclaration","scope":17818,"src":"25291:31:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17767,"name":"uint256","nodeType":"ElementaryTypeName","src":"25291:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17768,"nodeType":"ArrayTypeName","src":"25291:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":17771,"mutability":"mutable","name":"sender","nameLocation":"25340:6:64","nodeType":"VariableDeclaration","scope":17818,"src":"25332:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17770,"name":"address","nodeType":"ElementaryTypeName","src":"25332:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17773,"mutability":"mutable","name":"userData","nameLocation":"25369:8:64","nodeType":"VariableDeclaration","scope":17818,"src":"25356:21:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":17772,"name":"bytes","nodeType":"ElementaryTypeName","src":"25356:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"25259:124:64"},"returnParameters":{"id":17780,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17779,"mutability":"mutable","name":"bptAmountOut","nameLocation":"25429:12:64","nodeType":"VariableDeclaration","scope":17818,"src":"25421:20:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17778,"name":"uint256","nodeType":"ElementaryTypeName","src":"25421:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25420:22:64"},"scope":18510,"src":"25223:1026:64","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2772],"body":{"id":17893,"nodeType":"Block","src":"26526:1057:64","statements":[{"assignments":[17842,17844],"declarations":[{"constant":false,"id":17842,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"26554:12:64","nodeType":"VariableDeclaration","scope":17893,"src":"26537:29:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17840,"name":"uint256","nodeType":"ElementaryTypeName","src":"26537:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17841,"nodeType":"ArrayTypeName","src":"26537:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":17844,"mutability":"mutable","name":"tokenIndex","nameLocation":"26576:10:64","nodeType":"VariableDeclaration","scope":17893,"src":"26568:18:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17843,"name":"uint256","nodeType":"ElementaryTypeName","src":"26568:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":17850,"initialValue":{"arguments":[{"id":17846,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17821,"src":"26637:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17847,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17824,"src":"26655:7:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":17848,"name":"_MAX_AMOUNT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19232,"src":"26676:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":17845,"name":"_getSingleInputArrayAndTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19026,"src":"26590:33:64","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_contract$_IERC20_$40109_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address,contract IERC20,uint256) view returns (uint256[] memory,uint256)"}},"id":17849,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26590:107:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(uint256[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"26536:161:64"},{"assignments":[17855,null,null],"declarations":[{"constant":false,"id":17855,"mutability":"mutable","name":"amountsIn","nameLocation":"26726:9:64","nodeType":"VariableDeclaration","scope":17893,"src":"26709:26:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17853,"name":"uint256","nodeType":"ElementaryTypeName","src":"26709:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17854,"nodeType":"ArrayTypeName","src":"26709:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},null,null],"id":17888,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":17862,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"26833:6:64","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":17863,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"26840:21:64","memberName":"queryAddLiquidityHook","nodeType":"MemberAccess","referencedDeclaration":17993,"src":"26833:28:64","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_AddLiquidityHookParams_$2947_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"function Router.queryAddLiquidityHook(struct IRouterCommon.AddLiquidityHookParams calldata) returns (uint256[] memory,uint256,bytes memory)"}},{"arguments":[{"arguments":[{"id":17867,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"27121:4:64","typeDescriptions":{"typeIdentifier":"t_contract$_Router_$18510","typeString":"contract Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Router_$18510","typeString":"contract Router"}],"id":17866,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27113:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17865,"name":"address","nodeType":"ElementaryTypeName","src":"27113:7:64","typeDescriptions":{}}},"id":17868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27113:13:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17869,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17821,"src":"27158:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17870,"name":"maxAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17842,"src":"27202:12:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":17871,"name":"exactBptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17826,"src":"27257:17:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17872,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4807,"src":"27306:16:64","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_AddLiquidityKind_$4807_$","typeString":"type(enum AddLiquidityKind)"}},"id":17873,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"27323:22:64","memberName":"SINGLE_TOKEN_EXACT_OUT","nodeType":"MemberAccess","referencedDeclaration":4804,"src":"27306:39:64","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},{"hexValue":"66616c7365","id":17874,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"27382:5:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":17875,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17830,"src":"27423:8:64","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":17864,"name":"AddLiquidityHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2947,"src":"26883:22:64","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_AddLiquidityHookParams_$2947_storage_ptr_$","typeString":"type(struct IRouterCommon.AddLiquidityHookParams storage pointer)"}},"id":17876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["27105:6:64","27152:4:64","27188:12:64","27240:15:64","27300:4:64","27371:9:64","27413:8:64"],"names":["sender","pool","maxAmountsIn","minBptAmountOut","kind","wethIsEth","userData"],"nodeType":"FunctionCall","src":"26883:571:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_memory_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_AddLiquidityHookParams_$2947_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"function Router.queryAddLiquidityHook(struct IRouterCommon.AddLiquidityHookParams calldata) returns (uint256[] memory,uint256,bytes memory)"},{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_memory_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams memory"}],"expression":{"id":17860,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"26797:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":17861,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"26801:10:64","memberName":"encodeCall","nodeType":"MemberAccess","src":"26797:14:64","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":17877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26797:675:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":17858,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"26767:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":17859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26774:5:64","memberName":"quote","nodeType":"MemberAccess","referencedDeclaration":4392,"src":"26767:12:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":17878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26767:719:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"baseExpression":{"id":17880,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27501:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":17879,"name":"uint256","nodeType":"ElementaryTypeName","src":"27501:7:64","typeDescriptions":{}}},"id":17881,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"27501:9:64","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}},{"id":17883,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27512:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":17882,"name":"uint256","nodeType":"ElementaryTypeName","src":"27512:7:64","typeDescriptions":{}}},{"id":17885,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27521:5:64","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":17884,"name":"bytes","nodeType":"ElementaryTypeName","src":"27521:5:64","typeDescriptions":{}}}],"id":17886,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"27500:27:64","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256[] memory),type(uint256),type(bytes storage pointer))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256[] memory),type(uint256),type(bytes storage pointer))"}],"expression":{"id":17856,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"26743:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":17857,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"26747:6:64","memberName":"decode","nodeType":"MemberAccess","src":"26743:10:64","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":17887,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26743:794:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"26708:829:64"},{"expression":{"baseExpression":{"id":17889,"name":"amountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17855,"src":"27555:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":17891,"indexExpression":{"id":17890,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17844,"src":"27565:10:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27555:21:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":17837,"id":17892,"nodeType":"Return","src":"27548:28:64"}]},"documentation":{"id":17819,"nodeType":"StructuredDocumentation","src":"26255:23:64","text":"@inheritdoc IRouter"},"functionSelector":"1d56798d","id":17894,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":17833,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17828,"src":"26491:6:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":17834,"kind":"modifierInvocation","modifierName":{"id":17832,"name":"saveSender","nameLocations":["26480:10:64"],"nodeType":"IdentifierPath","referencedDeclaration":19249,"src":"26480:10:64"},"nodeType":"ModifierInvocation","src":"26480:18:64"}],"name":"queryAddLiquiditySingleTokenExactOut","nameLocation":"26292:36:64","nodeType":"FunctionDefinition","parameters":{"id":17831,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17821,"mutability":"mutable","name":"pool","nameLocation":"26346:4:64","nodeType":"VariableDeclaration","scope":17894,"src":"26338:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17820,"name":"address","nodeType":"ElementaryTypeName","src":"26338:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17824,"mutability":"mutable","name":"tokenIn","nameLocation":"26367:7:64","nodeType":"VariableDeclaration","scope":17894,"src":"26360:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":17823,"nodeType":"UserDefinedTypeName","pathNode":{"id":17822,"name":"IERC20","nameLocations":["26360:6:64"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"26360:6:64"},"referencedDeclaration":40109,"src":"26360:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":17826,"mutability":"mutable","name":"exactBptAmountOut","nameLocation":"26392:17:64","nodeType":"VariableDeclaration","scope":17894,"src":"26384:25:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17825,"name":"uint256","nodeType":"ElementaryTypeName","src":"26384:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17828,"mutability":"mutable","name":"sender","nameLocation":"26427:6:64","nodeType":"VariableDeclaration","scope":17894,"src":"26419:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17827,"name":"address","nodeType":"ElementaryTypeName","src":"26419:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17830,"mutability":"mutable","name":"userData","nameLocation":"26456:8:64","nodeType":"VariableDeclaration","scope":17894,"src":"26443:21:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":17829,"name":"bytes","nodeType":"ElementaryTypeName","src":"26443:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"26328:142:64"},"returnParameters":{"id":17837,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17836,"mutability":"mutable","name":"amountIn","nameLocation":"26516:8:64","nodeType":"VariableDeclaration","scope":17894,"src":"26508:16:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17835,"name":"uint256","nodeType":"ElementaryTypeName","src":"26508:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26507:18:64"},"scope":18510,"src":"26283:1300:64","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2794],"body":{"id":17952,"nodeType":"Block","src":"27917:884:64","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":17925,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"28048:6:64","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":17926,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"28055:21:64","memberName":"queryAddLiquidityHook","nodeType":"MemberAccess","referencedDeclaration":17993,"src":"28048:28:64","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_AddLiquidityHookParams_$2947_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"function Router.queryAddLiquidityHook(struct IRouterCommon.AddLiquidityHookParams calldata) returns (uint256[] memory,uint256,bytes memory)"}},{"arguments":[{"arguments":[{"id":17930,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"28352:4:64","typeDescriptions":{"typeIdentifier":"t_contract$_Router_$18510","typeString":"contract Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Router_$18510","typeString":"contract Router"}],"id":17929,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28344:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":17928,"name":"address","nodeType":"ElementaryTypeName","src":"28344:7:64","typeDescriptions":{}}},"id":17931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28344:13:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17932,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17897,"src":"28393:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":17933,"name":"maxAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17900,"src":"28441:12:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":17934,"name":"minBptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17902,"src":"28500:15:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17935,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4807,"src":"28551:16:64","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_AddLiquidityKind_$4807_$","typeString":"type(enum AddLiquidityKind)"}},"id":17936,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"28568:6:64","memberName":"CUSTOM","nodeType":"MemberAccess","referencedDeclaration":4806,"src":"28551:23:64","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},{"hexValue":"66616c7365","id":17937,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"28615:5:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":17938,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17906,"src":"28660:8:64","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":17927,"name":"AddLiquidityHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2947,"src":"28102:22:64","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_AddLiquidityHookParams_$2947_storage_ptr_$","typeString":"type(struct IRouterCommon.AddLiquidityHookParams storage pointer)"}},"id":17939,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["28336:6:64","28387:4:64","28427:12:64","28483:15:64","28545:4:64","28604:9:64","28650:8:64"],"names":["sender","pool","maxAmountsIn","minBptAmountOut","kind","wethIsEth","userData"],"nodeType":"FunctionCall","src":"28102:593:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_memory_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_AddLiquidityHookParams_$2947_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"function Router.queryAddLiquidityHook(struct IRouterCommon.AddLiquidityHookParams calldata) returns (uint256[] memory,uint256,bytes memory)"},{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_memory_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams memory"}],"expression":{"id":17923,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"28008:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":17924,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"28012:10:64","memberName":"encodeCall","nodeType":"MemberAccess","src":"28008:14:64","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":17940,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28008:709:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":17921,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"27974:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":17922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27981:5:64","memberName":"quote","nodeType":"MemberAccess","referencedDeclaration":4392,"src":"27974:12:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":17941,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27974:761:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"baseExpression":{"id":17943,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28754:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":17942,"name":"uint256","nodeType":"ElementaryTypeName","src":"28754:7:64","typeDescriptions":{}}},"id":17944,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"28754:9:64","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}},{"id":17946,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28765:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":17945,"name":"uint256","nodeType":"ElementaryTypeName","src":"28765:7:64","typeDescriptions":{}}},{"id":17948,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28774:5:64","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":17947,"name":"bytes","nodeType":"ElementaryTypeName","src":"28774:5:64","typeDescriptions":{}}}],"id":17949,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"28753:27:64","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256[] memory),type(uint256),type(bytes storage pointer))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_uint256_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256[] memory),type(uint256),type(bytes storage pointer))"}],"expression":{"id":17919,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"27946:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":17920,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"27950:6:64","memberName":"decode","nodeType":"MemberAccess","src":"27946:10:64","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":17950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27946:848:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256,bytes memory)"}},"functionReturnParameters":17918,"id":17951,"nodeType":"Return","src":"27927:867:64"}]},"documentation":{"id":17895,"nodeType":"StructuredDocumentation","src":"27589:23:64","text":"@inheritdoc IRouter"},"functionSelector":"452db952","id":17953,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":17909,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17904,"src":"27825:6:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":17910,"kind":"modifierInvocation","modifierName":{"id":17908,"name":"saveSender","nameLocations":["27814:10:64"],"nodeType":"IdentifierPath","referencedDeclaration":19249,"src":"27814:10:64"},"nodeType":"ModifierInvocation","src":"27814:18:64"}],"name":"queryAddLiquidityCustom","nameLocation":"27626:23:64","nodeType":"FunctionDefinition","parameters":{"id":17907,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17897,"mutability":"mutable","name":"pool","nameLocation":"27667:4:64","nodeType":"VariableDeclaration","scope":17953,"src":"27659:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17896,"name":"address","nodeType":"ElementaryTypeName","src":"27659:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17900,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"27698:12:64","nodeType":"VariableDeclaration","scope":17953,"src":"27681:29:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17898,"name":"uint256","nodeType":"ElementaryTypeName","src":"27681:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17899,"nodeType":"ArrayTypeName","src":"27681:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":17902,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"27728:15:64","nodeType":"VariableDeclaration","scope":17953,"src":"27720:23:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17901,"name":"uint256","nodeType":"ElementaryTypeName","src":"27720:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17904,"mutability":"mutable","name":"sender","nameLocation":"27761:6:64","nodeType":"VariableDeclaration","scope":17953,"src":"27753:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17903,"name":"address","nodeType":"ElementaryTypeName","src":"27753:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17906,"mutability":"mutable","name":"userData","nameLocation":"27790:8:64","nodeType":"VariableDeclaration","scope":17953,"src":"27777:21:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":17905,"name":"bytes","nodeType":"ElementaryTypeName","src":"27777:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"27649:155:64"},"returnParameters":{"id":17918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17913,"mutability":"mutable","name":"amountsIn","nameLocation":"27859:9:64","nodeType":"VariableDeclaration","scope":17953,"src":"27842:26:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17911,"name":"uint256","nodeType":"ElementaryTypeName","src":"27842:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17912,"nodeType":"ArrayTypeName","src":"27842:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":17915,"mutability":"mutable","name":"bptAmountOut","nameLocation":"27878:12:64","nodeType":"VariableDeclaration","scope":17953,"src":"27870:20:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17914,"name":"uint256","nodeType":"ElementaryTypeName","src":"27870:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17917,"mutability":"mutable","name":"returnData","nameLocation":"27905:10:64","nodeType":"VariableDeclaration","scope":17953,"src":"27892:23:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":17916,"name":"bytes","nodeType":"ElementaryTypeName","src":"27892:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"27841:75:64"},"scope":18510,"src":"27617:1184:64","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":17992,"nodeType":"Block","src":"29406:390:64","statements":[{"expression":{"id":17990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":17969,"name":"amountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17963,"src":"29417:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":17970,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17965,"src":"29428:12:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":17971,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17967,"src":"29442:10:64","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":17972,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"29416:37:64","typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256,bytes memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"expression":{"id":17976,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17957,"src":"29532:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_calldata_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams calldata"}},"id":17977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29539:4:64","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2934,"src":"29532:11:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17978,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17957,"src":"29565:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_calldata_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams calldata"}},"id":17979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29572:6:64","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":2932,"src":"29565:13:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":17980,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17957,"src":"29610:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_calldata_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams calldata"}},"id":17981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29617:12:64","memberName":"maxAmountsIn","nodeType":"MemberAccess","referencedDeclaration":2937,"src":"29610:19:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},{"expression":{"id":17982,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17957,"src":"29664:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_calldata_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams calldata"}},"id":17983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29671:15:64","memberName":"minBptAmountOut","nodeType":"MemberAccess","referencedDeclaration":2939,"src":"29664:22:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":17984,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17957,"src":"29710:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_calldata_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams calldata"}},"id":17985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29717:4:64","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2942,"src":"29710:11:64","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},{"expression":{"id":17986,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17957,"src":"29749:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_calldata_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams calldata"}},"id":17987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29756:8:64","memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":2946,"src":"29749:15:64","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":17975,"name":"AddLiquidityParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4823,"src":"29489:18:64","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_AddLiquidityParams_$4823_storage_ptr_$","typeString":"type(struct AddLiquidityParams storage pointer)"}},"id":17988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["29526:4:64","29561:2:64","29596:12:64","29647:15:64","29704:4:64","29739:8:64"],"names":["pool","to","maxAmountsIn","minBptAmountOut","kind","userData"],"nodeType":"FunctionCall","src":"29489:290:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}],"expression":{"id":17973,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"29456:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":17974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29463:12:64","memberName":"addLiquidity","nodeType":"MemberAccess","referencedDeclaration":4489,"src":"29456:19:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_AddLiquidityParams_$4823_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"function (struct AddLiquidityParams memory) external returns (uint256[] memory,uint256,bytes memory)"}},"id":17989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29456:333:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256,bytes memory)"}},"src":"29416:373:64","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":17991,"nodeType":"ExpressionStatement","src":"29416:373:64"}]},"documentation":{"id":17954,"nodeType":"StructuredDocumentation","src":"28807:406:64","text":" @notice Hook for add liquidity queries.\n @dev Can only be called by the Vault.\n @param params Add liquidity parameters (see IRouter for struct definition)\n @return amountsIn Actual token amounts in required as inputs\n @return bptAmountOut Expected pool tokens to be minted\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"efd85f14","id":17993,"implemented":true,"kind":"function","modifiers":[{"id":17960,"kind":"modifierInvocation","modifierName":{"id":17959,"name":"onlyVault","nameLocations":["29312:9:64"],"nodeType":"IdentifierPath","referencedDeclaration":28128,"src":"29312:9:64"},"nodeType":"ModifierInvocation","src":"29312:9:64"}],"name":"queryAddLiquidityHook","nameLocation":"29227:21:64","nodeType":"FunctionDefinition","parameters":{"id":17958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17957,"mutability":"mutable","name":"params","nameLocation":"29290:6:64","nodeType":"VariableDeclaration","scope":17993,"src":"29258:38:64","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_calldata_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams"},"typeName":{"id":17956,"nodeType":"UserDefinedTypeName","pathNode":{"id":17955,"name":"AddLiquidityHookParams","nameLocations":["29258:22:64"],"nodeType":"IdentifierPath","referencedDeclaration":2947,"src":"29258:22:64"},"referencedDeclaration":2947,"src":"29258:22:64","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_storage_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams"}},"visibility":"internal"}],"src":"29248:54:64"},"returnParameters":{"id":17968,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17963,"mutability":"mutable","name":"amountsIn","nameLocation":"29348:9:64","nodeType":"VariableDeclaration","scope":17993,"src":"29331:26:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":17961,"name":"uint256","nodeType":"ElementaryTypeName","src":"29331:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":17962,"nodeType":"ArrayTypeName","src":"29331:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":17965,"mutability":"mutable","name":"bptAmountOut","nameLocation":"29367:12:64","nodeType":"VariableDeclaration","scope":17993,"src":"29359:20:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17964,"name":"uint256","nodeType":"ElementaryTypeName","src":"29359:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":17967,"mutability":"mutable","name":"returnData","nameLocation":"29394:10:64","nodeType":"VariableDeclaration","scope":17993,"src":"29381:23:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":17966,"name":"bytes","nodeType":"ElementaryTypeName","src":"29381:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"29330:75:64"},"scope":18510,"src":"29218:578:64","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2809],"body":{"id":18062,"nodeType":"Block","src":"30055:922:64","statements":[{"assignments":[18015],"declarations":[{"constant":false,"id":18015,"mutability":"mutable","name":"minAmountsOut","nameLocation":"30082:13:64","nodeType":"VariableDeclaration","scope":18062,"src":"30065:30:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":18013,"name":"uint256","nodeType":"ElementaryTypeName","src":"30065:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18014,"nodeType":"ArrayTypeName","src":"30065:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":18025,"initialValue":{"arguments":[{"expression":{"arguments":[{"id":18021,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17996,"src":"30133:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":18019,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"30112:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":18020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30119:13:64","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":4145,"src":"30112:20:64","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":18022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30112:26:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":18023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30139:6:64","memberName":"length","nodeType":"MemberAccess","src":"30112:33:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18018,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"30098:13:64","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":18016,"name":"uint256","nodeType":"ElementaryTypeName","src":"30102:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18017,"nodeType":"ArrayTypeName","src":"30102:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":18024,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30098:48:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"30065:81:64"},{"expression":{"id":18060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[null,{"id":18026,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18009,"src":"30159:10:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},null],"id":18027,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"30156:16:64","typeDescriptions":{"typeIdentifier":"t_tuple$__$_t_array$_t_uint256_$dyn_memory_ptr_$__$","typeString":"tuple(,uint256[] memory,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":18034,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"30265:6:64","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":18035,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"30272:24:64","memberName":"queryRemoveLiquidityHook","nodeType":"MemberAccess","referencedDeclaration":18338,"src":"30265:31:64","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function Router.queryRemoveLiquidityHook(struct IRouterCommon.RemoveLiquidityHookParams calldata) returns (uint256,uint256[] memory,bytes memory)"}},{"arguments":[{"arguments":[{"id":18039,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"30561:4:64","typeDescriptions":{"typeIdentifier":"t_contract$_Router_$18510","typeString":"contract Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Router_$18510","typeString":"contract Router"}],"id":18038,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30553:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18037,"name":"address","nodeType":"ElementaryTypeName","src":"30553:7:64","typeDescriptions":{}}},"id":18040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30553:13:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18041,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17996,"src":"30598:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18042,"name":"minAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18015,"src":"30643:13:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":18043,"name":"exactBptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17998,"src":"30698:16:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18044,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4828,"src":"30746:19:64","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RemoveLiquidityKind_$4828_$","typeString":"type(enum RemoveLiquidityKind)"}},"id":18045,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"30766:12:64","memberName":"PROPORTIONAL","nodeType":"MemberAccess","referencedDeclaration":4824,"src":"30746:32:64","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},{"hexValue":"66616c7365","id":18046,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"30815:5:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":18047,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18002,"src":"30856:8:64","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":18036,"name":"RemoveLiquidityHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2965,"src":"30318:25:64","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_RemoveLiquidityHookParams_$2965_storage_ptr_$","typeString":"type(struct IRouterCommon.RemoveLiquidityHookParams storage pointer)"}},"id":18048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["30545:6:64","30592:4:64","30628:13:64","30682:14:64","30740:4:64","30804:9:64","30846:8:64"],"names":["sender","pool","minAmountsOut","maxBptAmountIn","kind","wethIsEth","userData"],"nodeType":"FunctionCall","src":"30318:569:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_memory_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function Router.queryRemoveLiquidityHook(struct IRouterCommon.RemoveLiquidityHookParams calldata) returns (uint256,uint256[] memory,bytes memory)"},{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_memory_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams memory"}],"expression":{"id":18032,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"30229:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":18033,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"30233:10:64","memberName":"encodeCall","nodeType":"MemberAccess","src":"30229:14:64","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":18049,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30229:676:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18030,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"30199:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":18031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30206:5:64","memberName":"quote","nodeType":"MemberAccess","referencedDeclaration":4392,"src":"30199:12:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":18050,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30199:720:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":18052,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30934:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":18051,"name":"uint256","nodeType":"ElementaryTypeName","src":"30934:7:64","typeDescriptions":{}}},{"baseExpression":{"id":18054,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30943:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":18053,"name":"uint256","nodeType":"ElementaryTypeName","src":"30943:7:64","typeDescriptions":{}}},"id":18055,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"30943:9:64","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}},{"id":18057,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30954:5:64","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":18056,"name":"bytes","nodeType":"ElementaryTypeName","src":"30954:5:64","typeDescriptions":{}}}],"id":18058,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"30933:27:64","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256),type(uint256[] memory),type(bytes storage pointer))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256),type(uint256[] memory),type(bytes storage pointer))"}],"expression":{"id":18028,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"30175:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":18029,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"30179:6:64","memberName":"decode","nodeType":"MemberAccess","src":"30175:10:64","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":18059,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30175:795:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory,bytes memory)"}},"src":"30156:814:64","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18061,"nodeType":"ExpressionStatement","src":"30156:814:64"}]},"documentation":{"id":17994,"nodeType":"StructuredDocumentation","src":"29802:23:64","text":"@inheritdoc IRouter"},"functionSelector":"0f710888","id":18063,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":18005,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18000,"src":"30009:6:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":18006,"kind":"modifierInvocation","modifierName":{"id":18004,"name":"saveSender","nameLocations":["29998:10:64"],"nodeType":"IdentifierPath","referencedDeclaration":19249,"src":"29998:10:64"},"nodeType":"ModifierInvocation","src":"29998:18:64"}],"name":"queryRemoveLiquidityProportional","nameLocation":"29839:32:64","nodeType":"FunctionDefinition","parameters":{"id":18003,"nodeType":"ParameterList","parameters":[{"constant":false,"id":17996,"mutability":"mutable","name":"pool","nameLocation":"29889:4:64","nodeType":"VariableDeclaration","scope":18063,"src":"29881:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17995,"name":"address","nodeType":"ElementaryTypeName","src":"29881:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":17998,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"29911:16:64","nodeType":"VariableDeclaration","scope":18063,"src":"29903:24:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":17997,"name":"uint256","nodeType":"ElementaryTypeName","src":"29903:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18000,"mutability":"mutable","name":"sender","nameLocation":"29945:6:64","nodeType":"VariableDeclaration","scope":18063,"src":"29937:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":17999,"name":"address","nodeType":"ElementaryTypeName","src":"29937:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18002,"mutability":"mutable","name":"userData","nameLocation":"29974:8:64","nodeType":"VariableDeclaration","scope":18063,"src":"29961:21:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":18001,"name":"bytes","nodeType":"ElementaryTypeName","src":"29961:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"29871:117:64"},"returnParameters":{"id":18010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18009,"mutability":"mutable","name":"amountsOut","nameLocation":"30043:10:64","nodeType":"VariableDeclaration","scope":18063,"src":"30026:27:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":18007,"name":"uint256","nodeType":"ElementaryTypeName","src":"30026:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18008,"nodeType":"ArrayTypeName","src":"30026:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"30025:29:64"},"scope":18510,"src":"29830:1147:64","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2826],"body":{"id":18138,"nodeType":"Block","src":"31257:1114:64","statements":[{"assignments":[18087,18089],"declarations":[{"constant":false,"id":18087,"mutability":"mutable","name":"minAmountsOut","nameLocation":"31384:13:64","nodeType":"VariableDeclaration","scope":18138,"src":"31367:30:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":18085,"name":"uint256","nodeType":"ElementaryTypeName","src":"31367:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18086,"nodeType":"ArrayTypeName","src":"31367:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":18089,"mutability":"mutable","name":"tokenIndex","nameLocation":"31407:10:64","nodeType":"VariableDeclaration","scope":18138,"src":"31399:18:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18088,"name":"uint256","nodeType":"ElementaryTypeName","src":"31399:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18095,"initialValue":{"arguments":[{"id":18091,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18066,"src":"31455:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18092,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18071,"src":"31461:8:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"hexValue":"31","id":18093,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31471:1:64","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"id":18090,"name":"_getSingleInputArrayAndTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19026,"src":"31421:33:64","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_contract$_IERC20_$40109_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address,contract IERC20,uint256) view returns (uint256[] memory,uint256)"}},"id":18094,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31421:52:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(uint256[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"31366:107:64"},{"assignments":[null,18100,null],"declarations":[null,{"constant":false,"id":18100,"mutability":"mutable","name":"amountsOut","nameLocation":"31504:10:64","nodeType":"VariableDeclaration","scope":18138,"src":"31487:27:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":18098,"name":"uint256","nodeType":"ElementaryTypeName","src":"31487:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18099,"nodeType":"ArrayTypeName","src":"31487:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},null],"id":18133,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":18107,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"31610:6:64","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":18108,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"31617:24:64","memberName":"queryRemoveLiquidityHook","nodeType":"MemberAccess","referencedDeclaration":18338,"src":"31610:31:64","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function Router.queryRemoveLiquidityHook(struct IRouterCommon.RemoveLiquidityHookParams calldata) returns (uint256,uint256[] memory,bytes memory)"}},{"arguments":[{"arguments":[{"id":18112,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"31906:4:64","typeDescriptions":{"typeIdentifier":"t_contract$_Router_$18510","typeString":"contract Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Router_$18510","typeString":"contract Router"}],"id":18111,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31898:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18110,"name":"address","nodeType":"ElementaryTypeName","src":"31898:7:64","typeDescriptions":{}}},"id":18113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31898:13:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18114,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18066,"src":"31943:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18115,"name":"minAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18087,"src":"31988:13:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":18116,"name":"exactBptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18068,"src":"32043:16:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18117,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4828,"src":"32091:19:64","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RemoveLiquidityKind_$4828_$","typeString":"type(enum RemoveLiquidityKind)"}},"id":18118,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"32111:21:64","memberName":"SINGLE_TOKEN_EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":4825,"src":"32091:41:64","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},{"hexValue":"66616c7365","id":18119,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"32169:5:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":18120,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18075,"src":"32210:8:64","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":18109,"name":"RemoveLiquidityHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2965,"src":"31663:25:64","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_RemoveLiquidityHookParams_$2965_storage_ptr_$","typeString":"type(struct IRouterCommon.RemoveLiquidityHookParams storage pointer)"}},"id":18121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["31890:6:64","31937:4:64","31973:13:64","32027:14:64","32085:4:64","32158:9:64","32200:8:64"],"names":["sender","pool","minAmountsOut","maxBptAmountIn","kind","wethIsEth","userData"],"nodeType":"FunctionCall","src":"31663:578:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_memory_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function Router.queryRemoveLiquidityHook(struct IRouterCommon.RemoveLiquidityHookParams calldata) returns (uint256,uint256[] memory,bytes memory)"},{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_memory_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams memory"}],"expression":{"id":18105,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"31574:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":18106,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"31578:10:64","memberName":"encodeCall","nodeType":"MemberAccess","src":"31574:14:64","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":18122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31574:685:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18103,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"31544:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":18104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31551:5:64","memberName":"quote","nodeType":"MemberAccess","referencedDeclaration":4392,"src":"31544:12:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":18123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31544:729:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":18125,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32288:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":18124,"name":"uint256","nodeType":"ElementaryTypeName","src":"32288:7:64","typeDescriptions":{}}},{"baseExpression":{"id":18127,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32297:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":18126,"name":"uint256","nodeType":"ElementaryTypeName","src":"32297:7:64","typeDescriptions":{}}},"id":18128,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"32297:9:64","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}},{"id":18130,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32308:5:64","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":18129,"name":"bytes","nodeType":"ElementaryTypeName","src":"32308:5:64","typeDescriptions":{}}}],"id":18131,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"32287:27:64","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256),type(uint256[] memory),type(bytes storage pointer))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256),type(uint256[] memory),type(bytes storage pointer))"}],"expression":{"id":18101,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"31520:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":18102,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"31524:6:64","memberName":"decode","nodeType":"MemberAccess","src":"31520:10:64","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":18132,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31520:804:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"31484:840:64"},{"expression":{"baseExpression":{"id":18134,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18100,"src":"32342:10:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":18136,"indexExpression":{"id":18135,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18089,"src":"32353:10:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"32342:22:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":18082,"id":18137,"nodeType":"Return","src":"32335:29:64"}]},"documentation":{"id":18064,"nodeType":"StructuredDocumentation","src":"30983:23:64","text":"@inheritdoc IRouter"},"functionSelector":"23b39241","id":18139,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":18078,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18073,"src":"31221:6:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":18079,"kind":"modifierInvocation","modifierName":{"id":18077,"name":"saveSender","nameLocations":["31210:10:64"],"nodeType":"IdentifierPath","referencedDeclaration":19249,"src":"31210:10:64"},"nodeType":"ModifierInvocation","src":"31210:18:64"}],"name":"queryRemoveLiquiditySingleTokenExactIn","nameLocation":"31020:38:64","nodeType":"FunctionDefinition","parameters":{"id":18076,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18066,"mutability":"mutable","name":"pool","nameLocation":"31076:4:64","nodeType":"VariableDeclaration","scope":18139,"src":"31068:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18065,"name":"address","nodeType":"ElementaryTypeName","src":"31068:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18068,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"31098:16:64","nodeType":"VariableDeclaration","scope":18139,"src":"31090:24:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18067,"name":"uint256","nodeType":"ElementaryTypeName","src":"31090:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18071,"mutability":"mutable","name":"tokenOut","nameLocation":"31131:8:64","nodeType":"VariableDeclaration","scope":18139,"src":"31124:15:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":18070,"nodeType":"UserDefinedTypeName","pathNode":{"id":18069,"name":"IERC20","nameLocations":["31124:6:64"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"31124:6:64"},"referencedDeclaration":40109,"src":"31124:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18073,"mutability":"mutable","name":"sender","nameLocation":"31157:6:64","nodeType":"VariableDeclaration","scope":18139,"src":"31149:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18072,"name":"address","nodeType":"ElementaryTypeName","src":"31149:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18075,"mutability":"mutable","name":"userData","nameLocation":"31186:8:64","nodeType":"VariableDeclaration","scope":18139,"src":"31173:21:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":18074,"name":"bytes","nodeType":"ElementaryTypeName","src":"31173:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"31058:142:64"},"returnParameters":{"id":18082,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18081,"mutability":"mutable","name":"amountOut","nameLocation":"31246:9:64","nodeType":"VariableDeclaration","scope":18139,"src":"31238:17:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18080,"name":"uint256","nodeType":"ElementaryTypeName","src":"31238:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31237:19:64"},"scope":18510,"src":"31011:1360:64","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2843],"body":{"id":18208,"nodeType":"Block","src":"32652:979:64","statements":[{"assignments":[18163,null],"declarations":[{"constant":false,"id":18163,"mutability":"mutable","name":"minAmountsOut","nameLocation":"32680:13:64","nodeType":"VariableDeclaration","scope":18208,"src":"32663:30:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":18161,"name":"uint256","nodeType":"ElementaryTypeName","src":"32663:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18162,"nodeType":"ArrayTypeName","src":"32663:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},null],"id":18169,"initialValue":{"arguments":[{"id":18165,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18142,"src":"32733:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18166,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18145,"src":"32739:8:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":18167,"name":"exactAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18147,"src":"32749:14:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18164,"name":"_getSingleInputArrayAndTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19026,"src":"32699:33:64","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_contract$_IERC20_$40109_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address,contract IERC20,uint256) view returns (uint256[] memory,uint256)"}},"id":18168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32699:65:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(uint256[] memory,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"32662:102:64"},{"expression":{"id":18204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":18170,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18157,"src":"32776:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},null,null],"id":18171,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"32775:17:64","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$__$__$","typeString":"tuple(uint256,,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":18178,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"32885:6:64","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":18179,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"32892:24:64","memberName":"queryRemoveLiquidityHook","nodeType":"MemberAccess","referencedDeclaration":18338,"src":"32885:31:64","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function Router.queryRemoveLiquidityHook(struct IRouterCommon.RemoveLiquidityHookParams calldata) returns (uint256,uint256[] memory,bytes memory)"}},{"arguments":[{"arguments":[{"id":18183,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"33181:4:64","typeDescriptions":{"typeIdentifier":"t_contract$_Router_$18510","typeString":"contract Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Router_$18510","typeString":"contract Router"}],"id":18182,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33173:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18181,"name":"address","nodeType":"ElementaryTypeName","src":"33173:7:64","typeDescriptions":{}}},"id":18184,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33173:13:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18185,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18142,"src":"33218:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18186,"name":"minAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18163,"src":"33263:13:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":18187,"name":"_MAX_AMOUNT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19232,"src":"33318:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18188,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4828,"src":"33361:19:64","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RemoveLiquidityKind_$4828_$","typeString":"type(enum RemoveLiquidityKind)"}},"id":18189,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"33381:22:64","memberName":"SINGLE_TOKEN_EXACT_OUT","nodeType":"MemberAccess","referencedDeclaration":4826,"src":"33361:42:64","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},{"hexValue":"66616c7365","id":18190,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"33440:5:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":18191,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18151,"src":"33481:8:64","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":18180,"name":"RemoveLiquidityHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2965,"src":"32938:25:64","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_RemoveLiquidityHookParams_$2965_storage_ptr_$","typeString":"type(struct IRouterCommon.RemoveLiquidityHookParams storage pointer)"}},"id":18192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["33165:6:64","33212:4:64","33248:13:64","33302:14:64","33355:4:64","33429:9:64","33471:8:64"],"names":["sender","pool","minAmountsOut","maxBptAmountIn","kind","wethIsEth","userData"],"nodeType":"FunctionCall","src":"32938:574:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_memory_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function Router.queryRemoveLiquidityHook(struct IRouterCommon.RemoveLiquidityHookParams calldata) returns (uint256,uint256[] memory,bytes memory)"},{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_memory_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams memory"}],"expression":{"id":18176,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"32849:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":18177,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"32853:10:64","memberName":"encodeCall","nodeType":"MemberAccess","src":"32849:14:64","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":18193,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32849:681:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18174,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"32819:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":18175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32826:5:64","memberName":"quote","nodeType":"MemberAccess","referencedDeclaration":4392,"src":"32819:12:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":18194,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32819:725:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":18196,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33559:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":18195,"name":"uint256","nodeType":"ElementaryTypeName","src":"33559:7:64","typeDescriptions":{}}},{"baseExpression":{"id":18198,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33568:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":18197,"name":"uint256","nodeType":"ElementaryTypeName","src":"33568:7:64","typeDescriptions":{}}},"id":18199,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"33568:9:64","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}},{"id":18201,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33579:5:64","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":18200,"name":"bytes","nodeType":"ElementaryTypeName","src":"33579:5:64","typeDescriptions":{}}}],"id":18202,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"33558:27:64","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256),type(uint256[] memory),type(bytes storage pointer))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256),type(uint256[] memory),type(bytes storage pointer))"}],"expression":{"id":18172,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"32795:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":18173,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"32799:6:64","memberName":"decode","nodeType":"MemberAccess","src":"32795:10:64","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":18203,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32795:800:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory,bytes memory)"}},"src":"32775:820:64","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18205,"nodeType":"ExpressionStatement","src":"32775:820:64"},{"expression":{"id":18206,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18157,"src":"33613:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":18158,"id":18207,"nodeType":"Return","src":"33606:18:64"}]},"documentation":{"id":18140,"nodeType":"StructuredDocumentation","src":"32377:23:64","text":"@inheritdoc IRouter"},"functionSelector":"53d0bb98","id":18209,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":18154,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18149,"src":"32614:6:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":18155,"kind":"modifierInvocation","modifierName":{"id":18153,"name":"saveSender","nameLocations":["32603:10:64"],"nodeType":"IdentifierPath","referencedDeclaration":19249,"src":"32603:10:64"},"nodeType":"ModifierInvocation","src":"32603:18:64"}],"name":"queryRemoveLiquiditySingleTokenExactOut","nameLocation":"32414:39:64","nodeType":"FunctionDefinition","parameters":{"id":18152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18142,"mutability":"mutable","name":"pool","nameLocation":"32471:4:64","nodeType":"VariableDeclaration","scope":18209,"src":"32463:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18141,"name":"address","nodeType":"ElementaryTypeName","src":"32463:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18145,"mutability":"mutable","name":"tokenOut","nameLocation":"32492:8:64","nodeType":"VariableDeclaration","scope":18209,"src":"32485:15:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":18144,"nodeType":"UserDefinedTypeName","pathNode":{"id":18143,"name":"IERC20","nameLocations":["32485:6:64"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"32485:6:64"},"referencedDeclaration":40109,"src":"32485:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18147,"mutability":"mutable","name":"exactAmountOut","nameLocation":"32518:14:64","nodeType":"VariableDeclaration","scope":18209,"src":"32510:22:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18146,"name":"uint256","nodeType":"ElementaryTypeName","src":"32510:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18149,"mutability":"mutable","name":"sender","nameLocation":"32550:6:64","nodeType":"VariableDeclaration","scope":18209,"src":"32542:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18148,"name":"address","nodeType":"ElementaryTypeName","src":"32542:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18151,"mutability":"mutable","name":"userData","nameLocation":"32579:8:64","nodeType":"VariableDeclaration","scope":18209,"src":"32566:21:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":18150,"name":"bytes","nodeType":"ElementaryTypeName","src":"32566:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"32453:140:64"},"returnParameters":{"id":18158,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18157,"mutability":"mutable","name":"bptAmountIn","nameLocation":"32639:11:64","nodeType":"VariableDeclaration","scope":18209,"src":"32631:19:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18156,"name":"uint256","nodeType":"ElementaryTypeName","src":"32631:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"32630:21:64"},"scope":18510,"src":"32405:1226:64","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2865],"body":{"id":18267,"nodeType":"Block","src":"33968:895:64","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":18240,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"34099:6:64","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":18241,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"34106:24:64","memberName":"queryRemoveLiquidityHook","nodeType":"MemberAccess","referencedDeclaration":18338,"src":"34099:31:64","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function Router.queryRemoveLiquidityHook(struct IRouterCommon.RemoveLiquidityHookParams calldata) returns (uint256,uint256[] memory,bytes memory)"}},{"arguments":[{"arguments":[{"id":18245,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"34411:4:64","typeDescriptions":{"typeIdentifier":"t_contract$_Router_$18510","typeString":"contract Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Router_$18510","typeString":"contract Router"}],"id":18244,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34403:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18243,"name":"address","nodeType":"ElementaryTypeName","src":"34403:7:64","typeDescriptions":{}}},"id":18246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34403:13:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18247,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18212,"src":"34452:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18248,"name":"minAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18217,"src":"34501:13:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":18249,"name":"maxBptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18214,"src":"34560:14:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18250,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4828,"src":"34610:19:64","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RemoveLiquidityKind_$4828_$","typeString":"type(enum RemoveLiquidityKind)"}},"id":18251,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"34630:6:64","memberName":"CUSTOM","nodeType":"MemberAccess","referencedDeclaration":4827,"src":"34610:26:64","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},{"hexValue":"66616c7365","id":18252,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"34677:5:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":18253,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18221,"src":"34722:8:64","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":18242,"name":"RemoveLiquidityHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2965,"src":"34156:25:64","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_RemoveLiquidityHookParams_$2965_storage_ptr_$","typeString":"type(struct IRouterCommon.RemoveLiquidityHookParams storage pointer)"}},"id":18254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["34395:6:64","34446:4:64","34486:13:64","34544:14:64","34604:4:64","34666:9:64","34712:8:64"],"names":["sender","pool","minAmountsOut","maxBptAmountIn","kind","wethIsEth","userData"],"nodeType":"FunctionCall","src":"34156:601:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_memory_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function Router.queryRemoveLiquidityHook(struct IRouterCommon.RemoveLiquidityHookParams calldata) returns (uint256,uint256[] memory,bytes memory)"},{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_memory_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams memory"}],"expression":{"id":18238,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"34059:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":18239,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"34063:10:64","memberName":"encodeCall","nodeType":"MemberAccess","src":"34059:14:64","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":18255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34059:720:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18236,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"34025:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":18237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34032:5:64","memberName":"quote","nodeType":"MemberAccess","referencedDeclaration":4392,"src":"34025:12:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":18256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34025:772:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":18258,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34816:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":18257,"name":"uint256","nodeType":"ElementaryTypeName","src":"34816:7:64","typeDescriptions":{}}},{"baseExpression":{"id":18260,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34825:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":18259,"name":"uint256","nodeType":"ElementaryTypeName","src":"34825:7:64","typeDescriptions":{}}},"id":18261,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"34825:9:64","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}},{"id":18263,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34836:5:64","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":18262,"name":"bytes","nodeType":"ElementaryTypeName","src":"34836:5:64","typeDescriptions":{}}}],"id":18264,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"34815:27:64","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256),type(uint256[] memory),type(bytes storage pointer))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_bytes_storage_ptr_$_$","typeString":"tuple(type(uint256),type(uint256[] memory),type(bytes storage pointer))"}],"expression":{"id":18234,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"33997:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":18235,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"34001:6:64","memberName":"decode","nodeType":"MemberAccess","src":"33997:10:64","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":18265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33997:859:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory,bytes memory)"}},"functionReturnParameters":18233,"id":18266,"nodeType":"Return","src":"33978:878:64"}]},"documentation":{"id":18210,"nodeType":"StructuredDocumentation","src":"33637:23:64","text":"@inheritdoc IRouter"},"functionSelector":"c330c7be","id":18268,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":18224,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18219,"src":"33876:6:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":18225,"kind":"modifierInvocation","modifierName":{"id":18223,"name":"saveSender","nameLocations":["33865:10:64"],"nodeType":"IdentifierPath","referencedDeclaration":19249,"src":"33865:10:64"},"nodeType":"ModifierInvocation","src":"33865:18:64"}],"name":"queryRemoveLiquidityCustom","nameLocation":"33674:26:64","nodeType":"FunctionDefinition","parameters":{"id":18222,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18212,"mutability":"mutable","name":"pool","nameLocation":"33718:4:64","nodeType":"VariableDeclaration","scope":18268,"src":"33710:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18211,"name":"address","nodeType":"ElementaryTypeName","src":"33710:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18214,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"33740:14:64","nodeType":"VariableDeclaration","scope":18268,"src":"33732:22:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18213,"name":"uint256","nodeType":"ElementaryTypeName","src":"33732:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18217,"mutability":"mutable","name":"minAmountsOut","nameLocation":"33781:13:64","nodeType":"VariableDeclaration","scope":18268,"src":"33764:30:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":18215,"name":"uint256","nodeType":"ElementaryTypeName","src":"33764:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18216,"nodeType":"ArrayTypeName","src":"33764:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":18219,"mutability":"mutable","name":"sender","nameLocation":"33812:6:64","nodeType":"VariableDeclaration","scope":18268,"src":"33804:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18218,"name":"address","nodeType":"ElementaryTypeName","src":"33804:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18221,"mutability":"mutable","name":"userData","nameLocation":"33841:8:64","nodeType":"VariableDeclaration","scope":18268,"src":"33828:21:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":18220,"name":"bytes","nodeType":"ElementaryTypeName","src":"33828:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"33700:155:64"},"returnParameters":{"id":18233,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18227,"mutability":"mutable","name":"bptAmountIn","nameLocation":"33901:11:64","nodeType":"VariableDeclaration","scope":18268,"src":"33893:19:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18226,"name":"uint256","nodeType":"ElementaryTypeName","src":"33893:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18230,"mutability":"mutable","name":"amountsOut","nameLocation":"33931:10:64","nodeType":"VariableDeclaration","scope":18268,"src":"33914:27:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":18228,"name":"uint256","nodeType":"ElementaryTypeName","src":"33914:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18229,"nodeType":"ArrayTypeName","src":"33914:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":18232,"mutability":"mutable","name":"returnData","nameLocation":"33956:10:64","nodeType":"VariableDeclaration","scope":18268,"src":"33943:23:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":18231,"name":"bytes","nodeType":"ElementaryTypeName","src":"33943:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"33892:75:64"},"scope":18510,"src":"33665:1198:64","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2876],"body":{"id":18302,"nodeType":"Block","src":"35044:255:64","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":18285,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"35150:6:64","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":18286,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"35157:32:64","memberName":"queryRemoveLiquidityRecoveryHook","nodeType":"MemberAccess","referencedDeclaration":18377,"src":"35150:39:64","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function Router.queryRemoveLiquidityRecoveryHook(address,address,uint256) returns (uint256[] memory)"}},{"components":[{"id":18287,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18271,"src":"35192:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":18290,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"35206:4:64","typeDescriptions":{"typeIdentifier":"t_contract$_Router_$18510","typeString":"contract Router"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Router_$18510","typeString":"contract Router"}],"id":18289,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"35198:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18288,"name":"address","nodeType":"ElementaryTypeName","src":"35198:7:64","typeDescriptions":{}}},"id":18291,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35198:13:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18292,"name":"exactBptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18273,"src":"35213:16:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":18293,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"35191:39:64","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function Router.queryRemoveLiquidityRecoveryHook(address,address,uint256) returns (uint256[] memory)"},{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}],"expression":{"id":18283,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"35135:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":18284,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"35139:10:64","memberName":"encodeCall","nodeType":"MemberAccess","src":"35135:14:64","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":18294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35135:96:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18281,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"35101:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":18282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"35108:5:64","memberName":"quote","nodeType":"MemberAccess","referencedDeclaration":4392,"src":"35101:12:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":18295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35101:148:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"baseExpression":{"id":18297,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"35268:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":18296,"name":"uint256","nodeType":"ElementaryTypeName","src":"35268:7:64","typeDescriptions":{}}},"id":18298,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"35268:9:64","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}}],"id":18299,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"35267:11:64","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}],"expression":{"id":18279,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"35073:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":18280,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"35077:6:64","memberName":"decode","nodeType":"MemberAccess","src":"35073:10:64","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":18300,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35073:219:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":18278,"id":18301,"nodeType":"Return","src":"35054:238:64"}]},"documentation":{"id":18269,"nodeType":"StructuredDocumentation","src":"34869:23:64","text":"@inheritdoc IRouter"},"functionSelector":"b037ed36","id":18303,"implemented":true,"kind":"function","modifiers":[],"name":"queryRemoveLiquidityRecovery","nameLocation":"34906:28:64","nodeType":"FunctionDefinition","parameters":{"id":18274,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18271,"mutability":"mutable","name":"pool","nameLocation":"34952:4:64","nodeType":"VariableDeclaration","scope":18303,"src":"34944:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18270,"name":"address","nodeType":"ElementaryTypeName","src":"34944:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18273,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"34974:16:64","nodeType":"VariableDeclaration","scope":18303,"src":"34966:24:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18272,"name":"uint256","nodeType":"ElementaryTypeName","src":"34966:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34934:62:64"},"returnParameters":{"id":18278,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18277,"mutability":"mutable","name":"amountsOut","nameLocation":"35032:10:64","nodeType":"VariableDeclaration","scope":18303,"src":"35015:27:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":18275,"name":"uint256","nodeType":"ElementaryTypeName","src":"35015:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18276,"nodeType":"ArrayTypeName","src":"35015:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"35014:29:64"},"scope":18510,"src":"34897:402:64","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18337,"nodeType":"Block","src":"35947:413:64","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":18322,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18307,"src":"36066:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams calldata"}},"id":18323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"36073:4:64","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":2952,"src":"36066:11:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18324,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18307,"src":"36105:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams calldata"}},"id":18325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"36112:6:64","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":2950,"src":"36105:13:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18326,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18307,"src":"36156:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams calldata"}},"id":18327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"36163:14:64","memberName":"maxBptAmountIn","nodeType":"MemberAccess","referencedDeclaration":2957,"src":"36156:21:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18328,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18307,"src":"36214:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams calldata"}},"id":18329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"36221:13:64","memberName":"minAmountsOut","nodeType":"MemberAccess","referencedDeclaration":2955,"src":"36214:20:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},{"expression":{"id":18330,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18307,"src":"36262:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams calldata"}},"id":18331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"36269:4:64","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":2960,"src":"36262:11:64","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},{"expression":{"id":18332,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18307,"src":"36305:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams calldata"}},"id":18333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"36312:8:64","memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":2964,"src":"36305:15:64","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"},{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":18321,"name":"RemoveLiquidityParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4844,"src":"36016:21:64","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_RemoveLiquidityParams_$4844_storage_ptr_$","typeString":"type(struct RemoveLiquidityParams storage pointer)"}},"id":18334,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["36060:4:64","36099:4:64","36140:14:64","36199:13:64","36256:4:64","36295:8:64"],"names":["pool","from","maxBptAmountIn","minAmountsOut","kind","userData"],"nodeType":"FunctionCall","src":"36016:323:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}],"expression":{"id":18319,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"35976:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":18320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"35983:15:64","memberName":"removeLiquidity","nodeType":"MemberAccess","referencedDeclaration":4503,"src":"35976:22:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_RemoveLiquidityParams_$4844_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function (struct RemoveLiquidityParams memory) external returns (uint256,uint256[] memory,bytes memory)"}},"id":18335,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35976:377:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory,bytes memory)"}},"functionReturnParameters":18318,"id":18336,"nodeType":"Return","src":"35957:396:64"}]},"documentation":{"id":18304,"nodeType":"StructuredDocumentation","src":"35305:443:64","text":" @notice Hook for remove liquidity queries.\n @dev Can only be called by the Vault.\n @param params Remove liquidity parameters (see IRouter for struct definition)\n @return bptAmountIn Pool token amount to be burned for the output tokens\n @return amountsOut Expected token amounts to be transferred to the sender\n @return returnData Arbitrary (optional) data with an encoded response from the pool"},"functionSelector":"b24bd571","id":18338,"implemented":true,"kind":"function","modifiers":[{"id":18310,"kind":"modifierInvocation","modifierName":{"id":18309,"name":"onlyVault","nameLocations":["35853:9:64"],"nodeType":"IdentifierPath","referencedDeclaration":28128,"src":"35853:9:64"},"nodeType":"ModifierInvocation","src":"35853:9:64"}],"name":"queryRemoveLiquidityHook","nameLocation":"35762:24:64","nodeType":"FunctionDefinition","parameters":{"id":18308,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18307,"mutability":"mutable","name":"params","nameLocation":"35831:6:64","nodeType":"VariableDeclaration","scope":18338,"src":"35796:41:64","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_calldata_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams"},"typeName":{"id":18306,"nodeType":"UserDefinedTypeName","pathNode":{"id":18305,"name":"RemoveLiquidityHookParams","nameLocations":["35796:25:64"],"nodeType":"IdentifierPath","referencedDeclaration":2965,"src":"35796:25:64"},"referencedDeclaration":2965,"src":"35796:25:64","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_storage_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams"}},"visibility":"internal"}],"src":"35786:57:64"},"returnParameters":{"id":18318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18312,"mutability":"mutable","name":"bptAmountIn","nameLocation":"35880:11:64","nodeType":"VariableDeclaration","scope":18338,"src":"35872:19:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18311,"name":"uint256","nodeType":"ElementaryTypeName","src":"35872:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18315,"mutability":"mutable","name":"amountsOut","nameLocation":"35910:10:64","nodeType":"VariableDeclaration","scope":18338,"src":"35893:27:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":18313,"name":"uint256","nodeType":"ElementaryTypeName","src":"35893:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18314,"nodeType":"ArrayTypeName","src":"35893:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":18317,"mutability":"mutable","name":"returnData","nameLocation":"35935:10:64","nodeType":"VariableDeclaration","scope":18338,"src":"35922:23:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":18316,"name":"bytes","nodeType":"ElementaryTypeName","src":"35922:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"35871:75:64"},"scope":18510,"src":"35753:607:64","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18376,"nodeType":"Block","src":"36937:192:64","statements":[{"assignments":[18357],"declarations":[{"constant":false,"id":18357,"mutability":"mutable","name":"minAmountsOut","nameLocation":"36964:13:64","nodeType":"VariableDeclaration","scope":18376,"src":"36947:30:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":18355,"name":"uint256","nodeType":"ElementaryTypeName","src":"36947:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18356,"nodeType":"ArrayTypeName","src":"36947:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":18367,"initialValue":{"arguments":[{"expression":{"arguments":[{"id":18363,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18341,"src":"37015:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":18361,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"36994:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":18362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37001:13:64","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":4145,"src":"36994:20:64","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":18364,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36994:26:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":18365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37021:6:64","memberName":"length","nodeType":"MemberAccess","src":"36994:33:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18360,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"36980:13:64","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":18358,"name":"uint256","nodeType":"ElementaryTypeName","src":"36984:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18359,"nodeType":"ArrayTypeName","src":"36984:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":18366,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36980:48:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"36947:81:64"},{"expression":{"arguments":[{"id":18370,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18341,"src":"37076:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18371,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18343,"src":"37082:6:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18372,"name":"exactBptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18345,"src":"37090:16:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18373,"name":"minAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18357,"src":"37108:13:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"expression":{"id":18368,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"37045:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":18369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37052:23:64","memberName":"removeLiquidityRecovery","nodeType":"MemberAccess","referencedDeclaration":4384,"src":"37045:30:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address,address,uint256,uint256[] memory) external returns (uint256[] memory)"}},"id":18374,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37045:77:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":18352,"id":18375,"nodeType":"Return","src":"37038:84:64"}]},"documentation":{"id":18339,"nodeType":"StructuredDocumentation","src":"36366:381:64","text":" @notice Hook for remove liquidity queries.\n @dev Can only be called by the Vault.\n @param pool The liquidity pool\n @param sender Account originating the remove liquidity operation\n @param exactBptAmountIn Pool token amount to be burned for the output tokens\n @return amountsOut Expected token amounts to be transferred to the sender"},"functionSelector":"5f9815ff","id":18377,"implemented":true,"kind":"function","modifiers":[{"id":18348,"kind":"modifierInvocation","modifierName":{"id":18347,"name":"onlyVault","nameLocations":["36889:9:64"],"nodeType":"IdentifierPath","referencedDeclaration":28128,"src":"36889:9:64"},"nodeType":"ModifierInvocation","src":"36889:9:64"}],"name":"queryRemoveLiquidityRecoveryHook","nameLocation":"36761:32:64","nodeType":"FunctionDefinition","parameters":{"id":18346,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18341,"mutability":"mutable","name":"pool","nameLocation":"36811:4:64","nodeType":"VariableDeclaration","scope":18377,"src":"36803:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18340,"name":"address","nodeType":"ElementaryTypeName","src":"36803:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18343,"mutability":"mutable","name":"sender","nameLocation":"36833:6:64","nodeType":"VariableDeclaration","scope":18377,"src":"36825:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18342,"name":"address","nodeType":"ElementaryTypeName","src":"36825:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18345,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"36857:16:64","nodeType":"VariableDeclaration","scope":18377,"src":"36849:24:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18344,"name":"uint256","nodeType":"ElementaryTypeName","src":"36849:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"36793:86:64"},"returnParameters":{"id":18352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18351,"mutability":"mutable","name":"amountsOut","nameLocation":"36925:10:64","nodeType":"VariableDeclaration","scope":18377,"src":"36908:27:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":18349,"name":"uint256","nodeType":"ElementaryTypeName","src":"36908:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18350,"nodeType":"ArrayTypeName","src":"36908:9:64","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"36907:29:64"},"scope":18510,"src":"36752:377:64","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2896],"body":{"id":18429,"nodeType":"Block","src":"37426:792:64","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":18406,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"37557:6:64","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":18407,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"37564:13:64","memberName":"querySwapHook","nodeType":"MemberAccess","referencedDeclaration":18509,"src":"37557:20:64","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr_$returns$_t_uint256_$","typeString":"function Router.querySwapHook(struct IRouter.SwapSingleTokenHookParams calldata) returns (uint256)"}},{"arguments":[{"expression":{"id":18409,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"37667:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37671:6:64","memberName":"sender","nodeType":"MemberAccess","src":"37667:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18411,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"37713:8:64","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4735_$","typeString":"type(enum SwapKind)"}},"id":18412,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"37722:8:64","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"37713:17:64","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},{"id":18413,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18380,"src":"37766:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18414,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18383,"src":"37809:7:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":18415,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18386,"src":"37856:8:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":18416,"name":"exactAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18388,"src":"37907:13:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":18417,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"37957:1:64","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":18418,"name":"_MAX_AMOUNT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19232,"src":"37998:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":18419,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"38050:5:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":18420,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18392,"src":"38095:8:64","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":18408,"name":"SwapSingleTokenHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2677,"src":"37603:25:64","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_SwapSingleTokenHookParams_$2677_storage_ptr_$","typeString":"type(struct IRouter.SwapSingleTokenHookParams storage pointer)"}},"id":18421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["37659:6:64","37707:4:64","37760:4:64","37800:7:64","37846:8:64","37894:11:64","37950:5:64","37988:8:64","38039:9:64","38085:8:64"],"names":["sender","kind","pool","tokenIn","tokenOut","amountGiven","limit","deadline","wethIsEth","userData"],"nodeType":"FunctionCall","src":"37603:527:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_memory_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr_$returns$_t_uint256_$","typeString":"function Router.querySwapHook(struct IRouter.SwapSingleTokenHookParams calldata) returns (uint256)"},{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_memory_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams memory"}],"expression":{"id":18404,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"37517:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":18405,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"37521:10:64","memberName":"encodeCall","nodeType":"MemberAccess","src":"37517:14:64","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":18422,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37517:635:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18402,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"37483:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":18403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37490:5:64","memberName":"quote","nodeType":"MemberAccess","referencedDeclaration":4392,"src":"37483:12:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":18423,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37483:687:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":18425,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"38189:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":18424,"name":"uint256","nodeType":"ElementaryTypeName","src":"38189:7:64","typeDescriptions":{}}}],"id":18426,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"38188:9:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":18400,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"37455:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":18401,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"37459:6:64","memberName":"decode","nodeType":"MemberAccess","src":"37455:10:64","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":18427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37455:756:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":18399,"id":18428,"nodeType":"Return","src":"37436:775:64"}]},"documentation":{"id":18378,"nodeType":"StructuredDocumentation","src":"37135:23:64","text":"@inheritdoc IRouter"},"functionSelector":"3ebc54e5","id":18430,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":18395,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18390,"src":"37383:6:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":18396,"kind":"modifierInvocation","modifierName":{"id":18394,"name":"saveSender","nameLocations":["37372:10:64"],"nodeType":"IdentifierPath","referencedDeclaration":19249,"src":"37372:10:64"},"nodeType":"ModifierInvocation","src":"37372:18:64"}],"name":"querySwapSingleTokenExactIn","nameLocation":"37172:27:64","nodeType":"FunctionDefinition","parameters":{"id":18393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18380,"mutability":"mutable","name":"pool","nameLocation":"37217:4:64","nodeType":"VariableDeclaration","scope":18430,"src":"37209:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18379,"name":"address","nodeType":"ElementaryTypeName","src":"37209:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18383,"mutability":"mutable","name":"tokenIn","nameLocation":"37238:7:64","nodeType":"VariableDeclaration","scope":18430,"src":"37231:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":18382,"nodeType":"UserDefinedTypeName","pathNode":{"id":18381,"name":"IERC20","nameLocations":["37231:6:64"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"37231:6:64"},"referencedDeclaration":40109,"src":"37231:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18386,"mutability":"mutable","name":"tokenOut","nameLocation":"37262:8:64","nodeType":"VariableDeclaration","scope":18430,"src":"37255:15:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":18385,"nodeType":"UserDefinedTypeName","pathNode":{"id":18384,"name":"IERC20","nameLocations":["37255:6:64"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"37255:6:64"},"referencedDeclaration":40109,"src":"37255:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18388,"mutability":"mutable","name":"exactAmountIn","nameLocation":"37288:13:64","nodeType":"VariableDeclaration","scope":18430,"src":"37280:21:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18387,"name":"uint256","nodeType":"ElementaryTypeName","src":"37280:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18390,"mutability":"mutable","name":"sender","nameLocation":"37319:6:64","nodeType":"VariableDeclaration","scope":18430,"src":"37311:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18389,"name":"address","nodeType":"ElementaryTypeName","src":"37311:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18392,"mutability":"mutable","name":"userData","nameLocation":"37348:8:64","nodeType":"VariableDeclaration","scope":18430,"src":"37335:21:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":18391,"name":"bytes","nodeType":"ElementaryTypeName","src":"37335:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"37199:163:64"},"returnParameters":{"id":18399,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18398,"mutability":"mutable","name":"amountCalculated","nameLocation":"37408:16:64","nodeType":"VariableDeclaration","scope":18430,"src":"37400:24:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18397,"name":"uint256","nodeType":"ElementaryTypeName","src":"37400:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"37399:26:64"},"scope":18510,"src":"37163:1055:64","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[2916],"body":{"id":18486,"nodeType":"Block","src":"38517:810:64","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":18459,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"38648:6:64","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":18460,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"38655:13:64","memberName":"querySwapHook","nodeType":"MemberAccess","referencedDeclaration":18509,"src":"38648:20:64","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr_$returns$_t_uint256_$","typeString":"function Router.querySwapHook(struct IRouter.SwapSingleTokenHookParams calldata) returns (uint256)"}},{"arguments":[{"expression":{"id":18462,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"38758:3:64","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"38762:6:64","memberName":"sender","nodeType":"MemberAccess","src":"38758:10:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18464,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"38804:8:64","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4735_$","typeString":"type(enum SwapKind)"}},"id":18465,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"38813:9:64","memberName":"EXACT_OUT","nodeType":"MemberAccess","referencedDeclaration":4734,"src":"38804:18:64","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},{"id":18466,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18433,"src":"38858:4:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18467,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18436,"src":"38901:7:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":18468,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18439,"src":"38948:8:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":18469,"name":"exactAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18441,"src":"38999:14:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":18470,"name":"_MAX_AMOUNT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19232,"src":"39050:11:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"arguments":[{"id":18473,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"39106:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":18472,"name":"uint256","nodeType":"ElementaryTypeName","src":"39106:7:64","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":18471,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"39101:4:64","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":18474,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39101:13:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":18475,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"39115:3:64","memberName":"max","nodeType":"MemberAccess","src":"39101:17:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":18476,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"39159:5:64","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":18477,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18445,"src":"39204:8:64","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":18461,"name":"SwapSingleTokenHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2677,"src":"38694:25:64","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_SwapSingleTokenHookParams_$2677_storage_ptr_$","typeString":"type(struct IRouter.SwapSingleTokenHookParams storage pointer)"}},"id":18478,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["38750:6:64","38798:4:64","38852:4:64","38892:7:64","38938:8:64","38986:11:64","39043:5:64","39091:8:64","39148:9:64","39194:8:64"],"names":["sender","kind","pool","tokenIn","tokenOut","amountGiven","limit","deadline","wethIsEth","userData"],"nodeType":"FunctionCall","src":"38694:545:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_memory_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr_$returns$_t_uint256_$","typeString":"function Router.querySwapHook(struct IRouter.SwapSingleTokenHookParams calldata) returns (uint256)"},{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_memory_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams memory"}],"expression":{"id":18457,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"38608:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":18458,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"38612:10:64","memberName":"encodeCall","nodeType":"MemberAccess","src":"38608:14:64","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":18479,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38608:653:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18455,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"38574:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":18456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"38581:5:64","memberName":"quote","nodeType":"MemberAccess","referencedDeclaration":4392,"src":"38574:12:64","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":18480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38574:705:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":18482,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"39298:7:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":18481,"name":"uint256","nodeType":"ElementaryTypeName","src":"39298:7:64","typeDescriptions":{}}}],"id":18483,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"39297:9:64","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":18453,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"38546:3:64","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":18454,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"38550:6:64","memberName":"decode","nodeType":"MemberAccess","src":"38546:10:64","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":18484,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38546:774:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":18452,"id":18485,"nodeType":"Return","src":"38527:793:64"}]},"documentation":{"id":18431,"nodeType":"StructuredDocumentation","src":"38224:23:64","text":"@inheritdoc IRouter"},"functionSelector":"175d4408","id":18487,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":18448,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18443,"src":"38474:6:64","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":18449,"kind":"modifierInvocation","modifierName":{"id":18447,"name":"saveSender","nameLocations":["38463:10:64"],"nodeType":"IdentifierPath","referencedDeclaration":19249,"src":"38463:10:64"},"nodeType":"ModifierInvocation","src":"38463:18:64"}],"name":"querySwapSingleTokenExactOut","nameLocation":"38261:28:64","nodeType":"FunctionDefinition","parameters":{"id":18446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18433,"mutability":"mutable","name":"pool","nameLocation":"38307:4:64","nodeType":"VariableDeclaration","scope":18487,"src":"38299:12:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18432,"name":"address","nodeType":"ElementaryTypeName","src":"38299:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18436,"mutability":"mutable","name":"tokenIn","nameLocation":"38328:7:64","nodeType":"VariableDeclaration","scope":18487,"src":"38321:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":18435,"nodeType":"UserDefinedTypeName","pathNode":{"id":18434,"name":"IERC20","nameLocations":["38321:6:64"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"38321:6:64"},"referencedDeclaration":40109,"src":"38321:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18439,"mutability":"mutable","name":"tokenOut","nameLocation":"38352:8:64","nodeType":"VariableDeclaration","scope":18487,"src":"38345:15:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":18438,"nodeType":"UserDefinedTypeName","pathNode":{"id":18437,"name":"IERC20","nameLocations":["38345:6:64"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"38345:6:64"},"referencedDeclaration":40109,"src":"38345:6:64","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18441,"mutability":"mutable","name":"exactAmountOut","nameLocation":"38378:14:64","nodeType":"VariableDeclaration","scope":18487,"src":"38370:22:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18440,"name":"uint256","nodeType":"ElementaryTypeName","src":"38370:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":18443,"mutability":"mutable","name":"sender","nameLocation":"38410:6:64","nodeType":"VariableDeclaration","scope":18487,"src":"38402:14:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18442,"name":"address","nodeType":"ElementaryTypeName","src":"38402:7:64","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18445,"mutability":"mutable","name":"userData","nameLocation":"38439:8:64","nodeType":"VariableDeclaration","scope":18487,"src":"38426:21:64","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":18444,"name":"bytes","nodeType":"ElementaryTypeName","src":"38426:5:64","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"38289:164:64"},"returnParameters":{"id":18452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18451,"mutability":"mutable","name":"amountCalculated","nameLocation":"38499:16:64","nodeType":"VariableDeclaration","scope":18487,"src":"38491:24:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18450,"name":"uint256","nodeType":"ElementaryTypeName","src":"38491:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"38490:26:64"},"scope":18510,"src":"38252:1075:64","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":18508,"nodeType":"Block","src":"39772:101:64","statements":[{"assignments":[18501,null,null],"declarations":[{"constant":false,"id":18501,"mutability":"mutable","name":"amountCalculated","nameLocation":"39791:16:64","nodeType":"VariableDeclaration","scope":18508,"src":"39783:24:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18500,"name":"uint256","nodeType":"ElementaryTypeName","src":"39783:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},null,null],"id":18505,"initialValue":{"arguments":[{"id":18503,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18491,"src":"39825:6:64","typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams calldata"}],"id":18502,"name":"_swapHook","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17706,"src":"39815:9:64","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (struct IRouter.SwapSingleTokenHookParams calldata) returns (uint256,uint256,uint256)"}},"id":18504,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39815:17:64","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"39782:50:64"},{"expression":{"id":18506,"name":"amountCalculated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18501,"src":"39850:16:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":18499,"id":18507,"nodeType":"Return","src":"39843:23:64"}]},"documentation":{"id":18488,"nodeType":"StructuredDocumentation","src":"39333:304:64","text":" @notice Hook for swap queries.\n @dev Can only be called by the Vault. Also handles native ETH.\n @param params Swap parameters (see IRouter for struct definition)\n @return amountCalculated Token amount calculated by the pool math (e.g., amountOut for an exact in swap)"},"functionSelector":"be5ae841","id":18509,"implemented":true,"kind":"function","modifiers":[{"id":18494,"kind":"modifierInvocation","modifierName":{"id":18493,"name":"nonReentrant","nameLocations":["39731:12:64"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"39731:12:64"},"nodeType":"ModifierInvocation","src":"39731:12:64"},{"id":18496,"kind":"modifierInvocation","modifierName":{"id":18495,"name":"onlyVault","nameLocations":["39744:9:64"],"nodeType":"IdentifierPath","referencedDeclaration":28128,"src":"39744:9:64"},"nodeType":"ModifierInvocation","src":"39744:9:64"}],"name":"querySwapHook","nameLocation":"39651:13:64","nodeType":"FunctionDefinition","parameters":{"id":18492,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18491,"mutability":"mutable","name":"params","nameLocation":"39709:6:64","nodeType":"VariableDeclaration","scope":18509,"src":"39674:41:64","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams"},"typeName":{"id":18490,"nodeType":"UserDefinedTypeName","pathNode":{"id":18489,"name":"SwapSingleTokenHookParams","nameLocations":["39674:25:64"],"nodeType":"IdentifierPath","referencedDeclaration":2677,"src":"39674:25:64"},"referencedDeclaration":2677,"src":"39674:25:64","typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_storage_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams"}},"visibility":"internal"}],"src":"39664:57:64"},"returnParameters":{"id":18499,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18498,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18509,"src":"39763:7:64","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18497,"name":"uint256","nodeType":"ElementaryTypeName","src":"39763:7:64","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"39762:9:64"},"scope":18510,"src":"39642:231:64","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":18511,"src":"1180:38695:64","usedErrors":[3031,3034,3640,5901,6355,9886,31059,40188,40469,40474,40477,43238],"usedEvents":[]}],"src":"46:39830:64"},"id":64},"@balancer-labs/v3-vault/contracts/RouterCommon.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/RouterCommon.sol","exportedSymbols":{"Address":[40714],"IAllowanceTransfer":[48558],"IERC20":[40109],"IERC20Permit":[40171],"IPermit2":[48578],"IRouterCommon":[3025],"IVault":[3111],"IWETH":[291],"InputHelpers":[6193],"ReentrancyGuardTransient":[9942],"RevertCodec":[6434],"RouterCommon":[19198],"RouterWethLib":[31147],"SafeCast":[44983],"SafeERC20":[40461],"SenderGuard":[19328],"StorageSlotExtension":[10285],"TransientStorageHelpers":[7442],"VaultGuard":[28149],"Version":[7482]},"id":19199,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":18512,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:65"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol","file":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol","id":18514,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19199,"sourceUnit":40172,"src":"72:95:65","symbolAliases":[{"foreign":{"id":18513,"name":"IERC20Permit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40171,"src":"81:12:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":18516,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19199,"sourceUnit":40462,"src":"168:84:65","symbolAliases":[{"foreign":{"id":18515,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40461,"src":"177:9:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":18518,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19199,"sourceUnit":44984,"src":"253:75:65","symbolAliases":[{"foreign":{"id":18517,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44983,"src":"262:8:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":18520,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19199,"sourceUnit":40110,"src":"329:72:65","symbolAliases":[{"foreign":{"id":18519,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"338:6:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"@openzeppelin/contracts/utils/Address.sol","id":18522,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19199,"sourceUnit":40715,"src":"402:68:65","symbolAliases":[{"foreign":{"id":18521,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40714,"src":"411:7:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"permit2/src/interfaces/IPermit2.sol","file":"permit2/src/interfaces/IPermit2.sol","id":18524,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19199,"sourceUnit":48579,"src":"471:63:65","symbolAliases":[{"foreign":{"id":18523,"name":"IPermit2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48578,"src":"480:8:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IRouterCommon.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IRouterCommon.sol","id":18526,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19199,"sourceUnit":3026,"src":"536:95:65","symbolAliases":[{"foreign":{"id":18525,"name":"IRouterCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3025,"src":"545:13:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol","id":18528,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19199,"sourceUnit":292,"src":"632:93:65","symbolAliases":[{"foreign":{"id":18527,"name":"IWETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":291,"src":"641:5:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"permit2/src/interfaces/IAllowanceTransfer.sol","file":"permit2/src/interfaces/IAllowanceTransfer.sol","id":18530,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19199,"sourceUnit":48559,"src":"726:83:65","symbolAliases":[{"foreign":{"id":18529,"name":"IAllowanceTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48558,"src":"735:18:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":18532,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19199,"sourceUnit":3112,"src":"810:81:65","symbolAliases":[{"foreign":{"id":18531,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"819:6:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","id":18534,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19199,"sourceUnit":6194,"src":"893:99:65","symbolAliases":[{"foreign":{"id":18533,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6193,"src":"902:12:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol","id":18536,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19199,"sourceUnit":6435,"src":"993:97:65","symbolAliases":[{"foreign":{"id":18535,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6434,"src":"1002:11:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","id":18538,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19199,"sourceUnit":7483,"src":"1091:89:65","symbolAliases":[{"foreign":{"id":18537,"name":"Version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7482,"src":"1100:7:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":18540,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19199,"sourceUnit":9943,"src":"1181:132:65","symbolAliases":[{"foreign":{"id":18539,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9942,"src":"1194:24:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","id":18542,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19199,"sourceUnit":10286,"src":"1314:120:65","symbolAliases":[{"foreign":{"id":18541,"name":"StorageSlotExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10285,"src":"1323:20:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","id":18544,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19199,"sourceUnit":7443,"src":"1435:125:65","symbolAliases":[{"foreign":{"id":18543,"name":"TransientStorageHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7442,"src":"1448:23:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SenderGuard.sol","file":"./SenderGuard.sol","id":18546,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19199,"sourceUnit":19329,"src":"1562:48:65","symbolAliases":[{"foreign":{"id":18545,"name":"SenderGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19328,"src":"1571:11:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/RouterWethLib.sol","file":"./lib/RouterWethLib.sol","id":18548,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19199,"sourceUnit":31148,"src":"1611:56:65","symbolAliases":[{"foreign":{"id":18547,"name":"RouterWethLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31147,"src":"1620:13:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","file":"./VaultGuard.sol","id":18550,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19199,"sourceUnit":28150,"src":"1668:46:65","symbolAliases":[{"foreign":{"id":18549,"name":"VaultGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28149,"src":"1677:10:65","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":18552,"name":"IRouterCommon","nameLocations":["2125:13:65"],"nodeType":"IdentifierPath","referencedDeclaration":3025,"src":"2125:13:65"},"id":18553,"nodeType":"InheritanceSpecifier","src":"2125:13:65"},{"baseName":{"id":18554,"name":"SenderGuard","nameLocations":["2140:11:65"],"nodeType":"IdentifierPath","referencedDeclaration":19328,"src":"2140:11:65"},"id":18555,"nodeType":"InheritanceSpecifier","src":"2140:11:65"},{"baseName":{"id":18556,"name":"VaultGuard","nameLocations":["2153:10:65"],"nodeType":"IdentifierPath","referencedDeclaration":28149,"src":"2153:10:65"},"id":18557,"nodeType":"InheritanceSpecifier","src":"2153:10:65"},{"baseName":{"id":18558,"name":"ReentrancyGuardTransient","nameLocations":["2165:24:65"],"nodeType":"IdentifierPath","referencedDeclaration":9942,"src":"2165:24:65"},"id":18559,"nodeType":"InheritanceSpecifier","src":"2165:24:65"},{"baseName":{"id":18560,"name":"Version","nameLocations":["2191:7:65"],"nodeType":"IdentifierPath","referencedDeclaration":7482,"src":"2191:7:65"},"id":18561,"nodeType":"InheritanceSpecifier","src":"2191:7:65"}],"canonicalName":"RouterCommon","contractDependencies":[],"contractKind":"contract","documentation":{"id":18551,"nodeType":"StructuredDocumentation","src":"1716:374:65","text":" @notice Abstract base contract for functions shared among all Routers.\n @dev Common functionality includes access to the sender (which would normally be obscured, since msg.sender in the\n Vault is the Router contract itself, not the account that invoked the Router), versioning, and the external\n invocation functions (`permitBatchAndCall` and `multicall`)."},"fullyImplemented":true,"id":19198,"linearizedBaseContracts":[19198,7482,273,9942,28149,19328,3041,3025],"name":"RouterCommon","nameLocation":"2109:12:65","nodeType":"ContractDefinition","nodes":[{"global":false,"id":18564,"libraryName":{"id":18562,"name":"Address","nameLocations":["2211:7:65"],"nodeType":"IdentifierPath","referencedDeclaration":40714,"src":"2211:7:65"},"nodeType":"UsingForDirective","src":"2205:34:65","typeName":{"id":18563,"name":"address","nodeType":"ElementaryTypeName","src":"2223:15:65","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}},{"global":false,"id":18566,"libraryName":{"id":18565,"name":"StorageSlotExtension","nameLocations":["2250:20:65"],"nodeType":"IdentifierPath","referencedDeclaration":10285,"src":"2250:20:65"},"nodeType":"UsingForDirective","src":"2244:33:65"},{"global":false,"id":18570,"libraryName":{"id":18567,"name":"RouterWethLib","nameLocations":["2288:13:65"],"nodeType":"IdentifierPath","referencedDeclaration":31147,"src":"2288:13:65"},"nodeType":"UsingForDirective","src":"2282:30:65","typeName":{"id":18569,"nodeType":"UserDefinedTypeName","pathNode":{"id":18568,"name":"IWETH","nameLocations":["2306:5:65"],"nodeType":"IdentifierPath","referencedDeclaration":291,"src":"2306:5:65"},"referencedDeclaration":291,"src":"2306:5:65","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}}},{"global":false,"id":18572,"libraryName":{"id":18571,"name":"SafeCast","nameLocations":["2323:8:65"],"nodeType":"IdentifierPath","referencedDeclaration":44983,"src":"2323:8:65"},"nodeType":"UsingForDirective","src":"2317:21:65"},{"constant":false,"id":18582,"mutability":"immutable","name":"_IS_RETURN_ETH_LOCKED_SLOT","nameLocation":"2759:26:65","nodeType":"VariableDeclaration","scope":19198,"src":"2733:146:65","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18573,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2733:7:65","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"expression":{"arguments":[{"id":18577,"name":"RouterCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19198,"src":"2839:12:65","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RouterCommon_$19198_$","typeString":"type(contract RouterCommon)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_RouterCommon_$19198_$","typeString":"type(contract RouterCommon)"}],"id":18576,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2834:4:65","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":18578,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2834:18:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_RouterCommon_$19198","typeString":"type(contract RouterCommon)"}},"id":18579,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2853:4:65","memberName":"name","nodeType":"MemberAccess","src":"2834:23:65","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"697352657475726e4574684c6f636b6564","id":18580,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2859:19:65","typeDescriptions":{"typeIdentifier":"t_stringliteral_d19a96da6e3f3f787797bbfe15fd8b17146f21fdc2ef9455ab3d06a368e101f1","typeString":"literal_string \"isReturnEthLocked\""},"value":"isReturnEthLocked"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_stringliteral_d19a96da6e3f3f787797bbfe15fd8b17146f21fdc2ef9455ab3d06a368e101f1","typeString":"literal_string \"isReturnEthLocked\""}],"expression":{"id":18574,"name":"TransientStorageHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7442,"src":"2796:23:65","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_TransientStorageHelpers_$7442_$","typeString":"type(library TransientStorageHelpers)"}},"id":18575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2820:13:65","memberName":"calculateSlot","nodeType":"MemberAccess","referencedDeclaration":6911,"src":"2796:37:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory,string memory) pure returns (bytes32)"}},"id":18581,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2796:83:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":18585,"mutability":"immutable","name":"_weth","nameLocation":"2963:5:65","nodeType":"VariableDeclaration","scope":19198,"src":"2938:30:65","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"},"typeName":{"id":18584,"nodeType":"UserDefinedTypeName","pathNode":{"id":18583,"name":"IWETH","nameLocations":["2938:5:65"],"nodeType":"IdentifierPath","referencedDeclaration":291,"src":"2938:5:65"},"referencedDeclaration":291,"src":"2938:5:65","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},"visibility":"internal"},{"constant":false,"id":18588,"mutability":"immutable","name":"_permit2","nameLocation":"3003:8:65","nodeType":"VariableDeclaration","scope":19198,"src":"2975:36:65","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"},"typeName":{"id":18587,"nodeType":"UserDefinedTypeName","pathNode":{"id":18586,"name":"IPermit2","nameLocations":["2975:8:65"],"nodeType":"IdentifierPath","referencedDeclaration":48578,"src":"2975:8:65"},"referencedDeclaration":48578,"src":"2975:8:65","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"}},"visibility":"internal"},{"body":{"id":18635,"nodeType":"Block","src":"3225:557:65","statements":[{"assignments":[18592],"declarations":[{"constant":false,"id":18592,"mutability":"mutable","name":"isExternalSender","nameLocation":"3240:16:65","nodeType":"VariableDeclaration","scope":18635,"src":"3235:21:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":18591,"name":"bool","nodeType":"ElementaryTypeName","src":"3235:4:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":18597,"initialValue":{"arguments":[{"expression":{"id":18594,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3271:3:65","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3275:6:65","memberName":"sender","nodeType":"MemberAccess","src":"3271:10:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18593,"name":"_saveSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19282,"src":"3259:11:65","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$_t_bool_$","typeString":"function (address) returns (bool)"}},"id":18596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3259:23:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"3235:47:65"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":18598,"name":"_isReturnEthLockedSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19180,"src":"3389:22:65","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function () view returns (StorageSlotExtension.BooleanSlotType)"}},"id":18599,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3389:24:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":18600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3414:5:65","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":10207,"src":"3389:30:65","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_BooleanSlotType_$10108_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function (StorageSlotExtension.BooleanSlotType) view returns (bool)"}},"id":18601,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3389:32:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18606,"nodeType":"IfStatement","src":"3385:100:65","trueBody":{"id":18605,"nodeType":"Block","src":"3423:62:65","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":18602,"name":"ReentrancyGuardReentrantCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9886,"src":"3444:28:65","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":18603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3444:30:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":18604,"nodeType":"RevertStatement","src":"3437:37:65"}]}},{"expression":{"arguments":[{"hexValue":"74727565","id":18610,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3578:4:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":18607,"name":"_isReturnEthLockedSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19180,"src":"3546:22:65","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function () view returns (StorageSlotExtension.BooleanSlotType)"}},"id":18608,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3546:24:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":18609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3571:6:65","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":10218,"src":"3546:31:65","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$10108_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":18611,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3546:37:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18612,"nodeType":"ExpressionStatement","src":"3546:37:65"},{"id":18613,"nodeType":"PlaceholderStatement","src":"3593:1:65"},{"expression":{"arguments":[{"hexValue":"66616c7365","id":18617,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3636:5:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":18614,"name":"_isReturnEthLockedSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19180,"src":"3604:22:65","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function () view returns (StorageSlotExtension.BooleanSlotType)"}},"id":18615,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3604:24:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":18616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3629:6:65","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":10218,"src":"3604:31:65","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$10108_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":18618,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3604:38:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18619,"nodeType":"ExpressionStatement","src":"3604:38:65"},{"assignments":[18621],"declarations":[{"constant":false,"id":18621,"mutability":"mutable","name":"sender","nameLocation":"3661:6:65","nodeType":"VariableDeclaration","scope":18635,"src":"3653:14:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18620,"name":"address","nodeType":"ElementaryTypeName","src":"3653:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":18626,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":18622,"name":"_getSenderSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19327,"src":"3670:14:65","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressSlotType_$10091_$","typeString":"function () view returns (StorageSlotExtension.AddressSlotType)"}},"id":18623,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3670:16:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$10091","typeString":"StorageSlotExtension.AddressSlotType"}},"id":18624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3687:5:65","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":10185,"src":"3670:22:65","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressSlotType_$10091_$returns$_t_address_$attached_to$_t_userDefinedValueType$_AddressSlotType_$10091_$","typeString":"function (StorageSlotExtension.AddressSlotType) view returns (address)"}},"id":18625,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3670:24:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3653:41:65"},{"expression":{"arguments":[{"id":18628,"name":"isExternalSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18592,"src":"3729:16:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":18627,"name":"_discardSenderIfRequired","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19300,"src":"3704:24:65","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bool_$returns$__$","typeString":"function (bool)"}},"id":18629,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3704:42:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18630,"nodeType":"ExpressionStatement","src":"3704:42:65"},{"expression":{"arguments":[{"id":18632,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18621,"src":"3768:6:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18631,"name":"_returnEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18982,"src":"3757:10:65","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":18633,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3757:18:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18634,"nodeType":"ExpressionStatement","src":"3757:18:65"}]},"documentation":{"id":18589,"nodeType":"StructuredDocumentation","src":"3018:168:65","text":" @notice Locks the return of excess ETH to the sender until the end of the function.\n @dev This also encompasses the `saveSender` functionality."},"id":18636,"name":"saveSenderAndManageEth","nameLocation":"3200:22:65","nodeType":"ModifierDefinition","parameters":{"id":18590,"nodeType":"ParameterList","parameters":[],"src":"3222:2:65"},"src":"3191:591:65","virtual":false,"visibility":"internal"},{"body":{"id":18666,"nodeType":"Block","src":"3966:57:65","statements":[{"expression":{"id":18660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18658,"name":"_weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18585,"src":"3976:5:65","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18659,"name":"weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18642,"src":"3984:4:65","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},"src":"3976:12:65","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},"id":18661,"nodeType":"ExpressionStatement","src":"3976:12:65"},{"expression":{"id":18664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18662,"name":"_permit2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18588,"src":"3998:8:65","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18663,"name":"permit2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18645,"src":"4009:7:65","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"}},"src":"3998:18:65","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"}},"id":18665,"nodeType":"ExpressionStatement","src":"3998:18:65"}]},"id":18667,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[],"id":18650,"kind":"baseConstructorSpecifier","modifierName":{"id":18649,"name":"SenderGuard","nameLocations":["3911:11:65"],"nodeType":"IdentifierPath","referencedDeclaration":19328,"src":"3911:11:65"},"nodeType":"ModifierInvocation","src":"3911:13:65"},{"arguments":[{"id":18652,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18639,"src":"3936:5:65","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"id":18653,"kind":"baseConstructorSpecifier","modifierName":{"id":18651,"name":"VaultGuard","nameLocations":["3925:10:65"],"nodeType":"IdentifierPath","referencedDeclaration":28149,"src":"3925:10:65"},"nodeType":"ModifierInvocation","src":"3925:17:65"},{"arguments":[{"id":18655,"name":"routerVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18647,"src":"3951:13:65","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":18656,"kind":"baseConstructorSpecifier","modifierName":{"id":18654,"name":"Version","nameLocations":["3943:7:65"],"nodeType":"IdentifierPath","referencedDeclaration":7482,"src":"3943:7:65"},"nodeType":"ModifierInvocation","src":"3943:22:65"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":18648,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18639,"mutability":"mutable","name":"vault","nameLocation":"3816:5:65","nodeType":"VariableDeclaration","scope":18667,"src":"3809:12:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":18638,"nodeType":"UserDefinedTypeName","pathNode":{"id":18637,"name":"IVault","nameLocations":["3809:6:65"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"3809:6:65"},"referencedDeclaration":3111,"src":"3809:6:65","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":18642,"mutability":"mutable","name":"weth","nameLocation":"3837:4:65","nodeType":"VariableDeclaration","scope":18667,"src":"3831:10:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"},"typeName":{"id":18641,"nodeType":"UserDefinedTypeName","pathNode":{"id":18640,"name":"IWETH","nameLocations":["3831:5:65"],"nodeType":"IdentifierPath","referencedDeclaration":291,"src":"3831:5:65"},"referencedDeclaration":291,"src":"3831:5:65","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},"visibility":"internal"},{"constant":false,"id":18645,"mutability":"mutable","name":"permit2","nameLocation":"3860:7:65","nodeType":"VariableDeclaration","scope":18667,"src":"3851:16:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"},"typeName":{"id":18644,"nodeType":"UserDefinedTypeName","pathNode":{"id":18643,"name":"IPermit2","nameLocations":["3851:8:65"],"nodeType":"IdentifierPath","referencedDeclaration":48578,"src":"3851:8:65"},"referencedDeclaration":48578,"src":"3851:8:65","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"}},"visibility":"internal"},{"constant":false,"id":18647,"mutability":"mutable","name":"routerVersion","nameLocation":"3891:13:65","nodeType":"VariableDeclaration","scope":18667,"src":"3877:27:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":18646,"name":"string","nodeType":"ElementaryTypeName","src":"3877:6:65","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3799:111:65"},"returnParameters":{"id":18657,"nodeType":"ParameterList","parameters":[],"src":"3966:0:65"},"scope":19198,"src":"3788:235:65","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[2972],"body":{"id":18676,"nodeType":"Block","src":"4112:29:65","statements":[{"expression":{"id":18674,"name":"_weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18585,"src":"4129:5:65","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},"functionReturnParameters":18673,"id":18675,"nodeType":"Return","src":"4122:12:65"}]},"documentation":{"id":18668,"nodeType":"StructuredDocumentation","src":"4029:29:65","text":"@inheritdoc IRouterCommon"},"functionSelector":"107c279f","id":18677,"implemented":true,"kind":"function","modifiers":[],"name":"getWeth","nameLocation":"4072:7:65","nodeType":"FunctionDefinition","parameters":{"id":18669,"nodeType":"ParameterList","parameters":[],"src":"4079:2:65"},"returnParameters":{"id":18673,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18672,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18677,"src":"4105:5:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"},"typeName":{"id":18671,"nodeType":"UserDefinedTypeName","pathNode":{"id":18670,"name":"IWETH","nameLocations":["4105:5:65"],"nodeType":"IdentifierPath","referencedDeclaration":291,"src":"4105:5:65"},"referencedDeclaration":291,"src":"4105:5:65","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},"visibility":"internal"}],"src":"4104:7:65"},"scope":19198,"src":"4063:78:65","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[2979],"body":{"id":18686,"nodeType":"Block","src":"4236:32:65","statements":[{"expression":{"id":18684,"name":"_permit2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18588,"src":"4253:8:65","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"}},"functionReturnParameters":18683,"id":18685,"nodeType":"Return","src":"4246:15:65"}]},"documentation":{"id":18678,"nodeType":"StructuredDocumentation","src":"4147:29:65","text":"@inheritdoc IRouterCommon"},"functionSelector":"1bbf2e23","id":18687,"implemented":true,"kind":"function","modifiers":[],"name":"getPermit2","nameLocation":"4190:10:65","nodeType":"FunctionDefinition","parameters":{"id":18679,"nodeType":"ParameterList","parameters":[],"src":"4200:2:65"},"returnParameters":{"id":18683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18682,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":18687,"src":"4226:8:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"},"typeName":{"id":18681,"nodeType":"UserDefinedTypeName","pathNode":{"id":18680,"name":"IPermit2","nameLocations":["4226:8:65"],"nodeType":"IdentifierPath","referencedDeclaration":48578,"src":"4226:8:65"},"referencedDeclaration":48578,"src":"4226:8:65","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"}},"visibility":"internal"}],"src":"4225:10:65"},"scope":19198,"src":"4181:87:65","stateMutability":"view","virtual":false,"visibility":"external"},{"canonicalName":"RouterCommon.SignatureParts","id":18694,"members":[{"constant":false,"id":18689,"mutability":"mutable","name":"r","nameLocation":"4533:1:65","nodeType":"VariableDeclaration","scope":18694,"src":"4525:9:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18688,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4525:7:65","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":18691,"mutability":"mutable","name":"s","nameLocation":"4552:1:65","nodeType":"VariableDeclaration","scope":18694,"src":"4544:9:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18690,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4544:7:65","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":18693,"mutability":"mutable","name":"v","nameLocation":"4569:1:65","nodeType":"VariableDeclaration","scope":18694,"src":"4563:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":18692,"name":"uint8","nodeType":"ElementaryTypeName","src":"4563:5:65","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"name":"SignatureParts","nameLocation":"4500:14:65","nodeType":"StructDefinition","scope":19198,"src":"4493:84:65","visibility":"public"},{"baseFunctions":[3014],"body":{"id":18727,"nodeType":"Block","src":"4942:217:65","statements":[{"expression":{"arguments":[{"id":18717,"name":"permitBatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18699,"src":"4965:11:65","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_PermitApproval_$2992_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouterCommon.PermitApproval calldata[] calldata"}},{"id":18718,"name":"permitSignatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18702,"src":"4978:16:65","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}},{"id":18719,"name":"permit2Batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18705,"src":"4996:12:65","typeDescriptions":{"typeIdentifier":"t_struct$_PermitBatch_$48445_calldata_ptr","typeString":"struct IAllowanceTransfer.PermitBatch calldata"}},{"id":18720,"name":"permit2Signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18707,"src":"5010:16:65","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_PermitApproval_$2992_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouterCommon.PermitApproval calldata[] calldata"},{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"},{"typeIdentifier":"t_struct$_PermitBatch_$48445_calldata_ptr","typeString":"struct IAllowanceTransfer.PermitBatch calldata"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":18716,"name":"_permitBatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18857,"src":"4952:12:65","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_struct$_PermitApproval_$2992_calldata_ptr_$dyn_calldata_ptr_$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$_t_struct$_PermitBatch_$48445_calldata_ptr_$_t_bytes_calldata_ptr_$returns$__$","typeString":"function (struct IRouterCommon.PermitApproval calldata[] calldata,bytes calldata[] calldata,struct IAllowanceTransfer.PermitBatch calldata,bytes calldata)"}},"id":18721,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4952:75:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18722,"nodeType":"ExpressionStatement","src":"4952:75:65"},{"expression":{"arguments":[{"id":18724,"name":"multicallData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18710,"src":"5138:13:65","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}],"id":18723,"name":"multicall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18909,"src":"5128:9:65","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr_$returns$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$","typeString":"function (bytes calldata[] calldata) returns (bytes memory[] memory)"}},"id":18725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5128:24:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}},"functionReturnParameters":18715,"id":18726,"nodeType":"Return","src":"5121:31:65"}]},"documentation":{"id":18695,"nodeType":"StructuredDocumentation","src":"4583:29:65","text":"@inheritdoc IRouterCommon"},"functionSelector":"19c6989f","id":18728,"implemented":true,"kind":"function","modifiers":[],"name":"permitBatchAndCall","nameLocation":"4626:18:65","nodeType":"FunctionDefinition","parameters":{"id":18711,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18699,"mutability":"mutable","name":"permitBatch","nameLocation":"4680:11:65","nodeType":"VariableDeclaration","scope":18728,"src":"4654:37:65","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_PermitApproval_$2992_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouterCommon.PermitApproval[]"},"typeName":{"baseType":{"id":18697,"nodeType":"UserDefinedTypeName","pathNode":{"id":18696,"name":"PermitApproval","nameLocations":["4654:14:65"],"nodeType":"IdentifierPath","referencedDeclaration":2992,"src":"4654:14:65"},"referencedDeclaration":2992,"src":"4654:14:65","typeDescriptions":{"typeIdentifier":"t_struct$_PermitApproval_$2992_storage_ptr","typeString":"struct IRouterCommon.PermitApproval"}},"id":18698,"nodeType":"ArrayTypeName","src":"4654:16:65","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_PermitApproval_$2992_storage_$dyn_storage_ptr","typeString":"struct IRouterCommon.PermitApproval[]"}},"visibility":"internal"},{"constant":false,"id":18702,"mutability":"mutable","name":"permitSignatures","nameLocation":"4718:16:65","nodeType":"VariableDeclaration","scope":18728,"src":"4701:33:65","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":18700,"name":"bytes","nodeType":"ElementaryTypeName","src":"4701:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":18701,"nodeType":"ArrayTypeName","src":"4701:7:65","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"},{"constant":false,"id":18705,"mutability":"mutable","name":"permit2Batch","nameLocation":"4784:12:65","nodeType":"VariableDeclaration","scope":18728,"src":"4744:52:65","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PermitBatch_$48445_calldata_ptr","typeString":"struct IAllowanceTransfer.PermitBatch"},"typeName":{"id":18704,"nodeType":"UserDefinedTypeName","pathNode":{"id":18703,"name":"IAllowanceTransfer.PermitBatch","nameLocations":["4744:18:65","4763:11:65"],"nodeType":"IdentifierPath","referencedDeclaration":48445,"src":"4744:30:65"},"referencedDeclaration":48445,"src":"4744:30:65","typeDescriptions":{"typeIdentifier":"t_struct$_PermitBatch_$48445_storage_ptr","typeString":"struct IAllowanceTransfer.PermitBatch"}},"visibility":"internal"},{"constant":false,"id":18707,"mutability":"mutable","name":"permit2Signature","nameLocation":"4821:16:65","nodeType":"VariableDeclaration","scope":18728,"src":"4806:31:65","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":18706,"name":"bytes","nodeType":"ElementaryTypeName","src":"4806:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":18710,"mutability":"mutable","name":"multicallData","nameLocation":"4864:13:65","nodeType":"VariableDeclaration","scope":18728,"src":"4847:30:65","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":18708,"name":"bytes","nodeType":"ElementaryTypeName","src":"4847:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":18709,"nodeType":"ArrayTypeName","src":"4847:7:65","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"4644:239:65"},"returnParameters":{"id":18715,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18714,"mutability":"mutable","name":"results","nameLocation":"4933:7:65","nodeType":"VariableDeclaration","scope":18728,"src":"4918:22:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":18712,"name":"bytes","nodeType":"ElementaryTypeName","src":"4918:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":18713,"nodeType":"ArrayTypeName","src":"4918:7:65","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"4917:24:65"},"scope":19198,"src":"4617:542:65","stateMutability":"payable","virtual":true,"visibility":"external"},{"body":{"id":18856,"nodeType":"Block","src":"5408:2546:65","statements":[{"expression":{"arguments":[{"expression":{"id":18748,"name":"permitBatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18732,"src":"5454:11:65","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_PermitApproval_$2992_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouterCommon.PermitApproval calldata[] calldata"}},"id":18749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5466:6:65","memberName":"length","nodeType":"MemberAccess","src":"5454:18:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18750,"name":"permitSignatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18735,"src":"5474:16:65","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}},"id":18751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5491:6:65","memberName":"length","nodeType":"MemberAccess","src":"5474:23:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":18745,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6193,"src":"5418:12:65","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$6193_$","typeString":"type(library InputHelpers)"}},"id":18747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5431:22:65","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":5926,"src":"5418:35:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":18752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5418:80:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18753,"nodeType":"ExpressionStatement","src":"5418:80:65"},{"body":{"id":18838,"nodeType":"Block","src":"5699:1322:65","statements":[{"assignments":[18766],"declarations":[{"constant":false,"id":18766,"mutability":"mutable","name":"signature","nameLocation":"5726:9:65","nodeType":"VariableDeclaration","scope":18838,"src":"5713:22:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":18765,"name":"bytes","nodeType":"ElementaryTypeName","src":"5713:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":18770,"initialValue":{"baseExpression":{"id":18767,"name":"permitSignatures","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18735,"src":"5738:16:65","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}},"id":18769,"indexExpression":{"id":18768,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18755,"src":"5755:1:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5738:19:65","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"nodeType":"VariableDeclarationStatement","src":"5713:44:65"},{"assignments":[18773],"declarations":[{"constant":false,"id":18773,"mutability":"mutable","name":"signatureParts","nameLocation":"5794:14:65","nodeType":"VariableDeclaration","scope":18838,"src":"5772:36:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SignatureParts_$18694_memory_ptr","typeString":"struct RouterCommon.SignatureParts"},"typeName":{"id":18772,"nodeType":"UserDefinedTypeName","pathNode":{"id":18771,"name":"SignatureParts","nameLocations":["5772:14:65"],"nodeType":"IdentifierPath","referencedDeclaration":18694,"src":"5772:14:65"},"referencedDeclaration":18694,"src":"5772:14:65","typeDescriptions":{"typeIdentifier":"t_struct$_SignatureParts_$18694_storage_ptr","typeString":"struct RouterCommon.SignatureParts"}},"visibility":"internal"}],"id":18777,"initialValue":{"arguments":[{"id":18775,"name":"signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18766,"src":"5830:9:65","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":18774,"name":"_getSignatureParts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18946,"src":"5811:18:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_struct$_SignatureParts_$18694_memory_ptr_$","typeString":"function (bytes memory) pure returns (struct RouterCommon.SignatureParts memory)"}},"id":18776,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5811:29:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_SignatureParts_$18694_memory_ptr","typeString":"struct RouterCommon.SignatureParts memory"}},"nodeType":"VariableDeclarationStatement","src":"5772:68:65"},{"assignments":[18780],"declarations":[{"constant":false,"id":18780,"mutability":"mutable","name":"permitApproval","nameLocation":"5876:14:65","nodeType":"VariableDeclaration","scope":18838,"src":"5854:36:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PermitApproval_$2992_memory_ptr","typeString":"struct IRouterCommon.PermitApproval"},"typeName":{"id":18779,"nodeType":"UserDefinedTypeName","pathNode":{"id":18778,"name":"PermitApproval","nameLocations":["5854:14:65"],"nodeType":"IdentifierPath","referencedDeclaration":2992,"src":"5854:14:65"},"referencedDeclaration":2992,"src":"5854:14:65","typeDescriptions":{"typeIdentifier":"t_struct$_PermitApproval_$2992_storage_ptr","typeString":"struct IRouterCommon.PermitApproval"}},"visibility":"internal"}],"id":18784,"initialValue":{"baseExpression":{"id":18781,"name":"permitBatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18732,"src":"5893:11:65","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_PermitApproval_$2992_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouterCommon.PermitApproval calldata[] calldata"}},"id":18783,"indexExpression":{"id":18782,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18755,"src":"5905:1:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5893:14:65","typeDescriptions":{"typeIdentifier":"t_struct$_PermitApproval_$2992_calldata_ptr","typeString":"struct IRouterCommon.PermitApproval calldata"}},"nodeType":"VariableDeclarationStatement","src":"5854:53:65"},{"clauses":[{"block":{"id":18807,"nodeType":"Block","src":"6293:113:65","statements":[]},"errorName":"","id":18808,"nodeType":"TryCatchClause","src":"6293:113:65"},{"block":{"id":18835,"nodeType":"Block","src":"6439:572:65","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":18817,"name":"permitApproval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18780,"src":"6719:14:65","typeDescriptions":{"typeIdentifier":"t_struct$_PermitApproval_$2992_memory_ptr","typeString":"struct IRouterCommon.PermitApproval memory"}},"id":18818,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6734:5:65","memberName":"owner","nodeType":"MemberAccess","referencedDeclaration":2983,"src":"6719:20:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":18821,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6749:4:65","typeDescriptions":{"typeIdentifier":"t_contract$_RouterCommon_$19198","typeString":"contract RouterCommon"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_RouterCommon_$19198","typeString":"contract RouterCommon"}],"id":18820,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6741:7:65","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18819,"name":"address","nodeType":"ElementaryTypeName","src":"6741:7:65","typeDescriptions":{}}},"id":18822,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6741:13:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":18813,"name":"permitApproval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18780,"src":"6687:14:65","typeDescriptions":{"typeIdentifier":"t_struct$_PermitApproval_$2992_memory_ptr","typeString":"struct IRouterCommon.PermitApproval memory"}},"id":18814,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6702:5:65","memberName":"token","nodeType":"MemberAccess","referencedDeclaration":2981,"src":"6687:20:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18812,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"6680:6:65","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":18815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6680:28:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":18816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6709:9:65","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":40086,"src":"6680:38:65","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":18823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6680:75:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":18824,"name":"permitApproval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18780,"src":"6759:14:65","typeDescriptions":{"typeIdentifier":"t_struct$_PermitApproval_$2992_memory_ptr","typeString":"struct IRouterCommon.PermitApproval memory"}},"id":18825,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6774:6:65","memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":2987,"src":"6759:21:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6680:100:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18834,"nodeType":"IfStatement","src":"6655:342:65","trueBody":{"id":18833,"nodeType":"Block","src":"6799:198:65","statements":[{"expression":{"arguments":[{"id":18830,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18810,"src":"6967:10:65","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":18827,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6434,"src":"6940:11:65","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$6434_$","typeString":"type(library RevertCodec)"}},"id":18829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6952:14:65","memberName":"bubbleUpRevert","nodeType":"MemberAccess","referencedDeclaration":6433,"src":"6940:26:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":18831,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6940:38:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18832,"nodeType":"ExpressionStatement","src":"6940:38:65"}]}}]},"errorName":"","id":18836,"nodeType":"TryCatchClause","parameters":{"id":18811,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18810,"mutability":"mutable","name":"returnData","nameLocation":"6427:10:65","nodeType":"VariableDeclaration","scope":18836,"src":"6414:23:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":18809,"name":"bytes","nodeType":"ElementaryTypeName","src":"6414:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6413:25:65"},"src":"6407:604:65"}],"externalCall":{"arguments":[{"expression":{"id":18790,"name":"permitApproval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18780,"src":"6005:14:65","typeDescriptions":{"typeIdentifier":"t_struct$_PermitApproval_$2992_memory_ptr","typeString":"struct IRouterCommon.PermitApproval memory"}},"id":18791,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6020:5:65","memberName":"owner","nodeType":"MemberAccess","referencedDeclaration":2983,"src":"6005:20:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":18794,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6055:4:65","typeDescriptions":{"typeIdentifier":"t_contract$_RouterCommon_$19198","typeString":"contract RouterCommon"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_RouterCommon_$19198","typeString":"contract RouterCommon"}],"id":18793,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6047:7:65","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18792,"name":"address","nodeType":"ElementaryTypeName","src":"6047:7:65","typeDescriptions":{}}},"id":18795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6047:13:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":18796,"name":"permitApproval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18780,"src":"6082:14:65","typeDescriptions":{"typeIdentifier":"t_struct$_PermitApproval_$2992_memory_ptr","typeString":"struct IRouterCommon.PermitApproval memory"}},"id":18797,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6097:6:65","memberName":"amount","nodeType":"MemberAccess","referencedDeclaration":2987,"src":"6082:21:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18798,"name":"permitApproval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18780,"src":"6125:14:65","typeDescriptions":{"typeIdentifier":"t_struct$_PermitApproval_$2992_memory_ptr","typeString":"struct IRouterCommon.PermitApproval memory"}},"id":18799,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6140:8:65","memberName":"deadline","nodeType":"MemberAccess","referencedDeclaration":2991,"src":"6125:23:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":18800,"name":"signatureParts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18773,"src":"6170:14:65","typeDescriptions":{"typeIdentifier":"t_struct$_SignatureParts_$18694_memory_ptr","typeString":"struct RouterCommon.SignatureParts memory"}},"id":18801,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6185:1:65","memberName":"v","nodeType":"MemberAccess","referencedDeclaration":18693,"src":"6170:16:65","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"expression":{"id":18802,"name":"signatureParts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18773,"src":"6208:14:65","typeDescriptions":{"typeIdentifier":"t_struct$_SignatureParts_$18694_memory_ptr","typeString":"struct RouterCommon.SignatureParts memory"}},"id":18803,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6223:1:65","memberName":"r","nodeType":"MemberAccess","referencedDeclaration":18689,"src":"6208:16:65","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":18804,"name":"signatureParts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18773,"src":"6246:14:65","typeDescriptions":{"typeIdentifier":"t_struct$_SignatureParts_$18694_memory_ptr","typeString":"struct RouterCommon.SignatureParts memory"}},"id":18805,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6261:1:65","memberName":"s","nodeType":"MemberAccess","referencedDeclaration":18691,"src":"6246:16:65","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"arguments":[{"expression":{"id":18786,"name":"permitApproval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18780,"src":"5955:14:65","typeDescriptions":{"typeIdentifier":"t_struct$_PermitApproval_$2992_memory_ptr","typeString":"struct IRouterCommon.PermitApproval memory"}},"id":18787,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5970:5:65","memberName":"token","nodeType":"MemberAccess","referencedDeclaration":2981,"src":"5955:20:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18785,"name":"IERC20Permit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40171,"src":"5942:12:65","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Permit_$40171_$","typeString":"type(contract IERC20Permit)"}},"id":18788,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5942:34:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Permit_$40171","typeString":"contract IERC20Permit"}},"id":18789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5977:6:65","memberName":"permit","nodeType":"MemberAccess","referencedDeclaration":40156,"src":"5942:41:65","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_uint256_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$__$","typeString":"function (address,address,uint256,uint256,uint8,bytes32,bytes32) external"}},"id":18806,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5942:338:65","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18837,"nodeType":"TryStatement","src":"5922:1089:65"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18758,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18755,"src":"5670:1:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":18759,"name":"permitBatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18732,"src":"5674:11:65","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_PermitApproval_$2992_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouterCommon.PermitApproval calldata[] calldata"}},"id":18760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5686:6:65","memberName":"length","nodeType":"MemberAccess","src":"5674:18:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5670:22:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18839,"initializationExpression":{"assignments":[18755],"declarations":[{"constant":false,"id":18755,"mutability":"mutable","name":"i","nameLocation":"5663:1:65","nodeType":"VariableDeclaration","scope":18839,"src":"5655:9:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18754,"name":"uint256","nodeType":"ElementaryTypeName","src":"5655:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18757,"initialValue":{"hexValue":"30","id":18756,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5667:1:65","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5655:13:65"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":18763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5694:3:65","subExpression":{"id":18762,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18755,"src":"5696:1:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18764,"nodeType":"ExpressionStatement","src":"5694:3:65"},"nodeType":"ForStatement","src":"5650:1371:65"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18844,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":18840,"name":"permit2Batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18738,"src":"7092:12:65","typeDescriptions":{"typeIdentifier":"t_struct$_PermitBatch_$48445_calldata_ptr","typeString":"struct IAllowanceTransfer.PermitBatch calldata"}},"id":18841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7105:7:65","memberName":"details","nodeType":"MemberAccess","referencedDeclaration":48440,"src":"7092:20:65","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_PermitDetails_$48426_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IAllowanceTransfer.PermitDetails calldata[] calldata"}},"id":18842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7113:6:65","memberName":"length","nodeType":"MemberAccess","src":"7092:27:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":18843,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7122:1:65","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7092:31:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18855,"nodeType":"IfStatement","src":"7088:860:65","trueBody":{"id":18854,"nodeType":"Block","src":"7125:823:65","statements":[{"expression":{"arguments":[{"expression":{"id":18848,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7894:3:65","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":18849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7898:6:65","memberName":"sender","nodeType":"MemberAccess","src":"7894:10:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":18850,"name":"permit2Batch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18738,"src":"7906:12:65","typeDescriptions":{"typeIdentifier":"t_struct$_PermitBatch_$48445_calldata_ptr","typeString":"struct IAllowanceTransfer.PermitBatch calldata"}},{"id":18851,"name":"permit2Signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18740,"src":"7920:16:65","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_PermitBatch_$48445_calldata_ptr","typeString":"struct IAllowanceTransfer.PermitBatch calldata"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":18845,"name":"_permit2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18588,"src":"7878:8:65","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"}},"id":18847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7887:6:65","memberName":"permit","nodeType":"MemberAccess","referencedDeclaration":48519,"src":"7878:15:65","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_struct$_PermitBatch_$48445_memory_ptr_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,struct IAllowanceTransfer.PermitBatch memory,bytes memory) external"}},"id":18852,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7878:59:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18853,"nodeType":"ExpressionStatement","src":"7878:59:65"}]}}]},"id":18857,"implemented":true,"kind":"function","modifiers":[{"id":18743,"kind":"modifierInvocation","modifierName":{"id":18742,"name":"nonReentrant","nameLocations":["5395:12:65"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"5395:12:65"},"nodeType":"ModifierInvocation","src":"5395:12:65"}],"name":"_permitBatch","nameLocation":"5174:12:65","nodeType":"FunctionDefinition","parameters":{"id":18741,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18732,"mutability":"mutable","name":"permitBatch","nameLocation":"5222:11:65","nodeType":"VariableDeclaration","scope":18857,"src":"5196:37:65","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_PermitApproval_$2992_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IRouterCommon.PermitApproval[]"},"typeName":{"baseType":{"id":18730,"nodeType":"UserDefinedTypeName","pathNode":{"id":18729,"name":"PermitApproval","nameLocations":["5196:14:65"],"nodeType":"IdentifierPath","referencedDeclaration":2992,"src":"5196:14:65"},"referencedDeclaration":2992,"src":"5196:14:65","typeDescriptions":{"typeIdentifier":"t_struct$_PermitApproval_$2992_storage_ptr","typeString":"struct IRouterCommon.PermitApproval"}},"id":18731,"nodeType":"ArrayTypeName","src":"5196:16:65","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_PermitApproval_$2992_storage_$dyn_storage_ptr","typeString":"struct IRouterCommon.PermitApproval[]"}},"visibility":"internal"},{"constant":false,"id":18735,"mutability":"mutable","name":"permitSignatures","nameLocation":"5260:16:65","nodeType":"VariableDeclaration","scope":18857,"src":"5243:33:65","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":18733,"name":"bytes","nodeType":"ElementaryTypeName","src":"5243:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":18734,"nodeType":"ArrayTypeName","src":"5243:7:65","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"},{"constant":false,"id":18738,"mutability":"mutable","name":"permit2Batch","nameLocation":"5326:12:65","nodeType":"VariableDeclaration","scope":18857,"src":"5286:52:65","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PermitBatch_$48445_calldata_ptr","typeString":"struct IAllowanceTransfer.PermitBatch"},"typeName":{"id":18737,"nodeType":"UserDefinedTypeName","pathNode":{"id":18736,"name":"IAllowanceTransfer.PermitBatch","nameLocations":["5286:18:65","5305:11:65"],"nodeType":"IdentifierPath","referencedDeclaration":48445,"src":"5286:30:65"},"referencedDeclaration":48445,"src":"5286:30:65","typeDescriptions":{"typeIdentifier":"t_struct$_PermitBatch_$48445_storage_ptr","typeString":"struct IAllowanceTransfer.PermitBatch"}},"visibility":"internal"},{"constant":false,"id":18740,"mutability":"mutable","name":"permit2Signature","nameLocation":"5363:16:65","nodeType":"VariableDeclaration","scope":18857,"src":"5348:31:65","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":18739,"name":"bytes","nodeType":"ElementaryTypeName","src":"5348:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5186:199:65"},"returnParameters":{"id":18744,"nodeType":"ParameterList","parameters":[],"src":"5408:0:65"},"scope":19198,"src":"5165:2789:65","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[3024],"body":{"id":18908,"nodeType":"Block","src":"8129:216:65","statements":[{"expression":{"id":18876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":18869,"name":"results","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18867,"src":"8139:7:65","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":18873,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18861,"src":"8161:4:65","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}},"id":18874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8166:6:65","memberName":"length","nodeType":"MemberAccess","src":"8161:11:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":18872,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"8149:11:65","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory[] memory)"},"typeName":{"baseType":{"id":18870,"name":"bytes","nodeType":"ElementaryTypeName","src":"8153:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":18871,"nodeType":"ArrayTypeName","src":"8153:7:65","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}}},"id":18875,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8149:24:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}},"src":"8139:34:65","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}},"id":18877,"nodeType":"ExpressionStatement","src":"8139:34:65"},{"body":{"id":18904,"nodeType":"Block","src":"8225:90:65","statements":[{"expression":{"id":18902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":18889,"name":"results","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18867,"src":"8239:7:65","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}},"id":18891,"indexExpression":{"id":18890,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18879,"src":"8247:1:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8239:10:65","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":18896,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8289:4:65","typeDescriptions":{"typeIdentifier":"t_contract$_RouterCommon_$19198","typeString":"contract RouterCommon"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_RouterCommon_$19198","typeString":"contract RouterCommon"}],"id":18895,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8281:7:65","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18894,"name":"address","nodeType":"ElementaryTypeName","src":"8281:7:65","typeDescriptions":{}}},"id":18897,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8281:13:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":18898,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18861,"src":"8296:4:65","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}},"id":18900,"indexExpression":{"id":18899,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18879,"src":"8301:1:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8296:7:65","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"id":18892,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40714,"src":"8252:7:65","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$40714_$","typeString":"type(library Address)"}},"id":18893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8260:20:65","memberName":"functionDelegateCall","nodeType":"MemberAccess","referencedDeclaration":40633,"src":"8252:28:65","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":18901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8252:52:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"8239:65:65","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":18903,"nodeType":"ExpressionStatement","src":"8239:65:65"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18882,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18879,"src":"8203:1:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":18883,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18861,"src":"8207:4:65","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes calldata[] calldata"}},"id":18884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8212:6:65","memberName":"length","nodeType":"MemberAccess","src":"8207:11:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8203:15:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18905,"initializationExpression":{"assignments":[18879],"declarations":[{"constant":false,"id":18879,"mutability":"mutable","name":"i","nameLocation":"8196:1:65","nodeType":"VariableDeclaration","scope":18905,"src":"8188:9:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18878,"name":"uint256","nodeType":"ElementaryTypeName","src":"8188:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18881,"initialValue":{"hexValue":"30","id":18880,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8200:1:65","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8188:13:65"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":18887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"8220:3:65","subExpression":{"id":18886,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18879,"src":"8222:1:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18888,"nodeType":"ExpressionStatement","src":"8220:3:65"},"nodeType":"ForStatement","src":"8183:132:65"},{"expression":{"id":18906,"name":"results","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18867,"src":"8331:7:65","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes memory[] memory"}},"functionReturnParameters":18868,"id":18907,"nodeType":"Return","src":"8324:14:65"}]},"documentation":{"id":18858,"nodeType":"StructuredDocumentation","src":"7960:29:65","text":"@inheritdoc IRouterCommon"},"functionSelector":"ac9650d8","id":18909,"implemented":true,"kind":"function","modifiers":[{"id":18864,"kind":"modifierInvocation","modifierName":{"id":18863,"name":"saveSenderAndManageEth","nameLocations":["8073:22:65"],"nodeType":"IdentifierPath","referencedDeclaration":18636,"src":"8073:22:65"},"nodeType":"ModifierInvocation","src":"8073:22:65"}],"name":"multicall","nameLocation":"8003:9:65","nodeType":"FunctionDefinition","parameters":{"id":18862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18861,"mutability":"mutable","name":"data","nameLocation":"8039:4:65","nodeType":"VariableDeclaration","scope":18909,"src":"8022:21:65","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_calldata_ptr_$dyn_calldata_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":18859,"name":"bytes","nodeType":"ElementaryTypeName","src":"8022:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":18860,"nodeType":"ArrayTypeName","src":"8022:7:65","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"8012:37:65"},"returnParameters":{"id":18868,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18867,"mutability":"mutable","name":"results","nameLocation":"8120:7:65","nodeType":"VariableDeclaration","scope":18909,"src":"8105:22:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_memory_ptr_$dyn_memory_ptr","typeString":"bytes[]"},"typeName":{"baseType":{"id":18865,"name":"bytes","nodeType":"ElementaryTypeName","src":"8105:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"id":18866,"nodeType":"ArrayTypeName","src":"8105:7:65","typeDescriptions":{"typeIdentifier":"t_array$_t_bytes_storage_$dyn_storage_ptr","typeString":"bytes[]"}},"visibility":"internal"}],"src":"8104:24:65"},"scope":19198,"src":"7994:351:65","stateMutability":"payable","virtual":true,"visibility":"public"},{"body":{"id":18945,"nodeType":"Block","src":"8463:399:65","statements":[{"assignments":[18918],"declarations":[{"constant":false,"id":18918,"mutability":"mutable","name":"r","nameLocation":"8481:1:65","nodeType":"VariableDeclaration","scope":18945,"src":"8473:9:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18917,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8473:7:65","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":18919,"nodeType":"VariableDeclarationStatement","src":"8473:9:65"},{"assignments":[18921],"declarations":[{"constant":false,"id":18921,"mutability":"mutable","name":"s","nameLocation":"8500:1:65","nodeType":"VariableDeclaration","scope":18945,"src":"8492:9:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":18920,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8492:7:65","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":18922,"nodeType":"VariableDeclarationStatement","src":"8492:9:65"},{"assignments":[18924],"declarations":[{"constant":false,"id":18924,"mutability":"mutable","name":"v","nameLocation":"8517:1:65","nodeType":"VariableDeclaration","scope":18945,"src":"8511:7:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":18923,"name":"uint8","nodeType":"ElementaryTypeName","src":"8511:5:65","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":18925,"nodeType":"VariableDeclarationStatement","src":"8511:7:65"},{"AST":{"nativeSrc":"8610:155:65","nodeType":"YulBlock","src":"8610:155:65","statements":[{"nativeSrc":"8624:32:65","nodeType":"YulAssignment","src":"8624:32:65","value":{"arguments":[{"arguments":[{"name":"signature","nativeSrc":"8639:9:65","nodeType":"YulIdentifier","src":"8639:9:65"},{"kind":"number","nativeSrc":"8650:4:65","nodeType":"YulLiteral","src":"8650:4:65","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"8635:3:65","nodeType":"YulIdentifier","src":"8635:3:65"},"nativeSrc":"8635:20:65","nodeType":"YulFunctionCall","src":"8635:20:65"}],"functionName":{"name":"mload","nativeSrc":"8629:5:65","nodeType":"YulIdentifier","src":"8629:5:65"},"nativeSrc":"8629:27:65","nodeType":"YulFunctionCall","src":"8629:27:65"},"variableNames":[{"name":"r","nativeSrc":"8624:1:65","nodeType":"YulIdentifier","src":"8624:1:65"}]},{"nativeSrc":"8669:32:65","nodeType":"YulAssignment","src":"8669:32:65","value":{"arguments":[{"arguments":[{"name":"signature","nativeSrc":"8684:9:65","nodeType":"YulIdentifier","src":"8684:9:65"},{"kind":"number","nativeSrc":"8695:4:65","nodeType":"YulLiteral","src":"8695:4:65","type":"","value":"0x40"}],"functionName":{"name":"add","nativeSrc":"8680:3:65","nodeType":"YulIdentifier","src":"8680:3:65"},"nativeSrc":"8680:20:65","nodeType":"YulFunctionCall","src":"8680:20:65"}],"functionName":{"name":"mload","nativeSrc":"8674:5:65","nodeType":"YulIdentifier","src":"8674:5:65"},"nativeSrc":"8674:27:65","nodeType":"YulFunctionCall","src":"8674:27:65"},"variableNames":[{"name":"s","nativeSrc":"8669:1:65","nodeType":"YulIdentifier","src":"8669:1:65"}]},{"nativeSrc":"8714:41:65","nodeType":"YulAssignment","src":"8714:41:65","value":{"arguments":[{"kind":"number","nativeSrc":"8724:1:65","nodeType":"YulLiteral","src":"8724:1:65","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"signature","nativeSrc":"8737:9:65","nodeType":"YulIdentifier","src":"8737:9:65"},{"kind":"number","nativeSrc":"8748:4:65","nodeType":"YulLiteral","src":"8748:4:65","type":"","value":"0x60"}],"functionName":{"name":"add","nativeSrc":"8733:3:65","nodeType":"YulIdentifier","src":"8733:3:65"},"nativeSrc":"8733:20:65","nodeType":"YulFunctionCall","src":"8733:20:65"}],"functionName":{"name":"mload","nativeSrc":"8727:5:65","nodeType":"YulIdentifier","src":"8727:5:65"},"nativeSrc":"8727:27:65","nodeType":"YulFunctionCall","src":"8727:27:65"}],"functionName":{"name":"byte","nativeSrc":"8719:4:65","nodeType":"YulIdentifier","src":"8719:4:65"},"nativeSrc":"8719:36:65","nodeType":"YulFunctionCall","src":"8719:36:65"},"variableNames":[{"name":"v","nativeSrc":"8714:1:65","nodeType":"YulIdentifier","src":"8714:1:65"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":18918,"isOffset":false,"isSlot":false,"src":"8624:1:65","valueSize":1},{"declaration":18921,"isOffset":false,"isSlot":false,"src":"8669:1:65","valueSize":1},{"declaration":18911,"isOffset":false,"isSlot":false,"src":"8639:9:65","valueSize":1},{"declaration":18911,"isOffset":false,"isSlot":false,"src":"8684:9:65","valueSize":1},{"declaration":18911,"isOffset":false,"isSlot":false,"src":"8737:9:65","valueSize":1},{"declaration":18924,"isOffset":false,"isSlot":false,"src":"8714:1:65","valueSize":1}],"flags":["memory-safe"],"id":18926,"nodeType":"InlineAssembly","src":"8585:180:65"},{"expression":{"id":18931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18927,"name":"signatureParts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18915,"src":"8775:14:65","typeDescriptions":{"typeIdentifier":"t_struct$_SignatureParts_$18694_memory_ptr","typeString":"struct RouterCommon.SignatureParts memory"}},"id":18929,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"8790:1:65","memberName":"r","nodeType":"MemberAccess","referencedDeclaration":18689,"src":"8775:16:65","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18930,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18918,"src":"8794:1:65","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"8775:20:65","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":18932,"nodeType":"ExpressionStatement","src":"8775:20:65"},{"expression":{"id":18937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18933,"name":"signatureParts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18915,"src":"8805:14:65","typeDescriptions":{"typeIdentifier":"t_struct$_SignatureParts_$18694_memory_ptr","typeString":"struct RouterCommon.SignatureParts memory"}},"id":18935,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"8820:1:65","memberName":"s","nodeType":"MemberAccess","referencedDeclaration":18691,"src":"8805:16:65","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18936,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18921,"src":"8824:1:65","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"8805:20:65","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":18938,"nodeType":"ExpressionStatement","src":"8805:20:65"},{"expression":{"id":18943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":18939,"name":"signatureParts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18915,"src":"8835:14:65","typeDescriptions":{"typeIdentifier":"t_struct$_SignatureParts_$18694_memory_ptr","typeString":"struct RouterCommon.SignatureParts memory"}},"id":18941,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"8850:1:65","memberName":"v","nodeType":"MemberAccess","referencedDeclaration":18693,"src":"8835:16:65","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":18942,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18924,"src":"8854:1:65","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"8835:20:65","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":18944,"nodeType":"ExpressionStatement","src":"8835:20:65"}]},"id":18946,"implemented":true,"kind":"function","modifiers":[],"name":"_getSignatureParts","nameLocation":"8360:18:65","nodeType":"FunctionDefinition","parameters":{"id":18912,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18911,"mutability":"mutable","name":"signature","nameLocation":"8392:9:65","nodeType":"VariableDeclaration","scope":18946,"src":"8379:22:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":18910,"name":"bytes","nodeType":"ElementaryTypeName","src":"8379:5:65","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8378:24:65"},"returnParameters":{"id":18916,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18915,"mutability":"mutable","name":"signatureParts","nameLocation":"8447:14:65","nodeType":"VariableDeclaration","scope":18946,"src":"8425:36:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SignatureParts_$18694_memory_ptr","typeString":"struct RouterCommon.SignatureParts"},"typeName":{"id":18914,"nodeType":"UserDefinedTypeName","pathNode":{"id":18913,"name":"SignatureParts","nameLocations":["8425:14:65"],"nodeType":"IdentifierPath","referencedDeclaration":18694,"src":"8425:14:65"},"referencedDeclaration":18694,"src":"8425:14:65","typeDescriptions":{"typeIdentifier":"t_struct$_SignatureParts_$18694_storage_ptr","typeString":"struct RouterCommon.SignatureParts"}},"visibility":"internal"}],"src":"8424:38:65"},"scope":19198,"src":"8351:511:65","stateMutability":"pure","virtual":false,"visibility":"private"},{"body":{"id":18981,"nodeType":"Block","src":"9589:539:65","statements":[{"assignments":[18953],"declarations":[{"constant":false,"id":18953,"mutability":"mutable","name":"excess","nameLocation":"9771:6:65","nodeType":"VariableDeclaration","scope":18981,"src":"9763:14:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18952,"name":"uint256","nodeType":"ElementaryTypeName","src":"9763:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":18959,"initialValue":{"expression":{"arguments":[{"id":18956,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"9788:4:65","typeDescriptions":{"typeIdentifier":"t_contract$_RouterCommon_$19198","typeString":"contract RouterCommon"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_RouterCommon_$19198","typeString":"contract RouterCommon"}],"id":18955,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9780:7:65","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":18954,"name":"address","nodeType":"ElementaryTypeName","src":"9780:7:65","typeDescriptions":{}}},"id":18957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9780:13:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":18958,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9794:7:65","memberName":"balance","nodeType":"MemberAccess","src":"9780:21:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9763:38:65"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":18962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":18960,"name":"excess","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18953,"src":"9815:6:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":18961,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9825:1:65","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9815:11:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18965,"nodeType":"IfStatement","src":"9811:48:65","trueBody":{"id":18964,"nodeType":"Block","src":"9828:31:65","statements":[{"functionReturnParameters":18951,"id":18963,"nodeType":"Return","src":"9842:7:65"}]}},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":18966,"name":"_isReturnEthLockedSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19180,"src":"10013:22:65","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function () view returns (StorageSlotExtension.BooleanSlotType)"}},"id":18967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10013:24:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":18968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10038:5:65","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":10207,"src":"10013:30:65","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_BooleanSlotType_$10108_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function (StorageSlotExtension.BooleanSlotType) view returns (bool)"}},"id":18969,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10013:32:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":18972,"nodeType":"IfStatement","src":"10009:69:65","trueBody":{"id":18971,"nodeType":"Block","src":"10047:31:65","statements":[{"functionReturnParameters":18951,"id":18970,"nodeType":"Return","src":"10061:7:65"}]}},{"expression":{"arguments":[{"id":18978,"name":"excess","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18953,"src":"10114:6:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":18975,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18949,"src":"10096:6:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":18974,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10088:8:65","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":18973,"name":"address","nodeType":"ElementaryTypeName","src":"10088:8:65","stateMutability":"payable","typeDescriptions":{}}},"id":18976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10088:15:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":18977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10104:9:65","memberName":"sendValue","nodeType":"MemberAccess","referencedDeclaration":40518,"src":"10088:25:65","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$__$attached_to$_t_address_payable_$","typeString":"function (address payable,uint256)"}},"id":18979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10088:33:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":18980,"nodeType":"ExpressionStatement","src":"10088:33:65"}]},"documentation":{"id":18947,"nodeType":"StructuredDocumentation","src":"8868:671:65","text":" @dev Returns excess ETH back to the contract caller. Checks for sufficient ETH balance are made right before\n each deposit, ensuring it will revert with a friendly custom error. If there is any balance remaining when\n `_returnEth` is called, return it to the sender.\n Because the caller might not know exactly how much ETH a Vault action will require, they may send extra.\n Note that this excess value is returned *to the contract caller* (msg.sender). If caller and e.g. swap sender\n are not the same (because the caller is a relayer for the sender), then it is up to the caller to manage this\n returned ETH."},"id":18982,"implemented":true,"kind":"function","modifiers":[],"name":"_returnEth","nameLocation":"9553:10:65","nodeType":"FunctionDefinition","parameters":{"id":18950,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18949,"mutability":"mutable","name":"sender","nameLocation":"9572:6:65","nodeType":"VariableDeclaration","scope":18982,"src":"9564:14:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18948,"name":"address","nodeType":"ElementaryTypeName","src":"9564:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9563:16:65"},"returnParameters":{"id":18951,"nodeType":"ParameterList","parameters":[],"src":"9589:0:65"},"scope":19198,"src":"9544:584:65","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":19025,"nodeType":"Block","src":"10604:219:65","statements":[{"assignments":[18999],"declarations":[{"constant":false,"id":18999,"mutability":"mutable","name":"numTokens","nameLocation":"10622:9:65","nodeType":"VariableDeclaration","scope":19025,"src":"10614:17:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18998,"name":"uint256","nodeType":"ElementaryTypeName","src":"10614:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19000,"nodeType":"VariableDeclarationStatement","src":"10614:17:65"},{"expression":{"id":19009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":19001,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18999,"src":"10642:9:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19002,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18996,"src":"10653:10:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19003,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"10641:23:65","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":19006,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18985,"src":"10707:4:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19007,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18988,"src":"10713:5:65","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"expression":{"id":19004,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"10667:6:65","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":19005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10674:32:65","memberName":"getPoolTokenCountAndIndexOfToken","nodeType":"MemberAccess","referencedDeclaration":4516,"src":"10667:39:65","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_contract$_IERC20_$40109_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,contract IERC20) view external returns (uint256,uint256)"}},"id":19008,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10667:52:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"10641:78:65","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19010,"nodeType":"ExpressionStatement","src":"10641:78:65"},{"expression":{"id":19017,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19011,"name":"amountsGiven","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18994,"src":"10729:12:65","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":19015,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18999,"src":"10758:9:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19014,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"10744:13:65","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":19012,"name":"uint256","nodeType":"ElementaryTypeName","src":"10748:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19013,"nodeType":"ArrayTypeName","src":"10748:9:65","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":19016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10744:24:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"10729:39:65","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":19018,"nodeType":"ExpressionStatement","src":"10729:39:65"},{"expression":{"id":19023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":19019,"name":"amountsGiven","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18994,"src":"10778:12:65","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":19021,"indexExpression":{"id":19020,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18996,"src":"10791:10:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10778:24:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19022,"name":"amountGiven","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18990,"src":"10805:11:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10778:38:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19024,"nodeType":"ExpressionStatement","src":"10778:38:65"}]},"documentation":{"id":18983,"nodeType":"StructuredDocumentation","src":"10134:269:65","text":" @dev Returns an array with `amountGiven` at `tokenIndex`, and 0 for every other index.\n The returned array length matches the number of tokens in the pool.\n Reverts if the given index is greater than or equal to the pool number of tokens."},"id":19026,"implemented":true,"kind":"function","modifiers":[],"name":"_getSingleInputArrayAndTokenIndex","nameLocation":"10417:33:65","nodeType":"FunctionDefinition","parameters":{"id":18991,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18985,"mutability":"mutable","name":"pool","nameLocation":"10468:4:65","nodeType":"VariableDeclaration","scope":19026,"src":"10460:12:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":18984,"name":"address","nodeType":"ElementaryTypeName","src":"10460:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":18988,"mutability":"mutable","name":"token","nameLocation":"10489:5:65","nodeType":"VariableDeclaration","scope":19026,"src":"10482:12:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":18987,"nodeType":"UserDefinedTypeName","pathNode":{"id":18986,"name":"IERC20","nameLocations":["10482:6:65"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"10482:6:65"},"referencedDeclaration":40109,"src":"10482:6:65","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":18990,"mutability":"mutable","name":"amountGiven","nameLocation":"10512:11:65","nodeType":"VariableDeclaration","scope":19026,"src":"10504:19:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18989,"name":"uint256","nodeType":"ElementaryTypeName","src":"10504:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10450:79:65"},"returnParameters":{"id":18997,"nodeType":"ParameterList","parameters":[{"constant":false,"id":18994,"mutability":"mutable","name":"amountsGiven","nameLocation":"10570:12:65","nodeType":"VariableDeclaration","scope":19026,"src":"10553:29:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":18992,"name":"uint256","nodeType":"ElementaryTypeName","src":"10553:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":18993,"nodeType":"ArrayTypeName","src":"10553:9:65","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":18996,"mutability":"mutable","name":"tokenIndex","nameLocation":"10592:10:65","nodeType":"VariableDeclaration","scope":19026,"src":"10584:18:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":18995,"name":"uint256","nodeType":"ElementaryTypeName","src":"10584:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10552:51:65"},"scope":19198,"src":"10408:415:65","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":19082,"nodeType":"Block","src":"10926:456:65","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19038,"name":"wethIsEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19035,"src":"11006:9:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"id":19041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19039,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19031,"src":"11019:7:65","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":19040,"name":"_weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18585,"src":"11030:5:65","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},"src":"11019:16:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11006:29:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":19080,"nodeType":"Block","src":"11108:268:65","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19051,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19033,"src":"11126:8:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":19052,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11137:1:65","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11126:12:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19079,"nodeType":"IfStatement","src":"11122:244:65","trueBody":{"id":19078,"nodeType":"Block","src":"11140:226:65","statements":[{"expression":{"arguments":[{"id":19057,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19028,"src":"11237:6:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":19060,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"11253:6:65","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}],"id":19059,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11245:7:65","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19058,"name":"address","nodeType":"ElementaryTypeName","src":"11245:7:65","typeDescriptions":{}}},"id":19061,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11245:15:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19062,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19033,"src":"11262:8:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11271:9:65","memberName":"toUint160","nodeType":"MemberAccess","referencedDeclaration":43591,"src":"11262:18:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint160_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint160)"}},"id":19064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11262:20:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},{"arguments":[{"id":19067,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19031,"src":"11292:7:65","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":19066,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11284:7:65","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19065,"name":"address","nodeType":"ElementaryTypeName","src":"11284:7:65","typeDescriptions":{}}},"id":19068,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11284:16:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint160","typeString":"uint160"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":19054,"name":"_permit2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18588,"src":"11215:8:65","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"}},"id":19056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11224:12:65","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":48531,"src":"11215:21:65","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint160_$_t_address_$returns$__$","typeString":"function (address,address,uint160,address) external"}},"id":19069,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11215:86:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19070,"nodeType":"ExpressionStatement","src":"11215:86:65"},{"expression":{"arguments":[{"id":19074,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19031,"src":"11333:7:65","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":19075,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19033,"src":"11342:8:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":19071,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"11319:6:65","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":19073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11326:6:65","memberName":"settle","nodeType":"MemberAccess","referencedDeclaration":4451,"src":"11319:13:65","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$_t_uint256_$","typeString":"function (contract IERC20,uint256) external returns (uint256)"}},"id":19076,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11319:32:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19077,"nodeType":"ExpressionStatement","src":"11319:32:65"}]}}]},"id":19081,"nodeType":"IfStatement","src":"11002:374:65","trueBody":{"id":19050,"nodeType":"Block","src":"11037:65:65","statements":[{"expression":{"arguments":[{"id":19046,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"11074:6:65","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},{"id":19047,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19033,"src":"11082:8:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":19043,"name":"_weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18585,"src":"11051:5:65","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},"id":19045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11057:16:65","memberName":"wrapEthAndSettle","nodeType":"MemberAccess","referencedDeclaration":31107,"src":"11051:22:65","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IWETH_$291_$_t_contract$_IVault_$3111_$_t_uint256_$returns$__$attached_to$_t_contract$_IWETH_$291_$","typeString":"function (contract IWETH,contract IVault,uint256)"}},"id":19048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11051:40:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19049,"nodeType":"ExpressionStatement","src":"11051:40:65"}]}}]},"id":19083,"implemented":true,"kind":"function","modifiers":[],"name":"_takeTokenIn","nameLocation":"10838:12:65","nodeType":"FunctionDefinition","parameters":{"id":19036,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19028,"mutability":"mutable","name":"sender","nameLocation":"10859:6:65","nodeType":"VariableDeclaration","scope":19083,"src":"10851:14:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19027,"name":"address","nodeType":"ElementaryTypeName","src":"10851:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19031,"mutability":"mutable","name":"tokenIn","nameLocation":"10874:7:65","nodeType":"VariableDeclaration","scope":19083,"src":"10867:14:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":19030,"nodeType":"UserDefinedTypeName","pathNode":{"id":19029,"name":"IERC20","nameLocations":["10867:6:65"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"10867:6:65"},"referencedDeclaration":40109,"src":"10867:6:65","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":19033,"mutability":"mutable","name":"amountIn","nameLocation":"10891:8:65","nodeType":"VariableDeclaration","scope":19083,"src":"10883:16:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19032,"name":"uint256","nodeType":"ElementaryTypeName","src":"10883:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19035,"mutability":"mutable","name":"wethIsEth","nameLocation":"10906:9:65","nodeType":"VariableDeclaration","scope":19083,"src":"10901:14:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19034,"name":"bool","nodeType":"ElementaryTypeName","src":"10901:4:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10850:66:65"},"returnParameters":{"id":19037,"nodeType":"ParameterList","parameters":[],"src":"10926:0:65"},"scope":19198,"src":"10829:553:65","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":19125,"nodeType":"Block","src":"11488:389:65","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19095,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19090,"src":"11502:9:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":19096,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11515:1:65","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11502:14:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19100,"nodeType":"IfStatement","src":"11498:51:65","trueBody":{"id":19099,"nodeType":"Block","src":"11518:31:65","statements":[{"functionReturnParameters":19094,"id":19098,"nodeType":"Return","src":"11532:7:65"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19101,"name":"wethIsEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19092,"src":"11632:9:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"id":19104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19102,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19088,"src":"11645:8:65","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":19103,"name":"_weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18585,"src":"11657:5:65","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},"src":"11645:17:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11632:30:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":19123,"nodeType":"Block","src":"11757:114:65","statements":[{"expression":{"arguments":[{"id":19118,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19088,"src":"11832:8:65","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":19119,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19085,"src":"11842:6:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19120,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19090,"src":"11850:9:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":19115,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"11818:6:65","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":19117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11825:6:65","memberName":"sendTo","nodeType":"MemberAccess","referencedDeclaration":4462,"src":"11818:13:65","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$40109_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":19121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11818:42:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19122,"nodeType":"ExpressionStatement","src":"11818:42:65"}]},"id":19124,"nodeType":"IfStatement","src":"11628:243:65","trueBody":{"id":19114,"nodeType":"Block","src":"11664:87:65","statements":[{"expression":{"arguments":[{"id":19109,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"11714:6:65","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},{"id":19110,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19085,"src":"11722:6:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19111,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19090,"src":"11730:9:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":19106,"name":"_weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18585,"src":"11678:5:65","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},"id":19108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11684:29:65","memberName":"unwrapWethAndTransferToSender","nodeType":"MemberAccess","referencedDeclaration":31146,"src":"11678:35:65","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IWETH_$291_$_t_contract$_IVault_$3111_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IWETH_$291_$","typeString":"function (contract IWETH,contract IVault,address,uint256)"}},"id":19112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11678:62:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19113,"nodeType":"ExpressionStatement","src":"11678:62:65"}]}}]},"id":19126,"implemented":true,"kind":"function","modifiers":[],"name":"_sendTokenOut","nameLocation":"11397:13:65","nodeType":"FunctionDefinition","parameters":{"id":19093,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19085,"mutability":"mutable","name":"sender","nameLocation":"11419:6:65","nodeType":"VariableDeclaration","scope":19126,"src":"11411:14:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19084,"name":"address","nodeType":"ElementaryTypeName","src":"11411:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19088,"mutability":"mutable","name":"tokenOut","nameLocation":"11434:8:65","nodeType":"VariableDeclaration","scope":19126,"src":"11427:15:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":19087,"nodeType":"UserDefinedTypeName","pathNode":{"id":19086,"name":"IERC20","nameLocations":["11427:6:65"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"11427:6:65"},"referencedDeclaration":40109,"src":"11427:6:65","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":19090,"mutability":"mutable","name":"amountOut","nameLocation":"11452:9:65","nodeType":"VariableDeclaration","scope":19126,"src":"11444:17:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19089,"name":"uint256","nodeType":"ElementaryTypeName","src":"11444:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19092,"mutability":"mutable","name":"wethIsEth","nameLocation":"11468:9:65","nodeType":"VariableDeclaration","scope":19126,"src":"11463:14:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19091,"name":"bool","nodeType":"ElementaryTypeName","src":"11463:4:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"11410:68:65"},"returnParameters":{"id":19094,"nodeType":"ParameterList","parameters":[],"src":"11488:0:65"},"scope":19198,"src":"11388:489:65","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":19168,"nodeType":"Block","src":"11973:216:65","statements":[{"assignments":[19135],"declarations":[{"constant":false,"id":19135,"mutability":"mutable","name":"numTokens","nameLocation":"11991:9:65","nodeType":"VariableDeclaration","scope":19168,"src":"11983:17:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19134,"name":"uint256","nodeType":"ElementaryTypeName","src":"11983:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19141,"initialValue":{"expression":{"arguments":[{"id":19138,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19128,"src":"12024:4:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":19136,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"12003:6:65","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":19137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12010:13:65","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":4145,"src":"12003:20:65","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":19139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12003:26:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":19140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12030:6:65","memberName":"length","nodeType":"MemberAccess","src":"12003:33:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11983:53:65"},{"expression":{"id":19148,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19142,"name":"maxLimits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19132,"src":"12046:9:65","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":19146,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19135,"src":"12072:9:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19145,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"12058:13:65","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":19143,"name":"uint256","nodeType":"ElementaryTypeName","src":"12062:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19144,"nodeType":"ArrayTypeName","src":"12062:9:65","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":19147,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12058:24:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"12046:36:65","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":19149,"nodeType":"ExpressionStatement","src":"12046:36:65"},{"body":{"id":19166,"nodeType":"Block","src":"12132:51:65","statements":[{"expression":{"id":19164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":19160,"name":"maxLimits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19132,"src":"12146:9:65","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":19162,"indexExpression":{"id":19161,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19151,"src":"12156:1:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12146:12:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19163,"name":"_MAX_AMOUNT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19232,"src":"12161:11:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12146:26:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19165,"nodeType":"ExpressionStatement","src":"12146:26:65"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19154,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19151,"src":"12112:1:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":19155,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19135,"src":"12116:9:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12112:13:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19167,"initializationExpression":{"assignments":[19151],"declarations":[{"constant":false,"id":19151,"mutability":"mutable","name":"i","nameLocation":"12105:1:65","nodeType":"VariableDeclaration","scope":19167,"src":"12097:9:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19150,"name":"uint256","nodeType":"ElementaryTypeName","src":"12097:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19153,"initialValue":{"hexValue":"30","id":19152,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12109:1:65","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12097:13:65"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":19158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"12127:3:65","subExpression":{"id":19157,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19151,"src":"12129:1:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19159,"nodeType":"ExpressionStatement","src":"12127:3:65"},"nodeType":"ForStatement","src":"12092:91:65"}]},"id":19169,"implemented":true,"kind":"function","modifiers":[],"name":"_maxTokenLimits","nameLocation":"11892:15:65","nodeType":"FunctionDefinition","parameters":{"id":19129,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19128,"mutability":"mutable","name":"pool","nameLocation":"11916:4:65","nodeType":"VariableDeclaration","scope":19169,"src":"11908:12:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19127,"name":"address","nodeType":"ElementaryTypeName","src":"11908:7:65","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11907:14:65"},"returnParameters":{"id":19133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19132,"mutability":"mutable","name":"maxLimits","nameLocation":"11962:9:65","nodeType":"VariableDeclaration","scope":19169,"src":"11945:26:65","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":19130,"name":"uint256","nodeType":"ElementaryTypeName","src":"11945:7:65","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19131,"nodeType":"ArrayTypeName","src":"11945:9:65","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11944:28:65"},"scope":19198,"src":"11883:306:65","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":19179,"nodeType":"Block","src":"12290:62:65","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19175,"name":"_IS_RETURN_ETH_LOCKED_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18582,"src":"12307:26:65","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19176,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12334:9:65","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":10123,"src":"12307:36:65","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$10108_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":19177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12307:38:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"}},"functionReturnParameters":19174,"id":19178,"nodeType":"Return","src":"12300:45:65"}]},"id":19180,"implemented":true,"kind":"function","modifiers":[],"name":"_isReturnEthLockedSlot","nameLocation":"12204:22:65","nodeType":"FunctionDefinition","parameters":{"id":19170,"nodeType":"ParameterList","parameters":[],"src":"12226:2:65"},"returnParameters":{"id":19174,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19173,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19180,"src":"12252:36:65","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":19172,"nodeType":"UserDefinedTypeName","pathNode":{"id":19171,"name":"StorageSlotExtension.BooleanSlotType","nameLocations":["12252:20:65","12273:15:65"],"nodeType":"IdentifierPath","referencedDeclaration":10108,"src":"12252:36:65"},"referencedDeclaration":10108,"src":"12252:36:65","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"}],"src":"12251:38:65"},"scope":19198,"src":"12195:157:65","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":19196,"nodeType":"Block","src":"13050:95:65","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19184,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13064:3:65","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13068:6:65","memberName":"sender","nodeType":"MemberAccess","src":"13064:10:65","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":19188,"name":"_weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18585,"src":"13086:5:65","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}],"id":19187,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13078:7:65","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19186,"name":"address","nodeType":"ElementaryTypeName","src":"13078:7:65","typeDescriptions":{}}},"id":19189,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13078:14:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"13064:28:65","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19195,"nodeType":"IfStatement","src":"13060:79:65","trueBody":{"id":19194,"nodeType":"Block","src":"13094:45:65","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19191,"name":"EthTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3031,"src":"13115:11:65","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":19192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13115:13:65","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19193,"nodeType":"RevertStatement","src":"13108:20:65"}]}}]},"documentation":{"id":19181,"nodeType":"StructuredDocumentation","src":"12358:660:65","text":" @dev Enables the Router to receive ETH. This is required for it to be able to unwrap WETH, which sends ETH to the\n caller.\n Any ETH sent to the Router outside of the WETH unwrapping mechanism would be forever locked inside the Router, so\n we prevent that from happening. Other mechanisms used to send ETH to the Router (such as being the recipient of\n an ETH swap, Pool exit or withdrawal, contract self-destruction, or receiving the block mining reward) will\n result in locked funds, but are not otherwise a security or soundness issue. This check only exists as an attempt\n to prevent user error."},"id":19197,"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":19182,"nodeType":"ParameterList","parameters":[],"src":"13030:2:65"},"returnParameters":{"id":19183,"nodeType":"ParameterList","parameters":[],"src":"13050:0:65"},"scope":19198,"src":"13023:122:65","stateMutability":"payable","virtual":false,"visibility":"external"}],"scope":19199,"src":"2091:11056:65","usedErrors":[3031,3034,5901,6355,9886,40469,40474,40477],"usedEvents":[]}],"src":"46:13102:65"},"id":65},"@balancer-labs/v3-vault/contracts/SenderGuard.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/SenderGuard.sol","exportedSymbols":{"ISenderGuard":[3041],"IVault":[3111],"IWETH":[291],"SenderGuard":[19328],"StorageSlotExtension":[10285],"TransientStorageHelpers":[7442]},"id":19329,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":19200,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:66"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol","id":19202,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19329,"sourceUnit":292,"src":"72:93:66","symbolAliases":[{"foreign":{"id":19201,"name":"IWETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":291,"src":"81:5:66","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/ISenderGuard.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/ISenderGuard.sol","id":19204,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19329,"sourceUnit":3042,"src":"166:93:66","symbolAliases":[{"foreign":{"id":19203,"name":"ISenderGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3041,"src":"175:12:66","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":19206,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19329,"sourceUnit":3112,"src":"260:81:66","symbolAliases":[{"foreign":{"id":19205,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"269:6:66","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","id":19208,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19329,"sourceUnit":10286,"src":"343:120:66","symbolAliases":[{"foreign":{"id":19207,"name":"StorageSlotExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10285,"src":"352:20:66","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","id":19210,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19329,"sourceUnit":7443,"src":"464:125:66","symbolAliases":[{"foreign":{"id":19209,"name":"TransientStorageHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7442,"src":"477:23:66","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":19212,"name":"ISenderGuard","nameLocations":["999:12:66"],"nodeType":"IdentifierPath","referencedDeclaration":3041,"src":"999:12:66"},"id":19213,"nodeType":"InheritanceSpecifier","src":"999:12:66"}],"canonicalName":"SenderGuard","contractDependencies":[],"contractKind":"contract","documentation":{"id":19211,"nodeType":"StructuredDocumentation","src":"591:374:66","text":" @notice Abstract base contract for functions shared among all Routers.\n @dev Common functionality includes access to the sender (which would normally be obscured, since msg.sender in the\n Vault is the Router contract itself, not the account that invoked the Router), versioning, and the external\n invocation functions (`permitBatchAndCall` and `multicall`)."},"fullyImplemented":true,"id":19328,"linearizedBaseContracts":[19328,3041],"name":"SenderGuard","nameLocation":"984:11:66","nodeType":"ContractDefinition","nodes":[{"global":false,"id":19215,"libraryName":{"id":19214,"name":"StorageSlotExtension","nameLocations":["1024:20:66"],"nodeType":"IdentifierPath","referencedDeclaration":10285,"src":"1024:20:66"},"nodeType":"UsingForDirective","src":"1018:33:66"},{"constant":false,"id":19225,"mutability":"immutable","name":"_SENDER_SLOT","nameLocation":"1472:12:66","nodeType":"VariableDeclaration","scope":19328,"src":"1446:112:66","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":19216,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1446:7:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"expression":{"arguments":[{"id":19220,"name":"SenderGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19328,"src":"1530:11:66","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SenderGuard_$19328_$","typeString":"type(contract SenderGuard)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_SenderGuard_$19328_$","typeString":"type(contract SenderGuard)"}],"id":19219,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"1525:4:66","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":19221,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1525:17:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_SenderGuard_$19328","typeString":"type(contract SenderGuard)"}},"id":19222,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1543:4:66","memberName":"name","nodeType":"MemberAccess","src":"1525:22:66","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"73656e646572","id":19223,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1549:8:66","typeDescriptions":{"typeIdentifier":"t_stringliteral_168e92ce035ba45e59a0314b0ed9a9e619b284aed8f6e5ab0a596efd5c9f5cf9","typeString":"literal_string \"sender\""},"value":"sender"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_stringliteral_168e92ce035ba45e59a0314b0ed9a9e619b284aed8f6e5ab0a596efd5c9f5cf9","typeString":"literal_string \"sender\""}],"expression":{"id":19217,"name":"TransientStorageHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7442,"src":"1487:23:66","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_TransientStorageHelpers_$7442_$","typeString":"type(library TransientStorageHelpers)"}},"id":19218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1511:13:66","memberName":"calculateSlot","nodeType":"MemberAccess","referencedDeclaration":6911,"src":"1487:37:66","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory,string memory) pure returns (bytes32)"}},"id":19224,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1487:71:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":true,"id":19232,"mutability":"constant","name":"_MAX_AMOUNT","nameLocation":"1806:11:66","nodeType":"VariableDeclaration","scope":19328,"src":"1780:57:66","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19226,"name":"uint256","nodeType":"ElementaryTypeName","src":"1780:7:66","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"expression":{"arguments":[{"id":19229,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1825:7:66","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":19228,"name":"uint128","nodeType":"ElementaryTypeName","src":"1825:7:66","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"}],"id":19227,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"1820:4:66","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":19230,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1820:13:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint128","typeString":"type(uint128)"}},"id":19231,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1834:3:66","memberName":"max","nodeType":"MemberAccess","src":"1820:17:66","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"},{"body":{"id":19248,"nodeType":"Block","src":"3565:123:66","statements":[{"assignments":[19238],"declarations":[{"constant":false,"id":19238,"mutability":"mutable","name":"isExternalSender","nameLocation":"3580:16:66","nodeType":"VariableDeclaration","scope":19248,"src":"3575:21:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19237,"name":"bool","nodeType":"ElementaryTypeName","src":"3575:4:66","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":19242,"initialValue":{"arguments":[{"id":19240,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19235,"src":"3611:6:66","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19239,"name":"_saveSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19282,"src":"3599:11:66","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$_t_bool_$","typeString":"function (address) returns (bool)"}},"id":19241,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3599:19:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"3575:43:66"},{"id":19243,"nodeType":"PlaceholderStatement","src":"3628:1:66"},{"expression":{"arguments":[{"id":19245,"name":"isExternalSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19238,"src":"3664:16:66","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":19244,"name":"_discardSenderIfRequired","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19300,"src":"3639:24:66","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bool_$returns$__$","typeString":"function (bool)"}},"id":19246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3639:42:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19247,"nodeType":"ExpressionStatement","src":"3639:42:66"}]},"documentation":{"id":19233,"nodeType":"StructuredDocumentation","src":"1844:1680:66","text":" @notice Saves the user or contract that initiated the current operation.\n @dev It is possible to nest router calls (e.g., with reentrant hooks), but the sender returned by the Router's\n `getSender` function will always be the \"outermost\" caller. Some transactions require the Router to identify\n multiple senders. Consider the following example:\n - ContractA has a function that calls the Router, then calls ContractB with the output. ContractB in turn\n calls back into the Router.\n - Imagine further that ContractA is a pool with a \"before\" hook that also calls the Router.\n When the user calls the function on ContractA, there are three calls to the Router in the same transaction:\n - 1st call: When ContractA calls the Router directly, to initiate an operation on the pool (say, a swap).\n (Sender is contractA, initiator of the operation.)\n - 2nd call: When the pool operation invokes a hook (say onBeforeSwap), which calls back into the Router.\n This is a \"nested\" call within the original pool operation. The nested call returns, then the\n before hook returns, the Router completes the operation, and finally returns back to ContractA\n with the result (e.g., a calculated amount of tokens).\n (Nested call; sender is still ContractA through all of this.)\n - 3rd call: When the first operation is complete, ContractA calls ContractB, which in turn calls the Router.\n (Not nested, as the original router call from contractA has returned. Sender is now ContractB.)"},"id":19249,"name":"saveSender","nameLocation":"3538:10:66","nodeType":"ModifierDefinition","parameters":{"id":19236,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19235,"mutability":"mutable","name":"sender","nameLocation":"3557:6:66","nodeType":"VariableDeclaration","scope":19249,"src":"3549:14:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19234,"name":"address","nodeType":"ElementaryTypeName","src":"3549:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3548:16:66"},"src":"3529:159:66","virtual":false,"visibility":"internal"},{"body":{"id":19281,"nodeType":"Block","src":"3772:273:66","statements":[{"assignments":[19257],"declarations":[{"constant":false,"id":19257,"mutability":"mutable","name":"savedSender","nameLocation":"3790:11:66","nodeType":"VariableDeclaration","scope":19281,"src":"3782:19:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19256,"name":"address","nodeType":"ElementaryTypeName","src":"3782:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":19262,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":19258,"name":"_getSenderSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19327,"src":"3804:14:66","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressSlotType_$10091_$","typeString":"function () view returns (StorageSlotExtension.AddressSlotType)"}},"id":19259,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3804:16:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$10091","typeString":"StorageSlotExtension.AddressSlotType"}},"id":19260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3821:5:66","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":10185,"src":"3804:22:66","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressSlotType_$10091_$returns$_t_address_$attached_to$_t_userDefinedValueType$_AddressSlotType_$10091_$","typeString":"function (StorageSlotExtension.AddressSlotType) view returns (address)"}},"id":19261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3804:24:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3782:46:66"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19268,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19263,"name":"savedSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19257,"src":"3919:11:66","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":19266,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3942:1:66","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":19265,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3934:7:66","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19264,"name":"address","nodeType":"ElementaryTypeName","src":"3934:7:66","typeDescriptions":{}}},"id":19267,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3934:10:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3919:25:66","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19280,"nodeType":"IfStatement","src":"3915:124:66","trueBody":{"id":19279,"nodeType":"Block","src":"3946:93:66","statements":[{"expression":{"arguments":[{"id":19272,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19251,"src":"3984:6:66","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":19269,"name":"_getSenderSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19327,"src":"3960:14:66","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressSlotType_$10091_$","typeString":"function () view returns (StorageSlotExtension.AddressSlotType)"}},"id":19270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3960:16:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$10091","typeString":"StorageSlotExtension.AddressSlotType"}},"id":19271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3977:6:66","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":10196,"src":"3960:23:66","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressSlotType_$10091_$_t_address_$returns$__$attached_to$_t_userDefinedValueType$_AddressSlotType_$10091_$","typeString":"function (StorageSlotExtension.AddressSlotType,address)"}},"id":19273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3960:31:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19274,"nodeType":"ExpressionStatement","src":"3960:31:66"},{"expression":{"id":19277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19275,"name":"isExternalSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19254,"src":"4005:16:66","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":19276,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4024:4:66","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"4005:23:66","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19278,"nodeType":"ExpressionStatement","src":"4005:23:66"}]}}]},"id":19282,"implemented":true,"kind":"function","modifiers":[],"name":"_saveSender","nameLocation":"3703:11:66","nodeType":"FunctionDefinition","parameters":{"id":19252,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19251,"mutability":"mutable","name":"sender","nameLocation":"3723:6:66","nodeType":"VariableDeclaration","scope":19282,"src":"3715:14:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19250,"name":"address","nodeType":"ElementaryTypeName","src":"3715:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3714:16:66"},"returnParameters":{"id":19255,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19254,"mutability":"mutable","name":"isExternalSender","nameLocation":"3754:16:66","nodeType":"VariableDeclaration","scope":19282,"src":"3749:21:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19253,"name":"bool","nodeType":"ElementaryTypeName","src":"3749:4:66","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3748:23:66"},"scope":19328,"src":"3694:351:66","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":19299,"nodeType":"Block","src":"4117:253:66","statements":[{"condition":{"id":19287,"name":"isExternalSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19284,"src":"4286:16:66","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19298,"nodeType":"IfStatement","src":"4282:82:66","trueBody":{"id":19297,"nodeType":"Block","src":"4304:60:66","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":19293,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4350:1:66","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":19292,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4342:7:66","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19291,"name":"address","nodeType":"ElementaryTypeName","src":"4342:7:66","typeDescriptions":{}}},"id":19294,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4342:10:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":19288,"name":"_getSenderSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19327,"src":"4318:14:66","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressSlotType_$10091_$","typeString":"function () view returns (StorageSlotExtension.AddressSlotType)"}},"id":19289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4318:16:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$10091","typeString":"StorageSlotExtension.AddressSlotType"}},"id":19290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4335:6:66","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":10196,"src":"4318:23:66","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_AddressSlotType_$10091_$_t_address_$returns$__$attached_to$_t_userDefinedValueType$_AddressSlotType_$10091_$","typeString":"function (StorageSlotExtension.AddressSlotType,address)"}},"id":19295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4318:35:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19296,"nodeType":"ExpressionStatement","src":"4318:35:66"}]}}]},"id":19300,"implemented":true,"kind":"function","modifiers":[],"name":"_discardSenderIfRequired","nameLocation":"4060:24:66","nodeType":"FunctionDefinition","parameters":{"id":19285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19284,"mutability":"mutable","name":"isExternalSender","nameLocation":"4090:16:66","nodeType":"VariableDeclaration","scope":19300,"src":"4085:21:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19283,"name":"bool","nodeType":"ElementaryTypeName","src":"4085:4:66","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4084:23:66"},"returnParameters":{"id":19286,"nodeType":"ParameterList","parameters":[],"src":"4117:0:66"},"scope":19328,"src":"4051:319:66","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":19303,"nodeType":"Block","src":"4390:64:66","statements":[]},"id":19304,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":19301,"nodeType":"ParameterList","parameters":[],"src":"4387:2:66"},"returnParameters":{"id":19302,"nodeType":"ParameterList","parameters":[],"src":"4390:0:66"},"scope":19328,"src":"4376:78:66","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[3040],"body":{"id":19315,"nodeType":"Block","src":"4546:48:66","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":19310,"name":"_getSenderSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19327,"src":"4563:14:66","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressSlotType_$10091_$","typeString":"function () view returns (StorageSlotExtension.AddressSlotType)"}},"id":19311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4563:16:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$10091","typeString":"StorageSlotExtension.AddressSlotType"}},"id":19312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4580:5:66","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":10185,"src":"4563:22:66","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_AddressSlotType_$10091_$returns$_t_address_$attached_to$_t_userDefinedValueType$_AddressSlotType_$10091_$","typeString":"function (StorageSlotExtension.AddressSlotType) view returns (address)"}},"id":19313,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4563:24:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":19309,"id":19314,"nodeType":"Return","src":"4556:31:66"}]},"documentation":{"id":19305,"nodeType":"StructuredDocumentation","src":"4460:28:66","text":"@inheritdoc ISenderGuard"},"functionSelector":"5e01eb5a","id":19316,"implemented":true,"kind":"function","modifiers":[],"name":"getSender","nameLocation":"4502:9:66","nodeType":"FunctionDefinition","parameters":{"id":19306,"nodeType":"ParameterList","parameters":[],"src":"4511:2:66"},"returnParameters":{"id":19309,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19308,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19316,"src":"4537:7:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19307,"name":"address","nodeType":"ElementaryTypeName","src":"4537:7:66","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4536:9:66"},"scope":19328,"src":"4493:101:66","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":19326,"nodeType":"Block","src":"4687:48:66","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19322,"name":"_SENDER_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19225,"src":"4704:12:66","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":19323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4717:9:66","memberName":"asAddress","nodeType":"MemberAccess","referencedDeclaration":10106,"src":"4704:22:66","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_AddressSlotType_$10091_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.AddressSlotType)"}},"id":19324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4704:24:66","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$10091","typeString":"StorageSlotExtension.AddressSlotType"}},"functionReturnParameters":19321,"id":19325,"nodeType":"Return","src":"4697:31:66"}]},"id":19327,"implemented":true,"kind":"function","modifiers":[],"name":"_getSenderSlot","nameLocation":"4609:14:66","nodeType":"FunctionDefinition","parameters":{"id":19317,"nodeType":"ParameterList","parameters":[],"src":"4623:2:66"},"returnParameters":{"id":19321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19320,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19327,"src":"4649:36:66","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$10091","typeString":"StorageSlotExtension.AddressSlotType"},"typeName":{"id":19319,"nodeType":"UserDefinedTypeName","pathNode":{"id":19318,"name":"StorageSlotExtension.AddressSlotType","nameLocations":["4649:20:66","4670:15:66"],"nodeType":"IdentifierPath","referencedDeclaration":10091,"src":"4649:36:66"},"referencedDeclaration":10091,"src":"4649:36:66","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressSlotType_$10091","typeString":"StorageSlotExtension.AddressSlotType"}},"visibility":"internal"}],"src":"4648:38:66"},"scope":19328,"src":"4600:135:66","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":19329,"src":"966:3771:66","usedErrors":[3031,3034],"usedEvents":[]}],"src":"46:4692:66"},"id":66},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","exportedSymbols":{"CommonAuthentication":[5786],"IAuthorizer":[1455],"IVault":[3111],"SingletonAuthentication":[19387]},"id":19388,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":19330,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:67"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":19332,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19388,"sourceUnit":1456,"src":"72:91:67","symbolAliases":[{"foreign":{"id":19331,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1455,"src":"81:11:67","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":19334,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19388,"sourceUnit":3112,"src":"164:81:67","symbolAliases":[{"foreign":{"id":19333,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"173:6:67","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol","id":19336,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":19388,"sourceUnit":5787,"src":"247:115:67","symbolAliases":[{"foreign":{"id":19335,"name":"CommonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5786,"src":"256:20:67","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":19338,"name":"CommonAuthentication","nameLocations":["784:20:67"],"nodeType":"IdentifierPath","referencedDeclaration":5786,"src":"784:20:67"},"id":19339,"nodeType":"InheritanceSpecifier","src":"784:20:67"}],"canonicalName":"SingletonAuthentication","contractDependencies":[],"contractKind":"contract","documentation":{"id":19337,"nodeType":"StructuredDocumentation","src":"364:374:67","text":" @notice Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\n @dev The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned\n functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same\n function name."},"fullyImplemented":true,"id":19387,"linearizedBaseContracts":[19387,5786,5498,243],"name":"SingletonAuthentication","nameLocation":"757:23:67","nodeType":"ContractDefinition","nodes":[{"body":{"id":19361,"nodeType":"Block","src":"981:64:67","statements":[]},"id":19362,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":19345,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19342,"src":"932:5:67","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"id":19354,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"971:4:67","typeDescriptions":{"typeIdentifier":"t_contract$_SingletonAuthentication_$19387","typeString":"contract SingletonAuthentication"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SingletonAuthentication_$19387","typeString":"contract SingletonAuthentication"}],"id":19353,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"963:7:67","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19352,"name":"address","nodeType":"ElementaryTypeName","src":"963:7:67","typeDescriptions":{}}},"id":19355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"963:13:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19351,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"955:7:67","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":19350,"name":"uint160","nodeType":"ElementaryTypeName","src":"955:7:67","typeDescriptions":{}}},"id":19356,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"955:22:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":19349,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"947:7:67","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":19348,"name":"uint256","nodeType":"ElementaryTypeName","src":"947:7:67","typeDescriptions":{}}},"id":19357,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"947:31:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19347,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"939:7:67","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":19346,"name":"bytes32","nodeType":"ElementaryTypeName","src":"939:7:67","typeDescriptions":{}}},"id":19358,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"939:40:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":19359,"kind":"baseConstructorSpecifier","modifierName":{"id":19344,"name":"CommonAuthentication","nameLocations":["911:20:67"],"nodeType":"IdentifierPath","referencedDeclaration":5786,"src":"911:20:67"},"nodeType":"ModifierInvocation","src":"911:69:67"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":19343,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19342,"mutability":"mutable","name":"vault","nameLocation":"904:5:67","nodeType":"VariableDeclaration","scope":19362,"src":"897:12:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":19341,"nodeType":"UserDefinedTypeName","pathNode":{"id":19340,"name":"IVault","nameLocations":["897:6:67"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"897:6:67"},"referencedDeclaration":3111,"src":"897:6:67","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"}],"src":"896:14:67"},"returnParameters":{"id":19360,"nodeType":"ParameterList","parameters":[],"src":"981:0:67"},"scope":19387,"src":"885:160:67","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":19372,"nodeType":"Block","src":"1225:35:67","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":19369,"name":"_getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5699,"src":"1242:9:67","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$3111_$","typeString":"function () view returns (contract IVault)"}},"id":19370,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1242:11:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"functionReturnParameters":19368,"id":19371,"nodeType":"Return","src":"1235:18:67"}]},"documentation":{"id":19363,"nodeType":"StructuredDocumentation","src":"1051:120:67","text":" @notice Get the address of the Balancer Vault.\n @return vault An interface pointer to the Vault"},"functionSelector":"8d928af8","id":19373,"implemented":true,"kind":"function","modifiers":[],"name":"getVault","nameLocation":"1185:8:67","nodeType":"FunctionDefinition","parameters":{"id":19364,"nodeType":"ParameterList","parameters":[],"src":"1193:2:67"},"returnParameters":{"id":19368,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19367,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19373,"src":"1217:6:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":19366,"nodeType":"UserDefinedTypeName","pathNode":{"id":19365,"name":"IVault","nameLocations":["1217:6:67"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"1217:6:67"},"referencedDeclaration":3111,"src":"1217:6:67","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"}],"src":"1216:8:67"},"scope":19387,"src":"1176:84:67","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":19385,"nodeType":"Block","src":"1456:50:67","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":19380,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19373,"src":"1473:8:67","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$3111_$","typeString":"function () view returns (contract IVault)"}},"id":19381,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1473:10:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":19382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1484:13:67","memberName":"getAuthorizer","nodeType":"MemberAccess","referencedDeclaration":4425,"src":"1473:24:67","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IAuthorizer_$1455_$","typeString":"function () view external returns (contract IAuthorizer)"}},"id":19383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1473:26:67","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"}},"functionReturnParameters":19379,"id":19384,"nodeType":"Return","src":"1466:33:67"}]},"documentation":{"id":19374,"nodeType":"StructuredDocumentation","src":"1266:126:67","text":" @notice Get the address of the Authorizer.\n @return authorizer An interface pointer to the Authorizer"},"functionSelector":"aaabadc5","id":19386,"implemented":true,"kind":"function","modifiers":[],"name":"getAuthorizer","nameLocation":"1406:13:67","nodeType":"FunctionDefinition","parameters":{"id":19375,"nodeType":"ParameterList","parameters":[],"src":"1419:2:67"},"returnParameters":{"id":19379,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19378,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":19386,"src":"1443:11:67","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"},"typeName":{"id":19377,"nodeType":"UserDefinedTypeName","pathNode":{"id":19376,"name":"IAuthorizer","nameLocations":["1443:11:67"],"nodeType":"IdentifierPath","referencedDeclaration":1455,"src":"1443:11:67"},"referencedDeclaration":1455,"src":"1443:11:67","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"1442:13:67"},"scope":19387,"src":"1397:109:67","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":19388,"src":"739:769:67","usedErrors":[234],"usedEvents":[]}],"src":"46:1463:67"},"id":67},"@balancer-labs/v3-vault/contracts/Vault.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/Vault.sol","exportedSymbols":{"AddLiquidityKind":[4807],"AddLiquidityParams":[4823],"Address":[40714],"AfterSwapParams":[4801],"BasePoolMath":[12083],"BufferHelpers":[5610],"BufferWrapOrUnwrapParams":[4862],"CastingHelpers":[5642],"FEE_BITLENGTH":[4865],"FEE_SCALING_FACTOR":[4868],"FixedPoint":[8208],"HookFlags":[4627],"HooksConfig":[4651],"HooksConfigLib":[29474],"IAuthorizer":[1455],"IBasePool":[1505],"IERC20":[40109],"IERC4626":[39833],"IHooks":[2026],"IPoolLiquidity":[2082],"IProtocolFeeController":[2420],"IRateProvider":[263],"IVaultAdmin":[3401],"IVaultExtension":[4426],"IVaultMain":[4562],"InputHelpers":[6193],"LiquidityManagement":[4580],"MAX_FEE_PERCENTAGE":[4871],"PackedTokenBalance":[6344],"PoolConfig":[4605],"PoolConfigBits":[4582],"PoolConfigLib":[30441],"PoolData":[4729],"PoolDataLib":[31031],"PoolRoleAccounts":[4677],"PoolSwapParams":[4772],"Proxy":[40031],"RemoveLiquidityKind":[4828],"RemoveLiquidityParams":[4844],"Rounding":[4732],"SafeCast":[44983],"SafeERC20":[40461],"ScalingHelpers":[6848],"StorageSlotExtension":[10285],"SwapKind":[4735],"SwapState":[4661],"TokenConfig":[4694],"TokenInfo":[4704],"TokenType":[4681],"TransientStorageHelpers":[7442],"Vault":[22797],"VaultCommon":[25606],"VaultState":[4669],"VaultStateBits":[31184],"VaultStateLib":[31325],"VaultSwapParams":[4754],"WrappingDirection":[4847]},"id":22798,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":19389,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:68"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":19391,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22798,"sourceUnit":40462,"src":"72:84:68","symbolAliases":[{"foreign":{"id":19390,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40461,"src":"81:9:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":19393,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22798,"sourceUnit":44984,"src":"157:75:68","symbolAliases":[{"foreign":{"id":19392,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44983,"src":"166:8:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":19395,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22798,"sourceUnit":39834,"src":"233:75:68","symbolAliases":[{"foreign":{"id":19394,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39833,"src":"242:8:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":19397,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22798,"sourceUnit":40110,"src":"309:72:68","symbolAliases":[{"foreign":{"id":19396,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"318:6:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"@openzeppelin/contracts/utils/Address.sol","id":19399,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22798,"sourceUnit":40715,"src":"382:68:68","symbolAliases":[{"foreign":{"id":19398,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40714,"src":"391:7:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/proxy/Proxy.sol","file":"@openzeppelin/contracts/proxy/Proxy.sol","id":19401,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22798,"sourceUnit":40032,"src":"451:64:68","symbolAliases":[{"foreign":{"id":19400,"name":"Proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40031,"src":"460:5:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":19403,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22798,"sourceUnit":2421,"src":"517:113:68","symbolAliases":[{"foreign":{"id":19402,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2420,"src":"526:22:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","id":19405,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22798,"sourceUnit":4427,"src":"631:99:68","symbolAliases":[{"foreign":{"id":19404,"name":"IVaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4426,"src":"640:15:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IPoolLiquidity.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IPoolLiquidity.sol","id":19407,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22798,"sourceUnit":2083,"src":"731:97:68","symbolAliases":[{"foreign":{"id":19406,"name":"IPoolLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2082,"src":"740:14:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":19409,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22798,"sourceUnit":1456,"src":"829:91:68","symbolAliases":[{"foreign":{"id":19408,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1455,"src":"838:11:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","id":19411,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22798,"sourceUnit":3402,"src":"921:91:68","symbolAliases":[{"foreign":{"id":19410,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3401,"src":"930:11:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol","id":19413,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22798,"sourceUnit":4563,"src":"1013:89:68","symbolAliases":[{"foreign":{"id":19412,"name":"IVaultMain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4562,"src":"1022:10:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol","id":19415,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22798,"sourceUnit":1506,"src":"1103:87:68","symbolAliases":[{"foreign":{"id":19414,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1505,"src":"1112:9:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","id":19417,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22798,"sourceUnit":2027,"src":"1191:81:68","symbolAliases":[{"foreign":{"id":19416,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2026,"src":"1200:6:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":19418,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22798,"sourceUnit":4872,"src":"1273:69:68","symbolAliases":[],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","id":19420,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22798,"sourceUnit":10286,"src":"1344:120:68","symbolAliases":[{"foreign":{"id":19419,"name":"StorageSlotExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10285,"src":"1353:20:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","id":19422,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22798,"sourceUnit":6345,"src":"1465:111:68","symbolAliases":[{"foreign":{"id":19421,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6344,"src":"1474:18:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol","id":19424,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22798,"sourceUnit":6849,"src":"1577:103:68","symbolAliases":[{"foreign":{"id":19423,"name":"ScalingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6848,"src":"1586:14:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol","id":19426,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22798,"sourceUnit":5643,"src":"1681:103:68","symbolAliases":[{"foreign":{"id":19425,"name":"CastingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5642,"src":"1690:14:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/BufferHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/BufferHelpers.sol","id":19428,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22798,"sourceUnit":5611,"src":"1785:101:68","symbolAliases":[{"foreign":{"id":19427,"name":"BufferHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5610,"src":"1794:13:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","id":19430,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22798,"sourceUnit":6194,"src":"1887:99:68","symbolAliases":[{"foreign":{"id":19429,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6193,"src":"1896:12:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":19432,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22798,"sourceUnit":8209,"src":"1987:92:68","symbolAliases":[{"foreign":{"id":19431,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"1996:10:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","id":19434,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22798,"sourceUnit":7443,"src":"2080:125:68","symbolAliases":[{"foreign":{"id":19433,"name":"TransientStorageHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7442,"src":"2093:23:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/VaultStateLib.sol","file":"./lib/VaultStateLib.sol","id":19437,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22798,"sourceUnit":31326,"src":"2207:72:68","symbolAliases":[{"foreign":{"id":19435,"name":"VaultStateLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31325,"src":"2216:13:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":19436,"name":"VaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31184,"src":"2231:14:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/HooksConfigLib.sol","file":"./lib/HooksConfigLib.sol","id":19439,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22798,"sourceUnit":29475,"src":"2280:58:68","symbolAliases":[{"foreign":{"id":19438,"name":"HooksConfigLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29474,"src":"2289:14:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/PoolConfigLib.sol","file":"./lib/PoolConfigLib.sol","id":19441,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22798,"sourceUnit":30442,"src":"2339:56:68","symbolAliases":[{"foreign":{"id":19440,"name":"PoolConfigLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30441,"src":"2348:13:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/PoolDataLib.sol","file":"./lib/PoolDataLib.sol","id":19443,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22798,"sourceUnit":31032,"src":"2396:52:68","symbolAliases":[{"foreign":{"id":19442,"name":"PoolDataLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31031,"src":"2405:11:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/BasePoolMath.sol","file":"./BasePoolMath.sol","id":19445,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22798,"sourceUnit":12084,"src":"2449:50:68","symbolAliases":[{"foreign":{"id":19444,"name":"BasePoolMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12083,"src":"2458:12:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultCommon.sol","file":"./VaultCommon.sol","id":19447,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":22798,"sourceUnit":25607,"src":"2500:48:68","symbolAliases":[{"foreign":{"id":19446,"name":"VaultCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25606,"src":"2509:11:68","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":19448,"name":"IVaultMain","nameLocations":["2568:10:68"],"nodeType":"IdentifierPath","referencedDeclaration":4562,"src":"2568:10:68"},"id":19449,"nodeType":"InheritanceSpecifier","src":"2568:10:68"},{"baseName":{"id":19450,"name":"VaultCommon","nameLocations":["2580:11:68"],"nodeType":"IdentifierPath","referencedDeclaration":25606,"src":"2580:11:68"},"id":19451,"nodeType":"InheritanceSpecifier","src":"2580:11:68"},{"baseName":{"id":19452,"name":"Proxy","nameLocations":["2593:5:68"],"nodeType":"IdentifierPath","referencedDeclaration":40031,"src":"2593:5:68"},"id":19453,"nodeType":"InheritanceSpecifier","src":"2593:5:68"}],"canonicalName":"Vault","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":22797,"internalFunctionIDs":{"6467":1,"6488":2},"linearizedBaseContracts":[22797,40031,25606,39429,1824,39900,9942,28384,3768,4007,4562],"name":"Vault","nameLocation":"2559:5:68","nodeType":"ContractDefinition","nodes":[{"global":false,"id":19456,"libraryName":{"id":19454,"name":"PackedTokenBalance","nameLocations":["2611:18:68"],"nodeType":"IdentifierPath","referencedDeclaration":6344,"src":"2611:18:68"},"nodeType":"UsingForDirective","src":"2605:37:68","typeName":{"id":19455,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2634:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"global":false,"id":19459,"libraryName":{"id":19457,"name":"BufferHelpers","nameLocations":["2653:13:68"],"nodeType":"IdentifierPath","referencedDeclaration":5610,"src":"2653:13:68"},"nodeType":"UsingForDirective","src":"2647:32:68","typeName":{"id":19458,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2671:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"global":false,"id":19462,"libraryName":{"id":19460,"name":"InputHelpers","nameLocations":["2690:12:68"],"nodeType":"IdentifierPath","referencedDeclaration":6193,"src":"2690:12:68"},"nodeType":"UsingForDirective","src":"2684:31:68","typeName":{"id":19461,"name":"uint256","nodeType":"ElementaryTypeName","src":"2707:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":19464,"libraryName":{"id":19463,"name":"FixedPoint","nameLocations":["2726:10:68"],"nodeType":"IdentifierPath","referencedDeclaration":8208,"src":"2726:10:68"},"nodeType":"UsingForDirective","src":"2720:23:68"},{"global":false,"id":19466,"libraryName":{"id":19465,"name":"Address","nameLocations":["2754:7:68"],"nodeType":"IdentifierPath","referencedDeclaration":40714,"src":"2754:7:68"},"nodeType":"UsingForDirective","src":"2748:20:68"},{"global":false,"id":19470,"libraryName":{"id":19467,"name":"CastingHelpers","nameLocations":["2779:14:68"],"nodeType":"IdentifierPath","referencedDeclaration":5642,"src":"2779:14:68"},"nodeType":"UsingForDirective","src":"2773:35:68","typeName":{"baseType":{"id":19468,"name":"uint256","nodeType":"ElementaryTypeName","src":"2798:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19469,"nodeType":"ArrayTypeName","src":"2798:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},{"global":false,"id":19472,"libraryName":{"id":19471,"name":"SafeCast","nameLocations":["2819:8:68"],"nodeType":"IdentifierPath","referencedDeclaration":44983,"src":"2819:8:68"},"nodeType":"UsingForDirective","src":"2813:21:68"},{"global":false,"id":19476,"libraryName":{"id":19473,"name":"SafeERC20","nameLocations":["2845:9:68"],"nodeType":"IdentifierPath","referencedDeclaration":40461,"src":"2845:9:68"},"nodeType":"UsingForDirective","src":"2839:27:68","typeName":{"id":19475,"nodeType":"UserDefinedTypeName","pathNode":{"id":19474,"name":"IERC20","nameLocations":["2859:6:68"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"2859:6:68"},"referencedDeclaration":40109,"src":"2859:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}},{"global":false,"id":19480,"libraryName":{"id":19477,"name":"PoolConfigLib","nameLocations":["2877:13:68"],"nodeType":"IdentifierPath","referencedDeclaration":30441,"src":"2877:13:68"},"nodeType":"UsingForDirective","src":"2871:39:68","typeName":{"id":19479,"nodeType":"UserDefinedTypeName","pathNode":{"id":19478,"name":"PoolConfigBits","nameLocations":["2895:14:68"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"2895:14:68"},"referencedDeclaration":4582,"src":"2895:14:68","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}},{"global":false,"id":19484,"libraryName":{"id":19481,"name":"HooksConfigLib","nameLocations":["2921:14:68"],"nodeType":"IdentifierPath","referencedDeclaration":29474,"src":"2921:14:68"},"nodeType":"UsingForDirective","src":"2915:40:68","typeName":{"id":19483,"nodeType":"UserDefinedTypeName","pathNode":{"id":19482,"name":"PoolConfigBits","nameLocations":["2940:14:68"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"2940:14:68"},"referencedDeclaration":4582,"src":"2940:14:68","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}},{"global":false,"id":19488,"libraryName":{"id":19485,"name":"VaultStateLib","nameLocations":["2966:13:68"],"nodeType":"IdentifierPath","referencedDeclaration":31325,"src":"2966:13:68"},"nodeType":"UsingForDirective","src":"2960:39:68","typeName":{"id":19487,"nodeType":"UserDefinedTypeName","pathNode":{"id":19486,"name":"VaultStateBits","nameLocations":["2984:14:68"],"nodeType":"IdentifierPath","referencedDeclaration":31184,"src":"2984:14:68"},"referencedDeclaration":31184,"src":"2984:14:68","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}}},{"global":false,"id":19490,"libraryName":{"id":19489,"name":"ScalingHelpers","nameLocations":["3010:14:68"],"nodeType":"IdentifierPath","referencedDeclaration":6848,"src":"3010:14:68"},"nodeType":"UsingForDirective","src":"3004:27:68"},{"global":false,"id":19492,"libraryName":{"id":19491,"name":"TransientStorageHelpers","nameLocations":["3042:23:68"],"nodeType":"IdentifierPath","referencedDeclaration":7442,"src":"3042:23:68"},"nodeType":"UsingForDirective","src":"3036:36:68"},{"global":false,"id":19494,"libraryName":{"id":19493,"name":"StorageSlotExtension","nameLocations":["3083:20:68"],"nodeType":"IdentifierPath","referencedDeclaration":10285,"src":"3083:20:68"},"nodeType":"UsingForDirective","src":"3077:33:68"},{"global":false,"id":19498,"libraryName":{"id":19495,"name":"PoolDataLib","nameLocations":["3121:11:68"],"nodeType":"IdentifierPath","referencedDeclaration":31031,"src":"3121:11:68"},"nodeType":"UsingForDirective","src":"3115:31:68","typeName":{"id":19497,"nodeType":"UserDefinedTypeName","pathNode":{"id":19496,"name":"PoolData","nameLocations":["3137:8:68"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"3137:8:68"},"referencedDeclaration":4729,"src":"3137:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}}},{"constant":false,"id":19501,"mutability":"immutable","name":"_vaultExtension","nameLocation":"3256:15:68","nodeType":"VariableDeclaration","scope":22797,"src":"3222:49:68","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$4426","typeString":"contract IVaultExtension"},"typeName":{"id":19500,"nodeType":"UserDefinedTypeName","pathNode":{"id":19499,"name":"IVaultExtension","nameLocations":["3222:15:68"],"nodeType":"IdentifierPath","referencedDeclaration":4426,"src":"3222:15:68"},"referencedDeclaration":4426,"src":"3222:15:68","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$4426","typeString":"contract IVaultExtension"}},"visibility":"private"},{"body":{"id":19612,"nodeType":"Block","src":"3392:893:68","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19515,"name":"vaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19504,"src":"3414:14:68","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$4426","typeString":"contract IVaultExtension"}},"id":19516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3429:5:68","memberName":"vault","nodeType":"MemberAccess","referencedDeclaration":4030,"src":"3414:20:68","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IVault_$3111_$","typeString":"function () view external returns (contract IVault)"}},"id":19517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3414:22:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}],"id":19514,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3406:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19513,"name":"address","nodeType":"ElementaryTypeName","src":"3406:7:68","typeDescriptions":{}}},"id":19518,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3406:31:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":19521,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3449:4:68","typeDescriptions":{"typeIdentifier":"t_contract$_Vault_$22797","typeString":"contract Vault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Vault_$22797","typeString":"contract Vault"}],"id":19520,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3441:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19519,"name":"address","nodeType":"ElementaryTypeName","src":"3441:7:68","typeDescriptions":{}}},"id":19522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3441:13:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3406:48:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19528,"nodeType":"IfStatement","src":"3402:117:68","trueBody":{"id":19527,"nodeType":"Block","src":"3456:63:68","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19524,"name":"WrongVaultExtensionDeployment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3758,"src":"3477:29:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":19525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3477:31:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19526,"nodeType":"RevertStatement","src":"3470:38:68"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":19539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":19531,"name":"protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19510,"src":"3541:21:68","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}},"id":19532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3563:5:68","memberName":"vault","nodeType":"MemberAccess","referencedDeclaration":2226,"src":"3541:27:68","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IVault_$3111_$","typeString":"function () view external returns (contract IVault)"}},"id":19533,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3541:29:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}],"id":19530,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3533:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19529,"name":"address","nodeType":"ElementaryTypeName","src":"3533:7:68","typeDescriptions":{}}},"id":19534,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3533:38:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":19537,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3583:4:68","typeDescriptions":{"typeIdentifier":"t_contract$_Vault_$22797","typeString":"contract Vault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Vault_$22797","typeString":"contract Vault"}],"id":19536,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3575:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19535,"name":"address","nodeType":"ElementaryTypeName","src":"3575:7:68","typeDescriptions":{}}},"id":19538,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3575:13:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3533:55:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19544,"nodeType":"IfStatement","src":"3529:131:68","trueBody":{"id":19543,"nodeType":"Block","src":"3590:70:68","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19540,"name":"WrongProtocolFeeControllerDeployment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3761,"src":"3611:36:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":19541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3611:38:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19542,"nodeType":"RevertStatement","src":"3604:45:68"}]}},{"expression":{"id":19547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19545,"name":"_vaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19501,"src":"3670:15:68","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$4426","typeString":"contract IVaultExtension"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19546,"name":"vaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19504,"src":"3688:14:68","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$4426","typeString":"contract IVaultExtension"}},"src":"3670:32:68","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$4426","typeString":"contract IVaultExtension"}},"id":19548,"nodeType":"ExpressionStatement","src":"3670:32:68"},{"expression":{"id":19551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19549,"name":"_protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28287,"src":"3712:22:68","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19550,"name":"protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19510,"src":"3737:21:68","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}},"src":"3712:46:68","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}},"id":19552,"nodeType":"ExpressionStatement","src":"3712:46:68"},{"expression":{"id":19562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19553,"name":"_vaultPauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28265,"src":"3769:24:68","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":19557,"name":"vaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19504,"src":"3816:14:68","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$4426","typeString":"contract IVaultExtension"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVaultExtension_$4426","typeString":"contract IVaultExtension"}],"id":19556,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3808:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19555,"name":"address","nodeType":"ElementaryTypeName","src":"3808:7:68","typeDescriptions":{}}},"id":19558,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3808:23:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19554,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3401,"src":"3796:11:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultAdmin_$3401_$","typeString":"type(contract IVaultAdmin)"}},"id":19559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3796:36:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVaultAdmin_$3401","typeString":"contract IVaultAdmin"}},"id":19560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3833:21:68","memberName":"getPauseWindowEndTime","nodeType":"MemberAccess","referencedDeclaration":3135,"src":"3796:58:68","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint32_$","typeString":"function () view external returns (uint32)"}},"id":19561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3796:60:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"3769:87:68","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":19563,"nodeType":"ExpressionStatement","src":"3769:87:68"},{"expression":{"id":19573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19564,"name":"_vaultBufferPeriodDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28269,"src":"3866:26:68","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":19568,"name":"vaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19504,"src":"3915:14:68","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$4426","typeString":"contract IVaultExtension"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVaultExtension_$4426","typeString":"contract IVaultExtension"}],"id":19567,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3907:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19566,"name":"address","nodeType":"ElementaryTypeName","src":"3907:7:68","typeDescriptions":{}}},"id":19569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3907:23:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19565,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3401,"src":"3895:11:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultAdmin_$3401_$","typeString":"type(contract IVaultAdmin)"}},"id":19570,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3895:36:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVaultAdmin_$3401","typeString":"contract IVaultAdmin"}},"id":19571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3932:23:68","memberName":"getBufferPeriodDuration","nodeType":"MemberAccess","referencedDeclaration":3141,"src":"3895:60:68","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint32_$","typeString":"function () view external returns (uint32)"}},"id":19572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3895:62:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"3866:91:68","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":19574,"nodeType":"ExpressionStatement","src":"3866:91:68"},{"expression":{"id":19584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19575,"name":"_vaultBufferPeriodEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28267,"src":"3967:25:68","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":19579,"name":"vaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19504,"src":"4015:14:68","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$4426","typeString":"contract IVaultExtension"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVaultExtension_$4426","typeString":"contract IVaultExtension"}],"id":19578,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4007:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19577,"name":"address","nodeType":"ElementaryTypeName","src":"4007:7:68","typeDescriptions":{}}},"id":19580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4007:23:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19576,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3401,"src":"3995:11:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultAdmin_$3401_$","typeString":"type(contract IVaultAdmin)"}},"id":19581,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3995:36:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVaultAdmin_$3401","typeString":"contract IVaultAdmin"}},"id":19582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4032:22:68","memberName":"getBufferPeriodEndTime","nodeType":"MemberAccess","referencedDeclaration":3147,"src":"3995:59:68","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint32_$","typeString":"function () view external returns (uint32)"}},"id":19583,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3995:61:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"3967:89:68","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":19585,"nodeType":"ExpressionStatement","src":"3967:89:68"},{"expression":{"id":19595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19586,"name":"_MINIMUM_TRADE_AMOUNT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28194,"src":"4067:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":19590,"name":"vaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19504,"src":"4111:14:68","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$4426","typeString":"contract IVaultExtension"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVaultExtension_$4426","typeString":"contract IVaultExtension"}],"id":19589,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4103:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19588,"name":"address","nodeType":"ElementaryTypeName","src":"4103:7:68","typeDescriptions":{}}},"id":19591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4103:23:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19587,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3401,"src":"4091:11:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultAdmin_$3401_$","typeString":"type(contract IVaultAdmin)"}},"id":19592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4091:36:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVaultAdmin_$3401","typeString":"contract IVaultAdmin"}},"id":19593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4128:21:68","memberName":"getMinimumTradeAmount","nodeType":"MemberAccess","referencedDeclaration":3177,"src":"4091:58:68","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":19594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4091:60:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4067:84:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19596,"nodeType":"ExpressionStatement","src":"4067:84:68"},{"expression":{"id":19606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19597,"name":"_MINIMUM_WRAP_AMOUNT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28196,"src":"4161:20:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":19601,"name":"vaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19504,"src":"4204:14:68","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$4426","typeString":"contract IVaultExtension"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVaultExtension_$4426","typeString":"contract IVaultExtension"}],"id":19600,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4196:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19599,"name":"address","nodeType":"ElementaryTypeName","src":"4196:7:68","typeDescriptions":{}}},"id":19602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4196:23:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19598,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3401,"src":"4184:11:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultAdmin_$3401_$","typeString":"type(contract IVaultAdmin)"}},"id":19603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4184:36:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVaultAdmin_$3401","typeString":"contract IVaultAdmin"}},"id":19604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4221:20:68","memberName":"getMinimumWrapAmount","nodeType":"MemberAccess","referencedDeclaration":3183,"src":"4184:57:68","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":19605,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4184:59:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4161:82:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19607,"nodeType":"ExpressionStatement","src":"4161:82:68"},{"expression":{"id":19610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19608,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28284,"src":"4254:11:68","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19609,"name":"authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19507,"src":"4268:10:68","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"}},"src":"4254:24:68","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"}},"id":19611,"nodeType":"ExpressionStatement","src":"4254:24:68"}]},"id":19613,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":19511,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19504,"mutability":"mutable","name":"vaultExtension","nameLocation":"3306:14:68","nodeType":"VariableDeclaration","scope":19613,"src":"3290:30:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$4426","typeString":"contract IVaultExtension"},"typeName":{"id":19503,"nodeType":"UserDefinedTypeName","pathNode":{"id":19502,"name":"IVaultExtension","nameLocations":["3290:15:68"],"nodeType":"IdentifierPath","referencedDeclaration":4426,"src":"3290:15:68"},"referencedDeclaration":4426,"src":"3290:15:68","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$4426","typeString":"contract IVaultExtension"}},"visibility":"internal"},{"constant":false,"id":19507,"mutability":"mutable","name":"authorizer","nameLocation":"3334:10:68","nodeType":"VariableDeclaration","scope":19613,"src":"3322:22:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"},"typeName":{"id":19506,"nodeType":"UserDefinedTypeName","pathNode":{"id":19505,"name":"IAuthorizer","nameLocations":["3322:11:68"],"nodeType":"IdentifierPath","referencedDeclaration":1455,"src":"3322:11:68"},"referencedDeclaration":1455,"src":"3322:11:68","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"}},"visibility":"internal"},{"constant":false,"id":19510,"mutability":"mutable","name":"protocolFeeController","nameLocation":"3369:21:68","nodeType":"VariableDeclaration","scope":19613,"src":"3346:44:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"},"typeName":{"id":19509,"nodeType":"UserDefinedTypeName","pathNode":{"id":19508,"name":"IProtocolFeeController","nameLocations":["3346:22:68"],"nodeType":"IdentifierPath","referencedDeclaration":2420,"src":"3346:22:68"},"referencedDeclaration":2420,"src":"3346:22:68","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"3289:102:68"},"returnParameters":{"id":19512,"nodeType":"ParameterList","parameters":[],"src":"3392:0:68"},"scope":22797,"src":"3278:1007:68","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":19662,"nodeType":"Block","src":"5082:1796:68","statements":[{"assignments":[19617],"declarations":[{"constant":false,"id":19617,"mutability":"mutable","name":"isUnlockedBefore","nameLocation":"5097:16:68","nodeType":"VariableDeclaration","scope":19662,"src":"5092:21:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":19616,"name":"bool","nodeType":"ElementaryTypeName","src":"5092:4:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":19622,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":19618,"name":"_isUnlocked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28320,"src":"5116:11:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function () view returns (StorageSlotExtension.BooleanSlotType)"}},"id":19619,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5116:13:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":19620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5130:5:68","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":10207,"src":"5116:19:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_BooleanSlotType_$10108_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function (StorageSlotExtension.BooleanSlotType) view returns (bool)"}},"id":19621,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5116:21:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"5092:45:68"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19623,"name":"isUnlockedBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19617,"src":"5152:16:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":19624,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5172:5:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"5152:25:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19633,"nodeType":"IfStatement","src":"5148:82:68","trueBody":{"id":19632,"nodeType":"Block","src":"5179:51:68","statements":[{"expression":{"arguments":[{"hexValue":"74727565","id":19629,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5214:4:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":19626,"name":"_isUnlocked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28320,"src":"5193:11:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function () view returns (StorageSlotExtension.BooleanSlotType)"}},"id":19627,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5193:13:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":19628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5207:6:68","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":10218,"src":"5193:20:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$10108_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":19630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5193:26:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19631,"nodeType":"ExpressionStatement","src":"5193:26:68"}]}},{"id":19634,"nodeType":"PlaceholderStatement","src":"5327:1:68"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":19637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19635,"name":"isUnlockedBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19617,"src":"5343:16:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":19636,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5363:5:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"5343:25:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19661,"nodeType":"IfStatement","src":"5339:1533:68","trueBody":{"id":19660,"nodeType":"Block","src":"5370:1502:68","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":19638,"name":"_nonZeroDeltaCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28331,"src":"5388:18:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function () view returns (StorageSlotExtension.Uint256SlotType)"}},"id":19639,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5388:20:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":19640,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5409:5:68","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":10251,"src":"5388:26:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Uint256SlotType_$10142_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function (StorageSlotExtension.Uint256SlotType) view returns (uint256)"}},"id":19641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5388:28:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":19642,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5420:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5388:33:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19648,"nodeType":"IfStatement","src":"5384:98:68","trueBody":{"id":19647,"nodeType":"Block","src":"5423:59:68","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19644,"name":"BalanceNotSettled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3473,"src":"5448:17:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":19645,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5448:19:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19646,"nodeType":"RevertStatement","src":"5441:26:68"}]}},{"expression":{"arguments":[{"hexValue":"66616c7365","id":19652,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5517:5:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":19649,"name":"_isUnlocked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28320,"src":"5496:11:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function () view returns (StorageSlotExtension.BooleanSlotType)"}},"id":19650,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5496:13:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":19651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5510:6:68","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":10218,"src":"5496:20:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$10108_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":19653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5496:27:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19654,"nodeType":"ExpressionStatement","src":"5496:27:68"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":19655,"name":"_sessionIdSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28366,"src":"6832:14:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function () view returns (StorageSlotExtension.Uint256SlotType)"}},"id":19656,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6832:16:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":19657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6849:10:68","memberName":"tIncrement","nodeType":"MemberAccess","referencedDeclaration":7424,"src":"6832:27:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_Uint256SlotType_$10142_$returns$__$attached_to$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function (StorageSlotExtension.Uint256SlotType)"}},"id":19658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6832:29:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19659,"nodeType":"ExpressionStatement","src":"6832:29:68"}]}}]},"documentation":{"id":19614,"nodeType":"StructuredDocumentation","src":"4513:543:68","text":" @dev This modifier is used for functions that temporarily modify the token deltas\n of the Vault, but expect to revert or settle balances by the end of their execution.\n It works by ensuring that the balances are properly settled by the time the last\n operation is executed.\n This is useful for functions like `unlock`, which perform arbitrary external calls:\n we can keep track of temporary deltas changes, and make sure they are settled by the\n time the external call is complete."},"id":19663,"name":"transient","nameLocation":"5070:9:68","nodeType":"ModifierDefinition","parameters":{"id":19615,"nodeType":"ParameterList","parameters":[],"src":"5079:2:68"},"src":"5061:1817:68","virtual":false,"visibility":"internal"},{"baseFunctions":[4440],"body":{"id":19680,"nodeType":"Block","src":"7001:55:68","statements":[{"expression":{"arguments":[{"id":19677,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19666,"src":"7044:4:68","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"components":[{"expression":{"id":19673,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7019:3:68","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7023:6:68","memberName":"sender","nodeType":"MemberAccess","src":"7019:10:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":19675,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7018:12:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":19676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7031:12:68","memberName":"functionCall","nodeType":"MemberAccess","referencedDeclaration":40535,"src":"7018:25:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$attached_to$_t_address_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":19678,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7018:31:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":19672,"id":19679,"nodeType":"Return","src":"7011:38:68"}]},"documentation":{"id":19664,"nodeType":"StructuredDocumentation","src":"6884:26:68","text":"@inheritdoc IVaultMain"},"functionSelector":"48c89491","id":19681,"implemented":true,"kind":"function","modifiers":[{"id":19669,"kind":"modifierInvocation","modifierName":{"id":19668,"name":"transient","nameLocations":["6961:9:68"],"nodeType":"IdentifierPath","referencedDeclaration":19663,"src":"6961:9:68"},"nodeType":"ModifierInvocation","src":"6961:9:68"}],"name":"unlock","nameLocation":"6924:6:68","nodeType":"FunctionDefinition","parameters":{"id":19667,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19666,"mutability":"mutable","name":"data","nameLocation":"6946:4:68","nodeType":"VariableDeclaration","scope":19681,"src":"6931:19:68","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":19665,"name":"bytes","nodeType":"ElementaryTypeName","src":"6931:5:68","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6930:21:68"},"returnParameters":{"id":19672,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19671,"mutability":"mutable","name":"result","nameLocation":"6993:6:68","nodeType":"VariableDeclaration","scope":19681,"src":"6980:19:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":19670,"name":"bytes","nodeType":"ElementaryTypeName","src":"6980:5:68","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6979:21:68"},"scope":22797,"src":"6915:141:68","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[4451],"body":{"id":19738,"nodeType":"Block","src":"7207:1022:68","statements":[{"assignments":[19697],"declarations":[{"constant":false,"id":19697,"mutability":"mutable","name":"reservesBefore","nameLocation":"7225:14:68","nodeType":"VariableDeclaration","scope":19738,"src":"7217:22:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19696,"name":"uint256","nodeType":"ElementaryTypeName","src":"7217:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19701,"initialValue":{"baseExpression":{"id":19698,"name":"_reservesOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28278,"src":"7242:11:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":19700,"indexExpression":{"id":19699,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19685,"src":"7254:5:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7242:18:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7217:43:68"},{"assignments":[19703],"declarations":[{"constant":false,"id":19703,"mutability":"mutable","name":"currentReserves","nameLocation":"7278:15:68","nodeType":"VariableDeclaration","scope":19738,"src":"7270:23:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19702,"name":"uint256","nodeType":"ElementaryTypeName","src":"7270:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19711,"initialValue":{"arguments":[{"arguments":[{"id":19708,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7320:4:68","typeDescriptions":{"typeIdentifier":"t_contract$_Vault_$22797","typeString":"contract Vault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Vault_$22797","typeString":"contract Vault"}],"id":19707,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7312:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":19706,"name":"address","nodeType":"ElementaryTypeName","src":"7312:7:68","typeDescriptions":{}}},"id":19709,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7312:13:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":19704,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19685,"src":"7296:5:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":19705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7302:9:68","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":40066,"src":"7296:15:68","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":19710,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7296:30:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7270:56:68"},{"expression":{"id":19716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":19712,"name":"_reservesOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28278,"src":"7336:11:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":19714,"indexExpression":{"id":19713,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19685,"src":"7348:5:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7336:18:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19715,"name":"currentReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19703,"src":"7357:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7336:36:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19717,"nodeType":"ExpressionStatement","src":"7336:36:68"},{"expression":{"id":19722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19718,"name":"credit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19694,"src":"7382:6:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19719,"name":"currentReserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19703,"src":"7391:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":19720,"name":"reservesBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19697,"src":"7409:14:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7391:32:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7382:41:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19723,"nodeType":"ExpressionStatement","src":"7382:41:68"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":19724,"name":"credit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19694,"src":"7656:6:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":19725,"name":"amountHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19687,"src":"7665:10:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7656:19:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19732,"nodeType":"IfStatement","src":"7652:532:68","trueBody":{"id":19731,"nodeType":"Block","src":"7677:507:68","statements":[{"expression":{"id":19729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19727,"name":"credit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19694,"src":"8154:6:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19728,"name":"amountHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19687,"src":"8163:10:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8154:19:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19730,"nodeType":"ExpressionStatement","src":"8154:19:68"}]}},{"expression":{"arguments":[{"id":19734,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19685,"src":"8208:5:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":19735,"name":"credit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19694,"src":"8215:6:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19733,"name":"_supplyCredit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24891,"src":"8194:13:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":19736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8194:28:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19737,"nodeType":"ExpressionStatement","src":"8194:28:68"}]},"documentation":{"id":19682,"nodeType":"StructuredDocumentation","src":"7062:26:68","text":"@inheritdoc IVaultMain"},"functionSelector":"15afd409","id":19739,"implemented":true,"kind":"function","modifiers":[{"id":19690,"kind":"modifierInvocation","modifierName":{"id":19689,"name":"nonReentrant","nameLocations":["7152:12:68"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"7152:12:68"},"nodeType":"ModifierInvocation","src":"7152:12:68"},{"id":19692,"kind":"modifierInvocation","modifierName":{"id":19691,"name":"onlyWhenUnlocked","nameLocations":["7165:16:68"],"nodeType":"IdentifierPath","referencedDeclaration":24848,"src":"7165:16:68"},"nodeType":"ModifierInvocation","src":"7165:16:68"}],"name":"settle","nameLocation":"7102:6:68","nodeType":"FunctionDefinition","parameters":{"id":19688,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19685,"mutability":"mutable","name":"token","nameLocation":"7116:5:68","nodeType":"VariableDeclaration","scope":19739,"src":"7109:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":19684,"nodeType":"UserDefinedTypeName","pathNode":{"id":19683,"name":"IERC20","nameLocations":["7109:6:68"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"7109:6:68"},"referencedDeclaration":40109,"src":"7109:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":19687,"mutability":"mutable","name":"amountHint","nameLocation":"7131:10:68","nodeType":"VariableDeclaration","scope":19739,"src":"7123:18:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19686,"name":"uint256","nodeType":"ElementaryTypeName","src":"7123:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7108:34:68"},"returnParameters":{"id":19695,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19694,"mutability":"mutable","name":"credit","nameLocation":"7199:6:68","nodeType":"VariableDeclaration","scope":19739,"src":"7191:14:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19693,"name":"uint256","nodeType":"ElementaryTypeName","src":"7191:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7190:16:68"},"scope":22797,"src":"7093:1136:68","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[4462],"body":{"id":19772,"nodeType":"Block","src":"8363:120:68","statements":[{"expression":{"arguments":[{"id":19755,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19743,"src":"8383:5:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":19756,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19747,"src":"8390:6:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":19754,"name":"_takeDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24908,"src":"8373:9:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":19757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8373:24:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19758,"nodeType":"ExpressionStatement","src":"8373:24:68"},{"expression":{"id":19763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":19759,"name":"_reservesOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28278,"src":"8407:11:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":19761,"indexExpression":{"id":19760,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19743,"src":"8419:5:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8407:18:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":19762,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19747,"src":"8429:6:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8407:28:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19764,"nodeType":"ExpressionStatement","src":"8407:28:68"},{"expression":{"arguments":[{"id":19768,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19745,"src":"8465:2:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19769,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19747,"src":"8469:6:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":19765,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19743,"src":"8446:5:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":19767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8452:12:68","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":40221,"src":"8446:18:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$40109_$","typeString":"function (contract IERC20,address,uint256)"}},"id":19770,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8446:30:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19771,"nodeType":"ExpressionStatement","src":"8446:30:68"}]},"documentation":{"id":19740,"nodeType":"StructuredDocumentation","src":"8235:26:68","text":"@inheritdoc IVaultMain"},"functionSelector":"ae639329","id":19773,"implemented":true,"kind":"function","modifiers":[{"id":19750,"kind":"modifierInvocation","modifierName":{"id":19749,"name":"nonReentrant","nameLocations":["8333:12:68"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"8333:12:68"},"nodeType":"ModifierInvocation","src":"8333:12:68"},{"id":19752,"kind":"modifierInvocation","modifierName":{"id":19751,"name":"onlyWhenUnlocked","nameLocations":["8346:16:68"],"nodeType":"IdentifierPath","referencedDeclaration":24848,"src":"8346:16:68"},"nodeType":"ModifierInvocation","src":"8346:16:68"}],"name":"sendTo","nameLocation":"8275:6:68","nodeType":"FunctionDefinition","parameters":{"id":19748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19743,"mutability":"mutable","name":"token","nameLocation":"8289:5:68","nodeType":"VariableDeclaration","scope":19773,"src":"8282:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":19742,"nodeType":"UserDefinedTypeName","pathNode":{"id":19741,"name":"IERC20","nameLocations":["8282:6:68"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"8282:6:68"},"referencedDeclaration":40109,"src":"8282:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":19745,"mutability":"mutable","name":"to","nameLocation":"8304:2:68","nodeType":"VariableDeclaration","scope":19773,"src":"8296:10:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":19744,"name":"address","nodeType":"ElementaryTypeName","src":"8296:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":19747,"mutability":"mutable","name":"amount","nameLocation":"8316:6:68","nodeType":"VariableDeclaration","scope":19773,"src":"8308:14:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19746,"name":"uint256","nodeType":"ElementaryTypeName","src":"8308:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8281:42:68"},"returnParameters":{"id":19753,"nodeType":"ParameterList","parameters":[],"src":"8363:0:68"},"scope":22797,"src":"8266:217:68","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[4475],"body":{"id":19974,"nodeType":"Block","src":"10954:4211:68","statements":[{"expression":{"arguments":[{"expression":{"id":19793,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19777,"src":"10980:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":19794,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10996:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4741,"src":"10980:20:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":19792,"name":"_ensureUnpaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24998,"src":"10964:15:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":19795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10964:37:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19796,"nodeType":"ExpressionStatement","src":"10964:37:68"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":19800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19797,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19777,"src":"11016:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":19798,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11032:14:68","memberName":"amountGivenRaw","nodeType":"MemberAccess","referencedDeclaration":4749,"src":"11016:30:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":19799,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11050:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11016:35:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19805,"nodeType":"IfStatement","src":"11012:90:68","trueBody":{"id":19804,"nodeType":"Block","src":"11053:49:68","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19801,"name":"AmountGivenZero","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3509,"src":"11074:15:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":19802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11074:17:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19803,"nodeType":"RevertStatement","src":"11067:24:68"}]}},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"id":19810,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19806,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19777,"src":"11116:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":19807,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11132:7:68","memberName":"tokenIn","nodeType":"MemberAccess","referencedDeclaration":4744,"src":"11116:23:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":19808,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19777,"src":"11143:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":19809,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11159:8:68","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":4747,"src":"11143:24:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"11116:51:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19815,"nodeType":"IfStatement","src":"11112:110:68","trueBody":{"id":19814,"nodeType":"Block","src":"11169:53:68","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":19811,"name":"CannotSwapSameToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3512,"src":"11190:19:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":19812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11190:21:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":19813,"nodeType":"RevertStatement","src":"11183:28:68"}]}},{"assignments":[19818],"declarations":[{"constant":false,"id":19818,"mutability":"mutable","name":"poolData","nameLocation":"11683:8:68","nodeType":"VariableDeclaration","scope":19974,"src":"11667:24:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":19817,"nodeType":"UserDefinedTypeName","pathNode":{"id":19816,"name":"PoolData","nameLocations":["11667:8:68"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"11667:8:68"},"referencedDeclaration":4729,"src":"11667:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"id":19825,"initialValue":{"arguments":[{"expression":{"id":19820,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19777,"src":"11736:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":19821,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11752:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4741,"src":"11736:20:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":19822,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"11758:8:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":19823,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11767:10:68","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":4731,"src":"11758:19:68","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"id":19819,"name":"_loadPoolDataUpdatingBalancesAndYieldFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25381,"src":"11694:41:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_enum$_Rounding_$4732_$returns$_t_struct$_PoolData_$4729_memory_ptr_$","typeString":"function (address,enum Rounding) returns (struct PoolData memory)"}},"id":19824,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11694:84:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"nodeType":"VariableDeclarationStatement","src":"11667:111:68"},{"assignments":[19828],"declarations":[{"constant":false,"id":19828,"mutability":"mutable","name":"swapState","nameLocation":"11805:9:68","nodeType":"VariableDeclaration","scope":19974,"src":"11788:26:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState"},"typeName":{"id":19827,"nodeType":"UserDefinedTypeName","pathNode":{"id":19826,"name":"SwapState","nameLocations":["11788:9:68"],"nodeType":"IdentifierPath","referencedDeclaration":4661,"src":"11788:9:68"},"referencedDeclaration":4661,"src":"11788:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_storage_ptr","typeString":"struct SwapState"}},"visibility":"internal"}],"id":19833,"initialValue":{"arguments":[{"id":19830,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19777,"src":"11832:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},{"id":19831,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19818,"src":"11849:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"},{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}],"id":19829,"name":"_loadSwapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20029,"src":"11817:14:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_VaultSwapParams_$4754_memory_ptr_$_t_struct$_PoolData_$4729_memory_ptr_$returns$_t_struct$_SwapState_$4661_memory_ptr_$","typeString":"function (struct VaultSwapParams memory,struct PoolData memory) pure returns (struct SwapState memory)"}},"id":19832,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11817:41:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"nodeType":"VariableDeclarationStatement","src":"11788:70:68"},{"assignments":[19836],"declarations":[{"constant":false,"id":19836,"mutability":"mutable","name":"poolSwapParams","nameLocation":"11890:14:68","nodeType":"VariableDeclaration","scope":19974,"src":"11868:36:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":19835,"nodeType":"UserDefinedTypeName","pathNode":{"id":19834,"name":"PoolSwapParams","nameLocations":["11868:14:68"],"nodeType":"IdentifierPath","referencedDeclaration":4772,"src":"11868:14:68"},"referencedDeclaration":4772,"src":"11868:14:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"id":19842,"initialValue":{"arguments":[{"id":19838,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19777,"src":"11928:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},{"id":19839,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19828,"src":"11945:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},{"id":19840,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19818,"src":"11956:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"},{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"},{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}],"id":19837,"name":"_buildPoolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20062,"src":"11907:20:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_VaultSwapParams_$4754_memory_ptr_$_t_struct$_SwapState_$4661_memory_ptr_$_t_struct$_PoolData_$4729_memory_ptr_$returns$_t_struct$_PoolSwapParams_$4772_memory_ptr_$","typeString":"function (struct VaultSwapParams memory,struct SwapState memory,struct PoolData memory) view returns (struct PoolSwapParams memory)"}},"id":19841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11907:58:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}},"nodeType":"VariableDeclarationStatement","src":"11868:97:68"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":19843,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19818,"src":"11980:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":19844,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11989:14:68","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"11980:23:68","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":19845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12004:20:68","memberName":"shouldCallBeforeSwap","nodeType":"MemberAccess","referencedDeclaration":28593,"src":"11980:44:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":19846,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11980:46:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19889,"nodeType":"IfStatement","src":"11976:992:68","trueBody":{"id":19888,"nodeType":"Block","src":"12028:940:68","statements":[{"expression":{"arguments":[{"id":19850,"name":"poolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19836,"src":"12093:14:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}},{"expression":{"id":19851,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19777,"src":"12125:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":19852,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12141:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4741,"src":"12125:20:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":19853,"name":"_hooksContracts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28236,"src":"12163:15:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IHooks_$2026_$","typeString":"mapping(address => contract IHooks)"}},"id":19856,"indexExpression":{"expression":{"id":19854,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19777,"src":"12179:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":19855,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12195:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4741,"src":"12179:20:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12163:37:68","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}],"expression":{"id":19847,"name":"HooksConfigLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29474,"src":"12042:14:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_HooksConfigLib_$29474_$","typeString":"type(library HooksConfigLib)"}},"id":19849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12057:18:68","memberName":"callBeforeSwapHook","nodeType":"MemberAccess","referencedDeclaration":28960,"src":"12042:33:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PoolSwapParams_$4772_memory_ptr_$_t_address_$_t_contract$_IHooks_$2026_$returns$__$","typeString":"function (struct PoolSwapParams memory,address,contract IHooks)"}},"id":19857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12042:172:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19858,"nodeType":"ExpressionStatement","src":"12042:172:68"},{"expression":{"arguments":[{"baseExpression":{"id":19862,"name":"_poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28256,"src":"12575:18:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"}},"id":19865,"indexExpression":{"expression":{"id":19863,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19777,"src":"12594:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":19864,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12610:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4741,"src":"12594:20:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12575:40:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},{"expression":{"id":19866,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"12617:8:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":19867,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12626:10:68","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":4731,"src":"12617:19:68","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"expression":{"id":19859,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19818,"src":"12543:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":19861,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12552:22:68","memberName":"reloadBalancesAndRates","nodeType":"MemberAccess","referencedDeclaration":30871,"src":"12543:31:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PoolData_$4729_memory_ptr_$_t_mapping$_t_uint256_$_t_bytes32_$_$_t_enum$_Rounding_$4732_$returns$__$attached_to$_t_struct$_PoolData_$4729_memory_ptr_$","typeString":"function (struct PoolData memory,mapping(uint256 => bytes32),enum Rounding) view"}},"id":19868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12543:94:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19869,"nodeType":"ExpressionStatement","src":"12543:94:68"},{"expression":{"id":19878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19870,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19828,"src":"12770:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":19872,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"12780:19:68","memberName":"amountGivenScaled18","nodeType":"MemberAccess","referencedDeclaration":4658,"src":"12770:29:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":19874,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19777,"src":"12830:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},{"id":19875,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19818,"src":"12847:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},{"id":19876,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19828,"src":"12857:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"},{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}],"id":19873,"name":"_computeAmountGivenScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20115,"src":"12802:27:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_VaultSwapParams_$4754_memory_ptr_$_t_struct$_PoolData_$4729_memory_ptr_$_t_struct$_SwapState_$4661_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct VaultSwapParams memory,struct PoolData memory,struct SwapState memory) pure returns (uint256)"}},"id":19877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12802:65:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12770:97:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19879,"nodeType":"ExpressionStatement","src":"12770:97:68"},{"expression":{"id":19886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19880,"name":"poolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19836,"src":"12882:14:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":19882,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19777,"src":"12920:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},{"id":19883,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19828,"src":"12937:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},{"id":19884,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19818,"src":"12948:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"},{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"},{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}],"id":19881,"name":"_buildPoolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20062,"src":"12899:20:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_VaultSwapParams_$4754_memory_ptr_$_t_struct$_SwapState_$4661_memory_ptr_$_t_struct$_PoolData_$4729_memory_ptr_$returns$_t_struct$_PoolSwapParams_$4772_memory_ptr_$","typeString":"function (struct VaultSwapParams memory,struct SwapState memory,struct PoolData memory) view returns (struct PoolSwapParams memory)"}},"id":19885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12899:58:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}},"src":"12882:75:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":19887,"nodeType":"ExpressionStatement","src":"12882:75:68"}]}},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":19890,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19818,"src":"13437:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":19891,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13446:14:68","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"13437:23:68","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":19892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13461:31:68","memberName":"shouldCallComputeDynamicSwapFee","nodeType":"MemberAccess","referencedDeclaration":28550,"src":"13437:55:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":19893,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13437:57:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19912,"nodeType":"IfStatement","src":"13433:346:68","trueBody":{"id":19911,"nodeType":"Block","src":"13496:283:68","statements":[{"expression":{"id":19909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19894,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19828,"src":"13510:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":19896,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"13520:17:68","memberName":"swapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":4660,"src":"13510:27:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":19899,"name":"poolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19836,"src":"13602:14:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}},{"expression":{"id":19900,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19777,"src":"13634:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":19901,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13650:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4741,"src":"13634:20:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":19902,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19828,"src":"13672:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":19903,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13682:17:68","memberName":"swapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":4660,"src":"13672:27:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":19904,"name":"_hooksContracts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28236,"src":"13717:15:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IHooks_$2026_$","typeString":"mapping(address => contract IHooks)"}},"id":19907,"indexExpression":{"expression":{"id":19905,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19777,"src":"13733:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":19906,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13749:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4741,"src":"13733:20:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13717:37:68","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}],"expression":{"id":19897,"name":"HooksConfigLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29474,"src":"13540:14:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_HooksConfigLib_$29474_$","typeString":"type(library HooksConfigLib)"}},"id":19898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13555:29:68","memberName":"callComputeDynamicSwapFeeHook","nodeType":"MemberAccess","referencedDeclaration":28933,"src":"13540:44:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PoolSwapParams_$4772_memory_ptr_$_t_address_$_t_uint256_$_t_contract$_IHooks_$2026_$returns$_t_uint256_$","typeString":"function (struct PoolSwapParams memory,address,uint256,contract IHooks) view returns (uint256)"}},"id":19908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13540:228:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13510:258:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19910,"nodeType":"ExpressionStatement","src":"13510:258:68"}]}},{"assignments":[19914],"declarations":[{"constant":false,"id":19914,"mutability":"mutable","name":"amountCalculatedScaled18","nameLocation":"14026:24:68","nodeType":"VariableDeclaration","scope":19974,"src":"14018:32:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19913,"name":"uint256","nodeType":"ElementaryTypeName","src":"14018:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":19915,"nodeType":"VariableDeclarationStatement","src":"14018:32:68"},{"expression":{"id":19927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":19916,"name":"amountCalculated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19786,"src":"14061:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19917,"name":"amountCalculatedScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19914,"src":"14079:24:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19918,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19788,"src":"14105:8:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19919,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19790,"src":"14115:9:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":19920,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"14060:65:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":19922,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19777,"src":"14147:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},{"id":19923,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19828,"src":"14176:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},{"id":19924,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19818,"src":"14199:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},{"id":19925,"name":"poolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19836,"src":"14221:14:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"},{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"},{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}],"id":19921,"name":"_swap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20436,"src":"14128:5:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_VaultSwapParams_$4754_memory_ptr_$_t_struct$_SwapState_$4661_memory_ptr_$_t_struct$_PoolData_$4729_memory_ptr_$_t_struct$_PoolSwapParams_$4772_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (struct VaultSwapParams memory,struct SwapState memory,struct PoolData memory,struct PoolSwapParams memory) returns (uint256,uint256,uint256,uint256)"}},"id":19926,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14128:117:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"src":"14060:185:68","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":19928,"nodeType":"ExpressionStatement","src":"14060:185:68"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":19929,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19818,"src":"14488:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":19930,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14497:14:68","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"14488:23:68","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":19931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14512:19:68","memberName":"shouldCallAfterSwap","nodeType":"MemberAccess","referencedDeclaration":28636,"src":"14488:43:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":19932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14488:45:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":19957,"nodeType":"IfStatement","src":"14484:507:68","trueBody":{"id":19956,"nodeType":"Block","src":"14535:456:68","statements":[{"assignments":[19935],"declarations":[{"constant":false,"id":19935,"mutability":"mutable","name":"hooksContract","nameLocation":"14617:13:68","nodeType":"VariableDeclaration","scope":19956,"src":"14610:20:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"},"typeName":{"id":19934,"nodeType":"UserDefinedTypeName","pathNode":{"id":19933,"name":"IHooks","nameLocations":["14610:6:68"],"nodeType":"IdentifierPath","referencedDeclaration":2026,"src":"14610:6:68"},"referencedDeclaration":2026,"src":"14610:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"visibility":"internal"}],"id":19940,"initialValue":{"baseExpression":{"id":19936,"name":"_hooksContracts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28236,"src":"14633:15:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IHooks_$2026_$","typeString":"mapping(address => contract IHooks)"}},"id":19939,"indexExpression":{"expression":{"id":19937,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19777,"src":"14649:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":19938,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14665:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4741,"src":"14649:20:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14633:37:68","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"nodeType":"VariableDeclarationStatement","src":"14610:60:68"},{"expression":{"id":19954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19941,"name":"amountCalculated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19786,"src":"14685:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":19945,"name":"amountCalculatedScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19914,"src":"14763:24:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":19946,"name":"amountCalculated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19786,"src":"14805:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":19947,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14839:3:68","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":19948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14843:6:68","memberName":"sender","nodeType":"MemberAccess","src":"14839:10:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":19949,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19777,"src":"14867:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},{"id":19950,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19828,"src":"14900:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},{"id":19951,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19818,"src":"14927:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},{"id":19952,"name":"hooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19935,"src":"14953:13:68","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"},{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"},{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}],"expression":{"expression":{"id":19942,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19818,"src":"14704:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":19943,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14713:14:68","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"14704:23:68","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":19944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14728:17:68","memberName":"callAfterSwapHook","nodeType":"MemberAccess","referencedDeclaration":29096,"src":"14704:41:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_uint256_$_t_uint256_$_t_address_$_t_struct$_VaultSwapParams_$4754_memory_ptr_$_t_struct$_SwapState_$4661_memory_ptr_$_t_struct$_PoolData_$4729_memory_ptr_$_t_contract$_IHooks_$2026_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,uint256,uint256,address,struct VaultSwapParams memory,struct SwapState memory,struct PoolData memory,contract IHooks) returns (uint256)"}},"id":19953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14704:276:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14685:295:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19955,"nodeType":"ExpressionStatement","src":"14685:295:68"}]}},{"condition":{"commonType":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},"id":19962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":19958,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19777,"src":"15005:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":19959,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15021:4:68","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4739,"src":"15005:20:68","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":19960,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"15029:8:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4735_$","typeString":"type(enum SwapKind)"}},"id":19961,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15038:8:68","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"15029:17:68","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"src":"15005:41:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":19972,"nodeType":"Block","src":"15107:52:68","statements":[{"expression":{"id":19970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19968,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19788,"src":"15121:8:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19969,"name":"amountCalculated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19786,"src":"15132:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15121:27:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19971,"nodeType":"ExpressionStatement","src":"15121:27:68"}]},"id":19973,"nodeType":"IfStatement","src":"15001:158:68","trueBody":{"id":19967,"nodeType":"Block","src":"15048:53:68","statements":[{"expression":{"id":19965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":19963,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19790,"src":"15062:9:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":19964,"name":"amountCalculated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19786,"src":"15074:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15062:28:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19966,"nodeType":"ExpressionStatement","src":"15062:28:68"}]}}]},"documentation":{"id":19774,"nodeType":"StructuredDocumentation","src":"10679:26:68","text":"@inheritdoc IVaultMain"},"functionSelector":"2bfb780c","id":19975,"implemented":true,"kind":"function","modifiers":[{"id":19780,"kind":"modifierInvocation","modifierName":{"id":19779,"name":"onlyWhenUnlocked","nameLocations":["10803:16:68"],"nodeType":"IdentifierPath","referencedDeclaration":24848,"src":"10803:16:68"},"nodeType":"ModifierInvocation","src":"10803:16:68"},{"arguments":[{"expression":{"id":19782,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19777,"src":"10848:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":19783,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10864:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4741,"src":"10848:20:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":19784,"kind":"modifierInvocation","modifierName":{"id":19781,"name":"withInitializedPool","nameLocations":["10828:19:68"],"nodeType":"IdentifierPath","referencedDeclaration":25131,"src":"10828:19:68"},"nodeType":"ModifierInvocation","src":"10828:41:68"}],"name":"swap","nameLocation":"10719:4:68","nodeType":"FunctionDefinition","parameters":{"id":19778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19777,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"10756:15:68","nodeType":"VariableDeclaration","scope":19975,"src":"10733:38:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":19776,"nodeType":"UserDefinedTypeName","pathNode":{"id":19775,"name":"VaultSwapParams","nameLocations":["10733:15:68"],"nodeType":"IdentifierPath","referencedDeclaration":4754,"src":"10733:15:68"},"referencedDeclaration":4754,"src":"10733:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"}],"src":"10723:54:68"},"returnParameters":{"id":19791,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19786,"mutability":"mutable","name":"amountCalculated","nameLocation":"10895:16:68","nodeType":"VariableDeclaration","scope":19975,"src":"10887:24:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19785,"name":"uint256","nodeType":"ElementaryTypeName","src":"10887:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19788,"mutability":"mutable","name":"amountIn","nameLocation":"10921:8:68","nodeType":"VariableDeclaration","scope":19975,"src":"10913:16:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19787,"name":"uint256","nodeType":"ElementaryTypeName","src":"10913:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":19790,"mutability":"mutable","name":"amountOut","nameLocation":"10939:9:68","nodeType":"VariableDeclaration","scope":19975,"src":"10931:17:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":19789,"name":"uint256","nodeType":"ElementaryTypeName","src":"10931:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10886:63:68"},"scope":22797,"src":"10710:4455:68","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":20028,"nodeType":"Block","src":"15334:383:68","statements":[{"expression":{"id":19996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19987,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19985,"src":"15344:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":19989,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15354:7:68","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":4654,"src":"15344:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":19991,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19981,"src":"15380:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":19992,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15389:6:68","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":4712,"src":"15380:15:68","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},{"expression":{"id":19993,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19978,"src":"15397:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":19994,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15413:7:68","memberName":"tokenIn","nodeType":"MemberAccess","referencedDeclaration":4744,"src":"15397:23:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":19990,"name":"_findTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25546,"src":"15364:15:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$_t_contract$_IERC20_$40109_$returns$_t_uint256_$","typeString":"function (contract IERC20[] memory,contract IERC20) pure returns (uint256)"}},"id":19995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15364:57:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15344:77:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":19997,"nodeType":"ExpressionStatement","src":"15344:77:68"},{"expression":{"id":20007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":19998,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19985,"src":"15431:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20000,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15441:8:68","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":4656,"src":"15431:18:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":20002,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19981,"src":"15468:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20003,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15477:6:68","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":4712,"src":"15468:15:68","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},{"expression":{"id":20004,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19978,"src":"15485:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":20005,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15501:8:68","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":4747,"src":"15485:24:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":20001,"name":"_findTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25546,"src":"15452:15:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$_t_contract$_IERC20_$40109_$returns$_t_uint256_$","typeString":"function (contract IERC20[] memory,contract IERC20) pure returns (uint256)"}},"id":20006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15452:58:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15431:79:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20008,"nodeType":"ExpressionStatement","src":"15431:79:68"},{"expression":{"id":20017,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20009,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19985,"src":"15521:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20011,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15531:19:68","memberName":"amountGivenScaled18","nodeType":"MemberAccess","referencedDeclaration":4658,"src":"15521:29:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":20013,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19978,"src":"15581:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},{"id":20014,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19981,"src":"15598:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},{"id":20015,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19985,"src":"15608:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"},{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}],"id":20012,"name":"_computeAmountGivenScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20115,"src":"15553:27:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_VaultSwapParams_$4754_memory_ptr_$_t_struct$_PoolData_$4729_memory_ptr_$_t_struct$_SwapState_$4661_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct VaultSwapParams memory,struct PoolData memory,struct SwapState memory) pure returns (uint256)"}},"id":20016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15553:65:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15521:97:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20018,"nodeType":"ExpressionStatement","src":"15521:97:68"},{"expression":{"id":20026,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20019,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19985,"src":"15628:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20021,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15638:17:68","memberName":"swapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":4660,"src":"15628:27:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":20022,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19981,"src":"15658:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20023,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15667:14:68","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"15658:23:68","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":20024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15682:26:68","memberName":"getStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":30061,"src":"15658:50:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (uint256)"}},"id":20025,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15658:52:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15628:82:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20027,"nodeType":"ExpressionStatement","src":"15628:82:68"}]},"id":20029,"implemented":true,"kind":"function","modifiers":[],"name":"_loadSwapState","nameLocation":"15180:14:68","nodeType":"FunctionDefinition","parameters":{"id":19982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19978,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"15227:15:68","nodeType":"VariableDeclaration","scope":20029,"src":"15204:38:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":19977,"nodeType":"UserDefinedTypeName","pathNode":{"id":19976,"name":"VaultSwapParams","nameLocations":["15204:15:68"],"nodeType":"IdentifierPath","referencedDeclaration":4754,"src":"15204:15:68"},"referencedDeclaration":4754,"src":"15204:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"},{"constant":false,"id":19981,"mutability":"mutable","name":"poolData","nameLocation":"15268:8:68","nodeType":"VariableDeclaration","scope":20029,"src":"15252:24:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":19980,"nodeType":"UserDefinedTypeName","pathNode":{"id":19979,"name":"PoolData","nameLocations":["15252:8:68"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"15252:8:68"},"referencedDeclaration":4729,"src":"15252:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"15194:88:68"},"returnParameters":{"id":19986,"nodeType":"ParameterList","parameters":[{"constant":false,"id":19985,"mutability":"mutable","name":"swapState","nameLocation":"15323:9:68","nodeType":"VariableDeclaration","scope":20029,"src":"15306:26:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState"},"typeName":{"id":19984,"nodeType":"UserDefinedTypeName","pathNode":{"id":19983,"name":"SwapState","nameLocations":["15306:9:68"],"nodeType":"IdentifierPath","referencedDeclaration":4661,"src":"15306:9:68"},"referencedDeclaration":4661,"src":"15306:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_storage_ptr","typeString":"struct SwapState"}},"visibility":"internal"}],"src":"15305:28:68"},"scope":22797,"src":"15171:546:68","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":20061,"nodeType":"Block","src":"15923:500:68","statements":[{"expression":{"arguments":[{"expression":{"id":20045,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20032,"src":"16070:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":20046,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16086:4:68","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4739,"src":"16070:20:68","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},{"expression":{"id":20047,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20035,"src":"16129:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20048,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16139:19:68","memberName":"amountGivenScaled18","nodeType":"MemberAccess","referencedDeclaration":4658,"src":"16129:29:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20049,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20038,"src":"16194:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20050,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16203:20:68","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":4722,"src":"16194:29:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":20051,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20035,"src":"16250:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20052,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16260:7:68","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":4654,"src":"16250:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20053,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20035,"src":"16295:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20054,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16305:8:68","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":4656,"src":"16295:18:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20055,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"16339:3:68","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16343:6:68","memberName":"sender","nodeType":"MemberAccess","src":"16339:10:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":20057,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20032,"src":"16377:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":20058,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16393:8:68","memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":4753,"src":"16377:24:68","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":20044,"name":"PoolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4772,"src":"16031:14:68","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolSwapParams_$4772_storage_ptr_$","typeString":"type(struct PoolSwapParams storage pointer)"}},"id":20059,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["16064:4:68","16108:19:68","16176:16:68","16241:7:68","16285:8:68","16331:6:68","16367:8:68"],"names":["kind","amountGivenScaled18","balancesScaled18","indexIn","indexOut","router","userData"],"nodeType":"FunctionCall","src":"16031:385:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}},"functionReturnParameters":20043,"id":20060,"nodeType":"Return","src":"16012:404:68"}]},"id":20062,"implemented":true,"kind":"function","modifiers":[],"name":"_buildPoolSwapParams","nameLocation":"15732:20:68","nodeType":"FunctionDefinition","parameters":{"id":20039,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20032,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"15785:15:68","nodeType":"VariableDeclaration","scope":20062,"src":"15762:38:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":20031,"nodeType":"UserDefinedTypeName","pathNode":{"id":20030,"name":"VaultSwapParams","nameLocations":["15762:15:68"],"nodeType":"IdentifierPath","referencedDeclaration":4754,"src":"15762:15:68"},"referencedDeclaration":4754,"src":"15762:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"},{"constant":false,"id":20035,"mutability":"mutable","name":"swapState","nameLocation":"15827:9:68","nodeType":"VariableDeclaration","scope":20062,"src":"15810:26:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState"},"typeName":{"id":20034,"nodeType":"UserDefinedTypeName","pathNode":{"id":20033,"name":"SwapState","nameLocations":["15810:9:68"],"nodeType":"IdentifierPath","referencedDeclaration":4661,"src":"15810:9:68"},"referencedDeclaration":4661,"src":"15810:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_storage_ptr","typeString":"struct SwapState"}},"visibility":"internal"},{"constant":false,"id":20038,"mutability":"mutable","name":"poolData","nameLocation":"15862:8:68","nodeType":"VariableDeclaration","scope":20062,"src":"15846:24:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":20037,"nodeType":"UserDefinedTypeName","pathNode":{"id":20036,"name":"PoolData","nameLocations":["15846:8:68"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"15846:8:68"},"referencedDeclaration":4729,"src":"15846:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"15752:124:68"},"returnParameters":{"id":20043,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20042,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20062,"src":"15900:21:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":20041,"nodeType":"UserDefinedTypeName","pathNode":{"id":20040,"name":"PoolSwapParams","nameLocations":["15900:14:68"],"nodeType":"IdentifierPath","referencedDeclaration":4772,"src":"15900:14:68"},"referencedDeclaration":4772,"src":"15900:14:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"src":"15899:23:68"},"scope":22797,"src":"15723:700:68","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":20114,"nodeType":"Block","src":"16793:1125:68","statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},"id":20081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20077,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20066,"src":"17002:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":20078,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17018:4:68","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4739,"src":"17002:20:68","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":20079,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"17026:8:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4735_$","typeString":"type(enum SwapKind)"}},"id":20080,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"17035:8:68","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"17026:17:68","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"src":"17002:41:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"baseExpression":{"expression":{"id":20099,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20069,"src":"17368:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20100,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17377:21:68","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":4728,"src":"17368:30:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20103,"indexExpression":{"expression":{"id":20101,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20072,"src":"17399:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20102,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17409:8:68","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":4656,"src":"17399:18:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17368:50:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":20104,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20069,"src":"17833:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20105,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17842:10:68","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":4725,"src":"17833:19:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20108,"indexExpression":{"expression":{"id":20106,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20072,"src":"17853:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20107,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17863:8:68","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":4656,"src":"17853:18:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17833:39:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17873:18:68","memberName":"computeRateRoundUp","nodeType":"MemberAccess","referencedDeclaration":6847,"src":"17833:58:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":20110,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17833:60:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":20096,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20066,"src":"17289:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":20097,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17305:14:68","memberName":"amountGivenRaw","nodeType":"MemberAccess","referencedDeclaration":4749,"src":"17289:30:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17320:26:68","memberName":"toScaled18ApplyRateRoundUp","nodeType":"MemberAccess","referencedDeclaration":6488,"src":"17289:57:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":20111,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17289:622:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"17002:909:68","trueExpression":{"arguments":[{"baseExpression":{"expression":{"id":20085,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20069,"src":"17143:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20086,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17152:21:68","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":4728,"src":"17143:30:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20089,"indexExpression":{"expression":{"id":20087,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20072,"src":"17174:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20088,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17184:7:68","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":4654,"src":"17174:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17143:49:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":20090,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20069,"src":"17214:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20091,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17223:10:68","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":4725,"src":"17214:19:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20094,"indexExpression":{"expression":{"id":20092,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20072,"src":"17234:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20093,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17244:7:68","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":4654,"src":"17234:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17214:38:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":20082,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20066,"src":"17062:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":20083,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17078:14:68","memberName":"amountGivenRaw","nodeType":"MemberAccess","referencedDeclaration":4749,"src":"17062:30:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17093:28:68","memberName":"toScaled18ApplyRateRoundDown","nodeType":"MemberAccess","referencedDeclaration":6467,"src":"17062:59:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":20095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17062:208:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":20076,"id":20113,"nodeType":"Return","src":"16983:928:68"}]},"documentation":{"id":20063,"nodeType":"StructuredDocumentation","src":"16429:166:68","text":" @dev Preconditions: decimalScalingFactors and tokenRates in `poolData` must be current.\n Uses amountGivenRaw and kind from `vaultSwapParams`."},"id":20115,"implemented":true,"kind":"function","modifiers":[],"name":"_computeAmountGivenScaled18","nameLocation":"16609:27:68","nodeType":"FunctionDefinition","parameters":{"id":20073,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20066,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"16669:15:68","nodeType":"VariableDeclaration","scope":20115,"src":"16646:38:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":20065,"nodeType":"UserDefinedTypeName","pathNode":{"id":20064,"name":"VaultSwapParams","nameLocations":["16646:15:68"],"nodeType":"IdentifierPath","referencedDeclaration":4754,"src":"16646:15:68"},"referencedDeclaration":4754,"src":"16646:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"},{"constant":false,"id":20069,"mutability":"mutable","name":"poolData","nameLocation":"16710:8:68","nodeType":"VariableDeclaration","scope":20115,"src":"16694:24:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":20068,"nodeType":"UserDefinedTypeName","pathNode":{"id":20067,"name":"PoolData","nameLocations":["16694:8:68"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"16694:8:68"},"referencedDeclaration":4729,"src":"16694:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":20072,"mutability":"mutable","name":"swapState","nameLocation":"16745:9:68","nodeType":"VariableDeclaration","scope":20115,"src":"16728:26:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState"},"typeName":{"id":20071,"nodeType":"UserDefinedTypeName","pathNode":{"id":20070,"name":"SwapState","nameLocations":["16728:9:68"],"nodeType":"IdentifierPath","referencedDeclaration":4661,"src":"16728:9:68"},"referencedDeclaration":4661,"src":"16728:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_storage_ptr","typeString":"struct SwapState"}},"visibility":"internal"}],"src":"16636:124:68"},"returnParameters":{"id":20076,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20075,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":20115,"src":"16784:7:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20074,"name":"uint256","nodeType":"ElementaryTypeName","src":"16784:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16783:9:68"},"scope":22797,"src":"16600:1318:68","stateMutability":"pure","virtual":false,"visibility":"internal"},{"canonicalName":"Vault.SwapInternalLocals","documentation":{"id":20116,"nodeType":"StructuredDocumentation","src":"17924:190:68","text":" @dev Auxiliary struct to prevent stack-too-deep issues inside `_swap` function.\n Total swap fees include LP (pool) fees and aggregate (protocol + pool creator) fees."},"id":20123,"members":[{"constant":false,"id":20118,"mutability":"mutable","name":"totalSwapFeeAmountScaled18","nameLocation":"18163:26:68","nodeType":"VariableDeclaration","scope":20123,"src":"18155:34:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20117,"name":"uint256","nodeType":"ElementaryTypeName","src":"18155:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20120,"mutability":"mutable","name":"totalSwapFeeAmountRaw","nameLocation":"18207:21:68","nodeType":"VariableDeclaration","scope":20123,"src":"18199:29:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20119,"name":"uint256","nodeType":"ElementaryTypeName","src":"18199:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20122,"mutability":"mutable","name":"aggregateFeeAmountRaw","nameLocation":"18246:21:68","nodeType":"VariableDeclaration","scope":20123,"src":"18238:29:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20121,"name":"uint256","nodeType":"ElementaryTypeName","src":"18238:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"SwapInternalLocals","nameLocation":"18126:18:68","nodeType":"StructDefinition","scope":22797,"src":"18119:155:68","visibility":"public"},{"body":{"id":20435,"nodeType":"Block","src":"19134:5853:68","statements":[{"assignments":[20151],"declarations":[{"constant":false,"id":20151,"mutability":"mutable","name":"locals","nameLocation":"19170:6:68","nodeType":"VariableDeclaration","scope":20435,"src":"19144:32:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapInternalLocals_$20123_memory_ptr","typeString":"struct Vault.SwapInternalLocals"},"typeName":{"id":20150,"nodeType":"UserDefinedTypeName","pathNode":{"id":20149,"name":"SwapInternalLocals","nameLocations":["19144:18:68"],"nodeType":"IdentifierPath","referencedDeclaration":20123,"src":"19144:18:68"},"referencedDeclaration":20123,"src":"19144:18:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapInternalLocals_$20123_storage_ptr","typeString":"struct Vault.SwapInternalLocals"}},"visibility":"internal"}],"id":20152,"nodeType":"VariableDeclarationStatement","src":"19144:32:68"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},"id":20157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20153,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20127,"src":"19191:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":20154,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19207:4:68","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4739,"src":"19191:20:68","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":20155,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"19215:8:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4735_$","typeString":"type(enum SwapKind)"}},"id":20156,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"19224:8:68","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"19215:17:68","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"src":"19191:41:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20177,"nodeType":"IfStatement","src":"19187:325:68","trueBody":{"id":20176,"nodeType":"Block","src":"19234:278:68","statements":[{"expression":{"id":20167,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20158,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20151,"src":"19311:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapInternalLocals_$20123_memory_ptr","typeString":"struct Vault.SwapInternalLocals memory"}},"id":20160,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"19318:26:68","memberName":"totalSwapFeeAmountScaled18","nodeType":"MemberAccess","referencedDeclaration":20118,"src":"19311:33:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":20164,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20130,"src":"19388:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20165,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19398:17:68","memberName":"swapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":4660,"src":"19388:27:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":20161,"name":"poolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20136,"src":"19347:14:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":20162,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19362:19:68","memberName":"amountGivenScaled18","nodeType":"MemberAccess","referencedDeclaration":4760,"src":"19347:34:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19382:5:68","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":7970,"src":"19347:40:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":20166,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19347:69:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19311:105:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20168,"nodeType":"ExpressionStatement","src":"19311:105:68"},{"expression":{"id":20174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20169,"name":"poolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20136,"src":"19430:14:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":20171,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"19445:19:68","memberName":"amountGivenScaled18","nodeType":"MemberAccess","referencedDeclaration":4760,"src":"19430:34:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"expression":{"id":20172,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20151,"src":"19468:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapInternalLocals_$20123_memory_ptr","typeString":"struct Vault.SwapInternalLocals memory"}},"id":20173,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19475:26:68","memberName":"totalSwapFeeAmountScaled18","nodeType":"MemberAccess","referencedDeclaration":20118,"src":"19468:33:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19430:71:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20175,"nodeType":"ExpressionStatement","src":"19430:71:68"}]}},{"expression":{"arguments":[{"expression":{"id":20179,"name":"poolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20136,"src":"19545:14:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":20180,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19560:19:68","memberName":"amountGivenScaled18","nodeType":"MemberAccess","referencedDeclaration":4760,"src":"19545:34:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20178,"name":"_ensureValidSwapAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22748,"src":"19522:22:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":20181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19522:58:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20182,"nodeType":"ExpressionStatement","src":"19522:58:68"},{"expression":{"id":20191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20183,"name":"amountCalculatedScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20143,"src":"19708:24:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":20189,"name":"poolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20136,"src":"19774:14:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}],"expression":{"arguments":[{"expression":{"id":20185,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20127,"src":"19745:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":20186,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19761:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4741,"src":"19745:20:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20184,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1505,"src":"19735:9:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasePool_$1505_$","typeString":"type(contract IBasePool)"}},"id":20187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19735:31:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}},"id":20188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19767:6:68","memberName":"onSwap","nodeType":"MemberAccess","referencedDeclaration":1504,"src":"19735:38:68","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_PoolSwapParams_$4772_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct PoolSwapParams memory) external returns (uint256)"}},"id":20190,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19735:54:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19708:81:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20192,"nodeType":"ExpressionStatement","src":"19708:81:68"},{"expression":{"arguments":[{"id":20194,"name":"amountCalculatedScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20143,"src":"19823:24:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20193,"name":"_ensureValidSwapAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22748,"src":"19800:22:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":20195,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19800:48:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20196,"nodeType":"ExpressionStatement","src":"19800:48:68"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},"id":20201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20197,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20127,"src":"20227:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":20198,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20243:4:68","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4739,"src":"20227:20:68","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":20199,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"20251:8:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4735_$","typeString":"type(enum SwapKind)"}},"id":20200,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"20260:8:68","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"20251:17:68","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"src":"20227:41:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":20305,"nodeType":"Block","src":"21544:1367:68","statements":[{"expression":{"id":20261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20249,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20151,"src":"22084:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapInternalLocals_$20123_memory_ptr","typeString":"struct Vault.SwapInternalLocals memory"}},"id":20251,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"22091:26:68","memberName":"totalSwapFeeAmountScaled18","nodeType":"MemberAccess","referencedDeclaration":20118,"src":"22084:33:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":20254,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20130,"src":"22171:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20255,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22181:17:68","memberName":"swapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":4660,"src":"22171:27:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":20256,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20130,"src":"22216:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20257,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22226:17:68","memberName":"swapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":4660,"src":"22216:27:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22244:10:68","memberName":"complement","nodeType":"MemberAccess","referencedDeclaration":8207,"src":"22216:38:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":20259,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22216:40:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":20252,"name":"amountCalculatedScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20143,"src":"22120:24:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22145:8:68","memberName":"mulDivUp","nodeType":"MemberAccess","referencedDeclaration":8034,"src":"22120:33:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":20260,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22120:150:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22084:186:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20262,"nodeType":"ExpressionStatement","src":"22084:186:68"},{"expression":{"id":20266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20263,"name":"amountCalculatedScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20143,"src":"22285:24:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"expression":{"id":20264,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20151,"src":"22313:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapInternalLocals_$20123_memory_ptr","typeString":"struct Vault.SwapInternalLocals memory"}},"id":20265,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22320:26:68","memberName":"totalSwapFeeAmountScaled18","nodeType":"MemberAccess","referencedDeclaration":20118,"src":"22313:33:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22285:61:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20267,"nodeType":"ExpressionStatement","src":"22285:61:68"},{"expression":{"id":20282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20268,"name":"amountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20141,"src":"22452:19:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"expression":{"id":20271,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20133,"src":"22537:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20272,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22546:21:68","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":4728,"src":"22537:30:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20275,"indexExpression":{"expression":{"id":20273,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20130,"src":"22568:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20274,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22578:7:68","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":4654,"src":"22568:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22537:49:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":20276,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20133,"src":"22604:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20277,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22613:10:68","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":4725,"src":"22604:19:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20280,"indexExpression":{"expression":{"id":20278,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20130,"src":"22624:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20279,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22634:7:68","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":4654,"src":"22624:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22604:38:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":20269,"name":"amountCalculatedScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20143,"src":"22474:24:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22499:20:68","memberName":"toRawUndoRateRoundUp","nodeType":"MemberAccess","referencedDeclaration":6530,"src":"22474:45:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":20281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22474:182:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22452:204:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20283,"nodeType":"ExpressionStatement","src":"22452:204:68"},{"expression":{"id":20291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":20284,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20145,"src":"22672:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20285,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20147,"src":"22685:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20286,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"22671:27:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"id":20287,"name":"amountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20141,"src":"22702:19:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20288,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20127,"src":"22723:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":20289,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22739:14:68","memberName":"amountGivenRaw","nodeType":"MemberAccess","referencedDeclaration":4749,"src":"22723:30:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20290,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"22701:53:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"22671:83:68","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20292,"nodeType":"ExpressionStatement","src":"22671:83:68"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20293,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20145,"src":"22773:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":20294,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20127,"src":"22787:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":20295,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22803:8:68","memberName":"limitRaw","nodeType":"MemberAccess","referencedDeclaration":4751,"src":"22787:24:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22773:38:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20304,"nodeType":"IfStatement","src":"22769:132:68","trueBody":{"id":20303,"nodeType":"Block","src":"22813:88:68","statements":[{"errorCall":{"arguments":[{"id":20298,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20145,"src":"22848:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20299,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20127,"src":"22861:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":20300,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22877:8:68","memberName":"limitRaw","nodeType":"MemberAccess","referencedDeclaration":4751,"src":"22861:24:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20297,"name":"SwapLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3525,"src":"22838:9:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":20301,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22838:48:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20302,"nodeType":"RevertStatement","src":"22831:55:68"}]}}]},"id":20306,"nodeType":"IfStatement","src":"20223:2688:68","trueBody":{"id":20248,"nodeType":"Block","src":"20270:1268:68","statements":[{"expression":{"id":20207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20202,"name":"poolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20136,"src":"20467:14:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":20204,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"20482:19:68","memberName":"amountGivenScaled18","nodeType":"MemberAccess","referencedDeclaration":4760,"src":"20467:34:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":20205,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20130,"src":"20504:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20206,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20514:19:68","memberName":"amountGivenScaled18","nodeType":"MemberAccess","referencedDeclaration":4658,"src":"20504:29:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20467:66:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20208,"nodeType":"ExpressionStatement","src":"20467:66:68"},{"expression":{"id":20225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20209,"name":"amountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20141,"src":"20639:19:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"expression":{"id":20212,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20133,"src":"20726:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20213,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20735:21:68","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":4728,"src":"20726:30:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20216,"indexExpression":{"expression":{"id":20214,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20130,"src":"20757:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20215,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20767:8:68","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":4656,"src":"20757:18:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20726:50:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"expression":{"id":20217,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20133,"src":"21207:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20218,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21216:10:68","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":4725,"src":"21207:19:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20221,"indexExpression":{"expression":{"id":20219,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20130,"src":"21227:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20220,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21237:8:68","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":4656,"src":"21227:18:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21207:39:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21247:18:68","memberName":"computeRateRoundUp","nodeType":"MemberAccess","referencedDeclaration":6847,"src":"21207:58:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":20223,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21207:60:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":20210,"name":"amountCalculatedScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20143,"src":"20661:24:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20686:22:68","memberName":"toRawUndoRateRoundDown","nodeType":"MemberAccess","referencedDeclaration":6509,"src":"20661:47:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":20224,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20661:620:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20639:642:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20226,"nodeType":"ExpressionStatement","src":"20639:642:68"},{"expression":{"id":20234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":20227,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20145,"src":"21297:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20228,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20147,"src":"21310:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20229,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"21296:27:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"expression":{"id":20230,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20127,"src":"21327:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":20231,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21343:14:68","memberName":"amountGivenRaw","nodeType":"MemberAccess","referencedDeclaration":4749,"src":"21327:30:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20232,"name":"amountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20141,"src":"21359:19:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20233,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"21326:53:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"21296:83:68","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20235,"nodeType":"ExpressionStatement","src":"21296:83:68"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20236,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20147,"src":"21398:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":20237,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20127,"src":"21413:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":20238,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21429:8:68","memberName":"limitRaw","nodeType":"MemberAccess","referencedDeclaration":4751,"src":"21413:24:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21398:39:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20247,"nodeType":"IfStatement","src":"21394:134:68","trueBody":{"id":20246,"nodeType":"Block","src":"21439:89:68","statements":[{"errorCall":{"arguments":[{"id":20241,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20147,"src":"21474:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20242,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20127,"src":"21488:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":20243,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21504:8:68","memberName":"limitRaw","nodeType":"MemberAccess","referencedDeclaration":4751,"src":"21488:24:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20240,"name":"SwapLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3525,"src":"21464:9:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":20244,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21464:49:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20245,"nodeType":"RevertStatement","src":"21457:56:68"}]}}]}},{"expression":{"arguments":[{"expression":{"id":20308,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20127,"src":"22995:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":20309,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23011:7:68","memberName":"tokenIn","nodeType":"MemberAccess","referencedDeclaration":4744,"src":"22995:23:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":20310,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20145,"src":"23020:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20307,"name":"_takeDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24908,"src":"22985:9:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":20311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22985:47:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20312,"nodeType":"ExpressionStatement","src":"22985:47:68"},{"expression":{"arguments":[{"expression":{"id":20314,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20127,"src":"23056:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":20315,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23072:8:68","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":4747,"src":"23056:24:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":20316,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20147,"src":"23082:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20313,"name":"_supplyCredit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24891,"src":"23042:13:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":20317,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23042:53:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20318,"nodeType":"ExpressionStatement","src":"23042:53:68"},{"expression":{"id":20336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":20319,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20151,"src":"23317:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapInternalLocals_$20123_memory_ptr","typeString":"struct Vault.SwapInternalLocals memory"}},"id":20321,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"23324:21:68","memberName":"totalSwapFeeAmountRaw","nodeType":"MemberAccess","referencedDeclaration":20120,"src":"23317:28:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20322,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20151,"src":"23347:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapInternalLocals_$20123_memory_ptr","typeString":"struct Vault.SwapInternalLocals memory"}},"id":20323,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"23354:21:68","memberName":"aggregateFeeAmountRaw","nodeType":"MemberAccess","referencedDeclaration":20122,"src":"23347:28:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20324,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"23316:60:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":20326,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20133,"src":"23427:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},{"expression":{"id":20327,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20151,"src":"23449:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapInternalLocals_$20123_memory_ptr","typeString":"struct Vault.SwapInternalLocals memory"}},"id":20328,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23456:26:68","memberName":"totalSwapFeeAmountScaled18","nodeType":"MemberAccess","referencedDeclaration":20118,"src":"23449:33:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20329,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20127,"src":"23496:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":20330,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23512:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4741,"src":"23496:20:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":20331,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20127,"src":"23530:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":20332,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23546:7:68","memberName":"tokenIn","nodeType":"MemberAccess","referencedDeclaration":4744,"src":"23530:23:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"expression":{"id":20333,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20130,"src":"23567:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20334,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23577:7:68","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":4654,"src":"23567:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20325,"name":"_computeAndChargeAggregateSwapFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21795,"src":"23379:34:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PoolData_$4729_memory_ptr_$_t_uint256_$_t_address_$_t_contract$_IERC20_$40109_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (struct PoolData memory,uint256,address,contract IERC20,uint256) returns (uint256,uint256)"}},"id":20335,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23379:215:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"23316:278:68","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20337,"nodeType":"ExpressionStatement","src":"23316:278:68"},{"expression":{"arguments":[{"expression":{"id":20341,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20130,"src":"23695:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20342,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23705:7:68","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":4654,"src":"23695:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":20343,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20133,"src":"23726:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20344,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23735:11:68","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":4719,"src":"23726:20:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20347,"indexExpression":{"expression":{"id":20345,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20130,"src":"23747:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20346,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23757:7:68","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":4654,"src":"23747:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23726:39:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":20348,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20145,"src":"23768:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23726:53:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":20350,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20151,"src":"23782:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapInternalLocals_$20123_memory_ptr","typeString":"struct Vault.SwapInternalLocals memory"}},"id":20351,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23789:21:68","memberName":"aggregateFeeAmountRaw","nodeType":"MemberAccess","referencedDeclaration":20122,"src":"23782:28:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23726:84:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20353,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"23824:8:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":20354,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"23833:10:68","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":4731,"src":"23824:19:68","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"expression":{"id":20338,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20133,"src":"23649:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20340,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23658:23:68","memberName":"updateRawAndLiveBalance","nodeType":"MemberAccess","referencedDeclaration":30978,"src":"23649:32:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_PoolData_$4729_memory_ptr_$_t_uint256_$_t_uint256_$_t_enum$_Rounding_$4732_$returns$__$attached_to$_t_struct$_PoolData_$4729_memory_ptr_$","typeString":"function (struct PoolData memory,uint256,uint256,enum Rounding) pure"}},"id":20355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23649:204:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20356,"nodeType":"ExpressionStatement","src":"23649:204:68"},{"expression":{"arguments":[{"expression":{"id":20360,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20130,"src":"23909:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20361,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23919:8:68","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":4656,"src":"23909:18:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":20362,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20133,"src":"23941:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20363,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23950:11:68","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":4719,"src":"23941:20:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20366,"indexExpression":{"expression":{"id":20364,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20130,"src":"23962:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20365,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23972:8:68","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":4656,"src":"23962:18:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23941:40:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":20367,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20147,"src":"23984:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23941:55:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20369,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"24010:8:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":20370,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"24019:10:68","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":4731,"src":"24010:19:68","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"expression":{"id":20357,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20133,"src":"23863:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20359,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"23872:23:68","memberName":"updateRawAndLiveBalance","nodeType":"MemberAccess","referencedDeclaration":30978,"src":"23863:32:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_PoolData_$4729_memory_ptr_$_t_uint256_$_t_uint256_$_t_enum$_Rounding_$4732_$returns$__$attached_to$_t_struct$_PoolData_$4729_memory_ptr_$","typeString":"function (struct PoolData memory,uint256,uint256,enum Rounding) pure"}},"id":20371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23863:176:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20372,"nodeType":"ExpressionStatement","src":"23863:176:68"},{"assignments":[20376],"declarations":[{"constant":false,"id":20376,"mutability":"mutable","name":"poolBalances","nameLocation":"24189:12:68","nodeType":"VariableDeclaration","scope":20435,"src":"24123:78:68","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"typeName":{"id":20375,"keyName":"tokenIndex","keyNameLocation":"24139:10:68","keyType":{"id":20373,"name":"uint256","nodeType":"ElementaryTypeName","src":"24131:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"24123:57:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"valueName":"packedTokenBalance","valueNameLocation":"24161:18:68","valueType":{"id":20374,"name":"bytes32","nodeType":"ElementaryTypeName","src":"24153:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},"visibility":"internal"}],"id":20381,"initialValue":{"baseExpression":{"id":20377,"name":"_poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28256,"src":"24204:18:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"}},"id":20380,"indexExpression":{"expression":{"id":20378,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20127,"src":"24236:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":20379,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24252:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4741,"src":"24236:20:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24204:62:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"nodeType":"VariableDeclarationStatement","src":"24123:143:68"},{"expression":{"id":20399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20382,"name":"poolBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20376,"src":"24276:12:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"id":20385,"indexExpression":{"expression":{"id":20383,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20130,"src":"24289:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20384,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24299:7:68","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":4654,"src":"24289:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24276:31:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"expression":{"id":20388,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20133,"src":"24358:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20389,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24367:11:68","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":4719,"src":"24358:20:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20392,"indexExpression":{"expression":{"id":20390,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20130,"src":"24379:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20391,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24389:7:68","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":4654,"src":"24379:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24358:39:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":20393,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20133,"src":"24411:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20394,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24420:20:68","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":4722,"src":"24411:29:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20397,"indexExpression":{"expression":{"id":20395,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20130,"src":"24441:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20396,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24451:7:68","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":4654,"src":"24441:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24411:48:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":20386,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6344,"src":"24310:18:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PackedTokenBalance_$6344_$","typeString":"type(library PackedTokenBalance)"}},"id":20387,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24329:15:68","memberName":"toPackedBalance","nodeType":"MemberAccess","referencedDeclaration":6303,"src":"24310:34:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":20398,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24310:159:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"24276:193:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":20400,"nodeType":"ExpressionStatement","src":"24276:193:68"},{"expression":{"id":20418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20401,"name":"poolBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20376,"src":"24479:12:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"id":20404,"indexExpression":{"expression":{"id":20402,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20130,"src":"24492:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20403,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24502:8:68","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":4656,"src":"24492:18:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24479:32:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"expression":{"id":20407,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20133,"src":"24562:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20408,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24571:11:68","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":4719,"src":"24562:20:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20411,"indexExpression":{"expression":{"id":20409,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20130,"src":"24583:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20410,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24593:8:68","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":4656,"src":"24583:18:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24562:40:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":20412,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20133,"src":"24616:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20413,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24625:20:68","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":4722,"src":"24616:29:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20416,"indexExpression":{"expression":{"id":20414,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20130,"src":"24646:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20415,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24656:8:68","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":4656,"src":"24646:18:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24616:49:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":20405,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6344,"src":"24514:18:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PackedTokenBalance_$6344_$","typeString":"type(library PackedTokenBalance)"}},"id":20406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24533:15:68","memberName":"toPackedBalance","nodeType":"MemberAccess","referencedDeclaration":6303,"src":"24514:34:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":20417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24514:161:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"24479:196:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":20419,"nodeType":"ExpressionStatement","src":"24479:196:68"},{"eventCall":{"arguments":[{"expression":{"id":20421,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20127,"src":"24741:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":20422,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24757:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4741,"src":"24741:20:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":20423,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20127,"src":"24775:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":20424,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24791:7:68","memberName":"tokenIn","nodeType":"MemberAccess","referencedDeclaration":4744,"src":"24775:23:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"expression":{"id":20425,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20127,"src":"24812:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":20426,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24828:8:68","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":4747,"src":"24812:24:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":20427,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20145,"src":"24850:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20428,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20147,"src":"24875:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20429,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20130,"src":"24901:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":20430,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24911:17:68","memberName":"swapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":4660,"src":"24901:27:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20431,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20151,"src":"24942:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapInternalLocals_$20123_memory_ptr","typeString":"struct Vault.SwapInternalLocals memory"}},"id":20432,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24949:21:68","memberName":"totalSwapFeeAmountRaw","nodeType":"MemberAccess","referencedDeclaration":20120,"src":"24942:28:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20420,"name":"Swap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3830,"src":"24723:4:68","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$40109_$_t_contract$_IERC20_$40109_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,contract IERC20,contract IERC20,uint256,uint256,uint256,uint256)"}},"id":20433,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24723:257:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20434,"nodeType":"EmitStatement","src":"24718:262:68"}]},"documentation":{"id":20124,"nodeType":"StructuredDocumentation","src":"18280:441:68","text":" @dev Main non-reentrant portion of the swap, which calls the pool hook and updates accounting. `vaultSwapParams`\n are passed to the pool's `onSwap` hook.\n Preconditions: complete `SwapParams`, `SwapState`, and `PoolData`.\n Side effects: mutates balancesRaw and balancesLiveScaled18 in `poolData`.\n Updates `_aggregateFeeAmounts`, and `_poolTokenBalances` in storage.\n Emits Swap event."},"id":20436,"implemented":true,"kind":"function","modifiers":[{"id":20139,"kind":"modifierInvocation","modifierName":{"id":20138,"name":"nonReentrant","nameLocations":["18936:12:68"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"18936:12:68"},"nodeType":"ModifierInvocation","src":"18936:12:68"}],"name":"_swap","nameLocation":"18735:5:68","nodeType":"FunctionDefinition","parameters":{"id":20137,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20127,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"18773:15:68","nodeType":"VariableDeclaration","scope":20436,"src":"18750:38:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":20126,"nodeType":"UserDefinedTypeName","pathNode":{"id":20125,"name":"VaultSwapParams","nameLocations":["18750:15:68"],"nodeType":"IdentifierPath","referencedDeclaration":4754,"src":"18750:15:68"},"referencedDeclaration":4754,"src":"18750:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"},{"constant":false,"id":20130,"mutability":"mutable","name":"swapState","nameLocation":"18815:9:68","nodeType":"VariableDeclaration","scope":20436,"src":"18798:26:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState"},"typeName":{"id":20129,"nodeType":"UserDefinedTypeName","pathNode":{"id":20128,"name":"SwapState","nameLocations":["18798:9:68"],"nodeType":"IdentifierPath","referencedDeclaration":4661,"src":"18798:9:68"},"referencedDeclaration":4661,"src":"18798:9:68","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_storage_ptr","typeString":"struct SwapState"}},"visibility":"internal"},{"constant":false,"id":20133,"mutability":"mutable","name":"poolData","nameLocation":"18850:8:68","nodeType":"VariableDeclaration","scope":20436,"src":"18834:24:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":20132,"nodeType":"UserDefinedTypeName","pathNode":{"id":20131,"name":"PoolData","nameLocations":["18834:8:68"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"18834:8:68"},"referencedDeclaration":4729,"src":"18834:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":20136,"mutability":"mutable","name":"poolSwapParams","nameLocation":"18890:14:68","nodeType":"VariableDeclaration","scope":20436,"src":"18868:36:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":20135,"nodeType":"UserDefinedTypeName","pathNode":{"id":20134,"name":"PoolSwapParams","nameLocations":["18868:14:68"],"nodeType":"IdentifierPath","referencedDeclaration":4772,"src":"18868:14:68"},"referencedDeclaration":4772,"src":"18868:14:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"src":"18740:170:68"},"returnParameters":{"id":20148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20141,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"18987:19:68","nodeType":"VariableDeclaration","scope":20436,"src":"18979:27:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20140,"name":"uint256","nodeType":"ElementaryTypeName","src":"18979:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20143,"mutability":"mutable","name":"amountCalculatedScaled18","nameLocation":"19028:24:68","nodeType":"VariableDeclaration","scope":20436,"src":"19020:32:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20142,"name":"uint256","nodeType":"ElementaryTypeName","src":"19020:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20145,"mutability":"mutable","name":"amountInRaw","nameLocation":"19074:11:68","nodeType":"VariableDeclaration","scope":20436,"src":"19066:19:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20144,"name":"uint256","nodeType":"ElementaryTypeName","src":"19066:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20147,"mutability":"mutable","name":"amountOutRaw","nameLocation":"19107:12:68","nodeType":"VariableDeclaration","scope":20436,"src":"19099:20:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20146,"name":"uint256","nodeType":"ElementaryTypeName","src":"19099:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18965:164:68"},"scope":22797,"src":"18726:6261:68","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[4489],"body":{"id":20597,"nodeType":"Block","src":"25485:3988:68","statements":[{"expression":{"arguments":[{"expression":{"id":20457,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20440,"src":"25828:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20458,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25835:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4810,"src":"25828:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20456,"name":"_ensureUnpaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24998,"src":"25812:15:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":20459,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25812:28:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20460,"nodeType":"ExpressionStatement","src":"25812:28:68"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":20464,"name":"_sessionIdSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28366,"src":"25877:14:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function () view returns (StorageSlotExtension.Uint256SlotType)"}},"id":20465,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25877:16:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":20466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25894:5:68","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":10251,"src":"25877:22:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Uint256SlotType_$10142_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function (StorageSlotExtension.Uint256SlotType) view returns (uint256)"}},"id":20467,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25877:24:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20468,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20440,"src":"25903:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20469,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25910:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4810,"src":"25903:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"74727565","id":20470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"25916:4:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":20461,"name":"_addLiquidityCalled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28355,"src":"25850:19:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862_$","typeString":"function () view returns (UintToAddressToBooleanMappingSlot)"}},"id":20462,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25850:21:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862","typeString":"UintToAddressToBooleanMappingSlot"}},"id":20463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25872:4:68","memberName":"tSet","nodeType":"MemberAccess","referencedDeclaration":7073,"src":"25850:26:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862_$_t_uint256_$_t_address_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862_$","typeString":"function (UintToAddressToBooleanMappingSlot,uint256,address,bool)"}},"id":20471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25850:71:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20472,"nodeType":"ExpressionStatement","src":"25850:71:68"},{"assignments":[20475],"declarations":[{"constant":false,"id":20475,"mutability":"mutable","name":"poolData","nameLocation":"26404:8:68","nodeType":"VariableDeclaration","scope":20597,"src":"26388:24:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":20474,"nodeType":"UserDefinedTypeName","pathNode":{"id":20473,"name":"PoolData","nameLocations":["26388:8:68"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"26388:8:68"},"referencedDeclaration":4729,"src":"26388:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"id":20482,"initialValue":{"arguments":[{"expression":{"id":20477,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20440,"src":"26457:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20478,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26464:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4810,"src":"26457:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":20479,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"26470:8:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":20480,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"26479:8:68","memberName":"ROUND_UP","nodeType":"MemberAccess","referencedDeclaration":4730,"src":"26470:17:68","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"id":20476,"name":"_loadPoolDataUpdatingBalancesAndYieldFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25381,"src":"26415:41:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_enum$_Rounding_$4732_$returns$_t_struct$_PoolData_$4729_memory_ptr_$","typeString":"function (address,enum Rounding) returns (struct PoolData memory)"}},"id":20481,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26415:73:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"nodeType":"VariableDeclarationStatement","src":"26388:100:68"},{"expression":{"arguments":[{"expression":{"expression":{"id":20486,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20475,"src":"26534:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20487,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26543:6:68","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":4712,"src":"26534:15:68","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":20488,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26550:6:68","memberName":"length","nodeType":"MemberAccess","src":"26534:22:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":20489,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20440,"src":"26558:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20490,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26565:12:68","memberName":"maxAmountsIn","nodeType":"MemberAccess","referencedDeclaration":4815,"src":"26558:19:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26578:6:68","memberName":"length","nodeType":"MemberAccess","src":"26558:26:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":20483,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6193,"src":"26498:12:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$6193_$","typeString":"type(library InputHelpers)"}},"id":20485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26511:22:68","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":5926,"src":"26498:35:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":20492,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26498:87:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20493,"nodeType":"ExpressionStatement","src":"26498:87:68"},{"assignments":[20498],"declarations":[{"constant":false,"id":20498,"mutability":"mutable","name":"maxAmountsInScaled18","nameLocation":"26960:20:68","nodeType":"VariableDeclaration","scope":20597,"src":"26943:37:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":20496,"name":"uint256","nodeType":"ElementaryTypeName","src":"26943:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20497,"nodeType":"ArrayTypeName","src":"26943:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":20507,"initialValue":{"arguments":[{"expression":{"id":20502,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20475,"src":"27054:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20503,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27063:21:68","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":4728,"src":"27054:30:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":20504,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20475,"src":"27098:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20505,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27107:10:68","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":4725,"src":"27098:19:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"expression":{"expression":{"id":20499,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20440,"src":"26983:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20500,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26990:12:68","memberName":"maxAmountsIn","nodeType":"MemberAccess","referencedDeclaration":4815,"src":"26983:19:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20501,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27003:37:68","memberName":"copyToScaled18ApplyRateRoundDownArray","nodeType":"MemberAccess","referencedDeclaration":6684,"src":"26983:57:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$attached_to$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":20506,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26983:144:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"26943:184:68"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":20508,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20475,"src":"27142:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20509,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27151:14:68","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"27142:23:68","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":20510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27166:28:68","memberName":"shouldCallBeforeAddLiquidity","nodeType":"MemberAccess","referencedDeclaration":28679,"src":"27142:52:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":20511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27142:54:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20549,"nodeType":"IfStatement","src":"27138:890:68","trueBody":{"id":20548,"nodeType":"Block","src":"27198:830:68","statements":[{"expression":{"arguments":[{"expression":{"id":20515,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"27271:3:68","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27275:6:68","memberName":"sender","nodeType":"MemberAccess","src":"27271:10:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20517,"name":"maxAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20498,"src":"27299:20:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":20518,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20440,"src":"27337:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},{"id":20519,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20475,"src":"27361:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},{"baseExpression":{"id":20520,"name":"_hooksContracts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28236,"src":"27387:15:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IHooks_$2026_$","typeString":"mapping(address => contract IHooks)"}},"id":20523,"indexExpression":{"expression":{"id":20521,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20440,"src":"27403:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20522,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27410:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4810,"src":"27403:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27387:28:68","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"},{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}],"expression":{"id":20512,"name":"HooksConfigLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29474,"src":"27212:14:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_HooksConfigLib_$29474_$","typeString":"type(library HooksConfigLib)"}},"id":20514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27227:26:68","memberName":"callBeforeAddLiquidityHook","nodeType":"MemberAccess","referencedDeclaration":29139,"src":"27212:41:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_struct$_AddLiquidityParams_$4823_memory_ptr_$_t_struct$_PoolData_$4729_memory_ptr_$_t_contract$_IHooks_$2026_$returns$__$","typeString":"function (address,uint256[] memory,struct AddLiquidityParams memory,struct PoolData memory,contract IHooks)"}},"id":20524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27212:217:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20525,"nodeType":"ExpressionStatement","src":"27212:217:68"},{"expression":{"arguments":[{"baseExpression":{"id":20529,"name":"_poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28256,"src":"27690:18:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"}},"id":20532,"indexExpression":{"expression":{"id":20530,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20440,"src":"27709:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20531,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27716:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4810,"src":"27709:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27690:31:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},{"expression":{"id":20533,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"27723:8:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":20534,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"27732:8:68","memberName":"ROUND_UP","nodeType":"MemberAccess","referencedDeclaration":4730,"src":"27723:17:68","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"expression":{"id":20526,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20475,"src":"27658:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20528,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27667:22:68","memberName":"reloadBalancesAndRates","nodeType":"MemberAccess","referencedDeclaration":30871,"src":"27658:31:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PoolData_$4729_memory_ptr_$_t_mapping$_t_uint256_$_t_bytes32_$_$_t_enum$_Rounding_$4732_$returns$__$attached_to$_t_struct$_PoolData_$4729_memory_ptr_$","typeString":"function (struct PoolData memory,mapping(uint256 => bytes32),enum Rounding) view"}},"id":20535,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27658:83:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20536,"nodeType":"ExpressionStatement","src":"27658:83:68"},{"expression":{"id":20546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20537,"name":"maxAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20498,"src":"27838:20:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":20541,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20475,"src":"27936:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20542,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27945:21:68","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":4728,"src":"27936:30:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":20543,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20475,"src":"27984:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20544,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27993:10:68","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":4725,"src":"27984:19:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"expression":{"expression":{"id":20538,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20440,"src":"27861:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20539,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"27868:12:68","memberName":"maxAmountsIn","nodeType":"MemberAccess","referencedDeclaration":4815,"src":"27861:19:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27881:37:68","memberName":"copyToScaled18ApplyRateRoundDownArray","nodeType":"MemberAccess","referencedDeclaration":6684,"src":"27861:57:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$attached_to$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":20545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27861:156:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"27838:179:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20547,"nodeType":"ExpressionStatement","src":"27838:179:68"}]}},{"assignments":[20554],"declarations":[{"constant":false,"id":20554,"mutability":"mutable","name":"amountsInScaled18","nameLocation":"28601:17:68","nodeType":"VariableDeclaration","scope":20597,"src":"28584:34:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":20552,"name":"uint256","nodeType":"ElementaryTypeName","src":"28584:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20553,"nodeType":"ArrayTypeName","src":"28584:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":20555,"nodeType":"VariableDeclarationStatement","src":"28584:34:68"},{"expression":{"id":20566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":20556,"name":"amountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20450,"src":"28629:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":20557,"name":"amountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20554,"src":"28640:17:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":20558,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20452,"src":"28659:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20559,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20454,"src":"28673:10:68","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":20560,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"28628:56:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256[] memory,uint256,bytes memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":20562,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20475,"src":"28714:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},{"id":20563,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20440,"src":"28736:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},{"id":20564,"name":"maxAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20498,"src":"28756:20:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":20561,"name":"_addLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21046,"src":"28687:13:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PoolData_$4729_memory_ptr_$_t_struct$_AddLiquidityParams_$4823_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"function (struct PoolData memory,struct AddLiquidityParams memory,uint256[] memory) returns (uint256[] memory,uint256[] memory,uint256,bytes memory)"}},"id":20565,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28687:99:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256[] memory,uint256,bytes memory)"}},"src":"28628:158:68","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20567,"nodeType":"ExpressionStatement","src":"28628:158:68"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":20568,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20475,"src":"28984:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20569,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28993:14:68","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"28984:23:68","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":20570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29008:27:68","memberName":"shouldCallAfterAddLiquidity","nodeType":"MemberAccess","referencedDeclaration":28722,"src":"28984:51:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":20571,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28984:53:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20596,"nodeType":"IfStatement","src":"28980:487:68","trueBody":{"id":20595,"nodeType":"Block","src":"29039:428:68","statements":[{"assignments":[20574],"declarations":[{"constant":false,"id":20574,"mutability":"mutable","name":"hooksContract","nameLocation":"29121:13:68","nodeType":"VariableDeclaration","scope":20595,"src":"29114:20:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"},"typeName":{"id":20573,"nodeType":"UserDefinedTypeName","pathNode":{"id":20572,"name":"IHooks","nameLocations":["29114:6:68"],"nodeType":"IdentifierPath","referencedDeclaration":2026,"src":"29114:6:68"},"referencedDeclaration":2026,"src":"29114:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"visibility":"internal"}],"id":20579,"initialValue":{"baseExpression":{"id":20575,"name":"_hooksContracts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28236,"src":"29137:15:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IHooks_$2026_$","typeString":"mapping(address => contract IHooks)"}},"id":20578,"indexExpression":{"expression":{"id":20576,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20440,"src":"29153:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20577,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29160:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4810,"src":"29153:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29137:28:68","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"nodeType":"VariableDeclarationStatement","src":"29114:51:68"},{"expression":{"id":20593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20580,"name":"amountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20450,"src":"29180:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":20584,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"29259:3:68","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29263:6:68","memberName":"sender","nodeType":"MemberAccess","src":"29259:10:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20586,"name":"amountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20554,"src":"29287:17:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":20587,"name":"amountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20450,"src":"29322:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":20588,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20452,"src":"29349:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20589,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20440,"src":"29379:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},{"id":20590,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20475,"src":"29403:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},{"id":20591,"name":"hooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20574,"src":"29429:13:68","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"},{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}],"expression":{"expression":{"id":20581,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20475,"src":"29192:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20582,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"29201:14:68","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"29192:23:68","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":20583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29216:25:68","memberName":"callAfterAddLiquidityHook","nodeType":"MemberAccess","referencedDeclaration":29256,"src":"29192:49:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_struct$_AddLiquidityParams_$4823_memory_ptr_$_t_struct$_PoolData_$4729_memory_ptr_$_t_contract$_IHooks_$2026_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,address,uint256[] memory,uint256[] memory,uint256,struct AddLiquidityParams memory,struct PoolData memory,contract IHooks) returns (uint256[] memory)"}},"id":20592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29192:264:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"29180:276:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20594,"nodeType":"ExpressionStatement","src":"29180:276:68"}]}}]},"documentation":{"id":20437,"nodeType":"StructuredDocumentation","src":"25205:26:68","text":"@inheritdoc IVaultMain"},"functionSelector":"4af29ec4","id":20598,"implemented":true,"kind":"function","modifiers":[{"id":20443,"kind":"modifierInvocation","modifierName":{"id":20442,"name":"onlyWhenUnlocked","nameLocations":["25331:16:68"],"nodeType":"IdentifierPath","referencedDeclaration":24848,"src":"25331:16:68"},"nodeType":"ModifierInvocation","src":"25331:16:68"},{"arguments":[{"expression":{"id":20445,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20440,"src":"25376:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20446,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"25383:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4810,"src":"25376:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":20447,"kind":"modifierInvocation","modifierName":{"id":20444,"name":"withInitializedPool","nameLocations":["25356:19:68"],"nodeType":"IdentifierPath","referencedDeclaration":25131,"src":"25356:19:68"},"nodeType":"ModifierInvocation","src":"25356:32:68"}],"name":"addLiquidity","nameLocation":"25245:12:68","nodeType":"FunctionDefinition","parameters":{"id":20441,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20440,"mutability":"mutable","name":"params","nameLocation":"25293:6:68","nodeType":"VariableDeclaration","scope":20598,"src":"25267:32:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams"},"typeName":{"id":20439,"nodeType":"UserDefinedTypeName","pathNode":{"id":20438,"name":"AddLiquidityParams","nameLocations":["25267:18:68"],"nodeType":"IdentifierPath","referencedDeclaration":4823,"src":"25267:18:68"},"referencedDeclaration":4823,"src":"25267:18:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_storage_ptr","typeString":"struct AddLiquidityParams"}},"visibility":"internal"}],"src":"25257:48:68"},"returnParameters":{"id":20455,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20450,"mutability":"mutable","name":"amountsIn","nameLocation":"25423:9:68","nodeType":"VariableDeclaration","scope":20598,"src":"25406:26:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":20448,"name":"uint256","nodeType":"ElementaryTypeName","src":"25406:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20449,"nodeType":"ArrayTypeName","src":"25406:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":20452,"mutability":"mutable","name":"bptAmountOut","nameLocation":"25442:12:68","nodeType":"VariableDeclaration","scope":20598,"src":"25434:20:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20451,"name":"uint256","nodeType":"ElementaryTypeName","src":"25434:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20454,"mutability":"mutable","name":"returnData","nameLocation":"25469:10:68","nodeType":"VariableDeclaration","scope":20598,"src":"25456:23:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":20453,"name":"bytes","nodeType":"ElementaryTypeName","src":"25456:5:68","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"25405:75:68"},"scope":22797,"src":"25236:4237:68","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"canonicalName":"Vault.LiquidityLocals","id":20605,"members":[{"constant":false,"id":20600,"mutability":"mutable","name":"numTokens","nameLocation":"29612:9:68","nodeType":"VariableDeclaration","scope":20605,"src":"29604:17:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20599,"name":"uint256","nodeType":"ElementaryTypeName","src":"29604:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20602,"mutability":"mutable","name":"aggregateSwapFeeAmountRaw","nameLocation":"29639:25:68","nodeType":"VariableDeclaration","scope":20605,"src":"29631:33:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20601,"name":"uint256","nodeType":"ElementaryTypeName","src":"29631:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20604,"mutability":"mutable","name":"tokenIndex","nameLocation":"29682:10:68","nodeType":"VariableDeclaration","scope":20605,"src":"29674:18:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20603,"name":"uint256","nodeType":"ElementaryTypeName","src":"29674:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"LiquidityLocals","nameLocation":"29578:15:68","nodeType":"StructDefinition","scope":22797,"src":"29571:128:68","visibility":"public"},{"body":{"id":21045,"nodeType":"Block","src":"30550:6500:68","statements":[{"assignments":[20632],"declarations":[{"constant":false,"id":20632,"mutability":"mutable","name":"locals","nameLocation":"30583:6:68","nodeType":"VariableDeclaration","scope":21045,"src":"30560:29:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$20605_memory_ptr","typeString":"struct Vault.LiquidityLocals"},"typeName":{"id":20631,"nodeType":"UserDefinedTypeName","pathNode":{"id":20630,"name":"LiquidityLocals","nameLocations":["30560:15:68"],"nodeType":"IdentifierPath","referencedDeclaration":20605,"src":"30560:15:68"},"referencedDeclaration":20605,"src":"30560:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$20605_storage_ptr","typeString":"struct Vault.LiquidityLocals"}},"visibility":"internal"}],"id":20633,"nodeType":"VariableDeclarationStatement","src":"30560:29:68"},{"expression":{"id":20640,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20634,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20632,"src":"30599:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$20605_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":20636,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"30606:9:68","memberName":"numTokens","nodeType":"MemberAccess","referencedDeclaration":20600,"src":"30599:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":20637,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20609,"src":"30618:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20638,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30627:6:68","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":4712,"src":"30618:15:68","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":20639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30634:6:68","memberName":"length","nodeType":"MemberAccess","src":"30618:22:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30599:41:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20641,"nodeType":"ExpressionStatement","src":"30599:41:68"},{"expression":{"id":20649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20642,"name":"amountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20621,"src":"30650:12:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":20646,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20632,"src":"30679:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$20605_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":20647,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30686:9:68","memberName":"numTokens","nodeType":"MemberAccess","referencedDeclaration":20600,"src":"30679:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20645,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"30665:13:68","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":20643,"name":"uint256","nodeType":"ElementaryTypeName","src":"30669:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20644,"nodeType":"ArrayTypeName","src":"30669:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":20648,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30665:31:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"30650:46:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20650,"nodeType":"ExpressionStatement","src":"30650:46:68"},{"assignments":[20655],"declarations":[{"constant":false,"id":20655,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"30823:14:68","nodeType":"VariableDeclaration","scope":21045,"src":"30806:31:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":20653,"name":"uint256","nodeType":"ElementaryTypeName","src":"30806:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20654,"nodeType":"ArrayTypeName","src":"30806:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":20656,"nodeType":"VariableDeclarationStatement","src":"30806:31:68"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},"id":20661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20657,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20612,"src":"30852:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20658,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30859:4:68","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4820,"src":"30852:11:68","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":20659,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4807,"src":"30867:16:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_AddLiquidityKind_$4807_$","typeString":"type(enum AddLiquidityKind)"}},"id":20660,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"30884:12:68","memberName":"PROPORTIONAL","nodeType":"MemberAccess","referencedDeclaration":4802,"src":"30867:29:68","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},"src":"30852:44:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},"id":20694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20690,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20612,"src":"31346:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20691,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31353:4:68","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4820,"src":"31346:11:68","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":20692,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4807,"src":"31361:16:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_AddLiquidityKind_$4807_$","typeString":"type(enum AddLiquidityKind)"}},"id":20693,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"31378:8:68","memberName":"DONATION","nodeType":"MemberAccess","referencedDeclaration":4805,"src":"31361:25:68","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},"src":"31346:40:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},"id":20724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20720,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20612,"src":"31629:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20721,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31636:4:68","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4820,"src":"31629:11:68","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":20722,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4807,"src":"31644:16:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_AddLiquidityKind_$4807_$","typeString":"type(enum AddLiquidityKind)"}},"id":20723,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"31661:10:68","memberName":"UNBALANCED","nodeType":"MemberAccess","referencedDeclaration":4803,"src":"31644:27:68","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},"src":"31629:42:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},"id":20772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20768,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20612,"src":"32400:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20769,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32407:4:68","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4820,"src":"32400:11:68","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":20770,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4807,"src":"32415:16:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_AddLiquidityKind_$4807_$","typeString":"type(enum AddLiquidityKind)"}},"id":20771,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"32432:22:68","memberName":"SINGLE_TOKEN_EXACT_OUT","nodeType":"MemberAccess","referencedDeclaration":4804,"src":"32415:39:68","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},"src":"32400:54:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},"id":20831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":20827,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20612,"src":"33191:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20828,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33198:4:68","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4820,"src":"33191:11:68","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":20829,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4807,"src":"33206:16:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_AddLiquidityKind_$4807_$","typeString":"type(enum AddLiquidityKind)"}},"id":20830,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"33223:6:68","memberName":"CUSTOM","nodeType":"MemberAccess","referencedDeclaration":4806,"src":"33206:23:68","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},"src":"33191:38:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":20865,"nodeType":"Block","src":"33771:57:68","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":20862,"name":"InvalidAddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3538,"src":"33792:23:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":20863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33792:25:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20864,"nodeType":"RevertStatement","src":"33785:32:68"}]},"id":20866,"nodeType":"IfStatement","src":"33187:641:68","trueBody":{"id":20861,"nodeType":"Block","src":"33231:534:68","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":20832,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20609,"src":"33245:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20835,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33254:14:68","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"33245:23:68","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":20836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33269:32:68","memberName":"requireAddLiquidityCustomEnabled","nodeType":"MemberAccess","referencedDeclaration":29891,"src":"33245:56:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$__$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure"}},"id":20837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33245:58:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20838,"nodeType":"ExpressionStatement","src":"33245:58:68"},{"expression":{"id":20859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":20839,"name":"amountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20624,"src":"33402:17:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":20840,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20626,"src":"33421:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20841,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20655,"src":"33435:14:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":20842,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20628,"src":"33451:10:68","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":20843,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"33401:61:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256,uint256[] memory,bytes memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":20849,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"33552:3:68","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":20850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33556:6:68","memberName":"sender","nodeType":"MemberAccess","src":"33552:10:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20851,"name":"maxAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20615,"src":"33584:20:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":20852,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20612,"src":"33626:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20853,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33633:15:68","memberName":"minBptAmountOut","nodeType":"MemberAccess","referencedDeclaration":4817,"src":"33626:22:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20854,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20609,"src":"33670:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20855,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33679:20:68","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":4722,"src":"33670:29:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":20856,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20612,"src":"33721:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20857,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33728:8:68","memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":4822,"src":"33721:15:68","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"expression":{"id":20845,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20612,"src":"33480:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20846,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33487:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4810,"src":"33480:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20844,"name":"IPoolLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2082,"src":"33465:14:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPoolLiquidity_$2082_$","typeString":"type(contract IPoolLiquidity)"}},"id":20847,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33465:27:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPoolLiquidity_$2082","typeString":"contract IPoolLiquidity"}},"id":20848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33510:20:68","memberName":"onAddLiquidityCustom","nodeType":"MemberAccess","referencedDeclaration":2055,"src":"33465:65:68","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function (address,uint256[] memory,uint256,uint256[] memory,bytes memory) external returns (uint256[] memory,uint256,uint256[] memory,bytes memory)"}},"id":20858,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33465:289:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256,uint256[] memory,bytes memory)"}},"src":"33401:353:68","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20860,"nodeType":"ExpressionStatement","src":"33401:353:68"}]}},"id":20867,"nodeType":"IfStatement","src":"32396:1432:68","trueBody":{"id":20826,"nodeType":"Block","src":"32456:725:68","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":20773,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20609,"src":"32470:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20776,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32479:14:68","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"32470:23:68","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":20777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32494:33:68","memberName":"requireUnbalancedLiquidityEnabled","nodeType":"MemberAccess","referencedDeclaration":29829,"src":"32470:57:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$__$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure"}},"id":20778,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32470:59:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20779,"nodeType":"ExpressionStatement","src":"32470:59:68"},{"expression":{"id":20783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20780,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20626,"src":"32544:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":20781,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20612,"src":"32559:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20782,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32566:15:68","memberName":"minBptAmountOut","nodeType":"MemberAccess","referencedDeclaration":4817,"src":"32559:22:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32544:37:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20784,"nodeType":"ExpressionStatement","src":"32544:37:68"},{"expression":{"id":20792,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":20785,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20632,"src":"32595:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$20605_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":20787,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"32602:10:68","memberName":"tokenIndex","nodeType":"MemberAccess","referencedDeclaration":20604,"src":"32595:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":20790,"name":"maxAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20615,"src":"32648:20:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"expression":{"id":20788,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6193,"src":"32615:12:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$6193_$","typeString":"type(library InputHelpers)"}},"id":20789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32628:19:68","memberName":"getSingleInputIndex","nodeType":"MemberAccess","referencedDeclaration":6007,"src":"32615:32:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256[] memory) pure returns (uint256)"}},"id":20791,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32615:54:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32595:74:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20793,"nodeType":"ExpressionStatement","src":"32595:74:68"},{"expression":{"id":20796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20794,"name":"amountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20624,"src":"32684:17:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20795,"name":"maxAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20615,"src":"32704:20:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"32684:40:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20797,"nodeType":"ExpressionStatement","src":"32684:40:68"},{"expression":{"id":20824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":20798,"name":"amountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20624,"src":"32739:17:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20801,"indexExpression":{"expression":{"id":20799,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20632,"src":"32757:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$20605_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":20800,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32764:10:68","memberName":"tokenIndex","nodeType":"MemberAccess","referencedDeclaration":20604,"src":"32757:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"32739:36:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20802,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20655,"src":"32777:14:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"id":20803,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"32738:54:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":20806,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20609,"src":"32885:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20807,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32894:20:68","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":4722,"src":"32885:29:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":20808,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20632,"src":"32936:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$20605_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":20809,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32943:10:68","memberName":"tokenIndex","nodeType":"MemberAccess","referencedDeclaration":20604,"src":"32936:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20810,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20626,"src":"32975:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":20812,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20612,"src":"33022:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20813,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33029:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4810,"src":"33022:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20811,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38906,"src":"33009:12:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":20814,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33009:25:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":20815,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20609,"src":"33056:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20816,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33065:14:68","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"33056:23:68","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":20817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33080:26:68","memberName":"getStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":30061,"src":"33056:50:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (uint256)"}},"id":20818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33056:52:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":20820,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20612,"src":"33140:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20821,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33147:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4810,"src":"33140:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20819,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1505,"src":"33130:9:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasePool_$1505_$","typeString":"type(contract IBasePool)"}},"id":20822,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33130:22:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}],"expression":{"id":20804,"name":"BasePoolMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12083,"src":"32795:12:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BasePoolMath_$12083_$","typeString":"type(library BasePoolMath)"}},"id":20805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32825:38:68","memberName":"computeAddLiquiditySingleTokenExactOut","nodeType":"MemberAccess","referencedDeclaration":11762,"src":"32795:68:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_contract$_IBasePool_$1505_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256,uint256,uint256,uint256,contract IBasePool) view returns (uint256,uint256[] memory)"}},"id":20823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32795:375:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory)"}},"src":"32738:432:68","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20825,"nodeType":"ExpressionStatement","src":"32738:432:68"}]}},"id":20868,"nodeType":"IfStatement","src":"31625:2203:68","trueBody":{"id":20767,"nodeType":"Block","src":"31673:717:68","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":20725,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20609,"src":"31687:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20728,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31696:14:68","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"31687:23:68","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":20729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31711:33:68","memberName":"requireUnbalancedLiquidityEnabled","nodeType":"MemberAccess","referencedDeclaration":29829,"src":"31687:57:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$__$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure"}},"id":20730,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31687:59:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20731,"nodeType":"ExpressionStatement","src":"31687:59:68"},{"expression":{"id":20734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20732,"name":"amountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20624,"src":"31761:17:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20733,"name":"maxAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20615,"src":"31781:20:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"31761:40:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20735,"nodeType":"ExpressionStatement","src":"31761:40:68"},{"expression":{"arguments":[{"expression":{"id":20739,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20612,"src":"32003:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20740,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32010:12:68","memberName":"maxAmountsIn","nodeType":"MemberAccess","referencedDeclaration":4815,"src":"32003:19:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":20741,"name":"amountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20621,"src":"32024:12:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"expression":{"id":20736,"name":"ScalingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6848,"src":"31976:14:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ScalingHelpers_$6848_$","typeString":"type(library ScalingHelpers)"}},"id":20738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31991:11:68","memberName":"copyToArray","nodeType":"MemberAccess","referencedDeclaration":6554,"src":"31976:26:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (uint256[] memory,uint256[] memory) pure"}},"id":20742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31976:61:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20743,"nodeType":"ExpressionStatement","src":"31976:61:68"},{"expression":{"id":20765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":20744,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20626,"src":"32053:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20745,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20655,"src":"32067:14:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"id":20746,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"32052:30:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":20749,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20609,"src":"32145:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20750,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32154:20:68","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":4722,"src":"32145:29:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":20751,"name":"maxAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20615,"src":"32192:20:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"arguments":[{"expression":{"id":20753,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20612,"src":"32243:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20754,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32250:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4810,"src":"32243:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20752,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38906,"src":"32230:12:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":20755,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32230:25:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":20756,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20609,"src":"32273:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20757,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32282:14:68","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"32273:23:68","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":20758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32297:26:68","memberName":"getStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":30061,"src":"32273:50:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (uint256)"}},"id":20759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32273:52:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":20761,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20612,"src":"32353:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20762,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32360:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4810,"src":"32353:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20760,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1505,"src":"32343:9:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasePool_$1505_$","typeString":"type(contract IBasePool)"}},"id":20763,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32343:22:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}],"expression":{"id":20747,"name":"BasePoolMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12083,"src":"32085:12:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BasePoolMath_$12083_$","typeString":"type(library BasePoolMath)"}},"id":20748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32098:29:68","memberName":"computeAddLiquidityUnbalanced","nodeType":"MemberAccess","referencedDeclaration":11654,"src":"32085:42:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_contract$_IBasePool_$1505_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory,uint256,uint256,contract IBasePool) view returns (uint256,uint256[] memory)"}},"id":20764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32085:294:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory)"}},"src":"32052:327:68","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20766,"nodeType":"ExpressionStatement","src":"32052:327:68"}]}},"id":20869,"nodeType":"IfStatement","src":"31342:2486:68","trueBody":{"id":20719,"nodeType":"Block","src":"31388:231:68","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":20695,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20609,"src":"31402:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20698,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31411:14:68","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"31402:23:68","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":20699,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31426:22:68","memberName":"requireDonationEnabled","nodeType":"MemberAccess","referencedDeclaration":30040,"src":"31402:46:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$__$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure"}},"id":20700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31402:48:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20701,"nodeType":"ExpressionStatement","src":"31402:48:68"},{"expression":{"id":20709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20702,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20655,"src":"31465:14:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":20706,"name":"maxAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20615,"src":"31496:20:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31517:6:68","memberName":"length","nodeType":"MemberAccess","src":"31496:27:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20705,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"31482:13:68","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":20703,"name":"uint256","nodeType":"ElementaryTypeName","src":"31486:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20704,"nodeType":"ArrayTypeName","src":"31486:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":20708,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31482:42:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"31465:59:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20710,"nodeType":"ExpressionStatement","src":"31465:59:68"},{"expression":{"id":20713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20711,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20626,"src":"31538:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":20712,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31553:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"31538:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20714,"nodeType":"ExpressionStatement","src":"31538:16:68"},{"expression":{"id":20717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20715,"name":"amountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20624,"src":"31568:17:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20716,"name":"maxAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20615,"src":"31588:20:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"31568:40:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20718,"nodeType":"ExpressionStatement","src":"31568:40:68"}]}},"id":20870,"nodeType":"IfStatement","src":"30848:2980:68","trueBody":{"id":20689,"nodeType":"Block","src":"30898:438:68","statements":[{"expression":{"id":20665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20662,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20626,"src":"30912:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":20663,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20612,"src":"30927:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20664,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"30934:15:68","memberName":"minBptAmountOut","nodeType":"MemberAccess","referencedDeclaration":4817,"src":"30927:22:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30912:37:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20666,"nodeType":"ExpressionStatement","src":"30912:37:68"},{"expression":{"id":20674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20667,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20655,"src":"31067:14:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":20671,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20632,"src":"31098:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$20605_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":20672,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31105:9:68","memberName":"numTokens","nodeType":"MemberAccess","referencedDeclaration":20600,"src":"31098:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20670,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"31084:13:68","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":20668,"name":"uint256","nodeType":"ElementaryTypeName","src":"31088:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20669,"nodeType":"ArrayTypeName","src":"31088:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":20673,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31084:31:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"31067:48:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20675,"nodeType":"ExpressionStatement","src":"31067:48:68"},{"expression":{"id":20687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20676,"name":"amountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20624,"src":"31130:17:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":20679,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20609,"src":"31209:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20680,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31218:20:68","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":4722,"src":"31209:29:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"arguments":[{"expression":{"id":20682,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20612,"src":"31269:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20683,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"31276:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4810,"src":"31269:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":20681,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38906,"src":"31256:12:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":20684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31256:25:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":20685,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20626,"src":"31299:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":20677,"name":"BasePoolMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12083,"src":"31150:12:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BasePoolMath_$12083_$","typeString":"type(library BasePoolMath)"}},"id":20678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31163:28:68","memberName":"computeProportionalAmountsIn","nodeType":"MemberAccess","referencedDeclaration":11423,"src":"31150:41:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256,uint256) pure returns (uint256[] memory)"}},"id":20686,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31150:175:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"31130:195:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20688,"nodeType":"ExpressionStatement","src":"31130:195:68"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20871,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20626,"src":"33902:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":20872,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20612,"src":"33917:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20873,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33924:15:68","memberName":"minBptAmountOut","nodeType":"MemberAccess","referencedDeclaration":4817,"src":"33917:22:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33902:37:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20882,"nodeType":"IfStatement","src":"33898:133:68","trueBody":{"id":20881,"nodeType":"Block","src":"33941:90:68","statements":[{"errorCall":{"arguments":[{"id":20876,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20626,"src":"33983:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20877,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20612,"src":"33997:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20878,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34004:15:68","memberName":"minBptAmountOut","nodeType":"MemberAccess","referencedDeclaration":4817,"src":"33997:22:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20875,"name":"BptAmountOutBelowMin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3565,"src":"33962:20:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":20879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33962:58:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20880,"nodeType":"RevertStatement","src":"33955:65:68"}]}},{"expression":{"arguments":[{"id":20884,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20626,"src":"34065:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20883,"name":"_ensureValidTradeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22734,"src":"34041:23:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":20885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34041:37:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20886,"nodeType":"ExpressionStatement","src":"34041:37:68"},{"body":{"id":21011,"nodeType":"Block","src":"34136:2311:68","statements":[{"assignments":[20899],"declarations":[{"constant":false,"id":20899,"mutability":"mutable","name":"amountInRaw","nameLocation":"34158:11:68","nodeType":"VariableDeclaration","scope":21011,"src":"34150:19:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20898,"name":"uint256","nodeType":"ElementaryTypeName","src":"34150:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20900,"nodeType":"VariableDeclarationStatement","src":"34150:19:68"},{"id":20945,"nodeType":"Block","src":"34227:976:68","statements":[{"assignments":[20902],"declarations":[{"constant":false,"id":20902,"mutability":"mutable","name":"amountInScaled18","nameLocation":"34253:16:68","nodeType":"VariableDeclaration","scope":20945,"src":"34245:24:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20901,"name":"uint256","nodeType":"ElementaryTypeName","src":"34245:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20906,"initialValue":{"baseExpression":{"id":20903,"name":"amountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20624,"src":"34272:17:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20905,"indexExpression":{"id":20904,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20888,"src":"34290:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34272:20:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"34245:47:68"},{"expression":{"arguments":[{"id":20908,"name":"amountInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20902,"src":"34334:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20907,"name":"_ensureValidTradeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22734,"src":"34310:23:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":20909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34310:41:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20910,"nodeType":"ExpressionStatement","src":"34310:41:68"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":20911,"name":"amountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20621,"src":"34458:12:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20913,"indexExpression":{"id":20912,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20888,"src":"34471:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34458:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":20914,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34477:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"34458:20:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":20943,"nodeType":"Block","src":"34961:228:68","statements":[{"expression":{"id":20941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20937,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20899,"src":"35141:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":20938,"name":"amountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20621,"src":"35155:12:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20940,"indexExpression":{"id":20939,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20888,"src":"35168:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"35155:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"35141:29:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20942,"nodeType":"ExpressionStatement","src":"35141:29:68"}]},"id":20944,"nodeType":"IfStatement","src":"34454:735:68","trueBody":{"id":20936,"nodeType":"Block","src":"34480:475:68","statements":[{"expression":{"id":20928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":20916,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20899,"src":"34704:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"expression":{"id":20919,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20609,"src":"34781:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20920,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34790:21:68","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":4728,"src":"34781:30:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20922,"indexExpression":{"id":20921,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20888,"src":"34812:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34781:33:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":20923,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20609,"src":"34840:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20924,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34849:10:68","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":4725,"src":"34840:19:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20926,"indexExpression":{"id":20925,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20888,"src":"34860:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34840:22:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":20917,"name":"amountInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20902,"src":"34718:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34735:20:68","memberName":"toRawUndoRateRoundUp","nodeType":"MemberAccess","referencedDeclaration":6530,"src":"34718:37:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":20927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34718:166:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34704:180:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20929,"nodeType":"ExpressionStatement","src":"34704:180:68"},{"expression":{"id":20934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":20930,"name":"amountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20621,"src":"34907:12:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20932,"indexExpression":{"id":20931,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20888,"src":"34920:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"34907:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":20933,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20899,"src":"34925:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34907:29:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20935,"nodeType":"ExpressionStatement","src":"34907:29:68"}]}}]},{"assignments":[20948],"declarations":[{"constant":false,"id":20948,"mutability":"mutable","name":"token","nameLocation":"35224:5:68","nodeType":"VariableDeclaration","scope":21011,"src":"35217:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":20947,"nodeType":"UserDefinedTypeName","pathNode":{"id":20946,"name":"IERC20","nameLocations":["35217:6:68"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"35217:6:68"},"referencedDeclaration":40109,"src":"35217:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"id":20953,"initialValue":{"baseExpression":{"expression":{"id":20949,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20609,"src":"35232:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20950,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"35241:6:68","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":4712,"src":"35232:15:68","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":20952,"indexExpression":{"id":20951,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20888,"src":"35248:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"35232:18:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"35217:33:68"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20954,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20899,"src":"35317:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"baseExpression":{"expression":{"id":20955,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20612,"src":"35331:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20956,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"35338:12:68","memberName":"maxAmountsIn","nodeType":"MemberAccess","referencedDeclaration":4815,"src":"35331:19:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20958,"indexExpression":{"id":20957,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20888,"src":"35351:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"35331:22:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"35317:36:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":20970,"nodeType":"IfStatement","src":"35313:142:68","trueBody":{"id":20969,"nodeType":"Block","src":"35355:100:68","statements":[{"errorCall":{"arguments":[{"id":20961,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20948,"src":"35397:5:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":20962,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20899,"src":"35404:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":20963,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20612,"src":"35417:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20964,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"35424:12:68","memberName":"maxAmountsIn","nodeType":"MemberAccess","referencedDeclaration":4815,"src":"35417:19:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20966,"indexExpression":{"id":20965,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20888,"src":"35437:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"35417:22:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20960,"name":"AmountInAboveMax","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3548,"src":"35380:16:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$40109_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (contract IERC20,uint256,uint256) pure returns (error)"}},"id":20967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35380:60:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":20968,"nodeType":"RevertStatement","src":"35373:67:68"}]}},{"expression":{"arguments":[{"id":20972,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20948,"src":"35540:5:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":20973,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20899,"src":"35547:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20971,"name":"_takeDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24908,"src":"35530:9:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":20974,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35530:29:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20975,"nodeType":"ExpressionStatement","src":"35530:29:68"},{"expression":{"id":20992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":20976,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20655,"src":"35702:14:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20978,"indexExpression":{"id":20977,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20888,"src":"35717:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"35702:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20979,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20632,"src":"35721:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$20605_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":20980,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"35728:25:68","memberName":"aggregateSwapFeeAmountRaw","nodeType":"MemberAccess","referencedDeclaration":20602,"src":"35721:32:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":20981,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"35701:53:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":20983,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20609,"src":"35809:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},{"baseExpression":{"id":20984,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20655,"src":"35835:14:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":20986,"indexExpression":{"id":20985,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20888,"src":"35850:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"35835:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":20987,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20612,"src":"35870:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":20988,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"35877:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4810,"src":"35870:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":20989,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20948,"src":"35899:5:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":20990,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20888,"src":"35922:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":20982,"name":"_computeAndChargeAggregateSwapFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21795,"src":"35757:34:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PoolData_$4729_memory_ptr_$_t_uint256_$_t_address_$_t_contract$_IERC20_$40109_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (struct PoolData memory,uint256,address,contract IERC20,uint256) returns (uint256,uint256)"}},"id":20991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35757:180:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"35701:236:68","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":20993,"nodeType":"ExpressionStatement","src":"35701:236:68"},{"expression":{"arguments":[{"id":20997,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20888,"src":"36294:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":20998,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20609,"src":"36313:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20999,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36322:11:68","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":4719,"src":"36313:20:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21001,"indexExpression":{"id":21000,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20888,"src":"36334:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"36313:23:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":21002,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20899,"src":"36339:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36313:37:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"expression":{"id":21004,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20632,"src":"36353:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$20605_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":21005,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36360:25:68","memberName":"aggregateSwapFeeAmountRaw","nodeType":"MemberAccess","referencedDeclaration":20602,"src":"36353:32:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"36313:72:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":21007,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"36403:8:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":21008,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"36412:10:68","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":4731,"src":"36403:19:68","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"expression":{"id":20994,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20609,"src":"36244:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":20996,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36253:23:68","memberName":"updateRawAndLiveBalance","nodeType":"MemberAccess","referencedDeclaration":30978,"src":"36244:32:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_PoolData_$4729_memory_ptr_$_t_uint256_$_t_uint256_$_t_enum$_Rounding_$4732_$returns$__$attached_to$_t_struct$_PoolData_$4729_memory_ptr_$","typeString":"function (struct PoolData memory,uint256,uint256,enum Rounding) pure"}},"id":21009,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36244:192:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21010,"nodeType":"ExpressionStatement","src":"36244:192:68"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":20894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":20891,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20888,"src":"34109:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":20892,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20632,"src":"34113:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$20605_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":20893,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34120:9:68","memberName":"numTokens","nodeType":"MemberAccess","referencedDeclaration":20600,"src":"34113:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34109:20:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21012,"initializationExpression":{"assignments":[20888],"declarations":[{"constant":false,"id":20888,"mutability":"mutable","name":"i","nameLocation":"34102:1:68","nodeType":"VariableDeclaration","scope":21012,"src":"34094:9:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20887,"name":"uint256","nodeType":"ElementaryTypeName","src":"34094:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":20890,"initialValue":{"hexValue":"30","id":20889,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34106:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"34094:13:68"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":20896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"34131:3:68","subExpression":{"id":20895,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20888,"src":"34133:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20897,"nodeType":"ExpressionStatement","src":"34131:3:68"},"nodeType":"ForStatement","src":"34089:2358:68"},{"expression":{"arguments":[{"expression":{"id":21014,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20612,"src":"36534:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":21015,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36541:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4810,"src":"36534:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21016,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20609,"src":"36547:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}],"id":21013,"name":"_writePoolBalancesToStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25305,"src":"36506:27:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_struct$_PoolData_$4729_memory_ptr_$returns$__$","typeString":"function (address,struct PoolData memory)"}},"id":21017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36506:50:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21018,"nodeType":"ExpressionStatement","src":"36506:50:68"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":21022,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20612,"src":"36767:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":21023,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36774:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4810,"src":"36767:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21021,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"36759:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21020,"name":"address","nodeType":"ElementaryTypeName","src":"36759:7:68","typeDescriptions":{}}},"id":21024,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36759:20:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21025,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20612,"src":"36781:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":21026,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36788:2:68","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":4812,"src":"36781:9:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21027,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20626,"src":"36792:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21019,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39059,"src":"36753:5:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":21028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36753:52:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21029,"nodeType":"ExpressionStatement","src":"36753:52:68"},{"eventCall":{"arguments":[{"expression":{"id":21031,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20612,"src":"36881:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":21032,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36888:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4810,"src":"36881:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21033,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20612,"src":"36906:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":21034,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36913:2:68","memberName":"to","nodeType":"MemberAccess","referencedDeclaration":4812,"src":"36906:9:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21035,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20612,"src":"36929:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":21036,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36936:4:68","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4820,"src":"36929:11:68","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},{"arguments":[{"expression":{"id":21038,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20612,"src":"36967:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":21039,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36974:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4810,"src":"36967:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21037,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38906,"src":"36954:12:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":21040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36954:25:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21041,"name":"amountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20621,"src":"36993:12:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":21042,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20655,"src":"37019:14:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":21030,"name":"LiquidityAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3872,"src":"36853:14:68","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_enum$_AddLiquidityKind_$4807_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,address,enum AddLiquidityKind,uint256,uint256[] memory,uint256[] memory)"}},"id":21043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36853:190:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21044,"nodeType":"EmitStatement","src":"36848:195:68"}]},"documentation":{"id":20606,"nodeType":"StructuredDocumentation","src":"29705:457:68","text":" @dev Calls the appropriate pool hook and calculates the required inputs and outputs for the operation\n considering the given kind, and updates the Vault's internal accounting. This includes:\n - Setting pool balances\n - Taking debt from the liquidity provider\n - Minting pool tokens\n - Emitting events\n It is non-reentrant, as it performs external calls and updates the Vault's state accordingly."},"id":21046,"implemented":true,"kind":"function","modifiers":[{"id":20618,"kind":"modifierInvocation","modifierName":{"id":20617,"name":"nonReentrant","nameLocations":["30344:12:68"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"30344:12:68"},"nodeType":"ModifierInvocation","src":"30344:12:68"}],"name":"_addLiquidity","nameLocation":"30176:13:68","nodeType":"FunctionDefinition","parameters":{"id":20616,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20609,"mutability":"mutable","name":"poolData","nameLocation":"30215:8:68","nodeType":"VariableDeclaration","scope":21046,"src":"30199:24:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":20608,"nodeType":"UserDefinedTypeName","pathNode":{"id":20607,"name":"PoolData","nameLocations":["30199:8:68"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"30199:8:68"},"referencedDeclaration":4729,"src":"30199:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":20612,"mutability":"mutable","name":"params","nameLocation":"30259:6:68","nodeType":"VariableDeclaration","scope":21046,"src":"30233:32:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams"},"typeName":{"id":20611,"nodeType":"UserDefinedTypeName","pathNode":{"id":20610,"name":"AddLiquidityParams","nameLocations":["30233:18:68"],"nodeType":"IdentifierPath","referencedDeclaration":4823,"src":"30233:18:68"},"referencedDeclaration":4823,"src":"30233:18:68","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_storage_ptr","typeString":"struct AddLiquidityParams"}},"visibility":"internal"},{"constant":false,"id":20615,"mutability":"mutable","name":"maxAmountsInScaled18","nameLocation":"30292:20:68","nodeType":"VariableDeclaration","scope":21046,"src":"30275:37:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":20613,"name":"uint256","nodeType":"ElementaryTypeName","src":"30275:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20614,"nodeType":"ArrayTypeName","src":"30275:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"30189:129:68"},"returnParameters":{"id":20629,"nodeType":"ParameterList","parameters":[{"constant":false,"id":20621,"mutability":"mutable","name":"amountsInRaw","nameLocation":"30404:12:68","nodeType":"VariableDeclaration","scope":21046,"src":"30387:29:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":20619,"name":"uint256","nodeType":"ElementaryTypeName","src":"30387:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20620,"nodeType":"ArrayTypeName","src":"30387:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":20624,"mutability":"mutable","name":"amountsInScaled18","nameLocation":"30447:17:68","nodeType":"VariableDeclaration","scope":21046,"src":"30430:34:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":20622,"name":"uint256","nodeType":"ElementaryTypeName","src":"30430:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":20623,"nodeType":"ArrayTypeName","src":"30430:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":20626,"mutability":"mutable","name":"bptAmountOut","nameLocation":"30486:12:68","nodeType":"VariableDeclaration","scope":21046,"src":"30478:20:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":20625,"name":"uint256","nodeType":"ElementaryTypeName","src":"30478:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":20628,"mutability":"mutable","name":"returnData","nameLocation":"30525:10:68","nodeType":"VariableDeclaration","scope":21046,"src":"30512:23:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":20627,"name":"bytes","nodeType":"ElementaryTypeName","src":"30512:5:68","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"30373:172:68"},"scope":22797,"src":"30167:6883:68","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[4503],"body":{"id":21195,"nodeType":"Block","src":"37555:3760:68","statements":[{"expression":{"arguments":[{"expression":{"id":21067,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21050,"src":"37891:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21068,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"37898:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4831,"src":"37891:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21066,"name":"_ensureUnpaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24998,"src":"37875:15:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":21069,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37875:28:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21070,"nodeType":"ExpressionStatement","src":"37875:28:68"},{"assignments":[21073],"declarations":[{"constant":false,"id":21073,"mutability":"mutable","name":"poolData","nameLocation":"38378:8:68","nodeType":"VariableDeclaration","scope":21195,"src":"38362:24:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":21072,"nodeType":"UserDefinedTypeName","pathNode":{"id":21071,"name":"PoolData","nameLocations":["38362:8:68"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"38362:8:68"},"referencedDeclaration":4729,"src":"38362:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"id":21080,"initialValue":{"arguments":[{"expression":{"id":21075,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21050,"src":"38431:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21076,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"38438:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4831,"src":"38431:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21077,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"38444:8:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":21078,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"38453:10:68","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":4731,"src":"38444:19:68","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"id":21074,"name":"_loadPoolDataUpdatingBalancesAndYieldFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25381,"src":"38389:41:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_enum$_Rounding_$4732_$returns$_t_struct$_PoolData_$4729_memory_ptr_$","typeString":"function (address,enum Rounding) returns (struct PoolData memory)"}},"id":21079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38389:75:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"nodeType":"VariableDeclarationStatement","src":"38362:102:68"},{"expression":{"arguments":[{"expression":{"expression":{"id":21084,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21073,"src":"38510:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":21085,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"38519:6:68","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":4712,"src":"38510:15:68","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":21086,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"38526:6:68","memberName":"length","nodeType":"MemberAccess","src":"38510:22:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":21087,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21050,"src":"38534:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21088,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"38541:13:68","memberName":"minAmountsOut","nodeType":"MemberAccess","referencedDeclaration":4838,"src":"38534:20:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"38555:6:68","memberName":"length","nodeType":"MemberAccess","src":"38534:27:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":21081,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6193,"src":"38474:12:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$6193_$","typeString":"type(library InputHelpers)"}},"id":21083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"38487:22:68","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":5926,"src":"38474:35:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":21090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38474:88:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21091,"nodeType":"ExpressionStatement","src":"38474:88:68"},{"assignments":[21096],"declarations":[{"constant":false,"id":21096,"mutability":"mutable","name":"minAmountsOutScaled18","nameLocation":"38871:21:68","nodeType":"VariableDeclaration","scope":21195,"src":"38854:38:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":21094,"name":"uint256","nodeType":"ElementaryTypeName","src":"38854:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21095,"nodeType":"ArrayTypeName","src":"38854:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":21105,"initialValue":{"arguments":[{"expression":{"id":21100,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21073,"src":"38965:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":21101,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"38974:21:68","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":4728,"src":"38965:30:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":21102,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21073,"src":"39009:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":21103,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"39018:10:68","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":4725,"src":"39009:19:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"expression":{"expression":{"id":21097,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21050,"src":"38895:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21098,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"38902:13:68","memberName":"minAmountsOut","nodeType":"MemberAccess","referencedDeclaration":4838,"src":"38895:20:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"38916:35:68","memberName":"copyToScaled18ApplyRateRoundUpArray","nodeType":"MemberAccess","referencedDeclaration":6814,"src":"38895:56:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$attached_to$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":21104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38895:143:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"38854:184:68"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":21106,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21073,"src":"39132:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":21107,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"39141:14:68","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"39132:23:68","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":21108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"39156:31:68","memberName":"shouldCallBeforeRemoveLiquidity","nodeType":"MemberAccess","referencedDeclaration":28765,"src":"39132:55:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":21109,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39132:57:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21147,"nodeType":"IfStatement","src":"39128:897:68","trueBody":{"id":21146,"nodeType":"Block","src":"39191:834:68","statements":[{"expression":{"arguments":[{"id":21113,"name":"minAmountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21096,"src":"39267:21:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":21114,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"39306:3:68","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":21115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"39310:6:68","memberName":"sender","nodeType":"MemberAccess","src":"39306:10:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21116,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21050,"src":"39334:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},{"id":21117,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21073,"src":"39358:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},{"baseExpression":{"id":21118,"name":"_hooksContracts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28236,"src":"39384:15:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IHooks_$2026_$","typeString":"mapping(address => contract IHooks)"}},"id":21121,"indexExpression":{"expression":{"id":21119,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21050,"src":"39400:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21120,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"39407:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4831,"src":"39400:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"39384:28:68","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"},{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}],"expression":{"id":21110,"name":"HooksConfigLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29474,"src":"39205:14:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_HooksConfigLib_$29474_$","typeString":"type(library HooksConfigLib)"}},"id":21112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"39220:29:68","memberName":"callBeforeRemoveLiquidityHook","nodeType":"MemberAccess","referencedDeclaration":29299,"src":"39205:44:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$_t_address_$_t_struct$_RemoveLiquidityParams_$4844_memory_ptr_$_t_struct$_PoolData_$4729_memory_ptr_$_t_contract$_IHooks_$2026_$returns$__$","typeString":"function (uint256[] memory,address,struct RemoveLiquidityParams memory,struct PoolData memory,contract IHooks)"}},"id":21122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39205:221:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21123,"nodeType":"ExpressionStatement","src":"39205:221:68"},{"expression":{"arguments":[{"baseExpression":{"id":21127,"name":"_poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28256,"src":"39684:18:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"}},"id":21130,"indexExpression":{"expression":{"id":21128,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21050,"src":"39703:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21129,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"39710:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4831,"src":"39703:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"39684:31:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},{"expression":{"id":21131,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"39717:8:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":21132,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"39726:10:68","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":4731,"src":"39717:19:68","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"expression":{"id":21124,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21073,"src":"39652:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":21126,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"39661:22:68","memberName":"reloadBalancesAndRates","nodeType":"MemberAccess","referencedDeclaration":30871,"src":"39652:31:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PoolData_$4729_memory_ptr_$_t_mapping$_t_uint256_$_t_bytes32_$_$_t_enum$_Rounding_$4732_$returns$__$attached_to$_t_struct$_PoolData_$4729_memory_ptr_$","typeString":"function (struct PoolData memory,mapping(uint256 => bytes32),enum Rounding) view"}},"id":21133,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39652:85:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21134,"nodeType":"ExpressionStatement","src":"39652:85:68"},{"expression":{"id":21144,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21135,"name":"minAmountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21096,"src":"39835:21:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":21139,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21073,"src":"39933:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":21140,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"39942:21:68","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":4728,"src":"39933:30:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":21141,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21073,"src":"39981:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":21142,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"39990:10:68","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":4725,"src":"39981:19:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"expression":{"expression":{"id":21136,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21050,"src":"39859:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21137,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"39866:13:68","memberName":"minAmountsOut","nodeType":"MemberAccess","referencedDeclaration":4838,"src":"39859:20:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"39880:35:68","memberName":"copyToScaled18ApplyRateRoundUpArray","nodeType":"MemberAccess","referencedDeclaration":6814,"src":"39859:56:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$attached_to$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":21143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39859:155:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"39835:179:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21145,"nodeType":"ExpressionStatement","src":"39835:179:68"}]}},{"assignments":[21152],"declarations":[{"constant":false,"id":21152,"mutability":"mutable","name":"amountsOutScaled18","nameLocation":"40425:18:68","nodeType":"VariableDeclaration","scope":21195,"src":"40408:35:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":21150,"name":"uint256","nodeType":"ElementaryTypeName","src":"40408:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21151,"nodeType":"ArrayTypeName","src":"40408:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":21153,"nodeType":"VariableDeclarationStatement","src":"40408:35:68"},{"expression":{"id":21164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":21154,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21059,"src":"40454:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21155,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21062,"src":"40467:10:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":21156,"name":"amountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21152,"src":"40479:18:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":21157,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21064,"src":"40499:10:68","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":21158,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"40453:57:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory,uint256[] memory,bytes memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":21160,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21073,"src":"40543:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},{"id":21161,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21050,"src":"40565:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},{"id":21162,"name":"minAmountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21096,"src":"40585:21:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":21159,"name":"_removeLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21702,"src":"40513:16:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PoolData_$4729_memory_ptr_$_t_struct$_RemoveLiquidityParams_$4844_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function (struct PoolData memory,struct RemoveLiquidityParams memory,uint256[] memory) returns (uint256,uint256[] memory,uint256[] memory,bytes memory)"}},"id":21163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"40513:103:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory,uint256[] memory,bytes memory)"}},"src":"40453:163:68","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21165,"nodeType":"ExpressionStatement","src":"40453:163:68"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":21166,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21073,"src":"40818:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":21167,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"40827:14:68","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"40818:23:68","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":21168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"40842:30:68","memberName":"shouldCallAfterRemoveLiquidity","nodeType":"MemberAccess","referencedDeclaration":28808,"src":"40818:54:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":21169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"40818:56:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21194,"nodeType":"IfStatement","src":"40814:495:68","trueBody":{"id":21193,"nodeType":"Block","src":"40876:433:68","statements":[{"assignments":[21172],"declarations":[{"constant":false,"id":21172,"mutability":"mutable","name":"hooksContract","nameLocation":"40958:13:68","nodeType":"VariableDeclaration","scope":21193,"src":"40951:20:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"},"typeName":{"id":21171,"nodeType":"UserDefinedTypeName","pathNode":{"id":21170,"name":"IHooks","nameLocations":["40951:6:68"],"nodeType":"IdentifierPath","referencedDeclaration":2026,"src":"40951:6:68"},"referencedDeclaration":2026,"src":"40951:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"visibility":"internal"}],"id":21177,"initialValue":{"baseExpression":{"id":21173,"name":"_hooksContracts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28236,"src":"40974:15:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IHooks_$2026_$","typeString":"mapping(address => contract IHooks)"}},"id":21176,"indexExpression":{"expression":{"id":21174,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21050,"src":"40990:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21175,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"40997:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4831,"src":"40990:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"40974:28:68","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"nodeType":"VariableDeclarationStatement","src":"40951:51:68"},{"expression":{"id":21191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21178,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21062,"src":"41017:10:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":21182,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"41100:3:68","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":21183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"41104:6:68","memberName":"sender","nodeType":"MemberAccess","src":"41100:10:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21184,"name":"amountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21152,"src":"41128:18:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":21185,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21062,"src":"41164:10:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":21186,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21059,"src":"41192:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21187,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21050,"src":"41221:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},{"id":21188,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21073,"src":"41245:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},{"id":21189,"name":"hooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21172,"src":"41271:13:68","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"},{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}],"expression":{"expression":{"id":21179,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21073,"src":"41030:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":21180,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"41039:14:68","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"41030:23:68","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":21181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"41054:28:68","memberName":"callAfterRemoveLiquidityHook","nodeType":"MemberAccess","referencedDeclaration":29416,"src":"41030:52:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_address_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_struct$_RemoveLiquidityParams_$4844_memory_ptr_$_t_struct$_PoolData_$4729_memory_ptr_$_t_contract$_IHooks_$2026_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,address,uint256[] memory,uint256[] memory,uint256,struct RemoveLiquidityParams memory,struct PoolData memory,contract IHooks) returns (uint256[] memory)"}},"id":21190,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"41030:268:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"41017:281:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21192,"nodeType":"ExpressionStatement","src":"41017:281:68"}]}}]},"documentation":{"id":21047,"nodeType":"StructuredDocumentation","src":"37269:26:68","text":"@inheritdoc IVaultMain"},"functionSelector":"21457897","id":21196,"implemented":true,"kind":"function","modifiers":[{"id":21053,"kind":"modifierInvocation","modifierName":{"id":21052,"name":"onlyWhenUnlocked","nameLocations":["37401:16:68"],"nodeType":"IdentifierPath","referencedDeclaration":24848,"src":"37401:16:68"},"nodeType":"ModifierInvocation","src":"37401:16:68"},{"arguments":[{"expression":{"id":21055,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21050,"src":"37446:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21056,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"37453:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4831,"src":"37446:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":21057,"kind":"modifierInvocation","modifierName":{"id":21054,"name":"withInitializedPool","nameLocations":["37426:19:68"],"nodeType":"IdentifierPath","referencedDeclaration":25131,"src":"37426:19:68"},"nodeType":"ModifierInvocation","src":"37426:32:68"}],"name":"removeLiquidity","nameLocation":"37309:15:68","nodeType":"FunctionDefinition","parameters":{"id":21051,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21050,"mutability":"mutable","name":"params","nameLocation":"37363:6:68","nodeType":"VariableDeclaration","scope":21196,"src":"37334:35:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams"},"typeName":{"id":21049,"nodeType":"UserDefinedTypeName","pathNode":{"id":21048,"name":"RemoveLiquidityParams","nameLocations":["37334:21:68"],"nodeType":"IdentifierPath","referencedDeclaration":4844,"src":"37334:21:68"},"referencedDeclaration":4844,"src":"37334:21:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_storage_ptr","typeString":"struct RemoveLiquidityParams"}},"visibility":"internal"}],"src":"37324:51:68"},"returnParameters":{"id":21065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21059,"mutability":"mutable","name":"bptAmountIn","nameLocation":"37484:11:68","nodeType":"VariableDeclaration","scope":21196,"src":"37476:19:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21058,"name":"uint256","nodeType":"ElementaryTypeName","src":"37476:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21062,"mutability":"mutable","name":"amountsOut","nameLocation":"37514:10:68","nodeType":"VariableDeclaration","scope":21196,"src":"37497:27:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":21060,"name":"uint256","nodeType":"ElementaryTypeName","src":"37497:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21061,"nodeType":"ArrayTypeName","src":"37497:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":21064,"mutability":"mutable","name":"returnData","nameLocation":"37539:10:68","nodeType":"VariableDeclaration","scope":21196,"src":"37526:23:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":21063,"name":"bytes","nodeType":"ElementaryTypeName","src":"37526:5:68","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"37475:75:68"},"scope":22797,"src":"37300:4015:68","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":21701,"nodeType":"Block","src":"42177:7719:68","statements":[{"assignments":[21223],"declarations":[{"constant":false,"id":21223,"mutability":"mutable","name":"locals","nameLocation":"42210:6:68","nodeType":"VariableDeclaration","scope":21701,"src":"42187:29:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$20605_memory_ptr","typeString":"struct Vault.LiquidityLocals"},"typeName":{"id":21222,"nodeType":"UserDefinedTypeName","pathNode":{"id":21221,"name":"LiquidityLocals","nameLocations":["42187:15:68"],"nodeType":"IdentifierPath","referencedDeclaration":20605,"src":"42187:15:68"},"referencedDeclaration":20605,"src":"42187:15:68","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$20605_storage_ptr","typeString":"struct Vault.LiquidityLocals"}},"visibility":"internal"}],"id":21224,"nodeType":"VariableDeclarationStatement","src":"42187:29:68"},{"expression":{"id":21231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":21225,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21223,"src":"42226:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$20605_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":21227,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"42233:9:68","memberName":"numTokens","nodeType":"MemberAccess","referencedDeclaration":20600,"src":"42226:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":21228,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21200,"src":"42245:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":21229,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"42254:6:68","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":4712,"src":"42245:15:68","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":21230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"42261:6:68","memberName":"length","nodeType":"MemberAccess","src":"42245:22:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"42226:41:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21232,"nodeType":"ExpressionStatement","src":"42226:41:68"},{"expression":{"id":21240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21233,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21214,"src":"42277:13:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":21237,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21223,"src":"42307:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$20605_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":21238,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"42314:9:68","memberName":"numTokens","nodeType":"MemberAccess","referencedDeclaration":20600,"src":"42307:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21236,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"42293:13:68","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":21234,"name":"uint256","nodeType":"ElementaryTypeName","src":"42297:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21235,"nodeType":"ArrayTypeName","src":"42297:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":21239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42293:31:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"42277:47:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21241,"nodeType":"ExpressionStatement","src":"42277:47:68"},{"assignments":[21246],"declarations":[{"constant":false,"id":21246,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"42451:14:68","nodeType":"VariableDeclaration","scope":21701,"src":"42434:31:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":21244,"name":"uint256","nodeType":"ElementaryTypeName","src":"42434:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21245,"nodeType":"ArrayTypeName","src":"42434:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":21247,"nodeType":"VariableDeclarationStatement","src":"42434:31:68"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},"id":21252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21248,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"42480:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21249,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"42487:4:68","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4841,"src":"42480:11:68","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":21250,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4828,"src":"42495:19:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RemoveLiquidityKind_$4828_$","typeString":"type(enum RemoveLiquidityKind)"}},"id":21251,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"42515:12:68","memberName":"PROPORTIONAL","nodeType":"MemberAccess","referencedDeclaration":4824,"src":"42495:32:68","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},"src":"42480:47:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},"id":21336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21332,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"43956:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21333,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"43963:4:68","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4841,"src":"43956:11:68","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":21334,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4828,"src":"43971:19:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RemoveLiquidityKind_$4828_$","typeString":"type(enum RemoveLiquidityKind)"}},"id":21335,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"43991:21:68","memberName":"SINGLE_TOKEN_EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":4825,"src":"43971:41:68","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},"src":"43956:56:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},"id":21396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21392,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"44750:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21393,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"44757:4:68","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4841,"src":"44750:11:68","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":21394,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4828,"src":"44765:19:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RemoveLiquidityKind_$4828_$","typeString":"type(enum RemoveLiquidityKind)"}},"id":21395,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"44785:22:68","memberName":"SINGLE_TOKEN_EXACT_OUT","nodeType":"MemberAccess","referencedDeclaration":4826,"src":"44765:42:68","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},"src":"44750:57:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},"id":21462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21458,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"45540:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21459,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"45547:4:68","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4841,"src":"45540:11:68","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":21460,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4828,"src":"45555:19:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RemoveLiquidityKind_$4828_$","typeString":"type(enum RemoveLiquidityKind)"}},"id":21461,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"45575:6:68","memberName":"CUSTOM","nodeType":"MemberAccess","referencedDeclaration":4827,"src":"45555:26:68","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},"src":"45540:41:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":21496,"nodeType":"Block","src":"46128:60:68","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":21493,"name":"InvalidRemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3574,"src":"46149:26:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":21494,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"46149:28:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":21495,"nodeType":"RevertStatement","src":"46142:35:68"}]},"id":21497,"nodeType":"IfStatement","src":"45536:652:68","trueBody":{"id":21492,"nodeType":"Block","src":"45583:539:68","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":21463,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21200,"src":"45597:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":21466,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"45606:14:68","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"45597:23:68","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":21467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"45621:35:68","memberName":"requireRemoveLiquidityCustomEnabled","nodeType":"MemberAccess","referencedDeclaration":29953,"src":"45597:59:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$__$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure"}},"id":21468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"45597:61:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21469,"nodeType":"ExpressionStatement","src":"45597:61:68"},{"expression":{"id":21490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":21470,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21211,"src":"45756:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21471,"name":"amountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21217,"src":"45769:18:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":21472,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21246,"src":"45789:14:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":21473,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21219,"src":"45805:10:68","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":21474,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"45755:61:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory,uint256[] memory,bytes memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":21480,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"45909:3:68","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":21481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"45913:6:68","memberName":"sender","nodeType":"MemberAccess","src":"45909:10:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21482,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"45941:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21483,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"45948:14:68","memberName":"maxBptAmountIn","nodeType":"MemberAccess","referencedDeclaration":4835,"src":"45941:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21484,"name":"minAmountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21206,"src":"45984:21:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":21485,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21200,"src":"46027:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":21486,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"46036:20:68","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":4722,"src":"46027:29:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":21487,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"46078:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21488,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"46085:8:68","memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":4843,"src":"46078:15:68","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"expression":{"id":21476,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"45834:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21477,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"45841:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4831,"src":"45834:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21475,"name":"IPoolLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2082,"src":"45819:14:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IPoolLiquidity_$2082_$","typeString":"type(contract IPoolLiquidity)"}},"id":21478,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"45819:27:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IPoolLiquidity_$2082","typeString":"contract IPoolLiquidity"}},"id":21479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"45864:23:68","memberName":"onRemoveLiquidityCustom","nodeType":"MemberAccess","referencedDeclaration":2081,"src":"45819:68:68","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function (address,uint256,uint256[] memory,uint256[] memory,bytes memory) external returns (uint256,uint256[] memory,uint256[] memory,bytes memory)"}},"id":21489,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"45819:292:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory,uint256[] memory,bytes memory)"}},"src":"45755:356:68","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21491,"nodeType":"ExpressionStatement","src":"45755:356:68"}]}},"id":21498,"nodeType":"IfStatement","src":"44746:1442:68","trueBody":{"id":21457,"nodeType":"Block","src":"44809:721:68","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":21397,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21200,"src":"44823:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":21400,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"44832:14:68","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"44823:23:68","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":21401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"44847:33:68","memberName":"requireUnbalancedLiquidityEnabled","nodeType":"MemberAccess","referencedDeclaration":29829,"src":"44823:57:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$__$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure"}},"id":21402,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"44823:59:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21403,"nodeType":"ExpressionStatement","src":"44823:59:68"},{"expression":{"id":21406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21404,"name":"amountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21217,"src":"44896:18:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21405,"name":"minAmountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21206,"src":"44917:21:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"44896:42:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21407,"nodeType":"ExpressionStatement","src":"44896:42:68"},{"expression":{"id":21416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":21408,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21223,"src":"44952:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$20605_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":21410,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"44959:10:68","memberName":"tokenIndex","nodeType":"MemberAccess","referencedDeclaration":20604,"src":"44952:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":21413,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"45005:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21414,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"45012:13:68","memberName":"minAmountsOut","nodeType":"MemberAccess","referencedDeclaration":4838,"src":"45005:20:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"expression":{"id":21411,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6193,"src":"44972:12:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$6193_$","typeString":"type(library InputHelpers)"}},"id":21412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"44985:19:68","memberName":"getSingleInputIndex","nodeType":"MemberAccess","referencedDeclaration":6007,"src":"44972:32:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256[] memory) pure returns (uint256)"}},"id":21415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"44972:54:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"44952:74:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21417,"nodeType":"ExpressionStatement","src":"44952:74:68"},{"expression":{"id":21427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":21418,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21214,"src":"45040:13:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21421,"indexExpression":{"expression":{"id":21419,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21223,"src":"45054:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$20605_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":21420,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"45061:10:68","memberName":"tokenIndex","nodeType":"MemberAccess","referencedDeclaration":20604,"src":"45054:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"45040:32:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"id":21422,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"45075:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21423,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"45082:13:68","memberName":"minAmountsOut","nodeType":"MemberAccess","referencedDeclaration":4838,"src":"45075:20:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21426,"indexExpression":{"expression":{"id":21424,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21223,"src":"45096:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$20605_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":21425,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"45103:10:68","memberName":"tokenIndex","nodeType":"MemberAccess","referencedDeclaration":20604,"src":"45096:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"45075:39:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"45040:74:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21428,"nodeType":"ExpressionStatement","src":"45040:74:68"},{"expression":{"id":21455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":21429,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21211,"src":"45130:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21430,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21246,"src":"45143:14:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"id":21431,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"45129:29:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":21434,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21200,"src":"45233:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":21435,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"45242:20:68","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":4722,"src":"45233:29:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":21436,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21223,"src":"45280:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$20605_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":21437,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"45287:10:68","memberName":"tokenIndex","nodeType":"MemberAccess","referencedDeclaration":20604,"src":"45280:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":21438,"name":"amountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21217,"src":"45315:18:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21441,"indexExpression":{"expression":{"id":21439,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21223,"src":"45334:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$20605_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":21440,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"45341:10:68","memberName":"tokenIndex","nodeType":"MemberAccess","referencedDeclaration":20604,"src":"45334:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"45315:37:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":21443,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"45383:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21444,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"45390:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4831,"src":"45383:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21442,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38906,"src":"45370:12:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":21445,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"45370:25:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":21446,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21200,"src":"45413:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":21447,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"45422:14:68","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"45413:23:68","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":21448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"45437:26:68","memberName":"getStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":30061,"src":"45413:50:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (uint256)"}},"id":21449,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"45413:52:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":21451,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"45493:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21452,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"45500:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4831,"src":"45493:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21450,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1505,"src":"45483:9:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasePool_$1505_$","typeString":"type(contract IBasePool)"}},"id":21453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"45483:22:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}],"expression":{"id":21432,"name":"BasePoolMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12083,"src":"45161:12:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BasePoolMath_$12083_$","typeString":"type(library BasePoolMath)"}},"id":21433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"45174:41:68","memberName":"computeRemoveLiquiditySingleTokenExactOut","nodeType":"MemberAccess","referencedDeclaration":11927,"src":"45161:54:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_contract$_IBasePool_$1505_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256,uint256,uint256,uint256,contract IBasePool) view returns (uint256,uint256[] memory)"}},"id":21454,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"45161:358:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory)"}},"src":"45129:390:68","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21456,"nodeType":"ExpressionStatement","src":"45129:390:68"}]}},"id":21499,"nodeType":"IfStatement","src":"43952:2236:68","trueBody":{"id":21391,"nodeType":"Block","src":"44014:726:68","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":21337,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21200,"src":"44028:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":21340,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"44037:14:68","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"44028:23:68","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":21341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"44052:33:68","memberName":"requireUnbalancedLiquidityEnabled","nodeType":"MemberAccess","referencedDeclaration":29829,"src":"44028:57:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$__$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure"}},"id":21342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"44028:59:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21343,"nodeType":"ExpressionStatement","src":"44028:59:68"},{"expression":{"id":21347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21344,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21211,"src":"44101:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":21345,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"44115:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21346,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"44122:14:68","memberName":"maxBptAmountIn","nodeType":"MemberAccess","referencedDeclaration":4835,"src":"44115:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"44101:35:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21348,"nodeType":"ExpressionStatement","src":"44101:35:68"},{"expression":{"id":21351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21349,"name":"amountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21217,"src":"44150:18:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21350,"name":"minAmountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21206,"src":"44171:21:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"44150:42:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21352,"nodeType":"ExpressionStatement","src":"44150:42:68"},{"expression":{"id":21361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":21353,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21223,"src":"44206:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$20605_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":21355,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"44213:10:68","memberName":"tokenIndex","nodeType":"MemberAccess","referencedDeclaration":20604,"src":"44206:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":21358,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"44259:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21359,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"44266:13:68","memberName":"minAmountsOut","nodeType":"MemberAccess","referencedDeclaration":4838,"src":"44259:20:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"expression":{"id":21356,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6193,"src":"44226:12:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$6193_$","typeString":"type(library InputHelpers)"}},"id":21357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"44239:19:68","memberName":"getSingleInputIndex","nodeType":"MemberAccess","referencedDeclaration":6007,"src":"44226:32:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256[] memory) pure returns (uint256)"}},"id":21360,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"44226:54:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"44206:74:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21362,"nodeType":"ExpressionStatement","src":"44206:74:68"},{"expression":{"id":21389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":21363,"name":"amountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21217,"src":"44296:18:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21366,"indexExpression":{"expression":{"id":21364,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21223,"src":"44315:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$20605_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":21365,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"44322:10:68","memberName":"tokenIndex","nodeType":"MemberAccess","referencedDeclaration":20604,"src":"44315:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"44296:37:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21367,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21246,"src":"44335:14:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"id":21368,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"44295:55:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":21371,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21200,"src":"44445:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":21372,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"44454:20:68","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":4722,"src":"44445:29:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":21373,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21223,"src":"44496:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$20605_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":21374,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"44503:10:68","memberName":"tokenIndex","nodeType":"MemberAccess","referencedDeclaration":20604,"src":"44496:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21375,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21211,"src":"44535:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":21377,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"44581:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21378,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"44588:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4831,"src":"44581:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21376,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38906,"src":"44568:12:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":21379,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"44568:25:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":21380,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21200,"src":"44615:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":21381,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"44624:14:68","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"44615:23:68","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":21382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"44639:26:68","memberName":"getStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":30061,"src":"44615:50:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (uint256)"}},"id":21383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"44615:52:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":21385,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"44699:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21386,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"44706:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4831,"src":"44699:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21384,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1505,"src":"44689:9:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasePool_$1505_$","typeString":"type(contract IBasePool)"}},"id":21387,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"44689:22:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}],"expression":{"id":21369,"name":"BasePoolMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12083,"src":"44353:12:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BasePoolMath_$12083_$","typeString":"type(library BasePoolMath)"}},"id":21370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"44383:40:68","memberName":"computeRemoveLiquiditySingleTokenExactIn","nodeType":"MemberAccess","referencedDeclaration":12030,"src":"44353:70:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_contract$_IBasePool_$1505_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256,uint256,uint256,uint256,contract IBasePool) view returns (uint256,uint256[] memory)"}},"id":21388,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"44353:376:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory)"}},"src":"44295:434:68","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21390,"nodeType":"ExpressionStatement","src":"44295:434:68"}]}},"id":21500,"nodeType":"IfStatement","src":"42476:3712:68","trueBody":{"id":21331,"nodeType":"Block","src":"42529:1417:68","statements":[{"expression":{"id":21256,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21253,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21211,"src":"42543:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":21254,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"42557:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21255,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"42564:14:68","memberName":"maxBptAmountIn","nodeType":"MemberAccess","referencedDeclaration":4835,"src":"42557:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"42543:35:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21257,"nodeType":"ExpressionStatement","src":"42543:35:68"},{"expression":{"id":21265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21258,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21246,"src":"42592:14:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":21262,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21223,"src":"42623:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$20605_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":21263,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"42630:9:68","memberName":"numTokens","nodeType":"MemberAccess","referencedDeclaration":20600,"src":"42623:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21261,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"42609:13:68","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":21259,"name":"uint256","nodeType":"ElementaryTypeName","src":"42613:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21260,"nodeType":"ArrayTypeName","src":"42613:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":21264,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42609:31:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"42592:48:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21266,"nodeType":"ExpressionStatement","src":"42592:48:68"},{"expression":{"id":21278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21267,"name":"amountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21217,"src":"42654:18:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":21270,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21200,"src":"42735:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":21271,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"42744:20:68","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":4722,"src":"42735:29:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"arguments":[{"expression":{"id":21273,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"42795:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21274,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"42802:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4831,"src":"42795:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21272,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38906,"src":"42782:12:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":21275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42782:25:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21276,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21211,"src":"42825:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":21268,"name":"BasePoolMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12083,"src":"42675:12:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BasePoolMath_$12083_$","typeString":"type(library BasePoolMath)"}},"id":21269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"42688:29:68","memberName":"computeProportionalAmountsOut","nodeType":"MemberAccess","referencedDeclaration":11473,"src":"42675:42:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256,uint256) pure returns (uint256[] memory)"}},"id":21277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"42675:175:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"42654:196:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21279,"nodeType":"ExpressionStatement","src":"42654:196:68"},{"condition":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":21283,"name":"_sessionIdSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28366,"src":"43548:14:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function () view returns (StorageSlotExtension.Uint256SlotType)"}},"id":21284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43548:16:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":21285,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"43565:5:68","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":10251,"src":"43548:22:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Uint256SlotType_$10142_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function (StorageSlotExtension.Uint256SlotType) view returns (uint256)"}},"id":21286,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43548:24:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":21287,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"43574:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21288,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"43581:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4831,"src":"43574:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":21280,"name":"_addLiquidityCalled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28355,"src":"43521:19:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862_$","typeString":"function () view returns (UintToAddressToBooleanMappingSlot)"}},"id":21281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43521:21:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862","typeString":"UintToAddressToBooleanMappingSlot"}},"id":21282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"43543:4:68","memberName":"tGet","nodeType":"MemberAccess","referencedDeclaration":7043,"src":"43521:26:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862_$_t_uint256_$_t_address_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862_$","typeString":"function (UintToAddressToBooleanMappingSlot,uint256,address) view returns (bool)"}},"id":21289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43521:65:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21330,"nodeType":"IfStatement","src":"43517:419:68","trueBody":{"id":21329,"nodeType":"Block","src":"43588:348:68","statements":[{"assignments":[21291],"declarations":[{"constant":false,"id":21291,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"43614:17:68","nodeType":"VariableDeclaration","scope":21329,"src":"43606:25:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21290,"name":"uint256","nodeType":"ElementaryTypeName","src":"43606:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21296,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":21292,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21200,"src":"43634:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":21293,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"43643:14:68","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"43634:23:68","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":21294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"43658:26:68","memberName":"getStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":30061,"src":"43634:50:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (uint256)"}},"id":21295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43634:52:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"43606:80:68"},{"body":{"id":21327,"nodeType":"Block","src":"43751:171:68","statements":[{"expression":{"id":21317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":21308,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21246,"src":"43773:14:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21310,"indexExpression":{"id":21309,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21298,"src":"43788:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"43773:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":21315,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21291,"src":"43821:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":21311,"name":"amountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21217,"src":"43793:18:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21313,"indexExpression":{"id":21312,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21298,"src":"43812:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"43793:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"43815:5:68","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":7970,"src":"43793:27:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":21316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"43793:46:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"43773:66:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21318,"nodeType":"ExpressionStatement","src":"43773:66:68"},{"expression":{"id":21325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":21319,"name":"amountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21217,"src":"43861:18:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21321,"indexExpression":{"id":21320,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21298,"src":"43880:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"43861:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"baseExpression":{"id":21322,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21246,"src":"43886:14:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21324,"indexExpression":{"id":21323,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21298,"src":"43901:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"43886:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"43861:42:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21326,"nodeType":"ExpressionStatement","src":"43861:42:68"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21301,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21298,"src":"43724:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":21302,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21223,"src":"43728:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$20605_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":21303,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"43735:9:68","memberName":"numTokens","nodeType":"MemberAccess","referencedDeclaration":20600,"src":"43728:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"43724:20:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21328,"initializationExpression":{"assignments":[21298],"declarations":[{"constant":false,"id":21298,"mutability":"mutable","name":"i","nameLocation":"43717:1:68","nodeType":"VariableDeclaration","scope":21328,"src":"43709:9:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21297,"name":"uint256","nodeType":"ElementaryTypeName","src":"43709:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21300,"initialValue":{"hexValue":"30","id":21299,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"43721:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"43709:13:68"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":21306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"43746:3:68","subExpression":{"id":21305,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21298,"src":"43748:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21307,"nodeType":"ExpressionStatement","src":"43746:3:68"},"nodeType":"ForStatement","src":"43704:218:68"}]}}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21501,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21211,"src":"46202:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":21502,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"46216:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21503,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"46223:14:68","memberName":"maxBptAmountIn","nodeType":"MemberAccess","referencedDeclaration":4835,"src":"46216:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"46202:35:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21512,"nodeType":"IfStatement","src":"46198:128:68","trueBody":{"id":21511,"nodeType":"Block","src":"46239:87:68","statements":[{"errorCall":{"arguments":[{"id":21506,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21211,"src":"46280:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":21507,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"46293:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21508,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"46300:14:68","memberName":"maxBptAmountIn","nodeType":"MemberAccess","referencedDeclaration":4835,"src":"46293:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21505,"name":"BptAmountInAboveMax","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3601,"src":"46260:19:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":21509,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"46260:55:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":21510,"nodeType":"RevertStatement","src":"46253:62:68"}]}},{"expression":{"arguments":[{"id":21514,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21211,"src":"46360:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21513,"name":"_ensureValidTradeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22734,"src":"46336:23:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":21515,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"46336:36:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21516,"nodeType":"ExpressionStatement","src":"46336:36:68"},{"body":{"id":21642,"nodeType":"Block","src":"46430:2382:68","statements":[{"assignments":[21529],"declarations":[{"constant":false,"id":21529,"mutability":"mutable","name":"amountOutRaw","nameLocation":"46452:12:68","nodeType":"VariableDeclaration","scope":21642,"src":"46444:20:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21528,"name":"uint256","nodeType":"ElementaryTypeName","src":"46444:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21530,"nodeType":"VariableDeclarationStatement","src":"46444:20:68"},{"id":21575,"nodeType":"Block","src":"46523:981:68","statements":[{"assignments":[21532],"declarations":[{"constant":false,"id":21532,"mutability":"mutable","name":"amountOutScaled18","nameLocation":"46549:17:68","nodeType":"VariableDeclaration","scope":21575,"src":"46541:25:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21531,"name":"uint256","nodeType":"ElementaryTypeName","src":"46541:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21536,"initialValue":{"baseExpression":{"id":21533,"name":"amountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21217,"src":"46569:18:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21535,"indexExpression":{"id":21534,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21518,"src":"46588:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"46569:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"46541:49:68"},{"expression":{"arguments":[{"id":21538,"name":"amountOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21532,"src":"46632:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21537,"name":"_ensureValidTradeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22734,"src":"46608:23:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":21539,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"46608:42:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21540,"nodeType":"ExpressionStatement","src":"46608:42:68"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":21541,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21214,"src":"46757:13:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21543,"indexExpression":{"id":21542,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21518,"src":"46771:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"46757:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":21544,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"46777:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"46757:21:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":21573,"nodeType":"Block","src":"47259:231:68","statements":[{"expression":{"id":21571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21567,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21529,"src":"47440:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":21568,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21214,"src":"47455:13:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21570,"indexExpression":{"id":21569,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21518,"src":"47469:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"47455:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"47440:31:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21572,"nodeType":"ExpressionStatement","src":"47440:31:68"}]},"id":21574,"nodeType":"IfStatement","src":"46753:737:68","trueBody":{"id":21566,"nodeType":"Block","src":"46780:473:68","statements":[{"expression":{"id":21558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21546,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21529,"src":"46997:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"expression":{"id":21549,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21200,"src":"47078:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":21550,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"47087:21:68","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":4728,"src":"47078:30:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21552,"indexExpression":{"id":21551,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21518,"src":"47109:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"47078:33:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":21553,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21200,"src":"47137:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":21554,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"47146:10:68","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":4725,"src":"47137:19:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21556,"indexExpression":{"id":21555,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21518,"src":"47157:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"47137:22:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":21547,"name":"amountOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21532,"src":"47012:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"47030:22:68","memberName":"toRawUndoRateRoundDown","nodeType":"MemberAccess","referencedDeclaration":6509,"src":"47012:40:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":21557,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"47012:169:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"46997:184:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21559,"nodeType":"ExpressionStatement","src":"46997:184:68"},{"expression":{"id":21564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":21560,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21214,"src":"47203:13:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21562,"indexExpression":{"id":21561,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21518,"src":"47217:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"47203:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":21563,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21529,"src":"47222:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"47203:31:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21565,"nodeType":"ExpressionStatement","src":"47203:31:68"}]}}]},{"assignments":[21578],"declarations":[{"constant":false,"id":21578,"mutability":"mutable","name":"token","nameLocation":"47525:5:68","nodeType":"VariableDeclaration","scope":21642,"src":"47518:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":21577,"nodeType":"UserDefinedTypeName","pathNode":{"id":21576,"name":"IERC20","nameLocations":["47518:6:68"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"47518:6:68"},"referencedDeclaration":40109,"src":"47518:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"id":21583,"initialValue":{"baseExpression":{"expression":{"id":21579,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21200,"src":"47533:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":21580,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"47542:6:68","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":4712,"src":"47533:15:68","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":21582,"indexExpression":{"id":21581,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21518,"src":"47549:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"47533:18:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"47518:33:68"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21589,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21584,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21529,"src":"47617:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"baseExpression":{"expression":{"id":21585,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"47632:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21586,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"47639:13:68","memberName":"minAmountsOut","nodeType":"MemberAccess","referencedDeclaration":4838,"src":"47632:20:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21588,"indexExpression":{"id":21587,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21518,"src":"47653:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"47632:23:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"47617:38:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21600,"nodeType":"IfStatement","src":"47613:147:68","trueBody":{"id":21599,"nodeType":"Block","src":"47657:103:68","statements":[{"errorCall":{"arguments":[{"id":21591,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21578,"src":"47700:5:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":21592,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21529,"src":"47707:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":21593,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"47721:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21594,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"47728:13:68","memberName":"minAmountsOut","nodeType":"MemberAccess","referencedDeclaration":4838,"src":"47721:20:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21596,"indexExpression":{"id":21595,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21518,"src":"47742:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"47721:23:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21590,"name":"AmountOutBelowMin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3584,"src":"47682:17:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$40109_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (contract IERC20,uint256,uint256) pure returns (error)"}},"id":21597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"47682:63:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":21598,"nodeType":"RevertStatement","src":"47675:70:68"}]}},{"expression":{"arguments":[{"id":21602,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21578,"src":"47848:5:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":21603,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21529,"src":"47855:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21601,"name":"_supplyCredit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24891,"src":"47834:13:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":21604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"47834:34:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21605,"nodeType":"ExpressionStatement","src":"47834:34:68"},{"expression":{"id":21622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":21606,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21246,"src":"48011:14:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21608,"indexExpression":{"id":21607,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21518,"src":"48026:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"48011:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":21609,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21223,"src":"48030:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$20605_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":21610,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"48037:25:68","memberName":"aggregateSwapFeeAmountRaw","nodeType":"MemberAccess","referencedDeclaration":20602,"src":"48030:32:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":21611,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"48010:53:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":21613,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21200,"src":"48118:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},{"baseExpression":{"id":21614,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21246,"src":"48144:14:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21616,"indexExpression":{"id":21615,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21518,"src":"48159:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"48144:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":21617,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"48179:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21618,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"48186:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4831,"src":"48179:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21619,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21578,"src":"48208:5:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":21620,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21518,"src":"48231:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21612,"name":"_computeAndChargeAggregateSwapFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21795,"src":"48066:34:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PoolData_$4729_memory_ptr_$_t_uint256_$_t_address_$_t_contract$_IERC20_$40109_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (struct PoolData memory,uint256,address,contract IERC20,uint256) returns (uint256,uint256)"}},"id":21621,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"48066:180:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"48010:236:68","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21623,"nodeType":"ExpressionStatement","src":"48010:236:68"},{"expression":{"arguments":[{"id":21627,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21518,"src":"48656:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"expression":{"id":21628,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21200,"src":"48675:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":21629,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"48684:11:68","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":4719,"src":"48675:20:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21631,"indexExpression":{"id":21630,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21518,"src":"48696:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"48675:23:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21632,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21529,"src":"48702:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"expression":{"id":21633,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21223,"src":"48717:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$20605_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":21634,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"48724:25:68","memberName":"aggregateSwapFeeAmountRaw","nodeType":"MemberAccess","referencedDeclaration":20602,"src":"48717:32:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"48702:47:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":21636,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"48701:49:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"48675:75:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":21638,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"48768:8:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":21639,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"48777:10:68","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":4731,"src":"48768:19:68","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"expression":{"id":21624,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21200,"src":"48606:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":21626,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"48615:23:68","memberName":"updateRawAndLiveBalance","nodeType":"MemberAccess","referencedDeclaration":30978,"src":"48606:32:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_PoolData_$4729_memory_ptr_$_t_uint256_$_t_uint256_$_t_enum$_Rounding_$4732_$returns$__$attached_to$_t_struct$_PoolData_$4729_memory_ptr_$","typeString":"function (struct PoolData memory,uint256,uint256,enum Rounding) pure"}},"id":21640,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"48606:195:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21641,"nodeType":"ExpressionStatement","src":"48606:195:68"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21521,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21518,"src":"46403:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":21522,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21223,"src":"46407:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityLocals_$20605_memory_ptr","typeString":"struct Vault.LiquidityLocals memory"}},"id":21523,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"46414:9:68","memberName":"numTokens","nodeType":"MemberAccess","referencedDeclaration":20600,"src":"46407:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"46403:20:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21643,"initializationExpression":{"assignments":[21518],"declarations":[{"constant":false,"id":21518,"mutability":"mutable","name":"i","nameLocation":"46396:1:68","nodeType":"VariableDeclaration","scope":21643,"src":"46388:9:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21517,"name":"uint256","nodeType":"ElementaryTypeName","src":"46388:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21520,"initialValue":{"hexValue":"30","id":21519,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"46400:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"46388:13:68"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":21526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"46425:3:68","subExpression":{"id":21525,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21518,"src":"46427:1:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21527,"nodeType":"ExpressionStatement","src":"46425:3:68"},"nodeType":"ForStatement","src":"46383:2429:68"},{"expression":{"arguments":[{"expression":{"id":21645,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"48899:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21646,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"48906:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4831,"src":"48899:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21647,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21200,"src":"48912:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}],"id":21644,"name":"_writePoolBalancesToStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25305,"src":"48871:27:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_struct$_PoolData_$4729_memory_ptr_$returns$__$","typeString":"function (address,struct PoolData memory)"}},"id":21648,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"48871:50:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21649,"nodeType":"ExpressionStatement","src":"48871:50:68"},{"expression":{"arguments":[{"arguments":[{"expression":{"id":21653,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"49072:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21654,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"49079:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4831,"src":"49072:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21652,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"49064:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21651,"name":"address","nodeType":"ElementaryTypeName","src":"49064:7:68","typeDescriptions":{}}},"id":21655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"49064:20:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21656,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"49086:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21657,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"49093:4:68","memberName":"from","nodeType":"MemberAccess","referencedDeclaration":4833,"src":"49086:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21658,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"49099:3:68","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":21659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"49103:6:68","memberName":"sender","nodeType":"MemberAccess","src":"49099:10:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21660,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21211,"src":"49111:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21650,"name":"_spendAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39428,"src":"49048:15:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":21661,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"49048:75:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21662,"nodeType":"ExpressionStatement","src":"49048:75:68"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":21663,"name":"_isQueryContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25605,"src":"49138:15:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":21664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"49138:17:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21674,"nodeType":"IfStatement","src":"49134:189:68","trueBody":{"id":21673,"nodeType":"Block","src":"49157:166:68","statements":[{"expression":{"arguments":[{"expression":{"id":21666,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"49274:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21667,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"49281:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4831,"src":"49274:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21668,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"49287:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21669,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"49294:4:68","memberName":"from","nodeType":"MemberAccess","referencedDeclaration":4833,"src":"49287:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21670,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21211,"src":"49300:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21665,"name":"_queryModeBalanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38988,"src":"49248:25:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":21671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"49248:64:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21672,"nodeType":"ExpressionStatement","src":"49248:64:68"}]}},{"expression":{"arguments":[{"arguments":[{"expression":{"id":21678,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"49607:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21679,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"49614:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4831,"src":"49607:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21677,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"49599:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21676,"name":"address","nodeType":"ElementaryTypeName","src":"49599:7:68","typeDescriptions":{}}},"id":21680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"49599:20:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21681,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"49621:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21682,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"49628:4:68","memberName":"from","nodeType":"MemberAccess","referencedDeclaration":4833,"src":"49621:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21683,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21211,"src":"49634:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21675,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39222,"src":"49593:5:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":21684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"49593:53:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21685,"nodeType":"ExpressionStatement","src":"49593:53:68"},{"eventCall":{"arguments":[{"expression":{"id":21687,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"49724:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21688,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"49731:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4831,"src":"49724:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21689,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"49749:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21690,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"49756:4:68","memberName":"from","nodeType":"MemberAccess","referencedDeclaration":4833,"src":"49749:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":21691,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"49774:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21692,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"49781:4:68","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4841,"src":"49774:11:68","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},{"arguments":[{"expression":{"id":21694,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21203,"src":"49812:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":21695,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"49819:4:68","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4831,"src":"49812:11:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21693,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38906,"src":"49799:12:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":21696,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"49799:25:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21697,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21214,"src":"49838:13:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":21698,"name":"swapFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21246,"src":"49865:14:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":21686,"name":"LiquidityRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3890,"src":"49694:16:68","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_enum$_RemoveLiquidityKind_$4828_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,address,enum RemoveLiquidityKind,uint256,uint256[] memory,uint256[] memory)"}},"id":21699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"49694:195:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21700,"nodeType":"EmitStatement","src":"49689:200:68"}]},"documentation":{"id":21197,"nodeType":"StructuredDocumentation","src":"41321:460:68","text":" @dev Calls the appropriate pool hook and calculates the required inputs and outputs for the operation\n considering the given kind, and updates the Vault's internal accounting. This includes:\n - Setting pool balances\n - Supplying credit to the liquidity provider\n - Burning pool tokens\n - Emitting events\n It is non-reentrant, as it performs external calls and updates the Vault's state accordingly."},"id":21702,"implemented":true,"kind":"function","modifiers":[{"id":21209,"kind":"modifierInvocation","modifierName":{"id":21208,"name":"nonReentrant","nameLocations":["41970:12:68"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"41970:12:68"},"nodeType":"ModifierInvocation","src":"41970:12:68"}],"name":"_removeLiquidity","nameLocation":"41795:16:68","nodeType":"FunctionDefinition","parameters":{"id":21207,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21200,"mutability":"mutable","name":"poolData","nameLocation":"41837:8:68","nodeType":"VariableDeclaration","scope":21702,"src":"41821:24:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":21199,"nodeType":"UserDefinedTypeName","pathNode":{"id":21198,"name":"PoolData","nameLocations":["41821:8:68"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"41821:8:68"},"referencedDeclaration":4729,"src":"41821:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":21203,"mutability":"mutable","name":"params","nameLocation":"41884:6:68","nodeType":"VariableDeclaration","scope":21702,"src":"41855:35:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams"},"typeName":{"id":21202,"nodeType":"UserDefinedTypeName","pathNode":{"id":21201,"name":"RemoveLiquidityParams","nameLocations":["41855:21:68"],"nodeType":"IdentifierPath","referencedDeclaration":4844,"src":"41855:21:68"},"referencedDeclaration":4844,"src":"41855:21:68","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_storage_ptr","typeString":"struct RemoveLiquidityParams"}},"visibility":"internal"},{"constant":false,"id":21206,"mutability":"mutable","name":"minAmountsOutScaled18","nameLocation":"41917:21:68","nodeType":"VariableDeclaration","scope":21702,"src":"41900:38:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":21204,"name":"uint256","nodeType":"ElementaryTypeName","src":"41900:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21205,"nodeType":"ArrayTypeName","src":"41900:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"41811:133:68"},"returnParameters":{"id":21220,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21211,"mutability":"mutable","name":"bptAmountIn","nameLocation":"42021:11:68","nodeType":"VariableDeclaration","scope":21702,"src":"42013:19:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21210,"name":"uint256","nodeType":"ElementaryTypeName","src":"42013:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21214,"mutability":"mutable","name":"amountsOutRaw","nameLocation":"42063:13:68","nodeType":"VariableDeclaration","scope":21702,"src":"42046:30:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":21212,"name":"uint256","nodeType":"ElementaryTypeName","src":"42046:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21213,"nodeType":"ArrayTypeName","src":"42046:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":21217,"mutability":"mutable","name":"amountsOutScaled18","nameLocation":"42107:18:68","nodeType":"VariableDeclaration","scope":21702,"src":"42090:35:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":21215,"name":"uint256","nodeType":"ElementaryTypeName","src":"42090:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21216,"nodeType":"ArrayTypeName","src":"42090:9:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":21219,"mutability":"mutable","name":"returnData","nameLocation":"42152:10:68","nodeType":"VariableDeclaration","scope":21702,"src":"42139:23:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":21218,"name":"bytes","nodeType":"ElementaryTypeName","src":"42139:5:68","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"41999:173:68"},"scope":22797,"src":"41786:8110:68","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":21794,"nodeType":"Block","src":"50775:2073:68","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21722,"name":"totalSwapFeeAmountScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21708,"src":"50871:26:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":21723,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"50900:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"50871:30:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21793,"nodeType":"IfStatement","src":"50867:1975:68","trueBody":{"id":21792,"nodeType":"Block","src":"50903:1939:68","statements":[{"expression":{"id":21737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21725,"name":"totalSwapFeeAmountRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21718,"src":"51201:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"expression":{"id":21728,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21706,"src":"51292:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":21729,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"51301:21:68","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":4728,"src":"51292:30:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21731,"indexExpression":{"id":21730,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21715,"src":"51323:5:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"51292:37:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":21732,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21706,"src":"51347:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":21733,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"51356:10:68","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":4725,"src":"51347:19:68","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":21735,"indexExpression":{"id":21734,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21715,"src":"51367:5:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"51347:26:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":21726,"name":"totalSwapFeeAmountScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21708,"src":"51225:26:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"51252:22:68","memberName":"toRawUndoRateRoundDown","nodeType":"MemberAccess","referencedDeclaration":6509,"src":"51225:49:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":21736,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"51225:162:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"51201:186:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21738,"nodeType":"ExpressionStatement","src":"51201:186:68"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":21744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":21739,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21706,"src":"51582:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":21740,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"51591:14:68","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"51582:23:68","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":21741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"51606:20:68","memberName":"isPoolInRecoveryMode","nodeType":"MemberAccess","referencedDeclaration":29766,"src":"51582:44:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":21742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"51582:46:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":21743,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"51632:5:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"51582:55:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21791,"nodeType":"IfStatement","src":"51578:1254:68","trueBody":{"id":21790,"nodeType":"Block","src":"51639:1193:68","statements":[{"assignments":[21746],"declarations":[{"constant":false,"id":21746,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"51665:26:68","nodeType":"VariableDeclaration","scope":21790,"src":"51657:34:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21745,"name":"uint256","nodeType":"ElementaryTypeName","src":"51657:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21751,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":21747,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21706,"src":"51694:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":21748,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"51703:14:68","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"51694:23:68","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":21749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"51718:29:68","memberName":"getAggregateSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":30122,"src":"51694:53:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (uint256)"}},"id":21750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"51694:55:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"51657:92:68"},{"expression":{"id":21757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":21752,"name":"aggregateSwapFeeAmountRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21720,"src":"52054:25:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":21755,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21746,"src":"52112:26:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":21753,"name":"totalSwapFeeAmountRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21718,"src":"52082:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"52104:7:68","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":7953,"src":"52082:29:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":21756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"52082:57:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"52054:85:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":21758,"nodeType":"ExpressionStatement","src":"52054:85:68"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":21759,"name":"aggregateSwapFeeAmountRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21720,"src":"52238:25:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":21760,"name":"totalSwapFeeAmountRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21718,"src":"52266:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"52238:49:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":21766,"nodeType":"IfStatement","src":"52234:137:68","trueBody":{"id":21765,"nodeType":"Block","src":"52289:82:68","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":21762,"name":"ProtocolFeesExceedTotalCollected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3607,"src":"52318:32:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":21763,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"52318:34:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":21764,"nodeType":"RevertStatement","src":"52311:41:68"}]}},{"assignments":[21768],"declarations":[{"constant":false,"id":21768,"mutability":"mutable","name":"currentPackedBalance","nameLocation":"52569:20:68","nodeType":"VariableDeclaration","scope":21790,"src":"52561:28:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":21767,"name":"bytes32","nodeType":"ElementaryTypeName","src":"52561:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":21774,"initialValue":{"baseExpression":{"baseExpression":{"id":21769,"name":"_aggregateFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28263,"src":"52592:20:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$_$","typeString":"mapping(address => mapping(contract IERC20 => bytes32))"}},"id":21771,"indexExpression":{"id":21770,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21710,"src":"52613:4:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"52592:26:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$","typeString":"mapping(contract IERC20 => bytes32)"}},"id":21773,"indexExpression":{"id":21772,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21713,"src":"52619:5:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"52592:33:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"52561:64:68"},{"expression":{"id":21788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":21775,"name":"_aggregateFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28263,"src":"52643:20:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$_$","typeString":"mapping(address => mapping(contract IERC20 => bytes32))"}},"id":21778,"indexExpression":{"id":21776,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21710,"src":"52664:4:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"52643:26:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$","typeString":"mapping(contract IERC20 => bytes32)"}},"id":21779,"indexExpression":{"id":21777,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21713,"src":"52670:5:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"52643:33:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":21786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":21782,"name":"currentPackedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21768,"src":"52735:20:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":21783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"52756:13:68","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":6222,"src":"52735:34:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":21784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"52735:36:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":21785,"name":"aggregateSwapFeeAmountRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21720,"src":"52774:25:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"52735:64:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":21780,"name":"currentPackedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21768,"src":"52679:20:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":21781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"52700:13:68","memberName":"setBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":6257,"src":"52679:34:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":21787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"52679:138:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"52643:174:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":21789,"nodeType":"ExpressionStatement","src":"52643:174:68"}]}}]}}]},"documentation":{"id":21703,"nodeType":"StructuredDocumentation","src":"49902:589:68","text":" @dev Preconditions: poolConfigBits, decimalScalingFactors, tokenRates in `poolData`.\n Side effects: updates `_aggregateFeeAmounts` storage.\n Note that this computes the aggregate total of the protocol fees and stores it, without emitting any events.\n Splitting the fees and event emission occur during fee collection.\n Should only be called in a non-reentrant context.\n @return totalSwapFeeAmountRaw Total swap fees raw (LP + aggregate protocol fees)\n @return aggregateSwapFeeAmountRaw Sum of protocol and pool creator fees raw"},"id":21795,"implemented":true,"kind":"function","modifiers":[],"name":"_computeAndChargeAggregateSwapFees","nameLocation":"50505:34:68","nodeType":"FunctionDefinition","parameters":{"id":21716,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21706,"mutability":"mutable","name":"poolData","nameLocation":"50565:8:68","nodeType":"VariableDeclaration","scope":21795,"src":"50549:24:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":21705,"nodeType":"UserDefinedTypeName","pathNode":{"id":21704,"name":"PoolData","nameLocations":["50549:8:68"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"50549:8:68"},"referencedDeclaration":4729,"src":"50549:8:68","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":21708,"mutability":"mutable","name":"totalSwapFeeAmountScaled18","nameLocation":"50591:26:68","nodeType":"VariableDeclaration","scope":21795,"src":"50583:34:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21707,"name":"uint256","nodeType":"ElementaryTypeName","src":"50583:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21710,"mutability":"mutable","name":"pool","nameLocation":"50635:4:68","nodeType":"VariableDeclaration","scope":21795,"src":"50627:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21709,"name":"address","nodeType":"ElementaryTypeName","src":"50627:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21713,"mutability":"mutable","name":"token","nameLocation":"50656:5:68","nodeType":"VariableDeclaration","scope":21795,"src":"50649:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":21712,"nodeType":"UserDefinedTypeName","pathNode":{"id":21711,"name":"IERC20","nameLocations":["50649:6:68"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"50649:6:68"},"referencedDeclaration":40109,"src":"50649:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":21715,"mutability":"mutable","name":"index","nameLocation":"50679:5:68","nodeType":"VariableDeclaration","scope":21795,"src":"50671:13:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21714,"name":"uint256","nodeType":"ElementaryTypeName","src":"50671:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"50539:151:68"},"returnParameters":{"id":21721,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21718,"mutability":"mutable","name":"totalSwapFeeAmountRaw","nameLocation":"50717:21:68","nodeType":"VariableDeclaration","scope":21795,"src":"50709:29:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21717,"name":"uint256","nodeType":"ElementaryTypeName","src":"50709:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21720,"mutability":"mutable","name":"aggregateSwapFeeAmountRaw","nameLocation":"50748:25:68","nodeType":"VariableDeclaration","scope":21795,"src":"50740:33:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21719,"name":"uint256","nodeType":"ElementaryTypeName","src":"50740:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"50708:66:68"},"scope":22797,"src":"50496:2352:68","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[4516],"body":{"id":21832,"nodeType":"Block","src":"53267:168:68","statements":[{"assignments":[21815],"declarations":[{"constant":false,"id":21815,"mutability":"mutable","name":"poolTokens","nameLocation":"53293:10:68","nodeType":"VariableDeclaration","scope":21832,"src":"53277:26:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":21813,"nodeType":"UserDefinedTypeName","pathNode":{"id":21812,"name":"IERC20","nameLocations":["53277:6:68"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"53277:6:68"},"referencedDeclaration":40109,"src":"53277:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":21814,"nodeType":"ArrayTypeName","src":"53277:8:68","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"id":21819,"initialValue":{"baseExpression":{"id":21816,"name":"_poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28242,"src":"53306:11:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_contract$_IERC20_$40109_$dyn_storage_$","typeString":"mapping(address => contract IERC20[] storage ref)"}},"id":21818,"indexExpression":{"id":21817,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21798,"src":"53318:4:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"53306:17:68","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"53277:46:68"},{"assignments":[21821],"declarations":[{"constant":false,"id":21821,"mutability":"mutable","name":"index","nameLocation":"53342:5:68","nodeType":"VariableDeclaration","scope":21832,"src":"53334:13:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21820,"name":"uint256","nodeType":"ElementaryTypeName","src":"53334:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":21826,"initialValue":{"arguments":[{"id":21823,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21815,"src":"53366:10:68","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},{"id":21824,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21801,"src":"53378:5:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":21822,"name":"_findTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25546,"src":"53350:15:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$_t_contract$_IERC20_$40109_$returns$_t_uint256_$","typeString":"function (contract IERC20[] memory,contract IERC20) pure returns (uint256)"}},"id":21825,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"53350:34:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"53334:50:68"},{"expression":{"components":[{"expression":{"id":21827,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21815,"src":"53403:10:68","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":21828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"53414:6:68","memberName":"length","nodeType":"MemberAccess","src":"53403:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21829,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21821,"src":"53422:5:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":21830,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"53402:26:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":21810,"id":21831,"nodeType":"Return","src":"53395:33:68"}]},"documentation":{"id":21796,"nodeType":"StructuredDocumentation","src":"53078:26:68","text":"@inheritdoc IVaultMain"},"functionSelector":"c9c1661b","id":21833,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":21804,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21798,"src":"53234:4:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":21805,"kind":"modifierInvocation","modifierName":{"id":21803,"name":"withRegisteredPool","nameLocations":["53215:18:68"],"nodeType":"IdentifierPath","referencedDeclaration":25120,"src":"53215:18:68"},"nodeType":"ModifierInvocation","src":"53215:24:68"}],"name":"getPoolTokenCountAndIndexOfToken","nameLocation":"53118:32:68","nodeType":"FunctionDefinition","parameters":{"id":21802,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21798,"mutability":"mutable","name":"pool","nameLocation":"53168:4:68","nodeType":"VariableDeclaration","scope":21833,"src":"53160:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21797,"name":"address","nodeType":"ElementaryTypeName","src":"53160:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21801,"mutability":"mutable","name":"token","nameLocation":"53189:5:68","nodeType":"VariableDeclaration","scope":21833,"src":"53182:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":21800,"nodeType":"UserDefinedTypeName","pathNode":{"id":21799,"name":"IERC20","nameLocations":["53182:6:68"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"53182:6:68"},"referencedDeclaration":40109,"src":"53182:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"53150:50:68"},"returnParameters":{"id":21810,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21807,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21833,"src":"53249:7:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21806,"name":"uint256","nodeType":"ElementaryTypeName","src":"53249:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21809,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21833,"src":"53258:7:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21808,"name":"uint256","nodeType":"ElementaryTypeName","src":"53258:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"53248:18:68"},"scope":22797,"src":"53109:326:68","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4528],"body":{"id":21855,"nodeType":"Block","src":"53782:78:68","statements":[{"expression":{"arguments":[{"expression":{"id":21846,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"53802:3:68","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":21847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"53806:6:68","memberName":"sender","nodeType":"MemberAccess","src":"53802:10:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21848,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21836,"src":"53814:5:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21849,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21838,"src":"53821:2:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21850,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21840,"src":"53825:6:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21845,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39312,"src":"53792:9:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":21851,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"53792:40:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21852,"nodeType":"ExpressionStatement","src":"53792:40:68"},{"expression":{"hexValue":"74727565","id":21853,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"53849:4:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":21844,"id":21854,"nodeType":"Return","src":"53842:11:68"}]},"documentation":{"id":21834,"nodeType":"StructuredDocumentation","src":"53666:26:68","text":"@inheritdoc IVaultMain"},"functionSelector":"beabacc8","id":21856,"implemented":true,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"53706:8:68","nodeType":"FunctionDefinition","parameters":{"id":21841,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21836,"mutability":"mutable","name":"owner","nameLocation":"53723:5:68","nodeType":"VariableDeclaration","scope":21856,"src":"53715:13:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21835,"name":"address","nodeType":"ElementaryTypeName","src":"53715:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21838,"mutability":"mutable","name":"to","nameLocation":"53738:2:68","nodeType":"VariableDeclaration","scope":21856,"src":"53730:10:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21837,"name":"address","nodeType":"ElementaryTypeName","src":"53730:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21840,"mutability":"mutable","name":"amount","nameLocation":"53750:6:68","nodeType":"VariableDeclaration","scope":21856,"src":"53742:14:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21839,"name":"uint256","nodeType":"ElementaryTypeName","src":"53742:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"53714:43:68"},"returnParameters":{"id":21844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21843,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21856,"src":"53776:4:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":21842,"name":"bool","nodeType":"ElementaryTypeName","src":"53776:4:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"53775:6:68"},"scope":22797,"src":"53697:163:68","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[4542],"body":{"id":21888,"nodeType":"Block","src":"54002:137:68","statements":[{"expression":{"arguments":[{"expression":{"id":21871,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"54028:3:68","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":21872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"54032:6:68","memberName":"sender","nodeType":"MemberAccess","src":"54028:10:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21873,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21861,"src":"54040:4:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21874,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21859,"src":"54046:7:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21875,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21865,"src":"54055:6:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21870,"name":"_spendAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39428,"src":"54012:15:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":21876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"54012:50:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21877,"nodeType":"ExpressionStatement","src":"54012:50:68"},{"expression":{"arguments":[{"expression":{"id":21879,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"54082:3:68","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":21880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"54086:6:68","memberName":"sender","nodeType":"MemberAccess","src":"54082:10:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21881,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21861,"src":"54094:4:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21882,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21863,"src":"54100:2:68","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":21883,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21865,"src":"54104:6:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21878,"name":"_transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39312,"src":"54072:9:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":21884,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"54072:39:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21885,"nodeType":"ExpressionStatement","src":"54072:39:68"},{"expression":{"hexValue":"74727565","id":21886,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"54128:4:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":21869,"id":21887,"nodeType":"Return","src":"54121:11:68"}]},"documentation":{"id":21857,"nodeType":"StructuredDocumentation","src":"53866:26:68","text":"@inheritdoc IVaultMain"},"functionSelector":"15dacbea","id":21889,"implemented":true,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"53906:12:68","nodeType":"FunctionDefinition","parameters":{"id":21866,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21859,"mutability":"mutable","name":"spender","nameLocation":"53927:7:68","nodeType":"VariableDeclaration","scope":21889,"src":"53919:15:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21858,"name":"address","nodeType":"ElementaryTypeName","src":"53919:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21861,"mutability":"mutable","name":"from","nameLocation":"53944:4:68","nodeType":"VariableDeclaration","scope":21889,"src":"53936:12:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21860,"name":"address","nodeType":"ElementaryTypeName","src":"53936:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21863,"mutability":"mutable","name":"to","nameLocation":"53958:2:68","nodeType":"VariableDeclaration","scope":21889,"src":"53950:10:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":21862,"name":"address","nodeType":"ElementaryTypeName","src":"53950:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":21865,"mutability":"mutable","name":"amount","nameLocation":"53970:6:68","nodeType":"VariableDeclaration","scope":21889,"src":"53962:14:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21864,"name":"uint256","nodeType":"ElementaryTypeName","src":"53962:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"53918:59:68"},"returnParameters":{"id":21869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21868,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":21889,"src":"53996:4:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":21867,"name":"bool","nodeType":"ElementaryTypeName","src":"53996:4:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"53995:6:68"},"scope":22797,"src":"53897:242:68","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[4555],"body":{"id":22044,"nodeType":"Block","src":"54730:1530:68","statements":[{"assignments":[21914],"declarations":[{"constant":false,"id":21914,"mutability":"mutable","name":"underlyingToken","nameLocation":"54747:15:68","nodeType":"VariableDeclaration","scope":22044,"src":"54740:22:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":21913,"nodeType":"UserDefinedTypeName","pathNode":{"id":21912,"name":"IERC20","nameLocations":["54740:6:68"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"54740:6:68"},"referencedDeclaration":40109,"src":"54740:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"id":21921,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":21916,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21893,"src":"54772:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":21917,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"54779:12:68","memberName":"wrappedToken","nodeType":"MemberAccess","referencedDeclaration":4857,"src":"54772:19:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"id":21918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"54792:5:68","memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":39702,"src":"54772:25:68","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":21919,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"54772:27:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":21915,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"54765:6:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":21920,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"54765:35:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"54740:60:68"},{"expression":{"arguments":[{"expression":{"id":21923,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21893,"src":"54836:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":21924,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"54843:12:68","memberName":"wrappedToken","nodeType":"MemberAccess","referencedDeclaration":4857,"src":"54836:19:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"arguments":[{"id":21927,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21914,"src":"54865:15:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":21926,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"54857:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":21925,"name":"address","nodeType":"ElementaryTypeName","src":"54857:7:68","typeDescriptions":{}}},"id":21928,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"54857:24:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_address","typeString":"address"}],"id":21922,"name":"_ensureCorrectBufferAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25257,"src":"54810:25:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC4626_$39833_$_t_address_$returns$__$","typeString":"function (contract IERC4626,address) view"}},"id":21929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"54810:72:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21930,"nodeType":"ExpressionStatement","src":"54810:72:68"},{"expression":{"arguments":[{"expression":{"id":21932,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21893,"src":"54916:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":21933,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"54923:12:68","memberName":"wrappedToken","nodeType":"MemberAccess","referencedDeclaration":4857,"src":"54916:19:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"expression":{"id":21934,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21893,"src":"54937:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":21935,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"54944:14:68","memberName":"amountGivenRaw","nodeType":"MemberAccess","referencedDeclaration":4859,"src":"54937:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21931,"name":"_ensureValidWrapAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22063,"src":"54893:22:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC4626_$39833_$_t_uint256_$returns$__$","typeString":"function (contract IERC4626,uint256) view"}},"id":21936,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"54893:66:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21937,"nodeType":"ExpressionStatement","src":"54893:66:68"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_WrappingDirection_$4847","typeString":"enum WrappingDirection"},"id":21942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21938,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21893,"src":"54974:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":21939,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"54981:9:68","memberName":"direction","nodeType":"MemberAccess","referencedDeclaration":4854,"src":"54974:16:68","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$4847","typeString":"enum WrappingDirection"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":21940,"name":"WrappingDirection","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4847,"src":"54994:17:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_WrappingDirection_$4847_$","typeString":"type(enum WrappingDirection)"}},"id":21941,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"55012:6:68","memberName":"UNWRAP","nodeType":"MemberAccess","referencedDeclaration":4846,"src":"54994:24:68","typeDescriptions":{"typeIdentifier":"t_enum$_WrappingDirection_$4847","typeString":"enum WrappingDirection"}},"src":"54974:44:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":21996,"nodeType":"Block","src":"55391:361:68","statements":[{"assignments":[21971],"declarations":[{"constant":false,"id":21971,"mutability":"mutable","name":"bufferBalances","nameLocation":"55413:14:68","nodeType":"VariableDeclaration","scope":21996,"src":"55405:22:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":21970,"name":"bytes32","nodeType":"ElementaryTypeName","src":"55405:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":21972,"nodeType":"VariableDeclarationStatement","src":"55405:22:68"},{"expression":{"id":21986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":21973,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21908,"src":"55442:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21974,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21910,"src":"55455:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21975,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21971,"src":"55469:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":21976,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"55441:43:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bytes32_$","typeString":"tuple(uint256,uint256,bytes32)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":21978,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21893,"src":"55520:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":21979,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"55527:4:68","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4851,"src":"55520:11:68","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},{"id":21980,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21914,"src":"55549:15:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"expression":{"id":21981,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21893,"src":"55582:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":21982,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"55589:12:68","memberName":"wrappedToken","nodeType":"MemberAccess","referencedDeclaration":4857,"src":"55582:19:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"expression":{"id":21983,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21893,"src":"55619:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":21984,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"55626:14:68","memberName":"amountGivenRaw","nodeType":"MemberAccess","referencedDeclaration":4859,"src":"55619:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21977,"name":"_wrapWithBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22328,"src":"55487:15:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_enum$_SwapKind_$4735_$_t_contract$_IERC20_$40109_$_t_contract$_IERC4626_$39833_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_bytes32_$","typeString":"function (enum SwapKind,contract IERC20,contract IERC4626,uint256) returns (uint256,uint256,bytes32)"}},"id":21985,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"55487:167:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bytes32_$","typeString":"tuple(uint256,uint256,bytes32)"}},"src":"55441:213:68","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21987,"nodeType":"ExpressionStatement","src":"55441:213:68"},{"eventCall":{"arguments":[{"expression":{"id":21989,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21893,"src":"55678:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":21990,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"55685:12:68","memberName":"wrappedToken","nodeType":"MemberAccess","referencedDeclaration":4857,"src":"55678:19:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":21991,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21908,"src":"55699:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21992,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21910,"src":"55712:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21993,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21971,"src":"55726:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":21988,"name":"Wrap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3842,"src":"55673:4:68","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$_t_bytes32_$returns$__$","typeString":"function (contract IERC4626,uint256,uint256,bytes32)"}},"id":21994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"55673:68:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21995,"nodeType":"EmitStatement","src":"55668:73:68"}]},"id":21997,"nodeType":"IfStatement","src":"54970:782:68","trueBody":{"id":21969,"nodeType":"Block","src":"55020:365:68","statements":[{"assignments":[21944],"declarations":[{"constant":false,"id":21944,"mutability":"mutable","name":"bufferBalances","nameLocation":"55042:14:68","nodeType":"VariableDeclaration","scope":21969,"src":"55034:22:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":21943,"name":"bytes32","nodeType":"ElementaryTypeName","src":"55034:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":21945,"nodeType":"VariableDeclarationStatement","src":"55034:22:68"},{"expression":{"id":21959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":21946,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21908,"src":"55071:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21947,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21910,"src":"55084:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21948,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21944,"src":"55098:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":21949,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"55070:43:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bytes32_$","typeString":"tuple(uint256,uint256,bytes32)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":21951,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21893,"src":"55151:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":21952,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"55158:4:68","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4851,"src":"55151:11:68","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},{"id":21953,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21914,"src":"55180:15:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"expression":{"id":21954,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21893,"src":"55213:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":21955,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"55220:12:68","memberName":"wrappedToken","nodeType":"MemberAccess","referencedDeclaration":4857,"src":"55213:19:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"expression":{"id":21956,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21893,"src":"55250:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":21957,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"55257:14:68","memberName":"amountGivenRaw","nodeType":"MemberAccess","referencedDeclaration":4859,"src":"55250:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":21950,"name":"_unwrapWithBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22564,"src":"55116:17:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_enum$_SwapKind_$4735_$_t_contract$_IERC20_$40109_$_t_contract$_IERC4626_$39833_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_bytes32_$","typeString":"function (enum SwapKind,contract IERC20,contract IERC4626,uint256) returns (uint256,uint256,bytes32)"}},"id":21958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"55116:169:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bytes32_$","typeString":"tuple(uint256,uint256,bytes32)"}},"src":"55070:215:68","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21960,"nodeType":"ExpressionStatement","src":"55070:215:68"},{"eventCall":{"arguments":[{"expression":{"id":21962,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21893,"src":"55311:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":21963,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"55318:12:68","memberName":"wrappedToken","nodeType":"MemberAccess","referencedDeclaration":4857,"src":"55311:19:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":21964,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21908,"src":"55332:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21965,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21910,"src":"55345:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":21966,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21944,"src":"55359:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":21961,"name":"Unwrap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3854,"src":"55304:6:68","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$_t_bytes32_$returns$__$","typeString":"function (contract IERC4626,uint256,uint256,bytes32)"}},"id":21967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"55304:70:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":21968,"nodeType":"EmitStatement","src":"55299:75:68"}]}},{"condition":{"commonType":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},"id":22002,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":21998,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21893,"src":"55766:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":21999,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"55773:4:68","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4851,"src":"55766:11:68","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":22000,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"55781:8:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4735_$","typeString":"type(enum SwapKind)"}},"id":22001,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"55790:8:68","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"55781:17:68","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"src":"55766:32:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":22036,"nodeType":"Block","src":"55994:185:68","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22020,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21908,"src":"56012:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":22021,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21893,"src":"56026:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":22022,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"56033:8:68","memberName":"limitRaw","nodeType":"MemberAccess","referencedDeclaration":4861,"src":"56026:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"56012:29:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22031,"nodeType":"IfStatement","src":"56008:114:68","trueBody":{"id":22030,"nodeType":"Block","src":"56043:79:68","statements":[{"errorCall":{"arguments":[{"id":22025,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21908,"src":"56078:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":22026,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21893,"src":"56091:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":22027,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"56098:8:68","memberName":"limitRaw","nodeType":"MemberAccess","referencedDeclaration":4861,"src":"56091:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22024,"name":"SwapLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3525,"src":"56068:9:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":22028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"56068:39:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22029,"nodeType":"RevertStatement","src":"56061:46:68"}]}},{"expression":{"id":22034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22032,"name":"amountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21906,"src":"56135:19:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22033,"name":"amountInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21908,"src":"56157:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"56135:33:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22035,"nodeType":"ExpressionStatement","src":"56135:33:68"}]},"id":22037,"nodeType":"IfStatement","src":"55762:417:68","trueBody":{"id":22019,"nodeType":"Block","src":"55800:188:68","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22003,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21910,"src":"55818:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":22004,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21893,"src":"55833:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":22005,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"55840:8:68","memberName":"limitRaw","nodeType":"MemberAccess","referencedDeclaration":4861,"src":"55833:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"55818:30:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22014,"nodeType":"IfStatement","src":"55814:116:68","trueBody":{"id":22013,"nodeType":"Block","src":"55850:80:68","statements":[{"errorCall":{"arguments":[{"id":22008,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21910,"src":"55885:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":22009,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21893,"src":"55899:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":22010,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"55906:8:68","memberName":"limitRaw","nodeType":"MemberAccess","referencedDeclaration":4861,"src":"55899:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22007,"name":"SwapLimit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3525,"src":"55875:9:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":22011,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"55875:40:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22012,"nodeType":"RevertStatement","src":"55868:47:68"}]}},{"expression":{"id":22017,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22015,"name":"amountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21906,"src":"55943:19:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22016,"name":"amountOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21910,"src":"55965:12:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"55943:34:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22018,"nodeType":"ExpressionStatement","src":"55943:34:68"}]}},{"expression":{"arguments":[{"expression":{"id":22039,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21893,"src":"56212:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":22040,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"56219:12:68","memberName":"wrappedToken","nodeType":"MemberAccess","referencedDeclaration":4857,"src":"56212:19:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":22041,"name":"amountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21906,"src":"56233:19:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22038,"name":"_ensureValidWrapAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22063,"src":"56189:22:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC4626_$39833_$_t_uint256_$returns$__$","typeString":"function (contract IERC4626,uint256) view"}},"id":22042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"56189:64:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22043,"nodeType":"ExpressionStatement","src":"56189:64:68"}]},"documentation":{"id":21890,"nodeType":"StructuredDocumentation","src":"54366:26:68","text":"@inheritdoc IVaultMain"},"functionSelector":"43583be5","id":22045,"implemented":true,"kind":"function","modifiers":[{"id":21896,"kind":"modifierInvocation","modifierName":{"id":21895,"name":"onlyWhenUnlocked","nameLocations":["54511:16:68"],"nodeType":"IdentifierPath","referencedDeclaration":24848,"src":"54511:16:68"},"nodeType":"ModifierInvocation","src":"54511:16:68"},{"id":21898,"kind":"modifierInvocation","modifierName":{"id":21897,"name":"whenVaultBuffersAreNotPaused","nameLocations":["54536:28:68"],"nodeType":"IdentifierPath","referencedDeclaration":25096,"src":"54536:28:68"},"nodeType":"ModifierInvocation","src":"54536:28:68"},{"arguments":[{"expression":{"id":21900,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21893,"src":"54595:6:68","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}},"id":21901,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"54602:12:68","memberName":"wrappedToken","nodeType":"MemberAccess","referencedDeclaration":4857,"src":"54595:19:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}}],"id":21902,"kind":"modifierInvocation","modifierName":{"id":21899,"name":"withInitializedBuffer","nameLocations":["54573:21:68"],"nodeType":"IdentifierPath","referencedDeclaration":25214,"src":"54573:21:68"},"nodeType":"ModifierInvocation","src":"54573:42:68"},{"id":21904,"kind":"modifierInvocation","modifierName":{"id":21903,"name":"nonReentrant","nameLocations":["54624:12:68"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"54624:12:68"},"nodeType":"ModifierInvocation","src":"54624:12:68"}],"name":"erc4626BufferWrapOrUnwrap","nameLocation":"54406:25:68","nodeType":"FunctionDefinition","parameters":{"id":21894,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21893,"mutability":"mutable","name":"params","nameLocation":"54473:6:68","nodeType":"VariableDeclaration","scope":22045,"src":"54441:38:68","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams"},"typeName":{"id":21892,"nodeType":"UserDefinedTypeName","pathNode":{"id":21891,"name":"BufferWrapOrUnwrapParams","nameLocations":["54441:24:68"],"nodeType":"IdentifierPath","referencedDeclaration":4862,"src":"54441:24:68"},"referencedDeclaration":4862,"src":"54441:24:68","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_storage_ptr","typeString":"struct BufferWrapOrUnwrapParams"}},"visibility":"internal"}],"src":"54431:54:68"},"returnParameters":{"id":21911,"nodeType":"ParameterList","parameters":[{"constant":false,"id":21906,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"54662:19:68","nodeType":"VariableDeclaration","scope":22045,"src":"54654:27:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21905,"name":"uint256","nodeType":"ElementaryTypeName","src":"54654:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21908,"mutability":"mutable","name":"amountInRaw","nameLocation":"54691:11:68","nodeType":"VariableDeclaration","scope":22045,"src":"54683:19:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21907,"name":"uint256","nodeType":"ElementaryTypeName","src":"54683:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":21910,"mutability":"mutable","name":"amountOutRaw","nameLocation":"54712:12:68","nodeType":"VariableDeclaration","scope":22045,"src":"54704:20:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":21909,"name":"uint256","nodeType":"ElementaryTypeName","src":"54704:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"54653:72:68"},"scope":22797,"src":"54397:1863:68","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":22062,"nodeType":"Block","src":"56616:115:68","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22053,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22050,"src":"56630:6:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":22054,"name":"_MINIMUM_WRAP_AMOUNT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28196,"src":"56639:20:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"56630:29:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22061,"nodeType":"IfStatement","src":"56626:99:68","trueBody":{"id":22060,"nodeType":"Block","src":"56661:64:68","statements":[{"errorCall":{"arguments":[{"id":22057,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22048,"src":"56701:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}],"id":22056,"name":"WrapAmountTooSmall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3705,"src":"56682:18:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC4626_$39833_$returns$_t_error_$","typeString":"function (contract IERC4626) pure returns (error)"}},"id":22058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"56682:32:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22059,"nodeType":"RevertStatement","src":"56675:39:68"}]}}]},"id":22063,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureValidWrapAmount","nameLocation":"56541:22:68","nodeType":"FunctionDefinition","parameters":{"id":22051,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22048,"mutability":"mutable","name":"wrappedToken","nameLocation":"56573:12:68","nodeType":"VariableDeclaration","scope":22063,"src":"56564:21:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":22047,"nodeType":"UserDefinedTypeName","pathNode":{"id":22046,"name":"IERC4626","nameLocations":["56564:8:68"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"56564:8:68"},"referencedDeclaration":39833,"src":"56564:8:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":22050,"mutability":"mutable","name":"amount","nameLocation":"56595:6:68","nodeType":"VariableDeclaration","scope":22063,"src":"56587:14:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22049,"name":"uint256","nodeType":"ElementaryTypeName","src":"56587:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"56563:39:68"},"returnParameters":{"id":22052,"nodeType":"ParameterList","parameters":[],"src":"56616:0:68"},"scope":22797,"src":"56532:199:68","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":22327,"nodeType":"Block","src":"57375:7759:68","statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},"id":22087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22084,"name":"kind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22067,"src":"57389:4:68","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":22085,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"57397:8:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4735_$","typeString":"type(enum SwapKind)"}},"id":22086,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"57406:8:68","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"57397:17:68","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"src":"57389:25:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":22119,"nodeType":"Block","src":"58010:570:68","statements":[{"expression":{"id":22117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":22104,"name":"amountInUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22078,"src":"58469:18:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22105,"name":"amountOutWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22080,"src":"58489:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":22106,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"58468:38:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22109,"name":"amountGiven","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22075,"src":"58535:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":22110,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"58549:1:68","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"58535:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22107,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22073,"src":"58510:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"id":22108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"58523:11:68","memberName":"previewMint","nodeType":"MemberAccess","referencedDeclaration":39766,"src":"58510:24:68","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view external returns (uint256)"}},"id":22112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"58510:41:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":22113,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"58554:1:68","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"58510:45:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22115,"name":"amountGiven","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22075,"src":"58557:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":22116,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"58509:60:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"58468:101:68","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22118,"nodeType":"ExpressionStatement","src":"58468:101:68"}]},"id":22120,"nodeType":"IfStatement","src":"57385:1195:68","trueBody":{"id":22103,"nodeType":"Block","src":"57416:588:68","statements":[{"expression":{"id":22101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":22088,"name":"amountInUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22078,"src":"57890:18:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22089,"name":"amountOutWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22080,"src":"57910:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":22090,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"57889:38:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"id":22091,"name":"amountGiven","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22075,"src":"57931:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22094,"name":"amountGiven","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22075,"src":"57972:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":22095,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"57986:1:68","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"57972:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22092,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22073,"src":"57944:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"id":22093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"57957:14:68","memberName":"previewDeposit","nodeType":"MemberAccess","referencedDeclaration":39740,"src":"57944:27:68","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view external returns (uint256)"}},"id":22097,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"57944:44:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":22098,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"57991:1:68","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"57944:48:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":22100,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"57930:63:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"57889:104:68","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22102,"nodeType":"ExpressionStatement","src":"57889:104:68"}]}},{"expression":{"id":22125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22121,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22082,"src":"58590:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":22122,"name":"_bufferTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28292,"src":"58607:20:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_bytes32_$","typeString":"mapping(contract IERC4626 => bytes32)"}},"id":22124,"indexExpression":{"id":22123,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22073,"src":"58628:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"58607:34:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"58590:51:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":22126,"nodeType":"ExpressionStatement","src":"58590:51:68"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":22127,"name":"_isQueryContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25605,"src":"58919:15:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":22128,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"58919:17:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22135,"nodeType":"IfStatement","src":"58915:109:68","trueBody":{"id":22134,"nodeType":"Block","src":"58938:86:68","statements":[{"expression":{"components":[{"id":22129,"name":"amountInUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22078,"src":"58960:18:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22130,"name":"amountOutWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22080,"src":"58980:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22131,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22082,"src":"58998:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":22132,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"58959:54:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bytes32_$","typeString":"tuple(uint256,uint256,bytes32)"}},"functionReturnParameters":22083,"id":22133,"nodeType":"Return","src":"58952:61:68"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22136,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22082,"src":"59038:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":22137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"59053:17:68","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":6239,"src":"59038:32:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":22138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"59038:34:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":22139,"name":"amountOutWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22080,"src":"59076:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"59038:54:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":22315,"nodeType":"Block","src":"59708:5308:68","statements":[{"assignments":[22173],"declarations":[{"constant":false,"id":22173,"mutability":"mutable","name":"vaultUnderlyingDeltaHint","nameLocation":"60086:24:68","nodeType":"VariableDeclaration","scope":22315,"src":"60078:32:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22172,"name":"uint256","nodeType":"ElementaryTypeName","src":"60078:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22174,"nodeType":"VariableDeclarationStatement","src":"60078:32:68"},{"assignments":[22176],"declarations":[{"constant":false,"id":22176,"mutability":"mutable","name":"vaultWrappedDeltaHint","nameLocation":"60206:21:68","nodeType":"VariableDeclaration","scope":22315,"src":"60198:29:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22175,"name":"uint256","nodeType":"ElementaryTypeName","src":"60198:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22177,"nodeType":"VariableDeclarationStatement","src":"60198:29:68"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},"id":22181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22178,"name":"kind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22067,"src":"60246:4:68","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":22179,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"60254:8:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4735_$","typeString":"type(enum SwapKind)"}},"id":22180,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"60263:8:68","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"60254:17:68","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"src":"60246:25:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":22268,"nodeType":"Block","src":"61609:1854:68","statements":[{"assignments":[22223],"declarations":[{"constant":false,"id":22223,"mutability":"mutable","name":"bufferWrappedImbalance","nameLocation":"62479:22:68","nodeType":"VariableDeclaration","scope":22268,"src":"62472:29:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":22222,"name":"int256","nodeType":"ElementaryTypeName","src":"62472:6:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":22228,"initialValue":{"arguments":[{"id":22226,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22073,"src":"62545:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}],"expression":{"id":22224,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22082,"src":"62504:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":22225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"62519:25:68","memberName":"getBufferWrappedImbalance","nodeType":"MemberAccess","referencedDeclaration":5609,"src":"62504:40:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_contract$_IERC4626_$39833_$returns$_t_int256_$attached_to$_t_bytes32_$","typeString":"function (bytes32,contract IERC4626) view returns (int256)"}},"id":22227,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"62504:54:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"62472:86:68"},{"expression":{"id":22238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22229,"name":"vaultWrappedDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22176,"src":"62576:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":22234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22230,"name":"amountOutWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22080,"src":"62601:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"62618:8:68","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":44982,"src":"62601:25:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":22232,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"62601:27:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":22233,"name":"bufferWrappedImbalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22223,"src":"62631:22:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"62601:52:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":22235,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"62600:54:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":22236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"62655:9:68","memberName":"toUint256","nodeType":"MemberAccess","referencedDeclaration":44146,"src":"62600:64:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_uint256_$attached_to$_t_int256_$","typeString":"function (int256) pure returns (uint256)"}},"id":22237,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"62600:66:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"62576:90:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22239,"nodeType":"ExpressionStatement","src":"62576:90:68"},{"expression":{"id":22245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22240,"name":"vaultUnderlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22173,"src":"62892:24:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":22243,"name":"vaultWrappedDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22176,"src":"62944:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22241,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22073,"src":"62919:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"id":22242,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"62932:11:68","memberName":"previewMint","nodeType":"MemberAccess","referencedDeclaration":39766,"src":"62919:24:68","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view external returns (uint256)"}},"id":22244,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"62919:47:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"62892:74:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22246,"nodeType":"ExpressionStatement","src":"62892:74:68"},{"expression":{"arguments":[{"arguments":[{"id":22252,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22073,"src":"63307:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}],"id":22251,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"63299:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22250,"name":"address","nodeType":"ElementaryTypeName","src":"63299:7:68","typeDescriptions":{}}},"id":22253,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"63299:21:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22254,"name":"vaultUnderlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22173,"src":"63322:24:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22247,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22070,"src":"63270:15:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":22249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"63286:12:68","memberName":"forceApprove","nodeType":"MemberAccess","referencedDeclaration":40369,"src":"63270:28:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$40109_$","typeString":"function (contract IERC20,address,uint256)"}},"id":22255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"63270:77:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22256,"nodeType":"ExpressionStatement","src":"63270:77:68"},{"expression":{"id":22266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22257,"name":"vaultUnderlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22173,"src":"63366:24:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":22260,"name":"vaultWrappedDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22176,"src":"63411:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":22263,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"63442:4:68","typeDescriptions":{"typeIdentifier":"t_contract$_Vault_$22797","typeString":"contract Vault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Vault_$22797","typeString":"contract Vault"}],"id":22262,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"63434:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22261,"name":"address","nodeType":"ElementaryTypeName","src":"63434:7:68","typeDescriptions":{}}},"id":22264,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"63434:13:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22258,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22073,"src":"63393:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"id":22259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"63406:4:68","memberName":"mint","nodeType":"MemberAccess","referencedDeclaration":39776,"src":"63393:17:68","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) external returns (uint256)"}},"id":22265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"63393:55:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"63366:82:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22267,"nodeType":"ExpressionStatement","src":"63366:82:68"}]},"id":22269,"nodeType":"IfStatement","src":"60242:3221:68","trueBody":{"id":22221,"nodeType":"Block","src":"60273:1330:68","statements":[{"assignments":[22183],"declarations":[{"constant":false,"id":22183,"mutability":"mutable","name":"bufferUnderlyingImbalance","nameLocation":"61189:25:68","nodeType":"VariableDeclaration","scope":22221,"src":"61182:32:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":22182,"name":"int256","nodeType":"ElementaryTypeName","src":"61182:6:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":22188,"initialValue":{"arguments":[{"id":22186,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22073,"src":"61261:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}],"expression":{"id":22184,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22082,"src":"61217:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":22185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"61232:28:68","memberName":"getBufferUnderlyingImbalance","nodeType":"MemberAccess","referencedDeclaration":5560,"src":"61217:43:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_contract$_IERC4626_$39833_$returns$_t_int256_$attached_to$_t_bytes32_$","typeString":"function (bytes32,contract IERC4626) view returns (int256)"}},"id":22187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"61217:57:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"61182:92:68"},{"expression":{"id":22198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22189,"name":"vaultUnderlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22173,"src":"61292:24:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":22194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22190,"name":"amountInUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22078,"src":"61320:18:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"61339:8:68","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":44982,"src":"61320:27:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":22192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"61320:29:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":22193,"name":"bufferUnderlyingImbalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22183,"src":"61352:25:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"61320:57:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":22195,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"61319:59:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":22196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"61379:9:68","memberName":"toUint256","nodeType":"MemberAccess","referencedDeclaration":44146,"src":"61319:69:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_uint256_$attached_to$_t_int256_$","typeString":"function (int256) pure returns (uint256)"}},"id":22197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"61319:71:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"61292:98:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22199,"nodeType":"ExpressionStatement","src":"61292:98:68"},{"expression":{"arguments":[{"arguments":[{"id":22205,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22073,"src":"61445:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}],"id":22204,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"61437:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22203,"name":"address","nodeType":"ElementaryTypeName","src":"61437:7:68","typeDescriptions":{}}},"id":22206,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"61437:21:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":22207,"name":"vaultUnderlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22173,"src":"61460:24:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22200,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22070,"src":"61408:15:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":22202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"61424:12:68","memberName":"forceApprove","nodeType":"MemberAccess","referencedDeclaration":40369,"src":"61408:28:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$40109_$","typeString":"function (contract IERC20,address,uint256)"}},"id":22208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"61408:77:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22209,"nodeType":"ExpressionStatement","src":"61408:77:68"},{"expression":{"id":22219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22210,"name":"vaultWrappedDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22176,"src":"61503:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":22213,"name":"vaultUnderlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22173,"src":"61548:24:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":22216,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"61582:4:68","typeDescriptions":{"typeIdentifier":"t_contract$_Vault_$22797","typeString":"contract Vault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Vault_$22797","typeString":"contract Vault"}],"id":22215,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"61574:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22214,"name":"address","nodeType":"ElementaryTypeName","src":"61574:7:68","typeDescriptions":{}}},"id":22217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"61574:13:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22211,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22073,"src":"61527:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"id":22212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"61540:7:68","memberName":"deposit","nodeType":"MemberAccess","referencedDeclaration":39750,"src":"61527:20:68","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) external returns (uint256)"}},"id":22218,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"61527:61:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"61503:85:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22220,"nodeType":"ExpressionStatement","src":"61503:85:68"}]}},{"expression":{"arguments":[{"arguments":[{"id":22275,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22073,"src":"63756:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}],"id":22274,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"63748:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22273,"name":"address","nodeType":"ElementaryTypeName","src":"63748:7:68","typeDescriptions":{}}},"id":22276,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"63748:21:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":22277,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"63771:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"id":22270,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22070,"src":"63719:15:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":22272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"63735:12:68","memberName":"forceApprove","nodeType":"MemberAccess","referencedDeclaration":40369,"src":"63719:28:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$40109_$","typeString":"function (contract IERC20,address,uint256)"}},"id":22278,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"63719:54:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22279,"nodeType":"ExpressionStatement","src":"63719:54:68"},{"expression":{"arguments":[{"id":22281,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22070,"src":"64000:15:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"arguments":[{"id":22283,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22073,"src":"64024:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}],"id":22282,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"64017:6:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":22284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"64017:20:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":22285,"name":"vaultUnderlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22173,"src":"64039:24:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22286,"name":"vaultWrappedDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22176,"src":"64065:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22280,"name":"_settleWrap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22602,"src":"63988:11:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_contract$_IERC20_$40109_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,contract IERC20,uint256,uint256)"}},"id":22287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"63988:99:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22288,"nodeType":"ExpressionStatement","src":"63988:99:68"},{"expression":{"id":22307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22289,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22082,"src":"64684:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22292,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22082,"src":"64753:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":22293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"64768:13:68","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":6222,"src":"64753:28:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":22294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"64753:30:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":22295,"name":"amountInUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22078,"src":"64786:18:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"64753:51:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":22297,"name":"vaultUnderlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22173,"src":"64807:24:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"64753:78:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22299,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22082,"src":"64849:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":22300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"64864:17:68","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":6239,"src":"64849:32:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":22301,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"64849:34:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":22302,"name":"vaultWrappedDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22176,"src":"64886:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"64849:58:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":22304,"name":"amountOutWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22080,"src":"64910:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"64849:77:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22290,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6344,"src":"64701:18:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PackedTokenBalance_$6344_$","typeString":"type(library PackedTokenBalance)"}},"id":22291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"64720:15:68","memberName":"toPackedBalance","nodeType":"MemberAccess","referencedDeclaration":6303,"src":"64701:34:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":22306,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"64701:239:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"64684:256:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":22308,"nodeType":"ExpressionStatement","src":"64684:256:68"},{"expression":{"id":22313,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":22309,"name":"_bufferTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28292,"src":"64954:20:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_bytes32_$","typeString":"mapping(contract IERC4626 => bytes32)"}},"id":22311,"indexExpression":{"id":22310,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22073,"src":"64975:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"64954:34:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22312,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22082,"src":"64991:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"64954:51:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":22314,"nodeType":"ExpressionStatement","src":"64954:51:68"}]},"id":22316,"nodeType":"IfStatement","src":"59034:5982:68","trueBody":{"id":22171,"nodeType":"Block","src":"59094:608:68","statements":[{"assignments":[22142],"declarations":[{"constant":false,"id":22142,"mutability":"mutable","name":"newDerivedBalance","nameLocation":"59219:17:68","nodeType":"VariableDeclaration","scope":22171,"src":"59211:25:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22141,"name":"uint256","nodeType":"ElementaryTypeName","src":"59211:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22143,"nodeType":"VariableDeclarationStatement","src":"59211:25:68"},{"id":22152,"nodeType":"UncheckedBlock","src":"59250:193:68","statements":[{"expression":{"id":22150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22144,"name":"newDerivedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22142,"src":"59355:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22145,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22082,"src":"59375:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":22146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"59390:17:68","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":6239,"src":"59375:32:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":22147,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"59375:34:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":22148,"name":"amountOutWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22080,"src":"59412:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"59375:53:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"59355:73:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22151,"nodeType":"ExpressionStatement","src":"59355:73:68"}]},{"expression":{"id":22163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22153,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22082,"src":"59457:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22156,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22082,"src":"59526:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":22157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"59541:13:68","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":6222,"src":"59526:28:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":22158,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"59526:30:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":22159,"name":"amountInUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22078,"src":"59559:18:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"59526:51:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22161,"name":"newDerivedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22142,"src":"59595:17:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22154,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6344,"src":"59474:18:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PackedTokenBalance_$6344_$","typeString":"type(library PackedTokenBalance)"}},"id":22155,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"59493:15:68","memberName":"toPackedBalance","nodeType":"MemberAccess","referencedDeclaration":6303,"src":"59474:34:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":22162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"59474:152:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"59457:169:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":22164,"nodeType":"ExpressionStatement","src":"59457:169:68"},{"expression":{"id":22169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":22165,"name":"_bufferTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28292,"src":"59640:20:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_bytes32_$","typeString":"mapping(contract IERC4626 => bytes32)"}},"id":22167,"indexExpression":{"id":22166,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22073,"src":"59661:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"59640:34:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22168,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22082,"src":"59677:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"59640:51:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":22170,"nodeType":"ExpressionStatement","src":"59640:51:68"}]}},{"expression":{"arguments":[{"id":22318,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22070,"src":"65036:15:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":22319,"name":"amountInUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22078,"src":"65053:18:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22317,"name":"_takeDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24908,"src":"65026:9:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":22320,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"65026:46:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22321,"nodeType":"ExpressionStatement","src":"65026:46:68"},{"expression":{"arguments":[{"id":22323,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22073,"src":"65096:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":22324,"name":"amountOutWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22080,"src":"65110:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22322,"name":"_supplyCredit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24891,"src":"65082:13:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":22325,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"65082:45:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22326,"nodeType":"ExpressionStatement","src":"65082:45:68"}]},"documentation":{"id":22064,"nodeType":"StructuredDocumentation","src":"56737:391:68","text":" @dev If the buffer has enough liquidity, it uses the internal ERC4626 buffer to perform the wrap\n operation without any external calls. If not, it wraps the assets needed to fulfill the trade + the imbalance\n of assets in the buffer, so that the buffer is rebalanced at the end of the operation.\n Updates `_reservesOf` and token deltas in storage."},"id":22328,"implemented":true,"kind":"function","modifiers":[],"name":"_wrapWithBuffer","nameLocation":"57142:15:68","nodeType":"FunctionDefinition","parameters":{"id":22076,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22067,"mutability":"mutable","name":"kind","nameLocation":"57176:4:68","nodeType":"VariableDeclaration","scope":22328,"src":"57167:13:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},"typeName":{"id":22066,"nodeType":"UserDefinedTypeName","pathNode":{"id":22065,"name":"SwapKind","nameLocations":["57167:8:68"],"nodeType":"IdentifierPath","referencedDeclaration":4735,"src":"57167:8:68"},"referencedDeclaration":4735,"src":"57167:8:68","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":22070,"mutability":"mutable","name":"underlyingToken","nameLocation":"57197:15:68","nodeType":"VariableDeclaration","scope":22328,"src":"57190:22:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":22069,"nodeType":"UserDefinedTypeName","pathNode":{"id":22068,"name":"IERC20","nameLocations":["57190:6:68"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"57190:6:68"},"referencedDeclaration":40109,"src":"57190:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":22073,"mutability":"mutable","name":"wrappedToken","nameLocation":"57231:12:68","nodeType":"VariableDeclaration","scope":22328,"src":"57222:21:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":22072,"nodeType":"UserDefinedTypeName","pathNode":{"id":22071,"name":"IERC4626","nameLocations":["57222:8:68"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"57222:8:68"},"referencedDeclaration":39833,"src":"57222:8:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":22075,"mutability":"mutable","name":"amountGiven","nameLocation":"57261:11:68","nodeType":"VariableDeclaration","scope":22328,"src":"57253:19:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22074,"name":"uint256","nodeType":"ElementaryTypeName","src":"57253:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"57157:121:68"},"returnParameters":{"id":22083,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22078,"mutability":"mutable","name":"amountInUnderlying","nameLocation":"57305:18:68","nodeType":"VariableDeclaration","scope":22328,"src":"57297:26:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22077,"name":"uint256","nodeType":"ElementaryTypeName","src":"57297:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22080,"mutability":"mutable","name":"amountOutWrapped","nameLocation":"57333:16:68","nodeType":"VariableDeclaration","scope":22328,"src":"57325:24:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22079,"name":"uint256","nodeType":"ElementaryTypeName","src":"57325:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22082,"mutability":"mutable","name":"bufferBalances","nameLocation":"57359:14:68","nodeType":"VariableDeclaration","scope":22328,"src":"57351:22:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":22081,"name":"bytes32","nodeType":"ElementaryTypeName","src":"57351:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"57296:78:68"},"scope":22797,"src":"57133:8001:68","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":22563,"nodeType":"Block","src":"65784:6743:68","statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},"id":22352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22349,"name":"kind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22332,"src":"65798:4:68","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":22350,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"65806:8:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4735_$","typeString":"type(enum SwapKind)"}},"id":22351,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"65815:8:68","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"65806:17:68","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"src":"65798:25:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":22384,"nodeType":"Block","src":"66414:585:68","statements":[{"expression":{"id":22382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":22369,"name":"amountInWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22343,"src":"66884:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22370,"name":"amountOutUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22345,"src":"66901:19:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":22371,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"66883:38:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22374,"name":"amountGiven","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22340,"src":"66954:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":22375,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"66968:1:68","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"66954:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22372,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22338,"src":"66925:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"id":22373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"66938:15:68","memberName":"previewWithdraw","nodeType":"MemberAccess","referencedDeclaration":39792,"src":"66925:28:68","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view external returns (uint256)"}},"id":22377,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"66925:45:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":22378,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"66973:1:68","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"66925:49:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22380,"name":"amountGiven","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22340,"src":"66976:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":22381,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"66924:64:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"66883:105:68","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22383,"nodeType":"ExpressionStatement","src":"66883:105:68"}]},"id":22385,"nodeType":"IfStatement","src":"65794:1205:68","trueBody":{"id":22368,"nodeType":"Block","src":"65825:583:68","statements":[{"expression":{"id":22366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":22353,"name":"amountInWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22343,"src":"66295:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22354,"name":"amountOutUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22345,"src":"66312:19:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":22355,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"66294:38:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"id":22356,"name":"amountGiven","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22340,"src":"66336:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22359,"name":"amountGiven","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22340,"src":"66376:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":22360,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"66390:1:68","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"66376:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22357,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22338,"src":"66349:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"id":22358,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"66362:13:68","memberName":"previewRedeem","nodeType":"MemberAccess","referencedDeclaration":39820,"src":"66349:26:68","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view external returns (uint256)"}},"id":22362,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"66349:43:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":22363,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"66395:1:68","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"66349:47:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":22365,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"66335:62:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"66294:103:68","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22367,"nodeType":"ExpressionStatement","src":"66294:103:68"}]}},{"expression":{"id":22390,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22386,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22347,"src":"67009:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":22387,"name":"_bufferTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28292,"src":"67026:20:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_bytes32_$","typeString":"mapping(contract IERC4626 => bytes32)"}},"id":22389,"indexExpression":{"id":22388,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22338,"src":"67047:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"67026:34:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"67009:51:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":22391,"nodeType":"ExpressionStatement","src":"67009:51:68"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":22392,"name":"_isQueryContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25605,"src":"67336:15:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":22393,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"67336:17:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22400,"nodeType":"IfStatement","src":"67332:109:68","trueBody":{"id":22399,"nodeType":"Block","src":"67355:86:68","statements":[{"expression":{"components":[{"id":22394,"name":"amountInWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22343,"src":"67377:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22395,"name":"amountOutUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22345,"src":"67394:19:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22396,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22347,"src":"67415:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":22397,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"67376:54:68","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bytes32_$","typeString":"tuple(uint256,uint256,bytes32)"}},"functionReturnParameters":22348,"id":22398,"nodeType":"Return","src":"67369:61:68"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22401,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22347,"src":"67455:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":22402,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"67470:13:68","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":6222,"src":"67455:28:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":22403,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"67455:30:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":22404,"name":"amountOutUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22345,"src":"67489:19:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"67455:53:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":22551,"nodeType":"Block","src":"68111:4298:68","statements":[{"assignments":[22438],"declarations":[{"constant":false,"id":22438,"mutability":"mutable","name":"vaultUnderlyingDeltaHint","nameLocation":"68490:24:68","nodeType":"VariableDeclaration","scope":22551,"src":"68482:32:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22437,"name":"uint256","nodeType":"ElementaryTypeName","src":"68482:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22439,"nodeType":"VariableDeclarationStatement","src":"68482:32:68"},{"assignments":[22441],"declarations":[{"constant":false,"id":22441,"mutability":"mutable","name":"vaultWrappedDeltaHint","nameLocation":"68610:21:68","nodeType":"VariableDeclaration","scope":22551,"src":"68602:29:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22440,"name":"uint256","nodeType":"ElementaryTypeName","src":"68602:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22442,"nodeType":"VariableDeclarationStatement","src":"68602:29:68"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},"id":22446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22443,"name":"kind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22332,"src":"68650:4:68","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":22444,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"68658:8:68","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4735_$","typeString":"type(enum SwapKind)"}},"id":22445,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"68667:8:68","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"68658:17:68","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"src":"68650:25:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":22514,"nodeType":"Block","src":"69887:1243:68","statements":[{"assignments":[22482],"declarations":[{"constant":false,"id":22482,"mutability":"mutable","name":"bufferUnderlyingImbalance","nameLocation":"70794:25:68","nodeType":"VariableDeclaration","scope":22514,"src":"70787:32:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":22481,"name":"int256","nodeType":"ElementaryTypeName","src":"70787:6:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":22487,"initialValue":{"arguments":[{"id":22485,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22338,"src":"70866:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}],"expression":{"id":22483,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22347,"src":"70822:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":22484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"70837:28:68","memberName":"getBufferUnderlyingImbalance","nodeType":"MemberAccess","referencedDeclaration":5560,"src":"70822:43:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_contract$_IERC4626_$39833_$returns$_t_int256_$attached_to$_t_bytes32_$","typeString":"function (bytes32,contract IERC4626) view returns (int256)"}},"id":22486,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"70822:57:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"70787:92:68"},{"expression":{"id":22497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22488,"name":"vaultUnderlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22438,"src":"70897:24:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":22493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22489,"name":"amountOutUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22345,"src":"70925:19:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"70945:8:68","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":44982,"src":"70925:28:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":22491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"70925:30:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":22492,"name":"bufferUnderlyingImbalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22482,"src":"70958:25:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"70925:58:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":22494,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"70924:60:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":22495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"70985:9:68","memberName":"toUint256","nodeType":"MemberAccess","referencedDeclaration":44146,"src":"70924:70:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_uint256_$attached_to$_t_int256_$","typeString":"function (int256) pure returns (uint256)"}},"id":22496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"70924:72:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"70897:99:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22498,"nodeType":"ExpressionStatement","src":"70897:99:68"},{"expression":{"id":22512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22499,"name":"vaultWrappedDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22441,"src":"71014:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":22502,"name":"vaultUnderlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22438,"src":"71060:24:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":22505,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"71094:4:68","typeDescriptions":{"typeIdentifier":"t_contract$_Vault_$22797","typeString":"contract Vault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Vault_$22797","typeString":"contract Vault"}],"id":22504,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"71086:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22503,"name":"address","nodeType":"ElementaryTypeName","src":"71086:7:68","typeDescriptions":{}}},"id":22506,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"71086:13:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":22509,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"71109:4:68","typeDescriptions":{"typeIdentifier":"t_contract$_Vault_$22797","typeString":"contract Vault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Vault_$22797","typeString":"contract Vault"}],"id":22508,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"71101:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22507,"name":"address","nodeType":"ElementaryTypeName","src":"71101:7:68","typeDescriptions":{}}},"id":22510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"71101:13:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22500,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22338,"src":"71038:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"id":22501,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"71051:8:68","memberName":"withdraw","nodeType":"MemberAccess","referencedDeclaration":39804,"src":"71038:21:68","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address,address) external returns (uint256)"}},"id":22511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"71038:77:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"71014:101:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22513,"nodeType":"ExpressionStatement","src":"71014:101:68"}]},"id":22515,"nodeType":"IfStatement","src":"68646:2484:68","trueBody":{"id":22480,"nodeType":"Block","src":"68677:1204:68","statements":[{"assignments":[22448],"declarations":[{"constant":false,"id":22448,"mutability":"mutable","name":"bufferWrappedImbalance","nameLocation":"69563:22:68","nodeType":"VariableDeclaration","scope":22480,"src":"69556:29:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":22447,"name":"int256","nodeType":"ElementaryTypeName","src":"69556:6:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":22453,"initialValue":{"arguments":[{"id":22451,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22338,"src":"69629:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}],"expression":{"id":22449,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22347,"src":"69588:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":22450,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"69603:25:68","memberName":"getBufferWrappedImbalance","nodeType":"MemberAccess","referencedDeclaration":5609,"src":"69588:40:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_contract$_IERC4626_$39833_$returns$_t_int256_$attached_to$_t_bytes32_$","typeString":"function (bytes32,contract IERC4626) view returns (int256)"}},"id":22452,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"69588:54:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"69556:86:68"},{"expression":{"id":22463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22454,"name":"vaultWrappedDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22441,"src":"69660:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":22459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22455,"name":"amountInWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22343,"src":"69685:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"69701:8:68","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":44982,"src":"69685:24:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":22457,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"69685:26:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":22458,"name":"bufferWrappedImbalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22448,"src":"69714:22:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"69685:51:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":22460,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"69684:53:68","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":22461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"69738:9:68","memberName":"toUint256","nodeType":"MemberAccess","referencedDeclaration":44146,"src":"69684:63:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_uint256_$attached_to$_t_int256_$","typeString":"function (int256) pure returns (uint256)"}},"id":22462,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"69684:65:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"69660:89:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22464,"nodeType":"ExpressionStatement","src":"69660:89:68"},{"expression":{"id":22478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22465,"name":"vaultUnderlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22438,"src":"69767:24:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":22468,"name":"vaultWrappedDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22441,"src":"69814:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":22471,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"69845:4:68","typeDescriptions":{"typeIdentifier":"t_contract$_Vault_$22797","typeString":"contract Vault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Vault_$22797","typeString":"contract Vault"}],"id":22470,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"69837:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22469,"name":"address","nodeType":"ElementaryTypeName","src":"69837:7:68","typeDescriptions":{}}},"id":22472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"69837:13:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":22475,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"69860:4:68","typeDescriptions":{"typeIdentifier":"t_contract$_Vault_$22797","typeString":"contract Vault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Vault_$22797","typeString":"contract Vault"}],"id":22474,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"69852:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22473,"name":"address","nodeType":"ElementaryTypeName","src":"69852:7:68","typeDescriptions":{}}},"id":22476,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"69852:13:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22466,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22338,"src":"69794:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"id":22467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"69807:6:68","memberName":"redeem","nodeType":"MemberAccess","referencedDeclaration":39832,"src":"69794:19:68","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address,address) external returns (uint256)"}},"id":22477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"69794:72:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"69767:99:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22479,"nodeType":"ExpressionStatement","src":"69767:99:68"}]}},{"expression":{"arguments":[{"id":22517,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22335,"src":"71358:15:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"arguments":[{"id":22519,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22338,"src":"71382:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}],"id":22518,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"71375:6:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":22520,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"71375:20:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":22521,"name":"vaultUnderlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22438,"src":"71397:24:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22522,"name":"vaultWrappedDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22441,"src":"71423:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22516,"name":"_settleUnwrap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22640,"src":"71344:13:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_contract$_IERC20_$40109_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,contract IERC20,uint256,uint256)"}},"id":22523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"71344:101:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22524,"nodeType":"ExpressionStatement","src":"71344:101:68"},{"expression":{"id":22543,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22525,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22347,"src":"72077:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22528,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22347,"src":"72146:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":22529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"72161:13:68","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":6222,"src":"72146:28:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":22530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"72146:30:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":22531,"name":"vaultUnderlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22438,"src":"72179:24:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"72146:57:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":22533,"name":"amountOutUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22345,"src":"72206:19:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"72146:79:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22535,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22347,"src":"72243:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":22536,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"72258:17:68","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":6239,"src":"72243:32:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":22537,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"72243:34:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":22538,"name":"amountInWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22343,"src":"72280:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"72243:52:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":22540,"name":"vaultWrappedDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22441,"src":"72298:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"72243:76:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22526,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6344,"src":"72094:18:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PackedTokenBalance_$6344_$","typeString":"type(library PackedTokenBalance)"}},"id":22527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"72113:15:68","memberName":"toPackedBalance","nodeType":"MemberAccess","referencedDeclaration":6303,"src":"72094:34:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":22542,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"72094:239:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"72077:256:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":22544,"nodeType":"ExpressionStatement","src":"72077:256:68"},{"expression":{"id":22549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":22545,"name":"_bufferTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28292,"src":"72347:20:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_bytes32_$","typeString":"mapping(contract IERC4626 => bytes32)"}},"id":22547,"indexExpression":{"id":22546,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22338,"src":"72368:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"72347:34:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22548,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22347,"src":"72384:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"72347:51:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":22550,"nodeType":"ExpressionStatement","src":"72347:51:68"}]},"id":22552,"nodeType":"IfStatement","src":"67451:4958:68","trueBody":{"id":22436,"nodeType":"Block","src":"67510:595:68","statements":[{"assignments":[22407],"declarations":[{"constant":false,"id":22407,"mutability":"mutable","name":"newRawBalance","nameLocation":"67635:13:68","nodeType":"VariableDeclaration","scope":22436,"src":"67627:21:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22406,"name":"uint256","nodeType":"ElementaryTypeName","src":"67627:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22408,"nodeType":"VariableDeclarationStatement","src":"67627:21:68"},{"id":22417,"nodeType":"UncheckedBlock","src":"67662:188:68","statements":[{"expression":{"id":22415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22409,"name":"newRawBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22407,"src":"67767:13:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22410,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22347,"src":"67783:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":22411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"67798:13:68","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":6222,"src":"67783:28:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":22412,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"67783:30:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":22413,"name":"amountOutUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22345,"src":"67816:19:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"67783:52:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"67767:68:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22416,"nodeType":"ExpressionStatement","src":"67767:68:68"}]},{"expression":{"id":22428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22418,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22347,"src":"67863:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":22421,"name":"newRawBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22407,"src":"67932:13:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22422,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22347,"src":"67963:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":22423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"67978:17:68","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":6239,"src":"67963:32:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":22424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"67963:34:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":22425,"name":"amountInWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22343,"src":"68000:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"67963:52:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":22419,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6344,"src":"67880:18:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PackedTokenBalance_$6344_$","typeString":"type(library PackedTokenBalance)"}},"id":22420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"67899:15:68","memberName":"toPackedBalance","nodeType":"MemberAccess","referencedDeclaration":6303,"src":"67880:34:68","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":22427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"67880:149:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"67863:166:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":22429,"nodeType":"ExpressionStatement","src":"67863:166:68"},{"expression":{"id":22434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":22430,"name":"_bufferTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28292,"src":"68043:20:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_bytes32_$","typeString":"mapping(contract IERC4626 => bytes32)"}},"id":22432,"indexExpression":{"id":22431,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22338,"src":"68064:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"68043:34:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22433,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22347,"src":"68080:14:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"68043:51:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":22435,"nodeType":"ExpressionStatement","src":"68043:51:68"}]}},{"expression":{"arguments":[{"id":22554,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22338,"src":"72429:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":22555,"name":"amountInWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22343,"src":"72443:15:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22553,"name":"_takeDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24908,"src":"72419:9:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":22556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"72419:40:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22557,"nodeType":"ExpressionStatement","src":"72419:40:68"},{"expression":{"arguments":[{"id":22559,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22335,"src":"72483:15:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":22560,"name":"amountOutUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22345,"src":"72500:19:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22558,"name":"_supplyCredit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24891,"src":"72469:13:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":22561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"72469:51:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22562,"nodeType":"ExpressionStatement","src":"72469:51:68"}]},"documentation":{"id":22329,"nodeType":"StructuredDocumentation","src":"65140:395:68","text":" @dev If the buffer has enough liquidity, it uses the internal ERC4626 buffer to perform the unwrap\n operation without any external calls. If not, it unwraps the assets needed to fulfill the trade + the imbalance\n of assets in the buffer, so that the buffer is rebalanced at the end of the operation.\n Updates `_reservesOf` and token deltas in storage."},"id":22564,"implemented":true,"kind":"function","modifiers":[],"name":"_unwrapWithBuffer","nameLocation":"65549:17:68","nodeType":"FunctionDefinition","parameters":{"id":22341,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22332,"mutability":"mutable","name":"kind","nameLocation":"65585:4:68","nodeType":"VariableDeclaration","scope":22564,"src":"65576:13:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},"typeName":{"id":22331,"nodeType":"UserDefinedTypeName","pathNode":{"id":22330,"name":"SwapKind","nameLocations":["65576:8:68"],"nodeType":"IdentifierPath","referencedDeclaration":4735,"src":"65576:8:68"},"referencedDeclaration":4735,"src":"65576:8:68","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"visibility":"internal"},{"constant":false,"id":22335,"mutability":"mutable","name":"underlyingToken","nameLocation":"65606:15:68","nodeType":"VariableDeclaration","scope":22564,"src":"65599:22:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":22334,"nodeType":"UserDefinedTypeName","pathNode":{"id":22333,"name":"IERC20","nameLocations":["65599:6:68"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"65599:6:68"},"referencedDeclaration":40109,"src":"65599:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":22338,"mutability":"mutable","name":"wrappedToken","nameLocation":"65640:12:68","nodeType":"VariableDeclaration","scope":22564,"src":"65631:21:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":22337,"nodeType":"UserDefinedTypeName","pathNode":{"id":22336,"name":"IERC4626","nameLocations":["65631:8:68"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"65631:8:68"},"referencedDeclaration":39833,"src":"65631:8:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":22340,"mutability":"mutable","name":"amountGiven","nameLocation":"65670:11:68","nodeType":"VariableDeclaration","scope":22564,"src":"65662:19:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22339,"name":"uint256","nodeType":"ElementaryTypeName","src":"65662:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"65566:121:68"},"returnParameters":{"id":22348,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22343,"mutability":"mutable","name":"amountInWrapped","nameLocation":"65714:15:68","nodeType":"VariableDeclaration","scope":22564,"src":"65706:23:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22342,"name":"uint256","nodeType":"ElementaryTypeName","src":"65706:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22345,"mutability":"mutable","name":"amountOutUnderlying","nameLocation":"65739:19:68","nodeType":"VariableDeclaration","scope":22564,"src":"65731:27:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22344,"name":"uint256","nodeType":"ElementaryTypeName","src":"65731:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22347,"mutability":"mutable","name":"bufferBalances","nameLocation":"65768:14:68","nodeType":"VariableDeclaration","scope":22564,"src":"65760:22:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":22346,"name":"bytes32","nodeType":"ElementaryTypeName","src":"65760:7:68","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"65705:78:68"},"scope":22797,"src":"65540:6987:68","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":22601,"nodeType":"Block","src":"73452:702:68","statements":[{"assignments":[22579],"declarations":[{"constant":false,"id":22579,"mutability":"mutable","name":"expectedUnderlyingReservesAfter","nameLocation":"73667:31:68","nodeType":"VariableDeclaration","scope":22601,"src":"73659:39:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22578,"name":"uint256","nodeType":"ElementaryTypeName","src":"73659:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22585,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":22580,"name":"_reservesOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28278,"src":"73701:11:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":22582,"indexExpression":{"id":22581,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22568,"src":"73713:15:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"73701:28:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":22583,"name":"underlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22573,"src":"73732:19:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"73701:50:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"73659:92:68"},{"assignments":[22587],"declarations":[{"constant":false,"id":22587,"mutability":"mutable","name":"expectedWrappedReservesAfter","nameLocation":"73950:28:68","nodeType":"VariableDeclaration","scope":22601,"src":"73942:36:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22586,"name":"uint256","nodeType":"ElementaryTypeName","src":"73942:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22593,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":22588,"name":"_reservesOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28278,"src":"73981:11:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":22590,"indexExpression":{"id":22589,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22571,"src":"73993:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"73981:25:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":22591,"name":"wrappedDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22575,"src":"74009:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"73981:44:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"73942:83:68"},{"expression":{"arguments":[{"id":22595,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22568,"src":"74054:15:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":22596,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22571,"src":"74071:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":22597,"name":"expectedUnderlyingReservesAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22579,"src":"74085:31:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22598,"name":"expectedWrappedReservesAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22587,"src":"74118:28:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22594,"name":"_settleWrapUnwrap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22719,"src":"74036:17:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_contract$_IERC20_$40109_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,contract IERC20,uint256,uint256)"}},"id":22599,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"74036:111:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22600,"nodeType":"ExpressionStatement","src":"74036:111:68"}]},"documentation":{"id":22565,"nodeType":"StructuredDocumentation","src":"72533:746:68","text":" @notice Updates the reserves of the Vault after an ERC4626 wrap (deposit/mint) operation.\n @dev If there are extra tokens in the Vault balances, these will be added to the reserves (which, in practice,\n is equal to discarding such tokens). This approach avoids DoS attacks, when a frontrunner leaves vault balances\n and reserves out of sync before a transaction starts.\n @param underlyingToken Underlying token of the ERC4626 wrapped token\n @param wrappedToken ERC4626 wrapped token\n @param underlyingDeltaHint Amount of underlying tokens the wrapper should have removed from the Vault\n @param wrappedDeltaHint Amount of wrapped tokens the wrapper should have added to the Vault"},"id":22602,"implemented":true,"kind":"function","modifiers":[],"name":"_settleWrap","nameLocation":"73293:11:68","nodeType":"FunctionDefinition","parameters":{"id":22576,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22568,"mutability":"mutable","name":"underlyingToken","nameLocation":"73321:15:68","nodeType":"VariableDeclaration","scope":22602,"src":"73314:22:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":22567,"nodeType":"UserDefinedTypeName","pathNode":{"id":22566,"name":"IERC20","nameLocations":["73314:6:68"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"73314:6:68"},"referencedDeclaration":40109,"src":"73314:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":22571,"mutability":"mutable","name":"wrappedToken","nameLocation":"73353:12:68","nodeType":"VariableDeclaration","scope":22602,"src":"73346:19:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":22570,"nodeType":"UserDefinedTypeName","pathNode":{"id":22569,"name":"IERC20","nameLocations":["73346:6:68"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"73346:6:68"},"referencedDeclaration":40109,"src":"73346:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":22573,"mutability":"mutable","name":"underlyingDeltaHint","nameLocation":"73383:19:68","nodeType":"VariableDeclaration","scope":22602,"src":"73375:27:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22572,"name":"uint256","nodeType":"ElementaryTypeName","src":"73375:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22575,"mutability":"mutable","name":"wrappedDeltaHint","nameLocation":"73420:16:68","nodeType":"VariableDeclaration","scope":22602,"src":"73412:24:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22574,"name":"uint256","nodeType":"ElementaryTypeName","src":"73412:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"73304:138:68"},"returnParameters":{"id":22577,"nodeType":"ParameterList","parameters":[],"src":"73452:0:68"},"scope":22797,"src":"73284:870:68","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":22639,"nodeType":"Block","src":"75059:708:68","statements":[{"assignments":[22617],"declarations":[{"constant":false,"id":22617,"mutability":"mutable","name":"expectedUnderlyingReservesAfter","nameLocation":"75272:31:68","nodeType":"VariableDeclaration","scope":22639,"src":"75264:39:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22616,"name":"uint256","nodeType":"ElementaryTypeName","src":"75264:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22623,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":22618,"name":"_reservesOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28278,"src":"75306:11:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":22620,"indexExpression":{"id":22619,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22606,"src":"75318:15:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"75306:28:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":22621,"name":"underlyingDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22611,"src":"75337:19:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"75306:50:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"75264:92:68"},{"assignments":[22625],"declarations":[{"constant":false,"id":22625,"mutability":"mutable","name":"expectedWrappedReservesAfter","nameLocation":"75563:28:68","nodeType":"VariableDeclaration","scope":22639,"src":"75555:36:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22624,"name":"uint256","nodeType":"ElementaryTypeName","src":"75555:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22631,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":22626,"name":"_reservesOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28278,"src":"75594:11:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":22628,"indexExpression":{"id":22627,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22609,"src":"75606:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"75594:25:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":22629,"name":"wrappedDeltaHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22613,"src":"75622:16:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"75594:44:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"75555:83:68"},{"expression":{"arguments":[{"id":22633,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22606,"src":"75667:15:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":22634,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22609,"src":"75684:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":22635,"name":"expectedUnderlyingReservesAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22617,"src":"75698:31:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22636,"name":"expectedWrappedReservesAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22625,"src":"75731:28:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22632,"name":"_settleWrapUnwrap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22719,"src":"75649:17:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_contract$_IERC20_$40109_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,contract IERC20,uint256,uint256)"}},"id":22637,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"75649:111:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22638,"nodeType":"ExpressionStatement","src":"75649:111:68"}]},"documentation":{"id":22603,"nodeType":"StructuredDocumentation","src":"74160:724:68","text":" @notice Updates the reserves of the Vault after an ERC4626 unwrap (withdraw/redeem) operation.\n @dev If there are extra tokens in the Vault balances, these will be added to the reserves (which, in practice,\n is equal to discarding such tokens). This approach avoids DoS attacks, when a frontrunner leaves vault balances\n and state of reserves out of sync before a transaction starts.\n @param underlyingToken Underlying of ERC4626 wrapped token\n @param wrappedToken ERC4626 wrapped token\n @param underlyingDeltaHint Amount of underlying tokens supposedly added to the Vault\n @param wrappedDeltaHint Amount of wrapped tokens supposedly removed from the Vault"},"id":22640,"implemented":true,"kind":"function","modifiers":[],"name":"_settleUnwrap","nameLocation":"74898:13:68","nodeType":"FunctionDefinition","parameters":{"id":22614,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22606,"mutability":"mutable","name":"underlyingToken","nameLocation":"74928:15:68","nodeType":"VariableDeclaration","scope":22640,"src":"74921:22:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":22605,"nodeType":"UserDefinedTypeName","pathNode":{"id":22604,"name":"IERC20","nameLocations":["74921:6:68"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"74921:6:68"},"referencedDeclaration":40109,"src":"74921:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":22609,"mutability":"mutable","name":"wrappedToken","nameLocation":"74960:12:68","nodeType":"VariableDeclaration","scope":22640,"src":"74953:19:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":22608,"nodeType":"UserDefinedTypeName","pathNode":{"id":22607,"name":"IERC20","nameLocations":["74953:6:68"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"74953:6:68"},"referencedDeclaration":40109,"src":"74953:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":22611,"mutability":"mutable","name":"underlyingDeltaHint","nameLocation":"74990:19:68","nodeType":"VariableDeclaration","scope":22640,"src":"74982:27:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22610,"name":"uint256","nodeType":"ElementaryTypeName","src":"74982:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22613,"mutability":"mutable","name":"wrappedDeltaHint","nameLocation":"75027:16:68","nodeType":"VariableDeclaration","scope":22640,"src":"75019:24:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22612,"name":"uint256","nodeType":"ElementaryTypeName","src":"75019:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"74911:138:68"},"returnParameters":{"id":22615,"nodeType":"ParameterList","parameters":[],"src":"75059:0:68"},"scope":22797,"src":"74889:878:68","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":22718,"nodeType":"Block","src":"76873:2497:68","statements":[{"assignments":[22655],"declarations":[{"constant":false,"id":22655,"mutability":"mutable","name":"underlyingBalancesAfter","nameLocation":"76942:23:68","nodeType":"VariableDeclaration","scope":22718,"src":"76934:31:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22654,"name":"uint256","nodeType":"ElementaryTypeName","src":"76934:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22663,"initialValue":{"arguments":[{"arguments":[{"id":22660,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"77002:4:68","typeDescriptions":{"typeIdentifier":"t_contract$_Vault_$22797","typeString":"contract Vault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Vault_$22797","typeString":"contract Vault"}],"id":22659,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"76994:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22658,"name":"address","nodeType":"ElementaryTypeName","src":"76994:7:68","typeDescriptions":{}}},"id":22661,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"76994:13:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22656,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22644,"src":"76968:15:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":22657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"76984:9:68","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":40066,"src":"76968:25:68","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":22662,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"76968:40:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"76934:74:68"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22664,"name":"underlyingBalancesAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22655,"src":"77022:23:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":22665,"name":"expectedUnderlyingReservesAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22649,"src":"77048:31:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"77022:57:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22679,"nodeType":"IfStatement","src":"77018:892:68","trueBody":{"id":22678,"nodeType":"Block","src":"77081:829:68","statements":[{"errorCall":{"arguments":[{"arguments":[{"arguments":[{"id":22671,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22647,"src":"77781:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":22670,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"77773:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22669,"name":"address","nodeType":"ElementaryTypeName","src":"77773:7:68","typeDescriptions":{}}},"id":22672,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"77773:21:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22668,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39833,"src":"77764:8:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$39833_$","typeString":"type(contract IERC4626)"}},"id":22673,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"77764:31:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":22674,"name":"expectedUnderlyingReservesAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22649,"src":"77813:31:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22675,"name":"underlyingBalancesAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22655,"src":"77862:23:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22667,"name":"NotEnoughUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3729,"src":"77727:19:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (contract IERC4626,uint256,uint256) pure returns (error)"}},"id":22676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"77727:172:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22677,"nodeType":"RevertStatement","src":"77720:179:68"}]}},{"expression":{"id":22684,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":22680,"name":"_reservesOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28278,"src":"78083:11:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":22682,"indexExpression":{"id":22681,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22644,"src":"78095:15:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"78083:28:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22683,"name":"underlyingBalancesAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22655,"src":"78114:23:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"78083:54:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22685,"nodeType":"ExpressionStatement","src":"78083:54:68"},{"assignments":[22687],"declarations":[{"constant":false,"id":22687,"mutability":"mutable","name":"wrappedBalancesAfter","nameLocation":"78204:20:68","nodeType":"VariableDeclaration","scope":22718,"src":"78196:28:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22686,"name":"uint256","nodeType":"ElementaryTypeName","src":"78196:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":22695,"initialValue":{"arguments":[{"arguments":[{"id":22692,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"78258:4:68","typeDescriptions":{"typeIdentifier":"t_contract$_Vault_$22797","typeString":"contract Vault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Vault_$22797","typeString":"contract Vault"}],"id":22691,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"78250:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22690,"name":"address","nodeType":"ElementaryTypeName","src":"78250:7:68","typeDescriptions":{}}},"id":22693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"78250:13:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":22688,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22647,"src":"78227:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":22689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"78240:9:68","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":40066,"src":"78227:22:68","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":22694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"78227:37:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"78196:68:68"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22696,"name":"wrappedBalancesAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22687,"src":"78278:20:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":22697,"name":"expectedWrappedReservesAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22651,"src":"78301:28:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"78278:51:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22711,"nodeType":"IfStatement","src":"78274:866:68","trueBody":{"id":22710,"nodeType":"Block","src":"78331:809:68","statements":[{"errorCall":{"arguments":[{"arguments":[{"arguments":[{"id":22703,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22647,"src":"79017:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":22702,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"79009:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22701,"name":"address","nodeType":"ElementaryTypeName","src":"79009:7:68","typeDescriptions":{}}},"id":22704,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"79009:21:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22700,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39833,"src":"79000:8:68","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$39833_$","typeString":"type(contract IERC4626)"}},"id":22705,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"79000:31:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":22706,"name":"expectedWrappedReservesAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22651,"src":"79049:28:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":22707,"name":"wrappedBalancesAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22687,"src":"79095:20:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22699,"name":"NotEnoughWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3739,"src":"78966:16:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (contract IERC4626,uint256,uint256) pure returns (error)"}},"id":22708,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"78966:163:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22709,"nodeType":"RevertStatement","src":"78959:170:68"}]}},{"expression":{"id":22716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":22712,"name":"_reservesOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28278,"src":"79315:11:68","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":22714,"indexExpression":{"id":22713,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22647,"src":"79327:12:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"79315:25:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22715,"name":"wrappedBalancesAfter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22687,"src":"79343:20:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"79315:48:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22717,"nodeType":"ExpressionStatement","src":"79315:48:68"}]},"documentation":{"id":22641,"nodeType":"StructuredDocumentation","src":"75773:897:68","text":" @notice Updates the reserves of the Vault after an ERC4626 wrap/unwrap operation.\n @dev If reserves of underlying or wrapped tokens are bigger than expected, the extra tokens will be discarded,\n which avoids a possible DoS. However, if reserves are smaller than expected, it means that the wrapper didn't\n respect the amount given and/or the amount calculated (informed by the wrapper operation and stored as a hint\n variable), so the token is not ERC4626 compliant and the function should be reverted.\n @param underlyingToken Underlying of ERC4626 wrapped token\n @param wrappedToken ERC4626 wrapped token\n @param expectedUnderlyingReservesAfter Vault's expected reserves of underlying after the wrap/unwrap operation\n @param expectedWrappedReservesAfter Vault's expected reserves of wrapped after the wrap/unwrap operation"},"id":22719,"implemented":true,"kind":"function","modifiers":[],"name":"_settleWrapUnwrap","nameLocation":"76684:17:68","nodeType":"FunctionDefinition","parameters":{"id":22652,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22644,"mutability":"mutable","name":"underlyingToken","nameLocation":"76718:15:68","nodeType":"VariableDeclaration","scope":22719,"src":"76711:22:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":22643,"nodeType":"UserDefinedTypeName","pathNode":{"id":22642,"name":"IERC20","nameLocations":["76711:6:68"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"76711:6:68"},"referencedDeclaration":40109,"src":"76711:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":22647,"mutability":"mutable","name":"wrappedToken","nameLocation":"76750:12:68","nodeType":"VariableDeclaration","scope":22719,"src":"76743:19:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":22646,"nodeType":"UserDefinedTypeName","pathNode":{"id":22645,"name":"IERC20","nameLocations":["76743:6:68"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"76743:6:68"},"referencedDeclaration":40109,"src":"76743:6:68","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":22649,"mutability":"mutable","name":"expectedUnderlyingReservesAfter","nameLocation":"76780:31:68","nodeType":"VariableDeclaration","scope":22719,"src":"76772:39:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22648,"name":"uint256","nodeType":"ElementaryTypeName","src":"76772:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22651,"mutability":"mutable","name":"expectedWrappedReservesAfter","nameLocation":"76829:28:68","nodeType":"VariableDeclaration","scope":22719,"src":"76821:36:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22650,"name":"uint256","nodeType":"ElementaryTypeName","src":"76821:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"76701:162:68"},"returnParameters":{"id":22653,"nodeType":"ParameterList","parameters":[],"src":"76873:0:68"},"scope":22797,"src":"76675:2695:68","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":22733,"nodeType":"Block","src":"79726:98:68","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22724,"name":"tradeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22721,"src":"79740:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":22725,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"79755:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"79740:16:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22732,"nodeType":"IfStatement","src":"79736:82:68","trueBody":{"id":22731,"nodeType":"Block","src":"79758:60:68","statements":[{"expression":{"arguments":[{"id":22728,"name":"tradeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22721,"src":"79795:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22727,"name":"_ensureValidSwapAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22748,"src":"79772:22:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":22729,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"79772:35:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22730,"nodeType":"ExpressionStatement","src":"79772:35:68"}]}}]},"id":22734,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureValidTradeAmount","nameLocation":"79667:23:68","nodeType":"FunctionDefinition","parameters":{"id":22722,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22721,"mutability":"mutable","name":"tradeAmount","nameLocation":"79699:11:68","nodeType":"VariableDeclaration","scope":22734,"src":"79691:19:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22720,"name":"uint256","nodeType":"ElementaryTypeName","src":"79691:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"79690:21:68"},"returnParameters":{"id":22723,"nodeType":"ParameterList","parameters":[],"src":"79726:0:68"},"scope":22797,"src":"79658:166:68","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":22747,"nodeType":"Block","src":"80646:110:68","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22739,"name":"tradeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22736,"src":"80660:11:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":22740,"name":"_MINIMUM_TRADE_AMOUNT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28194,"src":"80674:21:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"80660:35:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22746,"nodeType":"IfStatement","src":"80656:94:68","trueBody":{"id":22745,"nodeType":"Block","src":"80697:53:68","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22742,"name":"TradeAmountTooSmall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3535,"src":"80718:19:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"80718:21:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22744,"nodeType":"RevertStatement","src":"80711:28:68"}]}}]},"id":22748,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureValidSwapAmount","nameLocation":"80588:22:68","nodeType":"FunctionDefinition","parameters":{"id":22737,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22736,"mutability":"mutable","name":"tradeAmount","nameLocation":"80619:11:68","nodeType":"VariableDeclaration","scope":22748,"src":"80611:19:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22735,"name":"uint256","nodeType":"ElementaryTypeName","src":"80611:7:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"80610:21:68"},"returnParameters":{"id":22738,"nodeType":"ParameterList","parameters":[],"src":"80646:0:68"},"scope":22797,"src":"80579:177:68","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[4561],"body":{"id":22757,"nodeType":"Block","src":"81076:41:68","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":22754,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[22771],"referencedDeclaration":22771,"src":"81093:15:68","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":22755,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"81093:17:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":22753,"id":22756,"nodeType":"Return","src":"81086:24:68"}]},"documentation":{"id":22749,"nodeType":"StructuredDocumentation","src":"80984:26:68","text":"@inheritdoc IVaultMain"},"functionSelector":"b9a8effa","id":22758,"implemented":true,"kind":"function","modifiers":[],"name":"getVaultExtension","nameLocation":"81024:17:68","nodeType":"FunctionDefinition","parameters":{"id":22750,"nodeType":"ParameterList","parameters":[],"src":"81041:2:68"},"returnParameters":{"id":22753,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22752,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22758,"src":"81067:7:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22751,"name":"address","nodeType":"ElementaryTypeName","src":"81067:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"81066:9:68"},"scope":22797,"src":"81015:102:68","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[40012],"body":{"id":22770,"nodeType":"Block","src":"81323:48:68","statements":[{"expression":{"arguments":[{"id":22767,"name":"_vaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19501,"src":"81348:15:68","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$4426","typeString":"contract IVaultExtension"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVaultExtension_$4426","typeString":"contract IVaultExtension"}],"id":22766,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"81340:7:68","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22765,"name":"address","nodeType":"ElementaryTypeName","src":"81340:7:68","typeDescriptions":{}}},"id":22768,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"81340:24:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":22764,"id":22769,"nodeType":"Return","src":"81333:31:68"}]},"documentation":{"id":22759,"nodeType":"StructuredDocumentation","src":"81123:127:68","text":" @inheritdoc Proxy\n @dev Returns the VaultExtension contract, to which fallback requests are forwarded."},"id":22771,"implemented":true,"kind":"function","modifiers":[],"name":"_implementation","nameLocation":"81264:15:68","nodeType":"FunctionDefinition","overrides":{"id":22761,"nodeType":"OverrideSpecifier","overrides":[],"src":"81296:8:68"},"parameters":{"id":22760,"nodeType":"ParameterList","parameters":[],"src":"81279:2:68"},"returnParameters":{"id":22764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22763,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":22771,"src":"81314:7:68","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":22762,"name":"address","nodeType":"ElementaryTypeName","src":"81314:7:68","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"81313:9:68"},"scope":22797,"src":"81255:116:68","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":22777,"nodeType":"Block","src":"81629:42:68","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22774,"name":"CannotReceiveEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3752,"src":"81646:16:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"81646:18:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22776,"nodeType":"RevertStatement","src":"81639:25:68"}]},"id":22778,"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":22772,"nodeType":"ParameterList","parameters":[],"src":"81609:2:68"},"returnParameters":{"id":22773,"nodeType":"ParameterList","parameters":[],"src":"81629:0:68"},"scope":22797,"src":"81602:69:68","stateMutability":"payable","virtual":false,"visibility":"external"},{"baseFunctions":[40030],"body":{"id":22795,"nodeType":"Block","src":"81989:107:68","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22783,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"82003:3:68","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"82007:5:68","memberName":"value","nodeType":"MemberAccess","src":"82003:9:68","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":22785,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"82015:1:68","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"82003:13:68","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22791,"nodeType":"IfStatement","src":"81999:69:68","trueBody":{"id":22790,"nodeType":"Block","src":"82018:50:68","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22787,"name":"CannotReceiveEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3752,"src":"82039:16:68","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22788,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"82039:18:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22789,"nodeType":"RevertStatement","src":"82032:25:68"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":22792,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40022,"src":"82078:9:68","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":22793,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"82078:11:68","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22794,"nodeType":"ExpressionStatement","src":"82078:11:68"}]},"documentation":{"id":22779,"nodeType":"StructuredDocumentation","src":"81721:226:68","text":" @inheritdoc Proxy\n @dev Override proxy implementation of `fallback` to disallow incoming ETH transfers.\n This function actually returns whatever the VaultExtension does when handling the request."},"id":22796,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","overrides":{"id":22781,"nodeType":"OverrideSpecifier","overrides":[],"src":"81980:8:68"},"parameters":{"id":22780,"nodeType":"ParameterList","parameters":[],"src":"81960:2:68"},"returnParameters":{"id":22782,"nodeType":"ParameterList","parameters":[],"src":"81989:0:68"},"scope":22797,"src":"81952:144:68","stateMutability":"payable","virtual":false,"visibility":"external"}],"scope":22798,"src":"2550:79548:68","usedErrors":[1823,3413,3418,3423,3428,3437,3443,3446,3449,3452,3455,3458,3461,3470,3473,3476,3479,3482,3485,3488,3491,3494,3497,3500,3503,3506,3509,3512,3518,3525,3532,3535,3538,3548,3558,3565,3568,3571,3574,3584,3594,3601,3604,3607,3610,3613,3616,3619,3622,3625,3630,3635,3640,3643,3646,3649,3652,3655,3660,3665,3670,3676,3682,3685,3693,3699,3705,3708,3711,3714,3719,3729,3739,3746,3749,3752,3755,3758,3761,3764,3767,5792,5901,5904,5907,6207,7917,9886,11367,11374,39870,39875,39880,39889,39894,39899,40188,40469,40474,40477,43243,43255],"usedEvents":[3806,3811,3830,3842,3854,3872,3890,3895,3898,3901,3908,3915,3922,3929,3936,3942,3948,3960,3970,3980,3992,3997,4006,38865,38876]}],"src":"46:82053:68"},"id":68},"@balancer-labs/v3-vault/contracts/VaultAdmin.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultAdmin.sol","exportedSymbols":{"Authentication":[5498],"EVMCallModeHelpers":[5808],"FixedPoint":[8208],"IAuthorizer":[1455],"IERC20":[40109],"IERC4626":[39833],"IProtocolFeeController":[2420],"IVault":[3111],"IVaultAdmin":[3401],"PackedTokenBalance":[6344],"PoolConfigBits":[4582],"PoolConfigLib":[30441],"Rounding":[4732],"SafeCast":[44983],"SafeERC20":[40461],"VaultAdmin":[24770],"VaultCommon":[25606],"VaultExtensionsLib":[31178],"VaultGuard":[28149],"VaultStateBits":[31184],"VaultStateLib":[31325]},"id":24771,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":22799,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:69"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":22801,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24771,"sourceUnit":40462,"src":"72:84:69","symbolAliases":[{"foreign":{"id":22800,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40461,"src":"81:9:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":22803,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24771,"sourceUnit":44984,"src":"157:75:69","symbolAliases":[{"foreign":{"id":22802,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44983,"src":"166:8:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":22805,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24771,"sourceUnit":39834,"src":"233:75:69","symbolAliases":[{"foreign":{"id":22804,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39833,"src":"242:8:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":22807,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24771,"sourceUnit":40110,"src":"309:72:69","symbolAliases":[{"foreign":{"id":22806,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"318:6:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":22809,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24771,"sourceUnit":2421,"src":"383:113:69","symbolAliases":[{"foreign":{"id":22808,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2420,"src":"392:22:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":22811,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24771,"sourceUnit":1456,"src":"497:91:69","symbolAliases":[{"foreign":{"id":22810,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1455,"src":"506:11:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","id":22813,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24771,"sourceUnit":3402,"src":"589:91:69","symbolAliases":[{"foreign":{"id":22812,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3401,"src":"598:11:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":22815,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24771,"sourceUnit":4872,"src":"681:87:69","symbolAliases":[{"foreign":{"id":22814,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"690:8:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":22817,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24771,"sourceUnit":3112,"src":"769:81:69","symbolAliases":[{"foreign":{"id":22816,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"778:6:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","id":22819,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24771,"sourceUnit":6345,"src":"852:111:69","symbolAliases":[{"foreign":{"id":22818,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6344,"src":"861:18:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol","id":22821,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24771,"sourceUnit":5809,"src":"964:111:69","symbolAliases":[{"foreign":{"id":22820,"name":"EVMCallModeHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5808,"src":"973:18:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol","id":22823,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24771,"sourceUnit":5499,"src":"1076:103:69","symbolAliases":[{"foreign":{"id":22822,"name":"Authentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5498,"src":"1085:14:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":22825,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24771,"sourceUnit":8209,"src":"1180:92:69","symbolAliases":[{"foreign":{"id":22824,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"1189:10:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/VaultStateLib.sol","file":"./lib/VaultStateLib.sol","id":22828,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24771,"sourceUnit":31326,"src":"1274:72:69","symbolAliases":[{"foreign":{"id":22826,"name":"VaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31184,"src":"1283:14:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":22827,"name":"VaultStateLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31325,"src":"1299:13:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/PoolConfigLib.sol","file":"./lib/PoolConfigLib.sol","id":22831,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24771,"sourceUnit":30442,"src":"1347:72:69","symbolAliases":[{"foreign":{"id":22829,"name":"PoolConfigLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30441,"src":"1356:13:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":22830,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"1371:14:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/VaultExtensionsLib.sol","file":"./lib/VaultExtensionsLib.sol","id":22833,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24771,"sourceUnit":31179,"src":"1420:66:69","symbolAliases":[{"foreign":{"id":22832,"name":"VaultExtensionsLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31178,"src":"1429:18:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultCommon.sol","file":"./VaultCommon.sol","id":22835,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24771,"sourceUnit":25607,"src":"1487:48:69","symbolAliases":[{"foreign":{"id":22834,"name":"VaultCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25606,"src":"1496:11:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","file":"./VaultGuard.sol","id":22837,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":24771,"sourceUnit":28150,"src":"1536:46:69","symbolAliases":[{"foreign":{"id":22836,"name":"VaultGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28149,"src":"1545:10:69","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":22839,"name":"IVaultAdmin","nameLocations":["2095:11:69"],"nodeType":"IdentifierPath","referencedDeclaration":3401,"src":"2095:11:69"},"id":22840,"nodeType":"InheritanceSpecifier","src":"2095:11:69"},{"baseName":{"id":22841,"name":"VaultCommon","nameLocations":["2108:11:69"],"nodeType":"IdentifierPath","referencedDeclaration":25606,"src":"2108:11:69"},"id":22842,"nodeType":"InheritanceSpecifier","src":"2108:11:69"},{"baseName":{"id":22843,"name":"Authentication","nameLocations":["2121:14:69"],"nodeType":"IdentifierPath","referencedDeclaration":5498,"src":"2121:14:69"},"id":22844,"nodeType":"InheritanceSpecifier","src":"2121:14:69"},{"baseName":{"id":22845,"name":"VaultGuard","nameLocations":["2137:10:69"],"nodeType":"IdentifierPath","referencedDeclaration":28149,"src":"2137:10:69"},"id":22846,"nodeType":"InheritanceSpecifier","src":"2137:10:69"}],"canonicalName":"VaultAdmin","contractDependencies":[],"contractKind":"contract","documentation":{"id":22838,"nodeType":"StructuredDocumentation","src":"1584:487:69","text":" @dev Bytecode extension for the Vault containing permissioned functions. Complementary to `VaultExtension`,\n it has access to the same storage layout as the main vault.\n The functions in this contract are not meant to be called directly. They must only be called by the Vault\n via delegate calls, so that any state modifications produced by this contract's code will actually target\n the main Vault's state.\n The storage of this contract is in practice unused."},"fullyImplemented":true,"id":24770,"internalFunctionIDs":{"6467":1,"6488":2},"linearizedBaseContracts":[24770,28149,5498,243,25606,39429,1824,39900,9942,28384,3768,4007,3401],"name":"VaultAdmin","nameLocation":"2081:10:69","nodeType":"ContractDefinition","nodes":[{"global":false,"id":22849,"libraryName":{"id":22847,"name":"PackedTokenBalance","nameLocations":["2160:18:69"],"nodeType":"IdentifierPath","referencedDeclaration":6344,"src":"2160:18:69"},"nodeType":"UsingForDirective","src":"2154:37:69","typeName":{"id":22848,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2183:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"global":false,"id":22853,"libraryName":{"id":22850,"name":"PoolConfigLib","nameLocations":["2202:13:69"],"nodeType":"IdentifierPath","referencedDeclaration":30441,"src":"2202:13:69"},"nodeType":"UsingForDirective","src":"2196:39:69","typeName":{"id":22852,"nodeType":"UserDefinedTypeName","pathNode":{"id":22851,"name":"PoolConfigBits","nameLocations":["2220:14:69"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"2220:14:69"},"referencedDeclaration":4582,"src":"2220:14:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}},{"global":false,"id":22857,"libraryName":{"id":22854,"name":"VaultStateLib","nameLocations":["2246:13:69"],"nodeType":"IdentifierPath","referencedDeclaration":31325,"src":"2246:13:69"},"nodeType":"UsingForDirective","src":"2240:39:69","typeName":{"id":22856,"nodeType":"UserDefinedTypeName","pathNode":{"id":22855,"name":"VaultStateBits","nameLocations":["2264:14:69"],"nodeType":"IdentifierPath","referencedDeclaration":31184,"src":"2264:14:69"},"referencedDeclaration":31184,"src":"2264:14:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}}},{"global":false,"id":22861,"libraryName":{"id":22858,"name":"VaultExtensionsLib","nameLocations":["2290:18:69"],"nodeType":"IdentifierPath","referencedDeclaration":31178,"src":"2290:18:69"},"nodeType":"UsingForDirective","src":"2284:36:69","typeName":{"id":22860,"nodeType":"UserDefinedTypeName","pathNode":{"id":22859,"name":"IVault","nameLocations":["2313:6:69"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"2313:6:69"},"referencedDeclaration":3111,"src":"2313:6:69","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}},{"global":false,"id":22864,"libraryName":{"id":22862,"name":"FixedPoint","nameLocations":["2331:10:69"],"nodeType":"IdentifierPath","referencedDeclaration":8208,"src":"2331:10:69"},"nodeType":"UsingForDirective","src":"2325:29:69","typeName":{"id":22863,"name":"uint256","nodeType":"ElementaryTypeName","src":"2346:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":22868,"libraryName":{"id":22865,"name":"SafeERC20","nameLocations":["2365:9:69"],"nodeType":"IdentifierPath","referencedDeclaration":40461,"src":"2365:9:69"},"nodeType":"UsingForDirective","src":"2359:27:69","typeName":{"id":22867,"nodeType":"UserDefinedTypeName","pathNode":{"id":22866,"name":"IERC20","nameLocations":["2379:6:69"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"2379:6:69"},"referencedDeclaration":40109,"src":"2379:6:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}},{"global":false,"id":22870,"libraryName":{"id":22869,"name":"SafeCast","nameLocations":["2397:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":44983,"src":"2397:8:69"},"nodeType":"UsingForDirective","src":"2391:21:69"},{"constant":true,"id":22873,"mutability":"constant","name":"_BUFFER_MINIMUM_TOTAL_SUPPLY","nameLocation":"2498:28:69","nodeType":"VariableDeclaration","scope":24770,"src":"2472:60:69","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22871,"name":"uint256","nodeType":"ElementaryTypeName","src":"2472:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"316534","id":22872,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2529:3:69","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"value":"1e4"},"visibility":"internal"},{"body":{"id":22882,"nodeType":"Block","src":"2656:60:69","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":22876,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"2666:6:69","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":22878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2673:23:69","memberName":"ensureVaultDelegateCall","nodeType":"MemberAccess","referencedDeclaration":31177,"src":"2666:30:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IVault_$3111_$returns$__$attached_to$_t_contract$_IVault_$3111_$","typeString":"function (contract IVault) view"}},"id":22879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2666:32:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":22880,"nodeType":"ExpressionStatement","src":"2666:32:69"},{"id":22881,"nodeType":"PlaceholderStatement","src":"2708:1:69"}]},"documentation":{"id":22874,"nodeType":"StructuredDocumentation","src":"2539:79:69","text":"@dev Functions with this modifier can only be delegate-called by the Vault."},"id":22883,"name":"onlyVaultDelegateCall","nameLocation":"2632:21:69","nodeType":"ModifierDefinition","parameters":{"id":22875,"nodeType":"ParameterList","parameters":[],"src":"2653:2:69"},"src":"2623:93:69","virtual":false,"visibility":"internal"},{"body":{"id":22899,"nodeType":"Block","src":"2841:128:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":22892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22886,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2855:3:69","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":22887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2859:6:69","memberName":"sender","nodeType":"MemberAccess","src":"2855:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":22890,"name":"_protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28287,"src":"2877:22:69","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}],"id":22889,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2869:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22888,"name":"address","nodeType":"ElementaryTypeName","src":"2869:7:69","typeDescriptions":{}}},"id":22891,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2869:31:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2855:45:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22897,"nodeType":"IfStatement","src":"2851:101:69","trueBody":{"id":22896,"nodeType":"Block","src":"2902:50:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22893,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":234,"src":"2923:16:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22894,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2923:18:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22895,"nodeType":"RevertStatement","src":"2916:25:69"}]}},{"id":22898,"nodeType":"PlaceholderStatement","src":"2961:1:69"}]},"documentation":{"id":22884,"nodeType":"StructuredDocumentation","src":"2722:77:69","text":"@dev Functions with this modifier can only be called by the pool creator."},"id":22900,"name":"onlyProtocolFeeController","nameLocation":"2813:25:69","nodeType":"ModifierDefinition","parameters":{"id":22885,"nodeType":"ParameterList","parameters":[],"src":"2838:2:69"},"src":"2804:165:69","virtual":false,"visibility":"internal"},{"body":{"id":22915,"nodeType":"Block","src":"3084:135:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22905,"name":"aggregatePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22903,"src":"3098:19:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":22906,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"3120:10:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$8208_$","typeString":"type(library FixedPoint)"}},"id":22907,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3131:3:69","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":7920,"src":"3120:14:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3098:36:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22913,"nodeType":"IfStatement","src":"3094:108:69","trueBody":{"id":22912,"nodeType":"Block","src":"3136:66:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22909,"name":"ProtocolFeesExceedTotalCollected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3607,"src":"3157:32:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22910,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3157:34:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22911,"nodeType":"RevertStatement","src":"3150:41:69"}]}},{"id":22914,"nodeType":"PlaceholderStatement","src":"3211:1:69"}]},"documentation":{"id":22901,"nodeType":"StructuredDocumentation","src":"2975:46:69","text":"@dev Validate aggregate percentage values."},"id":22916,"name":"withValidPercentage","nameLocation":"3035:19:69","nodeType":"ModifierDefinition","parameters":{"id":22904,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22903,"mutability":"mutable","name":"aggregatePercentage","nameLocation":"3063:19:69","nodeType":"VariableDeclaration","scope":22916,"src":"3055:27:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22902,"name":"uint256","nodeType":"ElementaryTypeName","src":"3055:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3054:29:69"},"src":"3026:193:69","virtual":false,"visibility":"internal"},{"body":{"id":22996,"nodeType":"Block","src":"3489:700:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22948,"name":"pauseWindowDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22921,"src":"3503:19:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":22949,"name":"_MAX_PAUSE_WINDOW_DURATION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28189,"src":"3525:26:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3503:48:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22955,"nodeType":"IfStatement","src":"3499:120:69","trueBody":{"id":22954,"nodeType":"Block","src":"3553:66:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22951,"name":"VaultPauseWindowDurationTooLarge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3643,"src":"3574:32:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22952,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3574:34:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22953,"nodeType":"RevertStatement","src":"3567:41:69"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22958,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22956,"name":"bufferPeriodDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22923,"src":"3632:20:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":22957,"name":"_MAX_BUFFER_PERIOD_DURATION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28192,"src":"3655:27:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3632:50:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":22963,"nodeType":"IfStatement","src":"3628:123:69","trueBody":{"id":22962,"nodeType":"Block","src":"3684:67:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":22959,"name":"PauseBufferPeriodDurationTooLarge","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3646,"src":"3705:33:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":22960,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3705:35:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":22961,"nodeType":"RevertStatement","src":"3698:42:69"}]}},{"assignments":[22965],"declarations":[{"constant":false,"id":22965,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"3822:18:69","nodeType":"VariableDeclaration","scope":22996,"src":"3815:25:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":22964,"name":"uint32","nodeType":"ElementaryTypeName","src":"3815:6:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"id":22973,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":22969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":22966,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3844:5:69","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":22967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3850:9:69","memberName":"timestamp","nodeType":"MemberAccess","src":"3844:15:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":22968,"name":"pauseWindowDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22921,"src":"3862:19:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"3844:37:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":22970,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3843:39:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3883:8:69","memberName":"toUint32","nodeType":"MemberAccess","referencedDeclaration":44039,"src":"3843:48:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint32_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint32)"}},"id":22972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3843:50:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"VariableDeclarationStatement","src":"3815:78:69"},{"expression":{"id":22976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22974,"name":"_vaultPauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28265,"src":"3904:24:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22975,"name":"pauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22965,"src":"3931:18:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"3904:45:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":22977,"nodeType":"ExpressionStatement","src":"3904:45:69"},{"expression":{"id":22980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22978,"name":"_vaultBufferPeriodDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28269,"src":"3959:26:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22979,"name":"bufferPeriodDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22923,"src":"3988:20:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"3959:49:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":22981,"nodeType":"ExpressionStatement","src":"3959:49:69"},{"expression":{"id":22986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22982,"name":"_vaultBufferPeriodEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28267,"src":"4018:25:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":22985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":22983,"name":"pauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22965,"src":"4046:18:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":22984,"name":"bufferPeriodDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22923,"src":"4067:20:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"4046:41:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"4018:69:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":22987,"nodeType":"ExpressionStatement","src":"4018:69:69"},{"expression":{"id":22990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22988,"name":"_MINIMUM_TRADE_AMOUNT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28194,"src":"4098:21:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22989,"name":"minTradeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22925,"src":"4122:14:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4098:38:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22991,"nodeType":"ExpressionStatement","src":"4098:38:69"},{"expression":{"id":22994,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":22992,"name":"_MINIMUM_WRAP_AMOUNT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28196,"src":"4146:20:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":22993,"name":"minWrapAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22927,"src":"4169:13:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4146:36:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":22995,"nodeType":"ExpressionStatement","src":"4146:36:69"}]},"id":22997,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"arguments":[{"id":22938,"name":"mainVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22919,"src":"3452:9:69","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}],"id":22937,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3444:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":22936,"name":"address","nodeType":"ElementaryTypeName","src":"3444:7:69","typeDescriptions":{}}},"id":22939,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3444:18:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":22935,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3436:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":22934,"name":"uint160","nodeType":"ElementaryTypeName","src":"3436:7:69","typeDescriptions":{}}},"id":22940,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3436:27:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":22933,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3428:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":22932,"name":"uint256","nodeType":"ElementaryTypeName","src":"3428:7:69","typeDescriptions":{}}},"id":22941,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3428:36:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":22931,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3420:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":22930,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3420:7:69","typeDescriptions":{}}},"id":22942,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3420:45:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":22943,"kind":"baseConstructorSpecifier","modifierName":{"id":22929,"name":"Authentication","nameLocations":["3405:14:69"],"nodeType":"IdentifierPath","referencedDeclaration":5498,"src":"3405:14:69"},"nodeType":"ModifierInvocation","src":"3405:61:69"},{"arguments":[{"id":22945,"name":"mainVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22919,"src":"3478:9:69","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"id":22946,"kind":"baseConstructorSpecifier","modifierName":{"id":22944,"name":"VaultGuard","nameLocations":["3467:10:69"],"nodeType":"IdentifierPath","referencedDeclaration":28149,"src":"3467:10:69"},"nodeType":"ModifierInvocation","src":"3467:21:69"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":22928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":22919,"mutability":"mutable","name":"mainVault","nameLocation":"3253:9:69","nodeType":"VariableDeclaration","scope":22997,"src":"3246:16:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":22918,"nodeType":"UserDefinedTypeName","pathNode":{"id":22917,"name":"IVault","nameLocations":["3246:6:69"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"3246:6:69"},"referencedDeclaration":3111,"src":"3246:6:69","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":22921,"mutability":"mutable","name":"pauseWindowDuration","nameLocation":"3279:19:69","nodeType":"VariableDeclaration","scope":22997,"src":"3272:26:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":22920,"name":"uint32","nodeType":"ElementaryTypeName","src":"3272:6:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":22923,"mutability":"mutable","name":"bufferPeriodDuration","nameLocation":"3315:20:69","nodeType":"VariableDeclaration","scope":22997,"src":"3308:27:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":22922,"name":"uint32","nodeType":"ElementaryTypeName","src":"3308:6:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":22925,"mutability":"mutable","name":"minTradeAmount","nameLocation":"3353:14:69","nodeType":"VariableDeclaration","scope":22997,"src":"3345:22:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22924,"name":"uint256","nodeType":"ElementaryTypeName","src":"3345:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":22927,"mutability":"mutable","name":"minWrapAmount","nameLocation":"3385:13:69","nodeType":"VariableDeclaration","scope":22997,"src":"3377:21:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":22926,"name":"uint256","nodeType":"ElementaryTypeName","src":"3377:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3236:168:69"},"returnParameters":{"id":22947,"nodeType":"ParameterList","parameters":[],"src":"3489:0:69"},"scope":24770,"src":"3225:964:69","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[3129],"body":{"id":23006,"nodeType":"Block","src":"4502:30:69","statements":[{"expression":{"id":23004,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"4519:6:69","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"functionReturnParameters":23003,"id":23005,"nodeType":"Return","src":"4512:13:69"}]},"documentation":{"id":22998,"nodeType":"StructuredDocumentation","src":"4422:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"fbfa77cf","id":23007,"implemented":true,"kind":"function","modifiers":[],"name":"vault","nameLocation":"4463:5:69","nodeType":"FunctionDefinition","parameters":{"id":22999,"nodeType":"ParameterList","parameters":[],"src":"4468:2:69"},"returnParameters":{"id":23003,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23002,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23007,"src":"4494:6:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":23001,"nodeType":"UserDefinedTypeName","pathNode":{"id":23000,"name":"IVault","nameLocations":["4494:6:69"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"4494:6:69"},"referencedDeclaration":3111,"src":"4494:6:69","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"}],"src":"4493:8:69"},"scope":24770,"src":"4454:78:69","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3135],"body":{"id":23015,"nodeType":"Block","src":"4634:48:69","statements":[{"expression":{"id":23013,"name":"_vaultPauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28265,"src":"4651:24:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":23012,"id":23014,"nodeType":"Return","src":"4644:31:69"}]},"documentation":{"id":23008,"nodeType":"StructuredDocumentation","src":"4538:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"8a8d123a","id":23016,"implemented":true,"kind":"function","modifiers":[],"name":"getPauseWindowEndTime","nameLocation":"4579:21:69","nodeType":"FunctionDefinition","parameters":{"id":23009,"nodeType":"ParameterList","parameters":[],"src":"4600:2:69"},"returnParameters":{"id":23012,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23011,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23016,"src":"4626:6:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":23010,"name":"uint32","nodeType":"ElementaryTypeName","src":"4626:6:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"4625:8:69"},"scope":24770,"src":"4570:112:69","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3141],"body":{"id":23024,"nodeType":"Block","src":"4786:50:69","statements":[{"expression":{"id":23022,"name":"_vaultBufferPeriodDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28269,"src":"4803:26:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":23021,"id":23023,"nodeType":"Return","src":"4796:33:69"}]},"documentation":{"id":23017,"nodeType":"StructuredDocumentation","src":"4688:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"20c1fb7a","id":23025,"implemented":true,"kind":"function","modifiers":[],"name":"getBufferPeriodDuration","nameLocation":"4729:23:69","nodeType":"FunctionDefinition","parameters":{"id":23018,"nodeType":"ParameterList","parameters":[],"src":"4752:2:69"},"returnParameters":{"id":23021,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23020,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23025,"src":"4778:6:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":23019,"name":"uint32","nodeType":"ElementaryTypeName","src":"4778:6:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"4777:8:69"},"scope":24770,"src":"4720:116:69","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3147],"body":{"id":23033,"nodeType":"Block","src":"4939:49:69","statements":[{"expression":{"id":23031,"name":"_vaultBufferPeriodEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28267,"src":"4956:25:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":23030,"id":23032,"nodeType":"Return","src":"4949:32:69"}]},"documentation":{"id":23026,"nodeType":"StructuredDocumentation","src":"4842:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"cd51c12f","id":23034,"implemented":true,"kind":"function","modifiers":[],"name":"getBufferPeriodEndTime","nameLocation":"4883:22:69","nodeType":"FunctionDefinition","parameters":{"id":23027,"nodeType":"ParameterList","parameters":[],"src":"4905:2:69"},"returnParameters":{"id":23030,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23029,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23034,"src":"4931:6:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":23028,"name":"uint32","nodeType":"ElementaryTypeName","src":"4931:6:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"4930:8:69"},"scope":24770,"src":"4874:114:69","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3153],"body":{"id":23042,"nodeType":"Block","src":"5090:35:69","statements":[{"expression":{"id":23040,"name":"_MIN_TOKENS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28178,"src":"5107:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":23039,"id":23041,"nodeType":"Return","src":"5100:18:69"}]},"documentation":{"id":23035,"nodeType":"StructuredDocumentation","src":"4994:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"a8175b27","id":23043,"implemented":true,"kind":"function","modifiers":[],"name":"getMinimumPoolTokens","nameLocation":"5035:20:69","nodeType":"FunctionDefinition","parameters":{"id":23036,"nodeType":"ParameterList","parameters":[],"src":"5055:2:69"},"returnParameters":{"id":23039,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23038,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23043,"src":"5081:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23037,"name":"uint256","nodeType":"ElementaryTypeName","src":"5081:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5080:9:69"},"scope":24770,"src":"5026:99:69","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[3159],"body":{"id":23051,"nodeType":"Block","src":"5227:35:69","statements":[{"expression":{"id":23049,"name":"_MAX_TOKENS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28181,"src":"5244:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":23048,"id":23050,"nodeType":"Return","src":"5237:18:69"}]},"documentation":{"id":23044,"nodeType":"StructuredDocumentation","src":"5131:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"2e42f4d5","id":23052,"implemented":true,"kind":"function","modifiers":[],"name":"getMaximumPoolTokens","nameLocation":"5172:20:69","nodeType":"FunctionDefinition","parameters":{"id":23045,"nodeType":"ParameterList","parameters":[],"src":"5192:2:69"},"returnParameters":{"id":23048,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23047,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23052,"src":"5218:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23046,"name":"uint256","nodeType":"ElementaryTypeName","src":"5218:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5217:9:69"},"scope":24770,"src":"5163:99:69","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[3165],"body":{"id":23060,"nodeType":"Block","src":"5369:50:69","statements":[{"expression":{"id":23058,"name":"_POOL_MINIMUM_TOTAL_SUPPLY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38854,"src":"5386:26:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":23057,"id":23059,"nodeType":"Return","src":"5379:33:69"}]},"documentation":{"id":23053,"nodeType":"StructuredDocumentation","src":"5268:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"d0965a6b","id":23061,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolMinimumTotalSupply","nameLocation":"5309:25:69","nodeType":"FunctionDefinition","parameters":{"id":23054,"nodeType":"ParameterList","parameters":[],"src":"5334:2:69"},"returnParameters":{"id":23057,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23056,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23061,"src":"5360:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23055,"name":"uint256","nodeType":"ElementaryTypeName","src":"5360:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5359:9:69"},"scope":24770,"src":"5300:119:69","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[3171],"body":{"id":23069,"nodeType":"Block","src":"5528:52:69","statements":[{"expression":{"id":23067,"name":"_BUFFER_MINIMUM_TOTAL_SUPPLY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22873,"src":"5545:28:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":23066,"id":23068,"nodeType":"Return","src":"5538:35:69"}]},"documentation":{"id":23062,"nodeType":"StructuredDocumentation","src":"5425:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"26a8a991","id":23070,"implemented":true,"kind":"function","modifiers":[],"name":"getBufferMinimumTotalSupply","nameLocation":"5466:27:69","nodeType":"FunctionDefinition","parameters":{"id":23063,"nodeType":"ParameterList","parameters":[],"src":"5493:2:69"},"returnParameters":{"id":23066,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23065,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23070,"src":"5519:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23064,"name":"uint256","nodeType":"ElementaryTypeName","src":"5519:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5518:9:69"},"scope":24770,"src":"5457:123:69","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[3177],"body":{"id":23078,"nodeType":"Block","src":"5683:45:69","statements":[{"expression":{"id":23076,"name":"_MINIMUM_TRADE_AMOUNT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28194,"src":"5700:21:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":23075,"id":23077,"nodeType":"Return","src":"5693:28:69"}]},"documentation":{"id":23071,"nodeType":"StructuredDocumentation","src":"5586:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"e2cb0ba0","id":23079,"implemented":true,"kind":"function","modifiers":[],"name":"getMinimumTradeAmount","nameLocation":"5627:21:69","nodeType":"FunctionDefinition","parameters":{"id":23072,"nodeType":"ParameterList","parameters":[],"src":"5648:2:69"},"returnParameters":{"id":23075,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23074,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23079,"src":"5674:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23073,"name":"uint256","nodeType":"ElementaryTypeName","src":"5674:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5673:9:69"},"scope":24770,"src":"5618:110:69","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3183],"body":{"id":23087,"nodeType":"Block","src":"5830:44:69","statements":[{"expression":{"id":23085,"name":"_MINIMUM_WRAP_AMOUNT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28196,"src":"5847:20:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":23084,"id":23086,"nodeType":"Return","src":"5840:27:69"}]},"documentation":{"id":23080,"nodeType":"StructuredDocumentation","src":"5734:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"53956aa2","id":23088,"implemented":true,"kind":"function","modifiers":[],"name":"getMinimumWrapAmount","nameLocation":"5775:20:69","nodeType":"FunctionDefinition","parameters":{"id":23081,"nodeType":"ParameterList","parameters":[],"src":"5795:2:69"},"returnParameters":{"id":23084,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23083,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23088,"src":"5821:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23082,"name":"uint256","nodeType":"ElementaryTypeName","src":"5821:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5820:9:69"},"scope":24770,"src":"5766:108:69","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3189],"body":{"id":23099,"nodeType":"Block","src":"6209:40:69","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":23096,"name":"_isVaultPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25014,"src":"6226:14:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":23097,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6226:16:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":23095,"id":23098,"nodeType":"Return","src":"6219:23:69"}]},"documentation":{"id":23089,"nodeType":"StructuredDocumentation","src":"6101:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"098401f5","id":23100,"implemented":true,"kind":"function","modifiers":[{"id":23092,"kind":"modifierInvocation","modifierName":{"id":23091,"name":"onlyVaultDelegateCall","nameLocations":["6172:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":22883,"src":"6172:21:69"},"nodeType":"ModifierInvocation","src":"6172:21:69"}],"name":"isVaultPaused","nameLocation":"6142:13:69","nodeType":"FunctionDefinition","parameters":{"id":23090,"nodeType":"ParameterList","parameters":[],"src":"6155:2:69"},"returnParameters":{"id":23095,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23094,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23100,"src":"6203:4:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23093,"name":"bool","nodeType":"ElementaryTypeName","src":"6203:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6202:6:69"},"scope":24770,"src":"6133:116:69","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3199],"body":{"id":23118,"nodeType":"Block","src":"6385:95:69","statements":[{"expression":{"components":[{"arguments":[],"expression":{"argumentTypes":[],"id":23112,"name":"_isVaultPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25014,"src":"6403:14:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":23113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6403:16:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":23114,"name":"_vaultPauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28265,"src":"6421:24:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":23115,"name":"_vaultBufferPeriodEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28267,"src":"6447:25:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"id":23116,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6402:71:69","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint32_$_t_uint32_$","typeString":"tuple(bool,uint32,uint32)"}},"functionReturnParameters":23111,"id":23117,"nodeType":"Return","src":"6395:78:69"}]},"documentation":{"id":23101,"nodeType":"StructuredDocumentation","src":"6255:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"85c8c015","id":23119,"implemented":true,"kind":"function","modifiers":[{"id":23104,"kind":"modifierInvocation","modifierName":{"id":23103,"name":"onlyVaultDelegateCall","nameLocations":["6332:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":22883,"src":"6332:21:69"},"nodeType":"ModifierInvocation","src":"6332:21:69"}],"name":"getVaultPausedState","nameLocation":"6296:19:69","nodeType":"FunctionDefinition","parameters":{"id":23102,"nodeType":"ParameterList","parameters":[],"src":"6315:2:69"},"returnParameters":{"id":23111,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23106,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23119,"src":"6363:4:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23105,"name":"bool","nodeType":"ElementaryTypeName","src":"6363:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":23108,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23119,"src":"6369:6:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":23107,"name":"uint32","nodeType":"ElementaryTypeName","src":"6369:6:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":23110,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23119,"src":"6377:6:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":23109,"name":"uint32","nodeType":"ElementaryTypeName","src":"6377:6:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"6362:22:69"},"scope":24770,"src":"6287:193:69","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3203],"body":{"id":23131,"nodeType":"Block","src":"6584:38:69","statements":[{"expression":{"arguments":[{"hexValue":"74727565","id":23128,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6610:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":23127,"name":"_setVaultPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23199,"src":"6594:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bool_$returns$__$","typeString":"function (bool)"}},"id":23129,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6594:21:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23130,"nodeType":"ExpressionStatement","src":"6594:21:69"}]},"documentation":{"id":23120,"nodeType":"StructuredDocumentation","src":"6486:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"9e0879c2","id":23132,"implemented":true,"kind":"function","modifiers":[{"id":23123,"kind":"modifierInvocation","modifierName":{"id":23122,"name":"onlyVaultDelegateCall","nameLocations":["6549:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":22883,"src":"6549:21:69"},"nodeType":"ModifierInvocation","src":"6549:21:69"},{"id":23125,"kind":"modifierInvocation","modifierName":{"id":23124,"name":"authenticate","nameLocations":["6571:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":5446,"src":"6571:12:69"},"nodeType":"ModifierInvocation","src":"6571:12:69"}],"name":"pauseVault","nameLocation":"6527:10:69","nodeType":"FunctionDefinition","parameters":{"id":23121,"nodeType":"ParameterList","parameters":[],"src":"6537:2:69"},"returnParameters":{"id":23126,"nodeType":"ParameterList","parameters":[],"src":"6584:0:69"},"scope":24770,"src":"6518:104:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3207],"body":{"id":23144,"nodeType":"Block","src":"6728:39:69","statements":[{"expression":{"arguments":[{"hexValue":"66616c7365","id":23141,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6754:5:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":23140,"name":"_setVaultPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23199,"src":"6738:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bool_$returns$__$","typeString":"function (bool)"}},"id":23142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6738:22:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23143,"nodeType":"ExpressionStatement","src":"6738:22:69"}]},"documentation":{"id":23133,"nodeType":"StructuredDocumentation","src":"6628:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"0b7562be","id":23145,"implemented":true,"kind":"function","modifiers":[{"id":23136,"kind":"modifierInvocation","modifierName":{"id":23135,"name":"onlyVaultDelegateCall","nameLocations":["6693:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":22883,"src":"6693:21:69"},"nodeType":"ModifierInvocation","src":"6693:21:69"},{"id":23138,"kind":"modifierInvocation","modifierName":{"id":23137,"name":"authenticate","nameLocations":["6715:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":5446,"src":"6715:12:69"},"nodeType":"ModifierInvocation","src":"6715:12:69"}],"name":"unpauseVault","nameLocation":"6669:12:69","nodeType":"FunctionDefinition","parameters":{"id":23134,"nodeType":"ParameterList","parameters":[],"src":"6681:2:69"},"returnParameters":{"id":23139,"nodeType":"ParameterList","parameters":[],"src":"6728:0:69"},"scope":24770,"src":"6660:107:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":23198,"nodeType":"Block","src":"6972:1113:69","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":23151,"name":"_isVaultPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25014,"src":"6986:14:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":23152,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6986:16:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":23176,"nodeType":"Block","src":"7433:449:69","statements":[{"condition":{"id":23160,"name":"pausing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23148,"src":"7451:7:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":23174,"nodeType":"Block","src":"7753:119:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":23171,"name":"VaultNotPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3652,"src":"7841:14:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":23172,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7841:16:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23173,"nodeType":"RevertStatement","src":"7834:23:69"}]},"id":23175,"nodeType":"IfStatement","src":"7447:425:69","trueBody":{"id":23170,"nodeType":"Block","src":"7460:287:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23161,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"7615:5:69","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":23162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7621:9:69","memberName":"timestamp","nodeType":"MemberAccess","src":"7615:15:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":23163,"name":"_vaultPauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28265,"src":"7634:24:69","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"7615:43:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23169,"nodeType":"IfStatement","src":"7611:122:69","trueBody":{"id":23168,"nodeType":"Block","src":"7660:73:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":23165,"name":"VaultPauseWindowExpired","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3655,"src":"7689:23:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":23166,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7689:25:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23167,"nodeType":"RevertStatement","src":"7682:32:69"}]}}]}}]},"id":23177,"nodeType":"IfStatement","src":"6982:900:69","trueBody":{"id":23159,"nodeType":"Block","src":"7004:423:69","statements":[{"condition":{"id":23153,"name":"pausing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23148,"src":"7022:7:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23158,"nodeType":"IfStatement","src":"7018:137:69","trueBody":{"id":23157,"nodeType":"Block","src":"7031:124:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":23154,"name":"VaultPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3649,"src":"7127:11:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":23155,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7127:13:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23156,"nodeType":"RevertStatement","src":"7120:20:69"}]}}]}},{"assignments":[23180],"declarations":[{"constant":false,"id":23180,"mutability":"mutable","name":"vaultState","nameLocation":"7907:10:69","nodeType":"VariableDeclaration","scope":23198,"src":"7892:25:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"},"typeName":{"id":23179,"nodeType":"UserDefinedTypeName","pathNode":{"id":23178,"name":"VaultStateBits","nameLocations":["7892:14:69"],"nodeType":"IdentifierPath","referencedDeclaration":31184,"src":"7892:14:69"},"referencedDeclaration":31184,"src":"7892:14:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"visibility":"internal"}],"id":23182,"initialValue":{"id":23181,"name":"_vaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28272,"src":"7920:15:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"nodeType":"VariableDeclarationStatement","src":"7892:43:69"},{"expression":{"id":23188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23183,"name":"vaultState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23180,"src":"7945:10:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":23186,"name":"pausing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23148,"src":"7984:7:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":23184,"name":"vaultState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23180,"src":"7958:10:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"id":23185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7969:14:69","memberName":"setVaultPaused","nodeType":"MemberAccess","referencedDeclaration":31283,"src":"7958:25:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_VaultStateBits_$31184_$_t_bool_$returns$_t_userDefinedValueType$_VaultStateBits_$31184_$attached_to$_t_userDefinedValueType$_VaultStateBits_$31184_$","typeString":"function (VaultStateBits,bool) pure returns (VaultStateBits)"}},"id":23187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7958:34:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"src":"7945:47:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"id":23189,"nodeType":"ExpressionStatement","src":"7945:47:69"},{"expression":{"id":23192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23190,"name":"_vaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28272,"src":"8002:15:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":23191,"name":"vaultState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23180,"src":"8020:10:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"src":"8002:28:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"id":23193,"nodeType":"ExpressionStatement","src":"8002:28:69"},{"eventCall":{"arguments":[{"id":23195,"name":"pausing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23148,"src":"8070:7:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":23194,"name":"VaultPausedStateChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3895,"src":"8046:23:69","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bool_$returns$__$","typeString":"function (bool)"}},"id":23196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8046:32:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23197,"nodeType":"EmitStatement","src":"8041:37:69"}]},"documentation":{"id":23146,"nodeType":"StructuredDocumentation","src":"6773:146:69","text":" @dev The contract can only be paused until the end of the Pause Window, and\n unpaused until the end of the Buffer Period."},"id":23199,"implemented":true,"kind":"function","modifiers":[],"name":"_setVaultPaused","nameLocation":"6933:15:69","nodeType":"FunctionDefinition","parameters":{"id":23149,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23148,"mutability":"mutable","name":"pausing","nameLocation":"6954:7:69","nodeType":"VariableDeclaration","scope":23199,"src":"6949:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23147,"name":"bool","nodeType":"ElementaryTypeName","src":"6949:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6948:14:69"},"returnParameters":{"id":23150,"nodeType":"ParameterList","parameters":[],"src":"6972:0:69"},"scope":24770,"src":"6924:1161:69","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[3213],"body":{"id":23215,"nodeType":"Block","src":"8433:43:69","statements":[{"expression":{"arguments":[{"id":23211,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23202,"src":"8458:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"74727565","id":23212,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8464:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":23210,"name":"_setPoolPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23303,"src":"8443:14:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":23213,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8443:26:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23214,"nodeType":"ExpressionStatement","src":"8443:26:69"}]},"documentation":{"id":23200,"nodeType":"StructuredDocumentation","src":"8312:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"55aca1ec","id":23216,"implemented":true,"kind":"function","modifiers":[{"id":23205,"kind":"modifierInvocation","modifierName":{"id":23204,"name":"onlyVaultDelegateCall","nameLocations":["8386:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":22883,"src":"8386:21:69"},"nodeType":"ModifierInvocation","src":"8386:21:69"},{"arguments":[{"id":23207,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23202,"src":"8427:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":23208,"kind":"modifierInvocation","modifierName":{"id":23206,"name":"withRegisteredPool","nameLocations":["8408:18:69"],"nodeType":"IdentifierPath","referencedDeclaration":25120,"src":"8408:18:69"},"nodeType":"ModifierInvocation","src":"8408:24:69"}],"name":"pausePool","nameLocation":"8353:9:69","nodeType":"FunctionDefinition","parameters":{"id":23203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23202,"mutability":"mutable","name":"pool","nameLocation":"8371:4:69","nodeType":"VariableDeclaration","scope":23216,"src":"8363:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23201,"name":"address","nodeType":"ElementaryTypeName","src":"8363:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8362:14:69"},"returnParameters":{"id":23209,"nodeType":"ParameterList","parameters":[],"src":"8433:0:69"},"scope":24770,"src":"8344:132:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3219],"body":{"id":23232,"nodeType":"Block","src":"8605:44:69","statements":[{"expression":{"arguments":[{"id":23228,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23219,"src":"8630:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"66616c7365","id":23229,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8636:5:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":23227,"name":"_setPoolPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23303,"src":"8615:14:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":23230,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8615:27:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23231,"nodeType":"ExpressionStatement","src":"8615:27:69"}]},"documentation":{"id":23217,"nodeType":"StructuredDocumentation","src":"8482:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"f21c38cd","id":23233,"implemented":true,"kind":"function","modifiers":[{"id":23222,"kind":"modifierInvocation","modifierName":{"id":23221,"name":"onlyVaultDelegateCall","nameLocations":["8558:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":22883,"src":"8558:21:69"},"nodeType":"ModifierInvocation","src":"8558:21:69"},{"arguments":[{"id":23224,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23219,"src":"8599:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":23225,"kind":"modifierInvocation","modifierName":{"id":23223,"name":"withRegisteredPool","nameLocations":["8580:18:69"],"nodeType":"IdentifierPath","referencedDeclaration":25120,"src":"8580:18:69"},"nodeType":"ModifierInvocation","src":"8580:24:69"}],"name":"unpausePool","nameLocation":"8523:11:69","nodeType":"FunctionDefinition","parameters":{"id":23220,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23219,"mutability":"mutable","name":"pool","nameLocation":"8543:4:69","nodeType":"VariableDeclaration","scope":23233,"src":"8535:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23218,"name":"address","nodeType":"ElementaryTypeName","src":"8535:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8534:14:69"},"returnParameters":{"id":23226,"nodeType":"ParameterList","parameters":[],"src":"8605:0:69"},"scope":24770,"src":"8514:135:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":23302,"nodeType":"Block","src":"8716:1220:69","statements":[{"expression":{"arguments":[{"id":23241,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23235,"src":"8753:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":23242,"name":"_poolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28231,"src":"8759:17:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolRoleAccounts_$4677_storage_$","typeString":"mapping(address => struct PoolRoleAccounts storage ref)"}},"id":23244,"indexExpression":{"id":23243,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23235,"src":"8777:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8759:23:69","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage","typeString":"struct PoolRoleAccounts storage ref"}},"id":23245,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8783:12:69","memberName":"pauseManager","nodeType":"MemberAccess","referencedDeclaration":4672,"src":"8759:36:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23240,"name":"_ensureAuthenticatedByRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24646,"src":"8726:26:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) view"}},"id":23246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8726:70:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23247,"nodeType":"ExpressionStatement","src":"8726:70:69"},{"assignments":[23250],"declarations":[{"constant":false,"id":23250,"mutability":"mutable","name":"config","nameLocation":"8822:6:69","nodeType":"VariableDeclaration","scope":23302,"src":"8807:21:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":23249,"nodeType":"UserDefinedTypeName","pathNode":{"id":23248,"name":"PoolConfigBits","nameLocations":["8807:14:69"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"8807:14:69"},"referencedDeclaration":4582,"src":"8807:14:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"id":23254,"initialValue":{"baseExpression":{"id":23251,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"8831:15:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":23253,"indexExpression":{"id":23252,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23235,"src":"8847:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8831:21:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"VariableDeclarationStatement","src":"8807:45:69"},{"condition":{"arguments":[{"id":23256,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23235,"src":"8881:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23255,"name":"_isPoolPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25047,"src":"8867:13:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":23257,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8867:19:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":23286,"nodeType":"Block","src":"9318:461:69","statements":[{"condition":{"id":23266,"name":"pausing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23237,"src":"9336:7:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":23284,"nodeType":"Block","src":"9647:122:69","statements":[{"errorCall":{"arguments":[{"id":23281,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23235,"src":"9749:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23280,"name":"PoolNotPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3665,"src":"9735:13:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":23282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9735:19:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23283,"nodeType":"RevertStatement","src":"9728:26:69"}]},"id":23285,"nodeType":"IfStatement","src":"9332:437:69","trueBody":{"id":23279,"nodeType":"Block","src":"9345:296:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":23267,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"9500:5:69","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":23268,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9506:9:69","memberName":"timestamp","nodeType":"MemberAccess","src":"9500:15:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23269,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23250,"src":"9519:6:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":23270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9526:21:69","memberName":"getPauseWindowEndTime","nodeType":"MemberAccess","referencedDeclaration":30365,"src":"9519:28:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_uint32_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (uint32)"}},"id":23271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9519:30:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"9500:49:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23278,"nodeType":"IfStatement","src":"9496:131:69","trueBody":{"id":23277,"nodeType":"Block","src":"9551:76:69","statements":[{"errorCall":{"arguments":[{"id":23274,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23235,"src":"9603:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23273,"name":"PoolPauseWindowExpired","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3670,"src":"9580:22:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":23275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9580:28:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23276,"nodeType":"RevertStatement","src":"9573:35:69"}]}}]}}]},"id":23287,"nodeType":"IfStatement","src":"8863:916:69","trueBody":{"id":23265,"nodeType":"Block","src":"8888:424:69","statements":[{"condition":{"id":23258,"name":"pausing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23237,"src":"8906:7:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23264,"nodeType":"IfStatement","src":"8902:140:69","trueBody":{"id":23263,"nodeType":"Block","src":"8915:127:69","statements":[{"errorCall":{"arguments":[{"id":23260,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23235,"src":"9022:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23259,"name":"PoolPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3660,"src":"9011:10:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":23261,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9011:16:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23262,"nodeType":"RevertStatement","src":"9004:23:69"}]}}]}},{"expression":{"id":23295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":23288,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"9823:15:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":23290,"indexExpression":{"id":23289,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23235,"src":"9839:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9823:21:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":23293,"name":"pausing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23237,"src":"9868:7:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":23291,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23250,"src":"9847:6:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":23292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9854:13:69","memberName":"setPoolPaused","nodeType":"MemberAccess","referencedDeclaration":29748,"src":"9847:20:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":23294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9847:29:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"9823:53:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":23296,"nodeType":"ExpressionStatement","src":"9823:53:69"},{"eventCall":{"arguments":[{"id":23298,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23235,"src":"9915:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23299,"name":"pausing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23237,"src":"9921:7:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":23297,"name":"PoolPausedStateChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3908,"src":"9892:22:69","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":23300,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9892:37:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23301,"nodeType":"EmitStatement","src":"9887:42:69"}]},"id":23303,"implemented":true,"kind":"function","modifiers":[],"name":"_setPoolPaused","nameLocation":"8664:14:69","nodeType":"FunctionDefinition","parameters":{"id":23238,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23235,"mutability":"mutable","name":"pool","nameLocation":"8687:4:69","nodeType":"VariableDeclaration","scope":23303,"src":"8679:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23234,"name":"address","nodeType":"ElementaryTypeName","src":"8679:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23237,"mutability":"mutable","name":"pausing","nameLocation":"8698:7:69","nodeType":"VariableDeclaration","scope":23303,"src":"8693:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23236,"name":"bool","nodeType":"ElementaryTypeName","src":"8693:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8678:28:69"},"returnParameters":{"id":23239,"nodeType":"ParameterList","parameters":[],"src":"8716:0:69"},"scope":24770,"src":"8655:1281:69","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[3227],"body":{"id":23333,"nodeType":"Block","src":"10346:192:69","statements":[{"expression":{"arguments":[{"id":23317,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23306,"src":"10392:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"baseExpression":{"id":23318,"name":"_poolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28231,"src":"10398:17:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolRoleAccounts_$4677_storage_$","typeString":"mapping(address => struct PoolRoleAccounts storage ref)"}},"id":23320,"indexExpression":{"id":23319,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23306,"src":"10416:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10398:23:69","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage","typeString":"struct PoolRoleAccounts storage ref"}},"id":23321,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10422:14:69","memberName":"swapFeeManager","nodeType":"MemberAccess","referencedDeclaration":4674,"src":"10398:38:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23316,"name":"_ensureAuthenticatedByExclusiveRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24676,"src":"10356:35:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$__$","typeString":"function (address,address) view"}},"id":23322,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10356:81:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23323,"nodeType":"ExpressionStatement","src":"10356:81:69"},{"expression":{"arguments":[{"id":23325,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23306,"src":"10463:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23324,"name":"_ensureUnpaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24998,"src":"10447:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":23326,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10447:21:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23327,"nodeType":"ExpressionStatement","src":"10447:21:69"},{"expression":{"arguments":[{"id":23329,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23306,"src":"10507:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23330,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23308,"src":"10513:17:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23328,"name":"_setStaticSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25506,"src":"10479:27:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":23331,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10479:52:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23332,"nodeType":"ExpressionStatement","src":"10479:52:69"}]},"documentation":{"id":23304,"nodeType":"StructuredDocumentation","src":"10159:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"d15126ba","id":23334,"implemented":true,"kind":"function","modifiers":[{"id":23311,"kind":"modifierInvocation","modifierName":{"id":23310,"name":"onlyVaultDelegateCall","nameLocations":["10299:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":22883,"src":"10299:21:69"},"nodeType":"ModifierInvocation","src":"10299:21:69"},{"arguments":[{"id":23313,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23306,"src":"10340:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":23314,"kind":"modifierInvocation","modifierName":{"id":23312,"name":"withRegisteredPool","nameLocations":["10321:18:69"],"nodeType":"IdentifierPath","referencedDeclaration":25120,"src":"10321:18:69"},"nodeType":"ModifierInvocation","src":"10321:24:69"}],"name":"setStaticSwapFeePercentage","nameLocation":"10200:26:69","nodeType":"FunctionDefinition","parameters":{"id":23309,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23306,"mutability":"mutable","name":"pool","nameLocation":"10244:4:69","nodeType":"VariableDeclaration","scope":23334,"src":"10236:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23305,"name":"address","nodeType":"ElementaryTypeName","src":"10236:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23308,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"10266:17:69","nodeType":"VariableDeclaration","scope":23334,"src":"10258:25:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23307,"name":"uint256","nodeType":"ElementaryTypeName","src":"10258:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10226:63:69"},"returnParameters":{"id":23315,"nodeType":"ParameterList","parameters":[],"src":"10346:0:69"},"scope":24770,"src":"10191:347:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3239],"body":{"id":23454,"nodeType":"Block","src":"10857:714:69","statements":[{"assignments":[23359],"declarations":[{"constant":false,"id":23359,"mutability":"mutable","name":"poolTokens","nameLocation":"10883:10:69","nodeType":"VariableDeclaration","scope":23454,"src":"10867:26:69","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":23357,"nodeType":"UserDefinedTypeName","pathNode":{"id":23356,"name":"IERC20","nameLocations":["10867:6:69"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"10867:6:69"},"referencedDeclaration":40109,"src":"10867:6:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":23358,"nodeType":"ArrayTypeName","src":"10867:8:69","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"id":23364,"initialValue":{"arguments":[{"id":23362,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23337,"src":"10917:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":23360,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"10896:6:69","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":23361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10903:13:69","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":4145,"src":"10896:20:69","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":23363,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10896:26:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"VariableDeclarationStatement","src":"10867:55:69"},{"assignments":[23366],"declarations":[{"constant":false,"id":23366,"mutability":"mutable","name":"numTokens","nameLocation":"10940:9:69","nodeType":"VariableDeclaration","scope":23454,"src":"10932:17:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23365,"name":"uint256","nodeType":"ElementaryTypeName","src":"10932:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23369,"initialValue":{"expression":{"id":23367,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23359,"src":"10952:10:69","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10963:6:69","memberName":"length","nodeType":"MemberAccess","src":"10952:17:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10932:37:69"},{"expression":{"id":23376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23370,"name":"totalSwapFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23350,"src":"10980:13:69","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":23374,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23366,"src":"11010:9:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23373,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"10996:13:69","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":23371,"name":"uint256","nodeType":"ElementaryTypeName","src":"11000:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23372,"nodeType":"ArrayTypeName","src":"11000:9:69","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":23375,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10996:24:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"10980:40:69","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":23377,"nodeType":"ExpressionStatement","src":"10980:40:69"},{"expression":{"id":23384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23378,"name":"totalYieldFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23353,"src":"11030:14:69","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":23382,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23366,"src":"11061:9:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23381,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"11047:13:69","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":23379,"name":"uint256","nodeType":"ElementaryTypeName","src":"11051:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23380,"nodeType":"ArrayTypeName","src":"11051:9:69","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":23383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11047:24:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"11030:41:69","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":23385,"nodeType":"ExpressionStatement","src":"11030:41:69"},{"body":{"id":23452,"nodeType":"Block","src":"11130:435:69","statements":[{"assignments":[23399],"declarations":[{"constant":false,"id":23399,"mutability":"mutable","name":"token","nameLocation":"11151:5:69","nodeType":"VariableDeclaration","scope":23452,"src":"11144:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":23398,"nodeType":"UserDefinedTypeName","pathNode":{"id":23397,"name":"IERC20","nameLocations":["11144:6:69"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"11144:6:69"},"referencedDeclaration":40109,"src":"11144:6:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"id":23403,"initialValue":{"baseExpression":{"id":23400,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23359,"src":"11159:10:69","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23402,"indexExpression":{"id":23401,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23387,"src":"11170:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11159:13:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"11144:28:69"},{"expression":{"id":23418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":23404,"name":"totalSwapFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23350,"src":"11188:13:69","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":23406,"indexExpression":{"id":23405,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23387,"src":"11202:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11188:16:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":23407,"name":"totalYieldFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23353,"src":"11206:14:69","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":23409,"indexExpression":{"id":23408,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23387,"src":"11221:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11206:17:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":23410,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"11187:37:69","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"baseExpression":{"id":23411,"name":"_aggregateFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28263,"src":"11227:20:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$_$","typeString":"mapping(address => mapping(contract IERC20 => bytes32))"}},"id":23413,"indexExpression":{"id":23412,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23337,"src":"11248:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11227:26:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$","typeString":"mapping(contract IERC20 => bytes32)"}},"id":23415,"indexExpression":{"id":23414,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23399,"src":"11254:5:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11227:33:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":23416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11261:17:69","memberName":"fromPackedBalance","nodeType":"MemberAccess","referencedDeclaration":6322,"src":"11227:51:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256,uint256)"}},"id":23417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11227:53:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"11187:93:69","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23419,"nodeType":"ExpressionStatement","src":"11187:93:69"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":23430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":23420,"name":"totalSwapFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23350,"src":"11299:13:69","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":23422,"indexExpression":{"id":23421,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23387,"src":"11313:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11299:16:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":23423,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11318:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11299:20:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":23425,"name":"totalYieldFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23353,"src":"11323:14:69","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":23427,"indexExpression":{"id":23426,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23387,"src":"11338:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11323:17:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":23428,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11343:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11323:21:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11299:45:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23451,"nodeType":"IfStatement","src":"11295:260:69","trueBody":{"id":23450,"nodeType":"Block","src":"11346:209:69","statements":[{"expression":{"id":23437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":23431,"name":"_aggregateFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28263,"src":"11427:20:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$_$","typeString":"mapping(address => mapping(contract IERC20 => bytes32))"}},"id":23434,"indexExpression":{"id":23432,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23337,"src":"11448:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11427:26:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$","typeString":"mapping(contract IERC20 => bytes32)"}},"id":23435,"indexExpression":{"id":23433,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23399,"src":"11454:5:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11427:33:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":23436,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11463:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11427:37:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":23438,"nodeType":"ExpressionStatement","src":"11427:37:69"},{"expression":{"arguments":[{"id":23440,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23399,"src":"11496:5:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":23441,"name":"totalSwapFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23350,"src":"11503:13:69","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":23443,"indexExpression":{"id":23442,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23387,"src":"11517:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11503:16:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"baseExpression":{"id":23444,"name":"totalYieldFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23353,"src":"11522:14:69","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":23446,"indexExpression":{"id":23445,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23387,"src":"11537:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11522:17:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11503:36:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23439,"name":"_supplyCredit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24891,"src":"11482:13:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":23448,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11482:58:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23449,"nodeType":"ExpressionStatement","src":"11482:58:69"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23390,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23387,"src":"11102:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":23391,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23359,"src":"11106:10:69","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":23392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11117:6:69","memberName":"length","nodeType":"MemberAccess","src":"11106:17:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11102:21:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23453,"initializationExpression":{"assignments":[23387],"declarations":[{"constant":false,"id":23387,"mutability":"mutable","name":"i","nameLocation":"11095:1:69","nodeType":"VariableDeclaration","scope":23453,"src":"11087:9:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23386,"name":"uint256","nodeType":"ElementaryTypeName","src":"11087:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":23389,"initialValue":{"hexValue":"30","id":23388,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11099:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11087:13:69"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":23395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"11125:3:69","subExpression":{"id":23394,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23387,"src":"11127:1:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23396,"nodeType":"ExpressionStatement","src":"11125:3:69"},"nodeType":"ForStatement","src":"11082:483:69"}]},"documentation":{"id":23335,"nodeType":"StructuredDocumentation","src":"10544:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"8f4ab9ca","id":23455,"implemented":true,"kind":"function","modifiers":[{"id":23340,"kind":"modifierInvocation","modifierName":{"id":23339,"name":"onlyVaultDelegateCall","nameLocations":["10657:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":22883,"src":"10657:21:69"},"nodeType":"ModifierInvocation","src":"10657:21:69"},{"id":23342,"kind":"modifierInvocation","modifierName":{"id":23341,"name":"onlyWhenUnlocked","nameLocations":["10687:16:69"],"nodeType":"IdentifierPath","referencedDeclaration":24848,"src":"10687:16:69"},"nodeType":"ModifierInvocation","src":"10687:16:69"},{"id":23344,"kind":"modifierInvocation","modifierName":{"id":23343,"name":"onlyProtocolFeeController","nameLocations":["10712:25:69"],"nodeType":"IdentifierPath","referencedDeclaration":22900,"src":"10712:25:69"},"nodeType":"ModifierInvocation","src":"10712:25:69"},{"arguments":[{"id":23346,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23337,"src":"10765:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":23347,"kind":"modifierInvocation","modifierName":{"id":23345,"name":"withRegisteredPool","nameLocations":["10746:18:69"],"nodeType":"IdentifierPath","referencedDeclaration":25120,"src":"10746:18:69"},"nodeType":"ModifierInvocation","src":"10746:24:69"}],"name":"collectAggregateFees","nameLocation":"10585:20:69","nodeType":"FunctionDefinition","parameters":{"id":23338,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23337,"mutability":"mutable","name":"pool","nameLocation":"10623:4:69","nodeType":"VariableDeclaration","scope":23455,"src":"10615:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23336,"name":"address","nodeType":"ElementaryTypeName","src":"10615:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10605:28:69"},"returnParameters":{"id":23354,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23350,"mutability":"mutable","name":"totalSwapFees","nameLocation":"10805:13:69","nodeType":"VariableDeclaration","scope":23455,"src":"10788:30:69","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":23348,"name":"uint256","nodeType":"ElementaryTypeName","src":"10788:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23349,"nodeType":"ArrayTypeName","src":"10788:9:69","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":23353,"mutability":"mutable","name":"totalYieldFees","nameLocation":"10837:14:69","nodeType":"VariableDeclaration","scope":23455,"src":"10820:31:69","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":23351,"name":"uint256","nodeType":"ElementaryTypeName","src":"10820:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23352,"nodeType":"ArrayTypeName","src":"10820:9:69","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"10787:65:69"},"scope":24770,"src":"10576:995:69","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[3247],"body":{"id":23489,"nodeType":"Block","src":"11903:209:69","statements":[{"expression":{"id":23482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":23473,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"11913:15:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":23475,"indexExpression":{"id":23474,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23458,"src":"11929:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11913:21:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":23480,"name":"newAggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23460,"src":"11989:29:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":23476,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"11937:15:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":23478,"indexExpression":{"id":23477,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23458,"src":"11953:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11937:21:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":23479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11959:29:69","memberName":"setAggregateSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":30162,"src":"11937:51:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_uint256_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,uint256) pure returns (PoolConfigBits)"}},"id":23481,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11937:82:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"11913:106:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":23483,"nodeType":"ExpressionStatement","src":"11913:106:69"},{"eventCall":{"arguments":[{"id":23485,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23458,"src":"12069:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23486,"name":"newAggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23460,"src":"12075:29:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23484,"name":"AggregateSwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3929,"src":"12035:33:69","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":23487,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12035:70:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23488,"nodeType":"EmitStatement","src":"12030:75:69"}]},"documentation":{"id":23456,"nodeType":"StructuredDocumentation","src":"11577:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"5e0b06f4","id":23490,"implemented":true,"kind":"function","modifiers":[{"id":23463,"kind":"modifierInvocation","modifierName":{"id":23462,"name":"onlyVaultDelegateCall","nameLocations":["11751:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":22883,"src":"11751:21:69"},"nodeType":"ModifierInvocation","src":"11751:21:69"},{"arguments":[{"id":23465,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23458,"src":"11800:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":23466,"kind":"modifierInvocation","modifierName":{"id":23464,"name":"withRegisteredPool","nameLocations":["11781:18:69"],"nodeType":"IdentifierPath","referencedDeclaration":25120,"src":"11781:18:69"},"nodeType":"ModifierInvocation","src":"11781:24:69"},{"arguments":[{"id":23468,"name":"newAggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23460,"src":"11834:29:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":23469,"kind":"modifierInvocation","modifierName":{"id":23467,"name":"withValidPercentage","nameLocations":["11814:19:69"],"nodeType":"IdentifierPath","referencedDeclaration":22916,"src":"11814:19:69"},"nodeType":"ModifierInvocation","src":"11814:50:69"},{"id":23471,"kind":"modifierInvocation","modifierName":{"id":23470,"name":"onlyProtocolFeeController","nameLocations":["11873:25:69"],"nodeType":"IdentifierPath","referencedDeclaration":22900,"src":"11873:25:69"},"nodeType":"ModifierInvocation","src":"11873:25:69"}],"name":"updateAggregateSwapFeePercentage","nameLocation":"11618:32:69","nodeType":"FunctionDefinition","parameters":{"id":23461,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23458,"mutability":"mutable","name":"pool","nameLocation":"11668:4:69","nodeType":"VariableDeclaration","scope":23490,"src":"11660:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23457,"name":"address","nodeType":"ElementaryTypeName","src":"11660:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23460,"mutability":"mutable","name":"newAggregateSwapFeePercentage","nameLocation":"11690:29:69","nodeType":"VariableDeclaration","scope":23490,"src":"11682:37:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23459,"name":"uint256","nodeType":"ElementaryTypeName","src":"11682:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11650:75:69"},"returnParameters":{"id":23472,"nodeType":"ParameterList","parameters":[],"src":"11903:0:69"},"scope":24770,"src":"11609:503:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3255],"body":{"id":23524,"nodeType":"Block","src":"12447:213:69","statements":[{"expression":{"id":23517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":23508,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"12457:15:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":23510,"indexExpression":{"id":23509,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23493,"src":"12473:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12457:21:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":23515,"name":"newAggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23495,"src":"12534:30:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":23511,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"12481:15:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":23513,"indexExpression":{"id":23512,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23493,"src":"12497:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12481:21:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":23514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12503:30:69","memberName":"setAggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":30223,"src":"12481:52:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_uint256_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,uint256) pure returns (PoolConfigBits)"}},"id":23516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12481:84:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"12457:108:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":23518,"nodeType":"ExpressionStatement","src":"12457:108:69"},{"eventCall":{"arguments":[{"id":23520,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23493,"src":"12616:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23521,"name":"newAggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23495,"src":"12622:30:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23519,"name":"AggregateYieldFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3936,"src":"12581:34:69","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":23522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12581:72:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23523,"nodeType":"EmitStatement","src":"12576:77:69"}]},"documentation":{"id":23491,"nodeType":"StructuredDocumentation","src":"12118:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"e253670a","id":23525,"implemented":true,"kind":"function","modifiers":[{"id":23498,"kind":"modifierInvocation","modifierName":{"id":23497,"name":"onlyVaultDelegateCall","nameLocations":["12294:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":22883,"src":"12294:21:69"},"nodeType":"ModifierInvocation","src":"12294:21:69"},{"arguments":[{"id":23500,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23493,"src":"12343:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":23501,"kind":"modifierInvocation","modifierName":{"id":23499,"name":"withRegisteredPool","nameLocations":["12324:18:69"],"nodeType":"IdentifierPath","referencedDeclaration":25120,"src":"12324:18:69"},"nodeType":"ModifierInvocation","src":"12324:24:69"},{"arguments":[{"id":23503,"name":"newAggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23495,"src":"12377:30:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":23504,"kind":"modifierInvocation","modifierName":{"id":23502,"name":"withValidPercentage","nameLocations":["12357:19:69"],"nodeType":"IdentifierPath","referencedDeclaration":22916,"src":"12357:19:69"},"nodeType":"ModifierInvocation","src":"12357:51:69"},{"id":23506,"kind":"modifierInvocation","modifierName":{"id":23505,"name":"onlyProtocolFeeController","nameLocations":["12417:25:69"],"nodeType":"IdentifierPath","referencedDeclaration":22900,"src":"12417:25:69"},"nodeType":"ModifierInvocation","src":"12417:25:69"}],"name":"updateAggregateYieldFeePercentage","nameLocation":"12159:33:69","nodeType":"FunctionDefinition","parameters":{"id":23496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23493,"mutability":"mutable","name":"pool","nameLocation":"12210:4:69","nodeType":"VariableDeclaration","scope":23525,"src":"12202:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23492,"name":"address","nodeType":"ElementaryTypeName","src":"12202:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23495,"mutability":"mutable","name":"newAggregateYieldFeePercentage","nameLocation":"12232:30:69","nodeType":"VariableDeclaration","scope":23525,"src":"12224:38:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23494,"name":"uint256","nodeType":"ElementaryTypeName","src":"12224:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12192:76:69"},"returnParameters":{"id":23507,"nodeType":"ParameterList","parameters":[],"src":"12447:0:69"},"scope":24770,"src":"12150:510:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3262],"body":{"id":23546,"nodeType":"Block","src":"12852:136:69","statements":[{"expression":{"id":23540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23538,"name":"_protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28287,"src":"12862:22:69","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":23539,"name":"newProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23529,"src":"12887:24:69","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}},"src":"12862:49:69","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}},"id":23541,"nodeType":"ExpressionStatement","src":"12862:49:69"},{"eventCall":{"arguments":[{"id":23543,"name":"newProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23529,"src":"12956:24:69","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}],"id":23542,"name":"ProtocolFeeControllerChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3948,"src":"12927:28:69","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_IProtocolFeeController_$2420_$returns$__$","typeString":"function (contract IProtocolFeeController)"}},"id":23544,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12927:54:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23545,"nodeType":"EmitStatement","src":"12922:59:69"}]},"documentation":{"id":23526,"nodeType":"StructuredDocumentation","src":"12666:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"2d771389","id":23547,"implemented":true,"kind":"function","modifiers":[{"id":23532,"kind":"modifierInvocation","modifierName":{"id":23531,"name":"onlyVaultDelegateCall","nameLocations":["12804:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":22883,"src":"12804:21:69"},"nodeType":"ModifierInvocation","src":"12804:21:69"},{"id":23534,"kind":"modifierInvocation","modifierName":{"id":23533,"name":"authenticate","nameLocations":["12826:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":5446,"src":"12826:12:69"},"nodeType":"ModifierInvocation","src":"12826:12:69"},{"id":23536,"kind":"modifierInvocation","modifierName":{"id":23535,"name":"nonReentrant","nameLocations":["12839:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"12839:12:69"},"nodeType":"ModifierInvocation","src":"12839:12:69"}],"name":"setProtocolFeeController","nameLocation":"12707:24:69","nodeType":"FunctionDefinition","parameters":{"id":23530,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23529,"mutability":"mutable","name":"newProtocolFeeController","nameLocation":"12764:24:69","nodeType":"VariableDeclaration","scope":23547,"src":"12741:47:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"},"typeName":{"id":23528,"nodeType":"UserDefinedTypeName","pathNode":{"id":23527,"name":"IProtocolFeeController","nameLocations":["12741:22:69"],"nodeType":"IdentifierPath","referencedDeclaration":2420,"src":"12741:22:69"},"referencedDeclaration":2420,"src":"12741:22:69","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"12731:63:69"},"returnParameters":{"id":23537,"nodeType":"ParameterList","parameters":[],"src":"12852:0:69"},"scope":24770,"src":"12698:290:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3268],"body":{"id":23582,"nodeType":"Block","src":"13345:378:69","statements":[{"expression":{"arguments":[{"id":23559,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23550,"src":"13384:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23558,"name":"_ensurePoolNotInRecoveryMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23622,"src":"13355:28:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":23560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13355:34:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23561,"nodeType":"ExpressionStatement","src":"13355:34:69"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":23571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":23566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":23563,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23550,"src":"13515:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23562,"name":"_isPoolPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25047,"src":"13501:13:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":23564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13501:19:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":23565,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"13524:5:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"13501:28:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":23570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":23567,"name":"_isVaultPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25014,"src":"13533:14:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":23568,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13533:16:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":23569,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"13553:5:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"13533:25:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13501:57:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23576,"nodeType":"IfStatement","src":"13497:177:69","trueBody":{"id":23575,"nodeType":"Block","src":"13560:114:69","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":23572,"name":"_authenticateCaller","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5469,"src":"13642:19:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":23573,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13642:21:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23574,"nodeType":"ExpressionStatement","src":"13642:21:69"}]}},{"expression":{"arguments":[{"id":23578,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23550,"src":"13705:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"74727565","id":23579,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"13711:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":23577,"name":"_setPoolRecoveryMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23656,"src":"13684:20:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":23580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13684:32:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23581,"nodeType":"ExpressionStatement","src":"13684:32:69"}]},"documentation":{"id":23548,"nodeType":"StructuredDocumentation","src":"13215:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"dc3f574e","id":23583,"implemented":true,"kind":"function","modifiers":[{"id":23553,"kind":"modifierInvocation","modifierName":{"id":23552,"name":"onlyVaultDelegateCall","nameLocations":["13298:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":22883,"src":"13298:21:69"},"nodeType":"ModifierInvocation","src":"13298:21:69"},{"arguments":[{"id":23555,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23550,"src":"13339:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":23556,"kind":"modifierInvocation","modifierName":{"id":23554,"name":"withRegisteredPool","nameLocations":["13320:18:69"],"nodeType":"IdentifierPath","referencedDeclaration":25120,"src":"13320:18:69"},"nodeType":"ModifierInvocation","src":"13320:24:69"}],"name":"enableRecoveryMode","nameLocation":"13256:18:69","nodeType":"FunctionDefinition","parameters":{"id":23551,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23550,"mutability":"mutable","name":"pool","nameLocation":"13283:4:69","nodeType":"VariableDeclaration","scope":23583,"src":"13275:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23549,"name":"address","nodeType":"ElementaryTypeName","src":"13275:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13274:14:69"},"returnParameters":{"id":23557,"nodeType":"ParameterList","parameters":[],"src":"13345:0:69"},"scope":24770,"src":"13247:476:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3274],"body":{"id":23605,"nodeType":"Block","src":"13873:91:69","statements":[{"expression":{"arguments":[{"id":23597,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23586,"src":"13909:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23596,"name":"_ensurePoolInRecoveryMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25574,"src":"13883:25:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":23598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13883:31:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23599,"nodeType":"ExpressionStatement","src":"13883:31:69"},{"expression":{"arguments":[{"id":23601,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23586,"src":"13945:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"66616c7365","id":23602,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"13951:5:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":23600,"name":"_setPoolRecoveryMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23656,"src":"13924:20:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":23603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13924:33:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23604,"nodeType":"ExpressionStatement","src":"13924:33:69"}]},"documentation":{"id":23584,"nodeType":"StructuredDocumentation","src":"13729:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"bffb78b2","id":23606,"implemented":true,"kind":"function","modifiers":[{"id":23589,"kind":"modifierInvocation","modifierName":{"id":23588,"name":"onlyVaultDelegateCall","nameLocations":["13813:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":22883,"src":"13813:21:69"},"nodeType":"ModifierInvocation","src":"13813:21:69"},{"arguments":[{"id":23591,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23586,"src":"13854:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":23592,"kind":"modifierInvocation","modifierName":{"id":23590,"name":"withRegisteredPool","nameLocations":["13835:18:69"],"nodeType":"IdentifierPath","referencedDeclaration":25120,"src":"13835:18:69"},"nodeType":"ModifierInvocation","src":"13835:24:69"},{"id":23594,"kind":"modifierInvocation","modifierName":{"id":23593,"name":"authenticate","nameLocations":["13860:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":5446,"src":"13860:12:69"},"nodeType":"ModifierInvocation","src":"13860:12:69"}],"name":"disableRecoveryMode","nameLocation":"13770:19:69","nodeType":"FunctionDefinition","parameters":{"id":23587,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23586,"mutability":"mutable","name":"pool","nameLocation":"13798:4:69","nodeType":"VariableDeclaration","scope":23606,"src":"13790:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23585,"name":"address","nodeType":"ElementaryTypeName","src":"13790:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13789:14:69"},"returnParameters":{"id":23595,"nodeType":"ParameterList","parameters":[],"src":"13873:0:69"},"scope":24770,"src":"13761:203:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":23621,"nodeType":"Block","src":"14133:105:69","statements":[{"condition":{"arguments":[{"id":23613,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23609,"src":"14169:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23612,"name":"_isPoolInRecoveryMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25589,"src":"14147:21:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":23614,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14147:27:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23620,"nodeType":"IfStatement","src":"14143:89:69","trueBody":{"id":23619,"nodeType":"Block","src":"14176:56:69","statements":[{"errorCall":{"arguments":[{"id":23616,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23609,"src":"14216:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23615,"name":"PoolInRecoveryMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3630,"src":"14197:18:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":23617,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14197:24:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23618,"nodeType":"RevertStatement","src":"14190:31:69"}]}}]},"documentation":{"id":23607,"nodeType":"StructuredDocumentation","src":"13970:92:69","text":" @dev Reverts if the pool is in recovery mode.\n @param pool The pool"},"id":23622,"implemented":true,"kind":"function","modifiers":[],"name":"_ensurePoolNotInRecoveryMode","nameLocation":"14076:28:69","nodeType":"FunctionDefinition","parameters":{"id":23610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23609,"mutability":"mutable","name":"pool","nameLocation":"14113:4:69","nodeType":"VariableDeclaration","scope":23622,"src":"14105:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23608,"name":"address","nodeType":"ElementaryTypeName","src":"14105:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14104:14:69"},"returnParameters":{"id":23611,"nodeType":"ParameterList","parameters":[],"src":"14133:0:69"},"scope":24770,"src":"14067:171:69","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":23655,"nodeType":"Block","src":"14608:611:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":23632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23630,"name":"recoveryMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23627,"src":"14622:12:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":23631,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"14638:5:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"14622:21:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23638,"nodeType":"IfStatement","src":"14618:92:69","trueBody":{"id":23637,"nodeType":"Block","src":"14645:65:69","statements":[{"expression":{"arguments":[{"id":23634,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23625,"src":"14694:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23633,"name":"_syncPoolBalancesAfterRecoveryMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23674,"src":"14659:34:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":23635,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14659:40:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23636,"nodeType":"ExpressionStatement","src":"14659:40:69"}]}},{"expression":{"id":23648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":23639,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"15067:15:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":23641,"indexExpression":{"id":23640,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23625,"src":"15083:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15067:21:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":23646,"name":"recoveryMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23627,"src":"15135:12:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"baseExpression":{"id":23642,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"15091:15:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":23644,"indexExpression":{"id":23643,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23625,"src":"15107:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15091:21:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":23645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15113:21:69","memberName":"setPoolInRecoveryMode","nodeType":"MemberAccess","referencedDeclaration":29791,"src":"15091:43:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":23647,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15091:57:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"15067:81:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":23649,"nodeType":"ExpressionStatement","src":"15067:81:69"},{"eventCall":{"arguments":[{"id":23651,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23625,"src":"15193:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23652,"name":"recoveryMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23627,"src":"15199:12:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":23650,"name":"PoolRecoveryModeStateChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3922,"src":"15164:28:69","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":23653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15164:48:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23654,"nodeType":"EmitStatement","src":"15159:53:69"}]},"documentation":{"id":23623,"nodeType":"StructuredDocumentation","src":"14244:287:69","text":" @dev Change the recovery mode state of a pool, and emit an event. Assumes any validation (e.g., whether\n the proposed state change is consistent) has already been done.\n @param pool The pool\n @param recoveryMode The desired recovery mode state"},"id":23656,"implemented":true,"kind":"function","modifiers":[],"name":"_setPoolRecoveryMode","nameLocation":"14545:20:69","nodeType":"FunctionDefinition","parameters":{"id":23628,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23625,"mutability":"mutable","name":"pool","nameLocation":"14574:4:69","nodeType":"VariableDeclaration","scope":23656,"src":"14566:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23624,"name":"address","nodeType":"ElementaryTypeName","src":"14566:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":23627,"mutability":"mutable","name":"recoveryMode","nameLocation":"14585:12:69","nodeType":"VariableDeclaration","scope":23656,"src":"14580:17:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23626,"name":"bool","nodeType":"ElementaryTypeName","src":"14580:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14565:33:69"},"returnParameters":{"id":23629,"nodeType":"ParameterList","parameters":[],"src":"14608:0:69"},"scope":24770,"src":"14536:683:69","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":23673,"nodeType":"Block","src":"15610:92:69","statements":[{"expression":{"arguments":[{"id":23665,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23659,"src":"15648:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":23667,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23659,"src":"15668:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":23668,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"15674:8:69","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":23669,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15683:10:69","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":4731,"src":"15674:19:69","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"id":23666,"name":"_loadPoolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25336,"src":"15654:13:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_Rounding_$4732_$returns$_t_struct$_PoolData_$4729_memory_ptr_$","typeString":"function (address,enum Rounding) view returns (struct PoolData memory)"}},"id":23670,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15654:40:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}],"id":23664,"name":"_writePoolBalancesToStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25305,"src":"15620:27:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_struct$_PoolData_$4729_memory_ptr_$returns$__$","typeString":"function (address,struct PoolData memory)"}},"id":23671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15620:75:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23672,"nodeType":"ExpressionStatement","src":"15620:75:69"}]},"documentation":{"id":23657,"nodeType":"StructuredDocumentation","src":"15225:301:69","text":" @dev Raw and live balances will diverge as tokens are withdrawn during Recovery Mode. Live balances cannot\n be updated in Recovery Mode, as this would require making external calls to update rates, which could fail.\n When Recovery Mode is disabled, re-sync the balances."},"id":23674,"implemented":true,"kind":"function","modifiers":[{"id":23662,"kind":"modifierInvocation","modifierName":{"id":23661,"name":"nonReentrant","nameLocations":["15597:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"15597:12:69"},"nodeType":"ModifierInvocation","src":"15597:12:69"}],"name":"_syncPoolBalancesAfterRecoveryMode","nameLocation":"15540:34:69","nodeType":"FunctionDefinition","parameters":{"id":23660,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23659,"mutability":"mutable","name":"pool","nameLocation":"15583:4:69","nodeType":"VariableDeclaration","scope":23674,"src":"15575:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23658,"name":"address","nodeType":"ElementaryTypeName","src":"15575:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15574:14:69"},"returnParameters":{"id":23663,"nodeType":"ParameterList","parameters":[],"src":"15610:0:69"},"scope":24770,"src":"15531:171:69","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"baseFunctions":[3278],"body":{"id":23685,"nodeType":"Block","src":"16033:32:69","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":23682,"name":"_disableQuery","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23725,"src":"16043:13:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":23683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16043:15:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23684,"nodeType":"ExpressionStatement","src":"16043:15:69"}]},"documentation":{"id":23675,"nodeType":"StructuredDocumentation","src":"15933:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"de1a36a6","id":23686,"implemented":true,"kind":"function","modifiers":[{"id":23678,"kind":"modifierInvocation","modifierName":{"id":23677,"name":"onlyVaultDelegateCall","nameLocations":["15998:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":22883,"src":"15998:21:69"},"nodeType":"ModifierInvocation","src":"15998:21:69"},{"id":23680,"kind":"modifierInvocation","modifierName":{"id":23679,"name":"authenticate","nameLocations":["16020:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":5446,"src":"16020:12:69"},"nodeType":"ModifierInvocation","src":"16020:12:69"}],"name":"disableQuery","nameLocation":"15974:12:69","nodeType":"FunctionDefinition","parameters":{"id":23676,"nodeType":"ParameterList","parameters":[],"src":"15986:2:69"},"returnParameters":{"id":23681,"nodeType":"ParameterList","parameters":[],"src":"16033:0:69"},"scope":24770,"src":"15965:100:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3282],"body":{"id":23701,"nodeType":"Block","src":"16182:76:69","statements":[{"expression":{"id":23696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23694,"name":"_queriesDisabledPermanently","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28281,"src":"16192:27:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":23695,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16222:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"16192:34:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23697,"nodeType":"ExpressionStatement","src":"16192:34:69"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":23698,"name":"_disableQuery","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23725,"src":"16236:13:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":23699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16236:15:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23700,"nodeType":"ExpressionStatement","src":"16236:15:69"}]},"documentation":{"id":23687,"nodeType":"StructuredDocumentation","src":"16071:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"821440f2","id":23702,"implemented":true,"kind":"function","modifiers":[{"id":23690,"kind":"modifierInvocation","modifierName":{"id":23689,"name":"onlyVaultDelegateCall","nameLocations":["16147:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":22883,"src":"16147:21:69"},"nodeType":"ModifierInvocation","src":"16147:21:69"},{"id":23692,"kind":"modifierInvocation","modifierName":{"id":23691,"name":"authenticate","nameLocations":["16169:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":5446,"src":"16169:12:69"},"nodeType":"ModifierInvocation","src":"16169:12:69"}],"name":"disableQueryPermanently","nameLocation":"16112:23:69","nodeType":"FunctionDefinition","parameters":{"id":23688,"nodeType":"ParameterList","parameters":[],"src":"16135:2:69"},"returnParameters":{"id":23693,"nodeType":"ParameterList","parameters":[],"src":"16182:0:69"},"scope":24770,"src":"16103:155:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":23724,"nodeType":"Block","src":"16298:192:69","statements":[{"assignments":[23707],"declarations":[{"constant":false,"id":23707,"mutability":"mutable","name":"vaultState","nameLocation":"16323:10:69","nodeType":"VariableDeclaration","scope":23724,"src":"16308:25:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"},"typeName":{"id":23706,"nodeType":"UserDefinedTypeName","pathNode":{"id":23705,"name":"VaultStateBits","nameLocations":["16308:14:69"],"nodeType":"IdentifierPath","referencedDeclaration":31184,"src":"16308:14:69"},"referencedDeclaration":31184,"src":"16308:14:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"visibility":"internal"}],"id":23709,"initialValue":{"id":23708,"name":"_vaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28272,"src":"16336:15:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"nodeType":"VariableDeclarationStatement","src":"16308:43:69"},{"expression":{"id":23715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23710,"name":"vaultState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23707,"src":"16361:10:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"74727565","id":23713,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16402:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":23711,"name":"vaultState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23707,"src":"16374:10:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"id":23712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16385:16:69","memberName":"setQueryDisabled","nodeType":"MemberAccess","referencedDeclaration":31242,"src":"16374:27:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_VaultStateBits_$31184_$_t_bool_$returns$_t_userDefinedValueType$_VaultStateBits_$31184_$attached_to$_t_userDefinedValueType$_VaultStateBits_$31184_$","typeString":"function (VaultStateBits,bool) pure returns (VaultStateBits)"}},"id":23714,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16374:33:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"src":"16361:46:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"id":23716,"nodeType":"ExpressionStatement","src":"16361:46:69"},{"expression":{"id":23719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23717,"name":"_vaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28272,"src":"16417:15:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":23718,"name":"vaultState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23707,"src":"16435:10:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"src":"16417:28:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"id":23720,"nodeType":"ExpressionStatement","src":"16417:28:69"},{"eventCall":{"arguments":[],"expression":{"argumentTypes":[],"id":23721,"name":"VaultQueriesDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3898,"src":"16461:20:69","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$__$returns$__$","typeString":"function ()"}},"id":23722,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16461:22:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23723,"nodeType":"EmitStatement","src":"16456:27:69"}]},"id":23725,"implemented":true,"kind":"function","modifiers":[],"name":"_disableQuery","nameLocation":"16273:13:69","nodeType":"FunctionDefinition","parameters":{"id":23703,"nodeType":"ParameterList","parameters":[],"src":"16286:2:69"},"returnParameters":{"id":23704,"nodeType":"ParameterList","parameters":[],"src":"16298:0:69"},"scope":24770,"src":"16264:226:69","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[3286],"body":{"id":23758,"nodeType":"Block","src":"16595:295:69","statements":[{"condition":{"id":23733,"name":"_queriesDisabledPermanently","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28281,"src":"16609:27:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23738,"nodeType":"IfStatement","src":"16605:93:69","trueBody":{"id":23737,"nodeType":"Block","src":"16638:60:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":23734,"name":"QueriesDisabledPermanently","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3625,"src":"16659:26:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":23735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16659:28:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23736,"nodeType":"RevertStatement","src":"16652:35:69"}]}},{"assignments":[23741],"declarations":[{"constant":false,"id":23741,"mutability":"mutable","name":"vaultState","nameLocation":"16723:10:69","nodeType":"VariableDeclaration","scope":23758,"src":"16708:25:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"},"typeName":{"id":23740,"nodeType":"UserDefinedTypeName","pathNode":{"id":23739,"name":"VaultStateBits","nameLocations":["16708:14:69"],"nodeType":"IdentifierPath","referencedDeclaration":31184,"src":"16708:14:69"},"referencedDeclaration":31184,"src":"16708:14:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"visibility":"internal"}],"id":23743,"initialValue":{"id":23742,"name":"_vaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28272,"src":"16736:15:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"nodeType":"VariableDeclarationStatement","src":"16708:43:69"},{"expression":{"id":23749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23744,"name":"vaultState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23741,"src":"16761:10:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"66616c7365","id":23747,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16802:5:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":23745,"name":"vaultState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23741,"src":"16774:10:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"id":23746,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16785:16:69","memberName":"setQueryDisabled","nodeType":"MemberAccess","referencedDeclaration":31242,"src":"16774:27:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_VaultStateBits_$31184_$_t_bool_$returns$_t_userDefinedValueType$_VaultStateBits_$31184_$attached_to$_t_userDefinedValueType$_VaultStateBits_$31184_$","typeString":"function (VaultStateBits,bool) pure returns (VaultStateBits)"}},"id":23748,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16774:34:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"src":"16761:47:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"id":23750,"nodeType":"ExpressionStatement","src":"16761:47:69"},{"expression":{"id":23753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23751,"name":"_vaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28272,"src":"16818:15:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":23752,"name":"vaultState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23741,"src":"16836:10:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"src":"16818:28:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"id":23754,"nodeType":"ExpressionStatement","src":"16818:28:69"},{"eventCall":{"arguments":[],"expression":{"argumentTypes":[],"id":23755,"name":"VaultQueriesEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3901,"src":"16862:19:69","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$__$returns$__$","typeString":"function ()"}},"id":23756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16862:21:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23757,"nodeType":"EmitStatement","src":"16857:26:69"}]},"documentation":{"id":23726,"nodeType":"StructuredDocumentation","src":"16496:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"e0d55605","id":23759,"implemented":true,"kind":"function","modifiers":[{"id":23729,"kind":"modifierInvocation","modifierName":{"id":23728,"name":"onlyVaultDelegateCall","nameLocations":["16560:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":22883,"src":"16560:21:69"},"nodeType":"ModifierInvocation","src":"16560:21:69"},{"id":23731,"kind":"modifierInvocation","modifierName":{"id":23730,"name":"authenticate","nameLocations":["16582:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":5446,"src":"16582:12:69"},"nodeType":"ModifierInvocation","src":"16582:12:69"}],"name":"enableQuery","nameLocation":"16537:11:69","nodeType":"FunctionDefinition","parameters":{"id":23727,"nodeType":"ParameterList","parameters":[],"src":"16548:2:69"},"returnParameters":{"id":23732,"nodeType":"ParameterList","parameters":[],"src":"16595:0:69"},"scope":24770,"src":"16528:362:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3292],"body":{"id":23771,"nodeType":"Block","src":"17228:58:69","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23767,"name":"_vaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28272,"src":"17245:15:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"id":23768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17261:16:69","memberName":"areBuffersPaused","nodeType":"MemberAccess","referencedDeclaration":31300,"src":"17245:32:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_VaultStateBits_$31184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_VaultStateBits_$31184_$","typeString":"function (VaultStateBits) pure returns (bool)"}},"id":23769,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17245:34:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":23766,"id":23770,"nodeType":"Return","src":"17238:41:69"}]},"documentation":{"id":23760,"nodeType":"StructuredDocumentation","src":"17117:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"55cba7fe","id":23772,"implemented":true,"kind":"function","modifiers":[{"id":23763,"kind":"modifierInvocation","modifierName":{"id":23762,"name":"onlyVaultDelegateCall","nameLocations":["17191:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":22883,"src":"17191:21:69"},"nodeType":"ModifierInvocation","src":"17191:21:69"}],"name":"areBuffersPaused","nameLocation":"17158:16:69","nodeType":"FunctionDefinition","parameters":{"id":23761,"nodeType":"ParameterList","parameters":[],"src":"17174:2:69"},"returnParameters":{"id":23766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23765,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":23772,"src":"17222:4:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23764,"name":"bool","nodeType":"ElementaryTypeName","src":"17222:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"17221:6:69"},"scope":24770,"src":"17149:137:69","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3296],"body":{"id":23784,"nodeType":"Block","src":"17397:48:69","statements":[{"expression":{"arguments":[{"hexValue":"74727565","id":23781,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17433:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":23780,"name":"_setVaultBufferPauseState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23824,"src":"17407:25:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bool_$returns$__$","typeString":"function (bool)"}},"id":23782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17407:31:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23783,"nodeType":"ExpressionStatement","src":"17407:31:69"}]},"documentation":{"id":23773,"nodeType":"StructuredDocumentation","src":"17292:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"e085c5a8","id":23785,"implemented":true,"kind":"function","modifiers":[{"id":23776,"kind":"modifierInvocation","modifierName":{"id":23775,"name":"onlyVaultDelegateCall","nameLocations":["17362:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":22883,"src":"17362:21:69"},"nodeType":"ModifierInvocation","src":"17362:21:69"},{"id":23778,"kind":"modifierInvocation","modifierName":{"id":23777,"name":"authenticate","nameLocations":["17384:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":5446,"src":"17384:12:69"},"nodeType":"ModifierInvocation","src":"17384:12:69"}],"name":"pauseVaultBuffers","nameLocation":"17333:17:69","nodeType":"FunctionDefinition","parameters":{"id":23774,"nodeType":"ParameterList","parameters":[],"src":"17350:2:69"},"returnParameters":{"id":23779,"nodeType":"ParameterList","parameters":[],"src":"17397:0:69"},"scope":24770,"src":"17324:121:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[3300],"body":{"id":23797,"nodeType":"Block","src":"17558:49:69","statements":[{"expression":{"arguments":[{"hexValue":"66616c7365","id":23794,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17594:5:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":23793,"name":"_setVaultBufferPauseState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23824,"src":"17568:25:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bool_$returns$__$","typeString":"function (bool)"}},"id":23795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17568:32:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23796,"nodeType":"ExpressionStatement","src":"17568:32:69"}]},"documentation":{"id":23786,"nodeType":"StructuredDocumentation","src":"17451:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"b9212b49","id":23798,"implemented":true,"kind":"function","modifiers":[{"id":23789,"kind":"modifierInvocation","modifierName":{"id":23788,"name":"onlyVaultDelegateCall","nameLocations":["17523:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":22883,"src":"17523:21:69"},"nodeType":"ModifierInvocation","src":"17523:21:69"},{"id":23791,"kind":"modifierInvocation","modifierName":{"id":23790,"name":"authenticate","nameLocations":["17545:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":5446,"src":"17545:12:69"},"nodeType":"ModifierInvocation","src":"17545:12:69"}],"name":"unpauseVaultBuffers","nameLocation":"17492:19:69","nodeType":"FunctionDefinition","parameters":{"id":23787,"nodeType":"ParameterList","parameters":[],"src":"17511:2:69"},"returnParameters":{"id":23792,"nodeType":"ParameterList","parameters":[],"src":"17558:0:69"},"scope":24770,"src":"17483:124:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":23823,"nodeType":"Block","src":"17669:210:69","statements":[{"assignments":[23805],"declarations":[{"constant":false,"id":23805,"mutability":"mutable","name":"vaultState","nameLocation":"17694:10:69","nodeType":"VariableDeclaration","scope":23823,"src":"17679:25:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"},"typeName":{"id":23804,"nodeType":"UserDefinedTypeName","pathNode":{"id":23803,"name":"VaultStateBits","nameLocations":["17679:14:69"],"nodeType":"IdentifierPath","referencedDeclaration":31184,"src":"17679:14:69"},"referencedDeclaration":31184,"src":"17679:14:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"visibility":"internal"}],"id":23807,"initialValue":{"id":23806,"name":"_vaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28272,"src":"17707:15:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"nodeType":"VariableDeclarationStatement","src":"17679:43:69"},{"expression":{"id":23813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23808,"name":"vaultState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23805,"src":"17732:10:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":23811,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23800,"src":"17773:6:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":23809,"name":"vaultState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23805,"src":"17745:10:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"id":23810,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17756:16:69","memberName":"setBuffersPaused","nodeType":"MemberAccess","referencedDeclaration":31324,"src":"17745:27:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_VaultStateBits_$31184_$_t_bool_$returns$_t_userDefinedValueType$_VaultStateBits_$31184_$attached_to$_t_userDefinedValueType$_VaultStateBits_$31184_$","typeString":"function (VaultStateBits,bool) pure returns (VaultStateBits)"}},"id":23812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17745:35:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"src":"17732:48:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"id":23814,"nodeType":"ExpressionStatement","src":"17732:48:69"},{"expression":{"id":23817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23815,"name":"_vaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28272,"src":"17790:15:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":23816,"name":"vaultState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23805,"src":"17808:10:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"src":"17790:28:69","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"id":23818,"nodeType":"ExpressionStatement","src":"17790:28:69"},{"eventCall":{"arguments":[{"id":23820,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23800,"src":"17865:6:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":23819,"name":"VaultBuffersPausedStateChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3997,"src":"17834:30:69","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bool_$returns$__$","typeString":"function (bool)"}},"id":23821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17834:38:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23822,"nodeType":"EmitStatement","src":"17829:43:69"}]},"id":23824,"implemented":true,"kind":"function","modifiers":[],"name":"_setVaultBufferPauseState","nameLocation":"17622:25:69","nodeType":"FunctionDefinition","parameters":{"id":23801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23800,"mutability":"mutable","name":"paused","nameLocation":"17653:6:69","nodeType":"VariableDeclaration","scope":23824,"src":"17648:11:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":23799,"name":"bool","nodeType":"ElementaryTypeName","src":"17648:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"17647:13:69"},"returnParameters":{"id":23802,"nodeType":"ParameterList","parameters":[],"src":"17669:0:69"},"scope":24770,"src":"17613:266:69","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"baseFunctions":[3317],"body":{"id":23957,"nodeType":"Block","src":"18284:2026:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":23849,"name":"_bufferAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28309,"src":"18298:13:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_address_$","typeString":"mapping(contract IERC4626 => address)"}},"id":23851,"indexExpression":{"id":23850,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23828,"src":"18312:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18298:27:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":23854,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18337:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":23853,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18329:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23852,"name":"address","nodeType":"ElementaryTypeName","src":"18329:7:69","typeDescriptions":{}}},"id":23855,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18329:10:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"18298:41:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23862,"nodeType":"IfStatement","src":"18294:117:69","trueBody":{"id":23861,"nodeType":"Block","src":"18341:70:69","statements":[{"errorCall":{"arguments":[{"id":23858,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23828,"src":"18387:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}],"id":23857,"name":"BufferAlreadyInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3676,"src":"18362:24:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC4626_$39833_$returns$_t_error_$","typeString":"function (contract IERC4626) pure returns (error)"}},"id":23859,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18362:38:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23860,"nodeType":"RevertStatement","src":"18355:45:69"}]}},{"assignments":[23864],"declarations":[{"constant":false,"id":23864,"mutability":"mutable","name":"underlyingToken","nameLocation":"18429:15:69","nodeType":"VariableDeclaration","scope":23957,"src":"18421:23:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23863,"name":"address","nodeType":"ElementaryTypeName","src":"18421:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":23868,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23865,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23828,"src":"18447:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"id":23866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18460:5:69","memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":39702,"src":"18447:18:69","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":23867,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18447:20:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"18421:46:69"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":23874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23869,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23864,"src":"18482:15:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":23872,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18509:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":23871,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18501:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":23870,"name":"address","nodeType":"ElementaryTypeName","src":"18501:7:69","typeDescriptions":{}}},"id":23873,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18501:10:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"18482:29:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23880,"nodeType":"IfStatement","src":"18478:272:69","trueBody":{"id":23879,"nodeType":"Block","src":"18513:237:69","statements":[{"errorCall":{"arguments":[{"id":23876,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23828,"src":"18726:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}],"id":23875,"name":"InvalidUnderlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3699,"src":"18703:22:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC4626_$39833_$returns$_t_error_$","typeString":"function (contract IERC4626) pure returns (error)"}},"id":23877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18703:36:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23878,"nodeType":"RevertStatement","src":"18696:43:69"}]}},{"expression":{"id":23885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":23881,"name":"_bufferAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28309,"src":"18819:13:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_address_$","typeString":"mapping(contract IERC4626 => address)"}},"id":23883,"indexExpression":{"id":23882,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23828,"src":"18833:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"18819:27:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":23884,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23864,"src":"18849:15:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"18819:45:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":23886,"nodeType":"ExpressionStatement","src":"18819:45:69"},{"expression":{"arguments":[{"arguments":[{"id":23889,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23864,"src":"18940:15:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":23888,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"18933:6:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":23890,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18933:23:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":23891,"name":"amountUnderlyingRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23830,"src":"18958:19:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23887,"name":"_takeDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24908,"src":"18923:9:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":23892,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18923:55:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23893,"nodeType":"ExpressionStatement","src":"18923:55:69"},{"expression":{"arguments":[{"id":23895,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23828,"src":"18998:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":23896,"name":"amountWrappedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23832,"src":"19012:16:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23894,"name":"_takeDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24908,"src":"18988:9:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":23897,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18988:41:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23898,"nodeType":"ExpressionStatement","src":"18988:41:69"},{"assignments":[23900],"declarations":[{"constant":false,"id":23900,"mutability":"mutable","name":"bufferBalances","nameLocation":"19083:14:69","nodeType":"VariableDeclaration","scope":23957,"src":"19075:22:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23899,"name":"bytes32","nodeType":"ElementaryTypeName","src":"19075:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":23906,"initialValue":{"arguments":[{"id":23903,"name":"amountUnderlyingRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23830,"src":"19135:19:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":23904,"name":"amountWrappedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23832,"src":"19156:16:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":23901,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6344,"src":"19100:18:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PackedTokenBalance_$6344_$","typeString":"type(library PackedTokenBalance)"}},"id":23902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19119:15:69","memberName":"toPackedBalance","nodeType":"MemberAccess","referencedDeclaration":6303,"src":"19100:34:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":23905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19100:73:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"19075:98:69"},{"expression":{"id":23911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":23907,"name":"_bufferTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28292,"src":"19183:20:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_bytes32_$","typeString":"mapping(contract IERC4626 => bytes32)"}},"id":23909,"indexExpression":{"id":23908,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23828,"src":"19204:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"19183:34:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":23910,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23900,"src":"19220:14:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"19183:51:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":23912,"nodeType":"ExpressionStatement","src":"19183:51:69"},{"expression":{"id":23920,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23913,"name":"issuedShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23847,"src":"19555:12:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":23916,"name":"amountWrappedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23832,"src":"19597:16:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":23914,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23828,"src":"19570:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"id":23915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19583:13:69","memberName":"previewRedeem","nodeType":"MemberAccess","referencedDeclaration":39820,"src":"19570:26:69","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view external returns (uint256)"}},"id":23917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19570:44:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":23918,"name":"amountUnderlyingRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23830,"src":"19617:19:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19570:66:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19555:81:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23921,"nodeType":"ExpressionStatement","src":"19555:81:69"},{"expression":{"arguments":[{"id":23923,"name":"issuedShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23847,"src":"19678:12:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23922,"name":"_ensureBufferMinimumTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24606,"src":"19646:31:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":23924,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19646:45:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23925,"nodeType":"ExpressionStatement","src":"19646:45:69"},{"expression":{"id":23928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":23926,"name":"issuedShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23847,"src":"19899:12:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":23927,"name":"_BUFFER_MINIMUM_TOTAL_SUPPLY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22873,"src":"19915:28:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19899:44:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":23929,"nodeType":"ExpressionStatement","src":"19899:44:69"},{"expression":{"arguments":[{"id":23931,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23828,"src":"19986:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}],"id":23930,"name":"_mintMinimumBufferSupplyReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24138,"src":"19954:31:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC4626_$39833_$returns$__$","typeString":"function (contract IERC4626)"}},"id":23932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19954:45:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23933,"nodeType":"ExpressionStatement","src":"19954:45:69"},{"expression":{"arguments":[{"id":23935,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23828,"src":"20027:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":23936,"name":"sharesOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23836,"src":"20041:11:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":23937,"name":"issuedShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23847,"src":"20054:12:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23934,"name":"_mintBufferShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24192,"src":"20009:17:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC4626_$39833_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC4626,address,uint256)"}},"id":23938,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20009:58:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23939,"nodeType":"ExpressionStatement","src":"20009:58:69"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":23942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":23940,"name":"issuedShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23847,"src":"20082:12:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":23941,"name":"minIssuedShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23834,"src":"20097:15:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20082:30:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":23949,"nodeType":"IfStatement","src":"20078:119:69","trueBody":{"id":23948,"nodeType":"Block","src":"20114:83:69","statements":[{"errorCall":{"arguments":[{"id":23944,"name":"issuedShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23847,"src":"20156:12:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":23945,"name":"minIssuedShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23834,"src":"20170:15:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":23943,"name":"IssuedSharesBelowMin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3746,"src":"20135:20:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":23946,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20135:51:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":23947,"nodeType":"RevertStatement","src":"20128:58:69"}]}},{"eventCall":{"arguments":[{"id":23951,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23828,"src":"20235:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":23952,"name":"amountUnderlyingRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23830,"src":"20249:19:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":23953,"name":"amountWrappedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23832,"src":"20270:16:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":23954,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23900,"src":"20288:14:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":23950,"name":"LiquidityAddedToBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3960,"src":"20212:22:69","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$_t_bytes32_$returns$__$","typeString":"function (contract IERC4626,uint256,uint256,bytes32)"}},"id":23955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20212:91:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23956,"nodeType":"EmitStatement","src":"20207:96:69"}]},"documentation":{"id":23825,"nodeType":"StructuredDocumentation","src":"17885:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"653eb3b0","id":23958,"implemented":true,"kind":"function","modifiers":[{"id":23839,"kind":"modifierInvocation","modifierName":{"id":23838,"name":"onlyVaultDelegateCall","nameLocations":["18136:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":22883,"src":"18136:21:69"},"nodeType":"ModifierInvocation","src":"18136:21:69"},{"id":23841,"kind":"modifierInvocation","modifierName":{"id":23840,"name":"onlyWhenUnlocked","nameLocations":["18166:16:69"],"nodeType":"IdentifierPath","referencedDeclaration":24848,"src":"18166:16:69"},"nodeType":"ModifierInvocation","src":"18166:16:69"},{"id":23843,"kind":"modifierInvocation","modifierName":{"id":23842,"name":"whenVaultBuffersAreNotPaused","nameLocations":["18191:28:69"],"nodeType":"IdentifierPath","referencedDeclaration":25096,"src":"18191:28:69"},"nodeType":"ModifierInvocation","src":"18191:28:69"},{"id":23845,"kind":"modifierInvocation","modifierName":{"id":23844,"name":"nonReentrant","nameLocations":["18228:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"18228:12:69"},"nodeType":"ModifierInvocation","src":"18228:12:69"}],"name":"initializeBuffer","nameLocation":"17926:16:69","nodeType":"FunctionDefinition","parameters":{"id":23837,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23828,"mutability":"mutable","name":"wrappedToken","nameLocation":"17961:12:69","nodeType":"VariableDeclaration","scope":23958,"src":"17952:21:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":23827,"nodeType":"UserDefinedTypeName","pathNode":{"id":23826,"name":"IERC4626","nameLocations":["17952:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"17952:8:69"},"referencedDeclaration":39833,"src":"17952:8:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":23830,"mutability":"mutable","name":"amountUnderlyingRaw","nameLocation":"17991:19:69","nodeType":"VariableDeclaration","scope":23958,"src":"17983:27:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23829,"name":"uint256","nodeType":"ElementaryTypeName","src":"17983:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23832,"mutability":"mutable","name":"amountWrappedRaw","nameLocation":"18028:16:69","nodeType":"VariableDeclaration","scope":23958,"src":"18020:24:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23831,"name":"uint256","nodeType":"ElementaryTypeName","src":"18020:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23834,"mutability":"mutable","name":"minIssuedShares","nameLocation":"18062:15:69","nodeType":"VariableDeclaration","scope":23958,"src":"18054:23:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23833,"name":"uint256","nodeType":"ElementaryTypeName","src":"18054:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23836,"mutability":"mutable","name":"sharesOwner","nameLocation":"18095:11:69","nodeType":"VariableDeclaration","scope":23958,"src":"18087:19:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23835,"name":"address","nodeType":"ElementaryTypeName","src":"18087:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17942:170:69"},"returnParameters":{"id":23848,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23847,"mutability":"mutable","name":"issuedShares","nameLocation":"18266:12:69","nodeType":"VariableDeclaration","scope":23958,"src":"18258:20:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23846,"name":"uint256","nodeType":"ElementaryTypeName","src":"18258:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18257:22:69"},"scope":24770,"src":"17917:2393:69","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[3336],"body":{"id":24104,"nodeType":"Block","src":"20809:2167:69","statements":[{"assignments":[23989],"declarations":[{"constant":false,"id":23989,"mutability":"mutable","name":"underlyingToken","nameLocation":"20877:15:69","nodeType":"VariableDeclaration","scope":24104,"src":"20869:23:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23988,"name":"address","nodeType":"ElementaryTypeName","src":"20869:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":23993,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":23990,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23962,"src":"20895:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"id":23991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20908:5:69","memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":39702,"src":"20895:18:69","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":23992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20895:20:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"20869:46:69"},{"expression":{"arguments":[{"id":23995,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23962,"src":"20951:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":23996,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23989,"src":"20965:15:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_address","typeString":"address"}],"id":23994,"name":"_ensureCorrectBufferAsset","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25257,"src":"20925:25:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC4626_$39833_$_t_address_$returns$__$","typeString":"function (contract IERC4626,address) view"}},"id":23997,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20925:56:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":23998,"nodeType":"ExpressionStatement","src":"20925:56:69"},{"assignments":[24000],"declarations":[{"constant":false,"id":24000,"mutability":"mutable","name":"bufferBalances","nameLocation":"21000:14:69","nodeType":"VariableDeclaration","scope":24104,"src":"20992:22:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":23999,"name":"bytes32","nodeType":"ElementaryTypeName","src":"20992:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":24004,"initialValue":{"baseExpression":{"id":24001,"name":"_bufferTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28292,"src":"21017:20:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_bytes32_$","typeString":"mapping(contract IERC4626 => bytes32)"}},"id":24003,"indexExpression":{"id":24002,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23962,"src":"21038:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21017:34:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"20992:59:69"},{"assignments":[24006],"declarations":[{"constant":false,"id":24006,"mutability":"mutable","name":"totalShares","nameLocation":"21618:11:69","nodeType":"VariableDeclaration","scope":24104,"src":"21610:19:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24005,"name":"uint256","nodeType":"ElementaryTypeName","src":"21610:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24010,"initialValue":{"baseExpression":{"id":24007,"name":"_bufferTotalShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28304,"src":"21632:18:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_uint256_$","typeString":"mapping(contract IERC4626 => uint256)"}},"id":24009,"indexExpression":{"id":24008,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23962,"src":"21651:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21632:32:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"21610:54:69"},{"expression":{"id":24019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24011,"name":"amountUnderlyingRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23984,"src":"21674:19:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":24016,"name":"exactSharesToIssue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23968,"src":"21736:18:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24017,"name":"totalShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24006,"src":"21756:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24012,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24000,"src":"21696:14:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":24013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21711:13:69","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":6222,"src":"21696:28:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":24014,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21696:30:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21727:8:69","memberName":"mulDivUp","nodeType":"MemberAccess","referencedDeclaration":8034,"src":"21696:39:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":24018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21696:72:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21674:94:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24020,"nodeType":"ExpressionStatement","src":"21674:94:69"},{"expression":{"id":24029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24021,"name":"amountWrappedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23986,"src":"21778:16:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":24026,"name":"exactSharesToIssue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23968,"src":"21841:18:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24027,"name":"totalShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24006,"src":"21861:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24022,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24000,"src":"21797:14:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":24023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21812:17:69","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":6239,"src":"21797:32:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":24024,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21797:34:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21832:8:69","memberName":"mulDivUp","nodeType":"MemberAccess","referencedDeclaration":8034,"src":"21797:43:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":24028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21797:76:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21778:95:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24030,"nodeType":"ExpressionStatement","src":"21778:95:69"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24031,"name":"amountUnderlyingRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23984,"src":"21888:19:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":24032,"name":"maxAmountUnderlyingInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23964,"src":"21910:24:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21888:46:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24043,"nodeType":"IfStatement","src":"21884:172:69","trueBody":{"id":24042,"nodeType":"Block","src":"21936:120:69","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":24036,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23989,"src":"21981:15:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24035,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"21974:6:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":24037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21974:23:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":24038,"name":"amountUnderlyingRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23984,"src":"21999:19:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24039,"name":"maxAmountUnderlyingInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23964,"src":"22020:24:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24034,"name":"AmountInAboveMax","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3548,"src":"21957:16:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$40109_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (contract IERC20,uint256,uint256) pure returns (error)"}},"id":24040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21957:88:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24041,"nodeType":"RevertStatement","src":"21950:95:69"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24044,"name":"amountWrappedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23986,"src":"22070:16:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":24045,"name":"maxAmountWrappedInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23966,"src":"22089:21:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22070:40:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24056,"nodeType":"IfStatement","src":"22066:157:69","trueBody":{"id":24055,"nodeType":"Block","src":"22112:111:69","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":24049,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23962,"src":"22157:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}],"id":24048,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"22150:6:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":24050,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22150:20:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":24051,"name":"amountWrappedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23986,"src":"22172:16:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24052,"name":"maxAmountWrappedInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23966,"src":"22190:21:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24047,"name":"AmountInAboveMax","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3548,"src":"22133:16:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$40109_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (contract IERC20,uint256,uint256) pure returns (error)"}},"id":24053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22133:79:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24054,"nodeType":"RevertStatement","src":"22126:86:69"}]}},{"expression":{"arguments":[{"arguments":[{"id":24059,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23989,"src":"22330:15:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24058,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"22323:6:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":24060,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22323:23:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":24061,"name":"amountUnderlyingRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23984,"src":"22348:19:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24057,"name":"_takeDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24908,"src":"22313:9:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":24062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22313:55:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24063,"nodeType":"ExpressionStatement","src":"22313:55:69"},{"expression":{"arguments":[{"id":24065,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23962,"src":"22388:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":24066,"name":"amountWrappedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23986,"src":"22402:16:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24064,"name":"_takeDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24908,"src":"22378:9:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":24067,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22378:41:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24068,"nodeType":"ExpressionStatement","src":"22378:41:69"},{"expression":{"id":24083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24069,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24000,"src":"22491:14:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24072,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24000,"src":"22556:14:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":24073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22571:13:69","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":6222,"src":"22556:28:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":24074,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22556:30:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":24075,"name":"amountUnderlyingRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23984,"src":"22589:19:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22556:52:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24077,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24000,"src":"22622:14:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":24078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22637:17:69","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":6239,"src":"22622:32:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":24079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22622:34:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":24080,"name":"amountWrappedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23986,"src":"22659:16:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22622:53:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24070,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6344,"src":"22508:18:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PackedTokenBalance_$6344_$","typeString":"type(library PackedTokenBalance)"}},"id":24071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22527:15:69","memberName":"toPackedBalance","nodeType":"MemberAccess","referencedDeclaration":6303,"src":"22508:34:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":24082,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22508:177:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"22491:194:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":24084,"nodeType":"ExpressionStatement","src":"22491:194:69"},{"expression":{"id":24089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":24085,"name":"_bufferTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28292,"src":"22695:20:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_bytes32_$","typeString":"mapping(contract IERC4626 => bytes32)"}},"id":24087,"indexExpression":{"id":24086,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23962,"src":"22716:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22695:34:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":24088,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24000,"src":"22732:14:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"22695:51:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":24090,"nodeType":"ExpressionStatement","src":"22695:51:69"},{"expression":{"arguments":[{"id":24092,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23962,"src":"22816:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":24093,"name":"sharesOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23970,"src":"22830:11:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24094,"name":"exactSharesToIssue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23968,"src":"22843:18:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24091,"name":"_mintBufferShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24192,"src":"22798:17:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC4626_$39833_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC4626,address,uint256)"}},"id":24095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22798:64:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24096,"nodeType":"ExpressionStatement","src":"22798:64:69"},{"eventCall":{"arguments":[{"id":24098,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23962,"src":"22901:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":24099,"name":"amountUnderlyingRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23984,"src":"22915:19:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24100,"name":"amountWrappedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23986,"src":"22936:16:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24101,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24000,"src":"22954:14:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":24097,"name":"LiquidityAddedToBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3960,"src":"22878:22:69","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$_t_bytes32_$returns$__$","typeString":"function (contract IERC4626,uint256,uint256,bytes32)"}},"id":24102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22878:91:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24103,"nodeType":"EmitStatement","src":"22873:96:69"}]},"documentation":{"id":23959,"nodeType":"StructuredDocumentation","src":"20316:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"e2a92b1a","id":24105,"implemented":true,"kind":"function","modifiers":[{"id":23973,"kind":"modifierInvocation","modifierName":{"id":23972,"name":"onlyVaultDelegateCall","nameLocations":["20584:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":22883,"src":"20584:21:69"},"nodeType":"ModifierInvocation","src":"20584:21:69"},{"id":23975,"kind":"modifierInvocation","modifierName":{"id":23974,"name":"onlyWhenUnlocked","nameLocations":["20614:16:69"],"nodeType":"IdentifierPath","referencedDeclaration":24848,"src":"20614:16:69"},"nodeType":"ModifierInvocation","src":"20614:16:69"},{"id":23977,"kind":"modifierInvocation","modifierName":{"id":23976,"name":"whenVaultBuffersAreNotPaused","nameLocations":["20639:28:69"],"nodeType":"IdentifierPath","referencedDeclaration":25096,"src":"20639:28:69"},"nodeType":"ModifierInvocation","src":"20639:28:69"},{"arguments":[{"id":23979,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23962,"src":"20698:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}}],"id":23980,"kind":"modifierInvocation","modifierName":{"id":23978,"name":"withInitializedBuffer","nameLocations":["20676:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":25214,"src":"20676:21:69"},"nodeType":"ModifierInvocation","src":"20676:35:69"},{"id":23982,"kind":"modifierInvocation","modifierName":{"id":23981,"name":"nonReentrant","nameLocations":["20720:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"20720:12:69"},"nodeType":"ModifierInvocation","src":"20720:12:69"}],"name":"addLiquidityToBuffer","nameLocation":"20357:20:69","nodeType":"FunctionDefinition","parameters":{"id":23971,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23962,"mutability":"mutable","name":"wrappedToken","nameLocation":"20396:12:69","nodeType":"VariableDeclaration","scope":24105,"src":"20387:21:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":23961,"nodeType":"UserDefinedTypeName","pathNode":{"id":23960,"name":"IERC4626","nameLocations":["20387:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"20387:8:69"},"referencedDeclaration":39833,"src":"20387:8:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":23964,"mutability":"mutable","name":"maxAmountUnderlyingInRaw","nameLocation":"20426:24:69","nodeType":"VariableDeclaration","scope":24105,"src":"20418:32:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23963,"name":"uint256","nodeType":"ElementaryTypeName","src":"20418:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23966,"mutability":"mutable","name":"maxAmountWrappedInRaw","nameLocation":"20468:21:69","nodeType":"VariableDeclaration","scope":24105,"src":"20460:29:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23965,"name":"uint256","nodeType":"ElementaryTypeName","src":"20460:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23968,"mutability":"mutable","name":"exactSharesToIssue","nameLocation":"20507:18:69","nodeType":"VariableDeclaration","scope":24105,"src":"20499:26:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23967,"name":"uint256","nodeType":"ElementaryTypeName","src":"20499:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23970,"mutability":"mutable","name":"sharesOwner","nameLocation":"20543:11:69","nodeType":"VariableDeclaration","scope":24105,"src":"20535:19:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":23969,"name":"address","nodeType":"ElementaryTypeName","src":"20535:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"20377:183:69"},"returnParameters":{"id":23987,"nodeType":"ParameterList","parameters":[{"constant":false,"id":23984,"mutability":"mutable","name":"amountUnderlyingRaw","nameLocation":"20758:19:69","nodeType":"VariableDeclaration","scope":24105,"src":"20750:27:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23983,"name":"uint256","nodeType":"ElementaryTypeName","src":"20750:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":23986,"mutability":"mutable","name":"amountWrappedRaw","nameLocation":"20787:16:69","nodeType":"VariableDeclaration","scope":24105,"src":"20779:24:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":23985,"name":"uint256","nodeType":"ElementaryTypeName","src":"20779:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20749:55:69"},"scope":24770,"src":"20348:2628:69","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":24137,"nodeType":"Block","src":"23055:252:69","statements":[{"expression":{"id":24115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":24111,"name":"_bufferTotalShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28304,"src":"23065:18:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_uint256_$","typeString":"mapping(contract IERC4626 => uint256)"}},"id":24113,"indexExpression":{"id":24112,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24108,"src":"23084:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23065:32:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":24114,"name":"_BUFFER_MINIMUM_TOTAL_SUPPLY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22873,"src":"23100:28:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23065:63:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24116,"nodeType":"ExpressionStatement","src":"23065:63:69"},{"expression":{"id":24126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":24117,"name":"_bufferLpShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28299,"src":"23138:15:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(contract IERC4626 => mapping(address => uint256))"}},"id":24123,"indexExpression":{"id":24118,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24108,"src":"23154:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23138:29:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":24124,"indexExpression":{"arguments":[{"hexValue":"30","id":24121,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23176:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":24120,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23168:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24119,"name":"address","nodeType":"ElementaryTypeName","src":"23168:7:69","typeDescriptions":{}}},"id":24122,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23168:10:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23138:41:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":24125,"name":"_BUFFER_MINIMUM_TOTAL_SUPPLY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22873,"src":"23182:28:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23138:72:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24127,"nodeType":"ExpressionStatement","src":"23138:72:69"},{"eventCall":{"arguments":[{"id":24129,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24108,"src":"23245:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"arguments":[{"hexValue":"30","id":24132,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23267:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":24131,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23259:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24130,"name":"address","nodeType":"ElementaryTypeName","src":"23259:7:69","typeDescriptions":{}}},"id":24133,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23259:10:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24134,"name":"_BUFFER_MINIMUM_TOTAL_SUPPLY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22873,"src":"23271:28:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24128,"name":"BufferSharesMinted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3970,"src":"23226:18:69","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_IERC4626_$39833_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC4626,address,uint256)"}},"id":24135,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23226:74:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24136,"nodeType":"EmitStatement","src":"23221:79:69"}]},"id":24138,"implemented":true,"kind":"function","modifiers":[],"name":"_mintMinimumBufferSupplyReserve","nameLocation":"22991:31:69","nodeType":"FunctionDefinition","parameters":{"id":24109,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24108,"mutability":"mutable","name":"wrappedToken","nameLocation":"23032:12:69","nodeType":"VariableDeclaration","scope":24138,"src":"23023:21:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":24107,"nodeType":"UserDefinedTypeName","pathNode":{"id":24106,"name":"IERC4626","nameLocations":["23023:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"23023:8:69"},"referencedDeclaration":39833,"src":"23023:8:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"23022:23:69"},"returnParameters":{"id":24110,"nodeType":"ParameterList","parameters":[],"src":"23055:0:69"},"scope":24770,"src":"22982:325:69","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":24191,"nodeType":"Block","src":"23400:744:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":24153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24148,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24143,"src":"23414:2:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":24151,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23428:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":24150,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23420:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24149,"name":"address","nodeType":"ElementaryTypeName","src":"23420:7:69","typeDescriptions":{}}},"id":24152,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23420:10:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"23414:16:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24158,"nodeType":"IfStatement","src":"23410:83:69","trueBody":{"id":24157,"nodeType":"Block","src":"23432:61:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":24154,"name":"BufferSharesInvalidReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3711,"src":"23453:27:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":24155,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23453:29:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24156,"nodeType":"RevertStatement","src":"23446:36:69"}]}},{"assignments":[24160],"declarations":[{"constant":false,"id":24160,"mutability":"mutable","name":"newTotalSupply","nameLocation":"23511:14:69","nodeType":"VariableDeclaration","scope":24191,"src":"23503:22:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24159,"name":"uint256","nodeType":"ElementaryTypeName","src":"23503:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24166,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":24161,"name":"_bufferTotalShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28304,"src":"23528:18:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_uint256_$","typeString":"mapping(contract IERC4626 => uint256)"}},"id":24163,"indexExpression":{"id":24162,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24141,"src":"23547:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23528:32:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":24164,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24145,"src":"23563:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23528:41:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"23503:66:69"},{"expression":{"arguments":[{"id":24168,"name":"newTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24160,"src":"23949:14:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24167,"name":"_ensureBufferMinimumTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24606,"src":"23917:31:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":24169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23917:47:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24170,"nodeType":"ExpressionStatement","src":"23917:47:69"},{"expression":{"id":24175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":24171,"name":"_bufferTotalShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28304,"src":"23975:18:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_uint256_$","typeString":"mapping(contract IERC4626 => uint256)"}},"id":24173,"indexExpression":{"id":24172,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24141,"src":"23994:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23975:32:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":24174,"name":"newTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24160,"src":"24010:14:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23975:49:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24176,"nodeType":"ExpressionStatement","src":"23975:49:69"},{"expression":{"id":24183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":24177,"name":"_bufferLpShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28299,"src":"24034:15:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(contract IERC4626 => mapping(address => uint256))"}},"id":24180,"indexExpression":{"id":24178,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24141,"src":"24050:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24034:29:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":24181,"indexExpression":{"id":24179,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24143,"src":"24064:2:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"24034:33:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":24182,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24145,"src":"24071:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"24034:43:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24184,"nodeType":"ExpressionStatement","src":"24034:43:69"},{"eventCall":{"arguments":[{"id":24186,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24141,"src":"24112:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":24187,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24143,"src":"24126:2:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24188,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24145,"src":"24130:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24185,"name":"BufferSharesMinted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3970,"src":"24093:18:69","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_IERC4626_$39833_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC4626,address,uint256)"}},"id":24189,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24093:44:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24190,"nodeType":"EmitStatement","src":"24088:49:69"}]},"id":24192,"implemented":true,"kind":"function","modifiers":[],"name":"_mintBufferShares","nameLocation":"23322:17:69","nodeType":"FunctionDefinition","parameters":{"id":24146,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24141,"mutability":"mutable","name":"wrappedToken","nameLocation":"23349:12:69","nodeType":"VariableDeclaration","scope":24192,"src":"23340:21:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":24140,"nodeType":"UserDefinedTypeName","pathNode":{"id":24139,"name":"IERC4626","nameLocations":["23340:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"23340:8:69"},"referencedDeclaration":39833,"src":"23340:8:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":24143,"mutability":"mutable","name":"to","nameLocation":"23371:2:69","nodeType":"VariableDeclaration","scope":24192,"src":"23363:10:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24142,"name":"address","nodeType":"ElementaryTypeName","src":"23363:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24145,"mutability":"mutable","name":"amount","nameLocation":"23383:6:69","nodeType":"VariableDeclaration","scope":24192,"src":"23375:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24144,"name":"uint256","nodeType":"ElementaryTypeName","src":"23375:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23339:51:69"},"returnParameters":{"id":24147,"nodeType":"ParameterList","parameters":[],"src":"23400:0:69"},"scope":24770,"src":"23313:831:69","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[3353],"body":{"id":24235,"nodeType":"Block","src":"24480:388:69","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":24217,"name":"VaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24770,"src":"24612:10:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VaultAdmin_$24770_$","typeString":"type(contract VaultAdmin)"}},"id":24218,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"24623:29:69","memberName":"removeLiquidityFromBufferHook","nodeType":"MemberAccess","referencedDeclaration":24427,"src":"24612:40:69","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$returns$_t_uint256_$_t_uint256_$","typeString":"function VaultAdmin.removeLiquidityFromBufferHook(contract IERC4626,uint256,uint256,uint256,address) returns (uint256,uint256)"}},{"components":[{"id":24219,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24196,"src":"24679:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":24220,"name":"sharesToRemove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24198,"src":"24693:14:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24221,"name":"minAmountUnderlyingOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24200,"src":"24709:25:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24222,"name":"minAmountWrappedOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24202,"src":"24736:22:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":24223,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"24760:3:69","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":24224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24764:6:69","memberName":"sender","nodeType":"MemberAccess","src":"24760:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":24225,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"24678:93:69","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$","typeString":"tuple(contract IERC4626,uint256,uint256,uint256,address)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$returns$_t_uint256_$_t_uint256_$","typeString":"function VaultAdmin.removeLiquidityFromBufferHook(contract IERC4626,uint256,uint256,uint256,address) returns (uint256,uint256)"},{"typeIdentifier":"t_tuple$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$","typeString":"tuple(contract IERC4626,uint256,uint256,uint256,address)"}],"expression":{"id":24215,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"24572:3:69","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":24216,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"24576:10:69","memberName":"encodeCall","nodeType":"MemberAccess","src":"24572:14:69","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":24226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24572:221:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":24213,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"24537:6:69","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":24214,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24544:6:69","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":4440,"src":"24537:13:69","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":24227,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24537:274:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":24229,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24830:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":24228,"name":"uint256","nodeType":"ElementaryTypeName","src":"24830:7:69","typeDescriptions":{}}},{"id":24231,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24839:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":24230,"name":"uint256","nodeType":"ElementaryTypeName","src":"24839:7:69","typeDescriptions":{}}}],"id":24232,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"24829:18:69","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$","typeString":"tuple(type(uint256),type(uint256))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$","typeString":"tuple(type(uint256),type(uint256))"}],"expression":{"id":24211,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"24509:3:69","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":24212,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"24513:6:69","memberName":"decode","nodeType":"MemberAccess","src":"24509:10:69","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":24233,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24509:352:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":24210,"id":24234,"nodeType":"Return","src":"24490:371:69"}]},"documentation":{"id":24193,"nodeType":"StructuredDocumentation","src":"24150:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"ebc7955c","id":24236,"implemented":true,"kind":"function","modifiers":[{"id":24205,"kind":"modifierInvocation","modifierName":{"id":24204,"name":"onlyVaultDelegateCall","nameLocations":["24378:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":22883,"src":"24378:21:69"},"nodeType":"ModifierInvocation","src":"24378:21:69"}],"name":"removeLiquidityFromBuffer","nameLocation":"24191:25:69","nodeType":"FunctionDefinition","parameters":{"id":24203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24196,"mutability":"mutable","name":"wrappedToken","nameLocation":"24235:12:69","nodeType":"VariableDeclaration","scope":24236,"src":"24226:21:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":24195,"nodeType":"UserDefinedTypeName","pathNode":{"id":24194,"name":"IERC4626","nameLocations":["24226:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"24226:8:69"},"referencedDeclaration":39833,"src":"24226:8:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":24198,"mutability":"mutable","name":"sharesToRemove","nameLocation":"24265:14:69","nodeType":"VariableDeclaration","scope":24236,"src":"24257:22:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24197,"name":"uint256","nodeType":"ElementaryTypeName","src":"24257:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24200,"mutability":"mutable","name":"minAmountUnderlyingOutRaw","nameLocation":"24297:25:69","nodeType":"VariableDeclaration","scope":24236,"src":"24289:33:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24199,"name":"uint256","nodeType":"ElementaryTypeName","src":"24289:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24202,"mutability":"mutable","name":"minAmountWrappedOutRaw","nameLocation":"24340:22:69","nodeType":"VariableDeclaration","scope":24236,"src":"24332:30:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24201,"name":"uint256","nodeType":"ElementaryTypeName","src":"24332:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"24216:152:69"},"returnParameters":{"id":24210,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24207,"mutability":"mutable","name":"removedUnderlyingBalanceRaw","nameLocation":"24417:27:69","nodeType":"VariableDeclaration","scope":24236,"src":"24409:35:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24206,"name":"uint256","nodeType":"ElementaryTypeName","src":"24409:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24209,"mutability":"mutable","name":"removedWrappedBalanceRaw","nameLocation":"24454:24:69","nodeType":"VariableDeclaration","scope":24236,"src":"24446:32:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24208,"name":"uint256","nodeType":"ElementaryTypeName","src":"24446:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"24408:71:69"},"scope":24770,"src":"24182:686:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24426,"nodeType":"Block","src":"26590:2795:69","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":24264,"name":"_isQueryContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25605,"src":"26604:15:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":24265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26604:17:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24273,"nodeType":"IfStatement","src":"26600:241:69","trueBody":{"id":24272,"nodeType":"Block","src":"26623:218:69","statements":[{"expression":{"arguments":[{"id":24267,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24240,"src":"26788:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":24268,"name":"sharesOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24248,"src":"26802:11:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24269,"name":"sharesToRemove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24242,"src":"26815:14:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24266,"name":"_queryModeBufferSharesIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24513,"src":"26757:30:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC4626_$39833_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC4626,address,uint256)"}},"id":24270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26757:73:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24271,"nodeType":"ExpressionStatement","src":"26757:73:69"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24274,"name":"sharesToRemove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24242,"src":"26855:14:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"baseExpression":{"baseExpression":{"id":24275,"name":"_bufferLpShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28299,"src":"26872:15:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(contract IERC4626 => mapping(address => uint256))"}},"id":24277,"indexExpression":{"id":24276,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24240,"src":"26888:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26872:29:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":24279,"indexExpression":{"id":24278,"name":"sharesOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24248,"src":"26902:11:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26872:42:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26855:59:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24285,"nodeType":"IfStatement","src":"26851:120:69","trueBody":{"id":24284,"nodeType":"Block","src":"26916:55:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":24281,"name":"NotEnoughBufferShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3685,"src":"26937:21:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":24282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26937:23:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24283,"nodeType":"RevertStatement","src":"26930:30:69"}]}},{"assignments":[24287],"declarations":[{"constant":false,"id":24287,"mutability":"mutable","name":"bufferBalances","nameLocation":"26989:14:69","nodeType":"VariableDeclaration","scope":24426,"src":"26981:22:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":24286,"name":"bytes32","nodeType":"ElementaryTypeName","src":"26981:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":24291,"initialValue":{"baseExpression":{"id":24288,"name":"_bufferTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28292,"src":"27006:20:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_bytes32_$","typeString":"mapping(contract IERC4626 => bytes32)"}},"id":24290,"indexExpression":{"id":24289,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24240,"src":"27027:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27006:34:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"26981:59:69"},{"assignments":[24293],"declarations":[{"constant":false,"id":24293,"mutability":"mutable","name":"totalShares","nameLocation":"27058:11:69","nodeType":"VariableDeclaration","scope":24426,"src":"27050:19:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24292,"name":"uint256","nodeType":"ElementaryTypeName","src":"27050:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24297,"initialValue":{"baseExpression":{"id":24294,"name":"_bufferTotalShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28304,"src":"27072:18:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_uint256_$","typeString":"mapping(contract IERC4626 => uint256)"}},"id":24296,"indexExpression":{"id":24295,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24240,"src":"27091:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27072:32:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"27050:54:69"},{"expression":{"id":24307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24298,"name":"removedUnderlyingBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24260,"src":"27115:27:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24299,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24287,"src":"27146:14:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":24300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27161:13:69","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":6222,"src":"27146:28:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":24301,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27146:30:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":24302,"name":"sharesToRemove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24242,"src":"27179:14:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27146:47:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":24304,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27145:49:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":24305,"name":"totalShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24293,"src":"27197:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27145:63:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27115:93:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24308,"nodeType":"ExpressionStatement","src":"27115:93:69"},{"expression":{"id":24318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24309,"name":"removedWrappedBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24262,"src":"27218:24:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24310,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24287,"src":"27246:14:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":24311,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27261:17:69","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":6239,"src":"27246:32:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":24312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27246:34:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":24313,"name":"sharesToRemove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24242,"src":"27283:14:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27246:51:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":24315,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27245:53:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":24316,"name":"totalShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24293,"src":"27301:11:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27245:67:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27218:94:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24319,"nodeType":"ExpressionStatement","src":"27218:94:69"},{"assignments":[24322],"declarations":[{"constant":false,"id":24322,"mutability":"mutable","name":"underlyingToken","nameLocation":"27751:15:69","nodeType":"VariableDeclaration","scope":24426,"src":"27744:22:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":24321,"nodeType":"UserDefinedTypeName","pathNode":{"id":24320,"name":"IERC20","nameLocations":["27744:6:69"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"27744:6:69"},"referencedDeclaration":40109,"src":"27744:6:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"id":24328,"initialValue":{"arguments":[{"baseExpression":{"id":24324,"name":"_bufferAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28309,"src":"27776:13:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_address_$","typeString":"mapping(contract IERC4626 => address)"}},"id":24326,"indexExpression":{"id":24325,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24240,"src":"27790:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27776:27:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24323,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"27769:6:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":24327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27769:35:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"27744:60:69"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24329,"name":"removedUnderlyingBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24260,"src":"27819:27:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":24330,"name":"minAmountUnderlyingOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24244,"src":"27849:25:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27819:55:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24341,"nodeType":"IfStatement","src":"27815:190:69","trueBody":{"id":24340,"nodeType":"Block","src":"27876:129:69","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":24334,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24322,"src":"27921:15:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":24333,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"27914:6:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":24335,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27914:23:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":24336,"name":"removedUnderlyingBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24260,"src":"27939:27:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24337,"name":"minAmountUnderlyingOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24244,"src":"27968:25:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24332,"name":"AmountInAboveMax","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3548,"src":"27897:16:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$40109_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (contract IERC20,uint256,uint256) pure returns (error)"}},"id":24338,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27897:97:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24339,"nodeType":"RevertStatement","src":"27890:104:69"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24342,"name":"removedWrappedBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24262,"src":"28019:24:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":24343,"name":"minAmountWrappedOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24246,"src":"28046:22:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28019:49:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24354,"nodeType":"IfStatement","src":"28015:175:69","trueBody":{"id":24353,"nodeType":"Block","src":"28070:120:69","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":24347,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24240,"src":"28115:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}],"id":24346,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"28108:6:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":24348,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28108:20:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":24349,"name":"removedWrappedBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24262,"src":"28130:24:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24350,"name":"minAmountWrappedOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24246,"src":"28156:22:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24345,"name":"AmountInAboveMax","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3548,"src":"28091:16:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$40109_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (contract IERC20,uint256,uint256) pure returns (error)"}},"id":24351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28091:88:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24352,"nodeType":"RevertStatement","src":"28084:95:69"}]}},{"expression":{"arguments":[{"id":24356,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24322,"src":"28214:15:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":24357,"name":"removedUnderlyingBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24260,"src":"28231:27:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24355,"name":"_supplyCredit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24891,"src":"28200:13:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":24358,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28200:59:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24359,"nodeType":"ExpressionStatement","src":"28200:59:69"},{"expression":{"arguments":[{"id":24361,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24240,"src":"28283:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":24362,"name":"removedWrappedBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24262,"src":"28297:24:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24360,"name":"_supplyCredit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24891,"src":"28269:13:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":24363,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28269:53:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24364,"nodeType":"ExpressionStatement","src":"28269:53:69"},{"expression":{"id":24379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24365,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24287,"src":"28333:14:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24368,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24287,"src":"28398:14:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":24369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28413:13:69","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":6222,"src":"28398:28:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":24370,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28398:30:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":24371,"name":"removedUnderlyingBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24260,"src":"28431:27:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28398:60:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24373,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24287,"src":"28472:14:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":24374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28487:17:69","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":6239,"src":"28472:32:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":24375,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28472:34:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":24376,"name":"removedWrappedBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24262,"src":"28509:24:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28472:61:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24366,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6344,"src":"28350:18:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PackedTokenBalance_$6344_$","typeString":"type(library PackedTokenBalance)"}},"id":24367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28369:15:69","memberName":"toPackedBalance","nodeType":"MemberAccess","referencedDeclaration":6303,"src":"28350:34:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":24378,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28350:193:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"28333:210:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":24380,"nodeType":"ExpressionStatement","src":"28333:210:69"},{"expression":{"id":24385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":24381,"name":"_bufferTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28292,"src":"28554:20:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_bytes32_$","typeString":"mapping(contract IERC4626 => bytes32)"}},"id":24383,"indexExpression":{"id":24382,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24240,"src":"28575:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"28554:34:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":24384,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24287,"src":"28591:14:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"28554:51:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":24386,"nodeType":"ExpressionStatement","src":"28554:51:69"},{"expression":{"arguments":[{"id":24388,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24240,"src":"28698:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":24389,"name":"sharesOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24248,"src":"28712:11:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24390,"name":"sharesToRemove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24242,"src":"28725:14:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24387,"name":"_burnBufferShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24481,"src":"28680:17:69","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC4626_$39833_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC4626,address,uint256)"}},"id":24391,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28680:60:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24392,"nodeType":"ExpressionStatement","src":"28680:60:69"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24393,"name":"removedUnderlyingBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24260,"src":"28930:27:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":24394,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28960:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"28930:31:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24405,"nodeType":"IfStatement","src":"28926:134:69","trueBody":{"id":24404,"nodeType":"Block","src":"28963:97:69","statements":[{"expression":{"arguments":[{"id":24399,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24322,"src":"28991:15:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":24400,"name":"sharesOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24248,"src":"29008:11:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24401,"name":"removedUnderlyingBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24260,"src":"29021:27:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24396,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"28977:6:69","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":24398,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28984:6:69","memberName":"sendTo","nodeType":"MemberAccess","referencedDeclaration":4462,"src":"28977:13:69","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$40109_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":24402,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28977:72:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24403,"nodeType":"ExpressionStatement","src":"28977:72:69"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24408,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24406,"name":"removedWrappedBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24262,"src":"29073:24:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":24407,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29100:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"29073:28:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24418,"nodeType":"IfStatement","src":"29069:125:69","trueBody":{"id":24417,"nodeType":"Block","src":"29103:91:69","statements":[{"expression":{"arguments":[{"id":24412,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24240,"src":"29131:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":24413,"name":"sharesOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24248,"src":"29145:11:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24414,"name":"removedWrappedBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24262,"src":"29158:24:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":24409,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"29117:6:69","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":24411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29124:6:69","memberName":"sendTo","nodeType":"MemberAccess","referencedDeclaration":4462,"src":"29117:13:69","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$40109_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":24415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29117:66:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24416,"nodeType":"ExpressionStatement","src":"29117:66:69"}]}},{"eventCall":{"arguments":[{"id":24420,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24240,"src":"29249:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":24421,"name":"removedUnderlyingBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24260,"src":"29275:27:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24422,"name":"removedWrappedBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24262,"src":"29316:24:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":24423,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24287,"src":"29354:14:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":24419,"name":"LiquidityRemovedFromBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3992,"src":"29209:26:69","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$_t_bytes32_$returns$__$","typeString":"function (contract IERC4626,uint256,uint256,bytes32)"}},"id":24424,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29209:169:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24425,"nodeType":"EmitStatement","src":"29204:174:69"}]},"documentation":{"id":24237,"nodeType":"StructuredDocumentation","src":"24874:1265:69","text":" @dev Internal hook for `removeLiquidityFromBuffer`. Can only be called by the Vault itself via\n `removeLiquidityFromBuffer`, which correctly forwards the real sender as the `sharesOwner`.\n This function must be reentrant because it calls the nonReentrant function `sendTo`. However,\n since `sendTo` is the only function that makes external calls, `removeLiquidityFromBufferHook`\n cannot reenter the Vault.\n @param wrappedToken Address of the wrapped token that implements IERC4626\n @param sharesToRemove Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's\n total shares\n @param minAmountUnderlyingOutRaw Minimum amount of underlying tokens to receive from the buffer. It is expressed\n in underlying token native decimals\n @param minAmountWrappedOutRaw Minimum amount of wrapped tokens to receive from the buffer. It is expressed in\n wrapped token native decimals\n @param sharesOwner Owner of the shares (`msg.sender` for `removeLiquidityFromBuffer` entrypoint)\n @return removedUnderlyingBalanceRaw Amount of underlying tokens returned to the user\n @return removedWrappedBalanceRaw Amount of wrapped tokens returned to the user"},"functionSelector":"5dcacd64","id":24427,"implemented":true,"kind":"function","modifiers":[{"id":24251,"kind":"modifierInvocation","modifierName":{"id":24250,"name":"onlyVaultDelegateCall","nameLocations":["26389:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":22883,"src":"26389:21:69"},"nodeType":"ModifierInvocation","src":"26389:21:69"},{"id":24253,"kind":"modifierInvocation","modifierName":{"id":24252,"name":"onlyVault","nameLocations":["26419:9:69"],"nodeType":"IdentifierPath","referencedDeclaration":28128,"src":"26419:9:69"},"nodeType":"ModifierInvocation","src":"26419:9:69"},{"id":24255,"kind":"modifierInvocation","modifierName":{"id":24254,"name":"onlyWhenUnlocked","nameLocations":["26437:16:69"],"nodeType":"IdentifierPath","referencedDeclaration":24848,"src":"26437:16:69"},"nodeType":"ModifierInvocation","src":"26437:16:69"},{"arguments":[{"id":24257,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24240,"src":"26484:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}}],"id":24258,"kind":"modifierInvocation","modifierName":{"id":24256,"name":"withInitializedBuffer","nameLocations":["26462:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":25214,"src":"26462:21:69"},"nodeType":"ModifierInvocation","src":"26462:35:69"}],"name":"removeLiquidityFromBufferHook","nameLocation":"26153:29:69","nodeType":"FunctionDefinition","parameters":{"id":24249,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24240,"mutability":"mutable","name":"wrappedToken","nameLocation":"26201:12:69","nodeType":"VariableDeclaration","scope":24427,"src":"26192:21:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":24239,"nodeType":"UserDefinedTypeName","pathNode":{"id":24238,"name":"IERC4626","nameLocations":["26192:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"26192:8:69"},"referencedDeclaration":39833,"src":"26192:8:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":24242,"mutability":"mutable","name":"sharesToRemove","nameLocation":"26231:14:69","nodeType":"VariableDeclaration","scope":24427,"src":"26223:22:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24241,"name":"uint256","nodeType":"ElementaryTypeName","src":"26223:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24244,"mutability":"mutable","name":"minAmountUnderlyingOutRaw","nameLocation":"26263:25:69","nodeType":"VariableDeclaration","scope":24427,"src":"26255:33:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24243,"name":"uint256","nodeType":"ElementaryTypeName","src":"26255:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24246,"mutability":"mutable","name":"minAmountWrappedOutRaw","nameLocation":"26306:22:69","nodeType":"VariableDeclaration","scope":24427,"src":"26298:30:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24245,"name":"uint256","nodeType":"ElementaryTypeName","src":"26298:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24248,"mutability":"mutable","name":"sharesOwner","nameLocation":"26346:11:69","nodeType":"VariableDeclaration","scope":24427,"src":"26338:19:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24247,"name":"address","nodeType":"ElementaryTypeName","src":"26338:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"26182:181:69"},"returnParameters":{"id":24263,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24260,"mutability":"mutable","name":"removedUnderlyingBalanceRaw","nameLocation":"26523:27:69","nodeType":"VariableDeclaration","scope":24427,"src":"26515:35:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24259,"name":"uint256","nodeType":"ElementaryTypeName","src":"26515:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24262,"mutability":"mutable","name":"removedWrappedBalanceRaw","nameLocation":"26560:24:69","nodeType":"VariableDeclaration","scope":24427,"src":"26552:32:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24261,"name":"uint256","nodeType":"ElementaryTypeName","src":"26552:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26514:71:69"},"scope":24770,"src":"26144:3241:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24480,"nodeType":"Block","src":"29480:497:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":24442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24437,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24432,"src":"29494:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":24440,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29510:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":24439,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29502:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24438,"name":"address","nodeType":"ElementaryTypeName","src":"29502:7:69","typeDescriptions":{}}},"id":24441,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29502:10:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"29494:18:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24447,"nodeType":"IfStatement","src":"29490:82:69","trueBody":{"id":24446,"nodeType":"Block","src":"29514:58:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":24443,"name":"BufferSharesInvalidOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3714,"src":"29535:24:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":24444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29535:26:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24445,"nodeType":"RevertStatement","src":"29528:33:69"}]}},{"assignments":[24449],"declarations":[{"constant":false,"id":24449,"mutability":"mutable","name":"newTotalSupply","nameLocation":"29590:14:69","nodeType":"VariableDeclaration","scope":24480,"src":"29582:22:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24448,"name":"uint256","nodeType":"ElementaryTypeName","src":"29582:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":24455,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":24450,"name":"_bufferTotalShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28304,"src":"29607:18:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_uint256_$","typeString":"mapping(contract IERC4626 => uint256)"}},"id":24452,"indexExpression":{"id":24451,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24430,"src":"29626:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29607:32:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":24453,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24434,"src":"29642:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29607:41:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"29582:66:69"},{"expression":{"arguments":[{"id":24457,"name":"newTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24449,"src":"29778:14:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24456,"name":"_ensureBufferMinimumTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24606,"src":"29746:31:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":24458,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29746:47:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24459,"nodeType":"ExpressionStatement","src":"29746:47:69"},{"expression":{"id":24464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":24460,"name":"_bufferTotalShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28304,"src":"29804:18:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_uint256_$","typeString":"mapping(contract IERC4626 => uint256)"}},"id":24462,"indexExpression":{"id":24461,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24430,"src":"29823:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"29804:32:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":24463,"name":"newTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24449,"src":"29839:14:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29804:49:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24465,"nodeType":"ExpressionStatement","src":"29804:49:69"},{"expression":{"id":24472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":24466,"name":"_bufferLpShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28299,"src":"29863:15:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(contract IERC4626 => mapping(address => uint256))"}},"id":24469,"indexExpression":{"id":24467,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24430,"src":"29879:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29863:29:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":24470,"indexExpression":{"id":24468,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24432,"src":"29893:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"29863:35:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":24471,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24434,"src":"29902:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29863:45:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24473,"nodeType":"ExpressionStatement","src":"29863:45:69"},{"eventCall":{"arguments":[{"id":24475,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24430,"src":"29943:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":24476,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24432,"src":"29957:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24477,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24434,"src":"29963:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24474,"name":"BufferSharesBurned","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3980,"src":"29924:18:69","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_IERC4626_$39833_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC4626,address,uint256)"}},"id":24478,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29924:46:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24479,"nodeType":"EmitStatement","src":"29919:51:69"}]},"id":24481,"implemented":true,"kind":"function","modifiers":[],"name":"_burnBufferShares","nameLocation":"29400:17:69","nodeType":"FunctionDefinition","parameters":{"id":24435,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24430,"mutability":"mutable","name":"wrappedToken","nameLocation":"29427:12:69","nodeType":"VariableDeclaration","scope":24481,"src":"29418:21:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":24429,"nodeType":"UserDefinedTypeName","pathNode":{"id":24428,"name":"IERC4626","nameLocations":["29418:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"29418:8:69"},"referencedDeclaration":39833,"src":"29418:8:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":24432,"mutability":"mutable","name":"from","nameLocation":"29449:4:69","nodeType":"VariableDeclaration","scope":24481,"src":"29441:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24431,"name":"address","nodeType":"ElementaryTypeName","src":"29441:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24434,"mutability":"mutable","name":"amount","nameLocation":"29463:6:69","nodeType":"VariableDeclaration","scope":24481,"src":"29455:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24433,"name":"uint256","nodeType":"ElementaryTypeName","src":"29455:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"29417:53:69"},"returnParameters":{"id":24436,"nodeType":"ParameterList","parameters":[],"src":"29480:0:69"},"scope":24770,"src":"29391:586:69","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":24512,"nodeType":"Block","src":"30159:347:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":24496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24492,"name":"EVMCallModeHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5808,"src":"30252:18:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_EVMCallModeHelpers_$5808_$","typeString":"type(library EVMCallModeHelpers)"}},"id":24493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30271:12:69","memberName":"isStaticCall","nodeType":"MemberAccess","referencedDeclaration":5807,"src":"30252:31:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":24494,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30252:33:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":24495,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"30289:5:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"30252:42:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24503,"nodeType":"IfStatement","src":"30248:114:69","trueBody":{"id":24502,"nodeType":"Block","src":"30296:66:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24497,"name":"EVMCallModeHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5808,"src":"30317:18:69","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_EVMCallModeHelpers_$5808_$","typeString":"type(library EVMCallModeHelpers)"}},"id":24499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30336:13:69","memberName":"NotStaticCall","nodeType":"MemberAccess","referencedDeclaration":5792,"src":"30317:32:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":24500,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30317:34:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24501,"nodeType":"RevertStatement","src":"30310:41:69"}]}},{"expression":{"id":24510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":24504,"name":"_bufferLpShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28299,"src":"30456:15:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(contract IERC4626 => mapping(address => uint256))"}},"id":24507,"indexExpression":{"id":24505,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24485,"src":"30472:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30456:29:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":24508,"indexExpression":{"id":24506,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24487,"src":"30486:2:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"30456:33:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":24509,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24489,"src":"30493:6:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30456:43:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24511,"nodeType":"ExpressionStatement","src":"30456:43:69"}]},"documentation":{"id":24482,"nodeType":"StructuredDocumentation","src":"29983:71:69","text":"@dev For query mode usage only, inside `removeLiquidityFromBuffer`."},"id":24513,"implemented":true,"kind":"function","modifiers":[],"name":"_queryModeBufferSharesIncrease","nameLocation":"30068:30:69","nodeType":"FunctionDefinition","parameters":{"id":24490,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24485,"mutability":"mutable","name":"wrappedToken","nameLocation":"30108:12:69","nodeType":"VariableDeclaration","scope":24513,"src":"30099:21:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":24484,"nodeType":"UserDefinedTypeName","pathNode":{"id":24483,"name":"IERC4626","nameLocations":["30099:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"30099:8:69"},"referencedDeclaration":39833,"src":"30099:8:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":24487,"mutability":"mutable","name":"to","nameLocation":"30130:2:69","nodeType":"VariableDeclaration","scope":24513,"src":"30122:10:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24486,"name":"address","nodeType":"ElementaryTypeName","src":"30122:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24489,"mutability":"mutable","name":"amount","nameLocation":"30142:6:69","nodeType":"VariableDeclaration","scope":24513,"src":"30134:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24488,"name":"uint256","nodeType":"ElementaryTypeName","src":"30134:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"30098:51:69"},"returnParameters":{"id":24491,"nodeType":"ParameterList","parameters":[],"src":"30159:0:69"},"scope":24770,"src":"30059:447:69","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[3362],"body":{"id":24528,"nodeType":"Block","src":"30675:51:69","statements":[{"expression":{"baseExpression":{"id":24524,"name":"_bufferAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28309,"src":"30692:13:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_address_$","typeString":"mapping(contract IERC4626 => address)"}},"id":24526,"indexExpression":{"id":24525,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24517,"src":"30706:12:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30692:27:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":24523,"id":24527,"nodeType":"Return","src":"30685:34:69"}]},"documentation":{"id":24514,"nodeType":"StructuredDocumentation","src":"30512:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"0387587d","id":24529,"implemented":true,"kind":"function","modifiers":[{"id":24520,"kind":"modifierInvocation","modifierName":{"id":24519,"name":"onlyVaultDelegateCall","nameLocations":["30619:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":22883,"src":"30619:21:69"},"nodeType":"ModifierInvocation","src":"30619:21:69"}],"name":"getBufferAsset","nameLocation":"30553:14:69","nodeType":"FunctionDefinition","parameters":{"id":24518,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24517,"mutability":"mutable","name":"wrappedToken","nameLocation":"30586:12:69","nodeType":"VariableDeclaration","scope":24529,"src":"30577:21:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":24516,"nodeType":"UserDefinedTypeName","pathNode":{"id":24515,"name":"IERC4626","nameLocations":["30577:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"30577:8:69"},"referencedDeclaration":39833,"src":"30577:8:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"30567:37:69"},"returnParameters":{"id":24523,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24522,"mutability":"mutable","name":"underlyingToken","nameLocation":"30658:15:69","nodeType":"VariableDeclaration","scope":24529,"src":"30650:23:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24521,"name":"address","nodeType":"ElementaryTypeName","src":"30650:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30649:25:69"},"scope":24770,"src":"30544:182:69","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3373],"body":{"id":24548,"nodeType":"Block","src":"30907:52:69","statements":[{"expression":{"baseExpression":{"baseExpression":{"id":24542,"name":"_bufferLpShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28299,"src":"30924:15:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(contract IERC4626 => mapping(address => uint256))"}},"id":24544,"indexExpression":{"id":24543,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24533,"src":"30940:5:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30924:22:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":24546,"indexExpression":{"id":24545,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24535,"src":"30947:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30924:28:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":24541,"id":24547,"nodeType":"Return","src":"30917:35:69"}]},"documentation":{"id":24530,"nodeType":"StructuredDocumentation","src":"30732:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"9385e39a","id":24549,"implemented":true,"kind":"function","modifiers":[{"id":24538,"kind":"modifierInvocation","modifierName":{"id":24537,"name":"onlyVaultDelegateCall","nameLocations":["30860:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":22883,"src":"30860:21:69"},"nodeType":"ModifierInvocation","src":"30860:21:69"}],"name":"getBufferOwnerShares","nameLocation":"30773:20:69","nodeType":"FunctionDefinition","parameters":{"id":24536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24533,"mutability":"mutable","name":"token","nameLocation":"30812:5:69","nodeType":"VariableDeclaration","scope":24549,"src":"30803:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":24532,"nodeType":"UserDefinedTypeName","pathNode":{"id":24531,"name":"IERC4626","nameLocations":["30803:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"30803:8:69"},"referencedDeclaration":39833,"src":"30803:8:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":24535,"mutability":"mutable","name":"user","nameLocation":"30835:4:69","nodeType":"VariableDeclaration","scope":24549,"src":"30827:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24534,"name":"address","nodeType":"ElementaryTypeName","src":"30827:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30793:52:69"},"returnParameters":{"id":24541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24540,"mutability":"mutable","name":"shares","nameLocation":"30899:6:69","nodeType":"VariableDeclaration","scope":24549,"src":"30891:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24539,"name":"uint256","nodeType":"ElementaryTypeName","src":"30891:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"30890:16:69"},"scope":24770,"src":"30764:195:69","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3382],"body":{"id":24564,"nodeType":"Block","src":"31104:49:69","statements":[{"expression":{"baseExpression":{"id":24560,"name":"_bufferTotalShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28304,"src":"31121:18:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_uint256_$","typeString":"mapping(contract IERC4626 => uint256)"}},"id":24562,"indexExpression":{"id":24561,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24553,"src":"31140:5:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"31121:25:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":24559,"id":24563,"nodeType":"Return","src":"31114:32:69"}]},"documentation":{"id":24550,"nodeType":"StructuredDocumentation","src":"30965:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"f2784e07","id":24565,"implemented":true,"kind":"function","modifiers":[{"id":24556,"kind":"modifierInvocation","modifierName":{"id":24555,"name":"onlyVaultDelegateCall","nameLocations":["31057:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":22883,"src":"31057:21:69"},"nodeType":"ModifierInvocation","src":"31057:21:69"}],"name":"getBufferTotalShares","nameLocation":"31006:20:69","nodeType":"FunctionDefinition","parameters":{"id":24554,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24553,"mutability":"mutable","name":"token","nameLocation":"31036:5:69","nodeType":"VariableDeclaration","scope":24565,"src":"31027:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":24552,"nodeType":"UserDefinedTypeName","pathNode":{"id":24551,"name":"IERC4626","nameLocations":["31027:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"31027:8:69"},"referencedDeclaration":39833,"src":"31027:8:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"31026:16:69"},"returnParameters":{"id":24559,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24558,"mutability":"mutable","name":"shares","nameLocation":"31096:6:69","nodeType":"VariableDeclaration","scope":24565,"src":"31088:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24557,"name":"uint256","nodeType":"ElementaryTypeName","src":"31088:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31087:16:69"},"scope":24770,"src":"30997:156:69","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3393],"body":{"id":24590,"nodeType":"Block","src":"31296:195:69","statements":[{"expression":{"components":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":24578,"name":"_bufferTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28292,"src":"31391:20:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_bytes32_$","typeString":"mapping(contract IERC4626 => bytes32)"}},"id":24580,"indexExpression":{"id":24579,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24569,"src":"31412:5:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"31391:27:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":24581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31419:13:69","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":6222,"src":"31391:41:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":24582,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31391:43:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":24583,"name":"_bufferTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28292,"src":"31436:20:69","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_bytes32_$","typeString":"mapping(contract IERC4626 => bytes32)"}},"id":24585,"indexExpression":{"id":24584,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24569,"src":"31457:5:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"31436:27:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":24586,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31464:17:69","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":6239,"src":"31436:45:69","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":24587,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31436:47:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":24588,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"31390:94:69","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":24577,"id":24589,"nodeType":"Return","src":"31383:101:69"}]},"documentation":{"id":24566,"nodeType":"StructuredDocumentation","src":"31159:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"4021fe0f","id":24591,"implemented":true,"kind":"function","modifiers":[{"id":24572,"kind":"modifierInvocation","modifierName":{"id":24571,"name":"onlyVaultDelegateCall","nameLocations":["31247:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":22883,"src":"31247:21:69"},"nodeType":"ModifierInvocation","src":"31247:21:69"}],"name":"getBufferBalance","nameLocation":"31200:16:69","nodeType":"FunctionDefinition","parameters":{"id":24570,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24569,"mutability":"mutable","name":"token","nameLocation":"31226:5:69","nodeType":"VariableDeclaration","scope":24591,"src":"31217:14:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":24568,"nodeType":"UserDefinedTypeName","pathNode":{"id":24567,"name":"IERC4626","nameLocations":["31217:8:69"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"31217:8:69"},"referencedDeclaration":39833,"src":"31217:8:69","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"31216:16:69"},"returnParameters":{"id":24577,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24574,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24591,"src":"31278:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24573,"name":"uint256","nodeType":"ElementaryTypeName","src":"31278:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":24576,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24591,"src":"31287:7:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24575,"name":"uint256","nodeType":"ElementaryTypeName","src":"31287:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31277:18:69"},"scope":24770,"src":"31191:300:69","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":24605,"nodeType":"Block","src":"31575:138:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24598,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24596,"name":"newTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24593,"src":"31589:14:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":24597,"name":"_BUFFER_MINIMUM_TOTAL_SUPPLY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22873,"src":"31606:28:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31589:45:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24604,"nodeType":"IfStatement","src":"31585:122:69","trueBody":{"id":24603,"nodeType":"Block","src":"31636:71:69","statements":[{"errorCall":{"arguments":[{"id":24600,"name":"newTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24593,"src":"31681:14:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":24599,"name":"BufferTotalSupplyTooLow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3719,"src":"31657:23:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":24601,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31657:39:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24602,"nodeType":"RevertStatement","src":"31650:46:69"}]}}]},"id":24606,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureBufferMinimumTotalSupply","nameLocation":"31506:31:69","nodeType":"FunctionDefinition","parameters":{"id":24594,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24593,"mutability":"mutable","name":"newTotalSupply","nameLocation":"31546:14:69","nodeType":"VariableDeclaration","scope":24606,"src":"31538:22:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24592,"name":"uint256","nodeType":"ElementaryTypeName","src":"31538:7:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31537:24:69"},"returnParameters":{"id":24595,"nodeType":"ParameterList","parameters":[],"src":"31575:0:69"},"scope":24770,"src":"31497:216:69","stateMutability":"pure","virtual":false,"visibility":"private"},{"baseFunctions":[3400],"body":{"id":24625,"nodeType":"Block","src":"32063:92:69","statements":[{"expression":{"id":24619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":24617,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28284,"src":"32073:11:69","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":24618,"name":"newAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24610,"src":"32087:13:69","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"}},"src":"32073:27:69","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"}},"id":24620,"nodeType":"ExpressionStatement","src":"32073:27:69"},{"eventCall":{"arguments":[{"id":24622,"name":"newAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24610,"src":"32134:13:69","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"}],"id":24621,"name":"AuthorizerChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3942,"src":"32116:17:69","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_contract$_IAuthorizer_$1455_$returns$__$","typeString":"function (contract IAuthorizer)"}},"id":24623,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32116:32:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24624,"nodeType":"EmitStatement","src":"32111:37:69"}]},"documentation":{"id":24607,"nodeType":"StructuredDocumentation","src":"31937:27:69","text":"@inheritdoc IVaultAdmin"},"functionSelector":"058a628f","id":24626,"implemented":true,"kind":"function","modifiers":[{"id":24613,"kind":"modifierInvocation","modifierName":{"id":24612,"name":"onlyVaultDelegateCall","nameLocations":["32028:21:69"],"nodeType":"IdentifierPath","referencedDeclaration":22883,"src":"32028:21:69"},"nodeType":"ModifierInvocation","src":"32028:21:69"},{"id":24615,"kind":"modifierInvocation","modifierName":{"id":24614,"name":"authenticate","nameLocations":["32050:12:69"],"nodeType":"IdentifierPath","referencedDeclaration":5446,"src":"32050:12:69"},"nodeType":"ModifierInvocation","src":"32050:12:69"}],"name":"setAuthorizer","nameLocation":"31978:13:69","nodeType":"FunctionDefinition","parameters":{"id":24611,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24610,"mutability":"mutable","name":"newAuthorizer","nameLocation":"32004:13:69","nodeType":"VariableDeclaration","scope":24626,"src":"31992:25:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"},"typeName":{"id":24609,"nodeType":"UserDefinedTypeName","pathNode":{"id":24608,"name":"IAuthorizer","nameLocations":["31992:11:69"],"nodeType":"IdentifierPath","referencedDeclaration":1455,"src":"31992:11:69"},"referencedDeclaration":1455,"src":"31992:11:69","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"31991:27:69"},"returnParameters":{"id":24616,"nodeType":"ParameterList","parameters":[],"src":"32063:0:69"},"scope":24770,"src":"31969:186:69","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":24645,"nodeType":"Block","src":"32325:115:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":24637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":24634,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"32339:3:69","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":24635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32343:6:69","memberName":"sender","nodeType":"MemberAccess","src":"32339:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":24636,"name":"roleAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24631,"src":"32353:11:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"32339:25:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24640,"nodeType":"IfStatement","src":"32335:62:69","trueBody":{"id":24639,"nodeType":"Block","src":"32366:31:69","statements":[{"functionReturnParameters":24633,"id":24638,"nodeType":"Return","src":"32380:7:69"}]}},{"expression":{"arguments":[{"id":24642,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24629,"src":"32428:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24641,"name":"_ensureAuthenticated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24703,"src":"32407:20:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":24643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32407:26:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24644,"nodeType":"ExpressionStatement","src":"32407:26:69"}]},"documentation":{"id":24627,"nodeType":"StructuredDocumentation","src":"32161:75:69","text":"@dev Authenticate by role; otherwise fall through and check governance."},"id":24646,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureAuthenticatedByRole","nameLocation":"32250:26:69","nodeType":"FunctionDefinition","parameters":{"id":24632,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24629,"mutability":"mutable","name":"pool","nameLocation":"32285:4:69","nodeType":"VariableDeclaration","scope":24646,"src":"32277:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24628,"name":"address","nodeType":"ElementaryTypeName","src":"32277:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24631,"mutability":"mutable","name":"roleAddress","nameLocation":"32299:11:69","nodeType":"VariableDeclaration","scope":24646,"src":"32291:19:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24630,"name":"address","nodeType":"ElementaryTypeName","src":"32291:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"32276:35:69"},"returnParameters":{"id":24633,"nodeType":"ParameterList","parameters":[],"src":"32325:0:69"},"scope":24770,"src":"32241:199:69","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":24675,"nodeType":"Block","src":"32636:241:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":24659,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24654,"name":"roleAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24651,"src":"32650:11:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":24657,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32673:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":24656,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32665:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24655,"name":"address","nodeType":"ElementaryTypeName","src":"32665:7:69","typeDescriptions":{}}},"id":24658,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32665:10:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"32650:25:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":24668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":24665,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"32794:3:69","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":24666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32798:6:69","memberName":"sender","nodeType":"MemberAccess","src":"32794:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":24667,"name":"roleAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24651,"src":"32808:11:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"32794:25:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24673,"nodeType":"IfStatement","src":"32790:81:69","trueBody":{"id":24672,"nodeType":"Block","src":"32821:50:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":24669,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":234,"src":"32842:16:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":24670,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32842:18:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24671,"nodeType":"RevertStatement","src":"32835:25:69"}]}},"id":24674,"nodeType":"IfStatement","src":"32646:225:69","trueBody":{"id":24664,"nodeType":"Block","src":"32677:107:69","statements":[{"expression":{"arguments":[{"id":24661,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24649,"src":"32768:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24660,"name":"_ensureAuthenticated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24703,"src":"32747:20:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":24662,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32747:26:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24663,"nodeType":"ExpressionStatement","src":"32747:26:69"}]}}]},"documentation":{"id":24647,"nodeType":"StructuredDocumentation","src":"32446:92:69","text":"@dev Authenticate exclusively by role; caller must match the `roleAddress`, if assigned."},"id":24676,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureAuthenticatedByExclusiveRole","nameLocation":"32552:35:69","nodeType":"FunctionDefinition","parameters":{"id":24652,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24649,"mutability":"mutable","name":"pool","nameLocation":"32596:4:69","nodeType":"VariableDeclaration","scope":24676,"src":"32588:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24648,"name":"address","nodeType":"ElementaryTypeName","src":"32588:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24651,"mutability":"mutable","name":"roleAddress","nameLocation":"32610:11:69","nodeType":"VariableDeclaration","scope":24676,"src":"32602:19:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24650,"name":"address","nodeType":"ElementaryTypeName","src":"32602:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"32587:35:69"},"returnParameters":{"id":24653,"nodeType":"ParameterList","parameters":[],"src":"32636:0:69"},"scope":24770,"src":"32543:334:69","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":24702,"nodeType":"Block","src":"32992:170:69","statements":[{"assignments":[24683],"declarations":[{"constant":false,"id":24683,"mutability":"mutable","name":"actionId","nameLocation":"33010:8:69","nodeType":"VariableDeclaration","scope":24702,"src":"33002:16:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":24682,"name":"bytes32","nodeType":"ElementaryTypeName","src":"33002:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":24688,"initialValue":{"arguments":[{"expression":{"id":24685,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"33033:3:69","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":24686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33037:3:69","memberName":"sig","nodeType":"MemberAccess","src":"33033:7:69","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"id":24684,"name":"getActionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5487,"src":"33021:11:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bytes32_$","typeString":"function (bytes4) view returns (bytes32)"}},"id":24687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33021:20:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"33002:39:69"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":24696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":24690,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24683,"src":"33068:8:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":24691,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"33078:3:69","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":24692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33082:6:69","memberName":"sender","nodeType":"MemberAccess","src":"33078:10:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24693,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24679,"src":"33090:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":24689,"name":"_canPerform","nodeType":"Identifier","overloadedDeclarations":[24725,24745],"referencedDeclaration":24745,"src":"33056:11:69","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view returns (bool)"}},"id":24694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33056:39:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":24695,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"33099:5:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"33056:48:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24701,"nodeType":"IfStatement","src":"33052:104:69","trueBody":{"id":24700,"nodeType":"Block","src":"33106:50:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":24697,"name":"SenderNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":234,"src":"33127:16:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":24698,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33127:18:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24699,"nodeType":"RevertStatement","src":"33120:25:69"}]}}]},"documentation":{"id":24677,"nodeType":"StructuredDocumentation","src":"32883:47:69","text":"@dev Delegate authentication to governance."},"id":24703,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureAuthenticated","nameLocation":"32944:20:69","nodeType":"FunctionDefinition","parameters":{"id":24680,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24679,"mutability":"mutable","name":"pool","nameLocation":"32973:4:69","nodeType":"VariableDeclaration","scope":24703,"src":"32965:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24678,"name":"address","nodeType":"ElementaryTypeName","src":"32965:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"32964:14:69"},"returnParameters":{"id":24681,"nodeType":"ParameterList","parameters":[],"src":"32992:0:69"},"scope":24770,"src":"32935:227:69","stateMutability":"view","virtual":false,"visibility":"private"},{"baseFunctions":[5497],"body":{"id":24724,"nodeType":"Block","src":"33319:77:69","statements":[{"expression":{"arguments":[{"id":24716,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24706,"src":"33359:8:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":24717,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24708,"src":"33369:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":24720,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"33383:4:69","typeDescriptions":{"typeIdentifier":"t_contract$_VaultAdmin_$24770","typeString":"contract VaultAdmin"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VaultAdmin_$24770","typeString":"contract VaultAdmin"}],"id":24719,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33375:7:69","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":24718,"name":"address","nodeType":"ElementaryTypeName","src":"33375:7:69","typeDescriptions":{}}},"id":24721,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33375:13:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":24714,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28284,"src":"33336:11:69","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"}},"id":24715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33348:10:69","memberName":"canPerform","nodeType":"MemberAccess","referencedDeclaration":1454,"src":"33336:22:69","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view external returns (bool)"}},"id":24722,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33336:53:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":24713,"id":24723,"nodeType":"Return","src":"33329:60:69"}]},"documentation":{"id":24704,"nodeType":"StructuredDocumentation","src":"33168:55:69","text":"@dev Access control is delegated to the Authorizer."},"id":24725,"implemented":true,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"33237:11:69","nodeType":"FunctionDefinition","overrides":{"id":24710,"nodeType":"OverrideSpecifier","overrides":[],"src":"33295:8:69"},"parameters":{"id":24709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24706,"mutability":"mutable","name":"actionId","nameLocation":"33257:8:69","nodeType":"VariableDeclaration","scope":24725,"src":"33249:16:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":24705,"name":"bytes32","nodeType":"ElementaryTypeName","src":"33249:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":24708,"mutability":"mutable","name":"user","nameLocation":"33275:4:69","nodeType":"VariableDeclaration","scope":24725,"src":"33267:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24707,"name":"address","nodeType":"ElementaryTypeName","src":"33267:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"33248:32:69"},"returnParameters":{"id":24713,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24712,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24725,"src":"33313:4:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24711,"name":"bool","nodeType":"ElementaryTypeName","src":"33313:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"33312:6:69"},"scope":24770,"src":"33228:168:69","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":24744,"nodeType":"Block","src":"33598:69:69","statements":[{"expression":{"arguments":[{"id":24739,"name":"actionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24728,"src":"33638:8:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":24740,"name":"user","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24730,"src":"33648:4:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":24741,"name":"where","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24732,"src":"33654:5:69","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":24737,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28284,"src":"33615:11:69","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"}},"id":24738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33627:10:69","memberName":"canPerform","nodeType":"MemberAccess","referencedDeclaration":1454,"src":"33615:22:69","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view external returns (bool)"}},"id":24742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33615:45:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":24736,"id":24743,"nodeType":"Return","src":"33608:52:69"}]},"documentation":{"id":24726,"nodeType":"StructuredDocumentation","src":"33402:94:69","text":"@dev Access control is delegated to the Authorizer. `where` refers to the target contract."},"id":24745,"implemented":true,"kind":"function","modifiers":[],"name":"_canPerform","nameLocation":"33510:11:69","nodeType":"FunctionDefinition","parameters":{"id":24733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24728,"mutability":"mutable","name":"actionId","nameLocation":"33530:8:69","nodeType":"VariableDeclaration","scope":24745,"src":"33522:16:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":24727,"name":"bytes32","nodeType":"ElementaryTypeName","src":"33522:7:69","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":24730,"mutability":"mutable","name":"user","nameLocation":"33548:4:69","nodeType":"VariableDeclaration","scope":24745,"src":"33540:12:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24729,"name":"address","nodeType":"ElementaryTypeName","src":"33540:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":24732,"mutability":"mutable","name":"where","nameLocation":"33562:5:69","nodeType":"VariableDeclaration","scope":24745,"src":"33554:13:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24731,"name":"address","nodeType":"ElementaryTypeName","src":"33554:7:69","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"33521:47:69"},"returnParameters":{"id":24736,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24735,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24745,"src":"33592:4:69","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24734,"name":"bool","nodeType":"ElementaryTypeName","src":"33592:4:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"33591:6:69"},"scope":24770,"src":"33501:166:69","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":24751,"nodeType":"Block","src":"33925:42:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":24748,"name":"CannotReceiveEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3752,"src":"33942:16:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":24749,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33942:18:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24750,"nodeType":"RevertStatement","src":"33935:25:69"}]},"id":24752,"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":24746,"nodeType":"ParameterList","parameters":[],"src":"33905:2:69"},"returnParameters":{"id":24747,"nodeType":"ParameterList","parameters":[],"src":"33925:0:69"},"scope":24770,"src":"33898:69:69","stateMutability":"payable","virtual":false,"visibility":"external"},{"body":{"id":24768,"nodeType":"Block","src":"34045:121:69","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":24758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":24755,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"34059:3:69","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":24756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34063:5:69","memberName":"value","nodeType":"MemberAccess","src":"34059:9:69","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":24757,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34071:1:69","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"34059:13:69","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24763,"nodeType":"IfStatement","src":"34055:69:69","trueBody":{"id":24762,"nodeType":"Block","src":"34074:50:69","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":24759,"name":"CannotReceiveEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3752,"src":"34095:16:69","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":24760,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34095:18:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24761,"nodeType":"RevertStatement","src":"34088:25:69"}]}},{"expression":{"arguments":[{"hexValue":"4e6f7420696d706c656d656e746564","id":24765,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"34141:17:69","typeDescriptions":{"typeIdentifier":"t_stringliteral_9f5474d7a5849b3f79e8aee7ea2c60bcd36a60a08b4fa41f97e2fccf1c4df98b","typeString":"literal_string \"Not implemented\""},"value":"Not implemented"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_9f5474d7a5849b3f79e8aee7ea2c60bcd36a60a08b4fa41f97e2fccf1c4df98b","typeString":"literal_string \"Not implemented\""}],"id":24764,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"34134:6:69","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":24766,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34134:25:69","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24767,"nodeType":"ExpressionStatement","src":"34134:25:69"}]},"id":24769,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":24753,"nodeType":"ParameterList","parameters":[],"src":"34025:2:69"},"returnParameters":{"id":24754,"nodeType":"ParameterList","parameters":[],"src":"34045:0:69"},"scope":24770,"src":"34017:149:69","stateMutability":"payable","virtual":false,"visibility":"external"}],"scope":24771,"src":"2072:32096:69","usedErrors":[234,1823,3413,3418,3423,3428,3437,3443,3446,3449,3452,3455,3458,3461,3470,3473,3476,3479,3482,3485,3488,3491,3494,3497,3500,3503,3506,3509,3512,3518,3525,3532,3535,3538,3548,3558,3565,3568,3571,3574,3584,3594,3601,3604,3607,3610,3613,3616,3619,3622,3625,3630,3635,3640,3643,3646,3649,3652,3655,3660,3665,3670,3676,3682,3685,3693,3699,3705,3708,3711,3714,3719,3729,3739,3746,3749,3752,3755,3758,3761,3764,3767,5792,6207,7498,7501,7917,9886,39870,39875,39880,39889,39894,39899,43238,43255],"usedEvents":[3806,3811,3830,3842,3854,3872,3890,3895,3898,3901,3908,3915,3922,3929,3936,3942,3948,3960,3970,3980,3992,3997,4006,38865,38876]}],"src":"46:34123:69"},"id":69},"@balancer-labs/v3-vault/contracts/VaultCommon.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultCommon.sol","exportedSymbols":{"ERC20MultiToken":[39429],"EVMCallModeHelpers":[5808],"IERC20":[40109],"IERC4626":[39833],"ISwapFeePercentageBounds":[3057],"IVaultErrors":[3768],"IVaultEvents":[4007],"PackedTokenBalance":[6344],"PoolConfigBits":[4582],"PoolConfigLib":[30441],"PoolData":[4729],"PoolDataLib":[31031],"ReentrancyGuardTransient":[9942],"Rounding":[4732],"SafeCast":[44983],"ScalingHelpers":[6848],"StorageSlotExtension":[10285],"TransientStorageHelpers":[7442],"VaultCommon":[25606],"VaultStateBits":[31184],"VaultStateLib":[31325],"VaultStorage":[28384]},"id":25607,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":24772,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:70"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":24774,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25607,"sourceUnit":39834,"src":"72:75:70","symbolAliases":[{"foreign":{"id":24773,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39833,"src":"81:8:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":24776,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25607,"sourceUnit":44984,"src":"148:75:70","symbolAliases":[{"foreign":{"id":24775,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44983,"src":"157:8:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":24778,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25607,"sourceUnit":40110,"src":"224:72:70","symbolAliases":[{"foreign":{"id":24777,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"233:6:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol","id":24780,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25607,"sourceUnit":3058,"src":"298:117:70","symbolAliases":[{"foreign":{"id":24779,"name":"ISwapFeePercentageBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3057,"src":"307:24:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":24783,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25607,"sourceUnit":4872,"src":"416:97:70","symbolAliases":[{"foreign":{"id":24781,"name":"PoolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4729,"src":"425:8:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":24782,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"435:8:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":24785,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25607,"sourceUnit":3769,"src":"514:93:70","symbolAliases":[{"foreign":{"id":24784,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"523:12:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol","id":24787,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25607,"sourceUnit":4008,"src":"608:93:70","symbolAliases":[{"foreign":{"id":24786,"name":"IVaultEvents","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4007,"src":"617:12:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","id":24789,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25607,"sourceUnit":10286,"src":"703:120:70","symbolAliases":[{"foreign":{"id":24788,"name":"StorageSlotExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10285,"src":"712:20:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol","id":24791,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25607,"sourceUnit":5809,"src":"824:111:70","symbolAliases":[{"foreign":{"id":24790,"name":"EVMCallModeHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5808,"src":"833:18:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","id":24793,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25607,"sourceUnit":6345,"src":"936:111:70","symbolAliases":[{"foreign":{"id":24792,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6344,"src":"945:18:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol","id":24795,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25607,"sourceUnit":6849,"src":"1048:103:70","symbolAliases":[{"foreign":{"id":24794,"name":"ScalingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6848,"src":"1057:14:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":24797,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25607,"sourceUnit":9943,"src":"1152:132:70","symbolAliases":[{"foreign":{"id":24796,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9942,"src":"1165:24:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","id":24799,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25607,"sourceUnit":7443,"src":"1285:125:70","symbolAliases":[{"foreign":{"id":24798,"name":"TransientStorageHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7442,"src":"1298:23:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/VaultStateLib.sol","file":"./lib/VaultStateLib.sol","id":24802,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25607,"sourceUnit":31326,"src":"1412:72:70","symbolAliases":[{"foreign":{"id":24800,"name":"VaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31184,"src":"1421:14:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":24801,"name":"VaultStateLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31325,"src":"1437:13:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/PoolConfigLib.sol","file":"./lib/PoolConfigLib.sol","id":24805,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25607,"sourceUnit":30442,"src":"1485:72:70","symbolAliases":[{"foreign":{"id":24803,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"1494:14:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":24804,"name":"PoolConfigLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30441,"src":"1510:13:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/token/ERC20MultiToken.sol","file":"./token/ERC20MultiToken.sol","id":24807,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25607,"sourceUnit":39430,"src":"1558:62:70","symbolAliases":[{"foreign":{"id":24806,"name":"ERC20MultiToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39429,"src":"1567:15:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/PoolDataLib.sol","file":"./lib/PoolDataLib.sol","id":24809,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25607,"sourceUnit":31032,"src":"1621:52:70","symbolAliases":[{"foreign":{"id":24808,"name":"PoolDataLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31031,"src":"1630:11:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultStorage.sol","file":"./VaultStorage.sol","id":24811,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":25607,"sourceUnit":28385,"src":"1674:50:70","symbolAliases":[{"foreign":{"id":24810,"name":"VaultStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28384,"src":"1683:12:70","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":24813,"name":"IVaultEvents","nameLocations":["2031:12:70"],"nodeType":"IdentifierPath","referencedDeclaration":4007,"src":"2031:12:70"},"id":24814,"nodeType":"InheritanceSpecifier","src":"2031:12:70"},{"baseName":{"id":24815,"name":"IVaultErrors","nameLocations":["2045:12:70"],"nodeType":"IdentifierPath","referencedDeclaration":3768,"src":"2045:12:70"},"id":24816,"nodeType":"InheritanceSpecifier","src":"2045:12:70"},{"baseName":{"id":24817,"name":"VaultStorage","nameLocations":["2059:12:70"],"nodeType":"IdentifierPath","referencedDeclaration":28384,"src":"2059:12:70"},"id":24818,"nodeType":"InheritanceSpecifier","src":"2059:12:70"},{"baseName":{"id":24819,"name":"ReentrancyGuardTransient","nameLocations":["2073:24:70"],"nodeType":"IdentifierPath","referencedDeclaration":9942,"src":"2073:24:70"},"id":24820,"nodeType":"InheritanceSpecifier","src":"2073:24:70"},{"baseName":{"id":24821,"name":"ERC20MultiToken","nameLocations":["2099:15:70"],"nodeType":"IdentifierPath","referencedDeclaration":39429,"src":"2099:15:70"},"id":24822,"nodeType":"InheritanceSpecifier","src":"2099:15:70"}],"canonicalName":"VaultCommon","contractDependencies":[],"contractKind":"contract","documentation":{"id":24812,"nodeType":"StructuredDocumentation","src":"1726:271:70","text":" @notice Functions and modifiers shared between the main Vault and its extension contracts.\n @dev This contract contains common utilities in the inheritance chain that require storage to work,\n and will be required in both the main Vault and its extensions."},"fullyImplemented":true,"id":25606,"linearizedBaseContracts":[25606,39429,1824,39900,9942,28384,3768,4007],"name":"VaultCommon","nameLocation":"2016:11:70","nodeType":"ContractDefinition","nodes":[{"global":false,"id":24826,"libraryName":{"id":24823,"name":"PoolConfigLib","nameLocations":["2127:13:70"],"nodeType":"IdentifierPath","referencedDeclaration":30441,"src":"2127:13:70"},"nodeType":"UsingForDirective","src":"2121:39:70","typeName":{"id":24825,"nodeType":"UserDefinedTypeName","pathNode":{"id":24824,"name":"PoolConfigBits","nameLocations":["2145:14:70"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"2145:14:70"},"referencedDeclaration":4582,"src":"2145:14:70","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}},{"global":false,"id":24830,"libraryName":{"id":24827,"name":"VaultStateLib","nameLocations":["2171:13:70"],"nodeType":"IdentifierPath","referencedDeclaration":31325,"src":"2171:13:70"},"nodeType":"UsingForDirective","src":"2165:39:70","typeName":{"id":24829,"nodeType":"UserDefinedTypeName","pathNode":{"id":24828,"name":"VaultStateBits","nameLocations":["2189:14:70"],"nodeType":"IdentifierPath","referencedDeclaration":31184,"src":"2189:14:70"},"referencedDeclaration":31184,"src":"2189:14:70","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}}},{"global":false,"id":24832,"libraryName":{"id":24831,"name":"SafeCast","nameLocations":["2215:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":44983,"src":"2215:8:70"},"nodeType":"UsingForDirective","src":"2209:21:70"},{"global":false,"id":24834,"libraryName":{"id":24833,"name":"TransientStorageHelpers","nameLocations":["2241:23:70"],"nodeType":"IdentifierPath","referencedDeclaration":7442,"src":"2241:23:70"},"nodeType":"UsingForDirective","src":"2235:36:70"},{"global":false,"id":24836,"libraryName":{"id":24835,"name":"StorageSlotExtension","nameLocations":["2282:20:70"],"nodeType":"IdentifierPath","referencedDeclaration":10285,"src":"2282:20:70"},"nodeType":"UsingForDirective","src":"2276:33:70"},{"global":false,"id":24840,"libraryName":{"id":24837,"name":"PoolDataLib","nameLocations":["2320:11:70"],"nodeType":"IdentifierPath","referencedDeclaration":31031,"src":"2320:11:70"},"nodeType":"UsingForDirective","src":"2314:31:70","typeName":{"id":24839,"nodeType":"UserDefinedTypeName","pathNode":{"id":24838,"name":"PoolData","nameLocations":["2336:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"2336:8:70"},"referencedDeclaration":4729,"src":"2336:8:70","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}}},{"body":{"id":24847,"nodeType":"Block","src":"2735:45:70","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":24843,"name":"_ensureUnlocked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24863,"src":"2745:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":24844,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2745:17:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24845,"nodeType":"ExpressionStatement","src":"2745:17:70"},{"id":24846,"nodeType":"PlaceholderStatement","src":"2772:1:70"}]},"documentation":{"id":24841,"nodeType":"StructuredDocumentation","src":"2573:129:70","text":" @dev This modifier ensures that the function it modifies can only be called\n when a tab has been opened."},"id":24848,"name":"onlyWhenUnlocked","nameLocation":"2716:16:70","nodeType":"ModifierDefinition","parameters":{"id":24842,"nodeType":"ParameterList","parameters":[],"src":"2732:2:70"},"src":"2707:73:70","virtual":false,"visibility":"internal"},{"body":{"id":24862,"nodeType":"Block","src":"2827:104:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":24856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":24851,"name":"_isUnlocked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28320,"src":"2841:11:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function () view returns (StorageSlotExtension.BooleanSlotType)"}},"id":24852,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2841:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":24853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2855:5:70","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":10207,"src":"2841:19:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_BooleanSlotType_$10108_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function (StorageSlotExtension.BooleanSlotType) view returns (bool)"}},"id":24854,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2841:21:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":24855,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2866:5:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"2841:30:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24861,"nodeType":"IfStatement","src":"2837:88:70","trueBody":{"id":24860,"nodeType":"Block","src":"2873:52:70","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":24857,"name":"VaultIsNotUnlocked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3476,"src":"2894:18:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":24858,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2894:20:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24859,"nodeType":"RevertStatement","src":"2887:27:70"}]}}]},"id":24863,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureUnlocked","nameLocation":"2795:15:70","nodeType":"FunctionDefinition","parameters":{"id":24849,"nodeType":"ParameterList","parameters":[],"src":"2810:2:70"},"returnParameters":{"id":24850,"nodeType":"ParameterList","parameters":[],"src":"2827:0:70"},"scope":25606,"src":"2786:145:70","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":24872,"nodeType":"Block","src":"3159:49:70","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":24869,"name":"_reentrancyGuardEntered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9941,"src":"3176:23:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":24870,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3176:25:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":24868,"id":24871,"nodeType":"Return","src":"3169:32:70"}]},"documentation":{"id":24864,"nodeType":"StructuredDocumentation","src":"2937:156:70","text":" @notice Expose the state of the Vault's reentrancy guard.\n @return True if the Vault is currently executing a nonReentrant function"},"functionSelector":"d2c725e0","id":24873,"implemented":true,"kind":"function","modifiers":[],"name":"reentrancyGuardEntered","nameLocation":"3107:22:70","nodeType":"FunctionDefinition","parameters":{"id":24865,"nodeType":"ParameterList","parameters":[],"src":"3129:2:70"},"returnParameters":{"id":24868,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24867,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":24873,"src":"3153:4:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":24866,"name":"bool","nodeType":"ElementaryTypeName","src":"3153:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3152:6:70"},"scope":25606,"src":"3098:110:70","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":24890,"nodeType":"Block","src":"3512:57:70","statements":[{"expression":{"arguments":[{"id":24883,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24877,"src":"3536:5:70","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":24887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"3543:18:70","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24884,"name":"credit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24879,"src":"3544:6:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3551:8:70","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":44982,"src":"3544:15:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":24886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3544:17:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":24882,"name":"_accountDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24964,"src":"3522:13:70","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_int256_$returns$__$","typeString":"function (contract IERC20,int256)"}},"id":24888,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3522:40:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24889,"nodeType":"ExpressionStatement","src":"3522:40:70"}]},"documentation":{"id":24874,"nodeType":"StructuredDocumentation","src":"3214:231:70","text":" @notice Records the `credit` for a given token.\n @param token The ERC20 token for which the 'credit' will be accounted\n @param credit The amount of `token` supplied to the Vault in favor of the caller"},"id":24891,"implemented":true,"kind":"function","modifiers":[],"name":"_supplyCredit","nameLocation":"3459:13:70","nodeType":"FunctionDefinition","parameters":{"id":24880,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24877,"mutability":"mutable","name":"token","nameLocation":"3480:5:70","nodeType":"VariableDeclaration","scope":24891,"src":"3473:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":24876,"nodeType":"UserDefinedTypeName","pathNode":{"id":24875,"name":"IERC20","nameLocations":["3473:6:70"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"3473:6:70"},"referencedDeclaration":40109,"src":"3473:6:70","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":24879,"mutability":"mutable","name":"credit","nameLocation":"3495:6:70","nodeType":"VariableDeclaration","scope":24891,"src":"3487:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24878,"name":"uint256","nodeType":"ElementaryTypeName","src":"3487:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3472:30:70"},"returnParameters":{"id":24881,"nodeType":"ParameterList","parameters":[],"src":"3512:0:70"},"scope":25606,"src":"3450:119:70","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":24907,"nodeType":"Block","src":"3860:54:70","statements":[{"expression":{"arguments":[{"id":24901,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24895,"src":"3884:5:70","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":24902,"name":"debt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24897,"src":"3891:4:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":24903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3896:8:70","memberName":"toInt256","nodeType":"MemberAccess","referencedDeclaration":44982,"src":"3891:13:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_int256_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (int256)"}},"id":24904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3891:15:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":24900,"name":"_accountDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24964,"src":"3870:13:70","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_int256_$returns$__$","typeString":"function (contract IERC20,int256)"}},"id":24905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3870:37:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24906,"nodeType":"ExpressionStatement","src":"3870:37:70"}]},"documentation":{"id":24892,"nodeType":"StructuredDocumentation","src":"3575:224:70","text":" @notice Records the `debt` for a given token.\n @param token The ERC20 token for which the `debt` will be accounted\n @param debt The amount of `token` taken from the Vault in favor of the caller"},"id":24908,"implemented":true,"kind":"function","modifiers":[],"name":"_takeDebt","nameLocation":"3813:9:70","nodeType":"FunctionDefinition","parameters":{"id":24898,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24895,"mutability":"mutable","name":"token","nameLocation":"3830:5:70","nodeType":"VariableDeclaration","scope":24908,"src":"3823:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":24894,"nodeType":"UserDefinedTypeName","pathNode":{"id":24893,"name":"IERC20","nameLocations":["3823:6:70"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"3823:6:70"},"referencedDeclaration":40109,"src":"3823:6:70","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":24897,"mutability":"mutable","name":"debt","nameLocation":"3845:4:70","nodeType":"VariableDeclaration","scope":24908,"src":"3837:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":24896,"name":"uint256","nodeType":"ElementaryTypeName","src":"3837:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3822:28:70"},"returnParameters":{"id":24899,"nodeType":"ParameterList","parameters":[],"src":"3860:0:70"},"scope":25606,"src":"3804:110:70","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":24963,"nodeType":"Block","src":"4406:844:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":24919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24917,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24914,"src":"4485:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":24918,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4494:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4485:10:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24921,"nodeType":"IfStatement","src":"4481:23:70","trueBody":{"functionReturnParameters":24916,"id":24920,"nodeType":"Return","src":"4497:7:70"}},{"assignments":[24923],"declarations":[{"constant":false,"id":24923,"mutability":"mutable","name":"current","nameLocation":"4579:7:70","nodeType":"VariableDeclaration","scope":24963,"src":"4572:14:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":24922,"name":"int256","nodeType":"ElementaryTypeName","src":"4572:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":24929,"initialValue":{"arguments":[{"id":24927,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24912,"src":"4609:5:70","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":24924,"name":"_tokenDeltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28343,"src":"4589:12:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858_$","typeString":"function () view returns (TokenDeltaMappingSlotType)"}},"id":24925,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4589:14:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858","typeString":"TokenDeltaMappingSlotType"}},"id":24926,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4604:4:70","memberName":"tGet","nodeType":"MemberAccess","referencedDeclaration":6938,"src":"4589:19:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858_$_t_contract$_IERC20_$40109_$returns$_t_int256_$attached_to$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858_$","typeString":"function (TokenDeltaMappingSlotType,contract IERC20) view returns (int256)"}},"id":24928,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4589:26:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"4572:43:70"},{"assignments":[24931],"declarations":[{"constant":false,"id":24931,"mutability":"mutable","name":"next","nameLocation":"4701:4:70","nodeType":"VariableDeclaration","scope":24963,"src":"4694:11:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":24930,"name":"int256","nodeType":"ElementaryTypeName","src":"4694:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":24935,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":24934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24932,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24923,"src":"4708:7:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":24933,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24914,"src":"4718:5:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"4708:15:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"4694:29:70"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":24938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24936,"name":"next","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24931,"src":"4738:4:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":24937,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4746:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4738:9:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":24947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":24945,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24923,"src":"4944:7:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":24946,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4955:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4944:12:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24954,"nodeType":"IfStatement","src":"4940:217:70","trueBody":{"id":24953,"nodeType":"Block","src":"4958:199:70","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":24948,"name":"_nonZeroDeltaCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28331,"src":"5113:18:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function () view returns (StorageSlotExtension.Uint256SlotType)"}},"id":24949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5113:20:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":24950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5134:10:70","memberName":"tIncrement","nodeType":"MemberAccess","referencedDeclaration":7424,"src":"5113:31:70","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_Uint256SlotType_$10142_$returns$__$attached_to$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function (StorageSlotExtension.Uint256SlotType)"}},"id":24951,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5113:33:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24952,"nodeType":"ExpressionStatement","src":"5113:33:70"}]}},"id":24955,"nodeType":"IfStatement","src":"4734:423:70","trueBody":{"id":24944,"nodeType":"Block","src":"4749:185:70","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":24939,"name":"_nonZeroDeltaCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28331,"src":"4890:18:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function () view returns (StorageSlotExtension.Uint256SlotType)"}},"id":24940,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4890:20:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":24941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4911:10:70","memberName":"tDecrement","nodeType":"MemberAccess","referencedDeclaration":7441,"src":"4890:31:70","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_Uint256SlotType_$10142_$returns$__$attached_to$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function (StorageSlotExtension.Uint256SlotType)"}},"id":24942,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4890:33:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24943,"nodeType":"ExpressionStatement","src":"4890:33:70"}]}},{"expression":{"arguments":[{"id":24959,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24912,"src":"5231:5:70","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":24960,"name":"next","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24931,"src":"5238:4:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_int256","typeString":"int256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":24956,"name":"_tokenDeltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28343,"src":"5211:12:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858_$","typeString":"function () view returns (TokenDeltaMappingSlotType)"}},"id":24957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5211:14:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858","typeString":"TokenDeltaMappingSlotType"}},"id":24958,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5226:4:70","memberName":"tSet","nodeType":"MemberAccess","referencedDeclaration":6967,"src":"5211:19:70","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858_$_t_contract$_IERC20_$40109_$_t_int256_$returns$__$attached_to$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858_$","typeString":"function (TokenDeltaMappingSlotType,contract IERC20,int256)"}},"id":24961,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5211:32:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24962,"nodeType":"ExpressionStatement","src":"5211:32:70"}]},"documentation":{"id":24909,"nodeType":"StructuredDocumentation","src":"3920:421:70","text":" @dev Accounts the delta for the given token. A positive delta represents debt,\n while a negative delta represents surplus.\n @param token The ERC20 token for which the delta is being accounted\n @param delta The difference in the token balance\n Positive indicates a debit or a decrease in Vault's tokens,\n negative indicates a credit or an increase in Vault's tokens."},"id":24964,"implemented":true,"kind":"function","modifiers":[],"name":"_accountDelta","nameLocation":"4355:13:70","nodeType":"FunctionDefinition","parameters":{"id":24915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24912,"mutability":"mutable","name":"token","nameLocation":"4376:5:70","nodeType":"VariableDeclaration","scope":24964,"src":"4369:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":24911,"nodeType":"UserDefinedTypeName","pathNode":{"id":24910,"name":"IERC20","nameLocations":["4369:6:70"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"4369:6:70"},"referencedDeclaration":40109,"src":"4369:6:70","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":24914,"mutability":"mutable","name":"delta","nameLocation":"4390:5:70","nodeType":"VariableDeclaration","scope":24964,"src":"4383:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":24913,"name":"int256","nodeType":"ElementaryTypeName","src":"4383:6:70","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"4368:28:70"},"returnParameters":{"id":24916,"nodeType":"ParameterList","parameters":[],"src":"4406:0:70"},"scope":25606,"src":"4346:904:70","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":24971,"nodeType":"Block","src":"5592:51:70","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":24967,"name":"_ensureVaultNotPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24984,"src":"5602:21:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":24968,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5602:23:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24969,"nodeType":"ExpressionStatement","src":"5602:23:70"},{"id":24970,"nodeType":"PlaceholderStatement","src":"5635:1:70"}]},"documentation":{"id":24965,"nodeType":"StructuredDocumentation","src":"5477:80:70","text":"@dev Modifier to make a function callable only when the Vault is not paused."},"id":24972,"name":"whenVaultNotPaused","nameLocation":"5571:18:70","nodeType":"ModifierDefinition","parameters":{"id":24966,"nodeType":"ParameterList","parameters":[],"src":"5589:2:70"},"src":"5562:81:70","virtual":false,"visibility":"internal"},{"body":{"id":24983,"nodeType":"Block","src":"5741:83:70","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":24976,"name":"_isVaultPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25014,"src":"5755:14:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":24977,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5755:16:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":24982,"nodeType":"IfStatement","src":"5751:67:70","trueBody":{"id":24981,"nodeType":"Block","src":"5773:45:70","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":24978,"name":"VaultPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3649,"src":"5794:11:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":24979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5794:13:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":24980,"nodeType":"RevertStatement","src":"5787:20:70"}]}}]},"documentation":{"id":24973,"nodeType":"StructuredDocumentation","src":"5649:40:70","text":"@dev Reverts if the Vault is paused."},"id":24984,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureVaultNotPaused","nameLocation":"5703:21:70","nodeType":"FunctionDefinition","parameters":{"id":24974,"nodeType":"ParameterList","parameters":[],"src":"5724:2:70"},"returnParameters":{"id":24975,"nodeType":"ParameterList","parameters":[],"src":"5741:0:70"},"scope":25606,"src":"5694:130:70","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":24997,"nodeType":"Block","src":"5947:76:70","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":24990,"name":"_ensureVaultNotPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24984,"src":"5957:21:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":24991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5957:23:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24992,"nodeType":"ExpressionStatement","src":"5957:23:70"},{"expression":{"arguments":[{"id":24994,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24987,"src":"6011:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":24993,"name":"_ensurePoolNotPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25030,"src":"5990:20:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":24995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5990:26:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":24996,"nodeType":"ExpressionStatement","src":"5990:26:70"}]},"documentation":{"id":24985,"nodeType":"StructuredDocumentation","src":"5830:59:70","text":"@dev Reverts if the Vault or the given pool are paused."},"id":24998,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureUnpaused","nameLocation":"5903:15:70","nodeType":"FunctionDefinition","parameters":{"id":24988,"nodeType":"ParameterList","parameters":[{"constant":false,"id":24987,"mutability":"mutable","name":"pool","nameLocation":"5927:4:70","nodeType":"VariableDeclaration","scope":24998,"src":"5919:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24986,"name":"address","nodeType":"ElementaryTypeName","src":"5919:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5918:14:70"},"returnParameters":{"id":24989,"nodeType":"ParameterList","parameters":[],"src":"5947:0:70"},"scope":25606,"src":"5894:129:70","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":25013,"nodeType":"Block","src":"6304:157:70","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":25011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":25007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":25004,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"6375:5:70","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":25005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6381:9:70","memberName":"timestamp","nodeType":"MemberAccess","src":"6375:15:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":25006,"name":"_vaultBufferPeriodEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28267,"src":"6394:25:70","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"6375:44:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25008,"name":"_vaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28272,"src":"6423:15:70","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"id":25009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6439:13:70","memberName":"isVaultPaused","nodeType":"MemberAccess","referencedDeclaration":31259,"src":"6423:29:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_VaultStateBits_$31184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_VaultStateBits_$31184_$","typeString":"function (VaultStateBits) pure returns (bool)"}},"id":25010,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6423:31:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"6375:79:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":25003,"id":25012,"nodeType":"Return","src":"6368:86:70"}]},"documentation":{"id":24999,"nodeType":"StructuredDocumentation","src":"6029:215:70","text":" @dev For gas efficiency, storage is only read before `_vaultBufferPeriodEndTime`. Once we're past that\n timestamp, the expression short-circuits false, and the Vault is permanently unpaused."},"id":25014,"implemented":true,"kind":"function","modifiers":[],"name":"_isVaultPaused","nameLocation":"6258:14:70","nodeType":"FunctionDefinition","parameters":{"id":25000,"nodeType":"ParameterList","parameters":[],"src":"6272:2:70"},"returnParameters":{"id":25003,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25002,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25014,"src":"6298:4:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":25001,"name":"bool","nodeType":"ElementaryTypeName","src":"6298:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6297:6:70"},"scope":25606,"src":"6249:212:70","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":25029,"nodeType":"Block","src":"6790:89:70","statements":[{"condition":{"arguments":[{"id":25021,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25017,"src":"6818:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25020,"name":"_isPoolPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25047,"src":"6804:13:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":25022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6804:19:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":25028,"nodeType":"IfStatement","src":"6800:73:70","trueBody":{"id":25027,"nodeType":"Block","src":"6825:48:70","statements":[{"errorCall":{"arguments":[{"id":25024,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25017,"src":"6857:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25023,"name":"PoolPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3660,"src":"6846:10:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":25025,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6846:16:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":25026,"nodeType":"RevertStatement","src":"6839:23:70"}]}}]},"documentation":{"id":25015,"nodeType":"StructuredDocumentation","src":"6688:39:70","text":"@dev Reverts if the pool is paused."},"id":25030,"implemented":true,"kind":"function","modifiers":[],"name":"_ensurePoolNotPaused","nameLocation":"6741:20:70","nodeType":"FunctionDefinition","parameters":{"id":25018,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25017,"mutability":"mutable","name":"pool","nameLocation":"6770:4:70","nodeType":"VariableDeclaration","scope":25030,"src":"6762:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25016,"name":"address","nodeType":"ElementaryTypeName","src":"6762:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6761:14:70"},"returnParameters":{"id":25019,"nodeType":"ParameterList","parameters":[],"src":"6790:0:70"},"scope":25606,"src":"6732:147:70","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":25046,"nodeType":"Block","src":"7039:84:70","statements":[{"assignments":[25039,null],"declarations":[{"constant":false,"id":25039,"mutability":"mutable","name":"paused","nameLocation":"7055:6:70","nodeType":"VariableDeclaration","scope":25046,"src":"7050:11:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":25038,"name":"bool","nodeType":"ElementaryTypeName","src":"7050:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":25043,"initialValue":{"arguments":[{"id":25041,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25033,"src":"7087:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25040,"name":"_getPoolPausedState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25088,"src":"7067:19:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$_t_uint32_$","typeString":"function (address) view returns (bool,uint32)"}},"id":25042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7067:25:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint32_$","typeString":"tuple(bool,uint32)"}},"nodeType":"VariableDeclarationStatement","src":"7049:43:70"},{"expression":{"id":25044,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25039,"src":"7110:6:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":25037,"id":25045,"nodeType":"Return","src":"7103:13:70"}]},"documentation":{"id":25031,"nodeType":"StructuredDocumentation","src":"6885:83:70","text":"@dev Check both the flag and timestamp to determine whether the pool is paused."},"id":25047,"implemented":true,"kind":"function","modifiers":[],"name":"_isPoolPaused","nameLocation":"6982:13:70","nodeType":"FunctionDefinition","parameters":{"id":25034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25033,"mutability":"mutable","name":"pool","nameLocation":"7004:4:70","nodeType":"VariableDeclaration","scope":25047,"src":"6996:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25032,"name":"address","nodeType":"ElementaryTypeName","src":"6996:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6995:14:70"},"returnParameters":{"id":25037,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25036,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25047,"src":"7033:4:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":25035,"name":"bool","nodeType":"ElementaryTypeName","src":"7033:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7032:6:70"},"scope":25606,"src":"6973:150:70","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":25087,"nodeType":"Block","src":"7302:400:70","statements":[{"assignments":[25059],"declarations":[{"constant":false,"id":25059,"mutability":"mutable","name":"config","nameLocation":"7327:6:70","nodeType":"VariableDeclaration","scope":25087,"src":"7312:21:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":25058,"nodeType":"UserDefinedTypeName","pathNode":{"id":25057,"name":"PoolConfigBits","nameLocations":["7312:14:70"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"7312:14:70"},"referencedDeclaration":4582,"src":"7312:14:70","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"id":25063,"initialValue":{"baseExpression":{"id":25060,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"7336:15:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":25062,"indexExpression":{"id":25061,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25050,"src":"7352:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7336:21:70","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"VariableDeclarationStatement","src":"7312:45:70"},{"assignments":[25065],"declarations":[{"constant":false,"id":25065,"mutability":"mutable","name":"isPoolPaused","nameLocation":"7373:12:70","nodeType":"VariableDeclaration","scope":25087,"src":"7368:17:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":25064,"name":"bool","nodeType":"ElementaryTypeName","src":"7368:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":25069,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25066,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25059,"src":"7388:6:70","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":25067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7395:12:70","memberName":"isPoolPaused","nodeType":"MemberAccess","referencedDeclaration":29723,"src":"7388:19:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":25068,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7388:21:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"7368:41:70"},{"assignments":[25071],"declarations":[{"constant":false,"id":25071,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"7426:18:70","nodeType":"VariableDeclaration","scope":25087,"src":"7419:25:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":25070,"name":"uint32","nodeType":"ElementaryTypeName","src":"7419:6:70","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"id":25075,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25072,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25059,"src":"7447:6:70","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":25073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7454:21:70","memberName":"getPauseWindowEndTime","nodeType":"MemberAccess","referencedDeclaration":30365,"src":"7447:28:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_uint32_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (uint32)"}},"id":25074,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7447:30:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"VariableDeclarationStatement","src":"7419:58:70"},{"expression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":25083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25076,"name":"isPoolPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25065,"src":"7592:12:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":25082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":25077,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"7608:5:70","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":25078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7614:9:70","memberName":"timestamp","nodeType":"MemberAccess","src":"7608:15:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":25081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25079,"name":"pauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25071,"src":"7627:18:70","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":25080,"name":"_vaultBufferPeriodDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28269,"src":"7648:26:70","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"7627:47:70","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"7608:66:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7592:82:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":25084,"name":"pauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25071,"src":"7676:18:70","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"id":25085,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7591:104:70","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint32_$","typeString":"tuple(bool,uint32)"}},"functionReturnParameters":25056,"id":25086,"nodeType":"Return","src":"7584:111:70"}]},"documentation":{"id":25048,"nodeType":"StructuredDocumentation","src":"7129:88:70","text":"@dev Lowest level routine that plucks only the minimum necessary parts from storage."},"id":25088,"implemented":true,"kind":"function","modifiers":[],"name":"_getPoolPausedState","nameLocation":"7231:19:70","nodeType":"FunctionDefinition","parameters":{"id":25051,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25050,"mutability":"mutable","name":"pool","nameLocation":"7259:4:70","nodeType":"VariableDeclaration","scope":25088,"src":"7251:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25049,"name":"address","nodeType":"ElementaryTypeName","src":"7251:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7250:14:70"},"returnParameters":{"id":25056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25053,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25088,"src":"7288:4:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":25052,"name":"bool","nodeType":"ElementaryTypeName","src":"7288:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":25055,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25088,"src":"7294:6:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":25054,"name":"uint32","nodeType":"ElementaryTypeName","src":"7294:6:70","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"7287:14:70"},"scope":25606,"src":"7222:480:70","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":25095,"nodeType":"Block","src":"8060:61:70","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":25091,"name":"_ensureVaultBuffersAreNotPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25109,"src":"8070:31:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":25092,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8070:33:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25093,"nodeType":"ExpressionStatement","src":"8070:33:70"},{"id":25094,"nodeType":"PlaceholderStatement","src":"8113:1:70"}]},"documentation":{"id":25089,"nodeType":"StructuredDocumentation","src":"7930:85:70","text":"@dev Modifier to make a function callable only when vault buffers are not paused."},"id":25096,"name":"whenVaultBuffersAreNotPaused","nameLocation":"8029:28:70","nodeType":"ModifierDefinition","parameters":{"id":25090,"nodeType":"ParameterList","parameters":[],"src":"8057:2:70"},"src":"8020:101:70","virtual":false,"visibility":"internal"},{"body":{"id":25108,"nodeType":"Block","src":"8234:111:70","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25100,"name":"_vaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28272,"src":"8248:15:70","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"id":25101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8264:16:70","memberName":"areBuffersPaused","nodeType":"MemberAccess","referencedDeclaration":31300,"src":"8248:32:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_VaultStateBits_$31184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_VaultStateBits_$31184_$","typeString":"function (VaultStateBits) pure returns (bool)"}},"id":25102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8248:34:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":25107,"nodeType":"IfStatement","src":"8244:95:70","trueBody":{"id":25106,"nodeType":"Block","src":"8284:55:70","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":25103,"name":"VaultBuffersArePaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3708,"src":"8305:21:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":25104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8305:23:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":25105,"nodeType":"RevertStatement","src":"8298:30:70"}]}}]},"documentation":{"id":25097,"nodeType":"StructuredDocumentation","src":"8127:45:70","text":"@dev Reverts if vault buffers are paused."},"id":25109,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureVaultBuffersAreNotPaused","nameLocation":"8186:31:70","nodeType":"FunctionDefinition","parameters":{"id":25098,"nodeType":"ParameterList","parameters":[],"src":"8217:2:70"},"returnParameters":{"id":25099,"nodeType":"ParameterList","parameters":[],"src":"8234:0:70"},"scope":25606,"src":"8177:168:70","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":25119,"nodeType":"Block","src":"8686:55:70","statements":[{"expression":{"arguments":[{"id":25115,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25112,"src":"8718:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25114,"name":"_ensureRegisteredPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25147,"src":"8696:21:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":25116,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8696:27:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25117,"nodeType":"ExpressionStatement","src":"8696:27:70"},{"id":25118,"nodeType":"PlaceholderStatement","src":"8733:1:70"}]},"documentation":{"id":25110,"nodeType":"StructuredDocumentation","src":"8587:52:70","text":"@dev Reverts unless `pool` is a registered Pool."},"id":25120,"name":"withRegisteredPool","nameLocation":"8653:18:70","nodeType":"ModifierDefinition","parameters":{"id":25113,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25112,"mutability":"mutable","name":"pool","nameLocation":"8680:4:70","nodeType":"VariableDeclaration","scope":25120,"src":"8672:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25111,"name":"address","nodeType":"ElementaryTypeName","src":"8672:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8671:14:70"},"src":"8644:97:70","virtual":false,"visibility":"internal"},{"body":{"id":25130,"nodeType":"Block","src":"8849:56:70","statements":[{"expression":{"arguments":[{"id":25126,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25123,"src":"8882:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25125,"name":"_ensureInitializedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25183,"src":"8859:22:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":25127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8859:28:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25128,"nodeType":"ExpressionStatement","src":"8859:28:70"},{"id":25129,"nodeType":"PlaceholderStatement","src":"8897:1:70"}]},"documentation":{"id":25121,"nodeType":"StructuredDocumentation","src":"8747:54:70","text":"@dev Reverts unless `pool` is an initialized Pool."},"id":25131,"name":"withInitializedPool","nameLocation":"8815:19:70","nodeType":"ModifierDefinition","parameters":{"id":25124,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25123,"mutability":"mutable","name":"pool","nameLocation":"8843:4:70","nodeType":"VariableDeclaration","scope":25131,"src":"8835:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25122,"name":"address","nodeType":"ElementaryTypeName","src":"8835:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8834:14:70"},"src":"8806:99:70","virtual":false,"visibility":"internal"},{"body":{"id":25146,"nodeType":"Block","src":"8970:101:70","statements":[{"condition":{"id":25139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"8984:24:70","subExpression":{"arguments":[{"id":25137,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25133,"src":"9003:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25136,"name":"_isPoolRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25167,"src":"8985:17:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":25138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8985:23:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":25145,"nodeType":"IfStatement","src":"8980:85:70","trueBody":{"id":25144,"nodeType":"Block","src":"9010:55:70","statements":[{"errorCall":{"arguments":[{"id":25141,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25133,"src":"9049:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25140,"name":"PoolNotRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3423,"src":"9031:17:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":25142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9031:23:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":25143,"nodeType":"RevertStatement","src":"9024:30:70"}]}}]},"id":25147,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureRegisteredPool","nameLocation":"8920:21:70","nodeType":"FunctionDefinition","parameters":{"id":25134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25133,"mutability":"mutable","name":"pool","nameLocation":"8950:4:70","nodeType":"VariableDeclaration","scope":25147,"src":"8942:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25132,"name":"address","nodeType":"ElementaryTypeName","src":"8942:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8941:14:70"},"returnParameters":{"id":25135,"nodeType":"ParameterList","parameters":[],"src":"8970:0:70"},"scope":25606,"src":"8911:160:70","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":25166,"nodeType":"Block","src":"9183:104:70","statements":[{"assignments":[25157],"declarations":[{"constant":false,"id":25157,"mutability":"mutable","name":"config","nameLocation":"9208:6:70","nodeType":"VariableDeclaration","scope":25166,"src":"9193:21:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":25156,"nodeType":"UserDefinedTypeName","pathNode":{"id":25155,"name":"PoolConfigBits","nameLocations":["9193:14:70"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"9193:14:70"},"referencedDeclaration":4582,"src":"9193:14:70","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"id":25161,"initialValue":{"baseExpression":{"id":25158,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"9217:15:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":25160,"indexExpression":{"id":25159,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25150,"src":"9233:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9217:21:70","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"VariableDeclarationStatement","src":"9193:45:70"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25162,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25157,"src":"9255:6:70","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":25163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9262:16:70","memberName":"isPoolRegistered","nodeType":"MemberAccess","referencedDeclaration":29637,"src":"9255:23:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":25164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9255:25:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":25154,"id":25165,"nodeType":"Return","src":"9248:32:70"}]},"documentation":{"id":25148,"nodeType":"StructuredDocumentation","src":"9077:31:70","text":"@dev See `isPoolRegistered`"},"id":25167,"implemented":true,"kind":"function","modifiers":[],"name":"_isPoolRegistered","nameLocation":"9122:17:70","nodeType":"FunctionDefinition","parameters":{"id":25151,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25150,"mutability":"mutable","name":"pool","nameLocation":"9148:4:70","nodeType":"VariableDeclaration","scope":25167,"src":"9140:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25149,"name":"address","nodeType":"ElementaryTypeName","src":"9140:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9139:14:70"},"returnParameters":{"id":25154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25153,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25167,"src":"9177:4:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":25152,"name":"bool","nodeType":"ElementaryTypeName","src":"9177:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9176:6:70"},"scope":25606,"src":"9113:174:70","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":25182,"nodeType":"Block","src":"9353:103:70","statements":[{"condition":{"id":25175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"9367:25:70","subExpression":{"arguments":[{"id":25173,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25169,"src":"9387:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25172,"name":"_isPoolInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25203,"src":"9368:18:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":25174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9368:24:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":25181,"nodeType":"IfStatement","src":"9363:87:70","trueBody":{"id":25180,"nodeType":"Block","src":"9394:56:70","statements":[{"errorCall":{"arguments":[{"id":25177,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25169,"src":"9434:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25176,"name":"PoolNotInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3428,"src":"9415:18:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":25178,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9415:24:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":25179,"nodeType":"RevertStatement","src":"9408:31:70"}]}}]},"id":25183,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureInitializedPool","nameLocation":"9302:22:70","nodeType":"FunctionDefinition","parameters":{"id":25170,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25169,"mutability":"mutable","name":"pool","nameLocation":"9333:4:70","nodeType":"VariableDeclaration","scope":25183,"src":"9325:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25168,"name":"address","nodeType":"ElementaryTypeName","src":"9325:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9324:14:70"},"returnParameters":{"id":25171,"nodeType":"ParameterList","parameters":[],"src":"9353:0:70"},"scope":25606,"src":"9293:163:70","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":25202,"nodeType":"Block","src":"9570:105:70","statements":[{"assignments":[25193],"declarations":[{"constant":false,"id":25193,"mutability":"mutable","name":"config","nameLocation":"9595:6:70","nodeType":"VariableDeclaration","scope":25202,"src":"9580:21:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":25192,"nodeType":"UserDefinedTypeName","pathNode":{"id":25191,"name":"PoolConfigBits","nameLocations":["9580:14:70"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"9580:14:70"},"referencedDeclaration":4582,"src":"9580:14:70","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"id":25197,"initialValue":{"baseExpression":{"id":25194,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"9604:15:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":25196,"indexExpression":{"id":25195,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25186,"src":"9620:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9604:21:70","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"VariableDeclarationStatement","src":"9580:45:70"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25198,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25193,"src":"9642:6:70","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":25199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9649:17:70","memberName":"isPoolInitialized","nodeType":"MemberAccess","referencedDeclaration":29680,"src":"9642:24:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":25200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9642:26:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":25190,"id":25201,"nodeType":"Return","src":"9635:33:70"}]},"documentation":{"id":25184,"nodeType":"StructuredDocumentation","src":"9462:32:70","text":"@dev See `isPoolInitialized`"},"id":25203,"implemented":true,"kind":"function","modifiers":[],"name":"_isPoolInitialized","nameLocation":"9508:18:70","nodeType":"FunctionDefinition","parameters":{"id":25187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25186,"mutability":"mutable","name":"pool","nameLocation":"9535:4:70","nodeType":"VariableDeclaration","scope":25203,"src":"9527:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25185,"name":"address","nodeType":"ElementaryTypeName","src":"9527:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9526:14:70"},"returnParameters":{"id":25190,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25189,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25203,"src":"9564:4:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":25188,"name":"bool","nodeType":"ElementaryTypeName","src":"9564:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9563:6:70"},"scope":25606,"src":"9499:176:70","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":25213,"nodeType":"Block","src":"9967:66:70","statements":[{"expression":{"arguments":[{"id":25209,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25206,"src":"10002:12:70","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}],"id":25208,"name":"_ensureBufferInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25235,"src":"9977:24:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC4626_$39833_$returns$__$","typeString":"function (contract IERC4626) view"}},"id":25210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9977:38:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25211,"nodeType":"ExpressionStatement","src":"9977:38:70"},{"id":25212,"nodeType":"PlaceholderStatement","src":"10025:1:70"}]},"id":25214,"name":"withInitializedBuffer","nameLocation":"9922:21:70","nodeType":"ModifierDefinition","parameters":{"id":25207,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25206,"mutability":"mutable","name":"wrappedToken","nameLocation":"9953:12:70","nodeType":"VariableDeclaration","scope":25214,"src":"9944:21:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":25205,"nodeType":"UserDefinedTypeName","pathNode":{"id":25204,"name":"IERC4626","nameLocations":["9944:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"9944:8:70"},"referencedDeclaration":39833,"src":"9944:8:70","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"9943:23:70"},"src":"9913:120:70","virtual":false,"visibility":"internal"},{"body":{"id":25234,"nodeType":"Block","src":"10110:129:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":25227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":25220,"name":"_bufferAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28309,"src":"10124:13:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_address_$","typeString":"mapping(contract IERC4626 => address)"}},"id":25222,"indexExpression":{"id":25221,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25217,"src":"10138:12:70","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10124:27:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":25225,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10163:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":25224,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10155:7:70","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":25223,"name":"address","nodeType":"ElementaryTypeName","src":"10155:7:70","typeDescriptions":{}}},"id":25226,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10155:10:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10124:41:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":25233,"nodeType":"IfStatement","src":"10120:113:70","trueBody":{"id":25232,"nodeType":"Block","src":"10167:66:70","statements":[{"errorCall":{"arguments":[{"id":25229,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25217,"src":"10209:12:70","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}],"id":25228,"name":"BufferNotInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3682,"src":"10188:20:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC4626_$39833_$returns$_t_error_$","typeString":"function (contract IERC4626) pure returns (error)"}},"id":25230,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10188:34:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":25231,"nodeType":"RevertStatement","src":"10181:41:70"}]}}]},"id":25235,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureBufferInitialized","nameLocation":"10048:24:70","nodeType":"FunctionDefinition","parameters":{"id":25218,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25217,"mutability":"mutable","name":"wrappedToken","nameLocation":"10082:12:70","nodeType":"VariableDeclaration","scope":25235,"src":"10073:21:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":25216,"nodeType":"UserDefinedTypeName","pathNode":{"id":25215,"name":"IERC4626","nameLocations":["10073:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"10073:8:70"},"referencedDeclaration":39833,"src":"10073:8:70","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"10072:23:70"},"returnParameters":{"id":25219,"nodeType":"ParameterList","parameters":[],"src":"10110:0:70"},"scope":25606,"src":"10039:200:70","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":25256,"nodeType":"Block","src":"10561:218:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":25248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":25244,"name":"_bufferAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28309,"src":"10575:13:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_address_$","typeString":"mapping(contract IERC4626 => address)"}},"id":25246,"indexExpression":{"id":25245,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25239,"src":"10589:12:70","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10575:27:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":25247,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25241,"src":"10606:15:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"10575:46:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":25255,"nodeType":"IfStatement","src":"10571:202:70","trueBody":{"id":25254,"nodeType":"Block","src":"10623:150:70","statements":[{"errorCall":{"arguments":[{"id":25250,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25239,"src":"10732:12:70","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":25251,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25241,"src":"10746:15:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_address","typeString":"address"}],"id":25249,"name":"WrongUnderlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3693,"src":"10711:20:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC4626_$39833_$_t_address_$returns$_t_error_$","typeString":"function (contract IERC4626,address) pure returns (error)"}},"id":25252,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10711:51:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":25253,"nodeType":"RevertStatement","src":"10704:58:70"}]}}]},"documentation":{"id":25236,"nodeType":"StructuredDocumentation","src":"10245:214:70","text":" @dev This assumes `underlyingToken` is non-zero; should be called by functions that have already ensured the\n buffer has been initialized (e.g., those protected by `withInitializedBuffer`)."},"id":25257,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureCorrectBufferAsset","nameLocation":"10473:25:70","nodeType":"FunctionDefinition","parameters":{"id":25242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25239,"mutability":"mutable","name":"wrappedToken","nameLocation":"10508:12:70","nodeType":"VariableDeclaration","scope":25257,"src":"10499:21:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":25238,"nodeType":"UserDefinedTypeName","pathNode":{"id":25237,"name":"IERC4626","nameLocations":["10499:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"10499:8:70"},"referencedDeclaration":39833,"src":"10499:8:70","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":25241,"mutability":"mutable","name":"underlyingToken","nameLocation":"10530:15:70","nodeType":"VariableDeclaration","scope":25257,"src":"10522:23:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25240,"name":"address","nodeType":"ElementaryTypeName","src":"10522:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10498:48:70"},"returnParameters":{"id":25243,"nodeType":"ParameterList","parameters":[],"src":"10561:0:70"},"scope":25606,"src":"10464:315:70","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":25304,"nodeType":"Block","src":"11288:435:70","statements":[{"assignments":[25269],"declarations":[{"constant":false,"id":25269,"mutability":"mutable","name":"poolBalances","nameLocation":"11364:12:70","nodeType":"VariableDeclaration","scope":25304,"src":"11298:78:70","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"typeName":{"id":25268,"keyName":"tokenIndex","keyNameLocation":"11314:10:70","keyType":{"id":25266,"name":"uint256","nodeType":"ElementaryTypeName","src":"11306:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"11298:57:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"valueName":"packedTokenBalance","valueNameLocation":"11336:18:70","valueType":{"id":25267,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11328:7:70","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},"visibility":"internal"}],"id":25273,"initialValue":{"baseExpression":{"id":25270,"name":"_poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28256,"src":"11379:18:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"}},"id":25272,"indexExpression":{"id":25271,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25260,"src":"11398:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11379:24:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"nodeType":"VariableDeclarationStatement","src":"11298:105:70"},{"body":{"id":25302,"nodeType":"Block","src":"11472:245:70","statements":[{"expression":{"id":25300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":25286,"name":"poolBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25269,"src":"11549:12:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"id":25288,"indexExpression":{"id":25287,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25275,"src":"11562:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11549:15:70","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"expression":{"id":25291,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25263,"src":"11619:8:70","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":25292,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11628:11:70","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":4719,"src":"11619:20:70","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":25294,"indexExpression":{"id":25293,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25275,"src":"11640:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11619:23:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":25295,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25263,"src":"11660:8:70","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":25296,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11669:20:70","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":4722,"src":"11660:29:70","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":25298,"indexExpression":{"id":25297,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25275,"src":"11690:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11660:32:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":25289,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6344,"src":"11567:18:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PackedTokenBalance_$6344_$","typeString":"type(library PackedTokenBalance)"}},"id":25290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11586:15:70","memberName":"toPackedBalance","nodeType":"MemberAccess","referencedDeclaration":6303,"src":"11567:34:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":25299,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11567:139:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"11549:157:70","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":25301,"nodeType":"ExpressionStatement","src":"11549:157:70"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":25282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25278,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25275,"src":"11434:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":25279,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25263,"src":"11438:8:70","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":25280,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11447:11:70","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":4719,"src":"11438:20:70","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":25281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11459:6:70","memberName":"length","nodeType":"MemberAccess","src":"11438:27:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11434:31:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":25303,"initializationExpression":{"assignments":[25275],"declarations":[{"constant":false,"id":25275,"mutability":"mutable","name":"i","nameLocation":"11427:1:70","nodeType":"VariableDeclaration","scope":25303,"src":"11419:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25274,"name":"uint256","nodeType":"ElementaryTypeName","src":"11419:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":25277,"initialValue":{"hexValue":"30","id":25276,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11431:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11419:13:70"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":25284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"11467:3:70","subExpression":{"id":25283,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25275,"src":"11469:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":25285,"nodeType":"ExpressionStatement","src":"11467:3:70"},"nodeType":"ForStatement","src":"11414:303:70"}]},"documentation":{"id":25258,"nodeType":"StructuredDocumentation","src":"11009:188:70","text":" @dev Packs and sets the raw and live balances of a Pool's tokens to the current values in poolData.balancesRaw\n and poolData.liveBalances in the same storage slot."},"id":25305,"implemented":true,"kind":"function","modifiers":[],"name":"_writePoolBalancesToStorage","nameLocation":"11211:27:70","nodeType":"FunctionDefinition","parameters":{"id":25264,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25260,"mutability":"mutable","name":"pool","nameLocation":"11247:4:70","nodeType":"VariableDeclaration","scope":25305,"src":"11239:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25259,"name":"address","nodeType":"ElementaryTypeName","src":"11239:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25263,"mutability":"mutable","name":"poolData","nameLocation":"11269:8:70","nodeType":"VariableDeclaration","scope":25305,"src":"11253:24:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":25262,"nodeType":"UserDefinedTypeName","pathNode":{"id":25261,"name":"PoolData","nameLocations":["11253:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"11253:8:70"},"referencedDeclaration":4729,"src":"11253:8:70","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"11238:40:70"},"returnParameters":{"id":25265,"nodeType":"ParameterList","parameters":[],"src":"11288:0:70"},"scope":25606,"src":"11202:521:70","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":25335,"nodeType":"Block","src":"12550:209:70","statements":[{"expression":{"arguments":[{"baseExpression":{"id":25320,"name":"_poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28256,"src":"12587:18:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"}},"id":25322,"indexExpression":{"id":25321,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25308,"src":"12606:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12587:24:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},{"baseExpression":{"id":25323,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"12625:15:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":25325,"indexExpression":{"id":25324,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25308,"src":"12641:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12625:21:70","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},{"baseExpression":{"id":25326,"name":"_poolTokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28250,"src":"12660:14:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_struct$_TokenInfo_$4704_storage_$_$","typeString":"mapping(address => mapping(contract IERC20 => struct TokenInfo storage ref))"}},"id":25328,"indexExpression":{"id":25327,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25308,"src":"12675:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12660:20:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_struct$_TokenInfo_$4704_storage_$","typeString":"mapping(contract IERC20 => struct TokenInfo storage ref)"}},{"baseExpression":{"id":25329,"name":"_poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28242,"src":"12694:11:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_contract$_IERC20_$40109_$dyn_storage_$","typeString":"mapping(address => contract IERC20[] storage ref)"}},"id":25331,"indexExpression":{"id":25330,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25308,"src":"12706:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12694:17:70","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage","typeString":"contract IERC20[] storage ref"}},{"id":25332,"name":"roundingDirection","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25311,"src":"12725:17:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_struct$_TokenInfo_$4704_storage_$","typeString":"mapping(contract IERC20 => struct TokenInfo storage ref)"},{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage","typeString":"contract IERC20[] storage ref"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"expression":{"id":25317,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25315,"src":"12560:8:70","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":25319,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12569:4:70","memberName":"load","nodeType":"MemberAccess","referencedDeclaration":30704,"src":"12560:13:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PoolData_$4729_memory_ptr_$_t_mapping$_t_uint256_$_t_bytes32_$_$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_mapping$_t_contract$_IERC20_$40109_$_t_struct$_TokenInfo_$4704_storage_$_$_t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr_$_t_enum$_Rounding_$4732_$returns$__$attached_to$_t_struct$_PoolData_$4729_memory_ptr_$","typeString":"function (struct PoolData memory,mapping(uint256 => bytes32),PoolConfigBits,mapping(contract IERC20 => struct TokenInfo storage ref),contract IERC20[] storage pointer,enum Rounding) view"}},"id":25333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12560:192:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25334,"nodeType":"ExpressionStatement","src":"12560:192:70"}]},"documentation":{"id":25306,"nodeType":"StructuredDocumentation","src":"11729:702:70","text":" @dev Fill in PoolData, including paying protocol yield fees and computing final raw and live balances.\n In normal operation, we update both balances and fees together. However, while Recovery Mode is enabled,\n we cannot track yield fees, as that would involve making external calls that could fail and block withdrawals.\n Therefore, disabling Recovery Mode requires writing *only* the balances to storage, so we still need this\n as a separate function. It is normally called by `_loadPoolDataUpdatingBalancesAndYieldFees`, but in the\n Recovery Mode special case, it is called separately, with the result passed into `_writePoolBalancesToStorage`."},"id":25336,"implemented":true,"kind":"function","modifiers":[],"name":"_loadPoolData","nameLocation":"12445:13:70","nodeType":"FunctionDefinition","parameters":{"id":25312,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25308,"mutability":"mutable","name":"pool","nameLocation":"12467:4:70","nodeType":"VariableDeclaration","scope":25336,"src":"12459:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25307,"name":"address","nodeType":"ElementaryTypeName","src":"12459:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25311,"mutability":"mutable","name":"roundingDirection","nameLocation":"12482:17:70","nodeType":"VariableDeclaration","scope":25336,"src":"12473:26:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"},"typeName":{"id":25310,"nodeType":"UserDefinedTypeName","pathNode":{"id":25309,"name":"Rounding","nameLocations":["12473:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":4732,"src":"12473:8:70"},"referencedDeclaration":4732,"src":"12473:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"visibility":"internal"}],"src":"12458:42:70"},"returnParameters":{"id":25316,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25315,"mutability":"mutable","name":"poolData","nameLocation":"12540:8:70","nodeType":"VariableDeclaration","scope":25336,"src":"12524:24:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":25314,"nodeType":"UserDefinedTypeName","pathNode":{"id":25313,"name":"PoolData","nameLocations":["12524:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"12524:8:70"},"referencedDeclaration":4729,"src":"12524:8:70","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"12523:26:70"},"scope":25606,"src":"12436:323:70","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":25380,"nodeType":"Block","src":"13378:401:70","statements":[{"expression":{"arguments":[{"baseExpression":{"id":25353,"name":"_poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28256,"src":"13497:18:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"}},"id":25355,"indexExpression":{"id":25354,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25339,"src":"13516:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13497:24:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},{"baseExpression":{"id":25356,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"13535:15:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":25358,"indexExpression":{"id":25357,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25339,"src":"13551:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13535:21:70","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},{"baseExpression":{"id":25359,"name":"_poolTokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28250,"src":"13570:14:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_struct$_TokenInfo_$4704_storage_$_$","typeString":"mapping(address => mapping(contract IERC20 => struct TokenInfo storage ref))"}},"id":25361,"indexExpression":{"id":25360,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25339,"src":"13585:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13570:20:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_struct$_TokenInfo_$4704_storage_$","typeString":"mapping(contract IERC20 => struct TokenInfo storage ref)"}},{"baseExpression":{"id":25362,"name":"_poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28242,"src":"13604:11:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_contract$_IERC20_$40109_$dyn_storage_$","typeString":"mapping(address => contract IERC20[] storage ref)"}},"id":25364,"indexExpression":{"id":25363,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25339,"src":"13616:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13604:17:70","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage","typeString":"contract IERC20[] storage ref"}},{"id":25365,"name":"roundingDirection","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25342,"src":"13635:17:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_struct$_TokenInfo_$4704_storage_$","typeString":"mapping(contract IERC20 => struct TokenInfo storage ref)"},{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage","typeString":"contract IERC20[] storage ref"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"expression":{"id":25350,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25348,"src":"13470:8:70","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":25352,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13479:4:70","memberName":"load","nodeType":"MemberAccess","referencedDeclaration":30704,"src":"13470:13:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PoolData_$4729_memory_ptr_$_t_mapping$_t_uint256_$_t_bytes32_$_$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_mapping$_t_contract$_IERC20_$40109_$_t_struct$_TokenInfo_$4704_storage_$_$_t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr_$_t_enum$_Rounding_$4732_$returns$__$attached_to$_t_struct$_PoolData_$4729_memory_ptr_$","typeString":"function (struct PoolData memory,mapping(uint256 => bytes32),PoolConfigBits,mapping(contract IERC20 => struct TokenInfo storage ref),contract IERC20[] storage pointer,enum Rounding) view"}},"id":25366,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13470:192:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25367,"nodeType":"ExpressionStatement","src":"13470:192:70"},{"expression":{"arguments":[{"id":25371,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25348,"src":"13709:8:70","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},{"baseExpression":{"id":25372,"name":"_poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28256,"src":"13719:18:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"}},"id":25374,"indexExpression":{"id":25373,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25339,"src":"13738:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13719:24:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},{"baseExpression":{"id":25375,"name":"_aggregateFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28263,"src":"13745:20:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$_$","typeString":"mapping(address => mapping(contract IERC20 => bytes32))"}},"id":25377,"indexExpression":{"id":25376,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25339,"src":"13766:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13745:26:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$","typeString":"mapping(contract IERC20 => bytes32)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$","typeString":"mapping(contract IERC20 => bytes32)"}],"expression":{"id":25368,"name":"PoolDataLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31031,"src":"13673:11:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolDataLib_$31031_$","typeString":"type(library PoolDataLib)"}},"id":25370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13685:23:70","memberName":"syncPoolBalancesAndFees","nodeType":"MemberAccess","referencedDeclaration":30807,"src":"13673:35:70","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PoolData_$4729_memory_ptr_$_t_mapping$_t_uint256_$_t_bytes32_$_$_t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$_$returns$__$","typeString":"function (struct PoolData memory,mapping(uint256 => bytes32),mapping(contract IERC20 => bytes32))"}},"id":25378,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13673:99:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25379,"nodeType":"ExpressionStatement","src":"13673:99:70"}]},"documentation":{"id":25337,"nodeType":"StructuredDocumentation","src":"12765:436:70","text":" @dev Fill in PoolData, including paying protocol yield fees and computing final raw and live balances.\n This function modifies protocol fees and balance storage. Out of an abundance of caution, since `_loadPoolData`\n makes external calls, we are making anything that calls it and then modifies storage non-reentrant.\n Side effects: updates `_aggregateFeeAmounts` and `_poolTokenBalances` in storage."},"id":25381,"implemented":true,"kind":"function","modifiers":[{"id":25345,"kind":"modifierInvocation","modifierName":{"id":25344,"name":"nonReentrant","nameLocations":["13330:12:70"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"13330:12:70"},"nodeType":"ModifierInvocation","src":"13330:12:70"}],"name":"_loadPoolDataUpdatingBalancesAndYieldFees","nameLocation":"13215:41:70","nodeType":"FunctionDefinition","parameters":{"id":25343,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25339,"mutability":"mutable","name":"pool","nameLocation":"13274:4:70","nodeType":"VariableDeclaration","scope":25381,"src":"13266:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25338,"name":"address","nodeType":"ElementaryTypeName","src":"13266:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25342,"mutability":"mutable","name":"roundingDirection","nameLocation":"13297:17:70","nodeType":"VariableDeclaration","scope":25381,"src":"13288:26:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"},"typeName":{"id":25341,"nodeType":"UserDefinedTypeName","pathNode":{"id":25340,"name":"Rounding","nameLocations":["13288:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":4732,"src":"13288:8:70"},"referencedDeclaration":4732,"src":"13288:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"visibility":"internal"}],"src":"13256:64:70"},"returnParameters":{"id":25349,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25348,"mutability":"mutable","name":"poolData","nameLocation":"13368:8:70","nodeType":"VariableDeclaration","scope":25381,"src":"13352:24:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":25347,"nodeType":"UserDefinedTypeName","pathNode":{"id":25346,"name":"PoolData","nameLocations":["13352:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"13352:8:70"},"referencedDeclaration":4729,"src":"13352:8:70","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"13351:26:70"},"scope":25606,"src":"13206:573:70","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":25457,"nodeType":"Block","src":"14277:641:70","statements":[{"expression":{"id":25403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":25397,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25385,"src":"14287:8:70","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":25400,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14296:11:70","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":4719,"src":"14287:20:70","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":25401,"indexExpression":{"id":25399,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25392,"src":"14308:10:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"14287:32:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":25402,"name":"newRawBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25387,"src":"14322:13:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14287:48:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":25404,"nodeType":"ExpressionStatement","src":"14287:48:70"},{"assignments":[25416],"declarations":[{"constant":false,"id":25416,"mutability":"mutable","name":"_upOrDown","nameLocation":"14414:9:70","nodeType":"VariableDeclaration","scope":25457,"src":"14346:77:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"},"typeName":{"id":25415,"nodeType":"FunctionTypeName","parameterTypes":{"id":25411,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25406,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25415,"src":"14355:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25405,"name":"uint256","nodeType":"ElementaryTypeName","src":"14355:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25408,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25415,"src":"14364:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25407,"name":"uint256","nodeType":"ElementaryTypeName","src":"14364:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25410,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25415,"src":"14373:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25409,"name":"uint256","nodeType":"ElementaryTypeName","src":"14373:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14354:27:70"},"returnParameterTypes":{"id":25414,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25413,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25415,"src":"14405:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25412,"name":"uint256","nodeType":"ElementaryTypeName","src":"14405:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14404:9:70"},"src":"14346:77:70","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"},"visibility":"internal"},"visibility":"internal"}],"id":25426,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"},"id":25420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25417,"name":"roundingDirection","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25390,"src":"14426:17:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":25418,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"14459:8:70","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":25419,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14468:8:70","memberName":"ROUND_UP","nodeType":"MemberAccess","referencedDeclaration":4730,"src":"14459:17:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"src":"14426:50:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":25423,"name":"ScalingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6848,"src":"14547:14:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ScalingHelpers_$6848_$","typeString":"type(library ScalingHelpers)"}},"id":25424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14562:28:70","memberName":"toScaled18ApplyRateRoundDown","nodeType":"MemberAccess","referencedDeclaration":6467,"src":"14547:43:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":25425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"14426:164:70","trueExpression":{"expression":{"id":25421,"name":"ScalingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6848,"src":"14491:14:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ScalingHelpers_$6848_$","typeString":"type(library ScalingHelpers)"}},"id":25422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14506:26:70","memberName":"toScaled18ApplyRateRoundUp","nodeType":"MemberAccess","referencedDeclaration":6488,"src":"14491:41:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"nodeType":"VariableDeclarationStatement","src":"14346:244:70"},{"expression":{"id":25443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":25427,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25385,"src":"14601:8:70","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":25430,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14610:20:70","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":4722,"src":"14601:29:70","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":25431,"indexExpression":{"id":25429,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25392,"src":"14631:10:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"14601:41:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":25433,"name":"newRawBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25387,"src":"14668:13:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":25434,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25385,"src":"14695:8:70","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":25435,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14704:21:70","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":4728,"src":"14695:30:70","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":25437,"indexExpression":{"id":25436,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25392,"src":"14726:10:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14695:42:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":25438,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25385,"src":"14751:8:70","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":25439,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14760:10:70","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":4725,"src":"14751:19:70","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":25441,"indexExpression":{"id":25440,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25392,"src":"14771:10:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14751:31:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":25432,"name":"_upOrDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25416,"src":"14645:9:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":25442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14645:147:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14601:191:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":25444,"nodeType":"ExpressionStatement","src":"14601:191:70"},{"expression":{"arguments":[{"id":25446,"name":"newRawBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25387,"src":"14820:13:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":25447,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25385,"src":"14835:8:70","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":25448,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14844:21:70","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":4728,"src":"14835:30:70","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":25450,"indexExpression":{"id":25449,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25392,"src":"14866:10:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14835:42:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":25451,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25385,"src":"14879:8:70","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":25452,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14888:10:70","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":4725,"src":"14879:19:70","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":25454,"indexExpression":{"id":25453,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25392,"src":"14899:10:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14879:31:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":25445,"name":"_upOrDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25416,"src":"14810:9:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":25455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14810:101:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25396,"id":25456,"nodeType":"Return","src":"14803:108:70"}]},"documentation":{"id":25382,"nodeType":"StructuredDocumentation","src":"13785:270:70","text":" @dev Updates the raw and live balance of a given token in poolData, scaling the given raw balance by both decimal\n and token rates, and rounding the result in the given direction. Assumes scaling factors and rates are current\n in PoolData."},"id":25458,"implemented":true,"kind":"function","modifiers":[],"name":"_updateRawAndLiveTokenBalancesInPoolData","nameLocation":"14069:40:70","nodeType":"FunctionDefinition","parameters":{"id":25393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25385,"mutability":"mutable","name":"poolData","nameLocation":"14135:8:70","nodeType":"VariableDeclaration","scope":25458,"src":"14119:24:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":25384,"nodeType":"UserDefinedTypeName","pathNode":{"id":25383,"name":"PoolData","nameLocations":["14119:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"14119:8:70"},"referencedDeclaration":4729,"src":"14119:8:70","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":25387,"mutability":"mutable","name":"newRawBalance","nameLocation":"14161:13:70","nodeType":"VariableDeclaration","scope":25458,"src":"14153:21:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25386,"name":"uint256","nodeType":"ElementaryTypeName","src":"14153:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25390,"mutability":"mutable","name":"roundingDirection","nameLocation":"14193:17:70","nodeType":"VariableDeclaration","scope":25458,"src":"14184:26:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"},"typeName":{"id":25389,"nodeType":"UserDefinedTypeName","pathNode":{"id":25388,"name":"Rounding","nameLocations":["14184:8:70"],"nodeType":"IdentifierPath","referencedDeclaration":4732,"src":"14184:8:70"},"referencedDeclaration":4732,"src":"14184:8:70","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"visibility":"internal"},{"constant":false,"id":25392,"mutability":"mutable","name":"tokenIndex","nameLocation":"14228:10:70","nodeType":"VariableDeclaration","scope":25458,"src":"14220:18:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25391,"name":"uint256","nodeType":"ElementaryTypeName","src":"14220:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14109:135:70"},"returnParameters":{"id":25396,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25395,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25458,"src":"14268:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25394,"name":"uint256","nodeType":"ElementaryTypeName","src":"14268:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14267:9:70"},"scope":25606,"src":"14060:858:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":25505,"nodeType":"Block","src":"15011:692:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":25471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25465,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25462,"src":"15132:17:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":25467,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25460,"src":"15177:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25466,"name":"ISwapFeePercentageBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3057,"src":"15152:24:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISwapFeePercentageBounds_$3057_$","typeString":"type(contract ISwapFeePercentageBounds)"}},"id":25468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15152:30:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISwapFeePercentageBounds_$3057","typeString":"contract ISwapFeePercentageBounds"}},"id":25469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15183:27:70","memberName":"getMinimumSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":3050,"src":"15152:58:70","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":25470,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15152:60:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15132:80:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":25476,"nodeType":"IfStatement","src":"15128:143:70","trueBody":{"id":25475,"nodeType":"Block","src":"15214:57:70","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":25472,"name":"SwapFeePercentageTooLow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3610,"src":"15235:23:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":25473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15235:25:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":25474,"nodeType":"RevertStatement","src":"15228:32:70"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":25483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25477,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25462,"src":"15285:17:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":25479,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25460,"src":"15330:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25478,"name":"ISwapFeePercentageBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3057,"src":"15305:24:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISwapFeePercentageBounds_$3057_$","typeString":"type(contract ISwapFeePercentageBounds)"}},"id":25480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15305:30:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISwapFeePercentageBounds_$3057","typeString":"contract ISwapFeePercentageBounds"}},"id":25481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15336:27:70","memberName":"getMaximumSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":3056,"src":"15305:58:70","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":25482,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15305:60:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15285:80:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":25488,"nodeType":"IfStatement","src":"15281:144:70","trueBody":{"id":25487,"nodeType":"Block","src":"15367:58:70","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":25484,"name":"SwapFeePercentageTooHigh","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3613,"src":"15388:24:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":25485,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15388:26:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":25486,"nodeType":"RevertStatement","src":"15381:33:70"}]}},{"expression":{"id":25498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":25489,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"15540:15:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":25491,"indexExpression":{"id":25490,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25460,"src":"15556:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15540:21:70","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":25496,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25462,"src":"15613:17:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":25492,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"15564:15:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":25494,"indexExpression":{"id":25493,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25460,"src":"15580:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15564:21:70","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":25495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15586:26:70","memberName":"setStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":30101,"src":"15564:48:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_uint256_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,uint256) pure returns (PoolConfigBits)"}},"id":25497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15564:67:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"15540:91:70","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":25499,"nodeType":"ExpressionStatement","src":"15540:91:70"},{"eventCall":{"arguments":[{"id":25501,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25460,"src":"15672:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25502,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25462,"src":"15678:17:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":25500,"name":"SwapFeePercentageChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3915,"src":"15647:24:70","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":25503,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15647:49:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25504,"nodeType":"EmitStatement","src":"15642:54:70"}]},"id":25506,"implemented":true,"kind":"function","modifiers":[],"name":"_setStaticSwapFeePercentage","nameLocation":"14933:27:70","nodeType":"FunctionDefinition","parameters":{"id":25463,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25460,"mutability":"mutable","name":"pool","nameLocation":"14969:4:70","nodeType":"VariableDeclaration","scope":25506,"src":"14961:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25459,"name":"address","nodeType":"ElementaryTypeName","src":"14961:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25462,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"14983:17:70","nodeType":"VariableDeclaration","scope":25506,"src":"14975:25:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25461,"name":"uint256","nodeType":"ElementaryTypeName","src":"14975:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14960:41:70"},"returnParameters":{"id":25464,"nodeType":"ParameterList","parameters":[],"src":"15011:0:70"},"scope":25606,"src":"14924:779:70","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":25545,"nodeType":"Block","src":"15883:192:70","statements":[{"body":{"id":25539,"nodeType":"Block","src":"15937:89:70","statements":[{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"id":25534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":25530,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25511,"src":"15955:6:70","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":25532,"indexExpression":{"id":25531,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25520,"src":"15962:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15955:9:70","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":25533,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25514,"src":"15968:5:70","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"15955:18:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":25538,"nodeType":"IfStatement","src":"15951:65:70","trueBody":{"id":25537,"nodeType":"Block","src":"15975:41:70","statements":[{"expression":{"id":25535,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25520,"src":"16000:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25518,"id":25536,"nodeType":"Return","src":"15993:8:70"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":25526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25523,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25520,"src":"15913:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":25524,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25511,"src":"15917:6:70","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":25525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15924:6:70","memberName":"length","nodeType":"MemberAccess","src":"15917:13:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15913:17:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":25540,"initializationExpression":{"assignments":[25520],"declarations":[{"constant":false,"id":25520,"mutability":"mutable","name":"i","nameLocation":"15906:1:70","nodeType":"VariableDeclaration","scope":25540,"src":"15898:9:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25519,"name":"uint256","nodeType":"ElementaryTypeName","src":"15898:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":25522,"initialValue":{"hexValue":"30","id":25521,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15910:1:70","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"15898:13:70"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":25528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"15932:3:70","subExpression":{"id":25527,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25520,"src":"15932:1:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":25529,"nodeType":"ExpressionStatement","src":"15932:3:70"},"nodeType":"ForStatement","src":"15893:133:70"},{"errorCall":{"arguments":[{"id":25542,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25514,"src":"16062:5:70","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":25541,"name":"TokenNotRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3518,"src":"16043:18:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$40109_$returns$_t_error_$","typeString":"function (contract IERC20) pure returns (error)"}},"id":25543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16043:25:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":25544,"nodeType":"RevertStatement","src":"16036:32:70"}]},"documentation":{"id":25507,"nodeType":"StructuredDocumentation","src":"15709:74:70","text":"@dev Find the index of a token in a token array. Reverts if not found."},"id":25546,"implemented":true,"kind":"function","modifiers":[],"name":"_findTokenIndex","nameLocation":"15797:15:70","nodeType":"FunctionDefinition","parameters":{"id":25515,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25511,"mutability":"mutable","name":"tokens","nameLocation":"15829:6:70","nodeType":"VariableDeclaration","scope":25546,"src":"15813:22:70","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":25509,"nodeType":"UserDefinedTypeName","pathNode":{"id":25508,"name":"IERC20","nameLocations":["15813:6:70"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"15813:6:70"},"referencedDeclaration":40109,"src":"15813:6:70","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":25510,"nodeType":"ArrayTypeName","src":"15813:8:70","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":25514,"mutability":"mutable","name":"token","nameLocation":"15844:5:70","nodeType":"VariableDeclaration","scope":25546,"src":"15837:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":25513,"nodeType":"UserDefinedTypeName","pathNode":{"id":25512,"name":"IERC20","nameLocations":["15837:6:70"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"15837:6:70"},"referencedDeclaration":40109,"src":"15837:6:70","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"15812:38:70"},"returnParameters":{"id":25518,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25517,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25546,"src":"15874:7:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25516,"name":"uint256","nodeType":"ElementaryTypeName","src":"15874:7:70","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15873:9:70"},"scope":25606,"src":"15788:287:70","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":25556,"nodeType":"Block","src":"16446:59:70","statements":[{"expression":{"arguments":[{"id":25552,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25549,"src":"16482:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25551,"name":"_ensurePoolInRecoveryMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25574,"src":"16456:25:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":25553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16456:31:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25554,"nodeType":"ExpressionStatement","src":"16456:31:70"},{"id":25555,"nodeType":"PlaceholderStatement","src":"16497:1:70"}]},"documentation":{"id":25547,"nodeType":"StructuredDocumentation","src":"16302:97:70","text":"@dev Place on functions that may only be called when the associated pool is in recovery mode."},"id":25557,"name":"onlyInRecoveryMode","nameLocation":"16413:18:70","nodeType":"ModifierDefinition","parameters":{"id":25550,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25549,"mutability":"mutable","name":"pool","nameLocation":"16440:4:70","nodeType":"VariableDeclaration","scope":25557,"src":"16432:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25548,"name":"address","nodeType":"ElementaryTypeName","src":"16432:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16431:14:70"},"src":"16404:101:70","virtual":false,"visibility":"internal"},{"body":{"id":25573,"nodeType":"Block","src":"16632:109:70","statements":[{"condition":{"id":25566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"16646:28:70","subExpression":{"arguments":[{"id":25564,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25560,"src":"16669:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25563,"name":"_isPoolInRecoveryMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25589,"src":"16647:21:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":25565,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16647:27:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":25572,"nodeType":"IfStatement","src":"16642:93:70","trueBody":{"id":25571,"nodeType":"Block","src":"16676:59:70","statements":[{"errorCall":{"arguments":[{"id":25568,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25560,"src":"16719:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25567,"name":"PoolNotInRecoveryMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3635,"src":"16697:21:70","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":25569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16697:27:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":25570,"nodeType":"RevertStatement","src":"16690:34:70"}]}}]},"documentation":{"id":25558,"nodeType":"StructuredDocumentation","src":"16511:53:70","text":"@dev Reverts if the pool is not in recovery mode."},"id":25574,"implemented":true,"kind":"function","modifiers":[],"name":"_ensurePoolInRecoveryMode","nameLocation":"16578:25:70","nodeType":"FunctionDefinition","parameters":{"id":25561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25560,"mutability":"mutable","name":"pool","nameLocation":"16612:4:70","nodeType":"VariableDeclaration","scope":25574,"src":"16604:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25559,"name":"address","nodeType":"ElementaryTypeName","src":"16604:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16603:14:70"},"returnParameters":{"id":25562,"nodeType":"ParameterList","parameters":[],"src":"16632:0:70"},"scope":25606,"src":"16569:172:70","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":25588,"nodeType":"Block","src":"17027:68:70","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":25582,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"17044:15:70","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":25584,"indexExpression":{"id":25583,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25577,"src":"17060:4:70","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17044:21:70","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":25585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17066:20:70","memberName":"isPoolInRecoveryMode","nodeType":"MemberAccess","referencedDeclaration":29766,"src":"17044:42:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":25586,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17044:44:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":25581,"id":25587,"nodeType":"Return","src":"17037:51:70"}]},"documentation":{"id":25575,"nodeType":"StructuredDocumentation","src":"16747:201:70","text":" @notice Checks whether a pool is in recovery mode.\n @param pool Address of the pool to check\n @return inRecoveryMode True if the pool is in recovery mode, false otherwise"},"id":25589,"implemented":true,"kind":"function","modifiers":[],"name":"_isPoolInRecoveryMode","nameLocation":"16962:21:70","nodeType":"FunctionDefinition","parameters":{"id":25578,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25577,"mutability":"mutable","name":"pool","nameLocation":"16992:4:70","nodeType":"VariableDeclaration","scope":25589,"src":"16984:12:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25576,"name":"address","nodeType":"ElementaryTypeName","src":"16984:7:70","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16983:14:70"},"returnParameters":{"id":25581,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25580,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25589,"src":"17021:4:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":25579,"name":"bool","nodeType":"ElementaryTypeName","src":"17021:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"17020:6:70"},"scope":25606,"src":"16953:142:70","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":25604,"nodeType":"Block","src":"17157:103:70","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":25602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25594,"name":"EVMCallModeHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5808,"src":"17174:18:70","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_EVMCallModeHelpers_$5808_$","typeString":"type(library EVMCallModeHelpers)"}},"id":25595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17193:12:70","memberName":"isStaticCall","nodeType":"MemberAccess","referencedDeclaration":5807,"src":"17174:31:70","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":25596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17174:33:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":25601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25597,"name":"_vaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28272,"src":"17211:15:70","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"id":25598,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17227:15:70","memberName":"isQueryDisabled","nodeType":"MemberAccess","referencedDeclaration":31218,"src":"17211:31:70","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_VaultStateBits_$31184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_VaultStateBits_$31184_$","typeString":"function (VaultStateBits) pure returns (bool)"}},"id":25599,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17211:33:70","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":25600,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17248:5:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"17211:42:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"17174:79:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":25593,"id":25603,"nodeType":"Return","src":"17167:86:70"}]},"id":25605,"implemented":true,"kind":"function","modifiers":[],"name":"_isQueryContext","nameLocation":"17110:15:70","nodeType":"FunctionDefinition","parameters":{"id":25590,"nodeType":"ParameterList","parameters":[],"src":"17125:2:70"},"returnParameters":{"id":25593,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25592,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25605,"src":"17151:4:70","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":25591,"name":"bool","nodeType":"ElementaryTypeName","src":"17151:4:70","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"17150:6:70"},"scope":25606,"src":"17101:159:70","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":25607,"src":"1998:15264:70","usedErrors":[1823,3413,3418,3423,3428,3437,3443,3446,3449,3452,3455,3458,3461,3470,3473,3476,3479,3482,3485,3488,3491,3494,3497,3500,3503,3506,3509,3512,3518,3525,3532,3535,3538,3548,3558,3565,3568,3571,3574,3584,3594,3601,3604,3607,3610,3613,3616,3619,3622,3625,3630,3635,3640,3643,3646,3649,3652,3655,3660,3665,3670,3676,3682,3685,3693,3699,3705,3708,3711,3714,3719,3729,3739,3746,3749,3752,3755,3758,3761,3764,3767,9886,39870,39875,39880,39889,39894,39899],"usedEvents":[3806,3811,3830,3842,3854,3872,3890,3895,3898,3901,3908,3915,3922,3929,3936,3942,3948,3960,3970,3980,3992,3997,4006,38865,38876]}],"src":"46:17217:70"},"id":70},"@balancer-labs/v3-vault/contracts/VaultExtension.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultExtension.sol","exportedSymbols":{"AddLiquidityKind":[4807],"AddLiquidityParams":[4823],"Address":[40714],"AfterSwapParams":[4801],"BasePoolMath":[12083],"BufferWrapOrUnwrapParams":[4862],"CastingHelpers":[5642],"EVMCallModeHelpers":[5808],"FEE_BITLENGTH":[4865],"FEE_SCALING_FACTOR":[4868],"FixedPoint":[8208],"HookFlags":[4627],"HooksConfig":[4651],"HooksConfigLib":[29474],"IAuthorizer":[1455],"IBasePool":[1505],"IERC20":[40109],"IERC20Metadata":[40135],"IERC4626":[39833],"IHooks":[2026],"IProtocolFeeController":[2420],"IRateProvider":[263],"IVault":[3111],"IVaultAdmin":[3401],"IVaultExtension":[4426],"InputHelpers":[6193],"LiquidityManagement":[4580],"MAX_FEE_PERCENTAGE":[4871],"PackedTokenBalance":[6344],"PoolConfig":[4605],"PoolConfigBits":[4582],"PoolConfigLib":[30441],"PoolData":[4729],"PoolDataLib":[31031],"PoolRoleAccounts":[4677],"PoolSwapParams":[4772],"Proxy":[40031],"RemoveLiquidityKind":[4828],"RemoveLiquidityParams":[4844],"RevertCodec":[6434],"Rounding":[4732],"ScalingHelpers":[6848],"StorageSlotExtension":[10285],"SwapKind":[4735],"SwapState":[4661],"TokenConfig":[4694],"TokenInfo":[4704],"TokenType":[4681],"TransientStorageHelpers":[7442],"VaultCommon":[25606],"VaultExtension":[28100],"VaultExtensionsLib":[31178],"VaultState":[4669],"VaultStateBits":[31184],"VaultStateLib":[31325],"VaultSwapParams":[4754],"WrappingDirection":[4847]},"id":28101,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":25608,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:71"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","id":25610,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":40136,"src":"72:99:71","symbolAliases":[{"foreign":{"id":25609,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40135,"src":"81:14:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":25612,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":39834,"src":"172:75:71","symbolAliases":[{"foreign":{"id":25611,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39833,"src":"181:8:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":25614,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":40110,"src":"248:72:71","symbolAliases":[{"foreign":{"id":25613,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"257:6:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"@openzeppelin/contracts/utils/Address.sol","id":25616,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":40715,"src":"321:68:71","symbolAliases":[{"foreign":{"id":25615,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40714,"src":"330:7:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/proxy/Proxy.sol","file":"@openzeppelin/contracts/proxy/Proxy.sol","id":25618,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":40032,"src":"390:64:71","symbolAliases":[{"foreign":{"id":25617,"name":"Proxy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40031,"src":"399:5:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":25620,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":1456,"src":"456:91:71","symbolAliases":[{"foreign":{"id":25619,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1455,"src":"465:11:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":25622,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":2421,"src":"548:113:71","symbolAliases":[{"foreign":{"id":25621,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2420,"src":"557:22:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","id":25624,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":264,"src":"662:112:71","symbolAliases":[{"foreign":{"id":25623,"name":"IRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":263,"src":"671:13:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","id":25626,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":4427,"src":"775:99:71","symbolAliases":[{"foreign":{"id":25625,"name":"IVaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4426,"src":"784:15:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","id":25628,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":3402,"src":"875:91:71","symbolAliases":[{"foreign":{"id":25627,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3401,"src":"884:11:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol","id":25630,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":1506,"src":"967:87:71","symbolAliases":[{"foreign":{"id":25629,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1505,"src":"976:9:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","id":25632,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":2027,"src":"1055:81:71","symbolAliases":[{"foreign":{"id":25631,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2026,"src":"1064:6:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":25634,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":3112,"src":"1137:81:71","symbolAliases":[{"foreign":{"id":25633,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"1146:6:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":25635,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":4872,"src":"1219:69:71","symbolAliases":[],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","id":25637,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":10286,"src":"1290:120:71","symbolAliases":[{"foreign":{"id":25636,"name":"StorageSlotExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10285,"src":"1299:20:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol","id":25639,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":5809,"src":"1411:111:71","symbolAliases":[{"foreign":{"id":25638,"name":"EVMCallModeHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5808,"src":"1420:18:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","id":25641,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":6345,"src":"1523:111:71","symbolAliases":[{"foreign":{"id":25640,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6344,"src":"1532:18:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol","id":25643,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":6849,"src":"1635:103:71","symbolAliases":[{"foreign":{"id":25642,"name":"ScalingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6848,"src":"1644:14:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol","id":25645,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":5643,"src":"1739:103:71","symbolAliases":[{"foreign":{"id":25644,"name":"CastingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5642,"src":"1748:14:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","id":25647,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":6194,"src":"1843:99:71","symbolAliases":[{"foreign":{"id":25646,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6193,"src":"1852:12:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol","id":25649,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":6435,"src":"1943:97:71","symbolAliases":[{"foreign":{"id":25648,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6434,"src":"1952:11:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":25651,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":8209,"src":"2041:92:71","symbolAliases":[{"foreign":{"id":25650,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"2050:10:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","id":25653,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":7443,"src":"2134:125:71","symbolAliases":[{"foreign":{"id":25652,"name":"TransientStorageHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7442,"src":"2147:23:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/VaultStateLib.sol","file":"./lib/VaultStateLib.sol","id":25656,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":31326,"src":"2261:72:71","symbolAliases":[{"foreign":{"id":25654,"name":"VaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31184,"src":"2270:14:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":25655,"name":"VaultStateLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31325,"src":"2286:13:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/PoolConfigLib.sol","file":"./lib/PoolConfigLib.sol","id":25659,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":30442,"src":"2334:72:71","symbolAliases":[{"foreign":{"id":25657,"name":"PoolConfigLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30441,"src":"2343:13:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":25658,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"2358:14:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/VaultExtensionsLib.sol","file":"./lib/VaultExtensionsLib.sol","id":25661,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":31179,"src":"2407:66:71","symbolAliases":[{"foreign":{"id":25660,"name":"VaultExtensionsLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31178,"src":"2416:18:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/HooksConfigLib.sol","file":"./lib/HooksConfigLib.sol","id":25663,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":29475,"src":"2474:58:71","symbolAliases":[{"foreign":{"id":25662,"name":"HooksConfigLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29474,"src":"2483:14:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/PoolDataLib.sol","file":"./lib/PoolDataLib.sol","id":25665,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":31032,"src":"2533:52:71","symbolAliases":[{"foreign":{"id":25664,"name":"PoolDataLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31031,"src":"2542:11:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/BasePoolMath.sol","file":"./BasePoolMath.sol","id":25667,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":12084,"src":"2586:50:71","symbolAliases":[{"foreign":{"id":25666,"name":"BasePoolMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12083,"src":"2595:12:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultCommon.sol","file":"./VaultCommon.sol","id":25669,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28101,"sourceUnit":25607,"src":"2637:48:71","symbolAliases":[{"foreign":{"id":25668,"name":"VaultCommon","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25606,"src":"2646:11:71","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":25671,"name":"IVaultExtension","nameLocations":["3198:15:71"],"nodeType":"IdentifierPath","referencedDeclaration":4426,"src":"3198:15:71"},"id":25672,"nodeType":"InheritanceSpecifier","src":"3198:15:71"},{"baseName":{"id":25673,"name":"VaultCommon","nameLocations":["3215:11:71"],"nodeType":"IdentifierPath","referencedDeclaration":25606,"src":"3215:11:71"},"id":25674,"nodeType":"InheritanceSpecifier","src":"3215:11:71"},{"baseName":{"id":25675,"name":"Proxy","nameLocations":["3228:5:71"],"nodeType":"IdentifierPath","referencedDeclaration":40031,"src":"3228:5:71"},"id":25676,"nodeType":"InheritanceSpecifier","src":"3228:5:71"}],"canonicalName":"VaultExtension","contractDependencies":[],"contractKind":"contract","documentation":{"id":25670,"nodeType":"StructuredDocumentation","src":"2687:483:71","text":" @notice Bytecode extension for the Vault containing permissionless functions outside the critical path.\n It has access to the same storage layout as the main vault.\n The functions in this contract are not meant to be called directly. They must only be called by the Vault\n via delegate calls, so that any state modifications produced by this contract's code will actually target\n the main Vault's state.\n The storage of this contract is in practice unused."},"fullyImplemented":true,"id":28100,"internalFunctionIDs":{"6467":1,"6488":2},"linearizedBaseContracts":[28100,40031,25606,39429,1824,39900,9942,28384,3768,4007,4426],"name":"VaultExtension","nameLocation":"3180:14:71","nodeType":"ContractDefinition","nodes":[{"global":false,"id":25678,"libraryName":{"id":25677,"name":"Address","nameLocations":["3246:7:71"],"nodeType":"IdentifierPath","referencedDeclaration":40714,"src":"3246:7:71"},"nodeType":"UsingForDirective","src":"3240:20:71"},{"global":false,"id":25682,"libraryName":{"id":25679,"name":"CastingHelpers","nameLocations":["3271:14:71"],"nodeType":"IdentifierPath","referencedDeclaration":5642,"src":"3271:14:71"},"nodeType":"UsingForDirective","src":"3265:35:71","typeName":{"baseType":{"id":25680,"name":"uint256","nodeType":"ElementaryTypeName","src":"3290:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":25681,"nodeType":"ArrayTypeName","src":"3290:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},{"global":false,"id":25685,"libraryName":{"id":25683,"name":"FixedPoint","nameLocations":["3311:10:71"],"nodeType":"IdentifierPath","referencedDeclaration":8208,"src":"3311:10:71"},"nodeType":"UsingForDirective","src":"3305:29:71","typeName":{"id":25684,"name":"uint256","nodeType":"ElementaryTypeName","src":"3326:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":25688,"libraryName":{"id":25686,"name":"PackedTokenBalance","nameLocations":["3345:18:71"],"nodeType":"IdentifierPath","referencedDeclaration":6344,"src":"3345:18:71"},"nodeType":"UsingForDirective","src":"3339:37:71","typeName":{"id":25687,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3368:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"global":false,"id":25692,"libraryName":{"id":25689,"name":"PoolConfigLib","nameLocations":["3387:13:71"],"nodeType":"IdentifierPath","referencedDeclaration":30441,"src":"3387:13:71"},"nodeType":"UsingForDirective","src":"3381:39:71","typeName":{"id":25691,"nodeType":"UserDefinedTypeName","pathNode":{"id":25690,"name":"PoolConfigBits","nameLocations":["3405:14:71"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"3405:14:71"},"referencedDeclaration":4582,"src":"3405:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}},{"global":false,"id":25696,"libraryName":{"id":25693,"name":"HooksConfigLib","nameLocations":["3431:14:71"],"nodeType":"IdentifierPath","referencedDeclaration":29474,"src":"3431:14:71"},"nodeType":"UsingForDirective","src":"3425:40:71","typeName":{"id":25695,"nodeType":"UserDefinedTypeName","pathNode":{"id":25694,"name":"PoolConfigBits","nameLocations":["3450:14:71"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"3450:14:71"},"referencedDeclaration":4582,"src":"3450:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}},{"global":false,"id":25700,"libraryName":{"id":25697,"name":"VaultStateLib","nameLocations":["3476:13:71"],"nodeType":"IdentifierPath","referencedDeclaration":31325,"src":"3476:13:71"},"nodeType":"UsingForDirective","src":"3470:39:71","typeName":{"id":25699,"nodeType":"UserDefinedTypeName","pathNode":{"id":25698,"name":"VaultStateBits","nameLocations":["3494:14:71"],"nodeType":"IdentifierPath","referencedDeclaration":31184,"src":"3494:14:71"},"referencedDeclaration":31184,"src":"3494:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}}},{"global":false,"id":25703,"libraryName":{"id":25701,"name":"InputHelpers","nameLocations":["3520:12:71"],"nodeType":"IdentifierPath","referencedDeclaration":6193,"src":"3520:12:71"},"nodeType":"UsingForDirective","src":"3514:31:71","typeName":{"id":25702,"name":"uint256","nodeType":"ElementaryTypeName","src":"3537:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":25705,"libraryName":{"id":25704,"name":"ScalingHelpers","nameLocations":["3556:14:71"],"nodeType":"IdentifierPath","referencedDeclaration":6848,"src":"3556:14:71"},"nodeType":"UsingForDirective","src":"3550:27:71"},{"global":false,"id":25709,"libraryName":{"id":25706,"name":"VaultExtensionsLib","nameLocations":["3588:18:71"],"nodeType":"IdentifierPath","referencedDeclaration":31178,"src":"3588:18:71"},"nodeType":"UsingForDirective","src":"3582:36:71","typeName":{"id":25708,"nodeType":"UserDefinedTypeName","pathNode":{"id":25707,"name":"IVault","nameLocations":["3611:6:71"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"3611:6:71"},"referencedDeclaration":3111,"src":"3611:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}},{"global":false,"id":25711,"libraryName":{"id":25710,"name":"TransientStorageHelpers","nameLocations":["3629:23:71"],"nodeType":"IdentifierPath","referencedDeclaration":7442,"src":"3629:23:71"},"nodeType":"UsingForDirective","src":"3623:36:71"},{"global":false,"id":25713,"libraryName":{"id":25712,"name":"StorageSlotExtension","nameLocations":["3670:20:71"],"nodeType":"IdentifierPath","referencedDeclaration":10285,"src":"3670:20:71"},"nodeType":"UsingForDirective","src":"3664:33:71"},{"global":false,"id":25717,"libraryName":{"id":25714,"name":"PoolDataLib","nameLocations":["3708:11:71"],"nodeType":"IdentifierPath","referencedDeclaration":31031,"src":"3708:11:71"},"nodeType":"UsingForDirective","src":"3702:31:71","typeName":{"id":25716,"nodeType":"UserDefinedTypeName","pathNode":{"id":25715,"name":"PoolData","nameLocations":["3724:8:71"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"3724:8:71"},"referencedDeclaration":4729,"src":"3724:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}}},{"constant":false,"id":25720,"mutability":"immutable","name":"_vault","nameLocation":"3764:6:71","nodeType":"VariableDeclaration","scope":28100,"src":"3739:31:71","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":25719,"nodeType":"UserDefinedTypeName","pathNode":{"id":25718,"name":"IVault","nameLocations":["3739:6:71"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"3739:6:71"},"referencedDeclaration":3111,"src":"3739:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"private"},{"constant":false,"id":25723,"mutability":"immutable","name":"_vaultAdmin","nameLocation":"3806:11:71","nodeType":"VariableDeclaration","scope":28100,"src":"3776:41:71","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultAdmin_$3401","typeString":"contract IVaultAdmin"},"typeName":{"id":25722,"nodeType":"UserDefinedTypeName","pathNode":{"id":25721,"name":"IVaultAdmin","nameLocations":["3776:11:71"],"nodeType":"IdentifierPath","referencedDeclaration":3401,"src":"3776:11:71"},"referencedDeclaration":3401,"src":"3776:11:71","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultAdmin_$3401","typeString":"contract IVaultAdmin"}},"visibility":"private"},{"body":{"id":25730,"nodeType":"Block","src":"3941:54:71","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":25726,"name":"_ensureVaultDelegateCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25740,"src":"3951:24:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":25727,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3951:26:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25728,"nodeType":"ExpressionStatement","src":"3951:26:71"},{"id":25729,"nodeType":"PlaceholderStatement","src":"3987:1:71"}]},"documentation":{"id":25724,"nodeType":"StructuredDocumentation","src":"3824:79:71","text":"@dev Functions with this modifier can only be delegate-called by the Vault."},"id":25731,"name":"onlyVaultDelegateCall","nameLocation":"3917:21:71","nodeType":"ModifierDefinition","parameters":{"id":25725,"nodeType":"ParameterList","parameters":[],"src":"3938:2:71"},"src":"3908:87:71","virtual":false,"visibility":"internal"},{"body":{"id":25739,"nodeType":"Block","src":"4051:49:71","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25734,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25720,"src":"4061:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":25736,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4068:23:71","memberName":"ensureVaultDelegateCall","nodeType":"MemberAccess","referencedDeclaration":31177,"src":"4061:30:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IVault_$3111_$returns$__$attached_to$_t_contract$_IVault_$3111_$","typeString":"function (contract IVault) view"}},"id":25737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4061:32:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25738,"nodeType":"ExpressionStatement","src":"4061:32:71"}]},"id":25740,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureVaultDelegateCall","nameLocation":"4010:24:71","nodeType":"FunctionDefinition","parameters":{"id":25732,"nodeType":"ParameterList","parameters":[],"src":"4034:2:71"},"returnParameters":{"id":25733,"nodeType":"ParameterList","parameters":[],"src":"4051:0:71"},"scope":28100,"src":"4001:99:71","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":25785,"nodeType":"Block","src":"4160:395:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"id":25753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25749,"name":"vaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25746,"src":"4174:10:71","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultAdmin_$3401","typeString":"contract IVaultAdmin"}},"id":25750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4185:5:71","memberName":"vault","nodeType":"MemberAccess","referencedDeclaration":3129,"src":"4174:16:71","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_contract$_IVault_$3111_$","typeString":"function () view external returns (contract IVault)"}},"id":25751,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4174:18:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":25752,"name":"mainVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25743,"src":"4196:9:71","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"src":"4174:31:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":25758,"nodeType":"IfStatement","src":"4170:96:71","trueBody":{"id":25757,"nodeType":"Block","src":"4207:59:71","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":25754,"name":"WrongVaultAdminDeployment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3764,"src":"4228:25:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":25755,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4228:27:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":25756,"nodeType":"RevertStatement","src":"4221:34:71"}]}},{"expression":{"id":25763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":25759,"name":"_vaultPauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28265,"src":"4276:24:71","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25760,"name":"vaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25746,"src":"4303:10:71","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultAdmin_$3401","typeString":"contract IVaultAdmin"}},"id":25761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4314:21:71","memberName":"getPauseWindowEndTime","nodeType":"MemberAccess","referencedDeclaration":3135,"src":"4303:32:71","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint32_$","typeString":"function () view external returns (uint32)"}},"id":25762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4303:34:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"4276:61:71","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":25764,"nodeType":"ExpressionStatement","src":"4276:61:71"},{"expression":{"id":25769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":25765,"name":"_vaultBufferPeriodDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28269,"src":"4347:26:71","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25766,"name":"vaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25746,"src":"4376:10:71","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultAdmin_$3401","typeString":"contract IVaultAdmin"}},"id":25767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4387:23:71","memberName":"getBufferPeriodDuration","nodeType":"MemberAccess","referencedDeclaration":3141,"src":"4376:34:71","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint32_$","typeString":"function () view external returns (uint32)"}},"id":25768,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4376:36:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"4347:65:71","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":25770,"nodeType":"ExpressionStatement","src":"4347:65:71"},{"expression":{"id":25775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":25771,"name":"_vaultBufferPeriodEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28267,"src":"4422:25:71","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":25772,"name":"vaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25746,"src":"4450:10:71","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultAdmin_$3401","typeString":"contract IVaultAdmin"}},"id":25773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4461:22:71","memberName":"getBufferPeriodEndTime","nodeType":"MemberAccess","referencedDeclaration":3147,"src":"4450:33:71","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint32_$","typeString":"function () view external returns (uint32)"}},"id":25774,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4450:35:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"4422:63:71","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"id":25776,"nodeType":"ExpressionStatement","src":"4422:63:71"},{"expression":{"id":25779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":25777,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25720,"src":"4496:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":25778,"name":"mainVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25743,"src":"4505:9:71","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"src":"4496:18:71","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":25780,"nodeType":"ExpressionStatement","src":"4496:18:71"},{"expression":{"id":25783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":25781,"name":"_vaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25723,"src":"4524:11:71","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultAdmin_$3401","typeString":"contract IVaultAdmin"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":25782,"name":"vaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25746,"src":"4538:10:71","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultAdmin_$3401","typeString":"contract IVaultAdmin"}},"src":"4524:24:71","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultAdmin_$3401","typeString":"contract IVaultAdmin"}},"id":25784,"nodeType":"ExpressionStatement","src":"4524:24:71"}]},"id":25786,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":25747,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25743,"mutability":"mutable","name":"mainVault","nameLocation":"4125:9:71","nodeType":"VariableDeclaration","scope":25786,"src":"4118:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":25742,"nodeType":"UserDefinedTypeName","pathNode":{"id":25741,"name":"IVault","nameLocations":["4118:6:71"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"4118:6:71"},"referencedDeclaration":3111,"src":"4118:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":25746,"mutability":"mutable","name":"vaultAdmin","nameLocation":"4148:10:71","nodeType":"VariableDeclaration","scope":25786,"src":"4136:22:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultAdmin_$3401","typeString":"contract IVaultAdmin"},"typeName":{"id":25745,"nodeType":"UserDefinedTypeName","pathNode":{"id":25744,"name":"IVaultAdmin","nameLocations":["4136:11:71"],"nodeType":"IdentifierPath","referencedDeclaration":3401,"src":"4136:11:71"},"referencedDeclaration":3401,"src":"4136:11:71","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultAdmin_$3401","typeString":"contract IVaultAdmin"}},"visibility":"internal"}],"src":"4117:42:71"},"returnParameters":{"id":25748,"nodeType":"ParameterList","parameters":[],"src":"4160:0:71"},"scope":28100,"src":"4106:449:71","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[4030],"body":{"id":25795,"nodeType":"Block","src":"4871:30:71","statements":[{"expression":{"id":25793,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25720,"src":"4888:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"functionReturnParameters":25792,"id":25794,"nodeType":"Return","src":"4881:13:71"}]},"documentation":{"id":25787,"nodeType":"StructuredDocumentation","src":"4787:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"fbfa77cf","id":25796,"implemented":true,"kind":"function","modifiers":[],"name":"vault","nameLocation":"4832:5:71","nodeType":"FunctionDefinition","parameters":{"id":25788,"nodeType":"ParameterList","parameters":[],"src":"4837:2:71"},"returnParameters":{"id":25792,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25791,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25796,"src":"4863:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":25790,"nodeType":"UserDefinedTypeName","pathNode":{"id":25789,"name":"IVault","nameLocations":["4863:6:71"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"4863:6:71"},"referencedDeclaration":3111,"src":"4863:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"}],"src":"4862:8:71"},"scope":28100,"src":"4823:78:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4036],"body":{"id":25805,"nodeType":"Block","src":"5000:41:71","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":25802,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[28052],"referencedDeclaration":28052,"src":"5017:15:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":25803,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5017:17:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":25801,"id":25804,"nodeType":"Return","src":"5010:24:71"}]},"documentation":{"id":25797,"nodeType":"StructuredDocumentation","src":"4907:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"1ba0ae45","id":25806,"implemented":true,"kind":"function","modifiers":[],"name":"getVaultAdmin","nameLocation":"4952:13:71","nodeType":"FunctionDefinition","parameters":{"id":25798,"nodeType":"ParameterList","parameters":[],"src":"4965:2:71"},"returnParameters":{"id":25801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25800,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25806,"src":"4991:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25799,"name":"address","nodeType":"ElementaryTypeName","src":"4991:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4990:9:71"},"scope":28100,"src":"4943:98:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4042],"body":{"id":25819,"nodeType":"Block","src":"5378:45:71","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":25814,"name":"_isUnlocked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28320,"src":"5395:11:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function () view returns (StorageSlotExtension.BooleanSlotType)"}},"id":25815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5395:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":25816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5409:5:71","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":10207,"src":"5395:19:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_BooleanSlotType_$10108_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function (StorageSlotExtension.BooleanSlotType) view returns (bool)"}},"id":25817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5395:21:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":25813,"id":25818,"nodeType":"Return","src":"5388:28:71"}]},"documentation":{"id":25807,"nodeType":"StructuredDocumentation","src":"5269:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"8380edb7","id":25820,"implemented":true,"kind":"function","modifiers":[{"id":25810,"kind":"modifierInvocation","modifierName":{"id":25809,"name":"onlyVaultDelegateCall","nameLocations":["5341:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"5341:21:71"},"nodeType":"ModifierInvocation","src":"5341:21:71"}],"name":"isUnlocked","nameLocation":"5314:10:71","nodeType":"FunctionDefinition","parameters":{"id":25808,"nodeType":"ParameterList","parameters":[],"src":"5324:2:71"},"returnParameters":{"id":25813,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25812,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25820,"src":"5372:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":25811,"name":"bool","nodeType":"ElementaryTypeName","src":"5372:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5371:6:71"},"scope":28100,"src":"5305:118:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4048],"body":{"id":25833,"nodeType":"Block","src":"5551:52:71","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":25828,"name":"_nonZeroDeltaCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28331,"src":"5568:18:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function () view returns (StorageSlotExtension.Uint256SlotType)"}},"id":25829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5568:20:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":25830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5589:5:71","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":10251,"src":"5568:26:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Uint256SlotType_$10142_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function (StorageSlotExtension.Uint256SlotType) view returns (uint256)"}},"id":25831,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5568:28:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25827,"id":25832,"nodeType":"Return","src":"5561:35:71"}]},"documentation":{"id":25821,"nodeType":"StructuredDocumentation","src":"5429:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"db817187","id":25834,"implemented":true,"kind":"function","modifiers":[{"id":25824,"kind":"modifierInvocation","modifierName":{"id":25823,"name":"onlyVaultDelegateCall","nameLocations":["5511:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"5511:21:71"},"nodeType":"ModifierInvocation","src":"5511:21:71"}],"name":"getNonzeroDeltaCount","nameLocation":"5474:20:71","nodeType":"FunctionDefinition","parameters":{"id":25822,"nodeType":"ParameterList","parameters":[],"src":"5494:2:71"},"returnParameters":{"id":25827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25826,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25834,"src":"5542:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25825,"name":"uint256","nodeType":"ElementaryTypeName","src":"5542:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5541:9:71"},"scope":28100,"src":"5465:138:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4057],"body":{"id":25851,"nodeType":"Block","src":"5735:50:71","statements":[{"expression":{"arguments":[{"id":25848,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25838,"src":"5772:5:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":25845,"name":"_tokenDeltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28343,"src":"5752:12:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858_$","typeString":"function () view returns (TokenDeltaMappingSlotType)"}},"id":25846,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5752:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858","typeString":"TokenDeltaMappingSlotType"}},"id":25847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5767:4:71","memberName":"tGet","nodeType":"MemberAccess","referencedDeclaration":6938,"src":"5752:19:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858_$_t_contract$_IERC20_$40109_$returns$_t_int256_$attached_to$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858_$","typeString":"function (TokenDeltaMappingSlotType,contract IERC20) view returns (int256)"}},"id":25849,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5752:26:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":25844,"id":25850,"nodeType":"Return","src":"5745:33:71"}]},"documentation":{"id":25835,"nodeType":"StructuredDocumentation","src":"5609:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"9e825ff5","id":25852,"implemented":true,"kind":"function","modifiers":[{"id":25841,"kind":"modifierInvocation","modifierName":{"id":25840,"name":"onlyVaultDelegateCall","nameLocations":["5696:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"5696:21:71"},"nodeType":"ModifierInvocation","src":"5696:21:71"}],"name":"getTokenDelta","nameLocation":"5654:13:71","nodeType":"FunctionDefinition","parameters":{"id":25839,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25838,"mutability":"mutable","name":"token","nameLocation":"5675:5:71","nodeType":"VariableDeclaration","scope":25852,"src":"5668:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":25837,"nodeType":"UserDefinedTypeName","pathNode":{"id":25836,"name":"IERC20","nameLocations":["5668:6:71"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"5668:6:71"},"referencedDeclaration":40109,"src":"5668:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"5667:14:71"},"returnParameters":{"id":25844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25843,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25852,"src":"5727:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":25842,"name":"int256","nodeType":"ElementaryTypeName","src":"5727:6:71","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"5726:8:71"},"scope":28100,"src":"5645:140:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4066],"body":{"id":25867,"nodeType":"Block","src":"5918:42:71","statements":[{"expression":{"baseExpression":{"id":25863,"name":"_reservesOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28278,"src":"5935:11:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":25865,"indexExpression":{"id":25864,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25856,"src":"5947:5:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5935:18:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":25862,"id":25866,"nodeType":"Return","src":"5928:25:71"}]},"documentation":{"id":25853,"nodeType":"StructuredDocumentation","src":"5791:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"96787092","id":25868,"implemented":true,"kind":"function","modifiers":[{"id":25859,"kind":"modifierInvocation","modifierName":{"id":25858,"name":"onlyVaultDelegateCall","nameLocations":["5878:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"5878:21:71"},"nodeType":"ModifierInvocation","src":"5878:21:71"}],"name":"getReservesOf","nameLocation":"5836:13:71","nodeType":"FunctionDefinition","parameters":{"id":25857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25856,"mutability":"mutable","name":"token","nameLocation":"5857:5:71","nodeType":"VariableDeclaration","scope":25868,"src":"5850:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":25855,"nodeType":"UserDefinedTypeName","pathNode":{"id":25854,"name":"IERC20","nameLocations":["5850:6:71"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"5850:6:71"},"referencedDeclaration":40109,"src":"5850:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"5849:14:71"},"returnParameters":{"id":25862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25861,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25868,"src":"5909:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25860,"name":"uint256","nodeType":"ElementaryTypeName","src":"5909:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5908:9:71"},"scope":28100,"src":"5827:133:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4074],"body":{"id":25888,"nodeType":"Block","src":"6102:82:71","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":25881,"name":"_sessionIdSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28366,"src":"6146:14:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function () view returns (StorageSlotExtension.Uint256SlotType)"}},"id":25882,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6146:16:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":25883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6163:5:71","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":10251,"src":"6146:22:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Uint256SlotType_$10142_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function (StorageSlotExtension.Uint256SlotType) view returns (uint256)"}},"id":25884,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6146:24:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25885,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25871,"src":"6172:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":25878,"name":"_addLiquidityCalled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28355,"src":"6119:19:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862_$","typeString":"function () view returns (UintToAddressToBooleanMappingSlot)"}},"id":25879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6119:21:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862","typeString":"UintToAddressToBooleanMappingSlot"}},"id":25880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6141:4:71","memberName":"tGet","nodeType":"MemberAccess","referencedDeclaration":7043,"src":"6119:26:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862_$_t_uint256_$_t_address_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862_$","typeString":"function (UintToAddressToBooleanMappingSlot,uint256,address) view returns (bool)"}},"id":25886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6119:58:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":25877,"id":25887,"nodeType":"Return","src":"6112:65:71"}]},"documentation":{"id":25869,"nodeType":"StructuredDocumentation","src":"5966:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"ace9b89b","id":25889,"implemented":true,"kind":"function","modifiers":[{"id":25874,"kind":"modifierInvocation","modifierName":{"id":25873,"name":"onlyVaultDelegateCall","nameLocations":["6065:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"6065:21:71"},"nodeType":"ModifierInvocation","src":"6065:21:71"}],"name":"getAddLiquidityCalledFlag","nameLocation":"6011:25:71","nodeType":"FunctionDefinition","parameters":{"id":25872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25871,"mutability":"mutable","name":"pool","nameLocation":"6045:4:71","nodeType":"VariableDeclaration","scope":25889,"src":"6037:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25870,"name":"address","nodeType":"ElementaryTypeName","src":"6037:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6036:14:71"},"returnParameters":{"id":25877,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25876,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":25889,"src":"6096:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":25875,"name":"bool","nodeType":"ElementaryTypeName","src":"6096:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6095:6:71"},"scope":28100,"src":"6002:182:71","stateMutability":"view","virtual":false,"visibility":"external"},{"canonicalName":"VaultExtension.PoolRegistrationParams","id":25908,"members":[{"constant":false,"id":25893,"mutability":"mutable","name":"tokenConfig","nameLocation":"6469:11:71","nodeType":"VariableDeclaration","scope":25908,"src":"6455:25:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":25891,"nodeType":"UserDefinedTypeName","pathNode":{"id":25890,"name":"TokenConfig","nameLocations":["6455:11:71"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"6455:11:71"},"referencedDeclaration":4694,"src":"6455:11:71","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":25892,"nodeType":"ArrayTypeName","src":"6455:13:71","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":25895,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"6498:17:71","nodeType":"VariableDeclaration","scope":25908,"src":"6490:25:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25894,"name":"uint256","nodeType":"ElementaryTypeName","src":"6490:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25897,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"6532:18:71","nodeType":"VariableDeclaration","scope":25908,"src":"6525:25:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":25896,"name":"uint32","nodeType":"ElementaryTypeName","src":"6525:6:71","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":25899,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"6565:17:71","nodeType":"VariableDeclaration","scope":25908,"src":"6560:22:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":25898,"name":"bool","nodeType":"ElementaryTypeName","src":"6560:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":25902,"mutability":"mutable","name":"roleAccounts","nameLocation":"6609:12:71","nodeType":"VariableDeclaration","scope":25908,"src":"6592:29:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":25901,"nodeType":"UserDefinedTypeName","pathNode":{"id":25900,"name":"PoolRoleAccounts","nameLocations":["6592:16:71"],"nodeType":"IdentifierPath","referencedDeclaration":4677,"src":"6592:16:71"},"referencedDeclaration":4677,"src":"6592:16:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":25904,"mutability":"mutable","name":"poolHooksContract","nameLocation":"6639:17:71","nodeType":"VariableDeclaration","scope":25908,"src":"6631:25:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25903,"name":"address","nodeType":"ElementaryTypeName","src":"6631:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25907,"mutability":"mutable","name":"liquidityManagement","nameLocation":"6686:19:71","nodeType":"VariableDeclaration","scope":25908,"src":"6666:39:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_storage_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":25906,"nodeType":"UserDefinedTypeName","pathNode":{"id":25905,"name":"LiquidityManagement","nameLocations":["6666:19:71"],"nodeType":"IdentifierPath","referencedDeclaration":4580,"src":"6666:19:71"},"referencedDeclaration":4580,"src":"6666:19:71","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"name":"PoolRegistrationParams","nameLocation":"6422:22:71","nodeType":"StructDefinition","scope":28100,"src":"6415:297:71","visibility":"public"},{"baseFunctions":[4098],"body":{"id":25951,"nodeType":"Block","src":"7152:472:71","statements":[{"expression":{"arguments":[{"id":25939,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25911,"src":"7189:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":25941,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25915,"src":"7261:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},{"id":25942,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25917,"src":"7309:17:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":25943,"name":"pauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25919,"src":"7364:18:71","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":25944,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25921,"src":"7419:17:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":25945,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25924,"src":"7468:12:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_calldata_ptr","typeString":"struct PoolRoleAccounts calldata"}},{"id":25946,"name":"poolHooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25926,"src":"7517:17:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":25947,"name":"liquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25929,"src":"7573:19:71","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_calldata_ptr","typeString":"struct LiquidityManagement calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_calldata_ptr","typeString":"struct PoolRoleAccounts calldata"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_calldata_ptr","typeString":"struct LiquidityManagement calldata"}],"id":25940,"name":"PoolRegistrationParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25908,"src":"7207:22:71","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolRegistrationParams_$25908_storage_ptr_$","typeString":"type(struct VaultExtension.PoolRegistrationParams storage pointer)"}},"id":25948,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["7248:11:71","7290:17:71","7344:18:71","7400:17:71","7454:12:71","7498:17:71","7552:19:71"],"names":["tokenConfig","swapFeePercentage","pauseWindowEndTime","protocolFeeExempt","roleAccounts","poolHooksContract","liquidityManagement"],"nodeType":"FunctionCall","src":"7207:400:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_memory_ptr","typeString":"struct VaultExtension.PoolRegistrationParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_memory_ptr","typeString":"struct VaultExtension.PoolRegistrationParams memory"}],"id":25938,"name":"_registerPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26463,"src":"7162:13:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_struct$_PoolRegistrationParams_$25908_memory_ptr_$returns$__$","typeString":"function (address,struct VaultExtension.PoolRegistrationParams memory)"}},"id":25949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7162:455:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":25950,"nodeType":"ExpressionStatement","src":"7162:455:71"}]},"documentation":{"id":25909,"nodeType":"StructuredDocumentation","src":"6718:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"eeec802f","id":25952,"implemented":true,"kind":"function","modifiers":[{"id":25932,"kind":"modifierInvocation","modifierName":{"id":25931,"name":"onlyVaultDelegateCall","nameLocations":["7098:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"7098:21:71"},"nodeType":"ModifierInvocation","src":"7098:21:71"},{"id":25934,"kind":"modifierInvocation","modifierName":{"id":25933,"name":"nonReentrant","nameLocations":["7120:12:71"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"7120:12:71"},"nodeType":"ModifierInvocation","src":"7120:12:71"},{"id":25936,"kind":"modifierInvocation","modifierName":{"id":25935,"name":"whenVaultNotPaused","nameLocations":["7133:18:71"],"nodeType":"IdentifierPath","referencedDeclaration":24972,"src":"7133:18:71"},"nodeType":"ModifierInvocation","src":"7133:18:71"}],"name":"registerPool","nameLocation":"6763:12:71","nodeType":"FunctionDefinition","parameters":{"id":25930,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25911,"mutability":"mutable","name":"pool","nameLocation":"6793:4:71","nodeType":"VariableDeclaration","scope":25952,"src":"6785:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25910,"name":"address","nodeType":"ElementaryTypeName","src":"6785:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25915,"mutability":"mutable","name":"tokenConfig","nameLocation":"6828:11:71","nodeType":"VariableDeclaration","scope":25952,"src":"6807:32:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":25913,"nodeType":"UserDefinedTypeName","pathNode":{"id":25912,"name":"TokenConfig","nameLocations":["6807:11:71"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"6807:11:71"},"referencedDeclaration":4694,"src":"6807:11:71","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":25914,"nodeType":"ArrayTypeName","src":"6807:13:71","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":25917,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"6857:17:71","nodeType":"VariableDeclaration","scope":25952,"src":"6849:25:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25916,"name":"uint256","nodeType":"ElementaryTypeName","src":"6849:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":25919,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"6891:18:71","nodeType":"VariableDeclaration","scope":25952,"src":"6884:25:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":25918,"name":"uint32","nodeType":"ElementaryTypeName","src":"6884:6:71","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":25921,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"6924:17:71","nodeType":"VariableDeclaration","scope":25952,"src":"6919:22:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":25920,"name":"bool","nodeType":"ElementaryTypeName","src":"6919:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":25924,"mutability":"mutable","name":"roleAccounts","nameLocation":"6977:12:71","nodeType":"VariableDeclaration","scope":25952,"src":"6951:38:71","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_calldata_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":25923,"nodeType":"UserDefinedTypeName","pathNode":{"id":25922,"name":"PoolRoleAccounts","nameLocations":["6951:16:71"],"nodeType":"IdentifierPath","referencedDeclaration":4677,"src":"6951:16:71"},"referencedDeclaration":4677,"src":"6951:16:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":25926,"mutability":"mutable","name":"poolHooksContract","nameLocation":"7007:17:71","nodeType":"VariableDeclaration","scope":25952,"src":"6999:25:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25925,"name":"address","nodeType":"ElementaryTypeName","src":"6999:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25929,"mutability":"mutable","name":"liquidityManagement","nameLocation":"7063:19:71","nodeType":"VariableDeclaration","scope":25952,"src":"7034:48:71","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":25928,"nodeType":"UserDefinedTypeName","pathNode":{"id":25927,"name":"LiquidityManagement","nameLocations":["7034:19:71"],"nodeType":"IdentifierPath","referencedDeclaration":4580,"src":"7034:19:71"},"referencedDeclaration":4580,"src":"7034:19:71","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"6775:313:71"},"returnParameters":{"id":25937,"nodeType":"ParameterList","parameters":[],"src":"7152:0:71"},"scope":28100,"src":"6754:870:71","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":26462,"nodeType":"Block","src":"8035:7779:71","statements":[{"condition":{"arguments":[{"id":25962,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25955,"src":"8120:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25961,"name":"_isPoolRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25167,"src":"8102:17:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":25963,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8102:23:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":25969,"nodeType":"IfStatement","src":"8098:88:71","trueBody":{"id":25968,"nodeType":"Block","src":"8127:59:71","statements":[{"errorCall":{"arguments":[{"id":25965,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25955,"src":"8170:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":25964,"name":"PoolAlreadyRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3413,"src":"8148:21:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":25966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8148:27:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":25967,"nodeType":"RevertStatement","src":"8141:34:71"}]}},{"assignments":[25971],"declarations":[{"constant":false,"id":25971,"mutability":"mutable","name":"numTokens","nameLocation":"8204:9:71","nodeType":"VariableDeclaration","scope":26462,"src":"8196:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":25970,"name":"uint256","nodeType":"ElementaryTypeName","src":"8196:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":25975,"initialValue":{"expression":{"expression":{"id":25972,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25958,"src":"8216:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_memory_ptr","typeString":"struct VaultExtension.PoolRegistrationParams memory"}},"id":25973,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8223:11:71","memberName":"tokenConfig","nodeType":"MemberAccess","referencedDeclaration":25893,"src":"8216:18:71","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":25974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8235:6:71","memberName":"length","nodeType":"MemberAccess","src":"8216:25:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8196:45:71"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":25978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25976,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25971,"src":"8255:9:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":25977,"name":"_MIN_TOKENS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28178,"src":"8267:11:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8255:23:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":25983,"nodeType":"IfStatement","src":"8251:72:71","trueBody":{"id":25982,"nodeType":"Block","src":"8280:43:71","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":25979,"name":"MinTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3446,"src":"8301:9:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":25980,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8301:11:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":25981,"nodeType":"RevertStatement","src":"8294:18:71"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":25986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":25984,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25971,"src":"8336:9:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":25985,"name":"_MAX_TOKENS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28181,"src":"8348:11:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8336:23:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":25991,"nodeType":"IfStatement","src":"8332:72:71","trueBody":{"id":25990,"nodeType":"Block","src":"8361:43:71","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":25987,"name":"MaxTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3449,"src":"8382:9:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":25988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8382:11:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":25989,"nodeType":"RevertStatement","src":"8375:18:71"}]}},{"assignments":[25996],"declarations":[{"constant":false,"id":25996,"mutability":"mutable","name":"tokenDecimalDiffs","nameLocation":"8429:17:71","nodeType":"VariableDeclaration","scope":26462,"src":"8414:32:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_memory_ptr","typeString":"uint8[]"},"typeName":{"baseType":{"id":25994,"name":"uint8","nodeType":"ElementaryTypeName","src":"8414:5:71","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":25995,"nodeType":"ArrayTypeName","src":"8414:7:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_storage_ptr","typeString":"uint8[]"}},"visibility":"internal"}],"id":26002,"initialValue":{"arguments":[{"id":26000,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25971,"src":"8461:9:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":25999,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"8449:11:71","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint8_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint8[] memory)"},"typeName":{"baseType":{"id":25997,"name":"uint8","nodeType":"ElementaryTypeName","src":"8453:5:71","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":25998,"nodeType":"ArrayTypeName","src":"8453:7:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_storage_ptr","typeString":"uint8[]"}}},"id":26001,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8449:22:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_memory_ptr","typeString":"uint8[] memory"}},"nodeType":"VariableDeclarationStatement","src":"8414:57:71"},{"assignments":[26005],"declarations":[{"constant":false,"id":26005,"mutability":"mutable","name":"previousToken","nameLocation":"8488:13:71","nodeType":"VariableDeclaration","scope":26462,"src":"8481:20:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":26004,"nodeType":"UserDefinedTypeName","pathNode":{"id":26003,"name":"IERC20","nameLocations":["8481:6:71"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"8481:6:71"},"referencedDeclaration":40109,"src":"8481:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"id":26006,"nodeType":"VariableDeclarationStatement","src":"8481:20:71"},{"body":{"id":26173,"nodeType":"Block","src":"8552:1998:71","statements":[{"assignments":[26019],"declarations":[{"constant":false,"id":26019,"mutability":"mutable","name":"tokenData","nameLocation":"8585:9:71","nodeType":"VariableDeclaration","scope":26173,"src":"8566:28:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig"},"typeName":{"id":26018,"nodeType":"UserDefinedTypeName","pathNode":{"id":26017,"name":"TokenConfig","nameLocations":["8566:11:71"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"8566:11:71"},"referencedDeclaration":4694,"src":"8566:11:71","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"visibility":"internal"}],"id":26024,"initialValue":{"baseExpression":{"expression":{"id":26020,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25958,"src":"8597:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_memory_ptr","typeString":"struct VaultExtension.PoolRegistrationParams memory"}},"id":26021,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8604:11:71","memberName":"tokenConfig","nodeType":"MemberAccess","referencedDeclaration":25893,"src":"8597:18:71","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":26023,"indexExpression":{"id":26022,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26008,"src":"8616:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8597:21:71","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"nodeType":"VariableDeclarationStatement","src":"8566:52:71"},{"assignments":[26027],"declarations":[{"constant":false,"id":26027,"mutability":"mutable","name":"token","nameLocation":"8639:5:71","nodeType":"VariableDeclaration","scope":26173,"src":"8632:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":26026,"nodeType":"UserDefinedTypeName","pathNode":{"id":26025,"name":"IERC20","nameLocations":["8632:6:71"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"8632:6:71"},"referencedDeclaration":40109,"src":"8632:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"id":26030,"initialValue":{"expression":{"id":26028,"name":"tokenData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26019,"src":"8647:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":26029,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8657:5:71","memberName":"token","nodeType":"MemberAccess","referencedDeclaration":4685,"src":"8647:15:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"8632:30:71"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":26046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":26039,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":26033,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26027,"src":"8744:5:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":26032,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8736:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":26031,"name":"address","nodeType":"ElementaryTypeName","src":"8736:7:71","typeDescriptions":{}}},"id":26034,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8736:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":26037,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8762:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":26036,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8754:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":26035,"name":"address","nodeType":"ElementaryTypeName","src":"8754:7:71","typeDescriptions":{}}},"id":26038,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8754:10:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8736:28:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":26045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":26042,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26027,"src":"8776:5:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":26041,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8768:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":26040,"name":"address","nodeType":"ElementaryTypeName","src":"8768:7:71","typeDescriptions":{}}},"id":26043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8768:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":26044,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25955,"src":"8786:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8768:22:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8736:54:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":26051,"nodeType":"IfStatement","src":"8732:114:71","trueBody":{"id":26050,"nodeType":"Block","src":"8792:54:71","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":26047,"name":"InvalidToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3452,"src":"8817:12:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":26048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8817:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":26049,"nodeType":"RevertStatement","src":"8810:21:71"}]}},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"id":26054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26052,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26027,"src":"8969:5:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":26053,"name":"previousToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26005,"src":"8977:13:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"8969:21:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":26061,"nodeType":"IfStatement","src":"8965:97:71","trueBody":{"id":26060,"nodeType":"Block","src":"8992:70:71","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":26055,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6193,"src":"9017:12:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$6193_$","typeString":"type(library InputHelpers)"}},"id":26057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9030:15:71","memberName":"TokensNotSorted","nodeType":"MemberAccess","referencedDeclaration":5910,"src":"9017:28:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":26058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9017:30:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":26059,"nodeType":"RevertStatement","src":"9010:37:71"}]}},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"id":26064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26062,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26027,"src":"9080:5:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":26063,"name":"previousToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26005,"src":"9089:13:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"9080:22:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":26070,"nodeType":"IfStatement","src":"9076:97:71","trueBody":{"id":26069,"nodeType":"Block","src":"9104:69:71","statements":[{"errorCall":{"arguments":[{"id":26066,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26027,"src":"9152:5:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":26065,"name":"TokenAlreadyRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3443,"src":"9129:22:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$40109_$returns$_t_error_$","typeString":"function (contract IERC20) pure returns (error)"}},"id":26067,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9129:29:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":26068,"nodeType":"RevertStatement","src":"9122:36:71"}]}},{"assignments":[26072],"declarations":[{"constant":false,"id":26072,"mutability":"mutable","name":"hasRateProvider","nameLocation":"9192:15:71","nodeType":"VariableDeclaration","scope":26173,"src":"9187:20:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":26071,"name":"bool","nodeType":"ElementaryTypeName","src":"9187:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":26082,"initialValue":{"commonType":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"},"id":26081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":26073,"name":"tokenData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26019,"src":"9210:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":26074,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9220:12:71","memberName":"rateProvider","nodeType":"MemberAccess","referencedDeclaration":4691,"src":"9210:22:71","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"arguments":[{"hexValue":"30","id":26078,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9258:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":26077,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9250:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":26076,"name":"address","nodeType":"ElementaryTypeName","src":"9250:7:71","typeDescriptions":{}}},"id":26079,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9250:10:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":26075,"name":"IRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":263,"src":"9236:13:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRateProvider_$263_$","typeString":"type(contract IRateProvider)"}},"id":26080,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9236:25:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"}},"src":"9210:51:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"9187:74:71"},{"expression":{"id":26096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":26083,"name":"_poolTokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28250,"src":"9276:14:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_struct$_TokenInfo_$4704_storage_$_$","typeString":"mapping(address => mapping(contract IERC20 => struct TokenInfo storage ref))"}},"id":26086,"indexExpression":{"id":26084,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25955,"src":"9291:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9276:20:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_struct$_TokenInfo_$4704_storage_$","typeString":"mapping(contract IERC20 => struct TokenInfo storage ref)"}},"id":26087,"indexExpression":{"id":26085,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26027,"src":"9297:5:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9276:27:71","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_storage","typeString":"struct TokenInfo storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":26089,"name":"tokenData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26019,"src":"9345:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":26090,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9355:9:71","memberName":"tokenType","nodeType":"MemberAccess","referencedDeclaration":4688,"src":"9345:19:71","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},{"expression":{"id":26091,"name":"tokenData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26019,"src":"9396:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":26092,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9406:12:71","memberName":"rateProvider","nodeType":"MemberAccess","referencedDeclaration":4691,"src":"9396:22:71","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"}},{"expression":{"id":26093,"name":"tokenData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26019,"src":"9451:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":26094,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9461:13:71","memberName":"paysYieldFees","nodeType":"MemberAccess","referencedDeclaration":4693,"src":"9451:23:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"},{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":26088,"name":"TokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4704,"src":"9306:9:71","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_TokenInfo_$4704_storage_ptr_$","typeString":"type(struct TokenInfo storage pointer)"}},"id":26095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["9334:9:71","9382:12:71","9436:13:71"],"names":["tokenType","rateProvider","paysYieldFees"],"nodeType":"FunctionCall","src":"9306:183:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_memory_ptr","typeString":"struct TokenInfo memory"}},"src":"9276:213:71","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_storage","typeString":"struct TokenInfo storage ref"}},"id":26097,"nodeType":"ExpressionStatement","src":"9276:213:71"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"},"id":26102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":26098,"name":"tokenData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26019,"src":"9508:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":26099,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9518:9:71","memberName":"tokenType","nodeType":"MemberAccess","referencedDeclaration":4688,"src":"9508:19:71","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":26100,"name":"TokenType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4681,"src":"9531:9:71","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_TokenType_$4681_$","typeString":"type(enum TokenType)"}},"id":26101,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9541:8:71","memberName":"STANDARD","nodeType":"MemberAccess","referencedDeclaration":4679,"src":"9531:18:71","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"src":"9508:41:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"},"id":26117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":26113,"name":"tokenData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26019,"src":"9716:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":26114,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9726:9:71","memberName":"tokenType","nodeType":"MemberAccess","referencedDeclaration":4688,"src":"9716:19:71","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":26115,"name":"TokenType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4681,"src":"9739:9:71","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_TokenType_$4681_$","typeString":"type(enum TokenType)"}},"id":26116,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9749:9:71","memberName":"WITH_RATE","nodeType":"MemberAccess","referencedDeclaration":4680,"src":"9739:19:71","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"src":"9716:42:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":26130,"nodeType":"Block","src":"9903:58:71","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":26127,"name":"InvalidTokenType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3455,"src":"9928:16:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":26128,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9928:18:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":26129,"nodeType":"RevertStatement","src":"9921:25:71"}]},"id":26131,"nodeType":"IfStatement","src":"9712:249:71","trueBody":{"id":26126,"nodeType":"Block","src":"9760:137:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":26120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26118,"name":"hasRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26072,"src":"9782:15:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":26119,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9801:5:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"9782:24:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":26125,"nodeType":"IfStatement","src":"9778:105:71","trueBody":{"id":26124,"nodeType":"Block","src":"9808:75:71","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":26121,"name":"InvalidTokenConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3458,"src":"9837:25:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":26122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9837:27:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":26123,"nodeType":"RevertStatement","src":"9830:34:71"}]}}]}},"id":26132,"nodeType":"IfStatement","src":"9504:457:71","trueBody":{"id":26112,"nodeType":"Block","src":"9551:155:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":26106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26103,"name":"hasRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26072,"src":"9573:15:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"expression":{"id":26104,"name":"tokenData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26019,"src":"9592:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":26105,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9602:13:71","memberName":"paysYieldFees","nodeType":"MemberAccess","referencedDeclaration":4693,"src":"9592:23:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9573:42:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":26111,"nodeType":"IfStatement","src":"9569:123:71","trueBody":{"id":26110,"nodeType":"Block","src":"9617:75:71","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":26107,"name":"InvalidTokenConfiguration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3458,"src":"9646:25:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":26108,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9646:27:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":26109,"nodeType":"RevertStatement","src":"9639:34:71"}]}}]}},{"assignments":[26134],"declarations":[{"constant":false,"id":26134,"mutability":"mutable","name":"tokenDecimals","nameLocation":"10083:13:71","nodeType":"VariableDeclaration","scope":26173,"src":"10077:19:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":26133,"name":"uint8","nodeType":"ElementaryTypeName","src":"10077:5:71","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":26143,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":26138,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26027,"src":"10122:5:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":26137,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10114:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":26136,"name":"address","nodeType":"ElementaryTypeName","src":"10114:7:71","typeDescriptions":{}}},"id":26139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10114:14:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":26135,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40135,"src":"10099:14:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Metadata_$40135_$","typeString":"type(contract IERC20Metadata)"}},"id":26140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10099:30:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$40135","typeString":"contract IERC20Metadata"}},"id":26141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10130:8:71","memberName":"decimals","nodeType":"MemberAccess","referencedDeclaration":40134,"src":"10099:39:71","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint8_$","typeString":"function () view external returns (uint8)"}},"id":26142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10099:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"10077:63:71"},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":26146,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26144,"name":"tokenDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26134,"src":"10159:13:71","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":26145,"name":"_MAX_TOKEN_DECIMALS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28184,"src":"10175:19:71","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"10159:35:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":26160,"nodeType":"Block","src":"10264:141:71","statements":[{"id":26159,"nodeType":"UncheckedBlock","src":"10282:109:71","statements":[{"expression":{"id":26157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":26151,"name":"tokenDecimalDiffs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25996,"src":"10314:17:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_memory_ptr","typeString":"uint8[] memory"}},"id":26153,"indexExpression":{"id":26152,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26008,"src":"10332:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10314:20:71","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":26156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26154,"name":"_MAX_TOKEN_DECIMALS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28184,"src":"10337:19:71","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":26155,"name":"tokenDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26134,"src":"10359:13:71","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"10337:35:71","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"10314:58:71","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":26158,"nodeType":"ExpressionStatement","src":"10314:58:71"}]}]},"id":26161,"nodeType":"IfStatement","src":"10155:250:71","trueBody":{"id":26150,"nodeType":"Block","src":"10196:62:71","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":26147,"name":"InvalidTokenDecimals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3461,"src":"10221:20:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":26148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10221:22:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":26149,"nodeType":"RevertStatement","src":"10214:29:71"}]}},{"expression":{"arguments":[{"id":26166,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26027,"src":"10498:5:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"expression":{"baseExpression":{"id":26162,"name":"_poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28242,"src":"10475:11:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_contract$_IERC20_$40109_$dyn_storage_$","typeString":"mapping(address => contract IERC20[] storage ref)"}},"id":26164,"indexExpression":{"id":26163,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25955,"src":"10487:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10475:17:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":26165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10493:4:71","memberName":"push","nodeType":"MemberAccess","src":"10475:22:71","typeDescriptions":{"typeIdentifier":"t_function_arraypush_nonpayable$_t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr_$_t_contract$_IERC20_$40109_$returns$__$attached_to$_t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr_$","typeString":"function (contract IERC20[] storage pointer,contract IERC20)"}},"id":26167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10475:29:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26168,"nodeType":"ExpressionStatement","src":"10475:29:71"},{"expression":{"id":26171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26169,"name":"previousToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26005,"src":"10518:13:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":26170,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26027,"src":"10534:5:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"10518:21:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":26172,"nodeType":"ExpressionStatement","src":"10518:21:71"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26011,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26008,"src":"8532:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":26012,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25971,"src":"8536:9:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8532:13:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":26174,"initializationExpression":{"assignments":[26008],"declarations":[{"constant":false,"id":26008,"mutability":"mutable","name":"i","nameLocation":"8525:1:71","nodeType":"VariableDeclaration","scope":26174,"src":"8517:9:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26007,"name":"uint256","nodeType":"ElementaryTypeName","src":"8517:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26010,"initialValue":{"hexValue":"30","id":26009,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8529:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8517:13:71"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":26015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"8547:3:71","subExpression":{"id":26014,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26008,"src":"8549:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26016,"nodeType":"ExpressionStatement","src":"8547:3:71"},"nodeType":"ForStatement","src":"8512:2038:71"},{"expression":{"id":26180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":26175,"name":"_poolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28231,"src":"10619:17:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolRoleAccounts_$4677_storage_$","typeString":"mapping(address => struct PoolRoleAccounts storage ref)"}},"id":26177,"indexExpression":{"id":26176,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25955,"src":"10637:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10619:23:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage","typeString":"struct PoolRoleAccounts storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":26178,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25958,"src":"10645:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_memory_ptr","typeString":"struct VaultExtension.PoolRegistrationParams memory"}},"id":26179,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10652:12:71","memberName":"roleAccounts","nodeType":"MemberAccess","referencedDeclaration":25902,"src":"10645:19:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"src":"10619:45:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage","typeString":"struct PoolRoleAccounts storage ref"}},"id":26181,"nodeType":"ExpressionStatement","src":"10619:45:71"},{"assignments":[26184],"declarations":[{"constant":false,"id":26184,"mutability":"mutable","name":"poolConfigBits","nameLocation":"10690:14:71","nodeType":"VariableDeclaration","scope":26462,"src":"10675:29:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":26183,"nodeType":"UserDefinedTypeName","pathNode":{"id":26182,"name":"PoolConfigBits","nameLocations":["10675:14:71"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"10675:14:71"},"referencedDeclaration":4582,"src":"10675:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"id":26185,"nodeType":"VariableDeclarationStatement","src":"10675:29:71"},{"id":26432,"nodeType":"Block","src":"10784:4412:71","statements":[{"assignments":[26187,26189],"declarations":[{"constant":false,"id":26187,"mutability":"mutable","name":"aggregateSwapFeePercentage","nameLocation":"10903:26:71","nodeType":"VariableDeclaration","scope":26432,"src":"10895:34:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26186,"name":"uint256","nodeType":"ElementaryTypeName","src":"10895:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26189,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"10939:27:71","nodeType":"VariableDeclaration","scope":26432,"src":"10931:35:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26188,"name":"uint256","nodeType":"ElementaryTypeName","src":"10931:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26199,"initialValue":{"arguments":[{"id":26192,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25955,"src":"11023:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"expression":{"id":26193,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25958,"src":"11029:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_memory_ptr","typeString":"struct VaultExtension.PoolRegistrationParams memory"}},"id":26194,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11036:12:71","memberName":"roleAccounts","nodeType":"MemberAccess","referencedDeclaration":25902,"src":"11029:19:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"id":26195,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11049:11:71","memberName":"poolCreator","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"11029:31:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":26196,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25958,"src":"11062:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_memory_ptr","typeString":"struct VaultExtension.PoolRegistrationParams memory"}},"id":26197,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11069:17:71","memberName":"protocolFeeExempt","nodeType":"MemberAccess","referencedDeclaration":25899,"src":"11062:24:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":26190,"name":"_protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28287,"src":"10970:22:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}},"id":26191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11010:12:71","memberName":"registerPool","nodeType":"MemberAccess","referencedDeclaration":2342,"src":"10970:52:71","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_bool_$returns$_t_uint256_$_t_uint256_$","typeString":"function (address,address,bool) external returns (uint256,uint256)"}},"id":26198,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10970:117:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"10894:193:71"},{"expression":{"id":26205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26200,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"11102:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"74727565","id":26203,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11152:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":26201,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"11119:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11134:17:71","memberName":"setPoolRegistered","nodeType":"MemberAccess","referencedDeclaration":29662,"src":"11119:32:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":26204,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11119:38:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"11102:55:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26206,"nodeType":"ExpressionStatement","src":"11102:55:71"},{"expression":{"id":26214,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26207,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"11171:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"expression":{"id":26210,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25958,"src":"11250:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_memory_ptr","typeString":"struct VaultExtension.PoolRegistrationParams memory"}},"id":26211,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11257:19:71","memberName":"liquidityManagement","nodeType":"MemberAccess","referencedDeclaration":25907,"src":"11250:26:71","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}},"id":26212,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11277:26:71","memberName":"disableUnbalancedLiquidity","nodeType":"MemberAccess","referencedDeclaration":4573,"src":"11250:53:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":26208,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"11188:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11203:29:71","memberName":"setDisableUnbalancedLiquidity","nodeType":"MemberAccess","referencedDeclaration":29854,"src":"11188:44:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":26213,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11188:129:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"11171:146:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26215,"nodeType":"ExpressionStatement","src":"11171:146:71"},{"expression":{"id":26223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26216,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"11331:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"expression":{"id":26219,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25958,"src":"11385:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_memory_ptr","typeString":"struct VaultExtension.PoolRegistrationParams memory"}},"id":26220,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11392:19:71","memberName":"liquidityManagement","nodeType":"MemberAccess","referencedDeclaration":25907,"src":"11385:26:71","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}},"id":26221,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11412:24:71","memberName":"enableAddLiquidityCustom","nodeType":"MemberAccess","referencedDeclaration":4575,"src":"11385:51:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":26217,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"11348:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11363:21:71","memberName":"setAddLiquidityCustom","nodeType":"MemberAccess","referencedDeclaration":29916,"src":"11348:36:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":26222,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11348:89:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"11331:106:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26224,"nodeType":"ExpressionStatement","src":"11331:106:71"},{"expression":{"id":26232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26225,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"11451:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"expression":{"id":26228,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25958,"src":"11525:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_memory_ptr","typeString":"struct VaultExtension.PoolRegistrationParams memory"}},"id":26229,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11532:19:71","memberName":"liquidityManagement","nodeType":"MemberAccess","referencedDeclaration":25907,"src":"11525:26:71","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}},"id":26230,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11552:27:71","memberName":"enableRemoveLiquidityCustom","nodeType":"MemberAccess","referencedDeclaration":4577,"src":"11525:54:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":26226,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"11468:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11483:24:71","memberName":"setRemoveLiquidityCustom","nodeType":"MemberAccess","referencedDeclaration":29978,"src":"11468:39:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":26231,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11468:125:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"11451:142:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26233,"nodeType":"ExpressionStatement","src":"11451:142:71"},{"expression":{"id":26241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26234,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"11607:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"expression":{"id":26237,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25958,"src":"11651:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_memory_ptr","typeString":"struct VaultExtension.PoolRegistrationParams memory"}},"id":26238,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11658:19:71","memberName":"liquidityManagement","nodeType":"MemberAccess","referencedDeclaration":25907,"src":"11651:26:71","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}},"id":26239,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11678:14:71","memberName":"enableDonation","nodeType":"MemberAccess","referencedDeclaration":4579,"src":"11651:41:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":26235,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"11624:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11639:11:71","memberName":"setDonation","nodeType":"MemberAccess","referencedDeclaration":30021,"src":"11624:26:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":26240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11624:69:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"11607:86:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26242,"nodeType":"ExpressionStatement","src":"11607:86:71"},{"expression":{"id":26251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26243,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"11707:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":26248,"name":"tokenDecimalDiffs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25996,"src":"11794:17:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_memory_ptr","typeString":"uint8[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint8_$dyn_memory_ptr","typeString":"uint8[] memory"}],"expression":{"id":26246,"name":"PoolConfigLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30441,"src":"11760:13:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigLib_$30441_$","typeString":"type(library PoolConfigLib)"}},"id":26247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11774:19:71","memberName":"toTokenDecimalDiffs","nodeType":"MemberAccess","referencedDeclaration":30440,"src":"11760:33:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint8_$dyn_memory_ptr_$returns$_t_uint40_$","typeString":"function (uint8[] memory) pure returns (uint40)"}},"id":26249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11760:52:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint40","typeString":"uint40"}],"expression":{"id":26244,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"11724:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11739:20:71","memberName":"setTokenDecimalDiffs","nodeType":"MemberAccess","referencedDeclaration":30342,"src":"11724:35:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_uint40_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,uint40) pure returns (PoolConfigBits)"}},"id":26250,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11724:89:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"11707:106:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26252,"nodeType":"ExpressionStatement","src":"11707:106:71"},{"expression":{"id":26259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26253,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"11827:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":26256,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25958,"src":"11881:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_memory_ptr","typeString":"struct VaultExtension.PoolRegistrationParams memory"}},"id":26257,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11888:18:71","memberName":"pauseWindowEndTime","nodeType":"MemberAccess","referencedDeclaration":25897,"src":"11881:25:71","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":26254,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"11844:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11859:21:71","memberName":"setPauseWindowEndTime","nodeType":"MemberAccess","referencedDeclaration":30392,"src":"11844:36:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_uint32_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,uint32) pure returns (PoolConfigBits)"}},"id":26258,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11844:63:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"11827:80:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26260,"nodeType":"ExpressionStatement","src":"11827:80:71"},{"expression":{"id":26266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26261,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"11921:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":26264,"name":"aggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26187,"src":"11983:26:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":26262,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"11938:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11953:29:71","memberName":"setAggregateSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":30162,"src":"11938:44:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_uint256_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,uint256) pure returns (PoolConfigBits)"}},"id":26265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11938:72:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"11921:89:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26267,"nodeType":"ExpressionStatement","src":"11921:89:71"},{"expression":{"id":26273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26268,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"12024:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":26271,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26189,"src":"12087:27:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":26269,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"12041:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12056:30:71","memberName":"setAggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":30223,"src":"12041:45:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_uint256_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,uint256) pure returns (PoolConfigBits)"}},"id":26272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12041:74:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"12024:91:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26274,"nodeType":"ExpressionStatement","src":"12024:91:71"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":26281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":26275,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25958,"src":"12134:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_memory_ptr","typeString":"struct VaultExtension.PoolRegistrationParams memory"}},"id":26276,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12141:17:71","memberName":"poolHooksContract","nodeType":"MemberAccess","referencedDeclaration":25904,"src":"12134:24:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":26279,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12170:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":26278,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12162:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":26277,"name":"address","nodeType":"ElementaryTypeName","src":"12162:7:71","typeDescriptions":{}}},"id":26280,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12162:10:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12134:38:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":26416,"nodeType":"IfStatement","src":"12130:2933:71","trueBody":{"id":26415,"nodeType":"Block","src":"12174:2889:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":26296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":26287,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12380:3:71","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":26288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12384:6:71","memberName":"sender","nodeType":"MemberAccess","src":"12380:10:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26289,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25955,"src":"12416:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":26290,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25958,"src":"12446:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_memory_ptr","typeString":"struct VaultExtension.PoolRegistrationParams memory"}},"id":26291,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12453:11:71","memberName":"tokenConfig","nodeType":"MemberAccess","referencedDeclaration":25893,"src":"12446:18:71","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},{"expression":{"id":26292,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25958,"src":"12490:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_memory_ptr","typeString":"struct VaultExtension.PoolRegistrationParams memory"}},"id":26293,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12497:19:71","memberName":"liquidityManagement","nodeType":"MemberAccess","referencedDeclaration":25907,"src":"12490:26:71","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"},{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}],"expression":{"arguments":[{"expression":{"id":26283,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25958,"src":"12318:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_memory_ptr","typeString":"struct VaultExtension.PoolRegistrationParams memory"}},"id":26284,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12325:17:71","memberName":"poolHooksContract","nodeType":"MemberAccess","referencedDeclaration":25904,"src":"12318:24:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":26282,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2026,"src":"12311:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IHooks_$2026_$","typeString":"type(contract IHooks)"}},"id":26285,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12311:32:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"id":26286,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12344:10:71","memberName":"onRegister","nodeType":"MemberAccess","referencedDeclaration":1853,"src":"12311:43:71","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$_t_struct$_LiquidityManagement_$4580_memory_ptr_$returns$_t_bool_$","typeString":"function (address,address,struct TokenConfig memory[] memory,struct LiquidityManagement memory) external returns (bool)"}},"id":26294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12311:227:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":26295,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12542:5:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"12311:236:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":26306,"nodeType":"IfStatement","src":"12286:394:71","trueBody":{"id":26305,"nodeType":"Block","src":"12566:114:71","statements":[{"errorCall":{"arguments":[{"expression":{"id":26298,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25958,"src":"12618:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_memory_ptr","typeString":"struct VaultExtension.PoolRegistrationParams memory"}},"id":26299,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12625:17:71","memberName":"poolHooksContract","nodeType":"MemberAccess","referencedDeclaration":25904,"src":"12618:24:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26300,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25955,"src":"12644:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":26301,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12650:3:71","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":26302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12654:6:71","memberName":"sender","nodeType":"MemberAccess","src":"12650:10:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":26297,"name":"HookRegistrationFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3437,"src":"12595:22:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address,address) pure returns (error)"}},"id":26303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12595:66:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":26304,"nodeType":"RevertStatement","src":"12588:73:71"}]}},{"assignments":[26309],"declarations":[{"constant":false,"id":26309,"mutability":"mutable","name":"hookFlags","nameLocation":"12892:9:71","nodeType":"VariableDeclaration","scope":26415,"src":"12875:26:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_memory_ptr","typeString":"struct HookFlags"},"typeName":{"id":26308,"nodeType":"UserDefinedTypeName","pathNode":{"id":26307,"name":"HookFlags","nameLocations":["12875:9:71"],"nodeType":"IdentifierPath","referencedDeclaration":4627,"src":"12875:9:71"},"referencedDeclaration":4627,"src":"12875:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_storage_ptr","typeString":"struct HookFlags"}},"visibility":"internal"}],"id":26316,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":26311,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25958,"src":"12911:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_memory_ptr","typeString":"struct VaultExtension.PoolRegistrationParams memory"}},"id":26312,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12918:17:71","memberName":"poolHooksContract","nodeType":"MemberAccess","referencedDeclaration":25904,"src":"12911:24:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":26310,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2026,"src":"12904:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IHooks_$2026_$","typeString":"type(contract IHooks)"}},"id":26313,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12904:32:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"id":26314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12937:12:71","memberName":"getHookFlags","nodeType":"MemberAccess","referencedDeclaration":1860,"src":"12904:45:71","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_struct$_HookFlags_$4627_memory_ptr_$","typeString":"function () view external returns (struct HookFlags memory)"}},"id":26315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12904:47:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_memory_ptr","typeString":"struct HookFlags memory"}},"nodeType":"VariableDeclarationStatement","src":"12875:76:71"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":26324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":26317,"name":"hookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26309,"src":"13512:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_memory_ptr","typeString":"struct HookFlags memory"}},"id":26318,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13522:25:71","memberName":"enableHookAdjustedAmounts","nodeType":"MemberAccess","referencedDeclaration":4608,"src":"13512:35:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":26323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":26319,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25958,"src":"13571:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_memory_ptr","typeString":"struct VaultExtension.PoolRegistrationParams memory"}},"id":26320,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13578:19:71","memberName":"liquidityManagement","nodeType":"MemberAccess","referencedDeclaration":25907,"src":"13571:26:71","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}},"id":26321,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13598:26:71","memberName":"disableUnbalancedLiquidity","nodeType":"MemberAccess","referencedDeclaration":4573,"src":"13571:53:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":26322,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"13628:5:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"13571:62:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13512:121:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":26334,"nodeType":"IfStatement","src":"13487:279:71","trueBody":{"id":26333,"nodeType":"Block","src":"13652:114:71","statements":[{"errorCall":{"arguments":[{"expression":{"id":26326,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25958,"src":"13704:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_memory_ptr","typeString":"struct VaultExtension.PoolRegistrationParams memory"}},"id":26327,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13711:17:71","memberName":"poolHooksContract","nodeType":"MemberAccess","referencedDeclaration":25904,"src":"13704:24:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26328,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25955,"src":"13730:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":26329,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13736:3:71","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":26330,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13740:6:71","memberName":"sender","nodeType":"MemberAccess","src":"13736:10:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":26325,"name":"HookRegistrationFailed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3437,"src":"13681:22:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address,address) pure returns (error)"}},"id":26331,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13681:66:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":26332,"nodeType":"RevertStatement","src":"13674:73:71"}]}},{"expression":{"id":26341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26335,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"13784:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":26338,"name":"hookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26309,"src":"13839:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_memory_ptr","typeString":"struct HookFlags memory"}},"id":26339,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13849:25:71","memberName":"enableHookAdjustedAmounts","nodeType":"MemberAccess","referencedDeclaration":4608,"src":"13839:35:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":26336,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"13801:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13816:22:71","memberName":"setHookAdjustedAmounts","nodeType":"MemberAccess","referencedDeclaration":28446,"src":"13801:37:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":26340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13801:74:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"13784:91:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26342,"nodeType":"ExpressionStatement","src":"13784:91:71"},{"expression":{"id":26349,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26343,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"13893:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":26346,"name":"hookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26309,"src":"13955:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_memory_ptr","typeString":"struct HookFlags memory"}},"id":26347,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13965:26:71","memberName":"shouldCallBeforeInitialize","nodeType":"MemberAccess","referencedDeclaration":4610,"src":"13955:36:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":26344,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"13910:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26345,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13925:29:71","memberName":"setShouldCallBeforeInitialize","nodeType":"MemberAccess","referencedDeclaration":28489,"src":"13910:44:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":26348,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13910:82:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"13893:99:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26350,"nodeType":"ExpressionStatement","src":"13893:99:71"},{"expression":{"id":26357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26351,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"14010:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":26354,"name":"hookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26309,"src":"14071:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_memory_ptr","typeString":"struct HookFlags memory"}},"id":26355,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14081:25:71","memberName":"shouldCallAfterInitialize","nodeType":"MemberAccess","referencedDeclaration":4612,"src":"14071:35:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":26352,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"14027:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14042:28:71","memberName":"setShouldCallAfterInitialize","nodeType":"MemberAccess","referencedDeclaration":28532,"src":"14027:43:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":26356,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14027:80:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"14010:97:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26358,"nodeType":"ExpressionStatement","src":"14010:97:71"},{"expression":{"id":26365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26359,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"14125:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":26362,"name":"hookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26309,"src":"14213:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_memory_ptr","typeString":"struct HookFlags memory"}},"id":26363,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14223:31:71","memberName":"shouldCallComputeDynamicSwapFee","nodeType":"MemberAccess","referencedDeclaration":4614,"src":"14213:41:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":26360,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"14142:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14157:34:71","memberName":"setShouldCallComputeDynamicSwapFee","nodeType":"MemberAccess","referencedDeclaration":28575,"src":"14142:49:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":26364,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14142:130:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"14125:147:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26366,"nodeType":"ExpressionStatement","src":"14125:147:71"},{"expression":{"id":26373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26367,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"14290:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":26370,"name":"hookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26309,"src":"14346:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_memory_ptr","typeString":"struct HookFlags memory"}},"id":26371,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14356:20:71","memberName":"shouldCallBeforeSwap","nodeType":"MemberAccess","referencedDeclaration":4616,"src":"14346:30:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":26368,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"14307:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14322:23:71","memberName":"setShouldCallBeforeSwap","nodeType":"MemberAccess","referencedDeclaration":28618,"src":"14307:38:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":26372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14307:70:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"14290:87:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26374,"nodeType":"ExpressionStatement","src":"14290:87:71"},{"expression":{"id":26381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26375,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"14395:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":26378,"name":"hookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26309,"src":"14450:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_memory_ptr","typeString":"struct HookFlags memory"}},"id":26379,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14460:19:71","memberName":"shouldCallAfterSwap","nodeType":"MemberAccess","referencedDeclaration":4618,"src":"14450:29:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":26376,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"14412:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14427:22:71","memberName":"setShouldCallAfterSwap","nodeType":"MemberAccess","referencedDeclaration":28661,"src":"14412:37:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":26380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14412:68:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"14395:85:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26382,"nodeType":"ExpressionStatement","src":"14395:85:71"},{"expression":{"id":26389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26383,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"14498:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":26386,"name":"hookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26309,"src":"14562:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_memory_ptr","typeString":"struct HookFlags memory"}},"id":26387,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14572:28:71","memberName":"shouldCallBeforeAddLiquidity","nodeType":"MemberAccess","referencedDeclaration":4620,"src":"14562:38:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":26384,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"14515:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14530:31:71","memberName":"setShouldCallBeforeAddLiquidity","nodeType":"MemberAccess","referencedDeclaration":28704,"src":"14515:46:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":26388,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14515:86:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"14498:103:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26390,"nodeType":"ExpressionStatement","src":"14498:103:71"},{"expression":{"id":26397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26391,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"14619:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":26394,"name":"hookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26309,"src":"14682:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_memory_ptr","typeString":"struct HookFlags memory"}},"id":26395,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14692:27:71","memberName":"shouldCallAfterAddLiquidity","nodeType":"MemberAccess","referencedDeclaration":4622,"src":"14682:37:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":26392,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"14636:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14651:30:71","memberName":"setShouldCallAfterAddLiquidity","nodeType":"MemberAccess","referencedDeclaration":28747,"src":"14636:45:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":26396,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14636:84:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"14619:101:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26398,"nodeType":"ExpressionStatement","src":"14619:101:71"},{"expression":{"id":26405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26399,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"14738:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":26402,"name":"hookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26309,"src":"14826:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_memory_ptr","typeString":"struct HookFlags memory"}},"id":26403,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14836:31:71","memberName":"shouldCallBeforeRemoveLiquidity","nodeType":"MemberAccess","referencedDeclaration":4624,"src":"14826:41:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":26400,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"14755:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26401,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14770:34:71","memberName":"setShouldCallBeforeRemoveLiquidity","nodeType":"MemberAccess","referencedDeclaration":28790,"src":"14755:49:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":26404,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14755:130:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"14738:147:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26406,"nodeType":"ExpressionStatement","src":"14738:147:71"},{"expression":{"id":26413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26407,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"14903:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":26410,"name":"hookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26309,"src":"14990:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_memory_ptr","typeString":"struct HookFlags memory"}},"id":26411,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15000:30:71","memberName":"shouldCallAfterRemoveLiquidity","nodeType":"MemberAccess","referencedDeclaration":4626,"src":"14990:40:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":26408,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"14920:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14935:33:71","memberName":"setShouldCallAfterRemoveLiquidity","nodeType":"MemberAccess","referencedDeclaration":28833,"src":"14920:48:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":26412,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14920:128:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"14903:145:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26414,"nodeType":"ExpressionStatement","src":"14903:145:71"}]}},{"expression":{"id":26421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":26417,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"15077:15:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":26419,"indexExpression":{"id":26418,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25955,"src":"15093:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15077:21:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":26420,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"15101:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"15077:38:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26422,"nodeType":"ExpressionStatement","src":"15077:38:71"},{"expression":{"id":26430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":26423,"name":"_hooksContracts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28236,"src":"15129:15:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IHooks_$2026_$","typeString":"mapping(address => contract IHooks)"}},"id":26425,"indexExpression":{"id":26424,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25955,"src":"15145:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15129:21:71","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":26427,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25958,"src":"15160:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_memory_ptr","typeString":"struct VaultExtension.PoolRegistrationParams memory"}},"id":26428,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15167:17:71","memberName":"poolHooksContract","nodeType":"MemberAccess","referencedDeclaration":25904,"src":"15160:24:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":26426,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2026,"src":"15153:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IHooks_$2026_$","typeString":"type(contract IHooks)"}},"id":26429,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15153:32:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"src":"15129:56:71","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"id":26431,"nodeType":"ExpressionStatement","src":"15129:56:71"}]},{"expression":{"arguments":[{"id":26434,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25955,"src":"15339:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":26435,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25958,"src":"15345:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_memory_ptr","typeString":"struct VaultExtension.PoolRegistrationParams memory"}},"id":26436,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15352:17:71","memberName":"swapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":25895,"src":"15345:24:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":26433,"name":"_setStaticSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25506,"src":"15311:27:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":26437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15311:59:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26438,"nodeType":"ExpressionStatement","src":"15311:59:71"},{"eventCall":{"arguments":[{"id":26440,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25955,"src":"15511:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":26441,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"15529:3:71","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":26442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15533:6:71","memberName":"sender","nodeType":"MemberAccess","src":"15529:10:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":26443,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25958,"src":"15553:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_memory_ptr","typeString":"struct VaultExtension.PoolRegistrationParams memory"}},"id":26444,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15560:11:71","memberName":"tokenConfig","nodeType":"MemberAccess","referencedDeclaration":25893,"src":"15553:18:71","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},{"expression":{"id":26445,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25958,"src":"15585:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_memory_ptr","typeString":"struct VaultExtension.PoolRegistrationParams memory"}},"id":26446,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15592:17:71","memberName":"swapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":25895,"src":"15585:24:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":26447,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25958,"src":"15623:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_memory_ptr","typeString":"struct VaultExtension.PoolRegistrationParams memory"}},"id":26448,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15630:18:71","memberName":"pauseWindowEndTime","nodeType":"MemberAccess","referencedDeclaration":25897,"src":"15623:25:71","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"expression":{"id":26449,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25958,"src":"15662:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_memory_ptr","typeString":"struct VaultExtension.PoolRegistrationParams memory"}},"id":26450,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15669:12:71","memberName":"roleAccounts","nodeType":"MemberAccess","referencedDeclaration":25902,"src":"15662:19:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},{"arguments":[{"arguments":[{"expression":{"id":26454,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25958,"src":"15731:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_memory_ptr","typeString":"struct VaultExtension.PoolRegistrationParams memory"}},"id":26455,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15738:17:71","memberName":"poolHooksContract","nodeType":"MemberAccess","referencedDeclaration":25904,"src":"15731:24:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":26453,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2026,"src":"15724:6:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IHooks_$2026_$","typeString":"type(contract IHooks)"}},"id":26456,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15724:32:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}],"expression":{"id":26451,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26184,"src":"15695:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15710:13:71","memberName":"toHooksConfig","nodeType":"MemberAccess","referencedDeclaration":28883,"src":"15695:28:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_contract$_IHooks_$2026_$returns$_t_struct$_HooksConfig_$4651_memory_ptr_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,contract IHooks) pure returns (struct HooksConfig memory)"}},"id":26457,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15695:62:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4651_memory_ptr","typeString":"struct HooksConfig memory"}},{"expression":{"id":26458,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25958,"src":"15771:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_memory_ptr","typeString":"struct VaultExtension.PoolRegistrationParams memory"}},"id":26459,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15778:19:71","memberName":"liquidityManagement","nodeType":"MemberAccess","referencedDeclaration":25907,"src":"15771:26:71","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"},{"typeIdentifier":"t_struct$_HooksConfig_$4651_memory_ptr","typeString":"struct HooksConfig memory"},{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}],"id":26439,"name":"PoolRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3806,"src":"15483:14:71","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$_t_uint256_$_t_uint32_$_t_struct$_PoolRoleAccounts_$4677_memory_ptr_$_t_struct$_HooksConfig_$4651_memory_ptr_$_t_struct$_LiquidityManagement_$4580_memory_ptr_$returns$__$","typeString":"function (address,address,struct TokenConfig memory[] memory,uint256,uint32,struct PoolRoleAccounts memory,struct HooksConfig memory,struct LiquidityManagement memory)"}},"id":26460,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15483:324:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26461,"nodeType":"EmitStatement","src":"15478:329:71"}]},"documentation":{"id":25953,"nodeType":"StructuredDocumentation","src":"7630:316:71","text":" @dev The function will register the pool, setting its tokens with an initial balance of zero.\n The function also checks for valid token addresses and ensures that the pool and tokens aren't\n already registered.\n Emits a `PoolRegistered` event upon successful registration."},"id":26463,"implemented":true,"kind":"function","modifiers":[],"name":"_registerPool","nameLocation":"7960:13:71","nodeType":"FunctionDefinition","parameters":{"id":25959,"nodeType":"ParameterList","parameters":[{"constant":false,"id":25955,"mutability":"mutable","name":"pool","nameLocation":"7982:4:71","nodeType":"VariableDeclaration","scope":26463,"src":"7974:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":25954,"name":"address","nodeType":"ElementaryTypeName","src":"7974:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":25958,"mutability":"mutable","name":"params","nameLocation":"8018:6:71","nodeType":"VariableDeclaration","scope":26463,"src":"7988:36:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_memory_ptr","typeString":"struct VaultExtension.PoolRegistrationParams"},"typeName":{"id":25957,"nodeType":"UserDefinedTypeName","pathNode":{"id":25956,"name":"PoolRegistrationParams","nameLocations":["7988:22:71"],"nodeType":"IdentifierPath","referencedDeclaration":25908,"src":"7988:22:71"},"referencedDeclaration":25908,"src":"7988:22:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRegistrationParams_$25908_storage_ptr","typeString":"struct VaultExtension.PoolRegistrationParams"}},"visibility":"internal"}],"src":"7973:52:71"},"returnParameters":{"id":25960,"nodeType":"ParameterList","parameters":[],"src":"8035:0:71"},"scope":28100,"src":"7951:7863:71","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[4106],"body":{"id":26477,"nodeType":"Block","src":"15947:47:71","statements":[{"expression":{"arguments":[{"id":26474,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26466,"src":"15982:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":26473,"name":"_isPoolRegistered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25167,"src":"15964:17:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":26475,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15964:23:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":26472,"id":26476,"nodeType":"Return","src":"15957:30:71"}]},"documentation":{"id":26464,"nodeType":"StructuredDocumentation","src":"15820:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"c673bdaf","id":26478,"implemented":true,"kind":"function","modifiers":[{"id":26469,"kind":"modifierInvocation","modifierName":{"id":26468,"name":"onlyVaultDelegateCall","nameLocations":["15910:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"15910:21:71"},"nodeType":"ModifierInvocation","src":"15910:21:71"}],"name":"isPoolRegistered","nameLocation":"15865:16:71","nodeType":"FunctionDefinition","parameters":{"id":26467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26466,"mutability":"mutable","name":"pool","nameLocation":"15890:4:71","nodeType":"VariableDeclaration","scope":26478,"src":"15882:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26465,"name":"address","nodeType":"ElementaryTypeName","src":"15882:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15881:14:71"},"returnParameters":{"id":26472,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26471,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26478,"src":"15941:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":26470,"name":"bool","nodeType":"ElementaryTypeName","src":"15941:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15940:6:71"},"scope":28100,"src":"15856:138:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4127],"body":{"id":26628,"nodeType":"Block","src":"16410:2050:71","statements":[{"expression":{"arguments":[{"id":26509,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26481,"src":"16436:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":26508,"name":"_ensureUnpaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24998,"src":"16420:15:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":26510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16420:21:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26511,"nodeType":"ExpressionStatement","src":"16420:21:71"},{"assignments":[26514],"declarations":[{"constant":false,"id":26514,"mutability":"mutable","name":"poolData","nameLocation":"16585:8:71","nodeType":"VariableDeclaration","scope":26628,"src":"16569:24:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":26513,"nodeType":"UserDefinedTypeName","pathNode":{"id":26512,"name":"PoolData","nameLocations":["16569:8:71"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"16569:8:71"},"referencedDeclaration":4729,"src":"16569:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"id":26520,"initialValue":{"arguments":[{"id":26516,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26481,"src":"16610:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":26517,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"16616:8:71","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":26518,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16625:10:71","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":4731,"src":"16616:19:71","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"id":26515,"name":"_loadPoolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25336,"src":"16596:13:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_Rounding_$4732_$returns$_t_struct$_PoolData_$4729_memory_ptr_$","typeString":"function (address,enum Rounding) view returns (struct PoolData memory)"}},"id":26519,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16596:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"nodeType":"VariableDeclarationStatement","src":"16569:67:71"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":26521,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26514,"src":"16651:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":26522,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16660:14:71","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"16651:23:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16675:17:71","memberName":"isPoolInitialized","nodeType":"MemberAccess","referencedDeclaration":29680,"src":"16651:41:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":26524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16651:43:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":26530,"nodeType":"IfStatement","src":"16647:109:71","trueBody":{"id":26529,"nodeType":"Block","src":"16696:60:71","statements":[{"errorCall":{"arguments":[{"id":26526,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26481,"src":"16740:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":26525,"name":"PoolAlreadyInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3418,"src":"16717:22:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":26527,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16717:28:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":26528,"nodeType":"RevertStatement","src":"16710:35:71"}]}},{"assignments":[26532],"declarations":[{"constant":false,"id":26532,"mutability":"mutable","name":"numTokens","nameLocation":"16773:9:71","nodeType":"VariableDeclaration","scope":26628,"src":"16765:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26531,"name":"uint256","nodeType":"ElementaryTypeName","src":"16765:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26536,"initialValue":{"expression":{"expression":{"id":26533,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26514,"src":"16785:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":26534,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16794:6:71","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":4712,"src":"16785:15:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":26535,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16801:6:71","memberName":"length","nodeType":"MemberAccess","src":"16785:22:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16765:42:71"},{"expression":{"arguments":[{"id":26540,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26532,"src":"16854:9:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":26541,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26490,"src":"16865:14:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":26542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16880:6:71","memberName":"length","nodeType":"MemberAccess","src":"16865:21:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":26537,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6193,"src":"16818:12:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$6193_$","typeString":"type(library InputHelpers)"}},"id":26539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16831:22:71","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":5926,"src":"16818:35:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":26543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16818:69:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26544,"nodeType":"ExpressionStatement","src":"16818:69:71"},{"assignments":[26549],"declarations":[{"constant":false,"id":26549,"mutability":"mutable","name":"exactAmountsInScaled18","nameLocation":"17055:22:71","nodeType":"VariableDeclaration","scope":26628,"src":"17038:39:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":26547,"name":"uint256","nodeType":"ElementaryTypeName","src":"17038:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26548,"nodeType":"ArrayTypeName","src":"17038:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":26557,"initialValue":{"arguments":[{"expression":{"id":26552,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26514,"src":"17146:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":26553,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17155:21:71","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":4728,"src":"17146:30:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":26554,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26514,"src":"17190:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":26555,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17199:10:71","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":4725,"src":"17190:19:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"expression":{"id":26550,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26490,"src":"17080:14:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":26551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17095:37:71","memberName":"copyToScaled18ApplyRateRoundDownArray","nodeType":"MemberAccess","referencedDeclaration":6684,"src":"17080:52:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$attached_to$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":26556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17080:139:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"17038:181:71"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":26558,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26514,"src":"17234:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":26559,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17243:14:71","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"17234:23:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17258:26:71","memberName":"shouldCallBeforeInitialize","nodeType":"MemberAccess","referencedDeclaration":28464,"src":"17234:50:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":26561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17234:52:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":26593,"nodeType":"IfStatement","src":"17230:789:71","trueBody":{"id":26592,"nodeType":"Block","src":"17288:731:71","statements":[{"expression":{"arguments":[{"id":26565,"name":"exactAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26549,"src":"17342:22:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":26566,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26494,"src":"17366:8:71","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"baseExpression":{"id":26567,"name":"_hooksContracts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28236,"src":"17376:15:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IHooks_$2026_$","typeString":"mapping(address => contract IHooks)"}},"id":26569,"indexExpression":{"id":26568,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26481,"src":"17392:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17376:21:71","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}],"expression":{"id":26562,"name":"HooksConfigLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29474,"src":"17302:14:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_HooksConfigLib_$29474_$","typeString":"type(library HooksConfigLib)"}},"id":26564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17317:24:71","memberName":"callBeforeInitializeHook","nodeType":"MemberAccess","referencedDeclaration":29443,"src":"17302:39:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$_t_contract$_IHooks_$2026_$returns$__$","typeString":"function (uint256[] memory,bytes memory,contract IHooks)"}},"id":26570,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17302:96:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26571,"nodeType":"ExpressionStatement","src":"17302:96:71"},{"expression":{"arguments":[{"baseExpression":{"id":26575,"name":"_poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28256,"src":"17680:18:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"}},"id":26577,"indexExpression":{"id":26576,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26481,"src":"17699:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17680:24:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},{"expression":{"id":26578,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"17706:8:71","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":26579,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"17715:10:71","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":4731,"src":"17706:19:71","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"expression":{"id":26572,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26514,"src":"17648:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":26574,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17657:22:71","memberName":"reloadBalancesAndRates","nodeType":"MemberAccess","referencedDeclaration":30871,"src":"17648:31:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PoolData_$4729_memory_ptr_$_t_mapping$_t_uint256_$_t_bytes32_$_$_t_enum$_Rounding_$4732_$returns$__$attached_to$_t_struct$_PoolData_$4729_memory_ptr_$","typeString":"function (struct PoolData memory,mapping(uint256 => bytes32),enum Rounding) view"}},"id":26580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17648:78:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26581,"nodeType":"ExpressionStatement","src":"17648:78:71"},{"expression":{"id":26590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26582,"name":"exactAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26549,"src":"17832:22:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":26585,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26514,"src":"17927:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":26586,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17936:21:71","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":4728,"src":"17927:30:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":26587,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26514,"src":"17975:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":26588,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17984:10:71","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":4725,"src":"17975:19:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"expression":{"id":26583,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26490,"src":"17857:14:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":26584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17872:37:71","memberName":"copyToScaled18ApplyRateRoundDownArray","nodeType":"MemberAccess","referencedDeclaration":6684,"src":"17857:52:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$attached_to$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory,uint256[] memory) pure returns (uint256[] memory)"}},"id":26589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17857:151:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"17832:176:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":26591,"nodeType":"ExpressionStatement","src":"17832:176:71"}]}},{"expression":{"id":26604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26594,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26506,"src":"18029:12:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":26596,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26481,"src":"18056:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26597,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26483,"src":"18062:2:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26598,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26514,"src":"18066:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},{"id":26599,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26487,"src":"18076:6:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},{"id":26600,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26490,"src":"18084:14:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":26601,"name":"exactAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26549,"src":"18100:22:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":26602,"name":"minBptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26492,"src":"18124:15:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":26595,"name":"_initialize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26810,"src":"18044:11:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_struct$_PoolData_$4729_memory_ptr_$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,address,struct PoolData memory,contract IERC20[] memory,uint256[] memory,uint256[] memory,uint256) returns (uint256)"}},"id":26603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18044:96:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18029:111:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26605,"nodeType":"ExpressionStatement","src":"18029:111:71"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":26606,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26514,"src":"18155:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":26607,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18164:14:71","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"18155:23:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18179:25:71","memberName":"shouldCallAfterInitialize","nodeType":"MemberAccess","referencedDeclaration":28507,"src":"18155:49:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":26609,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18155:51:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":26627,"nodeType":"IfStatement","src":"18151:303:71","trueBody":{"id":26626,"nodeType":"Block","src":"18208:246:71","statements":[{"assignments":[26612],"declarations":[{"constant":false,"id":26612,"mutability":"mutable","name":"hooksContract","nameLocation":"18290:13:71","nodeType":"VariableDeclaration","scope":26626,"src":"18283:20:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"},"typeName":{"id":26611,"nodeType":"UserDefinedTypeName","pathNode":{"id":26610,"name":"IHooks","nameLocations":["18283:6:71"],"nodeType":"IdentifierPath","referencedDeclaration":2026,"src":"18283:6:71"},"referencedDeclaration":2026,"src":"18283:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"visibility":"internal"}],"id":26616,"initialValue":{"baseExpression":{"id":26613,"name":"_hooksContracts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28236,"src":"18306:15:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IHooks_$2026_$","typeString":"mapping(address => contract IHooks)"}},"id":26615,"indexExpression":{"id":26614,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26481,"src":"18322:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18306:21:71","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"nodeType":"VariableDeclarationStatement","src":"18283:44:71"},{"expression":{"arguments":[{"id":26620,"name":"exactAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26549,"src":"18381:22:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":26621,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26506,"src":"18405:12:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26622,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26494,"src":"18419:8:71","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":26623,"name":"hooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26612,"src":"18429:13:71","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}],"expression":{"id":26617,"name":"HooksConfigLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29474,"src":"18342:14:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_HooksConfigLib_$29474_$","typeString":"type(library HooksConfigLib)"}},"id":26619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18357:23:71","memberName":"callAfterInitializeHook","nodeType":"MemberAccess","referencedDeclaration":29473,"src":"18342:38:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$_t_contract$_IHooks_$2026_$returns$__$","typeString":"function (uint256[] memory,uint256,bytes memory,contract IHooks)"}},"id":26624,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18342:101:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26625,"nodeType":"ExpressionStatement","src":"18342:101:71"}]}}]},"documentation":{"id":26479,"nodeType":"StructuredDocumentation","src":"16000:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"ba8a2be0","id":26629,"implemented":true,"kind":"function","modifiers":[{"id":26497,"kind":"modifierInvocation","modifierName":{"id":26496,"name":"onlyVaultDelegateCall","nameLocations":["16266:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"16266:21:71"},"nodeType":"ModifierInvocation","src":"16266:21:71"},{"id":26499,"kind":"modifierInvocation","modifierName":{"id":26498,"name":"onlyWhenUnlocked","nameLocations":["16296:16:71"],"nodeType":"IdentifierPath","referencedDeclaration":24848,"src":"16296:16:71"},"nodeType":"ModifierInvocation","src":"16296:16:71"},{"arguments":[{"id":26501,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26481,"src":"16340:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":26502,"kind":"modifierInvocation","modifierName":{"id":26500,"name":"withRegisteredPool","nameLocations":["16321:18:71"],"nodeType":"IdentifierPath","referencedDeclaration":25120,"src":"16321:18:71"},"nodeType":"ModifierInvocation","src":"16321:24:71"},{"id":26504,"kind":"modifierInvocation","modifierName":{"id":26503,"name":"nonReentrant","nameLocations":["16354:12:71"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"16354:12:71"},"nodeType":"ModifierInvocation","src":"16354:12:71"}],"name":"initialize","nameLocation":"16045:10:71","nodeType":"FunctionDefinition","parameters":{"id":26495,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26481,"mutability":"mutable","name":"pool","nameLocation":"16073:4:71","nodeType":"VariableDeclaration","scope":26629,"src":"16065:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26480,"name":"address","nodeType":"ElementaryTypeName","src":"16065:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26483,"mutability":"mutable","name":"to","nameLocation":"16095:2:71","nodeType":"VariableDeclaration","scope":26629,"src":"16087:10:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26482,"name":"address","nodeType":"ElementaryTypeName","src":"16087:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26487,"mutability":"mutable","name":"tokens","nameLocation":"16123:6:71","nodeType":"VariableDeclaration","scope":26629,"src":"16107:22:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":26485,"nodeType":"UserDefinedTypeName","pathNode":{"id":26484,"name":"IERC20","nameLocations":["16107:6:71"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"16107:6:71"},"referencedDeclaration":40109,"src":"16107:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":26486,"nodeType":"ArrayTypeName","src":"16107:8:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":26490,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"16156:14:71","nodeType":"VariableDeclaration","scope":26629,"src":"16139:31:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":26488,"name":"uint256","nodeType":"ElementaryTypeName","src":"16139:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26489,"nodeType":"ArrayTypeName","src":"16139:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":26492,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"16188:15:71","nodeType":"VariableDeclaration","scope":26629,"src":"16180:23:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26491,"name":"uint256","nodeType":"ElementaryTypeName","src":"16180:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":26494,"mutability":"mutable","name":"userData","nameLocation":"16226:8:71","nodeType":"VariableDeclaration","scope":26629,"src":"16213:21:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":26493,"name":"bytes","nodeType":"ElementaryTypeName","src":"16213:5:71","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"16055:185:71"},"returnParameters":{"id":26507,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26506,"mutability":"mutable","name":"bptAmountOut","nameLocation":"16392:12:71","nodeType":"VariableDeclaration","scope":26629,"src":"16384:20:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26505,"name":"uint256","nodeType":"ElementaryTypeName","src":"16384:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16383:22:71"},"scope":28100,"src":"16036:2424:71","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":26809,"nodeType":"Block","src":"18764:2188:71","statements":[{"assignments":[26656],"declarations":[{"constant":false,"id":26656,"mutability":"mutable","name":"poolBalances","nameLocation":"18840:12:71","nodeType":"VariableDeclaration","scope":26809,"src":"18774:78:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"typeName":{"id":26655,"keyName":"tokenIndex","keyNameLocation":"18790:10:71","keyType":{"id":26653,"name":"uint256","nodeType":"ElementaryTypeName","src":"18782:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"18774:57:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"valueName":"packedTokenBalance","valueNameLocation":"18812:18:71","valueType":{"id":26654,"name":"bytes32","nodeType":"ElementaryTypeName","src":"18804:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},"visibility":"internal"}],"id":26660,"initialValue":{"baseExpression":{"id":26657,"name":"_poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28256,"src":"18855:18:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"}},"id":26659,"indexExpression":{"id":26658,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"18874:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18855:24:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"nodeType":"VariableDeclarationStatement","src":"18774:105:71"},{"body":{"id":26723,"nodeType":"Block","src":"18943:574:71","statements":[{"assignments":[26675],"declarations":[{"constant":false,"id":26675,"mutability":"mutable","name":"actualToken","nameLocation":"18964:11:71","nodeType":"VariableDeclaration","scope":26723,"src":"18957:18:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":26674,"nodeType":"UserDefinedTypeName","pathNode":{"id":26673,"name":"IERC20","nameLocations":["18957:6:71"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"18957:6:71"},"referencedDeclaration":40109,"src":"18957:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"id":26680,"initialValue":{"baseExpression":{"expression":{"id":26676,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26636,"src":"18978:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":26677,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18987:6:71","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":4712,"src":"18978:15:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":26679,"indexExpression":{"id":26678,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26662,"src":"18994:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18978:18:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"18957:39:71"},{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"id":26685,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26681,"name":"actualToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26675,"src":"19089:11:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"baseExpression":{"id":26682,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26640,"src":"19104:6:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":26684,"indexExpression":{"id":26683,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26662,"src":"19111:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19104:9:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"19089:24:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":26701,"nodeType":"IfStatement","src":"19085:132:71","trueBody":{"id":26700,"nodeType":"Block","src":"19115:102:71","statements":[{"errorCall":{"arguments":[{"id":26687,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"19155:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"baseExpression":{"id":26690,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26640,"src":"19169:6:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":26692,"indexExpression":{"id":26691,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26662,"src":"19176:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19169:9:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":26689,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19161:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":26688,"name":"address","nodeType":"ElementaryTypeName","src":"19161:7:71","typeDescriptions":{}}},"id":26693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19161:18:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":26696,"name":"actualToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26675,"src":"19189:11:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":26695,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19181:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":26694,"name":"address","nodeType":"ElementaryTypeName","src":"19181:7:71","typeDescriptions":{}}},"id":26697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19181:20:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":26686,"name":"TokensMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3470,"src":"19140:14:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$_t_address_$returns$_t_error_$","typeString":"function (address,address,address) pure returns (error)"}},"id":26698,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19140:62:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":26699,"nodeType":"RevertStatement","src":"19133:69:71"}]}},{"expression":{"arguments":[{"id":26703,"name":"actualToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26675,"src":"19285:11:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"baseExpression":{"id":26704,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26643,"src":"19298:14:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":26706,"indexExpression":{"id":26705,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26662,"src":"19313:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19298:17:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":26702,"name":"_takeDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24908,"src":"19275:9:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":26707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19275:41:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26708,"nodeType":"ExpressionStatement","src":"19275:41:71"},{"expression":{"id":26721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":26709,"name":"poolBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26656,"src":"19408:12:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"id":26711,"indexExpression":{"id":26710,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26662,"src":"19421:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"19408:15:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":26714,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26643,"src":"19461:14:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":26716,"indexExpression":{"id":26715,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26662,"src":"19476:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19461:17:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":26717,"name":"exactAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26646,"src":"19480:22:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":26719,"indexExpression":{"id":26718,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26662,"src":"19503:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19480:25:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":26712,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6344,"src":"19426:18:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PackedTokenBalance_$6344_$","typeString":"type(library PackedTokenBalance)"}},"id":26713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19445:15:71","memberName":"toPackedBalance","nodeType":"MemberAccess","referencedDeclaration":6303,"src":"19426:34:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":26720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19426:80:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"19408:98:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":26722,"nodeType":"ExpressionStatement","src":"19408:98:71"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26665,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26662,"src":"18910:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"expression":{"id":26666,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26636,"src":"18914:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":26667,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18923:6:71","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":4712,"src":"18914:15:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":26668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18930:6:71","memberName":"length","nodeType":"MemberAccess","src":"18914:22:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18910:26:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":26724,"initializationExpression":{"assignments":[26662],"declarations":[{"constant":false,"id":26662,"mutability":"mutable","name":"i","nameLocation":"18903:1:71","nodeType":"VariableDeclaration","scope":26724,"src":"18895:9:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26661,"name":"uint256","nodeType":"ElementaryTypeName","src":"18895:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26664,"initialValue":{"hexValue":"30","id":26663,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18907:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"18895:13:71"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":26671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"18938:3:71","subExpression":{"id":26670,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26662,"src":"18940:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26672,"nodeType":"ExpressionStatement","src":"18938:3:71"},"nodeType":"ForStatement","src":"18890:627:71"},{"expression":{"id":26733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":26725,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26636,"src":"19527:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":26727,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"19536:14:71","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"19527:23:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"hexValue":"74727565","id":26731,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"19596:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"expression":{"id":26728,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26636,"src":"19553:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":26729,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19562:14:71","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"19553:23:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19577:18:71","memberName":"setPoolInitialized","nodeType":"MemberAccess","referencedDeclaration":29705,"src":"19553:42:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":26732,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19553:48:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"19527:74:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26734,"nodeType":"ExpressionStatement","src":"19527:74:71"},{"expression":{"id":26740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":26735,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"19670:15:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":26737,"indexExpression":{"id":26736,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"19686:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"19670:21:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":26738,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26636,"src":"19694:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":26739,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19703:14:71","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"19694:23:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"19670:47:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":26741,"nodeType":"ExpressionStatement","src":"19670:47:71"},{"expression":{"id":26751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26742,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26651,"src":"19773:12:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":26747,"name":"exactAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26646,"src":"19821:22:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":26748,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"19845:8:71","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":26749,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"19854:10:71","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":4731,"src":"19845:19:71","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"expression":{"arguments":[{"id":26744,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"19798:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":26743,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1505,"src":"19788:9:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasePool_$1505_$","typeString":"type(contract IBasePool)"}},"id":26745,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19788:15:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}},"id":26746,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19804:16:71","memberName":"computeInvariant","nodeType":"MemberAccess","referencedDeclaration":1482,"src":"19788:32:71","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_enum$_Rounding_$4732_$returns$_t_uint256_$","typeString":"function (uint256[] memory,enum Rounding) view external returns (uint256)"}},"id":26750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19788:77:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19773:92:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26752,"nodeType":"ExpressionStatement","src":"19773:92:71"},{"expression":{"arguments":[{"id":26754,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26651,"src":"19906:12:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":26753,"name":"_ensurePoolMinimumTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39074,"src":"19876:29:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":26755,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19876:43:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26756,"nodeType":"ExpressionStatement","src":"19876:43:71"},{"expression":{"id":26759,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26757,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26651,"src":"20037:12:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":26758,"name":"_POOL_MINIMUM_TOTAL_SUPPLY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38854,"src":"20053:26:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20037:42:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26760,"nodeType":"ExpressionStatement","src":"20037:42:71"},{"expression":{"arguments":[{"arguments":[{"id":26764,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"20382:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":26763,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20374:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":26762,"name":"address","nodeType":"ElementaryTypeName","src":"20374:7:71","typeDescriptions":{}}},"id":26765,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20374:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":26761,"name":"_mintMinimumSupplyReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39126,"src":"20348:25:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":26766,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20348:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26767,"nodeType":"ExpressionStatement","src":"20348:40:71"},{"expression":{"arguments":[{"arguments":[{"id":26771,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"20412:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":26770,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20404:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":26769,"name":"address","nodeType":"ElementaryTypeName","src":"20404:7:71","typeDescriptions":{}}},"id":26772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20404:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26773,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26633,"src":"20419:2:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26774,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26651,"src":"20423:12:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":26768,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39059,"src":"20398:5:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":26775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20398:38:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26776,"nodeType":"ExpressionStatement","src":"20398:38:71"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26777,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26651,"src":"20511:12:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":26778,"name":"minBptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26648,"src":"20526:15:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20511:30:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":26786,"nodeType":"IfStatement","src":"20507:119:71","trueBody":{"id":26785,"nodeType":"Block","src":"20543:83:71","statements":[{"errorCall":{"arguments":[{"id":26781,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26651,"src":"20585:12:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26782,"name":"minBptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26648,"src":"20599:15:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":26780,"name":"BptAmountOutBelowMin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3565,"src":"20564:20:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":26783,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20564:51:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":26784,"nodeType":"RevertStatement","src":"20557:58:71"}]}},{"eventCall":{"arguments":[{"id":26788,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"20669:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":26789,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26633,"src":"20687:2:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":26790,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4807,"src":"20703:16:71","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_AddLiquidityKind_$4807_$","typeString":"type(enum AddLiquidityKind)"}},"id":26791,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"20720:10:71","memberName":"UNBALANCED","nodeType":"MemberAccess","referencedDeclaration":4803,"src":"20703:27:71","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},{"arguments":[{"id":26793,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"20757:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":26792,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38906,"src":"20744:12:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":26794,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20744:18:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":26795,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26643,"src":"20776:14:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"arguments":[{"expression":{"expression":{"id":26799,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26636,"src":"20818:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":26800,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20827:6:71","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":4712,"src":"20818:15:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":26801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20834:6:71","memberName":"length","nodeType":"MemberAccess","src":"20818:22:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":26798,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"20804:13:71","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":26796,"name":"uint256","nodeType":"ElementaryTypeName","src":"20808:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26797,"nodeType":"ArrayTypeName","src":"20808:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":26802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20804:37:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":26787,"name":"LiquidityAdded","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3872,"src":"20641:14:71","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_enum$_AddLiquidityKind_$4807_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,address,enum AddLiquidityKind,uint256,uint256[] memory,uint256[] memory)"}},"id":26803,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20641:210:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26804,"nodeType":"EmitStatement","src":"20636:215:71"},{"eventCall":{"arguments":[{"id":26806,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26631,"src":"20940:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":26805,"name":"PoolInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3811,"src":"20924:15:71","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":26807,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20924:21:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":26808,"nodeType":"EmitStatement","src":"20919:26:71"}]},"id":26810,"implemented":true,"kind":"function","modifiers":[],"name":"_initialize","nameLocation":"18475:11:71","nodeType":"FunctionDefinition","parameters":{"id":26649,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26631,"mutability":"mutable","name":"pool","nameLocation":"18504:4:71","nodeType":"VariableDeclaration","scope":26810,"src":"18496:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26630,"name":"address","nodeType":"ElementaryTypeName","src":"18496:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26633,"mutability":"mutable","name":"to","nameLocation":"18526:2:71","nodeType":"VariableDeclaration","scope":26810,"src":"18518:10:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26632,"name":"address","nodeType":"ElementaryTypeName","src":"18518:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":26636,"mutability":"mutable","name":"poolData","nameLocation":"18554:8:71","nodeType":"VariableDeclaration","scope":26810,"src":"18538:24:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":26635,"nodeType":"UserDefinedTypeName","pathNode":{"id":26634,"name":"PoolData","nameLocations":["18538:8:71"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"18538:8:71"},"referencedDeclaration":4729,"src":"18538:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":26640,"mutability":"mutable","name":"tokens","nameLocation":"18588:6:71","nodeType":"VariableDeclaration","scope":26810,"src":"18572:22:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":26638,"nodeType":"UserDefinedTypeName","pathNode":{"id":26637,"name":"IERC20","nameLocations":["18572:6:71"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"18572:6:71"},"referencedDeclaration":40109,"src":"18572:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":26639,"nodeType":"ArrayTypeName","src":"18572:8:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":26643,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"18621:14:71","nodeType":"VariableDeclaration","scope":26810,"src":"18604:31:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":26641,"name":"uint256","nodeType":"ElementaryTypeName","src":"18604:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26642,"nodeType":"ArrayTypeName","src":"18604:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":26646,"mutability":"mutable","name":"exactAmountsInScaled18","nameLocation":"18662:22:71","nodeType":"VariableDeclaration","scope":26810,"src":"18645:39:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":26644,"name":"uint256","nodeType":"ElementaryTypeName","src":"18645:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26645,"nodeType":"ArrayTypeName","src":"18645:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":26648,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"18702:15:71","nodeType":"VariableDeclaration","scope":26810,"src":"18694:23:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26647,"name":"uint256","nodeType":"ElementaryTypeName","src":"18694:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18486:237:71"},"returnParameters":{"id":26652,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26651,"mutability":"mutable","name":"bptAmountOut","nameLocation":"18750:12:71","nodeType":"VariableDeclaration","scope":26810,"src":"18742:20:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26650,"name":"uint256","nodeType":"ElementaryTypeName","src":"18742:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18741:22:71"},"scope":28100,"src":"18466:2486:71","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[4135],"body":{"id":26827,"nodeType":"Block","src":"21349:48:71","statements":[{"expression":{"arguments":[{"id":26824,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26813,"src":"21385:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":26823,"name":"_isPoolInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25203,"src":"21366:18:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":26825,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21366:24:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":26822,"id":26826,"nodeType":"Return","src":"21359:31:71"}]},"documentation":{"id":26811,"nodeType":"StructuredDocumentation","src":"21182:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"532cec7c","id":26828,"implemented":true,"kind":"function","modifiers":[{"id":26816,"kind":"modifierInvocation","modifierName":{"id":26815,"name":"onlyVaultDelegateCall","nameLocations":["21287:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"21287:21:71"},"nodeType":"ModifierInvocation","src":"21287:21:71"},{"arguments":[{"id":26818,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26813,"src":"21328:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":26819,"kind":"modifierInvocation","modifierName":{"id":26817,"name":"withRegisteredPool","nameLocations":["21309:18:71"],"nodeType":"IdentifierPath","referencedDeclaration":25120,"src":"21309:18:71"},"nodeType":"ModifierInvocation","src":"21309:24:71"}],"name":"isPoolInitialized","nameLocation":"21227:17:71","nodeType":"FunctionDefinition","parameters":{"id":26814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26813,"mutability":"mutable","name":"pool","nameLocation":"21262:4:71","nodeType":"VariableDeclaration","scope":26828,"src":"21254:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26812,"name":"address","nodeType":"ElementaryTypeName","src":"21254:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21244:28:71"},"returnParameters":{"id":26822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26821,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26828,"src":"21343:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":26820,"name":"bool","nodeType":"ElementaryTypeName","src":"21343:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"21342:6:71"},"scope":28100,"src":"21218:179:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4145],"body":{"id":26847,"nodeType":"Block","src":"21584:41:71","statements":[{"expression":{"baseExpression":{"id":26843,"name":"_poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28242,"src":"21601:11:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_contract$_IERC20_$40109_$dyn_storage_$","typeString":"mapping(address => contract IERC20[] storage ref)"}},"id":26845,"indexExpression":{"id":26844,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26831,"src":"21613:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21601:17:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"functionReturnParameters":26842,"id":26846,"nodeType":"Return","src":"21594:24:71"}]},"documentation":{"id":26829,"nodeType":"StructuredDocumentation","src":"21403:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"ca4f2803","id":26848,"implemented":true,"kind":"function","modifiers":[{"id":26834,"kind":"modifierInvocation","modifierName":{"id":26833,"name":"onlyVaultDelegateCall","nameLocations":["21504:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"21504:21:71"},"nodeType":"ModifierInvocation","src":"21504:21:71"},{"arguments":[{"id":26836,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26831,"src":"21545:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":26837,"kind":"modifierInvocation","modifierName":{"id":26835,"name":"withRegisteredPool","nameLocations":["21526:18:71"],"nodeType":"IdentifierPath","referencedDeclaration":25120,"src":"21526:18:71"},"nodeType":"ModifierInvocation","src":"21526:24:71"}],"name":"getPoolTokens","nameLocation":"21448:13:71","nodeType":"FunctionDefinition","parameters":{"id":26832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26831,"mutability":"mutable","name":"pool","nameLocation":"21479:4:71","nodeType":"VariableDeclaration","scope":26848,"src":"21471:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26830,"name":"address","nodeType":"ElementaryTypeName","src":"21471:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21461:28:71"},"returnParameters":{"id":26842,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26841,"mutability":"mutable","name":"tokens","nameLocation":"21576:6:71","nodeType":"VariableDeclaration","scope":26848,"src":"21560:22:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":26839,"nodeType":"UserDefinedTypeName","pathNode":{"id":26838,"name":"IERC20","nameLocations":["21560:6:71"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"21560:6:71"},"referencedDeclaration":40109,"src":"21560:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":26840,"nodeType":"ArrayTypeName","src":"21560:8:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"21559:24:71"},"scope":28100,"src":"21439:186:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4157],"body":{"id":26934,"nodeType":"Block","src":"21905:589:71","statements":[{"assignments":[26867],"declarations":[{"constant":false,"id":26867,"mutability":"mutable","name":"poolConfig","nameLocation":"22015:10:71","nodeType":"VariableDeclaration","scope":26934,"src":"22000:25:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":26866,"nodeType":"UserDefinedTypeName","pathNode":{"id":26865,"name":"PoolConfigBits","nameLocations":["22000:14:71"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"22000:14:71"},"referencedDeclaration":4582,"src":"22000:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"id":26871,"initialValue":{"baseExpression":{"id":26868,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"22028:15:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":26870,"indexExpression":{"id":26869,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26851,"src":"22044:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22028:21:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"VariableDeclarationStatement","src":"22000:49:71"},{"assignments":[26876],"declarations":[{"constant":false,"id":26876,"mutability":"mutable","name":"tokens","nameLocation":"22076:6:71","nodeType":"VariableDeclaration","scope":26934,"src":"22060:22:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":26874,"nodeType":"UserDefinedTypeName","pathNode":{"id":26873,"name":"IERC20","nameLocations":["22060:6:71"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"22060:6:71"},"referencedDeclaration":40109,"src":"22060:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":26875,"nodeType":"ArrayTypeName","src":"22060:8:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"id":26880,"initialValue":{"baseExpression":{"id":26877,"name":"_poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28242,"src":"22085:11:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_contract$_IERC20_$40109_$dyn_storage_$","typeString":"mapping(address => contract IERC20[] storage ref)"}},"id":26879,"indexExpression":{"id":26878,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26851,"src":"22097:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22085:17:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"22060:42:71"},{"assignments":[26882],"declarations":[{"constant":false,"id":26882,"mutability":"mutable","name":"numTokens","nameLocation":"22120:9:71","nodeType":"VariableDeclaration","scope":26934,"src":"22112:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26881,"name":"uint256","nodeType":"ElementaryTypeName","src":"22112:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26885,"initialValue":{"expression":{"id":26883,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26876,"src":"22132:6:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":26884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22139:6:71","memberName":"length","nodeType":"MemberAccess","src":"22132:13:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"22112:33:71"},{"expression":{"id":26892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26886,"name":"decimalScalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26860,"src":"22155:21:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":26889,"name":"poolConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26867,"src":"22218:10:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},{"id":26890,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26882,"src":"22230:9:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":26887,"name":"PoolConfigLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30441,"src":"22179:13:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigLib_$30441_$","typeString":"type(library PoolConfigLib)"}},"id":26888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22193:24:71","memberName":"getDecimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":30315,"src":"22179:38:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (PoolConfigBits,uint256) pure returns (uint256[] memory)"}},"id":26891,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22179:61:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"22155:85:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":26893,"nodeType":"ExpressionStatement","src":"22155:85:71"},{"expression":{"id":26900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26894,"name":"tokenRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26863,"src":"22250:10:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":26898,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26882,"src":"22277:9:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":26897,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"22263:13:71","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":26895,"name":"uint256","nodeType":"ElementaryTypeName","src":"22267:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26896,"nodeType":"ArrayTypeName","src":"22267:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":26899,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22263:24:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"22250:37:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":26901,"nodeType":"ExpressionStatement","src":"22250:37:71"},{"body":{"id":26932,"nodeType":"Block","src":"22338:150:71","statements":[{"assignments":[26914],"declarations":[{"constant":false,"id":26914,"mutability":"mutable","name":"tokenInfo","nameLocation":"22369:9:71","nodeType":"VariableDeclaration","scope":26932,"src":"22352:26:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_memory_ptr","typeString":"struct TokenInfo"},"typeName":{"id":26913,"nodeType":"UserDefinedTypeName","pathNode":{"id":26912,"name":"TokenInfo","nameLocations":["22352:9:71"],"nodeType":"IdentifierPath","referencedDeclaration":4704,"src":"22352:9:71"},"referencedDeclaration":4704,"src":"22352:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_storage_ptr","typeString":"struct TokenInfo"}},"visibility":"internal"}],"id":26922,"initialValue":{"baseExpression":{"baseExpression":{"id":26915,"name":"_poolTokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28250,"src":"22381:14:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_struct$_TokenInfo_$4704_storage_$_$","typeString":"mapping(address => mapping(contract IERC20 => struct TokenInfo storage ref))"}},"id":26917,"indexExpression":{"id":26916,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26851,"src":"22396:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22381:20:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_struct$_TokenInfo_$4704_storage_$","typeString":"mapping(contract IERC20 => struct TokenInfo storage ref)"}},"id":26921,"indexExpression":{"baseExpression":{"id":26918,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26876,"src":"22402:6:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":26920,"indexExpression":{"id":26919,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26903,"src":"22409:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22402:9:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22381:31:71","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_storage","typeString":"struct TokenInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"22352:60:71"},{"expression":{"id":26930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":26923,"name":"tokenRates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26863,"src":"22426:10:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":26925,"indexExpression":{"id":26924,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26903,"src":"22437:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22426:13:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":26928,"name":"tokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26914,"src":"22467:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_memory_ptr","typeString":"struct TokenInfo memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_TokenInfo_$4704_memory_ptr","typeString":"struct TokenInfo memory"}],"expression":{"id":26926,"name":"PoolDataLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31031,"src":"22442:11:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolDataLib_$31031_$","typeString":"type(library PoolDataLib)"}},"id":26927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22454:12:71","memberName":"getTokenRate","nodeType":"MemberAccess","referencedDeclaration":30916,"src":"22442:24:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_TokenInfo_$4704_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct TokenInfo memory) view returns (uint256)"}},"id":26929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22442:35:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22426:51:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26931,"nodeType":"ExpressionStatement","src":"22426:51:71"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":26908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":26906,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26903,"src":"22318:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":26907,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26882,"src":"22322:9:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22318:13:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":26933,"initializationExpression":{"assignments":[26903],"declarations":[{"constant":false,"id":26903,"mutability":"mutable","name":"i","nameLocation":"22311:1:71","nodeType":"VariableDeclaration","scope":26933,"src":"22303:9:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26902,"name":"uint256","nodeType":"ElementaryTypeName","src":"22303:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26905,"initialValue":{"hexValue":"30","id":26904,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22315:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"22303:13:71"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":26910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"22333:3:71","subExpression":{"id":26909,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26903,"src":"22335:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26911,"nodeType":"ExpressionStatement","src":"22333:3:71"},"nodeType":"ForStatement","src":"22298:190:71"}]},"documentation":{"id":26849,"nodeType":"StructuredDocumentation","src":"21631:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"7e361bde","id":26935,"implemented":true,"kind":"function","modifiers":[{"id":26854,"kind":"modifierInvocation","modifierName":{"id":26853,"name":"onlyVaultDelegateCall","nameLocations":["21760:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"21760:21:71"},"nodeType":"ModifierInvocation","src":"21760:21:71"},{"arguments":[{"id":26856,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26851,"src":"21809:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":26857,"kind":"modifierInvocation","modifierName":{"id":26855,"name":"withRegisteredPool","nameLocations":["21790:18:71"],"nodeType":"IdentifierPath","referencedDeclaration":25120,"src":"21790:18:71"},"nodeType":"ModifierInvocation","src":"21790:24:71"}],"name":"getPoolTokenRates","nameLocation":"21676:17:71","nodeType":"FunctionDefinition","parameters":{"id":26852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26851,"mutability":"mutable","name":"pool","nameLocation":"21711:4:71","nodeType":"VariableDeclaration","scope":26935,"src":"21703:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26850,"name":"address","nodeType":"ElementaryTypeName","src":"21703:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"21693:28:71"},"returnParameters":{"id":26864,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26860,"mutability":"mutable","name":"decimalScalingFactors","nameLocation":"21849:21:71","nodeType":"VariableDeclaration","scope":26935,"src":"21832:38:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":26858,"name":"uint256","nodeType":"ElementaryTypeName","src":"21832:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26859,"nodeType":"ArrayTypeName","src":"21832:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":26863,"mutability":"mutable","name":"tokenRates","nameLocation":"21889:10:71","nodeType":"VariableDeclaration","scope":26935,"src":"21872:27:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":26861,"name":"uint256","nodeType":"ElementaryTypeName","src":"21872:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26862,"nodeType":"ArrayTypeName","src":"21872:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"21831:69:71"},"scope":28100,"src":"21667:827:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4166],"body":{"id":26955,"nodeType":"Block","src":"22673:64:71","statements":[{"expression":{"arguments":[{"id":26950,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26938,"src":"22704:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":26951,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"22710:8:71","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":26952,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"22719:10:71","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":4731,"src":"22710:19:71","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"id":26949,"name":"_loadPoolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25336,"src":"22690:13:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_Rounding_$4732_$returns$_t_struct$_PoolData_$4729_memory_ptr_$","typeString":"function (address,enum Rounding) view returns (struct PoolData memory)"}},"id":26953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22690:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"functionReturnParameters":26948,"id":26954,"nodeType":"Return","src":"22683:47:71"}]},"documentation":{"id":26936,"nodeType":"StructuredDocumentation","src":"22500:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"13d21cdf","id":26956,"implemented":true,"kind":"function","modifiers":[{"id":26941,"kind":"modifierInvocation","modifierName":{"id":26940,"name":"onlyVaultDelegateCall","nameLocations":["22599:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"22599:21:71"},"nodeType":"ModifierInvocation","src":"22599:21:71"},{"arguments":[{"id":26943,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26938,"src":"22641:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":26944,"kind":"modifierInvocation","modifierName":{"id":26942,"name":"withInitializedPool","nameLocations":["22621:19:71"],"nodeType":"IdentifierPath","referencedDeclaration":25131,"src":"22621:19:71"},"nodeType":"ModifierInvocation","src":"22621:25:71"}],"name":"getPoolData","nameLocation":"22545:11:71","nodeType":"FunctionDefinition","parameters":{"id":26939,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26938,"mutability":"mutable","name":"pool","nameLocation":"22574:4:71","nodeType":"VariableDeclaration","scope":26956,"src":"22566:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26937,"name":"address","nodeType":"ElementaryTypeName","src":"22566:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"22556:28:71"},"returnParameters":{"id":26948,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26947,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":26956,"src":"22656:15:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":26946,"nodeType":"UserDefinedTypeName","pathNode":{"id":26945,"name":"PoolData","nameLocations":["22656:8:71"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"22656:8:71"},"referencedDeclaration":4729,"src":"22656:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"22655:17:71"},"scope":28100,"src":"22536:201:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4186],"body":{"id":27071,"nodeType":"Block","src":"23132:764:71","statements":[{"assignments":[26984],"declarations":[{"constant":false,"id":26984,"mutability":"mutable","name":"poolTokenBalances","nameLocation":"23293:17:71","nodeType":"VariableDeclaration","scope":27071,"src":"23227:83:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"typeName":{"id":26983,"keyName":"tokenIndex","keyNameLocation":"23243:10:71","keyType":{"id":26981,"name":"uint256","nodeType":"ElementaryTypeName","src":"23235:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"23227:57:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"valueName":"packedTokenBalance","valueNameLocation":"23265:18:71","valueType":{"id":26982,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23257:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},"visibility":"internal"}],"id":26988,"initialValue":{"baseExpression":{"id":26985,"name":"_poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28256,"src":"23313:18:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"}},"id":26987,"indexExpression":{"id":26986,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26959,"src":"23332:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23313:24:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"nodeType":"VariableDeclarationStatement","src":"23227:110:71"},{"expression":{"id":26993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":26989,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26969,"src":"23347:6:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":26990,"name":"_poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28242,"src":"23356:11:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_contract$_IERC20_$40109_$dyn_storage_$","typeString":"mapping(address => contract IERC20[] storage ref)"}},"id":26992,"indexExpression":{"id":26991,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26959,"src":"23368:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23356:17:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"src":"23347:26:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":26994,"nodeType":"ExpressionStatement","src":"23347:26:71"},{"assignments":[26996],"declarations":[{"constant":false,"id":26996,"mutability":"mutable","name":"numTokens","nameLocation":"23391:9:71","nodeType":"VariableDeclaration","scope":27071,"src":"23383:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":26995,"name":"uint256","nodeType":"ElementaryTypeName","src":"23383:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":26999,"initialValue":{"expression":{"id":26997,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26969,"src":"23403:6:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":26998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23410:6:71","memberName":"length","nodeType":"MemberAccess","src":"23403:13:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"23383:33:71"},{"expression":{"id":27007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":27000,"name":"tokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26973,"src":"23426:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4704_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo memory[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":27005,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26996,"src":"23454:9:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27004,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"23438:15:71","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_TokenInfo_$4704_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct TokenInfo memory[] memory)"},"typeName":{"baseType":{"id":27002,"nodeType":"UserDefinedTypeName","pathNode":{"id":27001,"name":"TokenInfo","nameLocations":["23442:9:71"],"nodeType":"IdentifierPath","referencedDeclaration":4704,"src":"23442:9:71"},"referencedDeclaration":4704,"src":"23442:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_storage_ptr","typeString":"struct TokenInfo"}},"id":27003,"nodeType":"ArrayTypeName","src":"23442:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4704_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}}},"id":27006,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23438:26:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4704_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo memory[] memory"}},"src":"23426:38:71","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4704_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo memory[] memory"}},"id":27008,"nodeType":"ExpressionStatement","src":"23426:38:71"},{"expression":{"id":27015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":27009,"name":"balancesRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26976,"src":"23474:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":27013,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26996,"src":"23502:9:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27012,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"23488:13:71","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":27010,"name":"uint256","nodeType":"ElementaryTypeName","src":"23492:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27011,"nodeType":"ArrayTypeName","src":"23492:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":27014,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23488:24:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"23474:38:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":27016,"nodeType":"ExpressionStatement","src":"23474:38:71"},{"expression":{"id":27023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":27017,"name":"lastBalancesLiveScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26979,"src":"23522:24:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":27021,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26996,"src":"23563:9:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27020,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"23549:13:71","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":27018,"name":"uint256","nodeType":"ElementaryTypeName","src":"23553:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27019,"nodeType":"ArrayTypeName","src":"23553:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":27022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23549:24:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"23522:51:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":27024,"nodeType":"ExpressionStatement","src":"23522:51:71"},{"body":{"id":27069,"nodeType":"Block","src":"23624:266:71","statements":[{"assignments":[27036],"declarations":[{"constant":false,"id":27036,"mutability":"mutable","name":"packedBalance","nameLocation":"23646:13:71","nodeType":"VariableDeclaration","scope":27069,"src":"23638:21:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":27035,"name":"bytes32","nodeType":"ElementaryTypeName","src":"23638:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":27040,"initialValue":{"baseExpression":{"id":27037,"name":"poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26984,"src":"23662:17:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"id":27039,"indexExpression":{"id":27038,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27026,"src":"23680:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23662:20:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"23638:44:71"},{"expression":{"id":27051,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":27041,"name":"tokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26973,"src":"23696:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4704_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo memory[] memory"}},"id":27043,"indexExpression":{"id":27042,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27026,"src":"23706:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23696:12:71","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_memory_ptr","typeString":"struct TokenInfo memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"baseExpression":{"id":27044,"name":"_poolTokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28250,"src":"23711:14:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_struct$_TokenInfo_$4704_storage_$_$","typeString":"mapping(address => mapping(contract IERC20 => struct TokenInfo storage ref))"}},"id":27046,"indexExpression":{"id":27045,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26959,"src":"23726:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23711:20:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_struct$_TokenInfo_$4704_storage_$","typeString":"mapping(contract IERC20 => struct TokenInfo storage ref)"}},"id":27050,"indexExpression":{"baseExpression":{"id":27047,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26969,"src":"23732:6:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":27049,"indexExpression":{"id":27048,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27026,"src":"23739:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23732:9:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23711:31:71","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_storage","typeString":"struct TokenInfo storage ref"}},"src":"23696:46:71","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_memory_ptr","typeString":"struct TokenInfo memory"}},"id":27052,"nodeType":"ExpressionStatement","src":"23696:46:71"},{"expression":{"id":27059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":27053,"name":"balancesRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26976,"src":"23756:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":27055,"indexExpression":{"id":27054,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27026,"src":"23768:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23756:14:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27056,"name":"packedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27036,"src":"23773:13:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":27057,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23787:13:71","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":6222,"src":"23773:27:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":27058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23773:29:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23756:46:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27060,"nodeType":"ExpressionStatement","src":"23756:46:71"},{"expression":{"id":27067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":27061,"name":"lastBalancesLiveScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26979,"src":"23816:24:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":27063,"indexExpression":{"id":27062,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27026,"src":"23841:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"23816:27:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27064,"name":"packedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27036,"src":"23846:13:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":27065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23860:17:71","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":6239,"src":"23846:31:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":27066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23846:33:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23816:63:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27068,"nodeType":"ExpressionStatement","src":"23816:63:71"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27029,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27026,"src":"23604:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":27030,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26996,"src":"23608:9:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23604:13:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27070,"initializationExpression":{"assignments":[27026],"declarations":[{"constant":false,"id":27026,"mutability":"mutable","name":"i","nameLocation":"23597:1:71","nodeType":"VariableDeclaration","scope":27070,"src":"23589:9:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27025,"name":"uint256","nodeType":"ElementaryTypeName","src":"23589:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":27028,"initialValue":{"hexValue":"30","id":27027,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23601:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"23589:13:71"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":27033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"23619:3:71","subExpression":{"id":27032,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27026,"src":"23621:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27034,"nodeType":"ExpressionStatement","src":"23619:3:71"},"nodeType":"ForStatement","src":"23584:306:71"}]},"documentation":{"id":26957,"nodeType":"StructuredDocumentation","src":"22743:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"67e0e076","id":27072,"implemented":true,"kind":"function","modifiers":[{"id":26962,"kind":"modifierInvocation","modifierName":{"id":26961,"name":"onlyVaultDelegateCall","nameLocations":["22871:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"22871:21:71"},"nodeType":"ModifierInvocation","src":"22871:21:71"},{"arguments":[{"id":26964,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":26959,"src":"22920:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":26965,"kind":"modifierInvocation","modifierName":{"id":26963,"name":"withRegisteredPool","nameLocations":["22901:18:71"],"nodeType":"IdentifierPath","referencedDeclaration":25120,"src":"22901:18:71"},"nodeType":"ModifierInvocation","src":"22901:24:71"}],"name":"getPoolTokenInfo","nameLocation":"22788:16:71","nodeType":"FunctionDefinition","parameters":{"id":26960,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26959,"mutability":"mutable","name":"pool","nameLocation":"22822:4:71","nodeType":"VariableDeclaration","scope":27072,"src":"22814:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26958,"name":"address","nodeType":"ElementaryTypeName","src":"22814:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"22804:28:71"},"returnParameters":{"id":26980,"nodeType":"ParameterList","parameters":[{"constant":false,"id":26969,"mutability":"mutable","name":"tokens","nameLocation":"22972:6:71","nodeType":"VariableDeclaration","scope":27072,"src":"22956:22:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":26967,"nodeType":"UserDefinedTypeName","pathNode":{"id":26966,"name":"IERC20","nameLocations":["22956:6:71"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"22956:6:71"},"referencedDeclaration":40109,"src":"22956:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":26968,"nodeType":"ArrayTypeName","src":"22956:8:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":26973,"mutability":"mutable","name":"tokenInfo","nameLocation":"23011:9:71","nodeType":"VariableDeclaration","scope":27072,"src":"22992:28:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4704_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":26971,"nodeType":"UserDefinedTypeName","pathNode":{"id":26970,"name":"TokenInfo","nameLocations":["22992:9:71"],"nodeType":"IdentifierPath","referencedDeclaration":4704,"src":"22992:9:71"},"referencedDeclaration":4704,"src":"22992:9:71","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_storage_ptr","typeString":"struct TokenInfo"}},"id":26972,"nodeType":"ArrayTypeName","src":"22992:11:71","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4704_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"},{"constant":false,"id":26976,"mutability":"mutable","name":"balancesRaw","nameLocation":"23051:11:71","nodeType":"VariableDeclaration","scope":27072,"src":"23034:28:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":26974,"name":"uint256","nodeType":"ElementaryTypeName","src":"23034:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26975,"nodeType":"ArrayTypeName","src":"23034:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":26979,"mutability":"mutable","name":"lastBalancesLiveScaled18","nameLocation":"23093:24:71","nodeType":"VariableDeclaration","scope":27072,"src":"23076:41:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":26977,"name":"uint256","nodeType":"ElementaryTypeName","src":"23076:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":26978,"nodeType":"ArrayTypeName","src":"23076:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"22942:185:71"},"scope":28100,"src":"22779:1117:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4195],"body":{"id":27093,"nodeType":"Block","src":"24107:85:71","statements":[{"expression":{"expression":{"arguments":[{"id":27087,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27075,"src":"24138:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":27088,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"24144:8:71","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":27089,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"24153:10:71","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":4731,"src":"24144:19:71","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"id":27086,"name":"_loadPoolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25336,"src":"24124:13:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_Rounding_$4732_$returns$_t_struct$_PoolData_$4729_memory_ptr_$","typeString":"function (address,enum Rounding) view returns (struct PoolData memory)"}},"id":27090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24124:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":27091,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"24165:20:71","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":4722,"src":"24124:61:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":27085,"id":27092,"nodeType":"Return","src":"24117:68:71"}]},"documentation":{"id":27073,"nodeType":"StructuredDocumentation","src":"23902:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"535cfd8a","id":27094,"implemented":true,"kind":"function","modifiers":[{"id":27078,"kind":"modifierInvocation","modifierName":{"id":27077,"name":"onlyVaultDelegateCall","nameLocations":["24012:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"24012:21:71"},"nodeType":"ModifierInvocation","src":"24012:21:71"},{"arguments":[{"id":27080,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27075,"src":"24053:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":27081,"kind":"modifierInvocation","modifierName":{"id":27079,"name":"withRegisteredPool","nameLocations":["24034:18:71"],"nodeType":"IdentifierPath","referencedDeclaration":25120,"src":"24034:18:71"},"nodeType":"ModifierInvocation","src":"24034:24:71"}],"name":"getCurrentLiveBalances","nameLocation":"23947:22:71","nodeType":"FunctionDefinition","parameters":{"id":27076,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27075,"mutability":"mutable","name":"pool","nameLocation":"23987:4:71","nodeType":"VariableDeclaration","scope":27094,"src":"23979:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27074,"name":"address","nodeType":"ElementaryTypeName","src":"23979:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"23969:28:71"},"returnParameters":{"id":27085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27084,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"24085:20:71","nodeType":"VariableDeclaration","scope":27094,"src":"24068:37:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":27082,"name":"uint256","nodeType":"ElementaryTypeName","src":"24068:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27083,"nodeType":"ArrayTypeName","src":"24068:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"24067:39:71"},"scope":28100,"src":"23938:254:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4204],"body":{"id":27160,"nodeType":"Block","src":"24374:1258:71","statements":[{"assignments":[27110],"declarations":[{"constant":false,"id":27110,"mutability":"mutable","name":"config","nameLocation":"24399:6:71","nodeType":"VariableDeclaration","scope":27160,"src":"24384:21:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":27109,"nodeType":"UserDefinedTypeName","pathNode":{"id":27108,"name":"PoolConfigBits","nameLocations":["24384:14:71"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"24384:14:71"},"referencedDeclaration":4582,"src":"24384:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"id":27114,"initialValue":{"baseExpression":{"id":27111,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"24408:15:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":27113,"indexExpression":{"id":27112,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27097,"src":"24424:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24408:21:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"VariableDeclarationStatement","src":"24384:45:71"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27116,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27110,"src":"24506:6:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":27117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24513:16:71","memberName":"isPoolRegistered","nodeType":"MemberAccess","referencedDeclaration":29637,"src":"24506:23:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":27118,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24506:25:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27119,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27110,"src":"24568:6:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":27120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24575:17:71","memberName":"isPoolInitialized","nodeType":"MemberAccess","referencedDeclaration":29680,"src":"24568:24:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":27121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24568:26:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27122,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27110,"src":"24626:6:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":27123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24633:12:71","memberName":"isPoolPaused","nodeType":"MemberAccess","referencedDeclaration":29723,"src":"24626:19:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":27124,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24626:21:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27125,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27110,"src":"24687:6:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":27126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24694:20:71","memberName":"isPoolInRecoveryMode","nodeType":"MemberAccess","referencedDeclaration":29766,"src":"24687:27:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":27127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24687:29:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27128,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27110,"src":"24759:6:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":27129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24766:26:71","memberName":"getStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":30061,"src":"24759:33:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (uint256)"}},"id":27130,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24759:35:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27131,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27110,"src":"24840:6:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":27132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24847:29:71","memberName":"getAggregateSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":30122,"src":"24840:36:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (uint256)"}},"id":27133,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24840:38:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27134,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27110,"src":"24925:6:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":27135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24932:30:71","memberName":"getAggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":30183,"src":"24925:37:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (uint256)"}},"id":27136,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24925:39:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27137,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27110,"src":"25001:6:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":27138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25008:20:71","memberName":"getTokenDecimalDiffs","nodeType":"MemberAccess","referencedDeclaration":30246,"src":"25001:27:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_uint40_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (uint40)"}},"id":27139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25001:29:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27140,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27110,"src":"25068:6:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":27141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25075:21:71","memberName":"getPauseWindowEndTime","nodeType":"MemberAccess","referencedDeclaration":30365,"src":"25068:28:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_uint32_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (uint32)"}},"id":27142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25068:30:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"arguments":[{"id":27147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"25319:37:71","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27144,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27110,"src":"25320:6:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":27145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25327:27:71","memberName":"supportsUnbalancedLiquidity","nodeType":"MemberAccess","referencedDeclaration":29810,"src":"25320:34:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":27146,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25320:36:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27148,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27110,"src":"25404:6:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":27149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25411:26:71","memberName":"supportsAddLiquidityCustom","nodeType":"MemberAccess","referencedDeclaration":29872,"src":"25404:33:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":27150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25404:35:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27151,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27110,"src":"25490:6:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":27152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25497:29:71","memberName":"supportsRemoveLiquidityCustom","nodeType":"MemberAccess","referencedDeclaration":29934,"src":"25490:36:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":27153,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25490:38:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27154,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27110,"src":"25566:6:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":27155,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25573:16:71","memberName":"supportsDonation","nodeType":"MemberAccess","referencedDeclaration":29996,"src":"25566:23:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":27156,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25566:25:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":27143,"name":"LiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4580,"src":"25137:19:71","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_LiquidityManagement_$4580_storage_ptr_$","typeString":"type(struct LiquidityManagement storage pointer)"}},"id":27157,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["25291:26:71","25378:24:71","25461:27:71","25550:14:71"],"names":["disableUnbalancedLiquidity","enableAddLiquidityCustom","enableRemoveLiquidityCustom","enableDonation"],"nodeType":"FunctionCall","src":"25137:473:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint40","typeString":"uint40"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}],"id":27115,"name":"PoolConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4605,"src":"24459:10:71","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_PoolConfig_$4605_storage_ptr_$","typeString":"type(struct PoolConfig storage pointer)"}},"id":27158,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["24488:16:71","24549:17:71","24612:12:71","24665:20:71","24734:23:71","24812:26:71","24896:27:71","24982:17:71","25048:18:71","25116:19:71"],"names":["isPoolRegistered","isPoolInitialized","isPoolPaused","isPoolInRecoveryMode","staticSwapFeePercentage","aggregateSwapFeePercentage","aggregateYieldFeePercentage","tokenDecimalDiffs","pauseWindowEndTime","liquidityManagement"],"nodeType":"FunctionCall","src":"24459:1166:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig memory"}},"functionReturnParameters":27107,"id":27159,"nodeType":"Return","src":"24440:1185:71"}]},"documentation":{"id":27095,"nodeType":"StructuredDocumentation","src":"24198:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"f29486a1","id":27161,"implemented":true,"kind":"function","modifiers":[{"id":27100,"kind":"modifierInvocation","modifierName":{"id":27099,"name":"onlyVaultDelegateCall","nameLocations":["24299:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"24299:21:71"},"nodeType":"ModifierInvocation","src":"24299:21:71"},{"arguments":[{"id":27102,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27097,"src":"24340:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":27103,"kind":"modifierInvocation","modifierName":{"id":27101,"name":"withRegisteredPool","nameLocations":["24321:18:71"],"nodeType":"IdentifierPath","referencedDeclaration":25120,"src":"24321:18:71"},"nodeType":"ModifierInvocation","src":"24321:24:71"}],"name":"getPoolConfig","nameLocation":"24243:13:71","nodeType":"FunctionDefinition","parameters":{"id":27098,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27097,"mutability":"mutable","name":"pool","nameLocation":"24274:4:71","nodeType":"VariableDeclaration","scope":27161,"src":"24266:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27096,"name":"address","nodeType":"ElementaryTypeName","src":"24266:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"24256:28:71"},"returnParameters":{"id":27107,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27106,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27161,"src":"24355:17:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig"},"typeName":{"id":27105,"nodeType":"UserDefinedTypeName","pathNode":{"id":27104,"name":"PoolConfig","nameLocations":["24355:10:71"],"nodeType":"IdentifierPath","referencedDeclaration":4605,"src":"24355:10:71"},"referencedDeclaration":4605,"src":"24355:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_storage_ptr","typeString":"struct PoolConfig"}},"visibility":"internal"}],"src":"24354:19:71"},"scope":28100,"src":"24234:1398:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4213],"body":{"id":27184,"nodeType":"Block","src":"25816:82:71","statements":[{"expression":{"arguments":[{"baseExpression":{"id":27179,"name":"_hooksContracts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28236,"src":"25869:15:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IHooks_$2026_$","typeString":"mapping(address => contract IHooks)"}},"id":27181,"indexExpression":{"id":27180,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27164,"src":"25885:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25869:21:71","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}],"expression":{"baseExpression":{"id":27175,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"25833:15:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":27177,"indexExpression":{"id":27176,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27164,"src":"25849:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25833:21:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":27178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25855:13:71","memberName":"toHooksConfig","nodeType":"MemberAccess","referencedDeclaration":28883,"src":"25833:35:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_contract$_IHooks_$2026_$returns$_t_struct$_HooksConfig_$4651_memory_ptr_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,contract IHooks) pure returns (struct HooksConfig memory)"}},"id":27182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25833:58:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4651_memory_ptr","typeString":"struct HooksConfig memory"}},"functionReturnParameters":27174,"id":27183,"nodeType":"Return","src":"25826:65:71"}]},"documentation":{"id":27162,"nodeType":"StructuredDocumentation","src":"25638:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"ce8630d4","id":27185,"implemented":true,"kind":"function","modifiers":[{"id":27167,"kind":"modifierInvocation","modifierName":{"id":27166,"name":"onlyVaultDelegateCall","nameLocations":["25740:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"25740:21:71"},"nodeType":"ModifierInvocation","src":"25740:21:71"},{"arguments":[{"id":27169,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27164,"src":"25781:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":27170,"kind":"modifierInvocation","modifierName":{"id":27168,"name":"withRegisteredPool","nameLocations":["25762:18:71"],"nodeType":"IdentifierPath","referencedDeclaration":25120,"src":"25762:18:71"},"nodeType":"ModifierInvocation","src":"25762:24:71"}],"name":"getHooksConfig","nameLocation":"25683:14:71","nodeType":"FunctionDefinition","parameters":{"id":27165,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27164,"mutability":"mutable","name":"pool","nameLocation":"25715:4:71","nodeType":"VariableDeclaration","scope":27185,"src":"25707:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27163,"name":"address","nodeType":"ElementaryTypeName","src":"25707:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"25697:28:71"},"returnParameters":{"id":27174,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27173,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27185,"src":"25796:18:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4651_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":27172,"nodeType":"UserDefinedTypeName","pathNode":{"id":27171,"name":"HooksConfig","nameLocations":["25796:11:71"],"nodeType":"IdentifierPath","referencedDeclaration":4651,"src":"25796:11:71"},"referencedDeclaration":4651,"src":"25796:11:71","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4651_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"}],"src":"25795:20:71"},"scope":28100,"src":"25674:224:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4221],"body":{"id":27226,"nodeType":"Block","src":"26073:253:71","statements":[{"assignments":[27200],"declarations":[{"constant":false,"id":27200,"mutability":"mutable","name":"poolData","nameLocation":"26099:8:71","nodeType":"VariableDeclaration","scope":27226,"src":"26083:24:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":27199,"nodeType":"UserDefinedTypeName","pathNode":{"id":27198,"name":"PoolData","nameLocations":["26083:8:71"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"26083:8:71"},"referencedDeclaration":4729,"src":"26083:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"id":27206,"initialValue":{"arguments":[{"id":27202,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27188,"src":"26124:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":27203,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"26130:8:71","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":27204,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"26139:10:71","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":4731,"src":"26130:19:71","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"id":27201,"name":"_loadPoolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25336,"src":"26110:13:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_Rounding_$4732_$returns$_t_struct$_PoolData_$4729_memory_ptr_$","typeString":"function (address,enum Rounding) view returns (struct PoolData memory)"}},"id":27205,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26110:40:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"nodeType":"VariableDeclarationStatement","src":"26083:67:71"},{"assignments":[27208],"declarations":[{"constant":false,"id":27208,"mutability":"mutable","name":"invariant","nameLocation":"26168:9:71","nodeType":"VariableDeclaration","scope":27226,"src":"26160:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27207,"name":"uint256","nodeType":"ElementaryTypeName","src":"26160:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":27218,"initialValue":{"arguments":[{"expression":{"id":27213,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27200,"src":"26213:8:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":27214,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26222:20:71","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":4722,"src":"26213:29:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":27215,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"26244:8:71","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":27216,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"26253:10:71","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":4731,"src":"26244:19:71","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"expression":{"arguments":[{"id":27210,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27188,"src":"26190:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":27209,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1505,"src":"26180:9:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasePool_$1505_$","typeString":"type(contract IBasePool)"}},"id":27211,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26180:15:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}},"id":27212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26196:16:71","memberName":"computeInvariant","nodeType":"MemberAccess","referencedDeclaration":1482,"src":"26180:32:71","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_enum$_Rounding_$4732_$returns$_t_uint256_$","typeString":"function (uint256[] memory,enum Rounding) view external returns (uint256)"}},"id":27217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26180:84:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"26160:104:71"},{"expression":{"arguments":[{"arguments":[{"id":27222,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27188,"src":"26313:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":27221,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38906,"src":"26300:12:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":27223,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26300:18:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":27219,"name":"invariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27208,"src":"26282:9:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26292:7:71","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":7990,"src":"26282:17:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":27224,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26282:37:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":27197,"id":27225,"nodeType":"Return","src":"26275:44:71"}]},"documentation":{"id":27186,"nodeType":"StructuredDocumentation","src":"25904:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"4f037ee7","id":27227,"implemented":true,"kind":"function","modifiers":[{"id":27191,"kind":"modifierInvocation","modifierName":{"id":27190,"name":"onlyVaultDelegateCall","nameLocations":["26002:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"26002:21:71"},"nodeType":"ModifierInvocation","src":"26002:21:71"},{"arguments":[{"id":27193,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27188,"src":"26044:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":27194,"kind":"modifierInvocation","modifierName":{"id":27192,"name":"withInitializedPool","nameLocations":["26024:19:71"],"nodeType":"IdentifierPath","referencedDeclaration":25131,"src":"26024:19:71"},"nodeType":"ModifierInvocation","src":"26024:25:71"}],"name":"getBptRate","nameLocation":"25949:10:71","nodeType":"FunctionDefinition","parameters":{"id":27189,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27188,"mutability":"mutable","name":"pool","nameLocation":"25977:4:71","nodeType":"VariableDeclaration","scope":27227,"src":"25969:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27187,"name":"address","nodeType":"ElementaryTypeName","src":"25969:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"25959:28:71"},"returnParameters":{"id":27197,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27196,"mutability":"mutable","name":"rate","nameLocation":"26067:4:71","nodeType":"VariableDeclaration","scope":27227,"src":"26059:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27195,"name":"uint256","nodeType":"ElementaryTypeName","src":"26059:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26058:14:71"},"scope":28100,"src":"25940:386:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4229],"body":{"id":27241,"nodeType":"Block","src":"26683:43:71","statements":[{"expression":{"arguments":[{"id":27238,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27230,"src":"26713:5:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":27237,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38906,"src":"26700:12:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":27239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26700:19:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":27236,"id":27240,"nodeType":"Return","src":"26693:26:71"}]},"documentation":{"id":27228,"nodeType":"StructuredDocumentation","src":"26557:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"e4dc2aa4","id":27242,"implemented":true,"kind":"function","modifiers":[{"id":27233,"kind":"modifierInvocation","modifierName":{"id":27232,"name":"onlyVaultDelegateCall","nameLocations":["26643:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"26643:21:71"},"nodeType":"ModifierInvocation","src":"26643:21:71"}],"name":"totalSupply","nameLocation":"26602:11:71","nodeType":"FunctionDefinition","parameters":{"id":27231,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27230,"mutability":"mutable","name":"token","nameLocation":"26622:5:71","nodeType":"VariableDeclaration","scope":27242,"src":"26614:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27229,"name":"address","nodeType":"ElementaryTypeName","src":"26614:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"26613:15:71"},"returnParameters":{"id":27236,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27235,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27242,"src":"26674:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27234,"name":"uint256","nodeType":"ElementaryTypeName","src":"26674:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26673:9:71"},"scope":28100,"src":"26593:133:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4239],"body":{"id":27259,"nodeType":"Block","src":"26873:50:71","statements":[{"expression":{"arguments":[{"id":27255,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27245,"src":"26901:5:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27256,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27247,"src":"26908:7:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":27254,"name":"_balanceOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38922,"src":"26890:10:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view returns (uint256)"}},"id":27257,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26890:26:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":27253,"id":27258,"nodeType":"Return","src":"26883:33:71"}]},"documentation":{"id":27243,"nodeType":"StructuredDocumentation","src":"26732:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"f7888aec","id":27260,"implemented":true,"kind":"function","modifiers":[{"id":27250,"kind":"modifierInvocation","modifierName":{"id":27249,"name":"onlyVaultDelegateCall","nameLocations":["26833:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"26833:21:71"},"nodeType":"ModifierInvocation","src":"26833:21:71"}],"name":"balanceOf","nameLocation":"26777:9:71","nodeType":"FunctionDefinition","parameters":{"id":27248,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27245,"mutability":"mutable","name":"token","nameLocation":"26795:5:71","nodeType":"VariableDeclaration","scope":27260,"src":"26787:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27244,"name":"address","nodeType":"ElementaryTypeName","src":"26787:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27247,"mutability":"mutable","name":"account","nameLocation":"26810:7:71","nodeType":"VariableDeclaration","scope":27260,"src":"26802:15:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27246,"name":"address","nodeType":"ElementaryTypeName","src":"26802:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"26786:32:71"},"returnParameters":{"id":27253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27252,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27260,"src":"26864:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27251,"name":"uint256","nodeType":"ElementaryTypeName","src":"26864:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26863:9:71"},"scope":28100,"src":"26768:155:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4251],"body":{"id":27280,"nodeType":"Block","src":"27115:57:71","statements":[{"expression":{"arguments":[{"id":27275,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27263,"src":"27143:5:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27276,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27265,"src":"27150:5:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27277,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27267,"src":"27157:7:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":27274,"name":"_allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38954,"src":"27132:10:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address,address) view returns (uint256)"}},"id":27278,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27132:33:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":27273,"id":27279,"nodeType":"Return","src":"27125:40:71"}]},"documentation":{"id":27261,"nodeType":"StructuredDocumentation","src":"26929:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"927da105","id":27281,"implemented":true,"kind":"function","modifiers":[{"id":27270,"kind":"modifierInvocation","modifierName":{"id":27269,"name":"onlyVaultDelegateCall","nameLocations":["27075:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"27075:21:71"},"nodeType":"ModifierInvocation","src":"27075:21:71"}],"name":"allowance","nameLocation":"26974:9:71","nodeType":"FunctionDefinition","parameters":{"id":27268,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27263,"mutability":"mutable","name":"token","nameLocation":"27001:5:71","nodeType":"VariableDeclaration","scope":27281,"src":"26993:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27262,"name":"address","nodeType":"ElementaryTypeName","src":"26993:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27265,"mutability":"mutable","name":"owner","nameLocation":"27024:5:71","nodeType":"VariableDeclaration","scope":27281,"src":"27016:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27264,"name":"address","nodeType":"ElementaryTypeName","src":"27016:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27267,"mutability":"mutable","name":"spender","nameLocation":"27047:7:71","nodeType":"VariableDeclaration","scope":27281,"src":"27039:15:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27266,"name":"address","nodeType":"ElementaryTypeName","src":"27039:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"26983:77:71"},"returnParameters":{"id":27273,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27272,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27281,"src":"27106:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27271,"name":"uint256","nodeType":"ElementaryTypeName","src":"27106:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27105:9:71"},"scope":28100,"src":"26965:207:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4263],"body":{"id":27305,"nodeType":"Block","src":"27325:82:71","statements":[{"expression":{"arguments":[{"expression":{"id":27296,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"27344:3:71","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":27297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27348:6:71","memberName":"sender","nodeType":"MemberAccess","src":"27344:10:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27298,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27284,"src":"27356:5:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27299,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27286,"src":"27363:7:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27300,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27288,"src":"27372:6:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27295,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39378,"src":"27335:8:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":27301,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27335:44:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27302,"nodeType":"ExpressionStatement","src":"27335:44:71"},{"expression":{"hexValue":"74727565","id":27303,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"27396:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":27294,"id":27304,"nodeType":"Return","src":"27389:11:71"}]},"documentation":{"id":27282,"nodeType":"StructuredDocumentation","src":"27178:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"e1f21c67","id":27306,"implemented":true,"kind":"function","modifiers":[{"id":27291,"kind":"modifierInvocation","modifierName":{"id":27290,"name":"onlyVaultDelegateCall","nameLocations":["27288:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"27288:21:71"},"nodeType":"ModifierInvocation","src":"27288:21:71"}],"name":"approve","nameLocation":"27223:7:71","nodeType":"FunctionDefinition","parameters":{"id":27289,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27284,"mutability":"mutable","name":"owner","nameLocation":"27239:5:71","nodeType":"VariableDeclaration","scope":27306,"src":"27231:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27283,"name":"address","nodeType":"ElementaryTypeName","src":"27231:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27286,"mutability":"mutable","name":"spender","nameLocation":"27254:7:71","nodeType":"VariableDeclaration","scope":27306,"src":"27246:15:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27285,"name":"address","nodeType":"ElementaryTypeName","src":"27246:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27288,"mutability":"mutable","name":"amount","nameLocation":"27271:6:71","nodeType":"VariableDeclaration","scope":27306,"src":"27263:14:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27287,"name":"uint256","nodeType":"ElementaryTypeName","src":"27263:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27230:48:71"},"returnParameters":{"id":27294,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27293,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27306,"src":"27319:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":27292,"name":"bool","nodeType":"ElementaryTypeName","src":"27319:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"27318:6:71"},"scope":28100,"src":"27214:193:71","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[4271],"body":{"id":27323,"nodeType":"Block","src":"27782:43:71","statements":[{"expression":{"arguments":[{"id":27320,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27309,"src":"27813:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":27319,"name":"_isPoolPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25047,"src":"27799:13:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":27321,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27799:19:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":27318,"id":27322,"nodeType":"Return","src":"27792:26:71"}]},"documentation":{"id":27307,"nodeType":"StructuredDocumentation","src":"27634:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"6c9bc732","id":27324,"implemented":true,"kind":"function","modifiers":[{"id":27312,"kind":"modifierInvocation","modifierName":{"id":27311,"name":"onlyVaultDelegateCall","nameLocations":["27720:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"27720:21:71"},"nodeType":"ModifierInvocation","src":"27720:21:71"},{"arguments":[{"id":27314,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27309,"src":"27761:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":27315,"kind":"modifierInvocation","modifierName":{"id":27313,"name":"withRegisteredPool","nameLocations":["27742:18:71"],"nodeType":"IdentifierPath","referencedDeclaration":25120,"src":"27742:18:71"},"nodeType":"ModifierInvocation","src":"27742:24:71"}],"name":"isPoolPaused","nameLocation":"27679:12:71","nodeType":"FunctionDefinition","parameters":{"id":27310,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27309,"mutability":"mutable","name":"pool","nameLocation":"27700:4:71","nodeType":"VariableDeclaration","scope":27324,"src":"27692:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27308,"name":"address","nodeType":"ElementaryTypeName","src":"27692:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"27691:14:71"},"returnParameters":{"id":27318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27317,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27324,"src":"27776:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":27316,"name":"bool","nodeType":"ElementaryTypeName","src":"27776:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"27775:6:71"},"scope":28100,"src":"27670:155:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4285],"body":{"id":27362,"nodeType":"Block","src":"28024:276:71","statements":[{"assignments":[27344,27346],"declarations":[{"constant":false,"id":27344,"mutability":"mutable","name":"paused","nameLocation":"28040:6:71","nodeType":"VariableDeclaration","scope":27362,"src":"28035:11:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":27343,"name":"bool","nodeType":"ElementaryTypeName","src":"28035:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":27346,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"28055:18:71","nodeType":"VariableDeclaration","scope":27362,"src":"28048:25:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":27345,"name":"uint32","nodeType":"ElementaryTypeName","src":"28048:6:71","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"id":27350,"initialValue":{"arguments":[{"id":27348,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27327,"src":"28097:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":27347,"name":"_getPoolPausedState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25088,"src":"28077:19:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$_t_uint32_$","typeString":"function (address) view returns (bool,uint32)"}},"id":27349,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28077:25:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint32_$","typeString":"tuple(bool,uint32)"}},"nodeType":"VariableDeclarationStatement","src":"28034:68:71"},{"expression":{"components":[{"id":27351,"name":"paused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27344,"src":"28134:6:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":27352,"name":"pauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27346,"src":"28154:18:71","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":27355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27353,"name":"pauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27346,"src":"28186:18:71","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":27354,"name":"_vaultBufferPeriodDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28269,"src":"28207:26:71","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"28186:47:71","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"expression":{"baseExpression":{"id":27356,"name":"_poolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28231,"src":"28247:17:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolRoleAccounts_$4677_storage_$","typeString":"mapping(address => struct PoolRoleAccounts storage ref)"}},"id":27358,"indexExpression":{"id":27357,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27327,"src":"28265:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28247:23:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage","typeString":"struct PoolRoleAccounts storage ref"}},"id":27359,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28271:12:71","memberName":"pauseManager","nodeType":"MemberAccess","referencedDeclaration":4672,"src":"28247:36:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":27360,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"28120:173:71","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint32_$_t_uint32_$_t_address_$","typeString":"tuple(bool,uint32,uint32,address)"}},"functionReturnParameters":27342,"id":27361,"nodeType":"Return","src":"28113:180:71"}]},"documentation":{"id":27325,"nodeType":"StructuredDocumentation","src":"27831:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"15e32046","id":27363,"implemented":true,"kind":"function","modifiers":[{"id":27330,"kind":"modifierInvocation","modifierName":{"id":27329,"name":"onlyVaultDelegateCall","nameLocations":["27937:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"27937:21:71"},"nodeType":"ModifierInvocation","src":"27937:21:71"},{"arguments":[{"id":27332,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27327,"src":"27978:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":27333,"kind":"modifierInvocation","modifierName":{"id":27331,"name":"withRegisteredPool","nameLocations":["27959:18:71"],"nodeType":"IdentifierPath","referencedDeclaration":25120,"src":"27959:18:71"},"nodeType":"ModifierInvocation","src":"27959:24:71"}],"name":"getPoolPausedState","nameLocation":"27876:18:71","nodeType":"FunctionDefinition","parameters":{"id":27328,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27327,"mutability":"mutable","name":"pool","nameLocation":"27912:4:71","nodeType":"VariableDeclaration","scope":27363,"src":"27904:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27326,"name":"address","nodeType":"ElementaryTypeName","src":"27904:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"27894:28:71"},"returnParameters":{"id":27342,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27335,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27363,"src":"27993:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":27334,"name":"bool","nodeType":"ElementaryTypeName","src":"27993:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":27337,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27363,"src":"27999:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":27336,"name":"uint32","nodeType":"ElementaryTypeName","src":"27999:6:71","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":27339,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27363,"src":"28007:6:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":27338,"name":"uint32","nodeType":"ElementaryTypeName","src":"28007:6:71","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":27341,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27363,"src":"28015:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27340,"name":"address","nodeType":"ElementaryTypeName","src":"28015:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"27992:31:71"},"scope":28100,"src":"27867:433:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4294],"body":{"id":27383,"nodeType":"Block","src":"28674:65:71","statements":[{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":27381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":27374,"name":"_bufferAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28309,"src":"28691:13:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_address_$","typeString":"mapping(contract IERC4626 => address)"}},"id":27376,"indexExpression":{"id":27375,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27367,"src":"28705:12:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28691:27:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":27379,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28730:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":27378,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28722:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":27377,"name":"address","nodeType":"ElementaryTypeName","src":"28722:7:71","typeDescriptions":{}}},"id":27380,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28722:10:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"28691:41:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":27373,"id":27382,"nodeType":"Return","src":"28684:48:71"}]},"documentation":{"id":27364,"nodeType":"StructuredDocumentation","src":"28528:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"6844846b","id":27384,"implemented":true,"kind":"function","modifiers":[{"id":27370,"kind":"modifierInvocation","modifierName":{"id":27369,"name":"onlyVaultDelegateCall","nameLocations":["28637:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"28637:21:71"},"nodeType":"ModifierInvocation","src":"28637:21:71"}],"name":"isERC4626BufferInitialized","nameLocation":"28573:26:71","nodeType":"FunctionDefinition","parameters":{"id":27368,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27367,"mutability":"mutable","name":"wrappedToken","nameLocation":"28609:12:71","nodeType":"VariableDeclaration","scope":27384,"src":"28600:21:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":27366,"nodeType":"UserDefinedTypeName","pathNode":{"id":27365,"name":"IERC4626","nameLocations":["28600:8:71"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"28600:8:71"},"referencedDeclaration":39833,"src":"28600:8:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"28599:23:71"},"returnParameters":{"id":27373,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27372,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27384,"src":"28668:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":27371,"name":"bool","nodeType":"ElementaryTypeName","src":"28668:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"28667:6:71"},"scope":28100,"src":"28564:175:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4303],"body":{"id":27399,"nodeType":"Block","src":"28895:51:71","statements":[{"expression":{"baseExpression":{"id":27395,"name":"_bufferAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28309,"src":"28912:13:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_address_$","typeString":"mapping(contract IERC4626 => address)"}},"id":27397,"indexExpression":{"id":27396,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27388,"src":"28926:12:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28912:27:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":27394,"id":27398,"nodeType":"Return","src":"28905:34:71"}]},"documentation":{"id":27385,"nodeType":"StructuredDocumentation","src":"28745:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"4afbaf5a","id":27400,"implemented":true,"kind":"function","modifiers":[{"id":27391,"kind":"modifierInvocation","modifierName":{"id":27390,"name":"onlyVaultDelegateCall","nameLocations":["28849:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"28849:21:71"},"nodeType":"ModifierInvocation","src":"28849:21:71"}],"name":"getERC4626BufferAsset","nameLocation":"28790:21:71","nodeType":"FunctionDefinition","parameters":{"id":27389,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27388,"mutability":"mutable","name":"wrappedToken","nameLocation":"28821:12:71","nodeType":"VariableDeclaration","scope":27400,"src":"28812:21:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":27387,"nodeType":"UserDefinedTypeName","pathNode":{"id":27386,"name":"IERC4626","nameLocations":["28812:8:71"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"28812:8:71"},"referencedDeclaration":39833,"src":"28812:8:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"28811:23:71"},"returnParameters":{"id":27394,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27393,"mutability":"mutable","name":"asset","nameLocation":"28888:5:71","nodeType":"VariableDeclaration","scope":27400,"src":"28880:13:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27392,"name":"address","nodeType":"ElementaryTypeName","src":"28880:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"28879:15:71"},"scope":28100,"src":"28781:165:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4314],"body":{"id":27424,"nodeType":"Block","src":"29676:73:71","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"baseExpression":{"id":27416,"name":"_aggregateFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28263,"src":"29693:20:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$_$","typeString":"mapping(address => mapping(contract IERC20 => bytes32))"}},"id":27418,"indexExpression":{"id":27417,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27403,"src":"29714:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29693:26:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$","typeString":"mapping(contract IERC20 => bytes32)"}},"id":27420,"indexExpression":{"id":27419,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27406,"src":"29720:5:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29693:33:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":27421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29727:13:71","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":6222,"src":"29693:47:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":27422,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29693:49:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":27415,"id":27423,"nodeType":"Return","src":"29686:56:71"}]},"documentation":{"id":27401,"nodeType":"StructuredDocumentation","src":"29476:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"85e0b999","id":27425,"implemented":true,"kind":"function","modifiers":[{"id":27409,"kind":"modifierInvocation","modifierName":{"id":27408,"name":"onlyVaultDelegateCall","nameLocations":["29611:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"29611:21:71"},"nodeType":"ModifierInvocation","src":"29611:21:71"},{"arguments":[{"id":27411,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27403,"src":"29652:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":27412,"kind":"modifierInvocation","modifierName":{"id":27410,"name":"withRegisteredPool","nameLocations":["29633:18:71"],"nodeType":"IdentifierPath","referencedDeclaration":25120,"src":"29633:18:71"},"nodeType":"ModifierInvocation","src":"29633:24:71"}],"name":"getAggregateSwapFeeAmount","nameLocation":"29521:25:71","nodeType":"FunctionDefinition","parameters":{"id":27407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27403,"mutability":"mutable","name":"pool","nameLocation":"29564:4:71","nodeType":"VariableDeclaration","scope":27425,"src":"29556:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27402,"name":"address","nodeType":"ElementaryTypeName","src":"29556:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27406,"mutability":"mutable","name":"token","nameLocation":"29585:5:71","nodeType":"VariableDeclaration","scope":27425,"src":"29578:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":27405,"nodeType":"UserDefinedTypeName","pathNode":{"id":27404,"name":"IERC20","nameLocations":["29578:6:71"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"29578:6:71"},"referencedDeclaration":40109,"src":"29578:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"29546:50:71"},"returnParameters":{"id":27415,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27414,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27425,"src":"29667:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27413,"name":"uint256","nodeType":"ElementaryTypeName","src":"29667:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"29666:9:71"},"scope":28100,"src":"29512:237:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4325],"body":{"id":27449,"nodeType":"Block","src":"29956:77:71","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"baseExpression":{"id":27441,"name":"_aggregateFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28263,"src":"29973:20:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$_$","typeString":"mapping(address => mapping(contract IERC20 => bytes32))"}},"id":27443,"indexExpression":{"id":27442,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27428,"src":"29994:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29973:26:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$","typeString":"mapping(contract IERC20 => bytes32)"}},"id":27445,"indexExpression":{"id":27444,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27431,"src":"30000:5:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29973:33:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":27446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30007:17:71","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":6239,"src":"29973:51:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":27447,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29973:53:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":27440,"id":27448,"nodeType":"Return","src":"29966:60:71"}]},"documentation":{"id":27426,"nodeType":"StructuredDocumentation","src":"29755:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"00fdfa13","id":27450,"implemented":true,"kind":"function","modifiers":[{"id":27434,"kind":"modifierInvocation","modifierName":{"id":27433,"name":"onlyVaultDelegateCall","nameLocations":["29891:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"29891:21:71"},"nodeType":"ModifierInvocation","src":"29891:21:71"},{"arguments":[{"id":27436,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27428,"src":"29932:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":27437,"kind":"modifierInvocation","modifierName":{"id":27435,"name":"withRegisteredPool","nameLocations":["29913:18:71"],"nodeType":"IdentifierPath","referencedDeclaration":25120,"src":"29913:18:71"},"nodeType":"ModifierInvocation","src":"29913:24:71"}],"name":"getAggregateYieldFeeAmount","nameLocation":"29800:26:71","nodeType":"FunctionDefinition","parameters":{"id":27432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27428,"mutability":"mutable","name":"pool","nameLocation":"29844:4:71","nodeType":"VariableDeclaration","scope":27450,"src":"29836:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27427,"name":"address","nodeType":"ElementaryTypeName","src":"29836:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27431,"mutability":"mutable","name":"token","nameLocation":"29865:5:71","nodeType":"VariableDeclaration","scope":27450,"src":"29858:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":27430,"nodeType":"UserDefinedTypeName","pathNode":{"id":27429,"name":"IERC20","nameLocations":["29858:6:71"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"29858:6:71"},"referencedDeclaration":40109,"src":"29858:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"29826:50:71"},"returnParameters":{"id":27440,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27439,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27450,"src":"29947:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27438,"name":"uint256","nodeType":"ElementaryTypeName","src":"29947:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"29946:9:71"},"scope":28100,"src":"29791:242:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4333],"body":{"id":27474,"nodeType":"Block","src":"30218:114:71","statements":[{"assignments":[27465],"declarations":[{"constant":false,"id":27465,"mutability":"mutable","name":"config","nameLocation":"30243:6:71","nodeType":"VariableDeclaration","scope":27474,"src":"30228:21:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":27464,"nodeType":"UserDefinedTypeName","pathNode":{"id":27463,"name":"PoolConfigBits","nameLocations":["30228:14:71"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"30228:14:71"},"referencedDeclaration":4582,"src":"30228:14:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"id":27469,"initialValue":{"baseExpression":{"id":27466,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"30252:15:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":27468,"indexExpression":{"id":27467,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27453,"src":"30268:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30252:21:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"VariableDeclarationStatement","src":"30228:45:71"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27470,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27465,"src":"30290:6:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":27471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30297:26:71","memberName":"getStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":30061,"src":"30290:33:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (uint256)"}},"id":27472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30290:35:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":27462,"id":27473,"nodeType":"Return","src":"30283:42:71"}]},"documentation":{"id":27451,"nodeType":"StructuredDocumentation","src":"30039:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"b45090f9","id":27475,"implemented":true,"kind":"function","modifiers":[{"id":27456,"kind":"modifierInvocation","modifierName":{"id":27455,"name":"onlyVaultDelegateCall","nameLocations":["30153:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"30153:21:71"},"nodeType":"ModifierInvocation","src":"30153:21:71"},{"arguments":[{"id":27458,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27453,"src":"30194:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":27459,"kind":"modifierInvocation","modifierName":{"id":27457,"name":"withRegisteredPool","nameLocations":["30175:18:71"],"nodeType":"IdentifierPath","referencedDeclaration":25120,"src":"30175:18:71"},"nodeType":"ModifierInvocation","src":"30175:24:71"}],"name":"getStaticSwapFeePercentage","nameLocation":"30084:26:71","nodeType":"FunctionDefinition","parameters":{"id":27454,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27453,"mutability":"mutable","name":"pool","nameLocation":"30128:4:71","nodeType":"VariableDeclaration","scope":27475,"src":"30120:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27452,"name":"address","nodeType":"ElementaryTypeName","src":"30120:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30110:28:71"},"returnParameters":{"id":27462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27461,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27475,"src":"30209:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27460,"name":"uint256","nodeType":"ElementaryTypeName","src":"30209:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"30208:9:71"},"scope":28100,"src":"30075:257:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4342],"body":{"id":27493,"nodeType":"Block","src":"30526:47:71","statements":[{"expression":{"baseExpression":{"id":27489,"name":"_poolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28231,"src":"30543:17:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolRoleAccounts_$4677_storage_$","typeString":"mapping(address => struct PoolRoleAccounts storage ref)"}},"id":27491,"indexExpression":{"id":27490,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27478,"src":"30561:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30543:23:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage","typeString":"struct PoolRoleAccounts storage ref"}},"functionReturnParameters":27488,"id":27492,"nodeType":"Return","src":"30536:30:71"}]},"documentation":{"id":27476,"nodeType":"StructuredDocumentation","src":"30338:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"e9ddeb26","id":27494,"implemented":true,"kind":"function","modifiers":[{"id":27481,"kind":"modifierInvocation","modifierName":{"id":27480,"name":"onlyVaultDelegateCall","nameLocations":["30445:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"30445:21:71"},"nodeType":"ModifierInvocation","src":"30445:21:71"},{"arguments":[{"id":27483,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27478,"src":"30486:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":27484,"kind":"modifierInvocation","modifierName":{"id":27482,"name":"withRegisteredPool","nameLocations":["30467:18:71"],"nodeType":"IdentifierPath","referencedDeclaration":25120,"src":"30467:18:71"},"nodeType":"ModifierInvocation","src":"30467:24:71"}],"name":"getPoolRoleAccounts","nameLocation":"30383:19:71","nodeType":"FunctionDefinition","parameters":{"id":27479,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27478,"mutability":"mutable","name":"pool","nameLocation":"30420:4:71","nodeType":"VariableDeclaration","scope":27494,"src":"30412:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27477,"name":"address","nodeType":"ElementaryTypeName","src":"30412:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30402:28:71"},"returnParameters":{"id":27488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27487,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27494,"src":"30501:23:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":27486,"nodeType":"UserDefinedTypeName","pathNode":{"id":27485,"name":"PoolRoleAccounts","nameLocations":["30501:16:71"],"nodeType":"IdentifierPath","referencedDeclaration":4677,"src":"30501:16:71"},"referencedDeclaration":4677,"src":"30501:16:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"src":"30500:25:71"},"scope":28100,"src":"30374:199:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4353],"body":{"id":27524,"nodeType":"Block","src":"30831:251:71","statements":[{"expression":{"arguments":[{"id":27512,"name":"swapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27500,"src":"30922:10:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}},{"id":27513,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27497,"src":"30950:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":27514,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"30972:15:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":27516,"indexExpression":{"id":27515,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27497,"src":"30988:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30972:21:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":27517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30994:26:71","memberName":"getStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":30061,"src":"30972:48:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (uint256)"}},"id":27518,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30972:50:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":27519,"name":"_hooksContracts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28236,"src":"31040:15:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IHooks_$2026_$","typeString":"mapping(address => contract IHooks)"}},"id":27521,"indexExpression":{"id":27520,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27497,"src":"31056:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"31040:21:71","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}],"expression":{"id":27510,"name":"HooksConfigLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29474,"src":"30860:14:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_HooksConfigLib_$29474_$","typeString":"type(library HooksConfigLib)"}},"id":27511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30875:29:71","memberName":"callComputeDynamicSwapFeeHook","nodeType":"MemberAccess","referencedDeclaration":28933,"src":"30860:44:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PoolSwapParams_$4772_memory_ptr_$_t_address_$_t_uint256_$_t_contract$_IHooks_$2026_$returns$_t_uint256_$","typeString":"function (struct PoolSwapParams memory,address,uint256,contract IHooks) view returns (uint256)"}},"id":27522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30860:215:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":27509,"id":27523,"nodeType":"Return","src":"30841:234:71"}]},"documentation":{"id":27495,"nodeType":"StructuredDocumentation","src":"30579:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"4d472bdd","id":27525,"implemented":true,"kind":"function","modifiers":[{"id":27503,"kind":"modifierInvocation","modifierName":{"id":27502,"name":"onlyVaultDelegateCall","nameLocations":["30740:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"30740:21:71"},"nodeType":"ModifierInvocation","src":"30740:21:71"},{"arguments":[{"id":27505,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27497,"src":"30782:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":27506,"kind":"modifierInvocation","modifierName":{"id":27504,"name":"withInitializedPool","nameLocations":["30762:19:71"],"nodeType":"IdentifierPath","referencedDeclaration":25131,"src":"30762:19:71"},"nodeType":"ModifierInvocation","src":"30762:25:71"}],"name":"computeDynamicSwapFeePercentage","nameLocation":"30624:31:71","nodeType":"FunctionDefinition","parameters":{"id":27501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27497,"mutability":"mutable","name":"pool","nameLocation":"30673:4:71","nodeType":"VariableDeclaration","scope":27525,"src":"30665:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27496,"name":"address","nodeType":"ElementaryTypeName","src":"30665:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27500,"mutability":"mutable","name":"swapParams","nameLocation":"30709:10:71","nodeType":"VariableDeclaration","scope":27525,"src":"30687:32:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":27499,"nodeType":"UserDefinedTypeName","pathNode":{"id":27498,"name":"PoolSwapParams","nameLocations":["30687:14:71"],"nodeType":"IdentifierPath","referencedDeclaration":4772,"src":"30687:14:71"},"referencedDeclaration":4772,"src":"30687:14:71","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"src":"30655:70:71"},"returnParameters":{"id":27509,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27508,"mutability":"mutable","name":"dynamicSwapFeePercentage","nameLocation":"30805:24:71","nodeType":"VariableDeclaration","scope":27525,"src":"30797:32:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27507,"name":"uint256","nodeType":"ElementaryTypeName","src":"30797:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"30796:34:71"},"scope":28100,"src":"30615:467:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4360],"body":{"id":27536,"nodeType":"Block","src":"31229:46:71","statements":[{"expression":{"id":27534,"name":"_protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28287,"src":"31246:22:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}},"functionReturnParameters":27533,"id":27535,"nodeType":"Return","src":"31239:29:71"}]},"documentation":{"id":27526,"nodeType":"StructuredDocumentation","src":"31088:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"85f2dbd4","id":27537,"implemented":true,"kind":"function","modifiers":[{"id":27529,"kind":"modifierInvocation","modifierName":{"id":27528,"name":"onlyVaultDelegateCall","nameLocations":["31174:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"31174:21:71"},"nodeType":"ModifierInvocation","src":"31174:21:71"}],"name":"getProtocolFeeController","nameLocation":"31133:24:71","nodeType":"FunctionDefinition","parameters":{"id":27527,"nodeType":"ParameterList","parameters":[],"src":"31157:2:71"},"returnParameters":{"id":27533,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27532,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27537,"src":"31205:22:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"},"typeName":{"id":27531,"nodeType":"UserDefinedTypeName","pathNode":{"id":27530,"name":"IProtocolFeeController","nameLocations":["31205:22:71"],"nodeType":"IdentifierPath","referencedDeclaration":2420,"src":"31205:22:71"},"referencedDeclaration":2420,"src":"31205:22:71","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"31204:24:71"},"scope":28100,"src":"31124:151:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4368],"body":{"id":27554,"nodeType":"Block","src":"31673:51:71","statements":[{"expression":{"arguments":[{"id":27551,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27540,"src":"31712:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":27550,"name":"_isPoolInRecoveryMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25589,"src":"31690:21:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":27552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31690:27:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":27549,"id":27553,"nodeType":"Return","src":"31683:34:71"}]},"documentation":{"id":27538,"nodeType":"StructuredDocumentation","src":"31503:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"be7d628a","id":27555,"implemented":true,"kind":"function","modifiers":[{"id":27543,"kind":"modifierInvocation","modifierName":{"id":27542,"name":"onlyVaultDelegateCall","nameLocations":["31611:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"31611:21:71"},"nodeType":"ModifierInvocation","src":"31611:21:71"},{"arguments":[{"id":27545,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27540,"src":"31652:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":27546,"kind":"modifierInvocation","modifierName":{"id":27544,"name":"withRegisteredPool","nameLocations":["31633:18:71"],"nodeType":"IdentifierPath","referencedDeclaration":25120,"src":"31633:18:71"},"nodeType":"ModifierInvocation","src":"31633:24:71"}],"name":"isPoolInRecoveryMode","nameLocation":"31548:20:71","nodeType":"FunctionDefinition","parameters":{"id":27541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27540,"mutability":"mutable","name":"pool","nameLocation":"31586:4:71","nodeType":"VariableDeclaration","scope":27555,"src":"31578:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27539,"name":"address","nodeType":"ElementaryTypeName","src":"31578:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"31568:28:71"},"returnParameters":{"id":27549,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27548,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":27555,"src":"31667:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":27547,"name":"bool","nodeType":"ElementaryTypeName","src":"31667:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"31666:6:71"},"scope":28100,"src":"31539:185:71","stateMutability":"view","virtual":false,"visibility":"external"},{"canonicalName":"VaultExtension.RecoveryLocals","id":27572,"members":[{"constant":false,"id":27559,"mutability":"mutable","name":"tokens","nameLocation":"31810:6:71","nodeType":"VariableDeclaration","scope":27572,"src":"31801:15:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":27557,"nodeType":"UserDefinedTypeName","pathNode":{"id":27556,"name":"IERC20","nameLocations":["31801:6:71"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"31801:6:71"},"referencedDeclaration":40109,"src":"31801:6:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":27558,"nodeType":"ArrayTypeName","src":"31801:8:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":27561,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"31834:17:71","nodeType":"VariableDeclaration","scope":27572,"src":"31826:25:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27560,"name":"uint256","nodeType":"ElementaryTypeName","src":"31826:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27563,"mutability":"mutable","name":"numTokens","nameLocation":"31869:9:71","nodeType":"VariableDeclaration","scope":27572,"src":"31861:17:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27562,"name":"uint256","nodeType":"ElementaryTypeName","src":"31861:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27566,"mutability":"mutable","name":"swapFeeAmountsRaw","nameLocation":"31898:17:71","nodeType":"VariableDeclaration","scope":27572,"src":"31888:27:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":27564,"name":"uint256","nodeType":"ElementaryTypeName","src":"31888:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27565,"nodeType":"ArrayTypeName","src":"31888:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":27569,"mutability":"mutable","name":"balancesRaw","nameLocation":"31935:11:71","nodeType":"VariableDeclaration","scope":27572,"src":"31925:21:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":27567,"name":"uint256","nodeType":"ElementaryTypeName","src":"31925:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27568,"nodeType":"ArrayTypeName","src":"31925:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":27571,"mutability":"mutable","name":"chargeRoundtripFee","nameLocation":"31961:18:71","nodeType":"VariableDeclaration","scope":27572,"src":"31956:23:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":27570,"name":"bool","nodeType":"ElementaryTypeName","src":"31956:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"RecoveryLocals","nameLocation":"31776:14:71","nodeType":"StructDefinition","scope":28100,"src":"31769:217:71","visibility":"public"},{"baseFunctions":[4384],"body":{"id":27876,"nodeType":"Block","src":"32398:3713:71","statements":[{"assignments":[27603],"declarations":[{"constant":false,"id":27603,"mutability":"mutable","name":"poolTokenBalances","nameLocation":"32559:17:71","nodeType":"VariableDeclaration","scope":27876,"src":"32493:83:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"typeName":{"id":27602,"keyName":"tokenIndex","keyNameLocation":"32509:10:71","keyType":{"id":27600,"name":"uint256","nodeType":"ElementaryTypeName","src":"32501:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"32493:57:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"valueName":"packedTokenBalance","valueNameLocation":"32531:18:71","valueType":{"id":27601,"name":"bytes32","nodeType":"ElementaryTypeName","src":"32523:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},"visibility":"internal"}],"id":27607,"initialValue":{"baseExpression":{"id":27604,"name":"_poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28256,"src":"32579:18:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"}},"id":27606,"indexExpression":{"id":27605,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27575,"src":"32598:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"32579:24:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"nodeType":"VariableDeclarationStatement","src":"32493:110:71"},{"assignments":[27610],"declarations":[{"constant":false,"id":27610,"mutability":"mutable","name":"locals","nameLocation":"32635:6:71","nodeType":"VariableDeclaration","scope":27876,"src":"32613:28:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RecoveryLocals_$27572_memory_ptr","typeString":"struct VaultExtension.RecoveryLocals"},"typeName":{"id":27609,"nodeType":"UserDefinedTypeName","pathNode":{"id":27608,"name":"RecoveryLocals","nameLocations":["32613:14:71"],"nodeType":"IdentifierPath","referencedDeclaration":27572,"src":"32613:14:71"},"referencedDeclaration":27572,"src":"32613:14:71","typeDescriptions":{"typeIdentifier":"t_struct$_RecoveryLocals_$27572_storage_ptr","typeString":"struct VaultExtension.RecoveryLocals"}},"visibility":"internal"}],"id":27611,"nodeType":"VariableDeclarationStatement","src":"32613:28:71"},{"expression":{"id":27618,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":27612,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27610,"src":"32753:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_RecoveryLocals_$27572_memory_ptr","typeString":"struct VaultExtension.RecoveryLocals memory"}},"id":27614,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"32760:6:71","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":27559,"src":"32753:13:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":27615,"name":"_poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28242,"src":"32769:11:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_contract$_IERC20_$40109_$dyn_storage_$","typeString":"mapping(address => contract IERC20[] storage ref)"}},"id":27617,"indexExpression":{"id":27616,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27575,"src":"32781:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"32769:17:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"src":"32753:33:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":27619,"nodeType":"ExpressionStatement","src":"32753:33:71"},{"expression":{"id":27626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":27620,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27610,"src":"32796:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_RecoveryLocals_$27572_memory_ptr","typeString":"struct VaultExtension.RecoveryLocals memory"}},"id":27622,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"32803:9:71","memberName":"numTokens","nodeType":"MemberAccess","referencedDeclaration":27563,"src":"32796:16:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"expression":{"id":27623,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27610,"src":"32815:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_RecoveryLocals_$27572_memory_ptr","typeString":"struct VaultExtension.RecoveryLocals memory"}},"id":27624,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32822:6:71","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":27559,"src":"32815:13:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":27625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32829:6:71","memberName":"length","nodeType":"MemberAccess","src":"32815:20:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32796:39:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27627,"nodeType":"ExpressionStatement","src":"32796:39:71"},{"expression":{"id":27637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":27628,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27610,"src":"32846:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_RecoveryLocals_$27572_memory_ptr","typeString":"struct VaultExtension.RecoveryLocals memory"}},"id":27630,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"32853:11:71","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":27569,"src":"32846:18:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":27634,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27610,"src":"32881:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_RecoveryLocals_$27572_memory_ptr","typeString":"struct VaultExtension.RecoveryLocals memory"}},"id":27635,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32888:9:71","memberName":"numTokens","nodeType":"MemberAccess","referencedDeclaration":27563,"src":"32881:16:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27633,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"32867:13:71","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":27631,"name":"uint256","nodeType":"ElementaryTypeName","src":"32871:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27632,"nodeType":"ArrayTypeName","src":"32871:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":27636,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32867:31:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"32846:52:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":27638,"nodeType":"ExpressionStatement","src":"32846:52:71"},{"assignments":[27640],"declarations":[{"constant":false,"id":27640,"mutability":"mutable","name":"packedBalances","nameLocation":"32916:14:71","nodeType":"VariableDeclaration","scope":27876,"src":"32908:22:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":27639,"name":"bytes32","nodeType":"ElementaryTypeName","src":"32908:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":27641,"nodeType":"VariableDeclarationStatement","src":"32908:22:71"},{"body":{"id":27665,"nodeType":"Block","src":"32988:85:71","statements":[{"expression":{"id":27663,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":27653,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27610,"src":"33002:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_RecoveryLocals_$27572_memory_ptr","typeString":"struct VaultExtension.RecoveryLocals memory"}},"id":27656,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33009:11:71","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":27569,"src":"33002:18:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":27657,"indexExpression":{"id":27655,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27643,"src":"33021:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"33002:21:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":27658,"name":"poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27603,"src":"33026:17:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"id":27660,"indexExpression":{"id":27659,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27643,"src":"33044:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"33026:20:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":27661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33047:13:71","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":6222,"src":"33026:34:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":27662,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33026:36:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33002:60:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27664,"nodeType":"ExpressionStatement","src":"33002:60:71"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27646,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27643,"src":"32961:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":27647,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27610,"src":"32965:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_RecoveryLocals_$27572_memory_ptr","typeString":"struct VaultExtension.RecoveryLocals memory"}},"id":27648,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"32972:9:71","memberName":"numTokens","nodeType":"MemberAccess","referencedDeclaration":27563,"src":"32965:16:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"32961:20:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27666,"initializationExpression":{"assignments":[27643],"declarations":[{"constant":false,"id":27643,"mutability":"mutable","name":"i","nameLocation":"32954:1:71","nodeType":"VariableDeclaration","scope":27666,"src":"32946:9:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27642,"name":"uint256","nodeType":"ElementaryTypeName","src":"32946:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":27645,"initialValue":{"hexValue":"30","id":27644,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32958:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"32946:13:71"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":27651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"32983:3:71","subExpression":{"id":27650,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27643,"src":"32985:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27652,"nodeType":"ExpressionStatement","src":"32983:3:71"},"nodeType":"ForStatement","src":"32941:132:71"},{"expression":{"id":27677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":27667,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27598,"src":"33083:13:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":27670,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27610,"src":"33155:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_RecoveryLocals_$27572_memory_ptr","typeString":"struct VaultExtension.RecoveryLocals memory"}},"id":27671,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33162:11:71","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":27569,"src":"33155:18:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"arguments":[{"id":27673,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27575,"src":"33200:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":27672,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38906,"src":"33187:12:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":27674,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33187:18:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":27675,"name":"exactBptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27579,"src":"33219:16:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":27668,"name":"BasePoolMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12083,"src":"33099:12:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BasePoolMath_$12083_$","typeString":"type(library BasePoolMath)"}},"id":27669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33112:29:71","memberName":"computeProportionalAmountsOut","nodeType":"MemberAccess","referencedDeclaration":11473,"src":"33099:42:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256,uint256) pure returns (uint256[] memory)"}},"id":27676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33099:146:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"33083:162:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":27678,"nodeType":"ExpressionStatement","src":"33083:162:71"},{"expression":{"id":27688,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":27679,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27610,"src":"33631:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_RecoveryLocals_$27572_memory_ptr","typeString":"struct VaultExtension.RecoveryLocals memory"}},"id":27681,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"33638:17:71","memberName":"swapFeeAmountsRaw","nodeType":"MemberAccess","referencedDeclaration":27566,"src":"33631:24:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":27685,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27610,"src":"33672:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_RecoveryLocals_$27572_memory_ptr","typeString":"struct VaultExtension.RecoveryLocals memory"}},"id":27686,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33679:9:71","memberName":"numTokens","nodeType":"MemberAccess","referencedDeclaration":27563,"src":"33672:16:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27684,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"33658:13:71","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":27682,"name":"uint256","nodeType":"ElementaryTypeName","src":"33662:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27683,"nodeType":"ArrayTypeName","src":"33662:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":27687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33658:31:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"33631:58:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":27689,"nodeType":"ExpressionStatement","src":"33631:58:71"},{"expression":{"id":27702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":27690,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27610,"src":"33699:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_RecoveryLocals_$27572_memory_ptr","typeString":"struct VaultExtension.RecoveryLocals memory"}},"id":27692,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"33706:18:71","memberName":"chargeRoundtripFee","nodeType":"MemberAccess","referencedDeclaration":27571,"src":"33699:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":27696,"name":"_sessionIdSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28366,"src":"33754:14:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function () view returns (StorageSlotExtension.Uint256SlotType)"}},"id":27697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33754:16:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":27698,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33771:5:71","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":10251,"src":"33754:22:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Uint256SlotType_$10142_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function (StorageSlotExtension.Uint256SlotType) view returns (uint256)"}},"id":27699,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33754:24:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":27700,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27575,"src":"33780:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":27693,"name":"_addLiquidityCalled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28355,"src":"33727:19:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862_$","typeString":"function () view returns (UintToAddressToBooleanMappingSlot)"}},"id":27694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33727:21:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862","typeString":"UintToAddressToBooleanMappingSlot"}},"id":27695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33749:4:71","memberName":"tGet","nodeType":"MemberAccess","referencedDeclaration":7043,"src":"33727:26:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862_$_t_uint256_$_t_address_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862_$","typeString":"function (UintToAddressToBooleanMappingSlot,uint256,address) view returns (bool)"}},"id":27701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33727:58:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"33699:86:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27703,"nodeType":"ExpressionStatement","src":"33699:86:71"},{"condition":{"expression":{"id":27704,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27610,"src":"33870:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_RecoveryLocals_$27572_memory_ptr","typeString":"struct VaultExtension.RecoveryLocals memory"}},"id":27705,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"33877:18:71","memberName":"chargeRoundtripFee","nodeType":"MemberAccess","referencedDeclaration":27571,"src":"33870:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27717,"nodeType":"IfStatement","src":"33866:133:71","trueBody":{"id":27716,"nodeType":"Block","src":"33897:102:71","statements":[{"expression":{"id":27714,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":27706,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27610,"src":"33911:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_RecoveryLocals_$27572_memory_ptr","typeString":"struct VaultExtension.RecoveryLocals memory"}},"id":27708,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"33918:17:71","memberName":"swapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":27561,"src":"33911:24:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":27709,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"33938:15:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":27711,"indexExpression":{"id":27710,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27575,"src":"33954:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"33938:21:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":27712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33960:26:71","memberName":"getStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":30061,"src":"33938:48:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (uint256)"}},"id":27713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33938:50:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33911:77:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27715,"nodeType":"ExpressionStatement","src":"33911:77:71"}]}},{"body":{"id":27798,"nodeType":"Block","src":"34056:698:71","statements":[{"condition":{"expression":{"id":27729,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27610,"src":"34074:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_RecoveryLocals_$27572_memory_ptr","typeString":"struct VaultExtension.RecoveryLocals memory"}},"id":27730,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34081:18:71","memberName":"chargeRoundtripFee","nodeType":"MemberAccess","referencedDeclaration":27571,"src":"34074:25:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27755,"nodeType":"IfStatement","src":"34070:207:71","trueBody":{"id":27754,"nodeType":"Block","src":"34101:176:71","statements":[{"expression":{"id":27743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":27731,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27610,"src":"34119:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_RecoveryLocals_$27572_memory_ptr","typeString":"struct VaultExtension.RecoveryLocals memory"}},"id":27734,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34126:17:71","memberName":"swapFeeAmountsRaw","nodeType":"MemberAccess","referencedDeclaration":27566,"src":"34119:24:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":27735,"indexExpression":{"id":27733,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27719,"src":"34144:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"34119:27:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":27740,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27610,"src":"34172:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_RecoveryLocals_$27572_memory_ptr","typeString":"struct VaultExtension.RecoveryLocals memory"}},"id":27741,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34179:17:71","memberName":"swapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":27561,"src":"34172:24:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":27736,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27598,"src":"34149:13:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":27738,"indexExpression":{"id":27737,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27719,"src":"34163:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34149:16:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34166:5:71","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":7970,"src":"34149:22:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":27742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34149:48:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34119:78:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27744,"nodeType":"ExpressionStatement","src":"34119:78:71"},{"expression":{"id":27752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":27745,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27598,"src":"34215:13:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":27747,"indexExpression":{"id":27746,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27719,"src":"34229:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"34215:16:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"baseExpression":{"expression":{"id":27748,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27610,"src":"34235:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_RecoveryLocals_$27572_memory_ptr","typeString":"struct VaultExtension.RecoveryLocals memory"}},"id":27749,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34242:17:71","memberName":"swapFeeAmountsRaw","nodeType":"MemberAccess","referencedDeclaration":27566,"src":"34235:24:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":27751,"indexExpression":{"id":27750,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27719,"src":"34260:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34235:27:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34215:47:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27753,"nodeType":"ExpressionStatement","src":"34215:47:71"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":27756,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27598,"src":"34295:13:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":27758,"indexExpression":{"id":27757,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27719,"src":"34309:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34295:16:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"baseExpression":{"id":27759,"name":"minAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27582,"src":"34314:13:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":27761,"indexExpression":{"id":27760,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27719,"src":"34328:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34314:16:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34295:35:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27777,"nodeType":"IfStatement","src":"34291:152:71","trueBody":{"id":27776,"nodeType":"Block","src":"34332:111:71","statements":[{"errorCall":{"arguments":[{"baseExpression":{"expression":{"id":27764,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27610,"src":"34375:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_RecoveryLocals_$27572_memory_ptr","typeString":"struct VaultExtension.RecoveryLocals memory"}},"id":27765,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34382:6:71","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":27559,"src":"34375:13:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":27767,"indexExpression":{"id":27766,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27719,"src":"34389:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34375:16:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"baseExpression":{"id":27768,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27598,"src":"34393:13:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":27770,"indexExpression":{"id":27769,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27719,"src":"34407:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34393:16:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":27771,"name":"minAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27582,"src":"34411:13:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":27773,"indexExpression":{"id":27772,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27719,"src":"34425:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34411:16:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27763,"name":"AmountOutBelowMin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3584,"src":"34357:17:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$40109_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (contract IERC20,uint256,uint256) pure returns (error)"}},"id":27774,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34357:71:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":27775,"nodeType":"RevertStatement","src":"34350:78:71"}]}},{"expression":{"arguments":[{"baseExpression":{"expression":{"id":27779,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27610,"src":"34517:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_RecoveryLocals_$27572_memory_ptr","typeString":"struct VaultExtension.RecoveryLocals memory"}},"id":27780,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34524:6:71","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":27559,"src":"34517:13:71","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":27782,"indexExpression":{"id":27781,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27719,"src":"34531:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34517:16:71","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"baseExpression":{"id":27783,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27598,"src":"34535:13:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":27785,"indexExpression":{"id":27784,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27719,"src":"34549:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34535:16:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27778,"name":"_supplyCredit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24891,"src":"34503:13:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":27786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34503:49:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27787,"nodeType":"ExpressionStatement","src":"34503:49:71"},{"expression":{"id":27796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":27788,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27610,"src":"34702:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_RecoveryLocals_$27572_memory_ptr","typeString":"struct VaultExtension.RecoveryLocals memory"}},"id":27791,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34709:11:71","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":27569,"src":"34702:18:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":27792,"indexExpression":{"id":27790,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27719,"src":"34721:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"34702:21:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"baseExpression":{"id":27793,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27598,"src":"34727:13:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":27795,"indexExpression":{"id":27794,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27719,"src":"34741:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34727:16:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34702:41:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27797,"nodeType":"ExpressionStatement","src":"34702:41:71"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27722,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27719,"src":"34029:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":27723,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27610,"src":"34033:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_RecoveryLocals_$27572_memory_ptr","typeString":"struct VaultExtension.RecoveryLocals memory"}},"id":27724,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34040:9:71","memberName":"numTokens","nodeType":"MemberAccess","referencedDeclaration":27563,"src":"34033:16:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34029:20:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27799,"initializationExpression":{"assignments":[27719],"declarations":[{"constant":false,"id":27719,"mutability":"mutable","name":"i","nameLocation":"34022:1:71","nodeType":"VariableDeclaration","scope":27799,"src":"34014:9:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27718,"name":"uint256","nodeType":"ElementaryTypeName","src":"34014:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":27721,"initialValue":{"hexValue":"30","id":27720,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34026:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"34014:13:71"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":27727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"34051:3:71","subExpression":{"id":27726,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27719,"src":"34053:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27728,"nodeType":"ExpressionStatement","src":"34051:3:71"},"nodeType":"ForStatement","src":"34009:745:71"},{"assignments":[27803],"declarations":[{"constant":false,"id":27803,"mutability":"mutable","name":"poolBalances","nameLocation":"35077:12:71","nodeType":"VariableDeclaration","scope":27876,"src":"35011:78:71","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"typeName":{"id":27802,"keyName":"tokenIndex","keyNameLocation":"35027:10:71","keyType":{"id":27800,"name":"uint256","nodeType":"ElementaryTypeName","src":"35019:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"35011:57:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"valueName":"packedTokenBalance","valueNameLocation":"35049:18:71","valueType":{"id":27801,"name":"bytes32","nodeType":"ElementaryTypeName","src":"35041:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},"visibility":"internal"}],"id":27807,"initialValue":{"baseExpression":{"id":27804,"name":"_poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28256,"src":"35092:18:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"}},"id":27806,"indexExpression":{"id":27805,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27575,"src":"35111:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"35092:24:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"nodeType":"VariableDeclarationStatement","src":"35011:105:71"},{"body":{"id":27837,"nodeType":"Block","src":"35174:140:71","statements":[{"expression":{"id":27823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":27819,"name":"packedBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27640,"src":"35188:14:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":27820,"name":"poolBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27803,"src":"35205:12:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"id":27822,"indexExpression":{"id":27821,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27809,"src":"35218:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"35205:15:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"35188:32:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":27824,"nodeType":"ExpressionStatement","src":"35188:32:71"},{"expression":{"id":27835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":27825,"name":"poolBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27803,"src":"35234:12:71","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"id":27827,"indexExpression":{"id":27826,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27809,"src":"35247:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"35234:15:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"expression":{"id":27830,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27610,"src":"35281:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_RecoveryLocals_$27572_memory_ptr","typeString":"struct VaultExtension.RecoveryLocals memory"}},"id":27831,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"35288:11:71","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":27569,"src":"35281:18:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":27833,"indexExpression":{"id":27832,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27809,"src":"35300:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"35281:21:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":27828,"name":"packedBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27640,"src":"35252:14:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":27829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"35267:13:71","memberName":"setBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":6257,"src":"35252:28:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":27834,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35252:51:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"35234:69:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":27836,"nodeType":"ExpressionStatement","src":"35234:69:71"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":27815,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27812,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27809,"src":"35147:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":27813,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27610,"src":"35151:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_RecoveryLocals_$27572_memory_ptr","typeString":"struct VaultExtension.RecoveryLocals memory"}},"id":27814,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"35158:9:71","memberName":"numTokens","nodeType":"MemberAccess","referencedDeclaration":27563,"src":"35151:16:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"35147:20:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27838,"initializationExpression":{"assignments":[27809],"declarations":[{"constant":false,"id":27809,"mutability":"mutable","name":"i","nameLocation":"35140:1:71","nodeType":"VariableDeclaration","scope":27838,"src":"35132:9:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27808,"name":"uint256","nodeType":"ElementaryTypeName","src":"35132:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":27811,"initialValue":{"hexValue":"30","id":27810,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"35144:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"35132:13:71"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":27817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"35169:3:71","subExpression":{"id":27816,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27809,"src":"35171:1:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27818,"nodeType":"ExpressionStatement","src":"35169:3:71"},"nodeType":"ForStatement","src":"35127:187:71"},{"expression":{"arguments":[{"id":27840,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27575,"src":"35340:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27841,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27577,"src":"35346:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":27842,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"35352:3:71","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":27843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"35356:6:71","memberName":"sender","nodeType":"MemberAccess","src":"35352:10:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27844,"name":"exactBptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27579,"src":"35364:16:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27839,"name":"_spendAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39428,"src":"35324:15:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":27845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35324:57:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27846,"nodeType":"ExpressionStatement","src":"35324:57:71"},{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":27847,"name":"_isQueryContext","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25605,"src":"35396:15:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":27848,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35396:17:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27856,"nodeType":"IfStatement","src":"35392:180:71","trueBody":{"id":27855,"nodeType":"Block","src":"35415:157:71","statements":[{"expression":{"arguments":[{"id":27850,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27575,"src":"35532:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27851,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27577,"src":"35538:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27852,"name":"exactBptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27579,"src":"35544:16:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27849,"name":"_queryModeBalanceIncrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38988,"src":"35506:25:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":27853,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35506:55:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27854,"nodeType":"ExpressionStatement","src":"35506:55:71"}]}},{"expression":{"arguments":[{"id":27858,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27575,"src":"35854:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27859,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27577,"src":"35860:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27860,"name":"exactBptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27579,"src":"35866:16:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":27857,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39222,"src":"35848:5:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":27861,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35848:35:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27862,"nodeType":"ExpressionStatement","src":"35848:35:71"},{"eventCall":{"arguments":[{"id":27864,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27575,"src":"35929:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27865,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27577,"src":"35947:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":27866,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4828,"src":"35965:19:71","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RemoveLiquidityKind_$4828_$","typeString":"type(enum RemoveLiquidityKind)"}},"id":27867,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"35985:12:71","memberName":"PROPORTIONAL","nodeType":"MemberAccess","referencedDeclaration":4824,"src":"35965:32:71","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},{"arguments":[{"id":27869,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27575,"src":"36024:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":27868,"name":"_totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38906,"src":"36011:12:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":27870,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36011:18:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":27871,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27598,"src":"36043:13:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":27872,"name":"locals","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27610,"src":"36070:6:71","typeDescriptions":{"typeIdentifier":"t_struct$_RecoveryLocals_$27572_memory_ptr","typeString":"struct VaultExtension.RecoveryLocals memory"}},"id":27873,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"36077:17:71","memberName":"swapFeeAmountsRaw","nodeType":"MemberAccess","referencedDeclaration":27566,"src":"36070:24:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":27863,"name":"LiquidityRemoved","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3890,"src":"35899:16:71","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_enum$_RemoveLiquidityKind_$4828_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,address,enum RemoveLiquidityKind,uint256,uint256[] memory,uint256[] memory)"}},"id":27874,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"35899:205:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27875,"nodeType":"EmitStatement","src":"35894:210:71"}]},"documentation":{"id":27573,"nodeType":"StructuredDocumentation","src":"31992:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"a07d6040","id":27877,"implemented":true,"kind":"function","modifiers":[{"id":27585,"kind":"modifierInvocation","modifierName":{"id":27584,"name":"onlyVaultDelegateCall","nameLocations":["32210:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"32210:21:71"},"nodeType":"ModifierInvocation","src":"32210:21:71"},{"id":27587,"kind":"modifierInvocation","modifierName":{"id":27586,"name":"onlyWhenUnlocked","nameLocations":["32240:16:71"],"nodeType":"IdentifierPath","referencedDeclaration":24848,"src":"32240:16:71"},"nodeType":"ModifierInvocation","src":"32240:16:71"},{"id":27589,"kind":"modifierInvocation","modifierName":{"id":27588,"name":"nonReentrant","nameLocations":["32265:12:71"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"32265:12:71"},"nodeType":"ModifierInvocation","src":"32265:12:71"},{"arguments":[{"id":27591,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27575,"src":"32306:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":27592,"kind":"modifierInvocation","modifierName":{"id":27590,"name":"withInitializedPool","nameLocations":["32286:19:71"],"nodeType":"IdentifierPath","referencedDeclaration":25131,"src":"32286:19:71"},"nodeType":"ModifierInvocation","src":"32286:25:71"},{"arguments":[{"id":27594,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27575,"src":"32339:4:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":27595,"kind":"modifierInvocation","modifierName":{"id":27593,"name":"onlyInRecoveryMode","nameLocations":["32320:18:71"],"nodeType":"IdentifierPath","referencedDeclaration":25557,"src":"32320:18:71"},"nodeType":"ModifierInvocation","src":"32320:24:71"}],"name":"removeLiquidityRecovery","nameLocation":"32037:23:71","nodeType":"FunctionDefinition","parameters":{"id":27583,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27575,"mutability":"mutable","name":"pool","nameLocation":"32078:4:71","nodeType":"VariableDeclaration","scope":27877,"src":"32070:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27574,"name":"address","nodeType":"ElementaryTypeName","src":"32070:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27577,"mutability":"mutable","name":"from","nameLocation":"32100:4:71","nodeType":"VariableDeclaration","scope":27877,"src":"32092:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":27576,"name":"address","nodeType":"ElementaryTypeName","src":"32092:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":27579,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"32122:16:71","nodeType":"VariableDeclaration","scope":27877,"src":"32114:24:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":27578,"name":"uint256","nodeType":"ElementaryTypeName","src":"32114:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":27582,"mutability":"mutable","name":"minAmountsOut","nameLocation":"32165:13:71","nodeType":"VariableDeclaration","scope":27877,"src":"32148:30:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":27580,"name":"uint256","nodeType":"ElementaryTypeName","src":"32148:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27581,"nodeType":"ArrayTypeName","src":"32148:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"32060:124:71"},"returnParameters":{"id":27599,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27598,"mutability":"mutable","name":"amountsOutRaw","nameLocation":"32379:13:71","nodeType":"VariableDeclaration","scope":27877,"src":"32362:30:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":27596,"name":"uint256","nodeType":"ElementaryTypeName","src":"32362:7:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":27597,"nodeType":"ArrayTypeName","src":"32362:9:71","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"32361:32:71"},"scope":28100,"src":"32028:4083:71","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":27884,"nodeType":"Block","src":"36442:41:71","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":27880,"name":"_setupQuery","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27919,"src":"36452:11:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":27881,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36452:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27882,"nodeType":"ExpressionStatement","src":"36452:13:71"},{"id":27883,"nodeType":"PlaceholderStatement","src":"36475:1:71"}]},"documentation":{"id":27878,"nodeType":"StructuredDocumentation","src":"36336:84:71","text":"@dev Ensure that only static calls are made to the functions with this modifier."},"id":27885,"name":"query","nameLocation":"36434:5:71","nodeType":"ModifierDefinition","parameters":{"id":27879,"nodeType":"ParameterList","parameters":[],"src":"36439:2:71"},"src":"36425:58:71","virtual":false,"visibility":"internal"},{"body":{"id":27918,"nodeType":"Block","src":"36521:377:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":27892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27888,"name":"EVMCallModeHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5808,"src":"36535:18:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_EVMCallModeHelpers_$5808_$","typeString":"type(library EVMCallModeHelpers)"}},"id":27889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"36554:12:71","memberName":"isStaticCall","nodeType":"MemberAccess","referencedDeclaration":5807,"src":"36535:31:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":27890,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36535:33:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":27891,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"36572:5:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"36535:42:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27899,"nodeType":"IfStatement","src":"36531:114:71","trueBody":{"id":27898,"nodeType":"Block","src":"36579:66:71","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27893,"name":"EVMCallModeHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5808,"src":"36600:18:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_EVMCallModeHelpers_$5808_$","typeString":"type(library EVMCallModeHelpers)"}},"id":27895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"36619:13:71","memberName":"NotStaticCall","nodeType":"MemberAccess","referencedDeclaration":5792,"src":"36600:32:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":27896,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36600:34:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":27897,"nodeType":"RevertStatement","src":"36593:41:71"}]}},{"assignments":[27901],"declarations":[{"constant":false,"id":27901,"mutability":"mutable","name":"_isQueryDisabled","nameLocation":"36660:16:71","nodeType":"VariableDeclaration","scope":27918,"src":"36655:21:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":27900,"name":"bool","nodeType":"ElementaryTypeName","src":"36655:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":27905,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":27902,"name":"_vaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28272,"src":"36679:15:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"id":27903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"36695:15:71","memberName":"isQueryDisabled","nodeType":"MemberAccess","referencedDeclaration":31218,"src":"36679:31:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_VaultStateBits_$31184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_VaultStateBits_$31184_$","typeString":"function (VaultStateBits) pure returns (bool)"}},"id":27904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36679:33:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"36655:57:71"},{"condition":{"id":27906,"name":"_isQueryDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27901,"src":"36726:16:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27911,"nodeType":"IfStatement","src":"36722:71:71","trueBody":{"id":27910,"nodeType":"Block","src":"36744:49:71","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":27907,"name":"QueriesDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3622,"src":"36765:15:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":27908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36765:17:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":27909,"nodeType":"RevertStatement","src":"36758:24:71"}]}},{"expression":{"arguments":[{"hexValue":"74727565","id":27915,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"36886:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":27912,"name":"_isUnlocked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28320,"src":"36865:11:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function () view returns (StorageSlotExtension.BooleanSlotType)"}},"id":27913,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36865:13:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":27914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"36879:6:71","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":10218,"src":"36865:20:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$10108_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":27916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"36865:26:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27917,"nodeType":"ExpressionStatement","src":"36865:26:71"}]},"id":27919,"implemented":true,"kind":"function","modifiers":[],"name":"_setupQuery","nameLocation":"36498:11:71","nodeType":"FunctionDefinition","parameters":{"id":27886,"nodeType":"ParameterList","parameters":[],"src":"36509:2:71"},"returnParameters":{"id":27887,"nodeType":"ParameterList","parameters":[],"src":"36521:0:71"},"scope":28100,"src":"36489:409:71","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"baseFunctions":[4392],"body":{"id":27938,"nodeType":"Block","src":"37043:136:71","statements":[{"expression":{"arguments":[{"id":27935,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27922,"src":"37167:4:71","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"components":[{"expression":{"id":27931,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"37142:3:71","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":27932,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37146:6:71","memberName":"sender","nodeType":"MemberAccess","src":"37142:10:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":27933,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"37141:12:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":27934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37154:12:71","memberName":"functionCall","nodeType":"MemberAccess","referencedDeclaration":40535,"src":"37141:25:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$attached_to$_t_address_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":27936,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37141:31:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":27930,"id":27937,"nodeType":"Return","src":"37134:38:71"}]},"documentation":{"id":27920,"nodeType":"StructuredDocumentation","src":"36904:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"edfa3568","id":27939,"implemented":true,"kind":"function","modifiers":[{"id":27925,"kind":"modifierInvocation","modifierName":{"id":27924,"name":"query","nameLocations":["36985:5:71"],"nodeType":"IdentifierPath","referencedDeclaration":27885,"src":"36985:5:71"},"nodeType":"ModifierInvocation","src":"36985:5:71"},{"id":27927,"kind":"modifierInvocation","modifierName":{"id":27926,"name":"onlyVaultDelegateCall","nameLocations":["36991:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"36991:21:71"},"nodeType":"ModifierInvocation","src":"36991:21:71"}],"name":"quote","nameLocation":"36949:5:71","nodeType":"FunctionDefinition","parameters":{"id":27923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27922,"mutability":"mutable","name":"data","nameLocation":"36970:4:71","nodeType":"VariableDeclaration","scope":27939,"src":"36955:19:71","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":27921,"name":"bytes","nodeType":"ElementaryTypeName","src":"36955:5:71","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"36954:21:71"},"returnParameters":{"id":27930,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27929,"mutability":"mutable","name":"result","nameLocation":"37035:6:71","nodeType":"VariableDeclaration","scope":27939,"src":"37022:19:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":27928,"name":"bytes","nodeType":"ElementaryTypeName","src":"37022:5:71","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"37021:21:71"},"scope":28100,"src":"36940:239:71","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[4398],"body":{"id":28002,"nodeType":"Block","src":"37303:945:71","statements":[{"assignments":[27950,27952],"declarations":[{"constant":false,"id":27950,"mutability":"mutable","name":"success","nameLocation":"37459:7:71","nodeType":"VariableDeclaration","scope":28002,"src":"37454:12:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":27949,"name":"bool","nodeType":"ElementaryTypeName","src":"37454:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":27952,"mutability":"mutable","name":"result","nameLocation":"37481:6:71","nodeType":"VariableDeclaration","scope":28002,"src":"37468:19:71","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":27951,"name":"bytes","nodeType":"ElementaryTypeName","src":"37468:5:71","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":27959,"initialValue":{"arguments":[{"id":27957,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27942,"src":"37509:4:71","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"expression":{"components":[{"expression":{"id":27953,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"37492:3:71","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":27954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37496:6:71","memberName":"sender","nodeType":"MemberAccess","src":"37492:10:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":27955,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"37491:12:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":27956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37504:4:71","memberName":"call","nodeType":"MemberAccess","src":"37491:17:71","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":27958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37491:23:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"37453:61:71"},{"condition":{"id":27960,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27950,"src":"37528:7:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":28000,"nodeType":"Block","src":"37811:431:71","statements":[{"assignments":[27978],"declarations":[{"constant":false,"id":27978,"mutability":"mutable","name":"errorSelector","nameLocation":"37944:13:71","nodeType":"VariableDeclaration","scope":28000,"src":"37937:20:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":27977,"name":"bytes4","nodeType":"ElementaryTypeName","src":"37937:6:71","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"id":27983,"initialValue":{"arguments":[{"id":27981,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27952,"src":"37986:6:71","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":27979,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6434,"src":"37960:11:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$6434_$","typeString":"type(library RevertCodec)"}},"id":27980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37972:13:71","memberName":"parseSelector","nodeType":"MemberAccess","referencedDeclaration":6415,"src":"37960:25:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes4_$","typeString":"function (bytes memory) pure returns (bytes4)"}},"id":27982,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37960:33:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"VariableDeclarationStatement","src":"37937:56:71"},{"condition":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":27988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":27984,"name":"errorSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27978,"src":"38011:13:71","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"expression":{"id":27985,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6434,"src":"38028:11:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$6434_$","typeString":"type(library RevertCodec)"}},"id":27986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"38040:6:71","memberName":"Result","nodeType":"MemberAccess","referencedDeclaration":6352,"src":"38028:18:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_bytes_memory_ptr_$returns$_t_error_$","typeString":"function (bytes memory) pure returns (error)"}},"id":27987,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"38047:8:71","memberName":"selector","nodeType":"MemberAccess","src":"38028:27:71","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"38011:44:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":27993,"nodeType":"IfStatement","src":"38007:110:71","trueBody":{"id":27992,"nodeType":"Block","src":"38057:60:71","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":27989,"name":"QuoteResultSpoofed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3767,"src":"38082:18:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":27990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38082:20:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":27991,"nodeType":"RevertStatement","src":"38075:27:71"}]}},{"expression":{"arguments":[{"id":27997,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27952,"src":"38224:6:71","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":27994,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6434,"src":"38197:11:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$6434_$","typeString":"type(library RevertCodec)"}},"id":27996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"38209:14:71","memberName":"bubbleUpRevert","nodeType":"MemberAccess","referencedDeclaration":6433,"src":"38197:26:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":27998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38197:34:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":27999,"nodeType":"ExpressionStatement","src":"38197:34:71"}]},"id":28001,"nodeType":"IfStatement","src":"37524:718:71","trueBody":{"id":27976,"nodeType":"Block","src":"37537:268:71","statements":[{"expression":{"arguments":[{"expression":{"id":27964,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"37674:3:71","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":27965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37678:6:71","memberName":"sender","nodeType":"MemberAccess","src":"37674:10:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":27966,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27950,"src":"37686:7:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":27967,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27952,"src":"37695:6:71","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":27961,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40714,"src":"37639:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$40714_$","typeString":"type(library Address)"}},"id":27963,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37647:26:71","memberName":"verifyCallResultFromTarget","nodeType":"MemberAccess","referencedDeclaration":40673,"src":"37639:34:71","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":27968,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37639:63:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":27969,"nodeType":"ExpressionStatement","src":"37639:63:71"},{"errorCall":{"arguments":[{"id":27973,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":27952,"src":"37787:6:71","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":27970,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6434,"src":"37768:11:71","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$6434_$","typeString":"type(library RevertCodec)"}},"id":27972,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"37780:6:71","memberName":"Result","nodeType":"MemberAccess","referencedDeclaration":6352,"src":"37768:18:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_bytes_memory_ptr_$returns$_t_error_$","typeString":"function (bytes memory) pure returns (error)"}},"id":27974,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"37768:26:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":27975,"nodeType":"RevertStatement","src":"37761:33:71"}]}}]},"documentation":{"id":27940,"nodeType":"StructuredDocumentation","src":"37185:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"757d64b3","id":28003,"implemented":true,"kind":"function","modifiers":[{"id":27945,"kind":"modifierInvocation","modifierName":{"id":27944,"name":"query","nameLocations":["37275:5:71"],"nodeType":"IdentifierPath","referencedDeclaration":27885,"src":"37275:5:71"},"nodeType":"ModifierInvocation","src":"37275:5:71"},{"id":27947,"kind":"modifierInvocation","modifierName":{"id":27946,"name":"onlyVaultDelegateCall","nameLocations":["37281:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"37281:21:71"},"nodeType":"ModifierInvocation","src":"37281:21:71"}],"name":"quoteAndRevert","nameLocation":"37230:14:71","nodeType":"FunctionDefinition","parameters":{"id":27943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27942,"mutability":"mutable","name":"data","nameLocation":"37260:4:71","nodeType":"VariableDeclaration","scope":28003,"src":"37245:19:71","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":27941,"name":"bytes","nodeType":"ElementaryTypeName","src":"37245:5:71","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"37244:21:71"},"returnParameters":{"id":27948,"nodeType":"ParameterList","parameters":[],"src":"37303:0:71"},"scope":28100,"src":"37221:1027:71","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[4404],"body":{"id":28015,"nodeType":"Block","src":"38368:57:71","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28011,"name":"_vaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28272,"src":"38385:15:71","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"id":28012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"38401:15:71","memberName":"isQueryDisabled","nodeType":"MemberAccess","referencedDeclaration":31218,"src":"38385:31:71","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_VaultStateBits_$31184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_VaultStateBits_$31184_$","typeString":"function (VaultStateBits) pure returns (bool)"}},"id":28013,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"38385:33:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":28010,"id":28014,"nodeType":"Return","src":"38378:40:71"}]},"documentation":{"id":28004,"nodeType":"StructuredDocumentation","src":"38254:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"b4aef0ab","id":28016,"implemented":true,"kind":"function","modifiers":[{"id":28007,"kind":"modifierInvocation","modifierName":{"id":28006,"name":"onlyVaultDelegateCall","nameLocations":["38331:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"38331:21:71"},"nodeType":"ModifierInvocation","src":"38331:21:71"}],"name":"isQueryDisabled","nameLocation":"38299:15:71","nodeType":"FunctionDefinition","parameters":{"id":28005,"nodeType":"ParameterList","parameters":[],"src":"38314:2:71"},"returnParameters":{"id":28010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28009,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28016,"src":"38362:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28008,"name":"bool","nodeType":"ElementaryTypeName","src":"38362:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"38361:6:71"},"scope":28100,"src":"38290:135:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4410],"body":{"id":28026,"nodeType":"Block","src":"38556:51:71","statements":[{"expression":{"id":28024,"name":"_queriesDisabledPermanently","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28281,"src":"38573:27:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":28023,"id":28025,"nodeType":"Return","src":"38566:34:71"}]},"documentation":{"id":28017,"nodeType":"StructuredDocumentation","src":"38431:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"13ef8a5d","id":28027,"implemented":true,"kind":"function","modifiers":[{"id":28020,"kind":"modifierInvocation","modifierName":{"id":28019,"name":"onlyVaultDelegateCall","nameLocations":["38519:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"38519:21:71"},"nodeType":"ModifierInvocation","src":"38519:21:71"}],"name":"isQueryDisabledPermanently","nameLocation":"38476:26:71","nodeType":"FunctionDefinition","parameters":{"id":28018,"nodeType":"ParameterList","parameters":[],"src":"38502:2:71"},"returnParameters":{"id":28023,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28022,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28027,"src":"38550:4:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28021,"name":"bool","nodeType":"ElementaryTypeName","src":"38550:4:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"38549:6:71"},"scope":28100,"src":"38467:140:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[4425],"body":{"id":28038,"nodeType":"Block","src":"38954:35:71","statements":[{"expression":{"id":28036,"name":"_authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28284,"src":"38971:11:71","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"}},"functionReturnParameters":28035,"id":28037,"nodeType":"Return","src":"38964:18:71"}]},"documentation":{"id":28028,"nodeType":"StructuredDocumentation","src":"38835:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"aaabadc5","id":28039,"implemented":true,"kind":"function","modifiers":[{"id":28031,"kind":"modifierInvocation","modifierName":{"id":28030,"name":"onlyVaultDelegateCall","nameLocations":["38910:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"38910:21:71"},"nodeType":"ModifierInvocation","src":"38910:21:71"}],"name":"getAuthorizer","nameLocation":"38880:13:71","nodeType":"FunctionDefinition","parameters":{"id":28029,"nodeType":"ParameterList","parameters":[],"src":"38893:2:71"},"returnParameters":{"id":28035,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28034,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28039,"src":"38941:11:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"},"typeName":{"id":28033,"nodeType":"UserDefinedTypeName","pathNode":{"id":28032,"name":"IAuthorizer","nameLocations":["38941:11:71"],"nodeType":"IdentifierPath","referencedDeclaration":1455,"src":"38941:11:71"},"referencedDeclaration":1455,"src":"38941:11:71","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"}},"visibility":"internal"}],"src":"38940:13:71"},"scope":28100,"src":"38871:118:71","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[40012],"body":{"id":28051,"nodeType":"Block","src":"39413:44:71","statements":[{"expression":{"arguments":[{"id":28048,"name":"_vaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25723,"src":"39438:11:71","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultAdmin_$3401","typeString":"contract IVaultAdmin"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVaultAdmin_$3401","typeString":"contract IVaultAdmin"}],"id":28047,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"39430:7:71","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":28046,"name":"address","nodeType":"ElementaryTypeName","src":"39430:7:71","typeDescriptions":{}}},"id":28049,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39430:20:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":28045,"id":28050,"nodeType":"Return","src":"39423:27:71"}]},"documentation":{"id":28040,"nodeType":"StructuredDocumentation","src":"39217:123:71","text":" @inheritdoc Proxy\n @dev Returns the VaultAdmin contract, to which fallback requests are forwarded."},"id":28052,"implemented":true,"kind":"function","modifiers":[],"name":"_implementation","nameLocation":"39354:15:71","nodeType":"FunctionDefinition","overrides":{"id":28042,"nodeType":"OverrideSpecifier","overrides":[],"src":"39386:8:71"},"parameters":{"id":28041,"nodeType":"ParameterList","parameters":[],"src":"39369:2:71"},"returnParameters":{"id":28045,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28044,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28052,"src":"39404:7:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28043,"name":"address","nodeType":"ElementaryTypeName","src":"39404:7:71","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"39403:9:71"},"scope":28100,"src":"39345:112:71","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[4418],"body":{"id":28073,"nodeType":"Block","src":"39655:69:71","statements":[{"eventCall":{"arguments":[{"expression":{"id":28067,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"39685:3:71","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":28068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"39689:6:71","memberName":"sender","nodeType":"MemberAccess","src":"39685:10:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28069,"name":"eventKey","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28055,"src":"39697:8:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":28070,"name":"eventData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28057,"src":"39707:9:71","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":28066,"name":"VaultAuxiliary","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4006,"src":"39670:14:71","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (address,bytes32,bytes memory)"}},"id":28071,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39670:47:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28072,"nodeType":"EmitStatement","src":"39665:52:71"}]},"documentation":{"id":28053,"nodeType":"StructuredDocumentation","src":"39463:31:71","text":"@inheritdoc IVaultExtension"},"functionSelector":"c8088247","id":28074,"implemented":true,"kind":"function","modifiers":[{"id":28060,"kind":"modifierInvocation","modifierName":{"id":28059,"name":"onlyVaultDelegateCall","nameLocations":["39602:21:71"],"nodeType":"IdentifierPath","referencedDeclaration":25731,"src":"39602:21:71"},"nodeType":"ModifierInvocation","src":"39602:21:71"},{"arguments":[{"expression":{"id":28062,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"39643:3:71","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":28063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"39647:6:71","memberName":"sender","nodeType":"MemberAccess","src":"39643:10:71","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":28064,"kind":"modifierInvocation","modifierName":{"id":28061,"name":"withRegisteredPool","nameLocations":["39624:18:71"],"nodeType":"IdentifierPath","referencedDeclaration":25120,"src":"39624:18:71"},"nodeType":"ModifierInvocation","src":"39624:30:71"}],"name":"emitAuxiliaryEvent","nameLocation":"39508:18:71","nodeType":"FunctionDefinition","parameters":{"id":28058,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28055,"mutability":"mutable","name":"eventKey","nameLocation":"39544:8:71","nodeType":"VariableDeclaration","scope":28074,"src":"39536:16:71","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":28054,"name":"bytes32","nodeType":"ElementaryTypeName","src":"39536:7:71","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":28057,"mutability":"mutable","name":"eventData","nameLocation":"39577:9:71","nodeType":"VariableDeclaration","scope":28074,"src":"39562:24:71","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":28056,"name":"bytes","nodeType":"ElementaryTypeName","src":"39562:5:71","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"39526:66:71"},"returnParameters":{"id":28065,"nodeType":"ParameterList","parameters":[],"src":"39655:0:71"},"scope":28100,"src":"39499:225:71","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":28080,"nodeType":"Block","src":"39982:42:71","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":28077,"name":"CannotReceiveEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3752,"src":"39999:16:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":28078,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"39999:18:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":28079,"nodeType":"RevertStatement","src":"39992:25:71"}]},"id":28081,"implemented":true,"kind":"receive","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":28075,"nodeType":"ParameterList","parameters":[],"src":"39962:2:71"},"returnParameters":{"id":28076,"nodeType":"ParameterList","parameters":[],"src":"39982:0:71"},"scope":28100,"src":"39955:69:71","stateMutability":"payable","virtual":false,"visibility":"external"},{"baseFunctions":[40030],"body":{"id":28098,"nodeType":"Block","src":"40338:107:71","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":28086,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"40352:3:71","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":28087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"40356:5:71","memberName":"value","nodeType":"MemberAccess","src":"40352:9:71","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":28088,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"40364:1:71","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"40352:13:71","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":28094,"nodeType":"IfStatement","src":"40348:69:71","trueBody":{"id":28093,"nodeType":"Block","src":"40367:50:71","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":28090,"name":"CannotReceiveEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3752,"src":"40388:16:71","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":28091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"40388:18:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":28092,"nodeType":"RevertStatement","src":"40381:25:71"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":28095,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40022,"src":"40427:9:71","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":28096,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"40427:11:71","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28097,"nodeType":"ExpressionStatement","src":"40427:11:71"}]},"documentation":{"id":28082,"nodeType":"StructuredDocumentation","src":"40074:222:71","text":" @inheritdoc Proxy\n @dev Override proxy implementation of `fallback` to disallow incoming ETH transfers.\n This function actually returns whatever the VaultAdmin does when handling the request."},"id":28099,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","overrides":{"id":28084,"nodeType":"OverrideSpecifier","overrides":[],"src":"40329:8:71"},"parameters":{"id":28083,"nodeType":"ParameterList","parameters":[],"src":"40309:2:71"},"returnParameters":{"id":28085,"nodeType":"ParameterList","parameters":[],"src":"40338:0:71"},"scope":28100,"src":"40301:144:71","stateMutability":"payable","virtual":false,"visibility":"external"}],"scope":28101,"src":"3171:37276:71","usedErrors":[1823,3413,3418,3423,3428,3437,3443,3446,3449,3452,3455,3458,3461,3470,3473,3476,3479,3482,3485,3488,3491,3494,3497,3500,3503,3506,3509,3512,3518,3525,3532,3535,3538,3548,3558,3565,3568,3571,3574,3584,3594,3601,3604,3607,3610,3613,3616,3619,3622,3625,3630,3635,3640,3643,3646,3649,3652,3655,3660,3665,3670,3676,3682,3685,3693,3699,3705,3708,3711,3714,3719,3729,3739,3746,3749,3752,3755,3758,3761,3764,3767,5792,5901,5910,6207,6352,6355,7498,7501,9886,39870,39875,39880,39889,39894,39899,40469,40474,40477,43255],"usedEvents":[3806,3811,3830,3842,3854,3872,3890,3895,3898,3901,3908,3915,3922,3929,3936,3942,3948,3960,3970,3980,3992,3997,4006,38865,38876]}],"src":"46:40402:71"},"id":71},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","exportedSymbols":{"IVault":[3111],"IVaultErrors":[3768],"VaultGuard":[28149]},"id":28150,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":28102,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:72"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":28104,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28150,"sourceUnit":3769,"src":"72:93:72","symbolAliases":[{"foreign":{"id":28103,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"81:12:72","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":28106,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28150,"sourceUnit":3112,"src":"166:81:72","symbolAliases":[{"foreign":{"id":28105,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"175:6:72","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"VaultGuard","contractDependencies":[],"contractKind":"contract","documentation":{"id":28107,"nodeType":"StructuredDocumentation","src":"249:59:72","text":"@notice Contract that shares the modifier `onlyVault`."},"fullyImplemented":true,"id":28149,"linearizedBaseContracts":[28149],"name":"VaultGuard","nameLocation":"317:10:72","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":28110,"mutability":"immutable","name":"_vault","nameLocation":"360:6:72","nodeType":"VariableDeclaration","scope":28149,"src":"334:32:72","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":28109,"nodeType":"UserDefinedTypeName","pathNode":{"id":28108,"name":"IVault","nameLocations":["334:6:72"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"334:6:72"},"referencedDeclaration":3111,"src":"334:6:72","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"},{"body":{"id":28120,"nodeType":"Block","src":"399:31:72","statements":[{"expression":{"id":28118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":28116,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"409:6:72","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":28117,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28113,"src":"418:5:72","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"src":"409:14:72","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":28119,"nodeType":"ExpressionStatement","src":"409:14:72"}]},"id":28121,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":28114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28113,"mutability":"mutable","name":"vault","nameLocation":"392:5:72","nodeType":"VariableDeclaration","scope":28121,"src":"385:12:72","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":28112,"nodeType":"UserDefinedTypeName","pathNode":{"id":28111,"name":"IVault","nameLocations":["385:6:72"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"385:6:72"},"referencedDeclaration":3111,"src":"385:6:72","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"}],"src":"384:14:72"},"returnParameters":{"id":28115,"nodeType":"ParameterList","parameters":[],"src":"399:0:72"},"scope":28149,"src":"373:57:72","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":28127,"nodeType":"Block","src":"457:46:72","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":28123,"name":"_ensureOnlyVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28148,"src":"467:16:72","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":28124,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"467:18:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":28125,"nodeType":"ExpressionStatement","src":"467:18:72"},{"id":28126,"nodeType":"PlaceholderStatement","src":"495:1:72"}]},"id":28128,"name":"onlyVault","nameLocation":"445:9:72","nodeType":"ModifierDefinition","parameters":{"id":28122,"nodeType":"ParameterList","parameters":[],"src":"454:2:72"},"src":"436:67:72","virtual":false,"visibility":"internal"},{"body":{"id":28147,"nodeType":"Block","src":"550:124:72","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":28137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":28131,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"564:3:72","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":28132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"568:6:72","memberName":"sender","nodeType":"MemberAccess","src":"564:10:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":28135,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"586:6:72","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}],"id":28134,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"578:7:72","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":28133,"name":"address","nodeType":"ElementaryTypeName","src":"578:7:72","typeDescriptions":{}}},"id":28136,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"578:15:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"564:29:72","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":28146,"nodeType":"IfStatement","src":"560:108:72","trueBody":{"id":28145,"nodeType":"Block","src":"595:73:72","statements":[{"errorCall":{"arguments":[{"expression":{"id":28141,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"646:3:72","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":28142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"650:6:72","memberName":"sender","nodeType":"MemberAccess","src":"646:10:72","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":28138,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"616:12:72","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3768_$","typeString":"type(contract IVaultErrors)"}},"id":28140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"629:16:72","memberName":"SenderIsNotVault","nodeType":"MemberAccess","referencedDeclaration":3640,"src":"616:29:72","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":28143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"616:41:72","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":28144,"nodeType":"RevertStatement","src":"609:48:72"}]}}]},"id":28148,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureOnlyVault","nameLocation":"518:16:72","nodeType":"FunctionDefinition","parameters":{"id":28129,"nodeType":"ParameterList","parameters":[],"src":"534:2:72"},"returnParameters":{"id":28130,"nodeType":"ParameterList","parameters":[],"src":"550:0:72"},"scope":28149,"src":"509:165:72","stateMutability":"view","virtual":false,"visibility":"private"}],"scope":28150,"src":"308:368:72","usedErrors":[],"usedEvents":[]}],"src":"46:631:72"},"id":72},"@balancer-labs/v3-vault/contracts/VaultStorage.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultStorage.sol","exportedSymbols":{"AddLiquidityKind":[4807],"AddLiquidityParams":[4823],"AfterSwapParams":[4801],"BufferWrapOrUnwrapParams":[4862],"FEE_BITLENGTH":[4865],"FEE_SCALING_FACTOR":[4868],"HookFlags":[4627],"HooksConfig":[4651],"IAuthorizer":[1455],"IERC20":[40109],"IERC4626":[39833],"IHooks":[2026],"IProtocolFeeController":[2420],"IRateProvider":[263],"IVaultExtension":[4426],"LiquidityManagement":[4580],"MAX_FEE_PERCENTAGE":[4871],"PoolConfig":[4605],"PoolConfigBits":[4582],"PoolData":[4729],"PoolRoleAccounts":[4677],"PoolSwapParams":[4772],"RemoveLiquidityKind":[4828],"RemoveLiquidityParams":[4844],"Rounding":[4732],"StorageSlotExtension":[10285],"SwapKind":[4735],"SwapState":[4661],"TokenConfig":[4694],"TokenDeltaMappingSlotType":[6858],"TokenInfo":[4704],"TokenType":[4681],"TransientStorageHelpers":[7442],"UintToAddressToBooleanMappingSlot":[6862],"VaultState":[4669],"VaultStateBits":[31184],"VaultStorage":[28384],"VaultSwapParams":[4754],"WrappingDirection":[4847]},"id":28385,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":28151,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:73"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":28153,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28385,"sourceUnit":40110,"src":"72:72:73","symbolAliases":[{"foreign":{"id":28152,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"81:6:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":28155,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28385,"sourceUnit":2421,"src":"146:113:73","symbolAliases":[{"foreign":{"id":28154,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2420,"src":"155:22:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","id":28157,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28385,"sourceUnit":4427,"src":"260:99:73","symbolAliases":[{"foreign":{"id":28156,"name":"IVaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4426,"src":"269:15:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":28159,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28385,"sourceUnit":1456,"src":"360:91:73","symbolAliases":[{"foreign":{"id":28158,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1455,"src":"369:11:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","id":28161,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28385,"sourceUnit":2027,"src":"452:81:73","symbolAliases":[{"foreign":{"id":28160,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2026,"src":"461:6:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":28162,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28385,"sourceUnit":4872,"src":"534:69:73","symbolAliases":[],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","id":28164,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28385,"sourceUnit":10286,"src":"605:120:73","symbolAliases":[{"foreign":{"id":28163,"name":"StorageSlotExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10285,"src":"614:20:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","id":28168,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28385,"sourceUnit":7443,"src":"726:195:73","symbolAliases":[{"foreign":{"id":28165,"name":"TransientStorageHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7442,"src":"739:23:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":28166,"name":"TokenDeltaMappingSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6858,"src":"768:25:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":28167,"name":"UintToAddressToBooleanMappingSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6862,"src":"799:33:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/VaultStateLib.sol","file":"./lib/VaultStateLib.sol","id":28170,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28385,"sourceUnit":31326,"src":"923:57:73","symbolAliases":[{"foreign":{"id":28169,"name":"VaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31184,"src":"932:14:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/PoolConfigLib.sol","file":"./lib/PoolConfigLib.sol","id":28172,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":28385,"sourceUnit":30442,"src":"981:57:73","symbolAliases":[{"foreign":{"id":28171,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"990:14:73","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"VaultStorage","contractDependencies":[],"contractKind":"contract","documentation":{"id":28173,"nodeType":"StructuredDocumentation","src":"1077:299:73","text":" @notice Storage layout for the Vault.\n @dev This contract has no code, but is inherited by all three Vault contracts. In order to ensure that *only* the\n Vault contract's storage is actually used, calls to the extension contracts must be delegate calls made through the\n main Vault."},"fullyImplemented":true,"id":28384,"linearizedBaseContracts":[28384],"name":"VaultStorage","nameLocation":"1386:12:73","nodeType":"ContractDefinition","nodes":[{"global":false,"id":28175,"libraryName":{"id":28174,"name":"StorageSlotExtension","nameLocations":["1411:20:73"],"nodeType":"IdentifierPath","referencedDeclaration":10285,"src":"1411:20:73"},"nodeType":"UsingForDirective","src":"1405:33:73"},{"constant":true,"id":28178,"mutability":"constant","name":"_MIN_TOKENS","nameLocation":"1732:11:73","nodeType":"VariableDeclaration","scope":28384,"src":"1706:41:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28176,"name":"uint256","nodeType":"ElementaryTypeName","src":"1706:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"32","id":28177,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1746:1:73","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"visibility":"internal"},{"constant":true,"id":28181,"mutability":"constant","name":"_MAX_TOKENS","nameLocation":"1899:11:73","nodeType":"VariableDeclaration","scope":28384,"src":"1873:41:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28179,"name":"uint256","nodeType":"ElementaryTypeName","src":"1873:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"38","id":28180,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1913:1:73","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"visibility":"internal"},{"constant":true,"id":28184,"mutability":"constant","name":"_MAX_TOKEN_DECIMALS","nameLocation":"2058:19:73","nodeType":"VariableDeclaration","scope":28384,"src":"2034:48:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":28182,"name":"uint8","nodeType":"ElementaryTypeName","src":"2034:5:73","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"3138","id":28183,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2080:2:73","typeDescriptions":{"typeIdentifier":"t_rational_18_by_1","typeString":"int_const 18"},"value":"18"},"visibility":"internal"},{"constant":true,"id":28189,"mutability":"constant","name":"_MAX_PAUSE_WINDOW_DURATION","nameLocation":"2165:26:73","nodeType":"VariableDeclaration","scope":28384,"src":"2139:67:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28185,"name":"uint256","nodeType":"ElementaryTypeName","src":"2139:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_rational_126144000_by_1","typeString":"int_const 126144000"},"id":28188,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"333635","id":28186,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2194:8:73","subdenomination":"days","typeDescriptions":{"typeIdentifier":"t_rational_31536000_by_1","typeString":"int_const 31536000"},"value":"365"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"34","id":28187,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2205:1:73","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"2194:12:73","typeDescriptions":{"typeIdentifier":"t_rational_126144000_by_1","typeString":"int_const 126144000"}},"visibility":"internal"},{"constant":true,"id":28192,"mutability":"constant","name":"_MAX_BUFFER_PERIOD_DURATION","nameLocation":"2238:27:73","nodeType":"VariableDeclaration","scope":28384,"src":"2212:64:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28190,"name":"uint256","nodeType":"ElementaryTypeName","src":"2212:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"313830","id":28191,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2268:8:73","subdenomination":"days","typeDescriptions":{"typeIdentifier":"t_rational_15552000_by_1","typeString":"int_const 15552000"},"value":"180"},"visibility":"internal"},{"constant":false,"id":28194,"mutability":"immutable","name":"_MINIMUM_TRADE_AMOUNT","nameLocation":"2509:21:73","nodeType":"VariableDeclaration","scope":28384,"src":"2482:48:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28193,"name":"uint256","nodeType":"ElementaryTypeName","src":"2482:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":28196,"mutability":"immutable","name":"_MINIMUM_WRAP_AMOUNT","nameLocation":"2721:20:73","nodeType":"VariableDeclaration","scope":28384,"src":"2694:47:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28195,"name":"uint256","nodeType":"ElementaryTypeName","src":"2694:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":28201,"mutability":"immutable","name":"_IS_UNLOCKED_SLOT","nameLocation":"3380:17:73","nodeType":"VariableDeclaration","scope":28384,"src":"3354:86:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":28197,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3354:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"6973556e6c6f636b6564","id":28199,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3427:12:73","typeDescriptions":{"typeIdentifier":"t_stringliteral_a510d743a7e777ee75c062642dc8c16fed516063b6963ca8d80c87d268ce0db7","typeString":"literal_string \"isUnlocked\""},"value":"isUnlocked"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_a510d743a7e777ee75c062642dc8c16fed516063b6963ca8d80c87d268ce0db7","typeString":"literal_string \"isUnlocked\""}],"id":28198,"name":"_calculateVaultStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28383,"src":"3400:26:73","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":28200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3400:40:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":28206,"mutability":"immutable","name":"_NON_ZERO_DELTA_COUNT_SLOT","nameLocation":"3472:26:73","nodeType":"VariableDeclaration","scope":28384,"src":"3446:102:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":28202,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3446:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"6e6f6e5a65726f44656c7461436f756e74","id":28204,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3528:19:73","typeDescriptions":{"typeIdentifier":"t_stringliteral_20641895e8df322512adcd6373d3c6096d4e0152b30bd6a461d49c5bf2ba6634","typeString":"literal_string \"nonZeroDeltaCount\""},"value":"nonZeroDeltaCount"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_20641895e8df322512adcd6373d3c6096d4e0152b30bd6a461d49c5bf2ba6634","typeString":"literal_string \"nonZeroDeltaCount\""}],"id":28203,"name":"_calculateVaultStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28383,"src":"3501:26:73","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":28205,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3501:47:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":28211,"mutability":"immutable","name":"_TOKEN_DELTAS_SLOT","nameLocation":"3580:18:73","nodeType":"VariableDeclaration","scope":28384,"src":"3554:88:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":28207,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3554:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"746f6b656e44656c746173","id":28209,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3628:13:73","typeDescriptions":{"typeIdentifier":"t_stringliteral_f30c7b7598180f2aeb106e995ea0047da95f7a2b6d28dcb1281ac7f231dea1dd","typeString":"literal_string \"tokenDeltas\""},"value":"tokenDeltas"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_f30c7b7598180f2aeb106e995ea0047da95f7a2b6d28dcb1281ac7f231dea1dd","typeString":"literal_string \"tokenDeltas\""}],"id":28208,"name":"_calculateVaultStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28383,"src":"3601:26:73","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":28210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3601:41:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":28216,"mutability":"immutable","name":"_ADD_LIQUIDITY_CALLED_SLOT","nameLocation":"3674:26:73","nodeType":"VariableDeclaration","scope":28384,"src":"3648:103:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":28212,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3648:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"6164644c697175696469747943616c6c6564","id":28214,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3730:20:73","typeDescriptions":{"typeIdentifier":"t_stringliteral_7841a116c280f8c1ac8b69abca4cf7c2e40d11cf0658dc5b3f9204db134a8494","typeString":"literal_string \"addLiquidityCalled\""},"value":"addLiquidityCalled"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_7841a116c280f8c1ac8b69abca4cf7c2e40d11cf0658dc5b3f9204db134a8494","typeString":"literal_string \"addLiquidityCalled\""}],"id":28213,"name":"_calculateVaultStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28383,"src":"3703:26:73","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":28215,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3703:48:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":28221,"mutability":"immutable","name":"_SESSION_ID_SLOT","nameLocation":"3783:16:73","nodeType":"VariableDeclaration","scope":28384,"src":"3757:84:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":28217,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3757:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"73657373696f6e4964","id":28219,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3829:11:73","typeDescriptions":{"typeIdentifier":"t_stringliteral_7665db96508d50e1824f5dc8219e0168a78d13b9d608109c1eeac31853406877","typeString":"literal_string \"sessionId\""},"value":"sessionId"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_7665db96508d50e1824f5dc8219e0168a78d13b9d608109c1eeac31853406877","typeString":"literal_string \"sessionId\""}],"id":28218,"name":"_calculateVaultStorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28383,"src":"3802:26:73","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory) pure returns (bytes32)"}},"id":28220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3802:39:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":28226,"mutability":"mutable","name":"_poolConfigBits","nameLocation":"4248:15:73","nodeType":"VariableDeclaration","scope":28384,"src":"4188:75:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"},"typeName":{"id":28225,"keyName":"pool","keyNameLocation":"4204:4:73","keyType":{"id":28222,"name":"address","nodeType":"ElementaryTypeName","src":"4196:7:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"4188:50:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"},"valueName":"poolConfig","valueNameLocation":"4227:10:73","valueType":{"id":28224,"nodeType":"UserDefinedTypeName","pathNode":{"id":28223,"name":"PoolConfigBits","nameLocations":["4212:14:73"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"4212:14:73"},"referencedDeclaration":4582,"src":"4212:14:73","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}},"visibility":"internal"},{"constant":false,"id":28231,"mutability":"mutable","name":"_poolRoleAccounts","nameLocation":"4411:17:73","nodeType":"VariableDeclaration","scope":28384,"src":"4347:81:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolRoleAccounts_$4677_storage_$","typeString":"mapping(address => struct PoolRoleAccounts)"},"typeName":{"id":28230,"keyName":"pool","keyNameLocation":"4363:4:73","keyType":{"id":28227,"name":"address","nodeType":"ElementaryTypeName","src":"4355:7:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"4347:54:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolRoleAccounts_$4677_storage_$","typeString":"mapping(address => struct PoolRoleAccounts)"},"valueName":"roleAccounts","valueNameLocation":"4388:12:73","valueType":{"id":28229,"nodeType":"UserDefinedTypeName","pathNode":{"id":28228,"name":"PoolRoleAccounts","nameLocations":["4371:16:73"],"nodeType":"IdentifierPath","referencedDeclaration":4677,"src":"4371:16:73"},"referencedDeclaration":4677,"src":"4371:16:73","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage_ptr","typeString":"struct PoolRoleAccounts"}}},"visibility":"internal"},{"constant":false,"id":28236,"mutability":"mutable","name":"_hooksContracts","nameLocation":"4544:15:73","nodeType":"VariableDeclaration","scope":28384,"src":"4489:70:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IHooks_$2026_$","typeString":"mapping(address => contract IHooks)"},"typeName":{"id":28235,"keyName":"pool","keyNameLocation":"4505:4:73","keyType":{"id":28232,"name":"address","nodeType":"ElementaryTypeName","src":"4497:7:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"4489:45:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IHooks_$2026_$","typeString":"mapping(address => contract IHooks)"},"valueName":"hooksContract","valueNameLocation":"4520:13:73","valueType":{"id":28234,"nodeType":"UserDefinedTypeName","pathNode":{"id":28233,"name":"IHooks","nameLocations":["4513:6:73"],"nodeType":"IdentifierPath","referencedDeclaration":2026,"src":"4513:6:73"},"referencedDeclaration":2026,"src":"4513:6:73","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}}},"visibility":"internal"},{"constant":false,"id":28242,"mutability":"mutable","name":"_poolTokens","nameLocation":"4672:11:73","nodeType":"VariableDeclaration","scope":28384,"src":"4618:65:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_contract$_IERC20_$40109_$dyn_storage_$","typeString":"mapping(address => contract IERC20[])"},"typeName":{"id":28241,"keyName":"pool","keyNameLocation":"4634:4:73","keyType":{"id":28237,"name":"address","nodeType":"ElementaryTypeName","src":"4626:7:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"4618:44:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_contract$_IERC20_$40109_$dyn_storage_$","typeString":"mapping(address => contract IERC20[])"},"valueName":"poolTokens","valueNameLocation":"4651:10:73","valueType":{"baseType":{"id":28239,"nodeType":"UserDefinedTypeName","pathNode":{"id":28238,"name":"IERC20","nameLocations":["4642:6:73"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"4642:6:73"},"referencedDeclaration":40109,"src":"4642:6:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":28240,"nodeType":"ArrayTypeName","src":"4642:8:73","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}}},"visibility":"internal"},{"constant":false,"id":28250,"mutability":"mutable","name":"_poolTokenInfo","nameLocation":"4823:14:73","nodeType":"VariableDeclaration","scope":28384,"src":"4744:93:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_struct$_TokenInfo_$4704_storage_$_$","typeString":"mapping(address => mapping(contract IERC20 => struct TokenInfo))"},"typeName":{"id":28249,"keyName":"pool","keyNameLocation":"4760:4:73","keyType":{"id":28243,"name":"address","nodeType":"ElementaryTypeName","src":"4752:7:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"4744:69:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_struct$_TokenInfo_$4704_storage_$_$","typeString":"mapping(address => mapping(contract IERC20 => struct TokenInfo))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":28248,"keyName":"token","keyNameLocation":"4783:5:73","keyType":{"id":28245,"nodeType":"UserDefinedTypeName","pathNode":{"id":28244,"name":"IERC20","nameLocations":["4776:6:73"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"4776:6:73"},"referencedDeclaration":40109,"src":"4776:6:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"4768:44:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_struct$_TokenInfo_$4704_storage_$","typeString":"mapping(contract IERC20 => struct TokenInfo)"},"valueName":"tokenInfo","valueNameLocation":"4802:9:73","valueType":{"id":28247,"nodeType":"UserDefinedTypeName","pathNode":{"id":28246,"name":"TokenInfo","nameLocations":["4792:9:73"],"nodeType":"IdentifierPath","referencedDeclaration":4704,"src":"4792:9:73"},"referencedDeclaration":4704,"src":"4792:9:73","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_storage_ptr","typeString":"struct TokenInfo"}}}},"visibility":"internal"},{"constant":false,"id":28256,"mutability":"mutable","name":"_poolTokenBalances","nameLocation":"5226:18:73","nodeType":"VariableDeclaration","scope":28384,"src":"5134:110:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"},"typeName":{"id":28255,"keyName":"pool","keyNameLocation":"5150:4:73","keyType":{"id":28251,"name":"address","nodeType":"ElementaryTypeName","src":"5142:7:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5134:82:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":28254,"keyName":"tokenIndex","keyNameLocation":"5174:10:73","keyType":{"id":28252,"name":"uint256","nodeType":"ElementaryTypeName","src":"5166:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"5158:57:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"valueName":"packedTokenBalance","valueNameLocation":"5196:18:73","valueType":{"id":28253,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5188:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}}},"visibility":"internal"},{"constant":false,"id":28263,"mutability":"mutable","name":"_aggregateFeeAmounts","nameLocation":"5597:20:73","nodeType":"VariableDeclaration","scope":28384,"src":"5513:104:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$_$","typeString":"mapping(address => mapping(contract IERC20 => bytes32))"},"typeName":{"id":28262,"keyName":"pool","keyNameLocation":"5529:4:73","keyType":{"id":28257,"name":"address","nodeType":"ElementaryTypeName","src":"5521:7:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"5513:74:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$_$","typeString":"mapping(address => mapping(contract IERC20 => bytes32))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":28261,"keyName":"token","keyNameLocation":"5552:5:73","keyType":{"id":28259,"nodeType":"UserDefinedTypeName","pathNode":{"id":28258,"name":"IERC20","nameLocations":["5545:6:73"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"5545:6:73"},"referencedDeclaration":40109,"src":"5545:6:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"5537:49:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$","typeString":"mapping(contract IERC20 => bytes32)"},"valueName":"packedFeeAmounts","valueNameLocation":"5569:16:73","valueType":{"id":28260,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5561:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}}},"visibility":"internal"},{"constant":false,"id":28265,"mutability":"immutable","name":"_vaultPauseWindowEndTime","nameLocation":"5980:24:73","nodeType":"VariableDeclaration","scope":28384,"src":"5954:50:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":28264,"name":"uint32","nodeType":"ElementaryTypeName","src":"5954:6:73","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":28267,"mutability":"immutable","name":"_vaultBufferPeriodEndTime","nameLocation":"6036:25:73","nodeType":"VariableDeclaration","scope":28384,"src":"6010:51:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":28266,"name":"uint32","nodeType":"ElementaryTypeName","src":"6010:6:73","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":28269,"mutability":"immutable","name":"_vaultBufferPeriodDuration","nameLocation":"6170:26:73","nodeType":"VariableDeclaration","scope":28384,"src":"6144:52:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":28268,"name":"uint32","nodeType":"ElementaryTypeName","src":"6144:6:73","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":28272,"mutability":"mutable","name":"_vaultStateBits","nameLocation":"6296:15:73","nodeType":"VariableDeclaration","scope":28384,"src":"6272:39:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"},"typeName":{"id":28271,"nodeType":"UserDefinedTypeName","pathNode":{"id":28270,"name":"VaultStateBits","nameLocations":["6272:14:73"],"nodeType":"IdentifierPath","referencedDeclaration":31184,"src":"6272:14:73"},"referencedDeclaration":31184,"src":"6272:14:73","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"visibility":"internal"},{"constant":false,"documentation":{"id":28273,"nodeType":"StructuredDocumentation","src":"6318:159:73","text":" @dev Represents the total reserve of each ERC20 token. It should be always equal to `token.balanceOf(vault)`,\n except during `unlock`."},"id":28278,"mutability":"mutable","name":"_reservesOf","nameLocation":"6537:11:73","nodeType":"VariableDeclaration","scope":28384,"src":"6482:66:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"},"typeName":{"id":28277,"keyName":"token","keyNameLocation":"6497:5:73","keyType":{"id":28275,"nodeType":"UserDefinedTypeName","pathNode":{"id":28274,"name":"IERC20","nameLocations":["6490:6:73"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"6490:6:73"},"referencedDeclaration":40109,"src":"6490:6:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"6482:45:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"},"valueName":"vaultBalance","valueNameLocation":"6514:12:73","valueType":{"id":28276,"name":"uint256","nodeType":"ElementaryTypeName","src":"6506:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"documentation":{"id":28279,"nodeType":"StructuredDocumentation","src":"6555:48:73","text":"@dev Flag that prevents re-enabling queries."},"id":28281,"mutability":"mutable","name":"_queriesDisabledPermanently","nameLocation":"6622:27:73","nodeType":"VariableDeclaration","scope":28384,"src":"6608:41:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28280,"name":"bool","nodeType":"ElementaryTypeName","src":"6608:4:73","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":28284,"mutability":"mutable","name":"_authorizer","nameLocation":"6954:11:73","nodeType":"VariableDeclaration","scope":28384,"src":"6933:32:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"},"typeName":{"id":28283,"nodeType":"UserDefinedTypeName","pathNode":{"id":28282,"name":"IAuthorizer","nameLocations":["6933:11:73"],"nodeType":"IdentifierPath","referencedDeclaration":1455,"src":"6933:11:73"},"referencedDeclaration":1455,"src":"6933:11:73","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"}},"visibility":"internal"},{"constant":false,"id":28287,"mutability":"mutable","name":"_protocolFeeController","nameLocation":"7065:22:73","nodeType":"VariableDeclaration","scope":28384,"src":"7033:54:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"},"typeName":{"id":28286,"nodeType":"UserDefinedTypeName","pathNode":{"id":28285,"name":"IProtocolFeeController","nameLocations":["7033:22:73"],"nodeType":"IdentifierPath","referencedDeclaration":2420,"src":"7033:22:73"},"referencedDeclaration":2420,"src":"7033:22:73","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}},"visibility":"internal"},{"constant":false,"id":28292,"mutability":"mutable","name":"_bufferTokenBalances","nameLocation":"8207:20:73","nodeType":"VariableDeclaration","scope":28384,"src":"8137:90:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_bytes32_$","typeString":"mapping(contract IERC4626 => bytes32)"},"typeName":{"id":28291,"keyName":"wrappedToken","keyNameLocation":"8154:12:73","keyType":{"id":28289,"nodeType":"UserDefinedTypeName","pathNode":{"id":28288,"name":"IERC4626","nameLocations":["8145:8:73"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"8145:8:73"},"referencedDeclaration":39833,"src":"8145:8:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"nodeType":"Mapping","src":"8137:60:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_bytes32_$","typeString":"mapping(contract IERC4626 => bytes32)"},"valueName":"packedTokenBalance","valueNameLocation":"8178:18:73","valueType":{"id":28290,"name":"bytes32","nodeType":"ElementaryTypeName","src":"8170:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},"visibility":"internal"},{"constant":false,"id":28299,"mutability":"mutable","name":"_bufferLpShares","nameLocation":"8549:15:73","nodeType":"VariableDeclaration","scope":28384,"src":"8462:102:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(contract IERC4626 => mapping(address => uint256))"},"typeName":{"id":28298,"keyName":"wrappedToken","keyNameLocation":"8479:12:73","keyType":{"id":28294,"nodeType":"UserDefinedTypeName","pathNode":{"id":28293,"name":"IERC4626","nameLocations":["8470:8:73"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"8470:8:73"},"referencedDeclaration":39833,"src":"8470:8:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"nodeType":"Mapping","src":"8462:77:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(contract IERC4626 => mapping(address => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":28297,"keyName":"user","keyNameLocation":"8511:4:73","keyType":{"id":28295,"name":"address","nodeType":"ElementaryTypeName","src":"8503:7:73","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"8495:43:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"userShares","valueNameLocation":"8527:10:73","valueType":{"id":28296,"name":"uint256","nodeType":"ElementaryTypeName","src":"8519:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"internal"},{"constant":false,"id":28304,"mutability":"mutable","name":"_bufferTotalShares","nameLocation":"8658:18:73","nodeType":"VariableDeclaration","scope":28384,"src":"8595:81:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_uint256_$","typeString":"mapping(contract IERC4626 => uint256)"},"typeName":{"id":28303,"keyName":"wrappedToken","keyNameLocation":"8612:12:73","keyType":{"id":28301,"nodeType":"UserDefinedTypeName","pathNode":{"id":28300,"name":"IERC4626","nameLocations":["8603:8:73"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"8603:8:73"},"referencedDeclaration":39833,"src":"8603:8:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"nodeType":"Mapping","src":"8595:53:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_uint256_$","typeString":"mapping(contract IERC4626 => uint256)"},"valueName":"totalShares","valueNameLocation":"8636:11:73","valueType":{"id":28302,"name":"uint256","nodeType":"ElementaryTypeName","src":"8628:7:73","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"internal"},{"constant":false,"id":28309,"mutability":"mutable","name":"_bufferAssets","nameLocation":"8844:13:73","nodeType":"VariableDeclaration","scope":28384,"src":"8777:80:73","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_address_$","typeString":"mapping(contract IERC4626 => address)"},"typeName":{"id":28308,"keyName":"wrappedToken","keyNameLocation":"8794:12:73","keyType":{"id":28306,"nodeType":"UserDefinedTypeName","pathNode":{"id":28305,"name":"IERC4626","nameLocations":["8785:8:73"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"8785:8:73"},"referencedDeclaration":39833,"src":"8785:8:73","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"nodeType":"Mapping","src":"8777:57:73","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_address_$","typeString":"mapping(contract IERC4626 => address)"},"valueName":"underlyingToken","valueNameLocation":"8818:15:73","valueType":{"id":28307,"name":"address","nodeType":"ElementaryTypeName","src":"8810:7:73","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},"visibility":"internal"},{"body":{"id":28319,"nodeType":"Block","src":"9170:53:73","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28315,"name":"_IS_UNLOCKED_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28201,"src":"9187:17:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":28316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9205:9:73","memberName":"asBoolean","nodeType":"MemberAccess","referencedDeclaration":10123,"src":"9187:27:73","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_BooleanSlotType_$10108_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.BooleanSlotType)"}},"id":28317,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9187:29:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"}},"functionReturnParameters":28314,"id":28318,"nodeType":"Return","src":"9180:36:73"}]},"id":28320,"implemented":true,"kind":"function","modifiers":[],"name":"_isUnlocked","nameLocation":"9090:11:73","nodeType":"FunctionDefinition","parameters":{"id":28310,"nodeType":"ParameterList","parameters":[],"src":"9101:2:73"},"returnParameters":{"id":28314,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28313,"mutability":"mutable","name":"slot","nameLocation":"9164:4:73","nodeType":"VariableDeclaration","scope":28320,"src":"9127:41:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":28312,"nodeType":"UserDefinedTypeName","pathNode":{"id":28311,"name":"StorageSlotExtension.BooleanSlotType","nameLocations":["9127:20:73","9148:15:73"],"nodeType":"IdentifierPath","referencedDeclaration":10108,"src":"9127:36:73"},"referencedDeclaration":10108,"src":"9127:36:73","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"}],"src":"9126:43:73"},"scope":28384,"src":"9081:142:73","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":28330,"nodeType":"Block","src":"9325:62:73","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28326,"name":"_NON_ZERO_DELTA_COUNT_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28206,"src":"9342:26:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":28327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9369:9:73","memberName":"asUint256","nodeType":"MemberAccess","referencedDeclaration":10157,"src":"9342:36:73","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$10142_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":28328,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9342:38:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"functionReturnParameters":28325,"id":28329,"nodeType":"Return","src":"9335:45:73"}]},"id":28331,"implemented":true,"kind":"function","modifiers":[],"name":"_nonZeroDeltaCount","nameLocation":"9238:18:73","nodeType":"FunctionDefinition","parameters":{"id":28321,"nodeType":"ParameterList","parameters":[],"src":"9256:2:73"},"returnParameters":{"id":28325,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28324,"mutability":"mutable","name":"slot","nameLocation":"9319:4:73","nodeType":"VariableDeclaration","scope":28331,"src":"9282:41:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":28323,"nodeType":"UserDefinedTypeName","pathNode":{"id":28322,"name":"StorageSlotExtension.Uint256SlotType","nameLocations":["9282:20:73","9303:15:73"],"nodeType":"IdentifierPath","referencedDeclaration":10142,"src":"9282:36:73"},"referencedDeclaration":10142,"src":"9282:36:73","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"9281:43:73"},"scope":28384,"src":"9229:158:73","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":28342,"nodeType":"Block","src":"9472:74:73","statements":[{"expression":{"arguments":[{"id":28339,"name":"_TOKEN_DELTAS_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28211,"src":"9520:18:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":28337,"name":"TokenDeltaMappingSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6858,"src":"9489:25:73","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858_$","typeString":"type(TokenDeltaMappingSlotType)"}},"id":28338,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9515:4:73","memberName":"wrap","nodeType":"MemberAccess","src":"9489:30:73","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858_$","typeString":"function (bytes32) pure returns (TokenDeltaMappingSlotType)"}},"id":28340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9489:50:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858","typeString":"TokenDeltaMappingSlotType"}},"functionReturnParameters":28336,"id":28341,"nodeType":"Return","src":"9482:57:73"}]},"id":28343,"implemented":true,"kind":"function","modifiers":[],"name":"_tokenDeltas","nameLocation":"9402:12:73","nodeType":"FunctionDefinition","parameters":{"id":28332,"nodeType":"ParameterList","parameters":[],"src":"9414:2:73"},"returnParameters":{"id":28336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28335,"mutability":"mutable","name":"slot","nameLocation":"9466:4:73","nodeType":"VariableDeclaration","scope":28343,"src":"9440:30:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858","typeString":"TokenDeltaMappingSlotType"},"typeName":{"id":28334,"nodeType":"UserDefinedTypeName","pathNode":{"id":28333,"name":"TokenDeltaMappingSlotType","nameLocations":["9440:25:73"],"nodeType":"IdentifierPath","referencedDeclaration":6858,"src":"9440:25:73"},"referencedDeclaration":6858,"src":"9440:25:73","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858","typeString":"TokenDeltaMappingSlotType"}},"visibility":"internal"}],"src":"9439:32:73"},"scope":28384,"src":"9393:153:73","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":28354,"nodeType":"Block","src":"9646:90:73","statements":[{"expression":{"arguments":[{"id":28351,"name":"_ADD_LIQUIDITY_CALLED_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28216,"src":"9702:26:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":28349,"name":"UintToAddressToBooleanMappingSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6862,"src":"9663:33:73","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862_$","typeString":"type(UintToAddressToBooleanMappingSlot)"}},"id":28350,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9697:4:73","memberName":"wrap","nodeType":"MemberAccess","src":"9663:38:73","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862_$","typeString":"function (bytes32) pure returns (UintToAddressToBooleanMappingSlot)"}},"id":28352,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9663:66:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862","typeString":"UintToAddressToBooleanMappingSlot"}},"functionReturnParameters":28348,"id":28353,"nodeType":"Return","src":"9656:73:73"}]},"id":28355,"implemented":true,"kind":"function","modifiers":[],"name":"_addLiquidityCalled","nameLocation":"9561:19:73","nodeType":"FunctionDefinition","parameters":{"id":28344,"nodeType":"ParameterList","parameters":[],"src":"9580:2:73"},"returnParameters":{"id":28348,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28347,"mutability":"mutable","name":"slot","nameLocation":"9640:4:73","nodeType":"VariableDeclaration","scope":28355,"src":"9606:38:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862","typeString":"UintToAddressToBooleanMappingSlot"},"typeName":{"id":28346,"nodeType":"UserDefinedTypeName","pathNode":{"id":28345,"name":"UintToAddressToBooleanMappingSlot","nameLocations":["9606:33:73"],"nodeType":"IdentifierPath","referencedDeclaration":6862,"src":"9606:33:73"},"referencedDeclaration":6862,"src":"9606:33:73","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862","typeString":"UintToAddressToBooleanMappingSlot"}},"visibility":"internal"}],"src":"9605:40:73"},"scope":28384,"src":"9552:184:73","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":28365,"nodeType":"Block","src":"9834:52:73","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28361,"name":"_SESSION_ID_SLOT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28221,"src":"9851:16:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":28362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9868:9:73","memberName":"asUint256","nodeType":"MemberAccess","referencedDeclaration":10157,"src":"9851:26:73","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_userDefinedValueType$_Uint256SlotType_$10142_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (StorageSlotExtension.Uint256SlotType)"}},"id":28363,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9851:28:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"functionReturnParameters":28360,"id":28364,"nodeType":"Return","src":"9844:35:73"}]},"id":28366,"implemented":true,"kind":"function","modifiers":[],"name":"_sessionIdSlot","nameLocation":"9751:14:73","nodeType":"FunctionDefinition","parameters":{"id":28356,"nodeType":"ParameterList","parameters":[],"src":"9765:2:73"},"returnParameters":{"id":28360,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28359,"mutability":"mutable","name":"slot","nameLocation":"9828:4:73","nodeType":"VariableDeclaration","scope":28366,"src":"9791:41:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":28358,"nodeType":"UserDefinedTypeName","pathNode":{"id":28357,"name":"StorageSlotExtension.Uint256SlotType","nameLocations":["9791:20:73","9812:15:73"],"nodeType":"IdentifierPath","referencedDeclaration":10142,"src":"9791:36:73"},"referencedDeclaration":10142,"src":"9791:36:73","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"9790:43:73"},"scope":28384,"src":"9742:144:73","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":28382,"nodeType":"Block","src":"9978:91:73","statements":[{"expression":{"arguments":[{"expression":{"arguments":[{"id":28376,"name":"VaultStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28384,"src":"10038:12:73","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_VaultStorage_$28384_$","typeString":"type(contract VaultStorage)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_VaultStorage_$28384_$","typeString":"type(contract VaultStorage)"}],"id":28375,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10033:4:73","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":28377,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10033:18:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_VaultStorage_$28384","typeString":"type(contract VaultStorage)"}},"id":28378,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10052:4:73","memberName":"name","nodeType":"MemberAccess","src":"10033:23:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":28379,"name":"key","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28368,"src":"10058:3:73","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":28373,"name":"TransientStorageHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7442,"src":"9995:23:73","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_TransientStorageHelpers_$7442_$","typeString":"type(library TransientStorageHelpers)"}},"id":28374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10019:13:73","memberName":"calculateSlot","nodeType":"MemberAccess","referencedDeclaration":6911,"src":"9995:37:73","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes32_$","typeString":"function (string memory,string memory) pure returns (bytes32)"}},"id":28380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9995:67:73","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":28372,"id":28381,"nodeType":"Return","src":"9988:74:73"}]},"id":28383,"implemented":true,"kind":"function","modifiers":[],"name":"_calculateVaultStorageSlot","nameLocation":"9901:26:73","nodeType":"FunctionDefinition","parameters":{"id":28369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28368,"mutability":"mutable","name":"key","nameLocation":"9942:3:73","nodeType":"VariableDeclaration","scope":28383,"src":"9928:17:73","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":28367,"name":"string","nodeType":"ElementaryTypeName","src":"9928:6:73","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"9927:19:73"},"returnParameters":{"id":28372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28371,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28383,"src":"9969:7:73","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":28370,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9969:7:73","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"9968:9:73"},"scope":28384,"src":"9892:177:73","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":28385,"src":"1377:8694:73","usedErrors":[],"usedEvents":[]}],"src":"46:10026:73"},"id":73},"@balancer-labs/v3-vault/contracts/lib/HooksConfigLib.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/HooksConfigLib.sol","exportedSymbols":{"AddLiquidityKind":[4807],"AddLiquidityParams":[4823],"AfterSwapParams":[4801],"BufferWrapOrUnwrapParams":[4862],"FEE_BITLENGTH":[4865],"FEE_SCALING_FACTOR":[4868],"HookFlags":[4627],"HooksConfig":[4651],"HooksConfigLib":[29474],"IERC20":[40109],"IERC4626":[39833],"IHooks":[2026],"IRateProvider":[263],"IVaultErrors":[3768],"LiquidityManagement":[4580],"MAX_FEE_PERCENTAGE":[4871],"PoolConfig":[4605],"PoolConfigBits":[4582],"PoolConfigConst":[29602],"PoolData":[4729],"PoolRoleAccounts":[4677],"PoolSwapParams":[4772],"RemoveLiquidityKind":[4828],"RemoveLiquidityParams":[4844],"Rounding":[4732],"SwapKind":[4735],"SwapState":[4661],"TokenConfig":[4694],"TokenInfo":[4704],"TokenType":[4681],"VaultState":[4669],"VaultSwapParams":[4754],"WordCodec":[7909],"WrappingDirection":[4847]},"id":29475,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":28386,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:74"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":28388,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29475,"sourceUnit":3769,"src":"72:93:74","symbolAliases":[{"foreign":{"id":28387,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"81:12:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","id":28390,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29475,"sourceUnit":2027,"src":"166:81:74","symbolAliases":[{"foreign":{"id":28389,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2026,"src":"175:6:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":28391,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29475,"sourceUnit":4872,"src":"248:69:74","symbolAliases":[],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol","id":28393,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29475,"sourceUnit":7910,"src":"319:93:74","symbolAliases":[{"foreign":{"id":28392,"name":"WordCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7909,"src":"328:9:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/PoolConfigConst.sol","file":"./PoolConfigConst.sol","id":28395,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29475,"sourceUnit":29603,"src":"414:56:74","symbolAliases":[{"foreign":{"id":28394,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"423:15:74","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"HooksConfigLib","contractDependencies":[],"contractKind":"library","documentation":{"id":28396,"nodeType":"StructuredDocumentation","src":"472:1405:74","text":" @notice Helper functions to read and write the packed hook configuration flags stored in `_poolConfigBits`.\n @dev This library has two additional functions. `toHooksConfig` constructs a `HooksConfig` structure from the\n PoolConfig and the hooks contract address. Also, there are `call` functions that forward the arguments\n to the corresponding functions in the hook contract, then validate and return the results.\n Note that the entire configuration of each pool is stored in the `_poolConfigBits` mapping (one slot per pool).\n This includes the data in the `PoolConfig` struct, plus the data in the `HookFlags` struct. The layout (i.e.,\n offsets for each data field) is specified in `PoolConfigConst`.\n There are two libraries for interpreting these data. This one parses fields related to hooks, and also\n contains helpers for the struct building and hooks contract forwarding functions described above. `PoolConfigLib`\n contains helpers related to the non-hook-related flags, along with aggregate fee percentages and other data\n associated with pools.\n The `PoolData` struct contains the raw bitmap with the entire pool state (`PoolConfigBits`), plus the token\n configuration, scaling factors, and dynamic information such as current balances and rates.\n The hooks contract addresses themselves are stored in a separate `_hooksContracts` mapping."},"fullyImplemented":true,"id":29474,"linearizedBaseContracts":[29474],"name":"HooksConfigLib","nameLocation":"1886:14:74","nodeType":"ContractDefinition","nodes":[{"global":false,"id":28399,"libraryName":{"id":28397,"name":"WordCodec","nameLocations":["1913:9:74"],"nodeType":"IdentifierPath","referencedDeclaration":7909,"src":"1913:9:74"},"nodeType":"UsingForDirective","src":"1907:28:74","typeName":{"id":28398,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1927:7:74","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"global":false,"id":28403,"libraryName":{"id":28400,"name":"HooksConfigLib","nameLocations":["1946:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":29474,"src":"1946:14:74"},"nodeType":"UsingForDirective","src":"1940:40:74","typeName":{"id":28402,"nodeType":"UserDefinedTypeName","pathNode":{"id":28401,"name":"PoolConfigBits","nameLocations":["1965:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"1965:14:74"},"referencedDeclaration":4582,"src":"1965:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}},{"body":{"id":28420,"nodeType":"Block","src":"2073:117:74","statements":[{"expression":{"arguments":[{"expression":{"id":28416,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"2131:15:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":28417,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2147:35:74","memberName":"ENABLE_HOOK_ADJUSTED_AMOUNTS_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29527,"src":"2131:51:74","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":28413,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28406,"src":"2112:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":28411,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"2090:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28412,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2105:6:74","memberName":"unwrap","nodeType":"MemberAccess","src":"2090:21:74","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":28414,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2090:29:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":28415,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2120:10:74","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":7771,"src":"2090:40:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":28418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2090:93:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":28410,"id":28419,"nodeType":"Return","src":"2083:100:74"}]},"id":28421,"implemented":true,"kind":"function","modifiers":[],"name":"enableHookAdjustedAmounts","nameLocation":"1995:25:74","nodeType":"FunctionDefinition","parameters":{"id":28407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28406,"mutability":"mutable","name":"config","nameLocation":"2036:6:74","nodeType":"VariableDeclaration","scope":28421,"src":"2021:21:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28405,"nodeType":"UserDefinedTypeName","pathNode":{"id":28404,"name":"PoolConfigBits","nameLocations":["2021:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"2021:14:74"},"referencedDeclaration":4582,"src":"2021:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"2020:23:74"},"returnParameters":{"id":28410,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28409,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28421,"src":"2067:4:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28408,"name":"bool","nodeType":"ElementaryTypeName","src":"2067:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2066:6:74"},"scope":29474,"src":"1986:204:74","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28445,"nodeType":"Block","src":"2302:187:74","statements":[{"expression":{"arguments":[{"arguments":[{"id":28439,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28426,"src":"2409:5:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":28440,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"2416:15:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":28441,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2432:35:74","memberName":"ENABLE_HOOK_ADJUSTED_AMOUNTS_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29527,"src":"2416:51:74","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":28436,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28424,"src":"2390:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":28434,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"2368:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28435,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2383:6:74","memberName":"unwrap","nodeType":"MemberAccess","src":"2368:21:74","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":28437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2368:29:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":28438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2398:10:74","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":7785,"src":"2368:40:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":28442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2368:100:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":28432,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"2331:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28433,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2346:4:74","memberName":"wrap","nodeType":"MemberAccess","src":"2331:19:74","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":28443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2331:151:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"functionReturnParameters":28431,"id":28444,"nodeType":"Return","src":"2312:170:74"}]},"id":28446,"implemented":true,"kind":"function","modifiers":[],"name":"setHookAdjustedAmounts","nameLocation":"2205:22:74","nodeType":"FunctionDefinition","parameters":{"id":28427,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28424,"mutability":"mutable","name":"config","nameLocation":"2243:6:74","nodeType":"VariableDeclaration","scope":28446,"src":"2228:21:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28423,"nodeType":"UserDefinedTypeName","pathNode":{"id":28422,"name":"PoolConfigBits","nameLocations":["2228:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"2228:14:74"},"referencedDeclaration":4582,"src":"2228:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":28426,"mutability":"mutable","name":"value","nameLocation":"2256:5:74","nodeType":"VariableDeclaration","scope":28446,"src":"2251:10:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28425,"name":"bool","nodeType":"ElementaryTypeName","src":"2251:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2227:35:74"},"returnParameters":{"id":28431,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28430,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28446,"src":"2286:14:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28429,"nodeType":"UserDefinedTypeName","pathNode":{"id":28428,"name":"PoolConfigBits","nameLocations":["2286:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"2286:14:74"},"referencedDeclaration":4582,"src":"2286:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"2285:16:74"},"scope":29474,"src":"2196:293:74","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28463,"nodeType":"Block","src":"2583:106:74","statements":[{"expression":{"arguments":[{"expression":{"id":28459,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"2641:15:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":28460,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2657:24:74","memberName":"BEFORE_INITIALIZE_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29522,"src":"2641:40:74","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":28456,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28449,"src":"2622:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":28454,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"2600:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28455,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2615:6:74","memberName":"unwrap","nodeType":"MemberAccess","src":"2600:21:74","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":28457,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2600:29:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":28458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2630:10:74","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":7771,"src":"2600:40:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":28461,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2600:82:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":28453,"id":28462,"nodeType":"Return","src":"2593:89:74"}]},"id":28464,"implemented":true,"kind":"function","modifiers":[],"name":"shouldCallBeforeInitialize","nameLocation":"2504:26:74","nodeType":"FunctionDefinition","parameters":{"id":28450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28449,"mutability":"mutable","name":"config","nameLocation":"2546:6:74","nodeType":"VariableDeclaration","scope":28464,"src":"2531:21:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28448,"nodeType":"UserDefinedTypeName","pathNode":{"id":28447,"name":"PoolConfigBits","nameLocations":["2531:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"2531:14:74"},"referencedDeclaration":4582,"src":"2531:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"2530:23:74"},"returnParameters":{"id":28453,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28452,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28464,"src":"2577:4:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28451,"name":"bool","nodeType":"ElementaryTypeName","src":"2577:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2576:6:74"},"scope":29474,"src":"2495:194:74","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28488,"nodeType":"Block","src":"2808:176:74","statements":[{"expression":{"arguments":[{"arguments":[{"id":28482,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28469,"src":"2915:5:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":28483,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"2922:15:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":28484,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2938:24:74","memberName":"BEFORE_INITIALIZE_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29522,"src":"2922:40:74","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":28479,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28467,"src":"2896:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":28477,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"2874:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28478,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2889:6:74","memberName":"unwrap","nodeType":"MemberAccess","src":"2874:21:74","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":28480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2874:29:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":28481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2904:10:74","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":7785,"src":"2874:40:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":28485,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2874:89:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":28475,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"2837:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28476,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2852:4:74","memberName":"wrap","nodeType":"MemberAccess","src":"2837:19:74","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":28486,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2837:140:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"functionReturnParameters":28474,"id":28487,"nodeType":"Return","src":"2818:159:74"}]},"id":28489,"implemented":true,"kind":"function","modifiers":[],"name":"setShouldCallBeforeInitialize","nameLocation":"2704:29:74","nodeType":"FunctionDefinition","parameters":{"id":28470,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28467,"mutability":"mutable","name":"config","nameLocation":"2749:6:74","nodeType":"VariableDeclaration","scope":28489,"src":"2734:21:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28466,"nodeType":"UserDefinedTypeName","pathNode":{"id":28465,"name":"PoolConfigBits","nameLocations":["2734:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"2734:14:74"},"referencedDeclaration":4582,"src":"2734:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":28469,"mutability":"mutable","name":"value","nameLocation":"2762:5:74","nodeType":"VariableDeclaration","scope":28489,"src":"2757:10:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28468,"name":"bool","nodeType":"ElementaryTypeName","src":"2757:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2733:35:74"},"returnParameters":{"id":28474,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28473,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28489,"src":"2792:14:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28472,"nodeType":"UserDefinedTypeName","pathNode":{"id":28471,"name":"PoolConfigBits","nameLocations":["2792:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"2792:14:74"},"referencedDeclaration":4582,"src":"2792:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"2791:16:74"},"scope":29474,"src":"2695:289:74","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28506,"nodeType":"Block","src":"3077:105:74","statements":[{"expression":{"arguments":[{"expression":{"id":28502,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"3135:15:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":28503,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3151:23:74","memberName":"AFTER_INITIALIZE_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29532,"src":"3135:39:74","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":28499,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28492,"src":"3116:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":28497,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"3094:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28498,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3109:6:74","memberName":"unwrap","nodeType":"MemberAccess","src":"3094:21:74","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":28500,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3094:29:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":28501,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3124:10:74","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":7771,"src":"3094:40:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":28504,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3094:81:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":28496,"id":28505,"nodeType":"Return","src":"3087:88:74"}]},"id":28507,"implemented":true,"kind":"function","modifiers":[],"name":"shouldCallAfterInitialize","nameLocation":"2999:25:74","nodeType":"FunctionDefinition","parameters":{"id":28493,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28492,"mutability":"mutable","name":"config","nameLocation":"3040:6:74","nodeType":"VariableDeclaration","scope":28507,"src":"3025:21:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28491,"nodeType":"UserDefinedTypeName","pathNode":{"id":28490,"name":"PoolConfigBits","nameLocations":["3025:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"3025:14:74"},"referencedDeclaration":4582,"src":"3025:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"3024:23:74"},"returnParameters":{"id":28496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28495,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28507,"src":"3071:4:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28494,"name":"bool","nodeType":"ElementaryTypeName","src":"3071:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3070:6:74"},"scope":29474,"src":"2990:192:74","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28531,"nodeType":"Block","src":"3300:175:74","statements":[{"expression":{"arguments":[{"arguments":[{"id":28525,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28512,"src":"3407:5:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":28526,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"3414:15:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":28527,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3430:23:74","memberName":"AFTER_INITIALIZE_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29532,"src":"3414:39:74","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":28522,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28510,"src":"3388:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":28520,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"3366:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28521,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3381:6:74","memberName":"unwrap","nodeType":"MemberAccess","src":"3366:21:74","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":28523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3366:29:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":28524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3396:10:74","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":7785,"src":"3366:40:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":28528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3366:88:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":28518,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"3329:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28519,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3344:4:74","memberName":"wrap","nodeType":"MemberAccess","src":"3329:19:74","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":28529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3329:139:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"functionReturnParameters":28517,"id":28530,"nodeType":"Return","src":"3310:158:74"}]},"id":28532,"implemented":true,"kind":"function","modifiers":[],"name":"setShouldCallAfterInitialize","nameLocation":"3197:28:74","nodeType":"FunctionDefinition","parameters":{"id":28513,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28510,"mutability":"mutable","name":"config","nameLocation":"3241:6:74","nodeType":"VariableDeclaration","scope":28532,"src":"3226:21:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28509,"nodeType":"UserDefinedTypeName","pathNode":{"id":28508,"name":"PoolConfigBits","nameLocations":["3226:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"3226:14:74"},"referencedDeclaration":4582,"src":"3226:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":28512,"mutability":"mutable","name":"value","nameLocation":"3254:5:74","nodeType":"VariableDeclaration","scope":28532,"src":"3249:10:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28511,"name":"bool","nodeType":"ElementaryTypeName","src":"3249:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3225:35:74"},"returnParameters":{"id":28517,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28516,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28532,"src":"3284:14:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28515,"nodeType":"UserDefinedTypeName","pathNode":{"id":28514,"name":"PoolConfigBits","nameLocations":["3284:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"3284:14:74"},"referencedDeclaration":4582,"src":"3284:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"3283:16:74"},"scope":29474,"src":"3188:287:74","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28549,"nodeType":"Block","src":"3574:105:74","statements":[{"expression":{"arguments":[{"expression":{"id":28545,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"3632:15:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":28546,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3648:23:74","memberName":"DYNAMIC_SWAP_FEE_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29537,"src":"3632:39:74","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":28542,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28535,"src":"3613:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":28540,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"3591:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28541,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3606:6:74","memberName":"unwrap","nodeType":"MemberAccess","src":"3591:21:74","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":28543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3591:29:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":28544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3621:10:74","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":7771,"src":"3591:40:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":28547,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3591:81:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":28539,"id":28548,"nodeType":"Return","src":"3584:88:74"}]},"id":28550,"implemented":true,"kind":"function","modifiers":[],"name":"shouldCallComputeDynamicSwapFee","nameLocation":"3490:31:74","nodeType":"FunctionDefinition","parameters":{"id":28536,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28535,"mutability":"mutable","name":"config","nameLocation":"3537:6:74","nodeType":"VariableDeclaration","scope":28550,"src":"3522:21:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28534,"nodeType":"UserDefinedTypeName","pathNode":{"id":28533,"name":"PoolConfigBits","nameLocations":["3522:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"3522:14:74"},"referencedDeclaration":4582,"src":"3522:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"3521:23:74"},"returnParameters":{"id":28539,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28538,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28550,"src":"3568:4:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28537,"name":"bool","nodeType":"ElementaryTypeName","src":"3568:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3567:6:74"},"scope":29474,"src":"3481:198:74","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28574,"nodeType":"Block","src":"3825:175:74","statements":[{"expression":{"arguments":[{"arguments":[{"id":28568,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28555,"src":"3932:5:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":28569,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"3939:15:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":28570,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3955:23:74","memberName":"DYNAMIC_SWAP_FEE_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29537,"src":"3939:39:74","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":28565,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28553,"src":"3913:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":28563,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"3891:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28564,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3906:6:74","memberName":"unwrap","nodeType":"MemberAccess","src":"3891:21:74","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":28566,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3891:29:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":28567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3921:10:74","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":7785,"src":"3891:40:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":28571,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3891:88:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":28561,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"3854:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28562,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3869:4:74","memberName":"wrap","nodeType":"MemberAccess","src":"3854:19:74","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":28572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3854:139:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"functionReturnParameters":28560,"id":28573,"nodeType":"Return","src":"3835:158:74"}]},"id":28575,"implemented":true,"kind":"function","modifiers":[],"name":"setShouldCallComputeDynamicSwapFee","nameLocation":"3694:34:74","nodeType":"FunctionDefinition","parameters":{"id":28556,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28553,"mutability":"mutable","name":"config","nameLocation":"3753:6:74","nodeType":"VariableDeclaration","scope":28575,"src":"3738:21:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28552,"nodeType":"UserDefinedTypeName","pathNode":{"id":28551,"name":"PoolConfigBits","nameLocations":["3738:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"3738:14:74"},"referencedDeclaration":4582,"src":"3738:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":28555,"mutability":"mutable","name":"value","nameLocation":"3774:5:74","nodeType":"VariableDeclaration","scope":28575,"src":"3769:10:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28554,"name":"bool","nodeType":"ElementaryTypeName","src":"3769:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3728:57:74"},"returnParameters":{"id":28560,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28559,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28575,"src":"3809:14:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28558,"nodeType":"UserDefinedTypeName","pathNode":{"id":28557,"name":"PoolConfigBits","nameLocations":["3809:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"3809:14:74"},"referencedDeclaration":4582,"src":"3809:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"3808:16:74"},"scope":29474,"src":"3685:315:74","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28592,"nodeType":"Block","src":"4088:100:74","statements":[{"expression":{"arguments":[{"expression":{"id":28588,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"4146:15:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":28589,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4162:18:74","memberName":"BEFORE_SWAP_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29542,"src":"4146:34:74","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":28585,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28578,"src":"4127:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":28583,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"4105:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28584,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4120:6:74","memberName":"unwrap","nodeType":"MemberAccess","src":"4105:21:74","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":28586,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4105:29:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":28587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4135:10:74","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":7771,"src":"4105:40:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":28590,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4105:76:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":28582,"id":28591,"nodeType":"Return","src":"4098:83:74"}]},"id":28593,"implemented":true,"kind":"function","modifiers":[],"name":"shouldCallBeforeSwap","nameLocation":"4015:20:74","nodeType":"FunctionDefinition","parameters":{"id":28579,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28578,"mutability":"mutable","name":"config","nameLocation":"4051:6:74","nodeType":"VariableDeclaration","scope":28593,"src":"4036:21:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28577,"nodeType":"UserDefinedTypeName","pathNode":{"id":28576,"name":"PoolConfigBits","nameLocations":["4036:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"4036:14:74"},"referencedDeclaration":4582,"src":"4036:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"4035:23:74"},"returnParameters":{"id":28582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28581,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28593,"src":"4082:4:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28580,"name":"bool","nodeType":"ElementaryTypeName","src":"4082:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4081:6:74"},"scope":29474,"src":"4006:182:74","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28617,"nodeType":"Block","src":"4301:128:74","statements":[{"expression":{"arguments":[{"arguments":[{"id":28611,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28598,"src":"4379:5:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":28612,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"4386:15:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":28613,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4402:18:74","memberName":"BEFORE_SWAP_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29542,"src":"4386:34:74","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":28608,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28596,"src":"4360:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":28606,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"4338:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28607,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4353:6:74","memberName":"unwrap","nodeType":"MemberAccess","src":"4338:21:74","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":28609,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4338:29:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":28610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4368:10:74","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":7785,"src":"4338:40:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":28614,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4338:83:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":28604,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"4318:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28605,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4333:4:74","memberName":"wrap","nodeType":"MemberAccess","src":"4318:19:74","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":28615,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4318:104:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"functionReturnParameters":28603,"id":28616,"nodeType":"Return","src":"4311:111:74"}]},"id":28618,"implemented":true,"kind":"function","modifiers":[],"name":"setShouldCallBeforeSwap","nameLocation":"4203:23:74","nodeType":"FunctionDefinition","parameters":{"id":28599,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28596,"mutability":"mutable","name":"config","nameLocation":"4242:6:74","nodeType":"VariableDeclaration","scope":28618,"src":"4227:21:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28595,"nodeType":"UserDefinedTypeName","pathNode":{"id":28594,"name":"PoolConfigBits","nameLocations":["4227:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"4227:14:74"},"referencedDeclaration":4582,"src":"4227:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":28598,"mutability":"mutable","name":"value","nameLocation":"4255:5:74","nodeType":"VariableDeclaration","scope":28618,"src":"4250:10:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28597,"name":"bool","nodeType":"ElementaryTypeName","src":"4250:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4226:35:74"},"returnParameters":{"id":28603,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28602,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28618,"src":"4285:14:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28601,"nodeType":"UserDefinedTypeName","pathNode":{"id":28600,"name":"PoolConfigBits","nameLocations":["4285:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"4285:14:74"},"referencedDeclaration":4582,"src":"4285:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"4284:16:74"},"scope":29474,"src":"4194:235:74","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28635,"nodeType":"Block","src":"4516:99:74","statements":[{"expression":{"arguments":[{"expression":{"id":28631,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"4574:15:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":28632,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4590:17:74","memberName":"AFTER_SWAP_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29547,"src":"4574:33:74","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":28628,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28621,"src":"4555:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":28626,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"4533:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28627,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4548:6:74","memberName":"unwrap","nodeType":"MemberAccess","src":"4533:21:74","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":28629,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4533:29:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":28630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4563:10:74","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":7771,"src":"4533:40:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":28633,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4533:75:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":28625,"id":28634,"nodeType":"Return","src":"4526:82:74"}]},"id":28636,"implemented":true,"kind":"function","modifiers":[],"name":"shouldCallAfterSwap","nameLocation":"4444:19:74","nodeType":"FunctionDefinition","parameters":{"id":28622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28621,"mutability":"mutable","name":"config","nameLocation":"4479:6:74","nodeType":"VariableDeclaration","scope":28636,"src":"4464:21:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28620,"nodeType":"UserDefinedTypeName","pathNode":{"id":28619,"name":"PoolConfigBits","nameLocations":["4464:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"4464:14:74"},"referencedDeclaration":4582,"src":"4464:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"4463:23:74"},"returnParameters":{"id":28625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28624,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28636,"src":"4510:4:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28623,"name":"bool","nodeType":"ElementaryTypeName","src":"4510:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4509:6:74"},"scope":29474,"src":"4435:180:74","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28660,"nodeType":"Block","src":"4727:127:74","statements":[{"expression":{"arguments":[{"arguments":[{"id":28654,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28641,"src":"4805:5:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":28655,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"4812:15:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":28656,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4828:17:74","memberName":"AFTER_SWAP_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29547,"src":"4812:33:74","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":28651,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28639,"src":"4786:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":28649,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"4764:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28650,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4779:6:74","memberName":"unwrap","nodeType":"MemberAccess","src":"4764:21:74","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":28652,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4764:29:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":28653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4794:10:74","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":7785,"src":"4764:40:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":28657,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4764:82:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":28647,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"4744:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28648,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4759:4:74","memberName":"wrap","nodeType":"MemberAccess","src":"4744:19:74","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":28658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4744:103:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"functionReturnParameters":28646,"id":28659,"nodeType":"Return","src":"4737:110:74"}]},"id":28661,"implemented":true,"kind":"function","modifiers":[],"name":"setShouldCallAfterSwap","nameLocation":"4630:22:74","nodeType":"FunctionDefinition","parameters":{"id":28642,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28639,"mutability":"mutable","name":"config","nameLocation":"4668:6:74","nodeType":"VariableDeclaration","scope":28661,"src":"4653:21:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28638,"nodeType":"UserDefinedTypeName","pathNode":{"id":28637,"name":"PoolConfigBits","nameLocations":["4653:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"4653:14:74"},"referencedDeclaration":4582,"src":"4653:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":28641,"mutability":"mutable","name":"value","nameLocation":"4681:5:74","nodeType":"VariableDeclaration","scope":28661,"src":"4676:10:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28640,"name":"bool","nodeType":"ElementaryTypeName","src":"4676:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4652:35:74"},"returnParameters":{"id":28646,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28645,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28661,"src":"4711:14:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28644,"nodeType":"UserDefinedTypeName","pathNode":{"id":28643,"name":"PoolConfigBits","nameLocations":["4711:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"4711:14:74"},"referencedDeclaration":4582,"src":"4711:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"4710:16:74"},"scope":29474,"src":"4621:233:74","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28678,"nodeType":"Block","src":"4950:109:74","statements":[{"expression":{"arguments":[{"expression":{"id":28674,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"5008:15:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":28675,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5024:27:74","memberName":"BEFORE_ADD_LIQUIDITY_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29552,"src":"5008:43:74","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":28671,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28664,"src":"4989:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":28669,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"4967:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28670,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4982:6:74","memberName":"unwrap","nodeType":"MemberAccess","src":"4967:21:74","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":28672,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4967:29:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":28673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4997:10:74","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":7771,"src":"4967:40:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":28676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4967:85:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":28668,"id":28677,"nodeType":"Return","src":"4960:92:74"}]},"id":28679,"implemented":true,"kind":"function","modifiers":[],"name":"shouldCallBeforeAddLiquidity","nameLocation":"4869:28:74","nodeType":"FunctionDefinition","parameters":{"id":28665,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28664,"mutability":"mutable","name":"config","nameLocation":"4913:6:74","nodeType":"VariableDeclaration","scope":28679,"src":"4898:21:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28663,"nodeType":"UserDefinedTypeName","pathNode":{"id":28662,"name":"PoolConfigBits","nameLocations":["4898:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"4898:14:74"},"referencedDeclaration":4582,"src":"4898:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"4897:23:74"},"returnParameters":{"id":28668,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28667,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28679,"src":"4944:4:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28666,"name":"bool","nodeType":"ElementaryTypeName","src":"4944:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4943:6:74"},"scope":29474,"src":"4860:199:74","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28703,"nodeType":"Block","src":"5180:179:74","statements":[{"expression":{"arguments":[{"arguments":[{"id":28697,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28684,"src":"5287:5:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":28698,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"5294:15:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":28699,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5310:27:74","memberName":"BEFORE_ADD_LIQUIDITY_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29552,"src":"5294:43:74","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":28694,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28682,"src":"5268:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":28692,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"5246:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28693,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5261:6:74","memberName":"unwrap","nodeType":"MemberAccess","src":"5246:21:74","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":28695,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5246:29:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":28696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5276:10:74","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":7785,"src":"5246:40:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":28700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5246:92:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":28690,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"5209:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28691,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5224:4:74","memberName":"wrap","nodeType":"MemberAccess","src":"5209:19:74","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":28701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5209:143:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"functionReturnParameters":28689,"id":28702,"nodeType":"Return","src":"5190:162:74"}]},"id":28704,"implemented":true,"kind":"function","modifiers":[],"name":"setShouldCallBeforeAddLiquidity","nameLocation":"5074:31:74","nodeType":"FunctionDefinition","parameters":{"id":28685,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28682,"mutability":"mutable","name":"config","nameLocation":"5121:6:74","nodeType":"VariableDeclaration","scope":28704,"src":"5106:21:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28681,"nodeType":"UserDefinedTypeName","pathNode":{"id":28680,"name":"PoolConfigBits","nameLocations":["5106:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"5106:14:74"},"referencedDeclaration":4582,"src":"5106:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":28684,"mutability":"mutable","name":"value","nameLocation":"5134:5:74","nodeType":"VariableDeclaration","scope":28704,"src":"5129:10:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28683,"name":"bool","nodeType":"ElementaryTypeName","src":"5129:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5105:35:74"},"returnParameters":{"id":28689,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28688,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28704,"src":"5164:14:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28687,"nodeType":"UserDefinedTypeName","pathNode":{"id":28686,"name":"PoolConfigBits","nameLocations":["5164:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"5164:14:74"},"referencedDeclaration":4582,"src":"5164:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"5163:16:74"},"scope":29474,"src":"5065:294:74","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28721,"nodeType":"Block","src":"5454:108:74","statements":[{"expression":{"arguments":[{"expression":{"id":28717,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"5512:15:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":28718,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5528:26:74","memberName":"AFTER_ADD_LIQUIDITY_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29557,"src":"5512:42:74","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":28714,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28707,"src":"5493:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":28712,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"5471:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28713,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5486:6:74","memberName":"unwrap","nodeType":"MemberAccess","src":"5471:21:74","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":28715,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5471:29:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":28716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5501:10:74","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":7771,"src":"5471:40:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":28719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5471:84:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":28711,"id":28720,"nodeType":"Return","src":"5464:91:74"}]},"id":28722,"implemented":true,"kind":"function","modifiers":[],"name":"shouldCallAfterAddLiquidity","nameLocation":"5374:27:74","nodeType":"FunctionDefinition","parameters":{"id":28708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28707,"mutability":"mutable","name":"config","nameLocation":"5417:6:74","nodeType":"VariableDeclaration","scope":28722,"src":"5402:21:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28706,"nodeType":"UserDefinedTypeName","pathNode":{"id":28705,"name":"PoolConfigBits","nameLocations":["5402:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"5402:14:74"},"referencedDeclaration":4582,"src":"5402:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"5401:23:74"},"returnParameters":{"id":28711,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28710,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28722,"src":"5448:4:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28709,"name":"bool","nodeType":"ElementaryTypeName","src":"5448:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5447:6:74"},"scope":29474,"src":"5365:197:74","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28746,"nodeType":"Block","src":"5682:178:74","statements":[{"expression":{"arguments":[{"arguments":[{"id":28740,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28727,"src":"5789:5:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":28741,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"5796:15:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":28742,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5812:26:74","memberName":"AFTER_ADD_LIQUIDITY_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29557,"src":"5796:42:74","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":28737,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28725,"src":"5770:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":28735,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"5748:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28736,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5763:6:74","memberName":"unwrap","nodeType":"MemberAccess","src":"5748:21:74","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":28738,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5748:29:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":28739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5778:10:74","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":7785,"src":"5748:40:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":28743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5748:91:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":28733,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"5711:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28734,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5726:4:74","memberName":"wrap","nodeType":"MemberAccess","src":"5711:19:74","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":28744,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5711:142:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"functionReturnParameters":28732,"id":28745,"nodeType":"Return","src":"5692:161:74"}]},"id":28747,"implemented":true,"kind":"function","modifiers":[],"name":"setShouldCallAfterAddLiquidity","nameLocation":"5577:30:74","nodeType":"FunctionDefinition","parameters":{"id":28728,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28725,"mutability":"mutable","name":"config","nameLocation":"5623:6:74","nodeType":"VariableDeclaration","scope":28747,"src":"5608:21:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28724,"nodeType":"UserDefinedTypeName","pathNode":{"id":28723,"name":"PoolConfigBits","nameLocations":["5608:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"5608:14:74"},"referencedDeclaration":4582,"src":"5608:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":28727,"mutability":"mutable","name":"value","nameLocation":"5636:5:74","nodeType":"VariableDeclaration","scope":28747,"src":"5631:10:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28726,"name":"bool","nodeType":"ElementaryTypeName","src":"5631:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5607:35:74"},"returnParameters":{"id":28732,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28731,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28747,"src":"5666:14:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28730,"nodeType":"UserDefinedTypeName","pathNode":{"id":28729,"name":"PoolConfigBits","nameLocations":["5666:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"5666:14:74"},"referencedDeclaration":4582,"src":"5666:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"5665:16:74"},"scope":29474,"src":"5568:292:74","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28764,"nodeType":"Block","src":"5959:112:74","statements":[{"expression":{"arguments":[{"expression":{"id":28760,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"6017:15:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":28761,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6033:30:74","memberName":"BEFORE_REMOVE_LIQUIDITY_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29562,"src":"6017:46:74","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":28757,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28750,"src":"5998:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":28755,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"5976:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28756,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5991:6:74","memberName":"unwrap","nodeType":"MemberAccess","src":"5976:21:74","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":28758,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5976:29:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":28759,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6006:10:74","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":7771,"src":"5976:40:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":28762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5976:88:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":28754,"id":28763,"nodeType":"Return","src":"5969:95:74"}]},"id":28765,"implemented":true,"kind":"function","modifiers":[],"name":"shouldCallBeforeRemoveLiquidity","nameLocation":"5875:31:74","nodeType":"FunctionDefinition","parameters":{"id":28751,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28750,"mutability":"mutable","name":"config","nameLocation":"5922:6:74","nodeType":"VariableDeclaration","scope":28765,"src":"5907:21:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28749,"nodeType":"UserDefinedTypeName","pathNode":{"id":28748,"name":"PoolConfigBits","nameLocations":["5907:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"5907:14:74"},"referencedDeclaration":4582,"src":"5907:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"5906:23:74"},"returnParameters":{"id":28754,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28753,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28765,"src":"5953:4:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28752,"name":"bool","nodeType":"ElementaryTypeName","src":"5953:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5952:6:74"},"scope":29474,"src":"5866:205:74","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28789,"nodeType":"Block","src":"6217:182:74","statements":[{"expression":{"arguments":[{"arguments":[{"id":28783,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28770,"src":"6324:5:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":28784,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"6331:15:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":28785,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6347:30:74","memberName":"BEFORE_REMOVE_LIQUIDITY_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29562,"src":"6331:46:74","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":28780,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28768,"src":"6305:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":28778,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"6283:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28779,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6298:6:74","memberName":"unwrap","nodeType":"MemberAccess","src":"6283:21:74","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":28781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6283:29:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":28782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6313:10:74","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":7785,"src":"6283:40:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":28786,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6283:95:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":28776,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"6246:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28777,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6261:4:74","memberName":"wrap","nodeType":"MemberAccess","src":"6246:19:74","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":28787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6246:146:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"functionReturnParameters":28775,"id":28788,"nodeType":"Return","src":"6227:165:74"}]},"id":28790,"implemented":true,"kind":"function","modifiers":[],"name":"setShouldCallBeforeRemoveLiquidity","nameLocation":"6086:34:74","nodeType":"FunctionDefinition","parameters":{"id":28771,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28768,"mutability":"mutable","name":"config","nameLocation":"6145:6:74","nodeType":"VariableDeclaration","scope":28790,"src":"6130:21:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28767,"nodeType":"UserDefinedTypeName","pathNode":{"id":28766,"name":"PoolConfigBits","nameLocations":["6130:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"6130:14:74"},"referencedDeclaration":4582,"src":"6130:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":28770,"mutability":"mutable","name":"value","nameLocation":"6166:5:74","nodeType":"VariableDeclaration","scope":28790,"src":"6161:10:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28769,"name":"bool","nodeType":"ElementaryTypeName","src":"6161:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6120:57:74"},"returnParameters":{"id":28775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28774,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28790,"src":"6201:14:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28773,"nodeType":"UserDefinedTypeName","pathNode":{"id":28772,"name":"PoolConfigBits","nameLocations":["6201:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"6201:14:74"},"referencedDeclaration":4582,"src":"6201:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"6200:16:74"},"scope":29474,"src":"6077:322:74","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28807,"nodeType":"Block","src":"6497:111:74","statements":[{"expression":{"arguments":[{"expression":{"id":28803,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"6555:15:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":28804,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6571:29:74","memberName":"AFTER_REMOVE_LIQUIDITY_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29567,"src":"6555:45:74","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":28800,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28793,"src":"6536:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":28798,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"6514:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28799,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6529:6:74","memberName":"unwrap","nodeType":"MemberAccess","src":"6514:21:74","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":28801,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6514:29:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":28802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6544:10:74","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":7771,"src":"6514:40:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":28805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6514:87:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":28797,"id":28806,"nodeType":"Return","src":"6507:94:74"}]},"id":28808,"implemented":true,"kind":"function","modifiers":[],"name":"shouldCallAfterRemoveLiquidity","nameLocation":"6414:30:74","nodeType":"FunctionDefinition","parameters":{"id":28794,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28793,"mutability":"mutable","name":"config","nameLocation":"6460:6:74","nodeType":"VariableDeclaration","scope":28808,"src":"6445:21:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28792,"nodeType":"UserDefinedTypeName","pathNode":{"id":28791,"name":"PoolConfigBits","nameLocations":["6445:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"6445:14:74"},"referencedDeclaration":4582,"src":"6445:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"6444:23:74"},"returnParameters":{"id":28797,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28796,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28808,"src":"6491:4:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28795,"name":"bool","nodeType":"ElementaryTypeName","src":"6491:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6490:6:74"},"scope":29474,"src":"6405:203:74","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28832,"nodeType":"Block","src":"6753:181:74","statements":[{"expression":{"arguments":[{"arguments":[{"id":28826,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28813,"src":"6860:5:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":28827,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"6867:15:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":28828,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6883:29:74","memberName":"AFTER_REMOVE_LIQUIDITY_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29567,"src":"6867:45:74","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":28823,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28811,"src":"6841:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":28821,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"6819:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28822,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6834:6:74","memberName":"unwrap","nodeType":"MemberAccess","src":"6819:21:74","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":28824,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6819:29:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":28825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6849:10:74","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":7785,"src":"6819:40:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":28829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6819:94:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":28819,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"6782:14:74","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":28820,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6797:4:74","memberName":"wrap","nodeType":"MemberAccess","src":"6782:19:74","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":28830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6782:145:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"functionReturnParameters":28818,"id":28831,"nodeType":"Return","src":"6763:164:74"}]},"id":28833,"implemented":true,"kind":"function","modifiers":[],"name":"setShouldCallAfterRemoveLiquidity","nameLocation":"6623:33:74","nodeType":"FunctionDefinition","parameters":{"id":28814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28811,"mutability":"mutable","name":"config","nameLocation":"6681:6:74","nodeType":"VariableDeclaration","scope":28833,"src":"6666:21:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28810,"nodeType":"UserDefinedTypeName","pathNode":{"id":28809,"name":"PoolConfigBits","nameLocations":["6666:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"6666:14:74"},"referencedDeclaration":4582,"src":"6666:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":28813,"mutability":"mutable","name":"value","nameLocation":"6702:5:74","nodeType":"VariableDeclaration","scope":28833,"src":"6697:10:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28812,"name":"bool","nodeType":"ElementaryTypeName","src":"6697:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6656:57:74"},"returnParameters":{"id":28818,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28817,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28833,"src":"6737:14:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28816,"nodeType":"UserDefinedTypeName","pathNode":{"id":28815,"name":"PoolConfigBits","nameLocations":["6737:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"6737:14:74"},"referencedDeclaration":4582,"src":"6737:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"6736:16:74"},"scope":29474,"src":"6614:320:74","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28882,"nodeType":"Block","src":"7051:932:74","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28846,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28836,"src":"7137:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":28847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7144:25:74","memberName":"enableHookAdjustedAmounts","nodeType":"MemberAccess","referencedDeclaration":28421,"src":"7137:32:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":28848,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7137:34:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28849,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28836,"src":"7217:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":28850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7224:26:74","memberName":"shouldCallBeforeInitialize","nodeType":"MemberAccess","referencedDeclaration":28464,"src":"7217:33:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":28851,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7217:35:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28852,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28836,"src":"7297:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":28853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7304:25:74","memberName":"shouldCallAfterInitialize","nodeType":"MemberAccess","referencedDeclaration":28507,"src":"7297:32:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":28854,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7297:34:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28855,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28836,"src":"7379:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":28856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7386:28:74","memberName":"shouldCallBeforeAddLiquidity","nodeType":"MemberAccess","referencedDeclaration":28679,"src":"7379:35:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":28857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7379:37:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28858,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28836,"src":"7463:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":28859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7470:27:74","memberName":"shouldCallAfterAddLiquidity","nodeType":"MemberAccess","referencedDeclaration":28722,"src":"7463:34:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":28860,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7463:36:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28861,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28836,"src":"7550:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":28862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7557:31:74","memberName":"shouldCallBeforeRemoveLiquidity","nodeType":"MemberAccess","referencedDeclaration":28765,"src":"7550:38:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":28863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7550:40:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28864,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28836,"src":"7640:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":28865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7647:30:74","memberName":"shouldCallAfterRemoveLiquidity","nodeType":"MemberAccess","referencedDeclaration":28808,"src":"7640:37:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":28866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7640:39:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28867,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28836,"src":"7730:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":28868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7737:31:74","memberName":"shouldCallComputeDynamicSwapFee","nodeType":"MemberAccess","referencedDeclaration":28550,"src":"7730:38:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":28869,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7730:40:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28870,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28836,"src":"7810:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":28871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7817:20:74","memberName":"shouldCallBeforeSwap","nodeType":"MemberAccess","referencedDeclaration":28593,"src":"7810:27:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":28872,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7810:29:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28873,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28836,"src":"7878:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":28874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7885:19:74","memberName":"shouldCallAfterSwap","nodeType":"MemberAccess","referencedDeclaration":28636,"src":"7878:26:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":28875,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7878:28:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[{"id":28878,"name":"hooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28839,"src":"7947:13:74","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}],"id":28877,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7939:7:74","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":28876,"name":"address","nodeType":"ElementaryTypeName","src":"7939:7:74","typeDescriptions":{}}},"id":28879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7939:22:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_address","typeString":"address"}],"id":28845,"name":"HooksConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4651,"src":"7080:11:74","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_HooksConfig_$4651_storage_ptr_$","typeString":"type(struct HooksConfig storage pointer)"}},"id":28880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["7110:25:74","7189:26:74","7270:25:74","7349:28:74","7434:27:74","7517:31:74","7608:30:74","7697:31:74","7788:20:74","7857:19:74","7924:13:74"],"names":["enableHookAdjustedAmounts","shouldCallBeforeInitialize","shouldCallAfterInitialize","shouldCallBeforeAddLiquidity","shouldCallAfterAddLiquidity","shouldCallBeforeRemoveLiquidity","shouldCallAfterRemoveLiquidity","shouldCallComputeDynamicSwapFee","shouldCallBeforeSwap","shouldCallAfterSwap","hooksContract"],"nodeType":"FunctionCall","src":"7080:896:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4651_memory_ptr","typeString":"struct HooksConfig memory"}},"functionReturnParameters":28844,"id":28881,"nodeType":"Return","src":"7061:915:74"}]},"id":28883,"implemented":true,"kind":"function","modifiers":[],"name":"toHooksConfig","nameLocation":"6949:13:74","nodeType":"FunctionDefinition","parameters":{"id":28840,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28836,"mutability":"mutable","name":"config","nameLocation":"6978:6:74","nodeType":"VariableDeclaration","scope":28883,"src":"6963:21:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28835,"nodeType":"UserDefinedTypeName","pathNode":{"id":28834,"name":"PoolConfigBits","nameLocations":["6963:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"6963:14:74"},"referencedDeclaration":4582,"src":"6963:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":28839,"mutability":"mutable","name":"hooksContract","nameLocation":"6993:13:74","nodeType":"VariableDeclaration","scope":28883,"src":"6986:20:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"},"typeName":{"id":28838,"nodeType":"UserDefinedTypeName","pathNode":{"id":28837,"name":"IHooks","nameLocations":["6986:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":2026,"src":"6986:6:74"},"referencedDeclaration":2026,"src":"6986:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"visibility":"internal"}],"src":"6962:45:74"},"returnParameters":{"id":28844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28843,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28883,"src":"7031:18:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4651_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":28842,"nodeType":"UserDefinedTypeName","pathNode":{"id":28841,"name":"HooksConfig","nameLocations":["7031:11:74"],"nodeType":"IdentifierPath","referencedDeclaration":4651,"src":"7031:11:74"},"referencedDeclaration":4651,"src":"7031:11:74","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4651_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"}],"src":"7030:20:74"},"scope":29474,"src":"6940:1043:74","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":28932,"nodeType":"Block","src":"8655:644:74","statements":[{"assignments":[28900,28902],"declarations":[{"constant":false,"id":28900,"mutability":"mutable","name":"success","nameLocation":"8671:7:74","nodeType":"VariableDeclaration","scope":28932,"src":"8666:12:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":28899,"name":"bool","nodeType":"ElementaryTypeName","src":"8666:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":28902,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"8688:17:74","nodeType":"VariableDeclaration","scope":28932,"src":"8680:25:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28901,"name":"uint256","nodeType":"ElementaryTypeName","src":"8680:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":28909,"initialValue":{"arguments":[{"id":28905,"name":"swapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28887,"src":"8770:10:74","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}},{"id":28906,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28889,"src":"8794:4:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":28907,"name":"staticSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28891,"src":"8812:23:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":28903,"name":"hooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28894,"src":"8709:13:74","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"id":28904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8723:33:74","memberName":"onComputeDynamicSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":2025,"src":"8709:47:74","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_struct$_PoolSwapParams_$4772_memory_ptr_$_t_address_$_t_uint256_$returns$_t_bool_$_t_uint256_$","typeString":"function (struct PoolSwapParams memory,address,uint256) view external returns (bool,uint256)"}},"id":28908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8709:136:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"8665:180:74"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":28912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28910,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28900,"src":"8860:7:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":28911,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8871:5:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"8860:16:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":28919,"nodeType":"IfStatement","src":"8856:93:74","trueBody":{"id":28918,"nodeType":"Block","src":"8878:71:74","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28913,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"8899:12:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3768_$","typeString":"type(contract IVaultErrors)"}},"id":28915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8912:24:74","memberName":"DynamicSwapFeeHookFailed","nodeType":"MemberAccess","referencedDeclaration":3479,"src":"8899:37:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":28916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8899:39:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":28917,"nodeType":"RevertStatement","src":"8892:46:74"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":28922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":28920,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28902,"src":"9153:17:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":28921,"name":"MAX_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4871,"src":"9173:18:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9153:38:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":28929,"nodeType":"IfStatement","src":"9149:109:74","trueBody":{"id":28928,"nodeType":"Block","src":"9193:65:74","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28923,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"9214:12:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3768_$","typeString":"type(contract IVaultErrors)"}},"id":28925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9227:18:74","memberName":"PercentageAboveMax","nodeType":"MemberAccess","referencedDeclaration":3619,"src":"9214:31:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":28926,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9214:33:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":28927,"nodeType":"RevertStatement","src":"9207:40:74"}]}},{"expression":{"id":28930,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28902,"src":"9275:17:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":28898,"id":28931,"nodeType":"Return","src":"9268:24:74"}]},"documentation":{"id":28884,"nodeType":"StructuredDocumentation","src":"7989:449:74","text":" @dev Call the `onComputeDynamicSwapFeePercentage` hook and return the result. Reverts on failure.\n @param swapParams The swap parameters used to calculate the fee\n @param pool Pool address\n @param staticSwapFeePercentage Value of the static swap fee, for reference\n @param hooksContract Storage slot with the address of the hooks contract\n @return swapFeePercentage The calculated swap fee percentage"},"id":28933,"implemented":true,"kind":"function","modifiers":[],"name":"callComputeDynamicSwapFeeHook","nameLocation":"8452:29:74","nodeType":"FunctionDefinition","parameters":{"id":28895,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28887,"mutability":"mutable","name":"swapParams","nameLocation":"8513:10:74","nodeType":"VariableDeclaration","scope":28933,"src":"8491:32:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":28886,"nodeType":"UserDefinedTypeName","pathNode":{"id":28885,"name":"PoolSwapParams","nameLocations":["8491:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4772,"src":"8491:14:74"},"referencedDeclaration":4772,"src":"8491:14:74","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":28889,"mutability":"mutable","name":"pool","nameLocation":"8541:4:74","nodeType":"VariableDeclaration","scope":28933,"src":"8533:12:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28888,"name":"address","nodeType":"ElementaryTypeName","src":"8533:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28891,"mutability":"mutable","name":"staticSwapFeePercentage","nameLocation":"8563:23:74","nodeType":"VariableDeclaration","scope":28933,"src":"8555:31:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28890,"name":"uint256","nodeType":"ElementaryTypeName","src":"8555:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":28894,"mutability":"mutable","name":"hooksContract","nameLocation":"8603:13:74","nodeType":"VariableDeclaration","scope":28933,"src":"8596:20:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"},"typeName":{"id":28893,"nodeType":"UserDefinedTypeName","pathNode":{"id":28892,"name":"IHooks","nameLocations":["8596:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":2026,"src":"8596:6:74"},"referencedDeclaration":2026,"src":"8596:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"visibility":"internal"}],"src":"8481:141:74"},"returnParameters":{"id":28898,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28897,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":28933,"src":"8646:7:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28896,"name":"uint256","nodeType":"ElementaryTypeName","src":"8646:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8645:9:74"},"scope":29474,"src":"8443:856:74","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":28959,"nodeType":"Block","src":"9664:243:74","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":28951,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":28947,"name":"swapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28937,"src":"9705:10:74","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}},{"id":28948,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28939,"src":"9717:4:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":28945,"name":"hooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28942,"src":"9678:13:74","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"id":28946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9692:12:74","memberName":"onBeforeSwap","nodeType":"MemberAccess","referencedDeclaration":1999,"src":"9678:26:74","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_PoolSwapParams_$4772_memory_ptr_$_t_address_$returns$_t_bool_$","typeString":"function (struct PoolSwapParams memory,address) external returns (bool)"}},"id":28949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9678:44:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":28950,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9726:5:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"9678:53:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":28958,"nodeType":"IfStatement","src":"9674:227:74","trueBody":{"id":28957,"nodeType":"Block","src":"9733:168:74","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":28952,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"9855:12:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3768_$","typeString":"type(contract IVaultErrors)"}},"id":28954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9868:20:74","memberName":"BeforeSwapHookFailed","nodeType":"MemberAccess","referencedDeclaration":3482,"src":"9855:33:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":28955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9855:35:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":28956,"nodeType":"RevertStatement","src":"9848:42:74"}]}}]},"documentation":{"id":28934,"nodeType":"StructuredDocumentation","src":"9305:247:74","text":" @dev Call the `onBeforeSwap` hook. Reverts on failure.\n @param swapParams The swap parameters used in the hook\n @param pool Pool address\n @param hooksContract Storage slot with the address of the hooks contract"},"id":28960,"implemented":true,"kind":"function","modifiers":[],"name":"callBeforeSwapHook","nameLocation":"9566:18:74","nodeType":"FunctionDefinition","parameters":{"id":28943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28937,"mutability":"mutable","name":"swapParams","nameLocation":"9607:10:74","nodeType":"VariableDeclaration","scope":28960,"src":"9585:32:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":28936,"nodeType":"UserDefinedTypeName","pathNode":{"id":28935,"name":"PoolSwapParams","nameLocations":["9585:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4772,"src":"9585:14:74"},"referencedDeclaration":4772,"src":"9585:14:74","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":28939,"mutability":"mutable","name":"pool","nameLocation":"9627:4:74","nodeType":"VariableDeclaration","scope":28960,"src":"9619:12:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28938,"name":"address","nodeType":"ElementaryTypeName","src":"9619:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28942,"mutability":"mutable","name":"hooksContract","nameLocation":"9640:13:74","nodeType":"VariableDeclaration","scope":28960,"src":"9633:20:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"},"typeName":{"id":28941,"nodeType":"UserDefinedTypeName","pathNode":{"id":28940,"name":"IHooks","nameLocations":["9633:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":2026,"src":"9633:6:74"},"referencedDeclaration":2026,"src":"9633:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"visibility":"internal"}],"src":"9584:70:74"},"returnParameters":{"id":28944,"nodeType":"ParameterList","parameters":[],"src":"9664:0:74"},"scope":29474,"src":"9557:350:74","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":29095,"nodeType":"Block","src":"11164:1965:74","statements":[{"assignments":[28988,28990],"declarations":[{"constant":false,"id":28988,"mutability":"mutable","name":"amountInScaled18","nameLocation":"11234:16:74","nodeType":"VariableDeclaration","scope":29095,"src":"11226:24:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28987,"name":"uint256","nodeType":"ElementaryTypeName","src":"11226:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":28990,"mutability":"mutable","name":"amountOutScaled18","nameLocation":"11260:17:74","nodeType":"VariableDeclaration","scope":29095,"src":"11252:25:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28989,"name":"uint256","nodeType":"ElementaryTypeName","src":"11252:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29005,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},"id":28995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":28991,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28973,"src":"11281:15:74","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":28992,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11297:4:74","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4739,"src":"11281:20:74","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":28993,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"11305:8:74","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4735_$","typeString":"type(enum SwapKind)"}},"id":28994,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11314:8:74","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"11305:17:74","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"src":"11281:41:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"components":[{"id":29000,"name":"amountCalculatedScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28966,"src":"11406:24:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":29001,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28976,"src":"11432:5:74","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":29002,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11438:19:74","memberName":"amountGivenScaled18","nodeType":"MemberAccess","referencedDeclaration":4658,"src":"11432:25:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":29003,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11405:53:74","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"id":29004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"11281:177:74","trueExpression":{"components":[{"expression":{"id":28996,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28976,"src":"11338:5:74","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":28997,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11344:19:74","memberName":"amountGivenScaled18","nodeType":"MemberAccess","referencedDeclaration":4658,"src":"11338:25:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":28998,"name":"amountCalculatedScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28966,"src":"11365:24:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":28999,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11337:53:74","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"11225:233:74"},{"assignments":[29007,29009],"declarations":[{"constant":false,"id":29007,"mutability":"mutable","name":"success","nameLocation":"11475:7:74","nodeType":"VariableDeclaration","scope":29095,"src":"11470:12:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29006,"name":"bool","nodeType":"ElementaryTypeName","src":"11470:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":29009,"mutability":"mutable","name":"hookAdjustedAmountCalculatedRaw","nameLocation":"11492:31:74","nodeType":"VariableDeclaration","scope":29095,"src":"11484:39:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29008,"name":"uint256","nodeType":"ElementaryTypeName","src":"11484:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29040,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":29013,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28973,"src":"11606:15:74","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":29014,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11622:4:74","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4739,"src":"11606:20:74","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},{"expression":{"id":29015,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28973,"src":"11653:15:74","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":29016,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11669:7:74","memberName":"tokenIn","nodeType":"MemberAccess","referencedDeclaration":4744,"src":"11653:23:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"expression":{"id":29017,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28973,"src":"11704:15:74","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":29018,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11720:8:74","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":4747,"src":"11704:24:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":29019,"name":"amountInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28988,"src":"11764:16:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29020,"name":"amountOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28990,"src":"11817:17:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":29021,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28979,"src":"11876:8:74","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":29022,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11885:20:74","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":4722,"src":"11876:29:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":29025,"indexExpression":{"expression":{"id":29023,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28976,"src":"11906:5:74","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":29024,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11912:7:74","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":4654,"src":"11906:13:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11876:44:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":29026,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28979,"src":"11963:8:74","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":29027,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11972:20:74","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":4722,"src":"11963:29:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":29030,"indexExpression":{"expression":{"id":29028,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28976,"src":"11993:5:74","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"id":29029,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11999:8:74","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":4656,"src":"11993:14:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11963:45:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29031,"name":"amountCalculatedScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28966,"src":"12052:24:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29032,"name":"amountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28968,"src":"12115:19:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29033,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28970,"src":"12160:6:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":29034,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28973,"src":"12190:15:74","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":29035,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12206:4:74","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4741,"src":"12190:20:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":29036,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28973,"src":"12238:15:74","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":29037,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12254:8:74","memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":4753,"src":"12238:24:74","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":29012,"name":"AfterSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4801,"src":"11566:15:74","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_AfterSwapParams_$4801_storage_ptr_$","typeString":"type(struct AfterSwapParams storage pointer)"}},"id":29038,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["11600:4:74","11644:7:74","11694:8:74","11746:16:74","11798:17:74","11852:22:74","11938:23:74","12026:24:74","12094:19:74","12152:6:74","12184:4:74","12228:8:74"],"names":["kind","tokenIn","tokenOut","amountInScaled18","amountOutScaled18","tokenInBalanceScaled18","tokenOutBalanceScaled18","amountCalculatedScaled18","amountCalculatedRaw","router","pool","userData"],"nodeType":"FunctionCall","src":"11566:711:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_memory_ptr","typeString":"struct AfterSwapParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_memory_ptr","typeString":"struct AfterSwapParams memory"}],"expression":{"id":29010,"name":"hooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28982,"src":"11527:13:74","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"id":29011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11541:11:74","memberName":"onAfterSwap","nodeType":"MemberAccess","referencedDeclaration":2010,"src":"11527:25:74","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_AfterSwapParams_$4801_memory_ptr_$returns$_t_bool_$_t_uint256_$","typeString":"function (struct AfterSwapParams memory) external returns (bool,uint256)"}},"id":29039,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11527:760:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"nodeType":"VariableDeclarationStatement","src":"11469:818:74"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":29043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29041,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29007,"src":"12302:7:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":29042,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12313:5:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"12302:16:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29050,"nodeType":"IfStatement","src":"12298:188:74","trueBody":{"id":29049,"nodeType":"Block","src":"12320:166:74","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29044,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"12441:12:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3768_$","typeString":"type(contract IVaultErrors)"}},"id":29046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12454:19:74","memberName":"AfterSwapHookFailed","nodeType":"MemberAccess","referencedDeclaration":3485,"src":"12441:32:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":29047,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12441:34:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":29048,"nodeType":"RevertStatement","src":"12434:41:74"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":29055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29051,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28964,"src":"12588:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":29052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12595:25:74","memberName":"enableHookAdjustedAmounts","nodeType":"MemberAccess","referencedDeclaration":28421,"src":"12588:32:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":29053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12588:34:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":29054,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12626:5:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"12588:43:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29059,"nodeType":"IfStatement","src":"12584:100:74","trueBody":{"id":29058,"nodeType":"Block","src":"12633:51:74","statements":[{"expression":{"id":29056,"name":"amountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28968,"src":"12654:19:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":28986,"id":29057,"nodeType":"Return","src":"12647:26:74"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":29082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":29069,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},"id":29064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":29060,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28973,"src":"12712:15:74","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":29061,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12728:4:74","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4739,"src":"12712:20:74","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":29062,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"12736:8:74","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4735_$","typeString":"type(enum SwapKind)"}},"id":29063,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12745:8:74","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"12736:17:74","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"src":"12712:41:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29068,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29065,"name":"hookAdjustedAmountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29009,"src":"12757:31:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":29066,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28973,"src":"12791:15:74","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":29067,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12807:8:74","memberName":"limitRaw","nodeType":"MemberAccess","referencedDeclaration":4751,"src":"12791:24:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12757:58:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12712:103:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":29070,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12711:105:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":29080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},"id":29075,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":29071,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28973,"src":"12833:15:74","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":29072,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12849:4:74","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4739,"src":"12833:20:74","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":29073,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"12857:8:74","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4735_$","typeString":"type(enum SwapKind)"}},"id":29074,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12866:9:74","memberName":"EXACT_OUT","nodeType":"MemberAccess","referencedDeclaration":4734,"src":"12857:18:74","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"src":"12833:42:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29076,"name":"hookAdjustedAmountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29009,"src":"12879:31:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"id":29077,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28973,"src":"12913:15:74","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":29078,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12929:8:74","memberName":"limitRaw","nodeType":"MemberAccess","referencedDeclaration":4751,"src":"12913:24:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12879:58:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12833:104:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":29081,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12832:106:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12711:227:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29092,"nodeType":"IfStatement","src":"12694:380:74","trueBody":{"id":29091,"nodeType":"Block","src":"12949:125:74","statements":[{"errorCall":{"arguments":[{"id":29086,"name":"hookAdjustedAmountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29009,"src":"13005:31:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":29087,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28973,"src":"13038:15:74","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},"id":29088,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13054:8:74","memberName":"limitRaw","nodeType":"MemberAccess","referencedDeclaration":4751,"src":"13038:24:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":29083,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"12970:12:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3768_$","typeString":"type(contract IVaultErrors)"}},"id":29085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12983:21:74","memberName":"HookAdjustedSwapLimit","nodeType":"MemberAccess","referencedDeclaration":3532,"src":"12970:34:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":29089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12970:93:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":29090,"nodeType":"RevertStatement","src":"12963:100:74"}]}},{"expression":{"id":29093,"name":"hookAdjustedAmountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29009,"src":"13091:31:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":28986,"id":29094,"nodeType":"Return","src":"13084:38:74"}]},"documentation":{"id":28961,"nodeType":"StructuredDocumentation","src":"9913:908:74","text":" @dev Call the `onAfterSwap` hook, then validate and return the result. Reverts on failure, or if the limits\n are violated. If the hook contract did not enable hook-adjusted amounts, it will ignore the hook results and\n return the original `amountCalculatedRaw`.\n @param config The encoded pool configuration\n @param amountCalculatedScaled18 Token amount calculated by the swap\n @param amountCalculatedRaw Token amount calculated by the swap\n @param router Router address\n @param vaultSwapParams The swap parameters\n @param state Temporary state used in swap operations\n @param poolData Struct containing balance and token information of the pool\n @param hooksContract Storage slot with the address of the hooks contract\n @return hookAdjustedAmountCalculatedRaw New amount calculated, potentially modified by the hook"},"id":29096,"implemented":true,"kind":"function","modifiers":[],"name":"callAfterSwapHook","nameLocation":"10835:17:74","nodeType":"FunctionDefinition","parameters":{"id":28983,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28964,"mutability":"mutable","name":"config","nameLocation":"10877:6:74","nodeType":"VariableDeclaration","scope":29096,"src":"10862:21:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":28963,"nodeType":"UserDefinedTypeName","pathNode":{"id":28962,"name":"PoolConfigBits","nameLocations":["10862:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"10862:14:74"},"referencedDeclaration":4582,"src":"10862:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":28966,"mutability":"mutable","name":"amountCalculatedScaled18","nameLocation":"10901:24:74","nodeType":"VariableDeclaration","scope":29096,"src":"10893:32:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28965,"name":"uint256","nodeType":"ElementaryTypeName","src":"10893:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":28968,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"10943:19:74","nodeType":"VariableDeclaration","scope":29096,"src":"10935:27:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28967,"name":"uint256","nodeType":"ElementaryTypeName","src":"10935:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":28970,"mutability":"mutable","name":"router","nameLocation":"10980:6:74","nodeType":"VariableDeclaration","scope":29096,"src":"10972:14:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28969,"name":"address","nodeType":"ElementaryTypeName","src":"10972:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":28973,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"11019:15:74","nodeType":"VariableDeclaration","scope":29096,"src":"10996:38:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":28972,"nodeType":"UserDefinedTypeName","pathNode":{"id":28971,"name":"VaultSwapParams","nameLocations":["10996:15:74"],"nodeType":"IdentifierPath","referencedDeclaration":4754,"src":"10996:15:74"},"referencedDeclaration":4754,"src":"10996:15:74","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"},{"constant":false,"id":28976,"mutability":"mutable","name":"state","nameLocation":"11061:5:74","nodeType":"VariableDeclaration","scope":29096,"src":"11044:22:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState"},"typeName":{"id":28975,"nodeType":"UserDefinedTypeName","pathNode":{"id":28974,"name":"SwapState","nameLocations":["11044:9:74"],"nodeType":"IdentifierPath","referencedDeclaration":4661,"src":"11044:9:74"},"referencedDeclaration":4661,"src":"11044:9:74","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_storage_ptr","typeString":"struct SwapState"}},"visibility":"internal"},{"constant":false,"id":28979,"mutability":"mutable","name":"poolData","nameLocation":"11092:8:74","nodeType":"VariableDeclaration","scope":29096,"src":"11076:24:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":28978,"nodeType":"UserDefinedTypeName","pathNode":{"id":28977,"name":"PoolData","nameLocations":["11076:8:74"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"11076:8:74"},"referencedDeclaration":4729,"src":"11076:8:74","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":28982,"mutability":"mutable","name":"hooksContract","nameLocation":"11117:13:74","nodeType":"VariableDeclaration","scope":29096,"src":"11110:20:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"},"typeName":{"id":28981,"nodeType":"UserDefinedTypeName","pathNode":{"id":28980,"name":"IHooks","nameLocations":["11110:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":2026,"src":"11110:6:74"},"referencedDeclaration":2026,"src":"11110:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"visibility":"internal"}],"src":"10852:284:74"},"returnParameters":{"id":28986,"nodeType":"ParameterList","parameters":[{"constant":false,"id":28985,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29096,"src":"11155:7:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":28984,"name":"uint256","nodeType":"ElementaryTypeName","src":"11155:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11154:9:74"},"scope":29474,"src":"10826:2303:74","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":29138,"nodeType":"Block","src":"13815:416:74","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":29130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":29116,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29099,"src":"13894:6:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":29117,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29105,"src":"13918:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":29118,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13925:4:74","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4810,"src":"13918:11:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":29119,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29105,"src":"13947:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":29120,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13954:4:74","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4820,"src":"13947:11:74","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},{"id":29121,"name":"maxAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29102,"src":"13976:20:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":29122,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29105,"src":"14014:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":29123,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14021:15:74","memberName":"minBptAmountOut","nodeType":"MemberAccess","referencedDeclaration":4817,"src":"14014:22:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":29124,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29108,"src":"14054:8:74","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":29125,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14063:20:74","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":4722,"src":"14054:29:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":29126,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29105,"src":"14101:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":29127,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14108:8:74","memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":4822,"src":"14101:15:74","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":29114,"name":"hooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29111,"src":"13842:13:74","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"id":29115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13856:20:74","memberName":"onBeforeAddLiquidity","nodeType":"MemberAccess","referencedDeclaration":1907,"src":"13842:34:74","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_enum$_AddLiquidityKind_$4807_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (address,address,enum AddLiquidityKind,uint256[] memory,uint256,uint256[] memory,bytes memory) external returns (bool)"}},"id":29128,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13842:288:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":29129,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"14134:5:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"13842:297:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29137,"nodeType":"IfStatement","src":"13825:400:74","trueBody":{"id":29136,"nodeType":"Block","src":"14150:75:74","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29131,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"14171:12:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3768_$","typeString":"type(contract IVaultErrors)"}},"id":29133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14184:28:74","memberName":"BeforeAddLiquidityHookFailed","nodeType":"MemberAccess","referencedDeclaration":3494,"src":"14171:41:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":29134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14171:43:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":29135,"nodeType":"RevertStatement","src":"14164:50:74"}]}}]},"documentation":{"id":29097,"nodeType":"StructuredDocumentation","src":"13135:447:74","text":" @dev Call the `onBeforeAddLiquidity` hook. Reverts on failure.\n @param router Router address\n @param maxAmountsInScaled18 An array with maximum amounts for each input token of the add liquidity operation\n @param params The add liquidity parameters\n @param poolData Struct containing balance and token information of the pool\n @param hooksContract Storage slot with the address of the hooks contract"},"id":29139,"implemented":true,"kind":"function","modifiers":[],"name":"callBeforeAddLiquidityHook","nameLocation":"13596:26:74","nodeType":"FunctionDefinition","parameters":{"id":29112,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29099,"mutability":"mutable","name":"router","nameLocation":"13640:6:74","nodeType":"VariableDeclaration","scope":29139,"src":"13632:14:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29098,"name":"address","nodeType":"ElementaryTypeName","src":"13632:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29102,"mutability":"mutable","name":"maxAmountsInScaled18","nameLocation":"13673:20:74","nodeType":"VariableDeclaration","scope":29139,"src":"13656:37:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":29100,"name":"uint256","nodeType":"ElementaryTypeName","src":"13656:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29101,"nodeType":"ArrayTypeName","src":"13656:9:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":29105,"mutability":"mutable","name":"params","nameLocation":"13729:6:74","nodeType":"VariableDeclaration","scope":29139,"src":"13703:32:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams"},"typeName":{"id":29104,"nodeType":"UserDefinedTypeName","pathNode":{"id":29103,"name":"AddLiquidityParams","nameLocations":["13703:18:74"],"nodeType":"IdentifierPath","referencedDeclaration":4823,"src":"13703:18:74"},"referencedDeclaration":4823,"src":"13703:18:74","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_storage_ptr","typeString":"struct AddLiquidityParams"}},"visibility":"internal"},{"constant":false,"id":29108,"mutability":"mutable","name":"poolData","nameLocation":"13761:8:74","nodeType":"VariableDeclaration","scope":29139,"src":"13745:24:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":29107,"nodeType":"UserDefinedTypeName","pathNode":{"id":29106,"name":"PoolData","nameLocations":["13745:8:74"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"13745:8:74"},"referencedDeclaration":4729,"src":"13745:8:74","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":29111,"mutability":"mutable","name":"hooksContract","nameLocation":"13786:13:74","nodeType":"VariableDeclaration","scope":29139,"src":"13779:20:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"},"typeName":{"id":29110,"nodeType":"UserDefinedTypeName","pathNode":{"id":29109,"name":"IHooks","nameLocations":["13779:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":2026,"src":"13779:6:74"},"referencedDeclaration":2026,"src":"13779:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"visibility":"internal"}],"src":"13622:183:74"},"returnParameters":{"id":29113,"nodeType":"ParameterList","parameters":[],"src":"13815:0:74"},"scope":29474,"src":"13587:644:74","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":29255,"nodeType":"Block","src":"15588:1128:74","statements":[{"assignments":[29169,29172],"declarations":[{"constant":false,"id":29169,"mutability":"mutable","name":"success","nameLocation":"15604:7:74","nodeType":"VariableDeclaration","scope":29255,"src":"15599:12:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29168,"name":"bool","nodeType":"ElementaryTypeName","src":"15599:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":29172,"mutability":"mutable","name":"hookAdjustedAmountsInRaw","nameLocation":"15630:24:74","nodeType":"VariableDeclaration","scope":29255,"src":"15613:41:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":29170,"name":"uint256","nodeType":"ElementaryTypeName","src":"15613:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29171,"nodeType":"ArrayTypeName","src":"15613:9:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":29188,"initialValue":{"arguments":[{"id":29175,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29145,"src":"15705:6:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":29176,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29156,"src":"15725:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":29177,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15732:4:74","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4810,"src":"15725:11:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":29178,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29156,"src":"15750:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":29179,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15757:4:74","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4820,"src":"15750:11:74","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},{"id":29180,"name":"amountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29148,"src":"15775:17:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":29181,"name":"amountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29151,"src":"15806:12:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":29182,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29153,"src":"15832:12:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":29183,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29159,"src":"15858:8:74","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":29184,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15867:20:74","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":4722,"src":"15858:29:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":29185,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29156,"src":"15901:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":29186,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"15908:8:74","memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":4822,"src":"15901:15:74","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":29173,"name":"hooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29162,"src":"15658:13:74","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"id":29174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15672:19:74","memberName":"onAfterAddLiquidity","nodeType":"MemberAccess","referencedDeclaration":1936,"src":"15658:33:74","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_enum$_AddLiquidityKind_$4807_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address,address,enum AddLiquidityKind,uint256[] memory,uint256[] memory,uint256,uint256[] memory,bytes memory) external returns (bool,uint256[] memory)"}},"id":29187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15658:268:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(bool,uint256[] memory)"}},"nodeType":"VariableDeclarationStatement","src":"15598:328:74"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":29197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":29191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29189,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29169,"src":"15941:7:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":29190,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15952:5:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"15941:16:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":29192,"name":"hookAdjustedAmountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29172,"src":"15961:24:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":29193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15986:6:74","memberName":"length","nodeType":"MemberAccess","src":"15961:31:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":29194,"name":"amountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29151,"src":"15996:12:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":29195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16009:6:74","memberName":"length","nodeType":"MemberAccess","src":"15996:19:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15961:54:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"15941:74:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29204,"nodeType":"IfStatement","src":"15937:154:74","trueBody":{"id":29203,"nodeType":"Block","src":"16017:74:74","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29198,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"16038:12:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3768_$","typeString":"type(contract IVaultErrors)"}},"id":29200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16051:27:74","memberName":"AfterAddLiquidityHookFailed","nodeType":"MemberAccess","referencedDeclaration":3497,"src":"16038:40:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":29201,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16038:42:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":29202,"nodeType":"RevertStatement","src":"16031:49:74"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":29209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29205,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29143,"src":"16193:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":29206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16200:25:74","memberName":"enableHookAdjustedAmounts","nodeType":"MemberAccess","referencedDeclaration":28421,"src":"16193:32:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":29207,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16193:34:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":29208,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16231:5:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"16193:43:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29213,"nodeType":"IfStatement","src":"16189:93:74","trueBody":{"id":29212,"nodeType":"Block","src":"16238:44:74","statements":[{"expression":{"id":29210,"name":"amountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29151,"src":"16259:12:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":29167,"id":29211,"nodeType":"Return","src":"16252:19:74"}]}},{"body":{"id":29251,"nodeType":"Block","src":"16354:314:74","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":29225,"name":"hookAdjustedAmountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29172,"src":"16372:24:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":29227,"indexExpression":{"id":29226,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29215,"src":"16397:1:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16372:27:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"baseExpression":{"expression":{"id":29228,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29156,"src":"16402:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":29229,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16409:12:74","memberName":"maxAmountsIn","nodeType":"MemberAccess","referencedDeclaration":4815,"src":"16402:19:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":29231,"indexExpression":{"id":29230,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29215,"src":"16422:1:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16402:22:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16372:52:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29250,"nodeType":"IfStatement","src":"16368:290:74","trueBody":{"id":29249,"nodeType":"Block","src":"16426:232:74","statements":[{"errorCall":{"arguments":[{"baseExpression":{"expression":{"id":29236,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29159,"src":"16514:8:74","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":29237,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16523:6:74","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":4712,"src":"16514:15:74","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":29239,"indexExpression":{"id":29238,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29215,"src":"16530:1:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16514:18:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"baseExpression":{"id":29240,"name":"hookAdjustedAmountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29172,"src":"16554:24:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":29242,"indexExpression":{"id":29241,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29215,"src":"16579:1:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16554:27:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":29243,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29156,"src":"16603:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},"id":29244,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16610:12:74","memberName":"maxAmountsIn","nodeType":"MemberAccess","referencedDeclaration":4815,"src":"16603:19:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":29246,"indexExpression":{"id":29245,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29215,"src":"16623:1:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16603:22:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":29233,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"16451:12:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3768_$","typeString":"type(contract IVaultErrors)"}},"id":29235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16464:28:74","memberName":"HookAdjustedAmountInAboveMax","nodeType":"MemberAccess","referencedDeclaration":3558,"src":"16451:41:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$40109_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (contract IERC20,uint256,uint256) pure returns (error)"}},"id":29247,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16451:192:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":29248,"nodeType":"RevertStatement","src":"16444:199:74"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29218,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29215,"src":"16312:1:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":29219,"name":"hookAdjustedAmountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29172,"src":"16316:24:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":29220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16341:6:74","memberName":"length","nodeType":"MemberAccess","src":"16316:31:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16312:35:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29252,"initializationExpression":{"assignments":[29215],"declarations":[{"constant":false,"id":29215,"mutability":"mutable","name":"i","nameLocation":"16305:1:74","nodeType":"VariableDeclaration","scope":29252,"src":"16297:9:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29214,"name":"uint256","nodeType":"ElementaryTypeName","src":"16297:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29217,"initialValue":{"hexValue":"30","id":29216,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16309:1:74","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16297:13:74"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":29223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"16349:3:74","subExpression":{"id":29222,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29215,"src":"16349:1:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29224,"nodeType":"ExpressionStatement","src":"16349:3:74"},"nodeType":"ForStatement","src":"16292:376:74"},{"expression":{"id":29253,"name":"hookAdjustedAmountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29172,"src":"16685:24:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":29167,"id":29254,"nodeType":"Return","src":"16678:31:74"}]},"documentation":{"id":29140,"nodeType":"StructuredDocumentation","src":"14237:995:74","text":" @dev Call the `onAfterAddLiquidity` hook, then validate and return the result. Reverts on failure, or if\n the limits are violated. If the contract did not enable hook-adjusted amounts, it will ignore the hook\n results and return the original `amountsInRaw`.\n @param config The encoded pool configuration\n @param router Router address\n @param amountsInScaled18 An array with amounts for each input token of the add liquidity operation\n @param amountsInRaw An array with amounts for each input token of the add liquidity operation\n @param bptAmountOut The BPT amount a user will receive after add liquidity operation succeeds\n @param params The add liquidity parameters\n @param poolData Struct containing balance and token information of the pool\n @param hooksContract Storage slot with the address of the hooks contract\n @return hookAdjustedAmountsInRaw New amountsInRaw, potentially modified by the hook"},"id":29256,"implemented":true,"kind":"function","modifiers":[],"name":"callAfterAddLiquidityHook","nameLocation":"15246:25:74","nodeType":"FunctionDefinition","parameters":{"id":29163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29143,"mutability":"mutable","name":"config","nameLocation":"15296:6:74","nodeType":"VariableDeclaration","scope":29256,"src":"15281:21:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":29142,"nodeType":"UserDefinedTypeName","pathNode":{"id":29141,"name":"PoolConfigBits","nameLocations":["15281:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"15281:14:74"},"referencedDeclaration":4582,"src":"15281:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":29145,"mutability":"mutable","name":"router","nameLocation":"15320:6:74","nodeType":"VariableDeclaration","scope":29256,"src":"15312:14:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29144,"name":"address","nodeType":"ElementaryTypeName","src":"15312:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29148,"mutability":"mutable","name":"amountsInScaled18","nameLocation":"15353:17:74","nodeType":"VariableDeclaration","scope":29256,"src":"15336:34:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":29146,"name":"uint256","nodeType":"ElementaryTypeName","src":"15336:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29147,"nodeType":"ArrayTypeName","src":"15336:9:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":29151,"mutability":"mutable","name":"amountsInRaw","nameLocation":"15397:12:74","nodeType":"VariableDeclaration","scope":29256,"src":"15380:29:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":29149,"name":"uint256","nodeType":"ElementaryTypeName","src":"15380:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29150,"nodeType":"ArrayTypeName","src":"15380:9:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":29153,"mutability":"mutable","name":"bptAmountOut","nameLocation":"15427:12:74","nodeType":"VariableDeclaration","scope":29256,"src":"15419:20:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29152,"name":"uint256","nodeType":"ElementaryTypeName","src":"15419:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29156,"mutability":"mutable","name":"params","nameLocation":"15475:6:74","nodeType":"VariableDeclaration","scope":29256,"src":"15449:32:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams"},"typeName":{"id":29155,"nodeType":"UserDefinedTypeName","pathNode":{"id":29154,"name":"AddLiquidityParams","nameLocations":["15449:18:74"],"nodeType":"IdentifierPath","referencedDeclaration":4823,"src":"15449:18:74"},"referencedDeclaration":4823,"src":"15449:18:74","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_storage_ptr","typeString":"struct AddLiquidityParams"}},"visibility":"internal"},{"constant":false,"id":29159,"mutability":"mutable","name":"poolData","nameLocation":"15507:8:74","nodeType":"VariableDeclaration","scope":29256,"src":"15491:24:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":29158,"nodeType":"UserDefinedTypeName","pathNode":{"id":29157,"name":"PoolData","nameLocations":["15491:8:74"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"15491:8:74"},"referencedDeclaration":4729,"src":"15491:8:74","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":29162,"mutability":"mutable","name":"hooksContract","nameLocation":"15532:13:74","nodeType":"VariableDeclaration","scope":29256,"src":"15525:20:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"},"typeName":{"id":29161,"nodeType":"UserDefinedTypeName","pathNode":{"id":29160,"name":"IHooks","nameLocations":["15525:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":2026,"src":"15525:6:74"},"referencedDeclaration":2026,"src":"15525:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"visibility":"internal"}],"src":"15271:280:74"},"returnParameters":{"id":29167,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29166,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29256,"src":"15570:16:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":29164,"name":"uint256","nodeType":"ElementaryTypeName","src":"15570:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29165,"nodeType":"ArrayTypeName","src":"15570:9:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"15569:18:74"},"scope":29474,"src":"15237:1479:74","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":29298,"nodeType":"Block","src":"17406:422:74","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":29290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":29276,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29262,"src":"17488:6:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":29277,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29265,"src":"17512:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":29278,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17519:4:74","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4831,"src":"17512:11:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":29279,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29265,"src":"17541:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":29280,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17548:4:74","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4841,"src":"17541:11:74","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},{"expression":{"id":29281,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29265,"src":"17570:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":29282,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17577:14:74","memberName":"maxBptAmountIn","nodeType":"MemberAccess","referencedDeclaration":4835,"src":"17570:21:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29283,"name":"minAmountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29260,"src":"17609:21:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":29284,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29268,"src":"17648:8:74","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":29285,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17657:20:74","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":4722,"src":"17648:29:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":29286,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29265,"src":"17695:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":29287,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17702:8:74","memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":4843,"src":"17695:15:74","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":29274,"name":"hooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29271,"src":"17433:13:74","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"id":29275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17447:23:74","memberName":"onBeforeRemoveLiquidity","nodeType":"MemberAccess","referencedDeclaration":1959,"src":"17433:37:74","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_enum$_RemoveLiquidityKind_$4828_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (address,address,enum RemoveLiquidityKind,uint256,uint256[] memory,uint256[] memory,bytes memory) external returns (bool)"}},"id":29288,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17433:291:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":29289,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17728:5:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"17433:300:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29297,"nodeType":"IfStatement","src":"17416:406:74","trueBody":{"id":29296,"nodeType":"Block","src":"17744:78:74","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29291,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"17765:12:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3768_$","typeString":"type(contract IVaultErrors)"}},"id":29293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17778:31:74","memberName":"BeforeRemoveLiquidityHookFailed","nodeType":"MemberAccess","referencedDeclaration":3500,"src":"17765:44:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":29294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17765:46:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":29295,"nodeType":"RevertStatement","src":"17758:53:74"}]}}]},"documentation":{"id":29257,"nodeType":"StructuredDocumentation","src":"16722:444:74","text":" @dev Call the `onBeforeRemoveLiquidity` hook. Reverts on failure.\n @param minAmountsOutScaled18 Minimum amounts for each output token of the remove liquidity operation\n @param router Router address\n @param params The remove liquidity parameters\n @param poolData Struct containing balance and token information of the pool\n @param hooksContract Storage slot with the address of the hooks contract"},"id":29299,"implemented":true,"kind":"function","modifiers":[],"name":"callBeforeRemoveLiquidityHook","nameLocation":"17180:29:74","nodeType":"FunctionDefinition","parameters":{"id":29272,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29260,"mutability":"mutable","name":"minAmountsOutScaled18","nameLocation":"17236:21:74","nodeType":"VariableDeclaration","scope":29299,"src":"17219:38:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":29258,"name":"uint256","nodeType":"ElementaryTypeName","src":"17219:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29259,"nodeType":"ArrayTypeName","src":"17219:9:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":29262,"mutability":"mutable","name":"router","nameLocation":"17275:6:74","nodeType":"VariableDeclaration","scope":29299,"src":"17267:14:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29261,"name":"address","nodeType":"ElementaryTypeName","src":"17267:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29265,"mutability":"mutable","name":"params","nameLocation":"17320:6:74","nodeType":"VariableDeclaration","scope":29299,"src":"17291:35:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams"},"typeName":{"id":29264,"nodeType":"UserDefinedTypeName","pathNode":{"id":29263,"name":"RemoveLiquidityParams","nameLocations":["17291:21:74"],"nodeType":"IdentifierPath","referencedDeclaration":4844,"src":"17291:21:74"},"referencedDeclaration":4844,"src":"17291:21:74","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_storage_ptr","typeString":"struct RemoveLiquidityParams"}},"visibility":"internal"},{"constant":false,"id":29268,"mutability":"mutable","name":"poolData","nameLocation":"17352:8:74","nodeType":"VariableDeclaration","scope":29299,"src":"17336:24:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":29267,"nodeType":"UserDefinedTypeName","pathNode":{"id":29266,"name":"PoolData","nameLocations":["17336:8:74"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"17336:8:74"},"referencedDeclaration":4729,"src":"17336:8:74","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":29271,"mutability":"mutable","name":"hooksContract","nameLocation":"17377:13:74","nodeType":"VariableDeclaration","scope":29299,"src":"17370:20:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"},"typeName":{"id":29270,"nodeType":"UserDefinedTypeName","pathNode":{"id":29269,"name":"IHooks","nameLocations":["17370:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":2026,"src":"17370:6:74"},"referencedDeclaration":2026,"src":"17370:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"visibility":"internal"}],"src":"17209:187:74"},"returnParameters":{"id":29273,"nodeType":"ParameterList","parameters":[],"src":"17406:0:74"},"scope":29474,"src":"17171:657:74","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":29415,"nodeType":"Block","src":"19195:1146:74","statements":[{"assignments":[29329,29332],"declarations":[{"constant":false,"id":29329,"mutability":"mutable","name":"success","nameLocation":"19211:7:74","nodeType":"VariableDeclaration","scope":29415,"src":"19206:12:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29328,"name":"bool","nodeType":"ElementaryTypeName","src":"19206:4:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":29332,"mutability":"mutable","name":"hookAdjustedAmountsOutRaw","nameLocation":"19237:25:74","nodeType":"VariableDeclaration","scope":29415,"src":"19220:42:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":29330,"name":"uint256","nodeType":"ElementaryTypeName","src":"19220:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29331,"nodeType":"ArrayTypeName","src":"19220:9:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":29348,"initialValue":{"arguments":[{"id":29335,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29305,"src":"19316:6:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":29336,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29316,"src":"19336:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":29337,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19343:4:74","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4831,"src":"19336:11:74","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":29338,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29316,"src":"19361:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":29339,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19368:4:74","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4841,"src":"19361:11:74","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},{"id":29340,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29313,"src":"19386:11:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29341,"name":"amountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29308,"src":"19411:18:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":29342,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29311,"src":"19443:13:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":29343,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29319,"src":"19470:8:74","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":29344,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19479:20:74","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":4722,"src":"19470:29:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":29345,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29316,"src":"19513:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":29346,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19520:8:74","memberName":"userData","nodeType":"MemberAccess","referencedDeclaration":4843,"src":"19513:15:74","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":29333,"name":"hooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29322,"src":"19266:13:74","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"id":29334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19280:22:74","memberName":"onAfterRemoveLiquidity","nodeType":"MemberAccess","referencedDeclaration":1988,"src":"19266:36:74","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_enum$_RemoveLiquidityKind_$4828_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address,address,enum RemoveLiquidityKind,uint256,uint256[] memory,uint256[] memory,uint256[] memory,bytes memory) external returns (bool,uint256[] memory)"}},"id":29347,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19266:272:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(bool,uint256[] memory)"}},"nodeType":"VariableDeclarationStatement","src":"19205:333:74"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":29357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":29351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29349,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29329,"src":"19553:7:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":29350,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"19564:5:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"19553:16:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":29352,"name":"hookAdjustedAmountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29332,"src":"19573:25:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":29353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19599:6:74","memberName":"length","nodeType":"MemberAccess","src":"19573:32:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":29354,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29311,"src":"19609:13:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":29355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19623:6:74","memberName":"length","nodeType":"MemberAccess","src":"19609:20:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19573:56:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"19553:76:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29364,"nodeType":"IfStatement","src":"19549:159:74","trueBody":{"id":29363,"nodeType":"Block","src":"19631:77:74","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29358,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"19652:12:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3768_$","typeString":"type(contract IVaultErrors)"}},"id":29360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19665:30:74","memberName":"AfterRemoveLiquidityHookFailed","nodeType":"MemberAccess","referencedDeclaration":3503,"src":"19652:43:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":29361,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19652:45:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":29362,"nodeType":"RevertStatement","src":"19645:52:74"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":29369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29365,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29303,"src":"19810:6:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":29366,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19817:25:74","memberName":"enableHookAdjustedAmounts","nodeType":"MemberAccess","referencedDeclaration":28421,"src":"19810:32:74","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":29367,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19810:34:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":29368,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"19848:5:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"19810:43:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29373,"nodeType":"IfStatement","src":"19806:94:74","trueBody":{"id":29372,"nodeType":"Block","src":"19855:45:74","statements":[{"expression":{"id":29370,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29311,"src":"19876:13:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":29327,"id":29371,"nodeType":"Return","src":"19869:20:74"}]}},{"body":{"id":29411,"nodeType":"Block","src":"19973:319:74","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":29385,"name":"hookAdjustedAmountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29332,"src":"19991:25:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":29387,"indexExpression":{"id":29386,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29375,"src":"20017:1:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19991:28:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"baseExpression":{"expression":{"id":29388,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29316,"src":"20022:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":29389,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20029:13:74","memberName":"minAmountsOut","nodeType":"MemberAccess","referencedDeclaration":4838,"src":"20022:20:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":29391,"indexExpression":{"id":29390,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29375,"src":"20043:1:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20022:23:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19991:54:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29410,"nodeType":"IfStatement","src":"19987:295:74","trueBody":{"id":29409,"nodeType":"Block","src":"20047:235:74","statements":[{"errorCall":{"arguments":[{"baseExpression":{"expression":{"id":29396,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29319,"src":"20136:8:74","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":29397,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20145:6:74","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":4712,"src":"20136:15:74","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":29399,"indexExpression":{"id":29398,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29375,"src":"20152:1:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20136:18:74","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"baseExpression":{"id":29400,"name":"hookAdjustedAmountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29332,"src":"20176:25:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":29402,"indexExpression":{"id":29401,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29375,"src":"20202:1:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20176:28:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":29403,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29316,"src":"20226:6:74","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},"id":29404,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20233:13:74","memberName":"minAmountsOut","nodeType":"MemberAccess","referencedDeclaration":4838,"src":"20226:20:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":29406,"indexExpression":{"id":29405,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29375,"src":"20247:1:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20226:23:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":29393,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"20072:12:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3768_$","typeString":"type(contract IVaultErrors)"}},"id":29395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20085:29:74","memberName":"HookAdjustedAmountOutBelowMin","nodeType":"MemberAccess","referencedDeclaration":3594,"src":"20072:42:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_contract$_IERC20_$40109_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (contract IERC20,uint256,uint256) pure returns (error)"}},"id":29407,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20072:195:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":29408,"nodeType":"RevertStatement","src":"20065:202:74"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":29378,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29375,"src":"19930:1:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":29379,"name":"hookAdjustedAmountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29332,"src":"19934:25:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":29380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19960:6:74","memberName":"length","nodeType":"MemberAccess","src":"19934:32:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19930:36:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29412,"initializationExpression":{"assignments":[29375],"declarations":[{"constant":false,"id":29375,"mutability":"mutable","name":"i","nameLocation":"19923:1:74","nodeType":"VariableDeclaration","scope":29412,"src":"19915:9:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29374,"name":"uint256","nodeType":"ElementaryTypeName","src":"19915:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":29377,"initialValue":{"hexValue":"30","id":29376,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19927:1:74","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"19915:13:74"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":29383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"19968:3:74","subExpression":{"id":29382,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29375,"src":"19968:1:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29384,"nodeType":"ExpressionStatement","src":"19968:3:74"},"nodeType":"ForStatement","src":"19910:382:74"},{"expression":{"id":29413,"name":"hookAdjustedAmountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29332,"src":"20309:25:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":29327,"id":29414,"nodeType":"Return","src":"20302:32:74"}]},"documentation":{"id":29300,"nodeType":"StructuredDocumentation","src":"17834:998:74","text":" @dev Call the `onAfterRemoveLiquidity` hook, then validate and return the result. Reverts on failure, or if\n the limits are violated. If the contract did not enable hook-adjusted amounts, it will ignore the hook\n results and return the original `amountsOutRaw`.\n @param config The encoded pool configuration\n @param router Router address\n @param amountsOutScaled18 Scaled amount of tokens to receive, sorted in token registration order\n @param amountsOutRaw Actual amount of tokens to receive, sorted in token registration order\n @param bptAmountIn The BPT amount a user will need burn to remove the liquidity of the pool\n @param params The remove liquidity parameters\n @param poolData Struct containing balance and token information of the pool\n @param hooksContract Storage slot with the address of the hooks contract\n @return hookAdjustedAmountsOutRaw New amountsOutRaw, potentially modified by the hook"},"id":29416,"implemented":true,"kind":"function","modifiers":[],"name":"callAfterRemoveLiquidityHook","nameLocation":"18846:28:74","nodeType":"FunctionDefinition","parameters":{"id":29323,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29303,"mutability":"mutable","name":"config","nameLocation":"18899:6:74","nodeType":"VariableDeclaration","scope":29416,"src":"18884:21:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":29302,"nodeType":"UserDefinedTypeName","pathNode":{"id":29301,"name":"PoolConfigBits","nameLocations":["18884:14:74"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"18884:14:74"},"referencedDeclaration":4582,"src":"18884:14:74","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":29305,"mutability":"mutable","name":"router","nameLocation":"18923:6:74","nodeType":"VariableDeclaration","scope":29416,"src":"18915:14:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":29304,"name":"address","nodeType":"ElementaryTypeName","src":"18915:7:74","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29308,"mutability":"mutable","name":"amountsOutScaled18","nameLocation":"18956:18:74","nodeType":"VariableDeclaration","scope":29416,"src":"18939:35:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":29306,"name":"uint256","nodeType":"ElementaryTypeName","src":"18939:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29307,"nodeType":"ArrayTypeName","src":"18939:9:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":29311,"mutability":"mutable","name":"amountsOutRaw","nameLocation":"19001:13:74","nodeType":"VariableDeclaration","scope":29416,"src":"18984:30:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":29309,"name":"uint256","nodeType":"ElementaryTypeName","src":"18984:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29310,"nodeType":"ArrayTypeName","src":"18984:9:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":29313,"mutability":"mutable","name":"bptAmountIn","nameLocation":"19032:11:74","nodeType":"VariableDeclaration","scope":29416,"src":"19024:19:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29312,"name":"uint256","nodeType":"ElementaryTypeName","src":"19024:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29316,"mutability":"mutable","name":"params","nameLocation":"19082:6:74","nodeType":"VariableDeclaration","scope":29416,"src":"19053:35:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams"},"typeName":{"id":29315,"nodeType":"UserDefinedTypeName","pathNode":{"id":29314,"name":"RemoveLiquidityParams","nameLocations":["19053:21:74"],"nodeType":"IdentifierPath","referencedDeclaration":4844,"src":"19053:21:74"},"referencedDeclaration":4844,"src":"19053:21:74","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_storage_ptr","typeString":"struct RemoveLiquidityParams"}},"visibility":"internal"},{"constant":false,"id":29319,"mutability":"mutable","name":"poolData","nameLocation":"19114:8:74","nodeType":"VariableDeclaration","scope":29416,"src":"19098:24:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":29318,"nodeType":"UserDefinedTypeName","pathNode":{"id":29317,"name":"PoolData","nameLocations":["19098:8:74"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"19098:8:74"},"referencedDeclaration":4729,"src":"19098:8:74","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":29322,"mutability":"mutable","name":"hooksContract","nameLocation":"19139:13:74","nodeType":"VariableDeclaration","scope":29416,"src":"19132:20:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"},"typeName":{"id":29321,"nodeType":"UserDefinedTypeName","pathNode":{"id":29320,"name":"IHooks","nameLocations":["19132:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":2026,"src":"19132:6:74"},"referencedDeclaration":2026,"src":"19132:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"visibility":"internal"}],"src":"18874:284:74"},"returnParameters":{"id":29327,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29326,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29416,"src":"19177:16:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":29324,"name":"uint256","nodeType":"ElementaryTypeName","src":"19177:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29325,"nodeType":"ArrayTypeName","src":"19177:9:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"19176:18:74"},"scope":29474,"src":"18837:1504:74","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":29442,"nodeType":"Block","src":"20843:170:74","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":29434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":29430,"name":"exactAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29420,"src":"20890:22:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":29431,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29422,"src":"20914:8:74","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":29428,"name":"hooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29425,"src":"20857:13:74","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"id":29429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20871:18:74","memberName":"onBeforeInitialize","nodeType":"MemberAccess","referencedDeclaration":1871,"src":"20857:32:74","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (uint256[] memory,bytes memory) external returns (bool)"}},"id":29432,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20857:66:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":29433,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"20927:5:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"20857:75:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29441,"nodeType":"IfStatement","src":"20853:154:74","trueBody":{"id":29440,"nodeType":"Block","src":"20934:73:74","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29435,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"20955:12:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3768_$","typeString":"type(contract IVaultErrors)"}},"id":29437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20968:26:74","memberName":"BeforeInitializeHookFailed","nodeType":"MemberAccess","referencedDeclaration":3488,"src":"20955:39:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":29438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20955:41:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":29439,"nodeType":"RevertStatement","src":"20948:48:74"}]}}]},"documentation":{"id":29417,"nodeType":"StructuredDocumentation","src":"20347:332:74","text":" @dev Call the `onBeforeInitialize` hook. Reverts on failure.\n @param exactAmountsInScaled18 An array with the initial liquidity of the pool\n @param userData Additional (optional) data required for adding initial liquidity\n @param hooksContract Storage slot with the address of the hooks contract"},"id":29443,"implemented":true,"kind":"function","modifiers":[],"name":"callBeforeInitializeHook","nameLocation":"20693:24:74","nodeType":"FunctionDefinition","parameters":{"id":29426,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29420,"mutability":"mutable","name":"exactAmountsInScaled18","nameLocation":"20744:22:74","nodeType":"VariableDeclaration","scope":29443,"src":"20727:39:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":29418,"name":"uint256","nodeType":"ElementaryTypeName","src":"20727:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29419,"nodeType":"ArrayTypeName","src":"20727:9:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":29422,"mutability":"mutable","name":"userData","nameLocation":"20789:8:74","nodeType":"VariableDeclaration","scope":29443,"src":"20776:21:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":29421,"name":"bytes","nodeType":"ElementaryTypeName","src":"20776:5:74","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":29425,"mutability":"mutable","name":"hooksContract","nameLocation":"20814:13:74","nodeType":"VariableDeclaration","scope":29443,"src":"20807:20:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"},"typeName":{"id":29424,"nodeType":"UserDefinedTypeName","pathNode":{"id":29423,"name":"IHooks","nameLocations":["20807:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":2026,"src":"20807:6:74"},"referencedDeclaration":2026,"src":"20807:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"visibility":"internal"}],"src":"20717:116:74"},"returnParameters":{"id":29427,"nodeType":"ParameterList","parameters":[],"src":"20843:0:74"},"scope":29474,"src":"20684:329:74","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":29472,"nodeType":"Block","src":"21645:182:74","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":29464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":29459,"name":"exactAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29447,"src":"21691:22:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":29460,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29449,"src":"21715:12:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":29461,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29451,"src":"21729:8:74","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":29457,"name":"hooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29454,"src":"21659:13:74","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"id":29458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21673:17:74","memberName":"onAfterInitialize","nodeType":"MemberAccess","referencedDeclaration":1884,"src":"21659:31:74","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (uint256[] memory,uint256,bytes memory) external returns (bool)"}},"id":29462,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21659:79:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":29463,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"21742:5:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"21659:88:74","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29471,"nodeType":"IfStatement","src":"21655:166:74","trueBody":{"id":29470,"nodeType":"Block","src":"21749:72:74","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29465,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"21770:12:74","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3768_$","typeString":"type(contract IVaultErrors)"}},"id":29467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21783:25:74","memberName":"AfterInitializeHookFailed","nodeType":"MemberAccess","referencedDeclaration":3491,"src":"21770:38:74","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":29468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21770:40:74","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":29469,"nodeType":"RevertStatement","src":"21763:47:74"}]}}]},"documentation":{"id":29444,"nodeType":"StructuredDocumentation","src":"21019:433:74","text":" @dev Call the `onAfterInitialize` hook. Reverts on failure.\n @param exactAmountsInScaled18 An array with the initial liquidity of the pool\n @param bptAmountOut The BPT amount a user will receive after initialization operation succeeds\n @param userData Additional (optional) data required for adding initial liquidity\n @param hooksContract Storage slot with the address of the hooks contract"},"id":29473,"implemented":true,"kind":"function","modifiers":[],"name":"callAfterInitializeHook","nameLocation":"21466:23:74","nodeType":"FunctionDefinition","parameters":{"id":29455,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29447,"mutability":"mutable","name":"exactAmountsInScaled18","nameLocation":"21516:22:74","nodeType":"VariableDeclaration","scope":29473,"src":"21499:39:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":29445,"name":"uint256","nodeType":"ElementaryTypeName","src":"21499:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":29446,"nodeType":"ArrayTypeName","src":"21499:9:74","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":29449,"mutability":"mutable","name":"bptAmountOut","nameLocation":"21556:12:74","nodeType":"VariableDeclaration","scope":29473,"src":"21548:20:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29448,"name":"uint256","nodeType":"ElementaryTypeName","src":"21548:7:74","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":29451,"mutability":"mutable","name":"userData","nameLocation":"21591:8:74","nodeType":"VariableDeclaration","scope":29473,"src":"21578:21:74","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":29450,"name":"bytes","nodeType":"ElementaryTypeName","src":"21578:5:74","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":29454,"mutability":"mutable","name":"hooksContract","nameLocation":"21616:13:74","nodeType":"VariableDeclaration","scope":29473,"src":"21609:20:74","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"},"typeName":{"id":29453,"nodeType":"UserDefinedTypeName","pathNode":{"id":29452,"name":"IHooks","nameLocations":["21609:6:74"],"nodeType":"IdentifierPath","referencedDeclaration":2026,"src":"21609:6:74"},"referencedDeclaration":2026,"src":"21609:6:74","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"visibility":"internal"}],"src":"21489:146:74"},"returnParameters":{"id":29456,"nodeType":"ParameterList","parameters":[],"src":"21645:0:74"},"scope":29474,"src":"21457:370:74","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":29475,"src":"1878:19951:74","usedErrors":[],"usedEvents":[]}],"src":"46:21784:74"},"id":74},"@balancer-labs/v3-vault/contracts/lib/PoolConfigConst.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/PoolConfigConst.sol","exportedSymbols":{"FEE_BITLENGTH":[4865],"PoolConfigConst":[29602]},"id":29603,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":29476,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:75"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":29478,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":29603,"sourceUnit":4872,"src":"72:92:75","symbolAliases":[{"foreign":{"id":29477,"name":"FEE_BITLENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4865,"src":"81:13:75","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"PoolConfigConst","contractDependencies":[],"contractKind":"library","documentation":{"id":29479,"nodeType":"StructuredDocumentation","src":"166:664:75","text":" @notice Helper functions to read and write the packed configuration flags stored in `_poolConfigBits`.\n @dev Note that the entire configuration of each pool is stored in the `_poolConfigBits` mapping (one slot per pool).\n This includes the data in the `PoolConfig` struct, plus the data in the `HookFlags` struct. The layout (i.e.,\n offsets for each data field) is specified here.\n There are two libraries for interpreting these data. `HooksConfigLib` parses fields related to hooks, while\n `PoolConfigLib` contains helpers related to the non-hook-related flags, along with aggregate fee percentages\n and other data associated with pools."},"fullyImplemented":true,"id":29602,"linearizedBaseContracts":[29602],"name":"PoolConfigConst","nameLocation":"839:15:75","nodeType":"ContractDefinition","nodes":[{"constant":true,"functionSelector":"6801b442","id":29482,"mutability":"constant","name":"POOL_REGISTERED_OFFSET","nameLocation":"933:22:75","nodeType":"VariableDeclaration","scope":29602,"src":"911:48:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29480,"name":"uint8","nodeType":"ElementaryTypeName","src":"911:5:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"30","id":29481,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"958:1:75","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"public"},{"constant":true,"functionSelector":"18518628","id":29487,"mutability":"constant","name":"POOL_INITIALIZED_OFFSET","nameLocation":"987:23:75","nodeType":"VariableDeclaration","scope":29602,"src":"965:74:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29483,"name":"uint8","nodeType":"ElementaryTypeName","src":"965:5:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":29486,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":29484,"name":"POOL_REGISTERED_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29482,"src":"1013:22:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":29485,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1038:1:75","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1013:26:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"af815f04","id":29492,"mutability":"constant","name":"POOL_PAUSED_OFFSET","nameLocation":"1067:18:75","nodeType":"VariableDeclaration","scope":29602,"src":"1045:70:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29488,"name":"uint8","nodeType":"ElementaryTypeName","src":"1045:5:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":29491,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":29489,"name":"POOL_INITIALIZED_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29487,"src":"1088:23:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":29490,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1114:1:75","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1088:27:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"2d6724e1","id":29497,"mutability":"constant","name":"POOL_RECOVERY_MODE_OFFSET","nameLocation":"1143:25:75","nodeType":"VariableDeclaration","scope":29602,"src":"1121:72:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29493,"name":"uint8","nodeType":"ElementaryTypeName","src":"1121:5:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":29496,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":29494,"name":"POOL_PAUSED_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29492,"src":"1171:18:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":29495,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1192:1:75","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1171:22:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"d9827217","id":29502,"mutability":"constant","name":"UNBALANCED_LIQUIDITY_OFFSET","nameLocation":"1267:27:75","nodeType":"VariableDeclaration","scope":29602,"src":"1245:81:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29498,"name":"uint8","nodeType":"ElementaryTypeName","src":"1245:5:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":29501,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":29499,"name":"POOL_RECOVERY_MODE_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29497,"src":"1297:25:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":29500,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1325:1:75","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1297:29:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"b2cb247c","id":29507,"mutability":"constant","name":"ADD_LIQUIDITY_CUSTOM_OFFSET","nameLocation":"1354:27:75","nodeType":"VariableDeclaration","scope":29602,"src":"1332:83:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29503,"name":"uint8","nodeType":"ElementaryTypeName","src":"1332:5:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":29506,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":29504,"name":"UNBALANCED_LIQUIDITY_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29502,"src":"1384:27:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":29505,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1414:1:75","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1384:31:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"7e3edbf1","id":29512,"mutability":"constant","name":"REMOVE_LIQUIDITY_CUSTOM_OFFSET","nameLocation":"1443:30:75","nodeType":"VariableDeclaration","scope":29602,"src":"1421:86:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29508,"name":"uint8","nodeType":"ElementaryTypeName","src":"1421:5:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":29511,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":29509,"name":"ADD_LIQUIDITY_CUSTOM_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29507,"src":"1476:27:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":29510,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1506:1:75","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1476:31:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"e2ce6c6c","id":29517,"mutability":"constant","name":"DONATION_OFFSET","nameLocation":"1535:15:75","nodeType":"VariableDeclaration","scope":29602,"src":"1513:74:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29513,"name":"uint8","nodeType":"ElementaryTypeName","src":"1513:5:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":29516,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":29514,"name":"REMOVE_LIQUIDITY_CUSTOM_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29512,"src":"1553:30:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":29515,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1586:1:75","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1553:34:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"547acb16","id":29522,"mutability":"constant","name":"BEFORE_INITIALIZE_OFFSET","nameLocation":"1653:24:75","nodeType":"VariableDeclaration","scope":29602,"src":"1631:68:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29518,"name":"uint8","nodeType":"ElementaryTypeName","src":"1631:5:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":29521,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":29519,"name":"DONATION_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29517,"src":"1680:15:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":29520,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1698:1:75","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1680:19:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"fab86870","id":29527,"mutability":"constant","name":"ENABLE_HOOK_ADJUSTED_AMOUNTS_OFFSET","nameLocation":"1727:35:75","nodeType":"VariableDeclaration","scope":29602,"src":"1705:88:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29523,"name":"uint8","nodeType":"ElementaryTypeName","src":"1705:5:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":29526,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":29524,"name":"BEFORE_INITIALIZE_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29522,"src":"1765:24:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":29525,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1792:1:75","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1765:28:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"3f60345a","id":29532,"mutability":"constant","name":"AFTER_INITIALIZE_OFFSET","nameLocation":"1821:23:75","nodeType":"VariableDeclaration","scope":29602,"src":"1799:87:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29528,"name":"uint8","nodeType":"ElementaryTypeName","src":"1799:5:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":29531,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":29529,"name":"ENABLE_HOOK_ADJUSTED_AMOUNTS_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29527,"src":"1847:35:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":29530,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1885:1:75","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1847:39:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"84efbfd5","id":29537,"mutability":"constant","name":"DYNAMIC_SWAP_FEE_OFFSET","nameLocation":"1914:23:75","nodeType":"VariableDeclaration","scope":29602,"src":"1892:75:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29533,"name":"uint8","nodeType":"ElementaryTypeName","src":"1892:5:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":29536,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":29534,"name":"AFTER_INITIALIZE_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29532,"src":"1940:23:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":29535,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1966:1:75","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1940:27:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"a22425b6","id":29542,"mutability":"constant","name":"BEFORE_SWAP_OFFSET","nameLocation":"1995:18:75","nodeType":"VariableDeclaration","scope":29602,"src":"1973:70:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29538,"name":"uint8","nodeType":"ElementaryTypeName","src":"1973:5:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":29541,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":29539,"name":"DYNAMIC_SWAP_FEE_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29537,"src":"2016:23:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":29540,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2042:1:75","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2016:27:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"bdefaf71","id":29547,"mutability":"constant","name":"AFTER_SWAP_OFFSET","nameLocation":"2071:17:75","nodeType":"VariableDeclaration","scope":29602,"src":"2049:64:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29543,"name":"uint8","nodeType":"ElementaryTypeName","src":"2049:5:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":29546,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":29544,"name":"BEFORE_SWAP_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29542,"src":"2091:18:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":29545,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2112:1:75","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2091:22:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"dde7b13f","id":29552,"mutability":"constant","name":"BEFORE_ADD_LIQUIDITY_OFFSET","nameLocation":"2141:27:75","nodeType":"VariableDeclaration","scope":29602,"src":"2119:73:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29548,"name":"uint8","nodeType":"ElementaryTypeName","src":"2119:5:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":29551,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":29549,"name":"AFTER_SWAP_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29547,"src":"2171:17:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":29550,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2191:1:75","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2171:21:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"aa6cda91","id":29557,"mutability":"constant","name":"AFTER_ADD_LIQUIDITY_OFFSET","nameLocation":"2220:26:75","nodeType":"VariableDeclaration","scope":29602,"src":"2198:82:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29553,"name":"uint8","nodeType":"ElementaryTypeName","src":"2198:5:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":29556,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":29554,"name":"BEFORE_ADD_LIQUIDITY_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29552,"src":"2249:27:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":29555,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2279:1:75","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2249:31:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"bc848769","id":29562,"mutability":"constant","name":"BEFORE_REMOVE_LIQUIDITY_OFFSET","nameLocation":"2308:30:75","nodeType":"VariableDeclaration","scope":29602,"src":"2286:85:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29558,"name":"uint8","nodeType":"ElementaryTypeName","src":"2286:5:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":29561,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":29559,"name":"AFTER_ADD_LIQUIDITY_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29557,"src":"2341:26:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":29560,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2370:1:75","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2341:30:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"80b1c55b","id":29567,"mutability":"constant","name":"AFTER_REMOVE_LIQUIDITY_OFFSET","nameLocation":"2399:29:75","nodeType":"VariableDeclaration","scope":29602,"src":"2377:88:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29563,"name":"uint8","nodeType":"ElementaryTypeName","src":"2377:5:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":29566,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":29564,"name":"BEFORE_REMOVE_LIQUIDITY_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29562,"src":"2431:30:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":29565,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2464:1:75","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2431:34:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"fd5da010","id":29572,"mutability":"constant","name":"STATIC_SWAP_FEE_OFFSET","nameLocation":"2530:22:75","nodeType":"VariableDeclaration","scope":29602,"src":"2508:80:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29568,"name":"uint8","nodeType":"ElementaryTypeName","src":"2508:5:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":29571,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":29569,"name":"AFTER_REMOVE_LIQUIDITY_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29567,"src":"2555:29:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":29570,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2587:1:75","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2555:33:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"public"},{"constant":true,"functionSelector":"1294794b","id":29577,"mutability":"constant","name":"AGGREGATE_SWAP_FEE_OFFSET","nameLocation":"2618:25:75","nodeType":"VariableDeclaration","scope":29602,"src":"2594:90:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29573,"name":"uint256","nodeType":"ElementaryTypeName","src":"2594:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29576,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":29574,"name":"STATIC_SWAP_FEE_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29572,"src":"2646:22:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":29575,"name":"FEE_BITLENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4865,"src":"2671:13:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2646:38:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":true,"functionSelector":"d9cebbd9","id":29582,"mutability":"constant","name":"AGGREGATE_YIELD_FEE_OFFSET","nameLocation":"2714:26:75","nodeType":"VariableDeclaration","scope":29602,"src":"2690:94:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29578,"name":"uint256","nodeType":"ElementaryTypeName","src":"2690:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29581,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":29579,"name":"AGGREGATE_SWAP_FEE_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29577,"src":"2743:25:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":29580,"name":"FEE_BITLENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4865,"src":"2771:13:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2743:41:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":true,"functionSelector":"3dc52c43","id":29587,"mutability":"constant","name":"DECIMAL_SCALING_FACTORS_OFFSET","nameLocation":"2814:30:75","nodeType":"VariableDeclaration","scope":29602,"src":"2790:99:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29583,"name":"uint256","nodeType":"ElementaryTypeName","src":"2790:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29586,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":29584,"name":"AGGREGATE_YIELD_FEE_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29582,"src":"2847:26:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":29585,"name":"FEE_BITLENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4865,"src":"2876:13:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2847:42:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":true,"functionSelector":"68aa2524","id":29592,"mutability":"constant","name":"PAUSE_WINDOW_END_TIME_OFFSET","nameLocation":"2919:28:75","nodeType":"VariableDeclaration","scope":29602,"src":"2895:125:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":29588,"name":"uint256","nodeType":"ElementaryTypeName","src":"2895:7:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":29591,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":29589,"name":"DECIMAL_SCALING_FACTORS_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29587,"src":"2958:30:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":29590,"name":"TOKEN_DECIMAL_DIFFS_BITLENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29595,"src":"2991:29:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"2958:62:75","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":true,"functionSelector":"7ea0cde9","id":29595,"mutability":"constant","name":"TOKEN_DECIMAL_DIFFS_BITLENGTH","nameLocation":"3180:29:75","nodeType":"VariableDeclaration","scope":29602,"src":"3158:56:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29593,"name":"uint8","nodeType":"ElementaryTypeName","src":"3158:5:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"3430","id":29594,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3212:2:75","typeDescriptions":{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},"value":"40"},"visibility":"public"},{"constant":true,"functionSelector":"28b161ce","id":29598,"mutability":"constant","name":"DECIMAL_DIFF_BITLENGTH","nameLocation":"3242:22:75","nodeType":"VariableDeclaration","scope":29602,"src":"3220:48:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29596,"name":"uint8","nodeType":"ElementaryTypeName","src":"3220:5:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"35","id":29597,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3267:1:75","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"visibility":"public"},{"constant":true,"functionSelector":"df9d385b","id":29601,"mutability":"constant","name":"TIMESTAMP_BITLENGTH","nameLocation":"3297:19:75","nodeType":"VariableDeclaration","scope":29602,"src":"3275:46:75","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":29599,"name":"uint8","nodeType":"ElementaryTypeName","src":"3275:5:75","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"3332","id":29600,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3319:2:75","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"visibility":"public"}],"scope":29603,"src":"831:2493:75","usedErrors":[],"usedEvents":[]}],"src":"46:3279:75"},"id":75},"@balancer-labs/v3-vault/contracts/lib/PoolConfigLib.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/PoolConfigLib.sol","exportedSymbols":{"AddLiquidityKind":[4807],"AddLiquidityParams":[4823],"AfterSwapParams":[4801],"BufferWrapOrUnwrapParams":[4862],"FEE_BITLENGTH":[4865],"FEE_SCALING_FACTOR":[4868],"HookFlags":[4627],"HooksConfig":[4651],"IERC20":[40109],"IERC4626":[39833],"IRateProvider":[263],"IVaultErrors":[3768],"LiquidityManagement":[4580],"MAX_FEE_PERCENTAGE":[4871],"PoolConfig":[4605],"PoolConfigBits":[4582],"PoolConfigConst":[29602],"PoolConfigLib":[30441],"PoolData":[4729],"PoolRoleAccounts":[4677],"PoolSwapParams":[4772],"RemoveLiquidityKind":[4828],"RemoveLiquidityParams":[4844],"Rounding":[4732],"SwapKind":[4735],"SwapState":[4661],"TokenConfig":[4694],"TokenInfo":[4704],"TokenType":[4681],"VaultState":[4669],"VaultSwapParams":[4754],"WordCodec":[7909],"WrappingDirection":[4847]},"id":30442,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":29604,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:76"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":29606,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30442,"sourceUnit":3769,"src":"72:93:76","symbolAliases":[{"foreign":{"id":29605,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"81:12:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":29607,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30442,"sourceUnit":4872,"src":"166:69:76","symbolAliases":[],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol","id":29609,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30442,"sourceUnit":7910,"src":"237:93:76","symbolAliases":[{"foreign":{"id":29608,"name":"WordCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7909,"src":"246:9:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/PoolConfigConst.sol","file":"./PoolConfigConst.sol","id":29611,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":30442,"sourceUnit":29603,"src":"332:56:76","symbolAliases":[{"foreign":{"id":29610,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"341:15:76","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"PoolConfigLib","contractDependencies":[],"contractKind":"library","documentation":{"id":29612,"nodeType":"StructuredDocumentation","src":"390:888:76","text":" @notice Helper functions to read and write the packed hook configuration flags stored in `_poolConfigBits`.\n @dev Note that the entire configuration of each pool is stored in the `_poolConfigBits` mapping (one slot\n per pool). This includes the data in the `PoolConfig` struct, plus the data in the `HookFlags` struct.\n The layout (i.e., offsets for each data field) is specified in `PoolConfigConst`.\n There are two libraries for interpreting these data. `HooksConfigLib` parses fields related to hooks, while\n this one contains helpers related to the non-hook-related flags, along with aggregate fee percentages and\n other data associated with pools.\n The `PoolData` struct contains the raw bitmap with the entire pool state (`PoolConfigBits`), plus the token\n configuration, scaling factors, and dynamic information such as current balances and rates."},"fullyImplemented":true,"id":30441,"linearizedBaseContracts":[30441],"name":"PoolConfigLib","nameLocation":"1287:13:76","nodeType":"ContractDefinition","nodes":[{"global":false,"id":29615,"libraryName":{"id":29613,"name":"WordCodec","nameLocations":["1313:9:76"],"nodeType":"IdentifierPath","referencedDeclaration":7909,"src":"1313:9:76"},"nodeType":"UsingForDirective","src":"1307:28:76","typeName":{"id":29614,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1327:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"global":false,"id":29619,"libraryName":{"id":29616,"name":"PoolConfigLib","nameLocations":["1346:13:76"],"nodeType":"IdentifierPath","referencedDeclaration":30441,"src":"1346:13:76"},"nodeType":"UsingForDirective","src":"1340:39:76","typeName":{"id":29618,"nodeType":"UserDefinedTypeName","pathNode":{"id":29617,"name":"PoolConfigBits","nameLocations":["1364:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"1364:14:76"},"referencedDeclaration":4582,"src":"1364:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}},{"body":{"id":29636,"nodeType":"Block","src":"1513:104:76","statements":[{"expression":{"arguments":[{"expression":{"id":29632,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"1571:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":29633,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1587:22:76","memberName":"POOL_REGISTERED_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29482,"src":"1571:38:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":29629,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29622,"src":"1552:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":29627,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"1530:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":29628,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1545:6:76","memberName":"unwrap","nodeType":"MemberAccess","src":"1530:21:76","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":29630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1530:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":29631,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1560:10:76","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":7771,"src":"1530:40:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":29634,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1530:80:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":29626,"id":29635,"nodeType":"Return","src":"1523:87:76"}]},"id":29637,"implemented":true,"kind":"function","modifiers":[],"name":"isPoolRegistered","nameLocation":"1444:16:76","nodeType":"FunctionDefinition","parameters":{"id":29623,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29622,"mutability":"mutable","name":"config","nameLocation":"1476:6:76","nodeType":"VariableDeclaration","scope":29637,"src":"1461:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":29621,"nodeType":"UserDefinedTypeName","pathNode":{"id":29620,"name":"PoolConfigBits","nameLocations":["1461:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"1461:14:76"},"referencedDeclaration":4582,"src":"1461:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"1460:23:76"},"returnParameters":{"id":29626,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29625,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29637,"src":"1507:4:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29624,"name":"bool","nodeType":"ElementaryTypeName","src":"1507:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1506:6:76"},"scope":30441,"src":"1435:182:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":29661,"nodeType":"Block","src":"1724:174:76","statements":[{"expression":{"arguments":[{"arguments":[{"id":29655,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29642,"src":"1831:5:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":29656,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"1838:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":29657,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1854:22:76","memberName":"POOL_REGISTERED_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29482,"src":"1838:38:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":29652,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29640,"src":"1812:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":29650,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"1790:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":29651,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1805:6:76","memberName":"unwrap","nodeType":"MemberAccess","src":"1790:21:76","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":29653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1790:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":29654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1820:10:76","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":7785,"src":"1790:40:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":29658,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1790:87:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":29648,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"1753:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":29649,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1768:4:76","memberName":"wrap","nodeType":"MemberAccess","src":"1753:19:76","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":29659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1753:138:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"functionReturnParameters":29647,"id":29660,"nodeType":"Return","src":"1734:157:76"}]},"id":29662,"implemented":true,"kind":"function","modifiers":[],"name":"setPoolRegistered","nameLocation":"1632:17:76","nodeType":"FunctionDefinition","parameters":{"id":29643,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29640,"mutability":"mutable","name":"config","nameLocation":"1665:6:76","nodeType":"VariableDeclaration","scope":29662,"src":"1650:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":29639,"nodeType":"UserDefinedTypeName","pathNode":{"id":29638,"name":"PoolConfigBits","nameLocations":["1650:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"1650:14:76"},"referencedDeclaration":4582,"src":"1650:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":29642,"mutability":"mutable","name":"value","nameLocation":"1678:5:76","nodeType":"VariableDeclaration","scope":29662,"src":"1673:10:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29641,"name":"bool","nodeType":"ElementaryTypeName","src":"1673:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1649:35:76"},"returnParameters":{"id":29647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29646,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29662,"src":"1708:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":29645,"nodeType":"UserDefinedTypeName","pathNode":{"id":29644,"name":"PoolConfigBits","nameLocations":["1708:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"1708:14:76"},"referencedDeclaration":4582,"src":"1708:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"1707:16:76"},"scope":30441,"src":"1623:275:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":29679,"nodeType":"Block","src":"1983:105:76","statements":[{"expression":{"arguments":[{"expression":{"id":29675,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"2041:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":29676,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2057:23:76","memberName":"POOL_INITIALIZED_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"2041:39:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":29672,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29665,"src":"2022:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":29670,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"2000:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":29671,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2015:6:76","memberName":"unwrap","nodeType":"MemberAccess","src":"2000:21:76","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":29673,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2000:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":29674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2030:10:76","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":7771,"src":"2000:40:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":29677,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2000:81:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":29669,"id":29678,"nodeType":"Return","src":"1993:88:76"}]},"id":29680,"implemented":true,"kind":"function","modifiers":[],"name":"isPoolInitialized","nameLocation":"1913:17:76","nodeType":"FunctionDefinition","parameters":{"id":29666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29665,"mutability":"mutable","name":"config","nameLocation":"1946:6:76","nodeType":"VariableDeclaration","scope":29680,"src":"1931:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":29664,"nodeType":"UserDefinedTypeName","pathNode":{"id":29663,"name":"PoolConfigBits","nameLocations":["1931:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"1931:14:76"},"referencedDeclaration":4582,"src":"1931:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"1930:23:76"},"returnParameters":{"id":29669,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29668,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29680,"src":"1977:4:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29667,"name":"bool","nodeType":"ElementaryTypeName","src":"1977:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1976:6:76"},"scope":30441,"src":"1904:184:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":29704,"nodeType":"Block","src":"2196:175:76","statements":[{"expression":{"arguments":[{"arguments":[{"id":29698,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29685,"src":"2303:5:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":29699,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"2310:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":29700,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2326:23:76","memberName":"POOL_INITIALIZED_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29487,"src":"2310:39:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":29695,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29683,"src":"2284:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":29693,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"2262:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":29694,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2277:6:76","memberName":"unwrap","nodeType":"MemberAccess","src":"2262:21:76","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":29696,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2262:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":29697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2292:10:76","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":7785,"src":"2262:40:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":29701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2262:88:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":29691,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"2225:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":29692,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2240:4:76","memberName":"wrap","nodeType":"MemberAccess","src":"2225:19:76","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":29702,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2225:139:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"functionReturnParameters":29690,"id":29703,"nodeType":"Return","src":"2206:158:76"}]},"id":29705,"implemented":true,"kind":"function","modifiers":[],"name":"setPoolInitialized","nameLocation":"2103:18:76","nodeType":"FunctionDefinition","parameters":{"id":29686,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29683,"mutability":"mutable","name":"config","nameLocation":"2137:6:76","nodeType":"VariableDeclaration","scope":29705,"src":"2122:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":29682,"nodeType":"UserDefinedTypeName","pathNode":{"id":29681,"name":"PoolConfigBits","nameLocations":["2122:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"2122:14:76"},"referencedDeclaration":4582,"src":"2122:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":29685,"mutability":"mutable","name":"value","nameLocation":"2150:5:76","nodeType":"VariableDeclaration","scope":29705,"src":"2145:10:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29684,"name":"bool","nodeType":"ElementaryTypeName","src":"2145:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2121:35:76"},"returnParameters":{"id":29690,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29689,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29705,"src":"2180:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":29688,"nodeType":"UserDefinedTypeName","pathNode":{"id":29687,"name":"PoolConfigBits","nameLocations":["2180:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"2180:14:76"},"referencedDeclaration":4582,"src":"2180:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"2179:16:76"},"scope":30441,"src":"2094:277:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":29722,"nodeType":"Block","src":"2451:100:76","statements":[{"expression":{"arguments":[{"expression":{"id":29718,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"2509:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":29719,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2525:18:76","memberName":"POOL_PAUSED_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29492,"src":"2509:34:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":29715,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29708,"src":"2490:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":29713,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"2468:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":29714,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2483:6:76","memberName":"unwrap","nodeType":"MemberAccess","src":"2468:21:76","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":29716,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2468:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":29717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2498:10:76","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":7771,"src":"2468:40:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":29720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2468:76:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":29712,"id":29721,"nodeType":"Return","src":"2461:83:76"}]},"id":29723,"implemented":true,"kind":"function","modifiers":[],"name":"isPoolPaused","nameLocation":"2386:12:76","nodeType":"FunctionDefinition","parameters":{"id":29709,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29708,"mutability":"mutable","name":"config","nameLocation":"2414:6:76","nodeType":"VariableDeclaration","scope":29723,"src":"2399:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":29707,"nodeType":"UserDefinedTypeName","pathNode":{"id":29706,"name":"PoolConfigBits","nameLocations":["2399:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"2399:14:76"},"referencedDeclaration":4582,"src":"2399:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"2398:23:76"},"returnParameters":{"id":29712,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29711,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29723,"src":"2445:4:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29710,"name":"bool","nodeType":"ElementaryTypeName","src":"2445:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2444:6:76"},"scope":30441,"src":"2377:174:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":29747,"nodeType":"Block","src":"2654:128:76","statements":[{"expression":{"arguments":[{"arguments":[{"id":29741,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29728,"src":"2732:5:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":29742,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"2739:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":29743,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2755:18:76","memberName":"POOL_PAUSED_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29492,"src":"2739:34:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":29738,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29726,"src":"2713:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":29736,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"2691:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":29737,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2706:6:76","memberName":"unwrap","nodeType":"MemberAccess","src":"2691:21:76","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":29739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2691:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":29740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2721:10:76","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":7785,"src":"2691:40:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":29744,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2691:83:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":29734,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"2671:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":29735,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2686:4:76","memberName":"wrap","nodeType":"MemberAccess","src":"2671:19:76","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":29745,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2671:104:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"functionReturnParameters":29733,"id":29746,"nodeType":"Return","src":"2664:111:76"}]},"id":29748,"implemented":true,"kind":"function","modifiers":[],"name":"setPoolPaused","nameLocation":"2566:13:76","nodeType":"FunctionDefinition","parameters":{"id":29729,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29726,"mutability":"mutable","name":"config","nameLocation":"2595:6:76","nodeType":"VariableDeclaration","scope":29748,"src":"2580:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":29725,"nodeType":"UserDefinedTypeName","pathNode":{"id":29724,"name":"PoolConfigBits","nameLocations":["2580:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"2580:14:76"},"referencedDeclaration":4582,"src":"2580:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":29728,"mutability":"mutable","name":"value","nameLocation":"2608:5:76","nodeType":"VariableDeclaration","scope":29748,"src":"2603:10:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29727,"name":"bool","nodeType":"ElementaryTypeName","src":"2603:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2579:35:76"},"returnParameters":{"id":29733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29732,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29748,"src":"2638:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":29731,"nodeType":"UserDefinedTypeName","pathNode":{"id":29730,"name":"PoolConfigBits","nameLocations":["2638:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"2638:14:76"},"referencedDeclaration":4582,"src":"2638:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"2637:16:76"},"scope":30441,"src":"2557:225:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":29765,"nodeType":"Block","src":"2870:107:76","statements":[{"expression":{"arguments":[{"expression":{"id":29761,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"2928:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":29762,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2944:25:76","memberName":"POOL_RECOVERY_MODE_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"2928:41:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":29758,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29751,"src":"2909:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":29756,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"2887:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":29757,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2902:6:76","memberName":"unwrap","nodeType":"MemberAccess","src":"2887:21:76","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":29759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2887:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":29760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2917:10:76","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":7771,"src":"2887:40:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":29763,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2887:83:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":29755,"id":29764,"nodeType":"Return","src":"2880:90:76"}]},"id":29766,"implemented":true,"kind":"function","modifiers":[],"name":"isPoolInRecoveryMode","nameLocation":"2797:20:76","nodeType":"FunctionDefinition","parameters":{"id":29752,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29751,"mutability":"mutable","name":"config","nameLocation":"2833:6:76","nodeType":"VariableDeclaration","scope":29766,"src":"2818:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":29750,"nodeType":"UserDefinedTypeName","pathNode":{"id":29749,"name":"PoolConfigBits","nameLocations":["2818:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"2818:14:76"},"referencedDeclaration":4582,"src":"2818:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"2817:23:76"},"returnParameters":{"id":29755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29754,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29766,"src":"2864:4:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29753,"name":"bool","nodeType":"ElementaryTypeName","src":"2864:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2863:6:76"},"scope":30441,"src":"2788:189:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":29790,"nodeType":"Block","src":"3088:177:76","statements":[{"expression":{"arguments":[{"arguments":[{"id":29784,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29771,"src":"3195:5:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":29785,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"3202:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":29786,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3218:25:76","memberName":"POOL_RECOVERY_MODE_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29497,"src":"3202:41:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":29781,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29769,"src":"3176:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":29779,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"3154:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":29780,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3169:6:76","memberName":"unwrap","nodeType":"MemberAccess","src":"3154:21:76","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":29782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3154:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":29783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3184:10:76","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":7785,"src":"3154:40:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":29787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3154:90:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":29777,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"3117:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":29778,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3132:4:76","memberName":"wrap","nodeType":"MemberAccess","src":"3117:19:76","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":29788,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3117:141:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"functionReturnParameters":29776,"id":29789,"nodeType":"Return","src":"3098:160:76"}]},"id":29791,"implemented":true,"kind":"function","modifiers":[],"name":"setPoolInRecoveryMode","nameLocation":"2992:21:76","nodeType":"FunctionDefinition","parameters":{"id":29772,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29769,"mutability":"mutable","name":"config","nameLocation":"3029:6:76","nodeType":"VariableDeclaration","scope":29791,"src":"3014:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":29768,"nodeType":"UserDefinedTypeName","pathNode":{"id":29767,"name":"PoolConfigBits","nameLocations":["3014:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"3014:14:76"},"referencedDeclaration":4582,"src":"3014:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":29771,"mutability":"mutable","name":"value","nameLocation":"3042:5:76","nodeType":"VariableDeclaration","scope":29791,"src":"3037:10:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29770,"name":"bool","nodeType":"ElementaryTypeName","src":"3037:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3013:35:76"},"returnParameters":{"id":29776,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29775,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29791,"src":"3072:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":29774,"nodeType":"UserDefinedTypeName","pathNode":{"id":29773,"name":"PoolConfigBits","nameLocations":["3072:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"3072:14:76"},"referencedDeclaration":4582,"src":"3072:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"3071:16:76"},"scope":30441,"src":"2983:282:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":29809,"nodeType":"Block","src":"3405:255:76","statements":[{"expression":{"id":29807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3567:86:76","subExpression":{"arguments":[{"expression":{"id":29804,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"3609:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":29805,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3625:27:76","memberName":"UNBALANCED_LIQUIDITY_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29502,"src":"3609:43:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":29801,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29794,"src":"3590:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":29799,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"3568:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":29800,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3583:6:76","memberName":"unwrap","nodeType":"MemberAccess","src":"3568:21:76","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":29802,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3568:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":29803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3598:10:76","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":7771,"src":"3568:40:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":29806,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3568:85:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":29798,"id":29808,"nodeType":"Return","src":"3560:93:76"}]},"id":29810,"implemented":true,"kind":"function","modifiers":[],"name":"supportsUnbalancedLiquidity","nameLocation":"3325:27:76","nodeType":"FunctionDefinition","parameters":{"id":29795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29794,"mutability":"mutable","name":"config","nameLocation":"3368:6:76","nodeType":"VariableDeclaration","scope":29810,"src":"3353:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":29793,"nodeType":"UserDefinedTypeName","pathNode":{"id":29792,"name":"PoolConfigBits","nameLocations":["3353:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"3353:14:76"},"referencedDeclaration":4582,"src":"3353:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"3352:23:76"},"returnParameters":{"id":29798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29797,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29810,"src":"3399:4:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29796,"name":"bool","nodeType":"ElementaryTypeName","src":"3399:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3398:6:76"},"scope":30441,"src":"3316:344:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":29828,"nodeType":"Block","src":"3746:147:76","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":29820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29816,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29813,"src":"3760:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":29817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3767:27:76","memberName":"supportsUnbalancedLiquidity","nodeType":"MemberAccess","referencedDeclaration":29810,"src":"3760:34:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":29818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3760:36:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":29819,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3800:5:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"3760:45:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29827,"nodeType":"IfStatement","src":"3756:131:76","trueBody":{"id":29826,"nodeType":"Block","src":"3807:80:76","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29821,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"3828:12:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3768_$","typeString":"type(contract IVaultErrors)"}},"id":29823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3841:33:76","memberName":"DoesNotSupportUnbalancedLiquidity","nodeType":"MemberAccess","referencedDeclaration":3749,"src":"3828:46:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":29824,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3828:48:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":29825,"nodeType":"RevertStatement","src":"3821:55:76"}]}}]},"id":29829,"implemented":true,"kind":"function","modifiers":[],"name":"requireUnbalancedLiquidityEnabled","nameLocation":"3675:33:76","nodeType":"FunctionDefinition","parameters":{"id":29814,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29813,"mutability":"mutable","name":"config","nameLocation":"3724:6:76","nodeType":"VariableDeclaration","scope":29829,"src":"3709:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":29812,"nodeType":"UserDefinedTypeName","pathNode":{"id":29811,"name":"PoolConfigBits","nameLocations":["3709:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"3709:14:76"},"referencedDeclaration":4582,"src":"3709:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"3708:23:76"},"returnParameters":{"id":29815,"nodeType":"ParameterList","parameters":[],"src":"3746:0:76"},"scope":30441,"src":"3666:227:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":29853,"nodeType":"Block","src":"4055:258:76","statements":[{"expression":{"arguments":[{"arguments":[{"id":29847,"name":"disableUnbalancedLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29834,"src":"4183:26:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":29848,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"4231:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":29849,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4247:27:76","memberName":"UNBALANCED_LIQUIDITY_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29502,"src":"4231:43:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":29844,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29832,"src":"4143:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":29842,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"4121:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":29843,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4136:6:76","memberName":"unwrap","nodeType":"MemberAccess","src":"4121:21:76","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":29845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4121:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":29846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4151:10:76","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":7785,"src":"4121:40:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":29850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4121:171:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":29840,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"4084:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":29841,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4099:4:76","memberName":"wrap","nodeType":"MemberAccess","src":"4084:19:76","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":29851,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4084:222:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"functionReturnParameters":29839,"id":29852,"nodeType":"Return","src":"4065:241:76"}]},"id":29854,"implemented":true,"kind":"function","modifiers":[],"name":"setDisableUnbalancedLiquidity","nameLocation":"3908:29:76","nodeType":"FunctionDefinition","parameters":{"id":29835,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29832,"mutability":"mutable","name":"config","nameLocation":"3962:6:76","nodeType":"VariableDeclaration","scope":29854,"src":"3947:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":29831,"nodeType":"UserDefinedTypeName","pathNode":{"id":29830,"name":"PoolConfigBits","nameLocations":["3947:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"3947:14:76"},"referencedDeclaration":4582,"src":"3947:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":29834,"mutability":"mutable","name":"disableUnbalancedLiquidity","nameLocation":"3983:26:76","nodeType":"VariableDeclaration","scope":29854,"src":"3978:31:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29833,"name":"bool","nodeType":"ElementaryTypeName","src":"3978:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3937:78:76"},"returnParameters":{"id":29839,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29838,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29854,"src":"4039:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":29837,"nodeType":"UserDefinedTypeName","pathNode":{"id":29836,"name":"PoolConfigBits","nameLocations":["4039:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"4039:14:76"},"referencedDeclaration":4582,"src":"4039:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"4038:16:76"},"scope":30441,"src":"3899:414:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":29871,"nodeType":"Block","src":"4407:109:76","statements":[{"expression":{"arguments":[{"expression":{"id":29867,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"4465:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":29868,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4481:27:76","memberName":"ADD_LIQUIDITY_CUSTOM_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29507,"src":"4465:43:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":29864,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29857,"src":"4446:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":29862,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"4424:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":29863,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4439:6:76","memberName":"unwrap","nodeType":"MemberAccess","src":"4424:21:76","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":29865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4424:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":29866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4454:10:76","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":7771,"src":"4424:40:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":29869,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4424:85:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":29861,"id":29870,"nodeType":"Return","src":"4417:92:76"}]},"id":29872,"implemented":true,"kind":"function","modifiers":[],"name":"supportsAddLiquidityCustom","nameLocation":"4328:26:76","nodeType":"FunctionDefinition","parameters":{"id":29858,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29857,"mutability":"mutable","name":"config","nameLocation":"4370:6:76","nodeType":"VariableDeclaration","scope":29872,"src":"4355:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":29856,"nodeType":"UserDefinedTypeName","pathNode":{"id":29855,"name":"PoolConfigBits","nameLocations":["4355:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"4355:14:76"},"referencedDeclaration":4582,"src":"4355:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"4354:23:76"},"returnParameters":{"id":29861,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29860,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29872,"src":"4401:4:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29859,"name":"bool","nodeType":"ElementaryTypeName","src":"4401:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4400:6:76"},"scope":30441,"src":"4319:197:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":29890,"nodeType":"Block","src":"4601:145:76","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":29882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29878,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29875,"src":"4615:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":29879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4622:26:76","memberName":"supportsAddLiquidityCustom","nodeType":"MemberAccess","referencedDeclaration":29872,"src":"4615:33:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":29880,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4615:35:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":29881,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4654:5:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"4615:44:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29889,"nodeType":"IfStatement","src":"4611:129:76","trueBody":{"id":29888,"nodeType":"Block","src":"4661:79:76","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29883,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"4682:12:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3768_$","typeString":"type(contract IVaultErrors)"}},"id":29885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4695:32:76","memberName":"DoesNotSupportAddLiquidityCustom","nodeType":"MemberAccess","referencedDeclaration":3568,"src":"4682:45:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":29886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4682:47:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":29887,"nodeType":"RevertStatement","src":"4675:54:76"}]}}]},"id":29891,"implemented":true,"kind":"function","modifiers":[],"name":"requireAddLiquidityCustomEnabled","nameLocation":"4531:32:76","nodeType":"FunctionDefinition","parameters":{"id":29876,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29875,"mutability":"mutable","name":"config","nameLocation":"4579:6:76","nodeType":"VariableDeclaration","scope":29891,"src":"4564:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":29874,"nodeType":"UserDefinedTypeName","pathNode":{"id":29873,"name":"PoolConfigBits","nameLocations":["4564:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"4564:14:76"},"referencedDeclaration":4582,"src":"4564:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"4563:23:76"},"returnParameters":{"id":29877,"nodeType":"ParameterList","parameters":[],"src":"4601:0:76"},"scope":30441,"src":"4522:224:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":29915,"nodeType":"Block","src":"4898:256:76","statements":[{"expression":{"arguments":[{"arguments":[{"id":29909,"name":"enableAddLiquidityCustom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29896,"src":"5026:24:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":29910,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"5072:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":29911,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5088:27:76","memberName":"ADD_LIQUIDITY_CUSTOM_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29507,"src":"5072:43:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":29906,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29894,"src":"4986:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":29904,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"4964:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":29905,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4979:6:76","memberName":"unwrap","nodeType":"MemberAccess","src":"4964:21:76","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":29907,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4964:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":29908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4994:10:76","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":7785,"src":"4964:40:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":29912,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4964:169:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":29902,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"4927:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":29903,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4942:4:76","memberName":"wrap","nodeType":"MemberAccess","src":"4927:19:76","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":29913,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4927:220:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"functionReturnParameters":29901,"id":29914,"nodeType":"Return","src":"4908:239:76"}]},"id":29916,"implemented":true,"kind":"function","modifiers":[],"name":"setAddLiquidityCustom","nameLocation":"4761:21:76","nodeType":"FunctionDefinition","parameters":{"id":29897,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29894,"mutability":"mutable","name":"config","nameLocation":"4807:6:76","nodeType":"VariableDeclaration","scope":29916,"src":"4792:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":29893,"nodeType":"UserDefinedTypeName","pathNode":{"id":29892,"name":"PoolConfigBits","nameLocations":["4792:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"4792:14:76"},"referencedDeclaration":4582,"src":"4792:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":29896,"mutability":"mutable","name":"enableAddLiquidityCustom","nameLocation":"4828:24:76","nodeType":"VariableDeclaration","scope":29916,"src":"4823:29:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29895,"name":"bool","nodeType":"ElementaryTypeName","src":"4823:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4782:76:76"},"returnParameters":{"id":29901,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29900,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29916,"src":"4882:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":29899,"nodeType":"UserDefinedTypeName","pathNode":{"id":29898,"name":"PoolConfigBits","nameLocations":["4882:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"4882:14:76"},"referencedDeclaration":4582,"src":"4882:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"4881:16:76"},"scope":30441,"src":"4752:402:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":29933,"nodeType":"Block","src":"5251:112:76","statements":[{"expression":{"arguments":[{"expression":{"id":29929,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"5309:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":29930,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5325:30:76","memberName":"REMOVE_LIQUIDITY_CUSTOM_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29512,"src":"5309:46:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":29926,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29919,"src":"5290:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":29924,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"5268:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":29925,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5283:6:76","memberName":"unwrap","nodeType":"MemberAccess","src":"5268:21:76","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":29927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5268:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":29928,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5298:10:76","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":7771,"src":"5268:40:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":29931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5268:88:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":29923,"id":29932,"nodeType":"Return","src":"5261:95:76"}]},"id":29934,"implemented":true,"kind":"function","modifiers":[],"name":"supportsRemoveLiquidityCustom","nameLocation":"5169:29:76","nodeType":"FunctionDefinition","parameters":{"id":29920,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29919,"mutability":"mutable","name":"config","nameLocation":"5214:6:76","nodeType":"VariableDeclaration","scope":29934,"src":"5199:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":29918,"nodeType":"UserDefinedTypeName","pathNode":{"id":29917,"name":"PoolConfigBits","nameLocations":["5199:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"5199:14:76"},"referencedDeclaration":4582,"src":"5199:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"5198:23:76"},"returnParameters":{"id":29923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29922,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29934,"src":"5245:4:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29921,"name":"bool","nodeType":"ElementaryTypeName","src":"5245:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5244:6:76"},"scope":30441,"src":"5160:203:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":29952,"nodeType":"Block","src":"5451:151:76","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":29944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29940,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29937,"src":"5465:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":29941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5472:29:76","memberName":"supportsRemoveLiquidityCustom","nodeType":"MemberAccess","referencedDeclaration":29934,"src":"5465:36:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":29942,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5465:38:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":29943,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5507:5:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"5465:47:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":29951,"nodeType":"IfStatement","src":"5461:135:76","trueBody":{"id":29950,"nodeType":"Block","src":"5514:82:76","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":29945,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"5535:12:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3768_$","typeString":"type(contract IVaultErrors)"}},"id":29947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5548:35:76","memberName":"DoesNotSupportRemoveLiquidityCustom","nodeType":"MemberAccess","referencedDeclaration":3604,"src":"5535:48:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":29948,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5535:50:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":29949,"nodeType":"RevertStatement","src":"5528:57:76"}]}}]},"id":29953,"implemented":true,"kind":"function","modifiers":[],"name":"requireRemoveLiquidityCustomEnabled","nameLocation":"5378:35:76","nodeType":"FunctionDefinition","parameters":{"id":29938,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29937,"mutability":"mutable","name":"config","nameLocation":"5429:6:76","nodeType":"VariableDeclaration","scope":29953,"src":"5414:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":29936,"nodeType":"UserDefinedTypeName","pathNode":{"id":29935,"name":"PoolConfigBits","nameLocations":["5414:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"5414:14:76"},"referencedDeclaration":4582,"src":"5414:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"5413:23:76"},"returnParameters":{"id":29939,"nodeType":"ParameterList","parameters":[],"src":"5451:0:76"},"scope":30441,"src":"5369:233:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":29977,"nodeType":"Block","src":"5760:262:76","statements":[{"expression":{"arguments":[{"arguments":[{"id":29971,"name":"enableRemoveLiquidityCustom","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29958,"src":"5888:27:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":29972,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"5937:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":29973,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5953:30:76","memberName":"REMOVE_LIQUIDITY_CUSTOM_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29512,"src":"5937:46:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":29968,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29956,"src":"5848:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":29966,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"5826:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":29967,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5841:6:76","memberName":"unwrap","nodeType":"MemberAccess","src":"5826:21:76","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":29969,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5826:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":29970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5856:10:76","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":7785,"src":"5826:40:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":29974,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5826:175:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":29964,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"5789:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":29965,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5804:4:76","memberName":"wrap","nodeType":"MemberAccess","src":"5789:19:76","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":29975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5789:226:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"functionReturnParameters":29963,"id":29976,"nodeType":"Return","src":"5770:245:76"}]},"id":29978,"implemented":true,"kind":"function","modifiers":[],"name":"setRemoveLiquidityCustom","nameLocation":"5617:24:76","nodeType":"FunctionDefinition","parameters":{"id":29959,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29956,"mutability":"mutable","name":"config","nameLocation":"5666:6:76","nodeType":"VariableDeclaration","scope":29978,"src":"5651:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":29955,"nodeType":"UserDefinedTypeName","pathNode":{"id":29954,"name":"PoolConfigBits","nameLocations":["5651:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"5651:14:76"},"referencedDeclaration":4582,"src":"5651:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":29958,"mutability":"mutable","name":"enableRemoveLiquidityCustom","nameLocation":"5687:27:76","nodeType":"VariableDeclaration","scope":29978,"src":"5682:32:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29957,"name":"bool","nodeType":"ElementaryTypeName","src":"5682:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5641:79:76"},"returnParameters":{"id":29963,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29962,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29978,"src":"5744:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":29961,"nodeType":"UserDefinedTypeName","pathNode":{"id":29960,"name":"PoolConfigBits","nameLocations":["5744:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"5744:14:76"},"referencedDeclaration":4582,"src":"5744:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"5743:16:76"},"scope":30441,"src":"5608:414:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":29995,"nodeType":"Block","src":"6106:97:76","statements":[{"expression":{"arguments":[{"expression":{"id":29991,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"6164:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":29992,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6180:15:76","memberName":"DONATION_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29517,"src":"6164:31:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":29988,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29981,"src":"6145:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":29986,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"6123:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":29987,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6138:6:76","memberName":"unwrap","nodeType":"MemberAccess","src":"6123:21:76","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":29989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6123:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":29990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6153:10:76","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":7771,"src":"6123:40:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":29993,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6123:73:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":29985,"id":29994,"nodeType":"Return","src":"6116:80:76"}]},"id":29996,"implemented":true,"kind":"function","modifiers":[],"name":"supportsDonation","nameLocation":"6037:16:76","nodeType":"FunctionDefinition","parameters":{"id":29982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29981,"mutability":"mutable","name":"config","nameLocation":"6069:6:76","nodeType":"VariableDeclaration","scope":29996,"src":"6054:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":29980,"nodeType":"UserDefinedTypeName","pathNode":{"id":29979,"name":"PoolConfigBits","nameLocations":["6054:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"6054:14:76"},"referencedDeclaration":4582,"src":"6054:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"6053:23:76"},"returnParameters":{"id":29985,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29984,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":29996,"src":"6100:4:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":29983,"name":"bool","nodeType":"ElementaryTypeName","src":"6100:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6099:6:76"},"scope":30441,"src":"6028:175:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":30020,"nodeType":"Block","src":"6313:176:76","statements":[{"expression":{"arguments":[{"arguments":[{"id":30014,"name":"enableDonation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30001,"src":"6420:14:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"expression":{"id":30015,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"6436:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":30016,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6452:15:76","memberName":"DONATION_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29517,"src":"6436:31:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":30011,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29999,"src":"6401:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":30009,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"6379:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":30010,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6394:6:76","memberName":"unwrap","nodeType":"MemberAccess","src":"6379:21:76","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":30012,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6379:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":30013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6409:10:76","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":7785,"src":"6379:40:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":30017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6379:89:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":30007,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"6342:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":30008,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6357:4:76","memberName":"wrap","nodeType":"MemberAccess","src":"6342:19:76","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":30018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6342:140:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"functionReturnParameters":30006,"id":30019,"nodeType":"Return","src":"6323:159:76"}]},"id":30021,"implemented":true,"kind":"function","modifiers":[],"name":"setDonation","nameLocation":"6218:11:76","nodeType":"FunctionDefinition","parameters":{"id":30002,"nodeType":"ParameterList","parameters":[{"constant":false,"id":29999,"mutability":"mutable","name":"config","nameLocation":"6245:6:76","nodeType":"VariableDeclaration","scope":30021,"src":"6230:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":29998,"nodeType":"UserDefinedTypeName","pathNode":{"id":29997,"name":"PoolConfigBits","nameLocations":["6230:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"6230:14:76"},"referencedDeclaration":4582,"src":"6230:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":30001,"mutability":"mutable","name":"enableDonation","nameLocation":"6258:14:76","nodeType":"VariableDeclaration","scope":30021,"src":"6253:19:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":30000,"name":"bool","nodeType":"ElementaryTypeName","src":"6253:4:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6229:44:76"},"returnParameters":{"id":30006,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30005,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30021,"src":"6297:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":30004,"nodeType":"UserDefinedTypeName","pathNode":{"id":30003,"name":"PoolConfigBits","nameLocations":["6297:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"6297:14:76"},"referencedDeclaration":4582,"src":"6297:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"6296:16:76"},"scope":30441,"src":"6209:280:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":30039,"nodeType":"Block","src":"6564:125:76","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":30031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":30027,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30024,"src":"6578:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":30028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6585:16:76","memberName":"supportsDonation","nodeType":"MemberAccess","referencedDeclaration":29996,"src":"6578:23:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":30029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6578:25:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":30030,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6607:5:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"6578:34:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30038,"nodeType":"IfStatement","src":"6574:109:76","trueBody":{"id":30037,"nodeType":"Block","src":"6614:69:76","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":30032,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"6635:12:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3768_$","typeString":"type(contract IVaultErrors)"}},"id":30034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6648:22:76","memberName":"DoesNotSupportDonation","nodeType":"MemberAccess","referencedDeclaration":3571,"src":"6635:35:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":30035,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6635:37:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":30036,"nodeType":"RevertStatement","src":"6628:44:76"}]}}]},"id":30040,"implemented":true,"kind":"function","modifiers":[],"name":"requireDonationEnabled","nameLocation":"6504:22:76","nodeType":"FunctionDefinition","parameters":{"id":30025,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30024,"mutability":"mutable","name":"config","nameLocation":"6542:6:76","nodeType":"VariableDeclaration","scope":30040,"src":"6527:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":30023,"nodeType":"UserDefinedTypeName","pathNode":{"id":30022,"name":"PoolConfigBits","nameLocations":["6527:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"6527:14:76"},"referencedDeclaration":4582,"src":"6527:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"6526:23:76"},"returnParameters":{"id":30026,"nodeType":"ParameterList","parameters":[],"src":"6564:0:76"},"scope":30441,"src":"6495:194:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":30060,"nodeType":"Block","src":"6822:164:76","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":30053,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"6892:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":30054,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6908:22:76","memberName":"STATIC_SWAP_FEE_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29572,"src":"6892:38:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":30055,"name":"FEE_BITLENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4865,"src":"6932:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":30050,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30043,"src":"6873:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":30048,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"6851:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":30049,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6866:6:76","memberName":"unwrap","nodeType":"MemberAccess","src":"6851:21:76","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":30051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6851:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":30052,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6881:10:76","memberName":"decodeUint","nodeType":"MemberAccess","referencedDeclaration":7695,"src":"6851:40:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256,uint256) pure returns (uint256)"}},"id":30056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6851:95:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":30057,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4868,"src":"6961:18:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6851:128:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":30047,"id":30059,"nodeType":"Return","src":"6832:147:76"}]},"id":30061,"implemented":true,"kind":"function","modifiers":[],"name":"getStaticSwapFeePercentage","nameLocation":"6740:26:76","nodeType":"FunctionDefinition","parameters":{"id":30044,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30043,"mutability":"mutable","name":"config","nameLocation":"6782:6:76","nodeType":"VariableDeclaration","scope":30061,"src":"6767:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":30042,"nodeType":"UserDefinedTypeName","pathNode":{"id":30041,"name":"PoolConfigBits","nameLocations":["6767:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"6767:14:76"},"referencedDeclaration":4582,"src":"6767:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"6766:23:76"},"returnParameters":{"id":30047,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30046,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30061,"src":"6813:7:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30045,"name":"uint256","nodeType":"ElementaryTypeName","src":"6813:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6812:9:76"},"scope":30441,"src":"6731:255:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":30100,"nodeType":"Block","src":"7105:506:76","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30072,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30066,"src":"7292:5:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":30073,"name":"MAX_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4871,"src":"7300:18:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7292:26:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30081,"nodeType":"IfStatement","src":"7288:97:76","trueBody":{"id":30080,"nodeType":"Block","src":"7320:65:76","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":30075,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"7341:12:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3768_$","typeString":"type(contract IVaultErrors)"}},"id":30077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7354:18:76","memberName":"PercentageAboveMax","nodeType":"MemberAccess","referencedDeclaration":3619,"src":"7341:31:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":30078,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7341:33:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":30079,"nodeType":"RevertStatement","src":"7334:40:76"}]}},{"expression":{"id":30084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":30082,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30066,"src":"7394:5:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":30083,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4868,"src":"7403:18:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7394:27:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30085,"nodeType":"ExpressionStatement","src":"7394:27:76"},{"expression":{"arguments":[{"arguments":[{"id":30093,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30066,"src":"7529:5:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":30094,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"7536:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":30095,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7552:22:76","memberName":"STATIC_SWAP_FEE_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29572,"src":"7536:38:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":30096,"name":"FEE_BITLENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4865,"src":"7576:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":30090,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30064,"src":"7510:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":30088,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"7488:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":30089,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7503:6:76","memberName":"unwrap","nodeType":"MemberAccess","src":"7488:21:76","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":30091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7488:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":30092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7518:10:76","memberName":"insertUint","nodeType":"MemberAccess","referencedDeclaration":7523,"src":"7488:40:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256,uint256,uint256) pure returns (bytes32)"}},"id":30097,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7488:102:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":30086,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"7451:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":30087,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7466:4:76","memberName":"wrap","nodeType":"MemberAccess","src":"7451:19:76","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":30098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7451:153:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"functionReturnParameters":30071,"id":30099,"nodeType":"Return","src":"7432:172:76"}]},"id":30101,"implemented":true,"kind":"function","modifiers":[],"name":"setStaticSwapFeePercentage","nameLocation":"7001:26:76","nodeType":"FunctionDefinition","parameters":{"id":30067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30064,"mutability":"mutable","name":"config","nameLocation":"7043:6:76","nodeType":"VariableDeclaration","scope":30101,"src":"7028:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":30063,"nodeType":"UserDefinedTypeName","pathNode":{"id":30062,"name":"PoolConfigBits","nameLocations":["7028:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"7028:14:76"},"referencedDeclaration":4582,"src":"7028:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":30066,"mutability":"mutable","name":"value","nameLocation":"7059:5:76","nodeType":"VariableDeclaration","scope":30101,"src":"7051:13:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30065,"name":"uint256","nodeType":"ElementaryTypeName","src":"7051:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7027:38:76"},"returnParameters":{"id":30071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30070,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30101,"src":"7089:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":30069,"nodeType":"UserDefinedTypeName","pathNode":{"id":30068,"name":"PoolConfigBits","nameLocations":["7089:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"7089:14:76"},"referencedDeclaration":4582,"src":"7089:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"7088:16:76"},"scope":30441,"src":"6992:619:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":30121,"nodeType":"Block","src":"7711:167:76","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":30114,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"7781:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":30115,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7797:25:76","memberName":"AGGREGATE_SWAP_FEE_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29577,"src":"7781:41:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30116,"name":"FEE_BITLENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4865,"src":"7824:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":30111,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30104,"src":"7762:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":30109,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"7740:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":30110,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7755:6:76","memberName":"unwrap","nodeType":"MemberAccess","src":"7740:21:76","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":30112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7740:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":30113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7770:10:76","memberName":"decodeUint","nodeType":"MemberAccess","referencedDeclaration":7695,"src":"7740:40:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256,uint256) pure returns (uint256)"}},"id":30117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7740:98:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":30118,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4868,"src":"7853:18:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7740:131:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":30108,"id":30120,"nodeType":"Return","src":"7721:150:76"}]},"id":30122,"implemented":true,"kind":"function","modifiers":[],"name":"getAggregateSwapFeePercentage","nameLocation":"7626:29:76","nodeType":"FunctionDefinition","parameters":{"id":30105,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30104,"mutability":"mutable","name":"config","nameLocation":"7671:6:76","nodeType":"VariableDeclaration","scope":30122,"src":"7656:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":30103,"nodeType":"UserDefinedTypeName","pathNode":{"id":30102,"name":"PoolConfigBits","nameLocations":["7656:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"7656:14:76"},"referencedDeclaration":4582,"src":"7656:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"7655:23:76"},"returnParameters":{"id":30108,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30107,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30122,"src":"7702:7:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30106,"name":"uint256","nodeType":"ElementaryTypeName","src":"7702:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7701:9:76"},"scope":30441,"src":"7617:261:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":30161,"nodeType":"Block","src":"8022:414:76","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30133,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30127,"src":"8036:5:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":30134,"name":"MAX_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4871,"src":"8044:18:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8036:26:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30142,"nodeType":"IfStatement","src":"8032:97:76","trueBody":{"id":30141,"nodeType":"Block","src":"8064:65:76","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":30136,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"8085:12:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3768_$","typeString":"type(contract IVaultErrors)"}},"id":30138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8098:18:76","memberName":"PercentageAboveMax","nodeType":"MemberAccess","referencedDeclaration":3619,"src":"8085:31:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":30139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8085:33:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":30140,"nodeType":"RevertStatement","src":"8078:40:76"}]}},{"expression":{"id":30145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":30143,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30127,"src":"8138:5:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":30144,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4868,"src":"8147:18:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8138:27:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30146,"nodeType":"ExpressionStatement","src":"8138:27:76"},{"expression":{"arguments":[{"arguments":[{"id":30154,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30127,"src":"8294:5:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":30155,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"8321:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":30156,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8337:25:76","memberName":"AGGREGATE_SWAP_FEE_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29577,"src":"8321:41:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30157,"name":"FEE_BITLENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4865,"src":"8384:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":30151,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30125,"src":"8254:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":30149,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"8232:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":30150,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8247:6:76","memberName":"unwrap","nodeType":"MemberAccess","src":"8232:21:76","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":30152,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8232:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":30153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8262:10:76","memberName":"insertUint","nodeType":"MemberAccess","referencedDeclaration":7523,"src":"8232:40:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256,uint256,uint256) pure returns (bytes32)"}},"id":30158,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8232:183:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":30147,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"8195:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":30148,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8210:4:76","memberName":"wrap","nodeType":"MemberAccess","src":"8195:19:76","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":30159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8195:234:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"functionReturnParameters":30132,"id":30160,"nodeType":"Return","src":"8176:253:76"}]},"id":30162,"implemented":true,"kind":"function","modifiers":[],"name":"setAggregateSwapFeePercentage","nameLocation":"7893:29:76","nodeType":"FunctionDefinition","parameters":{"id":30128,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30125,"mutability":"mutable","name":"config","nameLocation":"7947:6:76","nodeType":"VariableDeclaration","scope":30162,"src":"7932:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":30124,"nodeType":"UserDefinedTypeName","pathNode":{"id":30123,"name":"PoolConfigBits","nameLocations":["7932:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"7932:14:76"},"referencedDeclaration":4582,"src":"7932:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":30127,"mutability":"mutable","name":"value","nameLocation":"7971:5:76","nodeType":"VariableDeclaration","scope":30162,"src":"7963:13:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30126,"name":"uint256","nodeType":"ElementaryTypeName","src":"7963:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7922:60:76"},"returnParameters":{"id":30132,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30131,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30162,"src":"8006:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":30130,"nodeType":"UserDefinedTypeName","pathNode":{"id":30129,"name":"PoolConfigBits","nameLocations":["8006:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"8006:14:76"},"referencedDeclaration":4582,"src":"8006:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"8005:16:76"},"scope":30441,"src":"7884:552:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":30182,"nodeType":"Block","src":"8537:168:76","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":30175,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"8607:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":30176,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8623:26:76","memberName":"AGGREGATE_YIELD_FEE_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29582,"src":"8607:42:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30177,"name":"FEE_BITLENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4865,"src":"8651:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":30172,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30165,"src":"8588:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":30170,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"8566:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":30171,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8581:6:76","memberName":"unwrap","nodeType":"MemberAccess","src":"8566:21:76","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":30173,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8566:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":30174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8596:10:76","memberName":"decodeUint","nodeType":"MemberAccess","referencedDeclaration":7695,"src":"8566:40:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256,uint256) pure returns (uint256)"}},"id":30178,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8566:99:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":30179,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4868,"src":"8680:18:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8566:132:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":30169,"id":30181,"nodeType":"Return","src":"8547:151:76"}]},"id":30183,"implemented":true,"kind":"function","modifiers":[],"name":"getAggregateYieldFeePercentage","nameLocation":"8451:30:76","nodeType":"FunctionDefinition","parameters":{"id":30166,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30165,"mutability":"mutable","name":"config","nameLocation":"8497:6:76","nodeType":"VariableDeclaration","scope":30183,"src":"8482:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":30164,"nodeType":"UserDefinedTypeName","pathNode":{"id":30163,"name":"PoolConfigBits","nameLocations":["8482:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"8482:14:76"},"referencedDeclaration":4582,"src":"8482:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"8481:23:76"},"returnParameters":{"id":30169,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30168,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30183,"src":"8528:7:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30167,"name":"uint256","nodeType":"ElementaryTypeName","src":"8528:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8527:9:76"},"scope":30441,"src":"8442:263:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":30222,"nodeType":"Block","src":"8850:415:76","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30194,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30188,"src":"8864:5:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":30195,"name":"MAX_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4871,"src":"8872:18:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8864:26:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30203,"nodeType":"IfStatement","src":"8860:97:76","trueBody":{"id":30202,"nodeType":"Block","src":"8892:65:76","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":30197,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"8913:12:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3768_$","typeString":"type(contract IVaultErrors)"}},"id":30199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8926:18:76","memberName":"PercentageAboveMax","nodeType":"MemberAccess","referencedDeclaration":3619,"src":"8913:31:76","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":30200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8913:33:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":30201,"nodeType":"RevertStatement","src":"8906:40:76"}]}},{"expression":{"id":30206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":30204,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30188,"src":"8966:5:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":30205,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4868,"src":"8975:18:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8966:27:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30207,"nodeType":"ExpressionStatement","src":"8966:27:76"},{"expression":{"arguments":[{"arguments":[{"id":30215,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30188,"src":"9122:5:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":30216,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"9149:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":30217,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9165:26:76","memberName":"AGGREGATE_YIELD_FEE_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29582,"src":"9149:42:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30218,"name":"FEE_BITLENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4865,"src":"9213:13:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":30212,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30186,"src":"9082:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":30210,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"9060:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":30211,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9075:6:76","memberName":"unwrap","nodeType":"MemberAccess","src":"9060:21:76","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":30213,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9060:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":30214,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9090:10:76","memberName":"insertUint","nodeType":"MemberAccess","referencedDeclaration":7523,"src":"9060:40:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256,uint256,uint256) pure returns (bytes32)"}},"id":30219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9060:184:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":30208,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"9023:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":30209,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9038:4:76","memberName":"wrap","nodeType":"MemberAccess","src":"9023:19:76","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":30220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9023:235:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"functionReturnParameters":30193,"id":30221,"nodeType":"Return","src":"9004:254:76"}]},"id":30223,"implemented":true,"kind":"function","modifiers":[],"name":"setAggregateYieldFeePercentage","nameLocation":"8720:30:76","nodeType":"FunctionDefinition","parameters":{"id":30189,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30186,"mutability":"mutable","name":"config","nameLocation":"8775:6:76","nodeType":"VariableDeclaration","scope":30223,"src":"8760:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":30185,"nodeType":"UserDefinedTypeName","pathNode":{"id":30184,"name":"PoolConfigBits","nameLocations":["8760:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"8760:14:76"},"referencedDeclaration":4582,"src":"8760:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":30188,"mutability":"mutable","name":"value","nameLocation":"8799:5:76","nodeType":"VariableDeclaration","scope":30223,"src":"8791:13:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30187,"name":"uint256","nodeType":"ElementaryTypeName","src":"8791:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8750:60:76"},"returnParameters":{"id":30193,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30192,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30223,"src":"8834:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":30191,"nodeType":"UserDefinedTypeName","pathNode":{"id":30190,"name":"PoolConfigBits","nameLocations":["8834:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"8834:14:76"},"referencedDeclaration":4582,"src":"8834:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"8833:16:76"},"scope":30441,"src":"8711:554:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":30245,"nodeType":"Block","src":"9355:267:76","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":30238,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"9470:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":30239,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9486:30:76","memberName":"DECIMAL_SCALING_FACTORS_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29587,"src":"9470:46:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":30240,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"9538:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":30241,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9554:29:76","memberName":"TOKEN_DECIMAL_DIFFS_BITLENGTH","nodeType":"MemberAccess","referencedDeclaration":29595,"src":"9538:45:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":30235,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30226,"src":"9430:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":30233,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"9408:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":30234,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9423:6:76","memberName":"unwrap","nodeType":"MemberAccess","src":"9408:21:76","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":30236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9408:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":30237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9438:10:76","memberName":"decodeUint","nodeType":"MemberAccess","referencedDeclaration":7695,"src":"9408:40:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256,uint256) pure returns (uint256)"}},"id":30242,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9408:193:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":30232,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9384:6:76","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":30231,"name":"uint40","nodeType":"ElementaryTypeName","src":"9384:6:76","typeDescriptions":{}}},"id":30243,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9384:231:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"functionReturnParameters":30230,"id":30244,"nodeType":"Return","src":"9365:250:76"}]},"id":30246,"implemented":true,"kind":"function","modifiers":[],"name":"getTokenDecimalDiffs","nameLocation":"9280:20:76","nodeType":"FunctionDefinition","parameters":{"id":30227,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30226,"mutability":"mutable","name":"config","nameLocation":"9316:6:76","nodeType":"VariableDeclaration","scope":30246,"src":"9301:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":30225,"nodeType":"UserDefinedTypeName","pathNode":{"id":30224,"name":"PoolConfigBits","nameLocations":["9301:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"9301:14:76"},"referencedDeclaration":4582,"src":"9301:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"9300:23:76"},"returnParameters":{"id":30230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30229,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30246,"src":"9347:6:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":30228,"name":"uint40","nodeType":"ElementaryTypeName","src":"9347:6:76","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"9346:8:76"},"scope":30441,"src":"9271:351:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":30314,"nodeType":"Block","src":"9767:667:76","statements":[{"assignments":[30261],"declarations":[{"constant":false,"id":30261,"mutability":"mutable","name":"scalingFactors","nameLocation":"9794:14:76","nodeType":"VariableDeclaration","scope":30314,"src":"9777:31:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":30259,"name":"uint256","nodeType":"ElementaryTypeName","src":"9777:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30260,"nodeType":"ArrayTypeName","src":"9777:9:76","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":30267,"initialValue":{"arguments":[{"id":30265,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30251,"src":"9825:9:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":30264,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"9811:13:76","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":30262,"name":"uint256","nodeType":"ElementaryTypeName","src":"9815:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30263,"nodeType":"ArrayTypeName","src":"9815:9:76","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":30266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9811:24:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"9777:58:76"},{"assignments":[30269],"declarations":[{"constant":false,"id":30269,"mutability":"mutable","name":"tokenDecimalDiffs","nameLocation":"9854:17:76","nodeType":"VariableDeclaration","scope":30314,"src":"9846:25:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":30268,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9846:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":30279,"initialValue":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":30274,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30249,"src":"9890:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":30275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9897:20:76","memberName":"getTokenDecimalDiffs","nodeType":"MemberAccess","referencedDeclaration":30246,"src":"9890:27:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_uint40_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (uint40)"}},"id":30276,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9890:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint40","typeString":"uint40"}],"id":30273,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9882:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":30272,"name":"uint256","nodeType":"ElementaryTypeName","src":"9882:7:76","typeDescriptions":{}}},"id":30277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9882:38:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":30271,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9874:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":30270,"name":"bytes32","nodeType":"ElementaryTypeName","src":"9874:7:76","typeDescriptions":{}}},"id":30278,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9874:47:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"9846:75:76"},{"body":{"id":30310,"nodeType":"Block","src":"9972:424:76","statements":[{"assignments":[30291],"declarations":[{"constant":false,"id":30291,"mutability":"mutable","name":"decimalDiff","nameLocation":"9994:11:76","nodeType":"VariableDeclaration","scope":30310,"src":"9986:19:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30290,"name":"uint256","nodeType":"ElementaryTypeName","src":"9986:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30301,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30294,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30281,"src":"10054:1:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":30295,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"10058:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":30296,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10074:22:76","memberName":"DECIMAL_DIFF_BITLENGTH","nodeType":"MemberAccess","referencedDeclaration":29598,"src":"10058:38:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"10054:42:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":30298,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"10114:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":30299,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10130:22:76","memberName":"DECIMAL_DIFF_BITLENGTH","nodeType":"MemberAccess","referencedDeclaration":29598,"src":"10114:38:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":30292,"name":"tokenDecimalDiffs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30269,"src":"10008:17:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":30293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10026:10:76","memberName":"decodeUint","nodeType":"MemberAccess","referencedDeclaration":7695,"src":"10008:28:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256,uint256) pure returns (uint256)"}},"id":30300,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10008:158:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9986:180:76"},{"expression":{"id":30308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":30302,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30261,"src":"10348:14:76","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":30304,"indexExpression":{"id":30303,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30281,"src":"10363:1:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10348:17:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":30305,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10368:2:76","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"id":30306,"name":"decimalDiff","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30291,"src":"10374:11:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10368:17:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10348:37:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30309,"nodeType":"ExpressionStatement","src":"10348:37:76"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30286,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30284,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30281,"src":"9952:1:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":30285,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30251,"src":"9956:9:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9952:13:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30311,"initializationExpression":{"assignments":[30281],"declarations":[{"constant":false,"id":30281,"mutability":"mutable","name":"i","nameLocation":"9945:1:76","nodeType":"VariableDeclaration","scope":30311,"src":"9937:9:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30280,"name":"uint256","nodeType":"ElementaryTypeName","src":"9937:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30283,"initialValue":{"hexValue":"30","id":30282,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9949:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9937:13:76"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":30288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"9967:3:76","subExpression":{"id":30287,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30281,"src":"9969:1:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30289,"nodeType":"ExpressionStatement","src":"9967:3:76"},"nodeType":"ForStatement","src":"9932:464:76"},{"expression":{"id":30312,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30261,"src":"10413:14:76","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":30256,"id":30313,"nodeType":"Return","src":"10406:21:76"}]},"id":30315,"implemented":true,"kind":"function","modifiers":[],"name":"getDecimalScalingFactors","nameLocation":"9637:24:76","nodeType":"FunctionDefinition","parameters":{"id":30252,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30249,"mutability":"mutable","name":"config","nameLocation":"9686:6:76","nodeType":"VariableDeclaration","scope":30315,"src":"9671:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":30248,"nodeType":"UserDefinedTypeName","pathNode":{"id":30247,"name":"PoolConfigBits","nameLocations":["9671:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"9671:14:76"},"referencedDeclaration":4582,"src":"9671:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":30251,"mutability":"mutable","name":"numTokens","nameLocation":"9710:9:76","nodeType":"VariableDeclaration","scope":30315,"src":"9702:17:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30250,"name":"uint256","nodeType":"ElementaryTypeName","src":"9702:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9661:64:76"},"returnParameters":{"id":30256,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30255,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30315,"src":"9749:16:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":30253,"name":"uint256","nodeType":"ElementaryTypeName","src":"9749:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30254,"nodeType":"ArrayTypeName","src":"9749:9:76","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9748:18:76"},"scope":30441,"src":"9628:806:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":30341,"nodeType":"Block","src":"10546:307:76","statements":[{"expression":{"arguments":[{"arguments":[{"id":30333,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30320,"src":"10674:5:76","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},{"expression":{"id":30334,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"10701:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":30335,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10717:30:76","memberName":"DECIMAL_SCALING_FACTORS_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29587,"src":"10701:46:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":30336,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"10769:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":30337,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10785:29:76","memberName":"TOKEN_DECIMAL_DIFFS_BITLENGTH","nodeType":"MemberAccess","referencedDeclaration":29595,"src":"10769:45:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint40","typeString":"uint40"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":30330,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30318,"src":"10634:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":30328,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"10612:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":30329,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10627:6:76","memberName":"unwrap","nodeType":"MemberAccess","src":"10612:21:76","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":30331,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10612:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":30332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10642:10:76","memberName":"insertUint","nodeType":"MemberAccess","referencedDeclaration":7523,"src":"10612:40:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256,uint256,uint256) pure returns (bytes32)"}},"id":30338,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10612:220:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":30326,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"10575:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":30327,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10590:4:76","memberName":"wrap","nodeType":"MemberAccess","src":"10575:19:76","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":30339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10575:271:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"functionReturnParameters":30325,"id":30340,"nodeType":"Return","src":"10556:290:76"}]},"id":30342,"implemented":true,"kind":"function","modifiers":[],"name":"setTokenDecimalDiffs","nameLocation":"10449:20:76","nodeType":"FunctionDefinition","parameters":{"id":30321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30318,"mutability":"mutable","name":"config","nameLocation":"10485:6:76","nodeType":"VariableDeclaration","scope":30342,"src":"10470:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":30317,"nodeType":"UserDefinedTypeName","pathNode":{"id":30316,"name":"PoolConfigBits","nameLocations":["10470:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"10470:14:76"},"referencedDeclaration":4582,"src":"10470:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":30320,"mutability":"mutable","name":"value","nameLocation":"10500:5:76","nodeType":"VariableDeclaration","scope":30342,"src":"10493:12:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":30319,"name":"uint40","nodeType":"ElementaryTypeName","src":"10493:6:76","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"10469:37:76"},"returnParameters":{"id":30325,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30324,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30342,"src":"10530:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":30323,"nodeType":"UserDefinedTypeName","pathNode":{"id":30322,"name":"PoolConfigBits","nameLocations":["10530:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"10530:14:76"},"referencedDeclaration":4582,"src":"10530:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"10529:16:76"},"scope":30441,"src":"10440:413:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":30364,"nodeType":"Block","src":"10944:255:76","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":30357,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"11059:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":30358,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11075:28:76","memberName":"PAUSE_WINDOW_END_TIME_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29592,"src":"11059:44:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":30359,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"11125:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":30360,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11141:19:76","memberName":"TIMESTAMP_BITLENGTH","nodeType":"MemberAccess","referencedDeclaration":29601,"src":"11125:35:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":30354,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30345,"src":"11019:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":30352,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"10997:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":30353,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11012:6:76","memberName":"unwrap","nodeType":"MemberAccess","src":"10997:21:76","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":30355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10997:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":30356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11027:10:76","memberName":"decodeUint","nodeType":"MemberAccess","referencedDeclaration":7695,"src":"10997:40:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256,uint256) pure returns (uint256)"}},"id":30361,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10997:181:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":30351,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10973:6:76","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":30350,"name":"uint32","nodeType":"ElementaryTypeName","src":"10973:6:76","typeDescriptions":{}}},"id":30362,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10973:219:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":30349,"id":30363,"nodeType":"Return","src":"10954:238:76"}]},"id":30365,"implemented":true,"kind":"function","modifiers":[],"name":"getPauseWindowEndTime","nameLocation":"10868:21:76","nodeType":"FunctionDefinition","parameters":{"id":30346,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30345,"mutability":"mutable","name":"config","nameLocation":"10905:6:76","nodeType":"VariableDeclaration","scope":30365,"src":"10890:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":30344,"nodeType":"UserDefinedTypeName","pathNode":{"id":30343,"name":"PoolConfigBits","nameLocations":["10890:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"10890:14:76"},"referencedDeclaration":4582,"src":"10890:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"10889:23:76"},"returnParameters":{"id":30349,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30348,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30365,"src":"10936:6:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":30347,"name":"uint32","nodeType":"ElementaryTypeName","src":"10936:6:76","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"10935:8:76"},"scope":30441,"src":"10859:340:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":30391,"nodeType":"Block","src":"11312:295:76","statements":[{"expression":{"arguments":[{"arguments":[{"id":30383,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30370,"src":"11440:5:76","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"expression":{"id":30384,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"11467:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":30385,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11483:28:76","memberName":"PAUSE_WINDOW_END_TIME_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29592,"src":"11467:44:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":30386,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"11533:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":30387,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11549:19:76","memberName":"TIMESTAMP_BITLENGTH","nodeType":"MemberAccess","referencedDeclaration":29601,"src":"11533:35:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"arguments":[{"id":30380,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30368,"src":"11400:6:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":30378,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"11378:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":30379,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11393:6:76","memberName":"unwrap","nodeType":"MemberAccess","src":"11378:21:76","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":30381,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11378:29:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":30382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11408:10:76","memberName":"insertUint","nodeType":"MemberAccess","referencedDeclaration":7523,"src":"11378:40:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256,uint256,uint256) pure returns (bytes32)"}},"id":30388,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11378:208:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":30376,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"11341:14:76","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":30377,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11356:4:76","memberName":"wrap","nodeType":"MemberAccess","src":"11341:19:76","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":30389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11341:259:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"functionReturnParameters":30375,"id":30390,"nodeType":"Return","src":"11322:278:76"}]},"id":30392,"implemented":true,"kind":"function","modifiers":[],"name":"setPauseWindowEndTime","nameLocation":"11214:21:76","nodeType":"FunctionDefinition","parameters":{"id":30371,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30368,"mutability":"mutable","name":"config","nameLocation":"11251:6:76","nodeType":"VariableDeclaration","scope":30392,"src":"11236:21:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":30367,"nodeType":"UserDefinedTypeName","pathNode":{"id":30366,"name":"PoolConfigBits","nameLocations":["11236:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"11236:14:76"},"referencedDeclaration":4582,"src":"11236:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":30370,"mutability":"mutable","name":"value","nameLocation":"11266:5:76","nodeType":"VariableDeclaration","scope":30392,"src":"11259:12:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":30369,"name":"uint32","nodeType":"ElementaryTypeName","src":"11259:6:76","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"11235:37:76"},"returnParameters":{"id":30375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30374,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30392,"src":"11296:14:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":30373,"nodeType":"UserDefinedTypeName","pathNode":{"id":30372,"name":"PoolConfigBits","nameLocations":["11296:14:76"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"11296:14:76"},"referencedDeclaration":4582,"src":"11296:14:76","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"11295:16:76"},"scope":30441,"src":"11205:402:76","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":30439,"nodeType":"Block","src":"11815:352:76","statements":[{"assignments":[30401],"declarations":[{"constant":false,"id":30401,"mutability":"mutable","name":"value","nameLocation":"11833:5:76","nodeType":"VariableDeclaration","scope":30439,"src":"11825:13:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":30400,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11825:7:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":30402,"nodeType":"VariableDeclarationStatement","src":"11825:13:76"},{"body":{"id":30429,"nodeType":"Block","src":"11904:217:76","statements":[{"expression":{"id":30427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":30414,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30401,"src":"11918:5:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":30417,"name":"tokenDecimalDiffs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30395,"src":"11960:17:76","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_memory_ptr","typeString":"uint8[] memory"}},"id":30419,"indexExpression":{"id":30418,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30404,"src":"11978:1:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11960:20:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30420,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30404,"src":"11998:1:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"expression":{"id":30421,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"12002:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":30422,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12018:22:76","memberName":"DECIMAL_DIFF_BITLENGTH","nodeType":"MemberAccess","referencedDeclaration":29598,"src":"12002:38:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"11998:42:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":30424,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"12058:15:76","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":30425,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12074:22:76","memberName":"DECIMAL_DIFF_BITLENGTH","nodeType":"MemberAccess","referencedDeclaration":29598,"src":"12058:38:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"expression":{"id":30415,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30401,"src":"11926:5:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":30416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11932:10:76","memberName":"insertUint","nodeType":"MemberAccess","referencedDeclaration":7523,"src":"11926:16:76","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256,uint256,uint256) pure returns (bytes32)"}},"id":30426,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11926:184:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"11918:192:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":30428,"nodeType":"ExpressionStatement","src":"11918:192:76"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30407,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30404,"src":"11869:1:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":30408,"name":"tokenDecimalDiffs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30395,"src":"11873:17:76","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_memory_ptr","typeString":"uint8[] memory"}},"id":30409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11891:6:76","memberName":"length","nodeType":"MemberAccess","src":"11873:24:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11869:28:76","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30430,"initializationExpression":{"assignments":[30404],"declarations":[{"constant":false,"id":30404,"mutability":"mutable","name":"i","nameLocation":"11862:1:76","nodeType":"VariableDeclaration","scope":30430,"src":"11854:9:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30403,"name":"uint256","nodeType":"ElementaryTypeName","src":"11854:7:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30406,"initialValue":{"hexValue":"30","id":30405,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11866:1:76","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11854:13:76"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":30412,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"11899:3:76","subExpression":{"id":30411,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30404,"src":"11901:1:76","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30413,"nodeType":"ExpressionStatement","src":"11899:3:76"},"nodeType":"ForStatement","src":"11849:272:76"},{"expression":{"arguments":[{"arguments":[{"id":30435,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30401,"src":"12153:5:76","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":30434,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12145:7:76","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":30433,"name":"uint256","nodeType":"ElementaryTypeName","src":"12145:7:76","typeDescriptions":{}}},"id":30436,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12145:14:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":30432,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12138:6:76","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":30431,"name":"uint40","nodeType":"ElementaryTypeName","src":"12138:6:76","typeDescriptions":{}}},"id":30437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12138:22:76","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"functionReturnParameters":30399,"id":30438,"nodeType":"Return","src":"12131:29:76"}]},"id":30440,"implemented":true,"kind":"function","modifiers":[],"name":"toTokenDecimalDiffs","nameLocation":"11730:19:76","nodeType":"FunctionDefinition","parameters":{"id":30396,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30395,"mutability":"mutable","name":"tokenDecimalDiffs","nameLocation":"11765:17:76","nodeType":"VariableDeclaration","scope":30440,"src":"11750:32:76","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_memory_ptr","typeString":"uint8[]"},"typeName":{"baseType":{"id":30393,"name":"uint8","nodeType":"ElementaryTypeName","src":"11750:5:76","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":30394,"nodeType":"ArrayTypeName","src":"11750:7:76","typeDescriptions":{"typeIdentifier":"t_array$_t_uint8_$dyn_storage_ptr","typeString":"uint8[]"}},"visibility":"internal"}],"src":"11749:34:76"},"returnParameters":{"id":30399,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30398,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30440,"src":"11807:6:76","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":30397,"name":"uint40","nodeType":"ElementaryTypeName","src":"11807:6:76","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"11806:8:76"},"scope":30441,"src":"11721:446:76","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":30442,"src":"1279:10890:76","usedErrors":[],"usedEvents":[]}],"src":"46:12124:76"},"id":76},"@balancer-labs/v3-vault/contracts/lib/PoolDataLib.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/PoolDataLib.sol","exportedSymbols":{"FixedPoint":[8208],"IERC20":[40109],"IVaultErrors":[3768],"PackedTokenBalance":[6344],"PoolConfigBits":[4582],"PoolConfigLib":[30441],"PoolData":[4729],"PoolDataLib":[31031],"Rounding":[4732],"ScalingHelpers":[6848],"TokenInfo":[4704],"TokenType":[4681]},"id":31032,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":30443,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:77"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":30445,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31032,"sourceUnit":40110,"src":"72:72:77","symbolAliases":[{"foreign":{"id":30444,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"81:6:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":30450,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31032,"sourceUnit":4872,"src":"146:119:77","symbolAliases":[{"foreign":{"id":30446,"name":"PoolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4729,"src":"155:8:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":30447,"name":"TokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4704,"src":"165:9:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":30448,"name":"TokenType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4681,"src":"176:9:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":30449,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"187:8:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":30452,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31032,"sourceUnit":3769,"src":"266:93:77","symbolAliases":[{"foreign":{"id":30451,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"275:12:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":30454,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31032,"sourceUnit":8209,"src":"361:92:77","symbolAliases":[{"foreign":{"id":30453,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"370:10:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol","id":30456,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31032,"sourceUnit":6849,"src":"454:103:77","symbolAliases":[{"foreign":{"id":30455,"name":"ScalingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6848,"src":"463:14:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","id":30458,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31032,"sourceUnit":6345,"src":"558:111:77","symbolAliases":[{"foreign":{"id":30457,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6344,"src":"567:18:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/PoolConfigLib.sol","file":"./PoolConfigLib.sol","id":30461,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31032,"sourceUnit":30442,"src":"671:68:77","symbolAliases":[{"foreign":{"id":30459,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"680:14:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":30460,"name":"PoolConfigLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30441,"src":"696:13:77","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"PoolDataLib","contractDependencies":[],"contractKind":"library","documentation":{"id":30462,"nodeType":"StructuredDocumentation","src":"741:579:77","text":" @notice Helper functions to read/write a `PoolData` struct.\n @dev Note that the entire configuration of each pool is stored in the `_poolConfigBits` mapping (one slot per pool).\n This includes the data in the `PoolConfig` struct, plus the data in the `HookFlags` struct. The layout (i.e.,\n offsets for each data field) is specified in `PoolConfigConst`.\n The `PoolData` struct contains the raw bitmap with the entire pool state (`PoolConfigBits`), plus the token\n configuration, scaling factors, and dynamic information such as current balances and rates."},"fullyImplemented":true,"id":31031,"linearizedBaseContracts":[31031],"name":"PoolDataLib","nameLocation":"1329:11:77","nodeType":"ContractDefinition","nodes":[{"global":false,"id":30465,"libraryName":{"id":30463,"name":"PackedTokenBalance","nameLocations":["1353:18:77"],"nodeType":"IdentifierPath","referencedDeclaration":6344,"src":"1353:18:77"},"nodeType":"UsingForDirective","src":"1347:37:77","typeName":{"id":30464,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1376:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"global":false,"id":30467,"libraryName":{"id":30466,"name":"FixedPoint","nameLocations":["1395:10:77"],"nodeType":"IdentifierPath","referencedDeclaration":8208,"src":"1395:10:77"},"nodeType":"UsingForDirective","src":"1389:23:77"},{"global":false,"id":30469,"libraryName":{"id":30468,"name":"ScalingHelpers","nameLocations":["1423:14:77"],"nodeType":"IdentifierPath","referencedDeclaration":6848,"src":"1423:14:77"},"nodeType":"UsingForDirective","src":"1417:27:77"},{"global":false,"id":30473,"libraryName":{"id":30470,"name":"PoolConfigLib","nameLocations":["1455:13:77"],"nodeType":"IdentifierPath","referencedDeclaration":30441,"src":"1455:13:77"},"nodeType":"UsingForDirective","src":"1449:39:77","typeName":{"id":30472,"nodeType":"UserDefinedTypeName","pathNode":{"id":30471,"name":"PoolConfigBits","nameLocations":["1473:14:77"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"1473:14:77"},"referencedDeclaration":4582,"src":"1473:14:77","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}},{"body":{"id":30703,"nodeType":"Block","src":"1843:2810:77","statements":[{"assignments":[30500],"declarations":[{"constant":false,"id":30500,"mutability":"mutable","name":"numTokens","nameLocation":"1861:9:77","nodeType":"VariableDeclaration","scope":30703,"src":"1853:17:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30499,"name":"uint256","nodeType":"ElementaryTypeName","src":"1853:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30503,"initialValue":{"expression":{"id":30501,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30493,"src":"1873:6:77","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[] storage pointer"}},"id":30502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1880:6:77","memberName":"length","nodeType":"MemberAccess","src":"1873:13:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1853:33:77"},{"expression":{"id":30508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":30504,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30476,"src":"1897:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30506,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1906:14:77","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"1897:23:77","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":30507,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30483,"src":"1923:14:77","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"1897:40:77","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":30509,"nodeType":"ExpressionStatement","src":"1897:40:77"},{"expression":{"id":30514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":30510,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30476,"src":"1947:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30512,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1956:6:77","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":4712,"src":"1947:15:77","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":30513,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30493,"src":"1965:6:77","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[] storage pointer"}},"src":"1947:24:77","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":30515,"nodeType":"ExpressionStatement","src":"1947:24:77"},{"expression":{"id":30525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":30516,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30476,"src":"1981:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30518,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1990:9:77","memberName":"tokenInfo","nodeType":"MemberAccess","referencedDeclaration":4716,"src":"1981:18:77","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4704_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo memory[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":30523,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30500,"src":"2018:9:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":30522,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2002:15:77","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_TokenInfo_$4704_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct TokenInfo memory[] memory)"},"typeName":{"baseType":{"id":30520,"nodeType":"UserDefinedTypeName","pathNode":{"id":30519,"name":"TokenInfo","nameLocations":["2006:9:77"],"nodeType":"IdentifierPath","referencedDeclaration":4704,"src":"2006:9:77"},"referencedDeclaration":4704,"src":"2006:9:77","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_storage_ptr","typeString":"struct TokenInfo"}},"id":30521,"nodeType":"ArrayTypeName","src":"2006:11:77","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4704_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}}},"id":30524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2002:26:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4704_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo memory[] memory"}},"src":"1981:47:77","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4704_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo memory[] memory"}},"id":30526,"nodeType":"ExpressionStatement","src":"1981:47:77"},{"expression":{"id":30535,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":30527,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30476,"src":"2038:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30529,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2047:11:77","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":4719,"src":"2038:20:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":30533,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30500,"src":"2075:9:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":30532,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2061:13:77","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":30530,"name":"uint256","nodeType":"ElementaryTypeName","src":"2065:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30531,"nodeType":"ArrayTypeName","src":"2065:9:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":30534,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2061:24:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"2038:47:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":30536,"nodeType":"ExpressionStatement","src":"2038:47:77"},{"expression":{"id":30545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":30537,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30476,"src":"2095:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30539,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2104:20:77","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":4722,"src":"2095:29:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":30543,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30500,"src":"2141:9:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":30542,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2127:13:77","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":30540,"name":"uint256","nodeType":"ElementaryTypeName","src":"2131:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30541,"nodeType":"ArrayTypeName","src":"2131:9:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":30544,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2127:24:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"2095:56:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":30546,"nodeType":"ExpressionStatement","src":"2095:56:77"},{"expression":{"id":30556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":30547,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30476,"src":"2161:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30549,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2170:21:77","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":4728,"src":"2161:30:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":30552,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30476,"src":"2233:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30553,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2242:14:77","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"2233:23:77","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},{"id":30554,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30500,"src":"2258:9:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":30550,"name":"PoolConfigLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30441,"src":"2194:13:77","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigLib_$30441_$","typeString":"type(library PoolConfigLib)"}},"id":30551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2208:24:77","memberName":"getDecimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":30315,"src":"2194:38:77","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (PoolConfigBits,uint256) pure returns (uint256[] memory)"}},"id":30555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2194:74:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"2161:107:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":30557,"nodeType":"ExpressionStatement","src":"2161:107:77"},{"expression":{"id":30566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":30558,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30476,"src":"2278:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30560,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2287:10:77","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":4725,"src":"2278:19:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":30564,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30500,"src":"2314:9:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":30563,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2300:13:77","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":30561,"name":"uint256","nodeType":"ElementaryTypeName","src":"2304:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30562,"nodeType":"ArrayTypeName","src":"2304:9:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":30565,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2300:24:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"2278:46:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":30567,"nodeType":"ExpressionStatement","src":"2278:46:77"},{"assignments":[30569],"declarations":[{"constant":false,"id":30569,"mutability":"mutable","name":"poolSubjectToYieldFees","nameLocation":"2340:22:77","nodeType":"VariableDeclaration","scope":30703,"src":"2335:27:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":30568,"name":"bool","nodeType":"ElementaryTypeName","src":"2335:4:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":30588,"initialValue":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":30587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":30580,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":30570,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30476,"src":"2365:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30571,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2374:14:77","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"2365:23:77","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":30572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2389:17:77","memberName":"isPoolInitialized","nodeType":"MemberAccess","referencedDeclaration":29680,"src":"2365:41:77","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":30573,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2365:43:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":30574,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30476,"src":"2424:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30575,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2433:14:77","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"2424:23:77","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":30576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2448:30:77","memberName":"getAggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":30183,"src":"2424:54:77","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (uint256)"}},"id":30577,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2424:56:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":30578,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2483:1:77","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2424:60:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2365:119:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":30586,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":30581,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30476,"src":"2500:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30582,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2509:14:77","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"2500:23:77","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":30583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2524:20:77","memberName":"isPoolInRecoveryMode","nodeType":"MemberAccess","referencedDeclaration":29766,"src":"2500:44:77","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (bool)"}},"id":30584,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2500:46:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":30585,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2550:5:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"2500:55:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2365:190:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"2335:220:77"},{"body":{"id":30701,"nodeType":"Block","src":"2606:2041:77","statements":[{"assignments":[30601],"declarations":[{"constant":false,"id":30601,"mutability":"mutable","name":"tokenInfo","nameLocation":"2637:9:77","nodeType":"VariableDeclaration","scope":30701,"src":"2620:26:77","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_memory_ptr","typeString":"struct TokenInfo"},"typeName":{"id":30600,"nodeType":"UserDefinedTypeName","pathNode":{"id":30599,"name":"TokenInfo","nameLocations":["2620:9:77"],"nodeType":"IdentifierPath","referencedDeclaration":4704,"src":"2620:9:77"},"referencedDeclaration":4704,"src":"2620:9:77","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_storage_ptr","typeString":"struct TokenInfo"}},"visibility":"internal"}],"id":30608,"initialValue":{"baseExpression":{"id":30602,"name":"poolTokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30489,"src":"2649:13:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_struct$_TokenInfo_$4704_storage_$","typeString":"mapping(contract IERC20 => struct TokenInfo storage ref)"}},"id":30607,"indexExpression":{"baseExpression":{"expression":{"id":30603,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30476,"src":"2663:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30604,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2672:6:77","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":4712,"src":"2663:15:77","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":30606,"indexExpression":{"id":30605,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30590,"src":"2679:1:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2663:18:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2649:33:77","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_storage","typeString":"struct TokenInfo storage ref"}},"nodeType":"VariableDeclarationStatement","src":"2620:62:77"},{"assignments":[30610],"declarations":[{"constant":false,"id":30610,"mutability":"mutable","name":"packedBalance","nameLocation":"2704:13:77","nodeType":"VariableDeclaration","scope":30701,"src":"2696:21:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":30609,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2696:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":30614,"initialValue":{"baseExpression":{"id":30611,"name":"poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30480,"src":"2720:17:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"id":30613,"indexExpression":{"id":30612,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30590,"src":"2738:1:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2720:20:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2696:44:77"},{"expression":{"id":30621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":30615,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30476,"src":"2755:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30618,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2764:9:77","memberName":"tokenInfo","nodeType":"MemberAccess","referencedDeclaration":4716,"src":"2755:18:77","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4704_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo memory[] memory"}},"id":30619,"indexExpression":{"id":30617,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30590,"src":"2774:1:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2755:21:77","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_memory_ptr","typeString":"struct TokenInfo memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":30620,"name":"tokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30601,"src":"2779:9:77","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_memory_ptr","typeString":"struct TokenInfo memory"}},"src":"2755:33:77","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_memory_ptr","typeString":"struct TokenInfo memory"}},"id":30622,"nodeType":"ExpressionStatement","src":"2755:33:77"},{"expression":{"id":30631,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":30623,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30476,"src":"2802:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30626,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2811:10:77","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":4725,"src":"2802:19:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":30627,"indexExpression":{"id":30625,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30590,"src":"2822:1:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2802:22:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":30629,"name":"tokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30601,"src":"2840:9:77","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_memory_ptr","typeString":"struct TokenInfo memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_TokenInfo_$4704_memory_ptr","typeString":"struct TokenInfo memory"}],"id":30628,"name":"getTokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30916,"src":"2827:12:77","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_TokenInfo_$4704_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct TokenInfo memory) view returns (uint256)"}},"id":30630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2827:23:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2802:48:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30632,"nodeType":"ExpressionStatement","src":"2802:48:77"},{"expression":{"arguments":[{"id":30634,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30476,"src":"2888:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},{"id":30635,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30590,"src":"2898:1:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":30636,"name":"packedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30610,"src":"2901:13:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":30637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2915:13:77","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":6222,"src":"2901:27:77","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":30638,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2901:29:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30639,"name":"roundingDirection","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30496,"src":"2932:17:77","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"id":30633,"name":"updateRawAndLiveBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30978,"src":"2864:23:77","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_PoolData_$4729_memory_ptr_$_t_uint256_$_t_uint256_$_t_enum$_Rounding_$4732_$returns$__$","typeString":"function (struct PoolData memory,uint256,uint256,enum Rounding) pure"}},"id":30640,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2864:86:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30641,"nodeType":"ExpressionStatement","src":"2864:86:77"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":30644,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30642,"name":"poolSubjectToYieldFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30569,"src":"3063:22:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":30643,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3089:5:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"3063:31:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30647,"nodeType":"IfStatement","src":"3059:78:77","trueBody":{"id":30646,"nodeType":"Block","src":"3096:41:77","statements":[{"id":30645,"nodeType":"Continue","src":"3114:8:77"}]}},{"assignments":[30649],"declarations":[{"constant":false,"id":30649,"mutability":"mutable","name":"tokenSubjectToYieldFees","nameLocation":"3774:23:77","nodeType":"VariableDeclaration","scope":30701,"src":"3769:28:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":30648,"name":"bool","nodeType":"ElementaryTypeName","src":"3769:4:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":30658,"initialValue":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":30657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":30650,"name":"tokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30601,"src":"3800:9:77","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_memory_ptr","typeString":"struct TokenInfo memory"}},"id":30651,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3810:13:77","memberName":"paysYieldFees","nodeType":"MemberAccess","referencedDeclaration":4703,"src":"3800:23:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"},"id":30656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":30652,"name":"tokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30601,"src":"3827:9:77","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_memory_ptr","typeString":"struct TokenInfo memory"}},"id":30653,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3837:9:77","memberName":"tokenType","nodeType":"MemberAccess","referencedDeclaration":4698,"src":"3827:19:77","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":30654,"name":"TokenType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4681,"src":"3850:9:77","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_TokenType_$4681_$","typeString":"type(enum TokenType)"}},"id":30655,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3860:9:77","memberName":"WITH_RATE","nodeType":"MemberAccess","referencedDeclaration":4680,"src":"3850:19:77","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"src":"3827:42:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3800:69:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"3769:100:77"},{"condition":{"id":30659,"name":"tokenSubjectToYieldFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30649,"src":"3981:23:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30700,"nodeType":"IfStatement","src":"3977:660:77","trueBody":{"id":30699,"nodeType":"Block","src":"4006:631:77","statements":[{"assignments":[30661],"declarations":[{"constant":false,"id":30661,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"4032:27:77","nodeType":"VariableDeclaration","scope":30699,"src":"4024:35:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30660,"name":"uint256","nodeType":"ElementaryTypeName","src":"4024:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30666,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":30662,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30476,"src":"4062:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30663,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4071:14:77","memberName":"poolConfigBits","nodeType":"MemberAccess","referencedDeclaration":4708,"src":"4062:23:77","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":30664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4086:30:77","memberName":"getAggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":30183,"src":"4062:54:77","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits) pure returns (uint256)"}},"id":30665,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4062:56:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4024:94:77"},{"assignments":[30668],"declarations":[{"constant":false,"id":30668,"mutability":"mutable","name":"balanceRaw","nameLocation":"4144:10:77","nodeType":"VariableDeclaration","scope":30699,"src":"4136:18:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30667,"name":"uint256","nodeType":"ElementaryTypeName","src":"4136:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30673,"initialValue":{"baseExpression":{"expression":{"id":30669,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30476,"src":"4157:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30670,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4166:11:77","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":4719,"src":"4157:20:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":30672,"indexExpression":{"id":30671,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30590,"src":"4178:1:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4157:23:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4136:44:77"},{"assignments":[30675],"declarations":[{"constant":false,"id":30675,"mutability":"mutable","name":"aggregateYieldFeeAmountRaw","nameLocation":"4207:26:77","nodeType":"VariableDeclaration","scope":30699,"src":"4199:34:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30674,"name":"uint256","nodeType":"ElementaryTypeName","src":"4199:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30684,"initialValue":{"arguments":[{"id":30677,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30476,"src":"4278:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":30678,"name":"packedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30610,"src":"4308:13:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":30679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4322:17:77","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":6239,"src":"4308:31:77","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":30680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4308:33:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30681,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30590,"src":"4363:1:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30682,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30661,"src":"4386:27:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":30676,"name":"_computeYieldFeesDue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31030,"src":"4236:20:77","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_PoolData_$4729_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct PoolData memory,uint256,uint256,uint256) pure returns (uint256)"}},"id":30683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4236:195:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4199:232:77"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30685,"name":"aggregateYieldFeeAmountRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30675,"src":"4454:26:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":30686,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4483:1:77","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4454:30:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30698,"nodeType":"IfStatement","src":"4450:173:77","trueBody":{"id":30697,"nodeType":"Block","src":"4486:137:77","statements":[{"expression":{"arguments":[{"id":30689,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30476,"src":"4532:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},{"id":30690,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30590,"src":"4542:1:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30691,"name":"balanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30668,"src":"4545:10:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":30692,"name":"aggregateYieldFeeAmountRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30675,"src":"4558:26:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4545:39:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30694,"name":"roundingDirection","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30496,"src":"4586:17:77","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"id":30688,"name":"updateRawAndLiveBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30978,"src":"4508:23:77","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_PoolData_$4729_memory_ptr_$_t_uint256_$_t_uint256_$_t_enum$_Rounding_$4732_$returns$__$","typeString":"function (struct PoolData memory,uint256,uint256,enum Rounding) pure"}},"id":30695,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4508:96:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30696,"nodeType":"ExpressionStatement","src":"4508:96:77"}]}}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30593,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30590,"src":"2586:1:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":30594,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30500,"src":"2590:9:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2586:13:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30702,"initializationExpression":{"assignments":[30590],"declarations":[{"constant":false,"id":30590,"mutability":"mutable","name":"i","nameLocation":"2579:1:77","nodeType":"VariableDeclaration","scope":30702,"src":"2571:9:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30589,"name":"uint256","nodeType":"ElementaryTypeName","src":"2571:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30592,"initialValue":{"hexValue":"30","id":30591,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2583:1:77","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2571:13:77"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":30597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"2601:3:77","subExpression":{"id":30596,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30590,"src":"2603:1:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30598,"nodeType":"ExpressionStatement","src":"2601:3:77"},"nodeType":"ForStatement","src":"2566:2081:77"}]},"id":30704,"implemented":true,"kind":"function","modifiers":[],"name":"load","nameLocation":"1503:4:77","nodeType":"FunctionDefinition","parameters":{"id":30497,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30476,"mutability":"mutable","name":"poolData","nameLocation":"1533:8:77","nodeType":"VariableDeclaration","scope":30704,"src":"1517:24:77","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":30475,"nodeType":"UserDefinedTypeName","pathNode":{"id":30474,"name":"PoolData","nameLocations":["1517:8:77"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"1517:8:77"},"referencedDeclaration":4729,"src":"1517:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":30480,"mutability":"mutable","name":"poolTokenBalances","nameLocation":"1617:17:77","nodeType":"VariableDeclaration","scope":30704,"src":"1551:83:77","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"typeName":{"id":30479,"keyName":"tokenIndex","keyNameLocation":"1567:10:77","keyType":{"id":30477,"name":"uint256","nodeType":"ElementaryTypeName","src":"1559:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"1551:57:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"valueName":"packedTokenBalance","valueNameLocation":"1589:18:77","valueType":{"id":30478,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1581:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},"visibility":"internal"},{"constant":false,"id":30483,"mutability":"mutable","name":"poolConfigBits","nameLocation":"1659:14:77","nodeType":"VariableDeclaration","scope":30704,"src":"1644:29:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":30482,"nodeType":"UserDefinedTypeName","pathNode":{"id":30481,"name":"PoolConfigBits","nameLocations":["1644:14:77"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"1644:14:77"},"referencedDeclaration":4582,"src":"1644:14:77","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":30489,"mutability":"mutable","name":"poolTokenInfo","nameLocation":"1740:13:77","nodeType":"VariableDeclaration","scope":30704,"src":"1683:70:77","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_struct$_TokenInfo_$4704_storage_$","typeString":"mapping(contract IERC20 => struct TokenInfo)"},"typeName":{"id":30488,"keyName":"poolToken","keyNameLocation":"1698:9:77","keyType":{"id":30485,"nodeType":"UserDefinedTypeName","pathNode":{"id":30484,"name":"IERC20","nameLocations":["1691:6:77"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"1691:6:77"},"referencedDeclaration":40109,"src":"1691:6:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"1683:48:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_struct$_TokenInfo_$4704_storage_$","typeString":"mapping(contract IERC20 => struct TokenInfo)"},"valueName":"tokenInfo","valueNameLocation":"1721:9:77","valueType":{"id":30487,"nodeType":"UserDefinedTypeName","pathNode":{"id":30486,"name":"TokenInfo","nameLocations":["1711:9:77"],"nodeType":"IdentifierPath","referencedDeclaration":4704,"src":"1711:9:77"},"referencedDeclaration":4704,"src":"1711:9:77","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_storage_ptr","typeString":"struct TokenInfo"}}},"visibility":"internal"},{"constant":false,"id":30493,"mutability":"mutable","name":"tokens","nameLocation":"1780:6:77","nodeType":"VariableDeclaration","scope":30704,"src":"1763:23:77","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":30491,"nodeType":"UserDefinedTypeName","pathNode":{"id":30490,"name":"IERC20","nameLocations":["1763:6:77"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"1763:6:77"},"referencedDeclaration":40109,"src":"1763:6:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":30492,"nodeType":"ArrayTypeName","src":"1763:8:77","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":30496,"mutability":"mutable","name":"roundingDirection","nameLocation":"1805:17:77","nodeType":"VariableDeclaration","scope":30704,"src":"1796:26:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"},"typeName":{"id":30495,"nodeType":"UserDefinedTypeName","pathNode":{"id":30494,"name":"Rounding","nameLocations":["1796:8:77"],"nodeType":"IdentifierPath","referencedDeclaration":4732,"src":"1796:8:77"},"referencedDeclaration":4732,"src":"1796:8:77","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"visibility":"internal"}],"src":"1507:321:77"},"returnParameters":{"id":30498,"nodeType":"ParameterList","parameters":[],"src":"1843:0:77"},"scope":31031,"src":"1494:3159:77","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":30806,"nodeType":"Block","src":"4933:1225:77","statements":[{"assignments":[30720],"declarations":[{"constant":false,"id":30720,"mutability":"mutable","name":"numTokens","nameLocation":"4951:9:77","nodeType":"VariableDeclaration","scope":30806,"src":"4943:17:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30719,"name":"uint256","nodeType":"ElementaryTypeName","src":"4943:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30724,"initialValue":{"expression":{"expression":{"id":30721,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30707,"src":"4963:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30722,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4972:11:77","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":4719,"src":"4963:20:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":30723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4984:6:77","memberName":"length","nodeType":"MemberAccess","src":"4963:27:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4943:47:77"},{"body":{"id":30804,"nodeType":"Block","src":"5041:1111:77","statements":[{"assignments":[30737],"declarations":[{"constant":false,"id":30737,"mutability":"mutable","name":"token","nameLocation":"5062:5:77","nodeType":"VariableDeclaration","scope":30804,"src":"5055:12:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":30736,"nodeType":"UserDefinedTypeName","pathNode":{"id":30735,"name":"IERC20","nameLocations":["5055:6:77"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"5055:6:77"},"referencedDeclaration":40109,"src":"5055:6:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"id":30742,"initialValue":{"baseExpression":{"expression":{"id":30738,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30707,"src":"5070:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30739,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5079:6:77","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":4712,"src":"5070:15:77","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":30741,"indexExpression":{"id":30740,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30726,"src":"5086:1:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5070:18:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"5055:33:77"},{"assignments":[30744],"declarations":[{"constant":false,"id":30744,"mutability":"mutable","name":"packedBalances","nameLocation":"5110:14:77","nodeType":"VariableDeclaration","scope":30804,"src":"5102:22:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":30743,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5102:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":30748,"initialValue":{"baseExpression":{"id":30745,"name":"poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30711,"src":"5127:17:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"id":30747,"indexExpression":{"id":30746,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30726,"src":"5145:1:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5127:20:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5102:45:77"},{"assignments":[30750],"declarations":[{"constant":false,"id":30750,"mutability":"mutable","name":"storedBalanceRaw","nameLocation":"5169:16:77","nodeType":"VariableDeclaration","scope":30804,"src":"5161:24:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30749,"name":"uint256","nodeType":"ElementaryTypeName","src":"5161:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30754,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":30751,"name":"packedBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30744,"src":"5188:14:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":30752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5203:13:77","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":6222,"src":"5188:28:77","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":30753,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5188:30:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5161:57:77"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30755,"name":"storedBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30750,"src":"5404:16:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"baseExpression":{"expression":{"id":30756,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30707,"src":"5423:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30757,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5432:11:77","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":4719,"src":"5423:20:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":30759,"indexExpression":{"id":30758,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30726,"src":"5444:1:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5423:23:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5404:42:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30787,"nodeType":"IfStatement","src":"5400:565:77","trueBody":{"id":30786,"nodeType":"Block","src":"5448:517:77","statements":[{"assignments":[30762],"declarations":[{"constant":false,"id":30762,"mutability":"mutable","name":"packedProtocolFeeAmounts","nameLocation":"5653:24:77","nodeType":"VariableDeclaration","scope":30786,"src":"5645:32:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":30761,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5645:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":30766,"initialValue":{"baseExpression":{"id":30763,"name":"poolAggregateProtocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30716,"src":"5680:31:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$","typeString":"mapping(contract IERC20 => bytes32)"}},"id":30765,"indexExpression":{"id":30764,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30737,"src":"5712:5:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5680:38:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5645:73:77"},{"expression":{"id":30784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":30767,"name":"poolAggregateProtocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30716,"src":"5736:31:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$","typeString":"mapping(contract IERC20 => bytes32)"}},"id":30769,"indexExpression":{"id":30768,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30737,"src":"5768:5:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5736:38:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":30772,"name":"packedProtocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30762,"src":"5841:24:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":30773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5866:17:77","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":6239,"src":"5841:42:77","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":30774,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5841:44:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30775,"name":"storedBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30750,"src":"5889:16:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"baseExpression":{"expression":{"id":30776,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30707,"src":"5908:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30777,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5917:11:77","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":4719,"src":"5908:20:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":30779,"indexExpression":{"id":30778,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30726,"src":"5929:1:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5908:23:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5889:42:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":30781,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5888:44:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5841:91:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":30770,"name":"packedProtocolFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30762,"src":"5777:24:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":30771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5802:17:77","memberName":"setBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":6275,"src":"5777:42:77","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":30783,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5777:173:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"5736:214:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":30785,"nodeType":"ExpressionStatement","src":"5736:214:77"}]}},{"expression":{"id":30802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":30788,"name":"poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30711,"src":"5979:17:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"id":30790,"indexExpression":{"id":30789,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30726,"src":"5997:1:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5979:20:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"expression":{"id":30793,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30707,"src":"6054:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30794,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6063:11:77","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":4719,"src":"6054:20:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":30796,"indexExpression":{"id":30795,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30726,"src":"6075:1:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6054:23:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":30797,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30707,"src":"6095:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30798,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6104:20:77","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":4722,"src":"6095:29:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":30800,"indexExpression":{"id":30799,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30726,"src":"6125:1:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6095:32:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":30791,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6344,"src":"6002:18:77","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PackedTokenBalance_$6344_$","typeString":"type(library PackedTokenBalance)"}},"id":30792,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6021:15:77","memberName":"toPackedBalance","nodeType":"MemberAccess","referencedDeclaration":6303,"src":"6002:34:77","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":30801,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6002:139:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"5979:162:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":30803,"nodeType":"ExpressionStatement","src":"5979:162:77"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30729,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30726,"src":"5021:1:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":30730,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30720,"src":"5025:9:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5021:13:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30805,"initializationExpression":{"assignments":[30726],"declarations":[{"constant":false,"id":30726,"mutability":"mutable","name":"i","nameLocation":"5014:1:77","nodeType":"VariableDeclaration","scope":30805,"src":"5006:9:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30725,"name":"uint256","nodeType":"ElementaryTypeName","src":"5006:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30728,"initialValue":{"hexValue":"30","id":30727,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5018:1:77","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5006:13:77"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":30733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5036:3:77","subExpression":{"id":30732,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30726,"src":"5038:1:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30734,"nodeType":"ExpressionStatement","src":"5036:3:77"},"nodeType":"ForStatement","src":"5001:1151:77"}]},"id":30807,"implemented":true,"kind":"function","modifiers":[],"name":"syncPoolBalancesAndFees","nameLocation":"4668:23:77","nodeType":"FunctionDefinition","parameters":{"id":30717,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30707,"mutability":"mutable","name":"poolData","nameLocation":"4717:8:77","nodeType":"VariableDeclaration","scope":30807,"src":"4701:24:77","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":30706,"nodeType":"UserDefinedTypeName","pathNode":{"id":30705,"name":"PoolData","nameLocations":["4701:8:77"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"4701:8:77"},"referencedDeclaration":4729,"src":"4701:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":30711,"mutability":"mutable","name":"poolTokenBalances","nameLocation":"4801:17:77","nodeType":"VariableDeclaration","scope":30807,"src":"4735:83:77","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"typeName":{"id":30710,"keyName":"tokenIndex","keyNameLocation":"4751:10:77","keyType":{"id":30708,"name":"uint256","nodeType":"ElementaryTypeName","src":"4743:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"4735:57:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"valueName":"packedTokenBalance","valueNameLocation":"4773:18:77","valueType":{"id":30709,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4765:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},"visibility":"internal"},{"constant":false,"id":30716,"mutability":"mutable","name":"poolAggregateProtocolFeeAmounts","nameLocation":"4886:31:77","nodeType":"VariableDeclaration","scope":30807,"src":"4828:89:77","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$","typeString":"mapping(contract IERC20 => bytes32)"},"typeName":{"id":30715,"keyName":"token","keyNameLocation":"4843:5:77","keyType":{"id":30713,"nodeType":"UserDefinedTypeName","pathNode":{"id":30712,"name":"IERC20","nameLocations":["4836:6:77"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"4836:6:77"},"referencedDeclaration":40109,"src":"4836:6:77","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"Mapping","src":"4828:49:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$","typeString":"mapping(contract IERC20 => bytes32)"},"valueName":"packedFeeAmounts","valueNameLocation":"4860:16:77","valueType":{"id":30714,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4852:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},"visibility":"internal"}],"src":"4691:232:77"},"returnParameters":{"id":30718,"nodeType":"ParameterList","parameters":[],"src":"4933:0:77"},"scope":31031,"src":"4659:1499:77","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":30870,"nodeType":"Block","src":"6789:641:77","statements":[{"assignments":[30822],"declarations":[{"constant":false,"id":30822,"mutability":"mutable","name":"numTokens","nameLocation":"6807:9:77","nodeType":"VariableDeclaration","scope":30870,"src":"6799:17:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30821,"name":"uint256","nodeType":"ElementaryTypeName","src":"6799:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30826,"initialValue":{"expression":{"expression":{"id":30823,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30811,"src":"6819:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30824,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6828:6:77","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":4712,"src":"6819:15:77","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":30825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6835:6:77","memberName":"length","nodeType":"MemberAccess","src":"6819:22:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6799:42:77"},{"assignments":[30828],"declarations":[{"constant":false,"id":30828,"mutability":"mutable","name":"packedBalance","nameLocation":"7004:13:77","nodeType":"VariableDeclaration","scope":30870,"src":"6996:21:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":30827,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6996:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":30829,"nodeType":"VariableDeclarationStatement","src":"6996:21:77"},{"body":{"id":30868,"nodeType":"Block","src":"7068:356:77","statements":[{"expression":{"id":30851,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":30840,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30811,"src":"7082:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30843,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7091:10:77","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":4725,"src":"7082:19:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":30844,"indexExpression":{"id":30842,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30831,"src":"7102:1:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7082:22:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"expression":{"id":30846,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30811,"src":"7120:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30847,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7129:9:77","memberName":"tokenInfo","nodeType":"MemberAccess","referencedDeclaration":4716,"src":"7120:18:77","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4704_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo memory[] memory"}},"id":30849,"indexExpression":{"id":30848,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30831,"src":"7139:1:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7120:21:77","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_memory_ptr","typeString":"struct TokenInfo memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_TokenInfo_$4704_memory_ptr","typeString":"struct TokenInfo memory"}],"id":30845,"name":"getTokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30916,"src":"7107:12:77","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_TokenInfo_$4704_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct TokenInfo memory) view returns (uint256)"}},"id":30850,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7107:35:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7082:60:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30852,"nodeType":"ExpressionStatement","src":"7082:60:77"},{"expression":{"id":30857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":30853,"name":"packedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30828,"src":"7157:13:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":30854,"name":"poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30815,"src":"7173:17:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"id":30856,"indexExpression":{"id":30855,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30831,"src":"7191:1:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7173:20:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"7157:36:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":30858,"nodeType":"ExpressionStatement","src":"7157:36:77"},{"expression":{"arguments":[{"id":30860,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30811,"src":"7351:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},{"id":30861,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30831,"src":"7361:1:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":30862,"name":"packedBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30828,"src":"7364:13:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":30863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7378:13:77","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":6222,"src":"7364:27:77","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":30864,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7364:29:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":30865,"name":"roundingDirection","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30818,"src":"7395:17:77","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"id":30859,"name":"updateRawAndLiveBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30978,"src":"7327:23:77","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_PoolData_$4729_memory_ptr_$_t_uint256_$_t_uint256_$_t_enum$_Rounding_$4732_$returns$__$","typeString":"function (struct PoolData memory,uint256,uint256,enum Rounding) pure"}},"id":30866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7327:86:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":30867,"nodeType":"ExpressionStatement","src":"7327:86:77"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":30836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30834,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30831,"src":"7048:1:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":30835,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30822,"src":"7052:9:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7048:13:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":30869,"initializationExpression":{"assignments":[30831],"declarations":[{"constant":false,"id":30831,"mutability":"mutable","name":"i","nameLocation":"7041:1:77","nodeType":"VariableDeclaration","scope":30869,"src":"7033:9:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30830,"name":"uint256","nodeType":"ElementaryTypeName","src":"7033:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30833,"initialValue":{"hexValue":"30","id":30832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7045:1:77","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"7033:13:77"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":30838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"7063:3:77","subExpression":{"id":30837,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30831,"src":"7065:1:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30839,"nodeType":"ExpressionStatement","src":"7063:3:77"},"nodeType":"ForStatement","src":"7028:396:77"}]},"documentation":{"id":30808,"nodeType":"StructuredDocumentation","src":"6164:405:77","text":" @dev This is typically called after a reentrant callback (e.g., a \"before\" liquidity operation callback),\n to refresh the poolData struct with any balances (or rates) that might have changed.\n Preconditions: tokenConfig, balancesRaw, and decimalScalingFactors must be current in `poolData`.\n Side effects: mutates tokenRates, balancesLiveScaled18 in `poolData`."},"id":30871,"implemented":true,"kind":"function","modifiers":[],"name":"reloadBalancesAndRates","nameLocation":"6583:22:77","nodeType":"FunctionDefinition","parameters":{"id":30819,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30811,"mutability":"mutable","name":"poolData","nameLocation":"6631:8:77","nodeType":"VariableDeclaration","scope":30871,"src":"6615:24:77","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":30810,"nodeType":"UserDefinedTypeName","pathNode":{"id":30809,"name":"PoolData","nameLocations":["6615:8:77"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"6615:8:77"},"referencedDeclaration":4729,"src":"6615:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":30815,"mutability":"mutable","name":"poolTokenBalances","nameLocation":"6715:17:77","nodeType":"VariableDeclaration","scope":30871,"src":"6649:83:77","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"typeName":{"id":30814,"keyName":"tokenIndex","keyNameLocation":"6665:10:77","keyType":{"id":30812,"name":"uint256","nodeType":"ElementaryTypeName","src":"6657:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"6649:57:77","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"valueName":"packedTokenBalance","valueNameLocation":"6687:18:77","valueType":{"id":30813,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6679:7:77","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},"visibility":"internal"},{"constant":false,"id":30818,"mutability":"mutable","name":"roundingDirection","nameLocation":"6751:17:77","nodeType":"VariableDeclaration","scope":30871,"src":"6742:26:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"},"typeName":{"id":30817,"nodeType":"UserDefinedTypeName","pathNode":{"id":30816,"name":"Rounding","nameLocations":["6742:8:77"],"nodeType":"IdentifierPath","referencedDeclaration":4732,"src":"6742:8:77"},"referencedDeclaration":4732,"src":"6742:8:77","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"visibility":"internal"}],"src":"6605:169:77"},"returnParameters":{"id":30820,"nodeType":"ParameterList","parameters":[],"src":"6789:0:77"},"scope":31031,"src":"6574:856:77","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":30915,"nodeType":"Block","src":"7523:337:77","statements":[{"assignments":[30881],"declarations":[{"constant":false,"id":30881,"mutability":"mutable","name":"tokenType","nameLocation":"7543:9:77","nodeType":"VariableDeclaration","scope":30915,"src":"7533:19:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"},"typeName":{"id":30880,"nodeType":"UserDefinedTypeName","pathNode":{"id":30879,"name":"TokenType","nameLocations":["7533:9:77"],"nodeType":"IdentifierPath","referencedDeclaration":4681,"src":"7533:9:77"},"referencedDeclaration":4681,"src":"7533:9:77","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"visibility":"internal"}],"id":30884,"initialValue":{"expression":{"id":30882,"name":"tokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30874,"src":"7555:9:77","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_memory_ptr","typeString":"struct TokenInfo memory"}},"id":30883,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7565:9:77","memberName":"tokenType","nodeType":"MemberAccess","referencedDeclaration":4698,"src":"7555:19:77","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"nodeType":"VariableDeclarationStatement","src":"7533:41:77"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"},"id":30888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30885,"name":"tokenType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30881,"src":"7589:9:77","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":30886,"name":"TokenType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4681,"src":"7602:9:77","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_TokenType_$4681_$","typeString":"type(enum TokenType)"}},"id":30887,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7612:8:77","memberName":"STANDARD","nodeType":"MemberAccess","referencedDeclaration":4679,"src":"7602:18:77","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"src":"7589:31:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"},"id":30898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30895,"name":"tokenType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30881,"src":"7678:9:77","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":30896,"name":"TokenType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4681,"src":"7691:9:77","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_TokenType_$4681_$","typeString":"type(enum TokenType)"}},"id":30897,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7701:9:77","memberName":"WITH_RATE","nodeType":"MemberAccess","referencedDeclaration":4680,"src":"7691:19:77","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"src":"7678:32:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":30912,"nodeType":"Block","src":"7782:72:77","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":30907,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"7803:12:77","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3768_$","typeString":"type(contract IVaultErrors)"}},"id":30909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7816:25:77","memberName":"InvalidTokenConfiguration","nodeType":"MemberAccess","referencedDeclaration":3458,"src":"7803:38:77","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":30910,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7803:40:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":30911,"nodeType":"RevertStatement","src":"7796:47:77"}]},"id":30913,"nodeType":"IfStatement","src":"7674:180:77","trueBody":{"id":30906,"nodeType":"Block","src":"7712:64:77","statements":[{"expression":{"id":30904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":30899,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30877,"src":"7726:4:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"expression":{"id":30900,"name":"tokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30874,"src":"7733:9:77","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_memory_ptr","typeString":"struct TokenInfo memory"}},"id":30901,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7743:12:77","memberName":"rateProvider","nodeType":"MemberAccess","referencedDeclaration":4701,"src":"7733:22:77","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"}},"id":30902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7756:7:77","memberName":"getRate","nodeType":"MemberAccess","referencedDeclaration":262,"src":"7733:30:77","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint256_$","typeString":"function () view external returns (uint256)"}},"id":30903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7733:32:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7726:39:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30905,"nodeType":"ExpressionStatement","src":"7726:39:77"}]}},"id":30914,"nodeType":"IfStatement","src":"7585:269:77","trueBody":{"id":30894,"nodeType":"Block","src":"7622:46:77","statements":[{"expression":{"id":30892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":30889,"name":"rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30877,"src":"7636:4:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":30890,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"7643:10:77","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$8208_$","typeString":"type(library FixedPoint)"}},"id":30891,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7654:3:77","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":7920,"src":"7643:14:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7636:21:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30893,"nodeType":"ExpressionStatement","src":"7636:21:77"}]}}]},"id":30916,"implemented":true,"kind":"function","modifiers":[],"name":"getTokenRate","nameLocation":"7445:12:77","nodeType":"FunctionDefinition","parameters":{"id":30875,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30874,"mutability":"mutable","name":"tokenInfo","nameLocation":"7475:9:77","nodeType":"VariableDeclaration","scope":30916,"src":"7458:26:77","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_memory_ptr","typeString":"struct TokenInfo"},"typeName":{"id":30873,"nodeType":"UserDefinedTypeName","pathNode":{"id":30872,"name":"TokenInfo","nameLocations":["7458:9:77"],"nodeType":"IdentifierPath","referencedDeclaration":4704,"src":"7458:9:77"},"referencedDeclaration":4704,"src":"7458:9:77","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_storage_ptr","typeString":"struct TokenInfo"}},"visibility":"internal"}],"src":"7457:28:77"},"returnParameters":{"id":30878,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30877,"mutability":"mutable","name":"rate","nameLocation":"7517:4:77","nodeType":"VariableDeclaration","scope":30916,"src":"7509:12:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30876,"name":"uint256","nodeType":"ElementaryTypeName","src":"7509:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7508:14:77"},"scope":31031,"src":"7436:424:77","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":30977,"nodeType":"Block","src":"8048:522:77","statements":[{"expression":{"id":30935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":30929,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30919,"src":"8058:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30932,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8067:11:77","memberName":"balancesRaw","nodeType":"MemberAccess","referencedDeclaration":4719,"src":"8058:20:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":30933,"indexExpression":{"id":30931,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30921,"src":"8079:10:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8058:32:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":30934,"name":"newRawBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30923,"src":"8093:13:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8058:48:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30936,"nodeType":"ExpressionStatement","src":"8058:48:77"},{"assignments":[30948],"declarations":[{"constant":false,"id":30948,"mutability":"mutable","name":"_upOrDown","nameLocation":"8185:9:77","nodeType":"VariableDeclaration","scope":30977,"src":"8117:77:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"},"typeName":{"id":30947,"nodeType":"FunctionTypeName","parameterTypes":{"id":30943,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30938,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30947,"src":"8126:7:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30937,"name":"uint256","nodeType":"ElementaryTypeName","src":"8126:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30940,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30947,"src":"8135:7:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30939,"name":"uint256","nodeType":"ElementaryTypeName","src":"8135:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30942,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30947,"src":"8144:7:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30941,"name":"uint256","nodeType":"ElementaryTypeName","src":"8144:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8125:27:77"},"returnParameterTypes":{"id":30946,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30945,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":30947,"src":"8176:7:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30944,"name":"uint256","nodeType":"ElementaryTypeName","src":"8176:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8175:9:77"},"src":"8117:77:77","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"},"visibility":"internal"},"visibility":"internal"}],"id":30958,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"},"id":30952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30949,"name":"roundingDirection","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30926,"src":"8197:17:77","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":30950,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"8230:8:77","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":30951,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8239:8:77","memberName":"ROUND_UP","nodeType":"MemberAccess","referencedDeclaration":4730,"src":"8230:17:77","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"src":"8197:50:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":30955,"name":"ScalingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6848,"src":"8318:14:77","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ScalingHelpers_$6848_$","typeString":"type(library ScalingHelpers)"}},"id":30956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8333:28:77","memberName":"toScaled18ApplyRateRoundDown","nodeType":"MemberAccess","referencedDeclaration":6467,"src":"8318:43:77","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":30957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"8197:164:77","trueExpression":{"expression":{"id":30953,"name":"ScalingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6848,"src":"8262:14:77","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ScalingHelpers_$6848_$","typeString":"type(library ScalingHelpers)"}},"id":30954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8277:26:77","memberName":"toScaled18ApplyRateRoundUp","nodeType":"MemberAccess","referencedDeclaration":6488,"src":"8262:41:77","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"nodeType":"VariableDeclarationStatement","src":"8117:244:77"},{"expression":{"id":30975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":30959,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30919,"src":"8372:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30962,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8381:20:77","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":4722,"src":"8372:29:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":30963,"indexExpression":{"id":30961,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30921,"src":"8402:10:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8372:41:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":30965,"name":"newRawBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30923,"src":"8439:13:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":30966,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30919,"src":"8466:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30967,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8475:21:77","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":4728,"src":"8466:30:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":30969,"indexExpression":{"id":30968,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30921,"src":"8497:10:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8466:42:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":30970,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30919,"src":"8522:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30971,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8531:10:77","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":4725,"src":"8522:19:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":30973,"indexExpression":{"id":30972,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30921,"src":"8542:10:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8522:31:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":30964,"name":"_upOrDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30948,"src":"8416:9:77","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":30974,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8416:147:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8372:191:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":30976,"nodeType":"ExpressionStatement","src":"8372:191:77"}]},"id":30978,"implemented":true,"kind":"function","modifiers":[],"name":"updateRawAndLiveBalance","nameLocation":"7875:23:77","nodeType":"FunctionDefinition","parameters":{"id":30927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30919,"mutability":"mutable","name":"poolData","nameLocation":"7924:8:77","nodeType":"VariableDeclaration","scope":30978,"src":"7908:24:77","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":30918,"nodeType":"UserDefinedTypeName","pathNode":{"id":30917,"name":"PoolData","nameLocations":["7908:8:77"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"7908:8:77"},"referencedDeclaration":4729,"src":"7908:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":30921,"mutability":"mutable","name":"tokenIndex","nameLocation":"7950:10:77","nodeType":"VariableDeclaration","scope":30978,"src":"7942:18:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30920,"name":"uint256","nodeType":"ElementaryTypeName","src":"7942:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30923,"mutability":"mutable","name":"newRawBalance","nameLocation":"7978:13:77","nodeType":"VariableDeclaration","scope":30978,"src":"7970:21:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30922,"name":"uint256","nodeType":"ElementaryTypeName","src":"7970:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30926,"mutability":"mutable","name":"roundingDirection","nameLocation":"8010:17:77","nodeType":"VariableDeclaration","scope":30978,"src":"8001:26:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"},"typeName":{"id":30925,"nodeType":"UserDefinedTypeName","pathNode":{"id":30924,"name":"Rounding","nameLocations":["8001:8:77"],"nodeType":"IdentifierPath","referencedDeclaration":4732,"src":"8001:8:77"},"referencedDeclaration":4732,"src":"8001:8:77","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"visibility":"internal"}],"src":"7898:135:77"},"returnParameters":{"id":30928,"nodeType":"ParameterList","parameters":[],"src":"8048:0:77"},"scope":31031,"src":"7866:704:77","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":31029,"nodeType":"Block","src":"8876:1388:77","statements":[{"assignments":[30993],"declarations":[{"constant":false,"id":30993,"mutability":"mutable","name":"currentLiveBalance","nameLocation":"8894:18:77","nodeType":"VariableDeclaration","scope":31029,"src":"8886:26:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30992,"name":"uint256","nodeType":"ElementaryTypeName","src":"8886:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":30998,"initialValue":{"baseExpression":{"expression":{"id":30994,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30981,"src":"8915:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":30995,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8924:20:77","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":4722,"src":"8915:29:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":30997,"indexExpression":{"id":30996,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30985,"src":"8945:10:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8915:41:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8886:70:77"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":30999,"name":"currentLiveBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30993,"src":"9458:18:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":31000,"name":"lastLiveBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30983,"src":"9479:15:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9458:36:77","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31028,"nodeType":"IfStatement","src":"9454:804:77","trueBody":{"id":31027,"nodeType":"Block","src":"9496:762:77","statements":[{"id":31026,"nodeType":"UncheckedBlock","src":"9510:738:77","statements":[{"assignments":[31003],"declarations":[{"constant":false,"id":31003,"mutability":"mutable","name":"aggregateYieldFeeAmountScaled18","nameLocation":"9635:31:77","nodeType":"VariableDeclaration","scope":31026,"src":"9627:39:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31002,"name":"uint256","nodeType":"ElementaryTypeName","src":"9627:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":31011,"initialValue":{"arguments":[{"id":31009,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30987,"src":"9735:27:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":31004,"name":"currentLiveBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30993,"src":"9670:18:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":31005,"name":"lastLiveBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30983,"src":"9691:15:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9670:36:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":31007,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9669:38:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9708:5:77","memberName":"mulUp","nodeType":"MemberAccess","referencedDeclaration":7970,"src":"9669:44:77","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":31010,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9669:111:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9627:153:77"},{"expression":{"id":31024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":31012,"name":"aggregateYieldFeeAmountRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30990,"src":"10015:26:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"expression":{"id":31015,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30981,"src":"10120:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":31016,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10129:21:77","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":4728,"src":"10120:30:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":31018,"indexExpression":{"id":31017,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30985,"src":"10151:10:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10120:42:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"expression":{"id":31019,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30981,"src":"10184:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":31020,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10193:10:77","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":4725,"src":"10184:19:77","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":31022,"indexExpression":{"id":31021,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30985,"src":"10204:10:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10184:31:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":31013,"name":"aggregateYieldFeeAmountScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31003,"src":"10044:31:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31014,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10076:22:77","memberName":"toRawUndoRateRoundDown","nodeType":"MemberAccess","referencedDeclaration":6509,"src":"10044:54:77","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":31023,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10044:189:77","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10015:218:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31025,"nodeType":"ExpressionStatement","src":"10015:218:77"}]}]}}]},"id":31030,"implemented":true,"kind":"function","modifiers":[],"name":"_computeYieldFeesDue","nameLocation":"8650:20:77","nodeType":"FunctionDefinition","parameters":{"id":30988,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30981,"mutability":"mutable","name":"poolData","nameLocation":"8696:8:77","nodeType":"VariableDeclaration","scope":31030,"src":"8680:24:77","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":30980,"nodeType":"UserDefinedTypeName","pathNode":{"id":30979,"name":"PoolData","nameLocations":["8680:8:77"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"8680:8:77"},"referencedDeclaration":4729,"src":"8680:8:77","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":30983,"mutability":"mutable","name":"lastLiveBalance","nameLocation":"8722:15:77","nodeType":"VariableDeclaration","scope":31030,"src":"8714:23:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30982,"name":"uint256","nodeType":"ElementaryTypeName","src":"8714:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30985,"mutability":"mutable","name":"tokenIndex","nameLocation":"8755:10:77","nodeType":"VariableDeclaration","scope":31030,"src":"8747:18:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30984,"name":"uint256","nodeType":"ElementaryTypeName","src":"8747:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":30987,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"8783:27:77","nodeType":"VariableDeclaration","scope":31030,"src":"8775:35:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30986,"name":"uint256","nodeType":"ElementaryTypeName","src":"8775:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8670:146:77"},"returnParameters":{"id":30991,"nodeType":"ParameterList","parameters":[{"constant":false,"id":30990,"mutability":"mutable","name":"aggregateYieldFeeAmountRaw","nameLocation":"8848:26:77","nodeType":"VariableDeclaration","scope":31030,"src":"8840:34:77","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":30989,"name":"uint256","nodeType":"ElementaryTypeName","src":"8840:7:77","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8839:36:77"},"scope":31031,"src":"8641:1623:77","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":31032,"src":"1321:8945:77","usedErrors":[],"usedEvents":[]}],"src":"46:10221:77"},"id":77},"@balancer-labs/v3-vault/contracts/lib/RouterWethLib.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/RouterWethLib.sol","exportedSymbols":{"Address":[40714],"IERC20":[40109],"IVault":[3111],"IWETH":[291],"RouterWethLib":[31147],"SafeERC20":[40461],"StorageSlotExtension":[10285],"TransientStorageHelpers":[7442]},"id":31148,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":31033,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:78"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","id":31035,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31148,"sourceUnit":40462,"src":"72:84:78","symbolAliases":[{"foreign":{"id":31034,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40461,"src":"81:9:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":31037,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31148,"sourceUnit":40110,"src":"157:72:78","symbolAliases":[{"foreign":{"id":31036,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"166:6:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"@openzeppelin/contracts/utils/Address.sol","id":31039,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31148,"sourceUnit":40715,"src":"230:68:78","symbolAliases":[{"foreign":{"id":31038,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40714,"src":"239:7:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol","id":31041,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31148,"sourceUnit":292,"src":"300:93:78","symbolAliases":[{"foreign":{"id":31040,"name":"IWETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":291,"src":"309:5:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":31043,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31148,"sourceUnit":3112,"src":"394:81:78","symbolAliases":[{"foreign":{"id":31042,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"403:6:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","id":31045,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31148,"sourceUnit":10286,"src":"477:120:78","symbolAliases":[{"foreign":{"id":31044,"name":"StorageSlotExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10285,"src":"486:20:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","id":31047,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31148,"sourceUnit":7443,"src":"598:125:78","symbolAliases":[{"foreign":{"id":31046,"name":"TransientStorageHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7442,"src":"611:23:78","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"RouterWethLib","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":31147,"linearizedBaseContracts":[31147],"name":"RouterWethLib","nameLocation":"733:13:78","nodeType":"ContractDefinition","nodes":[{"global":false,"id":31050,"libraryName":{"id":31048,"name":"Address","nameLocations":["759:7:78"],"nodeType":"IdentifierPath","referencedDeclaration":40714,"src":"759:7:78"},"nodeType":"UsingForDirective","src":"753:34:78","typeName":{"id":31049,"name":"address","nodeType":"ElementaryTypeName","src":"771:15:78","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}},{"global":false,"id":31052,"libraryName":{"id":31051,"name":"StorageSlotExtension","nameLocations":["798:20:78"],"nodeType":"IdentifierPath","referencedDeclaration":10285,"src":"798:20:78"},"nodeType":"UsingForDirective","src":"792:33:78"},{"global":false,"id":31056,"libraryName":{"id":31053,"name":"SafeERC20","nameLocations":["836:9:78"],"nodeType":"IdentifierPath","referencedDeclaration":40461,"src":"836:9:78"},"nodeType":"UsingForDirective","src":"830:26:78","typeName":{"id":31055,"nodeType":"UserDefinedTypeName","pathNode":{"id":31054,"name":"IWETH","nameLocations":["850:5:78"],"nodeType":"IdentifierPath","referencedDeclaration":291,"src":"850:5:78"},"referencedDeclaration":291,"src":"850:5:78","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}}},{"documentation":{"id":31057,"nodeType":"StructuredDocumentation","src":"862:78:78","text":"@notice The amount of ETH paid is insufficient to complete this operation."},"errorSelector":"a01a9df6","id":31059,"name":"InsufficientEth","nameLocation":"951:15:78","nodeType":"ErrorDefinition","parameters":{"id":31058,"nodeType":"ParameterList","parameters":[],"src":"966:2:78"},"src":"945:24:78"},{"body":{"id":31106,"nodeType":"Block","src":"1060:363:78","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":31072,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1082:4:78","typeDescriptions":{"typeIdentifier":"t_contract$_RouterWethLib_$31147","typeString":"library RouterWethLib"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_RouterWethLib_$31147","typeString":"library RouterWethLib"}],"id":31071,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1074:7:78","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31070,"name":"address","nodeType":"ElementaryTypeName","src":"1074:7:78","typeDescriptions":{}}},"id":31073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1074:13:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":31074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1088:7:78","memberName":"balance","nodeType":"MemberAccess","src":"1074:21:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":31075,"name":"amountToSettle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31067,"src":"1098:14:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1074:38:78","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31081,"nodeType":"IfStatement","src":"1070:93:78","trueBody":{"id":31080,"nodeType":"Block","src":"1114:49:78","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":31077,"name":"InsufficientEth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31059,"src":"1135:15:78","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":31078,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1135:17:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":31079,"nodeType":"RevertStatement","src":"1128:24:78"}]}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"argumentTypes":[],"expression":{"id":31082,"name":"weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31062,"src":"1207:4:78","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},"id":31084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1212:7:78","memberName":"deposit","nodeType":"MemberAccess","referencedDeclaration":284,"src":"1207:12:78","typeDescriptions":{"typeIdentifier":"t_function_external_payable$__$returns$__$","typeString":"function () payable external"}},"id":31086,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":31085,"name":"amountToSettle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31067,"src":"1228:14:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"1207:37:78","typeDescriptions":{"typeIdentifier":"t_function_external_payable$__$returns$__$value","typeString":"function () payable external"}},"id":31087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1207:39:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31088,"nodeType":"ExpressionStatement","src":"1207:39:78"},{"expression":{"arguments":[{"arguments":[{"id":31094,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31065,"src":"1313:5:78","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}],"id":31093,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1305:7:78","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31092,"name":"address","nodeType":"ElementaryTypeName","src":"1305:7:78","typeDescriptions":{}}},"id":31095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1305:14:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31096,"name":"amountToSettle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31067,"src":"1321:14:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":31089,"name":"weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31062,"src":"1287:4:78","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},"id":31091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1292:12:78","memberName":"safeTransfer","nodeType":"MemberAccess","referencedDeclaration":40221,"src":"1287:17:78","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_IERC20_$40109_$","typeString":"function (contract IERC20,address,uint256)"}},"id":31097,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1287:49:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31098,"nodeType":"ExpressionStatement","src":"1287:49:78"},{"expression":{"arguments":[{"id":31102,"name":"weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31062,"src":"1395:4:78","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},{"id":31103,"name":"amountToSettle","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31067,"src":"1401:14:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":31099,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31065,"src":"1382:5:78","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":31101,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1388:6:78","memberName":"settle","nodeType":"MemberAccess","referencedDeclaration":4451,"src":"1382:12:78","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$_t_uint256_$","typeString":"function (contract IERC20,uint256) external returns (uint256)"}},"id":31104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1382:34:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31105,"nodeType":"ExpressionStatement","src":"1382:34:78"}]},"id":31107,"implemented":true,"kind":"function","modifiers":[],"name":"wrapEthAndSettle","nameLocation":"984:16:78","nodeType":"FunctionDefinition","parameters":{"id":31068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31062,"mutability":"mutable","name":"weth","nameLocation":"1007:4:78","nodeType":"VariableDeclaration","scope":31107,"src":"1001:10:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"},"typeName":{"id":31061,"nodeType":"UserDefinedTypeName","pathNode":{"id":31060,"name":"IWETH","nameLocations":["1001:5:78"],"nodeType":"IdentifierPath","referencedDeclaration":291,"src":"1001:5:78"},"referencedDeclaration":291,"src":"1001:5:78","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},"visibility":"internal"},{"constant":false,"id":31065,"mutability":"mutable","name":"vault","nameLocation":"1020:5:78","nodeType":"VariableDeclaration","scope":31107,"src":"1013:12:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":31064,"nodeType":"UserDefinedTypeName","pathNode":{"id":31063,"name":"IVault","nameLocations":["1013:6:78"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"1013:6:78"},"referencedDeclaration":3111,"src":"1013:6:78","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":31067,"mutability":"mutable","name":"amountToSettle","nameLocation":"1035:14:78","nodeType":"VariableDeclaration","scope":31107,"src":"1027:22:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31066,"name":"uint256","nodeType":"ElementaryTypeName","src":"1027:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1000:50:78"},"returnParameters":{"id":31069,"nodeType":"ParameterList","parameters":[],"src":"1060:0:78"},"scope":31147,"src":"975:448:78","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":31145,"nodeType":"Block","src":"1541:253:78","statements":[{"expression":{"arguments":[{"id":31123,"name":"weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31110,"src":"1603:4:78","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},{"arguments":[{"id":31126,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1617:4:78","typeDescriptions":{"typeIdentifier":"t_contract$_RouterWethLib_$31147","typeString":"library RouterWethLib"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_RouterWethLib_$31147","typeString":"library RouterWethLib"}],"id":31125,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1609:7:78","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31124,"name":"address","nodeType":"ElementaryTypeName","src":"1609:7:78","typeDescriptions":{}}},"id":31127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1609:13:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31128,"name":"amountToSend","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31117,"src":"1624:12:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":31120,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31113,"src":"1590:5:78","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":31122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1596:6:78","memberName":"sendTo","nodeType":"MemberAccess","referencedDeclaration":4462,"src":"1590:12:78","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$40109_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":31129,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1590:47:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31130,"nodeType":"ExpressionStatement","src":"1590:47:78"},{"expression":{"arguments":[{"id":31134,"name":"amountToSend","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31117,"src":"1694:12:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":31131,"name":"weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31110,"src":"1680:4:78","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},"id":31133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1685:8:78","memberName":"withdraw","nodeType":"MemberAccess","referencedDeclaration":290,"src":"1680:13:78","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256) external"}},"id":31135,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1680:27:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31136,"nodeType":"ExpressionStatement","src":"1680:27:78"},{"expression":{"arguments":[{"id":31142,"name":"amountToSend","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31117,"src":"1774:12:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":31139,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31115,"src":"1756:6:78","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31138,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1748:8:78","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":31137,"name":"address","nodeType":"ElementaryTypeName","src":"1748:8:78","stateMutability":"payable","typeDescriptions":{}}},"id":31140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1748:15:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":31141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1764:9:78","memberName":"sendValue","nodeType":"MemberAccess","referencedDeclaration":40518,"src":"1748:25:78","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_payable_$_t_uint256_$returns$__$attached_to$_t_address_payable_$","typeString":"function (address payable,uint256)"}},"id":31143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1748:39:78","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31144,"nodeType":"ExpressionStatement","src":"1748:39:78"}]},"id":31146,"implemented":true,"kind":"function","modifiers":[],"name":"unwrapWethAndTransferToSender","nameLocation":"1438:29:78","nodeType":"FunctionDefinition","parameters":{"id":31118,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31110,"mutability":"mutable","name":"weth","nameLocation":"1474:4:78","nodeType":"VariableDeclaration","scope":31146,"src":"1468:10:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"},"typeName":{"id":31109,"nodeType":"UserDefinedTypeName","pathNode":{"id":31108,"name":"IWETH","nameLocations":["1468:5:78"],"nodeType":"IdentifierPath","referencedDeclaration":291,"src":"1468:5:78"},"referencedDeclaration":291,"src":"1468:5:78","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},"visibility":"internal"},{"constant":false,"id":31113,"mutability":"mutable","name":"vault","nameLocation":"1487:5:78","nodeType":"VariableDeclaration","scope":31146,"src":"1480:12:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":31112,"nodeType":"UserDefinedTypeName","pathNode":{"id":31111,"name":"IVault","nameLocations":["1480:6:78"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"1480:6:78"},"referencedDeclaration":3111,"src":"1480:6:78","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":31115,"mutability":"mutable","name":"sender","nameLocation":"1502:6:78","nodeType":"VariableDeclaration","scope":31146,"src":"1494:14:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31114,"name":"address","nodeType":"ElementaryTypeName","src":"1494:7:78","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":31117,"mutability":"mutable","name":"amountToSend","nameLocation":"1518:12:78","nodeType":"VariableDeclaration","scope":31146,"src":"1510:20:78","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31116,"name":"uint256","nodeType":"ElementaryTypeName","src":"1510:7:78","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1467:64:78"},"returnParameters":{"id":31119,"nodeType":"ParameterList","parameters":[],"src":"1541:0:78"},"scope":31147,"src":"1429:365:78","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":31148,"src":"725:1071:78","usedErrors":[31059],"usedEvents":[]}],"src":"46:1751:78"},"id":78},"@balancer-labs/v3-vault/contracts/lib/VaultExtensionsLib.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/VaultExtensionsLib.sol","exportedSymbols":{"IVault":[3111],"IVaultErrors":[3768],"VaultExtensionsLib":[31178]},"id":31179,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":31149,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:79"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":31151,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31179,"sourceUnit":3112,"src":"72:81:79","symbolAliases":[{"foreign":{"id":31150,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"81:6:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":31153,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31179,"sourceUnit":3769,"src":"154:93:79","symbolAliases":[{"foreign":{"id":31152,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"163:12:79","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"VaultExtensionsLib","contractDependencies":[],"contractKind":"library","documentation":{"id":31154,"nodeType":"StructuredDocumentation","src":"249:647:79","text":" @notice Ensure functions in extension contracts can only be called through the main Vault.\n @dev The Vault is composed of three contracts, using the Proxy pattern from OpenZeppelin. `ensureVaultDelegateCall`\n can be called on the locally stored Vault address by modifiers in extension contracts to ensure that their functions\n can only be called through the main Vault. Because the storage *layout* is shared (through inheritance of\n `VaultStorage`), but each contract actually has its own storage, we need to make sure we are always calling in the\n main Vault context, to avoid referencing storage in the extension contracts."},"fullyImplemented":true,"id":31178,"linearizedBaseContracts":[31178],"name":"VaultExtensionsLib","nameLocation":"905:18:79","nodeType":"ContractDefinition","nodes":[{"body":{"id":31176,"nodeType":"Block","src":"991:255:79","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":31168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":31162,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1148:4:79","typeDescriptions":{"typeIdentifier":"t_contract$_VaultExtensionsLib_$31178","typeString":"library VaultExtensionsLib"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VaultExtensionsLib_$31178","typeString":"library VaultExtensionsLib"}],"id":31161,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1140:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31160,"name":"address","nodeType":"ElementaryTypeName","src":"1140:7:79","typeDescriptions":{}}},"id":31163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1140:13:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":31166,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31157,"src":"1165:5:79","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}],"id":31165,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1157:7:79","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31164,"name":"address","nodeType":"ElementaryTypeName","src":"1157:7:79","typeDescriptions":{}}},"id":31167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1157:14:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1140:31:79","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31175,"nodeType":"IfStatement","src":"1136:104:79","trueBody":{"id":31174,"nodeType":"Block","src":"1173:67:79","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":31169,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"1194:12:79","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3768_$","typeString":"type(contract IVaultErrors)"}},"id":31171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1207:20:79","memberName":"NotVaultDelegateCall","nodeType":"MemberAccess","referencedDeclaration":3755,"src":"1194:33:79","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":31172,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1194:35:79","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":31173,"nodeType":"RevertStatement","src":"1187:42:79"}]}}]},"id":31177,"implemented":true,"kind":"function","modifiers":[],"name":"ensureVaultDelegateCall","nameLocation":"939:23:79","nodeType":"FunctionDefinition","parameters":{"id":31158,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31157,"mutability":"mutable","name":"vault","nameLocation":"970:5:79","nodeType":"VariableDeclaration","scope":31177,"src":"963:12:79","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":31156,"nodeType":"UserDefinedTypeName","pathNode":{"id":31155,"name":"IVault","nameLocations":["963:6:79"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"963:6:79"},"referencedDeclaration":3111,"src":"963:6:79","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"}],"src":"962:14:79"},"returnParameters":{"id":31159,"nodeType":"ParameterList","parameters":[],"src":"991:0:79"},"scope":31178,"src":"930:316:79","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":31179,"src":"897:351:79","usedErrors":[],"usedEvents":[]}],"src":"46:1203:79"},"id":79},"@balancer-labs/v3-vault/contracts/lib/VaultStateLib.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/VaultStateLib.sol","exportedSymbols":{"VaultStateBits":[31184],"VaultStateLib":[31325],"WordCodec":[7909]},"id":31326,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":31180,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:80"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol","id":31182,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31326,"sourceUnit":7910,"src":"72:93:80","symbolAliases":[{"foreign":{"id":31181,"name":"WordCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7909,"src":"81:9:80","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"VaultStateBits","id":31184,"name":"VaultStateBits","nameLocation":"229:14:80","nodeType":"UserDefinedValueTypeDefinition","src":"224:31:80","underlyingType":{"id":31183,"name":"bytes32","nodeType":"ElementaryTypeName","src":"247:7:80","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"abstract":false,"baseContracts":[],"canonicalName":"VaultStateLib","contractDependencies":[],"contractKind":"library","documentation":{"id":31185,"nodeType":"StructuredDocumentation","src":"257:78:80","text":"@notice Helper functions for reading and writing the `VaultState` struct."},"fullyImplemented":true,"id":31325,"linearizedBaseContracts":[31325],"name":"VaultStateLib","nameLocation":"343:13:80","nodeType":"ContractDefinition","nodes":[{"global":false,"id":31188,"libraryName":{"id":31186,"name":"WordCodec","nameLocations":["369:9:80"],"nodeType":"IdentifierPath","referencedDeclaration":7909,"src":"369:9:80"},"nodeType":"UsingForDirective","src":"363:28:80","typeName":{"id":31187,"name":"bytes32","nodeType":"ElementaryTypeName","src":"383:7:80","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"constant":true,"functionSelector":"434e60ca","id":31191,"mutability":"constant","name":"QUERY_DISABLED_OFFSET","nameLocation":"467:21:80","nodeType":"VariableDeclaration","scope":31325,"src":"443:49:80","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31189,"name":"uint256","nodeType":"ElementaryTypeName","src":"443:7:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30","id":31190,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"491:1:80","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"public"},{"constant":true,"functionSelector":"2577aa90","id":31196,"mutability":"constant","name":"VAULT_PAUSED_OFFSET","nameLocation":"522:19:80","nodeType":"VariableDeclaration","scope":31325,"src":"498:71:80","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31192,"name":"uint256","nodeType":"ElementaryTypeName","src":"498:7:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31195,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":31193,"name":"QUERY_DISABLED_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31191,"src":"544:21:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":31194,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"568:1:80","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"544:25:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":true,"functionSelector":"227e492d","id":31201,"mutability":"constant","name":"BUFFER_PAUSED_OFFSET","nameLocation":"599:20:80","nodeType":"VariableDeclaration","scope":31325,"src":"575:70:80","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31197,"name":"uint256","nodeType":"ElementaryTypeName","src":"575:7:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":31200,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"id":31198,"name":"VAULT_PAUSED_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31196,"src":"622:19:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":31199,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"644:1:80","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"622:23:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"body":{"id":31217,"nodeType":"Block","src":"729:87:80","statements":[{"expression":{"arguments":[{"id":31214,"name":"QUERY_DISABLED_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31191,"src":"787:21:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":31211,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31204,"src":"768:6:80","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}],"expression":{"id":31209,"name":"VaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31184,"src":"746:14:80","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_VaultStateBits_$31184_$","typeString":"type(VaultStateBits)"}},"id":31210,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"761:6:80","memberName":"unwrap","nodeType":"MemberAccess","src":"746:21:80","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_VaultStateBits_$31184_$returns$_t_bytes32_$","typeString":"function (VaultStateBits) pure returns (bytes32)"}},"id":31212,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"746:29:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":31213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"776:10:80","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":7771,"src":"746:40:80","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":31215,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"746:63:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":31208,"id":31216,"nodeType":"Return","src":"739:70:80"}]},"id":31218,"implemented":true,"kind":"function","modifiers":[],"name":"isQueryDisabled","nameLocation":"661:15:80","nodeType":"FunctionDefinition","parameters":{"id":31205,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31204,"mutability":"mutable","name":"config","nameLocation":"692:6:80","nodeType":"VariableDeclaration","scope":31218,"src":"677:21:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"},"typeName":{"id":31203,"nodeType":"UserDefinedTypeName","pathNode":{"id":31202,"name":"VaultStateBits","nameLocations":["677:14:80"],"nodeType":"IdentifierPath","referencedDeclaration":31184,"src":"677:14:80"},"referencedDeclaration":31184,"src":"677:14:80","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"visibility":"internal"}],"src":"676:23:80"},"returnParameters":{"id":31208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31207,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31218,"src":"723:4:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":31206,"name":"bool","nodeType":"ElementaryTypeName","src":"723:4:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"722:6:80"},"scope":31325,"src":"652:164:80","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":31241,"nodeType":"Block","src":"922:115:80","statements":[{"expression":{"arguments":[{"arguments":[{"id":31236,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31223,"src":"1000:5:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":31237,"name":"QUERY_DISABLED_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31191,"src":"1007:21:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":31233,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31221,"src":"981:6:80","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}],"expression":{"id":31231,"name":"VaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31184,"src":"959:14:80","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_VaultStateBits_$31184_$","typeString":"type(VaultStateBits)"}},"id":31232,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"974:6:80","memberName":"unwrap","nodeType":"MemberAccess","src":"959:21:80","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_VaultStateBits_$31184_$returns$_t_bytes32_$","typeString":"function (VaultStateBits) pure returns (bytes32)"}},"id":31234,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"959:29:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":31235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"989:10:80","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":7785,"src":"959:40:80","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":31238,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"959:70:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":31229,"name":"VaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31184,"src":"939:14:80","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_VaultStateBits_$31184_$","typeString":"type(VaultStateBits)"}},"id":31230,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"954:4:80","memberName":"wrap","nodeType":"MemberAccess","src":"939:19:80","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_VaultStateBits_$31184_$","typeString":"function (bytes32) pure returns (VaultStateBits)"}},"id":31239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"939:91:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"functionReturnParameters":31228,"id":31240,"nodeType":"Return","src":"932:98:80"}]},"id":31242,"implemented":true,"kind":"function","modifiers":[],"name":"setQueryDisabled","nameLocation":"831:16:80","nodeType":"FunctionDefinition","parameters":{"id":31224,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31221,"mutability":"mutable","name":"config","nameLocation":"863:6:80","nodeType":"VariableDeclaration","scope":31242,"src":"848:21:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"},"typeName":{"id":31220,"nodeType":"UserDefinedTypeName","pathNode":{"id":31219,"name":"VaultStateBits","nameLocations":["848:14:80"],"nodeType":"IdentifierPath","referencedDeclaration":31184,"src":"848:14:80"},"referencedDeclaration":31184,"src":"848:14:80","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"visibility":"internal"},{"constant":false,"id":31223,"mutability":"mutable","name":"value","nameLocation":"876:5:80","nodeType":"VariableDeclaration","scope":31242,"src":"871:10:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":31222,"name":"bool","nodeType":"ElementaryTypeName","src":"871:4:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"847:35:80"},"returnParameters":{"id":31228,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31227,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31242,"src":"906:14:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"},"typeName":{"id":31226,"nodeType":"UserDefinedTypeName","pathNode":{"id":31225,"name":"VaultStateBits","nameLocations":["906:14:80"],"nodeType":"IdentifierPath","referencedDeclaration":31184,"src":"906:14:80"},"referencedDeclaration":31184,"src":"906:14:80","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"visibility":"internal"}],"src":"905:16:80"},"scope":31325,"src":"822:215:80","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":31258,"nodeType":"Block","src":"1118:85:80","statements":[{"expression":{"arguments":[{"id":31255,"name":"VAULT_PAUSED_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31196,"src":"1176:19:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":31252,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31245,"src":"1157:6:80","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}],"expression":{"id":31250,"name":"VaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31184,"src":"1135:14:80","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_VaultStateBits_$31184_$","typeString":"type(VaultStateBits)"}},"id":31251,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1150:6:80","memberName":"unwrap","nodeType":"MemberAccess","src":"1135:21:80","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_VaultStateBits_$31184_$returns$_t_bytes32_$","typeString":"function (VaultStateBits) pure returns (bytes32)"}},"id":31253,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1135:29:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":31254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1165:10:80","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":7771,"src":"1135:40:80","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":31256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1135:61:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":31249,"id":31257,"nodeType":"Return","src":"1128:68:80"}]},"id":31259,"implemented":true,"kind":"function","modifiers":[],"name":"isVaultPaused","nameLocation":"1052:13:80","nodeType":"FunctionDefinition","parameters":{"id":31246,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31245,"mutability":"mutable","name":"config","nameLocation":"1081:6:80","nodeType":"VariableDeclaration","scope":31259,"src":"1066:21:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"},"typeName":{"id":31244,"nodeType":"UserDefinedTypeName","pathNode":{"id":31243,"name":"VaultStateBits","nameLocations":["1066:14:80"],"nodeType":"IdentifierPath","referencedDeclaration":31184,"src":"1066:14:80"},"referencedDeclaration":31184,"src":"1066:14:80","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"visibility":"internal"}],"src":"1065:23:80"},"returnParameters":{"id":31249,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31248,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31259,"src":"1112:4:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":31247,"name":"bool","nodeType":"ElementaryTypeName","src":"1112:4:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1111:6:80"},"scope":31325,"src":"1043:160:80","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":31282,"nodeType":"Block","src":"1307:113:80","statements":[{"expression":{"arguments":[{"arguments":[{"id":31277,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31264,"src":"1385:5:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":31278,"name":"VAULT_PAUSED_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31196,"src":"1392:19:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":31274,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31262,"src":"1366:6:80","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}],"expression":{"id":31272,"name":"VaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31184,"src":"1344:14:80","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_VaultStateBits_$31184_$","typeString":"type(VaultStateBits)"}},"id":31273,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1359:6:80","memberName":"unwrap","nodeType":"MemberAccess","src":"1344:21:80","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_VaultStateBits_$31184_$returns$_t_bytes32_$","typeString":"function (VaultStateBits) pure returns (bytes32)"}},"id":31275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1344:29:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":31276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1374:10:80","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":7785,"src":"1344:40:80","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":31279,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1344:68:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":31270,"name":"VaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31184,"src":"1324:14:80","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_VaultStateBits_$31184_$","typeString":"type(VaultStateBits)"}},"id":31271,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1339:4:80","memberName":"wrap","nodeType":"MemberAccess","src":"1324:19:80","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_VaultStateBits_$31184_$","typeString":"function (bytes32) pure returns (VaultStateBits)"}},"id":31280,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1324:89:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"functionReturnParameters":31269,"id":31281,"nodeType":"Return","src":"1317:96:80"}]},"id":31283,"implemented":true,"kind":"function","modifiers":[],"name":"setVaultPaused","nameLocation":"1218:14:80","nodeType":"FunctionDefinition","parameters":{"id":31265,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31262,"mutability":"mutable","name":"config","nameLocation":"1248:6:80","nodeType":"VariableDeclaration","scope":31283,"src":"1233:21:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"},"typeName":{"id":31261,"nodeType":"UserDefinedTypeName","pathNode":{"id":31260,"name":"VaultStateBits","nameLocations":["1233:14:80"],"nodeType":"IdentifierPath","referencedDeclaration":31184,"src":"1233:14:80"},"referencedDeclaration":31184,"src":"1233:14:80","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"visibility":"internal"},{"constant":false,"id":31264,"mutability":"mutable","name":"value","nameLocation":"1261:5:80","nodeType":"VariableDeclaration","scope":31283,"src":"1256:10:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":31263,"name":"bool","nodeType":"ElementaryTypeName","src":"1256:4:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1232:35:80"},"returnParameters":{"id":31269,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31268,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31283,"src":"1291:14:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"},"typeName":{"id":31267,"nodeType":"UserDefinedTypeName","pathNode":{"id":31266,"name":"VaultStateBits","nameLocations":["1291:14:80"],"nodeType":"IdentifierPath","referencedDeclaration":31184,"src":"1291:14:80"},"referencedDeclaration":31184,"src":"1291:14:80","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"visibility":"internal"}],"src":"1290:16:80"},"scope":31325,"src":"1209:211:80","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":31299,"nodeType":"Block","src":"1504:86:80","statements":[{"expression":{"arguments":[{"id":31296,"name":"BUFFER_PAUSED_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31201,"src":"1562:20:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":31293,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31286,"src":"1543:6:80","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}],"expression":{"id":31291,"name":"VaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31184,"src":"1521:14:80","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_VaultStateBits_$31184_$","typeString":"type(VaultStateBits)"}},"id":31292,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1536:6:80","memberName":"unwrap","nodeType":"MemberAccess","src":"1521:21:80","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_VaultStateBits_$31184_$returns$_t_bytes32_$","typeString":"function (VaultStateBits) pure returns (bytes32)"}},"id":31294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1521:29:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":31295,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1551:10:80","memberName":"decodeBool","nodeType":"MemberAccess","referencedDeclaration":7771,"src":"1521:40:80","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bool_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bool)"}},"id":31297,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1521:62:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":31290,"id":31298,"nodeType":"Return","src":"1514:69:80"}]},"id":31300,"implemented":true,"kind":"function","modifiers":[],"name":"areBuffersPaused","nameLocation":"1435:16:80","nodeType":"FunctionDefinition","parameters":{"id":31287,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31286,"mutability":"mutable","name":"config","nameLocation":"1467:6:80","nodeType":"VariableDeclaration","scope":31300,"src":"1452:21:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"},"typeName":{"id":31285,"nodeType":"UserDefinedTypeName","pathNode":{"id":31284,"name":"VaultStateBits","nameLocations":["1452:14:80"],"nodeType":"IdentifierPath","referencedDeclaration":31184,"src":"1452:14:80"},"referencedDeclaration":31184,"src":"1452:14:80","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"visibility":"internal"}],"src":"1451:23:80"},"returnParameters":{"id":31290,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31289,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31300,"src":"1498:4:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":31288,"name":"bool","nodeType":"ElementaryTypeName","src":"1498:4:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1497:6:80"},"scope":31325,"src":"1426:164:80","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":31323,"nodeType":"Block","src":"1696:114:80","statements":[{"expression":{"arguments":[{"arguments":[{"id":31318,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31305,"src":"1774:5:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":31319,"name":"BUFFER_PAUSED_OFFSET","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31201,"src":"1781:20:80","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":31315,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31303,"src":"1755:6:80","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}],"expression":{"id":31313,"name":"VaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31184,"src":"1733:14:80","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_VaultStateBits_$31184_$","typeString":"type(VaultStateBits)"}},"id":31314,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1748:6:80","memberName":"unwrap","nodeType":"MemberAccess","src":"1733:21:80","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_VaultStateBits_$31184_$returns$_t_bytes32_$","typeString":"function (VaultStateBits) pure returns (bytes32)"}},"id":31316,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1733:29:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":31317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1763:10:80","memberName":"insertBool","nodeType":"MemberAccess","referencedDeclaration":7785,"src":"1733:40:80","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bool_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,bool,uint256) pure returns (bytes32)"}},"id":31320,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1733:69:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":31311,"name":"VaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31184,"src":"1713:14:80","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_VaultStateBits_$31184_$","typeString":"type(VaultStateBits)"}},"id":31312,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1728:4:80","memberName":"wrap","nodeType":"MemberAccess","src":"1713:19:80","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_VaultStateBits_$31184_$","typeString":"function (bytes32) pure returns (VaultStateBits)"}},"id":31321,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1713:90:80","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"functionReturnParameters":31310,"id":31322,"nodeType":"Return","src":"1706:97:80"}]},"id":31324,"implemented":true,"kind":"function","modifiers":[],"name":"setBuffersPaused","nameLocation":"1605:16:80","nodeType":"FunctionDefinition","parameters":{"id":31306,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31303,"mutability":"mutable","name":"config","nameLocation":"1637:6:80","nodeType":"VariableDeclaration","scope":31324,"src":"1622:21:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"},"typeName":{"id":31302,"nodeType":"UserDefinedTypeName","pathNode":{"id":31301,"name":"VaultStateBits","nameLocations":["1622:14:80"],"nodeType":"IdentifierPath","referencedDeclaration":31184,"src":"1622:14:80"},"referencedDeclaration":31184,"src":"1622:14:80","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"visibility":"internal"},{"constant":false,"id":31305,"mutability":"mutable","name":"value","nameLocation":"1650:5:80","nodeType":"VariableDeclaration","scope":31324,"src":"1645:10:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":31304,"name":"bool","nodeType":"ElementaryTypeName","src":"1645:4:80","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1621:35:80"},"returnParameters":{"id":31310,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31309,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31324,"src":"1680:14:80","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"},"typeName":{"id":31308,"nodeType":"UserDefinedTypeName","pathNode":{"id":31307,"name":"VaultStateBits","nameLocations":["1680:14:80"],"nodeType":"IdentifierPath","referencedDeclaration":31184,"src":"1680:14:80"},"referencedDeclaration":31184,"src":"1680:14:80","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"visibility":"internal"}],"src":"1679:16:80"},"scope":31325,"src":"1596:214:80","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":31326,"src":"335:1477:80","usedErrors":[],"usedEvents":[]}],"src":"46:1767:80"},"id":80},"@balancer-labs/v3-vault/contracts/test/BasePoolMathMock.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/test/BasePoolMathMock.sol","exportedSymbols":{"BasePoolMath":[12083],"BasePoolMathMock":[31591],"IBasePool":[1505],"PoolSwapParams":[4772],"Rounding":[4732]},"id":31592,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":31327,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:81"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":31330,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31592,"sourceUnit":4872,"src":"72:103:81","symbolAliases":[{"foreign":{"id":31328,"name":"PoolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4772,"src":"81:14:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":31329,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"97:8:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol","id":31332,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31592,"sourceUnit":1506,"src":"176:87:81","symbolAliases":[{"foreign":{"id":31331,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1505,"src":"185:9:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/BasePoolMath.sol","file":"../BasePoolMath.sol","id":31334,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31592,"sourceUnit":12084,"src":"265:51:81","symbolAliases":[{"foreign":{"id":31333,"name":"BasePoolMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12083,"src":"274:12:81","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":31335,"name":"IBasePool","nameLocations":["356:9:81"],"nodeType":"IdentifierPath","referencedDeclaration":1505,"src":"356:9:81"},"id":31336,"nodeType":"InheritanceSpecifier","src":"356:9:81"}],"canonicalName":"BasePoolMathMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":false,"id":31591,"linearizedBaseContracts":[31591,1505,3073,3057],"name":"BasePoolMathMock","nameLocation":"336:16:81","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[1482],"functionSelector":"984de9e8","id":31347,"implemented":false,"kind":"function","modifiers":[],"name":"computeInvariant","nameLocation":"381:16:81","nodeType":"FunctionDefinition","parameters":{"id":31343,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31339,"mutability":"mutable","name":"balances","nameLocation":"415:8:81","nodeType":"VariableDeclaration","scope":31347,"src":"398:25:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":31337,"name":"uint256","nodeType":"ElementaryTypeName","src":"398:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31338,"nodeType":"ArrayTypeName","src":"398:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":31342,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31347,"src":"425:8:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"},"typeName":{"id":31341,"nodeType":"UserDefinedTypeName","pathNode":{"id":31340,"name":"Rounding","nameLocations":["425:8:81"],"nodeType":"IdentifierPath","referencedDeclaration":4732,"src":"425:8:81"},"referencedDeclaration":4732,"src":"425:8:81","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"visibility":"internal"}],"src":"397:37:81"},"returnParameters":{"id":31346,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31345,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31347,"src":"464:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31344,"name":"uint256","nodeType":"ElementaryTypeName","src":"464:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"463:9:81"},"scope":31591,"src":"372:101:81","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1495],"functionSelector":"16a0b3e0","id":31359,"implemented":false,"kind":"function","modifiers":[],"name":"computeBalance","nameLocation":"488:14:81","nodeType":"FunctionDefinition","parameters":{"id":31355,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31350,"mutability":"mutable","name":"balances","nameLocation":"529:8:81","nodeType":"VariableDeclaration","scope":31359,"src":"512:25:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":31348,"name":"uint256","nodeType":"ElementaryTypeName","src":"512:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31349,"nodeType":"ArrayTypeName","src":"512:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":31352,"mutability":"mutable","name":"tokenInIndex","nameLocation":"555:12:81","nodeType":"VariableDeclaration","scope":31359,"src":"547:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31351,"name":"uint256","nodeType":"ElementaryTypeName","src":"547:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":31354,"mutability":"mutable","name":"invariantRatio","nameLocation":"585:14:81","nodeType":"VariableDeclaration","scope":31359,"src":"577:22:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31353,"name":"uint256","nodeType":"ElementaryTypeName","src":"577:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"502:103:81"},"returnParameters":{"id":31358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31357,"mutability":"mutable","name":"newBalance","nameLocation":"645:10:81","nodeType":"VariableDeclaration","scope":31359,"src":"637:18:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31356,"name":"uint256","nodeType":"ElementaryTypeName","src":"637:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"636:20:81"},"scope":31591,"src":"479:178:81","stateMutability":"view","virtual":true,"visibility":"external"},{"body":{"id":31379,"nodeType":"Block","src":"845:105:81","statements":[{"expression":{"arguments":[{"id":31374,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31362,"src":"904:8:81","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":31375,"name":"bptTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31364,"src":"914:14:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31376,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31366,"src":"930:12:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":31372,"name":"BasePoolMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12083,"src":"862:12:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BasePoolMath_$12083_$","typeString":"type(library BasePoolMath)"}},"id":31373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"875:28:81","memberName":"computeProportionalAmountsIn","nodeType":"MemberAccess","referencedDeclaration":11423,"src":"862:41:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256,uint256) pure returns (uint256[] memory)"}},"id":31377,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"862:81:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":31371,"id":31378,"nodeType":"Return","src":"855:88:81"}]},"functionSelector":"c548e4d8","id":31380,"implemented":true,"kind":"function","modifiers":[],"name":"computeProportionalAmountsIn","nameLocation":"672:28:81","nodeType":"FunctionDefinition","parameters":{"id":31367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31362,"mutability":"mutable","name":"balances","nameLocation":"727:8:81","nodeType":"VariableDeclaration","scope":31380,"src":"710:25:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":31360,"name":"uint256","nodeType":"ElementaryTypeName","src":"710:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31361,"nodeType":"ArrayTypeName","src":"710:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":31364,"mutability":"mutable","name":"bptTotalSupply","nameLocation":"753:14:81","nodeType":"VariableDeclaration","scope":31380,"src":"745:22:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31363,"name":"uint256","nodeType":"ElementaryTypeName","src":"745:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":31366,"mutability":"mutable","name":"bptAmountOut","nameLocation":"785:12:81","nodeType":"VariableDeclaration","scope":31380,"src":"777:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31365,"name":"uint256","nodeType":"ElementaryTypeName","src":"777:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"700:103:81"},"returnParameters":{"id":31371,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31370,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31380,"src":"827:16:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":31368,"name":"uint256","nodeType":"ElementaryTypeName","src":"827:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31369,"nodeType":"ArrayTypeName","src":"827:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"826:18:81"},"scope":31591,"src":"663:287:81","stateMutability":"pure","virtual":false,"visibility":"external"},{"body":{"id":31400,"nodeType":"Block","src":"1138:105:81","statements":[{"expression":{"arguments":[{"id":31395,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31383,"src":"1198:8:81","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":31396,"name":"bptTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31385,"src":"1208:14:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31397,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31387,"src":"1224:11:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":31393,"name":"BasePoolMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12083,"src":"1155:12:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BasePoolMath_$12083_$","typeString":"type(library BasePoolMath)"}},"id":31394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1168:29:81","memberName":"computeProportionalAmountsOut","nodeType":"MemberAccess","referencedDeclaration":11473,"src":"1155:42:81","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256,uint256) pure returns (uint256[] memory)"}},"id":31398,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1155:81:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":31392,"id":31399,"nodeType":"Return","src":"1148:88:81"}]},"functionSelector":"da317980","id":31401,"implemented":true,"kind":"function","modifiers":[],"name":"computeProportionalAmountsOut","nameLocation":"965:29:81","nodeType":"FunctionDefinition","parameters":{"id":31388,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31383,"mutability":"mutable","name":"balances","nameLocation":"1021:8:81","nodeType":"VariableDeclaration","scope":31401,"src":"1004:25:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":31381,"name":"uint256","nodeType":"ElementaryTypeName","src":"1004:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31382,"nodeType":"ArrayTypeName","src":"1004:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":31385,"mutability":"mutable","name":"bptTotalSupply","nameLocation":"1047:14:81","nodeType":"VariableDeclaration","scope":31401,"src":"1039:22:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31384,"name":"uint256","nodeType":"ElementaryTypeName","src":"1039:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":31387,"mutability":"mutable","name":"bptAmountIn","nameLocation":"1079:11:81","nodeType":"VariableDeclaration","scope":31401,"src":"1071:19:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31386,"name":"uint256","nodeType":"ElementaryTypeName","src":"1071:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"994:102:81"},"returnParameters":{"id":31392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31391,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31401,"src":"1120:16:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":31389,"name":"uint256","nodeType":"ElementaryTypeName","src":"1120:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31390,"nodeType":"ArrayTypeName","src":"1120:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1119:18:81"},"scope":31591,"src":"956:287:81","stateMutability":"pure","virtual":false,"visibility":"external"},{"body":{"id":31433,"nodeType":"Block","src":"1517:261:81","statements":[{"expression":{"arguments":[{"id":31421,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31404,"src":"1606:15:81","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":31422,"name":"exactAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31407,"src":"1639:12:81","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":31423,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31409,"src":"1669:11:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31424,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31411,"src":"1698:17:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"arguments":[{"id":31428,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1751:4:81","typeDescriptions":{"typeIdentifier":"t_contract$_BasePoolMathMock_$31591","typeString":"contract BasePoolMathMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BasePoolMathMock_$31591","typeString":"contract BasePoolMathMock"}],"id":31427,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1743:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31426,"name":"address","nodeType":"ElementaryTypeName","src":"1743:7:81","typeDescriptions":{}}},"id":31429,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1743:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31425,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1505,"src":"1733:9:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasePool_$1505_$","typeString":"type(contract IBasePool)"}},"id":31430,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1733:24:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}],"expression":{"id":31419,"name":"BasePoolMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12083,"src":"1546:12:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BasePoolMath_$12083_$","typeString":"type(library BasePoolMath)"}},"id":31420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1559:29:81","memberName":"computeAddLiquidityUnbalanced","nodeType":"MemberAccess","referencedDeclaration":11654,"src":"1546:42:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_contract$_IBasePool_$1505_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256[] memory,uint256,uint256,contract IBasePool) view returns (uint256,uint256[] memory)"}},"id":31431,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1546:225:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory)"}},"functionReturnParameters":31418,"id":31432,"nodeType":"Return","src":"1527:244:81"}]},"functionSelector":"d9c7cc7a","id":31434,"implemented":true,"kind":"function","modifiers":[],"name":"computeAddLiquidityUnbalanced","nameLocation":"1258:29:81","nodeType":"FunctionDefinition","parameters":{"id":31412,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31404,"mutability":"mutable","name":"currentBalances","nameLocation":"1314:15:81","nodeType":"VariableDeclaration","scope":31434,"src":"1297:32:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":31402,"name":"uint256","nodeType":"ElementaryTypeName","src":"1297:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31403,"nodeType":"ArrayTypeName","src":"1297:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":31407,"mutability":"mutable","name":"exactAmounts","nameLocation":"1356:12:81","nodeType":"VariableDeclaration","scope":31434,"src":"1339:29:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":31405,"name":"uint256","nodeType":"ElementaryTypeName","src":"1339:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31406,"nodeType":"ArrayTypeName","src":"1339:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":31409,"mutability":"mutable","name":"totalSupply","nameLocation":"1386:11:81","nodeType":"VariableDeclaration","scope":31434,"src":"1378:19:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31408,"name":"uint256","nodeType":"ElementaryTypeName","src":"1378:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":31411,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1415:17:81","nodeType":"VariableDeclaration","scope":31434,"src":"1407:25:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31410,"name":"uint256","nodeType":"ElementaryTypeName","src":"1407:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1287:151:81"},"returnParameters":{"id":31418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31414,"mutability":"mutable","name":"bptAmountOut","nameLocation":"1470:12:81","nodeType":"VariableDeclaration","scope":31434,"src":"1462:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31413,"name":"uint256","nodeType":"ElementaryTypeName","src":"1462:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":31417,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"1501:14:81","nodeType":"VariableDeclaration","scope":31434,"src":"1484:31:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":31415,"name":"uint256","nodeType":"ElementaryTypeName","src":"1484:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31416,"nodeType":"ArrayTypeName","src":"1484:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1461:55:81"},"scope":31591,"src":"1249:529:81","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":31468,"nodeType":"Block","src":"2090:305:81","statements":[{"expression":{"arguments":[{"id":31455,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31437,"src":"2188:15:81","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":31456,"name":"tokenInIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31439,"src":"2221:12:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31457,"name":"exactBptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31441,"src":"2251:17:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31458,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31443,"src":"2286:11:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31459,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31445,"src":"2315:17:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"arguments":[{"id":31463,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2368:4:81","typeDescriptions":{"typeIdentifier":"t_contract$_BasePoolMathMock_$31591","typeString":"contract BasePoolMathMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BasePoolMathMock_$31591","typeString":"contract BasePoolMathMock"}],"id":31462,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2360:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31461,"name":"address","nodeType":"ElementaryTypeName","src":"2360:7:81","typeDescriptions":{}}},"id":31464,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2360:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31460,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1505,"src":"2350:9:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasePool_$1505_$","typeString":"type(contract IBasePool)"}},"id":31465,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2350:24:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}],"expression":{"id":31453,"name":"BasePoolMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12083,"src":"2119:12:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BasePoolMath_$12083_$","typeString":"type(library BasePoolMath)"}},"id":31454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2132:38:81","memberName":"computeAddLiquiditySingleTokenExactOut","nodeType":"MemberAccess","referencedDeclaration":11762,"src":"2119:51:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_contract$_IBasePool_$1505_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256,uint256,uint256,uint256,contract IBasePool) view returns (uint256,uint256[] memory)"}},"id":31466,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2119:269:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory)"}},"functionReturnParameters":31452,"id":31467,"nodeType":"Return","src":"2100:288:81"}]},"functionSelector":"85d5261a","id":31469,"implemented":true,"kind":"function","modifiers":[],"name":"computeAddLiquiditySingleTokenExactOut","nameLocation":"1793:38:81","nodeType":"FunctionDefinition","parameters":{"id":31446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31437,"mutability":"mutable","name":"currentBalances","nameLocation":"1858:15:81","nodeType":"VariableDeclaration","scope":31469,"src":"1841:32:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":31435,"name":"uint256","nodeType":"ElementaryTypeName","src":"1841:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31436,"nodeType":"ArrayTypeName","src":"1841:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":31439,"mutability":"mutable","name":"tokenInIndex","nameLocation":"1891:12:81","nodeType":"VariableDeclaration","scope":31469,"src":"1883:20:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31438,"name":"uint256","nodeType":"ElementaryTypeName","src":"1883:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":31441,"mutability":"mutable","name":"exactBptAmountOut","nameLocation":"1921:17:81","nodeType":"VariableDeclaration","scope":31469,"src":"1913:25:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31440,"name":"uint256","nodeType":"ElementaryTypeName","src":"1913:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":31443,"mutability":"mutable","name":"totalSupply","nameLocation":"1956:11:81","nodeType":"VariableDeclaration","scope":31469,"src":"1948:19:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31442,"name":"uint256","nodeType":"ElementaryTypeName","src":"1948:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":31445,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1985:17:81","nodeType":"VariableDeclaration","scope":31469,"src":"1977:25:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31444,"name":"uint256","nodeType":"ElementaryTypeName","src":"1977:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1831:177:81"},"returnParameters":{"id":31452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31448,"mutability":"mutable","name":"amountInWithFee","nameLocation":"2040:15:81","nodeType":"VariableDeclaration","scope":31469,"src":"2032:23:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31447,"name":"uint256","nodeType":"ElementaryTypeName","src":"2032:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":31451,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"2074:14:81","nodeType":"VariableDeclaration","scope":31469,"src":"2057:31:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":31449,"name":"uint256","nodeType":"ElementaryTypeName","src":"2057:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31450,"nodeType":"ArrayTypeName","src":"2057:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"2031:58:81"},"scope":31591,"src":"1784:611:81","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":31503,"nodeType":"Block","src":"2704:306:81","statements":[{"expression":{"arguments":[{"id":31490,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31472,"src":"2805:15:81","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":31491,"name":"tokenOutIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31474,"src":"2838:13:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31492,"name":"exactAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31476,"src":"2869:14:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31493,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31478,"src":"2901:11:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31494,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31480,"src":"2930:17:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"arguments":[{"id":31498,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2983:4:81","typeDescriptions":{"typeIdentifier":"t_contract$_BasePoolMathMock_$31591","typeString":"contract BasePoolMathMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BasePoolMathMock_$31591","typeString":"contract BasePoolMathMock"}],"id":31497,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2975:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31496,"name":"address","nodeType":"ElementaryTypeName","src":"2975:7:81","typeDescriptions":{}}},"id":31499,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2975:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31495,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1505,"src":"2965:9:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasePool_$1505_$","typeString":"type(contract IBasePool)"}},"id":31500,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2965:24:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}],"expression":{"id":31488,"name":"BasePoolMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12083,"src":"2733:12:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BasePoolMath_$12083_$","typeString":"type(library BasePoolMath)"}},"id":31489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2746:41:81","memberName":"computeRemoveLiquiditySingleTokenExactOut","nodeType":"MemberAccess","referencedDeclaration":11927,"src":"2733:54:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_contract$_IBasePool_$1505_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256,uint256,uint256,uint256,contract IBasePool) view returns (uint256,uint256[] memory)"}},"id":31501,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2733:270:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory)"}},"functionReturnParameters":31487,"id":31502,"nodeType":"Return","src":"2714:289:81"}]},"functionSelector":"9a87ffbf","id":31504,"implemented":true,"kind":"function","modifiers":[],"name":"computeRemoveLiquiditySingleTokenExactOut","nameLocation":"2410:41:81","nodeType":"FunctionDefinition","parameters":{"id":31481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31472,"mutability":"mutable","name":"currentBalances","nameLocation":"2478:15:81","nodeType":"VariableDeclaration","scope":31504,"src":"2461:32:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":31470,"name":"uint256","nodeType":"ElementaryTypeName","src":"2461:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31471,"nodeType":"ArrayTypeName","src":"2461:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":31474,"mutability":"mutable","name":"tokenOutIndex","nameLocation":"2511:13:81","nodeType":"VariableDeclaration","scope":31504,"src":"2503:21:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31473,"name":"uint256","nodeType":"ElementaryTypeName","src":"2503:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":31476,"mutability":"mutable","name":"exactAmountOut","nameLocation":"2542:14:81","nodeType":"VariableDeclaration","scope":31504,"src":"2534:22:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31475,"name":"uint256","nodeType":"ElementaryTypeName","src":"2534:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":31478,"mutability":"mutable","name":"totalSupply","nameLocation":"2574:11:81","nodeType":"VariableDeclaration","scope":31504,"src":"2566:19:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31477,"name":"uint256","nodeType":"ElementaryTypeName","src":"2566:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":31480,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"2603:17:81","nodeType":"VariableDeclaration","scope":31504,"src":"2595:25:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31479,"name":"uint256","nodeType":"ElementaryTypeName","src":"2595:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2451:175:81"},"returnParameters":{"id":31487,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31483,"mutability":"mutable","name":"bptAmountIn","nameLocation":"2658:11:81","nodeType":"VariableDeclaration","scope":31504,"src":"2650:19:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31482,"name":"uint256","nodeType":"ElementaryTypeName","src":"2650:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":31486,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"2688:14:81","nodeType":"VariableDeclaration","scope":31504,"src":"2671:31:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":31484,"name":"uint256","nodeType":"ElementaryTypeName","src":"2671:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31485,"nodeType":"ArrayTypeName","src":"2671:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"2649:54:81"},"scope":31591,"src":"2401:609:81","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":31538,"nodeType":"Block","src":"3325:307:81","statements":[{"expression":{"arguments":[{"id":31525,"name":"currentBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31507,"src":"3425:15:81","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":31526,"name":"tokenOutIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31509,"src":"3458:13:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31527,"name":"exactBptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31511,"src":"3489:16:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31528,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31513,"src":"3523:11:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":31529,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31515,"src":"3552:17:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"arguments":[{"id":31533,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3605:4:81","typeDescriptions":{"typeIdentifier":"t_contract$_BasePoolMathMock_$31591","typeString":"contract BasePoolMathMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BasePoolMathMock_$31591","typeString":"contract BasePoolMathMock"}],"id":31532,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3597:7:81","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31531,"name":"address","nodeType":"ElementaryTypeName","src":"3597:7:81","typeDescriptions":{}}},"id":31534,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3597:13:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31530,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1505,"src":"3587:9:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBasePool_$1505_$","typeString":"type(contract IBasePool)"}},"id":31535,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3587:24:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IBasePool_$1505","typeString":"contract IBasePool"}],"expression":{"id":31523,"name":"BasePoolMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":12083,"src":"3354:12:81","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BasePoolMath_$12083_$","typeString":"type(library BasePoolMath)"}},"id":31524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3367:40:81","memberName":"computeRemoveLiquiditySingleTokenExactIn","nodeType":"MemberAccess","referencedDeclaration":12030,"src":"3354:53:81","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_contract$_IBasePool_$1505_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256[] memory,uint256,uint256,uint256,uint256,contract IBasePool) view returns (uint256,uint256[] memory)"}},"id":31536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3354:271:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory)"}},"functionReturnParameters":31522,"id":31537,"nodeType":"Return","src":"3335:290:81"}]},"functionSelector":"3ab05915","id":31539,"implemented":true,"kind":"function","modifiers":[],"name":"computeRemoveLiquiditySingleTokenExactIn","nameLocation":"3025:40:81","nodeType":"FunctionDefinition","parameters":{"id":31516,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31507,"mutability":"mutable","name":"currentBalances","nameLocation":"3092:15:81","nodeType":"VariableDeclaration","scope":31539,"src":"3075:32:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":31505,"name":"uint256","nodeType":"ElementaryTypeName","src":"3075:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31506,"nodeType":"ArrayTypeName","src":"3075:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":31509,"mutability":"mutable","name":"tokenOutIndex","nameLocation":"3125:13:81","nodeType":"VariableDeclaration","scope":31539,"src":"3117:21:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31508,"name":"uint256","nodeType":"ElementaryTypeName","src":"3117:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":31511,"mutability":"mutable","name":"exactBptAmountIn","nameLocation":"3156:16:81","nodeType":"VariableDeclaration","scope":31539,"src":"3148:24:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31510,"name":"uint256","nodeType":"ElementaryTypeName","src":"3148:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":31513,"mutability":"mutable","name":"totalSupply","nameLocation":"3190:11:81","nodeType":"VariableDeclaration","scope":31539,"src":"3182:19:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31512,"name":"uint256","nodeType":"ElementaryTypeName","src":"3182:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":31515,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"3219:17:81","nodeType":"VariableDeclaration","scope":31539,"src":"3211:25:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31514,"name":"uint256","nodeType":"ElementaryTypeName","src":"3211:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3065:177:81"},"returnParameters":{"id":31522,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31518,"mutability":"mutable","name":"amountOutWithFee","nameLocation":"3274:16:81","nodeType":"VariableDeclaration","scope":31539,"src":"3266:24:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31517,"name":"uint256","nodeType":"ElementaryTypeName","src":"3266:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":31521,"mutability":"mutable","name":"swapFeeAmounts","nameLocation":"3309:14:81","nodeType":"VariableDeclaration","scope":31539,"src":"3292:31:81","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":31519,"name":"uint256","nodeType":"ElementaryTypeName","src":"3292:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31520,"nodeType":"ArrayTypeName","src":"3292:9:81","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"3265:59:81"},"scope":31591,"src":"3016:616:81","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3066],"body":{"id":31547,"nodeType":"Block","src":"3715:25:81","statements":[{"expression":{"hexValue":"30","id":31545,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3732:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":31544,"id":31546,"nodeType":"Return","src":"3725:8:81"}]},"functionSelector":"b677fa56","id":31548,"implemented":true,"kind":"function","modifiers":[],"name":"getMinimumInvariantRatio","nameLocation":"3647:24:81","nodeType":"FunctionDefinition","overrides":{"id":31541,"nodeType":"OverrideSpecifier","overrides":[],"src":"3688:8:81"},"parameters":{"id":31540,"nodeType":"ParameterList","parameters":[],"src":"3671:2:81"},"returnParameters":{"id":31544,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31543,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31548,"src":"3706:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31542,"name":"uint256","nodeType":"ElementaryTypeName","src":"3706:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3705:9:81"},"scope":31591,"src":"3638:102:81","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[3072],"body":{"id":31558,"nodeType":"Block","src":"3823:40:81","statements":[{"expression":{"commonType":{"typeIdentifier":"t_rational_1000000000000000000000000_by_1","typeString":"int_const 1000000000000000000000000"},"id":31556,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"315f3030305f303030","id":31554,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3840:9:81","typeDescriptions":{"typeIdentifier":"t_rational_1000000_by_1","typeString":"int_const 1000000"},"value":"1_000_000"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"31653138","id":31555,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3852:4:81","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"src":"3840:16:81","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000000000_by_1","typeString":"int_const 1000000000000000000000000"}},"functionReturnParameters":31553,"id":31557,"nodeType":"Return","src":"3833:23:81"}]},"functionSelector":"273c1adf","id":31559,"implemented":true,"kind":"function","modifiers":[],"name":"getMaximumInvariantRatio","nameLocation":"3755:24:81","nodeType":"FunctionDefinition","overrides":{"id":31550,"nodeType":"OverrideSpecifier","overrides":[],"src":"3796:8:81"},"parameters":{"id":31549,"nodeType":"ParameterList","parameters":[],"src":"3779:2:81"},"returnParameters":{"id":31553,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31552,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31559,"src":"3814:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31551,"name":"uint256","nodeType":"ElementaryTypeName","src":"3814:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3813:9:81"},"scope":31591,"src":"3746:117:81","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[3050],"body":{"id":31567,"nodeType":"Block","src":"3949:25:81","statements":[{"expression":{"hexValue":"30","id":31565,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3966:1:81","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":31564,"id":31566,"nodeType":"Return","src":"3959:8:81"}]},"functionSelector":"ce20ece7","id":31568,"implemented":true,"kind":"function","modifiers":[],"name":"getMinimumSwapFeePercentage","nameLocation":"3878:27:81","nodeType":"FunctionDefinition","overrides":{"id":31561,"nodeType":"OverrideSpecifier","overrides":[],"src":"3922:8:81"},"parameters":{"id":31560,"nodeType":"ParameterList","parameters":[],"src":"3905:2:81"},"returnParameters":{"id":31564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31563,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31568,"src":"3940:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31562,"name":"uint256","nodeType":"ElementaryTypeName","src":"3940:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3939:9:81"},"scope":31591,"src":"3869:105:81","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[3056],"body":{"id":31576,"nodeType":"Block","src":"4060:28:81","statements":[{"expression":{"hexValue":"31653138","id":31574,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4077:4:81","typeDescriptions":{"typeIdentifier":"t_rational_1000000000000000000_by_1","typeString":"int_const 1000000000000000000"},"value":"1e18"},"functionReturnParameters":31573,"id":31575,"nodeType":"Return","src":"4070:11:81"}]},"functionSelector":"654cf15d","id":31577,"implemented":true,"kind":"function","modifiers":[],"name":"getMaximumSwapFeePercentage","nameLocation":"3989:27:81","nodeType":"FunctionDefinition","overrides":{"id":31570,"nodeType":"OverrideSpecifier","overrides":[],"src":"4033:8:81"},"parameters":{"id":31569,"nodeType":"ParameterList","parameters":[],"src":"4016:2:81"},"returnParameters":{"id":31573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31572,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31577,"src":"4051:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31571,"name":"uint256","nodeType":"ElementaryTypeName","src":"4051:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4050:9:81"},"scope":31591,"src":"3980:108:81","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[1504],"body":{"id":31589,"nodeType":"Block","src":"4167:42:81","statements":[{"expression":{"arguments":[{"hexValue":"4e6f7420696d706c656d656e746564","id":31586,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4184:17:81","typeDescriptions":{"typeIdentifier":"t_stringliteral_9f5474d7a5849b3f79e8aee7ea2c60bcd36a60a08b4fa41f97e2fccf1c4df98b","typeString":"literal_string \"Not implemented\""},"value":"Not implemented"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_9f5474d7a5849b3f79e8aee7ea2c60bcd36a60a08b4fa41f97e2fccf1c4df98b","typeString":"literal_string \"Not implemented\""}],"id":31585,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"4177:6:81","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":31587,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4177:25:81","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31588,"nodeType":"ExpressionStatement","src":"4177:25:81"}]},"functionSelector":"72c98186","id":31590,"implemented":true,"kind":"function","modifiers":[],"name":"onSwap","nameLocation":"4103:6:81","nodeType":"FunctionDefinition","parameters":{"id":31581,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31580,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31590,"src":"4110:23:81","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":31579,"nodeType":"UserDefinedTypeName","pathNode":{"id":31578,"name":"PoolSwapParams","nameLocations":["4110:14:81"],"nodeType":"IdentifierPath","referencedDeclaration":4772,"src":"4110:14:81"},"referencedDeclaration":4772,"src":"4110:14:81","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"src":"4109:25:81"},"returnParameters":{"id":31584,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31583,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31590,"src":"4158:7:81","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31582,"name":"uint256","nodeType":"ElementaryTypeName","src":"4158:7:81","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4157:9:81"},"scope":31591,"src":"4094:115:81","stateMutability":"pure","virtual":false,"visibility":"external"}],"scope":31592,"src":"318:3893:81","usedErrors":[7917,11367,11374],"usedEvents":[]}],"src":"46:4166:81"},"id":81},"@balancer-labs/v3-vault/contracts/test/BasicAuthorizerMock.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/test/BasicAuthorizerMock.sol","exportedSymbols":{"BasicAuthorizerMock":[31744],"IAuthorizer":[1455]},"id":31745,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":31593,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:82"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":31595,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31745,"sourceUnit":1456,"src":"72:91:82","symbolAliases":[{"foreign":{"id":31594,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1455,"src":"81:11:82","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":31596,"name":"IAuthorizer","nameLocations":["197:11:82"],"nodeType":"IdentifierPath","referencedDeclaration":1455,"src":"197:11:82"},"id":31597,"nodeType":"InheritanceSpecifier","src":"197:11:82"}],"canonicalName":"BasicAuthorizerMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":31744,"linearizedBaseContracts":[31744,1455],"name":"BasicAuthorizerMock","nameLocation":"174:19:82","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":31603,"mutability":"mutable","name":"_roles","nameLocation":"349:6:82","nodeType":"VariableDeclaration","scope":31744,"src":"271:84:82","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_bool_$_$","typeString":"mapping(bytes32 => mapping(address => bool))"},"typeName":{"id":31602,"keyName":"actionId","keyNameLocation":"287:8:82","keyType":{"id":31598,"name":"bytes32","nodeType":"ElementaryTypeName","src":"279:7:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"271:69:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_bool_$_$","typeString":"mapping(bytes32 => mapping(address => bool))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":31601,"keyName":"account","keyNameLocation":"315:7:82","keyType":{"id":31599,"name":"address","nodeType":"ElementaryTypeName","src":"307:7:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"299:40:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"hasRole","valueNameLocation":"331:7:82","valueType":{"id":31600,"name":"bool","nodeType":"ElementaryTypeName","src":"326:4:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}}},"visibility":"private"},{"constant":false,"id":31611,"mutability":"mutable","name":"_specificRoles","nameLocation":"549:14:82","nodeType":"VariableDeclaration","scope":31744,"src":"430:133:82","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$_$","typeString":"mapping(bytes32 => mapping(address => mapping(address => bool)))"},"typeName":{"id":31610,"keyName":"actionId","keyNameLocation":"446:8:82","keyType":{"id":31604,"name":"bytes32","nodeType":"ElementaryTypeName","src":"438:7:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"430:102:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$_$","typeString":"mapping(bytes32 => mapping(address => mapping(address => bool)))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":31609,"keyName":"account","keyNameLocation":"474:7:82","keyType":{"id":31605,"name":"address","nodeType":"ElementaryTypeName","src":"466:7:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"458:73:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$","typeString":"mapping(address => mapping(address => bool))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":31608,"keyName":"whereAddress","keyNameLocation":"501:12:82","keyType":{"id":31606,"name":"address","nodeType":"ElementaryTypeName","src":"493:7:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"485:45:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"hasRole","valueNameLocation":"522:7:82","valueType":{"id":31607,"name":"bool","nodeType":"ElementaryTypeName","src":"517:4:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}}}},"visibility":"private"},{"baseFunctions":[1454],"body":{"id":31634,"nodeType":"Block","src":"697:87:82","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":31632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":31624,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31614,"src":"730:4:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":31625,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31616,"src":"736:7:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":31626,"name":"where","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31618,"src":"745:5:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":31623,"name":"hasSpecificRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31743,"src":"714:15:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address,address) view returns (bool)"}},"id":31627,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"714:37:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":31629,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31614,"src":"763:4:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":31630,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31616,"src":"769:7:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":31628,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31683,"src":"755:7:82","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":31631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"755:22:82","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"714:63:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":31622,"id":31633,"nodeType":"Return","src":"707:70:82"}]},"documentation":{"id":31612,"nodeType":"StructuredDocumentation","src":"570:27:82","text":"@inheritdoc IAuthorizer"},"functionSelector":"9be2a884","id":31635,"implemented":true,"kind":"function","modifiers":[],"name":"canPerform","nameLocation":"611:10:82","nodeType":"FunctionDefinition","parameters":{"id":31619,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31614,"mutability":"mutable","name":"role","nameLocation":"630:4:82","nodeType":"VariableDeclaration","scope":31635,"src":"622:12:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":31613,"name":"bytes32","nodeType":"ElementaryTypeName","src":"622:7:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":31616,"mutability":"mutable","name":"account","nameLocation":"644:7:82","nodeType":"VariableDeclaration","scope":31635,"src":"636:15:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31615,"name":"address","nodeType":"ElementaryTypeName","src":"636:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":31618,"mutability":"mutable","name":"where","nameLocation":"661:5:82","nodeType":"VariableDeclaration","scope":31635,"src":"653:13:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31617,"name":"address","nodeType":"ElementaryTypeName","src":"653:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"621:46:82"},"returnParameters":{"id":31622,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31621,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31635,"src":"691:4:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":31620,"name":"bool","nodeType":"ElementaryTypeName","src":"691:4:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"690:6:82"},"scope":31744,"src":"602:182:82","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":31650,"nodeType":"Block","src":"849:45:82","statements":[{"expression":{"id":31648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":31642,"name":"_roles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31603,"src":"859:6:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_bool_$_$","typeString":"mapping(bytes32 => mapping(address => bool))"}},"id":31645,"indexExpression":{"id":31643,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31637,"src":"866:4:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"859:12:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":31646,"indexExpression":{"id":31644,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31639,"src":"872:7:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"859:21:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":31647,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"883:4:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"859:28:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31649,"nodeType":"ExpressionStatement","src":"859:28:82"}]},"functionSelector":"2f2ff15d","id":31651,"implemented":true,"kind":"function","modifiers":[],"name":"grantRole","nameLocation":"799:9:82","nodeType":"FunctionDefinition","parameters":{"id":31640,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31637,"mutability":"mutable","name":"role","nameLocation":"817:4:82","nodeType":"VariableDeclaration","scope":31651,"src":"809:12:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":31636,"name":"bytes32","nodeType":"ElementaryTypeName","src":"809:7:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":31639,"mutability":"mutable","name":"account","nameLocation":"831:7:82","nodeType":"VariableDeclaration","scope":31651,"src":"823:15:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31638,"name":"address","nodeType":"ElementaryTypeName","src":"823:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"808:31:82"},"returnParameters":{"id":31641,"nodeType":"ParameterList","parameters":[],"src":"849:0:82"},"scope":31744,"src":"790:104:82","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":31666,"nodeType":"Block","src":"960:46:82","statements":[{"expression":{"id":31664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":31658,"name":"_roles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31603,"src":"970:6:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_bool_$_$","typeString":"mapping(bytes32 => mapping(address => bool))"}},"id":31661,"indexExpression":{"id":31659,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31653,"src":"977:4:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"970:12:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":31662,"indexExpression":{"id":31660,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31655,"src":"983:7:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"970:21:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":31663,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"994:5:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"970:29:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31665,"nodeType":"ExpressionStatement","src":"970:29:82"}]},"functionSelector":"d547741f","id":31667,"implemented":true,"kind":"function","modifiers":[],"name":"revokeRole","nameLocation":"909:10:82","nodeType":"FunctionDefinition","parameters":{"id":31656,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31653,"mutability":"mutable","name":"role","nameLocation":"928:4:82","nodeType":"VariableDeclaration","scope":31667,"src":"920:12:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":31652,"name":"bytes32","nodeType":"ElementaryTypeName","src":"920:7:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":31655,"mutability":"mutable","name":"account","nameLocation":"942:7:82","nodeType":"VariableDeclaration","scope":31667,"src":"934:15:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31654,"name":"address","nodeType":"ElementaryTypeName","src":"934:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"919:31:82"},"returnParameters":{"id":31657,"nodeType":"ParameterList","parameters":[],"src":"960:0:82"},"scope":31744,"src":"900:106:82","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":31682,"nodeType":"Block","src":"1087:45:82","statements":[{"expression":{"baseExpression":{"baseExpression":{"id":31676,"name":"_roles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31603,"src":"1104:6:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_bool_$_$","typeString":"mapping(bytes32 => mapping(address => bool))"}},"id":31678,"indexExpression":{"id":31677,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31669,"src":"1111:4:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1104:12:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":31680,"indexExpression":{"id":31679,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31671,"src":"1117:7:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1104:21:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":31675,"id":31681,"nodeType":"Return","src":"1097:28:82"}]},"functionSelector":"91d14854","id":31683,"implemented":true,"kind":"function","modifiers":[],"name":"hasRole","nameLocation":"1021:7:82","nodeType":"FunctionDefinition","parameters":{"id":31672,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31669,"mutability":"mutable","name":"role","nameLocation":"1037:4:82","nodeType":"VariableDeclaration","scope":31683,"src":"1029:12:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":31668,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1029:7:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":31671,"mutability":"mutable","name":"account","nameLocation":"1051:7:82","nodeType":"VariableDeclaration","scope":31683,"src":"1043:15:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31670,"name":"address","nodeType":"ElementaryTypeName","src":"1043:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1028:31:82"},"returnParameters":{"id":31675,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31674,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31683,"src":"1081:4:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":31673,"name":"bool","nodeType":"ElementaryTypeName","src":"1081:4:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1080:6:82"},"scope":31744,"src":"1012:120:82","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":31702,"nodeType":"Block","src":"1263:60:82","statements":[{"expression":{"id":31700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"id":31692,"name":"_specificRoles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31611,"src":"1273:14:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$_$","typeString":"mapping(bytes32 => mapping(address => mapping(address => bool)))"}},"id":31696,"indexExpression":{"id":31693,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31685,"src":"1288:4:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1273:20:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$","typeString":"mapping(address => mapping(address => bool))"}},"id":31697,"indexExpression":{"id":31694,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31687,"src":"1294:7:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1273:29:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":31698,"indexExpression":{"id":31695,"name":"where","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31689,"src":"1303:5:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1273:36:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":31699,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1312:4:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"1273:43:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31701,"nodeType":"ExpressionStatement","src":"1273:43:82"}]},"functionSelector":"f5407f77","id":31703,"implemented":true,"kind":"function","modifiers":[],"name":"grantSpecificRole","nameLocation":"1190:17:82","nodeType":"FunctionDefinition","parameters":{"id":31690,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31685,"mutability":"mutable","name":"role","nameLocation":"1216:4:82","nodeType":"VariableDeclaration","scope":31703,"src":"1208:12:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":31684,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1208:7:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":31687,"mutability":"mutable","name":"account","nameLocation":"1230:7:82","nodeType":"VariableDeclaration","scope":31703,"src":"1222:15:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31686,"name":"address","nodeType":"ElementaryTypeName","src":"1222:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":31689,"mutability":"mutable","name":"where","nameLocation":"1247:5:82","nodeType":"VariableDeclaration","scope":31703,"src":"1239:13:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31688,"name":"address","nodeType":"ElementaryTypeName","src":"1239:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1207:46:82"},"returnParameters":{"id":31691,"nodeType":"ParameterList","parameters":[],"src":"1263:0:82"},"scope":31744,"src":"1181:142:82","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":31722,"nodeType":"Block","src":"1412:61:82","statements":[{"expression":{"id":31720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"id":31712,"name":"_specificRoles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31611,"src":"1422:14:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$_$","typeString":"mapping(bytes32 => mapping(address => mapping(address => bool)))"}},"id":31716,"indexExpression":{"id":31713,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31705,"src":"1437:4:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1422:20:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$","typeString":"mapping(address => mapping(address => bool))"}},"id":31717,"indexExpression":{"id":31714,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31707,"src":"1443:7:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1422:29:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":31718,"indexExpression":{"id":31715,"name":"where","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31709,"src":"1452:5:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1422:36:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":31719,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1461:5:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"1422:44:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":31721,"nodeType":"ExpressionStatement","src":"1422:44:82"}]},"functionSelector":"686c7a1d","id":31723,"implemented":true,"kind":"function","modifiers":[],"name":"revokeSpecificRole","nameLocation":"1338:18:82","nodeType":"FunctionDefinition","parameters":{"id":31710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31705,"mutability":"mutable","name":"role","nameLocation":"1365:4:82","nodeType":"VariableDeclaration","scope":31723,"src":"1357:12:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":31704,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1357:7:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":31707,"mutability":"mutable","name":"account","nameLocation":"1379:7:82","nodeType":"VariableDeclaration","scope":31723,"src":"1371:15:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31706,"name":"address","nodeType":"ElementaryTypeName","src":"1371:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":31709,"mutability":"mutable","name":"where","nameLocation":"1396:5:82","nodeType":"VariableDeclaration","scope":31723,"src":"1388:13:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31708,"name":"address","nodeType":"ElementaryTypeName","src":"1388:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1356:46:82"},"returnParameters":{"id":31711,"nodeType":"ParameterList","parameters":[],"src":"1412:0:82"},"scope":31744,"src":"1329:144:82","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":31742,"nodeType":"Block","src":"1577:60:82","statements":[{"expression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":31734,"name":"_specificRoles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31611,"src":"1594:14:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$_$","typeString":"mapping(bytes32 => mapping(address => mapping(address => bool)))"}},"id":31736,"indexExpression":{"id":31735,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31725,"src":"1609:4:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1594:20:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$","typeString":"mapping(address => mapping(address => bool))"}},"id":31738,"indexExpression":{"id":31737,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31727,"src":"1615:7:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1594:29:82","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":31740,"indexExpression":{"id":31739,"name":"where","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31729,"src":"1624:5:82","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1594:36:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":31733,"id":31741,"nodeType":"Return","src":"1587:43:82"}]},"functionSelector":"b7cfddf6","id":31743,"implemented":true,"kind":"function","modifiers":[],"name":"hasSpecificRole","nameLocation":"1488:15:82","nodeType":"FunctionDefinition","parameters":{"id":31730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31725,"mutability":"mutable","name":"role","nameLocation":"1512:4:82","nodeType":"VariableDeclaration","scope":31743,"src":"1504:12:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":31724,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1504:7:82","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":31727,"mutability":"mutable","name":"account","nameLocation":"1526:7:82","nodeType":"VariableDeclaration","scope":31743,"src":"1518:15:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31726,"name":"address","nodeType":"ElementaryTypeName","src":"1518:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":31729,"mutability":"mutable","name":"where","nameLocation":"1543:5:82","nodeType":"VariableDeclaration","scope":31743,"src":"1535:13:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":31728,"name":"address","nodeType":"ElementaryTypeName","src":"1535:7:82","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1503:46:82"},"returnParameters":{"id":31733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31732,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31743,"src":"1571:4:82","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":31731,"name":"bool","nodeType":"ElementaryTypeName","src":"1571:4:82","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1570:6:82"},"scope":31744,"src":"1479:158:82","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":31745,"src":"165:1474:82","usedErrors":[],"usedEvents":[]}],"src":"46:1594:82"},"id":82},"@balancer-labs/v3-vault/contracts/test/BatchRouterMock.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/test/BatchRouterMock.sol","exportedSymbols":{"AddressToUintMappingSlot":[6860],"BatchRouter":[13916],"BatchRouterMock":[31853],"IPermit2":[48578],"IVault":[3111],"IWETH":[291],"MOCK_BATCH_ROUTER_VERSION":[31761],"TransientEnumerableSet":[10693]},"id":31854,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":31746,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:83"},{"absolutePath":"permit2/src/interfaces/IPermit2.sol","file":"permit2/src/interfaces/IPermit2.sol","id":31748,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31854,"sourceUnit":48579,"src":"72:63:83","symbolAliases":[{"foreign":{"id":31747,"name":"IPermit2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48578,"src":"81:8:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":31750,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31854,"sourceUnit":3112,"src":"137:81:83","symbolAliases":[{"foreign":{"id":31749,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"146:6:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol","id":31752,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31854,"sourceUnit":292,"src":"219:93:83","symbolAliases":[{"foreign":{"id":31751,"name":"IWETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":291,"src":"228:5:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","id":31754,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31854,"sourceUnit":7443,"src":"314:126:83","symbolAliases":[{"foreign":{"id":31753,"name":"AddressToUintMappingSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6860,"src":"327:24:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/TransientEnumerableSet.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/TransientEnumerableSet.sol","id":31756,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31854,"sourceUnit":10694,"src":"441:128:83","symbolAliases":[{"foreign":{"id":31755,"name":"TransientEnumerableSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10693,"src":"454:22:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/BatchRouter.sol","file":"../BatchRouter.sol","id":31758,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31854,"sourceUnit":13917,"src":"571:49:83","symbolAliases":[{"foreign":{"id":31757,"name":"BatchRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":13916,"src":"580:11:83","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"constant":true,"id":31761,"mutability":"constant","name":"MOCK_BATCH_ROUTER_VERSION","nameLocation":"638:25:83","nodeType":"VariableDeclaration","scope":31854,"src":"622:65:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":31759,"name":"string","nodeType":"ElementaryTypeName","src":"622:6:83","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"4d6f636b204261746368526f75746572207631","id":31760,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"666:21:83","typeDescriptions":{"typeIdentifier":"t_stringliteral_a1a58c329204c6a3c8a4545c55336c6a42364bfe3713a147b204afa258042cd4","typeString":"literal_string \"Mock BatchRouter v1\""},"value":"Mock BatchRouter v1"},"visibility":"internal"},{"abstract":false,"baseContracts":[{"baseName":{"id":31762,"name":"BatchRouter","nameLocations":["718:11:83"],"nodeType":"IdentifierPath","referencedDeclaration":13916,"src":"718:11:83"},"id":31763,"nodeType":"InheritanceSpecifier","src":"718:11:83"}],"canonicalName":"BatchRouterMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":31853,"linearizedBaseContracts":[31853,13916,14207,19198,7482,273,9942,28149,19328,3041,3025,1735],"name":"BatchRouterMock","nameLocation":"699:15:83","nodeType":"ContractDefinition","nodes":[{"body":{"id":31781,"nodeType":"Block","src":"883:64:83","statements":[]},"id":31782,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":31775,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31766,"src":"834:5:83","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},{"id":31776,"name":"weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31769,"src":"841:4:83","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},{"id":31777,"name":"permit2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31772,"src":"847:7:83","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"}},{"id":31778,"name":"MOCK_BATCH_ROUTER_VERSION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31761,"src":"856:25:83","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":31779,"kind":"baseConstructorSpecifier","modifierName":{"id":31774,"name":"BatchRouter","nameLocations":["822:11:83"],"nodeType":"IdentifierPath","referencedDeclaration":13916,"src":"822:11:83"},"nodeType":"ModifierInvocation","src":"822:60:83"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":31773,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31766,"mutability":"mutable","name":"vault","nameLocation":"764:5:83","nodeType":"VariableDeclaration","scope":31782,"src":"757:12:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":31765,"nodeType":"UserDefinedTypeName","pathNode":{"id":31764,"name":"IVault","nameLocations":["757:6:83"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"757:6:83"},"referencedDeclaration":3111,"src":"757:6:83","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":31769,"mutability":"mutable","name":"weth","nameLocation":"785:4:83","nodeType":"VariableDeclaration","scope":31782,"src":"779:10:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"},"typeName":{"id":31768,"nodeType":"UserDefinedTypeName","pathNode":{"id":31767,"name":"IWETH","nameLocations":["779:5:83"],"nodeType":"IdentifierPath","referencedDeclaration":291,"src":"779:5:83"},"referencedDeclaration":291,"src":"779:5:83","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},"visibility":"internal"},{"constant":false,"id":31772,"mutability":"mutable","name":"permit2","nameLocation":"808:7:83","nodeType":"VariableDeclaration","scope":31782,"src":"799:16:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"},"typeName":{"id":31771,"nodeType":"UserDefinedTypeName","pathNode":{"id":31770,"name":"IPermit2","nameLocations":["799:8:83"],"nodeType":"IdentifierPath","referencedDeclaration":48578,"src":"799:8:83"},"referencedDeclaration":48578,"src":"799:8:83","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"}},"visibility":"internal"}],"src":"747:74:83"},"returnParameters":{"id":31780,"nodeType":"ParameterList","parameters":[],"src":"883:0:83"},"scope":31853,"src":"736:211:83","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":31801,"nodeType":"Block","src":"1029:210:83","statements":[{"assignments":[31791],"declarations":[{"constant":false,"id":31791,"mutability":"mutable","name":"enumerableSet","nameLocation":"1081:13:83","nodeType":"VariableDeclaration","scope":31801,"src":"1039:55:83","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"},"typeName":{"id":31790,"nodeType":"UserDefinedTypeName","pathNode":{"id":31789,"name":"TransientEnumerableSet.AddressSet","nameLocations":["1039:22:83","1062:10:83"],"nodeType":"IdentifierPath","referencedDeclaration":10308,"src":"1039:33:83"},"referencedDeclaration":10308,"src":"1039:33:83","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"}},"visibility":"internal"}],"id":31794,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":31792,"name":"_currentSwapTokensIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14000,"src":"1097:20:83","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function () view returns (struct TransientEnumerableSet.AddressSet storage pointer)"}},"id":31793,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1097:22:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"1039:80:83"},{"assignments":[31796],"declarations":[{"constant":false,"id":31796,"mutability":"mutable","name":"slot","nameLocation":"1138:4:83","nodeType":"VariableDeclaration","scope":31801,"src":"1130:12:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":31795,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1130:7:83","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":31797,"nodeType":"VariableDeclarationStatement","src":"1130:12:83"},{"AST":{"nativeSrc":"1161:50:83","nodeType":"YulBlock","src":"1161:50:83","statements":[{"nativeSrc":"1175:26:83","nodeType":"YulAssignment","src":"1175:26:83","value":{"name":"enumerableSet.slot","nativeSrc":"1183:18:83","nodeType":"YulIdentifier","src":"1183:18:83"},"variableNames":[{"name":"slot","nativeSrc":"1175:4:83","nodeType":"YulIdentifier","src":"1175:4:83"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":31791,"isOffset":false,"isSlot":true,"src":"1183:18:83","suffix":"slot","valueSize":1},{"declaration":31796,"isOffset":false,"isSlot":false,"src":"1175:4:83","valueSize":1}],"id":31798,"nodeType":"InlineAssembly","src":"1152:59:83"},{"expression":{"id":31799,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31796,"src":"1228:4:83","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":31786,"id":31800,"nodeType":"Return","src":"1221:11:83"}]},"functionSelector":"8c824cd9","id":31802,"implemented":true,"kind":"function","modifiers":[],"name":"manualGetCurrentSwapTokensInSlot","nameLocation":"962:32:83","nodeType":"FunctionDefinition","parameters":{"id":31783,"nodeType":"ParameterList","parameters":[],"src":"994:2:83"},"returnParameters":{"id":31786,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31785,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31802,"src":"1020:7:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":31784,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1020:7:83","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1019:9:83"},"scope":31853,"src":"953:286:83","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":31821,"nodeType":"Block","src":"1322:211:83","statements":[{"assignments":[31811],"declarations":[{"constant":false,"id":31811,"mutability":"mutable","name":"enumerableSet","nameLocation":"1374:13:83","nodeType":"VariableDeclaration","scope":31821,"src":"1332:55:83","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"},"typeName":{"id":31810,"nodeType":"UserDefinedTypeName","pathNode":{"id":31809,"name":"TransientEnumerableSet.AddressSet","nameLocations":["1332:22:83","1355:10:83"],"nodeType":"IdentifierPath","referencedDeclaration":10308,"src":"1332:33:83"},"referencedDeclaration":10308,"src":"1332:33:83","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet"}},"visibility":"internal"}],"id":31814,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":31812,"name":"_currentSwapTokensOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14012,"src":"1390:21:83","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_struct$_AddressSet_$10308_storage_ptr_$","typeString":"function () view returns (struct TransientEnumerableSet.AddressSet storage pointer)"}},"id":31813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1390:23:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$10308_storage_ptr","typeString":"struct TransientEnumerableSet.AddressSet storage pointer"}},"nodeType":"VariableDeclarationStatement","src":"1332:81:83"},{"assignments":[31816],"declarations":[{"constant":false,"id":31816,"mutability":"mutable","name":"slot","nameLocation":"1432:4:83","nodeType":"VariableDeclaration","scope":31821,"src":"1424:12:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":31815,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1424:7:83","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":31817,"nodeType":"VariableDeclarationStatement","src":"1424:12:83"},{"AST":{"nativeSrc":"1455:50:83","nodeType":"YulBlock","src":"1455:50:83","statements":[{"nativeSrc":"1469:26:83","nodeType":"YulAssignment","src":"1469:26:83","value":{"name":"enumerableSet.slot","nativeSrc":"1477:18:83","nodeType":"YulIdentifier","src":"1477:18:83"},"variableNames":[{"name":"slot","nativeSrc":"1469:4:83","nodeType":"YulIdentifier","src":"1469:4:83"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":31811,"isOffset":false,"isSlot":true,"src":"1477:18:83","suffix":"slot","valueSize":1},{"declaration":31816,"isOffset":false,"isSlot":false,"src":"1469:4:83","valueSize":1}],"id":31818,"nodeType":"InlineAssembly","src":"1446:59:83"},{"expression":{"id":31819,"name":"slot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31816,"src":"1522:4:83","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":31806,"id":31820,"nodeType":"Return","src":"1515:11:83"}]},"functionSelector":"96123406","id":31822,"implemented":true,"kind":"function","modifiers":[],"name":"manualGetCurrentSwapTokensOutSlot","nameLocation":"1254:33:83","nodeType":"FunctionDefinition","parameters":{"id":31803,"nodeType":"ParameterList","parameters":[],"src":"1287:2:83"},"returnParameters":{"id":31806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31805,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31822,"src":"1313:7:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":31804,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1313:7:83","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1312:9:83"},"scope":31853,"src":"1245:288:83","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":31831,"nodeType":"Block","src":"1634:52:83","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":31828,"name":"_currentSwapTokenInAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14024,"src":"1651:26:83","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function () view returns (AddressToUintMappingSlot)"}},"id":31829,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1651:28:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"functionReturnParameters":31827,"id":31830,"nodeType":"Return","src":"1644:35:83"}]},"functionSelector":"48bbd869","id":31832,"implemented":true,"kind":"function","modifiers":[],"name":"manualGetCurrentSwapTokenInAmounts","nameLocation":"1548:34:83","nodeType":"FunctionDefinition","parameters":{"id":31823,"nodeType":"ParameterList","parameters":[],"src":"1582:2:83"},"returnParameters":{"id":31827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31826,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31832,"src":"1608:24:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"},"typeName":{"id":31825,"nodeType":"UserDefinedTypeName","pathNode":{"id":31824,"name":"AddressToUintMappingSlot","nameLocations":["1608:24:83"],"nodeType":"IdentifierPath","referencedDeclaration":6860,"src":"1608:24:83"},"referencedDeclaration":6860,"src":"1608:24:83","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"visibility":"internal"}],"src":"1607:26:83"},"scope":31853,"src":"1539:147:83","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":31841,"nodeType":"Block","src":"1788:53:83","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":31838,"name":"_currentSwapTokenOutAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14036,"src":"1805:27:83","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function () view returns (AddressToUintMappingSlot)"}},"id":31839,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1805:29:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"functionReturnParameters":31837,"id":31840,"nodeType":"Return","src":"1798:36:83"}]},"functionSelector":"0f8fb1cc","id":31842,"implemented":true,"kind":"function","modifiers":[],"name":"manualGetCurrentSwapTokenOutAmounts","nameLocation":"1701:35:83","nodeType":"FunctionDefinition","parameters":{"id":31833,"nodeType":"ParameterList","parameters":[],"src":"1736:2:83"},"returnParameters":{"id":31837,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31836,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31842,"src":"1762:24:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"},"typeName":{"id":31835,"nodeType":"UserDefinedTypeName","pathNode":{"id":31834,"name":"AddressToUintMappingSlot","nameLocations":["1762:24:83"],"nodeType":"IdentifierPath","referencedDeclaration":6860,"src":"1762:24:83"},"referencedDeclaration":6860,"src":"1762:24:83","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"visibility":"internal"}],"src":"1761:26:83"},"scope":31853,"src":"1692:149:83","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":31851,"nodeType":"Block","src":"1936:46:83","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":31848,"name":"_settledTokenAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14048,"src":"1953:20:83","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_AddressToUintMappingSlot_$6860_$","typeString":"function () view returns (AddressToUintMappingSlot)"}},"id":31849,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1953:22:83","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"functionReturnParameters":31847,"id":31850,"nodeType":"Return","src":"1946:29:83"}]},"functionSelector":"cd791ccc","id":31852,"implemented":true,"kind":"function","modifiers":[],"name":"manualGetSettledTokenAmounts","nameLocation":"1856:28:83","nodeType":"FunctionDefinition","parameters":{"id":31843,"nodeType":"ParameterList","parameters":[],"src":"1884:2:83"},"returnParameters":{"id":31847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31846,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31852,"src":"1910:24:83","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"},"typeName":{"id":31845,"nodeType":"UserDefinedTypeName","pathNode":{"id":31844,"name":"AddressToUintMappingSlot","nameLocations":["1910:24:83"],"nodeType":"IdentifierPath","referencedDeclaration":6860,"src":"1910:24:83"},"referencedDeclaration":6860,"src":"1910:24:83","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_AddressToUintMappingSlot_$6860","typeString":"AddressToUintMappingSlot"}},"visibility":"internal"}],"src":"1909:26:83"},"scope":31853,"src":"1847:135:83","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":31854,"src":"690:1294:83","usedErrors":[3031,3034,3640,5901,6355,6872,9886,31059,40188,40469,40474,40477,43238],"usedEvents":[]}],"src":"46:1939:83"},"id":83},"@balancer-labs/v3-vault/contracts/test/BufferRouterMock.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/test/BufferRouterMock.sol","exportedSymbols":{"BufferRouter":[14662],"BufferRouterMock":[31948],"IERC4626":[39833],"IPermit2":[48578],"IVault":[3111],"IWETH":[291],"MOCK_BUFFER_ROUTER_VERSION":[31868]},"id":31949,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":31855,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:84"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":31857,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31949,"sourceUnit":39834,"src":"72:75:84","symbolAliases":[{"foreign":{"id":31856,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39833,"src":"81:8:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"permit2/src/interfaces/IPermit2.sol","file":"permit2/src/interfaces/IPermit2.sol","id":31859,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31949,"sourceUnit":48579,"src":"148:63:84","symbolAliases":[{"foreign":{"id":31858,"name":"IPermit2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48578,"src":"157:8:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol","id":31861,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31949,"sourceUnit":292,"src":"213:93:84","symbolAliases":[{"foreign":{"id":31860,"name":"IWETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":291,"src":"222:5:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":31863,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31949,"sourceUnit":3112,"src":"307:81:84","symbolAliases":[{"foreign":{"id":31862,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"316:6:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/BufferRouter.sol","file":"../BufferRouter.sol","id":31865,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":31949,"sourceUnit":14663,"src":"390:51:84","symbolAliases":[{"foreign":{"id":31864,"name":"BufferRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14662,"src":"399:12:84","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"constant":true,"id":31868,"mutability":"constant","name":"MOCK_BUFFER_ROUTER_VERSION","nameLocation":"459:26:84","nodeType":"VariableDeclaration","scope":31949,"src":"443:61:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":31866,"name":"string","nodeType":"ElementaryTypeName","src":"443:6:84","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"4d6f636b20526f75746572207631","id":31867,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"488:16:84","typeDescriptions":{"typeIdentifier":"t_stringliteral_750944b6d19ac3b936d3601e57fe38302b01d85b9ac34ad5425c49b78664201a","typeString":"literal_string \"Mock Router v1\""},"value":"Mock Router v1"},"visibility":"internal"},{"abstract":false,"baseContracts":[{"baseName":{"id":31869,"name":"BufferRouter","nameLocations":["536:12:84"],"nodeType":"IdentifierPath","referencedDeclaration":14662,"src":"536:12:84"},"id":31870,"nodeType":"InheritanceSpecifier","src":"536:12:84"}],"canonicalName":"BufferRouterMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":31948,"linearizedBaseContracts":[31948,14662,19198,7482,273,9942,28149,19328,3041,3025,1816],"name":"BufferRouterMock","nameLocation":"516:16:84","nodeType":"ContractDefinition","nodes":[{"errorSelector":"f5ab33e5","id":31872,"name":"MockErrorCode","nameLocation":"561:13:84","nodeType":"ErrorDefinition","parameters":{"id":31871,"nodeType":"ParameterList","parameters":[],"src":"574:2:84"},"src":"555:22:84"},{"body":{"id":31890,"nodeType":"Block","src":"732:64:84","statements":[]},"id":31891,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":31884,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31875,"src":"682:5:84","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},{"id":31885,"name":"weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31878,"src":"689:4:84","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},{"id":31886,"name":"permit2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31881,"src":"695:7:84","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"}},{"id":31887,"name":"MOCK_BUFFER_ROUTER_VERSION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31868,"src":"704:26:84","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":31888,"kind":"baseConstructorSpecifier","modifierName":{"id":31883,"name":"BufferRouter","nameLocations":["669:12:84"],"nodeType":"IdentifierPath","referencedDeclaration":14662,"src":"669:12:84"},"nodeType":"ModifierInvocation","src":"669:62:84"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":31882,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31875,"mutability":"mutable","name":"vault","nameLocation":"611:5:84","nodeType":"VariableDeclaration","scope":31891,"src":"604:12:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":31874,"nodeType":"UserDefinedTypeName","pathNode":{"id":31873,"name":"IVault","nameLocations":["604:6:84"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"604:6:84"},"referencedDeclaration":3111,"src":"604:6:84","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":31878,"mutability":"mutable","name":"weth","nameLocation":"632:4:84","nodeType":"VariableDeclaration","scope":31891,"src":"626:10:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"},"typeName":{"id":31877,"nodeType":"UserDefinedTypeName","pathNode":{"id":31876,"name":"IWETH","nameLocations":["626:5:84"],"nodeType":"IdentifierPath","referencedDeclaration":291,"src":"626:5:84"},"referencedDeclaration":291,"src":"626:5:84","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},"visibility":"internal"},{"constant":false,"id":31881,"mutability":"mutable","name":"permit2","nameLocation":"655:7:84","nodeType":"VariableDeclaration","scope":31891,"src":"646:16:84","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"},"typeName":{"id":31880,"nodeType":"UserDefinedTypeName","pathNode":{"id":31879,"name":"IPermit2","nameLocations":["646:8:84"],"nodeType":"IdentifierPath","referencedDeclaration":48578,"src":"646:8:84"},"referencedDeclaration":48578,"src":"646:8:84","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"}},"visibility":"internal"}],"src":"594:74:84"},"returnParameters":{"id":31889,"nodeType":"ParameterList","parameters":[],"src":"732:0:84"},"scope":31948,"src":"583:213:84","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":31918,"nodeType":"Block","src":"876:112:84","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"hexValue":"30","id":31906,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"956:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":31905,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"948:7:84","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31904,"name":"address","nodeType":"ElementaryTypeName","src":"948:7:84","typeDescriptions":{}}},"id":31907,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"948:10:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31903,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39833,"src":"939:8:84","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$39833_$","typeString":"type(contract IERC4626)"}},"id":31908,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"939:20:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"hexValue":"30","id":31909,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"961:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":31910,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"964:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":31911,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"967:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"arguments":[{"hexValue":"30","id":31914,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"978:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":31913,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"970:7:84","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31912,"name":"address","nodeType":"ElementaryTypeName","src":"970:7:84","typeDescriptions":{}}},"id":31915,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"970:10:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[{"id":31899,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"907:4:84","typeDescriptions":{"typeIdentifier":"t_contract$_BufferRouterMock_$31948","typeString":"contract BufferRouterMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BufferRouterMock_$31948","typeString":"contract BufferRouterMock"}],"id":31898,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"899:8:84","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":31897,"name":"address","nodeType":"ElementaryTypeName","src":"899:8:84","stateMutability":"payable","typeDescriptions":{}}},"id":31900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"899:13:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":31896,"name":"BufferRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14662,"src":"886:12:84","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BufferRouter_$14662_$","typeString":"type(contract BufferRouter)"}},"id":31901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"886:27:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_BufferRouter_$14662","typeString":"contract BufferRouter"}},"id":31902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"914:24:84","memberName":"addLiquidityToBufferHook","nodeType":"MemberAccess","referencedDeclaration":14463,"src":"886:52:84","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$returns$_t_uint256_$_t_uint256_$","typeString":"function (contract IERC4626,uint256,uint256,uint256,address) external returns (uint256,uint256)"}},"id":31916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"886:95:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"id":31917,"nodeType":"ExpressionStatement","src":"886:95:84"}]},"functionSelector":"8afe5c38","id":31919,"implemented":true,"kind":"function","modifiers":[{"id":31894,"kind":"modifierInvocation","modifierName":{"id":31893,"name":"nonReentrant","nameLocations":["863:12:84"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"863:12:84"},"nodeType":"ModifierInvocation","src":"863:12:84"}],"name":"manualReentrancyAddLiquidityToBufferHook","nameLocation":"811:40:84","nodeType":"FunctionDefinition","parameters":{"id":31892,"nodeType":"ParameterList","parameters":[],"src":"851:2:84"},"returnParameters":{"id":31895,"nodeType":"ParameterList","parameters":[],"src":"876:0:84"},"scope":31948,"src":"802:186:84","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":31946,"nodeType":"Block","src":"1064:108:84","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"hexValue":"30","id":31934,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1140:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":31933,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1132:7:84","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31932,"name":"address","nodeType":"ElementaryTypeName","src":"1132:7:84","typeDescriptions":{}}},"id":31935,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1132:10:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":31931,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39833,"src":"1123:8:84","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC4626_$39833_$","typeString":"type(contract IERC4626)"}},"id":31936,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1123:20:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"hexValue":"30","id":31937,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1145:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":31938,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1148:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"30","id":31939,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1151:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"arguments":[{"hexValue":"30","id":31942,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1162:1:84","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":31941,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1154:7:84","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":31940,"name":"address","nodeType":"ElementaryTypeName","src":"1154:7:84","typeDescriptions":{}}},"id":31943,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1154:10:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[{"id":31927,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1095:4:84","typeDescriptions":{"typeIdentifier":"t_contract$_BufferRouterMock_$31948","typeString":"contract BufferRouterMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_BufferRouterMock_$31948","typeString":"contract BufferRouterMock"}],"id":31926,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1087:8:84","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":31925,"name":"address","nodeType":"ElementaryTypeName","src":"1087:8:84","stateMutability":"payable","typeDescriptions":{}}},"id":31928,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1087:13:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":31924,"name":"BufferRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14662,"src":"1074:12:84","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BufferRouter_$14662_$","typeString":"type(contract BufferRouter)"}},"id":31929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1074:27:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_BufferRouter_$14662","typeString":"contract BufferRouter"}},"id":31930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1102:20:84","memberName":"initializeBufferHook","nodeType":"MemberAccess","referencedDeclaration":14356,"src":"1074:48:84","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (contract IERC4626,uint256,uint256,uint256,address) external returns (uint256)"}},"id":31944,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1074:91:84","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":31945,"nodeType":"ExpressionStatement","src":"1074:91:84"}]},"functionSelector":"bc48e97f","id":31947,"implemented":true,"kind":"function","modifiers":[{"id":31922,"kind":"modifierInvocation","modifierName":{"id":31921,"name":"nonReentrant","nameLocations":["1051:12:84"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"1051:12:84"},"nodeType":"ModifierInvocation","src":"1051:12:84"}],"name":"manualReentrancyInitializeBufferHook","nameLocation":"1003:36:84","nodeType":"FunctionDefinition","parameters":{"id":31920,"nodeType":"ParameterList","parameters":[],"src":"1039:2:84"},"returnParameters":{"id":31923,"nodeType":"ParameterList","parameters":[],"src":"1064:0:84"},"scope":31948,"src":"994:178:84","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":31949,"src":"507:667:84","usedErrors":[3031,3034,3640,5901,6355,9886,31059,31872,40188,40469,40474,40477,43238],"usedEvents":[]}],"src":"46:1129:84"},"id":84},"@balancer-labs/v3-vault/contracts/test/InputHelpersMock.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/test/InputHelpersMock.sol","exportedSymbols":{"IERC20":[40109],"InputHelpers":[6193],"InputHelpersMock":[32067],"TokenConfig":[4694]},"id":32068,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":31950,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:85"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":31952,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":32068,"sourceUnit":40110,"src":"72:72:85","symbolAliases":[{"foreign":{"id":31951,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"81:6:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":31954,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":32068,"sourceUnit":4872,"src":"146:90:85","symbolAliases":[{"foreign":{"id":31953,"name":"TokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4694,"src":"155:11:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","id":31956,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":32068,"sourceUnit":6194,"src":"238:99:85","symbolAliases":[{"foreign":{"id":31955,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6193,"src":"247:12:85","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"InputHelpersMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":32067,"linearizedBaseContracts":[32067],"name":"InputHelpersMock","nameLocation":"348:16:85","nodeType":"ContractDefinition","nodes":[{"body":{"id":31972,"nodeType":"Block","src":"455:55:85","statements":[{"expression":{"arguments":[{"id":31969,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31960,"src":"496:6:85","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}],"expression":{"id":31967,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6193,"src":"472:12:85","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$6193_$","typeString":"type(library InputHelpers)"}},"id":31968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"485:10:85","memberName":"sortTokens","nodeType":"MemberAccess","referencedDeclaration":6085,"src":"472:23:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$returns$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$","typeString":"function (contract IERC20[] memory) pure returns (contract IERC20[] memory)"}},"id":31970,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"472:31:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"functionReturnParameters":31966,"id":31971,"nodeType":"Return","src":"465:38:85"}]},"functionSelector":"136deb1c","id":31973,"implemented":true,"kind":"function","modifiers":[],"name":"sortTokens","nameLocation":"380:10:85","nodeType":"FunctionDefinition","parameters":{"id":31961,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31960,"mutability":"mutable","name":"tokens","nameLocation":"407:6:85","nodeType":"VariableDeclaration","scope":31973,"src":"391:22:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":31958,"nodeType":"UserDefinedTypeName","pathNode":{"id":31957,"name":"IERC20","nameLocations":["391:6:85"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"391:6:85"},"referencedDeclaration":40109,"src":"391:6:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":31959,"nodeType":"ArrayTypeName","src":"391:8:85","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"390:24:85"},"returnParameters":{"id":31966,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31965,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":31973,"src":"438:15:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":31963,"nodeType":"UserDefinedTypeName","pathNode":{"id":31962,"name":"IERC20","nameLocations":["438:6:85"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"438:6:85"},"referencedDeclaration":40109,"src":"438:6:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":31964,"nodeType":"ArrayTypeName","src":"438:8:85","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"437:17:85"},"scope":32067,"src":"371:139:85","stateMutability":"pure","virtual":false,"visibility":"external"},{"body":{"id":31986,"nodeType":"Block","src":"582:56:85","statements":[{"expression":{"arguments":[{"id":31983,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31977,"src":"624:6:85","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}],"expression":{"id":31980,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6193,"src":"592:12:85","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$6193_$","typeString":"type(library InputHelpers)"}},"id":31982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"605:18:85","memberName":"ensureSortedTokens","nodeType":"MemberAccess","referencedDeclaration":6140,"src":"592:31:85","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$returns$__$","typeString":"function (contract IERC20[] memory) pure"}},"id":31984,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"592:39:85","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":31985,"nodeType":"ExpressionStatement","src":"592:39:85"}]},"functionSelector":"a3aef0b8","id":31987,"implemented":true,"kind":"function","modifiers":[],"name":"ensureSortedTokens","nameLocation":"525:18:85","nodeType":"FunctionDefinition","parameters":{"id":31978,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31977,"mutability":"mutable","name":"tokens","nameLocation":"560:6:85","nodeType":"VariableDeclaration","scope":31987,"src":"544:22:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":31975,"nodeType":"UserDefinedTypeName","pathNode":{"id":31974,"name":"IERC20","nameLocations":["544:6:85"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"544:6:85"},"referencedDeclaration":40109,"src":"544:6:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":31976,"nodeType":"ArrayTypeName","src":"544:8:85","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"543:24:85"},"returnParameters":{"id":31979,"nodeType":"ParameterList","parameters":[],"src":"582:0:85"},"scope":32067,"src":"516:122:85","stateMutability":"pure","virtual":false,"visibility":"external"},{"body":{"id":32065,"nodeType":"Block","src":"746:433:85","statements":[{"body":{"id":32061,"nodeType":"Block","src":"809:335:85","statements":[{"body":{"id":32059,"nodeType":"Block","src":"880:254:85","statements":[{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"id":32036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":32026,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31991,"src":"902:11:85","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":32028,"indexExpression":{"id":32027,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32012,"src":"914:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"902:14:85","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":32029,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"917:5:85","memberName":"token","nodeType":"MemberAccess","referencedDeclaration":4685,"src":"902:20:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"baseExpression":{"id":32030,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31991,"src":"925:11:85","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":32034,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32031,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32012,"src":"937:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":32032,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"941:1:85","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"937:5:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"925:18:85","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":32035,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"944:5:85","memberName":"token","nodeType":"MemberAccess","referencedDeclaration":4685,"src":"925:24:85","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"902:47:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32058,"nodeType":"IfStatement","src":"898:222:85","trueBody":{"id":32057,"nodeType":"Block","src":"951:169:85","statements":[{"expression":{"id":32055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":32037,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31991,"src":"1027:11:85","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":32039,"indexExpression":{"id":32038,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32012,"src":"1039:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1027:14:85","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},{"baseExpression":{"id":32040,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31991,"src":"1043:11:85","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":32044,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32041,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32012,"src":"1055:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":32042,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1059:1:85","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1055:5:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1043:18:85","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}}],"id":32045,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"1026:36:85","typeDescriptions":{"typeIdentifier":"t_tuple$_t_struct$_TokenConfig_$4694_memory_ptr_$_t_struct$_TokenConfig_$4694_memory_ptr_$","typeString":"tuple(struct TokenConfig memory,struct TokenConfig memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"baseExpression":{"id":32046,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31991,"src":"1066:11:85","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":32050,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32047,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32012,"src":"1078:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":32048,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1082:1:85","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1078:5:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1066:18:85","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},{"baseExpression":{"id":32051,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31991,"src":"1086:11:85","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":32053,"indexExpression":{"id":32052,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32012,"src":"1098:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1086:14:85","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}}],"id":32054,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1065:36:85","typeDescriptions":{"typeIdentifier":"t_tuple$_t_struct$_TokenConfig_$4694_memory_ptr_$_t_struct$_TokenConfig_$4694_memory_ptr_$","typeString":"tuple(struct TokenConfig memory,struct TokenConfig memory)"}},"src":"1026:75:85","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32056,"nodeType":"ExpressionStatement","src":"1026:75:85"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32015,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32012,"src":"843:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":32016,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31991,"src":"847:11:85","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":32017,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"859:6:85","memberName":"length","nodeType":"MemberAccess","src":"847:18:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":32018,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31999,"src":"868:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"847:22:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":32020,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"872:1:85","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"847:26:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"843:30:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32060,"initializationExpression":{"assignments":[32012],"declarations":[{"constant":false,"id":32012,"mutability":"mutable","name":"j","nameLocation":"836:1:85","nodeType":"VariableDeclaration","scope":32060,"src":"828:9:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32011,"name":"uint256","nodeType":"ElementaryTypeName","src":"828:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32014,"initialValue":{"hexValue":"30","id":32013,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"840:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"828:13:85"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":32024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"875:3:85","subExpression":{"id":32023,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32012,"src":"875:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32025,"nodeType":"ExpressionStatement","src":"875:3:85"},"nodeType":"ForStatement","src":"823:311:85"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32002,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31999,"src":"776:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32006,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":32003,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31991,"src":"780:11:85","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":32004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"792:6:85","memberName":"length","nodeType":"MemberAccess","src":"780:18:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":32005,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"801:1:85","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"780:22:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"776:26:85","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32062,"initializationExpression":{"assignments":[31999],"declarations":[{"constant":false,"id":31999,"mutability":"mutable","name":"i","nameLocation":"769:1:85","nodeType":"VariableDeclaration","scope":32062,"src":"761:9:85","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":31998,"name":"uint256","nodeType":"ElementaryTypeName","src":"761:7:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32001,"initialValue":{"hexValue":"30","id":32000,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"773:1:85","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"761:13:85"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":32009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"804:3:85","subExpression":{"id":32008,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31999,"src":"806:1:85","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32010,"nodeType":"ExpressionStatement","src":"804:3:85"},"nodeType":"ForStatement","src":"756:388:85"},{"expression":{"id":32063,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31991,"src":"1161:11:85","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"functionReturnParameters":31997,"id":32064,"nodeType":"Return","src":"1154:18:85"}]},"functionSelector":"bb4ad7d5","id":32066,"implemented":true,"kind":"function","modifiers":[],"name":"sortTokenConfig","nameLocation":"653:15:85","nodeType":"FunctionDefinition","parameters":{"id":31992,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31991,"mutability":"mutable","name":"tokenConfig","nameLocation":"690:11:85","nodeType":"VariableDeclaration","scope":32066,"src":"669:32:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":31989,"nodeType":"UserDefinedTypeName","pathNode":{"id":31988,"name":"TokenConfig","nameLocations":["669:11:85"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"669:11:85"},"referencedDeclaration":4694,"src":"669:11:85","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":31990,"nodeType":"ArrayTypeName","src":"669:13:85","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"}],"src":"668:34:85"},"returnParameters":{"id":31997,"nodeType":"ParameterList","parameters":[{"constant":false,"id":31996,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32066,"src":"724:20:85","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":31994,"nodeType":"UserDefinedTypeName","pathNode":{"id":31993,"name":"TokenConfig","nameLocations":["724:11:85"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"724:11:85"},"referencedDeclaration":4694,"src":"724:11:85","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":31995,"nodeType":"ArrayTypeName","src":"724:13:85","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"}],"src":"723:22:85"},"scope":32067,"src":"644:535:85","stateMutability":"pure","virtual":false,"visibility":"public"}],"scope":32068,"src":"339:842:85","usedErrors":[5910],"usedEvents":[]}],"src":"46:1136:85"},"id":85},"@balancer-labs/v3-vault/contracts/test/PoolFactoryMock.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/test/PoolFactoryMock.sol","exportedSymbols":{"AddLiquidityKind":[4807],"AddLiquidityParams":[4823],"AfterSwapParams":[4801],"BufferWrapOrUnwrapParams":[4862],"Create2":[40839],"FEE_BITLENGTH":[4865],"FEE_SCALING_FACTOR":[4868],"FactoryWidePauseWindow":[5892],"HookFlags":[4627],"HooksConfig":[4651],"IBasePoolFactory":[1579],"IERC20":[40109],"IERC4626":[39833],"IRateProvider":[263],"IVault":[3111],"LiquidityManagement":[4580],"MAX_FEE_PERCENTAGE":[4871],"PoolConfig":[4605],"PoolConfigBits":[4582],"PoolData":[4729],"PoolFactoryMock":[32594],"PoolMock":[34486],"PoolRoleAccounts":[4677],"PoolSwapParams":[4772],"RemoveLiquidityKind":[4828],"RemoveLiquidityParams":[4844],"Rounding":[4732],"SingletonAuthentication":[19387],"SwapKind":[4735],"SwapState":[4661],"TokenConfig":[4694],"TokenInfo":[4704],"TokenType":[4681],"VaultState":[4669],"VaultSwapParams":[4754],"WrappingDirection":[4847]},"id":32595,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":32069,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:86"},{"absolutePath":"@openzeppelin/contracts/utils/Create2.sol","file":"@openzeppelin/contracts/utils/Create2.sol","id":32071,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":32595,"sourceUnit":40840,"src":"72:68:86","symbolAliases":[{"foreign":{"id":32070,"name":"Create2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40839,"src":"81:7:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol","id":32073,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":32595,"sourceUnit":1580,"src":"142:101:86","symbolAliases":[{"foreign":{"id":32072,"name":"IBasePoolFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1579,"src":"151:16:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":32075,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":32595,"sourceUnit":3112,"src":"244:81:86","symbolAliases":[{"foreign":{"id":32074,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"253:6:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":32076,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":32595,"sourceUnit":4872,"src":"326:69:86","symbolAliases":[],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/FactoryWidePauseWindow.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/FactoryWidePauseWindow.sol","id":32078,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":32595,"sourceUnit":5893,"src":"397:119:86","symbolAliases":[{"foreign":{"id":32077,"name":"FactoryWidePauseWindow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5892,"src":"406:22:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol","file":"../SingletonAuthentication.sol","id":32080,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":32595,"sourceUnit":19388,"src":"518:73:86","symbolAliases":[{"foreign":{"id":32079,"name":"SingletonAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19387,"src":"527:23:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/test/PoolMock.sol","file":"./PoolMock.sol","id":32082,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":32595,"sourceUnit":34487,"src":"592:42:86","symbolAliases":[{"foreign":{"id":32081,"name":"PoolMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34486,"src":"601:8:86","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":32083,"name":"IBasePoolFactory","nameLocations":["664:16:86"],"nodeType":"IdentifierPath","referencedDeclaration":1579,"src":"664:16:86"},"id":32084,"nodeType":"InheritanceSpecifier","src":"664:16:86"},{"baseName":{"id":32085,"name":"SingletonAuthentication","nameLocations":["682:23:86"],"nodeType":"IdentifierPath","referencedDeclaration":19387,"src":"682:23:86"},"id":32086,"nodeType":"InheritanceSpecifier","src":"682:23:86"},{"baseName":{"id":32087,"name":"FactoryWidePauseWindow","nameLocations":["707:22:86"],"nodeType":"IdentifierPath","referencedDeclaration":5892,"src":"707:22:86"},"id":32088,"nodeType":"InheritanceSpecifier","src":"707:22:86"}],"canonicalName":"PoolFactoryMock","contractDependencies":[34486],"contractKind":"contract","fullyImplemented":true,"id":32594,"linearizedBaseContracts":[32594,5892,19387,5786,5498,1579,243],"name":"PoolFactoryMock","nameLocation":"645:15:86","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":32091,"mutability":"constant","name":"DEFAULT_SWAP_FEE","nameLocation":"761:16:86","nodeType":"VariableDeclaration","scope":32594,"src":"736:45:86","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32089,"name":"uint256","nodeType":"ElementaryTypeName","src":"736:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"30","id":32090,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"780:1:86","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"visibility":"private"},{"constant":false,"id":32094,"mutability":"immutable","name":"_vault","nameLocation":"813:6:86","nodeType":"VariableDeclaration","scope":32594,"src":"788:31:86","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":32093,"nodeType":"UserDefinedTypeName","pathNode":{"id":32092,"name":"IVault","nameLocations":["788:6:86"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"788:6:86"},"referencedDeclaration":3111,"src":"788:6:86","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"private"},{"constant":false,"id":32098,"mutability":"mutable","name":"_isPoolFromFactory","nameLocation":"941:18:86","nodeType":"VariableDeclaration","scope":32594,"src":"889:70:86","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":32097,"keyName":"pool","keyNameLocation":"905:4:86","keyType":{"id":32095,"name":"address","nodeType":"ElementaryTypeName","src":"897:7:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"889:43:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"isFromFactory","valueNameLocation":"918:13:86","valueType":{"id":32096,"name":"bool","nodeType":"ElementaryTypeName","src":"913:4:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"private"},{"constant":false,"id":32100,"mutability":"mutable","name":"_disabled","nameLocation":"978:9:86","nodeType":"VariableDeclaration","scope":32594,"src":"965:22:86","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32099,"name":"bool","nodeType":"ElementaryTypeName","src":"965:4:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"private"},{"body":{"id":32118,"nodeType":"Block","src":"1145:31:86","statements":[{"expression":{"id":32116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":32114,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32094,"src":"1155:6:86","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":32115,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32103,"src":"1164:5:86","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"src":"1155:14:86","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":32117,"nodeType":"ExpressionStatement","src":"1155:14:86"}]},"id":32119,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":32108,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32103,"src":"1094:5:86","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"id":32109,"kind":"baseConstructorSpecifier","modifierName":{"id":32107,"name":"SingletonAuthentication","nameLocations":["1070:23:86"],"nodeType":"IdentifierPath","referencedDeclaration":19387,"src":"1070:23:86"},"nodeType":"ModifierInvocation","src":"1070:30:86"},{"arguments":[{"id":32111,"name":"pauseWindowDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32105,"src":"1124:19:86","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"id":32112,"kind":"baseConstructorSpecifier","modifierName":{"id":32110,"name":"FactoryWidePauseWindow","nameLocations":["1101:22:86"],"nodeType":"IdentifierPath","referencedDeclaration":5892,"src":"1101:22:86"},"nodeType":"ModifierInvocation","src":"1101:43:86"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":32106,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32103,"mutability":"mutable","name":"vault","nameLocation":"1022:5:86","nodeType":"VariableDeclaration","scope":32119,"src":"1015:12:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":32102,"nodeType":"UserDefinedTypeName","pathNode":{"id":32101,"name":"IVault","nameLocations":["1015:6:86"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"1015:6:86"},"referencedDeclaration":3111,"src":"1015:6:86","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":32105,"mutability":"mutable","name":"pauseWindowDuration","nameLocation":"1044:19:86","nodeType":"VariableDeclaration","scope":32119,"src":"1037:26:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":32104,"name":"uint32","nodeType":"ElementaryTypeName","src":"1037:6:86","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"1005:64:86"},"returnParameters":{"id":32113,"nodeType":"ParameterList","parameters":[],"src":"1145:0:86"},"scope":32594,"src":"994:182:86","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":32156,"nodeType":"Block","src":"1271:172:86","statements":[{"assignments":[32130],"declarations":[{"constant":false,"id":32130,"mutability":"mutable","name":"newPool","nameLocation":"1290:7:86","nodeType":"VariableDeclaration","scope":32156,"src":"1281:16:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_PoolMock_$34486","typeString":"contract PoolMock"},"typeName":{"id":32129,"nodeType":"UserDefinedTypeName","pathNode":{"id":32128,"name":"PoolMock","nameLocations":["1281:8:86"],"nodeType":"IdentifierPath","referencedDeclaration":34486,"src":"1281:8:86"},"referencedDeclaration":34486,"src":"1281:8:86","typeDescriptions":{"typeIdentifier":"t_contract$_PoolMock_$34486","typeString":"contract PoolMock"}},"visibility":"internal"}],"id":32143,"initialValue":{"arguments":[{"arguments":[{"arguments":[{"id":32137,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32094,"src":"1328:6:86","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}],"id":32136,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1320:7:86","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":32135,"name":"address","nodeType":"ElementaryTypeName","src":"1320:7:86","typeDescriptions":{}}},"id":32138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1320:15:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32134,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"1313:6:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVault_$3111_$","typeString":"type(contract IVault)"}},"id":32139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1313:23:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},{"id":32140,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32121,"src":"1338:4:86","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":32141,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32123,"src":"1344:6:86","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":32133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"1300:12:86","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$_t_contract$_IVault_$3111_$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$_t_contract$_PoolMock_$34486_$","typeString":"function (contract IVault,string memory,string memory) returns (contract PoolMock)"},"typeName":{"id":32132,"nodeType":"UserDefinedTypeName","pathNode":{"id":32131,"name":"PoolMock","nameLocations":["1304:8:86"],"nodeType":"IdentifierPath","referencedDeclaration":34486,"src":"1304:8:86"},"referencedDeclaration":34486,"src":"1304:8:86","typeDescriptions":{"typeIdentifier":"t_contract$_PoolMock_$34486","typeString":"contract PoolMock"}}},"id":32142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1300:51:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_PoolMock_$34486","typeString":"contract PoolMock"}},"nodeType":"VariableDeclarationStatement","src":"1281:70:86"},{"expression":{"arguments":[{"arguments":[{"id":32147,"name":"newPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32130,"src":"1394:7:86","typeDescriptions":{"typeIdentifier":"t_contract$_PoolMock_$34486","typeString":"contract PoolMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PoolMock_$34486","typeString":"contract PoolMock"}],"id":32146,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1386:7:86","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":32145,"name":"address","nodeType":"ElementaryTypeName","src":"1386:7:86","typeDescriptions":{}}},"id":32148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1386:16:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32144,"name":"_registerPoolWithFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32563,"src":"1361:24:86","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":32149,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1361:42:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32150,"nodeType":"ExpressionStatement","src":"1361:42:86"},{"expression":{"arguments":[{"id":32153,"name":"newPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32130,"src":"1428:7:86","typeDescriptions":{"typeIdentifier":"t_contract$_PoolMock_$34486","typeString":"contract PoolMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PoolMock_$34486","typeString":"contract PoolMock"}],"id":32152,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1420:7:86","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":32151,"name":"address","nodeType":"ElementaryTypeName","src":"1420:7:86","typeDescriptions":{}}},"id":32154,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1420:16:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":32127,"id":32155,"nodeType":"Return","src":"1413:23:86"}]},"functionSelector":"5ea81a32","id":32157,"implemented":true,"kind":"function","modifiers":[],"name":"createPool","nameLocation":"1191:10:86","nodeType":"FunctionDefinition","parameters":{"id":32124,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32121,"mutability":"mutable","name":"name","nameLocation":"1216:4:86","nodeType":"VariableDeclaration","scope":32157,"src":"1202:18:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":32120,"name":"string","nodeType":"ElementaryTypeName","src":"1202:6:86","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":32123,"mutability":"mutable","name":"symbol","nameLocation":"1236:6:86","nodeType":"VariableDeclaration","scope":32157,"src":"1222:20:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":32122,"name":"string","nodeType":"ElementaryTypeName","src":"1222:6:86","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1201:42:86"},"returnParameters":{"id":32127,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32126,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32157,"src":"1262:7:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32125,"name":"address","nodeType":"ElementaryTypeName","src":"1262:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1261:9:86"},"scope":32594,"src":"1182:261:86","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":32188,"nodeType":"Block","src":"1532:345:86","statements":[{"assignments":[32168],"declarations":[{"constant":false,"id":32168,"mutability":"mutable","name":"roleAccounts","nameLocation":"1566:12:86","nodeType":"VariableDeclaration","scope":32188,"src":"1542:36:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":32167,"nodeType":"UserDefinedTypeName","pathNode":{"id":32166,"name":"PoolRoleAccounts","nameLocations":["1542:16:86"],"nodeType":"IdentifierPath","referencedDeclaration":4677,"src":"1542:16:86"},"referencedDeclaration":4677,"src":"1542:16:86","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"id":32169,"nodeType":"VariableDeclarationStatement","src":"1542:36:86"},{"expression":{"arguments":[{"id":32173,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32159,"src":"1622:4:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":32174,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32163,"src":"1640:11:86","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},{"id":32175,"name":"DEFAULT_SWAP_FEE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32091,"src":"1665:16:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"id":32176,"name":"getNewPoolPauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5891,"src":"1695:28:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint32_$","typeString":"function () view returns (uint32)"}},"id":32177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1695:30:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"hexValue":"66616c7365","id":32178,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1739:5:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":32179,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32168,"src":"1758:12:86","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},{"arguments":[{"hexValue":"30","id":32182,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1792:1:86","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":32181,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1784:7:86","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":32180,"name":"address","nodeType":"ElementaryTypeName","src":"1784:7:86","typeDescriptions":{}}},"id":32183,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1784:10:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":32184,"name":"_getDefaultLiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32425,"src":"1828:30:86","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_LiquidityManagement_$4580_memory_ptr_$","typeString":"function () pure returns (struct LiquidityManagement memory)"}},"id":32185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1828:32:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}],"expression":{"id":32170,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32094,"src":"1589:6:86","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":32172,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1596:12:86","memberName":"registerPool","nodeType":"MemberAccess","referencedDeclaration":4098,"src":"1589:19:86","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$_t_uint256_$_t_uint32_$_t_bool_$_t_struct$_PoolRoleAccounts_$4677_memory_ptr_$_t_address_$_t_struct$_LiquidityManagement_$4580_memory_ptr_$returns$__$","typeString":"function (address,struct TokenConfig memory[] memory,uint256,uint32,bool,struct PoolRoleAccounts memory,address,struct LiquidityManagement memory) external"}},"id":32186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1589:281:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32187,"nodeType":"ExpressionStatement","src":"1589:281:86"}]},"functionSelector":"675d6050","id":32189,"implemented":true,"kind":"function","modifiers":[],"name":"registerTestPool","nameLocation":"1458:16:86","nodeType":"FunctionDefinition","parameters":{"id":32164,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32159,"mutability":"mutable","name":"pool","nameLocation":"1483:4:86","nodeType":"VariableDeclaration","scope":32189,"src":"1475:12:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32158,"name":"address","nodeType":"ElementaryTypeName","src":"1475:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32163,"mutability":"mutable","name":"tokenConfig","nameLocation":"1510:11:86","nodeType":"VariableDeclaration","scope":32189,"src":"1489:32:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":32161,"nodeType":"UserDefinedTypeName","pathNode":{"id":32160,"name":"TokenConfig","nameLocations":["1489:11:86"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"1489:11:86"},"referencedDeclaration":4694,"src":"1489:11:86","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":32162,"nodeType":"ArrayTypeName","src":"1489:13:86","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"}],"src":"1474:48:86"},"returnParameters":{"id":32165,"nodeType":"ParameterList","parameters":[],"src":"1532:0:86"},"scope":32594,"src":"1449:428:86","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":32219,"nodeType":"Block","src":"1997:332:86","statements":[{"assignments":[32202],"declarations":[{"constant":false,"id":32202,"mutability":"mutable","name":"roleAccounts","nameLocation":"2031:12:86","nodeType":"VariableDeclaration","scope":32219,"src":"2007:36:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":32201,"nodeType":"UserDefinedTypeName","pathNode":{"id":32200,"name":"PoolRoleAccounts","nameLocations":["2007:16:86"],"nodeType":"IdentifierPath","referencedDeclaration":4677,"src":"2007:16:86"},"referencedDeclaration":4677,"src":"2007:16:86","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"id":32203,"nodeType":"VariableDeclarationStatement","src":"2007:36:86"},{"expression":{"arguments":[{"id":32207,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32191,"src":"2087:4:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":32208,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32195,"src":"2105:11:86","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},{"id":32209,"name":"DEFAULT_SWAP_FEE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32091,"src":"2130:16:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"id":32210,"name":"getNewPoolPauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5891,"src":"2160:28:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint32_$","typeString":"function () view returns (uint32)"}},"id":32211,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2160:30:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"hexValue":"66616c7365","id":32212,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2204:5:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":32213,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32202,"src":"2223:12:86","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},{"id":32214,"name":"poolHooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32197,"src":"2249:17:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":32215,"name":"_getDefaultLiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32425,"src":"2280:30:86","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_LiquidityManagement_$4580_memory_ptr_$","typeString":"function () pure returns (struct LiquidityManagement memory)"}},"id":32216,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2280:32:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}],"expression":{"id":32204,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32094,"src":"2054:6:86","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":32206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2061:12:86","memberName":"registerPool","nodeType":"MemberAccess","referencedDeclaration":4098,"src":"2054:19:86","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$_t_uint256_$_t_uint32_$_t_bool_$_t_struct$_PoolRoleAccounts_$4677_memory_ptr_$_t_address_$_t_struct$_LiquidityManagement_$4580_memory_ptr_$returns$__$","typeString":"function (address,struct TokenConfig memory[] memory,uint256,uint32,bool,struct PoolRoleAccounts memory,address,struct LiquidityManagement memory) external"}},"id":32217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2054:268:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32218,"nodeType":"ExpressionStatement","src":"2054:268:86"}]},"functionSelector":"206db1ef","id":32220,"implemented":true,"kind":"function","modifiers":[],"name":"registerPoolWithHook","nameLocation":"1892:20:86","nodeType":"FunctionDefinition","parameters":{"id":32198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32191,"mutability":"mutable","name":"pool","nameLocation":"1921:4:86","nodeType":"VariableDeclaration","scope":32220,"src":"1913:12:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32190,"name":"address","nodeType":"ElementaryTypeName","src":"1913:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32195,"mutability":"mutable","name":"tokenConfig","nameLocation":"1948:11:86","nodeType":"VariableDeclaration","scope":32220,"src":"1927:32:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":32193,"nodeType":"UserDefinedTypeName","pathNode":{"id":32192,"name":"TokenConfig","nameLocations":["1927:11:86"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"1927:11:86"},"referencedDeclaration":4694,"src":"1927:11:86","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":32194,"nodeType":"ArrayTypeName","src":"1927:13:86","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":32197,"mutability":"mutable","name":"poolHooksContract","nameLocation":"1969:17:86","nodeType":"VariableDeclaration","scope":32220,"src":"1961:25:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32196,"name":"address","nodeType":"ElementaryTypeName","src":"1961:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1912:75:86"},"returnParameters":{"id":32199,"nodeType":"ParameterList","parameters":[],"src":"1997:0:86"},"scope":32594,"src":"1883:446:86","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":32258,"nodeType":"Block","src":"2504:380:86","statements":[{"assignments":[32235],"declarations":[{"constant":false,"id":32235,"mutability":"mutable","name":"roleAccounts","nameLocation":"2538:12:86","nodeType":"VariableDeclaration","scope":32258,"src":"2514:36:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":32234,"nodeType":"UserDefinedTypeName","pathNode":{"id":32233,"name":"PoolRoleAccounts","nameLocations":["2514:16:86"],"nodeType":"IdentifierPath","referencedDeclaration":4677,"src":"2514:16:86"},"referencedDeclaration":4677,"src":"2514:16:86","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"id":32236,"nodeType":"VariableDeclarationStatement","src":"2514:36:86"},{"expression":{"id":32241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32237,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32235,"src":"2560:12:86","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"id":32239,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2573:11:86","memberName":"poolCreator","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"2560:24:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":32240,"name":"poolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32230,"src":"2587:11:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2560:38:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":32242,"nodeType":"ExpressionStatement","src":"2560:38:86"},{"expression":{"arguments":[{"id":32246,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32222,"src":"2642:4:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":32247,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32226,"src":"2660:11:86","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},{"id":32248,"name":"DEFAULT_SWAP_FEE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32091,"src":"2685:16:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"id":32249,"name":"getNewPoolPauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5891,"src":"2715:28:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint32_$","typeString":"function () view returns (uint32)"}},"id":32250,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2715:30:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"hexValue":"66616c7365","id":32251,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2759:5:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":32252,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32235,"src":"2778:12:86","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},{"id":32253,"name":"poolHooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32228,"src":"2804:17:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":32254,"name":"_getDefaultLiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32425,"src":"2835:30:86","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_LiquidityManagement_$4580_memory_ptr_$","typeString":"function () pure returns (struct LiquidityManagement memory)"}},"id":32255,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2835:32:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}],"expression":{"id":32243,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32094,"src":"2609:6:86","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":32245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2616:12:86","memberName":"registerPool","nodeType":"MemberAccess","referencedDeclaration":4098,"src":"2609:19:86","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$_t_uint256_$_t_uint32_$_t_bool_$_t_struct$_PoolRoleAccounts_$4677_memory_ptr_$_t_address_$_t_struct$_LiquidityManagement_$4580_memory_ptr_$returns$__$","typeString":"function (address,struct TokenConfig memory[] memory,uint256,uint32,bool,struct PoolRoleAccounts memory,address,struct LiquidityManagement memory) external"}},"id":32256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2609:268:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32257,"nodeType":"ExpressionStatement","src":"2609:268:86"}]},"functionSelector":"a7a4b711","id":32259,"implemented":true,"kind":"function","modifiers":[],"name":"registerTestPool","nameLocation":"2344:16:86","nodeType":"FunctionDefinition","parameters":{"id":32231,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32222,"mutability":"mutable","name":"pool","nameLocation":"2378:4:86","nodeType":"VariableDeclaration","scope":32259,"src":"2370:12:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32221,"name":"address","nodeType":"ElementaryTypeName","src":"2370:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32226,"mutability":"mutable","name":"tokenConfig","nameLocation":"2413:11:86","nodeType":"VariableDeclaration","scope":32259,"src":"2392:32:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":32224,"nodeType":"UserDefinedTypeName","pathNode":{"id":32223,"name":"TokenConfig","nameLocations":["2392:11:86"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"2392:11:86"},"referencedDeclaration":4694,"src":"2392:11:86","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":32225,"nodeType":"ArrayTypeName","src":"2392:13:86","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":32228,"mutability":"mutable","name":"poolHooksContract","nameLocation":"2442:17:86","nodeType":"VariableDeclaration","scope":32259,"src":"2434:25:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32227,"name":"address","nodeType":"ElementaryTypeName","src":"2434:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32230,"mutability":"mutable","name":"poolCreator","nameLocation":"2477:11:86","nodeType":"VariableDeclaration","scope":32259,"src":"2469:19:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32229,"name":"address","nodeType":"ElementaryTypeName","src":"2469:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2360:134:86"},"returnParameters":{"id":32232,"nodeType":"ParameterList","parameters":[],"src":"2504:0:86"},"scope":32594,"src":"2335:549:86","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":32299,"nodeType":"Block","src":"3176:303:86","statements":[{"expression":{"arguments":[{"id":32282,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32261,"src":"3219:4:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":32283,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32265,"src":"3237:11:86","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},{"id":32284,"name":"swapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32267,"src":"3262:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":32291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":32287,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3290:5:86","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":32288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3296:9:86","memberName":"timestamp","nodeType":"MemberAccess","src":"3290:15:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":32286,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3283:6:86","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":32285,"name":"uint32","nodeType":"ElementaryTypeName","src":"3283:6:86","typeDescriptions":{}}},"id":32289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3283:23:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":32290,"name":"pauseWindowDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32269,"src":"3309:19:86","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"3283:45:86","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":32292,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32271,"src":"3342:17:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":32293,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32274,"src":"3373:12:86","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},{"id":32294,"name":"poolHooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32276,"src":"3399:17:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":32295,"name":"_getDefaultLiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32425,"src":"3430:30:86","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_LiquidityManagement_$4580_memory_ptr_$","typeString":"function () pure returns (struct LiquidityManagement memory)"}},"id":32296,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3430:32:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}],"expression":{"id":32279,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32094,"src":"3186:6:86","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":32281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3193:12:86","memberName":"registerPool","nodeType":"MemberAccess","referencedDeclaration":4098,"src":"3186:19:86","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$_t_uint256_$_t_uint32_$_t_bool_$_t_struct$_PoolRoleAccounts_$4677_memory_ptr_$_t_address_$_t_struct$_LiquidityManagement_$4580_memory_ptr_$returns$__$","typeString":"function (address,struct TokenConfig memory[] memory,uint256,uint32,bool,struct PoolRoleAccounts memory,address,struct LiquidityManagement memory) external"}},"id":32297,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3186:286:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32298,"nodeType":"ExpressionStatement","src":"3186:286:86"}]},"functionSelector":"7a0b2e8d","id":32300,"implemented":true,"kind":"function","modifiers":[],"name":"registerGeneralTestPool","nameLocation":"2899:23:86","nodeType":"FunctionDefinition","parameters":{"id":32277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32261,"mutability":"mutable","name":"pool","nameLocation":"2940:4:86","nodeType":"VariableDeclaration","scope":32300,"src":"2932:12:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32260,"name":"address","nodeType":"ElementaryTypeName","src":"2932:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32265,"mutability":"mutable","name":"tokenConfig","nameLocation":"2975:11:86","nodeType":"VariableDeclaration","scope":32300,"src":"2954:32:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":32263,"nodeType":"UserDefinedTypeName","pathNode":{"id":32262,"name":"TokenConfig","nameLocations":["2954:11:86"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"2954:11:86"},"referencedDeclaration":4694,"src":"2954:11:86","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":32264,"nodeType":"ArrayTypeName","src":"2954:13:86","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":32267,"mutability":"mutable","name":"swapFee","nameLocation":"3004:7:86","nodeType":"VariableDeclaration","scope":32300,"src":"2996:15:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32266,"name":"uint256","nodeType":"ElementaryTypeName","src":"2996:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":32269,"mutability":"mutable","name":"pauseWindowDuration","nameLocation":"3028:19:86","nodeType":"VariableDeclaration","scope":32300,"src":"3021:26:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":32268,"name":"uint32","nodeType":"ElementaryTypeName","src":"3021:6:86","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":32271,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"3062:17:86","nodeType":"VariableDeclaration","scope":32300,"src":"3057:22:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32270,"name":"bool","nodeType":"ElementaryTypeName","src":"3057:4:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":32274,"mutability":"mutable","name":"roleAccounts","nameLocation":"3113:12:86","nodeType":"VariableDeclaration","scope":32300,"src":"3089:36:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":32273,"nodeType":"UserDefinedTypeName","pathNode":{"id":32272,"name":"PoolRoleAccounts","nameLocations":["3089:16:86"],"nodeType":"IdentifierPath","referencedDeclaration":4677,"src":"3089:16:86"},"referencedDeclaration":4677,"src":"3089:16:86","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":32276,"mutability":"mutable","name":"poolHooksContract","nameLocation":"3143:17:86","nodeType":"VariableDeclaration","scope":32300,"src":"3135:25:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32275,"name":"address","nodeType":"ElementaryTypeName","src":"3135:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2922:244:86"},"returnParameters":{"id":32278,"nodeType":"ParameterList","parameters":[],"src":"3176:0:86"},"scope":32594,"src":"2890:589:86","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":32331,"nodeType":"Block","src":"3725:272:86","statements":[{"expression":{"arguments":[{"id":32320,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32302,"src":"3768:4:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":32321,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32306,"src":"3786:11:86","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},{"id":32322,"name":"DEFAULT_SWAP_FEE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32091,"src":"3811:16:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"id":32323,"name":"getNewPoolPauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5891,"src":"3841:28:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint32_$","typeString":"function () view returns (uint32)"}},"id":32324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3841:30:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"hexValue":"66616c7365","id":32325,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3885:5:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":32326,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32309,"src":"3904:12:86","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},{"id":32327,"name":"poolHooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32311,"src":"3930:17:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":32328,"name":"liquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32314,"src":"3961:19:86","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_calldata_ptr","typeString":"struct LiquidityManagement calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_calldata_ptr","typeString":"struct LiquidityManagement calldata"}],"expression":{"id":32317,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32094,"src":"3735:6:86","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":32319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3742:12:86","memberName":"registerPool","nodeType":"MemberAccess","referencedDeclaration":4098,"src":"3735:19:86","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$_t_uint256_$_t_uint32_$_t_bool_$_t_struct$_PoolRoleAccounts_$4677_memory_ptr_$_t_address_$_t_struct$_LiquidityManagement_$4580_memory_ptr_$returns$__$","typeString":"function (address,struct TokenConfig memory[] memory,uint256,uint32,bool,struct PoolRoleAccounts memory,address,struct LiquidityManagement memory) external"}},"id":32329,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3735:255:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32330,"nodeType":"ExpressionStatement","src":"3735:255:86"}]},"functionSelector":"d396a666","id":32332,"implemented":true,"kind":"function","modifiers":[],"name":"registerPool","nameLocation":"3494:12:86","nodeType":"FunctionDefinition","parameters":{"id":32315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32302,"mutability":"mutable","name":"pool","nameLocation":"3524:4:86","nodeType":"VariableDeclaration","scope":32332,"src":"3516:12:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32301,"name":"address","nodeType":"ElementaryTypeName","src":"3516:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32306,"mutability":"mutable","name":"tokenConfig","nameLocation":"3559:11:86","nodeType":"VariableDeclaration","scope":32332,"src":"3538:32:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":32304,"nodeType":"UserDefinedTypeName","pathNode":{"id":32303,"name":"TokenConfig","nameLocations":["3538:11:86"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"3538:11:86"},"referencedDeclaration":4694,"src":"3538:11:86","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":32305,"nodeType":"ArrayTypeName","src":"3538:13:86","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":32309,"mutability":"mutable","name":"roleAccounts","nameLocation":"3604:12:86","nodeType":"VariableDeclaration","scope":32332,"src":"3580:36:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":32308,"nodeType":"UserDefinedTypeName","pathNode":{"id":32307,"name":"PoolRoleAccounts","nameLocations":["3580:16:86"],"nodeType":"IdentifierPath","referencedDeclaration":4677,"src":"3580:16:86"},"referencedDeclaration":4677,"src":"3580:16:86","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":32311,"mutability":"mutable","name":"poolHooksContract","nameLocation":"3634:17:86","nodeType":"VariableDeclaration","scope":32332,"src":"3626:25:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32310,"name":"address","nodeType":"ElementaryTypeName","src":"3626:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32314,"mutability":"mutable","name":"liquidityManagement","nameLocation":"3690:19:86","nodeType":"VariableDeclaration","scope":32332,"src":"3661:48:86","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":32313,"nodeType":"UserDefinedTypeName","pathNode":{"id":32312,"name":"LiquidityManagement","nameLocations":["3661:19:86"],"nodeType":"IdentifierPath","referencedDeclaration":4580,"src":"3661:19:86"},"referencedDeclaration":4580,"src":"3661:19:86","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"3506:209:86"},"returnParameters":{"id":32316,"nodeType":"ParameterList","parameters":[],"src":"3725:0:86"},"scope":32594,"src":"3485:512:86","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":32366,"nodeType":"Block","src":"4243:320:86","statements":[{"assignments":[32350],"declarations":[{"constant":false,"id":32350,"mutability":"mutable","name":"roleAccounts","nameLocation":"4277:12:86","nodeType":"VariableDeclaration","scope":32366,"src":"4253:36:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":32349,"nodeType":"UserDefinedTypeName","pathNode":{"id":32348,"name":"PoolRoleAccounts","nameLocations":["4253:16:86"],"nodeType":"IdentifierPath","referencedDeclaration":4677,"src":"4253:16:86"},"referencedDeclaration":4677,"src":"4253:16:86","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"id":32351,"nodeType":"VariableDeclarationStatement","src":"4253:36:86"},{"expression":{"arguments":[{"id":32355,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32334,"src":"4333:4:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":32356,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32338,"src":"4351:11:86","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},{"id":32357,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32340,"src":"4376:17:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[],"expression":{"argumentTypes":[],"id":32358,"name":"getNewPoolPauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5891,"src":"4407:28:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint32_$","typeString":"function () view returns (uint32)"}},"id":32359,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4407:30:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"hexValue":"66616c7365","id":32360,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4451:5:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":32361,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32350,"src":"4470:12:86","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},{"id":32362,"name":"poolHooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32342,"src":"4496:17:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":32363,"name":"liquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32345,"src":"4527:19:86","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_calldata_ptr","typeString":"struct LiquidityManagement calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_calldata_ptr","typeString":"struct LiquidityManagement calldata"}],"expression":{"id":32352,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32094,"src":"4300:6:86","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":32354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4307:12:86","memberName":"registerPool","nodeType":"MemberAccess","referencedDeclaration":4098,"src":"4300:19:86","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$_t_uint256_$_t_uint32_$_t_bool_$_t_struct$_PoolRoleAccounts_$4677_memory_ptr_$_t_address_$_t_struct$_LiquidityManagement_$4580_memory_ptr_$returns$__$","typeString":"function (address,struct TokenConfig memory[] memory,uint256,uint32,bool,struct PoolRoleAccounts memory,address,struct LiquidityManagement memory) external"}},"id":32364,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4300:256:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32365,"nodeType":"ExpressionStatement","src":"4300:256:86"}]},"functionSelector":"ed05beaf","id":32367,"implemented":true,"kind":"function","modifiers":[],"name":"registerPoolWithSwapFee","nameLocation":"4012:23:86","nodeType":"FunctionDefinition","parameters":{"id":32346,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32334,"mutability":"mutable","name":"pool","nameLocation":"4053:4:86","nodeType":"VariableDeclaration","scope":32367,"src":"4045:12:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32333,"name":"address","nodeType":"ElementaryTypeName","src":"4045:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32338,"mutability":"mutable","name":"tokenConfig","nameLocation":"4088:11:86","nodeType":"VariableDeclaration","scope":32367,"src":"4067:32:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":32336,"nodeType":"UserDefinedTypeName","pathNode":{"id":32335,"name":"TokenConfig","nameLocations":["4067:11:86"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"4067:11:86"},"referencedDeclaration":4694,"src":"4067:11:86","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":32337,"nodeType":"ArrayTypeName","src":"4067:13:86","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":32340,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"4117:17:86","nodeType":"VariableDeclaration","scope":32367,"src":"4109:25:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32339,"name":"uint256","nodeType":"ElementaryTypeName","src":"4109:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":32342,"mutability":"mutable","name":"poolHooksContract","nameLocation":"4152:17:86","nodeType":"VariableDeclaration","scope":32367,"src":"4144:25:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32341,"name":"address","nodeType":"ElementaryTypeName","src":"4144:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32345,"mutability":"mutable","name":"liquidityManagement","nameLocation":"4208:19:86","nodeType":"VariableDeclaration","scope":32367,"src":"4179:48:86","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":32344,"nodeType":"UserDefinedTypeName","pathNode":{"id":32343,"name":"LiquidityManagement","nameLocations":["4179:19:86"],"nodeType":"IdentifierPath","referencedDeclaration":4580,"src":"4179:19:86"},"referencedDeclaration":4580,"src":"4179:19:86","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"4035:198:86"},"returnParameters":{"id":32347,"nodeType":"ParameterList","parameters":[],"src":"4243:0:86"},"scope":32594,"src":"4003:560:86","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":32399,"nodeType":"Block","src":"4911:251:86","statements":[{"expression":{"arguments":[{"id":32389,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32369,"src":"4954:4:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":32390,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32373,"src":"4972:11:86","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},{"id":32391,"name":"DEFAULT_SWAP_FEE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32091,"src":"4997:16:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":32392,"name":"timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32375,"src":"5027:9:86","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"hexValue":"66616c7365","id":32393,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5050:5:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":32394,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32378,"src":"5069:12:86","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},{"id":32395,"name":"poolHooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32380,"src":"5095:17:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":32396,"name":"liquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32383,"src":"5126:19:86","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_calldata_ptr","typeString":"struct LiquidityManagement calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_calldata_ptr","typeString":"struct LiquidityManagement calldata"}],"expression":{"id":32386,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32094,"src":"4921:6:86","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":32388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4928:12:86","memberName":"registerPool","nodeType":"MemberAccess","referencedDeclaration":4098,"src":"4921:19:86","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$_t_uint256_$_t_uint32_$_t_bool_$_t_struct$_PoolRoleAccounts_$4677_memory_ptr_$_t_address_$_t_struct$_LiquidityManagement_$4580_memory_ptr_$returns$__$","typeString":"function (address,struct TokenConfig memory[] memory,uint256,uint32,bool,struct PoolRoleAccounts memory,address,struct LiquidityManagement memory) external"}},"id":32397,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4921:234:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32398,"nodeType":"ExpressionStatement","src":"4921:234:86"}]},"functionSelector":"0e0677ab","id":32400,"implemented":true,"kind":"function","modifiers":[],"name":"registerPoolAtTimestamp","nameLocation":"4643:23:86","nodeType":"FunctionDefinition","parameters":{"id":32384,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32369,"mutability":"mutable","name":"pool","nameLocation":"4684:4:86","nodeType":"VariableDeclaration","scope":32400,"src":"4676:12:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32368,"name":"address","nodeType":"ElementaryTypeName","src":"4676:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32373,"mutability":"mutable","name":"tokenConfig","nameLocation":"4719:11:86","nodeType":"VariableDeclaration","scope":32400,"src":"4698:32:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":32371,"nodeType":"UserDefinedTypeName","pathNode":{"id":32370,"name":"TokenConfig","nameLocations":["4698:11:86"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"4698:11:86"},"referencedDeclaration":4694,"src":"4698:11:86","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":32372,"nodeType":"ArrayTypeName","src":"4698:13:86","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":32375,"mutability":"mutable","name":"timestamp","nameLocation":"4747:9:86","nodeType":"VariableDeclaration","scope":32400,"src":"4740:16:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":32374,"name":"uint32","nodeType":"ElementaryTypeName","src":"4740:6:86","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":32378,"mutability":"mutable","name":"roleAccounts","nameLocation":"4790:12:86","nodeType":"VariableDeclaration","scope":32400,"src":"4766:36:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":32377,"nodeType":"UserDefinedTypeName","pathNode":{"id":32376,"name":"PoolRoleAccounts","nameLocations":["4766:16:86"],"nodeType":"IdentifierPath","referencedDeclaration":4677,"src":"4766:16:86"},"referencedDeclaration":4677,"src":"4766:16:86","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":32380,"mutability":"mutable","name":"poolHooksContract","nameLocation":"4820:17:86","nodeType":"VariableDeclaration","scope":32400,"src":"4812:25:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32379,"name":"address","nodeType":"ElementaryTypeName","src":"4812:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32383,"mutability":"mutable","name":"liquidityManagement","nameLocation":"4876:19:86","nodeType":"VariableDeclaration","scope":32400,"src":"4847:48:86","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":32382,"nodeType":"UserDefinedTypeName","pathNode":{"id":32381,"name":"LiquidityManagement","nameLocations":["4847:19:86"],"nodeType":"IdentifierPath","referencedDeclaration":4580,"src":"4847:19:86"},"referencedDeclaration":4580,"src":"4847:19:86","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"4666:235:86"},"returnParameters":{"id":32385,"nodeType":"ParameterList","parameters":[],"src":"4911:0:86"},"scope":32594,"src":"4634:528:86","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":32424,"nodeType":"Block","src":"5260:224:86","statements":[{"assignments":[32408],"declarations":[{"constant":false,"id":32408,"mutability":"mutable","name":"liquidityManagement","nameLocation":"5297:19:86","nodeType":"VariableDeclaration","scope":32424,"src":"5270:46:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":32407,"nodeType":"UserDefinedTypeName","pathNode":{"id":32406,"name":"LiquidityManagement","nameLocations":["5270:19:86"],"nodeType":"IdentifierPath","referencedDeclaration":4580,"src":"5270:19:86"},"referencedDeclaration":4580,"src":"5270:19:86","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"id":32409,"nodeType":"VariableDeclarationStatement","src":"5270:46:86"},{"expression":{"id":32414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32410,"name":"liquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32408,"src":"5326:19:86","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}},"id":32412,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5346:24:86","memberName":"enableAddLiquidityCustom","nodeType":"MemberAccess","referencedDeclaration":4575,"src":"5326:44:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":32413,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5373:4:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"5326:51:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32415,"nodeType":"ExpressionStatement","src":"5326:51:86"},{"expression":{"id":32420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":32416,"name":"liquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32408,"src":"5387:19:86","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}},"id":32418,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5407:27:86","memberName":"enableRemoveLiquidityCustom","nodeType":"MemberAccess","referencedDeclaration":4577,"src":"5387:47:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":32419,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5437:4:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"5387:54:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32421,"nodeType":"ExpressionStatement","src":"5387:54:86"},{"expression":{"id":32422,"name":"liquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32408,"src":"5458:19:86","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}},"functionReturnParameters":32405,"id":32423,"nodeType":"Return","src":"5451:26:86"}]},"id":32425,"implemented":true,"kind":"function","modifiers":[],"name":"_getDefaultLiquidityManagement","nameLocation":"5177:30:86","nodeType":"FunctionDefinition","parameters":{"id":32401,"nodeType":"ParameterList","parameters":[],"src":"5207:2:86"},"returnParameters":{"id":32405,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32404,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32425,"src":"5232:26:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":32403,"nodeType":"UserDefinedTypeName","pathNode":{"id":32402,"name":"LiquidityManagement","nameLocations":["5232:19:86"],"nodeType":"IdentifierPath","referencedDeclaration":4580,"src":"5232:19:86"},"referencedDeclaration":4580,"src":"5232:19:86","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"5231:28:86"},"scope":32594,"src":"5168:316:86","stateMutability":"pure","virtual":false,"visibility":"private"},{"baseFunctions":[1534],"body":{"id":32437,"nodeType":"Block","src":"5597:48:86","statements":[{"expression":{"baseExpression":{"id":32433,"name":"_isPoolFromFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32098,"src":"5614:18:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":32435,"indexExpression":{"id":32434,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32428,"src":"5633:4:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5614:24:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":32432,"id":32436,"nodeType":"Return","src":"5607:31:86"}]},"documentation":{"id":32426,"nodeType":"StructuredDocumentation","src":"5490:32:86","text":"@inheritdoc IBasePoolFactory"},"functionSelector":"6634b753","id":32438,"implemented":true,"kind":"function","modifiers":[],"name":"isPoolFromFactory","nameLocation":"5536:17:86","nodeType":"FunctionDefinition","parameters":{"id":32429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32428,"mutability":"mutable","name":"pool","nameLocation":"5562:4:86","nodeType":"VariableDeclaration","scope":32438,"src":"5554:12:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32427,"name":"address","nodeType":"ElementaryTypeName","src":"5554:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5553:14:86"},"returnParameters":{"id":32432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32431,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32438,"src":"5591:4:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32430,"name":"bool","nodeType":"ElementaryTypeName","src":"5591:4:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5590:6:86"},"scope":32594,"src":"5527:118:86","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1540],"body":{"id":32447,"nodeType":"Block","src":"5707:42:86","statements":[{"expression":{"arguments":[{"hexValue":"4e6f7420696d706c656d656e746564","id":32444,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5724:17:86","typeDescriptions":{"typeIdentifier":"t_stringliteral_9f5474d7a5849b3f79e8aee7ea2c60bcd36a60a08b4fa41f97e2fccf1c4df98b","typeString":"literal_string \"Not implemented\""},"value":"Not implemented"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_9f5474d7a5849b3f79e8aee7ea2c60bcd36a60a08b4fa41f97e2fccf1c4df98b","typeString":"literal_string \"Not implemented\""}],"id":32443,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"5717:6:86","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":32445,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5717:25:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32446,"nodeType":"ExpressionStatement","src":"5717:25:86"}]},"functionSelector":"8eec5d70","id":32448,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCount","nameLocation":"5660:12:86","nodeType":"FunctionDefinition","parameters":{"id":32439,"nodeType":"ParameterList","parameters":[],"src":"5672:2:86"},"returnParameters":{"id":32442,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32441,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32448,"src":"5698:7:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32440,"name":"uint256","nodeType":"ElementaryTypeName","src":"5698:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5697:9:86"},"scope":32594,"src":"5651:98:86","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[1558],"body":{"id":32458,"nodeType":"Block","src":"5816:42:86","statements":[{"expression":{"arguments":[{"hexValue":"4e6f7420696d706c656d656e746564","id":32455,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5833:17:86","typeDescriptions":{"typeIdentifier":"t_stringliteral_9f5474d7a5849b3f79e8aee7ea2c60bcd36a60a08b4fa41f97e2fccf1c4df98b","typeString":"literal_string \"Not implemented\""},"value":"Not implemented"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_9f5474d7a5849b3f79e8aee7ea2c60bcd36a60a08b4fa41f97e2fccf1c4df98b","typeString":"literal_string \"Not implemented\""}],"id":32454,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"5826:6:86","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":32456,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5826:25:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32457,"nodeType":"ExpressionStatement","src":"5826:25:86"}]},"functionSelector":"673a2a1f","id":32459,"implemented":true,"kind":"function","modifiers":[],"name":"getPools","nameLocation":"5764:8:86","nodeType":"FunctionDefinition","parameters":{"id":32449,"nodeType":"ParameterList","parameters":[],"src":"5772:2:86"},"returnParameters":{"id":32453,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32452,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32459,"src":"5798:16:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":32450,"name":"address","nodeType":"ElementaryTypeName","src":"5798:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":32451,"nodeType":"ArrayTypeName","src":"5798:9:86","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"5797:18:86"},"scope":32594,"src":"5755:103:86","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[1551],"body":{"id":32473,"nodeType":"Block","src":"5948:42:86","statements":[{"expression":{"arguments":[{"hexValue":"4e6f7420696d706c656d656e746564","id":32470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5965:17:86","typeDescriptions":{"typeIdentifier":"t_stringliteral_9f5474d7a5849b3f79e8aee7ea2c60bcd36a60a08b4fa41f97e2fccf1c4df98b","typeString":"literal_string \"Not implemented\""},"value":"Not implemented"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_9f5474d7a5849b3f79e8aee7ea2c60bcd36a60a08b4fa41f97e2fccf1c4df98b","typeString":"literal_string \"Not implemented\""}],"id":32469,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"5958:6:86","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":32471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5958:25:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32472,"nodeType":"ExpressionStatement","src":"5958:25:86"}]},"functionSelector":"53a72f7e","id":32474,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolsInRange","nameLocation":"5873:15:86","nodeType":"FunctionDefinition","parameters":{"id":32464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32461,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32474,"src":"5889:7:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32460,"name":"uint256","nodeType":"ElementaryTypeName","src":"5889:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":32463,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32474,"src":"5898:7:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32462,"name":"uint256","nodeType":"ElementaryTypeName","src":"5898:7:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5888:18:86"},"returnParameters":{"id":32468,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32467,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32474,"src":"5930:16:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":32465,"name":"address","nodeType":"ElementaryTypeName","src":"5930:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":32466,"nodeType":"ArrayTypeName","src":"5930:9:86","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"5929:18:86"},"scope":32594,"src":"5864:126:86","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[1574],"body":{"id":32482,"nodeType":"Block","src":"6082:33:86","statements":[{"expression":{"id":32480,"name":"_disabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32100,"src":"6099:9:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":32479,"id":32481,"nodeType":"Return","src":"6092:16:86"}]},"documentation":{"id":32475,"nodeType":"StructuredDocumentation","src":"5996:32:86","text":"@inheritdoc IBasePoolFactory"},"functionSelector":"6c57f5a9","id":32483,"implemented":true,"kind":"function","modifiers":[],"name":"isDisabled","nameLocation":"6042:10:86","nodeType":"FunctionDefinition","parameters":{"id":32476,"nodeType":"ParameterList","parameters":[],"src":"6052:2:86"},"returnParameters":{"id":32479,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32478,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32483,"src":"6076:4:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32477,"name":"bool","nodeType":"ElementaryTypeName","src":"6076:4:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6075:6:86"},"scope":32594,"src":"6033:82:86","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[1568],"body":{"id":32526,"nodeType":"Block","src":"6298:304:86","statements":[{"assignments":[32494],"declarations":[{"constant":false,"id":32494,"mutability":"mutable","name":"creationCode","nameLocation":"6321:12:86","nodeType":"VariableDeclaration","scope":32526,"src":"6308:25:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":32493,"name":"bytes","nodeType":"ElementaryTypeName","src":"6308:5:86","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":32503,"initialValue":{"arguments":[{"expression":{"arguments":[{"id":32498,"name":"PoolMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34486,"src":"6358:8:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolMock_$34486_$","typeString":"type(contract PoolMock)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_PoolMock_$34486_$","typeString":"type(contract PoolMock)"}],"id":32497,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6353:4:86","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":32499,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6353:14:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_PoolMock_$34486","typeString":"type(contract PoolMock)"}},"id":32500,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6368:12:86","memberName":"creationCode","nodeType":"MemberAccess","src":"6353:27:86","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":32501,"name":"constructorArgs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32486,"src":"6382:15:86","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":32495,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"6336:3:86","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":32496,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6340:12:86","memberName":"encodePacked","nodeType":"MemberAccess","src":"6336:16:86","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":32502,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6336:62:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"6308:90:86"},{"assignments":[32505],"declarations":[{"constant":false,"id":32505,"mutability":"mutable","name":"creationCodeHash","nameLocation":"6416:16:86","nodeType":"VariableDeclaration","scope":32526,"src":"6408:24:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":32504,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6408:7:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":32509,"initialValue":{"arguments":[{"id":32507,"name":"creationCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32494,"src":"6445:12:86","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":32506,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"6435:9:86","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":32508,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6435:23:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"6408:50:86"},{"assignments":[32511],"declarations":[{"constant":false,"id":32511,"mutability":"mutable","name":"finalSalt","nameLocation":"6476:9:86","nodeType":"VariableDeclaration","scope":32526,"src":"6468:17:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":32510,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6468:7:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":32515,"initialValue":{"arguments":[{"id":32513,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32488,"src":"6506:4:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":32512,"name":"_computeFinalSalt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32593,"src":"6488:17:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) view returns (bytes32)"}},"id":32514,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6488:23:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"6468:43:86"},{"expression":{"arguments":[{"id":32518,"name":"finalSalt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32511,"src":"6552:9:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":32519,"name":"creationCodeHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32505,"src":"6563:16:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":32522,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6589:4:86","typeDescriptions":{"typeIdentifier":"t_contract$_PoolFactoryMock_$32594","typeString":"contract PoolFactoryMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PoolFactoryMock_$32594","typeString":"contract PoolFactoryMock"}],"id":32521,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6581:7:86","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":32520,"name":"address","nodeType":"ElementaryTypeName","src":"6581:7:86","typeDescriptions":{}}},"id":32523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6581:13:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":32516,"name":"Create2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40839,"src":"6529:7:86","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Create2_$40839_$","typeString":"type(library Create2)"}},"id":32517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6537:14:86","memberName":"computeAddress","nodeType":"MemberAccess","referencedDeclaration":40838,"src":"6529:22:86","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_address_$","typeString":"function (bytes32,bytes32,address) pure returns (address)"}},"id":32524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6529:66:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":32492,"id":32525,"nodeType":"Return","src":"6522:73:86"}]},"documentation":{"id":32484,"nodeType":"StructuredDocumentation","src":"6121:32:86","text":"@inheritdoc IBasePoolFactory"},"functionSelector":"44f6fec7","id":32527,"implemented":true,"kind":"function","modifiers":[],"name":"getDeploymentAddress","nameLocation":"6167:20:86","nodeType":"FunctionDefinition","parameters":{"id":32489,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32486,"mutability":"mutable","name":"constructorArgs","nameLocation":"6210:15:86","nodeType":"VariableDeclaration","scope":32527,"src":"6197:28:86","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":32485,"name":"bytes","nodeType":"ElementaryTypeName","src":"6197:5:86","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":32488,"mutability":"mutable","name":"salt","nameLocation":"6243:4:86","nodeType":"VariableDeclaration","scope":32527,"src":"6235:12:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":32487,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6235:7:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6187:66:86"},"returnParameters":{"id":32492,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32491,"mutability":"mutable","name":"deployAddress","nameLocation":"6283:13:86","nodeType":"VariableDeclaration","scope":32527,"src":"6275:21:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32490,"name":"address","nodeType":"ElementaryTypeName","src":"6275:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6274:23:86"},"scope":32594,"src":"6158:444:86","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[1578],"body":{"id":32543,"nodeType":"Block","src":"6686:93:86","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":32533,"name":"_ensureEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32574,"src":"6696:14:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":32534,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6696:16:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32535,"nodeType":"ExpressionStatement","src":"6696:16:86"},{"expression":{"id":32538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":32536,"name":"_disabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32100,"src":"6723:9:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":32537,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6735:4:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"6723:16:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32539,"nodeType":"ExpressionStatement","src":"6723:16:86"},{"eventCall":{"arguments":[],"expression":{"argumentTypes":[],"id":32540,"name":"FactoryDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1520,"src":"6755:15:86","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$__$returns$__$","typeString":"function ()"}},"id":32541,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6755:17:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32542,"nodeType":"EmitStatement","src":"6750:22:86"}]},"documentation":{"id":32528,"nodeType":"StructuredDocumentation","src":"6608:32:86","text":"@inheritdoc IBasePoolFactory"},"functionSelector":"2f2770db","id":32544,"implemented":true,"kind":"function","modifiers":[{"id":32531,"kind":"modifierInvocation","modifierName":{"id":32530,"name":"authenticate","nameLocations":["6673:12:86"],"nodeType":"IdentifierPath","referencedDeclaration":5446,"src":"6673:12:86"},"nodeType":"ModifierInvocation","src":"6673:12:86"}],"name":"disable","nameLocation":"6654:7:86","nodeType":"FunctionDefinition","parameters":{"id":32529,"nodeType":"ParameterList","parameters":[],"src":"6661:2:86"},"returnParameters":{"id":32532,"nodeType":"ParameterList","parameters":[],"src":"6686:0:86"},"scope":32594,"src":"6645:134:86","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":32562,"nodeType":"Block","src":"6850:108:86","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":32549,"name":"_ensureEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32574,"src":"6860:14:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":32550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6860:16:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32551,"nodeType":"ExpressionStatement","src":"6860:16:86"},{"expression":{"id":32556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":32552,"name":"_isPoolFromFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32098,"src":"6887:18:86","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":32554,"indexExpression":{"id":32553,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32546,"src":"6906:4:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6887:24:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":32555,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6914:4:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"6887:31:86","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32557,"nodeType":"ExpressionStatement","src":"6887:31:86"},{"eventCall":{"arguments":[{"id":32559,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32546,"src":"6946:4:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32558,"name":"PoolCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1517,"src":"6934:11:86","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":32560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6934:17:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32561,"nodeType":"EmitStatement","src":"6929:22:86"}]},"id":32563,"implemented":true,"kind":"function","modifiers":[],"name":"_registerPoolWithFactory","nameLocation":"6794:24:86","nodeType":"FunctionDefinition","parameters":{"id":32547,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32546,"mutability":"mutable","name":"pool","nameLocation":"6827:4:86","nodeType":"VariableDeclaration","scope":32563,"src":"6819:12:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32545,"name":"address","nodeType":"ElementaryTypeName","src":"6819:7:86","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6818:14:86"},"returnParameters":{"id":32548,"nodeType":"ParameterList","parameters":[],"src":"6850:0:86"},"scope":32594,"src":"6785:173:86","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":32573,"nodeType":"Block","src":"7043:76:86","statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":32566,"name":"isDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32483,"src":"7057:10:86","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":32567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7057:12:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32572,"nodeType":"IfStatement","src":"7053:60:86","trueBody":{"id":32571,"nodeType":"Block","src":"7071:42:86","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":32568,"name":"Disabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1523,"src":"7092:8:86","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":32569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7092:10:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":32570,"nodeType":"RevertStatement","src":"7085:17:86"}]}}]},"id":32574,"implemented":true,"kind":"function","modifiers":[],"name":"_ensureEnabled","nameLocation":"7012:14:86","nodeType":"FunctionDefinition","parameters":{"id":32564,"nodeType":"ParameterList","parameters":[],"src":"7026:2:86"},"returnParameters":{"id":32565,"nodeType":"ParameterList","parameters":[],"src":"7043:0:86"},"scope":32594,"src":"7003:116:86","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":32592,"nodeType":"Block","src":"7206:78:86","statements":[{"expression":{"arguments":[{"arguments":[{"expression":{"id":32584,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7244:3:86","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":32585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7248:6:86","memberName":"sender","nodeType":"MemberAccess","src":"7244:10:86","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":32586,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"7256:5:86","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":32587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7262:7:86","memberName":"chainid","nodeType":"MemberAccess","src":"7256:13:86","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":32588,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32576,"src":"7271:4:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":32582,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"7233:3:86","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":32583,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7237:6:86","memberName":"encode","nodeType":"MemberAccess","src":"7233:10:86","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":32589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7233:43:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":32581,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"7223:9:86","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":32590,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7223:54:86","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":32580,"id":32591,"nodeType":"Return","src":"7216:61:86"}]},"id":32593,"implemented":true,"kind":"function","modifiers":[],"name":"_computeFinalSalt","nameLocation":"7134:17:86","nodeType":"FunctionDefinition","parameters":{"id":32577,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32576,"mutability":"mutable","name":"salt","nameLocation":"7160:4:86","nodeType":"VariableDeclaration","scope":32593,"src":"7152:12:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":32575,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7152:7:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7151:14:86"},"returnParameters":{"id":32580,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32579,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32593,"src":"7197:7:86","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":32578,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7197:7:86","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7196:9:86"},"scope":32594,"src":"7125:159:86","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":32595,"src":"636:6650:86","usedErrors":[234,1523,1526,5825],"usedEvents":[1517,1520]}],"src":"46:7241:86"},"id":86},"@balancer-labs/v3-vault/contracts/test/PoolHooksMock.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/test/PoolHooksMock.sol","exportedSymbols":{"AddLiquidityKind":[4807],"AddLiquidityParams":[4823],"Address":[40714],"AfterSwapParams":[4801],"BaseHooks":[11349],"BufferWrapOrUnwrapParams":[4862],"FEE_BITLENGTH":[4865],"FEE_SCALING_FACTOR":[4868],"FixedPoint":[8208],"HookFlags":[4627],"HooksConfig":[4651],"IERC20":[40109],"IERC4626":[39833],"IRateProvider":[263],"ISenderGuard":[3041],"IVault":[3111],"IVaultMock":[1414],"LiquidityManagement":[4580],"MAX_FEE_PERCENTAGE":[4871],"PoolConfig":[4605],"PoolConfigBits":[4582],"PoolData":[4729],"PoolHooksMock":[34144],"PoolRoleAccounts":[4677],"PoolSwapParams":[4772],"RateProviderMock":[34616],"RemoveLiquidityKind":[4828],"RemoveLiquidityParams":[4844],"Rounding":[4732],"ScalingHelpers":[6848],"SwapKind":[4735],"SwapState":[4661],"TokenConfig":[4694],"TokenInfo":[4704],"TokenType":[4681],"VaultGuard":[28149],"VaultState":[4669],"VaultSwapParams":[4754],"WrappingDirection":[4847]},"id":34145,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":32596,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:87"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":32598,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34145,"sourceUnit":40110,"src":"72:72:87","symbolAliases":[{"foreign":{"id":32597,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"81:6:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"@openzeppelin/contracts/utils/Address.sol","id":32600,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34145,"sourceUnit":40715,"src":"145:68:87","symbolAliases":[{"foreign":{"id":32599,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40714,"src":"154:7:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/ISenderGuard.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/ISenderGuard.sol","id":32602,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34145,"sourceUnit":3042,"src":"215:93:87","symbolAliases":[{"foreign":{"id":32601,"name":"ISenderGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3041,"src":"224:12:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":32604,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34145,"sourceUnit":3112,"src":"309:81:87","symbolAliases":[{"foreign":{"id":32603,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"318:6:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/test/IVaultMock.sol","file":"@balancer-labs/v3-interfaces/contracts/test/IVaultMock.sol","id":32606,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34145,"sourceUnit":1415,"src":"391:88:87","symbolAliases":[{"foreign":{"id":32605,"name":"IVaultMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1414,"src":"400:10:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":32607,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34145,"sourceUnit":4872,"src":"480:69:87","symbolAliases":[],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":32609,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34145,"sourceUnit":8209,"src":"551:92:87","symbolAliases":[{"foreign":{"id":32608,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"560:10:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol","id":32611,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34145,"sourceUnit":6849,"src":"644:103:87","symbolAliases":[{"foreign":{"id":32610,"name":"ScalingHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6848,"src":"653:14:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/test/RateProviderMock.sol","file":"./RateProviderMock.sol","id":32613,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34145,"sourceUnit":34617,"src":"749:58:87","symbolAliases":[{"foreign":{"id":32612,"name":"RateProviderMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34616,"src":"758:16:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultGuard.sol","file":"../VaultGuard.sol","id":32615,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34145,"sourceUnit":28150,"src":"808:47:87","symbolAliases":[{"foreign":{"id":32614,"name":"VaultGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28149,"src":"817:10:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/BaseHooks.sol","file":"../BaseHooks.sol","id":32617,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34145,"sourceUnit":11350,"src":"856:45:87","symbolAliases":[{"foreign":{"id":32616,"name":"BaseHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11349,"src":"865:9:87","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":32618,"name":"BaseHooks","nameLocations":["929:9:87"],"nodeType":"IdentifierPath","referencedDeclaration":11349,"src":"929:9:87"},"id":32619,"nodeType":"InheritanceSpecifier","src":"929:9:87"},{"baseName":{"id":32620,"name":"VaultGuard","nameLocations":["940:10:87"],"nodeType":"IdentifierPath","referencedDeclaration":28149,"src":"940:10:87"},"id":32621,"nodeType":"InheritanceSpecifier","src":"940:10:87"}],"canonicalName":"PoolHooksMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":34144,"linearizedBaseContracts":[34144,28149,11349,2026],"name":"PoolHooksMock","nameLocation":"912:13:87","nodeType":"ContractDefinition","nodes":[{"global":false,"id":32624,"libraryName":{"id":32622,"name":"FixedPoint","nameLocations":["963:10:87"],"nodeType":"IdentifierPath","referencedDeclaration":8208,"src":"963:10:87"},"nodeType":"UsingForDirective","src":"957:29:87","typeName":{"id":32623,"name":"uint256","nodeType":"ElementaryTypeName","src":"978:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"global":false,"id":32627,"libraryName":{"id":32625,"name":"ScalingHelpers","nameLocations":["997:14:87"],"nodeType":"IdentifierPath","referencedDeclaration":6848,"src":"997:14:87"},"nodeType":"UsingForDirective","src":"991:33:87","typeName":{"id":32626,"name":"uint256","nodeType":"ElementaryTypeName","src":"1016:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"constant":false,"functionSelector":"5cd00746","id":32629,"mutability":"mutable","name":"failOnAfterInitialize","nameLocation":"1042:21:87","nodeType":"VariableDeclaration","scope":34144,"src":"1030:33:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32628,"name":"bool","nodeType":"ElementaryTypeName","src":"1030:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"public"},{"constant":false,"functionSelector":"f5279d9c","id":32631,"mutability":"mutable","name":"failOnBeforeInitialize","nameLocation":"1081:22:87","nodeType":"VariableDeclaration","scope":34144,"src":"1069:34:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32630,"name":"bool","nodeType":"ElementaryTypeName","src":"1069:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"public"},{"constant":false,"functionSelector":"e326f03a","id":32633,"mutability":"mutable","name":"failOnComputeDynamicSwapFeeHook","nameLocation":"1121:31:87","nodeType":"VariableDeclaration","scope":34144,"src":"1109:43:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32632,"name":"bool","nodeType":"ElementaryTypeName","src":"1109:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"public"},{"constant":false,"functionSelector":"5351b230","id":32635,"mutability":"mutable","name":"failOnBeforeSwapHook","nameLocation":"1170:20:87","nodeType":"VariableDeclaration","scope":34144,"src":"1158:32:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32634,"name":"bool","nodeType":"ElementaryTypeName","src":"1158:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"public"},{"constant":false,"functionSelector":"a5098f10","id":32637,"mutability":"mutable","name":"failOnAfterSwapHook","nameLocation":"1208:19:87","nodeType":"VariableDeclaration","scope":34144,"src":"1196:31:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32636,"name":"bool","nodeType":"ElementaryTypeName","src":"1196:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"public"},{"constant":false,"functionSelector":"35f7290e","id":32639,"mutability":"mutable","name":"failOnBeforeAddLiquidity","nameLocation":"1245:24:87","nodeType":"VariableDeclaration","scope":34144,"src":"1233:36:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32638,"name":"bool","nodeType":"ElementaryTypeName","src":"1233:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"public"},{"constant":false,"functionSelector":"40dc21d4","id":32641,"mutability":"mutable","name":"failOnAfterAddLiquidity","nameLocation":"1287:23:87","nodeType":"VariableDeclaration","scope":34144,"src":"1275:35:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32640,"name":"bool","nodeType":"ElementaryTypeName","src":"1275:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"public"},{"constant":false,"functionSelector":"677db20e","id":32643,"mutability":"mutable","name":"failOnBeforeRemoveLiquidity","nameLocation":"1328:27:87","nodeType":"VariableDeclaration","scope":34144,"src":"1316:39:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32642,"name":"bool","nodeType":"ElementaryTypeName","src":"1316:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"public"},{"constant":false,"functionSelector":"a975dda0","id":32645,"mutability":"mutable","name":"failOnAfterRemoveLiquidity","nameLocation":"1373:26:87","nodeType":"VariableDeclaration","scope":34144,"src":"1361:38:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32644,"name":"bool","nodeType":"ElementaryTypeName","src":"1361:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"public"},{"constant":false,"functionSelector":"f8b5ef85","id":32647,"mutability":"mutable","name":"shouldForceHookAdjustedAmounts","nameLocation":"1418:30:87","nodeType":"VariableDeclaration","scope":34144,"src":"1406:42:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32646,"name":"bool","nodeType":"ElementaryTypeName","src":"1406:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"public"},{"constant":false,"functionSelector":"a55e47be","id":32650,"mutability":"mutable","name":"forcedHookAdjustedAmountsLiquidity","nameLocation":"1471:34:87","nodeType":"VariableDeclaration","scope":34144,"src":"1454:51:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[]"},"typeName":{"baseType":{"id":32648,"name":"uint256","nodeType":"ElementaryTypeName","src":"1454:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32649,"nodeType":"ArrayTypeName","src":"1454:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"public"},{"constant":false,"functionSelector":"b298157b","id":32652,"mutability":"mutable","name":"changeTokenRateOnBeforeSwapHook","nameLocation":"1524:31:87","nodeType":"VariableDeclaration","scope":34144,"src":"1512:43:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32651,"name":"bool","nodeType":"ElementaryTypeName","src":"1512:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"public"},{"constant":false,"functionSelector":"3d05719a","id":32654,"mutability":"mutable","name":"changeTokenRateOnBeforeInitialize","nameLocation":"1573:33:87","nodeType":"VariableDeclaration","scope":34144,"src":"1561:45:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32653,"name":"bool","nodeType":"ElementaryTypeName","src":"1561:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"public"},{"constant":false,"functionSelector":"af72105d","id":32656,"mutability":"mutable","name":"changeTokenRateOnBeforeAddLiquidity","nameLocation":"1624:35:87","nodeType":"VariableDeclaration","scope":34144,"src":"1612:47:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32655,"name":"bool","nodeType":"ElementaryTypeName","src":"1612:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"public"},{"constant":false,"functionSelector":"9f94c522","id":32658,"mutability":"mutable","name":"changeTokenRateOnBeforeRemoveLiquidity","nameLocation":"1677:38:87","nodeType":"VariableDeclaration","scope":34144,"src":"1665:50:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32657,"name":"bool","nodeType":"ElementaryTypeName","src":"1665:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"public"},{"constant":false,"functionSelector":"e4c593d7","id":32660,"mutability":"mutable","name":"changePoolBalancesOnBeforeSwapHook","nameLocation":"1734:34:87","nodeType":"VariableDeclaration","scope":34144,"src":"1722:46:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32659,"name":"bool","nodeType":"ElementaryTypeName","src":"1722:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"public"},{"constant":false,"functionSelector":"005b449c","id":32662,"mutability":"mutable","name":"changePoolBalancesOnBeforeAddLiquidityHook","nameLocation":"1786:42:87","nodeType":"VariableDeclaration","scope":34144,"src":"1774:54:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32661,"name":"bool","nodeType":"ElementaryTypeName","src":"1774:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"public"},{"constant":false,"functionSelector":"00d332fd","id":32664,"mutability":"mutable","name":"changePoolBalancesOnBeforeRemoveLiquidityHook","nameLocation":"1846:45:87","nodeType":"VariableDeclaration","scope":34144,"src":"1834:57:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32663,"name":"bool","nodeType":"ElementaryTypeName","src":"1834:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"public"},{"constant":false,"functionSelector":"80c554c1","id":32666,"mutability":"mutable","name":"shouldSettleDiscount","nameLocation":"1910:20:87","nodeType":"VariableDeclaration","scope":34144,"src":"1898:32:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32665,"name":"bool","nodeType":"ElementaryTypeName","src":"1898:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"public"},{"constant":false,"functionSelector":"4392312a","id":32668,"mutability":"mutable","name":"hookSwapFeePercentage","nameLocation":"1951:21:87","nodeType":"VariableDeclaration","scope":34144,"src":"1936:36:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32667,"name":"uint256","nodeType":"ElementaryTypeName","src":"1936:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"functionSelector":"2352c2ed","id":32670,"mutability":"mutable","name":"hookSwapDiscountPercentage","nameLocation":"1993:26:87","nodeType":"VariableDeclaration","scope":34144,"src":"1978:41:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32669,"name":"uint256","nodeType":"ElementaryTypeName","src":"1978:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"functionSelector":"02273467","id":32672,"mutability":"mutable","name":"addLiquidityHookFeePercentage","nameLocation":"2040:29:87","nodeType":"VariableDeclaration","scope":34144,"src":"2025:44:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32671,"name":"uint256","nodeType":"ElementaryTypeName","src":"2025:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"functionSelector":"e908e85d","id":32674,"mutability":"mutable","name":"addLiquidityHookDiscountPercentage","nameLocation":"2090:34:87","nodeType":"VariableDeclaration","scope":34144,"src":"2075:49:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32673,"name":"uint256","nodeType":"ElementaryTypeName","src":"2075:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"functionSelector":"eb499270","id":32676,"mutability":"mutable","name":"removeLiquidityHookFeePercentage","nameLocation":"2145:32:87","nodeType":"VariableDeclaration","scope":34144,"src":"2130:47:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32675,"name":"uint256","nodeType":"ElementaryTypeName","src":"2130:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"functionSelector":"bd825f6b","id":32678,"mutability":"mutable","name":"removeLiquidityHookDiscountPercentage","nameLocation":"2198:37:87","nodeType":"VariableDeclaration","scope":34144,"src":"2183:52:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32677,"name":"uint256","nodeType":"ElementaryTypeName","src":"2183:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"public"},{"constant":false,"functionSelector":"31378f4f","id":32680,"mutability":"mutable","name":"swapReentrancyHookActive","nameLocation":"2254:24:87","nodeType":"VariableDeclaration","scope":34144,"src":"2242:36:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32679,"name":"bool","nodeType":"ElementaryTypeName","src":"2242:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"public"},{"constant":false,"id":32682,"mutability":"mutable","name":"_swapHookContract","nameLocation":"2300:17:87","nodeType":"VariableDeclaration","scope":34144,"src":"2284:33:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32681,"name":"address","nodeType":"ElementaryTypeName","src":"2284:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":false,"id":32684,"mutability":"mutable","name":"_swapHookCalldata","nameLocation":"2337:17:87","nodeType":"VariableDeclaration","scope":34144,"src":"2323:31:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes"},"typeName":{"id":32683,"name":"bytes","nodeType":"ElementaryTypeName","src":"2323:5:87","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"private"},{"constant":false,"id":32687,"mutability":"mutable","name":"_rateProvider","nameLocation":"2386:13:87","nodeType":"VariableDeclaration","scope":34144,"src":"2361:38:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_RateProviderMock_$34616","typeString":"contract RateProviderMock"},"typeName":{"id":32686,"nodeType":"UserDefinedTypeName","pathNode":{"id":32685,"name":"RateProviderMock","nameLocations":["2361:16:87"],"nodeType":"IdentifierPath","referencedDeclaration":34616,"src":"2361:16:87"},"referencedDeclaration":34616,"src":"2361:16:87","typeDescriptions":{"typeIdentifier":"t_contract$_RateProviderMock_$34616","typeString":"contract RateProviderMock"}},"visibility":"private"},{"constant":false,"id":32689,"mutability":"mutable","name":"_newTokenRate","nameLocation":"2421:13:87","nodeType":"VariableDeclaration","scope":34144,"src":"2405:29:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32688,"name":"uint256","nodeType":"ElementaryTypeName","src":"2405:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":32691,"mutability":"mutable","name":"_dynamicSwapFee","nameLocation":"2456:15:87","nodeType":"VariableDeclaration","scope":34144,"src":"2440:31:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32690,"name":"uint256","nodeType":"ElementaryTypeName","src":"2440:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":32693,"mutability":"mutable","name":"_pool","nameLocation":"2493:5:87","nodeType":"VariableDeclaration","scope":34144,"src":"2477:21:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32692,"name":"address","nodeType":"ElementaryTypeName","src":"2477:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":false,"id":32695,"mutability":"mutable","name":"_specialSender","nameLocation":"2520:14:87","nodeType":"VariableDeclaration","scope":34144,"src":"2504:30:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32694,"name":"address","nodeType":"ElementaryTypeName","src":"2504:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":false,"id":32698,"mutability":"mutable","name":"_newBalancesRaw","nameLocation":"2558:15:87","nodeType":"VariableDeclaration","scope":34144,"src":"2540:33:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[]"},"typeName":{"baseType":{"id":32696,"name":"uint256","nodeType":"ElementaryTypeName","src":"2540:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32697,"nodeType":"ArrayTypeName","src":"2540:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"private"},{"constant":false,"functionSelector":"4f036756","id":32700,"mutability":"mutable","name":"shouldIgnoreSavedSender","nameLocation":"2700:23:87","nodeType":"VariableDeclaration","scope":34144,"src":"2688:35:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32699,"name":"bool","nodeType":"ElementaryTypeName","src":"2688:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"public"},{"constant":false,"id":32702,"mutability":"mutable","name":"_savedSender","nameLocation":"2745:12:87","nodeType":"VariableDeclaration","scope":34144,"src":"2729:28:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32701,"name":"address","nodeType":"ElementaryTypeName","src":"2729:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":false,"id":32706,"mutability":"mutable","name":"_allowedFactories","nameLocation":"2816:17:87","nodeType":"VariableDeclaration","scope":34144,"src":"2764:69:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":32705,"keyName":"pool","keyNameLocation":"2780:4:87","keyType":{"id":32703,"name":"address","nodeType":"ElementaryTypeName","src":"2772:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2764:43:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueName":"isFromFactory","valueNameLocation":"2793:13:87","valueType":{"id":32704,"name":"bool","nodeType":"ElementaryTypeName","src":"2788:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"private"},{"constant":false,"id":32709,"mutability":"mutable","name":"_hookFlags","nameLocation":"2858:10:87","nodeType":"VariableDeclaration","scope":34144,"src":"2840:28:87","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_storage","typeString":"struct HookFlags"},"typeName":{"id":32708,"nodeType":"UserDefinedTypeName","pathNode":{"id":32707,"name":"HookFlags","nameLocations":["2840:9:87"],"nodeType":"IdentifierPath","referencedDeclaration":4627,"src":"2840:9:87"},"referencedDeclaration":4627,"src":"2840:9:87","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_storage_ptr","typeString":"struct HookFlags"}},"visibility":"private"},{"body":{"id":32722,"nodeType":"Block","src":"2919:44:87","statements":[{"expression":{"id":32720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":32718,"name":"shouldSettleDiscount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32666,"src":"2929:20:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":32719,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2952:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"2929:27:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32721,"nodeType":"ExpressionStatement","src":"2929:27:87"}]},"id":32723,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":32715,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32712,"src":"2912:5:87","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"id":32716,"kind":"baseConstructorSpecifier","modifierName":{"id":32714,"name":"VaultGuard","nameLocations":["2901:10:87"],"nodeType":"IdentifierPath","referencedDeclaration":28149,"src":"2901:10:87"},"nodeType":"ModifierInvocation","src":"2901:17:87"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":32713,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32712,"mutability":"mutable","name":"vault","nameLocation":"2894:5:87","nodeType":"VariableDeclaration","scope":32723,"src":"2887:12:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":32711,"nodeType":"UserDefinedTypeName","pathNode":{"id":32710,"name":"IVault","nameLocations":["2887:6:87"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"2887:6:87"},"referencedDeclaration":3111,"src":"2887:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"}],"src":"2886:14:87"},"returnParameters":{"id":32717,"nodeType":"ParameterList","parameters":[],"src":"2919:0:87"},"scope":34144,"src":"2875:88:87","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[11141],"body":{"id":32744,"nodeType":"Block","src":"3141:50:87","statements":[{"expression":{"baseExpression":{"id":32740,"name":"_allowedFactories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32706,"src":"3158:17:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":32742,"indexExpression":{"id":32741,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32725,"src":"3176:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3158:26:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":32739,"id":32743,"nodeType":"Return","src":"3151:33:87"}]},"functionSelector":"0b89f182","id":32745,"implemented":true,"kind":"function","modifiers":[],"name":"onRegister","nameLocation":"2978:10:87","nodeType":"FunctionDefinition","overrides":{"id":32736,"nodeType":"OverrideSpecifier","overrides":[],"src":"3117:8:87"},"parameters":{"id":32735,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32725,"mutability":"mutable","name":"factory","nameLocation":"3006:7:87","nodeType":"VariableDeclaration","scope":32745,"src":"2998:15:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32724,"name":"address","nodeType":"ElementaryTypeName","src":"2998:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32727,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32745,"src":"3023:7:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32726,"name":"address","nodeType":"ElementaryTypeName","src":"3023:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32731,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32745,"src":"3040:20:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":32729,"nodeType":"UserDefinedTypeName","pathNode":{"id":32728,"name":"TokenConfig","nameLocations":["3040:11:87"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"3040:11:87"},"referencedDeclaration":4694,"src":"3040:11:87","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":32730,"nodeType":"ArrayTypeName","src":"3040:13:87","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":32734,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32745,"src":"3070:28:87","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":32733,"nodeType":"UserDefinedTypeName","pathNode":{"id":32732,"name":"LiquidityManagement","nameLocations":["3070:19:87"],"nodeType":"IdentifierPath","referencedDeclaration":4580,"src":"3070:19:87"},"referencedDeclaration":4580,"src":"3070:19:87","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"2988:116:87"},"returnParameters":{"id":32739,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32738,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32745,"src":"3135:4:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32737,"name":"bool","nodeType":"ElementaryTypeName","src":"3135:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3134:6:87"},"scope":34144,"src":"2969:222:87","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[11148],"body":{"id":32754,"nodeType":"Block","src":"3269:34:87","statements":[{"expression":{"id":32752,"name":"_hookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32709,"src":"3286:10:87","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_storage","typeString":"struct HookFlags storage ref"}},"functionReturnParameters":32751,"id":32753,"nodeType":"Return","src":"3279:17:87"}]},"functionSelector":"d77153a7","id":32755,"implemented":true,"kind":"function","modifiers":[],"name":"getHookFlags","nameLocation":"3206:12:87","nodeType":"FunctionDefinition","overrides":{"id":32747,"nodeType":"OverrideSpecifier","overrides":[],"src":"3233:8:87"},"parameters":{"id":32746,"nodeType":"ParameterList","parameters":[],"src":"3218:2:87"},"returnParameters":{"id":32751,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32750,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32755,"src":"3251:16:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_memory_ptr","typeString":"struct HookFlags"},"typeName":{"id":32749,"nodeType":"UserDefinedTypeName","pathNode":{"id":32748,"name":"HookFlags","nameLocations":["3251:9:87"],"nodeType":"IdentifierPath","referencedDeclaration":4627,"src":"3251:9:87"},"referencedDeclaration":4627,"src":"3251:9:87","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_storage_ptr","typeString":"struct HookFlags"}},"visibility":"internal"}],"src":"3250:18:87"},"scope":34144,"src":"3197:106:87","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":32765,"nodeType":"Block","src":"3368:39:87","statements":[{"expression":{"id":32763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":32761,"name":"_hookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32709,"src":"3378:10:87","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_storage","typeString":"struct HookFlags storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":32762,"name":"hookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32758,"src":"3391:9:87","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_memory_ptr","typeString":"struct HookFlags memory"}},"src":"3378:22:87","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_storage","typeString":"struct HookFlags storage ref"}},"id":32764,"nodeType":"ExpressionStatement","src":"3378:22:87"}]},"functionSelector":"e9f7c591","id":32766,"implemented":true,"kind":"function","modifiers":[],"name":"setHookFlags","nameLocation":"3318:12:87","nodeType":"FunctionDefinition","parameters":{"id":32759,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32758,"mutability":"mutable","name":"hookFlags","nameLocation":"3348:9:87","nodeType":"VariableDeclaration","scope":32766,"src":"3331:26:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_memory_ptr","typeString":"struct HookFlags"},"typeName":{"id":32757,"nodeType":"UserDefinedTypeName","pathNode":{"id":32756,"name":"HookFlags","nameLocations":["3331:9:87"],"nodeType":"IdentifierPath","referencedDeclaration":4627,"src":"3331:9:87"},"referencedDeclaration":4627,"src":"3331:9:87","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_storage_ptr","typeString":"struct HookFlags"}},"visibility":"internal"}],"src":"3330:28:87"},"returnParameters":{"id":32760,"nodeType":"ParameterList","parameters":[],"src":"3368:0:87"},"scope":34144,"src":"3309:98:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[11162],"body":{"id":32786,"nodeType":"Block","src":"3504:139:87","statements":[{"condition":{"id":32777,"name":"changeTokenRateOnBeforeInitialize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32654,"src":"3518:33:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32782,"nodeType":"IfStatement","src":"3514:82:87","trueBody":{"id":32781,"nodeType":"Block","src":"3553:43:87","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":32778,"name":"_updateTokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34116,"src":"3567:16:87","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":32779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3567:18:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32780,"nodeType":"ExpressionStatement","src":"3567:18:87"}]}},{"expression":{"id":32784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3613:23:87","subExpression":{"id":32783,"name":"failOnBeforeInitialize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32631,"src":"3614:22:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":32776,"id":32785,"nodeType":"Return","src":"3606:30:87"}]},"functionSelector":"1c149e28","id":32787,"implemented":true,"kind":"function","modifiers":[],"name":"onBeforeInitialize","nameLocation":"3422:18:87","nodeType":"FunctionDefinition","overrides":{"id":32773,"nodeType":"OverrideSpecifier","overrides":[],"src":"3480:8:87"},"parameters":{"id":32772,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32769,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32787,"src":"3441:16:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":32767,"name":"uint256","nodeType":"ElementaryTypeName","src":"3441:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32768,"nodeType":"ArrayTypeName","src":"3441:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":32771,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32787,"src":"3459:12:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":32770,"name":"bytes","nodeType":"ElementaryTypeName","src":"3459:5:87","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3440:32:87"},"returnParameters":{"id":32776,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32775,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32787,"src":"3498:4:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32774,"name":"bool","nodeType":"ElementaryTypeName","src":"3498:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3497:6:87"},"scope":34144,"src":"3413:230:87","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[11178],"body":{"id":32803,"nodeType":"Block","src":"3753:46:87","statements":[{"expression":{"id":32801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3770:22:87","subExpression":{"id":32800,"name":"failOnAfterInitialize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32629,"src":"3771:21:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":32799,"id":32802,"nodeType":"Return","src":"3763:29:87"}]},"functionSelector":"38be241d","id":32804,"implemented":true,"kind":"function","modifiers":[],"name":"onAfterInitialize","nameLocation":"3658:17:87","nodeType":"FunctionDefinition","overrides":{"id":32796,"nodeType":"OverrideSpecifier","overrides":[],"src":"3729:8:87"},"parameters":{"id":32795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32790,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32804,"src":"3676:16:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":32788,"name":"uint256","nodeType":"ElementaryTypeName","src":"3676:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32789,"nodeType":"ArrayTypeName","src":"3676:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":32792,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32804,"src":"3694:7:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32791,"name":"uint256","nodeType":"ElementaryTypeName","src":"3694:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":32794,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32804,"src":"3703:12:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":32793,"name":"bytes","nodeType":"ElementaryTypeName","src":"3703:5:87","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3675:41:87"},"returnParameters":{"id":32799,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32798,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32804,"src":"3747:4:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32797,"name":"bool","nodeType":"ElementaryTypeName","src":"3747:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"3746:6:87"},"scope":34144,"src":"3649:150:87","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[11348],"body":{"id":32854,"nodeType":"Block","src":"3973:373:87","statements":[{"assignments":[32820],"declarations":[{"constant":false,"id":32820,"mutability":"mutable","name":"finalSwapFee","nameLocation":"3991:12:87","nodeType":"VariableDeclaration","scope":32854,"src":"3983:20:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32819,"name":"uint256","nodeType":"ElementaryTypeName","src":"3983:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32822,"initialValue":{"id":32821,"name":"_dynamicSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32691,"src":"4006:15:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3983:38:87"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":32828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32823,"name":"_specialSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32695,"src":"4036:14:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":32826,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4062:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":32825,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4054:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":32824,"name":"address","nodeType":"ElementaryTypeName","src":"4054:7:87","typeDescriptions":{}}},"id":32827,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4054:10:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4036:28:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32848,"nodeType":"IfStatement","src":"4032:242:87","trueBody":{"id":32847,"nodeType":"Block","src":"4066:208:87","statements":[{"assignments":[32830],"declarations":[{"constant":false,"id":32830,"mutability":"mutable","name":"swapper","nameLocation":"4121:7:87","nodeType":"VariableDeclaration","scope":32847,"src":"4113:15:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32829,"name":"address","nodeType":"ElementaryTypeName","src":"4113:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":32837,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":32832,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32807,"src":"4144:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_calldata_ptr","typeString":"struct PoolSwapParams calldata"}},"id":32833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4151:6:87","memberName":"router","nodeType":"MemberAccess","referencedDeclaration":4769,"src":"4144:13:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32831,"name":"ISenderGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3041,"src":"4131:12:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISenderGuard_$3041_$","typeString":"type(contract ISenderGuard)"}},"id":32834,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4131:27:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISenderGuard_$3041","typeString":"contract ISenderGuard"}},"id":32835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4159:9:87","memberName":"getSender","nodeType":"MemberAccess","referencedDeclaration":3040,"src":"4131:37:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":32836,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4131:39:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4113:57:87"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":32840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32838,"name":"swapper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32830,"src":"4188:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":32839,"name":"_specialSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32695,"src":"4199:14:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4188:25:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32846,"nodeType":"IfStatement","src":"4184:80:87","trueBody":{"id":32845,"nodeType":"Block","src":"4215:49:87","statements":[{"expression":{"id":32843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":32841,"name":"finalSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32820,"src":"4233:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":32842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4248:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4233:16:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32844,"nodeType":"ExpressionStatement","src":"4233:16:87"}]}}]}},{"expression":{"components":[{"id":32850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4292:32:87","subExpression":{"id":32849,"name":"failOnComputeDynamicSwapFeeHook","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32633,"src":"4293:31:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":32851,"name":"finalSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32820,"src":"4326:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":32852,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4291:48:87","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":32818,"id":32853,"nodeType":"Return","src":"4284:55:87"}]},"functionSelector":"a0e8f5ac","id":32855,"implemented":true,"kind":"function","modifiers":[],"name":"onComputeDynamicSwapFeePercentage","nameLocation":"3814:33:87","nodeType":"FunctionDefinition","overrides":{"id":32813,"nodeType":"OverrideSpecifier","overrides":[],"src":"3940:8:87"},"parameters":{"id":32812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32807,"mutability":"mutable","name":"params","nameLocation":"3881:6:87","nodeType":"VariableDeclaration","scope":32855,"src":"3857:30:87","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":32806,"nodeType":"UserDefinedTypeName","pathNode":{"id":32805,"name":"PoolSwapParams","nameLocations":["3857:14:87"],"nodeType":"IdentifierPath","referencedDeclaration":4772,"src":"3857:14:87"},"referencedDeclaration":4772,"src":"3857:14:87","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":32809,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32855,"src":"3897:7:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32808,"name":"address","nodeType":"ElementaryTypeName","src":"3897:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":32811,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32855,"src":"3914:7:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32810,"name":"uint256","nodeType":"ElementaryTypeName","src":"3914:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3847:80:87"},"returnParameters":{"id":32818,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32815,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32855,"src":"3958:4:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32814,"name":"bool","nodeType":"ElementaryTypeName","src":"3958:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":32817,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32855,"src":"3964:7:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32816,"name":"uint256","nodeType":"ElementaryTypeName","src":"3964:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3957:15:87"},"scope":34144,"src":"3805:541:87","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[11312],"body":{"id":32927,"nodeType":"Block","src":"4446:684:87","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":32868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32866,"name":"shouldIgnoreSavedSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32700,"src":"4460:23:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":32867,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4487:5:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"4460:32:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32879,"nodeType":"IfStatement","src":"4456:117:87","trueBody":{"id":32878,"nodeType":"Block","src":"4494:79:87","statements":[{"expression":{"id":32876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":32869,"name":"_savedSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32702,"src":"4508:12:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"expression":{"id":32871,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32858,"src":"4536:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_calldata_ptr","typeString":"struct PoolSwapParams calldata"}},"id":32872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4543:6:87","memberName":"router","nodeType":"MemberAccess","referencedDeclaration":4769,"src":"4536:13:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32870,"name":"ISenderGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3041,"src":"4523:12:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISenderGuard_$3041_$","typeString":"type(contract ISenderGuard)"}},"id":32873,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4523:27:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISenderGuard_$3041","typeString":"contract ISenderGuard"}},"id":32874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4551:9:87","memberName":"getSender","nodeType":"MemberAccess","referencedDeclaration":3040,"src":"4523:37:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":32875,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4523:39:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4508:54:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":32877,"nodeType":"ExpressionStatement","src":"4508:54:87"}]}},{"condition":{"id":32880,"name":"changeTokenRateOnBeforeSwapHook","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32652,"src":"4587:31:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32885,"nodeType":"IfStatement","src":"4583:80:87","trueBody":{"id":32884,"nodeType":"Block","src":"4620:43:87","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":32881,"name":"_updateTokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34116,"src":"4634:16:87","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":32882,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4634:18:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32883,"nodeType":"ExpressionStatement","src":"4634:18:87"}]}},{"condition":{"id":32886,"name":"changePoolBalancesOnBeforeSwapHook","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32660,"src":"4677:34:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32891,"nodeType":"IfStatement","src":"4673:86:87","trueBody":{"id":32890,"nodeType":"Block","src":"4713:46:87","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":32887,"name":"_setBalancesInVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34143,"src":"4727:19:87","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":32888,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4727:21:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32889,"nodeType":"ExpressionStatement","src":"4727:21:87"}]}},{"condition":{"id":32892,"name":"swapReentrancyHookActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32680,"src":"4773:24:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32923,"nodeType":"IfStatement","src":"4769:316:87","trueBody":{"id":32922,"nodeType":"Block","src":"4799:286:87","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":32899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32894,"name":"_swapHookContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32682,"src":"4821:17:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":32897,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4850:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":32896,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4842:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":32895,"name":"address","nodeType":"ElementaryTypeName","src":"4842:7:87","typeDescriptions":{}}},"id":32898,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4842:10:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4821:31:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"486f6f6b20636f6e7472616374206e6f7420736574","id":32900,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4854:23:87","typeDescriptions":{"typeIdentifier":"t_stringliteral_c05d33585962d8048f4bce5d359e85ca1929692ded5119e6188581d534744fd1","typeString":"literal_string \"Hook contract not set\""},"value":"Hook contract not set"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_c05d33585962d8048f4bce5d359e85ca1929692ded5119e6188581d534744fd1","typeString":"literal_string \"Hook contract not set\""}],"id":32893,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4813:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":32901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4813:65:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32902,"nodeType":"ExpressionStatement","src":"4813:65:87"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":32904,"name":"_swapHookCalldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32684,"src":"4900:17:87","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},"id":32905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4918:6:87","memberName":"length","nodeType":"MemberAccess","src":"4900:24:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":32906,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4928:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4900:29:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"486f6f6b2063616c6c6461746120697320656d707479","id":32908,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4931:24:87","typeDescriptions":{"typeIdentifier":"t_stringliteral_6d43edd872992ef70286758fdc7703dbe0f578dc4f69415b268e7f27a99b64d3","typeString":"literal_string \"Hook calldata is empty\""},"value":"Hook calldata is empty"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_6d43edd872992ef70286758fdc7703dbe0f578dc4f69415b268e7f27a99b64d3","typeString":"literal_string \"Hook calldata is empty\""}],"id":32903,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4892:7:87","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":32909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4892:64:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":32910,"nodeType":"ExpressionStatement","src":"4892:64:87"},{"expression":{"id":32913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":32911,"name":"swapReentrancyHookActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32680,"src":"4970:24:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":32912,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4997:5:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"4970:32:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":32914,"nodeType":"ExpressionStatement","src":"4970:32:87"},{"expression":{"arguments":[{"id":32918,"name":"_swapHookContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32682,"src":"5037:17:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":32919,"name":"_swapHookCalldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32684,"src":"5056:17:87","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}],"expression":{"id":32915,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40714,"src":"5016:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Address_$40714_$","typeString":"type(library Address)"}},"id":32917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5024:12:87","memberName":"functionCall","nodeType":"MemberAccess","referencedDeclaration":40535,"src":"5016:20:87","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":32920,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5016:58:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":32921,"nodeType":"ExpressionStatement","src":"5016:58:87"}]}},{"expression":{"id":32925,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"5102:21:87","subExpression":{"id":32924,"name":"failOnBeforeSwapHook","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32635,"src":"5103:20:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":32865,"id":32926,"nodeType":"Return","src":"5095:28:87"}]},"functionSelector":"5211fa77","id":32928,"implemented":true,"kind":"function","modifiers":[],"name":"onBeforeSwap","nameLocation":"4361:12:87","nodeType":"FunctionDefinition","overrides":{"id":32862,"nodeType":"OverrideSpecifier","overrides":[],"src":"4422:8:87"},"parameters":{"id":32861,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32858,"mutability":"mutable","name":"params","nameLocation":"4398:6:87","nodeType":"VariableDeclaration","scope":32928,"src":"4374:30:87","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":32857,"nodeType":"UserDefinedTypeName","pathNode":{"id":32856,"name":"PoolSwapParams","nameLocations":["4374:14:87"],"nodeType":"IdentifierPath","referencedDeclaration":4772,"src":"4374:14:87"},"referencedDeclaration":4772,"src":"4374:14:87","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"},{"constant":false,"id":32860,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32928,"src":"4406:7:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":32859,"name":"address","nodeType":"ElementaryTypeName","src":"4406:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4373:41:87"},"returnParameters":{"id":32865,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32864,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":32928,"src":"4440:4:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32863,"name":"bool","nodeType":"ElementaryTypeName","src":"4440:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"4439:6:87"},"scope":34144,"src":"4352:778:87","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[11328],"body":{"id":33239,"nodeType":"Block","src":"5230:3221:87","statements":[{"assignments":[32943,null,32946,null],"declarations":[{"constant":false,"id":32943,"mutability":"mutable","name":"tokens","nameLocation":"5307:6:87","nodeType":"VariableDeclaration","scope":33239,"src":"5291:22:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":32941,"nodeType":"UserDefinedTypeName","pathNode":{"id":32940,"name":"IERC20","nameLocations":["5291:6:87"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"5291:6:87"},"referencedDeclaration":40109,"src":"5291:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":32942,"nodeType":"ArrayTypeName","src":"5291:8:87","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},null,{"constant":false,"id":32946,"mutability":"mutable","name":"balancesRaw","nameLocation":"5334:11:87","nodeType":"VariableDeclaration","scope":33239,"src":"5317:28:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":32944,"name":"uint256","nodeType":"ElementaryTypeName","src":"5317:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32945,"nodeType":"ArrayTypeName","src":"5317:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},null],"id":32952,"initialValue":{"arguments":[{"expression":{"id":32949,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32931,"src":"5375:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_calldata_ptr","typeString":"struct AfterSwapParams calldata"}},"id":32950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5382:4:87","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4798,"src":"5375:11:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":32947,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"5351:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":32948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5358:16:87","memberName":"getPoolTokenInfo","nodeType":"MemberAccess","referencedDeclaration":4186,"src":"5351:23:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$_t_array$_t_struct$_TokenInfo_$4704_memory_ptr_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory,struct TokenInfo memory[] memory,uint256[] memory,uint256[] memory)"}},"id":32951,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5351:36:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$_t_array$_t_struct$_TokenInfo_$4704_memory_ptr_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(contract IERC20[] memory,struct TokenInfo memory[] memory,uint256[] memory,uint256[] memory)"}},"nodeType":"VariableDeclarationStatement","src":"5290:97:87"},{"assignments":[32957],"declarations":[{"constant":false,"id":32957,"mutability":"mutable","name":"currentLiveBalances","nameLocation":"5415:19:87","nodeType":"VariableDeclaration","scope":33239,"src":"5398:36:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":32955,"name":"uint256","nodeType":"ElementaryTypeName","src":"5398:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32956,"nodeType":"ArrayTypeName","src":"5398:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":32968,"initialValue":{"arguments":[{"expression":{"id":32965,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32931,"src":"5488:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_calldata_ptr","typeString":"struct AfterSwapParams calldata"}},"id":32966,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5495:4:87","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4798,"src":"5488:11:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[{"id":32961,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"5456:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}],"id":32960,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5448:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":32959,"name":"address","nodeType":"ElementaryTypeName","src":"5448:7:87","typeDescriptions":{}}},"id":32962,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5448:15:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":32958,"name":"IVaultMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1414,"src":"5437:10:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultMock_$1414_$","typeString":"type(contract IVaultMock)"}},"id":32963,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5437:27:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVaultMock_$1414","typeString":"contract IVaultMock"}},"id":32964,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5465:22:87","memberName":"getCurrentLiveBalances","nodeType":"MemberAccess","referencedDeclaration":4195,"src":"5437:50:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) view external returns (uint256[] memory)"}},"id":32967,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5437:63:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"5398:102:87"},{"assignments":[32973,32976],"declarations":[{"constant":false,"id":32973,"mutability":"mutable","name":"scalingFactors","nameLocation":"5529:14:87","nodeType":"VariableDeclaration","scope":33239,"src":"5512:31:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":32971,"name":"uint256","nodeType":"ElementaryTypeName","src":"5512:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32972,"nodeType":"ArrayTypeName","src":"5512:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":32976,"mutability":"mutable","name":"rates","nameLocation":"5562:5:87","nodeType":"VariableDeclaration","scope":33239,"src":"5545:22:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":32974,"name":"uint256","nodeType":"ElementaryTypeName","src":"5545:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32975,"nodeType":"ArrayTypeName","src":"5545:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":32982,"initialValue":{"arguments":[{"expression":{"id":32979,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32931,"src":"5596:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_calldata_ptr","typeString":"struct AfterSwapParams calldata"}},"id":32980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5603:4:87","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":4798,"src":"5596:11:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":32977,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"5571:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":32978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5578:17:87","memberName":"getPoolTokenRates","nodeType":"MemberAccess","referencedDeclaration":4157,"src":"5571:24:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) view external returns (uint256[] memory,uint256[] memory)"}},"id":32981,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5571:37:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256[] memory)"}},"nodeType":"VariableDeclarationStatement","src":"5511:97:87"},{"body":{"id":33086,"nodeType":"Block","src":"5663:1137:87","statements":[{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"id":32999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":32994,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32943,"src":"5681:6:87","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":32996,"indexExpression":{"id":32995,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32984,"src":"5688:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5681:9:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":32997,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32931,"src":"5694:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_calldata_ptr","typeString":"struct AfterSwapParams calldata"}},"id":32998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5701:7:87","memberName":"tokenIn","nodeType":"MemberAccess","referencedDeclaration":4779,"src":"5694:14:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"5681:27:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"id":33044,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":33039,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32943,"src":"6238:6:87","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":33041,"indexExpression":{"id":33040,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32984,"src":"6245:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6238:9:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":33042,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32931,"src":"6251:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_calldata_ptr","typeString":"struct AfterSwapParams calldata"}},"id":33043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6258:8:87","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":4782,"src":"6251:15:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"6238:28:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33084,"nodeType":"IfStatement","src":"6234:556:87","trueBody":{"id":33083,"nodeType":"Block","src":"6268:522:87","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":33045,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32931,"src":"6290:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_calldata_ptr","typeString":"struct AfterSwapParams calldata"}},"id":33046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6297:23:87","memberName":"tokenOutBalanceScaled18","nodeType":"MemberAccess","referencedDeclaration":4790,"src":"6290:30:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"baseExpression":{"id":33047,"name":"currentLiveBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32957,"src":"6324:19:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33049,"indexExpression":{"id":33048,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32984,"src":"6344:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6324:22:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6290:56:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33057,"nodeType":"IfStatement","src":"6286:145:87","trueBody":{"id":33056,"nodeType":"Block","src":"6348:83:87","statements":[{"expression":{"components":[{"hexValue":"66616c7365","id":33051,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6378:5:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"expression":{"id":33052,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32931,"src":"6385:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_calldata_ptr","typeString":"struct AfterSwapParams calldata"}},"id":33053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6392:19:87","memberName":"amountCalculatedRaw","nodeType":"MemberAccess","referencedDeclaration":4794,"src":"6385:26:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":33054,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6377:35:87","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":32938,"id":33055,"nodeType":"Return","src":"6370:42:87"}]}},{"assignments":[33059],"declarations":[{"constant":false,"id":33059,"mutability":"mutable","name":"expectedTokenOutBalanceRaw","nameLocation":"6456:26:87","nodeType":"VariableDeclaration","scope":33083,"src":"6448:34:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33058,"name":"uint256","nodeType":"ElementaryTypeName","src":"6448:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33070,"initialValue":{"arguments":[{"baseExpression":{"id":33063,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32973,"src":"6560:14:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33065,"indexExpression":{"id":33064,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32984,"src":"6575:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6560:17:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":33066,"name":"rates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32976,"src":"6599:5:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33068,"indexExpression":{"id":33067,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32984,"src":"6605:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6599:8:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":33060,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32931,"src":"6485:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_calldata_ptr","typeString":"struct AfterSwapParams calldata"}},"id":33061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6492:23:87","memberName":"tokenOutBalanceScaled18","nodeType":"MemberAccess","referencedDeclaration":4790,"src":"6485:30:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6516:22:87","memberName":"toRawUndoRateRoundDown","nodeType":"MemberAccess","referencedDeclaration":6509,"src":"6485:53:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":33069,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6485:140:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6448:177:87"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33075,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33071,"name":"expectedTokenOutBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33059,"src":"6647:26:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"baseExpression":{"id":33072,"name":"balancesRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32946,"src":"6677:11:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33074,"indexExpression":{"id":33073,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32984,"src":"6689:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6677:14:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6647:44:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33082,"nodeType":"IfStatement","src":"6643:133:87","trueBody":{"id":33081,"nodeType":"Block","src":"6693:83:87","statements":[{"expression":{"components":[{"hexValue":"66616c7365","id":33076,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6723:5:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"expression":{"id":33077,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32931,"src":"6730:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_calldata_ptr","typeString":"struct AfterSwapParams calldata"}},"id":33078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6737:19:87","memberName":"amountCalculatedRaw","nodeType":"MemberAccess","referencedDeclaration":4794,"src":"6730:26:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":33079,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6722:35:87","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":32938,"id":33080,"nodeType":"Return","src":"6715:42:87"}]}}]}},"id":33085,"nodeType":"IfStatement","src":"5677:1113:87","trueBody":{"id":33038,"nodeType":"Block","src":"5710:518:87","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33005,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":33000,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32931,"src":"5732:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_calldata_ptr","typeString":"struct AfterSwapParams calldata"}},"id":33001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5739:22:87","memberName":"tokenInBalanceScaled18","nodeType":"MemberAccess","referencedDeclaration":4788,"src":"5732:29:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"baseExpression":{"id":33002,"name":"currentLiveBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32957,"src":"5765:19:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33004,"indexExpression":{"id":33003,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32984,"src":"5785:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5765:22:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5732:55:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33012,"nodeType":"IfStatement","src":"5728:144:87","trueBody":{"id":33011,"nodeType":"Block","src":"5789:83:87","statements":[{"expression":{"components":[{"hexValue":"66616c7365","id":33006,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5819:5:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"expression":{"id":33007,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32931,"src":"5826:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_calldata_ptr","typeString":"struct AfterSwapParams calldata"}},"id":33008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5833:19:87","memberName":"amountCalculatedRaw","nodeType":"MemberAccess","referencedDeclaration":4794,"src":"5826:26:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":33009,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5818:35:87","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":32938,"id":33010,"nodeType":"Return","src":"5811:42:87"}]}},{"assignments":[33014],"declarations":[{"constant":false,"id":33014,"mutability":"mutable","name":"expectedTokenInBalanceRaw","nameLocation":"5897:25:87","nodeType":"VariableDeclaration","scope":33038,"src":"5889:33:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33013,"name":"uint256","nodeType":"ElementaryTypeName","src":"5889:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33025,"initialValue":{"arguments":[{"baseExpression":{"id":33018,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32973,"src":"5999:14:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33020,"indexExpression":{"id":33019,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32984,"src":"6014:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5999:17:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":33021,"name":"rates","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32976,"src":"6038:5:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33023,"indexExpression":{"id":33022,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32984,"src":"6044:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6038:8:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":33015,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32931,"src":"5925:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_calldata_ptr","typeString":"struct AfterSwapParams calldata"}},"id":33016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5932:22:87","memberName":"tokenInBalanceScaled18","nodeType":"MemberAccess","referencedDeclaration":4788,"src":"5925:29:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33017,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5955:22:87","memberName":"toRawUndoRateRoundDown","nodeType":"MemberAccess","referencedDeclaration":6509,"src":"5925:52:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":33024,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5925:139:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5889:175:87"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33030,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33026,"name":"expectedTokenInBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33014,"src":"6086:25:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"baseExpression":{"id":33027,"name":"balancesRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32946,"src":"6115:11:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33029,"indexExpression":{"id":33028,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32984,"src":"6127:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6115:14:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6086:43:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33037,"nodeType":"IfStatement","src":"6082:132:87","trueBody":{"id":33036,"nodeType":"Block","src":"6131:83:87","statements":[{"expression":{"components":[{"hexValue":"66616c7365","id":33031,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6161:5:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"expression":{"id":33032,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32931,"src":"6168:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_calldata_ptr","typeString":"struct AfterSwapParams calldata"}},"id":33033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6175:19:87","memberName":"amountCalculatedRaw","nodeType":"MemberAccess","referencedDeclaration":4794,"src":"6168:26:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":33034,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6160:35:87","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":32938,"id":33035,"nodeType":"Return","src":"6153:42:87"}]}}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":32990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":32987,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32984,"src":"5639:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":32988,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32943,"src":"5643:6:87","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":32989,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5650:6:87","memberName":"length","nodeType":"MemberAccess","src":"5643:13:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5639:17:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33087,"initializationExpression":{"assignments":[32984],"declarations":[{"constant":false,"id":32984,"mutability":"mutable","name":"i","nameLocation":"5632:1:87","nodeType":"VariableDeclaration","scope":33087,"src":"5624:9:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32983,"name":"uint256","nodeType":"ElementaryTypeName","src":"5624:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":32986,"initialValue":{"hexValue":"30","id":32985,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5636:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5624:13:87"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":32992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5658:3:87","subExpression":{"id":32991,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32984,"src":"5660:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":32993,"nodeType":"ExpressionStatement","src":"5658:3:87"},"nodeType":"ForStatement","src":"5619:1181:87"},{"assignments":[33089],"declarations":[{"constant":false,"id":33089,"mutability":"mutable","name":"hookAdjustedAmountCalculatedRaw","nameLocation":"6818:31:87","nodeType":"VariableDeclaration","scope":33239,"src":"6810:39:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33088,"name":"uint256","nodeType":"ElementaryTypeName","src":"6810:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33092,"initialValue":{"expression":{"id":33090,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32931,"src":"6852:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_calldata_ptr","typeString":"struct AfterSwapParams calldata"}},"id":33091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6859:19:87","memberName":"amountCalculatedRaw","nodeType":"MemberAccess","referencedDeclaration":4794,"src":"6852:26:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6810:68:87"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33093,"name":"hookSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32668,"src":"6892:21:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":33094,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6916:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6892:25:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33149,"name":"hookSwapDiscountPercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32670,"src":"7457:26:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":33150,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7486:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7457:30:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33227,"nodeType":"IfStatement","src":"7453:880:87","trueBody":{"id":33226,"nodeType":"Block","src":"7489:844:87","statements":[{"assignments":[33153],"declarations":[{"constant":false,"id":33153,"mutability":"mutable","name":"hookDiscount","nameLocation":"7511:12:87","nodeType":"VariableDeclaration","scope":33226,"src":"7503:20:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33152,"name":"uint256","nodeType":"ElementaryTypeName","src":"7503:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33158,"initialValue":{"arguments":[{"id":33156,"name":"hookSwapDiscountPercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32670,"src":"7566:26:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":33154,"name":"hookAdjustedAmountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33089,"src":"7526:31:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33155,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7558:7:87","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":7953,"src":"7526:39:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":33157,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7526:67:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7503:90:87"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33159,"name":"hookDiscount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33153,"src":"7611:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":33160,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7626:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7611:16:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33225,"nodeType":"IfStatement","src":"7607:716:87","trueBody":{"id":33224,"nodeType":"Block","src":"7629:694:87","statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},"id":33166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":33162,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32931,"src":"7651:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_calldata_ptr","typeString":"struct AfterSwapParams calldata"}},"id":33163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7658:4:87","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4776,"src":"7651:11:87","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":33164,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"7666:8:87","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4735_$","typeString":"type(enum SwapKind)"}},"id":33165,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7675:8:87","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"7666:17:87","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"src":"7651:32:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":33222,"nodeType":"Block","src":"8001:308:87","statements":[{"expression":{"id":33197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33195,"name":"hookAdjustedAmountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33089,"src":"8023:31:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":33196,"name":"hookDiscount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33153,"src":"8058:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8023:47:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33198,"nodeType":"ExpressionStatement","src":"8023:47:87"},{"condition":{"id":33199,"name":"shouldSettleDiscount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32666,"src":"8097:20:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33221,"nodeType":"IfStatement","src":"8093:198:87","trueBody":{"id":33220,"nodeType":"Block","src":"8119:172:87","statements":[{"expression":{"arguments":[{"arguments":[{"id":33207,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"8177:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}],"id":33206,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8169:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":33205,"name":"address","nodeType":"ElementaryTypeName","src":"8169:7:87","typeDescriptions":{}}},"id":33208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8169:15:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":33209,"name":"hookDiscount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33153,"src":"8186:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":33200,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32931,"src":"8145:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_calldata_ptr","typeString":"struct AfterSwapParams calldata"}},"id":33203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8152:7:87","memberName":"tokenIn","nodeType":"MemberAccess","referencedDeclaration":4779,"src":"8145:14:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":33204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8160:8:87","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":40076,"src":"8145:23:87","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":33210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8145:54:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33211,"nodeType":"ExpressionStatement","src":"8145:54:87"},{"expression":{"arguments":[{"expression":{"id":33215,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32931,"src":"8239:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_calldata_ptr","typeString":"struct AfterSwapParams calldata"}},"id":33216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8246:7:87","memberName":"tokenIn","nodeType":"MemberAccess","referencedDeclaration":4779,"src":"8239:14:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":33217,"name":"hookDiscount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33153,"src":"8255:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":33212,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"8225:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":33214,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8232:6:87","memberName":"settle","nodeType":"MemberAccess","referencedDeclaration":4451,"src":"8225:13:87","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$_t_uint256_$","typeString":"function (contract IERC20,uint256) external returns (uint256)"}},"id":33218,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8225:43:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33219,"nodeType":"ExpressionStatement","src":"8225:43:87"}]}}]},"id":33223,"nodeType":"IfStatement","src":"7647:662:87","trueBody":{"id":33194,"nodeType":"Block","src":"7685:310:87","statements":[{"expression":{"id":33169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33167,"name":"hookAdjustedAmountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33089,"src":"7707:31:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":33168,"name":"hookDiscount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33153,"src":"7742:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7707:47:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33170,"nodeType":"ExpressionStatement","src":"7707:47:87"},{"condition":{"id":33171,"name":"shouldSettleDiscount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32666,"src":"7781:20:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33193,"nodeType":"IfStatement","src":"7777:200:87","trueBody":{"id":33192,"nodeType":"Block","src":"7803:174:87","statements":[{"expression":{"arguments":[{"arguments":[{"id":33179,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"7862:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}],"id":33178,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7854:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":33177,"name":"address","nodeType":"ElementaryTypeName","src":"7854:7:87","typeDescriptions":{}}},"id":33180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7854:15:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":33181,"name":"hookDiscount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33153,"src":"7871:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":33172,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32931,"src":"7829:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_calldata_ptr","typeString":"struct AfterSwapParams calldata"}},"id":33175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7836:8:87","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":4782,"src":"7829:15:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":33176,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7845:8:87","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":40076,"src":"7829:24:87","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":33182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7829:55:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33183,"nodeType":"ExpressionStatement","src":"7829:55:87"},{"expression":{"arguments":[{"expression":{"id":33187,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32931,"src":"7924:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_calldata_ptr","typeString":"struct AfterSwapParams calldata"}},"id":33188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7931:8:87","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":4782,"src":"7924:15:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":33189,"name":"hookDiscount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33153,"src":"7941:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":33184,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"7910:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":33186,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7917:6:87","memberName":"settle","nodeType":"MemberAccess","referencedDeclaration":4451,"src":"7910:13:87","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$_t_uint256_$","typeString":"function (contract IERC20,uint256) external returns (uint256)"}},"id":33190,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7910:44:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33191,"nodeType":"ExpressionStatement","src":"7910:44:87"}]}}]}}]}}]}},"id":33228,"nodeType":"IfStatement","src":"6888:1445:87","trueBody":{"id":33148,"nodeType":"Block","src":"6919:528:87","statements":[{"assignments":[33097],"declarations":[{"constant":false,"id":33097,"mutability":"mutable","name":"hookFee","nameLocation":"6941:7:87","nodeType":"VariableDeclaration","scope":33148,"src":"6933:15:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33096,"name":"uint256","nodeType":"ElementaryTypeName","src":"6933:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33102,"initialValue":{"arguments":[{"id":33100,"name":"hookSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32668,"src":"6991:21:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":33098,"name":"hookAdjustedAmountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33089,"src":"6951:31:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6983:7:87","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":7953,"src":"6951:39:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":33101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6951:62:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6933:80:87"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33103,"name":"hookFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33097,"src":"7031:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":33104,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7041:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7031:11:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33147,"nodeType":"IfStatement","src":"7027:410:87","trueBody":{"id":33146,"nodeType":"Block","src":"7044:393:87","statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},"id":33110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":33106,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32931,"src":"7066:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_calldata_ptr","typeString":"struct AfterSwapParams calldata"}},"id":33107,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7073:4:87","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4776,"src":"7066:11:87","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":33108,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"7081:8:87","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4735_$","typeString":"type(enum SwapKind)"}},"id":33109,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7090:8:87","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"7081:17:87","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"src":"7066:32:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":33144,"nodeType":"Block","src":"7265:158:87","statements":[{"expression":{"id":33130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33128,"name":"hookAdjustedAmountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33089,"src":"7287:31:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":33129,"name":"hookFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33097,"src":"7322:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7287:42:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33131,"nodeType":"ExpressionStatement","src":"7287:42:87"},{"expression":{"arguments":[{"expression":{"id":33135,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32931,"src":"7365:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_calldata_ptr","typeString":"struct AfterSwapParams calldata"}},"id":33136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7372:7:87","memberName":"tokenIn","nodeType":"MemberAccess","referencedDeclaration":4779,"src":"7365:14:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"arguments":[{"id":33139,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7389:4:87","typeDescriptions":{"typeIdentifier":"t_contract$_PoolHooksMock_$34144","typeString":"contract PoolHooksMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PoolHooksMock_$34144","typeString":"contract PoolHooksMock"}],"id":33138,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7381:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":33137,"name":"address","nodeType":"ElementaryTypeName","src":"7381:7:87","typeDescriptions":{}}},"id":33140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7381:13:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":33141,"name":"hookFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33097,"src":"7396:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":33132,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"7351:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":33134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7358:6:87","memberName":"sendTo","nodeType":"MemberAccess","referencedDeclaration":4462,"src":"7351:13:87","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$40109_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":33142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7351:53:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33143,"nodeType":"ExpressionStatement","src":"7351:53:87"}]},"id":33145,"nodeType":"IfStatement","src":"7062:361:87","trueBody":{"id":33127,"nodeType":"Block","src":"7100:159:87","statements":[{"expression":{"id":33113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33111,"name":"hookAdjustedAmountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33089,"src":"7122:31:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":33112,"name":"hookFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33097,"src":"7157:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7122:42:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33114,"nodeType":"ExpressionStatement","src":"7122:42:87"},{"expression":{"arguments":[{"expression":{"id":33118,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32931,"src":"7200:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_calldata_ptr","typeString":"struct AfterSwapParams calldata"}},"id":33119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7207:8:87","memberName":"tokenOut","nodeType":"MemberAccess","referencedDeclaration":4782,"src":"7200:15:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"arguments":[{"id":33122,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7225:4:87","typeDescriptions":{"typeIdentifier":"t_contract$_PoolHooksMock_$34144","typeString":"contract PoolHooksMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PoolHooksMock_$34144","typeString":"contract PoolHooksMock"}],"id":33121,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7217:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":33120,"name":"address","nodeType":"ElementaryTypeName","src":"7217:7:87","typeDescriptions":{}}},"id":33123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7217:13:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":33124,"name":"hookFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33097,"src":"7232:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":33115,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"7186:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":33117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7193:6:87","memberName":"sendTo","nodeType":"MemberAccess","referencedDeclaration":4462,"src":"7186:13:87","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$40109_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":33125,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7186:54:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33126,"nodeType":"ExpressionStatement","src":"7186:54:87"}]}}]}}]}},{"expression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":33235,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":33229,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32931,"src":"8351:6:87","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_calldata_ptr","typeString":"struct AfterSwapParams calldata"}},"id":33230,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8358:24:87","memberName":"amountCalculatedScaled18","nodeType":"MemberAccess","referencedDeclaration":4792,"src":"8351:31:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":33231,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8385:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8351:35:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"id":33234,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"8390:20:87","subExpression":{"id":33233,"name":"failOnAfterSwapHook","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32637,"src":"8391:19:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8351:59:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":33236,"name":"hookAdjustedAmountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33089,"src":"8412:31:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":33237,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8350:94:87","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":32938,"id":33238,"nodeType":"Return","src":"8343:101:87"}]},"functionSelector":"18b6eb55","id":33240,"implemented":true,"kind":"function","modifiers":[],"name":"onAfterSwap","nameLocation":"5145:11:87","nodeType":"FunctionDefinition","overrides":{"id":32933,"nodeType":"OverrideSpecifier","overrides":[],"src":"5197:8:87"},"parameters":{"id":32932,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32931,"mutability":"mutable","name":"params","nameLocation":"5182:6:87","nodeType":"VariableDeclaration","scope":33240,"src":"5157:31:87","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_calldata_ptr","typeString":"struct AfterSwapParams"},"typeName":{"id":32930,"nodeType":"UserDefinedTypeName","pathNode":{"id":32929,"name":"AfterSwapParams","nameLocations":["5157:15:87"],"nodeType":"IdentifierPath","referencedDeclaration":4801,"src":"5157:15:87"},"referencedDeclaration":4801,"src":"5157:15:87","typeDescriptions":{"typeIdentifier":"t_struct$_AfterSwapParams_$4801_storage_ptr","typeString":"struct AfterSwapParams"}},"visibility":"internal"}],"src":"5156:33:87"},"returnParameters":{"id":32938,"nodeType":"ParameterList","parameters":[{"constant":false,"id":32935,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33240,"src":"5215:4:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":32934,"name":"bool","nodeType":"ElementaryTypeName","src":"5215:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":32937,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33240,"src":"5221:7:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":32936,"name":"uint256","nodeType":"ElementaryTypeName","src":"5221:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5214:15:87"},"scope":34144,"src":"5136:3315:87","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[11204],"body":{"id":33291,"nodeType":"Block","src":"8716:367:87","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":33265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33263,"name":"shouldIgnoreSavedSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32700,"src":"8730:23:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":33264,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8757:5:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"8730:32:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33275,"nodeType":"IfStatement","src":"8726:110:87","trueBody":{"id":33274,"nodeType":"Block","src":"8764:72:87","statements":[{"expression":{"id":33272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33266,"name":"_savedSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32702,"src":"8778:12:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":33268,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33242,"src":"8806:6:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":33267,"name":"ISenderGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3041,"src":"8793:12:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISenderGuard_$3041_$","typeString":"type(contract ISenderGuard)"}},"id":33269,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8793:20:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISenderGuard_$3041","typeString":"contract ISenderGuard"}},"id":33270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8814:9:87","memberName":"getSender","nodeType":"MemberAccess","referencedDeclaration":3040,"src":"8793:30:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":33271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8793:32:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"8778:47:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":33273,"nodeType":"ExpressionStatement","src":"8778:47:87"}]}},{"condition":{"id":33276,"name":"changeTokenRateOnBeforeAddLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32656,"src":"8850:35:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33281,"nodeType":"IfStatement","src":"8846:84:87","trueBody":{"id":33280,"nodeType":"Block","src":"8887:43:87","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":33277,"name":"_updateTokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34116,"src":"8901:16:87","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":33278,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8901:18:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33279,"nodeType":"ExpressionStatement","src":"8901:18:87"}]}},{"condition":{"id":33282,"name":"changePoolBalancesOnBeforeAddLiquidityHook","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32662,"src":"8944:42:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33287,"nodeType":"IfStatement","src":"8940:94:87","trueBody":{"id":33286,"nodeType":"Block","src":"8988:46:87","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":33283,"name":"_setBalancesInVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34143,"src":"9002:19:87","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":33284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9002:21:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33285,"nodeType":"ExpressionStatement","src":"9002:21:87"}]}},{"expression":{"id":33289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"9051:25:87","subExpression":{"id":33288,"name":"failOnBeforeAddLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32639,"src":"9052:24:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":33262,"id":33290,"nodeType":"Return","src":"9044:32:87"}]},"functionSelector":"45421ec7","id":33292,"implemented":true,"kind":"function","modifiers":[],"name":"onBeforeAddLiquidity","nameLocation":"8500:20:87","nodeType":"FunctionDefinition","overrides":{"id":33259,"nodeType":"OverrideSpecifier","overrides":[],"src":"8692:8:87"},"parameters":{"id":33258,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33242,"mutability":"mutable","name":"router","nameLocation":"8538:6:87","nodeType":"VariableDeclaration","scope":33292,"src":"8530:14:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":33241,"name":"address","nodeType":"ElementaryTypeName","src":"8530:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":33244,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33292,"src":"8554:7:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":33243,"name":"address","nodeType":"ElementaryTypeName","src":"8554:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":33247,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33292,"src":"8571:16:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},"typeName":{"id":33246,"nodeType":"UserDefinedTypeName","pathNode":{"id":33245,"name":"AddLiquidityKind","nameLocations":["8571:16:87"],"nodeType":"IdentifierPath","referencedDeclaration":4807,"src":"8571:16:87"},"referencedDeclaration":4807,"src":"8571:16:87","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":33250,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33292,"src":"8597:16:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":33248,"name":"uint256","nodeType":"ElementaryTypeName","src":"8597:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33249,"nodeType":"ArrayTypeName","src":"8597:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":33252,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33292,"src":"8623:7:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33251,"name":"uint256","nodeType":"ElementaryTypeName","src":"8623:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":33255,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33292,"src":"8640:16:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":33253,"name":"uint256","nodeType":"ElementaryTypeName","src":"8640:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33254,"nodeType":"ArrayTypeName","src":"8640:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":33257,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33292,"src":"8666:12:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":33256,"name":"bytes","nodeType":"ElementaryTypeName","src":"8666:5:87","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"8520:164:87"},"returnParameters":{"id":33262,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33261,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33292,"src":"8710:4:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":33260,"name":"bool","nodeType":"ElementaryTypeName","src":"8710:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"8709:6:87"},"scope":34144,"src":"8491:592:87","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[11264],"body":{"id":33343,"nodeType":"Block","src":"9320:376:87","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":33317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33315,"name":"shouldIgnoreSavedSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32700,"src":"9334:23:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":33316,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"9361:5:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"9334:32:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33327,"nodeType":"IfStatement","src":"9330:110:87","trueBody":{"id":33326,"nodeType":"Block","src":"9368:72:87","statements":[{"expression":{"id":33324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33318,"name":"_savedSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32702,"src":"9382:12:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":33320,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33294,"src":"9410:6:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":33319,"name":"ISenderGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3041,"src":"9397:12:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISenderGuard_$3041_$","typeString":"type(contract ISenderGuard)"}},"id":33321,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9397:20:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISenderGuard_$3041","typeString":"contract ISenderGuard"}},"id":33322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9418:9:87","memberName":"getSender","nodeType":"MemberAccess","referencedDeclaration":3040,"src":"9397:30:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":33323,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9397:32:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"9382:47:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":33325,"nodeType":"ExpressionStatement","src":"9382:47:87"}]}},{"condition":{"id":33328,"name":"changeTokenRateOnBeforeRemoveLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"9454:38:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33333,"nodeType":"IfStatement","src":"9450:87:87","trueBody":{"id":33332,"nodeType":"Block","src":"9494:43:87","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":33329,"name":"_updateTokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34116,"src":"9508:16:87","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":33330,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9508:18:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33331,"nodeType":"ExpressionStatement","src":"9508:18:87"}]}},{"condition":{"id":33334,"name":"changePoolBalancesOnBeforeRemoveLiquidityHook","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32664,"src":"9551:45:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33339,"nodeType":"IfStatement","src":"9547:97:87","trueBody":{"id":33338,"nodeType":"Block","src":"9598:46:87","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":33335,"name":"_setBalancesInVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34143,"src":"9612:19:87","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":33336,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9612:21:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33337,"nodeType":"ExpressionStatement","src":"9612:21:87"}]}},{"expression":{"id":33341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"9661:28:87","subExpression":{"id":33340,"name":"failOnBeforeRemoveLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32643,"src":"9662:27:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":33314,"id":33342,"nodeType":"Return","src":"9654:35:87"}]},"functionSelector":"ba5f9f40","id":33344,"implemented":true,"kind":"function","modifiers":[],"name":"onBeforeRemoveLiquidity","nameLocation":"9098:23:87","nodeType":"FunctionDefinition","overrides":{"id":33311,"nodeType":"OverrideSpecifier","overrides":[],"src":"9296:8:87"},"parameters":{"id":33310,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33294,"mutability":"mutable","name":"router","nameLocation":"9139:6:87","nodeType":"VariableDeclaration","scope":33344,"src":"9131:14:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":33293,"name":"address","nodeType":"ElementaryTypeName","src":"9131:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":33296,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33344,"src":"9155:7:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":33295,"name":"address","nodeType":"ElementaryTypeName","src":"9155:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":33299,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33344,"src":"9172:19:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":33298,"nodeType":"UserDefinedTypeName","pathNode":{"id":33297,"name":"RemoveLiquidityKind","nameLocations":["9172:19:87"],"nodeType":"IdentifierPath","referencedDeclaration":4828,"src":"9172:19:87"},"referencedDeclaration":4828,"src":"9172:19:87","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":33301,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33344,"src":"9201:7:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33300,"name":"uint256","nodeType":"ElementaryTypeName","src":"9201:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":33304,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33344,"src":"9218:16:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":33302,"name":"uint256","nodeType":"ElementaryTypeName","src":"9218:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33303,"nodeType":"ArrayTypeName","src":"9218:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":33307,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33344,"src":"9244:16:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":33305,"name":"uint256","nodeType":"ElementaryTypeName","src":"9244:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33306,"nodeType":"ArrayTypeName","src":"9244:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":33309,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33344,"src":"9270:12:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":33308,"name":"bytes","nodeType":"ElementaryTypeName","src":"9270:5:87","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9121:167:87"},"returnParameters":{"id":33314,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33313,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33344,"src":"9314:4:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":33312,"name":"bool","nodeType":"ElementaryTypeName","src":"9314:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9313:6:87"},"scope":34144,"src":"9089:607:87","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[11238],"body":{"id":33512,"nodeType":"Block","src":"10006:1315:87","statements":[{"condition":{"id":33373,"name":"shouldForceHookAdjustedAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32647,"src":"10078:30:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33379,"nodeType":"IfStatement","src":"10074:110:87","trueBody":{"id":33378,"nodeType":"Block","src":"10110:74:87","statements":[{"expression":{"components":[{"hexValue":"74727565","id":33374,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"10132:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":33375,"name":"forcedHookAdjustedAmountsLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32650,"src":"10138:34:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}}],"id":33376,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10131:42:87","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_array$_t_uint256_$dyn_storage_$","typeString":"tuple(bool,uint256[] storage ref)"}},"functionReturnParameters":33372,"id":33377,"nodeType":"Return","src":"10124:49:87"}]}},{"assignments":[33384,null,null,null],"declarations":[{"constant":false,"id":33384,"mutability":"mutable","name":"tokens","nameLocation":"10211:6:87","nodeType":"VariableDeclaration","scope":33512,"src":"10195:22:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":33382,"nodeType":"UserDefinedTypeName","pathNode":{"id":33381,"name":"IERC20","nameLocations":["10195:6:87"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"10195:6:87"},"referencedDeclaration":40109,"src":"10195:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":33383,"nodeType":"ArrayTypeName","src":"10195:8:87","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},null,null,null],"id":33389,"initialValue":{"arguments":[{"id":33387,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33348,"src":"10251:4:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":33385,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"10227:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":33386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10234:16:87","memberName":"getPoolTokenInfo","nodeType":"MemberAccess","referencedDeclaration":4186,"src":"10227:23:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$_t_array$_t_struct$_TokenInfo_$4704_memory_ptr_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory,struct TokenInfo memory[] memory,uint256[] memory,uint256[] memory)"}},"id":33388,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10227:29:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$_t_array$_t_struct$_TokenInfo_$4704_memory_ptr_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(contract IERC20[] memory,struct TokenInfo memory[] memory,uint256[] memory,uint256[] memory)"}},"nodeType":"VariableDeclarationStatement","src":"10194:62:87"},{"expression":{"id":33392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33390,"name":"hookAdjustedAmountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33371,"src":"10266:24:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33391,"name":"amountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33357,"src":"10293:12:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"10266:39:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33393,"nodeType":"ExpressionStatement","src":"10266:39:87"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33396,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33394,"name":"addLiquidityHookFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32672,"src":"10320:29:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":33395,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10352:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10320:33:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33444,"name":"addLiquidityHookDiscountPercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32674,"src":"10727:34:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":33445,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10764:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10727:38:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33505,"nodeType":"IfStatement","src":"10723:522:87","trueBody":{"id":33504,"nodeType":"Block","src":"10767:478:87","statements":[{"body":{"id":33502,"nodeType":"Block","src":"10831:404:87","statements":[{"assignments":[33460],"declarations":[{"constant":false,"id":33460,"mutability":"mutable","name":"token","nameLocation":"10856:5:87","nodeType":"VariableDeclaration","scope":33502,"src":"10849:12:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":33459,"nodeType":"UserDefinedTypeName","pathNode":{"id":33458,"name":"IERC20","nameLocations":["10849:6:87"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"10849:6:87"},"referencedDeclaration":40109,"src":"10849:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"id":33464,"initialValue":{"baseExpression":{"id":33461,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33384,"src":"10864:6:87","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":33463,"indexExpression":{"id":33462,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33448,"src":"10871:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10864:9:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"10849:24:87"},{"assignments":[33466],"declarations":[{"constant":false,"id":33466,"mutability":"mutable","name":"hookDiscount","nameLocation":"10900:12:87","nodeType":"VariableDeclaration","scope":33502,"src":"10892:20:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33465,"name":"uint256","nodeType":"ElementaryTypeName","src":"10892:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33473,"initialValue":{"arguments":[{"id":33471,"name":"addLiquidityHookDiscountPercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32674,"src":"10939:34:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":33467,"name":"amountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33357,"src":"10915:12:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33469,"indexExpression":{"id":33468,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33448,"src":"10928:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10915:15:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10931:7:87","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":7953,"src":"10915:23:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":33472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10915:59:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10892:82:87"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33476,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33474,"name":"hookDiscount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33466,"src":"10996:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":33475,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11011:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10996:16:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33501,"nodeType":"IfStatement","src":"10992:229:87","trueBody":{"id":33500,"nodeType":"Block","src":"11014:207:87","statements":[{"expression":{"arguments":[{"arguments":[{"id":33482,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"11059:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}],"id":33481,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11051:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":33480,"name":"address","nodeType":"ElementaryTypeName","src":"11051:7:87","typeDescriptions":{}}},"id":33483,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11051:15:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":33484,"name":"hookDiscount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33466,"src":"11068:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":33477,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33460,"src":"11036:5:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":33479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11042:8:87","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":40076,"src":"11036:14:87","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":33485,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11036:45:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33486,"nodeType":"ExpressionStatement","src":"11036:45:87"},{"expression":{"id":33491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":33487,"name":"hookAdjustedAmountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33371,"src":"11103:24:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33489,"indexExpression":{"id":33488,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33448,"src":"11128:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11103:27:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":33490,"name":"hookDiscount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33466,"src":"11134:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11103:43:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33492,"nodeType":"ExpressionStatement","src":"11103:43:87"},{"expression":{"arguments":[{"id":33496,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33460,"src":"11182:5:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":33497,"name":"hookDiscount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33466,"src":"11189:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":33493,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"11168:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":33495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11175:6:87","memberName":"settle","nodeType":"MemberAccess","referencedDeclaration":4451,"src":"11168:13:87","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$_t_uint256_$","typeString":"function (contract IERC20,uint256) external returns (uint256)"}},"id":33498,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11168:34:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33499,"nodeType":"ExpressionStatement","src":"11168:34:87"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33451,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33448,"src":"10801:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":33452,"name":"amountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33357,"src":"10805:12:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10818:6:87","memberName":"length","nodeType":"MemberAccess","src":"10805:19:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10801:23:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33503,"initializationExpression":{"assignments":[33448],"declarations":[{"constant":false,"id":33448,"mutability":"mutable","name":"i","nameLocation":"10794:1:87","nodeType":"VariableDeclaration","scope":33503,"src":"10786:9:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33447,"name":"uint256","nodeType":"ElementaryTypeName","src":"10786:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33450,"initialValue":{"hexValue":"30","id":33449,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10798:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10786:13:87"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":33456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"10826:3:87","subExpression":{"id":33455,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33448,"src":"10826:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33457,"nodeType":"ExpressionStatement","src":"10826:3:87"},"nodeType":"ForStatement","src":"10781:454:87"}]}},"id":33506,"nodeType":"IfStatement","src":"10316:929:87","trueBody":{"id":33443,"nodeType":"Block","src":"10355:362:87","statements":[{"body":{"id":33441,"nodeType":"Block","src":"10419:288:87","statements":[{"assignments":[33409],"declarations":[{"constant":false,"id":33409,"mutability":"mutable","name":"hookFee","nameLocation":"10445:7:87","nodeType":"VariableDeclaration","scope":33441,"src":"10437:15:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33408,"name":"uint256","nodeType":"ElementaryTypeName","src":"10437:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33416,"initialValue":{"arguments":[{"id":33414,"name":"addLiquidityHookFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32672,"src":"10479:29:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":33410,"name":"amountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33357,"src":"10455:12:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33412,"indexExpression":{"id":33411,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33398,"src":"10468:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10455:15:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10471:7:87","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":7953,"src":"10455:23:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":33415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10455:54:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10437:72:87"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33417,"name":"hookFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33409,"src":"10531:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":33418,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10541:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10531:11:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33440,"nodeType":"IfStatement","src":"10527:166:87","trueBody":{"id":33439,"nodeType":"Block","src":"10544:149:87","statements":[{"expression":{"id":33424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":33420,"name":"hookAdjustedAmountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33371,"src":"10566:24:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33422,"indexExpression":{"id":33421,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33398,"src":"10591:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10566:27:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":33423,"name":"hookFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33409,"src":"10597:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10566:38:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33425,"nodeType":"ExpressionStatement","src":"10566:38:87"},{"expression":{"arguments":[{"baseExpression":{"id":33429,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33384,"src":"10640:6:87","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":33431,"indexExpression":{"id":33430,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33398,"src":"10647:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10640:9:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"arguments":[{"id":33434,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"10659:4:87","typeDescriptions":{"typeIdentifier":"t_contract$_PoolHooksMock_$34144","typeString":"contract PoolHooksMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PoolHooksMock_$34144","typeString":"contract PoolHooksMock"}],"id":33433,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10651:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":33432,"name":"address","nodeType":"ElementaryTypeName","src":"10651:7:87","typeDescriptions":{}}},"id":33435,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10651:13:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":33436,"name":"hookFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33409,"src":"10666:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":33426,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"10626:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":33428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10633:6:87","memberName":"sendTo","nodeType":"MemberAccess","referencedDeclaration":4462,"src":"10626:13:87","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$40109_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":33437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10626:48:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33438,"nodeType":"ExpressionStatement","src":"10626:48:87"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33401,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33398,"src":"10389:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":33402,"name":"amountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33357,"src":"10393:12:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10406:6:87","memberName":"length","nodeType":"MemberAccess","src":"10393:19:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10389:23:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33442,"initializationExpression":{"assignments":[33398],"declarations":[{"constant":false,"id":33398,"mutability":"mutable","name":"i","nameLocation":"10382:1:87","nodeType":"VariableDeclaration","scope":33442,"src":"10374:9:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33397,"name":"uint256","nodeType":"ElementaryTypeName","src":"10374:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33400,"initialValue":{"hexValue":"30","id":33399,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10386:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10374:13:87"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":33406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"10414:3:87","subExpression":{"id":33405,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33398,"src":"10414:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33407,"nodeType":"ExpressionStatement","src":"10414:3:87"},"nodeType":"ForStatement","src":"10369:338:87"}]}},{"expression":{"components":[{"id":33508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"11263:24:87","subExpression":{"id":33507,"name":"failOnAfterAddLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32641,"src":"11264:23:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":33509,"name":"hookAdjustedAmountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33371,"src":"11289:24:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"id":33510,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11262:52:87","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(bool,uint256[] memory)"}},"functionReturnParameters":33372,"id":33511,"nodeType":"Return","src":"11255:59:87"}]},"functionSelector":"976907cc","id":33513,"implemented":true,"kind":"function","modifiers":[],"name":"onAfterAddLiquidity","nameLocation":"9711:19:87","nodeType":"FunctionDefinition","overrides":{"id":33366,"nodeType":"OverrideSpecifier","overrides":[],"src":"9939:8:87"},"parameters":{"id":33365,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33346,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33513,"src":"9740:7:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":33345,"name":"address","nodeType":"ElementaryTypeName","src":"9740:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":33348,"mutability":"mutable","name":"pool","nameLocation":"9765:4:87","nodeType":"VariableDeclaration","scope":33513,"src":"9757:12:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":33347,"name":"address","nodeType":"ElementaryTypeName","src":"9757:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":33351,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33513,"src":"9779:16:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},"typeName":{"id":33350,"nodeType":"UserDefinedTypeName","pathNode":{"id":33349,"name":"AddLiquidityKind","nameLocations":["9779:16:87"],"nodeType":"IdentifierPath","referencedDeclaration":4807,"src":"9779:16:87"},"referencedDeclaration":4807,"src":"9779:16:87","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":33354,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33513,"src":"9805:16:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":33352,"name":"uint256","nodeType":"ElementaryTypeName","src":"9805:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33353,"nodeType":"ArrayTypeName","src":"9805:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":33357,"mutability":"mutable","name":"amountsInRaw","nameLocation":"9848:12:87","nodeType":"VariableDeclaration","scope":33513,"src":"9831:29:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":33355,"name":"uint256","nodeType":"ElementaryTypeName","src":"9831:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33356,"nodeType":"ArrayTypeName","src":"9831:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":33359,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33513,"src":"9870:7:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33358,"name":"uint256","nodeType":"ElementaryTypeName","src":"9870:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":33362,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33513,"src":"9887:16:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":33360,"name":"uint256","nodeType":"ElementaryTypeName","src":"9887:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33361,"nodeType":"ArrayTypeName","src":"9887:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":33364,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33513,"src":"9913:12:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":33363,"name":"bytes","nodeType":"ElementaryTypeName","src":"9913:5:87","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"9730:201:87"},"returnParameters":{"id":33372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33368,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33513,"src":"9957:4:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":33367,"name":"bool","nodeType":"ElementaryTypeName","src":"9957:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":33371,"mutability":"mutable","name":"hookAdjustedAmountsInRaw","nameLocation":"9980:24:87","nodeType":"VariableDeclaration","scope":33513,"src":"9963:41:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":33369,"name":"uint256","nodeType":"ElementaryTypeName","src":"9963:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33370,"nodeType":"ArrayTypeName","src":"9963:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"9956:49:87"},"scope":34144,"src":"9702:1619:87","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[11298],"body":{"id":33681,"nodeType":"Block","src":"11639:1339:87","statements":[{"condition":{"id":33542,"name":"shouldForceHookAdjustedAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32647,"src":"11711:30:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33548,"nodeType":"IfStatement","src":"11707:110:87","trueBody":{"id":33547,"nodeType":"Block","src":"11743:74:87","statements":[{"expression":{"components":[{"hexValue":"74727565","id":33543,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"11765:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":33544,"name":"forcedHookAdjustedAmountsLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32650,"src":"11771:34:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}}],"id":33545,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11764:42:87","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_array$_t_uint256_$dyn_storage_$","typeString":"tuple(bool,uint256[] storage ref)"}},"functionReturnParameters":33541,"id":33546,"nodeType":"Return","src":"11757:49:87"}]}},{"assignments":[33553,null,null,null],"declarations":[{"constant":false,"id":33553,"mutability":"mutable","name":"tokens","nameLocation":"11844:6:87","nodeType":"VariableDeclaration","scope":33681,"src":"11828:22:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":33551,"nodeType":"UserDefinedTypeName","pathNode":{"id":33550,"name":"IERC20","nameLocations":["11828:6:87"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"11828:6:87"},"referencedDeclaration":40109,"src":"11828:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":33552,"nodeType":"ArrayTypeName","src":"11828:8:87","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},null,null,null],"id":33558,"initialValue":{"arguments":[{"id":33556,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33517,"src":"11884:4:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":33554,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"11860:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":33555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11867:16:87","memberName":"getPoolTokenInfo","nodeType":"MemberAccess","referencedDeclaration":4186,"src":"11860:23:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$_t_array$_t_struct$_TokenInfo_$4704_memory_ptr_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory,struct TokenInfo memory[] memory,uint256[] memory,uint256[] memory)"}},"id":33557,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11860:29:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$_t_array$_t_struct$_TokenInfo_$4704_memory_ptr_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(contract IERC20[] memory,struct TokenInfo memory[] memory,uint256[] memory,uint256[] memory)"}},"nodeType":"VariableDeclarationStatement","src":"11827:62:87"},{"expression":{"id":33561,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33559,"name":"hookAdjustedAmountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33540,"src":"11899:25:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33560,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33528,"src":"11927:13:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"11899:41:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33562,"nodeType":"ExpressionStatement","src":"11899:41:87"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33563,"name":"removeLiquidityHookFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32676,"src":"11955:32:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":33564,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11990:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11955:36:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33613,"name":"removeLiquidityHookDiscountPercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32678,"src":"12371:37:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":33614,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12411:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12371:41:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33674,"nodeType":"IfStatement","src":"12367:531:87","trueBody":{"id":33673,"nodeType":"Block","src":"12414:484:87","statements":[{"body":{"id":33671,"nodeType":"Block","src":"12479:409:87","statements":[{"assignments":[33628],"declarations":[{"constant":false,"id":33628,"mutability":"mutable","name":"hookDiscount","nameLocation":"12505:12:87","nodeType":"VariableDeclaration","scope":33671,"src":"12497:20:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33627,"name":"uint256","nodeType":"ElementaryTypeName","src":"12497:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33635,"initialValue":{"arguments":[{"id":33633,"name":"removeLiquidityHookDiscountPercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32678,"src":"12545:37:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":33629,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33528,"src":"12520:13:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33631,"indexExpression":{"id":33630,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33617,"src":"12534:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12520:16:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12537:7:87","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":7953,"src":"12520:24:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":33634,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12520:63:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12497:86:87"},{"assignments":[33638],"declarations":[{"constant":false,"id":33638,"mutability":"mutable","name":"token","nameLocation":"12608:5:87","nodeType":"VariableDeclaration","scope":33671,"src":"12601:12:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":33637,"nodeType":"UserDefinedTypeName","pathNode":{"id":33636,"name":"IERC20","nameLocations":["12601:6:87"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"12601:6:87"},"referencedDeclaration":40109,"src":"12601:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"id":33642,"initialValue":{"baseExpression":{"id":33639,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33553,"src":"12616:6:87","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":33641,"indexExpression":{"id":33640,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33617,"src":"12623:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12616:9:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"12601:24:87"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33643,"name":"hookDiscount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33628,"src":"12648:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":33644,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12663:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12648:16:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33670,"nodeType":"IfStatement","src":"12644:230:87","trueBody":{"id":33669,"nodeType":"Block","src":"12666:208:87","statements":[{"expression":{"arguments":[{"arguments":[{"id":33651,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"12711:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}],"id":33650,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12703:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":33649,"name":"address","nodeType":"ElementaryTypeName","src":"12703:7:87","typeDescriptions":{}}},"id":33652,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12703:15:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":33653,"name":"hookDiscount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33628,"src":"12720:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":33646,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33638,"src":"12688:5:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":33648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12694:8:87","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":40076,"src":"12688:14:87","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":33654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12688:45:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33655,"nodeType":"ExpressionStatement","src":"12688:45:87"},{"expression":{"id":33660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":33656,"name":"hookAdjustedAmountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33540,"src":"12755:25:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33658,"indexExpression":{"id":33657,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33617,"src":"12781:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12755:28:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":33659,"name":"hookDiscount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33628,"src":"12787:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12755:44:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33661,"nodeType":"ExpressionStatement","src":"12755:44:87"},{"expression":{"arguments":[{"id":33665,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33638,"src":"12835:5:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":33666,"name":"hookDiscount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33628,"src":"12842:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":33662,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"12821:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":33664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12828:6:87","memberName":"settle","nodeType":"MemberAccess","referencedDeclaration":4451,"src":"12821:13:87","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$_t_uint256_$","typeString":"function (contract IERC20,uint256) external returns (uint256)"}},"id":33667,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12821:34:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33668,"nodeType":"ExpressionStatement","src":"12821:34:87"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33620,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33617,"src":"12448:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":33621,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33528,"src":"12452:13:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12466:6:87","memberName":"length","nodeType":"MemberAccess","src":"12452:20:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12448:24:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33672,"initializationExpression":{"assignments":[33617],"declarations":[{"constant":false,"id":33617,"mutability":"mutable","name":"i","nameLocation":"12441:1:87","nodeType":"VariableDeclaration","scope":33672,"src":"12433:9:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33616,"name":"uint256","nodeType":"ElementaryTypeName","src":"12433:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33619,"initialValue":{"hexValue":"30","id":33618,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12445:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12433:13:87"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":33625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"12474:3:87","subExpression":{"id":33624,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33617,"src":"12474:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33626,"nodeType":"ExpressionStatement","src":"12474:3:87"},"nodeType":"ForStatement","src":"12428:460:87"}]}},"id":33675,"nodeType":"IfStatement","src":"11951:947:87","trueBody":{"id":33612,"nodeType":"Block","src":"11993:368:87","statements":[{"body":{"id":33610,"nodeType":"Block","src":"12058:293:87","statements":[{"assignments":[33578],"declarations":[{"constant":false,"id":33578,"mutability":"mutable","name":"hookFee","nameLocation":"12084:7:87","nodeType":"VariableDeclaration","scope":33610,"src":"12076:15:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33577,"name":"uint256","nodeType":"ElementaryTypeName","src":"12076:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33585,"initialValue":{"arguments":[{"id":33583,"name":"removeLiquidityHookFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32676,"src":"12119:32:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":33579,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33528,"src":"12094:13:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33581,"indexExpression":{"id":33580,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33567,"src":"12108:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12094:16:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12111:7:87","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":7953,"src":"12094:24:87","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":33584,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12094:58:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12076:76:87"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33586,"name":"hookFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33578,"src":"12174:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":33587,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12184:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12174:11:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33609,"nodeType":"IfStatement","src":"12170:167:87","trueBody":{"id":33608,"nodeType":"Block","src":"12187:150:87","statements":[{"expression":{"id":33593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":33589,"name":"hookAdjustedAmountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33540,"src":"12209:25:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33591,"indexExpression":{"id":33590,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33567,"src":"12235:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12209:28:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":33592,"name":"hookFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33578,"src":"12241:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12209:39:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33594,"nodeType":"ExpressionStatement","src":"12209:39:87"},{"expression":{"arguments":[{"baseExpression":{"id":33598,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33553,"src":"12284:6:87","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":33600,"indexExpression":{"id":33599,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33567,"src":"12291:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12284:9:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"arguments":[{"id":33603,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"12303:4:87","typeDescriptions":{"typeIdentifier":"t_contract$_PoolHooksMock_$34144","typeString":"contract PoolHooksMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PoolHooksMock_$34144","typeString":"contract PoolHooksMock"}],"id":33602,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12295:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":33601,"name":"address","nodeType":"ElementaryTypeName","src":"12295:7:87","typeDescriptions":{}}},"id":33604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12295:13:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":33605,"name":"hookFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33578,"src":"12310:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":33595,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"12270:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":33597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12277:6:87","memberName":"sendTo","nodeType":"MemberAccess","referencedDeclaration":4462,"src":"12270:13:87","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$40109_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":33606,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12270:48:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":33607,"nodeType":"ExpressionStatement","src":"12270:48:87"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":33573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":33570,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33567,"src":"12027:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":33571,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33528,"src":"12031:13:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":33572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12045:6:87","memberName":"length","nodeType":"MemberAccess","src":"12031:20:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12027:24:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33611,"initializationExpression":{"assignments":[33567],"declarations":[{"constant":false,"id":33567,"mutability":"mutable","name":"i","nameLocation":"12020:1:87","nodeType":"VariableDeclaration","scope":33611,"src":"12012:9:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33566,"name":"uint256","nodeType":"ElementaryTypeName","src":"12012:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":33569,"initialValue":{"hexValue":"30","id":33568,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12024:1:87","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12012:13:87"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":33575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"12053:3:87","subExpression":{"id":33574,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33567,"src":"12053:1:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33576,"nodeType":"ExpressionStatement","src":"12053:3:87"},"nodeType":"ForStatement","src":"12007:344:87"}]}},{"expression":{"components":[{"id":33677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"12916:27:87","subExpression":{"id":33676,"name":"failOnAfterRemoveLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32645,"src":"12917:26:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":33678,"name":"hookAdjustedAmountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33540,"src":"12945:25:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"id":33679,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12915:56:87","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(bool,uint256[] memory)"}},"functionReturnParameters":33541,"id":33680,"nodeType":"Return","src":"12908:63:87"}]},"functionSelector":"2754888d","id":33682,"implemented":true,"kind":"function","modifiers":[],"name":"onAfterRemoveLiquidity","nameLocation":"11336:22:87","nodeType":"FunctionDefinition","overrides":{"id":33535,"nodeType":"OverrideSpecifier","overrides":[],"src":"11571:8:87"},"parameters":{"id":33534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33515,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33682,"src":"11368:7:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":33514,"name":"address","nodeType":"ElementaryTypeName","src":"11368:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":33517,"mutability":"mutable","name":"pool","nameLocation":"11393:4:87","nodeType":"VariableDeclaration","scope":33682,"src":"11385:12:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":33516,"name":"address","nodeType":"ElementaryTypeName","src":"11385:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":33520,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33682,"src":"11407:19:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":33519,"nodeType":"UserDefinedTypeName","pathNode":{"id":33518,"name":"RemoveLiquidityKind","nameLocations":["11407:19:87"],"nodeType":"IdentifierPath","referencedDeclaration":4828,"src":"11407:19:87"},"referencedDeclaration":4828,"src":"11407:19:87","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":33522,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33682,"src":"11436:7:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33521,"name":"uint256","nodeType":"ElementaryTypeName","src":"11436:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":33525,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33682,"src":"11453:16:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":33523,"name":"uint256","nodeType":"ElementaryTypeName","src":"11453:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33524,"nodeType":"ArrayTypeName","src":"11453:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":33528,"mutability":"mutable","name":"amountsOutRaw","nameLocation":"11496:13:87","nodeType":"VariableDeclaration","scope":33682,"src":"11479:30:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":33526,"name":"uint256","nodeType":"ElementaryTypeName","src":"11479:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33527,"nodeType":"ArrayTypeName","src":"11479:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":33531,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33682,"src":"11519:16:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":33529,"name":"uint256","nodeType":"ElementaryTypeName","src":"11519:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33530,"nodeType":"ArrayTypeName","src":"11519:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":33533,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33682,"src":"11545:12:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":33532,"name":"bytes","nodeType":"ElementaryTypeName","src":"11545:5:87","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"11358:205:87"},"returnParameters":{"id":33541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33537,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":33682,"src":"11589:4:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":33536,"name":"bool","nodeType":"ElementaryTypeName","src":"11589:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":33540,"mutability":"mutable","name":"hookAdjustedAmountsOutRaw","nameLocation":"11612:25:87","nodeType":"VariableDeclaration","scope":33682,"src":"11595:42:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":33538,"name":"uint256","nodeType":"ElementaryTypeName","src":"11595:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33539,"nodeType":"ArrayTypeName","src":"11595:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11588:50:87"},"scope":34144,"src":"11327:1651:87","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":33691,"nodeType":"Block","src":"13218:45:87","statements":[{"expression":{"id":33689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33687,"name":"failOnAfterInitialize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32629,"src":"13228:21:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33688,"name":"fail","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33684,"src":"13252:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13228:28:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33690,"nodeType":"ExpressionStatement","src":"13228:28:87"}]},"functionSelector":"b127e385","id":33692,"implemented":true,"kind":"function","modifiers":[],"name":"setFailOnAfterInitializeHook","nameLocation":"13169:28:87","nodeType":"FunctionDefinition","parameters":{"id":33685,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33684,"mutability":"mutable","name":"fail","nameLocation":"13203:4:87","nodeType":"VariableDeclaration","scope":33692,"src":"13198:9:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":33683,"name":"bool","nodeType":"ElementaryTypeName","src":"13198:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13197:11:87"},"returnParameters":{"id":33686,"nodeType":"ParameterList","parameters":[],"src":"13218:0:87"},"scope":34144,"src":"13160:103:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":33701,"nodeType":"Block","src":"13328:46:87","statements":[{"expression":{"id":33699,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33697,"name":"failOnBeforeInitialize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32631,"src":"13338:22:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33698,"name":"fail","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33694,"src":"13363:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13338:29:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33700,"nodeType":"ExpressionStatement","src":"13338:29:87"}]},"functionSelector":"d3fca637","id":33702,"implemented":true,"kind":"function","modifiers":[],"name":"setFailOnBeforeInitializeHook","nameLocation":"13278:29:87","nodeType":"FunctionDefinition","parameters":{"id":33695,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33694,"mutability":"mutable","name":"fail","nameLocation":"13313:4:87","nodeType":"VariableDeclaration","scope":33702,"src":"13308:9:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":33693,"name":"bool","nodeType":"ElementaryTypeName","src":"13308:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13307:11:87"},"returnParameters":{"id":33696,"nodeType":"ParameterList","parameters":[],"src":"13328:0:87"},"scope":34144,"src":"13269:105:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":33711,"nodeType":"Block","src":"13444:55:87","statements":[{"expression":{"id":33709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33707,"name":"failOnComputeDynamicSwapFeeHook","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32633,"src":"13454:31:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33708,"name":"fail","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33704,"src":"13488:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13454:38:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33710,"nodeType":"ExpressionStatement","src":"13454:38:87"}]},"functionSelector":"87ac5691","id":33712,"implemented":true,"kind":"function","modifiers":[],"name":"setFailOnComputeDynamicSwapFeeHook","nameLocation":"13389:34:87","nodeType":"FunctionDefinition","parameters":{"id":33705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33704,"mutability":"mutable","name":"fail","nameLocation":"13429:4:87","nodeType":"VariableDeclaration","scope":33712,"src":"13424:9:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":33703,"name":"bool","nodeType":"ElementaryTypeName","src":"13424:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13423:11:87"},"returnParameters":{"id":33706,"nodeType":"ParameterList","parameters":[],"src":"13444:0:87"},"scope":34144,"src":"13380:119:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":33721,"nodeType":"Block","src":"13558:44:87","statements":[{"expression":{"id":33719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33717,"name":"failOnBeforeSwapHook","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32635,"src":"13568:20:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33718,"name":"fail","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33714,"src":"13591:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13568:27:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33720,"nodeType":"ExpressionStatement","src":"13568:27:87"}]},"functionSelector":"b3a763b9","id":33722,"implemented":true,"kind":"function","modifiers":[],"name":"setFailOnBeforeSwapHook","nameLocation":"13514:23:87","nodeType":"FunctionDefinition","parameters":{"id":33715,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33714,"mutability":"mutable","name":"fail","nameLocation":"13543:4:87","nodeType":"VariableDeclaration","scope":33722,"src":"13538:9:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":33713,"name":"bool","nodeType":"ElementaryTypeName","src":"13538:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13537:11:87"},"returnParameters":{"id":33716,"nodeType":"ParameterList","parameters":[],"src":"13558:0:87"},"scope":34144,"src":"13505:97:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":33731,"nodeType":"Block","src":"13660:43:87","statements":[{"expression":{"id":33729,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33727,"name":"failOnAfterSwapHook","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32637,"src":"13670:19:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33728,"name":"fail","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33724,"src":"13692:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13670:26:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33730,"nodeType":"ExpressionStatement","src":"13670:26:87"}]},"functionSelector":"7b695d10","id":33732,"implemented":true,"kind":"function","modifiers":[],"name":"setFailOnAfterSwapHook","nameLocation":"13617:22:87","nodeType":"FunctionDefinition","parameters":{"id":33725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33724,"mutability":"mutable","name":"fail","nameLocation":"13645:4:87","nodeType":"VariableDeclaration","scope":33732,"src":"13640:9:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":33723,"name":"bool","nodeType":"ElementaryTypeName","src":"13640:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13639:11:87"},"returnParameters":{"id":33726,"nodeType":"ParameterList","parameters":[],"src":"13660:0:87"},"scope":34144,"src":"13608:95:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":33741,"nodeType":"Block","src":"13770:48:87","statements":[{"expression":{"id":33739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33737,"name":"failOnBeforeAddLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32639,"src":"13780:24:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33738,"name":"fail","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33734,"src":"13807:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13780:31:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33740,"nodeType":"ExpressionStatement","src":"13780:31:87"}]},"functionSelector":"82fb5d21","id":33742,"implemented":true,"kind":"function","modifiers":[],"name":"setFailOnBeforeAddLiquidityHook","nameLocation":"13718:31:87","nodeType":"FunctionDefinition","parameters":{"id":33735,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33734,"mutability":"mutable","name":"fail","nameLocation":"13755:4:87","nodeType":"VariableDeclaration","scope":33742,"src":"13750:9:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":33733,"name":"bool","nodeType":"ElementaryTypeName","src":"13750:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13749:11:87"},"returnParameters":{"id":33736,"nodeType":"ParameterList","parameters":[],"src":"13770:0:87"},"scope":34144,"src":"13709:109:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":33751,"nodeType":"Block","src":"13884:47:87","statements":[{"expression":{"id":33749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33747,"name":"failOnAfterAddLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32641,"src":"13894:23:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33748,"name":"fail","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33744,"src":"13920:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13894:30:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33750,"nodeType":"ExpressionStatement","src":"13894:30:87"}]},"functionSelector":"6e7d75e5","id":33752,"implemented":true,"kind":"function","modifiers":[],"name":"setFailOnAfterAddLiquidityHook","nameLocation":"13833:30:87","nodeType":"FunctionDefinition","parameters":{"id":33745,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33744,"mutability":"mutable","name":"fail","nameLocation":"13869:4:87","nodeType":"VariableDeclaration","scope":33752,"src":"13864:9:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":33743,"name":"bool","nodeType":"ElementaryTypeName","src":"13864:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13863:11:87"},"returnParameters":{"id":33746,"nodeType":"ParameterList","parameters":[],"src":"13884:0:87"},"scope":34144,"src":"13824:107:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":33761,"nodeType":"Block","src":"14001:51:87","statements":[{"expression":{"id":33759,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33757,"name":"failOnBeforeRemoveLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32643,"src":"14011:27:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33758,"name":"fail","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33754,"src":"14041:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14011:34:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33760,"nodeType":"ExpressionStatement","src":"14011:34:87"}]},"functionSelector":"d4f83182","id":33762,"implemented":true,"kind":"function","modifiers":[],"name":"setFailOnBeforeRemoveLiquidityHook","nameLocation":"13946:34:87","nodeType":"FunctionDefinition","parameters":{"id":33755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33754,"mutability":"mutable","name":"fail","nameLocation":"13986:4:87","nodeType":"VariableDeclaration","scope":33762,"src":"13981:9:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":33753,"name":"bool","nodeType":"ElementaryTypeName","src":"13981:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13980:11:87"},"returnParameters":{"id":33756,"nodeType":"ParameterList","parameters":[],"src":"14001:0:87"},"scope":34144,"src":"13937:115:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":33771,"nodeType":"Block","src":"14121:50:87","statements":[{"expression":{"id":33769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33767,"name":"failOnAfterRemoveLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32645,"src":"14131:26:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33768,"name":"fail","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33764,"src":"14160:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14131:33:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33770,"nodeType":"ExpressionStatement","src":"14131:33:87"}]},"functionSelector":"039388ba","id":33772,"implemented":true,"kind":"function","modifiers":[],"name":"setFailOnAfterRemoveLiquidityHook","nameLocation":"14067:33:87","nodeType":"FunctionDefinition","parameters":{"id":33765,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33764,"mutability":"mutable","name":"fail","nameLocation":"14106:4:87","nodeType":"VariableDeclaration","scope":33772,"src":"14101:9:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":33763,"name":"bool","nodeType":"ElementaryTypeName","src":"14101:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14100:11:87"},"returnParameters":{"id":33766,"nodeType":"ParameterList","parameters":[],"src":"14121:0:87"},"scope":34144,"src":"14058:113:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":33788,"nodeType":"Block","src":"14461:110:87","statements":[{"expression":{"id":33782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33780,"name":"changePoolBalancesOnBeforeSwapHook","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32660,"src":"14471:34:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33781,"name":"changeBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33774,"src":"14508:14:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14471:51:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33783,"nodeType":"ExpressionStatement","src":"14471:51:87"},{"expression":{"id":33786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33784,"name":"_newBalancesRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32698,"src":"14532:15:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33785,"name":"newBalancesRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33777,"src":"14550:14:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"14532:32:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":33787,"nodeType":"ExpressionStatement","src":"14532:32:87"}]},"functionSelector":"34e3a8c3","id":33789,"implemented":true,"kind":"function","modifiers":[],"name":"setChangePoolBalancesOnBeforeSwapHook","nameLocation":"14360:37:87","nodeType":"FunctionDefinition","parameters":{"id":33778,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33774,"mutability":"mutable","name":"changeBalances","nameLocation":"14403:14:87","nodeType":"VariableDeclaration","scope":33789,"src":"14398:19:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":33773,"name":"bool","nodeType":"ElementaryTypeName","src":"14398:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":33777,"mutability":"mutable","name":"newBalancesRaw","nameLocation":"14436:14:87","nodeType":"VariableDeclaration","scope":33789,"src":"14419:31:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":33775,"name":"uint256","nodeType":"ElementaryTypeName","src":"14419:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33776,"nodeType":"ArrayTypeName","src":"14419:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"14397:54:87"},"returnParameters":{"id":33779,"nodeType":"ParameterList","parameters":[],"src":"14461:0:87"},"scope":34144,"src":"14351:220:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":33805,"nodeType":"Block","src":"14717:118:87","statements":[{"expression":{"id":33799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33797,"name":"changePoolBalancesOnBeforeAddLiquidityHook","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32662,"src":"14727:42:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33798,"name":"changeBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33791,"src":"14772:14:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14727:59:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33800,"nodeType":"ExpressionStatement","src":"14727:59:87"},{"expression":{"id":33803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33801,"name":"_newBalancesRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32698,"src":"14796:15:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33802,"name":"newBalancesRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33794,"src":"14814:14:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"14796:32:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":33804,"nodeType":"ExpressionStatement","src":"14796:32:87"}]},"functionSelector":"93c4b286","id":33806,"implemented":true,"kind":"function","modifiers":[],"name":"setChangePoolBalancesOnBeforeAddLiquidityHook","nameLocation":"14586:45:87","nodeType":"FunctionDefinition","parameters":{"id":33795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33791,"mutability":"mutable","name":"changeBalances","nameLocation":"14646:14:87","nodeType":"VariableDeclaration","scope":33806,"src":"14641:19:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":33790,"name":"bool","nodeType":"ElementaryTypeName","src":"14641:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":33794,"mutability":"mutable","name":"newBalancesRaw","nameLocation":"14687:14:87","nodeType":"VariableDeclaration","scope":33806,"src":"14670:31:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":33792,"name":"uint256","nodeType":"ElementaryTypeName","src":"14670:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33793,"nodeType":"ArrayTypeName","src":"14670:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"14631:76:87"},"returnParameters":{"id":33796,"nodeType":"ParameterList","parameters":[],"src":"14717:0:87"},"scope":34144,"src":"14577:258:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":33822,"nodeType":"Block","src":"14984:121:87","statements":[{"expression":{"id":33816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33814,"name":"changePoolBalancesOnBeforeRemoveLiquidityHook","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32664,"src":"14994:45:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33815,"name":"changeBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33808,"src":"15042:14:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14994:62:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33817,"nodeType":"ExpressionStatement","src":"14994:62:87"},{"expression":{"id":33820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33818,"name":"_newBalancesRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32698,"src":"15066:15:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33819,"name":"newBalancesRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33811,"src":"15084:14:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"15066:32:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":33821,"nodeType":"ExpressionStatement","src":"15066:32:87"}]},"functionSelector":"71eff9d2","id":33823,"implemented":true,"kind":"function","modifiers":[],"name":"setChangePoolBalancesOnBeforeRemoveLiquidityHook","nameLocation":"14850:48:87","nodeType":"FunctionDefinition","parameters":{"id":33812,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33808,"mutability":"mutable","name":"changeBalances","nameLocation":"14913:14:87","nodeType":"VariableDeclaration","scope":33823,"src":"14908:19:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":33807,"name":"bool","nodeType":"ElementaryTypeName","src":"14908:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":33811,"mutability":"mutable","name":"newBalancesRaw","nameLocation":"14954:14:87","nodeType":"VariableDeclaration","scope":33823,"src":"14937:31:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":33809,"name":"uint256","nodeType":"ElementaryTypeName","src":"14937:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33810,"nodeType":"ArrayTypeName","src":"14937:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"14898:76:87"},"returnParameters":{"id":33813,"nodeType":"ParameterList","parameters":[],"src":"14984:0:87"},"scope":34144,"src":"14841:264:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":33845,"nodeType":"Block","src":"15270:139:87","statements":[{"expression":{"id":33835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33833,"name":"changeTokenRateOnBeforeInitialize","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32654,"src":"15280:33:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33834,"name":"changeRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33825,"src":"15316:10:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"15280:46:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33836,"nodeType":"ExpressionStatement","src":"15280:46:87"},{"expression":{"id":33839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33837,"name":"_rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32687,"src":"15336:13:87","typeDescriptions":{"typeIdentifier":"t_contract$_RateProviderMock_$34616","typeString":"contract RateProviderMock"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33838,"name":"rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33828,"src":"15352:12:87","typeDescriptions":{"typeIdentifier":"t_contract$_RateProviderMock_$34616","typeString":"contract RateProviderMock"}},"src":"15336:28:87","typeDescriptions":{"typeIdentifier":"t_contract$_RateProviderMock_$34616","typeString":"contract RateProviderMock"}},"id":33840,"nodeType":"ExpressionStatement","src":"15336:28:87"},{"expression":{"id":33843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33841,"name":"_newTokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32689,"src":"15374:13:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33842,"name":"newTokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33830,"src":"15390:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15374:28:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33844,"nodeType":"ExpressionStatement","src":"15374:28:87"}]},"functionSelector":"5991de93","id":33846,"implemented":true,"kind":"function","modifiers":[],"name":"setChangeTokenRateOnBeforeInitializeHook","nameLocation":"15120:40:87","nodeType":"FunctionDefinition","parameters":{"id":33831,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33825,"mutability":"mutable","name":"changeRate","nameLocation":"15175:10:87","nodeType":"VariableDeclaration","scope":33846,"src":"15170:15:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":33824,"name":"bool","nodeType":"ElementaryTypeName","src":"15170:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":33828,"mutability":"mutable","name":"rateProvider","nameLocation":"15212:12:87","nodeType":"VariableDeclaration","scope":33846,"src":"15195:29:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_RateProviderMock_$34616","typeString":"contract RateProviderMock"},"typeName":{"id":33827,"nodeType":"UserDefinedTypeName","pathNode":{"id":33826,"name":"RateProviderMock","nameLocations":["15195:16:87"],"nodeType":"IdentifierPath","referencedDeclaration":34616,"src":"15195:16:87"},"referencedDeclaration":34616,"src":"15195:16:87","typeDescriptions":{"typeIdentifier":"t_contract$_RateProviderMock_$34616","typeString":"contract RateProviderMock"}},"visibility":"internal"},{"constant":false,"id":33830,"mutability":"mutable","name":"newTokenRate","nameLocation":"15242:12:87","nodeType":"VariableDeclaration","scope":33846,"src":"15234:20:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33829,"name":"uint256","nodeType":"ElementaryTypeName","src":"15234:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15160:100:87"},"returnParameters":{"id":33832,"nodeType":"ParameterList","parameters":[],"src":"15270:0:87"},"scope":34144,"src":"15111:298:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":33868,"nodeType":"Block","src":"15568:137:87","statements":[{"expression":{"id":33858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33856,"name":"changeTokenRateOnBeforeSwapHook","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32652,"src":"15578:31:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33857,"name":"changeRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33848,"src":"15612:10:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"15578:44:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33859,"nodeType":"ExpressionStatement","src":"15578:44:87"},{"expression":{"id":33862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33860,"name":"_rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32687,"src":"15632:13:87","typeDescriptions":{"typeIdentifier":"t_contract$_RateProviderMock_$34616","typeString":"contract RateProviderMock"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33861,"name":"rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33851,"src":"15648:12:87","typeDescriptions":{"typeIdentifier":"t_contract$_RateProviderMock_$34616","typeString":"contract RateProviderMock"}},"src":"15632:28:87","typeDescriptions":{"typeIdentifier":"t_contract$_RateProviderMock_$34616","typeString":"contract RateProviderMock"}},"id":33863,"nodeType":"ExpressionStatement","src":"15632:28:87"},{"expression":{"id":33866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33864,"name":"_newTokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32689,"src":"15670:13:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33865,"name":"newTokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33853,"src":"15686:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15670:28:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33867,"nodeType":"ExpressionStatement","src":"15670:28:87"}]},"functionSelector":"c25dade8","id":33869,"implemented":true,"kind":"function","modifiers":[],"name":"setChangeTokenRateOnBeforeSwapHook","nameLocation":"15424:34:87","nodeType":"FunctionDefinition","parameters":{"id":33854,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33848,"mutability":"mutable","name":"changeRate","nameLocation":"15473:10:87","nodeType":"VariableDeclaration","scope":33869,"src":"15468:15:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":33847,"name":"bool","nodeType":"ElementaryTypeName","src":"15468:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":33851,"mutability":"mutable","name":"rateProvider","nameLocation":"15510:12:87","nodeType":"VariableDeclaration","scope":33869,"src":"15493:29:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_RateProviderMock_$34616","typeString":"contract RateProviderMock"},"typeName":{"id":33850,"nodeType":"UserDefinedTypeName","pathNode":{"id":33849,"name":"RateProviderMock","nameLocations":["15493:16:87"],"nodeType":"IdentifierPath","referencedDeclaration":34616,"src":"15493:16:87"},"referencedDeclaration":34616,"src":"15493:16:87","typeDescriptions":{"typeIdentifier":"t_contract$_RateProviderMock_$34616","typeString":"contract RateProviderMock"}},"visibility":"internal"},{"constant":false,"id":33853,"mutability":"mutable","name":"newTokenRate","nameLocation":"15540:12:87","nodeType":"VariableDeclaration","scope":33869,"src":"15532:20:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33852,"name":"uint256","nodeType":"ElementaryTypeName","src":"15532:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15458:100:87"},"returnParameters":{"id":33855,"nodeType":"ParameterList","parameters":[],"src":"15568:0:87"},"scope":34144,"src":"15415:290:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":33891,"nodeType":"Block","src":"15872:141:87","statements":[{"expression":{"id":33881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33879,"name":"changeTokenRateOnBeforeAddLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32656,"src":"15882:35:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33880,"name":"changeRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33871,"src":"15920:10:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"15882:48:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33882,"nodeType":"ExpressionStatement","src":"15882:48:87"},{"expression":{"id":33885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33883,"name":"_rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32687,"src":"15940:13:87","typeDescriptions":{"typeIdentifier":"t_contract$_RateProviderMock_$34616","typeString":"contract RateProviderMock"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33884,"name":"rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33874,"src":"15956:12:87","typeDescriptions":{"typeIdentifier":"t_contract$_RateProviderMock_$34616","typeString":"contract RateProviderMock"}},"src":"15940:28:87","typeDescriptions":{"typeIdentifier":"t_contract$_RateProviderMock_$34616","typeString":"contract RateProviderMock"}},"id":33886,"nodeType":"ExpressionStatement","src":"15940:28:87"},{"expression":{"id":33889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33887,"name":"_newTokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32689,"src":"15978:13:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33888,"name":"newTokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33876,"src":"15994:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15978:28:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33890,"nodeType":"ExpressionStatement","src":"15978:28:87"}]},"functionSelector":"335d4126","id":33892,"implemented":true,"kind":"function","modifiers":[],"name":"setChangeTokenRateOnBeforeAddLiquidityHook","nameLocation":"15720:42:87","nodeType":"FunctionDefinition","parameters":{"id":33877,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33871,"mutability":"mutable","name":"changeRate","nameLocation":"15777:10:87","nodeType":"VariableDeclaration","scope":33892,"src":"15772:15:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":33870,"name":"bool","nodeType":"ElementaryTypeName","src":"15772:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":33874,"mutability":"mutable","name":"rateProvider","nameLocation":"15814:12:87","nodeType":"VariableDeclaration","scope":33892,"src":"15797:29:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_RateProviderMock_$34616","typeString":"contract RateProviderMock"},"typeName":{"id":33873,"nodeType":"UserDefinedTypeName","pathNode":{"id":33872,"name":"RateProviderMock","nameLocations":["15797:16:87"],"nodeType":"IdentifierPath","referencedDeclaration":34616,"src":"15797:16:87"},"referencedDeclaration":34616,"src":"15797:16:87","typeDescriptions":{"typeIdentifier":"t_contract$_RateProviderMock_$34616","typeString":"contract RateProviderMock"}},"visibility":"internal"},{"constant":false,"id":33876,"mutability":"mutable","name":"newTokenRate","nameLocation":"15844:12:87","nodeType":"VariableDeclaration","scope":33892,"src":"15836:20:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33875,"name":"uint256","nodeType":"ElementaryTypeName","src":"15836:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15762:100:87"},"returnParameters":{"id":33878,"nodeType":"ParameterList","parameters":[],"src":"15872:0:87"},"scope":34144,"src":"15711:302:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":33914,"nodeType":"Block","src":"16183:144:87","statements":[{"expression":{"id":33904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33902,"name":"changeTokenRateOnBeforeRemoveLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32658,"src":"16193:38:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33903,"name":"changeRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33894,"src":"16234:10:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16193:51:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33905,"nodeType":"ExpressionStatement","src":"16193:51:87"},{"expression":{"id":33908,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33906,"name":"_rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32687,"src":"16254:13:87","typeDescriptions":{"typeIdentifier":"t_contract$_RateProviderMock_$34616","typeString":"contract RateProviderMock"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33907,"name":"rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33897,"src":"16270:12:87","typeDescriptions":{"typeIdentifier":"t_contract$_RateProviderMock_$34616","typeString":"contract RateProviderMock"}},"src":"16254:28:87","typeDescriptions":{"typeIdentifier":"t_contract$_RateProviderMock_$34616","typeString":"contract RateProviderMock"}},"id":33909,"nodeType":"ExpressionStatement","src":"16254:28:87"},{"expression":{"id":33912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33910,"name":"_newTokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32689,"src":"16292:13:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33911,"name":"newTokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33899,"src":"16308:12:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16292:28:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33913,"nodeType":"ExpressionStatement","src":"16292:28:87"}]},"functionSelector":"e62eecdd","id":33915,"implemented":true,"kind":"function","modifiers":[],"name":"setChangeTokenRateOnBeforeRemoveLiquidityHook","nameLocation":"16028:45:87","nodeType":"FunctionDefinition","parameters":{"id":33900,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33894,"mutability":"mutable","name":"changeRate","nameLocation":"16088:10:87","nodeType":"VariableDeclaration","scope":33915,"src":"16083:15:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":33893,"name":"bool","nodeType":"ElementaryTypeName","src":"16083:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":33897,"mutability":"mutable","name":"rateProvider","nameLocation":"16125:12:87","nodeType":"VariableDeclaration","scope":33915,"src":"16108:29:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_RateProviderMock_$34616","typeString":"contract RateProviderMock"},"typeName":{"id":33896,"nodeType":"UserDefinedTypeName","pathNode":{"id":33895,"name":"RateProviderMock","nameLocations":["16108:16:87"],"nodeType":"IdentifierPath","referencedDeclaration":34616,"src":"16108:16:87"},"referencedDeclaration":34616,"src":"16108:16:87","typeDescriptions":{"typeIdentifier":"t_contract$_RateProviderMock_$34616","typeString":"contract RateProviderMock"}},"visibility":"internal"},{"constant":false,"id":33899,"mutability":"mutable","name":"newTokenRate","nameLocation":"16155:12:87","nodeType":"VariableDeclaration","scope":33915,"src":"16147:20:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33898,"name":"uint256","nodeType":"ElementaryTypeName","src":"16147:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16073:100:87"},"returnParameters":{"id":33901,"nodeType":"ParameterList","parameters":[],"src":"16183:0:87"},"scope":34144,"src":"16019:308:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":33924,"nodeType":"Block","src":"16411:69:87","statements":[{"expression":{"id":33922,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33920,"name":"swapReentrancyHookActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32680,"src":"16421:24:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33921,"name":"_swapReentrancyHookActive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33917,"src":"16448:25:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16421:52:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33923,"nodeType":"ExpressionStatement","src":"16421:52:87"}]},"functionSelector":"e5e3b67e","id":33925,"implemented":true,"kind":"function","modifiers":[],"name":"setSwapReentrancyHookActive","nameLocation":"16342:27:87","nodeType":"FunctionDefinition","parameters":{"id":33918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33917,"mutability":"mutable","name":"_swapReentrancyHookActive","nameLocation":"16375:25:87","nodeType":"VariableDeclaration","scope":33925,"src":"16370:30:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":33916,"name":"bool","nodeType":"ElementaryTypeName","src":"16370:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"16369:32:87"},"returnParameters":{"id":33919,"nodeType":"ParameterList","parameters":[],"src":"16411:0:87"},"scope":34144,"src":"16333:147:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":33940,"nodeType":"Block","src":"16569:83:87","statements":[{"expression":{"id":33934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33932,"name":"_swapHookContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32682,"src":"16579:17:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33933,"name":"hookContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33927,"src":"16599:12:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16579:32:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":33935,"nodeType":"ExpressionStatement","src":"16579:32:87"},{"expression":{"id":33938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33936,"name":"_swapHookCalldata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32684,"src":"16621:17:87","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33937,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33929,"src":"16641:4:87","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"src":"16621:24:87","typeDescriptions":{"typeIdentifier":"t_bytes_storage","typeString":"bytes storage ref"}},"id":33939,"nodeType":"ExpressionStatement","src":"16621:24:87"}]},"functionSelector":"423ef816","id":33941,"implemented":true,"kind":"function","modifiers":[],"name":"setSwapReentrancyHook","nameLocation":"16495:21:87","nodeType":"FunctionDefinition","parameters":{"id":33930,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33927,"mutability":"mutable","name":"hookContract","nameLocation":"16525:12:87","nodeType":"VariableDeclaration","scope":33941,"src":"16517:20:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":33926,"name":"address","nodeType":"ElementaryTypeName","src":"16517:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":33929,"mutability":"mutable","name":"data","nameLocation":"16554:4:87","nodeType":"VariableDeclaration","scope":33941,"src":"16539:19:87","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":33928,"name":"bytes","nodeType":"ElementaryTypeName","src":"16539:5:87","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"16516:43:87"},"returnParameters":{"id":33931,"nodeType":"ParameterList","parameters":[],"src":"16569:0:87"},"scope":34144,"src":"16486:166:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":33950,"nodeType":"Block","src":"16709:40:87","statements":[{"expression":{"id":33948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33946,"name":"_specialSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32695,"src":"16719:14:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33947,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33943,"src":"16736:6:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16719:23:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":33949,"nodeType":"ExpressionStatement","src":"16719:23:87"}]},"functionSelector":"1064dfdd","id":33951,"implemented":true,"kind":"function","modifiers":[],"name":"setSpecialSender","nameLocation":"16667:16:87","nodeType":"FunctionDefinition","parameters":{"id":33944,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33943,"mutability":"mutable","name":"sender","nameLocation":"16692:6:87","nodeType":"VariableDeclaration","scope":33951,"src":"16684:14:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":33942,"name":"address","nodeType":"ElementaryTypeName","src":"16684:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16683:16:87"},"returnParameters":{"id":33945,"nodeType":"ParameterList","parameters":[],"src":"16709:0:87"},"scope":34144,"src":"16658:91:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":33960,"nodeType":"Block","src":"16825:49:87","statements":[{"expression":{"id":33958,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33956,"name":"_dynamicSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32691,"src":"16835:15:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33957,"name":"dynamicSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33953,"src":"16853:14:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16835:32:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33959,"nodeType":"ExpressionStatement","src":"16835:32:87"}]},"functionSelector":"214ff4c5","id":33961,"implemented":true,"kind":"function","modifiers":[],"name":"setDynamicSwapFeePercentage","nameLocation":"16764:27:87","nodeType":"FunctionDefinition","parameters":{"id":33954,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33953,"mutability":"mutable","name":"dynamicSwapFee","nameLocation":"16800:14:87","nodeType":"VariableDeclaration","scope":33961,"src":"16792:22:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33952,"name":"uint256","nodeType":"ElementaryTypeName","src":"16792:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16791:24:87"},"returnParameters":{"id":33955,"nodeType":"ParameterList","parameters":[],"src":"16825:0:87"},"scope":34144,"src":"16755:119:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":33970,"nodeType":"Block","src":"16920:29:87","statements":[{"expression":{"id":33968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33966,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32693,"src":"16930:5:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33967,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33963,"src":"16938:4:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16930:12:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":33969,"nodeType":"ExpressionStatement","src":"16930:12:87"}]},"functionSelector":"4437152a","id":33971,"implemented":true,"kind":"function","modifiers":[],"name":"setPool","nameLocation":"16889:7:87","nodeType":"FunctionDefinition","parameters":{"id":33964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33963,"mutability":"mutable","name":"pool","nameLocation":"16905:4:87","nodeType":"VariableDeclaration","scope":33971,"src":"16897:12:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":33962,"name":"address","nodeType":"ElementaryTypeName","src":"16897:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"16896:14:87"},"returnParameters":{"id":33965,"nodeType":"ParameterList","parameters":[],"src":"16920:0:87"},"scope":34144,"src":"16880:69:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":33980,"nodeType":"Block","src":"17028:64:87","statements":[{"expression":{"id":33978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33976,"name":"shouldSettleDiscount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32666,"src":"17038:20:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33977,"name":"shouldSettleDiscountFlag","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33973,"src":"17061:24:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"17038:47:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":33979,"nodeType":"ExpressionStatement","src":"17038:47:87"}]},"functionSelector":"3478db73","id":33981,"implemented":true,"kind":"function","modifiers":[],"name":"setShouldSettleDiscount","nameLocation":"16964:23:87","nodeType":"FunctionDefinition","parameters":{"id":33974,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33973,"mutability":"mutable","name":"shouldSettleDiscountFlag","nameLocation":"16993:24:87","nodeType":"VariableDeclaration","scope":33981,"src":"16988:29:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":33972,"name":"bool","nodeType":"ElementaryTypeName","src":"16988:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"16987:31:87"},"returnParameters":{"id":33975,"nodeType":"ParameterList","parameters":[],"src":"17028:0:87"},"scope":34144,"src":"16955:137:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":33990,"nodeType":"Block","src":"17164:54:87","statements":[{"expression":{"id":33988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33986,"name":"hookSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32668,"src":"17174:21:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33987,"name":"feePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33983,"src":"17198:13:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17174:37:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33989,"nodeType":"ExpressionStatement","src":"17174:37:87"}]},"functionSelector":"da09aacf","id":33991,"implemented":true,"kind":"function","modifiers":[],"name":"setHookSwapFeePercentage","nameLocation":"17107:24:87","nodeType":"FunctionDefinition","parameters":{"id":33984,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33983,"mutability":"mutable","name":"feePercentage","nameLocation":"17140:13:87","nodeType":"VariableDeclaration","scope":33991,"src":"17132:21:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33982,"name":"uint256","nodeType":"ElementaryTypeName","src":"17132:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17131:23:87"},"returnParameters":{"id":33985,"nodeType":"ParameterList","parameters":[],"src":"17164:0:87"},"scope":34144,"src":"17098:120:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":34000,"nodeType":"Block","src":"17300:64:87","statements":[{"expression":{"id":33998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":33996,"name":"hookSwapDiscountPercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32670,"src":"17310:26:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":33997,"name":"discountPercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33993,"src":"17339:18:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17310:47:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":33999,"nodeType":"ExpressionStatement","src":"17310:47:87"}]},"functionSelector":"fc6e0f59","id":34001,"implemented":true,"kind":"function","modifiers":[],"name":"setHookSwapDiscountPercentage","nameLocation":"17233:29:87","nodeType":"FunctionDefinition","parameters":{"id":33994,"nodeType":"ParameterList","parameters":[{"constant":false,"id":33993,"mutability":"mutable","name":"discountPercentage","nameLocation":"17271:18:87","nodeType":"VariableDeclaration","scope":34001,"src":"17263:26:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":33992,"name":"uint256","nodeType":"ElementaryTypeName","src":"17263:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17262:28:87"},"returnParameters":{"id":33995,"nodeType":"ParameterList","parameters":[],"src":"17300:0:87"},"scope":34144,"src":"17224:140:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":34010,"nodeType":"Block","src":"17446:66:87","statements":[{"expression":{"id":34008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":34006,"name":"addLiquidityHookFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32672,"src":"17456:29:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":34007,"name":"hookFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34003,"src":"17488:17:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17456:49:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34009,"nodeType":"ExpressionStatement","src":"17456:49:87"}]},"functionSelector":"2e55a841","id":34011,"implemented":true,"kind":"function","modifiers":[],"name":"setAddLiquidityHookFeePercentage","nameLocation":"17379:32:87","nodeType":"FunctionDefinition","parameters":{"id":34004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34003,"mutability":"mutable","name":"hookFeePercentage","nameLocation":"17420:17:87","nodeType":"VariableDeclaration","scope":34011,"src":"17412:25:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34002,"name":"uint256","nodeType":"ElementaryTypeName","src":"17412:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17411:27:87"},"returnParameters":{"id":34005,"nodeType":"ParameterList","parameters":[],"src":"17446:0:87"},"scope":34144,"src":"17370:142:87","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":34020,"nodeType":"Block","src":"17604:76:87","statements":[{"expression":{"id":34018,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":34016,"name":"addLiquidityHookDiscountPercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32674,"src":"17614:34:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":34017,"name":"hookDiscountPercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34013,"src":"17651:22:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17614:59:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34019,"nodeType":"ExpressionStatement","src":"17614:59:87"}]},"functionSelector":"dda1c15b","id":34021,"implemented":true,"kind":"function","modifiers":[],"name":"setAddLiquidityHookDiscountPercentage","nameLocation":"17527:37:87","nodeType":"FunctionDefinition","parameters":{"id":34014,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34013,"mutability":"mutable","name":"hookDiscountPercentage","nameLocation":"17573:22:87","nodeType":"VariableDeclaration","scope":34021,"src":"17565:30:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34012,"name":"uint256","nodeType":"ElementaryTypeName","src":"17565:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17564:32:87"},"returnParameters":{"id":34015,"nodeType":"ParameterList","parameters":[],"src":"17604:0:87"},"scope":34144,"src":"17518:162:87","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":34030,"nodeType":"Block","src":"17765:69:87","statements":[{"expression":{"id":34028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":34026,"name":"removeLiquidityHookFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32676,"src":"17775:32:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":34027,"name":"hookFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34023,"src":"17810:17:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17775:52:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34029,"nodeType":"ExpressionStatement","src":"17775:52:87"}]},"functionSelector":"b445fbe7","id":34031,"implemented":true,"kind":"function","modifiers":[],"name":"setRemoveLiquidityHookFeePercentage","nameLocation":"17695:35:87","nodeType":"FunctionDefinition","parameters":{"id":34024,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34023,"mutability":"mutable","name":"hookFeePercentage","nameLocation":"17739:17:87","nodeType":"VariableDeclaration","scope":34031,"src":"17731:25:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34022,"name":"uint256","nodeType":"ElementaryTypeName","src":"17731:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17730:27:87"},"returnParameters":{"id":34025,"nodeType":"ParameterList","parameters":[],"src":"17765:0:87"},"scope":34144,"src":"17686:148:87","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":34040,"nodeType":"Block","src":"17929:79:87","statements":[{"expression":{"id":34038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":34036,"name":"removeLiquidityHookDiscountPercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32678,"src":"17939:37:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":34037,"name":"hookDiscountPercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34033,"src":"17979:22:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17939:62:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34039,"nodeType":"ExpressionStatement","src":"17939:62:87"}]},"functionSelector":"34a168ec","id":34041,"implemented":true,"kind":"function","modifiers":[],"name":"setRemoveLiquidityHookDiscountPercentage","nameLocation":"17849:40:87","nodeType":"FunctionDefinition","parameters":{"id":34034,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34033,"mutability":"mutable","name":"hookDiscountPercentage","nameLocation":"17898:22:87","nodeType":"VariableDeclaration","scope":34041,"src":"17890:30:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34032,"name":"uint256","nodeType":"ElementaryTypeName","src":"17890:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17889:32:87"},"returnParameters":{"id":34035,"nodeType":"ParameterList","parameters":[],"src":"17929:0:87"},"scope":34144,"src":"17840:168:87","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":34055,"nodeType":"Block","src":"18118:129:87","statements":[{"expression":{"id":34049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":34047,"name":"shouldForceHookAdjustedAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32647,"src":"18128:30:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":34048,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"18161:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"18128:37:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":34050,"nodeType":"ExpressionStatement","src":"18128:37:87"},{"expression":{"id":34053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":34051,"name":"forcedHookAdjustedAmountsLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32650,"src":"18175:34:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":34052,"name":"hookAdjustedAmountsLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34044,"src":"18212:28:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"18175:65:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":34054,"nodeType":"ExpressionStatement","src":"18175:65:87"}]},"functionSelector":"0c54b1de","id":34056,"implemented":true,"kind":"function","modifiers":[],"name":"enableForcedHookAdjustedAmountsLiquidity","nameLocation":"18023:40:87","nodeType":"FunctionDefinition","parameters":{"id":34045,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34044,"mutability":"mutable","name":"hookAdjustedAmountsLiquidity","nameLocation":"18081:28:87","nodeType":"VariableDeclaration","scope":34056,"src":"18064:45:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":34042,"name":"uint256","nodeType":"ElementaryTypeName","src":"18064:7:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34043,"nodeType":"ArrayTypeName","src":"18064:9:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"18063:47:87"},"returnParameters":{"id":34046,"nodeType":"ParameterList","parameters":[],"src":"18118:0:87"},"scope":34144,"src":"18014:233:87","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":34063,"nodeType":"Block","src":"18304:55:87","statements":[{"expression":{"id":34061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":34059,"name":"shouldForceHookAdjustedAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32647,"src":"18314:30:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":34060,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"18347:5:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"18314:38:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":34062,"nodeType":"ExpressionStatement","src":"18314:38:87"}]},"functionSelector":"232b59f7","id":34064,"implemented":true,"kind":"function","modifiers":[],"name":"disableForcedHookAdjustedAmounts","nameLocation":"18262:32:87","nodeType":"FunctionDefinition","parameters":{"id":34057,"nodeType":"ParameterList","parameters":[],"src":"18294:2:87"},"returnParameters":{"id":34058,"nodeType":"ParameterList","parameters":[],"src":"18304:0:87"},"scope":34144,"src":"18253:106:87","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":34075,"nodeType":"Block","src":"18413:50:87","statements":[{"expression":{"id":34073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":34069,"name":"_allowedFactories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32706,"src":"18423:17:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":34071,"indexExpression":{"id":34070,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34066,"src":"18441:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"18423:26:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":34072,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"18452:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"18423:33:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":34074,"nodeType":"ExpressionStatement","src":"18423:33:87"}]},"functionSelector":"8f5fae62","id":34076,"implemented":true,"kind":"function","modifiers":[],"name":"allowFactory","nameLocation":"18374:12:87","nodeType":"FunctionDefinition","parameters":{"id":34067,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34066,"mutability":"mutable","name":"factory","nameLocation":"18395:7:87","nodeType":"VariableDeclaration","scope":34076,"src":"18387:15:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34065,"name":"address","nodeType":"ElementaryTypeName","src":"18387:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18386:17:87"},"returnParameters":{"id":34068,"nodeType":"ParameterList","parameters":[],"src":"18413:0:87"},"scope":34144,"src":"18365:98:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":34087,"nodeType":"Block","src":"18516:51:87","statements":[{"expression":{"id":34085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":34081,"name":"_allowedFactories","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32706,"src":"18526:17:87","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":34083,"indexExpression":{"id":34082,"name":"factory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34078,"src":"18544:7:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"18526:26:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":34084,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"18555:5:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"18526:34:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":34086,"nodeType":"ExpressionStatement","src":"18526:34:87"}]},"functionSelector":"dc7776ca","id":34088,"implemented":true,"kind":"function","modifiers":[],"name":"denyFactory","nameLocation":"18478:11:87","nodeType":"FunctionDefinition","parameters":{"id":34079,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34078,"mutability":"mutable","name":"factory","nameLocation":"18498:7:87","nodeType":"VariableDeclaration","scope":34088,"src":"18490:15:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34077,"name":"address","nodeType":"ElementaryTypeName","src":"18490:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18489:17:87"},"returnParameters":{"id":34080,"nodeType":"ParameterList","parameters":[],"src":"18516:0:87"},"scope":34144,"src":"18469:98:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":34097,"nodeType":"Block","src":"18630:48:87","statements":[{"expression":{"id":34095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":34093,"name":"shouldIgnoreSavedSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32700,"src":"18640:23:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":34094,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34090,"src":"18666:5:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"18640:31:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":34096,"nodeType":"ExpressionStatement","src":"18640:31:87"}]},"functionSelector":"68c6db6a","id":34098,"implemented":true,"kind":"function","modifiers":[],"name":"setShouldIgnoreSavedSender","nameLocation":"18582:26:87","nodeType":"FunctionDefinition","parameters":{"id":34091,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34090,"mutability":"mutable","name":"value","nameLocation":"18614:5:87","nodeType":"VariableDeclaration","scope":34098,"src":"18609:10:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":34089,"name":"bool","nodeType":"ElementaryTypeName","src":"18609:4:87","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"18608:12:87"},"returnParameters":{"id":34092,"nodeType":"ParameterList","parameters":[],"src":"18630:0:87"},"scope":34144,"src":"18573:105:87","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":34105,"nodeType":"Block","src":"18742:36:87","statements":[{"expression":{"id":34103,"name":"_savedSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32702,"src":"18759:12:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":34102,"id":34104,"nodeType":"Return","src":"18752:19:87"}]},"functionSelector":"6a9a0611","id":34106,"implemented":true,"kind":"function","modifiers":[],"name":"getSavedSender","nameLocation":"18693:14:87","nodeType":"FunctionDefinition","parameters":{"id":34099,"nodeType":"ParameterList","parameters":[],"src":"18707:2:87"},"returnParameters":{"id":34102,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34101,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34106,"src":"18733:7:87","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34100,"name":"address","nodeType":"ElementaryTypeName","src":"18733:7:87","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18732:9:87"},"scope":34144,"src":"18684:94:87","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":34115,"nodeType":"Block","src":"18995:54:87","statements":[{"expression":{"arguments":[{"id":34112,"name":"_newTokenRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32689,"src":"19028:13:87","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":34109,"name":"_rateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32687,"src":"19005:13:87","typeDescriptions":{"typeIdentifier":"t_contract$_RateProviderMock_$34616","typeString":"contract RateProviderMock"}},"id":34111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19019:8:87","memberName":"mockRate","nodeType":"MemberAccess","referencedDeclaration":34615,"src":"19005:22:87","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$returns$__$","typeString":"function (uint256) external"}},"id":34113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19005:37:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34114,"nodeType":"ExpressionStatement","src":"19005:37:87"}]},"id":34116,"implemented":true,"kind":"function","modifiers":[],"name":"_updateTokenRate","nameLocation":"18968:16:87","nodeType":"FunctionDefinition","parameters":{"id":34107,"nodeType":"ParameterList","parameters":[],"src":"18984:2:87"},"returnParameters":{"id":34108,"nodeType":"ParameterList","parameters":[],"src":"18995:0:87"},"scope":34144,"src":"18959:90:87","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":34142,"nodeType":"Block","src":"19094:288:87","statements":[{"assignments":[34123],"declarations":[{"constant":false,"id":34123,"mutability":"mutable","name":"poolTokens","nameLocation":"19120:10:87","nodeType":"VariableDeclaration","scope":34142,"src":"19104:26:87","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":34121,"nodeType":"UserDefinedTypeName","pathNode":{"id":34120,"name":"IERC20","nameLocations":["19104:6:87"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"19104:6:87"},"referencedDeclaration":40109,"src":"19104:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":34122,"nodeType":"ArrayTypeName","src":"19104:8:87","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"id":34128,"initialValue":{"arguments":[{"id":34126,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32693,"src":"19154:5:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":34124,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"19133:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":34125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19140:13:87","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":4145,"src":"19133:20:87","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":34127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19133:27:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"VariableDeclarationStatement","src":"19104:56:87"},{"expression":{"arguments":[{"id":34136,"name":"_pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32693,"src":"19323:5:87","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":34137,"name":"poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34123,"src":"19330:10:87","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},{"id":34138,"name":"_newBalancesRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32698,"src":"19342:15:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},{"id":34139,"name":"_newBalancesRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32698,"src":"19359:15:87","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"},{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}],"expression":{"arguments":[{"arguments":[{"id":34132,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"19283:6:87","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}],"id":34131,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19275:7:87","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":34130,"name":"address","nodeType":"ElementaryTypeName","src":"19275:7:87","typeDescriptions":{}}},"id":34133,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19275:15:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":34129,"name":"IVaultMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1414,"src":"19264:10:87","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultMock_$1414_$","typeString":"type(contract IVaultMock)"}},"id":34134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19264:27:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVaultMock_$1414","typeString":"contract IVaultMock"}},"id":34135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19292:30:87","memberName":"manualSetPoolTokensAndBalances","nodeType":"MemberAccess","referencedDeclaration":665,"src":"19264:58:87","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (address,contract IERC20[] memory,uint256[] memory,uint256[] memory) external"}},"id":34140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19264:111:87","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34141,"nodeType":"ExpressionStatement","src":"19264:111:87"}]},"id":34143,"implemented":true,"kind":"function","modifiers":[],"name":"_setBalancesInVault","nameLocation":"19064:19:87","nodeType":"FunctionDefinition","parameters":{"id":34117,"nodeType":"ParameterList","parameters":[],"src":"19083:2:87"},"returnParameters":{"id":34118,"nodeType":"ParameterList","parameters":[],"src":"19094:0:87"},"scope":34144,"src":"19055:327:87","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":34145,"src":"903:18481:87","usedErrors":[40469,40474,40477],"usedEvents":[]}],"src":"46:19339:87"},"id":87},"@balancer-labs/v3-vault/contracts/test/PoolMock.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/test/PoolMock.sol","exportedSymbols":{"AddLiquidityKind":[4807],"AddLiquidityParams":[4823],"AfterSwapParams":[4801],"BalancerPoolToken":[11106],"BasePoolAuthentication":[4907],"BufferWrapOrUnwrapParams":[4862],"FEE_BITLENGTH":[4865],"FEE_SCALING_FACTOR":[4868],"FixedPoint":[8208],"HookFlags":[4627],"HooksConfig":[4651],"IBasePool":[1505],"IERC20":[40109],"IERC4626":[39833],"IPoolLiquidity":[2082],"IRateProvider":[263],"IVault":[3111],"LiquidityManagement":[4580],"MAX_FEE_PERCENTAGE":[4871],"PoolConfig":[4605],"PoolConfigBits":[4582],"PoolData":[4729],"PoolInfo":[5418],"PoolMock":[34486],"PoolRoleAccounts":[4677],"PoolSwapParams":[4772],"RemoveLiquidityKind":[4828],"RemoveLiquidityParams":[4844],"Rounding":[4732],"SwapKind":[4735],"SwapState":[4661],"TokenConfig":[4694],"TokenInfo":[4704],"TokenType":[4681],"VaultState":[4669],"VaultSwapParams":[4754],"WrappingDirection":[4847]},"id":34487,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":34146,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:88"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IPoolLiquidity.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IPoolLiquidity.sol","id":34148,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34487,"sourceUnit":2083,"src":"72:97:88","symbolAliases":[{"foreign":{"id":34147,"name":"IPoolLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2082,"src":"81:14:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol","id":34150,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34487,"sourceUnit":1506,"src":"170:87:88","symbolAliases":[{"foreign":{"id":34149,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1505,"src":"179:9:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":34152,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34487,"sourceUnit":3112,"src":"258:81:88","symbolAliases":[{"foreign":{"id":34151,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"267:6:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":34153,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34487,"sourceUnit":4872,"src":"340:69:88","symbolAliases":[],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-pool-utils/contracts/BasePoolAuthentication.sol","file":"@balancer-labs/v3-pool-utils/contracts/BasePoolAuthentication.sol","id":34155,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34487,"sourceUnit":4908,"src":"411:107:88","symbolAliases":[{"foreign":{"id":34154,"name":"BasePoolAuthentication","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4907,"src":"420:22:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol","file":"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol","id":34157,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34487,"sourceUnit":5419,"src":"519:79:88","symbolAliases":[{"foreign":{"id":34156,"name":"PoolInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5418,"src":"528:8:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":34159,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34487,"sourceUnit":8209,"src":"600:92:88","symbolAliases":[{"foreign":{"id":34158,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"609:10:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol","file":"../BalancerPoolToken.sol","id":34161,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34487,"sourceUnit":11107,"src":"694:61:88","symbolAliases":[{"foreign":{"id":34160,"name":"BalancerPoolToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11106,"src":"703:17:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":34162,"name":"IBasePool","nameLocations":["778:9:88"],"nodeType":"IdentifierPath","referencedDeclaration":1505,"src":"778:9:88"},"id":34163,"nodeType":"InheritanceSpecifier","src":"778:9:88"},{"baseName":{"id":34164,"name":"IPoolLiquidity","nameLocations":["789:14:88"],"nodeType":"IdentifierPath","referencedDeclaration":2082,"src":"789:14:88"},"id":34165,"nodeType":"InheritanceSpecifier","src":"789:14:88"},{"baseName":{"id":34166,"name":"BalancerPoolToken","nameLocations":["805:17:88"],"nodeType":"IdentifierPath","referencedDeclaration":11106,"src":"805:17:88"},"id":34167,"nodeType":"InheritanceSpecifier","src":"805:17:88"},{"baseName":{"id":34168,"name":"BasePoolAuthentication","nameLocations":["824:22:88"],"nodeType":"IdentifierPath","referencedDeclaration":4907,"src":"824:22:88"},"id":34169,"nodeType":"InheritanceSpecifier","src":"824:22:88"},{"baseName":{"id":34170,"name":"PoolInfo","nameLocations":["848:8:88"],"nodeType":"IdentifierPath","referencedDeclaration":5418,"src":"848:8:88"},"id":34171,"nodeType":"InheritanceSpecifier","src":"848:8:88"}],"canonicalName":"PoolMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":34486,"linearizedBaseContracts":[34486,5418,54,4907,5786,5498,243,11106,28149,42162,42174,40907,42064,39858,263,40171,40135,40109,2082,1505,3073,3057],"name":"PoolMock","nameLocation":"766:8:88","nodeType":"ContractDefinition","nodes":[{"global":false,"id":34174,"libraryName":{"id":34172,"name":"FixedPoint","nameLocations":["869:10:88"],"nodeType":"IdentifierPath","referencedDeclaration":8208,"src":"869:10:88"},"nodeType":"UsingForDirective","src":"863:29:88","typeName":{"id":34173,"name":"uint256","nodeType":"ElementaryTypeName","src":"884:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"constant":false,"id":34178,"mutability":"mutable","name":"_multiplier","nameLocation":"997:11:88","nodeType":"VariableDeclaration","scope":34486,"src":"981:44:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34175,"name":"uint256","nodeType":"ElementaryTypeName","src":"981:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"expression":{"id":34176,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"1011:10:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$8208_$","typeString":"type(library FixedPoint)"}},"id":34177,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1022:3:88","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":7920,"src":"1011:14:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":34180,"mutability":"mutable","name":"_mockRate","nameLocation":"1167:9:88","nodeType":"VariableDeclaration","scope":34486,"src":"1151:25:88","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34179,"name":"uint256","nodeType":"ElementaryTypeName","src":"1151:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"body":{"id":34203,"nodeType":"Block","src":"1378:56:88","statements":[]},"id":34204,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":34190,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34183,"src":"1299:5:88","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},{"id":34191,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34185,"src":"1306:4:88","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":34192,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34187,"src":"1312:6:88","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":34193,"kind":"baseConstructorSpecifier","modifierName":{"id":34189,"name":"BalancerPoolToken","nameLocations":["1281:17:88"],"nodeType":"IdentifierPath","referencedDeclaration":11106,"src":"1281:17:88"},"nodeType":"ModifierInvocation","src":"1281:38:88"},{"arguments":[{"id":34195,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34183,"src":"1343:5:88","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},{"expression":{"id":34196,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1350:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":34197,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1354:6:88","memberName":"sender","nodeType":"MemberAccess","src":"1350:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":34198,"kind":"baseConstructorSpecifier","modifierName":{"id":34194,"name":"BasePoolAuthentication","nameLocations":["1320:22:88"],"nodeType":"IdentifierPath","referencedDeclaration":4907,"src":"1320:22:88"},"nodeType":"ModifierInvocation","src":"1320:41:88"},{"arguments":[{"id":34200,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34183,"src":"1371:5:88","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"id":34201,"kind":"baseConstructorSpecifier","modifierName":{"id":34199,"name":"PoolInfo","nameLocations":["1362:8:88"],"nodeType":"IdentifierPath","referencedDeclaration":5418,"src":"1362:8:88"},"nodeType":"ModifierInvocation","src":"1362:15:88"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":34188,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34183,"mutability":"mutable","name":"vault","nameLocation":"1211:5:88","nodeType":"VariableDeclaration","scope":34204,"src":"1204:12:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":34182,"nodeType":"UserDefinedTypeName","pathNode":{"id":34181,"name":"IVault","nameLocations":["1204:6:88"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"1204:6:88"},"referencedDeclaration":3111,"src":"1204:6:88","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":34185,"mutability":"mutable","name":"name","nameLocation":"1240:4:88","nodeType":"VariableDeclaration","scope":34204,"src":"1226:18:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":34184,"name":"string","nodeType":"ElementaryTypeName","src":"1226:6:88","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":34187,"mutability":"mutable","name":"symbol","nameLocation":"1268:6:88","nodeType":"VariableDeclaration","scope":34204,"src":"1254:20:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":34186,"name":"string","nodeType":"ElementaryTypeName","src":"1254:6:88","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1194:86:88"},"returnParameters":{"id":34202,"nodeType":"ParameterList","parameters":[],"src":"1378:0:88"},"scope":34486,"src":"1183:251:88","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[1482],"body":{"id":34239,"nodeType":"Block","src":"1533:187:88","statements":[{"assignments":[34216],"declarations":[{"constant":false,"id":34216,"mutability":"mutable","name":"invariant","nameLocation":"1574:9:88","nodeType":"VariableDeclaration","scope":34239,"src":"1566:17:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34215,"name":"uint256","nodeType":"ElementaryTypeName","src":"1566:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34217,"nodeType":"VariableDeclarationStatement","src":"1566:17:88"},{"body":{"id":34235,"nodeType":"Block","src":"1639:49:88","statements":[{"expression":{"id":34233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":34229,"name":"invariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34216,"src":"1653:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"baseExpression":{"id":34230,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34207,"src":"1666:8:88","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":34232,"indexExpression":{"id":34231,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34219,"src":"1675:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1666:11:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1653:24:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34234,"nodeType":"ExpressionStatement","src":"1653:24:88"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34222,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34219,"src":"1613:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":34223,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34207,"src":"1617:8:88","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":34224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1626:6:88","memberName":"length","nodeType":"MemberAccess","src":"1617:15:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1613:19:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":34236,"initializationExpression":{"assignments":[34219],"declarations":[{"constant":false,"id":34219,"mutability":"mutable","name":"i","nameLocation":"1606:1:88","nodeType":"VariableDeclaration","scope":34236,"src":"1598:9:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34218,"name":"uint256","nodeType":"ElementaryTypeName","src":"1598:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34221,"initialValue":{"hexValue":"30","id":34220,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1610:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1598:13:88"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":34227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"1634:3:88","subExpression":{"id":34226,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34219,"src":"1636:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34228,"nodeType":"ExpressionStatement","src":"1634:3:88"},"nodeType":"ForStatement","src":"1593:95:88"},{"expression":{"id":34237,"name":"invariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34216,"src":"1704:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":34214,"id":34238,"nodeType":"Return","src":"1697:16:88"}]},"functionSelector":"984de9e8","id":34240,"implemented":true,"kind":"function","modifiers":[],"name":"computeInvariant","nameLocation":"1449:16:88","nodeType":"FunctionDefinition","parameters":{"id":34211,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34207,"mutability":"mutable","name":"balances","nameLocation":"1483:8:88","nodeType":"VariableDeclaration","scope":34240,"src":"1466:25:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":34205,"name":"uint256","nodeType":"ElementaryTypeName","src":"1466:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34206,"nodeType":"ArrayTypeName","src":"1466:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":34210,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34240,"src":"1493:8:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"},"typeName":{"id":34209,"nodeType":"UserDefinedTypeName","pathNode":{"id":34208,"name":"Rounding","nameLocations":["1493:8:88"],"nodeType":"IdentifierPath","referencedDeclaration":4732,"src":"1493:8:88"},"referencedDeclaration":4732,"src":"1493:8:88","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"visibility":"internal"}],"src":"1465:37:88"},"returnParameters":{"id":34214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34213,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34240,"src":"1524:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34212,"name":"uint256","nodeType":"ElementaryTypeName","src":"1524:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1523:9:88"},"scope":34486,"src":"1440:280:88","stateMutability":"pure","virtual":false,"visibility":"public"},{"baseFunctions":[1495],"body":{"id":34273,"nodeType":"Block","src":"1926:196:88","statements":[{"assignments":[34254],"declarations":[{"constant":false,"id":34254,"mutability":"mutable","name":"invariant","nameLocation":"1967:9:88","nodeType":"VariableDeclaration","scope":34273,"src":"1959:17:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34253,"name":"uint256","nodeType":"ElementaryTypeName","src":"1959:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":34260,"initialValue":{"arguments":[{"id":34256,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34244,"src":"1996:8:88","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":34257,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"2006:8:88","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":34258,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2015:10:88","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":4731,"src":"2006:19:88","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"id":34255,"name":"computeInvariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34240,"src":"1979:16:88","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_enum$_Rounding_$4732_$returns$_t_uint256_$","typeString":"function (uint256[] memory,enum Rounding) pure returns (uint256)"}},"id":34259,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1979:47:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1959:67:88"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34268,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":34261,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34244,"src":"2044:8:88","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":34263,"indexExpression":{"id":34262,"name":"tokenInIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34246,"src":"2053:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2044:22:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[{"id":34266,"name":"invariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34248,"src":"2087:14:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":34264,"name":"invariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34254,"src":"2069:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2079:7:88","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":7953,"src":"2069:17:88","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":34267,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2069:33:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2044:58:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":34269,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2043:60:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":34270,"name":"invariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34254,"src":"2106:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2043:72:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":34252,"id":34272,"nodeType":"Return","src":"2036:79:88"}]},"documentation":{"id":34241,"nodeType":"StructuredDocumentation","src":"1726:25:88","text":"@inheritdoc IBasePool"},"functionSelector":"16a0b3e0","id":34274,"implemented":true,"kind":"function","modifiers":[],"name":"computeBalance","nameLocation":"1765:14:88","nodeType":"FunctionDefinition","parameters":{"id":34249,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34244,"mutability":"mutable","name":"balances","nameLocation":"1806:8:88","nodeType":"VariableDeclaration","scope":34274,"src":"1789:25:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":34242,"name":"uint256","nodeType":"ElementaryTypeName","src":"1789:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34243,"nodeType":"ArrayTypeName","src":"1789:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":34246,"mutability":"mutable","name":"tokenInIndex","nameLocation":"1832:12:88","nodeType":"VariableDeclaration","scope":34274,"src":"1824:20:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34245,"name":"uint256","nodeType":"ElementaryTypeName","src":"1824:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34248,"mutability":"mutable","name":"invariantRatio","nameLocation":"1862:14:88","nodeType":"VariableDeclaration","scope":34274,"src":"1854:22:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34247,"name":"uint256","nodeType":"ElementaryTypeName","src":"1854:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1779:103:88"},"returnParameters":{"id":34252,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34251,"mutability":"mutable","name":"newBalance","nameLocation":"1914:10:88","nodeType":"VariableDeclaration","scope":34274,"src":"1906:18:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34250,"name":"uint256","nodeType":"ElementaryTypeName","src":"1906:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1905:20:88"},"scope":34486,"src":"1756:366:88","stateMutability":"pure","virtual":false,"visibility":"external"},{"body":{"id":34283,"nodeType":"Block","src":"2183:44:88","statements":[{"expression":{"id":34281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":34279,"name":"_multiplier","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34178,"src":"2193:11:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":34280,"name":"newMultiplier","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34276,"src":"2207:13:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2193:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34282,"nodeType":"ExpressionStatement","src":"2193:27:88"}]},"functionSelector":"641579a6","id":34284,"implemented":true,"kind":"function","modifiers":[],"name":"setMultiplier","nameLocation":"2137:13:88","nodeType":"FunctionDefinition","parameters":{"id":34277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34276,"mutability":"mutable","name":"newMultiplier","nameLocation":"2159:13:88","nodeType":"VariableDeclaration","scope":34284,"src":"2151:21:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34275,"name":"uint256","nodeType":"ElementaryTypeName","src":"2151:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2150:23:88"},"returnParameters":{"id":34278,"nodeType":"ParameterList","parameters":[],"src":"2183:0:88"},"scope":34486,"src":"2128:99:88","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1504],"body":{"id":34310,"nodeType":"Block","src":"2339:200:88","statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},"id":34297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":34293,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34287,"src":"2368:6:88","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_calldata_ptr","typeString":"struct PoolSwapParams calldata"}},"id":34294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2375:4:88","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4758,"src":"2368:11:88","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":34295,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"2383:8:88","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4735_$","typeString":"type(enum SwapKind)"}},"id":34296,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2392:8:88","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"2383:17:88","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"src":"2368:32:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"arguments":[{"id":34306,"name":"_multiplier","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34178,"src":"2520:11:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":34303,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34287,"src":"2485:6:88","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_calldata_ptr","typeString":"struct PoolSwapParams calldata"}},"id":34304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2492:19:88","memberName":"amountGivenScaled18","nodeType":"MemberAccess","referencedDeclaration":4760,"src":"2485:26:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2512:7:88","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":7990,"src":"2485:34:88","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":34307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2485:47:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"2368:164:88","trueExpression":{"arguments":[{"id":34301,"name":"_multiplier","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34178,"src":"2454:11:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"expression":{"id":34298,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34287,"src":"2419:6:88","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_calldata_ptr","typeString":"struct PoolSwapParams calldata"}},"id":34299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2426:19:88","memberName":"amountGivenScaled18","nodeType":"MemberAccess","referencedDeclaration":4760,"src":"2419:26:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2446:7:88","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":7953,"src":"2419:34:88","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":34302,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2419:47:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":34292,"id":34309,"nodeType":"Return","src":"2349:183:88"}]},"functionSelector":"72c98186","id":34311,"implemented":true,"kind":"function","modifiers":[],"name":"onSwap","nameLocation":"2242:6:88","nodeType":"FunctionDefinition","overrides":{"id":34289,"nodeType":"OverrideSpecifier","overrides":[],"src":"2295:8:88"},"parameters":{"id":34288,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34287,"mutability":"mutable","name":"params","nameLocation":"2273:6:88","nodeType":"VariableDeclaration","scope":34311,"src":"2249:30:88","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_calldata_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":34286,"nodeType":"UserDefinedTypeName","pathNode":{"id":34285,"name":"PoolSwapParams","nameLocations":["2249:14:88"],"nodeType":"IdentifierPath","referencedDeclaration":4772,"src":"2249:14:88"},"referencedDeclaration":4772,"src":"2249:14:88","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"src":"2248:32:88"},"returnParameters":{"id":34292,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34291,"mutability":"mutable","name":"amountCalculated","nameLocation":"2321:16:88","nodeType":"VariableDeclaration","scope":34311,"src":"2313:24:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34290,"name":"uint256","nodeType":"ElementaryTypeName","src":"2313:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2312:26:88"},"scope":34486,"src":"2233:306:88","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[2055],"body":{"id":34348,"nodeType":"Block","src":"2826:117:88","statements":[{"expression":{"components":[{"id":34337,"name":"maxAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34316,"src":"2844:20:88","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":34338,"name":"minBptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34318,"src":"2866:15:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":34342,"name":"maxAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34316,"src":"2897:20:88","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":34343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2918:6:88","memberName":"length","nodeType":"MemberAccess","src":"2897:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":34341,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2883:13:88","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":34339,"name":"uint256","nodeType":"ElementaryTypeName","src":"2887:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34340,"nodeType":"ArrayTypeName","src":"2887:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":34344,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2883:42:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":34345,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34323,"src":"2927:8:88","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":34346,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2843:93:88","typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256,uint256[] memory,bytes memory)"}},"functionReturnParameters":34336,"id":34347,"nodeType":"Return","src":"2836:100:88"}]},"functionSelector":"e4c43663","id":34349,"implemented":true,"kind":"function","modifiers":[],"name":"onAddLiquidityCustom","nameLocation":"2554:20:88","nodeType":"FunctionDefinition","overrides":{"id":34325,"nodeType":"OverrideSpecifier","overrides":[],"src":"2749:8:88"},"parameters":{"id":34324,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34313,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34349,"src":"2584:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34312,"name":"address","nodeType":"ElementaryTypeName","src":"2584:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34316,"mutability":"mutable","name":"maxAmountsInScaled18","nameLocation":"2618:20:88","nodeType":"VariableDeclaration","scope":34349,"src":"2601:37:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":34314,"name":"uint256","nodeType":"ElementaryTypeName","src":"2601:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34315,"nodeType":"ArrayTypeName","src":"2601:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":34318,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"2656:15:88","nodeType":"VariableDeclaration","scope":34349,"src":"2648:23:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34317,"name":"uint256","nodeType":"ElementaryTypeName","src":"2648:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34321,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34349,"src":"2681:16:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":34319,"name":"uint256","nodeType":"ElementaryTypeName","src":"2681:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34320,"nodeType":"ArrayTypeName","src":"2681:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":34323,"mutability":"mutable","name":"userData","nameLocation":"2720:8:88","nodeType":"VariableDeclaration","scope":34349,"src":"2707:21:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":34322,"name":"bytes","nodeType":"ElementaryTypeName","src":"2707:5:88","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2574:160:88"},"returnParameters":{"id":34336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34328,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34349,"src":"2767:16:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":34326,"name":"uint256","nodeType":"ElementaryTypeName","src":"2767:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34327,"nodeType":"ArrayTypeName","src":"2767:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":34330,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34349,"src":"2785:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34329,"name":"uint256","nodeType":"ElementaryTypeName","src":"2785:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34333,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34349,"src":"2794:16:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":34331,"name":"uint256","nodeType":"ElementaryTypeName","src":"2794:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34332,"nodeType":"ArrayTypeName","src":"2794:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":34335,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34349,"src":"2812:12:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":34334,"name":"bytes","nodeType":"ElementaryTypeName","src":"2812:5:88","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2766:59:88"},"scope":34486,"src":"2545:398:88","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[2081],"body":{"id":34386,"nodeType":"Block","src":"3225:102:88","statements":[{"expression":{"components":[{"id":34375,"name":"maxBptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34353,"src":"3243:14:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":34376,"name":"minAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34356,"src":"3259:13:88","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"arguments":[{"expression":{"id":34380,"name":"minAmountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34356,"src":"3288:13:88","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":34381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3302:6:88","memberName":"length","nodeType":"MemberAccess","src":"3288:20:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":34379,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"3274:13:88","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":34377,"name":"uint256","nodeType":"ElementaryTypeName","src":"3278:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34378,"nodeType":"ArrayTypeName","src":"3278:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":34382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3274:35:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":34383,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34361,"src":"3311:8:88","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":34384,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3242:78:88","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory,uint256[] memory,bytes memory)"}},"functionReturnParameters":34374,"id":34385,"nodeType":"Return","src":"3235:85:88"}]},"functionSelector":"ab68e28c","id":34387,"implemented":true,"kind":"function","modifiers":[],"name":"onRemoveLiquidityCustom","nameLocation":"2958:23:88","nodeType":"FunctionDefinition","overrides":{"id":34363,"nodeType":"OverrideSpecifier","overrides":[],"src":"3148:8:88"},"parameters":{"id":34362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34351,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34387,"src":"2991:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34350,"name":"address","nodeType":"ElementaryTypeName","src":"2991:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34353,"mutability":"mutable","name":"maxBptAmountIn","nameLocation":"3016:14:88","nodeType":"VariableDeclaration","scope":34387,"src":"3008:22:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34352,"name":"uint256","nodeType":"ElementaryTypeName","src":"3008:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34356,"mutability":"mutable","name":"minAmountsOut","nameLocation":"3057:13:88","nodeType":"VariableDeclaration","scope":34387,"src":"3040:30:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":34354,"name":"uint256","nodeType":"ElementaryTypeName","src":"3040:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34355,"nodeType":"ArrayTypeName","src":"3040:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":34359,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34387,"src":"3080:16:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":34357,"name":"uint256","nodeType":"ElementaryTypeName","src":"3080:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34358,"nodeType":"ArrayTypeName","src":"3080:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":34361,"mutability":"mutable","name":"userData","nameLocation":"3119:8:88","nodeType":"VariableDeclaration","scope":34387,"src":"3106:21:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":34360,"name":"bytes","nodeType":"ElementaryTypeName","src":"3106:5:88","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2981:152:88"},"returnParameters":{"id":34374,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34365,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34387,"src":"3166:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34364,"name":"uint256","nodeType":"ElementaryTypeName","src":"3166:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34368,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34387,"src":"3175:16:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":34366,"name":"uint256","nodeType":"ElementaryTypeName","src":"3175:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34367,"nodeType":"ArrayTypeName","src":"3175:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":34371,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34387,"src":"3193:16:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":34369,"name":"uint256","nodeType":"ElementaryTypeName","src":"3193:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34370,"nodeType":"ArrayTypeName","src":"3193:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":34373,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34387,"src":"3211:12:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":34372,"name":"bytes","nodeType":"ElementaryTypeName","src":"3211:5:88","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3165:59:88"},"scope":34486,"src":"2949:378:88","stateMutability":"pure","virtual":false,"visibility":"external"},{"body":{"id":34402,"nodeType":"Block","src":"3388:78:88","statements":[{"expression":{"arguments":[{"hexValue":"546573744576656e74","id":34395,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3424:11:88","typeDescriptions":{"typeIdentifier":"t_stringliteral_e8f134cb39cbc51b2dd43af32059dcd508e608e59c8050a30ca3bdd623bd84c5","typeString":"literal_string \"TestEvent\""},"value":"TestEvent"},{"arguments":[{"id":34398,"name":"testValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34389,"src":"3448:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":34396,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3437:3:88","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":34397,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3441:6:88","memberName":"encode","nodeType":"MemberAccess","src":"3437:10:88","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":34399,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3437:21:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_e8f134cb39cbc51b2dd43af32059dcd508e608e59c8050a30ca3bdd623bd84c5","typeString":"literal_string \"TestEvent\""},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":34392,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"3398:6:88","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":34394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3405:18:88","memberName":"emitAuxiliaryEvent","nodeType":"MemberAccess","referencedDeclaration":4418,"src":"3398:25:88","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes32,bytes memory) external"}},"id":34400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3398:61:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34401,"nodeType":"ExpressionStatement","src":"3398:61:88"}]},"functionSelector":"b0e2e403","id":34403,"implemented":true,"kind":"function","modifiers":[],"name":"mockEventFunction","nameLocation":"3342:17:88","nodeType":"FunctionDefinition","parameters":{"id":34390,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34389,"mutability":"mutable","name":"testValue","nameLocation":"3368:9:88","nodeType":"VariableDeclaration","scope":34403,"src":"3360:17:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34388,"name":"uint256","nodeType":"ElementaryTypeName","src":"3360:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3359:19:88"},"returnParameters":{"id":34391,"nodeType":"ParameterList","parameters":[],"src":"3388:0:88"},"scope":34486,"src":"3333:133:88","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":34421,"nodeType":"Block","src":"3652:77:88","statements":[{"expression":{"id":34419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":34410,"name":"scalingFactors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34408,"src":"3663:14:88","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},null],"id":34411,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"3662:18:88","typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$__$","typeString":"tuple(uint256[] memory,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":34416,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3716:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_PoolMock_$34486","typeString":"contract PoolMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PoolMock_$34486","typeString":"contract PoolMock"}],"id":34415,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3708:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":34414,"name":"address","nodeType":"ElementaryTypeName","src":"3708:7:88","typeDescriptions":{}}},"id":34417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3708:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":34412,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"3683:6:88","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":34413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3690:17:88","memberName":"getPoolTokenRates","nodeType":"MemberAccess","referencedDeclaration":4157,"src":"3683:24:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) view external returns (uint256[] memory,uint256[] memory)"}},"id":34418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3683:39:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256[] memory)"}},"src":"3662:60:88","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34420,"nodeType":"ExpressionStatement","src":"3662:60:88"}]},"documentation":{"id":34404,"nodeType":"StructuredDocumentation","src":"3472:83:88","text":"@dev Even though pools do not handle scaling, we still need this for the tests."},"functionSelector":"360c340f","id":34422,"implemented":true,"kind":"function","modifiers":[],"name":"getDecimalScalingFactors","nameLocation":"3569:24:88","nodeType":"FunctionDefinition","parameters":{"id":34405,"nodeType":"ParameterList","parameters":[],"src":"3593:2:88"},"returnParameters":{"id":34409,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34408,"mutability":"mutable","name":"scalingFactors","nameLocation":"3636:14:88","nodeType":"VariableDeclaration","scope":34422,"src":"3619:31:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":34406,"name":"uint256","nodeType":"ElementaryTypeName","src":"3619:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34407,"nodeType":"ArrayTypeName","src":"3619:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"3618:33:88"},"scope":34486,"src":"3560:169:88","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[3050],"body":{"id":34430,"nodeType":"Block","src":"3815:25:88","statements":[{"expression":{"hexValue":"30","id":34428,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3832:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":34427,"id":34429,"nodeType":"Return","src":"3825:8:88"}]},"functionSelector":"ce20ece7","id":34431,"implemented":true,"kind":"function","modifiers":[],"name":"getMinimumSwapFeePercentage","nameLocation":"3744:27:88","nodeType":"FunctionDefinition","overrides":{"id":34424,"nodeType":"OverrideSpecifier","overrides":[],"src":"3788:8:88"},"parameters":{"id":34423,"nodeType":"ParameterList","parameters":[],"src":"3771:2:88"},"returnParameters":{"id":34427,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34426,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34431,"src":"3806:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34425,"name":"uint256","nodeType":"ElementaryTypeName","src":"3806:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3805:9:88"},"scope":34486,"src":"3735:105:88","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[3056],"body":{"id":34440,"nodeType":"Block","src":"3926:38:88","statements":[{"expression":{"expression":{"id":34437,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"3943:10:88","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$8208_$","typeString":"type(library FixedPoint)"}},"id":34438,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3954:3:88","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":7920,"src":"3943:14:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":34436,"id":34439,"nodeType":"Return","src":"3936:21:88"}]},"functionSelector":"654cf15d","id":34441,"implemented":true,"kind":"function","modifiers":[],"name":"getMaximumSwapFeePercentage","nameLocation":"3855:27:88","nodeType":"FunctionDefinition","overrides":{"id":34433,"nodeType":"OverrideSpecifier","overrides":[],"src":"3899:8:88"},"parameters":{"id":34432,"nodeType":"ParameterList","parameters":[],"src":"3882:2:88"},"returnParameters":{"id":34436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34435,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34441,"src":"3917:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34434,"name":"uint256","nodeType":"ElementaryTypeName","src":"3917:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3916:9:88"},"scope":34486,"src":"3846:118:88","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[3066],"body":{"id":34449,"nodeType":"Block","src":"4055:25:88","statements":[{"expression":{"hexValue":"30","id":34447,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4072:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":34446,"id":34448,"nodeType":"Return","src":"4065:8:88"}]},"functionSelector":"b677fa56","id":34450,"implemented":true,"kind":"function","modifiers":[],"name":"getMinimumInvariantRatio","nameLocation":"3979:24:88","nodeType":"FunctionDefinition","overrides":{"id":34443,"nodeType":"OverrideSpecifier","overrides":[],"src":"4028:8:88"},"parameters":{"id":34442,"nodeType":"ParameterList","parameters":[],"src":"4003:2:88"},"returnParameters":{"id":34446,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34445,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34450,"src":"4046:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34444,"name":"uint256","nodeType":"ElementaryTypeName","src":"4046:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4045:9:88"},"scope":34486,"src":"3970:110:88","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[3072],"body":{"id":34458,"nodeType":"Block","src":"4171:77:88","statements":[{"expression":{"hexValue":"31653430","id":34456,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4188:4:88","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(33 digits omitted)...0000"},"value":"1e40"},"functionReturnParameters":34455,"id":34457,"nodeType":"Return","src":"4181:11:88"}]},"functionSelector":"273c1adf","id":34459,"implemented":true,"kind":"function","modifiers":[],"name":"getMaximumInvariantRatio","nameLocation":"4095:24:88","nodeType":"FunctionDefinition","overrides":{"id":34452,"nodeType":"OverrideSpecifier","overrides":[],"src":"4144:8:88"},"parameters":{"id":34451,"nodeType":"ParameterList","parameters":[],"src":"4119:2:88"},"returnParameters":{"id":34455,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34454,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34459,"src":"4162:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34453,"name":"uint256","nodeType":"ElementaryTypeName","src":"4162:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4161:9:88"},"scope":34486,"src":"4086:162:88","stateMutability":"view","virtual":true,"visibility":"external"},{"body":{"id":34468,"nodeType":"Block","src":"4302:37:88","statements":[{"expression":{"id":34466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":34464,"name":"_mockRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34180,"src":"4312:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":34465,"name":"mockRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34461,"src":"4324:8:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4312:20:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34467,"nodeType":"ExpressionStatement","src":"4312:20:88"}]},"functionSelector":"4cfe8d1a","id":34469,"implemented":true,"kind":"function","modifiers":[],"name":"setMockRate","nameLocation":"4263:11:88","nodeType":"FunctionDefinition","parameters":{"id":34462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34461,"mutability":"mutable","name":"mockRate","nameLocation":"4283:8:88","nodeType":"VariableDeclaration","scope":34469,"src":"4275:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34460,"name":"uint256","nodeType":"ElementaryTypeName","src":"4275:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4274:18:88"},"returnParameters":{"id":34463,"nodeType":"ParameterList","parameters":[],"src":"4302:0:88"},"scope":34486,"src":"4254:85:88","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[11105],"body":{"id":34484,"nodeType":"Block","src":"4403:68:88","statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":34477,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":34475,"name":"_mockRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34180,"src":"4420:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":34476,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4433:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4420:14:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":34481,"name":"_mockRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34180,"src":"4455:9:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"4420:44:88","trueExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":34478,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"4437:5:88","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_PoolMock_$34486_$","typeString":"type(contract super PoolMock)"}},"id":34479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4443:7:88","memberName":"getRate","nodeType":"MemberAccess","referencedDeclaration":11105,"src":"4437:13:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":34480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4437:15:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":34474,"id":34483,"nodeType":"Return","src":"4413:51:88"}]},"functionSelector":"679aefce","id":34485,"implemented":true,"kind":"function","modifiers":[],"name":"getRate","nameLocation":"4354:7:88","nodeType":"FunctionDefinition","overrides":{"id":34471,"nodeType":"OverrideSpecifier","overrides":[],"src":"4376:8:88"},"parameters":{"id":34470,"nodeType":"ParameterList","parameters":[],"src":"4361:2:88"},"returnParameters":{"id":34474,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34473,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34485,"src":"4394:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34472,"name":"uint256","nodeType":"ElementaryTypeName","src":"4394:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4393:9:88"},"scope":34486,"src":"4345:126:88","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":34487,"src":"757:3716:88","usedErrors":[234,3640,10742,10749,40849,40921,40923,41500,41505,41510],"usedEvents":[39838,40043,40052]}],"src":"46:4428:88"},"id":88},"@balancer-labs/v3-vault/contracts/test/ProtocolFeeControllerMock.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/test/ProtocolFeeControllerMock.sol","exportedSymbols":{"IERC20":[40109],"IVaultMock":[1414],"ProtocolFeeController":[16325],"ProtocolFeeControllerMock":[34576]},"id":34577,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":34488,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:89"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":34490,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34577,"sourceUnit":40110,"src":"72:72:89","symbolAliases":[{"foreign":{"id":34489,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"81:6:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/test/IVaultMock.sol","file":"@balancer-labs/v3-interfaces/contracts/test/IVaultMock.sol","id":34492,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34577,"sourceUnit":1415,"src":"146:88:89","symbolAliases":[{"foreign":{"id":34491,"name":"IVaultMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1414,"src":"155:10:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol","file":"../ProtocolFeeController.sol","id":34494,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34577,"sourceUnit":16326,"src":"236:69:89","symbolAliases":[{"foreign":{"id":34493,"name":"ProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":16325,"src":"245:21:89","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":34495,"name":"ProtocolFeeController","nameLocations":["345:21:89"],"nodeType":"IdentifierPath","referencedDeclaration":16325,"src":"345:21:89"},"id":34496,"nodeType":"InheritanceSpecifier","src":"345:21:89"}],"canonicalName":"ProtocolFeeControllerMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":34576,"linearizedBaseContracts":[34576,16325,28149,9942,19387,5786,5498,243,2420],"name":"ProtocolFeeControllerMock","nameLocation":"316:25:89","nodeType":"ContractDefinition","nodes":[{"body":{"id":34505,"nodeType":"Block","src":"434:64:89","statements":[]},"id":34506,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":34502,"name":"vault_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34499,"src":"426:6:89","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultMock_$1414","typeString":"contract IVaultMock"}}],"id":34503,"kind":"baseConstructorSpecifier","modifierName":{"id":34501,"name":"ProtocolFeeController","nameLocations":["404:21:89"],"nodeType":"IdentifierPath","referencedDeclaration":16325,"src":"404:21:89"},"nodeType":"ModifierInvocation","src":"404:29:89"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":34500,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34499,"mutability":"mutable","name":"vault_","nameLocation":"396:6:89","nodeType":"VariableDeclaration","scope":34506,"src":"385:17:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultMock_$1414","typeString":"contract IVaultMock"},"typeName":{"id":34498,"nodeType":"UserDefinedTypeName","pathNode":{"id":34497,"name":"IVaultMock","nameLocations":["385:10:89"],"nodeType":"IdentifierPath","referencedDeclaration":1414,"src":"385:10:89"},"referencedDeclaration":1414,"src":"385:10:89","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultMock_$1414","typeString":"contract IVaultMock"}},"visibility":"internal"}],"src":"384:19:89"},"returnParameters":{"id":34504,"nodeType":"ParameterList","parameters":[],"src":"434:0:89"},"scope":34576,"src":"373:125:89","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":34521,"nodeType":"Block","src":"615:52:89","statements":[{"expression":{"arguments":[{"id":34518,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34508,"src":"655:4:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":34517,"name":"_getPoolTokensAndCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15590,"src":"632:22:89","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address) view returns (contract IERC20[] memory,uint256)"}},"id":34519,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"632:28:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(contract IERC20[] memory,uint256)"}},"functionReturnParameters":34516,"id":34520,"nodeType":"Return","src":"625:35:89"}]},"functionSelector":"f29aaa58","id":34522,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolTokensAndCount","nameLocation":"513:21:89","nodeType":"FunctionDefinition","parameters":{"id":34509,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34508,"mutability":"mutable","name":"pool","nameLocation":"543:4:89","nodeType":"VariableDeclaration","scope":34522,"src":"535:12:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34507,"name":"address","nodeType":"ElementaryTypeName","src":"535:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"534:14:89"},"returnParameters":{"id":34516,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34513,"mutability":"mutable","name":"tokens","nameLocation":"588:6:89","nodeType":"VariableDeclaration","scope":34522,"src":"572:22:89","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":34511,"nodeType":"UserDefinedTypeName","pathNode":{"id":34510,"name":"IERC20","nameLocations":["572:6:89"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"572:6:89"},"referencedDeclaration":40109,"src":"572:6:89","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":34512,"nodeType":"ArrayTypeName","src":"572:8:89","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":34515,"mutability":"mutable","name":"numTokens","nameLocation":"604:9:89","nodeType":"VariableDeclaration","scope":34522,"src":"596:17:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34514,"name":"uint256","nodeType":"ElementaryTypeName","src":"596:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"571:43:89"},"scope":34576,"src":"504:163:89","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":34544,"nodeType":"Block","src":"842:124:89","statements":[{"expression":{"components":[{"arguments":[{"id":34534,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34524,"src":"876:4:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":34533,"name":"_getPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15609,"src":"860:15:89","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_address_$","typeString":"function (address) view returns (address)"}},"id":34535,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"860:21:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":34536,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14746,"src":"883:30:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":34538,"indexExpression":{"id":34537,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34524,"src":"914:4:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"883:36:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":34539,"name":"_poolCreatorYieldFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14750,"src":"921:31:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":34541,"indexExpression":{"id":34540,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34524,"src":"953:4:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"921:37:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":34542,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"859:100:89","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$_t_uint256_$","typeString":"tuple(address,uint256,uint256)"}},"functionReturnParameters":34532,"id":34543,"nodeType":"Return","src":"852:107:89"}]},"functionSelector":"aa9fea87","id":34545,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolCreatorInfo","nameLocation":"682:18:89","nodeType":"FunctionDefinition","parameters":{"id":34525,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34524,"mutability":"mutable","name":"pool","nameLocation":"718:4:89","nodeType":"VariableDeclaration","scope":34545,"src":"710:12:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34523,"name":"address","nodeType":"ElementaryTypeName","src":"710:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"700:28:89"},"returnParameters":{"id":34532,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34527,"mutability":"mutable","name":"poolCreator","nameLocation":"760:11:89","nodeType":"VariableDeclaration","scope":34545,"src":"752:19:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34526,"name":"address","nodeType":"ElementaryTypeName","src":"752:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34529,"mutability":"mutable","name":"creatorSwapFeePercentage","nameLocation":"781:24:89","nodeType":"VariableDeclaration","scope":34545,"src":"773:32:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34528,"name":"uint256","nodeType":"ElementaryTypeName","src":"773:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34531,"mutability":"mutable","name":"creatorYieldFeePercentage","nameLocation":"815:25:89","nodeType":"VariableDeclaration","scope":34545,"src":"807:33:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34530,"name":"uint256","nodeType":"ElementaryTypeName","src":"807:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"751:90:89"},"scope":34576,"src":"673:293:89","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":34574,"nodeType":"Block","src":"1155:256:89","statements":[{"expression":{"id":34557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":34553,"name":"_poolCreatorSwapFeePercentages","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14746,"src":"1165:30:89","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":34555,"indexExpression":{"id":34554,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34548,"src":"1196:4:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1165:36:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":34556,"name":"poolCreatorSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34550,"src":"1204:28:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1165:67:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34558,"nodeType":"ExpressionStatement","src":"1165:67:89"},{"expression":{"arguments":[{"id":34566,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34548,"src":"1322:4:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":34568,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34548,"src":"1367:4:89","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":34569,"name":"ProtocolFeeType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":14709,"src":"1373:15:89","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_ProtocolFeeType_$14709_$","typeString":"type(enum ProtocolFeeController.ProtocolFeeType)"}},"id":34570,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1389:4:89","memberName":"SWAP","nodeType":"MemberAccess","referencedDeclaration":14707,"src":"1373:20:89","typeDescriptions":{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_ProtocolFeeType_$14709","typeString":"enum ProtocolFeeController.ProtocolFeeType"}],"id":34567,"name":"_getAggregateFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":15500,"src":"1340:26:89","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_enum$_ProtocolFeeType_$14709_$returns$_t_uint256_$","typeString":"function (address,enum ProtocolFeeController.ProtocolFeeType) view returns (uint256)"}},"id":34571,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1340:54:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"arguments":[{"id":34562,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"1261:6:89","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}],"id":34561,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1253:7:89","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":34560,"name":"address","nodeType":"ElementaryTypeName","src":"1253:7:89","typeDescriptions":{}}},"id":34563,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1253:15:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":34559,"name":"IVaultMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1414,"src":"1242:10:89","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultMock_$1414_$","typeString":"type(contract IVaultMock)"}},"id":34564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1242:27:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVaultMock_$1414","typeString":"contract IVaultMock"}},"id":34565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1270:38:89","memberName":"manualUpdateAggregateSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":1305,"src":"1242:66:89","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":34572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1242:162:89","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34573,"nodeType":"ExpressionStatement","src":"1242:162:89"}]},"documentation":{"id":34546,"nodeType":"StructuredDocumentation","src":"972:70:89","text":"@dev Set pool creator swap fee percentage without any constraints."},"functionSelector":"b8abccd1","id":34575,"implemented":true,"kind":"function","modifiers":[],"name":"manualSetPoolCreatorSwapFeePercentage","nameLocation":"1056:37:89","nodeType":"FunctionDefinition","parameters":{"id":34551,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34548,"mutability":"mutable","name":"pool","nameLocation":"1102:4:89","nodeType":"VariableDeclaration","scope":34575,"src":"1094:12:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34547,"name":"address","nodeType":"ElementaryTypeName","src":"1094:7:89","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34550,"mutability":"mutable","name":"poolCreatorSwapFeePercentage","nameLocation":"1116:28:89","nodeType":"VariableDeclaration","scope":34575,"src":"1108:36:89","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34549,"name":"uint256","nodeType":"ElementaryTypeName","src":"1108:7:89","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1093:52:89"},"returnParameters":{"id":34552,"nodeType":"ParameterList","parameters":[],"src":"1155:0:89"},"scope":34576,"src":"1047:364:89","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":34577,"src":"307:1106:89","usedErrors":[234,2201,2204,2209,2216,2219,3616,3640,7917,9886,14769,14772,40188,40469,40474,40477,43238],"usedEvents":[2094,2099,2106,2113,2120,2127,2137,2147,2159,2171,2180,2189,2198]}],"src":"46:1368:89"},"id":89},"@balancer-labs/v3-vault/contracts/test/RateProviderMock.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/test/RateProviderMock.sol","exportedSymbols":{"FixedPoint":[8208],"IRateProvider":[263],"RateProviderMock":[34616]},"id":34617,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":34578,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:90"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","id":34580,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34617,"sourceUnit":264,"src":"72:112:90","symbolAliases":[{"foreign":{"id":34579,"name":"IRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":263,"src":"81:13:90","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":34582,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":34617,"sourceUnit":8209,"src":"186:92:90","symbolAliases":[{"foreign":{"id":34581,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"195:10:90","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":34583,"name":"IRateProvider","nameLocations":["309:13:90"],"nodeType":"IdentifierPath","referencedDeclaration":263,"src":"309:13:90"},"id":34584,"nodeType":"InheritanceSpecifier","src":"309:13:90"}],"canonicalName":"RateProviderMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":34616,"linearizedBaseContracts":[34616,263],"name":"RateProviderMock","nameLocation":"289:16:90","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":34586,"mutability":"mutable","name":"_rate","nameLocation":"346:5:90","nodeType":"VariableDeclaration","scope":34616,"src":"329:22:90","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34585,"name":"uint256","nodeType":"ElementaryTypeName","src":"329:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"body":{"id":34594,"nodeType":"Block","src":"372:39:90","statements":[{"expression":{"id":34592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":34589,"name":"_rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34586,"src":"382:5:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":34590,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"390:10:90","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$8208_$","typeString":"type(library FixedPoint)"}},"id":34591,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"401:3:90","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":7920,"src":"390:14:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"382:22:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34593,"nodeType":"ExpressionStatement","src":"382:22:90"}]},"id":34595,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":34587,"nodeType":"ParameterList","parameters":[],"src":"369:2:90"},"returnParameters":{"id":34588,"nodeType":"ParameterList","parameters":[],"src":"372:0:90"},"scope":34616,"src":"358:53:90","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[262],"body":{"id":34604,"nodeType":"Block","src":"511:29:90","statements":[{"expression":{"id":34602,"name":"_rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34586,"src":"528:5:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":34601,"id":34603,"nodeType":"Return","src":"521:12:90"}]},"documentation":{"id":34596,"nodeType":"StructuredDocumentation","src":"417:29:90","text":"@inheritdoc IRateProvider"},"functionSelector":"679aefce","id":34605,"implemented":true,"kind":"function","modifiers":[],"name":"getRate","nameLocation":"460:7:90","nodeType":"FunctionDefinition","overrides":{"id":34598,"nodeType":"OverrideSpecifier","overrides":[],"src":"484:8:90"},"parameters":{"id":34597,"nodeType":"ParameterList","parameters":[],"src":"467:2:90"},"returnParameters":{"id":34601,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34600,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34605,"src":"502:7:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34599,"name":"uint256","nodeType":"ElementaryTypeName","src":"502:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"501:9:90"},"scope":34616,"src":"451:89:90","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":34614,"nodeType":"Block","src":"590:32:90","statements":[{"expression":{"id":34612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":34610,"name":"_rate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34586,"src":"600:5:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":34611,"name":"newRate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34607,"src":"608:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"600:15:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34613,"nodeType":"ExpressionStatement","src":"600:15:90"}]},"functionSelector":"a1cfa041","id":34615,"implemented":true,"kind":"function","modifiers":[],"name":"mockRate","nameLocation":"555:8:90","nodeType":"FunctionDefinition","parameters":{"id":34608,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34607,"mutability":"mutable","name":"newRate","nameLocation":"572:7:90","nodeType":"VariableDeclaration","scope":34615,"src":"564:15:90","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34606,"name":"uint256","nodeType":"ElementaryTypeName","src":"564:7:90","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"563:17:90"},"returnParameters":{"id":34609,"nodeType":"ParameterList","parameters":[],"src":"590:0:90"},"scope":34616,"src":"546:76:90","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":34617,"src":"280:344:90","usedErrors":[],"usedEvents":[]}],"src":"46:579:90"},"id":90},"@balancer-labs/v3-vault/contracts/test/RouterMock.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/test/RouterMock.sol","exportedSymbols":{"AddLiquidityKind":[4807],"AddLiquidityParams":[4823],"AfterSwapParams":[4801],"BufferWrapOrUnwrapParams":[4862],"FEE_BITLENGTH":[4865],"FEE_SCALING_FACTOR":[4868],"HookFlags":[4627],"HooksConfig":[4651],"IERC20":[40109],"IERC4626":[39833],"IPermit2":[48578],"IRateProvider":[263],"IRouter":[2917],"IVault":[3111],"IWETH":[291],"LiquidityManagement":[4580],"MAX_FEE_PERCENTAGE":[4871],"MOCK_ROUTER_VERSION":[34642],"PoolConfig":[4605],"PoolConfigBits":[4582],"PoolData":[4729],"PoolRoleAccounts":[4677],"PoolSwapParams":[4772],"RemoveLiquidityKind":[4828],"RemoveLiquidityParams":[4844],"RevertCodec":[6434],"Rounding":[4732],"Router":[18510],"RouterMock":[35375],"SafeCast":[44983],"SwapKind":[4735],"SwapState":[4661],"TokenConfig":[4694],"TokenInfo":[4704],"TokenType":[4681],"VaultState":[4669],"VaultSwapParams":[4754],"WrappingDirection":[4847]},"id":35376,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":34618,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:91"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":34620,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35376,"sourceUnit":39834,"src":"72:75:91","symbolAliases":[{"foreign":{"id":34619,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39833,"src":"81:8:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","file":"@openzeppelin/contracts/utils/math/SafeCast.sol","id":34622,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35376,"sourceUnit":44984,"src":"148:75:91","symbolAliases":[{"foreign":{"id":34621,"name":"SafeCast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44983,"src":"157:8:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":34624,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35376,"sourceUnit":40110,"src":"224:72:91","symbolAliases":[{"foreign":{"id":34623,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"233:6:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"permit2/src/interfaces/IPermit2.sol","file":"permit2/src/interfaces/IPermit2.sol","id":34626,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35376,"sourceUnit":48579,"src":"297:63:91","symbolAliases":[{"foreign":{"id":34625,"name":"IPermit2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48578,"src":"306:8:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol","id":34628,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35376,"sourceUnit":292,"src":"362:93:91","symbolAliases":[{"foreign":{"id":34627,"name":"IWETH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":291,"src":"371:5:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":34630,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35376,"sourceUnit":4872,"src":"456:87:91","symbolAliases":[{"foreign":{"id":34629,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"465:8:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol","id":34632,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35376,"sourceUnit":2918,"src":"544:83:91","symbolAliases":[{"foreign":{"id":34631,"name":"IRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2917,"src":"553:7:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":34634,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35376,"sourceUnit":3112,"src":"628:81:91","symbolAliases":[{"foreign":{"id":34633,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"637:6:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":34635,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35376,"sourceUnit":4872,"src":"710:69:91","symbolAliases":[],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol","id":34637,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35376,"sourceUnit":6435,"src":"781:97:91","symbolAliases":[{"foreign":{"id":34636,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6434,"src":"790:11:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/Router.sol","file":"../Router.sol","id":34639,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35376,"sourceUnit":18511,"src":"880:39:91","symbolAliases":[{"foreign":{"id":34638,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"889:6:91","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"constant":true,"id":34642,"mutability":"constant","name":"MOCK_ROUTER_VERSION","nameLocation":"937:19:91","nodeType":"VariableDeclaration","scope":35376,"src":"921:54:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":34640,"name":"string","nodeType":"ElementaryTypeName","src":"921:6:91","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"value":{"hexValue":"4d6f636b20526f75746572207631","id":34641,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"959:16:91","typeDescriptions":{"typeIdentifier":"t_stringliteral_750944b6d19ac3b936d3601e57fe38302b01d85b9ac34ad5425c49b78664201a","typeString":"literal_string \"Mock Router v1\""},"value":"Mock Router v1"},"visibility":"internal"},{"abstract":false,"baseContracts":[{"baseName":{"id":34643,"name":"Router","nameLocations":["1001:6:91"],"nodeType":"IdentifierPath","referencedDeclaration":18510,"src":"1001:6:91"},"id":34644,"nodeType":"InheritanceSpecifier","src":"1001:6:91"}],"canonicalName":"RouterMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":35375,"linearizedBaseContracts":[35375,18510,19198,7482,273,9942,28149,19328,3041,3025,2917],"name":"RouterMock","nameLocation":"987:10:91","nodeType":"ContractDefinition","nodes":[{"global":false,"id":34646,"libraryName":{"id":34645,"name":"SafeCast","nameLocations":["1020:8:91"],"nodeType":"IdentifierPath","referencedDeclaration":44983,"src":"1020:8:91"},"nodeType":"UsingForDirective","src":"1014:21:91"},{"errorSelector":"f5ab33e5","id":34648,"name":"MockErrorCode","nameLocation":"1047:13:91","nodeType":"ErrorDefinition","parameters":{"id":34647,"nodeType":"ParameterList","parameters":[],"src":"1060:2:91"},"src":"1041:22:91"},{"body":{"id":34666,"nodeType":"Block","src":"1175:64:91","statements":[]},"id":34667,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":34660,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34651,"src":"1132:5:91","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},{"id":34661,"name":"weth","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34654,"src":"1139:4:91","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},{"id":34662,"name":"permit2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34657,"src":"1145:7:91","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"}},{"id":34663,"name":"MOCK_ROUTER_VERSION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34642,"src":"1154:19:91","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":34664,"kind":"baseConstructorSpecifier","modifierName":{"id":34659,"name":"Router","nameLocations":["1125:6:91"],"nodeType":"IdentifierPath","referencedDeclaration":18510,"src":"1125:6:91"},"nodeType":"ModifierInvocation","src":"1125:49:91"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":34658,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34651,"mutability":"mutable","name":"vault","nameLocation":"1088:5:91","nodeType":"VariableDeclaration","scope":34667,"src":"1081:12:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":34650,"nodeType":"UserDefinedTypeName","pathNode":{"id":34649,"name":"IVault","nameLocations":["1081:6:91"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"1081:6:91"},"referencedDeclaration":3111,"src":"1081:6:91","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":34654,"mutability":"mutable","name":"weth","nameLocation":"1101:4:91","nodeType":"VariableDeclaration","scope":34667,"src":"1095:10:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"},"typeName":{"id":34653,"nodeType":"UserDefinedTypeName","pathNode":{"id":34652,"name":"IWETH","nameLocations":["1095:5:91"],"nodeType":"IdentifierPath","referencedDeclaration":291,"src":"1095:5:91"},"referencedDeclaration":291,"src":"1095:5:91","typeDescriptions":{"typeIdentifier":"t_contract$_IWETH_$291","typeString":"contract IWETH"}},"visibility":"internal"},{"constant":false,"id":34657,"mutability":"mutable","name":"permit2","nameLocation":"1116:7:91","nodeType":"VariableDeclaration","scope":34667,"src":"1107:16:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"},"typeName":{"id":34656,"nodeType":"UserDefinedTypeName","pathNode":{"id":34655,"name":"IPermit2","nameLocations":["1107:8:91"],"nodeType":"IdentifierPath","referencedDeclaration":48578,"src":"1107:8:91"},"referencedDeclaration":48578,"src":"1107:8:91","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"}},"visibility":"internal"}],"src":"1080:44:91"},"returnParameters":{"id":34665,"nodeType":"ParameterList","parameters":[],"src":"1175:0:91"},"scope":35375,"src":"1069:170:91","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":34688,"nodeType":"Block","src":"1309:121:91","statements":[{"assignments":[34676],"declarations":[{"constant":false,"id":34676,"mutability":"mutable","name":"hookParams","nameLocation":"1355:10:91","nodeType":"VariableDeclaration","scope":34688,"src":"1319:46:91","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeHookParams_$2450_memory_ptr","typeString":"struct IRouter.InitializeHookParams"},"typeName":{"id":34675,"nodeType":"UserDefinedTypeName","pathNode":{"id":34674,"name":"IRouter.InitializeHookParams","nameLocations":["1319:7:91","1327:20:91"],"nodeType":"IdentifierPath","referencedDeclaration":2450,"src":"1319:28:91"},"referencedDeclaration":2450,"src":"1319:28:91","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeHookParams_$2450_storage_ptr","typeString":"struct IRouter.InitializeHookParams"}},"visibility":"internal"}],"id":34677,"nodeType":"VariableDeclarationStatement","src":"1319:46:91"},{"expression":{"arguments":[{"id":34685,"name":"hookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34676,"src":"1412:10:91","typeDescriptions":{"typeIdentifier":"t_struct$_InitializeHookParams_$2450_memory_ptr","typeString":"struct IRouter.InitializeHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_InitializeHookParams_$2450_memory_ptr","typeString":"struct IRouter.InitializeHookParams memory"}],"expression":{"arguments":[{"arguments":[{"id":34681,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1390:4:91","typeDescriptions":{"typeIdentifier":"t_contract$_RouterMock_$35375","typeString":"contract RouterMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_RouterMock_$35375","typeString":"contract RouterMock"}],"id":34680,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1382:8:91","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":34679,"name":"address","nodeType":"ElementaryTypeName","src":"1382:8:91","stateMutability":"payable","typeDescriptions":{}}},"id":34682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1382:13:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":34678,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"1375:6:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":34683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1375:21:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Router_$18510","typeString":"contract Router"}},"id":34684,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1397:14:91","memberName":"initializeHook","nodeType":"MemberAccess","referencedDeclaration":16553,"src":"1375:36:91","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_InitializeHookParams_$2450_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct IRouter.InitializeHookParams memory) external returns (uint256)"}},"id":34686,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1375:48:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34687,"nodeType":"ExpressionStatement","src":"1375:48:91"}]},"functionSelector":"4b59d17c","id":34689,"implemented":true,"kind":"function","modifiers":[{"id":34670,"kind":"modifierInvocation","modifierName":{"id":34669,"name":"nonReentrant","nameLocations":["1296:12:91"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"1296:12:91"},"nodeType":"ModifierInvocation","src":"1296:12:91"}],"name":"manualReentrancyInitializeHook","nameLocation":"1254:30:91","nodeType":"FunctionDefinition","parameters":{"id":34668,"nodeType":"ParameterList","parameters":[],"src":"1284:2:91"},"returnParameters":{"id":34671,"nodeType":"ParameterList","parameters":[],"src":"1309:0:91"},"scope":35375,"src":"1245:185:91","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":34708,"nodeType":"Block","src":"1502:109:91","statements":[{"assignments":[34696],"declarations":[{"constant":false,"id":34696,"mutability":"mutable","name":"params","nameLocation":"1542:6:91","nodeType":"VariableDeclaration","scope":34708,"src":"1512:36:91","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_memory_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams"},"typeName":{"id":34695,"nodeType":"UserDefinedTypeName","pathNode":{"id":34694,"name":"AddLiquidityHookParams","nameLocations":["1512:22:91"],"nodeType":"IdentifierPath","referencedDeclaration":2947,"src":"1512:22:91"},"referencedDeclaration":2947,"src":"1512:22:91","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_storage_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams"}},"visibility":"internal"}],"id":34697,"nodeType":"VariableDeclarationStatement","src":"1512:36:91"},{"expression":{"arguments":[{"id":34705,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34696,"src":"1597:6:91","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_memory_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddLiquidityHookParams_$2947_memory_ptr","typeString":"struct IRouterCommon.AddLiquidityHookParams memory"}],"expression":{"arguments":[{"arguments":[{"id":34701,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1573:4:91","typeDescriptions":{"typeIdentifier":"t_contract$_RouterMock_$35375","typeString":"contract RouterMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_RouterMock_$35375","typeString":"contract RouterMock"}],"id":34700,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1565:8:91","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":34699,"name":"address","nodeType":"ElementaryTypeName","src":"1565:8:91","stateMutability":"payable","typeDescriptions":{}}},"id":34702,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1565:13:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":34698,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"1558:6:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":34703,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1558:21:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Router_$18510","typeString":"contract Router"}},"id":34704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1580:16:91","memberName":"addLiquidityHook","nodeType":"MemberAccess","referencedDeclaration":16977,"src":"1558:38:91","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_AddLiquidityHookParams_$2947_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"function (struct IRouterCommon.AddLiquidityHookParams memory) external returns (uint256[] memory,uint256,bytes memory)"}},"id":34706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1558:46:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256,bytes memory)"}},"id":34707,"nodeType":"ExpressionStatement","src":"1558:46:91"}]},"functionSelector":"0c3b846f","id":34709,"implemented":true,"kind":"function","modifiers":[{"id":34692,"kind":"modifierInvocation","modifierName":{"id":34691,"name":"nonReentrant","nameLocations":["1489:12:91"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"1489:12:91"},"nodeType":"ModifierInvocation","src":"1489:12:91"}],"name":"manualReentrancyAddLiquidityHook","nameLocation":"1445:32:91","nodeType":"FunctionDefinition","parameters":{"id":34690,"nodeType":"ParameterList","parameters":[],"src":"1477:2:91"},"returnParameters":{"id":34693,"nodeType":"ParameterList","parameters":[],"src":"1502:0:91"},"scope":35375,"src":"1436:175:91","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":34728,"nodeType":"Block","src":"1686:115:91","statements":[{"assignments":[34716],"declarations":[{"constant":false,"id":34716,"mutability":"mutable","name":"params","nameLocation":"1729:6:91","nodeType":"VariableDeclaration","scope":34728,"src":"1696:39:91","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_memory_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams"},"typeName":{"id":34715,"nodeType":"UserDefinedTypeName","pathNode":{"id":34714,"name":"RemoveLiquidityHookParams","nameLocations":["1696:25:91"],"nodeType":"IdentifierPath","referencedDeclaration":2965,"src":"1696:25:91"},"referencedDeclaration":2965,"src":"1696:25:91","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_storage_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams"}},"visibility":"internal"}],"id":34717,"nodeType":"VariableDeclarationStatement","src":"1696:39:91"},{"expression":{"arguments":[{"id":34725,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34716,"src":"1787:6:91","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_memory_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RemoveLiquidityHookParams_$2965_memory_ptr","typeString":"struct IRouterCommon.RemoveLiquidityHookParams memory"}],"expression":{"arguments":[{"arguments":[{"id":34721,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1760:4:91","typeDescriptions":{"typeIdentifier":"t_contract$_RouterMock_$35375","typeString":"contract RouterMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_RouterMock_$35375","typeString":"contract RouterMock"}],"id":34720,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1752:8:91","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":34719,"name":"address","nodeType":"ElementaryTypeName","src":"1752:8:91","stateMutability":"payable","typeDescriptions":{}}},"id":34722,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1752:13:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":34718,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"1745:6:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":34723,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1745:21:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Router_$18510","typeString":"contract Router"}},"id":34724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1767:19:91","memberName":"removeLiquidityHook","nodeType":"MemberAccess","referencedDeclaration":17402,"src":"1745:41:91","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_RemoveLiquidityHookParams_$2965_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function (struct IRouterCommon.RemoveLiquidityHookParams memory) external returns (uint256,uint256[] memory,bytes memory)"}},"id":34726,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1745:49:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory,bytes memory)"}},"id":34727,"nodeType":"ExpressionStatement","src":"1745:49:91"}]},"functionSelector":"ad6d59f3","id":34729,"implemented":true,"kind":"function","modifiers":[{"id":34712,"kind":"modifierInvocation","modifierName":{"id":34711,"name":"nonReentrant","nameLocations":["1673:12:91"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"1673:12:91"},"nodeType":"ModifierInvocation","src":"1673:12:91"}],"name":"manualReentrancyRemoveLiquidityHook","nameLocation":"1626:35:91","nodeType":"FunctionDefinition","parameters":{"id":34710,"nodeType":"ParameterList","parameters":[],"src":"1661:2:91"},"returnParameters":{"id":34713,"nodeType":"ParameterList","parameters":[],"src":"1686:0:91"},"scope":35375,"src":"1617:184:91","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":34757,"nodeType":"Block","src":"1884:111:91","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":34743,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1952:1:91","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":34742,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1944:7:91","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":34741,"name":"address","nodeType":"ElementaryTypeName","src":"1944:7:91","typeDescriptions":{}}},"id":34744,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1944:10:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":34747,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1964:1:91","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":34746,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1956:7:91","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":34745,"name":"address","nodeType":"ElementaryTypeName","src":"1956:7:91","typeDescriptions":{}}},"id":34748,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1956:10:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":34749,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1968:1:91","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"arguments":[{"hexValue":"32","id":34753,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1985:1:91","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"}],"id":34752,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1971:13:91","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":34750,"name":"uint256","nodeType":"ElementaryTypeName","src":"1975:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34751,"nodeType":"ArrayTypeName","src":"1975:9:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":34754,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1971:16:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"expression":{"arguments":[{"arguments":[{"id":34737,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1909:4:91","typeDescriptions":{"typeIdentifier":"t_contract$_RouterMock_$35375","typeString":"contract RouterMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_RouterMock_$35375","typeString":"contract RouterMock"}],"id":34736,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1901:8:91","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":34735,"name":"address","nodeType":"ElementaryTypeName","src":"1901:8:91","stateMutability":"payable","typeDescriptions":{}}},"id":34738,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1901:13:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":34734,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"1894:6:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":34739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1894:21:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Router_$18510","typeString":"contract Router"}},"id":34740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1916:27:91","memberName":"removeLiquidityRecoveryHook","nodeType":"MemberAccess","referencedDeclaration":17481,"src":"1894:49:91","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address,address,uint256,uint256[] memory) external returns (uint256[] memory)"}},"id":34755,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1894:94:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":34756,"nodeType":"ExpressionStatement","src":"1894:94:91"}]},"functionSelector":"beb91feb","id":34758,"implemented":true,"kind":"function","modifiers":[{"id":34732,"kind":"modifierInvocation","modifierName":{"id":34731,"name":"nonReentrant","nameLocations":["1871:12:91"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"1871:12:91"},"nodeType":"ModifierInvocation","src":"1871:12:91"}],"name":"manualReentrancyRemoveLiquidityRecoveryHook","nameLocation":"1816:43:91","nodeType":"FunctionDefinition","parameters":{"id":34730,"nodeType":"ParameterList","parameters":[],"src":"1859:2:91"},"returnParameters":{"id":34733,"nodeType":"ParameterList","parameters":[],"src":"1884:0:91"},"scope":35375,"src":"1807:188:91","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":34779,"nodeType":"Block","src":"2070:123:91","statements":[{"assignments":[34767],"declarations":[{"constant":false,"id":34767,"mutability":"mutable","name":"params","nameLocation":"2121:6:91","nodeType":"VariableDeclaration","scope":34779,"src":"2080:47:91","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_memory_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams"},"typeName":{"id":34766,"nodeType":"UserDefinedTypeName","pathNode":{"id":34765,"name":"IRouter.SwapSingleTokenHookParams","nameLocations":["2080:7:91","2088:25:91"],"nodeType":"IdentifierPath","referencedDeclaration":2677,"src":"2080:33:91"},"referencedDeclaration":2677,"src":"2080:33:91","typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_storage_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams"}},"visibility":"internal"}],"id":34768,"nodeType":"VariableDeclarationStatement","src":"2080:47:91"},{"expression":{"arguments":[{"id":34776,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34767,"src":"2179:6:91","typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_memory_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_memory_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams memory"}],"expression":{"arguments":[{"arguments":[{"id":34772,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2152:4:91","typeDescriptions":{"typeIdentifier":"t_contract$_RouterMock_$35375","typeString":"contract RouterMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_RouterMock_$35375","typeString":"contract RouterMock"}],"id":34771,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2144:8:91","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":34770,"name":"address","nodeType":"ElementaryTypeName","src":"2144:8:91","stateMutability":"payable","typeDescriptions":{}}},"id":34773,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2144:13:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":34769,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"2137:6:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":34774,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2137:21:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Router_$18510","typeString":"contract Router"}},"id":34775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2159:19:91","memberName":"swapSingleTokenHook","nodeType":"MemberAccess","referencedDeclaration":17658,"src":"2137:41:91","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_SwapSingleTokenHookParams_$2677_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct IRouter.SwapSingleTokenHookParams memory) external returns (uint256)"}},"id":34777,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2137:49:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34778,"nodeType":"ExpressionStatement","src":"2137:49:91"}]},"functionSelector":"c3ec0efc","id":34780,"implemented":true,"kind":"function","modifiers":[{"id":34761,"kind":"modifierInvocation","modifierName":{"id":34760,"name":"nonReentrant","nameLocations":["2057:12:91"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"2057:12:91"},"nodeType":"ModifierInvocation","src":"2057:12:91"}],"name":"manualReentrancySwapSingleTokenHook","nameLocation":"2010:35:91","nodeType":"FunctionDefinition","parameters":{"id":34759,"nodeType":"ParameterList","parameters":[],"src":"2045:2:91"},"returnParameters":{"id":34762,"nodeType":"ParameterList","parameters":[],"src":"2070:0:91"},"scope":35375,"src":"2001:192:91","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":34801,"nodeType":"Block","src":"2262:117:91","statements":[{"assignments":[34789],"declarations":[{"constant":false,"id":34789,"mutability":"mutable","name":"params","nameLocation":"2313:6:91","nodeType":"VariableDeclaration","scope":34801,"src":"2272:47:91","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_memory_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams"},"typeName":{"id":34788,"nodeType":"UserDefinedTypeName","pathNode":{"id":34787,"name":"IRouter.SwapSingleTokenHookParams","nameLocations":["2272:7:91","2280:25:91"],"nodeType":"IdentifierPath","referencedDeclaration":2677,"src":"2272:33:91"},"referencedDeclaration":2677,"src":"2272:33:91","typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_storage_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams"}},"visibility":"internal"}],"id":34790,"nodeType":"VariableDeclarationStatement","src":"2272:47:91"},{"expression":{"arguments":[{"id":34798,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34789,"src":"2365:6:91","typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_memory_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_memory_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams memory"}],"expression":{"arguments":[{"arguments":[{"id":34794,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2344:4:91","typeDescriptions":{"typeIdentifier":"t_contract$_RouterMock_$35375","typeString":"contract RouterMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_RouterMock_$35375","typeString":"contract RouterMock"}],"id":34793,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2336:8:91","typeDescriptions":{"typeIdentifier":"t_type$_t_address_payable_$","typeString":"type(address payable)"},"typeName":{"id":34792,"name":"address","nodeType":"ElementaryTypeName","src":"2336:8:91","stateMutability":"payable","typeDescriptions":{}}},"id":34795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2336:13:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address_payable","typeString":"address payable"}],"id":34791,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"2329:6:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":34796,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2329:21:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Router_$18510","typeString":"contract Router"}},"id":34797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2351:13:91","memberName":"querySwapHook","nodeType":"MemberAccess","referencedDeclaration":18509,"src":"2329:35:91","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_SwapSingleTokenHookParams_$2677_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct IRouter.SwapSingleTokenHookParams memory) external returns (uint256)"}},"id":34799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2329:43:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34800,"nodeType":"ExpressionStatement","src":"2329:43:91"}]},"functionSelector":"64c90707","id":34802,"implemented":true,"kind":"function","modifiers":[{"id":34783,"kind":"modifierInvocation","modifierName":{"id":34782,"name":"nonReentrant","nameLocations":["2249:12:91"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"2249:12:91"},"nodeType":"ModifierInvocation","src":"2249:12:91"}],"name":"manualReentrancyQuerySwapHook","nameLocation":"2208:29:91","nodeType":"FunctionDefinition","parameters":{"id":34781,"nodeType":"ParameterList","parameters":[],"src":"2237:2:91"},"returnParameters":{"id":34784,"nodeType":"ParameterList","parameters":[],"src":"2262:0:91"},"scope":35375,"src":"2199:180:91","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":34823,"nodeType":"Block","src":"2580:83:91","statements":[{"expression":{"arguments":[{"id":34818,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34804,"src":"2631:4:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":34819,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34807,"src":"2637:5:91","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":34820,"name":"amountGiven","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34809,"src":"2644:11:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":34817,"name":"_getSingleInputArrayAndTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19026,"src":"2597:33:91","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_contract$_IERC20_$40109_$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$","typeString":"function (address,contract IERC20,uint256) view returns (uint256[] memory,uint256)"}},"id":34821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2597:59:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$","typeString":"tuple(uint256[] memory,uint256)"}},"functionReturnParameters":34816,"id":34822,"nodeType":"Return","src":"2590:66:91"}]},"functionSelector":"e178073e","id":34824,"implemented":true,"kind":"function","modifiers":[],"name":"getSingleInputArrayAndTokenIndex","nameLocation":"2394:32:91","nodeType":"FunctionDefinition","parameters":{"id":34810,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34804,"mutability":"mutable","name":"pool","nameLocation":"2444:4:91","nodeType":"VariableDeclaration","scope":34824,"src":"2436:12:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34803,"name":"address","nodeType":"ElementaryTypeName","src":"2436:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34807,"mutability":"mutable","name":"token","nameLocation":"2465:5:91","nodeType":"VariableDeclaration","scope":34824,"src":"2458:12:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":34806,"nodeType":"UserDefinedTypeName","pathNode":{"id":34805,"name":"IERC20","nameLocations":["2458:6:91"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"2458:6:91"},"referencedDeclaration":40109,"src":"2458:6:91","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":34809,"mutability":"mutable","name":"amountGiven","nameLocation":"2488:11:91","nodeType":"VariableDeclaration","scope":34824,"src":"2480:19:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34808,"name":"uint256","nodeType":"ElementaryTypeName","src":"2480:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2426:79:91"},"returnParameters":{"id":34816,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34813,"mutability":"mutable","name":"amountsGiven","nameLocation":"2546:12:91","nodeType":"VariableDeclaration","scope":34824,"src":"2529:29:91","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":34811,"name":"uint256","nodeType":"ElementaryTypeName","src":"2529:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":34812,"nodeType":"ArrayTypeName","src":"2529:9:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":34815,"mutability":"mutable","name":"tokenIndex","nameLocation":"2568:10:91","nodeType":"VariableDeclaration","scope":34824,"src":"2560:18:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34814,"name":"uint256","nodeType":"ElementaryTypeName","src":"2560:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2528:51:91"},"scope":35375,"src":"2385:278:91","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":34886,"nodeType":"Block","src":"2900:848:91","statements":[{"clauses":[{"block":{"id":34867,"nodeType":"Block","src":"3567:53:91","statements":[{"expression":{"arguments":[{"hexValue":"556e65787065637465642073756363657373","id":34864,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3588:20:91","typeDescriptions":{"typeIdentifier":"t_stringliteral_52cc6744a1218fb09c6a53a5e53dd9c5152cf7440797e8ce2d6c7d521e9d14d5","typeString":"literal_string \"Unexpected success\""},"value":"Unexpected success"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_52cc6744a1218fb09c6a53a5e53dd9c5152cf7440797e8ce2d6c7d521e9d14d5","typeString":"literal_string \"Unexpected success\""}],"id":34863,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"3581:6:91","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":34865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3581:28:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34866,"nodeType":"ExpressionStatement","src":"3581:28:91"}]},"errorName":"","id":34868,"nodeType":"TryCatchClause","src":"3567:53:91"},{"block":{"id":34883,"nodeType":"Block","src":"3649:93:91","statements":[{"expression":{"arguments":[{"arguments":[{"id":34876,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34870,"src":"3712:6:91","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":34874,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6434,"src":"3681:11:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$6434_$","typeString":"type(library RevertCodec)"}},"id":34875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3693:18:91","memberName":"catchEncodedResult","nodeType":"MemberAccess","referencedDeclaration":6396,"src":"3681:30:91","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) pure returns (bytes memory)"}},"id":34877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3681:38:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":34879,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3722:7:91","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":34878,"name":"uint256","nodeType":"ElementaryTypeName","src":"3722:7:91","typeDescriptions":{}}}],"id":34880,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"3721:9:91","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":34872,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3670:3:91","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":34873,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3674:6:91","memberName":"decode","nodeType":"MemberAccess","src":"3670:10:91","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":34881,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3670:61:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":34840,"id":34882,"nodeType":"Return","src":"3663:68:91"}]},"errorName":"","id":34884,"nodeType":"TryCatchClause","parameters":{"id":34871,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34870,"mutability":"mutable","name":"result","nameLocation":"3641:6:91","nodeType":"VariableDeclaration","scope":34884,"src":"3628:19:91","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":34869,"name":"bytes","nodeType":"ElementaryTypeName","src":"3628:5:91","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3627:21:91"},"src":"3621:121:91"}],"externalCall":{"arguments":[{"arguments":[{"expression":{"id":34845,"name":"Router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18510,"src":"3001:6:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Router_$18510_$","typeString":"type(contract Router)"}},"id":34846,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3008:13:91","memberName":"querySwapHook","nodeType":"MemberAccess","referencedDeclaration":18509,"src":"3001:20:91","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr_$returns$_t_uint256_$","typeString":"function Router.querySwapHook(struct IRouter.SwapSingleTokenHookParams calldata) returns (uint256)"}},{"arguments":[{"expression":{"id":34848,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3103:3:91","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":34849,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3107:6:91","memberName":"sender","nodeType":"MemberAccess","src":"3103:10:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":34850,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"3145:8:91","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4735_$","typeString":"type(enum SwapKind)"}},"id":34851,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3154:8:91","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"3145:17:91","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},{"id":34852,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34826,"src":"3194:4:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":34853,"name":"tokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34829,"src":"3233:7:91","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":34854,"name":"tokenOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34832,"src":"3276:8:91","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":34855,"name":"exactAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34834,"src":"3323:13:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"30","id":34856,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3369:1:91","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":34857,"name":"_MAX_AMOUNT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19232,"src":"3406:11:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":34858,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3454:5:91","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":34859,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34836,"src":"3495:8:91","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":34847,"name":"SwapSingleTokenHookParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2677,"src":"3043:25:91","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_SwapSingleTokenHookParams_$2677_storage_ptr_$","typeString":"type(struct IRouter.SwapSingleTokenHookParams storage pointer)"}},"id":34860,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["3095:6:91","3139:4:91","3188:4:91","3224:7:91","3266:8:91","3310:11:91","3362:5:91","3396:8:91","3443:9:91","3485:8:91"],"names":["sender","kind","pool","tokenIn","tokenOut","amountGiven","limit","deadline","wethIsEth","userData"],"nodeType":"FunctionCall","src":"3043:483:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_memory_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_SwapSingleTokenHookParams_$2677_calldata_ptr_$returns$_t_uint256_$","typeString":"function Router.querySwapHook(struct IRouter.SwapSingleTokenHookParams calldata) returns (uint256)"},{"typeIdentifier":"t_struct$_SwapSingleTokenHookParams_$2677_memory_ptr","typeString":"struct IRouter.SwapSingleTokenHookParams memory"}],"expression":{"id":34843,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2965:3:91","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":34844,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2969:10:91","memberName":"encodeCall","nodeType":"MemberAccess","src":"2965:14:91","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":34861,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2965:579:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":34841,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"2926:6:91","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":34842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2933:14:91","memberName":"quoteAndRevert","nodeType":"MemberAccess","referencedDeclaration":4398,"src":"2926:21:91","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) external"}},"id":34862,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2926:632:91","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34885,"nodeType":"TryStatement","src":"2910:832:91"}]},"functionSelector":"b29a62a7","id":34887,"implemented":true,"kind":"function","modifiers":[],"name":"querySwapSingleTokenExactInAndRevert","nameLocation":"2678:36:91","nodeType":"FunctionDefinition","parameters":{"id":34837,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34826,"mutability":"mutable","name":"pool","nameLocation":"2732:4:91","nodeType":"VariableDeclaration","scope":34887,"src":"2724:12:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34825,"name":"address","nodeType":"ElementaryTypeName","src":"2724:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":34829,"mutability":"mutable","name":"tokenIn","nameLocation":"2753:7:91","nodeType":"VariableDeclaration","scope":34887,"src":"2746:14:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":34828,"nodeType":"UserDefinedTypeName","pathNode":{"id":34827,"name":"IERC20","nameLocations":["2746:6:91"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"2746:6:91"},"referencedDeclaration":40109,"src":"2746:6:91","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":34832,"mutability":"mutable","name":"tokenOut","nameLocation":"2777:8:91","nodeType":"VariableDeclaration","scope":34887,"src":"2770:15:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":34831,"nodeType":"UserDefinedTypeName","pathNode":{"id":34830,"name":"IERC20","nameLocations":["2770:6:91"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"2770:6:91"},"referencedDeclaration":40109,"src":"2770:6:91","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":34834,"mutability":"mutable","name":"exactAmountIn","nameLocation":"2803:13:91","nodeType":"VariableDeclaration","scope":34887,"src":"2795:21:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34833,"name":"uint256","nodeType":"ElementaryTypeName","src":"2795:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":34836,"mutability":"mutable","name":"userData","nameLocation":"2841:8:91","nodeType":"VariableDeclaration","scope":34887,"src":"2826:23:91","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":34835,"name":"bytes","nodeType":"ElementaryTypeName","src":"2826:5:91","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2714:141:91"},"returnParameters":{"id":34840,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34839,"mutability":"mutable","name":"amountCalculated","nameLocation":"2882:16:91","nodeType":"VariableDeclaration","scope":34887,"src":"2874:24:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34838,"name":"uint256","nodeType":"ElementaryTypeName","src":"2874:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2873:26:91"},"scope":35375,"src":"2669:1079:91","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":34924,"nodeType":"Block","src":"3803:277:91","statements":[{"clauses":[{"block":{"id":34905,"nodeType":"Block","src":"3899:53:91","statements":[{"expression":{"arguments":[{"hexValue":"556e65787065637465642073756363657373","id":34902,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3920:20:91","typeDescriptions":{"typeIdentifier":"t_stringliteral_52cc6744a1218fb09c6a53a5e53dd9c5152cf7440797e8ce2d6c7d521e9d14d5","typeString":"literal_string \"Unexpected success\""},"value":"Unexpected success"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_52cc6744a1218fb09c6a53a5e53dd9c5152cf7440797e8ce2d6c7d521e9d14d5","typeString":"literal_string \"Unexpected success\""}],"id":34901,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"3913:6:91","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":34903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3913:28:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34904,"nodeType":"ExpressionStatement","src":"3913:28:91"}]},"errorName":"","id":34906,"nodeType":"TryCatchClause","src":"3899:53:91"},{"block":{"id":34921,"nodeType":"Block","src":"3981:93:91","statements":[{"expression":{"arguments":[{"arguments":[{"id":34914,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34908,"src":"4044:6:91","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":34912,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6434,"src":"4013:11:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$6434_$","typeString":"type(library RevertCodec)"}},"id":34913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4025:18:91","memberName":"catchEncodedResult","nodeType":"MemberAccess","referencedDeclaration":6396,"src":"4013:30:91","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) pure returns (bytes memory)"}},"id":34915,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4013:38:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":34917,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4054:7:91","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":34916,"name":"uint256","nodeType":"ElementaryTypeName","src":"4054:7:91","typeDescriptions":{}}}],"id":34918,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"4053:9:91","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":34910,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4002:3:91","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":34911,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4006:6:91","memberName":"decode","nodeType":"MemberAccess","src":"4002:10:91","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":34919,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4002:61:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":34891,"id":34920,"nodeType":"Return","src":"3995:68:91"}]},"errorName":"","id":34922,"nodeType":"TryCatchClause","parameters":{"id":34909,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34908,"mutability":"mutable","name":"result","nameLocation":"3973:6:91","nodeType":"VariableDeclaration","scope":34922,"src":"3960:19:91","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":34907,"name":"bytes","nodeType":"ElementaryTypeName","src":"3960:5:91","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3959:21:91"},"src":"3953:121:91"}],"externalCall":{"arguments":[{"arguments":[{"expression":{"expression":{"id":34896,"name":"RouterMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35375,"src":"3862:10:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RouterMock_$35375_$","typeString":"type(contract RouterMock)"}},"id":34897,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3873:14:91","memberName":"querySpoofHook","nodeType":"MemberAccess","referencedDeclaration":34941,"src":"3862:25:91","typeDescriptions":{"typeIdentifier":"t_function_declaration_pure$__$returns$__$","typeString":"function RouterMock.querySpoofHook() pure"}},"id":34898,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3888:8:91","memberName":"selector","nodeType":"MemberAccess","src":"3862:34:91","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":34894,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3839:3:91","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":34895,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3843:18:91","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"3839:22:91","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":34899,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3839:58:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":34892,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"3817:6:91","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":34893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3824:14:91","memberName":"quoteAndRevert","nodeType":"MemberAccess","referencedDeclaration":4398,"src":"3817:21:91","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) external"}},"id":34900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3817:81:91","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34923,"nodeType":"TryStatement","src":"3813:261:91"}]},"functionSelector":"4aeecca9","id":34925,"implemented":true,"kind":"function","modifiers":[],"name":"querySpoof","nameLocation":"3763:10:91","nodeType":"FunctionDefinition","parameters":{"id":34888,"nodeType":"ParameterList","parameters":[],"src":"3773:2:91"},"returnParameters":{"id":34891,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34890,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34925,"src":"3794:7:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34889,"name":"uint256","nodeType":"ElementaryTypeName","src":"3794:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3793:9:91"},"scope":35375,"src":"3754:326:91","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":34940,"nodeType":"Block","src":"4126:69:91","statements":[{"errorCall":{"arguments":[{"arguments":[{"arguments":[{"hexValue":"31323334","id":34935,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4181:4:91","typeDescriptions":{"typeIdentifier":"t_rational_1234_by_1","typeString":"int_const 1234"},"value":"1234"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1234_by_1","typeString":"int_const 1234"}],"id":34934,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4173:7:91","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":34933,"name":"uint256","nodeType":"ElementaryTypeName","src":"4173:7:91","typeDescriptions":{}}},"id":34936,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4173:13:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":34931,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4162:3:91","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":34932,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4166:6:91","memberName":"encode","nodeType":"MemberAccess","src":"4162:10:91","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":34937,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4162:25:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":34928,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6434,"src":"4143:11:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$6434_$","typeString":"type(library RevertCodec)"}},"id":34930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4155:6:91","memberName":"Result","nodeType":"MemberAccess","referencedDeclaration":6352,"src":"4143:18:91","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_bytes_memory_ptr_$returns$_t_error_$","typeString":"function (bytes memory) pure returns (error)"}},"id":34938,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4143:45:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":34939,"nodeType":"RevertStatement","src":"4136:52:91"}]},"functionSelector":"58307e44","id":34941,"implemented":true,"kind":"function","modifiers":[],"name":"querySpoofHook","nameLocation":"4095:14:91","nodeType":"FunctionDefinition","parameters":{"id":34926,"nodeType":"ParameterList","parameters":[],"src":"4109:2:91"},"returnParameters":{"id":34927,"nodeType":"ParameterList","parameters":[],"src":"4126:0:91"},"scope":35375,"src":"4086:109:91","stateMutability":"pure","virtual":false,"visibility":"external"},{"body":{"id":34978,"nodeType":"Block","src":"4260:287:91","statements":[{"clauses":[{"block":{"id":34959,"nodeType":"Block","src":"4366:53:91","statements":[{"expression":{"arguments":[{"hexValue":"556e65787065637465642073756363657373","id":34956,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4387:20:91","typeDescriptions":{"typeIdentifier":"t_stringliteral_52cc6744a1218fb09c6a53a5e53dd9c5152cf7440797e8ce2d6c7d521e9d14d5","typeString":"literal_string \"Unexpected success\""},"value":"Unexpected success"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_52cc6744a1218fb09c6a53a5e53dd9c5152cf7440797e8ce2d6c7d521e9d14d5","typeString":"literal_string \"Unexpected success\""}],"id":34955,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"4380:6:91","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":34957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4380:28:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34958,"nodeType":"ExpressionStatement","src":"4380:28:91"}]},"errorName":"","id":34960,"nodeType":"TryCatchClause","src":"4366:53:91"},{"block":{"id":34975,"nodeType":"Block","src":"4448:93:91","statements":[{"expression":{"arguments":[{"arguments":[{"id":34968,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34962,"src":"4511:6:91","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":34966,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6434,"src":"4480:11:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$6434_$","typeString":"type(library RevertCodec)"}},"id":34967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4492:18:91","memberName":"catchEncodedResult","nodeType":"MemberAccess","referencedDeclaration":6396,"src":"4480:30:91","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) pure returns (bytes memory)"}},"id":34969,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4480:38:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":34971,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4521:7:91","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":34970,"name":"uint256","nodeType":"ElementaryTypeName","src":"4521:7:91","typeDescriptions":{}}}],"id":34972,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"4520:9:91","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":34964,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4469:3:91","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":34965,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4473:6:91","memberName":"decode","nodeType":"MemberAccess","src":"4469:10:91","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":34973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4469:61:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":34945,"id":34974,"nodeType":"Return","src":"4462:68:91"}]},"errorName":"","id":34976,"nodeType":"TryCatchClause","parameters":{"id":34963,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34962,"mutability":"mutable","name":"result","nameLocation":"4440:6:91","nodeType":"VariableDeclaration","scope":34976,"src":"4427:19:91","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":34961,"name":"bytes","nodeType":"ElementaryTypeName","src":"4427:5:91","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4426:21:91"},"src":"4420:121:91"}],"externalCall":{"arguments":[{"arguments":[{"expression":{"expression":{"id":34950,"name":"RouterMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35375,"src":"4319:10:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RouterMock_$35375_$","typeString":"type(contract RouterMock)"}},"id":34951,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4330:24:91","memberName":"queryRevertErrorCodeHook","nodeType":"MemberAccess","referencedDeclaration":34986,"src":"4319:35:91","typeDescriptions":{"typeIdentifier":"t_function_declaration_pure$__$returns$__$","typeString":"function RouterMock.queryRevertErrorCodeHook() pure"}},"id":34952,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4355:8:91","memberName":"selector","nodeType":"MemberAccess","src":"4319:44:91","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":34948,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4296:3:91","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":34949,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4300:18:91","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"4296:22:91","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":34953,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4296:68:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":34946,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"4274:6:91","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":34947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4281:14:91","memberName":"quoteAndRevert","nodeType":"MemberAccess","referencedDeclaration":4398,"src":"4274:21:91","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) external"}},"id":34954,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4274:91:91","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":34977,"nodeType":"TryStatement","src":"4270:271:91"}]},"functionSelector":"7ae30960","id":34979,"implemented":true,"kind":"function","modifiers":[],"name":"queryRevertErrorCode","nameLocation":"4210:20:91","nodeType":"FunctionDefinition","parameters":{"id":34942,"nodeType":"ParameterList","parameters":[],"src":"4230:2:91"},"returnParameters":{"id":34945,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34944,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":34979,"src":"4251:7:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34943,"name":"uint256","nodeType":"ElementaryTypeName","src":"4251:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4250:9:91"},"scope":35375,"src":"4201:346:91","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":34985,"nodeType":"Block","src":"4603:39:91","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":34982,"name":"MockErrorCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34648,"src":"4620:13:91","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":34983,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4620:15:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":34984,"nodeType":"RevertStatement","src":"4613:22:91"}]},"functionSelector":"45d132fe","id":34986,"implemented":true,"kind":"function","modifiers":[],"name":"queryRevertErrorCodeHook","nameLocation":"4562:24:91","nodeType":"FunctionDefinition","parameters":{"id":34980,"nodeType":"ParameterList","parameters":[],"src":"4586:2:91"},"returnParameters":{"id":34981,"nodeType":"ParameterList","parameters":[],"src":"4603:0:91"},"scope":35375,"src":"4553:89:91","stateMutability":"pure","virtual":false,"visibility":"external"},{"body":{"id":35023,"nodeType":"Block","src":"4704:284:91","statements":[{"clauses":[{"block":{"id":35004,"nodeType":"Block","src":"4807:53:91","statements":[{"expression":{"arguments":[{"hexValue":"556e65787065637465642073756363657373","id":35001,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4828:20:91","typeDescriptions":{"typeIdentifier":"t_stringliteral_52cc6744a1218fb09c6a53a5e53dd9c5152cf7440797e8ce2d6c7d521e9d14d5","typeString":"literal_string \"Unexpected success\""},"value":"Unexpected success"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_52cc6744a1218fb09c6a53a5e53dd9c5152cf7440797e8ce2d6c7d521e9d14d5","typeString":"literal_string \"Unexpected success\""}],"id":35000,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"4821:6:91","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":35002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4821:28:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35003,"nodeType":"ExpressionStatement","src":"4821:28:91"}]},"errorName":"","id":35005,"nodeType":"TryCatchClause","src":"4807:53:91"},{"block":{"id":35020,"nodeType":"Block","src":"4889:93:91","statements":[{"expression":{"arguments":[{"arguments":[{"id":35013,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35007,"src":"4952:6:91","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":35011,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6434,"src":"4921:11:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$6434_$","typeString":"type(library RevertCodec)"}},"id":35012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4933:18:91","memberName":"catchEncodedResult","nodeType":"MemberAccess","referencedDeclaration":6396,"src":"4921:30:91","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) pure returns (bytes memory)"}},"id":35014,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4921:38:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":35016,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4962:7:91","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":35015,"name":"uint256","nodeType":"ElementaryTypeName","src":"4962:7:91","typeDescriptions":{}}}],"id":35017,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"4961:9:91","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":35009,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4910:3:91","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":35010,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4914:6:91","memberName":"decode","nodeType":"MemberAccess","src":"4910:10:91","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":35018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4910:61:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":34990,"id":35019,"nodeType":"Return","src":"4903:68:91"}]},"errorName":"","id":35021,"nodeType":"TryCatchClause","parameters":{"id":35008,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35007,"mutability":"mutable","name":"result","nameLocation":"4881:6:91","nodeType":"VariableDeclaration","scope":35021,"src":"4868:19:91","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":35006,"name":"bytes","nodeType":"ElementaryTypeName","src":"4868:5:91","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4867:21:91"},"src":"4861:121:91"}],"externalCall":{"arguments":[{"arguments":[{"expression":{"expression":{"id":34995,"name":"RouterMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35375,"src":"4763:10:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RouterMock_$35375_$","typeString":"type(contract RouterMock)"}},"id":34996,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4774:21:91","memberName":"queryRevertLegacyHook","nodeType":"MemberAccess","referencedDeclaration":35032,"src":"4763:32:91","typeDescriptions":{"typeIdentifier":"t_function_declaration_pure$__$returns$__$","typeString":"function RouterMock.queryRevertLegacyHook() pure"}},"id":34997,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4796:8:91","memberName":"selector","nodeType":"MemberAccess","src":"4763:41:91","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":34993,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4740:3:91","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":34994,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4744:18:91","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"4740:22:91","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":34998,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4740:65:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":34991,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"4718:6:91","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":34992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4725:14:91","memberName":"quoteAndRevert","nodeType":"MemberAccess","referencedDeclaration":4398,"src":"4718:21:91","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) external"}},"id":34999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4718:88:91","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35022,"nodeType":"TryStatement","src":"4714:268:91"}]},"functionSelector":"339f3838","id":35024,"implemented":true,"kind":"function","modifiers":[],"name":"queryRevertLegacy","nameLocation":"4657:17:91","nodeType":"FunctionDefinition","parameters":{"id":34987,"nodeType":"ParameterList","parameters":[],"src":"4674:2:91"},"returnParameters":{"id":34990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":34989,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35024,"src":"4695:7:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":34988,"name":"uint256","nodeType":"ElementaryTypeName","src":"4695:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4694:9:91"},"scope":35375,"src":"4648:340:91","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":35031,"nodeType":"Block","src":"5041:47:91","statements":[{"expression":{"arguments":[{"hexValue":"4c65676163792072657665727420726561736f6e","id":35028,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5058:22:91","typeDescriptions":{"typeIdentifier":"t_stringliteral_f3fa99d79ae4d6199f28559da514c573ab41f2feefd45a7aac4a97a8f0e048be","typeString":"literal_string \"Legacy revert reason\""},"value":"Legacy revert reason"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_f3fa99d79ae4d6199f28559da514c573ab41f2feefd45a7aac4a97a8f0e048be","typeString":"literal_string \"Legacy revert reason\""}],"id":35027,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"5051:6:91","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":35029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5051:30:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35030,"nodeType":"ExpressionStatement","src":"5051:30:91"}]},"functionSelector":"22717db2","id":35032,"implemented":true,"kind":"function","modifiers":[],"name":"queryRevertLegacyHook","nameLocation":"5003:21:91","nodeType":"FunctionDefinition","parameters":{"id":35025,"nodeType":"ParameterList","parameters":[],"src":"5024:2:91"},"returnParameters":{"id":35026,"nodeType":"ParameterList","parameters":[],"src":"5041:0:91"},"scope":35375,"src":"4994:94:91","stateMutability":"pure","virtual":false,"visibility":"external"},{"body":{"id":35069,"nodeType":"Block","src":"5149:283:91","statements":[{"clauses":[{"block":{"id":35050,"nodeType":"Block","src":"5251:53:91","statements":[{"expression":{"arguments":[{"hexValue":"556e65787065637465642073756363657373","id":35047,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5272:20:91","typeDescriptions":{"typeIdentifier":"t_stringliteral_52cc6744a1218fb09c6a53a5e53dd9c5152cf7440797e8ce2d6c7d521e9d14d5","typeString":"literal_string \"Unexpected success\""},"value":"Unexpected success"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_52cc6744a1218fb09c6a53a5e53dd9c5152cf7440797e8ce2d6c7d521e9d14d5","typeString":"literal_string \"Unexpected success\""}],"id":35046,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"5265:6:91","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":35048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5265:28:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35049,"nodeType":"ExpressionStatement","src":"5265:28:91"}]},"errorName":"","id":35051,"nodeType":"TryCatchClause","src":"5251:53:91"},{"block":{"id":35066,"nodeType":"Block","src":"5333:93:91","statements":[{"expression":{"arguments":[{"arguments":[{"id":35059,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35053,"src":"5396:6:91","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":35057,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6434,"src":"5365:11:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$6434_$","typeString":"type(library RevertCodec)"}},"id":35058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5377:18:91","memberName":"catchEncodedResult","nodeType":"MemberAccess","referencedDeclaration":6396,"src":"5365:30:91","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) pure returns (bytes memory)"}},"id":35060,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5365:38:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":35062,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5406:7:91","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":35061,"name":"uint256","nodeType":"ElementaryTypeName","src":"5406:7:91","typeDescriptions":{}}}],"id":35063,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"5405:9:91","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":35055,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5354:3:91","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":35056,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5358:6:91","memberName":"decode","nodeType":"MemberAccess","src":"5354:10:91","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":35064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5354:61:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":35036,"id":35065,"nodeType":"Return","src":"5347:68:91"}]},"errorName":"","id":35067,"nodeType":"TryCatchClause","parameters":{"id":35054,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35053,"mutability":"mutable","name":"result","nameLocation":"5325:6:91","nodeType":"VariableDeclaration","scope":35067,"src":"5312:19:91","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":35052,"name":"bytes","nodeType":"ElementaryTypeName","src":"5312:5:91","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5311:21:91"},"src":"5305:121:91"}],"externalCall":{"arguments":[{"arguments":[{"expression":{"expression":{"id":35041,"name":"RouterMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35375,"src":"5208:10:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RouterMock_$35375_$","typeString":"type(contract RouterMock)"}},"id":35042,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5219:20:91","memberName":"queryRevertPanicHook","nodeType":"MemberAccess","referencedDeclaration":35088,"src":"5208:31:91","typeDescriptions":{"typeIdentifier":"t_function_declaration_pure$__$returns$_t_uint256_$","typeString":"function RouterMock.queryRevertPanicHook() pure returns (uint256)"}},"id":35043,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5240:8:91","memberName":"selector","nodeType":"MemberAccess","src":"5208:40:91","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":35039,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5185:3:91","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":35040,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5189:18:91","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"5185:22:91","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":35044,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5185:64:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":35037,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"5163:6:91","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":35038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5170:14:91","memberName":"quoteAndRevert","nodeType":"MemberAccess","referencedDeclaration":4398,"src":"5163:21:91","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) external"}},"id":35045,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5163:87:91","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35068,"nodeType":"TryStatement","src":"5159:267:91"}]},"functionSelector":"aaf51ea3","id":35070,"implemented":true,"kind":"function","modifiers":[],"name":"queryRevertPanic","nameLocation":"5103:16:91","nodeType":"FunctionDefinition","parameters":{"id":35033,"nodeType":"ParameterList","parameters":[],"src":"5119:2:91"},"returnParameters":{"id":35036,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35035,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35070,"src":"5140:7:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35034,"name":"uint256","nodeType":"ElementaryTypeName","src":"5140:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5139:9:91"},"scope":35375,"src":"5094:338:91","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":35087,"nodeType":"Block","src":"5502:76:91","statements":[{"assignments":[35076],"declarations":[{"constant":false,"id":35076,"mutability":"mutable","name":"a","nameLocation":"5520:1:91","nodeType":"VariableDeclaration","scope":35087,"src":"5512:9:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35075,"name":"uint256","nodeType":"ElementaryTypeName","src":"5512:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35078,"initialValue":{"hexValue":"3130","id":35077,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5524:2:91","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"VariableDeclarationStatement","src":"5512:14:91"},{"assignments":[35080],"declarations":[{"constant":false,"id":35080,"mutability":"mutable","name":"b","nameLocation":"5544:1:91","nodeType":"VariableDeclaration","scope":35087,"src":"5536:9:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35079,"name":"uint256","nodeType":"ElementaryTypeName","src":"5536:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35082,"initialValue":{"hexValue":"30","id":35081,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5548:1:91","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5536:13:91"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35083,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35076,"src":"5566:1:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":35084,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35080,"src":"5570:1:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5566:5:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":35074,"id":35086,"nodeType":"Return","src":"5559:12:91"}]},"functionSelector":"d3a5152a","id":35088,"implemented":true,"kind":"function","modifiers":[],"name":"queryRevertPanicHook","nameLocation":"5447:20:91","nodeType":"FunctionDefinition","parameters":{"id":35071,"nodeType":"ParameterList","parameters":[],"src":"5467:2:91"},"returnParameters":{"id":35074,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35073,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35088,"src":"5493:7:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35072,"name":"uint256","nodeType":"ElementaryTypeName","src":"5493:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5492:9:91"},"scope":35375,"src":"5438:140:91","stateMutability":"pure","virtual":false,"visibility":"external"},{"body":{"id":35125,"nodeType":"Block","src":"5642:286:91","statements":[{"clauses":[{"block":{"id":35106,"nodeType":"Block","src":"5747:53:91","statements":[{"expression":{"arguments":[{"hexValue":"556e65787065637465642073756363657373","id":35103,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5768:20:91","typeDescriptions":{"typeIdentifier":"t_stringliteral_52cc6744a1218fb09c6a53a5e53dd9c5152cf7440797e8ce2d6c7d521e9d14d5","typeString":"literal_string \"Unexpected success\""},"value":"Unexpected success"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_52cc6744a1218fb09c6a53a5e53dd9c5152cf7440797e8ce2d6c7d521e9d14d5","typeString":"literal_string \"Unexpected success\""}],"id":35102,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"5761:6:91","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":35104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5761:28:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35105,"nodeType":"ExpressionStatement","src":"5761:28:91"}]},"errorName":"","id":35107,"nodeType":"TryCatchClause","src":"5747:53:91"},{"block":{"id":35122,"nodeType":"Block","src":"5829:93:91","statements":[{"expression":{"arguments":[{"arguments":[{"id":35115,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35109,"src":"5892:6:91","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":35113,"name":"RevertCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6434,"src":"5861:11:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RevertCodec_$6434_$","typeString":"type(library RevertCodec)"}},"id":35114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5873:18:91","memberName":"catchEncodedResult","nodeType":"MemberAccess","referencedDeclaration":6396,"src":"5861:30:91","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) pure returns (bytes memory)"}},"id":35116,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5861:38:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":35118,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5902:7:91","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":35117,"name":"uint256","nodeType":"ElementaryTypeName","src":"5902:7:91","typeDescriptions":{}}}],"id":35119,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"5901:9:91","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"expression":{"id":35111,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5850:3:91","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":35112,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5854:6:91","memberName":"decode","nodeType":"MemberAccess","src":"5850:10:91","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":35120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5850:61:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":35092,"id":35121,"nodeType":"Return","src":"5843:68:91"}]},"errorName":"","id":35123,"nodeType":"TryCatchClause","parameters":{"id":35110,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35109,"mutability":"mutable","name":"result","nameLocation":"5821:6:91","nodeType":"VariableDeclaration","scope":35123,"src":"5808:19:91","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":35108,"name":"bytes","nodeType":"ElementaryTypeName","src":"5808:5:91","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5807:21:91"},"src":"5801:121:91"}],"externalCall":{"arguments":[{"arguments":[{"expression":{"expression":{"id":35097,"name":"RouterMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35375,"src":"5701:10:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RouterMock_$35375_$","typeString":"type(contract RouterMock)"}},"id":35098,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5712:23:91","memberName":"queryRevertNoReasonHook","nodeType":"MemberAccess","referencedDeclaration":35135,"src":"5701:34:91","typeDescriptions":{"typeIdentifier":"t_function_declaration_pure$__$returns$_t_uint256_$","typeString":"function RouterMock.queryRevertNoReasonHook() pure returns (uint256)"}},"id":35099,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5736:8:91","memberName":"selector","nodeType":"MemberAccess","src":"5701:43:91","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":35095,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5678:3:91","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":35096,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5682:18:91","memberName":"encodeWithSelector","nodeType":"MemberAccess","src":"5678:22:91","typeDescriptions":{"typeIdentifier":"t_function_abiencodewithselector_pure$_t_bytes4_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes4) pure returns (bytes memory)"}},"id":35100,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5678:67:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":35093,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"5656:6:91","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":35094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5663:14:91","memberName":"quoteAndRevert","nodeType":"MemberAccess","referencedDeclaration":4398,"src":"5656:21:91","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) external"}},"id":35101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5656:90:91","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35124,"nodeType":"TryStatement","src":"5652:270:91"}]},"functionSelector":"90aa9f76","id":35126,"implemented":true,"kind":"function","modifiers":[],"name":"queryRevertNoReason","nameLocation":"5593:19:91","nodeType":"FunctionDefinition","parameters":{"id":35089,"nodeType":"ParameterList","parameters":[],"src":"5612:2:91"},"returnParameters":{"id":35092,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35091,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35126,"src":"5633:7:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35090,"name":"uint256","nodeType":"ElementaryTypeName","src":"5633:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5632:9:91"},"scope":35375,"src":"5584:344:91","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":35134,"nodeType":"Block","src":"6001:25:91","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":35131,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"6011:6:91","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$__$returns$__$","typeString":"function () pure"}},"id":35132,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6011:8:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35133,"nodeType":"ExpressionStatement","src":"6011:8:91"}]},"functionSelector":"b3b0a7a7","id":35135,"implemented":true,"kind":"function","modifiers":[],"name":"queryRevertNoReasonHook","nameLocation":"5943:23:91","nodeType":"FunctionDefinition","parameters":{"id":35127,"nodeType":"ParameterList","parameters":[],"src":"5966:2:91"},"returnParameters":{"id":35130,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35129,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35135,"src":"5992:7:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35128,"name":"uint256","nodeType":"ElementaryTypeName","src":"5992:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5991:9:91"},"scope":35375,"src":"5934:92:91","stateMutability":"pure","virtual":false,"visibility":"external"},{"canonicalName":"RouterMock.ManualAddRemoveLiquidityParams","id":35145,"members":[{"constant":false,"id":35137,"mutability":"mutable","name":"pool","nameLocation":"6088:4:91","nodeType":"VariableDeclaration","scope":35145,"src":"6080:12:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35136,"name":"address","nodeType":"ElementaryTypeName","src":"6080:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35139,"mutability":"mutable","name":"sender","nameLocation":"6110:6:91","nodeType":"VariableDeclaration","scope":35145,"src":"6102:14:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35138,"name":"address","nodeType":"ElementaryTypeName","src":"6102:7:91","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35142,"mutability":"mutable","name":"maxAmountsIn","nameLocation":"6136:12:91","nodeType":"VariableDeclaration","scope":35145,"src":"6126:22:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":35140,"name":"uint256","nodeType":"ElementaryTypeName","src":"6126:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35141,"nodeType":"ArrayTypeName","src":"6126:9:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":35144,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"6166:15:91","nodeType":"VariableDeclaration","scope":35145,"src":"6158:23:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35143,"name":"uint256","nodeType":"ElementaryTypeName","src":"6158:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"ManualAddRemoveLiquidityParams","nameLocation":"6039:30:91","nodeType":"StructDefinition","scope":35375,"src":"6032:156:91","visibility":"public"},{"body":{"id":35189,"nodeType":"Block","src":"6462:217:91","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"expression":{"id":35171,"name":"RouterMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35375,"src":"6548:10:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_RouterMock_$35375_$","typeString":"type(contract RouterMock)"}},"id":35172,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6559:31:91","memberName":"manualAddAndRemoveLiquidityHook","nodeType":"MemberAccess","referencedDeclaration":35374,"src":"6548:42:91","typeDescriptions":{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_ManualAddRemoveLiquidityParams_$35145_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function RouterMock.manualAddAndRemoveLiquidityHook(struct RouterMock.ManualAddRemoveLiquidityParams calldata) returns (uint256[] memory,uint256,uint256,uint256[] memory)"}},{"id":35173,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35148,"src":"6592:6:91","typeDescriptions":{"typeIdentifier":"t_struct$_ManualAddRemoveLiquidityParams_$35145_calldata_ptr","typeString":"struct RouterMock.ManualAddRemoveLiquidityParams calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_declaration_nonpayable$_t_struct$_ManualAddRemoveLiquidityParams_$35145_calldata_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function RouterMock.manualAddAndRemoveLiquidityHook(struct RouterMock.ManualAddRemoveLiquidityParams calldata) returns (uint256[] memory,uint256,uint256,uint256[] memory)"},{"typeIdentifier":"t_struct$_ManualAddRemoveLiquidityParams_$35145_calldata_ptr","typeString":"struct RouterMock.ManualAddRemoveLiquidityParams calldata"}],"expression":{"id":35169,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"6533:3:91","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":35170,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6537:10:91","memberName":"encodeCall","nodeType":"MemberAccess","src":"6533:14:91","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":35174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6533:66:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":35167,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"6519:6:91","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":35168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6526:6:91","memberName":"unlock","nodeType":"MemberAccess","referencedDeclaration":4440,"src":"6519:13:91","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) external returns (bytes memory)"}},"id":35175,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6519:81:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"baseExpression":{"id":35177,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6619:7:91","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":35176,"name":"uint256","nodeType":"ElementaryTypeName","src":"6619:7:91","typeDescriptions":{}}},"id":35178,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"6619:9:91","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}},{"id":35180,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6630:7:91","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":35179,"name":"uint256","nodeType":"ElementaryTypeName","src":"6630:7:91","typeDescriptions":{}}},{"id":35182,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6639:7:91","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":35181,"name":"uint256","nodeType":"ElementaryTypeName","src":"6639:7:91","typeDescriptions":{}}},{"baseExpression":{"id":35184,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6648:7:91","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":35183,"name":"uint256","nodeType":"ElementaryTypeName","src":"6648:7:91","typeDescriptions":{}}},"id":35185,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"IndexAccess","src":"6648:9:91","typeDescriptions":{"typeIdentifier":"t_type$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"type(uint256[] memory)"}}],"id":35186,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"6618:40:91","typeDescriptions":{"typeIdentifier":"t_tuple$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$","typeString":"tuple(type(uint256[] memory),type(uint256),type(uint256),type(uint256[] memory))"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_tuple$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$_t_type$_t_uint256_$_$_t_type$_t_uint256_$_$_t_type$_t_array$_t_uint256_$dyn_memory_ptr_$_$","typeString":"tuple(type(uint256[] memory),type(uint256),type(uint256),type(uint256[] memory))"}],"expression":{"id":35165,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"6491:3:91","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":35166,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6495:6:91","memberName":"decode","nodeType":"MemberAccess","src":"6491:10:91","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":35187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6491:181:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256,uint256,uint256[] memory)"}},"functionReturnParameters":35164,"id":35188,"nodeType":"Return","src":"6472:200:91"}]},"functionSelector":"68d5e16a","id":35190,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"expression":{"id":35151,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6329:3:91","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":35152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6333:6:91","memberName":"sender","nodeType":"MemberAccess","src":"6329:10:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":35153,"kind":"modifierInvocation","modifierName":{"id":35150,"name":"saveSender","nameLocations":["6318:10:91"],"nodeType":"IdentifierPath","referencedDeclaration":19249,"src":"6318:10:91"},"nodeType":"ModifierInvocation","src":"6318:22:91"}],"name":"manualAddAndRemoveLiquidity","nameLocation":"6203:27:91","nodeType":"FunctionDefinition","parameters":{"id":35149,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35148,"mutability":"mutable","name":"params","nameLocation":"6280:6:91","nodeType":"VariableDeclaration","scope":35190,"src":"6240:46:91","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ManualAddRemoveLiquidityParams_$35145_calldata_ptr","typeString":"struct RouterMock.ManualAddRemoveLiquidityParams"},"typeName":{"id":35147,"nodeType":"UserDefinedTypeName","pathNode":{"id":35146,"name":"ManualAddRemoveLiquidityParams","nameLocations":["6240:30:91"],"nodeType":"IdentifierPath","referencedDeclaration":35145,"src":"6240:30:91"},"referencedDeclaration":35145,"src":"6240:30:91","typeDescriptions":{"typeIdentifier":"t_struct$_ManualAddRemoveLiquidityParams_$35145_storage_ptr","typeString":"struct RouterMock.ManualAddRemoveLiquidityParams"}},"visibility":"internal"}],"src":"6230:62:91"},"returnParameters":{"id":35164,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35156,"mutability":"mutable","name":"amountsIn","nameLocation":"6375:9:91","nodeType":"VariableDeclaration","scope":35190,"src":"6358:26:91","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":35154,"name":"uint256","nodeType":"ElementaryTypeName","src":"6358:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35155,"nodeType":"ArrayTypeName","src":"6358:9:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":35158,"mutability":"mutable","name":"bptAmountOut","nameLocation":"6394:12:91","nodeType":"VariableDeclaration","scope":35190,"src":"6386:20:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35157,"name":"uint256","nodeType":"ElementaryTypeName","src":"6386:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35160,"mutability":"mutable","name":"bptAmountIn","nameLocation":"6416:11:91","nodeType":"VariableDeclaration","scope":35190,"src":"6408:19:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35159,"name":"uint256","nodeType":"ElementaryTypeName","src":"6408:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35163,"mutability":"mutable","name":"amountsOut","nameLocation":"6446:10:91","nodeType":"VariableDeclaration","scope":35190,"src":"6429:27:91","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":35161,"name":"uint256","nodeType":"ElementaryTypeName","src":"6429:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35162,"nodeType":"ArrayTypeName","src":"6429:9:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"6357:100:91"},"scope":35375,"src":"6194:485:91","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":35373,"nodeType":"Block","src":"6926:1857:91","statements":[{"expression":{"id":35228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":35206,"name":"amountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35197,"src":"6937:9:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":35207,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35199,"src":"6948:12:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},null],"id":35208,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"6936:27:91","typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$__$","typeString":"tuple(uint256[] memory,uint256,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"expression":{"id":35212,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35193,"src":"7042:6:91","typeDescriptions":{"typeIdentifier":"t_struct$_ManualAddRemoveLiquidityParams_$35145_calldata_ptr","typeString":"struct RouterMock.ManualAddRemoveLiquidityParams calldata"}},"id":35213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7049:4:91","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":35137,"src":"7042:11:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":35214,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35193,"src":"7075:6:91","typeDescriptions":{"typeIdentifier":"t_struct$_ManualAddRemoveLiquidityParams_$35145_calldata_ptr","typeString":"struct RouterMock.ManualAddRemoveLiquidityParams calldata"}},"id":35215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7082:6:91","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":35139,"src":"7075:13:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":35216,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35193,"src":"7120:6:91","typeDescriptions":{"typeIdentifier":"t_struct$_ManualAddRemoveLiquidityParams_$35145_calldata_ptr","typeString":"struct RouterMock.ManualAddRemoveLiquidityParams calldata"}},"id":35217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7127:12:91","memberName":"maxAmountsIn","nodeType":"MemberAccess","referencedDeclaration":35142,"src":"7120:19:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},{"expression":{"id":35218,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35193,"src":"7174:6:91","typeDescriptions":{"typeIdentifier":"t_struct$_ManualAddRemoveLiquidityParams_$35145_calldata_ptr","typeString":"struct RouterMock.ManualAddRemoveLiquidityParams calldata"}},"id":35219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7181:15:91","memberName":"minBptAmountOut","nodeType":"MemberAccess","referencedDeclaration":35144,"src":"7174:22:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":35220,"name":"AddLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4807,"src":"7220:16:91","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_AddLiquidityKind_$4807_$","typeString":"type(enum AddLiquidityKind)"}},"id":35221,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7237:12:91","memberName":"PROPORTIONAL","nodeType":"MemberAccess","referencedDeclaration":4802,"src":"7220:29:91","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},{"arguments":[{"hexValue":"","id":35224,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7283:2:91","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":35223,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7277:5:91","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":35222,"name":"bytes","nodeType":"ElementaryTypeName","src":"7277:5:91","typeDescriptions":{}}},"id":35225,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7277:9:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":35211,"name":"AddLiquidityParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4823,"src":"6999:18:91","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_AddLiquidityParams_$4823_storage_ptr_$","typeString":"type(struct AddLiquidityParams storage pointer)"}},"id":35226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["7036:4:91","7071:2:91","7106:12:91","7157:15:91","7214:4:91","7267:8:91"],"names":["pool","to","maxAmountsIn","minBptAmountOut","kind","userData"],"nodeType":"FunctionCall","src":"6999:302:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}],"expression":{"id":35209,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"6966:6:91","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":35210,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6973:12:91","memberName":"addLiquidity","nodeType":"MemberAccess","referencedDeclaration":4489,"src":"6966:19:91","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_AddLiquidityParams_$4823_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"function (struct AddLiquidityParams memory) external returns (uint256[] memory,uint256,bytes memory)"}},"id":35227,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6966:345:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256,bytes memory)"}},"src":"6936:375:91","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35229,"nodeType":"ExpressionStatement","src":"6936:375:91"},{"assignments":[35234],"declarations":[{"constant":false,"id":35234,"mutability":"mutable","name":"tokens","nameLocation":"7416:6:91","nodeType":"VariableDeclaration","scope":35373,"src":"7400:22:91","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":35232,"nodeType":"UserDefinedTypeName","pathNode":{"id":35231,"name":"IERC20","nameLocations":["7400:6:91"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"7400:6:91"},"referencedDeclaration":40109,"src":"7400:6:91","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":35233,"nodeType":"ArrayTypeName","src":"7400:8:91","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"id":35240,"initialValue":{"arguments":[{"expression":{"id":35237,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35193,"src":"7446:6:91","typeDescriptions":{"typeIdentifier":"t_struct$_ManualAddRemoveLiquidityParams_$35145_calldata_ptr","typeString":"struct RouterMock.ManualAddRemoveLiquidityParams calldata"}},"id":35238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7453:4:91","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":35137,"src":"7446:11:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":35235,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"7425:6:91","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":35236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7432:13:91","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":4145,"src":"7425:20:91","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":35239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7425:33:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"VariableDeclarationStatement","src":"7400:58:91"},{"body":{"id":35296,"nodeType":"Block","src":"7513:490:91","statements":[{"assignments":[35254],"declarations":[{"constant":false,"id":35254,"mutability":"mutable","name":"token","nameLocation":"7534:5:91","nodeType":"VariableDeclaration","scope":35296,"src":"7527:12:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":35253,"nodeType":"UserDefinedTypeName","pathNode":{"id":35252,"name":"IERC20","nameLocations":["7527:6:91"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"7527:6:91"},"referencedDeclaration":40109,"src":"7527:6:91","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"id":35258,"initialValue":{"baseExpression":{"id":35255,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35234,"src":"7542:6:91","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":35257,"indexExpression":{"id":35256,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35242,"src":"7549:1:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7542:9:91","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"7527:24:91"},{"assignments":[35260],"declarations":[{"constant":false,"id":35260,"mutability":"mutable","name":"amountIn","nameLocation":"7573:8:91","nodeType":"VariableDeclaration","scope":35296,"src":"7565:16:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35259,"name":"uint256","nodeType":"ElementaryTypeName","src":"7565:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35264,"initialValue":{"baseExpression":{"id":35261,"name":"amountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35197,"src":"7584:9:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35263,"indexExpression":{"id":35262,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35242,"src":"7594:1:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7584:12:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7565:31:91"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35265,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35260,"src":"7614:8:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":35266,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7626:1:91","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7614:13:91","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35270,"nodeType":"IfStatement","src":"7610:60:91","trueBody":{"id":35269,"nodeType":"Block","src":"7629:41:91","statements":[{"id":35268,"nodeType":"Continue","src":"7647:8:91"}]}},{"expression":{"arguments":[{"expression":{"id":35274,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35193,"src":"7879:6:91","typeDescriptions":{"typeIdentifier":"t_struct$_ManualAddRemoveLiquidityParams_$35145_calldata_ptr","typeString":"struct RouterMock.ManualAddRemoveLiquidityParams calldata"}},"id":35275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7886:6:91","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":35139,"src":"7879:13:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":35278,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"7902:6:91","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}],"id":35277,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7894:7:91","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":35276,"name":"address","nodeType":"ElementaryTypeName","src":"7894:7:91","typeDescriptions":{}}},"id":35279,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7894:15:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":35280,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35260,"src":"7911:8:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7920:9:91","memberName":"toUint160","nodeType":"MemberAccess","referencedDeclaration":43591,"src":"7911:18:91","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint160_$attached_to$_t_uint256_$","typeString":"function (uint256) pure returns (uint160)"}},"id":35282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7911:20:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},{"arguments":[{"id":35285,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35254,"src":"7941:5:91","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":35284,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7933:7:91","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":35283,"name":"address","nodeType":"ElementaryTypeName","src":"7933:7:91","typeDescriptions":{}}},"id":35286,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7933:14:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint160","typeString":"uint160"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":35271,"name":"_permit2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":18588,"src":"7857:8:91","typeDescriptions":{"typeIdentifier":"t_contract$_IPermit2_$48578","typeString":"contract IPermit2"}},"id":35273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7866:12:91","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":48531,"src":"7857:21:91","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint160_$_t_address_$returns$__$","typeString":"function (address,address,uint160,address) external"}},"id":35287,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7857:91:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35288,"nodeType":"ExpressionStatement","src":"7857:91:91"},{"expression":{"arguments":[{"id":35292,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35254,"src":"7976:5:91","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":35293,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35260,"src":"7983:8:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":35289,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"7962:6:91","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":35291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7969:6:91","memberName":"settle","nodeType":"MemberAccess","referencedDeclaration":4451,"src":"7962:13:91","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$_t_uint256_$","typeString":"function (contract IERC20,uint256) external returns (uint256)"}},"id":35294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7962:30:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35295,"nodeType":"ExpressionStatement","src":"7962:30:91"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35248,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35245,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35242,"src":"7489:1:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":35246,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35234,"src":"7493:6:91","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":35247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7500:6:91","memberName":"length","nodeType":"MemberAccess","src":"7493:13:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7489:17:91","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35297,"initializationExpression":{"assignments":[35242],"declarations":[{"constant":false,"id":35242,"mutability":"mutable","name":"i","nameLocation":"7482:1:91","nodeType":"VariableDeclaration","scope":35297,"src":"7474:9:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35241,"name":"uint256","nodeType":"ElementaryTypeName","src":"7474:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35244,"initialValue":{"hexValue":"30","id":35243,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7486:1:91","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"7474:13:91"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":35250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"7508:3:91","subExpression":{"id":35249,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35242,"src":"7510:1:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35251,"nodeType":"ExpressionStatement","src":"7508:3:91"},"nodeType":"ForStatement","src":"7469:534:91"},{"expression":{"id":35330,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":35298,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35201,"src":"8014:11:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":35299,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35204,"src":"8027:10:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},null],"id":35300,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"8013:27:91","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$__$","typeString":"tuple(uint256,uint256[] memory,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"expression":{"id":35304,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35193,"src":"8125:6:91","typeDescriptions":{"typeIdentifier":"t_struct$_ManualAddRemoveLiquidityParams_$35145_calldata_ptr","typeString":"struct RouterMock.ManualAddRemoveLiquidityParams calldata"}},"id":35305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8132:4:91","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":35137,"src":"8125:11:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":35306,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35193,"src":"8160:6:91","typeDescriptions":{"typeIdentifier":"t_struct$_ManualAddRemoveLiquidityParams_$35145_calldata_ptr","typeString":"struct RouterMock.ManualAddRemoveLiquidityParams calldata"}},"id":35307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8167:6:91","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":35139,"src":"8160:13:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":35313,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35193,"src":"8237:6:91","typeDescriptions":{"typeIdentifier":"t_struct$_ManualAddRemoveLiquidityParams_$35145_calldata_ptr","typeString":"struct RouterMock.ManualAddRemoveLiquidityParams calldata"}},"id":35314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8244:6:91","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":35139,"src":"8237:13:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"expression":{"id":35309,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35193,"src":"8214:6:91","typeDescriptions":{"typeIdentifier":"t_struct$_ManualAddRemoveLiquidityParams_$35145_calldata_ptr","typeString":"struct RouterMock.ManualAddRemoveLiquidityParams calldata"}},"id":35310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8221:4:91","memberName":"pool","nodeType":"MemberAccess","referencedDeclaration":35137,"src":"8214:11:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":35308,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"8207:6:91","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":35311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8207:19:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":35312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8227:9:91","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":40066,"src":"8207:29:91","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":35315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8207:44:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":35319,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35234,"src":"8298:6:91","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":35320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8305:6:91","memberName":"length","nodeType":"MemberAccess","src":"8298:13:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":35318,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"8284:13:91","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":35316,"name":"uint256","nodeType":"ElementaryTypeName","src":"8288:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35317,"nodeType":"ArrayTypeName","src":"8288:9:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":35321,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8284:28:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"expression":{"id":35322,"name":"RemoveLiquidityKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4828,"src":"8336:19:91","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RemoveLiquidityKind_$4828_$","typeString":"type(enum RemoveLiquidityKind)"}},"id":35323,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8356:12:91","memberName":"PROPORTIONAL","nodeType":"MemberAccess","referencedDeclaration":4824,"src":"8336:32:91","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},{"arguments":[{"hexValue":"","id":35326,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"8402:2:91","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"id":35325,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8396:5:91","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":35324,"name":"bytes","nodeType":"ElementaryTypeName","src":"8396:5:91","typeDescriptions":{}}},"id":35327,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8396:9:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":35303,"name":"RemoveLiquidityParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4844,"src":"8079:21:91","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_RemoveLiquidityParams_$4844_storage_ptr_$","typeString":"type(struct RemoveLiquidityParams storage pointer)"}},"id":35328,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["8119:4:91","8154:4:91","8191:14:91","8269:13:91","8330:4:91","8386:8:91"],"names":["pool","from","maxBptAmountIn","minAmountsOut","kind","userData"],"nodeType":"FunctionCall","src":"8079:341:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}],"expression":{"id":35301,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"8043:6:91","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":35302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8050:15:91","memberName":"removeLiquidity","nodeType":"MemberAccess","referencedDeclaration":4503,"src":"8043:22:91","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_RemoveLiquidityParams_$4844_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function (struct RemoveLiquidityParams memory) external returns (uint256,uint256[] memory,bytes memory)"}},"id":35329,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8043:387:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory,bytes memory)"}},"src":"8013:417:91","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35331,"nodeType":"ExpressionStatement","src":"8013:417:91"},{"body":{"id":35371,"nodeType":"Block","src":"8485:292:91","statements":[{"assignments":[35345],"declarations":[{"constant":false,"id":35345,"mutability":"mutable","name":"token","nameLocation":"8506:5:91","nodeType":"VariableDeclaration","scope":35371,"src":"8499:12:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":35344,"nodeType":"UserDefinedTypeName","pathNode":{"id":35343,"name":"IERC20","nameLocations":["8499:6:91"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"8499:6:91"},"referencedDeclaration":40109,"src":"8499:6:91","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"id":35349,"initialValue":{"baseExpression":{"id":35346,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35234,"src":"8514:6:91","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":35348,"indexExpression":{"id":35347,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35333,"src":"8521:1:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8514:9:91","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"8499:24:91"},{"assignments":[35351],"declarations":[{"constant":false,"id":35351,"mutability":"mutable","name":"amountOut","nameLocation":"8545:9:91","nodeType":"VariableDeclaration","scope":35371,"src":"8537:17:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35350,"name":"uint256","nodeType":"ElementaryTypeName","src":"8537:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35355,"initialValue":{"baseExpression":{"id":35352,"name":"amountsOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35204,"src":"8557:10:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":35354,"indexExpression":{"id":35353,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35333,"src":"8568:1:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8557:13:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8537:33:91"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35358,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35356,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35351,"src":"8588:9:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":35357,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8601:1:91","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8588:14:91","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35361,"nodeType":"IfStatement","src":"8584:61:91","trueBody":{"id":35360,"nodeType":"Block","src":"8604:41:91","statements":[{"id":35359,"nodeType":"Continue","src":"8622:8:91"}]}},{"expression":{"arguments":[{"id":35365,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35345,"src":"8734:5:91","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"expression":{"id":35366,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35193,"src":"8741:6:91","typeDescriptions":{"typeIdentifier":"t_struct$_ManualAddRemoveLiquidityParams_$35145_calldata_ptr","typeString":"struct RouterMock.ManualAddRemoveLiquidityParams calldata"}},"id":35367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8748:6:91","memberName":"sender","nodeType":"MemberAccess","referencedDeclaration":35139,"src":"8741:13:91","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":35368,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35351,"src":"8756:9:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":35362,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"8720:6:91","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":35364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8727:6:91","memberName":"sendTo","nodeType":"MemberAccess","referencedDeclaration":4462,"src":"8720:13:91","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$40109_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":35369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8720:46:91","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35370,"nodeType":"ExpressionStatement","src":"8720:46:91"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35336,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35333,"src":"8461:1:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":35337,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35234,"src":"8465:6:91","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":35338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8472:6:91","memberName":"length","nodeType":"MemberAccess","src":"8465:13:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8461:17:91","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35372,"initializationExpression":{"assignments":[35333],"declarations":[{"constant":false,"id":35333,"mutability":"mutable","name":"i","nameLocation":"8454:1:91","nodeType":"VariableDeclaration","scope":35372,"src":"8446:9:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35332,"name":"uint256","nodeType":"ElementaryTypeName","src":"8446:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35335,"initialValue":{"hexValue":"30","id":35334,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8458:1:91","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8446:13:91"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":35341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"8480:3:91","subExpression":{"id":35340,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35333,"src":"8482:1:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35342,"nodeType":"ExpressionStatement","src":"8480:3:91"},"nodeType":"ForStatement","src":"8441:336:91"}]},"functionSelector":"3a1b05de","id":35374,"implemented":true,"kind":"function","modifiers":[],"name":"manualAddAndRemoveLiquidityHook","nameLocation":"6694:31:91","nodeType":"FunctionDefinition","parameters":{"id":35194,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35193,"mutability":"mutable","name":"params","nameLocation":"6775:6:91","nodeType":"VariableDeclaration","scope":35374,"src":"6735:46:91","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_ManualAddRemoveLiquidityParams_$35145_calldata_ptr","typeString":"struct RouterMock.ManualAddRemoveLiquidityParams"},"typeName":{"id":35192,"nodeType":"UserDefinedTypeName","pathNode":{"id":35191,"name":"ManualAddRemoveLiquidityParams","nameLocations":["6735:30:91"],"nodeType":"IdentifierPath","referencedDeclaration":35145,"src":"6735:30:91"},"referencedDeclaration":35145,"src":"6735:30:91","typeDescriptions":{"typeIdentifier":"t_struct$_ManualAddRemoveLiquidityParams_$35145_storage_ptr","typeString":"struct RouterMock.ManualAddRemoveLiquidityParams"}},"visibility":"internal"}],"src":"6725:62:91"},"returnParameters":{"id":35205,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35197,"mutability":"mutable","name":"amountsIn","nameLocation":"6839:9:91","nodeType":"VariableDeclaration","scope":35374,"src":"6822:26:91","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":35195,"name":"uint256","nodeType":"ElementaryTypeName","src":"6822:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35196,"nodeType":"ArrayTypeName","src":"6822:9:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":35199,"mutability":"mutable","name":"bptAmountOut","nameLocation":"6858:12:91","nodeType":"VariableDeclaration","scope":35374,"src":"6850:20:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35198,"name":"uint256","nodeType":"ElementaryTypeName","src":"6850:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35201,"mutability":"mutable","name":"bptAmountIn","nameLocation":"6880:11:91","nodeType":"VariableDeclaration","scope":35374,"src":"6872:19:91","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35200,"name":"uint256","nodeType":"ElementaryTypeName","src":"6872:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35204,"mutability":"mutable","name":"amountsOut","nameLocation":"6910:10:91","nodeType":"VariableDeclaration","scope":35374,"src":"6893:27:91","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":35202,"name":"uint256","nodeType":"ElementaryTypeName","src":"6893:7:91","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35203,"nodeType":"ArrayTypeName","src":"6893:9:91","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"6821:100:91"},"scope":35375,"src":"6685:2098:91","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":35376,"src":"978:7807:91","usedErrors":[3031,3034,3640,5901,6352,6355,9886,31059,34648,40188,40469,40474,40477,43238],"usedEvents":[]}],"src":"46:8740:91"},"id":91},"@balancer-labs/v3-vault/contracts/test/VaultAdminMock.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/test/VaultAdminMock.sol","exportedSymbols":{"IERC20":[40109],"IERC4626":[39833],"IVault":[3111],"IVaultAdminMock":[416],"PackedTokenBalance":[6344],"VaultAdmin":[24770],"VaultAdminMock":[35809]},"id":35810,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":35377,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:92"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":35379,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35810,"sourceUnit":40110,"src":"72:72:92","symbolAliases":[{"foreign":{"id":35378,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"81:6:92","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":35381,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35810,"sourceUnit":39834,"src":"145:75:92","symbolAliases":[{"foreign":{"id":35380,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39833,"src":"154:8:92","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/test/IVaultAdminMock.sol","file":"@balancer-labs/v3-interfaces/contracts/test/IVaultAdminMock.sol","id":35383,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35810,"sourceUnit":417,"src":"222:98:92","symbolAliases":[{"foreign":{"id":35382,"name":"IVaultAdminMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":416,"src":"231:15:92","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":35385,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35810,"sourceUnit":3112,"src":"321:81:92","symbolAliases":[{"foreign":{"id":35384,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"330:6:92","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","id":35387,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35810,"sourceUnit":6345,"src":"404:111:92","symbolAliases":[{"foreign":{"id":35386,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6344,"src":"413:18:92","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultAdmin.sol","file":"../VaultAdmin.sol","id":35389,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35810,"sourceUnit":24771,"src":"517:47:92","symbolAliases":[{"foreign":{"id":35388,"name":"VaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24770,"src":"526:10:92","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":35390,"name":"IVaultAdminMock","nameLocations":["593:15:92"],"nodeType":"IdentifierPath","referencedDeclaration":416,"src":"593:15:92"},"id":35391,"nodeType":"InheritanceSpecifier","src":"593:15:92"},{"baseName":{"id":35392,"name":"VaultAdmin","nameLocations":["610:10:92"],"nodeType":"IdentifierPath","referencedDeclaration":24770,"src":"610:10:92"},"id":35393,"nodeType":"InheritanceSpecifier","src":"610:10:92"}],"canonicalName":"VaultAdminMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":35809,"internalFunctionIDs":{"6467":1,"6488":2},"linearizedBaseContracts":[35809,24770,28149,5498,243,25606,39429,1824,39900,9942,28384,3768,4007,3401,416],"name":"VaultAdminMock","nameLocation":"575:14:92","nodeType":"ContractDefinition","nodes":[{"global":false,"id":35396,"libraryName":{"id":35394,"name":"PackedTokenBalance","nameLocations":["633:18:92"],"nodeType":"IdentifierPath","referencedDeclaration":6344,"src":"633:18:92"},"nodeType":"UsingForDirective","src":"627:37:92","typeName":{"id":35395,"name":"bytes32","nodeType":"ElementaryTypeName","src":"656:7:92","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"body":{"id":35417,"nodeType":"Block","src":"946:2:92","statements":[]},"id":35418,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":35410,"name":"mainVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35399,"src":"861:9:92","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},{"id":35411,"name":"pauseWindowDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35401,"src":"872:19:92","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":35412,"name":"bufferPeriodDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35403,"src":"893:20:92","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":35413,"name":"minTradeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35405,"src":"915:14:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":35414,"name":"minWrapAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35407,"src":"931:13:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35415,"kind":"baseConstructorSpecifier","modifierName":{"id":35409,"name":"VaultAdmin","nameLocations":["850:10:92"],"nodeType":"IdentifierPath","referencedDeclaration":24770,"src":"850:10:92"},"nodeType":"ModifierInvocation","src":"850:95:92"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":35408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35399,"mutability":"mutable","name":"mainVault","nameLocation":"698:9:92","nodeType":"VariableDeclaration","scope":35418,"src":"691:16:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":35398,"nodeType":"UserDefinedTypeName","pathNode":{"id":35397,"name":"IVault","nameLocations":["691:6:92"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"691:6:92"},"referencedDeclaration":3111,"src":"691:6:92","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":35401,"mutability":"mutable","name":"pauseWindowDuration","nameLocation":"724:19:92","nodeType":"VariableDeclaration","scope":35418,"src":"717:26:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":35400,"name":"uint32","nodeType":"ElementaryTypeName","src":"717:6:92","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":35403,"mutability":"mutable","name":"bufferPeriodDuration","nameLocation":"760:20:92","nodeType":"VariableDeclaration","scope":35418,"src":"753:27:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":35402,"name":"uint32","nodeType":"ElementaryTypeName","src":"753:6:92","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":35405,"mutability":"mutable","name":"minTradeAmount","nameLocation":"798:14:92","nodeType":"VariableDeclaration","scope":35418,"src":"790:22:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35404,"name":"uint256","nodeType":"ElementaryTypeName","src":"790:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35407,"mutability":"mutable","name":"minWrapAmount","nameLocation":"830:13:92","nodeType":"VariableDeclaration","scope":35418,"src":"822:21:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35406,"name":"uint256","nodeType":"ElementaryTypeName","src":"822:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"681:168:92"},"returnParameters":{"id":35416,"nodeType":"ParameterList","parameters":[],"src":"946:0:92"},"scope":35809,"src":"670:278:92","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[298],"body":{"id":35425,"nodeType":"Block","src":"991:38:92","statements":[{"expression":{"arguments":[{"hexValue":"74727565","id":35422,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1017:4:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":35421,"name":"_setVaultPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23199,"src":"1001:15:92","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bool_$returns$__$","typeString":"function (bool)"}},"id":35423,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1001:21:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35424,"nodeType":"ExpressionStatement","src":"1001:21:92"}]},"functionSelector":"071d8a02","id":35426,"implemented":true,"kind":"function","modifiers":[],"name":"manualPauseVault","nameLocation":"963:16:92","nodeType":"FunctionDefinition","parameters":{"id":35419,"nodeType":"ParameterList","parameters":[],"src":"979:2:92"},"returnParameters":{"id":35420,"nodeType":"ParameterList","parameters":[],"src":"991:0:92"},"scope":35809,"src":"954:75:92","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[301],"body":{"id":35433,"nodeType":"Block","src":"1074:39:92","statements":[{"expression":{"arguments":[{"hexValue":"66616c7365","id":35430,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1100:5:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":35429,"name":"_setVaultPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23199,"src":"1084:15:92","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bool_$returns$__$","typeString":"function (bool)"}},"id":35431,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1084:22:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35432,"nodeType":"ExpressionStatement","src":"1084:22:92"}]},"functionSelector":"cc671ff7","id":35434,"implemented":true,"kind":"function","modifiers":[],"name":"manualUnpauseVault","nameLocation":"1044:18:92","nodeType":"FunctionDefinition","parameters":{"id":35427,"nodeType":"ParameterList","parameters":[],"src":"1062:2:92"},"returnParameters":{"id":35428,"nodeType":"ParameterList","parameters":[],"src":"1074:0:92"},"scope":35809,"src":"1035:78:92","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[306],"body":{"id":35452,"nodeType":"Block","src":"1167:102:92","statements":[{"expression":{"id":35445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":35439,"name":"_poolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28231,"src":"1177:17:92","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolRoleAccounts_$4677_storage_$","typeString":"mapping(address => struct PoolRoleAccounts storage ref)"}},"id":35441,"indexExpression":{"id":35440,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35436,"src":"1195:4:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1177:23:92","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage","typeString":"struct PoolRoleAccounts storage ref"}},"id":35442,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1201:12:92","memberName":"pauseManager","nodeType":"MemberAccess","referencedDeclaration":4672,"src":"1177:36:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":35443,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1216:3:92","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":35444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1220:6:92","memberName":"sender","nodeType":"MemberAccess","src":"1216:10:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1177:49:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":35446,"nodeType":"ExpressionStatement","src":"1177:49:92"},{"expression":{"arguments":[{"id":35448,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35436,"src":"1251:4:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"74727565","id":35449,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1257:4:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":35447,"name":"_setPoolPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23303,"src":"1236:14:92","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":35450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1236:26:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35451,"nodeType":"ExpressionStatement","src":"1236:26:92"}]},"functionSelector":"1558356e","id":35453,"implemented":true,"kind":"function","modifiers":[],"name":"manualPausePool","nameLocation":"1128:15:92","nodeType":"FunctionDefinition","parameters":{"id":35437,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35436,"mutability":"mutable","name":"pool","nameLocation":"1152:4:92","nodeType":"VariableDeclaration","scope":35453,"src":"1144:12:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35435,"name":"address","nodeType":"ElementaryTypeName","src":"1144:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1143:14:92"},"returnParameters":{"id":35438,"nodeType":"ParameterList","parameters":[],"src":"1167:0:92"},"scope":35809,"src":"1119:150:92","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[311],"body":{"id":35471,"nodeType":"Block","src":"1325:103:92","statements":[{"expression":{"id":35464,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":35458,"name":"_poolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28231,"src":"1335:17:92","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolRoleAccounts_$4677_storage_$","typeString":"mapping(address => struct PoolRoleAccounts storage ref)"}},"id":35460,"indexExpression":{"id":35459,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35455,"src":"1353:4:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1335:23:92","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage","typeString":"struct PoolRoleAccounts storage ref"}},"id":35461,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"1359:12:92","memberName":"pauseManager","nodeType":"MemberAccess","referencedDeclaration":4672,"src":"1335:36:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":35462,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1374:3:92","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":35463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1378:6:92","memberName":"sender","nodeType":"MemberAccess","src":"1374:10:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1335:49:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":35465,"nodeType":"ExpressionStatement","src":"1335:49:92"},{"expression":{"arguments":[{"id":35467,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35455,"src":"1409:4:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"66616c7365","id":35468,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1415:5:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":35466,"name":"_setPoolPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23303,"src":"1394:14:92","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":35469,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1394:27:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35470,"nodeType":"ExpressionStatement","src":"1394:27:92"}]},"functionSelector":"52b9e33d","id":35472,"implemented":true,"kind":"function","modifiers":[],"name":"manualUnpausePool","nameLocation":"1284:17:92","nodeType":"FunctionDefinition","parameters":{"id":35456,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35455,"mutability":"mutable","name":"pool","nameLocation":"1310:4:92","nodeType":"VariableDeclaration","scope":35472,"src":"1302:12:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35454,"name":"address","nodeType":"ElementaryTypeName","src":"1302:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1301:14:92"},"returnParameters":{"id":35457,"nodeType":"ParameterList","parameters":[],"src":"1325:0:92"},"scope":35809,"src":"1275:153:92","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[316],"body":{"id":35486,"nodeType":"Block","src":"1491:93:92","statements":[{"expression":{"arguments":[{"id":35478,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35474,"src":"1530:4:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":35477,"name":"_ensurePoolNotInRecoveryMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23622,"src":"1501:28:92","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":35479,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1501:34:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35480,"nodeType":"ExpressionStatement","src":"1501:34:92"},{"expression":{"arguments":[{"id":35482,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35474,"src":"1566:4:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"74727565","id":35483,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1572:4:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":35481,"name":"_setPoolRecoveryMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23656,"src":"1545:20:92","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":35484,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1545:32:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35485,"nodeType":"ExpressionStatement","src":"1545:32:92"}]},"functionSelector":"27521d0c","id":35487,"implemented":true,"kind":"function","modifiers":[],"name":"manualEnableRecoveryMode","nameLocation":"1443:24:92","nodeType":"FunctionDefinition","parameters":{"id":35475,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35474,"mutability":"mutable","name":"pool","nameLocation":"1476:4:92","nodeType":"VariableDeclaration","scope":35487,"src":"1468:12:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35473,"name":"address","nodeType":"ElementaryTypeName","src":"1468:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1467:14:92"},"returnParameters":{"id":35476,"nodeType":"ParameterList","parameters":[],"src":"1491:0:92"},"scope":35809,"src":"1434:150:92","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[321],"body":{"id":35501,"nodeType":"Block","src":"1648:91:92","statements":[{"expression":{"arguments":[{"id":35493,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35489,"src":"1684:4:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":35492,"name":"_ensurePoolInRecoveryMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25574,"src":"1658:25:92","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":35494,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1658:31:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35495,"nodeType":"ExpressionStatement","src":"1658:31:92"},{"expression":{"arguments":[{"id":35497,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35489,"src":"1720:4:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"66616c7365","id":35498,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1726:5:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":35496,"name":"_setPoolRecoveryMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23656,"src":"1699:20:92","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bool_$returns$__$","typeString":"function (address,bool)"}},"id":35499,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1699:33:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35500,"nodeType":"ExpressionStatement","src":"1699:33:92"}]},"functionSelector":"7578abb9","id":35502,"implemented":true,"kind":"function","modifiers":[],"name":"manualDisableRecoveryMode","nameLocation":"1599:25:92","nodeType":"FunctionDefinition","parameters":{"id":35490,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35489,"mutability":"mutable","name":"pool","nameLocation":"1633:4:92","nodeType":"VariableDeclaration","scope":35502,"src":"1625:12:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35488,"name":"address","nodeType":"ElementaryTypeName","src":"1625:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1624:14:92"},"returnParameters":{"id":35491,"nodeType":"ParameterList","parameters":[],"src":"1648:0:92"},"scope":35809,"src":"1590:149:92","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[335],"body":{"id":35532,"nodeType":"Block","src":"1973:202:92","statements":[{"expression":{"arguments":[{"id":35525,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35505,"src":"2035:12:92","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":35526,"name":"amountUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35507,"src":"2061:16:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":35527,"name":"amountWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35509,"src":"2091:13:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":35528,"name":"minIssuedShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35511,"src":"2118:15:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":35529,"name":"sharesOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35513,"src":"2147:11:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[{"id":35521,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1998:4:92","typeDescriptions":{"typeIdentifier":"t_contract$_VaultAdminMock_$35809","typeString":"contract VaultAdminMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VaultAdminMock_$35809","typeString":"contract VaultAdminMock"}],"id":35520,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1990:7:92","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":35519,"name":"address","nodeType":"ElementaryTypeName","src":"1990:7:92","typeDescriptions":{}}},"id":35522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1990:13:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":35518,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"1983:6:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVault_$3111_$","typeString":"type(contract IVault)"}},"id":35523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1983:21:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":35524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2005:16:92","memberName":"initializeBuffer","nodeType":"MemberAccess","referencedDeclaration":3317,"src":"1983:38:92","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (contract IERC4626,uint256,uint256,uint256,address) external returns (uint256)"}},"id":35530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1983:185:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35531,"nodeType":"ExpressionStatement","src":"1983:185:92"}]},"functionSelector":"b61398cd","id":35533,"implemented":true,"kind":"function","modifiers":[{"id":35516,"kind":"modifierInvocation","modifierName":{"id":35515,"name":"nonReentrant","nameLocations":["1960:12:92"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"1960:12:92"},"nodeType":"ModifierInvocation","src":"1960:12:92"}],"name":"manualReentrancyInitializeBuffer","nameLocation":"1754:32:92","nodeType":"FunctionDefinition","parameters":{"id":35514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35505,"mutability":"mutable","name":"wrappedToken","nameLocation":"1805:12:92","nodeType":"VariableDeclaration","scope":35533,"src":"1796:21:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":35504,"nodeType":"UserDefinedTypeName","pathNode":{"id":35503,"name":"IERC4626","nameLocations":["1796:8:92"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"1796:8:92"},"referencedDeclaration":39833,"src":"1796:8:92","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":35507,"mutability":"mutable","name":"amountUnderlying","nameLocation":"1835:16:92","nodeType":"VariableDeclaration","scope":35533,"src":"1827:24:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35506,"name":"uint256","nodeType":"ElementaryTypeName","src":"1827:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35509,"mutability":"mutable","name":"amountWrapped","nameLocation":"1869:13:92","nodeType":"VariableDeclaration","scope":35533,"src":"1861:21:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35508,"name":"uint256","nodeType":"ElementaryTypeName","src":"1861:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35511,"mutability":"mutable","name":"minIssuedShares","nameLocation":"1900:15:92","nodeType":"VariableDeclaration","scope":35533,"src":"1892:23:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35510,"name":"uint256","nodeType":"ElementaryTypeName","src":"1892:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35513,"mutability":"mutable","name":"sharesOwner","nameLocation":"1933:11:92","nodeType":"VariableDeclaration","scope":35533,"src":"1925:19:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35512,"name":"address","nodeType":"ElementaryTypeName","src":"1925:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1786:164:92"},"returnParameters":{"id":35517,"nodeType":"ParameterList","parameters":[],"src":"1973:0:92"},"scope":35809,"src":"1745:430:92","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[346],"body":{"id":35671,"nodeType":"Block","src":"2420:1199:92","statements":[{"assignments":[35545],"declarations":[{"constant":false,"id":35545,"mutability":"mutable","name":"bufferBalances","nameLocation":"2438:14:92","nodeType":"VariableDeclaration","scope":35671,"src":"2430:22:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":35544,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2430:7:92","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":35549,"initialValue":{"baseExpression":{"id":35546,"name":"_bufferTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28292,"src":"2455:20:92","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_bytes32_$","typeString":"mapping(contract IERC4626 => bytes32)"}},"id":35548,"indexExpression":{"id":35547,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35537,"src":"2476:12:92","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2455:34:92","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"2430:59:92"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35550,"name":"underlyingAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35539,"src":"2504:16:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":35551,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2523:1:92","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2504:20:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35594,"nodeType":"IfStatement","src":"2500:410:92","trueBody":{"id":35593,"nodeType":"Block","src":"2526:384:92","statements":[{"expression":{"arguments":[{"expression":{"id":35559,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2582:3:92","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":35560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2586:6:92","memberName":"sender","nodeType":"MemberAccess","src":"2582:10:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":35563,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2602:4:92","typeDescriptions":{"typeIdentifier":"t_contract$_VaultAdminMock_$35809","typeString":"contract VaultAdminMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VaultAdminMock_$35809","typeString":"contract VaultAdminMock"}],"id":35562,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2594:7:92","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":35561,"name":"address","nodeType":"ElementaryTypeName","src":"2594:7:92","typeDescriptions":{}}},"id":35564,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2594:13:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":35565,"name":"underlyingAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35539,"src":"2609:16:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":35554,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35537,"src":"2547:12:92","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"id":35555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2560:5:92","memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":39702,"src":"2547:18:92","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":35556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2547:20:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":35553,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"2540:6:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":35557,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2540:28:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":35558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2569:12:92","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":40108,"src":"2540:41:92","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":35566,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2540:86:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35567,"nodeType":"ExpressionStatement","src":"2540:86:92"},{"expression":{"id":35576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":35568,"name":"_reservesOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28278,"src":"2640:11:92","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":35574,"indexExpression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":35570,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35537,"src":"2659:12:92","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"id":35571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2672:5:92","memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":39702,"src":"2659:18:92","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":35572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2659:20:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":35569,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"2652:6:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":35573,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2652:28:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2640:41:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":35575,"name":"underlyingAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35539,"src":"2685:16:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2640:61:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35577,"nodeType":"ExpressionStatement","src":"2640:61:92"},{"expression":{"id":35582,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":35578,"name":"_bufferTotalShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28304,"src":"2772:18:92","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_uint256_$","typeString":"mapping(contract IERC4626 => uint256)"}},"id":35580,"indexExpression":{"id":35579,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35537,"src":"2791:12:92","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2772:32:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":35581,"name":"underlyingAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35539,"src":"2808:16:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2772:52:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35583,"nodeType":"ExpressionStatement","src":"2772:52:92"},{"expression":{"id":35591,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":35584,"name":"_bufferLpShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28299,"src":"2838:15:92","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(contract IERC4626 => mapping(address => uint256))"}},"id":35588,"indexExpression":{"id":35585,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35537,"src":"2854:12:92","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2838:29:92","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":35589,"indexExpression":{"expression":{"id":35586,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2868:3:92","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":35587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2872:6:92","memberName":"sender","nodeType":"MemberAccess","src":"2868:10:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2838:41:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":35590,"name":"underlyingAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35539,"src":"2883:16:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2838:61:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35592,"nodeType":"ExpressionStatement","src":"2838:61:92"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":35595,"name":"wrappedAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35541,"src":"2923:13:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":35596,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2939:1:92","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2923:17:92","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35648,"nodeType":"IfStatement","src":"2919:434:92","trueBody":{"id":35647,"nodeType":"Block","src":"2942:411:92","statements":[{"expression":{"arguments":[{"expression":{"id":35605,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2999:3:92","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":35606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3003:6:92","memberName":"sender","nodeType":"MemberAccess","src":"2999:10:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":35609,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3019:4:92","typeDescriptions":{"typeIdentifier":"t_contract$_VaultAdminMock_$35809","typeString":"contract VaultAdminMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VaultAdminMock_$35809","typeString":"contract VaultAdminMock"}],"id":35608,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3011:7:92","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":35607,"name":"address","nodeType":"ElementaryTypeName","src":"3011:7:92","typeDescriptions":{}}},"id":35610,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3011:13:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":35611,"name":"wrappedAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35541,"src":"3026:13:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"arguments":[{"id":35601,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35537,"src":"2971:12:92","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}],"id":35600,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2963:7:92","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":35599,"name":"address","nodeType":"ElementaryTypeName","src":"2963:7:92","typeDescriptions":{}}},"id":35602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2963:21:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":35598,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"2956:6:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":35603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2956:29:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":35604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2986:12:92","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":40108,"src":"2956:42:92","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":35612,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2956:84:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":35613,"nodeType":"ExpressionStatement","src":"2956:84:92"},{"expression":{"id":35623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":35614,"name":"_reservesOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28278,"src":"3054:11:92","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":35621,"indexExpression":{"arguments":[{"arguments":[{"id":35618,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35537,"src":"3081:12:92","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}],"id":35617,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3073:7:92","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":35616,"name":"address","nodeType":"ElementaryTypeName","src":"3073:7:92","typeDescriptions":{}}},"id":35619,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3073:21:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":35615,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"3066:6:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":35620,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3066:29:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3054:42:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":35622,"name":"wrappedAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35541,"src":"3100:13:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3054:59:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35624,"nodeType":"ExpressionStatement","src":"3054:59:92"},{"assignments":[35626],"declarations":[{"constant":false,"id":35626,"mutability":"mutable","name":"issuedSharesAmount","nameLocation":"3135:18:92","nodeType":"VariableDeclaration","scope":35647,"src":"3127:26:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35625,"name":"uint256","nodeType":"ElementaryTypeName","src":"3127:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":35631,"initialValue":{"arguments":[{"id":35629,"name":"wrappedAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35541,"src":"3183:13:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":35627,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35537,"src":"3156:12:92","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"id":35628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3169:13:92","memberName":"previewRedeem","nodeType":"MemberAccess","referencedDeclaration":39820,"src":"3156:26:92","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view external returns (uint256)"}},"id":35630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3156:41:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3127:70:92"},{"expression":{"id":35636,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":35632,"name":"_bufferTotalShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28304,"src":"3211:18:92","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_uint256_$","typeString":"mapping(contract IERC4626 => uint256)"}},"id":35634,"indexExpression":{"id":35633,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35537,"src":"3230:12:92","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3211:32:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":35635,"name":"issuedSharesAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35626,"src":"3247:18:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3211:54:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35637,"nodeType":"ExpressionStatement","src":"3211:54:92"},{"expression":{"id":35645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":35638,"name":"_bufferLpShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28299,"src":"3279:15:92","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(contract IERC4626 => mapping(address => uint256))"}},"id":35642,"indexExpression":{"id":35639,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35537,"src":"3295:12:92","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3279:29:92","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":35643,"indexExpression":{"expression":{"id":35640,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3309:3:92","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":35641,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3313:6:92","memberName":"sender","nodeType":"MemberAccess","src":"3309:10:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3279:41:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":35644,"name":"issuedSharesAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35626,"src":"3324:18:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3279:63:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35646,"nodeType":"ExpressionStatement","src":"3279:63:92"}]}},{"expression":{"id":35663,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":35649,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35545,"src":"3363:14:92","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":35652,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35545,"src":"3428:14:92","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":35653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3443:13:92","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":6222,"src":"3428:28:92","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":35654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3428:30:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":35655,"name":"underlyingAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35539,"src":"3461:16:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3428:49:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":35661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":35657,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35545,"src":"3491:14:92","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":35658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3506:17:92","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":6239,"src":"3491:32:92","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":35659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3491:34:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":35660,"name":"wrappedAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35541,"src":"3528:13:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3491:50:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":35650,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6344,"src":"3380:18:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PackedTokenBalance_$6344_$","typeString":"type(library PackedTokenBalance)"}},"id":35651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3399:15:92","memberName":"toPackedBalance","nodeType":"MemberAccess","referencedDeclaration":6303,"src":"3380:34:92","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":35662,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3380:171:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3363:188:92","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":35664,"nodeType":"ExpressionStatement","src":"3363:188:92"},{"expression":{"id":35669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":35665,"name":"_bufferTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28292,"src":"3561:20:92","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_bytes32_$","typeString":"mapping(contract IERC4626 => bytes32)"}},"id":35667,"indexExpression":{"id":35666,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35537,"src":"3582:12:92","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3561:34:92","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":35668,"name":"bufferBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35545,"src":"3598:14:92","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3561:51:92","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":35670,"nodeType":"ExpressionStatement","src":"3561:51:92"}]},"documentation":{"id":35534,"nodeType":"StructuredDocumentation","src":"2181:77:92","text":"@dev Adds liquidity to buffer unbalanced, so it can unbalance the buffer."},"functionSelector":"1f568ea3","id":35672,"implemented":true,"kind":"function","modifiers":[],"name":"addLiquidityToBufferUnbalancedForTests","nameLocation":"2272:38:92","nodeType":"FunctionDefinition","parameters":{"id":35542,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35537,"mutability":"mutable","name":"wrappedToken","nameLocation":"2329:12:92","nodeType":"VariableDeclaration","scope":35672,"src":"2320:21:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":35536,"nodeType":"UserDefinedTypeName","pathNode":{"id":35535,"name":"IERC4626","nameLocations":["2320:8:92"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"2320:8:92"},"referencedDeclaration":39833,"src":"2320:8:92","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":35539,"mutability":"mutable","name":"underlyingAmount","nameLocation":"2359:16:92","nodeType":"VariableDeclaration","scope":35672,"src":"2351:24:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35538,"name":"uint256","nodeType":"ElementaryTypeName","src":"2351:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35541,"mutability":"mutable","name":"wrappedAmount","nameLocation":"2393:13:92","nodeType":"VariableDeclaration","scope":35672,"src":"2385:21:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35540,"name":"uint256","nodeType":"ElementaryTypeName","src":"2385:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2310:102:92"},"returnParameters":{"id":35543,"nodeType":"ParameterList","parameters":[],"src":"2420:0:92"},"scope":35809,"src":"2263:1356:92","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[360],"body":{"id":35702,"nodeType":"Block","src":"3876:225:92","statements":[{"expression":{"arguments":[{"id":35695,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35675,"src":"3942:12:92","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":35696,"name":"maxAmountUnderlyingInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35677,"src":"3968:24:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":35697,"name":"maxAmountWrappedInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35679,"src":"4006:21:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":35698,"name":"exactSharesToIssue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35681,"src":"4041:18:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":35699,"name":"sharesOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35683,"src":"4073:11:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[{"arguments":[{"id":35691,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3901:4:92","typeDescriptions":{"typeIdentifier":"t_contract$_VaultAdminMock_$35809","typeString":"contract VaultAdminMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VaultAdminMock_$35809","typeString":"contract VaultAdminMock"}],"id":35690,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3893:7:92","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":35689,"name":"address","nodeType":"ElementaryTypeName","src":"3893:7:92","typeDescriptions":{}}},"id":35692,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3893:13:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":35688,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"3886:6:92","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVault_$3111_$","typeString":"type(contract IVault)"}},"id":35693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3886:21:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":35694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3908:20:92","memberName":"addLiquidityToBuffer","nodeType":"MemberAccess","referencedDeclaration":3336,"src":"3886:42:92","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$returns$_t_uint256_$_t_uint256_$","typeString":"function (contract IERC4626,uint256,uint256,uint256,address) external returns (uint256,uint256)"}},"id":35700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3886:208:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"id":35701,"nodeType":"ExpressionStatement","src":"3886:208:92"}]},"functionSelector":"9260d920","id":35703,"implemented":true,"kind":"function","modifiers":[{"id":35686,"kind":"modifierInvocation","modifierName":{"id":35685,"name":"nonReentrant","nameLocations":["3863:12:92"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"3863:12:92"},"nodeType":"ModifierInvocation","src":"3863:12:92"}],"name":"manualReentrancyAddLiquidityToBuffer","nameLocation":"3634:36:92","nodeType":"FunctionDefinition","parameters":{"id":35684,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35675,"mutability":"mutable","name":"wrappedToken","nameLocation":"3689:12:92","nodeType":"VariableDeclaration","scope":35703,"src":"3680:21:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":35674,"nodeType":"UserDefinedTypeName","pathNode":{"id":35673,"name":"IERC4626","nameLocations":["3680:8:92"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"3680:8:92"},"referencedDeclaration":39833,"src":"3680:8:92","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":35677,"mutability":"mutable","name":"maxAmountUnderlyingInRaw","nameLocation":"3719:24:92","nodeType":"VariableDeclaration","scope":35703,"src":"3711:32:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35676,"name":"uint256","nodeType":"ElementaryTypeName","src":"3711:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35679,"mutability":"mutable","name":"maxAmountWrappedInRaw","nameLocation":"3761:21:92","nodeType":"VariableDeclaration","scope":35703,"src":"3753:29:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35678,"name":"uint256","nodeType":"ElementaryTypeName","src":"3753:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35681,"mutability":"mutable","name":"exactSharesToIssue","nameLocation":"3800:18:92","nodeType":"VariableDeclaration","scope":35703,"src":"3792:26:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35680,"name":"uint256","nodeType":"ElementaryTypeName","src":"3792:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35683,"mutability":"mutable","name":"sharesOwner","nameLocation":"3836:11:92","nodeType":"VariableDeclaration","scope":35703,"src":"3828:19:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35682,"name":"address","nodeType":"ElementaryTypeName","src":"3828:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3670:183:92"},"returnParameters":{"id":35687,"nodeType":"ParameterList","parameters":[],"src":"3876:0:92"},"scope":35809,"src":"3625:476:92","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[374],"body":{"id":35729,"nodeType":"Block","src":"4359:209:92","statements":[{"expression":{"arguments":[{"id":35722,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35706,"src":"4417:12:92","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":35723,"name":"sharesToRemove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35708,"src":"4443:14:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":35724,"name":"minAmountUnderlyingOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35710,"src":"4471:22:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":35725,"name":"minAmountWrappedOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35712,"src":"4507:19:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":35726,"name":"sharesOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35714,"src":"4540:11:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":35719,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4369:4:92","typeDescriptions":{"typeIdentifier":"t_contract$_VaultAdminMock_$35809","typeString":"contract VaultAdminMock"}},"id":35721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4374:29:92","memberName":"removeLiquidityFromBufferHook","nodeType":"MemberAccess","referencedDeclaration":24427,"src":"4369:34:92","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC4626_$39833_$_t_uint256_$_t_uint256_$_t_uint256_$_t_address_$returns$_t_uint256_$_t_uint256_$","typeString":"function (contract IERC4626,uint256,uint256,uint256,address) external returns (uint256,uint256)"}},"id":35727,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4369:192:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"id":35728,"nodeType":"ExpressionStatement","src":"4369:192:92"}]},"functionSelector":"c7b3b3a9","id":35730,"implemented":true,"kind":"function","modifiers":[{"id":35717,"kind":"modifierInvocation","modifierName":{"id":35716,"name":"nonReentrant","nameLocations":["4346:12:92"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"4346:12:92"},"nodeType":"ModifierInvocation","src":"4346:12:92"}],"name":"manualReentrancyRemoveLiquidityFromBufferHook","nameLocation":"4116:45:92","nodeType":"FunctionDefinition","parameters":{"id":35715,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35706,"mutability":"mutable","name":"wrappedToken","nameLocation":"4180:12:92","nodeType":"VariableDeclaration","scope":35730,"src":"4171:21:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":35705,"nodeType":"UserDefinedTypeName","pathNode":{"id":35704,"name":"IERC4626","nameLocations":["4171:8:92"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"4171:8:92"},"referencedDeclaration":39833,"src":"4171:8:92","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":35708,"mutability":"mutable","name":"sharesToRemove","nameLocation":"4210:14:92","nodeType":"VariableDeclaration","scope":35730,"src":"4202:22:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35707,"name":"uint256","nodeType":"ElementaryTypeName","src":"4202:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35710,"mutability":"mutable","name":"minAmountUnderlyingOut","nameLocation":"4242:22:92","nodeType":"VariableDeclaration","scope":35730,"src":"4234:30:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35709,"name":"uint256","nodeType":"ElementaryTypeName","src":"4234:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35712,"mutability":"mutable","name":"minAmountWrappedOut","nameLocation":"4282:19:92","nodeType":"VariableDeclaration","scope":35730,"src":"4274:27:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35711,"name":"uint256","nodeType":"ElementaryTypeName","src":"4274:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35714,"mutability":"mutable","name":"sharesOwner","nameLocation":"4319:11:92","nodeType":"VariableDeclaration","scope":35730,"src":"4311:19:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35713,"name":"address","nodeType":"ElementaryTypeName","src":"4311:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4161:175:92"},"returnParameters":{"id":35718,"nodeType":"ParameterList","parameters":[],"src":"4359:0:92"},"scope":35809,"src":"4107:461:92","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[379],"body":{"id":35743,"nodeType":"Block","src":"4655:47:92","statements":[{"expression":{"arguments":[{"id":35740,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35732,"src":"4690:4:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":35737,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4665:4:92","typeDescriptions":{"typeIdentifier":"t_contract$_VaultAdminMock_$35809","typeString":"contract VaultAdminMock"}},"id":35739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4670:19:92","memberName":"disableRecoveryMode","nodeType":"MemberAccess","referencedDeclaration":23606,"src":"4665:24:92","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$returns$__$","typeString":"function (address) external"}},"id":35741,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4665:30:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35742,"nodeType":"ExpressionStatement","src":"4665:30:92"}]},"functionSelector":"16df26cb","id":35744,"implemented":true,"kind":"function","modifiers":[{"id":35735,"kind":"modifierInvocation","modifierName":{"id":35734,"name":"nonReentrant","nameLocations":["4642:12:92"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"4642:12:92"},"nodeType":"ModifierInvocation","src":"4642:12:92"}],"name":"manualReentrancyDisableRecoveryMode","nameLocation":"4583:35:92","nodeType":"FunctionDefinition","parameters":{"id":35733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35732,"mutability":"mutable","name":"pool","nameLocation":"4627:4:92","nodeType":"VariableDeclaration","scope":35744,"src":"4619:12:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35731,"name":"address","nodeType":"ElementaryTypeName","src":"4619:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4618:14:92"},"returnParameters":{"id":35736,"nodeType":"ParameterList","parameters":[],"src":"4655:0:92"},"scope":35809,"src":"4574:128:92","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[384],"body":{"id":35752,"nodeType":"Block","src":"4807:64:92","statements":[]},"functionSelector":"88e5101a","id":35753,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":35749,"name":"percentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35746,"src":"4795:10:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":35750,"kind":"modifierInvocation","modifierName":{"id":35748,"name":"withValidPercentage","nameLocations":["4775:19:92"],"nodeType":"IdentifierPath","referencedDeclaration":22916,"src":"4775:19:92"},"nodeType":"ModifierInvocation","src":"4775:31:92"}],"name":"mockWithValidPercentage","nameLocation":"4717:23:92","nodeType":"FunctionDefinition","parameters":{"id":35747,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35746,"mutability":"mutable","name":"percentage","nameLocation":"4749:10:92","nodeType":"VariableDeclaration","scope":35753,"src":"4741:18:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35745,"name":"uint256","nodeType":"ElementaryTypeName","src":"4741:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4740:20:92"},"returnParameters":{"id":35751,"nodeType":"ParameterList","parameters":[],"src":"4807:0:92"},"scope":35809,"src":"4708:163:92","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[389],"body":{"id":35762,"nodeType":"Block","src":"4946:51:92","statements":[{"expression":{"arguments":[{"id":35759,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35755,"src":"4985:4:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":35758,"name":"_ensurePoolNotInRecoveryMode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23622,"src":"4956:28:92","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":35760,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4956:34:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35761,"nodeType":"ExpressionStatement","src":"4956:34:92"}]},"functionSelector":"0b9df1f6","id":35763,"implemented":true,"kind":"function","modifiers":[],"name":"mockEnsurePoolNotInRecoveryMode","nameLocation":"4886:31:92","nodeType":"FunctionDefinition","parameters":{"id":35756,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35755,"mutability":"mutable","name":"pool","nameLocation":"4926:4:92","nodeType":"VariableDeclaration","scope":35763,"src":"4918:12:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35754,"name":"address","nodeType":"ElementaryTypeName","src":"4918:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4917:14:92"},"returnParameters":{"id":35757,"nodeType":"ParameterList","parameters":[],"src":"4946:0:92"},"scope":35809,"src":"4877:120:92","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[399],"body":{"id":35779,"nodeType":"Block","src":"5095:60:92","statements":[{"expression":{"arguments":[{"id":35774,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35766,"src":"5123:12:92","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":35775,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35768,"src":"5137:2:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":35776,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35770,"src":"5141:6:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":35773,"name":"_mintBufferShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24192,"src":"5105:17:92","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC4626_$39833_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC4626,address,uint256)"}},"id":35777,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5105:43:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35778,"nodeType":"ExpressionStatement","src":"5105:43:92"}]},"functionSelector":"6b230291","id":35780,"implemented":true,"kind":"function","modifiers":[],"name":"manualMintBufferShares","nameLocation":"5012:22:92","nodeType":"FunctionDefinition","parameters":{"id":35771,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35766,"mutability":"mutable","name":"wrappedToken","nameLocation":"5044:12:92","nodeType":"VariableDeclaration","scope":35780,"src":"5035:21:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":35765,"nodeType":"UserDefinedTypeName","pathNode":{"id":35764,"name":"IERC4626","nameLocations":["5035:8:92"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"5035:8:92"},"referencedDeclaration":39833,"src":"5035:8:92","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":35768,"mutability":"mutable","name":"to","nameLocation":"5066:2:92","nodeType":"VariableDeclaration","scope":35780,"src":"5058:10:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35767,"name":"address","nodeType":"ElementaryTypeName","src":"5058:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35770,"mutability":"mutable","name":"amount","nameLocation":"5078:6:92","nodeType":"VariableDeclaration","scope":35780,"src":"5070:14:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35769,"name":"uint256","nodeType":"ElementaryTypeName","src":"5070:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5034:51:92"},"returnParameters":{"id":35772,"nodeType":"ParameterList","parameters":[],"src":"5095:0:92"},"scope":35809,"src":"5003:152:92","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[409],"body":{"id":35796,"nodeType":"Block","src":"5255:62:92","statements":[{"expression":{"arguments":[{"id":35791,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35783,"src":"5283:12:92","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":35792,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35785,"src":"5297:4:92","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":35793,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35787,"src":"5303:6:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":35790,"name":"_burnBufferShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24481,"src":"5265:17:92","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC4626_$39833_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC4626,address,uint256)"}},"id":35794,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5265:45:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35795,"nodeType":"ExpressionStatement","src":"5265:45:92"}]},"functionSelector":"e8338894","id":35797,"implemented":true,"kind":"function","modifiers":[],"name":"manualBurnBufferShares","nameLocation":"5170:22:92","nodeType":"FunctionDefinition","parameters":{"id":35788,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35783,"mutability":"mutable","name":"wrappedToken","nameLocation":"5202:12:92","nodeType":"VariableDeclaration","scope":35797,"src":"5193:21:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":35782,"nodeType":"UserDefinedTypeName","pathNode":{"id":35781,"name":"IERC4626","nameLocations":["5193:8:92"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"5193:8:92"},"referencedDeclaration":39833,"src":"5193:8:92","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":35785,"mutability":"mutable","name":"from","nameLocation":"5224:4:92","nodeType":"VariableDeclaration","scope":35797,"src":"5216:12:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35784,"name":"address","nodeType":"ElementaryTypeName","src":"5216:7:92","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35787,"mutability":"mutable","name":"amount","nameLocation":"5238:6:92","nodeType":"VariableDeclaration","scope":35797,"src":"5230:14:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35786,"name":"uint256","nodeType":"ElementaryTypeName","src":"5230:7:92","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5192:53:92"},"returnParameters":{"id":35789,"nodeType":"ParameterList","parameters":[],"src":"5255:0:92"},"scope":35809,"src":"5161:156:92","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[415],"body":{"id":35807,"nodeType":"Block","src":"5401:62:92","statements":[{"expression":{"arguments":[{"id":35804,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35800,"src":"5443:12:92","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}],"id":35803,"name":"_mintMinimumBufferSupplyReserve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24138,"src":"5411:31:92","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC4626_$39833_$returns$__$","typeString":"function (contract IERC4626)"}},"id":35805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5411:45:92","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35806,"nodeType":"ExpressionStatement","src":"5411:45:92"}]},"functionSelector":"e99ac9a3","id":35808,"implemented":true,"kind":"function","modifiers":[],"name":"manualMintMinimumBufferSupplyReserve","nameLocation":"5332:36:92","nodeType":"FunctionDefinition","parameters":{"id":35801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35800,"mutability":"mutable","name":"wrappedToken","nameLocation":"5378:12:92","nodeType":"VariableDeclaration","scope":35808,"src":"5369:21:92","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":35799,"nodeType":"UserDefinedTypeName","pathNode":{"id":35798,"name":"IERC4626","nameLocations":["5369:8:92"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"5369:8:92"},"referencedDeclaration":39833,"src":"5369:8:92","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"5368:23:92"},"returnParameters":{"id":35802,"nodeType":"ParameterList","parameters":[],"src":"5401:0:92"},"scope":35809,"src":"5323:140:92","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":35810,"src":"566:4899:92","usedErrors":[234,1823,3413,3418,3423,3428,3437,3443,3446,3449,3452,3455,3458,3461,3470,3473,3476,3479,3482,3485,3488,3491,3494,3497,3500,3503,3506,3509,3512,3518,3525,3532,3535,3538,3548,3558,3565,3568,3571,3574,3584,3594,3601,3604,3607,3610,3613,3616,3619,3622,3625,3630,3635,3640,3643,3646,3649,3652,3655,3660,3665,3670,3676,3682,3685,3693,3699,3705,3708,3711,3714,3719,3729,3739,3746,3749,3752,3755,3758,3761,3764,3767,5792,6207,7498,7501,7917,9886,39870,39875,39880,39889,39894,39899,43238,43255],"usedEvents":[3806,3811,3830,3842,3854,3872,3890,3895,3898,3901,3908,3915,3922,3929,3936,3942,3948,3960,3970,3980,3992,3997,4006,38865,38876]}],"src":"46:5420:92"},"id":92},"@balancer-labs/v3-vault/contracts/test/VaultExtensionMock.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/test/VaultExtensionMock.sol","exportedSymbols":{"IERC20":[40109],"IVault":[3111],"IVaultAdmin":[3401],"IVaultExtensionMock":[473],"LiquidityManagement":[4580],"PoolConfigBits":[4582],"PoolConfigLib":[30441],"PoolRoleAccounts":[4677],"TokenConfig":[4694],"VaultExtension":[28100],"VaultExtensionMock":[35961]},"id":35962,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":35811,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:93"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":35813,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35962,"sourceUnit":40110,"src":"72:72:93","symbolAliases":[{"foreign":{"id":35812,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"81:6:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":35817,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35962,"sourceUnit":4872,"src":"146:141:93","symbolAliases":[{"foreign":{"id":35814,"name":"TokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4694,"src":"159:11:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":35815,"name":"PoolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4677,"src":"176:16:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":35816,"name":"LiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4580,"src":"198:19:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/test/IVaultExtensionMock.sol","file":"@balancer-labs/v3-interfaces/contracts/test/IVaultExtensionMock.sol","id":35819,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35962,"sourceUnit":474,"src":"288:106:93","symbolAliases":[{"foreign":{"id":35818,"name":"IVaultExtensionMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":473,"src":"297:19:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","id":35821,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35962,"sourceUnit":3402,"src":"395:91:93","symbolAliases":[{"foreign":{"id":35820,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3401,"src":"404:11:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":35823,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35962,"sourceUnit":3112,"src":"487:81:93","symbolAliases":[{"foreign":{"id":35822,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"496:6:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/PoolConfigLib.sol","file":"../lib/PoolConfigLib.sol","id":35826,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35962,"sourceUnit":30442,"src":"570:73:93","symbolAliases":[{"foreign":{"id":35824,"name":"PoolConfigLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30441,"src":"579:13:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":35825,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"594:14:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultExtension.sol","file":"../VaultExtension.sol","id":35828,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":35962,"sourceUnit":28101,"src":"644:55:93","symbolAliases":[{"foreign":{"id":35827,"name":"VaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28100,"src":"653:14:93","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":35829,"name":"IVaultExtensionMock","nameLocations":["732:19:93"],"nodeType":"IdentifierPath","referencedDeclaration":473,"src":"732:19:93"},"id":35830,"nodeType":"InheritanceSpecifier","src":"732:19:93"},{"baseName":{"id":35831,"name":"VaultExtension","nameLocations":["753:14:93"],"nodeType":"IdentifierPath","referencedDeclaration":28100,"src":"753:14:93"},"id":35832,"nodeType":"InheritanceSpecifier","src":"753:14:93"}],"canonicalName":"VaultExtensionMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":35961,"internalFunctionIDs":{"6467":1,"6488":2},"linearizedBaseContracts":[35961,28100,40031,25606,39429,1824,39900,9942,28384,3768,4007,4426,473],"name":"VaultExtensionMock","nameLocation":"710:18:93","nodeType":"ContractDefinition","nodes":[{"global":false,"id":35836,"libraryName":{"id":35833,"name":"PoolConfigLib","nameLocations":["780:13:93"],"nodeType":"IdentifierPath","referencedDeclaration":30441,"src":"780:13:93"},"nodeType":"UsingForDirective","src":"774:39:93","typeName":{"id":35835,"nodeType":"UserDefinedTypeName","pathNode":{"id":35834,"name":"PoolConfigBits","nameLocations":["798:14:93"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"798:14:93"},"referencedDeclaration":4582,"src":"798:14:93","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}},{"body":{"id":35849,"nodeType":"Block","src":"903:2:93","statements":[]},"id":35850,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":35845,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35839,"src":"884:5:93","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},{"id":35846,"name":"vaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35842,"src":"891:10:93","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultAdmin_$3401","typeString":"contract IVaultAdmin"}}],"id":35847,"kind":"baseConstructorSpecifier","modifierName":{"id":35844,"name":"VaultExtension","nameLocations":["869:14:93"],"nodeType":"IdentifierPath","referencedDeclaration":28100,"src":"869:14:93"},"nodeType":"ModifierInvocation","src":"869:33:93"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":35843,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35839,"mutability":"mutable","name":"vault","nameLocation":"838:5:93","nodeType":"VariableDeclaration","scope":35850,"src":"831:12:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":35838,"nodeType":"UserDefinedTypeName","pathNode":{"id":35837,"name":"IVault","nameLocations":["831:6:93"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"831:6:93"},"referencedDeclaration":3111,"src":"831:6:93","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":35842,"mutability":"mutable","name":"vaultAdmin","nameLocation":"857:10:93","nodeType":"VariableDeclaration","scope":35850,"src":"845:22:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultAdmin_$3401","typeString":"contract IVaultAdmin"},"typeName":{"id":35841,"nodeType":"UserDefinedTypeName","pathNode":{"id":35840,"name":"IVaultAdmin","nameLocations":["845:11:93"],"nodeType":"IdentifierPath","referencedDeclaration":3401,"src":"845:11:93"},"referencedDeclaration":3401,"src":"845:11:93","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultAdmin_$3401","typeString":"contract IVaultAdmin"}},"visibility":"internal"}],"src":"830:38:93"},"returnParameters":{"id":35848,"nodeType":"ParameterList","parameters":[],"src":"903:0:93"},"scope":35961,"src":"819:86:93","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":35861,"nodeType":"Block","src":"995:40:93","statements":[{"expression":{"arguments":[{"id":35858,"name":"input","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35852,"src":"1022:5:93","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}],"id":35857,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"1012:9:93","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":35859,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1012:16:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":35856,"id":35860,"nodeType":"Return","src":"1005:23:93"}]},"functionSelector":"590e8145","id":35862,"implemented":true,"kind":"function","modifiers":[],"name":"mockExtensionHash","nameLocation":"920:17:93","nodeType":"FunctionDefinition","parameters":{"id":35853,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35852,"mutability":"mutable","name":"input","nameLocation":"953:5:93","nodeType":"VariableDeclaration","scope":35862,"src":"938:20:93","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":35851,"name":"bytes","nodeType":"ElementaryTypeName","src":"938:5:93","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"937:22:93"},"returnParameters":{"id":35856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35855,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":35862,"src":"986:7:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":35854,"name":"bytes32","nodeType":"ElementaryTypeName","src":"986:7:93","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"985:9:93"},"scope":35961,"src":"911:124:93","stateMutability":"payable","virtual":false,"visibility":"external"},{"baseFunctions":[431],"body":{"id":35880,"nodeType":"Block","src":"1112:101:93","statements":[{"expression":{"id":35878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":35869,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"1122:15:93","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":35871,"indexExpression":{"id":35870,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35864,"src":"1138:4:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1122:21:93","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":35876,"name":"newSwapFee","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35866,"src":"1195:10:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":35872,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"1146:15:93","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":35874,"indexExpression":{"id":35873,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35864,"src":"1162:4:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1146:21:93","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":35875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1168:26:93","memberName":"setStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":30101,"src":"1146:48:93","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_uint256_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,uint256) pure returns (PoolConfigBits)"}},"id":35877,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1146:60:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"1122:84:93","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":35879,"nodeType":"ExpressionStatement","src":"1122:84:93"}]},"functionSelector":"70600089","id":35881,"implemented":true,"kind":"function","modifiers":[],"name":"manuallySetSwapFee","nameLocation":"1050:18:93","nodeType":"FunctionDefinition","parameters":{"id":35867,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35864,"mutability":"mutable","name":"pool","nameLocation":"1077:4:93","nodeType":"VariableDeclaration","scope":35881,"src":"1069:12:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35863,"name":"address","nodeType":"ElementaryTypeName","src":"1069:7:93","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35866,"mutability":"mutable","name":"newSwapFee","nameLocation":"1091:10:93","nodeType":"VariableDeclaration","scope":35881,"src":"1083:18:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35865,"name":"uint256","nodeType":"ElementaryTypeName","src":"1083:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1068:34:93"},"returnParameters":{"id":35868,"nodeType":"ParameterList","parameters":[],"src":"1112:0:93"},"scope":35961,"src":"1041:172:93","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[454],"body":{"id":35923,"nodeType":"Block","src":"1592:288:93","statements":[{"expression":{"arguments":[{"id":35913,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35883,"src":"1650:4:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":35914,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35887,"src":"1668:11:93","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},{"id":35915,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35889,"src":"1693:17:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":35916,"name":"pauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35891,"src":"1724:18:93","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":35917,"name":"protocolFeeExempt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35893,"src":"1756:17:93","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":35918,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35896,"src":"1787:12:93","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_calldata_ptr","typeString":"struct PoolRoleAccounts calldata"}},{"id":35919,"name":"poolHooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35898,"src":"1813:17:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":35920,"name":"liquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35901,"src":"1844:19:93","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_calldata_ptr","typeString":"struct LiquidityManagement calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_calldata_ptr","typeString":"struct PoolRoleAccounts calldata"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_calldata_ptr","typeString":"struct LiquidityManagement calldata"}],"expression":{"arguments":[{"arguments":[{"id":35909,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1617:4:93","typeDescriptions":{"typeIdentifier":"t_contract$_VaultExtensionMock_$35961","typeString":"contract VaultExtensionMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VaultExtensionMock_$35961","typeString":"contract VaultExtensionMock"}],"id":35908,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1609:7:93","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":35907,"name":"address","nodeType":"ElementaryTypeName","src":"1609:7:93","typeDescriptions":{}}},"id":35910,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1609:13:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":35906,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"1602:6:93","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVault_$3111_$","typeString":"type(contract IVault)"}},"id":35911,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1602:21:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":35912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1624:12:93","memberName":"registerPool","nodeType":"MemberAccess","referencedDeclaration":4098,"src":"1602:34:93","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$_t_uint256_$_t_uint32_$_t_bool_$_t_struct$_PoolRoleAccounts_$4677_memory_ptr_$_t_address_$_t_struct$_LiquidityManagement_$4580_memory_ptr_$returns$__$","typeString":"function (address,struct TokenConfig memory[] memory,uint256,uint32,bool,struct PoolRoleAccounts memory,address,struct LiquidityManagement memory) external"}},"id":35921,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1602:271:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":35922,"nodeType":"ExpressionStatement","src":"1602:271:93"}]},"functionSelector":"e68010c6","id":35924,"implemented":true,"kind":"function","modifiers":[{"id":35904,"kind":"modifierInvocation","modifierName":{"id":35903,"name":"nonReentrant","nameLocations":["1579:12:93"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"1579:12:93"},"nodeType":"ModifierInvocation","src":"1579:12:93"}],"name":"manualRegisterPoolReentrancy","nameLocation":"1228:28:93","nodeType":"FunctionDefinition","parameters":{"id":35902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35883,"mutability":"mutable","name":"pool","nameLocation":"1274:4:93","nodeType":"VariableDeclaration","scope":35924,"src":"1266:12:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35882,"name":"address","nodeType":"ElementaryTypeName","src":"1266:7:93","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35887,"mutability":"mutable","name":"tokenConfig","nameLocation":"1309:11:93","nodeType":"VariableDeclaration","scope":35924,"src":"1288:32:93","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":35885,"nodeType":"UserDefinedTypeName","pathNode":{"id":35884,"name":"TokenConfig","nameLocations":["1288:11:93"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"1288:11:93"},"referencedDeclaration":4694,"src":"1288:11:93","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":35886,"nodeType":"ArrayTypeName","src":"1288:13:93","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":35889,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"1338:17:93","nodeType":"VariableDeclaration","scope":35924,"src":"1330:25:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35888,"name":"uint256","nodeType":"ElementaryTypeName","src":"1330:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35891,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"1372:18:93","nodeType":"VariableDeclaration","scope":35924,"src":"1365:25:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":35890,"name":"uint32","nodeType":"ElementaryTypeName","src":"1365:6:93","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":35893,"mutability":"mutable","name":"protocolFeeExempt","nameLocation":"1405:17:93","nodeType":"VariableDeclaration","scope":35924,"src":"1400:22:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":35892,"name":"bool","nodeType":"ElementaryTypeName","src":"1400:4:93","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":35896,"mutability":"mutable","name":"roleAccounts","nameLocation":"1458:12:93","nodeType":"VariableDeclaration","scope":35924,"src":"1432:38:93","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_calldata_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":35895,"nodeType":"UserDefinedTypeName","pathNode":{"id":35894,"name":"PoolRoleAccounts","nameLocations":["1432:16:93"],"nodeType":"IdentifierPath","referencedDeclaration":4677,"src":"1432:16:93"},"referencedDeclaration":4677,"src":"1432:16:93","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":35898,"mutability":"mutable","name":"poolHooksContract","nameLocation":"1488:17:93","nodeType":"VariableDeclaration","scope":35924,"src":"1480:25:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35897,"name":"address","nodeType":"ElementaryTypeName","src":"1480:7:93","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35901,"mutability":"mutable","name":"liquidityManagement","nameLocation":"1544:19:93","nodeType":"VariableDeclaration","scope":35924,"src":"1515:48:93","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":35900,"nodeType":"UserDefinedTypeName","pathNode":{"id":35899,"name":"LiquidityManagement","nameLocations":["1515:19:93"],"nodeType":"IdentifierPath","referencedDeclaration":4580,"src":"1515:19:93"},"referencedDeclaration":4580,"src":"1515:19:93","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"1256:313:93"},"returnParameters":{"id":35905,"nodeType":"ParameterList","parameters":[],"src":"1592:0:93"},"scope":35961,"src":"1219:661:93","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[472],"body":{"id":35959,"nodeType":"Block","src":"2133:110:93","statements":[{"expression":{"arguments":[{"id":35951,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35926,"src":"2176:4:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":35952,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35928,"src":"2182:2:93","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":35953,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35932,"src":"2186:6:93","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},{"id":35954,"name":"exactAmountsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35935,"src":"2194:14:93","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":35955,"name":"minBptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35937,"src":"2210:15:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":35956,"name":"userData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35939,"src":"2227:8:93","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"arguments":[{"id":35947,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2158:4:93","typeDescriptions":{"typeIdentifier":"t_contract$_VaultExtensionMock_$35961","typeString":"contract VaultExtensionMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VaultExtensionMock_$35961","typeString":"contract VaultExtensionMock"}],"id":35946,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2150:7:93","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":35945,"name":"address","nodeType":"ElementaryTypeName","src":"2150:7:93","typeDescriptions":{}}},"id":35948,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2150:13:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":35944,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"2143:6:93","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVault_$3111_$","typeString":"type(contract IVault)"}},"id":35949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2143:21:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":35950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2165:10:93","memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":4127,"src":"2143:32:93","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$returns$_t_uint256_$","typeString":"function (address,address,contract IERC20[] memory,uint256[] memory,uint256,bytes memory) external returns (uint256)"}},"id":35957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2143:93:93","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35958,"nodeType":"ExpressionStatement","src":"2143:93:93"}]},"functionSelector":"809846d1","id":35960,"implemented":true,"kind":"function","modifiers":[{"id":35942,"kind":"modifierInvocation","modifierName":{"id":35941,"name":"nonReentrant","nameLocations":["2120:12:93"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"2120:12:93"},"nodeType":"ModifierInvocation","src":"2120:12:93"}],"name":"manualInitializePoolReentrancy","nameLocation":"1895:30:93","nodeType":"FunctionDefinition","parameters":{"id":35940,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35926,"mutability":"mutable","name":"pool","nameLocation":"1943:4:93","nodeType":"VariableDeclaration","scope":35960,"src":"1935:12:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35925,"name":"address","nodeType":"ElementaryTypeName","src":"1935:7:93","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35928,"mutability":"mutable","name":"to","nameLocation":"1965:2:93","nodeType":"VariableDeclaration","scope":35960,"src":"1957:10:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":35927,"name":"address","nodeType":"ElementaryTypeName","src":"1957:7:93","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":35932,"mutability":"mutable","name":"tokens","nameLocation":"1993:6:93","nodeType":"VariableDeclaration","scope":35960,"src":"1977:22:93","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":35930,"nodeType":"UserDefinedTypeName","pathNode":{"id":35929,"name":"IERC20","nameLocations":["1977:6:93"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"1977:6:93"},"referencedDeclaration":40109,"src":"1977:6:93","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":35931,"nodeType":"ArrayTypeName","src":"1977:8:93","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":35935,"mutability":"mutable","name":"exactAmountsIn","nameLocation":"2026:14:93","nodeType":"VariableDeclaration","scope":35960,"src":"2009:31:93","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":35933,"name":"uint256","nodeType":"ElementaryTypeName","src":"2009:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":35934,"nodeType":"ArrayTypeName","src":"2009:9:93","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":35937,"mutability":"mutable","name":"minBptAmountOut","nameLocation":"2058:15:93","nodeType":"VariableDeclaration","scope":35960,"src":"2050:23:93","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":35936,"name":"uint256","nodeType":"ElementaryTypeName","src":"2050:7:93","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":35939,"mutability":"mutable","name":"userData","nameLocation":"2096:8:93","nodeType":"VariableDeclaration","scope":35960,"src":"2083:21:93","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":35938,"name":"bytes","nodeType":"ElementaryTypeName","src":"2083:5:93","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1925:185:93"},"returnParameters":{"id":35943,"nodeType":"ParameterList","parameters":[],"src":"2133:0:93"},"scope":35961,"src":"1886:357:93","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":35962,"src":"701:1544:93","usedErrors":[1823,3413,3418,3423,3428,3437,3443,3446,3449,3452,3455,3458,3461,3470,3473,3476,3479,3482,3485,3488,3491,3494,3497,3500,3503,3506,3509,3512,3518,3525,3532,3535,3538,3548,3558,3565,3568,3571,3574,3584,3594,3601,3604,3607,3610,3613,3616,3619,3622,3625,3630,3635,3640,3643,3646,3649,3652,3655,3660,3665,3670,3676,3682,3685,3693,3699,3705,3708,3711,3714,3719,3729,3739,3746,3749,3752,3755,3758,3761,3764,3767,5792,5901,5910,6207,6352,6355,7498,7501,9886,39870,39875,39880,39889,39894,39899,40469,40474,40477,43255],"usedEvents":[3806,3811,3830,3842,3854,3872,3890,3895,3898,3901,3908,3915,3922,3929,3936,3942,3948,3960,3970,3980,3992,3997,4006,38865,38876]}],"src":"46:2200:93"},"id":93},"@balancer-labs/v3-vault/contracts/test/VaultMock.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/test/VaultMock.sol","exportedSymbols":{"AddLiquidityKind":[4807],"AddLiquidityParams":[4823],"AfterSwapParams":[4801],"BufferHelpers":[5610],"BufferWrapOrUnwrapParams":[4862],"FEE_BITLENGTH":[4865],"FEE_SCALING_FACTOR":[4868],"HookFlags":[4627],"HooksConfig":[4651],"HooksConfigLib":[29474],"IAuthorizer":[1455],"IERC20":[40109],"IERC4626":[39833],"IHooks":[2026],"IProtocolFeeController":[2420],"IRateProvider":[263],"IVault":[3111],"IVaultAdmin":[3401],"IVaultExtension":[4426],"IVaultMainMock":[1386],"InputHelpersMock":[32067],"LiquidityManagement":[4580],"MAX_FEE_PERCENTAGE":[4871],"PackedTokenBalance":[6344],"PoolConfig":[4605],"PoolConfigBits":[4582],"PoolConfigConst":[29602],"PoolConfigLib":[30441],"PoolData":[4729],"PoolDataLib":[31031],"PoolFactoryMock":[32594],"PoolRoleAccounts":[4677],"PoolSwapParams":[4772],"RemoveLiquidityKind":[4828],"RemoveLiquidityParams":[4844],"Rounding":[4732],"StorageSlotExtension":[10285],"SwapInternalStateLocals":[36028],"SwapKind":[4735],"SwapState":[4661],"TokenConfig":[4694],"TokenDeltaMappingSlotType":[6858],"TokenInfo":[4704],"TokenType":[4681],"TransientStorageHelpers":[7442],"Vault":[22797],"VaultExtension":[28100],"VaultMock":[38836],"VaultState":[4669],"VaultStateBits":[31184],"VaultStateLib":[31325],"VaultSwapParams":[4754],"WordCodec":[7909],"WrappingDirection":[4847]},"id":38837,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":35963,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:94"},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","file":"@openzeppelin/contracts/interfaces/IERC4626.sol","id":35965,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38837,"sourceUnit":39834,"src":"72:75:94","symbolAliases":[{"foreign":{"id":35964,"name":"IERC4626","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39833,"src":"81:8:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":35967,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38837,"sourceUnit":40110,"src":"148:72:94","symbolAliases":[{"foreign":{"id":35966,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"157:6:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol","id":35969,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38837,"sourceUnit":2421,"src":"222:113:94","symbolAliases":[{"foreign":{"id":35968,"name":"IProtocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2420,"src":"231:22:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol","id":35971,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38837,"sourceUnit":264,"src":"336:112:94","symbolAliases":[{"foreign":{"id":35970,"name":"IRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":263,"src":"345:13:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol","id":35973,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38837,"sourceUnit":4427,"src":"449:99:94","symbolAliases":[{"foreign":{"id":35972,"name":"IVaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4426,"src":"458:15:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/test/IVaultMainMock.sol","file":"@balancer-labs/v3-interfaces/contracts/test/IVaultMainMock.sol","id":35975,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38837,"sourceUnit":1387,"src":"549:96:94","symbolAliases":[{"foreign":{"id":35974,"name":"IVaultMainMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1386,"src":"558:14:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol","id":35977,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38837,"sourceUnit":1456,"src":"646:91:94","symbolAliases":[{"foreign":{"id":35976,"name":"IAuthorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1455,"src":"655:11:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol","id":35979,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38837,"sourceUnit":3402,"src":"738:91:94","symbolAliases":[{"foreign":{"id":35978,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3401,"src":"747:11:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":35981,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38837,"sourceUnit":3112,"src":"830:81:94","symbolAliases":[{"foreign":{"id":35980,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"839:6:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol","id":35983,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38837,"sourceUnit":2027,"src":"912:81:94","symbolAliases":[{"foreign":{"id":35982,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2026,"src":"921:6:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":35984,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38837,"sourceUnit":4872,"src":"994:69:94","symbolAliases":[],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol","id":35986,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38837,"sourceUnit":10286,"src":"1065:120:94","symbolAliases":[{"foreign":{"id":35985,"name":"StorageSlotExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10285,"src":"1074:20:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol","id":35988,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38837,"sourceUnit":6345,"src":"1186:111:94","symbolAliases":[{"foreign":{"id":35987,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6344,"src":"1195:18:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/BufferHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/BufferHelpers.sol","id":35990,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38837,"sourceUnit":5611,"src":"1298:101:94","symbolAliases":[{"foreign":{"id":35989,"name":"BufferHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5610,"src":"1307:13:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol","id":35993,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38837,"sourceUnit":7443,"src":"1400:156:94","symbolAliases":[{"foreign":{"id":35991,"name":"TransientStorageHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7442,"src":"1413:23:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":35992,"name":"TokenDeltaMappingSlotType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6858,"src":"1442:25:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol","id":35995,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38837,"sourceUnit":7910,"src":"1557:93:94","symbolAliases":[{"foreign":{"id":35994,"name":"WordCodec","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7909,"src":"1566:9:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/VaultStateLib.sol","file":"../lib/VaultStateLib.sol","id":35998,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38837,"sourceUnit":31326,"src":"1652:73:94","symbolAliases":[{"foreign":{"id":35996,"name":"VaultStateLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31325,"src":"1661:13:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":35997,"name":"VaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31184,"src":"1676:14:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/PoolConfigLib.sol","file":"../lib/PoolConfigLib.sol","id":36001,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38837,"sourceUnit":30442,"src":"1726:73:94","symbolAliases":[{"foreign":{"id":35999,"name":"PoolConfigLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":30441,"src":"1735:13:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":36000,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"1750:14:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/HooksConfigLib.sol","file":"../lib/HooksConfigLib.sol","id":36003,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38837,"sourceUnit":29475,"src":"1800:59:94","symbolAliases":[{"foreign":{"id":36002,"name":"HooksConfigLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29474,"src":"1809:14:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/test/InputHelpersMock.sol","file":"./InputHelpersMock.sol","id":36005,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38837,"sourceUnit":32068,"src":"1860:58:94","symbolAliases":[{"foreign":{"id":36004,"name":"InputHelpersMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32067,"src":"1869:16:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/test/PoolFactoryMock.sol","file":"./PoolFactoryMock.sol","id":36007,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38837,"sourceUnit":32595,"src":"1919:56:94","symbolAliases":[{"foreign":{"id":36006,"name":"PoolFactoryMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":32594,"src":"1928:15:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/VaultExtension.sol","file":"../VaultExtension.sol","id":36009,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38837,"sourceUnit":28101,"src":"1976:55:94","symbolAliases":[{"foreign":{"id":36008,"name":"VaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28100,"src":"1985:14:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/PoolConfigConst.sol","file":"../lib/PoolConfigConst.sol","id":36011,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38837,"sourceUnit":29603,"src":"2032:61:94","symbolAliases":[{"foreign":{"id":36010,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"2041:15:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/lib/PoolDataLib.sol","file":"../lib/PoolDataLib.sol","id":36013,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38837,"sourceUnit":31032,"src":"2094:53:94","symbolAliases":[{"foreign":{"id":36012,"name":"PoolDataLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31031,"src":"2103:11:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/Vault.sol","file":"../Vault.sol","id":36015,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":38837,"sourceUnit":22798,"src":"2148:37:94","symbolAliases":[{"foreign":{"id":36014,"name":"Vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22797,"src":"2157:5:94","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"SwapInternalStateLocals","id":36028,"members":[{"constant":false,"id":36018,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"2240:15:94","nodeType":"VariableDeclaration","scope":36028,"src":"2224:31:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_storage_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":36017,"nodeType":"UserDefinedTypeName","pathNode":{"id":36016,"name":"VaultSwapParams","nameLocations":["2224:15:94"],"nodeType":"IdentifierPath","referencedDeclaration":4754,"src":"2224:15:94"},"referencedDeclaration":4754,"src":"2224:15:94","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"},{"constant":false,"id":36021,"mutability":"mutable","name":"swapState","nameLocation":"2271:9:94","nodeType":"VariableDeclaration","scope":36028,"src":"2261:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_storage_ptr","typeString":"struct SwapState"},"typeName":{"id":36020,"nodeType":"UserDefinedTypeName","pathNode":{"id":36019,"name":"SwapState","nameLocations":["2261:9:94"],"nodeType":"IdentifierPath","referencedDeclaration":4661,"src":"2261:9:94"},"referencedDeclaration":4661,"src":"2261:9:94","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_storage_ptr","typeString":"struct SwapState"}},"visibility":"internal"},{"constant":false,"id":36024,"mutability":"mutable","name":"poolData","nameLocation":"2295:8:94","nodeType":"VariableDeclaration","scope":36028,"src":"2286:17:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"},"typeName":{"id":36023,"nodeType":"UserDefinedTypeName","pathNode":{"id":36022,"name":"PoolData","nameLocations":["2286:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"2286:8:94"},"referencedDeclaration":4729,"src":"2286:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":36027,"mutability":"mutable","name":"vaultState","nameLocation":"2320:10:94","nodeType":"VariableDeclaration","scope":36028,"src":"2309:21:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_VaultState_$4669_storage_ptr","typeString":"struct VaultState"},"typeName":{"id":36026,"nodeType":"UserDefinedTypeName","pathNode":{"id":36025,"name":"VaultState","nameLocations":["2309:10:94"],"nodeType":"IdentifierPath","referencedDeclaration":4669,"src":"2309:10:94"},"referencedDeclaration":4669,"src":"2309:10:94","typeDescriptions":{"typeIdentifier":"t_struct$_VaultState_$4669_storage_ptr","typeString":"struct VaultState"}},"visibility":"internal"}],"name":"SwapInternalStateLocals","nameLocation":"2194:23:94","nodeType":"StructDefinition","scope":38837,"src":"2187:146:94","visibility":"public"},{"abstract":false,"baseContracts":[{"baseName":{"id":36029,"name":"IVaultMainMock","nameLocations":["2357:14:94"],"nodeType":"IdentifierPath","referencedDeclaration":1386,"src":"2357:14:94"},"id":36030,"nodeType":"InheritanceSpecifier","src":"2357:14:94"},{"baseName":{"id":36031,"name":"Vault","nameLocations":["2373:5:94"],"nodeType":"IdentifierPath","referencedDeclaration":22797,"src":"2373:5:94"},"id":36032,"nodeType":"InheritanceSpecifier","src":"2373:5:94"}],"canonicalName":"VaultMock","contractDependencies":[32067,32594],"contractKind":"contract","fullyImplemented":true,"id":38836,"internalFunctionIDs":{"6467":1,"6488":2},"linearizedBaseContracts":[38836,22797,40031,25606,39429,1824,39900,9942,28384,3768,4007,4562,1386],"name":"VaultMock","nameLocation":"2344:9:94","nodeType":"ContractDefinition","nodes":[{"global":false,"id":36035,"libraryName":{"id":36033,"name":"PackedTokenBalance","nameLocations":["2391:18:94"],"nodeType":"IdentifierPath","referencedDeclaration":6344,"src":"2391:18:94"},"nodeType":"UsingForDirective","src":"2385:37:94","typeName":{"id":36034,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2414:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"global":false,"id":36039,"libraryName":{"id":36036,"name":"PoolConfigLib","nameLocations":["2433:13:94"],"nodeType":"IdentifierPath","referencedDeclaration":30441,"src":"2433:13:94"},"nodeType":"UsingForDirective","src":"2427:39:94","typeName":{"id":36038,"nodeType":"UserDefinedTypeName","pathNode":{"id":36037,"name":"PoolConfigBits","nameLocations":["2451:14:94"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"2451:14:94"},"referencedDeclaration":4582,"src":"2451:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}},{"global":false,"id":36043,"libraryName":{"id":36040,"name":"HooksConfigLib","nameLocations":["2477:14:94"],"nodeType":"IdentifierPath","referencedDeclaration":29474,"src":"2477:14:94"},"nodeType":"UsingForDirective","src":"2471:40:94","typeName":{"id":36042,"nodeType":"UserDefinedTypeName","pathNode":{"id":36041,"name":"PoolConfigBits","nameLocations":["2496:14:94"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"2496:14:94"},"referencedDeclaration":4582,"src":"2496:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}},{"global":false,"id":36047,"libraryName":{"id":36044,"name":"VaultStateLib","nameLocations":["2522:13:94"],"nodeType":"IdentifierPath","referencedDeclaration":31325,"src":"2522:13:94"},"nodeType":"UsingForDirective","src":"2516:39:94","typeName":{"id":36046,"nodeType":"UserDefinedTypeName","pathNode":{"id":36045,"name":"VaultStateBits","nameLocations":["2540:14:94"],"nodeType":"IdentifierPath","referencedDeclaration":31184,"src":"2540:14:94"},"referencedDeclaration":31184,"src":"2540:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}}},{"global":false,"id":36050,"libraryName":{"id":36048,"name":"BufferHelpers","nameLocations":["2566:13:94"],"nodeType":"IdentifierPath","referencedDeclaration":5610,"src":"2566:13:94"},"nodeType":"UsingForDirective","src":"2560:32:94","typeName":{"id":36049,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2584:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"global":false,"id":36054,"libraryName":{"id":36051,"name":"PoolDataLib","nameLocations":["2603:11:94"],"nodeType":"IdentifierPath","referencedDeclaration":31031,"src":"2603:11:94"},"nodeType":"UsingForDirective","src":"2597:31:94","typeName":{"id":36053,"nodeType":"UserDefinedTypeName","pathNode":{"id":36052,"name":"PoolData","nameLocations":["2619:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"2619:8:94"},"referencedDeclaration":4729,"src":"2619:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}}},{"global":false,"id":36056,"libraryName":{"id":36055,"name":"TransientStorageHelpers","nameLocations":["2639:23:94"],"nodeType":"IdentifierPath","referencedDeclaration":7442,"src":"2639:23:94"},"nodeType":"UsingForDirective","src":"2633:36:94"},{"global":false,"id":36058,"libraryName":{"id":36057,"name":"StorageSlotExtension","nameLocations":["2680:20:94"],"nodeType":"IdentifierPath","referencedDeclaration":10285,"src":"2680:20:94"},"nodeType":"UsingForDirective","src":"2674:33:94"},{"global":false,"id":36061,"libraryName":{"id":36059,"name":"WordCodec","nameLocations":["2718:9:94"],"nodeType":"IdentifierPath","referencedDeclaration":7909,"src":"2718:9:94"},"nodeType":"UsingForDirective","src":"2712:28:94","typeName":{"id":36060,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2732:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"constant":false,"id":36064,"mutability":"immutable","name":"_poolFactoryMock","nameLocation":"2780:16:94","nodeType":"VariableDeclaration","scope":38836,"src":"2746:50:94","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_PoolFactoryMock_$32594","typeString":"contract PoolFactoryMock"},"typeName":{"id":36063,"nodeType":"UserDefinedTypeName","pathNode":{"id":36062,"name":"PoolFactoryMock","nameLocations":["2746:15:94"],"nodeType":"IdentifierPath","referencedDeclaration":32594,"src":"2746:15:94"},"referencedDeclaration":32594,"src":"2746:15:94","typeDescriptions":{"typeIdentifier":"t_contract$_PoolFactoryMock_$32594","typeString":"contract PoolFactoryMock"}},"visibility":"private"},{"constant":false,"id":36067,"mutability":"immutable","name":"_inputHelpersMock","nameLocation":"2837:17:94","nodeType":"VariableDeclaration","scope":38836,"src":"2802:52:94","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_InputHelpersMock_$32067","typeString":"contract InputHelpersMock"},"typeName":{"id":36066,"nodeType":"UserDefinedTypeName","pathNode":{"id":36065,"name":"InputHelpersMock","nameLocations":["2802:16:94"],"nodeType":"IdentifierPath","referencedDeclaration":32067,"src":"2802:16:94"},"referencedDeclaration":32067,"src":"2802:16:94","typeDescriptions":{"typeIdentifier":"t_contract$_InputHelpersMock_$32067","typeString":"contract InputHelpersMock"}},"visibility":"private"},{"body":{"id":36129,"nodeType":"Block","src":"3062:373:94","statements":[{"assignments":[36085],"declarations":[{"constant":false,"id":36085,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"3079:18:94","nodeType":"VariableDeclaration","scope":36129,"src":"3072:25:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":36084,"name":"uint32","nodeType":"ElementaryTypeName","src":"3072:6:94","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"id":36094,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":36089,"name":"vaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36070,"src":"3120:14:94","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$4426","typeString":"contract IVaultExtension"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVaultExtension_$4426","typeString":"contract IVaultExtension"}],"id":36088,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3112:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":36087,"name":"address","nodeType":"ElementaryTypeName","src":"3112:7:94","typeDescriptions":{}}},"id":36090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3112:23:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":36086,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3401,"src":"3100:11:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultAdmin_$3401_$","typeString":"type(contract IVaultAdmin)"}},"id":36091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3100:36:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVaultAdmin_$3401","typeString":"contract IVaultAdmin"}},"id":36092,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3137:21:94","memberName":"getPauseWindowEndTime","nodeType":"MemberAccess","referencedDeclaration":3135,"src":"3100:58:94","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint32_$","typeString":"function () view external returns (uint32)"}},"id":36093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3100:60:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"VariableDeclarationStatement","src":"3072:88:94"},{"assignments":[36096],"declarations":[{"constant":false,"id":36096,"mutability":"mutable","name":"bufferPeriodDuration","nameLocation":"3177:20:94","nodeType":"VariableDeclaration","scope":36129,"src":"3170:27:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":36095,"name":"uint32","nodeType":"ElementaryTypeName","src":"3170:6:94","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"id":36105,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":36100,"name":"vaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36070,"src":"3220:14:94","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$4426","typeString":"contract IVaultExtension"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVaultExtension_$4426","typeString":"contract IVaultExtension"}],"id":36099,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3212:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":36098,"name":"address","nodeType":"ElementaryTypeName","src":"3212:7:94","typeDescriptions":{}}},"id":36101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3212:23:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":36097,"name":"IVaultAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3401,"src":"3200:11:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultAdmin_$3401_$","typeString":"type(contract IVaultAdmin)"}},"id":36102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3200:36:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVaultAdmin_$3401","typeString":"contract IVaultAdmin"}},"id":36103,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3237:23:94","memberName":"getBufferPeriodDuration","nodeType":"MemberAccess","referencedDeclaration":3141,"src":"3200:60:94","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_uint32_$","typeString":"function () view external returns (uint32)"}},"id":36104,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3200:62:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"VariableDeclarationStatement","src":"3170:92:94"},{"expression":{"id":36120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36106,"name":"_poolFactoryMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36064,"src":"3272:16:94","typeDescriptions":{"typeIdentifier":"t_contract$_PoolFactoryMock_$32594","typeString":"contract PoolFactoryMock"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"id":36113,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3326:4:94","typeDescriptions":{"typeIdentifier":"t_contract$_VaultMock_$38836","typeString":"contract VaultMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VaultMock_$38836","typeString":"contract VaultMock"}],"id":36112,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3318:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":36111,"name":"address","nodeType":"ElementaryTypeName","src":"3318:7:94","typeDescriptions":{}}},"id":36114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3318:13:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":36110,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"3311:6:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVault_$3111_$","typeString":"type(contract IVault)"}},"id":36115,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3311:21:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},{"commonType":{"typeIdentifier":"t_uint32","typeString":"uint32"},"id":36118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36116,"name":"pauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36085,"src":"3334:18:94","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":36117,"name":"bufferPeriodDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36096,"src":"3355:20:94","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"3334:41:94","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},{"typeIdentifier":"t_uint32","typeString":"uint32"}],"id":36109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"3291:19:94","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$_t_contract$_IVault_$3111_$_t_uint32_$returns$_t_contract$_PoolFactoryMock_$32594_$","typeString":"function (contract IVault,uint32) returns (contract PoolFactoryMock)"},"typeName":{"id":36108,"nodeType":"UserDefinedTypeName","pathNode":{"id":36107,"name":"PoolFactoryMock","nameLocations":["3295:15:94"],"nodeType":"IdentifierPath","referencedDeclaration":32594,"src":"3295:15:94"},"referencedDeclaration":32594,"src":"3295:15:94","typeDescriptions":{"typeIdentifier":"t_contract$_PoolFactoryMock_$32594","typeString":"contract PoolFactoryMock"}}},"id":36119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3291:85:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_PoolFactoryMock_$32594","typeString":"contract PoolFactoryMock"}},"src":"3272:104:94","typeDescriptions":{"typeIdentifier":"t_contract$_PoolFactoryMock_$32594","typeString":"contract PoolFactoryMock"}},"id":36121,"nodeType":"ExpressionStatement","src":"3272:104:94"},{"expression":{"id":36127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36122,"name":"_inputHelpersMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36067,"src":"3386:17:94","typeDescriptions":{"typeIdentifier":"t_contract$_InputHelpersMock_$32067","typeString":"contract InputHelpersMock"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":36125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"3406:20:94","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$__$returns$_t_contract$_InputHelpersMock_$32067_$","typeString":"function () returns (contract InputHelpersMock)"},"typeName":{"id":36124,"nodeType":"UserDefinedTypeName","pathNode":{"id":36123,"name":"InputHelpersMock","nameLocations":["3410:16:94"],"nodeType":"IdentifierPath","referencedDeclaration":32067,"src":"3410:16:94"},"referencedDeclaration":32067,"src":"3410:16:94","typeDescriptions":{"typeIdentifier":"t_contract$_InputHelpersMock_$32067","typeString":"contract InputHelpersMock"}}},"id":36126,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3406:22:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_InputHelpersMock_$32067","typeString":"contract InputHelpersMock"}},"src":"3386:42:94","typeDescriptions":{"typeIdentifier":"t_contract$_InputHelpersMock_$32067","typeString":"contract InputHelpersMock"}},"id":36128,"nodeType":"ExpressionStatement","src":"3386:42:94"}]},"id":36130,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":36079,"name":"vaultExtension","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36070,"src":"3011:14:94","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$4426","typeString":"contract IVaultExtension"}},{"id":36080,"name":"authorizer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36073,"src":"3027:10:94","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"}},{"id":36081,"name":"protocolFeeController","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36076,"src":"3039:21:94","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}}],"id":36082,"kind":"baseConstructorSpecifier","modifierName":{"id":36078,"name":"Vault","nameLocations":["3005:5:94"],"nodeType":"IdentifierPath","referencedDeclaration":22797,"src":"3005:5:94"},"nodeType":"ModifierInvocation","src":"3005:56:94"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":36077,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36070,"mutability":"mutable","name":"vaultExtension","nameLocation":"2898:14:94","nodeType":"VariableDeclaration","scope":36130,"src":"2882:30:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$4426","typeString":"contract IVaultExtension"},"typeName":{"id":36069,"nodeType":"UserDefinedTypeName","pathNode":{"id":36068,"name":"IVaultExtension","nameLocations":["2882:15:94"],"nodeType":"IdentifierPath","referencedDeclaration":4426,"src":"2882:15:94"},"referencedDeclaration":4426,"src":"2882:15:94","typeDescriptions":{"typeIdentifier":"t_contract$_IVaultExtension_$4426","typeString":"contract IVaultExtension"}},"visibility":"internal"},{"constant":false,"id":36073,"mutability":"mutable","name":"authorizer","nameLocation":"2934:10:94","nodeType":"VariableDeclaration","scope":36130,"src":"2922:22:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"},"typeName":{"id":36072,"nodeType":"UserDefinedTypeName","pathNode":{"id":36071,"name":"IAuthorizer","nameLocations":["2922:11:94"],"nodeType":"IdentifierPath","referencedDeclaration":1455,"src":"2922:11:94"},"referencedDeclaration":1455,"src":"2922:11:94","typeDescriptions":{"typeIdentifier":"t_contract$_IAuthorizer_$1455","typeString":"contract IAuthorizer"}},"visibility":"internal"},{"constant":false,"id":36076,"mutability":"mutable","name":"protocolFeeController","nameLocation":"2977:21:94","nodeType":"VariableDeclaration","scope":36130,"src":"2954:44:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"},"typeName":{"id":36075,"nodeType":"UserDefinedTypeName","pathNode":{"id":36074,"name":"IProtocolFeeController","nameLocations":["2954:22:94"],"nodeType":"IdentifierPath","referencedDeclaration":2420,"src":"2954:22:94"},"referencedDeclaration":2420,"src":"2954:22:94","typeDescriptions":{"typeIdentifier":"t_contract$_IProtocolFeeController_$2420","typeString":"contract IProtocolFeeController"}},"visibility":"internal"}],"src":"2872:132:94"},"returnParameters":{"id":36083,"nodeType":"ParameterList","parameters":[],"src":"3062:0:94"},"scope":38836,"src":"2861:574:94","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[487],"body":{"id":36140,"nodeType":"Block","src":"3503:49:94","statements":[{"expression":{"arguments":[{"id":36137,"name":"_poolFactoryMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36064,"src":"3528:16:94","typeDescriptions":{"typeIdentifier":"t_contract$_PoolFactoryMock_$32594","typeString":"contract PoolFactoryMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PoolFactoryMock_$32594","typeString":"contract PoolFactoryMock"}],"id":36136,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3520:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":36135,"name":"address","nodeType":"ElementaryTypeName","src":"3520:7:94","typeDescriptions":{}}},"id":36138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3520:25:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":36134,"id":36139,"nodeType":"Return","src":"3513:32:94"}]},"functionSelector":"87a76c59","id":36141,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolFactoryMock","nameLocation":"3450:18:94","nodeType":"FunctionDefinition","parameters":{"id":36131,"nodeType":"ParameterList","parameters":[],"src":"3468:2:94"},"returnParameters":{"id":36134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36133,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":36141,"src":"3494:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36132,"name":"address","nodeType":"ElementaryTypeName","src":"3494:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3493:9:94"},"scope":38836,"src":"3441:111:94","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[496],"body":{"id":36156,"nodeType":"Block","src":"3631:43:94","statements":[{"expression":{"arguments":[{"id":36151,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36143,"src":"3647:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36152,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36145,"src":"3654:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36153,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36147,"src":"3660:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":36150,"name":"_burn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39222,"src":"3641:5:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":36154,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3641:26:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36155,"nodeType":"ExpressionStatement","src":"3641:26:94"}]},"functionSelector":"1d27af68","id":36157,"implemented":true,"kind":"function","modifiers":[],"name":"burnERC20","nameLocation":"3567:9:94","nodeType":"FunctionDefinition","parameters":{"id":36148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36143,"mutability":"mutable","name":"token","nameLocation":"3585:5:94","nodeType":"VariableDeclaration","scope":36157,"src":"3577:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36142,"name":"address","nodeType":"ElementaryTypeName","src":"3577:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36145,"mutability":"mutable","name":"from","nameLocation":"3600:4:94","nodeType":"VariableDeclaration","scope":36157,"src":"3592:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36144,"name":"address","nodeType":"ElementaryTypeName","src":"3592:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36147,"mutability":"mutable","name":"amount","nameLocation":"3614:6:94","nodeType":"VariableDeclaration","scope":36157,"src":"3606:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36146,"name":"uint256","nodeType":"ElementaryTypeName","src":"3606:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3576:45:94"},"returnParameters":{"id":36149,"nodeType":"ParameterList","parameters":[],"src":"3631:0:94"},"scope":38836,"src":"3558:116:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[505],"body":{"id":36172,"nodeType":"Block","src":"3751:41:94","statements":[{"expression":{"arguments":[{"id":36167,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36159,"src":"3767:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36168,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36161,"src":"3774:2:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36169,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36163,"src":"3778:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":36166,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39059,"src":"3761:5:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256)"}},"id":36170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3761:24:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36171,"nodeType":"ExpressionStatement","src":"3761:24:94"}]},"functionSelector":"47c07e88","id":36173,"implemented":true,"kind":"function","modifiers":[],"name":"mintERC20","nameLocation":"3689:9:94","nodeType":"FunctionDefinition","parameters":{"id":36164,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36159,"mutability":"mutable","name":"token","nameLocation":"3707:5:94","nodeType":"VariableDeclaration","scope":36173,"src":"3699:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36158,"name":"address","nodeType":"ElementaryTypeName","src":"3699:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36161,"mutability":"mutable","name":"to","nameLocation":"3722:2:94","nodeType":"VariableDeclaration","scope":36173,"src":"3714:10:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36160,"name":"address","nodeType":"ElementaryTypeName","src":"3714:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36163,"mutability":"mutable","name":"amount","nameLocation":"3734:6:94","nodeType":"VariableDeclaration","scope":36173,"src":"3726:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36162,"name":"uint256","nodeType":"ElementaryTypeName","src":"3726:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3698:43:94"},"returnParameters":{"id":36165,"nodeType":"ParameterList","parameters":[],"src":"3751:0:94"},"scope":38836,"src":"3680:112:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[514],"body":{"id":36204,"nodeType":"Block","src":"4174:275:94","statements":[{"assignments":[36186],"declarations":[{"constant":false,"id":36186,"mutability":"mutable","name":"roleAccounts","nameLocation":"4208:12:94","nodeType":"VariableDeclaration","scope":36204,"src":"4184:36:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":36185,"nodeType":"UserDefinedTypeName","pathNode":{"id":36184,"name":"PoolRoleAccounts","nameLocations":["4184:16:94"],"nodeType":"IdentifierPath","referencedDeclaration":4677,"src":"4184:16:94"},"referencedDeclaration":4677,"src":"4184:16:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"id":36187,"nodeType":"VariableDeclarationStatement","src":"4184:36:94"},{"expression":{"arguments":[{"id":36191,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36175,"src":"4274:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":36193,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36179,"src":"4309:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}],"id":36192,"name":"buildTokenConfig","nodeType":"Identifier","overloadedDeclarations":[37097,37182,37279,37368],"referencedDeclaration":37097,"src":"4292:16:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$returns$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$","typeString":"function (contract IERC20[] memory) view returns (struct TokenConfig memory[] memory)"}},"id":36194,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4292:24:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},{"id":36195,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36186,"src":"4330:12:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},{"arguments":[{"hexValue":"30","id":36198,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4364:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":36197,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4356:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":36196,"name":"address","nodeType":"ElementaryTypeName","src":"4356:7:94","typeDescriptions":{}}},"id":36199,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4356:10:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":36200,"name":"_getDefaultLiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38601,"src":"4400:30:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_LiquidityManagement_$4580_memory_ptr_$","typeString":"function () pure returns (struct LiquidityManagement memory)"}},"id":36201,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4400:32:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"},{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}],"expression":{"id":36188,"name":"_poolFactoryMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36064,"src":"4231:16:94","typeDescriptions":{"typeIdentifier":"t_contract$_PoolFactoryMock_$32594","typeString":"contract PoolFactoryMock"}},"id":36190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4248:12:94","memberName":"registerPool","nodeType":"MemberAccess","referencedDeclaration":32332,"src":"4231:29:94","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$_t_struct$_PoolRoleAccounts_$4677_memory_ptr_$_t_address_$_t_struct$_LiquidityManagement_$4580_memory_ptr_$returns$__$","typeString":"function (address,struct TokenConfig memory[] memory,struct PoolRoleAccounts memory,address,struct LiquidityManagement memory) external"}},"id":36202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4231:211:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36203,"nodeType":"ExpressionStatement","src":"4231:211:94"}]},"functionSelector":"851c65a3","id":36205,"implemented":true,"kind":"function","modifiers":[{"id":36182,"kind":"modifierInvocation","modifierName":{"id":36181,"name":"whenVaultNotPaused","nameLocations":["4155:18:94"],"nodeType":"IdentifierPath","referencedDeclaration":24972,"src":"4155:18:94"},"nodeType":"ModifierInvocation","src":"4155:18:94"}],"name":"manualRegisterPool","nameLocation":"4089:18:94","nodeType":"FunctionDefinition","parameters":{"id":36180,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36175,"mutability":"mutable","name":"pool","nameLocation":"4116:4:94","nodeType":"VariableDeclaration","scope":36205,"src":"4108:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36174,"name":"address","nodeType":"ElementaryTypeName","src":"4108:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36179,"mutability":"mutable","name":"tokens","nameLocation":"4138:6:94","nodeType":"VariableDeclaration","scope":36205,"src":"4122:22:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":36177,"nodeType":"UserDefinedTypeName","pathNode":{"id":36176,"name":"IERC20","nameLocations":["4122:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"4122:6:94"},"referencedDeclaration":40109,"src":"4122:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":36178,"nodeType":"ArrayTypeName","src":"4122:8:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"4107:38:94"},"returnParameters":{"id":36183,"nodeType":"ParameterList","parameters":[],"src":"4174:0:94"},"scope":38836,"src":"4080:369:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[525],"body":{"id":36245,"nodeType":"Block","src":"4617:386:94","statements":[{"assignments":[36220],"declarations":[{"constant":false,"id":36220,"mutability":"mutable","name":"liquidityManagement","nameLocation":"4654:19:94","nodeType":"VariableDeclaration","scope":36245,"src":"4627:46:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":36219,"nodeType":"UserDefinedTypeName","pathNode":{"id":36218,"name":"LiquidityManagement","nameLocations":["4627:19:94"],"nodeType":"IdentifierPath","referencedDeclaration":4580,"src":"4627:19:94"},"referencedDeclaration":4580,"src":"4627:19:94","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"id":36223,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":36221,"name":"_getDefaultLiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38601,"src":"4676:30:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_LiquidityManagement_$4580_memory_ptr_$","typeString":"function () pure returns (struct LiquidityManagement memory)"}},"id":36222,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4676:32:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}},"nodeType":"VariableDeclarationStatement","src":"4627:81:94"},{"expression":{"id":36228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":36224,"name":"liquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36220,"src":"4718:19:94","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}},"id":36226,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4738:26:94","memberName":"disableUnbalancedLiquidity","nodeType":"MemberAccess","referencedDeclaration":4573,"src":"4718:46:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":36227,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4767:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"4718:53:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":36229,"nodeType":"ExpressionStatement","src":"4718:53:94"},{"expression":{"arguments":[{"id":36233,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36207,"src":"4836:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":36235,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36211,"src":"4871:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}],"id":36234,"name":"buildTokenConfig","nodeType":"Identifier","overloadedDeclarations":[37097,37182,37279,37368],"referencedDeclaration":37097,"src":"4854:16:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$returns$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$","typeString":"function (contract IERC20[] memory) view returns (struct TokenConfig memory[] memory)"}},"id":36236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4854:24:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},{"id":36237,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36213,"src":"4892:17:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"hexValue":"30","id":36240,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4931:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":36239,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4923:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":36238,"name":"address","nodeType":"ElementaryTypeName","src":"4923:7:94","typeDescriptions":{}}},"id":36241,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4923:10:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36242,"name":"liquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36220,"src":"4967:19:94","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}],"expression":{"id":36230,"name":"_poolFactoryMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36064,"src":"4782:16:94","typeDescriptions":{"typeIdentifier":"t_contract$_PoolFactoryMock_$32594","typeString":"contract PoolFactoryMock"}},"id":36232,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4799:23:94","memberName":"registerPoolWithSwapFee","nodeType":"MemberAccess","referencedDeclaration":32367,"src":"4782:40:94","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$_t_uint256_$_t_address_$_t_struct$_LiquidityManagement_$4580_memory_ptr_$returns$__$","typeString":"function (address,struct TokenConfig memory[] memory,uint256,address,struct LiquidityManagement memory) external"}},"id":36243,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4782:214:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36244,"nodeType":"ExpressionStatement","src":"4782:214:94"}]},"functionSelector":"1f495f79","id":36246,"implemented":true,"kind":"function","modifiers":[{"id":36216,"kind":"modifierInvocation","modifierName":{"id":36215,"name":"whenVaultNotPaused","nameLocations":["4598:18:94"],"nodeType":"IdentifierPath","referencedDeclaration":24972,"src":"4598:18:94"},"nodeType":"ModifierInvocation","src":"4598:18:94"}],"name":"manualRegisterPoolWithSwapFee","nameLocation":"4464:29:94","nodeType":"FunctionDefinition","parameters":{"id":36214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36207,"mutability":"mutable","name":"pool","nameLocation":"4511:4:94","nodeType":"VariableDeclaration","scope":36246,"src":"4503:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36206,"name":"address","nodeType":"ElementaryTypeName","src":"4503:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36211,"mutability":"mutable","name":"tokens","nameLocation":"4541:6:94","nodeType":"VariableDeclaration","scope":36246,"src":"4525:22:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":36209,"nodeType":"UserDefinedTypeName","pathNode":{"id":36208,"name":"IERC20","nameLocations":["4525:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"4525:6:94"},"referencedDeclaration":40109,"src":"4525:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":36210,"nodeType":"ArrayTypeName","src":"4525:8:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":36213,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"4565:17:94","nodeType":"VariableDeclaration","scope":36246,"src":"4557:25:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36212,"name":"uint256","nodeType":"ElementaryTypeName","src":"4557:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4493:95:94"},"returnParameters":{"id":36217,"nodeType":"ParameterList","parameters":[],"src":"4617:0:94"},"scope":38836,"src":"4455:548:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[534],"body":{"id":36308,"nodeType":"Block","src":"5098:450:94","statements":[{"assignments":[36259],"declarations":[{"constant":false,"id":36259,"mutability":"mutable","name":"tokenConfig","nameLocation":"5129:11:94","nodeType":"VariableDeclaration","scope":36308,"src":"5108:32:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":36257,"nodeType":"UserDefinedTypeName","pathNode":{"id":36256,"name":"TokenConfig","nameLocations":["5108:11:94"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"5108:11:94"},"referencedDeclaration":4694,"src":"5108:11:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":36258,"nodeType":"ArrayTypeName","src":"5108:13:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"}],"id":36267,"initialValue":{"arguments":[{"expression":{"id":36264,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36252,"src":"5161:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":36265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5168:6:94","memberName":"length","nodeType":"MemberAccess","src":"5161:13:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":36263,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"5143:17:94","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct TokenConfig memory[] memory)"},"typeName":{"baseType":{"id":36261,"nodeType":"UserDefinedTypeName","pathNode":{"id":36260,"name":"TokenConfig","nameLocations":["5147:11:94"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"5147:11:94"},"referencedDeclaration":4694,"src":"5147:11:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":36262,"nodeType":"ArrayTypeName","src":"5147:13:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}}},"id":36266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5143:32:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"5108:67:94"},{"assignments":[36270],"declarations":[{"constant":false,"id":36270,"mutability":"mutable","name":"roleAccounts","nameLocation":"5209:12:94","nodeType":"VariableDeclaration","scope":36308,"src":"5185:36:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":36269,"nodeType":"UserDefinedTypeName","pathNode":{"id":36268,"name":"PoolRoleAccounts","nameLocations":["5185:16:94"],"nodeType":"IdentifierPath","referencedDeclaration":4677,"src":"5185:16:94"},"referencedDeclaration":4677,"src":"5185:16:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"id":36271,"nodeType":"VariableDeclarationStatement","src":"5185:36:94"},{"body":{"id":36292,"nodeType":"Block","src":"5276:57:94","statements":[{"expression":{"id":36290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":36283,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36259,"src":"5290:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":36285,"indexExpression":{"id":36284,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36273,"src":"5302:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5290:14:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":36286,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5305:5:94","memberName":"token","nodeType":"MemberAccess","referencedDeclaration":4685,"src":"5290:20:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":36287,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36252,"src":"5313:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":36289,"indexExpression":{"id":36288,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36273,"src":"5320:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5313:9:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"5290:32:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":36291,"nodeType":"ExpressionStatement","src":"5290:32:94"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36276,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36273,"src":"5252:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":36277,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36252,"src":"5256:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":36278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5263:6:94","memberName":"length","nodeType":"MemberAccess","src":"5256:13:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5252:17:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":36293,"initializationExpression":{"assignments":[36273],"declarations":[{"constant":false,"id":36273,"mutability":"mutable","name":"i","nameLocation":"5245:1:94","nodeType":"VariableDeclaration","scope":36293,"src":"5237:9:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36272,"name":"uint256","nodeType":"ElementaryTypeName","src":"5237:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36275,"initialValue":{"hexValue":"30","id":36274,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5249:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5237:13:94"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":36281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"5271:3:94","subExpression":{"id":36280,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36273,"src":"5273:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36282,"nodeType":"ExpressionStatement","src":"5271:3:94"},"nodeType":"ForStatement","src":"5232:101:94"},{"expression":{"arguments":[{"id":36297,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36248,"src":"5386:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36298,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36259,"src":"5404:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},{"id":36299,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36270,"src":"5429:12:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},{"arguments":[{"hexValue":"30","id":36302,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5463:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":36301,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5455:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":36300,"name":"address","nodeType":"ElementaryTypeName","src":"5455:7:94","typeDescriptions":{}}},"id":36303,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5455:10:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":36304,"name":"_getDefaultLiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38601,"src":"5499:30:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_LiquidityManagement_$4580_memory_ptr_$","typeString":"function () pure returns (struct LiquidityManagement memory)"}},"id":36305,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5499:32:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"},{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}],"expression":{"id":36294,"name":"_poolFactoryMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36064,"src":"5343:16:94","typeDescriptions":{"typeIdentifier":"t_contract$_PoolFactoryMock_$32594","typeString":"contract PoolFactoryMock"}},"id":36296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5360:12:94","memberName":"registerPool","nodeType":"MemberAccess","referencedDeclaration":32332,"src":"5343:29:94","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$_t_struct$_PoolRoleAccounts_$4677_memory_ptr_$_t_address_$_t_struct$_LiquidityManagement_$4580_memory_ptr_$returns$__$","typeString":"function (address,struct TokenConfig memory[] memory,struct PoolRoleAccounts memory,address,struct LiquidityManagement memory) external"}},"id":36306,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5343:198:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36307,"nodeType":"ExpressionStatement","src":"5343:198:94"}]},"functionSelector":"32333ce6","id":36309,"implemented":true,"kind":"function","modifiers":[],"name":"manualRegisterPoolPassThruTokens","nameLocation":"5018:32:94","nodeType":"FunctionDefinition","parameters":{"id":36253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36248,"mutability":"mutable","name":"pool","nameLocation":"5059:4:94","nodeType":"VariableDeclaration","scope":36309,"src":"5051:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36247,"name":"address","nodeType":"ElementaryTypeName","src":"5051:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36252,"mutability":"mutable","name":"tokens","nameLocation":"5081:6:94","nodeType":"VariableDeclaration","scope":36309,"src":"5065:22:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":36250,"nodeType":"UserDefinedTypeName","pathNode":{"id":36249,"name":"IERC20","nameLocations":["5065:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"5065:6:94"},"referencedDeclaration":40109,"src":"5065:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":36251,"nodeType":"ArrayTypeName","src":"5065:8:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"5050:38:94"},"returnParameters":{"id":36254,"nodeType":"ParameterList","parameters":[],"src":"5098:0:94"},"scope":38836,"src":"5009:539:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[548],"body":{"id":36342,"nodeType":"Block","src":"5753:262:94","statements":[{"expression":{"arguments":[{"id":36328,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36311,"src":"5817:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":36330,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36315,"src":"5852:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}],"id":36329,"name":"buildTokenConfig","nodeType":"Identifier","overloadedDeclarations":[37097,37182,37279,37368],"referencedDeclaration":37097,"src":"5835:16:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$returns$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$","typeString":"function (contract IERC20[] memory) view returns (struct TokenConfig memory[] memory)"}},"id":36331,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5835:24:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},{"id":36332,"name":"timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36317,"src":"5873:9:94","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"id":36333,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36320,"src":"5896:12:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},{"arguments":[{"hexValue":"30","id":36336,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5930:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":36335,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5922:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":36334,"name":"address","nodeType":"ElementaryTypeName","src":"5922:7:94","typeDescriptions":{}}},"id":36337,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5922:10:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":36338,"name":"_getDefaultLiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38601,"src":"5966:30:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_LiquidityManagement_$4580_memory_ptr_$","typeString":"function () pure returns (struct LiquidityManagement memory)"}},"id":36339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5966:32:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"},{"typeIdentifier":"t_uint32","typeString":"uint32"},{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}],"expression":{"id":36325,"name":"_poolFactoryMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36064,"src":"5763:16:94","typeDescriptions":{"typeIdentifier":"t_contract$_PoolFactoryMock_$32594","typeString":"contract PoolFactoryMock"}},"id":36327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5780:23:94","memberName":"registerPoolAtTimestamp","nodeType":"MemberAccess","referencedDeclaration":32400,"src":"5763:40:94","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$_t_uint32_$_t_struct$_PoolRoleAccounts_$4677_memory_ptr_$_t_address_$_t_struct$_LiquidityManagement_$4580_memory_ptr_$returns$__$","typeString":"function (address,struct TokenConfig memory[] memory,uint32,struct PoolRoleAccounts memory,address,struct LiquidityManagement memory) external"}},"id":36340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5763:245:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36341,"nodeType":"ExpressionStatement","src":"5763:245:94"}]},"functionSelector":"0362a513","id":36343,"implemented":true,"kind":"function","modifiers":[{"id":36323,"kind":"modifierInvocation","modifierName":{"id":36322,"name":"whenVaultNotPaused","nameLocations":["5734:18:94"],"nodeType":"IdentifierPath","referencedDeclaration":24972,"src":"5734:18:94"},"nodeType":"ModifierInvocation","src":"5734:18:94"}],"name":"manualRegisterPoolAtTimestamp","nameLocation":"5563:29:94","nodeType":"FunctionDefinition","parameters":{"id":36321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36311,"mutability":"mutable","name":"pool","nameLocation":"5610:4:94","nodeType":"VariableDeclaration","scope":36343,"src":"5602:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36310,"name":"address","nodeType":"ElementaryTypeName","src":"5602:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36315,"mutability":"mutable","name":"tokens","nameLocation":"5640:6:94","nodeType":"VariableDeclaration","scope":36343,"src":"5624:22:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":36313,"nodeType":"UserDefinedTypeName","pathNode":{"id":36312,"name":"IERC20","nameLocations":["5624:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"5624:6:94"},"referencedDeclaration":40109,"src":"5624:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":36314,"nodeType":"ArrayTypeName","src":"5624:8:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":36317,"mutability":"mutable","name":"timestamp","nameLocation":"5663:9:94","nodeType":"VariableDeclaration","scope":36343,"src":"5656:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":36316,"name":"uint32","nodeType":"ElementaryTypeName","src":"5656:6:94","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":36320,"mutability":"mutable","name":"roleAccounts","nameLocation":"5706:12:94","nodeType":"VariableDeclaration","scope":36343,"src":"5682:36:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":36319,"nodeType":"UserDefinedTypeName","pathNode":{"id":36318,"name":"PoolRoleAccounts","nameLocations":["5682:16:94"],"nodeType":"IdentifierPath","referencedDeclaration":4677,"src":"5682:16:94"},"referencedDeclaration":4677,"src":"5682:16:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"src":"5592:132:94"},"returnParameters":{"id":36324,"nodeType":"ParameterList","parameters":[],"src":"5753:0:94"},"scope":38836,"src":"5554:461:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[555],"body":{"id":36361,"nodeType":"Block","src":"6088:88:94","statements":[{"expression":{"id":36359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":36350,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"6098:15:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":36352,"indexExpression":{"id":36351,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36345,"src":"6114:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6098:21:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":36357,"name":"status","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36347,"src":"6162:6:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"baseExpression":{"id":36353,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"6122:15:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":36355,"indexExpression":{"id":36354,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36345,"src":"6138:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6122:21:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6144:17:94","memberName":"setPoolRegistered","nodeType":"MemberAccess","referencedDeclaration":29662,"src":"6122:39:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":36358,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6122:47:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"6098:71:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36360,"nodeType":"ExpressionStatement","src":"6098:71:94"}]},"functionSelector":"352339ee","id":36362,"implemented":true,"kind":"function","modifiers":[],"name":"manualSetPoolRegistered","nameLocation":"6030:23:94","nodeType":"FunctionDefinition","parameters":{"id":36348,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36345,"mutability":"mutable","name":"pool","nameLocation":"6062:4:94","nodeType":"VariableDeclaration","scope":36362,"src":"6054:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36344,"name":"address","nodeType":"ElementaryTypeName","src":"6054:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36347,"mutability":"mutable","name":"status","nameLocation":"6073:6:94","nodeType":"VariableDeclaration","scope":36362,"src":"6068:11:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":36346,"name":"bool","nodeType":"ElementaryTypeName","src":"6068:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6053:27:94"},"returnParameters":{"id":36349,"nodeType":"ParameterList","parameters":[],"src":"6088:0:94"},"scope":38836,"src":"6021:155:94","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[562],"body":{"id":36380,"nodeType":"Block","src":"6261:100:94","statements":[{"expression":{"id":36378,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":36369,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"6271:15:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":36371,"indexExpression":{"id":36370,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36364,"src":"6287:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6271:21:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":36376,"name":"isPoolInitialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36366,"src":"6336:17:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"baseExpression":{"id":36372,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"6295:15:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":36374,"indexExpression":{"id":36373,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36364,"src":"6311:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6295:21:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36375,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6317:18:94","memberName":"setPoolInitialized","nodeType":"MemberAccess","referencedDeclaration":29705,"src":"6295:40:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":36377,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6295:59:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"6271:83:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36379,"nodeType":"ExpressionStatement","src":"6271:83:94"}]},"functionSelector":"5e3e00fa","id":36381,"implemented":true,"kind":"function","modifiers":[],"name":"manualSetInitializedPool","nameLocation":"6191:24:94","nodeType":"FunctionDefinition","parameters":{"id":36367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36364,"mutability":"mutable","name":"pool","nameLocation":"6224:4:94","nodeType":"VariableDeclaration","scope":36381,"src":"6216:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36363,"name":"address","nodeType":"ElementaryTypeName","src":"6216:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36366,"mutability":"mutable","name":"isPoolInitialized","nameLocation":"6235:17:94","nodeType":"VariableDeclaration","scope":36381,"src":"6230:22:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":36365,"name":"bool","nodeType":"ElementaryTypeName","src":"6230:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6215:38:94"},"returnParameters":{"id":36368,"nodeType":"ParameterList","parameters":[],"src":"6261:0:94"},"scope":38836,"src":"6182:179:94","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[576],"body":{"id":36399,"nodeType":"Block","src":"6456:104:94","statements":[{"expression":{"id":36397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":36388,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"6466:15:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":36390,"indexExpression":{"id":36389,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36383,"src":"6482:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6466:21:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":36395,"name":"pauseWindowEndTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36385,"src":"6534:18:94","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"baseExpression":{"id":36391,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"6490:15:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":36393,"indexExpression":{"id":36392,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36383,"src":"6506:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6490:21:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6512:21:94","memberName":"setPauseWindowEndTime","nodeType":"MemberAccess","referencedDeclaration":30392,"src":"6490:43:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_uint32_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,uint32) pure returns (PoolConfigBits)"}},"id":36396,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6490:63:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"6466:87:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36398,"nodeType":"ExpressionStatement","src":"6466:87:94"}]},"functionSelector":"0c87409b","id":36400,"implemented":true,"kind":"function","modifiers":[],"name":"manualSetPoolPauseWindowEndTime","nameLocation":"6376:31:94","nodeType":"FunctionDefinition","parameters":{"id":36386,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36383,"mutability":"mutable","name":"pool","nameLocation":"6416:4:94","nodeType":"VariableDeclaration","scope":36400,"src":"6408:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36382,"name":"address","nodeType":"ElementaryTypeName","src":"6408:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36385,"mutability":"mutable","name":"pauseWindowEndTime","nameLocation":"6429:18:94","nodeType":"VariableDeclaration","scope":36400,"src":"6422:25:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":36384,"name":"uint32","nodeType":"ElementaryTypeName","src":"6422:6:94","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"6407:41:94"},"returnParameters":{"id":36387,"nodeType":"ParameterList","parameters":[],"src":"6456:0:94"},"scope":38836,"src":"6367:193:94","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[569],"body":{"id":36418,"nodeType":"Block","src":"6635:90:94","statements":[{"expression":{"id":36416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":36407,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"6645:15:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":36409,"indexExpression":{"id":36408,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36402,"src":"6661:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6645:21:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":36414,"name":"isPoolPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36404,"src":"6705:12:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"baseExpression":{"id":36410,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"6669:15:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":36412,"indexExpression":{"id":36411,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36402,"src":"6685:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6669:21:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6691:13:94","memberName":"setPoolPaused","nodeType":"MemberAccess","referencedDeclaration":29748,"src":"6669:35:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":36415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6669:49:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"6645:73:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36417,"nodeType":"ExpressionStatement","src":"6645:73:94"}]},"functionSelector":"cbde2b68","id":36419,"implemented":true,"kind":"function","modifiers":[],"name":"manualSetPoolPaused","nameLocation":"6575:19:94","nodeType":"FunctionDefinition","parameters":{"id":36405,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36402,"mutability":"mutable","name":"pool","nameLocation":"6603:4:94","nodeType":"VariableDeclaration","scope":36419,"src":"6595:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36401,"name":"address","nodeType":"ElementaryTypeName","src":"6595:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36404,"mutability":"mutable","name":"isPoolPaused","nameLocation":"6614:12:94","nodeType":"VariableDeclaration","scope":36419,"src":"6609:17:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":36403,"name":"bool","nodeType":"ElementaryTypeName","src":"6609:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6594:33:94"},"returnParameters":{"id":36406,"nodeType":"ParameterList","parameters":[],"src":"6635:0:94"},"scope":38836,"src":"6566:159:94","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[581],"body":{"id":36431,"nodeType":"Block","src":"6788:80:94","statements":[{"expression":{"id":36429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36424,"name":"_vaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28272,"src":"6798:15:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":36427,"name":"isVaultPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36421,"src":"6847:13:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":36425,"name":"_vaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28272,"src":"6816:15:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"id":36426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6832:14:94","memberName":"setVaultPaused","nodeType":"MemberAccess","referencedDeclaration":31283,"src":"6816:30:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_VaultStateBits_$31184_$_t_bool_$returns$_t_userDefinedValueType$_VaultStateBits_$31184_$attached_to$_t_userDefinedValueType$_VaultStateBits_$31184_$","typeString":"function (VaultStateBits,bool) pure returns (VaultStateBits)"}},"id":36428,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6816:45:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"src":"6798:63:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"id":36430,"nodeType":"ExpressionStatement","src":"6798:63:94"}]},"functionSelector":"692407ae","id":36432,"implemented":true,"kind":"function","modifiers":[],"name":"manualSetVaultPaused","nameLocation":"6740:20:94","nodeType":"FunctionDefinition","parameters":{"id":36422,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36421,"mutability":"mutable","name":"isVaultPaused","nameLocation":"6766:13:94","nodeType":"VariableDeclaration","scope":36432,"src":"6761:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":36420,"name":"bool","nodeType":"ElementaryTypeName","src":"6761:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6760:20:94"},"returnParameters":{"id":36423,"nodeType":"ParameterList","parameters":[],"src":"6788:0:94"},"scope":38836,"src":"6731:137:94","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[588],"body":{"id":36449,"nodeType":"Block","src":"6952:114:94","statements":[{"expression":{"id":36447,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36439,"name":"_vaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28272,"src":"6962:15:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":36445,"name":"isQueryDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36436,"src":"7043:15:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[{"id":36442,"name":"isVaultPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36434,"src":"7011:13:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":36440,"name":"_vaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28272,"src":"6980:15:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"id":36441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6996:14:94","memberName":"setVaultPaused","nodeType":"MemberAccess","referencedDeclaration":31283,"src":"6980:30:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_VaultStateBits_$31184_$_t_bool_$returns$_t_userDefinedValueType$_VaultStateBits_$31184_$attached_to$_t_userDefinedValueType$_VaultStateBits_$31184_$","typeString":"function (VaultStateBits,bool) pure returns (VaultStateBits)"}},"id":36443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6980:45:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"id":36444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7026:16:94","memberName":"setQueryDisabled","nodeType":"MemberAccess","referencedDeclaration":31242,"src":"6980:62:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_VaultStateBits_$31184_$_t_bool_$returns$_t_userDefinedValueType$_VaultStateBits_$31184_$attached_to$_t_userDefinedValueType$_VaultStateBits_$31184_$","typeString":"function (VaultStateBits,bool) pure returns (VaultStateBits)"}},"id":36446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6980:79:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"src":"6962:97:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"id":36448,"nodeType":"ExpressionStatement","src":"6962:97:94"}]},"functionSelector":"10c1dc41","id":36450,"implemented":true,"kind":"function","modifiers":[],"name":"manualSetVaultState","nameLocation":"6883:19:94","nodeType":"FunctionDefinition","parameters":{"id":36437,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36434,"mutability":"mutable","name":"isVaultPaused","nameLocation":"6908:13:94","nodeType":"VariableDeclaration","scope":36450,"src":"6903:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":36433,"name":"bool","nodeType":"ElementaryTypeName","src":"6903:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":36436,"mutability":"mutable","name":"isQueryDisabled","nameLocation":"6928:15:94","nodeType":"VariableDeclaration","scope":36450,"src":"6923:20:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":36435,"name":"bool","nodeType":"ElementaryTypeName","src":"6923:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6902:42:94"},"returnParameters":{"id":36438,"nodeType":"ParameterList","parameters":[],"src":"6952:0:94"},"scope":38836,"src":"6874:192:94","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[618],"body":{"id":36579,"nodeType":"Block","src":"7148:1462:94","statements":[{"assignments":[36460],"declarations":[{"constant":false,"id":36460,"mutability":"mutable","name":"poolConfigBits","nameLocation":"7173:14:94","nodeType":"VariableDeclaration","scope":36579,"src":"7158:29:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":36459,"nodeType":"UserDefinedTypeName","pathNode":{"id":36458,"name":"PoolConfigBits","nameLocations":["7158:14:94"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"7158:14:94"},"referencedDeclaration":4582,"src":"7158:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"id":36464,"initialValue":{"baseExpression":{"id":36461,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"7190:15:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":36463,"indexExpression":{"id":36462,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36452,"src":"7206:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7190:21:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"VariableDeclarationStatement","src":"7158:53:94"},{"expression":{"id":36471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36465,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36460,"src":"7222:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":36468,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36455,"src":"7272:6:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig memory"}},"id":36469,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7279:16:94","memberName":"isPoolRegistered","nodeType":"MemberAccess","referencedDeclaration":4598,"src":"7272:23:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":36466,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36460,"src":"7239:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7254:17:94","memberName":"setPoolRegistered","nodeType":"MemberAccess","referencedDeclaration":29662,"src":"7239:32:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":36470,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7239:57:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"7222:74:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36472,"nodeType":"ExpressionStatement","src":"7222:74:94"},{"expression":{"id":36479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36473,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36460,"src":"7306:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":36476,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36455,"src":"7357:6:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig memory"}},"id":36477,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7364:17:94","memberName":"isPoolInitialized","nodeType":"MemberAccess","referencedDeclaration":4600,"src":"7357:24:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":36474,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36460,"src":"7323:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7338:18:94","memberName":"setPoolInitialized","nodeType":"MemberAccess","referencedDeclaration":29705,"src":"7323:33:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":36478,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7323:59:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"7306:76:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36480,"nodeType":"ExpressionStatement","src":"7306:76:94"},{"expression":{"id":36487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36481,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36460,"src":"7392:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":36484,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36455,"src":"7446:6:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig memory"}},"id":36485,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7453:20:94","memberName":"isPoolInRecoveryMode","nodeType":"MemberAccess","referencedDeclaration":4604,"src":"7446:27:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":36482,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36460,"src":"7409:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7424:21:94","memberName":"setPoolInRecoveryMode","nodeType":"MemberAccess","referencedDeclaration":29791,"src":"7409:36:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":36486,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7409:65:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"7392:82:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36488,"nodeType":"ExpressionStatement","src":"7392:82:94"},{"expression":{"id":36495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36489,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36460,"src":"7484:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":36492,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36455,"src":"7530:6:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig memory"}},"id":36493,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7537:12:94","memberName":"isPoolPaused","nodeType":"MemberAccess","referencedDeclaration":4602,"src":"7530:19:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":36490,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36460,"src":"7501:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7516:13:94","memberName":"setPoolPaused","nodeType":"MemberAccess","referencedDeclaration":29748,"src":"7501:28:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":36494,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7501:49:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"7484:66:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36496,"nodeType":"ExpressionStatement","src":"7484:66:94"},{"expression":{"id":36503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36497,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36460,"src":"7560:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":36500,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36455,"src":"7619:6:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig memory"}},"id":36501,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7626:23:94","memberName":"staticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":4588,"src":"7619:30:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":36498,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36460,"src":"7577:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7592:26:94","memberName":"setStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":30101,"src":"7577:41:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_uint256_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,uint256) pure returns (PoolConfigBits)"}},"id":36502,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7577:73:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"7560:90:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36504,"nodeType":"ExpressionStatement","src":"7560:90:94"},{"expression":{"id":36511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36505,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36460,"src":"7660:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":36507,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36460,"src":"7714:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},{"expression":{"id":36508,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36455,"src":"7730:6:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig memory"}},"id":36509,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7737:26:94","memberName":"aggregateSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":4590,"src":"7730:33:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":36506,"name":"_manualSetAggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38685,"src":"7677:36:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_uint256_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,uint256) pure returns (PoolConfigBits)"}},"id":36510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7677:87:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"7660:104:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36512,"nodeType":"ExpressionStatement","src":"7660:104:94"},{"expression":{"id":36519,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36513,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36460,"src":"7774:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":36516,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36455,"src":"7837:6:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig memory"}},"id":36517,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7844:27:94","memberName":"aggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":4592,"src":"7837:34:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":36514,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36460,"src":"7791:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7806:30:94","memberName":"setAggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":30223,"src":"7791:45:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_uint256_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,uint256) pure returns (PoolConfigBits)"}},"id":36518,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7791:81:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"7774:98:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36520,"nodeType":"ExpressionStatement","src":"7774:98:94"},{"expression":{"id":36527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36521,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36460,"src":"7882:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":36524,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36455,"src":"7935:6:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig memory"}},"id":36525,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7942:17:94","memberName":"tokenDecimalDiffs","nodeType":"MemberAccess","referencedDeclaration":4594,"src":"7935:24:94","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint40","typeString":"uint40"}],"expression":{"id":36522,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36460,"src":"7899:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7914:20:94","memberName":"setTokenDecimalDiffs","nodeType":"MemberAccess","referencedDeclaration":30342,"src":"7899:35:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_uint40_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,uint40) pure returns (PoolConfigBits)"}},"id":36526,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7899:61:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"7882:78:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36528,"nodeType":"ExpressionStatement","src":"7882:78:94"},{"expression":{"id":36535,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36529,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36460,"src":"7970:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":36532,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36455,"src":"8024:6:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig memory"}},"id":36533,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8031:18:94","memberName":"pauseWindowEndTime","nodeType":"MemberAccess","referencedDeclaration":4596,"src":"8024:25:94","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint32","typeString":"uint32"}],"expression":{"id":36530,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36460,"src":"7987:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36531,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8002:21:94","memberName":"setPauseWindowEndTime","nodeType":"MemberAccess","referencedDeclaration":30392,"src":"7987:36:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_uint32_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,uint32) pure returns (PoolConfigBits)"}},"id":36534,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7987:63:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"7970:80:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36536,"nodeType":"ExpressionStatement","src":"7970:80:94"},{"expression":{"id":36544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36537,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36460,"src":"8060:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"expression":{"id":36540,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36455,"src":"8135:6:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig memory"}},"id":36541,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8142:19:94","memberName":"liquidityManagement","nodeType":"MemberAccess","referencedDeclaration":4586,"src":"8135:26:94","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}},"id":36542,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8162:26:94","memberName":"disableUnbalancedLiquidity","nodeType":"MemberAccess","referencedDeclaration":4573,"src":"8135:53:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":36538,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36460,"src":"8077:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8092:29:94","memberName":"setDisableUnbalancedLiquidity","nodeType":"MemberAccess","referencedDeclaration":29854,"src":"8077:44:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":36543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8077:121:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"8060:138:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36545,"nodeType":"ExpressionStatement","src":"8060:138:94"},{"expression":{"id":36553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36546,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36460,"src":"8208:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"expression":{"id":36549,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36455,"src":"8262:6:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig memory"}},"id":36550,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8269:19:94","memberName":"liquidityManagement","nodeType":"MemberAccess","referencedDeclaration":4586,"src":"8262:26:94","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}},"id":36551,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8289:24:94","memberName":"enableAddLiquidityCustom","nodeType":"MemberAccess","referencedDeclaration":4575,"src":"8262:51:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":36547,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36460,"src":"8225:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8240:21:94","memberName":"setAddLiquidityCustom","nodeType":"MemberAccess","referencedDeclaration":29916,"src":"8225:36:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":36552,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8225:89:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"8208:106:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36554,"nodeType":"ExpressionStatement","src":"8208:106:94"},{"expression":{"id":36562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36555,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36460,"src":"8324:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"expression":{"id":36558,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36455,"src":"8394:6:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig memory"}},"id":36559,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8401:19:94","memberName":"liquidityManagement","nodeType":"MemberAccess","referencedDeclaration":4586,"src":"8394:26:94","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}},"id":36560,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8421:27:94","memberName":"enableRemoveLiquidityCustom","nodeType":"MemberAccess","referencedDeclaration":4577,"src":"8394:54:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":36556,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36460,"src":"8341:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8356:24:94","memberName":"setRemoveLiquidityCustom","nodeType":"MemberAccess","referencedDeclaration":29978,"src":"8341:39:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":36561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8341:117:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"8324:134:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36563,"nodeType":"ExpressionStatement","src":"8324:134:94"},{"expression":{"id":36571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36564,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36460,"src":"8468:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"expression":{"id":36567,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36455,"src":"8512:6:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig memory"}},"id":36568,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8519:19:94","memberName":"liquidityManagement","nodeType":"MemberAccess","referencedDeclaration":4586,"src":"8512:26:94","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}},"id":36569,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8539:14:94","memberName":"enableDonation","nodeType":"MemberAccess","referencedDeclaration":4579,"src":"8512:41:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":36565,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36460,"src":"8485:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8500:11:94","memberName":"setDonation","nodeType":"MemberAccess","referencedDeclaration":30021,"src":"8485:26:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":36570,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8485:69:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"8468:86:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36572,"nodeType":"ExpressionStatement","src":"8468:86:94"},{"expression":{"id":36577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":36573,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"8565:15:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":36575,"indexExpression":{"id":36574,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36452,"src":"8581:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8565:21:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":36576,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36460,"src":"8589:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"8565:38:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36578,"nodeType":"ExpressionStatement","src":"8565:38:94"}]},"functionSelector":"5c1c1c81","id":36580,"implemented":true,"kind":"function","modifiers":[],"name":"manualSetPoolConfig","nameLocation":"7081:19:94","nodeType":"FunctionDefinition","parameters":{"id":36456,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36452,"mutability":"mutable","name":"pool","nameLocation":"7109:4:94","nodeType":"VariableDeclaration","scope":36580,"src":"7101:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36451,"name":"address","nodeType":"ElementaryTypeName","src":"7101:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36455,"mutability":"mutable","name":"config","nameLocation":"7133:6:94","nodeType":"VariableDeclaration","scope":36580,"src":"7115:24:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig"},"typeName":{"id":36454,"nodeType":"UserDefinedTypeName","pathNode":{"id":36453,"name":"PoolConfig","nameLocations":["7115:10:94"],"nodeType":"IdentifierPath","referencedDeclaration":4605,"src":"7115:10:94"},"referencedDeclaration":4605,"src":"7115:10:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_storage_ptr","typeString":"struct PoolConfig"}},"visibility":"internal"}],"src":"7100:40:94"},"returnParameters":{"id":36457,"nodeType":"ParameterList","parameters":[],"src":"7148:0:94"},"scope":38836,"src":"7072:1538:94","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[633],"body":{"id":36592,"nodeType":"Block","src":"8694:57:94","statements":[{"expression":{"arguments":[{"id":36588,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36582,"src":"8732:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":36589,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36584,"src":"8738:5:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":36587,"name":"_setStaticSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25506,"src":"8704:27:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":36590,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8704:40:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36591,"nodeType":"ExpressionStatement","src":"8704:40:94"}]},"functionSelector":"195aaef9","id":36593,"implemented":true,"kind":"function","modifiers":[],"name":"manualSetStaticSwapFeePercentage","nameLocation":"8625:32:94","nodeType":"FunctionDefinition","parameters":{"id":36585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36582,"mutability":"mutable","name":"pool","nameLocation":"8666:4:94","nodeType":"VariableDeclaration","scope":36593,"src":"8658:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36581,"name":"address","nodeType":"ElementaryTypeName","src":"8658:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36584,"mutability":"mutable","name":"value","nameLocation":"8680:5:94","nodeType":"VariableDeclaration","scope":36593,"src":"8672:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36583,"name":"uint256","nodeType":"ElementaryTypeName","src":"8672:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8657:29:94"},"returnParameters":{"id":36586,"nodeType":"ParameterList","parameters":[],"src":"8694:0:94"},"scope":38836,"src":"8616:135:94","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[641],"body":{"id":36611,"nodeType":"Block","src":"8841:96:94","statements":[{"expression":{"id":36609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":36600,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"8851:15:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":36602,"indexExpression":{"id":36601,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36595,"src":"8867:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8851:21:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":36607,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36597,"src":"8924:5:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":36603,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"8875:15:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":36605,"indexExpression":{"id":36604,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36595,"src":"8891:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8875:21:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36606,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8897:26:94","memberName":"setStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":30101,"src":"8875:48:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_uint256_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,uint256) pure returns (PoolConfigBits)"}},"id":36608,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8875:55:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"8851:79:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36610,"nodeType":"ExpressionStatement","src":"8851:79:94"}]},"functionSelector":"2b766278","id":36612,"implemented":true,"kind":"function","modifiers":[],"name":"manualUnsafeSetStaticSwapFeePercentage","nameLocation":"8766:38:94","nodeType":"FunctionDefinition","parameters":{"id":36598,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36595,"mutability":"mutable","name":"pool","nameLocation":"8813:4:94","nodeType":"VariableDeclaration","scope":36612,"src":"8805:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36594,"name":"address","nodeType":"ElementaryTypeName","src":"8805:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36597,"mutability":"mutable","name":"value","nameLocation":"8827:5:94","nodeType":"VariableDeclaration","scope":36612,"src":"8819:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36596,"name":"uint256","nodeType":"ElementaryTypeName","src":"8819:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8804:29:94"},"returnParameters":{"id":36599,"nodeType":"ParameterList","parameters":[],"src":"8841:0:94"},"scope":38836,"src":"8757:180:94","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[626],"body":{"id":36722,"nodeType":"Block","src":"9026:1295:94","statements":[{"assignments":[36622],"declarations":[{"constant":false,"id":36622,"mutability":"mutable","name":"poolConfigBits","nameLocation":"9051:14:94","nodeType":"VariableDeclaration","scope":36722,"src":"9036:29:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":36621,"nodeType":"UserDefinedTypeName","pathNode":{"id":36620,"name":"PoolConfigBits","nameLocations":["9036:14:94"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"9036:14:94"},"referencedDeclaration":4582,"src":"9036:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"id":36626,"initialValue":{"baseExpression":{"id":36623,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"9068:15:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":36625,"indexExpression":{"id":36624,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36614,"src":"9084:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9068:21:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"VariableDeclarationStatement","src":"9036:53:94"},{"expression":{"id":36633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36627,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36622,"src":"9100:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":36630,"name":"hooksConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36617,"src":"9155:11:94","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4651_memory_ptr","typeString":"struct HooksConfig memory"}},"id":36631,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9167:25:94","memberName":"enableHookAdjustedAmounts","nodeType":"MemberAccess","referencedDeclaration":4630,"src":"9155:37:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":36628,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36622,"src":"9117:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9132:22:94","memberName":"setHookAdjustedAmounts","nodeType":"MemberAccess","referencedDeclaration":28446,"src":"9117:37:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":36632,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9117:76:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"9100:93:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36634,"nodeType":"ExpressionStatement","src":"9100:93:94"},{"expression":{"id":36641,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36635,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36622,"src":"9203:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":36638,"name":"hooksConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36617,"src":"9265:11:94","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4651_memory_ptr","typeString":"struct HooksConfig memory"}},"id":36639,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9277:26:94","memberName":"shouldCallBeforeInitialize","nodeType":"MemberAccess","referencedDeclaration":4632,"src":"9265:38:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":36636,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36622,"src":"9220:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9235:29:94","memberName":"setShouldCallBeforeInitialize","nodeType":"MemberAccess","referencedDeclaration":28489,"src":"9220:44:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":36640,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9220:84:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"9203:101:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36642,"nodeType":"ExpressionStatement","src":"9203:101:94"},{"expression":{"id":36649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36643,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36622,"src":"9314:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":36646,"name":"hooksConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36617,"src":"9375:11:94","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4651_memory_ptr","typeString":"struct HooksConfig memory"}},"id":36647,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9387:25:94","memberName":"shouldCallAfterInitialize","nodeType":"MemberAccess","referencedDeclaration":4634,"src":"9375:37:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":36644,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36622,"src":"9331:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9346:28:94","memberName":"setShouldCallAfterInitialize","nodeType":"MemberAccess","referencedDeclaration":28532,"src":"9331:43:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":36648,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9331:82:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"9314:99:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36650,"nodeType":"ExpressionStatement","src":"9314:99:94"},{"expression":{"id":36657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36651,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36622,"src":"9423:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":36654,"name":"hooksConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36617,"src":"9490:11:94","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4651_memory_ptr","typeString":"struct HooksConfig memory"}},"id":36655,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9502:31:94","memberName":"shouldCallComputeDynamicSwapFee","nodeType":"MemberAccess","referencedDeclaration":4636,"src":"9490:43:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":36652,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36622,"src":"9440:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9455:34:94","memberName":"setShouldCallComputeDynamicSwapFee","nodeType":"MemberAccess","referencedDeclaration":28575,"src":"9440:49:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":36656,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9440:94:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"9423:111:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36658,"nodeType":"ExpressionStatement","src":"9423:111:94"},{"expression":{"id":36665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36659,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36622,"src":"9544:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":36662,"name":"hooksConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36617,"src":"9600:11:94","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4651_memory_ptr","typeString":"struct HooksConfig memory"}},"id":36663,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9612:20:94","memberName":"shouldCallBeforeSwap","nodeType":"MemberAccess","referencedDeclaration":4638,"src":"9600:32:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":36660,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36622,"src":"9561:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9576:23:94","memberName":"setShouldCallBeforeSwap","nodeType":"MemberAccess","referencedDeclaration":28618,"src":"9561:38:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":36664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9561:72:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"9544:89:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36666,"nodeType":"ExpressionStatement","src":"9544:89:94"},{"expression":{"id":36673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36667,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36622,"src":"9643:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":36670,"name":"hooksConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36617,"src":"9698:11:94","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4651_memory_ptr","typeString":"struct HooksConfig memory"}},"id":36671,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9710:19:94","memberName":"shouldCallAfterSwap","nodeType":"MemberAccess","referencedDeclaration":4640,"src":"9698:31:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":36668,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36622,"src":"9660:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9675:22:94","memberName":"setShouldCallAfterSwap","nodeType":"MemberAccess","referencedDeclaration":28661,"src":"9660:37:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":36672,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9660:70:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"9643:87:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36674,"nodeType":"ExpressionStatement","src":"9643:87:94"},{"expression":{"id":36681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36675,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36622,"src":"9740:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":36678,"name":"hooksConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36617,"src":"9804:11:94","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4651_memory_ptr","typeString":"struct HooksConfig memory"}},"id":36679,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9816:28:94","memberName":"shouldCallBeforeAddLiquidity","nodeType":"MemberAccess","referencedDeclaration":4642,"src":"9804:40:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":36676,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36622,"src":"9757:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9772:31:94","memberName":"setShouldCallBeforeAddLiquidity","nodeType":"MemberAccess","referencedDeclaration":28704,"src":"9757:46:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":36680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9757:88:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"9740:105:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36682,"nodeType":"ExpressionStatement","src":"9740:105:94"},{"expression":{"id":36689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36683,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36622,"src":"9855:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":36686,"name":"hooksConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36617,"src":"9918:11:94","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4651_memory_ptr","typeString":"struct HooksConfig memory"}},"id":36687,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9930:27:94","memberName":"shouldCallAfterAddLiquidity","nodeType":"MemberAccess","referencedDeclaration":4644,"src":"9918:39:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":36684,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36622,"src":"9872:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36685,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9887:30:94","memberName":"setShouldCallAfterAddLiquidity","nodeType":"MemberAccess","referencedDeclaration":28747,"src":"9872:45:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":36688,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9872:86:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"9855:103:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36690,"nodeType":"ExpressionStatement","src":"9855:103:94"},{"expression":{"id":36697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36691,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36622,"src":"9968:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":36694,"name":"hooksConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36617,"src":"10035:11:94","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4651_memory_ptr","typeString":"struct HooksConfig memory"}},"id":36695,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10047:31:94","memberName":"shouldCallBeforeRemoveLiquidity","nodeType":"MemberAccess","referencedDeclaration":4646,"src":"10035:43:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":36692,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36622,"src":"9985:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10000:34:94","memberName":"setShouldCallBeforeRemoveLiquidity","nodeType":"MemberAccess","referencedDeclaration":28790,"src":"9985:49:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":36696,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9985:94:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"9968:111:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36698,"nodeType":"ExpressionStatement","src":"9968:111:94"},{"expression":{"id":36705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":36699,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36622,"src":"10089:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":36702,"name":"hooksConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36617,"src":"10155:11:94","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4651_memory_ptr","typeString":"struct HooksConfig memory"}},"id":36703,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10167:30:94","memberName":"shouldCallAfterRemoveLiquidity","nodeType":"MemberAccess","referencedDeclaration":4648,"src":"10155:42:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":36700,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36622,"src":"10106:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10121:33:94","memberName":"setShouldCallAfterRemoveLiquidity","nodeType":"MemberAccess","referencedDeclaration":28833,"src":"10106:48:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_bool_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,bool) pure returns (PoolConfigBits)"}},"id":36704,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10106:92:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"10089:109:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36706,"nodeType":"ExpressionStatement","src":"10089:109:94"},{"expression":{"id":36711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":36707,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"10209:15:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":36709,"indexExpression":{"id":36708,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36614,"src":"10225:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10209:21:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":36710,"name":"poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36622,"src":"10233:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"10209:38:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36712,"nodeType":"ExpressionStatement","src":"10209:38:94"},{"expression":{"id":36720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":36713,"name":"_hooksContracts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28236,"src":"10257:15:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_contract$_IHooks_$2026_$","typeString":"mapping(address => contract IHooks)"}},"id":36715,"indexExpression":{"id":36714,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36614,"src":"10273:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10257:21:94","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":36717,"name":"hooksConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36617,"src":"10288:11:94","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4651_memory_ptr","typeString":"struct HooksConfig memory"}},"id":36718,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10300:13:94","memberName":"hooksContract","nodeType":"MemberAccess","referencedDeclaration":4650,"src":"10288:25:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":36716,"name":"IHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2026,"src":"10281:6:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IHooks_$2026_$","typeString":"type(contract IHooks)"}},"id":36719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10281:33:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"src":"10257:57:94","typeDescriptions":{"typeIdentifier":"t_contract$_IHooks_$2026","typeString":"contract IHooks"}},"id":36721,"nodeType":"ExpressionStatement","src":"10257:57:94"}]},"functionSelector":"c1fdcd62","id":36723,"implemented":true,"kind":"function","modifiers":[],"name":"manualSetHooksConfig","nameLocation":"8952:20:94","nodeType":"FunctionDefinition","parameters":{"id":36618,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36614,"mutability":"mutable","name":"pool","nameLocation":"8981:4:94","nodeType":"VariableDeclaration","scope":36723,"src":"8973:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36613,"name":"address","nodeType":"ElementaryTypeName","src":"8973:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36617,"mutability":"mutable","name":"hooksConfig","nameLocation":"9006:11:94","nodeType":"VariableDeclaration","scope":36723,"src":"8987:30:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4651_memory_ptr","typeString":"struct HooksConfig"},"typeName":{"id":36616,"nodeType":"UserDefinedTypeName","pathNode":{"id":36615,"name":"HooksConfig","nameLocations":["8987:11:94"],"nodeType":"IdentifierPath","referencedDeclaration":4651,"src":"8987:11:94"},"referencedDeclaration":4651,"src":"8987:11:94","typeDescriptions":{"typeIdentifier":"t_struct$_HooksConfig_$4651_storage_ptr","typeString":"struct HooksConfig"}},"visibility":"internal"}],"src":"8972:46:94"},"returnParameters":{"id":36619,"nodeType":"ParameterList","parameters":[],"src":"9026:0:94"},"scope":38836,"src":"8943:1378:94","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[684],"body":{"id":36737,"nodeType":"Block","src":"10404:47:94","statements":[{"expression":{"id":36735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":36731,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"10414:15:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":36733,"indexExpression":{"id":36732,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36725,"src":"10430:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10414:21:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":36734,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36728,"src":"10438:6:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"10414:30:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":36736,"nodeType":"ExpressionStatement","src":"10414:30:94"}]},"functionSelector":"df138458","id":36738,"implemented":true,"kind":"function","modifiers":[],"name":"manualSetPoolConfigBits","nameLocation":"10336:23:94","nodeType":"FunctionDefinition","parameters":{"id":36729,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36725,"mutability":"mutable","name":"pool","nameLocation":"10368:4:94","nodeType":"VariableDeclaration","scope":36738,"src":"10360:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36724,"name":"address","nodeType":"ElementaryTypeName","src":"10360:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36728,"mutability":"mutable","name":"config","nameLocation":"10389:6:94","nodeType":"VariableDeclaration","scope":36738,"src":"10374:21:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":36727,"nodeType":"UserDefinedTypeName","pathNode":{"id":36726,"name":"PoolConfigBits","nameLocations":["10374:14:94"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"10374:14:94"},"referencedDeclaration":4582,"src":"10374:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"10359:37:94"},"returnParameters":{"id":36730,"nodeType":"ParameterList","parameters":[],"src":"10404:0:94"},"scope":38836,"src":"10327:124:94","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[597],"body":{"id":36784,"nodeType":"Block","src":"10544:333:94","statements":[{"body":{"id":36782,"nodeType":"Block","src":"10603:268:94","statements":[{"expression":{"id":36780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":36758,"name":"_poolTokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28250,"src":"10617:14:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_struct$_TokenInfo_$4704_storage_$_$","typeString":"mapping(address => mapping(contract IERC20 => struct TokenInfo storage ref))"}},"id":36764,"indexExpression":{"id":36759,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36740,"src":"10632:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10617:20:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_struct$_TokenInfo_$4704_storage_$","typeString":"mapping(contract IERC20 => struct TokenInfo storage ref)"}},"id":36765,"indexExpression":{"expression":{"baseExpression":{"id":36760,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36744,"src":"10638:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":36762,"indexExpression":{"id":36761,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36748,"src":"10650:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10638:14:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":36763,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10653:5:94","memberName":"token","nodeType":"MemberAccess","referencedDeclaration":4685,"src":"10638:20:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10617:42:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_storage","typeString":"struct TokenInfo storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"baseExpression":{"id":36767,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36744,"src":"10701:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":36769,"indexExpression":{"id":36768,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36748,"src":"10713:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10701:14:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":36770,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10716:9:94","memberName":"tokenType","nodeType":"MemberAccess","referencedDeclaration":4688,"src":"10701:24:94","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},{"expression":{"baseExpression":{"id":36771,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36744,"src":"10757:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":36773,"indexExpression":{"id":36772,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36748,"src":"10769:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10757:14:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":36774,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10772:12:94","memberName":"rateProvider","nodeType":"MemberAccess","referencedDeclaration":4691,"src":"10757:27:94","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"}},{"expression":{"baseExpression":{"id":36775,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36744,"src":"10817:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":36777,"indexExpression":{"id":36776,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36748,"src":"10829:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10817:14:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":36778,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10832:13:94","memberName":"paysYieldFees","nodeType":"MemberAccess","referencedDeclaration":4693,"src":"10817:28:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"},{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":36766,"name":"TokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4704,"src":"10662:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_TokenInfo_$4704_storage_ptr_$","typeString":"type(struct TokenInfo storage pointer)"}},"id":36779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["10690:9:94","10743:12:94","10802:13:94"],"names":["tokenType","rateProvider","paysYieldFees"],"nodeType":"FunctionCall","src":"10662:198:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_memory_ptr","typeString":"struct TokenInfo memory"}},"src":"10617:243:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_storage","typeString":"struct TokenInfo storage ref"}},"id":36781,"nodeType":"ExpressionStatement","src":"10617:243:94"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36751,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36748,"src":"10574:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":36752,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36744,"src":"10578:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":36753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10590:6:94","memberName":"length","nodeType":"MemberAccess","src":"10578:18:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10574:22:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":36783,"initializationExpression":{"assignments":[36748],"declarations":[{"constant":false,"id":36748,"mutability":"mutable","name":"i","nameLocation":"10567:1:94","nodeType":"VariableDeclaration","scope":36783,"src":"10559:9:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36747,"name":"uint256","nodeType":"ElementaryTypeName","src":"10559:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36750,"initialValue":{"hexValue":"30","id":36749,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10571:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10559:13:94"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":36756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"10598:3:94","subExpression":{"id":36755,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36748,"src":"10600:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36757,"nodeType":"ExpressionStatement","src":"10598:3:94"},"nodeType":"ForStatement","src":"10554:317:94"}]},"functionSelector":"dab50579","id":36785,"implemented":true,"kind":"function","modifiers":[],"name":"manualSetPoolTokenInfo","nameLocation":"10466:22:94","nodeType":"FunctionDefinition","parameters":{"id":36745,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36740,"mutability":"mutable","name":"pool","nameLocation":"10497:4:94","nodeType":"VariableDeclaration","scope":36785,"src":"10489:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36739,"name":"address","nodeType":"ElementaryTypeName","src":"10489:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36744,"mutability":"mutable","name":"tokenConfig","nameLocation":"10524:11:94","nodeType":"VariableDeclaration","scope":36785,"src":"10503:32:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":36742,"nodeType":"UserDefinedTypeName","pathNode":{"id":36741,"name":"TokenConfig","nameLocations":["10503:11:94"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"10503:11:94"},"referencedDeclaration":4694,"src":"10503:11:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":36743,"nodeType":"ArrayTypeName","src":"10503:13:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"}],"src":"10488:48:94"},"returnParameters":{"id":36746,"nodeType":"ParameterList","parameters":[],"src":"10544:0:94"},"scope":38836,"src":"10457:420:94","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[610],"body":{"id":36823,"nodeType":"Block","src":"10990:131:94","statements":[{"body":{"id":36821,"nodeType":"Block","src":"11044:71:94","statements":[{"expression":{"id":36819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":36809,"name":"_poolTokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28250,"src":"11058:14:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_struct$_TokenInfo_$4704_storage_$_$","typeString":"mapping(address => mapping(contract IERC20 => struct TokenInfo storage ref))"}},"id":36814,"indexExpression":{"id":36810,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36787,"src":"11073:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11058:20:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_struct$_TokenInfo_$4704_storage_$","typeString":"mapping(contract IERC20 => struct TokenInfo storage ref)"}},"id":36815,"indexExpression":{"baseExpression":{"id":36811,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36791,"src":"11079:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":36813,"indexExpression":{"id":36812,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36799,"src":"11086:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11079:9:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11058:31:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_storage","typeString":"struct TokenInfo storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":36816,"name":"tokenInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36795,"src":"11092:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4704_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo memory[] memory"}},"id":36818,"indexExpression":{"id":36817,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36799,"src":"11102:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11092:12:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_memory_ptr","typeString":"struct TokenInfo memory"}},"src":"11058:46:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_storage","typeString":"struct TokenInfo storage ref"}},"id":36820,"nodeType":"ExpressionStatement","src":"11058:46:94"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36802,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36799,"src":"11020:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":36803,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36791,"src":"11024:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":36804,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11031:6:94","memberName":"length","nodeType":"MemberAccess","src":"11024:13:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11020:17:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":36822,"initializationExpression":{"assignments":[36799],"declarations":[{"constant":false,"id":36799,"mutability":"mutable","name":"i","nameLocation":"11013:1:94","nodeType":"VariableDeclaration","scope":36822,"src":"11005:9:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36798,"name":"uint256","nodeType":"ElementaryTypeName","src":"11005:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36801,"initialValue":{"hexValue":"30","id":36800,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11017:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11005:13:94"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":36807,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"11039:3:94","subExpression":{"id":36806,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36799,"src":"11041:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36808,"nodeType":"ExpressionStatement","src":"11039:3:94"},"nodeType":"ForStatement","src":"11000:115:94"}]},"functionSelector":"bb14e466","id":36824,"implemented":true,"kind":"function","modifiers":[],"name":"manualSetPoolTokenInfo","nameLocation":"10892:22:94","nodeType":"FunctionDefinition","parameters":{"id":36796,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36787,"mutability":"mutable","name":"pool","nameLocation":"10923:4:94","nodeType":"VariableDeclaration","scope":36824,"src":"10915:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36786,"name":"address","nodeType":"ElementaryTypeName","src":"10915:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36791,"mutability":"mutable","name":"tokens","nameLocation":"10945:6:94","nodeType":"VariableDeclaration","scope":36824,"src":"10929:22:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":36789,"nodeType":"UserDefinedTypeName","pathNode":{"id":36788,"name":"IERC20","nameLocations":["10929:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"10929:6:94"},"referencedDeclaration":40109,"src":"10929:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":36790,"nodeType":"ArrayTypeName","src":"10929:8:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":36795,"mutability":"mutable","name":"tokenInfo","nameLocation":"10972:9:94","nodeType":"VariableDeclaration","scope":36824,"src":"10953:28:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4704_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenInfo[]"},"typeName":{"baseType":{"id":36793,"nodeType":"UserDefinedTypeName","pathNode":{"id":36792,"name":"TokenInfo","nameLocations":["10953:9:94"],"nodeType":"IdentifierPath","referencedDeclaration":4704,"src":"10953:9:94"},"referencedDeclaration":4704,"src":"10953:9:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenInfo_$4704_storage_ptr","typeString":"struct TokenInfo"}},"id":36794,"nodeType":"ArrayTypeName","src":"10953:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenInfo_$4704_storage_$dyn_storage_ptr","typeString":"struct TokenInfo[]"}},"visibility":"internal"}],"src":"10914:68:94"},"returnParameters":{"id":36797,"nodeType":"ParameterList","parameters":[],"src":"10990:0:94"},"scope":38836,"src":"10883:238:94","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[650],"body":{"id":36839,"nodeType":"Block","src":"11201:43:94","statements":[{"expression":{"id":36837,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":36833,"name":"_poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28242,"src":"11211:11:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_contract$_IERC20_$40109_$dyn_storage_$","typeString":"mapping(address => contract IERC20[] storage ref)"}},"id":36835,"indexExpression":{"id":36834,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36826,"src":"11223:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11211:17:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":36836,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36830,"src":"11231:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"src":"11211:26:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":36838,"nodeType":"ExpressionStatement","src":"11211:26:94"}]},"functionSelector":"82ea1749","id":36840,"implemented":true,"kind":"function","modifiers":[],"name":"manualSetPoolTokens","nameLocation":"11136:19:94","nodeType":"FunctionDefinition","parameters":{"id":36831,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36826,"mutability":"mutable","name":"pool","nameLocation":"11164:4:94","nodeType":"VariableDeclaration","scope":36840,"src":"11156:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36825,"name":"address","nodeType":"ElementaryTypeName","src":"11156:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36830,"mutability":"mutable","name":"tokens","nameLocation":"11186:6:94","nodeType":"VariableDeclaration","scope":36840,"src":"11170:22:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":36828,"nodeType":"UserDefinedTypeName","pathNode":{"id":36827,"name":"IERC20","nameLocations":["11170:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"11170:6:94"},"referencedDeclaration":40109,"src":"11170:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":36829,"nodeType":"ArrayTypeName","src":"11170:8:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"11155:38:94"},"returnParameters":{"id":36832,"nodeType":"ParameterList","parameters":[],"src":"11201:0:94"},"scope":38836,"src":"11127:117:94","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[665],"body":{"id":36914,"nodeType":"Block","src":"11450:548:94","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36860,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":36856,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36846,"src":"11468:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":36857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11475:6:94","memberName":"length","nodeType":"MemberAccess","src":"11468:13:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":36858,"name":"tokenBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36849,"src":"11485:15:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11501:6:94","memberName":"length","nodeType":"MemberAccess","src":"11485:22:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11468:39:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5661756c744d6f636b3a20544f4b454e535f4c454e4754485f4d49534d41544348","id":36861,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11509:35:94","typeDescriptions":{"typeIdentifier":"t_stringliteral_555bd15dadb44885befa5fe3e8929f2f3fcdd2ca54281806331989322e4413b1","typeString":"literal_string \"VaultMock: TOKENS_LENGTH_MISMATCH\""},"value":"VaultMock: TOKENS_LENGTH_MISMATCH"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_555bd15dadb44885befa5fe3e8929f2f3fcdd2ca54281806331989322e4413b1","typeString":"literal_string \"VaultMock: TOKENS_LENGTH_MISMATCH\""}],"id":36855,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"11460:7:94","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36862,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11460:85:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36863,"nodeType":"ExpressionStatement","src":"11460:85:94"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":36865,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36846,"src":"11563:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":36866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11570:6:94","memberName":"length","nodeType":"MemberAccess","src":"11563:13:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":36867,"name":"tokenBalanceLiveScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36852,"src":"11580:24:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11605:6:94","memberName":"length","nodeType":"MemberAccess","src":"11580:31:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11563:48:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5661756c744d6f636b3a20544f4b454e535f4c454e4754485f4d49534d41544348","id":36870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"11613:35:94","typeDescriptions":{"typeIdentifier":"t_stringliteral_555bd15dadb44885befa5fe3e8929f2f3fcdd2ca54281806331989322e4413b1","typeString":"literal_string \"VaultMock: TOKENS_LENGTH_MISMATCH\""},"value":"VaultMock: TOKENS_LENGTH_MISMATCH"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_555bd15dadb44885befa5fe3e8929f2f3fcdd2ca54281806331989322e4413b1","typeString":"literal_string \"VaultMock: TOKENS_LENGTH_MISMATCH\""}],"id":36864,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"11555:7:94","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36871,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11555:94:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36872,"nodeType":"ExpressionStatement","src":"11555:94:94"},{"assignments":[36876],"declarations":[{"constant":false,"id":36876,"mutability":"mutable","name":"poolTokenBalances","nameLocation":"11726:17:94","nodeType":"VariableDeclaration","scope":36914,"src":"11660:83:94","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"typeName":{"id":36875,"keyName":"tokenIndex","keyNameLocation":"11676:10:94","keyType":{"id":36873,"name":"uint256","nodeType":"ElementaryTypeName","src":"11668:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"11660:57:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"valueName":"packedTokenBalance","valueNameLocation":"11698:18:94","valueType":{"id":36874,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11690:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},"visibility":"internal"}],"id":36880,"initialValue":{"baseExpression":{"id":36877,"name":"_poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28256,"src":"11746:18:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"}},"id":36879,"indexExpression":{"id":36878,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36842,"src":"11765:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11746:24:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"nodeType":"VariableDeclarationStatement","src":"11660:110:94"},{"body":{"id":36906,"nodeType":"Block","src":"11824:131:94","statements":[{"expression":{"id":36904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":36892,"name":"poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36876,"src":"11838:17:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"id":36894,"indexExpression":{"id":36893,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36882,"src":"11856:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11838:20:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":36897,"name":"tokenBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36849,"src":"11896:15:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36899,"indexExpression":{"id":36898,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36882,"src":"11912:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11896:18:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":36900,"name":"tokenBalanceLiveScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36852,"src":"11916:24:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36902,"indexExpression":{"id":36901,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36882,"src":"11941:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11916:27:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":36895,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6344,"src":"11861:18:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PackedTokenBalance_$6344_$","typeString":"type(library PackedTokenBalance)"}},"id":36896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11880:15:94","memberName":"toPackedBalance","nodeType":"MemberAccess","referencedDeclaration":6303,"src":"11861:34:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":36903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11861:83:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"11838:106:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":36905,"nodeType":"ExpressionStatement","src":"11838:106:94"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36885,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36882,"src":"11800:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":36886,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36846,"src":"11804:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":36887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11811:6:94","memberName":"length","nodeType":"MemberAccess","src":"11804:13:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11800:17:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":36907,"initializationExpression":{"assignments":[36882],"declarations":[{"constant":false,"id":36882,"mutability":"mutable","name":"i","nameLocation":"11793:1:94","nodeType":"VariableDeclaration","scope":36907,"src":"11785:9:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36881,"name":"uint256","nodeType":"ElementaryTypeName","src":"11785:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36884,"initialValue":{"hexValue":"30","id":36883,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11797:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11785:13:94"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":36890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"11819:3:94","subExpression":{"id":36889,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36882,"src":"11821:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36891,"nodeType":"ExpressionStatement","src":"11819:3:94"},"nodeType":"ForStatement","src":"11780:175:94"},{"expression":{"id":36912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":36908,"name":"_poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28242,"src":"11965:11:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_contract$_IERC20_$40109_$dyn_storage_$","typeString":"mapping(address => contract IERC20[] storage ref)"}},"id":36910,"indexExpression":{"id":36909,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36842,"src":"11977:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11965:17:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":36911,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36846,"src":"11985:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"src":"11965:26:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":36913,"nodeType":"ExpressionStatement","src":"11965:26:94"}]},"functionSelector":"d8f4cf3c","id":36915,"implemented":true,"kind":"function","modifiers":[],"name":"manualSetPoolTokensAndBalances","nameLocation":"11259:30:94","nodeType":"FunctionDefinition","parameters":{"id":36853,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36842,"mutability":"mutable","name":"pool","nameLocation":"11307:4:94","nodeType":"VariableDeclaration","scope":36915,"src":"11299:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36841,"name":"address","nodeType":"ElementaryTypeName","src":"11299:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36846,"mutability":"mutable","name":"tokens","nameLocation":"11337:6:94","nodeType":"VariableDeclaration","scope":36915,"src":"11321:22:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":36844,"nodeType":"UserDefinedTypeName","pathNode":{"id":36843,"name":"IERC20","nameLocations":["11321:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"11321:6:94"},"referencedDeclaration":40109,"src":"11321:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":36845,"nodeType":"ArrayTypeName","src":"11321:8:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":36849,"mutability":"mutable","name":"tokenBalanceRaw","nameLocation":"11370:15:94","nodeType":"VariableDeclaration","scope":36915,"src":"11353:32:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":36847,"name":"uint256","nodeType":"ElementaryTypeName","src":"11353:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36848,"nodeType":"ArrayTypeName","src":"11353:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":36852,"mutability":"mutable","name":"tokenBalanceLiveScaled18","nameLocation":"11412:24:94","nodeType":"VariableDeclaration","scope":36915,"src":"11395:41:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":36850,"name":"uint256","nodeType":"ElementaryTypeName","src":"11395:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36851,"nodeType":"ArrayTypeName","src":"11395:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"11289:153:94"},"returnParameters":{"id":36854,"nodeType":"ParameterList","parameters":[],"src":"11450:0:94"},"scope":38836,"src":"11250:748:94","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[676],"body":{"id":36988,"nodeType":"Block","src":"12163:564:94","statements":[{"assignments":[36930],"declarations":[{"constant":false,"id":36930,"mutability":"mutable","name":"tokens","nameLocation":"12189:6:94","nodeType":"VariableDeclaration","scope":36988,"src":"12173:22:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":36928,"nodeType":"UserDefinedTypeName","pathNode":{"id":36927,"name":"IERC20","nameLocations":["12173:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"12173:6:94"},"referencedDeclaration":40109,"src":"12173:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":36929,"nodeType":"ArrayTypeName","src":"12173:8:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"id":36934,"initialValue":{"baseExpression":{"id":36931,"name":"_poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28242,"src":"12198:11:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_contract$_IERC20_$40109_$dyn_storage_$","typeString":"mapping(address => contract IERC20[] storage ref)"}},"id":36933,"indexExpression":{"id":36932,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36917,"src":"12210:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12198:17:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"nodeType":"VariableDeclarationStatement","src":"12173:42:94"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":36936,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36930,"src":"12234:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":36937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12241:6:94","memberName":"length","nodeType":"MemberAccess","src":"12234:13:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":36938,"name":"tokenBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36920,"src":"12251:15:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12267:6:94","memberName":"length","nodeType":"MemberAccess","src":"12251:22:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12234:39:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5661756c744d6f636b3a20544f4b454e535f4c454e4754485f4d49534d41544348","id":36941,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12275:35:94","typeDescriptions":{"typeIdentifier":"t_stringliteral_555bd15dadb44885befa5fe3e8929f2f3fcdd2ca54281806331989322e4413b1","typeString":"literal_string \"VaultMock: TOKENS_LENGTH_MISMATCH\""},"value":"VaultMock: TOKENS_LENGTH_MISMATCH"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_555bd15dadb44885befa5fe3e8929f2f3fcdd2ca54281806331989322e4413b1","typeString":"literal_string \"VaultMock: TOKENS_LENGTH_MISMATCH\""}],"id":36935,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"12226:7:94","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36942,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12226:85:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36943,"nodeType":"ExpressionStatement","src":"12226:85:94"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":36945,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36930,"src":"12329:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":36946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12336:6:94","memberName":"length","nodeType":"MemberAccess","src":"12329:13:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":36947,"name":"tokenBalanceLiveScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36923,"src":"12346:24:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12371:6:94","memberName":"length","nodeType":"MemberAccess","src":"12346:31:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12329:48:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5661756c744d6f636b3a20544f4b454e535f4c454e4754485f4d49534d41544348","id":36950,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12379:35:94","typeDescriptions":{"typeIdentifier":"t_stringliteral_555bd15dadb44885befa5fe3e8929f2f3fcdd2ca54281806331989322e4413b1","typeString":"literal_string \"VaultMock: TOKENS_LENGTH_MISMATCH\""},"value":"VaultMock: TOKENS_LENGTH_MISMATCH"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_555bd15dadb44885befa5fe3e8929f2f3fcdd2ca54281806331989322e4413b1","typeString":"literal_string \"VaultMock: TOKENS_LENGTH_MISMATCH\""}],"id":36944,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"12321:7:94","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":36951,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12321:94:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":36952,"nodeType":"ExpressionStatement","src":"12321:94:94"},{"assignments":[36956],"declarations":[{"constant":false,"id":36956,"mutability":"mutable","name":"poolTokenBalances","nameLocation":"12492:17:94","nodeType":"VariableDeclaration","scope":36988,"src":"12426:83:94","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"typeName":{"id":36955,"keyName":"tokenIndex","keyNameLocation":"12442:10:94","keyType":{"id":36953,"name":"uint256","nodeType":"ElementaryTypeName","src":"12434:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"12426:57:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"valueName":"packedTokenBalance","valueNameLocation":"12464:18:94","valueType":{"id":36954,"name":"bytes32","nodeType":"ElementaryTypeName","src":"12456:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},"visibility":"internal"}],"id":36960,"initialValue":{"baseExpression":{"id":36957,"name":"_poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28256,"src":"12512:18:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"}},"id":36959,"indexExpression":{"id":36958,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36917,"src":"12531:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12512:24:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"nodeType":"VariableDeclarationStatement","src":"12426:110:94"},{"body":{"id":36986,"nodeType":"Block","src":"12590:131:94","statements":[{"expression":{"id":36984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":36972,"name":"poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36956,"src":"12604:17:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"id":36974,"indexExpression":{"id":36973,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36962,"src":"12622:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12604:20:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":36977,"name":"tokenBalanceRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36920,"src":"12662:15:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36979,"indexExpression":{"id":36978,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36962,"src":"12678:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12662:18:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":36980,"name":"tokenBalanceLiveScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36923,"src":"12682:24:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":36982,"indexExpression":{"id":36981,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36962,"src":"12707:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12682:27:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":36975,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6344,"src":"12627:18:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PackedTokenBalance_$6344_$","typeString":"type(library PackedTokenBalance)"}},"id":36976,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12646:15:94","memberName":"toPackedBalance","nodeType":"MemberAccess","referencedDeclaration":6303,"src":"12627:34:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":36983,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12627:83:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"12604:106:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":36985,"nodeType":"ExpressionStatement","src":"12604:106:94"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":36968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":36965,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36962,"src":"12566:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":36966,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36930,"src":"12570:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":36967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12577:6:94","memberName":"length","nodeType":"MemberAccess","src":"12570:13:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12566:17:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":36987,"initializationExpression":{"assignments":[36962],"declarations":[{"constant":false,"id":36962,"mutability":"mutable","name":"i","nameLocation":"12559:1:94","nodeType":"VariableDeclaration","scope":36987,"src":"12551:9:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":36961,"name":"uint256","nodeType":"ElementaryTypeName","src":"12551:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":36964,"initialValue":{"hexValue":"30","id":36963,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12563:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12551:13:94"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":36970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"12585:3:94","subExpression":{"id":36969,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36962,"src":"12587:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36971,"nodeType":"ExpressionStatement","src":"12585:3:94"},"nodeType":"ForStatement","src":"12546:175:94"}]},"functionSelector":"1c4e1e23","id":36989,"implemented":true,"kind":"function","modifiers":[],"name":"manualSetPoolBalances","nameLocation":"12013:21:94","nodeType":"FunctionDefinition","parameters":{"id":36924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36917,"mutability":"mutable","name":"pool","nameLocation":"12052:4:94","nodeType":"VariableDeclaration","scope":36989,"src":"12044:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36916,"name":"address","nodeType":"ElementaryTypeName","src":"12044:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":36920,"mutability":"mutable","name":"tokenBalanceRaw","nameLocation":"12083:15:94","nodeType":"VariableDeclaration","scope":36989,"src":"12066:32:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":36918,"name":"uint256","nodeType":"ElementaryTypeName","src":"12066:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36919,"nodeType":"ArrayTypeName","src":"12066:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":36923,"mutability":"mutable","name":"tokenBalanceLiveScaled18","nameLocation":"12125:24:94","nodeType":"VariableDeclaration","scope":36989,"src":"12108:41:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":36921,"name":"uint256","nodeType":"ElementaryTypeName","src":"12108:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":36922,"nodeType":"ArrayTypeName","src":"12108:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"12034:121:94"},"returnParameters":{"id":36925,"nodeType":"ParameterList","parameters":[],"src":"12163:0:94"},"scope":38836,"src":"12004:723:94","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[687],"body":{"id":36994,"nodeType":"Block","src":"12788:2:94","statements":[]},"functionSelector":"b8caceee","id":36995,"implemented":true,"kind":"function","modifiers":[{"id":36992,"kind":"modifierInvocation","modifierName":{"id":36991,"name":"onlyWhenUnlocked","nameLocations":["12771:16:94"],"nodeType":"IdentifierPath","referencedDeclaration":24848,"src":"12771:16:94"},"nodeType":"ModifierInvocation","src":"12771:16:94"}],"name":"mockIsUnlocked","nameLocation":"12742:14:94","nodeType":"FunctionDefinition","parameters":{"id":36990,"nodeType":"ParameterList","parameters":[],"src":"12756:2:94"},"returnParameters":{"id":36993,"nodeType":"ParameterList","parameters":[],"src":"12788:0:94"},"scope":38836,"src":"12733:57:94","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[692],"body":{"id":37003,"nodeType":"Block","src":"12881:2:94","statements":[]},"functionSelector":"62691e5f","id":37004,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":37000,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36997,"src":"12875:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":37001,"kind":"modifierInvocation","modifierName":{"id":36999,"name":"withInitializedPool","nameLocations":["12855:19:94"],"nodeType":"IdentifierPath","referencedDeclaration":25131,"src":"12855:19:94"},"nodeType":"ModifierInvocation","src":"12855:25:94"}],"name":"mockWithInitializedPool","nameLocation":"12805:23:94","nodeType":"FunctionDefinition","parameters":{"id":36998,"nodeType":"ParameterList","parameters":[{"constant":false,"id":36997,"mutability":"mutable","name":"pool","nameLocation":"12837:4:94","nodeType":"VariableDeclaration","scope":37004,"src":"12829:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":36996,"name":"address","nodeType":"ElementaryTypeName","src":"12829:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12828:14:94"},"returnParameters":{"id":37002,"nodeType":"ParameterList","parameters":[],"src":"12881:0:94"},"scope":38836,"src":"12796:87:94","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[697],"body":{"id":37013,"nodeType":"Block","src":"12944:43:94","statements":[{"expression":{"arguments":[{"id":37010,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37006,"src":"12975:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":37009,"name":"_ensurePoolNotPaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25030,"src":"12954:20:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":37011,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12954:26:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37012,"nodeType":"ExpressionStatement","src":"12954:26:94"}]},"functionSelector":"02e1a4aa","id":37014,"implemented":true,"kind":"function","modifiers":[],"name":"ensurePoolNotPaused","nameLocation":"12898:19:94","nodeType":"FunctionDefinition","parameters":{"id":37007,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37006,"mutability":"mutable","name":"pool","nameLocation":"12926:4:94","nodeType":"VariableDeclaration","scope":37014,"src":"12918:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37005,"name":"address","nodeType":"ElementaryTypeName","src":"12918:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12917:14:94"},"returnParameters":{"id":37008,"nodeType":"ParameterList","parameters":[],"src":"12944:0:94"},"scope":38836,"src":"12889:98:94","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[705],"body":{"id":37045,"nodeType":"Block","src":"13098:291:94","statements":[{"expression":{"arguments":[{"id":37023,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37016,"src":"13124:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":37022,"name":"_ensureUnpaused","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24998,"src":"13108:15:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$__$","typeString":"function (address) view"}},"id":37024,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13108:21:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37025,"nodeType":"ExpressionStatement","src":"13108:21:94"},{"assignments":[37028],"declarations":[{"constant":false,"id":37028,"mutability":"mutable","name":"state","nameLocation":"13154:5:94","nodeType":"VariableDeclaration","scope":37045,"src":"13139:20:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"},"typeName":{"id":37027,"nodeType":"UserDefinedTypeName","pathNode":{"id":37026,"name":"VaultStateBits","nameLocations":["13139:14:94"],"nodeType":"IdentifierPath","referencedDeclaration":31184,"src":"13139:14:94"},"referencedDeclaration":31184,"src":"13139:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"visibility":"internal"}],"id":37030,"initialValue":{"id":37029,"name":"_vaultStateBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28272,"src":"13162:15:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"nodeType":"VariableDeclarationStatement","src":"13139:38:94"},{"expression":{"id":37043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":37031,"name":"vaultState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37020,"src":"13187:10:94","typeDescriptions":{"typeIdentifier":"t_struct$_VaultState_$4669_memory_ptr","typeString":"struct VaultState memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":37033,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37028,"src":"13242:5:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"id":37034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13248:15:94","memberName":"isQueryDisabled","nodeType":"MemberAccess","referencedDeclaration":31218,"src":"13242:21:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_VaultStateBits_$31184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_VaultStateBits_$31184_$","typeString":"function (VaultStateBits) pure returns (bool)"}},"id":37035,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13242:23:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":37036,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37028,"src":"13294:5:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"id":37037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13300:13:94","memberName":"isVaultPaused","nodeType":"MemberAccess","referencedDeclaration":31259,"src":"13294:19:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_VaultStateBits_$31184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_VaultStateBits_$31184_$","typeString":"function (VaultStateBits) pure returns (bool)"}},"id":37038,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13294:21:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":37039,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37028,"src":"13347:5:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_VaultStateBits_$31184","typeString":"VaultStateBits"}},"id":37040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13353:16:94","memberName":"areBuffersPaused","nodeType":"MemberAccess","referencedDeclaration":31300,"src":"13347:22:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_VaultStateBits_$31184_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_VaultStateBits_$31184_$","typeString":"function (VaultStateBits) pure returns (bool)"}},"id":37041,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13347:24:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"}],"id":37032,"name":"VaultState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4669,"src":"13200:10:94","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_VaultState_$4669_storage_ptr_$","typeString":"type(struct VaultState storage pointer)"}},"id":37042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["13225:15:94","13279:13:94","13329:16:94"],"names":["isQueryDisabled","isVaultPaused","areBuffersPaused"],"nodeType":"FunctionCall","src":"13200:182:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_VaultState_$4669_memory_ptr","typeString":"struct VaultState memory"}},"src":"13187:195:94","typeDescriptions":{"typeIdentifier":"t_struct$_VaultState_$4669_memory_ptr","typeString":"struct VaultState memory"}},"id":37044,"nodeType":"ExpressionStatement","src":"13187:195:94"}]},"functionSelector":"e460a8a9","id":37046,"implemented":true,"kind":"function","modifiers":[],"name":"ensureUnpausedAndGetVaultState","nameLocation":"13002:30:94","nodeType":"FunctionDefinition","parameters":{"id":37017,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37016,"mutability":"mutable","name":"pool","nameLocation":"13041:4:94","nodeType":"VariableDeclaration","scope":37046,"src":"13033:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37015,"name":"address","nodeType":"ElementaryTypeName","src":"13033:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13032:14:94"},"returnParameters":{"id":37021,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37020,"mutability":"mutable","name":"vaultState","nameLocation":"13086:10:94","nodeType":"VariableDeclaration","scope":37046,"src":"13068:28:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultState_$4669_memory_ptr","typeString":"struct VaultState"},"typeName":{"id":37019,"nodeType":"UserDefinedTypeName","pathNode":{"id":37018,"name":"VaultState","nameLocations":["13068:10:94"],"nodeType":"IdentifierPath","referencedDeclaration":4669,"src":"13068:10:94"},"referencedDeclaration":4669,"src":"13068:10:94","typeDescriptions":{"typeIdentifier":"t_struct$_VaultState_$4669_storage_ptr","typeString":"struct VaultState"}},"visibility":"internal"}],"src":"13067:30:94"},"scope":38836,"src":"12993:396:94","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[827],"body":{"id":37096,"nodeType":"Block","src":"13500:244:94","statements":[{"expression":{"id":37065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":37057,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37055,"src":"13510:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":37062,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37050,"src":"13542:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":37063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13549:6:94","memberName":"length","nodeType":"MemberAccess","src":"13542:13:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37061,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"13524:17:94","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct TokenConfig memory[] memory)"},"typeName":{"baseType":{"id":37059,"nodeType":"UserDefinedTypeName","pathNode":{"id":37058,"name":"TokenConfig","nameLocations":["13528:11:94"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"13528:11:94"},"referencedDeclaration":4694,"src":"13528:11:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":37060,"nodeType":"ArrayTypeName","src":"13528:13:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}}},"id":37064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13524:32:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"src":"13510:46:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":37066,"nodeType":"ExpressionStatement","src":"13510:46:94"},{"body":{"id":37087,"nodeType":"Block","src":"13610:57:94","statements":[{"expression":{"id":37085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":37078,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37055,"src":"13624:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":37080,"indexExpression":{"id":37079,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37068,"src":"13636:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13624:14:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":37081,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"13639:5:94","memberName":"token","nodeType":"MemberAccess","referencedDeclaration":4685,"src":"13624:20:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":37082,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37050,"src":"13647:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":37084,"indexExpression":{"id":37083,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37068,"src":"13654:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13647:9:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"13624:32:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":37086,"nodeType":"ExpressionStatement","src":"13624:32:94"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37071,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37068,"src":"13586:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":37072,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37050,"src":"13590:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":37073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13597:6:94","memberName":"length","nodeType":"MemberAccess","src":"13590:13:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13586:17:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37088,"initializationExpression":{"assignments":[37068],"declarations":[{"constant":false,"id":37068,"mutability":"mutable","name":"i","nameLocation":"13579:1:94","nodeType":"VariableDeclaration","scope":37088,"src":"13571:9:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37067,"name":"uint256","nodeType":"ElementaryTypeName","src":"13571:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37070,"initialValue":{"hexValue":"30","id":37069,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13583:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13571:13:94"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":37076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"13605:3:94","subExpression":{"id":37075,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37068,"src":"13607:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37077,"nodeType":"ExpressionStatement","src":"13605:3:94"},"nodeType":"ForStatement","src":"13566:101:94"},{"expression":{"id":37094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":37089,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37055,"src":"13677:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":37092,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37055,"src":"13725:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}],"expression":{"id":37090,"name":"_inputHelpersMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36067,"src":"13691:17:94","typeDescriptions":{"typeIdentifier":"t_contract$_InputHelpersMock_$32067","typeString":"contract InputHelpersMock"}},"id":37091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13709:15:94","memberName":"sortTokenConfig","nodeType":"MemberAccess","referencedDeclaration":32066,"src":"13691:33:94","typeDescriptions":{"typeIdentifier":"t_function_external_pure$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$returns$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$","typeString":"function (struct TokenConfig memory[] memory) pure external returns (struct TokenConfig memory[] memory)"}},"id":37093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13691:46:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"src":"13677:60:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":37095,"nodeType":"ExpressionStatement","src":"13677:60:94"}]},"functionSelector":"24e7176b","id":37097,"implemented":true,"kind":"function","modifiers":[],"name":"buildTokenConfig","nameLocation":"13404:16:94","nodeType":"FunctionDefinition","parameters":{"id":37051,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37050,"mutability":"mutable","name":"tokens","nameLocation":"13437:6:94","nodeType":"VariableDeclaration","scope":37097,"src":"13421:22:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":37048,"nodeType":"UserDefinedTypeName","pathNode":{"id":37047,"name":"IERC20","nameLocations":["13421:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"13421:6:94"},"referencedDeclaration":40109,"src":"13421:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":37049,"nodeType":"ArrayTypeName","src":"13421:8:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"}],"src":"13420:24:94"},"returnParameters":{"id":37056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37055,"mutability":"mutable","name":"tokenConfig","nameLocation":"13487:11:94","nodeType":"VariableDeclaration","scope":37097,"src":"13466:32:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":37053,"nodeType":"UserDefinedTypeName","pathNode":{"id":37052,"name":"TokenConfig","nameLocations":["13466:11:94"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"13466:11:94"},"referencedDeclaration":4694,"src":"13466:11:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":37054,"nodeType":"ArrayTypeName","src":"13466:13:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"}],"src":"13465:34:94"},"scope":38836,"src":"13395:349:94","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[843],"body":{"id":37181,"nodeType":"Block","src":"13915:465:94","statements":[{"expression":{"id":37120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":37112,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37110,"src":"13925:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":37117,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37101,"src":"13957:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":37118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13964:6:94","memberName":"length","nodeType":"MemberAccess","src":"13957:13:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37116,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"13939:17:94","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct TokenConfig memory[] memory)"},"typeName":{"baseType":{"id":37114,"nodeType":"UserDefinedTypeName","pathNode":{"id":37113,"name":"TokenConfig","nameLocations":["13943:11:94"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"13943:11:94"},"referencedDeclaration":4694,"src":"13943:11:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":37115,"nodeType":"ArrayTypeName","src":"13943:13:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}}},"id":37119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13939:32:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"src":"13925:46:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":37121,"nodeType":"ExpressionStatement","src":"13925:46:94"},{"body":{"id":37172,"nodeType":"Block","src":"14025:278:94","statements":[{"expression":{"id":37140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":37133,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37110,"src":"14039:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":37135,"indexExpression":{"id":37134,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37123,"src":"14051:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14039:14:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":37136,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"14054:5:94","memberName":"token","nodeType":"MemberAccess","referencedDeclaration":4685,"src":"14039:20:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":37137,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37101,"src":"14062:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":37139,"indexExpression":{"id":37138,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37123,"src":"14069:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14062:9:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"14039:32:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":37141,"nodeType":"ExpressionStatement","src":"14039:32:94"},{"expression":{"id":37149,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":37142,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37110,"src":"14085:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":37144,"indexExpression":{"id":37143,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37123,"src":"14097:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14085:14:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":37145,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"14100:12:94","memberName":"rateProvider","nodeType":"MemberAccess","referencedDeclaration":4691,"src":"14085:27:94","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":37146,"name":"rateProviders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37105,"src":"14115:13:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IRateProvider_$263_$dyn_memory_ptr","typeString":"contract IRateProvider[] memory"}},"id":37148,"indexExpression":{"id":37147,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37123,"src":"14129:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14115:16:94","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"}},"src":"14085:46:94","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"}},"id":37150,"nodeType":"ExpressionStatement","src":"14085:46:94"},{"expression":{"id":37170,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":37151,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37110,"src":"14145:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":37153,"indexExpression":{"id":37152,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37123,"src":"14157:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14145:14:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":37154,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"14160:9:94","memberName":"tokenType","nodeType":"MemberAccess","referencedDeclaration":4688,"src":"14145:24:94","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"commonType":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"},"id":37164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":37155,"name":"rateProviders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37105,"src":"14172:13:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IRateProvider_$263_$dyn_memory_ptr","typeString":"contract IRateProvider[] memory"}},"id":37157,"indexExpression":{"id":37156,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37123,"src":"14186:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14172:16:94","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"arguments":[{"hexValue":"30","id":37161,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14214:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":37160,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14206:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":37159,"name":"address","nodeType":"ElementaryTypeName","src":"14206:7:94","typeDescriptions":{}}},"id":37162,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14206:10:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":37158,"name":"IRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":263,"src":"14192:13:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRateProvider_$263_$","typeString":"type(contract IRateProvider)"}},"id":37163,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14192:25:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"}},"src":"14172:45:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":37167,"name":"TokenType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4681,"src":"14273:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_TokenType_$4681_$","typeString":"type(enum TokenType)"}},"id":37168,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14283:9:94","memberName":"WITH_RATE","nodeType":"MemberAccess","referencedDeclaration":4680,"src":"14273:19:94","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"id":37169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"14172:120:94","trueExpression":{"expression":{"id":37165,"name":"TokenType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4681,"src":"14236:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_TokenType_$4681_$","typeString":"type(enum TokenType)"}},"id":37166,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14246:8:94","memberName":"STANDARD","nodeType":"MemberAccess","referencedDeclaration":4679,"src":"14236:18:94","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"src":"14145:147:94","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"id":37171,"nodeType":"ExpressionStatement","src":"14145:147:94"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37126,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37123,"src":"14001:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":37127,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37101,"src":"14005:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":37128,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14012:6:94","memberName":"length","nodeType":"MemberAccess","src":"14005:13:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14001:17:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37173,"initializationExpression":{"assignments":[37123],"declarations":[{"constant":false,"id":37123,"mutability":"mutable","name":"i","nameLocation":"13994:1:94","nodeType":"VariableDeclaration","scope":37173,"src":"13986:9:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37122,"name":"uint256","nodeType":"ElementaryTypeName","src":"13986:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37125,"initialValue":{"hexValue":"30","id":37124,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13998:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13986:13:94"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":37131,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"14020:3:94","subExpression":{"id":37130,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37123,"src":"14022:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37132,"nodeType":"ExpressionStatement","src":"14020:3:94"},"nodeType":"ForStatement","src":"13981:322:94"},{"expression":{"id":37179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":37174,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37110,"src":"14313:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":37177,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37110,"src":"14361:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}],"expression":{"id":37175,"name":"_inputHelpersMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36067,"src":"14327:17:94","typeDescriptions":{"typeIdentifier":"t_contract$_InputHelpersMock_$32067","typeString":"contract InputHelpersMock"}},"id":37176,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14345:15:94","memberName":"sortTokenConfig","nodeType":"MemberAccess","referencedDeclaration":32066,"src":"14327:33:94","typeDescriptions":{"typeIdentifier":"t_function_external_pure$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$returns$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$","typeString":"function (struct TokenConfig memory[] memory) pure external returns (struct TokenConfig memory[] memory)"}},"id":37178,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14327:46:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"src":"14313:60:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":37180,"nodeType":"ExpressionStatement","src":"14313:60:94"}]},"functionSelector":"5f70f542","id":37182,"implemented":true,"kind":"function","modifiers":[],"name":"buildTokenConfig","nameLocation":"13759:16:94","nodeType":"FunctionDefinition","parameters":{"id":37106,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37101,"mutability":"mutable","name":"tokens","nameLocation":"13801:6:94","nodeType":"VariableDeclaration","scope":37182,"src":"13785:22:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":37099,"nodeType":"UserDefinedTypeName","pathNode":{"id":37098,"name":"IERC20","nameLocations":["13785:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"13785:6:94"},"referencedDeclaration":40109,"src":"13785:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":37100,"nodeType":"ArrayTypeName","src":"13785:8:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":37105,"mutability":"mutable","name":"rateProviders","nameLocation":"13840:13:94","nodeType":"VariableDeclaration","scope":37182,"src":"13817:36:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IRateProvider_$263_$dyn_memory_ptr","typeString":"contract IRateProvider[]"},"typeName":{"baseType":{"id":37103,"nodeType":"UserDefinedTypeName","pathNode":{"id":37102,"name":"IRateProvider","nameLocations":["13817:13:94"],"nodeType":"IdentifierPath","referencedDeclaration":263,"src":"13817:13:94"},"referencedDeclaration":263,"src":"13817:13:94","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"}},"id":37104,"nodeType":"ArrayTypeName","src":"13817:15:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IRateProvider_$263_$dyn_storage_ptr","typeString":"contract IRateProvider[]"}},"visibility":"internal"}],"src":"13775:84:94"},"returnParameters":{"id":37111,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37110,"mutability":"mutable","name":"tokenConfig","nameLocation":"13902:11:94","nodeType":"VariableDeclaration","scope":37182,"src":"13881:32:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":37108,"nodeType":"UserDefinedTypeName","pathNode":{"id":37107,"name":"TokenConfig","nameLocations":["13881:11:94"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"13881:11:94"},"referencedDeclaration":4694,"src":"13881:11:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":37109,"nodeType":"ArrayTypeName","src":"13881:13:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"}],"src":"13880:34:94"},"scope":38836,"src":"13750:630:94","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[862],"body":{"id":37278,"nodeType":"Block","src":"14588:526:94","statements":[{"expression":{"id":37208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":37200,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37198,"src":"14598:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":37205,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37186,"src":"14630:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":37206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14637:6:94","memberName":"length","nodeType":"MemberAccess","src":"14630:13:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37204,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"14612:17:94","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct TokenConfig memory[] memory)"},"typeName":{"baseType":{"id":37202,"nodeType":"UserDefinedTypeName","pathNode":{"id":37201,"name":"TokenConfig","nameLocations":["14616:11:94"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"14616:11:94"},"referencedDeclaration":4694,"src":"14616:11:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":37203,"nodeType":"ArrayTypeName","src":"14616:13:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}}},"id":37207,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14612:32:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"src":"14598:46:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":37209,"nodeType":"ExpressionStatement","src":"14598:46:94"},{"body":{"id":37269,"nodeType":"Block","src":"14698:339:94","statements":[{"expression":{"id":37228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":37221,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37198,"src":"14712:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":37223,"indexExpression":{"id":37222,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37211,"src":"14724:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14712:14:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":37224,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"14727:5:94","memberName":"token","nodeType":"MemberAccess","referencedDeclaration":4685,"src":"14712:20:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":37225,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37186,"src":"14735:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":37227,"indexExpression":{"id":37226,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37211,"src":"14742:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14735:9:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"14712:32:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":37229,"nodeType":"ExpressionStatement","src":"14712:32:94"},{"expression":{"id":37237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":37230,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37198,"src":"14758:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":37232,"indexExpression":{"id":37231,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37211,"src":"14770:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14758:14:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":37233,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"14773:12:94","memberName":"rateProvider","nodeType":"MemberAccess","referencedDeclaration":4691,"src":"14758:27:94","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":37234,"name":"rateProviders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37190,"src":"14788:13:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IRateProvider_$263_$dyn_memory_ptr","typeString":"contract IRateProvider[] memory"}},"id":37236,"indexExpression":{"id":37235,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37211,"src":"14802:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14788:16:94","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"}},"src":"14758:46:94","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"}},"id":37238,"nodeType":"ExpressionStatement","src":"14758:46:94"},{"expression":{"id":37258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":37239,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37198,"src":"14818:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":37241,"indexExpression":{"id":37240,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37211,"src":"14830:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14818:14:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":37242,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"14833:9:94","memberName":"tokenType","nodeType":"MemberAccess","referencedDeclaration":4688,"src":"14818:24:94","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"commonType":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"},"id":37252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":37243,"name":"rateProviders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37190,"src":"14845:13:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IRateProvider_$263_$dyn_memory_ptr","typeString":"contract IRateProvider[] memory"}},"id":37245,"indexExpression":{"id":37244,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37211,"src":"14859:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14845:16:94","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"arguments":[{"hexValue":"30","id":37249,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14887:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":37248,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14879:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":37247,"name":"address","nodeType":"ElementaryTypeName","src":"14879:7:94","typeDescriptions":{}}},"id":37250,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14879:10:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":37246,"name":"IRateProvider","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":263,"src":"14865:13:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IRateProvider_$263_$","typeString":"type(contract IRateProvider)"}},"id":37251,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14865:25:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"}},"src":"14845:45:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":37255,"name":"TokenType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4681,"src":"14946:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_TokenType_$4681_$","typeString":"type(enum TokenType)"}},"id":37256,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14956:9:94","memberName":"WITH_RATE","nodeType":"MemberAccess","referencedDeclaration":4680,"src":"14946:19:94","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"id":37257,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"14845:120:94","trueExpression":{"expression":{"id":37253,"name":"TokenType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4681,"src":"14909:9:94","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_TokenType_$4681_$","typeString":"type(enum TokenType)"}},"id":37254,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14919:8:94","memberName":"STANDARD","nodeType":"MemberAccess","referencedDeclaration":4679,"src":"14909:18:94","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"src":"14818:147:94","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"id":37259,"nodeType":"ExpressionStatement","src":"14818:147:94"},{"expression":{"id":37267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":37260,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37198,"src":"14979:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":37262,"indexExpression":{"id":37261,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37211,"src":"14991:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14979:14:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":37263,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"14994:13:94","memberName":"paysYieldFees","nodeType":"MemberAccess","referencedDeclaration":4693,"src":"14979:28:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":37264,"name":"yieldFeeFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37193,"src":"15010:13:94","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_memory_ptr","typeString":"bool[] memory"}},"id":37266,"indexExpression":{"id":37265,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37211,"src":"15024:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15010:16:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14979:47:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37268,"nodeType":"ExpressionStatement","src":"14979:47:94"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37214,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37211,"src":"14674:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":37215,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37186,"src":"14678:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":37216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14685:6:94","memberName":"length","nodeType":"MemberAccess","src":"14678:13:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14674:17:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37270,"initializationExpression":{"assignments":[37211],"declarations":[{"constant":false,"id":37211,"mutability":"mutable","name":"i","nameLocation":"14667:1:94","nodeType":"VariableDeclaration","scope":37270,"src":"14659:9:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37210,"name":"uint256","nodeType":"ElementaryTypeName","src":"14659:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37213,"initialValue":{"hexValue":"30","id":37212,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14671:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"14659:13:94"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":37219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"14693:3:94","subExpression":{"id":37218,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37211,"src":"14695:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37220,"nodeType":"ExpressionStatement","src":"14693:3:94"},"nodeType":"ForStatement","src":"14654:383:94"},{"expression":{"id":37276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":37271,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37198,"src":"15047:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":37274,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37198,"src":"15095:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}],"expression":{"id":37272,"name":"_inputHelpersMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36067,"src":"15061:17:94","typeDescriptions":{"typeIdentifier":"t_contract$_InputHelpersMock_$32067","typeString":"contract InputHelpersMock"}},"id":37273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15079:15:94","memberName":"sortTokenConfig","nodeType":"MemberAccess","referencedDeclaration":32066,"src":"15061:33:94","typeDescriptions":{"typeIdentifier":"t_function_external_pure$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$returns$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$","typeString":"function (struct TokenConfig memory[] memory) pure external returns (struct TokenConfig memory[] memory)"}},"id":37275,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15061:46:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"src":"15047:60:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":37277,"nodeType":"ExpressionStatement","src":"15047:60:94"}]},"functionSelector":"e5948689","id":37279,"implemented":true,"kind":"function","modifiers":[],"name":"buildTokenConfig","nameLocation":"14395:16:94","nodeType":"FunctionDefinition","parameters":{"id":37194,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37186,"mutability":"mutable","name":"tokens","nameLocation":"14437:6:94","nodeType":"VariableDeclaration","scope":37279,"src":"14421:22:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":37184,"nodeType":"UserDefinedTypeName","pathNode":{"id":37183,"name":"IERC20","nameLocations":["14421:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"14421:6:94"},"referencedDeclaration":40109,"src":"14421:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":37185,"nodeType":"ArrayTypeName","src":"14421:8:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":37190,"mutability":"mutable","name":"rateProviders","nameLocation":"14476:13:94","nodeType":"VariableDeclaration","scope":37279,"src":"14453:36:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IRateProvider_$263_$dyn_memory_ptr","typeString":"contract IRateProvider[]"},"typeName":{"baseType":{"id":37188,"nodeType":"UserDefinedTypeName","pathNode":{"id":37187,"name":"IRateProvider","nameLocations":["14453:13:94"],"nodeType":"IdentifierPath","referencedDeclaration":263,"src":"14453:13:94"},"referencedDeclaration":263,"src":"14453:13:94","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"}},"id":37189,"nodeType":"ArrayTypeName","src":"14453:15:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IRateProvider_$263_$dyn_storage_ptr","typeString":"contract IRateProvider[]"}},"visibility":"internal"},{"constant":false,"id":37193,"mutability":"mutable","name":"yieldFeeFlags","nameLocation":"14513:13:94","nodeType":"VariableDeclaration","scope":37279,"src":"14499:27:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_memory_ptr","typeString":"bool[]"},"typeName":{"baseType":{"id":37191,"name":"bool","nodeType":"ElementaryTypeName","src":"14499:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37192,"nodeType":"ArrayTypeName","src":"14499:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_storage_ptr","typeString":"bool[]"}},"visibility":"internal"}],"src":"14411:121:94"},"returnParameters":{"id":37199,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37198,"mutability":"mutable","name":"tokenConfig","nameLocation":"14575:11:94","nodeType":"VariableDeclaration","scope":37279,"src":"14554:32:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":37196,"nodeType":"UserDefinedTypeName","pathNode":{"id":37195,"name":"TokenConfig","nameLocations":["14554:11:94"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"14554:11:94"},"referencedDeclaration":4694,"src":"14554:11:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":37197,"nodeType":"ArrayTypeName","src":"14554:13:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"}],"src":"14553:34:94"},"scope":38836,"src":"14386:728:94","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[884],"body":{"id":37367,"nodeType":"Block","src":"15361:419:94","statements":[{"expression":{"id":37309,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":37301,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37299,"src":"15371:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":37306,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37283,"src":"15403:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":37307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15410:6:94","memberName":"length","nodeType":"MemberAccess","src":"15403:13:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37305,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"15385:17:94","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct TokenConfig memory[] memory)"},"typeName":{"baseType":{"id":37303,"nodeType":"UserDefinedTypeName","pathNode":{"id":37302,"name":"TokenConfig","nameLocations":["15389:11:94"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"15389:11:94"},"referencedDeclaration":4694,"src":"15389:11:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":37304,"nodeType":"ArrayTypeName","src":"15389:13:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}}},"id":37308,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15385:32:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"src":"15371:46:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":37310,"nodeType":"ExpressionStatement","src":"15371:46:94"},{"body":{"id":37358,"nodeType":"Block","src":"15471:232:94","statements":[{"expression":{"id":37329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":37322,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37299,"src":"15485:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":37324,"indexExpression":{"id":37323,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37312,"src":"15497:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15485:14:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":37325,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15500:5:94","memberName":"token","nodeType":"MemberAccess","referencedDeclaration":4685,"src":"15485:20:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":37326,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37283,"src":"15508:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":37328,"indexExpression":{"id":37327,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37312,"src":"15515:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15508:9:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"15485:32:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":37330,"nodeType":"ExpressionStatement","src":"15485:32:94"},{"expression":{"id":37338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":37331,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37299,"src":"15531:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":37333,"indexExpression":{"id":37332,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37312,"src":"15543:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15531:14:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":37334,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15546:9:94","memberName":"tokenType","nodeType":"MemberAccess","referencedDeclaration":4688,"src":"15531:24:94","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":37335,"name":"tokenTypes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37287,"src":"15558:10:94","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_TokenType_$4681_$dyn_memory_ptr","typeString":"enum TokenType[] memory"}},"id":37337,"indexExpression":{"id":37336,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37312,"src":"15569:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15558:13:94","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"src":"15531:40:94","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"id":37339,"nodeType":"ExpressionStatement","src":"15531:40:94"},{"expression":{"id":37347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":37340,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37299,"src":"15585:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":37342,"indexExpression":{"id":37341,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37312,"src":"15597:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15585:14:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":37343,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15600:12:94","memberName":"rateProvider","nodeType":"MemberAccess","referencedDeclaration":4691,"src":"15585:27:94","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":37344,"name":"rateProviders","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37291,"src":"15615:13:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IRateProvider_$263_$dyn_memory_ptr","typeString":"contract IRateProvider[] memory"}},"id":37346,"indexExpression":{"id":37345,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37312,"src":"15629:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15615:16:94","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"}},"src":"15585:46:94","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"}},"id":37348,"nodeType":"ExpressionStatement","src":"15585:46:94"},{"expression":{"id":37356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":37349,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37299,"src":"15645:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":37351,"indexExpression":{"id":37350,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37312,"src":"15657:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15645:14:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":37352,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15660:13:94","memberName":"paysYieldFees","nodeType":"MemberAccess","referencedDeclaration":4693,"src":"15645:28:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":37353,"name":"yieldFeeFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37294,"src":"15676:13:94","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_memory_ptr","typeString":"bool[] memory"}},"id":37355,"indexExpression":{"id":37354,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37312,"src":"15690:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15676:16:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"15645:47:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37357,"nodeType":"ExpressionStatement","src":"15645:47:94"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37315,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37312,"src":"15447:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":37316,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37283,"src":"15451:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":37317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15458:6:94","memberName":"length","nodeType":"MemberAccess","src":"15451:13:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15447:17:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37359,"initializationExpression":{"assignments":[37312],"declarations":[{"constant":false,"id":37312,"mutability":"mutable","name":"i","nameLocation":"15440:1:94","nodeType":"VariableDeclaration","scope":37359,"src":"15432:9:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37311,"name":"uint256","nodeType":"ElementaryTypeName","src":"15432:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37314,"initialValue":{"hexValue":"30","id":37313,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15444:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"15432:13:94"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":37320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"15466:3:94","subExpression":{"id":37319,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37312,"src":"15468:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37321,"nodeType":"ExpressionStatement","src":"15466:3:94"},"nodeType":"ForStatement","src":"15427:276:94"},{"expression":{"id":37365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":37360,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37299,"src":"15713:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":37363,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37299,"src":"15761:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}],"expression":{"id":37361,"name":"_inputHelpersMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":36067,"src":"15727:17:94","typeDescriptions":{"typeIdentifier":"t_contract$_InputHelpersMock_$32067","typeString":"contract InputHelpersMock"}},"id":37362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15745:15:94","memberName":"sortTokenConfig","nodeType":"MemberAccess","referencedDeclaration":32066,"src":"15727:33:94","typeDescriptions":{"typeIdentifier":"t_function_external_pure$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$returns$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$","typeString":"function (struct TokenConfig memory[] memory) pure external returns (struct TokenConfig memory[] memory)"}},"id":37364,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15727:46:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"src":"15713:60:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":37366,"nodeType":"ExpressionStatement","src":"15713:60:94"}]},"functionSelector":"608256f7","id":37368,"implemented":true,"kind":"function","modifiers":[],"name":"buildTokenConfig","nameLocation":"15129:16:94","nodeType":"FunctionDefinition","parameters":{"id":37295,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37283,"mutability":"mutable","name":"tokens","nameLocation":"15171:6:94","nodeType":"VariableDeclaration","scope":37368,"src":"15155:22:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":37281,"nodeType":"UserDefinedTypeName","pathNode":{"id":37280,"name":"IERC20","nameLocations":["15155:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"15155:6:94"},"referencedDeclaration":40109,"src":"15155:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":37282,"nodeType":"ArrayTypeName","src":"15155:8:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":37287,"mutability":"mutable","name":"tokenTypes","nameLocation":"15206:10:94","nodeType":"VariableDeclaration","scope":37368,"src":"15187:29:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_TokenType_$4681_$dyn_memory_ptr","typeString":"enum TokenType[]"},"typeName":{"baseType":{"id":37285,"nodeType":"UserDefinedTypeName","pathNode":{"id":37284,"name":"TokenType","nameLocations":["15187:9:94"],"nodeType":"IdentifierPath","referencedDeclaration":4681,"src":"15187:9:94"},"referencedDeclaration":4681,"src":"15187:9:94","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"id":37286,"nodeType":"ArrayTypeName","src":"15187:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_enum$_TokenType_$4681_$dyn_storage_ptr","typeString":"enum TokenType[]"}},"visibility":"internal"},{"constant":false,"id":37291,"mutability":"mutable","name":"rateProviders","nameLocation":"15249:13:94","nodeType":"VariableDeclaration","scope":37368,"src":"15226:36:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IRateProvider_$263_$dyn_memory_ptr","typeString":"contract IRateProvider[]"},"typeName":{"baseType":{"id":37289,"nodeType":"UserDefinedTypeName","pathNode":{"id":37288,"name":"IRateProvider","nameLocations":["15226:13:94"],"nodeType":"IdentifierPath","referencedDeclaration":263,"src":"15226:13:94"},"referencedDeclaration":263,"src":"15226:13:94","typeDescriptions":{"typeIdentifier":"t_contract$_IRateProvider_$263","typeString":"contract IRateProvider"}},"id":37290,"nodeType":"ArrayTypeName","src":"15226:15:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IRateProvider_$263_$dyn_storage_ptr","typeString":"contract IRateProvider[]"}},"visibility":"internal"},{"constant":false,"id":37294,"mutability":"mutable","name":"yieldFeeFlags","nameLocation":"15286:13:94","nodeType":"VariableDeclaration","scope":37368,"src":"15272:27:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_memory_ptr","typeString":"bool[]"},"typeName":{"baseType":{"id":37292,"name":"bool","nodeType":"ElementaryTypeName","src":"15272:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37293,"nodeType":"ArrayTypeName","src":"15272:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_bool_$dyn_storage_ptr","typeString":"bool[]"}},"visibility":"internal"}],"src":"15145:160:94"},"returnParameters":{"id":37300,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37299,"mutability":"mutable","name":"tokenConfig","nameLocation":"15348:11:94","nodeType":"VariableDeclaration","scope":37368,"src":"15327:32:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":37297,"nodeType":"UserDefinedTypeName","pathNode":{"id":37296,"name":"TokenConfig","nameLocations":["15327:11:94"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"15327:11:94"},"referencedDeclaration":4694,"src":"15327:11:94","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":37298,"nodeType":"ArrayTypeName","src":"15327:13:94","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"}],"src":"15326:34:94"},"scope":38836,"src":"15120:660:94","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[734],"body":{"id":37376,"nodeType":"Block","src":"15865:64:94","statements":[]},"functionSelector":"87a530f8","id":37377,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":37373,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37370,"src":"15859:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":37374,"kind":"modifierInvocation","modifierName":{"id":37372,"name":"onlyInRecoveryMode","nameLocations":["15840:18:94"],"nodeType":"IdentifierPath","referencedDeclaration":25557,"src":"15840:18:94"},"nodeType":"ModifierInvocation","src":"15840:24:94"}],"name":"recoveryModeExit","nameLocation":"15795:16:94","nodeType":"FunctionDefinition","parameters":{"id":37371,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37370,"mutability":"mutable","name":"pool","nameLocation":"15820:4:94","nodeType":"VariableDeclaration","scope":37377,"src":"15812:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37369,"name":"address","nodeType":"ElementaryTypeName","src":"15812:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15811:14:94"},"returnParameters":{"id":37375,"nodeType":"ParameterList","parameters":[],"src":"15865:0:94"},"scope":38836,"src":"15786:143:94","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[745],"body":{"id":37393,"nodeType":"Block","src":"16084:90:94","statements":[{"expression":{"arguments":[{"id":37389,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37379,"src":"16143:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37390,"name":"roundingDirection","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37382,"src":"16149:17:94","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"id":37388,"name":"_loadPoolDataUpdatingBalancesAndYieldFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25381,"src":"16101:41:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_enum$_Rounding_$4732_$returns$_t_struct$_PoolData_$4729_memory_ptr_$","typeString":"function (address,enum Rounding) returns (struct PoolData memory)"}},"id":37391,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16101:66:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"functionReturnParameters":37387,"id":37392,"nodeType":"Return","src":"16094:73:94"}]},"functionSelector":"0f682ba0","id":37394,"implemented":true,"kind":"function","modifiers":[],"name":"loadPoolDataUpdatingBalancesAndYieldFees","nameLocation":"15944:40:94","nodeType":"FunctionDefinition","parameters":{"id":37383,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37379,"mutability":"mutable","name":"pool","nameLocation":"16002:4:94","nodeType":"VariableDeclaration","scope":37394,"src":"15994:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37378,"name":"address","nodeType":"ElementaryTypeName","src":"15994:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37382,"mutability":"mutable","name":"roundingDirection","nameLocation":"16025:17:94","nodeType":"VariableDeclaration","scope":37394,"src":"16016:26:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"},"typeName":{"id":37381,"nodeType":"UserDefinedTypeName","pathNode":{"id":37380,"name":"Rounding","nameLocations":["16016:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":4732,"src":"16016:8:94"},"referencedDeclaration":4732,"src":"16016:8:94","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"visibility":"internal"}],"src":"15984:64:94"},"returnParameters":{"id":37387,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37386,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37394,"src":"16067:15:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":37385,"nodeType":"UserDefinedTypeName","pathNode":{"id":37384,"name":"PoolData","nameLocations":["16067:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"16067:8:94"},"referencedDeclaration":4729,"src":"16067:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"16066:17:94"},"scope":38836,"src":"15935:239:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[756],"body":{"id":37412,"nodeType":"Block","src":"16352:90:94","statements":[{"expression":{"arguments":[{"id":37408,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37396,"src":"16411:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37409,"name":"roundingDirection","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37399,"src":"16417:17:94","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"id":37407,"name":"_loadPoolDataUpdatingBalancesAndYieldFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25381,"src":"16369:41:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_enum$_Rounding_$4732_$returns$_t_struct$_PoolData_$4729_memory_ptr_$","typeString":"function (address,enum Rounding) returns (struct PoolData memory)"}},"id":37410,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16369:66:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"functionReturnParameters":37406,"id":37411,"nodeType":"Return","src":"16362:73:94"}]},"functionSelector":"dc4402ed","id":37413,"implemented":true,"kind":"function","modifiers":[{"id":37402,"kind":"modifierInvocation","modifierName":{"id":37401,"name":"nonReentrant","nameLocations":["16313:12:94"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"16313:12:94"},"nodeType":"ModifierInvocation","src":"16313:12:94"}],"name":"loadPoolDataUpdatingBalancesAndYieldFeesReentrancy","nameLocation":"16189:50:94","nodeType":"FunctionDefinition","parameters":{"id":37400,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37396,"mutability":"mutable","name":"pool","nameLocation":"16257:4:94","nodeType":"VariableDeclaration","scope":37413,"src":"16249:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37395,"name":"address","nodeType":"ElementaryTypeName","src":"16249:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37399,"mutability":"mutable","name":"roundingDirection","nameLocation":"16280:17:94","nodeType":"VariableDeclaration","scope":37413,"src":"16271:26:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"},"typeName":{"id":37398,"nodeType":"UserDefinedTypeName","pathNode":{"id":37397,"name":"Rounding","nameLocations":["16271:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":4732,"src":"16271:8:94"},"referencedDeclaration":4732,"src":"16271:8:94","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"visibility":"internal"}],"src":"16239:64:94"},"returnParameters":{"id":37406,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37405,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37413,"src":"16335:15:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":37404,"nodeType":"UserDefinedTypeName","pathNode":{"id":37403,"name":"PoolData","nameLocations":["16335:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"16335:8:94"},"referencedDeclaration":4729,"src":"16335:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"16334:17:94"},"scope":38836,"src":"16180:262:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[796],"body":{"id":37438,"nodeType":"Block","src":"16665:138:94","statements":[{"expression":{"arguments":[{"id":37430,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37416,"src":"16716:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},{"id":37431,"name":"newRawBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37418,"src":"16726:13:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":37432,"name":"roundingDirection","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37421,"src":"16741:17:94","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},{"id":37433,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37423,"src":"16760:10:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37429,"name":"_updateRawAndLiveTokenBalancesInPoolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25458,"src":"16675:40:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_PoolData_$4729_memory_ptr_$_t_uint256_$_t_enum$_Rounding_$4732_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct PoolData memory,uint256,enum Rounding,uint256) pure returns (uint256)"}},"id":37434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16675:96:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37435,"nodeType":"ExpressionStatement","src":"16675:96:94"},{"expression":{"id":37436,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37416,"src":"16788:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"functionReturnParameters":37428,"id":37437,"nodeType":"Return","src":"16781:15:94"}]},"functionSelector":"aa01edb3","id":37439,"implemented":true,"kind":"function","modifiers":[],"name":"updateLiveTokenBalanceInPoolData","nameLocation":"16457:32:94","nodeType":"FunctionDefinition","parameters":{"id":37424,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37416,"mutability":"mutable","name":"poolData","nameLocation":"16515:8:94","nodeType":"VariableDeclaration","scope":37439,"src":"16499:24:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":37415,"nodeType":"UserDefinedTypeName","pathNode":{"id":37414,"name":"PoolData","nameLocations":["16499:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"16499:8:94"},"referencedDeclaration":4729,"src":"16499:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":37418,"mutability":"mutable","name":"newRawBalance","nameLocation":"16541:13:94","nodeType":"VariableDeclaration","scope":37439,"src":"16533:21:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37417,"name":"uint256","nodeType":"ElementaryTypeName","src":"16533:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":37421,"mutability":"mutable","name":"roundingDirection","nameLocation":"16573:17:94","nodeType":"VariableDeclaration","scope":37439,"src":"16564:26:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"},"typeName":{"id":37420,"nodeType":"UserDefinedTypeName","pathNode":{"id":37419,"name":"Rounding","nameLocations":["16564:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":4732,"src":"16564:8:94"},"referencedDeclaration":4732,"src":"16564:8:94","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"visibility":"internal"},{"constant":false,"id":37423,"mutability":"mutable","name":"tokenIndex","nameLocation":"16608:10:94","nodeType":"VariableDeclaration","scope":37439,"src":"16600:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37422,"name":"uint256","nodeType":"ElementaryTypeName","src":"16600:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16489:135:94"},"returnParameters":{"id":37428,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37427,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37439,"src":"16648:15:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":37426,"nodeType":"UserDefinedTypeName","pathNode":{"id":37425,"name":"PoolData","nameLocations":["16648:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"16648:8:94"},"referencedDeclaration":4729,"src":"16648:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"16647:17:94"},"scope":38836,"src":"16448:355:94","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[810],"body":{"id":37461,"nodeType":"Block","src":"17016:124:94","statements":[{"expression":{"arguments":[{"id":37455,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37442,"src":"17066:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},{"id":37456,"name":"lastLiveBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37444,"src":"17076:15:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":37457,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37446,"src":"17093:10:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":37458,"name":"aggregateYieldFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37448,"src":"17105:27:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":37453,"name":"PoolDataLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31031,"src":"17033:11:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolDataLib_$31031_$","typeString":"type(library PoolDataLib)"}},"id":37454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17045:20:94","memberName":"_computeYieldFeesDue","nodeType":"MemberAccess","referencedDeclaration":31030,"src":"17033:32:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_PoolData_$4729_memory_ptr_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (struct PoolData memory,uint256,uint256,uint256) pure returns (uint256)"}},"id":37459,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17033:100:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":37452,"id":37460,"nodeType":"Return","src":"17026:107:94"}]},"functionSelector":"08bade29","id":37462,"implemented":true,"kind":"function","modifiers":[],"name":"computeYieldFeesDue","nameLocation":"16818:19:94","nodeType":"FunctionDefinition","parameters":{"id":37449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37442,"mutability":"mutable","name":"poolData","nameLocation":"16863:8:94","nodeType":"VariableDeclaration","scope":37462,"src":"16847:24:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":37441,"nodeType":"UserDefinedTypeName","pathNode":{"id":37440,"name":"PoolData","nameLocations":["16847:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"16847:8:94"},"referencedDeclaration":4729,"src":"16847:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":37444,"mutability":"mutable","name":"lastLiveBalance","nameLocation":"16889:15:94","nodeType":"VariableDeclaration","scope":37462,"src":"16881:23:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37443,"name":"uint256","nodeType":"ElementaryTypeName","src":"16881:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":37446,"mutability":"mutable","name":"tokenIndex","nameLocation":"16922:10:94","nodeType":"VariableDeclaration","scope":37462,"src":"16914:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37445,"name":"uint256","nodeType":"ElementaryTypeName","src":"16914:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":37448,"mutability":"mutable","name":"aggregateYieldFeePercentage","nameLocation":"16950:27:94","nodeType":"VariableDeclaration","scope":37462,"src":"16942:35:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37447,"name":"uint256","nodeType":"ElementaryTypeName","src":"16942:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16837:146:94"},"returnParameters":{"id":37452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37451,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37462,"src":"17007:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37450,"name":"uint256","nodeType":"ElementaryTypeName","src":"17007:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17006:9:94"},"scope":38836,"src":"16809:331:94","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[764],"body":{"id":37475,"nodeType":"Block","src":"17237:60:94","statements":[{"expression":{"arguments":[{"id":37471,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37464,"src":"17275:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37472,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37467,"src":"17281:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}],"id":37470,"name":"_writePoolBalancesToStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25305,"src":"17247:27:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_struct$_PoolData_$4729_memory_ptr_$returns$__$","typeString":"function (address,struct PoolData memory)"}},"id":37473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17247:43:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37474,"nodeType":"ExpressionStatement","src":"17247:43:94"}]},"functionSelector":"0f619655","id":37476,"implemented":true,"kind":"function","modifiers":[],"name":"manualWritePoolBalancesToStorage","nameLocation":"17155:32:94","nodeType":"FunctionDefinition","parameters":{"id":37468,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37464,"mutability":"mutable","name":"pool","nameLocation":"17196:4:94","nodeType":"VariableDeclaration","scope":37476,"src":"17188:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37463,"name":"address","nodeType":"ElementaryTypeName","src":"17188:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37467,"mutability":"mutable","name":"poolData","nameLocation":"17218:8:94","nodeType":"VariableDeclaration","scope":37476,"src":"17202:24:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":37466,"nodeType":"UserDefinedTypeName","pathNode":{"id":37465,"name":"PoolData","nameLocations":["17202:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"17202:8:94"},"referencedDeclaration":4729,"src":"17202:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"17187:40:94"},"returnParameters":{"id":37469,"nodeType":"ParameterList","parameters":[],"src":"17237:0:94"},"scope":38836,"src":"17146:151:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[772],"body":{"id":37529,"nodeType":"Block","src":"17394:358:94","statements":[{"assignments":[37487],"declarations":[{"constant":false,"id":37487,"mutability":"mutable","name":"poolTokenBalances","nameLocation":"17470:17:94","nodeType":"VariableDeclaration","scope":37529,"src":"17404:83:94","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"typeName":{"id":37486,"keyName":"tokenIndex","keyNameLocation":"17420:10:94","keyType":{"id":37484,"name":"uint256","nodeType":"ElementaryTypeName","src":"17412:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"17404:57:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"valueName":"packedTokenBalance","valueNameLocation":"17442:18:94","valueType":{"id":37485,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17434:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},"visibility":"internal"}],"id":37491,"initialValue":{"baseExpression":{"id":37488,"name":"_poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28256,"src":"17490:18:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"}},"id":37490,"indexExpression":{"id":37489,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37478,"src":"17509:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17490:24:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"nodeType":"VariableDeclarationStatement","src":"17404:110:94"},{"assignments":[37493],"declarations":[{"constant":false,"id":37493,"mutability":"mutable","name":"numTokens","nameLocation":"17533:9:94","nodeType":"VariableDeclaration","scope":37529,"src":"17525:17:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37492,"name":"uint256","nodeType":"ElementaryTypeName","src":"17525:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37498,"initialValue":{"expression":{"baseExpression":{"id":37494,"name":"_poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28242,"src":"17545:11:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_contract$_IERC20_$40109_$dyn_storage_$","typeString":"mapping(address => contract IERC20[] storage ref)"}},"id":37496,"indexExpression":{"id":37495,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37478,"src":"17557:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17545:17:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":37497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17563:6:94","memberName":"length","nodeType":"MemberAccess","src":"17545:24:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17525:44:94"},{"expression":{"id":37505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":37499,"name":"balancesRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37482,"src":"17579:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":37503,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37493,"src":"17607:9:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37502,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"17593:13:94","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":37500,"name":"uint256","nodeType":"ElementaryTypeName","src":"17597:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37501,"nodeType":"ArrayTypeName","src":"17597:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":37504,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17593:24:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"17579:38:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":37506,"nodeType":"ExpressionStatement","src":"17579:38:94"},{"body":{"id":37527,"nodeType":"Block","src":"17668:78:94","statements":[{"expression":{"id":37525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":37517,"name":"balancesRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37482,"src":"17682:11:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":37519,"indexExpression":{"id":37518,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37508,"src":"17694:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"17682:14:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":37520,"name":"poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37487,"src":"17699:17:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"id":37522,"indexExpression":{"id":37521,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37508,"src":"17717:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17699:20:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":37523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17720:13:94","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":6222,"src":"17699:34:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":37524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17699:36:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17682:53:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37526,"nodeType":"ExpressionStatement","src":"17682:53:94"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37511,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37508,"src":"17648:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":37512,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37493,"src":"17652:9:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17648:13:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37528,"initializationExpression":{"assignments":[37508],"declarations":[{"constant":false,"id":37508,"mutability":"mutable","name":"i","nameLocation":"17641:1:94","nodeType":"VariableDeclaration","scope":37528,"src":"17633:9:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37507,"name":"uint256","nodeType":"ElementaryTypeName","src":"17633:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37510,"initialValue":{"hexValue":"30","id":37509,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17645:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"17633:13:94"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":37515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"17663:3:94","subExpression":{"id":37514,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37508,"src":"17665:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37516,"nodeType":"ExpressionStatement","src":"17663:3:94"},"nodeType":"ForStatement","src":"17628:118:94"}]},"functionSelector":"19a24bcb","id":37530,"implemented":true,"kind":"function","modifiers":[],"name":"getRawBalances","nameLocation":"17312:14:94","nodeType":"FunctionDefinition","parameters":{"id":37479,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37478,"mutability":"mutable","name":"pool","nameLocation":"17335:4:94","nodeType":"VariableDeclaration","scope":37530,"src":"17327:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37477,"name":"address","nodeType":"ElementaryTypeName","src":"17327:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17326:14:94"},"returnParameters":{"id":37483,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37482,"mutability":"mutable","name":"balancesRaw","nameLocation":"17381:11:94","nodeType":"VariableDeclaration","scope":37530,"src":"17364:28:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":37480,"name":"uint256","nodeType":"ElementaryTypeName","src":"17364:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37481,"nodeType":"ArrayTypeName","src":"17364:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"17363:30:94"},"scope":38836,"src":"17303:449:94","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[780],"body":{"id":37583,"nodeType":"Block","src":"17867:388:94","statements":[{"assignments":[37541],"declarations":[{"constant":false,"id":37541,"mutability":"mutable","name":"poolTokenBalances","nameLocation":"17943:17:94","nodeType":"VariableDeclaration","scope":37583,"src":"17877:83:94","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"typeName":{"id":37540,"keyName":"tokenIndex","keyNameLocation":"17893:10:94","keyType":{"id":37538,"name":"uint256","nodeType":"ElementaryTypeName","src":"17885:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Mapping","src":"17877:57:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},"valueName":"packedTokenBalance","valueNameLocation":"17915:18:94","valueType":{"id":37539,"name":"bytes32","nodeType":"ElementaryTypeName","src":"17907:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},"visibility":"internal"}],"id":37545,"initialValue":{"baseExpression":{"id":37542,"name":"_poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28256,"src":"17963:18:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"}},"id":37544,"indexExpression":{"id":37543,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37532,"src":"17982:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17963:24:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"nodeType":"VariableDeclarationStatement","src":"17877:110:94"},{"assignments":[37547],"declarations":[{"constant":false,"id":37547,"mutability":"mutable","name":"numTokens","nameLocation":"18006:9:94","nodeType":"VariableDeclaration","scope":37583,"src":"17998:17:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37546,"name":"uint256","nodeType":"ElementaryTypeName","src":"17998:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37552,"initialValue":{"expression":{"baseExpression":{"id":37548,"name":"_poolTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28242,"src":"18018:11:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_array$_t_contract$_IERC20_$40109_$dyn_storage_$","typeString":"mapping(address => contract IERC20[] storage ref)"}},"id":37550,"indexExpression":{"id":37549,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37532,"src":"18030:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18018:17:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage","typeString":"contract IERC20[] storage ref"}},"id":37551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18036:6:94","memberName":"length","nodeType":"MemberAccess","src":"18018:24:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17998:44:94"},{"expression":{"id":37559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":37553,"name":"lastBalancesLiveScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37536,"src":"18052:24:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":37557,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37547,"src":"18093:9:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37556,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"18079:13:94","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":37554,"name":"uint256","nodeType":"ElementaryTypeName","src":"18083:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37555,"nodeType":"ArrayTypeName","src":"18083:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":37558,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18079:24:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"18052:51:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":37560,"nodeType":"ExpressionStatement","src":"18052:51:94"},{"body":{"id":37581,"nodeType":"Block","src":"18154:95:94","statements":[{"expression":{"id":37579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":37571,"name":"lastBalancesLiveScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37536,"src":"18168:24:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":37573,"indexExpression":{"id":37572,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37562,"src":"18193:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"18168:27:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":37574,"name":"poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37541,"src":"18198:17:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},"id":37576,"indexExpression":{"id":37575,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37562,"src":"18216:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18198:20:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":37577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18219:17:94","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":6239,"src":"18198:38:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":37578,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18198:40:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18168:70:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37580,"nodeType":"ExpressionStatement","src":"18168:70:94"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":37567,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":37565,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37562,"src":"18134:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":37566,"name":"numTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37547,"src":"18138:9:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18134:13:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":37582,"initializationExpression":{"assignments":[37562],"declarations":[{"constant":false,"id":37562,"mutability":"mutable","name":"i","nameLocation":"18127:1:94","nodeType":"VariableDeclaration","scope":37582,"src":"18119:9:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37561,"name":"uint256","nodeType":"ElementaryTypeName","src":"18119:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":37564,"initialValue":{"hexValue":"30","id":37563,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18131:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"18119:13:94"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":37569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"18149:3:94","subExpression":{"id":37568,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37562,"src":"18151:1:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37570,"nodeType":"ExpressionStatement","src":"18149:3:94"},"nodeType":"ForStatement","src":"18114:135:94"}]},"functionSelector":"3cce2585","id":37584,"implemented":true,"kind":"function","modifiers":[],"name":"getLastLiveBalances","nameLocation":"17767:19:94","nodeType":"FunctionDefinition","parameters":{"id":37533,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37532,"mutability":"mutable","name":"pool","nameLocation":"17795:4:94","nodeType":"VariableDeclaration","scope":37584,"src":"17787:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37531,"name":"address","nodeType":"ElementaryTypeName","src":"17787:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17786:14:94"},"returnParameters":{"id":37537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37536,"mutability":"mutable","name":"lastBalancesLiveScaled18","nameLocation":"17841:24:94","nodeType":"VariableDeclaration","scope":37584,"src":"17824:41:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":37534,"name":"uint256","nodeType":"ElementaryTypeName","src":"17824:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37535,"nodeType":"ArrayTypeName","src":"17824:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"17823:43:94"},"scope":38836,"src":"17758:497:94","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[813],"body":{"id":37594,"nodeType":"Block","src":"18314:50:94","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":37590,"name":"reentrancyGuardEntered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24873,"src":"18332:22:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":37591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18332:24:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":37589,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"18324:7:94","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":37592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18324:33:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37593,"nodeType":"ExpressionStatement","src":"18324:33:94"}]},"functionSelector":"a408f312","id":37595,"implemented":true,"kind":"function","modifiers":[{"id":37587,"kind":"modifierInvocation","modifierName":{"id":37586,"name":"nonReentrant","nameLocations":["18301:12:94"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"18301:12:94"},"nodeType":"ModifierInvocation","src":"18301:12:94"}],"name":"guardedCheckEntered","nameLocation":"18270:19:94","nodeType":"FunctionDefinition","parameters":{"id":37585,"nodeType":"ParameterList","parameters":[],"src":"18289:2:94"},"returnParameters":{"id":37588,"nodeType":"ParameterList","parameters":[],"src":"18314:0:94"},"scope":38836,"src":"18261:103:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[816],"body":{"id":37604,"nodeType":"Block","src":"18420:51:94","statements":[{"expression":{"arguments":[{"id":37601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"18438:25:94","subExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":37599,"name":"reentrancyGuardEntered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24873,"src":"18439:22:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":37600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18439:24:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":37598,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"18430:7:94","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":37602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18430:34:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37603,"nodeType":"ExpressionStatement","src":"18430:34:94"}]},"functionSelector":"cecc95a7","id":37605,"implemented":true,"kind":"function","modifiers":[],"name":"unguardedCheckNotEntered","nameLocation":"18379:24:94","nodeType":"FunctionDefinition","parameters":{"id":37596,"nodeType":"ParameterList","parameters":[],"src":"18403:2:94"},"returnParameters":{"id":37597,"nodeType":"ParameterList","parameters":[],"src":"18420:0:94"},"scope":38836,"src":"18370:101:94","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[892],"body":{"id":37618,"nodeType":"Block","src":"18536:44:94","statements":[{"expression":{"arguments":[{"id":37614,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37608,"src":"18560:5:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":37615,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37610,"src":"18567:5:94","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":37613,"name":"_accountDelta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24964,"src":"18546:13:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_int256_$returns$__$","typeString":"function (contract IERC20,int256)"}},"id":37616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18546:27:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37617,"nodeType":"ExpressionStatement","src":"18546:27:94"}]},"functionSelector":"80047e26","id":37619,"implemented":true,"kind":"function","modifiers":[],"name":"accountDelta","nameLocation":"18486:12:94","nodeType":"FunctionDefinition","parameters":{"id":37611,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37608,"mutability":"mutable","name":"token","nameLocation":"18506:5:94","nodeType":"VariableDeclaration","scope":37619,"src":"18499:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":37607,"nodeType":"UserDefinedTypeName","pathNode":{"id":37606,"name":"IERC20","nameLocations":["18499:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"18499:6:94"},"referencedDeclaration":40109,"src":"18499:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":37610,"mutability":"mutable","name":"delta","nameLocation":"18520:5:94","nodeType":"VariableDeclaration","scope":37619,"src":"18513:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":37609,"name":"int256","nodeType":"ElementaryTypeName","src":"18513:6:94","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"18498:28:94"},"returnParameters":{"id":37612,"nodeType":"ParameterList","parameters":[],"src":"18536:0:94"},"scope":38836,"src":"18477:103:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[900],"body":{"id":37632,"nodeType":"Block","src":"18647:45:94","statements":[{"expression":{"arguments":[{"id":37628,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37622,"src":"18671:5:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":37629,"name":"credit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37624,"src":"18678:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37627,"name":"_supplyCredit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24891,"src":"18657:13:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":37630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18657:28:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37631,"nodeType":"ExpressionStatement","src":"18657:28:94"}]},"functionSelector":"b1740c2d","id":37633,"implemented":true,"kind":"function","modifiers":[],"name":"supplyCredit","nameLocation":"18595:12:94","nodeType":"FunctionDefinition","parameters":{"id":37625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37622,"mutability":"mutable","name":"token","nameLocation":"18615:5:94","nodeType":"VariableDeclaration","scope":37633,"src":"18608:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":37621,"nodeType":"UserDefinedTypeName","pathNode":{"id":37620,"name":"IERC20","nameLocations":["18608:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"18608:6:94"},"referencedDeclaration":40109,"src":"18608:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":37624,"mutability":"mutable","name":"credit","nameLocation":"18630:6:94","nodeType":"VariableDeclaration","scope":37633,"src":"18622:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37623,"name":"uint256","nodeType":"ElementaryTypeName","src":"18622:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18607:30:94"},"returnParameters":{"id":37626,"nodeType":"ParameterList","parameters":[],"src":"18647:0:94"},"scope":38836,"src":"18586:106:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[908],"body":{"id":37646,"nodeType":"Block","src":"18753:39:94","statements":[{"expression":{"arguments":[{"id":37642,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37636,"src":"18773:5:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":37643,"name":"debt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37638,"src":"18780:4:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37641,"name":"_takeDebt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24908,"src":"18763:9:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,uint256)"}},"id":37644,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18763:22:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37645,"nodeType":"ExpressionStatement","src":"18763:22:94"}]},"functionSelector":"3e262ba3","id":37647,"implemented":true,"kind":"function","modifiers":[],"name":"takeDebt","nameLocation":"18707:8:94","nodeType":"FunctionDefinition","parameters":{"id":37639,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37636,"mutability":"mutable","name":"token","nameLocation":"18723:5:94","nodeType":"VariableDeclaration","scope":37647,"src":"18716:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":37635,"nodeType":"UserDefinedTypeName","pathNode":{"id":37634,"name":"IERC20","nameLocations":["18716:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"18716:6:94"},"referencedDeclaration":40109,"src":"18716:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":37638,"mutability":"mutable","name":"debt","nameLocation":"18738:4:94","nodeType":"VariableDeclaration","scope":37647,"src":"18730:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37637,"name":"uint256","nodeType":"ElementaryTypeName","src":"18730:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18715:28:94"},"returnParameters":{"id":37640,"nodeType":"ParameterList","parameters":[],"src":"18753:0:94"},"scope":38836,"src":"18698:94:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[916],"body":{"id":37662,"nodeType":"Block","src":"18866:50:94","statements":[{"expression":{"arguments":[{"id":37658,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37650,"src":"18896:5:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":37659,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37652,"src":"18903:5:94","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_int256","typeString":"int256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":37655,"name":"_tokenDeltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28343,"src":"18876:12:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858_$","typeString":"function () view returns (TokenDeltaMappingSlotType)"}},"id":37656,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18876:14:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858","typeString":"TokenDeltaMappingSlotType"}},"id":37657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18891:4:94","memberName":"tSet","nodeType":"MemberAccess","referencedDeclaration":6967,"src":"18876:19:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858_$_t_contract$_IERC20_$40109_$_t_int256_$returns$__$attached_to$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858_$","typeString":"function (TokenDeltaMappingSlotType,contract IERC20,int256)"}},"id":37660,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18876:33:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37661,"nodeType":"ExpressionStatement","src":"18876:33:94"}]},"functionSelector":"d0643b8c","id":37663,"implemented":true,"kind":"function","modifiers":[],"name":"manualSetAccountDelta","nameLocation":"18807:21:94","nodeType":"FunctionDefinition","parameters":{"id":37653,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37650,"mutability":"mutable","name":"token","nameLocation":"18836:5:94","nodeType":"VariableDeclaration","scope":37663,"src":"18829:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":37649,"nodeType":"UserDefinedTypeName","pathNode":{"id":37648,"name":"IERC20","nameLocations":["18829:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"18829:6:94"},"referencedDeclaration":40109,"src":"18829:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":37652,"mutability":"mutable","name":"delta","nameLocation":"18850:5:94","nodeType":"VariableDeclaration","scope":37663,"src":"18843:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":37651,"name":"int256","nodeType":"ElementaryTypeName","src":"18843:6:94","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"18828:28:94"},"returnParameters":{"id":37654,"nodeType":"ParameterList","parameters":[],"src":"18866:0:94"},"scope":38836,"src":"18798:118:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[921],"body":{"id":37674,"nodeType":"Block","src":"18987:56:94","statements":[{"expression":{"arguments":[{"id":37671,"name":"deltaCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37665,"src":"19025:10:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":37668,"name":"_nonZeroDeltaCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28331,"src":"18997:18:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function () view returns (StorageSlotExtension.Uint256SlotType)"}},"id":37669,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18997:20:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":37670,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19018:6:94","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":10262,"src":"18997:27:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_Uint256SlotType_$10142_$_t_uint256_$returns$__$attached_to$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function (StorageSlotExtension.Uint256SlotType,uint256)"}},"id":37672,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18997:39:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37673,"nodeType":"ExpressionStatement","src":"18997:39:94"}]},"functionSelector":"5eeae6eb","id":37675,"implemented":true,"kind":"function","modifiers":[],"name":"manualSetNonZeroDeltaCount","nameLocation":"18931:26:94","nodeType":"FunctionDefinition","parameters":{"id":37666,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37665,"mutability":"mutable","name":"deltaCount","nameLocation":"18966:10:94","nodeType":"VariableDeclaration","scope":37675,"src":"18958:18:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37664,"name":"uint256","nodeType":"ElementaryTypeName","src":"18958:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18957:20:94"},"returnParameters":{"id":37667,"nodeType":"ParameterList","parameters":[],"src":"18987:0:94"},"scope":38836,"src":"18922:121:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[929],"body":{"id":37689,"nodeType":"Block","src":"19119:46:94","statements":[{"expression":{"id":37687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":37683,"name":"_reservesOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28278,"src":"19129:11:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_uint256_$","typeString":"mapping(contract IERC20 => uint256)"}},"id":37685,"indexExpression":{"id":37684,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37678,"src":"19141:5:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"19129:18:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":37686,"name":"reserves","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37680,"src":"19150:8:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19129:29:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37688,"nodeType":"ExpressionStatement","src":"19129:29:94"}]},"functionSelector":"d64bc25d","id":37690,"implemented":true,"kind":"function","modifiers":[],"name":"manualSetReservesOf","nameLocation":"19058:19:94","nodeType":"FunctionDefinition","parameters":{"id":37681,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37678,"mutability":"mutable","name":"token","nameLocation":"19085:5:94","nodeType":"VariableDeclaration","scope":37690,"src":"19078:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":37677,"nodeType":"UserDefinedTypeName","pathNode":{"id":37676,"name":"IERC20","nameLocations":["19078:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"19078:6:94"},"referencedDeclaration":40109,"src":"19078:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":37680,"mutability":"mutable","name":"reserves","nameLocation":"19100:8:94","nodeType":"VariableDeclaration","scope":37690,"src":"19092:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37679,"name":"uint256","nodeType":"ElementaryTypeName","src":"19092:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19077:32:94"},"returnParameters":{"id":37682,"nodeType":"ParameterList","parameters":[],"src":"19119:0:94"},"scope":38836,"src":"19049:116:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[958],"body":{"id":37750,"nodeType":"Block","src":"19610:425:94","statements":[{"assignments":[37721],"declarations":[{"constant":false,"id":37721,"mutability":"mutable","name":"poolSwapParams","nameLocation":"19642:14:94","nodeType":"VariableDeclaration","scope":37750,"src":"19620:36:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":37720,"nodeType":"UserDefinedTypeName","pathNode":{"id":37719,"name":"PoolSwapParams","nameLocations":["19620:14:94"],"nodeType":"IdentifierPath","referencedDeclaration":4772,"src":"19620:14:94"},"referencedDeclaration":4772,"src":"19620:14:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"id":37727,"initialValue":{"arguments":[{"id":37723,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37693,"src":"19680:15:94","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},{"id":37724,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37696,"src":"19697:5:94","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},{"id":37725,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37699,"src":"19704:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"},{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"},{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}],"id":37722,"name":"_buildPoolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20062,"src":"19659:20:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_VaultSwapParams_$4754_memory_ptr_$_t_struct$_SwapState_$4661_memory_ptr_$_t_struct$_PoolData_$4729_memory_ptr_$returns$_t_struct$_PoolSwapParams_$4772_memory_ptr_$","typeString":"function (struct VaultSwapParams memory,struct SwapState memory,struct PoolData memory) view returns (struct PoolSwapParams memory)"}},"id":37726,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19659:54:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}},"nodeType":"VariableDeclarationStatement","src":"19620:93:94"},{"expression":{"id":37739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":37728,"name":"amountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37702,"src":"19725:19:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":37729,"name":"amountCalculatedScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37704,"src":"19746:24:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":37730,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37706,"src":"19772:8:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":37731,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37708,"src":"19782:9:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":37732,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"19724:68:94","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":37734,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37693,"src":"19814:15:94","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},{"id":37735,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37696,"src":"19843:5:94","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},{"id":37736,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37699,"src":"19862:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},{"id":37737,"name":"poolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37721,"src":"19884:14:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"},{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"},{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}],"id":37733,"name":"_swap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20436,"src":"19795:5:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_VaultSwapParams_$4754_memory_ptr_$_t_struct$_SwapState_$4661_memory_ptr_$_t_struct$_PoolData_$4729_memory_ptr_$_t_struct$_PoolSwapParams_$4772_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (struct VaultSwapParams memory,struct SwapState memory,struct PoolData memory,struct PoolSwapParams memory) returns (uint256,uint256,uint256,uint256)"}},"id":37738,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19795:113:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"src":"19724:184:94","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37740,"nodeType":"ExpressionStatement","src":"19724:184:94"},{"expression":{"components":[{"id":37741,"name":"amountCalculatedRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37702,"src":"19927:19:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":37742,"name":"amountCalculatedScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37704,"src":"19948:24:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":37743,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37706,"src":"19974:8:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":37744,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37708,"src":"19984:9:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":37745,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37693,"src":"19995:15:94","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},{"id":37746,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37696,"src":"20012:5:94","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},{"id":37747,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37699,"src":"20019:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}}],"id":37748,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"19926:102:94","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_struct$_VaultSwapParams_$4754_memory_ptr_$_t_struct$_SwapState_$4661_memory_ptr_$_t_struct$_PoolData_$4729_memory_ptr_$","typeString":"tuple(uint256,uint256,uint256,uint256,struct VaultSwapParams memory,struct SwapState memory,struct PoolData memory)"}},"functionReturnParameters":37718,"id":37749,"nodeType":"Return","src":"19919:109:94"}]},"functionSelector":"25b6a844","id":37751,"implemented":true,"kind":"function","modifiers":[],"name":"manualInternalSwap","nameLocation":"19180:18:94","nodeType":"FunctionDefinition","parameters":{"id":37700,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37693,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"19231:15:94","nodeType":"VariableDeclaration","scope":37751,"src":"19208:38:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":37692,"nodeType":"UserDefinedTypeName","pathNode":{"id":37691,"name":"VaultSwapParams","nameLocations":["19208:15:94"],"nodeType":"IdentifierPath","referencedDeclaration":4754,"src":"19208:15:94"},"referencedDeclaration":4754,"src":"19208:15:94","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"},{"constant":false,"id":37696,"mutability":"mutable","name":"state","nameLocation":"19273:5:94","nodeType":"VariableDeclaration","scope":37751,"src":"19256:22:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState"},"typeName":{"id":37695,"nodeType":"UserDefinedTypeName","pathNode":{"id":37694,"name":"SwapState","nameLocations":["19256:9:94"],"nodeType":"IdentifierPath","referencedDeclaration":4661,"src":"19256:9:94"},"referencedDeclaration":4661,"src":"19256:9:94","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_storage_ptr","typeString":"struct SwapState"}},"visibility":"internal"},{"constant":false,"id":37699,"mutability":"mutable","name":"poolData","nameLocation":"19304:8:94","nodeType":"VariableDeclaration","scope":37751,"src":"19288:24:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":37698,"nodeType":"UserDefinedTypeName","pathNode":{"id":37697,"name":"PoolData","nameLocations":["19288:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"19288:8:94"},"referencedDeclaration":4729,"src":"19288:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"19198:120:94"},"returnParameters":{"id":37718,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37702,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"19374:19:94","nodeType":"VariableDeclaration","scope":37751,"src":"19366:27:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37701,"name":"uint256","nodeType":"ElementaryTypeName","src":"19366:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":37704,"mutability":"mutable","name":"amountCalculatedScaled18","nameLocation":"19415:24:94","nodeType":"VariableDeclaration","scope":37751,"src":"19407:32:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37703,"name":"uint256","nodeType":"ElementaryTypeName","src":"19407:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":37706,"mutability":"mutable","name":"amountIn","nameLocation":"19461:8:94","nodeType":"VariableDeclaration","scope":37751,"src":"19453:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37705,"name":"uint256","nodeType":"ElementaryTypeName","src":"19453:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":37708,"mutability":"mutable","name":"amountOut","nameLocation":"19491:9:94","nodeType":"VariableDeclaration","scope":37751,"src":"19483:17:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37707,"name":"uint256","nodeType":"ElementaryTypeName","src":"19483:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":37711,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37751,"src":"19514:22:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":37710,"nodeType":"UserDefinedTypeName","pathNode":{"id":37709,"name":"VaultSwapParams","nameLocations":["19514:15:94"],"nodeType":"IdentifierPath","referencedDeclaration":4754,"src":"19514:15:94"},"referencedDeclaration":4754,"src":"19514:15:94","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"},{"constant":false,"id":37714,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37751,"src":"19550:16:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState"},"typeName":{"id":37713,"nodeType":"UserDefinedTypeName","pathNode":{"id":37712,"name":"SwapState","nameLocations":["19550:9:94"],"nodeType":"IdentifierPath","referencedDeclaration":4661,"src":"19550:9:94"},"referencedDeclaration":4661,"src":"19550:9:94","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_storage_ptr","typeString":"struct SwapState"}},"visibility":"internal"},{"constant":false,"id":37717,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37751,"src":"19580:15:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":37716,"nodeType":"UserDefinedTypeName","pathNode":{"id":37715,"name":"PoolData","nameLocations":["19580:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"19580:8:94"},"referencedDeclaration":4729,"src":"19580:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"19352:253:94"},"scope":38836,"src":"19171:864:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[970],"body":{"id":37781,"nodeType":"Block","src":"20213:175:94","statements":[{"assignments":[37767],"declarations":[{"constant":false,"id":37767,"mutability":"mutable","name":"poolSwapParams","nameLocation":"20245:14:94","nodeType":"VariableDeclaration","scope":37781,"src":"20223:36:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":37766,"nodeType":"UserDefinedTypeName","pathNode":{"id":37765,"name":"PoolSwapParams","nameLocations":["20223:14:94"],"nodeType":"IdentifierPath","referencedDeclaration":4772,"src":"20223:14:94"},"referencedDeclaration":4772,"src":"20223:14:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"id":37773,"initialValue":{"arguments":[{"id":37769,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37754,"src":"20283:15:94","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},{"id":37770,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37757,"src":"20300:5:94","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},{"id":37771,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37760,"src":"20307:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"},{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"},{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}],"id":37768,"name":"_buildPoolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20062,"src":"20262:20:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_VaultSwapParams_$4754_memory_ptr_$_t_struct$_SwapState_$4661_memory_ptr_$_t_struct$_PoolData_$4729_memory_ptr_$returns$_t_struct$_PoolSwapParams_$4772_memory_ptr_$","typeString":"function (struct VaultSwapParams memory,struct SwapState memory,struct PoolData memory) view returns (struct PoolSwapParams memory)"}},"id":37772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20262:54:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}},"nodeType":"VariableDeclarationStatement","src":"20223:93:94"},{"expression":{"arguments":[{"id":37775,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37754,"src":"20332:15:94","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},{"id":37776,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37757,"src":"20349:5:94","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},{"id":37777,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37760,"src":"20356:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},{"id":37778,"name":"poolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37767,"src":"20366:14:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"},{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"},{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}],"id":37774,"name":"_swap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20436,"src":"20326:5:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_VaultSwapParams_$4754_memory_ptr_$_t_struct$_SwapState_$4661_memory_ptr_$_t_struct$_PoolData_$4729_memory_ptr_$_t_struct$_PoolSwapParams_$4772_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (struct VaultSwapParams memory,struct SwapState memory,struct PoolData memory,struct PoolSwapParams memory) returns (uint256,uint256,uint256,uint256)"}},"id":37779,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20326:55:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256,uint256)"}},"id":37780,"nodeType":"ExpressionStatement","src":"20326:55:94"}]},"functionSelector":"96e74a27","id":37782,"implemented":true,"kind":"function","modifiers":[{"id":37763,"kind":"modifierInvocation","modifierName":{"id":37762,"name":"nonReentrant","nameLocations":["20200:12:94"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"20200:12:94"},"nodeType":"ModifierInvocation","src":"20200:12:94"}],"name":"manualReentrancySwap","nameLocation":"20050:20:94","nodeType":"FunctionDefinition","parameters":{"id":37761,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37754,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"20103:15:94","nodeType":"VariableDeclaration","scope":37782,"src":"20080:38:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":37753,"nodeType":"UserDefinedTypeName","pathNode":{"id":37752,"name":"VaultSwapParams","nameLocations":["20080:15:94"],"nodeType":"IdentifierPath","referencedDeclaration":4754,"src":"20080:15:94"},"referencedDeclaration":4754,"src":"20080:15:94","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"},{"constant":false,"id":37757,"mutability":"mutable","name":"state","nameLocation":"20145:5:94","nodeType":"VariableDeclaration","scope":37782,"src":"20128:22:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState"},"typeName":{"id":37756,"nodeType":"UserDefinedTypeName","pathNode":{"id":37755,"name":"SwapState","nameLocations":["20128:9:94"],"nodeType":"IdentifierPath","referencedDeclaration":4661,"src":"20128:9:94"},"referencedDeclaration":4661,"src":"20128:9:94","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_storage_ptr","typeString":"struct SwapState"}},"visibility":"internal"},{"constant":false,"id":37760,"mutability":"mutable","name":"poolData","nameLocation":"20176:8:94","nodeType":"VariableDeclaration","scope":37782,"src":"20160:24:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":37759,"nodeType":"UserDefinedTypeName","pathNode":{"id":37758,"name":"PoolData","nameLocations":["20160:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"20160:8:94"},"referencedDeclaration":4729,"src":"20160:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"20070:120:94"},"returnParameters":{"id":37764,"nodeType":"ParameterList","parameters":[],"src":"20213:0:94"},"scope":38836,"src":"20041:347:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[980],"body":{"id":37800,"nodeType":"Block","src":"20495:73:94","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"baseExpression":{"id":37792,"name":"_aggregateFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28263,"src":"20512:20:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$_$","typeString":"mapping(address => mapping(contract IERC20 => bytes32))"}},"id":37794,"indexExpression":{"id":37793,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37784,"src":"20533:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20512:26:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$","typeString":"mapping(contract IERC20 => bytes32)"}},"id":37796,"indexExpression":{"id":37795,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37787,"src":"20539:5:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20512:33:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":37797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20546:13:94","memberName":"getBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":6222,"src":"20512:47:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":37798,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20512:49:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":37791,"id":37799,"nodeType":"Return","src":"20505:56:94"}]},"functionSelector":"36918d6e","id":37801,"implemented":true,"kind":"function","modifiers":[],"name":"manualGetAggregateSwapFeeAmount","nameLocation":"20403:31:94","nodeType":"FunctionDefinition","parameters":{"id":37788,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37784,"mutability":"mutable","name":"pool","nameLocation":"20443:4:94","nodeType":"VariableDeclaration","scope":37801,"src":"20435:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37783,"name":"address","nodeType":"ElementaryTypeName","src":"20435:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37787,"mutability":"mutable","name":"token","nameLocation":"20456:5:94","nodeType":"VariableDeclaration","scope":37801,"src":"20449:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":37786,"nodeType":"UserDefinedTypeName","pathNode":{"id":37785,"name":"IERC20","nameLocations":["20449:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"20449:6:94"},"referencedDeclaration":40109,"src":"20449:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"20434:28:94"},"returnParameters":{"id":37791,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37790,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37801,"src":"20486:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37789,"name":"uint256","nodeType":"ElementaryTypeName","src":"20486:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20485:9:94"},"scope":38836,"src":"20394:174:94","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[990],"body":{"id":37819,"nodeType":"Block","src":"20676:77:94","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"baseExpression":{"id":37811,"name":"_aggregateFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28263,"src":"20693:20:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$_$","typeString":"mapping(address => mapping(contract IERC20 => bytes32))"}},"id":37813,"indexExpression":{"id":37812,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37803,"src":"20714:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20693:26:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$","typeString":"mapping(contract IERC20 => bytes32)"}},"id":37815,"indexExpression":{"id":37814,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37806,"src":"20720:5:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20693:33:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":37816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20727:17:94","memberName":"getBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":6239,"src":"20693:51:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$attached_to$_t_bytes32_$","typeString":"function (bytes32) pure returns (uint256)"}},"id":37817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20693:53:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":37810,"id":37818,"nodeType":"Return","src":"20686:60:94"}]},"functionSelector":"8f5aeb4b","id":37820,"implemented":true,"kind":"function","modifiers":[],"name":"manualGetAggregateYieldFeeAmount","nameLocation":"20583:32:94","nodeType":"FunctionDefinition","parameters":{"id":37807,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37803,"mutability":"mutable","name":"pool","nameLocation":"20624:4:94","nodeType":"VariableDeclaration","scope":37820,"src":"20616:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37802,"name":"address","nodeType":"ElementaryTypeName","src":"20616:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37806,"mutability":"mutable","name":"token","nameLocation":"20637:5:94","nodeType":"VariableDeclaration","scope":37820,"src":"20630:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":37805,"nodeType":"UserDefinedTypeName","pathNode":{"id":37804,"name":"IERC20","nameLocations":["20630:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"20630:6:94"},"referencedDeclaration":40109,"src":"20630:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"20615:28:94"},"returnParameters":{"id":37810,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37809,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37820,"src":"20667:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37808,"name":"uint256","nodeType":"ElementaryTypeName","src":"20667:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20666:9:94"},"scope":38836,"src":"20574:179:94","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1000],"body":{"id":37845,"nodeType":"Block","src":"20852:107:94","statements":[{"expression":{"id":37843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":37830,"name":"_aggregateFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28263,"src":"20862:20:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$_$","typeString":"mapping(address => mapping(contract IERC20 => bytes32))"}},"id":37833,"indexExpression":{"id":37831,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37822,"src":"20883:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20862:26:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$","typeString":"mapping(contract IERC20 => bytes32)"}},"id":37834,"indexExpression":{"id":37832,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37825,"src":"20889:5:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"20862:33:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":37841,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37827,"src":"20946:5:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"baseExpression":{"id":37835,"name":"_aggregateFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28263,"src":"20898:20:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$_$","typeString":"mapping(address => mapping(contract IERC20 => bytes32))"}},"id":37837,"indexExpression":{"id":37836,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37822,"src":"20919:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20898:26:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$","typeString":"mapping(contract IERC20 => bytes32)"}},"id":37839,"indexExpression":{"id":37838,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37825,"src":"20925:5:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20898:33:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":37840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20932:13:94","memberName":"setBalanceRaw","nodeType":"MemberAccess","referencedDeclaration":6257,"src":"20898:47:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":37842,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20898:54:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"20862:90:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":37844,"nodeType":"ExpressionStatement","src":"20862:90:94"}]},"functionSelector":"44ea8763","id":37846,"implemented":true,"kind":"function","modifiers":[],"name":"manualSetAggregateSwapFeeAmount","nameLocation":"20768:31:94","nodeType":"FunctionDefinition","parameters":{"id":37828,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37822,"mutability":"mutable","name":"pool","nameLocation":"20808:4:94","nodeType":"VariableDeclaration","scope":37846,"src":"20800:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37821,"name":"address","nodeType":"ElementaryTypeName","src":"20800:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37825,"mutability":"mutable","name":"token","nameLocation":"20821:5:94","nodeType":"VariableDeclaration","scope":37846,"src":"20814:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":37824,"nodeType":"UserDefinedTypeName","pathNode":{"id":37823,"name":"IERC20","nameLocations":["20814:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"20814:6:94"},"referencedDeclaration":40109,"src":"20814:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":37827,"mutability":"mutable","name":"value","nameLocation":"20836:5:94","nodeType":"VariableDeclaration","scope":37846,"src":"20828:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37826,"name":"uint256","nodeType":"ElementaryTypeName","src":"20828:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"20799:43:94"},"returnParameters":{"id":37829,"nodeType":"ParameterList","parameters":[],"src":"20852:0:94"},"scope":38836,"src":"20759:200:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1010],"body":{"id":37871,"nodeType":"Block","src":"21059:111:94","statements":[{"expression":{"id":37869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":37856,"name":"_aggregateFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28263,"src":"21069:20:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$_$","typeString":"mapping(address => mapping(contract IERC20 => bytes32))"}},"id":37859,"indexExpression":{"id":37857,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37848,"src":"21090:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21069:26:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$","typeString":"mapping(contract IERC20 => bytes32)"}},"id":37860,"indexExpression":{"id":37858,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37851,"src":"21096:5:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21069:33:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":37867,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37853,"src":"21157:5:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"baseExpression":{"id":37861,"name":"_aggregateFeeAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28263,"src":"21105:20:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$_$","typeString":"mapping(address => mapping(contract IERC20 => bytes32))"}},"id":37863,"indexExpression":{"id":37862,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37848,"src":"21126:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21105:26:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC20_$40109_$_t_bytes32_$","typeString":"mapping(contract IERC20 => bytes32)"}},"id":37865,"indexExpression":{"id":37864,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37851,"src":"21132:5:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21105:33:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":37866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21139:17:94","memberName":"setBalanceDerived","nodeType":"MemberAccess","referencedDeclaration":6275,"src":"21105:51:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256) pure returns (bytes32)"}},"id":37868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21105:58:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"21069:94:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":37870,"nodeType":"ExpressionStatement","src":"21069:94:94"}]},"functionSelector":"7004b0f1","id":37872,"implemented":true,"kind":"function","modifiers":[],"name":"manualSetAggregateYieldFeeAmount","nameLocation":"20974:32:94","nodeType":"FunctionDefinition","parameters":{"id":37854,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37848,"mutability":"mutable","name":"pool","nameLocation":"21015:4:94","nodeType":"VariableDeclaration","scope":37872,"src":"21007:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37847,"name":"address","nodeType":"ElementaryTypeName","src":"21007:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37851,"mutability":"mutable","name":"token","nameLocation":"21028:5:94","nodeType":"VariableDeclaration","scope":37872,"src":"21021:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":37850,"nodeType":"UserDefinedTypeName","pathNode":{"id":37849,"name":"IERC20","nameLocations":["21021:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"21021:6:94"},"referencedDeclaration":40109,"src":"21021:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":37853,"mutability":"mutable","name":"value","nameLocation":"21043:5:94","nodeType":"VariableDeclaration","scope":37872,"src":"21035:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37852,"name":"uint256","nodeType":"ElementaryTypeName","src":"21035:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"21006:43:94"},"returnParameters":{"id":37855,"nodeType":"ParameterList","parameters":[],"src":"21059:0:94"},"scope":38836,"src":"20965:205:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1017],"body":{"id":37890,"nodeType":"Block","src":"21259:99:94","statements":[{"expression":{"id":37888,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":37879,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"21269:15:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":37881,"indexExpression":{"id":37880,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37874,"src":"21285:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21269:21:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":37886,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37876,"src":"21345:5:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":37882,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"21293:15:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":37884,"indexExpression":{"id":37883,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37874,"src":"21309:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21293:21:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":37885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21315:29:94","memberName":"setAggregateSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":30162,"src":"21293:51:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_uint256_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,uint256) pure returns (PoolConfigBits)"}},"id":37887,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21293:58:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"21269:82:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":37889,"nodeType":"ExpressionStatement","src":"21269:82:94"}]},"functionSelector":"cfcc2209","id":37891,"implemented":true,"kind":"function","modifiers":[],"name":"manualSetAggregateSwapFeePercentage","nameLocation":"21185:35:94","nodeType":"FunctionDefinition","parameters":{"id":37877,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37874,"mutability":"mutable","name":"pool","nameLocation":"21229:4:94","nodeType":"VariableDeclaration","scope":37891,"src":"21221:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37873,"name":"address","nodeType":"ElementaryTypeName","src":"21221:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37876,"mutability":"mutable","name":"value","nameLocation":"21243:5:94","nodeType":"VariableDeclaration","scope":37891,"src":"21235:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37875,"name":"uint256","nodeType":"ElementaryTypeName","src":"21235:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"21220:29:94"},"returnParameters":{"id":37878,"nodeType":"ParameterList","parameters":[],"src":"21259:0:94"},"scope":38836,"src":"21176:182:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1024],"body":{"id":37909,"nodeType":"Block","src":"21448:100:94","statements":[{"expression":{"id":37907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":37898,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"21458:15:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":37900,"indexExpression":{"id":37899,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37893,"src":"21474:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21458:21:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":37905,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37895,"src":"21535:5:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":37901,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"21482:15:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":37903,"indexExpression":{"id":37902,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37893,"src":"21498:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21482:21:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":37904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21504:30:94","memberName":"setAggregateYieldFeePercentage","nodeType":"MemberAccess","referencedDeclaration":30223,"src":"21482:52:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_uint256_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$attached_to$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,uint256) pure returns (PoolConfigBits)"}},"id":37906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21482:59:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"21458:83:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":37908,"nodeType":"ExpressionStatement","src":"21458:83:94"}]},"functionSelector":"920af066","id":37910,"implemented":true,"kind":"function","modifiers":[],"name":"manualSetAggregateYieldFeePercentage","nameLocation":"21373:36:94","nodeType":"FunctionDefinition","parameters":{"id":37896,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37893,"mutability":"mutable","name":"pool","nameLocation":"21418:4:94","nodeType":"VariableDeclaration","scope":37910,"src":"21410:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37892,"name":"address","nodeType":"ElementaryTypeName","src":"21410:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37895,"mutability":"mutable","name":"value","nameLocation":"21432:5:94","nodeType":"VariableDeclaration","scope":37910,"src":"21424:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37894,"name":"uint256","nodeType":"ElementaryTypeName","src":"21424:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"21409:29:94"},"returnParameters":{"id":37897,"nodeType":"ParameterList","parameters":[],"src":"21448:0:94"},"scope":38836,"src":"21364:184:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1039],"body":{"id":37931,"nodeType":"Block","src":"21755:78:94","statements":[{"expression":{"arguments":[{"id":37926,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37913,"src":"21793:15:94","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},{"id":37927,"name":"state","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37916,"src":"21810:5:94","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},{"id":37928,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37919,"src":"21817:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"},{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"},{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}],"id":37925,"name":"_buildPoolSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20062,"src":"21772:20:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_VaultSwapParams_$4754_memory_ptr_$_t_struct$_SwapState_$4661_memory_ptr_$_t_struct$_PoolData_$4729_memory_ptr_$returns$_t_struct$_PoolSwapParams_$4772_memory_ptr_$","typeString":"function (struct VaultSwapParams memory,struct SwapState memory,struct PoolData memory) view returns (struct PoolSwapParams memory)"}},"id":37929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21772:54:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}},"functionReturnParameters":37924,"id":37930,"nodeType":"Return","src":"21765:61:94"}]},"functionSelector":"16a573c2","id":37932,"implemented":true,"kind":"function","modifiers":[],"name":"manualBuildPoolSwapParams","nameLocation":"21563:25:94","nodeType":"FunctionDefinition","parameters":{"id":37920,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37913,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"21621:15:94","nodeType":"VariableDeclaration","scope":37932,"src":"21598:38:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":37912,"nodeType":"UserDefinedTypeName","pathNode":{"id":37911,"name":"VaultSwapParams","nameLocations":["21598:15:94"],"nodeType":"IdentifierPath","referencedDeclaration":4754,"src":"21598:15:94"},"referencedDeclaration":4754,"src":"21598:15:94","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"},{"constant":false,"id":37916,"mutability":"mutable","name":"state","nameLocation":"21663:5:94","nodeType":"VariableDeclaration","scope":37932,"src":"21646:22:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState"},"typeName":{"id":37915,"nodeType":"UserDefinedTypeName","pathNode":{"id":37914,"name":"SwapState","nameLocations":["21646:9:94"],"nodeType":"IdentifierPath","referencedDeclaration":4661,"src":"21646:9:94"},"referencedDeclaration":4661,"src":"21646:9:94","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_storage_ptr","typeString":"struct SwapState"}},"visibility":"internal"},{"constant":false,"id":37919,"mutability":"mutable","name":"poolData","nameLocation":"21694:8:94","nodeType":"VariableDeclaration","scope":37932,"src":"21678:24:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":37918,"nodeType":"UserDefinedTypeName","pathNode":{"id":37917,"name":"PoolData","nameLocations":["21678:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"21678:8:94"},"referencedDeclaration":4729,"src":"21678:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"21588:120:94"},"returnParameters":{"id":37924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37923,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37932,"src":"21732:21:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":37922,"nodeType":"UserDefinedTypeName","pathNode":{"id":37921,"name":"PoolSwapParams","nameLocations":["21732:14:94"],"nodeType":"IdentifierPath","referencedDeclaration":4772,"src":"21732:14:94"},"referencedDeclaration":4772,"src":"21732:14:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"src":"21731:23:94"},"scope":38836,"src":"21554:279:94","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1058],"body":{"id":37959,"nodeType":"Block","src":"22123:116:94","statements":[{"expression":{"arguments":[{"id":37952,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37935,"src":"22175:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},{"id":37953,"name":"totalSwapFeeAmountScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37937,"src":"22185:26:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":37954,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37939,"src":"22213:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":37955,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37942,"src":"22219:5:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":37956,"name":"index","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37944,"src":"22226:5:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":37951,"name":"_computeAndChargeAggregateSwapFees","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21795,"src":"22140:34:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PoolData_$4729_memory_ptr_$_t_uint256_$_t_address_$_t_contract$_IERC20_$40109_$_t_uint256_$returns$_t_uint256_$_t_uint256_$","typeString":"function (struct PoolData memory,uint256,address,contract IERC20,uint256) returns (uint256,uint256)"}},"id":37957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22140:92:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"functionReturnParameters":37950,"id":37958,"nodeType":"Return","src":"22133:99:94"}]},"functionSelector":"be6b4d2a","id":37960,"implemented":true,"kind":"function","modifiers":[],"name":"manualComputeAndChargeAggregateSwapFees","nameLocation":"21848:39:94","nodeType":"FunctionDefinition","parameters":{"id":37945,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37935,"mutability":"mutable","name":"poolData","nameLocation":"21913:8:94","nodeType":"VariableDeclaration","scope":37960,"src":"21897:24:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":37934,"nodeType":"UserDefinedTypeName","pathNode":{"id":37933,"name":"PoolData","nameLocations":["21897:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"21897:8:94"},"referencedDeclaration":4729,"src":"21897:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":37937,"mutability":"mutable","name":"totalSwapFeeAmountScaled18","nameLocation":"21939:26:94","nodeType":"VariableDeclaration","scope":37960,"src":"21931:34:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37936,"name":"uint256","nodeType":"ElementaryTypeName","src":"21931:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":37939,"mutability":"mutable","name":"pool","nameLocation":"21983:4:94","nodeType":"VariableDeclaration","scope":37960,"src":"21975:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37938,"name":"address","nodeType":"ElementaryTypeName","src":"21975:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37942,"mutability":"mutable","name":"token","nameLocation":"22004:5:94","nodeType":"VariableDeclaration","scope":37960,"src":"21997:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":37941,"nodeType":"UserDefinedTypeName","pathNode":{"id":37940,"name":"IERC20","nameLocations":["21997:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"21997:6:94"},"referencedDeclaration":40109,"src":"21997:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":37944,"mutability":"mutable","name":"index","nameLocation":"22027:5:94","nodeType":"VariableDeclaration","scope":37960,"src":"22019:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37943,"name":"uint256","nodeType":"ElementaryTypeName","src":"22019:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"21887:151:94"},"returnParameters":{"id":37950,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37947,"mutability":"mutable","name":"totalSwapFeeAmountRaw","nameLocation":"22065:21:94","nodeType":"VariableDeclaration","scope":37960,"src":"22057:29:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37946,"name":"uint256","nodeType":"ElementaryTypeName","src":"22057:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":37949,"mutability":"mutable","name":"aggregateSwapFeeAmountRaw","nameLocation":"22096:25:94","nodeType":"VariableDeclaration","scope":37960,"src":"22088:33:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":37948,"name":"uint256","nodeType":"ElementaryTypeName","src":"22088:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"22056:66:94"},"scope":38836,"src":"21839:400:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1072],"body":{"id":37985,"nodeType":"Block","src":"22433:119:94","statements":[{"expression":{"arguments":[{"baseExpression":{"id":37977,"name":"_poolTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28256,"src":"22475:18:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_bytes32_$_$","typeString":"mapping(address => mapping(uint256 => bytes32))"}},"id":37979,"indexExpression":{"id":37978,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37962,"src":"22494:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"22475:24:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"}},{"id":37980,"name":"roundingDirection","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37968,"src":"22501:17:94","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_mapping$_t_uint256_$_t_bytes32_$","typeString":"mapping(uint256 => bytes32)"},{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}],"expression":{"id":37974,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37965,"src":"22443:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":37976,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22452:22:94","memberName":"reloadBalancesAndRates","nodeType":"MemberAccess","referencedDeclaration":30871,"src":"22443:31:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PoolData_$4729_memory_ptr_$_t_mapping$_t_uint256_$_t_bytes32_$_$_t_enum$_Rounding_$4732_$returns$__$attached_to$_t_struct$_PoolData_$4729_memory_ptr_$","typeString":"function (struct PoolData memory,mapping(uint256 => bytes32),enum Rounding) view"}},"id":37981,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22443:76:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":37982,"nodeType":"ExpressionStatement","src":"22443:76:94"},{"expression":{"id":37983,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37965,"src":"22537:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"functionReturnParameters":37973,"id":37984,"nodeType":"Return","src":"22530:15:94"}]},"functionSelector":"d86c3fef","id":37986,"implemented":true,"kind":"function","modifiers":[],"name":"manualUpdatePoolDataLiveBalancesAndRates","nameLocation":"22254:40:94","nodeType":"FunctionDefinition","parameters":{"id":37969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37962,"mutability":"mutable","name":"pool","nameLocation":"22312:4:94","nodeType":"VariableDeclaration","scope":37986,"src":"22304:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":37961,"name":"address","nodeType":"ElementaryTypeName","src":"22304:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":37965,"mutability":"mutable","name":"poolData","nameLocation":"22342:8:94","nodeType":"VariableDeclaration","scope":37986,"src":"22326:24:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":37964,"nodeType":"UserDefinedTypeName","pathNode":{"id":37963,"name":"PoolData","nameLocations":["22326:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"22326:8:94"},"referencedDeclaration":4729,"src":"22326:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":37968,"mutability":"mutable","name":"roundingDirection","nameLocation":"22369:17:94","nodeType":"VariableDeclaration","scope":37986,"src":"22360:26:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"},"typeName":{"id":37967,"nodeType":"UserDefinedTypeName","pathNode":{"id":37966,"name":"Rounding","nameLocations":["22360:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":4732,"src":"22360:8:94"},"referencedDeclaration":4732,"src":"22360:8:94","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"visibility":"internal"}],"src":"22294:98:94"},"returnParameters":{"id":37973,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37972,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":37986,"src":"22416:15:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":37971,"nodeType":"UserDefinedTypeName","pathNode":{"id":37970,"name":"PoolData","nameLocations":["22416:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"22416:8:94"},"referencedDeclaration":4729,"src":"22416:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"22415:17:94"},"scope":38836,"src":"22245:307:94","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1097],"body":{"id":38048,"nodeType":"Block","src":"22970:384:94","statements":[{"assignments":[38012],"declarations":[{"constant":false,"id":38012,"mutability":"mutable","name":"paramsHashBefore","nameLocation":"22988:16:94","nodeType":"VariableDeclaration","scope":38048,"src":"22980:24:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":38011,"name":"bytes32","nodeType":"ElementaryTypeName","src":"22980:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":38019,"initialValue":{"arguments":[{"arguments":[{"id":38016,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37992,"src":"23028:6:94","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}],"expression":{"id":38014,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"23017:3:94","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":38015,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"23021:6:94","memberName":"encode","nodeType":"MemberAccess","src":"23017:10:94","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":38017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23017:18:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":38013,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"23007:9:94","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":38018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23007:29:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"22980:56:94"},{"expression":{"id":38030,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":38020,"name":"amountsInRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38002,"src":"23048:12:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":38021,"name":"amountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38005,"src":"23062:17:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":38022,"name":"bptAmountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38007,"src":"23081:12:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":38023,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38009,"src":"23095:10:94","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":38024,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"23047:59:94","typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256[] memory,uint256,bytes memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":38026,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37989,"src":"23136:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},{"id":38027,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37992,"src":"23158:6:94","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},{"id":38028,"name":"maxAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37995,"src":"23178:20:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":38025,"name":"_addLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21046,"src":"23109:13:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PoolData_$4729_memory_ptr_$_t_struct$_AddLiquidityParams_$4823_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"function (struct PoolData memory,struct AddLiquidityParams memory,uint256[] memory) returns (uint256[] memory,uint256[] memory,uint256,bytes memory)"}},"id":38029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23109:99:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256[] memory,uint256,bytes memory)"}},"src":"23047:161:94","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38031,"nodeType":"ExpressionStatement","src":"23047:161:94"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":38040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38033,"name":"paramsHashBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38012,"src":"23227:16:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"arguments":[{"id":38037,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37992,"src":"23268:6:94","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}],"expression":{"id":38035,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"23257:3:94","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":38036,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"23261:6:94","memberName":"encode","nodeType":"MemberAccess","src":"23257:10:94","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":38038,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23257:18:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":38034,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"23247:9:94","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":38039,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23247:29:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"23227:49:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e70757420706172616d65746572732068617665206368616e676564","id":38041,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"23278:31:94","typeDescriptions":{"typeIdentifier":"t_stringliteral_14ed3a0ca3a8e39a28d1d4fd38750bd93b173beb93bbefce0e587c4b758fd3eb","typeString":"literal_string \"Input parameters have changed\""},"value":"Input parameters have changed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_14ed3a0ca3a8e39a28d1d4fd38750bd93b173beb93bbefce0e587c4b758fd3eb","typeString":"literal_string \"Input parameters have changed\""}],"id":38032,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"23219:7:94","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":38042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23219:91:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38043,"nodeType":"ExpressionStatement","src":"23219:91:94"},{"expression":{"id":38046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":38044,"name":"updatedPoolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37999,"src":"23321:15:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":38045,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37989,"src":"23339:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"src":"23321:26:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":38047,"nodeType":"ExpressionStatement","src":"23321:26:94"}]},"functionSelector":"0790de46","id":38049,"implemented":true,"kind":"function","modifiers":[],"name":"manualAddLiquidity","nameLocation":"22567:18:94","nodeType":"FunctionDefinition","parameters":{"id":37996,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37989,"mutability":"mutable","name":"poolData","nameLocation":"22611:8:94","nodeType":"VariableDeclaration","scope":38049,"src":"22595:24:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":37988,"nodeType":"UserDefinedTypeName","pathNode":{"id":37987,"name":"PoolData","nameLocations":["22595:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"22595:8:94"},"referencedDeclaration":4729,"src":"22595:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":37992,"mutability":"mutable","name":"params","nameLocation":"22655:6:94","nodeType":"VariableDeclaration","scope":38049,"src":"22629:32:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams"},"typeName":{"id":37991,"nodeType":"UserDefinedTypeName","pathNode":{"id":37990,"name":"AddLiquidityParams","nameLocations":["22629:18:94"],"nodeType":"IdentifierPath","referencedDeclaration":4823,"src":"22629:18:94"},"referencedDeclaration":4823,"src":"22629:18:94","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_storage_ptr","typeString":"struct AddLiquidityParams"}},"visibility":"internal"},{"constant":false,"id":37995,"mutability":"mutable","name":"maxAmountsInScaled18","nameLocation":"22688:20:94","nodeType":"VariableDeclaration","scope":38049,"src":"22671:37:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":37993,"name":"uint256","nodeType":"ElementaryTypeName","src":"22671:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":37994,"nodeType":"ArrayTypeName","src":"22671:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"22585:129:94"},"returnParameters":{"id":38010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":37999,"mutability":"mutable","name":"updatedPoolData","nameLocation":"22778:15:94","nodeType":"VariableDeclaration","scope":38049,"src":"22762:31:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":37998,"nodeType":"UserDefinedTypeName","pathNode":{"id":37997,"name":"PoolData","nameLocations":["22762:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"22762:8:94"},"referencedDeclaration":4729,"src":"22762:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":38002,"mutability":"mutable","name":"amountsInRaw","nameLocation":"22824:12:94","nodeType":"VariableDeclaration","scope":38049,"src":"22807:29:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":38000,"name":"uint256","nodeType":"ElementaryTypeName","src":"22807:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38001,"nodeType":"ArrayTypeName","src":"22807:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":38005,"mutability":"mutable","name":"amountsInScaled18","nameLocation":"22867:17:94","nodeType":"VariableDeclaration","scope":38049,"src":"22850:34:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":38003,"name":"uint256","nodeType":"ElementaryTypeName","src":"22850:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38004,"nodeType":"ArrayTypeName","src":"22850:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":38007,"mutability":"mutable","name":"bptAmountOut","nameLocation":"22906:12:94","nodeType":"VariableDeclaration","scope":38049,"src":"22898:20:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38006,"name":"uint256","nodeType":"ElementaryTypeName","src":"22898:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":38009,"mutability":"mutable","name":"returnData","nameLocation":"22945:10:94","nodeType":"VariableDeclaration","scope":38049,"src":"22932:23:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":38008,"name":"bytes","nodeType":"ElementaryTypeName","src":"22932:5:94","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"22748:217:94"},"scope":38836,"src":"22558:796:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1109],"body":{"id":38069,"nodeType":"Block","src":"23549:70:94","statements":[{"expression":{"arguments":[{"id":38064,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38052,"src":"23573:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},{"id":38065,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38055,"src":"23583:6:94","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"}},{"id":38066,"name":"maxAmountsInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38058,"src":"23591:20:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":38063,"name":"_addLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21046,"src":"23559:13:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PoolData_$4729_memory_ptr_$_t_struct$_AddLiquidityParams_$4823_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"function (struct PoolData memory,struct AddLiquidityParams memory,uint256[] memory) returns (uint256[] memory,uint256[] memory,uint256,bytes memory)"}},"id":38067,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23559:53:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_uint256_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256[] memory,uint256,bytes memory)"}},"id":38068,"nodeType":"ExpressionStatement","src":"23559:53:94"}]},"functionSelector":"eeda9991","id":38070,"implemented":true,"kind":"function","modifiers":[{"id":38061,"kind":"modifierInvocation","modifierName":{"id":38060,"name":"nonReentrant","nameLocations":["23536:12:94"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"23536:12:94"},"nodeType":"ModifierInvocation","src":"23536:12:94"}],"name":"manualReentrancyAddLiquidity","nameLocation":"23369:28:94","nodeType":"FunctionDefinition","parameters":{"id":38059,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38052,"mutability":"mutable","name":"poolData","nameLocation":"23423:8:94","nodeType":"VariableDeclaration","scope":38070,"src":"23407:24:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":38051,"nodeType":"UserDefinedTypeName","pathNode":{"id":38050,"name":"PoolData","nameLocations":["23407:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"23407:8:94"},"referencedDeclaration":4729,"src":"23407:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":38055,"mutability":"mutable","name":"params","nameLocation":"23467:6:94","nodeType":"VariableDeclaration","scope":38070,"src":"23441:32:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_memory_ptr","typeString":"struct AddLiquidityParams"},"typeName":{"id":38054,"nodeType":"UserDefinedTypeName","pathNode":{"id":38053,"name":"AddLiquidityParams","nameLocations":["23441:18:94"],"nodeType":"IdentifierPath","referencedDeclaration":4823,"src":"23441:18:94"},"referencedDeclaration":4823,"src":"23441:18:94","typeDescriptions":{"typeIdentifier":"t_struct$_AddLiquidityParams_$4823_storage_ptr","typeString":"struct AddLiquidityParams"}},"visibility":"internal"},{"constant":false,"id":38058,"mutability":"mutable","name":"maxAmountsInScaled18","nameLocation":"23500:20:94","nodeType":"VariableDeclaration","scope":38070,"src":"23483:37:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":38056,"name":"uint256","nodeType":"ElementaryTypeName","src":"23483:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38057,"nodeType":"ArrayTypeName","src":"23483:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"23397:129:94"},"returnParameters":{"id":38062,"nodeType":"ParameterList","parameters":[],"src":"23549:0:94"},"scope":38836,"src":"23360:259:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1140],"body":{"id":38132,"nodeType":"Block","src":"24045:389:94","statements":[{"assignments":[38096],"declarations":[{"constant":false,"id":38096,"mutability":"mutable","name":"paramsHashBefore","nameLocation":"24063:16:94","nodeType":"VariableDeclaration","scope":38132,"src":"24055:24:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":38095,"name":"bytes32","nodeType":"ElementaryTypeName","src":"24055:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":38103,"initialValue":{"arguments":[{"arguments":[{"id":38100,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38076,"src":"24103:6:94","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}],"expression":{"id":38098,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"24092:3:94","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":38099,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"24096:6:94","memberName":"encode","nodeType":"MemberAccess","src":"24092:10:94","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":38101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24092:18:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":38097,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"24082:9:94","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":38102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24082:29:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"24055:56:94"},{"expression":{"id":38114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":38104,"name":"bptAmountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38085,"src":"24123:11:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":38105,"name":"amountsOutRaw","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38088,"src":"24136:13:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":38106,"name":"amountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38091,"src":"24151:18:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":38107,"name":"returnData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38093,"src":"24171:10:94","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":38108,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"24122:60:94","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory,uint256[] memory,bytes memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":38110,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38073,"src":"24215:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},{"id":38111,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38076,"src":"24237:6:94","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},{"id":38112,"name":"minAmountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38079,"src":"24257:21:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":38109,"name":"_removeLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21702,"src":"24185:16:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PoolData_$4729_memory_ptr_$_t_struct$_RemoveLiquidityParams_$4844_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function (struct PoolData memory,struct RemoveLiquidityParams memory,uint256[] memory) returns (uint256,uint256[] memory,uint256[] memory,bytes memory)"}},"id":38113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24185:103:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory,uint256[] memory,bytes memory)"}},"src":"24122:166:94","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38115,"nodeType":"ExpressionStatement","src":"24122:166:94"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":38124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38117,"name":"paramsHashBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38096,"src":"24307:16:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"arguments":[{"id":38121,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38076,"src":"24348:6:94","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}],"expression":{"id":38119,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"24337:3:94","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":38120,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"24341:6:94","memberName":"encode","nodeType":"MemberAccess","src":"24337:10:94","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":38122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24337:18:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":38118,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"24327:9:94","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":38123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24327:29:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"24307:49:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e70757420706172616d65746572732068617665206368616e676564","id":38125,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"24358:31:94","typeDescriptions":{"typeIdentifier":"t_stringliteral_14ed3a0ca3a8e39a28d1d4fd38750bd93b173beb93bbefce0e587c4b758fd3eb","typeString":"literal_string \"Input parameters have changed\""},"value":"Input parameters have changed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_14ed3a0ca3a8e39a28d1d4fd38750bd93b173beb93bbefce0e587c4b758fd3eb","typeString":"literal_string \"Input parameters have changed\""}],"id":38116,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"24299:7:94","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":38126,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24299:91:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38127,"nodeType":"ExpressionStatement","src":"24299:91:94"},{"expression":{"id":38130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":38128,"name":"updatedPoolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38083,"src":"24401:15:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":38129,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38073,"src":"24419:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"src":"24401:26:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},"id":38131,"nodeType":"ExpressionStatement","src":"24401:26:94"}]},"functionSelector":"f1320097","id":38133,"implemented":true,"kind":"function","modifiers":[],"name":"manualRemoveLiquidity","nameLocation":"23634:21:94","nodeType":"FunctionDefinition","parameters":{"id":38080,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38073,"mutability":"mutable","name":"poolData","nameLocation":"23681:8:94","nodeType":"VariableDeclaration","scope":38133,"src":"23665:24:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":38072,"nodeType":"UserDefinedTypeName","pathNode":{"id":38071,"name":"PoolData","nameLocations":["23665:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"23665:8:94"},"referencedDeclaration":4729,"src":"23665:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":38076,"mutability":"mutable","name":"params","nameLocation":"23728:6:94","nodeType":"VariableDeclaration","scope":38133,"src":"23699:35:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams"},"typeName":{"id":38075,"nodeType":"UserDefinedTypeName","pathNode":{"id":38074,"name":"RemoveLiquidityParams","nameLocations":["23699:21:94"],"nodeType":"IdentifierPath","referencedDeclaration":4844,"src":"23699:21:94"},"referencedDeclaration":4844,"src":"23699:21:94","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_storage_ptr","typeString":"struct RemoveLiquidityParams"}},"visibility":"internal"},{"constant":false,"id":38079,"mutability":"mutable","name":"minAmountsOutScaled18","nameLocation":"23761:21:94","nodeType":"VariableDeclaration","scope":38133,"src":"23744:38:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":38077,"name":"uint256","nodeType":"ElementaryTypeName","src":"23744:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38078,"nodeType":"ArrayTypeName","src":"23744:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"23655:133:94"},"returnParameters":{"id":38094,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38083,"mutability":"mutable","name":"updatedPoolData","nameLocation":"23852:15:94","nodeType":"VariableDeclaration","scope":38133,"src":"23836:31:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":38082,"nodeType":"UserDefinedTypeName","pathNode":{"id":38081,"name":"PoolData","nameLocations":["23836:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"23836:8:94"},"referencedDeclaration":4729,"src":"23836:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":38085,"mutability":"mutable","name":"bptAmountIn","nameLocation":"23889:11:94","nodeType":"VariableDeclaration","scope":38133,"src":"23881:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38084,"name":"uint256","nodeType":"ElementaryTypeName","src":"23881:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":38088,"mutability":"mutable","name":"amountsOutRaw","nameLocation":"23931:13:94","nodeType":"VariableDeclaration","scope":38133,"src":"23914:30:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":38086,"name":"uint256","nodeType":"ElementaryTypeName","src":"23914:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38087,"nodeType":"ArrayTypeName","src":"23914:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":38091,"mutability":"mutable","name":"amountsOutScaled18","nameLocation":"23975:18:94","nodeType":"VariableDeclaration","scope":38133,"src":"23958:35:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":38089,"name":"uint256","nodeType":"ElementaryTypeName","src":"23958:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38090,"nodeType":"ArrayTypeName","src":"23958:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":38093,"mutability":"mutable","name":"returnData","nameLocation":"24020:10:94","nodeType":"VariableDeclaration","scope":38133,"src":"24007:23:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":38092,"name":"bytes","nodeType":"ElementaryTypeName","src":"24007:5:94","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"23822:218:94"},"scope":38836,"src":"23625:809:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1152],"body":{"id":38153,"nodeType":"Block","src":"24636:74:94","statements":[{"expression":{"arguments":[{"id":38148,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38136,"src":"24663:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},{"id":38149,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38139,"src":"24673:6:94","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"}},{"id":38150,"name":"minAmountsOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38142,"src":"24681:21:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":38147,"name":"_removeLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":21702,"src":"24646:16:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_PoolData_$4729_memory_ptr_$_t_struct$_RemoveLiquidityParams_$4844_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"function (struct PoolData memory,struct RemoveLiquidityParams memory,uint256[] memory) returns (uint256,uint256[] memory,uint256[] memory,bytes memory)"}},"id":38151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24646:57:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_bytes_memory_ptr_$","typeString":"tuple(uint256,uint256[] memory,uint256[] memory,bytes memory)"}},"id":38152,"nodeType":"ExpressionStatement","src":"24646:57:94"}]},"functionSelector":"28121e27","id":38154,"implemented":true,"kind":"function","modifiers":[{"id":38145,"kind":"modifierInvocation","modifierName":{"id":38144,"name":"nonReentrant","nameLocations":["24623:12:94"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"24623:12:94"},"nodeType":"ModifierInvocation","src":"24623:12:94"}],"name":"manualReentrancyRemoveLiquidity","nameLocation":"24449:31:94","nodeType":"FunctionDefinition","parameters":{"id":38143,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38136,"mutability":"mutable","name":"poolData","nameLocation":"24506:8:94","nodeType":"VariableDeclaration","scope":38154,"src":"24490:24:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":38135,"nodeType":"UserDefinedTypeName","pathNode":{"id":38134,"name":"PoolData","nameLocations":["24490:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"24490:8:94"},"referencedDeclaration":4729,"src":"24490:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":38139,"mutability":"mutable","name":"params","nameLocation":"24553:6:94","nodeType":"VariableDeclaration","scope":38154,"src":"24524:35:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_memory_ptr","typeString":"struct RemoveLiquidityParams"},"typeName":{"id":38138,"nodeType":"UserDefinedTypeName","pathNode":{"id":38137,"name":"RemoveLiquidityParams","nameLocations":["24524:21:94"],"nodeType":"IdentifierPath","referencedDeclaration":4844,"src":"24524:21:94"},"referencedDeclaration":4844,"src":"24524:21:94","typeDescriptions":{"typeIdentifier":"t_struct$_RemoveLiquidityParams_$4844_storage_ptr","typeString":"struct RemoveLiquidityParams"}},"visibility":"internal"},{"constant":false,"id":38142,"mutability":"mutable","name":"minAmountsOutScaled18","nameLocation":"24586:21:94","nodeType":"VariableDeclaration","scope":38154,"src":"24569:38:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":38140,"name":"uint256","nodeType":"ElementaryTypeName","src":"24569:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38141,"nodeType":"ArrayTypeName","src":"24569:9:94","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"24480:133:94"},"returnParameters":{"id":38146,"nodeType":"ParameterList","parameters":[],"src":"24636:0:94"},"scope":38836,"src":"24440:270:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[713],"body":{"id":38173,"nodeType":"Block","src":"24816:148:94","statements":[{"assignments":[38163],"declarations":[{"constant":false,"id":38163,"mutability":"mutable","name":"bufferBalance","nameLocation":"24834:13:94","nodeType":"VariableDeclaration","scope":38173,"src":"24826:21:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":38162,"name":"bytes32","nodeType":"ElementaryTypeName","src":"24826:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":38167,"initialValue":{"baseExpression":{"id":38164,"name":"_bufferTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28292,"src":"24850:20:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_bytes32_$","typeString":"mapping(contract IERC4626 => bytes32)"}},"id":38166,"indexExpression":{"id":38165,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38157,"src":"24871:12:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24850:34:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"24826:58:94"},{"expression":{"arguments":[{"id":38170,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38157,"src":"24944:12:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}],"expression":{"id":38168,"name":"bufferBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38163,"src":"24901:13:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":38169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24915:28:94","memberName":"getBufferUnderlyingImbalance","nodeType":"MemberAccess","referencedDeclaration":5560,"src":"24901:42:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_contract$_IERC4626_$39833_$returns$_t_int256_$attached_to$_t_bytes32_$","typeString":"function (bytes32,contract IERC4626) view returns (int256)"}},"id":38171,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24901:56:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":38161,"id":38172,"nodeType":"Return","src":"24894:63:94"}]},"functionSelector":"2606a4de","id":38174,"implemented":true,"kind":"function","modifiers":[],"name":"internalGetBufferUnderlyingImbalance","nameLocation":"24725:36:94","nodeType":"FunctionDefinition","parameters":{"id":38158,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38157,"mutability":"mutable","name":"wrappedToken","nameLocation":"24771:12:94","nodeType":"VariableDeclaration","scope":38174,"src":"24762:21:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":38156,"nodeType":"UserDefinedTypeName","pathNode":{"id":38155,"name":"IERC4626","nameLocations":["24762:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"24762:8:94"},"referencedDeclaration":39833,"src":"24762:8:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"24761:23:94"},"returnParameters":{"id":38161,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38160,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":38174,"src":"24808:6:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":38159,"name":"int256","nodeType":"ElementaryTypeName","src":"24808:6:94","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"24807:8:94"},"scope":38836,"src":"24716:248:94","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[721],"body":{"id":38193,"nodeType":"Block","src":"25067:145:94","statements":[{"assignments":[38183],"declarations":[{"constant":false,"id":38183,"mutability":"mutable","name":"bufferBalance","nameLocation":"25085:13:94","nodeType":"VariableDeclaration","scope":38193,"src":"25077:21:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":38182,"name":"bytes32","nodeType":"ElementaryTypeName","src":"25077:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":38187,"initialValue":{"baseExpression":{"id":38184,"name":"_bufferTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28292,"src":"25101:20:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_bytes32_$","typeString":"mapping(contract IERC4626 => bytes32)"}},"id":38186,"indexExpression":{"id":38185,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38177,"src":"25122:12:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25101:34:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"25077:58:94"},{"expression":{"arguments":[{"id":38190,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38177,"src":"25192:12:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}],"expression":{"id":38188,"name":"bufferBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38183,"src":"25152:13:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":38189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25166:25:94","memberName":"getBufferWrappedImbalance","nodeType":"MemberAccess","referencedDeclaration":5609,"src":"25152:39:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_contract$_IERC4626_$39833_$returns$_t_int256_$attached_to$_t_bytes32_$","typeString":"function (bytes32,contract IERC4626) view returns (int256)"}},"id":38191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25152:53:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":38181,"id":38192,"nodeType":"Return","src":"25145:60:94"}]},"functionSelector":"a40f9592","id":38194,"implemented":true,"kind":"function","modifiers":[],"name":"internalGetBufferWrappedImbalance","nameLocation":"24979:33:94","nodeType":"FunctionDefinition","parameters":{"id":38178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38177,"mutability":"mutable","name":"wrappedToken","nameLocation":"25022:12:94","nodeType":"VariableDeclaration","scope":38194,"src":"25013:21:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":38176,"nodeType":"UserDefinedTypeName","pathNode":{"id":38175,"name":"IERC4626","nameLocations":["25013:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"25013:8:94"},"referencedDeclaration":39833,"src":"25013:8:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"25012:23:94"},"returnParameters":{"id":38181,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38180,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":38194,"src":"25059:6:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":38179,"name":"int256","nodeType":"ElementaryTypeName","src":"25059:6:94","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"25058:8:94"},"scope":38836,"src":"24970:242:94","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[729],"body":{"id":38206,"nodeType":"Block","src":"25310:58:94","statements":[{"expression":{"baseExpression":{"id":38202,"name":"_bufferTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28292,"src":"25327:20:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_bytes32_$","typeString":"mapping(contract IERC4626 => bytes32)"}},"id":38204,"indexExpression":{"id":38203,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38197,"src":"25348:12:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"25327:34:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":38201,"id":38205,"nodeType":"Return","src":"25320:41:94"}]},"functionSelector":"e5b08ffb","id":38207,"implemented":true,"kind":"function","modifiers":[],"name":"getBufferTokenBalancesBytes","nameLocation":"25227:27:94","nodeType":"FunctionDefinition","parameters":{"id":38198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38197,"mutability":"mutable","name":"wrappedToken","nameLocation":"25264:12:94","nodeType":"VariableDeclaration","scope":38207,"src":"25255:21:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":38196,"nodeType":"UserDefinedTypeName","pathNode":{"id":38195,"name":"IERC4626","nameLocations":["25255:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"25255:8:94"},"referencedDeclaration":39833,"src":"25255:8:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"}],"src":"25254:23:94"},"returnParameters":{"id":38201,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38200,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":38207,"src":"25301:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":38199,"name":"bytes32","nodeType":"ElementaryTypeName","src":"25301:7:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"25300:9:94"},"scope":38836,"src":"25218:150:94","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1165],"body":{"id":38227,"nodeType":"Block","src":"25537:88:94","statements":[{"expression":{"arguments":[{"id":38221,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38210,"src":"25559:15:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":38222,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38213,"src":"25576:12:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":38223,"name":"underlyingHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38215,"src":"25590:14:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":38224,"name":"wrappedHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38217,"src":"25606:11:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":38220,"name":"_settleWrap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22602,"src":"25547:11:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_contract$_IERC20_$40109_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,contract IERC20,uint256,uint256)"}},"id":38225,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25547:71:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38226,"nodeType":"ExpressionStatement","src":"25547:71:94"}]},"functionSelector":"ac004855","id":38228,"implemented":true,"kind":"function","modifiers":[],"name":"manualSettleWrap","nameLocation":"25383:16:94","nodeType":"FunctionDefinition","parameters":{"id":38218,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38210,"mutability":"mutable","name":"underlyingToken","nameLocation":"25416:15:94","nodeType":"VariableDeclaration","scope":38228,"src":"25409:22:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":38209,"nodeType":"UserDefinedTypeName","pathNode":{"id":38208,"name":"IERC20","nameLocations":["25409:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"25409:6:94"},"referencedDeclaration":40109,"src":"25409:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":38213,"mutability":"mutable","name":"wrappedToken","nameLocation":"25448:12:94","nodeType":"VariableDeclaration","scope":38228,"src":"25441:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":38212,"nodeType":"UserDefinedTypeName","pathNode":{"id":38211,"name":"IERC20","nameLocations":["25441:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"25441:6:94"},"referencedDeclaration":40109,"src":"25441:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":38215,"mutability":"mutable","name":"underlyingHint","nameLocation":"25478:14:94","nodeType":"VariableDeclaration","scope":38228,"src":"25470:22:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38214,"name":"uint256","nodeType":"ElementaryTypeName","src":"25470:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":38217,"mutability":"mutable","name":"wrappedHint","nameLocation":"25510:11:94","nodeType":"VariableDeclaration","scope":38228,"src":"25502:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38216,"name":"uint256","nodeType":"ElementaryTypeName","src":"25502:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25399:128:94"},"returnParameters":{"id":38219,"nodeType":"ParameterList","parameters":[],"src":"25537:0:94"},"scope":38836,"src":"25374:251:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1178],"body":{"id":38248,"nodeType":"Block","src":"25796:90:94","statements":[{"expression":{"arguments":[{"id":38242,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38231,"src":"25820:15:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":38243,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38234,"src":"25837:12:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":38244,"name":"underlyingHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38236,"src":"25851:14:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":38245,"name":"wrappedHint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38238,"src":"25867:11:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":38241,"name":"_settleUnwrap","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22640,"src":"25806:13:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_contract$_IERC20_$40109_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,contract IERC20,uint256,uint256)"}},"id":38246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25806:73:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38247,"nodeType":"ExpressionStatement","src":"25806:73:94"}]},"functionSelector":"b6f680f4","id":38249,"implemented":true,"kind":"function","modifiers":[],"name":"manualSettleUnwrap","nameLocation":"25640:18:94","nodeType":"FunctionDefinition","parameters":{"id":38239,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38231,"mutability":"mutable","name":"underlyingToken","nameLocation":"25675:15:94","nodeType":"VariableDeclaration","scope":38249,"src":"25668:22:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":38230,"nodeType":"UserDefinedTypeName","pathNode":{"id":38229,"name":"IERC20","nameLocations":["25668:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"25668:6:94"},"referencedDeclaration":40109,"src":"25668:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":38234,"mutability":"mutable","name":"wrappedToken","nameLocation":"25707:12:94","nodeType":"VariableDeclaration","scope":38249,"src":"25700:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":38233,"nodeType":"UserDefinedTypeName","pathNode":{"id":38232,"name":"IERC20","nameLocations":["25700:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"25700:6:94"},"referencedDeclaration":40109,"src":"25700:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":38236,"mutability":"mutable","name":"underlyingHint","nameLocation":"25737:14:94","nodeType":"VariableDeclaration","scope":38249,"src":"25729:22:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38235,"name":"uint256","nodeType":"ElementaryTypeName","src":"25729:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":38238,"mutability":"mutable","name":"wrappedHint","nameLocation":"25769:11:94","nodeType":"VariableDeclaration","scope":38249,"src":"25761:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38237,"name":"uint256","nodeType":"ElementaryTypeName","src":"25761:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25658:128:94"},"returnParameters":{"id":38240,"nodeType":"ParameterList","parameters":[],"src":"25796:0:94"},"scope":38836,"src":"25631:255:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1188],"body":{"id":38266,"nodeType":"Block","src":"25967:43:94","statements":[{"expression":{"arguments":[{"id":38262,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38254,"src":"25992:2:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":38263,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38256,"src":"25996:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":38259,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38252,"src":"25977:5:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":38261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25983:8:94","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":40076,"src":"25977:14:94","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":38264,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25977:26:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38265,"nodeType":"ExpressionStatement","src":"25977:26:94"}]},"functionSelector":"00d7aadb","id":38267,"implemented":true,"kind":"function","modifiers":[],"name":"manualTransfer","nameLocation":"25901:14:94","nodeType":"FunctionDefinition","parameters":{"id":38257,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38252,"mutability":"mutable","name":"token","nameLocation":"25923:5:94","nodeType":"VariableDeclaration","scope":38267,"src":"25916:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":38251,"nodeType":"UserDefinedTypeName","pathNode":{"id":38250,"name":"IERC20","nameLocations":["25916:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"25916:6:94"},"referencedDeclaration":40109,"src":"25916:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":38254,"mutability":"mutable","name":"to","nameLocation":"25938:2:94","nodeType":"VariableDeclaration","scope":38267,"src":"25930:10:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38253,"name":"address","nodeType":"ElementaryTypeName","src":"25930:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38256,"mutability":"mutable","name":"amount","nameLocation":"25950:6:94","nodeType":"VariableDeclaration","scope":38267,"src":"25942:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38255,"name":"uint256","nodeType":"ElementaryTypeName","src":"25942:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"25915:42:94"},"returnParameters":{"id":38258,"nodeType":"ParameterList","parameters":[],"src":"25967:0:94"},"scope":38836,"src":"25892:118:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1112],"body":{"id":38276,"nodeType":"Block","src":"26046:43:94","statements":[{"expression":{"arguments":[{"hexValue":"74727565","id":38273,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"26077:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":38270,"name":"_isUnlocked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28320,"src":"26056:11:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function () view returns (StorageSlotExtension.BooleanSlotType)"}},"id":38271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26056:13:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":38272,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26070:6:94","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":10218,"src":"26056:20:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$10108_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":38274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26056:26:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38275,"nodeType":"ExpressionStatement","src":"26056:26:94"}]},"functionSelector":"7965c967","id":38277,"implemented":true,"kind":"function","modifiers":[],"name":"forceUnlock","nameLocation":"26025:11:94","nodeType":"FunctionDefinition","parameters":{"id":38268,"nodeType":"ParameterList","parameters":[],"src":"26036:2:94"},"returnParameters":{"id":38269,"nodeType":"ParameterList","parameters":[],"src":"26046:0:94"},"scope":38836,"src":"26016:73:94","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[1115],"body":{"id":38286,"nodeType":"Block","src":"26123:44:94","statements":[{"expression":{"arguments":[{"hexValue":"66616c7365","id":38283,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"26154:5:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":38280,"name":"_isUnlocked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28320,"src":"26133:11:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function () view returns (StorageSlotExtension.BooleanSlotType)"}},"id":38281,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26133:13:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"}},"id":38282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26147:6:94","memberName":"tstore","nodeType":"MemberAccess","referencedDeclaration":10218,"src":"26133:20:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_BooleanSlotType_$10108_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function (StorageSlotExtension.BooleanSlotType,bool)"}},"id":38284,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26133:27:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38285,"nodeType":"ExpressionStatement","src":"26133:27:94"}]},"functionSelector":"6d4908c4","id":38287,"implemented":true,"kind":"function","modifiers":[],"name":"forceLock","nameLocation":"26104:9:94","nodeType":"FunctionDefinition","parameters":{"id":38278,"nodeType":"ParameterList","parameters":[],"src":"26113:2:94"},"returnParameters":{"id":38279,"nodeType":"ParameterList","parameters":[],"src":"26123:0:94"},"scope":38836,"src":"26095:72:94","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[1196],"body":{"id":38299,"nodeType":"Block","src":"26259:45:94","statements":[{"expression":{"baseExpression":{"id":38295,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"26276:15:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":38297,"indexExpression":{"id":38296,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38289,"src":"26292:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26276:21:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"functionReturnParameters":38294,"id":38298,"nodeType":"Return","src":"26269:28:94"}]},"functionSelector":"557dba68","id":38300,"implemented":true,"kind":"function","modifiers":[],"name":"manualGetPoolConfigBits","nameLocation":"26182:23:94","nodeType":"FunctionDefinition","parameters":{"id":38290,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38289,"mutability":"mutable","name":"pool","nameLocation":"26214:4:94","nodeType":"VariableDeclaration","scope":38300,"src":"26206:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38288,"name":"address","nodeType":"ElementaryTypeName","src":"26206:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"26205:14:94"},"returnParameters":{"id":38294,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38293,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":38300,"src":"26243:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":38292,"nodeType":"UserDefinedTypeName","pathNode":{"id":38291,"name":"PoolConfigBits","nameLocations":["26243:14:94"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"26243:14:94"},"referencedDeclaration":4582,"src":"26243:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"26242:16:94"},"scope":38836,"src":"26173:131:94","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":38309,"nodeType":"Block","src":"26407:37:94","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":38306,"name":"_isUnlocked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28320,"src":"26424:11:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_BooleanSlotType_$10108_$","typeString":"function () view returns (StorageSlotExtension.BooleanSlotType)"}},"id":38307,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26424:13:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"}},"functionReturnParameters":38305,"id":38308,"nodeType":"Return","src":"26417:20:94"}]},"functionSelector":"b2469499","id":38310,"implemented":true,"kind":"function","modifiers":[],"name":"manualGetIsUnlocked","nameLocation":"26319:19:94","nodeType":"FunctionDefinition","parameters":{"id":38301,"nodeType":"ParameterList","parameters":[],"src":"26338:2:94"},"returnParameters":{"id":38305,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38304,"mutability":"mutable","name":"slot","nameLocation":"26401:4:94","nodeType":"VariableDeclaration","scope":38310,"src":"26364:41:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"},"typeName":{"id":38303,"nodeType":"UserDefinedTypeName","pathNode":{"id":38302,"name":"StorageSlotExtension.BooleanSlotType","nameLocations":["26364:20:94","26385:15:94"],"nodeType":"IdentifierPath","referencedDeclaration":10108,"src":"26364:36:94"},"referencedDeclaration":10108,"src":"26364:36:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_BooleanSlotType_$10108","typeString":"StorageSlotExtension.BooleanSlotType"}},"visibility":"internal"}],"src":"26363:43:94"},"scope":38836,"src":"26310:134:94","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":38319,"nodeType":"Block","src":"26554:44:94","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":38316,"name":"_nonZeroDeltaCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28331,"src":"26571:18:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function () view returns (StorageSlotExtension.Uint256SlotType)"}},"id":38317,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26571:20:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"functionReturnParameters":38315,"id":38318,"nodeType":"Return","src":"26564:27:94"}]},"functionSelector":"155075e6","id":38320,"implemented":true,"kind":"function","modifiers":[],"name":"manualGetNonzeroDeltaCount","nameLocation":"26459:26:94","nodeType":"FunctionDefinition","parameters":{"id":38311,"nodeType":"ParameterList","parameters":[],"src":"26485:2:94"},"returnParameters":{"id":38315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38314,"mutability":"mutable","name":"slot","nameLocation":"26548:4:94","nodeType":"VariableDeclaration","scope":38320,"src":"26511:41:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"},"typeName":{"id":38313,"nodeType":"UserDefinedTypeName","pathNode":{"id":38312,"name":"StorageSlotExtension.Uint256SlotType","nameLocations":["26511:20:94","26532:15:94"],"nodeType":"IdentifierPath","referencedDeclaration":10142,"src":"26511:36:94"},"referencedDeclaration":10142,"src":"26511:36:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"visibility":"internal"}],"src":"26510:43:94"},"scope":38836,"src":"26450:148:94","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":38329,"nodeType":"Block","src":"26691:38:94","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":38326,"name":"_tokenDeltas","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28343,"src":"26708:12:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858_$","typeString":"function () view returns (TokenDeltaMappingSlotType)"}},"id":38327,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26708:14:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858","typeString":"TokenDeltaMappingSlotType"}},"functionReturnParameters":38325,"id":38328,"nodeType":"Return","src":"26701:21:94"}]},"functionSelector":"1f4475c5","id":38330,"implemented":true,"kind":"function","modifiers":[],"name":"manualGetTokenDeltas","nameLocation":"26613:20:94","nodeType":"FunctionDefinition","parameters":{"id":38321,"nodeType":"ParameterList","parameters":[],"src":"26633:2:94"},"returnParameters":{"id":38325,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38324,"mutability":"mutable","name":"slot","nameLocation":"26685:4:94","nodeType":"VariableDeclaration","scope":38330,"src":"26659:30:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858","typeString":"TokenDeltaMappingSlotType"},"typeName":{"id":38323,"nodeType":"UserDefinedTypeName","pathNode":{"id":38322,"name":"TokenDeltaMappingSlotType","nameLocations":["26659:25:94"],"nodeType":"IdentifierPath","referencedDeclaration":6858,"src":"26659:25:94"},"referencedDeclaration":6858,"src":"26659:25:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_TokenDeltaMappingSlotType_$6858","typeString":"TokenDeltaMappingSlotType"}},"visibility":"internal"}],"src":"26658:32:94"},"scope":38836,"src":"26604:125:94","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1216],"body":{"id":38344,"nodeType":"Block","src":"26822:62:94","statements":[{"expression":{"id":38342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":38338,"name":"_bufferAssets","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28309,"src":"26832:13:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_address_$","typeString":"mapping(contract IERC4626 => address)"}},"id":38340,"indexExpression":{"id":38339,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38333,"src":"26846:12:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26832:27:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":38341,"name":"underlyingToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38335,"src":"26862:15:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"26832:45:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":38343,"nodeType":"ExpressionStatement","src":"26832:45:94"}]},"functionSelector":"ab62c2b6","id":38345,"implemented":true,"kind":"function","modifiers":[],"name":"manualSetBufferAsset","nameLocation":"26744:20:94","nodeType":"FunctionDefinition","parameters":{"id":38336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38333,"mutability":"mutable","name":"wrappedToken","nameLocation":"26774:12:94","nodeType":"VariableDeclaration","scope":38345,"src":"26765:21:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":38332,"nodeType":"UserDefinedTypeName","pathNode":{"id":38331,"name":"IERC4626","nameLocations":["26765:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"26765:8:94"},"referencedDeclaration":39833,"src":"26765:8:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":38335,"mutability":"mutable","name":"underlyingToken","nameLocation":"26796:15:94","nodeType":"VariableDeclaration","scope":38345,"src":"26788:23:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38334,"name":"address","nodeType":"ElementaryTypeName","src":"26788:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"26764:48:94"},"returnParameters":{"id":38337,"nodeType":"ParameterList","parameters":[],"src":"26822:0:94"},"scope":38836,"src":"26735:149:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1226],"body":{"id":38363,"nodeType":"Block","src":"26989:62:94","statements":[{"expression":{"id":38361,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":38355,"name":"_bufferLpShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28299,"src":"26999:15:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(contract IERC4626 => mapping(address => uint256))"}},"id":38358,"indexExpression":{"id":38356,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38348,"src":"27015:12:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26999:29:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":38359,"indexExpression":{"id":38357,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38350,"src":"27029:5:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26999:36:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":38360,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38352,"src":"27038:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26999:45:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38362,"nodeType":"ExpressionStatement","src":"26999:45:94"}]},"functionSelector":"ff44deab","id":38364,"implemented":true,"kind":"function","modifiers":[],"name":"manualSetBufferOwnerShares","nameLocation":"26899:26:94","nodeType":"FunctionDefinition","parameters":{"id":38353,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38348,"mutability":"mutable","name":"wrappedToken","nameLocation":"26935:12:94","nodeType":"VariableDeclaration","scope":38364,"src":"26926:21:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":38347,"nodeType":"UserDefinedTypeName","pathNode":{"id":38346,"name":"IERC4626","nameLocations":["26926:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"26926:8:94"},"referencedDeclaration":39833,"src":"26926:8:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":38350,"mutability":"mutable","name":"owner","nameLocation":"26957:5:94","nodeType":"VariableDeclaration","scope":38364,"src":"26949:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38349,"name":"address","nodeType":"ElementaryTypeName","src":"26949:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38352,"mutability":"mutable","name":"shares","nameLocation":"26972:6:94","nodeType":"VariableDeclaration","scope":38364,"src":"26964:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38351,"name":"uint256","nodeType":"ElementaryTypeName","src":"26964:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26925:54:94"},"returnParameters":{"id":38354,"nodeType":"ParameterList","parameters":[],"src":"26989:0:94"},"scope":38836,"src":"26890:161:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1234],"body":{"id":38378,"nodeType":"Block","src":"27141:58:94","statements":[{"expression":{"id":38376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":38372,"name":"_bufferTotalShares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28304,"src":"27151:18:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_uint256_$","typeString":"mapping(contract IERC4626 => uint256)"}},"id":38374,"indexExpression":{"id":38373,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38367,"src":"27170:12:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"27151:32:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":38375,"name":"shares","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38369,"src":"27186:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27151:41:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38377,"nodeType":"ExpressionStatement","src":"27151:41:94"}]},"functionSelector":"3cb5b2af","id":38379,"implemented":true,"kind":"function","modifiers":[],"name":"manualSetBufferTotalShares","nameLocation":"27066:26:94","nodeType":"FunctionDefinition","parameters":{"id":38370,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38367,"mutability":"mutable","name":"wrappedToken","nameLocation":"27102:12:94","nodeType":"VariableDeclaration","scope":38379,"src":"27093:21:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":38366,"nodeType":"UserDefinedTypeName","pathNode":{"id":38365,"name":"IERC4626","nameLocations":["27093:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"27093:8:94"},"referencedDeclaration":39833,"src":"27093:8:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":38369,"mutability":"mutable","name":"shares","nameLocation":"27124:6:94","nodeType":"VariableDeclaration","scope":38379,"src":"27116:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38368,"name":"uint256","nodeType":"ElementaryTypeName","src":"27116:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27092:39:94"},"returnParameters":{"id":38371,"nodeType":"ParameterList","parameters":[],"src":"27141:0:94"},"scope":38836,"src":"27057:142:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1244],"body":{"id":38399,"nodeType":"Block","src":"27319:121:94","statements":[{"expression":{"id":38397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":38389,"name":"_bufferTokenBalances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28292,"src":"27329:20:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_contract$_IERC4626_$39833_$_t_bytes32_$","typeString":"mapping(contract IERC4626 => bytes32)"}},"id":38391,"indexExpression":{"id":38390,"name":"wrappedToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38382,"src":"27350:12:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"27329:34:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":38394,"name":"underlyingAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38384,"src":"27401:16:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":38395,"name":"wrappedAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38386,"src":"27419:13:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":38392,"name":"PackedTokenBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6344,"src":"27366:18:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PackedTokenBalance_$6344_$","typeString":"type(library PackedTokenBalance)"}},"id":38393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27385:15:94","memberName":"toPackedBalance","nodeType":"MemberAccess","referencedDeclaration":6303,"src":"27366:34:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256,uint256) pure returns (bytes32)"}},"id":38396,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27366:67:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"27329:104:94","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":38398,"nodeType":"ExpressionStatement","src":"27329:104:94"}]},"functionSelector":"0ee4cdd8","id":38400,"implemented":true,"kind":"function","modifiers":[],"name":"manualSetBufferBalances","nameLocation":"27214:23:94","nodeType":"FunctionDefinition","parameters":{"id":38387,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38382,"mutability":"mutable","name":"wrappedToken","nameLocation":"27247:12:94","nodeType":"VariableDeclaration","scope":38400,"src":"27238:21:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":38381,"nodeType":"UserDefinedTypeName","pathNode":{"id":38380,"name":"IERC4626","nameLocations":["27238:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"27238:8:94"},"referencedDeclaration":39833,"src":"27238:8:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":38384,"mutability":"mutable","name":"underlyingAmount","nameLocation":"27269:16:94","nodeType":"VariableDeclaration","scope":38400,"src":"27261:24:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38383,"name":"uint256","nodeType":"ElementaryTypeName","src":"27261:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":38386,"mutability":"mutable","name":"wrappedAmount","nameLocation":"27295:13:94","nodeType":"VariableDeclaration","scope":38400,"src":"27287:21:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38385,"name":"uint256","nodeType":"ElementaryTypeName","src":"27287:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27237:72:94"},"returnParameters":{"id":38388,"nodeType":"ParameterList","parameters":[],"src":"27319:0:94"},"scope":38836,"src":"27205:235:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1208],"body":{"id":38424,"nodeType":"Block","src":"27654:79:94","statements":[{"expression":{"arguments":[{"id":38421,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38403,"src":"27719:6:94","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams memory"}],"expression":{"arguments":[{"arguments":[{"id":38417,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"27686:4:94","typeDescriptions":{"typeIdentifier":"t_contract$_VaultMock_$38836","typeString":"contract VaultMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VaultMock_$38836","typeString":"contract VaultMock"}],"id":38416,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27678:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":38415,"name":"address","nodeType":"ElementaryTypeName","src":"27678:7:94","typeDescriptions":{}}},"id":38418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27678:13:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":38414,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"27671:6:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVault_$3111_$","typeString":"type(contract IVault)"}},"id":38419,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27671:21:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":38420,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27693:25:94","memberName":"erc4626BufferWrapOrUnwrap","nodeType":"MemberAccess","referencedDeclaration":4555,"src":"27671:47:94","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr_$returns$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"function (struct BufferWrapOrUnwrapParams memory) external returns (uint256,uint256,uint256)"}},"id":38422,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27671:55:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256,uint256)"}},"functionReturnParameters":38413,"id":38423,"nodeType":"Return","src":"27664:62:94"}]},"functionSelector":"370bc8da","id":38425,"implemented":true,"kind":"function","modifiers":[{"id":38406,"kind":"modifierInvocation","modifierName":{"id":38405,"name":"nonReentrant","nameLocations":["27560:12:94"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"27560:12:94"},"nodeType":"ModifierInvocation","src":"27560:12:94"}],"name":"manualErc4626BufferWrapOrUnwrapReentrancy","nameLocation":"27455:41:94","nodeType":"FunctionDefinition","parameters":{"id":38404,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38403,"mutability":"mutable","name":"params","nameLocation":"27538:6:94","nodeType":"VariableDeclaration","scope":38425,"src":"27506:38:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_memory_ptr","typeString":"struct BufferWrapOrUnwrapParams"},"typeName":{"id":38402,"nodeType":"UserDefinedTypeName","pathNode":{"id":38401,"name":"BufferWrapOrUnwrapParams","nameLocations":["27506:24:94"],"nodeType":"IdentifierPath","referencedDeclaration":4862,"src":"27506:24:94"},"referencedDeclaration":4862,"src":"27506:24:94","typeDescriptions":{"typeIdentifier":"t_struct$_BufferWrapOrUnwrapParams_$4862_storage_ptr","typeString":"struct BufferWrapOrUnwrapParams"}},"visibility":"internal"}],"src":"27496:54:94"},"returnParameters":{"id":38413,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38408,"mutability":"mutable","name":"amountCalculatedRaw","nameLocation":"27590:19:94","nodeType":"VariableDeclaration","scope":38425,"src":"27582:27:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38407,"name":"uint256","nodeType":"ElementaryTypeName","src":"27582:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":38410,"mutability":"mutable","name":"amountInRaw","nameLocation":"27619:11:94","nodeType":"VariableDeclaration","scope":38425,"src":"27611:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38409,"name":"uint256","nodeType":"ElementaryTypeName","src":"27611:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":38412,"mutability":"mutable","name":"amountOutRaw","nameLocation":"27640:12:94","nodeType":"VariableDeclaration","scope":38425,"src":"27632:20:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38411,"name":"uint256","nodeType":"ElementaryTypeName","src":"27632:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27581:72:94"},"scope":38836,"src":"27446:287:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1252],"body":{"id":38446,"nodeType":"Block","src":"27828:62:94","statements":[{"expression":{"arguments":[{"id":38442,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38428,"src":"27874:5:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"hexValue":"30","id":38443,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27881:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"expression":{"arguments":[{"arguments":[{"id":38438,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"27860:4:94","typeDescriptions":{"typeIdentifier":"t_contract$_VaultMock_$38836","typeString":"contract VaultMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VaultMock_$38836","typeString":"contract VaultMock"}],"id":38437,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27852:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":38436,"name":"address","nodeType":"ElementaryTypeName","src":"27852:7:94","typeDescriptions":{}}},"id":38439,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27852:13:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":38435,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"27845:6:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVault_$3111_$","typeString":"type(contract IVault)"}},"id":38440,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27845:21:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":38441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27867:6:94","memberName":"settle","nodeType":"MemberAccess","referencedDeclaration":4451,"src":"27845:28:94","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$40109_$_t_uint256_$returns$_t_uint256_$","typeString":"function (contract IERC20,uint256) external returns (uint256)"}},"id":38444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27845:38:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":38434,"id":38445,"nodeType":"Return","src":"27838:45:94"}]},"functionSelector":"2d1c3beb","id":38447,"implemented":true,"kind":"function","modifiers":[{"id":38431,"kind":"modifierInvocation","modifierName":{"id":38430,"name":"nonReentrant","nameLocations":["27792:12:94"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"27792:12:94"},"nodeType":"ModifierInvocation","src":"27792:12:94"}],"name":"manualSettleReentrancy","nameLocation":"27748:22:94","nodeType":"FunctionDefinition","parameters":{"id":38429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38428,"mutability":"mutable","name":"token","nameLocation":"27778:5:94","nodeType":"VariableDeclaration","scope":38447,"src":"27771:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":38427,"nodeType":"UserDefinedTypeName","pathNode":{"id":38426,"name":"IERC20","nameLocations":["27771:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"27771:6:94"},"referencedDeclaration":40109,"src":"27771:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"27770:14:94"},"returnParameters":{"id":38434,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38433,"mutability":"mutable","name":"paid","nameLocation":"27822:4:94","nodeType":"VariableDeclaration","scope":38447,"src":"27814:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38432,"name":"uint256","nodeType":"ElementaryTypeName","src":"27814:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27813:14:94"},"scope":38836,"src":"27739:151:94","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[1262],"body":{"id":38471,"nodeType":"Block","src":"27990:64:94","statements":[{"expression":{"arguments":[{"id":38466,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38450,"src":"28029:5:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":38467,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38452,"src":"28036:2:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":38468,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38454,"src":"28040:6:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"arguments":[{"id":38462,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"28015:4:94","typeDescriptions":{"typeIdentifier":"t_contract$_VaultMock_$38836","typeString":"contract VaultMock"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_VaultMock_$38836","typeString":"contract VaultMock"}],"id":38461,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28007:7:94","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":38460,"name":"address","nodeType":"ElementaryTypeName","src":"28007:7:94","typeDescriptions":{}}},"id":38463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28007:13:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":38459,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"28000:6:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVault_$3111_$","typeString":"type(contract IVault)"}},"id":38464,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28000:21:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":38465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28022:6:94","memberName":"sendTo","nodeType":"MemberAccess","referencedDeclaration":4462,"src":"28000:28:94","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IERC20_$40109_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256) external"}},"id":38469,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28000:47:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38470,"nodeType":"ExpressionStatement","src":"28000:47:94"}]},"functionSelector":"d01a3269","id":38472,"implemented":true,"kind":"function","modifiers":[{"id":38457,"kind":"modifierInvocation","modifierName":{"id":38456,"name":"nonReentrant","nameLocations":["27977:12:94"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"27977:12:94"},"nodeType":"ModifierInvocation","src":"27977:12:94"}],"name":"manualSendToReentrancy","nameLocation":"27905:22:94","nodeType":"FunctionDefinition","parameters":{"id":38455,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38450,"mutability":"mutable","name":"token","nameLocation":"27935:5:94","nodeType":"VariableDeclaration","scope":38472,"src":"27928:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":38449,"nodeType":"UserDefinedTypeName","pathNode":{"id":38448,"name":"IERC20","nameLocations":["27928:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"27928:6:94"},"referencedDeclaration":40109,"src":"27928:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":38452,"mutability":"mutable","name":"to","nameLocation":"27950:2:94","nodeType":"VariableDeclaration","scope":38472,"src":"27942:10:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38451,"name":"address","nodeType":"ElementaryTypeName","src":"27942:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38454,"mutability":"mutable","name":"amount","nameLocation":"27962:6:94","nodeType":"VariableDeclaration","scope":38472,"src":"27954:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38453,"name":"uint256","nodeType":"ElementaryTypeName","src":"27954:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27927:42:94"},"returnParameters":{"id":38458,"nodeType":"ParameterList","parameters":[],"src":"27990:0:94"},"scope":38836,"src":"27896:158:94","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[1274],"body":{"id":38489,"nodeType":"Block","src":"28164:54:94","statements":[{"expression":{"arguments":[{"id":38485,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38476,"src":"28197:6:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},{"id":38486,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38479,"src":"28205:5:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":38484,"name":"_findTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25546,"src":"28181:15:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$_t_contract$_IERC20_$40109_$returns$_t_uint256_$","typeString":"function (contract IERC20[] memory,contract IERC20) pure returns (uint256)"}},"id":38487,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28181:30:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":38483,"id":38488,"nodeType":"Return","src":"28174:37:94"}]},"functionSelector":"ebfeb0a1","id":38490,"implemented":true,"kind":"function","modifiers":[],"name":"manualFindTokenIndex","nameLocation":"28069:20:94","nodeType":"FunctionDefinition","parameters":{"id":38480,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38476,"mutability":"mutable","name":"tokens","nameLocation":"28106:6:94","nodeType":"VariableDeclaration","scope":38490,"src":"28090:22:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[]"},"typeName":{"baseType":{"id":38474,"nodeType":"UserDefinedTypeName","pathNode":{"id":38473,"name":"IERC20","nameLocations":["28090:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"28090:6:94"},"referencedDeclaration":40109,"src":"28090:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":38475,"nodeType":"ArrayTypeName","src":"28090:8:94","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_storage_ptr","typeString":"contract IERC20[]"}},"visibility":"internal"},{"constant":false,"id":38479,"mutability":"mutable","name":"token","nameLocation":"28121:5:94","nodeType":"VariableDeclaration","scope":38490,"src":"28114:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":38478,"nodeType":"UserDefinedTypeName","pathNode":{"id":38477,"name":"IERC20","nameLocations":["28114:6:94"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"28114:6:94"},"referencedDeclaration":40109,"src":"28114:6:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"28089:38:94"},"returnParameters":{"id":38483,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38482,"mutability":"mutable","name":"index","nameLocation":"28157:5:94","nodeType":"VariableDeclaration","scope":38490,"src":"28149:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38481,"name":"uint256","nodeType":"ElementaryTypeName","src":"28149:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"28148:15:94"},"scope":38836,"src":"28060:158:94","stateMutability":"pure","virtual":false,"visibility":"public"},{"baseFunctions":[1281],"body":{"id":38508,"nodeType":"Block","src":"28297:81:94","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":38500,"name":"_sessionIdSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28366,"src":"28334:14:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function () view returns (StorageSlotExtension.Uint256SlotType)"}},"id":38501,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28334:16:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":38502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28351:5:94","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":10251,"src":"28334:22:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Uint256SlotType_$10142_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function (StorageSlotExtension.Uint256SlotType) view returns (uint256)"}},"id":38503,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28334:24:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":38504,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38492,"src":"28360:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":38505,"name":"flag","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38494,"src":"28366:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":38497,"name":"_addLiquidityCalled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28355,"src":"28307:19:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862_$","typeString":"function () view returns (UintToAddressToBooleanMappingSlot)"}},"id":38498,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28307:21:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862","typeString":"UintToAddressToBooleanMappingSlot"}},"id":38499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28329:4:94","memberName":"tSet","nodeType":"MemberAccess","referencedDeclaration":7073,"src":"28307:26:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862_$_t_uint256_$_t_address_$_t_bool_$returns$__$attached_to$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862_$","typeString":"function (UintToAddressToBooleanMappingSlot,uint256,address,bool)"}},"id":38506,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28307:64:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38507,"nodeType":"ExpressionStatement","src":"28307:64:94"}]},"functionSelector":"e2ddce11","id":38509,"implemented":true,"kind":"function","modifiers":[],"name":"manualSetAddLiquidityCalledFlag","nameLocation":"28233:31:94","nodeType":"FunctionDefinition","parameters":{"id":38495,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38492,"mutability":"mutable","name":"pool","nameLocation":"28273:4:94","nodeType":"VariableDeclaration","scope":38509,"src":"28265:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38491,"name":"address","nodeType":"ElementaryTypeName","src":"28265:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38494,"mutability":"mutable","name":"flag","nameLocation":"28284:4:94","nodeType":"VariableDeclaration","scope":38509,"src":"28279:9:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":38493,"name":"bool","nodeType":"ElementaryTypeName","src":"28279:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"28264:25:94"},"returnParameters":{"id":38496,"nodeType":"ParameterList","parameters":[],"src":"28297:0:94"},"scope":38836,"src":"28224:154:94","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[1314],"body":{"id":38525,"nodeType":"Block","src":"28494:67:94","statements":[{"expression":{"arguments":[{"id":38521,"name":"sessionId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38513,"src":"28538:9:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":38522,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38511,"src":"28549:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":38518,"name":"_addLiquidityCalled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28355,"src":"28511:19:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862_$","typeString":"function () view returns (UintToAddressToBooleanMappingSlot)"}},"id":38519,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28511:21:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862","typeString":"UintToAddressToBooleanMappingSlot"}},"id":38520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28533:4:94","memberName":"tGet","nodeType":"MemberAccess","referencedDeclaration":7043,"src":"28511:26:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862_$_t_uint256_$_t_address_$returns$_t_bool_$attached_to$_t_userDefinedValueType$_UintToAddressToBooleanMappingSlot_$6862_$","typeString":"function (UintToAddressToBooleanMappingSlot,uint256,address) view returns (bool)"}},"id":38523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28511:43:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":38517,"id":38524,"nodeType":"Return","src":"28504:50:94"}]},"functionSelector":"420f4a45","id":38526,"implemented":true,"kind":"function","modifiers":[],"name":"manualGetAddLiquidityCalledFlagBySession","nameLocation":"28393:40:94","nodeType":"FunctionDefinition","parameters":{"id":38514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38511,"mutability":"mutable","name":"pool","nameLocation":"28442:4:94","nodeType":"VariableDeclaration","scope":38526,"src":"28434:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38510,"name":"address","nodeType":"ElementaryTypeName","src":"28434:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38513,"mutability":"mutable","name":"sessionId","nameLocation":"28456:9:94","nodeType":"VariableDeclaration","scope":38526,"src":"28448:17:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38512,"name":"uint256","nodeType":"ElementaryTypeName","src":"28448:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"28433:33:94"},"returnParameters":{"id":38517,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38516,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":38526,"src":"28488:4:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":38515,"name":"bool","nodeType":"ElementaryTypeName","src":"28488:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"28487:6:94"},"scope":38836,"src":"28384:177:94","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[1319],"body":{"id":38536,"nodeType":"Block","src":"28640:48:94","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":38531,"name":"_sessionIdSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28366,"src":"28657:14:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function () view returns (StorageSlotExtension.Uint256SlotType)"}},"id":38532,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28657:16:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_Uint256SlotType_$10142","typeString":"StorageSlotExtension.Uint256SlotType"}},"id":38533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28674:5:94","memberName":"tload","nodeType":"MemberAccess","referencedDeclaration":10251,"src":"28657:22:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_userDefinedValueType$_Uint256SlotType_$10142_$returns$_t_uint256_$attached_to$_t_userDefinedValueType$_Uint256SlotType_$10142_$","typeString":"function (StorageSlotExtension.Uint256SlotType) view returns (uint256)"}},"id":38534,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28657:24:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":38530,"id":38535,"nodeType":"Return","src":"28650:31:94"}]},"functionSelector":"81e4b7e9","id":38537,"implemented":true,"kind":"function","modifiers":[],"name":"manualGetCurrentUnlockSessionId","nameLocation":"28576:31:94","nodeType":"FunctionDefinition","parameters":{"id":38527,"nodeType":"ParameterList","parameters":[],"src":"28607:2:94"},"returnParameters":{"id":38530,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38529,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":38537,"src":"28631:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38528,"name":"uint256","nodeType":"ElementaryTypeName","src":"28631:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"28630:9:94"},"scope":38836,"src":"28567:121:94","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[1333],"body":{"id":38557,"nodeType":"Block","src":"28890:89:94","statements":[{"expression":{"arguments":[{"id":38552,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38540,"src":"28935:15:94","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},{"id":38553,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38543,"src":"28952:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}},{"id":38554,"name":"swapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38546,"src":"28962:9:94","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"},{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"},{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}],"id":38551,"name":"_computeAmountGivenScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20115,"src":"28907:27:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_VaultSwapParams_$4754_memory_ptr_$_t_struct$_PoolData_$4729_memory_ptr_$_t_struct$_SwapState_$4661_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct VaultSwapParams memory,struct PoolData memory,struct SwapState memory) pure returns (uint256)"}},"id":38555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28907:65:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":38550,"id":38556,"nodeType":"Return","src":"28900:72:94"}]},"functionSelector":"06bf83b1","id":38558,"implemented":true,"kind":"function","modifiers":[],"name":"manualComputeAmountGivenScaled18","nameLocation":"28703:32:94","nodeType":"FunctionDefinition","parameters":{"id":38547,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38540,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"28768:15:94","nodeType":"VariableDeclaration","scope":38558,"src":"28745:38:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":38539,"nodeType":"UserDefinedTypeName","pathNode":{"id":38538,"name":"VaultSwapParams","nameLocations":["28745:15:94"],"nodeType":"IdentifierPath","referencedDeclaration":4754,"src":"28745:15:94"},"referencedDeclaration":4754,"src":"28745:15:94","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"},{"constant":false,"id":38543,"mutability":"mutable","name":"poolData","nameLocation":"28809:8:94","nodeType":"VariableDeclaration","scope":38558,"src":"28793:24:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":38542,"nodeType":"UserDefinedTypeName","pathNode":{"id":38541,"name":"PoolData","nameLocations":["28793:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"28793:8:94"},"referencedDeclaration":4729,"src":"28793:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"},{"constant":false,"id":38546,"mutability":"mutable","name":"swapState","nameLocation":"28844:9:94","nodeType":"VariableDeclaration","scope":38558,"src":"28827:26:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState"},"typeName":{"id":38545,"nodeType":"UserDefinedTypeName","pathNode":{"id":38544,"name":"SwapState","nameLocations":["28827:9:94"],"nodeType":"IdentifierPath","referencedDeclaration":4661,"src":"28827:9:94"},"referencedDeclaration":4661,"src":"28827:9:94","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_storage_ptr","typeString":"struct SwapState"}},"visibility":"internal"}],"src":"28735:124:94"},"returnParameters":{"id":38550,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38549,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":38558,"src":"28881:7:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38548,"name":"uint256","nodeType":"ElementaryTypeName","src":"28881:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"28880:9:94"},"scope":38836,"src":"28694:285:94","stateMutability":"pure","virtual":false,"visibility":"public"},{"baseFunctions":[1345],"body":{"id":38575,"nodeType":"Block","src":"29151:65:94","statements":[{"expression":{"arguments":[{"id":38571,"name":"vaultSwapParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38561,"src":"29183:15:94","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"}},{"id":38572,"name":"poolData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38564,"src":"29200:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams memory"},{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData memory"}],"id":38570,"name":"_loadSwapState","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":20029,"src":"29168:14:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_struct$_VaultSwapParams_$4754_memory_ptr_$_t_struct$_PoolData_$4729_memory_ptr_$returns$_t_struct$_SwapState_$4661_memory_ptr_$","typeString":"function (struct VaultSwapParams memory,struct PoolData memory) pure returns (struct SwapState memory)"}},"id":38573,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29168:41:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState memory"}},"functionReturnParameters":38569,"id":38574,"nodeType":"Return","src":"29161:48:94"}]},"functionSelector":"4594871a","id":38576,"implemented":true,"kind":"function","modifiers":[],"name":"manualLoadSwapState","nameLocation":"28994:19:94","nodeType":"FunctionDefinition","parameters":{"id":38565,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38561,"mutability":"mutable","name":"vaultSwapParams","nameLocation":"29046:15:94","nodeType":"VariableDeclaration","scope":38576,"src":"29023:38:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_memory_ptr","typeString":"struct VaultSwapParams"},"typeName":{"id":38560,"nodeType":"UserDefinedTypeName","pathNode":{"id":38559,"name":"VaultSwapParams","nameLocations":["29023:15:94"],"nodeType":"IdentifierPath","referencedDeclaration":4754,"src":"29023:15:94"},"referencedDeclaration":4754,"src":"29023:15:94","typeDescriptions":{"typeIdentifier":"t_struct$_VaultSwapParams_$4754_storage_ptr","typeString":"struct VaultSwapParams"}},"visibility":"internal"},{"constant":false,"id":38564,"mutability":"mutable","name":"poolData","nameLocation":"29087:8:94","nodeType":"VariableDeclaration","scope":38576,"src":"29071:24:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_memory_ptr","typeString":"struct PoolData"},"typeName":{"id":38563,"nodeType":"UserDefinedTypeName","pathNode":{"id":38562,"name":"PoolData","nameLocations":["29071:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":4729,"src":"29071:8:94"},"referencedDeclaration":4729,"src":"29071:8:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolData_$4729_storage_ptr","typeString":"struct PoolData"}},"visibility":"internal"}],"src":"29013:88:94"},"returnParameters":{"id":38569,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38568,"mutability":"mutable","name":"swapState","nameLocation":"29140:9:94","nodeType":"VariableDeclaration","scope":38576,"src":"29123:26:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_memory_ptr","typeString":"struct SwapState"},"typeName":{"id":38567,"nodeType":"UserDefinedTypeName","pathNode":{"id":38566,"name":"SwapState","nameLocations":["29123:9:94"],"nodeType":"IdentifierPath","referencedDeclaration":4661,"src":"29123:9:94"},"referencedDeclaration":4661,"src":"29123:9:94","typeDescriptions":{"typeIdentifier":"t_struct$_SwapState_$4661_storage_ptr","typeString":"struct SwapState"}},"visibility":"internal"}],"src":"29122:28:94"},"scope":38836,"src":"28985:231:94","stateMutability":"pure","virtual":false,"visibility":"public"},{"body":{"id":38600,"nodeType":"Block","src":"29314:224:94","statements":[{"assignments":[38584],"declarations":[{"constant":false,"id":38584,"mutability":"mutable","name":"liquidityManagement","nameLocation":"29351:19:94","nodeType":"VariableDeclaration","scope":38600,"src":"29324:46:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":38583,"nodeType":"UserDefinedTypeName","pathNode":{"id":38582,"name":"LiquidityManagement","nameLocations":["29324:19:94"],"nodeType":"IdentifierPath","referencedDeclaration":4580,"src":"29324:19:94"},"referencedDeclaration":4580,"src":"29324:19:94","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"id":38585,"nodeType":"VariableDeclarationStatement","src":"29324:46:94"},{"expression":{"id":38590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":38586,"name":"liquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38584,"src":"29380:19:94","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}},"id":38588,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"29400:24:94","memberName":"enableAddLiquidityCustom","nodeType":"MemberAccess","referencedDeclaration":4575,"src":"29380:44:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":38589,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"29427:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"29380:51:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38591,"nodeType":"ExpressionStatement","src":"29380:51:94"},{"expression":{"id":38596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":38592,"name":"liquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38584,"src":"29441:19:94","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}},"id":38594,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"29461:27:94","memberName":"enableRemoveLiquidityCustom","nodeType":"MemberAccess","referencedDeclaration":4577,"src":"29441:47:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":38595,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"29491:4:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"29441:54:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38597,"nodeType":"ExpressionStatement","src":"29441:54:94"},{"expression":{"id":38598,"name":"liquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38584,"src":"29512:19:94","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}},"functionReturnParameters":38581,"id":38599,"nodeType":"Return","src":"29505:26:94"}]},"id":38601,"implemented":true,"kind":"function","modifiers":[],"name":"_getDefaultLiquidityManagement","nameLocation":"29231:30:94","nodeType":"FunctionDefinition","parameters":{"id":38577,"nodeType":"ParameterList","parameters":[],"src":"29261:2:94"},"returnParameters":{"id":38581,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38580,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":38601,"src":"29286:26:94","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":38579,"nodeType":"UserDefinedTypeName","pathNode":{"id":38578,"name":"LiquidityManagement","nameLocations":["29286:19:94"],"nodeType":"IdentifierPath","referencedDeclaration":4580,"src":"29286:19:94"},"referencedDeclaration":4580,"src":"29286:19:94","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"29285:28:94"},"scope":38836,"src":"29222:316:94","stateMutability":"pure","virtual":false,"visibility":"private"},{"baseFunctions":[1288],"body":{"id":38615,"nodeType":"Block","src":"29619:69:94","statements":[{"expression":{"id":38613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":38608,"name":"_poolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28231,"src":"29629:17:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_PoolRoleAccounts_$4677_storage_$","typeString":"mapping(address => struct PoolRoleAccounts storage ref)"}},"id":38610,"indexExpression":{"id":38609,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38603,"src":"29647:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"29629:23:94","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage","typeString":"struct PoolRoleAccounts storage ref"}},"id":38611,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"29653:11:94","memberName":"poolCreator","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"29629:35:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":38612,"name":"newPoolCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38605,"src":"29667:14:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"29629:52:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":38614,"nodeType":"ExpressionStatement","src":"29629:52:94"}]},"functionSelector":"79a2c0ac","id":38616,"implemented":true,"kind":"function","modifiers":[],"name":"manualSetPoolCreator","nameLocation":"29553:20:94","nodeType":"FunctionDefinition","parameters":{"id":38606,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38603,"mutability":"mutable","name":"pool","nameLocation":"29582:4:94","nodeType":"VariableDeclaration","scope":38616,"src":"29574:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38602,"name":"address","nodeType":"ElementaryTypeName","src":"29574:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38605,"mutability":"mutable","name":"newPoolCreator","nameLocation":"29596:14:94","nodeType":"VariableDeclaration","scope":38616,"src":"29588:22:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38604,"name":"address","nodeType":"ElementaryTypeName","src":"29588:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"29573:38:94"},"returnParameters":{"id":38607,"nodeType":"ParameterList","parameters":[],"src":"29619:0:94"},"scope":38836,"src":"29544:144:94","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[1293],"body":{"id":38625,"nodeType":"Block","src":"29761:53:94","statements":[{"expression":{"arguments":[{"id":38622,"name":"tradeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38618,"src":"29795:11:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":38621,"name":"_ensureValidTradeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22734,"src":"29771:23:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":38623,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29771:36:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38624,"nodeType":"ExpressionStatement","src":"29771:36:94"}]},"functionSelector":"2cbbf198","id":38626,"implemented":true,"kind":"function","modifiers":[],"name":"ensureValidTradeAmount","nameLocation":"29703:22:94","nodeType":"FunctionDefinition","parameters":{"id":38619,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38618,"mutability":"mutable","name":"tradeAmount","nameLocation":"29734:11:94","nodeType":"VariableDeclaration","scope":38626,"src":"29726:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38617,"name":"uint256","nodeType":"ElementaryTypeName","src":"29726:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"29725:21:94"},"returnParameters":{"id":38620,"nodeType":"ParameterList","parameters":[],"src":"29761:0:94"},"scope":38836,"src":"29694:120:94","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1298],"body":{"id":38635,"nodeType":"Block","src":"29886:52:94","statements":[{"expression":{"arguments":[{"id":38632,"name":"tradeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38628,"src":"29919:11:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":38631,"name":"_ensureValidSwapAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22748,"src":"29896:22:94","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$__$","typeString":"function (uint256) view"}},"id":38633,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29896:35:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38634,"nodeType":"ExpressionStatement","src":"29896:35:94"}]},"functionSelector":"b4eb0bf9","id":38636,"implemented":true,"kind":"function","modifiers":[],"name":"ensureValidSwapAmount","nameLocation":"29829:21:94","nodeType":"FunctionDefinition","parameters":{"id":38629,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38628,"mutability":"mutable","name":"tradeAmount","nameLocation":"29859:11:94","nodeType":"VariableDeclaration","scope":38636,"src":"29851:19:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38627,"name":"uint256","nodeType":"ElementaryTypeName","src":"29851:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"29850:21:94"},"returnParameters":{"id":38630,"nodeType":"ParameterList","parameters":[],"src":"29886:0:94"},"scope":38836,"src":"29820:118:94","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1305],"body":{"id":38654,"nodeType":"Block","src":"30054:165:94","statements":[{"expression":{"id":38652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":38643,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"30064:15:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":38645,"indexExpression":{"id":38644,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38638,"src":"30080:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"30064:21:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"baseExpression":{"id":38647,"name":"_poolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28226,"src":"30138:15:94","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"mapping(address => PoolConfigBits)"}},"id":38649,"indexExpression":{"id":38648,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38638,"src":"30154:4:94","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"30138:21:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},{"id":38650,"name":"newAggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38640,"src":"30173:29:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":38646,"name":"_manualSetAggregateSwapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38685,"src":"30088:36:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$_t_uint256_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (PoolConfigBits,uint256) pure returns (PoolConfigBits)"}},"id":38651,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30088:124:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"src":"30064:148:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"id":38653,"nodeType":"ExpressionStatement","src":"30064:148:94"}]},"functionSelector":"a03b23ef","id":38655,"implemented":true,"kind":"function","modifiers":[],"name":"manualUpdateAggregateSwapFeePercentage","nameLocation":"29953:38:94","nodeType":"FunctionDefinition","parameters":{"id":38641,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38638,"mutability":"mutable","name":"pool","nameLocation":"30000:4:94","nodeType":"VariableDeclaration","scope":38655,"src":"29992:12:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38637,"name":"address","nodeType":"ElementaryTypeName","src":"29992:7:94","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38640,"mutability":"mutable","name":"newAggregateSwapFeePercentage","nameLocation":"30014:29:94","nodeType":"VariableDeclaration","scope":38655,"src":"30006:37:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38639,"name":"uint256","nodeType":"ElementaryTypeName","src":"30006:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"29991:53:94"},"returnParameters":{"id":38642,"nodeType":"ParameterList","parameters":[],"src":"30054:0:94"},"scope":38836,"src":"29944:275:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":38684,"nodeType":"Block","src":"30370:308:94","statements":[{"expression":{"id":38668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":38666,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38660,"src":"30380:5:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"id":38667,"name":"FEE_SCALING_FACTOR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4868,"src":"30389:18:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30380:27:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38669,"nodeType":"ExpressionStatement","src":"30380:27:94"},{"expression":{"arguments":[{"arguments":[{"id":38677,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38660,"src":"30536:5:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":38678,"name":"PoolConfigConst","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":29602,"src":"30563:15:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PoolConfigConst_$29602_$","typeString":"type(library PoolConfigConst)"}},"id":38679,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"30579:25:94","memberName":"AGGREGATE_SWAP_FEE_OFFSET","nodeType":"MemberAccess","referencedDeclaration":29577,"src":"30563:41:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":38680,"name":"FEE_BITLENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4865,"src":"30626:13:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":38674,"name":"config","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38658,"src":"30496:6:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}],"expression":{"id":38672,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"30474:14:94","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":38673,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"30489:6:94","memberName":"unwrap","nodeType":"MemberAccess","src":"30474:21:94","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_PoolConfigBits_$4582_$returns$_t_bytes32_$","typeString":"function (PoolConfigBits) pure returns (bytes32)"}},"id":38675,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30474:29:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":38676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30504:10:94","memberName":"insertUint","nodeType":"MemberAccess","referencedDeclaration":7523,"src":"30474:40:94","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bytes32_$attached_to$_t_bytes32_$","typeString":"function (bytes32,uint256,uint256,uint256) pure returns (bytes32)"}},"id":38681,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30474:183:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":38670,"name":"PoolConfigBits","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4582,"src":"30437:14:94","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"type(PoolConfigBits)"}},"id":38671,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"30452:4:94","memberName":"wrap","nodeType":"MemberAccess","src":"30437:19:94","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_PoolConfigBits_$4582_$","typeString":"function (bytes32) pure returns (PoolConfigBits)"}},"id":38682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30437:234:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"functionReturnParameters":38665,"id":38683,"nodeType":"Return","src":"30418:253:94"}]},"id":38685,"implemented":true,"kind":"function","modifiers":[],"name":"_manualSetAggregateSwapFeePercentage","nameLocation":"30234:36:94","nodeType":"FunctionDefinition","parameters":{"id":38661,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38658,"mutability":"mutable","name":"config","nameLocation":"30295:6:94","nodeType":"VariableDeclaration","scope":38685,"src":"30280:21:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":38657,"nodeType":"UserDefinedTypeName","pathNode":{"id":38656,"name":"PoolConfigBits","nameLocations":["30280:14:94"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"30280:14:94"},"referencedDeclaration":4582,"src":"30280:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"},{"constant":false,"id":38660,"mutability":"mutable","name":"value","nameLocation":"30319:5:94","nodeType":"VariableDeclaration","scope":38685,"src":"30311:13:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38659,"name":"uint256","nodeType":"ElementaryTypeName","src":"30311:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"30270:60:94"},"returnParameters":{"id":38665,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38664,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":38685,"src":"30354:14:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"},"typeName":{"id":38663,"nodeType":"UserDefinedTypeName","pathNode":{"id":38662,"name":"PoolConfigBits","nameLocations":["30354:14:94"],"nodeType":"IdentifierPath","referencedDeclaration":4582,"src":"30354:14:94"},"referencedDeclaration":4582,"src":"30354:14:94","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_PoolConfigBits_$4582","typeString":"PoolConfigBits"}},"visibility":"internal"}],"src":"30353:16:94"},"scope":38836,"src":"30225:453:94","stateMutability":"pure","virtual":false,"visibility":"internal"},{"baseFunctions":[1355],"body":{"id":38726,"nodeType":"Block","src":"30798:315:94","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":38706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38695,"name":"amountInUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38690,"src":"30812:18:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":38696,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30834:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"30812:23:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38700,"name":"amountInUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38690,"src":"30862:18:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":38701,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30883:1:94","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"30862:22:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":38698,"name":"wrapper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38688,"src":"30839:7:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"id":38699,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30847:14:94","memberName":"previewDeposit","nodeType":"MemberAccess","referencedDeclaration":39740,"src":"30839:22:94","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view external returns (uint256)"}},"id":38703,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30839:46:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":38704,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30889:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"30839:51:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"30812:78:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38710,"nodeType":"IfStatement","src":"30808:117:94","trueBody":{"id":38709,"nodeType":"Block","src":"30892:33:94","statements":[{"expression":{"hexValue":"30","id":38707,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30913:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":38694,"id":38708,"nodeType":"Return","src":"30906:8:94"}]}},{"expression":{"id":38724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[null,{"id":38711,"name":"amountOutWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38693,"src":"30938:16:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},null],"id":38712,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"30935:22:94","typeDescriptions":{"typeIdentifier":"t_tuple$__$_t_uint256_$__$","typeString":"tuple(,uint256,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":38714,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"30989:8:94","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4735_$","typeString":"type(enum SwapKind)"}},"id":38715,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"30998:8:94","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"30989:17:94","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":38717,"name":"wrapper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38688,"src":"31027:7:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"id":38718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31035:5:94","memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":39702,"src":"31027:13:94","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":38719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31027:15:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":38716,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"31020:6:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":38720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31020:23:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":38721,"name":"wrapper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38688,"src":"31057:7:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":38722,"name":"amountInUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38690,"src":"31078:18:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":38713,"name":"_wrapWithBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22328,"src":"30960:15:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_enum$_SwapKind_$4735_$_t_contract$_IERC20_$40109_$_t_contract$_IERC4626_$39833_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_bytes32_$","typeString":"function (enum SwapKind,contract IERC20,contract IERC4626,uint256) returns (uint256,uint256,bytes32)"}},"id":38723,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30960:146:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bytes32_$","typeString":"tuple(uint256,uint256,bytes32)"}},"src":"30935:171:94","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38725,"nodeType":"ExpressionStatement","src":"30935:171:94"}]},"functionSelector":"b8f82b26","id":38727,"implemented":true,"kind":"function","modifiers":[],"name":"previewDeposit","nameLocation":"30693:14:94","nodeType":"FunctionDefinition","parameters":{"id":38691,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38688,"mutability":"mutable","name":"wrapper","nameLocation":"30717:7:94","nodeType":"VariableDeclaration","scope":38727,"src":"30708:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":38687,"nodeType":"UserDefinedTypeName","pathNode":{"id":38686,"name":"IERC4626","nameLocations":["30708:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"30708:8:94"},"referencedDeclaration":39833,"src":"30708:8:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":38690,"mutability":"mutable","name":"amountInUnderlying","nameLocation":"30734:18:94","nodeType":"VariableDeclaration","scope":38727,"src":"30726:26:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38689,"name":"uint256","nodeType":"ElementaryTypeName","src":"30726:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"30707:46:94"},"returnParameters":{"id":38694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38693,"mutability":"mutable","name":"amountOutWrapped","nameLocation":"30780:16:94","nodeType":"VariableDeclaration","scope":38727,"src":"30772:24:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38692,"name":"uint256","nodeType":"ElementaryTypeName","src":"30772:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"30771:26:94"},"scope":38836,"src":"30684:429:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1365],"body":{"id":38759,"nodeType":"Block","src":"31230:259:94","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38739,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38737,"name":"amountOutWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38732,"src":"31244:16:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":38738,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31264:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"31244:21:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38743,"nodeType":"IfStatement","src":"31240:60:94","trueBody":{"id":38742,"nodeType":"Block","src":"31267:33:94","statements":[{"expression":{"hexValue":"30","id":38740,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31288:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":38736,"id":38741,"nodeType":"Return","src":"31281:8:94"}]}},{"expression":{"id":38757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":38744,"name":"amountInUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38735,"src":"31311:18:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},null,null],"id":38745,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"31310:24:94","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$__$__$","typeString":"tuple(uint256,,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":38747,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"31366:8:94","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4735_$","typeString":"type(enum SwapKind)"}},"id":38748,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"31375:9:94","memberName":"EXACT_OUT","nodeType":"MemberAccess","referencedDeclaration":4734,"src":"31366:18:94","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":38750,"name":"wrapper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38730,"src":"31405:7:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"id":38751,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31413:5:94","memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":39702,"src":"31405:13:94","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":38752,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31405:15:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":38749,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"31398:6:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":38753,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31398:23:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":38754,"name":"wrapper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38730,"src":"31435:7:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":38755,"name":"amountOutWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38732,"src":"31456:16:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":38746,"name":"_wrapWithBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22328,"src":"31337:15:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_enum$_SwapKind_$4735_$_t_contract$_IERC20_$40109_$_t_contract$_IERC4626_$39833_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_bytes32_$","typeString":"function (enum SwapKind,contract IERC20,contract IERC4626,uint256) returns (uint256,uint256,bytes32)"}},"id":38756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31337:145:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bytes32_$","typeString":"tuple(uint256,uint256,bytes32)"}},"src":"31310:172:94","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38758,"nodeType":"ExpressionStatement","src":"31310:172:94"}]},"functionSelector":"d1f810a5","id":38760,"implemented":true,"kind":"function","modifiers":[],"name":"previewMint","nameLocation":"31128:11:94","nodeType":"FunctionDefinition","parameters":{"id":38733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38730,"mutability":"mutable","name":"wrapper","nameLocation":"31149:7:94","nodeType":"VariableDeclaration","scope":38760,"src":"31140:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":38729,"nodeType":"UserDefinedTypeName","pathNode":{"id":38728,"name":"IERC4626","nameLocations":["31140:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"31140:8:94"},"referencedDeclaration":39833,"src":"31140:8:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":38732,"mutability":"mutable","name":"amountOutWrapped","nameLocation":"31166:16:94","nodeType":"VariableDeclaration","scope":38760,"src":"31158:24:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38731,"name":"uint256","nodeType":"ElementaryTypeName","src":"31158:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31139:44:94"},"returnParameters":{"id":38736,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38735,"mutability":"mutable","name":"amountInUnderlying","nameLocation":"31210:18:94","nodeType":"VariableDeclaration","scope":38760,"src":"31202:26:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38734,"name":"uint256","nodeType":"ElementaryTypeName","src":"31202:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31201:28:94"},"scope":38836,"src":"31119:370:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1375],"body":{"id":38801,"nodeType":"Block","src":"31608:310:94","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":38781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38770,"name":"amountInWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38765,"src":"31622:15:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":38771,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31641:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"31622:20:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38777,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38775,"name":"amountInWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38765,"src":"31668:15:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":38776,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31686:1:94","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"31668:19:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":38773,"name":"wrapper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38763,"src":"31646:7:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"id":38774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31654:13:94","memberName":"previewRedeem","nodeType":"MemberAccess","referencedDeclaration":39820,"src":"31646:21:94","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view external returns (uint256)"}},"id":38778,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31646:42:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":38779,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31692:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"31646:47:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"31622:71:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38785,"nodeType":"IfStatement","src":"31618:110:94","trueBody":{"id":38784,"nodeType":"Block","src":"31695:33:94","statements":[{"expression":{"hexValue":"30","id":38782,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31716:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":38769,"id":38783,"nodeType":"Return","src":"31709:8:94"}]}},{"expression":{"id":38799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[null,{"id":38786,"name":"amountOutUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38768,"src":"31741:19:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},null],"id":38787,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"31738:25:94","typeDescriptions":{"typeIdentifier":"t_tuple$__$_t_uint256_$__$","typeString":"tuple(,uint256,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":38789,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"31797:8:94","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4735_$","typeString":"type(enum SwapKind)"}},"id":38790,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"31806:8:94","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"31797:17:94","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":38792,"name":"wrapper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38763,"src":"31835:7:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"id":38793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31843:5:94","memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":39702,"src":"31835:13:94","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":38794,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31835:15:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":38791,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"31828:6:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":38795,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31828:23:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":38796,"name":"wrapper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38763,"src":"31865:7:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":38797,"name":"amountInWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38765,"src":"31886:15:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":38788,"name":"_unwrapWithBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22564,"src":"31766:17:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_enum$_SwapKind_$4735_$_t_contract$_IERC20_$40109_$_t_contract$_IERC4626_$39833_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_bytes32_$","typeString":"function (enum SwapKind,contract IERC20,contract IERC4626,uint256) returns (uint256,uint256,bytes32)"}},"id":38798,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31766:145:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bytes32_$","typeString":"tuple(uint256,uint256,bytes32)"}},"src":"31738:173:94","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38800,"nodeType":"ExpressionStatement","src":"31738:173:94"}]},"functionSelector":"cbe52ae3","id":38802,"implemented":true,"kind":"function","modifiers":[],"name":"previewRedeem","nameLocation":"31504:13:94","nodeType":"FunctionDefinition","parameters":{"id":38766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38763,"mutability":"mutable","name":"wrapper","nameLocation":"31527:7:94","nodeType":"VariableDeclaration","scope":38802,"src":"31518:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":38762,"nodeType":"UserDefinedTypeName","pathNode":{"id":38761,"name":"IERC4626","nameLocations":["31518:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"31518:8:94"},"referencedDeclaration":39833,"src":"31518:8:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":38765,"mutability":"mutable","name":"amountInWrapped","nameLocation":"31544:15:94","nodeType":"VariableDeclaration","scope":38802,"src":"31536:23:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38764,"name":"uint256","nodeType":"ElementaryTypeName","src":"31536:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31517:43:94"},"returnParameters":{"id":38769,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38768,"mutability":"mutable","name":"amountOutUnderlying","nameLocation":"31587:19:94","nodeType":"VariableDeclaration","scope":38802,"src":"31579:27:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38767,"name":"uint256","nodeType":"ElementaryTypeName","src":"31579:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31578:29:94"},"scope":38836,"src":"31495:423:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[1385],"body":{"id":38834,"nodeType":"Block","src":"32039:264:94","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":38814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38812,"name":"amountOutUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38807,"src":"32053:19:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":38813,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32076:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"32053:24:94","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38818,"nodeType":"IfStatement","src":"32049:63:94","trueBody":{"id":38817,"nodeType":"Block","src":"32079:33:94","statements":[{"expression":{"hexValue":"30","id":38815,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32100:1:94","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":38811,"id":38816,"nodeType":"Return","src":"32093:8:94"}]}},{"expression":{"id":38832,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":38819,"name":"amountInWrapped","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38810,"src":"32123:15:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},null,null],"id":38820,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"32122:21:94","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$__$__$","typeString":"tuple(uint256,,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":38822,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"32177:8:94","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4735_$","typeString":"type(enum SwapKind)"}},"id":38823,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"32186:9:94","memberName":"EXACT_OUT","nodeType":"MemberAccess","referencedDeclaration":4734,"src":"32177:18:94","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":38825,"name":"wrapper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38805,"src":"32216:7:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"id":38826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32224:5:94","memberName":"asset","nodeType":"MemberAccess","referencedDeclaration":39702,"src":"32216:13:94","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":38827,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32216:15:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":38824,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"32209:6:94","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20_$40109_$","typeString":"type(contract IERC20)"}},"id":38828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32209:23:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":38829,"name":"wrapper","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38805,"src":"32246:7:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},{"id":38830,"name":"amountOutUnderlying","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38807,"src":"32267:19:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":38821,"name":"_unwrapWithBuffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22564,"src":"32146:17:94","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_enum$_SwapKind_$4735_$_t_contract$_IERC20_$40109_$_t_contract$_IERC4626_$39833_$_t_uint256_$returns$_t_uint256_$_t_uint256_$_t_bytes32_$","typeString":"function (enum SwapKind,contract IERC20,contract IERC4626,uint256) returns (uint256,uint256,bytes32)"}},"id":38831,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32146:150:94","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$_t_bytes32_$","typeString":"tuple(uint256,uint256,bytes32)"}},"src":"32122:174:94","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":38833,"nodeType":"ExpressionStatement","src":"32122:174:94"}]},"functionSelector":"bbc6f1dc","id":38835,"implemented":true,"kind":"function","modifiers":[],"name":"previewWithdraw","nameLocation":"31933:15:94","nodeType":"FunctionDefinition","parameters":{"id":38808,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38805,"mutability":"mutable","name":"wrapper","nameLocation":"31958:7:94","nodeType":"VariableDeclaration","scope":38835,"src":"31949:16:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"},"typeName":{"id":38804,"nodeType":"UserDefinedTypeName","pathNode":{"id":38803,"name":"IERC4626","nameLocations":["31949:8:94"],"nodeType":"IdentifierPath","referencedDeclaration":39833,"src":"31949:8:94"},"referencedDeclaration":39833,"src":"31949:8:94","typeDescriptions":{"typeIdentifier":"t_contract$_IERC4626_$39833","typeString":"contract IERC4626"}},"visibility":"internal"},{"constant":false,"id":38807,"mutability":"mutable","name":"amountOutUnderlying","nameLocation":"31975:19:94","nodeType":"VariableDeclaration","scope":38835,"src":"31967:27:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38806,"name":"uint256","nodeType":"ElementaryTypeName","src":"31967:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31948:47:94"},"returnParameters":{"id":38811,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38810,"mutability":"mutable","name":"amountInWrapped","nameLocation":"32022:15:94","nodeType":"VariableDeclaration","scope":38835,"src":"32014:23:94","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38809,"name":"uint256","nodeType":"ElementaryTypeName","src":"32014:7:94","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"32013:25:94"},"scope":38836,"src":"31924:379:94","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":38837,"src":"2335:29970:94","usedErrors":[1823,3413,3418,3423,3428,3437,3443,3446,3449,3452,3455,3458,3461,3470,3473,3476,3479,3482,3485,3488,3491,3494,3497,3500,3503,3506,3509,3512,3518,3525,3532,3535,3538,3548,3558,3565,3568,3571,3574,3584,3594,3601,3604,3607,3610,3613,3616,3619,3622,3625,3630,3635,3640,3643,3646,3649,3652,3655,3660,3665,3670,3676,3682,3685,3693,3699,3705,3708,3711,3714,3719,3729,3739,3746,3749,3752,3755,3758,3761,3764,3767,5792,5901,5904,5907,6207,7498,7501,7917,9886,11367,11374,39870,39875,39880,39889,39894,39899,40188,40469,40474,40477,43243,43255],"usedEvents":[3806,3811,3830,3842,3854,3872,3890,3895,3898,3901,3908,3915,3922,3929,3936,3942,3948,3960,3970,3980,3992,3997,4006,38865,38876]}],"src":"46:32260:94"},"id":94},"@balancer-labs/v3-vault/contracts/token/ERC20MultiToken.sol":{"ast":{"absolutePath":"@balancer-labs/v3-vault/contracts/token/ERC20MultiToken.sol","exportedSymbols":{"BalancerPoolToken":[11106],"ERC20MultiToken":[39429],"EVMCallModeHelpers":[5808],"IERC20Errors":[39900],"IERC20MultiTokenErrors":[1824]},"id":39430,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":38838,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:95"},{"absolutePath":"@openzeppelin/contracts/interfaces/draft-IERC6093.sol","file":"@openzeppelin/contracts/interfaces/draft-IERC6093.sol","id":38840,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39430,"sourceUnit":39996,"src":"72:85:95","symbolAliases":[{"foreign":{"id":38839,"name":"IERC20Errors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39900,"src":"81:12:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IERC20MultiTokenErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IERC20MultiTokenErrors.sol","id":38842,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39430,"sourceUnit":1825,"src":"159:113:95","symbolAliases":[{"foreign":{"id":38841,"name":"IERC20MultiTokenErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1824,"src":"168:22:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol","id":38844,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39430,"sourceUnit":5809,"src":"274:111:95","symbolAliases":[{"foreign":{"id":38843,"name":"EVMCallModeHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5808,"src":"283:18:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol","file":"../BalancerPoolToken.sol","id":38846,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39430,"sourceUnit":11107,"src":"387:61:95","symbolAliases":[{"foreign":{"id":38845,"name":"BalancerPoolToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11106,"src":"396:17:95","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":38848,"name":"IERC20Errors","nameLocations":["794:12:95"],"nodeType":"IdentifierPath","referencedDeclaration":39900,"src":"794:12:95"},"id":38849,"nodeType":"InheritanceSpecifier","src":"794:12:95"},{"baseName":{"id":38850,"name":"IERC20MultiTokenErrors","nameLocations":["808:22:95"],"nodeType":"IdentifierPath","referencedDeclaration":1824,"src":"808:22:95"},"id":38851,"nodeType":"InheritanceSpecifier","src":"808:22:95"}],"canonicalName":"ERC20MultiToken","contractDependencies":[],"contractKind":"contract","documentation":{"id":38847,"nodeType":"StructuredDocumentation","src":"450:306:95","text":" @notice Store Token data and handle accounting for pool tokens in the Vault.\n @dev The ERC20MultiToken is an ERC20-focused multi-token implementation that is fully compatible with the ERC20 API\n on the token side. It also allows for the minting and burning of tokens on the multi-token side."},"fullyImplemented":true,"id":39429,"linearizedBaseContracts":[39429,1824,39900],"name":"ERC20MultiToken","nameLocation":"775:15:95","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":38854,"mutability":"constant","name":"_POOL_MINIMUM_TOTAL_SUPPLY","nameLocation":"899:26:95","nodeType":"VariableDeclaration","scope":39429,"src":"873:58:95","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38852,"name":"uint256","nodeType":"ElementaryTypeName","src":"873:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"316536","id":38853,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"928:3:95","typeDescriptions":{"typeIdentifier":"t_rational_1000000_by_1","typeString":"int_const 1000000"},"value":"1e6"},"visibility":"internal"},{"anonymous":false,"documentation":{"id":38855,"nodeType":"StructuredDocumentation","src":"938:292:95","text":" @notice Pool tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\n @param pool The pool token being transferred\n @param from The token source\n @param to The token destination\n @param value The number of tokens"},"eventSelector":"d1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f","id":38865,"name":"Transfer","nameLocation":"1241:8:95","nodeType":"EventDefinition","parameters":{"id":38864,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38857,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1266:4:95","nodeType":"VariableDeclaration","scope":38865,"src":"1250:20:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38856,"name":"address","nodeType":"ElementaryTypeName","src":"1250:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38859,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"1288:4:95","nodeType":"VariableDeclaration","scope":38865,"src":"1272:20:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38858,"name":"address","nodeType":"ElementaryTypeName","src":"1272:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38861,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"1310:2:95","nodeType":"VariableDeclaration","scope":38865,"src":"1294:18:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38860,"name":"address","nodeType":"ElementaryTypeName","src":"1294:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38863,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"1322:5:95","nodeType":"VariableDeclaration","scope":38865,"src":"1314:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38862,"name":"uint256","nodeType":"ElementaryTypeName","src":"1314:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1249:79:95"},"src":"1235:94:95"},{"anonymous":false,"documentation":{"id":38866,"nodeType":"StructuredDocumentation","src":"1335:400:95","text":" @notice The allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\n @param pool The pool token receiving the allowance\n @param owner The token holder\n @param spender The account being authorized to spend a given amount of the token\n @param value The number of tokens spender is authorized to transfer from owner"},"eventSelector":"a0175360a15bca328baf7ea85c7b784d58b222a50d0ce760b10dba336d226a61","id":38876,"name":"Approval","nameLocation":"1746:8:95","nodeType":"EventDefinition","parameters":{"id":38875,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38868,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1771:4:95","nodeType":"VariableDeclaration","scope":38876,"src":"1755:20:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38867,"name":"address","nodeType":"ElementaryTypeName","src":"1755:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38870,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"1793:5:95","nodeType":"VariableDeclaration","scope":38876,"src":"1777:21:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38869,"name":"address","nodeType":"ElementaryTypeName","src":"1777:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38872,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"1816:7:95","nodeType":"VariableDeclaration","scope":38876,"src":"1800:23:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38871,"name":"address","nodeType":"ElementaryTypeName","src":"1800:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38874,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"1833:5:95","nodeType":"VariableDeclaration","scope":38876,"src":"1825:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38873,"name":"uint256","nodeType":"ElementaryTypeName","src":"1825:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1754:85:95"},"src":"1740:100:95"},{"constant":false,"id":38882,"mutability":"mutable","name":"_balances","nameLocation":"1963:9:95","nodeType":"VariableDeclaration","scope":39429,"src":"1887:85:95","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"typeName":{"id":38881,"keyName":"token","keyNameLocation":"1903:5:95","keyType":{"id":38877,"name":"address","nodeType":"ElementaryTypeName","src":"1895:7:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1887:67:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":38880,"keyName":"owner","keyNameLocation":"1928:5:95","keyType":{"id":38878,"name":"address","nodeType":"ElementaryTypeName","src":"1920:7:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1912:41:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"balance","valueNameLocation":"1945:7:95","valueType":{"id":38879,"name":"uint256","nodeType":"ElementaryTypeName","src":"1937:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}},"visibility":"private"},{"constant":false,"id":38890,"mutability":"mutable","name":"_allowances","nameLocation":"2136:11:95","nodeType":"VariableDeclaration","scope":39429,"src":"2022:125:95","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(address => mapping(address => uint256)))"},"typeName":{"id":38889,"keyName":"token","keyNameLocation":"2038:5:95","keyType":{"id":38883,"name":"address","nodeType":"ElementaryTypeName","src":"2030:7:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2022:97:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(address => mapping(address => uint256)))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":38888,"keyName":"owner","keyNameLocation":"2063:5:95","keyType":{"id":38884,"name":"address","nodeType":"ElementaryTypeName","src":"2055:7:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2047:71:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":38887,"keyName":"spender","keyNameLocation":"2088:7:95","keyType":{"id":38885,"name":"address","nodeType":"ElementaryTypeName","src":"2080:7:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2072:45:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"allowance","valueNameLocation":"2107:9:95","valueType":{"id":38886,"name":"uint256","nodeType":"ElementaryTypeName","src":"2099:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}}}},"visibility":"private"},{"constant":false,"id":38894,"mutability":"mutable","name":"_totalSupplyOf","nameLocation":"2381:14:95","nodeType":"VariableDeclaration","scope":39429,"src":"2327:68:95","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":38893,"keyName":"token","keyNameLocation":"2343:5:95","keyType":{"id":38891,"name":"address","nodeType":"ElementaryTypeName","src":"2335:7:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"2327:45:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"totalSupply","valueNameLocation":"2360:11:95","valueType":{"id":38892,"name":"uint256","nodeType":"ElementaryTypeName","src":"2352:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"body":{"id":38905,"nodeType":"Block","src":"2470:44:95","statements":[{"expression":{"baseExpression":{"id":38901,"name":"_totalSupplyOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38894,"src":"2487:14:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":38903,"indexExpression":{"id":38902,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38896,"src":"2502:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2487:20:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":38900,"id":38904,"nodeType":"Return","src":"2480:27:95"}]},"id":38906,"implemented":true,"kind":"function","modifiers":[],"name":"_totalSupply","nameLocation":"2411:12:95","nodeType":"FunctionDefinition","parameters":{"id":38897,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38896,"mutability":"mutable","name":"pool","nameLocation":"2432:4:95","nodeType":"VariableDeclaration","scope":38906,"src":"2424:12:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38895,"name":"address","nodeType":"ElementaryTypeName","src":"2424:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2423:14:95"},"returnParameters":{"id":38900,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38899,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":38906,"src":"2461:7:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38898,"name":"uint256","nodeType":"ElementaryTypeName","src":"2461:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2460:9:95"},"scope":39429,"src":"2402:112:95","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":38921,"nodeType":"Block","src":"2603:48:95","statements":[{"expression":{"baseExpression":{"baseExpression":{"id":38915,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38882,"src":"2620:9:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":38917,"indexExpression":{"id":38916,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38908,"src":"2630:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2620:15:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":38919,"indexExpression":{"id":38918,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38910,"src":"2636:7:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2620:24:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":38914,"id":38920,"nodeType":"Return","src":"2613:31:95"}]},"id":38922,"implemented":true,"kind":"function","modifiers":[],"name":"_balanceOf","nameLocation":"2529:10:95","nodeType":"FunctionDefinition","parameters":{"id":38911,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38908,"mutability":"mutable","name":"pool","nameLocation":"2548:4:95","nodeType":"VariableDeclaration","scope":38922,"src":"2540:12:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38907,"name":"address","nodeType":"ElementaryTypeName","src":"2540:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38910,"mutability":"mutable","name":"account","nameLocation":"2562:7:95","nodeType":"VariableDeclaration","scope":38922,"src":"2554:15:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38909,"name":"address","nodeType":"ElementaryTypeName","src":"2554:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2539:31:95"},"returnParameters":{"id":38914,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38913,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":38922,"src":"2594:7:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38912,"name":"uint256","nodeType":"ElementaryTypeName","src":"2594:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2593:9:95"},"scope":39429,"src":"2520:131:95","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":38953,"nodeType":"Block","src":"2755:211:95","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":38935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38933,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38926,"src":"2822:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":38934,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38928,"src":"2831:7:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2822:16:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":38951,"nodeType":"Block","src":"2895:65:95","statements":[{"expression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":38943,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38890,"src":"2916:11:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(address => mapping(address => uint256)))"}},"id":38945,"indexExpression":{"id":38944,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38924,"src":"2928:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2916:17:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":38947,"indexExpression":{"id":38946,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38926,"src":"2934:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2916:24:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":38949,"indexExpression":{"id":38948,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38928,"src":"2941:7:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2916:33:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":38932,"id":38950,"nodeType":"Return","src":"2909:40:95"}]},"id":38952,"nodeType":"IfStatement","src":"2818:142:95","trueBody":{"id":38942,"nodeType":"Block","src":"2840:49:95","statements":[{"expression":{"expression":{"arguments":[{"id":38938,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2866:7:95","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":38937,"name":"uint256","nodeType":"ElementaryTypeName","src":"2866:7:95","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":38936,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2861:4:95","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":38939,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2861:13:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":38940,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2875:3:95","memberName":"max","nodeType":"MemberAccess","src":"2861:17:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":38932,"id":38941,"nodeType":"Return","src":"2854:24:95"}]}}]},"id":38954,"implemented":true,"kind":"function","modifiers":[],"name":"_allowance","nameLocation":"2666:10:95","nodeType":"FunctionDefinition","parameters":{"id":38929,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38924,"mutability":"mutable","name":"pool","nameLocation":"2685:4:95","nodeType":"VariableDeclaration","scope":38954,"src":"2677:12:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38923,"name":"address","nodeType":"ElementaryTypeName","src":"2677:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38926,"mutability":"mutable","name":"owner","nameLocation":"2699:5:95","nodeType":"VariableDeclaration","scope":38954,"src":"2691:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38925,"name":"address","nodeType":"ElementaryTypeName","src":"2691:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38928,"mutability":"mutable","name":"spender","nameLocation":"2714:7:95","nodeType":"VariableDeclaration","scope":38954,"src":"2706:15:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38927,"name":"address","nodeType":"ElementaryTypeName","src":"2706:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2676:46:95"},"returnParameters":{"id":38932,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38931,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":38954,"src":"2746:7:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38930,"name":"uint256","nodeType":"ElementaryTypeName","src":"2746:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2745:9:95"},"scope":39429,"src":"2657:309:95","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":38987,"nodeType":"Block","src":"3248:342:95","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":38968,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":38964,"name":"EVMCallModeHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5808,"src":"3341:18:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_EVMCallModeHelpers_$5808_$","typeString":"type(library EVMCallModeHelpers)"}},"id":38965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3360:12:95","memberName":"isStaticCall","nodeType":"MemberAccess","referencedDeclaration":5807,"src":"3341:31:95","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":38966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3341:33:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":38967,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3378:5:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"3341:42:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":38975,"nodeType":"IfStatement","src":"3337:114:95","trueBody":{"id":38974,"nodeType":"Block","src":"3385:66:95","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":38969,"name":"EVMCallModeHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5808,"src":"3406:18:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_EVMCallModeHelpers_$5808_$","typeString":"type(library EVMCallModeHelpers)"}},"id":38971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3425:13:95","memberName":"NotStaticCall","nodeType":"MemberAccess","referencedDeclaration":5792,"src":"3406:32:95","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":38972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3406:34:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":38973,"nodeType":"RevertStatement","src":"3399:41:95"}]}},{"expression":{"id":38985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":38976,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38882,"src":"3545:9:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":38982,"indexExpression":{"arguments":[{"id":38979,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38957,"src":"3563:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":38978,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3555:7:95","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":38977,"name":"address","nodeType":"ElementaryTypeName","src":"3555:7:95","typeDescriptions":{}}},"id":38980,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3555:13:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3545:24:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":38983,"indexExpression":{"id":38981,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38959,"src":"3570:2:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3545:28:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":38984,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38961,"src":"3577:6:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3545:38:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":38986,"nodeType":"ExpressionStatement","src":"3545:38:95"}]},"documentation":{"id":38955,"nodeType":"StructuredDocumentation","src":"2972:185:95","text":" @dev DO NOT CALL THIS METHOD!\n Only `removeLiquidity` in the Vault may call this - in a query context - to allow burning tokens the caller\n does not have."},"id":38988,"implemented":true,"kind":"function","modifiers":[],"name":"_queryModeBalanceIncrease","nameLocation":"3171:25:95","nodeType":"FunctionDefinition","parameters":{"id":38962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38957,"mutability":"mutable","name":"pool","nameLocation":"3205:4:95","nodeType":"VariableDeclaration","scope":38988,"src":"3197:12:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38956,"name":"address","nodeType":"ElementaryTypeName","src":"3197:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38959,"mutability":"mutable","name":"to","nameLocation":"3219:2:95","nodeType":"VariableDeclaration","scope":38988,"src":"3211:10:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38958,"name":"address","nodeType":"ElementaryTypeName","src":"3211:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38961,"mutability":"mutable","name":"amount","nameLocation":"3231:6:95","nodeType":"VariableDeclaration","scope":38988,"src":"3223:14:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38960,"name":"uint256","nodeType":"ElementaryTypeName","src":"3223:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3196:42:95"},"returnParameters":{"id":38963,"nodeType":"ParameterList","parameters":[],"src":"3248:0:95"},"scope":39429,"src":"3162:428:95","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":39058,"nodeType":"Block","src":"3662:690:95","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":39002,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":38997,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38992,"src":"3676:2:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":39000,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3690:1:95","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":38999,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3682:7:95","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":38998,"name":"address","nodeType":"ElementaryTypeName","src":"3682:7:95","typeDescriptions":{}}},"id":39001,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3682:10:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3676:16:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":39008,"nodeType":"IfStatement","src":"3672:78:95","trueBody":{"id":39007,"nodeType":"Block","src":"3694:56:95","statements":[{"errorCall":{"arguments":[{"id":39004,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38992,"src":"3736:2:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39003,"name":"ERC20InvalidReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39880,"src":"3715:20:95","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":39005,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3715:24:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":39006,"nodeType":"RevertStatement","src":"3708:31:95"}]}},{"assignments":[39010],"declarations":[{"constant":false,"id":39010,"mutability":"mutable","name":"newTotalSupply","nameLocation":"3768:14:95","nodeType":"VariableDeclaration","scope":39058,"src":"3760:22:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39009,"name":"uint256","nodeType":"ElementaryTypeName","src":"3760:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":39016,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":39015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":39011,"name":"_totalSupplyOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38894,"src":"3785:14:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":39013,"indexExpression":{"id":39012,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38990,"src":"3800:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3785:20:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":39014,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38994,"src":"3808:6:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3785:29:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3760:54:95"},{"id":39025,"nodeType":"UncheckedBlock","src":"3824:179:95","statements":[{"expression":{"id":39023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":39017,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38882,"src":"3963:9:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":39020,"indexExpression":{"id":39018,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38990,"src":"3973:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3963:15:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":39021,"indexExpression":{"id":39019,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38992,"src":"3979:2:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3963:19:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":39022,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38994,"src":"3986:6:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3963:29:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":39024,"nodeType":"ExpressionStatement","src":"3963:29:95"}]},{"expression":{"arguments":[{"id":39027,"name":"newTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39010,"src":"4043:14:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":39026,"name":"_ensurePoolMinimumTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39074,"src":"4013:29:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":39028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4013:45:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39029,"nodeType":"ExpressionStatement","src":"4013:45:95"},{"expression":{"id":39034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":39030,"name":"_totalSupplyOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38894,"src":"4069:14:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":39032,"indexExpression":{"id":39031,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38990,"src":"4084:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4069:20:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":39033,"name":"newTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39010,"src":"4092:14:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4069:37:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":39035,"nodeType":"ExpressionStatement","src":"4069:37:95"},{"eventCall":{"arguments":[{"id":39037,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38990,"src":"4131:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":39040,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4145:1:95","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":39039,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4137:7:95","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39038,"name":"address","nodeType":"ElementaryTypeName","src":"4137:7:95","typeDescriptions":{}}},"id":39041,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4137:10:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39042,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38992,"src":"4149:2:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39043,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38994,"src":"4153:6:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":39036,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38865,"src":"4122:8:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":39044,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4122:38:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39045,"nodeType":"EmitStatement","src":"4117:43:95"},{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":39052,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4330:1:95","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":39051,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4322:7:95","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39050,"name":"address","nodeType":"ElementaryTypeName","src":"4322:7:95","typeDescriptions":{}}},"id":39053,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4322:10:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39054,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38992,"src":"4334:2:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39055,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38994,"src":"4338:6:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":39047,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38990,"src":"4303:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39046,"name":"BalancerPoolToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11106,"src":"4285:17:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BalancerPoolToken_$11106_$","typeString":"type(contract BalancerPoolToken)"}},"id":39048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4285:23:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_BalancerPoolToken_$11106","typeString":"contract BalancerPoolToken"}},"id":39049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4309:12:95","memberName":"emitTransfer","nodeType":"MemberAccess","referencedDeclaration":10957,"src":"4285:36:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":39056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4285:60:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39057,"nodeType":"ExpressionStatement","src":"4285:60:95"}]},"id":39059,"implemented":true,"kind":"function","modifiers":[],"name":"_mint","nameLocation":"3605:5:95","nodeType":"FunctionDefinition","parameters":{"id":38995,"nodeType":"ParameterList","parameters":[{"constant":false,"id":38990,"mutability":"mutable","name":"pool","nameLocation":"3619:4:95","nodeType":"VariableDeclaration","scope":39059,"src":"3611:12:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38989,"name":"address","nodeType":"ElementaryTypeName","src":"3611:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38992,"mutability":"mutable","name":"to","nameLocation":"3633:2:95","nodeType":"VariableDeclaration","scope":39059,"src":"3625:10:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":38991,"name":"address","nodeType":"ElementaryTypeName","src":"3625:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":38994,"mutability":"mutable","name":"amount","nameLocation":"3645:6:95","nodeType":"VariableDeclaration","scope":39059,"src":"3637:14:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":38993,"name":"uint256","nodeType":"ElementaryTypeName","src":"3637:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3610:42:95"},"returnParameters":{"id":38996,"nodeType":"ParameterList","parameters":[],"src":"3662:0:95"},"scope":39429,"src":"3596:756:95","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":39073,"nodeType":"Block","src":"4435:134:95","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":39066,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":39064,"name":"newTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39061,"src":"4449:14:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":39065,"name":"_POOL_MINIMUM_TOTAL_SUPPLY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38854,"src":"4466:26:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4449:43:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":39072,"nodeType":"IfStatement","src":"4445:118:95","trueBody":{"id":39071,"nodeType":"Block","src":"4494:69:95","statements":[{"errorCall":{"arguments":[{"id":39068,"name":"newTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39061,"src":"4537:14:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":39067,"name":"PoolTotalSupplyTooLow","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1823,"src":"4515:21:95","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":39069,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4515:37:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":39070,"nodeType":"RevertStatement","src":"4508:44:95"}]}}]},"id":39074,"implemented":true,"kind":"function","modifiers":[],"name":"_ensurePoolMinimumTotalSupply","nameLocation":"4367:29:95","nodeType":"FunctionDefinition","parameters":{"id":39062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39061,"mutability":"mutable","name":"newTotalSupply","nameLocation":"4405:14:95","nodeType":"VariableDeclaration","scope":39074,"src":"4397:22:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39060,"name":"uint256","nodeType":"ElementaryTypeName","src":"4397:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4396:24:95"},"returnParameters":{"id":39063,"nodeType":"ParameterList","parameters":[],"src":"4435:0:95"},"scope":39429,"src":"4358:211:95","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":39125,"nodeType":"Block","src":"4633:577:95","statements":[{"expression":{"id":39083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":39079,"name":"_totalSupplyOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38894,"src":"4643:14:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":39081,"indexExpression":{"id":39080,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39076,"src":"4658:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4643:20:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":39082,"name":"_POOL_MINIMUM_TOTAL_SUPPLY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38854,"src":"4667:26:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4643:50:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":39084,"nodeType":"ExpressionStatement","src":"4643:50:95"},{"id":39096,"nodeType":"UncheckedBlock","src":"4703:207:95","statements":[{"expression":{"id":39094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":39085,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38882,"src":"4842:9:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":39091,"indexExpression":{"id":39086,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39076,"src":"4852:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4842:15:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":39092,"indexExpression":{"arguments":[{"hexValue":"30","id":39089,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4866:1:95","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":39088,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4858:7:95","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39087,"name":"address","nodeType":"ElementaryTypeName","src":"4858:7:95","typeDescriptions":{}}},"id":39090,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4858:10:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4842:27:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":39093,"name":"_POOL_MINIMUM_TOTAL_SUPPLY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38854,"src":"4873:26:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4842:57:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":39095,"nodeType":"ExpressionStatement","src":"4842:57:95"}]},{"eventCall":{"arguments":[{"id":39098,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39076,"src":"4933:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":39101,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4947:1:95","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":39100,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4939:7:95","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39099,"name":"address","nodeType":"ElementaryTypeName","src":"4939:7:95","typeDescriptions":{}}},"id":39102,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4939:10:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":39105,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4959:1:95","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":39104,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4951:7:95","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39103,"name":"address","nodeType":"ElementaryTypeName","src":"4951:7:95","typeDescriptions":{}}},"id":39106,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4951:10:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39107,"name":"_POOL_MINIMUM_TOTAL_SUPPLY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38854,"src":"4963:26:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":39097,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38865,"src":"4924:8:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":39108,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4924:66:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39109,"nodeType":"EmitStatement","src":"4919:71:95"},{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":39116,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5160:1:95","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":39115,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5152:7:95","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39114,"name":"address","nodeType":"ElementaryTypeName","src":"5152:7:95","typeDescriptions":{}}},"id":39117,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5152:10:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":39120,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5172:1:95","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":39119,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5164:7:95","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39118,"name":"address","nodeType":"ElementaryTypeName","src":"5164:7:95","typeDescriptions":{}}},"id":39121,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5164:10:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39122,"name":"_POOL_MINIMUM_TOTAL_SUPPLY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38854,"src":"5176:26:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":39111,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39076,"src":"5133:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39110,"name":"BalancerPoolToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11106,"src":"5115:17:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BalancerPoolToken_$11106_$","typeString":"type(contract BalancerPoolToken)"}},"id":39112,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5115:23:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_BalancerPoolToken_$11106","typeString":"contract BalancerPoolToken"}},"id":39113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5139:12:95","memberName":"emitTransfer","nodeType":"MemberAccess","referencedDeclaration":10957,"src":"5115:36:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":39123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5115:88:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39124,"nodeType":"ExpressionStatement","src":"5115:88:95"}]},"id":39126,"implemented":true,"kind":"function","modifiers":[],"name":"_mintMinimumSupplyReserve","nameLocation":"4584:25:95","nodeType":"FunctionDefinition","parameters":{"id":39077,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39076,"mutability":"mutable","name":"pool","nameLocation":"4618:4:95","nodeType":"VariableDeclaration","scope":39126,"src":"4610:12:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39075,"name":"address","nodeType":"ElementaryTypeName","src":"4610:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4609:14:95"},"returnParameters":{"id":39078,"nodeType":"ParameterList","parameters":[],"src":"4633:0:95"},"scope":39429,"src":"4575:635:95","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":39221,"nodeType":"Block","src":"5284:1112:95","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":39140,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":39135,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39130,"src":"5298:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":39138,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5314:1:95","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":39137,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5306:7:95","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39136,"name":"address","nodeType":"ElementaryTypeName","src":"5306:7:95","typeDescriptions":{}}},"id":39139,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5306:10:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5298:18:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":39146,"nodeType":"IfStatement","src":"5294:80:95","trueBody":{"id":39145,"nodeType":"Block","src":"5318:56:95","statements":[{"errorCall":{"arguments":[{"id":39142,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39130,"src":"5358:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39141,"name":"ERC20InvalidSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39875,"src":"5339:18:95","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":39143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5339:24:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":39144,"nodeType":"RevertStatement","src":"5332:31:95"}]}},{"assignments":[39148],"declarations":[{"constant":false,"id":39148,"mutability":"mutable","name":"accountBalance","nameLocation":"5392:14:95","nodeType":"VariableDeclaration","scope":39221,"src":"5384:22:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39147,"name":"uint256","nodeType":"ElementaryTypeName","src":"5384:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":39154,"initialValue":{"baseExpression":{"baseExpression":{"id":39149,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38882,"src":"5409:9:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":39151,"indexExpression":{"id":39150,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39128,"src":"5419:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5409:15:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":39153,"indexExpression":{"id":39152,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39130,"src":"5425:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5409:21:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5384:46:95"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":39157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":39155,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39132,"src":"5444:6:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":39156,"name":"accountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39148,"src":"5453:14:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5444:23:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":39165,"nodeType":"IfStatement","src":"5440:115:95","trueBody":{"id":39164,"nodeType":"Block","src":"5469:86:95","statements":[{"errorCall":{"arguments":[{"id":39159,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39130,"src":"5515:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39160,"name":"accountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39148,"src":"5521:14:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":39161,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39132,"src":"5537:6:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":39158,"name":"ERC20InsufficientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39870,"src":"5490:24:95","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":39162,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5490:54:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":39163,"nodeType":"RevertStatement","src":"5483:61:95"}]}},{"id":39176,"nodeType":"UncheckedBlock","src":"5565:82:95","statements":[{"expression":{"id":39174,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":39166,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38882,"src":"5589:9:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":39169,"indexExpression":{"id":39167,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39128,"src":"5599:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5589:15:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":39170,"indexExpression":{"id":39168,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39130,"src":"5605:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5589:21:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":39173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":39171,"name":"accountBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39148,"src":"5613:14:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":39172,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39132,"src":"5630:6:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5613:23:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5589:47:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":39175,"nodeType":"ExpressionStatement","src":"5589:47:95"}]},{"assignments":[39178],"declarations":[{"constant":false,"id":39178,"mutability":"mutable","name":"newTotalSupply","nameLocation":"5664:14:95","nodeType":"VariableDeclaration","scope":39221,"src":"5656:22:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39177,"name":"uint256","nodeType":"ElementaryTypeName","src":"5656:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":39184,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":39183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":39179,"name":"_totalSupplyOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38894,"src":"5681:14:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":39181,"indexExpression":{"id":39180,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39128,"src":"5696:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5681:20:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":39182,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39132,"src":"5704:6:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5681:29:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5656:54:95"},{"expression":{"arguments":[{"id":39186,"name":"newTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39178,"src":"5751:14:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":39185,"name":"_ensurePoolMinimumTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39074,"src":"5721:29:95","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$__$","typeString":"function (uint256) pure"}},"id":39187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5721:45:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39188,"nodeType":"ExpressionStatement","src":"5721:45:95"},{"expression":{"id":39193,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":39189,"name":"_totalSupplyOf","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38894,"src":"5777:14:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":39191,"indexExpression":{"id":39190,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39128,"src":"5792:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5777:20:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":39192,"name":"newTotalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39178,"src":"5800:14:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5777:37:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":39194,"nodeType":"ExpressionStatement","src":"5777:37:95"},{"clauses":[{"block":{"id":39206,"nodeType":"Block","src":"6176:2:95","statements":[]},"errorName":"","id":39207,"nodeType":"TryCatchClause","src":"6176:2:95"},{"block":{"id":39208,"nodeType":"Block","src":"6185:72:95","statements":[]},"errorName":"","id":39209,"nodeType":"TryCatchClause","src":"6179:78:95"}],"externalCall":{"arguments":[{"id":39199,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39130,"src":"6150:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":39202,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6164:1:95","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":39201,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6156:7:95","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39200,"name":"address","nodeType":"ElementaryTypeName","src":"6156:7:95","typeDescriptions":{}}},"id":39203,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6156:10:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39204,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39132,"src":"6168:6:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":39196,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39128,"src":"6131:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39195,"name":"BalancerPoolToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11106,"src":"6113:17:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BalancerPoolToken_$11106_$","typeString":"type(contract BalancerPoolToken)"}},"id":39197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6113:23:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_BalancerPoolToken_$11106","typeString":"contract BalancerPoolToken"}},"id":39198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6137:12:95","memberName":"emitTransfer","nodeType":"MemberAccess","referencedDeclaration":10957,"src":"6113:36:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":39205,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6113:62:95","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39210,"nodeType":"TryStatement","src":"6109:148:95"},{"eventCall":{"arguments":[{"id":39212,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39128,"src":"6358:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39213,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39130,"src":"6364:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":39216,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6378:1:95","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":39215,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6370:7:95","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39214,"name":"address","nodeType":"ElementaryTypeName","src":"6370:7:95","typeDescriptions":{}}},"id":39217,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6370:10:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39218,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39132,"src":"6382:6:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":39211,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38865,"src":"6349:8:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":39219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6349:40:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39220,"nodeType":"EmitStatement","src":"6344:45:95"}]},"id":39222,"implemented":true,"kind":"function","modifiers":[],"name":"_burn","nameLocation":"5225:5:95","nodeType":"FunctionDefinition","parameters":{"id":39133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39128,"mutability":"mutable","name":"pool","nameLocation":"5239:4:95","nodeType":"VariableDeclaration","scope":39222,"src":"5231:12:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39127,"name":"address","nodeType":"ElementaryTypeName","src":"5231:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39130,"mutability":"mutable","name":"from","nameLocation":"5253:4:95","nodeType":"VariableDeclaration","scope":39222,"src":"5245:12:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39129,"name":"address","nodeType":"ElementaryTypeName","src":"5245:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39132,"mutability":"mutable","name":"amount","nameLocation":"5267:6:95","nodeType":"VariableDeclaration","scope":39222,"src":"5259:14:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39131,"name":"uint256","nodeType":"ElementaryTypeName","src":"5259:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5230:44:95"},"returnParameters":{"id":39134,"nodeType":"ParameterList","parameters":[],"src":"5284:0:95"},"scope":39429,"src":"5216:1180:95","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":39311,"nodeType":"Block","src":"6486:882:95","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":39238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":39233,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39226,"src":"6500:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":39236,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6516:1:95","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":39235,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6508:7:95","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39234,"name":"address","nodeType":"ElementaryTypeName","src":"6508:7:95","typeDescriptions":{}}},"id":39237,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6508:10:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6500:18:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":39244,"nodeType":"IfStatement","src":"6496:80:95","trueBody":{"id":39243,"nodeType":"Block","src":"6520:56:95","statements":[{"errorCall":{"arguments":[{"id":39240,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39226,"src":"6560:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39239,"name":"ERC20InvalidSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39875,"src":"6541:18:95","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":39241,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6541:24:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":39242,"nodeType":"RevertStatement","src":"6534:31:95"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":39250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":39245,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39228,"src":"6590:2:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":39248,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6604:1:95","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":39247,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6596:7:95","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39246,"name":"address","nodeType":"ElementaryTypeName","src":"6596:7:95","typeDescriptions":{}}},"id":39249,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6596:10:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6590:16:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":39256,"nodeType":"IfStatement","src":"6586:78:95","trueBody":{"id":39255,"nodeType":"Block","src":"6608:56:95","statements":[{"errorCall":{"arguments":[{"id":39252,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39228,"src":"6650:2:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39251,"name":"ERC20InvalidReceiver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39880,"src":"6629:20:95","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":39253,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6629:24:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":39254,"nodeType":"RevertStatement","src":"6622:31:95"}]}},{"assignments":[39258],"declarations":[{"constant":false,"id":39258,"mutability":"mutable","name":"fromBalance","nameLocation":"6682:11:95","nodeType":"VariableDeclaration","scope":39311,"src":"6674:19:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39257,"name":"uint256","nodeType":"ElementaryTypeName","src":"6674:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":39264,"initialValue":{"baseExpression":{"baseExpression":{"id":39259,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38882,"src":"6696:9:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":39261,"indexExpression":{"id":39260,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39224,"src":"6706:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6696:15:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":39263,"indexExpression":{"id":39262,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39226,"src":"6712:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6696:21:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6674:43:95"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":39267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":39265,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39230,"src":"6731:6:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":39266,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39258,"src":"6740:11:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6731:20:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":39275,"nodeType":"IfStatement","src":"6727:109:95","trueBody":{"id":39274,"nodeType":"Block","src":"6753:83:95","statements":[{"errorCall":{"arguments":[{"id":39269,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39226,"src":"6799:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39270,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39258,"src":"6805:11:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":39271,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39230,"src":"6818:6:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":39268,"name":"ERC20InsufficientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39870,"src":"6774:24:95","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":39272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6774:51:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":39273,"nodeType":"RevertStatement","src":"6767:58:95"}]}},{"id":39294,"nodeType":"UncheckedBlock","src":"6846:289:95","statements":[{"expression":{"id":39284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":39276,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38882,"src":"6870:9:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":39279,"indexExpression":{"id":39277,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39224,"src":"6880:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6870:15:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":39280,"indexExpression":{"id":39278,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39226,"src":"6886:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6870:21:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":39283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":39281,"name":"fromBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39258,"src":"6894:11:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":39282,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39230,"src":"6908:6:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6894:20:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6870:44:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":39285,"nodeType":"ExpressionStatement","src":"6870:44:95"},{"expression":{"id":39292,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":39286,"name":"_balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38882,"src":"7095:9:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":39289,"indexExpression":{"id":39287,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39224,"src":"7105:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7095:15:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":39290,"indexExpression":{"id":39288,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39228,"src":"7111:2:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7095:19:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":39291,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39230,"src":"7118:6:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7095:29:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":39293,"nodeType":"ExpressionStatement","src":"7095:29:95"}]},{"eventCall":{"arguments":[{"id":39296,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39224,"src":"7159:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39297,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39226,"src":"7165:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39298,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39228,"src":"7171:2:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39299,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39230,"src":"7175:6:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":39295,"name":"Transfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38865,"src":"7150:8:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":39300,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7150:32:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39301,"nodeType":"EmitStatement","src":"7145:37:95"},{"expression":{"arguments":[{"id":39306,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39226,"src":"7344:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39307,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39228,"src":"7350:2:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39308,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39230,"src":"7354:6:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":39303,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39224,"src":"7325:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39302,"name":"BalancerPoolToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11106,"src":"7307:17:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BalancerPoolToken_$11106_$","typeString":"type(contract BalancerPoolToken)"}},"id":39304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7307:23:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_BalancerPoolToken_$11106","typeString":"contract BalancerPoolToken"}},"id":39305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7331:12:95","memberName":"emitTransfer","nodeType":"MemberAccess","referencedDeclaration":10957,"src":"7307:36:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":39309,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7307:54:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39310,"nodeType":"ExpressionStatement","src":"7307:54:95"}]},"id":39312,"implemented":true,"kind":"function","modifiers":[],"name":"_transfer","nameLocation":"6411:9:95","nodeType":"FunctionDefinition","parameters":{"id":39231,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39224,"mutability":"mutable","name":"pool","nameLocation":"6429:4:95","nodeType":"VariableDeclaration","scope":39312,"src":"6421:12:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39223,"name":"address","nodeType":"ElementaryTypeName","src":"6421:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39226,"mutability":"mutable","name":"from","nameLocation":"6443:4:95","nodeType":"VariableDeclaration","scope":39312,"src":"6435:12:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39225,"name":"address","nodeType":"ElementaryTypeName","src":"6435:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39228,"mutability":"mutable","name":"to","nameLocation":"6457:2:95","nodeType":"VariableDeclaration","scope":39312,"src":"6449:10:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39227,"name":"address","nodeType":"ElementaryTypeName","src":"6449:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39230,"mutability":"mutable","name":"amount","nameLocation":"6469:6:95","nodeType":"VariableDeclaration","scope":39312,"src":"6461:14:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39229,"name":"uint256","nodeType":"ElementaryTypeName","src":"6461:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6420:56:95"},"returnParameters":{"id":39232,"nodeType":"ParameterList","parameters":[],"src":"6486:0:95"},"scope":39429,"src":"6402:966:95","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":39377,"nodeType":"Block","src":"7463:820:95","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":39328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":39323,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39316,"src":"7477:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":39326,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7494:1:95","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":39325,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7486:7:95","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39324,"name":"address","nodeType":"ElementaryTypeName","src":"7486:7:95","typeDescriptions":{}}},"id":39327,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7486:10:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7477:19:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":39334,"nodeType":"IfStatement","src":"7473:84:95","trueBody":{"id":39333,"nodeType":"Block","src":"7498:59:95","statements":[{"errorCall":{"arguments":[{"id":39330,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39316,"src":"7540:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39329,"name":"ERC20InvalidApprover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39894,"src":"7519:20:95","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":39331,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7519:27:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":39332,"nodeType":"RevertStatement","src":"7512:34:95"}]}},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":39340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":39335,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39318,"src":"7571:7:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":39338,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7590:1:95","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":39337,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7582:7:95","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39336,"name":"address","nodeType":"ElementaryTypeName","src":"7582:7:95","typeDescriptions":{}}},"id":39339,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7582:10:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"7571:21:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":39346,"nodeType":"IfStatement","src":"7567:87:95","trueBody":{"id":39345,"nodeType":"Block","src":"7594:60:95","statements":[{"errorCall":{"arguments":[{"id":39342,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39318,"src":"7635:7:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39341,"name":"ERC20InvalidSpender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39899,"src":"7615:19:95","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":39343,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7615:28:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":39344,"nodeType":"RevertStatement","src":"7608:35:95"}]}},{"expression":{"id":39355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"id":39347,"name":"_allowances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38890,"src":"7664:11:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(address => mapping(address => uint256)))"}},"id":39351,"indexExpression":{"id":39348,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39314,"src":"7676:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7664:17:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":39352,"indexExpression":{"id":39349,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39316,"src":"7682:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7664:24:95","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":39353,"indexExpression":{"id":39350,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39318,"src":"7689:7:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7664:33:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":39354,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39320,"src":"7700:6:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7664:42:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":39356,"nodeType":"ExpressionStatement","src":"7664:42:95"},{"clauses":[{"block":{"id":39365,"nodeType":"Block","src":"8065:2:95","statements":[]},"errorName":"","id":39366,"nodeType":"TryCatchClause","src":"8065:2:95"},{"block":{"id":39367,"nodeType":"Block","src":"8074:72:95","statements":[]},"errorName":"","id":39368,"nodeType":"TryCatchClause","src":"8068:78:95"}],"externalCall":{"arguments":[{"id":39361,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39316,"src":"8041:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39362,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39318,"src":"8048:7:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39363,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39320,"src":"8057:6:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":39358,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39314,"src":"8022:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39357,"name":"BalancerPoolToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11106,"src":"8004:17:95","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_BalancerPoolToken_$11106_$","typeString":"type(contract BalancerPoolToken)"}},"id":39359,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8004:23:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_BalancerPoolToken_$11106","typeString":"contract BalancerPoolToken"}},"id":39360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8028:12:95","memberName":"emitApproval","nodeType":"MemberAccess","referencedDeclaration":10976,"src":"8004:36:95","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":39364,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8004:60:95","tryCall":true,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39369,"nodeType":"TryStatement","src":"8000:146:95"},{"eventCall":{"arguments":[{"id":39371,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39314,"src":"8247:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39372,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39316,"src":"8253:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39373,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39318,"src":"8260:7:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39374,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39320,"src":"8269:6:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":39370,"name":"Approval","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38876,"src":"8238:8:95","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":39375,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8238:38:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39376,"nodeType":"EmitStatement","src":"8233:43:95"}]},"id":39378,"implemented":true,"kind":"function","modifiers":[],"name":"_approve","nameLocation":"7383:8:95","nodeType":"FunctionDefinition","parameters":{"id":39321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39314,"mutability":"mutable","name":"pool","nameLocation":"7400:4:95","nodeType":"VariableDeclaration","scope":39378,"src":"7392:12:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39313,"name":"address","nodeType":"ElementaryTypeName","src":"7392:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39316,"mutability":"mutable","name":"owner","nameLocation":"7414:5:95","nodeType":"VariableDeclaration","scope":39378,"src":"7406:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39315,"name":"address","nodeType":"ElementaryTypeName","src":"7406:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39318,"mutability":"mutable","name":"spender","nameLocation":"7429:7:95","nodeType":"VariableDeclaration","scope":39378,"src":"7421:15:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39317,"name":"address","nodeType":"ElementaryTypeName","src":"7421:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39320,"mutability":"mutable","name":"amount","nameLocation":"7446:6:95","nodeType":"VariableDeclaration","scope":39378,"src":"7438:14:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39319,"name":"uint256","nodeType":"ElementaryTypeName","src":"7438:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7391:62:95"},"returnParameters":{"id":39322,"nodeType":"ParameterList","parameters":[],"src":"7463:0:95"},"scope":39429,"src":"7374:909:95","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":39427,"nodeType":"Block","src":"8385:398:95","statements":[{"assignments":[39390],"declarations":[{"constant":false,"id":39390,"mutability":"mutable","name":"currentAllowance","nameLocation":"8403:16:95","nodeType":"VariableDeclaration","scope":39427,"src":"8395:24:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39389,"name":"uint256","nodeType":"ElementaryTypeName","src":"8395:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":39396,"initialValue":{"arguments":[{"id":39392,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39380,"src":"8433:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39393,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39382,"src":"8439:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39394,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39384,"src":"8446:7:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":39391,"name":"_allowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38954,"src":"8422:10:95","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address,address) view returns (uint256)"}},"id":39395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8422:32:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8395:59:95"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":39403,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":39397,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39390,"src":"8468:16:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"arguments":[{"id":39400,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8493:7:95","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":39399,"name":"uint256","nodeType":"ElementaryTypeName","src":"8493:7:95","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"}],"id":39398,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8488:4:95","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":39401,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8488:13:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint256","typeString":"type(uint256)"}},"id":39402,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8502:3:95","memberName":"max","nodeType":"MemberAccess","src":"8488:17:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8468:37:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":39426,"nodeType":"IfStatement","src":"8464:313:95","trueBody":{"id":39425,"nodeType":"Block","src":"8507:270:95","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":39406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":39404,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39386,"src":"8525:6:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":39405,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39390,"src":"8534:16:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8525:25:95","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":39414,"nodeType":"IfStatement","src":"8521:132:95","trueBody":{"id":39413,"nodeType":"Block","src":"8552:101:95","statements":[{"errorCall":{"arguments":[{"id":39408,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39384,"src":"8604:7:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39409,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39390,"src":"8613:16:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":39410,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39386,"src":"8631:6:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":39407,"name":"ERC20InsufficientAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39889,"src":"8577:26:95","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":39411,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8577:61:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":39412,"nodeType":"RevertStatement","src":"8570:68:95"}]}},{"id":39424,"nodeType":"UncheckedBlock","src":"8667:100:95","statements":[{"expression":{"arguments":[{"id":39416,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39380,"src":"8704:4:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39417,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39382,"src":"8710:5:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39418,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39384,"src":"8717:7:95","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":39421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":39419,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39390,"src":"8726:16:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":39420,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39386,"src":"8745:6:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8726:25:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":39415,"name":"_approve","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39378,"src":"8695:8:95","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":39422,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8695:57:95","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39423,"nodeType":"ExpressionStatement","src":"8695:57:95"}]}]}}]},"id":39428,"implemented":true,"kind":"function","modifiers":[],"name":"_spendAllowance","nameLocation":"8298:15:95","nodeType":"FunctionDefinition","parameters":{"id":39387,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39380,"mutability":"mutable","name":"pool","nameLocation":"8322:4:95","nodeType":"VariableDeclaration","scope":39428,"src":"8314:12:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39379,"name":"address","nodeType":"ElementaryTypeName","src":"8314:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39382,"mutability":"mutable","name":"owner","nameLocation":"8336:5:95","nodeType":"VariableDeclaration","scope":39428,"src":"8328:13:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39381,"name":"address","nodeType":"ElementaryTypeName","src":"8328:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39384,"mutability":"mutable","name":"spender","nameLocation":"8351:7:95","nodeType":"VariableDeclaration","scope":39428,"src":"8343:15:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39383,"name":"address","nodeType":"ElementaryTypeName","src":"8343:7:95","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39386,"mutability":"mutable","name":"amount","nameLocation":"8368:6:95","nodeType":"VariableDeclaration","scope":39428,"src":"8360:14:95","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39385,"name":"uint256","nodeType":"ElementaryTypeName","src":"8360:7:95","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8313:62:95"},"returnParameters":{"id":39388,"nodeType":"ParameterList","parameters":[],"src":"8385:0:95"},"scope":39429,"src":"8289:494:95","stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"scope":39430,"src":"757:8028:95","usedErrors":[1823,39870,39875,39880,39889,39894,39899],"usedEvents":[38865,38876]}],"src":"46:8740:95"},"id":95},"@openzeppelin/contracts/access/Ownable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","exportedSymbols":{"Context":[40736],"Ownable":[39577]},"id":39578,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":39431,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"102:24:96"},{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","file":"../utils/Context.sol","id":39433,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39578,"sourceUnit":40737,"src":"128:45:96","symbolAliases":[{"foreign":{"id":39432,"name":"Context","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40736,"src":"136:7:96","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":39435,"name":"Context","nameLocations":["692:7:96"],"nodeType":"IdentifierPath","referencedDeclaration":40736,"src":"692:7:96"},"id":39436,"nodeType":"InheritanceSpecifier","src":"692:7:96"}],"canonicalName":"Ownable","contractDependencies":[],"contractKind":"contract","documentation":{"id":39434,"nodeType":"StructuredDocumentation","src":"175:487:96","text":" @dev Contract module which provides a basic access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n The initial owner is set to the address provided by the deployer. This can\n later be changed with {transferOwnership}.\n This module is used through inheritance. It will make available the modifier\n `onlyOwner`, which can be applied to your functions to restrict their use to\n the owner."},"fullyImplemented":true,"id":39577,"linearizedBaseContracts":[39577,40736],"name":"Ownable","nameLocation":"681:7:96","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":39438,"mutability":"mutable","name":"_owner","nameLocation":"722:6:96","nodeType":"VariableDeclaration","scope":39577,"src":"706:22:96","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39437,"name":"address","nodeType":"ElementaryTypeName","src":"706:7:96","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"documentation":{"id":39439,"nodeType":"StructuredDocumentation","src":"735:85:96","text":" @dev The caller account is not authorized to perform an operation."},"errorSelector":"118cdaa7","id":39443,"name":"OwnableUnauthorizedAccount","nameLocation":"831:26:96","nodeType":"ErrorDefinition","parameters":{"id":39442,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39441,"mutability":"mutable","name":"account","nameLocation":"866:7:96","nodeType":"VariableDeclaration","scope":39443,"src":"858:15:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39440,"name":"address","nodeType":"ElementaryTypeName","src":"858:7:96","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"857:17:96"},"src":"825:50:96"},{"documentation":{"id":39444,"nodeType":"StructuredDocumentation","src":"881:82:96","text":" @dev The owner is not a valid owner account. (eg. `address(0)`)"},"errorSelector":"1e4fbdf7","id":39448,"name":"OwnableInvalidOwner","nameLocation":"974:19:96","nodeType":"ErrorDefinition","parameters":{"id":39447,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39446,"mutability":"mutable","name":"owner","nameLocation":"1002:5:96","nodeType":"VariableDeclaration","scope":39448,"src":"994:13:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39445,"name":"address","nodeType":"ElementaryTypeName","src":"994:7:96","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"993:15:96"},"src":"968:41:96"},{"anonymous":false,"eventSelector":"8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","id":39454,"name":"OwnershipTransferred","nameLocation":"1021:20:96","nodeType":"EventDefinition","parameters":{"id":39453,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39450,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"1058:13:96","nodeType":"VariableDeclaration","scope":39454,"src":"1042:29:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39449,"name":"address","nodeType":"ElementaryTypeName","src":"1042:7:96","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39452,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"1089:8:96","nodeType":"VariableDeclaration","scope":39454,"src":"1073:24:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39451,"name":"address","nodeType":"ElementaryTypeName","src":"1073:7:96","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1041:57:96"},"src":"1015:84:96"},{"body":{"id":39479,"nodeType":"Block","src":"1259:153:96","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":39465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":39460,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39457,"src":"1273:12:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":39463,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1297:1:96","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":39462,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1289:7:96","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39461,"name":"address","nodeType":"ElementaryTypeName","src":"1289:7:96","typeDescriptions":{}}},"id":39464,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1289:10:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1273:26:96","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":39474,"nodeType":"IfStatement","src":"1269:95:96","trueBody":{"id":39473,"nodeType":"Block","src":"1301:63:96","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":39469,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1350:1:96","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":39468,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1342:7:96","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39467,"name":"address","nodeType":"ElementaryTypeName","src":"1342:7:96","typeDescriptions":{}}},"id":39470,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1342:10:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39466,"name":"OwnableInvalidOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39448,"src":"1322:19:96","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":39471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1322:31:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":39472,"nodeType":"RevertStatement","src":"1315:38:96"}]}},{"expression":{"arguments":[{"id":39476,"name":"initialOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39457,"src":"1392:12:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39475,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39576,"src":"1373:18:96","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":39477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1373:32:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39478,"nodeType":"ExpressionStatement","src":"1373:32:96"}]},"documentation":{"id":39455,"nodeType":"StructuredDocumentation","src":"1105:115:96","text":" @dev Initializes the contract setting the address provided by the deployer as the initial owner."},"id":39480,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":39458,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39457,"mutability":"mutable","name":"initialOwner","nameLocation":"1245:12:96","nodeType":"VariableDeclaration","scope":39480,"src":"1237:20:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39456,"name":"address","nodeType":"ElementaryTypeName","src":"1237:7:96","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1236:22:96"},"returnParameters":{"id":39459,"nodeType":"ParameterList","parameters":[],"src":"1259:0:96"},"scope":39577,"src":"1225:187:96","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":39487,"nodeType":"Block","src":"1521:41:96","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":39483,"name":"_checkOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39514,"src":"1531:11:96","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":39484,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1531:13:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39485,"nodeType":"ExpressionStatement","src":"1531:13:96"},{"id":39486,"nodeType":"PlaceholderStatement","src":"1554:1:96"}]},"documentation":{"id":39481,"nodeType":"StructuredDocumentation","src":"1418:77:96","text":" @dev Throws if called by any account other than the owner."},"id":39488,"name":"onlyOwner","nameLocation":"1509:9:96","nodeType":"ModifierDefinition","parameters":{"id":39482,"nodeType":"ParameterList","parameters":[],"src":"1518:2:96"},"src":"1500:62:96","virtual":false,"visibility":"internal"},{"body":{"id":39496,"nodeType":"Block","src":"1693:30:96","statements":[{"expression":{"id":39494,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39438,"src":"1710:6:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":39493,"id":39495,"nodeType":"Return","src":"1703:13:96"}]},"documentation":{"id":39489,"nodeType":"StructuredDocumentation","src":"1568:65:96","text":" @dev Returns the address of the current owner."},"functionSelector":"8da5cb5b","id":39497,"implemented":true,"kind":"function","modifiers":[],"name":"owner","nameLocation":"1647:5:96","nodeType":"FunctionDefinition","parameters":{"id":39490,"nodeType":"ParameterList","parameters":[],"src":"1652:2:96"},"returnParameters":{"id":39493,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39492,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39497,"src":"1684:7:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39491,"name":"address","nodeType":"ElementaryTypeName","src":"1684:7:96","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1683:9:96"},"scope":39577,"src":"1638:85:96","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":39513,"nodeType":"Block","src":"1841:117:96","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":39505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":39501,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39497,"src":"1855:5:96","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":39502,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1855:7:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":39503,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40726,"src":"1866:10:96","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":39504,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1866:12:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1855:23:96","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":39512,"nodeType":"IfStatement","src":"1851:101:96","trueBody":{"id":39511,"nodeType":"Block","src":"1880:72:96","statements":[{"errorCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":39507,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40726,"src":"1928:10:96","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":39508,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1928:12:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39506,"name":"OwnableUnauthorizedAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39443,"src":"1901:26:96","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":39509,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1901:40:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":39510,"nodeType":"RevertStatement","src":"1894:47:96"}]}}]},"documentation":{"id":39498,"nodeType":"StructuredDocumentation","src":"1729:62:96","text":" @dev Throws if the sender is not the owner."},"id":39514,"implemented":true,"kind":"function","modifiers":[],"name":"_checkOwner","nameLocation":"1805:11:96","nodeType":"FunctionDefinition","parameters":{"id":39499,"nodeType":"ParameterList","parameters":[],"src":"1816:2:96"},"returnParameters":{"id":39500,"nodeType":"ParameterList","parameters":[],"src":"1841:0:96"},"scope":39577,"src":"1796:162:96","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":39527,"nodeType":"Block","src":"2347:47:96","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":39523,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2384:1:96","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":39522,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2376:7:96","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39521,"name":"address","nodeType":"ElementaryTypeName","src":"2376:7:96","typeDescriptions":{}}},"id":39524,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2376:10:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39520,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39576,"src":"2357:18:96","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":39525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2357:30:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39526,"nodeType":"ExpressionStatement","src":"2357:30:96"}]},"documentation":{"id":39515,"nodeType":"StructuredDocumentation","src":"1964:324:96","text":" @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby disabling any functionality that is only available to the owner."},"functionSelector":"715018a6","id":39528,"implemented":true,"kind":"function","modifiers":[{"id":39518,"kind":"modifierInvocation","modifierName":{"id":39517,"name":"onlyOwner","nameLocations":["2337:9:96"],"nodeType":"IdentifierPath","referencedDeclaration":39488,"src":"2337:9:96"},"nodeType":"ModifierInvocation","src":"2337:9:96"}],"name":"renounceOwnership","nameLocation":"2302:17:96","nodeType":"FunctionDefinition","parameters":{"id":39516,"nodeType":"ParameterList","parameters":[],"src":"2319:2:96"},"returnParameters":{"id":39519,"nodeType":"ParameterList","parameters":[],"src":"2347:0:96"},"scope":39577,"src":"2293:101:96","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":39555,"nodeType":"Block","src":"2613:145:96","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":39541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":39536,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39531,"src":"2627:8:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":39539,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2647:1:96","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":39538,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2639:7:96","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39537,"name":"address","nodeType":"ElementaryTypeName","src":"2639:7:96","typeDescriptions":{}}},"id":39540,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2639:10:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2627:22:96","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":39550,"nodeType":"IfStatement","src":"2623:91:96","trueBody":{"id":39549,"nodeType":"Block","src":"2651:63:96","statements":[{"errorCall":{"arguments":[{"arguments":[{"hexValue":"30","id":39545,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2700:1:96","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":39544,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2692:7:96","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":39543,"name":"address","nodeType":"ElementaryTypeName","src":"2692:7:96","typeDescriptions":{}}},"id":39546,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2692:10:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39542,"name":"OwnableInvalidOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39448,"src":"2672:19:96","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":39547,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2672:31:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":39548,"nodeType":"RevertStatement","src":"2665:38:96"}]}},{"expression":{"arguments":[{"id":39552,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39531,"src":"2742:8:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39551,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39576,"src":"2723:18:96","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":39553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2723:28:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39554,"nodeType":"ExpressionStatement","src":"2723:28:96"}]},"documentation":{"id":39529,"nodeType":"StructuredDocumentation","src":"2400:138:96","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner."},"functionSelector":"f2fde38b","id":39556,"implemented":true,"kind":"function","modifiers":[{"id":39534,"kind":"modifierInvocation","modifierName":{"id":39533,"name":"onlyOwner","nameLocations":["2603:9:96"],"nodeType":"IdentifierPath","referencedDeclaration":39488,"src":"2603:9:96"},"nodeType":"ModifierInvocation","src":"2603:9:96"}],"name":"transferOwnership","nameLocation":"2552:17:96","nodeType":"FunctionDefinition","parameters":{"id":39532,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39531,"mutability":"mutable","name":"newOwner","nameLocation":"2578:8:96","nodeType":"VariableDeclaration","scope":39556,"src":"2570:16:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39530,"name":"address","nodeType":"ElementaryTypeName","src":"2570:7:96","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2569:18:96"},"returnParameters":{"id":39535,"nodeType":"ParameterList","parameters":[],"src":"2613:0:96"},"scope":39577,"src":"2543:215:96","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":39575,"nodeType":"Block","src":"2975:124:96","statements":[{"assignments":[39563],"declarations":[{"constant":false,"id":39563,"mutability":"mutable","name":"oldOwner","nameLocation":"2993:8:96","nodeType":"VariableDeclaration","scope":39575,"src":"2985:16:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39562,"name":"address","nodeType":"ElementaryTypeName","src":"2985:7:96","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":39565,"initialValue":{"id":39564,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39438,"src":"3004:6:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2985:25:96"},{"expression":{"id":39568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":39566,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39438,"src":"3020:6:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":39567,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39559,"src":"3029:8:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3020:17:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":39569,"nodeType":"ExpressionStatement","src":"3020:17:96"},{"eventCall":{"arguments":[{"id":39571,"name":"oldOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39563,"src":"3073:8:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39572,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39559,"src":"3083:8:96","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":39570,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39454,"src":"3052:20:96","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":39573,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3052:40:96","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39574,"nodeType":"EmitStatement","src":"3047:45:96"}]},"documentation":{"id":39557,"nodeType":"StructuredDocumentation","src":"2764:143:96","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Internal function without access restriction."},"id":39576,"implemented":true,"kind":"function","modifiers":[],"name":"_transferOwnership","nameLocation":"2921:18:96","nodeType":"FunctionDefinition","parameters":{"id":39560,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39559,"mutability":"mutable","name":"newOwner","nameLocation":"2948:8:96","nodeType":"VariableDeclaration","scope":39576,"src":"2940:16:96","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39558,"name":"address","nodeType":"ElementaryTypeName","src":"2940:7:96","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2939:18:96"},"returnParameters":{"id":39561,"nodeType":"ParameterList","parameters":[],"src":"2975:0:96"},"scope":39577,"src":"2912:187:96","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":39578,"src":"663:2438:96","usedErrors":[39443,39448],"usedEvents":[39454]}],"src":"102:3000:96"},"id":96},"@openzeppelin/contracts/access/Ownable2Step.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/access/Ownable2Step.sol","exportedSymbols":{"Ownable":[39577],"Ownable2Step":[39663]},"id":39664,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":39579,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"107:24:97"},{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","file":"./Ownable.sol","id":39581,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39664,"sourceUnit":39578,"src":"133:38:97","symbolAliases":[{"foreign":{"id":39580,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39577,"src":"141:7:97","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":39583,"name":"Ownable","nameLocations":["660:7:97"],"nodeType":"IdentifierPath","referencedDeclaration":39577,"src":"660:7:97"},"id":39584,"nodeType":"InheritanceSpecifier","src":"660:7:97"}],"canonicalName":"Ownable2Step","contractDependencies":[],"contractKind":"contract","documentation":{"id":39582,"nodeType":"StructuredDocumentation","src":"173:452:97","text":" @dev Contract module which provides access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n The initial owner is specified at deployment time in the constructor for `Ownable`. This\n can later be changed with {transferOwnership} and {acceptOwnership}.\n This module is used through inheritance. It will make available all functions\n from parent (Ownable)."},"fullyImplemented":true,"id":39663,"linearizedBaseContracts":[39663,39577,40736],"name":"Ownable2Step","nameLocation":"644:12:97","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":39586,"mutability":"mutable","name":"_pendingOwner","nameLocation":"690:13:97","nodeType":"VariableDeclaration","scope":39663,"src":"674:29:97","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39585,"name":"address","nodeType":"ElementaryTypeName","src":"674:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"anonymous":false,"eventSelector":"38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700","id":39592,"name":"OwnershipTransferStarted","nameLocation":"716:24:97","nodeType":"EventDefinition","parameters":{"id":39591,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39588,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"757:13:97","nodeType":"VariableDeclaration","scope":39592,"src":"741:29:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39587,"name":"address","nodeType":"ElementaryTypeName","src":"741:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39590,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"788:8:97","nodeType":"VariableDeclaration","scope":39592,"src":"772:24:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39589,"name":"address","nodeType":"ElementaryTypeName","src":"772:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"740:57:97"},"src":"710:88:97"},{"body":{"id":39600,"nodeType":"Block","src":"936:37:97","statements":[{"expression":{"id":39598,"name":"_pendingOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39586,"src":"953:13:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":39597,"id":39599,"nodeType":"Return","src":"946:20:97"}]},"documentation":{"id":39593,"nodeType":"StructuredDocumentation","src":"804:65:97","text":" @dev Returns the address of the pending owner."},"functionSelector":"e30c3978","id":39601,"implemented":true,"kind":"function","modifiers":[],"name":"pendingOwner","nameLocation":"883:12:97","nodeType":"FunctionDefinition","parameters":{"id":39594,"nodeType":"ParameterList","parameters":[],"src":"895:2:97"},"returnParameters":{"id":39597,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39596,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":39601,"src":"927:7:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39595,"name":"address","nodeType":"ElementaryTypeName","src":"927:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"926:9:97"},"scope":39663,"src":"874:99:97","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[39556],"body":{"id":39620,"nodeType":"Block","src":"1245:99:97","statements":[{"expression":{"id":39612,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":39610,"name":"_pendingOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39586,"src":"1255:13:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":39611,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39604,"src":"1271:8:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1255:24:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":39613,"nodeType":"ExpressionStatement","src":"1255:24:97"},{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":39615,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39497,"src":"1319:5:97","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":39616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1319:7:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":39617,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39604,"src":"1328:8:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":39614,"name":"OwnershipTransferStarted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39592,"src":"1294:24:97","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":39618,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1294:43:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39619,"nodeType":"EmitStatement","src":"1289:48:97"}]},"documentation":{"id":39602,"nodeType":"StructuredDocumentation","src":"979:182:97","text":" @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\n Can only be called by the current owner."},"functionSelector":"f2fde38b","id":39621,"implemented":true,"kind":"function","modifiers":[{"id":39608,"kind":"modifierInvocation","modifierName":{"id":39607,"name":"onlyOwner","nameLocations":["1235:9:97"],"nodeType":"IdentifierPath","referencedDeclaration":39488,"src":"1235:9:97"},"nodeType":"ModifierInvocation","src":"1235:9:97"}],"name":"transferOwnership","nameLocation":"1175:17:97","nodeType":"FunctionDefinition","overrides":{"id":39606,"nodeType":"OverrideSpecifier","overrides":[],"src":"1226:8:97"},"parameters":{"id":39605,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39604,"mutability":"mutable","name":"newOwner","nameLocation":"1201:8:97","nodeType":"VariableDeclaration","scope":39621,"src":"1193:16:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39603,"name":"address","nodeType":"ElementaryTypeName","src":"1193:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1192:18:97"},"returnParameters":{"id":39609,"nodeType":"ParameterList","parameters":[],"src":"1245:0:97"},"scope":39663,"src":"1166:178:97","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[39576],"body":{"id":39637,"nodeType":"Block","src":"1600:81:97","statements":[{"expression":{"id":39629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"1610:20:97","subExpression":{"id":39628,"name":"_pendingOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39586,"src":"1617:13:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39630,"nodeType":"ExpressionStatement","src":"1610:20:97"},{"expression":{"arguments":[{"id":39634,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39624,"src":"1665:8:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":39631,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"1640:5:97","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_Ownable2Step_$39663_$","typeString":"type(contract super Ownable2Step)"}},"id":39633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1646:18:97","memberName":"_transferOwnership","nodeType":"MemberAccess","referencedDeclaration":39576,"src":"1640:24:97","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":39635,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1640:34:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39636,"nodeType":"ExpressionStatement","src":"1640:34:97"}]},"documentation":{"id":39622,"nodeType":"StructuredDocumentation","src":"1350:173:97","text":" @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\n Internal function without access restriction."},"id":39638,"implemented":true,"kind":"function","modifiers":[],"name":"_transferOwnership","nameLocation":"1537:18:97","nodeType":"FunctionDefinition","overrides":{"id":39626,"nodeType":"OverrideSpecifier","overrides":[],"src":"1591:8:97"},"parameters":{"id":39625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39624,"mutability":"mutable","name":"newOwner","nameLocation":"1564:8:97","nodeType":"VariableDeclaration","scope":39638,"src":"1556:16:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39623,"name":"address","nodeType":"ElementaryTypeName","src":"1556:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1555:18:97"},"returnParameters":{"id":39627,"nodeType":"ParameterList","parameters":[],"src":"1600:0:97"},"scope":39663,"src":"1528:153:97","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":39661,"nodeType":"Block","src":"1803:187:97","statements":[{"assignments":[39643],"declarations":[{"constant":false,"id":39643,"mutability":"mutable","name":"sender","nameLocation":"1821:6:97","nodeType":"VariableDeclaration","scope":39661,"src":"1813:14:97","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39642,"name":"address","nodeType":"ElementaryTypeName","src":"1813:7:97","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":39646,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":39644,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40726,"src":"1830:10:97","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":39645,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1830:12:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"1813:29:97"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":39650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":39647,"name":"pendingOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39601,"src":"1856:12:97","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":39648,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1856:14:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":39649,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39643,"src":"1874:6:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1856:24:97","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":39656,"nodeType":"IfStatement","src":"1852:96:97","trueBody":{"id":39655,"nodeType":"Block","src":"1882:66:97","statements":[{"errorCall":{"arguments":[{"id":39652,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39643,"src":"1930:6:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39651,"name":"OwnableUnauthorizedAccount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39443,"src":"1903:26:97","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":39653,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1903:34:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":39654,"nodeType":"RevertStatement","src":"1896:41:97"}]}},{"expression":{"arguments":[{"id":39658,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39643,"src":"1976:6:97","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":39657,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[39638],"referencedDeclaration":39638,"src":"1957:18:97","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":39659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1957:26:97","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":39660,"nodeType":"ExpressionStatement","src":"1957:26:97"}]},"documentation":{"id":39639,"nodeType":"StructuredDocumentation","src":"1687:69:97","text":" @dev The new owner accepts the ownership transfer."},"functionSelector":"79ba5097","id":39662,"implemented":true,"kind":"function","modifiers":[],"name":"acceptOwnership","nameLocation":"1770:15:97","nodeType":"FunctionDefinition","parameters":{"id":39640,"nodeType":"ParameterList","parameters":[],"src":"1785:2:97"},"returnParameters":{"id":39641,"nodeType":"ParameterList","parameters":[],"src":"1803:0:97"},"scope":39663,"src":"1761:229:97","stateMutability":"nonpayable","virtual":true,"visibility":"public"}],"scope":39664,"src":"626:1366:97","usedErrors":[39443,39448],"usedEvents":[39454,39592]}],"src":"107:1886:97"},"id":97},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC4626.sol","exportedSymbols":{"IERC20":[40109],"IERC20Metadata":[40135],"IERC4626":[39833]},"id":39834,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":39665,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"107:24:98"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../token/ERC20/IERC20.sol","id":39667,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39834,"sourceUnit":40110,"src":"133:49:98","symbolAliases":[{"foreign":{"id":39666,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"141:6:98","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"../token/ERC20/extensions/IERC20Metadata.sol","id":39669,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":39834,"sourceUnit":40136,"src":"183:76:98","symbolAliases":[{"foreign":{"id":39668,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40135,"src":"191:14:98","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":39671,"name":"IERC20","nameLocations":["420:6:98"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"420:6:98"},"id":39672,"nodeType":"InheritanceSpecifier","src":"420:6:98"},{"baseName":{"id":39673,"name":"IERC20Metadata","nameLocations":["428:14:98"],"nodeType":"IdentifierPath","referencedDeclaration":40135,"src":"428:14:98"},"id":39674,"nodeType":"InheritanceSpecifier","src":"428:14:98"}],"canonicalName":"IERC4626","contractDependencies":[],"contractKind":"interface","documentation":{"id":39670,"nodeType":"StructuredDocumentation","src":"261:136:98","text":" @dev Interface of the ERC4626 \"Tokenized Vault Standard\", as defined in\n https://eips.ethereum.org/EIPS/eip-4626[ERC-4626]."},"fullyImplemented":false,"id":39833,"linearizedBaseContracts":[39833,40135,40109],"name":"IERC4626","nameLocation":"408:8:98","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"eventSelector":"dcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d7","id":39684,"name":"Deposit","nameLocation":"455:7:98","nodeType":"EventDefinition","parameters":{"id":39683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39676,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"479:6:98","nodeType":"VariableDeclaration","scope":39684,"src":"463:22:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39675,"name":"address","nodeType":"ElementaryTypeName","src":"463:7:98","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39678,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"503:5:98","nodeType":"VariableDeclaration","scope":39684,"src":"487:21:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39677,"name":"address","nodeType":"ElementaryTypeName","src":"487:7:98","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39680,"indexed":false,"mutability":"mutable","name":"assets","nameLocation":"518:6:98","nodeType":"VariableDeclaration","scope":39684,"src":"510:14:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39679,"name":"uint256","nodeType":"ElementaryTypeName","src":"510:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39682,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"534:6:98","nodeType":"VariableDeclaration","scope":39684,"src":"526:14:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39681,"name":"uint256","nodeType":"ElementaryTypeName","src":"526:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"462:79:98"},"src":"449:93:98"},{"anonymous":false,"eventSelector":"fbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db","id":39696,"name":"Withdraw","nameLocation":"554:8:98","nodeType":"EventDefinition","parameters":{"id":39695,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39686,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"588:6:98","nodeType":"VariableDeclaration","scope":39696,"src":"572:22:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39685,"name":"address","nodeType":"ElementaryTypeName","src":"572:7:98","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39688,"indexed":true,"mutability":"mutable","name":"receiver","nameLocation":"620:8:98","nodeType":"VariableDeclaration","scope":39696,"src":"604:24:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39687,"name":"address","nodeType":"ElementaryTypeName","src":"604:7:98","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39690,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"654:5:98","nodeType":"VariableDeclaration","scope":39696,"src":"638:21:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39689,"name":"address","nodeType":"ElementaryTypeName","src":"638:7:98","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39692,"indexed":false,"mutability":"mutable","name":"assets","nameLocation":"677:6:98","nodeType":"VariableDeclaration","scope":39696,"src":"669:14:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39691,"name":"uint256","nodeType":"ElementaryTypeName","src":"669:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39694,"indexed":false,"mutability":"mutable","name":"shares","nameLocation":"701:6:98","nodeType":"VariableDeclaration","scope":39696,"src":"693:14:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39693,"name":"uint256","nodeType":"ElementaryTypeName","src":"693:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"562:151:98"},"src":"548:166:98"},{"documentation":{"id":39697,"nodeType":"StructuredDocumentation","src":"720:207:98","text":" @dev Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing.\n - MUST be an ERC-20 token contract.\n - MUST NOT revert."},"functionSelector":"38d52e0f","id":39702,"implemented":false,"kind":"function","modifiers":[],"name":"asset","nameLocation":"941:5:98","nodeType":"FunctionDefinition","parameters":{"id":39698,"nodeType":"ParameterList","parameters":[],"src":"946:2:98"},"returnParameters":{"id":39701,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39700,"mutability":"mutable","name":"assetTokenAddress","nameLocation":"980:17:98","nodeType":"VariableDeclaration","scope":39702,"src":"972:25:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39699,"name":"address","nodeType":"ElementaryTypeName","src":"972:7:98","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"971:27:98"},"scope":39833,"src":"932:67:98","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39703,"nodeType":"StructuredDocumentation","src":"1005:286:98","text":" @dev Returns the total amount of the underlying asset that is “managed” by Vault.\n - SHOULD include any compounding that occurs from yield.\n - MUST be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT revert."},"functionSelector":"01e1d114","id":39708,"implemented":false,"kind":"function","modifiers":[],"name":"totalAssets","nameLocation":"1305:11:98","nodeType":"FunctionDefinition","parameters":{"id":39704,"nodeType":"ParameterList","parameters":[],"src":"1316:2:98"},"returnParameters":{"id":39707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39706,"mutability":"mutable","name":"totalManagedAssets","nameLocation":"1350:18:98","nodeType":"VariableDeclaration","scope":39708,"src":"1342:26:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39705,"name":"uint256","nodeType":"ElementaryTypeName","src":"1342:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1341:28:98"},"scope":39833,"src":"1296:74:98","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39709,"nodeType":"StructuredDocumentation","src":"1376:720:98","text":" @dev Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from."},"functionSelector":"c6e6f592","id":39716,"implemented":false,"kind":"function","modifiers":[],"name":"convertToShares","nameLocation":"2110:15:98","nodeType":"FunctionDefinition","parameters":{"id":39712,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39711,"mutability":"mutable","name":"assets","nameLocation":"2134:6:98","nodeType":"VariableDeclaration","scope":39716,"src":"2126:14:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39710,"name":"uint256","nodeType":"ElementaryTypeName","src":"2126:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2125:16:98"},"returnParameters":{"id":39715,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39714,"mutability":"mutable","name":"shares","nameLocation":"2173:6:98","nodeType":"VariableDeclaration","scope":39716,"src":"2165:14:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39713,"name":"uint256","nodeType":"ElementaryTypeName","src":"2165:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2164:16:98"},"scope":39833,"src":"2101:80:98","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39717,"nodeType":"StructuredDocumentation","src":"2187:720:98","text":" @dev Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal\n scenario where all the conditions are met.\n - MUST NOT be inclusive of any fees that are charged against assets in the Vault.\n - MUST NOT show any variations depending on the caller.\n - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange.\n - MUST NOT revert.\n NOTE: This calculation MAY NOT reflect the “per-user” price-per-share, and instead should reflect the\n “average-user’s” price-per-share, meaning what the average user should expect to see when exchanging to and\n from."},"functionSelector":"07a2d13a","id":39724,"implemented":false,"kind":"function","modifiers":[],"name":"convertToAssets","nameLocation":"2921:15:98","nodeType":"FunctionDefinition","parameters":{"id":39720,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39719,"mutability":"mutable","name":"shares","nameLocation":"2945:6:98","nodeType":"VariableDeclaration","scope":39724,"src":"2937:14:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39718,"name":"uint256","nodeType":"ElementaryTypeName","src":"2937:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2936:16:98"},"returnParameters":{"id":39723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39722,"mutability":"mutable","name":"assets","nameLocation":"2984:6:98","nodeType":"VariableDeclaration","scope":39724,"src":"2976:14:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39721,"name":"uint256","nodeType":"ElementaryTypeName","src":"2976:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2975:16:98"},"scope":39833,"src":"2912:80:98","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39725,"nodeType":"StructuredDocumentation","src":"2998:386:98","text":" @dev Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver,\n through a deposit call.\n - MUST return a limited value if receiver is subject to some deposit limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited.\n - MUST NOT revert."},"functionSelector":"402d267d","id":39732,"implemented":false,"kind":"function","modifiers":[],"name":"maxDeposit","nameLocation":"3398:10:98","nodeType":"FunctionDefinition","parameters":{"id":39728,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39727,"mutability":"mutable","name":"receiver","nameLocation":"3417:8:98","nodeType":"VariableDeclaration","scope":39732,"src":"3409:16:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39726,"name":"address","nodeType":"ElementaryTypeName","src":"3409:7:98","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3408:18:98"},"returnParameters":{"id":39731,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39730,"mutability":"mutable","name":"maxAssets","nameLocation":"3458:9:98","nodeType":"VariableDeclaration","scope":39732,"src":"3450:17:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39729,"name":"uint256","nodeType":"ElementaryTypeName","src":"3450:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3449:19:98"},"scope":39833,"src":"3389:80:98","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39733,"nodeType":"StructuredDocumentation","src":"3475:1012:98","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given\n current on-chain conditions.\n - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit\n call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called\n in the same transaction.\n - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the\n deposit would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing."},"functionSelector":"ef8b30f7","id":39740,"implemented":false,"kind":"function","modifiers":[],"name":"previewDeposit","nameLocation":"4501:14:98","nodeType":"FunctionDefinition","parameters":{"id":39736,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39735,"mutability":"mutable","name":"assets","nameLocation":"4524:6:98","nodeType":"VariableDeclaration","scope":39740,"src":"4516:14:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39734,"name":"uint256","nodeType":"ElementaryTypeName","src":"4516:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4515:16:98"},"returnParameters":{"id":39739,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39738,"mutability":"mutable","name":"shares","nameLocation":"4563:6:98","nodeType":"VariableDeclaration","scope":39740,"src":"4555:14:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39737,"name":"uint256","nodeType":"ElementaryTypeName","src":"4555:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4554:16:98"},"scope":39833,"src":"4492:79:98","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39741,"nodeType":"StructuredDocumentation","src":"4577:651:98","text":" @dev Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n deposit execution, and are accounted for during deposit.\n - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"functionSelector":"6e553f65","id":39750,"implemented":false,"kind":"function","modifiers":[],"name":"deposit","nameLocation":"5242:7:98","nodeType":"FunctionDefinition","parameters":{"id":39746,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39743,"mutability":"mutable","name":"assets","nameLocation":"5258:6:98","nodeType":"VariableDeclaration","scope":39750,"src":"5250:14:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39742,"name":"uint256","nodeType":"ElementaryTypeName","src":"5250:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39745,"mutability":"mutable","name":"receiver","nameLocation":"5274:8:98","nodeType":"VariableDeclaration","scope":39750,"src":"5266:16:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39744,"name":"address","nodeType":"ElementaryTypeName","src":"5266:7:98","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5249:34:98"},"returnParameters":{"id":39749,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39748,"mutability":"mutable","name":"shares","nameLocation":"5310:6:98","nodeType":"VariableDeclaration","scope":39750,"src":"5302:14:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39747,"name":"uint256","nodeType":"ElementaryTypeName","src":"5302:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5301:16:98"},"scope":39833,"src":"5233:85:98","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":39751,"nodeType":"StructuredDocumentation","src":"5324:341:98","text":" @dev Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call.\n - MUST return a limited value if receiver is subject to some mint limit.\n - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted.\n - MUST NOT revert."},"functionSelector":"c63d75b6","id":39758,"implemented":false,"kind":"function","modifiers":[],"name":"maxMint","nameLocation":"5679:7:98","nodeType":"FunctionDefinition","parameters":{"id":39754,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39753,"mutability":"mutable","name":"receiver","nameLocation":"5695:8:98","nodeType":"VariableDeclaration","scope":39758,"src":"5687:16:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39752,"name":"address","nodeType":"ElementaryTypeName","src":"5687:7:98","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5686:18:98"},"returnParameters":{"id":39757,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39756,"mutability":"mutable","name":"maxShares","nameLocation":"5736:9:98","nodeType":"VariableDeclaration","scope":39758,"src":"5728:17:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39755,"name":"uint256","nodeType":"ElementaryTypeName","src":"5728:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5727:19:98"},"scope":39833,"src":"5670:77:98","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39759,"nodeType":"StructuredDocumentation","src":"5753:984:98","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given\n current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call\n in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the\n same transaction.\n - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint\n would be accepted, regardless if the user has enough tokens approved, etc.\n - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by minting."},"functionSelector":"b3d7f6b9","id":39766,"implemented":false,"kind":"function","modifiers":[],"name":"previewMint","nameLocation":"6751:11:98","nodeType":"FunctionDefinition","parameters":{"id":39762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39761,"mutability":"mutable","name":"shares","nameLocation":"6771:6:98","nodeType":"VariableDeclaration","scope":39766,"src":"6763:14:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39760,"name":"uint256","nodeType":"ElementaryTypeName","src":"6763:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6762:16:98"},"returnParameters":{"id":39765,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39764,"mutability":"mutable","name":"assets","nameLocation":"6810:6:98","nodeType":"VariableDeclaration","scope":39766,"src":"6802:14:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39763,"name":"uint256","nodeType":"ElementaryTypeName","src":"6802:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6801:16:98"},"scope":39833,"src":"6742:76:98","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39767,"nodeType":"StructuredDocumentation","src":"6824:642:98","text":" @dev Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens.\n - MUST emit the Deposit event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint\n execution, and are accounted for during mint.\n - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not\n approving enough underlying tokens to the Vault contract, etc).\n NOTE: most implementations will require pre-approval of the Vault with the Vault’s underlying asset token."},"functionSelector":"94bf804d","id":39776,"implemented":false,"kind":"function","modifiers":[],"name":"mint","nameLocation":"7480:4:98","nodeType":"FunctionDefinition","parameters":{"id":39772,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39769,"mutability":"mutable","name":"shares","nameLocation":"7493:6:98","nodeType":"VariableDeclaration","scope":39776,"src":"7485:14:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39768,"name":"uint256","nodeType":"ElementaryTypeName","src":"7485:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39771,"mutability":"mutable","name":"receiver","nameLocation":"7509:8:98","nodeType":"VariableDeclaration","scope":39776,"src":"7501:16:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39770,"name":"address","nodeType":"ElementaryTypeName","src":"7501:7:98","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7484:34:98"},"returnParameters":{"id":39775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39774,"mutability":"mutable","name":"assets","nameLocation":"7545:6:98","nodeType":"VariableDeclaration","scope":39776,"src":"7537:14:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39773,"name":"uint256","nodeType":"ElementaryTypeName","src":"7537:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7536:16:98"},"scope":39833,"src":"7471:82:98","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":39777,"nodeType":"StructuredDocumentation","src":"7559:293:98","text":" @dev Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the\n Vault, through a withdraw call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST NOT revert."},"functionSelector":"ce96cb77","id":39784,"implemented":false,"kind":"function","modifiers":[],"name":"maxWithdraw","nameLocation":"7866:11:98","nodeType":"FunctionDefinition","parameters":{"id":39780,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39779,"mutability":"mutable","name":"owner","nameLocation":"7886:5:98","nodeType":"VariableDeclaration","scope":39784,"src":"7878:13:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39778,"name":"address","nodeType":"ElementaryTypeName","src":"7878:7:98","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7877:15:98"},"returnParameters":{"id":39783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39782,"mutability":"mutable","name":"maxAssets","nameLocation":"7924:9:98","nodeType":"VariableDeclaration","scope":39784,"src":"7916:17:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39781,"name":"uint256","nodeType":"ElementaryTypeName","src":"7916:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7915:19:98"},"scope":39833,"src":"7857:78:98","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39785,"nodeType":"StructuredDocumentation","src":"7941:1034:98","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block,\n given current on-chain conditions.\n - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw\n call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if\n called\n in the same transaction.\n - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though\n the withdrawal would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by depositing."},"functionSelector":"0a28a477","id":39792,"implemented":false,"kind":"function","modifiers":[],"name":"previewWithdraw","nameLocation":"8989:15:98","nodeType":"FunctionDefinition","parameters":{"id":39788,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39787,"mutability":"mutable","name":"assets","nameLocation":"9013:6:98","nodeType":"VariableDeclaration","scope":39792,"src":"9005:14:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39786,"name":"uint256","nodeType":"ElementaryTypeName","src":"9005:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9004:16:98"},"returnParameters":{"id":39791,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39790,"mutability":"mutable","name":"shares","nameLocation":"9052:6:98","nodeType":"VariableDeclaration","scope":39792,"src":"9044:14:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39789,"name":"uint256","nodeType":"ElementaryTypeName","src":"9044:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9043:16:98"},"scope":39833,"src":"8980:80:98","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39793,"nodeType":"StructuredDocumentation","src":"9066:670:98","text":" @dev Burns shares from owner and sends exactly assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n withdraw execution, and are accounted for during withdraw.\n - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately."},"functionSelector":"b460af94","id":39804,"implemented":false,"kind":"function","modifiers":[],"name":"withdraw","nameLocation":"9750:8:98","nodeType":"FunctionDefinition","parameters":{"id":39800,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39795,"mutability":"mutable","name":"assets","nameLocation":"9767:6:98","nodeType":"VariableDeclaration","scope":39804,"src":"9759:14:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39794,"name":"uint256","nodeType":"ElementaryTypeName","src":"9759:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39797,"mutability":"mutable","name":"receiver","nameLocation":"9783:8:98","nodeType":"VariableDeclaration","scope":39804,"src":"9775:16:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39796,"name":"address","nodeType":"ElementaryTypeName","src":"9775:7:98","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39799,"mutability":"mutable","name":"owner","nameLocation":"9801:5:98","nodeType":"VariableDeclaration","scope":39804,"src":"9793:13:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39798,"name":"address","nodeType":"ElementaryTypeName","src":"9793:7:98","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9758:49:98"},"returnParameters":{"id":39803,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39802,"mutability":"mutable","name":"shares","nameLocation":"9834:6:98","nodeType":"VariableDeclaration","scope":39804,"src":"9826:14:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39801,"name":"uint256","nodeType":"ElementaryTypeName","src":"9826:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9825:16:98"},"scope":39833,"src":"9741:101:98","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":39805,"nodeType":"StructuredDocumentation","src":"9848:381:98","text":" @dev Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault,\n through a redeem call.\n - MUST return a limited value if owner is subject to some withdrawal limit or timelock.\n - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock.\n - MUST NOT revert."},"functionSelector":"d905777e","id":39812,"implemented":false,"kind":"function","modifiers":[],"name":"maxRedeem","nameLocation":"10243:9:98","nodeType":"FunctionDefinition","parameters":{"id":39808,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39807,"mutability":"mutable","name":"owner","nameLocation":"10261:5:98","nodeType":"VariableDeclaration","scope":39812,"src":"10253:13:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39806,"name":"address","nodeType":"ElementaryTypeName","src":"10253:7:98","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10252:15:98"},"returnParameters":{"id":39811,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39810,"mutability":"mutable","name":"maxShares","nameLocation":"10299:9:98","nodeType":"VariableDeclaration","scope":39812,"src":"10291:17:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39809,"name":"uint256","nodeType":"ElementaryTypeName","src":"10291:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10290:19:98"},"scope":39833,"src":"10234:76:98","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39813,"nodeType":"StructuredDocumentation","src":"10316:1010:98","text":" @dev Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block,\n given current on-chain conditions.\n - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call\n in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the\n same transaction.\n - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the\n redemption would be accepted, regardless if the user has enough shares, etc.\n - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees.\n - MUST NOT revert.\n NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in\n share price or some other type of condition, meaning the depositor will lose assets by redeeming."},"functionSelector":"4cdad506","id":39820,"implemented":false,"kind":"function","modifiers":[],"name":"previewRedeem","nameLocation":"11340:13:98","nodeType":"FunctionDefinition","parameters":{"id":39816,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39815,"mutability":"mutable","name":"shares","nameLocation":"11362:6:98","nodeType":"VariableDeclaration","scope":39820,"src":"11354:14:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39814,"name":"uint256","nodeType":"ElementaryTypeName","src":"11354:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11353:16:98"},"returnParameters":{"id":39819,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39818,"mutability":"mutable","name":"assets","nameLocation":"11401:6:98","nodeType":"VariableDeclaration","scope":39820,"src":"11393:14:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39817,"name":"uint256","nodeType":"ElementaryTypeName","src":"11393:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11392:16:98"},"scope":39833,"src":"11331:78:98","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":39821,"nodeType":"StructuredDocumentation","src":"11415:661:98","text":" @dev Burns exactly shares from owner and sends assets of underlying tokens to receiver.\n - MUST emit the Withdraw event.\n - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the\n redeem execution, and are accounted for during redeem.\n - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner\n not having enough shares, etc).\n NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed.\n Those methods should be performed separately."},"functionSelector":"ba087652","id":39832,"implemented":false,"kind":"function","modifiers":[],"name":"redeem","nameLocation":"12090:6:98","nodeType":"FunctionDefinition","parameters":{"id":39828,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39823,"mutability":"mutable","name":"shares","nameLocation":"12105:6:98","nodeType":"VariableDeclaration","scope":39832,"src":"12097:14:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39822,"name":"uint256","nodeType":"ElementaryTypeName","src":"12097:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39825,"mutability":"mutable","name":"receiver","nameLocation":"12121:8:98","nodeType":"VariableDeclaration","scope":39832,"src":"12113:16:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39824,"name":"address","nodeType":"ElementaryTypeName","src":"12113:7:98","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39827,"mutability":"mutable","name":"owner","nameLocation":"12139:5:98","nodeType":"VariableDeclaration","scope":39832,"src":"12131:13:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39826,"name":"address","nodeType":"ElementaryTypeName","src":"12131:7:98","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12096:49:98"},"returnParameters":{"id":39831,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39830,"mutability":"mutable","name":"assets","nameLocation":"12172:6:98","nodeType":"VariableDeclaration","scope":39832,"src":"12164:14:98","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39829,"name":"uint256","nodeType":"ElementaryTypeName","src":"12164:7:98","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12163:16:98"},"scope":39833,"src":"12081:99:98","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":39834,"src":"398:11784:98","usedErrors":[],"usedEvents":[39684,39696,40043,40052]}],"src":"107:12076:98"},"id":98},"@openzeppelin/contracts/interfaces/IERC5267.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/IERC5267.sol","exportedSymbols":{"IERC5267":[39858]},"id":39859,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":39835,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"107:24:99"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC5267","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":39858,"linearizedBaseContracts":[39858],"name":"IERC5267","nameLocation":"143:8:99","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":39836,"nodeType":"StructuredDocumentation","src":"158:84:99","text":" @dev MAY be emitted to signal that the domain could have changed."},"eventSelector":"0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31","id":39838,"name":"EIP712DomainChanged","nameLocation":"253:19:99","nodeType":"EventDefinition","parameters":{"id":39837,"nodeType":"ParameterList","parameters":[],"src":"272:2:99"},"src":"247:28:99"},{"documentation":{"id":39839,"nodeType":"StructuredDocumentation","src":"281:140:99","text":" @dev returns the fields and values that describe the domain separator used by this contract for EIP-712\n signature."},"functionSelector":"84b0196e","id":39857,"implemented":false,"kind":"function","modifiers":[],"name":"eip712Domain","nameLocation":"435:12:99","nodeType":"FunctionDefinition","parameters":{"id":39840,"nodeType":"ParameterList","parameters":[],"src":"447:2:99"},"returnParameters":{"id":39856,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39842,"mutability":"mutable","name":"fields","nameLocation":"517:6:99","nodeType":"VariableDeclaration","scope":39857,"src":"510:13:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"typeName":{"id":39841,"name":"bytes1","nodeType":"ElementaryTypeName","src":"510:6:99","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"visibility":"internal"},{"constant":false,"id":39844,"mutability":"mutable","name":"name","nameLocation":"551:4:99","nodeType":"VariableDeclaration","scope":39857,"src":"537:18:99","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":39843,"name":"string","nodeType":"ElementaryTypeName","src":"537:6:99","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":39846,"mutability":"mutable","name":"version","nameLocation":"583:7:99","nodeType":"VariableDeclaration","scope":39857,"src":"569:21:99","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":39845,"name":"string","nodeType":"ElementaryTypeName","src":"569:6:99","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":39848,"mutability":"mutable","name":"chainId","nameLocation":"612:7:99","nodeType":"VariableDeclaration","scope":39857,"src":"604:15:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39847,"name":"uint256","nodeType":"ElementaryTypeName","src":"604:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39850,"mutability":"mutable","name":"verifyingContract","nameLocation":"641:17:99","nodeType":"VariableDeclaration","scope":39857,"src":"633:25:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39849,"name":"address","nodeType":"ElementaryTypeName","src":"633:7:99","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39852,"mutability":"mutable","name":"salt","nameLocation":"680:4:99","nodeType":"VariableDeclaration","scope":39857,"src":"672:12:99","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":39851,"name":"bytes32","nodeType":"ElementaryTypeName","src":"672:7:99","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":39855,"mutability":"mutable","name":"extensions","nameLocation":"715:10:99","nodeType":"VariableDeclaration","scope":39857,"src":"698:27:99","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":39853,"name":"uint256","nodeType":"ElementaryTypeName","src":"698:7:99","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":39854,"nodeType":"ArrayTypeName","src":"698:9:99","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"496:239:99"},"scope":39858,"src":"426:310:99","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":39859,"src":"133:605:99","usedErrors":[],"usedEvents":[39838]}],"src":"107:632:99"},"id":99},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/interfaces/draft-IERC6093.sol","exportedSymbols":{"IERC1155Errors":[39995],"IERC20Errors":[39900],"IERC721Errors":[39948]},"id":39996,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":39860,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"112:24:100"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":39861,"nodeType":"StructuredDocumentation","src":"138:139:100","text":" @dev Standard ERC20 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens."},"fullyImplemented":true,"id":39900,"linearizedBaseContracts":[39900],"name":"IERC20Errors","nameLocation":"288:12:100","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":39862,"nodeType":"StructuredDocumentation","src":"307:309:100","text":" @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param balance Current balance for the interacting account.\n @param needed Minimum amount required to perform a transfer."},"errorSelector":"e450d38c","id":39870,"name":"ERC20InsufficientBalance","nameLocation":"627:24:100","nodeType":"ErrorDefinition","parameters":{"id":39869,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39864,"mutability":"mutable","name":"sender","nameLocation":"660:6:100","nodeType":"VariableDeclaration","scope":39870,"src":"652:14:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39863,"name":"address","nodeType":"ElementaryTypeName","src":"652:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39866,"mutability":"mutable","name":"balance","nameLocation":"676:7:100","nodeType":"VariableDeclaration","scope":39870,"src":"668:15:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39865,"name":"uint256","nodeType":"ElementaryTypeName","src":"668:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39868,"mutability":"mutable","name":"needed","nameLocation":"693:6:100","nodeType":"VariableDeclaration","scope":39870,"src":"685:14:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39867,"name":"uint256","nodeType":"ElementaryTypeName","src":"685:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"651:49:100"},"src":"621:80:100"},{"documentation":{"id":39871,"nodeType":"StructuredDocumentation","src":"707:152:100","text":" @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."},"errorSelector":"96c6fd1e","id":39875,"name":"ERC20InvalidSender","nameLocation":"870:18:100","nodeType":"ErrorDefinition","parameters":{"id":39874,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39873,"mutability":"mutable","name":"sender","nameLocation":"897:6:100","nodeType":"VariableDeclaration","scope":39875,"src":"889:14:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39872,"name":"address","nodeType":"ElementaryTypeName","src":"889:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"888:16:100"},"src":"864:41:100"},{"documentation":{"id":39876,"nodeType":"StructuredDocumentation","src":"911:159:100","text":" @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."},"errorSelector":"ec442f05","id":39880,"name":"ERC20InvalidReceiver","nameLocation":"1081:20:100","nodeType":"ErrorDefinition","parameters":{"id":39879,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39878,"mutability":"mutable","name":"receiver","nameLocation":"1110:8:100","nodeType":"VariableDeclaration","scope":39880,"src":"1102:16:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39877,"name":"address","nodeType":"ElementaryTypeName","src":"1102:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1101:18:100"},"src":"1075:45:100"},{"documentation":{"id":39881,"nodeType":"StructuredDocumentation","src":"1126:345:100","text":" @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.\n @param spender Address that may be allowed to operate on tokens without being their owner.\n @param allowance Amount of tokens a `spender` is allowed to operate with.\n @param needed Minimum amount required to perform a transfer."},"errorSelector":"fb8f41b2","id":39889,"name":"ERC20InsufficientAllowance","nameLocation":"1482:26:100","nodeType":"ErrorDefinition","parameters":{"id":39888,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39883,"mutability":"mutable","name":"spender","nameLocation":"1517:7:100","nodeType":"VariableDeclaration","scope":39889,"src":"1509:15:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39882,"name":"address","nodeType":"ElementaryTypeName","src":"1509:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39885,"mutability":"mutable","name":"allowance","nameLocation":"1534:9:100","nodeType":"VariableDeclaration","scope":39889,"src":"1526:17:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39884,"name":"uint256","nodeType":"ElementaryTypeName","src":"1526:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39887,"mutability":"mutable","name":"needed","nameLocation":"1553:6:100","nodeType":"VariableDeclaration","scope":39889,"src":"1545:14:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39886,"name":"uint256","nodeType":"ElementaryTypeName","src":"1545:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1508:52:100"},"src":"1476:85:100"},{"documentation":{"id":39890,"nodeType":"StructuredDocumentation","src":"1567:174:100","text":" @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."},"errorSelector":"e602df05","id":39894,"name":"ERC20InvalidApprover","nameLocation":"1752:20:100","nodeType":"ErrorDefinition","parameters":{"id":39893,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39892,"mutability":"mutable","name":"approver","nameLocation":"1781:8:100","nodeType":"VariableDeclaration","scope":39894,"src":"1773:16:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39891,"name":"address","nodeType":"ElementaryTypeName","src":"1773:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1772:18:100"},"src":"1746:45:100"},{"documentation":{"id":39895,"nodeType":"StructuredDocumentation","src":"1797:195:100","text":" @dev Indicates a failure with the `spender` to be approved. Used in approvals.\n @param spender Address that may be allowed to operate on tokens without being their owner."},"errorSelector":"94280d62","id":39899,"name":"ERC20InvalidSpender","nameLocation":"2003:19:100","nodeType":"ErrorDefinition","parameters":{"id":39898,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39897,"mutability":"mutable","name":"spender","nameLocation":"2031:7:100","nodeType":"VariableDeclaration","scope":39899,"src":"2023:15:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39896,"name":"address","nodeType":"ElementaryTypeName","src":"2023:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2022:17:100"},"src":"1997:43:100"}],"scope":39996,"src":"278:1764:100","usedErrors":[39870,39875,39880,39889,39894,39899],"usedEvents":[]},{"abstract":false,"baseContracts":[],"canonicalName":"IERC721Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":39901,"nodeType":"StructuredDocumentation","src":"2044:141:100","text":" @dev Standard ERC721 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens."},"fullyImplemented":true,"id":39948,"linearizedBaseContracts":[39948],"name":"IERC721Errors","nameLocation":"2196:13:100","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":39902,"nodeType":"StructuredDocumentation","src":"2216:219:100","text":" @dev Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20.\n Used in balance queries.\n @param owner Address of the current owner of a token."},"errorSelector":"89c62b64","id":39906,"name":"ERC721InvalidOwner","nameLocation":"2446:18:100","nodeType":"ErrorDefinition","parameters":{"id":39905,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39904,"mutability":"mutable","name":"owner","nameLocation":"2473:5:100","nodeType":"VariableDeclaration","scope":39906,"src":"2465:13:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39903,"name":"address","nodeType":"ElementaryTypeName","src":"2465:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2464:15:100"},"src":"2440:40:100"},{"documentation":{"id":39907,"nodeType":"StructuredDocumentation","src":"2486:132:100","text":" @dev Indicates a `tokenId` whose `owner` is the zero address.\n @param tokenId Identifier number of a token."},"errorSelector":"7e273289","id":39911,"name":"ERC721NonexistentToken","nameLocation":"2629:22:100","nodeType":"ErrorDefinition","parameters":{"id":39910,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39909,"mutability":"mutable","name":"tokenId","nameLocation":"2660:7:100","nodeType":"VariableDeclaration","scope":39911,"src":"2652:15:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39908,"name":"uint256","nodeType":"ElementaryTypeName","src":"2652:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2651:17:100"},"src":"2623:46:100"},{"documentation":{"id":39912,"nodeType":"StructuredDocumentation","src":"2675:289:100","text":" @dev Indicates an error related to the ownership over a particular token. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param tokenId Identifier number of a token.\n @param owner Address of the current owner of a token."},"errorSelector":"64283d7b","id":39920,"name":"ERC721IncorrectOwner","nameLocation":"2975:20:100","nodeType":"ErrorDefinition","parameters":{"id":39919,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39914,"mutability":"mutable","name":"sender","nameLocation":"3004:6:100","nodeType":"VariableDeclaration","scope":39920,"src":"2996:14:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39913,"name":"address","nodeType":"ElementaryTypeName","src":"2996:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39916,"mutability":"mutable","name":"tokenId","nameLocation":"3020:7:100","nodeType":"VariableDeclaration","scope":39920,"src":"3012:15:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39915,"name":"uint256","nodeType":"ElementaryTypeName","src":"3012:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39918,"mutability":"mutable","name":"owner","nameLocation":"3037:5:100","nodeType":"VariableDeclaration","scope":39920,"src":"3029:13:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39917,"name":"address","nodeType":"ElementaryTypeName","src":"3029:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2995:48:100"},"src":"2969:75:100"},{"documentation":{"id":39921,"nodeType":"StructuredDocumentation","src":"3050:152:100","text":" @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."},"errorSelector":"73c6ac6e","id":39925,"name":"ERC721InvalidSender","nameLocation":"3213:19:100","nodeType":"ErrorDefinition","parameters":{"id":39924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39923,"mutability":"mutable","name":"sender","nameLocation":"3241:6:100","nodeType":"VariableDeclaration","scope":39925,"src":"3233:14:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39922,"name":"address","nodeType":"ElementaryTypeName","src":"3233:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3232:16:100"},"src":"3207:42:100"},{"documentation":{"id":39926,"nodeType":"StructuredDocumentation","src":"3255:159:100","text":" @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."},"errorSelector":"64a0ae92","id":39930,"name":"ERC721InvalidReceiver","nameLocation":"3425:21:100","nodeType":"ErrorDefinition","parameters":{"id":39929,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39928,"mutability":"mutable","name":"receiver","nameLocation":"3455:8:100","nodeType":"VariableDeclaration","scope":39930,"src":"3447:16:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39927,"name":"address","nodeType":"ElementaryTypeName","src":"3447:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3446:18:100"},"src":"3419:46:100"},{"documentation":{"id":39931,"nodeType":"StructuredDocumentation","src":"3471:247:100","text":" @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n @param operator Address that may be allowed to operate on tokens without being their owner.\n @param tokenId Identifier number of a token."},"errorSelector":"177e802f","id":39937,"name":"ERC721InsufficientApproval","nameLocation":"3729:26:100","nodeType":"ErrorDefinition","parameters":{"id":39936,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39933,"mutability":"mutable","name":"operator","nameLocation":"3764:8:100","nodeType":"VariableDeclaration","scope":39937,"src":"3756:16:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39932,"name":"address","nodeType":"ElementaryTypeName","src":"3756:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39935,"mutability":"mutable","name":"tokenId","nameLocation":"3782:7:100","nodeType":"VariableDeclaration","scope":39937,"src":"3774:15:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39934,"name":"uint256","nodeType":"ElementaryTypeName","src":"3774:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3755:35:100"},"src":"3723:68:100"},{"documentation":{"id":39938,"nodeType":"StructuredDocumentation","src":"3797:174:100","text":" @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."},"errorSelector":"a9fbf51f","id":39942,"name":"ERC721InvalidApprover","nameLocation":"3982:21:100","nodeType":"ErrorDefinition","parameters":{"id":39941,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39940,"mutability":"mutable","name":"approver","nameLocation":"4012:8:100","nodeType":"VariableDeclaration","scope":39942,"src":"4004:16:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39939,"name":"address","nodeType":"ElementaryTypeName","src":"4004:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4003:18:100"},"src":"3976:46:100"},{"documentation":{"id":39943,"nodeType":"StructuredDocumentation","src":"4028:197:100","text":" @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n @param operator Address that may be allowed to operate on tokens without being their owner."},"errorSelector":"5b08ba18","id":39947,"name":"ERC721InvalidOperator","nameLocation":"4236:21:100","nodeType":"ErrorDefinition","parameters":{"id":39946,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39945,"mutability":"mutable","name":"operator","nameLocation":"4266:8:100","nodeType":"VariableDeclaration","scope":39947,"src":"4258:16:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39944,"name":"address","nodeType":"ElementaryTypeName","src":"4258:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4257:18:100"},"src":"4230:46:100"}],"scope":39996,"src":"2186:2092:100","usedErrors":[39906,39911,39920,39925,39930,39937,39942,39947],"usedEvents":[]},{"abstract":false,"baseContracts":[],"canonicalName":"IERC1155Errors","contractDependencies":[],"contractKind":"interface","documentation":{"id":39949,"nodeType":"StructuredDocumentation","src":"4280:143:100","text":" @dev Standard ERC1155 Errors\n Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens."},"fullyImplemented":true,"id":39995,"linearizedBaseContracts":[39995],"name":"IERC1155Errors","nameLocation":"4434:14:100","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":39950,"nodeType":"StructuredDocumentation","src":"4455:361:100","text":" @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred.\n @param balance Current balance for the interacting account.\n @param needed Minimum amount required to perform a transfer.\n @param tokenId Identifier number of a token."},"errorSelector":"03dee4c5","id":39960,"name":"ERC1155InsufficientBalance","nameLocation":"4827:26:100","nodeType":"ErrorDefinition","parameters":{"id":39959,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39952,"mutability":"mutable","name":"sender","nameLocation":"4862:6:100","nodeType":"VariableDeclaration","scope":39960,"src":"4854:14:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39951,"name":"address","nodeType":"ElementaryTypeName","src":"4854:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39954,"mutability":"mutable","name":"balance","nameLocation":"4878:7:100","nodeType":"VariableDeclaration","scope":39960,"src":"4870:15:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39953,"name":"uint256","nodeType":"ElementaryTypeName","src":"4870:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39956,"mutability":"mutable","name":"needed","nameLocation":"4895:6:100","nodeType":"VariableDeclaration","scope":39960,"src":"4887:14:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39955,"name":"uint256","nodeType":"ElementaryTypeName","src":"4887:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39958,"mutability":"mutable","name":"tokenId","nameLocation":"4911:7:100","nodeType":"VariableDeclaration","scope":39960,"src":"4903:15:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39957,"name":"uint256","nodeType":"ElementaryTypeName","src":"4903:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4853:66:100"},"src":"4821:99:100"},{"documentation":{"id":39961,"nodeType":"StructuredDocumentation","src":"4926:152:100","text":" @dev Indicates a failure with the token `sender`. Used in transfers.\n @param sender Address whose tokens are being transferred."},"errorSelector":"01a83514","id":39965,"name":"ERC1155InvalidSender","nameLocation":"5089:20:100","nodeType":"ErrorDefinition","parameters":{"id":39964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39963,"mutability":"mutable","name":"sender","nameLocation":"5118:6:100","nodeType":"VariableDeclaration","scope":39965,"src":"5110:14:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39962,"name":"address","nodeType":"ElementaryTypeName","src":"5110:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5109:16:100"},"src":"5083:43:100"},{"documentation":{"id":39966,"nodeType":"StructuredDocumentation","src":"5132:159:100","text":" @dev Indicates a failure with the token `receiver`. Used in transfers.\n @param receiver Address to which tokens are being transferred."},"errorSelector":"57f447ce","id":39970,"name":"ERC1155InvalidReceiver","nameLocation":"5302:22:100","nodeType":"ErrorDefinition","parameters":{"id":39969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39968,"mutability":"mutable","name":"receiver","nameLocation":"5333:8:100","nodeType":"VariableDeclaration","scope":39970,"src":"5325:16:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39967,"name":"address","nodeType":"ElementaryTypeName","src":"5325:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5324:18:100"},"src":"5296:47:100"},{"documentation":{"id":39971,"nodeType":"StructuredDocumentation","src":"5349:256:100","text":" @dev Indicates a failure with the `operator`’s approval. Used in transfers.\n @param operator Address that may be allowed to operate on tokens without being their owner.\n @param owner Address of the current owner of a token."},"errorSelector":"e237d922","id":39977,"name":"ERC1155MissingApprovalForAll","nameLocation":"5616:28:100","nodeType":"ErrorDefinition","parameters":{"id":39976,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39973,"mutability":"mutable","name":"operator","nameLocation":"5653:8:100","nodeType":"VariableDeclaration","scope":39977,"src":"5645:16:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39972,"name":"address","nodeType":"ElementaryTypeName","src":"5645:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":39975,"mutability":"mutable","name":"owner","nameLocation":"5671:5:100","nodeType":"VariableDeclaration","scope":39977,"src":"5663:13:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39974,"name":"address","nodeType":"ElementaryTypeName","src":"5663:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5644:33:100"},"src":"5610:68:100"},{"documentation":{"id":39978,"nodeType":"StructuredDocumentation","src":"5684:174:100","text":" @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.\n @param approver Address initiating an approval operation."},"errorSelector":"3e31884e","id":39982,"name":"ERC1155InvalidApprover","nameLocation":"5869:22:100","nodeType":"ErrorDefinition","parameters":{"id":39981,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39980,"mutability":"mutable","name":"approver","nameLocation":"5900:8:100","nodeType":"VariableDeclaration","scope":39982,"src":"5892:16:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39979,"name":"address","nodeType":"ElementaryTypeName","src":"5892:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5891:18:100"},"src":"5863:47:100"},{"documentation":{"id":39983,"nodeType":"StructuredDocumentation","src":"5916:197:100","text":" @dev Indicates a failure with the `operator` to be approved. Used in approvals.\n @param operator Address that may be allowed to operate on tokens without being their owner."},"errorSelector":"ced3e100","id":39987,"name":"ERC1155InvalidOperator","nameLocation":"6124:22:100","nodeType":"ErrorDefinition","parameters":{"id":39986,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39985,"mutability":"mutable","name":"operator","nameLocation":"6155:8:100","nodeType":"VariableDeclaration","scope":39987,"src":"6147:16:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":39984,"name":"address","nodeType":"ElementaryTypeName","src":"6147:7:100","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6146:18:100"},"src":"6118:47:100"},{"documentation":{"id":39988,"nodeType":"StructuredDocumentation","src":"6171:280:100","text":" @dev Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation.\n Used in batch transfers.\n @param idsLength Length of the array of token identifiers\n @param valuesLength Length of the array of token amounts"},"errorSelector":"5b059991","id":39994,"name":"ERC1155InvalidArrayLength","nameLocation":"6462:25:100","nodeType":"ErrorDefinition","parameters":{"id":39993,"nodeType":"ParameterList","parameters":[{"constant":false,"id":39990,"mutability":"mutable","name":"idsLength","nameLocation":"6496:9:100","nodeType":"VariableDeclaration","scope":39994,"src":"6488:17:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39989,"name":"uint256","nodeType":"ElementaryTypeName","src":"6488:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":39992,"mutability":"mutable","name":"valuesLength","nameLocation":"6515:12:100","nodeType":"VariableDeclaration","scope":39994,"src":"6507:20:100","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":39991,"name":"uint256","nodeType":"ElementaryTypeName","src":"6507:7:100","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6487:41:100"},"src":"6456:73:100"}],"scope":39996,"src":"4424:2107:100","usedErrors":[39960,39965,39970,39977,39982,39987,39994],"usedEvents":[]}],"src":"112:6420:100"},"id":100},"@openzeppelin/contracts/proxy/Proxy.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/proxy/Proxy.sol","exportedSymbols":{"Proxy":[40031]},"id":40032,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":39997,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"99:24:101"},{"abstract":true,"baseContracts":[],"canonicalName":"Proxy","contractDependencies":[],"contractKind":"contract","documentation":{"id":39998,"nodeType":"StructuredDocumentation","src":"125:598:101","text":" @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n be specified by overriding the virtual {_implementation} function.\n Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n different contract through the {_delegate} function.\n The success and return data of the delegated call will be returned back to the caller of the proxy."},"fullyImplemented":false,"id":40031,"linearizedBaseContracts":[40031],"name":"Proxy","nameLocation":"742:5:101","nodeType":"ContractDefinition","nodes":[{"body":{"id":40005,"nodeType":"Block","src":"1009:835:101","statements":[{"AST":{"nativeSrc":"1028:810:101","nodeType":"YulBlock","src":"1028:810:101","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1281:1:101","nodeType":"YulLiteral","src":"1281:1:101","type":"","value":"0"},{"kind":"number","nativeSrc":"1284:1:101","nodeType":"YulLiteral","src":"1284:1:101","type":"","value":"0"},{"arguments":[],"functionName":{"name":"calldatasize","nativeSrc":"1287:12:101","nodeType":"YulIdentifier","src":"1287:12:101"},"nativeSrc":"1287:14:101","nodeType":"YulFunctionCall","src":"1287:14:101"}],"functionName":{"name":"calldatacopy","nativeSrc":"1268:12:101","nodeType":"YulIdentifier","src":"1268:12:101"},"nativeSrc":"1268:34:101","nodeType":"YulFunctionCall","src":"1268:34:101"},"nativeSrc":"1268:34:101","nodeType":"YulExpressionStatement","src":"1268:34:101"},{"nativeSrc":"1429:74:101","nodeType":"YulVariableDeclaration","src":"1429:74:101","value":{"arguments":[{"arguments":[],"functionName":{"name":"gas","nativeSrc":"1456:3:101","nodeType":"YulIdentifier","src":"1456:3:101"},"nativeSrc":"1456:5:101","nodeType":"YulFunctionCall","src":"1456:5:101"},{"name":"implementation","nativeSrc":"1463:14:101","nodeType":"YulIdentifier","src":"1463:14:101"},{"kind":"number","nativeSrc":"1479:1:101","nodeType":"YulLiteral","src":"1479:1:101","type":"","value":"0"},{"arguments":[],"functionName":{"name":"calldatasize","nativeSrc":"1482:12:101","nodeType":"YulIdentifier","src":"1482:12:101"},"nativeSrc":"1482:14:101","nodeType":"YulFunctionCall","src":"1482:14:101"},{"kind":"number","nativeSrc":"1498:1:101","nodeType":"YulLiteral","src":"1498:1:101","type":"","value":"0"},{"kind":"number","nativeSrc":"1501:1:101","nodeType":"YulLiteral","src":"1501:1:101","type":"","value":"0"}],"functionName":{"name":"delegatecall","nativeSrc":"1443:12:101","nodeType":"YulIdentifier","src":"1443:12:101"},"nativeSrc":"1443:60:101","nodeType":"YulFunctionCall","src":"1443:60:101"},"variables":[{"name":"result","nativeSrc":"1433:6:101","nodeType":"YulTypedName","src":"1433:6:101","type":""}]},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1571:1:101","nodeType":"YulLiteral","src":"1571:1:101","type":"","value":"0"},{"kind":"number","nativeSrc":"1574:1:101","nodeType":"YulLiteral","src":"1574:1:101","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"1577:14:101","nodeType":"YulIdentifier","src":"1577:14:101"},"nativeSrc":"1577:16:101","nodeType":"YulFunctionCall","src":"1577:16:101"}],"functionName":{"name":"returndatacopy","nativeSrc":"1556:14:101","nodeType":"YulIdentifier","src":"1556:14:101"},"nativeSrc":"1556:38:101","nodeType":"YulFunctionCall","src":"1556:38:101"},"nativeSrc":"1556:38:101","nodeType":"YulExpressionStatement","src":"1556:38:101"},{"cases":[{"body":{"nativeSrc":"1689:59:101","nodeType":"YulBlock","src":"1689:59:101","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1714:1:101","nodeType":"YulLiteral","src":"1714:1:101","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"1717:14:101","nodeType":"YulIdentifier","src":"1717:14:101"},"nativeSrc":"1717:16:101","nodeType":"YulFunctionCall","src":"1717:16:101"}],"functionName":{"name":"revert","nativeSrc":"1707:6:101","nodeType":"YulIdentifier","src":"1707:6:101"},"nativeSrc":"1707:27:101","nodeType":"YulFunctionCall","src":"1707:27:101"},"nativeSrc":"1707:27:101","nodeType":"YulExpressionStatement","src":"1707:27:101"}]},"nativeSrc":"1682:66:101","nodeType":"YulCase","src":"1682:66:101","value":{"kind":"number","nativeSrc":"1687:1:101","nodeType":"YulLiteral","src":"1687:1:101","type":"","value":"0"}},{"body":{"nativeSrc":"1769:59:101","nodeType":"YulBlock","src":"1769:59:101","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1794:1:101","nodeType":"YulLiteral","src":"1794:1:101","type":"","value":"0"},{"arguments":[],"functionName":{"name":"returndatasize","nativeSrc":"1797:14:101","nodeType":"YulIdentifier","src":"1797:14:101"},"nativeSrc":"1797:16:101","nodeType":"YulFunctionCall","src":"1797:16:101"}],"functionName":{"name":"return","nativeSrc":"1787:6:101","nodeType":"YulIdentifier","src":"1787:6:101"},"nativeSrc":"1787:27:101","nodeType":"YulFunctionCall","src":"1787:27:101"},"nativeSrc":"1787:27:101","nodeType":"YulExpressionStatement","src":"1787:27:101"}]},"nativeSrc":"1761:67:101","nodeType":"YulCase","src":"1761:67:101","value":"default"}],"expression":{"name":"result","nativeSrc":"1615:6:101","nodeType":"YulIdentifier","src":"1615:6:101"},"nativeSrc":"1608:220:101","nodeType":"YulSwitch","src":"1608:220:101"}]},"evmVersion":"cancun","externalReferences":[{"declaration":40001,"isOffset":false,"isSlot":false,"src":"1463:14:101","valueSize":1}],"id":40004,"nodeType":"InlineAssembly","src":"1019:819:101"}]},"documentation":{"id":39999,"nodeType":"StructuredDocumentation","src":"754:190:101","text":" @dev Delegates the current call to `implementation`.\n This function does not return to its internal call site, it will return directly to the external caller."},"id":40006,"implemented":true,"kind":"function","modifiers":[],"name":"_delegate","nameLocation":"958:9:101","nodeType":"FunctionDefinition","parameters":{"id":40002,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40001,"mutability":"mutable","name":"implementation","nameLocation":"976:14:101","nodeType":"VariableDeclaration","scope":40006,"src":"968:22:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40000,"name":"address","nodeType":"ElementaryTypeName","src":"968:7:101","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"967:24:101"},"returnParameters":{"id":40003,"nodeType":"ParameterList","parameters":[],"src":"1009:0:101"},"scope":40031,"src":"949:895:101","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"documentation":{"id":40007,"nodeType":"StructuredDocumentation","src":"1850:173:101","text":" @dev This is a virtual function that should be overridden so it returns the address to which the fallback\n function and {_fallback} should delegate."},"id":40012,"implemented":false,"kind":"function","modifiers":[],"name":"_implementation","nameLocation":"2037:15:101","nodeType":"FunctionDefinition","parameters":{"id":40008,"nodeType":"ParameterList","parameters":[],"src":"2052:2:101"},"returnParameters":{"id":40011,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40010,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40012,"src":"2086:7:101","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40009,"name":"address","nodeType":"ElementaryTypeName","src":"2086:7:101","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2085:9:101"},"scope":40031,"src":"2028:67:101","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":40021,"nodeType":"Block","src":"2361:45:101","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":40017,"name":"_implementation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40012,"src":"2381:15:101","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":40018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2381:17:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":40016,"name":"_delegate","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40006,"src":"2371:9:101","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":40019,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2371:28:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40020,"nodeType":"ExpressionStatement","src":"2371:28:101"}]},"documentation":{"id":40013,"nodeType":"StructuredDocumentation","src":"2101:217:101","text":" @dev Delegates the current call to the address returned by `_implementation()`.\n This function does not return to its internal call site, it will return directly to the external caller."},"id":40022,"implemented":true,"kind":"function","modifiers":[],"name":"_fallback","nameLocation":"2332:9:101","nodeType":"FunctionDefinition","parameters":{"id":40014,"nodeType":"ParameterList","parameters":[],"src":"2341:2:101"},"returnParameters":{"id":40015,"nodeType":"ParameterList","parameters":[],"src":"2361:0:101"},"scope":40031,"src":"2323:83:101","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":40029,"nodeType":"Block","src":"2639:28:101","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":40026,"name":"_fallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40022,"src":"2649:9:101","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":40027,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2649:11:101","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40028,"nodeType":"ExpressionStatement","src":"2649:11:101"}]},"documentation":{"id":40023,"nodeType":"StructuredDocumentation","src":"2412:186:101","text":" @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n function in the contract matches the call data."},"id":40030,"implemented":true,"kind":"fallback","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":40024,"nodeType":"ParameterList","parameters":[],"src":"2611:2:101"},"returnParameters":{"id":40025,"nodeType":"ParameterList","parameters":[],"src":"2639:0:101"},"scope":40031,"src":"2603:64:101","stateMutability":"payable","virtual":true,"visibility":"external"}],"scope":40032,"src":"724:1945:101","usedErrors":[],"usedEvents":[]}],"src":"99:2571:101"},"id":101},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","exportedSymbols":{"IERC20":[40109]},"id":40110,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":40033,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"106:24:102"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20","contractDependencies":[],"contractKind":"interface","documentation":{"id":40034,"nodeType":"StructuredDocumentation","src":"132:70:102","text":" @dev Interface of the ERC20 standard as defined in the EIP."},"fullyImplemented":false,"id":40109,"linearizedBaseContracts":[40109],"name":"IERC20","nameLocation":"213:6:102","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":40035,"nodeType":"StructuredDocumentation","src":"226:158:102","text":" @dev Emitted when `value` tokens are moved from one account (`from`) to\n another (`to`).\n Note that `value` may be zero."},"eventSelector":"ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","id":40043,"name":"Transfer","nameLocation":"395:8:102","nodeType":"EventDefinition","parameters":{"id":40042,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40037,"indexed":true,"mutability":"mutable","name":"from","nameLocation":"420:4:102","nodeType":"VariableDeclaration","scope":40043,"src":"404:20:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40036,"name":"address","nodeType":"ElementaryTypeName","src":"404:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40039,"indexed":true,"mutability":"mutable","name":"to","nameLocation":"442:2:102","nodeType":"VariableDeclaration","scope":40043,"src":"426:18:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40038,"name":"address","nodeType":"ElementaryTypeName","src":"426:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40041,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"454:5:102","nodeType":"VariableDeclaration","scope":40043,"src":"446:13:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40040,"name":"uint256","nodeType":"ElementaryTypeName","src":"446:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"403:57:102"},"src":"389:72:102"},{"anonymous":false,"documentation":{"id":40044,"nodeType":"StructuredDocumentation","src":"467:148:102","text":" @dev Emitted when the allowance of a `spender` for an `owner` is set by\n a call to {approve}. `value` is the new allowance."},"eventSelector":"8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925","id":40052,"name":"Approval","nameLocation":"626:8:102","nodeType":"EventDefinition","parameters":{"id":40051,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40046,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"651:5:102","nodeType":"VariableDeclaration","scope":40052,"src":"635:21:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40045,"name":"address","nodeType":"ElementaryTypeName","src":"635:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40048,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"674:7:102","nodeType":"VariableDeclaration","scope":40052,"src":"658:23:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40047,"name":"address","nodeType":"ElementaryTypeName","src":"658:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40050,"indexed":false,"mutability":"mutable","name":"value","nameLocation":"691:5:102","nodeType":"VariableDeclaration","scope":40052,"src":"683:13:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40049,"name":"uint256","nodeType":"ElementaryTypeName","src":"683:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"634:63:102"},"src":"620:78:102"},{"documentation":{"id":40053,"nodeType":"StructuredDocumentation","src":"704:65:102","text":" @dev Returns the value of tokens in existence."},"functionSelector":"18160ddd","id":40058,"implemented":false,"kind":"function","modifiers":[],"name":"totalSupply","nameLocation":"783:11:102","nodeType":"FunctionDefinition","parameters":{"id":40054,"nodeType":"ParameterList","parameters":[],"src":"794:2:102"},"returnParameters":{"id":40057,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40056,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40058,"src":"820:7:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40055,"name":"uint256","nodeType":"ElementaryTypeName","src":"820:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"819:9:102"},"scope":40109,"src":"774:55:102","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":40059,"nodeType":"StructuredDocumentation","src":"835:71:102","text":" @dev Returns the value of tokens owned by `account`."},"functionSelector":"70a08231","id":40066,"implemented":false,"kind":"function","modifiers":[],"name":"balanceOf","nameLocation":"920:9:102","nodeType":"FunctionDefinition","parameters":{"id":40062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40061,"mutability":"mutable","name":"account","nameLocation":"938:7:102","nodeType":"VariableDeclaration","scope":40066,"src":"930:15:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40060,"name":"address","nodeType":"ElementaryTypeName","src":"930:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"929:17:102"},"returnParameters":{"id":40065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40064,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40066,"src":"970:7:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40063,"name":"uint256","nodeType":"ElementaryTypeName","src":"970:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"969:9:102"},"scope":40109,"src":"911:68:102","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":40067,"nodeType":"StructuredDocumentation","src":"985:213:102","text":" @dev Moves a `value` amount of tokens from the caller's account to `to`.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"a9059cbb","id":40076,"implemented":false,"kind":"function","modifiers":[],"name":"transfer","nameLocation":"1212:8:102","nodeType":"FunctionDefinition","parameters":{"id":40072,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40069,"mutability":"mutable","name":"to","nameLocation":"1229:2:102","nodeType":"VariableDeclaration","scope":40076,"src":"1221:10:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40068,"name":"address","nodeType":"ElementaryTypeName","src":"1221:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40071,"mutability":"mutable","name":"value","nameLocation":"1241:5:102","nodeType":"VariableDeclaration","scope":40076,"src":"1233:13:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40070,"name":"uint256","nodeType":"ElementaryTypeName","src":"1233:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1220:27:102"},"returnParameters":{"id":40075,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40074,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40076,"src":"1266:4:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":40073,"name":"bool","nodeType":"ElementaryTypeName","src":"1266:4:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1265:6:102"},"scope":40109,"src":"1203:69:102","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":40077,"nodeType":"StructuredDocumentation","src":"1278:264:102","text":" @dev Returns the remaining number of tokens that `spender` will be\n allowed to spend on behalf of `owner` through {transferFrom}. This is\n zero by default.\n This value changes when {approve} or {transferFrom} are called."},"functionSelector":"dd62ed3e","id":40086,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"1556:9:102","nodeType":"FunctionDefinition","parameters":{"id":40082,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40079,"mutability":"mutable","name":"owner","nameLocation":"1574:5:102","nodeType":"VariableDeclaration","scope":40086,"src":"1566:13:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40078,"name":"address","nodeType":"ElementaryTypeName","src":"1566:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40081,"mutability":"mutable","name":"spender","nameLocation":"1589:7:102","nodeType":"VariableDeclaration","scope":40086,"src":"1581:15:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40080,"name":"address","nodeType":"ElementaryTypeName","src":"1581:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1565:32:102"},"returnParameters":{"id":40085,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40084,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40086,"src":"1621:7:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40083,"name":"uint256","nodeType":"ElementaryTypeName","src":"1621:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1620:9:102"},"scope":40109,"src":"1547:83:102","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":40087,"nodeType":"StructuredDocumentation","src":"1636:667:102","text":" @dev Sets a `value` amount of tokens as the allowance of `spender` over the\n caller's tokens.\n Returns a boolean value indicating whether the operation succeeded.\n IMPORTANT: Beware that changing an allowance with this method brings the risk\n that someone may use both the old and the new allowance by unfortunate\n transaction ordering. One possible solution to mitigate this race\n condition is to first reduce the spender's allowance to 0 and set the\n desired value afterwards:\n https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n Emits an {Approval} event."},"functionSelector":"095ea7b3","id":40096,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"2317:7:102","nodeType":"FunctionDefinition","parameters":{"id":40092,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40089,"mutability":"mutable","name":"spender","nameLocation":"2333:7:102","nodeType":"VariableDeclaration","scope":40096,"src":"2325:15:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40088,"name":"address","nodeType":"ElementaryTypeName","src":"2325:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40091,"mutability":"mutable","name":"value","nameLocation":"2350:5:102","nodeType":"VariableDeclaration","scope":40096,"src":"2342:13:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40090,"name":"uint256","nodeType":"ElementaryTypeName","src":"2342:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2324:32:102"},"returnParameters":{"id":40095,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40094,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40096,"src":"2375:4:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":40093,"name":"bool","nodeType":"ElementaryTypeName","src":"2375:4:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2374:6:102"},"scope":40109,"src":"2308:73:102","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":40097,"nodeType":"StructuredDocumentation","src":"2387:297:102","text":" @dev Moves a `value` amount of tokens from `from` to `to` using the\n allowance mechanism. `value` is then deducted from the caller's\n allowance.\n Returns a boolean value indicating whether the operation succeeded.\n Emits a {Transfer} event."},"functionSelector":"23b872dd","id":40108,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"2698:12:102","nodeType":"FunctionDefinition","parameters":{"id":40104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40099,"mutability":"mutable","name":"from","nameLocation":"2719:4:102","nodeType":"VariableDeclaration","scope":40108,"src":"2711:12:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40098,"name":"address","nodeType":"ElementaryTypeName","src":"2711:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40101,"mutability":"mutable","name":"to","nameLocation":"2733:2:102","nodeType":"VariableDeclaration","scope":40108,"src":"2725:10:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40100,"name":"address","nodeType":"ElementaryTypeName","src":"2725:7:102","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40103,"mutability":"mutable","name":"value","nameLocation":"2745:5:102","nodeType":"VariableDeclaration","scope":40108,"src":"2737:13:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40102,"name":"uint256","nodeType":"ElementaryTypeName","src":"2737:7:102","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2710:41:102"},"returnParameters":{"id":40107,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40106,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40108,"src":"2770:4:102","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":40105,"name":"bool","nodeType":"ElementaryTypeName","src":"2770:4:102","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2769:6:102"},"scope":40109,"src":"2689:87:102","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":40110,"src":"203:2575:102","usedErrors":[],"usedEvents":[40043,40052]}],"src":"106:2673:102"},"id":102},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","exportedSymbols":{"IERC20":[40109],"IERC20Metadata":[40135]},"id":40136,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":40111,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"125:24:103"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","id":40113,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40136,"sourceUnit":40110,"src":"151:37:103","symbolAliases":[{"foreign":{"id":40112,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"159:6:103","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":40115,"name":"IERC20","nameLocations":["305:6:103"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"305:6:103"},"id":40116,"nodeType":"InheritanceSpecifier","src":"305:6:103"}],"canonicalName":"IERC20Metadata","contractDependencies":[],"contractKind":"interface","documentation":{"id":40114,"nodeType":"StructuredDocumentation","src":"190:86:103","text":" @dev Interface for the optional metadata functions from the ERC20 standard."},"fullyImplemented":false,"id":40135,"linearizedBaseContracts":[40135,40109],"name":"IERC20Metadata","nameLocation":"287:14:103","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":40117,"nodeType":"StructuredDocumentation","src":"318:54:103","text":" @dev Returns the name of the token."},"functionSelector":"06fdde03","id":40122,"implemented":false,"kind":"function","modifiers":[],"name":"name","nameLocation":"386:4:103","nodeType":"FunctionDefinition","parameters":{"id":40118,"nodeType":"ParameterList","parameters":[],"src":"390:2:103"},"returnParameters":{"id":40121,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40120,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40122,"src":"416:13:103","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":40119,"name":"string","nodeType":"ElementaryTypeName","src":"416:6:103","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"415:15:103"},"scope":40135,"src":"377:54:103","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":40123,"nodeType":"StructuredDocumentation","src":"437:56:103","text":" @dev Returns the symbol of the token."},"functionSelector":"95d89b41","id":40128,"implemented":false,"kind":"function","modifiers":[],"name":"symbol","nameLocation":"507:6:103","nodeType":"FunctionDefinition","parameters":{"id":40124,"nodeType":"ParameterList","parameters":[],"src":"513:2:103"},"returnParameters":{"id":40127,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40126,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40128,"src":"539:13:103","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":40125,"name":"string","nodeType":"ElementaryTypeName","src":"539:6:103","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"538:15:103"},"scope":40135,"src":"498:56:103","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":40129,"nodeType":"StructuredDocumentation","src":"560:65:103","text":" @dev Returns the decimals places of the token."},"functionSelector":"313ce567","id":40134,"implemented":false,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"639:8:103","nodeType":"FunctionDefinition","parameters":{"id":40130,"nodeType":"ParameterList","parameters":[],"src":"647:2:103"},"returnParameters":{"id":40133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40132,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40134,"src":"673:5:103","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":40131,"name":"uint8","nodeType":"ElementaryTypeName","src":"673:5:103","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"672:7:103"},"scope":40135,"src":"630:50:103","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":40136,"src":"277:405:103","usedErrors":[],"usedEvents":[40043,40052]}],"src":"125:558:103"},"id":103},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol","exportedSymbols":{"IERC20Permit":[40171]},"id":40172,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":40137,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"123:24:104"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC20Permit","contractDependencies":[],"contractKind":"interface","documentation":{"id":40138,"nodeType":"StructuredDocumentation","src":"149:1963:104","text":" @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in\n https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].\n Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by\n presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't\n need to send a transaction, and thus is not required to hold Ether at all.\n ==== Security Considerations\n There are two important considerations concerning the use of `permit`. The first is that a valid permit signature\n expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be\n considered as an intention to spend the allowance in any specific way. The second is that because permits have\n built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should\n take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be\n generally recommended is:\n ```solidity\n function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public {\n try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {}\n doThing(..., value);\n }\n function doThing(..., uint256 value) public {\n token.safeTransferFrom(msg.sender, address(this), value);\n ...\n }\n ```\n Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of\n `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also\n {SafeERC20-safeTransferFrom}).\n Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so\n contracts should have entry points that don't rely on permit."},"fullyImplemented":false,"id":40171,"linearizedBaseContracts":[40171],"name":"IERC20Permit","nameLocation":"2123:12:104","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":40139,"nodeType":"StructuredDocumentation","src":"2142:850:104","text":" @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,\n given ``owner``'s signed approval.\n IMPORTANT: The same issues {IERC20-approve} has related to transaction\n ordering also apply here.\n Emits an {Approval} event.\n Requirements:\n - `spender` cannot be the zero address.\n - `deadline` must be a timestamp in the future.\n - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`\n over the EIP712-formatted function arguments.\n - the signature must use ``owner``'s current nonce (see {nonces}).\n For more information on the signature format, see the\n https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP\n section].\n CAUTION: See Security Considerations above."},"functionSelector":"d505accf","id":40156,"implemented":false,"kind":"function","modifiers":[],"name":"permit","nameLocation":"3006:6:104","nodeType":"FunctionDefinition","parameters":{"id":40154,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40141,"mutability":"mutable","name":"owner","nameLocation":"3030:5:104","nodeType":"VariableDeclaration","scope":40156,"src":"3022:13:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40140,"name":"address","nodeType":"ElementaryTypeName","src":"3022:7:104","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40143,"mutability":"mutable","name":"spender","nameLocation":"3053:7:104","nodeType":"VariableDeclaration","scope":40156,"src":"3045:15:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40142,"name":"address","nodeType":"ElementaryTypeName","src":"3045:7:104","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40145,"mutability":"mutable","name":"value","nameLocation":"3078:5:104","nodeType":"VariableDeclaration","scope":40156,"src":"3070:13:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40144,"name":"uint256","nodeType":"ElementaryTypeName","src":"3070:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40147,"mutability":"mutable","name":"deadline","nameLocation":"3101:8:104","nodeType":"VariableDeclaration","scope":40156,"src":"3093:16:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40146,"name":"uint256","nodeType":"ElementaryTypeName","src":"3093:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40149,"mutability":"mutable","name":"v","nameLocation":"3125:1:104","nodeType":"VariableDeclaration","scope":40156,"src":"3119:7:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":40148,"name":"uint8","nodeType":"ElementaryTypeName","src":"3119:5:104","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":40151,"mutability":"mutable","name":"r","nameLocation":"3144:1:104","nodeType":"VariableDeclaration","scope":40156,"src":"3136:9:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40150,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3136:7:104","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":40153,"mutability":"mutable","name":"s","nameLocation":"3163:1:104","nodeType":"VariableDeclaration","scope":40156,"src":"3155:9:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40152,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3155:7:104","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3012:158:104"},"returnParameters":{"id":40155,"nodeType":"ParameterList","parameters":[],"src":"3179:0:104"},"scope":40171,"src":"2997:183:104","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":40157,"nodeType":"StructuredDocumentation","src":"3186:294:104","text":" @dev Returns the current nonce for `owner`. This value must be\n included whenever a signature is generated for {permit}.\n Every successful call to {permit} increases ``owner``'s nonce by one. This\n prevents a signature from being used multiple times."},"functionSelector":"7ecebe00","id":40164,"implemented":false,"kind":"function","modifiers":[],"name":"nonces","nameLocation":"3494:6:104","nodeType":"FunctionDefinition","parameters":{"id":40160,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40159,"mutability":"mutable","name":"owner","nameLocation":"3509:5:104","nodeType":"VariableDeclaration","scope":40164,"src":"3501:13:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40158,"name":"address","nodeType":"ElementaryTypeName","src":"3501:7:104","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3500:15:104"},"returnParameters":{"id":40163,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40162,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40164,"src":"3539:7:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40161,"name":"uint256","nodeType":"ElementaryTypeName","src":"3539:7:104","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3538:9:104"},"scope":40171,"src":"3485:63:104","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":40165,"nodeType":"StructuredDocumentation","src":"3554:128:104","text":" @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}."},"functionSelector":"3644e515","id":40170,"implemented":false,"kind":"function","modifiers":[],"name":"DOMAIN_SEPARATOR","nameLocation":"3749:16:104","nodeType":"FunctionDefinition","parameters":{"id":40166,"nodeType":"ParameterList","parameters":[],"src":"3765:2:104"},"returnParameters":{"id":40169,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40168,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40170,"src":"3791:7:104","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40167,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3791:7:104","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3790:9:104"},"scope":40171,"src":"3740:60:104","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":40172,"src":"2113:1689:104","usedErrors":[],"usedEvents":[]}],"src":"123:3680:104"},"id":104},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","exportedSymbols":{"Address":[40714],"IERC20":[40109],"IERC20Permit":[40171],"SafeERC20":[40461]},"id":40462,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":40173,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"115:24:105"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"../IERC20.sol","id":40175,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40462,"sourceUnit":40110,"src":"141:37:105","symbolAliases":[{"foreign":{"id":40174,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"149:6:105","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol","file":"../extensions/IERC20Permit.sol","id":40177,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40462,"sourceUnit":40172,"src":"179:60:105","symbolAliases":[{"foreign":{"id":40176,"name":"IERC20Permit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40171,"src":"187:12:105","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","file":"../../../utils/Address.sol","id":40179,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":40462,"sourceUnit":40715,"src":"240:51:105","symbolAliases":[{"foreign":{"id":40178,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40714,"src":"248:7:105","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"SafeERC20","contractDependencies":[],"contractKind":"library","documentation":{"id":40180,"nodeType":"StructuredDocumentation","src":"293:457:105","text":" @title SafeERC20\n @dev Wrappers around ERC20 operations that throw on failure (when the token\n contract returns false). Tokens that return no value (and instead revert or\n throw on failure) are also supported, non-reverting calls are assumed to be\n successful.\n To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n which allows you to call the safe operations as `token.safeTransfer(...)`, etc."},"fullyImplemented":true,"id":40461,"linearizedBaseContracts":[40461],"name":"SafeERC20","nameLocation":"759:9:105","nodeType":"ContractDefinition","nodes":[{"global":false,"id":40183,"libraryName":{"id":40181,"name":"Address","nameLocations":["781:7:105"],"nodeType":"IdentifierPath","referencedDeclaration":40714,"src":"781:7:105"},"nodeType":"UsingForDirective","src":"775:26:105","typeName":{"id":40182,"name":"address","nodeType":"ElementaryTypeName","src":"793:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}},{"documentation":{"id":40184,"nodeType":"StructuredDocumentation","src":"807:64:105","text":" @dev An operation with an ERC20 token failed."},"errorSelector":"5274afe7","id":40188,"name":"SafeERC20FailedOperation","nameLocation":"882:24:105","nodeType":"ErrorDefinition","parameters":{"id":40187,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40186,"mutability":"mutable","name":"token","nameLocation":"915:5:105","nodeType":"VariableDeclaration","scope":40188,"src":"907:13:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40185,"name":"address","nodeType":"ElementaryTypeName","src":"907:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"906:15:105"},"src":"876:46:105"},{"documentation":{"id":40189,"nodeType":"StructuredDocumentation","src":"928:71:105","text":" @dev Indicates a failed `decreaseAllowance` request."},"errorSelector":"e570110f","id":40197,"name":"SafeERC20FailedDecreaseAllowance","nameLocation":"1010:32:105","nodeType":"ErrorDefinition","parameters":{"id":40196,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40191,"mutability":"mutable","name":"spender","nameLocation":"1051:7:105","nodeType":"VariableDeclaration","scope":40197,"src":"1043:15:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40190,"name":"address","nodeType":"ElementaryTypeName","src":"1043:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40193,"mutability":"mutable","name":"currentAllowance","nameLocation":"1068:16:105","nodeType":"VariableDeclaration","scope":40197,"src":"1060:24:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40192,"name":"uint256","nodeType":"ElementaryTypeName","src":"1060:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40195,"mutability":"mutable","name":"requestedDecrease","nameLocation":"1094:17:105","nodeType":"VariableDeclaration","scope":40197,"src":"1086:25:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40194,"name":"uint256","nodeType":"ElementaryTypeName","src":"1086:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1042:70:105"},"src":"1004:109:105"},{"body":{"id":40220,"nodeType":"Block","src":"1375:88:105","statements":[{"expression":{"arguments":[{"id":40209,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40201,"src":"1405:5:105","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":40212,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40201,"src":"1427:5:105","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":40213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1433:8:105","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":40076,"src":"1427:14:105","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":40214,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40203,"src":"1444:2:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40215,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40205,"src":"1448:5:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":40216,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1443:11:105","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":40210,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1412:3:105","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":40211,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1416:10:105","memberName":"encodeCall","nodeType":"MemberAccess","src":"1412:14:105","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":40217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1412:43:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":40208,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40411,"src":"1385:19:105","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":40218,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1385:71:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40219,"nodeType":"ExpressionStatement","src":"1385:71:105"}]},"documentation":{"id":40198,"nodeType":"StructuredDocumentation","src":"1119:179:105","text":" @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,\n non-reverting calls are assumed to be successful."},"id":40221,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransfer","nameLocation":"1312:12:105","nodeType":"FunctionDefinition","parameters":{"id":40206,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40201,"mutability":"mutable","name":"token","nameLocation":"1332:5:105","nodeType":"VariableDeclaration","scope":40221,"src":"1325:12:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":40200,"nodeType":"UserDefinedTypeName","pathNode":{"id":40199,"name":"IERC20","nameLocations":["1325:6:105"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"1325:6:105"},"referencedDeclaration":40109,"src":"1325:6:105","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":40203,"mutability":"mutable","name":"to","nameLocation":"1347:2:105","nodeType":"VariableDeclaration","scope":40221,"src":"1339:10:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40202,"name":"address","nodeType":"ElementaryTypeName","src":"1339:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40205,"mutability":"mutable","name":"value","nameLocation":"1359:5:105","nodeType":"VariableDeclaration","scope":40221,"src":"1351:13:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40204,"name":"uint256","nodeType":"ElementaryTypeName","src":"1351:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1324:41:105"},"returnParameters":{"id":40207,"nodeType":"ParameterList","parameters":[],"src":"1375:0:105"},"scope":40461,"src":"1303:160:105","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":40247,"nodeType":"Block","src":"1792:98:105","statements":[{"expression":{"arguments":[{"id":40235,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40225,"src":"1822:5:105","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":40238,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40225,"src":"1844:5:105","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":40239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1850:12:105","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":40108,"src":"1844:18:105","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},{"components":[{"id":40240,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40227,"src":"1865:4:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40241,"name":"to","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40229,"src":"1871:2:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40242,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40231,"src":"1875:5:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":40243,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1864:17:105","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_address_$_t_uint256_$","typeString":"tuple(address,address,uint256)"}],"expression":{"id":40236,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1829:3:105","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":40237,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1833:10:105","memberName":"encodeCall","nodeType":"MemberAccess","src":"1829:14:105","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":40244,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1829:53:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":40234,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40411,"src":"1802:19:105","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":40245,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1802:81:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40246,"nodeType":"ExpressionStatement","src":"1802:81:105"}]},"documentation":{"id":40222,"nodeType":"StructuredDocumentation","src":"1469:228:105","text":" @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the\n calling contract. If `token` returns no value, non-reverting calls are assumed to be successful."},"id":40248,"implemented":true,"kind":"function","modifiers":[],"name":"safeTransferFrom","nameLocation":"1711:16:105","nodeType":"FunctionDefinition","parameters":{"id":40232,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40225,"mutability":"mutable","name":"token","nameLocation":"1735:5:105","nodeType":"VariableDeclaration","scope":40248,"src":"1728:12:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":40224,"nodeType":"UserDefinedTypeName","pathNode":{"id":40223,"name":"IERC20","nameLocations":["1728:6:105"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"1728:6:105"},"referencedDeclaration":40109,"src":"1728:6:105","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":40227,"mutability":"mutable","name":"from","nameLocation":"1750:4:105","nodeType":"VariableDeclaration","scope":40248,"src":"1742:12:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40226,"name":"address","nodeType":"ElementaryTypeName","src":"1742:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40229,"mutability":"mutable","name":"to","nameLocation":"1764:2:105","nodeType":"VariableDeclaration","scope":40248,"src":"1756:10:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40228,"name":"address","nodeType":"ElementaryTypeName","src":"1756:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40231,"mutability":"mutable","name":"value","nameLocation":"1776:5:105","nodeType":"VariableDeclaration","scope":40248,"src":"1768:13:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40230,"name":"uint256","nodeType":"ElementaryTypeName","src":"1768:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1727:55:105"},"returnParameters":{"id":40233,"nodeType":"ParameterList","parameters":[],"src":"1792:0:105"},"scope":40461,"src":"1702:188:105","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":40278,"nodeType":"Block","src":"2167:139:105","statements":[{"assignments":[40260],"declarations":[{"constant":false,"id":40260,"mutability":"mutable","name":"oldAllowance","nameLocation":"2185:12:105","nodeType":"VariableDeclaration","scope":40278,"src":"2177:20:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40259,"name":"uint256","nodeType":"ElementaryTypeName","src":"2177:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":40269,"initialValue":{"arguments":[{"arguments":[{"id":40265,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2224:4:105","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$40461","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$40461","typeString":"library SafeERC20"}],"id":40264,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2216:7:105","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":40263,"name":"address","nodeType":"ElementaryTypeName","src":"2216:7:105","typeDescriptions":{}}},"id":40266,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2216:13:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40267,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40254,"src":"2231:7:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":40261,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40252,"src":"2200:5:105","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":40262,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2206:9:105","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":40086,"src":"2200:15:105","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":40268,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2200:39:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2177:62:105"},{"expression":{"arguments":[{"id":40271,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40252,"src":"2262:5:105","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":40272,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40254,"src":"2269:7:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40273,"name":"oldAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40260,"src":"2278:12:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":40274,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40256,"src":"2293:5:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2278:20:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":40270,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40369,"src":"2249:12:105","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":40276,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2249:50:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40277,"nodeType":"ExpressionStatement","src":"2249:50:105"}]},"documentation":{"id":40249,"nodeType":"StructuredDocumentation","src":"1896:180:105","text":" @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful."},"id":40279,"implemented":true,"kind":"function","modifiers":[],"name":"safeIncreaseAllowance","nameLocation":"2090:21:105","nodeType":"FunctionDefinition","parameters":{"id":40257,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40252,"mutability":"mutable","name":"token","nameLocation":"2119:5:105","nodeType":"VariableDeclaration","scope":40279,"src":"2112:12:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":40251,"nodeType":"UserDefinedTypeName","pathNode":{"id":40250,"name":"IERC20","nameLocations":["2112:6:105"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"2112:6:105"},"referencedDeclaration":40109,"src":"2112:6:105","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":40254,"mutability":"mutable","name":"spender","nameLocation":"2134:7:105","nodeType":"VariableDeclaration","scope":40279,"src":"2126:15:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40253,"name":"address","nodeType":"ElementaryTypeName","src":"2126:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40256,"mutability":"mutable","name":"value","nameLocation":"2151:5:105","nodeType":"VariableDeclaration","scope":40279,"src":"2143:13:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40255,"name":"uint256","nodeType":"ElementaryTypeName","src":"2143:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2111:46:105"},"returnParameters":{"id":40258,"nodeType":"ParameterList","parameters":[],"src":"2167:0:105"},"scope":40461,"src":"2081:225:105","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":40321,"nodeType":"Block","src":"2607:370:105","statements":[{"id":40320,"nodeType":"UncheckedBlock","src":"2617:354:105","statements":[{"assignments":[40291],"declarations":[{"constant":false,"id":40291,"mutability":"mutable","name":"currentAllowance","nameLocation":"2649:16:105","nodeType":"VariableDeclaration","scope":40320,"src":"2641:24:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40290,"name":"uint256","nodeType":"ElementaryTypeName","src":"2641:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":40300,"initialValue":{"arguments":[{"arguments":[{"id":40296,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2692:4:105","typeDescriptions":{"typeIdentifier":"t_contract$_SafeERC20_$40461","typeString":"library SafeERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_SafeERC20_$40461","typeString":"library SafeERC20"}],"id":40295,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2684:7:105","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":40294,"name":"address","nodeType":"ElementaryTypeName","src":"2684:7:105","typeDescriptions":{}}},"id":40297,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2684:13:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40298,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40285,"src":"2699:7:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":40292,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40283,"src":"2668:5:105","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":40293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2674:9:105","memberName":"allowance","nodeType":"MemberAccess","referencedDeclaration":40086,"src":"2668:15:105","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view external returns (uint256)"}},"id":40299,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2668:39:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2641:66:105"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40303,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40301,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40291,"src":"2725:16:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":40302,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40287,"src":"2744:17:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2725:36:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":40311,"nodeType":"IfStatement","src":"2721:160:105","trueBody":{"id":40310,"nodeType":"Block","src":"2763:118:105","statements":[{"errorCall":{"arguments":[{"id":40305,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40285,"src":"2821:7:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40306,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40291,"src":"2830:16:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":40307,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40287,"src":"2848:17:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":40304,"name":"SafeERC20FailedDecreaseAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40197,"src":"2788:32:105","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256,uint256) pure returns (error)"}},"id":40308,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2788:78:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":40309,"nodeType":"RevertStatement","src":"2781:85:105"}]}},{"expression":{"arguments":[{"id":40313,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40283,"src":"2907:5:105","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":40314,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40285,"src":"2914:7:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40315,"name":"currentAllowance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40291,"src":"2923:16:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":40316,"name":"requestedDecrease","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40287,"src":"2942:17:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2923:36:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":40312,"name":"forceApprove","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40369,"src":"2894:12:105","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_address_$_t_uint256_$returns$__$","typeString":"function (contract IERC20,address,uint256)"}},"id":40318,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2894:66:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40319,"nodeType":"ExpressionStatement","src":"2894:66:105"}]}]},"documentation":{"id":40280,"nodeType":"StructuredDocumentation","src":"2312:192:105","text":" @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no\n value, non-reverting calls are assumed to be successful."},"id":40322,"implemented":true,"kind":"function","modifiers":[],"name":"safeDecreaseAllowance","nameLocation":"2518:21:105","nodeType":"FunctionDefinition","parameters":{"id":40288,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40283,"mutability":"mutable","name":"token","nameLocation":"2547:5:105","nodeType":"VariableDeclaration","scope":40322,"src":"2540:12:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":40282,"nodeType":"UserDefinedTypeName","pathNode":{"id":40281,"name":"IERC20","nameLocations":["2540:6:105"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"2540:6:105"},"referencedDeclaration":40109,"src":"2540:6:105","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":40285,"mutability":"mutable","name":"spender","nameLocation":"2562:7:105","nodeType":"VariableDeclaration","scope":40322,"src":"2554:15:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40284,"name":"address","nodeType":"ElementaryTypeName","src":"2554:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40287,"mutability":"mutable","name":"requestedDecrease","nameLocation":"2579:17:105","nodeType":"VariableDeclaration","scope":40322,"src":"2571:25:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40286,"name":"uint256","nodeType":"ElementaryTypeName","src":"2571:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2539:58:105"},"returnParameters":{"id":40289,"nodeType":"ParameterList","parameters":[],"src":"2607:0:105"},"scope":40461,"src":"2509:468:105","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":40368,"nodeType":"Block","src":"3373:303:105","statements":[{"assignments":[40334],"declarations":[{"constant":false,"id":40334,"mutability":"mutable","name":"approvalCall","nameLocation":"3396:12:105","nodeType":"VariableDeclaration","scope":40368,"src":"3383:25:105","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40333,"name":"bytes","nodeType":"ElementaryTypeName","src":"3383:5:105","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":40343,"initialValue":{"arguments":[{"expression":{"id":40337,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40326,"src":"3426:5:105","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":40338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3432:7:105","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":40096,"src":"3426:13:105","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":40339,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40328,"src":"3442:7:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40340,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40330,"src":"3451:5:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":40341,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3441:16:105","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_uint256_$","typeString":"tuple(address,uint256)"}],"expression":{"id":40335,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3411:3:105","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":40336,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3415:10:105","memberName":"encodeCall","nodeType":"MemberAccess","src":"3411:14:105","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":40342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3411:47:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3383:75:105"},{"condition":{"id":40348,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3473:45:105","subExpression":{"arguments":[{"id":40345,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40326,"src":"3498:5:105","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":40346,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40334,"src":"3505:12:105","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":40344,"name":"_callOptionalReturnBool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40460,"src":"3474:23:105","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_bytes_memory_ptr_$returns$_t_bool_$","typeString":"function (contract IERC20,bytes memory) returns (bool)"}},"id":40347,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3474:44:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":40367,"nodeType":"IfStatement","src":"3469:201:105","trueBody":{"id":40366,"nodeType":"Block","src":"3520:150:105","statements":[{"expression":{"arguments":[{"id":40350,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40326,"src":"3554:5:105","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"arguments":[{"expression":{"id":40353,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40326,"src":"3576:5:105","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":40354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3582:7:105","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":40096,"src":"3576:13:105","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},{"components":[{"id":40355,"name":"spender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40328,"src":"3592:7:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":40356,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3601:1:105","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":40357,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3591:12:105","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(address,int_const 0)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"},{"typeIdentifier":"t_tuple$_t_address_$_t_rational_0_by_1_$","typeString":"tuple(address,int_const 0)"}],"expression":{"id":40351,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3561:3:105","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":40352,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3565:10:105","memberName":"encodeCall","nodeType":"MemberAccess","src":"3561:14:105","typeDescriptions":{"typeIdentifier":"t_function_abiencodecall_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":40358,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3561:43:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":40349,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40411,"src":"3534:19:105","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":40359,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3534:71:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40360,"nodeType":"ExpressionStatement","src":"3534:71:105"},{"expression":{"arguments":[{"id":40362,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40326,"src":"3639:5:105","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":40363,"name":"approvalCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40334,"src":"3646:12:105","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":40361,"name":"_callOptionalReturn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40411,"src":"3619:19:105","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IERC20_$40109_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IERC20,bytes memory)"}},"id":40364,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3619:40:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40365,"nodeType":"ExpressionStatement","src":"3619:40:105"}]}}]},"documentation":{"id":40323,"nodeType":"StructuredDocumentation","src":"2983:308:105","text":" @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,\n non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval\n to be set to zero before setting it to a non-zero value, such as USDT."},"id":40369,"implemented":true,"kind":"function","modifiers":[],"name":"forceApprove","nameLocation":"3305:12:105","nodeType":"FunctionDefinition","parameters":{"id":40331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40326,"mutability":"mutable","name":"token","nameLocation":"3325:5:105","nodeType":"VariableDeclaration","scope":40369,"src":"3318:12:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":40325,"nodeType":"UserDefinedTypeName","pathNode":{"id":40324,"name":"IERC20","nameLocations":["3318:6:105"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"3318:6:105"},"referencedDeclaration":40109,"src":"3318:6:105","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":40328,"mutability":"mutable","name":"spender","nameLocation":"3340:7:105","nodeType":"VariableDeclaration","scope":40369,"src":"3332:15:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40327,"name":"address","nodeType":"ElementaryTypeName","src":"3332:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40330,"mutability":"mutable","name":"value","nameLocation":"3357:5:105","nodeType":"VariableDeclaration","scope":40369,"src":"3349:13:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40329,"name":"uint256","nodeType":"ElementaryTypeName","src":"3349:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3317:46:105"},"returnParameters":{"id":40332,"nodeType":"ParameterList","parameters":[],"src":"3373:0:105"},"scope":40461,"src":"3296:380:105","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":40410,"nodeType":"Block","src":"4129:559:105","statements":[{"assignments":[40379],"declarations":[{"constant":false,"id":40379,"mutability":"mutable","name":"returndata","nameLocation":"4491:10:105","nodeType":"VariableDeclaration","scope":40410,"src":"4478:23:105","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40378,"name":"bytes","nodeType":"ElementaryTypeName","src":"4478:5:105","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":40387,"initialValue":{"arguments":[{"id":40385,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40375,"src":"4532:4:105","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":40382,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40373,"src":"4512:5:105","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":40381,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4504:7:105","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":40380,"name":"address","nodeType":"ElementaryTypeName","src":"4504:7:105","typeDescriptions":{}}},"id":40383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4504:14:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":40384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4519:12:105","memberName":"functionCall","nodeType":"MemberAccess","referencedDeclaration":40535,"src":"4504:27:105","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$attached_to$_t_address_$","typeString":"function (address,bytes memory) returns (bytes memory)"}},"id":40386,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4504:33:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"4478:59:105"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":40400,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":40388,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40379,"src":"4551:10:105","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":40389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4562:6:105","memberName":"length","nodeType":"MemberAccess","src":"4551:17:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":40390,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4572:1:105","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4551:22:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"id":40399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4577:31:105","subExpression":{"arguments":[{"id":40394,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40379,"src":"4589:10:105","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":40396,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4602:4:105","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":{"id":40395,"name":"bool","nodeType":"ElementaryTypeName","src":"4602:4:105","typeDescriptions":{}}}],"id":40397,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"4601:6:105","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}],"expression":{"id":40392,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4578:3:105","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":40393,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4582:6:105","memberName":"decode","nodeType":"MemberAccess","src":"4578:10:105","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":40398,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4578:30:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4551:57:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":40409,"nodeType":"IfStatement","src":"4547:135:105","trueBody":{"id":40408,"nodeType":"Block","src":"4610:72:105","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":40404,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40373,"src":"4664:5:105","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":40403,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4656:7:105","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":40402,"name":"address","nodeType":"ElementaryTypeName","src":"4656:7:105","typeDescriptions":{}}},"id":40405,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4656:14:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":40401,"name":"SafeERC20FailedOperation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40188,"src":"4631:24:105","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":40406,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4631:40:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":40407,"nodeType":"RevertStatement","src":"4624:47:105"}]}}]},"documentation":{"id":40370,"nodeType":"StructuredDocumentation","src":"3682:372:105","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants)."},"id":40411,"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturn","nameLocation":"4068:19:105","nodeType":"FunctionDefinition","parameters":{"id":40376,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40373,"mutability":"mutable","name":"token","nameLocation":"4095:5:105","nodeType":"VariableDeclaration","scope":40411,"src":"4088:12:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":40372,"nodeType":"UserDefinedTypeName","pathNode":{"id":40371,"name":"IERC20","nameLocations":["4088:6:105"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"4088:6:105"},"referencedDeclaration":40109,"src":"4088:6:105","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":40375,"mutability":"mutable","name":"data","nameLocation":"4115:4:105","nodeType":"VariableDeclaration","scope":40411,"src":"4102:17:105","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40374,"name":"bytes","nodeType":"ElementaryTypeName","src":"4102:5:105","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4087:33:105"},"returnParameters":{"id":40377,"nodeType":"ParameterList","parameters":[],"src":"4129:0:105"},"scope":40461,"src":"4059:629:105","stateMutability":"nonpayable","virtual":false,"visibility":"private"},{"body":{"id":40459,"nodeType":"Block","src":"5278:489:105","statements":[{"assignments":[40423,40425],"declarations":[{"constant":false,"id":40423,"mutability":"mutable","name":"success","nameLocation":"5579:7:105","nodeType":"VariableDeclaration","scope":40459,"src":"5574:12:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":40422,"name":"bool","nodeType":"ElementaryTypeName","src":"5574:4:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":40425,"mutability":"mutable","name":"returndata","nameLocation":"5601:10:105","nodeType":"VariableDeclaration","scope":40459,"src":"5588:23:105","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40424,"name":"bytes","nodeType":"ElementaryTypeName","src":"5588:5:105","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":40433,"initialValue":{"arguments":[{"id":40431,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40417,"src":"5635:4:105","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[{"id":40428,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40415,"src":"5623:5:105","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":40427,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5615:7:105","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":40426,"name":"address","nodeType":"ElementaryTypeName","src":"5615:7:105","typeDescriptions":{}}},"id":40429,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5615:14:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":40430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5630:4:105","memberName":"call","nodeType":"MemberAccess","src":"5615:19:105","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":40432,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5615:25:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"5573:67:105"},{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":40457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":40448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40434,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40423,"src":"5657:7:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":40446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":40435,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40425,"src":"5669:10:105","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":40436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5680:6:105","memberName":"length","nodeType":"MemberAccess","src":"5669:17:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":40437,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5690:1:105","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5669:22:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":40441,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40425,"src":"5706:10:105","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"components":[{"id":40443,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5719:4:105","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"},"typeName":{"id":40442,"name":"bool","nodeType":"ElementaryTypeName","src":"5719:4:105","typeDescriptions":{}}}],"id":40444,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"5718:6:105","typeDescriptions":{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_type$_t_bool_$","typeString":"type(bool)"}],"expression":{"id":40439,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5695:3:105","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":40440,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5699:6:105","memberName":"decode","nodeType":"MemberAccess","src":"5695:10:105","typeDescriptions":{"typeIdentifier":"t_function_abidecode_pure$__$returns$__$","typeString":"function () pure"}},"id":40445,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5695:30:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5669:56:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":40447,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5668:58:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5657:69:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"arguments":[{"id":40451,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40415,"src":"5738:5:105","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":40450,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5730:7:105","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":40449,"name":"address","nodeType":"ElementaryTypeName","src":"5730:7:105","typeDescriptions":{}}},"id":40452,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5730:14:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":40453,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5745:4:105","memberName":"code","nodeType":"MemberAccess","src":"5730:19:105","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":40454,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5750:6:105","memberName":"length","nodeType":"MemberAccess","src":"5730:26:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":40455,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5759:1:105","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5730:30:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5657:103:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":40421,"id":40458,"nodeType":"Return","src":"5650:110:105"}]},"documentation":{"id":40412,"nodeType":"StructuredDocumentation","src":"4694:490:105","text":" @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n on the return value: the return value is optional (but if data is returned, it must not be false).\n @param token The token targeted by the call.\n @param data The call data (encoded using abi.encode or one of its variants).\n This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead."},"id":40460,"implemented":true,"kind":"function","modifiers":[],"name":"_callOptionalReturnBool","nameLocation":"5198:23:105","nodeType":"FunctionDefinition","parameters":{"id":40418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40415,"mutability":"mutable","name":"token","nameLocation":"5229:5:105","nodeType":"VariableDeclaration","scope":40460,"src":"5222:12:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":40414,"nodeType":"UserDefinedTypeName","pathNode":{"id":40413,"name":"IERC20","nameLocations":["5222:6:105"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"5222:6:105"},"referencedDeclaration":40109,"src":"5222:6:105","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":40417,"mutability":"mutable","name":"data","nameLocation":"5249:4:105","nodeType":"VariableDeclaration","scope":40460,"src":"5236:17:105","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40416,"name":"bytes","nodeType":"ElementaryTypeName","src":"5236:5:105","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5221:33:105"},"returnParameters":{"id":40421,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40420,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40460,"src":"5272:4:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":40419,"name":"bool","nodeType":"ElementaryTypeName","src":"5272:4:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5271:6:105"},"scope":40461,"src":"5189:578:105","stateMutability":"nonpayable","virtual":false,"visibility":"private"}],"scope":40462,"src":"751:5018:105","usedErrors":[40188,40197],"usedEvents":[]}],"src":"115:5655:105"},"id":105},"@openzeppelin/contracts/utils/Address.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Address.sol","exportedSymbols":{"Address":[40714]},"id":40715,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":40463,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"101:24:106"},{"abstract":false,"baseContracts":[],"canonicalName":"Address","contractDependencies":[],"contractKind":"library","documentation":{"id":40464,"nodeType":"StructuredDocumentation","src":"127:67:106","text":" @dev Collection of functions related to the address type"},"fullyImplemented":true,"id":40714,"linearizedBaseContracts":[40714],"name":"Address","nameLocation":"203:7:106","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":40465,"nodeType":"StructuredDocumentation","src":"217:94:106","text":" @dev The ETH balance of the account is not enough to perform the operation."},"errorSelector":"cd786059","id":40469,"name":"AddressInsufficientBalance","nameLocation":"322:26:106","nodeType":"ErrorDefinition","parameters":{"id":40468,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40467,"mutability":"mutable","name":"account","nameLocation":"357:7:106","nodeType":"VariableDeclaration","scope":40469,"src":"349:15:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40466,"name":"address","nodeType":"ElementaryTypeName","src":"349:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"348:17:106"},"src":"316:50:106"},{"documentation":{"id":40470,"nodeType":"StructuredDocumentation","src":"372:75:106","text":" @dev There's no code at `target` (it is not a contract)."},"errorSelector":"9996b315","id":40474,"name":"AddressEmptyCode","nameLocation":"458:16:106","nodeType":"ErrorDefinition","parameters":{"id":40473,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40472,"mutability":"mutable","name":"target","nameLocation":"483:6:106","nodeType":"VariableDeclaration","scope":40474,"src":"475:14:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40471,"name":"address","nodeType":"ElementaryTypeName","src":"475:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"474:16:106"},"src":"452:39:106"},{"documentation":{"id":40475,"nodeType":"StructuredDocumentation","src":"497:89:106","text":" @dev A call to an address target failed. The target may have reverted."},"errorSelector":"1425ea42","id":40477,"name":"FailedInnerCall","nameLocation":"597:15:106","nodeType":"ErrorDefinition","parameters":{"id":40476,"nodeType":"ParameterList","parameters":[],"src":"612:2:106"},"src":"591:24:106"},{"body":{"id":40517,"nodeType":"Block","src":"1602:260:106","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":40487,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1624:4:106","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$40714","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$40714","typeString":"library Address"}],"id":40486,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1616:7:106","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":40485,"name":"address","nodeType":"ElementaryTypeName","src":"1616:7:106","typeDescriptions":{}}},"id":40488,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1616:13:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":40489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1630:7:106","memberName":"balance","nodeType":"MemberAccess","src":"1616:21:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":40490,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40482,"src":"1640:6:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1616:30:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":40500,"nodeType":"IfStatement","src":"1612:109:106","trueBody":{"id":40499,"nodeType":"Block","src":"1648:73:106","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":40495,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1704:4:106","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$40714","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$40714","typeString":"library Address"}],"id":40494,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1696:7:106","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":40493,"name":"address","nodeType":"ElementaryTypeName","src":"1696:7:106","typeDescriptions":{}}},"id":40496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1696:13:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":40492,"name":"AddressInsufficientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40469,"src":"1669:26:106","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":40497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1669:41:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":40498,"nodeType":"RevertStatement","src":"1662:48:106"}]}},{"assignments":[40502,null],"declarations":[{"constant":false,"id":40502,"mutability":"mutable","name":"success","nameLocation":"1737:7:106","nodeType":"VariableDeclaration","scope":40517,"src":"1732:12:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":40501,"name":"bool","nodeType":"ElementaryTypeName","src":"1732:4:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":40509,"initialValue":{"arguments":[{"hexValue":"","id":40507,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1780:2:106","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":40503,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40480,"src":"1750:9:106","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":40504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1760:4:106","memberName":"call","nodeType":"MemberAccess","src":"1750:14:106","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":40506,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":40505,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40482,"src":"1772:6:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"1750:29:106","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":40508,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1750:33:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"1731:52:106"},{"condition":{"id":40511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"1797:8:106","subExpression":{"id":40510,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40502,"src":"1798:7:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":40516,"nodeType":"IfStatement","src":"1793:63:106","trueBody":{"id":40515,"nodeType":"Block","src":"1807:49:106","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":40512,"name":"FailedInnerCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40477,"src":"1828:15:106","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":40513,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1828:17:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":40514,"nodeType":"RevertStatement","src":"1821:24:106"}]}}]},"documentation":{"id":40478,"nodeType":"StructuredDocumentation","src":"621:905:106","text":" @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."},"id":40518,"implemented":true,"kind":"function","modifiers":[],"name":"sendValue","nameLocation":"1540:9:106","nodeType":"FunctionDefinition","parameters":{"id":40483,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40480,"mutability":"mutable","name":"recipient","nameLocation":"1566:9:106","nodeType":"VariableDeclaration","scope":40518,"src":"1550:25:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":40479,"name":"address","nodeType":"ElementaryTypeName","src":"1550:15:106","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":40482,"mutability":"mutable","name":"amount","nameLocation":"1585:6:106","nodeType":"VariableDeclaration","scope":40518,"src":"1577:14:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40481,"name":"uint256","nodeType":"ElementaryTypeName","src":"1577:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1549:43:106"},"returnParameters":{"id":40484,"nodeType":"ParameterList","parameters":[],"src":"1602:0:106"},"scope":40714,"src":"1531:331:106","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":40534,"nodeType":"Block","src":"2794:62:106","statements":[{"expression":{"arguments":[{"id":40529,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40521,"src":"2833:6:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40530,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40523,"src":"2841:4:106","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":40531,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2847:1:106","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":40528,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40581,"src":"2811:21:106","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256) returns (bytes memory)"}},"id":40532,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2811:38:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":40527,"id":40533,"nodeType":"Return","src":"2804:45:106"}]},"documentation":{"id":40519,"nodeType":"StructuredDocumentation","src":"1868:832:106","text":" @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason or custom error, it is bubbled\n up by this function (like regular Solidity function calls). However, if\n the call reverted with no returned reason, this function reverts with a\n {FailedInnerCall} error.\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert."},"id":40535,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"2714:12:106","nodeType":"FunctionDefinition","parameters":{"id":40524,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40521,"mutability":"mutable","name":"target","nameLocation":"2735:6:106","nodeType":"VariableDeclaration","scope":40535,"src":"2727:14:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40520,"name":"address","nodeType":"ElementaryTypeName","src":"2727:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40523,"mutability":"mutable","name":"data","nameLocation":"2756:4:106","nodeType":"VariableDeclaration","scope":40535,"src":"2743:17:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40522,"name":"bytes","nodeType":"ElementaryTypeName","src":"2743:5:106","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2726:35:106"},"returnParameters":{"id":40527,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40526,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40535,"src":"2780:12:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40525,"name":"bytes","nodeType":"ElementaryTypeName","src":"2780:5:106","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2779:14:106"},"scope":40714,"src":"2705:151:106","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":40580,"nodeType":"Block","src":"3293:279:106","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":40549,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3315:4:106","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$40714","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$40714","typeString":"library Address"}],"id":40548,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3307:7:106","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":40547,"name":"address","nodeType":"ElementaryTypeName","src":"3307:7:106","typeDescriptions":{}}},"id":40550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3307:13:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":40551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3321:7:106","memberName":"balance","nodeType":"MemberAccess","src":"3307:21:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":40552,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40542,"src":"3331:5:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3307:29:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":40562,"nodeType":"IfStatement","src":"3303:108:106","trueBody":{"id":40561,"nodeType":"Block","src":"3338:73:106","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":40557,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3394:4:106","typeDescriptions":{"typeIdentifier":"t_contract$_Address_$40714","typeString":"library Address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Address_$40714","typeString":"library Address"}],"id":40556,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3386:7:106","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":40555,"name":"address","nodeType":"ElementaryTypeName","src":"3386:7:106","typeDescriptions":{}}},"id":40558,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3386:13:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":40554,"name":"AddressInsufficientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40469,"src":"3359:26:106","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":40559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3359:41:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":40560,"nodeType":"RevertStatement","src":"3352:48:106"}]}},{"assignments":[40564,40566],"declarations":[{"constant":false,"id":40564,"mutability":"mutable","name":"success","nameLocation":"3426:7:106","nodeType":"VariableDeclaration","scope":40580,"src":"3421:12:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":40563,"name":"bool","nodeType":"ElementaryTypeName","src":"3421:4:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":40566,"mutability":"mutable","name":"returndata","nameLocation":"3448:10:106","nodeType":"VariableDeclaration","scope":40580,"src":"3435:23:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40565,"name":"bytes","nodeType":"ElementaryTypeName","src":"3435:5:106","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":40573,"initialValue":{"arguments":[{"id":40571,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40540,"src":"3488:4:106","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":40567,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40538,"src":"3462:6:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":40568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3469:4:106","memberName":"call","nodeType":"MemberAccess","src":"3462:11:106","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":40570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":40569,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40542,"src":"3481:5:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"3462:25:106","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":40572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3462:31:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3420:73:106"},{"expression":{"arguments":[{"id":40575,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40538,"src":"3537:6:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40576,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40564,"src":"3545:7:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":40577,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40566,"src":"3554:10:106","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":40574,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40673,"src":"3510:26:106","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":40578,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3510:55:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":40546,"id":40579,"nodeType":"Return","src":"3503:62:106"}]},"documentation":{"id":40536,"nodeType":"StructuredDocumentation","src":"2862:313:106","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`."},"id":40581,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"3189:21:106","nodeType":"FunctionDefinition","parameters":{"id":40543,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40538,"mutability":"mutable","name":"target","nameLocation":"3219:6:106","nodeType":"VariableDeclaration","scope":40581,"src":"3211:14:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40537,"name":"address","nodeType":"ElementaryTypeName","src":"3211:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40540,"mutability":"mutable","name":"data","nameLocation":"3240:4:106","nodeType":"VariableDeclaration","scope":40581,"src":"3227:17:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40539,"name":"bytes","nodeType":"ElementaryTypeName","src":"3227:5:106","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":40542,"mutability":"mutable","name":"value","nameLocation":"3254:5:106","nodeType":"VariableDeclaration","scope":40581,"src":"3246:13:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40541,"name":"uint256","nodeType":"ElementaryTypeName","src":"3246:7:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3210:50:106"},"returnParameters":{"id":40546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40545,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40581,"src":"3279:12:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40544,"name":"bytes","nodeType":"ElementaryTypeName","src":"3279:5:106","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3278:14:106"},"scope":40714,"src":"3180:392:106","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":40606,"nodeType":"Block","src":"3811:154:106","statements":[{"assignments":[40592,40594],"declarations":[{"constant":false,"id":40592,"mutability":"mutable","name":"success","nameLocation":"3827:7:106","nodeType":"VariableDeclaration","scope":40606,"src":"3822:12:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":40591,"name":"bool","nodeType":"ElementaryTypeName","src":"3822:4:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":40594,"mutability":"mutable","name":"returndata","nameLocation":"3849:10:106","nodeType":"VariableDeclaration","scope":40606,"src":"3836:23:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40593,"name":"bytes","nodeType":"ElementaryTypeName","src":"3836:5:106","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":40599,"initialValue":{"arguments":[{"id":40597,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40586,"src":"3881:4:106","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":40595,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40584,"src":"3863:6:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":40596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3870:10:106","memberName":"staticcall","nodeType":"MemberAccess","src":"3863:17:106","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":40598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3863:23:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"3821:65:106"},{"expression":{"arguments":[{"id":40601,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40584,"src":"3930:6:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40602,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40592,"src":"3938:7:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":40603,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40594,"src":"3947:10:106","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":40600,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40673,"src":"3903:26:106","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":40604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3903:55:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":40590,"id":40605,"nodeType":"Return","src":"3896:62:106"}]},"documentation":{"id":40582,"nodeType":"StructuredDocumentation","src":"3578:128:106","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call."},"id":40607,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"3720:18:106","nodeType":"FunctionDefinition","parameters":{"id":40587,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40584,"mutability":"mutable","name":"target","nameLocation":"3747:6:106","nodeType":"VariableDeclaration","scope":40607,"src":"3739:14:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40583,"name":"address","nodeType":"ElementaryTypeName","src":"3739:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40586,"mutability":"mutable","name":"data","nameLocation":"3768:4:106","nodeType":"VariableDeclaration","scope":40607,"src":"3755:17:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40585,"name":"bytes","nodeType":"ElementaryTypeName","src":"3755:5:106","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3738:35:106"},"returnParameters":{"id":40590,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40589,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40607,"src":"3797:12:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40588,"name":"bytes","nodeType":"ElementaryTypeName","src":"3797:5:106","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3796:14:106"},"scope":40714,"src":"3711:254:106","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":40632,"nodeType":"Block","src":"4203:156:106","statements":[{"assignments":[40618,40620],"declarations":[{"constant":false,"id":40618,"mutability":"mutable","name":"success","nameLocation":"4219:7:106","nodeType":"VariableDeclaration","scope":40632,"src":"4214:12:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":40617,"name":"bool","nodeType":"ElementaryTypeName","src":"4214:4:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":40620,"mutability":"mutable","name":"returndata","nameLocation":"4241:10:106","nodeType":"VariableDeclaration","scope":40632,"src":"4228:23:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40619,"name":"bytes","nodeType":"ElementaryTypeName","src":"4228:5:106","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":40625,"initialValue":{"arguments":[{"id":40623,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40612,"src":"4275:4:106","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":40621,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40610,"src":"4255:6:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":40622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4262:12:106","memberName":"delegatecall","nodeType":"MemberAccess","src":"4255:19:106","typeDescriptions":{"typeIdentifier":"t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) returns (bool,bytes memory)"}},"id":40624,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4255:25:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"4213:67:106"},{"expression":{"arguments":[{"id":40627,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40610,"src":"4324:6:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40628,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40618,"src":"4332:7:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":40629,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40620,"src":"4341:10:106","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":40626,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40673,"src":"4297:26:106","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory) view returns (bytes memory)"}},"id":40630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4297:55:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":40616,"id":40631,"nodeType":"Return","src":"4290:62:106"}]},"documentation":{"id":40608,"nodeType":"StructuredDocumentation","src":"3971:130:106","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a delegate call."},"id":40633,"implemented":true,"kind":"function","modifiers":[],"name":"functionDelegateCall","nameLocation":"4115:20:106","nodeType":"FunctionDefinition","parameters":{"id":40613,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40610,"mutability":"mutable","name":"target","nameLocation":"4144:6:106","nodeType":"VariableDeclaration","scope":40633,"src":"4136:14:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40609,"name":"address","nodeType":"ElementaryTypeName","src":"4136:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40612,"mutability":"mutable","name":"data","nameLocation":"4165:4:106","nodeType":"VariableDeclaration","scope":40633,"src":"4152:17:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40611,"name":"bytes","nodeType":"ElementaryTypeName","src":"4152:5:106","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4135:35:106"},"returnParameters":{"id":40616,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40615,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40633,"src":"4189:12:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40614,"name":"bytes","nodeType":"ElementaryTypeName","src":"4189:5:106","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4188:14:106"},"scope":40714,"src":"4106:253:106","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":40672,"nodeType":"Block","src":"4783:424:106","statements":[{"condition":{"id":40646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4797:8:106","subExpression":{"id":40645,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40638,"src":"4798:7:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":40670,"nodeType":"Block","src":"4857:344:106","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":40661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":40652,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40640,"src":"5045:10:106","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":40653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5056:6:106","memberName":"length","nodeType":"MemberAccess","src":"5045:17:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":40654,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5066:1:106","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5045:22:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":40656,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40636,"src":"5071:6:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":40657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5078:4:106","memberName":"code","nodeType":"MemberAccess","src":"5071:11:106","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":40658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5083:6:106","memberName":"length","nodeType":"MemberAccess","src":"5071:18:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":40659,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5093:1:106","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5071:23:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5045:49:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":40667,"nodeType":"IfStatement","src":"5041:119:106","trueBody":{"id":40666,"nodeType":"Block","src":"5096:64:106","statements":[{"errorCall":{"arguments":[{"id":40663,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40636,"src":"5138:6:106","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":40662,"name":"AddressEmptyCode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40474,"src":"5121:16:106","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$returns$_t_error_$","typeString":"function (address) pure returns (error)"}},"id":40664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5121:24:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":40665,"nodeType":"RevertStatement","src":"5114:31:106"}]}},{"expression":{"id":40668,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40640,"src":"5180:10:106","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":40644,"id":40669,"nodeType":"Return","src":"5173:17:106"}]},"id":40671,"nodeType":"IfStatement","src":"4793:408:106","trueBody":{"id":40651,"nodeType":"Block","src":"4807:44:106","statements":[{"expression":{"arguments":[{"id":40648,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40640,"src":"4829:10:106","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":40647,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40713,"src":"4821:7:106","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":40649,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4821:19:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40650,"nodeType":"ExpressionStatement","src":"4821:19:106"}]}}]},"documentation":{"id":40634,"nodeType":"StructuredDocumentation","src":"4365:255:106","text":" @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target\n was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an\n unsuccessful call."},"id":40673,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResultFromTarget","nameLocation":"4634:26:106","nodeType":"FunctionDefinition","parameters":{"id":40641,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40636,"mutability":"mutable","name":"target","nameLocation":"4678:6:106","nodeType":"VariableDeclaration","scope":40673,"src":"4670:14:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40635,"name":"address","nodeType":"ElementaryTypeName","src":"4670:7:106","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40638,"mutability":"mutable","name":"success","nameLocation":"4699:7:106","nodeType":"VariableDeclaration","scope":40673,"src":"4694:12:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":40637,"name":"bool","nodeType":"ElementaryTypeName","src":"4694:4:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":40640,"mutability":"mutable","name":"returndata","nameLocation":"4729:10:106","nodeType":"VariableDeclaration","scope":40673,"src":"4716:23:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40639,"name":"bytes","nodeType":"ElementaryTypeName","src":"4716:5:106","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4660:85:106"},"returnParameters":{"id":40644,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40643,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40673,"src":"4769:12:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40642,"name":"bytes","nodeType":"ElementaryTypeName","src":"4769:5:106","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4768:14:106"},"scope":40714,"src":"4625:582:106","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":40694,"nodeType":"Block","src":"5509:122:106","statements":[{"condition":{"id":40684,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"5523:8:106","subExpression":{"id":40683,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40676,"src":"5524:7:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":40692,"nodeType":"Block","src":"5583:42:106","statements":[{"expression":{"id":40690,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40678,"src":"5604:10:106","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":40682,"id":40691,"nodeType":"Return","src":"5597:17:106"}]},"id":40693,"nodeType":"IfStatement","src":"5519:106:106","trueBody":{"id":40689,"nodeType":"Block","src":"5533:44:106","statements":[{"expression":{"arguments":[{"id":40686,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40678,"src":"5555:10:106","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":40685,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40713,"src":"5547:7:106","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes memory) pure"}},"id":40687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5547:19:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":40688,"nodeType":"ExpressionStatement","src":"5547:19:106"}]}}]},"documentation":{"id":40674,"nodeType":"StructuredDocumentation","src":"5213:189:106","text":" @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the\n revert reason or with a default {FailedInnerCall} error."},"id":40695,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResult","nameLocation":"5416:16:106","nodeType":"FunctionDefinition","parameters":{"id":40679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40676,"mutability":"mutable","name":"success","nameLocation":"5438:7:106","nodeType":"VariableDeclaration","scope":40695,"src":"5433:12:106","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":40675,"name":"bool","nodeType":"ElementaryTypeName","src":"5433:4:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":40678,"mutability":"mutable","name":"returndata","nameLocation":"5460:10:106","nodeType":"VariableDeclaration","scope":40695,"src":"5447:23:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40677,"name":"bytes","nodeType":"ElementaryTypeName","src":"5447:5:106","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5432:39:106"},"returnParameters":{"id":40682,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40681,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40695,"src":"5495:12:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40680,"name":"bytes","nodeType":"ElementaryTypeName","src":"5495:5:106","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5494:14:106"},"scope":40714,"src":"5407:224:106","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":40712,"nodeType":"Block","src":"5798:461:106","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":40701,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40698,"src":"5874:10:106","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":40702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5885:6:106","memberName":"length","nodeType":"MemberAccess","src":"5874:17:106","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":40703,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5894:1:106","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5874:21:106","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":40710,"nodeType":"Block","src":"6204:49:106","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":40707,"name":"FailedInnerCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40477,"src":"6225:15:106","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":40708,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6225:17:106","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":40709,"nodeType":"RevertStatement","src":"6218:24:106"}]},"id":40711,"nodeType":"IfStatement","src":"5870:383:106","trueBody":{"id":40706,"nodeType":"Block","src":"5897:301:106","statements":[{"AST":{"nativeSrc":"6055:133:106","nodeType":"YulBlock","src":"6055:133:106","statements":[{"nativeSrc":"6073:40:106","nodeType":"YulVariableDeclaration","src":"6073:40:106","value":{"arguments":[{"name":"returndata","nativeSrc":"6102:10:106","nodeType":"YulIdentifier","src":"6102:10:106"}],"functionName":{"name":"mload","nativeSrc":"6096:5:106","nodeType":"YulIdentifier","src":"6096:5:106"},"nativeSrc":"6096:17:106","nodeType":"YulFunctionCall","src":"6096:17:106"},"variables":[{"name":"returndata_size","nativeSrc":"6077:15:106","nodeType":"YulTypedName","src":"6077:15:106","type":""}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"6141:2:106","nodeType":"YulLiteral","src":"6141:2:106","type":"","value":"32"},{"name":"returndata","nativeSrc":"6145:10:106","nodeType":"YulIdentifier","src":"6145:10:106"}],"functionName":{"name":"add","nativeSrc":"6137:3:106","nodeType":"YulIdentifier","src":"6137:3:106"},"nativeSrc":"6137:19:106","nodeType":"YulFunctionCall","src":"6137:19:106"},{"name":"returndata_size","nativeSrc":"6158:15:106","nodeType":"YulIdentifier","src":"6158:15:106"}],"functionName":{"name":"revert","nativeSrc":"6130:6:106","nodeType":"YulIdentifier","src":"6130:6:106"},"nativeSrc":"6130:44:106","nodeType":"YulFunctionCall","src":"6130:44:106"},"nativeSrc":"6130:44:106","nodeType":"YulExpressionStatement","src":"6130:44:106"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":40698,"isOffset":false,"isSlot":false,"src":"6102:10:106","valueSize":1},{"declaration":40698,"isOffset":false,"isSlot":false,"src":"6145:10:106","valueSize":1}],"id":40705,"nodeType":"InlineAssembly","src":"6046:142:106"}]}}]},"documentation":{"id":40696,"nodeType":"StructuredDocumentation","src":"5637:101:106","text":" @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}."},"id":40713,"implemented":true,"kind":"function","modifiers":[],"name":"_revert","nameLocation":"5752:7:106","nodeType":"FunctionDefinition","parameters":{"id":40699,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40698,"mutability":"mutable","name":"returndata","nameLocation":"5773:10:106","nodeType":"VariableDeclaration","scope":40713,"src":"5760:23:106","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40697,"name":"bytes","nodeType":"ElementaryTypeName","src":"5760:5:106","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5759:25:106"},"returnParameters":{"id":40700,"nodeType":"ParameterList","parameters":[],"src":"5798:0:106"},"scope":40714,"src":"5743:516:106","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":40715,"src":"195:6066:106","usedErrors":[40469,40474,40477],"usedEvents":[]}],"src":"101:6161:106"},"id":106},"@openzeppelin/contracts/utils/Context.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","exportedSymbols":{"Context":[40736]},"id":40737,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":40716,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"101:24:107"},{"abstract":true,"baseContracts":[],"canonicalName":"Context","contractDependencies":[],"contractKind":"contract","documentation":{"id":40717,"nodeType":"StructuredDocumentation","src":"127:496:107","text":" @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts."},"fullyImplemented":true,"id":40736,"linearizedBaseContracts":[40736],"name":"Context","nameLocation":"642:7:107","nodeType":"ContractDefinition","nodes":[{"body":{"id":40725,"nodeType":"Block","src":"718:34:107","statements":[{"expression":{"expression":{"id":40722,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"735:3:107","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":40723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"739:6:107","memberName":"sender","nodeType":"MemberAccess","src":"735:10:107","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":40721,"id":40724,"nodeType":"Return","src":"728:17:107"}]},"id":40726,"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nameLocation":"665:10:107","nodeType":"FunctionDefinition","parameters":{"id":40718,"nodeType":"ParameterList","parameters":[],"src":"675:2:107"},"returnParameters":{"id":40721,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40720,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40726,"src":"709:7:107","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40719,"name":"address","nodeType":"ElementaryTypeName","src":"709:7:107","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"708:9:107"},"scope":40736,"src":"656:96:107","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":40734,"nodeType":"Block","src":"825:32:107","statements":[{"expression":{"expression":{"id":40731,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"842:3:107","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":40732,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"846:4:107","memberName":"data","nodeType":"MemberAccess","src":"842:8:107","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"functionReturnParameters":40730,"id":40733,"nodeType":"Return","src":"835:15:107"}]},"id":40735,"implemented":true,"kind":"function","modifiers":[],"name":"_msgData","nameLocation":"767:8:107","nodeType":"FunctionDefinition","parameters":{"id":40727,"nodeType":"ParameterList","parameters":[],"src":"775:2:107"},"returnParameters":{"id":40730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40729,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40735,"src":"809:14:107","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":40728,"name":"bytes","nodeType":"ElementaryTypeName","src":"809:5:107","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"808:16:107"},"scope":40736,"src":"758:99:107","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":40737,"src":"624:235:107","usedErrors":[],"usedEvents":[]}],"src":"101:759:107"},"id":107},"@openzeppelin/contracts/utils/Create2.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Create2.sol","exportedSymbols":{"Create2":[40839]},"id":40840,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":40738,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"101:24:108"},{"abstract":false,"baseContracts":[],"canonicalName":"Create2","contractDependencies":[],"contractKind":"library","documentation":{"id":40739,"nodeType":"StructuredDocumentation","src":"127:367:108","text":" @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.\n `CREATE2` can be used to compute in advance the address where a smart\n contract will be deployed, which allows for interesting new mechanisms known\n as 'counterfactual interactions'.\n See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more\n information."},"fullyImplemented":true,"id":40839,"linearizedBaseContracts":[40839],"name":"Create2","nameLocation":"503:7:108","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":40740,"nodeType":"StructuredDocumentation","src":"517:75:108","text":" @dev Not enough balance for performing a CREATE2 deploy."},"errorSelector":"e4bbecac","id":40746,"name":"Create2InsufficientBalance","nameLocation":"603:26:108","nodeType":"ErrorDefinition","parameters":{"id":40745,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40742,"mutability":"mutable","name":"balance","nameLocation":"638:7:108","nodeType":"VariableDeclaration","scope":40746,"src":"630:15:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40741,"name":"uint256","nodeType":"ElementaryTypeName","src":"630:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40744,"mutability":"mutable","name":"needed","nameLocation":"655:6:108","nodeType":"VariableDeclaration","scope":40746,"src":"647:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40743,"name":"uint256","nodeType":"ElementaryTypeName","src":"647:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"629:33:108"},"src":"597:66:108"},{"documentation":{"id":40747,"nodeType":"StructuredDocumentation","src":"669:50:108","text":" @dev There's no code to deploy."},"errorSelector":"4ca249dc","id":40749,"name":"Create2EmptyBytecode","nameLocation":"730:20:108","nodeType":"ErrorDefinition","parameters":{"id":40748,"nodeType":"ParameterList","parameters":[],"src":"750:2:108"},"src":"724:29:108"},{"documentation":{"id":40750,"nodeType":"StructuredDocumentation","src":"759:46:108","text":" @dev The deployment failed."},"errorSelector":"741752c2","id":40752,"name":"Create2FailedDeployment","nameLocation":"816:23:108","nodeType":"ErrorDefinition","parameters":{"id":40751,"nodeType":"ParameterList","parameters":[],"src":"839:2:108"},"src":"810:32:108"},{"body":{"id":40803,"nodeType":"Block","src":"1514:472:108","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":40766,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1536:4:108","typeDescriptions":{"typeIdentifier":"t_contract$_Create2_$40839","typeString":"library Create2"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Create2_$40839","typeString":"library Create2"}],"id":40765,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1528:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":40764,"name":"address","nodeType":"ElementaryTypeName","src":"1528:7:108","typeDescriptions":{}}},"id":40767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1528:13:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":40768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1542:7:108","memberName":"balance","nodeType":"MemberAccess","src":"1528:21:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":40769,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40755,"src":"1552:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1528:30:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":40781,"nodeType":"IfStatement","src":"1524:125:108","trueBody":{"id":40780,"nodeType":"Block","src":"1560:89:108","statements":[{"errorCall":{"arguments":[{"expression":{"arguments":[{"id":40774,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"1616:4:108","typeDescriptions":{"typeIdentifier":"t_contract$_Create2_$40839","typeString":"library Create2"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Create2_$40839","typeString":"library Create2"}],"id":40773,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1608:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":40772,"name":"address","nodeType":"ElementaryTypeName","src":"1608:7:108","typeDescriptions":{}}},"id":40775,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1608:13:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":40776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1622:7:108","memberName":"balance","nodeType":"MemberAccess","src":"1608:21:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":40777,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40755,"src":"1631:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":40771,"name":"Create2InsufficientBalance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40746,"src":"1581:26:108","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":40778,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1581:57:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":40779,"nodeType":"RevertStatement","src":"1574:64:108"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":40782,"name":"bytecode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40759,"src":"1662:8:108","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":40783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1671:6:108","memberName":"length","nodeType":"MemberAccess","src":"1662:15:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":40784,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1681:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1662:20:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":40790,"nodeType":"IfStatement","src":"1658:80:108","trueBody":{"id":40789,"nodeType":"Block","src":"1684:54:108","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":40786,"name":"Create2EmptyBytecode","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40749,"src":"1705:20:108","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":40787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1705:22:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":40788,"nodeType":"RevertStatement","src":"1698:29:108"}]}},{"AST":{"nativeSrc":"1799:91:108","nodeType":"YulBlock","src":"1799:91:108","statements":[{"nativeSrc":"1813:67:108","nodeType":"YulAssignment","src":"1813:67:108","value":{"arguments":[{"name":"amount","nativeSrc":"1829:6:108","nodeType":"YulIdentifier","src":"1829:6:108"},{"arguments":[{"name":"bytecode","nativeSrc":"1841:8:108","nodeType":"YulIdentifier","src":"1841:8:108"},{"kind":"number","nativeSrc":"1851:4:108","nodeType":"YulLiteral","src":"1851:4:108","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"1837:3:108","nodeType":"YulIdentifier","src":"1837:3:108"},"nativeSrc":"1837:19:108","nodeType":"YulFunctionCall","src":"1837:19:108"},{"arguments":[{"name":"bytecode","nativeSrc":"1864:8:108","nodeType":"YulIdentifier","src":"1864:8:108"}],"functionName":{"name":"mload","nativeSrc":"1858:5:108","nodeType":"YulIdentifier","src":"1858:5:108"},"nativeSrc":"1858:15:108","nodeType":"YulFunctionCall","src":"1858:15:108"},{"name":"salt","nativeSrc":"1875:4:108","nodeType":"YulIdentifier","src":"1875:4:108"}],"functionName":{"name":"create2","nativeSrc":"1821:7:108","nodeType":"YulIdentifier","src":"1821:7:108"},"nativeSrc":"1821:59:108","nodeType":"YulFunctionCall","src":"1821:59:108"},"variableNames":[{"name":"addr","nativeSrc":"1813:4:108","nodeType":"YulIdentifier","src":"1813:4:108"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":40762,"isOffset":false,"isSlot":false,"src":"1813:4:108","valueSize":1},{"declaration":40755,"isOffset":false,"isSlot":false,"src":"1829:6:108","valueSize":1},{"declaration":40759,"isOffset":false,"isSlot":false,"src":"1841:8:108","valueSize":1},{"declaration":40759,"isOffset":false,"isSlot":false,"src":"1864:8:108","valueSize":1},{"declaration":40757,"isOffset":false,"isSlot":false,"src":"1875:4:108","valueSize":1}],"id":40791,"nodeType":"InlineAssembly","src":"1790:100:108"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":40797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40792,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40762,"src":"1903:4:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":40795,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1919:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":40794,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1911:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":40793,"name":"address","nodeType":"ElementaryTypeName","src":"1911:7:108","typeDescriptions":{}}},"id":40796,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1911:10:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1903:18:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":40802,"nodeType":"IfStatement","src":"1899:81:108","trueBody":{"id":40801,"nodeType":"Block","src":"1923:57:108","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":40798,"name":"Create2FailedDeployment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40752,"src":"1944:23:108","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":40799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1944:25:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":40800,"nodeType":"RevertStatement","src":"1937:32:108"}]}}]},"documentation":{"id":40753,"nodeType":"StructuredDocumentation","src":"848:560:108","text":" @dev Deploys a contract using `CREATE2`. The address where the contract\n will be deployed can be known in advance via {computeAddress}.\n The bytecode for a contract can be obtained from Solidity with\n `type(contractName).creationCode`.\n Requirements:\n - `bytecode` must not be empty.\n - `salt` must have not been used for `bytecode` already.\n - the factory must have a balance of at least `amount`.\n - if `amount` is non-zero, `bytecode` must have a `payable` constructor."},"id":40804,"implemented":true,"kind":"function","modifiers":[],"name":"deploy","nameLocation":"1422:6:108","nodeType":"FunctionDefinition","parameters":{"id":40760,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40755,"mutability":"mutable","name":"amount","nameLocation":"1437:6:108","nodeType":"VariableDeclaration","scope":40804,"src":"1429:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40754,"name":"uint256","nodeType":"ElementaryTypeName","src":"1429:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":40757,"mutability":"mutable","name":"salt","nameLocation":"1453:4:108","nodeType":"VariableDeclaration","scope":40804,"src":"1445:12:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40756,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1445:7:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":40759,"mutability":"mutable","name":"bytecode","nameLocation":"1472:8:108","nodeType":"VariableDeclaration","scope":40804,"src":"1459:21:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40758,"name":"bytes","nodeType":"ElementaryTypeName","src":"1459:5:108","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1428:53:108"},"returnParameters":{"id":40763,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40762,"mutability":"mutable","name":"addr","nameLocation":"1508:4:108","nodeType":"VariableDeclaration","scope":40804,"src":"1500:12:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40761,"name":"address","nodeType":"ElementaryTypeName","src":"1500:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1499:14:108"},"scope":40839,"src":"1413:573:108","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":40823,"nodeType":"Block","src":"2282:73:108","statements":[{"expression":{"arguments":[{"id":40815,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40807,"src":"2314:4:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":40816,"name":"bytecodeHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40809,"src":"2320:12:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":40819,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2342:4:108","typeDescriptions":{"typeIdentifier":"t_contract$_Create2_$40839","typeString":"library Create2"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Create2_$40839","typeString":"library Create2"}],"id":40818,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2334:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":40817,"name":"address","nodeType":"ElementaryTypeName","src":"2334:7:108","typeDescriptions":{}}},"id":40820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2334:13:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":40814,"name":"computeAddress","nodeType":"Identifier","overloadedDeclarations":[40824,40838],"referencedDeclaration":40838,"src":"2299:14:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_address_$","typeString":"function (bytes32,bytes32,address) pure returns (address)"}},"id":40821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2299:49:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":40813,"id":40822,"nodeType":"Return","src":"2292:56:108"}]},"documentation":{"id":40805,"nodeType":"StructuredDocumentation","src":"1992:193:108","text":" @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the\n `bytecodeHash` or `salt` will result in a new destination address."},"id":40824,"implemented":true,"kind":"function","modifiers":[],"name":"computeAddress","nameLocation":"2199:14:108","nodeType":"FunctionDefinition","parameters":{"id":40810,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40807,"mutability":"mutable","name":"salt","nameLocation":"2222:4:108","nodeType":"VariableDeclaration","scope":40824,"src":"2214:12:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40806,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2214:7:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":40809,"mutability":"mutable","name":"bytecodeHash","nameLocation":"2236:12:108","nodeType":"VariableDeclaration","scope":40824,"src":"2228:20:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40808,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2228:7:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2213:36:108"},"returnParameters":{"id":40813,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40812,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40824,"src":"2273:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40811,"name":"address","nodeType":"ElementaryTypeName","src":"2273:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2272:9:108"},"scope":40839,"src":"2190:165:108","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":40837,"nodeType":"Block","src":"2713:1657:108","statements":[{"AST":{"nativeSrc":"2775:1589:108","nodeType":"YulBlock","src":"2775:1589:108","statements":[{"nativeSrc":"2789:22:108","nodeType":"YulVariableDeclaration","src":"2789:22:108","value":{"arguments":[{"kind":"number","nativeSrc":"2806:4:108","nodeType":"YulLiteral","src":"2806:4:108","type":"","value":"0x40"}],"functionName":{"name":"mload","nativeSrc":"2800:5:108","nodeType":"YulIdentifier","src":"2800:5:108"},"nativeSrc":"2800:11:108","nodeType":"YulFunctionCall","src":"2800:11:108"},"variables":[{"name":"ptr","nativeSrc":"2793:3:108","nodeType":"YulTypedName","src":"2793:3:108","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"4013:3:108","nodeType":"YulIdentifier","src":"4013:3:108"},{"kind":"number","nativeSrc":"4018:4:108","nodeType":"YulLiteral","src":"4018:4:108","type":"","value":"0x40"}],"functionName":{"name":"add","nativeSrc":"4009:3:108","nodeType":"YulIdentifier","src":"4009:3:108"},"nativeSrc":"4009:14:108","nodeType":"YulFunctionCall","src":"4009:14:108"},{"name":"bytecodeHash","nativeSrc":"4025:12:108","nodeType":"YulIdentifier","src":"4025:12:108"}],"functionName":{"name":"mstore","nativeSrc":"4002:6:108","nodeType":"YulIdentifier","src":"4002:6:108"},"nativeSrc":"4002:36:108","nodeType":"YulFunctionCall","src":"4002:36:108"},"nativeSrc":"4002:36:108","nodeType":"YulExpressionStatement","src":"4002:36:108"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"4062:3:108","nodeType":"YulIdentifier","src":"4062:3:108"},{"kind":"number","nativeSrc":"4067:4:108","nodeType":"YulLiteral","src":"4067:4:108","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"4058:3:108","nodeType":"YulIdentifier","src":"4058:3:108"},"nativeSrc":"4058:14:108","nodeType":"YulFunctionCall","src":"4058:14:108"},{"name":"salt","nativeSrc":"4074:4:108","nodeType":"YulIdentifier","src":"4074:4:108"}],"functionName":{"name":"mstore","nativeSrc":"4051:6:108","nodeType":"YulIdentifier","src":"4051:6:108"},"nativeSrc":"4051:28:108","nodeType":"YulFunctionCall","src":"4051:28:108"},"nativeSrc":"4051:28:108","nodeType":"YulExpressionStatement","src":"4051:28:108"},{"expression":{"arguments":[{"name":"ptr","nativeSrc":"4099:3:108","nodeType":"YulIdentifier","src":"4099:3:108"},{"name":"deployer","nativeSrc":"4104:8:108","nodeType":"YulIdentifier","src":"4104:8:108"}],"functionName":{"name":"mstore","nativeSrc":"4092:6:108","nodeType":"YulIdentifier","src":"4092:6:108"},"nativeSrc":"4092:21:108","nodeType":"YulFunctionCall","src":"4092:21:108"},"nativeSrc":"4092:21:108","nodeType":"YulExpressionStatement","src":"4092:21:108"},{"nativeSrc":"4175:27:108","nodeType":"YulVariableDeclaration","src":"4175:27:108","value":{"arguments":[{"name":"ptr","nativeSrc":"4192:3:108","nodeType":"YulIdentifier","src":"4192:3:108"},{"kind":"number","nativeSrc":"4197:4:108","nodeType":"YulLiteral","src":"4197:4:108","type":"","value":"0x0b"}],"functionName":{"name":"add","nativeSrc":"4188:3:108","nodeType":"YulIdentifier","src":"4188:3:108"},"nativeSrc":"4188:14:108","nodeType":"YulFunctionCall","src":"4188:14:108"},"variables":[{"name":"start","nativeSrc":"4179:5:108","nodeType":"YulTypedName","src":"4179:5:108","type":""}]},{"expression":{"arguments":[{"name":"start","nativeSrc":"4301:5:108","nodeType":"YulIdentifier","src":"4301:5:108"},{"kind":"number","nativeSrc":"4308:4:108","nodeType":"YulLiteral","src":"4308:4:108","type":"","value":"0xff"}],"functionName":{"name":"mstore8","nativeSrc":"4293:7:108","nodeType":"YulIdentifier","src":"4293:7:108"},"nativeSrc":"4293:20:108","nodeType":"YulFunctionCall","src":"4293:20:108"},"nativeSrc":"4293:20:108","nodeType":"YulExpressionStatement","src":"4293:20:108"},{"nativeSrc":"4326:28:108","nodeType":"YulAssignment","src":"4326:28:108","value":{"arguments":[{"name":"start","nativeSrc":"4344:5:108","nodeType":"YulIdentifier","src":"4344:5:108"},{"kind":"number","nativeSrc":"4351:2:108","nodeType":"YulLiteral","src":"4351:2:108","type":"","value":"85"}],"functionName":{"name":"keccak256","nativeSrc":"4334:9:108","nodeType":"YulIdentifier","src":"4334:9:108"},"nativeSrc":"4334:20:108","nodeType":"YulFunctionCall","src":"4334:20:108"},"variableNames":[{"name":"addr","nativeSrc":"4326:4:108","nodeType":"YulIdentifier","src":"4326:4:108"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":40834,"isOffset":false,"isSlot":false,"src":"4326:4:108","valueSize":1},{"declaration":40829,"isOffset":false,"isSlot":false,"src":"4025:12:108","valueSize":1},{"declaration":40831,"isOffset":false,"isSlot":false,"src":"4104:8:108","valueSize":1},{"declaration":40827,"isOffset":false,"isSlot":false,"src":"4074:4:108","valueSize":1}],"id":40836,"nodeType":"InlineAssembly","src":"2766:1598:108"}]},"documentation":{"id":40825,"nodeType":"StructuredDocumentation","src":"2361:232:108","text":" @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at\n `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}."},"id":40838,"implemented":true,"kind":"function","modifiers":[],"name":"computeAddress","nameLocation":"2607:14:108","nodeType":"FunctionDefinition","parameters":{"id":40832,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40827,"mutability":"mutable","name":"salt","nameLocation":"2630:4:108","nodeType":"VariableDeclaration","scope":40838,"src":"2622:12:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40826,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2622:7:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":40829,"mutability":"mutable","name":"bytecodeHash","nameLocation":"2644:12:108","nodeType":"VariableDeclaration","scope":40838,"src":"2636:20:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40828,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2636:7:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":40831,"mutability":"mutable","name":"deployer","nameLocation":"2666:8:108","nodeType":"VariableDeclaration","scope":40838,"src":"2658:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40830,"name":"address","nodeType":"ElementaryTypeName","src":"2658:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2621:54:108"},"returnParameters":{"id":40835,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40834,"mutability":"mutable","name":"addr","nameLocation":"2707:4:108","nodeType":"VariableDeclaration","scope":40838,"src":"2699:12:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40833,"name":"address","nodeType":"ElementaryTypeName","src":"2699:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2698:14:108"},"scope":40839,"src":"2598:1772:108","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":40840,"src":"495:3877:108","usedErrors":[40746,40749,40752],"usedEvents":[]}],"src":"101:4272:108"},"id":108},"@openzeppelin/contracts/utils/Nonces.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Nonces.sol","exportedSymbols":{"Nonces":[40907]},"id":40908,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":40841,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"99:24:109"},{"abstract":true,"baseContracts":[],"canonicalName":"Nonces","contractDependencies":[],"contractKind":"contract","documentation":{"id":40842,"nodeType":"StructuredDocumentation","src":"125:83:109","text":" @dev Provides tracking nonces for addresses. Nonces will only increment."},"fullyImplemented":true,"id":40907,"linearizedBaseContracts":[40907],"name":"Nonces","nameLocation":"227:6:109","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":40843,"nodeType":"StructuredDocumentation","src":"240:90:109","text":" @dev The nonce used for an `account` is not the expected current nonce."},"errorSelector":"752d88c0","id":40849,"name":"InvalidAccountNonce","nameLocation":"341:19:109","nodeType":"ErrorDefinition","parameters":{"id":40848,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40845,"mutability":"mutable","name":"account","nameLocation":"369:7:109","nodeType":"VariableDeclaration","scope":40849,"src":"361:15:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40844,"name":"address","nodeType":"ElementaryTypeName","src":"361:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40847,"mutability":"mutable","name":"currentNonce","nameLocation":"386:12:109","nodeType":"VariableDeclaration","scope":40849,"src":"378:20:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40846,"name":"uint256","nodeType":"ElementaryTypeName","src":"378:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"360:39:109"},"src":"335:65:109"},{"constant":false,"id":40853,"mutability":"mutable","name":"_nonces","nameLocation":"450:7:109","nodeType":"VariableDeclaration","scope":40907,"src":"406:51:109","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"typeName":{"id":40852,"keyName":"account","keyNameLocation":"422:7:109","keyType":{"id":40850,"name":"address","nodeType":"ElementaryTypeName","src":"414:7:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"406:35:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"},"valueName":"","valueNameLocation":"-1:-1:-1","valueType":{"id":40851,"name":"uint256","nodeType":"ElementaryTypeName","src":"433:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},"visibility":"private"},{"body":{"id":40865,"nodeType":"Block","src":"607:38:109","statements":[{"expression":{"baseExpression":{"id":40861,"name":"_nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40853,"src":"624:7:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":40863,"indexExpression":{"id":40862,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40856,"src":"632:5:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"624:14:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":40860,"id":40864,"nodeType":"Return","src":"617:21:109"}]},"documentation":{"id":40854,"nodeType":"StructuredDocumentation","src":"464:69:109","text":" @dev Returns the next unused nonce for an address."},"functionSelector":"7ecebe00","id":40866,"implemented":true,"kind":"function","modifiers":[],"name":"nonces","nameLocation":"547:6:109","nodeType":"FunctionDefinition","parameters":{"id":40857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40856,"mutability":"mutable","name":"owner","nameLocation":"562:5:109","nodeType":"VariableDeclaration","scope":40866,"src":"554:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40855,"name":"address","nodeType":"ElementaryTypeName","src":"554:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"553:15:109"},"returnParameters":{"id":40860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40859,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40866,"src":"598:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40858,"name":"uint256","nodeType":"ElementaryTypeName","src":"598:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"597:9:109"},"scope":40907,"src":"538:107:109","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":40880,"nodeType":"Block","src":"828:326:109","statements":[{"id":40879,"nodeType":"UncheckedBlock","src":"1031:117:109","statements":[{"expression":{"id":40877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1121:16:109","subExpression":{"baseExpression":{"id":40874,"name":"_nonces","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40853,"src":"1121:7:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":40876,"indexExpression":{"id":40875,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40869,"src":"1129:5:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1121:14:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":40873,"id":40878,"nodeType":"Return","src":"1114:23:109"}]}]},"documentation":{"id":40867,"nodeType":"StructuredDocumentation","src":"651:103:109","text":" @dev Consumes a nonce.\n Returns the current value and increments nonce."},"id":40881,"implemented":true,"kind":"function","modifiers":[],"name":"_useNonce","nameLocation":"768:9:109","nodeType":"FunctionDefinition","parameters":{"id":40870,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40869,"mutability":"mutable","name":"owner","nameLocation":"786:5:109","nodeType":"VariableDeclaration","scope":40881,"src":"778:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40868,"name":"address","nodeType":"ElementaryTypeName","src":"778:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"777:15:109"},"returnParameters":{"id":40873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40872,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40881,"src":"819:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40871,"name":"uint256","nodeType":"ElementaryTypeName","src":"819:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"818:9:109"},"scope":40907,"src":"759:395:109","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":40905,"nodeType":"Block","src":"1338:149:109","statements":[{"assignments":[40890],"declarations":[{"constant":false,"id":40890,"mutability":"mutable","name":"current","nameLocation":"1356:7:109","nodeType":"VariableDeclaration","scope":40905,"src":"1348:15:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40889,"name":"uint256","nodeType":"ElementaryTypeName","src":"1348:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":40894,"initialValue":{"arguments":[{"id":40892,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40884,"src":"1376:5:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":40891,"name":"_useNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40881,"src":"1366:9:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$","typeString":"function (address) returns (uint256)"}},"id":40893,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1366:16:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1348:34:109"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":40895,"name":"nonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40886,"src":"1396:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":40896,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40890,"src":"1405:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1396:16:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":40904,"nodeType":"IfStatement","src":"1392:89:109","trueBody":{"id":40903,"nodeType":"Block","src":"1414:67:109","statements":[{"errorCall":{"arguments":[{"id":40899,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40884,"src":"1455:5:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":40900,"name":"current","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40890,"src":"1462:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":40898,"name":"InvalidAccountNonce","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40849,"src":"1435:19:109","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_uint256_$returns$_t_error_$","typeString":"function (address,uint256) pure returns (error)"}},"id":40901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1435:35:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":40902,"nodeType":"RevertStatement","src":"1428:42:109"}]}}]},"documentation":{"id":40882,"nodeType":"StructuredDocumentation","src":"1160:100:109","text":" @dev Same as {_useNonce} but checking that `nonce` is the next valid for `owner`."},"id":40906,"implemented":true,"kind":"function","modifiers":[],"name":"_useCheckedNonce","nameLocation":"1274:16:109","nodeType":"FunctionDefinition","parameters":{"id":40887,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40884,"mutability":"mutable","name":"owner","nameLocation":"1299:5:109","nodeType":"VariableDeclaration","scope":40906,"src":"1291:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":40883,"name":"address","nodeType":"ElementaryTypeName","src":"1291:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":40886,"mutability":"mutable","name":"nonce","nameLocation":"1314:5:109","nodeType":"VariableDeclaration","scope":40906,"src":"1306:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40885,"name":"uint256","nodeType":"ElementaryTypeName","src":"1306:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1290:30:109"},"returnParameters":{"id":40888,"nodeType":"ParameterList","parameters":[],"src":"1338:0:109"},"scope":40907,"src":"1265:222:109","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":40908,"src":"209:1280:109","usedErrors":[40849],"usedEvents":[]}],"src":"99:1391:109"},"id":109},"@openzeppelin/contracts/utils/ShortStrings.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/ShortStrings.sol","exportedSymbols":{"ShortString":[40913],"ShortStrings":[41124],"StorageSlot":[41234]},"id":41125,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":40909,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"106:24:110"},{"absolutePath":"@openzeppelin/contracts/utils/StorageSlot.sol","file":"./StorageSlot.sol","id":40911,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41125,"sourceUnit":41235,"src":"132:46:110","symbolAliases":[{"foreign":{"id":40910,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41234,"src":"140:11:110","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"canonicalName":"ShortString","id":40913,"name":"ShortString","nameLocation":"353:11:110","nodeType":"UserDefinedValueTypeDefinition","src":"348:28:110","underlyingType":{"id":40912,"name":"bytes32","nodeType":"ElementaryTypeName","src":"368:7:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}},{"abstract":false,"baseContracts":[],"canonicalName":"ShortStrings","contractDependencies":[],"contractKind":"library","documentation":{"id":40914,"nodeType":"StructuredDocumentation","src":"378:876:110","text":" @dev This library provides functions to convert short memory strings\n into a `ShortString` type that can be used as an immutable variable.\n Strings of arbitrary length can be optimized using this library if\n they are short enough (up to 31 bytes) by packing them with their\n length (1 byte) in a single EVM word (32 bytes). Additionally, a\n fallback mechanism can be used for every other case.\n Usage example:\n ```solidity\n contract Named {\n using ShortStrings for *;\n ShortString private immutable _name;\n string private _nameFallback;\n constructor(string memory contractName) {\n _name = contractName.toShortStringWithFallback(_nameFallback);\n }\n function name() external view returns (string memory) {\n return _name.toStringWithFallback(_nameFallback);\n }\n }\n ```"},"fullyImplemented":true,"id":41124,"linearizedBaseContracts":[41124],"name":"ShortStrings","nameLocation":"1263:12:110","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":40917,"mutability":"constant","name":"FALLBACK_SENTINEL","nameLocation":"1370:17:110","nodeType":"VariableDeclaration","scope":41124,"src":"1345:111:110","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":40915,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1345:7:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"307830303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030304646","id":40916,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1390:66:110","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0x00000000000000000000000000000000000000000000000000000000000000FF"},"visibility":"private"},{"errorSelector":"305a27a9","id":40921,"name":"StringTooLong","nameLocation":"1469:13:110","nodeType":"ErrorDefinition","parameters":{"id":40920,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40919,"mutability":"mutable","name":"str","nameLocation":"1490:3:110","nodeType":"VariableDeclaration","scope":40921,"src":"1483:10:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":40918,"name":"string","nodeType":"ElementaryTypeName","src":"1483:6:110","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1482:12:110"},"src":"1463:32:110"},{"errorSelector":"b3512b0c","id":40923,"name":"InvalidShortString","nameLocation":"1506:18:110","nodeType":"ErrorDefinition","parameters":{"id":40922,"nodeType":"ParameterList","parameters":[],"src":"1524:2:110"},"src":"1500:27:110"},{"body":{"id":40966,"nodeType":"Block","src":"1786:208:110","statements":[{"assignments":[40933],"declarations":[{"constant":false,"id":40933,"mutability":"mutable","name":"bstr","nameLocation":"1809:4:110","nodeType":"VariableDeclaration","scope":40966,"src":"1796:17:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":40932,"name":"bytes","nodeType":"ElementaryTypeName","src":"1796:5:110","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":40938,"initialValue":{"arguments":[{"id":40936,"name":"str","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40926,"src":"1822:3:110","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":40935,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1816:5:110","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":40934,"name":"bytes","nodeType":"ElementaryTypeName","src":"1816:5:110","typeDescriptions":{}}},"id":40937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1816:10:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"1796:30:110"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40942,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":40939,"name":"bstr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40933,"src":"1840:4:110","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":40940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1845:6:110","memberName":"length","nodeType":"MemberAccess","src":"1840:11:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"3331","id":40941,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1854:2:110","typeDescriptions":{"typeIdentifier":"t_rational_31_by_1","typeString":"int_const 31"},"value":"31"},"src":"1840:16:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":40948,"nodeType":"IfStatement","src":"1836:72:110","trueBody":{"id":40947,"nodeType":"Block","src":"1858:50:110","statements":[{"errorCall":{"arguments":[{"id":40944,"name":"str","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40926,"src":"1893:3:110","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":40943,"name":"StringTooLong","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40921,"src":"1879:13:110","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_string_memory_ptr_$returns$_t_error_$","typeString":"function (string memory) pure returns (error)"}},"id":40945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1879:18:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":40946,"nodeType":"RevertStatement","src":"1872:25:110"}]}},{"expression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":40962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":40957,"name":"bstr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40933,"src":"1965:4:110","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":40956,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1957:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":40955,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1957:7:110","typeDescriptions":{}}},"id":40958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1957:13:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":40954,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1949:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":40953,"name":"uint256","nodeType":"ElementaryTypeName","src":"1949:7:110","typeDescriptions":{}}},"id":40959,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1949:22:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"|","rightExpression":{"expression":{"id":40960,"name":"bstr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40933,"src":"1974:4:110","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":40961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1979:6:110","memberName":"length","nodeType":"MemberAccess","src":"1974:11:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1949:36:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":40952,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1941:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":40951,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1941:7:110","typeDescriptions":{}}},"id":40963,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1941:45:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":40949,"name":"ShortString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40913,"src":"1924:11:110","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_ShortString_$40913_$","typeString":"type(ShortString)"}},"id":40950,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1936:4:110","memberName":"wrap","nodeType":"MemberAccess","src":"1924:16:110","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_ShortString_$40913_$","typeString":"function (bytes32) pure returns (ShortString)"}},"id":40964,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1924:63:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}},"functionReturnParameters":40931,"id":40965,"nodeType":"Return","src":"1917:70:110"}]},"documentation":{"id":40924,"nodeType":"StructuredDocumentation","src":"1533:170:110","text":" @dev Encode a string of at most 31 chars into a `ShortString`.\n This will trigger a `StringTooLong` error is the input string is too long."},"id":40967,"implemented":true,"kind":"function","modifiers":[],"name":"toShortString","nameLocation":"1717:13:110","nodeType":"FunctionDefinition","parameters":{"id":40927,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40926,"mutability":"mutable","name":"str","nameLocation":"1745:3:110","nodeType":"VariableDeclaration","scope":40967,"src":"1731:17:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":40925,"name":"string","nodeType":"ElementaryTypeName","src":"1731:6:110","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1730:19:110"},"returnParameters":{"id":40931,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40930,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40967,"src":"1773:11:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"},"typeName":{"id":40929,"nodeType":"UserDefinedTypeName","pathNode":{"id":40928,"name":"ShortString","nameLocations":["1773:11:110"],"nodeType":"IdentifierPath","referencedDeclaration":40913,"src":"1773:11:110"},"referencedDeclaration":40913,"src":"1773:11:110","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}},"visibility":"internal"}],"src":"1772:13:110"},"scope":41124,"src":"1708:286:110","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":40992,"nodeType":"Block","src":"2152:331:110","statements":[{"assignments":[40977],"declarations":[{"constant":false,"id":40977,"mutability":"mutable","name":"len","nameLocation":"2170:3:110","nodeType":"VariableDeclaration","scope":40992,"src":"2162:11:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40976,"name":"uint256","nodeType":"ElementaryTypeName","src":"2162:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":40981,"initialValue":{"arguments":[{"id":40979,"name":"sstr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40971,"src":"2187:4:110","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}],"id":40978,"name":"byteLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41025,"src":"2176:10:110","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_ShortString_$40913_$returns$_t_uint256_$","typeString":"function (ShortString) pure returns (uint256)"}},"id":40980,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2176:16:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2162:30:110"},{"assignments":[40983],"declarations":[{"constant":false,"id":40983,"mutability":"mutable","name":"str","nameLocation":"2294:3:110","nodeType":"VariableDeclaration","scope":40992,"src":"2280:17:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":40982,"name":"string","nodeType":"ElementaryTypeName","src":"2280:6:110","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":40988,"initialValue":{"arguments":[{"hexValue":"3332","id":40986,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2311:2:110","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"}],"id":40985,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2300:10:110","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256) pure returns (string memory)"},"typeName":{"id":40984,"name":"string","nodeType":"ElementaryTypeName","src":"2304:6:110","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}}},"id":40987,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2300:14:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"VariableDeclarationStatement","src":"2280:34:110"},{"AST":{"nativeSrc":"2376:81:110","nodeType":"YulBlock","src":"2376:81:110","statements":[{"expression":{"arguments":[{"name":"str","nativeSrc":"2397:3:110","nodeType":"YulIdentifier","src":"2397:3:110"},{"name":"len","nativeSrc":"2402:3:110","nodeType":"YulIdentifier","src":"2402:3:110"}],"functionName":{"name":"mstore","nativeSrc":"2390:6:110","nodeType":"YulIdentifier","src":"2390:6:110"},"nativeSrc":"2390:16:110","nodeType":"YulFunctionCall","src":"2390:16:110"},"nativeSrc":"2390:16:110","nodeType":"YulExpressionStatement","src":"2390:16:110"},{"expression":{"arguments":[{"arguments":[{"name":"str","nativeSrc":"2430:3:110","nodeType":"YulIdentifier","src":"2430:3:110"},{"kind":"number","nativeSrc":"2435:4:110","nodeType":"YulLiteral","src":"2435:4:110","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"2426:3:110","nodeType":"YulIdentifier","src":"2426:3:110"},"nativeSrc":"2426:14:110","nodeType":"YulFunctionCall","src":"2426:14:110"},{"name":"sstr","nativeSrc":"2442:4:110","nodeType":"YulIdentifier","src":"2442:4:110"}],"functionName":{"name":"mstore","nativeSrc":"2419:6:110","nodeType":"YulIdentifier","src":"2419:6:110"},"nativeSrc":"2419:28:110","nodeType":"YulFunctionCall","src":"2419:28:110"},"nativeSrc":"2419:28:110","nodeType":"YulExpressionStatement","src":"2419:28:110"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":40977,"isOffset":false,"isSlot":false,"src":"2402:3:110","valueSize":1},{"declaration":40971,"isOffset":false,"isSlot":false,"src":"2442:4:110","valueSize":1},{"declaration":40983,"isOffset":false,"isSlot":false,"src":"2397:3:110","valueSize":1},{"declaration":40983,"isOffset":false,"isSlot":false,"src":"2430:3:110","valueSize":1}],"id":40989,"nodeType":"InlineAssembly","src":"2367:90:110"},{"expression":{"id":40990,"name":"str","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40983,"src":"2473:3:110","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":40975,"id":40991,"nodeType":"Return","src":"2466:10:110"}]},"documentation":{"id":40968,"nodeType":"StructuredDocumentation","src":"2000:73:110","text":" @dev Decode a `ShortString` back to a \"normal\" string."},"id":40993,"implemented":true,"kind":"function","modifiers":[],"name":"toString","nameLocation":"2087:8:110","nodeType":"FunctionDefinition","parameters":{"id":40972,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40971,"mutability":"mutable","name":"sstr","nameLocation":"2108:4:110","nodeType":"VariableDeclaration","scope":40993,"src":"2096:16:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"},"typeName":{"id":40970,"nodeType":"UserDefinedTypeName","pathNode":{"id":40969,"name":"ShortString","nameLocations":["2096:11:110"],"nodeType":"IdentifierPath","referencedDeclaration":40913,"src":"2096:11:110"},"referencedDeclaration":40913,"src":"2096:11:110","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}},"visibility":"internal"}],"src":"2095:18:110"},"returnParameters":{"id":40975,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40974,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40993,"src":"2137:13:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":40973,"name":"string","nodeType":"ElementaryTypeName","src":"2137:6:110","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2136:15:110"},"scope":41124,"src":"2078:405:110","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":41024,"nodeType":"Block","src":"2625:175:110","statements":[{"assignments":[41003],"declarations":[{"constant":false,"id":41003,"mutability":"mutable","name":"result","nameLocation":"2643:6:110","nodeType":"VariableDeclaration","scope":41024,"src":"2635:14:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41002,"name":"uint256","nodeType":"ElementaryTypeName","src":"2635:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":41013,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":41008,"name":"sstr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40997,"src":"2679:4:110","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}],"expression":{"id":41006,"name":"ShortString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40913,"src":"2660:11:110","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_ShortString_$40913_$","typeString":"type(ShortString)"}},"id":41007,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2672:6:110","memberName":"unwrap","nodeType":"MemberAccess","src":"2660:18:110","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_ShortString_$40913_$returns$_t_bytes32_$","typeString":"function (ShortString) pure returns (bytes32)"}},"id":41009,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2660:24:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":41005,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2652:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":41004,"name":"uint256","nodeType":"ElementaryTypeName","src":"2652:7:110","typeDescriptions":{}}},"id":41010,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2652:33:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"30784646","id":41011,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2688:4:110","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"0xFF"},"src":"2652:40:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2635:57:110"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":41014,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41003,"src":"2706:6:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"3331","id":41015,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2715:2:110","typeDescriptions":{"typeIdentifier":"t_rational_31_by_1","typeString":"int_const 31"},"value":"31"},"src":"2706:11:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":41021,"nodeType":"IfStatement","src":"2702:69:110","trueBody":{"id":41020,"nodeType":"Block","src":"2719:52:110","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":41017,"name":"InvalidShortString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40923,"src":"2740:18:110","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":41018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2740:20:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":41019,"nodeType":"RevertStatement","src":"2733:27:110"}]}},{"expression":{"id":41022,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41003,"src":"2787:6:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":41001,"id":41023,"nodeType":"Return","src":"2780:13:110"}]},"documentation":{"id":40994,"nodeType":"StructuredDocumentation","src":"2489:61:110","text":" @dev Return the length of a `ShortString`."},"id":41025,"implemented":true,"kind":"function","modifiers":[],"name":"byteLength","nameLocation":"2564:10:110","nodeType":"FunctionDefinition","parameters":{"id":40998,"nodeType":"ParameterList","parameters":[{"constant":false,"id":40997,"mutability":"mutable","name":"sstr","nameLocation":"2587:4:110","nodeType":"VariableDeclaration","scope":41025,"src":"2575:16:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"},"typeName":{"id":40996,"nodeType":"UserDefinedTypeName","pathNode":{"id":40995,"name":"ShortString","nameLocations":["2575:11:110"],"nodeType":"IdentifierPath","referencedDeclaration":40913,"src":"2575:11:110"},"referencedDeclaration":40913,"src":"2575:11:110","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}},"visibility":"internal"}],"src":"2574:18:110"},"returnParameters":{"id":41001,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41000,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41025,"src":"2616:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":40999,"name":"uint256","nodeType":"ElementaryTypeName","src":"2616:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2615:9:110"},"scope":41124,"src":"2555:245:110","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":41064,"nodeType":"Block","src":"3023:231:110","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":41038,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41028,"src":"3043:5:110","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":41037,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3037:5:110","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":41036,"name":"bytes","nodeType":"ElementaryTypeName","src":"3037:5:110","typeDescriptions":{}}},"id":41039,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3037:12:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":41040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3050:6:110","memberName":"length","nodeType":"MemberAccess","src":"3037:19:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"3332","id":41041,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3059:2:110","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"3037:24:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":41062,"nodeType":"Block","src":"3121:127:110","statements":[{"expression":{"id":41055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"arguments":[{"id":41051,"name":"store","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41030,"src":"3161:5:110","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_storage_ptr","typeString":"string storage pointer"}],"expression":{"id":41048,"name":"StorageSlot","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41234,"src":"3135:11:110","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_StorageSlot_$41234_$","typeString":"type(library StorageSlot)"}},"id":41050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3147:13:110","memberName":"getStringSlot","nodeType":"MemberAccess","referencedDeclaration":41211,"src":"3135:25:110","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_storage_ptr_$returns$_t_struct$_StringSlot_$41142_storage_ptr_$","typeString":"function (string storage pointer) pure returns (struct StorageSlot.StringSlot storage pointer)"}},"id":41052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3135:32:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$41142_storage_ptr","typeString":"struct StorageSlot.StringSlot storage pointer"}},"id":41053,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"3168:5:110","memberName":"value","nodeType":"MemberAccess","referencedDeclaration":41141,"src":"3135:38:110","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":41054,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41028,"src":"3176:5:110","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"3135:46:110","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":41056,"nodeType":"ExpressionStatement","src":"3135:46:110"},{"expression":{"arguments":[{"id":41059,"name":"FALLBACK_SENTINEL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40917,"src":"3219:17:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":41057,"name":"ShortString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40913,"src":"3202:11:110","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_ShortString_$40913_$","typeString":"type(ShortString)"}},"id":41058,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3214:4:110","memberName":"wrap","nodeType":"MemberAccess","src":"3202:16:110","typeDescriptions":{"typeIdentifier":"t_function_wrap_pure$_t_bytes32_$returns$_t_userDefinedValueType$_ShortString_$40913_$","typeString":"function (bytes32) pure returns (ShortString)"}},"id":41060,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3202:35:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}},"functionReturnParameters":41035,"id":41061,"nodeType":"Return","src":"3195:42:110"}]},"id":41063,"nodeType":"IfStatement","src":"3033:215:110","trueBody":{"id":41047,"nodeType":"Block","src":"3063:52:110","statements":[{"expression":{"arguments":[{"id":41044,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41028,"src":"3098:5:110","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":41043,"name":"toShortString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40967,"src":"3084:13:110","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_userDefinedValueType$_ShortString_$40913_$","typeString":"function (string memory) pure returns (ShortString)"}},"id":41045,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3084:20:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}},"functionReturnParameters":41035,"id":41046,"nodeType":"Return","src":"3077:27:110"}]}}]},"documentation":{"id":41026,"nodeType":"StructuredDocumentation","src":"2806:103:110","text":" @dev Encode a string into a `ShortString`, or write it to storage if it is too long."},"id":41065,"implemented":true,"kind":"function","modifiers":[],"name":"toShortStringWithFallback","nameLocation":"2923:25:110","nodeType":"FunctionDefinition","parameters":{"id":41031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41028,"mutability":"mutable","name":"value","nameLocation":"2963:5:110","nodeType":"VariableDeclaration","scope":41065,"src":"2949:19:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":41027,"name":"string","nodeType":"ElementaryTypeName","src":"2949:6:110","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":41030,"mutability":"mutable","name":"store","nameLocation":"2985:5:110","nodeType":"VariableDeclaration","scope":41065,"src":"2970:20:110","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":41029,"name":"string","nodeType":"ElementaryTypeName","src":"2970:6:110","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2948:43:110"},"returnParameters":{"id":41035,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41034,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41065,"src":"3010:11:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"},"typeName":{"id":41033,"nodeType":"UserDefinedTypeName","pathNode":{"id":41032,"name":"ShortString","nameLocations":["3010:11:110"],"nodeType":"IdentifierPath","referencedDeclaration":40913,"src":"3010:11:110"},"referencedDeclaration":40913,"src":"3010:11:110","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}},"visibility":"internal"}],"src":"3009:13:110"},"scope":41124,"src":"2914:340:110","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":41091,"nodeType":"Block","src":"3494:158:110","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":41081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":41078,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41069,"src":"3527:5:110","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}],"expression":{"id":41076,"name":"ShortString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40913,"src":"3508:11:110","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_ShortString_$40913_$","typeString":"type(ShortString)"}},"id":41077,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3520:6:110","memberName":"unwrap","nodeType":"MemberAccess","src":"3508:18:110","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_ShortString_$40913_$returns$_t_bytes32_$","typeString":"function (ShortString) pure returns (bytes32)"}},"id":41079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3508:25:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":41080,"name":"FALLBACK_SENTINEL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40917,"src":"3537:17:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3508:46:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":41089,"nodeType":"Block","src":"3609:37:110","statements":[{"expression":{"id":41087,"name":"store","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41071,"src":"3630:5:110","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string storage pointer"}},"functionReturnParameters":41075,"id":41088,"nodeType":"Return","src":"3623:12:110"}]},"id":41090,"nodeType":"IfStatement","src":"3504:142:110","trueBody":{"id":41086,"nodeType":"Block","src":"3556:47:110","statements":[{"expression":{"arguments":[{"id":41083,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41069,"src":"3586:5:110","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}],"id":41082,"name":"toString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40993,"src":"3577:8:110","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_ShortString_$40913_$returns$_t_string_memory_ptr_$","typeString":"function (ShortString) pure returns (string memory)"}},"id":41084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3577:15:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":41075,"id":41085,"nodeType":"Return","src":"3570:22:110"}]}}]},"documentation":{"id":41066,"nodeType":"StructuredDocumentation","src":"3260:120:110","text":" @dev Decode a string that was encoded to `ShortString` or written to storage using {setWithFallback}."},"id":41092,"implemented":true,"kind":"function","modifiers":[],"name":"toStringWithFallback","nameLocation":"3394:20:110","nodeType":"FunctionDefinition","parameters":{"id":41072,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41069,"mutability":"mutable","name":"value","nameLocation":"3427:5:110","nodeType":"VariableDeclaration","scope":41092,"src":"3415:17:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"},"typeName":{"id":41068,"nodeType":"UserDefinedTypeName","pathNode":{"id":41067,"name":"ShortString","nameLocations":["3415:11:110"],"nodeType":"IdentifierPath","referencedDeclaration":40913,"src":"3415:11:110"},"referencedDeclaration":40913,"src":"3415:11:110","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}},"visibility":"internal"},{"constant":false,"id":41071,"mutability":"mutable","name":"store","nameLocation":"3449:5:110","nodeType":"VariableDeclaration","scope":41092,"src":"3434:20:110","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":41070,"name":"string","nodeType":"ElementaryTypeName","src":"3434:6:110","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3414:41:110"},"returnParameters":{"id":41075,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41074,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41092,"src":"3479:13:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":41073,"name":"string","nodeType":"ElementaryTypeName","src":"3479:6:110","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3478:15:110"},"scope":41124,"src":"3385:267:110","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":41122,"nodeType":"Block","src":"4132:174:110","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":41108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":41105,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41096,"src":"4165:5:110","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}],"expression":{"id":41103,"name":"ShortString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40913,"src":"4146:11:110","typeDescriptions":{"typeIdentifier":"t_type$_t_userDefinedValueType$_ShortString_$40913_$","typeString":"type(ShortString)"}},"id":41104,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4158:6:110","memberName":"unwrap","nodeType":"MemberAccess","src":"4146:18:110","typeDescriptions":{"typeIdentifier":"t_function_unwrap_pure$_t_userDefinedValueType$_ShortString_$40913_$returns$_t_bytes32_$","typeString":"function (ShortString) pure returns (bytes32)"}},"id":41106,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4146:25:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":41107,"name":"FALLBACK_SENTINEL","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40917,"src":"4175:17:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"4146:46:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":41120,"nodeType":"Block","src":"4249:51:110","statements":[{"expression":{"expression":{"arguments":[{"id":41116,"name":"store","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41098,"src":"4276:5:110","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string storage pointer"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_storage_ptr","typeString":"string storage pointer"}],"id":41115,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4270:5:110","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":41114,"name":"bytes","nodeType":"ElementaryTypeName","src":"4270:5:110","typeDescriptions":{}}},"id":41117,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4270:12:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes storage pointer"}},"id":41118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4283:6:110","memberName":"length","nodeType":"MemberAccess","src":"4270:19:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":41102,"id":41119,"nodeType":"Return","src":"4263:26:110"}]},"id":41121,"nodeType":"IfStatement","src":"4142:158:110","trueBody":{"id":41113,"nodeType":"Block","src":"4194:49:110","statements":[{"expression":{"arguments":[{"id":41110,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41096,"src":"4226:5:110","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}],"id":41109,"name":"byteLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41025,"src":"4215:10:110","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_ShortString_$40913_$returns$_t_uint256_$","typeString":"function (ShortString) pure returns (uint256)"}},"id":41111,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4215:17:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":41102,"id":41112,"nodeType":"Return","src":"4208:24:110"}]}}]},"documentation":{"id":41093,"nodeType":"StructuredDocumentation","src":"3658:364:110","text":" @dev Return the length of a string that was encoded to `ShortString` or written to storage using\n {setWithFallback}.\n WARNING: This will return the \"byte length\" of the string. This may not reflect the actual length in terms of\n actual characters as the UTF-8 encoding of a single character can span over multiple bytes."},"id":41123,"implemented":true,"kind":"function","modifiers":[],"name":"byteLengthWithFallback","nameLocation":"4036:22:110","nodeType":"FunctionDefinition","parameters":{"id":41099,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41096,"mutability":"mutable","name":"value","nameLocation":"4071:5:110","nodeType":"VariableDeclaration","scope":41123,"src":"4059:17:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"},"typeName":{"id":41095,"nodeType":"UserDefinedTypeName","pathNode":{"id":41094,"name":"ShortString","nameLocations":["4059:11:110"],"nodeType":"IdentifierPath","referencedDeclaration":40913,"src":"4059:11:110"},"referencedDeclaration":40913,"src":"4059:11:110","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}},"visibility":"internal"},{"constant":false,"id":41098,"mutability":"mutable","name":"store","nameLocation":"4093:5:110","nodeType":"VariableDeclaration","scope":41123,"src":"4078:20:110","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":41097,"name":"string","nodeType":"ElementaryTypeName","src":"4078:6:110","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4058:41:110"},"returnParameters":{"id":41102,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41101,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41123,"src":"4123:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41100,"name":"uint256","nodeType":"ElementaryTypeName","src":"4123:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4122:9:110"},"scope":41124,"src":"4027:279:110","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":41125,"src":"1255:3053:110","usedErrors":[40921,40923],"usedEvents":[]}],"src":"106:4203:110"},"id":110},"@openzeppelin/contracts/utils/StorageSlot.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/StorageSlot.sol","exportedSymbols":{"StorageSlot":[41234]},"id":41235,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":41126,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"193:24:111"},{"abstract":false,"baseContracts":[],"canonicalName":"StorageSlot","contractDependencies":[],"contractKind":"library","documentation":{"id":41127,"nodeType":"StructuredDocumentation","src":"219:1025:111","text":" @dev Library for reading and writing primitive types to specific storage slots.\n Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n This library helps with reading and writing to such slots without the need for inline assembly.\n The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n Example usage to set ERC1967 implementation slot:\n ```solidity\n contract ERC1967 {\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n function _setImplementation(address newImplementation) internal {\n require(newImplementation.code.length > 0);\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n }\n ```"},"fullyImplemented":true,"id":41234,"linearizedBaseContracts":[41234],"name":"StorageSlot","nameLocation":"1253:11:111","nodeType":"ContractDefinition","nodes":[{"canonicalName":"StorageSlot.AddressSlot","id":41130,"members":[{"constant":false,"id":41129,"mutability":"mutable","name":"value","nameLocation":"1308:5:111","nodeType":"VariableDeclaration","scope":41130,"src":"1300:13:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41128,"name":"address","nodeType":"ElementaryTypeName","src":"1300:7:111","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"AddressSlot","nameLocation":"1278:11:111","nodeType":"StructDefinition","scope":41234,"src":"1271:49:111","visibility":"public"},{"canonicalName":"StorageSlot.BooleanSlot","id":41133,"members":[{"constant":false,"id":41132,"mutability":"mutable","name":"value","nameLocation":"1360:5:111","nodeType":"VariableDeclaration","scope":41133,"src":"1355:10:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":41131,"name":"bool","nodeType":"ElementaryTypeName","src":"1355:4:111","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"name":"BooleanSlot","nameLocation":"1333:11:111","nodeType":"StructDefinition","scope":41234,"src":"1326:46:111","visibility":"public"},{"canonicalName":"StorageSlot.Bytes32Slot","id":41136,"members":[{"constant":false,"id":41135,"mutability":"mutable","name":"value","nameLocation":"1415:5:111","nodeType":"VariableDeclaration","scope":41136,"src":"1407:13:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41134,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1407:7:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"Bytes32Slot","nameLocation":"1385:11:111","nodeType":"StructDefinition","scope":41234,"src":"1378:49:111","visibility":"public"},{"canonicalName":"StorageSlot.Uint256Slot","id":41139,"members":[{"constant":false,"id":41138,"mutability":"mutable","name":"value","nameLocation":"1470:5:111","nodeType":"VariableDeclaration","scope":41139,"src":"1462:13:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41137,"name":"uint256","nodeType":"ElementaryTypeName","src":"1462:7:111","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"Uint256Slot","nameLocation":"1440:11:111","nodeType":"StructDefinition","scope":41234,"src":"1433:49:111","visibility":"public"},{"canonicalName":"StorageSlot.StringSlot","id":41142,"members":[{"constant":false,"id":41141,"mutability":"mutable","name":"value","nameLocation":"1523:5:111","nodeType":"VariableDeclaration","scope":41142,"src":"1516:12:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":41140,"name":"string","nodeType":"ElementaryTypeName","src":"1516:6:111","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"name":"StringSlot","nameLocation":"1495:10:111","nodeType":"StructDefinition","scope":41234,"src":"1488:47:111","visibility":"public"},{"canonicalName":"StorageSlot.BytesSlot","id":41145,"members":[{"constant":false,"id":41144,"mutability":"mutable","name":"value","nameLocation":"1574:5:111","nodeType":"VariableDeclaration","scope":41145,"src":"1568:11:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":41143,"name":"bytes","nodeType":"ElementaryTypeName","src":"1568:5:111","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"name":"BytesSlot","nameLocation":"1548:9:111","nodeType":"StructDefinition","scope":41234,"src":"1541:45:111","visibility":"public"},{"body":{"id":41155,"nodeType":"Block","src":"1768:106:111","statements":[{"AST":{"nativeSrc":"1830:38:111","nodeType":"YulBlock","src":"1830:38:111","statements":[{"nativeSrc":"1844:14:111","nodeType":"YulAssignment","src":"1844:14:111","value":{"name":"slot","nativeSrc":"1854:4:111","nodeType":"YulIdentifier","src":"1854:4:111"},"variableNames":[{"name":"r.slot","nativeSrc":"1844:6:111","nodeType":"YulIdentifier","src":"1844:6:111"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":41152,"isOffset":false,"isSlot":true,"src":"1844:6:111","suffix":"slot","valueSize":1},{"declaration":41148,"isOffset":false,"isSlot":false,"src":"1854:4:111","valueSize":1}],"id":41154,"nodeType":"InlineAssembly","src":"1821:47:111"}]},"documentation":{"id":41146,"nodeType":"StructuredDocumentation","src":"1592:87:111","text":" @dev Returns an `AddressSlot` with member `value` located at `slot`."},"id":41156,"implemented":true,"kind":"function","modifiers":[],"name":"getAddressSlot","nameLocation":"1693:14:111","nodeType":"FunctionDefinition","parameters":{"id":41149,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41148,"mutability":"mutable","name":"slot","nameLocation":"1716:4:111","nodeType":"VariableDeclaration","scope":41156,"src":"1708:12:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41147,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1708:7:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1707:14:111"},"returnParameters":{"id":41153,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41152,"mutability":"mutable","name":"r","nameLocation":"1765:1:111","nodeType":"VariableDeclaration","scope":41156,"src":"1745:21:111","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$41130_storage_ptr","typeString":"struct StorageSlot.AddressSlot"},"typeName":{"id":41151,"nodeType":"UserDefinedTypeName","pathNode":{"id":41150,"name":"AddressSlot","nameLocations":["1745:11:111"],"nodeType":"IdentifierPath","referencedDeclaration":41130,"src":"1745:11:111"},"referencedDeclaration":41130,"src":"1745:11:111","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSlot_$41130_storage_ptr","typeString":"struct StorageSlot.AddressSlot"}},"visibility":"internal"}],"src":"1744:23:111"},"scope":41234,"src":"1684:190:111","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":41166,"nodeType":"Block","src":"2056:106:111","statements":[{"AST":{"nativeSrc":"2118:38:111","nodeType":"YulBlock","src":"2118:38:111","statements":[{"nativeSrc":"2132:14:111","nodeType":"YulAssignment","src":"2132:14:111","value":{"name":"slot","nativeSrc":"2142:4:111","nodeType":"YulIdentifier","src":"2142:4:111"},"variableNames":[{"name":"r.slot","nativeSrc":"2132:6:111","nodeType":"YulIdentifier","src":"2132:6:111"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":41163,"isOffset":false,"isSlot":true,"src":"2132:6:111","suffix":"slot","valueSize":1},{"declaration":41159,"isOffset":false,"isSlot":false,"src":"2142:4:111","valueSize":1}],"id":41165,"nodeType":"InlineAssembly","src":"2109:47:111"}]},"documentation":{"id":41157,"nodeType":"StructuredDocumentation","src":"1880:87:111","text":" @dev Returns an `BooleanSlot` with member `value` located at `slot`."},"id":41167,"implemented":true,"kind":"function","modifiers":[],"name":"getBooleanSlot","nameLocation":"1981:14:111","nodeType":"FunctionDefinition","parameters":{"id":41160,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41159,"mutability":"mutable","name":"slot","nameLocation":"2004:4:111","nodeType":"VariableDeclaration","scope":41167,"src":"1996:12:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41158,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1996:7:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1995:14:111"},"returnParameters":{"id":41164,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41163,"mutability":"mutable","name":"r","nameLocation":"2053:1:111","nodeType":"VariableDeclaration","scope":41167,"src":"2033:21:111","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$41133_storage_ptr","typeString":"struct StorageSlot.BooleanSlot"},"typeName":{"id":41162,"nodeType":"UserDefinedTypeName","pathNode":{"id":41161,"name":"BooleanSlot","nameLocations":["2033:11:111"],"nodeType":"IdentifierPath","referencedDeclaration":41133,"src":"2033:11:111"},"referencedDeclaration":41133,"src":"2033:11:111","typeDescriptions":{"typeIdentifier":"t_struct$_BooleanSlot_$41133_storage_ptr","typeString":"struct StorageSlot.BooleanSlot"}},"visibility":"internal"}],"src":"2032:23:111"},"scope":41234,"src":"1972:190:111","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":41177,"nodeType":"Block","src":"2344:106:111","statements":[{"AST":{"nativeSrc":"2406:38:111","nodeType":"YulBlock","src":"2406:38:111","statements":[{"nativeSrc":"2420:14:111","nodeType":"YulAssignment","src":"2420:14:111","value":{"name":"slot","nativeSrc":"2430:4:111","nodeType":"YulIdentifier","src":"2430:4:111"},"variableNames":[{"name":"r.slot","nativeSrc":"2420:6:111","nodeType":"YulIdentifier","src":"2420:6:111"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":41174,"isOffset":false,"isSlot":true,"src":"2420:6:111","suffix":"slot","valueSize":1},{"declaration":41170,"isOffset":false,"isSlot":false,"src":"2430:4:111","valueSize":1}],"id":41176,"nodeType":"InlineAssembly","src":"2397:47:111"}]},"documentation":{"id":41168,"nodeType":"StructuredDocumentation","src":"2168:87:111","text":" @dev Returns an `Bytes32Slot` with member `value` located at `slot`."},"id":41178,"implemented":true,"kind":"function","modifiers":[],"name":"getBytes32Slot","nameLocation":"2269:14:111","nodeType":"FunctionDefinition","parameters":{"id":41171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41170,"mutability":"mutable","name":"slot","nameLocation":"2292:4:111","nodeType":"VariableDeclaration","scope":41178,"src":"2284:12:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41169,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2284:7:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2283:14:111"},"returnParameters":{"id":41175,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41174,"mutability":"mutable","name":"r","nameLocation":"2341:1:111","nodeType":"VariableDeclaration","scope":41178,"src":"2321:21:111","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$41136_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"},"typeName":{"id":41173,"nodeType":"UserDefinedTypeName","pathNode":{"id":41172,"name":"Bytes32Slot","nameLocations":["2321:11:111"],"nodeType":"IdentifierPath","referencedDeclaration":41136,"src":"2321:11:111"},"referencedDeclaration":41136,"src":"2321:11:111","typeDescriptions":{"typeIdentifier":"t_struct$_Bytes32Slot_$41136_storage_ptr","typeString":"struct StorageSlot.Bytes32Slot"}},"visibility":"internal"}],"src":"2320:23:111"},"scope":41234,"src":"2260:190:111","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":41188,"nodeType":"Block","src":"2632:106:111","statements":[{"AST":{"nativeSrc":"2694:38:111","nodeType":"YulBlock","src":"2694:38:111","statements":[{"nativeSrc":"2708:14:111","nodeType":"YulAssignment","src":"2708:14:111","value":{"name":"slot","nativeSrc":"2718:4:111","nodeType":"YulIdentifier","src":"2718:4:111"},"variableNames":[{"name":"r.slot","nativeSrc":"2708:6:111","nodeType":"YulIdentifier","src":"2708:6:111"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":41185,"isOffset":false,"isSlot":true,"src":"2708:6:111","suffix":"slot","valueSize":1},{"declaration":41181,"isOffset":false,"isSlot":false,"src":"2718:4:111","valueSize":1}],"id":41187,"nodeType":"InlineAssembly","src":"2685:47:111"}]},"documentation":{"id":41179,"nodeType":"StructuredDocumentation","src":"2456:87:111","text":" @dev Returns an `Uint256Slot` with member `value` located at `slot`."},"id":41189,"implemented":true,"kind":"function","modifiers":[],"name":"getUint256Slot","nameLocation":"2557:14:111","nodeType":"FunctionDefinition","parameters":{"id":41182,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41181,"mutability":"mutable","name":"slot","nameLocation":"2580:4:111","nodeType":"VariableDeclaration","scope":41189,"src":"2572:12:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41180,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2572:7:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2571:14:111"},"returnParameters":{"id":41186,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41185,"mutability":"mutable","name":"r","nameLocation":"2629:1:111","nodeType":"VariableDeclaration","scope":41189,"src":"2609:21:111","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$41139_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"},"typeName":{"id":41184,"nodeType":"UserDefinedTypeName","pathNode":{"id":41183,"name":"Uint256Slot","nameLocations":["2609:11:111"],"nodeType":"IdentifierPath","referencedDeclaration":41139,"src":"2609:11:111"},"referencedDeclaration":41139,"src":"2609:11:111","typeDescriptions":{"typeIdentifier":"t_struct$_Uint256Slot_$41139_storage_ptr","typeString":"struct StorageSlot.Uint256Slot"}},"visibility":"internal"}],"src":"2608:23:111"},"scope":41234,"src":"2548:190:111","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":41199,"nodeType":"Block","src":"2917:106:111","statements":[{"AST":{"nativeSrc":"2979:38:111","nodeType":"YulBlock","src":"2979:38:111","statements":[{"nativeSrc":"2993:14:111","nodeType":"YulAssignment","src":"2993:14:111","value":{"name":"slot","nativeSrc":"3003:4:111","nodeType":"YulIdentifier","src":"3003:4:111"},"variableNames":[{"name":"r.slot","nativeSrc":"2993:6:111","nodeType":"YulIdentifier","src":"2993:6:111"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":41196,"isOffset":false,"isSlot":true,"src":"2993:6:111","suffix":"slot","valueSize":1},{"declaration":41192,"isOffset":false,"isSlot":false,"src":"3003:4:111","valueSize":1}],"id":41198,"nodeType":"InlineAssembly","src":"2970:47:111"}]},"documentation":{"id":41190,"nodeType":"StructuredDocumentation","src":"2744:86:111","text":" @dev Returns an `StringSlot` with member `value` located at `slot`."},"id":41200,"implemented":true,"kind":"function","modifiers":[],"name":"getStringSlot","nameLocation":"2844:13:111","nodeType":"FunctionDefinition","parameters":{"id":41193,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41192,"mutability":"mutable","name":"slot","nameLocation":"2866:4:111","nodeType":"VariableDeclaration","scope":41200,"src":"2858:12:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41191,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2858:7:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2857:14:111"},"returnParameters":{"id":41197,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41196,"mutability":"mutable","name":"r","nameLocation":"2914:1:111","nodeType":"VariableDeclaration","scope":41200,"src":"2895:20:111","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$41142_storage_ptr","typeString":"struct StorageSlot.StringSlot"},"typeName":{"id":41195,"nodeType":"UserDefinedTypeName","pathNode":{"id":41194,"name":"StringSlot","nameLocations":["2895:10:111"],"nodeType":"IdentifierPath","referencedDeclaration":41142,"src":"2895:10:111"},"referencedDeclaration":41142,"src":"2895:10:111","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$41142_storage_ptr","typeString":"struct StorageSlot.StringSlot"}},"visibility":"internal"}],"src":"2894:22:111"},"scope":41234,"src":"2835:188:111","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":41210,"nodeType":"Block","src":"3225:112:111","statements":[{"AST":{"nativeSrc":"3287:44:111","nodeType":"YulBlock","src":"3287:44:111","statements":[{"nativeSrc":"3301:20:111","nodeType":"YulAssignment","src":"3301:20:111","value":{"name":"store.slot","nativeSrc":"3311:10:111","nodeType":"YulIdentifier","src":"3311:10:111"},"variableNames":[{"name":"r.slot","nativeSrc":"3301:6:111","nodeType":"YulIdentifier","src":"3301:6:111"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":41207,"isOffset":false,"isSlot":true,"src":"3301:6:111","suffix":"slot","valueSize":1},{"declaration":41203,"isOffset":false,"isSlot":true,"src":"3311:10:111","suffix":"slot","valueSize":1}],"id":41209,"nodeType":"InlineAssembly","src":"3278:53:111"}]},"documentation":{"id":41201,"nodeType":"StructuredDocumentation","src":"3029:101:111","text":" @dev Returns an `StringSlot` representation of the string storage pointer `store`."},"id":41211,"implemented":true,"kind":"function","modifiers":[],"name":"getStringSlot","nameLocation":"3144:13:111","nodeType":"FunctionDefinition","parameters":{"id":41204,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41203,"mutability":"mutable","name":"store","nameLocation":"3173:5:111","nodeType":"VariableDeclaration","scope":41211,"src":"3158:20:111","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":41202,"name":"string","nodeType":"ElementaryTypeName","src":"3158:6:111","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3157:22:111"},"returnParameters":{"id":41208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41207,"mutability":"mutable","name":"r","nameLocation":"3222:1:111","nodeType":"VariableDeclaration","scope":41211,"src":"3203:20:111","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$41142_storage_ptr","typeString":"struct StorageSlot.StringSlot"},"typeName":{"id":41206,"nodeType":"UserDefinedTypeName","pathNode":{"id":41205,"name":"StringSlot","nameLocations":["3203:10:111"],"nodeType":"IdentifierPath","referencedDeclaration":41142,"src":"3203:10:111"},"referencedDeclaration":41142,"src":"3203:10:111","typeDescriptions":{"typeIdentifier":"t_struct$_StringSlot_$41142_storage_ptr","typeString":"struct StorageSlot.StringSlot"}},"visibility":"internal"}],"src":"3202:22:111"},"scope":41234,"src":"3135:202:111","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":41221,"nodeType":"Block","src":"3513:106:111","statements":[{"AST":{"nativeSrc":"3575:38:111","nodeType":"YulBlock","src":"3575:38:111","statements":[{"nativeSrc":"3589:14:111","nodeType":"YulAssignment","src":"3589:14:111","value":{"name":"slot","nativeSrc":"3599:4:111","nodeType":"YulIdentifier","src":"3599:4:111"},"variableNames":[{"name":"r.slot","nativeSrc":"3589:6:111","nodeType":"YulIdentifier","src":"3589:6:111"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":41218,"isOffset":false,"isSlot":true,"src":"3589:6:111","suffix":"slot","valueSize":1},{"declaration":41214,"isOffset":false,"isSlot":false,"src":"3599:4:111","valueSize":1}],"id":41220,"nodeType":"InlineAssembly","src":"3566:47:111"}]},"documentation":{"id":41212,"nodeType":"StructuredDocumentation","src":"3343:85:111","text":" @dev Returns an `BytesSlot` with member `value` located at `slot`."},"id":41222,"implemented":true,"kind":"function","modifiers":[],"name":"getBytesSlot","nameLocation":"3442:12:111","nodeType":"FunctionDefinition","parameters":{"id":41215,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41214,"mutability":"mutable","name":"slot","nameLocation":"3463:4:111","nodeType":"VariableDeclaration","scope":41222,"src":"3455:12:111","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41213,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3455:7:111","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3454:14:111"},"returnParameters":{"id":41219,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41218,"mutability":"mutable","name":"r","nameLocation":"3510:1:111","nodeType":"VariableDeclaration","scope":41222,"src":"3492:19:111","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$41145_storage_ptr","typeString":"struct StorageSlot.BytesSlot"},"typeName":{"id":41217,"nodeType":"UserDefinedTypeName","pathNode":{"id":41216,"name":"BytesSlot","nameLocations":["3492:9:111"],"nodeType":"IdentifierPath","referencedDeclaration":41145,"src":"3492:9:111"},"referencedDeclaration":41145,"src":"3492:9:111","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$41145_storage_ptr","typeString":"struct StorageSlot.BytesSlot"}},"visibility":"internal"}],"src":"3491:21:111"},"scope":41234,"src":"3433:186:111","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":41232,"nodeType":"Block","src":"3816:112:111","statements":[{"AST":{"nativeSrc":"3878:44:111","nodeType":"YulBlock","src":"3878:44:111","statements":[{"nativeSrc":"3892:20:111","nodeType":"YulAssignment","src":"3892:20:111","value":{"name":"store.slot","nativeSrc":"3902:10:111","nodeType":"YulIdentifier","src":"3902:10:111"},"variableNames":[{"name":"r.slot","nativeSrc":"3892:6:111","nodeType":"YulIdentifier","src":"3892:6:111"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":41229,"isOffset":false,"isSlot":true,"src":"3892:6:111","suffix":"slot","valueSize":1},{"declaration":41225,"isOffset":false,"isSlot":true,"src":"3902:10:111","suffix":"slot","valueSize":1}],"id":41231,"nodeType":"InlineAssembly","src":"3869:53:111"}]},"documentation":{"id":41223,"nodeType":"StructuredDocumentation","src":"3625:99:111","text":" @dev Returns an `BytesSlot` representation of the bytes storage pointer `store`."},"id":41233,"implemented":true,"kind":"function","modifiers":[],"name":"getBytesSlot","nameLocation":"3738:12:111","nodeType":"FunctionDefinition","parameters":{"id":41226,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41225,"mutability":"mutable","name":"store","nameLocation":"3765:5:111","nodeType":"VariableDeclaration","scope":41233,"src":"3751:19:111","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"},"typeName":{"id":41224,"name":"bytes","nodeType":"ElementaryTypeName","src":"3751:5:111","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3750:21:111"},"returnParameters":{"id":41230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41229,"mutability":"mutable","name":"r","nameLocation":"3813:1:111","nodeType":"VariableDeclaration","scope":41233,"src":"3795:19:111","stateVariable":false,"storageLocation":"storage","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$41145_storage_ptr","typeString":"struct StorageSlot.BytesSlot"},"typeName":{"id":41228,"nodeType":"UserDefinedTypeName","pathNode":{"id":41227,"name":"BytesSlot","nameLocations":["3795:9:111"],"nodeType":"IdentifierPath","referencedDeclaration":41145,"src":"3795:9:111"},"referencedDeclaration":41145,"src":"3795:9:111","typeDescriptions":{"typeIdentifier":"t_struct$_BytesSlot_$41145_storage_ptr","typeString":"struct StorageSlot.BytesSlot"}},"visibility":"internal"}],"src":"3794:21:111"},"scope":41234,"src":"3729:199:111","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":41235,"src":"1245:2685:111","usedErrors":[],"usedEvents":[]}],"src":"193:3738:111"},"id":111},"@openzeppelin/contracts/utils/Strings.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Strings.sol","exportedSymbols":{"Math":[43228],"SignedMath":[45088],"Strings":[41489]},"id":41490,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":41236,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"101:24:112"},{"absolutePath":"@openzeppelin/contracts/utils/math/Math.sol","file":"./math/Math.sol","id":41238,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41490,"sourceUnit":43229,"src":"127:37:112","symbolAliases":[{"foreign":{"id":41237,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43228,"src":"135:4:112","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/SignedMath.sol","file":"./math/SignedMath.sol","id":41240,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":41490,"sourceUnit":45089,"src":"165:49:112","symbolAliases":[{"foreign":{"id":41239,"name":"SignedMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45088,"src":"173:10:112","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"Strings","contractDependencies":[],"contractKind":"library","documentation":{"id":41241,"nodeType":"StructuredDocumentation","src":"216:34:112","text":" @dev String operations."},"fullyImplemented":true,"id":41489,"linearizedBaseContracts":[41489],"name":"Strings","nameLocation":"259:7:112","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":41244,"mutability":"constant","name":"HEX_DIGITS","nameLocation":"298:10:112","nodeType":"VariableDeclaration","scope":41489,"src":"273:56:112","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"},"typeName":{"id":41242,"name":"bytes16","nodeType":"ElementaryTypeName","src":"273:7:112","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"value":{"hexValue":"30313233343536373839616263646566","id":41243,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"311:18:112","typeDescriptions":{"typeIdentifier":"t_stringliteral_cb29997ed99ead0db59ce4d12b7d3723198c827273e5796737c926d78019c39f","typeString":"literal_string \"0123456789abcdef\""},"value":"0123456789abcdef"},"visibility":"private"},{"constant":true,"id":41247,"mutability":"constant","name":"ADDRESS_LENGTH","nameLocation":"358:14:112","nodeType":"VariableDeclaration","scope":41489,"src":"335:42:112","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":41245,"name":"uint8","nodeType":"ElementaryTypeName","src":"335:5:112","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"3230","id":41246,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"375:2:112","typeDescriptions":{"typeIdentifier":"t_rational_20_by_1","typeString":"int_const 20"},"value":"20"},"visibility":"private"},{"documentation":{"id":41248,"nodeType":"StructuredDocumentation","src":"384:81:112","text":" @dev The `value` string doesn't fit in the specified `length`."},"errorSelector":"e22e27eb","id":41254,"name":"StringsInsufficientHexLength","nameLocation":"476:28:112","nodeType":"ErrorDefinition","parameters":{"id":41253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41250,"mutability":"mutable","name":"value","nameLocation":"513:5:112","nodeType":"VariableDeclaration","scope":41254,"src":"505:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41249,"name":"uint256","nodeType":"ElementaryTypeName","src":"505:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41252,"mutability":"mutable","name":"length","nameLocation":"528:6:112","nodeType":"VariableDeclaration","scope":41254,"src":"520:14:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41251,"name":"uint256","nodeType":"ElementaryTypeName","src":"520:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"504:31:112"},"src":"470:66:112"},{"body":{"id":41301,"nodeType":"Block","src":"708:627:112","statements":[{"id":41300,"nodeType":"UncheckedBlock","src":"718:611:112","statements":[{"assignments":[41263],"declarations":[{"constant":false,"id":41263,"mutability":"mutable","name":"length","nameLocation":"750:6:112","nodeType":"VariableDeclaration","scope":41300,"src":"742:14:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41262,"name":"uint256","nodeType":"ElementaryTypeName","src":"742:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":41270,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":41266,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41257,"src":"770:5:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":41264,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43228,"src":"759:4:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$43228_$","typeString":"type(library Math)"}},"id":41265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"764:5:112","memberName":"log10","nodeType":"MemberAccess","referencedDeclaration":43048,"src":"759:10:112","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":41267,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"759:17:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":41268,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"779:1:112","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"759:21:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"742:38:112"},{"assignments":[41272],"declarations":[{"constant":false,"id":41272,"mutability":"mutable","name":"buffer","nameLocation":"808:6:112","nodeType":"VariableDeclaration","scope":41300,"src":"794:20:112","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":41271,"name":"string","nodeType":"ElementaryTypeName","src":"794:6:112","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":41277,"initialValue":{"arguments":[{"id":41275,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41263,"src":"828:6:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":41274,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"817:10:112","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256) pure returns (string memory)"},"typeName":{"id":41273,"name":"string","nodeType":"ElementaryTypeName","src":"821:6:112","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}}},"id":41276,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"817:18:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"VariableDeclarationStatement","src":"794:41:112"},{"assignments":[41279],"declarations":[{"constant":false,"id":41279,"mutability":"mutable","name":"ptr","nameLocation":"857:3:112","nodeType":"VariableDeclaration","scope":41300,"src":"849:11:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41278,"name":"uint256","nodeType":"ElementaryTypeName","src":"849:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":41280,"nodeType":"VariableDeclarationStatement","src":"849:11:112"},{"AST":{"nativeSrc":"930:67:112","nodeType":"YulBlock","src":"930:67:112","statements":[{"nativeSrc":"948:35:112","nodeType":"YulAssignment","src":"948:35:112","value":{"arguments":[{"name":"buffer","nativeSrc":"959:6:112","nodeType":"YulIdentifier","src":"959:6:112"},{"arguments":[{"kind":"number","nativeSrc":"971:2:112","nodeType":"YulLiteral","src":"971:2:112","type":"","value":"32"},{"name":"length","nativeSrc":"975:6:112","nodeType":"YulIdentifier","src":"975:6:112"}],"functionName":{"name":"add","nativeSrc":"967:3:112","nodeType":"YulIdentifier","src":"967:3:112"},"nativeSrc":"967:15:112","nodeType":"YulFunctionCall","src":"967:15:112"}],"functionName":{"name":"add","nativeSrc":"955:3:112","nodeType":"YulIdentifier","src":"955:3:112"},"nativeSrc":"955:28:112","nodeType":"YulFunctionCall","src":"955:28:112"},"variableNames":[{"name":"ptr","nativeSrc":"948:3:112","nodeType":"YulIdentifier","src":"948:3:112"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":41272,"isOffset":false,"isSlot":false,"src":"959:6:112","valueSize":1},{"declaration":41263,"isOffset":false,"isSlot":false,"src":"975:6:112","valueSize":1},{"declaration":41279,"isOffset":false,"isSlot":false,"src":"948:3:112","valueSize":1}],"id":41281,"nodeType":"InlineAssembly","src":"921:76:112"},{"body":{"id":41296,"nodeType":"Block","src":"1023:269:112","statements":[{"expression":{"id":41284,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":false,"src":"1041:5:112","subExpression":{"id":41283,"name":"ptr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41279,"src":"1041:3:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":41285,"nodeType":"ExpressionStatement","src":"1041:5:112"},{"AST":{"nativeSrc":"1124:86:112","nodeType":"YulBlock","src":"1124:86:112","statements":[{"expression":{"arguments":[{"name":"ptr","nativeSrc":"1154:3:112","nodeType":"YulIdentifier","src":"1154:3:112"},{"arguments":[{"arguments":[{"name":"value","nativeSrc":"1168:5:112","nodeType":"YulIdentifier","src":"1168:5:112"},{"kind":"number","nativeSrc":"1175:2:112","nodeType":"YulLiteral","src":"1175:2:112","type":"","value":"10"}],"functionName":{"name":"mod","nativeSrc":"1164:3:112","nodeType":"YulIdentifier","src":"1164:3:112"},"nativeSrc":"1164:14:112","nodeType":"YulFunctionCall","src":"1164:14:112"},{"name":"HEX_DIGITS","nativeSrc":"1180:10:112","nodeType":"YulIdentifier","src":"1180:10:112"}],"functionName":{"name":"byte","nativeSrc":"1159:4:112","nodeType":"YulIdentifier","src":"1159:4:112"},"nativeSrc":"1159:32:112","nodeType":"YulFunctionCall","src":"1159:32:112"}],"functionName":{"name":"mstore8","nativeSrc":"1146:7:112","nodeType":"YulIdentifier","src":"1146:7:112"},"nativeSrc":"1146:46:112","nodeType":"YulFunctionCall","src":"1146:46:112"},"nativeSrc":"1146:46:112","nodeType":"YulExpressionStatement","src":"1146:46:112"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":41244,"isOffset":false,"isSlot":false,"src":"1180:10:112","valueSize":1},{"declaration":41279,"isOffset":false,"isSlot":false,"src":"1154:3:112","valueSize":1},{"declaration":41257,"isOffset":false,"isSlot":false,"src":"1168:5:112","valueSize":1}],"id":41286,"nodeType":"InlineAssembly","src":"1115:95:112"},{"expression":{"id":41289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":41287,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41257,"src":"1227:5:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"hexValue":"3130","id":41288,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1236:2:112","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"1227:11:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":41290,"nodeType":"ExpressionStatement","src":"1227:11:112"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":41291,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41257,"src":"1260:5:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":41292,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1269:1:112","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1260:10:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":41295,"nodeType":"IfStatement","src":"1256:21:112","trueBody":{"id":41294,"nodeType":"Break","src":"1272:5:112"}}]},"condition":{"hexValue":"74727565","id":41282,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1017:4:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"id":41297,"nodeType":"WhileStatement","src":"1010:282:112"},{"expression":{"id":41298,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41272,"src":"1312:6:112","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":41261,"id":41299,"nodeType":"Return","src":"1305:13:112"}]}]},"documentation":{"id":41255,"nodeType":"StructuredDocumentation","src":"542:90:112","text":" @dev Converts a `uint256` to its ASCII `string` decimal representation."},"id":41302,"implemented":true,"kind":"function","modifiers":[],"name":"toString","nameLocation":"646:8:112","nodeType":"FunctionDefinition","parameters":{"id":41258,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41257,"mutability":"mutable","name":"value","nameLocation":"663:5:112","nodeType":"VariableDeclaration","scope":41302,"src":"655:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41256,"name":"uint256","nodeType":"ElementaryTypeName","src":"655:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"654:15:112"},"returnParameters":{"id":41261,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41260,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41302,"src":"693:13:112","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":41259,"name":"string","nodeType":"ElementaryTypeName","src":"693:6:112","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"692:15:112"},"scope":41489,"src":"637:698:112","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":41327,"nodeType":"Block","src":"1511:92:112","statements":[{"expression":{"arguments":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":41315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":41313,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41305,"src":"1542:5:112","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":41314,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1550:1:112","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1542:9:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"","id":41317,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1560:2:112","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""},"id":41318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"1542:20:112","trueExpression":{"hexValue":"2d","id":41316,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1554:3:112","typeDescriptions":{"typeIdentifier":"t_stringliteral_d3b8281179950f98149eefdb158d0e1acb56f56e8e343aa9fefafa7e36959561","typeString":"literal_string \"-\""},"value":"-"},"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"arguments":[{"arguments":[{"id":41322,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41305,"src":"1588:5:112","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"expression":{"id":41320,"name":"SignedMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45088,"src":"1573:10:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_SignedMath_$45088_$","typeString":"type(library SignedMath)"}},"id":41321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1584:3:112","memberName":"abs","nodeType":"MemberAccess","referencedDeclaration":45087,"src":"1573:14:112","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_int256_$returns$_t_uint256_$","typeString":"function (int256) pure returns (uint256)"}},"id":41323,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1573:21:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":41319,"name":"toString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41302,"src":"1564:8:112","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256) pure returns (string memory)"}},"id":41324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1564:31:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":41311,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1528:6:112","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":41310,"name":"string","nodeType":"ElementaryTypeName","src":"1528:6:112","typeDescriptions":{}}},"id":41312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1535:6:112","memberName":"concat","nodeType":"MemberAccess","src":"1528:13:112","typeDescriptions":{"typeIdentifier":"t_function_stringconcat_pure$__$returns$_t_string_memory_ptr_$","typeString":"function () pure returns (string memory)"}},"id":41325,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1528:68:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":41309,"id":41326,"nodeType":"Return","src":"1521:75:112"}]},"documentation":{"id":41303,"nodeType":"StructuredDocumentation","src":"1341:89:112","text":" @dev Converts a `int256` to its ASCII `string` decimal representation."},"id":41328,"implemented":true,"kind":"function","modifiers":[],"name":"toStringSigned","nameLocation":"1444:14:112","nodeType":"FunctionDefinition","parameters":{"id":41306,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41305,"mutability":"mutable","name":"value","nameLocation":"1466:5:112","nodeType":"VariableDeclaration","scope":41328,"src":"1459:12:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":41304,"name":"int256","nodeType":"ElementaryTypeName","src":"1459:6:112","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1458:14:112"},"returnParameters":{"id":41309,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41308,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41328,"src":"1496:13:112","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":41307,"name":"string","nodeType":"ElementaryTypeName","src":"1496:6:112","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1495:15:112"},"scope":41489,"src":"1435:168:112","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":41347,"nodeType":"Block","src":"1782:100:112","statements":[{"id":41346,"nodeType":"UncheckedBlock","src":"1792:84:112","statements":[{"expression":{"arguments":[{"id":41337,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41331,"src":"1835:5:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":41340,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41331,"src":"1854:5:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":41338,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43228,"src":"1842:4:112","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$43228_$","typeString":"type(library Math)"}},"id":41339,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1847:6:112","memberName":"log256","nodeType":"MemberAccess","referencedDeclaration":43170,"src":"1842:11:112","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":41341,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1842:18:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":41342,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1863:1:112","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1842:22:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":41336,"name":"toHexString","nodeType":"Identifier","overloadedDeclarations":[41348,41431,41451],"referencedDeclaration":41431,"src":"1823:11:112","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (string memory)"}},"id":41344,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1823:42:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":41335,"id":41345,"nodeType":"Return","src":"1816:49:112"}]}]},"documentation":{"id":41329,"nodeType":"StructuredDocumentation","src":"1609:94:112","text":" @dev Converts a `uint256` to its ASCII `string` hexadecimal representation."},"id":41348,"implemented":true,"kind":"function","modifiers":[],"name":"toHexString","nameLocation":"1717:11:112","nodeType":"FunctionDefinition","parameters":{"id":41332,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41331,"mutability":"mutable","name":"value","nameLocation":"1737:5:112","nodeType":"VariableDeclaration","scope":41348,"src":"1729:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41330,"name":"uint256","nodeType":"ElementaryTypeName","src":"1729:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1728:15:112"},"returnParameters":{"id":41335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41334,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41348,"src":"1767:13:112","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":41333,"name":"string","nodeType":"ElementaryTypeName","src":"1767:6:112","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1766:15:112"},"scope":41489,"src":"1708:174:112","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":41430,"nodeType":"Block","src":"2095:435:112","statements":[{"assignments":[41359],"declarations":[{"constant":false,"id":41359,"mutability":"mutable","name":"localValue","nameLocation":"2113:10:112","nodeType":"VariableDeclaration","scope":41430,"src":"2105:18:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41358,"name":"uint256","nodeType":"ElementaryTypeName","src":"2105:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":41361,"initialValue":{"id":41360,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41351,"src":"2126:5:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2105:26:112"},{"assignments":[41363],"declarations":[{"constant":false,"id":41363,"mutability":"mutable","name":"buffer","nameLocation":"2154:6:112","nodeType":"VariableDeclaration","scope":41430,"src":"2141:19:112","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41362,"name":"bytes","nodeType":"ElementaryTypeName","src":"2141:5:112","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":41372,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":41366,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2173:1:112","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":41367,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41353,"src":"2177:6:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2173:10:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"32","id":41369,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2186:1:112","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"2173:14:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":41365,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2163:9:112","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":41364,"name":"bytes","nodeType":"ElementaryTypeName","src":"2167:5:112","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":41371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2163:25:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"2141:47:112"},{"expression":{"id":41377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":41373,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41363,"src":"2198:6:112","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":41375,"indexExpression":{"hexValue":"30","id":41374,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2205:1:112","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2198:9:112","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":41376,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2210:3:112","typeDescriptions":{"typeIdentifier":"t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d","typeString":"literal_string \"0\""},"value":"0"},"src":"2198:15:112","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":41378,"nodeType":"ExpressionStatement","src":"2198:15:112"},{"expression":{"id":41383,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":41379,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41363,"src":"2223:6:112","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":41381,"indexExpression":{"hexValue":"31","id":41380,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2230:1:112","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2223:9:112","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"78","id":41382,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2235:3:112","typeDescriptions":{"typeIdentifier":"t_stringliteral_7521d1cadbcfa91eec65aa16715b94ffc1c9654ba57ea2ef1a2127bca1127a83","typeString":"literal_string \"x\""},"value":"x"},"src":"2223:15:112","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":41384,"nodeType":"ExpressionStatement","src":"2223:15:112"},{"body":{"id":41413,"nodeType":"Block","src":"2293:95:112","statements":[{"expression":{"id":41407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":41399,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41363,"src":"2307:6:112","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":41401,"indexExpression":{"id":41400,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41386,"src":"2314:1:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2307:9:112","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":41402,"name":"HEX_DIGITS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41244,"src":"2319:10:112","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"id":41406,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":41403,"name":"localValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41359,"src":"2330:10:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307866","id":41404,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2343:3:112","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"0xf"},"src":"2330:16:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2319:28:112","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"2307:40:112","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":41408,"nodeType":"ExpressionStatement","src":"2307:40:112"},{"expression":{"id":41411,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":41409,"name":"localValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41359,"src":"2361:10:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"34","id":41410,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2376:1:112","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"2361:16:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":41412,"nodeType":"ExpressionStatement","src":"2361:16:112"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":41393,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41386,"src":"2281:1:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"31","id":41394,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2285:1:112","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2281:5:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":41414,"initializationExpression":{"assignments":[41386],"declarations":[{"constant":false,"id":41386,"mutability":"mutable","name":"i","nameLocation":"2261:1:112","nodeType":"VariableDeclaration","scope":41414,"src":"2253:9:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41385,"name":"uint256","nodeType":"ElementaryTypeName","src":"2253:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":41392,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":41387,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2265:1:112","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":41388,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41353,"src":"2269:6:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2265:10:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":41390,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2278:1:112","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"2265:14:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2253:26:112"},"isSimpleCounterLoop":false,"loopExpression":{"expression":{"id":41397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":true,"src":"2288:3:112","subExpression":{"id":41396,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41386,"src":"2290:1:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":41398,"nodeType":"ExpressionStatement","src":"2288:3:112"},"nodeType":"ForStatement","src":"2248:140:112"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":41415,"name":"localValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41359,"src":"2401:10:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":41416,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2415:1:112","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2401:15:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":41424,"nodeType":"IfStatement","src":"2397:96:112","trueBody":{"id":41423,"nodeType":"Block","src":"2418:75:112","statements":[{"errorCall":{"arguments":[{"id":41419,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41351,"src":"2468:5:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":41420,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41353,"src":"2475:6:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":41418,"name":"StringsInsufficientHexLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41254,"src":"2439:28:112","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":41421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2439:43:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":41422,"nodeType":"RevertStatement","src":"2432:50:112"}]}},{"expression":{"arguments":[{"id":41427,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41363,"src":"2516:6:112","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":41426,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2509:6:112","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":41425,"name":"string","nodeType":"ElementaryTypeName","src":"2509:6:112","typeDescriptions":{}}},"id":41428,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2509:14:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":41357,"id":41429,"nodeType":"Return","src":"2502:21:112"}]},"documentation":{"id":41349,"nodeType":"StructuredDocumentation","src":"1888:112:112","text":" @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length."},"id":41431,"implemented":true,"kind":"function","modifiers":[],"name":"toHexString","nameLocation":"2014:11:112","nodeType":"FunctionDefinition","parameters":{"id":41354,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41351,"mutability":"mutable","name":"value","nameLocation":"2034:5:112","nodeType":"VariableDeclaration","scope":41431,"src":"2026:13:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41350,"name":"uint256","nodeType":"ElementaryTypeName","src":"2026:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":41353,"mutability":"mutable","name":"length","nameLocation":"2049:6:112","nodeType":"VariableDeclaration","scope":41431,"src":"2041:14:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41352,"name":"uint256","nodeType":"ElementaryTypeName","src":"2041:7:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2025:31:112"},"returnParameters":{"id":41357,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41356,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41431,"src":"2080:13:112","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":41355,"name":"string","nodeType":"ElementaryTypeName","src":"2080:6:112","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2079:15:112"},"scope":41489,"src":"2005:525:112","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":41450,"nodeType":"Block","src":"2762:75:112","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":41444,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41434,"src":"2807:4:112","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":41443,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2799:7:112","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":41442,"name":"uint160","nodeType":"ElementaryTypeName","src":"2799:7:112","typeDescriptions":{}}},"id":41445,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2799:13:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":41441,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2791:7:112","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":41440,"name":"uint256","nodeType":"ElementaryTypeName","src":"2791:7:112","typeDescriptions":{}}},"id":41446,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2791:22:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":41447,"name":"ADDRESS_LENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41247,"src":"2815:14:112","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":41439,"name":"toHexString","nodeType":"Identifier","overloadedDeclarations":[41348,41431,41451],"referencedDeclaration":41431,"src":"2779:11:112","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (string memory)"}},"id":41448,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2779:51:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":41438,"id":41449,"nodeType":"Return","src":"2772:58:112"}]},"documentation":{"id":41432,"nodeType":"StructuredDocumentation","src":"2536:148:112","text":" @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal\n representation."},"id":41451,"implemented":true,"kind":"function","modifiers":[],"name":"toHexString","nameLocation":"2698:11:112","nodeType":"FunctionDefinition","parameters":{"id":41435,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41434,"mutability":"mutable","name":"addr","nameLocation":"2718:4:112","nodeType":"VariableDeclaration","scope":41451,"src":"2710:12:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41433,"name":"address","nodeType":"ElementaryTypeName","src":"2710:7:112","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2709:14:112"},"returnParameters":{"id":41438,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41437,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41451,"src":"2747:13:112","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":41436,"name":"string","nodeType":"ElementaryTypeName","src":"2747:6:112","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2746:15:112"},"scope":41489,"src":"2689:148:112","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":41487,"nodeType":"Block","src":"2992:104:112","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":41485,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":41463,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41454,"src":"3015:1:112","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":41462,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3009:5:112","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":41461,"name":"bytes","nodeType":"ElementaryTypeName","src":"3009:5:112","typeDescriptions":{}}},"id":41464,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3009:8:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":41465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3018:6:112","memberName":"length","nodeType":"MemberAccess","src":"3009:15:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":41468,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41456,"src":"3034:1:112","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":41467,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3028:5:112","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":41466,"name":"bytes","nodeType":"ElementaryTypeName","src":"3028:5:112","typeDescriptions":{}}},"id":41469,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3028:8:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":41470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3037:6:112","memberName":"length","nodeType":"MemberAccess","src":"3028:15:112","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3009:34:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":41484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":41475,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41454,"src":"3063:1:112","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":41474,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3057:5:112","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":41473,"name":"bytes","nodeType":"ElementaryTypeName","src":"3057:5:112","typeDescriptions":{}}},"id":41476,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3057:8:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":41472,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"3047:9:112","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":41477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3047:19:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"arguments":[{"id":41481,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41456,"src":"3086:1:112","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":41480,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3080:5:112","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":41479,"name":"bytes","nodeType":"ElementaryTypeName","src":"3080:5:112","typeDescriptions":{}}},"id":41482,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3080:8:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":41478,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"3070:9:112","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":41483,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3070:19:112","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3047:42:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3009:80:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":41460,"id":41486,"nodeType":"Return","src":"3002:87:112"}]},"documentation":{"id":41452,"nodeType":"StructuredDocumentation","src":"2843:66:112","text":" @dev Returns true if the two strings are equal."},"id":41488,"implemented":true,"kind":"function","modifiers":[],"name":"equal","nameLocation":"2923:5:112","nodeType":"FunctionDefinition","parameters":{"id":41457,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41454,"mutability":"mutable","name":"a","nameLocation":"2943:1:112","nodeType":"VariableDeclaration","scope":41488,"src":"2929:15:112","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":41453,"name":"string","nodeType":"ElementaryTypeName","src":"2929:6:112","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":41456,"mutability":"mutable","name":"b","nameLocation":"2960:1:112","nodeType":"VariableDeclaration","scope":41488,"src":"2946:15:112","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":41455,"name":"string","nodeType":"ElementaryTypeName","src":"2946:6:112","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2928:34:112"},"returnParameters":{"id":41460,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41459,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41488,"src":"2986:4:112","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":41458,"name":"bool","nodeType":"ElementaryTypeName","src":"2986:4:112","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2985:6:112"},"scope":41489,"src":"2914:182:112","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":41490,"src":"251:2847:112","usedErrors":[41254],"usedEvents":[]}],"src":"101:2998:112"},"id":112},"@openzeppelin/contracts/utils/cryptography/ECDSA.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/cryptography/ECDSA.sol","exportedSymbols":{"ECDSA":[41837]},"id":41838,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":41491,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"112:24:113"},{"abstract":false,"baseContracts":[],"canonicalName":"ECDSA","contractDependencies":[],"contractKind":"library","documentation":{"id":41492,"nodeType":"StructuredDocumentation","src":"138:205:113","text":" @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.\n These functions can be used to verify that a message was signed by the holder\n of the private keys of a given address."},"fullyImplemented":true,"id":41837,"linearizedBaseContracts":[41837],"name":"ECDSA","nameLocation":"352:5:113","nodeType":"ContractDefinition","nodes":[{"canonicalName":"ECDSA.RecoverError","id":41497,"members":[{"id":41493,"name":"NoError","nameLocation":"392:7:113","nodeType":"EnumValue","src":"392:7:113"},{"id":41494,"name":"InvalidSignature","nameLocation":"409:16:113","nodeType":"EnumValue","src":"409:16:113"},{"id":41495,"name":"InvalidSignatureLength","nameLocation":"435:22:113","nodeType":"EnumValue","src":"435:22:113"},{"id":41496,"name":"InvalidSignatureS","nameLocation":"467:17:113","nodeType":"EnumValue","src":"467:17:113"}],"name":"RecoverError","nameLocation":"369:12:113","nodeType":"EnumDefinition","src":"364:126:113"},{"documentation":{"id":41498,"nodeType":"StructuredDocumentation","src":"496:63:113","text":" @dev The signature derives the `address(0)`."},"errorSelector":"f645eedf","id":41500,"name":"ECDSAInvalidSignature","nameLocation":"570:21:113","nodeType":"ErrorDefinition","parameters":{"id":41499,"nodeType":"ParameterList","parameters":[],"src":"591:2:113"},"src":"564:30:113"},{"documentation":{"id":41501,"nodeType":"StructuredDocumentation","src":"600:60:113","text":" @dev The signature has an invalid length."},"errorSelector":"fce698f7","id":41505,"name":"ECDSAInvalidSignatureLength","nameLocation":"671:27:113","nodeType":"ErrorDefinition","parameters":{"id":41504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41503,"mutability":"mutable","name":"length","nameLocation":"707:6:113","nodeType":"VariableDeclaration","scope":41505,"src":"699:14:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41502,"name":"uint256","nodeType":"ElementaryTypeName","src":"699:7:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"698:16:113"},"src":"665:50:113"},{"documentation":{"id":41506,"nodeType":"StructuredDocumentation","src":"721:85:113","text":" @dev The signature has an S value that is in the upper half order."},"errorSelector":"d78bce0c","id":41510,"name":"ECDSAInvalidSignatureS","nameLocation":"817:22:113","nodeType":"ErrorDefinition","parameters":{"id":41509,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41508,"mutability":"mutable","name":"s","nameLocation":"848:1:113","nodeType":"VariableDeclaration","scope":41510,"src":"840:9:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41507,"name":"bytes32","nodeType":"ElementaryTypeName","src":"840:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"839:11:113"},"src":"811:40:113"},{"body":{"id":41562,"nodeType":"Block","src":"2242:653:113","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41528,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":41525,"name":"signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41515,"src":"2256:9:113","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":41526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2266:6:113","memberName":"length","nodeType":"MemberAccess","src":"2256:16:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"3635","id":41527,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2276:2:113","typeDescriptions":{"typeIdentifier":"t_rational_65_by_1","typeString":"int_const 65"},"value":"65"},"src":"2256:22:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":41560,"nodeType":"Block","src":"2781:108:113","statements":[{"expression":{"components":[{"arguments":[{"hexValue":"30","id":41549,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2811:1:113","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":41548,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2803:7:113","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":41547,"name":"address","nodeType":"ElementaryTypeName","src":"2803:7:113","typeDescriptions":{}}},"id":41550,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2803:10:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":41551,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41497,"src":"2815:12:113","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$41497_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":41552,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2828:22:113","memberName":"InvalidSignatureLength","nodeType":"MemberAccess","referencedDeclaration":41495,"src":"2815:35:113","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"}},{"arguments":[{"expression":{"id":41555,"name":"signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41515,"src":"2860:9:113","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":41556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2870:6:113","memberName":"length","nodeType":"MemberAccess","src":"2860:16:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":41554,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2852:7:113","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":41553,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2852:7:113","typeDescriptions":{}}},"id":41557,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2852:25:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":41558,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2802:76:113","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$41497_$_t_bytes32_$","typeString":"tuple(address,enum ECDSA.RecoverError,bytes32)"}},"functionReturnParameters":41524,"id":41559,"nodeType":"Return","src":"2795:83:113"}]},"id":41561,"nodeType":"IfStatement","src":"2252:637:113","trueBody":{"id":41546,"nodeType":"Block","src":"2280:495:113","statements":[{"assignments":[41530],"declarations":[{"constant":false,"id":41530,"mutability":"mutable","name":"r","nameLocation":"2302:1:113","nodeType":"VariableDeclaration","scope":41546,"src":"2294:9:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41529,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2294:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":41531,"nodeType":"VariableDeclarationStatement","src":"2294:9:113"},{"assignments":[41533],"declarations":[{"constant":false,"id":41533,"mutability":"mutable","name":"s","nameLocation":"2325:1:113","nodeType":"VariableDeclaration","scope":41546,"src":"2317:9:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41532,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2317:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":41534,"nodeType":"VariableDeclarationStatement","src":"2317:9:113"},{"assignments":[41536],"declarations":[{"constant":false,"id":41536,"mutability":"mutable","name":"v","nameLocation":"2346:1:113","nodeType":"VariableDeclaration","scope":41546,"src":"2340:7:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":41535,"name":"uint8","nodeType":"ElementaryTypeName","src":"2340:5:113","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":41537,"nodeType":"VariableDeclarationStatement","src":"2340:7:113"},{"AST":{"nativeSrc":"2548:171:113","nodeType":"YulBlock","src":"2548:171:113","statements":[{"nativeSrc":"2566:32:113","nodeType":"YulAssignment","src":"2566:32:113","value":{"arguments":[{"arguments":[{"name":"signature","nativeSrc":"2581:9:113","nodeType":"YulIdentifier","src":"2581:9:113"},{"kind":"number","nativeSrc":"2592:4:113","nodeType":"YulLiteral","src":"2592:4:113","type":"","value":"0x20"}],"functionName":{"name":"add","nativeSrc":"2577:3:113","nodeType":"YulIdentifier","src":"2577:3:113"},"nativeSrc":"2577:20:113","nodeType":"YulFunctionCall","src":"2577:20:113"}],"functionName":{"name":"mload","nativeSrc":"2571:5:113","nodeType":"YulIdentifier","src":"2571:5:113"},"nativeSrc":"2571:27:113","nodeType":"YulFunctionCall","src":"2571:27:113"},"variableNames":[{"name":"r","nativeSrc":"2566:1:113","nodeType":"YulIdentifier","src":"2566:1:113"}]},{"nativeSrc":"2615:32:113","nodeType":"YulAssignment","src":"2615:32:113","value":{"arguments":[{"arguments":[{"name":"signature","nativeSrc":"2630:9:113","nodeType":"YulIdentifier","src":"2630:9:113"},{"kind":"number","nativeSrc":"2641:4:113","nodeType":"YulLiteral","src":"2641:4:113","type":"","value":"0x40"}],"functionName":{"name":"add","nativeSrc":"2626:3:113","nodeType":"YulIdentifier","src":"2626:3:113"},"nativeSrc":"2626:20:113","nodeType":"YulFunctionCall","src":"2626:20:113"}],"functionName":{"name":"mload","nativeSrc":"2620:5:113","nodeType":"YulIdentifier","src":"2620:5:113"},"nativeSrc":"2620:27:113","nodeType":"YulFunctionCall","src":"2620:27:113"},"variableNames":[{"name":"s","nativeSrc":"2615:1:113","nodeType":"YulIdentifier","src":"2615:1:113"}]},{"nativeSrc":"2664:41:113","nodeType":"YulAssignment","src":"2664:41:113","value":{"arguments":[{"kind":"number","nativeSrc":"2674:1:113","nodeType":"YulLiteral","src":"2674:1:113","type":"","value":"0"},{"arguments":[{"arguments":[{"name":"signature","nativeSrc":"2687:9:113","nodeType":"YulIdentifier","src":"2687:9:113"},{"kind":"number","nativeSrc":"2698:4:113","nodeType":"YulLiteral","src":"2698:4:113","type":"","value":"0x60"}],"functionName":{"name":"add","nativeSrc":"2683:3:113","nodeType":"YulIdentifier","src":"2683:3:113"},"nativeSrc":"2683:20:113","nodeType":"YulFunctionCall","src":"2683:20:113"}],"functionName":{"name":"mload","nativeSrc":"2677:5:113","nodeType":"YulIdentifier","src":"2677:5:113"},"nativeSrc":"2677:27:113","nodeType":"YulFunctionCall","src":"2677:27:113"}],"functionName":{"name":"byte","nativeSrc":"2669:4:113","nodeType":"YulIdentifier","src":"2669:4:113"},"nativeSrc":"2669:36:113","nodeType":"YulFunctionCall","src":"2669:36:113"},"variableNames":[{"name":"v","nativeSrc":"2664:1:113","nodeType":"YulIdentifier","src":"2664:1:113"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":41530,"isOffset":false,"isSlot":false,"src":"2566:1:113","valueSize":1},{"declaration":41533,"isOffset":false,"isSlot":false,"src":"2615:1:113","valueSize":1},{"declaration":41515,"isOffset":false,"isSlot":false,"src":"2581:9:113","valueSize":1},{"declaration":41515,"isOffset":false,"isSlot":false,"src":"2630:9:113","valueSize":1},{"declaration":41515,"isOffset":false,"isSlot":false,"src":"2687:9:113","valueSize":1},{"declaration":41536,"isOffset":false,"isSlot":false,"src":"2664:1:113","valueSize":1}],"id":41538,"nodeType":"InlineAssembly","src":"2539:180:113"},{"expression":{"arguments":[{"id":41540,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41513,"src":"2750:4:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":41541,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41536,"src":"2756:1:113","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":41542,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41530,"src":"2759:1:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":41543,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41533,"src":"2762:1:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":41539,"name":"tryRecover","nodeType":"Identifier","overloadedDeclarations":[41563,41643,41751],"referencedDeclaration":41751,"src":"2739:10:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$41497_$_t_bytes32_$","typeString":"function (bytes32,uint8,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError,bytes32)"}},"id":41544,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2739:25:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$41497_$_t_bytes32_$","typeString":"tuple(address,enum ECDSA.RecoverError,bytes32)"}},"functionReturnParameters":41524,"id":41545,"nodeType":"Return","src":"2732:32:113"}]}}]},"documentation":{"id":41511,"nodeType":"StructuredDocumentation","src":"857:1267:113","text":" @dev Returns the address that signed a hashed message (`hash`) with `signature` or an error. This will not\n return address(0) without also returning an error description. Errors are documented using an enum (error type)\n and a bytes32 providing additional information about the error.\n If no error is returned, then the address can be used for verification purposes.\n The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n this function rejects them by requiring the `s` value to be in the lower\n half order, and the `v` value to be either 27 or 28.\n IMPORTANT: `hash` _must_ be the result of a hash operation for the\n verification to be secure: it is possible to craft signatures that\n recover to arbitrary addresses for non-hashed data. A safe way to ensure\n this is by receiving a hash of the original message (which may otherwise\n be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it.\n Documentation for signature generation:\n - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js]\n - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers]"},"id":41563,"implemented":true,"kind":"function","modifiers":[],"name":"tryRecover","nameLocation":"2138:10:113","nodeType":"FunctionDefinition","parameters":{"id":41516,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41513,"mutability":"mutable","name":"hash","nameLocation":"2157:4:113","nodeType":"VariableDeclaration","scope":41563,"src":"2149:12:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41512,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2149:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":41515,"mutability":"mutable","name":"signature","nameLocation":"2176:9:113","nodeType":"VariableDeclaration","scope":41563,"src":"2163:22:113","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41514,"name":"bytes","nodeType":"ElementaryTypeName","src":"2163:5:113","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2148:38:113"},"returnParameters":{"id":41524,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41518,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41563,"src":"2210:7:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41517,"name":"address","nodeType":"ElementaryTypeName","src":"2210:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41521,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41563,"src":"2219:12:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"},"typeName":{"id":41520,"nodeType":"UserDefinedTypeName","pathNode":{"id":41519,"name":"RecoverError","nameLocations":["2219:12:113"],"nodeType":"IdentifierPath","referencedDeclaration":41497,"src":"2219:12:113"},"referencedDeclaration":41497,"src":"2219:12:113","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"}},"visibility":"internal"},{"constant":false,"id":41523,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41563,"src":"2233:7:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41522,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2233:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2209:32:113"},"scope":41837,"src":"2129:766:113","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":41592,"nodeType":"Block","src":"3789:168:113","statements":[{"assignments":[41574,41577,41579],"declarations":[{"constant":false,"id":41574,"mutability":"mutable","name":"recovered","nameLocation":"3808:9:113","nodeType":"VariableDeclaration","scope":41592,"src":"3800:17:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41573,"name":"address","nodeType":"ElementaryTypeName","src":"3800:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41577,"mutability":"mutable","name":"error","nameLocation":"3832:5:113","nodeType":"VariableDeclaration","scope":41592,"src":"3819:18:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"},"typeName":{"id":41576,"nodeType":"UserDefinedTypeName","pathNode":{"id":41575,"name":"RecoverError","nameLocations":["3819:12:113"],"nodeType":"IdentifierPath","referencedDeclaration":41497,"src":"3819:12:113"},"referencedDeclaration":41497,"src":"3819:12:113","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"}},"visibility":"internal"},{"constant":false,"id":41579,"mutability":"mutable","name":"errorArg","nameLocation":"3847:8:113","nodeType":"VariableDeclaration","scope":41592,"src":"3839:16:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41578,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3839:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":41584,"initialValue":{"arguments":[{"id":41581,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41566,"src":"3870:4:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":41582,"name":"signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41568,"src":"3876:9:113","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":41580,"name":"tryRecover","nodeType":"Identifier","overloadedDeclarations":[41563,41643,41751],"referencedDeclaration":41563,"src":"3859:10:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$_t_enum$_RecoverError_$41497_$_t_bytes32_$","typeString":"function (bytes32,bytes memory) pure returns (address,enum ECDSA.RecoverError,bytes32)"}},"id":41583,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3859:27:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$41497_$_t_bytes32_$","typeString":"tuple(address,enum ECDSA.RecoverError,bytes32)"}},"nodeType":"VariableDeclarationStatement","src":"3799:87:113"},{"expression":{"arguments":[{"id":41586,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41577,"src":"3908:5:113","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"}},{"id":41587,"name":"errorArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41579,"src":"3915:8:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":41585,"name":"_throwError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41836,"src":"3896:11:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_RecoverError_$41497_$_t_bytes32_$returns$__$","typeString":"function (enum ECDSA.RecoverError,bytes32) pure"}},"id":41588,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3896:28:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41589,"nodeType":"ExpressionStatement","src":"3896:28:113"},{"expression":{"id":41590,"name":"recovered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41574,"src":"3941:9:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":41572,"id":41591,"nodeType":"Return","src":"3934:16:113"}]},"documentation":{"id":41564,"nodeType":"StructuredDocumentation","src":"2901:796:113","text":" @dev Returns the address that signed a hashed message (`hash`) with\n `signature`. This address can then be used for verification purposes.\n The `ecrecover` EVM precompile allows for malleable (non-unique) signatures:\n this function rejects them by requiring the `s` value to be in the lower\n half order, and the `v` value to be either 27 or 28.\n IMPORTANT: `hash` _must_ be the result of a hash operation for the\n verification to be secure: it is possible to craft signatures that\n recover to arbitrary addresses for non-hashed data. A safe way to ensure\n this is by receiving a hash of the original message (which may otherwise\n be too long), and then calling {MessageHashUtils-toEthSignedMessageHash} on it."},"id":41593,"implemented":true,"kind":"function","modifiers":[],"name":"recover","nameLocation":"3711:7:113","nodeType":"FunctionDefinition","parameters":{"id":41569,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41566,"mutability":"mutable","name":"hash","nameLocation":"3727:4:113","nodeType":"VariableDeclaration","scope":41593,"src":"3719:12:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41565,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3719:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":41568,"mutability":"mutable","name":"signature","nameLocation":"3746:9:113","nodeType":"VariableDeclaration","scope":41593,"src":"3733:22:113","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":41567,"name":"bytes","nodeType":"ElementaryTypeName","src":"3733:5:113","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3718:38:113"},"returnParameters":{"id":41572,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41571,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41593,"src":"3780:7:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41570,"name":"address","nodeType":"ElementaryTypeName","src":"3780:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3779:9:113"},"scope":41837,"src":"3702:255:113","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":41642,"nodeType":"Block","src":"4285:342:113","statements":[{"id":41641,"nodeType":"UncheckedBlock","src":"4295:326:113","statements":[{"assignments":[41611],"declarations":[{"constant":false,"id":41611,"mutability":"mutable","name":"s","nameLocation":"4327:1:113","nodeType":"VariableDeclaration","scope":41641,"src":"4319:9:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41610,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4319:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":41618,"initialValue":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":41617,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":41612,"name":"vs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41600,"src":"4331:2:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"arguments":[{"hexValue":"307837666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666","id":41615,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4344:66:113","typeDescriptions":{"typeIdentifier":"t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819967_by_1","typeString":"int_const 5789...(69 digits omitted)...9967"},"value":"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_57896044618658097711785492504343953926634992332820282019728792003956564819967_by_1","typeString":"int_const 5789...(69 digits omitted)...9967"}],"id":41614,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4336:7:113","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":41613,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4336:7:113","typeDescriptions":{}}},"id":41616,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4336:75:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"4331:80:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"4319:92:113"},{"assignments":[41620],"declarations":[{"constant":false,"id":41620,"mutability":"mutable","name":"v","nameLocation":"4528:1:113","nodeType":"VariableDeclaration","scope":41641,"src":"4522:7:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":41619,"name":"uint8","nodeType":"ElementaryTypeName","src":"4522:5:113","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":41633,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41631,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41628,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":41625,"name":"vs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41600,"src":"4547:2:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":41624,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4539:7:113","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":41623,"name":"uint256","nodeType":"ElementaryTypeName","src":"4539:7:113","typeDescriptions":{}}},"id":41626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4539:11:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"323535","id":41627,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4554:3:113","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"src":"4539:18:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":41629,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4538:20:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"3237","id":41630,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4561:2:113","typeDescriptions":{"typeIdentifier":"t_rational_27_by_1","typeString":"int_const 27"},"value":"27"},"src":"4538:25:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":41622,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4532:5:113","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":41621,"name":"uint8","nodeType":"ElementaryTypeName","src":"4532:5:113","typeDescriptions":{}}},"id":41632,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4532:32:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"VariableDeclarationStatement","src":"4522:42:113"},{"expression":{"arguments":[{"id":41635,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41596,"src":"4596:4:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":41636,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41620,"src":"4602:1:113","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":41637,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41598,"src":"4605:1:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":41638,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41611,"src":"4608:1:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":41634,"name":"tryRecover","nodeType":"Identifier","overloadedDeclarations":[41563,41643,41751],"referencedDeclaration":41751,"src":"4585:10:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$41497_$_t_bytes32_$","typeString":"function (bytes32,uint8,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError,bytes32)"}},"id":41639,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4585:25:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$41497_$_t_bytes32_$","typeString":"tuple(address,enum ECDSA.RecoverError,bytes32)"}},"functionReturnParameters":41609,"id":41640,"nodeType":"Return","src":"4578:32:113"}]}]},"documentation":{"id":41594,"nodeType":"StructuredDocumentation","src":"3963:205:113","text":" @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately.\n See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures]"},"id":41643,"implemented":true,"kind":"function","modifiers":[],"name":"tryRecover","nameLocation":"4182:10:113","nodeType":"FunctionDefinition","parameters":{"id":41601,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41596,"mutability":"mutable","name":"hash","nameLocation":"4201:4:113","nodeType":"VariableDeclaration","scope":41643,"src":"4193:12:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41595,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4193:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":41598,"mutability":"mutable","name":"r","nameLocation":"4215:1:113","nodeType":"VariableDeclaration","scope":41643,"src":"4207:9:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41597,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4207:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":41600,"mutability":"mutable","name":"vs","nameLocation":"4226:2:113","nodeType":"VariableDeclaration","scope":41643,"src":"4218:10:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41599,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4218:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4192:37:113"},"returnParameters":{"id":41609,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41603,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41643,"src":"4253:7:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41602,"name":"address","nodeType":"ElementaryTypeName","src":"4253:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41606,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41643,"src":"4262:12:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"},"typeName":{"id":41605,"nodeType":"UserDefinedTypeName","pathNode":{"id":41604,"name":"RecoverError","nameLocations":["4262:12:113"],"nodeType":"IdentifierPath","referencedDeclaration":41497,"src":"4262:12:113"},"referencedDeclaration":41497,"src":"4262:12:113","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"}},"visibility":"internal"},{"constant":false,"id":41608,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41643,"src":"4276:7:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41607,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4276:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4252:32:113"},"scope":41837,"src":"4173:454:113","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":41675,"nodeType":"Block","src":"4840:164:113","statements":[{"assignments":[41656,41659,41661],"declarations":[{"constant":false,"id":41656,"mutability":"mutable","name":"recovered","nameLocation":"4859:9:113","nodeType":"VariableDeclaration","scope":41675,"src":"4851:17:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41655,"name":"address","nodeType":"ElementaryTypeName","src":"4851:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41659,"mutability":"mutable","name":"error","nameLocation":"4883:5:113","nodeType":"VariableDeclaration","scope":41675,"src":"4870:18:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"},"typeName":{"id":41658,"nodeType":"UserDefinedTypeName","pathNode":{"id":41657,"name":"RecoverError","nameLocations":["4870:12:113"],"nodeType":"IdentifierPath","referencedDeclaration":41497,"src":"4870:12:113"},"referencedDeclaration":41497,"src":"4870:12:113","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"}},"visibility":"internal"},{"constant":false,"id":41661,"mutability":"mutable","name":"errorArg","nameLocation":"4898:8:113","nodeType":"VariableDeclaration","scope":41675,"src":"4890:16:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41660,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4890:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":41667,"initialValue":{"arguments":[{"id":41663,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41646,"src":"4921:4:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":41664,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41648,"src":"4927:1:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":41665,"name":"vs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41650,"src":"4930:2:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":41662,"name":"tryRecover","nodeType":"Identifier","overloadedDeclarations":[41563,41643,41751],"referencedDeclaration":41643,"src":"4910:10:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$41497_$_t_bytes32_$","typeString":"function (bytes32,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError,bytes32)"}},"id":41666,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4910:23:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$41497_$_t_bytes32_$","typeString":"tuple(address,enum ECDSA.RecoverError,bytes32)"}},"nodeType":"VariableDeclarationStatement","src":"4850:83:113"},{"expression":{"arguments":[{"id":41669,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41659,"src":"4955:5:113","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"}},{"id":41670,"name":"errorArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41661,"src":"4962:8:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":41668,"name":"_throwError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41836,"src":"4943:11:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_RecoverError_$41497_$_t_bytes32_$returns$__$","typeString":"function (enum ECDSA.RecoverError,bytes32) pure"}},"id":41671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4943:28:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41672,"nodeType":"ExpressionStatement","src":"4943:28:113"},{"expression":{"id":41673,"name":"recovered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41656,"src":"4988:9:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":41654,"id":41674,"nodeType":"Return","src":"4981:16:113"}]},"documentation":{"id":41644,"nodeType":"StructuredDocumentation","src":"4633:116:113","text":" @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately."},"id":41676,"implemented":true,"kind":"function","modifiers":[],"name":"recover","nameLocation":"4763:7:113","nodeType":"FunctionDefinition","parameters":{"id":41651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41646,"mutability":"mutable","name":"hash","nameLocation":"4779:4:113","nodeType":"VariableDeclaration","scope":41676,"src":"4771:12:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41645,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4771:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":41648,"mutability":"mutable","name":"r","nameLocation":"4793:1:113","nodeType":"VariableDeclaration","scope":41676,"src":"4785:9:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41647,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4785:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":41650,"mutability":"mutable","name":"vs","nameLocation":"4804:2:113","nodeType":"VariableDeclaration","scope":41676,"src":"4796:10:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41649,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4796:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4770:37:113"},"returnParameters":{"id":41654,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41653,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41676,"src":"4831:7:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41652,"name":"address","nodeType":"ElementaryTypeName","src":"4831:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4830:9:113"},"scope":41837,"src":"4754:250:113","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":41750,"nodeType":"Block","src":"5298:1372:113","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":41697,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41685,"src":"6194:1:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":41696,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6186:7:113","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":41695,"name":"uint256","nodeType":"ElementaryTypeName","src":"6186:7:113","typeDescriptions":{}}},"id":41698,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6186:10:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"307837464646464646464646464646464646464646464646464646464646464646463544353736453733353741343530314444464539324634363638314232304130","id":41699,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6199:66:113","typeDescriptions":{"typeIdentifier":"t_rational_57896044618658097711785492504343953926418782139537452191302581570759080747168_by_1","typeString":"int_const 5789...(69 digits omitted)...7168"},"value":"0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0"},"src":"6186:79:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":41711,"nodeType":"IfStatement","src":"6182:164:113","trueBody":{"id":41710,"nodeType":"Block","src":"6267:79:113","statements":[{"expression":{"components":[{"arguments":[{"hexValue":"30","id":41703,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6297:1:113","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":41702,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6289:7:113","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":41701,"name":"address","nodeType":"ElementaryTypeName","src":"6289:7:113","typeDescriptions":{}}},"id":41704,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6289:10:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":41705,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41497,"src":"6301:12:113","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$41497_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":41706,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6314:17:113","memberName":"InvalidSignatureS","nodeType":"MemberAccess","referencedDeclaration":41496,"src":"6301:30:113","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"}},{"id":41707,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41685,"src":"6333:1:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":41708,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6288:47:113","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$41497_$_t_bytes32_$","typeString":"tuple(address,enum ECDSA.RecoverError,bytes32)"}},"functionReturnParameters":41694,"id":41709,"nodeType":"Return","src":"6281:54:113"}]}},{"assignments":[41713],"declarations":[{"constant":false,"id":41713,"mutability":"mutable","name":"signer","nameLocation":"6448:6:113","nodeType":"VariableDeclaration","scope":41750,"src":"6440:14:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41712,"name":"address","nodeType":"ElementaryTypeName","src":"6440:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":41720,"initialValue":{"arguments":[{"id":41715,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41679,"src":"6467:4:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":41716,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41681,"src":"6473:1:113","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":41717,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41683,"src":"6476:1:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":41718,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41685,"src":"6479:1:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":41714,"name":"ecrecover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-6,"src":"6457:9:113","typeDescriptions":{"typeIdentifier":"t_function_ecrecover_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes32,uint8,bytes32,bytes32) pure returns (address)"}},"id":41719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6457:24:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"6440:41:113"},{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":41726,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":41721,"name":"signer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41713,"src":"6495:6:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":41724,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6513:1:113","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":41723,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6505:7:113","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":41722,"name":"address","nodeType":"ElementaryTypeName","src":"6505:7:113","typeDescriptions":{}}},"id":41725,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6505:10:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6495:20:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":41740,"nodeType":"IfStatement","src":"6491:113:113","trueBody":{"id":41739,"nodeType":"Block","src":"6517:87:113","statements":[{"expression":{"components":[{"arguments":[{"hexValue":"30","id":41729,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6547:1:113","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":41728,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6539:7:113","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":41727,"name":"address","nodeType":"ElementaryTypeName","src":"6539:7:113","typeDescriptions":{}}},"id":41730,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6539:10:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":41731,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41497,"src":"6551:12:113","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$41497_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":41732,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6564:16:113","memberName":"InvalidSignature","nodeType":"MemberAccess","referencedDeclaration":41494,"src":"6551:29:113","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"}},{"arguments":[{"hexValue":"30","id":41735,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6590:1:113","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":41734,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6582:7:113","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":41733,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6582:7:113","typeDescriptions":{}}},"id":41736,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6582:10:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":41737,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"6538:55:113","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$41497_$_t_bytes32_$","typeString":"tuple(address,enum ECDSA.RecoverError,bytes32)"}},"functionReturnParameters":41694,"id":41738,"nodeType":"Return","src":"6531:62:113"}]}},{"expression":{"components":[{"id":41741,"name":"signer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41713,"src":"6622:6:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":41742,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41497,"src":"6630:12:113","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$41497_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":41743,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6643:7:113","memberName":"NoError","nodeType":"MemberAccess","referencedDeclaration":41493,"src":"6630:20:113","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"}},{"arguments":[{"hexValue":"30","id":41746,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6660:1:113","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":41745,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6652:7:113","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":41744,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6652:7:113","typeDescriptions":{}}},"id":41747,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6652:10:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":41748,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6621:42:113","typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$41497_$_t_bytes32_$","typeString":"tuple(address,enum ECDSA.RecoverError,bytes32)"}},"functionReturnParameters":41694,"id":41749,"nodeType":"Return","src":"6614:49:113"}]},"documentation":{"id":41677,"nodeType":"StructuredDocumentation","src":"5010:125:113","text":" @dev Overload of {ECDSA-tryRecover} that receives the `v`,\n `r` and `s` signature fields separately."},"id":41751,"implemented":true,"kind":"function","modifiers":[],"name":"tryRecover","nameLocation":"5149:10:113","nodeType":"FunctionDefinition","parameters":{"id":41686,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41679,"mutability":"mutable","name":"hash","nameLocation":"5177:4:113","nodeType":"VariableDeclaration","scope":41751,"src":"5169:12:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41678,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5169:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":41681,"mutability":"mutable","name":"v","nameLocation":"5197:1:113","nodeType":"VariableDeclaration","scope":41751,"src":"5191:7:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":41680,"name":"uint8","nodeType":"ElementaryTypeName","src":"5191:5:113","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":41683,"mutability":"mutable","name":"r","nameLocation":"5216:1:113","nodeType":"VariableDeclaration","scope":41751,"src":"5208:9:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41682,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5208:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":41685,"mutability":"mutable","name":"s","nameLocation":"5235:1:113","nodeType":"VariableDeclaration","scope":41751,"src":"5227:9:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41684,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5227:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5159:83:113"},"returnParameters":{"id":41694,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41688,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41751,"src":"5266:7:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41687,"name":"address","nodeType":"ElementaryTypeName","src":"5266:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41691,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41751,"src":"5275:12:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"},"typeName":{"id":41690,"nodeType":"UserDefinedTypeName","pathNode":{"id":41689,"name":"RecoverError","nameLocations":["5275:12:113"],"nodeType":"IdentifierPath","referencedDeclaration":41497,"src":"5275:12:113"},"referencedDeclaration":41497,"src":"5275:12:113","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"}},"visibility":"internal"},{"constant":false,"id":41693,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41751,"src":"5289:7:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41692,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5289:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"5265:32:113"},"scope":41837,"src":"5140:1530:113","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":41786,"nodeType":"Block","src":"6897:166:113","statements":[{"assignments":[41766,41769,41771],"declarations":[{"constant":false,"id":41766,"mutability":"mutable","name":"recovered","nameLocation":"6916:9:113","nodeType":"VariableDeclaration","scope":41786,"src":"6908:17:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41765,"name":"address","nodeType":"ElementaryTypeName","src":"6908:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":41769,"mutability":"mutable","name":"error","nameLocation":"6940:5:113","nodeType":"VariableDeclaration","scope":41786,"src":"6927:18:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"},"typeName":{"id":41768,"nodeType":"UserDefinedTypeName","pathNode":{"id":41767,"name":"RecoverError","nameLocations":["6927:12:113"],"nodeType":"IdentifierPath","referencedDeclaration":41497,"src":"6927:12:113"},"referencedDeclaration":41497,"src":"6927:12:113","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"}},"visibility":"internal"},{"constant":false,"id":41771,"mutability":"mutable","name":"errorArg","nameLocation":"6955:8:113","nodeType":"VariableDeclaration","scope":41786,"src":"6947:16:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41770,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6947:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":41778,"initialValue":{"arguments":[{"id":41773,"name":"hash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41754,"src":"6978:4:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":41774,"name":"v","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41756,"src":"6984:1:113","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},{"id":41775,"name":"r","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41758,"src":"6987:1:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":41776,"name":"s","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41760,"src":"6990:1:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint8","typeString":"uint8"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":41772,"name":"tryRecover","nodeType":"Identifier","overloadedDeclarations":[41563,41643,41751],"referencedDeclaration":41751,"src":"6967:10:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$_t_enum$_RecoverError_$41497_$_t_bytes32_$","typeString":"function (bytes32,uint8,bytes32,bytes32) pure returns (address,enum ECDSA.RecoverError,bytes32)"}},"id":41777,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6967:25:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_address_$_t_enum$_RecoverError_$41497_$_t_bytes32_$","typeString":"tuple(address,enum ECDSA.RecoverError,bytes32)"}},"nodeType":"VariableDeclarationStatement","src":"6907:85:113"},{"expression":{"arguments":[{"id":41780,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41769,"src":"7014:5:113","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"}},{"id":41781,"name":"errorArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41771,"src":"7021:8:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":41779,"name":"_throwError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41836,"src":"7002:11:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_RecoverError_$41497_$_t_bytes32_$returns$__$","typeString":"function (enum ECDSA.RecoverError,bytes32) pure"}},"id":41782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7002:28:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":41783,"nodeType":"ExpressionStatement","src":"7002:28:113"},{"expression":{"id":41784,"name":"recovered","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41766,"src":"7047:9:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":41764,"id":41785,"nodeType":"Return","src":"7040:16:113"}]},"documentation":{"id":41752,"nodeType":"StructuredDocumentation","src":"6676:122:113","text":" @dev Overload of {ECDSA-recover} that receives the `v`,\n `r` and `s` signature fields separately."},"id":41787,"implemented":true,"kind":"function","modifiers":[],"name":"recover","nameLocation":"6812:7:113","nodeType":"FunctionDefinition","parameters":{"id":41761,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41754,"mutability":"mutable","name":"hash","nameLocation":"6828:4:113","nodeType":"VariableDeclaration","scope":41787,"src":"6820:12:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41753,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6820:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":41756,"mutability":"mutable","name":"v","nameLocation":"6840:1:113","nodeType":"VariableDeclaration","scope":41787,"src":"6834:7:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":41755,"name":"uint8","nodeType":"ElementaryTypeName","src":"6834:5:113","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":41758,"mutability":"mutable","name":"r","nameLocation":"6851:1:113","nodeType":"VariableDeclaration","scope":41787,"src":"6843:9:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41757,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6843:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":41760,"mutability":"mutable","name":"s","nameLocation":"6862:1:113","nodeType":"VariableDeclaration","scope":41787,"src":"6854:9:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41759,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6854:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6819:45:113"},"returnParameters":{"id":41764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41763,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41787,"src":"6888:7:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41762,"name":"address","nodeType":"ElementaryTypeName","src":"6888:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6887:9:113"},"scope":41837,"src":"6803:260:113","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":41835,"nodeType":"Block","src":"7268:460:113","statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"},"id":41799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":41796,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41791,"src":"7282:5:113","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":41797,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41497,"src":"7291:12:113","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$41497_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":41798,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7304:7:113","memberName":"NoError","nodeType":"MemberAccess","referencedDeclaration":41493,"src":"7291:20:113","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"}},"src":"7282:29:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"},"id":41805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":41802,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41791,"src":"7378:5:113","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":41803,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41497,"src":"7387:12:113","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$41497_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":41804,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7400:16:113","memberName":"InvalidSignature","nodeType":"MemberAccess","referencedDeclaration":41494,"src":"7387:29:113","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"}},"src":"7378:38:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"},"id":41813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":41810,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41791,"src":"7483:5:113","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":41811,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41497,"src":"7492:12:113","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$41497_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":41812,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7505:22:113","memberName":"InvalidSignatureLength","nodeType":"MemberAccess","referencedDeclaration":41495,"src":"7492:35:113","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"}},"src":"7483:44:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"},"id":41825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":41822,"name":"error","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41791,"src":"7617:5:113","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":41823,"name":"RecoverError","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41497,"src":"7626:12:113","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_RecoverError_$41497_$","typeString":"type(enum ECDSA.RecoverError)"}},"id":41824,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7639:17:113","memberName":"InvalidSignatureS","nodeType":"MemberAccess","referencedDeclaration":41496,"src":"7626:30:113","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"}},"src":"7617:39:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":41831,"nodeType":"IfStatement","src":"7613:109:113","trueBody":{"id":41830,"nodeType":"Block","src":"7658:64:113","statements":[{"errorCall":{"arguments":[{"id":41827,"name":"errorArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41793,"src":"7702:8:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":41826,"name":"ECDSAInvalidSignatureS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41510,"src":"7679:22:113","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_bytes32_$returns$_t_error_$","typeString":"function (bytes32) pure returns (error)"}},"id":41828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7679:32:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":41829,"nodeType":"RevertStatement","src":"7672:39:113"}]}},"id":41832,"nodeType":"IfStatement","src":"7479:243:113","trueBody":{"id":41821,"nodeType":"Block","src":"7529:78:113","statements":[{"errorCall":{"arguments":[{"arguments":[{"id":41817,"name":"errorArg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41793,"src":"7586:8:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":41816,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7578:7:113","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":41815,"name":"uint256","nodeType":"ElementaryTypeName","src":"7578:7:113","typeDescriptions":{}}},"id":41818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7578:17:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":41814,"name":"ECDSAInvalidSignatureLength","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41505,"src":"7550:27:113","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":41819,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7550:46:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":41820,"nodeType":"RevertStatement","src":"7543:53:113"}]}},"id":41833,"nodeType":"IfStatement","src":"7374:348:113","trueBody":{"id":41809,"nodeType":"Block","src":"7418:55:113","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":41806,"name":"ECDSAInvalidSignature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41500,"src":"7439:21:113","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":41807,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7439:23:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":41808,"nodeType":"RevertStatement","src":"7432:30:113"}]}},"id":41834,"nodeType":"IfStatement","src":"7278:444:113","trueBody":{"id":41801,"nodeType":"Block","src":"7313:55:113","statements":[{"functionReturnParameters":41795,"id":41800,"nodeType":"Return","src":"7327:7:113"}]}}]},"documentation":{"id":41788,"nodeType":"StructuredDocumentation","src":"7069:122:113","text":" @dev Optionally reverts with the corresponding custom error according to the `error` argument provided."},"id":41836,"implemented":true,"kind":"function","modifiers":[],"name":"_throwError","nameLocation":"7205:11:113","nodeType":"FunctionDefinition","parameters":{"id":41794,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41791,"mutability":"mutable","name":"error","nameLocation":"7230:5:113","nodeType":"VariableDeclaration","scope":41836,"src":"7217:18:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"},"typeName":{"id":41790,"nodeType":"UserDefinedTypeName","pathNode":{"id":41789,"name":"RecoverError","nameLocations":["7217:12:113"],"nodeType":"IdentifierPath","referencedDeclaration":41497,"src":"7217:12:113"},"referencedDeclaration":41497,"src":"7217:12:113","typeDescriptions":{"typeIdentifier":"t_enum$_RecoverError_$41497","typeString":"enum ECDSA.RecoverError"}},"visibility":"internal"},{"constant":false,"id":41793,"mutability":"mutable","name":"errorArg","nameLocation":"7245:8:113","nodeType":"VariableDeclaration","scope":41836,"src":"7237:16:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41792,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7237:7:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7216:38:113"},"returnParameters":{"id":41795,"nodeType":"ParameterList","parameters":[],"src":"7268:0:113"},"scope":41837,"src":"7196:532:113","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":41838,"src":"344:7386:113","usedErrors":[41500,41505,41510],"usedEvents":[]}],"src":"112:7619:113"},"id":113},"@openzeppelin/contracts/utils/cryptography/EIP712.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/cryptography/EIP712.sol","exportedSymbols":{"EIP712":[42064],"IERC5267":[39858],"MessageHashUtils":[42138],"ShortString":[40913],"ShortStrings":[41124]},"id":42065,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":41839,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"113:24:114"},{"absolutePath":"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol","file":"./MessageHashUtils.sol","id":41841,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":42065,"sourceUnit":42139,"src":"139:56:114","symbolAliases":[{"foreign":{"id":41840,"name":"MessageHashUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42138,"src":"147:16:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/ShortStrings.sol","file":"../ShortStrings.sol","id":41844,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":42065,"sourceUnit":41125,"src":"196:62:114","symbolAliases":[{"foreign":{"id":41842,"name":"ShortStrings","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41124,"src":"204:12:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":41843,"name":"ShortString","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40913,"src":"218:11:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/interfaces/IERC5267.sol","file":"../../interfaces/IERC5267.sol","id":41846,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":42065,"sourceUnit":39859,"src":"259:55:114","symbolAliases":[{"foreign":{"id":41845,"name":"IERC5267","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39858,"src":"267:8:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":41848,"name":"IERC5267","nameLocations":["1988:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39858,"src":"1988:8:114"},"id":41849,"nodeType":"InheritanceSpecifier","src":"1988:8:114"}],"canonicalName":"EIP712","contractDependencies":[],"contractKind":"contract","documentation":{"id":41847,"nodeType":"StructuredDocumentation","src":"316:1643:114","text":" @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.\n The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose\n encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract\n does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to\n produce the hash of their typed data using a combination of `abi.encode` and `keccak256`.\n This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding\n scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA\n ({_hashTypedDataV4}).\n The implementation of the domain separator was designed to be as efficient as possible while still properly updating\n the chain id to protect against replay attacks on an eventual fork of the chain.\n NOTE: This contract implements the version of the encoding known as \"v4\", as implemented by the JSON RPC method\n https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].\n NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain\n separator of the implementation contract. This will cause the {_domainSeparatorV4} function to always rebuild the\n separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\n @custom:oz-upgrades-unsafe-allow state-variable-immutable"},"fullyImplemented":true,"id":42064,"linearizedBaseContracts":[42064,39858],"name":"EIP712","nameLocation":"1978:6:114","nodeType":"ContractDefinition","nodes":[{"global":false,"id":41851,"libraryName":{"id":41850,"name":"ShortStrings","nameLocations":["2009:12:114"],"nodeType":"IdentifierPath","referencedDeclaration":41124,"src":"2009:12:114"},"nodeType":"UsingForDirective","src":"2003:25:114"},{"constant":true,"id":41856,"mutability":"constant","name":"TYPE_HASH","nameLocation":"2059:9:114","nodeType":"VariableDeclaration","scope":42064,"src":"2034:140:114","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41852,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2034:7:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429","id":41854,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2089:84:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f","typeString":"literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\""},"value":"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f","typeString":"literal_string \"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\""}],"id":41853,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2079:9:114","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":41855,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2079:95:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":41858,"mutability":"immutable","name":"_cachedDomainSeparator","nameLocation":"2399:22:114","nodeType":"VariableDeclaration","scope":42064,"src":"2373:48:114","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41857,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2373:7:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":41860,"mutability":"immutable","name":"_cachedChainId","nameLocation":"2453:14:114","nodeType":"VariableDeclaration","scope":42064,"src":"2427:40:114","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":41859,"name":"uint256","nodeType":"ElementaryTypeName","src":"2427:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":41862,"mutability":"immutable","name":"_cachedThis","nameLocation":"2499:11:114","nodeType":"VariableDeclaration","scope":42064,"src":"2473:37:114","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":41861,"name":"address","nodeType":"ElementaryTypeName","src":"2473:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":false,"id":41864,"mutability":"immutable","name":"_hashedName","nameLocation":"2543:11:114","nodeType":"VariableDeclaration","scope":42064,"src":"2517:37:114","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41863,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2517:7:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":41866,"mutability":"immutable","name":"_hashedVersion","nameLocation":"2586:14:114","nodeType":"VariableDeclaration","scope":42064,"src":"2560:40:114","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41865,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2560:7:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"private"},{"constant":false,"id":41869,"mutability":"immutable","name":"_name","nameLocation":"2637:5:114","nodeType":"VariableDeclaration","scope":42064,"src":"2607:35:114","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"},"typeName":{"id":41868,"nodeType":"UserDefinedTypeName","pathNode":{"id":41867,"name":"ShortString","nameLocations":["2607:11:114"],"nodeType":"IdentifierPath","referencedDeclaration":40913,"src":"2607:11:114"},"referencedDeclaration":40913,"src":"2607:11:114","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}},"visibility":"private"},{"constant":false,"id":41872,"mutability":"immutable","name":"_version","nameLocation":"2678:8:114","nodeType":"VariableDeclaration","scope":42064,"src":"2648:38:114","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"},"typeName":{"id":41871,"nodeType":"UserDefinedTypeName","pathNode":{"id":41870,"name":"ShortString","nameLocations":["2648:11:114"],"nodeType":"IdentifierPath","referencedDeclaration":40913,"src":"2648:11:114"},"referencedDeclaration":40913,"src":"2648:11:114","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}},"visibility":"private"},{"constant":false,"id":41874,"mutability":"mutable","name":"_nameFallback","nameLocation":"2707:13:114","nodeType":"VariableDeclaration","scope":42064,"src":"2692:28:114","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":41873,"name":"string","nodeType":"ElementaryTypeName","src":"2692:6:114","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":41876,"mutability":"mutable","name":"_versionFallback","nameLocation":"2741:16:114","nodeType":"VariableDeclaration","scope":42064,"src":"2726:31:114","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":41875,"name":"string","nodeType":"ElementaryTypeName","src":"2726:6:114","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"body":{"id":41933,"nodeType":"Block","src":"3383:376:114","statements":[{"expression":{"id":41889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":41884,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41869,"src":"3393:5:114","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":41887,"name":"_nameFallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41874,"src":"3432:13:114","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}],"expression":{"id":41885,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41879,"src":"3401:4:114","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"id":41886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3406:25:114","memberName":"toShortStringWithFallback","nodeType":"MemberAccess","referencedDeclaration":41065,"src":"3401:30:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_storage_ptr_$returns$_t_userDefinedValueType$_ShortString_$40913_$attached_to$_t_string_memory_ptr_$","typeString":"function (string memory,string storage pointer) returns (ShortString)"}},"id":41888,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3401:45:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}},"src":"3393:53:114","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}},"id":41890,"nodeType":"ExpressionStatement","src":"3393:53:114"},{"expression":{"id":41896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":41891,"name":"_version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41872,"src":"3456:8:114","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":41894,"name":"_versionFallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41876,"src":"3501:16:114","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}],"expression":{"id":41892,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41881,"src":"3467:7:114","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"id":41893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3475:25:114","memberName":"toShortStringWithFallback","nodeType":"MemberAccess","referencedDeclaration":41065,"src":"3467:33:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_storage_ptr_$returns$_t_userDefinedValueType$_ShortString_$40913_$attached_to$_t_string_memory_ptr_$","typeString":"function (string memory,string storage pointer) returns (ShortString)"}},"id":41895,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3467:51:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}},"src":"3456:62:114","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}},"id":41897,"nodeType":"ExpressionStatement","src":"3456:62:114"},{"expression":{"id":41905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":41898,"name":"_hashedName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41864,"src":"3528:11:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":41902,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41879,"src":"3558:4:114","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":41901,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3552:5:114","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":41900,"name":"bytes","nodeType":"ElementaryTypeName","src":"3552:5:114","typeDescriptions":{}}},"id":41903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3552:11:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":41899,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"3542:9:114","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":41904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3542:22:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3528:36:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":41906,"nodeType":"ExpressionStatement","src":"3528:36:114"},{"expression":{"id":41914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":41907,"name":"_hashedVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41866,"src":"3574:14:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":41911,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41881,"src":"3607:7:114","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":41910,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3601:5:114","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":41909,"name":"bytes","nodeType":"ElementaryTypeName","src":"3601:5:114","typeDescriptions":{}}},"id":41912,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3601:14:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":41908,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"3591:9:114","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":41913,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3591:25:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3574:42:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":41915,"nodeType":"ExpressionStatement","src":"3574:42:114"},{"expression":{"id":41919,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":41916,"name":"_cachedChainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41860,"src":"3627:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":41917,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3644:5:114","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":41918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3650:7:114","memberName":"chainid","nodeType":"MemberAccess","src":"3644:13:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3627:30:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":41920,"nodeType":"ExpressionStatement","src":"3627:30:114"},{"expression":{"id":41924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":41921,"name":"_cachedDomainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41858,"src":"3667:22:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":41922,"name":"_buildDomainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41981,"src":"3692:21:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":41923,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3692:23:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"3667:48:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":41925,"nodeType":"ExpressionStatement","src":"3667:48:114"},{"expression":{"id":41931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":41926,"name":"_cachedThis","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41862,"src":"3725:11:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":41929,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3747:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_EIP712_$42064","typeString":"contract EIP712"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_EIP712_$42064","typeString":"contract EIP712"}],"id":41928,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3739:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":41927,"name":"address","nodeType":"ElementaryTypeName","src":"3739:7:114","typeDescriptions":{}}},"id":41930,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3739:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3725:27:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":41932,"nodeType":"ExpressionStatement","src":"3725:27:114"}]},"documentation":{"id":41877,"nodeType":"StructuredDocumentation","src":"2764:559:114","text":" @dev Initializes the domain separator and parameter caches.\n The meaning of `name` and `version` is specified in\n https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:\n - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.\n - `version`: the current major version of the signing domain.\n NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart\n contract upgrade]."},"id":41934,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":41882,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41879,"mutability":"mutable","name":"name","nameLocation":"3354:4:114","nodeType":"VariableDeclaration","scope":41934,"src":"3340:18:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":41878,"name":"string","nodeType":"ElementaryTypeName","src":"3340:6:114","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":41881,"mutability":"mutable","name":"version","nameLocation":"3374:7:114","nodeType":"VariableDeclaration","scope":41934,"src":"3360:21:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":41880,"name":"string","nodeType":"ElementaryTypeName","src":"3360:6:114","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3339:43:114"},"returnParameters":{"id":41883,"nodeType":"ParameterList","parameters":[],"src":"3383:0:114"},"scope":42064,"src":"3328:431:114","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":41959,"nodeType":"Block","src":"3907:200:114","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":41950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":41945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":41942,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3929:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_EIP712_$42064","typeString":"contract EIP712"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_EIP712_$42064","typeString":"contract EIP712"}],"id":41941,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3921:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":41940,"name":"address","nodeType":"ElementaryTypeName","src":"3921:7:114","typeDescriptions":{}}},"id":41943,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3921:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":41944,"name":"_cachedThis","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41862,"src":"3938:11:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3921:28:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":41949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":41946,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"3953:5:114","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":41947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3959:7:114","memberName":"chainid","nodeType":"MemberAccess","src":"3953:13:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":41948,"name":"_cachedChainId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41860,"src":"3970:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3953:31:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3921:63:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":41957,"nodeType":"Block","src":"4046:55:114","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":41954,"name":"_buildDomainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41981,"src":"4067:21:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":41955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4067:23:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":41939,"id":41956,"nodeType":"Return","src":"4060:30:114"}]},"id":41958,"nodeType":"IfStatement","src":"3917:184:114","trueBody":{"id":41953,"nodeType":"Block","src":"3986:54:114","statements":[{"expression":{"id":41951,"name":"_cachedDomainSeparator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41858,"src":"4007:22:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":41939,"id":41952,"nodeType":"Return","src":"4000:29:114"}]}}]},"documentation":{"id":41935,"nodeType":"StructuredDocumentation","src":"3765:75:114","text":" @dev Returns the domain separator for the current chain."},"id":41960,"implemented":true,"kind":"function","modifiers":[],"name":"_domainSeparatorV4","nameLocation":"3854:18:114","nodeType":"FunctionDefinition","parameters":{"id":41936,"nodeType":"ParameterList","parameters":[],"src":"3872:2:114"},"returnParameters":{"id":41939,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41938,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41960,"src":"3898:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41937,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3898:7:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3897:9:114"},"scope":42064,"src":"3845:262:114","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":41980,"nodeType":"Block","src":"4177:115:114","statements":[{"expression":{"arguments":[{"arguments":[{"id":41968,"name":"TYPE_HASH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41856,"src":"4215:9:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":41969,"name":"_hashedName","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41864,"src":"4226:11:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":41970,"name":"_hashedVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41866,"src":"4239:14:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":41971,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"4255:5:114","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":41972,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4261:7:114","memberName":"chainid","nodeType":"MemberAccess","src":"4255:13:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":41975,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4278:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_EIP712_$42064","typeString":"contract EIP712"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_EIP712_$42064","typeString":"contract EIP712"}],"id":41974,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4270:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":41973,"name":"address","nodeType":"ElementaryTypeName","src":"4270:7:114","typeDescriptions":{}}},"id":41976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4270:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":41966,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4204:3:114","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":41967,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4208:6:114","memberName":"encode","nodeType":"MemberAccess","src":"4204:10:114","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":41977,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4204:80:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":41965,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"4194:9:114","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":41978,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4194:91:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":41964,"id":41979,"nodeType":"Return","src":"4187:98:114"}]},"id":41981,"implemented":true,"kind":"function","modifiers":[],"name":"_buildDomainSeparator","nameLocation":"4122:21:114","nodeType":"FunctionDefinition","parameters":{"id":41961,"nodeType":"ParameterList","parameters":[],"src":"4143:2:114"},"returnParameters":{"id":41964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41963,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41981,"src":"4168:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41962,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4168:7:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4167:9:114"},"scope":42064,"src":"4113:179:114","stateMutability":"view","virtual":false,"visibility":"private"},{"body":{"id":41996,"nodeType":"Block","src":"5003:90:114","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":41991,"name":"_domainSeparatorV4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41960,"src":"5053:18:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bytes32_$","typeString":"function () view returns (bytes32)"}},"id":41992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5053:20:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":41993,"name":"structHash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41984,"src":"5075:10:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"expression":{"id":41989,"name":"MessageHashUtils","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42138,"src":"5020:16:114","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_MessageHashUtils_$42138_$","typeString":"type(library MessageHashUtils)"}},"id":41990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5037:15:114","memberName":"toTypedDataHash","nodeType":"MemberAccess","referencedDeclaration":42137,"src":"5020:32:114","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes32_$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32,bytes32) pure returns (bytes32)"}},"id":41994,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5020:66:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":41988,"id":41995,"nodeType":"Return","src":"5013:73:114"}]},"documentation":{"id":41982,"nodeType":"StructuredDocumentation","src":"4298:614:114","text":" @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this\n function returns the hash of the fully encoded EIP712 message for this domain.\n This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:\n ```solidity\n bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(\n keccak256(\"Mail(address to,string contents)\"),\n mailTo,\n keccak256(bytes(mailContents))\n )));\n address signer = ECDSA.recover(digest, signature);\n ```"},"id":41997,"implemented":true,"kind":"function","modifiers":[],"name":"_hashTypedDataV4","nameLocation":"4926:16:114","nodeType":"FunctionDefinition","parameters":{"id":41985,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41984,"mutability":"mutable","name":"structHash","nameLocation":"4951:10:114","nodeType":"VariableDeclaration","scope":41997,"src":"4943:18:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41983,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4943:7:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4942:20:114"},"returnParameters":{"id":41988,"nodeType":"ParameterList","parameters":[{"constant":false,"id":41987,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":41997,"src":"4994:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":41986,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4994:7:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4993:9:114"},"scope":42064,"src":"4917:176:114","stateMutability":"view","virtual":true,"visibility":"internal"},{"baseFunctions":[39857],"body":{"id":42038,"nodeType":"Block","src":"5472:229:114","statements":[{"expression":{"components":[{"hexValue":"0f","id":42016,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"5503:7:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_3d725c5ee53025f027da36bea8d3af3b6a3e9d2d1542d47c162631de48e66c1c","typeString":"literal_string hex\"0f\""},"value":"\u000f"},{"arguments":[],"expression":{"argumentTypes":[],"id":42017,"name":"_EIP712Name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42051,"src":"5533:11:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view returns (string memory)"}},"id":42018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5533:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"arguments":[],"expression":{"argumentTypes":[],"id":42019,"name":"_EIP712Version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42063,"src":"5560:14:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view returns (string memory)"}},"id":42020,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5560:16:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"expression":{"id":42021,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"5590:5:114","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":42022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5596:7:114","memberName":"chainid","nodeType":"MemberAccess","src":"5590:13:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":42025,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5625:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_EIP712_$42064","typeString":"contract EIP712"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_EIP712_$42064","typeString":"contract EIP712"}],"id":42024,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5617:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":42023,"name":"address","nodeType":"ElementaryTypeName","src":"5617:7:114","typeDescriptions":{}}},"id":42026,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5617:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"hexValue":"30","id":42029,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5652:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":42028,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5644:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes32_$","typeString":"type(bytes32)"},"typeName":{"id":42027,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5644:7:114","typeDescriptions":{}}},"id":42030,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5644:10:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"hexValue":"30","id":42034,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5682:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":42033,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"5668:13:114","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":42031,"name":"uint256","nodeType":"ElementaryTypeName","src":"5672:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42032,"nodeType":"ArrayTypeName","src":"5672:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":42035,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5668:16:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"id":42036,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5489:205:114","typeDescriptions":{"typeIdentifier":"t_tuple$_t_stringliteral_3d725c5ee53025f027da36bea8d3af3b6a3e9d2d1542d47c162631de48e66c1c_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_uint256_$_t_address_$_t_bytes32_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(literal_string hex\"0f\",string memory,string memory,uint256,address,bytes32,uint256[] memory)"}},"functionReturnParameters":42015,"id":42037,"nodeType":"Return","src":"5482:212:114"}]},"documentation":{"id":41998,"nodeType":"StructuredDocumentation","src":"5099:40:114","text":" @dev See {IERC-5267}."},"functionSelector":"84b0196e","id":42039,"implemented":true,"kind":"function","modifiers":[],"name":"eip712Domain","nameLocation":"5153:12:114","nodeType":"FunctionDefinition","parameters":{"id":41999,"nodeType":"ParameterList","parameters":[],"src":"5165:2:114"},"returnParameters":{"id":42015,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42001,"mutability":"mutable","name":"fields","nameLocation":"5249:6:114","nodeType":"VariableDeclaration","scope":42039,"src":"5242:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"},"typeName":{"id":42000,"name":"bytes1","nodeType":"ElementaryTypeName","src":"5242:6:114","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"visibility":"internal"},{"constant":false,"id":42003,"mutability":"mutable","name":"name","nameLocation":"5283:4:114","nodeType":"VariableDeclaration","scope":42039,"src":"5269:18:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":42002,"name":"string","nodeType":"ElementaryTypeName","src":"5269:6:114","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":42005,"mutability":"mutable","name":"version","nameLocation":"5315:7:114","nodeType":"VariableDeclaration","scope":42039,"src":"5301:21:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":42004,"name":"string","nodeType":"ElementaryTypeName","src":"5301:6:114","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":42007,"mutability":"mutable","name":"chainId","nameLocation":"5344:7:114","nodeType":"VariableDeclaration","scope":42039,"src":"5336:15:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42006,"name":"uint256","nodeType":"ElementaryTypeName","src":"5336:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":42009,"mutability":"mutable","name":"verifyingContract","nameLocation":"5373:17:114","nodeType":"VariableDeclaration","scope":42039,"src":"5365:25:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42008,"name":"address","nodeType":"ElementaryTypeName","src":"5365:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42011,"mutability":"mutable","name":"salt","nameLocation":"5412:4:114","nodeType":"VariableDeclaration","scope":42039,"src":"5404:12:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":42010,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5404:7:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":42014,"mutability":"mutable","name":"extensions","nameLocation":"5447:10:114","nodeType":"VariableDeclaration","scope":42039,"src":"5430:27:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":42012,"name":"uint256","nodeType":"ElementaryTypeName","src":"5430:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42013,"nodeType":"ArrayTypeName","src":"5430:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"5228:239:114"},"scope":42064,"src":"5144:557:114","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":42050,"nodeType":"Block","src":"6082:65:114","statements":[{"expression":{"arguments":[{"id":42047,"name":"_nameFallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41874,"src":"6126:13:114","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}],"expression":{"id":42045,"name":"_name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41869,"src":"6099:5:114","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}},"id":42046,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6105:20:114","memberName":"toStringWithFallback","nodeType":"MemberAccess","referencedDeclaration":41092,"src":"6099:26:114","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_ShortString_$40913_$_t_string_storage_ptr_$returns$_t_string_memory_ptr_$attached_to$_t_userDefinedValueType$_ShortString_$40913_$","typeString":"function (ShortString,string storage pointer) pure returns (string memory)"}},"id":42048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6099:41:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":42044,"id":42049,"nodeType":"Return","src":"6092:48:114"}]},"documentation":{"id":42040,"nodeType":"StructuredDocumentation","src":"5707:256:114","text":" @dev The name parameter for the EIP712 domain.\n NOTE: By default this function reads _name which is an immutable value.\n It only reads from storage if necessary (in case the value is too large to fit in a ShortString)."},"id":42051,"implemented":true,"kind":"function","modifiers":[],"name":"_EIP712Name","nameLocation":"6030:11:114","nodeType":"FunctionDefinition","parameters":{"id":42041,"nodeType":"ParameterList","parameters":[],"src":"6041:2:114"},"returnParameters":{"id":42044,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42043,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42051,"src":"6067:13:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":42042,"name":"string","nodeType":"ElementaryTypeName","src":"6067:6:114","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6066:15:114"},"scope":42064,"src":"6021:126:114","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":42062,"nodeType":"Block","src":"6537:71:114","statements":[{"expression":{"arguments":[{"id":42059,"name":"_versionFallback","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41876,"src":"6584:16:114","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}],"expression":{"id":42057,"name":"_version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41872,"src":"6554:8:114","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ShortString_$40913","typeString":"ShortString"}},"id":42058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6563:20:114","memberName":"toStringWithFallback","nodeType":"MemberAccess","referencedDeclaration":41092,"src":"6554:29:114","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_ShortString_$40913_$_t_string_storage_ptr_$returns$_t_string_memory_ptr_$attached_to$_t_userDefinedValueType$_ShortString_$40913_$","typeString":"function (ShortString,string storage pointer) pure returns (string memory)"}},"id":42060,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6554:47:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":42056,"id":42061,"nodeType":"Return","src":"6547:54:114"}]},"documentation":{"id":42052,"nodeType":"StructuredDocumentation","src":"6153:262:114","text":" @dev The version parameter for the EIP712 domain.\n NOTE: By default this function reads _version which is an immutable value.\n It only reads from storage if necessary (in case the value is too large to fit in a ShortString)."},"id":42063,"implemented":true,"kind":"function","modifiers":[],"name":"_EIP712Version","nameLocation":"6482:14:114","nodeType":"FunctionDefinition","parameters":{"id":42053,"nodeType":"ParameterList","parameters":[],"src":"6496:2:114"},"returnParameters":{"id":42056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42055,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42063,"src":"6522:13:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":42054,"name":"string","nodeType":"ElementaryTypeName","src":"6522:6:114","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6521:15:114"},"scope":42064,"src":"6473:135:114","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":42065,"src":"1960:4650:114","usedErrors":[40921,40923],"usedEvents":[39838]}],"src":"113:6498:114"},"id":114},"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol","exportedSymbols":{"MessageHashUtils":[42138],"Strings":[41489]},"id":42139,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":42066,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"123:24:115"},{"absolutePath":"@openzeppelin/contracts/utils/Strings.sol","file":"../Strings.sol","id":42068,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":42139,"sourceUnit":41490,"src":"149:39:115","symbolAliases":[{"foreign":{"id":42067,"name":"Strings","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41489,"src":"157:7:115","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"MessageHashUtils","contractDependencies":[],"contractKind":"library","documentation":{"id":42069,"nodeType":"StructuredDocumentation","src":"190:330:115","text":" @dev Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing.\n The library provides methods for generating a hash of a message that conforms to the\n https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712]\n specifications."},"fullyImplemented":true,"id":42138,"linearizedBaseContracts":[42138],"name":"MessageHashUtils","nameLocation":"529:16:115","nodeType":"ContractDefinition","nodes":[{"body":{"id":42078,"nodeType":"Block","src":"1314:368:115","statements":[{"AST":{"nativeSrc":"1376:300:115","nodeType":"YulBlock","src":"1376:300:115","statements":[{"expression":{"arguments":[{"kind":"number","nativeSrc":"1397:4:115","nodeType":"YulLiteral","src":"1397:4:115","type":"","value":"0x00"},{"hexValue":"19457468657265756d205369676e6564204d6573736167653a0a3332","kind":"string","nativeSrc":"1403:34:115","nodeType":"YulLiteral","src":"1403:34:115","type":"","value":"\u0019Ethereum Signed Message:\n32"}],"functionName":{"name":"mstore","nativeSrc":"1390:6:115","nodeType":"YulIdentifier","src":"1390:6:115"},"nativeSrc":"1390:48:115","nodeType":"YulFunctionCall","src":"1390:48:115"},"nativeSrc":"1390:48:115","nodeType":"YulExpressionStatement","src":"1390:48:115"},{"expression":{"arguments":[{"kind":"number","nativeSrc":"1499:4:115","nodeType":"YulLiteral","src":"1499:4:115","type":"","value":"0x1c"},{"name":"messageHash","nativeSrc":"1505:11:115","nodeType":"YulIdentifier","src":"1505:11:115"}],"functionName":{"name":"mstore","nativeSrc":"1492:6:115","nodeType":"YulIdentifier","src":"1492:6:115"},"nativeSrc":"1492:25:115","nodeType":"YulFunctionCall","src":"1492:25:115"},"nativeSrc":"1492:25:115","nodeType":"YulExpressionStatement","src":"1492:25:115"},{"nativeSrc":"1571:31:115","nodeType":"YulAssignment","src":"1571:31:115","value":{"arguments":[{"kind":"number","nativeSrc":"1591:4:115","nodeType":"YulLiteral","src":"1591:4:115","type":"","value":"0x00"},{"kind":"number","nativeSrc":"1597:4:115","nodeType":"YulLiteral","src":"1597:4:115","type":"","value":"0x3c"}],"functionName":{"name":"keccak256","nativeSrc":"1581:9:115","nodeType":"YulIdentifier","src":"1581:9:115"},"nativeSrc":"1581:21:115","nodeType":"YulFunctionCall","src":"1581:21:115"},"variableNames":[{"name":"digest","nativeSrc":"1571:6:115","nodeType":"YulIdentifier","src":"1571:6:115"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":42075,"isOffset":false,"isSlot":false,"src":"1571:6:115","valueSize":1},{"declaration":42072,"isOffset":false,"isSlot":false,"src":"1505:11:115","valueSize":1}],"id":42077,"nodeType":"InlineAssembly","src":"1367:309:115"}]},"documentation":{"id":42070,"nodeType":"StructuredDocumentation","src":"552:665:115","text":" @dev Returns the keccak256 digest of an EIP-191 signed data with version\n `0x45` (`personal_sign` messages).\n The digest is calculated by prefixing a bytes32 `messageHash` with\n `\"\\x19Ethereum Signed Message:\\n32\"` and hashing the result. It corresponds with the\n hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\n NOTE: The `messageHash` parameter is intended to be the result of hashing a raw message with\n keccak256, although any bytes32 value can be safely used because the final digest will\n be re-hashed.\n See {ECDSA-recover}."},"id":42079,"implemented":true,"kind":"function","modifiers":[],"name":"toEthSignedMessageHash","nameLocation":"1231:22:115","nodeType":"FunctionDefinition","parameters":{"id":42073,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42072,"mutability":"mutable","name":"messageHash","nameLocation":"1262:11:115","nodeType":"VariableDeclaration","scope":42079,"src":"1254:19:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":42071,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1254:7:115","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1253:21:115"},"returnParameters":{"id":42076,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42075,"mutability":"mutable","name":"digest","nameLocation":"1306:6:115","nodeType":"VariableDeclaration","scope":42079,"src":"1298:14:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":42074,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1298:7:115","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1297:16:115"},"scope":42138,"src":"1222:460:115","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":42104,"nodeType":"Block","src":"2234:143:115","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"19457468657265756d205369676e6564204d6573736167653a0a","id":42091,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2286:32:115","typeDescriptions":{"typeIdentifier":"t_stringliteral_9af2d9c228f6cfddaa6d1e5b94e0bce4ab16bd9a472a2b7fbfd74ebff4c720b4","typeString":"literal_string hex\"19457468657265756d205369676e6564204d6573736167653a0a\""},"value":"\u0019Ethereum Signed Message:\n"},{"arguments":[{"arguments":[{"expression":{"id":42096,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42082,"src":"2343:7:115","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":42097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2351:6:115","memberName":"length","nodeType":"MemberAccess","src":"2343:14:115","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":42094,"name":"Strings","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":41489,"src":"2326:7:115","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Strings_$41489_$","typeString":"type(library Strings)"}},"id":42095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2334:8:115","memberName":"toString","nodeType":"MemberAccess","referencedDeclaration":41302,"src":"2326:16:115","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256) pure returns (string memory)"}},"id":42098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2326:32:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":42093,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2320:5:115","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":42092,"name":"bytes","nodeType":"ElementaryTypeName","src":"2320:5:115","typeDescriptions":{}}},"id":42099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2320:39:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":42100,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42082,"src":"2361:7:115","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_9af2d9c228f6cfddaa6d1e5b94e0bce4ab16bd9a472a2b7fbfd74ebff4c720b4","typeString":"literal_string hex\"19457468657265756d205369676e6564204d6573736167653a0a\""},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":42089,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2273:5:115","typeDescriptions":{"typeIdentifier":"t_type$_t_bytes_storage_ptr_$","typeString":"type(bytes storage pointer)"},"typeName":{"id":42088,"name":"bytes","nodeType":"ElementaryTypeName","src":"2273:5:115","typeDescriptions":{}}},"id":42090,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2279:6:115","memberName":"concat","nodeType":"MemberAccess","src":"2273:12:115","typeDescriptions":{"typeIdentifier":"t_function_bytesconcat_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":42101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2273:96:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":42087,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2263:9:115","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":42102,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2263:107:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":42086,"id":42103,"nodeType":"Return","src":"2244:126:115"}]},"documentation":{"id":42080,"nodeType":"StructuredDocumentation","src":"1688:455:115","text":" @dev Returns the keccak256 digest of an EIP-191 signed data with version\n `0x45` (`personal_sign` messages).\n The digest is calculated by prefixing an arbitrary `message` with\n `\"\\x19Ethereum Signed Message:\\n\" + len(message)` and hashing the result. It corresponds with the\n hash signed when using the https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] JSON-RPC method.\n See {ECDSA-recover}."},"id":42105,"implemented":true,"kind":"function","modifiers":[],"name":"toEthSignedMessageHash","nameLocation":"2157:22:115","nodeType":"FunctionDefinition","parameters":{"id":42083,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42082,"mutability":"mutable","name":"message","nameLocation":"2193:7:115","nodeType":"VariableDeclaration","scope":42105,"src":"2180:20:115","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42081,"name":"bytes","nodeType":"ElementaryTypeName","src":"2180:5:115","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2179:22:115"},"returnParameters":{"id":42086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42085,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42105,"src":"2225:7:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":42084,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2225:7:115","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2224:9:115"},"scope":42138,"src":"2148:229:115","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":42124,"nodeType":"Block","src":"2831:80:115","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"1900","id":42118,"isConstant":false,"isLValue":false,"isPure":true,"kind":"hexString","lValueRequested":false,"nodeType":"Literal","src":"2875:10:115","typeDescriptions":{"typeIdentifier":"t_stringliteral_73fd5d154550a4a103564cb191928cd38898034de1b952dc21b290898b4b697a","typeString":"literal_string hex\"1900\""},"value":"\u0019\u0000"},{"id":42119,"name":"validator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42108,"src":"2887:9:115","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":42120,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42110,"src":"2898:4:115","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_73fd5d154550a4a103564cb191928cd38898034de1b952dc21b290898b4b697a","typeString":"literal_string hex\"1900\""},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":42116,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"2858:3:115","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":42117,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2862:12:115","memberName":"encodePacked","nodeType":"MemberAccess","src":"2858:16:115","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":42121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2858:45:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":42115,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"2848:9:115","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":42122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2848:56:115","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":42114,"id":42123,"nodeType":"Return","src":"2841:63:115"}]},"documentation":{"id":42106,"nodeType":"StructuredDocumentation","src":"2383:332:115","text":" @dev Returns the keccak256 digest of an EIP-191 signed data with version\n `0x00` (data with intended validator).\n The digest is calculated by prefixing an arbitrary `data` with `\"\\x19\\x00\"` and the intended\n `validator` address. Then hashing the result.\n See {ECDSA-recover}."},"id":42125,"implemented":true,"kind":"function","modifiers":[],"name":"toDataWithIntendedValidatorHash","nameLocation":"2729:31:115","nodeType":"FunctionDefinition","parameters":{"id":42111,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42108,"mutability":"mutable","name":"validator","nameLocation":"2769:9:115","nodeType":"VariableDeclaration","scope":42125,"src":"2761:17:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42107,"name":"address","nodeType":"ElementaryTypeName","src":"2761:7:115","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":42110,"mutability":"mutable","name":"data","nameLocation":"2793:4:115","nodeType":"VariableDeclaration","scope":42125,"src":"2780:17:115","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":42109,"name":"bytes","nodeType":"ElementaryTypeName","src":"2780:5:115","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"2760:38:115"},"returnParameters":{"id":42114,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42113,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42125,"src":"2822:7:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":42112,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2822:7:115","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2821:9:115"},"scope":42138,"src":"2720:191:115","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":42136,"nodeType":"Block","src":"3462:292:115","statements":[{"AST":{"nativeSrc":"3524:224:115","nodeType":"YulBlock","src":"3524:224:115","statements":[{"nativeSrc":"3538:22:115","nodeType":"YulVariableDeclaration","src":"3538:22:115","value":{"arguments":[{"kind":"number","nativeSrc":"3555:4:115","nodeType":"YulLiteral","src":"3555:4:115","type":"","value":"0x40"}],"functionName":{"name":"mload","nativeSrc":"3549:5:115","nodeType":"YulIdentifier","src":"3549:5:115"},"nativeSrc":"3549:11:115","nodeType":"YulFunctionCall","src":"3549:11:115"},"variables":[{"name":"ptr","nativeSrc":"3542:3:115","nodeType":"YulTypedName","src":"3542:3:115","type":""}]},{"expression":{"arguments":[{"name":"ptr","nativeSrc":"3580:3:115","nodeType":"YulIdentifier","src":"3580:3:115"},{"hexValue":"1901","kind":"string","nativeSrc":"3585:10:115","nodeType":"YulLiteral","src":"3585:10:115","type":"","value":"\u0019\u0001"}],"functionName":{"name":"mstore","nativeSrc":"3573:6:115","nodeType":"YulIdentifier","src":"3573:6:115"},"nativeSrc":"3573:23:115","nodeType":"YulFunctionCall","src":"3573:23:115"},"nativeSrc":"3573:23:115","nodeType":"YulExpressionStatement","src":"3573:23:115"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"3620:3:115","nodeType":"YulIdentifier","src":"3620:3:115"},{"kind":"number","nativeSrc":"3625:4:115","nodeType":"YulLiteral","src":"3625:4:115","type":"","value":"0x02"}],"functionName":{"name":"add","nativeSrc":"3616:3:115","nodeType":"YulIdentifier","src":"3616:3:115"},"nativeSrc":"3616:14:115","nodeType":"YulFunctionCall","src":"3616:14:115"},{"name":"domainSeparator","nativeSrc":"3632:15:115","nodeType":"YulIdentifier","src":"3632:15:115"}],"functionName":{"name":"mstore","nativeSrc":"3609:6:115","nodeType":"YulIdentifier","src":"3609:6:115"},"nativeSrc":"3609:39:115","nodeType":"YulFunctionCall","src":"3609:39:115"},"nativeSrc":"3609:39:115","nodeType":"YulExpressionStatement","src":"3609:39:115"},{"expression":{"arguments":[{"arguments":[{"name":"ptr","nativeSrc":"3672:3:115","nodeType":"YulIdentifier","src":"3672:3:115"},{"kind":"number","nativeSrc":"3677:4:115","nodeType":"YulLiteral","src":"3677:4:115","type":"","value":"0x22"}],"functionName":{"name":"add","nativeSrc":"3668:3:115","nodeType":"YulIdentifier","src":"3668:3:115"},"nativeSrc":"3668:14:115","nodeType":"YulFunctionCall","src":"3668:14:115"},{"name":"structHash","nativeSrc":"3684:10:115","nodeType":"YulIdentifier","src":"3684:10:115"}],"functionName":{"name":"mstore","nativeSrc":"3661:6:115","nodeType":"YulIdentifier","src":"3661:6:115"},"nativeSrc":"3661:34:115","nodeType":"YulFunctionCall","src":"3661:34:115"},"nativeSrc":"3661:34:115","nodeType":"YulExpressionStatement","src":"3661:34:115"},{"nativeSrc":"3708:30:115","nodeType":"YulAssignment","src":"3708:30:115","value":{"arguments":[{"name":"ptr","nativeSrc":"3728:3:115","nodeType":"YulIdentifier","src":"3728:3:115"},{"kind":"number","nativeSrc":"3733:4:115","nodeType":"YulLiteral","src":"3733:4:115","type":"","value":"0x42"}],"functionName":{"name":"keccak256","nativeSrc":"3718:9:115","nodeType":"YulIdentifier","src":"3718:9:115"},"nativeSrc":"3718:20:115","nodeType":"YulFunctionCall","src":"3718:20:115"},"variableNames":[{"name":"digest","nativeSrc":"3708:6:115","nodeType":"YulIdentifier","src":"3708:6:115"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"cancun","externalReferences":[{"declaration":42133,"isOffset":false,"isSlot":false,"src":"3708:6:115","valueSize":1},{"declaration":42128,"isOffset":false,"isSlot":false,"src":"3632:15:115","valueSize":1},{"declaration":42130,"isOffset":false,"isSlot":false,"src":"3684:10:115","valueSize":1}],"id":42135,"nodeType":"InlineAssembly","src":"3515:233:115"}]},"documentation":{"id":42126,"nodeType":"StructuredDocumentation","src":"2917:431:115","text":" @dev Returns the keccak256 digest of an EIP-712 typed data (EIP-191 version `0x01`).\n The digest is calculated from a `domainSeparator` and a `structHash`, by prefixing them with\n `\\x19\\x01` and hashing the result. It corresponds to the hash signed by the\n https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] JSON-RPC method as part of EIP-712.\n See {ECDSA-recover}."},"id":42137,"implemented":true,"kind":"function","modifiers":[],"name":"toTypedDataHash","nameLocation":"3362:15:115","nodeType":"FunctionDefinition","parameters":{"id":42131,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42128,"mutability":"mutable","name":"domainSeparator","nameLocation":"3386:15:115","nodeType":"VariableDeclaration","scope":42137,"src":"3378:23:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":42127,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3378:7:115","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":42130,"mutability":"mutable","name":"structHash","nameLocation":"3411:10:115","nodeType":"VariableDeclaration","scope":42137,"src":"3403:18:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":42129,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3403:7:115","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3377:45:115"},"returnParameters":{"id":42134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42133,"mutability":"mutable","name":"digest","nameLocation":"3454:6:115","nodeType":"VariableDeclaration","scope":42137,"src":"3446:14:115","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":42132,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3446:7:115","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3445:16:115"},"scope":42138,"src":"3353:401:115","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":42139,"src":"521:3235:115","usedErrors":[],"usedEvents":[]}],"src":"123:3634:115"},"id":115},"@openzeppelin/contracts/utils/introspection/ERC165.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/introspection/ERC165.sol","exportedSymbols":{"ERC165":[42162],"IERC165":[42174]},"id":42163,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":42140,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"114:24:116"},{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","file":"./IERC165.sol","id":42142,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":42163,"sourceUnit":42175,"src":"140:38:116","symbolAliases":[{"foreign":{"id":42141,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42174,"src":"148:7:116","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":42144,"name":"IERC165","nameLocations":["687:7:116"],"nodeType":"IdentifierPath","referencedDeclaration":42174,"src":"687:7:116"},"id":42145,"nodeType":"InheritanceSpecifier","src":"687:7:116"}],"canonicalName":"ERC165","contractDependencies":[],"contractKind":"contract","documentation":{"id":42143,"nodeType":"StructuredDocumentation","src":"180:478:116","text":" @dev Implementation of the {IERC165} interface.\n Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n for the additional interface id that will be supported. For example:\n ```solidity\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n }\n ```"},"fullyImplemented":true,"id":42162,"linearizedBaseContracts":[42162,42174],"name":"ERC165","nameLocation":"677:6:116","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[42173],"body":{"id":42160,"nodeType":"Block","src":"844:64:116","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":42158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42153,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42148,"src":"861:11:116","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":42155,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42174,"src":"881:7:116","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC165_$42174_$","typeString":"type(contract IERC165)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IERC165_$42174_$","typeString":"type(contract IERC165)"}],"id":42154,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"876:4:116","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":42156,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"876:13:116","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IERC165_$42174","typeString":"type(contract IERC165)"}},"id":42157,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"890:11:116","memberName":"interfaceId","nodeType":"MemberAccess","src":"876:25:116","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"861:40:116","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":42152,"id":42159,"nodeType":"Return","src":"854:47:116"}]},"documentation":{"id":42146,"nodeType":"StructuredDocumentation","src":"701:56:116","text":" @dev See {IERC165-supportsInterface}."},"functionSelector":"01ffc9a7","id":42161,"implemented":true,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"771:17:116","nodeType":"FunctionDefinition","parameters":{"id":42149,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42148,"mutability":"mutable","name":"interfaceId","nameLocation":"796:11:116","nodeType":"VariableDeclaration","scope":42161,"src":"789:18:116","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":42147,"name":"bytes4","nodeType":"ElementaryTypeName","src":"789:6:116","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"788:20:116"},"returnParameters":{"id":42152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42151,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42161,"src":"838:4:116","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":42150,"name":"bool","nodeType":"ElementaryTypeName","src":"838:4:116","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"837:6:116"},"scope":42162,"src":"762:146:116","stateMutability":"view","virtual":true,"visibility":"public"}],"scope":42163,"src":"659:251:116","usedErrors":[],"usedEvents":[]}],"src":"114:797:116"},"id":116},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","exportedSymbols":{"IERC165":[42174]},"id":42175,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":42164,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"115:24:117"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC165","contractDependencies":[],"contractKind":"interface","documentation":{"id":42165,"nodeType":"StructuredDocumentation","src":"141:279:117","text":" @dev Interface of the ERC165 standard, as defined in the\n https://eips.ethereum.org/EIPS/eip-165[EIP].\n Implementers can declare support of contract interfaces, which can then be\n queried by others ({ERC165Checker}).\n For an implementation, see {ERC165}."},"fullyImplemented":false,"id":42174,"linearizedBaseContracts":[42174],"name":"IERC165","nameLocation":"431:7:117","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":42166,"nodeType":"StructuredDocumentation","src":"445:340:117","text":" @dev Returns true if this contract implements the interface defined by\n `interfaceId`. See the corresponding\n https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n to learn more about how these ids are created.\n This function call must use less than 30 000 gas."},"functionSelector":"01ffc9a7","id":42173,"implemented":false,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"799:17:117","nodeType":"FunctionDefinition","parameters":{"id":42169,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42168,"mutability":"mutable","name":"interfaceId","nameLocation":"824:11:117","nodeType":"VariableDeclaration","scope":42173,"src":"817:18:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":42167,"name":"bytes4","nodeType":"ElementaryTypeName","src":"817:6:117","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"816:20:117"},"returnParameters":{"id":42172,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42171,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42173,"src":"860:4:117","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":42170,"name":"bool","nodeType":"ElementaryTypeName","src":"860:4:117","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"859:6:117"},"scope":42174,"src":"790:76:117","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":42175,"src":"421:447:117","usedErrors":[],"usedEvents":[]}],"src":"115:754:117"},"id":117},"@openzeppelin/contracts/utils/math/Math.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/math/Math.sol","exportedSymbols":{"Math":[43228]},"id":43229,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":42176,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"103:24:118"},{"abstract":false,"baseContracts":[],"canonicalName":"Math","contractDependencies":[],"contractKind":"library","documentation":{"id":42177,"nodeType":"StructuredDocumentation","src":"129:73:118","text":" @dev Standard math utilities missing in the Solidity language."},"fullyImplemented":true,"id":43228,"linearizedBaseContracts":[43228],"name":"Math","nameLocation":"211:4:118","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":42178,"nodeType":"StructuredDocumentation","src":"222:50:118","text":" @dev Muldiv operation overflow."},"errorSelector":"227bc153","id":42180,"name":"MathOverflowedMulDiv","nameLocation":"283:20:118","nodeType":"ErrorDefinition","parameters":{"id":42179,"nodeType":"ParameterList","parameters":[],"src":"303:2:118"},"src":"277:29:118"},{"canonicalName":"Math.Rounding","id":42185,"members":[{"id":42181,"name":"Floor","nameLocation":"336:5:118","nodeType":"EnumValue","src":"336:5:118"},{"id":42182,"name":"Ceil","nameLocation":"379:4:118","nodeType":"EnumValue","src":"379:4:118"},{"id":42183,"name":"Trunc","nameLocation":"421:5:118","nodeType":"EnumValue","src":"421:5:118"},{"id":42184,"name":"Expand","nameLocation":"451:6:118","nodeType":"EnumValue","src":"451:6:118"}],"name":"Rounding","nameLocation":"317:8:118","nodeType":"EnumDefinition","src":"312:169:118"},{"body":{"id":42216,"nodeType":"Block","src":"661:140:118","statements":[{"id":42215,"nodeType":"UncheckedBlock","src":"671:124:118","statements":[{"assignments":[42198],"declarations":[{"constant":false,"id":42198,"mutability":"mutable","name":"c","nameLocation":"703:1:118","nodeType":"VariableDeclaration","scope":42215,"src":"695:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42197,"name":"uint256","nodeType":"ElementaryTypeName","src":"695:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":42202,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42201,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42199,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42188,"src":"707:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":42200,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42190,"src":"711:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"707:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"695:17:118"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42205,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42203,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42198,"src":"730:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":42204,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42188,"src":"734:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"730:5:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":42210,"nodeType":"IfStatement","src":"726:28:118","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":42206,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"745:5:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":42207,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"752:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":42208,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"744:10:118","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":42196,"id":42209,"nodeType":"Return","src":"737:17:118"}},{"expression":{"components":[{"hexValue":"74727565","id":42211,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"776:4:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":42212,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42198,"src":"782:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":42213,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"775:9:118","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":42196,"id":42214,"nodeType":"Return","src":"768:16:118"}]}]},"documentation":{"id":42186,"nodeType":"StructuredDocumentation","src":"487:93:118","text":" @dev Returns the addition of two unsigned integers, with an overflow flag."},"id":42217,"implemented":true,"kind":"function","modifiers":[],"name":"tryAdd","nameLocation":"594:6:118","nodeType":"FunctionDefinition","parameters":{"id":42191,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42188,"mutability":"mutable","name":"a","nameLocation":"609:1:118","nodeType":"VariableDeclaration","scope":42217,"src":"601:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42187,"name":"uint256","nodeType":"ElementaryTypeName","src":"601:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":42190,"mutability":"mutable","name":"b","nameLocation":"620:1:118","nodeType":"VariableDeclaration","scope":42217,"src":"612:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42189,"name":"uint256","nodeType":"ElementaryTypeName","src":"612:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"600:22:118"},"returnParameters":{"id":42196,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42193,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42217,"src":"646:4:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":42192,"name":"bool","nodeType":"ElementaryTypeName","src":"646:4:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":42195,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42217,"src":"652:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42194,"name":"uint256","nodeType":"ElementaryTypeName","src":"652:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"645:15:118"},"scope":43228,"src":"585:216:118","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":42244,"nodeType":"Block","src":"984:113:118","statements":[{"id":42243,"nodeType":"UncheckedBlock","src":"994:97:118","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42231,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42229,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42222,"src":"1022:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":42230,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42220,"src":"1026:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1022:5:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":42236,"nodeType":"IfStatement","src":"1018:28:118","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":42232,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1037:5:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":42233,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1044:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":42234,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1036:10:118","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":42228,"id":42235,"nodeType":"Return","src":"1029:17:118"}},{"expression":{"components":[{"hexValue":"74727565","id":42237,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1068:4:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42238,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42220,"src":"1074:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":42239,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42222,"src":"1078:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1074:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":42241,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1067:13:118","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":42228,"id":42242,"nodeType":"Return","src":"1060:20:118"}]}]},"documentation":{"id":42218,"nodeType":"StructuredDocumentation","src":"807:96:118","text":" @dev Returns the subtraction of two unsigned integers, with an overflow flag."},"id":42245,"implemented":true,"kind":"function","modifiers":[],"name":"trySub","nameLocation":"917:6:118","nodeType":"FunctionDefinition","parameters":{"id":42223,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42220,"mutability":"mutable","name":"a","nameLocation":"932:1:118","nodeType":"VariableDeclaration","scope":42245,"src":"924:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42219,"name":"uint256","nodeType":"ElementaryTypeName","src":"924:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":42222,"mutability":"mutable","name":"b","nameLocation":"943:1:118","nodeType":"VariableDeclaration","scope":42245,"src":"935:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42221,"name":"uint256","nodeType":"ElementaryTypeName","src":"935:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"923:22:118"},"returnParameters":{"id":42228,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42225,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42245,"src":"969:4:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":42224,"name":"bool","nodeType":"ElementaryTypeName","src":"969:4:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":42227,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42245,"src":"975:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42226,"name":"uint256","nodeType":"ElementaryTypeName","src":"975:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"968:15:118"},"scope":43228,"src":"908:189:118","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":42286,"nodeType":"Block","src":"1283:417:118","statements":[{"id":42285,"nodeType":"UncheckedBlock","src":"1293:401:118","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42257,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42248,"src":"1551:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":42258,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1556:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1551:6:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":42264,"nodeType":"IfStatement","src":"1547:28:118","trueBody":{"expression":{"components":[{"hexValue":"74727565","id":42260,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1567:4:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"hexValue":"30","id":42261,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1573:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":42262,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1566:9:118","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":42256,"id":42263,"nodeType":"Return","src":"1559:16:118"}},{"assignments":[42266],"declarations":[{"constant":false,"id":42266,"mutability":"mutable","name":"c","nameLocation":"1597:1:118","nodeType":"VariableDeclaration","scope":42285,"src":"1589:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42265,"name":"uint256","nodeType":"ElementaryTypeName","src":"1589:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":42270,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42267,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42248,"src":"1601:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":42268,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42250,"src":"1605:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1601:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1589:17:118"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42273,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42271,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42266,"src":"1624:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":42272,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42248,"src":"1628:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1624:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":42274,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42250,"src":"1633:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1624:10:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":42280,"nodeType":"IfStatement","src":"1620:33:118","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":42276,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1644:5:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":42277,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1651:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":42278,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1643:10:118","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":42256,"id":42279,"nodeType":"Return","src":"1636:17:118"}},{"expression":{"components":[{"hexValue":"74727565","id":42281,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1675:4:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"id":42282,"name":"c","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42266,"src":"1681:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":42283,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1674:9:118","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":42256,"id":42284,"nodeType":"Return","src":"1667:16:118"}]}]},"documentation":{"id":42246,"nodeType":"StructuredDocumentation","src":"1103:99:118","text":" @dev Returns the multiplication of two unsigned integers, with an overflow flag."},"id":42287,"implemented":true,"kind":"function","modifiers":[],"name":"tryMul","nameLocation":"1216:6:118","nodeType":"FunctionDefinition","parameters":{"id":42251,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42248,"mutability":"mutable","name":"a","nameLocation":"1231:1:118","nodeType":"VariableDeclaration","scope":42287,"src":"1223:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42247,"name":"uint256","nodeType":"ElementaryTypeName","src":"1223:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":42250,"mutability":"mutable","name":"b","nameLocation":"1242:1:118","nodeType":"VariableDeclaration","scope":42287,"src":"1234:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42249,"name":"uint256","nodeType":"ElementaryTypeName","src":"1234:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1222:22:118"},"returnParameters":{"id":42256,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42253,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42287,"src":"1268:4:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":42252,"name":"bool","nodeType":"ElementaryTypeName","src":"1268:4:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":42255,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42287,"src":"1274:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42254,"name":"uint256","nodeType":"ElementaryTypeName","src":"1274:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1267:15:118"},"scope":43228,"src":"1207:493:118","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":42314,"nodeType":"Block","src":"1887:114:118","statements":[{"id":42313,"nodeType":"UncheckedBlock","src":"1897:98:118","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42299,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42292,"src":"1925:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":42300,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1930:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1925:6:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":42306,"nodeType":"IfStatement","src":"1921:29:118","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":42302,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1941:5:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":42303,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1948:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":42304,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"1940:10:118","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":42298,"id":42305,"nodeType":"Return","src":"1933:17:118"}},{"expression":{"components":[{"hexValue":"74727565","id":42307,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"1972:4:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42308,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42290,"src":"1978:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":42309,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42292,"src":"1982:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1978:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":42311,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1971:13:118","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":42298,"id":42312,"nodeType":"Return","src":"1964:20:118"}]}]},"documentation":{"id":42288,"nodeType":"StructuredDocumentation","src":"1706:100:118","text":" @dev Returns the division of two unsigned integers, with a division by zero flag."},"id":42315,"implemented":true,"kind":"function","modifiers":[],"name":"tryDiv","nameLocation":"1820:6:118","nodeType":"FunctionDefinition","parameters":{"id":42293,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42290,"mutability":"mutable","name":"a","nameLocation":"1835:1:118","nodeType":"VariableDeclaration","scope":42315,"src":"1827:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42289,"name":"uint256","nodeType":"ElementaryTypeName","src":"1827:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":42292,"mutability":"mutable","name":"b","nameLocation":"1846:1:118","nodeType":"VariableDeclaration","scope":42315,"src":"1838:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42291,"name":"uint256","nodeType":"ElementaryTypeName","src":"1838:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1826:22:118"},"returnParameters":{"id":42298,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42295,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42315,"src":"1872:4:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":42294,"name":"bool","nodeType":"ElementaryTypeName","src":"1872:4:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":42297,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42315,"src":"1878:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42296,"name":"uint256","nodeType":"ElementaryTypeName","src":"1878:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1871:15:118"},"scope":43228,"src":"1811:190:118","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":42342,"nodeType":"Block","src":"2198:114:118","statements":[{"id":42341,"nodeType":"UncheckedBlock","src":"2208:98:118","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42327,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42320,"src":"2236:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":42328,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2241:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2236:6:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":42334,"nodeType":"IfStatement","src":"2232:29:118","trueBody":{"expression":{"components":[{"hexValue":"66616c7365","id":42330,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2252:5:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"hexValue":"30","id":42331,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2259:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":42332,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"2251:10:118","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_rational_0_by_1_$","typeString":"tuple(bool,int_const 0)"}},"functionReturnParameters":42326,"id":42333,"nodeType":"Return","src":"2244:17:118"}},{"expression":{"components":[{"hexValue":"74727565","id":42335,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2283:4:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42336,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42318,"src":"2289:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":42337,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42320,"src":"2293:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2289:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":42339,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2282:13:118","typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_uint256_$","typeString":"tuple(bool,uint256)"}},"functionReturnParameters":42326,"id":42340,"nodeType":"Return","src":"2275:20:118"}]}]},"documentation":{"id":42316,"nodeType":"StructuredDocumentation","src":"2007:110:118","text":" @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag."},"id":42343,"implemented":true,"kind":"function","modifiers":[],"name":"tryMod","nameLocation":"2131:6:118","nodeType":"FunctionDefinition","parameters":{"id":42321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42318,"mutability":"mutable","name":"a","nameLocation":"2146:1:118","nodeType":"VariableDeclaration","scope":42343,"src":"2138:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42317,"name":"uint256","nodeType":"ElementaryTypeName","src":"2138:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":42320,"mutability":"mutable","name":"b","nameLocation":"2157:1:118","nodeType":"VariableDeclaration","scope":42343,"src":"2149:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42319,"name":"uint256","nodeType":"ElementaryTypeName","src":"2149:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2137:22:118"},"returnParameters":{"id":42326,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42323,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42343,"src":"2183:4:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":42322,"name":"bool","nodeType":"ElementaryTypeName","src":"2183:4:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":42325,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42343,"src":"2189:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42324,"name":"uint256","nodeType":"ElementaryTypeName","src":"2189:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2182:15:118"},"scope":43228,"src":"2122:190:118","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":42360,"nodeType":"Block","src":"2449:37:118","statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42353,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42346,"src":"2466:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":42354,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42348,"src":"2470:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2466:5:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":42357,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42348,"src":"2478:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42358,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"2466:13:118","trueExpression":{"id":42356,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42346,"src":"2474:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":42352,"id":42359,"nodeType":"Return","src":"2459:20:118"}]},"documentation":{"id":42344,"nodeType":"StructuredDocumentation","src":"2318:59:118","text":" @dev Returns the largest of two numbers."},"id":42361,"implemented":true,"kind":"function","modifiers":[],"name":"max","nameLocation":"2391:3:118","nodeType":"FunctionDefinition","parameters":{"id":42349,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42346,"mutability":"mutable","name":"a","nameLocation":"2403:1:118","nodeType":"VariableDeclaration","scope":42361,"src":"2395:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42345,"name":"uint256","nodeType":"ElementaryTypeName","src":"2395:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":42348,"mutability":"mutable","name":"b","nameLocation":"2414:1:118","nodeType":"VariableDeclaration","scope":42361,"src":"2406:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42347,"name":"uint256","nodeType":"ElementaryTypeName","src":"2406:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2394:22:118"},"returnParameters":{"id":42352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42351,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42361,"src":"2440:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42350,"name":"uint256","nodeType":"ElementaryTypeName","src":"2440:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2439:9:118"},"scope":43228,"src":"2382:104:118","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":42378,"nodeType":"Block","src":"2624:37:118","statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42371,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42364,"src":"2641:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":42372,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42366,"src":"2645:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2641:5:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":42375,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42366,"src":"2653:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"2641:13:118","trueExpression":{"id":42374,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42364,"src":"2649:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":42370,"id":42377,"nodeType":"Return","src":"2634:20:118"}]},"documentation":{"id":42362,"nodeType":"StructuredDocumentation","src":"2492:60:118","text":" @dev Returns the smallest of two numbers."},"id":42379,"implemented":true,"kind":"function","modifiers":[],"name":"min","nameLocation":"2566:3:118","nodeType":"FunctionDefinition","parameters":{"id":42367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42364,"mutability":"mutable","name":"a","nameLocation":"2578:1:118","nodeType":"VariableDeclaration","scope":42379,"src":"2570:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42363,"name":"uint256","nodeType":"ElementaryTypeName","src":"2570:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":42366,"mutability":"mutable","name":"b","nameLocation":"2589:1:118","nodeType":"VariableDeclaration","scope":42379,"src":"2581:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42365,"name":"uint256","nodeType":"ElementaryTypeName","src":"2581:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2569:22:118"},"returnParameters":{"id":42370,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42369,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42379,"src":"2615:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42368,"name":"uint256","nodeType":"ElementaryTypeName","src":"2615:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2614:9:118"},"scope":43228,"src":"2557:104:118","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":42401,"nodeType":"Block","src":"2845:82:118","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42389,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42382,"src":"2900:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":42390,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42384,"src":"2904:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2900:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":42392,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2899:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42398,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42395,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42393,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42382,"src":"2910:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"id":42394,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42384,"src":"2914:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2910:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":42396,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"2909:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":42397,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2919:1:118","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"2909:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2899:21:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":42388,"id":42400,"nodeType":"Return","src":"2892:28:118"}]},"documentation":{"id":42380,"nodeType":"StructuredDocumentation","src":"2667:102:118","text":" @dev Returns the average of two numbers. The result is rounded towards\n zero."},"id":42402,"implemented":true,"kind":"function","modifiers":[],"name":"average","nameLocation":"2783:7:118","nodeType":"FunctionDefinition","parameters":{"id":42385,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42382,"mutability":"mutable","name":"a","nameLocation":"2799:1:118","nodeType":"VariableDeclaration","scope":42402,"src":"2791:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42381,"name":"uint256","nodeType":"ElementaryTypeName","src":"2791:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":42384,"mutability":"mutable","name":"b","nameLocation":"2810:1:118","nodeType":"VariableDeclaration","scope":42402,"src":"2802:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42383,"name":"uint256","nodeType":"ElementaryTypeName","src":"2802:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2790:22:118"},"returnParameters":{"id":42388,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42387,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42402,"src":"2836:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42386,"name":"uint256","nodeType":"ElementaryTypeName","src":"2836:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2835:9:118"},"scope":43228,"src":"2774:153:118","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":42435,"nodeType":"Block","src":"3219:260:118","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42412,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42407,"src":"3233:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":42413,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3238:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3233:6:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":42420,"nodeType":"IfStatement","src":"3229:127:118","trueBody":{"id":42419,"nodeType":"Block","src":"3241:115:118","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42415,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42405,"src":"3340:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":42416,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42407,"src":"3344:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3340:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":42411,"id":42418,"nodeType":"Return","src":"3333:12:118"}]}},{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42421,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42405,"src":"3444:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":42422,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3449:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3444:6:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42430,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42427,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42425,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42405,"src":"3458:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":42426,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3462:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3458:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":42428,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3457:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":42429,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42407,"src":"3467:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3457:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":42431,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3471:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3457:15:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"3444:28:118","trueExpression":{"hexValue":"30","id":42424,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3453:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":42411,"id":42434,"nodeType":"Return","src":"3437:35:118"}]},"documentation":{"id":42403,"nodeType":"StructuredDocumentation","src":"2933:210:118","text":" @dev Returns the ceiling of the division of two numbers.\n This differs from standard division with `/` in that it rounds towards infinity instead\n of rounding towards zero."},"id":42436,"implemented":true,"kind":"function","modifiers":[],"name":"ceilDiv","nameLocation":"3157:7:118","nodeType":"FunctionDefinition","parameters":{"id":42408,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42405,"mutability":"mutable","name":"a","nameLocation":"3173:1:118","nodeType":"VariableDeclaration","scope":42436,"src":"3165:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42404,"name":"uint256","nodeType":"ElementaryTypeName","src":"3165:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":42407,"mutability":"mutable","name":"b","nameLocation":"3184:1:118","nodeType":"VariableDeclaration","scope":42436,"src":"3176:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42406,"name":"uint256","nodeType":"ElementaryTypeName","src":"3176:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3164:22:118"},"returnParameters":{"id":42411,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42410,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42436,"src":"3210:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42409,"name":"uint256","nodeType":"ElementaryTypeName","src":"3210:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3209:9:118"},"scope":43228,"src":"3148:331:118","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":42561,"nodeType":"Block","src":"3901:4018:118","statements":[{"id":42560,"nodeType":"UncheckedBlock","src":"3911:4002:118","statements":[{"assignments":[42449],"declarations":[{"constant":false,"id":42449,"mutability":"mutable","name":"prod0","nameLocation":"4240:5:118","nodeType":"VariableDeclaration","scope":42560,"src":"4232:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42448,"name":"uint256","nodeType":"ElementaryTypeName","src":"4232:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":42453,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42450,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42439,"src":"4248:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":42451,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42441,"src":"4252:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4248:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4232:21:118"},{"assignments":[42455],"declarations":[{"constant":false,"id":42455,"mutability":"mutable","name":"prod1","nameLocation":"4320:5:118","nodeType":"VariableDeclaration","scope":42560,"src":"4312:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42454,"name":"uint256","nodeType":"ElementaryTypeName","src":"4312:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":42456,"nodeType":"VariableDeclarationStatement","src":"4312:13:118"},{"AST":{"nativeSrc":"4392:122:118","nodeType":"YulBlock","src":"4392:122:118","statements":[{"nativeSrc":"4410:30:118","nodeType":"YulVariableDeclaration","src":"4410:30:118","value":{"arguments":[{"name":"x","nativeSrc":"4427:1:118","nodeType":"YulIdentifier","src":"4427:1:118"},{"name":"y","nativeSrc":"4430:1:118","nodeType":"YulIdentifier","src":"4430:1:118"},{"arguments":[{"kind":"number","nativeSrc":"4437:1:118","nodeType":"YulLiteral","src":"4437:1:118","type":"","value":"0"}],"functionName":{"name":"not","nativeSrc":"4433:3:118","nodeType":"YulIdentifier","src":"4433:3:118"},"nativeSrc":"4433:6:118","nodeType":"YulFunctionCall","src":"4433:6:118"}],"functionName":{"name":"mulmod","nativeSrc":"4420:6:118","nodeType":"YulIdentifier","src":"4420:6:118"},"nativeSrc":"4420:20:118","nodeType":"YulFunctionCall","src":"4420:20:118"},"variables":[{"name":"mm","nativeSrc":"4414:2:118","nodeType":"YulTypedName","src":"4414:2:118","type":""}]},{"nativeSrc":"4457:43:118","nodeType":"YulAssignment","src":"4457:43:118","value":{"arguments":[{"arguments":[{"name":"mm","nativeSrc":"4474:2:118","nodeType":"YulIdentifier","src":"4474:2:118"},{"name":"prod0","nativeSrc":"4478:5:118","nodeType":"YulIdentifier","src":"4478:5:118"}],"functionName":{"name":"sub","nativeSrc":"4470:3:118","nodeType":"YulIdentifier","src":"4470:3:118"},"nativeSrc":"4470:14:118","nodeType":"YulFunctionCall","src":"4470:14:118"},{"arguments":[{"name":"mm","nativeSrc":"4489:2:118","nodeType":"YulIdentifier","src":"4489:2:118"},{"name":"prod0","nativeSrc":"4493:5:118","nodeType":"YulIdentifier","src":"4493:5:118"}],"functionName":{"name":"lt","nativeSrc":"4486:2:118","nodeType":"YulIdentifier","src":"4486:2:118"},"nativeSrc":"4486:13:118","nodeType":"YulFunctionCall","src":"4486:13:118"}],"functionName":{"name":"sub","nativeSrc":"4466:3:118","nodeType":"YulIdentifier","src":"4466:3:118"},"nativeSrc":"4466:34:118","nodeType":"YulFunctionCall","src":"4466:34:118"},"variableNames":[{"name":"prod1","nativeSrc":"4457:5:118","nodeType":"YulIdentifier","src":"4457:5:118"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":42449,"isOffset":false,"isSlot":false,"src":"4478:5:118","valueSize":1},{"declaration":42449,"isOffset":false,"isSlot":false,"src":"4493:5:118","valueSize":1},{"declaration":42455,"isOffset":false,"isSlot":false,"src":"4457:5:118","valueSize":1},{"declaration":42439,"isOffset":false,"isSlot":false,"src":"4427:1:118","valueSize":1},{"declaration":42441,"isOffset":false,"isSlot":false,"src":"4430:1:118","valueSize":1}],"id":42457,"nodeType":"InlineAssembly","src":"4383:131:118"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42460,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42458,"name":"prod1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42455,"src":"4595:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":42459,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4604:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4595:10:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":42466,"nodeType":"IfStatement","src":"4591:368:118","trueBody":{"id":42465,"nodeType":"Block","src":"4607:352:118","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42463,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42461,"name":"prod0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42449,"src":"4925:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":42462,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42443,"src":"4933:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4925:19:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":42447,"id":42464,"nodeType":"Return","src":"4918:26:118"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42467,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42443,"src":"5065:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":42468,"name":"prod1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42455,"src":"5080:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5065:20:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":42474,"nodeType":"IfStatement","src":"5061:88:118","trueBody":{"id":42473,"nodeType":"Block","src":"5087:62:118","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":42470,"name":"MathOverflowedMulDiv","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42180,"src":"5112:20:118","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":42471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5112:22:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":42472,"nodeType":"RevertStatement","src":"5105:29:118"}]}},{"assignments":[42476],"declarations":[{"constant":false,"id":42476,"mutability":"mutable","name":"remainder","nameLocation":"5412:9:118","nodeType":"VariableDeclaration","scope":42560,"src":"5404:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42475,"name":"uint256","nodeType":"ElementaryTypeName","src":"5404:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":42477,"nodeType":"VariableDeclarationStatement","src":"5404:17:118"},{"AST":{"nativeSrc":"5444:291:118","nodeType":"YulBlock","src":"5444:291:118","statements":[{"nativeSrc":"5513:38:118","nodeType":"YulAssignment","src":"5513:38:118","value":{"arguments":[{"name":"x","nativeSrc":"5533:1:118","nodeType":"YulIdentifier","src":"5533:1:118"},{"name":"y","nativeSrc":"5536:1:118","nodeType":"YulIdentifier","src":"5536:1:118"},{"name":"denominator","nativeSrc":"5539:11:118","nodeType":"YulIdentifier","src":"5539:11:118"}],"functionName":{"name":"mulmod","nativeSrc":"5526:6:118","nodeType":"YulIdentifier","src":"5526:6:118"},"nativeSrc":"5526:25:118","nodeType":"YulFunctionCall","src":"5526:25:118"},"variableNames":[{"name":"remainder","nativeSrc":"5513:9:118","nodeType":"YulIdentifier","src":"5513:9:118"}]},{"nativeSrc":"5633:41:118","nodeType":"YulAssignment","src":"5633:41:118","value":{"arguments":[{"name":"prod1","nativeSrc":"5646:5:118","nodeType":"YulIdentifier","src":"5646:5:118"},{"arguments":[{"name":"remainder","nativeSrc":"5656:9:118","nodeType":"YulIdentifier","src":"5656:9:118"},{"name":"prod0","nativeSrc":"5667:5:118","nodeType":"YulIdentifier","src":"5667:5:118"}],"functionName":{"name":"gt","nativeSrc":"5653:2:118","nodeType":"YulIdentifier","src":"5653:2:118"},"nativeSrc":"5653:20:118","nodeType":"YulFunctionCall","src":"5653:20:118"}],"functionName":{"name":"sub","nativeSrc":"5642:3:118","nodeType":"YulIdentifier","src":"5642:3:118"},"nativeSrc":"5642:32:118","nodeType":"YulFunctionCall","src":"5642:32:118"},"variableNames":[{"name":"prod1","nativeSrc":"5633:5:118","nodeType":"YulIdentifier","src":"5633:5:118"}]},{"nativeSrc":"5691:30:118","nodeType":"YulAssignment","src":"5691:30:118","value":{"arguments":[{"name":"prod0","nativeSrc":"5704:5:118","nodeType":"YulIdentifier","src":"5704:5:118"},{"name":"remainder","nativeSrc":"5711:9:118","nodeType":"YulIdentifier","src":"5711:9:118"}],"functionName":{"name":"sub","nativeSrc":"5700:3:118","nodeType":"YulIdentifier","src":"5700:3:118"},"nativeSrc":"5700:21:118","nodeType":"YulFunctionCall","src":"5700:21:118"},"variableNames":[{"name":"prod0","nativeSrc":"5691:5:118","nodeType":"YulIdentifier","src":"5691:5:118"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":42443,"isOffset":false,"isSlot":false,"src":"5539:11:118","valueSize":1},{"declaration":42449,"isOffset":false,"isSlot":false,"src":"5667:5:118","valueSize":1},{"declaration":42449,"isOffset":false,"isSlot":false,"src":"5691:5:118","valueSize":1},{"declaration":42449,"isOffset":false,"isSlot":false,"src":"5704:5:118","valueSize":1},{"declaration":42455,"isOffset":false,"isSlot":false,"src":"5633:5:118","valueSize":1},{"declaration":42455,"isOffset":false,"isSlot":false,"src":"5646:5:118","valueSize":1},{"declaration":42476,"isOffset":false,"isSlot":false,"src":"5513:9:118","valueSize":1},{"declaration":42476,"isOffset":false,"isSlot":false,"src":"5656:9:118","valueSize":1},{"declaration":42476,"isOffset":false,"isSlot":false,"src":"5711:9:118","valueSize":1},{"declaration":42439,"isOffset":false,"isSlot":false,"src":"5533:1:118","valueSize":1},{"declaration":42441,"isOffset":false,"isSlot":false,"src":"5536:1:118","valueSize":1}],"id":42478,"nodeType":"InlineAssembly","src":"5435:300:118"},{"assignments":[42480],"declarations":[{"constant":false,"id":42480,"mutability":"mutable","name":"twos","nameLocation":"5947:4:118","nodeType":"VariableDeclaration","scope":42560,"src":"5939:12:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42479,"name":"uint256","nodeType":"ElementaryTypeName","src":"5939:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":42487,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42481,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42443,"src":"5954:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"30","id":42482,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5969:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":42483,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42443,"src":"5973:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5969:15:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":42485,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5968:17:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5954:31:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5939:46:118"},{"AST":{"nativeSrc":"6008:362:118","nodeType":"YulBlock","src":"6008:362:118","statements":[{"nativeSrc":"6073:37:118","nodeType":"YulAssignment","src":"6073:37:118","value":{"arguments":[{"name":"denominator","nativeSrc":"6092:11:118","nodeType":"YulIdentifier","src":"6092:11:118"},{"name":"twos","nativeSrc":"6105:4:118","nodeType":"YulIdentifier","src":"6105:4:118"}],"functionName":{"name":"div","nativeSrc":"6088:3:118","nodeType":"YulIdentifier","src":"6088:3:118"},"nativeSrc":"6088:22:118","nodeType":"YulFunctionCall","src":"6088:22:118"},"variableNames":[{"name":"denominator","nativeSrc":"6073:11:118","nodeType":"YulIdentifier","src":"6073:11:118"}]},{"nativeSrc":"6177:25:118","nodeType":"YulAssignment","src":"6177:25:118","value":{"arguments":[{"name":"prod0","nativeSrc":"6190:5:118","nodeType":"YulIdentifier","src":"6190:5:118"},{"name":"twos","nativeSrc":"6197:4:118","nodeType":"YulIdentifier","src":"6197:4:118"}],"functionName":{"name":"div","nativeSrc":"6186:3:118","nodeType":"YulIdentifier","src":"6186:3:118"},"nativeSrc":"6186:16:118","nodeType":"YulFunctionCall","src":"6186:16:118"},"variableNames":[{"name":"prod0","nativeSrc":"6177:5:118","nodeType":"YulIdentifier","src":"6177:5:118"}]},{"nativeSrc":"6317:39:118","nodeType":"YulAssignment","src":"6317:39:118","value":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nativeSrc":"6337:1:118","nodeType":"YulLiteral","src":"6337:1:118","type":"","value":"0"},{"name":"twos","nativeSrc":"6340:4:118","nodeType":"YulIdentifier","src":"6340:4:118"}],"functionName":{"name":"sub","nativeSrc":"6333:3:118","nodeType":"YulIdentifier","src":"6333:3:118"},"nativeSrc":"6333:12:118","nodeType":"YulFunctionCall","src":"6333:12:118"},{"name":"twos","nativeSrc":"6347:4:118","nodeType":"YulIdentifier","src":"6347:4:118"}],"functionName":{"name":"div","nativeSrc":"6329:3:118","nodeType":"YulIdentifier","src":"6329:3:118"},"nativeSrc":"6329:23:118","nodeType":"YulFunctionCall","src":"6329:23:118"},{"kind":"number","nativeSrc":"6354:1:118","nodeType":"YulLiteral","src":"6354:1:118","type":"","value":"1"}],"functionName":{"name":"add","nativeSrc":"6325:3:118","nodeType":"YulIdentifier","src":"6325:3:118"},"nativeSrc":"6325:31:118","nodeType":"YulFunctionCall","src":"6325:31:118"},"variableNames":[{"name":"twos","nativeSrc":"6317:4:118","nodeType":"YulIdentifier","src":"6317:4:118"}]}]},"evmVersion":"cancun","externalReferences":[{"declaration":42443,"isOffset":false,"isSlot":false,"src":"6073:11:118","valueSize":1},{"declaration":42443,"isOffset":false,"isSlot":false,"src":"6092:11:118","valueSize":1},{"declaration":42449,"isOffset":false,"isSlot":false,"src":"6177:5:118","valueSize":1},{"declaration":42449,"isOffset":false,"isSlot":false,"src":"6190:5:118","valueSize":1},{"declaration":42480,"isOffset":false,"isSlot":false,"src":"6105:4:118","valueSize":1},{"declaration":42480,"isOffset":false,"isSlot":false,"src":"6197:4:118","valueSize":1},{"declaration":42480,"isOffset":false,"isSlot":false,"src":"6317:4:118","valueSize":1},{"declaration":42480,"isOffset":false,"isSlot":false,"src":"6340:4:118","valueSize":1},{"declaration":42480,"isOffset":false,"isSlot":false,"src":"6347:4:118","valueSize":1}],"id":42488,"nodeType":"InlineAssembly","src":"5999:371:118"},{"expression":{"id":42493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42489,"name":"prod0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42449,"src":"6436:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42492,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42490,"name":"prod1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42455,"src":"6445:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":42491,"name":"twos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42480,"src":"6453:4:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6445:12:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6436:21:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42494,"nodeType":"ExpressionStatement","src":"6436:21:118"},{"assignments":[42496],"declarations":[{"constant":false,"id":42496,"mutability":"mutable","name":"inverse","nameLocation":"6783:7:118","nodeType":"VariableDeclaration","scope":42560,"src":"6775:15:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42495,"name":"uint256","nodeType":"ElementaryTypeName","src":"6775:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":42503,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"33","id":42497,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6794:1:118","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":42498,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42443,"src":"6798:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6794:15:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":42500,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6793:17:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"hexValue":"32","id":42501,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6813:1:118","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"6793:21:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6775:39:118"},{"expression":{"id":42510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42504,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42496,"src":"7031:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42509,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":42505,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7042:1:118","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42508,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42506,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42443,"src":"7046:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":42507,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42496,"src":"7060:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7046:21:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7042:25:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7031:36:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42511,"nodeType":"ExpressionStatement","src":"7031:36:118"},{"expression":{"id":42518,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42512,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42496,"src":"7100:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":42513,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7111:1:118","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42516,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42514,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42443,"src":"7115:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":42515,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42496,"src":"7129:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7115:21:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7111:25:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7100:36:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42519,"nodeType":"ExpressionStatement","src":"7100:36:118"},{"expression":{"id":42526,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42520,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42496,"src":"7170:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":42521,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7181:1:118","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42522,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42443,"src":"7185:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":42523,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42496,"src":"7199:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7185:21:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7181:25:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7170:36:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42527,"nodeType":"ExpressionStatement","src":"7170:36:118"},{"expression":{"id":42534,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42528,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42496,"src":"7240:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":42529,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7251:1:118","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42530,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42443,"src":"7255:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":42531,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42496,"src":"7269:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7255:21:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7251:25:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7240:36:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42535,"nodeType":"ExpressionStatement","src":"7240:36:118"},{"expression":{"id":42542,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42536,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42496,"src":"7310:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42541,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":42537,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7321:1:118","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42538,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42443,"src":"7325:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":42539,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42496,"src":"7339:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7325:21:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7321:25:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7310:36:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42543,"nodeType":"ExpressionStatement","src":"7310:36:118"},{"expression":{"id":42550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42544,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42496,"src":"7381:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":42545,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7392:1:118","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42546,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42443,"src":"7396:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":42547,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42496,"src":"7410:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7396:21:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7392:25:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7381:36:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42551,"nodeType":"ExpressionStatement","src":"7381:36:118"},{"expression":{"id":42556,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42552,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42446,"src":"7851:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42553,"name":"prod0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42449,"src":"7860:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":42554,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42496,"src":"7868:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7860:15:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7851:24:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42557,"nodeType":"ExpressionStatement","src":"7851:24:118"},{"expression":{"id":42558,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42446,"src":"7896:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":42447,"id":42559,"nodeType":"Return","src":"7889:13:118"}]}]},"documentation":{"id":42437,"nodeType":"StructuredDocumentation","src":"3485:313:118","text":" @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or\n denominator == 0.\n @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) with further edits by\n Uniswap Labs also under MIT license."},"id":42562,"implemented":true,"kind":"function","modifiers":[],"name":"mulDiv","nameLocation":"3812:6:118","nodeType":"FunctionDefinition","parameters":{"id":42444,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42439,"mutability":"mutable","name":"x","nameLocation":"3827:1:118","nodeType":"VariableDeclaration","scope":42562,"src":"3819:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42438,"name":"uint256","nodeType":"ElementaryTypeName","src":"3819:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":42441,"mutability":"mutable","name":"y","nameLocation":"3838:1:118","nodeType":"VariableDeclaration","scope":42562,"src":"3830:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42440,"name":"uint256","nodeType":"ElementaryTypeName","src":"3830:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":42443,"mutability":"mutable","name":"denominator","nameLocation":"3849:11:118","nodeType":"VariableDeclaration","scope":42562,"src":"3841:19:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42442,"name":"uint256","nodeType":"ElementaryTypeName","src":"3841:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3818:43:118"},"returnParameters":{"id":42447,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42446,"mutability":"mutable","name":"result","nameLocation":"3893:6:118","nodeType":"VariableDeclaration","scope":42562,"src":"3885:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42445,"name":"uint256","nodeType":"ElementaryTypeName","src":"3885:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3884:16:118"},"scope":43228,"src":"3803:4116:118","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":42604,"nodeType":"Block","src":"8161:192:118","statements":[{"assignments":[42578],"declarations":[{"constant":false,"id":42578,"mutability":"mutable","name":"result","nameLocation":"8179:6:118","nodeType":"VariableDeclaration","scope":42604,"src":"8171:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42577,"name":"uint256","nodeType":"ElementaryTypeName","src":"8171:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":42584,"initialValue":{"arguments":[{"id":42580,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42565,"src":"8195:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":42581,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42567,"src":"8198:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":42582,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42569,"src":"8201:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":42579,"name":"mulDiv","nodeType":"Identifier","overloadedDeclarations":[42562,42605],"referencedDeclaration":42562,"src":"8188:6:118","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":42583,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8188:25:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8171:42:118"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":42595,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":42586,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42572,"src":"8244:8:118","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$42185","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$42185","typeString":"enum Math.Rounding"}],"id":42585,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43227,"src":"8227:16:118","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$42185_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":42587,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8227:26:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":42589,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42565,"src":"8264:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":42590,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42567,"src":"8267:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":42591,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42569,"src":"8270:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":42588,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"8257:6:118","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":42592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8257:25:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":42593,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8285:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8257:29:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8227:59:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":42601,"nodeType":"IfStatement","src":"8223:101:118","trueBody":{"id":42600,"nodeType":"Block","src":"8288:36:118","statements":[{"expression":{"id":42598,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42596,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42578,"src":"8302:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":42597,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8312:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8302:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42599,"nodeType":"ExpressionStatement","src":"8302:11:118"}]}},{"expression":{"id":42602,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42578,"src":"8340:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":42576,"id":42603,"nodeType":"Return","src":"8333:13:118"}]},"documentation":{"id":42563,"nodeType":"StructuredDocumentation","src":"7925:121:118","text":" @notice Calculates x * y / denominator with full precision, following the selected rounding direction."},"id":42605,"implemented":true,"kind":"function","modifiers":[],"name":"mulDiv","nameLocation":"8060:6:118","nodeType":"FunctionDefinition","parameters":{"id":42573,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42565,"mutability":"mutable","name":"x","nameLocation":"8075:1:118","nodeType":"VariableDeclaration","scope":42605,"src":"8067:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42564,"name":"uint256","nodeType":"ElementaryTypeName","src":"8067:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":42567,"mutability":"mutable","name":"y","nameLocation":"8086:1:118","nodeType":"VariableDeclaration","scope":42605,"src":"8078:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42566,"name":"uint256","nodeType":"ElementaryTypeName","src":"8078:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":42569,"mutability":"mutable","name":"denominator","nameLocation":"8097:11:118","nodeType":"VariableDeclaration","scope":42605,"src":"8089:19:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42568,"name":"uint256","nodeType":"ElementaryTypeName","src":"8089:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":42572,"mutability":"mutable","name":"rounding","nameLocation":"8119:8:118","nodeType":"VariableDeclaration","scope":42605,"src":"8110:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$42185","typeString":"enum Math.Rounding"},"typeName":{"id":42571,"nodeType":"UserDefinedTypeName","pathNode":{"id":42570,"name":"Rounding","nameLocations":["8110:8:118"],"nodeType":"IdentifierPath","referencedDeclaration":42185,"src":"8110:8:118"},"referencedDeclaration":42185,"src":"8110:8:118","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$42185","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"8066:62:118"},"returnParameters":{"id":42576,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42575,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42605,"src":"8152:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42574,"name":"uint256","nodeType":"ElementaryTypeName","src":"8152:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8151:9:118"},"scope":43228,"src":"8051:302:118","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":42716,"nodeType":"Block","src":"8644:1585:118","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42615,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42613,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42608,"src":"8658:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":42614,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8663:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8658:6:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":42619,"nodeType":"IfStatement","src":"8654:45:118","trueBody":{"id":42618,"nodeType":"Block","src":"8666:33:118","statements":[{"expression":{"hexValue":"30","id":42616,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8687:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":42612,"id":42617,"nodeType":"Return","src":"8680:8:118"}]}},{"assignments":[42621],"declarations":[{"constant":false,"id":42621,"mutability":"mutable","name":"result","nameLocation":"9386:6:118","nodeType":"VariableDeclaration","scope":42716,"src":"9378:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42620,"name":"uint256","nodeType":"ElementaryTypeName","src":"9378:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":42630,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":42622,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9395:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42627,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":42624,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42608,"src":"9406:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":42623,"name":"log2","nodeType":"Identifier","overloadedDeclarations":[42884,42919],"referencedDeclaration":42884,"src":"9401:4:118","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":42625,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9401:7:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":42626,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9412:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9401:12:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":42628,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9400:14:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9395:19:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9378:36:118"},{"id":42715,"nodeType":"UncheckedBlock","src":"9815:408:118","statements":[{"expression":{"id":42640,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42631,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42621,"src":"9839:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42636,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42632,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42621,"src":"9849:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42633,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42608,"src":"9858:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":42634,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42621,"src":"9862:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9858:10:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9849:19:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":42637,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9848:21:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":42638,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9873:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9848:26:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9839:35:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42641,"nodeType":"ExpressionStatement","src":"9839:35:118"},{"expression":{"id":42651,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42642,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42621,"src":"9888:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42650,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42647,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42643,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42621,"src":"9898:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42644,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42608,"src":"9907:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":42645,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42621,"src":"9911:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9907:10:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9898:19:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":42648,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9897:21:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":42649,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9922:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9897:26:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9888:35:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42652,"nodeType":"ExpressionStatement","src":"9888:35:118"},{"expression":{"id":42662,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42653,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42621,"src":"9937:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42654,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42621,"src":"9947:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42655,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42608,"src":"9956:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":42656,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42621,"src":"9960:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9956:10:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9947:19:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":42659,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9946:21:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":42660,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9971:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9946:26:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9937:35:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42663,"nodeType":"ExpressionStatement","src":"9937:35:118"},{"expression":{"id":42673,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42664,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42621,"src":"9986:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42669,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42665,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42621,"src":"9996:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42666,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42608,"src":"10005:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":42667,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42621,"src":"10009:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10005:10:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9996:19:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":42670,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9995:21:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":42671,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10020:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9995:26:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9986:35:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42674,"nodeType":"ExpressionStatement","src":"9986:35:118"},{"expression":{"id":42684,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42675,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42621,"src":"10035:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42680,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42676,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42621,"src":"10045:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42677,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42608,"src":"10054:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":42678,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42621,"src":"10058:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10054:10:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10045:19:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":42681,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10044:21:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":42682,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10069:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10044:26:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10035:35:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42685,"nodeType":"ExpressionStatement","src":"10035:35:118"},{"expression":{"id":42695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42686,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42621,"src":"10084:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42687,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42621,"src":"10094:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42688,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42608,"src":"10103:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":42689,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42621,"src":"10107:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10103:10:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10094:19:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":42692,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10093:21:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":42693,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10118:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10093:26:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10084:35:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42696,"nodeType":"ExpressionStatement","src":"10084:35:118"},{"expression":{"id":42706,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42697,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42621,"src":"10133:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42698,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42621,"src":"10143:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42699,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42608,"src":"10152:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":42700,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42621,"src":"10156:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10152:10:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10143:19:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":42703,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10142:21:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":42704,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10167:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10142:26:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10133:35:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42707,"nodeType":"ExpressionStatement","src":"10133:35:118"},{"expression":{"arguments":[{"id":42709,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42621,"src":"10193:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42710,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42608,"src":"10201:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":42711,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42621,"src":"10205:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10201:10:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":42708,"name":"min","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42379,"src":"10189:3:118","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":42713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10189:23:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":42612,"id":42714,"nodeType":"Return","src":"10182:30:118"}]}]},"documentation":{"id":42606,"nodeType":"StructuredDocumentation","src":"8359:223:118","text":" @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded\n towards zero.\n Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11)."},"id":42717,"implemented":true,"kind":"function","modifiers":[],"name":"sqrt","nameLocation":"8596:4:118","nodeType":"FunctionDefinition","parameters":{"id":42609,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42608,"mutability":"mutable","name":"a","nameLocation":"8609:1:118","nodeType":"VariableDeclaration","scope":42717,"src":"8601:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42607,"name":"uint256","nodeType":"ElementaryTypeName","src":"8601:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8600:11:118"},"returnParameters":{"id":42612,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42611,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42717,"src":"8635:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42610,"name":"uint256","nodeType":"ElementaryTypeName","src":"8635:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8634:9:118"},"scope":43228,"src":"8587:1642:118","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":42751,"nodeType":"Block","src":"10405:164:118","statements":[{"id":42750,"nodeType":"UncheckedBlock","src":"10415:148:118","statements":[{"assignments":[42729],"declarations":[{"constant":false,"id":42729,"mutability":"mutable","name":"result","nameLocation":"10447:6:118","nodeType":"VariableDeclaration","scope":42750,"src":"10439:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42728,"name":"uint256","nodeType":"ElementaryTypeName","src":"10439:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":42733,"initialValue":{"arguments":[{"id":42731,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42720,"src":"10461:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":42730,"name":"sqrt","nodeType":"Identifier","overloadedDeclarations":[42717,42752],"referencedDeclaration":42717,"src":"10456:4:118","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":42732,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10456:7:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10439:24:118"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42734,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42729,"src":"10484:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":42743,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":42736,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42723,"src":"10511:8:118","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$42185","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$42185","typeString":"enum Math.Rounding"}],"id":42735,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43227,"src":"10494:16:118","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$42185_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":42737,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10494:26:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42738,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42729,"src":"10524:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":42739,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42729,"src":"10533:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10524:15:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":42741,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42720,"src":"10542:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10524:19:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"10494:49:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":42745,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10550:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":42746,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"10494:57:118","trueExpression":{"hexValue":"31","id":42744,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10546:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":42747,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10493:59:118","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"10484:68:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":42727,"id":42749,"nodeType":"Return","src":"10477:75:118"}]}]},"documentation":{"id":42718,"nodeType":"StructuredDocumentation","src":"10235:89:118","text":" @notice Calculates sqrt(a), following the selected rounding direction."},"id":42752,"implemented":true,"kind":"function","modifiers":[],"name":"sqrt","nameLocation":"10338:4:118","nodeType":"FunctionDefinition","parameters":{"id":42724,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42720,"mutability":"mutable","name":"a","nameLocation":"10351:1:118","nodeType":"VariableDeclaration","scope":42752,"src":"10343:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42719,"name":"uint256","nodeType":"ElementaryTypeName","src":"10343:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":42723,"mutability":"mutable","name":"rounding","nameLocation":"10363:8:118","nodeType":"VariableDeclaration","scope":42752,"src":"10354:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$42185","typeString":"enum Math.Rounding"},"typeName":{"id":42722,"nodeType":"UserDefinedTypeName","pathNode":{"id":42721,"name":"Rounding","nameLocations":["10354:8:118"],"nodeType":"IdentifierPath","referencedDeclaration":42185,"src":"10354:8:118"},"referencedDeclaration":42185,"src":"10354:8:118","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$42185","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"10342:30:118"},"returnParameters":{"id":42727,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42726,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42752,"src":"10396:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42725,"name":"uint256","nodeType":"ElementaryTypeName","src":"10396:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10395:9:118"},"scope":43228,"src":"10329:240:118","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":42883,"nodeType":"Block","src":"10760:922:118","statements":[{"assignments":[42761],"declarations":[{"constant":false,"id":42761,"mutability":"mutable","name":"result","nameLocation":"10778:6:118","nodeType":"VariableDeclaration","scope":42883,"src":"10770:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42760,"name":"uint256","nodeType":"ElementaryTypeName","src":"10770:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":42763,"initialValue":{"hexValue":"30","id":42762,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10787:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"10770:18:118"},{"id":42880,"nodeType":"UncheckedBlock","src":"10798:855:118","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42764,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42755,"src":"10826:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"313238","id":42765,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10835:3:118","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"10826:12:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":42767,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10841:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10826:16:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":42778,"nodeType":"IfStatement","src":"10822:99:118","trueBody":{"id":42777,"nodeType":"Block","src":"10844:77:118","statements":[{"expression":{"id":42771,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42769,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42755,"src":"10862:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"313238","id":42770,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10872:3:118","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"10862:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42772,"nodeType":"ExpressionStatement","src":"10862:13:118"},{"expression":{"id":42775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42773,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42761,"src":"10893:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"313238","id":42774,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10903:3:118","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"10893:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42776,"nodeType":"ExpressionStatement","src":"10893:13:118"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42779,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42755,"src":"10938:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3634","id":42780,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10947:2:118","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"10938:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":42782,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10952:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10938:15:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":42793,"nodeType":"IfStatement","src":"10934:96:118","trueBody":{"id":42792,"nodeType":"Block","src":"10955:75:118","statements":[{"expression":{"id":42786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42784,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42755,"src":"10973:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3634","id":42785,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10983:2:118","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"10973:12:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42787,"nodeType":"ExpressionStatement","src":"10973:12:118"},{"expression":{"id":42790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42788,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42761,"src":"11003:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3634","id":42789,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11013:2:118","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"11003:12:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42791,"nodeType":"ExpressionStatement","src":"11003:12:118"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42794,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42755,"src":"11047:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3332","id":42795,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11056:2:118","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"11047:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":42797,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11061:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11047:15:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":42808,"nodeType":"IfStatement","src":"11043:96:118","trueBody":{"id":42807,"nodeType":"Block","src":"11064:75:118","statements":[{"expression":{"id":42801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42799,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42755,"src":"11082:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3332","id":42800,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11092:2:118","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"11082:12:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42802,"nodeType":"ExpressionStatement","src":"11082:12:118"},{"expression":{"id":42805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42803,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42761,"src":"11112:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3332","id":42804,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11122:2:118","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"11112:12:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42806,"nodeType":"ExpressionStatement","src":"11112:12:118"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42811,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42809,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42755,"src":"11156:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3136","id":42810,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11165:2:118","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"11156:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":42812,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11170:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11156:15:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":42823,"nodeType":"IfStatement","src":"11152:96:118","trueBody":{"id":42822,"nodeType":"Block","src":"11173:75:118","statements":[{"expression":{"id":42816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42814,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42755,"src":"11191:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3136","id":42815,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11201:2:118","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"11191:12:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42817,"nodeType":"ExpressionStatement","src":"11191:12:118"},{"expression":{"id":42820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42818,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42761,"src":"11221:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3136","id":42819,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11231:2:118","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"11221:12:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42821,"nodeType":"ExpressionStatement","src":"11221:12:118"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42828,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42824,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42755,"src":"11265:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"38","id":42825,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11274:1:118","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"11265:10:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":42827,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11278:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11265:14:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":42838,"nodeType":"IfStatement","src":"11261:93:118","trueBody":{"id":42837,"nodeType":"Block","src":"11281:73:118","statements":[{"expression":{"id":42831,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42829,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42755,"src":"11299:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"38","id":42830,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11309:1:118","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"11299:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42832,"nodeType":"ExpressionStatement","src":"11299:11:118"},{"expression":{"id":42835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42833,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42761,"src":"11328:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"38","id":42834,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11338:1:118","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"11328:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42836,"nodeType":"ExpressionStatement","src":"11328:11:118"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42839,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42755,"src":"11371:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"34","id":42840,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11380:1:118","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"11371:10:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":42842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11384:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11371:14:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":42853,"nodeType":"IfStatement","src":"11367:93:118","trueBody":{"id":42852,"nodeType":"Block","src":"11387:73:118","statements":[{"expression":{"id":42846,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42844,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42755,"src":"11405:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"34","id":42845,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11415:1:118","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"11405:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42847,"nodeType":"ExpressionStatement","src":"11405:11:118"},{"expression":{"id":42850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42848,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42761,"src":"11434:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"34","id":42849,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11444:1:118","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"11434:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42851,"nodeType":"ExpressionStatement","src":"11434:11:118"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42856,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42854,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42755,"src":"11477:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"32","id":42855,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11486:1:118","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"11477:10:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":42857,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11490:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11477:14:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":42868,"nodeType":"IfStatement","src":"11473:93:118","trueBody":{"id":42867,"nodeType":"Block","src":"11493:73:118","statements":[{"expression":{"id":42861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42859,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42755,"src":"11511:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"32","id":42860,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11521:1:118","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"11511:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42862,"nodeType":"ExpressionStatement","src":"11511:11:118"},{"expression":{"id":42865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42863,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42761,"src":"11540:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"32","id":42864,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11550:1:118","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"11540:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42866,"nodeType":"ExpressionStatement","src":"11540:11:118"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42869,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42755,"src":"11583:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":42870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11592:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"11583:10:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":42872,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11596:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11583:14:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":42879,"nodeType":"IfStatement","src":"11579:64:118","trueBody":{"id":42878,"nodeType":"Block","src":"11599:44:118","statements":[{"expression":{"id":42876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42874,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42761,"src":"11617:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":42875,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11627:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"11617:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42877,"nodeType":"ExpressionStatement","src":"11617:11:118"}]}}]},{"expression":{"id":42881,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42761,"src":"11669:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":42759,"id":42882,"nodeType":"Return","src":"11662:13:118"}]},"documentation":{"id":42753,"nodeType":"StructuredDocumentation","src":"10575:119:118","text":" @dev Return the log in base 2 of a positive value rounded towards zero.\n Returns 0 if given 0."},"id":42884,"implemented":true,"kind":"function","modifiers":[],"name":"log2","nameLocation":"10708:4:118","nodeType":"FunctionDefinition","parameters":{"id":42756,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42755,"mutability":"mutable","name":"value","nameLocation":"10721:5:118","nodeType":"VariableDeclaration","scope":42884,"src":"10713:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42754,"name":"uint256","nodeType":"ElementaryTypeName","src":"10713:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10712:15:118"},"returnParameters":{"id":42759,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42758,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42884,"src":"10751:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42757,"name":"uint256","nodeType":"ElementaryTypeName","src":"10751:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10750:9:118"},"scope":43228,"src":"10699:983:118","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":42918,"nodeType":"Block","src":"11915:168:118","statements":[{"id":42917,"nodeType":"UncheckedBlock","src":"11925:152:118","statements":[{"assignments":[42896],"declarations":[{"constant":false,"id":42896,"mutability":"mutable","name":"result","nameLocation":"11957:6:118","nodeType":"VariableDeclaration","scope":42917,"src":"11949:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42895,"name":"uint256","nodeType":"ElementaryTypeName","src":"11949:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":42900,"initialValue":{"arguments":[{"id":42898,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42887,"src":"11971:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":42897,"name":"log2","nodeType":"Identifier","overloadedDeclarations":[42884,42919],"referencedDeclaration":42884,"src":"11966:4:118","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":42899,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11966:11:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11949:28:118"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42901,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42896,"src":"11998:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":42910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":42903,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42890,"src":"12025:8:118","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$42185","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$42185","typeString":"enum Math.Rounding"}],"id":42902,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43227,"src":"12008:16:118","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$42185_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":42904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12008:26:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42909,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":42905,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12038:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":42906,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42896,"src":"12043:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12038:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":42908,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42887,"src":"12052:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12038:19:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12008:49:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":42912,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12064:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":42913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"12008:57:118","trueExpression":{"hexValue":"31","id":42911,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12060:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":42914,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12007:59:118","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"11998:68:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":42894,"id":42916,"nodeType":"Return","src":"11991:75:118"}]}]},"documentation":{"id":42885,"nodeType":"StructuredDocumentation","src":"11688:142:118","text":" @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":42919,"implemented":true,"kind":"function","modifiers":[],"name":"log2","nameLocation":"11844:4:118","nodeType":"FunctionDefinition","parameters":{"id":42891,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42887,"mutability":"mutable","name":"value","nameLocation":"11857:5:118","nodeType":"VariableDeclaration","scope":42919,"src":"11849:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42886,"name":"uint256","nodeType":"ElementaryTypeName","src":"11849:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":42890,"mutability":"mutable","name":"rounding","nameLocation":"11873:8:118","nodeType":"VariableDeclaration","scope":42919,"src":"11864:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$42185","typeString":"enum Math.Rounding"},"typeName":{"id":42889,"nodeType":"UserDefinedTypeName","pathNode":{"id":42888,"name":"Rounding","nameLocations":["11864:8:118"],"nodeType":"IdentifierPath","referencedDeclaration":42185,"src":"11864:8:118"},"referencedDeclaration":42185,"src":"11864:8:118","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$42185","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"11848:34:118"},"returnParameters":{"id":42894,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42893,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":42919,"src":"11906:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42892,"name":"uint256","nodeType":"ElementaryTypeName","src":"11906:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11905:9:118"},"scope":43228,"src":"11835:248:118","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43047,"nodeType":"Block","src":"12276:854:118","statements":[{"assignments":[42928],"declarations":[{"constant":false,"id":42928,"mutability":"mutable","name":"result","nameLocation":"12294:6:118","nodeType":"VariableDeclaration","scope":43047,"src":"12286:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42927,"name":"uint256","nodeType":"ElementaryTypeName","src":"12286:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":42930,"initialValue":{"hexValue":"30","id":42929,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12303:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12286:18:118"},{"id":43044,"nodeType":"UncheckedBlock","src":"12314:787:118","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42931,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42922,"src":"12342:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"},"id":42934,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":42932,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12351:2:118","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3634","id":42933,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12357:2:118","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"12351:8:118","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"}},"src":"12342:17:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":42947,"nodeType":"IfStatement","src":"12338:103:118","trueBody":{"id":42946,"nodeType":"Block","src":"12361:80:118","statements":[{"expression":{"id":42940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42936,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42922,"src":"12379:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"},"id":42939,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":42937,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12388:2:118","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3634","id":42938,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12394:2:118","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"12388:8:118","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"}},"src":"12379:17:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42941,"nodeType":"ExpressionStatement","src":"12379:17:118"},{"expression":{"id":42944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42942,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42928,"src":"12414:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3634","id":42943,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12424:2:118","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"12414:12:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42945,"nodeType":"ExpressionStatement","src":"12414:12:118"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42948,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42922,"src":"12458:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"},"id":42951,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":42949,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12467:2:118","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3332","id":42950,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12473:2:118","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"12467:8:118","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"}},"src":"12458:17:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":42964,"nodeType":"IfStatement","src":"12454:103:118","trueBody":{"id":42963,"nodeType":"Block","src":"12477:80:118","statements":[{"expression":{"id":42957,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42953,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42922,"src":"12495:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"},"id":42956,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":42954,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12504:2:118","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3332","id":42955,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12510:2:118","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"12504:8:118","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"}},"src":"12495:17:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42958,"nodeType":"ExpressionStatement","src":"12495:17:118"},{"expression":{"id":42961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42959,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42928,"src":"12530:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3332","id":42960,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12540:2:118","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"12530:12:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42962,"nodeType":"ExpressionStatement","src":"12530:12:118"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42965,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42922,"src":"12574:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"},"id":42968,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":42966,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12583:2:118","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3136","id":42967,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12589:2:118","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"12583:8:118","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"}},"src":"12574:17:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":42981,"nodeType":"IfStatement","src":"12570:103:118","trueBody":{"id":42980,"nodeType":"Block","src":"12593:80:118","statements":[{"expression":{"id":42974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42970,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42922,"src":"12611:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"},"id":42973,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":42971,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12620:2:118","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3136","id":42972,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12626:2:118","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"12620:8:118","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"}},"src":"12611:17:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42975,"nodeType":"ExpressionStatement","src":"12611:17:118"},{"expression":{"id":42978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42976,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42928,"src":"12646:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3136","id":42977,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12656:2:118","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"12646:12:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42979,"nodeType":"ExpressionStatement","src":"12646:12:118"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":42986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42982,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42922,"src":"12690:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"},"id":42985,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":42983,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12699:2:118","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"38","id":42984,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12705:1:118","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"12699:7:118","typeDescriptions":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"}},"src":"12690:16:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":42998,"nodeType":"IfStatement","src":"12686:100:118","trueBody":{"id":42997,"nodeType":"Block","src":"12708:78:118","statements":[{"expression":{"id":42991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42987,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42922,"src":"12726:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"},"id":42990,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":42988,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12735:2:118","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"38","id":42989,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12741:1:118","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"12735:7:118","typeDescriptions":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"}},"src":"12726:16:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42992,"nodeType":"ExpressionStatement","src":"12726:16:118"},{"expression":{"id":42995,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":42993,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42928,"src":"12760:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"38","id":42994,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12770:1:118","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"12760:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":42996,"nodeType":"ExpressionStatement","src":"12760:11:118"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":42999,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42922,"src":"12803:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"id":43002,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":43000,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12812:2:118","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"34","id":43001,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12818:1:118","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"12812:7:118","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"}},"src":"12803:16:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43015,"nodeType":"IfStatement","src":"12799:100:118","trueBody":{"id":43014,"nodeType":"Block","src":"12821:78:118","statements":[{"expression":{"id":43008,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43004,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42922,"src":"12839:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"id":43007,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":43005,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12848:2:118","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"34","id":43006,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12854:1:118","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"12848:7:118","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"}},"src":"12839:16:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":43009,"nodeType":"ExpressionStatement","src":"12839:16:118"},{"expression":{"id":43012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43010,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42928,"src":"12873:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"34","id":43011,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12883:1:118","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"12873:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":43013,"nodeType":"ExpressionStatement","src":"12873:11:118"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43016,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42922,"src":"12916:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"id":43019,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":43017,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12925:2:118","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"32","id":43018,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12931:1:118","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"12925:7:118","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"}},"src":"12916:16:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43032,"nodeType":"IfStatement","src":"12912:100:118","trueBody":{"id":43031,"nodeType":"Block","src":"12934:78:118","statements":[{"expression":{"id":43025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43021,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42922,"src":"12952:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"id":43024,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":43022,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12961:2:118","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"32","id":43023,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12967:1:118","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"12961:7:118","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"}},"src":"12952:16:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":43026,"nodeType":"ExpressionStatement","src":"12952:16:118"},{"expression":{"id":43029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43027,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42928,"src":"12986:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"32","id":43028,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12996:1:118","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"12986:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":43030,"nodeType":"ExpressionStatement","src":"12986:11:118"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43033,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42922,"src":"13029:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"id":43036,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":43034,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13038:2:118","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"31","id":43035,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13044:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"13038:7:118","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"}},"src":"13029:16:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43043,"nodeType":"IfStatement","src":"13025:66:118","trueBody":{"id":43042,"nodeType":"Block","src":"13047:44:118","statements":[{"expression":{"id":43040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43038,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42928,"src":"13065:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":43039,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13075:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"13065:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":43041,"nodeType":"ExpressionStatement","src":"13065:11:118"}]}}]},{"expression":{"id":43045,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":42928,"src":"13117:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":42926,"id":43046,"nodeType":"Return","src":"13110:13:118"}]},"documentation":{"id":42920,"nodeType":"StructuredDocumentation","src":"12089:120:118","text":" @dev Return the log in base 10 of a positive value rounded towards zero.\n Returns 0 if given 0."},"id":43048,"implemented":true,"kind":"function","modifiers":[],"name":"log10","nameLocation":"12223:5:118","nodeType":"FunctionDefinition","parameters":{"id":42923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42922,"mutability":"mutable","name":"value","nameLocation":"12237:5:118","nodeType":"VariableDeclaration","scope":43048,"src":"12229:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42921,"name":"uint256","nodeType":"ElementaryTypeName","src":"12229:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12228:15:118"},"returnParameters":{"id":42926,"nodeType":"ParameterList","parameters":[{"constant":false,"id":42925,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43048,"src":"12267:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":42924,"name":"uint256","nodeType":"ElementaryTypeName","src":"12267:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12266:9:118"},"scope":43228,"src":"12214:916:118","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43082,"nodeType":"Block","src":"13365:170:118","statements":[{"id":43081,"nodeType":"UncheckedBlock","src":"13375:154:118","statements":[{"assignments":[43060],"declarations":[{"constant":false,"id":43060,"mutability":"mutable","name":"result","nameLocation":"13407:6:118","nodeType":"VariableDeclaration","scope":43081,"src":"13399:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43059,"name":"uint256","nodeType":"ElementaryTypeName","src":"13399:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":43064,"initialValue":{"arguments":[{"id":43062,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43051,"src":"13422:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43061,"name":"log10","nodeType":"Identifier","overloadedDeclarations":[43048,43083],"referencedDeclaration":43048,"src":"13416:5:118","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":43063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13416:12:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13399:29:118"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43079,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43065,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43060,"src":"13449:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":43074,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":43067,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43054,"src":"13476:8:118","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$42185","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$42185","typeString":"enum Math.Rounding"}],"id":43066,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43227,"src":"13459:16:118","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$42185_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":43068,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13459:26:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":43069,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13489:2:118","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"id":43070,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43060,"src":"13495:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13489:12:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":43072,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43051,"src":"13504:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13489:20:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13459:50:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":43076,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13516:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":43077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"13459:58:118","trueExpression":{"hexValue":"31","id":43075,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13512:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":43078,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"13458:60:118","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"13449:69:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":43058,"id":43080,"nodeType":"Return","src":"13442:76:118"}]}]},"documentation":{"id":43049,"nodeType":"StructuredDocumentation","src":"13136:143:118","text":" @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":43083,"implemented":true,"kind":"function","modifiers":[],"name":"log10","nameLocation":"13293:5:118","nodeType":"FunctionDefinition","parameters":{"id":43055,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43051,"mutability":"mutable","name":"value","nameLocation":"13307:5:118","nodeType":"VariableDeclaration","scope":43083,"src":"13299:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43050,"name":"uint256","nodeType":"ElementaryTypeName","src":"13299:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":43054,"mutability":"mutable","name":"rounding","nameLocation":"13323:8:118","nodeType":"VariableDeclaration","scope":43083,"src":"13314:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$42185","typeString":"enum Math.Rounding"},"typeName":{"id":43053,"nodeType":"UserDefinedTypeName","pathNode":{"id":43052,"name":"Rounding","nameLocations":["13314:8:118"],"nodeType":"IdentifierPath","referencedDeclaration":42185,"src":"13314:8:118"},"referencedDeclaration":42185,"src":"13314:8:118","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$42185","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"13298:34:118"},"returnParameters":{"id":43058,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43057,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43083,"src":"13356:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43056,"name":"uint256","nodeType":"ElementaryTypeName","src":"13356:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13355:9:118"},"scope":43228,"src":"13284:251:118","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43169,"nodeType":"Block","src":"13855:600:118","statements":[{"assignments":[43092],"declarations":[{"constant":false,"id":43092,"mutability":"mutable","name":"result","nameLocation":"13873:6:118","nodeType":"VariableDeclaration","scope":43169,"src":"13865:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43091,"name":"uint256","nodeType":"ElementaryTypeName","src":"13865:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":43094,"initialValue":{"hexValue":"30","id":43093,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13882:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13865:18:118"},{"id":43166,"nodeType":"UncheckedBlock","src":"13893:533:118","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43099,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43095,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43086,"src":"13921:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"313238","id":43096,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13930:3:118","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"13921:12:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":43098,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13936:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13921:16:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43109,"nodeType":"IfStatement","src":"13917:98:118","trueBody":{"id":43108,"nodeType":"Block","src":"13939:76:118","statements":[{"expression":{"id":43102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43100,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43086,"src":"13957:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"313238","id":43101,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13967:3:118","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"13957:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":43103,"nodeType":"ExpressionStatement","src":"13957:13:118"},{"expression":{"id":43106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43104,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43092,"src":"13988:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3136","id":43105,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13998:2:118","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"13988:12:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":43107,"nodeType":"ExpressionStatement","src":"13988:12:118"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43110,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43086,"src":"14032:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3634","id":43111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14041:2:118","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"14032:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":43113,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14046:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14032:15:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43124,"nodeType":"IfStatement","src":"14028:95:118","trueBody":{"id":43123,"nodeType":"Block","src":"14049:74:118","statements":[{"expression":{"id":43117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43115,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43086,"src":"14067:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3634","id":43116,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14077:2:118","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"14067:12:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":43118,"nodeType":"ExpressionStatement","src":"14067:12:118"},{"expression":{"id":43121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43119,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43092,"src":"14097:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"38","id":43120,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14107:1:118","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"14097:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":43122,"nodeType":"ExpressionStatement","src":"14097:11:118"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43125,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43086,"src":"14140:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3332","id":43126,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14149:2:118","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"14140:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":43128,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14154:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14140:15:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43139,"nodeType":"IfStatement","src":"14136:95:118","trueBody":{"id":43138,"nodeType":"Block","src":"14157:74:118","statements":[{"expression":{"id":43132,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43130,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43086,"src":"14175:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3332","id":43131,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14185:2:118","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"14175:12:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":43133,"nodeType":"ExpressionStatement","src":"14175:12:118"},{"expression":{"id":43136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43134,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43092,"src":"14205:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"34","id":43135,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14215:1:118","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"14205:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":43137,"nodeType":"ExpressionStatement","src":"14205:11:118"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43144,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43140,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43086,"src":"14248:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3136","id":43141,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14257:2:118","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"14248:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":43143,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14262:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14248:15:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43154,"nodeType":"IfStatement","src":"14244:95:118","trueBody":{"id":43153,"nodeType":"Block","src":"14265:74:118","statements":[{"expression":{"id":43147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43145,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43086,"src":"14283:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3136","id":43146,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14293:2:118","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"14283:12:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":43148,"nodeType":"ExpressionStatement","src":"14283:12:118"},{"expression":{"id":43151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43149,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43092,"src":"14313:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"32","id":43150,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14323:1:118","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"14313:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":43152,"nodeType":"ExpressionStatement","src":"14313:11:118"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43155,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43086,"src":"14356:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"38","id":43156,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14365:1:118","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"14356:10:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":43158,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14369:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"14356:14:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43165,"nodeType":"IfStatement","src":"14352:64:118","trueBody":{"id":43164,"nodeType":"Block","src":"14372:44:118","statements":[{"expression":{"id":43162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":43160,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43092,"src":"14390:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":43161,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14400:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"14390:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":43163,"nodeType":"ExpressionStatement","src":"14390:11:118"}]}}]},{"expression":{"id":43167,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43092,"src":"14442:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":43090,"id":43168,"nodeType":"Return","src":"14435:13:118"}]},"documentation":{"id":43084,"nodeType":"StructuredDocumentation","src":"13541:246:118","text":" @dev Return the log in base 256 of a positive value rounded towards zero.\n Returns 0 if given 0.\n Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string."},"id":43170,"implemented":true,"kind":"function","modifiers":[],"name":"log256","nameLocation":"13801:6:118","nodeType":"FunctionDefinition","parameters":{"id":43087,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43086,"mutability":"mutable","name":"value","nameLocation":"13816:5:118","nodeType":"VariableDeclaration","scope":43170,"src":"13808:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43085,"name":"uint256","nodeType":"ElementaryTypeName","src":"13808:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13807:15:118"},"returnParameters":{"id":43090,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43089,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43170,"src":"13846:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43088,"name":"uint256","nodeType":"ElementaryTypeName","src":"13846:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13845:9:118"},"scope":43228,"src":"13792:663:118","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43207,"nodeType":"Block","src":"14692:177:118","statements":[{"id":43206,"nodeType":"UncheckedBlock","src":"14702:161:118","statements":[{"assignments":[43182],"declarations":[{"constant":false,"id":43182,"mutability":"mutable","name":"result","nameLocation":"14734:6:118","nodeType":"VariableDeclaration","scope":43206,"src":"14726:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43181,"name":"uint256","nodeType":"ElementaryTypeName","src":"14726:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":43186,"initialValue":{"arguments":[{"id":43184,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43173,"src":"14750:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43183,"name":"log256","nodeType":"Identifier","overloadedDeclarations":[43170,43208],"referencedDeclaration":43170,"src":"14743:6:118","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":43185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14743:13:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14726:30:118"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43187,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43182,"src":"14777:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":43199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":43189,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43176,"src":"14804:8:118","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$42185","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$42185","typeString":"enum Math.Rounding"}],"id":43188,"name":"unsignedRoundsUp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43227,"src":"14787:16:118","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_enum$_Rounding_$42185_$returns$_t_bool_$","typeString":"function (enum Math.Rounding) pure returns (bool)"}},"id":43190,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14787:26:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43196,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":43191,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14817:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43192,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43182,"src":"14823:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"hexValue":"33","id":43193,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14833:1:118","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"14823:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":43195,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14822:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14817:18:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":43197,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43173,"src":"14838:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14817:26:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14787:56:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":43201,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14850:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":43202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"14787:64:118","trueExpression":{"hexValue":"31","id":43200,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14846:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":43203,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"14786:66:118","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"14777:75:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":43180,"id":43205,"nodeType":"Return","src":"14770:82:118"}]}]},"documentation":{"id":43171,"nodeType":"StructuredDocumentation","src":"14461:144:118","text":" @dev Return the log in base 256, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":43208,"implemented":true,"kind":"function","modifiers":[],"name":"log256","nameLocation":"14619:6:118","nodeType":"FunctionDefinition","parameters":{"id":43177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43173,"mutability":"mutable","name":"value","nameLocation":"14634:5:118","nodeType":"VariableDeclaration","scope":43208,"src":"14626:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43172,"name":"uint256","nodeType":"ElementaryTypeName","src":"14626:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":43176,"mutability":"mutable","name":"rounding","nameLocation":"14650:8:118","nodeType":"VariableDeclaration","scope":43208,"src":"14641:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$42185","typeString":"enum Math.Rounding"},"typeName":{"id":43175,"nodeType":"UserDefinedTypeName","pathNode":{"id":43174,"name":"Rounding","nameLocations":["14641:8:118"],"nodeType":"IdentifierPath","referencedDeclaration":42185,"src":"14641:8:118"},"referencedDeclaration":42185,"src":"14641:8:118","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$42185","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"14625:34:118"},"returnParameters":{"id":43180,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43179,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43208,"src":"14683:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43178,"name":"uint256","nodeType":"ElementaryTypeName","src":"14683:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14682:9:118"},"scope":43228,"src":"14610:259:118","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43226,"nodeType":"Block","src":"15067:48:118","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":43224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":43222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":43219,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43212,"src":"15090:8:118","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$42185","typeString":"enum Math.Rounding"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_enum$_Rounding_$42185","typeString":"enum Math.Rounding"}],"id":43218,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15084:5:118","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":43217,"name":"uint8","nodeType":"ElementaryTypeName","src":"15084:5:118","typeDescriptions":{}}},"id":43220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15084:15:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"hexValue":"32","id":43221,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15102:1:118","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"15084:19:118","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":43223,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15107:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"15084:24:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":43216,"id":43225,"nodeType":"Return","src":"15077:31:118"}]},"documentation":{"id":43209,"nodeType":"StructuredDocumentation","src":"14875:113:118","text":" @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers."},"id":43227,"implemented":true,"kind":"function","modifiers":[],"name":"unsignedRoundsUp","nameLocation":"15002:16:118","nodeType":"FunctionDefinition","parameters":{"id":43213,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43212,"mutability":"mutable","name":"rounding","nameLocation":"15028:8:118","nodeType":"VariableDeclaration","scope":43227,"src":"15019:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$42185","typeString":"enum Math.Rounding"},"typeName":{"id":43211,"nodeType":"UserDefinedTypeName","pathNode":{"id":43210,"name":"Rounding","nameLocations":["15019:8:118"],"nodeType":"IdentifierPath","referencedDeclaration":42185,"src":"15019:8:118"},"referencedDeclaration":42185,"src":"15019:8:118","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$42185","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"15018:19:118"},"returnParameters":{"id":43216,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43215,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43227,"src":"15061:4:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":43214,"name":"bool","nodeType":"ElementaryTypeName","src":"15061:4:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15060:6:118"},"scope":43228,"src":"14993:122:118","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":43229,"src":"203:14914:118","usedErrors":[42180],"usedEvents":[]}],"src":"103:15015:118"},"id":118},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/math/SafeCast.sol","exportedSymbols":{"SafeCast":[44983]},"id":44984,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":43230,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"192:24:119"},{"abstract":false,"baseContracts":[],"canonicalName":"SafeCast","contractDependencies":[],"contractKind":"library","documentation":{"id":43231,"nodeType":"StructuredDocumentation","src":"218:545:119","text":" @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow\n checks.\n Downcasting from uint256/int256 in Solidity does not revert on overflow. This can\n easily result in undesired exploitation or bugs, since developers usually\n assume that overflows raise errors. `SafeCast` restores this intuition by\n reverting the transaction when such an operation overflows.\n Using this library instead of the unchecked operations eliminates an entire\n class of bugs, so it's recommended to use it always."},"fullyImplemented":true,"id":44983,"linearizedBaseContracts":[44983],"name":"SafeCast","nameLocation":"772:8:119","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":43232,"nodeType":"StructuredDocumentation","src":"787:68:119","text":" @dev Value doesn't fit in an uint of `bits` size."},"errorSelector":"6dfcc650","id":43238,"name":"SafeCastOverflowedUintDowncast","nameLocation":"866:30:119","nodeType":"ErrorDefinition","parameters":{"id":43237,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43234,"mutability":"mutable","name":"bits","nameLocation":"903:4:119","nodeType":"VariableDeclaration","scope":43238,"src":"897:10:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":43233,"name":"uint8","nodeType":"ElementaryTypeName","src":"897:5:119","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":43236,"mutability":"mutable","name":"value","nameLocation":"917:5:119","nodeType":"VariableDeclaration","scope":43238,"src":"909:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43235,"name":"uint256","nodeType":"ElementaryTypeName","src":"909:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"896:27:119"},"src":"860:64:119"},{"documentation":{"id":43239,"nodeType":"StructuredDocumentation","src":"930:75:119","text":" @dev An int value doesn't fit in an uint of `bits` size."},"errorSelector":"a8ce4432","id":43243,"name":"SafeCastOverflowedIntToUint","nameLocation":"1016:27:119","nodeType":"ErrorDefinition","parameters":{"id":43242,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43241,"mutability":"mutable","name":"value","nameLocation":"1051:5:119","nodeType":"VariableDeclaration","scope":43243,"src":"1044:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":43240,"name":"int256","nodeType":"ElementaryTypeName","src":"1044:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1043:14:119"},"src":"1010:48:119"},{"documentation":{"id":43244,"nodeType":"StructuredDocumentation","src":"1064:67:119","text":" @dev Value doesn't fit in an int of `bits` size."},"errorSelector":"327269a7","id":43250,"name":"SafeCastOverflowedIntDowncast","nameLocation":"1142:29:119","nodeType":"ErrorDefinition","parameters":{"id":43249,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43246,"mutability":"mutable","name":"bits","nameLocation":"1178:4:119","nodeType":"VariableDeclaration","scope":43250,"src":"1172:10:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":43245,"name":"uint8","nodeType":"ElementaryTypeName","src":"1172:5:119","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"},{"constant":false,"id":43248,"mutability":"mutable","name":"value","nameLocation":"1191:5:119","nodeType":"VariableDeclaration","scope":43250,"src":"1184:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":43247,"name":"int256","nodeType":"ElementaryTypeName","src":"1184:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1171:26:119"},"src":"1136:62:119"},{"documentation":{"id":43251,"nodeType":"StructuredDocumentation","src":"1204:75:119","text":" @dev An uint value doesn't fit in an int of `bits` size."},"errorSelector":"24775e06","id":43255,"name":"SafeCastOverflowedUintToInt","nameLocation":"1290:27:119","nodeType":"ErrorDefinition","parameters":{"id":43254,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43253,"mutability":"mutable","name":"value","nameLocation":"1326:5:119","nodeType":"VariableDeclaration","scope":43255,"src":"1318:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43252,"name":"uint256","nodeType":"ElementaryTypeName","src":"1318:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1317:15:119"},"src":"1284:49:119"},{"body":{"id":43282,"nodeType":"Block","src":"1690:152:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43269,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43263,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43258,"src":"1704:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":43266,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1717:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"},"typeName":{"id":43265,"name":"uint248","nodeType":"ElementaryTypeName","src":"1717:7:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"}],"id":43264,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"1712:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":43267,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1712:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint248","typeString":"type(uint248)"}},"id":43268,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1726:3:119","memberName":"max","nodeType":"MemberAccess","src":"1712:17:119","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"src":"1704:25:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43276,"nodeType":"IfStatement","src":"1700:105:119","trueBody":{"id":43275,"nodeType":"Block","src":"1731:74:119","statements":[{"errorCall":{"arguments":[{"hexValue":"323438","id":43271,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1783:3:119","typeDescriptions":{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},"value":"248"},{"id":43272,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43258,"src":"1788:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43270,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"1752:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":43273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1752:42:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":43274,"nodeType":"RevertStatement","src":"1745:49:119"}]}},{"expression":{"arguments":[{"id":43279,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43258,"src":"1829:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43278,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1821:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint248_$","typeString":"type(uint248)"},"typeName":{"id":43277,"name":"uint248","nodeType":"ElementaryTypeName","src":"1821:7:119","typeDescriptions":{}}},"id":43280,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1821:14:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"functionReturnParameters":43262,"id":43281,"nodeType":"Return","src":"1814:21:119"}]},"documentation":{"id":43256,"nodeType":"StructuredDocumentation","src":"1339:280:119","text":" @dev Returns the downcasted uint248 from uint256, reverting on\n overflow (when the input is greater than largest uint248).\n Counterpart to Solidity's `uint248` operator.\n Requirements:\n - input must fit into 248 bits"},"id":43283,"implemented":true,"kind":"function","modifiers":[],"name":"toUint248","nameLocation":"1633:9:119","nodeType":"FunctionDefinition","parameters":{"id":43259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43258,"mutability":"mutable","name":"value","nameLocation":"1651:5:119","nodeType":"VariableDeclaration","scope":43283,"src":"1643:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43257,"name":"uint256","nodeType":"ElementaryTypeName","src":"1643:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1642:15:119"},"returnParameters":{"id":43262,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43261,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43283,"src":"1681:7:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"},"typeName":{"id":43260,"name":"uint248","nodeType":"ElementaryTypeName","src":"1681:7:119","typeDescriptions":{"typeIdentifier":"t_uint248","typeString":"uint248"}},"visibility":"internal"}],"src":"1680:9:119"},"scope":44983,"src":"1624:218:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43310,"nodeType":"Block","src":"2199:152:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43297,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43291,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43286,"src":"2213:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":43294,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2226:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"},"typeName":{"id":43293,"name":"uint240","nodeType":"ElementaryTypeName","src":"2226:7:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"}],"id":43292,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2221:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":43295,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2221:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint240","typeString":"type(uint240)"}},"id":43296,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2235:3:119","memberName":"max","nodeType":"MemberAccess","src":"2221:17:119","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"src":"2213:25:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43304,"nodeType":"IfStatement","src":"2209:105:119","trueBody":{"id":43303,"nodeType":"Block","src":"2240:74:119","statements":[{"errorCall":{"arguments":[{"hexValue":"323430","id":43299,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2292:3:119","typeDescriptions":{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},"value":"240"},{"id":43300,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43286,"src":"2297:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43298,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"2261:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":43301,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2261:42:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":43302,"nodeType":"RevertStatement","src":"2254:49:119"}]}},{"expression":{"arguments":[{"id":43307,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43286,"src":"2338:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43306,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2330:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint240_$","typeString":"type(uint240)"},"typeName":{"id":43305,"name":"uint240","nodeType":"ElementaryTypeName","src":"2330:7:119","typeDescriptions":{}}},"id":43308,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2330:14:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"functionReturnParameters":43290,"id":43309,"nodeType":"Return","src":"2323:21:119"}]},"documentation":{"id":43284,"nodeType":"StructuredDocumentation","src":"1848:280:119","text":" @dev Returns the downcasted uint240 from uint256, reverting on\n overflow (when the input is greater than largest uint240).\n Counterpart to Solidity's `uint240` operator.\n Requirements:\n - input must fit into 240 bits"},"id":43311,"implemented":true,"kind":"function","modifiers":[],"name":"toUint240","nameLocation":"2142:9:119","nodeType":"FunctionDefinition","parameters":{"id":43287,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43286,"mutability":"mutable","name":"value","nameLocation":"2160:5:119","nodeType":"VariableDeclaration","scope":43311,"src":"2152:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43285,"name":"uint256","nodeType":"ElementaryTypeName","src":"2152:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2151:15:119"},"returnParameters":{"id":43290,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43289,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43311,"src":"2190:7:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"},"typeName":{"id":43288,"name":"uint240","nodeType":"ElementaryTypeName","src":"2190:7:119","typeDescriptions":{"typeIdentifier":"t_uint240","typeString":"uint240"}},"visibility":"internal"}],"src":"2189:9:119"},"scope":44983,"src":"2133:218:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43338,"nodeType":"Block","src":"2708:152:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43319,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43314,"src":"2722:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":43322,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2735:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"},"typeName":{"id":43321,"name":"uint232","nodeType":"ElementaryTypeName","src":"2735:7:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"}],"id":43320,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2730:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":43323,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2730:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint232","typeString":"type(uint232)"}},"id":43324,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2744:3:119","memberName":"max","nodeType":"MemberAccess","src":"2730:17:119","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"src":"2722:25:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43332,"nodeType":"IfStatement","src":"2718:105:119","trueBody":{"id":43331,"nodeType":"Block","src":"2749:74:119","statements":[{"errorCall":{"arguments":[{"hexValue":"323332","id":43327,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2801:3:119","typeDescriptions":{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},"value":"232"},{"id":43328,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43314,"src":"2806:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43326,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"2770:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":43329,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2770:42:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":43330,"nodeType":"RevertStatement","src":"2763:49:119"}]}},{"expression":{"arguments":[{"id":43335,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43314,"src":"2847:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43334,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2839:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint232_$","typeString":"type(uint232)"},"typeName":{"id":43333,"name":"uint232","nodeType":"ElementaryTypeName","src":"2839:7:119","typeDescriptions":{}}},"id":43336,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2839:14:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"functionReturnParameters":43318,"id":43337,"nodeType":"Return","src":"2832:21:119"}]},"documentation":{"id":43312,"nodeType":"StructuredDocumentation","src":"2357:280:119","text":" @dev Returns the downcasted uint232 from uint256, reverting on\n overflow (when the input is greater than largest uint232).\n Counterpart to Solidity's `uint232` operator.\n Requirements:\n - input must fit into 232 bits"},"id":43339,"implemented":true,"kind":"function","modifiers":[],"name":"toUint232","nameLocation":"2651:9:119","nodeType":"FunctionDefinition","parameters":{"id":43315,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43314,"mutability":"mutable","name":"value","nameLocation":"2669:5:119","nodeType":"VariableDeclaration","scope":43339,"src":"2661:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43313,"name":"uint256","nodeType":"ElementaryTypeName","src":"2661:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2660:15:119"},"returnParameters":{"id":43318,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43317,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43339,"src":"2699:7:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"},"typeName":{"id":43316,"name":"uint232","nodeType":"ElementaryTypeName","src":"2699:7:119","typeDescriptions":{"typeIdentifier":"t_uint232","typeString":"uint232"}},"visibility":"internal"}],"src":"2698:9:119"},"scope":44983,"src":"2642:218:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43366,"nodeType":"Block","src":"3217:152:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43347,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43342,"src":"3231:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":43350,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3244:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":43349,"name":"uint224","nodeType":"ElementaryTypeName","src":"3244:7:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"}],"id":43348,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3239:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":43351,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3239:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint224","typeString":"type(uint224)"}},"id":43352,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3253:3:119","memberName":"max","nodeType":"MemberAccess","src":"3239:17:119","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"src":"3231:25:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43360,"nodeType":"IfStatement","src":"3227:105:119","trueBody":{"id":43359,"nodeType":"Block","src":"3258:74:119","statements":[{"errorCall":{"arguments":[{"hexValue":"323234","id":43355,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3310:3:119","typeDescriptions":{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},"value":"224"},{"id":43356,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43342,"src":"3315:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43354,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"3279:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":43357,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3279:42:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":43358,"nodeType":"RevertStatement","src":"3272:49:119"}]}},{"expression":{"arguments":[{"id":43363,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43342,"src":"3356:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43362,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3348:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint224_$","typeString":"type(uint224)"},"typeName":{"id":43361,"name":"uint224","nodeType":"ElementaryTypeName","src":"3348:7:119","typeDescriptions":{}}},"id":43364,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3348:14:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"functionReturnParameters":43346,"id":43365,"nodeType":"Return","src":"3341:21:119"}]},"documentation":{"id":43340,"nodeType":"StructuredDocumentation","src":"2866:280:119","text":" @dev Returns the downcasted uint224 from uint256, reverting on\n overflow (when the input is greater than largest uint224).\n Counterpart to Solidity's `uint224` operator.\n Requirements:\n - input must fit into 224 bits"},"id":43367,"implemented":true,"kind":"function","modifiers":[],"name":"toUint224","nameLocation":"3160:9:119","nodeType":"FunctionDefinition","parameters":{"id":43343,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43342,"mutability":"mutable","name":"value","nameLocation":"3178:5:119","nodeType":"VariableDeclaration","scope":43367,"src":"3170:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43341,"name":"uint256","nodeType":"ElementaryTypeName","src":"3170:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3169:15:119"},"returnParameters":{"id":43346,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43345,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43367,"src":"3208:7:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"},"typeName":{"id":43344,"name":"uint224","nodeType":"ElementaryTypeName","src":"3208:7:119","typeDescriptions":{"typeIdentifier":"t_uint224","typeString":"uint224"}},"visibility":"internal"}],"src":"3207:9:119"},"scope":44983,"src":"3151:218:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43394,"nodeType":"Block","src":"3726:152:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43375,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43370,"src":"3740:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":43378,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3753:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"},"typeName":{"id":43377,"name":"uint216","nodeType":"ElementaryTypeName","src":"3753:7:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"}],"id":43376,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"3748:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":43379,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3748:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint216","typeString":"type(uint216)"}},"id":43380,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3762:3:119","memberName":"max","nodeType":"MemberAccess","src":"3748:17:119","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"src":"3740:25:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43388,"nodeType":"IfStatement","src":"3736:105:119","trueBody":{"id":43387,"nodeType":"Block","src":"3767:74:119","statements":[{"errorCall":{"arguments":[{"hexValue":"323136","id":43383,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3819:3:119","typeDescriptions":{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},"value":"216"},{"id":43384,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43370,"src":"3824:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43382,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"3788:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":43385,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3788:42:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":43386,"nodeType":"RevertStatement","src":"3781:49:119"}]}},{"expression":{"arguments":[{"id":43391,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43370,"src":"3865:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43390,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3857:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint216_$","typeString":"type(uint216)"},"typeName":{"id":43389,"name":"uint216","nodeType":"ElementaryTypeName","src":"3857:7:119","typeDescriptions":{}}},"id":43392,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3857:14:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"functionReturnParameters":43374,"id":43393,"nodeType":"Return","src":"3850:21:119"}]},"documentation":{"id":43368,"nodeType":"StructuredDocumentation","src":"3375:280:119","text":" @dev Returns the downcasted uint216 from uint256, reverting on\n overflow (when the input is greater than largest uint216).\n Counterpart to Solidity's `uint216` operator.\n Requirements:\n - input must fit into 216 bits"},"id":43395,"implemented":true,"kind":"function","modifiers":[],"name":"toUint216","nameLocation":"3669:9:119","nodeType":"FunctionDefinition","parameters":{"id":43371,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43370,"mutability":"mutable","name":"value","nameLocation":"3687:5:119","nodeType":"VariableDeclaration","scope":43395,"src":"3679:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43369,"name":"uint256","nodeType":"ElementaryTypeName","src":"3679:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3678:15:119"},"returnParameters":{"id":43374,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43373,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43395,"src":"3717:7:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"},"typeName":{"id":43372,"name":"uint216","nodeType":"ElementaryTypeName","src":"3717:7:119","typeDescriptions":{"typeIdentifier":"t_uint216","typeString":"uint216"}},"visibility":"internal"}],"src":"3716:9:119"},"scope":44983,"src":"3660:218:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43422,"nodeType":"Block","src":"4235:152:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43403,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43398,"src":"4249:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":43406,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4262:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"},"typeName":{"id":43405,"name":"uint208","nodeType":"ElementaryTypeName","src":"4262:7:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"}],"id":43404,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4257:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":43407,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4257:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint208","typeString":"type(uint208)"}},"id":43408,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4271:3:119","memberName":"max","nodeType":"MemberAccess","src":"4257:17:119","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"src":"4249:25:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43416,"nodeType":"IfStatement","src":"4245:105:119","trueBody":{"id":43415,"nodeType":"Block","src":"4276:74:119","statements":[{"errorCall":{"arguments":[{"hexValue":"323038","id":43411,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4328:3:119","typeDescriptions":{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},"value":"208"},{"id":43412,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43398,"src":"4333:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43410,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"4297:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":43413,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4297:42:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":43414,"nodeType":"RevertStatement","src":"4290:49:119"}]}},{"expression":{"arguments":[{"id":43419,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43398,"src":"4374:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43418,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4366:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint208_$","typeString":"type(uint208)"},"typeName":{"id":43417,"name":"uint208","nodeType":"ElementaryTypeName","src":"4366:7:119","typeDescriptions":{}}},"id":43420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4366:14:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"functionReturnParameters":43402,"id":43421,"nodeType":"Return","src":"4359:21:119"}]},"documentation":{"id":43396,"nodeType":"StructuredDocumentation","src":"3884:280:119","text":" @dev Returns the downcasted uint208 from uint256, reverting on\n overflow (when the input is greater than largest uint208).\n Counterpart to Solidity's `uint208` operator.\n Requirements:\n - input must fit into 208 bits"},"id":43423,"implemented":true,"kind":"function","modifiers":[],"name":"toUint208","nameLocation":"4178:9:119","nodeType":"FunctionDefinition","parameters":{"id":43399,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43398,"mutability":"mutable","name":"value","nameLocation":"4196:5:119","nodeType":"VariableDeclaration","scope":43423,"src":"4188:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43397,"name":"uint256","nodeType":"ElementaryTypeName","src":"4188:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4187:15:119"},"returnParameters":{"id":43402,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43401,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43423,"src":"4226:7:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"},"typeName":{"id":43400,"name":"uint208","nodeType":"ElementaryTypeName","src":"4226:7:119","typeDescriptions":{"typeIdentifier":"t_uint208","typeString":"uint208"}},"visibility":"internal"}],"src":"4225:9:119"},"scope":44983,"src":"4169:218:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43450,"nodeType":"Block","src":"4744:152:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43431,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43426,"src":"4758:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":43434,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4771:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"},"typeName":{"id":43433,"name":"uint200","nodeType":"ElementaryTypeName","src":"4771:7:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"}],"id":43432,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"4766:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":43435,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4766:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint200","typeString":"type(uint200)"}},"id":43436,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4780:3:119","memberName":"max","nodeType":"MemberAccess","src":"4766:17:119","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"src":"4758:25:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43444,"nodeType":"IfStatement","src":"4754:105:119","trueBody":{"id":43443,"nodeType":"Block","src":"4785:74:119","statements":[{"errorCall":{"arguments":[{"hexValue":"323030","id":43439,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4837:3:119","typeDescriptions":{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},"value":"200"},{"id":43440,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43426,"src":"4842:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43438,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"4806:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":43441,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4806:42:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":43442,"nodeType":"RevertStatement","src":"4799:49:119"}]}},{"expression":{"arguments":[{"id":43447,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43426,"src":"4883:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43446,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4875:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint200_$","typeString":"type(uint200)"},"typeName":{"id":43445,"name":"uint200","nodeType":"ElementaryTypeName","src":"4875:7:119","typeDescriptions":{}}},"id":43448,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4875:14:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"functionReturnParameters":43430,"id":43449,"nodeType":"Return","src":"4868:21:119"}]},"documentation":{"id":43424,"nodeType":"StructuredDocumentation","src":"4393:280:119","text":" @dev Returns the downcasted uint200 from uint256, reverting on\n overflow (when the input is greater than largest uint200).\n Counterpart to Solidity's `uint200` operator.\n Requirements:\n - input must fit into 200 bits"},"id":43451,"implemented":true,"kind":"function","modifiers":[],"name":"toUint200","nameLocation":"4687:9:119","nodeType":"FunctionDefinition","parameters":{"id":43427,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43426,"mutability":"mutable","name":"value","nameLocation":"4705:5:119","nodeType":"VariableDeclaration","scope":43451,"src":"4697:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43425,"name":"uint256","nodeType":"ElementaryTypeName","src":"4697:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4696:15:119"},"returnParameters":{"id":43430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43429,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43451,"src":"4735:7:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"},"typeName":{"id":43428,"name":"uint200","nodeType":"ElementaryTypeName","src":"4735:7:119","typeDescriptions":{"typeIdentifier":"t_uint200","typeString":"uint200"}},"visibility":"internal"}],"src":"4734:9:119"},"scope":44983,"src":"4678:218:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43478,"nodeType":"Block","src":"5253:152:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43465,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43459,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43454,"src":"5267:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":43462,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5280:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"},"typeName":{"id":43461,"name":"uint192","nodeType":"ElementaryTypeName","src":"5280:7:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"}],"id":43460,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5275:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":43463,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5275:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint192","typeString":"type(uint192)"}},"id":43464,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5289:3:119","memberName":"max","nodeType":"MemberAccess","src":"5275:17:119","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"src":"5267:25:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43472,"nodeType":"IfStatement","src":"5263:105:119","trueBody":{"id":43471,"nodeType":"Block","src":"5294:74:119","statements":[{"errorCall":{"arguments":[{"hexValue":"313932","id":43467,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5346:3:119","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},{"id":43468,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43454,"src":"5351:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43466,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"5315:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":43469,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5315:42:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":43470,"nodeType":"RevertStatement","src":"5308:49:119"}]}},{"expression":{"arguments":[{"id":43475,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43454,"src":"5392:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43474,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5384:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint192_$","typeString":"type(uint192)"},"typeName":{"id":43473,"name":"uint192","nodeType":"ElementaryTypeName","src":"5384:7:119","typeDescriptions":{}}},"id":43476,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5384:14:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"functionReturnParameters":43458,"id":43477,"nodeType":"Return","src":"5377:21:119"}]},"documentation":{"id":43452,"nodeType":"StructuredDocumentation","src":"4902:280:119","text":" @dev Returns the downcasted uint192 from uint256, reverting on\n overflow (when the input is greater than largest uint192).\n Counterpart to Solidity's `uint192` operator.\n Requirements:\n - input must fit into 192 bits"},"id":43479,"implemented":true,"kind":"function","modifiers":[],"name":"toUint192","nameLocation":"5196:9:119","nodeType":"FunctionDefinition","parameters":{"id":43455,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43454,"mutability":"mutable","name":"value","nameLocation":"5214:5:119","nodeType":"VariableDeclaration","scope":43479,"src":"5206:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43453,"name":"uint256","nodeType":"ElementaryTypeName","src":"5206:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5205:15:119"},"returnParameters":{"id":43458,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43457,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43479,"src":"5244:7:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"},"typeName":{"id":43456,"name":"uint192","nodeType":"ElementaryTypeName","src":"5244:7:119","typeDescriptions":{"typeIdentifier":"t_uint192","typeString":"uint192"}},"visibility":"internal"}],"src":"5243:9:119"},"scope":44983,"src":"5187:218:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43506,"nodeType":"Block","src":"5762:152:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43487,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43482,"src":"5776:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":43490,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5789:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"},"typeName":{"id":43489,"name":"uint184","nodeType":"ElementaryTypeName","src":"5789:7:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"}],"id":43488,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"5784:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":43491,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5784:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint184","typeString":"type(uint184)"}},"id":43492,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5798:3:119","memberName":"max","nodeType":"MemberAccess","src":"5784:17:119","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"src":"5776:25:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43500,"nodeType":"IfStatement","src":"5772:105:119","trueBody":{"id":43499,"nodeType":"Block","src":"5803:74:119","statements":[{"errorCall":{"arguments":[{"hexValue":"313834","id":43495,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5855:3:119","typeDescriptions":{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},"value":"184"},{"id":43496,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43482,"src":"5860:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43494,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"5824:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":43497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5824:42:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":43498,"nodeType":"RevertStatement","src":"5817:49:119"}]}},{"expression":{"arguments":[{"id":43503,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43482,"src":"5901:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43502,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5893:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint184_$","typeString":"type(uint184)"},"typeName":{"id":43501,"name":"uint184","nodeType":"ElementaryTypeName","src":"5893:7:119","typeDescriptions":{}}},"id":43504,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5893:14:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"functionReturnParameters":43486,"id":43505,"nodeType":"Return","src":"5886:21:119"}]},"documentation":{"id":43480,"nodeType":"StructuredDocumentation","src":"5411:280:119","text":" @dev Returns the downcasted uint184 from uint256, reverting on\n overflow (when the input is greater than largest uint184).\n Counterpart to Solidity's `uint184` operator.\n Requirements:\n - input must fit into 184 bits"},"id":43507,"implemented":true,"kind":"function","modifiers":[],"name":"toUint184","nameLocation":"5705:9:119","nodeType":"FunctionDefinition","parameters":{"id":43483,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43482,"mutability":"mutable","name":"value","nameLocation":"5723:5:119","nodeType":"VariableDeclaration","scope":43507,"src":"5715:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43481,"name":"uint256","nodeType":"ElementaryTypeName","src":"5715:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5714:15:119"},"returnParameters":{"id":43486,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43485,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43507,"src":"5753:7:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"},"typeName":{"id":43484,"name":"uint184","nodeType":"ElementaryTypeName","src":"5753:7:119","typeDescriptions":{"typeIdentifier":"t_uint184","typeString":"uint184"}},"visibility":"internal"}],"src":"5752:9:119"},"scope":44983,"src":"5696:218:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43534,"nodeType":"Block","src":"6271:152:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43515,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43510,"src":"6285:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":43518,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6298:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"},"typeName":{"id":43517,"name":"uint176","nodeType":"ElementaryTypeName","src":"6298:7:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"}],"id":43516,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6293:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":43519,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6293:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint176","typeString":"type(uint176)"}},"id":43520,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6307:3:119","memberName":"max","nodeType":"MemberAccess","src":"6293:17:119","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"src":"6285:25:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43528,"nodeType":"IfStatement","src":"6281:105:119","trueBody":{"id":43527,"nodeType":"Block","src":"6312:74:119","statements":[{"errorCall":{"arguments":[{"hexValue":"313736","id":43523,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6364:3:119","typeDescriptions":{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},"value":"176"},{"id":43524,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43510,"src":"6369:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43522,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"6333:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":43525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6333:42:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":43526,"nodeType":"RevertStatement","src":"6326:49:119"}]}},{"expression":{"arguments":[{"id":43531,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43510,"src":"6410:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43530,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6402:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint176_$","typeString":"type(uint176)"},"typeName":{"id":43529,"name":"uint176","nodeType":"ElementaryTypeName","src":"6402:7:119","typeDescriptions":{}}},"id":43532,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6402:14:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"functionReturnParameters":43514,"id":43533,"nodeType":"Return","src":"6395:21:119"}]},"documentation":{"id":43508,"nodeType":"StructuredDocumentation","src":"5920:280:119","text":" @dev Returns the downcasted uint176 from uint256, reverting on\n overflow (when the input is greater than largest uint176).\n Counterpart to Solidity's `uint176` operator.\n Requirements:\n - input must fit into 176 bits"},"id":43535,"implemented":true,"kind":"function","modifiers":[],"name":"toUint176","nameLocation":"6214:9:119","nodeType":"FunctionDefinition","parameters":{"id":43511,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43510,"mutability":"mutable","name":"value","nameLocation":"6232:5:119","nodeType":"VariableDeclaration","scope":43535,"src":"6224:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43509,"name":"uint256","nodeType":"ElementaryTypeName","src":"6224:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6223:15:119"},"returnParameters":{"id":43514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43513,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43535,"src":"6262:7:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"},"typeName":{"id":43512,"name":"uint176","nodeType":"ElementaryTypeName","src":"6262:7:119","typeDescriptions":{"typeIdentifier":"t_uint176","typeString":"uint176"}},"visibility":"internal"}],"src":"6261:9:119"},"scope":44983,"src":"6205:218:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43562,"nodeType":"Block","src":"6780:152:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43543,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43538,"src":"6794:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":43546,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6807:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"},"typeName":{"id":43545,"name":"uint168","nodeType":"ElementaryTypeName","src":"6807:7:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"}],"id":43544,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6802:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":43547,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6802:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint168","typeString":"type(uint168)"}},"id":43548,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6816:3:119","memberName":"max","nodeType":"MemberAccess","src":"6802:17:119","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"src":"6794:25:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43556,"nodeType":"IfStatement","src":"6790:105:119","trueBody":{"id":43555,"nodeType":"Block","src":"6821:74:119","statements":[{"errorCall":{"arguments":[{"hexValue":"313638","id":43551,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6873:3:119","typeDescriptions":{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},"value":"168"},{"id":43552,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43538,"src":"6878:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43550,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"6842:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":43553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6842:42:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":43554,"nodeType":"RevertStatement","src":"6835:49:119"}]}},{"expression":{"arguments":[{"id":43559,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43538,"src":"6919:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43558,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6911:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint168_$","typeString":"type(uint168)"},"typeName":{"id":43557,"name":"uint168","nodeType":"ElementaryTypeName","src":"6911:7:119","typeDescriptions":{}}},"id":43560,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6911:14:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"functionReturnParameters":43542,"id":43561,"nodeType":"Return","src":"6904:21:119"}]},"documentation":{"id":43536,"nodeType":"StructuredDocumentation","src":"6429:280:119","text":" @dev Returns the downcasted uint168 from uint256, reverting on\n overflow (when the input is greater than largest uint168).\n Counterpart to Solidity's `uint168` operator.\n Requirements:\n - input must fit into 168 bits"},"id":43563,"implemented":true,"kind":"function","modifiers":[],"name":"toUint168","nameLocation":"6723:9:119","nodeType":"FunctionDefinition","parameters":{"id":43539,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43538,"mutability":"mutable","name":"value","nameLocation":"6741:5:119","nodeType":"VariableDeclaration","scope":43563,"src":"6733:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43537,"name":"uint256","nodeType":"ElementaryTypeName","src":"6733:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6732:15:119"},"returnParameters":{"id":43542,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43541,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43563,"src":"6771:7:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"},"typeName":{"id":43540,"name":"uint168","nodeType":"ElementaryTypeName","src":"6771:7:119","typeDescriptions":{"typeIdentifier":"t_uint168","typeString":"uint168"}},"visibility":"internal"}],"src":"6770:9:119"},"scope":44983,"src":"6714:218:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43590,"nodeType":"Block","src":"7289:152:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43571,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43566,"src":"7303:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":43574,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7316:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":43573,"name":"uint160","nodeType":"ElementaryTypeName","src":"7316:7:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"}],"id":43572,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"7311:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":43575,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7311:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint160","typeString":"type(uint160)"}},"id":43576,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7325:3:119","memberName":"max","nodeType":"MemberAccess","src":"7311:17:119","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"src":"7303:25:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43584,"nodeType":"IfStatement","src":"7299:105:119","trueBody":{"id":43583,"nodeType":"Block","src":"7330:74:119","statements":[{"errorCall":{"arguments":[{"hexValue":"313630","id":43579,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7382:3:119","typeDescriptions":{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},"value":"160"},{"id":43580,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43566,"src":"7387:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43578,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"7351:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":43581,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7351:42:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":43582,"nodeType":"RevertStatement","src":"7344:49:119"}]}},{"expression":{"arguments":[{"id":43587,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43566,"src":"7428:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43586,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7420:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":43585,"name":"uint160","nodeType":"ElementaryTypeName","src":"7420:7:119","typeDescriptions":{}}},"id":43588,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7420:14:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"functionReturnParameters":43570,"id":43589,"nodeType":"Return","src":"7413:21:119"}]},"documentation":{"id":43564,"nodeType":"StructuredDocumentation","src":"6938:280:119","text":" @dev Returns the downcasted uint160 from uint256, reverting on\n overflow (when the input is greater than largest uint160).\n Counterpart to Solidity's `uint160` operator.\n Requirements:\n - input must fit into 160 bits"},"id":43591,"implemented":true,"kind":"function","modifiers":[],"name":"toUint160","nameLocation":"7232:9:119","nodeType":"FunctionDefinition","parameters":{"id":43567,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43566,"mutability":"mutable","name":"value","nameLocation":"7250:5:119","nodeType":"VariableDeclaration","scope":43591,"src":"7242:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43565,"name":"uint256","nodeType":"ElementaryTypeName","src":"7242:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7241:15:119"},"returnParameters":{"id":43570,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43569,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43591,"src":"7280:7:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"},"typeName":{"id":43568,"name":"uint160","nodeType":"ElementaryTypeName","src":"7280:7:119","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"visibility":"internal"}],"src":"7279:9:119"},"scope":44983,"src":"7223:218:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43618,"nodeType":"Block","src":"7798:152:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43605,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43599,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43594,"src":"7812:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":43602,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7825:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"},"typeName":{"id":43601,"name":"uint152","nodeType":"ElementaryTypeName","src":"7825:7:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"}],"id":43600,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"7820:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":43603,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7820:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint152","typeString":"type(uint152)"}},"id":43604,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7834:3:119","memberName":"max","nodeType":"MemberAccess","src":"7820:17:119","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"src":"7812:25:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43612,"nodeType":"IfStatement","src":"7808:105:119","trueBody":{"id":43611,"nodeType":"Block","src":"7839:74:119","statements":[{"errorCall":{"arguments":[{"hexValue":"313532","id":43607,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7891:3:119","typeDescriptions":{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},"value":"152"},{"id":43608,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43594,"src":"7896:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43606,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"7860:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":43609,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7860:42:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":43610,"nodeType":"RevertStatement","src":"7853:49:119"}]}},{"expression":{"arguments":[{"id":43615,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43594,"src":"7937:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43614,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7929:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint152_$","typeString":"type(uint152)"},"typeName":{"id":43613,"name":"uint152","nodeType":"ElementaryTypeName","src":"7929:7:119","typeDescriptions":{}}},"id":43616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7929:14:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"functionReturnParameters":43598,"id":43617,"nodeType":"Return","src":"7922:21:119"}]},"documentation":{"id":43592,"nodeType":"StructuredDocumentation","src":"7447:280:119","text":" @dev Returns the downcasted uint152 from uint256, reverting on\n overflow (when the input is greater than largest uint152).\n Counterpart to Solidity's `uint152` operator.\n Requirements:\n - input must fit into 152 bits"},"id":43619,"implemented":true,"kind":"function","modifiers":[],"name":"toUint152","nameLocation":"7741:9:119","nodeType":"FunctionDefinition","parameters":{"id":43595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43594,"mutability":"mutable","name":"value","nameLocation":"7759:5:119","nodeType":"VariableDeclaration","scope":43619,"src":"7751:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43593,"name":"uint256","nodeType":"ElementaryTypeName","src":"7751:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7750:15:119"},"returnParameters":{"id":43598,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43597,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43619,"src":"7789:7:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"},"typeName":{"id":43596,"name":"uint152","nodeType":"ElementaryTypeName","src":"7789:7:119","typeDescriptions":{"typeIdentifier":"t_uint152","typeString":"uint152"}},"visibility":"internal"}],"src":"7788:9:119"},"scope":44983,"src":"7732:218:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43646,"nodeType":"Block","src":"8307:152:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43627,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43622,"src":"8321:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":43630,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8334:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"},"typeName":{"id":43629,"name":"uint144","nodeType":"ElementaryTypeName","src":"8334:7:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"}],"id":43628,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8329:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":43631,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8329:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint144","typeString":"type(uint144)"}},"id":43632,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8343:3:119","memberName":"max","nodeType":"MemberAccess","src":"8329:17:119","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"src":"8321:25:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43640,"nodeType":"IfStatement","src":"8317:105:119","trueBody":{"id":43639,"nodeType":"Block","src":"8348:74:119","statements":[{"errorCall":{"arguments":[{"hexValue":"313434","id":43635,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8400:3:119","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},"value":"144"},{"id":43636,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43622,"src":"8405:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43634,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"8369:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":43637,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8369:42:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":43638,"nodeType":"RevertStatement","src":"8362:49:119"}]}},{"expression":{"arguments":[{"id":43643,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43622,"src":"8446:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43642,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8438:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint144_$","typeString":"type(uint144)"},"typeName":{"id":43641,"name":"uint144","nodeType":"ElementaryTypeName","src":"8438:7:119","typeDescriptions":{}}},"id":43644,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8438:14:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"functionReturnParameters":43626,"id":43645,"nodeType":"Return","src":"8431:21:119"}]},"documentation":{"id":43620,"nodeType":"StructuredDocumentation","src":"7956:280:119","text":" @dev Returns the downcasted uint144 from uint256, reverting on\n overflow (when the input is greater than largest uint144).\n Counterpart to Solidity's `uint144` operator.\n Requirements:\n - input must fit into 144 bits"},"id":43647,"implemented":true,"kind":"function","modifiers":[],"name":"toUint144","nameLocation":"8250:9:119","nodeType":"FunctionDefinition","parameters":{"id":43623,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43622,"mutability":"mutable","name":"value","nameLocation":"8268:5:119","nodeType":"VariableDeclaration","scope":43647,"src":"8260:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43621,"name":"uint256","nodeType":"ElementaryTypeName","src":"8260:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8259:15:119"},"returnParameters":{"id":43626,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43625,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43647,"src":"8298:7:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"},"typeName":{"id":43624,"name":"uint144","nodeType":"ElementaryTypeName","src":"8298:7:119","typeDescriptions":{"typeIdentifier":"t_uint144","typeString":"uint144"}},"visibility":"internal"}],"src":"8297:9:119"},"scope":44983,"src":"8241:218:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43674,"nodeType":"Block","src":"8816:152:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43661,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43655,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43650,"src":"8830:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":43658,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8843:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"},"typeName":{"id":43657,"name":"uint136","nodeType":"ElementaryTypeName","src":"8843:7:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"}],"id":43656,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"8838:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":43659,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8838:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint136","typeString":"type(uint136)"}},"id":43660,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"8852:3:119","memberName":"max","nodeType":"MemberAccess","src":"8838:17:119","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"src":"8830:25:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43668,"nodeType":"IfStatement","src":"8826:105:119","trueBody":{"id":43667,"nodeType":"Block","src":"8857:74:119","statements":[{"errorCall":{"arguments":[{"hexValue":"313336","id":43663,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8909:3:119","typeDescriptions":{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},"value":"136"},{"id":43664,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43650,"src":"8914:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43662,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"8878:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":43665,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8878:42:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":43666,"nodeType":"RevertStatement","src":"8871:49:119"}]}},{"expression":{"arguments":[{"id":43671,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43650,"src":"8955:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43670,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8947:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint136_$","typeString":"type(uint136)"},"typeName":{"id":43669,"name":"uint136","nodeType":"ElementaryTypeName","src":"8947:7:119","typeDescriptions":{}}},"id":43672,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8947:14:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"functionReturnParameters":43654,"id":43673,"nodeType":"Return","src":"8940:21:119"}]},"documentation":{"id":43648,"nodeType":"StructuredDocumentation","src":"8465:280:119","text":" @dev Returns the downcasted uint136 from uint256, reverting on\n overflow (when the input is greater than largest uint136).\n Counterpart to Solidity's `uint136` operator.\n Requirements:\n - input must fit into 136 bits"},"id":43675,"implemented":true,"kind":"function","modifiers":[],"name":"toUint136","nameLocation":"8759:9:119","nodeType":"FunctionDefinition","parameters":{"id":43651,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43650,"mutability":"mutable","name":"value","nameLocation":"8777:5:119","nodeType":"VariableDeclaration","scope":43675,"src":"8769:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43649,"name":"uint256","nodeType":"ElementaryTypeName","src":"8769:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8768:15:119"},"returnParameters":{"id":43654,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43653,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43675,"src":"8807:7:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"},"typeName":{"id":43652,"name":"uint136","nodeType":"ElementaryTypeName","src":"8807:7:119","typeDescriptions":{"typeIdentifier":"t_uint136","typeString":"uint136"}},"visibility":"internal"}],"src":"8806:9:119"},"scope":44983,"src":"8750:218:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43702,"nodeType":"Block","src":"9325:152:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43683,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43678,"src":"9339:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":43686,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9352:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":43685,"name":"uint128","nodeType":"ElementaryTypeName","src":"9352:7:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"}],"id":43684,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9347:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":43687,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9347:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint128","typeString":"type(uint128)"}},"id":43688,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9361:3:119","memberName":"max","nodeType":"MemberAccess","src":"9347:17:119","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"src":"9339:25:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43696,"nodeType":"IfStatement","src":"9335:105:119","trueBody":{"id":43695,"nodeType":"Block","src":"9366:74:119","statements":[{"errorCall":{"arguments":[{"hexValue":"313238","id":43691,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9418:3:119","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},{"id":43692,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43678,"src":"9423:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43690,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"9387:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":43693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9387:42:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":43694,"nodeType":"RevertStatement","src":"9380:49:119"}]}},{"expression":{"arguments":[{"id":43699,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43678,"src":"9464:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43698,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9456:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint128_$","typeString":"type(uint128)"},"typeName":{"id":43697,"name":"uint128","nodeType":"ElementaryTypeName","src":"9456:7:119","typeDescriptions":{}}},"id":43700,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9456:14:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"functionReturnParameters":43682,"id":43701,"nodeType":"Return","src":"9449:21:119"}]},"documentation":{"id":43676,"nodeType":"StructuredDocumentation","src":"8974:280:119","text":" @dev Returns the downcasted uint128 from uint256, reverting on\n overflow (when the input is greater than largest uint128).\n Counterpart to Solidity's `uint128` operator.\n Requirements:\n - input must fit into 128 bits"},"id":43703,"implemented":true,"kind":"function","modifiers":[],"name":"toUint128","nameLocation":"9268:9:119","nodeType":"FunctionDefinition","parameters":{"id":43679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43678,"mutability":"mutable","name":"value","nameLocation":"9286:5:119","nodeType":"VariableDeclaration","scope":43703,"src":"9278:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43677,"name":"uint256","nodeType":"ElementaryTypeName","src":"9278:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9277:15:119"},"returnParameters":{"id":43682,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43681,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43703,"src":"9316:7:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"},"typeName":{"id":43680,"name":"uint128","nodeType":"ElementaryTypeName","src":"9316:7:119","typeDescriptions":{"typeIdentifier":"t_uint128","typeString":"uint128"}},"visibility":"internal"}],"src":"9315:9:119"},"scope":44983,"src":"9259:218:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43730,"nodeType":"Block","src":"9834:152:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43711,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43706,"src":"9848:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":43714,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9861:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"},"typeName":{"id":43713,"name":"uint120","nodeType":"ElementaryTypeName","src":"9861:7:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"}],"id":43712,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"9856:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":43715,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9856:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint120","typeString":"type(uint120)"}},"id":43716,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"9870:3:119","memberName":"max","nodeType":"MemberAccess","src":"9856:17:119","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"src":"9848:25:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43724,"nodeType":"IfStatement","src":"9844:105:119","trueBody":{"id":43723,"nodeType":"Block","src":"9875:74:119","statements":[{"errorCall":{"arguments":[{"hexValue":"313230","id":43719,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9927:3:119","typeDescriptions":{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},"value":"120"},{"id":43720,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43706,"src":"9932:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43718,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"9896:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":43721,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9896:42:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":43722,"nodeType":"RevertStatement","src":"9889:49:119"}]}},{"expression":{"arguments":[{"id":43727,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43706,"src":"9973:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43726,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9965:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint120_$","typeString":"type(uint120)"},"typeName":{"id":43725,"name":"uint120","nodeType":"ElementaryTypeName","src":"9965:7:119","typeDescriptions":{}}},"id":43728,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9965:14:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"functionReturnParameters":43710,"id":43729,"nodeType":"Return","src":"9958:21:119"}]},"documentation":{"id":43704,"nodeType":"StructuredDocumentation","src":"9483:280:119","text":" @dev Returns the downcasted uint120 from uint256, reverting on\n overflow (when the input is greater than largest uint120).\n Counterpart to Solidity's `uint120` operator.\n Requirements:\n - input must fit into 120 bits"},"id":43731,"implemented":true,"kind":"function","modifiers":[],"name":"toUint120","nameLocation":"9777:9:119","nodeType":"FunctionDefinition","parameters":{"id":43707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43706,"mutability":"mutable","name":"value","nameLocation":"9795:5:119","nodeType":"VariableDeclaration","scope":43731,"src":"9787:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43705,"name":"uint256","nodeType":"ElementaryTypeName","src":"9787:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9786:15:119"},"returnParameters":{"id":43710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43709,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43731,"src":"9825:7:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"},"typeName":{"id":43708,"name":"uint120","nodeType":"ElementaryTypeName","src":"9825:7:119","typeDescriptions":{"typeIdentifier":"t_uint120","typeString":"uint120"}},"visibility":"internal"}],"src":"9824:9:119"},"scope":44983,"src":"9768:218:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43758,"nodeType":"Block","src":"10343:152:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43745,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43739,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43734,"src":"10357:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":43742,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10370:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"},"typeName":{"id":43741,"name":"uint112","nodeType":"ElementaryTypeName","src":"10370:7:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"}],"id":43740,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10365:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":43743,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10365:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint112","typeString":"type(uint112)"}},"id":43744,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10379:3:119","memberName":"max","nodeType":"MemberAccess","src":"10365:17:119","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"src":"10357:25:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43752,"nodeType":"IfStatement","src":"10353:105:119","trueBody":{"id":43751,"nodeType":"Block","src":"10384:74:119","statements":[{"errorCall":{"arguments":[{"hexValue":"313132","id":43747,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10436:3:119","typeDescriptions":{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},"value":"112"},{"id":43748,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43734,"src":"10441:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43746,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"10405:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":43749,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10405:42:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":43750,"nodeType":"RevertStatement","src":"10398:49:119"}]}},{"expression":{"arguments":[{"id":43755,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43734,"src":"10482:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43754,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10474:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint112_$","typeString":"type(uint112)"},"typeName":{"id":43753,"name":"uint112","nodeType":"ElementaryTypeName","src":"10474:7:119","typeDescriptions":{}}},"id":43756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10474:14:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"functionReturnParameters":43738,"id":43757,"nodeType":"Return","src":"10467:21:119"}]},"documentation":{"id":43732,"nodeType":"StructuredDocumentation","src":"9992:280:119","text":" @dev Returns the downcasted uint112 from uint256, reverting on\n overflow (when the input is greater than largest uint112).\n Counterpart to Solidity's `uint112` operator.\n Requirements:\n - input must fit into 112 bits"},"id":43759,"implemented":true,"kind":"function","modifiers":[],"name":"toUint112","nameLocation":"10286:9:119","nodeType":"FunctionDefinition","parameters":{"id":43735,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43734,"mutability":"mutable","name":"value","nameLocation":"10304:5:119","nodeType":"VariableDeclaration","scope":43759,"src":"10296:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43733,"name":"uint256","nodeType":"ElementaryTypeName","src":"10296:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10295:15:119"},"returnParameters":{"id":43738,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43737,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43759,"src":"10334:7:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"},"typeName":{"id":43736,"name":"uint112","nodeType":"ElementaryTypeName","src":"10334:7:119","typeDescriptions":{"typeIdentifier":"t_uint112","typeString":"uint112"}},"visibility":"internal"}],"src":"10333:9:119"},"scope":44983,"src":"10277:218:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43786,"nodeType":"Block","src":"10852:152:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43767,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43762,"src":"10866:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":43770,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10879:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"},"typeName":{"id":43769,"name":"uint104","nodeType":"ElementaryTypeName","src":"10879:7:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"}],"id":43768,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"10874:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":43771,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10874:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint104","typeString":"type(uint104)"}},"id":43772,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10888:3:119","memberName":"max","nodeType":"MemberAccess","src":"10874:17:119","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"src":"10866:25:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43780,"nodeType":"IfStatement","src":"10862:105:119","trueBody":{"id":43779,"nodeType":"Block","src":"10893:74:119","statements":[{"errorCall":{"arguments":[{"hexValue":"313034","id":43775,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10945:3:119","typeDescriptions":{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},"value":"104"},{"id":43776,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43762,"src":"10950:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43774,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"10914:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":43777,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10914:42:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":43778,"nodeType":"RevertStatement","src":"10907:49:119"}]}},{"expression":{"arguments":[{"id":43783,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43762,"src":"10991:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43782,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10983:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint104_$","typeString":"type(uint104)"},"typeName":{"id":43781,"name":"uint104","nodeType":"ElementaryTypeName","src":"10983:7:119","typeDescriptions":{}}},"id":43784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10983:14:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"functionReturnParameters":43766,"id":43785,"nodeType":"Return","src":"10976:21:119"}]},"documentation":{"id":43760,"nodeType":"StructuredDocumentation","src":"10501:280:119","text":" @dev Returns the downcasted uint104 from uint256, reverting on\n overflow (when the input is greater than largest uint104).\n Counterpart to Solidity's `uint104` operator.\n Requirements:\n - input must fit into 104 bits"},"id":43787,"implemented":true,"kind":"function","modifiers":[],"name":"toUint104","nameLocation":"10795:9:119","nodeType":"FunctionDefinition","parameters":{"id":43763,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43762,"mutability":"mutable","name":"value","nameLocation":"10813:5:119","nodeType":"VariableDeclaration","scope":43787,"src":"10805:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43761,"name":"uint256","nodeType":"ElementaryTypeName","src":"10805:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10804:15:119"},"returnParameters":{"id":43766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43765,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43787,"src":"10843:7:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"},"typeName":{"id":43764,"name":"uint104","nodeType":"ElementaryTypeName","src":"10843:7:119","typeDescriptions":{"typeIdentifier":"t_uint104","typeString":"uint104"}},"visibility":"internal"}],"src":"10842:9:119"},"scope":44983,"src":"10786:218:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43814,"nodeType":"Block","src":"11355:149:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43801,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43795,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43790,"src":"11369:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":43798,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11382:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":43797,"name":"uint96","nodeType":"ElementaryTypeName","src":"11382:6:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"}],"id":43796,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"11377:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":43799,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11377:12:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint96","typeString":"type(uint96)"}},"id":43800,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11390:3:119","memberName":"max","nodeType":"MemberAccess","src":"11377:16:119","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"src":"11369:24:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43808,"nodeType":"IfStatement","src":"11365:103:119","trueBody":{"id":43807,"nodeType":"Block","src":"11395:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"3936","id":43803,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11447:2:119","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"value":"96"},{"id":43804,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43790,"src":"11451:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43802,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"11416:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":43805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11416:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":43806,"nodeType":"RevertStatement","src":"11409:48:119"}]}},{"expression":{"arguments":[{"id":43811,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43790,"src":"11491:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43810,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11484:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint96_$","typeString":"type(uint96)"},"typeName":{"id":43809,"name":"uint96","nodeType":"ElementaryTypeName","src":"11484:6:119","typeDescriptions":{}}},"id":43812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11484:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"functionReturnParameters":43794,"id":43813,"nodeType":"Return","src":"11477:20:119"}]},"documentation":{"id":43788,"nodeType":"StructuredDocumentation","src":"11010:276:119","text":" @dev Returns the downcasted uint96 from uint256, reverting on\n overflow (when the input is greater than largest uint96).\n Counterpart to Solidity's `uint96` operator.\n Requirements:\n - input must fit into 96 bits"},"id":43815,"implemented":true,"kind":"function","modifiers":[],"name":"toUint96","nameLocation":"11300:8:119","nodeType":"FunctionDefinition","parameters":{"id":43791,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43790,"mutability":"mutable","name":"value","nameLocation":"11317:5:119","nodeType":"VariableDeclaration","scope":43815,"src":"11309:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43789,"name":"uint256","nodeType":"ElementaryTypeName","src":"11309:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11308:15:119"},"returnParameters":{"id":43794,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43793,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43815,"src":"11347:6:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"},"typeName":{"id":43792,"name":"uint96","nodeType":"ElementaryTypeName","src":"11347:6:119","typeDescriptions":{"typeIdentifier":"t_uint96","typeString":"uint96"}},"visibility":"internal"}],"src":"11346:8:119"},"scope":44983,"src":"11291:213:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43842,"nodeType":"Block","src":"11855:149:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43823,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43818,"src":"11869:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":43826,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11882:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"},"typeName":{"id":43825,"name":"uint88","nodeType":"ElementaryTypeName","src":"11882:6:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"}],"id":43824,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"11877:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":43827,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11877:12:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint88","typeString":"type(uint88)"}},"id":43828,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"11890:3:119","memberName":"max","nodeType":"MemberAccess","src":"11877:16:119","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"src":"11869:24:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43836,"nodeType":"IfStatement","src":"11865:103:119","trueBody":{"id":43835,"nodeType":"Block","src":"11895:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"3838","id":43831,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11947:2:119","typeDescriptions":{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},"value":"88"},{"id":43832,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43818,"src":"11951:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43830,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"11916:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":43833,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11916:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":43834,"nodeType":"RevertStatement","src":"11909:48:119"}]}},{"expression":{"arguments":[{"id":43839,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43818,"src":"11991:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43838,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11984:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint88_$","typeString":"type(uint88)"},"typeName":{"id":43837,"name":"uint88","nodeType":"ElementaryTypeName","src":"11984:6:119","typeDescriptions":{}}},"id":43840,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11984:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"functionReturnParameters":43822,"id":43841,"nodeType":"Return","src":"11977:20:119"}]},"documentation":{"id":43816,"nodeType":"StructuredDocumentation","src":"11510:276:119","text":" @dev Returns the downcasted uint88 from uint256, reverting on\n overflow (when the input is greater than largest uint88).\n Counterpart to Solidity's `uint88` operator.\n Requirements:\n - input must fit into 88 bits"},"id":43843,"implemented":true,"kind":"function","modifiers":[],"name":"toUint88","nameLocation":"11800:8:119","nodeType":"FunctionDefinition","parameters":{"id":43819,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43818,"mutability":"mutable","name":"value","nameLocation":"11817:5:119","nodeType":"VariableDeclaration","scope":43843,"src":"11809:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43817,"name":"uint256","nodeType":"ElementaryTypeName","src":"11809:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11808:15:119"},"returnParameters":{"id":43822,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43821,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43843,"src":"11847:6:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"},"typeName":{"id":43820,"name":"uint88","nodeType":"ElementaryTypeName","src":"11847:6:119","typeDescriptions":{"typeIdentifier":"t_uint88","typeString":"uint88"}},"visibility":"internal"}],"src":"11846:8:119"},"scope":44983,"src":"11791:213:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43870,"nodeType":"Block","src":"12355:149:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43851,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43846,"src":"12369:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":43854,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12382:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"},"typeName":{"id":43853,"name":"uint80","nodeType":"ElementaryTypeName","src":"12382:6:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"}],"id":43852,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"12377:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":43855,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12377:12:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint80","typeString":"type(uint80)"}},"id":43856,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12390:3:119","memberName":"max","nodeType":"MemberAccess","src":"12377:16:119","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"src":"12369:24:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43864,"nodeType":"IfStatement","src":"12365:103:119","trueBody":{"id":43863,"nodeType":"Block","src":"12395:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"3830","id":43859,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12447:2:119","typeDescriptions":{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},"value":"80"},{"id":43860,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43846,"src":"12451:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43858,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"12416:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":43861,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12416:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":43862,"nodeType":"RevertStatement","src":"12409:48:119"}]}},{"expression":{"arguments":[{"id":43867,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43846,"src":"12491:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43866,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12484:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint80_$","typeString":"type(uint80)"},"typeName":{"id":43865,"name":"uint80","nodeType":"ElementaryTypeName","src":"12484:6:119","typeDescriptions":{}}},"id":43868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12484:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"functionReturnParameters":43850,"id":43869,"nodeType":"Return","src":"12477:20:119"}]},"documentation":{"id":43844,"nodeType":"StructuredDocumentation","src":"12010:276:119","text":" @dev Returns the downcasted uint80 from uint256, reverting on\n overflow (when the input is greater than largest uint80).\n Counterpart to Solidity's `uint80` operator.\n Requirements:\n - input must fit into 80 bits"},"id":43871,"implemented":true,"kind":"function","modifiers":[],"name":"toUint80","nameLocation":"12300:8:119","nodeType":"FunctionDefinition","parameters":{"id":43847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43846,"mutability":"mutable","name":"value","nameLocation":"12317:5:119","nodeType":"VariableDeclaration","scope":43871,"src":"12309:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43845,"name":"uint256","nodeType":"ElementaryTypeName","src":"12309:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12308:15:119"},"returnParameters":{"id":43850,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43849,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43871,"src":"12347:6:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"},"typeName":{"id":43848,"name":"uint80","nodeType":"ElementaryTypeName","src":"12347:6:119","typeDescriptions":{"typeIdentifier":"t_uint80","typeString":"uint80"}},"visibility":"internal"}],"src":"12346:8:119"},"scope":44983,"src":"12291:213:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43898,"nodeType":"Block","src":"12855:149:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43879,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43874,"src":"12869:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":43882,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12882:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"},"typeName":{"id":43881,"name":"uint72","nodeType":"ElementaryTypeName","src":"12882:6:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"}],"id":43880,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"12877:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":43883,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12877:12:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint72","typeString":"type(uint72)"}},"id":43884,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"12890:3:119","memberName":"max","nodeType":"MemberAccess","src":"12877:16:119","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"src":"12869:24:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43892,"nodeType":"IfStatement","src":"12865:103:119","trueBody":{"id":43891,"nodeType":"Block","src":"12895:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"3732","id":43887,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12947:2:119","typeDescriptions":{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},"value":"72"},{"id":43888,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43874,"src":"12951:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43886,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"12916:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":43889,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12916:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":43890,"nodeType":"RevertStatement","src":"12909:48:119"}]}},{"expression":{"arguments":[{"id":43895,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43874,"src":"12991:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43894,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12984:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint72_$","typeString":"type(uint72)"},"typeName":{"id":43893,"name":"uint72","nodeType":"ElementaryTypeName","src":"12984:6:119","typeDescriptions":{}}},"id":43896,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12984:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"functionReturnParameters":43878,"id":43897,"nodeType":"Return","src":"12977:20:119"}]},"documentation":{"id":43872,"nodeType":"StructuredDocumentation","src":"12510:276:119","text":" @dev Returns the downcasted uint72 from uint256, reverting on\n overflow (when the input is greater than largest uint72).\n Counterpart to Solidity's `uint72` operator.\n Requirements:\n - input must fit into 72 bits"},"id":43899,"implemented":true,"kind":"function","modifiers":[],"name":"toUint72","nameLocation":"12800:8:119","nodeType":"FunctionDefinition","parameters":{"id":43875,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43874,"mutability":"mutable","name":"value","nameLocation":"12817:5:119","nodeType":"VariableDeclaration","scope":43899,"src":"12809:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43873,"name":"uint256","nodeType":"ElementaryTypeName","src":"12809:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12808:15:119"},"returnParameters":{"id":43878,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43877,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43899,"src":"12847:6:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"},"typeName":{"id":43876,"name":"uint72","nodeType":"ElementaryTypeName","src":"12847:6:119","typeDescriptions":{"typeIdentifier":"t_uint72","typeString":"uint72"}},"visibility":"internal"}],"src":"12846:8:119"},"scope":44983,"src":"12791:213:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43926,"nodeType":"Block","src":"13355:149:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43907,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43902,"src":"13369:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":43910,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13382:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":43909,"name":"uint64","nodeType":"ElementaryTypeName","src":"13382:6:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"}],"id":43908,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"13377:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":43911,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13377:12:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint64","typeString":"type(uint64)"}},"id":43912,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13390:3:119","memberName":"max","nodeType":"MemberAccess","src":"13377:16:119","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"src":"13369:24:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43920,"nodeType":"IfStatement","src":"13365:103:119","trueBody":{"id":43919,"nodeType":"Block","src":"13395:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"3634","id":43915,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13447:2:119","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},{"id":43916,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43902,"src":"13451:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43914,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"13416:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":43917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13416:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":43918,"nodeType":"RevertStatement","src":"13409:48:119"}]}},{"expression":{"arguments":[{"id":43923,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43902,"src":"13491:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43922,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13484:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint64_$","typeString":"type(uint64)"},"typeName":{"id":43921,"name":"uint64","nodeType":"ElementaryTypeName","src":"13484:6:119","typeDescriptions":{}}},"id":43924,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13484:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"functionReturnParameters":43906,"id":43925,"nodeType":"Return","src":"13477:20:119"}]},"documentation":{"id":43900,"nodeType":"StructuredDocumentation","src":"13010:276:119","text":" @dev Returns the downcasted uint64 from uint256, reverting on\n overflow (when the input is greater than largest uint64).\n Counterpart to Solidity's `uint64` operator.\n Requirements:\n - input must fit into 64 bits"},"id":43927,"implemented":true,"kind":"function","modifiers":[],"name":"toUint64","nameLocation":"13300:8:119","nodeType":"FunctionDefinition","parameters":{"id":43903,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43902,"mutability":"mutable","name":"value","nameLocation":"13317:5:119","nodeType":"VariableDeclaration","scope":43927,"src":"13309:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43901,"name":"uint256","nodeType":"ElementaryTypeName","src":"13309:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13308:15:119"},"returnParameters":{"id":43906,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43905,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43927,"src":"13347:6:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"},"typeName":{"id":43904,"name":"uint64","nodeType":"ElementaryTypeName","src":"13347:6:119","typeDescriptions":{"typeIdentifier":"t_uint64","typeString":"uint64"}},"visibility":"internal"}],"src":"13346:8:119"},"scope":44983,"src":"13291:213:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43954,"nodeType":"Block","src":"13855:149:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43935,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43930,"src":"13869:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":43938,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13882:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"},"typeName":{"id":43937,"name":"uint56","nodeType":"ElementaryTypeName","src":"13882:6:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"}],"id":43936,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"13877:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":43939,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13877:12:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint56","typeString":"type(uint56)"}},"id":43940,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"13890:3:119","memberName":"max","nodeType":"MemberAccess","src":"13877:16:119","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"src":"13869:24:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43948,"nodeType":"IfStatement","src":"13865:103:119","trueBody":{"id":43947,"nodeType":"Block","src":"13895:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"3536","id":43943,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13947:2:119","typeDescriptions":{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},"value":"56"},{"id":43944,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43930,"src":"13951:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43942,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"13916:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":43945,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13916:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":43946,"nodeType":"RevertStatement","src":"13909:48:119"}]}},{"expression":{"arguments":[{"id":43951,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43930,"src":"13991:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43950,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13984:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint56_$","typeString":"type(uint56)"},"typeName":{"id":43949,"name":"uint56","nodeType":"ElementaryTypeName","src":"13984:6:119","typeDescriptions":{}}},"id":43952,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13984:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"functionReturnParameters":43934,"id":43953,"nodeType":"Return","src":"13977:20:119"}]},"documentation":{"id":43928,"nodeType":"StructuredDocumentation","src":"13510:276:119","text":" @dev Returns the downcasted uint56 from uint256, reverting on\n overflow (when the input is greater than largest uint56).\n Counterpart to Solidity's `uint56` operator.\n Requirements:\n - input must fit into 56 bits"},"id":43955,"implemented":true,"kind":"function","modifiers":[],"name":"toUint56","nameLocation":"13800:8:119","nodeType":"FunctionDefinition","parameters":{"id":43931,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43930,"mutability":"mutable","name":"value","nameLocation":"13817:5:119","nodeType":"VariableDeclaration","scope":43955,"src":"13809:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43929,"name":"uint256","nodeType":"ElementaryTypeName","src":"13809:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13808:15:119"},"returnParameters":{"id":43934,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43933,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43955,"src":"13847:6:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"},"typeName":{"id":43932,"name":"uint56","nodeType":"ElementaryTypeName","src":"13847:6:119","typeDescriptions":{"typeIdentifier":"t_uint56","typeString":"uint56"}},"visibility":"internal"}],"src":"13846:8:119"},"scope":44983,"src":"13791:213:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":43982,"nodeType":"Block","src":"14355:149:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43963,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43958,"src":"14369:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":43966,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14382:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"},"typeName":{"id":43965,"name":"uint48","nodeType":"ElementaryTypeName","src":"14382:6:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"}],"id":43964,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"14377:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":43967,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14377:12:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint48","typeString":"type(uint48)"}},"id":43968,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14390:3:119","memberName":"max","nodeType":"MemberAccess","src":"14377:16:119","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"src":"14369:24:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":43976,"nodeType":"IfStatement","src":"14365:103:119","trueBody":{"id":43975,"nodeType":"Block","src":"14395:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"3438","id":43971,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14447:2:119","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},{"id":43972,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43958,"src":"14451:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43970,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"14416:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":43973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14416:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":43974,"nodeType":"RevertStatement","src":"14409:48:119"}]}},{"expression":{"arguments":[{"id":43979,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43958,"src":"14491:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43978,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14484:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint48_$","typeString":"type(uint48)"},"typeName":{"id":43977,"name":"uint48","nodeType":"ElementaryTypeName","src":"14484:6:119","typeDescriptions":{}}},"id":43980,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14484:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"functionReturnParameters":43962,"id":43981,"nodeType":"Return","src":"14477:20:119"}]},"documentation":{"id":43956,"nodeType":"StructuredDocumentation","src":"14010:276:119","text":" @dev Returns the downcasted uint48 from uint256, reverting on\n overflow (when the input is greater than largest uint48).\n Counterpart to Solidity's `uint48` operator.\n Requirements:\n - input must fit into 48 bits"},"id":43983,"implemented":true,"kind":"function","modifiers":[],"name":"toUint48","nameLocation":"14300:8:119","nodeType":"FunctionDefinition","parameters":{"id":43959,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43958,"mutability":"mutable","name":"value","nameLocation":"14317:5:119","nodeType":"VariableDeclaration","scope":43983,"src":"14309:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43957,"name":"uint256","nodeType":"ElementaryTypeName","src":"14309:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14308:15:119"},"returnParameters":{"id":43962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43961,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":43983,"src":"14347:6:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":43960,"name":"uint48","nodeType":"ElementaryTypeName","src":"14347:6:119","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"14346:8:119"},"scope":44983,"src":"14291:213:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44010,"nodeType":"Block","src":"14855:149:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":43997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":43991,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43986,"src":"14869:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":43994,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14882:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":43993,"name":"uint40","nodeType":"ElementaryTypeName","src":"14882:6:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"}],"id":43992,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"14877:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":43995,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14877:12:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint40","typeString":"type(uint40)"}},"id":43996,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14890:3:119","memberName":"max","nodeType":"MemberAccess","src":"14877:16:119","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"src":"14869:24:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44004,"nodeType":"IfStatement","src":"14865:103:119","trueBody":{"id":44003,"nodeType":"Block","src":"14895:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"3430","id":43999,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14947:2:119","typeDescriptions":{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},"value":"40"},{"id":44000,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43986,"src":"14951:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":43998,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"14916:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":44001,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14916:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44002,"nodeType":"RevertStatement","src":"14909:48:119"}]}},{"expression":{"arguments":[{"id":44007,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43986,"src":"14991:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":44006,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14984:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint40_$","typeString":"type(uint40)"},"typeName":{"id":44005,"name":"uint40","nodeType":"ElementaryTypeName","src":"14984:6:119","typeDescriptions":{}}},"id":44008,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14984:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"functionReturnParameters":43990,"id":44009,"nodeType":"Return","src":"14977:20:119"}]},"documentation":{"id":43984,"nodeType":"StructuredDocumentation","src":"14510:276:119","text":" @dev Returns the downcasted uint40 from uint256, reverting on\n overflow (when the input is greater than largest uint40).\n Counterpart to Solidity's `uint40` operator.\n Requirements:\n - input must fit into 40 bits"},"id":44011,"implemented":true,"kind":"function","modifiers":[],"name":"toUint40","nameLocation":"14800:8:119","nodeType":"FunctionDefinition","parameters":{"id":43987,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43986,"mutability":"mutable","name":"value","nameLocation":"14817:5:119","nodeType":"VariableDeclaration","scope":44011,"src":"14809:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":43985,"name":"uint256","nodeType":"ElementaryTypeName","src":"14809:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14808:15:119"},"returnParameters":{"id":43990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43989,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44011,"src":"14847:6:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"},"typeName":{"id":43988,"name":"uint40","nodeType":"ElementaryTypeName","src":"14847:6:119","typeDescriptions":{"typeIdentifier":"t_uint40","typeString":"uint40"}},"visibility":"internal"}],"src":"14846:8:119"},"scope":44983,"src":"14791:213:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44038,"nodeType":"Block","src":"15355:149:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44019,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44014,"src":"15369:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":44022,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15382:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":44021,"name":"uint32","nodeType":"ElementaryTypeName","src":"15382:6:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"}],"id":44020,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"15377:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":44023,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15377:12:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint32","typeString":"type(uint32)"}},"id":44024,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15390:3:119","memberName":"max","nodeType":"MemberAccess","src":"15377:16:119","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"src":"15369:24:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44032,"nodeType":"IfStatement","src":"15365:103:119","trueBody":{"id":44031,"nodeType":"Block","src":"15395:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"3332","id":44027,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15447:2:119","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"id":44028,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44014,"src":"15451:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":44026,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"15416:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":44029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15416:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44030,"nodeType":"RevertStatement","src":"15409:48:119"}]}},{"expression":{"arguments":[{"id":44035,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44014,"src":"15491:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":44034,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15484:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint32_$","typeString":"type(uint32)"},"typeName":{"id":44033,"name":"uint32","nodeType":"ElementaryTypeName","src":"15484:6:119","typeDescriptions":{}}},"id":44036,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15484:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"functionReturnParameters":44018,"id":44037,"nodeType":"Return","src":"15477:20:119"}]},"documentation":{"id":44012,"nodeType":"StructuredDocumentation","src":"15010:276:119","text":" @dev Returns the downcasted uint32 from uint256, reverting on\n overflow (when the input is greater than largest uint32).\n Counterpart to Solidity's `uint32` operator.\n Requirements:\n - input must fit into 32 bits"},"id":44039,"implemented":true,"kind":"function","modifiers":[],"name":"toUint32","nameLocation":"15300:8:119","nodeType":"FunctionDefinition","parameters":{"id":44015,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44014,"mutability":"mutable","name":"value","nameLocation":"15317:5:119","nodeType":"VariableDeclaration","scope":44039,"src":"15309:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44013,"name":"uint256","nodeType":"ElementaryTypeName","src":"15309:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15308:15:119"},"returnParameters":{"id":44018,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44017,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44039,"src":"15347:6:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":44016,"name":"uint32","nodeType":"ElementaryTypeName","src":"15347:6:119","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"}],"src":"15346:8:119"},"scope":44983,"src":"15291:213:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44066,"nodeType":"Block","src":"15855:149:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44047,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44042,"src":"15869:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":44050,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15882:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"},"typeName":{"id":44049,"name":"uint24","nodeType":"ElementaryTypeName","src":"15882:6:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"}],"id":44048,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"15877:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":44051,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15877:12:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint24","typeString":"type(uint24)"}},"id":44052,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"15890:3:119","memberName":"max","nodeType":"MemberAccess","src":"15877:16:119","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"src":"15869:24:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44060,"nodeType":"IfStatement","src":"15865:103:119","trueBody":{"id":44059,"nodeType":"Block","src":"15895:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"3234","id":44055,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15947:2:119","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},{"id":44056,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44042,"src":"15951:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":44054,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"15916:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":44057,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15916:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44058,"nodeType":"RevertStatement","src":"15909:48:119"}]}},{"expression":{"arguments":[{"id":44063,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44042,"src":"15991:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":44062,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15984:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint24_$","typeString":"type(uint24)"},"typeName":{"id":44061,"name":"uint24","nodeType":"ElementaryTypeName","src":"15984:6:119","typeDescriptions":{}}},"id":44064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15984:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"functionReturnParameters":44046,"id":44065,"nodeType":"Return","src":"15977:20:119"}]},"documentation":{"id":44040,"nodeType":"StructuredDocumentation","src":"15510:276:119","text":" @dev Returns the downcasted uint24 from uint256, reverting on\n overflow (when the input is greater than largest uint24).\n Counterpart to Solidity's `uint24` operator.\n Requirements:\n - input must fit into 24 bits"},"id":44067,"implemented":true,"kind":"function","modifiers":[],"name":"toUint24","nameLocation":"15800:8:119","nodeType":"FunctionDefinition","parameters":{"id":44043,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44042,"mutability":"mutable","name":"value","nameLocation":"15817:5:119","nodeType":"VariableDeclaration","scope":44067,"src":"15809:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44041,"name":"uint256","nodeType":"ElementaryTypeName","src":"15809:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15808:15:119"},"returnParameters":{"id":44046,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44045,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44067,"src":"15847:6:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"},"typeName":{"id":44044,"name":"uint24","nodeType":"ElementaryTypeName","src":"15847:6:119","typeDescriptions":{"typeIdentifier":"t_uint24","typeString":"uint24"}},"visibility":"internal"}],"src":"15846:8:119"},"scope":44983,"src":"15791:213:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44094,"nodeType":"Block","src":"16355:149:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44075,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44070,"src":"16369:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":44078,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16382:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":44077,"name":"uint16","nodeType":"ElementaryTypeName","src":"16382:6:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"}],"id":44076,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"16377:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":44079,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16377:12:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint16","typeString":"type(uint16)"}},"id":44080,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16390:3:119","memberName":"max","nodeType":"MemberAccess","src":"16377:16:119","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"src":"16369:24:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44088,"nodeType":"IfStatement","src":"16365:103:119","trueBody":{"id":44087,"nodeType":"Block","src":"16395:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"3136","id":44083,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16447:2:119","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},{"id":44084,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44070,"src":"16451:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":44082,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"16416:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":44085,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16416:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44086,"nodeType":"RevertStatement","src":"16409:48:119"}]}},{"expression":{"arguments":[{"id":44091,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44070,"src":"16491:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":44090,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16484:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint16_$","typeString":"type(uint16)"},"typeName":{"id":44089,"name":"uint16","nodeType":"ElementaryTypeName","src":"16484:6:119","typeDescriptions":{}}},"id":44092,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16484:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"functionReturnParameters":44074,"id":44093,"nodeType":"Return","src":"16477:20:119"}]},"documentation":{"id":44068,"nodeType":"StructuredDocumentation","src":"16010:276:119","text":" @dev Returns the downcasted uint16 from uint256, reverting on\n overflow (when the input is greater than largest uint16).\n Counterpart to Solidity's `uint16` operator.\n Requirements:\n - input must fit into 16 bits"},"id":44095,"implemented":true,"kind":"function","modifiers":[],"name":"toUint16","nameLocation":"16300:8:119","nodeType":"FunctionDefinition","parameters":{"id":44071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44070,"mutability":"mutable","name":"value","nameLocation":"16317:5:119","nodeType":"VariableDeclaration","scope":44095,"src":"16309:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44069,"name":"uint256","nodeType":"ElementaryTypeName","src":"16309:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16308:15:119"},"returnParameters":{"id":44074,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44073,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44095,"src":"16347:6:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"},"typeName":{"id":44072,"name":"uint16","nodeType":"ElementaryTypeName","src":"16347:6:119","typeDescriptions":{"typeIdentifier":"t_uint16","typeString":"uint16"}},"visibility":"internal"}],"src":"16346:8:119"},"scope":44983,"src":"16291:213:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44122,"nodeType":"Block","src":"16849:146:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44103,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44098,"src":"16863:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"expression":{"arguments":[{"id":44106,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16876:5:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":44105,"name":"uint8","nodeType":"ElementaryTypeName","src":"16876:5:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"}],"id":44104,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"16871:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":44107,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16871:11:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint8","typeString":"type(uint8)"}},"id":44108,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"16883:3:119","memberName":"max","nodeType":"MemberAccess","src":"16871:15:119","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"16863:23:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44116,"nodeType":"IfStatement","src":"16859:101:119","trueBody":{"id":44115,"nodeType":"Block","src":"16888:72:119","statements":[{"errorCall":{"arguments":[{"hexValue":"38","id":44111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16940:1:119","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},{"id":44112,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44098,"src":"16943:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":44110,"name":"SafeCastOverflowedUintDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43238,"src":"16909:30:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_uint256_$returns$_t_error_$","typeString":"function (uint8,uint256) pure returns (error)"}},"id":44113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16909:40:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44114,"nodeType":"RevertStatement","src":"16902:47:119"}]}},{"expression":{"arguments":[{"id":44119,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44098,"src":"16982:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":44118,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16976:5:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":44117,"name":"uint8","nodeType":"ElementaryTypeName","src":"16976:5:119","typeDescriptions":{}}},"id":44120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16976:12:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":44102,"id":44121,"nodeType":"Return","src":"16969:19:119"}]},"documentation":{"id":44096,"nodeType":"StructuredDocumentation","src":"16510:272:119","text":" @dev Returns the downcasted uint8 from uint256, reverting on\n overflow (when the input is greater than largest uint8).\n Counterpart to Solidity's `uint8` operator.\n Requirements:\n - input must fit into 8 bits"},"id":44123,"implemented":true,"kind":"function","modifiers":[],"name":"toUint8","nameLocation":"16796:7:119","nodeType":"FunctionDefinition","parameters":{"id":44099,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44098,"mutability":"mutable","name":"value","nameLocation":"16812:5:119","nodeType":"VariableDeclaration","scope":44123,"src":"16804:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44097,"name":"uint256","nodeType":"ElementaryTypeName","src":"16804:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16803:15:119"},"returnParameters":{"id":44102,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44101,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44123,"src":"16842:5:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":44100,"name":"uint8","nodeType":"ElementaryTypeName","src":"16842:5:119","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"16841:7:119"},"scope":44983,"src":"16787:208:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44145,"nodeType":"Block","src":"17231:128:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44131,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44126,"src":"17245:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":44132,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17253:1:119","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"17245:9:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44139,"nodeType":"IfStatement","src":"17241:81:119","trueBody":{"id":44138,"nodeType":"Block","src":"17256:66:119","statements":[{"errorCall":{"arguments":[{"id":44135,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44126,"src":"17305:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44134,"name":"SafeCastOverflowedIntToUint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43243,"src":"17277:27:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_int256_$returns$_t_error_$","typeString":"function (int256) pure returns (error)"}},"id":44136,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17277:34:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44137,"nodeType":"RevertStatement","src":"17270:41:119"}]}},{"expression":{"arguments":[{"id":44142,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44126,"src":"17346:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44141,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17338:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":44140,"name":"uint256","nodeType":"ElementaryTypeName","src":"17338:7:119","typeDescriptions":{}}},"id":44143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17338:14:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":44130,"id":44144,"nodeType":"Return","src":"17331:21:119"}]},"documentation":{"id":44124,"nodeType":"StructuredDocumentation","src":"17001:160:119","text":" @dev Converts a signed int256 into an unsigned uint256.\n Requirements:\n - input must be greater than or equal to 0."},"id":44146,"implemented":true,"kind":"function","modifiers":[],"name":"toUint256","nameLocation":"17175:9:119","nodeType":"FunctionDefinition","parameters":{"id":44127,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44126,"mutability":"mutable","name":"value","nameLocation":"17192:5:119","nodeType":"VariableDeclaration","scope":44146,"src":"17185:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44125,"name":"int256","nodeType":"ElementaryTypeName","src":"17185:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"17184:14:119"},"returnParameters":{"id":44130,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44129,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44146,"src":"17222:7:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44128,"name":"uint256","nodeType":"ElementaryTypeName","src":"17222:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17221:9:119"},"scope":44983,"src":"17166:193:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44171,"nodeType":"Block","src":"17756:150:119","statements":[{"expression":{"id":44159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44154,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44152,"src":"17766:10:119","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44157,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44149,"src":"17786:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44156,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17779:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int248_$","typeString":"type(int248)"},"typeName":{"id":44155,"name":"int248","nodeType":"ElementaryTypeName","src":"17779:6:119","typeDescriptions":{}}},"id":44158,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17779:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"src":"17766:26:119","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"id":44160,"nodeType":"ExpressionStatement","src":"17766:26:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44161,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44152,"src":"17806:10:119","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44162,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44149,"src":"17820:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"17806:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44170,"nodeType":"IfStatement","src":"17802:98:119","trueBody":{"id":44169,"nodeType":"Block","src":"17827:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"323438","id":44165,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17878:3:119","typeDescriptions":{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},"value":"248"},{"id":44166,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44149,"src":"17883:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_248_by_1","typeString":"int_const 248"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44164,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"17848:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44167,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17848:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44168,"nodeType":"RevertStatement","src":"17841:48:119"}]}}]},"documentation":{"id":44147,"nodeType":"StructuredDocumentation","src":"17365:312:119","text":" @dev Returns the downcasted int248 from int256, reverting on\n overflow (when the input is less than smallest int248 or\n greater than largest int248).\n Counterpart to Solidity's `int248` operator.\n Requirements:\n - input must fit into 248 bits"},"id":44172,"implemented":true,"kind":"function","modifiers":[],"name":"toInt248","nameLocation":"17691:8:119","nodeType":"FunctionDefinition","parameters":{"id":44150,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44149,"mutability":"mutable","name":"value","nameLocation":"17707:5:119","nodeType":"VariableDeclaration","scope":44172,"src":"17700:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44148,"name":"int256","nodeType":"ElementaryTypeName","src":"17700:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"17699:14:119"},"returnParameters":{"id":44153,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44152,"mutability":"mutable","name":"downcasted","nameLocation":"17744:10:119","nodeType":"VariableDeclaration","scope":44172,"src":"17737:17:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"},"typeName":{"id":44151,"name":"int248","nodeType":"ElementaryTypeName","src":"17737:6:119","typeDescriptions":{"typeIdentifier":"t_int248","typeString":"int248"}},"visibility":"internal"}],"src":"17736:19:119"},"scope":44983,"src":"17682:224:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44197,"nodeType":"Block","src":"18303:150:119","statements":[{"expression":{"id":44185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44180,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44178,"src":"18313:10:119","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44183,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44175,"src":"18333:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44182,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18326:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int240_$","typeString":"type(int240)"},"typeName":{"id":44181,"name":"int240","nodeType":"ElementaryTypeName","src":"18326:6:119","typeDescriptions":{}}},"id":44184,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18326:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"src":"18313:26:119","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"id":44186,"nodeType":"ExpressionStatement","src":"18313:26:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44187,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44178,"src":"18353:10:119","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44188,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44175,"src":"18367:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18353:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44196,"nodeType":"IfStatement","src":"18349:98:119","trueBody":{"id":44195,"nodeType":"Block","src":"18374:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"323430","id":44191,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18425:3:119","typeDescriptions":{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},"value":"240"},{"id":44192,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44175,"src":"18430:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_240_by_1","typeString":"int_const 240"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44190,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"18395:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44193,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18395:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44194,"nodeType":"RevertStatement","src":"18388:48:119"}]}}]},"documentation":{"id":44173,"nodeType":"StructuredDocumentation","src":"17912:312:119","text":" @dev Returns the downcasted int240 from int256, reverting on\n overflow (when the input is less than smallest int240 or\n greater than largest int240).\n Counterpart to Solidity's `int240` operator.\n Requirements:\n - input must fit into 240 bits"},"id":44198,"implemented":true,"kind":"function","modifiers":[],"name":"toInt240","nameLocation":"18238:8:119","nodeType":"FunctionDefinition","parameters":{"id":44176,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44175,"mutability":"mutable","name":"value","nameLocation":"18254:5:119","nodeType":"VariableDeclaration","scope":44198,"src":"18247:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44174,"name":"int256","nodeType":"ElementaryTypeName","src":"18247:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"18246:14:119"},"returnParameters":{"id":44179,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44178,"mutability":"mutable","name":"downcasted","nameLocation":"18291:10:119","nodeType":"VariableDeclaration","scope":44198,"src":"18284:17:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"},"typeName":{"id":44177,"name":"int240","nodeType":"ElementaryTypeName","src":"18284:6:119","typeDescriptions":{"typeIdentifier":"t_int240","typeString":"int240"}},"visibility":"internal"}],"src":"18283:19:119"},"scope":44983,"src":"18229:224:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44223,"nodeType":"Block","src":"18850:150:119","statements":[{"expression":{"id":44211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44206,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44204,"src":"18860:10:119","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44209,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44201,"src":"18880:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44208,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18873:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int232_$","typeString":"type(int232)"},"typeName":{"id":44207,"name":"int232","nodeType":"ElementaryTypeName","src":"18873:6:119","typeDescriptions":{}}},"id":44210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18873:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"src":"18860:26:119","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"id":44212,"nodeType":"ExpressionStatement","src":"18860:26:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44215,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44213,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44204,"src":"18900:10:119","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44214,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44201,"src":"18914:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"18900:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44222,"nodeType":"IfStatement","src":"18896:98:119","trueBody":{"id":44221,"nodeType":"Block","src":"18921:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"323332","id":44217,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18972:3:119","typeDescriptions":{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},"value":"232"},{"id":44218,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44201,"src":"18977:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_232_by_1","typeString":"int_const 232"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44216,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"18942:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18942:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44220,"nodeType":"RevertStatement","src":"18935:48:119"}]}}]},"documentation":{"id":44199,"nodeType":"StructuredDocumentation","src":"18459:312:119","text":" @dev Returns the downcasted int232 from int256, reverting on\n overflow (when the input is less than smallest int232 or\n greater than largest int232).\n Counterpart to Solidity's `int232` operator.\n Requirements:\n - input must fit into 232 bits"},"id":44224,"implemented":true,"kind":"function","modifiers":[],"name":"toInt232","nameLocation":"18785:8:119","nodeType":"FunctionDefinition","parameters":{"id":44202,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44201,"mutability":"mutable","name":"value","nameLocation":"18801:5:119","nodeType":"VariableDeclaration","scope":44224,"src":"18794:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44200,"name":"int256","nodeType":"ElementaryTypeName","src":"18794:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"18793:14:119"},"returnParameters":{"id":44205,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44204,"mutability":"mutable","name":"downcasted","nameLocation":"18838:10:119","nodeType":"VariableDeclaration","scope":44224,"src":"18831:17:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"},"typeName":{"id":44203,"name":"int232","nodeType":"ElementaryTypeName","src":"18831:6:119","typeDescriptions":{"typeIdentifier":"t_int232","typeString":"int232"}},"visibility":"internal"}],"src":"18830:19:119"},"scope":44983,"src":"18776:224:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44249,"nodeType":"Block","src":"19397:150:119","statements":[{"expression":{"id":44237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44232,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44230,"src":"19407:10:119","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44235,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44227,"src":"19427:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44234,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19420:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int224_$","typeString":"type(int224)"},"typeName":{"id":44233,"name":"int224","nodeType":"ElementaryTypeName","src":"19420:6:119","typeDescriptions":{}}},"id":44236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19420:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"src":"19407:26:119","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"id":44238,"nodeType":"ExpressionStatement","src":"19407:26:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44239,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44230,"src":"19447:10:119","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44240,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44227,"src":"19461:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19447:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44248,"nodeType":"IfStatement","src":"19443:98:119","trueBody":{"id":44247,"nodeType":"Block","src":"19468:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"323234","id":44243,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19519:3:119","typeDescriptions":{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},"value":"224"},{"id":44244,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44227,"src":"19524:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_224_by_1","typeString":"int_const 224"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44242,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"19489:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44245,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19489:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44246,"nodeType":"RevertStatement","src":"19482:48:119"}]}}]},"documentation":{"id":44225,"nodeType":"StructuredDocumentation","src":"19006:312:119","text":" @dev Returns the downcasted int224 from int256, reverting on\n overflow (when the input is less than smallest int224 or\n greater than largest int224).\n Counterpart to Solidity's `int224` operator.\n Requirements:\n - input must fit into 224 bits"},"id":44250,"implemented":true,"kind":"function","modifiers":[],"name":"toInt224","nameLocation":"19332:8:119","nodeType":"FunctionDefinition","parameters":{"id":44228,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44227,"mutability":"mutable","name":"value","nameLocation":"19348:5:119","nodeType":"VariableDeclaration","scope":44250,"src":"19341:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44226,"name":"int256","nodeType":"ElementaryTypeName","src":"19341:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"19340:14:119"},"returnParameters":{"id":44231,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44230,"mutability":"mutable","name":"downcasted","nameLocation":"19385:10:119","nodeType":"VariableDeclaration","scope":44250,"src":"19378:17:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"},"typeName":{"id":44229,"name":"int224","nodeType":"ElementaryTypeName","src":"19378:6:119","typeDescriptions":{"typeIdentifier":"t_int224","typeString":"int224"}},"visibility":"internal"}],"src":"19377:19:119"},"scope":44983,"src":"19323:224:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44275,"nodeType":"Block","src":"19944:150:119","statements":[{"expression":{"id":44263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44258,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44256,"src":"19954:10:119","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44261,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44253,"src":"19974:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44260,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"19967:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int216_$","typeString":"type(int216)"},"typeName":{"id":44259,"name":"int216","nodeType":"ElementaryTypeName","src":"19967:6:119","typeDescriptions":{}}},"id":44262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19967:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"src":"19954:26:119","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"id":44264,"nodeType":"ExpressionStatement","src":"19954:26:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44265,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44256,"src":"19994:10:119","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44266,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44253,"src":"20008:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"19994:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44274,"nodeType":"IfStatement","src":"19990:98:119","trueBody":{"id":44273,"nodeType":"Block","src":"20015:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"323136","id":44269,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20066:3:119","typeDescriptions":{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},"value":"216"},{"id":44270,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44253,"src":"20071:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_216_by_1","typeString":"int_const 216"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44268,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"20036:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20036:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44272,"nodeType":"RevertStatement","src":"20029:48:119"}]}}]},"documentation":{"id":44251,"nodeType":"StructuredDocumentation","src":"19553:312:119","text":" @dev Returns the downcasted int216 from int256, reverting on\n overflow (when the input is less than smallest int216 or\n greater than largest int216).\n Counterpart to Solidity's `int216` operator.\n Requirements:\n - input must fit into 216 bits"},"id":44276,"implemented":true,"kind":"function","modifiers":[],"name":"toInt216","nameLocation":"19879:8:119","nodeType":"FunctionDefinition","parameters":{"id":44254,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44253,"mutability":"mutable","name":"value","nameLocation":"19895:5:119","nodeType":"VariableDeclaration","scope":44276,"src":"19888:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44252,"name":"int256","nodeType":"ElementaryTypeName","src":"19888:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"19887:14:119"},"returnParameters":{"id":44257,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44256,"mutability":"mutable","name":"downcasted","nameLocation":"19932:10:119","nodeType":"VariableDeclaration","scope":44276,"src":"19925:17:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"},"typeName":{"id":44255,"name":"int216","nodeType":"ElementaryTypeName","src":"19925:6:119","typeDescriptions":{"typeIdentifier":"t_int216","typeString":"int216"}},"visibility":"internal"}],"src":"19924:19:119"},"scope":44983,"src":"19870:224:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44301,"nodeType":"Block","src":"20491:150:119","statements":[{"expression":{"id":44289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44284,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44282,"src":"20501:10:119","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44287,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44279,"src":"20521:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44286,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20514:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int208_$","typeString":"type(int208)"},"typeName":{"id":44285,"name":"int208","nodeType":"ElementaryTypeName","src":"20514:6:119","typeDescriptions":{}}},"id":44288,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20514:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"src":"20501:26:119","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"id":44290,"nodeType":"ExpressionStatement","src":"20501:26:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44291,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44282,"src":"20541:10:119","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44292,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44279,"src":"20555:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"20541:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44300,"nodeType":"IfStatement","src":"20537:98:119","trueBody":{"id":44299,"nodeType":"Block","src":"20562:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"323038","id":44295,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20613:3:119","typeDescriptions":{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},"value":"208"},{"id":44296,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44279,"src":"20618:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_208_by_1","typeString":"int_const 208"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44294,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"20583:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44297,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20583:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44298,"nodeType":"RevertStatement","src":"20576:48:119"}]}}]},"documentation":{"id":44277,"nodeType":"StructuredDocumentation","src":"20100:312:119","text":" @dev Returns the downcasted int208 from int256, reverting on\n overflow (when the input is less than smallest int208 or\n greater than largest int208).\n Counterpart to Solidity's `int208` operator.\n Requirements:\n - input must fit into 208 bits"},"id":44302,"implemented":true,"kind":"function","modifiers":[],"name":"toInt208","nameLocation":"20426:8:119","nodeType":"FunctionDefinition","parameters":{"id":44280,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44279,"mutability":"mutable","name":"value","nameLocation":"20442:5:119","nodeType":"VariableDeclaration","scope":44302,"src":"20435:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44278,"name":"int256","nodeType":"ElementaryTypeName","src":"20435:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20434:14:119"},"returnParameters":{"id":44283,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44282,"mutability":"mutable","name":"downcasted","nameLocation":"20479:10:119","nodeType":"VariableDeclaration","scope":44302,"src":"20472:17:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"},"typeName":{"id":44281,"name":"int208","nodeType":"ElementaryTypeName","src":"20472:6:119","typeDescriptions":{"typeIdentifier":"t_int208","typeString":"int208"}},"visibility":"internal"}],"src":"20471:19:119"},"scope":44983,"src":"20417:224:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44327,"nodeType":"Block","src":"21038:150:119","statements":[{"expression":{"id":44315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44310,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44308,"src":"21048:10:119","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44313,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44305,"src":"21068:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44312,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21061:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int200_$","typeString":"type(int200)"},"typeName":{"id":44311,"name":"int200","nodeType":"ElementaryTypeName","src":"21061:6:119","typeDescriptions":{}}},"id":44314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21061:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"src":"21048:26:119","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"id":44316,"nodeType":"ExpressionStatement","src":"21048:26:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44317,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44308,"src":"21088:10:119","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44318,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44305,"src":"21102:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21088:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44326,"nodeType":"IfStatement","src":"21084:98:119","trueBody":{"id":44325,"nodeType":"Block","src":"21109:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"323030","id":44321,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21160:3:119","typeDescriptions":{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},"value":"200"},{"id":44322,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44305,"src":"21165:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_200_by_1","typeString":"int_const 200"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44320,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"21130:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44323,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21130:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44324,"nodeType":"RevertStatement","src":"21123:48:119"}]}}]},"documentation":{"id":44303,"nodeType":"StructuredDocumentation","src":"20647:312:119","text":" @dev Returns the downcasted int200 from int256, reverting on\n overflow (when the input is less than smallest int200 or\n greater than largest int200).\n Counterpart to Solidity's `int200` operator.\n Requirements:\n - input must fit into 200 bits"},"id":44328,"implemented":true,"kind":"function","modifiers":[],"name":"toInt200","nameLocation":"20973:8:119","nodeType":"FunctionDefinition","parameters":{"id":44306,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44305,"mutability":"mutable","name":"value","nameLocation":"20989:5:119","nodeType":"VariableDeclaration","scope":44328,"src":"20982:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44304,"name":"int256","nodeType":"ElementaryTypeName","src":"20982:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"20981:14:119"},"returnParameters":{"id":44309,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44308,"mutability":"mutable","name":"downcasted","nameLocation":"21026:10:119","nodeType":"VariableDeclaration","scope":44328,"src":"21019:17:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"},"typeName":{"id":44307,"name":"int200","nodeType":"ElementaryTypeName","src":"21019:6:119","typeDescriptions":{"typeIdentifier":"t_int200","typeString":"int200"}},"visibility":"internal"}],"src":"21018:19:119"},"scope":44983,"src":"20964:224:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44353,"nodeType":"Block","src":"21585:150:119","statements":[{"expression":{"id":44341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44336,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44334,"src":"21595:10:119","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44339,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44331,"src":"21615:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44338,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21608:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int192_$","typeString":"type(int192)"},"typeName":{"id":44337,"name":"int192","nodeType":"ElementaryTypeName","src":"21608:6:119","typeDescriptions":{}}},"id":44340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21608:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"src":"21595:26:119","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"id":44342,"nodeType":"ExpressionStatement","src":"21595:26:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44345,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44343,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44334,"src":"21635:10:119","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44344,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44331,"src":"21649:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"21635:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44352,"nodeType":"IfStatement","src":"21631:98:119","trueBody":{"id":44351,"nodeType":"Block","src":"21656:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"313932","id":44347,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21707:3:119","typeDescriptions":{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},"value":"192"},{"id":44348,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44331,"src":"21712:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_192_by_1","typeString":"int_const 192"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44346,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"21677:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44349,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21677:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44350,"nodeType":"RevertStatement","src":"21670:48:119"}]}}]},"documentation":{"id":44329,"nodeType":"StructuredDocumentation","src":"21194:312:119","text":" @dev Returns the downcasted int192 from int256, reverting on\n overflow (when the input is less than smallest int192 or\n greater than largest int192).\n Counterpart to Solidity's `int192` operator.\n Requirements:\n - input must fit into 192 bits"},"id":44354,"implemented":true,"kind":"function","modifiers":[],"name":"toInt192","nameLocation":"21520:8:119","nodeType":"FunctionDefinition","parameters":{"id":44332,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44331,"mutability":"mutable","name":"value","nameLocation":"21536:5:119","nodeType":"VariableDeclaration","scope":44354,"src":"21529:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44330,"name":"int256","nodeType":"ElementaryTypeName","src":"21529:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"21528:14:119"},"returnParameters":{"id":44335,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44334,"mutability":"mutable","name":"downcasted","nameLocation":"21573:10:119","nodeType":"VariableDeclaration","scope":44354,"src":"21566:17:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"},"typeName":{"id":44333,"name":"int192","nodeType":"ElementaryTypeName","src":"21566:6:119","typeDescriptions":{"typeIdentifier":"t_int192","typeString":"int192"}},"visibility":"internal"}],"src":"21565:19:119"},"scope":44983,"src":"21511:224:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44379,"nodeType":"Block","src":"22132:150:119","statements":[{"expression":{"id":44367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44362,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44360,"src":"22142:10:119","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44365,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44357,"src":"22162:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44364,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22155:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int184_$","typeString":"type(int184)"},"typeName":{"id":44363,"name":"int184","nodeType":"ElementaryTypeName","src":"22155:6:119","typeDescriptions":{}}},"id":44366,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22155:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"src":"22142:26:119","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"id":44368,"nodeType":"ExpressionStatement","src":"22142:26:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44371,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44369,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44360,"src":"22182:10:119","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44370,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44357,"src":"22196:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22182:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44378,"nodeType":"IfStatement","src":"22178:98:119","trueBody":{"id":44377,"nodeType":"Block","src":"22203:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"313834","id":44373,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22254:3:119","typeDescriptions":{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},"value":"184"},{"id":44374,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44357,"src":"22259:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_184_by_1","typeString":"int_const 184"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44372,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"22224:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44375,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22224:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44376,"nodeType":"RevertStatement","src":"22217:48:119"}]}}]},"documentation":{"id":44355,"nodeType":"StructuredDocumentation","src":"21741:312:119","text":" @dev Returns the downcasted int184 from int256, reverting on\n overflow (when the input is less than smallest int184 or\n greater than largest int184).\n Counterpart to Solidity's `int184` operator.\n Requirements:\n - input must fit into 184 bits"},"id":44380,"implemented":true,"kind":"function","modifiers":[],"name":"toInt184","nameLocation":"22067:8:119","nodeType":"FunctionDefinition","parameters":{"id":44358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44357,"mutability":"mutable","name":"value","nameLocation":"22083:5:119","nodeType":"VariableDeclaration","scope":44380,"src":"22076:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44356,"name":"int256","nodeType":"ElementaryTypeName","src":"22076:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"22075:14:119"},"returnParameters":{"id":44361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44360,"mutability":"mutable","name":"downcasted","nameLocation":"22120:10:119","nodeType":"VariableDeclaration","scope":44380,"src":"22113:17:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"},"typeName":{"id":44359,"name":"int184","nodeType":"ElementaryTypeName","src":"22113:6:119","typeDescriptions":{"typeIdentifier":"t_int184","typeString":"int184"}},"visibility":"internal"}],"src":"22112:19:119"},"scope":44983,"src":"22058:224:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44405,"nodeType":"Block","src":"22679:150:119","statements":[{"expression":{"id":44393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44388,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44386,"src":"22689:10:119","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44391,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44383,"src":"22709:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44390,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22702:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int176_$","typeString":"type(int176)"},"typeName":{"id":44389,"name":"int176","nodeType":"ElementaryTypeName","src":"22702:6:119","typeDescriptions":{}}},"id":44392,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22702:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"src":"22689:26:119","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"id":44394,"nodeType":"ExpressionStatement","src":"22689:26:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44397,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44395,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44386,"src":"22729:10:119","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44396,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44383,"src":"22743:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"22729:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44404,"nodeType":"IfStatement","src":"22725:98:119","trueBody":{"id":44403,"nodeType":"Block","src":"22750:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"313736","id":44399,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"22801:3:119","typeDescriptions":{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},"value":"176"},{"id":44400,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44383,"src":"22806:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_176_by_1","typeString":"int_const 176"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44398,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"22771:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44401,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22771:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44402,"nodeType":"RevertStatement","src":"22764:48:119"}]}}]},"documentation":{"id":44381,"nodeType":"StructuredDocumentation","src":"22288:312:119","text":" @dev Returns the downcasted int176 from int256, reverting on\n overflow (when the input is less than smallest int176 or\n greater than largest int176).\n Counterpart to Solidity's `int176` operator.\n Requirements:\n - input must fit into 176 bits"},"id":44406,"implemented":true,"kind":"function","modifiers":[],"name":"toInt176","nameLocation":"22614:8:119","nodeType":"FunctionDefinition","parameters":{"id":44384,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44383,"mutability":"mutable","name":"value","nameLocation":"22630:5:119","nodeType":"VariableDeclaration","scope":44406,"src":"22623:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44382,"name":"int256","nodeType":"ElementaryTypeName","src":"22623:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"22622:14:119"},"returnParameters":{"id":44387,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44386,"mutability":"mutable","name":"downcasted","nameLocation":"22667:10:119","nodeType":"VariableDeclaration","scope":44406,"src":"22660:17:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"},"typeName":{"id":44385,"name":"int176","nodeType":"ElementaryTypeName","src":"22660:6:119","typeDescriptions":{"typeIdentifier":"t_int176","typeString":"int176"}},"visibility":"internal"}],"src":"22659:19:119"},"scope":44983,"src":"22605:224:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44431,"nodeType":"Block","src":"23226:150:119","statements":[{"expression":{"id":44419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44414,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44412,"src":"23236:10:119","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44417,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44409,"src":"23256:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44416,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23249:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int168_$","typeString":"type(int168)"},"typeName":{"id":44415,"name":"int168","nodeType":"ElementaryTypeName","src":"23249:6:119","typeDescriptions":{}}},"id":44418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23249:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"src":"23236:26:119","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"id":44420,"nodeType":"ExpressionStatement","src":"23236:26:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44421,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44412,"src":"23276:10:119","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44422,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44409,"src":"23290:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"23276:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44430,"nodeType":"IfStatement","src":"23272:98:119","trueBody":{"id":44429,"nodeType":"Block","src":"23297:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"313638","id":44425,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23348:3:119","typeDescriptions":{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},"value":"168"},{"id":44426,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44409,"src":"23353:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_168_by_1","typeString":"int_const 168"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44424,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"23318:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23318:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44428,"nodeType":"RevertStatement","src":"23311:48:119"}]}}]},"documentation":{"id":44407,"nodeType":"StructuredDocumentation","src":"22835:312:119","text":" @dev Returns the downcasted int168 from int256, reverting on\n overflow (when the input is less than smallest int168 or\n greater than largest int168).\n Counterpart to Solidity's `int168` operator.\n Requirements:\n - input must fit into 168 bits"},"id":44432,"implemented":true,"kind":"function","modifiers":[],"name":"toInt168","nameLocation":"23161:8:119","nodeType":"FunctionDefinition","parameters":{"id":44410,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44409,"mutability":"mutable","name":"value","nameLocation":"23177:5:119","nodeType":"VariableDeclaration","scope":44432,"src":"23170:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44408,"name":"int256","nodeType":"ElementaryTypeName","src":"23170:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"23169:14:119"},"returnParameters":{"id":44413,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44412,"mutability":"mutable","name":"downcasted","nameLocation":"23214:10:119","nodeType":"VariableDeclaration","scope":44432,"src":"23207:17:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"},"typeName":{"id":44411,"name":"int168","nodeType":"ElementaryTypeName","src":"23207:6:119","typeDescriptions":{"typeIdentifier":"t_int168","typeString":"int168"}},"visibility":"internal"}],"src":"23206:19:119"},"scope":44983,"src":"23152:224:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44457,"nodeType":"Block","src":"23773:150:119","statements":[{"expression":{"id":44445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44440,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44438,"src":"23783:10:119","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44443,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44435,"src":"23803:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44442,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23796:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int160_$","typeString":"type(int160)"},"typeName":{"id":44441,"name":"int160","nodeType":"ElementaryTypeName","src":"23796:6:119","typeDescriptions":{}}},"id":44444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23796:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"src":"23783:26:119","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"id":44446,"nodeType":"ExpressionStatement","src":"23783:26:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44449,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44447,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44438,"src":"23823:10:119","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44448,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44435,"src":"23837:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"23823:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44456,"nodeType":"IfStatement","src":"23819:98:119","trueBody":{"id":44455,"nodeType":"Block","src":"23844:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"313630","id":44451,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23895:3:119","typeDescriptions":{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},"value":"160"},{"id":44452,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44435,"src":"23900:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_160_by_1","typeString":"int_const 160"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44450,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"23865:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23865:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44454,"nodeType":"RevertStatement","src":"23858:48:119"}]}}]},"documentation":{"id":44433,"nodeType":"StructuredDocumentation","src":"23382:312:119","text":" @dev Returns the downcasted int160 from int256, reverting on\n overflow (when the input is less than smallest int160 or\n greater than largest int160).\n Counterpart to Solidity's `int160` operator.\n Requirements:\n - input must fit into 160 bits"},"id":44458,"implemented":true,"kind":"function","modifiers":[],"name":"toInt160","nameLocation":"23708:8:119","nodeType":"FunctionDefinition","parameters":{"id":44436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44435,"mutability":"mutable","name":"value","nameLocation":"23724:5:119","nodeType":"VariableDeclaration","scope":44458,"src":"23717:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44434,"name":"int256","nodeType":"ElementaryTypeName","src":"23717:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"23716:14:119"},"returnParameters":{"id":44439,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44438,"mutability":"mutable","name":"downcasted","nameLocation":"23761:10:119","nodeType":"VariableDeclaration","scope":44458,"src":"23754:17:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"},"typeName":{"id":44437,"name":"int160","nodeType":"ElementaryTypeName","src":"23754:6:119","typeDescriptions":{"typeIdentifier":"t_int160","typeString":"int160"}},"visibility":"internal"}],"src":"23753:19:119"},"scope":44983,"src":"23699:224:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44483,"nodeType":"Block","src":"24320:150:119","statements":[{"expression":{"id":44471,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44466,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44464,"src":"24330:10:119","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44469,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44461,"src":"24350:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44468,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24343:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int152_$","typeString":"type(int152)"},"typeName":{"id":44467,"name":"int152","nodeType":"ElementaryTypeName","src":"24343:6:119","typeDescriptions":{}}},"id":44470,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24343:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"src":"24330:26:119","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"id":44472,"nodeType":"ExpressionStatement","src":"24330:26:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44473,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44464,"src":"24370:10:119","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44474,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44461,"src":"24384:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"24370:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44482,"nodeType":"IfStatement","src":"24366:98:119","trueBody":{"id":44481,"nodeType":"Block","src":"24391:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"313532","id":44477,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24442:3:119","typeDescriptions":{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},"value":"152"},{"id":44478,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44461,"src":"24447:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_152_by_1","typeString":"int_const 152"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44476,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"24412:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44479,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24412:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44480,"nodeType":"RevertStatement","src":"24405:48:119"}]}}]},"documentation":{"id":44459,"nodeType":"StructuredDocumentation","src":"23929:312:119","text":" @dev Returns the downcasted int152 from int256, reverting on\n overflow (when the input is less than smallest int152 or\n greater than largest int152).\n Counterpart to Solidity's `int152` operator.\n Requirements:\n - input must fit into 152 bits"},"id":44484,"implemented":true,"kind":"function","modifiers":[],"name":"toInt152","nameLocation":"24255:8:119","nodeType":"FunctionDefinition","parameters":{"id":44462,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44461,"mutability":"mutable","name":"value","nameLocation":"24271:5:119","nodeType":"VariableDeclaration","scope":44484,"src":"24264:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44460,"name":"int256","nodeType":"ElementaryTypeName","src":"24264:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"24263:14:119"},"returnParameters":{"id":44465,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44464,"mutability":"mutable","name":"downcasted","nameLocation":"24308:10:119","nodeType":"VariableDeclaration","scope":44484,"src":"24301:17:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"},"typeName":{"id":44463,"name":"int152","nodeType":"ElementaryTypeName","src":"24301:6:119","typeDescriptions":{"typeIdentifier":"t_int152","typeString":"int152"}},"visibility":"internal"}],"src":"24300:19:119"},"scope":44983,"src":"24246:224:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44509,"nodeType":"Block","src":"24867:150:119","statements":[{"expression":{"id":44497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44492,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44490,"src":"24877:10:119","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44495,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44487,"src":"24897:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44494,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24890:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int144_$","typeString":"type(int144)"},"typeName":{"id":44493,"name":"int144","nodeType":"ElementaryTypeName","src":"24890:6:119","typeDescriptions":{}}},"id":44496,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24890:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"src":"24877:26:119","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"id":44498,"nodeType":"ExpressionStatement","src":"24877:26:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44501,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44499,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44490,"src":"24917:10:119","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44500,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44487,"src":"24931:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"24917:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44508,"nodeType":"IfStatement","src":"24913:98:119","trueBody":{"id":44507,"nodeType":"Block","src":"24938:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"313434","id":44503,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"24989:3:119","typeDescriptions":{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},"value":"144"},{"id":44504,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44487,"src":"24994:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_144_by_1","typeString":"int_const 144"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44502,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"24959:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44505,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24959:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44506,"nodeType":"RevertStatement","src":"24952:48:119"}]}}]},"documentation":{"id":44485,"nodeType":"StructuredDocumentation","src":"24476:312:119","text":" @dev Returns the downcasted int144 from int256, reverting on\n overflow (when the input is less than smallest int144 or\n greater than largest int144).\n Counterpart to Solidity's `int144` operator.\n Requirements:\n - input must fit into 144 bits"},"id":44510,"implemented":true,"kind":"function","modifiers":[],"name":"toInt144","nameLocation":"24802:8:119","nodeType":"FunctionDefinition","parameters":{"id":44488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44487,"mutability":"mutable","name":"value","nameLocation":"24818:5:119","nodeType":"VariableDeclaration","scope":44510,"src":"24811:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44486,"name":"int256","nodeType":"ElementaryTypeName","src":"24811:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"24810:14:119"},"returnParameters":{"id":44491,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44490,"mutability":"mutable","name":"downcasted","nameLocation":"24855:10:119","nodeType":"VariableDeclaration","scope":44510,"src":"24848:17:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"},"typeName":{"id":44489,"name":"int144","nodeType":"ElementaryTypeName","src":"24848:6:119","typeDescriptions":{"typeIdentifier":"t_int144","typeString":"int144"}},"visibility":"internal"}],"src":"24847:19:119"},"scope":44983,"src":"24793:224:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44535,"nodeType":"Block","src":"25414:150:119","statements":[{"expression":{"id":44523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44518,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44516,"src":"25424:10:119","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44521,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44513,"src":"25444:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44520,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25437:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int136_$","typeString":"type(int136)"},"typeName":{"id":44519,"name":"int136","nodeType":"ElementaryTypeName","src":"25437:6:119","typeDescriptions":{}}},"id":44522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25437:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"src":"25424:26:119","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"id":44524,"nodeType":"ExpressionStatement","src":"25424:26:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44525,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44516,"src":"25464:10:119","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44526,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44513,"src":"25478:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"25464:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44534,"nodeType":"IfStatement","src":"25460:98:119","trueBody":{"id":44533,"nodeType":"Block","src":"25485:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"313336","id":44529,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25536:3:119","typeDescriptions":{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},"value":"136"},{"id":44530,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44513,"src":"25541:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_136_by_1","typeString":"int_const 136"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44528,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"25506:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44531,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25506:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44532,"nodeType":"RevertStatement","src":"25499:48:119"}]}}]},"documentation":{"id":44511,"nodeType":"StructuredDocumentation","src":"25023:312:119","text":" @dev Returns the downcasted int136 from int256, reverting on\n overflow (when the input is less than smallest int136 or\n greater than largest int136).\n Counterpart to Solidity's `int136` operator.\n Requirements:\n - input must fit into 136 bits"},"id":44536,"implemented":true,"kind":"function","modifiers":[],"name":"toInt136","nameLocation":"25349:8:119","nodeType":"FunctionDefinition","parameters":{"id":44514,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44513,"mutability":"mutable","name":"value","nameLocation":"25365:5:119","nodeType":"VariableDeclaration","scope":44536,"src":"25358:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44512,"name":"int256","nodeType":"ElementaryTypeName","src":"25358:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"25357:14:119"},"returnParameters":{"id":44517,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44516,"mutability":"mutable","name":"downcasted","nameLocation":"25402:10:119","nodeType":"VariableDeclaration","scope":44536,"src":"25395:17:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"},"typeName":{"id":44515,"name":"int136","nodeType":"ElementaryTypeName","src":"25395:6:119","typeDescriptions":{"typeIdentifier":"t_int136","typeString":"int136"}},"visibility":"internal"}],"src":"25394:19:119"},"scope":44983,"src":"25340:224:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44561,"nodeType":"Block","src":"25961:150:119","statements":[{"expression":{"id":44549,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44544,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44542,"src":"25971:10:119","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44547,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44539,"src":"25991:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44546,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25984:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int128_$","typeString":"type(int128)"},"typeName":{"id":44545,"name":"int128","nodeType":"ElementaryTypeName","src":"25984:6:119","typeDescriptions":{}}},"id":44548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25984:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"src":"25971:26:119","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"id":44550,"nodeType":"ExpressionStatement","src":"25971:26:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44551,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44542,"src":"26011:10:119","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44552,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44539,"src":"26025:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"26011:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44560,"nodeType":"IfStatement","src":"26007:98:119","trueBody":{"id":44559,"nodeType":"Block","src":"26032:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"313238","id":44555,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26083:3:119","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},{"id":44556,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44539,"src":"26088:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44554,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"26053:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44557,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26053:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44558,"nodeType":"RevertStatement","src":"26046:48:119"}]}}]},"documentation":{"id":44537,"nodeType":"StructuredDocumentation","src":"25570:312:119","text":" @dev Returns the downcasted int128 from int256, reverting on\n overflow (when the input is less than smallest int128 or\n greater than largest int128).\n Counterpart to Solidity's `int128` operator.\n Requirements:\n - input must fit into 128 bits"},"id":44562,"implemented":true,"kind":"function","modifiers":[],"name":"toInt128","nameLocation":"25896:8:119","nodeType":"FunctionDefinition","parameters":{"id":44540,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44539,"mutability":"mutable","name":"value","nameLocation":"25912:5:119","nodeType":"VariableDeclaration","scope":44562,"src":"25905:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44538,"name":"int256","nodeType":"ElementaryTypeName","src":"25905:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"25904:14:119"},"returnParameters":{"id":44543,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44542,"mutability":"mutable","name":"downcasted","nameLocation":"25949:10:119","nodeType":"VariableDeclaration","scope":44562,"src":"25942:17:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"},"typeName":{"id":44541,"name":"int128","nodeType":"ElementaryTypeName","src":"25942:6:119","typeDescriptions":{"typeIdentifier":"t_int128","typeString":"int128"}},"visibility":"internal"}],"src":"25941:19:119"},"scope":44983,"src":"25887:224:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44587,"nodeType":"Block","src":"26508:150:119","statements":[{"expression":{"id":44575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44570,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44568,"src":"26518:10:119","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44573,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44565,"src":"26538:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44572,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"26531:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int120_$","typeString":"type(int120)"},"typeName":{"id":44571,"name":"int120","nodeType":"ElementaryTypeName","src":"26531:6:119","typeDescriptions":{}}},"id":44574,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26531:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"src":"26518:26:119","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"id":44576,"nodeType":"ExpressionStatement","src":"26518:26:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44577,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44568,"src":"26558:10:119","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44578,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44565,"src":"26572:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"26558:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44586,"nodeType":"IfStatement","src":"26554:98:119","trueBody":{"id":44585,"nodeType":"Block","src":"26579:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"313230","id":44581,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26630:3:119","typeDescriptions":{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},"value":"120"},{"id":44582,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44565,"src":"26635:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_120_by_1","typeString":"int_const 120"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44580,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"26600:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44583,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26600:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44584,"nodeType":"RevertStatement","src":"26593:48:119"}]}}]},"documentation":{"id":44563,"nodeType":"StructuredDocumentation","src":"26117:312:119","text":" @dev Returns the downcasted int120 from int256, reverting on\n overflow (when the input is less than smallest int120 or\n greater than largest int120).\n Counterpart to Solidity's `int120` operator.\n Requirements:\n - input must fit into 120 bits"},"id":44588,"implemented":true,"kind":"function","modifiers":[],"name":"toInt120","nameLocation":"26443:8:119","nodeType":"FunctionDefinition","parameters":{"id":44566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44565,"mutability":"mutable","name":"value","nameLocation":"26459:5:119","nodeType":"VariableDeclaration","scope":44588,"src":"26452:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44564,"name":"int256","nodeType":"ElementaryTypeName","src":"26452:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"26451:14:119"},"returnParameters":{"id":44569,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44568,"mutability":"mutable","name":"downcasted","nameLocation":"26496:10:119","nodeType":"VariableDeclaration","scope":44588,"src":"26489:17:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"},"typeName":{"id":44567,"name":"int120","nodeType":"ElementaryTypeName","src":"26489:6:119","typeDescriptions":{"typeIdentifier":"t_int120","typeString":"int120"}},"visibility":"internal"}],"src":"26488:19:119"},"scope":44983,"src":"26434:224:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44613,"nodeType":"Block","src":"27055:150:119","statements":[{"expression":{"id":44601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44596,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44594,"src":"27065:10:119","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44599,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44591,"src":"27085:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44598,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27078:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int112_$","typeString":"type(int112)"},"typeName":{"id":44597,"name":"int112","nodeType":"ElementaryTypeName","src":"27078:6:119","typeDescriptions":{}}},"id":44600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27078:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"src":"27065:26:119","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"id":44602,"nodeType":"ExpressionStatement","src":"27065:26:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44605,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44603,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44594,"src":"27105:10:119","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44604,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44591,"src":"27119:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"27105:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44612,"nodeType":"IfStatement","src":"27101:98:119","trueBody":{"id":44611,"nodeType":"Block","src":"27126:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"313132","id":44607,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27177:3:119","typeDescriptions":{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},"value":"112"},{"id":44608,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44591,"src":"27182:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_112_by_1","typeString":"int_const 112"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44606,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"27147:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44609,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27147:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44610,"nodeType":"RevertStatement","src":"27140:48:119"}]}}]},"documentation":{"id":44589,"nodeType":"StructuredDocumentation","src":"26664:312:119","text":" @dev Returns the downcasted int112 from int256, reverting on\n overflow (when the input is less than smallest int112 or\n greater than largest int112).\n Counterpart to Solidity's `int112` operator.\n Requirements:\n - input must fit into 112 bits"},"id":44614,"implemented":true,"kind":"function","modifiers":[],"name":"toInt112","nameLocation":"26990:8:119","nodeType":"FunctionDefinition","parameters":{"id":44592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44591,"mutability":"mutable","name":"value","nameLocation":"27006:5:119","nodeType":"VariableDeclaration","scope":44614,"src":"26999:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44590,"name":"int256","nodeType":"ElementaryTypeName","src":"26999:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"26998:14:119"},"returnParameters":{"id":44595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44594,"mutability":"mutable","name":"downcasted","nameLocation":"27043:10:119","nodeType":"VariableDeclaration","scope":44614,"src":"27036:17:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"},"typeName":{"id":44593,"name":"int112","nodeType":"ElementaryTypeName","src":"27036:6:119","typeDescriptions":{"typeIdentifier":"t_int112","typeString":"int112"}},"visibility":"internal"}],"src":"27035:19:119"},"scope":44983,"src":"26981:224:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44639,"nodeType":"Block","src":"27602:150:119","statements":[{"expression":{"id":44627,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44622,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44620,"src":"27612:10:119","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44625,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44617,"src":"27632:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44624,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"27625:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int104_$","typeString":"type(int104)"},"typeName":{"id":44623,"name":"int104","nodeType":"ElementaryTypeName","src":"27625:6:119","typeDescriptions":{}}},"id":44626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27625:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"src":"27612:26:119","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"id":44628,"nodeType":"ExpressionStatement","src":"27612:26:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44631,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44629,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44620,"src":"27652:10:119","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44630,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44617,"src":"27666:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"27652:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44638,"nodeType":"IfStatement","src":"27648:98:119","trueBody":{"id":44637,"nodeType":"Block","src":"27673:73:119","statements":[{"errorCall":{"arguments":[{"hexValue":"313034","id":44633,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27724:3:119","typeDescriptions":{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},"value":"104"},{"id":44634,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44617,"src":"27729:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_104_by_1","typeString":"int_const 104"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44632,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"27694:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44635,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27694:41:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44636,"nodeType":"RevertStatement","src":"27687:48:119"}]}}]},"documentation":{"id":44615,"nodeType":"StructuredDocumentation","src":"27211:312:119","text":" @dev Returns the downcasted int104 from int256, reverting on\n overflow (when the input is less than smallest int104 or\n greater than largest int104).\n Counterpart to Solidity's `int104` operator.\n Requirements:\n - input must fit into 104 bits"},"id":44640,"implemented":true,"kind":"function","modifiers":[],"name":"toInt104","nameLocation":"27537:8:119","nodeType":"FunctionDefinition","parameters":{"id":44618,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44617,"mutability":"mutable","name":"value","nameLocation":"27553:5:119","nodeType":"VariableDeclaration","scope":44640,"src":"27546:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44616,"name":"int256","nodeType":"ElementaryTypeName","src":"27546:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"27545:14:119"},"returnParameters":{"id":44621,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44620,"mutability":"mutable","name":"downcasted","nameLocation":"27590:10:119","nodeType":"VariableDeclaration","scope":44640,"src":"27583:17:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"},"typeName":{"id":44619,"name":"int104","nodeType":"ElementaryTypeName","src":"27583:6:119","typeDescriptions":{"typeIdentifier":"t_int104","typeString":"int104"}},"visibility":"internal"}],"src":"27582:19:119"},"scope":44983,"src":"27528:224:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44665,"nodeType":"Block","src":"28142:148:119","statements":[{"expression":{"id":44653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44648,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44646,"src":"28152:10:119","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44651,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44643,"src":"28171:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44650,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28165:5:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int96_$","typeString":"type(int96)"},"typeName":{"id":44649,"name":"int96","nodeType":"ElementaryTypeName","src":"28165:5:119","typeDescriptions":{}}},"id":44652,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28165:12:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"src":"28152:25:119","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"id":44654,"nodeType":"ExpressionStatement","src":"28152:25:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44655,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44646,"src":"28191:10:119","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44656,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44643,"src":"28205:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"28191:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44664,"nodeType":"IfStatement","src":"28187:97:119","trueBody":{"id":44663,"nodeType":"Block","src":"28212:72:119","statements":[{"errorCall":{"arguments":[{"hexValue":"3936","id":44659,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28263:2:119","typeDescriptions":{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},"value":"96"},{"id":44660,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44643,"src":"28267:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_96_by_1","typeString":"int_const 96"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44658,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"28233:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44661,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28233:40:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44662,"nodeType":"RevertStatement","src":"28226:47:119"}]}}]},"documentation":{"id":44641,"nodeType":"StructuredDocumentation","src":"27758:307:119","text":" @dev Returns the downcasted int96 from int256, reverting on\n overflow (when the input is less than smallest int96 or\n greater than largest int96).\n Counterpart to Solidity's `int96` operator.\n Requirements:\n - input must fit into 96 bits"},"id":44666,"implemented":true,"kind":"function","modifiers":[],"name":"toInt96","nameLocation":"28079:7:119","nodeType":"FunctionDefinition","parameters":{"id":44644,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44643,"mutability":"mutable","name":"value","nameLocation":"28094:5:119","nodeType":"VariableDeclaration","scope":44666,"src":"28087:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44642,"name":"int256","nodeType":"ElementaryTypeName","src":"28087:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"28086:14:119"},"returnParameters":{"id":44647,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44646,"mutability":"mutable","name":"downcasted","nameLocation":"28130:10:119","nodeType":"VariableDeclaration","scope":44666,"src":"28124:16:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"},"typeName":{"id":44645,"name":"int96","nodeType":"ElementaryTypeName","src":"28124:5:119","typeDescriptions":{"typeIdentifier":"t_int96","typeString":"int96"}},"visibility":"internal"}],"src":"28123:18:119"},"scope":44983,"src":"28070:220:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44691,"nodeType":"Block","src":"28680:148:119","statements":[{"expression":{"id":44679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44674,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44672,"src":"28690:10:119","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44677,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44669,"src":"28709:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44676,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"28703:5:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int88_$","typeString":"type(int88)"},"typeName":{"id":44675,"name":"int88","nodeType":"ElementaryTypeName","src":"28703:5:119","typeDescriptions":{}}},"id":44678,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28703:12:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"src":"28690:25:119","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"id":44680,"nodeType":"ExpressionStatement","src":"28690:25:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44681,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44672,"src":"28729:10:119","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44682,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44669,"src":"28743:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"28729:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44690,"nodeType":"IfStatement","src":"28725:97:119","trueBody":{"id":44689,"nodeType":"Block","src":"28750:72:119","statements":[{"errorCall":{"arguments":[{"hexValue":"3838","id":44685,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28801:2:119","typeDescriptions":{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},"value":"88"},{"id":44686,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44669,"src":"28805:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_88_by_1","typeString":"int_const 88"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44684,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"28771:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28771:40:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44688,"nodeType":"RevertStatement","src":"28764:47:119"}]}}]},"documentation":{"id":44667,"nodeType":"StructuredDocumentation","src":"28296:307:119","text":" @dev Returns the downcasted int88 from int256, reverting on\n overflow (when the input is less than smallest int88 or\n greater than largest int88).\n Counterpart to Solidity's `int88` operator.\n Requirements:\n - input must fit into 88 bits"},"id":44692,"implemented":true,"kind":"function","modifiers":[],"name":"toInt88","nameLocation":"28617:7:119","nodeType":"FunctionDefinition","parameters":{"id":44670,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44669,"mutability":"mutable","name":"value","nameLocation":"28632:5:119","nodeType":"VariableDeclaration","scope":44692,"src":"28625:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44668,"name":"int256","nodeType":"ElementaryTypeName","src":"28625:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"28624:14:119"},"returnParameters":{"id":44673,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44672,"mutability":"mutable","name":"downcasted","nameLocation":"28668:10:119","nodeType":"VariableDeclaration","scope":44692,"src":"28662:16:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"},"typeName":{"id":44671,"name":"int88","nodeType":"ElementaryTypeName","src":"28662:5:119","typeDescriptions":{"typeIdentifier":"t_int88","typeString":"int88"}},"visibility":"internal"}],"src":"28661:18:119"},"scope":44983,"src":"28608:220:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44717,"nodeType":"Block","src":"29218:148:119","statements":[{"expression":{"id":44705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44700,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44698,"src":"29228:10:119","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44703,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44695,"src":"29247:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44702,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29241:5:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int80_$","typeString":"type(int80)"},"typeName":{"id":44701,"name":"int80","nodeType":"ElementaryTypeName","src":"29241:5:119","typeDescriptions":{}}},"id":44704,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29241:12:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"src":"29228:25:119","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"id":44706,"nodeType":"ExpressionStatement","src":"29228:25:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44707,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44698,"src":"29267:10:119","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44708,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44695,"src":"29281:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"29267:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44716,"nodeType":"IfStatement","src":"29263:97:119","trueBody":{"id":44715,"nodeType":"Block","src":"29288:72:119","statements":[{"errorCall":{"arguments":[{"hexValue":"3830","id":44711,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29339:2:119","typeDescriptions":{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},"value":"80"},{"id":44712,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44695,"src":"29343:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_80_by_1","typeString":"int_const 80"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44710,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"29309:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29309:40:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44714,"nodeType":"RevertStatement","src":"29302:47:119"}]}}]},"documentation":{"id":44693,"nodeType":"StructuredDocumentation","src":"28834:307:119","text":" @dev Returns the downcasted int80 from int256, reverting on\n overflow (when the input is less than smallest int80 or\n greater than largest int80).\n Counterpart to Solidity's `int80` operator.\n Requirements:\n - input must fit into 80 bits"},"id":44718,"implemented":true,"kind":"function","modifiers":[],"name":"toInt80","nameLocation":"29155:7:119","nodeType":"FunctionDefinition","parameters":{"id":44696,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44695,"mutability":"mutable","name":"value","nameLocation":"29170:5:119","nodeType":"VariableDeclaration","scope":44718,"src":"29163:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44694,"name":"int256","nodeType":"ElementaryTypeName","src":"29163:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"29162:14:119"},"returnParameters":{"id":44699,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44698,"mutability":"mutable","name":"downcasted","nameLocation":"29206:10:119","nodeType":"VariableDeclaration","scope":44718,"src":"29200:16:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"},"typeName":{"id":44697,"name":"int80","nodeType":"ElementaryTypeName","src":"29200:5:119","typeDescriptions":{"typeIdentifier":"t_int80","typeString":"int80"}},"visibility":"internal"}],"src":"29199:18:119"},"scope":44983,"src":"29146:220:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44743,"nodeType":"Block","src":"29756:148:119","statements":[{"expression":{"id":44731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44726,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44724,"src":"29766:10:119","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44729,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44721,"src":"29785:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44728,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"29779:5:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int72_$","typeString":"type(int72)"},"typeName":{"id":44727,"name":"int72","nodeType":"ElementaryTypeName","src":"29779:5:119","typeDescriptions":{}}},"id":44730,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29779:12:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"src":"29766:25:119","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"id":44732,"nodeType":"ExpressionStatement","src":"29766:25:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44733,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44724,"src":"29805:10:119","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44734,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44721,"src":"29819:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"29805:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44742,"nodeType":"IfStatement","src":"29801:97:119","trueBody":{"id":44741,"nodeType":"Block","src":"29826:72:119","statements":[{"errorCall":{"arguments":[{"hexValue":"3732","id":44737,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"29877:2:119","typeDescriptions":{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},"value":"72"},{"id":44738,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44721,"src":"29881:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_72_by_1","typeString":"int_const 72"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44736,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"29847:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29847:40:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44740,"nodeType":"RevertStatement","src":"29840:47:119"}]}}]},"documentation":{"id":44719,"nodeType":"StructuredDocumentation","src":"29372:307:119","text":" @dev Returns the downcasted int72 from int256, reverting on\n overflow (when the input is less than smallest int72 or\n greater than largest int72).\n Counterpart to Solidity's `int72` operator.\n Requirements:\n - input must fit into 72 bits"},"id":44744,"implemented":true,"kind":"function","modifiers":[],"name":"toInt72","nameLocation":"29693:7:119","nodeType":"FunctionDefinition","parameters":{"id":44722,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44721,"mutability":"mutable","name":"value","nameLocation":"29708:5:119","nodeType":"VariableDeclaration","scope":44744,"src":"29701:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44720,"name":"int256","nodeType":"ElementaryTypeName","src":"29701:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"29700:14:119"},"returnParameters":{"id":44725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44724,"mutability":"mutable","name":"downcasted","nameLocation":"29744:10:119","nodeType":"VariableDeclaration","scope":44744,"src":"29738:16:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"},"typeName":{"id":44723,"name":"int72","nodeType":"ElementaryTypeName","src":"29738:5:119","typeDescriptions":{"typeIdentifier":"t_int72","typeString":"int72"}},"visibility":"internal"}],"src":"29737:18:119"},"scope":44983,"src":"29684:220:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44769,"nodeType":"Block","src":"30294:148:119","statements":[{"expression":{"id":44757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44752,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44750,"src":"30304:10:119","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44755,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44747,"src":"30323:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44754,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30317:5:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int64_$","typeString":"type(int64)"},"typeName":{"id":44753,"name":"int64","nodeType":"ElementaryTypeName","src":"30317:5:119","typeDescriptions":{}}},"id":44756,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30317:12:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"src":"30304:25:119","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"id":44758,"nodeType":"ExpressionStatement","src":"30304:25:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44759,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44750,"src":"30343:10:119","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44760,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44747,"src":"30357:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"30343:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44768,"nodeType":"IfStatement","src":"30339:97:119","trueBody":{"id":44767,"nodeType":"Block","src":"30364:72:119","statements":[{"errorCall":{"arguments":[{"hexValue":"3634","id":44763,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30415:2:119","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},{"id":44764,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44747,"src":"30419:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44762,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"30385:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44765,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30385:40:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44766,"nodeType":"RevertStatement","src":"30378:47:119"}]}}]},"documentation":{"id":44745,"nodeType":"StructuredDocumentation","src":"29910:307:119","text":" @dev Returns the downcasted int64 from int256, reverting on\n overflow (when the input is less than smallest int64 or\n greater than largest int64).\n Counterpart to Solidity's `int64` operator.\n Requirements:\n - input must fit into 64 bits"},"id":44770,"implemented":true,"kind":"function","modifiers":[],"name":"toInt64","nameLocation":"30231:7:119","nodeType":"FunctionDefinition","parameters":{"id":44748,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44747,"mutability":"mutable","name":"value","nameLocation":"30246:5:119","nodeType":"VariableDeclaration","scope":44770,"src":"30239:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44746,"name":"int256","nodeType":"ElementaryTypeName","src":"30239:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"30238:14:119"},"returnParameters":{"id":44751,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44750,"mutability":"mutable","name":"downcasted","nameLocation":"30282:10:119","nodeType":"VariableDeclaration","scope":44770,"src":"30276:16:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"},"typeName":{"id":44749,"name":"int64","nodeType":"ElementaryTypeName","src":"30276:5:119","typeDescriptions":{"typeIdentifier":"t_int64","typeString":"int64"}},"visibility":"internal"}],"src":"30275:18:119"},"scope":44983,"src":"30222:220:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44795,"nodeType":"Block","src":"30832:148:119","statements":[{"expression":{"id":44783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44778,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44776,"src":"30842:10:119","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44781,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44773,"src":"30861:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44780,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30855:5:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int56_$","typeString":"type(int56)"},"typeName":{"id":44779,"name":"int56","nodeType":"ElementaryTypeName","src":"30855:5:119","typeDescriptions":{}}},"id":44782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30855:12:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"src":"30842:25:119","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"id":44784,"nodeType":"ExpressionStatement","src":"30842:25:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44785,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44776,"src":"30881:10:119","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44786,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44773,"src":"30895:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"30881:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44794,"nodeType":"IfStatement","src":"30877:97:119","trueBody":{"id":44793,"nodeType":"Block","src":"30902:72:119","statements":[{"errorCall":{"arguments":[{"hexValue":"3536","id":44789,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"30953:2:119","typeDescriptions":{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},"value":"56"},{"id":44790,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44773,"src":"30957:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_56_by_1","typeString":"int_const 56"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44788,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"30923:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44791,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30923:40:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44792,"nodeType":"RevertStatement","src":"30916:47:119"}]}}]},"documentation":{"id":44771,"nodeType":"StructuredDocumentation","src":"30448:307:119","text":" @dev Returns the downcasted int56 from int256, reverting on\n overflow (when the input is less than smallest int56 or\n greater than largest int56).\n Counterpart to Solidity's `int56` operator.\n Requirements:\n - input must fit into 56 bits"},"id":44796,"implemented":true,"kind":"function","modifiers":[],"name":"toInt56","nameLocation":"30769:7:119","nodeType":"FunctionDefinition","parameters":{"id":44774,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44773,"mutability":"mutable","name":"value","nameLocation":"30784:5:119","nodeType":"VariableDeclaration","scope":44796,"src":"30777:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44772,"name":"int256","nodeType":"ElementaryTypeName","src":"30777:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"30776:14:119"},"returnParameters":{"id":44777,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44776,"mutability":"mutable","name":"downcasted","nameLocation":"30820:10:119","nodeType":"VariableDeclaration","scope":44796,"src":"30814:16:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"},"typeName":{"id":44775,"name":"int56","nodeType":"ElementaryTypeName","src":"30814:5:119","typeDescriptions":{"typeIdentifier":"t_int56","typeString":"int56"}},"visibility":"internal"}],"src":"30813:18:119"},"scope":44983,"src":"30760:220:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44821,"nodeType":"Block","src":"31370:148:119","statements":[{"expression":{"id":44809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44804,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44802,"src":"31380:10:119","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44807,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44799,"src":"31399:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44806,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31393:5:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int48_$","typeString":"type(int48)"},"typeName":{"id":44805,"name":"int48","nodeType":"ElementaryTypeName","src":"31393:5:119","typeDescriptions":{}}},"id":44808,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31393:12:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"src":"31380:25:119","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"id":44810,"nodeType":"ExpressionStatement","src":"31380:25:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44811,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44802,"src":"31419:10:119","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44812,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44799,"src":"31433:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"31419:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44820,"nodeType":"IfStatement","src":"31415:97:119","trueBody":{"id":44819,"nodeType":"Block","src":"31440:72:119","statements":[{"errorCall":{"arguments":[{"hexValue":"3438","id":44815,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31491:2:119","typeDescriptions":{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},"value":"48"},{"id":44816,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44799,"src":"31495:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_48_by_1","typeString":"int_const 48"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44814,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"31461:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31461:40:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44818,"nodeType":"RevertStatement","src":"31454:47:119"}]}}]},"documentation":{"id":44797,"nodeType":"StructuredDocumentation","src":"30986:307:119","text":" @dev Returns the downcasted int48 from int256, reverting on\n overflow (when the input is less than smallest int48 or\n greater than largest int48).\n Counterpart to Solidity's `int48` operator.\n Requirements:\n - input must fit into 48 bits"},"id":44822,"implemented":true,"kind":"function","modifiers":[],"name":"toInt48","nameLocation":"31307:7:119","nodeType":"FunctionDefinition","parameters":{"id":44800,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44799,"mutability":"mutable","name":"value","nameLocation":"31322:5:119","nodeType":"VariableDeclaration","scope":44822,"src":"31315:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44798,"name":"int256","nodeType":"ElementaryTypeName","src":"31315:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"31314:14:119"},"returnParameters":{"id":44803,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44802,"mutability":"mutable","name":"downcasted","nameLocation":"31358:10:119","nodeType":"VariableDeclaration","scope":44822,"src":"31352:16:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"},"typeName":{"id":44801,"name":"int48","nodeType":"ElementaryTypeName","src":"31352:5:119","typeDescriptions":{"typeIdentifier":"t_int48","typeString":"int48"}},"visibility":"internal"}],"src":"31351:18:119"},"scope":44983,"src":"31298:220:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44847,"nodeType":"Block","src":"31908:148:119","statements":[{"expression":{"id":44835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44830,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44828,"src":"31918:10:119","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44833,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44825,"src":"31937:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44832,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31931:5:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int40_$","typeString":"type(int40)"},"typeName":{"id":44831,"name":"int40","nodeType":"ElementaryTypeName","src":"31931:5:119","typeDescriptions":{}}},"id":44834,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31931:12:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"src":"31918:25:119","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"id":44836,"nodeType":"ExpressionStatement","src":"31918:25:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44837,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44828,"src":"31957:10:119","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44838,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44825,"src":"31971:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"31957:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44846,"nodeType":"IfStatement","src":"31953:97:119","trueBody":{"id":44845,"nodeType":"Block","src":"31978:72:119","statements":[{"errorCall":{"arguments":[{"hexValue":"3430","id":44841,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32029:2:119","typeDescriptions":{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},"value":"40"},{"id":44842,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44825,"src":"32033:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_40_by_1","typeString":"int_const 40"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44840,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"31999:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31999:40:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44844,"nodeType":"RevertStatement","src":"31992:47:119"}]}}]},"documentation":{"id":44823,"nodeType":"StructuredDocumentation","src":"31524:307:119","text":" @dev Returns the downcasted int40 from int256, reverting on\n overflow (when the input is less than smallest int40 or\n greater than largest int40).\n Counterpart to Solidity's `int40` operator.\n Requirements:\n - input must fit into 40 bits"},"id":44848,"implemented":true,"kind":"function","modifiers":[],"name":"toInt40","nameLocation":"31845:7:119","nodeType":"FunctionDefinition","parameters":{"id":44826,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44825,"mutability":"mutable","name":"value","nameLocation":"31860:5:119","nodeType":"VariableDeclaration","scope":44848,"src":"31853:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44824,"name":"int256","nodeType":"ElementaryTypeName","src":"31853:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"31852:14:119"},"returnParameters":{"id":44829,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44828,"mutability":"mutable","name":"downcasted","nameLocation":"31896:10:119","nodeType":"VariableDeclaration","scope":44848,"src":"31890:16:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"},"typeName":{"id":44827,"name":"int40","nodeType":"ElementaryTypeName","src":"31890:5:119","typeDescriptions":{"typeIdentifier":"t_int40","typeString":"int40"}},"visibility":"internal"}],"src":"31889:18:119"},"scope":44983,"src":"31836:220:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44873,"nodeType":"Block","src":"32446:148:119","statements":[{"expression":{"id":44861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44856,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44854,"src":"32456:10:119","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44859,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44851,"src":"32475:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44858,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32469:5:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int32_$","typeString":"type(int32)"},"typeName":{"id":44857,"name":"int32","nodeType":"ElementaryTypeName","src":"32469:5:119","typeDescriptions":{}}},"id":44860,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32469:12:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"src":"32456:25:119","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"id":44862,"nodeType":"ExpressionStatement","src":"32456:25:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44863,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44854,"src":"32495:10:119","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44864,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44851,"src":"32509:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"32495:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44872,"nodeType":"IfStatement","src":"32491:97:119","trueBody":{"id":44871,"nodeType":"Block","src":"32516:72:119","statements":[{"errorCall":{"arguments":[{"hexValue":"3332","id":44867,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"32567:2:119","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},{"id":44868,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44851,"src":"32571:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44866,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"32537:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44869,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32537:40:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44870,"nodeType":"RevertStatement","src":"32530:47:119"}]}}]},"documentation":{"id":44849,"nodeType":"StructuredDocumentation","src":"32062:307:119","text":" @dev Returns the downcasted int32 from int256, reverting on\n overflow (when the input is less than smallest int32 or\n greater than largest int32).\n Counterpart to Solidity's `int32` operator.\n Requirements:\n - input must fit into 32 bits"},"id":44874,"implemented":true,"kind":"function","modifiers":[],"name":"toInt32","nameLocation":"32383:7:119","nodeType":"FunctionDefinition","parameters":{"id":44852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44851,"mutability":"mutable","name":"value","nameLocation":"32398:5:119","nodeType":"VariableDeclaration","scope":44874,"src":"32391:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44850,"name":"int256","nodeType":"ElementaryTypeName","src":"32391:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"32390:14:119"},"returnParameters":{"id":44855,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44854,"mutability":"mutable","name":"downcasted","nameLocation":"32434:10:119","nodeType":"VariableDeclaration","scope":44874,"src":"32428:16:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"},"typeName":{"id":44853,"name":"int32","nodeType":"ElementaryTypeName","src":"32428:5:119","typeDescriptions":{"typeIdentifier":"t_int32","typeString":"int32"}},"visibility":"internal"}],"src":"32427:18:119"},"scope":44983,"src":"32374:220:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44899,"nodeType":"Block","src":"32984:148:119","statements":[{"expression":{"id":44887,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44882,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44880,"src":"32994:10:119","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44885,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44877,"src":"33013:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44884,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33007:5:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int24_$","typeString":"type(int24)"},"typeName":{"id":44883,"name":"int24","nodeType":"ElementaryTypeName","src":"33007:5:119","typeDescriptions":{}}},"id":44886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33007:12:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"src":"32994:25:119","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"id":44888,"nodeType":"ExpressionStatement","src":"32994:25:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44891,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44889,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44880,"src":"33033:10:119","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44890,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44877,"src":"33047:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"33033:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44898,"nodeType":"IfStatement","src":"33029:97:119","trueBody":{"id":44897,"nodeType":"Block","src":"33054:72:119","statements":[{"errorCall":{"arguments":[{"hexValue":"3234","id":44893,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33105:2:119","typeDescriptions":{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},"value":"24"},{"id":44894,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44877,"src":"33109:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_24_by_1","typeString":"int_const 24"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44892,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"33075:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44895,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33075:40:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44896,"nodeType":"RevertStatement","src":"33068:47:119"}]}}]},"documentation":{"id":44875,"nodeType":"StructuredDocumentation","src":"32600:307:119","text":" @dev Returns the downcasted int24 from int256, reverting on\n overflow (when the input is less than smallest int24 or\n greater than largest int24).\n Counterpart to Solidity's `int24` operator.\n Requirements:\n - input must fit into 24 bits"},"id":44900,"implemented":true,"kind":"function","modifiers":[],"name":"toInt24","nameLocation":"32921:7:119","nodeType":"FunctionDefinition","parameters":{"id":44878,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44877,"mutability":"mutable","name":"value","nameLocation":"32936:5:119","nodeType":"VariableDeclaration","scope":44900,"src":"32929:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44876,"name":"int256","nodeType":"ElementaryTypeName","src":"32929:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"32928:14:119"},"returnParameters":{"id":44881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44880,"mutability":"mutable","name":"downcasted","nameLocation":"32972:10:119","nodeType":"VariableDeclaration","scope":44900,"src":"32966:16:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"},"typeName":{"id":44879,"name":"int24","nodeType":"ElementaryTypeName","src":"32966:5:119","typeDescriptions":{"typeIdentifier":"t_int24","typeString":"int24"}},"visibility":"internal"}],"src":"32965:18:119"},"scope":44983,"src":"32912:220:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44925,"nodeType":"Block","src":"33522:148:119","statements":[{"expression":{"id":44913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44908,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44906,"src":"33532:10:119","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44911,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44903,"src":"33551:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44910,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"33545:5:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int16_$","typeString":"type(int16)"},"typeName":{"id":44909,"name":"int16","nodeType":"ElementaryTypeName","src":"33545:5:119","typeDescriptions":{}}},"id":44912,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33545:12:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"src":"33532:25:119","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"id":44914,"nodeType":"ExpressionStatement","src":"33532:25:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44915,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44906,"src":"33571:10:119","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44916,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44903,"src":"33585:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"33571:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44924,"nodeType":"IfStatement","src":"33567:97:119","trueBody":{"id":44923,"nodeType":"Block","src":"33592:72:119","statements":[{"errorCall":{"arguments":[{"hexValue":"3136","id":44919,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33643:2:119","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},{"id":44920,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44903,"src":"33647:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44918,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"33613:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44921,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33613:40:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44922,"nodeType":"RevertStatement","src":"33606:47:119"}]}}]},"documentation":{"id":44901,"nodeType":"StructuredDocumentation","src":"33138:307:119","text":" @dev Returns the downcasted int16 from int256, reverting on\n overflow (when the input is less than smallest int16 or\n greater than largest int16).\n Counterpart to Solidity's `int16` operator.\n Requirements:\n - input must fit into 16 bits"},"id":44926,"implemented":true,"kind":"function","modifiers":[],"name":"toInt16","nameLocation":"33459:7:119","nodeType":"FunctionDefinition","parameters":{"id":44904,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44903,"mutability":"mutable","name":"value","nameLocation":"33474:5:119","nodeType":"VariableDeclaration","scope":44926,"src":"33467:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44902,"name":"int256","nodeType":"ElementaryTypeName","src":"33467:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"33466:14:119"},"returnParameters":{"id":44907,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44906,"mutability":"mutable","name":"downcasted","nameLocation":"33510:10:119","nodeType":"VariableDeclaration","scope":44926,"src":"33504:16:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"},"typeName":{"id":44905,"name":"int16","nodeType":"ElementaryTypeName","src":"33504:5:119","typeDescriptions":{"typeIdentifier":"t_int16","typeString":"int16"}},"visibility":"internal"}],"src":"33503:18:119"},"scope":44983,"src":"33450:220:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44951,"nodeType":"Block","src":"34053:146:119","statements":[{"expression":{"id":44939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":44934,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44932,"src":"34063:10:119","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":44937,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44929,"src":"34081:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44936,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34076:4:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int8_$","typeString":"type(int8)"},"typeName":{"id":44935,"name":"int8","nodeType":"ElementaryTypeName","src":"34076:4:119","typeDescriptions":{}}},"id":44938,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34076:11:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"src":"34063:24:119","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"id":44940,"nodeType":"ExpressionStatement","src":"34063:24:119"},{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44941,"name":"downcasted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44932,"src":"34101:10:119","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":44942,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44929,"src":"34115:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"34101:19:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44950,"nodeType":"IfStatement","src":"34097:96:119","trueBody":{"id":44949,"nodeType":"Block","src":"34122:71:119","statements":[{"errorCall":{"arguments":[{"hexValue":"38","id":44945,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34173:1:119","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},{"id":44946,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44929,"src":"34176:5:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44944,"name":"SafeCastOverflowedIntDowncast","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43250,"src":"34143:29:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint8_$_t_int256_$returns$_t_error_$","typeString":"function (uint8,int256) pure returns (error)"}},"id":44947,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34143:39:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44948,"nodeType":"RevertStatement","src":"34136:46:119"}]}}]},"documentation":{"id":44927,"nodeType":"StructuredDocumentation","src":"33676:302:119","text":" @dev Returns the downcasted int8 from int256, reverting on\n overflow (when the input is less than smallest int8 or\n greater than largest int8).\n Counterpart to Solidity's `int8` operator.\n Requirements:\n - input must fit into 8 bits"},"id":44952,"implemented":true,"kind":"function","modifiers":[],"name":"toInt8","nameLocation":"33992:6:119","nodeType":"FunctionDefinition","parameters":{"id":44930,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44929,"mutability":"mutable","name":"value","nameLocation":"34006:5:119","nodeType":"VariableDeclaration","scope":44952,"src":"33999:12:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44928,"name":"int256","nodeType":"ElementaryTypeName","src":"33999:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"33998:14:119"},"returnParameters":{"id":44933,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44932,"mutability":"mutable","name":"downcasted","nameLocation":"34041:10:119","nodeType":"VariableDeclaration","scope":44952,"src":"34036:15:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"},"typeName":{"id":44931,"name":"int8","nodeType":"ElementaryTypeName","src":"34036:4:119","typeDescriptions":{"typeIdentifier":"t_int8","typeString":"int8"}},"visibility":"internal"}],"src":"34035:17:119"},"scope":44983,"src":"33983:216:119","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":44981,"nodeType":"Block","src":"34439:250:119","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":44969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44960,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44955,"src":"34552:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[{"expression":{"arguments":[{"id":44965,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34573:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":44964,"name":"int256","nodeType":"ElementaryTypeName","src":"34573:6:119","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"}],"id":44963,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"34568:4:119","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":44966,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34568:12:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_int256","typeString":"type(int256)"}},"id":44967,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"34581:3:119","memberName":"max","nodeType":"MemberAccess","src":"34568:16:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":44962,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34560:7:119","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":44961,"name":"uint256","nodeType":"ElementaryTypeName","src":"34560:7:119","typeDescriptions":{}}},"id":44968,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34560:25:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"34552:33:119","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":44975,"nodeType":"IfStatement","src":"34548:105:119","trueBody":{"id":44974,"nodeType":"Block","src":"34587:66:119","statements":[{"errorCall":{"arguments":[{"id":44971,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44955,"src":"34636:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":44970,"name":"SafeCastOverflowedUintToInt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43255,"src":"34608:27:119","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$returns$_t_error_$","typeString":"function (uint256) pure returns (error)"}},"id":44972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34608:34:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":44973,"nodeType":"RevertStatement","src":"34601:41:119"}]}},{"expression":{"arguments":[{"id":44978,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44955,"src":"34676:5:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":44977,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34669:6:119","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":44976,"name":"int256","nodeType":"ElementaryTypeName","src":"34669:6:119","typeDescriptions":{}}},"id":44979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34669:13:119","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":44959,"id":44980,"nodeType":"Return","src":"34662:20:119"}]},"documentation":{"id":44953,"nodeType":"StructuredDocumentation","src":"34205:165:119","text":" @dev Converts an unsigned uint256 into a signed int256.\n Requirements:\n - input must be less than or equal to maxInt256."},"id":44982,"implemented":true,"kind":"function","modifiers":[],"name":"toInt256","nameLocation":"34384:8:119","nodeType":"FunctionDefinition","parameters":{"id":44956,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44955,"mutability":"mutable","name":"value","nameLocation":"34401:5:119","nodeType":"VariableDeclaration","scope":44982,"src":"34393:13:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":44954,"name":"uint256","nodeType":"ElementaryTypeName","src":"34393:7:119","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34392:15:119"},"returnParameters":{"id":44959,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44958,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":44982,"src":"34431:6:119","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44957,"name":"int256","nodeType":"ElementaryTypeName","src":"34431:6:119","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"34430:8:119"},"scope":44983,"src":"34375:314:119","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":44984,"src":"764:33927:119","usedErrors":[43238,43243,43250,43255],"usedEvents":[]}],"src":"192:34500:119"},"id":119},"@openzeppelin/contracts/utils/math/SignedMath.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/math/SignedMath.sol","exportedSymbols":{"SignedMath":[45088]},"id":45089,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":44985,"literals":["solidity","^","0.8",".20"],"nodeType":"PragmaDirective","src":"109:24:120"},{"abstract":false,"baseContracts":[],"canonicalName":"SignedMath","contractDependencies":[],"contractKind":"library","documentation":{"id":44986,"nodeType":"StructuredDocumentation","src":"135:80:120","text":" @dev Standard signed math utilities missing in the Solidity language."},"fullyImplemented":true,"id":45088,"linearizedBaseContracts":[45088],"name":"SignedMath","nameLocation":"224:10:120","nodeType":"ContractDefinition","nodes":[{"body":{"id":45003,"nodeType":"Block","src":"376:37:120","statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":44998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":44996,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44989,"src":"393:1:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":44997,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44991,"src":"397:1:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"393:5:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":45000,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44991,"src":"405:1:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":45001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"393:13:120","trueExpression":{"id":44999,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44989,"src":"401:1:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":44995,"id":45002,"nodeType":"Return","src":"386:20:120"}]},"documentation":{"id":44987,"nodeType":"StructuredDocumentation","src":"241:66:120","text":" @dev Returns the largest of two signed numbers."},"id":45004,"implemented":true,"kind":"function","modifiers":[],"name":"max","nameLocation":"321:3:120","nodeType":"FunctionDefinition","parameters":{"id":44992,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44989,"mutability":"mutable","name":"a","nameLocation":"332:1:120","nodeType":"VariableDeclaration","scope":45004,"src":"325:8:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44988,"name":"int256","nodeType":"ElementaryTypeName","src":"325:6:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":44991,"mutability":"mutable","name":"b","nameLocation":"342:1:120","nodeType":"VariableDeclaration","scope":45004,"src":"335:8:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44990,"name":"int256","nodeType":"ElementaryTypeName","src":"335:6:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"324:20:120"},"returnParameters":{"id":44995,"nodeType":"ParameterList","parameters":[{"constant":false,"id":44994,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45004,"src":"368:6:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":44993,"name":"int256","nodeType":"ElementaryTypeName","src":"368:6:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"367:8:120"},"scope":45088,"src":"312:101:120","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":45021,"nodeType":"Block","src":"555:37:120","statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":45016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45014,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45007,"src":"572:1:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":45015,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45009,"src":"576:1:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"572:5:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":45018,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45009,"src":"584:1:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":45019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"572:13:120","trueExpression":{"id":45017,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45007,"src":"580:1:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":45013,"id":45020,"nodeType":"Return","src":"565:20:120"}]},"documentation":{"id":45005,"nodeType":"StructuredDocumentation","src":"419:67:120","text":" @dev Returns the smallest of two signed numbers."},"id":45022,"implemented":true,"kind":"function","modifiers":[],"name":"min","nameLocation":"500:3:120","nodeType":"FunctionDefinition","parameters":{"id":45010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45007,"mutability":"mutable","name":"a","nameLocation":"511:1:120","nodeType":"VariableDeclaration","scope":45022,"src":"504:8:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":45006,"name":"int256","nodeType":"ElementaryTypeName","src":"504:6:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":45009,"mutability":"mutable","name":"b","nameLocation":"521:1:120","nodeType":"VariableDeclaration","scope":45022,"src":"514:8:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":45008,"name":"int256","nodeType":"ElementaryTypeName","src":"514:6:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"503:20:120"},"returnParameters":{"id":45013,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45012,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45022,"src":"547:6:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":45011,"name":"int256","nodeType":"ElementaryTypeName","src":"547:6:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"546:8:120"},"scope":45088,"src":"491:101:120","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":45065,"nodeType":"Block","src":"797:162:120","statements":[{"assignments":[45033],"declarations":[{"constant":false,"id":45033,"mutability":"mutable","name":"x","nameLocation":"866:1:120","nodeType":"VariableDeclaration","scope":45065,"src":"859:8:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":45032,"name":"int256","nodeType":"ElementaryTypeName","src":"859:6:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"id":45046,"initialValue":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":45045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":45036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45034,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45025,"src":"871:1:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":45035,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45027,"src":"875:1:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"871:5:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":45037,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"870:7:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":45043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":45040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45038,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45025,"src":"882:1:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"id":45039,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45027,"src":"886:1:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"882:5:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":45041,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"881:7:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":45042,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"892:1:120","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"881:12:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":45044,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"880:14:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"870:24:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"VariableDeclarationStatement","src":"859:35:120"},{"expression":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":45063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45047,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45033,"src":"911:1:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":45061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":45052,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45033,"src":"931:1:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":45051,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"923:7:120","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":45050,"name":"uint256","nodeType":"ElementaryTypeName","src":"923:7:120","typeDescriptions":{}}},"id":45053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"923:10:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"323535","id":45054,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"937:3:120","typeDescriptions":{"typeIdentifier":"t_rational_255_by_1","typeString":"int_const 255"},"value":"255"},"src":"923:17:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":45049,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"916:6:120","typeDescriptions":{"typeIdentifier":"t_type$_t_int256_$","typeString":"type(int256)"},"typeName":{"id":45048,"name":"int256","nodeType":"ElementaryTypeName","src":"916:6:120","typeDescriptions":{}}},"id":45056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"916:25:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":45059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45057,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45025,"src":"945:1:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"id":45058,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45027,"src":"949:1:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"945:5:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":45060,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"944:7:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"916:35:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"id":45062,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"915:37:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"src":"911:41:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"functionReturnParameters":45031,"id":45064,"nodeType":"Return","src":"904:48:120"}]},"documentation":{"id":45023,"nodeType":"StructuredDocumentation","src":"598:126:120","text":" @dev Returns the average of two signed numbers without overflow.\n The result is rounded towards zero."},"id":45066,"implemented":true,"kind":"function","modifiers":[],"name":"average","nameLocation":"738:7:120","nodeType":"FunctionDefinition","parameters":{"id":45028,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45025,"mutability":"mutable","name":"a","nameLocation":"753:1:120","nodeType":"VariableDeclaration","scope":45066,"src":"746:8:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":45024,"name":"int256","nodeType":"ElementaryTypeName","src":"746:6:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"},{"constant":false,"id":45027,"mutability":"mutable","name":"b","nameLocation":"763:1:120","nodeType":"VariableDeclaration","scope":45066,"src":"756:8:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":45026,"name":"int256","nodeType":"ElementaryTypeName","src":"756:6:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"745:20:120"},"returnParameters":{"id":45031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45030,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45066,"src":"789:6:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":45029,"name":"int256","nodeType":"ElementaryTypeName","src":"789:6:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"788:8:120"},"scope":45088,"src":"729:230:120","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":45086,"nodeType":"Block","src":"1103:158:120","statements":[{"id":45085,"nodeType":"UncheckedBlock","src":"1113:142:120","statements":[{"expression":{"arguments":[{"condition":{"commonType":{"typeIdentifier":"t_int256","typeString":"int256"},"id":45078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45076,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45069,"src":"1228:1:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"hexValue":"30","id":45077,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1233:1:120","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1228:6:120","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":45081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"-","prefix":true,"src":"1241:2:120","subExpression":{"id":45080,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45069,"src":"1242:1:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"id":45082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"1228:15:120","trueExpression":{"id":45079,"name":"n","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45069,"src":"1237:1:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_int256","typeString":"int256"}],"id":45075,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1220:7:120","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":45074,"name":"uint256","nodeType":"ElementaryTypeName","src":"1220:7:120","typeDescriptions":{}}},"id":45083,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1220:24:120","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":45073,"id":45084,"nodeType":"Return","src":"1213:31:120"}]}]},"documentation":{"id":45067,"nodeType":"StructuredDocumentation","src":"965:78:120","text":" @dev Returns the absolute unsigned value of a signed value."},"id":45087,"implemented":true,"kind":"function","modifiers":[],"name":"abs","nameLocation":"1057:3:120","nodeType":"FunctionDefinition","parameters":{"id":45070,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45069,"mutability":"mutable","name":"n","nameLocation":"1068:1:120","nodeType":"VariableDeclaration","scope":45087,"src":"1061:8:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"},"typeName":{"id":45068,"name":"int256","nodeType":"ElementaryTypeName","src":"1061:6:120","typeDescriptions":{"typeIdentifier":"t_int256","typeString":"int256"}},"visibility":"internal"}],"src":"1060:10:120"},"returnParameters":{"id":45073,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45072,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45087,"src":"1094:7:120","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45071,"name":"uint256","nodeType":"ElementaryTypeName","src":"1094:7:120","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1093:9:120"},"scope":45088,"src":"1048:213:120","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":45089,"src":"216:1047:120","usedErrors":[],"usedEvents":[]}],"src":"109:1155:120"},"id":120},"contracts/WeightedPool.sol":{"ast":{"absolutePath":"contracts/WeightedPool.sol","exportedSymbols":{"AddLiquidityKind":[4807],"AddLiquidityParams":[4823],"AfterSwapParams":[4801],"BalancerPoolToken":[11106],"BufferWrapOrUnwrapParams":[4862],"FEE_BITLENGTH":[4865],"FEE_SCALING_FACTOR":[4868],"FixedPoint":[8208],"HookFlags":[4627],"HooksConfig":[4651],"IBasePool":[1505],"IERC20":[40109],"IERC4626":[39833],"IRateProvider":[263],"ISwapFeePercentageBounds":[3057],"IUnbalancedLiquidityInvariantRatioBounds":[3073],"IVault":[3111],"IVaultErrors":[3768],"IWeightedPool":[228],"InputHelpers":[6193],"LiquidityManagement":[4580],"MAX_FEE_PERCENTAGE":[4871],"PoolConfig":[4605],"PoolConfigBits":[4582],"PoolData":[4729],"PoolInfo":[5418],"PoolRoleAccounts":[4677],"PoolSwapParams":[4772],"RemoveLiquidityKind":[4828],"RemoveLiquidityParams":[4844],"Rounding":[4732],"SwapKind":[4735],"SwapState":[4661],"TokenConfig":[4694],"TokenInfo":[4704],"TokenType":[4681],"VaultState":[4669],"VaultSwapParams":[4754],"Version":[7482],"WeightedMath":[9873],"WeightedPool":[45841],"WeightedPoolDynamicData":[197],"WeightedPoolImmutableData":[179],"WrappingDirection":[4847]},"id":45842,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":45090,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:121"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol","id":45092,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":45842,"sourceUnit":3058,"src":"72:117:121","symbolAliases":[{"foreign":{"id":45091,"name":"ISwapFeePercentageBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3057,"src":"81:24:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol","id":45094,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":45842,"sourceUnit":3074,"src":"190:153:121","symbolAliases":[{"foreign":{"id":45093,"name":"IUnbalancedLiquidityInvariantRatioBounds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3073,"src":"203:40:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":45096,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":45842,"sourceUnit":3769,"src":"344:93:121","symbolAliases":[{"foreign":{"id":45095,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"353:12:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol","id":45098,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":45842,"sourceUnit":1506,"src":"438:87:121","symbolAliases":[{"foreign":{"id":45097,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1505,"src":"447:9:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":45100,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":45842,"sourceUnit":3112,"src":"526:81:121","symbolAliases":[{"foreign":{"id":45099,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"535:6:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol","file":"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol","id":45104,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":45842,"sourceUnit":229,"src":"608:167:121","symbolAliases":[{"foreign":{"id":45101,"name":"IWeightedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":228,"src":"621:13:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":45102,"name":"WeightedPoolDynamicData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":197,"src":"640:23:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":45103,"name":"WeightedPoolImmutableData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":179,"src":"669:25:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":45105,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":45842,"sourceUnit":4872,"src":"776:69:121","symbolAliases":[],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","id":45107,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":45842,"sourceUnit":6194,"src":"847:99:121","symbolAliases":[{"foreign":{"id":45106,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6193,"src":"856:12:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/WeightedMath.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/WeightedMath.sol","id":45109,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":45842,"sourceUnit":9874,"src":"947:96:121","symbolAliases":[{"foreign":{"id":45108,"name":"WeightedMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9873,"src":"956:12:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol","file":"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol","id":45111,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":45842,"sourceUnit":11107,"src":"1044:92:121","symbolAliases":[{"foreign":{"id":45110,"name":"BalancerPoolToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11106,"src":"1053:17:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":45113,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":45842,"sourceUnit":8209,"src":"1137:92:121","symbolAliases":[{"foreign":{"id":45112,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"1146:10:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","id":45115,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":45842,"sourceUnit":7483,"src":"1230:89:121","symbolAliases":[{"foreign":{"id":45114,"name":"Version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7482,"src":"1239:7:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol","file":"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol","id":45117,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":45842,"sourceUnit":5419,"src":"1320:79:121","symbolAliases":[{"foreign":{"id":45116,"name":"PoolInfo","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5418,"src":"1329:8:121","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":45119,"name":"IWeightedPool","nameLocations":["1956:13:121"],"nodeType":"IdentifierPath","referencedDeclaration":228,"src":"1956:13:121"},"id":45120,"nodeType":"InheritanceSpecifier","src":"1956:13:121"},{"baseName":{"id":45121,"name":"BalancerPoolToken","nameLocations":["1971:17:121"],"nodeType":"IdentifierPath","referencedDeclaration":11106,"src":"1971:17:121"},"id":45122,"nodeType":"InheritanceSpecifier","src":"1971:17:121"},{"baseName":{"id":45123,"name":"PoolInfo","nameLocations":["1990:8:121"],"nodeType":"IdentifierPath","referencedDeclaration":5418,"src":"1990:8:121"},"id":45124,"nodeType":"InheritanceSpecifier","src":"1990:8:121"},{"baseName":{"id":45125,"name":"Version","nameLocations":["2000:7:121"],"nodeType":"IdentifierPath","referencedDeclaration":7482,"src":"2000:7:121"},"id":45126,"nodeType":"InheritanceSpecifier","src":"2000:7:121"}],"canonicalName":"WeightedPool","contractDependencies":[],"contractKind":"contract","documentation":{"id":45118,"nodeType":"StructuredDocumentation","src":"1401:529:121","text":" @notice Standard Balancer Weighted Pool, with fixed weights.\n @dev Weighted Pools are designed for uncorrelated assets, and use `WeightedMath` (from Balancer v1 and v2)\n to compute the price curve.\n There can be up to 8 tokens in a weighted pool (same as v2), and the normalized weights (expressed as 18-decimal\n floating point numbers), must sum to FixedPoint.ONE. Weights cannot be changed after deployment.\n The swap fee percentage is bounded by minimum and maximum values (same as were used in v2)."},"fullyImplemented":true,"id":45841,"internalFunctionIDs":{"7990":1,"8006":2,"9646":3,"9699":4},"linearizedBaseContracts":[45841,7482,273,5418,54,11106,28149,42162,42174,40907,42064,39858,263,40171,40135,40109,228,1505,3073,3057],"name":"WeightedPool","nameLocation":"1940:12:121","nodeType":"ContractDefinition","nodes":[{"canonicalName":"WeightedPool.NewPoolParams","documentation":{"id":45127,"nodeType":"StructuredDocumentation","src":"2014:110:121","text":"@dev Struct with data for deploying a new WeightedPool. `normalizedWeights` length must match `numTokens`."},"id":45139,"members":[{"constant":false,"id":45129,"mutability":"mutable","name":"name","nameLocation":"2167:4:121","nodeType":"VariableDeclaration","scope":45139,"src":"2160:11:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":45128,"name":"string","nodeType":"ElementaryTypeName","src":"2160:6:121","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":45131,"mutability":"mutable","name":"symbol","nameLocation":"2188:6:121","nodeType":"VariableDeclaration","scope":45139,"src":"2181:13:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":45130,"name":"string","nodeType":"ElementaryTypeName","src":"2181:6:121","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":45133,"mutability":"mutable","name":"numTokens","nameLocation":"2212:9:121","nodeType":"VariableDeclaration","scope":45139,"src":"2204:17:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45132,"name":"uint256","nodeType":"ElementaryTypeName","src":"2204:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":45136,"mutability":"mutable","name":"normalizedWeights","nameLocation":"2241:17:121","nodeType":"VariableDeclaration","scope":45139,"src":"2231:27:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":45134,"name":"uint256","nodeType":"ElementaryTypeName","src":"2231:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45135,"nodeType":"ArrayTypeName","src":"2231:9:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":45138,"mutability":"mutable","name":"version","nameLocation":"2275:7:121","nodeType":"VariableDeclaration","scope":45139,"src":"2268:14:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"},"typeName":{"id":45137,"name":"string","nodeType":"ElementaryTypeName","src":"2268:6:121","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"name":"NewPoolParams","nameLocation":"2136:13:121","nodeType":"StructDefinition","scope":45841,"src":"2129:160:121","visibility":"public"},{"constant":true,"id":45142,"mutability":"constant","name":"_MIN_SWAP_FEE_PERCENTAGE","nameLocation":"2751:24:121","nodeType":"VariableDeclaration","scope":45841,"src":"2726:60:121","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45140,"name":"uint256","nodeType":"ElementaryTypeName","src":"2726:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"302e303031653136","id":45141,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2778:8:121","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000_by_1","typeString":"int_const 10000000000000"},"value":"0.001e16"},"visibility":"private"},{"constant":true,"id":45145,"mutability":"constant","name":"_MAX_SWAP_FEE_PERCENTAGE","nameLocation":"2827:24:121","nodeType":"VariableDeclaration","scope":45841,"src":"2802:57:121","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45143,"name":"uint256","nodeType":"ElementaryTypeName","src":"2802:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3130653136","id":45144,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2854:5:121","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000_by_1","typeString":"int_const 100000000000000000"},"value":"10e16"},"visibility":"private"},{"constant":true,"id":45148,"mutability":"constant","name":"_MIN_WEIGHT","nameLocation":"3099:11:121","nodeType":"VariableDeclaration","scope":45841,"src":"3073:44:121","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45146,"name":"uint256","nodeType":"ElementaryTypeName","src":"3073:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653136","id":45147,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3113:4:121","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"},"value":"1e16"},"visibility":"internal"},{"constant":false,"id":45150,"mutability":"immutable","name":"_totalTokens","nameLocation":"3156:12:121","nodeType":"VariableDeclaration","scope":45841,"src":"3130:38:121","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45149,"name":"uint256","nodeType":"ElementaryTypeName","src":"3130:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":45152,"mutability":"immutable","name":"_normalizedWeight0","nameLocation":"3202:18:121","nodeType":"VariableDeclaration","scope":45841,"src":"3175:45:121","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45151,"name":"uint256","nodeType":"ElementaryTypeName","src":"3175:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":45154,"mutability":"immutable","name":"_normalizedWeight1","nameLocation":"3253:18:121","nodeType":"VariableDeclaration","scope":45841,"src":"3226:45:121","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45153,"name":"uint256","nodeType":"ElementaryTypeName","src":"3226:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":45156,"mutability":"immutable","name":"_normalizedWeight2","nameLocation":"3304:18:121","nodeType":"VariableDeclaration","scope":45841,"src":"3277:45:121","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45155,"name":"uint256","nodeType":"ElementaryTypeName","src":"3277:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":45158,"mutability":"immutable","name":"_normalizedWeight3","nameLocation":"3355:18:121","nodeType":"VariableDeclaration","scope":45841,"src":"3328:45:121","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45157,"name":"uint256","nodeType":"ElementaryTypeName","src":"3328:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":45160,"mutability":"immutable","name":"_normalizedWeight4","nameLocation":"3406:18:121","nodeType":"VariableDeclaration","scope":45841,"src":"3379:45:121","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45159,"name":"uint256","nodeType":"ElementaryTypeName","src":"3379:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":45162,"mutability":"immutable","name":"_normalizedWeight5","nameLocation":"3457:18:121","nodeType":"VariableDeclaration","scope":45841,"src":"3430:45:121","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45161,"name":"uint256","nodeType":"ElementaryTypeName","src":"3430:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":45164,"mutability":"immutable","name":"_normalizedWeight6","nameLocation":"3508:18:121","nodeType":"VariableDeclaration","scope":45841,"src":"3481:45:121","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45163,"name":"uint256","nodeType":"ElementaryTypeName","src":"3481:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":45166,"mutability":"immutable","name":"_normalizedWeight7","nameLocation":"3559:18:121","nodeType":"VariableDeclaration","scope":45841,"src":"3532:45:121","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45165,"name":"uint256","nodeType":"ElementaryTypeName","src":"3532:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"documentation":{"id":45167,"nodeType":"StructuredDocumentation","src":"3584:678:121","text":" @notice `getRate` from `IRateProvider` was called on a Weighted Pool.\n @dev It is not safe to nest Weighted Pools as WITH_RATE tokens in other pools, where they function as their own\n rate provider. The default `getRate` implementation from `BalancerPoolToken` computes the BPT rate using the\n invariant, which has a non-trivial (and non-linear) error. Without the ability to specify a rounding direction,\n the rate could be manipulable.\n It is fine to nest Weighted Pools as STANDARD tokens, or to use them with external rate providers that are\n stable and have at most 1 wei of rounding error (e.g., oracle-based)."},"errorSelector":"18e79a20","id":45169,"name":"WeightedPoolBptRateUnsupported","nameLocation":"4273:30:121","nodeType":"ErrorDefinition","parameters":{"id":45168,"nodeType":"ParameterList","parameters":[],"src":"4303:2:121"},"src":"4267:39:121"},{"body":{"id":45324,"nodeType":"Block","src":"4482:1298:121","statements":[{"expression":{"id":45195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":45192,"name":"_totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45150,"src":"4492:12:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":45193,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45172,"src":"4507:6:121","typeDescriptions":{"typeIdentifier":"t_struct$_NewPoolParams_$45139_memory_ptr","typeString":"struct WeightedPool.NewPoolParams memory"}},"id":45194,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4514:9:121","memberName":"numTokens","nodeType":"MemberAccess","referencedDeclaration":45133,"src":"4507:16:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4492:31:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45196,"nodeType":"ExpressionStatement","src":"4492:31:121"},{"expression":{"arguments":[{"id":45200,"name":"_totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45150,"src":"4569:12:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"expression":{"id":45201,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45172,"src":"4583:6:121","typeDescriptions":{"typeIdentifier":"t_struct$_NewPoolParams_$45139_memory_ptr","typeString":"struct WeightedPool.NewPoolParams memory"}},"id":45202,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4590:17:121","memberName":"normalizedWeights","nodeType":"MemberAccess","referencedDeclaration":45136,"src":"4583:24:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":45203,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4608:6:121","memberName":"length","nodeType":"MemberAccess","src":"4583:31:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":45197,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6193,"src":"4533:12:121","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$6193_$","typeString":"type(library InputHelpers)"}},"id":45199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4546:22:121","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":5926,"src":"4533:35:121","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":45204,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4533:82:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":45205,"nodeType":"ExpressionStatement","src":"4533:82:121"},{"assignments":[45207],"declarations":[{"constant":false,"id":45207,"mutability":"mutable","name":"normalizedSum","nameLocation":"4697:13:121","nodeType":"VariableDeclaration","scope":45324,"src":"4689:21:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45206,"name":"uint256","nodeType":"ElementaryTypeName","src":"4689:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":45209,"initialValue":{"hexValue":"30","id":45208,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4713:1:121","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4689:25:121"},{"body":{"id":45313,"nodeType":"Block","src":"4765:845:121","statements":[{"assignments":[45221],"declarations":[{"constant":false,"id":45221,"mutability":"mutable","name":"normalizedWeight","nameLocation":"4787:16:121","nodeType":"VariableDeclaration","scope":45313,"src":"4779:24:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45220,"name":"uint256","nodeType":"ElementaryTypeName","src":"4779:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":45226,"initialValue":{"baseExpression":{"expression":{"id":45222,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45172,"src":"4806:6:121","typeDescriptions":{"typeIdentifier":"t_struct$_NewPoolParams_$45139_memory_ptr","typeString":"struct WeightedPool.NewPoolParams memory"}},"id":45223,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4813:17:121","memberName":"normalizedWeights","nodeType":"MemberAccess","referencedDeclaration":45136,"src":"4806:24:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":45225,"indexExpression":{"id":45224,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45211,"src":"4831:1:121","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4806:27:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4779:54:121"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45227,"name":"normalizedWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45221,"src":"4852:16:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":45228,"name":"_MIN_WEIGHT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45148,"src":"4871:11:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4852:30:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":45234,"nodeType":"IfStatement","src":"4848:87:121","trueBody":{"id":45233,"nodeType":"Block","src":"4884:51:121","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":45230,"name":"MinWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":203,"src":"4909:9:121","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":45231,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4909:11:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":45232,"nodeType":"RevertStatement","src":"4902:18:121"}]}},{"expression":{"id":45239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":45235,"name":"normalizedSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45207,"src":"4948:13:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45236,"name":"normalizedSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45207,"src":"4964:13:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":45237,"name":"normalizedWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45221,"src":"4980:16:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4964:32:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4948:48:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45240,"nodeType":"ExpressionStatement","src":"4948:48:121"},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":45243,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45241,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45211,"src":"5046:1:121","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":45242,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5051:1:121","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5046:6:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":45251,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45249,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45211,"src":"5118:1:121","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":45250,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5123:1:121","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5118:6:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":45259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45257,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45211,"src":"5190:1:121","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"32","id":45258,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5195:1:121","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"5190:6:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":45267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45265,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45211,"src":"5262:1:121","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"33","id":45266,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5267:1:121","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"5262:6:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":45275,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45273,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45211,"src":"5334:1:121","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"34","id":45274,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5339:1:121","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"5334:6:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":45283,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45281,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45211,"src":"5406:1:121","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"35","id":45282,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5411:1:121","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"5406:6:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":45291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45289,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45211,"src":"5478:1:121","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"36","id":45290,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5483:1:121","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"5478:6:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":45299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45297,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45211,"src":"5550:1:121","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"37","id":45298,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5555:1:121","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"5550:6:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":45305,"nodeType":"IfStatement","src":"5546:54:121","trueBody":{"id":45304,"nodeType":"Block","src":"5558:42:121","statements":[{"expression":{"id":45302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":45300,"name":"_normalizedWeight7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45166,"src":"5560:18:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":45301,"name":"normalizedWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45221,"src":"5581:16:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5560:37:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45303,"nodeType":"ExpressionStatement","src":"5560:37:121"}]}},"id":45306,"nodeType":"IfStatement","src":"5474:126:121","trueBody":{"id":45296,"nodeType":"Block","src":"5486:42:121","statements":[{"expression":{"id":45294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":45292,"name":"_normalizedWeight6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45164,"src":"5488:18:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":45293,"name":"normalizedWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45221,"src":"5509:16:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5488:37:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45295,"nodeType":"ExpressionStatement","src":"5488:37:121"}]}},"id":45307,"nodeType":"IfStatement","src":"5402:198:121","trueBody":{"id":45288,"nodeType":"Block","src":"5414:42:121","statements":[{"expression":{"id":45286,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":45284,"name":"_normalizedWeight5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45162,"src":"5416:18:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":45285,"name":"normalizedWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45221,"src":"5437:16:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5416:37:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45287,"nodeType":"ExpressionStatement","src":"5416:37:121"}]}},"id":45308,"nodeType":"IfStatement","src":"5330:270:121","trueBody":{"id":45280,"nodeType":"Block","src":"5342:42:121","statements":[{"expression":{"id":45278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":45276,"name":"_normalizedWeight4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45160,"src":"5344:18:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":45277,"name":"normalizedWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45221,"src":"5365:16:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5344:37:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45279,"nodeType":"ExpressionStatement","src":"5344:37:121"}]}},"id":45309,"nodeType":"IfStatement","src":"5258:342:121","trueBody":{"id":45272,"nodeType":"Block","src":"5270:42:121","statements":[{"expression":{"id":45270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":45268,"name":"_normalizedWeight3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45158,"src":"5272:18:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":45269,"name":"normalizedWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45221,"src":"5293:16:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5272:37:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45271,"nodeType":"ExpressionStatement","src":"5272:37:121"}]}},"id":45310,"nodeType":"IfStatement","src":"5186:414:121","trueBody":{"id":45264,"nodeType":"Block","src":"5198:42:121","statements":[{"expression":{"id":45262,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":45260,"name":"_normalizedWeight2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45156,"src":"5200:18:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":45261,"name":"normalizedWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45221,"src":"5221:16:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5200:37:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45263,"nodeType":"ExpressionStatement","src":"5200:37:121"}]}},"id":45311,"nodeType":"IfStatement","src":"5114:486:121","trueBody":{"id":45256,"nodeType":"Block","src":"5126:42:121","statements":[{"expression":{"id":45254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":45252,"name":"_normalizedWeight1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45154,"src":"5128:18:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":45253,"name":"normalizedWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45221,"src":"5149:16:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5128:37:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45255,"nodeType":"ExpressionStatement","src":"5128:37:121"}]}},"id":45312,"nodeType":"IfStatement","src":"5042:558:121","trueBody":{"id":45248,"nodeType":"Block","src":"5054:42:121","statements":[{"expression":{"id":45246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":45244,"name":"_normalizedWeight0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45152,"src":"5056:18:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":45245,"name":"normalizedWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45221,"src":"5077:16:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5056:37:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45247,"nodeType":"ExpressionStatement","src":"5056:37:121"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45214,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45211,"src":"4742:1:121","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":45215,"name":"_totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45150,"src":"4746:12:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4742:16:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":45314,"initializationExpression":{"assignments":[45211],"declarations":[{"constant":false,"id":45211,"mutability":"mutable","name":"i","nameLocation":"4735:1:121","nodeType":"VariableDeclaration","scope":45314,"src":"4729:7:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":45210,"name":"uint8","nodeType":"ElementaryTypeName","src":"4729:5:121","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"id":45213,"initialValue":{"hexValue":"30","id":45212,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4739:1:121","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4729:11:121"},"isSimpleCounterLoop":false,"loopExpression":{"expression":{"id":45218,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"4760:3:121","subExpression":{"id":45217,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45211,"src":"4762:1:121","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":45219,"nodeType":"ExpressionStatement","src":"4760:3:121"},"nodeType":"ForStatement","src":"4724:886:121"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45315,"name":"normalizedSum","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45207,"src":"5682:13:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":45316,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"5699:10:121","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$8208_$","typeString":"type(library FixedPoint)"}},"id":45317,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5710:3:121","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":7920,"src":"5699:14:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5682:31:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":45323,"nodeType":"IfStatement","src":"5678:96:121","trueBody":{"id":45322,"nodeType":"Block","src":"5715:59:121","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":45319,"name":"NormalizedWeightInvariant","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":206,"src":"5736:25:121","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":45320,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5736:27:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":45321,"nodeType":"RevertStatement","src":"5729:34:121"}]}}]},"id":45325,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":45178,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45175,"src":"4407:5:121","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},{"expression":{"id":45179,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45172,"src":"4414:6:121","typeDescriptions":{"typeIdentifier":"t_struct$_NewPoolParams_$45139_memory_ptr","typeString":"struct WeightedPool.NewPoolParams memory"}},"id":45180,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4421:4:121","memberName":"name","nodeType":"MemberAccess","referencedDeclaration":45129,"src":"4414:11:121","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"expression":{"id":45181,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45172,"src":"4427:6:121","typeDescriptions":{"typeIdentifier":"t_struct$_NewPoolParams_$45139_memory_ptr","typeString":"struct WeightedPool.NewPoolParams memory"}},"id":45182,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4434:6:121","memberName":"symbol","nodeType":"MemberAccess","referencedDeclaration":45131,"src":"4427:13:121","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":45183,"kind":"baseConstructorSpecifier","modifierName":{"id":45177,"name":"BalancerPoolToken","nameLocations":["4389:17:121"],"nodeType":"IdentifierPath","referencedDeclaration":11106,"src":"4389:17:121"},"nodeType":"ModifierInvocation","src":"4389:52:121"},{"arguments":[{"id":45185,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45175,"src":"4451:5:121","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"id":45186,"kind":"baseConstructorSpecifier","modifierName":{"id":45184,"name":"PoolInfo","nameLocations":["4442:8:121"],"nodeType":"IdentifierPath","referencedDeclaration":5418,"src":"4442:8:121"},"nodeType":"ModifierInvocation","src":"4442:15:121"},{"arguments":[{"expression":{"id":45188,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45172,"src":"4466:6:121","typeDescriptions":{"typeIdentifier":"t_struct$_NewPoolParams_$45139_memory_ptr","typeString":"struct WeightedPool.NewPoolParams memory"}},"id":45189,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4473:7:121","memberName":"version","nodeType":"MemberAccess","referencedDeclaration":45138,"src":"4466:14:121","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":45190,"kind":"baseConstructorSpecifier","modifierName":{"id":45187,"name":"Version","nameLocations":["4458:7:121"],"nodeType":"IdentifierPath","referencedDeclaration":7482,"src":"4458:7:121"},"nodeType":"ModifierInvocation","src":"4458:23:121"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":45176,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45172,"mutability":"mutable","name":"params","nameLocation":"4354:6:121","nodeType":"VariableDeclaration","scope":45325,"src":"4333:27:121","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_NewPoolParams_$45139_memory_ptr","typeString":"struct WeightedPool.NewPoolParams"},"typeName":{"id":45171,"nodeType":"UserDefinedTypeName","pathNode":{"id":45170,"name":"NewPoolParams","nameLocations":["4333:13:121"],"nodeType":"IdentifierPath","referencedDeclaration":45139,"src":"4333:13:121"},"referencedDeclaration":45139,"src":"4333:13:121","typeDescriptions":{"typeIdentifier":"t_struct$_NewPoolParams_$45139_storage_ptr","typeString":"struct WeightedPool.NewPoolParams"}},"visibility":"internal"},{"constant":false,"id":45175,"mutability":"mutable","name":"vault","nameLocation":"4377:5:121","nodeType":"VariableDeclaration","scope":45325,"src":"4370:12:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":45174,"nodeType":"UserDefinedTypeName","pathNode":{"id":45173,"name":"IVault","nameLocations":["4370:6:121"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"4370:6:121"},"referencedDeclaration":3111,"src":"4370:6:121","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"}],"src":"4323:65:121"},"returnParameters":{"id":45191,"nodeType":"ParameterList","parameters":[],"src":"4482:0:121"},"scope":45841,"src":"4312:1468:121","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[1482],"body":{"id":45365,"nodeType":"Block","src":"5930:315:121","statements":[{"assignments":[45348],"declarations":[{"constant":false,"id":45348,"mutability":"mutable","name":"_upOrDown","nameLocation":"6017:9:121","nodeType":"VariableDeclaration","scope":45365,"src":"5940:86:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256[],uint256[]) pure returns (uint256)"},"typeName":{"id":45347,"nodeType":"FunctionTypeName","parameterTypes":{"id":45343,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45339,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45347,"src":"5949:16:121","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":45337,"name":"uint256","nodeType":"ElementaryTypeName","src":"5949:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45338,"nodeType":"ArrayTypeName","src":"5949:9:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":45342,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45347,"src":"5967:16:121","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":45340,"name":"uint256","nodeType":"ElementaryTypeName","src":"5967:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45341,"nodeType":"ArrayTypeName","src":"5967:9:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"5948:36:121"},"returnParameterTypes":{"id":45346,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45345,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45347,"src":"6008:7:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45344,"name":"uint256","nodeType":"ElementaryTypeName","src":"6008:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6007:9:121"},"src":"5940:86:121","stateMutability":"pure","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256[],uint256[]) pure returns (uint256)"},"visibility":"internal"},"visibility":"internal"}],"id":45358,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"},"id":45352,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45349,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45332,"src":"6029:8:121","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":45350,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"6053:8:121","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":45351,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"6062:8:121","memberName":"ROUND_UP","nodeType":"MemberAccess","referencedDeclaration":4730,"src":"6053:17:121","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"src":"6029:41:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"expression":{"id":45355,"name":"WeightedMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9873,"src":"6131:12:121","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WeightedMath_$9873_$","typeString":"type(library WeightedMath)"}},"id":45356,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6144:20:121","memberName":"computeInvariantDown","nodeType":"MemberAccess","referencedDeclaration":9646,"src":"6131:33:121","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256)"}},"id":45357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"6029:135:121","trueExpression":{"expression":{"id":45353,"name":"WeightedMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9873,"src":"6085:12:121","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WeightedMath_$9873_$","typeString":"type(library WeightedMath)"}},"id":45354,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6098:18:121","memberName":"computeInvariantUp","nodeType":"MemberAccess","referencedDeclaration":9699,"src":"6085:31:121","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256)"}},"typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256)"}},"nodeType":"VariableDeclarationStatement","src":"5940:224:121"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":45360,"name":"_getNormalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45666,"src":"6192:21:121","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function () view returns (uint256[] memory)"}},"id":45361,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6192:23:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":45362,"name":"balancesLiveScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45329,"src":"6217:20:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":45359,"name":"_upOrDown","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45348,"src":"6182:9:121","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256)"}},"id":45363,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6182:56:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":45336,"id":45364,"nodeType":"Return","src":"6175:63:121"}]},"documentation":{"id":45326,"nodeType":"StructuredDocumentation","src":"5786:25:121","text":"@inheritdoc IBasePool"},"functionSelector":"984de9e8","id":45366,"implemented":true,"kind":"function","modifiers":[],"name":"computeInvariant","nameLocation":"5825:16:121","nodeType":"FunctionDefinition","parameters":{"id":45333,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45329,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"5859:20:121","nodeType":"VariableDeclaration","scope":45366,"src":"5842:37:121","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":45327,"name":"uint256","nodeType":"ElementaryTypeName","src":"5842:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45328,"nodeType":"ArrayTypeName","src":"5842:9:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":45332,"mutability":"mutable","name":"rounding","nameLocation":"5890:8:121","nodeType":"VariableDeclaration","scope":45366,"src":"5881:17:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"},"typeName":{"id":45331,"nodeType":"UserDefinedTypeName","pathNode":{"id":45330,"name":"Rounding","nameLocations":["5881:8:121"],"nodeType":"IdentifierPath","referencedDeclaration":4732,"src":"5881:8:121"},"referencedDeclaration":4732,"src":"5881:8:121","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"visibility":"internal"}],"src":"5841:58:121"},"returnParameters":{"id":45336,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45335,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45366,"src":"5921:7:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45334,"name":"uint256","nodeType":"ElementaryTypeName","src":"5921:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5920:9:121"},"scope":45841,"src":"5816:429:121","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[1495],"body":{"id":45390,"nodeType":"Block","src":"6463:230:121","statements":[{"expression":{"arguments":[{"baseExpression":{"id":45381,"name":"balancesLiveScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45370,"src":"6554:20:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":45383,"indexExpression":{"id":45382,"name":"tokenInIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45372,"src":"6575:12:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6554:34:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":45385,"name":"tokenInIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45372,"src":"6627:12:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":45384,"name":"_getNormalizedWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45548,"src":"6606:20:121","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":45386,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6606:34:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":45387,"name":"invariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45374,"src":"6658:14:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":45379,"name":"WeightedMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9873,"src":"6492:12:121","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WeightedMath_$9873_$","typeString":"type(library WeightedMath)"}},"id":45380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6505:31:121","memberName":"computeBalanceOutGivenInvariant","nodeType":"MemberAccess","referencedDeclaration":9747,"src":"6492:44:121","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":45388,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6492:194:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":45378,"id":45389,"nodeType":"Return","src":"6473:213:121"}]},"documentation":{"id":45367,"nodeType":"StructuredDocumentation","src":"6251:25:121","text":"@inheritdoc IBasePool"},"functionSelector":"16a0b3e0","id":45391,"implemented":true,"kind":"function","modifiers":[],"name":"computeBalance","nameLocation":"6290:14:121","nodeType":"FunctionDefinition","parameters":{"id":45375,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45370,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"6331:20:121","nodeType":"VariableDeclaration","scope":45391,"src":"6314:37:121","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":45368,"name":"uint256","nodeType":"ElementaryTypeName","src":"6314:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45369,"nodeType":"ArrayTypeName","src":"6314:9:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":45372,"mutability":"mutable","name":"tokenInIndex","nameLocation":"6369:12:121","nodeType":"VariableDeclaration","scope":45391,"src":"6361:20:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45371,"name":"uint256","nodeType":"ElementaryTypeName","src":"6361:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":45374,"mutability":"mutable","name":"invariantRatio","nameLocation":"6399:14:121","nodeType":"VariableDeclaration","scope":45391,"src":"6391:22:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45373,"name":"uint256","nodeType":"ElementaryTypeName","src":"6391:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6304:115:121"},"returnParameters":{"id":45378,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45377,"mutability":"mutable","name":"newBalance","nameLocation":"6451:10:121","nodeType":"VariableDeclaration","scope":45391,"src":"6443:18:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45376,"name":"uint256","nodeType":"ElementaryTypeName","src":"6443:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6442:20:121"},"scope":45841,"src":"6281:412:121","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[213],"body":{"id":45401,"nodeType":"Block","src":"6806:47:121","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":45398,"name":"_getNormalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45666,"src":"6823:21:121","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function () view returns (uint256[] memory)"}},"id":45399,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6823:23:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":45397,"id":45400,"nodeType":"Return","src":"6816:30:121"}]},"documentation":{"id":45392,"nodeType":"StructuredDocumentation","src":"6699:29:121","text":"@inheritdoc IWeightedPool"},"functionSelector":"f89f27ed","id":45402,"implemented":true,"kind":"function","modifiers":[],"name":"getNormalizedWeights","nameLocation":"6742:20:121","nodeType":"FunctionDefinition","parameters":{"id":45393,"nodeType":"ParameterList","parameters":[],"src":"6762:2:121"},"returnParameters":{"id":45397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45396,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45402,"src":"6788:16:121","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":45394,"name":"uint256","nodeType":"ElementaryTypeName","src":"6788:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45395,"nodeType":"ArrayTypeName","src":"6788:9:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"6787:18:121"},"scope":45841,"src":"6733:120:121","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1504],"body":{"id":45477,"nodeType":"Block","src":"6984:1100:121","statements":[{"assignments":[45414],"declarations":[{"constant":false,"id":45414,"mutability":"mutable","name":"balanceTokenInScaled18","nameLocation":"7002:22:121","nodeType":"VariableDeclaration","scope":45477,"src":"6994:30:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45413,"name":"uint256","nodeType":"ElementaryTypeName","src":"6994:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":45420,"initialValue":{"baseExpression":{"expression":{"id":45415,"name":"request","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45406,"src":"7027:7:121","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":45416,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7035:16:121","memberName":"balancesScaled18","nodeType":"MemberAccess","referencedDeclaration":4763,"src":"7027:24:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":45419,"indexExpression":{"expression":{"id":45417,"name":"request","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45406,"src":"7052:7:121","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":45418,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7060:7:121","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":4765,"src":"7052:15:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7027:41:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"6994:74:121"},{"assignments":[45422],"declarations":[{"constant":false,"id":45422,"mutability":"mutable","name":"balanceTokenOutScaled18","nameLocation":"7086:23:121","nodeType":"VariableDeclaration","scope":45477,"src":"7078:31:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45421,"name":"uint256","nodeType":"ElementaryTypeName","src":"7078:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":45428,"initialValue":{"baseExpression":{"expression":{"id":45423,"name":"request","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45406,"src":"7112:7:121","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":45424,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7120:16:121","memberName":"balancesScaled18","nodeType":"MemberAccess","referencedDeclaration":4763,"src":"7112:24:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":45427,"indexExpression":{"expression":{"id":45425,"name":"request","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45406,"src":"7137:7:121","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":45426,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7145:8:121","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":4767,"src":"7137:16:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7112:42:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7078:76:121"},{"condition":{"commonType":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"},"id":45433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":45429,"name":"request","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45406,"src":"7169:7:121","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":45430,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7177:4:121","memberName":"kind","nodeType":"MemberAccess","referencedDeclaration":4758,"src":"7169:12:121","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":45431,"name":"SwapKind","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4735,"src":"7185:8:121","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_SwapKind_$4735_$","typeString":"type(enum SwapKind)"}},"id":45432,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"7194:8:121","memberName":"EXACT_IN","nodeType":"MemberAccess","referencedDeclaration":4733,"src":"7185:17:121","typeDescriptions":{"typeIdentifier":"t_enum$_SwapKind_$4735","typeString":"enum SwapKind"}},"src":"7169:33:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":45475,"nodeType":"Block","src":"7588:490:121","statements":[{"assignments":[45456],"declarations":[{"constant":false,"id":45456,"mutability":"mutable","name":"amountInScaled18","nameLocation":"7610:16:121","nodeType":"VariableDeclaration","scope":45475,"src":"7602:24:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45455,"name":"uint256","nodeType":"ElementaryTypeName","src":"7602:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":45472,"initialValue":{"arguments":[{"id":45459,"name":"balanceTokenInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45414,"src":"7682:22:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":45461,"name":"request","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45406,"src":"7743:7:121","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":45462,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7751:7:121","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":4765,"src":"7743:15:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":45460,"name":"_getNormalizedWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45548,"src":"7722:20:121","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":45463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7722:37:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":45464,"name":"balanceTokenOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45422,"src":"7777:23:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":45466,"name":"request","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45406,"src":"7839:7:121","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":45467,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7847:8:121","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":4767,"src":"7839:16:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":45465,"name":"_getNormalizedWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45548,"src":"7818:20:121","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":45468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7818:38:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":45469,"name":"request","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45406,"src":"7874:7:121","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":45470,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7882:19:121","memberName":"amountGivenScaled18","nodeType":"MemberAccess","referencedDeclaration":4760,"src":"7874:27:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":45457,"name":"WeightedMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9873,"src":"7629:12:121","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WeightedMath_$9873_$","typeString":"type(library WeightedMath)"}},"id":45458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7642:22:121","memberName":"computeInGivenExactOut","nodeType":"MemberAccess","referencedDeclaration":9872,"src":"7629:35:121","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256,uint256) pure returns (uint256)"}},"id":45471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7629:286:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7602:313:121"},{"expression":{"id":45473,"name":"amountInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45456,"src":"8051:16:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":45412,"id":45474,"nodeType":"Return","src":"8044:23:121"}]},"id":45476,"nodeType":"IfStatement","src":"7165:913:121","trueBody":{"id":45454,"nodeType":"Block","src":"7204:378:121","statements":[{"assignments":[45435],"declarations":[{"constant":false,"id":45435,"mutability":"mutable","name":"amountOutScaled18","nameLocation":"7226:17:121","nodeType":"VariableDeclaration","scope":45454,"src":"7218:25:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45434,"name":"uint256","nodeType":"ElementaryTypeName","src":"7218:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":45451,"initialValue":{"arguments":[{"id":45438,"name":"balanceTokenInScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45414,"src":"7299:22:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":45440,"name":"request","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45406,"src":"7360:7:121","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":45441,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7368:7:121","memberName":"indexIn","nodeType":"MemberAccess","referencedDeclaration":4765,"src":"7360:15:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":45439,"name":"_getNormalizedWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45548,"src":"7339:20:121","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":45442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7339:37:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":45443,"name":"balanceTokenOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45422,"src":"7394:23:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"expression":{"id":45445,"name":"request","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45406,"src":"7456:7:121","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":45446,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7464:8:121","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":4767,"src":"7456:16:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":45444,"name":"_getNormalizedWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45548,"src":"7435:20:121","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":45447,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7435:38:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":45448,"name":"request","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45406,"src":"7491:7:121","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":45449,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7499:19:121","memberName":"amountGivenScaled18","nodeType":"MemberAccess","referencedDeclaration":4760,"src":"7491:27:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":45436,"name":"WeightedMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9873,"src":"7246:12:121","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WeightedMath_$9873_$","typeString":"type(library WeightedMath)"}},"id":45437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7259:22:121","memberName":"computeOutGivenExactIn","nodeType":"MemberAccess","referencedDeclaration":9809,"src":"7246:35:121","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256,uint256) pure returns (uint256)"}},"id":45450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7246:286:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7218:314:121"},{"expression":{"id":45452,"name":"amountOutScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45435,"src":"7554:17:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":45412,"id":45453,"nodeType":"Return","src":"7547:24:121"}]}}]},"documentation":{"id":45403,"nodeType":"StructuredDocumentation","src":"6859:25:121","text":"@inheritdoc IBasePool"},"functionSelector":"72c98186","id":45478,"implemented":true,"kind":"function","modifiers":[{"id":45409,"kind":"modifierInvocation","modifierName":{"id":45408,"name":"onlyVault","nameLocations":["6956:9:121"],"nodeType":"IdentifierPath","referencedDeclaration":28128,"src":"6956:9:121"},"nodeType":"ModifierInvocation","src":"6956:9:121"}],"name":"onSwap","nameLocation":"6898:6:121","nodeType":"FunctionDefinition","parameters":{"id":45407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45406,"mutability":"mutable","name":"request","nameLocation":"6927:7:121","nodeType":"VariableDeclaration","scope":45478,"src":"6905:29:121","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":45405,"nodeType":"UserDefinedTypeName","pathNode":{"id":45404,"name":"PoolSwapParams","nameLocations":["6905:14:121"],"nodeType":"IdentifierPath","referencedDeclaration":4772,"src":"6905:14:121"},"referencedDeclaration":4772,"src":"6905:14:121","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"src":"6904:31:121"},"returnParameters":{"id":45412,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45411,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45478,"src":"6975:7:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45410,"name":"uint256","nodeType":"ElementaryTypeName","src":"6975:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6974:9:121"},"scope":45841,"src":"6889:1195:121","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":45547,"nodeType":"Block","src":"8180:622:121","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45485,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45480,"src":"8221:10:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":45486,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8235:1:121","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8221:15:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45491,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45480,"src":"8286:10:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":45492,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8300:1:121","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8286:15:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45497,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45480,"src":"8351:10:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"32","id":45498,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8365:1:121","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"8351:15:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45505,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45503,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45480,"src":"8416:10:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"33","id":45504,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8430:1:121","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"8416:15:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45511,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45509,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45480,"src":"8481:10:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"34","id":45510,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8495:1:121","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"8481:15:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45515,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45480,"src":"8546:10:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"35","id":45516,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8560:1:121","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"8546:15:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45521,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45480,"src":"8611:10:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"36","id":45522,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8625:1:121","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"8611:15:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45527,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45480,"src":"8676:10:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"37","id":45528,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8690:1:121","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"8676:15:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":45538,"nodeType":"Block","src":"8737:59:121","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":45533,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"8758:12:121","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3768_$","typeString":"type(contract IVaultErrors)"}},"id":45535,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8771:12:121","memberName":"InvalidToken","nodeType":"MemberAccess","referencedDeclaration":3452,"src":"8758:25:121","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":45536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8758:27:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":45537,"nodeType":"RevertStatement","src":"8751:34:121"}]},"id":45539,"nodeType":"IfStatement","src":"8672:124:121","trueBody":{"id":45532,"nodeType":"Block","src":"8693:30:121","statements":[{"expression":{"id":45530,"name":"_normalizedWeight7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45166,"src":"8702:18:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":45484,"id":45531,"nodeType":"Return","src":"8695:25:121"}]}},"id":45540,"nodeType":"IfStatement","src":"8607:189:121","trueBody":{"id":45526,"nodeType":"Block","src":"8628:30:121","statements":[{"expression":{"id":45524,"name":"_normalizedWeight6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45164,"src":"8637:18:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":45484,"id":45525,"nodeType":"Return","src":"8630:25:121"}]}},"id":45541,"nodeType":"IfStatement","src":"8542:254:121","trueBody":{"id":45520,"nodeType":"Block","src":"8563:30:121","statements":[{"expression":{"id":45518,"name":"_normalizedWeight5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45162,"src":"8572:18:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":45484,"id":45519,"nodeType":"Return","src":"8565:25:121"}]}},"id":45542,"nodeType":"IfStatement","src":"8477:319:121","trueBody":{"id":45514,"nodeType":"Block","src":"8498:30:121","statements":[{"expression":{"id":45512,"name":"_normalizedWeight4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45160,"src":"8507:18:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":45484,"id":45513,"nodeType":"Return","src":"8500:25:121"}]}},"id":45543,"nodeType":"IfStatement","src":"8412:384:121","trueBody":{"id":45508,"nodeType":"Block","src":"8433:30:121","statements":[{"expression":{"id":45506,"name":"_normalizedWeight3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45158,"src":"8442:18:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":45484,"id":45507,"nodeType":"Return","src":"8435:25:121"}]}},"id":45544,"nodeType":"IfStatement","src":"8347:449:121","trueBody":{"id":45502,"nodeType":"Block","src":"8368:30:121","statements":[{"expression":{"id":45500,"name":"_normalizedWeight2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45156,"src":"8377:18:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":45484,"id":45501,"nodeType":"Return","src":"8370:25:121"}]}},"id":45545,"nodeType":"IfStatement","src":"8282:514:121","trueBody":{"id":45496,"nodeType":"Block","src":"8303:30:121","statements":[{"expression":{"id":45494,"name":"_normalizedWeight1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45154,"src":"8312:18:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":45484,"id":45495,"nodeType":"Return","src":"8305:25:121"}]}},"id":45546,"nodeType":"IfStatement","src":"8217:579:121","trueBody":{"id":45490,"nodeType":"Block","src":"8238:30:121","statements":[{"expression":{"id":45488,"name":"_normalizedWeight0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45152,"src":"8247:18:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":45484,"id":45489,"nodeType":"Return","src":"8240:25:121"}]}}]},"id":45548,"implemented":true,"kind":"function","modifiers":[],"name":"_getNormalizedWeight","nameLocation":"8099:20:121","nodeType":"FunctionDefinition","parameters":{"id":45481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45480,"mutability":"mutable","name":"tokenIndex","nameLocation":"8128:10:121","nodeType":"VariableDeclaration","scope":45548,"src":"8120:18:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45479,"name":"uint256","nodeType":"ElementaryTypeName","src":"8120:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8119:20:121"},"returnParameters":{"id":45484,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45483,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45548,"src":"8171:7:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45482,"name":"uint256","nodeType":"ElementaryTypeName","src":"8171:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8170:9:121"},"scope":45841,"src":"8090:712:121","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":45665,"nodeType":"Block","src":"8890:972:121","statements":[{"assignments":[45555],"declarations":[{"constant":false,"id":45555,"mutability":"mutable","name":"totalTokens","nameLocation":"8908:11:121","nodeType":"VariableDeclaration","scope":45665,"src":"8900:19:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45554,"name":"uint256","nodeType":"ElementaryTypeName","src":"8900:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":45557,"initialValue":{"id":45556,"name":"_totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45150,"src":"8922:12:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8900:34:121"},{"assignments":[45562],"declarations":[{"constant":false,"id":45562,"mutability":"mutable","name":"normalizedWeights","nameLocation":"8961:17:121","nodeType":"VariableDeclaration","scope":45665,"src":"8944:34:121","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":45560,"name":"uint256","nodeType":"ElementaryTypeName","src":"8944:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45561,"nodeType":"ArrayTypeName","src":"8944:9:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":45568,"initialValue":{"arguments":[{"id":45566,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45555,"src":"8995:11:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":45565,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"8981:13:121","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":45563,"name":"uint256","nodeType":"ElementaryTypeName","src":"8985:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45564,"nodeType":"ArrayTypeName","src":"8985:9:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":45567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8981:26:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"8944:63:121"},{"id":45662,"nodeType":"Block","src":"9045:776:121","statements":[{"expression":{"id":45573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":45569,"name":"normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45562,"src":"9059:17:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":45571,"indexExpression":{"hexValue":"30","id":45570,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9077:1:121","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9059:20:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":45572,"name":"_normalizedWeight0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45152,"src":"9082:18:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9059:41:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45574,"nodeType":"ExpressionStatement","src":"9059:41:121"},{"expression":{"id":45579,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":45575,"name":"normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45562,"src":"9114:17:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":45577,"indexExpression":{"hexValue":"31","id":45576,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9132:1:121","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9114:20:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":45578,"name":"_normalizedWeight1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45154,"src":"9137:18:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9114:41:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45580,"nodeType":"ExpressionStatement","src":"9114:41:121"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45581,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45555,"src":"9173:11:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"32","id":45582,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9187:1:121","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"9173:15:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":45593,"nodeType":"Block","src":"9242:29:121","statements":[{"expression":{"id":45591,"name":"normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45562,"src":"9251:17:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":45553,"id":45592,"nodeType":"Return","src":"9244:24:121"}]},"id":45594,"nodeType":"IfStatement","src":"9169:102:121","trueBody":{"id":45590,"nodeType":"Block","src":"9190:46:121","statements":[{"expression":{"id":45588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":45584,"name":"normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45562,"src":"9192:17:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":45586,"indexExpression":{"hexValue":"32","id":45585,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9210:1:121","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9192:20:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":45587,"name":"_normalizedWeight2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45156,"src":"9215:18:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9192:41:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45589,"nodeType":"ExpressionStatement","src":"9192:41:121"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45597,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45595,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45555,"src":"9288:11:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"33","id":45596,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9302:1:121","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"9288:15:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":45607,"nodeType":"Block","src":"9357:29:121","statements":[{"expression":{"id":45605,"name":"normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45562,"src":"9366:17:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":45553,"id":45606,"nodeType":"Return","src":"9359:24:121"}]},"id":45608,"nodeType":"IfStatement","src":"9284:102:121","trueBody":{"id":45604,"nodeType":"Block","src":"9305:46:121","statements":[{"expression":{"id":45602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":45598,"name":"normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45562,"src":"9307:17:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":45600,"indexExpression":{"hexValue":"33","id":45599,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9325:1:121","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9307:20:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":45601,"name":"_normalizedWeight3","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45158,"src":"9330:18:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9307:41:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45603,"nodeType":"ExpressionStatement","src":"9307:41:121"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45609,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45555,"src":"9403:11:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"34","id":45610,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9417:1:121","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"9403:15:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":45621,"nodeType":"Block","src":"9472:29:121","statements":[{"expression":{"id":45619,"name":"normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45562,"src":"9481:17:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":45553,"id":45620,"nodeType":"Return","src":"9474:24:121"}]},"id":45622,"nodeType":"IfStatement","src":"9399:102:121","trueBody":{"id":45618,"nodeType":"Block","src":"9420:46:121","statements":[{"expression":{"id":45616,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":45612,"name":"normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45562,"src":"9422:17:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":45614,"indexExpression":{"hexValue":"34","id":45613,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9440:1:121","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9422:20:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":45615,"name":"_normalizedWeight4","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45160,"src":"9445:18:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9422:41:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45617,"nodeType":"ExpressionStatement","src":"9422:41:121"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45623,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45555,"src":"9518:11:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"35","id":45624,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9532:1:121","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"src":"9518:15:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":45635,"nodeType":"Block","src":"9587:29:121","statements":[{"expression":{"id":45633,"name":"normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45562,"src":"9596:17:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":45553,"id":45634,"nodeType":"Return","src":"9589:24:121"}]},"id":45636,"nodeType":"IfStatement","src":"9514:102:121","trueBody":{"id":45632,"nodeType":"Block","src":"9535:46:121","statements":[{"expression":{"id":45630,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":45626,"name":"normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45562,"src":"9537:17:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":45628,"indexExpression":{"hexValue":"35","id":45627,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9555:1:121","typeDescriptions":{"typeIdentifier":"t_rational_5_by_1","typeString":"int_const 5"},"value":"5"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9537:20:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":45629,"name":"_normalizedWeight5","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45162,"src":"9560:18:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9537:41:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45631,"nodeType":"ExpressionStatement","src":"9537:41:121"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45637,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45555,"src":"9633:11:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"36","id":45638,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9647:1:121","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"src":"9633:15:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":45649,"nodeType":"Block","src":"9702:29:121","statements":[{"expression":{"id":45647,"name":"normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45562,"src":"9711:17:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":45553,"id":45648,"nodeType":"Return","src":"9704:24:121"}]},"id":45650,"nodeType":"IfStatement","src":"9629:102:121","trueBody":{"id":45646,"nodeType":"Block","src":"9650:46:121","statements":[{"expression":{"id":45644,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":45640,"name":"normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45562,"src":"9652:17:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":45642,"indexExpression":{"hexValue":"36","id":45641,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9670:1:121","typeDescriptions":{"typeIdentifier":"t_rational_6_by_1","typeString":"int_const 6"},"value":"6"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9652:20:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":45643,"name":"_normalizedWeight6","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45164,"src":"9675:18:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9652:41:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45645,"nodeType":"ExpressionStatement","src":"9652:41:121"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":45653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45651,"name":"totalTokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45555,"src":"9748:11:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"37","id":45652,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9762:1:121","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"src":"9748:15:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":45661,"nodeType":"IfStatement","src":"9744:67:121","trueBody":{"id":45660,"nodeType":"Block","src":"9765:46:121","statements":[{"expression":{"id":45658,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":45654,"name":"normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45562,"src":"9767:17:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":45656,"indexExpression":{"hexValue":"37","id":45655,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9785:1:121","typeDescriptions":{"typeIdentifier":"t_rational_7_by_1","typeString":"int_const 7"},"value":"7"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9767:20:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":45657,"name":"_normalizedWeight7","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45166,"src":"9790:18:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9767:41:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45659,"nodeType":"ExpressionStatement","src":"9767:41:121"}]}}]},{"expression":{"id":45663,"name":"normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45562,"src":"9838:17:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":45553,"id":45664,"nodeType":"Return","src":"9831:24:121"}]},"id":45666,"implemented":true,"kind":"function","modifiers":[],"name":"_getNormalizedWeights","nameLocation":"8817:21:121","nodeType":"FunctionDefinition","parameters":{"id":45549,"nodeType":"ParameterList","parameters":[],"src":"8838:2:121"},"returnParameters":{"id":45553,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45552,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45666,"src":"8872:16:121","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":45550,"name":"uint256","nodeType":"ElementaryTypeName","src":"8872:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45551,"nodeType":"ArrayTypeName","src":"8872:9:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"8871:18:121"},"scope":45841,"src":"8808:1054:121","stateMutability":"view","virtual":true,"visibility":"internal"},{"baseFunctions":[3050],"body":{"id":45674,"nodeType":"Block","src":"9984:48:121","statements":[{"expression":{"id":45672,"name":"_MIN_SWAP_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45142,"src":"10001:24:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":45671,"id":45673,"nodeType":"Return","src":"9994:31:121"}]},"documentation":{"id":45667,"nodeType":"StructuredDocumentation","src":"9868:40:121","text":"@inheritdoc ISwapFeePercentageBounds"},"functionSelector":"ce20ece7","id":45675,"implemented":true,"kind":"function","modifiers":[],"name":"getMinimumSwapFeePercentage","nameLocation":"9922:27:121","nodeType":"FunctionDefinition","parameters":{"id":45668,"nodeType":"ParameterList","parameters":[],"src":"9949:2:121"},"returnParameters":{"id":45671,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45670,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45675,"src":"9975:7:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45669,"name":"uint256","nodeType":"ElementaryTypeName","src":"9975:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9974:9:121"},"scope":45841,"src":"9913:119:121","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[3056],"body":{"id":45683,"nodeType":"Block","src":"10154:48:121","statements":[{"expression":{"id":45681,"name":"_MAX_SWAP_FEE_PERCENTAGE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45145,"src":"10171:24:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":45680,"id":45682,"nodeType":"Return","src":"10164:31:121"}]},"documentation":{"id":45676,"nodeType":"StructuredDocumentation","src":"10038:40:121","text":"@inheritdoc ISwapFeePercentageBounds"},"functionSelector":"654cf15d","id":45684,"implemented":true,"kind":"function","modifiers":[],"name":"getMaximumSwapFeePercentage","nameLocation":"10092:27:121","nodeType":"FunctionDefinition","parameters":{"id":45677,"nodeType":"ParameterList","parameters":[],"src":"10119:2:121"},"returnParameters":{"id":45680,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45679,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45684,"src":"10145:7:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45678,"name":"uint256","nodeType":"ElementaryTypeName","src":"10145:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10144:9:121"},"scope":45841,"src":"10083:119:121","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[3066],"body":{"id":45693,"nodeType":"Block","src":"10337:57:121","statements":[{"expression":{"expression":{"id":45690,"name":"WeightedMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9873,"src":"10354:12:121","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WeightedMath_$9873_$","typeString":"type(library WeightedMath)"}},"id":45691,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10367:20:121","memberName":"_MIN_INVARIANT_RATIO","nodeType":"MemberAccess","referencedDeclaration":9593,"src":"10354:33:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":45689,"id":45692,"nodeType":"Return","src":"10347:40:121"}]},"documentation":{"id":45685,"nodeType":"StructuredDocumentation","src":"10208:56:121","text":"@inheritdoc IUnbalancedLiquidityInvariantRatioBounds"},"functionSelector":"b677fa56","id":45694,"implemented":true,"kind":"function","modifiers":[],"name":"getMinimumInvariantRatio","nameLocation":"10278:24:121","nodeType":"FunctionDefinition","parameters":{"id":45686,"nodeType":"ParameterList","parameters":[],"src":"10302:2:121"},"returnParameters":{"id":45689,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45688,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45694,"src":"10328:7:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45687,"name":"uint256","nodeType":"ElementaryTypeName","src":"10328:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10327:9:121"},"scope":45841,"src":"10269:125:121","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[3072],"body":{"id":45703,"nodeType":"Block","src":"10529:57:121","statements":[{"expression":{"expression":{"id":45700,"name":"WeightedMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9873,"src":"10546:12:121","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WeightedMath_$9873_$","typeString":"type(library WeightedMath)"}},"id":45701,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10559:20:121","memberName":"_MAX_INVARIANT_RATIO","nodeType":"MemberAccess","referencedDeclaration":9590,"src":"10546:33:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":45699,"id":45702,"nodeType":"Return","src":"10539:40:121"}]},"documentation":{"id":45695,"nodeType":"StructuredDocumentation","src":"10400:56:121","text":"@inheritdoc IUnbalancedLiquidityInvariantRatioBounds"},"functionSelector":"273c1adf","id":45704,"implemented":true,"kind":"function","modifiers":[],"name":"getMaximumInvariantRatio","nameLocation":"10470:24:121","nodeType":"FunctionDefinition","parameters":{"id":45696,"nodeType":"ParameterList","parameters":[],"src":"10494:2:121"},"returnParameters":{"id":45699,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45698,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45704,"src":"10520:7:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45697,"name":"uint256","nodeType":"ElementaryTypeName","src":"10520:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10519:9:121"},"scope":45841,"src":"10461:125:121","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[220],"body":{"id":45788,"nodeType":"Block","src":"10732:555:121","statements":[{"expression":{"id":45721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":45711,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45709,"src":"10742:4:121","typeDescriptions":{"typeIdentifier":"t_struct$_WeightedPoolDynamicData_$197_memory_ptr","typeString":"struct WeightedPoolDynamicData memory"}},"id":45713,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10747:20:121","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":183,"src":"10742:25:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":45718,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"10808:4:121","typeDescriptions":{"typeIdentifier":"t_contract$_WeightedPool_$45841","typeString":"contract WeightedPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_WeightedPool_$45841","typeString":"contract WeightedPool"}],"id":45717,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10800:7:121","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":45716,"name":"address","nodeType":"ElementaryTypeName","src":"10800:7:121","typeDescriptions":{}}},"id":45719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10800:13:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":45714,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"10770:6:121","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":45715,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10777:22:121","memberName":"getCurrentLiveBalances","nodeType":"MemberAccess","referencedDeclaration":4195,"src":"10770:29:121","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) view external returns (uint256[] memory)"}},"id":45720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10770:44:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"10742:72:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":45722,"nodeType":"ExpressionStatement","src":"10742:72:121"},{"expression":{"id":45734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[null,{"expression":{"id":45723,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45709,"src":"10827:4:121","typeDescriptions":{"typeIdentifier":"t_struct$_WeightedPoolDynamicData_$197_memory_ptr","typeString":"struct WeightedPoolDynamicData memory"}},"id":45725,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10832:10:121","memberName":"tokenRates","nodeType":"MemberAccess","referencedDeclaration":186,"src":"10827:15:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"id":45726,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"10824:19:121","typeDescriptions":{"typeIdentifier":"t_tuple$__$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(,uint256[] memory)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":45731,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"10879:4:121","typeDescriptions":{"typeIdentifier":"t_contract$_WeightedPool_$45841","typeString":"contract WeightedPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_WeightedPool_$45841","typeString":"contract WeightedPool"}],"id":45730,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10871:7:121","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":45729,"name":"address","nodeType":"ElementaryTypeName","src":"10871:7:121","typeDescriptions":{}}},"id":45732,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10871:13:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":45727,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"10846:6:121","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":45728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10853:17:121","memberName":"getPoolTokenRates","nodeType":"MemberAccess","referencedDeclaration":4157,"src":"10846:24:121","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) view external returns (uint256[] memory,uint256[] memory)"}},"id":45733,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10846:39:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256[] memory)"}},"src":"10824:61:121","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":45735,"nodeType":"ExpressionStatement","src":"10824:61:121"},{"expression":{"id":45747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":45736,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45709,"src":"10895:4:121","typeDescriptions":{"typeIdentifier":"t_struct$_WeightedPoolDynamicData_$197_memory_ptr","typeString":"struct WeightedPoolDynamicData memory"}},"id":45738,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10900:23:121","memberName":"staticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":188,"src":"10895:28:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"components":[{"arguments":[{"id":45743,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"10969:4:121","typeDescriptions":{"typeIdentifier":"t_contract$_WeightedPool_$45841","typeString":"contract WeightedPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_WeightedPool_$45841","typeString":"contract WeightedPool"}],"id":45742,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10961:7:121","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":45741,"name":"address","nodeType":"ElementaryTypeName","src":"10961:7:121","typeDescriptions":{}}},"id":45744,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10961:13:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":45745,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10960:15:121","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":45739,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"10926:6:121","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":45740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10933:26:121","memberName":"getStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":4333,"src":"10926:33:121","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":45746,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10926:50:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10895:81:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45748,"nodeType":"ExpressionStatement","src":"10895:81:121"},{"expression":{"id":45754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":45749,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45709,"src":"10986:4:121","typeDescriptions":{"typeIdentifier":"t_struct$_WeightedPoolDynamicData_$197_memory_ptr","typeString":"struct WeightedPoolDynamicData memory"}},"id":45751,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10991:11:121","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":190,"src":"10986:16:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":45752,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10821,"src":"11005:11:121","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":45753,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11005:13:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10986:32:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45755,"nodeType":"ExpressionStatement","src":"10986:32:121"},{"assignments":[45758],"declarations":[{"constant":false,"id":45758,"mutability":"mutable","name":"poolConfig","nameLocation":"11047:10:121","nodeType":"VariableDeclaration","scope":45788,"src":"11029:28:121","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig"},"typeName":{"id":45757,"nodeType":"UserDefinedTypeName","pathNode":{"id":45756,"name":"PoolConfig","nameLocations":["11029:10:121"],"nodeType":"IdentifierPath","referencedDeclaration":4605,"src":"11029:10:121"},"referencedDeclaration":4605,"src":"11029:10:121","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_storage_ptr","typeString":"struct PoolConfig"}},"visibility":"internal"}],"id":45766,"initialValue":{"arguments":[{"arguments":[{"id":45763,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"11089:4:121","typeDescriptions":{"typeIdentifier":"t_contract$_WeightedPool_$45841","typeString":"contract WeightedPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_WeightedPool_$45841","typeString":"contract WeightedPool"}],"id":45762,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11081:7:121","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":45761,"name":"address","nodeType":"ElementaryTypeName","src":"11081:7:121","typeDescriptions":{}}},"id":45764,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11081:13:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":45759,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"11060:6:121","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":45760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11067:13:121","memberName":"getPoolConfig","nodeType":"MemberAccess","referencedDeclaration":4204,"src":"11060:20:121","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_PoolConfig_$4605_memory_ptr_$","typeString":"function (address) view external returns (struct PoolConfig memory)"}},"id":45765,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11060:35:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig memory"}},"nodeType":"VariableDeclarationStatement","src":"11029:66:121"},{"expression":{"id":45772,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":45767,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45709,"src":"11105:4:121","typeDescriptions":{"typeIdentifier":"t_struct$_WeightedPoolDynamicData_$197_memory_ptr","typeString":"struct WeightedPoolDynamicData memory"}},"id":45769,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11110:17:121","memberName":"isPoolInitialized","nodeType":"MemberAccess","referencedDeclaration":192,"src":"11105:22:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":45770,"name":"poolConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45758,"src":"11130:10:121","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig memory"}},"id":45771,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11141:17:121","memberName":"isPoolInitialized","nodeType":"MemberAccess","referencedDeclaration":4600,"src":"11130:28:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11105:53:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":45773,"nodeType":"ExpressionStatement","src":"11105:53:121"},{"expression":{"id":45779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":45774,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45709,"src":"11168:4:121","typeDescriptions":{"typeIdentifier":"t_struct$_WeightedPoolDynamicData_$197_memory_ptr","typeString":"struct WeightedPoolDynamicData memory"}},"id":45776,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11173:12:121","memberName":"isPoolPaused","nodeType":"MemberAccess","referencedDeclaration":194,"src":"11168:17:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":45777,"name":"poolConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45758,"src":"11188:10:121","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig memory"}},"id":45778,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11199:12:121","memberName":"isPoolPaused","nodeType":"MemberAccess","referencedDeclaration":4602,"src":"11188:23:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11168:43:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":45780,"nodeType":"ExpressionStatement","src":"11168:43:121"},{"expression":{"id":45786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":45781,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45709,"src":"11221:4:121","typeDescriptions":{"typeIdentifier":"t_struct$_WeightedPoolDynamicData_$197_memory_ptr","typeString":"struct WeightedPoolDynamicData memory"}},"id":45783,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11226:20:121","memberName":"isPoolInRecoveryMode","nodeType":"MemberAccess","referencedDeclaration":196,"src":"11221:25:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":45784,"name":"poolConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45758,"src":"11249:10:121","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig memory"}},"id":45785,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11260:20:121","memberName":"isPoolInRecoveryMode","nodeType":"MemberAccess","referencedDeclaration":4604,"src":"11249:31:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11221:59:121","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":45787,"nodeType":"ExpressionStatement","src":"11221:59:121"}]},"documentation":{"id":45705,"nodeType":"StructuredDocumentation","src":"10592:29:121","text":"@inheritdoc IWeightedPool"},"functionSelector":"c0bc6f33","id":45789,"implemented":true,"kind":"function","modifiers":[],"name":"getWeightedPoolDynamicData","nameLocation":"10635:26:121","nodeType":"FunctionDefinition","parameters":{"id":45706,"nodeType":"ParameterList","parameters":[],"src":"10661:2:121"},"returnParameters":{"id":45710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45709,"mutability":"mutable","name":"data","nameLocation":"10726:4:121","nodeType":"VariableDeclaration","scope":45789,"src":"10695:35:121","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_WeightedPoolDynamicData_$197_memory_ptr","typeString":"struct WeightedPoolDynamicData"},"typeName":{"id":45708,"nodeType":"UserDefinedTypeName","pathNode":{"id":45707,"name":"WeightedPoolDynamicData","nameLocations":["10695:23:121"],"nodeType":"IdentifierPath","referencedDeclaration":197,"src":"10695:23:121"},"referencedDeclaration":197,"src":"10695:23:121","typeDescriptions":{"typeIdentifier":"t_struct$_WeightedPoolDynamicData_$197_storage_ptr","typeString":"struct WeightedPoolDynamicData"}},"visibility":"internal"}],"src":"10694:37:121"},"scope":45841,"src":"10626:661:121","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[227],"body":{"id":45828,"nodeType":"Block","src":"11437:206:121","statements":[{"expression":{"id":45806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":45796,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45794,"src":"11447:4:121","typeDescriptions":{"typeIdentifier":"t_struct$_WeightedPoolImmutableData_$179_memory_ptr","typeString":"struct WeightedPoolImmutableData memory"}},"id":45798,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11452:6:121","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":172,"src":"11447:11:121","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":45803,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"11490:4:121","typeDescriptions":{"typeIdentifier":"t_contract$_WeightedPool_$45841","typeString":"contract WeightedPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_WeightedPool_$45841","typeString":"contract WeightedPool"}],"id":45802,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11482:7:121","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":45801,"name":"address","nodeType":"ElementaryTypeName","src":"11482:7:121","typeDescriptions":{}}},"id":45804,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11482:13:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":45799,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"11461:6:121","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":45800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11468:13:121","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":4145,"src":"11461:20:121","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":45805,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11461:35:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"src":"11447:49:121","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":45807,"nodeType":"ExpressionStatement","src":"11447:49:121"},{"expression":{"id":45819,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":45808,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45794,"src":"11507:4:121","typeDescriptions":{"typeIdentifier":"t_struct$_WeightedPoolImmutableData_$179_memory_ptr","typeString":"struct WeightedPoolImmutableData memory"}},"id":45810,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11512:21:121","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":175,"src":"11507:26:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},null],"id":45811,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"11506:30:121","typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$__$","typeString":"tuple(uint256[] memory,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":45816,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"11572:4:121","typeDescriptions":{"typeIdentifier":"t_contract$_WeightedPool_$45841","typeString":"contract WeightedPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_WeightedPool_$45841","typeString":"contract WeightedPool"}],"id":45815,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11564:7:121","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":45814,"name":"address","nodeType":"ElementaryTypeName","src":"11564:7:121","typeDescriptions":{}}},"id":45817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11564:13:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":45812,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"11539:6:121","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":45813,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11546:17:121","memberName":"getPoolTokenRates","nodeType":"MemberAccess","referencedDeclaration":4157,"src":"11539:24:121","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) view external returns (uint256[] memory,uint256[] memory)"}},"id":45818,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11539:39:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256[] memory)"}},"src":"11506:72:121","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":45820,"nodeType":"ExpressionStatement","src":"11506:72:121"},{"expression":{"id":45826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":45821,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45794,"src":"11588:4:121","typeDescriptions":{"typeIdentifier":"t_struct$_WeightedPoolImmutableData_$179_memory_ptr","typeString":"struct WeightedPoolImmutableData memory"}},"id":45823,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11593:17:121","memberName":"normalizedWeights","nodeType":"MemberAccess","referencedDeclaration":178,"src":"11588:22:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":45824,"name":"_getNormalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45666,"src":"11613:21:121","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function () view returns (uint256[] memory)"}},"id":45825,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11613:23:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"11588:48:121","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":45827,"nodeType":"ExpressionStatement","src":"11588:48:121"}]},"documentation":{"id":45790,"nodeType":"StructuredDocumentation","src":"11293:29:121","text":"@inheritdoc IWeightedPool"},"functionSelector":"53b79bd7","id":45829,"implemented":true,"kind":"function","modifiers":[],"name":"getWeightedPoolImmutableData","nameLocation":"11336:28:121","nodeType":"FunctionDefinition","parameters":{"id":45791,"nodeType":"ParameterList","parameters":[],"src":"11364:2:121"},"returnParameters":{"id":45795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45794,"mutability":"mutable","name":"data","nameLocation":"11431:4:121","nodeType":"VariableDeclaration","scope":45829,"src":"11398:37:121","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_WeightedPoolImmutableData_$179_memory_ptr","typeString":"struct WeightedPoolImmutableData"},"typeName":{"id":45793,"nodeType":"UserDefinedTypeName","pathNode":{"id":45792,"name":"WeightedPoolImmutableData","nameLocations":["11398:25:121"],"nodeType":"IdentifierPath","referencedDeclaration":179,"src":"11398:25:121"},"referencedDeclaration":179,"src":"11398:25:121","typeDescriptions":{"typeIdentifier":"t_struct$_WeightedPoolImmutableData_$179_storage_ptr","typeString":"struct WeightedPoolImmutableData"}},"visibility":"internal"}],"src":"11397:39:121"},"scope":45841,"src":"11327:316:121","stateMutability":"view","virtual":true,"visibility":"external"},{"baseFunctions":[11105],"body":{"id":45839,"nodeType":"Block","src":"11741:56:121","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":45836,"name":"WeightedPoolBptRateUnsupported","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45169,"src":"11758:30:121","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":45837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11758:32:121","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":45838,"nodeType":"RevertStatement","src":"11751:39:121"}]},"documentation":{"id":45830,"nodeType":"StructuredDocumentation","src":"11649:29:121","text":"@inheritdoc IRateProvider"},"functionSelector":"679aefce","id":45840,"implemented":true,"kind":"function","modifiers":[],"name":"getRate","nameLocation":"11692:7:121","nodeType":"FunctionDefinition","overrides":{"id":45832,"nodeType":"OverrideSpecifier","overrides":[],"src":"11714:8:121"},"parameters":{"id":45831,"nodeType":"ParameterList","parameters":[],"src":"11699:2:121"},"returnParameters":{"id":45835,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45834,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45840,"src":"11732:7:121","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45833,"name":"uint256","nodeType":"ElementaryTypeName","src":"11732:7:121","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11731:9:121"},"scope":45841,"src":"11683:114:121","stateMutability":"pure","virtual":false,"visibility":"public"}],"scope":45842,"src":"1931:9868:121","usedErrors":[203,206,3452,3640,5901,7917,8214,8217,8220,8223,9575,9578,9581,10742,10749,40849,40921,40923,41500,41505,41510,45169],"usedEvents":[39838,40043,40052]}],"src":"46:11754:121"},"id":121},"contracts/WeightedPool8020Factory.sol":{"ast":{"absolutePath":"contracts/WeightedPool8020Factory.sol","exportedSymbols":{"AddLiquidityKind":[4807],"AddLiquidityParams":[4823],"AfterSwapParams":[4801],"BasePoolFactory":[5283],"BufferWrapOrUnwrapParams":[4862],"FEE_BITLENGTH":[4865],"FEE_SCALING_FACTOR":[4868],"HookFlags":[4627],"HooksConfig":[4651],"IERC20":[40109],"IERC20Metadata":[40135],"IERC4626":[39833],"IPoolVersion":[253],"IRateProvider":[263],"IVault":[3111],"LiquidityManagement":[4580],"MAX_FEE_PERCENTAGE":[4871],"PoolConfig":[4605],"PoolConfigBits":[4582],"PoolData":[4729],"PoolRoleAccounts":[4677],"PoolSwapParams":[4772],"RemoveLiquidityKind":[4828],"RemoveLiquidityParams":[4844],"Rounding":[4732],"SwapKind":[4735],"SwapState":[4661],"TokenConfig":[4694],"TokenInfo":[4704],"TokenType":[4681],"VaultState":[4669],"VaultSwapParams":[4754],"Version":[7482],"WeightedPool":[45841],"WeightedPool8020Factory":[46218],"WrappingDirection":[4847]},"id":46219,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":45843,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:122"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","file":"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol","id":45845,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":46219,"sourceUnit":40136,"src":"72:99:122","symbolAliases":[{"foreign":{"id":45844,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40135,"src":"81:14:122","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IPoolVersion.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IPoolVersion.sol","id":45847,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":46219,"sourceUnit":254,"src":"173:110:122","symbolAliases":[{"foreign":{"id":45846,"name":"IPoolVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":253,"src":"182:12:122","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":45849,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":46219,"sourceUnit":3112,"src":"284:81:122","symbolAliases":[{"foreign":{"id":45848,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"293:6:122","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":45850,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":46219,"sourceUnit":4872,"src":"366:69:122","symbolAliases":[],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-pool-utils/contracts/BasePoolFactory.sol","file":"@balancer-labs/v3-pool-utils/contracts/BasePoolFactory.sol","id":45852,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":46219,"sourceUnit":5284,"src":"437:93:122","symbolAliases":[{"foreign":{"id":45851,"name":"BasePoolFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5283,"src":"446:15:122","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","id":45854,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":46219,"sourceUnit":7483,"src":"531:89:122","symbolAliases":[{"foreign":{"id":45853,"name":"Version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7482,"src":"540:7:122","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/WeightedPool.sol","file":"./WeightedPool.sol","id":45856,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":46219,"sourceUnit":45842,"src":"622:50:122","symbolAliases":[{"foreign":{"id":45855,"name":"WeightedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45841,"src":"631:12:122","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":45858,"name":"IPoolVersion","nameLocations":["1336:12:122"],"nodeType":"IdentifierPath","referencedDeclaration":253,"src":"1336:12:122"},"id":45859,"nodeType":"InheritanceSpecifier","src":"1336:12:122"},{"baseName":{"id":45860,"name":"BasePoolFactory","nameLocations":["1350:15:122"],"nodeType":"IdentifierPath","referencedDeclaration":5283,"src":"1350:15:122"},"id":45861,"nodeType":"InheritanceSpecifier","src":"1350:15:122"},{"baseName":{"id":45862,"name":"Version","nameLocations":["1367:7:122"],"nodeType":"IdentifierPath","referencedDeclaration":7482,"src":"1367:7:122"},"id":45863,"nodeType":"InheritanceSpecifier","src":"1367:7:122"}],"canonicalName":"WeightedPool8020Factory","contractDependencies":[45841],"contractKind":"contract","documentation":{"id":45857,"nodeType":"StructuredDocumentation","src":"674:625:122","text":" @notice Weighted Pool factory for 80/20 pools.\n @dev These are standard Weighted Pools, but constrained to two tokens and 80/20 weights, greatly simplifying their\n configuration. This is an example of a customized factory, designed to deploy special-purpose pools.\n It does not allow hooks, and has a custom salt computation that does not consider the deployer address.\n See https://medium.com/balancer-protocol/the-8020-initiative-64a7a6cab976 for one use case, and\n https://medium.com/balancer-protocol/80-20-balancer-pools-ad7fed816c8d for a general discussion of the benefits of\n 80/20 pools."},"fullyImplemented":true,"id":46218,"linearizedBaseContracts":[46218,7482,273,5283,5892,19387,5786,5498,1579,243,253],"name":"WeightedPool8020Factory","nameLocation":"1309:23:122","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":45866,"mutability":"constant","name":"_EIGHTY","nameLocation":"1406:7:122","nodeType":"VariableDeclaration","scope":46218,"src":"1381:40:122","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45864,"name":"uint256","nodeType":"ElementaryTypeName","src":"1381:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3830653136","id":45865,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1416:5:122","typeDescriptions":{"typeIdentifier":"t_rational_800000000000000000_by_1","typeString":"int_const 800000000000000000"},"value":"80e16"},"visibility":"private"},{"constant":true,"id":45869,"mutability":"constant","name":"_TWENTY","nameLocation":"1459:7:122","nodeType":"VariableDeclaration","scope":46218,"src":"1434:40:122","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45867,"name":"uint256","nodeType":"ElementaryTypeName","src":"1434:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"3230653136","id":45868,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1469:5:122","typeDescriptions":{"typeIdentifier":"t_rational_200000000000000000_by_1","typeString":"int_const 200000000000000000"},"value":"20e16"},"visibility":"private"},{"constant":false,"id":45871,"mutability":"mutable","name":"_poolVersion","nameLocation":"1503:12:122","nodeType":"VariableDeclaration","scope":46218,"src":"1488:27:122","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":45870,"name":"string","nodeType":"ElementaryTypeName","src":"1488:6:122","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"body":{"id":45898,"nodeType":"Block","src":"1772:43:122","statements":[{"expression":{"id":45896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":45894,"name":"_poolVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45871,"src":"1782:12:122","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":45895,"name":"poolVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45880,"src":"1797:11:122","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"1782:26:122","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":45897,"nodeType":"ExpressionStatement","src":"1782:26:122"}]},"id":45899,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":45883,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45874,"src":"1687:5:122","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},{"id":45884,"name":"pauseWindowDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45876,"src":"1694:19:122","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"expression":{"arguments":[{"id":45886,"name":"WeightedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45841,"src":"1720:12:122","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WeightedPool_$45841_$","typeString":"type(contract WeightedPool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_WeightedPool_$45841_$","typeString":"type(contract WeightedPool)"}],"id":45885,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"1715:4:122","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":45887,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1715:18:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_WeightedPool_$45841","typeString":"type(contract WeightedPool)"}},"id":45888,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1734:12:122","memberName":"creationCode","nodeType":"MemberAccess","src":"1715:31:122","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":45889,"kind":"baseConstructorSpecifier","modifierName":{"id":45882,"name":"BasePoolFactory","nameLocations":["1671:15:122"],"nodeType":"IdentifierPath","referencedDeclaration":5283,"src":"1671:15:122"},"nodeType":"ModifierInvocation","src":"1671:76:122"},{"arguments":[{"id":45891,"name":"factoryVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45878,"src":"1756:14:122","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":45892,"kind":"baseConstructorSpecifier","modifierName":{"id":45890,"name":"Version","nameLocations":["1748:7:122"],"nodeType":"IdentifierPath","referencedDeclaration":7482,"src":"1748:7:122"},"nodeType":"ModifierInvocation","src":"1748:23:122"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":45881,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45874,"mutability":"mutable","name":"vault","nameLocation":"1550:5:122","nodeType":"VariableDeclaration","scope":45899,"src":"1543:12:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":45873,"nodeType":"UserDefinedTypeName","pathNode":{"id":45872,"name":"IVault","nameLocations":["1543:6:122"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"1543:6:122"},"referencedDeclaration":3111,"src":"1543:6:122","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":45876,"mutability":"mutable","name":"pauseWindowDuration","nameLocation":"1572:19:122","nodeType":"VariableDeclaration","scope":45899,"src":"1565:26:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":45875,"name":"uint32","nodeType":"ElementaryTypeName","src":"1565:6:122","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":45878,"mutability":"mutable","name":"factoryVersion","nameLocation":"1615:14:122","nodeType":"VariableDeclaration","scope":45899,"src":"1601:28:122","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":45877,"name":"string","nodeType":"ElementaryTypeName","src":"1601:6:122","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":45880,"mutability":"mutable","name":"poolVersion","nameLocation":"1653:11:122","nodeType":"VariableDeclaration","scope":45899,"src":"1639:25:122","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":45879,"name":"string","nodeType":"ElementaryTypeName","src":"1639:6:122","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1533:137:122"},"returnParameters":{"id":45893,"nodeType":"ParameterList","parameters":[],"src":"1772:0:122"},"scope":46218,"src":"1522:293:122","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[252],"body":{"id":45907,"nodeType":"Block","src":"1918:36:122","statements":[{"expression":{"id":45905,"name":"_poolVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45871,"src":"1935:12:122","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":45904,"id":45906,"nodeType":"Return","src":"1928:19:122"}]},"documentation":{"id":45900,"nodeType":"StructuredDocumentation","src":"1821:28:122","text":"@inheritdoc IPoolVersion"},"functionSelector":"3f819b6f","id":45908,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolVersion","nameLocation":"1863:14:122","nodeType":"FunctionDefinition","parameters":{"id":45901,"nodeType":"ParameterList","parameters":[],"src":"1877:2:122"},"returnParameters":{"id":45904,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45903,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":45908,"src":"1903:13:122","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":45902,"name":"string","nodeType":"ElementaryTypeName","src":"1903:6:122","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1902:15:122"},"scope":46218,"src":"1854:100:122","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":46044,"nodeType":"Block","src":"2868:1297:122","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":45931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":45925,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45918,"src":"2882:12:122","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"id":45926,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2895:11:122","memberName":"poolCreator","nodeType":"MemberAccess","referencedDeclaration":4676,"src":"2882:24:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":45929,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2918:1:122","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":45928,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2910:7:122","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":45927,"name":"address","nodeType":"ElementaryTypeName","src":"2910:7:122","typeDescriptions":{}}},"id":45930,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2910:10:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2882:38:122","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":45936,"nodeType":"IfStatement","src":"2878:101:122","trueBody":{"id":45935,"nodeType":"Block","src":"2922:57:122","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":45932,"name":"StandardPoolWithCreator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4944,"src":"2943:23:122","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":45933,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2943:25:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":45934,"nodeType":"RevertStatement","src":"2936:32:122"}]}},{"assignments":[45939],"declarations":[{"constant":false,"id":45939,"mutability":"mutable","name":"highWeightToken","nameLocation":"2996:15:122","nodeType":"VariableDeclaration","scope":46044,"src":"2989:22:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":45938,"nodeType":"UserDefinedTypeName","pathNode":{"id":45937,"name":"IERC20","nameLocations":["2989:6:122"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"2989:6:122"},"referencedDeclaration":40109,"src":"2989:6:122","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"id":45942,"initialValue":{"expression":{"id":45940,"name":"highWeightTokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45912,"src":"3014:21:122","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":45941,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3036:5:122","memberName":"token","nodeType":"MemberAccess","referencedDeclaration":4685,"src":"3014:27:122","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"2989:52:122"},{"assignments":[45945],"declarations":[{"constant":false,"id":45945,"mutability":"mutable","name":"lowWeightToken","nameLocation":"3058:14:122","nodeType":"VariableDeclaration","scope":46044,"src":"3051:21:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":45944,"nodeType":"UserDefinedTypeName","pathNode":{"id":45943,"name":"IERC20","nameLocations":["3051:6:122"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"3051:6:122"},"referencedDeclaration":40109,"src":"3051:6:122","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"id":45948,"initialValue":{"expression":{"id":45946,"name":"lowWeightTokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45915,"src":"3075:20:122","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":45947,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3096:5:122","memberName":"token","nodeType":"MemberAccess","referencedDeclaration":4685,"src":"3075:26:122","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"VariableDeclarationStatement","src":"3051:50:122"},{"assignments":[45953],"declarations":[{"constant":false,"id":45953,"mutability":"mutable","name":"tokenConfig","nameLocation":"3133:11:122","nodeType":"VariableDeclaration","scope":46044,"src":"3112:32:122","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":45951,"nodeType":"UserDefinedTypeName","pathNode":{"id":45950,"name":"TokenConfig","nameLocations":["3112:11:122"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"3112:11:122"},"referencedDeclaration":4694,"src":"3112:11:122","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":45952,"nodeType":"ArrayTypeName","src":"3112:13:122","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"}],"id":45960,"initialValue":{"arguments":[{"hexValue":"32","id":45958,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3165:1:122","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"}],"id":45957,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"3147:17:122","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct TokenConfig memory[] memory)"},"typeName":{"baseType":{"id":45955,"nodeType":"UserDefinedTypeName","pathNode":{"id":45954,"name":"TokenConfig","nameLocations":["3151:11:122"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"3151:11:122"},"referencedDeclaration":4694,"src":"3151:11:122","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":45956,"nodeType":"ArrayTypeName","src":"3151:13:122","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}}},"id":45959,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3147:20:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"nodeType":"VariableDeclarationStatement","src":"3112:55:122"},{"assignments":[45965],"declarations":[{"constant":false,"id":45965,"mutability":"mutable","name":"weights","nameLocation":"3194:7:122","nodeType":"VariableDeclaration","scope":46044,"src":"3177:24:122","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":45963,"name":"uint256","nodeType":"ElementaryTypeName","src":"3177:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45964,"nodeType":"ArrayTypeName","src":"3177:9:122","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":45971,"initialValue":{"arguments":[{"hexValue":"32","id":45969,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3218:1:122","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"}],"id":45968,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"3204:13:122","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":45966,"name":"uint256","nodeType":"ElementaryTypeName","src":"3208:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45967,"nodeType":"ArrayTypeName","src":"3208:9:122","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":45970,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3204:16:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"3177:43:122"},{"assignments":[45973,45975],"declarations":[{"constant":false,"id":45973,"mutability":"mutable","name":"highWeightTokenIdx","nameLocation":"3274:18:122","nodeType":"VariableDeclaration","scope":46044,"src":"3266:26:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45972,"name":"uint256","nodeType":"ElementaryTypeName","src":"3266:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":45975,"mutability":"mutable","name":"lowWeightTokenIdx","nameLocation":"3302:17:122","nodeType":"VariableDeclaration","scope":46044,"src":"3294:25:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45974,"name":"uint256","nodeType":"ElementaryTypeName","src":"3294:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":45986,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"id":45978,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":45976,"name":"highWeightToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45939,"src":"3323:15:122","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":45977,"name":"lowWeightToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45945,"src":"3341:14:122","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"3323:32:122","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"components":[{"hexValue":"30","id":45982,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3368:1:122","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"31","id":45983,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3371:1:122","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"id":45984,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"3367:6:122","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_rational_1_by_1_$","typeString":"tuple(int_const 0,int_const 1)"}},"id":45985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"3323:50:122","trueExpression":{"components":[{"hexValue":"31","id":45979,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3359:1:122","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},{"hexValue":"30","id":45980,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3362:1:122","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":45981,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"3358:6:122","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_1_by_1_$_t_rational_0_by_1_$","typeString":"tuple(int_const 1,int_const 0)"}},"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint8_$_t_uint8_$","typeString":"tuple(uint8,uint8)"}},"nodeType":"VariableDeclarationStatement","src":"3265:108:122"},{"expression":{"id":45991,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":45987,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45965,"src":"3384:7:122","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":45989,"indexExpression":{"id":45988,"name":"highWeightTokenIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45973,"src":"3392:18:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3384:27:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":45990,"name":"_EIGHTY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45866,"src":"3414:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3384:37:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45992,"nodeType":"ExpressionStatement","src":"3384:37:122"},{"expression":{"id":45997,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":45993,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45965,"src":"3431:7:122","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":45995,"indexExpression":{"id":45994,"name":"lowWeightTokenIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45975,"src":"3439:17:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3431:26:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":45996,"name":"_TWENTY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45869,"src":"3460:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3431:36:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":45998,"nodeType":"ExpressionStatement","src":"3431:36:122"},{"expression":{"id":46003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":45999,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45953,"src":"3478:11:122","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":46001,"indexExpression":{"id":46000,"name":"highWeightTokenIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45973,"src":"3490:18:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3478:31:122","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":46002,"name":"highWeightTokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45912,"src":"3512:21:122","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"src":"3478:55:122","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":46004,"nodeType":"ExpressionStatement","src":"3478:55:122"},{"expression":{"id":46009,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":46005,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45953,"src":"3543:11:122","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":46007,"indexExpression":{"id":46006,"name":"lowWeightTokenIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45975,"src":"3555:17:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3543:30:122","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":46008,"name":"lowWeightTokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45915,"src":"3576:20:122","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"src":"3543:53:122","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":46010,"nodeType":"ExpressionStatement","src":"3543:53:122"},{"assignments":[46012],"declarations":[{"constant":false,"id":46012,"mutability":"mutable","name":"constructorArgs","nameLocation":"3620:15:122","nodeType":"VariableDeclaration","scope":46044,"src":"3607:28:122","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":46011,"name":"bytes","nodeType":"ElementaryTypeName","src":"3607:5:122","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":46017,"initialValue":{"arguments":[{"id":46014,"name":"highWeightToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45939,"src":"3664:15:122","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":46015,"name":"lowWeightToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45945,"src":"3681:14:122","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":46013,"name":"_calculateConstructorArgs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46205,"src":"3638:25:122","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$40109_$_t_contract$_IERC20_$40109_$returns$_t_bytes_memory_ptr_$","typeString":"function (contract IERC20,contract IERC20) view returns (bytes memory)"}},"id":46016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3638:58:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"3607:89:122"},{"assignments":[46019],"declarations":[{"constant":false,"id":46019,"mutability":"mutable","name":"salt","nameLocation":"3714:4:122","nodeType":"VariableDeclaration","scope":46044,"src":"3706:12:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":46018,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3706:7:122","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":46024,"initialValue":{"arguments":[{"id":46021,"name":"highWeightToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45939,"src":"3736:15:122","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":46022,"name":"lowWeightToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45945,"src":"3753:14:122","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":46020,"name":"_calculateSalt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46103,"src":"3721:14:122","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$40109_$_t_contract$_IERC20_$40109_$returns$_t_bytes32_$","typeString":"function (contract IERC20,contract IERC20) view returns (bytes32)"}},"id":46023,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3721:47:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"3706:62:122"},{"expression":{"id":46030,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46025,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45923,"src":"3779:4:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":46027,"name":"constructorArgs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46012,"src":"3794:15:122","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":46028,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46019,"src":"3811:4:122","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":46026,"name":"_create","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5226,"src":"3786:7:122","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes memory,bytes32) returns (address)"}},"id":46029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3786:30:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3779:37:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":46031,"nodeType":"ExpressionStatement","src":"3779:37:122"},{"expression":{"arguments":[{"id":46033,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45923,"src":"3922:4:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":46034,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45953,"src":"3940:11:122","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},{"id":46035,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45920,"src":"3965:17:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":46036,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3996:5:122","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":46037,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45918,"src":"4048:12:122","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},{"arguments":[],"expression":{"argumentTypes":[],"id":46038,"name":"getDefaultPoolHooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5274,"src":"4074:27:122","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_address_$","typeString":"function () pure returns (address)"}},"id":46039,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4074:29:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":46040,"name":"getDefaultLiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5282,"src":"4117:29:122","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_LiquidityManagement_$4580_memory_ptr_$","typeString":"function () pure returns (struct LiquidityManagement memory)"}},"id":46041,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4117:31:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}],"id":46032,"name":"_registerPoolWithVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5262,"src":"3886:22:122","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$_t_uint256_$_t_bool_$_t_struct$_PoolRoleAccounts_$4677_memory_ptr_$_t_address_$_t_struct$_LiquidityManagement_$4580_memory_ptr_$returns$__$","typeString":"function (address,struct TokenConfig memory[] memory,uint256,bool,struct PoolRoleAccounts memory,address,struct LiquidityManagement memory)"}},"id":46042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3886:272:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":46043,"nodeType":"ExpressionStatement","src":"3886:272:122"}]},"documentation":{"id":45909,"nodeType":"StructuredDocumentation","src":"1960:669:122","text":" @notice Deploys a new `WeightedPool`.\n @dev Since tokens must be sorted, pass in explicit 80/20 token config structs. This assumes both tokens support\n the `IERC20Metadata` interface with `symbol` that returns a string. Otherwise, use the regular\n `WeightedPoolFactory`.\n @param highWeightTokenConfig The token configuration of the high weight token\n @param lowWeightTokenConfig The token configuration of the low weight token\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param swapFeePercentage Initial swap fee percentage\n @return pool The pool address"},"functionSelector":"4bef86d9","id":46045,"implemented":true,"kind":"function","modifiers":[],"name":"create","nameLocation":"2643:6:122","nodeType":"FunctionDefinition","parameters":{"id":45921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45912,"mutability":"mutable","name":"highWeightTokenConfig","nameLocation":"2678:21:122","nodeType":"VariableDeclaration","scope":46045,"src":"2659:40:122","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig"},"typeName":{"id":45911,"nodeType":"UserDefinedTypeName","pathNode":{"id":45910,"name":"TokenConfig","nameLocations":["2659:11:122"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"2659:11:122"},"referencedDeclaration":4694,"src":"2659:11:122","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"visibility":"internal"},{"constant":false,"id":45915,"mutability":"mutable","name":"lowWeightTokenConfig","nameLocation":"2728:20:122","nodeType":"VariableDeclaration","scope":46045,"src":"2709:39:122","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig"},"typeName":{"id":45914,"nodeType":"UserDefinedTypeName","pathNode":{"id":45913,"name":"TokenConfig","nameLocations":["2709:11:122"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"2709:11:122"},"referencedDeclaration":4694,"src":"2709:11:122","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"visibility":"internal"},{"constant":false,"id":45918,"mutability":"mutable","name":"roleAccounts","nameLocation":"2782:12:122","nodeType":"VariableDeclaration","scope":46045,"src":"2758:36:122","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":45917,"nodeType":"UserDefinedTypeName","pathNode":{"id":45916,"name":"PoolRoleAccounts","nameLocations":["2758:16:122"],"nodeType":"IdentifierPath","referencedDeclaration":4677,"src":"2758:16:122"},"referencedDeclaration":4677,"src":"2758:16:122","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":45920,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"2812:17:122","nodeType":"VariableDeclaration","scope":46045,"src":"2804:25:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":45919,"name":"uint256","nodeType":"ElementaryTypeName","src":"2804:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2649:186:122"},"returnParameters":{"id":45924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":45923,"mutability":"mutable","name":"pool","nameLocation":"2862:4:122","nodeType":"VariableDeclaration","scope":46045,"src":"2854:12:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":45922,"name":"address","nodeType":"ElementaryTypeName","src":"2854:7:122","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2853:14:122"},"scope":46218,"src":"2634:1531:122","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":46078,"nodeType":"Block","src":"4549:239:122","statements":[{"assignments":[46058],"declarations":[{"constant":false,"id":46058,"mutability":"mutable","name":"constructorArgs","nameLocation":"4572:15:122","nodeType":"VariableDeclaration","scope":46078,"src":"4559:28:122","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":46057,"name":"bytes","nodeType":"ElementaryTypeName","src":"4559:5:122","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":46063,"initialValue":{"arguments":[{"id":46060,"name":"highWeightToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46049,"src":"4616:15:122","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":46061,"name":"lowWeightToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46052,"src":"4633:14:122","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":46059,"name":"_calculateConstructorArgs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46205,"src":"4590:25:122","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$40109_$_t_contract$_IERC20_$40109_$returns$_t_bytes_memory_ptr_$","typeString":"function (contract IERC20,contract IERC20) view returns (bytes memory)"}},"id":46062,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4590:58:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"4559:89:122"},{"assignments":[46065],"declarations":[{"constant":false,"id":46065,"mutability":"mutable","name":"salt","nameLocation":"4666:4:122","nodeType":"VariableDeclaration","scope":46078,"src":"4658:12:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":46064,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4658:7:122","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":46070,"initialValue":{"arguments":[{"id":46067,"name":"highWeightToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46049,"src":"4688:15:122","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":46068,"name":"lowWeightToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46052,"src":"4705:14:122","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":46066,"name":"_calculateSalt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46103,"src":"4673:14:122","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_contract$_IERC20_$40109_$_t_contract$_IERC20_$40109_$returns$_t_bytes32_$","typeString":"function (contract IERC20,contract IERC20) view returns (bytes32)"}},"id":46069,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4673:47:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"4658:62:122"},{"expression":{"id":46076,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46071,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46055,"src":"4731:4:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":46073,"name":"constructorArgs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46058,"src":"4759:15:122","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":46074,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46065,"src":"4776:4:122","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":46072,"name":"getDeploymentAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5116,"src":"4738:20:122","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes memory,bytes32) view returns (address)"}},"id":46075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4738:43:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4731:50:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":46077,"nodeType":"ExpressionStatement","src":"4731:50:122"}]},"documentation":{"id":46046,"nodeType":"StructuredDocumentation","src":"4171:272:122","text":" @notice Gets the address of the pool with the respective tokens and weights.\n @param highWeightToken The token with 80% weight in the pool.\n @param lowWeightToken The token with 20% weight in the pool.\n @return pool Address of the pool"},"functionSelector":"531aa03e","id":46079,"implemented":true,"kind":"function","modifiers":[],"name":"getPool","nameLocation":"4457:7:122","nodeType":"FunctionDefinition","parameters":{"id":46053,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46049,"mutability":"mutable","name":"highWeightToken","nameLocation":"4472:15:122","nodeType":"VariableDeclaration","scope":46079,"src":"4465:22:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":46048,"nodeType":"UserDefinedTypeName","pathNode":{"id":46047,"name":"IERC20","nameLocations":["4465:6:122"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"4465:6:122"},"referencedDeclaration":40109,"src":"4465:6:122","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":46052,"mutability":"mutable","name":"lowWeightToken","nameLocation":"4496:14:122","nodeType":"VariableDeclaration","scope":46079,"src":"4489:21:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":46051,"nodeType":"UserDefinedTypeName","pathNode":{"id":46050,"name":"IERC20","nameLocations":["4489:6:122"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"4489:6:122"},"referencedDeclaration":40109,"src":"4489:6:122","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"4464:47:122"},"returnParameters":{"id":46056,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46055,"mutability":"mutable","name":"pool","nameLocation":"4543:4:122","nodeType":"VariableDeclaration","scope":46079,"src":"4535:12:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":46054,"name":"address","nodeType":"ElementaryTypeName","src":"4535:7:122","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4534:14:122"},"scope":46218,"src":"4448:340:122","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":46102,"nodeType":"Block","src":"4902:93:122","statements":[{"expression":{"id":46100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46090,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46088,"src":"4912:4:122","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"expression":{"id":46094,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"4940:5:122","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":46095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4946:7:122","memberName":"chainid","nodeType":"MemberAccess","src":"4940:13:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":46096,"name":"highWeightToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46082,"src":"4955:15:122","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":46097,"name":"lowWeightToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46085,"src":"4972:14:122","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"expression":{"id":46092,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4929:3:122","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":46093,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4933:6:122","memberName":"encode","nodeType":"MemberAccess","src":"4929:10:122","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":46098,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4929:58:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":46091,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"4919:9:122","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":46099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4919:69:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"4912:76:122","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":46101,"nodeType":"ExpressionStatement","src":"4912:76:122"}]},"id":46103,"implemented":true,"kind":"function","modifiers":[],"name":"_calculateSalt","nameLocation":"4803:14:122","nodeType":"FunctionDefinition","parameters":{"id":46086,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46082,"mutability":"mutable","name":"highWeightToken","nameLocation":"4825:15:122","nodeType":"VariableDeclaration","scope":46103,"src":"4818:22:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":46081,"nodeType":"UserDefinedTypeName","pathNode":{"id":46080,"name":"IERC20","nameLocations":["4818:6:122"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"4818:6:122"},"referencedDeclaration":40109,"src":"4818:6:122","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":46085,"mutability":"mutable","name":"lowWeightToken","nameLocation":"4849:14:122","nodeType":"VariableDeclaration","scope":46103,"src":"4842:21:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":46084,"nodeType":"UserDefinedTypeName","pathNode":{"id":46083,"name":"IERC20","nameLocations":["4842:6:122"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"4842:6:122"},"referencedDeclaration":40109,"src":"4842:6:122","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"4817:47:122"},"returnParameters":{"id":46089,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46088,"mutability":"mutable","name":"salt","nameLocation":"4896:4:122","nodeType":"VariableDeclaration","scope":46103,"src":"4888:12:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":46087,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4888:7:122","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4887:14:122"},"scope":46218,"src":"4794:201:122","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":46204,"nodeType":"Block","src":"5157:946:122","statements":[{"assignments":[46115,46117],"declarations":[{"constant":false,"id":46115,"mutability":"mutable","name":"highWeightTokenIdx","nameLocation":"5210:18:122","nodeType":"VariableDeclaration","scope":46204,"src":"5202:26:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46114,"name":"uint256","nodeType":"ElementaryTypeName","src":"5202:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":46117,"mutability":"mutable","name":"lowWeightTokenIdx","nameLocation":"5238:17:122","nodeType":"VariableDeclaration","scope":46204,"src":"5230:25:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46116,"name":"uint256","nodeType":"ElementaryTypeName","src":"5230:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":46128,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"id":46120,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":46118,"name":"highWeightToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46106,"src":"5259:15:122","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":46119,"name":"lowWeightToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46109,"src":"5277:14:122","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"5259:32:122","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"components":[{"hexValue":"30","id":46124,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5304:1:122","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"31","id":46125,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5307:1:122","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"id":46126,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"5303:6:122","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_rational_1_by_1_$","typeString":"tuple(int_const 0,int_const 1)"}},"id":46127,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"5259:50:122","trueExpression":{"components":[{"hexValue":"31","id":46121,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5295:1:122","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},{"hexValue":"30","id":46122,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5298:1:122","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":46123,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"5294:6:122","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_1_by_1_$_t_rational_0_by_1_$","typeString":"tuple(int_const 1,int_const 0)"}},"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint8_$_t_uint8_$","typeString":"tuple(uint8,uint8)"}},"nodeType":"VariableDeclarationStatement","src":"5201:108:122"},{"assignments":[46130],"declarations":[{"constant":false,"id":46130,"mutability":"mutable","name":"highWeightTokenSymbol","nameLocation":"5334:21:122","nodeType":"VariableDeclaration","scope":46204,"src":"5320:35:122","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":46129,"name":"string","nodeType":"ElementaryTypeName","src":"5320:6:122","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":46139,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":46134,"name":"highWeightToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46106,"src":"5381:15:122","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":46133,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5373:7:122","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":46132,"name":"address","nodeType":"ElementaryTypeName","src":"5373:7:122","typeDescriptions":{}}},"id":46135,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5373:24:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":46131,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40135,"src":"5358:14:122","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Metadata_$40135_$","typeString":"type(contract IERC20Metadata)"}},"id":46136,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5358:40:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$40135","typeString":"contract IERC20Metadata"}},"id":46137,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5399:6:122","memberName":"symbol","nodeType":"MemberAccess","referencedDeclaration":40128,"src":"5358:47:122","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view external returns (string memory)"}},"id":46138,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5358:49:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"VariableDeclarationStatement","src":"5320:87:122"},{"assignments":[46141],"declarations":[{"constant":false,"id":46141,"mutability":"mutable","name":"lowWeightTokenSymbol","nameLocation":"5431:20:122","nodeType":"VariableDeclaration","scope":46204,"src":"5417:34:122","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":46140,"name":"string","nodeType":"ElementaryTypeName","src":"5417:6:122","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":46150,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"arguments":[{"id":46145,"name":"lowWeightToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46109,"src":"5477:14:122","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":46144,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5469:7:122","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":46143,"name":"address","nodeType":"ElementaryTypeName","src":"5469:7:122","typeDescriptions":{}}},"id":46146,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5469:23:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":46142,"name":"IERC20Metadata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40135,"src":"5454:14:122","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC20Metadata_$40135_$","typeString":"type(contract IERC20Metadata)"}},"id":46147,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5454:39:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IERC20Metadata_$40135","typeString":"contract IERC20Metadata"}},"id":46148,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5494:6:122","memberName":"symbol","nodeType":"MemberAccess","referencedDeclaration":40128,"src":"5454:46:122","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_string_memory_ptr_$","typeString":"function () view external returns (string memory)"}},"id":46149,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5454:48:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"VariableDeclarationStatement","src":"5417:85:122"},{"assignments":[46155],"declarations":[{"constant":false,"id":46155,"mutability":"mutable","name":"weights","nameLocation":"5530:7:122","nodeType":"VariableDeclaration","scope":46204,"src":"5513:24:122","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":46153,"name":"uint256","nodeType":"ElementaryTypeName","src":"5513:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46154,"nodeType":"ArrayTypeName","src":"5513:9:122","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":46161,"initialValue":{"arguments":[{"hexValue":"32","id":46159,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5554:1:122","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"}],"id":46158,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"5540:13:122","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":46156,"name":"uint256","nodeType":"ElementaryTypeName","src":"5544:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46157,"nodeType":"ArrayTypeName","src":"5544:9:122","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":46160,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5540:16:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"5513:43:122"},{"expression":{"id":46166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":46162,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46155,"src":"5566:7:122","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":46164,"indexExpression":{"id":46163,"name":"highWeightTokenIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46115,"src":"5574:18:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5566:27:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":46165,"name":"_EIGHTY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45866,"src":"5596:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5566:37:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46167,"nodeType":"ExpressionStatement","src":"5566:37:122"},{"expression":{"id":46172,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":46168,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46155,"src":"5613:7:122","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":46170,"indexExpression":{"id":46169,"name":"lowWeightTokenIdx","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46117,"src":"5621:17:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5613:26:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":46171,"name":"_TWENTY","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45869,"src":"5642:7:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5613:36:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46173,"nodeType":"ExpressionStatement","src":"5613:36:122"},{"expression":{"id":46202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46174,"name":"constructorArgs","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46112,"src":"5660:15:122","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"hexValue":"42616c616e63657220383020","id":46182,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5767:14:122","typeDescriptions":{"typeIdentifier":"t_stringliteral_ed28c6f403a4d5b8e88c5ea4fb589bc1a6dd829573510ffeaf7b2bfd6663b992","typeString":"literal_string \"Balancer 80 \""},"value":"Balancer 80 "},{"id":46183,"name":"highWeightTokenSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46130,"src":"5783:21:122","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"20323020","id":46184,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5806:6:122","typeDescriptions":{"typeIdentifier":"t_stringliteral_b63e55a17b47aee129da839c11c2a4357f84417d4c68ef5e8bb59c94aba54dc7","typeString":"literal_string \" 20 \""},"value":" 20 "},{"id":46185,"name":"lowWeightTokenSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46141,"src":"5814:20:122","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_ed28c6f403a4d5b8e88c5ea4fb589bc1a6dd829573510ffeaf7b2bfd6663b992","typeString":"literal_string \"Balancer 80 \""},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_stringliteral_b63e55a17b47aee129da839c11c2a4357f84417d4c68ef5e8bb59c94aba54dc7","typeString":"literal_string \" 20 \""},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":46180,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5753:6:122","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":46179,"name":"string","nodeType":"ElementaryTypeName","src":"5753:6:122","typeDescriptions":{}}},"id":46181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5760:6:122","memberName":"concat","nodeType":"MemberAccess","src":"5753:13:122","typeDescriptions":{"typeIdentifier":"t_function_stringconcat_pure$__$returns$_t_string_memory_ptr_$","typeString":"function () pure returns (string memory)"}},"id":46186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5753:82:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"arguments":[{"hexValue":"422d3830","id":46190,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5875:6:122","typeDescriptions":{"typeIdentifier":"t_stringliteral_9b717de650a7a424bb5c3db9901f5a1cd760f150677f3004998ed5eb11795207","typeString":"literal_string \"B-80\""},"value":"B-80"},{"id":46191,"name":"highWeightTokenSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46130,"src":"5883:21:122","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"2d3230","id":46192,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5906:5:122","typeDescriptions":{"typeIdentifier":"t_stringliteral_47539b362ac0210d06a15c9a7235540ed55a17d4de4f158b6b5b72c96456dc9b","typeString":"literal_string \"-20\""},"value":"-20"},{"id":46193,"name":"lowWeightTokenSymbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46141,"src":"5913:20:122","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_9b717de650a7a424bb5c3db9901f5a1cd760f150677f3004998ed5eb11795207","typeString":"literal_string \"B-80\""},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_stringliteral_47539b362ac0210d06a15c9a7235540ed55a17d4de4f158b6b5b72c96456dc9b","typeString":"literal_string \"-20\""},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":46188,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5861:6:122","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":46187,"name":"string","nodeType":"ElementaryTypeName","src":"5861:6:122","typeDescriptions":{}}},"id":46189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5868:6:122","memberName":"concat","nodeType":"MemberAccess","src":"5861:13:122","typeDescriptions":{"typeIdentifier":"t_function_stringconcat_pure$__$returns$_t_string_memory_ptr_$","typeString":"function () pure returns (string memory)"}},"id":46194,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5861:73:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"32","id":46195,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5963:1:122","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},{"id":46196,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46155,"src":"6001:7:122","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":46197,"name":"_poolVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45871,"src":"6035:12:122","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}],"expression":{"id":46177,"name":"WeightedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45841,"src":"5702:12:122","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WeightedPool_$45841_$","typeString":"type(contract WeightedPool)"}},"id":46178,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5715:13:122","memberName":"NewPoolParams","nodeType":"MemberAccess","referencedDeclaration":45139,"src":"5702:26:122","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_NewPoolParams_$45139_storage_ptr_$","typeString":"type(struct WeightedPool.NewPoolParams storage pointer)"}},"id":46198,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["5747:4:122","5853:6:122","5952:9:122","5982:17:122","6026:7:122"],"names":["name","symbol","numTokens","normalizedWeights","version"],"nodeType":"FunctionCall","src":"5702:360:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_NewPoolParams_$45139_memory_ptr","typeString":"struct WeightedPool.NewPoolParams memory"}},{"arguments":[],"expression":{"argumentTypes":[],"id":46199,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19373,"src":"6076:8:122","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$3111_$","typeString":"function () view returns (contract IVault)"}},"id":46200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6076:10:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_NewPoolParams_$45139_memory_ptr","typeString":"struct WeightedPool.NewPoolParams memory"},{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}],"expression":{"id":46175,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5678:3:122","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":46176,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"5682:6:122","memberName":"encode","nodeType":"MemberAccess","src":"5678:10:122","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":46201,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5678:418:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"src":"5660:436:122","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":46203,"nodeType":"ExpressionStatement","src":"5660:436:122"}]},"id":46205,"implemented":true,"kind":"function","modifiers":[],"name":"_calculateConstructorArgs","nameLocation":"5010:25:122","nodeType":"FunctionDefinition","parameters":{"id":46110,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46106,"mutability":"mutable","name":"highWeightToken","nameLocation":"5052:15:122","nodeType":"VariableDeclaration","scope":46205,"src":"5045:22:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":46105,"nodeType":"UserDefinedTypeName","pathNode":{"id":46104,"name":"IERC20","nameLocations":["5045:6:122"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"5045:6:122"},"referencedDeclaration":40109,"src":"5045:6:122","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":46109,"mutability":"mutable","name":"lowWeightToken","nameLocation":"5084:14:122","nodeType":"VariableDeclaration","scope":46205,"src":"5077:21:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":46108,"nodeType":"UserDefinedTypeName","pathNode":{"id":46107,"name":"IERC20","nameLocations":["5077:6:122"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"5077:6:122"},"referencedDeclaration":40109,"src":"5077:6:122","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"5035:69:122"},"returnParameters":{"id":46113,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46112,"mutability":"mutable","name":"constructorArgs","nameLocation":"5140:15:122","nodeType":"VariableDeclaration","scope":46205,"src":"5127:28:122","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":46111,"name":"bytes","nodeType":"ElementaryTypeName","src":"5127:5:122","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5126:30:122"},"scope":46218,"src":"5001:1102:122","stateMutability":"view","virtual":false,"visibility":"private"},{"baseFunctions":[5189],"body":{"id":46216,"nodeType":"Block","src":"6377:28:122","statements":[{"expression":{"id":46214,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46208,"src":"6394:4:122","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":46213,"id":46215,"nodeType":"Return","src":"6387:11:122"}]},"documentation":{"id":46206,"nodeType":"StructuredDocumentation","src":"6109:181:122","text":" @dev By default, the BasePoolFactory adds the sender and chainId to compute a final salt.\n Override this to make it use the canonical address salt directly."},"id":46217,"implemented":true,"kind":"function","modifiers":[],"name":"_computeFinalSalt","nameLocation":"6304:17:122","nodeType":"FunctionDefinition","overrides":{"id":46210,"nodeType":"OverrideSpecifier","overrides":[],"src":"6350:8:122"},"parameters":{"id":46209,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46208,"mutability":"mutable","name":"salt","nameLocation":"6330:4:122","nodeType":"VariableDeclaration","scope":46217,"src":"6322:12:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":46207,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6322:7:122","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6321:14:122"},"returnParameters":{"id":46213,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46212,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46217,"src":"6368:7:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":46211,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6368:7:122","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"6367:9:122"},"scope":46218,"src":"6295:110:122","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":46219,"src":"1300:5107:122","usedErrors":[234,1523,1526,4944,5825,40746,40749,40752],"usedEvents":[1517,1520]}],"src":"46:6362:122"},"id":122},"contracts/WeightedPoolFactory.sol":{"ast":{"absolutePath":"contracts/WeightedPoolFactory.sol","exportedSymbols":{"BasePoolFactory":[5283],"IPoolVersion":[253],"IVault":[3111],"LiquidityManagement":[4580],"PoolRoleAccounts":[4677],"TokenConfig":[4694],"Version":[7482],"WeightedPool":[45841],"WeightedPoolFactory":[46360]},"id":46361,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":46220,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:123"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IPoolVersion.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IPoolVersion.sol","id":46222,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":46361,"sourceUnit":254,"src":"72:110:123","symbolAliases":[{"foreign":{"id":46221,"name":"IPoolVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":253,"src":"81:12:123","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":46224,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":46361,"sourceUnit":3112,"src":"183:81:123","symbolAliases":[{"foreign":{"id":46223,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"192:6:123","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":46228,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":46361,"sourceUnit":4872,"src":"265:141:123","symbolAliases":[{"foreign":{"id":46225,"name":"TokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4694,"src":"278:11:123","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":46226,"name":"PoolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4677,"src":"295:16:123","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":46227,"name":"LiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4580,"src":"317:19:123","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-pool-utils/contracts/BasePoolFactory.sol","file":"@balancer-labs/v3-pool-utils/contracts/BasePoolFactory.sol","id":46230,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":46361,"sourceUnit":5284,"src":"408:93:123","symbolAliases":[{"foreign":{"id":46229,"name":"BasePoolFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5283,"src":"417:15:123","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","id":46232,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":46361,"sourceUnit":7483,"src":"502:89:123","symbolAliases":[{"foreign":{"id":46231,"name":"Version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7482,"src":"511:7:123","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/WeightedPool.sol","file":"./WeightedPool.sol","id":46234,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":46361,"sourceUnit":45842,"src":"593:50:123","symbolAliases":[{"foreign":{"id":46233,"name":"WeightedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45841,"src":"602:12:123","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":46236,"name":"IPoolVersion","nameLocations":["823:12:123"],"nodeType":"IdentifierPath","referencedDeclaration":253,"src":"823:12:123"},"id":46237,"nodeType":"InheritanceSpecifier","src":"823:12:123"},{"baseName":{"id":46238,"name":"BasePoolFactory","nameLocations":["837:15:123"],"nodeType":"IdentifierPath","referencedDeclaration":5283,"src":"837:15:123"},"id":46239,"nodeType":"InheritanceSpecifier","src":"837:15:123"},{"baseName":{"id":46240,"name":"Version","nameLocations":["854:7:123"],"nodeType":"IdentifierPath","referencedDeclaration":7482,"src":"854:7:123"},"id":46241,"nodeType":"InheritanceSpecifier","src":"854:7:123"}],"canonicalName":"WeightedPoolFactory","contractDependencies":[45841],"contractKind":"contract","documentation":{"id":46235,"nodeType":"StructuredDocumentation","src":"645:145:123","text":" @notice General Weighted Pool factory\n @dev This is the most general factory, which allows up to eight tokens and arbitrary weights."},"fullyImplemented":true,"id":46360,"linearizedBaseContracts":[46360,7482,273,5283,5892,19387,5786,5498,1579,243,253],"name":"WeightedPoolFactory","nameLocation":"800:19:123","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":46243,"mutability":"mutable","name":"_poolVersion","nameLocation":"883:12:123","nodeType":"VariableDeclaration","scope":46360,"src":"868:27:123","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":46242,"name":"string","nodeType":"ElementaryTypeName","src":"868:6:123","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"body":{"id":46270,"nodeType":"Block","src":"1152:43:123","statements":[{"expression":{"id":46268,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46266,"name":"_poolVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46243,"src":"1162:12:123","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":46267,"name":"poolVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46252,"src":"1177:11:123","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"1162:26:123","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":46269,"nodeType":"ExpressionStatement","src":"1162:26:123"}]},"id":46271,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":46255,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46246,"src":"1067:5:123","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},{"id":46256,"name":"pauseWindowDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46248,"src":"1074:19:123","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"expression":{"arguments":[{"id":46258,"name":"WeightedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45841,"src":"1100:12:123","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WeightedPool_$45841_$","typeString":"type(contract WeightedPool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_WeightedPool_$45841_$","typeString":"type(contract WeightedPool)"}],"id":46257,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"1095:4:123","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":46259,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1095:18:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_WeightedPool_$45841","typeString":"type(contract WeightedPool)"}},"id":46260,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1114:12:123","memberName":"creationCode","nodeType":"MemberAccess","src":"1095:31:123","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":46261,"kind":"baseConstructorSpecifier","modifierName":{"id":46254,"name":"BasePoolFactory","nameLocations":["1051:15:123"],"nodeType":"IdentifierPath","referencedDeclaration":5283,"src":"1051:15:123"},"nodeType":"ModifierInvocation","src":"1051:76:123"},{"arguments":[{"id":46263,"name":"factoryVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46250,"src":"1136:14:123","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":46264,"kind":"baseConstructorSpecifier","modifierName":{"id":46262,"name":"Version","nameLocations":["1128:7:123"],"nodeType":"IdentifierPath","referencedDeclaration":7482,"src":"1128:7:123"},"nodeType":"ModifierInvocation","src":"1128:23:123"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":46253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46246,"mutability":"mutable","name":"vault","nameLocation":"930:5:123","nodeType":"VariableDeclaration","scope":46271,"src":"923:12:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":46245,"nodeType":"UserDefinedTypeName","pathNode":{"id":46244,"name":"IVault","nameLocations":["923:6:123"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"923:6:123"},"referencedDeclaration":3111,"src":"923:6:123","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":46248,"mutability":"mutable","name":"pauseWindowDuration","nameLocation":"952:19:123","nodeType":"VariableDeclaration","scope":46271,"src":"945:26:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":46247,"name":"uint32","nodeType":"ElementaryTypeName","src":"945:6:123","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":46250,"mutability":"mutable","name":"factoryVersion","nameLocation":"995:14:123","nodeType":"VariableDeclaration","scope":46271,"src":"981:28:123","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":46249,"name":"string","nodeType":"ElementaryTypeName","src":"981:6:123","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":46252,"mutability":"mutable","name":"poolVersion","nameLocation":"1033:11:123","nodeType":"VariableDeclaration","scope":46271,"src":"1019:25:123","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":46251,"name":"string","nodeType":"ElementaryTypeName","src":"1019:6:123","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"913:137:123"},"returnParameters":{"id":46265,"nodeType":"ParameterList","parameters":[],"src":"1152:0:123"},"scope":46360,"src":"902:293:123","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[252],"body":{"id":46279,"nodeType":"Block","src":"1298:36:123","statements":[{"expression":{"id":46277,"name":"_poolVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46243,"src":"1315:12:123","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":46276,"id":46278,"nodeType":"Return","src":"1308:19:123"}]},"documentation":{"id":46272,"nodeType":"StructuredDocumentation","src":"1201:28:123","text":"@inheritdoc IPoolVersion"},"functionSelector":"3f819b6f","id":46280,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolVersion","nameLocation":"1243:14:123","nodeType":"FunctionDefinition","parameters":{"id":46273,"nodeType":"ParameterList","parameters":[],"src":"1257:2:123"},"returnParameters":{"id":46276,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46275,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46280,"src":"1283:13:123","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":46274,"name":"string","nodeType":"ElementaryTypeName","src":"1283:6:123","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1282:15:123"},"scope":46360,"src":"1234:100:123","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":46358,"nodeType":"Block","src":"2611:1010:123","statements":[{"assignments":[46312],"declarations":[{"constant":false,"id":46312,"mutability":"mutable","name":"liquidityManagement","nameLocation":"2648:19:123","nodeType":"VariableDeclaration","scope":46358,"src":"2621:46:123","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":46311,"nodeType":"UserDefinedTypeName","pathNode":{"id":46310,"name":"LiquidityManagement","nameLocations":["2621:19:123"],"nodeType":"IdentifierPath","referencedDeclaration":4580,"src":"2621:19:123"},"referencedDeclaration":4580,"src":"2621:19:123","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"id":46315,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":46313,"name":"getDefaultLiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5282,"src":"2670:29:123","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_LiquidityManagement_$4580_memory_ptr_$","typeString":"function () pure returns (struct LiquidityManagement memory)"}},"id":46314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2670:31:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}},"nodeType":"VariableDeclarationStatement","src":"2621:80:123"},{"expression":{"id":46320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":46316,"name":"liquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46312,"src":"2711:19:123","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}},"id":46318,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2731:14:123","memberName":"enableDonation","nodeType":"MemberAccess","referencedDeclaration":4579,"src":"2711:34:123","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":46319,"name":"enableDonation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46301,"src":"2748:14:123","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2711:51:123","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":46321,"nodeType":"ExpressionStatement","src":"2711:51:123"},{"expression":{"id":46326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":46322,"name":"liquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46312,"src":"2887:19:123","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}},"id":46324,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"2907:26:123","memberName":"disableUnbalancedLiquidity","nodeType":"MemberAccess","referencedDeclaration":4573,"src":"2887:46:123","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":46325,"name":"disableUnbalancedLiquidity","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46303,"src":"2936:26:123","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2887:75:123","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":46327,"nodeType":"ExpressionStatement","src":"2887:75:123"},{"expression":{"id":46346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46328,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46308,"src":"2973:4:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"id":46334,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46283,"src":"3084:4:123","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":46335,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46285,"src":"3118:6:123","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"expression":{"id":46336,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46289,"src":"3157:6:123","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":46337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3164:6:123","memberName":"length","nodeType":"MemberAccess","src":"3157:13:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":46338,"name":"normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46292,"src":"3211:17:123","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":46339,"name":"_poolVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46243,"src":"3259:12:123","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}],"expression":{"id":46332,"name":"WeightedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45841,"src":"3029:12:123","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WeightedPool_$45841_$","typeString":"type(contract WeightedPool)"}},"id":46333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3042:13:123","memberName":"NewPoolParams","nodeType":"MemberAccess","referencedDeclaration":45139,"src":"3029:26:123","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_NewPoolParams_$45139_storage_ptr_$","typeString":"type(struct WeightedPool.NewPoolParams storage pointer)"}},"id":46340,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["3078:4:123","3110:6:123","3146:9:123","3192:17:123","3250:7:123"],"names":["name","symbol","numTokens","normalizedWeights","version"],"nodeType":"FunctionCall","src":"3029:261:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_NewPoolParams_$45139_memory_ptr","typeString":"struct WeightedPool.NewPoolParams memory"}},{"arguments":[],"expression":{"argumentTypes":[],"id":46341,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19373,"src":"3308:8:123","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$3111_$","typeString":"function () view returns (contract IVault)"}},"id":46342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3308:10:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_NewPoolParams_$45139_memory_ptr","typeString":"struct WeightedPool.NewPoolParams memory"},{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}],"expression":{"id":46330,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3001:3:123","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":46331,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"3005:6:123","memberName":"encode","nodeType":"MemberAccess","src":"3001:10:123","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":46343,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3001:331:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":46344,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46305,"src":"3346:4:123","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":46329,"name":"_create","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5226,"src":"2980:7:123","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes memory,bytes32) returns (address)"}},"id":46345,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2980:380:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2973:387:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":46347,"nodeType":"ExpressionStatement","src":"2973:387:123"},{"expression":{"arguments":[{"id":46349,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46308,"src":"3407:4:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":46350,"name":"tokens","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46289,"src":"3425:6:123","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},{"id":46351,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46297,"src":"3445:17:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":46352,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3476:5:123","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":46353,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46295,"src":"3528:12:123","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},{"id":46354,"name":"poolHooksContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46299,"src":"3554:17:123","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":46355,"name":"liquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46312,"src":"3585:19:123","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}],"id":46348,"name":"_registerPoolWithVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5262,"src":"3371:22:123","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$_t_uint256_$_t_bool_$_t_struct$_PoolRoleAccounts_$4677_memory_ptr_$_t_address_$_t_struct$_LiquidityManagement_$4580_memory_ptr_$returns$__$","typeString":"function (address,struct TokenConfig memory[] memory,uint256,bool,struct PoolRoleAccounts memory,address,struct LiquidityManagement memory)"}},"id":46356,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3371:243:123","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":46357,"nodeType":"ExpressionStatement","src":"3371:243:123"}]},"documentation":{"id":46281,"nodeType":"StructuredDocumentation","src":"1340:865:123","text":" @notice Deploys a new `WeightedPool`.\n @dev Tokens must be sorted for pool registration.\n @param name The name of the pool\n @param symbol The symbol of the pool\n @param tokens An array of descriptors for the tokens the pool will manage\n @param normalizedWeights The pool weights (must add to FixedPoint.ONE)\n @param roleAccounts Addresses the Vault will allow to change certain pool settings\n @param swapFeePercentage Initial swap fee percentage\n @param poolHooksContract Contract that implements the hooks for the pool\n @param enableDonation If true, the pool will support the donation add liquidity mechanism\n @param disableUnbalancedLiquidity If true, only proportional add and remove liquidity are accepted\n @param salt The salt value that will be passed to create2 deployment"},"functionSelector":"fed4cdda","id":46359,"implemented":true,"kind":"function","modifiers":[],"name":"create","nameLocation":"2219:6:123","nodeType":"FunctionDefinition","parameters":{"id":46306,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46283,"mutability":"mutable","name":"name","nameLocation":"2249:4:123","nodeType":"VariableDeclaration","scope":46359,"src":"2235:18:123","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":46282,"name":"string","nodeType":"ElementaryTypeName","src":"2235:6:123","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":46285,"mutability":"mutable","name":"symbol","nameLocation":"2277:6:123","nodeType":"VariableDeclaration","scope":46359,"src":"2263:20:123","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":46284,"name":"string","nodeType":"ElementaryTypeName","src":"2263:6:123","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":46289,"mutability":"mutable","name":"tokens","nameLocation":"2314:6:123","nodeType":"VariableDeclaration","scope":46359,"src":"2293:27:123","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":46287,"nodeType":"UserDefinedTypeName","pathNode":{"id":46286,"name":"TokenConfig","nameLocations":["2293:11:123"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"2293:11:123"},"referencedDeclaration":4694,"src":"2293:11:123","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":46288,"nodeType":"ArrayTypeName","src":"2293:13:123","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":46292,"mutability":"mutable","name":"normalizedWeights","nameLocation":"2347:17:123","nodeType":"VariableDeclaration","scope":46359,"src":"2330:34:123","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":46290,"name":"uint256","nodeType":"ElementaryTypeName","src":"2330:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46291,"nodeType":"ArrayTypeName","src":"2330:9:123","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":46295,"mutability":"mutable","name":"roleAccounts","nameLocation":"2398:12:123","nodeType":"VariableDeclaration","scope":46359,"src":"2374:36:123","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":46294,"nodeType":"UserDefinedTypeName","pathNode":{"id":46293,"name":"PoolRoleAccounts","nameLocations":["2374:16:123"],"nodeType":"IdentifierPath","referencedDeclaration":4677,"src":"2374:16:123"},"referencedDeclaration":4677,"src":"2374:16:123","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"},{"constant":false,"id":46297,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"2428:17:123","nodeType":"VariableDeclaration","scope":46359,"src":"2420:25:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46296,"name":"uint256","nodeType":"ElementaryTypeName","src":"2420:7:123","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":46299,"mutability":"mutable","name":"poolHooksContract","nameLocation":"2463:17:123","nodeType":"VariableDeclaration","scope":46359,"src":"2455:25:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":46298,"name":"address","nodeType":"ElementaryTypeName","src":"2455:7:123","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":46301,"mutability":"mutable","name":"enableDonation","nameLocation":"2495:14:123","nodeType":"VariableDeclaration","scope":46359,"src":"2490:19:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":46300,"name":"bool","nodeType":"ElementaryTypeName","src":"2490:4:123","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":46303,"mutability":"mutable","name":"disableUnbalancedLiquidity","nameLocation":"2524:26:123","nodeType":"VariableDeclaration","scope":46359,"src":"2519:31:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":46302,"name":"bool","nodeType":"ElementaryTypeName","src":"2519:4:123","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":46305,"mutability":"mutable","name":"salt","nameLocation":"2568:4:123","nodeType":"VariableDeclaration","scope":46359,"src":"2560:12:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":46304,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2560:7:123","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2225:353:123"},"returnParameters":{"id":46309,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46308,"mutability":"mutable","name":"pool","nameLocation":"2605:4:123","nodeType":"VariableDeclaration","scope":46359,"src":"2597:12:123","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":46307,"name":"address","nodeType":"ElementaryTypeName","src":"2597:7:123","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2596:14:123"},"scope":46360,"src":"2210:1411:123","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":46361,"src":"791:2832:123","usedErrors":[234,1523,1526,4944,5825,40746,40749,40752],"usedEvents":[1517,1520]}],"src":"46:3578:123"},"id":123},"contracts/lbp/LBPool.sol":{"ast":{"absolutePath":"contracts/lbp/LBPool.sol","exportedSymbols":{"AddLiquidityKind":[4807],"AddLiquidityParams":[4823],"AfterSwapParams":[4801],"BaseHooks":[11349],"BufferWrapOrUnwrapParams":[4862],"FEE_BITLENGTH":[4865],"FEE_SCALING_FACTOR":[4868],"FixedPoint":[8208],"GradualValueChange":[47835],"HookFlags":[4627],"HooksConfig":[4651],"IBasePool":[1505],"IERC20":[40109],"IERC4626":[39833],"ILBPool":[161],"IRateProvider":[263],"ISenderGuard":[3041],"IVault":[3111],"IVaultErrors":[3768],"IWeightedPool":[228],"InputHelpers":[6193],"LBPParams":[84],"LBPool":[47381],"LBPoolDynamicData":[129],"LBPoolImmutableData":[109],"LBPoolLib":[47920],"LiquidityManagement":[4580],"MAX_FEE_PERCENTAGE":[4871],"Ownable":[39577],"Ownable2Step":[39663],"PoolConfig":[4605],"PoolConfigBits":[4582],"PoolData":[4729],"PoolRoleAccounts":[4677],"PoolSwapParams":[4772],"RemoveLiquidityKind":[4828],"RemoveLiquidityParams":[4844],"Rounding":[4732],"SwapKind":[4735],"SwapState":[4661],"TokenConfig":[4694],"TokenInfo":[4704],"TokenType":[4681],"VaultState":[4669],"VaultSwapParams":[4754],"WeightedPool":[45841],"WeightedPoolDynamicData":[197],"WeightedPoolImmutableData":[179],"WrappingDirection":[4847]},"id":47382,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":46362,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:124"},{"absolutePath":"@openzeppelin/contracts/access/Ownable2Step.sol","file":"@openzeppelin/contracts/access/Ownable2Step.sol","id":46364,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47382,"sourceUnit":39664,"src":"72:79:124","symbolAliases":[{"foreign":{"id":46363,"name":"Ownable2Step","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39663,"src":"81:12:124","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":46366,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47382,"sourceUnit":40110,"src":"152:72:124","symbolAliases":[{"foreign":{"id":46365,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"161:6:124","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/access/Ownable.sol","file":"@openzeppelin/contracts/access/Ownable.sol","id":46368,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47382,"sourceUnit":39578,"src":"225:69:124","symbolAliases":[{"foreign":{"id":46367,"name":"Ownable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39577,"src":"234:7:124","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/ISenderGuard.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/ISenderGuard.sol","id":46370,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47382,"sourceUnit":3042,"src":"296:93:124","symbolAliases":[{"foreign":{"id":46369,"name":"ISenderGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3041,"src":"305:12:124","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":46372,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47382,"sourceUnit":3769,"src":"390:93:124","symbolAliases":[{"foreign":{"id":46371,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"399:12:124","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol","id":46374,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47382,"sourceUnit":1506,"src":"484:87:124","symbolAliases":[{"foreign":{"id":46373,"name":"IBasePool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1505,"src":"493:9:124","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":46376,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47382,"sourceUnit":3112,"src":"572:81:124","symbolAliases":[{"foreign":{"id":46375,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"581:6:124","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol","file":"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol","id":46380,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47382,"sourceUnit":229,"src":"654:167:124","symbolAliases":[{"foreign":{"id":46377,"name":"IWeightedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":228,"src":"667:13:124","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":46378,"name":"WeightedPoolDynamicData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":197,"src":"686:23:124","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":46379,"name":"WeightedPoolImmutableData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":179,"src":"715:25:124","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/pool-weighted/ILBPool.sol","file":"@balancer-labs/v3-interfaces/contracts/pool-weighted/ILBPool.sol","id":46385,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47382,"sourceUnit":162,"src":"822:158:124","symbolAliases":[{"foreign":{"id":46381,"name":"ILBPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":161,"src":"835:7:124","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":46382,"name":"LBPoolImmutableData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":109,"src":"848:19:124","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":46383,"name":"LBPoolDynamicData","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":129,"src":"873:17:124","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":46384,"name":"LBPParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":84,"src":"896:9:124","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":46386,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47382,"sourceUnit":4872,"src":"981:69:124","symbolAliases":[],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","id":46388,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47382,"sourceUnit":6194,"src":"1052:99:124","symbolAliases":[{"foreign":{"id":46387,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6193,"src":"1061:12:124","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":46390,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47382,"sourceUnit":8209,"src":"1152:92:124","symbolAliases":[{"foreign":{"id":46389,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"1161:10:124","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/BaseHooks.sol","file":"@balancer-labs/v3-vault/contracts/BaseHooks.sol","id":46392,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47382,"sourceUnit":11350,"src":"1245:76:124","symbolAliases":[{"foreign":{"id":46391,"name":"BaseHooks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":11349,"src":"1254:9:124","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/lib/GradualValueChange.sol","file":"../lib/GradualValueChange.sol","id":46394,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47382,"sourceUnit":47836,"src":"1323:67:124","symbolAliases":[{"foreign":{"id":46393,"name":"GradualValueChange","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47835,"src":"1332:18:124","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/WeightedPool.sol","file":"../WeightedPool.sol","id":46396,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47382,"sourceUnit":45842,"src":"1391:51:124","symbolAliases":[{"foreign":{"id":46395,"name":"WeightedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45841,"src":"1400:12:124","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/lib/LBPoolLib.sol","file":"../lib/LBPoolLib.sol","id":46398,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47382,"sourceUnit":47921,"src":"1443:49:124","symbolAliases":[{"foreign":{"id":46397,"name":"LBPoolLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47920,"src":"1452:9:124","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":46400,"name":"ILBPool","nameLocations":["1864:7:124"],"nodeType":"IdentifierPath","referencedDeclaration":161,"src":"1864:7:124"},"id":46401,"nodeType":"InheritanceSpecifier","src":"1864:7:124"},{"baseName":{"id":46402,"name":"WeightedPool","nameLocations":["1873:12:124"],"nodeType":"IdentifierPath","referencedDeclaration":45841,"src":"1873:12:124"},"id":46403,"nodeType":"InheritanceSpecifier","src":"1873:12:124"},{"baseName":{"id":46404,"name":"Ownable2Step","nameLocations":["1887:12:124"],"nodeType":"IdentifierPath","referencedDeclaration":39663,"src":"1887:12:124"},"id":46405,"nodeType":"InheritanceSpecifier","src":"1887:12:124"},{"baseName":{"id":46406,"name":"BaseHooks","nameLocations":["1901:9:124"],"nodeType":"IdentifierPath","referencedDeclaration":11349,"src":"1901:9:124"},"id":46407,"nodeType":"InheritanceSpecifier","src":"1901:9:124"}],"canonicalName":"LBPool","contractDependencies":[],"contractKind":"contract","documentation":{"id":46399,"nodeType":"StructuredDocumentation","src":"1494:350:124","text":" @notice Weighted Pool with mutable weights, designed to support v3 Liquidity Bootstrapping.\n @dev Inheriting from WeightedPool is only slightly wasteful (setting 2 immutable weights and `_totalTokens`,\n which will not be used later), and it is tremendously helpful for pool validation and any potential future\n base contract changes."},"fullyImplemented":true,"id":47381,"internalFunctionIDs":{"7990":1,"8006":2,"9646":3,"9699":4},"linearizedBaseContracts":[47381,11349,2026,39663,39577,40736,45841,7482,273,5418,54,11106,28149,42162,42174,40907,42064,39858,263,40171,40135,40109,228,161,1505,3073,3057],"name":"LBPool","nameLocation":"1854:6:124","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":46410,"mutability":"constant","name":"_TWO_TOKENS","nameLocation":"2151:11:124","nodeType":"VariableDeclaration","scope":47381,"src":"2126:40:124","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46408,"name":"uint256","nodeType":"ElementaryTypeName","src":"2126:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"32","id":46409,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2165:1:124","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"visibility":"private"},{"constant":false,"id":46412,"mutability":"immutable","name":"_trustedRouter","nameLocation":"2318:14:124","nodeType":"VariableDeclaration","scope":47381,"src":"2292:40:124","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":46411,"name":"address","nodeType":"ElementaryTypeName","src":"2292:7:124","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"constant":false,"id":46415,"mutability":"immutable","name":"_projectToken","nameLocation":"2503:13:124","nodeType":"VariableDeclaration","scope":47381,"src":"2478:38:124","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":46414,"nodeType":"UserDefinedTypeName","pathNode":{"id":46413,"name":"IERC20","nameLocations":["2478:6:124"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"2478:6:124"},"referencedDeclaration":40109,"src":"2478:6:124","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"private"},{"constant":false,"id":46418,"mutability":"immutable","name":"_reserveToken","nameLocation":"2547:13:124","nodeType":"VariableDeclaration","scope":47381,"src":"2522:38:124","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":46417,"nodeType":"UserDefinedTypeName","pathNode":{"id":46416,"name":"IERC20","nameLocations":["2522:6:124"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"2522:6:124"},"referencedDeclaration":40109,"src":"2522:6:124","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"private"},{"constant":false,"id":46420,"mutability":"immutable","name":"_projectTokenIndex","nameLocation":"2593:18:124","nodeType":"VariableDeclaration","scope":47381,"src":"2567:44:124","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46419,"name":"uint256","nodeType":"ElementaryTypeName","src":"2567:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":46422,"mutability":"immutable","name":"_reserveTokenIndex","nameLocation":"2643:18:124","nodeType":"VariableDeclaration","scope":47381,"src":"2617:44:124","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46421,"name":"uint256","nodeType":"ElementaryTypeName","src":"2617:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":46424,"mutability":"immutable","name":"_startTime","nameLocation":"2694:10:124","nodeType":"VariableDeclaration","scope":47381,"src":"2668:36:124","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46423,"name":"uint256","nodeType":"ElementaryTypeName","src":"2668:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":46426,"mutability":"immutable","name":"_endTime","nameLocation":"2736:8:124","nodeType":"VariableDeclaration","scope":47381,"src":"2710:34:124","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46425,"name":"uint256","nodeType":"ElementaryTypeName","src":"2710:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":46428,"mutability":"immutable","name":"_projectTokenStartWeight","nameLocation":"2777:24:124","nodeType":"VariableDeclaration","scope":47381,"src":"2751:50:124","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46427,"name":"uint256","nodeType":"ElementaryTypeName","src":"2751:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":46430,"mutability":"immutable","name":"_reserveTokenStartWeight","nameLocation":"2833:24:124","nodeType":"VariableDeclaration","scope":47381,"src":"2807:50:124","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46429,"name":"uint256","nodeType":"ElementaryTypeName","src":"2807:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":46432,"mutability":"immutable","name":"_projectTokenEndWeight","nameLocation":"2889:22:124","nodeType":"VariableDeclaration","scope":47381,"src":"2863:48:124","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46431,"name":"uint256","nodeType":"ElementaryTypeName","src":"2863:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":46434,"mutability":"immutable","name":"_reserveTokenEndWeight","nameLocation":"2943:22:124","nodeType":"VariableDeclaration","scope":47381,"src":"2917:48:124","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46433,"name":"uint256","nodeType":"ElementaryTypeName","src":"2917:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"private"},{"constant":false,"id":46436,"mutability":"immutable","name":"_blockProjectTokenSwapsIn","nameLocation":"3126:25:124","nodeType":"VariableDeclaration","scope":47381,"src":"3103:48:124","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":46435,"name":"bool","nodeType":"ElementaryTypeName","src":"3103:4:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"private"},{"anonymous":false,"documentation":{"id":46437,"nodeType":"StructuredDocumentation","src":"3158:337:124","text":" @notice Emitted on deployment to record the sale parameters.\n @param startTime The starting timestamp of the update\n @param endTime The ending timestamp of the update\n @param startWeights The weights at the start of the update\n @param endWeights The final weights after the update is completed"},"eventSelector":"0f3631f9dab08169d1db21c6dc5f32536fb2b0a6b9bb5330d71c52132f968be0","id":46449,"name":"GradualWeightUpdateScheduled","nameLocation":"3506:28:124","nodeType":"EventDefinition","parameters":{"id":46448,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46439,"indexed":false,"mutability":"mutable","name":"startTime","nameLocation":"3552:9:124","nodeType":"VariableDeclaration","scope":46449,"src":"3544:17:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46438,"name":"uint256","nodeType":"ElementaryTypeName","src":"3544:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":46441,"indexed":false,"mutability":"mutable","name":"endTime","nameLocation":"3579:7:124","nodeType":"VariableDeclaration","scope":46449,"src":"3571:15:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46440,"name":"uint256","nodeType":"ElementaryTypeName","src":"3571:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":46444,"indexed":false,"mutability":"mutable","name":"startWeights","nameLocation":"3606:12:124","nodeType":"VariableDeclaration","scope":46449,"src":"3596:22:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":46442,"name":"uint256","nodeType":"ElementaryTypeName","src":"3596:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46443,"nodeType":"ArrayTypeName","src":"3596:9:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":46447,"indexed":false,"mutability":"mutable","name":"endWeights","nameLocation":"3638:10:124","nodeType":"VariableDeclaration","scope":46449,"src":"3628:20:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":46445,"name":"uint256","nodeType":"ElementaryTypeName","src":"3628:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46446,"nodeType":"ArrayTypeName","src":"3628:9:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"3534:120:124"},"src":"3500:155:124"},{"documentation":{"id":46450,"nodeType":"StructuredDocumentation","src":"3661:94:124","text":"@notice Swaps are disabled except during the sale (i.e., between and start and end times)."},"errorSelector":"fdf79845","id":46452,"name":"SwapsDisabled","nameLocation":"3766:13:124","nodeType":"ErrorDefinition","parameters":{"id":46451,"nodeType":"ParameterList","parameters":[],"src":"3779:2:124"},"src":"3760:22:124"},{"documentation":{"id":46453,"nodeType":"StructuredDocumentation","src":"3788:73:124","text":"@notice Removing liquidity is not allowed before the end of the sale."},"errorSelector":"f38b5770","id":46455,"name":"RemovingLiquidityNotAllowed","nameLocation":"3872:27:124","nodeType":"ErrorDefinition","parameters":{"id":46454,"nodeType":"ParameterList","parameters":[],"src":"3899:2:124"},"src":"3866:36:124"},{"documentation":{"id":46456,"nodeType":"StructuredDocumentation","src":"3908:111:124","text":"@notice The pool does not allow adding liquidity except during initialization and before the weight update."},"errorSelector":"3eee08c7","id":46458,"name":"AddingLiquidityNotAllowed","nameLocation":"4030:25:124","nodeType":"ErrorDefinition","parameters":{"id":46457,"nodeType":"ParameterList","parameters":[],"src":"4055:2:124"},"src":"4024:34:124"},{"documentation":{"id":46459,"nodeType":"StructuredDocumentation","src":"4064:89:124","text":"@notice THe LBP configuration prohibits selling the project token back into the pool."},"errorSelector":"1269438a","id":46461,"name":"SwapOfProjectTokenIn","nameLocation":"4164:20:124","nodeType":"ErrorDefinition","parameters":{"id":46460,"nodeType":"ParameterList","parameters":[],"src":"4184:2:124"},"src":"4158:29:124"},{"documentation":{"id":46462,"nodeType":"StructuredDocumentation","src":"4193:113:124","text":"@notice LBPs are WeightedPools by inheritance, but WeightedPool immutable/dynamic getters are wrong for LBPs."},"errorSelector":"d6234725","id":46464,"name":"NotImplemented","nameLocation":"4317:14:124","nodeType":"ErrorDefinition","parameters":{"id":46463,"nodeType":"ParameterList","parameters":[],"src":"4331:2:124"},"src":"4311:23:124"},{"body":{"id":46477,"nodeType":"Block","src":"4454:121:124","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46470,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":46467,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"4468:5:124","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":46468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4474:9:124","memberName":"timestamp","nodeType":"MemberAccess","src":"4468:15:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":46469,"name":"_startTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46424,"src":"4487:10:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4468:29:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":46475,"nodeType":"IfStatement","src":"4464:94:124","trueBody":{"id":46474,"nodeType":"Block","src":"4499:59:124","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":46471,"name":"AddingLiquidityNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46458,"src":"4520:25:124","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":46472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4520:27:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":46473,"nodeType":"RevertStatement","src":"4513:34:124"}]}},{"id":46476,"nodeType":"PlaceholderStatement","src":"4567:1:124"}]},"documentation":{"id":46465,"nodeType":"StructuredDocumentation","src":"4340:83:124","text":"@notice Only allow adding liquidity (including initialization) before the sale."},"id":46478,"name":"onlyBeforeSale","nameLocation":"4437:14:124","nodeType":"ModifierDefinition","parameters":{"id":46466,"nodeType":"ParameterList","parameters":[],"src":"4451:2:124"},"src":"4428:147:124","virtual":false,"visibility":"internal"},{"body":{"id":46644,"nodeType":"Block","src":"4882:1929:124","statements":[{"expression":{"id":46524,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46508,"name":"_startTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46424,"src":"5089:10:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":46511,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46485,"src":"5154:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":46512,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5164:9:124","memberName":"startTime","nodeType":"MemberAccess","referencedDeclaration":79,"src":"5154:19:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":46513,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46485,"src":"5187:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":46514,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5197:7:124","memberName":"endTime","nodeType":"MemberAccess","referencedDeclaration":81,"src":"5187:17:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":46515,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46485,"src":"5218:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":46516,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5228:23:124","memberName":"projectTokenStartWeight","nodeType":"MemberAccess","referencedDeclaration":71,"src":"5218:33:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":46517,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46485,"src":"5265:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":46518,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5275:23:124","memberName":"reserveTokenStartWeight","nodeType":"MemberAccess","referencedDeclaration":73,"src":"5265:33:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":46519,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46485,"src":"5312:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":46520,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5322:21:124","memberName":"projectTokenEndWeight","nodeType":"MemberAccess","referencedDeclaration":75,"src":"5312:31:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":46521,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46485,"src":"5357:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":46522,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5367:21:124","memberName":"reserveTokenEndWeight","nodeType":"MemberAccess","referencedDeclaration":77,"src":"5357:31:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":46509,"name":"LBPoolLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47920,"src":"5102:9:124","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LBPoolLib_$47920_$","typeString":"type(library LBPoolLib)"}},"id":46510,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5112:28:124","memberName":"verifyWeightUpdateParameters","nodeType":"MemberAccess","referencedDeclaration":47919,"src":"5102:38:124","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256,uint256,uint256) view returns (uint256)"}},"id":46523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5102:296:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5089:309:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46525,"nodeType":"ExpressionStatement","src":"5089:309:124"},{"expression":{"id":46529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46526,"name":"_endTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46426,"src":"5408:8:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":46527,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46485,"src":"5419:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":46528,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5429:7:124","memberName":"endTime","nodeType":"MemberAccess","referencedDeclaration":81,"src":"5419:17:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5408:28:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46530,"nodeType":"ExpressionStatement","src":"5408:28:124"},{"expression":{"id":46533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46531,"name":"_trustedRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46412,"src":"5554:14:124","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":46532,"name":"trustedRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46490,"src":"5571:13:124","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"5554:30:124","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":46534,"nodeType":"ExpressionStatement","src":"5554:30:124"},{"expression":{"id":46538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46535,"name":"_projectToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46415,"src":"5595:13:124","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":46536,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46485,"src":"5611:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":46537,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5621:12:124","memberName":"projectToken","nodeType":"MemberAccess","referencedDeclaration":66,"src":"5611:22:124","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"5595:38:124","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":46539,"nodeType":"ExpressionStatement","src":"5595:38:124"},{"expression":{"id":46543,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46540,"name":"_reserveToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46418,"src":"5643:13:124","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":46541,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46485,"src":"5659:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":46542,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5669:12:124","memberName":"reserveToken","nodeType":"MemberAccess","referencedDeclaration":69,"src":"5659:22:124","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"5643:38:124","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"id":46544,"nodeType":"ExpressionStatement","src":"5643:38:124"},{"expression":{"id":46548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46545,"name":"_blockProjectTokenSwapsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46436,"src":"5692:25:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":46546,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46485,"src":"5720:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":46547,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5730:24:124","memberName":"blockProjectTokenSwapsIn","nodeType":"MemberAccess","referencedDeclaration":83,"src":"5720:34:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5692:62:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":46549,"nodeType":"ExpressionStatement","src":"5692:62:124"},{"expression":{"id":46553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46550,"name":"_projectTokenStartWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46428,"src":"5765:24:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":46551,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46485,"src":"5792:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":46552,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5802:23:124","memberName":"projectTokenStartWeight","nodeType":"MemberAccess","referencedDeclaration":71,"src":"5792:33:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5765:60:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46554,"nodeType":"ExpressionStatement","src":"5765:60:124"},{"expression":{"id":46558,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46555,"name":"_reserveTokenStartWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46430,"src":"5835:24:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":46556,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46485,"src":"5862:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":46557,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5872:23:124","memberName":"reserveTokenStartWeight","nodeType":"MemberAccess","referencedDeclaration":73,"src":"5862:33:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5835:60:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46559,"nodeType":"ExpressionStatement","src":"5835:60:124"},{"expression":{"id":46563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46560,"name":"_projectTokenEndWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46432,"src":"5906:22:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":46561,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46485,"src":"5931:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":46562,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5941:21:124","memberName":"projectTokenEndWeight","nodeType":"MemberAccess","referencedDeclaration":75,"src":"5931:31:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5906:56:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46564,"nodeType":"ExpressionStatement","src":"5906:56:124"},{"expression":{"id":46568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46565,"name":"_reserveTokenEndWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46434,"src":"5972:22:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":46566,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46485,"src":"5997:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":46567,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6007:21:124","memberName":"reserveTokenEndWeight","nodeType":"MemberAccess","referencedDeclaration":77,"src":"5997:31:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5972:56:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46569,"nodeType":"ExpressionStatement","src":"5972:56:124"},{"expression":{"id":46585,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"id":46570,"name":"_projectTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46420,"src":"6040:18:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":46571,"name":"_reserveTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46422,"src":"6060:18:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":46572,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"6039:40:124","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"id":46577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":46573,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46485,"src":"6082:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":46574,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6092:12:124","memberName":"projectToken","nodeType":"MemberAccess","referencedDeclaration":66,"src":"6082:22:124","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":46575,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46485,"src":"6107:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":46576,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6117:12:124","memberName":"reserveToken","nodeType":"MemberAccess","referencedDeclaration":69,"src":"6107:22:124","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"6082:47:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"components":[{"hexValue":"31","id":46581,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6142:1:124","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},{"hexValue":"30","id":46582,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6145:1:124","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":46583,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"6141:6:124","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_1_by_1_$_t_rational_0_by_1_$","typeString":"tuple(int_const 1,int_const 0)"}},"id":46584,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"6082:65:124","trueExpression":{"components":[{"hexValue":"30","id":46578,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6133:1:124","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"31","id":46579,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6136:1:124","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"id":46580,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"6132:6:124","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_rational_1_by_1_$","typeString":"tuple(int_const 0,int_const 1)"}},"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint8_$_t_uint8_$","typeString":"tuple(uint8,uint8)"}},"src":"6039:108:124","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":46586,"nodeType":"ExpressionStatement","src":"6039:108:124"},{"assignments":[46591],"declarations":[{"constant":false,"id":46591,"mutability":"mutable","name":"startWeights","nameLocation":"6243:12:124","nodeType":"VariableDeclaration","scope":46644,"src":"6226:29:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":46589,"name":"uint256","nodeType":"ElementaryTypeName","src":"6226:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46590,"nodeType":"ArrayTypeName","src":"6226:9:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":46597,"initialValue":{"arguments":[{"id":46595,"name":"_TWO_TOKENS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46410,"src":"6272:11:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":46594,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"6258:13:124","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":46592,"name":"uint256","nodeType":"ElementaryTypeName","src":"6262:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46593,"nodeType":"ArrayTypeName","src":"6262:9:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":46596,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6258:26:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"6226:58:124"},{"assignments":[46602],"declarations":[{"constant":false,"id":46602,"mutability":"mutable","name":"endWeights","nameLocation":"6311:10:124","nodeType":"VariableDeclaration","scope":46644,"src":"6294:27:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":46600,"name":"uint256","nodeType":"ElementaryTypeName","src":"6294:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46601,"nodeType":"ArrayTypeName","src":"6294:9:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":46608,"initialValue":{"arguments":[{"id":46606,"name":"_TWO_TOKENS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46410,"src":"6338:11:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":46605,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"6324:13:124","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":46603,"name":"uint256","nodeType":"ElementaryTypeName","src":"6328:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46604,"nodeType":"ArrayTypeName","src":"6328:9:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":46607,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6324:26:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"6294:56:124"},{"expression":{"id":46621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":46609,"name":"startWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46591,"src":"6361:12:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":46611,"indexExpression":{"id":46610,"name":"_projectTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46420,"src":"6374:18:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6361:32:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":46612,"name":"startWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46591,"src":"6395:12:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":46614,"indexExpression":{"id":46613,"name":"_reserveTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46422,"src":"6408:18:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6395:32:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":46615,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"6360:68:124","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"expression":{"id":46616,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46485,"src":"6445:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":46617,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6455:23:124","memberName":"projectTokenStartWeight","nodeType":"MemberAccess","referencedDeclaration":71,"src":"6445:33:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":46618,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46485,"src":"6492:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":46619,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6502:23:124","memberName":"reserveTokenStartWeight","nodeType":"MemberAccess","referencedDeclaration":73,"src":"6492:33:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":46620,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6431:104:124","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"6360:175:124","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":46622,"nodeType":"ExpressionStatement","src":"6360:175:124"},{"expression":{"id":46635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":46623,"name":"endWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46602,"src":"6546:10:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":46625,"indexExpression":{"id":46624,"name":"_projectTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46420,"src":"6557:18:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6546:30:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":46626,"name":"endWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46602,"src":"6578:10:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":46628,"indexExpression":{"id":46627,"name":"_reserveTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46422,"src":"6589:18:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6578:30:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":46629,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"6545:64:124","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"expression":{"id":46630,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46485,"src":"6626:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":46631,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6636:21:124","memberName":"projectTokenEndWeight","nodeType":"MemberAccess","referencedDeclaration":75,"src":"6626:31:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":46632,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46485,"src":"6671:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":46633,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6681:21:124","memberName":"reserveTokenEndWeight","nodeType":"MemberAccess","referencedDeclaration":77,"src":"6671:31:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":46634,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"6612:100:124","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"6545:167:124","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":46636,"nodeType":"ExpressionStatement","src":"6545:167:124"},{"eventCall":{"arguments":[{"id":46638,"name":"_startTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46424,"src":"6757:10:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":46639,"name":"_endTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46426,"src":"6769:8:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":46640,"name":"startWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46591,"src":"6779:12:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":46641,"name":"endWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46602,"src":"6793:10:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"id":46637,"name":"GradualWeightUpdateScheduled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46449,"src":"6728:28:124","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint256_$_t_uint256_$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$__$","typeString":"function (uint256,uint256,uint256[] memory,uint256[] memory)"}},"id":46642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6728:76:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":46643,"nodeType":"EmitStatement","src":"6723:81:124"}]},"id":46645,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"arguments":[{"id":46496,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46480,"src":"4815:4:124","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":46497,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46482,"src":"4821:6:124","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":46498,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46492,"src":"4829:7:124","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":46499,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46485,"src":"4838:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}],"id":46495,"name":"_buildWeightedPoolParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47380,"src":"4790:24:124","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_struct$_LBPParams_$84_memory_ptr_$returns$_t_struct$_NewPoolParams_$45139_memory_ptr_$","typeString":"function (string memory,string memory,string memory,struct LBPParams memory) pure returns (struct WeightedPool.NewPoolParams memory)"}},"id":46500,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4790:58:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_NewPoolParams_$45139_memory_ptr","typeString":"struct WeightedPool.NewPoolParams memory"}},{"id":46501,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46488,"src":"4850:5:124","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"id":46502,"kind":"baseConstructorSpecifier","modifierName":{"id":46494,"name":"WeightedPool","nameLocations":["4777:12:124"],"nodeType":"IdentifierPath","referencedDeclaration":45841,"src":"4777:12:124"},"nodeType":"ModifierInvocation","src":"4777:79:124"},{"arguments":[{"expression":{"id":46504,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46485,"src":"4865:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":46505,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4875:5:124","memberName":"owner","nodeType":"MemberAccess","referencedDeclaration":63,"src":"4865:15:124","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":46506,"kind":"baseConstructorSpecifier","modifierName":{"id":46503,"name":"Ownable","nameLocations":["4857:7:124"],"nodeType":"IdentifierPath","referencedDeclaration":39577,"src":"4857:7:124"},"nodeType":"ModifierInvocation","src":"4857:24:124"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":46493,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46480,"mutability":"mutable","name":"name","nameLocation":"4616:4:124","nodeType":"VariableDeclaration","scope":46645,"src":"4602:18:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":46479,"name":"string","nodeType":"ElementaryTypeName","src":"4602:6:124","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":46482,"mutability":"mutable","name":"symbol","nameLocation":"4644:6:124","nodeType":"VariableDeclaration","scope":46645,"src":"4630:20:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":46481,"name":"string","nodeType":"ElementaryTypeName","src":"4630:6:124","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":46485,"mutability":"mutable","name":"lbpParams","nameLocation":"4677:9:124","nodeType":"VariableDeclaration","scope":46645,"src":"4660:26:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams"},"typeName":{"id":46484,"nodeType":"UserDefinedTypeName","pathNode":{"id":46483,"name":"LBPParams","nameLocations":["4660:9:124"],"nodeType":"IdentifierPath","referencedDeclaration":84,"src":"4660:9:124"},"referencedDeclaration":84,"src":"4660:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_storage_ptr","typeString":"struct LBPParams"}},"visibility":"internal"},{"constant":false,"id":46488,"mutability":"mutable","name":"vault","nameLocation":"4703:5:124","nodeType":"VariableDeclaration","scope":46645,"src":"4696:12:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":46487,"nodeType":"UserDefinedTypeName","pathNode":{"id":46486,"name":"IVault","nameLocations":["4696:6:124"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"4696:6:124"},"referencedDeclaration":3111,"src":"4696:6:124","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":46490,"mutability":"mutable","name":"trustedRouter","nameLocation":"4726:13:124","nodeType":"VariableDeclaration","scope":46645,"src":"4718:21:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":46489,"name":"address","nodeType":"ElementaryTypeName","src":"4718:7:124","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":46492,"mutability":"mutable","name":"version","nameLocation":"4763:7:124","nodeType":"VariableDeclaration","scope":46645,"src":"4749:21:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":46491,"name":"string","nodeType":"ElementaryTypeName","src":"4749:6:124","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"4592:184:124"},"returnParameters":{"id":46507,"nodeType":"ParameterList","parameters":[],"src":"4882:0:124"},"scope":47381,"src":"4581:2230:124","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":46653,"nodeType":"Block","src":"7087:38:124","statements":[{"expression":{"id":46651,"name":"_trustedRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46412,"src":"7104:14:124","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":46650,"id":46652,"nodeType":"Return","src":"7097:21:124"}]},"documentation":{"id":46646,"nodeType":"StructuredDocumentation","src":"6817:205:124","text":" @notice Returns the trusted router, which is used to initialize and seed the pool.\n @return trustedRouter Address of the trusted router (i.e., one that reliably reports the sender)"},"functionSelector":"af905d15","id":46654,"implemented":true,"kind":"function","modifiers":[],"name":"getTrustedRouter","nameLocation":"7036:16:124","nodeType":"FunctionDefinition","parameters":{"id":46647,"nodeType":"ParameterList","parameters":[],"src":"7052:2:124"},"returnParameters":{"id":46650,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46649,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46654,"src":"7078:7:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":46648,"name":"address","nodeType":"ElementaryTypeName","src":"7078:7:124","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7077:9:124"},"scope":47381,"src":"7027:98:124","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[153],"body":{"id":46663,"nodeType":"Block","src":"7217:37:124","statements":[{"expression":{"id":46661,"name":"_projectToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46415,"src":"7234:13:124","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"functionReturnParameters":46660,"id":46662,"nodeType":"Return","src":"7227:20:124"}]},"documentation":{"id":46655,"nodeType":"StructuredDocumentation","src":"7131:23:124","text":"@inheritdoc ILBPool"},"functionSelector":"4837c596","id":46664,"implemented":true,"kind":"function","modifiers":[],"name":"getProjectToken","nameLocation":"7168:15:124","nodeType":"FunctionDefinition","parameters":{"id":46656,"nodeType":"ParameterList","parameters":[],"src":"7183:2:124"},"returnParameters":{"id":46660,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46659,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46664,"src":"7209:6:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":46658,"nodeType":"UserDefinedTypeName","pathNode":{"id":46657,"name":"IERC20","nameLocations":["7209:6:124"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"7209:6:124"},"referencedDeclaration":40109,"src":"7209:6:124","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"7208:8:124"},"scope":47381,"src":"7159:95:124","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[160],"body":{"id":46673,"nodeType":"Block","src":"7346:37:124","statements":[{"expression":{"id":46671,"name":"_reserveToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46418,"src":"7363:13:124","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"functionReturnParameters":46670,"id":46672,"nodeType":"Return","src":"7356:20:124"}]},"documentation":{"id":46665,"nodeType":"StructuredDocumentation","src":"7260:23:124","text":"@inheritdoc ILBPool"},"functionSelector":"e594203d","id":46674,"implemented":true,"kind":"function","modifiers":[],"name":"getReserveToken","nameLocation":"7297:15:124","nodeType":"FunctionDefinition","parameters":{"id":46666,"nodeType":"ParameterList","parameters":[],"src":"7312:2:124"},"returnParameters":{"id":46670,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46669,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46674,"src":"7338:6:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":46668,"nodeType":"UserDefinedTypeName","pathNode":{"id":46667,"name":"IERC20","nameLocations":["7338:6:124"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"7338:6:124"},"referencedDeclaration":40109,"src":"7338:6:124","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"7337:8:124"},"scope":47381,"src":"7288:95:124","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":46736,"nodeType":"Block","src":"8064:495:124","statements":[{"expression":{"id":46690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46688,"name":"startTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46678,"src":"8074:9:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":46689,"name":"_startTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46424,"src":"8086:10:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8074:22:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46691,"nodeType":"ExpressionStatement","src":"8074:22:124"},{"expression":{"id":46694,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46692,"name":"endTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46680,"src":"8106:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":46693,"name":"_endTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46426,"src":"8116:8:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8106:18:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46695,"nodeType":"ExpressionStatement","src":"8106:18:124"},{"expression":{"id":46702,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46696,"name":"startWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46683,"src":"8135:12:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":46700,"name":"_TWO_TOKENS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46410,"src":"8164:11:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":46699,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"8150:13:124","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":46697,"name":"uint256","nodeType":"ElementaryTypeName","src":"8154:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46698,"nodeType":"ArrayTypeName","src":"8154:9:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":46701,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8150:26:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"8135:41:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":46703,"nodeType":"ExpressionStatement","src":"8135:41:124"},{"expression":{"id":46714,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":46704,"name":"startWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46683,"src":"8187:12:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":46706,"indexExpression":{"id":46705,"name":"_projectTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46420,"src":"8200:18:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8187:32:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":46707,"name":"startWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46683,"src":"8221:12:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":46709,"indexExpression":{"id":46708,"name":"_reserveTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46422,"src":"8234:18:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8221:32:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":46710,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"8186:68:124","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"id":46711,"name":"_projectTokenStartWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46428,"src":"8271:24:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":46712,"name":"_reserveTokenStartWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46430,"src":"8309:24:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":46713,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8257:86:124","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"8186:157:124","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":46715,"nodeType":"ExpressionStatement","src":"8186:157:124"},{"expression":{"id":46722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":46716,"name":"endWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46686,"src":"8354:10:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":46720,"name":"_TWO_TOKENS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46410,"src":"8381:11:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":46719,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"8367:13:124","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":46717,"name":"uint256","nodeType":"ElementaryTypeName","src":"8371:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46718,"nodeType":"ArrayTypeName","src":"8371:9:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":46721,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8367:26:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"8354:39:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":46723,"nodeType":"ExpressionStatement","src":"8354:39:124"},{"expression":{"id":46734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"baseExpression":{"id":46724,"name":"endWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46686,"src":"8404:10:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":46726,"indexExpression":{"id":46725,"name":"_projectTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46420,"src":"8415:18:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8404:30:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":46727,"name":"endWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46686,"src":"8436:10:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":46729,"indexExpression":{"id":46728,"name":"_reserveTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46422,"src":"8447:18:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"8436:30:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":46730,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"8403:64:124","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"components":[{"id":46731,"name":"_projectTokenEndWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46432,"src":"8484:22:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":46732,"name":"_reserveTokenEndWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46434,"src":"8520:22:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":46733,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8470:82:124","typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint256_$_t_uint256_$","typeString":"tuple(uint256,uint256)"}},"src":"8403:149:124","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":46735,"nodeType":"ExpressionStatement","src":"8403:149:124"}]},"documentation":{"id":46675,"nodeType":"StructuredDocumentation","src":"7389:485:124","text":" @notice Return start time, end time, and endWeights as an array.\n @dev Current weights should be retrieved via `getNormalizedWeights()`.\n @return startTime The starting timestamp of any ongoing weight change\n @return endTime The ending timestamp of any ongoing weight change\n @return startWeights The \"initial\" weights, sorted in token registration order\n @return endWeights The \"destination\" weights, sorted in token registration order"},"functionSelector":"7beed220","id":46737,"implemented":true,"kind":"function","modifiers":[],"name":"getGradualWeightUpdateParams","nameLocation":"7888:28:124","nodeType":"FunctionDefinition","parameters":{"id":46676,"nodeType":"ParameterList","parameters":[],"src":"7916:2:124"},"returnParameters":{"id":46687,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46678,"mutability":"mutable","name":"startTime","nameLocation":"7972:9:124","nodeType":"VariableDeclaration","scope":46737,"src":"7964:17:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46677,"name":"uint256","nodeType":"ElementaryTypeName","src":"7964:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":46680,"mutability":"mutable","name":"endTime","nameLocation":"7991:7:124","nodeType":"VariableDeclaration","scope":46737,"src":"7983:15:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":46679,"name":"uint256","nodeType":"ElementaryTypeName","src":"7983:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":46683,"mutability":"mutable","name":"startWeights","nameLocation":"8017:12:124","nodeType":"VariableDeclaration","scope":46737,"src":"8000:29:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":46681,"name":"uint256","nodeType":"ElementaryTypeName","src":"8000:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46682,"nodeType":"ArrayTypeName","src":"8000:9:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":46686,"mutability":"mutable","name":"endWeights","nameLocation":"8048:10:124","nodeType":"VariableDeclaration","scope":46737,"src":"8031:27:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":46684,"name":"uint256","nodeType":"ElementaryTypeName","src":"8031:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46685,"nodeType":"ArrayTypeName","src":"8031:9:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"7963:96:124"},"scope":47381,"src":"7879:680:124","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":46746,"nodeType":"Block","src":"9098:40:124","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":46743,"name":"_isSwapEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46763,"src":"9115:14:124","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":46744,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9115:16:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":46742,"id":46745,"nodeType":"Return","src":"9108:23:124"}]},"documentation":{"id":46738,"nodeType":"StructuredDocumentation","src":"8565:474:124","text":" @notice Indicate whether or not swaps are enabled for this pool.\n @dev For LBPs, swaps are enabled during the token sale, between the start and end times. Note that this does\n not check whether the pool or Vault is paused, which can only happen through governance action. This can be\n checked using `getPoolConfig` on the Vault, or by calling `getLBPoolDynamicData` here.\n @return swapEnabled True if the sale is in progress"},"functionSelector":"351a964d","id":46747,"implemented":true,"kind":"function","modifiers":[],"name":"isSwapEnabled","nameLocation":"9053:13:124","nodeType":"FunctionDefinition","parameters":{"id":46739,"nodeType":"ParameterList","parameters":[],"src":"9066:2:124"},"returnParameters":{"id":46742,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46741,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46747,"src":"9092:4:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":46740,"name":"bool","nodeType":"ElementaryTypeName","src":"9092:4:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9091:6:124"},"scope":47381,"src":"9044:94:124","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":46762,"nodeType":"Block","src":"9199:84:124","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":46760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":46752,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"9216:5:124","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":46753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9222:9:124","memberName":"timestamp","nodeType":"MemberAccess","src":"9216:15:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":46754,"name":"_startTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46424,"src":"9235:10:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9216:29:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":46759,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":46756,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"9249:5:124","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":46757,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9255:9:124","memberName":"timestamp","nodeType":"MemberAccess","src":"9249:15:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":46758,"name":"_endTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46426,"src":"9268:8:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9249:27:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9216:60:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":46751,"id":46761,"nodeType":"Return","src":"9209:67:124"}]},"id":46763,"implemented":true,"kind":"function","modifiers":[],"name":"_isSwapEnabled","nameLocation":"9153:14:124","nodeType":"FunctionDefinition","parameters":{"id":46748,"nodeType":"ParameterList","parameters":[],"src":"9167:2:124"},"returnParameters":{"id":46751,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46750,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46763,"src":"9193:4:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":46749,"name":"bool","nodeType":"ElementaryTypeName","src":"9193:4:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9192:6:124"},"scope":47381,"src":"9144:139:124","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":46771,"nodeType":"Block","src":"9784:49:124","statements":[{"expression":{"id":46769,"name":"_blockProjectTokenSwapsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46436,"src":"9801:25:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":46768,"id":46770,"nodeType":"Return","src":"9794:32:124"}]},"documentation":{"id":46764,"nodeType":"StructuredDocumentation","src":"9289:422:124","text":" @notice Indicate whether project tokens can be sold back into the pool.\n @dev Note that theoretically, anyone holding project tokens could create a new pool alongside the LBP that did\n allow \"selling\" project tokens. This restriction only applies to the primary LBP.\n @return isProjectTokenSwapInBlocked If true, acquired project tokens cannot be traded for reserve in this pool"},"functionSelector":"95146efb","id":46772,"implemented":true,"kind":"function","modifiers":[],"name":"isProjectTokenSwapInBlocked","nameLocation":"9725:27:124","nodeType":"FunctionDefinition","parameters":{"id":46765,"nodeType":"ParameterList","parameters":[],"src":"9752:2:124"},"returnParameters":{"id":46768,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46767,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46772,"src":"9778:4:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":46766,"name":"bool","nodeType":"ElementaryTypeName","src":"9778:4:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"9777:6:124"},"scope":47381,"src":"9716:117:124","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[45789],"body":{"id":46783,"nodeType":"Block","src":"10164:40:124","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":46780,"name":"NotImplemented","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46464,"src":"10181:14:124","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":46781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10181:16:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":46782,"nodeType":"RevertStatement","src":"10174:23:124"}]},"documentation":{"id":46773,"nodeType":"StructuredDocumentation","src":"9839:218:124","text":" @notice Not implemented; reverts unconditionally.\n @dev This is because the LBP dynamic data also includes the weights, so overriding this would be incomplete\n and potentially misleading."},"functionSelector":"c0bc6f33","id":46784,"implemented":true,"kind":"function","modifiers":[],"name":"getWeightedPoolDynamicData","nameLocation":"10071:26:124","nodeType":"FunctionDefinition","overrides":{"id":46775,"nodeType":"OverrideSpecifier","overrides":[],"src":"10114:8:124"},"parameters":{"id":46774,"nodeType":"ParameterList","parameters":[],"src":"10097:2:124"},"returnParameters":{"id":46779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46778,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46784,"src":"10132:30:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_WeightedPoolDynamicData_$197_memory_ptr","typeString":"struct WeightedPoolDynamicData"},"typeName":{"id":46777,"nodeType":"UserDefinedTypeName","pathNode":{"id":46776,"name":"WeightedPoolDynamicData","nameLocations":["10132:23:124"],"nodeType":"IdentifierPath","referencedDeclaration":197,"src":"10132:23:124"},"referencedDeclaration":197,"src":"10132:23:124","typeDescriptions":{"typeIdentifier":"t_struct$_WeightedPoolDynamicData_$197_storage_ptr","typeString":"struct WeightedPoolDynamicData"}},"visibility":"internal"}],"src":"10131:32:124"},"scope":47381,"src":"10062:142:124","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[45829],"body":{"id":46795,"nodeType":"Block","src":"10577:40:124","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":46792,"name":"NotImplemented","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46464,"src":"10594:14:124","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":46793,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10594:16:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":46794,"nodeType":"RevertStatement","src":"10587:23:124"}]},"documentation":{"id":46785,"nodeType":"StructuredDocumentation","src":"10210:256:124","text":" @notice Not implemented; reverts unconditionally.\n @dev This is because in the standard Weighted Pool, weights are included in the immutable data. In the LBP,\n weights can change, so they are instead part of the dynamic data."},"functionSelector":"53b79bd7","id":46796,"implemented":true,"kind":"function","modifiers":[],"name":"getWeightedPoolImmutableData","nameLocation":"10480:28:124","nodeType":"FunctionDefinition","overrides":{"id":46787,"nodeType":"OverrideSpecifier","overrides":[],"src":"10525:8:124"},"parameters":{"id":46786,"nodeType":"ParameterList","parameters":[],"src":"10508:2:124"},"returnParameters":{"id":46791,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46790,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":46796,"src":"10543:32:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_WeightedPoolImmutableData_$179_memory_ptr","typeString":"struct WeightedPoolImmutableData"},"typeName":{"id":46789,"nodeType":"UserDefinedTypeName","pathNode":{"id":46788,"name":"WeightedPoolImmutableData","nameLocations":["10543:25:124"],"nodeType":"IdentifierPath","referencedDeclaration":179,"src":"10543:25:124"},"referencedDeclaration":179,"src":"10543:25:124","typeDescriptions":{"typeIdentifier":"t_struct$_WeightedPoolImmutableData_$179_storage_ptr","typeString":"struct WeightedPoolImmutableData"}},"visibility":"internal"}],"src":"10542:34:124"},"scope":47381,"src":"10471:146:124","stateMutability":"pure","virtual":false,"visibility":"external"},{"baseFunctions":[139],"body":{"id":46882,"nodeType":"Block","src":"10746:589:124","statements":[{"expression":{"id":46814,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":46804,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46802,"src":"10756:4:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPoolDynamicData_$129_memory_ptr","typeString":"struct LBPoolDynamicData memory"}},"id":46806,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10761:20:124","memberName":"balancesLiveScaled18","nodeType":"MemberAccess","referencedDeclaration":113,"src":"10756:25:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":46811,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"10822:4:124","typeDescriptions":{"typeIdentifier":"t_contract$_LBPool_$47381","typeString":"contract LBPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_LBPool_$47381","typeString":"contract LBPool"}],"id":46810,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10814:7:124","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":46809,"name":"address","nodeType":"ElementaryTypeName","src":"10814:7:124","typeDescriptions":{}}},"id":46812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10814:13:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":46807,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"10784:6:124","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":46808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10791:22:124","memberName":"getCurrentLiveBalances","nodeType":"MemberAccess","referencedDeclaration":4195,"src":"10784:29:124","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) view external returns (uint256[] memory)"}},"id":46813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10784:44:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"10756:72:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":46815,"nodeType":"ExpressionStatement","src":"10756:72:124"},{"expression":{"id":46821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":46816,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46802,"src":"10838:4:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPoolDynamicData_$129_memory_ptr","typeString":"struct LBPoolDynamicData memory"}},"id":46818,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10843:17:124","memberName":"normalizedWeights","nodeType":"MemberAccess","referencedDeclaration":116,"src":"10838:22:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":46819,"name":"_getNormalizedWeights","nodeType":"Identifier","overloadedDeclarations":[47293],"referencedDeclaration":47293,"src":"10863:21:124","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function () view returns (uint256[] memory)"}},"id":46820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10863:23:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"10838:48:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":46822,"nodeType":"ExpressionStatement","src":"10838:48:124"},{"expression":{"id":46834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":46823,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46802,"src":"10896:4:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPoolDynamicData_$129_memory_ptr","typeString":"struct LBPoolDynamicData memory"}},"id":46825,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10901:23:124","memberName":"staticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":118,"src":"10896:28:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"components":[{"arguments":[{"id":46830,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"10970:4:124","typeDescriptions":{"typeIdentifier":"t_contract$_LBPool_$47381","typeString":"contract LBPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_LBPool_$47381","typeString":"contract LBPool"}],"id":46829,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10962:7:124","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":46828,"name":"address","nodeType":"ElementaryTypeName","src":"10962:7:124","typeDescriptions":{}}},"id":46831,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10962:13:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"id":46832,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"10961:15:124","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":46826,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"10927:6:124","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":46827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10934:26:124","memberName":"getStaticSwapFeePercentage","nodeType":"MemberAccess","referencedDeclaration":4333,"src":"10927:33:124","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":46833,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10927:50:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10896:81:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46835,"nodeType":"ExpressionStatement","src":"10896:81:124"},{"expression":{"id":46841,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":46836,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46802,"src":"10987:4:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPoolDynamicData_$129_memory_ptr","typeString":"struct LBPoolDynamicData memory"}},"id":46838,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"10992:11:124","memberName":"totalSupply","nodeType":"MemberAccess","referencedDeclaration":120,"src":"10987:16:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":46839,"name":"totalSupply","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":10821,"src":"11006:11:124","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":46840,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11006:13:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10987:32:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46842,"nodeType":"ExpressionStatement","src":"10987:32:124"},{"assignments":[46845],"declarations":[{"constant":false,"id":46845,"mutability":"mutable","name":"poolConfig","nameLocation":"11048:10:124","nodeType":"VariableDeclaration","scope":46882,"src":"11030:28:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig"},"typeName":{"id":46844,"nodeType":"UserDefinedTypeName","pathNode":{"id":46843,"name":"PoolConfig","nameLocations":["11030:10:124"],"nodeType":"IdentifierPath","referencedDeclaration":4605,"src":"11030:10:124"},"referencedDeclaration":4605,"src":"11030:10:124","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_storage_ptr","typeString":"struct PoolConfig"}},"visibility":"internal"}],"id":46853,"initialValue":{"arguments":[{"arguments":[{"id":46850,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"11090:4:124","typeDescriptions":{"typeIdentifier":"t_contract$_LBPool_$47381","typeString":"contract LBPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_LBPool_$47381","typeString":"contract LBPool"}],"id":46849,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11082:7:124","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":46848,"name":"address","nodeType":"ElementaryTypeName","src":"11082:7:124","typeDescriptions":{}}},"id":46851,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11082:13:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":46846,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"11061:6:124","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":46847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11068:13:124","memberName":"getPoolConfig","nodeType":"MemberAccess","referencedDeclaration":4204,"src":"11061:20:124","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_struct$_PoolConfig_$4605_memory_ptr_$","typeString":"function (address) view external returns (struct PoolConfig memory)"}},"id":46852,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11061:35:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig memory"}},"nodeType":"VariableDeclarationStatement","src":"11030:66:124"},{"expression":{"id":46859,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":46854,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46802,"src":"11106:4:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPoolDynamicData_$129_memory_ptr","typeString":"struct LBPoolDynamicData memory"}},"id":46856,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11111:17:124","memberName":"isPoolInitialized","nodeType":"MemberAccess","referencedDeclaration":122,"src":"11106:22:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":46857,"name":"poolConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46845,"src":"11131:10:124","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig memory"}},"id":46858,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11142:17:124","memberName":"isPoolInitialized","nodeType":"MemberAccess","referencedDeclaration":4600,"src":"11131:28:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11106:53:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":46860,"nodeType":"ExpressionStatement","src":"11106:53:124"},{"expression":{"id":46866,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":46861,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46802,"src":"11169:4:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPoolDynamicData_$129_memory_ptr","typeString":"struct LBPoolDynamicData memory"}},"id":46863,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11174:12:124","memberName":"isPoolPaused","nodeType":"MemberAccess","referencedDeclaration":124,"src":"11169:17:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":46864,"name":"poolConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46845,"src":"11189:10:124","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig memory"}},"id":46865,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11200:12:124","memberName":"isPoolPaused","nodeType":"MemberAccess","referencedDeclaration":4602,"src":"11189:23:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11169:43:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":46867,"nodeType":"ExpressionStatement","src":"11169:43:124"},{"expression":{"id":46873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":46868,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46802,"src":"11222:4:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPoolDynamicData_$129_memory_ptr","typeString":"struct LBPoolDynamicData memory"}},"id":46870,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11227:20:124","memberName":"isPoolInRecoveryMode","nodeType":"MemberAccess","referencedDeclaration":126,"src":"11222:25:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":46871,"name":"poolConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46845,"src":"11250:10:124","typeDescriptions":{"typeIdentifier":"t_struct$_PoolConfig_$4605_memory_ptr","typeString":"struct PoolConfig memory"}},"id":46872,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11261:20:124","memberName":"isPoolInRecoveryMode","nodeType":"MemberAccess","referencedDeclaration":4604,"src":"11250:31:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11222:59:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":46874,"nodeType":"ExpressionStatement","src":"11222:59:124"},{"expression":{"id":46880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":46875,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46802,"src":"11291:4:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPoolDynamicData_$129_memory_ptr","typeString":"struct LBPoolDynamicData memory"}},"id":46877,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11296:13:124","memberName":"isSwapEnabled","nodeType":"MemberAccess","referencedDeclaration":128,"src":"11291:18:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":46878,"name":"_isSwapEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46763,"src":"11312:14:124","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":46879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11312:16:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11291:37:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":46881,"nodeType":"ExpressionStatement","src":"11291:37:124"}]},"documentation":{"id":46797,"nodeType":"StructuredDocumentation","src":"10623:23:124","text":"@inheritdoc ILBPool"},"functionSelector":"e565c29e","id":46883,"implemented":true,"kind":"function","modifiers":[],"name":"getLBPoolDynamicData","nameLocation":"10660:20:124","nodeType":"FunctionDefinition","overrides":{"id":46799,"nodeType":"OverrideSpecifier","overrides":[],"src":"10697:8:124"},"parameters":{"id":46798,"nodeType":"ParameterList","parameters":[],"src":"10680:2:124"},"returnParameters":{"id":46803,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46802,"mutability":"mutable","name":"data","nameLocation":"10740:4:124","nodeType":"VariableDeclaration","scope":46883,"src":"10715:29:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LBPoolDynamicData_$129_memory_ptr","typeString":"struct LBPoolDynamicData"},"typeName":{"id":46801,"nodeType":"UserDefinedTypeName","pathNode":{"id":46800,"name":"LBPoolDynamicData","nameLocations":["10715:17:124"],"nodeType":"IdentifierPath","referencedDeclaration":129,"src":"10715:17:124"},"referencedDeclaration":129,"src":"10715:17:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPoolDynamicData_$129_storage_ptr","typeString":"struct LBPoolDynamicData"}},"visibility":"internal"}],"src":"10714:31:124"},"scope":47381,"src":"10651:684:124","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[146],"body":{"id":46998,"nodeType":"Block","src":"11468:795:124","statements":[{"expression":{"id":46901,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":46891,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46889,"src":"11478:4:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPoolImmutableData_$109_memory_ptr","typeString":"struct LBPoolImmutableData memory"}},"id":46893,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11483:6:124","memberName":"tokens","nodeType":"MemberAccess","referencedDeclaration":89,"src":"11478:11:124","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":46898,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"11521:4:124","typeDescriptions":{"typeIdentifier":"t_contract$_LBPool_$47381","typeString":"contract LBPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_LBPool_$47381","typeString":"contract LBPool"}],"id":46897,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11513:7:124","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":46896,"name":"address","nodeType":"ElementaryTypeName","src":"11513:7:124","typeDescriptions":{}}},"id":46899,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11513:13:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":46894,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"11492:6:124","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":46895,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11499:13:124","memberName":"getPoolTokens","nodeType":"MemberAccess","referencedDeclaration":4145,"src":"11492:20:124","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr_$","typeString":"function (address) view external returns (contract IERC20[] memory)"}},"id":46900,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11492:35:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"src":"11478:49:124","typeDescriptions":{"typeIdentifier":"t_array$_t_contract$_IERC20_$40109_$dyn_memory_ptr","typeString":"contract IERC20[] memory"}},"id":46902,"nodeType":"ExpressionStatement","src":"11478:49:124"},{"expression":{"id":46907,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":46903,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46889,"src":"11537:4:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPoolImmutableData_$109_memory_ptr","typeString":"struct LBPoolImmutableData memory"}},"id":46905,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11542:17:124","memberName":"projectTokenIndex","nodeType":"MemberAccess","referencedDeclaration":104,"src":"11537:22:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":46906,"name":"_projectTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46420,"src":"11562:18:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11537:43:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46908,"nodeType":"ExpressionStatement","src":"11537:43:124"},{"expression":{"id":46913,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":46909,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46889,"src":"11590:4:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPoolImmutableData_$109_memory_ptr","typeString":"struct LBPoolImmutableData memory"}},"id":46911,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11595:17:124","memberName":"reserveTokenIndex","nodeType":"MemberAccess","referencedDeclaration":106,"src":"11590:22:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":46912,"name":"_reserveTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46422,"src":"11615:18:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11590:43:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46914,"nodeType":"ExpressionStatement","src":"11590:43:124"},{"expression":{"id":46926,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"id":46915,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46889,"src":"11645:4:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPoolImmutableData_$109_memory_ptr","typeString":"struct LBPoolImmutableData memory"}},"id":46917,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11650:21:124","memberName":"decimalScalingFactors","nodeType":"MemberAccess","referencedDeclaration":92,"src":"11645:26:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},null],"id":46918,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"11644:30:124","typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$__$","typeString":"tuple(uint256[] memory,)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":46923,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"11710:4:124","typeDescriptions":{"typeIdentifier":"t_contract$_LBPool_$47381","typeString":"contract LBPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_LBPool_$47381","typeString":"contract LBPool"}],"id":46922,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11702:7:124","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":46921,"name":"address","nodeType":"ElementaryTypeName","src":"11702:7:124","typeDescriptions":{}}},"id":46924,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11702:13:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":46919,"name":"_vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":28110,"src":"11677:6:124","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"id":46920,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11684:17:124","memberName":"getPoolTokenRates","nodeType":"MemberAccess","referencedDeclaration":4157,"src":"11677:24:124","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (address) view external returns (uint256[] memory,uint256[] memory)"}},"id":46925,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11677:39:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"tuple(uint256[] memory,uint256[] memory)"}},"src":"11644:72:124","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":46927,"nodeType":"ExpressionStatement","src":"11644:72:124"},{"expression":{"id":46932,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":46928,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46889,"src":"11726:4:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPoolImmutableData_$109_memory_ptr","typeString":"struct LBPoolImmutableData memory"}},"id":46930,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11731:27:124","memberName":"isProjectTokenSwapInBlocked","nodeType":"MemberAccess","referencedDeclaration":108,"src":"11726:32:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":46931,"name":"_blockProjectTokenSwapsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46436,"src":"11761:25:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11726:60:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":46933,"nodeType":"ExpressionStatement","src":"11726:60:124"},{"expression":{"id":46938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":46934,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46889,"src":"11796:4:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPoolImmutableData_$109_memory_ptr","typeString":"struct LBPoolImmutableData memory"}},"id":46936,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11801:9:124","memberName":"startTime","nodeType":"MemberAccess","referencedDeclaration":100,"src":"11796:14:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":46937,"name":"_startTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46424,"src":"11813:10:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11796:27:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46939,"nodeType":"ExpressionStatement","src":"11796:27:124"},{"expression":{"id":46944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":46940,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46889,"src":"11833:4:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPoolImmutableData_$109_memory_ptr","typeString":"struct LBPoolImmutableData memory"}},"id":46942,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11838:7:124","memberName":"endTime","nodeType":"MemberAccess","referencedDeclaration":102,"src":"11833:12:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":46943,"name":"_endTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46426,"src":"11848:8:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11833:23:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46945,"nodeType":"ExpressionStatement","src":"11833:23:124"},{"expression":{"id":46954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":46946,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46889,"src":"11867:4:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPoolImmutableData_$109_memory_ptr","typeString":"struct LBPoolImmutableData memory"}},"id":46948,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"11872:12:124","memberName":"startWeights","nodeType":"MemberAccess","referencedDeclaration":95,"src":"11867:17:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":46952,"name":"_TWO_TOKENS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46410,"src":"11901:11:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":46951,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"11887:13:124","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":46949,"name":"uint256","nodeType":"ElementaryTypeName","src":"11891:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46950,"nodeType":"ArrayTypeName","src":"11891:9:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":46953,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11887:26:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"11867:46:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":46955,"nodeType":"ExpressionStatement","src":"11867:46:124"},{"expression":{"id":46962,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":46956,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46889,"src":"11923:4:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPoolImmutableData_$109_memory_ptr","typeString":"struct LBPoolImmutableData memory"}},"id":46959,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11928:12:124","memberName":"startWeights","nodeType":"MemberAccess","referencedDeclaration":95,"src":"11923:17:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":46960,"indexExpression":{"id":46958,"name":"_projectTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46420,"src":"11941:18:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11923:37:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":46961,"name":"_projectTokenStartWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46428,"src":"11963:24:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11923:64:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46963,"nodeType":"ExpressionStatement","src":"11923:64:124"},{"expression":{"id":46970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":46964,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46889,"src":"11997:4:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPoolImmutableData_$109_memory_ptr","typeString":"struct LBPoolImmutableData memory"}},"id":46967,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12002:12:124","memberName":"startWeights","nodeType":"MemberAccess","referencedDeclaration":95,"src":"11997:17:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":46968,"indexExpression":{"id":46966,"name":"_reserveTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46422,"src":"12015:18:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"11997:37:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":46969,"name":"_reserveTokenStartWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46430,"src":"12037:24:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11997:64:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46971,"nodeType":"ExpressionStatement","src":"11997:64:124"},{"expression":{"id":46980,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":46972,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46889,"src":"12072:4:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPoolImmutableData_$109_memory_ptr","typeString":"struct LBPoolImmutableData memory"}},"id":46974,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"12077:10:124","memberName":"endWeights","nodeType":"MemberAccess","referencedDeclaration":98,"src":"12072:15:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":46978,"name":"_TWO_TOKENS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46410,"src":"12104:11:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":46977,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"12090:13:124","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":46975,"name":"uint256","nodeType":"ElementaryTypeName","src":"12094:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46976,"nodeType":"ArrayTypeName","src":"12094:9:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":46979,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12090:26:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"12072:44:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":46981,"nodeType":"ExpressionStatement","src":"12072:44:124"},{"expression":{"id":46988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":46982,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46889,"src":"12126:4:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPoolImmutableData_$109_memory_ptr","typeString":"struct LBPoolImmutableData memory"}},"id":46985,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12131:10:124","memberName":"endWeights","nodeType":"MemberAccess","referencedDeclaration":98,"src":"12126:15:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":46986,"indexExpression":{"id":46984,"name":"_projectTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46420,"src":"12142:18:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12126:35:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":46987,"name":"_projectTokenEndWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46432,"src":"12164:22:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12126:60:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46989,"nodeType":"ExpressionStatement","src":"12126:60:124"},{"expression":{"id":46996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"id":46990,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46889,"src":"12196:4:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPoolImmutableData_$109_memory_ptr","typeString":"struct LBPoolImmutableData memory"}},"id":46993,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12201:10:124","memberName":"endWeights","nodeType":"MemberAccess","referencedDeclaration":98,"src":"12196:15:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":46994,"indexExpression":{"id":46992,"name":"_reserveTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46422,"src":"12212:18:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12196:35:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":46995,"name":"_reserveTokenEndWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46434,"src":"12234:22:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12196:60:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":46997,"nodeType":"ExpressionStatement","src":"12196:60:124"}]},"documentation":{"id":46884,"nodeType":"StructuredDocumentation","src":"11341:23:124","text":"@inheritdoc ILBPool"},"functionSelector":"0ca89848","id":46999,"implemented":true,"kind":"function","modifiers":[],"name":"getLBPoolImmutableData","nameLocation":"11378:22:124","nodeType":"FunctionDefinition","overrides":{"id":46886,"nodeType":"OverrideSpecifier","overrides":[],"src":"11417:8:124"},"parameters":{"id":46885,"nodeType":"ParameterList","parameters":[],"src":"11400:2:124"},"returnParameters":{"id":46890,"nodeType":"ParameterList","parameters":[{"constant":false,"id":46889,"mutability":"mutable","name":"data","nameLocation":"11462:4:124","nodeType":"VariableDeclaration","scope":46999,"src":"11435:31:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LBPoolImmutableData_$109_memory_ptr","typeString":"struct LBPoolImmutableData"},"typeName":{"id":46888,"nodeType":"UserDefinedTypeName","pathNode":{"id":46887,"name":"LBPoolImmutableData","nameLocations":["11435:19:124"],"nodeType":"IdentifierPath","referencedDeclaration":109,"src":"11435:19:124"},"referencedDeclaration":109,"src":"11435:19:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPoolImmutableData_$109_storage_ptr","typeString":"struct LBPoolImmutableData"}},"visibility":"internal"}],"src":"11434:33:124"},"scope":47381,"src":"11369:894:124","stateMutability":"view","virtual":false,"visibility":"external"},{"baseFunctions":[1504,45478],"body":{"id":47038,"nodeType":"Block","src":"12660:413:124","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":47016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":47013,"name":"_isSwapEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46763,"src":"12733:14:124","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_bool_$","typeString":"function () view returns (bool)"}},"id":47014,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12733:16:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"66616c7365","id":47015,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12753:5:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"12733:25:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":47021,"nodeType":"IfStatement","src":"12729:78:124","trueBody":{"id":47020,"nodeType":"Block","src":"12760:47:124","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":47017,"name":"SwapsDisabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46452,"src":"12781:13:124","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":47018,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12781:15:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":47019,"nodeType":"RevertStatement","src":"12774:22:124"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":47027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":47022,"name":"_blockProjectTokenSwapsIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46436,"src":"12905:25:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47026,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":47023,"name":"request","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47003,"src":"12934:7:124","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}},"id":47024,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12942:8:124","memberName":"indexOut","nodeType":"MemberAccess","referencedDeclaration":4767,"src":"12934:16:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":47025,"name":"_projectTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46420,"src":"12954:18:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12934:38:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12905:67:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":47032,"nodeType":"IfStatement","src":"12901:127:124","trueBody":{"id":47031,"nodeType":"Block","src":"12974:54:124","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":47028,"name":"SwapOfProjectTokenIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46461,"src":"12995:20:124","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":47029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12995:22:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":47030,"nodeType":"RevertStatement","src":"12988:29:124"}]}},{"expression":{"arguments":[{"id":47035,"name":"request","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47003,"src":"13058:7:124","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams memory"}],"expression":{"id":47033,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"13045:5:124","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_LBPool_$47381_$","typeString":"type(contract super LBPool)"}},"id":47034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13051:6:124","memberName":"onSwap","nodeType":"MemberAccess","referencedDeclaration":45478,"src":"13045:12:124","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_PoolSwapParams_$4772_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct PoolSwapParams memory) view returns (uint256)"}},"id":47036,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13045:21:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":47012,"id":47037,"nodeType":"Return","src":"13038:28:124"}]},"documentation":{"id":47000,"nodeType":"StructuredDocumentation","src":"12492:28:124","text":"@inheritdoc WeightedPool"},"functionSelector":"72c98186","id":47039,"implemented":true,"kind":"function","modifiers":[{"id":47009,"kind":"modifierInvocation","modifierName":{"id":47008,"name":"onlyVault","nameLocations":["12632:9:124"],"nodeType":"IdentifierPath","referencedDeclaration":28128,"src":"12632:9:124"},"nodeType":"ModifierInvocation","src":"12632:9:124"}],"name":"onSwap","nameLocation":"12534:6:124","nodeType":"FunctionDefinition","overrides":{"id":47007,"nodeType":"OverrideSpecifier","overrides":[{"id":47005,"name":"IBasePool","nameLocations":["12607:9:124"],"nodeType":"IdentifierPath","referencedDeclaration":1505,"src":"12607:9:124"},{"id":47006,"name":"WeightedPool","nameLocations":["12618:12:124"],"nodeType":"IdentifierPath","referencedDeclaration":45841,"src":"12618:12:124"}],"src":"12598:33:124"},"parameters":{"id":47004,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47003,"mutability":"mutable","name":"request","nameLocation":"12572:7:124","nodeType":"VariableDeclaration","scope":47039,"src":"12550:29:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_memory_ptr","typeString":"struct PoolSwapParams"},"typeName":{"id":47002,"nodeType":"UserDefinedTypeName","pathNode":{"id":47001,"name":"PoolSwapParams","nameLocations":["12550:14:124"],"nodeType":"IdentifierPath","referencedDeclaration":4772,"src":"12550:14:124"},"referencedDeclaration":4772,"src":"12550:14:124","typeDescriptions":{"typeIdentifier":"t_struct$_PoolSwapParams_$4772_storage_ptr","typeString":"struct PoolSwapParams"}},"visibility":"internal"}],"src":"12540:45:124"},"returnParameters":{"id":47012,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47011,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47039,"src":"12651:7:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47010,"name":"uint256","nodeType":"ElementaryTypeName","src":"12651:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12650:9:124"},"scope":47381,"src":"12525:548:124","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[11141],"body":{"id":47096,"nodeType":"Block","src":"13949:589:124","statements":[{"expression":{"arguments":[{"id":47062,"name":"_TWO_TOKENS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46410,"src":"14090:11:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":47063,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47048,"src":"14103:11:124","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":47064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14115:6:124","memberName":"length","nodeType":"MemberAccess","src":"14103:18:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":47059,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6193,"src":"14054:12:124","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_InputHelpers_$6193_$","typeString":"type(library InputHelpers)"}},"id":47061,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14067:22:124","memberName":"ensureInputLengthMatch","nodeType":"MemberAccess","referencedDeclaration":5926,"src":"14054:35:124","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (uint256,uint256) pure"}},"id":47065,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14054:68:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":47066,"nodeType":"ExpressionStatement","src":"14054:68:124"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":47081,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"},"id":47073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":47067,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47048,"src":"14323:11:124","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":47069,"indexExpression":{"hexValue":"30","id":47068,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14335:1:124","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14323:14:124","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":47070,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14338:9:124","memberName":"tokenType","nodeType":"MemberAccess","referencedDeclaration":4688,"src":"14323:24:124","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":47071,"name":"TokenType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4681,"src":"14351:9:124","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_TokenType_$4681_$","typeString":"type(enum TokenType)"}},"id":47072,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14361:8:124","memberName":"STANDARD","nodeType":"MemberAccess","referencedDeclaration":4679,"src":"14351:18:124","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"src":"14323:46:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"},"id":47080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"id":47074,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47048,"src":"14373:11:124","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":47076,"indexExpression":{"hexValue":"31","id":47075,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14385:1:124","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14373:14:124","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":47077,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14388:9:124","memberName":"tokenType","nodeType":"MemberAccess","referencedDeclaration":4688,"src":"14373:24:124","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":47078,"name":"TokenType","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4681,"src":"14401:9:124","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_TokenType_$4681_$","typeString":"type(enum TokenType)"}},"id":47079,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"14411:8:124","memberName":"STANDARD","nodeType":"MemberAccess","referencedDeclaration":4679,"src":"14401:18:124","typeDescriptions":{"typeIdentifier":"t_enum$_TokenType_$4681","typeString":"enum TokenType"}},"src":"14373:46:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14323:96:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":47088,"nodeType":"IfStatement","src":"14319:174:124","trueBody":{"id":47087,"nodeType":"Block","src":"14421:72:124","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":47082,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"14442:12:124","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3768_$","typeString":"type(contract IVaultErrors)"}},"id":47084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14455:25:124","memberName":"InvalidTokenConfiguration","nodeType":"MemberAccess","referencedDeclaration":3458,"src":"14442:38:124","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":47085,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14442:40:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":47086,"nodeType":"RevertStatement","src":"14435:47:124"}]}},{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":47094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":47089,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47044,"src":"14510:4:124","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":47092,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"14526:4:124","typeDescriptions":{"typeIdentifier":"t_contract$_LBPool_$47381","typeString":"contract LBPool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_LBPool_$47381","typeString":"contract LBPool"}],"id":47091,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14518:7:124","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":47090,"name":"address","nodeType":"ElementaryTypeName","src":"14518:7:124","typeDescriptions":{}}},"id":47093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14518:13:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"14510:21:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":47058,"id":47095,"nodeType":"Return","src":"14503:28:124"}]},"documentation":{"id":47040,"nodeType":"StructuredDocumentation","src":"13299:454:124","text":" @notice Hook to be executed when the pool is registered.\n @dev Returns true if registration was successful; false will revert with `HookRegistrationFailed`.\n @param pool Address of the pool (must be this contract for LBPs: the pool is also the hook)\n @param tokenConfig The token configuration of the pool being registered (e.g., type)\n @return success True if the hook allowed the registration, false otherwise"},"functionSelector":"0b89f182","id":47097,"implemented":true,"kind":"function","modifiers":[{"id":47055,"kind":"modifierInvocation","modifierName":{"id":47054,"name":"onlyVault","nameLocations":["13924:9:124"],"nodeType":"IdentifierPath","referencedDeclaration":28128,"src":"13924:9:124"},"nodeType":"ModifierInvocation","src":"13924:9:124"}],"name":"onRegister","nameLocation":"13767:10:124","nodeType":"FunctionDefinition","overrides":{"id":47053,"nodeType":"OverrideSpecifier","overrides":[],"src":"13915:8:124"},"parameters":{"id":47052,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47042,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47097,"src":"13787:7:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47041,"name":"address","nodeType":"ElementaryTypeName","src":"13787:7:124","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":47044,"mutability":"mutable","name":"pool","nameLocation":"13812:4:124","nodeType":"VariableDeclaration","scope":47097,"src":"13804:12:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47043,"name":"address","nodeType":"ElementaryTypeName","src":"13804:7:124","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":47048,"mutability":"mutable","name":"tokenConfig","nameLocation":"13847:11:124","nodeType":"VariableDeclaration","scope":47097,"src":"13826:32:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":47046,"nodeType":"UserDefinedTypeName","pathNode":{"id":47045,"name":"TokenConfig","nameLocations":["13826:11:124"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"13826:11:124"},"referencedDeclaration":4694,"src":"13826:11:124","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":47047,"nodeType":"ArrayTypeName","src":"13826:13:124","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"},{"constant":false,"id":47051,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47097,"src":"13868:28:124","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_calldata_ptr","typeString":"struct LiquidityManagement"},"typeName":{"id":47050,"nodeType":"UserDefinedTypeName","pathNode":{"id":47049,"name":"LiquidityManagement","nameLocations":["13868:19:124"],"nodeType":"IdentifierPath","referencedDeclaration":4580,"src":"13868:19:124"},"referencedDeclaration":4580,"src":"13868:19:124","typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_storage_ptr","typeString":"struct LiquidityManagement"}},"visibility":"internal"}],"src":"13777:125:124"},"returnParameters":{"id":47058,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47057,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47097,"src":"13943:4:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":47056,"name":"bool","nodeType":"ElementaryTypeName","src":"13943:4:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"13942:6:124"},"scope":47381,"src":"13758:780:124","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[11148],"body":{"id":47123,"nodeType":"Block","src":"14898:377:124","statements":[{"expression":{"id":47109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":47105,"name":"hookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47103,"src":"15017:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_memory_ptr","typeString":"struct HookFlags memory"}},"id":47107,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15027:26:124","memberName":"shouldCallBeforeInitialize","nodeType":"MemberAccess","referencedDeclaration":4610,"src":"15017:36:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":47108,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15056:4:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"15017:43:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":47110,"nodeType":"ExpressionStatement","src":"15017:43:124"},{"expression":{"id":47115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":47111,"name":"hookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47103,"src":"15070:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_memory_ptr","typeString":"struct HookFlags memory"}},"id":47113,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15080:28:124","memberName":"shouldCallBeforeAddLiquidity","nodeType":"MemberAccess","referencedDeclaration":4620,"src":"15070:38:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":47114,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15111:4:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"15070:45:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":47116,"nodeType":"ExpressionStatement","src":"15070:45:124"},{"expression":{"id":47121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":47117,"name":"hookFlags","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47103,"src":"15220:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_memory_ptr","typeString":"struct HookFlags memory"}},"id":47119,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"15230:31:124","memberName":"shouldCallBeforeRemoveLiquidity","nodeType":"MemberAccess","referencedDeclaration":4624,"src":"15220:41:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":47120,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15264:4:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"15220:48:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":47122,"nodeType":"ExpressionStatement","src":"15220:48:124"}]},"documentation":{"id":47098,"nodeType":"StructuredDocumentation","src":"14544:267:124","text":" @notice Return the HookFlags struct, which indicates which hooks this contract supports.\n @dev For each flag set to true, the Vault will call the corresponding hook.\n @return hookFlags Flags indicating which hooks are supported for LBPs"},"functionSelector":"d77153a7","id":47124,"implemented":true,"kind":"function","modifiers":[],"name":"getHookFlags","nameLocation":"14825:12:124","nodeType":"FunctionDefinition","overrides":{"id":47100,"nodeType":"OverrideSpecifier","overrides":[],"src":"14852:8:124"},"parameters":{"id":47099,"nodeType":"ParameterList","parameters":[],"src":"14837:2:124"},"returnParameters":{"id":47104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47103,"mutability":"mutable","name":"hookFlags","nameLocation":"14887:9:124","nodeType":"VariableDeclaration","scope":47124,"src":"14870:26:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_memory_ptr","typeString":"struct HookFlags"},"typeName":{"id":47102,"nodeType":"UserDefinedTypeName","pathNode":{"id":47101,"name":"HookFlags","nameLocations":["14870:9:124"],"nodeType":"IdentifierPath","referencedDeclaration":4627,"src":"14870:9:124"},"referencedDeclaration":4627,"src":"14870:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_HookFlags_$4627_storage_ptr","typeString":"struct HookFlags"}},"visibility":"internal"}],"src":"14869:28:124"},"scope":47381,"src":"14816:459:124","stateMutability":"pure","virtual":false,"visibility":"public"},{"baseFunctions":[11162],"body":{"id":47149,"nodeType":"Block","src":"15985:75:124","statements":[{"expression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":47147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":47141,"name":"_trustedRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46412,"src":"16015:14:124","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":47140,"name":"ISenderGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3041,"src":"16002:12:124","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISenderGuard_$3041_$","typeString":"type(contract ISenderGuard)"}},"id":47142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16002:28:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISenderGuard_$3041","typeString":"contract ISenderGuard"}},"id":47143,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16031:9:124","memberName":"getSender","nodeType":"MemberAccess","referencedDeclaration":3040,"src":"16002:38:124","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":47144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16002:40:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":47145,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39497,"src":"16046:5:124","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":47146,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16046:7:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16002:51:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":47139,"id":47148,"nodeType":"Return","src":"15995:58:124"}]},"documentation":{"id":47125,"nodeType":"StructuredDocumentation","src":"15281:556:124","text":" @notice Block initialization if the sale has already started.\n @dev Take care to set the start time far enough in advance to allow for funding; otherwise the pool will remain\n unfunded and need to be redeployed. Note that initialization does not pass the router address, so we cannot\n directly check that here, though there has to be a call on the trusted router for its `getSender` to be\n non-zero.\n @return success Always true: allow the initialization to proceed if the time condition has been met"},"functionSelector":"1c149e28","id":47150,"implemented":true,"kind":"function","modifiers":[{"id":47134,"kind":"modifierInvocation","modifierName":{"id":47133,"name":"onlyVault","nameLocations":["15945:9:124"],"nodeType":"IdentifierPath","referencedDeclaration":28128,"src":"15945:9:124"},"nodeType":"ModifierInvocation","src":"15945:9:124"},{"id":47136,"kind":"modifierInvocation","modifierName":{"id":47135,"name":"onlyBeforeSale","nameLocations":["15955:14:124"],"nodeType":"IdentifierPath","referencedDeclaration":46478,"src":"15955:14:124"},"nodeType":"ModifierInvocation","src":"15955:14:124"}],"name":"onBeforeInitialize","nameLocation":"15851:18:124","nodeType":"FunctionDefinition","overrides":{"id":47132,"nodeType":"OverrideSpecifier","overrides":[],"src":"15936:8:124"},"parameters":{"id":47131,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47128,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47150,"src":"15879:16:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":47126,"name":"uint256","nodeType":"ElementaryTypeName","src":"15879:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":47127,"nodeType":"ArrayTypeName","src":"15879:9:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":47130,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47150,"src":"15905:12:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47129,"name":"bytes","nodeType":"ElementaryTypeName","src":"15905:5:124","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"15869:54:124"},"returnParameters":{"id":47139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47138,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47150,"src":"15979:4:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":47137,"name":"bool","nodeType":"ElementaryTypeName","src":"15979:4:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"15978:6:124"},"scope":47381,"src":"15842:218:124","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[11204],"body":{"id":47191,"nodeType":"Block","src":"16585:95:124","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":47189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":47180,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":47178,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47153,"src":"16602:6:124","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":47179,"name":"_trustedRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46412,"src":"16612:14:124","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16602:24:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":47188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"arguments":[{"id":47182,"name":"router","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47153,"src":"16643:6:124","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":47181,"name":"ISenderGuard","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3041,"src":"16630:12:124","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ISenderGuard_$3041_$","typeString":"type(contract ISenderGuard)"}},"id":47183,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16630:20:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ISenderGuard_$3041","typeString":"contract ISenderGuard"}},"id":47184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16651:9:124","memberName":"getSender","nodeType":"MemberAccess","referencedDeclaration":3040,"src":"16630:30:124","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":47185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16630:32:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":47186,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39497,"src":"16666:5:124","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":47187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16666:7:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16630:43:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"16602:71:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":47177,"id":47190,"nodeType":"Return","src":"16595:78:124"}]},"documentation":{"id":47151,"nodeType":"StructuredDocumentation","src":"16066:259:124","text":" @notice Allow the owner to add liquidity before the start of the sale.\n @param router The router used for the operation\n @return success True (allowing the operation to proceed) if the owner is calling through the trusted router"},"functionSelector":"45421ec7","id":47192,"implemented":true,"kind":"function","modifiers":[{"id":47172,"kind":"modifierInvocation","modifierName":{"id":47171,"name":"onlyVault","nameLocations":["16545:9:124"],"nodeType":"IdentifierPath","referencedDeclaration":28128,"src":"16545:9:124"},"nodeType":"ModifierInvocation","src":"16545:9:124"},{"id":47174,"kind":"modifierInvocation","modifierName":{"id":47173,"name":"onlyBeforeSale","nameLocations":["16555:14:124"],"nodeType":"IdentifierPath","referencedDeclaration":46478,"src":"16555:14:124"},"nodeType":"ModifierInvocation","src":"16555:14:124"}],"name":"onBeforeAddLiquidity","nameLocation":"16339:20:124","nodeType":"FunctionDefinition","overrides":{"id":47170,"nodeType":"OverrideSpecifier","overrides":[],"src":"16536:8:124"},"parameters":{"id":47169,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47153,"mutability":"mutable","name":"router","nameLocation":"16377:6:124","nodeType":"VariableDeclaration","scope":47192,"src":"16369:14:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47152,"name":"address","nodeType":"ElementaryTypeName","src":"16369:7:124","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":47155,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47192,"src":"16393:7:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47154,"name":"address","nodeType":"ElementaryTypeName","src":"16393:7:124","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":47158,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47192,"src":"16410:16:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"},"typeName":{"id":47157,"nodeType":"UserDefinedTypeName","pathNode":{"id":47156,"name":"AddLiquidityKind","nameLocations":["16410:16:124"],"nodeType":"IdentifierPath","referencedDeclaration":4807,"src":"16410:16:124"},"referencedDeclaration":4807,"src":"16410:16:124","typeDescriptions":{"typeIdentifier":"t_enum$_AddLiquidityKind_$4807","typeString":"enum AddLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":47161,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47192,"src":"16436:16:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":47159,"name":"uint256","nodeType":"ElementaryTypeName","src":"16436:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":47160,"nodeType":"ArrayTypeName","src":"16436:9:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":47163,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47192,"src":"16462:7:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47162,"name":"uint256","nodeType":"ElementaryTypeName","src":"16462:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47166,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47192,"src":"16479:16:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":47164,"name":"uint256","nodeType":"ElementaryTypeName","src":"16479:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":47165,"nodeType":"ArrayTypeName","src":"16479:9:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":47168,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47192,"src":"16505:12:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47167,"name":"bytes","nodeType":"ElementaryTypeName","src":"16505:5:124","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"16359:164:124"},"returnParameters":{"id":47177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47176,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47192,"src":"16579:4:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":47175,"name":"bool","nodeType":"ElementaryTypeName","src":"16579:4:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"16578:6:124"},"scope":47381,"src":"16330:350:124","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[11264],"body":{"id":47229,"nodeType":"Block","src":"17152:189:124","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":47218,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"17223:5:124","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":47219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17229:9:124","memberName":"timestamp","nodeType":"MemberAccess","src":"17223:15:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":47220,"name":"_endTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46426,"src":"17242:8:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17223:27:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":47226,"nodeType":"IfStatement","src":"17219:94:124","trueBody":{"id":47225,"nodeType":"Block","src":"17252:61:124","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":47222,"name":"RemovingLiquidityNotAllowed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46455,"src":"17273:27:124","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":47223,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17273:29:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":47224,"nodeType":"RevertStatement","src":"17266:36:124"}]}},{"expression":{"hexValue":"74727565","id":47227,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"17330:4:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":47217,"id":47228,"nodeType":"Return","src":"17323:11:124"}]},"documentation":{"id":47193,"nodeType":"StructuredDocumentation","src":"16686:222:124","text":" @notice Only allow requests after the weight update is finished, and the sale is complete.\n @return success Always true; if removing liquidity is not allowed, revert here with a more specific error"},"functionSelector":"ba5f9f40","id":47230,"implemented":true,"kind":"function","modifiers":[{"id":47214,"kind":"modifierInvocation","modifierName":{"id":47213,"name":"onlyVault","nameLocations":["17127:9:124"],"nodeType":"IdentifierPath","referencedDeclaration":28128,"src":"17127:9:124"},"nodeType":"ModifierInvocation","src":"17127:9:124"}],"name":"onBeforeRemoveLiquidity","nameLocation":"16922:23:124","nodeType":"FunctionDefinition","overrides":{"id":47212,"nodeType":"OverrideSpecifier","overrides":[],"src":"17118:8:124"},"parameters":{"id":47211,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47195,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47230,"src":"16955:7:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47194,"name":"address","nodeType":"ElementaryTypeName","src":"16955:7:124","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":47197,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47230,"src":"16972:7:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47196,"name":"address","nodeType":"ElementaryTypeName","src":"16972:7:124","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":47200,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47230,"src":"16989:19:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"},"typeName":{"id":47199,"nodeType":"UserDefinedTypeName","pathNode":{"id":47198,"name":"RemoveLiquidityKind","nameLocations":["16989:19:124"],"nodeType":"IdentifierPath","referencedDeclaration":4828,"src":"16989:19:124"},"referencedDeclaration":4828,"src":"16989:19:124","typeDescriptions":{"typeIdentifier":"t_enum$_RemoveLiquidityKind_$4828","typeString":"enum RemoveLiquidityKind"}},"visibility":"internal"},{"constant":false,"id":47202,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47230,"src":"17018:7:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47201,"name":"uint256","nodeType":"ElementaryTypeName","src":"17018:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47205,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47230,"src":"17035:16:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":47203,"name":"uint256","nodeType":"ElementaryTypeName","src":"17035:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":47204,"nodeType":"ArrayTypeName","src":"17035:9:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":47208,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47230,"src":"17061:16:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":47206,"name":"uint256","nodeType":"ElementaryTypeName","src":"17061:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":47207,"nodeType":"ArrayTypeName","src":"17061:9:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":47210,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47230,"src":"17087:12:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":47209,"name":"bytes","nodeType":"ElementaryTypeName","src":"17087:5:124","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"16945:160:124"},"returnParameters":{"id":47217,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47216,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47230,"src":"17146:4:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":47215,"name":"bool","nodeType":"ElementaryTypeName","src":"17146:4:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"17145:6:124"},"scope":47381,"src":"16913:428:124","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[45548],"body":{"id":47253,"nodeType":"Block","src":"17662:158:124","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":47238,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47232,"src":"17676:10:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":47239,"name":"_TWO_TOKENS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46410,"src":"17689:11:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17676:24:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":47247,"nodeType":"IfStatement","src":"17672:97:124","trueBody":{"id":47246,"nodeType":"Block","src":"17702:67:124","statements":[{"expression":{"baseExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":47241,"name":"_getNormalizedWeights","nodeType":"Identifier","overloadedDeclarations":[47293],"referencedDeclaration":47293,"src":"17723:21:124","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function () view returns (uint256[] memory)"}},"id":47242,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17723:23:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":47244,"indexExpression":{"id":47243,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47232,"src":"17747:10:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17723:35:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":47237,"id":47245,"nodeType":"Return","src":"17716:42:124"}]}},{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":47248,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"17786:12:124","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3768_$","typeString":"type(contract IVaultErrors)"}},"id":47250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17799:12:124","memberName":"InvalidToken","nodeType":"MemberAccess","referencedDeclaration":3452,"src":"17786:25:124","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":47251,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17786:27:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":47252,"nodeType":"RevertStatement","src":"17779:34:124"}]},"id":47254,"implemented":true,"kind":"function","modifiers":[],"name":"_getNormalizedWeight","nameLocation":"17580:20:124","nodeType":"FunctionDefinition","overrides":{"id":47234,"nodeType":"OverrideSpecifier","overrides":[],"src":"17635:8:124"},"parameters":{"id":47233,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47232,"mutability":"mutable","name":"tokenIndex","nameLocation":"17609:10:124","nodeType":"VariableDeclaration","scope":47254,"src":"17601:18:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47231,"name":"uint256","nodeType":"ElementaryTypeName","src":"17601:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17600:20:124"},"returnParameters":{"id":47237,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47236,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47254,"src":"17653:7:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47235,"name":"uint256","nodeType":"ElementaryTypeName","src":"17653:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17652:9:124"},"scope":47381,"src":"17571:249:124","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[45666],"body":{"id":47292,"nodeType":"Block","src":"17909:303:124","statements":[{"assignments":[47265],"declarations":[{"constant":false,"id":47265,"mutability":"mutable","name":"normalizedWeights","nameLocation":"17936:17:124","nodeType":"VariableDeclaration","scope":47292,"src":"17919:34:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":47263,"name":"uint256","nodeType":"ElementaryTypeName","src":"17919:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":47264,"nodeType":"ArrayTypeName","src":"17919:9:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":47271,"initialValue":{"arguments":[{"id":47269,"name":"_TWO_TOKENS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46410,"src":"17970:11:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":47268,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"17956:13:124","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":47266,"name":"uint256","nodeType":"ElementaryTypeName","src":"17960:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":47267,"nodeType":"ArrayTypeName","src":"17960:9:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":47270,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17956:26:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"17919:63:124"},{"expression":{"id":47277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":47272,"name":"normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47265,"src":"17992:17:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":47274,"indexExpression":{"id":47273,"name":"_projectTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46420,"src":"18010:18:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"17992:37:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":47275,"name":"_getProjectTokenNormalizedWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47314,"src":"18032:32:124","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":47276,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18032:34:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17992:74:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":47278,"nodeType":"ExpressionStatement","src":"17992:74:124"},{"expression":{"id":47288,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":47279,"name":"normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47265,"src":"18076:17:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":47281,"indexExpression":{"id":47280,"name":"_reserveTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46422,"src":"18094:18:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"18076:37:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":47282,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"18116:10:124","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$8208_$","typeString":"type(library FixedPoint)"}},"id":47283,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"18127:3:124","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":7920,"src":"18116:14:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"baseExpression":{"id":47284,"name":"normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47265,"src":"18133:17:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":47286,"indexExpression":{"id":47285,"name":"_projectTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46420,"src":"18151:18:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18133:37:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18116:54:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18076:94:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":47289,"nodeType":"ExpressionStatement","src":"18076:94:124"},{"expression":{"id":47290,"name":"normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47265,"src":"18188:17:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"functionReturnParameters":47260,"id":47291,"nodeType":"Return","src":"18181:24:124"}]},"id":47293,"implemented":true,"kind":"function","modifiers":[],"name":"_getNormalizedWeights","nameLocation":"17835:21:124","nodeType":"FunctionDefinition","overrides":{"id":47256,"nodeType":"OverrideSpecifier","overrides":[],"src":"17873:8:124"},"parameters":{"id":47255,"nodeType":"ParameterList","parameters":[],"src":"17856:2:124"},"returnParameters":{"id":47260,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47259,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47293,"src":"17891:16:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":47257,"name":"uint256","nodeType":"ElementaryTypeName","src":"17891:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":47258,"nodeType":"ArrayTypeName","src":"17891:9:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"17890:18:124"},"scope":47381,"src":"17826:386:124","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":47313,"nodeType":"Block","src":"18294:224:124","statements":[{"assignments":[47299],"declarations":[{"constant":false,"id":47299,"mutability":"mutable","name":"pctProgress","nameLocation":"18312:11:124","nodeType":"VariableDeclaration","scope":47313,"src":"18304:19:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47298,"name":"uint256","nodeType":"ElementaryTypeName","src":"18304:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":47305,"initialValue":{"arguments":[{"id":47302,"name":"_startTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46424,"src":"18374:10:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":47303,"name":"_endTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46426,"src":"18386:8:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":47300,"name":"GradualValueChange","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47835,"src":"18326:18:124","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_GradualValueChange_$47835_$","typeString":"type(library GradualValueChange)"}},"id":47301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18345:28:124","memberName":"calculateValueChangeProgress","nodeType":"MemberAccess","referencedDeclaration":47834,"src":"18326:47:124","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) view returns (uint256)"}},"id":47304,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18326:69:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"18304:91:124"},{"expression":{"arguments":[{"id":47308,"name":"_projectTokenStartWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46428,"src":"18449:24:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":47309,"name":"_projectTokenEndWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46432,"src":"18475:22:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":47310,"name":"pctProgress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47299,"src":"18499:11:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":47306,"name":"GradualValueChange","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47835,"src":"18413:18:124","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_GradualValueChange_$47835_$","typeString":"type(library GradualValueChange)"}},"id":47307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18432:16:124","memberName":"interpolateValue","nodeType":"MemberAccess","referencedDeclaration":47781,"src":"18413:35:124","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":47311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18413:98:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":47297,"id":47312,"nodeType":"Return","src":"18406:105:124"}]},"id":47314,"implemented":true,"kind":"function","modifiers":[],"name":"_getProjectTokenNormalizedWeight","nameLocation":"18227:32:124","nodeType":"FunctionDefinition","parameters":{"id":47294,"nodeType":"ParameterList","parameters":[],"src":"18259:2:124"},"returnParameters":{"id":47297,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47296,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47314,"src":"18285:7:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47295,"name":"uint256","nodeType":"ElementaryTypeName","src":"18285:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"18284:9:124"},"scope":47381,"src":"18218:300:124","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":47379,"nodeType":"Block","src":"18836:767:124","statements":[{"assignments":[47330,47332],"declarations":[{"constant":false,"id":47330,"mutability":"mutable","name":"projectTokenIndex","nameLocation":"18855:17:124","nodeType":"VariableDeclaration","scope":47379,"src":"18847:25:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47329,"name":"uint256","nodeType":"ElementaryTypeName","src":"18847:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47332,"mutability":"mutable","name":"reserveTokenIndex","nameLocation":"18882:17:124","nodeType":"VariableDeclaration","scope":47379,"src":"18874:25:124","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47331,"name":"uint256","nodeType":"ElementaryTypeName","src":"18874:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":47345,"initialValue":{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"id":47337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":47333,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47323,"src":"18903:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":47334,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18913:12:124","memberName":"projectToken","nodeType":"MemberAccess","referencedDeclaration":66,"src":"18903:22:124","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":47335,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47323,"src":"18928:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":47336,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18938:12:124","memberName":"reserveToken","nodeType":"MemberAccess","referencedDeclaration":69,"src":"18928:22:124","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"18903:47:124","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"components":[{"hexValue":"31","id":47341,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18987:1:124","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},{"hexValue":"30","id":47342,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18990:1:124","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"id":47343,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"18986:6:124","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_1_by_1_$_t_rational_0_by_1_$","typeString":"tuple(int_const 1,int_const 0)"}},"id":47344,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"18903:89:124","trueExpression":{"components":[{"hexValue":"30","id":47338,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18966:1:124","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"31","id":47339,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18969:1:124","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"id":47340,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"TupleExpression","src":"18965:6:124","typeDescriptions":{"typeIdentifier":"t_tuple$_t_rational_0_by_1_$_t_rational_1_by_1_$","typeString":"tuple(int_const 0,int_const 1)"}},"typeDescriptions":{"typeIdentifier":"t_tuple$_t_uint8_$_t_uint8_$","typeString":"tuple(uint8,uint8)"}},"nodeType":"VariableDeclarationStatement","src":"18846:146:124"},{"assignments":[47350],"declarations":[{"constant":false,"id":47350,"mutability":"mutable","name":"normalizedWeights","nameLocation":"19020:17:124","nodeType":"VariableDeclaration","scope":47379,"src":"19003:34:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":47348,"name":"uint256","nodeType":"ElementaryTypeName","src":"19003:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":47349,"nodeType":"ArrayTypeName","src":"19003:9:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":47356,"initialValue":{"arguments":[{"id":47354,"name":"_TWO_TOKENS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46410,"src":"19054:11:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":47353,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"19040:13:124","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":47351,"name":"uint256","nodeType":"ElementaryTypeName","src":"19044:7:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":47352,"nodeType":"ArrayTypeName","src":"19044:9:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":47355,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19040:26:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"nodeType":"VariableDeclarationStatement","src":"19003:63:124"},{"expression":{"id":47362,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":47357,"name":"normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47350,"src":"19076:17:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":47359,"indexExpression":{"id":47358,"name":"projectTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47330,"src":"19094:17:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"19076:36:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":47360,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47323,"src":"19115:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":47361,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19125:23:124","memberName":"projectTokenStartWeight","nodeType":"MemberAccess","referencedDeclaration":71,"src":"19115:33:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19076:72:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":47363,"nodeType":"ExpressionStatement","src":"19076:72:124"},{"expression":{"id":47369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":47364,"name":"normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47350,"src":"19158:17:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":47366,"indexExpression":{"id":47365,"name":"reserveTokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47332,"src":"19176:17:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"19158:36:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":47367,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47323,"src":"19197:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":47368,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"19207:23:124","memberName":"reserveTokenStartWeight","nodeType":"MemberAccess","referencedDeclaration":73,"src":"19197:33:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19158:72:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":47370,"nodeType":"ExpressionStatement","src":"19158:72:124"},{"expression":{"arguments":[{"id":47372,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47316,"src":"19417:4:124","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":47373,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47318,"src":"19447:6:124","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":47374,"name":"_TWO_TOKENS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46410,"src":"19482:11:124","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":47375,"name":"normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47350,"src":"19530:17:124","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":47376,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47320,"src":"19574:7:124","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":47371,"name":"NewPoolParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45139,"src":"19379:13:124","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_NewPoolParams_$45139_storage_ptr_$","typeString":"type(struct WeightedPool.NewPoolParams storage pointer)"}},"id":47377,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":["19411:4:124","19439:6:124","19471:9:124","19511:17:124","19565:7:124"],"names":["name","symbol","numTokens","normalizedWeights","version"],"nodeType":"FunctionCall","src":"19379:217:124","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_NewPoolParams_$45139_memory_ptr","typeString":"struct WeightedPool.NewPoolParams memory"}},"functionReturnParameters":47328,"id":47378,"nodeType":"Return","src":"19360:236:124"}]},"id":47380,"implemented":true,"kind":"function","modifiers":[],"name":"_buildWeightedPoolParams","nameLocation":"18636:24:124","nodeType":"FunctionDefinition","parameters":{"id":47324,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47316,"mutability":"mutable","name":"name","nameLocation":"18684:4:124","nodeType":"VariableDeclaration","scope":47380,"src":"18670:18:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":47315,"name":"string","nodeType":"ElementaryTypeName","src":"18670:6:124","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":47318,"mutability":"mutable","name":"symbol","nameLocation":"18712:6:124","nodeType":"VariableDeclaration","scope":47380,"src":"18698:20:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":47317,"name":"string","nodeType":"ElementaryTypeName","src":"18698:6:124","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":47320,"mutability":"mutable","name":"version","nameLocation":"18742:7:124","nodeType":"VariableDeclaration","scope":47380,"src":"18728:21:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":47319,"name":"string","nodeType":"ElementaryTypeName","src":"18728:6:124","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":47323,"mutability":"mutable","name":"lbpParams","nameLocation":"18776:9:124","nodeType":"VariableDeclaration","scope":47380,"src":"18759:26:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams"},"typeName":{"id":47322,"nodeType":"UserDefinedTypeName","pathNode":{"id":47321,"name":"LBPParams","nameLocations":["18759:9:124"],"nodeType":"IdentifierPath","referencedDeclaration":84,"src":"18759:9:124"},"referencedDeclaration":84,"src":"18759:9:124","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_storage_ptr","typeString":"struct LBPParams"}},"visibility":"internal"}],"src":"18660:131:124"},"returnParameters":{"id":47328,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47327,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47380,"src":"18814:20:124","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_NewPoolParams_$45139_memory_ptr","typeString":"struct WeightedPool.NewPoolParams"},"typeName":{"id":47326,"nodeType":"UserDefinedTypeName","pathNode":{"id":47325,"name":"NewPoolParams","nameLocations":["18814:13:124"],"nodeType":"IdentifierPath","referencedDeclaration":45139,"src":"18814:13:124"},"referencedDeclaration":45139,"src":"18814:13:124","typeDescriptions":{"typeIdentifier":"t_struct$_NewPoolParams_$45139_storage_ptr","typeString":"struct WeightedPool.NewPoolParams"}},"visibility":"internal"}],"src":"18813:22:124"},"scope":47381,"src":"18627:976:124","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":47382,"src":"1845:17760:124","usedErrors":[203,206,3452,3458,3640,5901,7917,8214,8217,8220,8223,9575,9578,9581,10742,10749,39443,39448,40849,40921,40923,41500,41505,41510,45169,46452,46455,46458,46461,46464,47658],"usedEvents":[39454,39592,39838,40043,40052,46449]}],"src":"46:19560:124"},"id":124},"contracts/lbp/LBPoolFactory.sol":{"ast":{"absolutePath":"contracts/lbp/LBPoolFactory.sol","exportedSymbols":{"BasePoolFactory":[5283],"IERC20":[40109],"IPoolVersion":[253],"IVault":[3111],"LBPParams":[84],"LBPool":[47381],"LBPoolFactory":[47645],"LBPoolLib":[47920],"PoolRoleAccounts":[4677],"ReentrancyGuardTransient":[9942],"TokenConfig":[4694],"Version":[7482]},"id":47646,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":47383,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:125"},{"absolutePath":"@openzeppelin/contracts/token/ERC20/IERC20.sol","file":"@openzeppelin/contracts/token/ERC20/IERC20.sol","id":47385,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47646,"sourceUnit":40110,"src":"72:72:125","symbolAliases":[{"foreign":{"id":47384,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40109,"src":"81:6:125","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IPoolVersion.sol","file":"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IPoolVersion.sol","id":47387,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47646,"sourceUnit":254,"src":"146:110:125","symbolAliases":[{"foreign":{"id":47386,"name":"IPoolVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":253,"src":"155:12:125","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":47390,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47646,"sourceUnit":4872,"src":"257:108:125","symbolAliases":[{"foreign":{"id":47388,"name":"TokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4694,"src":"266:11:125","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":47389,"name":"PoolRoleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4677,"src":"279:16:125","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/pool-weighted/ILBPool.sol","file":"@balancer-labs/v3-interfaces/contracts/pool-weighted/ILBPool.sol","id":47392,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47646,"sourceUnit":162,"src":"366:93:125","symbolAliases":[{"foreign":{"id":47391,"name":"LBPParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":84,"src":"375:9:125","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":47394,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47646,"sourceUnit":3112,"src":"460:81:125","symbolAliases":[{"foreign":{"id":47393,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"469:6:125","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","file":"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol","id":47396,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47646,"sourceUnit":9943,"src":"543:132:125","symbolAliases":[{"foreign":{"id":47395,"name":"ReentrancyGuardTransient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9942,"src":"556:24:125","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-pool-utils/contracts/BasePoolFactory.sol","file":"@balancer-labs/v3-pool-utils/contracts/BasePoolFactory.sol","id":47398,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47646,"sourceUnit":5284,"src":"676:93:125","symbolAliases":[{"foreign":{"id":47397,"name":"BasePoolFactory","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5283,"src":"685:15:125","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol","id":47400,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47646,"sourceUnit":7483,"src":"770:89:125","symbolAliases":[{"foreign":{"id":47399,"name":"Version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":7482,"src":"779:7:125","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/lib/LBPoolLib.sol","file":"../lib/LBPoolLib.sol","id":47402,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47646,"sourceUnit":47921,"src":"861:49:125","symbolAliases":[{"foreign":{"id":47401,"name":"LBPoolLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47920,"src":"870:9:125","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/lbp/LBPool.sol","file":"./LBPool.sol","id":47404,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47646,"sourceUnit":47382,"src":"911:38:125","symbolAliases":[{"foreign":{"id":47403,"name":"LBPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47381,"src":"920:6:125","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":47406,"name":"IPoolVersion","nameLocations":["1176:12:125"],"nodeType":"IdentifierPath","referencedDeclaration":253,"src":"1176:12:125"},"id":47407,"nodeType":"InheritanceSpecifier","src":"1176:12:125"},{"baseName":{"id":47408,"name":"ReentrancyGuardTransient","nameLocations":["1190:24:125"],"nodeType":"IdentifierPath","referencedDeclaration":9942,"src":"1190:24:125"},"id":47409,"nodeType":"InheritanceSpecifier","src":"1190:24:125"},{"baseName":{"id":47410,"name":"BasePoolFactory","nameLocations":["1216:15:125"],"nodeType":"IdentifierPath","referencedDeclaration":5283,"src":"1216:15:125"},"id":47411,"nodeType":"InheritanceSpecifier","src":"1216:15:125"},{"baseName":{"id":47412,"name":"Version","nameLocations":["1233:7:125"],"nodeType":"IdentifierPath","referencedDeclaration":7482,"src":"1233:7:125"},"id":47413,"nodeType":"InheritanceSpecifier","src":"1233:7:125"}],"canonicalName":"LBPoolFactory","contractDependencies":[47381],"contractKind":"contract","documentation":{"id":47405,"nodeType":"StructuredDocumentation","src":"951:198:125","text":" @notice LBPool Factory.\n @dev This is a factory specific to LBPools, allowing only two tokens and restricting the LBP to a single token sale,\n with parameters specified on deployment."},"fullyImplemented":true,"id":47645,"linearizedBaseContracts":[47645,7482,273,5283,5892,19387,5786,5498,1579,243,9942,253],"name":"LBPoolFactory","nameLocation":"1159:13:125","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":47416,"mutability":"constant","name":"_TWO_TOKENS","nameLocation":"1381:11:125","nodeType":"VariableDeclaration","scope":47645,"src":"1356:40:125","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47414,"name":"uint256","nodeType":"ElementaryTypeName","src":"1356:7:125","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"32","id":47415,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1395:1:125","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"visibility":"private"},{"constant":false,"id":47418,"mutability":"mutable","name":"_poolVersion","nameLocation":"1418:12:125","nodeType":"VariableDeclaration","scope":47645,"src":"1403:27:125","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string"},"typeName":{"id":47417,"name":"string","nodeType":"ElementaryTypeName","src":"1403:6:125","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"private"},{"constant":false,"id":47420,"mutability":"immutable","name":"_trustedRouter","nameLocation":"1464:14:125","nodeType":"VariableDeclaration","scope":47645,"src":"1437:41:125","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47419,"name":"address","nodeType":"ElementaryTypeName","src":"1437:7:125","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"anonymous":false,"documentation":{"id":47421,"nodeType":"StructuredDocumentation","src":"1485:469:125","text":" @notice Emitted on deployment so that offchain processes know which token is which from the beginning.\n @dev This information is also available onchain through immutable data and explicit getters on the pool.\n @param pool The address of the new pool\n @param projectToken The address of the project token (being distributed in the sale)\n @param reserveToken The address of the reserve token (used to purchase the project token)"},"eventSelector":"6b01c8c0b16cf8e7a1a9158019b5fe7d40b415d756710eb0fdcb577701dfee84","id":47431,"name":"LBPoolCreated","nameLocation":"1965:13:125","nodeType":"EventDefinition","parameters":{"id":47430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47423,"indexed":true,"mutability":"mutable","name":"pool","nameLocation":"1995:4:125","nodeType":"VariableDeclaration","scope":47431,"src":"1979:20:125","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47422,"name":"address","nodeType":"ElementaryTypeName","src":"1979:7:125","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":47426,"indexed":true,"mutability":"mutable","name":"projectToken","nameLocation":"2016:12:125","nodeType":"VariableDeclaration","scope":47431,"src":"2001:27:125","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":47425,"nodeType":"UserDefinedTypeName","pathNode":{"id":47424,"name":"IERC20","nameLocations":["2001:6:125"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"2001:6:125"},"referencedDeclaration":40109,"src":"2001:6:125","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":47429,"indexed":true,"mutability":"mutable","name":"reserveToken","nameLocation":"2045:12:125","nodeType":"VariableDeclaration","scope":47431,"src":"2030:27:125","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":47428,"nodeType":"UserDefinedTypeName","pathNode":{"id":47427,"name":"IERC20","nameLocations":["2030:6:125"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"2030:6:125"},"referencedDeclaration":40109,"src":"2030:6:125","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1978:80:125"},"src":"1959:100:125"},{"documentation":{"id":47432,"nodeType":"StructuredDocumentation","src":"2065:62:125","text":"@notice The zero address was given for the trusted router."},"errorSelector":"0307417b","id":47434,"name":"InvalidTrustedRouter","nameLocation":"2138:20:125","nodeType":"ErrorDefinition","parameters":{"id":47433,"nodeType":"ParameterList","parameters":[],"src":"2158:2:125"},"src":"2132:29:125"},{"documentation":{"id":47435,"nodeType":"StructuredDocumentation","src":"2167:42:125","text":"@notice The owner is the zero address."},"errorSelector":"49e27cff","id":47437,"name":"InvalidOwner","nameLocation":"2220:12:125","nodeType":"ErrorDefinition","parameters":{"id":47436,"nodeType":"ParameterList","parameters":[],"src":"2232:2:125"},"src":"2214:21:125"},{"body":{"id":47481,"nodeType":"Block","src":"2516:374:125","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":47467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":47462,"name":"trustedRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47448,"src":"2530:13:125","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":47465,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2555:1:125","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":47464,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2547:7:125","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":47463,"name":"address","nodeType":"ElementaryTypeName","src":"2547:7:125","typeDescriptions":{}}},"id":47466,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2547:10:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2530:27:125","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":47472,"nodeType":"IfStatement","src":"2526:87:125","trueBody":{"id":47471,"nodeType":"Block","src":"2559:54:125","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":47468,"name":"InvalidTrustedRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47434,"src":"2580:20:125","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":47469,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2580:22:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":47470,"nodeType":"RevertStatement","src":"2573:29:125"}]}},{"expression":{"id":47475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":47473,"name":"_trustedRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47420,"src":"2816:14:125","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":47474,"name":"trustedRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47448,"src":"2833:13:125","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2816:30:125","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":47476,"nodeType":"ExpressionStatement","src":"2816:30:125"},{"expression":{"id":47479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":47477,"name":"_poolVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47418,"src":"2857:12:125","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":47478,"name":"poolVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47446,"src":"2872:11:125","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"src":"2857:26:125","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"id":47480,"nodeType":"ExpressionStatement","src":"2857:26:125"}]},"id":47482,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":47451,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47440,"src":"2437:5:125","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},{"id":47452,"name":"pauseWindowDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47442,"src":"2444:19:125","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},{"expression":{"arguments":[{"id":47454,"name":"LBPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47381,"src":"2470:6:125","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LBPool_$47381_$","typeString":"type(contract LBPool)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_LBPool_$47381_$","typeString":"type(contract LBPool)"}],"id":47453,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2465:4:125","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":47455,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2465:12:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_LBPool_$47381","typeString":"type(contract LBPool)"}},"id":47456,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2478:12:125","memberName":"creationCode","nodeType":"MemberAccess","src":"2465:25:125","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"id":47457,"kind":"baseConstructorSpecifier","modifierName":{"id":47450,"name":"BasePoolFactory","nameLocations":["2421:15:125"],"nodeType":"IdentifierPath","referencedDeclaration":5283,"src":"2421:15:125"},"nodeType":"ModifierInvocation","src":"2421:70:125"},{"arguments":[{"id":47459,"name":"factoryVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47444,"src":"2500:14:125","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"id":47460,"kind":"baseConstructorSpecifier","modifierName":{"id":47458,"name":"Version","nameLocations":["2492:7:125"],"nodeType":"IdentifierPath","referencedDeclaration":7482,"src":"2492:7:125"},"nodeType":"ModifierInvocation","src":"2492:23:125"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":47449,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47440,"mutability":"mutable","name":"vault","nameLocation":"2269:5:125","nodeType":"VariableDeclaration","scope":47482,"src":"2262:12:125","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":47439,"nodeType":"UserDefinedTypeName","pathNode":{"id":47438,"name":"IVault","nameLocations":["2262:6:125"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"2262:6:125"},"referencedDeclaration":3111,"src":"2262:6:125","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"},{"constant":false,"id":47442,"mutability":"mutable","name":"pauseWindowDuration","nameLocation":"2291:19:125","nodeType":"VariableDeclaration","scope":47482,"src":"2284:26:125","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"},"typeName":{"id":47441,"name":"uint32","nodeType":"ElementaryTypeName","src":"2284:6:125","typeDescriptions":{"typeIdentifier":"t_uint32","typeString":"uint32"}},"visibility":"internal"},{"constant":false,"id":47444,"mutability":"mutable","name":"factoryVersion","nameLocation":"2334:14:125","nodeType":"VariableDeclaration","scope":47482,"src":"2320:28:125","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":47443,"name":"string","nodeType":"ElementaryTypeName","src":"2320:6:125","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":47446,"mutability":"mutable","name":"poolVersion","nameLocation":"2372:11:125","nodeType":"VariableDeclaration","scope":47482,"src":"2358:25:125","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":47445,"name":"string","nodeType":"ElementaryTypeName","src":"2358:6:125","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":47448,"mutability":"mutable","name":"trustedRouter","nameLocation":"2401:13:125","nodeType":"VariableDeclaration","scope":47482,"src":"2393:21:125","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47447,"name":"address","nodeType":"ElementaryTypeName","src":"2393:7:125","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2252:168:125"},"returnParameters":{"id":47461,"nodeType":"ParameterList","parameters":[],"src":"2516:0:125"},"scope":47645,"src":"2241:649:125","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[252],"body":{"id":47490,"nodeType":"Block","src":"2993:36:125","statements":[{"expression":{"id":47488,"name":"_poolVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47418,"src":"3010:12:125","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}},"functionReturnParameters":47487,"id":47489,"nodeType":"Return","src":"3003:19:125"}]},"documentation":{"id":47483,"nodeType":"StructuredDocumentation","src":"2896:28:125","text":"@inheritdoc IPoolVersion"},"functionSelector":"3f819b6f","id":47491,"implemented":true,"kind":"function","modifiers":[],"name":"getPoolVersion","nameLocation":"2938:14:125","nodeType":"FunctionDefinition","parameters":{"id":47484,"nodeType":"ParameterList","parameters":[],"src":"2952:2:125"},"returnParameters":{"id":47487,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47486,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47491,"src":"2978:13:125","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":47485,"name":"string","nodeType":"ElementaryTypeName","src":"2978:6:125","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2977:15:125"},"scope":47645,"src":"2929:100:125","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":47499,"nodeType":"Block","src":"3186:38:125","statements":[{"expression":{"id":47497,"name":"_trustedRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47420,"src":"3203:14:125","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":47496,"id":47498,"nodeType":"Return","src":"3196:21:125"}]},"documentation":{"id":47492,"nodeType":"StructuredDocumentation","src":"3035:86:125","text":"@notice Returns trusted router, which is the gateway to add liquidity to the pool."},"functionSelector":"af905d15","id":47500,"implemented":true,"kind":"function","modifiers":[],"name":"getTrustedRouter","nameLocation":"3135:16:125","nodeType":"FunctionDefinition","parameters":{"id":47493,"nodeType":"ParameterList","parameters":[],"src":"3151:2:125"},"returnParameters":{"id":47496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47495,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47500,"src":"3177:7:125","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47494,"name":"address","nodeType":"ElementaryTypeName","src":"3177:7:125","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3176:9:125"},"scope":47645,"src":"3126:98:125","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":47599,"nodeType":"Block","src":"3938:1403:125","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":47525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":47519,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47508,"src":"3952:9:125","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":47520,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3962:5:125","memberName":"owner","nodeType":"MemberAccess","referencedDeclaration":63,"src":"3952:15:125","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"hexValue":"30","id":47523,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3979:1:125","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":47522,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3971:7:125","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":47521,"name":"address","nodeType":"ElementaryTypeName","src":"3971:7:125","typeDescriptions":{}}},"id":47524,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3971:10:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3952:29:125","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":47530,"nodeType":"IfStatement","src":"3948:81:125","trueBody":{"id":47529,"nodeType":"Block","src":"3983:46:125","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":47526,"name":"InvalidOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47437,"src":"4004:12:125","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":47527,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4004:14:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":47528,"nodeType":"RevertStatement","src":"3997:21:125"}]}},{"assignments":[47533],"declarations":[{"constant":false,"id":47533,"mutability":"mutable","name":"roleAccounts","nameLocation":"4063:12:125","nodeType":"VariableDeclaration","scope":47599,"src":"4039:36:125","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts"},"typeName":{"id":47532,"nodeType":"UserDefinedTypeName","pathNode":{"id":47531,"name":"PoolRoleAccounts","nameLocations":["4039:16:125"],"nodeType":"IdentifierPath","referencedDeclaration":4677,"src":"4039:16:125"},"referencedDeclaration":4677,"src":"4039:16:125","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_storage_ptr","typeString":"struct PoolRoleAccounts"}},"visibility":"internal"}],"id":47534,"nodeType":"VariableDeclarationStatement","src":"4039:36:125"},{"expression":{"id":47540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"id":47535,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47533,"src":"4155:12:125","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},"id":47537,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"4168:14:125","memberName":"swapFeeManager","nodeType":"MemberAccess","referencedDeclaration":4674,"src":"4155:27:125","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":47538,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47508,"src":"4185:9:125","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":47539,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4195:5:125","memberName":"owner","nodeType":"MemberAccess","referencedDeclaration":63,"src":"4185:15:125","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4155:45:125","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":47541,"nodeType":"ExpressionStatement","src":"4155:45:125"},{"expression":{"arguments":[{"expression":{"id":47545,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47508,"src":"4536:9:125","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":47546,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4546:9:125","memberName":"startTime","nodeType":"MemberAccess","referencedDeclaration":79,"src":"4536:19:125","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":47547,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47508,"src":"4569:9:125","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":47548,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4579:7:125","memberName":"endTime","nodeType":"MemberAccess","referencedDeclaration":81,"src":"4569:17:125","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":47549,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47508,"src":"4600:9:125","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":47550,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4610:23:125","memberName":"projectTokenStartWeight","nodeType":"MemberAccess","referencedDeclaration":71,"src":"4600:33:125","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":47551,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47508,"src":"4647:9:125","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":47552,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4657:23:125","memberName":"reserveTokenStartWeight","nodeType":"MemberAccess","referencedDeclaration":73,"src":"4647:33:125","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":47553,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47508,"src":"4694:9:125","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":47554,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4704:21:125","memberName":"projectTokenEndWeight","nodeType":"MemberAccess","referencedDeclaration":75,"src":"4694:31:125","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":47555,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47508,"src":"4739:9:125","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":47556,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4749:21:125","memberName":"reserveTokenEndWeight","nodeType":"MemberAccess","referencedDeclaration":77,"src":"4739:31:125","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":47542,"name":"LBPoolLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47920,"src":"4484:9:125","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_LBPoolLib_$47920_$","typeString":"type(library LBPoolLib)"}},"id":47544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4494:28:125","memberName":"verifyWeightUpdateParameters","nodeType":"MemberAccess","referencedDeclaration":47919,"src":"4484:38:125","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256,uint256,uint256) view returns (uint256)"}},"id":47557,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4484:296:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":47558,"nodeType":"ExpressionStatement","src":"4484:296:125"},{"expression":{"id":47573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":47559,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47517,"src":"4791:4:125","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":47563,"name":"name","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47503,"src":"4817:4:125","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":47564,"name":"symbol","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47505,"src":"4823:6:125","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"id":47565,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47508,"src":"4831:9:125","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},{"arguments":[],"expression":{"argumentTypes":[],"id":47566,"name":"getVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":19373,"src":"4842:8:125","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_IVault_$3111_$","typeString":"function () view returns (contract IVault)"}},"id":47567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4842:10:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},{"id":47568,"name":"_trustedRouter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47420,"src":"4854:14:125","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":47569,"name":"_poolVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47418,"src":"4870:12:125","typeDescriptions":{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"},{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_storage","typeString":"string storage ref"}],"expression":{"id":47561,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4806:3:125","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":47562,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"4810:6:125","memberName":"encode","nodeType":"MemberAccess","src":"4806:10:125","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":47570,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4806:77:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":47571,"name":"salt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47512,"src":"4885:4:125","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":47560,"name":"_create","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5226,"src":"4798:7:125","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_address_$","typeString":"function (bytes memory,bytes32) returns (address)"}},"id":47572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4798:92:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4791:99:125","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":47574,"nodeType":"ExpressionStatement","src":"4791:99:125"},{"eventCall":{"arguments":[{"id":47576,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47517,"src":"4920:4:125","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":47577,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47508,"src":"4926:9:125","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":47578,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4936:12:125","memberName":"projectToken","nodeType":"MemberAccess","referencedDeclaration":66,"src":"4926:22:125","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"expression":{"id":47579,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47508,"src":"4950:9:125","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":47580,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4960:12:125","memberName":"reserveToken","nodeType":"MemberAccess","referencedDeclaration":69,"src":"4950:22:125","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":47575,"name":"LBPoolCreated","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47431,"src":"4906:13:125","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_contract$_IERC20_$40109_$_t_contract$_IERC20_$40109_$returns$__$","typeString":"function (address,contract IERC20,contract IERC20)"}},"id":47581,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4906:67:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":47582,"nodeType":"EmitStatement","src":"4901:72:125"},{"expression":{"arguments":[{"id":47584,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47517,"src":"5020:4:125","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":47586,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47508,"src":"5056:9:125","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":47587,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5066:12:125","memberName":"projectToken","nodeType":"MemberAccess","referencedDeclaration":66,"src":"5056:22:125","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"expression":{"id":47588,"name":"lbpParams","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47508,"src":"5080:9:125","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams memory"}},"id":47589,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5090:12:125","memberName":"reserveToken","nodeType":"MemberAccess","referencedDeclaration":69,"src":"5080:22:125","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}],"id":47585,"name":"_buildTokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47644,"src":"5038:17:125","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_contract$_IERC20_$40109_$_t_contract$_IERC20_$40109_$returns$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$","typeString":"function (contract IERC20,contract IERC20) pure returns (struct TokenConfig memory[] memory)"}},"id":47590,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5038:65:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},{"id":47591,"name":"swapFeePercentage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47510,"src":"5117:17:125","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"66616c7365","id":47592,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5148:5:125","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},{"id":47593,"name":"roleAccounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47533,"src":"5200:12:125","typeDescriptions":{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"}},{"id":47594,"name":"pool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47517,"src":"5226:4:125","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":47595,"name":"getDefaultLiquidityManagement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5282,"src":"5293:29:125","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_struct$_LiquidityManagement_$4580_memory_ptr_$","typeString":"function () pure returns (struct LiquidityManagement memory)"}},"id":47596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5293:31:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_struct$_PoolRoleAccounts_$4677_memory_ptr","typeString":"struct PoolRoleAccounts memory"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_LiquidityManagement_$4580_memory_ptr","typeString":"struct LiquidityManagement memory"}],"id":47583,"name":"_registerPoolWithVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":5262,"src":"4984:22:125","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$_t_uint256_$_t_bool_$_t_struct$_PoolRoleAccounts_$4677_memory_ptr_$_t_address_$_t_struct$_LiquidityManagement_$4580_memory_ptr_$returns$__$","typeString":"function (address,struct TokenConfig memory[] memory,uint256,bool,struct PoolRoleAccounts memory,address,struct LiquidityManagement memory)"}},"id":47597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4984:350:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":47598,"nodeType":"ExpressionStatement","src":"4984:350:125"}]},"documentation":{"id":47501,"nodeType":"StructuredDocumentation","src":"3230:485:125","text":" @notice Deploys a new `LBPool`.\n @dev This method does not support native ETH management; WETH needs to be used instead.\n @param name The name of the pool\n @param symbol The symbol of the pool\n @param lbpParams The LBP configuration (see ILBPool for the struct definition)\n @param swapFeePercentage Initial swap fee percentage (bound by the WeightedPool range)\n @param salt The salt value that will be passed to create3 deployment"},"functionSelector":"74b3dafe","id":47600,"implemented":true,"kind":"function","modifiers":[{"id":47515,"kind":"modifierInvocation","modifierName":{"id":47514,"name":"nonReentrant","nameLocations":["3902:12:125"],"nodeType":"IdentifierPath","referencedDeclaration":9897,"src":"3902:12:125"},"nodeType":"ModifierInvocation","src":"3902:12:125"}],"name":"create","nameLocation":"3729:6:125","nodeType":"FunctionDefinition","parameters":{"id":47513,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47503,"mutability":"mutable","name":"name","nameLocation":"3759:4:125","nodeType":"VariableDeclaration","scope":47600,"src":"3745:18:125","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":47502,"name":"string","nodeType":"ElementaryTypeName","src":"3745:6:125","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":47505,"mutability":"mutable","name":"symbol","nameLocation":"3787:6:125","nodeType":"VariableDeclaration","scope":47600,"src":"3773:20:125","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":47504,"name":"string","nodeType":"ElementaryTypeName","src":"3773:6:125","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":47508,"mutability":"mutable","name":"lbpParams","nameLocation":"3820:9:125","nodeType":"VariableDeclaration","scope":47600,"src":"3803:26:125","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_memory_ptr","typeString":"struct LBPParams"},"typeName":{"id":47507,"nodeType":"UserDefinedTypeName","pathNode":{"id":47506,"name":"LBPParams","nameLocations":["3803:9:125"],"nodeType":"IdentifierPath","referencedDeclaration":84,"src":"3803:9:125"},"referencedDeclaration":84,"src":"3803:9:125","typeDescriptions":{"typeIdentifier":"t_struct$_LBPParams_$84_storage_ptr","typeString":"struct LBPParams"}},"visibility":"internal"},{"constant":false,"id":47510,"mutability":"mutable","name":"swapFeePercentage","nameLocation":"3847:17:125","nodeType":"VariableDeclaration","scope":47600,"src":"3839:25:125","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47509,"name":"uint256","nodeType":"ElementaryTypeName","src":"3839:7:125","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47512,"mutability":"mutable","name":"salt","nameLocation":"3882:4:125","nodeType":"VariableDeclaration","scope":47600,"src":"3874:12:125","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":47511,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3874:7:125","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3735:157:125"},"returnParameters":{"id":47518,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47517,"mutability":"mutable","name":"pool","nameLocation":"3932:4:125","nodeType":"VariableDeclaration","scope":47600,"src":"3924:12:125","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":47516,"name":"address","nodeType":"ElementaryTypeName","src":"3924:7:125","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3923:14:125"},"scope":47645,"src":"3720:1621:125","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":47643,"nodeType":"Block","src":"5494:232:125","statements":[{"expression":{"id":47620,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":47613,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47611,"src":"5504:11:125","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":47618,"name":"_TWO_TOKENS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47416,"src":"5536:11:125","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":47617,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"5518:17:125","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (struct TokenConfig memory[] memory)"},"typeName":{"baseType":{"id":47615,"nodeType":"UserDefinedTypeName","pathNode":{"id":47614,"name":"TokenConfig","nameLocations":["5522:11:125"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"5522:11:125"},"referencedDeclaration":4694,"src":"5522:11:125","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":47616,"nodeType":"ArrayTypeName","src":"5522:13:125","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}}},"id":47619,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5518:30:125","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"src":"5504:44:125","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":47621,"nodeType":"ExpressionStatement","src":"5504:44:125"},{"expression":{"id":47641,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"components":[{"expression":{"baseExpression":{"id":47622,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47611,"src":"5560:11:125","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":47624,"indexExpression":{"hexValue":"30","id":47623,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5572:1:125","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5560:14:125","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":47625,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5575:5:125","memberName":"token","nodeType":"MemberAccess","referencedDeclaration":4685,"src":"5560:20:125","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"expression":{"baseExpression":{"id":47626,"name":"tokenConfig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47611,"src":"5582:11:125","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig memory[] memory"}},"id":47628,"indexExpression":{"hexValue":"31","id":47627,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5594:1:125","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5582:14:125","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_memory_ptr","typeString":"struct TokenConfig memory"}},"id":47629,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberLocation":"5597:5:125","memberName":"token","nodeType":"MemberAccess","referencedDeclaration":4685,"src":"5582:20:125","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"id":47630,"isConstant":false,"isInlineArray":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"TupleExpression","src":"5559:44:125","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC20_$40109_$_t_contract$_IERC20_$40109_$","typeString":"tuple(contract IERC20,contract IERC20)"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"condition":{"commonType":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"id":47633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":47631,"name":"projectToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47603,"src":"5606:12:125","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":47632,"name":"reserveToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47606,"src":"5621:12:125","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"src":"5606:27:125","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"components":[{"id":47637,"name":"reserveToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47606,"src":"5692:12:125","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":47638,"name":"projectToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47603,"src":"5706:12:125","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"id":47639,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5691:28:125","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC20_$40109_$_t_contract$_IERC20_$40109_$","typeString":"tuple(contract IERC20,contract IERC20)"}},"id":47640,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"5606:113:125","trueExpression":{"components":[{"id":47634,"name":"projectToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47603,"src":"5649:12:125","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},{"id":47635,"name":"reserveToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47606,"src":"5663:12:125","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}}],"id":47636,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"5648:28:125","typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC20_$40109_$_t_contract$_IERC20_$40109_$","typeString":"tuple(contract IERC20,contract IERC20)"}},"typeDescriptions":{"typeIdentifier":"t_tuple$_t_contract$_IERC20_$40109_$_t_contract$_IERC20_$40109_$","typeString":"tuple(contract IERC20,contract IERC20)"}},"src":"5559:160:125","typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":47642,"nodeType":"ExpressionStatement","src":"5559:160:125"}]},"id":47644,"implemented":true,"kind":"function","modifiers":[],"name":"_buildTokenConfig","nameLocation":"5356:17:125","nodeType":"FunctionDefinition","parameters":{"id":47607,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47603,"mutability":"mutable","name":"projectToken","nameLocation":"5390:12:125","nodeType":"VariableDeclaration","scope":47644,"src":"5383:19:125","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":47602,"nodeType":"UserDefinedTypeName","pathNode":{"id":47601,"name":"IERC20","nameLocations":["5383:6:125"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"5383:6:125"},"referencedDeclaration":40109,"src":"5383:6:125","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":47606,"mutability":"mutable","name":"reserveToken","nameLocation":"5419:12:125","nodeType":"VariableDeclaration","scope":47644,"src":"5412:19:125","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"},"typeName":{"id":47605,"nodeType":"UserDefinedTypeName","pathNode":{"id":47604,"name":"IERC20","nameLocations":["5412:6:125"],"nodeType":"IdentifierPath","referencedDeclaration":40109,"src":"5412:6:125"},"referencedDeclaration":40109,"src":"5412:6:125","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$40109","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"5373:64:125"},"returnParameters":{"id":47612,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47611,"mutability":"mutable","name":"tokenConfig","nameLocation":"5481:11:125","nodeType":"VariableDeclaration","scope":47644,"src":"5460:32:125","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_memory_ptr_$dyn_memory_ptr","typeString":"struct TokenConfig[]"},"typeName":{"baseType":{"id":47609,"nodeType":"UserDefinedTypeName","pathNode":{"id":47608,"name":"TokenConfig","nameLocations":["5460:11:125"],"nodeType":"IdentifierPath","referencedDeclaration":4694,"src":"5460:11:125"},"referencedDeclaration":4694,"src":"5460:11:125","typeDescriptions":{"typeIdentifier":"t_struct$_TokenConfig_$4694_storage_ptr","typeString":"struct TokenConfig"}},"id":47610,"nodeType":"ArrayTypeName","src":"5460:13:125","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenConfig_$4694_storage_$dyn_storage_ptr","typeString":"struct TokenConfig[]"}},"visibility":"internal"}],"src":"5459:34:125"},"scope":47645,"src":"5347:379:125","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":47646,"src":"1150:4578:125","usedErrors":[203,206,234,1523,1526,4944,5825,9886,40746,40749,40752,47434,47437,47658],"usedEvents":[1517,1520,47431]}],"src":"46:5683:125"},"id":125},"contracts/lib/GradualValueChange.sol":{"ast":{"absolutePath":"contracts/lib/GradualValueChange.sol","exportedSymbols":{"FixedPoint":[8208],"GradualValueChange":[47835],"Math":[43228]},"id":47836,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":47648,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47836,"sourceUnit":8209,"src":"46:92:126","symbolAliases":[{"foreign":{"id":47647,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"55:10:126","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/math/Math.sol","file":"@openzeppelin/contracts/utils/math/Math.sol","id":47650,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47836,"sourceUnit":43229,"src":"139:67:126","symbolAliases":[{"foreign":{"id":47649,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43228,"src":"148:4:126","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":47651,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"208:24:126"},{"abstract":false,"baseContracts":[],"canonicalName":"GradualValueChange","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":47835,"linearizedBaseContracts":[47835],"name":"GradualValueChange","nameLocation":"279:18:126","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":47652,"nodeType":"StructuredDocumentation","src":"304:60:126","text":"@dev Indicates that the start time is after the end time"},"errorSelector":"7d0356f3","id":47658,"name":"GradualUpdateTimeTravel","nameLocation":"375:23:126","nodeType":"ErrorDefinition","parameters":{"id":47657,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47654,"mutability":"mutable","name":"resolvedStartTime","nameLocation":"407:17:126","nodeType":"VariableDeclaration","scope":47658,"src":"399:25:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47653,"name":"uint256","nodeType":"ElementaryTypeName","src":"399:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47656,"mutability":"mutable","name":"endTime","nameLocation":"434:7:126","nodeType":"VariableDeclaration","scope":47658,"src":"426:15:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47655,"name":"uint256","nodeType":"ElementaryTypeName","src":"426:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"398:44:126"},"src":"369:74:126"},{"global":false,"id":47661,"libraryName":{"id":47659,"name":"FixedPoint","nameLocations":["455:10:126"],"nodeType":"IdentifierPath","referencedDeclaration":8208,"src":"455:10:126"},"nodeType":"UsingForDirective","src":"449:29:126","typeName":{"id":47660,"name":"uint256","nodeType":"ElementaryTypeName","src":"470:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}},{"body":{"id":47687,"nodeType":"Block","src":"658:156:126","statements":[{"assignments":[47675],"declarations":[{"constant":false,"id":47675,"mutability":"mutable","name":"pctProgress","nameLocation":"676:11:126","nodeType":"VariableDeclaration","scope":47687,"src":"668:19:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47674,"name":"uint256","nodeType":"ElementaryTypeName","src":"668:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":47680,"initialValue":{"arguments":[{"id":47677,"name":"startTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47667,"src":"719:9:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":47678,"name":"endTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47669,"src":"730:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":47676,"name":"calculateValueChangeProgress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47834,"src":"690:28:126","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) view returns (uint256)"}},"id":47679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"690:48:126","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"668:70:126"},{"expression":{"arguments":[{"id":47682,"name":"startValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47663,"src":"773:10:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":47683,"name":"endValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47665,"src":"785:8:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":47684,"name":"pctProgress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47675,"src":"795:11:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":47681,"name":"interpolateValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47781,"src":"756:16:126","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":47685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"756:51:126","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":47673,"id":47686,"nodeType":"Return","src":"749:58:126"}]},"id":47688,"implemented":true,"kind":"function","modifiers":[],"name":"getInterpolatedValue","nameLocation":"493:20:126","nodeType":"FunctionDefinition","parameters":{"id":47670,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47663,"mutability":"mutable","name":"startValue","nameLocation":"531:10:126","nodeType":"VariableDeclaration","scope":47688,"src":"523:18:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47662,"name":"uint256","nodeType":"ElementaryTypeName","src":"523:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47665,"mutability":"mutable","name":"endValue","nameLocation":"559:8:126","nodeType":"VariableDeclaration","scope":47688,"src":"551:16:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47664,"name":"uint256","nodeType":"ElementaryTypeName","src":"551:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47667,"mutability":"mutable","name":"startTime","nameLocation":"585:9:126","nodeType":"VariableDeclaration","scope":47688,"src":"577:17:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47666,"name":"uint256","nodeType":"ElementaryTypeName","src":"577:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47669,"mutability":"mutable","name":"endTime","nameLocation":"612:7:126","nodeType":"VariableDeclaration","scope":47688,"src":"604:15:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47668,"name":"uint256","nodeType":"ElementaryTypeName","src":"604:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"513:112:126"},"returnParameters":{"id":47673,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47672,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47688,"src":"649:7:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47671,"name":"uint256","nodeType":"ElementaryTypeName","src":"649:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"648:9:126"},"scope":47835,"src":"484:330:126","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":47716,"nodeType":"Block","src":"932:465:126","statements":[{"expression":{"id":47704,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":47697,"name":"resolvedStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47695,"src":"1207:17:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":47700,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"1236:5:126","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":47701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1242:9:126","memberName":"timestamp","nodeType":"MemberAccess","src":"1236:15:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":47702,"name":"startTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47690,"src":"1253:9:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":47698,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43228,"src":"1227:4:126","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$43228_$","typeString":"type(library Math)"}},"id":47699,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1232:3:126","memberName":"max","nodeType":"MemberAccess","referencedDeclaration":42361,"src":"1227:8:126","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":47703,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1227:36:126","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1207:56:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":47705,"nodeType":"ExpressionStatement","src":"1207:56:126"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":47706,"name":"resolvedStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47695,"src":"1278:17:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":47707,"name":"endTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47692,"src":"1299:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1278:28:126","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":47715,"nodeType":"IfStatement","src":"1274:117:126","trueBody":{"id":47714,"nodeType":"Block","src":"1308:83:126","statements":[{"errorCall":{"arguments":[{"id":47710,"name":"resolvedStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47695,"src":"1353:17:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":47711,"name":"endTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47692,"src":"1372:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":47709,"name":"GradualUpdateTimeTravel","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47658,"src":"1329:23:126","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_uint256_$_t_uint256_$returns$_t_error_$","typeString":"function (uint256,uint256) pure returns (error)"}},"id":47712,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1329:51:126","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":47713,"nodeType":"RevertStatement","src":"1322:58:126"}]}}]},"id":47717,"implemented":true,"kind":"function","modifiers":[],"name":"resolveStartTime","nameLocation":"829:16:126","nodeType":"FunctionDefinition","parameters":{"id":47693,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47690,"mutability":"mutable","name":"startTime","nameLocation":"854:9:126","nodeType":"VariableDeclaration","scope":47717,"src":"846:17:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47689,"name":"uint256","nodeType":"ElementaryTypeName","src":"846:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47692,"mutability":"mutable","name":"endTime","nameLocation":"873:7:126","nodeType":"VariableDeclaration","scope":47717,"src":"865:15:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47691,"name":"uint256","nodeType":"ElementaryTypeName","src":"865:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"845:36:126"},"returnParameters":{"id":47696,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47695,"mutability":"mutable","name":"resolvedStartTime","nameLocation":"913:17:126","nodeType":"VariableDeclaration","scope":47717,"src":"905:25:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47694,"name":"uint256","nodeType":"ElementaryTypeName","src":"905:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"904:27:126"},"scope":47835,"src":"820:577:126","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":47780,"nodeType":"Block","src":"1550:536:126","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":47735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":47728,"name":"pctProgress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47723,"src":"1564:11:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"expression":{"id":47729,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"1579:10:126","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$8208_$","typeString":"type(library FixedPoint)"}},"id":47730,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1590:3:126","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":7920,"src":"1579:14:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1564:29:126","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47734,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":47732,"name":"startValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47719,"src":"1597:10:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":47733,"name":"endValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47721,"src":"1611:8:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1597:22:126","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1564:55:126","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":47739,"nodeType":"IfStatement","src":"1560:101:126","trueBody":{"id":47738,"nodeType":"Block","src":"1621:40:126","statements":[{"expression":{"id":47736,"name":"endValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47721,"src":"1642:8:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":47727,"id":47737,"nodeType":"Return","src":"1635:15:126"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":47740,"name":"pctProgress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47723,"src":"1675:11:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":47741,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1690:1:126","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1675:16:126","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":47746,"nodeType":"IfStatement","src":"1671:64:126","trueBody":{"id":47745,"nodeType":"Block","src":"1693:42:126","statements":[{"expression":{"id":47743,"name":"startValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47719,"src":"1714:10:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":47727,"id":47744,"nodeType":"Return","src":"1707:17:126"}]}},{"id":47779,"nodeType":"UncheckedBlock","src":"1745:335:126","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":47747,"name":"startValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47719,"src":"1773:10:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":47748,"name":"endValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47721,"src":"1786:8:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1773:21:126","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":47777,"nodeType":"Block","src":"1936:134:126","statements":[{"assignments":[47765],"declarations":[{"constant":false,"id":47765,"mutability":"mutable","name":"delta","nameLocation":"1962:5:126","nodeType":"VariableDeclaration","scope":47777,"src":"1954:13:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47764,"name":"uint256","nodeType":"ElementaryTypeName","src":"1954:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":47772,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":47768,"name":"endValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47721,"src":"1990:8:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":47769,"name":"startValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47719,"src":"2001:10:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1990:21:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":47766,"name":"pctProgress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47723,"src":"1970:11:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":47767,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1982:7:126","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":7953,"src":"1970:19:126","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":47771,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1970:42:126","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1954:58:126"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":47773,"name":"startValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47719,"src":"2037:10:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":47774,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47765,"src":"2050:5:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2037:18:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":47727,"id":47776,"nodeType":"Return","src":"2030:25:126"}]},"id":47778,"nodeType":"IfStatement","src":"1769:301:126","trueBody":{"id":47763,"nodeType":"Block","src":"1796:134:126","statements":[{"assignments":[47751],"declarations":[{"constant":false,"id":47751,"mutability":"mutable","name":"delta","nameLocation":"1822:5:126","nodeType":"VariableDeclaration","scope":47763,"src":"1814:13:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47750,"name":"uint256","nodeType":"ElementaryTypeName","src":"1814:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":47758,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":47754,"name":"startValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47719,"src":"1850:10:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":47755,"name":"endValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47721,"src":"1863:8:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1850:21:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":47752,"name":"pctProgress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47723,"src":"1830:11:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":47753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1842:7:126","memberName":"mulDown","nodeType":"MemberAccess","referencedDeclaration":7953,"src":"1830:19:126","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":47757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1830:42:126","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1814:58:126"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":47759,"name":"startValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47719,"src":"1897:10:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":47760,"name":"delta","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47751,"src":"1910:5:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1897:18:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":47727,"id":47762,"nodeType":"Return","src":"1890:25:126"}]}}]}]},"id":47781,"implemented":true,"kind":"function","modifiers":[],"name":"interpolateValue","nameLocation":"1412:16:126","nodeType":"FunctionDefinition","parameters":{"id":47724,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47719,"mutability":"mutable","name":"startValue","nameLocation":"1446:10:126","nodeType":"VariableDeclaration","scope":47781,"src":"1438:18:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47718,"name":"uint256","nodeType":"ElementaryTypeName","src":"1438:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47721,"mutability":"mutable","name":"endValue","nameLocation":"1474:8:126","nodeType":"VariableDeclaration","scope":47781,"src":"1466:16:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47720,"name":"uint256","nodeType":"ElementaryTypeName","src":"1466:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47723,"mutability":"mutable","name":"pctProgress","nameLocation":"1500:11:126","nodeType":"VariableDeclaration","scope":47781,"src":"1492:19:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47722,"name":"uint256","nodeType":"ElementaryTypeName","src":"1492:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1428:89:126"},"returnParameters":{"id":47727,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47726,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47781,"src":"1541:7:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47725,"name":"uint256","nodeType":"ElementaryTypeName","src":"1541:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1540:9:126"},"scope":47835,"src":"1403:683:126","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":47833,"nodeType":"Block","src":"2413:615:126","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":47791,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2427:5:126","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":47792,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2433:9:126","memberName":"timestamp","nodeType":"MemberAccess","src":"2427:15:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":47793,"name":"endTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47786,"src":"2446:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2427:26:126","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":47799,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2511:5:126","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":47800,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2517:9:126","memberName":"timestamp","nodeType":"MemberAccess","src":"2511:15:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"id":47801,"name":"startTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47784,"src":"2530:9:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2511:28:126","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":47806,"nodeType":"IfStatement","src":"2507:67:126","trueBody":{"id":47805,"nodeType":"Block","src":"2541:33:126","statements":[{"expression":{"hexValue":"30","id":47803,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2562:1:126","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":47790,"id":47804,"nodeType":"Return","src":"2555:8:126"}]}},"id":47807,"nodeType":"IfStatement","src":"2423:151:126","trueBody":{"id":47798,"nodeType":"Block","src":"2455:46:126","statements":[{"expression":{"expression":{"id":47795,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"2476:10:126","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$8208_$","typeString":"type(library FixedPoint)"}},"id":47796,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"2487:3:126","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":7920,"src":"2476:14:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":47790,"id":47797,"nodeType":"Return","src":"2469:21:126"}]}},{"assignments":[47809],"declarations":[{"constant":false,"id":47809,"mutability":"mutable","name":"totalSeconds","nameLocation":"2704:12:126","nodeType":"VariableDeclaration","scope":47833,"src":"2696:20:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47808,"name":"uint256","nodeType":"ElementaryTypeName","src":"2696:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":47810,"nodeType":"VariableDeclarationStatement","src":"2696:20:126"},{"assignments":[47812],"declarations":[{"constant":false,"id":47812,"mutability":"mutable","name":"secondsElapsed","nameLocation":"2734:14:126","nodeType":"VariableDeclaration","scope":47833,"src":"2726:22:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47811,"name":"uint256","nodeType":"ElementaryTypeName","src":"2726:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":47813,"nodeType":"VariableDeclarationStatement","src":"2726:22:126"},{"id":47827,"nodeType":"UncheckedBlock","src":"2759:127:126","statements":[{"expression":{"id":47818,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":47814,"name":"totalSeconds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47809,"src":"2783:12:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":47815,"name":"endTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47786,"src":"2798:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":47816,"name":"startTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47784,"src":"2808:9:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2798:19:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2783:34:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":47819,"nodeType":"ExpressionStatement","src":"2783:34:126"},{"expression":{"id":47825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":47820,"name":"secondsElapsed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47812,"src":"2831:14:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":47821,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"2848:5:126","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":47822,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2854:9:126","memberName":"timestamp","nodeType":"MemberAccess","src":"2848:15:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":47823,"name":"startTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47784,"src":"2866:9:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2848:27:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2831:44:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":47826,"nodeType":"ExpressionStatement","src":"2831:44:126"}]},{"expression":{"arguments":[{"id":47830,"name":"totalSeconds","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47809,"src":"3008:12:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":47828,"name":"secondsElapsed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47812,"src":"2985:14:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":47829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3000:7:126","memberName":"divDown","nodeType":"MemberAccess","referencedDeclaration":7990,"src":"2985:22:126","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$attached_to$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":47831,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2985:36:126","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":47790,"id":47832,"nodeType":"Return","src":"2978:43:126"}]},"documentation":{"id":47782,"nodeType":"StructuredDocumentation","src":"2092:210:126","text":" @dev Returns a fixed-point number representing how far along the current value change is, where 0 means the\n change has not yet started, and FixedPoint.ONE means it has fully completed."},"id":47834,"implemented":true,"kind":"function","modifiers":[],"name":"calculateValueChangeProgress","nameLocation":"2316:28:126","nodeType":"FunctionDefinition","parameters":{"id":47787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47784,"mutability":"mutable","name":"startTime","nameLocation":"2353:9:126","nodeType":"VariableDeclaration","scope":47834,"src":"2345:17:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47783,"name":"uint256","nodeType":"ElementaryTypeName","src":"2345:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47786,"mutability":"mutable","name":"endTime","nameLocation":"2372:7:126","nodeType":"VariableDeclaration","scope":47834,"src":"2364:15:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47785,"name":"uint256","nodeType":"ElementaryTypeName","src":"2364:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2344:36:126"},"returnParameters":{"id":47790,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47789,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47834,"src":"2404:7:126","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47788,"name":"uint256","nodeType":"ElementaryTypeName","src":"2404:7:126","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2403:9:126"},"scope":47835,"src":"2307:721:126","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":47836,"src":"271:2759:126","usedErrors":[47658],"usedEvents":[]}],"src":"46:2985:126"},"id":126},"contracts/lib/LBPoolLib.sol":{"ast":{"absolutePath":"contracts/lib/LBPoolLib.sol","exportedSymbols":{"FixedPoint":[8208],"GradualValueChange":[47835],"IWeightedPool":[228],"InputHelpers":[6193],"LBPoolLib":[47920]},"id":47921,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":47837,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:127"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol","file":"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol","id":47839,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47921,"sourceUnit":229,"src":"72:103:127","symbolAliases":[{"foreign":{"id":47838,"name":"IWeightedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":228,"src":"81:13:127","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","file":"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol","id":47841,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47921,"sourceUnit":6194,"src":"177:99:127","symbolAliases":[{"foreign":{"id":47840,"name":"InputHelpers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":6193,"src":"186:12:127","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":47843,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47921,"sourceUnit":8209,"src":"277:92:127","symbolAliases":[{"foreign":{"id":47842,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"286:10:127","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/lib/GradualValueChange.sol","file":"./GradualValueChange.sol","id":47845,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47921,"sourceUnit":47836,"src":"371:62:127","symbolAliases":[{"foreign":{"id":47844,"name":"GradualValueChange","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47835,"src":"380:18:127","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"LBPoolLib","contractDependencies":[],"contractKind":"library","fullyImplemented":true,"id":47920,"linearizedBaseContracts":[47920],"name":"LBPoolLib","nameLocation":"443:9:127","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":47848,"mutability":"constant","name":"_MIN_WEIGHT","nameLocation":"526:11:127","nodeType":"VariableDeclaration","scope":47920,"src":"500:44:127","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47846,"name":"uint256","nodeType":"ElementaryTypeName","src":"500:7:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"value":{"hexValue":"31653136","id":47847,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"540:4:127","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"},"value":"1e16"},"visibility":"internal"},{"body":{"id":47918,"nodeType":"Block","src":"1024:627:127","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":47880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":47876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":47872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":47866,"name":"projectStartWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47855,"src":"1051:18:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":47867,"name":"_MIN_WEIGHT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47848,"src":"1072:11:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1051:32:127","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":47869,"name":"reserveStartWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47857,"src":"1099:18:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":47870,"name":"_MIN_WEIGHT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47848,"src":"1120:11:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1099:32:127","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1051:80:127","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":47873,"name":"projectEndWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47859,"src":"1147:16:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":47874,"name":"_MIN_WEIGHT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47848,"src":"1166:11:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1147:30:127","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1051:126:127","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":47877,"name":"reserveEndWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47861,"src":"1193:16:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":47878,"name":"_MIN_WEIGHT","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47848,"src":"1212:11:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1193:30:127","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1051:172:127","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":47887,"nodeType":"IfStatement","src":"1034:257:127","trueBody":{"id":47886,"nodeType":"Block","src":"1234:57:127","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":47881,"name":"IWeightedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":228,"src":"1255:13:127","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWeightedPool_$228_$","typeString":"type(contract IWeightedPool)"}},"id":47883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1269:9:127","memberName":"MinWeight","nodeType":"MemberAccess","referencedDeclaration":203,"src":"1255:23:127","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":47884,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1255:25:127","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":47885,"nodeType":"RevertStatement","src":"1248:32:127"}]}},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":47900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47893,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":47888,"name":"projectStartWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47855,"src":"1318:18:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":47889,"name":"reserveStartWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47857,"src":"1339:18:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1318:39:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":47891,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"1361:10:127","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$8208_$","typeString":"type(library FixedPoint)"}},"id":47892,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1372:3:127","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":7920,"src":"1361:14:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1318:57:127","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47899,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":47896,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":47894,"name":"projectEndWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47859,"src":"1391:16:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":47895,"name":"reserveEndWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47861,"src":"1410:16:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1391:35:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"expression":{"id":47897,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"1430:10:127","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$8208_$","typeString":"type(library FixedPoint)"}},"id":47898,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1441:3:127","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":7920,"src":"1430:14:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1391:53:127","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1318:126:127","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":47907,"nodeType":"IfStatement","src":"1301:227:127","trueBody":{"id":47906,"nodeType":"Block","src":"1455:73:127","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":47901,"name":"IWeightedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":228,"src":"1476:13:127","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IWeightedPool_$228_$","typeString":"type(contract IWeightedPool)"}},"id":47903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1490:25:127","memberName":"NormalizedWeightInvariant","nodeType":"MemberAccess","referencedDeclaration":206,"src":"1476:39:127","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":47904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1476:41:127","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":47905,"nodeType":"RevertStatement","src":"1469:48:127"}]}},{"expression":{"id":47914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":47908,"name":"actualStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47864,"src":"1538:15:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":47911,"name":"startTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47851,"src":"1592:9:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":47912,"name":"endTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47853,"src":"1603:7:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":47909,"name":"GradualValueChange","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47835,"src":"1556:18:127","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_GradualValueChange_$47835_$","typeString":"type(library GradualValueChange)"}},"id":47910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1575:16:127","memberName":"resolveStartTime","nodeType":"MemberAccess","referencedDeclaration":47717,"src":"1556:35:127","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) view returns (uint256)"}},"id":47913,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1556:55:127","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1538:73:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":47915,"nodeType":"ExpressionStatement","src":"1538:73:127"},{"expression":{"id":47916,"name":"actualStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47864,"src":"1629:15:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":47865,"id":47917,"nodeType":"Return","src":"1622:22:127"}]},"documentation":{"id":47849,"nodeType":"StructuredDocumentation","src":"557:178:127","text":" @dev Normalize `startTime` to block.now (`actualStartTime`) if it's in the past, and verify that\n `endTime` > `actualStartTime` as well as token weights."},"id":47919,"implemented":true,"kind":"function","modifiers":[],"name":"verifyWeightUpdateParameters","nameLocation":"749:28:127","nodeType":"FunctionDefinition","parameters":{"id":47862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47851,"mutability":"mutable","name":"startTime","nameLocation":"795:9:127","nodeType":"VariableDeclaration","scope":47919,"src":"787:17:127","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47850,"name":"uint256","nodeType":"ElementaryTypeName","src":"787:7:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47853,"mutability":"mutable","name":"endTime","nameLocation":"822:7:127","nodeType":"VariableDeclaration","scope":47919,"src":"814:15:127","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47852,"name":"uint256","nodeType":"ElementaryTypeName","src":"814:7:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47855,"mutability":"mutable","name":"projectStartWeight","nameLocation":"847:18:127","nodeType":"VariableDeclaration","scope":47919,"src":"839:26:127","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47854,"name":"uint256","nodeType":"ElementaryTypeName","src":"839:7:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47857,"mutability":"mutable","name":"reserveStartWeight","nameLocation":"883:18:127","nodeType":"VariableDeclaration","scope":47919,"src":"875:26:127","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47856,"name":"uint256","nodeType":"ElementaryTypeName","src":"875:7:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47859,"mutability":"mutable","name":"projectEndWeight","nameLocation":"919:16:127","nodeType":"VariableDeclaration","scope":47919,"src":"911:24:127","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47858,"name":"uint256","nodeType":"ElementaryTypeName","src":"911:7:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47861,"mutability":"mutable","name":"reserveEndWeight","nameLocation":"953:16:127","nodeType":"VariableDeclaration","scope":47919,"src":"945:24:127","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47860,"name":"uint256","nodeType":"ElementaryTypeName","src":"945:7:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"777:198:127"},"returnParameters":{"id":47865,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47864,"mutability":"mutable","name":"actualStartTime","nameLocation":"1007:15:127","nodeType":"VariableDeclaration","scope":47919,"src":"999:23:127","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47863,"name":"uint256","nodeType":"ElementaryTypeName","src":"999:7:127","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"998:25:127"},"scope":47920,"src":"740:911:127","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":47921,"src":"435:1218:127","usedErrors":[],"usedEvents":[]}],"src":"46:1608:127"},"id":127},"contracts/test/GradualValueChangeMock.sol":{"ast":{"absolutePath":"contracts/test/GradualValueChangeMock.sol","exportedSymbols":{"FixedPoint":[8208],"GradualValueChange":[47835],"GradualValueChangeMock":[47997],"Math":[43228]},"id":47998,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":47922,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:128"},{"absolutePath":"contracts/lib/GradualValueChange.sol","file":"../lib/GradualValueChange.sol","id":47923,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":47998,"sourceUnit":47836,"src":"72:39:128","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"GradualValueChangeMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":47997,"linearizedBaseContracts":[47997],"name":"GradualValueChangeMock","nameLocation":"122:22:128","nodeType":"ContractDefinition","nodes":[{"body":{"id":47944,"nodeType":"Block","src":"323:105:128","statements":[{"expression":{"arguments":[{"id":47938,"name":"startValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47925,"src":"380:10:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":47939,"name":"endValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47927,"src":"392:8:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":47940,"name":"startTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47929,"src":"402:9:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":47941,"name":"endTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47931,"src":"413:7:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":47936,"name":"GradualValueChange","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47835,"src":"340:18:128","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_GradualValueChange_$47835_$","typeString":"type(library GradualValueChange)"}},"id":47937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"359:20:128","memberName":"getInterpolatedValue","nodeType":"MemberAccess","referencedDeclaration":47688,"src":"340:39:128","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256) view returns (uint256)"}},"id":47942,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"340:81:128","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":47935,"id":47943,"nodeType":"Return","src":"333:88:128"}]},"functionSelector":"352f5c77","id":47945,"implemented":true,"kind":"function","modifiers":[],"name":"getInterpolatedValue","nameLocation":"160:20:128","nodeType":"FunctionDefinition","parameters":{"id":47932,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47925,"mutability":"mutable","name":"startValue","nameLocation":"198:10:128","nodeType":"VariableDeclaration","scope":47945,"src":"190:18:128","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47924,"name":"uint256","nodeType":"ElementaryTypeName","src":"190:7:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47927,"mutability":"mutable","name":"endValue","nameLocation":"226:8:128","nodeType":"VariableDeclaration","scope":47945,"src":"218:16:128","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47926,"name":"uint256","nodeType":"ElementaryTypeName","src":"218:7:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47929,"mutability":"mutable","name":"startTime","nameLocation":"252:9:128","nodeType":"VariableDeclaration","scope":47945,"src":"244:17:128","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47928,"name":"uint256","nodeType":"ElementaryTypeName","src":"244:7:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47931,"mutability":"mutable","name":"endTime","nameLocation":"279:7:128","nodeType":"VariableDeclaration","scope":47945,"src":"271:15:128","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47930,"name":"uint256","nodeType":"ElementaryTypeName","src":"271:7:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"180:112:128"},"returnParameters":{"id":47935,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47934,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47945,"src":"314:7:128","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47933,"name":"uint256","nodeType":"ElementaryTypeName","src":"314:7:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"313:9:128"},"scope":47997,"src":"151:277:128","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":47960,"nodeType":"Block","src":"526:79:128","statements":[{"expression":{"arguments":[{"id":47956,"name":"startTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47947,"src":"579:9:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":47957,"name":"endTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47949,"src":"590:7:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":47954,"name":"GradualValueChange","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47835,"src":"543:18:128","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_GradualValueChange_$47835_$","typeString":"type(library GradualValueChange)"}},"id":47955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"562:16:128","memberName":"resolveStartTime","nodeType":"MemberAccess","referencedDeclaration":47717,"src":"543:35:128","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) view returns (uint256)"}},"id":47958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"543:55:128","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":47953,"id":47959,"nodeType":"Return","src":"536:62:128"}]},"functionSelector":"b470d7e0","id":47961,"implemented":true,"kind":"function","modifiers":[],"name":"resolveStartTime","nameLocation":"443:16:128","nodeType":"FunctionDefinition","parameters":{"id":47950,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47947,"mutability":"mutable","name":"startTime","nameLocation":"468:9:128","nodeType":"VariableDeclaration","scope":47961,"src":"460:17:128","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47946,"name":"uint256","nodeType":"ElementaryTypeName","src":"460:7:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47949,"mutability":"mutable","name":"endTime","nameLocation":"487:7:128","nodeType":"VariableDeclaration","scope":47961,"src":"479:15:128","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47948,"name":"uint256","nodeType":"ElementaryTypeName","src":"479:7:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"459:36:128"},"returnParameters":{"id":47953,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47952,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47961,"src":"517:7:128","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47951,"name":"uint256","nodeType":"ElementaryTypeName","src":"517:7:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"516:9:128"},"scope":47997,"src":"434:171:128","stateMutability":"view","virtual":false,"visibility":"public"},{"body":{"id":47979,"nodeType":"Block","src":"726:94:128","statements":[{"expression":{"arguments":[{"id":47974,"name":"startValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47963,"src":"779:10:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":47975,"name":"endValue","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47965,"src":"791:8:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":47976,"name":"pctProgress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47967,"src":"801:11:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":47972,"name":"GradualValueChange","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47835,"src":"743:18:128","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_GradualValueChange_$47835_$","typeString":"type(library GradualValueChange)"}},"id":47973,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"762:16:128","memberName":"interpolateValue","nodeType":"MemberAccess","referencedDeclaration":47781,"src":"743:35:128","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":47977,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"743:70:128","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":47971,"id":47978,"nodeType":"Return","src":"736:77:128"}]},"functionSelector":"c97c5ec2","id":47980,"implemented":true,"kind":"function","modifiers":[],"name":"interpolateValue","nameLocation":"620:16:128","nodeType":"FunctionDefinition","parameters":{"id":47968,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47963,"mutability":"mutable","name":"startValue","nameLocation":"645:10:128","nodeType":"VariableDeclaration","scope":47980,"src":"637:18:128","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47962,"name":"uint256","nodeType":"ElementaryTypeName","src":"637:7:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47965,"mutability":"mutable","name":"endValue","nameLocation":"665:8:128","nodeType":"VariableDeclaration","scope":47980,"src":"657:16:128","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47964,"name":"uint256","nodeType":"ElementaryTypeName","src":"657:7:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47967,"mutability":"mutable","name":"pctProgress","nameLocation":"683:11:128","nodeType":"VariableDeclaration","scope":47980,"src":"675:19:128","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47966,"name":"uint256","nodeType":"ElementaryTypeName","src":"675:7:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"636:59:128"},"returnParameters":{"id":47971,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47970,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47980,"src":"717:7:128","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47969,"name":"uint256","nodeType":"ElementaryTypeName","src":"717:7:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"716:9:128"},"scope":47997,"src":"611:209:128","stateMutability":"pure","virtual":false,"visibility":"public"},{"body":{"id":47995,"nodeType":"Block","src":"930:91:128","statements":[{"expression":{"arguments":[{"id":47991,"name":"startTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47982,"src":"995:9:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":47992,"name":"endTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47984,"src":"1006:7:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":47989,"name":"GradualValueChange","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47835,"src":"947:18:128","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_GradualValueChange_$47835_$","typeString":"type(library GradualValueChange)"}},"id":47990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"966:28:128","memberName":"calculateValueChangeProgress","nodeType":"MemberAccess","referencedDeclaration":47834,"src":"947:47:128","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) view returns (uint256)"}},"id":47993,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"947:67:128","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":47988,"id":47994,"nodeType":"Return","src":"940:74:128"}]},"functionSelector":"cb850710","id":47996,"implemented":true,"kind":"function","modifiers":[],"name":"calculateValueChangeProgress","nameLocation":"835:28:128","nodeType":"FunctionDefinition","parameters":{"id":47985,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47982,"mutability":"mutable","name":"startTime","nameLocation":"872:9:128","nodeType":"VariableDeclaration","scope":47996,"src":"864:17:128","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47981,"name":"uint256","nodeType":"ElementaryTypeName","src":"864:7:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":47984,"mutability":"mutable","name":"endTime","nameLocation":"891:7:128","nodeType":"VariableDeclaration","scope":47996,"src":"883:15:128","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47983,"name":"uint256","nodeType":"ElementaryTypeName","src":"883:7:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"863:36:128"},"returnParameters":{"id":47988,"nodeType":"ParameterList","parameters":[{"constant":false,"id":47987,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":47996,"src":"921:7:128","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":47986,"name":"uint256","nodeType":"ElementaryTypeName","src":"921:7:128","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"920:9:128"},"scope":47997,"src":"826:195:128","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":47998,"src":"113:910:128","usedErrors":[47658],"usedEvents":[]}],"src":"46:978:128"},"id":128},"contracts/test/HardhatImports.sol":{"ast":{"absolutePath":"contracts/test/HardhatImports.sol","exportedSymbols":{"BasicAuthorizerMock":[31744],"BatchRouterMock":[31853],"BufferRouterMock":[31948],"PoolHooksMock":[34144],"ProtocolFeeControllerMock":[34576],"RateProviderMock":[34616],"RouterMock":[35375],"VaultAdminMock":[35809],"VaultExtensionMock":[35961],"VaultMock":[38836]},"id":48020,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":47999,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:129"},{"absolutePath":"@balancer-labs/v3-vault/contracts/test/VaultMock.sol","file":"@balancer-labs/v3-vault/contracts/test/VaultMock.sol","id":48001,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":48020,"sourceUnit":38837,"src":"155:81:129","symbolAliases":[{"foreign":{"id":48000,"name":"VaultMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":38836,"src":"164:9:129","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/test/BasicAuthorizerMock.sol","file":"@balancer-labs/v3-vault/contracts/test/BasicAuthorizerMock.sol","id":48003,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":48020,"sourceUnit":31745,"src":"237:101:129","symbolAliases":[{"foreign":{"id":48002,"name":"BasicAuthorizerMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31744,"src":"246:19:129","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/test/VaultAdminMock.sol","file":"@balancer-labs/v3-vault/contracts/test/VaultAdminMock.sol","id":48005,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":48020,"sourceUnit":35810,"src":"339:91:129","symbolAliases":[{"foreign":{"id":48004,"name":"VaultAdminMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35809,"src":"348:14:129","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/test/VaultExtensionMock.sol","file":"@balancer-labs/v3-vault/contracts/test/VaultExtensionMock.sol","id":48007,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":48020,"sourceUnit":35962,"src":"431:99:129","symbolAliases":[{"foreign":{"id":48006,"name":"VaultExtensionMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35961,"src":"440:18:129","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/test/ProtocolFeeControllerMock.sol","file":"@balancer-labs/v3-vault/contracts/test/ProtocolFeeControllerMock.sol","id":48009,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":48020,"sourceUnit":34577,"src":"531:113:129","symbolAliases":[{"foreign":{"id":48008,"name":"ProtocolFeeControllerMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34576,"src":"540:25:129","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/test/RouterMock.sol","file":"@balancer-labs/v3-vault/contracts/test/RouterMock.sol","id":48011,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":48020,"sourceUnit":35376,"src":"645:83:129","symbolAliases":[{"foreign":{"id":48010,"name":"RouterMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":35375,"src":"654:10:129","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/test/BatchRouterMock.sol","file":"@balancer-labs/v3-vault/contracts/test/BatchRouterMock.sol","id":48013,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":48020,"sourceUnit":31854,"src":"729:93:129","symbolAliases":[{"foreign":{"id":48012,"name":"BatchRouterMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31853,"src":"738:15:129","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/test/BufferRouterMock.sol","file":"@balancer-labs/v3-vault/contracts/test/BufferRouterMock.sol","id":48015,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":48020,"sourceUnit":31949,"src":"823:95:129","symbolAliases":[{"foreign":{"id":48014,"name":"BufferRouterMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31948,"src":"832:16:129","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/test/PoolHooksMock.sol","file":"@balancer-labs/v3-vault/contracts/test/PoolHooksMock.sol","id":48017,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":48020,"sourceUnit":34145,"src":"919:89:129","symbolAliases":[{"foreign":{"id":48016,"name":"PoolHooksMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34144,"src":"928:13:129","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/test/RateProviderMock.sol","file":"@balancer-labs/v3-vault/contracts/test/RateProviderMock.sol","id":48019,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":48020,"sourceUnit":34617,"src":"1009:95:129","symbolAliases":[{"foreign":{"id":48018,"name":"RateProviderMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":34616,"src":"1018:16:129","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""}],"src":"46:1059:129"},"id":129},"contracts/test/WeightedBasePoolMathMock.sol":{"ast":{"absolutePath":"contracts/test/WeightedBasePoolMathMock.sol","exportedSymbols":{"BasePoolMathMock":[31591],"Rounding":[4732],"WeightedBasePoolMathMock":[48101],"WeightedMath":[9873]},"id":48102,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":48021,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:130"},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/WeightedMath.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/WeightedMath.sol","id":48023,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":48102,"sourceUnit":9874,"src":"72:96:130","symbolAliases":[{"foreign":{"id":48022,"name":"WeightedMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9873,"src":"81:12:130","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":48025,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":48102,"sourceUnit":4872,"src":"169:87:130","symbolAliases":[{"foreign":{"id":48024,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"178:8:130","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-vault/contracts/test/BasePoolMathMock.sol","file":"@balancer-labs/v3-vault/contracts/test/BasePoolMathMock.sol","id":48027,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":48102,"sourceUnit":31592,"src":"258:95:130","symbolAliases":[{"foreign":{"id":48026,"name":"BasePoolMathMock","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31591,"src":"267:16:130","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":48028,"name":"BasePoolMathMock","nameLocations":["490:16:130"],"nodeType":"IdentifierPath","referencedDeclaration":31591,"src":"490:16:130"},"id":48029,"nodeType":"InheritanceSpecifier","src":"490:16:130"}],"canonicalName":"WeightedBasePoolMathMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":48101,"internalFunctionIDs":{"7990":1,"8006":2},"linearizedBaseContracts":[48101,31591,1505,3073,3057],"name":"WeightedBasePoolMathMock","nameLocation":"462:24:130","nodeType":"ContractDefinition","nodes":[{"constant":false,"functionSelector":"b5f163ff","id":48032,"mutability":"mutable","name":"weights","nameLocation":"530:7:130","nodeType":"VariableDeclaration","scope":48101,"src":"513:24:130","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[]"},"typeName":{"baseType":{"id":48030,"name":"uint256","nodeType":"ElementaryTypeName","src":"513:7:130","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":48031,"nodeType":"ArrayTypeName","src":"513:9:130","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"public"},{"body":{"id":48042,"nodeType":"Block","src":"583:35:130","statements":[{"expression":{"id":48040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":48038,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48032,"src":"593:7:130","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":48039,"name":"_weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48035,"src":"603:8:130","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"593:18:130","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":48041,"nodeType":"ExpressionStatement","src":"593:18:130"}]},"id":48043,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":48036,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48035,"mutability":"mutable","name":"_weights","nameLocation":"573:8:130","nodeType":"VariableDeclaration","scope":48043,"src":"556:25:130","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":48033,"name":"uint256","nodeType":"ElementaryTypeName","src":"556:7:130","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":48034,"nodeType":"ArrayTypeName","src":"556:9:130","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"555:27:130"},"returnParameters":{"id":48037,"nodeType":"ParameterList","parameters":[],"src":"583:0:130"},"scope":48101,"src":"544:74:130","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[31347],"body":{"id":48074,"nodeType":"Block","src":"769:249:130","statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"},"id":48058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":48055,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48049,"src":"783:8:130","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":48056,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"795:8:130","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":48057,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"804:10:130","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":4731,"src":"795:19:130","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"src":"783:31:130","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":48072,"nodeType":"Block","src":"918:94:130","statements":[{"expression":{"arguments":[{"id":48068,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48032,"src":"971:7:130","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},{"id":48069,"name":"balancesLiveScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48046,"src":"980:20:130","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"expression":{"id":48066,"name":"WeightedMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9873,"src":"939:12:130","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WeightedMath_$9873_$","typeString":"type(library WeightedMath)"}},"id":48067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"952:18:130","memberName":"computeInvariantUp","nodeType":"MemberAccess","referencedDeclaration":9699,"src":"939:31:130","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256)"}},"id":48070,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"939:62:130","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":48054,"id":48071,"nodeType":"Return","src":"932:69:130"}]},"id":48073,"nodeType":"IfStatement","src":"779:233:130","trueBody":{"id":48065,"nodeType":"Block","src":"816:96:130","statements":[{"expression":{"arguments":[{"id":48061,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48032,"src":"871:7:130","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},{"id":48062,"name":"balancesLiveScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48046,"src":"880:20:130","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"expression":{"id":48059,"name":"WeightedMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9873,"src":"837:12:130","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WeightedMath_$9873_$","typeString":"type(library WeightedMath)"}},"id":48060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"850:20:130","memberName":"computeInvariantDown","nodeType":"MemberAccess","referencedDeclaration":9646,"src":"837:33:130","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256)"}},"id":48063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"837:64:130","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":48054,"id":48064,"nodeType":"Return","src":"830:71:130"}]}}]},"functionSelector":"984de9e8","id":48075,"implemented":true,"kind":"function","modifiers":[],"name":"computeInvariant","nameLocation":"633:16:130","nodeType":"FunctionDefinition","overrides":{"id":48051,"nodeType":"OverrideSpecifier","overrides":[],"src":"742:8:130"},"parameters":{"id":48050,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48046,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"676:20:130","nodeType":"VariableDeclaration","scope":48075,"src":"659:37:130","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":48044,"name":"uint256","nodeType":"ElementaryTypeName","src":"659:7:130","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":48045,"nodeType":"ArrayTypeName","src":"659:9:130","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":48049,"mutability":"mutable","name":"rounding","nameLocation":"715:8:130","nodeType":"VariableDeclaration","scope":48075,"src":"706:17:130","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"},"typeName":{"id":48048,"nodeType":"UserDefinedTypeName","pathNode":{"id":48047,"name":"Rounding","nameLocations":["706:8:130"],"nodeType":"IdentifierPath","referencedDeclaration":4732,"src":"706:8:130"},"referencedDeclaration":4732,"src":"706:8:130","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"visibility":"internal"}],"src":"649:80:130"},"returnParameters":{"id":48054,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48053,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48075,"src":"760:7:130","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48052,"name":"uint256","nodeType":"ElementaryTypeName","src":"760:7:130","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"759:9:130"},"scope":48101,"src":"624:394:130","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[31359],"body":{"id":48099,"nodeType":"Block","src":"1215:217:130","statements":[{"expression":{"arguments":[{"baseExpression":{"id":48090,"name":"balancesLiveScaled18","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48078,"src":"1306:20:130","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":48092,"indexExpression":{"id":48091,"name":"tokenInIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48080,"src":"1327:12:130","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1306:34:130","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":48093,"name":"weights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48032,"src":"1358:7:130","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":48095,"indexExpression":{"id":48094,"name":"tokenInIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48080,"src":"1366:12:130","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1358:21:130","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":48096,"name":"invariantRatio","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48082,"src":"1397:14:130","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":48088,"name":"WeightedMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9873,"src":"1244:12:130","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WeightedMath_$9873_$","typeString":"type(library WeightedMath)"}},"id":48089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1257:31:130","memberName":"computeBalanceOutGivenInvariant","nodeType":"MemberAccess","referencedDeclaration":9747,"src":"1244:44:130","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":48097,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1244:181:130","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":48087,"id":48098,"nodeType":"Return","src":"1225:200:130"}]},"functionSelector":"16a0b3e0","id":48100,"implemented":true,"kind":"function","modifiers":[],"name":"computeBalance","nameLocation":"1033:14:130","nodeType":"FunctionDefinition","overrides":{"id":48084,"nodeType":"OverrideSpecifier","overrides":[],"src":"1177:8:130"},"parameters":{"id":48083,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48078,"mutability":"mutable","name":"balancesLiveScaled18","nameLocation":"1074:20:130","nodeType":"VariableDeclaration","scope":48100,"src":"1057:37:130","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":48076,"name":"uint256","nodeType":"ElementaryTypeName","src":"1057:7:130","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":48077,"nodeType":"ArrayTypeName","src":"1057:9:130","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":48080,"mutability":"mutable","name":"tokenInIndex","nameLocation":"1112:12:130","nodeType":"VariableDeclaration","scope":48100,"src":"1104:20:130","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48079,"name":"uint256","nodeType":"ElementaryTypeName","src":"1104:7:130","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48082,"mutability":"mutable","name":"invariantRatio","nameLocation":"1142:14:130","nodeType":"VariableDeclaration","scope":48100,"src":"1134:22:130","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48081,"name":"uint256","nodeType":"ElementaryTypeName","src":"1134:7:130","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1047:115:130"},"returnParameters":{"id":48087,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48086,"mutability":"mutable","name":"newBalance","nameLocation":"1203:10:130","nodeType":"VariableDeclaration","scope":48100,"src":"1195:18:130","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48085,"name":"uint256","nodeType":"ElementaryTypeName","src":"1195:7:130","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1194:20:130"},"scope":48101,"src":"1024:408:130","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":48102,"src":"453:981:130","usedErrors":[7917,8214,8217,8220,8223,9581,11367,11374],"usedEvents":[]}],"src":"46:1389:130"},"id":130},"contracts/test/WeightedMathMock.sol":{"ast":{"absolutePath":"contracts/test/WeightedMathMock.sol","exportedSymbols":{"Rounding":[4732],"WeightedMath":[9873],"WeightedMathMock":[48192]},"id":48193,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":48103,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:131"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol","id":48105,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":48193,"sourceUnit":4872,"src":"72:87:131","symbolAliases":[{"foreign":{"id":48104,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"81:8:131","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/WeightedMath.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/WeightedMath.sol","id":48107,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":48193,"sourceUnit":9874,"src":"161:96:131","symbolAliases":[{"foreign":{"id":48106,"name":"WeightedMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9873,"src":"170:12:131","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"WeightedMathMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":48192,"linearizedBaseContracts":[48192],"name":"WeightedMathMock","nameLocation":"268:16:131","nodeType":"ContractDefinition","nodes":[{"body":{"id":48140,"nodeType":"Block","src":"461:245:131","statements":[{"condition":{"commonType":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"},"id":48124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":48121,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48116,"src":"475:8:131","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":48122,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":4732,"src":"487:8:131","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$4732_$","typeString":"type(enum Rounding)"}},"id":48123,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"496:10:131","memberName":"ROUND_DOWN","nodeType":"MemberAccess","referencedDeclaration":4731,"src":"487:19:131","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"src":"475:31:131","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":48138,"nodeType":"Block","src":"608:92:131","statements":[{"expression":{"arguments":[{"id":48134,"name":"normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48110,"src":"661:17:131","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":48135,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48113,"src":"680:8:131","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"expression":{"id":48132,"name":"WeightedMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9873,"src":"629:12:131","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WeightedMath_$9873_$","typeString":"type(library WeightedMath)"}},"id":48133,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"642:18:131","memberName":"computeInvariantUp","nodeType":"MemberAccess","referencedDeclaration":9699,"src":"629:31:131","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256)"}},"id":48136,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"629:60:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":48120,"id":48137,"nodeType":"Return","src":"622:67:131"}]},"id":48139,"nodeType":"IfStatement","src":"471:229:131","trueBody":{"id":48131,"nodeType":"Block","src":"508:94:131","statements":[{"expression":{"arguments":[{"id":48127,"name":"normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48110,"src":"563:17:131","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},{"id":48128,"name":"balances","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48113,"src":"582:8:131","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"},{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}],"expression":{"id":48125,"name":"WeightedMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9873,"src":"529:12:131","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WeightedMath_$9873_$","typeString":"type(library WeightedMath)"}},"id":48126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"542:20:131","memberName":"computeInvariantDown","nodeType":"MemberAccess","referencedDeclaration":9646,"src":"529:33:131","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_array$_t_uint256_$dyn_memory_ptr_$_t_array$_t_uint256_$dyn_memory_ptr_$returns$_t_uint256_$","typeString":"function (uint256[] memory,uint256[] memory) pure returns (uint256)"}},"id":48129,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"529:62:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":48120,"id":48130,"nodeType":"Return","src":"522:69:131"}]}}]},"functionSelector":"f33d1410","id":48141,"implemented":true,"kind":"function","modifiers":[],"name":"computeInvariant","nameLocation":"300:16:131","nodeType":"FunctionDefinition","parameters":{"id":48117,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48110,"mutability":"mutable","name":"normalizedWeights","nameLocation":"343:17:131","nodeType":"VariableDeclaration","scope":48141,"src":"326:34:131","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":48108,"name":"uint256","nodeType":"ElementaryTypeName","src":"326:7:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":48109,"nodeType":"ArrayTypeName","src":"326:9:131","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":48113,"mutability":"mutable","name":"balances","nameLocation":"387:8:131","nodeType":"VariableDeclaration","scope":48141,"src":"370:25:131","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":48111,"name":"uint256","nodeType":"ElementaryTypeName","src":"370:7:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":48112,"nodeType":"ArrayTypeName","src":"370:9:131","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":48116,"mutability":"mutable","name":"rounding","nameLocation":"414:8:131","nodeType":"VariableDeclaration","scope":48141,"src":"405:17:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"},"typeName":{"id":48115,"nodeType":"UserDefinedTypeName","pathNode":{"id":48114,"name":"Rounding","nameLocations":["405:8:131"],"nodeType":"IdentifierPath","referencedDeclaration":4732,"src":"405:8:131"},"referencedDeclaration":4732,"src":"405:8:131","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$4732","typeString":"enum Rounding"}},"visibility":"internal"}],"src":"316:112:131"},"returnParameters":{"id":48120,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48119,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48141,"src":"452:7:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48118,"name":"uint256","nodeType":"ElementaryTypeName","src":"452:7:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"451:9:131"},"scope":48192,"src":"291:415:131","stateMutability":"pure","virtual":false,"visibility":"external"},{"body":{"id":48165,"nodeType":"Block","src":"916:113:131","statements":[{"expression":{"arguments":[{"id":48158,"name":"balanceIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48143,"src":"969:9:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":48159,"name":"weightIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48145,"src":"980:8:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":48160,"name":"balanceOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48147,"src":"990:10:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":48161,"name":"weightOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48149,"src":"1002:9:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":48162,"name":"amountIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48151,"src":"1013:8:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":48156,"name":"WeightedMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9873,"src":"933:12:131","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WeightedMath_$9873_$","typeString":"type(library WeightedMath)"}},"id":48157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"946:22:131","memberName":"computeOutGivenExactIn","nodeType":"MemberAccess","referencedDeclaration":9809,"src":"933:35:131","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256,uint256) pure returns (uint256)"}},"id":48163,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"933:89:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":48155,"id":48164,"nodeType":"Return","src":"926:96:131"}]},"functionSelector":"3c42a2d6","id":48166,"implemented":true,"kind":"function","modifiers":[],"name":"computeOutGivenExactIn","nameLocation":"721:22:131","nodeType":"FunctionDefinition","parameters":{"id":48152,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48143,"mutability":"mutable","name":"balanceIn","nameLocation":"761:9:131","nodeType":"VariableDeclaration","scope":48166,"src":"753:17:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48142,"name":"uint256","nodeType":"ElementaryTypeName","src":"753:7:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48145,"mutability":"mutable","name":"weightIn","nameLocation":"788:8:131","nodeType":"VariableDeclaration","scope":48166,"src":"780:16:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48144,"name":"uint256","nodeType":"ElementaryTypeName","src":"780:7:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48147,"mutability":"mutable","name":"balanceOut","nameLocation":"814:10:131","nodeType":"VariableDeclaration","scope":48166,"src":"806:18:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48146,"name":"uint256","nodeType":"ElementaryTypeName","src":"806:7:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48149,"mutability":"mutable","name":"weightOut","nameLocation":"842:9:131","nodeType":"VariableDeclaration","scope":48166,"src":"834:17:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48148,"name":"uint256","nodeType":"ElementaryTypeName","src":"834:7:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48151,"mutability":"mutable","name":"amountIn","nameLocation":"869:8:131","nodeType":"VariableDeclaration","scope":48166,"src":"861:16:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48150,"name":"uint256","nodeType":"ElementaryTypeName","src":"861:7:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"743:140:131"},"returnParameters":{"id":48155,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48154,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48166,"src":"907:7:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48153,"name":"uint256","nodeType":"ElementaryTypeName","src":"907:7:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"906:9:131"},"scope":48192,"src":"712:317:131","stateMutability":"pure","virtual":false,"visibility":"external"},{"body":{"id":48190,"nodeType":"Block","src":"1240:114:131","statements":[{"expression":{"arguments":[{"id":48183,"name":"balanceIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48168,"src":"1293:9:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":48184,"name":"weightIn","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48170,"src":"1304:8:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":48185,"name":"balanceOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48172,"src":"1314:10:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":48186,"name":"weightOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48174,"src":"1326:9:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":48187,"name":"amountOut","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48176,"src":"1337:9:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":48181,"name":"WeightedMath","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":9873,"src":"1257:12:131","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WeightedMath_$9873_$","typeString":"type(library WeightedMath)"}},"id":48182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1270:22:131","memberName":"computeInGivenExactOut","nodeType":"MemberAccess","referencedDeclaration":9872,"src":"1257:35:131","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256,uint256,uint256) pure returns (uint256)"}},"id":48188,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1257:90:131","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":48180,"id":48189,"nodeType":"Return","src":"1250:97:131"}]},"functionSelector":"388f6bd0","id":48191,"implemented":true,"kind":"function","modifiers":[],"name":"computeInGivenExactOut","nameLocation":"1044:22:131","nodeType":"FunctionDefinition","parameters":{"id":48177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48168,"mutability":"mutable","name":"balanceIn","nameLocation":"1084:9:131","nodeType":"VariableDeclaration","scope":48191,"src":"1076:17:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48167,"name":"uint256","nodeType":"ElementaryTypeName","src":"1076:7:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48170,"mutability":"mutable","name":"weightIn","nameLocation":"1111:8:131","nodeType":"VariableDeclaration","scope":48191,"src":"1103:16:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48169,"name":"uint256","nodeType":"ElementaryTypeName","src":"1103:7:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48172,"mutability":"mutable","name":"balanceOut","nameLocation":"1137:10:131","nodeType":"VariableDeclaration","scope":48191,"src":"1129:18:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48171,"name":"uint256","nodeType":"ElementaryTypeName","src":"1129:7:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48174,"mutability":"mutable","name":"weightOut","nameLocation":"1165:9:131","nodeType":"VariableDeclaration","scope":48191,"src":"1157:17:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48173,"name":"uint256","nodeType":"ElementaryTypeName","src":"1157:7:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48176,"mutability":"mutable","name":"amountOut","nameLocation":"1192:9:131","nodeType":"VariableDeclaration","scope":48191,"src":"1184:17:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48175,"name":"uint256","nodeType":"ElementaryTypeName","src":"1184:7:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1066:141:131"},"returnParameters":{"id":48180,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48179,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48191,"src":"1231:7:131","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48178,"name":"uint256","nodeType":"ElementaryTypeName","src":"1231:7:131","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1230:9:131"},"scope":48192,"src":"1035:319:131","stateMutability":"pure","virtual":false,"visibility":"external"}],"scope":48193,"src":"259:1097:131","usedErrors":[7917,8214,8217,8220,8223,9575,9578,9581],"usedEvents":[]}],"src":"46:1311:131"},"id":131},"contracts/test/WeightedPoolMock.sol":{"ast":{"absolutePath":"contracts/test/WeightedPoolMock.sol","exportedSymbols":{"FixedPoint":[8208],"IVault":[3111],"IVaultErrors":[3768],"WeightedPool":[45841],"WeightedPoolMock":[48346]},"id":48347,"license":"GPL-3.0-or-later","nodeType":"SourceUnit","nodes":[{"id":48194,"literals":["solidity","^","0.8",".24"],"nodeType":"PragmaDirective","src":"46:24:132"},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol","id":48196,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":48347,"sourceUnit":3769,"src":"72:93:132","symbolAliases":[{"foreign":{"id":48195,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"81:12:132","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","file":"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol","id":48198,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":48347,"sourceUnit":3112,"src":"166:81:132","symbolAliases":[{"foreign":{"id":48197,"name":"IVault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3111,"src":"175:6:132","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","file":"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol","id":48200,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":48347,"sourceUnit":8209,"src":"249:92:132","symbolAliases":[{"foreign":{"id":48199,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"258:10:132","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"contracts/WeightedPool.sol","file":"../WeightedPool.sol","id":48202,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":48347,"sourceUnit":45842,"src":"343:51:132","symbolAliases":[{"foreign":{"id":48201,"name":"WeightedPool","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":45841,"src":"352:12:132","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":48203,"name":"WeightedPool","nameLocations":["425:12:132"],"nodeType":"IdentifierPath","referencedDeclaration":45841,"src":"425:12:132"},"id":48204,"nodeType":"InheritanceSpecifier","src":"425:12:132"}],"canonicalName":"WeightedPoolMock","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":48346,"internalFunctionIDs":{"7990":1,"8006":2,"9646":3,"9699":4},"linearizedBaseContracts":[48346,45841,7482,273,5418,54,11106,28149,42162,42174,40907,42064,39858,263,40171,40135,40109,228,1505,3073,3057],"name":"WeightedPoolMock","nameLocation":"405:16:132","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":48207,"mutability":"mutable","name":"_normalizedWeights","nameLocation":"534:18:132","nodeType":"VariableDeclaration","scope":48346,"src":"516:36:132","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[]"},"typeName":{"baseType":{"id":48205,"name":"uint256","nodeType":"ElementaryTypeName","src":"516:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":48206,"nodeType":"ArrayTypeName","src":"516:9:132","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"private"},{"body":{"id":48251,"nodeType":"Block","src":"642:202:132","statements":[{"expression":{"id":48227,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":48220,"name":"_normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48207,"src":"652:18:132","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"expression":{"id":48224,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48210,"src":"687:6:132","typeDescriptions":{"typeIdentifier":"t_struct$_NewPoolParams_$45139_memory_ptr","typeString":"struct WeightedPool.NewPoolParams memory"}},"id":48225,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"694:9:132","memberName":"numTokens","nodeType":"MemberAccess","referencedDeclaration":45133,"src":"687:16:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":48223,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"673:13:132","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_uint256_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (uint256[] memory)"},"typeName":{"baseType":{"id":48221,"name":"uint256","nodeType":"ElementaryTypeName","src":"677:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":48222,"nodeType":"ArrayTypeName","src":"677:9:132","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}}},"id":48226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"673:31:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"src":"652:52:132","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":48228,"nodeType":"ExpressionStatement","src":"652:52:132"},{"body":{"id":48249,"nodeType":"Block","src":"762:76:132","statements":[{"expression":{"id":48247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":48240,"name":"_normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48207,"src":"776:18:132","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":48242,"indexExpression":{"id":48241,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48230,"src":"795:1:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"776:21:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"expression":{"id":48243,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48210,"src":"800:6:132","typeDescriptions":{"typeIdentifier":"t_struct$_NewPoolParams_$45139_memory_ptr","typeString":"struct WeightedPool.NewPoolParams memory"}},"id":48244,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"807:17:132","memberName":"normalizedWeights","nodeType":"MemberAccess","referencedDeclaration":45136,"src":"800:24:132","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[] memory"}},"id":48246,"indexExpression":{"id":48245,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48230,"src":"825:1:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"800:27:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"776:51:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":48248,"nodeType":"ExpressionStatement","src":"776:51:132"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":48236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":48233,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48230,"src":"735:1:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":48234,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48210,"src":"739:6:132","typeDescriptions":{"typeIdentifier":"t_struct$_NewPoolParams_$45139_memory_ptr","typeString":"struct WeightedPool.NewPoolParams memory"}},"id":48235,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"746:9:132","memberName":"numTokens","nodeType":"MemberAccess","referencedDeclaration":45133,"src":"739:16:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"735:20:132","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":48250,"initializationExpression":{"assignments":[48230],"declarations":[{"constant":false,"id":48230,"mutability":"mutable","name":"i","nameLocation":"728:1:132","nodeType":"VariableDeclaration","scope":48250,"src":"720:9:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48229,"name":"uint256","nodeType":"ElementaryTypeName","src":"720:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":48232,"initialValue":{"hexValue":"30","id":48231,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"732:1:132","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"720:13:132"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":48238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":true,"src":"757:3:132","subExpression":{"id":48237,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48230,"src":"759:1:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":48239,"nodeType":"ExpressionStatement","src":"757:3:132"},"nodeType":"ForStatement","src":"715:123:132"}]},"id":48252,"implemented":true,"kind":"constructor","modifiers":[{"arguments":[{"id":48216,"name":"params","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48210,"src":"627:6:132","typeDescriptions":{"typeIdentifier":"t_struct$_NewPoolParams_$45139_memory_ptr","typeString":"struct WeightedPool.NewPoolParams memory"}},{"id":48217,"name":"vault","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48213,"src":"635:5:132","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}}],"id":48218,"kind":"baseConstructorSpecifier","modifierName":{"id":48215,"name":"WeightedPool","nameLocations":["614:12:132"],"nodeType":"IdentifierPath","referencedDeclaration":45841,"src":"614:12:132"},"nodeType":"ModifierInvocation","src":"614:27:132"}],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":48214,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48210,"mutability":"mutable","name":"params","nameLocation":"592:6:132","nodeType":"VariableDeclaration","scope":48252,"src":"571:27:132","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_NewPoolParams_$45139_memory_ptr","typeString":"struct WeightedPool.NewPoolParams"},"typeName":{"id":48209,"nodeType":"UserDefinedTypeName","pathNode":{"id":48208,"name":"NewPoolParams","nameLocations":["571:13:132"],"nodeType":"IdentifierPath","referencedDeclaration":45139,"src":"571:13:132"},"referencedDeclaration":45139,"src":"571:13:132","typeDescriptions":{"typeIdentifier":"t_struct$_NewPoolParams_$45139_storage_ptr","typeString":"struct WeightedPool.NewPoolParams"}},"visibility":"internal"},{"constant":false,"id":48213,"mutability":"mutable","name":"vault","nameLocation":"607:5:132","nodeType":"VariableDeclaration","scope":48252,"src":"600:12:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"},"typeName":{"id":48212,"nodeType":"UserDefinedTypeName","pathNode":{"id":48211,"name":"IVault","nameLocations":["600:6:132"],"nodeType":"IdentifierPath","referencedDeclaration":3111,"src":"600:6:132"},"referencedDeclaration":3111,"src":"600:6:132","typeDescriptions":{"typeIdentifier":"t_contract$_IVault_$3111","typeString":"contract IVault"}},"visibility":"internal"}],"src":"570:43:132"},"returnParameters":{"id":48219,"nodeType":"ParameterList","parameters":[],"src":"642:0:132"},"scope":48346,"src":"559:285:132","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"body":{"id":48271,"nodeType":"Block","src":"927:127:132","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":48262,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":48259,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48254,"src":"941:10:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":48260,"name":"_normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48207,"src":"954:18:132","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":48261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"973:6:132","memberName":"length","nodeType":"MemberAccess","src":"954:25:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"941:38:132","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":48270,"nodeType":"IfStatement","src":"937:111:132","trueBody":{"id":48269,"nodeType":"Block","src":"981:67:132","statements":[{"expression":{"id":48267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":48263,"name":"_normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48207,"src":"995:18:132","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":48265,"indexExpression":{"id":48264,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48254,"src":"1014:10:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"995:30:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":48266,"name":"newWeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48256,"src":"1028:9:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"995:42:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":48268,"nodeType":"ExpressionStatement","src":"995:42:132"}]}}]},"functionSelector":"19f32ccd","id":48272,"implemented":true,"kind":"function","modifiers":[],"name":"setNormalizedWeight","nameLocation":"859:19:132","nodeType":"FunctionDefinition","parameters":{"id":48257,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48254,"mutability":"mutable","name":"tokenIndex","nameLocation":"887:10:132","nodeType":"VariableDeclaration","scope":48272,"src":"879:18:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48253,"name":"uint256","nodeType":"ElementaryTypeName","src":"879:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48256,"mutability":"mutable","name":"newWeight","nameLocation":"907:9:132","nodeType":"VariableDeclaration","scope":48272,"src":"899:17:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48255,"name":"uint256","nodeType":"ElementaryTypeName","src":"899:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"878:39:132"},"returnParameters":{"id":48258,"nodeType":"ParameterList","parameters":[],"src":"927:0:132"},"scope":48346,"src":"850:204:132","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":48309,"nodeType":"Block","src":"1206:193:132","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":48289,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":48286,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":48280,"name":"newWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48276,"src":"1224:10:132","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":48282,"indexExpression":{"hexValue":"30","id":48281,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1235:1:132","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1224:13:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"baseExpression":{"id":48283,"name":"newWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48276,"src":"1240:10:132","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":48285,"indexExpression":{"hexValue":"31","id":48284,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1251:1:132","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1240:13:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1224:29:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":48287,"name":"FixedPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":8208,"src":"1257:10:132","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_FixedPoint_$8208_$","typeString":"type(library FixedPoint)"}},"id":48288,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1268:3:132","memberName":"ONE","nodeType":"MemberAccess","referencedDeclaration":7920,"src":"1257:14:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1224:47:132","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5765696768747320646f6e277420746f74616c2031","id":48290,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1273:23:132","typeDescriptions":{"typeIdentifier":"t_stringliteral_f94de36b555856ca771a54b7df9d904d69fa1a2e2cace1a373fb449dd0e56130","typeString":"literal_string \"Weights don't total 1\""},"value":"Weights don't total 1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_f94de36b555856ca771a54b7df9d904d69fa1a2e2cace1a373fb449dd0e56130","typeString":"literal_string \"Weights don't total 1\""}],"id":48279,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1216:7:132","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":48291,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1216:81:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":48292,"nodeType":"ExpressionStatement","src":"1216:81:132"},{"expression":{"id":48299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":48293,"name":"_normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48207,"src":"1308:18:132","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":48295,"indexExpression":{"hexValue":"30","id":48294,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1327:1:132","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1308:21:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":48296,"name":"newWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48276,"src":"1332:10:132","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":48298,"indexExpression":{"hexValue":"30","id":48297,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1343:1:132","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1332:13:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1308:37:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":48300,"nodeType":"ExpressionStatement","src":"1308:37:132"},{"expression":{"id":48307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":48301,"name":"_normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48207,"src":"1355:18:132","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":48303,"indexExpression":{"hexValue":"31","id":48302,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1374:1:132","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1355:21:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":48304,"name":"newWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48276,"src":"1379:10:132","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2] memory"}},"id":48306,"indexExpression":{"hexValue":"31","id":48305,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1390:1:132","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1379:13:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1355:37:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":48308,"nodeType":"ExpressionStatement","src":"1355:37:132"}]},"functionSelector":"3f3353de","id":48310,"implemented":true,"kind":"function","modifiers":[],"name":"setNormalizedWeights","nameLocation":"1146:20:132","nodeType":"FunctionDefinition","parameters":{"id":48277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48276,"mutability":"mutable","name":"newWeights","nameLocation":"1185:10:132","nodeType":"VariableDeclaration","scope":48310,"src":"1167:28:132","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_memory_ptr","typeString":"uint256[2]"},"typeName":{"baseType":{"id":48273,"name":"uint256","nodeType":"ElementaryTypeName","src":"1167:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":48275,"length":{"hexValue":"32","id":48274,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1175:1:132","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"ArrayTypeName","src":"1167:10:132","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$2_storage_ptr","typeString":"uint256[2]"}},"visibility":"internal"}],"src":"1166:30:132"},"returnParameters":{"id":48278,"nodeType":"ParameterList","parameters":[],"src":"1206:0:132"},"scope":48346,"src":"1137:262:132","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"baseFunctions":[45548],"body":{"id":48334,"nodeType":"Block","src":"1496:187:132","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":48321,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":48318,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48312,"src":"1510:10:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":48319,"name":"_normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48207,"src":"1523:18:132","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":48320,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1542:6:132","memberName":"length","nodeType":"MemberAccess","src":"1523:25:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1510:38:132","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":48332,"nodeType":"Block","src":"1618:59:132","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":48327,"name":"IVaultErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":3768,"src":"1639:12:132","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IVaultErrors_$3768_$","typeString":"type(contract IVaultErrors)"}},"id":48329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1652:12:132","memberName":"InvalidToken","nodeType":"MemberAccess","referencedDeclaration":3452,"src":"1639:25:132","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":48330,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1639:27:132","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":48331,"nodeType":"RevertStatement","src":"1632:34:132"}]},"id":48333,"nodeType":"IfStatement","src":"1506:171:132","trueBody":{"id":48326,"nodeType":"Block","src":"1550:62:132","statements":[{"expression":{"baseExpression":{"id":48322,"name":"_normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48207,"src":"1571:18:132","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"id":48324,"indexExpression":{"id":48323,"name":"tokenIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48312,"src":"1590:10:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1571:30:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":48317,"id":48325,"nodeType":"Return","src":"1564:37:132"}]}}]},"id":48335,"implemented":true,"kind":"function","modifiers":[],"name":"_getNormalizedWeight","nameLocation":"1414:20:132","nodeType":"FunctionDefinition","overrides":{"id":48314,"nodeType":"OverrideSpecifier","overrides":[],"src":"1469:8:132"},"parameters":{"id":48313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48312,"mutability":"mutable","name":"tokenIndex","nameLocation":"1443:10:132","nodeType":"VariableDeclaration","scope":48335,"src":"1435:18:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48311,"name":"uint256","nodeType":"ElementaryTypeName","src":"1435:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1434:20:132"},"returnParameters":{"id":48317,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48316,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48335,"src":"1487:7:132","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48315,"name":"uint256","nodeType":"ElementaryTypeName","src":"1487:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1486:9:132"},"scope":48346,"src":"1405:278:132","stateMutability":"view","virtual":false,"visibility":"internal"},{"baseFunctions":[45666],"body":{"id":48344,"nodeType":"Block","src":"1772:42:132","statements":[{"expression":{"id":48342,"name":"_normalizedWeights","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48207,"src":"1789:18:132","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage","typeString":"uint256[] storage ref"}},"functionReturnParameters":48341,"id":48343,"nodeType":"Return","src":"1782:25:132"}]},"id":48345,"implemented":true,"kind":"function","modifiers":[],"name":"_getNormalizedWeights","nameLocation":"1698:21:132","nodeType":"FunctionDefinition","overrides":{"id":48337,"nodeType":"OverrideSpecifier","overrides":[],"src":"1736:8:132"},"parameters":{"id":48336,"nodeType":"ParameterList","parameters":[],"src":"1719:2:132"},"returnParameters":{"id":48341,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48340,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48345,"src":"1754:16:132","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":48338,"name":"uint256","nodeType":"ElementaryTypeName","src":"1754:7:132","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":48339,"nodeType":"ArrayTypeName","src":"1754:9:132","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"1753:18:132"},"scope":48346,"src":"1689:125:132","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":48347,"src":"396:1420:132","usedErrors":[203,206,3452,3640,5901,7917,8214,8217,8220,8223,9575,9578,9581,10742,10749,40849,40921,40923,41500,41505,41510,45169],"usedEvents":[39838,40043,40052]}],"src":"46:1771:132"},"id":132},"permit2/src/interfaces/IAllowanceTransfer.sol":{"ast":{"absolutePath":"permit2/src/interfaces/IAllowanceTransfer.sol","exportedSymbols":{"IAllowanceTransfer":[48558],"IEIP712":[48566]},"id":48559,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":48348,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"32:23:133"},{"absolutePath":"permit2/src/interfaces/IEIP712.sol","file":"./IEIP712.sol","id":48350,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":48559,"sourceUnit":48567,"src":"57:38:133","symbolAliases":[{"foreign":{"id":48349,"name":"IEIP712","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48566,"src":"65:7:133","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":48352,"name":"IEIP712","nameLocations":["362:7:133"],"nodeType":"IdentifierPath","referencedDeclaration":48566,"src":"362:7:133"},"id":48353,"nodeType":"InheritanceSpecifier","src":"362:7:133"}],"canonicalName":"IAllowanceTransfer","contractDependencies":[],"contractKind":"interface","documentation":{"id":48351,"nodeType":"StructuredDocumentation","src":"97:233:133","text":"@title AllowanceTransfer\n @notice Handles ERC20 token permissions through signature based allowance setting and ERC20 token transfers by checking allowed amounts\n @dev Requires user's token approval on the Permit2 contract"},"fullyImplemented":false,"id":48558,"linearizedBaseContracts":[48558,48566],"name":"IAllowanceTransfer","nameLocation":"340:18:133","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":48354,"nodeType":"StructuredDocumentation","src":"376:145:133","text":"@notice Thrown when an allowance on a token has expired.\n @param deadline The timestamp at which the allowed amount is no longer valid"},"errorSelector":"d81b2f2e","id":48358,"name":"AllowanceExpired","nameLocation":"532:16:133","nodeType":"ErrorDefinition","parameters":{"id":48357,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48356,"mutability":"mutable","name":"deadline","nameLocation":"557:8:133","nodeType":"VariableDeclaration","scope":48358,"src":"549:16:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48355,"name":"uint256","nodeType":"ElementaryTypeName","src":"549:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"548:18:133"},"src":"526:41:133"},{"documentation":{"id":48359,"nodeType":"StructuredDocumentation","src":"573:115:133","text":"@notice Thrown when an allowance on a token has been depleted.\n @param amount The maximum amount allowed"},"errorSelector":"f96fb071","id":48363,"name":"InsufficientAllowance","nameLocation":"699:21:133","nodeType":"ErrorDefinition","parameters":{"id":48362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48361,"mutability":"mutable","name":"amount","nameLocation":"729:6:133","nodeType":"VariableDeclaration","scope":48363,"src":"721:14:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48360,"name":"uint256","nodeType":"ElementaryTypeName","src":"721:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"720:16:133"},"src":"693:44:133"},{"documentation":{"id":48364,"nodeType":"StructuredDocumentation","src":"743:56:133","text":"@notice Thrown when too many nonces are invalidated."},"errorSelector":"24d35a26","id":48366,"name":"ExcessiveInvalidation","nameLocation":"810:21:133","nodeType":"ErrorDefinition","parameters":{"id":48365,"nodeType":"ParameterList","parameters":[],"src":"831:2:133"},"src":"804:30:133"},{"anonymous":false,"documentation":{"id":48367,"nodeType":"StructuredDocumentation","src":"840:84:133","text":"@notice Emits an event when the owner successfully invalidates an ordered nonce."},"eventSelector":"55eb90d810e1700b35a8e7e25395ff7f2b2259abd7415ca2284dfb1c246418f3","id":48379,"name":"NonceInvalidation","nameLocation":"935:17:133","nodeType":"EventDefinition","parameters":{"id":48378,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48369,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"978:5:133","nodeType":"VariableDeclaration","scope":48379,"src":"962:21:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48368,"name":"address","nodeType":"ElementaryTypeName","src":"962:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48371,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"1001:5:133","nodeType":"VariableDeclaration","scope":48379,"src":"985:21:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48370,"name":"address","nodeType":"ElementaryTypeName","src":"985:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48373,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"1024:7:133","nodeType":"VariableDeclaration","scope":48379,"src":"1008:23:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48372,"name":"address","nodeType":"ElementaryTypeName","src":"1008:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48375,"indexed":false,"mutability":"mutable","name":"newNonce","nameLocation":"1040:8:133","nodeType":"VariableDeclaration","scope":48379,"src":"1033:15:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":48374,"name":"uint48","nodeType":"ElementaryTypeName","src":"1033:6:133","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"},{"constant":false,"id":48377,"indexed":false,"mutability":"mutable","name":"oldNonce","nameLocation":"1057:8:133","nodeType":"VariableDeclaration","scope":48379,"src":"1050:15:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":48376,"name":"uint48","nodeType":"ElementaryTypeName","src":"1050:6:133","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"952:119:133"},"src":"929:143:133"},{"anonymous":false,"documentation":{"id":48380,"nodeType":"StructuredDocumentation","src":"1078:99:133","text":"@notice Emits an event when the owner successfully sets permissions on a token for the spender."},"eventSelector":"da9fa7c1b00402c17d0161b249b1ab8bbec047c5a52207b9c112deffd817036b","id":48392,"name":"Approval","nameLocation":"1188:8:133","nodeType":"EventDefinition","parameters":{"id":48391,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48382,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"1222:5:133","nodeType":"VariableDeclaration","scope":48392,"src":"1206:21:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48381,"name":"address","nodeType":"ElementaryTypeName","src":"1206:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48384,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"1245:5:133","nodeType":"VariableDeclaration","scope":48392,"src":"1229:21:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48383,"name":"address","nodeType":"ElementaryTypeName","src":"1229:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48386,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"1268:7:133","nodeType":"VariableDeclaration","scope":48392,"src":"1252:23:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48385,"name":"address","nodeType":"ElementaryTypeName","src":"1252:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48388,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1285:6:133","nodeType":"VariableDeclaration","scope":48392,"src":"1277:14:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"},"typeName":{"id":48387,"name":"uint160","nodeType":"ElementaryTypeName","src":"1277:7:133","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"visibility":"internal"},{"constant":false,"id":48390,"indexed":false,"mutability":"mutable","name":"expiration","nameLocation":"1300:10:133","nodeType":"VariableDeclaration","scope":48392,"src":"1293:17:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":48389,"name":"uint48","nodeType":"ElementaryTypeName","src":"1293:6:133","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"1196:120:133"},"src":"1182:135:133"},{"anonymous":false,"documentation":{"id":48393,"nodeType":"StructuredDocumentation","src":"1323:124:133","text":"@notice Emits an event when the owner successfully sets permissions using a permit signature on a token for the spender."},"eventSelector":"c6a377bfc4eb120024a8ac08eef205be16b817020812c73223e81d1bdb9708ec","id":48407,"name":"Permit","nameLocation":"1458:6:133","nodeType":"EventDefinition","parameters":{"id":48406,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48395,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"1490:5:133","nodeType":"VariableDeclaration","scope":48407,"src":"1474:21:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48394,"name":"address","nodeType":"ElementaryTypeName","src":"1474:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48397,"indexed":true,"mutability":"mutable","name":"token","nameLocation":"1521:5:133","nodeType":"VariableDeclaration","scope":48407,"src":"1505:21:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48396,"name":"address","nodeType":"ElementaryTypeName","src":"1505:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48399,"indexed":true,"mutability":"mutable","name":"spender","nameLocation":"1552:7:133","nodeType":"VariableDeclaration","scope":48407,"src":"1536:23:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48398,"name":"address","nodeType":"ElementaryTypeName","src":"1536:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48401,"indexed":false,"mutability":"mutable","name":"amount","nameLocation":"1577:6:133","nodeType":"VariableDeclaration","scope":48407,"src":"1569:14:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"},"typeName":{"id":48400,"name":"uint160","nodeType":"ElementaryTypeName","src":"1569:7:133","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"visibility":"internal"},{"constant":false,"id":48403,"indexed":false,"mutability":"mutable","name":"expiration","nameLocation":"1600:10:133","nodeType":"VariableDeclaration","scope":48407,"src":"1593:17:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":48402,"name":"uint48","nodeType":"ElementaryTypeName","src":"1593:6:133","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"},{"constant":false,"id":48405,"indexed":false,"mutability":"mutable","name":"nonce","nameLocation":"1627:5:133","nodeType":"VariableDeclaration","scope":48407,"src":"1620:12:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":48404,"name":"uint48","nodeType":"ElementaryTypeName","src":"1620:6:133","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"1464:174:133"},"src":"1452:187:133"},{"anonymous":false,"documentation":{"id":48408,"nodeType":"StructuredDocumentation","src":"1645:98:133","text":"@notice Emits an event when the owner sets the allowance back to 0 with the lockdown function."},"eventSelector":"89b1add15eff56b3dfe299ad94e01f2b52fbcb80ae1a3baea6ae8c04cb2b98a4","id":48416,"name":"Lockdown","nameLocation":"1754:8:133","nodeType":"EventDefinition","parameters":{"id":48415,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48410,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"1779:5:133","nodeType":"VariableDeclaration","scope":48416,"src":"1763:21:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48409,"name":"address","nodeType":"ElementaryTypeName","src":"1763:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48412,"indexed":false,"mutability":"mutable","name":"token","nameLocation":"1794:5:133","nodeType":"VariableDeclaration","scope":48416,"src":"1786:13:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48411,"name":"address","nodeType":"ElementaryTypeName","src":"1786:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48414,"indexed":false,"mutability":"mutable","name":"spender","nameLocation":"1809:7:133","nodeType":"VariableDeclaration","scope":48416,"src":"1801:15:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48413,"name":"address","nodeType":"ElementaryTypeName","src":"1801:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1762:55:133"},"src":"1748:70:133"},{"canonicalName":"IAllowanceTransfer.PermitDetails","documentation":{"id":48417,"nodeType":"StructuredDocumentation","src":"1824:39:133","text":"@notice The permit data for a token"},"id":48426,"members":[{"constant":false,"id":48419,"mutability":"mutable","name":"token","nameLocation":"1938:5:133","nodeType":"VariableDeclaration","scope":48426,"src":"1930:13:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48418,"name":"address","nodeType":"ElementaryTypeName","src":"1930:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48421,"mutability":"mutable","name":"amount","nameLocation":"2008:6:133","nodeType":"VariableDeclaration","scope":48426,"src":"2000:14:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"},"typeName":{"id":48420,"name":"uint160","nodeType":"ElementaryTypeName","src":"2000:7:133","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"visibility":"internal"},{"constant":false,"id":48423,"mutability":"mutable","name":"expiration","nameLocation":"2105:10:133","nodeType":"VariableDeclaration","scope":48426,"src":"2098:17:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":48422,"name":"uint48","nodeType":"ElementaryTypeName","src":"2098:6:133","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"},{"constant":false,"id":48425,"mutability":"mutable","name":"nonce","nameLocation":"2220:5:133","nodeType":"VariableDeclaration","scope":48426,"src":"2213:12:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":48424,"name":"uint48","nodeType":"ElementaryTypeName","src":"2213:6:133","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"name":"PermitDetails","nameLocation":"1875:13:133","nodeType":"StructDefinition","scope":48558,"src":"1868:364:133","visibility":"public"},{"canonicalName":"IAllowanceTransfer.PermitSingle","documentation":{"id":48427,"nodeType":"StructuredDocumentation","src":"2238:66:133","text":"@notice The permit message signed for a single token allowance"},"id":48435,"members":[{"constant":false,"id":48430,"mutability":"mutable","name":"details","nameLocation":"2407:7:133","nodeType":"VariableDeclaration","scope":48435,"src":"2393:21:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_PermitDetails_$48426_storage_ptr","typeString":"struct IAllowanceTransfer.PermitDetails"},"typeName":{"id":48429,"nodeType":"UserDefinedTypeName","pathNode":{"id":48428,"name":"PermitDetails","nameLocations":["2393:13:133"],"nodeType":"IdentifierPath","referencedDeclaration":48426,"src":"2393:13:133"},"referencedDeclaration":48426,"src":"2393:13:133","typeDescriptions":{"typeIdentifier":"t_struct$_PermitDetails_$48426_storage_ptr","typeString":"struct IAllowanceTransfer.PermitDetails"}},"visibility":"internal"},{"constant":false,"id":48432,"mutability":"mutable","name":"spender","nameLocation":"2486:7:133","nodeType":"VariableDeclaration","scope":48435,"src":"2478:15:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48431,"name":"address","nodeType":"ElementaryTypeName","src":"2478:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48434,"mutability":"mutable","name":"sigDeadline","nameLocation":"2555:11:133","nodeType":"VariableDeclaration","scope":48435,"src":"2547:19:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48433,"name":"uint256","nodeType":"ElementaryTypeName","src":"2547:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"PermitSingle","nameLocation":"2316:12:133","nodeType":"StructDefinition","scope":48558,"src":"2309:264:133","visibility":"public"},{"canonicalName":"IAllowanceTransfer.PermitBatch","documentation":{"id":48436,"nodeType":"StructuredDocumentation","src":"2579:67:133","text":"@notice The permit message signed for multiple token allowances"},"id":48445,"members":[{"constant":false,"id":48440,"mutability":"mutable","name":"details","nameLocation":"2753:7:133","nodeType":"VariableDeclaration","scope":48445,"src":"2737:23:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_PermitDetails_$48426_storage_$dyn_storage_ptr","typeString":"struct IAllowanceTransfer.PermitDetails[]"},"typeName":{"baseType":{"id":48438,"nodeType":"UserDefinedTypeName","pathNode":{"id":48437,"name":"PermitDetails","nameLocations":["2737:13:133"],"nodeType":"IdentifierPath","referencedDeclaration":48426,"src":"2737:13:133"},"referencedDeclaration":48426,"src":"2737:13:133","typeDescriptions":{"typeIdentifier":"t_struct$_PermitDetails_$48426_storage_ptr","typeString":"struct IAllowanceTransfer.PermitDetails"}},"id":48439,"nodeType":"ArrayTypeName","src":"2737:15:133","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_PermitDetails_$48426_storage_$dyn_storage_ptr","typeString":"struct IAllowanceTransfer.PermitDetails[]"}},"visibility":"internal"},{"constant":false,"id":48442,"mutability":"mutable","name":"spender","nameLocation":"2832:7:133","nodeType":"VariableDeclaration","scope":48445,"src":"2824:15:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48441,"name":"address","nodeType":"ElementaryTypeName","src":"2824:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48444,"mutability":"mutable","name":"sigDeadline","nameLocation":"2901:11:133","nodeType":"VariableDeclaration","scope":48445,"src":"2893:19:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48443,"name":"uint256","nodeType":"ElementaryTypeName","src":"2893:7:133","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"PermitBatch","nameLocation":"2658:11:133","nodeType":"StructDefinition","scope":48558,"src":"2651:268:133","visibility":"public"},{"canonicalName":"IAllowanceTransfer.PackedAllowance","documentation":{"id":48446,"nodeType":"StructuredDocumentation","src":"2925:217:133","text":"@notice The saved permissions\n @dev This info is saved per owner, per token, per spender and all signed over in the permit message\n @dev Setting amount to type(uint160).max sets an unlimited approval"},"id":48453,"members":[{"constant":false,"id":48448,"mutability":"mutable","name":"amount","nameLocation":"3214:6:133","nodeType":"VariableDeclaration","scope":48453,"src":"3206:14:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"},"typeName":{"id":48447,"name":"uint160","nodeType":"ElementaryTypeName","src":"3206:7:133","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"visibility":"internal"},{"constant":false,"id":48450,"mutability":"mutable","name":"expiration","nameLocation":"3266:10:133","nodeType":"VariableDeclaration","scope":48453,"src":"3259:17:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":48449,"name":"uint48","nodeType":"ElementaryTypeName","src":"3259:6:133","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"},{"constant":false,"id":48452,"mutability":"mutable","name":"nonce","nameLocation":"3381:5:133","nodeType":"VariableDeclaration","scope":48453,"src":"3374:12:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":48451,"name":"uint48","nodeType":"ElementaryTypeName","src":"3374:6:133","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"name":"PackedAllowance","nameLocation":"3154:15:133","nodeType":"StructDefinition","scope":48558,"src":"3147:246:133","visibility":"public"},{"canonicalName":"IAllowanceTransfer.TokenSpenderPair","documentation":{"id":48454,"nodeType":"StructuredDocumentation","src":"3399:33:133","text":"@notice A token spender pair."},"id":48459,"members":[{"constant":false,"id":48456,"mutability":"mutable","name":"token","nameLocation":"3524:5:133","nodeType":"VariableDeclaration","scope":48459,"src":"3516:13:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48455,"name":"address","nodeType":"ElementaryTypeName","src":"3516:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48458,"mutability":"mutable","name":"spender","nameLocation":"3578:7:133","nodeType":"VariableDeclaration","scope":48459,"src":"3570:15:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48457,"name":"address","nodeType":"ElementaryTypeName","src":"3570:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"TokenSpenderPair","nameLocation":"3444:16:133","nodeType":"StructDefinition","scope":48558,"src":"3437:155:133","visibility":"public"},{"canonicalName":"IAllowanceTransfer.AllowanceTransferDetails","documentation":{"id":48460,"nodeType":"StructuredDocumentation","src":"3598:41:133","text":"@notice Details for a token transfer."},"id":48469,"members":[{"constant":false,"id":48462,"mutability":"mutable","name":"from","nameLocation":"3728:4:133","nodeType":"VariableDeclaration","scope":48469,"src":"3720:12:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48461,"name":"address","nodeType":"ElementaryTypeName","src":"3720:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48464,"mutability":"mutable","name":"to","nameLocation":"3788:2:133","nodeType":"VariableDeclaration","scope":48469,"src":"3780:10:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48463,"name":"address","nodeType":"ElementaryTypeName","src":"3780:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48466,"mutability":"mutable","name":"amount","nameLocation":"3843:6:133","nodeType":"VariableDeclaration","scope":48469,"src":"3835:14:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"},"typeName":{"id":48465,"name":"uint160","nodeType":"ElementaryTypeName","src":"3835:7:133","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"visibility":"internal"},{"constant":false,"id":48468,"mutability":"mutable","name":"token","nameLocation":"3906:5:133","nodeType":"VariableDeclaration","scope":48469,"src":"3898:13:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48467,"name":"address","nodeType":"ElementaryTypeName","src":"3898:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"name":"AllowanceTransferDetails","nameLocation":"3651:24:133","nodeType":"StructDefinition","scope":48558,"src":"3644:274:133","visibility":"public"},{"documentation":{"id":48470,"nodeType":"StructuredDocumentation","src":"3924:455:133","text":"@notice A mapping from owner address to token address to spender address to PackedAllowance struct, which contains details and conditions of the approval.\n @notice The mapping is indexed in the above order see: allowance[ownerAddress][tokenAddress][spenderAddress]\n @dev The packed slot holds the allowed amount, expiration at which the allowed amount is no longer valid, and current nonce thats updated on any signature based approvals."},"functionSelector":"927da105","id":48485,"implemented":false,"kind":"function","modifiers":[],"name":"allowance","nameLocation":"4393:9:133","nodeType":"FunctionDefinition","parameters":{"id":48477,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48472,"mutability":"mutable","name":"user","nameLocation":"4411:4:133","nodeType":"VariableDeclaration","scope":48485,"src":"4403:12:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48471,"name":"address","nodeType":"ElementaryTypeName","src":"4403:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48474,"mutability":"mutable","name":"token","nameLocation":"4425:5:133","nodeType":"VariableDeclaration","scope":48485,"src":"4417:13:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48473,"name":"address","nodeType":"ElementaryTypeName","src":"4417:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48476,"mutability":"mutable","name":"spender","nameLocation":"4440:7:133","nodeType":"VariableDeclaration","scope":48485,"src":"4432:15:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48475,"name":"address","nodeType":"ElementaryTypeName","src":"4432:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4402:46:133"},"returnParameters":{"id":48484,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48479,"mutability":"mutable","name":"amount","nameLocation":"4504:6:133","nodeType":"VariableDeclaration","scope":48485,"src":"4496:14:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"},"typeName":{"id":48478,"name":"uint160","nodeType":"ElementaryTypeName","src":"4496:7:133","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"visibility":"internal"},{"constant":false,"id":48481,"mutability":"mutable","name":"expiration","nameLocation":"4519:10:133","nodeType":"VariableDeclaration","scope":48485,"src":"4512:17:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":48480,"name":"uint48","nodeType":"ElementaryTypeName","src":"4512:6:133","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"},{"constant":false,"id":48483,"mutability":"mutable","name":"nonce","nameLocation":"4538:5:133","nodeType":"VariableDeclaration","scope":48485,"src":"4531:12:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":48482,"name":"uint48","nodeType":"ElementaryTypeName","src":"4531:6:133","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"4495:49:133"},"scope":48558,"src":"4384:161:133","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":48486,"nodeType":"StructuredDocumentation","src":"4551:498:133","text":"@notice Approves the spender to use up to amount of the specified token up until the expiration\n @param token The token to approve\n @param spender The spender address to approve\n @param amount The approved amount of the token\n @param expiration The timestamp at which the approval is no longer valid\n @dev The packed allowance also holds a nonce, which will stay unchanged in approve\n @dev Setting amount to type(uint160).max sets an unlimited approval"},"functionSelector":"87517c45","id":48497,"implemented":false,"kind":"function","modifiers":[],"name":"approve","nameLocation":"5063:7:133","nodeType":"FunctionDefinition","parameters":{"id":48495,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48488,"mutability":"mutable","name":"token","nameLocation":"5079:5:133","nodeType":"VariableDeclaration","scope":48497,"src":"5071:13:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48487,"name":"address","nodeType":"ElementaryTypeName","src":"5071:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48490,"mutability":"mutable","name":"spender","nameLocation":"5094:7:133","nodeType":"VariableDeclaration","scope":48497,"src":"5086:15:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48489,"name":"address","nodeType":"ElementaryTypeName","src":"5086:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48492,"mutability":"mutable","name":"amount","nameLocation":"5111:6:133","nodeType":"VariableDeclaration","scope":48497,"src":"5103:14:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"},"typeName":{"id":48491,"name":"uint160","nodeType":"ElementaryTypeName","src":"5103:7:133","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"visibility":"internal"},{"constant":false,"id":48494,"mutability":"mutable","name":"expiration","nameLocation":"5126:10:133","nodeType":"VariableDeclaration","scope":48497,"src":"5119:17:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":48493,"name":"uint48","nodeType":"ElementaryTypeName","src":"5119:6:133","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"5070:67:133"},"returnParameters":{"id":48496,"nodeType":"ParameterList","parameters":[],"src":"5146:0:133"},"scope":48558,"src":"5054:93:133","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":48498,"nodeType":"StructuredDocumentation","src":"5153:407:133","text":"@notice Permit a spender to a given amount of the owners token via the owner's EIP-712 signature\n @dev May fail if the owner's nonce was invalidated in-flight by invalidateNonce\n @param owner The owner of the tokens being approved\n @param permitSingle Data signed over by the owner specifying the terms of approval\n @param signature The owner's signature over the permit data"},"functionSelector":"2b67b570","id":48508,"implemented":false,"kind":"function","modifiers":[],"name":"permit","nameLocation":"5574:6:133","nodeType":"FunctionDefinition","parameters":{"id":48506,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48500,"mutability":"mutable","name":"owner","nameLocation":"5589:5:133","nodeType":"VariableDeclaration","scope":48508,"src":"5581:13:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48499,"name":"address","nodeType":"ElementaryTypeName","src":"5581:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48503,"mutability":"mutable","name":"permitSingle","nameLocation":"5616:12:133","nodeType":"VariableDeclaration","scope":48508,"src":"5596:32:133","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSingle_$48435_memory_ptr","typeString":"struct IAllowanceTransfer.PermitSingle"},"typeName":{"id":48502,"nodeType":"UserDefinedTypeName","pathNode":{"id":48501,"name":"PermitSingle","nameLocations":["5596:12:133"],"nodeType":"IdentifierPath","referencedDeclaration":48435,"src":"5596:12:133"},"referencedDeclaration":48435,"src":"5596:12:133","typeDescriptions":{"typeIdentifier":"t_struct$_PermitSingle_$48435_storage_ptr","typeString":"struct IAllowanceTransfer.PermitSingle"}},"visibility":"internal"},{"constant":false,"id":48505,"mutability":"mutable","name":"signature","nameLocation":"5645:9:133","nodeType":"VariableDeclaration","scope":48508,"src":"5630:24:133","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":48504,"name":"bytes","nodeType":"ElementaryTypeName","src":"5630:5:133","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5580:75:133"},"returnParameters":{"id":48507,"nodeType":"ParameterList","parameters":[],"src":"5664:0:133"},"scope":48558,"src":"5565:100:133","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":48509,"nodeType":"StructuredDocumentation","src":"5671:411:133","text":"@notice Permit a spender to the signed amounts of the owners tokens via the owner's EIP-712 signature\n @dev May fail if the owner's nonce was invalidated in-flight by invalidateNonce\n @param owner The owner of the tokens being approved\n @param permitBatch Data signed over by the owner specifying the terms of approval\n @param signature The owner's signature over the permit data"},"functionSelector":"2a2d80d1","id":48519,"implemented":false,"kind":"function","modifiers":[],"name":"permit","nameLocation":"6096:6:133","nodeType":"FunctionDefinition","parameters":{"id":48517,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48511,"mutability":"mutable","name":"owner","nameLocation":"6111:5:133","nodeType":"VariableDeclaration","scope":48519,"src":"6103:13:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48510,"name":"address","nodeType":"ElementaryTypeName","src":"6103:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48514,"mutability":"mutable","name":"permitBatch","nameLocation":"6137:11:133","nodeType":"VariableDeclaration","scope":48519,"src":"6118:30:133","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PermitBatch_$48445_memory_ptr","typeString":"struct IAllowanceTransfer.PermitBatch"},"typeName":{"id":48513,"nodeType":"UserDefinedTypeName","pathNode":{"id":48512,"name":"PermitBatch","nameLocations":["6118:11:133"],"nodeType":"IdentifierPath","referencedDeclaration":48445,"src":"6118:11:133"},"referencedDeclaration":48445,"src":"6118:11:133","typeDescriptions":{"typeIdentifier":"t_struct$_PermitBatch_$48445_storage_ptr","typeString":"struct IAllowanceTransfer.PermitBatch"}},"visibility":"internal"},{"constant":false,"id":48516,"mutability":"mutable","name":"signature","nameLocation":"6165:9:133","nodeType":"VariableDeclaration","scope":48519,"src":"6150:24:133","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":48515,"name":"bytes","nodeType":"ElementaryTypeName","src":"6150:5:133","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6102:73:133"},"returnParameters":{"id":48518,"nodeType":"ParameterList","parameters":[],"src":"6184:0:133"},"scope":48558,"src":"6087:98:133","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":48520,"nodeType":"StructuredDocumentation","src":"6191:386:133","text":"@notice Transfer approved tokens from one address to another\n @param from The address to transfer from\n @param to The address of the recipient\n @param amount The amount of the token to transfer\n @param token The token address to transfer\n @dev Requires the from address to have approved at least the desired amount\n of tokens to msg.sender."},"functionSelector":"36c78516","id":48531,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"6591:12:133","nodeType":"FunctionDefinition","parameters":{"id":48529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48522,"mutability":"mutable","name":"from","nameLocation":"6612:4:133","nodeType":"VariableDeclaration","scope":48531,"src":"6604:12:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48521,"name":"address","nodeType":"ElementaryTypeName","src":"6604:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48524,"mutability":"mutable","name":"to","nameLocation":"6626:2:133","nodeType":"VariableDeclaration","scope":48531,"src":"6618:10:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48523,"name":"address","nodeType":"ElementaryTypeName","src":"6618:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48526,"mutability":"mutable","name":"amount","nameLocation":"6638:6:133","nodeType":"VariableDeclaration","scope":48531,"src":"6630:14:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"},"typeName":{"id":48525,"name":"uint160","nodeType":"ElementaryTypeName","src":"6630:7:133","typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}},"visibility":"internal"},{"constant":false,"id":48528,"mutability":"mutable","name":"token","nameLocation":"6654:5:133","nodeType":"VariableDeclaration","scope":48531,"src":"6646:13:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48527,"name":"address","nodeType":"ElementaryTypeName","src":"6646:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6603:57:133"},"returnParameters":{"id":48530,"nodeType":"ParameterList","parameters":[],"src":"6669:0:133"},"scope":48558,"src":"6582:88:133","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":48532,"nodeType":"StructuredDocumentation","src":"6676:264:133","text":"@notice Transfer approved tokens in a batch\n @param transferDetails Array of owners, recipients, amounts, and tokens for the transfers\n @dev Requires the from addresses to have approved at least the desired amount\n of tokens to msg.sender."},"functionSelector":"0d58b1db","id":48539,"implemented":false,"kind":"function","modifiers":[],"name":"transferFrom","nameLocation":"6954:12:133","nodeType":"FunctionDefinition","parameters":{"id":48537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48536,"mutability":"mutable","name":"transferDetails","nameLocation":"7003:15:133","nodeType":"VariableDeclaration","scope":48539,"src":"6967:51:133","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AllowanceTransferDetails_$48469_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IAllowanceTransfer.AllowanceTransferDetails[]"},"typeName":{"baseType":{"id":48534,"nodeType":"UserDefinedTypeName","pathNode":{"id":48533,"name":"AllowanceTransferDetails","nameLocations":["6967:24:133"],"nodeType":"IdentifierPath","referencedDeclaration":48469,"src":"6967:24:133"},"referencedDeclaration":48469,"src":"6967:24:133","typeDescriptions":{"typeIdentifier":"t_struct$_AllowanceTransferDetails_$48469_storage_ptr","typeString":"struct IAllowanceTransfer.AllowanceTransferDetails"}},"id":48535,"nodeType":"ArrayTypeName","src":"6967:26:133","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_AllowanceTransferDetails_$48469_storage_$dyn_storage_ptr","typeString":"struct IAllowanceTransfer.AllowanceTransferDetails[]"}},"visibility":"internal"}],"src":"6966:53:133"},"returnParameters":{"id":48538,"nodeType":"ParameterList","parameters":[],"src":"7028:0:133"},"scope":48558,"src":"6945:84:133","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":48540,"nodeType":"StructuredDocumentation","src":"7035:167:133","text":"@notice Enables performing a \"lockdown\" of the sender's Permit2 identity\n by batch revoking approvals\n @param approvals Array of approvals to revoke."},"functionSelector":"cc53287f","id":48547,"implemented":false,"kind":"function","modifiers":[],"name":"lockdown","nameLocation":"7216:8:133","nodeType":"FunctionDefinition","parameters":{"id":48545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48544,"mutability":"mutable","name":"approvals","nameLocation":"7253:9:133","nodeType":"VariableDeclaration","scope":48547,"src":"7225:37:133","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenSpenderPair_$48459_calldata_ptr_$dyn_calldata_ptr","typeString":"struct IAllowanceTransfer.TokenSpenderPair[]"},"typeName":{"baseType":{"id":48542,"nodeType":"UserDefinedTypeName","pathNode":{"id":48541,"name":"TokenSpenderPair","nameLocations":["7225:16:133"],"nodeType":"IdentifierPath","referencedDeclaration":48459,"src":"7225:16:133"},"referencedDeclaration":48459,"src":"7225:16:133","typeDescriptions":{"typeIdentifier":"t_struct$_TokenSpenderPair_$48459_storage_ptr","typeString":"struct IAllowanceTransfer.TokenSpenderPair"}},"id":48543,"nodeType":"ArrayTypeName","src":"7225:18:133","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenSpenderPair_$48459_storage_$dyn_storage_ptr","typeString":"struct IAllowanceTransfer.TokenSpenderPair[]"}},"visibility":"internal"}],"src":"7224:39:133"},"returnParameters":{"id":48546,"nodeType":"ParameterList","parameters":[],"src":"7272:0:133"},"scope":48558,"src":"7207:66:133","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":48548,"nodeType":"StructuredDocumentation","src":"7279:332:133","text":"@notice Invalidate nonces for a given (token, spender) pair\n @param token The token to invalidate nonces for\n @param spender The spender to invalidate nonces for\n @param newNonce The new nonce to set. Invalidates all nonces less than it.\n @dev Can't invalidate more than 2**16 nonces per transaction."},"functionSelector":"65d9723c","id":48557,"implemented":false,"kind":"function","modifiers":[],"name":"invalidateNonces","nameLocation":"7625:16:133","nodeType":"FunctionDefinition","parameters":{"id":48555,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48550,"mutability":"mutable","name":"token","nameLocation":"7650:5:133","nodeType":"VariableDeclaration","scope":48557,"src":"7642:13:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48549,"name":"address","nodeType":"ElementaryTypeName","src":"7642:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48552,"mutability":"mutable","name":"spender","nameLocation":"7665:7:133","nodeType":"VariableDeclaration","scope":48557,"src":"7657:15:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48551,"name":"address","nodeType":"ElementaryTypeName","src":"7657:7:133","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48554,"mutability":"mutable","name":"newNonce","nameLocation":"7681:8:133","nodeType":"VariableDeclaration","scope":48557,"src":"7674:15:133","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"},"typeName":{"id":48553,"name":"uint48","nodeType":"ElementaryTypeName","src":"7674:6:133","typeDescriptions":{"typeIdentifier":"t_uint48","typeString":"uint48"}},"visibility":"internal"}],"src":"7641:49:133"},"returnParameters":{"id":48556,"nodeType":"ParameterList","parameters":[],"src":"7699:0:133"},"scope":48558,"src":"7616:84:133","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":48559,"src":"330:7372:133","usedErrors":[48358,48363,48366],"usedEvents":[48379,48392,48407,48416]}],"src":"32:7671:133"},"id":133},"permit2/src/interfaces/IEIP712.sol":{"ast":{"absolutePath":"permit2/src/interfaces/IEIP712.sol","exportedSymbols":{"IEIP712":[48566]},"id":48567,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":48560,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"32:23:134"},{"abstract":false,"baseContracts":[],"canonicalName":"IEIP712","contractDependencies":[],"contractKind":"interface","fullyImplemented":false,"id":48566,"linearizedBaseContracts":[48566],"name":"IEIP712","nameLocation":"67:7:134","nodeType":"ContractDefinition","nodes":[{"functionSelector":"3644e515","id":48565,"implemented":false,"kind":"function","modifiers":[],"name":"DOMAIN_SEPARATOR","nameLocation":"90:16:134","nodeType":"FunctionDefinition","parameters":{"id":48561,"nodeType":"ParameterList","parameters":[],"src":"106:2:134"},"returnParameters":{"id":48564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48563,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48565,"src":"132:7:134","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48562,"name":"bytes32","nodeType":"ElementaryTypeName","src":"132:7:134","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"131:9:134"},"scope":48566,"src":"81:60:134","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":48567,"src":"57:86:134","usedErrors":[],"usedEvents":[]}],"src":"32:112:134"},"id":134},"permit2/src/interfaces/IPermit2.sol":{"ast":{"absolutePath":"permit2/src/interfaces/IPermit2.sol","exportedSymbols":{"IAllowanceTransfer":[48558],"IPermit2":[48578],"ISignatureTransfer":[48718]},"id":48579,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":48568,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"32:23:135"},{"absolutePath":"permit2/src/interfaces/ISignatureTransfer.sol","file":"./ISignatureTransfer.sol","id":48570,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":48579,"sourceUnit":48719,"src":"57:60:135","symbolAliases":[{"foreign":{"id":48569,"name":"ISignatureTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48718,"src":"65:18:135","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"absolutePath":"permit2/src/interfaces/IAllowanceTransfer.sol","file":"./IAllowanceTransfer.sol","id":48572,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":48579,"sourceUnit":48559,"src":"118:60:135","symbolAliases":[{"foreign":{"id":48571,"name":"IAllowanceTransfer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48558,"src":"126:18:135","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":48574,"name":"ISignatureTransfer","nameLocations":["411:18:135"],"nodeType":"IdentifierPath","referencedDeclaration":48718,"src":"411:18:135"},"id":48575,"nodeType":"InheritanceSpecifier","src":"411:18:135"},{"baseName":{"id":48576,"name":"IAllowanceTransfer","nameLocations":["431:18:135"],"nodeType":"IdentifierPath","referencedDeclaration":48558,"src":"431:18:135"},"id":48577,"nodeType":"InheritanceSpecifier","src":"431:18:135"}],"canonicalName":"IPermit2","contractDependencies":[],"contractKind":"interface","documentation":{"id":48573,"nodeType":"StructuredDocumentation","src":"180:209:135","text":"@notice Permit2 handles signature-based transfers in SignatureTransfer and allowance-based transfers in AllowanceTransfer.\n @dev Users must approve Permit2 before calling any of the transfer functions."},"fullyImplemented":false,"id":48578,"linearizedBaseContracts":[48578,48558,48718,48566],"name":"IPermit2","nameLocation":"399:8:135","nodeType":"ContractDefinition","nodes":[],"scope":48579,"src":"389:158:135","usedErrors":[48358,48363,48366,48590,48593],"usedEvents":[48379,48392,48407,48416,48602]}],"src":"32:516:135"},"id":135},"permit2/src/interfaces/ISignatureTransfer.sol":{"ast":{"absolutePath":"permit2/src/interfaces/ISignatureTransfer.sol","exportedSymbols":{"IEIP712":[48566],"ISignatureTransfer":[48718]},"id":48719,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":48580,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"32:23:136"},{"absolutePath":"permit2/src/interfaces/IEIP712.sol","file":"./IEIP712.sol","id":48582,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":48719,"sourceUnit":48567,"src":"57:38:136","symbolAliases":[{"foreign":{"id":48581,"name":"IEIP712","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48566,"src":"65:7:136","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":48584,"name":"IEIP712","nameLocations":["296:7:136"],"nodeType":"IdentifierPath","referencedDeclaration":48566,"src":"296:7:136"},"id":48585,"nodeType":"InheritanceSpecifier","src":"296:7:136"}],"canonicalName":"ISignatureTransfer","contractDependencies":[],"contractKind":"interface","documentation":{"id":48583,"nodeType":"StructuredDocumentation","src":"97:167:136","text":"@title SignatureTransfer\n @notice Handles ERC20 token transfers through signature based actions\n @dev Requires user's token approval on the Permit2 contract"},"fullyImplemented":false,"id":48718,"linearizedBaseContracts":[48718,48566],"name":"ISignatureTransfer","nameLocation":"274:18:136","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":48586,"nodeType":"StructuredDocumentation","src":"310:176:136","text":"@notice Thrown when the requested amount for a transfer is larger than the permissioned amount\n @param maxAmount The maximum amount a spender can request to transfer"},"errorSelector":"3728b83d","id":48590,"name":"InvalidAmount","nameLocation":"497:13:136","nodeType":"ErrorDefinition","parameters":{"id":48589,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48588,"mutability":"mutable","name":"maxAmount","nameLocation":"519:9:136","nodeType":"VariableDeclaration","scope":48590,"src":"511:17:136","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48587,"name":"uint256","nodeType":"ElementaryTypeName","src":"511:7:136","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"510:19:136"},"src":"491:39:136"},{"documentation":{"id":48591,"nodeType":"StructuredDocumentation","src":"536:261:136","text":"@notice Thrown when the number of tokens permissioned to a spender does not match the number of tokens being transferred\n @dev If the spender does not need to transfer the number of tokens permitted, the spender can request amount 0 to be transferred"},"errorSelector":"ff633a38","id":48593,"name":"LengthMismatch","nameLocation":"808:14:136","nodeType":"ErrorDefinition","parameters":{"id":48592,"nodeType":"ParameterList","parameters":[],"src":"822:2:136"},"src":"802:23:136"},{"anonymous":false,"documentation":{"id":48594,"nodeType":"StructuredDocumentation","src":"831:86:136","text":"@notice Emits an event when the owner successfully invalidates an unordered nonce."},"eventSelector":"3704902f963766a4e561bbaab6e6cdc1b1dd12f6e9e99648da8843b3f46b918d","id":48602,"name":"UnorderedNonceInvalidation","nameLocation":"928:26:136","nodeType":"EventDefinition","parameters":{"id":48601,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48596,"indexed":true,"mutability":"mutable","name":"owner","nameLocation":"971:5:136","nodeType":"VariableDeclaration","scope":48602,"src":"955:21:136","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48595,"name":"address","nodeType":"ElementaryTypeName","src":"955:7:136","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48598,"indexed":false,"mutability":"mutable","name":"word","nameLocation":"986:4:136","nodeType":"VariableDeclaration","scope":48602,"src":"978:12:136","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48597,"name":"uint256","nodeType":"ElementaryTypeName","src":"978:7:136","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48600,"indexed":false,"mutability":"mutable","name":"mask","nameLocation":"1000:4:136","nodeType":"VariableDeclaration","scope":48602,"src":"992:12:136","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48599,"name":"uint256","nodeType":"ElementaryTypeName","src":"992:7:136","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"954:51:136"},"src":"922:84:136"},{"canonicalName":"ISignatureTransfer.TokenPermissions","documentation":{"id":48603,"nodeType":"StructuredDocumentation","src":"1012:95:136","text":"@notice The token and amount details for a transfer signed in the permit transfer signature"},"id":48608,"members":[{"constant":false,"id":48605,"mutability":"mutable","name":"token","nameLocation":"1185:5:136","nodeType":"VariableDeclaration","scope":48608,"src":"1177:13:136","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48604,"name":"address","nodeType":"ElementaryTypeName","src":"1177:7:136","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48607,"mutability":"mutable","name":"amount","nameLocation":"1256:6:136","nodeType":"VariableDeclaration","scope":48608,"src":"1248:14:136","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48606,"name":"uint256","nodeType":"ElementaryTypeName","src":"1248:7:136","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"TokenPermissions","nameLocation":"1119:16:136","nodeType":"StructDefinition","scope":48718,"src":"1112:157:136","visibility":"public"},{"canonicalName":"ISignatureTransfer.PermitTransferFrom","documentation":{"id":48609,"nodeType":"StructuredDocumentation","src":"1275:65:136","text":"@notice The signed permit message for a single token transfer"},"id":48617,"members":[{"constant":false,"id":48612,"mutability":"mutable","name":"permitted","nameLocation":"1398:9:136","nodeType":"VariableDeclaration","scope":48617,"src":"1381:26:136","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_struct$_TokenPermissions_$48608_storage_ptr","typeString":"struct ISignatureTransfer.TokenPermissions"},"typeName":{"id":48611,"nodeType":"UserDefinedTypeName","pathNode":{"id":48610,"name":"TokenPermissions","nameLocations":["1381:16:136"],"nodeType":"IdentifierPath","referencedDeclaration":48608,"src":"1381:16:136"},"referencedDeclaration":48608,"src":"1381:16:136","typeDescriptions":{"typeIdentifier":"t_struct$_TokenPermissions_$48608_storage_ptr","typeString":"struct ISignatureTransfer.TokenPermissions"}},"visibility":"internal"},{"constant":false,"id":48614,"mutability":"mutable","name":"nonce","nameLocation":"1514:5:136","nodeType":"VariableDeclaration","scope":48617,"src":"1506:13:136","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48613,"name":"uint256","nodeType":"ElementaryTypeName","src":"1506:7:136","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48616,"mutability":"mutable","name":"deadline","nameLocation":"1581:8:136","nodeType":"VariableDeclaration","scope":48617,"src":"1573:16:136","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48615,"name":"uint256","nodeType":"ElementaryTypeName","src":"1573:7:136","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"PermitTransferFrom","nameLocation":"1352:18:136","nodeType":"StructDefinition","scope":48718,"src":"1345:251:136","visibility":"public"},{"canonicalName":"ISignatureTransfer.SignatureTransferDetails","documentation":{"id":48618,"nodeType":"StructuredDocumentation","src":"1602:266:136","text":"@notice Specifies the recipient address and amount for batched transfers.\n @dev Recipients and amounts correspond to the index of the signed token permissions array.\n @dev Reverts if the requested amount is greater than the permitted signed amount."},"id":48623,"members":[{"constant":false,"id":48620,"mutability":"mutable","name":"to","nameLocation":"1952:2:136","nodeType":"VariableDeclaration","scope":48623,"src":"1944:10:136","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48619,"name":"address","nodeType":"ElementaryTypeName","src":"1944:7:136","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48622,"mutability":"mutable","name":"requestedAmount","nameLocation":"2008:15:136","nodeType":"VariableDeclaration","scope":48623,"src":"2000:23:136","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48621,"name":"uint256","nodeType":"ElementaryTypeName","src":"2000:7:136","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"SignatureTransferDetails","nameLocation":"1880:24:136","nodeType":"StructDefinition","scope":48718,"src":"1873:157:136","visibility":"public"},{"canonicalName":"ISignatureTransfer.PermitBatchTransferFrom","documentation":{"id":48624,"nodeType":"StructuredDocumentation","src":"2036:243:136","text":"@notice Used to reconstruct the signed permit message for multiple token transfers\n @dev Do not need to pass in spender address as it is required that it is msg.sender\n @dev Note that a user still signs over a spender address"},"id":48633,"members":[{"constant":false,"id":48628,"mutability":"mutable","name":"permitted","nameLocation":"2417:9:136","nodeType":"VariableDeclaration","scope":48633,"src":"2398:28:136","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenPermissions_$48608_storage_$dyn_storage_ptr","typeString":"struct ISignatureTransfer.TokenPermissions[]"},"typeName":{"baseType":{"id":48626,"nodeType":"UserDefinedTypeName","pathNode":{"id":48625,"name":"TokenPermissions","nameLocations":["2398:16:136"],"nodeType":"IdentifierPath","referencedDeclaration":48608,"src":"2398:16:136"},"referencedDeclaration":48608,"src":"2398:16:136","typeDescriptions":{"typeIdentifier":"t_struct$_TokenPermissions_$48608_storage_ptr","typeString":"struct ISignatureTransfer.TokenPermissions"}},"id":48627,"nodeType":"ArrayTypeName","src":"2398:18:136","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_TokenPermissions_$48608_storage_$dyn_storage_ptr","typeString":"struct ISignatureTransfer.TokenPermissions[]"}},"visibility":"internal"},{"constant":false,"id":48630,"mutability":"mutable","name":"nonce","nameLocation":"2533:5:136","nodeType":"VariableDeclaration","scope":48633,"src":"2525:13:136","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48629,"name":"uint256","nodeType":"ElementaryTypeName","src":"2525:7:136","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48632,"mutability":"mutable","name":"deadline","nameLocation":"2600:8:136","nodeType":"VariableDeclaration","scope":48633,"src":"2592:16:136","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48631,"name":"uint256","nodeType":"ElementaryTypeName","src":"2592:7:136","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"name":"PermitBatchTransferFrom","nameLocation":"2291:23:136","nodeType":"StructDefinition","scope":48718,"src":"2284:331:136","visibility":"public"},{"documentation":{"id":48634,"nodeType":"StructuredDocumentation","src":"2621:483:136","text":"@notice A map from token owner address and a caller specified word index to a bitmap. Used to set bits in the bitmap to prevent against signature replay protection\n @dev Uses unordered nonces so that permit messages do not need to be spent in a certain order\n @dev The mapping is indexed first by the token owner, then by an index specified in the nonce\n @dev It returns a uint256 bitmap\n @dev The index, or wordPosition is capped at type(uint248).max"},"functionSelector":"4fe02b44","id":48643,"implemented":false,"kind":"function","modifiers":[],"name":"nonceBitmap","nameLocation":"3118:11:136","nodeType":"FunctionDefinition","parameters":{"id":48639,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48636,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48643,"src":"3130:7:136","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48635,"name":"address","nodeType":"ElementaryTypeName","src":"3130:7:136","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48638,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48643,"src":"3139:7:136","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48637,"name":"uint256","nodeType":"ElementaryTypeName","src":"3139:7:136","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3129:18:136"},"returnParameters":{"id":48642,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48641,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":48643,"src":"3171:7:136","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48640,"name":"uint256","nodeType":"ElementaryTypeName","src":"3171:7:136","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3170:9:136"},"scope":48718,"src":"3109:71:136","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":48644,"nodeType":"StructuredDocumentation","src":"3186:413:136","text":"@notice Transfers a token using a signed permit message\n @dev Reverts if the requested amount is greater than the permitted signed amount\n @param permit The permit data signed over by the owner\n @param owner The owner of the tokens to transfer\n @param transferDetails The spender's requested transfer details for the permitted token\n @param signature The signature to verify"},"functionSelector":"30f28b7a","id":48657,"implemented":false,"kind":"function","modifiers":[],"name":"permitTransferFrom","nameLocation":"3613:18:136","nodeType":"FunctionDefinition","parameters":{"id":48655,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48647,"mutability":"mutable","name":"permit","nameLocation":"3667:6:136","nodeType":"VariableDeclaration","scope":48657,"src":"3641:32:136","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PermitTransferFrom_$48617_memory_ptr","typeString":"struct ISignatureTransfer.PermitTransferFrom"},"typeName":{"id":48646,"nodeType":"UserDefinedTypeName","pathNode":{"id":48645,"name":"PermitTransferFrom","nameLocations":["3641:18:136"],"nodeType":"IdentifierPath","referencedDeclaration":48617,"src":"3641:18:136"},"referencedDeclaration":48617,"src":"3641:18:136","typeDescriptions":{"typeIdentifier":"t_struct$_PermitTransferFrom_$48617_storage_ptr","typeString":"struct ISignatureTransfer.PermitTransferFrom"}},"visibility":"internal"},{"constant":false,"id":48650,"mutability":"mutable","name":"transferDetails","nameLocation":"3717:15:136","nodeType":"VariableDeclaration","scope":48657,"src":"3683:49:136","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_SignatureTransferDetails_$48623_calldata_ptr","typeString":"struct ISignatureTransfer.SignatureTransferDetails"},"typeName":{"id":48649,"nodeType":"UserDefinedTypeName","pathNode":{"id":48648,"name":"SignatureTransferDetails","nameLocations":["3683:24:136"],"nodeType":"IdentifierPath","referencedDeclaration":48623,"src":"3683:24:136"},"referencedDeclaration":48623,"src":"3683:24:136","typeDescriptions":{"typeIdentifier":"t_struct$_SignatureTransferDetails_$48623_storage_ptr","typeString":"struct ISignatureTransfer.SignatureTransferDetails"}},"visibility":"internal"},{"constant":false,"id":48652,"mutability":"mutable","name":"owner","nameLocation":"3750:5:136","nodeType":"VariableDeclaration","scope":48657,"src":"3742:13:136","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48651,"name":"address","nodeType":"ElementaryTypeName","src":"3742:7:136","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48654,"mutability":"mutable","name":"signature","nameLocation":"3780:9:136","nodeType":"VariableDeclaration","scope":48657,"src":"3765:24:136","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":48653,"name":"bytes","nodeType":"ElementaryTypeName","src":"3765:5:136","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3631:164:136"},"returnParameters":{"id":48656,"nodeType":"ParameterList","parameters":[],"src":"3804:0:136"},"scope":48718,"src":"3604:201:136","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":48658,"nodeType":"StructuredDocumentation","src":"3811:815:136","text":"@notice Transfers a token using a signed permit message\n @notice Includes extra data provided by the caller to verify signature over\n @dev The witness type string must follow EIP712 ordering of nested structs and must include the TokenPermissions type definition\n @dev Reverts if the requested amount is greater than the permitted signed amount\n @param permit The permit data signed over by the owner\n @param owner The owner of the tokens to transfer\n @param transferDetails The spender's requested transfer details for the permitted token\n @param witness Extra data to include when checking the user signature\n @param witnessTypeString The EIP-712 type definition for remaining string stub of the typehash\n @param signature The signature to verify"},"functionSelector":"137c29fe","id":48675,"implemented":false,"kind":"function","modifiers":[],"name":"permitWitnessTransferFrom","nameLocation":"4640:25:136","nodeType":"FunctionDefinition","parameters":{"id":48673,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48661,"mutability":"mutable","name":"permit","nameLocation":"4701:6:136","nodeType":"VariableDeclaration","scope":48675,"src":"4675:32:136","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PermitTransferFrom_$48617_memory_ptr","typeString":"struct ISignatureTransfer.PermitTransferFrom"},"typeName":{"id":48660,"nodeType":"UserDefinedTypeName","pathNode":{"id":48659,"name":"PermitTransferFrom","nameLocations":["4675:18:136"],"nodeType":"IdentifierPath","referencedDeclaration":48617,"src":"4675:18:136"},"referencedDeclaration":48617,"src":"4675:18:136","typeDescriptions":{"typeIdentifier":"t_struct$_PermitTransferFrom_$48617_storage_ptr","typeString":"struct ISignatureTransfer.PermitTransferFrom"}},"visibility":"internal"},{"constant":false,"id":48664,"mutability":"mutable","name":"transferDetails","nameLocation":"4751:15:136","nodeType":"VariableDeclaration","scope":48675,"src":"4717:49:136","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_struct$_SignatureTransferDetails_$48623_calldata_ptr","typeString":"struct ISignatureTransfer.SignatureTransferDetails"},"typeName":{"id":48663,"nodeType":"UserDefinedTypeName","pathNode":{"id":48662,"name":"SignatureTransferDetails","nameLocations":["4717:24:136"],"nodeType":"IdentifierPath","referencedDeclaration":48623,"src":"4717:24:136"},"referencedDeclaration":48623,"src":"4717:24:136","typeDescriptions":{"typeIdentifier":"t_struct$_SignatureTransferDetails_$48623_storage_ptr","typeString":"struct ISignatureTransfer.SignatureTransferDetails"}},"visibility":"internal"},{"constant":false,"id":48666,"mutability":"mutable","name":"owner","nameLocation":"4784:5:136","nodeType":"VariableDeclaration","scope":48675,"src":"4776:13:136","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48665,"name":"address","nodeType":"ElementaryTypeName","src":"4776:7:136","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48668,"mutability":"mutable","name":"witness","nameLocation":"4807:7:136","nodeType":"VariableDeclaration","scope":48675,"src":"4799:15:136","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48667,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4799:7:136","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":48670,"mutability":"mutable","name":"witnessTypeString","nameLocation":"4840:17:136","nodeType":"VariableDeclaration","scope":48675,"src":"4824:33:136","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":48669,"name":"string","nodeType":"ElementaryTypeName","src":"4824:6:136","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":48672,"mutability":"mutable","name":"signature","nameLocation":"4882:9:136","nodeType":"VariableDeclaration","scope":48675,"src":"4867:24:136","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":48671,"name":"bytes","nodeType":"ElementaryTypeName","src":"4867:5:136","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4665:232:136"},"returnParameters":{"id":48674,"nodeType":"ParameterList","parameters":[],"src":"4906:0:136"},"scope":48718,"src":"4631:276:136","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":48676,"nodeType":"StructuredDocumentation","src":"4913:335:136","text":"@notice Transfers multiple tokens using a signed permit message\n @param permit The permit data signed over by the owner\n @param owner The owner of the tokens to transfer\n @param transferDetails Specifies the recipient and requested amount for the token transfer\n @param signature The signature to verify"},"functionSelector":"edd9444b","id":48690,"implemented":false,"kind":"function","modifiers":[],"name":"permitTransferFrom","nameLocation":"5262:18:136","nodeType":"FunctionDefinition","parameters":{"id":48688,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48679,"mutability":"mutable","name":"permit","nameLocation":"5321:6:136","nodeType":"VariableDeclaration","scope":48690,"src":"5290:37:136","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PermitBatchTransferFrom_$48633_memory_ptr","typeString":"struct ISignatureTransfer.PermitBatchTransferFrom"},"typeName":{"id":48678,"nodeType":"UserDefinedTypeName","pathNode":{"id":48677,"name":"PermitBatchTransferFrom","nameLocations":["5290:23:136"],"nodeType":"IdentifierPath","referencedDeclaration":48633,"src":"5290:23:136"},"referencedDeclaration":48633,"src":"5290:23:136","typeDescriptions":{"typeIdentifier":"t_struct$_PermitBatchTransferFrom_$48633_storage_ptr","typeString":"struct ISignatureTransfer.PermitBatchTransferFrom"}},"visibility":"internal"},{"constant":false,"id":48683,"mutability":"mutable","name":"transferDetails","nameLocation":"5373:15:136","nodeType":"VariableDeclaration","scope":48690,"src":"5337:51:136","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SignatureTransferDetails_$48623_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ISignatureTransfer.SignatureTransferDetails[]"},"typeName":{"baseType":{"id":48681,"nodeType":"UserDefinedTypeName","pathNode":{"id":48680,"name":"SignatureTransferDetails","nameLocations":["5337:24:136"],"nodeType":"IdentifierPath","referencedDeclaration":48623,"src":"5337:24:136"},"referencedDeclaration":48623,"src":"5337:24:136","typeDescriptions":{"typeIdentifier":"t_struct$_SignatureTransferDetails_$48623_storage_ptr","typeString":"struct ISignatureTransfer.SignatureTransferDetails"}},"id":48682,"nodeType":"ArrayTypeName","src":"5337:26:136","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SignatureTransferDetails_$48623_storage_$dyn_storage_ptr","typeString":"struct ISignatureTransfer.SignatureTransferDetails[]"}},"visibility":"internal"},{"constant":false,"id":48685,"mutability":"mutable","name":"owner","nameLocation":"5406:5:136","nodeType":"VariableDeclaration","scope":48690,"src":"5398:13:136","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48684,"name":"address","nodeType":"ElementaryTypeName","src":"5398:7:136","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48687,"mutability":"mutable","name":"signature","nameLocation":"5436:9:136","nodeType":"VariableDeclaration","scope":48690,"src":"5421:24:136","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":48686,"name":"bytes","nodeType":"ElementaryTypeName","src":"5421:5:136","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5280:171:136"},"returnParameters":{"id":48689,"nodeType":"ParameterList","parameters":[],"src":"5460:0:136"},"scope":48718,"src":"5253:208:136","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":48691,"nodeType":"StructuredDocumentation","src":"5467:737:136","text":"@notice Transfers multiple tokens using a signed permit message\n @dev The witness type string must follow EIP712 ordering of nested structs and must include the TokenPermissions type definition\n @notice Includes extra data provided by the caller to verify signature over\n @param permit The permit data signed over by the owner\n @param owner The owner of the tokens to transfer\n @param transferDetails Specifies the recipient and requested amount for the token transfer\n @param witness Extra data to include when checking the user signature\n @param witnessTypeString The EIP-712 type definition for remaining string stub of the typehash\n @param signature The signature to verify"},"functionSelector":"fe8ec1a7","id":48709,"implemented":false,"kind":"function","modifiers":[],"name":"permitWitnessTransferFrom","nameLocation":"6218:25:136","nodeType":"FunctionDefinition","parameters":{"id":48707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48694,"mutability":"mutable","name":"permit","nameLocation":"6284:6:136","nodeType":"VariableDeclaration","scope":48709,"src":"6253:37:136","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_PermitBatchTransferFrom_$48633_memory_ptr","typeString":"struct ISignatureTransfer.PermitBatchTransferFrom"},"typeName":{"id":48693,"nodeType":"UserDefinedTypeName","pathNode":{"id":48692,"name":"PermitBatchTransferFrom","nameLocations":["6253:23:136"],"nodeType":"IdentifierPath","referencedDeclaration":48633,"src":"6253:23:136"},"referencedDeclaration":48633,"src":"6253:23:136","typeDescriptions":{"typeIdentifier":"t_struct$_PermitBatchTransferFrom_$48633_storage_ptr","typeString":"struct ISignatureTransfer.PermitBatchTransferFrom"}},"visibility":"internal"},{"constant":false,"id":48698,"mutability":"mutable","name":"transferDetails","nameLocation":"6336:15:136","nodeType":"VariableDeclaration","scope":48709,"src":"6300:51:136","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SignatureTransferDetails_$48623_calldata_ptr_$dyn_calldata_ptr","typeString":"struct ISignatureTransfer.SignatureTransferDetails[]"},"typeName":{"baseType":{"id":48696,"nodeType":"UserDefinedTypeName","pathNode":{"id":48695,"name":"SignatureTransferDetails","nameLocations":["6300:24:136"],"nodeType":"IdentifierPath","referencedDeclaration":48623,"src":"6300:24:136"},"referencedDeclaration":48623,"src":"6300:24:136","typeDescriptions":{"typeIdentifier":"t_struct$_SignatureTransferDetails_$48623_storage_ptr","typeString":"struct ISignatureTransfer.SignatureTransferDetails"}},"id":48697,"nodeType":"ArrayTypeName","src":"6300:26:136","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SignatureTransferDetails_$48623_storage_$dyn_storage_ptr","typeString":"struct ISignatureTransfer.SignatureTransferDetails[]"}},"visibility":"internal"},{"constant":false,"id":48700,"mutability":"mutable","name":"owner","nameLocation":"6369:5:136","nodeType":"VariableDeclaration","scope":48709,"src":"6361:13:136","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":48699,"name":"address","nodeType":"ElementaryTypeName","src":"6361:7:136","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":48702,"mutability":"mutable","name":"witness","nameLocation":"6392:7:136","nodeType":"VariableDeclaration","scope":48709,"src":"6384:15:136","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":48701,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6384:7:136","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":48704,"mutability":"mutable","name":"witnessTypeString","nameLocation":"6425:17:136","nodeType":"VariableDeclaration","scope":48709,"src":"6409:33:136","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":48703,"name":"string","nodeType":"ElementaryTypeName","src":"6409:6:136","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":48706,"mutability":"mutable","name":"signature","nameLocation":"6467:9:136","nodeType":"VariableDeclaration","scope":48709,"src":"6452:24:136","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":48705,"name":"bytes","nodeType":"ElementaryTypeName","src":"6452:5:136","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6243:239:136"},"returnParameters":{"id":48708,"nodeType":"ParameterList","parameters":[],"src":"6491:0:136"},"scope":48718,"src":"6209:283:136","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":48710,"nodeType":"StructuredDocumentation","src":"6498:294:136","text":"@notice Invalidates the bits specified in mask for the bitmap at the word position\n @dev The wordPos is maxed at type(uint248).max\n @param wordPos A number to index the nonceBitmap at\n @param mask A bitmap masked against msg.sender's current bitmap at the word position"},"functionSelector":"3ff9dcb1","id":48717,"implemented":false,"kind":"function","modifiers":[],"name":"invalidateUnorderedNonces","nameLocation":"6806:25:136","nodeType":"FunctionDefinition","parameters":{"id":48715,"nodeType":"ParameterList","parameters":[{"constant":false,"id":48712,"mutability":"mutable","name":"wordPos","nameLocation":"6840:7:136","nodeType":"VariableDeclaration","scope":48717,"src":"6832:15:136","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48711,"name":"uint256","nodeType":"ElementaryTypeName","src":"6832:7:136","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":48714,"mutability":"mutable","name":"mask","nameLocation":"6857:4:136","nodeType":"VariableDeclaration","scope":48717,"src":"6849:12:136","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":48713,"name":"uint256","nodeType":"ElementaryTypeName","src":"6849:7:136","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6831:31:136"},"returnParameters":{"id":48716,"nodeType":"ParameterList","parameters":[],"src":"6871:0:136"},"scope":48718,"src":"6797:75:136","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":48719,"src":"264:6610:136","usedErrors":[48590,48593],"usedEvents":[48602]}],"src":"32:6843:136"},"id":136}},"contracts":{"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol":{"IPoolInfo":{"abi":[{"inputs":[],"name":"getAggregateFeePercentages","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getAggregateFeePercentages()":"81fa807c","getCurrentLiveBalances()":"b156aa0a","getStaticSwapFeePercentage()":"d335b0cf","getTokenInfo()":"abb1dc44","getTokens()":"aa6ca808"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getAggregateFeePercentages\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getAggregateFeePercentages()\":{\"details\":\"These are determined by the current protocol and pool creator fees, set in the `ProtocolFeeController`.\",\"returns\":{\"aggregateSwapFeePercentage\":\"The aggregate percentage fee applied to swaps\",\"aggregateYieldFeePercentage\":\"The aggregate percentage fee applied to yield\"}},\"getCurrentLiveBalances()\":{\"details\":\"Note that live balances will not necessarily be accurate if the pool is in Recovery Mode. Withdrawals in Recovery Mode do not make external calls (including those necessary for updating live balances), so if there are withdrawals, raw and live balances will be out of sync until Recovery Mode is disabled.\",\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getStaticSwapFeePercentage()\":{\"returns\":{\"staticSwapFeePercentage\":\"18-decimal FP value of the static swap fee percentage\"}},\"getTokenInfo()\":{\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"Pool tokens, sorted in token registration order\"}},\"getTokens()\":{\"returns\":{\"tokens\":\"List of tokens in the pool, sorted in registration order\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAggregateFeePercentages()\":{\"notice\":\"Gets the aggregate swap and yield fee percentages for a pool.\"},\"getCurrentLiveBalances()\":{\"notice\":\"Gets the current live balances of the pool as fixed point, 18-decimal numbers.\"},\"getStaticSwapFeePercentage()\":{\"notice\":\"Fetches the static swap fee percentage for the pool.\"},\"getTokenInfo()\":{\"notice\":\"Gets the raw data for the pool: tokens, token info, raw balances, and last live balances.\"},\"getTokens()\":{\"notice\":\"Gets the tokens registered in the pool.\"}},\"notice\":\"Convenience interface for pools, to get easy access to information stored in the Vault. Intended mostly for off-chain requests; pools do not need to implement this to work properly.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol\":\"IPoolInfo\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol\":{\"keccak256\":\"0xa7adbaf80bc9cfa44e41776f632b5d7cb2c02c562a124c0e4cb17f06c4a54db3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e4fdf59a7f3dc3b7d6bb6f466e4a0a6263b66c0fc12492baf06ec8c6fdcc2398\",\"dweb:/ipfs/QmWxLpicLjGdgGQ8GjuN9YfDyVapYWwzdgET86ucs9hmFa\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/pool-weighted/ILBPool.sol":{"ILBPool":{"abi":[{"inputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256","name":"tokenInIndex","type":"uint256"},{"internalType":"uint256","name":"invariantRatio","type":"uint256"}],"name":"computeBalance","outputs":[{"internalType":"uint256","name":"newBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"enum Rounding","name":"rounding","type":"uint8"}],"name":"computeInvariant","outputs":[{"internalType":"uint256","name":"invariant","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLBPoolDynamicData","outputs":[{"components":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"normalizedWeights","type":"uint256[]"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"},{"internalType":"bool","name":"isSwapEnabled","type":"bool"}],"internalType":"struct LBPoolDynamicData","name":"data","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLBPoolImmutableData","outputs":[{"components":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"startWeights","type":"uint256[]"},{"internalType":"uint256[]","name":"endWeights","type":"uint256[]"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"projectTokenIndex","type":"uint256"},{"internalType":"uint256","name":"reserveTokenIndex","type":"uint256"},{"internalType":"bool","name":"isProjectTokenSwapInBlocked","type":"bool"}],"internalType":"struct LBPoolImmutableData","name":"data","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumInvariantRatio","outputs":[{"internalType":"uint256","name":"maximumInvariantRatio","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"maximumSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumInvariantRatio","outputs":[{"internalType":"uint256","name":"minimumInvariantRatio","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"minimumSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProjectToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReserveToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"}],"name":"onSwap","outputs":[{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"computeBalance(uint256[],uint256,uint256)":"16a0b3e0","computeInvariant(uint256[],uint8)":"984de9e8","getLBPoolDynamicData()":"e565c29e","getLBPoolImmutableData()":"0ca89848","getMaximumInvariantRatio()":"273c1adf","getMaximumSwapFeePercentage()":"654cf15d","getMinimumInvariantRatio()":"b677fa56","getMinimumSwapFeePercentage()":"ce20ece7","getProjectToken()":"4837c596","getReserveToken()":"e594203d","onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))":"72c98186"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"tokenInIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"invariantRatio\",\"type\":\"uint256\"}],\"name\":\"computeBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"enum Rounding\",\"name\":\"rounding\",\"type\":\"uint8\"}],\"name\":\"computeInvariant\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"invariant\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLBPoolDynamicData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"normalizedWeights\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isSwapEnabled\",\"type\":\"bool\"}],\"internalType\":\"struct LBPoolDynamicData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLBPoolImmutableData\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"startWeights\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"endWeights\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectTokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveTokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isProjectTokenSwapInBlocked\",\"type\":\"bool\"}],\"internalType\":\"struct LBPoolImmutableData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maximumInvariantRatio\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maximumSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumInvariantRatio\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProjectToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReserveToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"onSwap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"There is some redundancy here to cover all use cases. Project and reserve tokens can be read directly, if that is all that's needed. Those who already need the more complete data in `LBPoolImmutableData` can recover these values without further calls by indexing into the `tokens` array with `projectTokenIndex` and `reserveTokenIndex`.\",\"kind\":\"dev\",\"methods\":{\"computeBalance(uint256[],uint256,uint256)\":{\"details\":\"Similar to V2's `_getTokenBalanceGivenInvariantAndAllOtherBalances` in StableMath. The pool must round up for the Vault to round in the protocol's favor when calling this function.\",\"params\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\",\"invariantRatio\":\"The ratio of the new invariant (after an operation) to the old\",\"tokenInIndex\":\"The index of the token we're computing the balance for, sorted in token registration order\"},\"returns\":{\"newBalance\":\"The new balance of the selected token, after the operation\"}},\"computeInvariant(uint256[],uint8)\":{\"details\":\"This function computes the invariant based on current balances (and potentially other pool state). The rounding direction must be respected for the Vault to round in the pool's favor when calling this function. If the invariant computation involves no precision loss (e.g. simple sum of balances), the same result can be returned for both rounding directions. You can think of the invariant as a measure of the \\\"value\\\" of the pool, which is related to the total liquidity (i.e., the \\\"BPT rate\\\" is `invariant` / `totalSupply`). Two critical properties must hold: 1) The invariant should not change due to a swap. In practice, it can *increase* due to swap fees, which effectively add liquidity after the swap - but it should never decrease. 2) The invariant must be \\\"linear\\\"; i.e., increasing the balances proportionally must increase the invariant in the same proportion: inv(a * n, b * n, c * n) = inv(a, b, c) * n Property #1 is required to prevent \\\"round trip\\\" paths that drain value from the pool (and all LP shareholders). Intuitively, an accurate pricing algorithm ensures the user gets an equal value of token out given token in, so the total value should not change. Property #2 is essential for the \\\"fungibility\\\" of LP shares. If it did not hold, then different users depositing the same total value would get a different number of LP shares. In that case, LP shares would not be interchangeable, as they must be in a fair DEX.\",\"params\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\",\"rounding\":\"Rounding direction to consider when computing the invariant\"},\"returns\":{\"invariant\":\"The calculated invariant of the pool, represented as a uint256\"}},\"getLBPoolDynamicData()\":{\"returns\":{\"data\":\"A struct containing all dynamic LBP parameters\"}},\"getLBPoolImmutableData()\":{\"returns\":{\"data\":\"A struct containing all immutable LBP parameters\"}},\"getMaximumInvariantRatio()\":{\"returns\":{\"maximumInvariantRatio\":\"The maximum invariant ratio for a pool during unbalanced add liquidity\"}},\"getMaximumSwapFeePercentage()\":{\"returns\":{\"maximumSwapFeePercentage\":\"The maximum swap fee percentage for a pool\"}},\"getMinimumInvariantRatio()\":{\"returns\":{\"minimumInvariantRatio\":\"The minimum invariant ratio for a pool during unbalanced remove liquidity\"}},\"getMinimumSwapFeePercentage()\":{\"returns\":{\"minimumSwapFeePercentage\":\"The minimum swap fee percentage for a pool\"}},\"getProjectToken()\":{\"details\":\"This is the token being distributed through the sale. It is also available in the immutable data, but this getter is provided as a convenience for those who only need the project token address.\",\"returns\":{\"_0\":\"projectToken The address of the project token\"}},\"getReserveToken()\":{\"details\":\"This is the token exchanged for the project token (usually a stablecoin or WETH). It is also available in the immutable data, but this getter is provided as a convenience for those who only need the reserve token address.\",\"returns\":{\"_0\":\"reserveToken The address of the reserve token\"}},\"onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"amountCalculatedScaled18\":\"Calculated amount for the swap operation\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"computeBalance(uint256[],uint256,uint256)\":{\"notice\":\"Computes a new token balance, given the invariant growth ratio and all other balances.\"},\"computeInvariant(uint256[],uint8)\":{\"notice\":\"Computes the pool's invariant.\"},\"getLBPoolDynamicData()\":{\"notice\":\"Get dynamic pool data relevant to swap/add/remove calculations.\"},\"getLBPoolImmutableData()\":{\"notice\":\"Get immutable pool data relevant to swap/add/remove calculations.\"},\"getProjectToken()\":{\"notice\":\"Get the project token for this LBP.\"},\"getReserveToken()\":{\"notice\":\"Get the reserve token for this LBP.\"},\"onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Execute a swap in the pool.\"}},\"notice\":\"Full LBP interface - base pool plus immutable/dynamic field getters.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/pool-weighted/ILBPool.sol\":\"ILBPool\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/pool-weighted/ILBPool.sol\":{\"keccak256\":\"0x8f95dab12a3243740c7567076e867d9aaa072936379ea432e0ac70ed2d4e3097\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0e28e152e7f324bdf9f63020e4f13c0b6fbd5dd73ebcd53737a5769fd71c16e0\",\"dweb:/ipfs/QmZFQV77NuL3xPPFTcRPfRC7eYC12V1Et4G9TrLVsnEukd\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol":{"IWeightedPool":{"abi":[{"inputs":[],"name":"MinWeight","type":"error"},{"inputs":[],"name":"NormalizedWeightInvariant","type":"error"},{"inputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256","name":"tokenInIndex","type":"uint256"},{"internalType":"uint256","name":"invariantRatio","type":"uint256"}],"name":"computeBalance","outputs":[{"internalType":"uint256","name":"newBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"enum Rounding","name":"rounding","type":"uint8"}],"name":"computeInvariant","outputs":[{"internalType":"uint256","name":"invariant","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumInvariantRatio","outputs":[{"internalType":"uint256","name":"maximumInvariantRatio","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"maximumSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumInvariantRatio","outputs":[{"internalType":"uint256","name":"minimumInvariantRatio","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"minimumSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNormalizedWeights","outputs":[{"internalType":"uint256[]","name":"normalizedWeights","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWeightedPoolDynamicData","outputs":[{"components":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct WeightedPoolDynamicData","name":"data","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWeightedPoolImmutableData","outputs":[{"components":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"normalizedWeights","type":"uint256[]"}],"internalType":"struct WeightedPoolImmutableData","name":"data","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"}],"name":"onSwap","outputs":[{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"computeBalance(uint256[],uint256,uint256)":"16a0b3e0","computeInvariant(uint256[],uint8)":"984de9e8","getMaximumInvariantRatio()":"273c1adf","getMaximumSwapFeePercentage()":"654cf15d","getMinimumInvariantRatio()":"b677fa56","getMinimumSwapFeePercentage()":"ce20ece7","getNormalizedWeights()":"f89f27ed","getWeightedPoolDynamicData()":"c0bc6f33","getWeightedPoolImmutableData()":"53b79bd7","onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))":"72c98186"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"MinWeight\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NormalizedWeightInvariant\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"tokenInIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"invariantRatio\",\"type\":\"uint256\"}],\"name\":\"computeBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"enum Rounding\",\"name\":\"rounding\",\"type\":\"uint8\"}],\"name\":\"computeInvariant\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"invariant\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maximumInvariantRatio\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maximumSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumInvariantRatio\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNormalizedWeights\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"normalizedWeights\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWeightedPoolDynamicData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct WeightedPoolDynamicData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWeightedPoolImmutableData\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"normalizedWeights\",\"type\":\"uint256[]\"}],\"internalType\":\"struct WeightedPoolImmutableData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"onSwap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"computeBalance(uint256[],uint256,uint256)\":{\"details\":\"Similar to V2's `_getTokenBalanceGivenInvariantAndAllOtherBalances` in StableMath. The pool must round up for the Vault to round in the protocol's favor when calling this function.\",\"params\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\",\"invariantRatio\":\"The ratio of the new invariant (after an operation) to the old\",\"tokenInIndex\":\"The index of the token we're computing the balance for, sorted in token registration order\"},\"returns\":{\"newBalance\":\"The new balance of the selected token, after the operation\"}},\"computeInvariant(uint256[],uint8)\":{\"details\":\"This function computes the invariant based on current balances (and potentially other pool state). The rounding direction must be respected for the Vault to round in the pool's favor when calling this function. If the invariant computation involves no precision loss (e.g. simple sum of balances), the same result can be returned for both rounding directions. You can think of the invariant as a measure of the \\\"value\\\" of the pool, which is related to the total liquidity (i.e., the \\\"BPT rate\\\" is `invariant` / `totalSupply`). Two critical properties must hold: 1) The invariant should not change due to a swap. In practice, it can *increase* due to swap fees, which effectively add liquidity after the swap - but it should never decrease. 2) The invariant must be \\\"linear\\\"; i.e., increasing the balances proportionally must increase the invariant in the same proportion: inv(a * n, b * n, c * n) = inv(a, b, c) * n Property #1 is required to prevent \\\"round trip\\\" paths that drain value from the pool (and all LP shareholders). Intuitively, an accurate pricing algorithm ensures the user gets an equal value of token out given token in, so the total value should not change. Property #2 is essential for the \\\"fungibility\\\" of LP shares. If it did not hold, then different users depositing the same total value would get a different number of LP shares. In that case, LP shares would not be interchangeable, as they must be in a fair DEX.\",\"params\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\",\"rounding\":\"Rounding direction to consider when computing the invariant\"},\"returns\":{\"invariant\":\"The calculated invariant of the pool, represented as a uint256\"}},\"getMaximumInvariantRatio()\":{\"returns\":{\"maximumInvariantRatio\":\"The maximum invariant ratio for a pool during unbalanced add liquidity\"}},\"getMaximumSwapFeePercentage()\":{\"returns\":{\"maximumSwapFeePercentage\":\"The maximum swap fee percentage for a pool\"}},\"getMinimumInvariantRatio()\":{\"returns\":{\"minimumInvariantRatio\":\"The minimum invariant ratio for a pool during unbalanced remove liquidity\"}},\"getMinimumSwapFeePercentage()\":{\"returns\":{\"minimumSwapFeePercentage\":\"The minimum swap fee percentage for a pool\"}},\"getNormalizedWeights()\":{\"returns\":{\"normalizedWeights\":\"The normalized weights, sorted in token registration order\"}},\"getWeightedPoolDynamicData()\":{\"returns\":{\"data\":\"A struct containing all dynamic weighted pool parameters\"}},\"getWeightedPoolImmutableData()\":{\"returns\":{\"data\":\"A struct containing all immutable weighted pool parameters\"}},\"onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"amountCalculatedScaled18\":\"Calculated amount for the swap operation\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"MinWeight()\":[{\"notice\":\"Indicates that one of the pool tokens' weight is below the minimum allowed.\"}],\"NormalizedWeightInvariant()\":[{\"notice\":\"Indicates that the sum of the pool tokens' weights is not FixedPoint.ONE.\"}]},\"kind\":\"user\",\"methods\":{\"computeBalance(uint256[],uint256,uint256)\":{\"notice\":\"Computes a new token balance, given the invariant growth ratio and all other balances.\"},\"computeInvariant(uint256[],uint8)\":{\"notice\":\"Computes the pool's invariant.\"},\"getNormalizedWeights()\":{\"notice\":\"Get the normalized weights.\"},\"getWeightedPoolDynamicData()\":{\"notice\":\"Get dynamic pool data relevant to swap/add/remove calculations.\"},\"getWeightedPoolImmutableData()\":{\"notice\":\"Get immutable pool data relevant to swap/add/remove calculations.\"},\"onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Execute a swap in the pool.\"}},\"notice\":\"Full Weighted pool interface.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol\":\"IWeightedPool\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol\":{\"keccak256\":\"0xae65b6b0800fed858a56df5dc8fe7eda072f7d409f0e0d4c63ad8fca5f0c8d33\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4503850853e86c655d3dba125613822c26552c834215e24bd88c2ac0f29675d4\",\"dweb:/ipfs/QmQ4dGpVpRcyhVfer2qsnbX2tTktwVXoX2bvoodrh3tinR\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol":{"IAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"notice\":\"Simple interface for permissioned calling of external functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":\"IAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IPoolVersion.sol":{"IPoolVersion":{"abi":[{"inputs":[],"name":"getPoolVersion","outputs":[{"internalType":"string","name":"poolVersion","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getPoolVersion()":"3f819b6f"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getPoolVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"poolVersion\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getPoolVersion()\":{\"details\":\"This is typically only useful in complex Pool deployment schemes, where multiple subsystems need to know about each other. Note that this value will only be set at factory creation time.\",\"returns\":{\"poolVersion\":\"A string representation of the pool version\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getPoolVersion()\":{\"notice\":\"Returns a JSON representation of the deployed pool version containing name, version number and task ID.\"}},\"notice\":\"Simple interface to retrieve the version of pools deployed by a pool factory.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IPoolVersion.sol\":\"IPoolVersion\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IPoolVersion.sol\":{\"keccak256\":\"0xb97e44d4ebd74212195ebf10dc94cd46929e4c3dd217215945d164f02426891f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cdc1656abb0e6c82640d17e2752684cce674cdd54665e01491c2b3ccb74c5d8f\",\"dweb:/ipfs/QmfFr81CMmBJa27uHe4aquqHmU2nXCTpXST1shNq6ik8PA\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol":{"IRateProvider":{"abi":[{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getRate()":"679aefce"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getRate()\":{\"details\":\"The meaning of this rate depends on the context. Note that there may be an error associated with a token rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface does not take a rounding direction or return an error, so great care must be taken when interpreting and using rates in downstream computations.\",\"returns\":{\"rate\":\"The current token rate\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getRate()\":{\"notice\":\"An 18 decimal fixed point number representing the exchange rate of one token to another related token.\"}},\"notice\":\"General interface for token exchange rates.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":\"IRateProvider\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol":{"IVersion":{"abi":[{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"version()\":{\"details\":\"For standard Balancer contracts, returns a JSON representation of the contract version containing name, version number and task ID. See real examples in the deployment repo; local tests just use plain text strings.\",\"returns\":{\"_0\":\"version The version string corresponding to the current deployed contract\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"version()\":{\"notice\":\"Return arbitrary text representing the version of a contract.\"}},\"notice\":\"Simple interface to retrieve the version of a deployed contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":\"IVersion\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol":{"IWETH":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","deposit()":"d0e30db0","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","withdraw(uint256)":"2e1a7d4d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"deposit()\":{\"details\":\"The amount is msg.value.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"withdraw(uint256)\":{\"params\":{\"amount\":\"The amount to withdraw\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"deposit()\":{\"notice\":\"\\\"wrap\\\" native ETH to WETH.\"},\"withdraw(uint256)\":{\"notice\":\"\\\"unwrap\\\" WETH to native ETH.\"}},\"notice\":\"Interface for WETH9. See https://github.com/gnosis/canonical-weth/blob/0dd1ea3e295eef916d0c6223ec63141137d22d67/contracts/WETH9.sol\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol\":\"IWETH\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x75d5964b2f92dba9b9254e0052de28a9378e6759b1b28ccbb51db0bc80024176\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6ec9c862929ccff2be994d0296c0a4de3ddc19bb5a7aae3d4df0887dc7b29c8e\",\"dweb:/ipfs/QmSNr2fkNM2VyAo3B1DG1cuRh41t4A6mJZqeUu6vvYb97G\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/test/IVaultAdminMock.sol":{"IVaultAdminMock":{"abi":[{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"underlyingAmount","type":"uint256"},{"internalType":"uint256","name":"wrappedAmount","type":"uint256"}],"name":"addLiquidityToBufferUnbalancedForTests","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualBurnBufferShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"manualDisableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"manualEnableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualMintBufferShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"manualMintMinimumBufferSupplyReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"manualPausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualPauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"manualReentrancyAddLiquidityToBuffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"manualReentrancyDisableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"manualReentrancyInitializeBuffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOut","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOut","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"manualReentrancyRemoveLiquidityFromBufferHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"manualUnpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualUnpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"mockEnsurePoolNotInRecoveryMode","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"mockWithValidPercentage","outputs":[],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidityToBufferUnbalancedForTests(address,uint256,uint256)":"1f568ea3","manualBurnBufferShares(address,address,uint256)":"e8338894","manualDisableRecoveryMode(address)":"7578abb9","manualEnableRecoveryMode(address)":"27521d0c","manualMintBufferShares(address,address,uint256)":"6b230291","manualMintMinimumBufferSupplyReserve(address)":"e99ac9a3","manualPausePool(address)":"1558356e","manualPauseVault()":"071d8a02","manualReentrancyAddLiquidityToBuffer(address,uint256,uint256,uint256,address)":"9260d920","manualReentrancyDisableRecoveryMode(address)":"16df26cb","manualReentrancyInitializeBuffer(address,uint256,uint256,uint256,address)":"b61398cd","manualReentrancyRemoveLiquidityFromBufferHook(address,uint256,uint256,uint256,address)":"c7b3b3a9","manualUnpausePool(address)":"52b9e33d","manualUnpauseVault()":"cc671ff7","mockEnsurePoolNotInRecoveryMode(address)":"0b9df1f6","mockWithValidPercentage(uint256)":"88e5101a"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"underlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedAmount\",\"type\":\"uint256\"}],\"name\":\"addLiquidityToBufferUnbalancedForTests\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"manualBurnBufferShares\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"manualDisableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"manualEnableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"manualMintBufferShares\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"manualMintMinimumBufferSupplyReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"manualPausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualPauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"manualReentrancyAddLiquidityToBuffer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"manualReentrancyDisableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"manualReentrancyInitializeBuffer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"manualReentrancyRemoveLiquidityFromBufferHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"manualUnpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualUnpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"mockEnsurePoolNotInRecoveryMode\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"percentage\",\"type\":\"uint256\"}],\"name\":\"mockWithValidPercentage\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addLiquidityToBufferUnbalancedForTests(address,uint256,uint256)\":{\"details\":\"Adds liquidity to buffer unbalanced, so it can unbalance the buffer.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/test/IVaultAdminMock.sol\":\"IVaultAdminMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/test/IVaultAdminMock.sol\":{\"keccak256\":\"0x51d1502369f0bb1fec58b7aa848f20e6ea3ddcb4866471e2fdbe96f0f6783fb5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab9f73ec13f137f3103edf9caa8edc4752db585393cc7db6c62f85a1efdbfb5e\",\"dweb:/ipfs/QmXBoBF18c1f33NYqPmrJ3cqULMak55uznBvzfpf1bHpDd\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/test/IVaultExtensionMock.sol":{"IVaultExtensionMock":{"abi":[{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"manualInitializePoolReentrancy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"manualRegisterPoolReentrancy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"manuallySetSwapFee","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"manualInitializePoolReentrancy(address,address,address[],uint256[],uint256,bytes)":"809846d1","manualRegisterPoolReentrancy(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"e68010c6","manuallySetSwapFee(address,uint256)":"70600089"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"manualInitializePoolReentrancy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"manualRegisterPoolReentrancy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"manuallySetSwapFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/test/IVaultExtensionMock.sol\":\"IVaultExtensionMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/test/IVaultExtensionMock.sol\":{\"keccak256\":\"0x18c434c91bbcd260bd305f2cdc01684a3040bc633c1b185f95cb323a336ac76c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://270260ba29c81dc6d862a0830ccbbdcd81b4543bd9c9b54228493a92568532d4\",\"dweb:/ipfs/QmTHp7v5dGwLujPRaWkoEM22Loy3MuspodMGcm4syAPUvk\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/test/IVaultMainMock.sol":{"IVaultMainMock":{"abi":[{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"int256","name":"delta","type":"int256"}],"name":"accountDelta","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"name":"buildTokenConfig","outputs":[{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"contract IRateProvider[]","name":"rateProviders","type":"address[]"}],"name":"buildTokenConfig","outputs":[{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"enum TokenType[]","name":"tokenTypes","type":"uint8[]"},{"internalType":"contract IRateProvider[]","name":"rateProviders","type":"address[]"},{"internalType":"bool[]","name":"yieldFeeFlags","type":"bool[]"}],"name":"buildTokenConfig","outputs":[{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"contract IRateProvider[]","name":"rateProviders","type":"address[]"},{"internalType":"bool[]","name":"yieldFeeFlags","type":"bool[]"}],"name":"buildTokenConfig","outputs":[{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"},{"internalType":"uint256","name":"lastLiveBalance","type":"uint256"},{"internalType":"uint256","name":"tokenIndex","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"computeYieldFeesDue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ensurePoolNotPaused","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ensureUnpausedAndGetVaultState","outputs":[{"components":[{"internalType":"bool","name":"isQueryDisabled","type":"bool"},{"internalType":"bool","name":"isVaultPaused","type":"bool"},{"internalType":"bool","name":"areBuffersPaused","type":"bool"}],"internalType":"struct VaultState","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tradeAmount","type":"uint256"}],"name":"ensureValidSwapAmount","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tradeAmount","type":"uint256"}],"name":"ensureValidTradeAmount","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"forceLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceUnlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTokenBalancesBytes","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getLastLiveBalances","outputs":[{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolFactoryMock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getRawBalances","outputs":[{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"guardedCheckEntered","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"internalGetBufferUnderlyingImbalance","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"internalGetBufferWrappedImbalance","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum Rounding","name":"roundingDirection","type":"uint8"}],"name":"loadPoolDataUpdatingBalancesAndYieldFees","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum Rounding","name":"roundingDirection","type":"uint8"}],"name":"loadPoolDataUpdatingBalancesAndYieldFeesReentrancy","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"},{"internalType":"uint256[]","name":"maxAmountsInScaled18","type":"uint256[]"}],"name":"manualAddLiquidity","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"updatedPoolData","type":"tuple"},{"internalType":"uint256[]","name":"amountsInRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsInScaled18","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"},{"components":[{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"internalType":"struct SwapState","name":"state","type":"tuple"},{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"name":"manualBuildPoolSwapParams","outputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"},{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"},{"components":[{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"internalType":"struct SwapState","name":"swapState","type":"tuple"}],"name":"manualComputeAmountGivenScaled18","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"},{"internalType":"uint256","name":"totalSwapFeeAmountScaled18","type":"uint256"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"manualComputeAndChargeAggregateSwapFees","outputs":[{"internalType":"uint256","name":"totalSwapFeeAmountRaw","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeeAmountRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"manualErc4626BufferWrapOrUnwrapReentrancy","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"manualFindTokenIndex","outputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"sessionId","type":"uint256"}],"name":"manualGetAddLiquidityCalledFlagBySession","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"manualGetAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"manualGetAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualGetCurrentUnlockSessionId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"manualGetPoolConfigBits","outputs":[{"internalType":"PoolConfigBits","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"},{"components":[{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"internalType":"struct SwapState","name":"state","type":"tuple"},{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"name":"manualInternalSwap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"","type":"tuple"},{"components":[{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"internalType":"struct SwapState","name":"","type":"tuple"},{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"},{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"name":"manualLoadSwapState","outputs":[{"components":[{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"internalType":"struct SwapState","name":"swapState","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"},{"internalType":"uint256[]","name":"maxAmountsInScaled18","type":"uint256[]"}],"name":"manualReentrancyAddLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"},{"internalType":"uint256[]","name":"minAmountsOutScaled18","type":"uint256[]"}],"name":"manualReentrancyRemoveLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"},{"components":[{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"internalType":"struct SwapState","name":"state","type":"tuple"},{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"name":"manualReentrancySwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"name":"manualRegisterPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint32","name":"timestamp","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"name":"manualRegisterPoolAtTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"name":"manualRegisterPoolPassThruTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"manualRegisterPoolWithSwapFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"},{"internalType":"uint256[]","name":"minAmountsOutScaled18","type":"uint256[]"}],"name":"manualRemoveLiquidity","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"updatedPoolData","type":"tuple"},{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOutRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsOutScaled18","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualSendToReentrancy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"int256","name":"delta","type":"int256"}],"name":"manualSetAccountDelta","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"manualSetAddLiquidityCalledFlag","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"manualSetAggregateSwapFeeAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"manualSetAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"manualSetAggregateYieldFeeAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"manualSetAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"manualSetBufferAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"underlyingAmount","type":"uint256"},{"internalType":"uint256","name":"wrappedAmount","type":"uint256"}],"name":"manualSetBufferBalances","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"manualSetBufferOwnerShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"manualSetBufferTotalShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"config","type":"tuple"}],"name":"manualSetHooksConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"}],"name":"manualSetInitializedPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"deltaCount","type":"uint256"}],"name":"manualSetNonZeroDeltaCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"name":"manualSetPoolBalances","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"config","type":"tuple"}],"name":"manualSetPoolConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"PoolConfigBits","name":"config","type":"bytes32"}],"name":"manualSetPoolConfigBits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"newPoolCreator","type":"address"}],"name":"manualSetPoolCreator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"manualSetPoolPauseWindowEndTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bool","name":"","type":"bool"}],"name":"manualSetPoolPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manualSetPoolRegistered","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"contract IERC20[]","name":"","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"","type":"tuple[]"}],"name":"manualSetPoolTokenInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"","type":"tuple[]"}],"name":"manualSetPoolTokenInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"name":"manualSetPoolTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"contract IERC20[]","name":"","type":"address[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"name":"manualSetPoolTokensAndBalances","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"reserves","type":"uint256"}],"name":"manualSetReservesOf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"manualSetStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"","type":"bool"}],"name":"manualSetVaultPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"}],"name":"manualSetVaultState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"manualSettleReentrancy","outputs":[{"internalType":"uint256","name":"paid","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"underlyingToken","type":"address"},{"internalType":"contract IERC20","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"underlyingHint","type":"uint256"},{"internalType":"uint256","name":"wrappedHint","type":"uint256"}],"name":"manualSettleUnwrap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"underlyingToken","type":"address"},{"internalType":"contract IERC20","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"underlyingHint","type":"uint256"},{"internalType":"uint256","name":"wrappedHint","type":"uint256"}],"name":"manualSettleWrap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"manualUnsafeSetStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"manualUpdateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"},{"internalType":"enum Rounding","name":"roundingDirection","type":"uint8"}],"name":"manualUpdatePoolDataLiveBalancesAndRates","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"name":"manualWritePoolBalancesToStorage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mockIsUnlocked","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"mockWithInitializedPool","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrapper","type":"address"},{"internalType":"uint256","name":"amountInUnderlying","type":"uint256"}],"name":"previewDeposit","outputs":[{"internalType":"uint256","name":"amountOutWrapped","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrapper","type":"address"},{"internalType":"uint256","name":"amountOutWrapped","type":"uint256"}],"name":"previewMint","outputs":[{"internalType":"uint256","name":"amountInUnderlying","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrapper","type":"address"},{"internalType":"uint256","name":"amountInWrapped","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"amountOutUnderlying","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrapper","type":"address"},{"internalType":"uint256","name":"amountOutUnderlying","type":"uint256"}],"name":"previewWithdraw","outputs":[{"internalType":"uint256","name":"amountInWrapped","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"recoveryModeExit","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"credit","type":"uint256"}],"name":"supplyCredit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"debt","type":"uint256"}],"name":"takeDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unguardedCheckNotEntered","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"},{"internalType":"uint256","name":"newRawBalance","type":"uint256"},{"internalType":"enum Rounding","name":"roundingDirection","type":"uint8"},{"internalType":"uint256","name":"tokenIndex","type":"uint256"}],"name":"updateLiveTokenBalanceInPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"","type":"tuple"}],"stateMutability":"pure","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"accountDelta(address,int256)":"80047e26","buildTokenConfig(address[])":"24e7176b","buildTokenConfig(address[],address[])":"5f70f542","buildTokenConfig(address[],address[],bool[])":"e5948689","buildTokenConfig(address[],uint8[],address[],bool[])":"608256f7","burnERC20(address,address,uint256)":"1d27af68","computeYieldFeesDue((bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]),uint256,uint256,uint256)":"08bade29","ensurePoolNotPaused(address)":"02e1a4aa","ensureUnpausedAndGetVaultState(address)":"e460a8a9","ensureValidSwapAmount(uint256)":"b4eb0bf9","ensureValidTradeAmount(uint256)":"2cbbf198","forceLock()":"6d4908c4","forceUnlock()":"7965c967","getBufferTokenBalancesBytes(address)":"e5b08ffb","getLastLiveBalances(address)":"3cce2585","getPoolFactoryMock()":"87a76c59","getRawBalances(address)":"19a24bcb","guardedCheckEntered()":"a408f312","internalGetBufferUnderlyingImbalance(address)":"2606a4de","internalGetBufferWrappedImbalance(address)":"a40f9592","loadPoolDataUpdatingBalancesAndYieldFees(address,uint8)":"0f682ba0","loadPoolDataUpdatingBalancesAndYieldFeesReentrancy(address,uint8)":"dc4402ed","manualAddLiquidity((bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]),(address,address,uint256[],uint256,uint8,bytes),uint256[])":"0790de46","manualBuildPoolSwapParams((uint8,address,address,address,uint256,uint256,bytes),(uint256,uint256,uint256,uint256),(bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]))":"16a573c2","manualComputeAmountGivenScaled18((uint8,address,address,address,uint256,uint256,bytes),(bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]),(uint256,uint256,uint256,uint256))":"06bf83b1","manualComputeAndChargeAggregateSwapFees((bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]),uint256,address,address,uint256)":"be6b4d2a","manualErc4626BufferWrapOrUnwrapReentrancy((uint8,uint8,address,uint256,uint256))":"370bc8da","manualFindTokenIndex(address[],address)":"ebfeb0a1","manualGetAddLiquidityCalledFlagBySession(address,uint256)":"420f4a45","manualGetAggregateSwapFeeAmount(address,address)":"36918d6e","manualGetAggregateYieldFeeAmount(address,address)":"8f5aeb4b","manualGetCurrentUnlockSessionId()":"81e4b7e9","manualGetPoolConfigBits(address)":"557dba68","manualInternalSwap((uint8,address,address,address,uint256,uint256,bytes),(uint256,uint256,uint256,uint256),(bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]))":"25b6a844","manualLoadSwapState((uint8,address,address,address,uint256,uint256,bytes),(bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]))":"4594871a","manualReentrancyAddLiquidity((bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]),(address,address,uint256[],uint256,uint8,bytes),uint256[])":"eeda9991","manualReentrancyRemoveLiquidity((bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]),(address,address,uint256,uint256[],uint8,bytes),uint256[])":"28121e27","manualReentrancySwap((uint8,address,address,address,uint256,uint256,bytes),(uint256,uint256,uint256,uint256),(bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]))":"96e74a27","manualRegisterPool(address,address[])":"851c65a3","manualRegisterPoolAtTimestamp(address,address[],uint32,(address,address,address))":"0362a513","manualRegisterPoolPassThruTokens(address,address[])":"32333ce6","manualRegisterPoolWithSwapFee(address,address[],uint256)":"1f495f79","manualRemoveLiquidity((bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]),(address,address,uint256,uint256[],uint8,bytes),uint256[])":"f1320097","manualSendToReentrancy(address,address,uint256)":"d01a3269","manualSetAccountDelta(address,int256)":"d0643b8c","manualSetAddLiquidityCalledFlag(address,bool)":"e2ddce11","manualSetAggregateSwapFeeAmount(address,address,uint256)":"44ea8763","manualSetAggregateSwapFeePercentage(address,uint256)":"cfcc2209","manualSetAggregateYieldFeeAmount(address,address,uint256)":"7004b0f1","manualSetAggregateYieldFeePercentage(address,uint256)":"920af066","manualSetBufferAsset(address,address)":"ab62c2b6","manualSetBufferBalances(address,uint256,uint256)":"0ee4cdd8","manualSetBufferOwnerShares(address,address,uint256)":"ff44deab","manualSetBufferTotalShares(address,uint256)":"3cb5b2af","manualSetHooksConfig(address,(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address))":"c1fdcd62","manualSetInitializedPool(address,bool)":"5e3e00fa","manualSetNonZeroDeltaCount(uint256)":"5eeae6eb","manualSetPoolBalances(address,uint256[],uint256[])":"1c4e1e23","manualSetPoolConfig(address,((bool,bool,bool,bool),uint256,uint256,uint256,uint40,uint32,bool,bool,bool,bool))":"5c1c1c81","manualSetPoolConfigBits(address,bytes32)":"df138458","manualSetPoolCreator(address,address)":"79a2c0ac","manualSetPoolPauseWindowEndTime(address,uint32)":"0c87409b","manualSetPoolPaused(address,bool)":"cbde2b68","manualSetPoolRegistered(address,bool)":"352339ee","manualSetPoolTokenInfo(address,(address,uint8,address,bool)[])":"dab50579","manualSetPoolTokenInfo(address,address[],(uint8,address,bool)[])":"bb14e466","manualSetPoolTokens(address,address[])":"82ea1749","manualSetPoolTokensAndBalances(address,address[],uint256[],uint256[])":"d8f4cf3c","manualSetReservesOf(address,uint256)":"d64bc25d","manualSetStaticSwapFeePercentage(address,uint256)":"195aaef9","manualSetVaultPaused(bool)":"692407ae","manualSetVaultState(bool,bool)":"10c1dc41","manualSettleReentrancy(address)":"2d1c3beb","manualSettleUnwrap(address,address,uint256,uint256)":"b6f680f4","manualSettleWrap(address,address,uint256,uint256)":"ac004855","manualTransfer(address,address,uint256)":"00d7aadb","manualUnsafeSetStaticSwapFeePercentage(address,uint256)":"2b766278","manualUpdateAggregateSwapFeePercentage(address,uint256)":"a03b23ef","manualUpdatePoolDataLiveBalancesAndRates(address,(bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]),uint8)":"d86c3fef","manualWritePoolBalancesToStorage(address,(bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]))":"0f619655","mintERC20(address,address,uint256)":"47c07e88","mockIsUnlocked()":"b8caceee","mockWithInitializedPool(address)":"62691e5f","previewDeposit(address,uint256)":"b8f82b26","previewMint(address,uint256)":"d1f810a5","previewRedeem(address,uint256)":"cbe52ae3","previewWithdraw(address,uint256)":"bbc6f1dc","recoveryModeExit(address)":"87a530f8","supplyCredit(address,uint256)":"b1740c2d","takeDebt(address,uint256)":"3e262ba3","unguardedCheckNotEntered()":"cecc95a7","updateLiveTokenBalanceInPoolData((bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]),uint256,uint8,uint256)":"aa01edb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"int256\",\"name\":\"delta\",\"type\":\"int256\"}],\"name\":\"accountDelta\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"buildTokenConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"contract IRateProvider[]\",\"name\":\"rateProviders\",\"type\":\"address[]\"}],\"name\":\"buildTokenConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"enum TokenType[]\",\"name\":\"tokenTypes\",\"type\":\"uint8[]\"},{\"internalType\":\"contract IRateProvider[]\",\"name\":\"rateProviders\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"yieldFeeFlags\",\"type\":\"bool[]\"}],\"name\":\"buildTokenConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"contract IRateProvider[]\",\"name\":\"rateProviders\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"yieldFeeFlags\",\"type\":\"bool[]\"}],\"name\":\"buildTokenConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"lastLiveBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeYieldFeesDue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"ensurePoolNotPaused\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"ensureUnpausedAndGetVaultState\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isQueryDisabled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isVaultPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"areBuffersPaused\",\"type\":\"bool\"}],\"internalType\":\"struct VaultState\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tradeAmount\",\"type\":\"uint256\"}],\"name\":\"ensureValidSwapAmount\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tradeAmount\",\"type\":\"uint256\"}],\"name\":\"ensureValidTradeAmount\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"forceLock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"forceUnlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTokenBalancesBytes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getLastLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolFactoryMock\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getRawBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"guardedCheckEntered\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"internalGetBufferUnderlyingImbalance\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"internalGetBufferWrappedImbalance\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum Rounding\",\"name\":\"roundingDirection\",\"type\":\"uint8\"}],\"name\":\"loadPoolDataUpdatingBalancesAndYieldFees\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum Rounding\",\"name\":\"roundingDirection\",\"type\":\"uint8\"}],\"name\":\"loadPoolDataUpdatingBalancesAndYieldFeesReentrancy\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsInScaled18\",\"type\":\"uint256[]\"}],\"name\":\"manualAddLiquidity\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"updatedPoolData\",\"type\":\"tuple\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"internalType\":\"struct SwapState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"name\":\"manualBuildPoolSwapParams\",\"outputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"internalType\":\"struct SwapState\",\"name\":\"swapState\",\"type\":\"tuple\"}],\"name\":\"manualComputeAmountGivenScaled18\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"totalSwapFeeAmountScaled18\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"manualComputeAndChargeAggregateSwapFees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSwapFeeAmountRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeeAmountRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"manualErc4626BufferWrapOrUnwrapReentrancy\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"manualFindTokenIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sessionId\",\"type\":\"uint256\"}],\"name\":\"manualGetAddLiquidityCalledFlagBySession\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"manualGetAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"manualGetAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualGetCurrentUnlockSessionId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"manualGetPoolConfigBits\",\"outputs\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"internalType\":\"struct SwapState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"name\":\"manualInternalSwap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"internalType\":\"struct SwapState\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"name\":\"manualLoadSwapState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"internalType\":\"struct SwapState\",\"name\":\"swapState\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsInScaled18\",\"type\":\"uint256[]\"}],\"name\":\"manualReentrancyAddLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOutScaled18\",\"type\":\"uint256[]\"}],\"name\":\"manualReentrancyRemoveLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"internalType\":\"struct SwapState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"name\":\"manualReentrancySwap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"manualRegisterPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"name\":\"manualRegisterPoolAtTimestamp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"manualRegisterPoolPassThruTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"manualRegisterPoolWithSwapFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOutScaled18\",\"type\":\"uint256[]\"}],\"name\":\"manualRemoveLiquidity\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"updatedPoolData\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"manualSendToReentrancy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"int256\",\"name\":\"delta\",\"type\":\"int256\"}],\"name\":\"manualSetAccountDelta\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"manualSetAddLiquidityCalledFlag\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"manualSetAggregateSwapFeeAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"manualSetAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"manualSetAggregateYieldFeeAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"manualSetAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"manualSetBufferAsset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"underlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedAmount\",\"type\":\"uint256\"}],\"name\":\"manualSetBufferBalances\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"manualSetBufferOwnerShares\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"manualSetBufferTotalShares\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"manualSetHooksConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"}],\"name\":\"manualSetInitializedPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deltaCount\",\"type\":\"uint256\"}],\"name\":\"manualSetNonZeroDeltaCount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"name\":\"manualSetPoolBalances\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"manualSetPoolConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"PoolConfigBits\",\"name\":\"config\",\"type\":\"bytes32\"}],\"name\":\"manualSetPoolConfigBits\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newPoolCreator\",\"type\":\"address\"}],\"name\":\"manualSetPoolCreator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"manualSetPoolPauseWindowEndTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"name\":\"manualSetPoolPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"manualSetPoolRegistered\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"name\":\"manualSetPoolTokenInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"name\":\"manualSetPoolTokenInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"manualSetPoolTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"name\":\"manualSetPoolTokensAndBalances\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"reserves\",\"type\":\"uint256\"}],\"name\":\"manualSetReservesOf\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"manualSetStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"name\":\"manualSetVaultPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"name\":\"manualSetVaultState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"manualSettleReentrancy\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"paid\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"underlyingToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"underlyingHint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedHint\",\"type\":\"uint256\"}],\"name\":\"manualSettleUnwrap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"underlyingToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"underlyingHint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedHint\",\"type\":\"uint256\"}],\"name\":\"manualSettleWrap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"manualTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"manualUnsafeSetStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"manualUpdateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"},{\"internalType\":\"enum Rounding\",\"name\":\"roundingDirection\",\"type\":\"uint8\"}],\"name\":\"manualUpdatePoolDataLiveBalancesAndRates\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"name\":\"manualWritePoolBalancesToStorage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mintERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mockIsUnlocked\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"mockWithInitializedPool\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrapper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInUnderlying\",\"type\":\"uint256\"}],\"name\":\"previewDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOutWrapped\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrapper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOutWrapped\",\"type\":\"uint256\"}],\"name\":\"previewMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountInUnderlying\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrapper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInWrapped\",\"type\":\"uint256\"}],\"name\":\"previewRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOutUnderlying\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrapper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOutUnderlying\",\"type\":\"uint256\"}],\"name\":\"previewWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountInWrapped\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"recoveryModeExit\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"name\":\"supplyCredit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"debt\",\"type\":\"uint256\"}],\"name\":\"takeDebt\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unguardedCheckNotEntered\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"newRawBalance\",\"type\":\"uint256\"},{\"internalType\":\"enum Rounding\",\"name\":\"roundingDirection\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"}],\"name\":\"updateLiveTokenBalanceInPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"buildTokenConfig(address[],address[])\":{\"details\":\"Infers TokenType (STANDARD or WITH_RATE) from the presence or absence of the rate provider.\"},\"buildTokenConfig(address[],address[],bool[])\":{\"details\":\"Infers TokenType (STANDARD or WITH_RATE) from the presence or absence of the rate provider.\"},\"manualUnsafeSetStaticSwapFeePercentage(address,uint256)\":{\"details\":\"Does not check the value against any min/max limits normally enforced by the pool.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/test/IVaultMainMock.sol\":\"IVaultMainMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/test/IVaultMainMock.sol\":{\"keccak256\":\"0x63f1a4d7fbd2ed33fb622cc5a141a9ccc1d3f99f30ac5d72b75a2bb36965bd42\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de9db0a61bc99572d72030c73feff2e4337104fd43a3d764f181b857c621246c\",\"dweb:/ipfs/QmcxzP6SqNAkqg4APteqzsxRkxyxcZhMF21b3sCKiCymSP\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/test/IVaultMock.sol":{"IVaultMock":{"abi":[{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"int256","name":"delta","type":"int256"}],"name":"accountDelta","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"underlyingAmount","type":"uint256"},{"internalType":"uint256","name":"wrappedAmount","type":"uint256"}],"name":"addLiquidityToBufferUnbalancedForTests","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"tokenAllowance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBuffersPaused","outputs":[{"internalType":"bool","name":"buffersPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"name":"buildTokenConfig","outputs":[{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"contract IRateProvider[]","name":"rateProviders","type":"address[]"}],"name":"buildTokenConfig","outputs":[{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"enum TokenType[]","name":"tokenTypes","type":"uint8[]"},{"internalType":"contract IRateProvider[]","name":"rateProviders","type":"address[]"},{"internalType":"bool[]","name":"yieldFeeFlags","type":"bool[]"}],"name":"buildTokenConfig","outputs":[{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"contract IRateProvider[]","name":"rateProviders","type":"address[]"},{"internalType":"bool[]","name":"yieldFeeFlags","type":"bool[]"}],"name":"buildTokenConfig","outputs":[{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"yieldFeeAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"swapParams","type":"tuple"}],"name":"computeDynamicSwapFeePercentage","outputs":[{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"},{"internalType":"uint256","name":"lastLiveBalance","type":"uint256"},{"internalType":"uint256","name":"tokenIndex","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"computeYieldFeesDue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"disableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQueryPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"emitAuxiliaryEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"enableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ensurePoolNotPaused","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ensureUnpausedAndGetVaultState","outputs":[{"components":[{"internalType":"bool","name":"isQueryDisabled","type":"bool"},{"internalType":"bool","name":"isVaultPaused","type":"bool"},{"internalType":"bool","name":"areBuffersPaused","type":"bool"}],"internalType":"struct VaultState","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tradeAmount","type":"uint256"}],"name":"ensureValidSwapAmount","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tradeAmount","type":"uint256"}],"name":"ensureValidTradeAmount","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceUnlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddLiquidityCalledFlag","outputs":[{"internalType":"bool","name":"liquidityAdded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"yieldFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBptRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferAsset","outputs":[{"internalType":"address","name":"underlyingToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"underlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"wrappedBalanceRaw","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"bufferMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"liquidityOwner","type":"address"}],"name":"getBufferOwnerShares","outputs":[{"internalType":"uint256","name":"ownerShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodDuration","outputs":[{"internalType":"uint32","name":"bufferPeriodDuration","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodEndTime","outputs":[{"internalType":"uint32","name":"bufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTokenBalancesBytes","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTotalShares","outputs":[{"internalType":"uint256","name":"bufferShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getERC4626BufferAsset","outputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getHooksConfig","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getLastLiveBalances","outputs":[{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumPoolTokens","outputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumPoolTokens","outputs":[{"internalType":"uint256","name":"minTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumTradeAmount","outputs":[{"internalType":"uint256","name":"minimumTradeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumWrapAmount","outputs":[{"internalType":"uint256","name":"minimumWrapAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonzeroDeltaCount","outputs":[{"internalType":"uint256","name":"nonzeroDeltaCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolConfig","outputs":[{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"poolConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolFactoryMock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"poolMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolPausedState","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"},{"internalType":"uint32","name":"poolPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"poolBufferPeriodEndTime","type":"uint32"},{"internalType":"address","name":"pauseManager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolRoleAccounts","outputs":[{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"tokenCount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenRates","outputs":[{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getRawBalances","outputs":[{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getReservesOf","outputs":[{"internalType":"uint256","name":"reserveAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenDelta","outputs":[{"internalType":"int256","name":"tokenDelta","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAdmin","outputs":[{"internalType":"address","name":"vaultAdmin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"vaultExtension","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultPausedState","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"},{"internalType":"uint32","name":"vaultPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"vaultBufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"guardedCheckEntered","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"internalGetBufferUnderlyingImbalance","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"internalGetBufferWrappedImbalance","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"isERC4626BufferInitialized","outputs":[{"internalType":"bool","name":"isBufferInitialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInRecoveryMode","outputs":[{"internalType":"bool","name":"inRecoveryMode","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInitialized","outputs":[{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolPaused","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabled","outputs":[{"internalType":"bool","name":"queryDisabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabledPermanently","outputs":[{"internalType":"bool","name":"queryDisabledPermanently","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"unlocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isVaultPaused","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum Rounding","name":"roundingDirection","type":"uint8"}],"name":"loadPoolDataUpdatingBalancesAndYieldFees","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum Rounding","name":"roundingDirection","type":"uint8"}],"name":"loadPoolDataUpdatingBalancesAndYieldFeesReentrancy","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"},{"internalType":"uint256[]","name":"maxAmountsInScaled18","type":"uint256[]"}],"name":"manualAddLiquidity","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"updatedPoolData","type":"tuple"},{"internalType":"uint256[]","name":"amountsInRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsInScaled18","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"},{"components":[{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"internalType":"struct SwapState","name":"state","type":"tuple"},{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"name":"manualBuildPoolSwapParams","outputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualBurnBufferShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"},{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"},{"components":[{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"internalType":"struct SwapState","name":"swapState","type":"tuple"}],"name":"manualComputeAmountGivenScaled18","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"},{"internalType":"uint256","name":"totalSwapFeeAmountScaled18","type":"uint256"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"manualComputeAndChargeAggregateSwapFees","outputs":[{"internalType":"uint256","name":"totalSwapFeeAmountRaw","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeeAmountRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"manualDisableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"manualEnableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"manualErc4626BufferWrapOrUnwrapReentrancy","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"manualFindTokenIndex","outputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"sessionId","type":"uint256"}],"name":"manualGetAddLiquidityCalledFlagBySession","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"manualGetAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"manualGetAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualGetCurrentUnlockSessionId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualGetIsUnlocked","outputs":[{"internalType":"StorageSlotExtension.BooleanSlotType","name":"slot","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"manualGetNonzeroDeltaCount","outputs":[{"internalType":"StorageSlotExtension.Uint256SlotType","name":"slot","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"manualGetPoolConfigBits","outputs":[{"internalType":"PoolConfigBits","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualGetTokenDeltas","outputs":[{"internalType":"TokenDeltaMappingSlotType","name":"slot","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"manualInitializePoolReentrancy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"},{"components":[{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"internalType":"struct SwapState","name":"state","type":"tuple"},{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"name":"manualInternalSwap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"","type":"tuple"},{"components":[{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"internalType":"struct SwapState","name":"","type":"tuple"},{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"},{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"name":"manualLoadSwapState","outputs":[{"components":[{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"internalType":"struct SwapState","name":"swapState","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualMintBufferShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"manualMintMinimumBufferSupplyReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"manualPausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualPauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"},{"internalType":"uint256[]","name":"maxAmountsInScaled18","type":"uint256[]"}],"name":"manualReentrancyAddLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"manualReentrancyAddLiquidityToBuffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"manualReentrancyDisableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"manualReentrancyInitializeBuffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"},{"internalType":"uint256[]","name":"minAmountsOutScaled18","type":"uint256[]"}],"name":"manualReentrancyRemoveLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOut","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOut","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"manualReentrancyRemoveLiquidityFromBufferHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"},{"components":[{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"internalType":"struct SwapState","name":"state","type":"tuple"},{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"name":"manualReentrancySwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"name":"manualRegisterPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint32","name":"timestamp","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"name":"manualRegisterPoolAtTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"name":"manualRegisterPoolPassThruTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"manualRegisterPoolReentrancy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"manualRegisterPoolWithSwapFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"},{"internalType":"uint256[]","name":"minAmountsOutScaled18","type":"uint256[]"}],"name":"manualRemoveLiquidity","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"updatedPoolData","type":"tuple"},{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOutRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsOutScaled18","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualSendToReentrancy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"int256","name":"delta","type":"int256"}],"name":"manualSetAccountDelta","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"manualSetAddLiquidityCalledFlag","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"manualSetAggregateSwapFeeAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"manualSetAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"manualSetAggregateYieldFeeAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"manualSetAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"manualSetBufferAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"underlyingAmount","type":"uint256"},{"internalType":"uint256","name":"wrappedAmount","type":"uint256"}],"name":"manualSetBufferBalances","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"manualSetBufferOwnerShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"manualSetBufferTotalShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"config","type":"tuple"}],"name":"manualSetHooksConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"}],"name":"manualSetInitializedPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"deltaCount","type":"uint256"}],"name":"manualSetNonZeroDeltaCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"name":"manualSetPoolBalances","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"config","type":"tuple"}],"name":"manualSetPoolConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"PoolConfigBits","name":"config","type":"bytes32"}],"name":"manualSetPoolConfigBits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"newPoolCreator","type":"address"}],"name":"manualSetPoolCreator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"manualSetPoolPauseWindowEndTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bool","name":"","type":"bool"}],"name":"manualSetPoolPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manualSetPoolRegistered","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"contract IERC20[]","name":"","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"","type":"tuple[]"}],"name":"manualSetPoolTokenInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"","type":"tuple[]"}],"name":"manualSetPoolTokenInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"name":"manualSetPoolTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"contract IERC20[]","name":"","type":"address[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"name":"manualSetPoolTokensAndBalances","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"reserves","type":"uint256"}],"name":"manualSetReservesOf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"manualSetStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"","type":"bool"}],"name":"manualSetVaultPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"}],"name":"manualSetVaultState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"manualSettleReentrancy","outputs":[{"internalType":"uint256","name":"paid","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"underlyingToken","type":"address"},{"internalType":"contract IERC20","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"underlyingHint","type":"uint256"},{"internalType":"uint256","name":"wrappedHint","type":"uint256"}],"name":"manualSettleUnwrap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"underlyingToken","type":"address"},{"internalType":"contract IERC20","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"underlyingHint","type":"uint256"},{"internalType":"uint256","name":"wrappedHint","type":"uint256"}],"name":"manualSettleWrap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"manualUnpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualUnpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"manualUnsafeSetStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"manualUpdateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"},{"internalType":"enum Rounding","name":"roundingDirection","type":"uint8"}],"name":"manualUpdatePoolDataLiveBalancesAndRates","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"name":"manualWritePoolBalancesToStorage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"manuallySetSwapFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"mockEnsurePoolNotInRecoveryMode","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mockIsUnlocked","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"mockWithInitializedPool","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"mockWithValidPercentage","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"pausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrapper","type":"address"},{"internalType":"uint256","name":"amountInUnderlying","type":"uint256"}],"name":"previewDeposit","outputs":[{"internalType":"uint256","name":"amountOutWrapped","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrapper","type":"address"},{"internalType":"uint256","name":"amountOutWrapped","type":"uint256"}],"name":"previewMint","outputs":[{"internalType":"uint256","name":"amountInUnderlying","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrapper","type":"address"},{"internalType":"uint256","name":"amountInWrapped","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"amountOutUnderlying","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrapper","type":"address"},{"internalType":"uint256","name":"amountOutUnderlying","type":"uint256"}],"name":"previewWithdraw","outputs":[{"internalType":"uint256","name":"amountInWrapped","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quote","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quoteAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"recoveryModeExit","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"}],"name":"removeLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"setProtocolFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"credit","type":"uint256"}],"name":"supplyCredit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"debt","type":"uint256"}],"name":"takeDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"tokenTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unguardedCheckNotEntered","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"unpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"updateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateYieldFeePercentage","type":"uint256"}],"name":"updateAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"},{"internalType":"uint256","name":"newRawBalance","type":"uint256"},{"internalType":"enum Rounding","name":"roundingDirection","type":"uint8"},{"internalType":"uint256","name":"tokenIndex","type":"uint256"}],"name":"updateLiveTokenBalanceInPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"accountDelta(address,int256)":"80047e26","addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","addLiquidityToBuffer(address,uint256,uint256,uint256,address)":"e2a92b1a","addLiquidityToBufferUnbalancedForTests(address,uint256,uint256)":"1f568ea3","allowance(address,address,address)":"927da105","approve(address,address,uint256)":"e1f21c67","areBuffersPaused()":"55cba7fe","balanceOf(address,address)":"f7888aec","buildTokenConfig(address[])":"24e7176b","buildTokenConfig(address[],address[])":"5f70f542","buildTokenConfig(address[],address[],bool[])":"e5948689","buildTokenConfig(address[],uint8[],address[],bool[])":"608256f7","burnERC20(address,address,uint256)":"1d27af68","collectAggregateFees(address)":"8f4ab9ca","computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))":"4d472bdd","computeYieldFeesDue((bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]),uint256,uint256,uint256)":"08bade29","disableQuery()":"de1a36a6","disableQueryPermanently()":"821440f2","disableRecoveryMode(address)":"bffb78b2","emitAuxiliaryEvent(bytes32,bytes)":"c8088247","enableQuery()":"e0d55605","enableRecoveryMode(address)":"dc3f574e","ensurePoolNotPaused(address)":"02e1a4aa","ensureUnpausedAndGetVaultState(address)":"e460a8a9","ensureValidSwapAmount(uint256)":"b4eb0bf9","ensureValidTradeAmount(uint256)":"2cbbf198","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","forceLock()":"6d4908c4","forceUnlock()":"7965c967","getActionId(bytes4)":"851c1bb3","getAddLiquidityCalledFlag(address)":"ace9b89b","getAggregateSwapFeeAmount(address,address)":"85e0b999","getAggregateYieldFeeAmount(address,address)":"00fdfa13","getAuthorizer()":"aaabadc5","getBptRate(address)":"4f037ee7","getBufferAsset(address)":"0387587d","getBufferBalance(address)":"4021fe0f","getBufferMinimumTotalSupply()":"26a8a991","getBufferOwnerShares(address,address)":"9385e39a","getBufferPeriodDuration()":"20c1fb7a","getBufferPeriodEndTime()":"cd51c12f","getBufferTokenBalancesBytes(address)":"e5b08ffb","getBufferTotalShares(address)":"f2784e07","getCurrentLiveBalances(address)":"535cfd8a","getERC4626BufferAsset(address)":"4afbaf5a","getHooksConfig(address)":"ce8630d4","getLastLiveBalances(address)":"3cce2585","getMaximumPoolTokens()":"2e42f4d5","getMinimumPoolTokens()":"a8175b27","getMinimumTradeAmount()":"e2cb0ba0","getMinimumWrapAmount()":"53956aa2","getNonzeroDeltaCount()":"db817187","getPauseWindowEndTime()":"8a8d123a","getPoolConfig(address)":"f29486a1","getPoolData(address)":"13d21cdf","getPoolFactoryMock()":"87a76c59","getPoolMinimumTotalSupply()":"d0965a6b","getPoolPausedState(address)":"15e32046","getPoolRoleAccounts(address)":"e9ddeb26","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getPoolTokenInfo(address)":"67e0e076","getPoolTokenRates(address)":"7e361bde","getPoolTokens(address)":"ca4f2803","getProtocolFeeController()":"85f2dbd4","getRawBalances(address)":"19a24bcb","getReservesOf(address)":"96787092","getStaticSwapFeePercentage(address)":"b45090f9","getTokenDelta(address)":"9e825ff5","getVaultAdmin()":"1ba0ae45","getVaultExtension()":"b9a8effa","getVaultPausedState()":"85c8c015","guardedCheckEntered()":"a408f312","initialize(address,address,address[],uint256[],uint256,bytes)":"ba8a2be0","initializeBuffer(address,uint256,uint256,uint256,address)":"653eb3b0","internalGetBufferUnderlyingImbalance(address)":"2606a4de","internalGetBufferWrappedImbalance(address)":"a40f9592","isERC4626BufferInitialized(address)":"6844846b","isPoolInRecoveryMode(address)":"be7d628a","isPoolInitialized(address)":"532cec7c","isPoolPaused(address)":"6c9bc732","isPoolRegistered(address)":"c673bdaf","isQueryDisabled()":"b4aef0ab","isQueryDisabledPermanently()":"13ef8a5d","isUnlocked()":"8380edb7","isVaultPaused()":"098401f5","loadPoolDataUpdatingBalancesAndYieldFees(address,uint8)":"0f682ba0","loadPoolDataUpdatingBalancesAndYieldFeesReentrancy(address,uint8)":"dc4402ed","manualAddLiquidity((bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]),(address,address,uint256[],uint256,uint8,bytes),uint256[])":"0790de46","manualBuildPoolSwapParams((uint8,address,address,address,uint256,uint256,bytes),(uint256,uint256,uint256,uint256),(bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]))":"16a573c2","manualBurnBufferShares(address,address,uint256)":"e8338894","manualComputeAmountGivenScaled18((uint8,address,address,address,uint256,uint256,bytes),(bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]),(uint256,uint256,uint256,uint256))":"06bf83b1","manualComputeAndChargeAggregateSwapFees((bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]),uint256,address,address,uint256)":"be6b4d2a","manualDisableRecoveryMode(address)":"7578abb9","manualEnableRecoveryMode(address)":"27521d0c","manualErc4626BufferWrapOrUnwrapReentrancy((uint8,uint8,address,uint256,uint256))":"370bc8da","manualFindTokenIndex(address[],address)":"ebfeb0a1","manualGetAddLiquidityCalledFlagBySession(address,uint256)":"420f4a45","manualGetAggregateSwapFeeAmount(address,address)":"36918d6e","manualGetAggregateYieldFeeAmount(address,address)":"8f5aeb4b","manualGetCurrentUnlockSessionId()":"81e4b7e9","manualGetIsUnlocked()":"b2469499","manualGetNonzeroDeltaCount()":"155075e6","manualGetPoolConfigBits(address)":"557dba68","manualGetTokenDeltas()":"1f4475c5","manualInitializePoolReentrancy(address,address,address[],uint256[],uint256,bytes)":"809846d1","manualInternalSwap((uint8,address,address,address,uint256,uint256,bytes),(uint256,uint256,uint256,uint256),(bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]))":"25b6a844","manualLoadSwapState((uint8,address,address,address,uint256,uint256,bytes),(bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]))":"4594871a","manualMintBufferShares(address,address,uint256)":"6b230291","manualMintMinimumBufferSupplyReserve(address)":"e99ac9a3","manualPausePool(address)":"1558356e","manualPauseVault()":"071d8a02","manualReentrancyAddLiquidity((bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]),(address,address,uint256[],uint256,uint8,bytes),uint256[])":"eeda9991","manualReentrancyAddLiquidityToBuffer(address,uint256,uint256,uint256,address)":"9260d920","manualReentrancyDisableRecoveryMode(address)":"16df26cb","manualReentrancyInitializeBuffer(address,uint256,uint256,uint256,address)":"b61398cd","manualReentrancyRemoveLiquidity((bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]),(address,address,uint256,uint256[],uint8,bytes),uint256[])":"28121e27","manualReentrancyRemoveLiquidityFromBufferHook(address,uint256,uint256,uint256,address)":"c7b3b3a9","manualReentrancySwap((uint8,address,address,address,uint256,uint256,bytes),(uint256,uint256,uint256,uint256),(bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]))":"96e74a27","manualRegisterPool(address,address[])":"851c65a3","manualRegisterPoolAtTimestamp(address,address[],uint32,(address,address,address))":"0362a513","manualRegisterPoolPassThruTokens(address,address[])":"32333ce6","manualRegisterPoolReentrancy(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"e68010c6","manualRegisterPoolWithSwapFee(address,address[],uint256)":"1f495f79","manualRemoveLiquidity((bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]),(address,address,uint256,uint256[],uint8,bytes),uint256[])":"f1320097","manualSendToReentrancy(address,address,uint256)":"d01a3269","manualSetAccountDelta(address,int256)":"d0643b8c","manualSetAddLiquidityCalledFlag(address,bool)":"e2ddce11","manualSetAggregateSwapFeeAmount(address,address,uint256)":"44ea8763","manualSetAggregateSwapFeePercentage(address,uint256)":"cfcc2209","manualSetAggregateYieldFeeAmount(address,address,uint256)":"7004b0f1","manualSetAggregateYieldFeePercentage(address,uint256)":"920af066","manualSetBufferAsset(address,address)":"ab62c2b6","manualSetBufferBalances(address,uint256,uint256)":"0ee4cdd8","manualSetBufferOwnerShares(address,address,uint256)":"ff44deab","manualSetBufferTotalShares(address,uint256)":"3cb5b2af","manualSetHooksConfig(address,(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address))":"c1fdcd62","manualSetInitializedPool(address,bool)":"5e3e00fa","manualSetNonZeroDeltaCount(uint256)":"5eeae6eb","manualSetPoolBalances(address,uint256[],uint256[])":"1c4e1e23","manualSetPoolConfig(address,((bool,bool,bool,bool),uint256,uint256,uint256,uint40,uint32,bool,bool,bool,bool))":"5c1c1c81","manualSetPoolConfigBits(address,bytes32)":"df138458","manualSetPoolCreator(address,address)":"79a2c0ac","manualSetPoolPauseWindowEndTime(address,uint32)":"0c87409b","manualSetPoolPaused(address,bool)":"cbde2b68","manualSetPoolRegistered(address,bool)":"352339ee","manualSetPoolTokenInfo(address,(address,uint8,address,bool)[])":"dab50579","manualSetPoolTokenInfo(address,address[],(uint8,address,bool)[])":"bb14e466","manualSetPoolTokens(address,address[])":"82ea1749","manualSetPoolTokensAndBalances(address,address[],uint256[],uint256[])":"d8f4cf3c","manualSetReservesOf(address,uint256)":"d64bc25d","manualSetStaticSwapFeePercentage(address,uint256)":"195aaef9","manualSetVaultPaused(bool)":"692407ae","manualSetVaultState(bool,bool)":"10c1dc41","manualSettleReentrancy(address)":"2d1c3beb","manualSettleUnwrap(address,address,uint256,uint256)":"b6f680f4","manualSettleWrap(address,address,uint256,uint256)":"ac004855","manualTransfer(address,address,uint256)":"00d7aadb","manualUnpausePool(address)":"52b9e33d","manualUnpauseVault()":"cc671ff7","manualUnsafeSetStaticSwapFeePercentage(address,uint256)":"2b766278","manualUpdateAggregateSwapFeePercentage(address,uint256)":"a03b23ef","manualUpdatePoolDataLiveBalancesAndRates(address,(bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]),uint8)":"d86c3fef","manualWritePoolBalancesToStorage(address,(bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]))":"0f619655","manuallySetSwapFee(address,uint256)":"70600089","mintERC20(address,address,uint256)":"47c07e88","mockEnsurePoolNotInRecoveryMode(address)":"0b9df1f6","mockIsUnlocked()":"b8caceee","mockWithInitializedPool(address)":"62691e5f","mockWithValidPercentage(uint256)":"88e5101a","pausePool(address)":"55aca1ec","pauseVault()":"9e0879c2","pauseVaultBuffers()":"e085c5a8","previewDeposit(address,uint256)":"b8f82b26","previewMint(address,uint256)":"d1f810a5","previewRedeem(address,uint256)":"cbe52ae3","previewWithdraw(address,uint256)":"bbc6f1dc","quote(bytes)":"edfa3568","quoteAndRevert(bytes)":"757d64b3","recoveryModeExit(address)":"87a530f8","registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"eeec802f","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","removeLiquidityFromBuffer(address,uint256,uint256,uint256)":"ebc7955c","removeLiquidityRecovery(address,address,uint256,uint256[])":"a07d6040","sendTo(address,address,uint256)":"ae639329","setAuthorizer(address)":"058a628f","setProtocolFeeController(address)":"2d771389","setStaticSwapFeePercentage(address,uint256)":"d15126ba","settle(address,uint256)":"15afd409","supplyCredit(address,uint256)":"b1740c2d","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","takeDebt(address,uint256)":"3e262ba3","totalSupply(address)":"e4dc2aa4","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unguardedCheckNotEntered()":"cecc95a7","unlock(bytes)":"48c89491","unpausePool(address)":"f21c38cd","unpauseVault()":"0b7562be","unpauseVaultBuffers()":"b9212b49","updateAggregateSwapFeePercentage(address,uint256)":"5e0b06f4","updateAggregateYieldFeePercentage(address,uint256)":"e253670a","updateLiveTokenBalanceInPoolData((bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]),uint256,uint8,uint256)":"aa01edb3","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"int256\",\"name\":\"delta\",\"type\":\"int256\"}],\"name\":\"accountDelta\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"underlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedAmount\",\"type\":\"uint256\"}],\"name\":\"addLiquidityToBufferUnbalancedForTests\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAllowance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"buffersPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"buildTokenConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"contract IRateProvider[]\",\"name\":\"rateProviders\",\"type\":\"address[]\"}],\"name\":\"buildTokenConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"enum TokenType[]\",\"name\":\"tokenTypes\",\"type\":\"uint8[]\"},{\"internalType\":\"contract IRateProvider[]\",\"name\":\"rateProviders\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"yieldFeeFlags\",\"type\":\"bool[]\"}],\"name\":\"buildTokenConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"contract IRateProvider[]\",\"name\":\"rateProviders\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"yieldFeeFlags\",\"type\":\"bool[]\"}],\"name\":\"buildTokenConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yieldFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"lastLiveBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeYieldFeesDue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQueryPermanently\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"emitAuxiliaryEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"ensurePoolNotPaused\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"ensureUnpausedAndGetVaultState\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isQueryDisabled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isVaultPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"areBuffersPaused\",\"type\":\"bool\"}],\"internalType\":\"struct VaultState\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tradeAmount\",\"type\":\"uint256\"}],\"name\":\"ensureValidSwapAmount\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tradeAmount\",\"type\":\"uint256\"}],\"name\":\"ensureValidTradeAmount\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"forceLock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"forceUnlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getAddLiquidityCalledFlag\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"liquidityAdded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"yieldFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityOwner\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ownerShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTokenBalancesBytes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getERC4626BufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getLastLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumTradeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumWrapAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonzeroDeltaCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"poolConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolFactoryMock\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"poolPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"poolBufferPeriodEndTime\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getRawBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"tokenDelta\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultAdmin\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultExtension\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"vaultPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"vaultBufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"guardedCheckEntered\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"internalGetBufferUnderlyingImbalance\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"internalGetBufferWrappedImbalance\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"isERC4626BufferInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isBufferInitialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"inRecoveryMode\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabledPermanently\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabledPermanently\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum Rounding\",\"name\":\"roundingDirection\",\"type\":\"uint8\"}],\"name\":\"loadPoolDataUpdatingBalancesAndYieldFees\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum Rounding\",\"name\":\"roundingDirection\",\"type\":\"uint8\"}],\"name\":\"loadPoolDataUpdatingBalancesAndYieldFeesReentrancy\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsInScaled18\",\"type\":\"uint256[]\"}],\"name\":\"manualAddLiquidity\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"updatedPoolData\",\"type\":\"tuple\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"internalType\":\"struct SwapState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"name\":\"manualBuildPoolSwapParams\",\"outputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"manualBurnBufferShares\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"internalType\":\"struct SwapState\",\"name\":\"swapState\",\"type\":\"tuple\"}],\"name\":\"manualComputeAmountGivenScaled18\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"totalSwapFeeAmountScaled18\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"manualComputeAndChargeAggregateSwapFees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSwapFeeAmountRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeeAmountRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"manualDisableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"manualEnableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"manualErc4626BufferWrapOrUnwrapReentrancy\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"manualFindTokenIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sessionId\",\"type\":\"uint256\"}],\"name\":\"manualGetAddLiquidityCalledFlagBySession\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"manualGetAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"manualGetAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualGetCurrentUnlockSessionId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualGetIsUnlocked\",\"outputs\":[{\"internalType\":\"StorageSlotExtension.BooleanSlotType\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualGetNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"StorageSlotExtension.Uint256SlotType\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"manualGetPoolConfigBits\",\"outputs\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualGetTokenDeltas\",\"outputs\":[{\"internalType\":\"TokenDeltaMappingSlotType\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"manualInitializePoolReentrancy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"internalType\":\"struct SwapState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"name\":\"manualInternalSwap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"internalType\":\"struct SwapState\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"name\":\"manualLoadSwapState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"internalType\":\"struct SwapState\",\"name\":\"swapState\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"manualMintBufferShares\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"manualMintMinimumBufferSupplyReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"manualPausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualPauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsInScaled18\",\"type\":\"uint256[]\"}],\"name\":\"manualReentrancyAddLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"manualReentrancyAddLiquidityToBuffer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"manualReentrancyDisableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"manualReentrancyInitializeBuffer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOutScaled18\",\"type\":\"uint256[]\"}],\"name\":\"manualReentrancyRemoveLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"manualReentrancyRemoveLiquidityFromBufferHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"internalType\":\"struct SwapState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"name\":\"manualReentrancySwap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"manualRegisterPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"name\":\"manualRegisterPoolAtTimestamp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"manualRegisterPoolPassThruTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"manualRegisterPoolReentrancy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"manualRegisterPoolWithSwapFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOutScaled18\",\"type\":\"uint256[]\"}],\"name\":\"manualRemoveLiquidity\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"updatedPoolData\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"manualSendToReentrancy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"int256\",\"name\":\"delta\",\"type\":\"int256\"}],\"name\":\"manualSetAccountDelta\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"manualSetAddLiquidityCalledFlag\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"manualSetAggregateSwapFeeAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"manualSetAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"manualSetAggregateYieldFeeAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"manualSetAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"manualSetBufferAsset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"underlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedAmount\",\"type\":\"uint256\"}],\"name\":\"manualSetBufferBalances\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"manualSetBufferOwnerShares\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"manualSetBufferTotalShares\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"manualSetHooksConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"}],\"name\":\"manualSetInitializedPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deltaCount\",\"type\":\"uint256\"}],\"name\":\"manualSetNonZeroDeltaCount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"name\":\"manualSetPoolBalances\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"manualSetPoolConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"PoolConfigBits\",\"name\":\"config\",\"type\":\"bytes32\"}],\"name\":\"manualSetPoolConfigBits\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newPoolCreator\",\"type\":\"address\"}],\"name\":\"manualSetPoolCreator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"manualSetPoolPauseWindowEndTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"name\":\"manualSetPoolPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"manualSetPoolRegistered\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"name\":\"manualSetPoolTokenInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"name\":\"manualSetPoolTokenInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"manualSetPoolTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"name\":\"manualSetPoolTokensAndBalances\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"reserves\",\"type\":\"uint256\"}],\"name\":\"manualSetReservesOf\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"manualSetStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"name\":\"manualSetVaultPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"name\":\"manualSetVaultState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"manualSettleReentrancy\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"paid\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"underlyingToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"underlyingHint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedHint\",\"type\":\"uint256\"}],\"name\":\"manualSettleUnwrap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"underlyingToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"underlyingHint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedHint\",\"type\":\"uint256\"}],\"name\":\"manualSettleWrap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"manualTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"manualUnpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualUnpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"manualUnsafeSetStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"manualUpdateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"},{\"internalType\":\"enum Rounding\",\"name\":\"roundingDirection\",\"type\":\"uint8\"}],\"name\":\"manualUpdatePoolDataLiveBalancesAndRates\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"name\":\"manualWritePoolBalancesToStorage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"manuallySetSwapFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mintERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"mockEnsurePoolNotInRecoveryMode\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mockIsUnlocked\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"mockWithInitializedPool\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"percentage\",\"type\":\"uint256\"}],\"name\":\"mockWithValidPercentage\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrapper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInUnderlying\",\"type\":\"uint256\"}],\"name\":\"previewDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOutWrapped\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrapper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOutWrapped\",\"type\":\"uint256\"}],\"name\":\"previewMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountInUnderlying\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrapper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInWrapped\",\"type\":\"uint256\"}],\"name\":\"previewRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOutUnderlying\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrapper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOutUnderlying\",\"type\":\"uint256\"}],\"name\":\"previewWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountInWrapped\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"recoveryModeExit\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"name\":\"supplyCredit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"debt\",\"type\":\"uint256\"}],\"name\":\"takeDebt\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unguardedCheckNotEntered\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"newRawBalance\",\"type\":\"uint256\"},{\"internalType\":\"enum Rounding\",\"name\":\"roundingDirection\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"}],\"name\":\"updateLiveTokenBalanceInPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"One-fits-all solution for hardhat tests. Use the typechain type for errors, events and functions.\",\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingInRaw\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedInRaw\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens deposited into the buffer\"}},\"addLiquidityToBufferUnbalancedForTests(address,uint256,uint256)\":{\"details\":\"Adds liquidity to buffer unbalanced, so it can unbalance the buffer.\"},\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"tokenAllowance\":\"Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\",\"returns\":{\"buffersPaused\":\"True if the Vault buffers are paused\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"tokenBalance\":\"Token balance of the account\"}},\"buildTokenConfig(address[],address[])\":{\"details\":\"Infers TokenType (STANDARD or WITH_RATE) from the presence or absence of the rate provider.\"},\"buildTokenConfig(address[],address[],bool[])\":{\"details\":\"Infers TokenType (STANDARD or WITH_RATE) from the presence or absence of the rate provider.\"},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"swapFeeAmounts\":\"An array with the total swap fees collected, sorted in token registration order\",\"yieldFeeAmounts\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"dynamicSwapFeePercentage\":\"The dynamic swap fee percentage\"}},\"disableQuery()\":{\"details\":\"The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2). This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether disabling queries is completely necessary; queries can still be re-enabled after this call.\"},\"disableQueryPermanently()\":{\"details\":\"Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\"},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\"}},\"enableQuery()\":{\"details\":\"Only works if queries are not permanently disabled.\"},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\",\"params\":{\"pool\":\"The address of the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}},\"getAddLiquidityCalledFlag(address)\":{\"details\":\"Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional is the only standard way to exit a position without fees, and this flag is used to enable fees in that case. It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse than a simple swap for every pool type.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"liquidityAdded\":\"True if liquidity has been added to this pool in the current transaction Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"swapFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"yieldFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"authorizer\":\"Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingBalanceRaw\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"wrappedBalanceRaw\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"bufferMinimumTotalSupply\":\"The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"ownerShares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodDuration\":\"The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodEndTime\":\"The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"bufferShares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getERC4626BufferAsset(address)\":{\"details\":\"To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers should never call `wrapper.asset()` directly, at least without checking it against the asset registered with the Vault on initialization.\",\"params\":{\"wrappedToken\":\"The wrapped token specifying the buffer\"},\"returns\":{\"asset\":\"The underlying asset of the wrapped token\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"hooksConfig\":\"The hooks configuration as a `HooksConfig` struct\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"maxTokens\":\"The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"minTokens\":\"The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"minimumTradeAmount\":\"The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"minimumWrapAmount\":\"The minimum wrap amount in native underlying token decimals\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"nonzeroDeltaCount\":\"The current value of `_nonzeroDeltaCount`\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance. Balancer timestamps are 32 bits.\",\"returns\":{\"pauseWindowEndTime\":\"The timestamp when the Vault's pause window ends\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"poolConfig\":\"The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"poolData\":\"The `PoolData` result\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"poolMinimumTotalSupply\":\"The minimum total supply a pool can have after initialization\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period. Balancer timestamps are 32 bits.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"pauseManager\":\"The pause manager, or the zero address\",\"poolBufferPeriodEndTime\":\"The timestamp after which the Pool unpauses itself (if paused)\",\"poolPauseWindowEndTime\":\"The timestamp of the end of the Pool's pause window\",\"poolPaused\":\"True if the Pool is paused\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"roleAccounts\":\"A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"index\":\"Index corresponding to the given token in the pool's token list\",\"tokenCount\":\"Number of tokens in the pool\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"tokens\":\"List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"reserveAmount\":\"The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"swapFeePercentage\":\"The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"tokenDelta\":\"The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"vaultAdmin\":\"The address of the Vault admin\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"vaultExtension\":\"Address of the VaultExtension\"}},\"getVaultPausedState()\":{\"details\":\"Balancer timestamps are 32 bits.\",\"returns\":{\"vaultBufferPeriodEndTime\":\"The timestamp of the end of the Vault's buffer period\",\"vaultPauseWindowEndTime\":\"The timestamp of the end of the Vault's pause window\",\"vaultPaused\":\"True if the Vault is paused\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isERC4626BufferInitialized(address)\":{\"details\":\"An initialized buffer should have an asset registered in the Vault.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"isBufferInitialized\":\"True if the ERC4626 buffer is initialized\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"inRecoveryMode\":\"True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"initialized\":\"True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"poolPaused\":\"True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"registered\":\"True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"If true, queries might either be disabled temporarily or permanently.\",\"returns\":{\"queryDisabled\":\"True if query functionality is reversibly disabled\"}},\"isQueryDisabledPermanently()\":{\"details\":\"This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\",\"returns\":{\"queryDisabledPermanently\":\"True if query functionality is permanently disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"unlocked\":\"True if the Vault is unlocked, false otherwise\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `areBuffersPaused` to check the pause state of the buffers.\",\"returns\":{\"vaultPaused\":\"True if the Vault is paused\"}},\"manualUnsafeSetStaticSwapFeePercentage(address,uint256)\":{\"details\":\"Does not check the value against any min/max limits normally enforced by the pool.\"},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment. Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers are also paused (with `pauseVaultBuffers`).\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting buffers, and vice versa.\"},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. Balancer timestamps are 32 bits. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOut\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"tokenTotalSupply\":\"Total supply of the token\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`. If the Vault was also paused, it will remain in that state until explicitly unpaused. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateSwapFeePercentageChanged` event.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose swap fee percentage will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateYieldFeePercentageChanged` event.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose yield fee percentage will be updated\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The main Vault address.\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\"},\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"disableQuery()\":{\"notice\":\"Disables query functionality on the Vault. Can only be called by governance.\"},\"disableQueryPermanently()\":{\"notice\":\"Disables query functionality permanently on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"enableQuery()\":{\"notice\":\"Enables query functionality on the Vault. Can only be called by governance.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAddLiquidityCalledFlag(address)\":{\"notice\":\"This flag is used to detect and tax \\\"round-trip\\\" interactions (adding and removing liquidity in the same pool).\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getERC4626BufferAsset(address)\":{\"notice\":\"Gets the registered asset for a given buffer.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isERC4626BufferInitialized(address)\":{\"notice\":\"Checks if the wrapped token has an initialized buffer in the Vault.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Returns true if queries are disabled on the Vault.\"},\"isQueryDisabledPermanently()\":{\"notice\":\"Returns true if queries are disabled permanently; false if they are enabled.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/test/IVaultMock.sol\":\"IVaultMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/test/IVaultAdminMock.sol\":{\"keccak256\":\"0x51d1502369f0bb1fec58b7aa848f20e6ea3ddcb4866471e2fdbe96f0f6783fb5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab9f73ec13f137f3103edf9caa8edc4752db585393cc7db6c62f85a1efdbfb5e\",\"dweb:/ipfs/QmXBoBF18c1f33NYqPmrJ3cqULMak55uznBvzfpf1bHpDd\"]},\"@balancer-labs/v3-interfaces/contracts/test/IVaultExtensionMock.sol\":{\"keccak256\":\"0x18c434c91bbcd260bd305f2cdc01684a3040bc633c1b185f95cb323a336ac76c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://270260ba29c81dc6d862a0830ccbbdcd81b4543bd9c9b54228493a92568532d4\",\"dweb:/ipfs/QmTHp7v5dGwLujPRaWkoEM22Loy3MuspodMGcm4syAPUvk\"]},\"@balancer-labs/v3-interfaces/contracts/test/IVaultMainMock.sol\":{\"keccak256\":\"0x63f1a4d7fbd2ed33fb622cc5a141a9ccc1d3f99f30ac5d72b75a2bb36965bd42\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de9db0a61bc99572d72030c73feff2e4337104fd43a3d764f181b857c621246c\",\"dweb:/ipfs/QmcxzP6SqNAkqg4APteqzsxRkxyxcZhMF21b3sCKiCymSP\"]},\"@balancer-labs/v3-interfaces/contracts/test/IVaultMock.sol\":{\"keccak256\":\"0x66a706de1a8eb2836d3a6f41ce8b05b244169c42ff5f947affd885b34c722bd3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://88e094f387cf6886b7f9764acaf37b3aa278a1a1fb2dc748d29a791b9fe742d9\",\"dweb:/ipfs/QmdaNH3JjqcpgjvNKG4XVbEbJC9wuhH6gwtv8nifGsBmi4\"]},\"@balancer-labs/v3-interfaces/contracts/test/IVaultStorageMock.sol\":{\"keccak256\":\"0xb59762a929624826418e57ef85207703bedfbab512eeb422fd16d40520ab05d9\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8f6363f3ac816ff34ac5b78a564ed0febc9772d1dc130674e73db0a63b29273d\",\"dweb:/ipfs/QmSbmTTFb4vGqHSGQu974CHu146pCfzJRGFMxyN8ujopf7\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":{\"keccak256\":\"0xb5f6b1d0ee3f295a717ce58329eaadccb1eefc2e1e02e2e7c438e377628475cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03c1b9bc73b7d14d9e1948a31c271a03a6ba4291f44d9aff17e60d300c111d0d\",\"dweb:/ipfs/QmNpW3iD3ST76N6xTncuVgYSuafSqFkXUmxNaK8uybr96G\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/test/IVaultStorageMock.sol":{"IVaultStorageMock":{"abi":[{"inputs":[],"name":"manualGetIsUnlocked","outputs":[{"internalType":"StorageSlotExtension.BooleanSlotType","name":"slot","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"manualGetNonzeroDeltaCount","outputs":[{"internalType":"StorageSlotExtension.Uint256SlotType","name":"slot","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"manualGetTokenDeltas","outputs":[{"internalType":"TokenDeltaMappingSlotType","name":"slot","type":"bytes32"}],"stateMutability":"pure","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"manualGetIsUnlocked()":"b2469499","manualGetNonzeroDeltaCount()":"155075e6","manualGetTokenDeltas()":"1f4475c5"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"manualGetIsUnlocked\",\"outputs\":[{\"internalType\":\"StorageSlotExtension.BooleanSlotType\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualGetNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"StorageSlotExtension.Uint256SlotType\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualGetTokenDeltas\",\"outputs\":[{\"internalType\":\"TokenDeltaMappingSlotType\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/test/IVaultStorageMock.sol\":\"IVaultStorageMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/test/IVaultStorageMock.sol\":{\"keccak256\":\"0xb59762a929624826418e57ef85207703bedfbab512eeb422fd16d40520ab05d9\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8f6363f3ac816ff34ac5b78a564ed0febc9772d1dc130674e73db0a63b29273d\",\"dweb:/ipfs/QmSbmTTFb4vGqHSGQu974CHu146pCfzJRGFMxyN8ujopf7\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":{\"keccak256\":\"0xb5f6b1d0ee3f295a717ce58329eaadccb1eefc2e1e02e2e7c438e377628475cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03c1b9bc73b7d14d9e1948a31c271a03a6ba4291f44d9aff17e60d300c111d0d\",\"dweb:/ipfs/QmNpW3iD3ST76N6xTncuVgYSuafSqFkXUmxNaK8uybr96G\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol":{"IAuthorizer":{"abi":[{"inputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"where","type":"address"}],"name":"canPerform","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"canPerform(bytes32,address,address)":"9be2a884"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"where\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"params\":{\"account\":\"Account trying to perform the action\",\"actionId\":\"Identifier for the action to be performed\",\"where\":\"Target contract for the action\"},\"returns\":{\"success\":\"True if the action is permitted\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"notice\":\"Returns true if `account` can perform the action described by `actionId` in the contract `where`.\"}},\"notice\":\"Interface to the Vault's permission system.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":\"IAuthorizer\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol":{"IBasePool":{"abi":[{"inputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256","name":"tokenInIndex","type":"uint256"},{"internalType":"uint256","name":"invariantRatio","type":"uint256"}],"name":"computeBalance","outputs":[{"internalType":"uint256","name":"newBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"enum Rounding","name":"rounding","type":"uint8"}],"name":"computeInvariant","outputs":[{"internalType":"uint256","name":"invariant","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumInvariantRatio","outputs":[{"internalType":"uint256","name":"maximumInvariantRatio","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"maximumSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumInvariantRatio","outputs":[{"internalType":"uint256","name":"minimumInvariantRatio","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"minimumSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"}],"name":"onSwap","outputs":[{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"computeBalance(uint256[],uint256,uint256)":"16a0b3e0","computeInvariant(uint256[],uint8)":"984de9e8","getMaximumInvariantRatio()":"273c1adf","getMaximumSwapFeePercentage()":"654cf15d","getMinimumInvariantRatio()":"b677fa56","getMinimumSwapFeePercentage()":"ce20ece7","onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))":"72c98186"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"tokenInIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"invariantRatio\",\"type\":\"uint256\"}],\"name\":\"computeBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"enum Rounding\",\"name\":\"rounding\",\"type\":\"uint8\"}],\"name\":\"computeInvariant\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"invariant\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maximumInvariantRatio\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maximumSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumInvariantRatio\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"onSwap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"All pool types should implement this interface. Note that it also requires implementation of: - `ISwapFeePercentageBounds` to specify the minimum and maximum swap fee percentages. - `IUnbalancedLiquidityInvariantRatioBounds` to specify how much the invariant can change during an unbalanced liquidity operation.\",\"kind\":\"dev\",\"methods\":{\"computeBalance(uint256[],uint256,uint256)\":{\"details\":\"Similar to V2's `_getTokenBalanceGivenInvariantAndAllOtherBalances` in StableMath. The pool must round up for the Vault to round in the protocol's favor when calling this function.\",\"params\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\",\"invariantRatio\":\"The ratio of the new invariant (after an operation) to the old\",\"tokenInIndex\":\"The index of the token we're computing the balance for, sorted in token registration order\"},\"returns\":{\"newBalance\":\"The new balance of the selected token, after the operation\"}},\"computeInvariant(uint256[],uint8)\":{\"details\":\"This function computes the invariant based on current balances (and potentially other pool state). The rounding direction must be respected for the Vault to round in the pool's favor when calling this function. If the invariant computation involves no precision loss (e.g. simple sum of balances), the same result can be returned for both rounding directions. You can think of the invariant as a measure of the \\\"value\\\" of the pool, which is related to the total liquidity (i.e., the \\\"BPT rate\\\" is `invariant` / `totalSupply`). Two critical properties must hold: 1) The invariant should not change due to a swap. In practice, it can *increase* due to swap fees, which effectively add liquidity after the swap - but it should never decrease. 2) The invariant must be \\\"linear\\\"; i.e., increasing the balances proportionally must increase the invariant in the same proportion: inv(a * n, b * n, c * n) = inv(a, b, c) * n Property #1 is required to prevent \\\"round trip\\\" paths that drain value from the pool (and all LP shareholders). Intuitively, an accurate pricing algorithm ensures the user gets an equal value of token out given token in, so the total value should not change. Property #2 is essential for the \\\"fungibility\\\" of LP shares. If it did not hold, then different users depositing the same total value would get a different number of LP shares. In that case, LP shares would not be interchangeable, as they must be in a fair DEX.\",\"params\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\",\"rounding\":\"Rounding direction to consider when computing the invariant\"},\"returns\":{\"invariant\":\"The calculated invariant of the pool, represented as a uint256\"}},\"getMaximumInvariantRatio()\":{\"returns\":{\"maximumInvariantRatio\":\"The maximum invariant ratio for a pool during unbalanced add liquidity\"}},\"getMaximumSwapFeePercentage()\":{\"returns\":{\"maximumSwapFeePercentage\":\"The maximum swap fee percentage for a pool\"}},\"getMinimumInvariantRatio()\":{\"returns\":{\"minimumInvariantRatio\":\"The minimum invariant ratio for a pool during unbalanced remove liquidity\"}},\"getMinimumSwapFeePercentage()\":{\"returns\":{\"minimumSwapFeePercentage\":\"The minimum swap fee percentage for a pool\"}},\"onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"amountCalculatedScaled18\":\"Calculated amount for the swap operation\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"computeBalance(uint256[],uint256,uint256)\":{\"notice\":\"Computes a new token balance, given the invariant growth ratio and all other balances.\"},\"computeInvariant(uint256[],uint8)\":{\"notice\":\"Computes the pool's invariant.\"},\"onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Execute a swap in the pool.\"}},\"notice\":\"Base interface for a Balancer Pool.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":\"IBasePool\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol":{"IBasePoolFactory":{"abi":[{"inputs":[],"name":"Disabled","type":"error"},{"inputs":[],"name":"IndexOutOfBounds","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"anonymous":false,"inputs":[],"name":"FactoryDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreated","type":"event"},{"inputs":[],"name":"disable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"constructorArgs","type":"bytes"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"getDeploymentAddress","outputs":[{"internalType":"address","name":"deploymentAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolCount","outputs":[{"internalType":"uint256","name":"poolCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPools","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getPoolsInRange","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDisabled","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolFromFactory","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"disable()":"2f2770db","getActionId(bytes4)":"851c1bb3","getDeploymentAddress(bytes,bytes32)":"44f6fec7","getPoolCount()":"8eec5d70","getPools()":"673a2a1f","getPoolsInRange(uint256,uint256)":"53a72f7e","isDisabled()":"6c57f5a9","isPoolFromFactory(address)":"6634b753"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"Disabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"FactoryDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"disable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"constructorArgs\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"getDeploymentAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"deploymentAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPools\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"getPoolsInRange\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"All pool factories should be derived from `BasePoolFactory` to enable common behavior for all pool types (e.g., address prediction, tracking deployed pools, and governance-facilitated migration).\",\"events\":{\"PoolCreated(address)\":{\"params\":{\"pool\":\"The address of the new pool\"}}},\"kind\":\"dev\",\"methods\":{\"disable()\":{\"details\":\"Existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}},\"getDeploymentAddress(bytes,bytes32)\":{\"params\":{\"constructorArgs\":\"The arguments used to create the pool\",\"salt\":\"The salt used to deploy the pool\"},\"returns\":{\"deploymentAddress\":\"The predicted address of the pool, given the salt\"}},\"getPoolCount()\":{\"details\":\"This can then be used to \\\"paginate\\\" calls to `getPools` to control gas costs.\",\"returns\":{\"poolCount\":\"The number of pools deployed by this factory\"}},\"getPools()\":{\"returns\":{\"pools\":\"The list of pools deployed by this factory\"}},\"getPoolsInRange(uint256,uint256)\":{\"details\":\"`start` must be a valid index, but if `count` exceeds the total length, it will not revert, but simply stop at the end and return fewer results than requested.\",\"params\":{\"count\":\"The maximum number of pools to return\",\"start\":\"The index of the first pool to return\"},\"returns\":{\"pools\":\"The list of pools deployed by this factory, starting at `start` and returning up to `count` pools\"}},\"isDisabled()\":{\"returns\":{\"success\":\"True if this factory was disabled\"}},\"isPoolFromFactory(address)\":{\"params\":{\"pool\":\"The pool to check\"},\"returns\":{\"success\":\"True if `pool` was created by this factory\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"Disabled()\":[{\"notice\":\"Attempted pool creation after the factory was disabled.\"}],\"IndexOutOfBounds()\":[{\"notice\":\"A pool index is beyond the current bounds of the array.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"events\":{\"FactoryDisabled()\":{\"notice\":\"The factory was disabled by governance.\"},\"PoolCreated(address)\":{\"notice\":\"A pool was deployed.\"}},\"kind\":\"user\",\"methods\":{\"disable()\":{\"notice\":\"Disable the factory, preventing the creation of more pools.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getDeploymentAddress(bytes,bytes32)\":{\"notice\":\"Return the address where a new pool will be deployed, based on the factory address and salt.\"},\"getPoolCount()\":{\"notice\":\"Return the total number of pools deployed by this factory.\"},\"getPools()\":{\"notice\":\"Return the complete list of pools deployed by this factory.\"},\"getPoolsInRange(uint256,uint256)\":{\"notice\":\"Return a subset of the list of pools deployed by this factory.\"},\"isDisabled()\":{\"notice\":\"Check whether this factory has been disabled by governance.\"},\"isPoolFromFactory(address)\":{\"notice\":\"Check whether a pool was deployed by this factory.\"}},\"notice\":\"Base interface for a Balancer Pool Factory.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\":\"IBasePoolFactory\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\":{\"keccak256\":\"0x6f8c558b0520faae0c4576f30225b5a97821a4cd210878a0ba10c102a2f753f3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b40aa7a5ee39fa2e297c684fd29ad45d866f1fc61cd997120a417b02a4d908aa\",\"dweb:/ipfs/QmYP5pQAF7SDLgy3aerqfnc4VwdmfQix2jcQUNL3o83BY9\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IBatchRouter.sol":{"IBatchRouter":{"abi":[{"inputs":[{"components":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct IBatchRouter.SwapPathStep[]","name":"steps","type":"tuple[]"},{"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"internalType":"struct IBatchRouter.SwapPathExactAmountIn[]","name":"paths","type":"tuple[]"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"querySwapExactIn","outputs":[{"internalType":"uint256[]","name":"pathAmountsOut","type":"uint256[]"},{"internalType":"address[]","name":"tokensOut","type":"address[]"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct IBatchRouter.SwapPathStep[]","name":"steps","type":"tuple[]"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"}],"internalType":"struct IBatchRouter.SwapPathExactAmountOut[]","name":"paths","type":"tuple[]"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"querySwapExactOut","outputs":[{"internalType":"uint256[]","name":"pathAmountsIn","type":"uint256[]"},{"internalType":"address[]","name":"tokensIn","type":"address[]"},{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct IBatchRouter.SwapPathStep[]","name":"steps","type":"tuple[]"},{"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"internalType":"struct IBatchRouter.SwapPathExactAmountIn[]","name":"paths","type":"tuple[]"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"swapExactIn","outputs":[{"internalType":"uint256[]","name":"pathAmountsOut","type":"uint256[]"},{"internalType":"address[]","name":"tokensOut","type":"address[]"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct IBatchRouter.SwapPathStep[]","name":"steps","type":"tuple[]"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"}],"internalType":"struct IBatchRouter.SwapPathExactAmountOut[]","name":"paths","type":"tuple[]"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"swapExactOut","outputs":[{"internalType":"uint256[]","name":"pathAmountsIn","type":"uint256[]"},{"internalType":"address[]","name":"tokensIn","type":"address[]"},{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"}],"stateMutability":"payable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"querySwapExactIn((address,(address,address,bool)[],uint256,uint256)[],address,bytes)":"e3b5dff4","querySwapExactOut((address,(address,address,bool)[],uint256,uint256)[],address,bytes)":"2950286e","swapExactIn((address,(address,address,bool)[],uint256,uint256)[],uint256,bool,bytes)":"286f580d","swapExactOut((address,(address,address,bool)[],uint256,uint256)[],uint256,bool,bytes)":"8eb1b65e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct IBatchRouter.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"internalType\":\"struct IBatchRouter.SwapPathExactAmountIn[]\",\"name\":\"paths\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"querySwapExactIn\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"pathAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"tokensOut\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct IBatchRouter.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"}],\"internalType\":\"struct IBatchRouter.SwapPathExactAmountOut[]\",\"name\":\"paths\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"querySwapExactOut\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"pathAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"tokensIn\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct IBatchRouter.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"internalType\":\"struct IBatchRouter.SwapPathExactAmountIn[]\",\"name\":\"paths\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"swapExactIn\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"pathAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"tokensOut\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct IBatchRouter.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"}],\"internalType\":\"struct IBatchRouter.SwapPathExactAmountOut[]\",\"name\":\"paths\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"swapExactOut\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"pathAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"tokensIn\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"querySwapExactIn((address,(address,address,bool)[],uint256,uint256)[],address,bytes)\":{\"details\":\"Min amounts out specified in the paths are ignored.\",\"params\":{\"paths\":\"Swap paths from token in to token out, specifying exact amounts in\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data required for the query\"},\"returns\":{\"amountsOut\":\"Calculated amounts of output tokens to be received, ordered by output token address\",\"pathAmountsOut\":\"Calculated amounts of output tokens corresponding to the last step of each given path\",\"tokensOut\":\"Output token addresses\"}},\"querySwapExactOut((address,(address,address,bool)[],uint256,uint256)[],address,bytes)\":{\"details\":\"Max amounts in specified in the paths are ignored.\",\"params\":{\"paths\":\"Swap paths from token in to token out, specifying exact amounts out\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data required for the query\"},\"returns\":{\"amountsIn\":\"Calculated amounts of input tokens to be received, ordered by input token address\",\"pathAmountsIn\":\"Calculated amounts of input tokens corresponding to the last step of each given path\",\"tokensIn\":\"Input token addresses\"}},\"swapExactIn((address,(address,address,bool)[],uint256,uint256)[],uint256,bool,bytes)\":{\"params\":{\"deadline\":\"Deadline for the swap, after which it will revert\",\"paths\":\"Swap paths from token in to token out, specifying exact amounts in\",\"userData\":\"Additional (optional) data required for the swap\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsOut\":\"Calculated amounts of output tokens, ordered by output token address\",\"pathAmountsOut\":\"Calculated amounts of output tokens corresponding to the last step of each given path\",\"tokensOut\":\"Output token addresses\"}},\"swapExactOut((address,(address,address,bool)[],uint256,uint256)[],uint256,bool,bytes)\":{\"params\":{\"deadline\":\"Deadline for the swap\",\"paths\":\"Swap paths from token in to token out, specifying exact amounts out\",\"userData\":\"Additional (optional) data required for the swap\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsIn\":\"Calculated amounts of input tokens, ordered by input token address\",\"pathAmountsIn\":\"Calculated amounts of input tokens corresponding to the first step of each given path\",\"tokensIn\":\"Input token addresses\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"querySwapExactIn((address,(address,address,bool)[],uint256,uint256)[],address,bytes)\":{\"notice\":\"Queries a swap operation involving multiple paths (steps), specifying exact input token amounts.\"},\"querySwapExactOut((address,(address,address,bool)[],uint256,uint256)[],address,bytes)\":{\"notice\":\"Queries a swap operation involving multiple paths (steps), specifying exact output token amounts.\"},\"swapExactIn((address,(address,address,bool)[],uint256,uint256)[],uint256,bool,bytes)\":{\"notice\":\"Executes a swap operation involving multiple paths (steps), specifying exact input token amounts.\"},\"swapExactOut((address,(address,address,bool)[],uint256,uint256)[],uint256,bool,bytes)\":{\"notice\":\"Executes a swap operation involving multiple paths (steps), specifying exact output token amounts.\"}},\"notice\":\"Interface for the `BatchRouter`, supporting multi-hop swaps.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IBatchRouter.sol\":\"IBatchRouter\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBatchRouter.sol\":{\"keccak256\":\"0x700bec0606b05dd5e2799eeb01d5fc63149d84cddf349f75b43df241dd828798\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d18022dc7acd83fc7b37526f63bdd4d7cc11d9ab8cbe273a5a24e5e32c4df7db\",\"dweb:/ipfs/QmR9jWC8iY1nAXhhm9jj2UqvJdK9Coi7S3QVzGmayJcmpw\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IBufferRouter.sol":{"IBufferRouter":{"abi":[{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedIn","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingIn","type":"uint256"},{"internalType":"uint256","name":"amountWrappedIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"exactAmountUnderlyingIn","type":"uint256"},{"internalType":"uint256","name":"exactAmountWrappedIn","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"}],"name":"queryAddLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingIn","type":"uint256"},{"internalType":"uint256","name":"amountWrappedIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"exactAmountUnderlyingIn","type":"uint256"},{"internalType":"uint256","name":"exactAmountWrappedIn","type":"uint256"}],"name":"queryInitializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"exactSharesToRemove","type":"uint256"}],"name":"queryRemoveLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceOut","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidityToBuffer(address,uint256,uint256,uint256)":"502383f4","initializeBuffer(address,uint256,uint256,uint256)":"b365a3c2","queryAddLiquidityToBuffer(address,uint256)":"662727cc","queryInitializeBuffer(address,uint256,uint256)":"e0fefe35","queryRemoveLiquidityFromBuffer(address,uint256)":"13f7bb4d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountUnderlyingIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountWrappedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"}],\"name\":\"queryAddLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountUnderlyingIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountWrappedIn\",\"type\":\"uint256\"}],\"name\":\"queryInitializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToRemove\",\"type\":\"uint256\"}],\"name\":\"queryRemoveLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Requires the buffer to be initialized beforehand. Restricting adds to proportional simplifies the Vault code, avoiding rounding issues and minimum amount checks. It is possible to add unbalanced by interacting with the wrapper contract directly.\",\"params\":{\"exactSharesToIssue\":\"The amount of shares that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingIn\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedIn\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingIn\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedIn\":\"Amount of wrapped tokens deposited into the buffer\"}},\"initializeBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Calling this method binds the wrapped token to its underlying asset internally; the asset in the wrapper cannot change afterwards, or every other operation on that wrapper (add / remove / wrap / unwrap) will fail. To avoid unexpected behavior, always initialize buffers before creating or initializing any pools that contain the wrapped tokens to be used with them.\",\"params\":{\"exactAmountUnderlyingIn\":\"Amount of underlying tokens that will be deposited into the buffer\",\"exactAmountWrappedIn\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, denominated in underlying tokens (This is the BPT of the Vault's internal ERC4626 buffer.)\"}},\"queryAddLiquidityToBuffer(address,uint256)\":{\"params\":{\"exactSharesToIssue\":\"The amount of shares that would be minted, in underlying token decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingIn\":\"Amount of underlying tokens that would be deposited into the buffer\",\"amountWrappedIn\":\"Amount of wrapped tokens that would be deposited into the buffer\"}},\"queryInitializeBuffer(address,uint256,uint256)\":{\"params\":{\"exactAmountUnderlyingIn\":\"Amount of underlying tokens that the sender wishes to deposit into the buffer\",\"exactAmountWrappedIn\":\"Amount of wrapped tokens that the sender wishes to deposit into the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"The amount of shares that would be minted, in underlying token decimals\"}},\"queryRemoveLiquidityFromBuffer(address,uint256)\":{\"params\":{\"exactSharesToRemove\":\"The amount of shares that would be burned, in underlying token decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceOut\":\"Amount of underlying tokens that would be removed from the buffer\",\"removedWrappedBalanceOut\":\"Amount of wrapped tokens that would be removed from the buffer\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Adds liquidity proportionally to an internal ERC4626 buffer in the Vault.\"},\"initializeBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Adds liquidity for the first time to an internal ERC4626 buffer in the Vault.\"},\"queryAddLiquidityToBuffer(address,uint256)\":{\"notice\":\"Queries an `addLiquidityToBuffer` operation without actually executing it.\"},\"queryInitializeBuffer(address,uint256,uint256)\":{\"notice\":\"Queries an `initializeBuffer` operation without actually executing it.\"},\"queryRemoveLiquidityFromBuffer(address,uint256)\":{\"notice\":\"Queries an `removeLiquidityFromBuffer` operation without actually executing it.\"}},\"notice\":\"User-friendly interface for Buffer liquidity operations with the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IBufferRouter.sol\":\"IBufferRouter\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBufferRouter.sol\":{\"keccak256\":\"0xcef9acd5d8cf67d7e126da0961fef2f7dac4e9b24ae13385dfd17d2313536cd9\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e1bf4ede1c5055ea3a57536a6804bd3ca984017a738be03a2a7673eaec0c5ed\",\"dweb:/ipfs/QmYyfLkUeTj17JuDnzzKfqtFK9kEjfbs3XWEsdh83kNt1Z\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IERC20MultiTokenErrors.sol":{"IERC20MultiTokenErrors":{"abi":[{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"PoolTotalSupplyTooLow","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"PoolTotalSupplyTooLow\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"PoolTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"PoolTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a pool token can't be lower than the absolute minimum.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IERC20MultiTokenErrors.sol\":\"IERC20MultiTokenErrors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IERC20MultiTokenErrors.sol\":{\"keccak256\":\"0x4994bc0f8e5905640876a9411dadb73221ea2b7b1168d22cf5fe44ee1ca16960\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://69a0a6ab9c2622426ccfcb7263deb5615e589e98b3b31ea9fcd21595bb42a13d\",\"dweb:/ipfs/QmVW6GVXGTHnVo8MGk7zdLMASR8uN7khPsrEMXwgy4NBrQ\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol":{"IHooks":{"abi":[{"inputs":[],"name":"getHookFlags","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"}],"internalType":"struct HookFlags","name":"hookFlags","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256[]","name":"amountsInScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsInRaw","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterAddLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256[]","name":"hookAdjustedAmountsInRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterInitialize","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsOutRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAfterRemoveLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256[]","name":"hookAdjustedAmountsOutRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountInScaled18","type":"uint256"},{"internalType":"uint256","name":"amountOutScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenInBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenOutBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AfterSwapParams","name":"params","type":"tuple"}],"name":"onAfterSwap","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"hookAdjustedAmountCalculatedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256[]","name":"maxAmountsInScaled18","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeAddLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeInitialize","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onBeforeRemoveLiquidity","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"},{"internalType":"address","name":"pool","type":"address"}],"name":"onBeforeSwap","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"}],"name":"onComputeDynamicSwapFeePercentage","outputs":[{"internalType":"bool","name":"success","type":"bool"},{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"onRegister","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getHookFlags()":"d77153a7","onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)":"976907cc","onAfterInitialize(uint256[],uint256,bytes)":"38be241d","onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)":"2754888d","onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))":"18b6eb55","onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)":"45421ec7","onBeforeInitialize(uint256[],bytes)":"1c149e28","onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)":"ba5f9f40","onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)":"5211fa77","onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)":"a0e8f5ac","onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))":"0b89f182"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getHookFlags\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"}],\"internalType\":\"struct HookFlags\",\"name\":\"hookFlags\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsInRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAfterRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsOutRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenInBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenOutBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AfterSwapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"onAfterSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"hookAdjustedAmountCalculatedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onBeforeRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"onBeforeSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"onComputeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"onRegister\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Hooks are functions invoked by the Vault at specific points in the flow of each operation. This guarantees that they are called in the correct order, and with the correct arguments. To maintain this security, these functions should only be called by the Vault. The recommended way to do this is to derive the hook contract from `BaseHooks`, then use the `onlyVault` modifier from `VaultGuard`. (See the examples in /pool-hooks.)\",\"kind\":\"dev\",\"methods\":{\"getHookFlags()\":{\"details\":\"The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero). `onRegister` is the only \\\"mandatory\\\" hook.\",\"returns\":{\"hookFlags\":\"Flags indicating which hooks the contract supports\"}},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsInRaw\":\"Actual amounts of tokens added, sorted in token registration order\",\"amountsInScaled18\":\"Actual amounts of tokens added, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountOut\":\"Amount of pool tokens minted\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsInRaw\":\"New amountsInRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"details\":\"Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"bptAmountOut\":\"Amount of pool tokens minted during initialization\",\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool accepts the initialization results\"}},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsOutRaw\":\"Actual amount of tokens to receive, sorted in token registration order\",\"amountsOutScaled18\":\"Scaled amount of tokens to receive, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountIn\":\"Amount of pool tokens to burn\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"hookAdjustedAmountsOutRaw\":\"New amountsOutRaw, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"details\":\"Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"hookAdjustedAmountCalculatedRaw\":\"New amount calculated, potentially modified by the hook\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"maxAmountsInScaled18\":\"Maximum amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeInitialize(uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with initialization\"}},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"maxBptAmountIn\":\"Maximum amount of input pool tokens\",\"minAmountsOutScaled18\":\"Minimum output amounts, sorted in token registration order\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"details\":\"Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\"},\"returns\":{\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"details\":\"Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\",\"staticSwapFeePercentage\":\"18-decimal FP value of the static swap fee percentage, for reference\"},\"returns\":{\"dynamicSwapFeePercentage\":\"Value of the swap fee percentage, as an 18-decimal FP value\",\"success\":\"True if the pool wishes to proceed with settlement\"}},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"details\":\"Returns true if registration was successful, and false to revert the pool registration. Make sure this function is properly implemented (e.g. check the factory, and check that the given pool is from the factory). The Vault address will be msg.sender.\",\"params\":{\"factory\":\"Address of the pool factory (contract deploying the pool)\",\"liquidityManagement\":\"Liquidity management flags indicating which functions are enabled\",\"pool\":\"Address of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"},\"returns\":{\"success\":\"True if the hook allowed the registration, false otherwise\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getHookFlags()\":{\"notice\":\"Return the set of hooks implemented by the contract.\"},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed after adding liquidity.\"},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"notice\":\"Hook to be executed after pool initialization.\"},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed after removing liquidity.\"},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"notice\":\"Called after a swap to perform further actions once the balances have been updated by the swap.\"},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed before adding liquidity.\"},\"onBeforeInitialize(uint256[],bytes)\":{\"notice\":\"Hook executed before pool initialization.\"},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed before removing liquidity.\"},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"notice\":\"Called before a swap to give the Pool an opportunity to perform actions.\"},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"notice\":\"Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\"},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"notice\":\"Hook executed when a pool is registered with a non-zero hooks contract.\"}},\"notice\":\"Interface for pool hooks.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":\"IHooks\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IPoolLiquidity.sol":{"IPoolLiquidity":{"abi":[{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"uint256[]","name":"maxAmountsInScaled18","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAddLiquidityCustom","outputs":[{"internalType":"uint256[]","name":"amountsInScaled18","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"swapFeeAmountsScaled18","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onRemoveLiquidityCustom","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOutScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"swapFeeAmountsScaled18","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"onAddLiquidityCustom(address,uint256[],uint256,uint256[],bytes)":"e4c43663","onRemoveLiquidityCustom(address,uint256,uint256[],uint256[],bytes)":"ab68e28c"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAddLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onRemoveLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"onAddLiquidityCustom(address,uint256[],uint256,uint256[],bytes)\":{\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"maxAmountsInScaled18\":\"Maximum input amounts, sorted in token registration order\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"router\":\"The address (usually a router contract) that initiated a swap operation on the Vault\",\"userData\":\"Arbitrary data sent with the encoded request\"},\"returns\":{\"amountsInScaled18\":\"Input token amounts, sorted in token registration order\",\"bptAmountOut\":\"Calculated pool token amount to receive\",\"returnData\":\"Arbitrary data with an encoded response from the pool\",\"swapFeeAmountsScaled18\":\"The amount of swap fees charged for each token\"}},\"onRemoveLiquidityCustom(address,uint256,uint256[],uint256[],bytes)\":{\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"maxBptAmountIn\":\"Maximum amount of input pool tokens\",\"minAmountsOutScaled18\":\"Minimum output amounts, sorted in token registration order\",\"router\":\"The address (usually a router contract) that initiated a swap operation on the Vault\",\"userData\":\"Arbitrary data sent with the encoded request\"},\"returns\":{\"amountsOutScaled18\":\"Amount of tokens to receive, sorted in token registration order\",\"bptAmountIn\":\"Calculated pool token amount to burn\",\"returnData\":\"Arbitrary data with an encoded response from the pool\",\"swapFeeAmountsScaled18\":\"The amount of swap fees charged for each token\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"onAddLiquidityCustom(address,uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Add liquidity to the pool with a custom hook.\"},\"onRemoveLiquidityCustom(address,uint256,uint256[],uint256[],bytes)\":{\"notice\":\"Remove liquidity from the pool with a custom hook.\"}},\"notice\":\"Interface for custom liquidity operations.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IPoolLiquidity.sol\":\"IPoolLiquidity\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IPoolLiquidity.sol\":{\"keccak256\":\"0x0cdc0d3817887d0439c3c6f4c811bd37091ef75a855dd8b14c0e8f337e2799dd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4ffd05df90ccdf19a35177fd6c6f78edc61ca2a37df7d0934932a3ad5a96f1e6\",\"dweb:/ipfs/QmaCmKktnMy4XXZn2FaKTjwQBGUhuXKikbxCbPX6K5PPgi\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol":{"IProtocolFeeController":{"abi":[{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"pool","type":"address"}],"name":"CallerIsNotPoolCreator","type":"error"},{"inputs":[],"name":"PoolCreatorFeePercentageTooHigh","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreatorNotRegistered","type":"error"},{"inputs":[],"name":"ProtocolSwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ProtocolYieldFeePercentageTooHigh","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"GlobalProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"GlobalProtocolYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateSwapFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateYieldFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PoolCreatorFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"PoolCreatorSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"PoolCreatorYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"poolCreator","type":"address"},{"indexed":false,"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"PoolRegisteredWithFeeController","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolSwapFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"ProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolYieldFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"ProtocolYieldFeePercentageChanged","type":"event"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"protocolFeePercentage","type":"uint256"},{"internalType":"uint256","name":"poolCreatorFeePercentage","type":"uint256"}],"name":"computeAggregateFeePercentage","outputs":[{"internalType":"uint256","name":"aggregateFeePercentage","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getGlobalProtocolSwapFeePercentage","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolYieldFeePercentage","outputs":[{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolSwapFeeInfo","outputs":[{"internalType":"uint256","name":"protocolSwapFeePercentage","type":"uint256"},{"internalType":"bool","name":"isOverride","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolYieldFeeInfo","outputs":[{"internalType":"uint256","name":"protocolYieldFeePercentage","type":"uint256"},{"internalType":"bool","name":"isOverride","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getProtocolFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"registerPool","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setGlobalProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setGlobalProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"setPoolCreatorSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"setPoolCreatorYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"collectAggregateFees(address)":"8f4ab9ca","computeAggregateFeePercentage(uint256,uint256)":"0ddd60c6","getGlobalProtocolSwapFeePercentage()":"7869ee18","getGlobalProtocolYieldFeePercentage()":"55fb76af","getPoolCreatorFeeAmounts(address)":"9e95f3fd","getPoolCreatorSwapFeePercentage(address)":"0b8e059b","getPoolCreatorYieldFeePercentage(address)":"0252aab5","getPoolProtocolSwapFeeInfo(address)":"5c15a0b4","getPoolProtocolYieldFeeInfo(address)":"7a2b97dc","getProtocolFeeAmounts(address)":"8df44c54","isPoolRegistered(address)":"c673bdaf","registerPool(address,address,bool)":"77ff76e7","setGlobalProtocolSwapFeePercentage(uint256)":"8a3c5c69","setGlobalProtocolYieldFeePercentage(uint256)":"a93df2a4","setPoolCreatorSwapFeePercentage(address,uint256)":"1377c16c","setPoolCreatorYieldFeePercentage(address,uint256)":"3af52712","setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356","updateProtocolSwapFeePercentage(address)":"71ecc8fb","updateProtocolYieldFeePercentage(address)":"71447ea8","vault()":"fbfa77cf","withdrawPoolCreatorFees(address)":"52f125f0","withdrawPoolCreatorFees(address,address)":"f7061445","withdrawProtocolFees(address,address)":"cf7b287f","withdrawProtocolFeesForToken(address,address,address)":"b53a70b2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"CallerIsNotPoolCreator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolCreatorFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolYieldFeePercentageTooHigh\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateSwapFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateYieldFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"PoolRegisteredWithFeeController\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeAggregateFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolSwapFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOverride\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolYieldFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOverride\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getProtocolFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"registerPool\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"params\":{\"caller\":\"The account attempting to withdraw pool creator fees\",\"pool\":\"The pool the caller tried to withdraw from\"}}],\"PoolCreatorNotRegistered(address)\":[{\"params\":{\"pool\":\"The pool with no creator\"}}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol swap fee percentages.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol yield fee percentages.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"params\":{\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"params\":{\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global swap fee percentage.\",\"params\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global yield fee percentage.\",\"params\":{\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which pool creator fees are being withdrawn\",\"recipient\":\"The recipient of the funds (the pool creator if permissionless, or another account)\",\"token\":\"The token being withdrawn\"}},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator swap fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage for the pool\"}},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator yield fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage for the pool\"}},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"details\":\"The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee counterpart also include the protocol fee exemption flag, we might as well include it here as well.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (non-zero, or the event would not be emitted)\",\"protocolFeeExempt\":\"True if the pool is initially exempt from protocol fees\"}},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which protocol fees are being withdrawn\",\"recipient\":\"The recipient of the funds\",\"token\":\"The token being withdrawn\"}},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the swap fee was charged\",\"token\":\"The token in which the swap fee was charged\"}},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol swap fee will be changed\",\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the yield fee was charged\",\"token\":\"The token in which the yield fee was charged\"}},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol yield fee will be changed\",\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}}},\"kind\":\"dev\",\"methods\":{\"collectAggregateFees(address)\":{\"params\":{\"pool\":\"The pool with aggregate fees\"}},\"computeAggregateFeePercentage(uint256,uint256)\":{\"details\":\"Not tied to any particular pool; this just performs the low-level \\\"additive fee\\\" calculation. Note that pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are stored in the Vault with 24-bit precision, this will truncate any values that require greater precision. It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee components, but the truncation ensures it will not revert for any valid set of fee percentages. See example below: tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60% totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000 protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400 creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600 creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360 lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\",\"params\":{\"poolCreatorFeePercentage\":\"The pool creator portion of the aggregate fee percentage\",\"protocolFeePercentage\":\"The protocol portion of the aggregate fee percentage\"},\"returns\":{\"aggregateFeePercentage\":\"The computed aggregate percentage\"}},\"getGlobalProtocolSwapFeePercentage()\":{\"returns\":{\"protocolSwapFeePercentage\":\"The global protocol swap fee percentage\"}},\"getGlobalProtocolYieldFeePercentage()\":{\"returns\":{\"protocolYieldFeePercentage\":\"The global protocol yield fee percentage\"}},\"getPoolCreatorFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getPoolCreatorSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\"}},\"getPoolCreatorYieldFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee\"}},\"getPoolProtocolSwapFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"isOverride\":\"True if the protocol fee has been overridden\",\"protocolSwapFeePercentage\":\"The protocol swap fee percentage for the given pool\"}},\"getPoolProtocolYieldFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"isOverride\":\"True if the protocol fee has been overridden\",\"protocolYieldFeePercentage\":\"The protocol yield fee percentage for the given pool\"}},\"getProtocolFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\"}},\"registerPool(address,address,bool)\":{\"details\":\"This must be called from the Vault during pool registration. It will initialize the pool to the global protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate fee percentages, based on an initial pool creator fee of 0.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (or 0 if there won't be a pool creator fee)\",\"protocolFeeExempt\":\"If true, the pool is initially exempt from protocol fees\"},\"returns\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\"}},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\"}},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage to apply to the pool\"}},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage to apply to the pool\"}},\"setProtocolSwapFeePercentage(address,uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol swap fee\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol yield fee\"}},\"updateProtocolSwapFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol swap fee\"}},\"updateProtocolYieldFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol yield fee\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The Vault address\"}},\"withdrawPoolCreatorFees(address)\":{\"details\":\"Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable value, this function is permissionless.\",\"params\":{\"pool\":\"The pool on which fees were collected\"}},\"withdrawPoolCreatorFees(address,address)\":{\"details\":\"Sends swap and yield pool creator fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFees(address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFeesForToken(address,address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\",\"token\":\"Token to withdraw\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"notice\":\"Error raised if the wrong account attempts to withdraw pool creator fees.\"}],\"PoolCreatorFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\"}],\"PoolCreatorNotRegistered(address)\":[{\"notice\":\"Error raised if there is no pool creator on a withdrawal attempt from the given pool.\"}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated.\"},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated.\"},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\"},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\"},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of pool creator fees in a specific token and amount.\"},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator swap fee percentage of a pool is updated.\"},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator yield fee percentage of a pool is updated.\"},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"notice\":\"Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\"},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of protocol fees in a specific token and amount.\"},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol swap fees in a specific token and amount.\"},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated for a specific pool.\"},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol yield fees in a specific token and amount.\"},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated for a specific pool.\"}},\"kind\":\"user\",\"methods\":{\"collectAggregateFees(address)\":{\"notice\":\"Collects aggregate fees from the Vault for a given pool.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"notice\":\"Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\"},\"getGlobalProtocolSwapFeePercentage()\":{\"notice\":\"Getter for the current global protocol swap fee.\"},\"getGlobalProtocolYieldFeePercentage()\":{\"notice\":\"Getter for the current global protocol yield fee.\"},\"getPoolCreatorFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the pool creator for withdrawal.\"},\"getPoolCreatorSwapFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator swap fee percentage for a given pool.\"},\"getPoolCreatorYieldFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator yield fee percentage for a given pool.\"},\"getPoolProtocolSwapFeeInfo(address)\":{\"notice\":\"Getter for the current protocol swap fee for a given pool.\"},\"getPoolProtocolYieldFeeInfo(address)\":{\"notice\":\"Getter for the current protocol yield fee for a given pool.\"},\"getProtocolFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the protocol for withdrawal.\"},\"isPoolRegistered(address)\":{\"notice\":\"Getter for pool registration flag.\"},\"registerPool(address,address,bool)\":{\"notice\":\"Add pool-specific entries to the protocol swap and yield percentages.\"},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"notice\":\"Set the global protocol swap fee percentage, used by standard pools.\"},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"notice\":\"Set the global protocol yield fee percentage, used by standard pools.\"},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator swap fee percentage to the specified pool.\"},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator yield fee percentage to the specified pool.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"updateProtocolSwapFeePercentage(address)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"updateProtocolYieldFeePercentage(address)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"vault()\":{\"notice\":\"Get the address of the main Vault contract.\"},\"withdrawPoolCreatorFees(address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool.\"},\"withdrawPoolCreatorFees(address,address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool. This is a permissioned function.\"},\"withdrawProtocolFees(address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\"},\"withdrawProtocolFeesForToken(address,address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\"}},\"notice\":\"Contract that handles protocol and pool creator fees for the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":\"IProtocolFeeController\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol":{"IRouter":{"abi":[{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"addLiquidityCustom","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"addLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"addLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"addLiquidityUnbalanced","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"donate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquidityCustom","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquidityUnbalanced","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquidityCustom","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"}],"name":"queryRemoveLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquiditySingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"querySwapSingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"querySwapSingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"removeLiquidityCustom","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"removeLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"removeLiquiditySingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"removeLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"swapSingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"swapSingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidityCustom(address,uint256[],uint256,bool,bytes)":"0ca078ec","addLiquidityProportional(address,uint256[],uint256,bool,bytes)":"724dba33","addLiquiditySingleTokenExactOut(address,address,uint256,uint256,bool,bytes)":"72657d17","addLiquidityUnbalanced(address,uint256[],uint256,bool,bytes)":"c08bc851","donate(address,uint256[],bool,bytes)":"bf6ee3fd","initialize(address,address[],uint256[],uint256,bool,bytes)":"026b3d95","queryAddLiquidityCustom(address,uint256[],uint256,address,bytes)":"452db952","queryAddLiquidityProportional(address,uint256,address,bytes)":"9de90518","queryAddLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)":"1d56798d","queryAddLiquidityUnbalanced(address,uint256[],address,bytes)":"da001f7d","queryRemoveLiquidityCustom(address,uint256,uint256[],address,bytes)":"c330c7be","queryRemoveLiquidityProportional(address,uint256,address,bytes)":"0f710888","queryRemoveLiquidityRecovery(address,uint256)":"b037ed36","queryRemoveLiquiditySingleTokenExactIn(address,uint256,address,address,bytes)":"23b39241","queryRemoveLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)":"53d0bb98","querySwapSingleTokenExactIn(address,address,address,uint256,address,bytes)":"3ebc54e5","querySwapSingleTokenExactOut(address,address,address,uint256,address,bytes)":"175d4408","removeLiquidityCustom(address,uint256,uint256[],bool,bytes)":"82bf2b24","removeLiquidityProportional(address,uint256,uint256[],bool,bytes)":"51682750","removeLiquidityRecovery(address,uint256,uint256[])":"08c04793","removeLiquiditySingleTokenExactIn(address,uint256,address,uint256,bool,bytes)":"ecb2182c","removeLiquiditySingleTokenExactOut(address,uint256,address,uint256,bool,bytes)":"e7326def","swapSingleTokenExactIn(address,address,address,uint256,uint256,uint256,bool,bytes)":"750283bc","swapSingleTokenExactOut(address,address,address,uint256,uint256,uint256,bool,bytes)":"94e86ef8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"addLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"addLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"addLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"addLiquidityUnbalanced\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"donate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquidityUnbalanced\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"}],\"name\":\"queryRemoveLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquiditySingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"querySwapSingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"querySwapSingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"removeLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"removeLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"removeLiquiditySingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"removeLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"swapSingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"swapSingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"addLiquidityCustom(address,uint256[],uint256,bool,bytes)\":{\"details\":\"The given maximum and minimum amounts given may be interpreted as exact depending on the pool type. In any case the caller can expect them to be hard boundaries for the request.\",\"params\":{\"maxAmountsIn\":\"Maximum amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Minimum amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to add liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsIn\":\"Actual amounts of tokens added, sorted in token registration order\",\"bptAmountOut\":\"Actual amount of pool tokens received\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"addLiquidityProportional(address,uint256[],uint256,bool,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Exact amount of pool tokens to be received\",\"maxAmountsIn\":\"Maximum amounts of tokens to be added, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to add liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsIn\":\"Actual amounts of tokens added, sorted in token registration order\"}},\"addLiquiditySingleTokenExactOut(address,address,uint256,uint256,bool,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Exact amount of pool tokens to be received\",\"maxAmountIn\":\"Maximum amount of tokens to be added\",\"pool\":\"Address of the liquidity pool\",\"tokenIn\":\"Token used to add liquidity\",\"userData\":\"Additional (optional) data sent with the request to add liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountIn\":\"Actual amount of tokens added\"}},\"addLiquidityUnbalanced(address,uint256[],uint256,bool,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Minimum amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to add liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"bptAmountOut\":\"Actual amount of pool tokens received\"}},\"donate(address,uint256[],bool,bytes)\":{\"details\":\"To support donation, the pool config `enableDonation` flag must be set to true.\",\"params\":{\"amountsIn\":\"Amounts of tokens to be donated, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to donate liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"}},\"initialize(address,address[],uint256[],uint256,bool,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Minimum amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"tokens\":\"Pool tokens, in token registration order\",\"userData\":\"Additional (optional) data sent with the request to add initial liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"bptAmountOut\":\"Actual amount of pool tokens minted in exchange for initial liquidity\"}},\"queryAddLiquidityCustom(address,uint256[],uint256,address,bytes)\":{\"params\":{\"maxAmountsIn\":\"Maximum amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Expected minimum amount of pool tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsIn\":\"Expected amounts of tokens to add, sorted in token registration order\",\"bptAmountOut\":\"Expected amount of pool tokens to receive\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"queryAddLiquidityProportional(address,uint256,address,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Exact amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsIn\":\"Expected amounts of tokens to add, sorted in token registration order\"}},\"queryAddLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Expected exact amount of pool tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenIn\":\"Token used to add liquidity\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountIn\":\"Expected amount of tokens to add\"}},\"queryAddLiquidityUnbalanced(address,uint256[],address,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of tokens to be added, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"bptAmountOut\":\"Expected amount of pool tokens to receive\"}},\"queryRemoveLiquidityCustom(address,uint256,uint256[],address,bytes)\":{\"params\":{\"maxBptAmountIn\":\"Maximum amount of pool tokens provided\",\"minAmountsOut\":\"Expected minimum amounts of tokens to receive, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsOut\":\"Expected amounts of tokens to receive, sorted in token registration order\",\"bptAmountIn\":\"Expected amount of pool tokens to burn\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"queryRemoveLiquidityProportional(address,uint256,address,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided for the query\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsOut\":\"Expected amounts of tokens to receive, sorted in token registration order\"}},\"queryRemoveLiquidityRecovery(address,uint256)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided for the query\",\"pool\":\"Address of the liquidity pool\"},\"returns\":{\"amountsOut\":\"Expected amounts of tokens to receive, sorted in token registration order\"}},\"queryRemoveLiquiditySingleTokenExactIn(address,uint256,address,address,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided for the query\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountOut\":\"Expected amount of tokens to receive\"}},\"queryRemoveLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"params\":{\"exactAmountOut\":\"Expected exact amount of tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"bptAmountIn\":\"Expected amount of pool tokens to burn\"}},\"querySwapSingleTokenExactIn(address,address,address,uint256,address,bytes)\":{\"params\":{\"exactAmountIn\":\"Exact amounts of input tokens to send\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountOut\":\"Calculated amount of output tokens to be received in exchange for the given input tokens\"}},\"querySwapSingleTokenExactOut(address,address,address,uint256,address,bytes)\":{\"params\":{\"exactAmountOut\":\"Exact amounts of input tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountIn\":\"Calculated amount of input tokens to be sent in exchange for the requested output tokens\"}},\"removeLiquidityCustom(address,uint256,uint256[],bool,bytes)\":{\"details\":\"The given maximum and minimum amounts given may be interpreted as exact depending on the pool type. In any case the caller can expect them to be hard boundaries for the request.\",\"params\":{\"maxBptAmountIn\":\"Maximum amount of pool tokens provided\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to remove liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsOut\":\"Actual amounts of tokens received, sorted in token registration order\",\"bptAmountIn\":\"Actual amount of pool tokens burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"removeLiquidityProportional(address,uint256,uint256[],bool,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to remove liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsOut\":\"Actual amounts of tokens received, sorted in token registration order\"}},\"removeLiquidityRecovery(address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\"},\"returns\":{\"amountsOut\":\"Actual amounts of tokens received, sorted in token registration order\"}},\"removeLiquiditySingleTokenExactIn(address,uint256,address,uint256,bool,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided\",\"minAmountOut\":\"Minimum amount of tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the request to remove liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountOut\":\"Actual amount of tokens received\"}},\"removeLiquiditySingleTokenExactOut(address,uint256,address,uint256,bool,bytes)\":{\"params\":{\"exactAmountOut\":\"Exact amount of tokens to be received\",\"maxBptAmountIn\":\"Maximum amount of pool tokens provided\",\"pool\":\"Address of the liquidity pool\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the request to remove liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"bptAmountIn\":\"Actual amount of pool tokens burned\"}},\"swapSingleTokenExactIn(address,address,address,uint256,uint256,uint256,bool,bytes)\":{\"params\":{\"deadline\":\"Deadline for the swap, after which it will revert\",\"exactAmountIn\":\"Exact amounts of input tokens to send\",\"minAmountOut\":\"Minimum amount of tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the swap request\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountOut\":\"Calculated amount of output tokens to be received in exchange for the given input tokens\"}},\"swapSingleTokenExactOut(address,address,address,uint256,uint256,uint256,bool,bytes)\":{\"params\":{\"deadline\":\"Deadline for the swap, after which it will revert\",\"exactAmountOut\":\"Exact amounts of input tokens to receive\",\"maxAmountIn\":\"Maximum amount of tokens to be sent\",\"pool\":\"Address of the liquidity pool\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the swap request\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountIn\":\"Calculated amount of input tokens to be sent in exchange for the requested output tokens\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidityCustom(address,uint256[],uint256,bool,bytes)\":{\"notice\":\"Adds liquidity to a pool with a custom request.\"},\"addLiquidityProportional(address,uint256[],uint256,bool,bytes)\":{\"notice\":\"Adds liquidity to a pool with proportional token amounts, receiving an exact amount of pool tokens.\"},\"addLiquiditySingleTokenExactOut(address,address,uint256,uint256,bool,bytes)\":{\"notice\":\"Adds liquidity to a pool in a single token, receiving an exact amount of pool tokens.\"},\"addLiquidityUnbalanced(address,uint256[],uint256,bool,bytes)\":{\"notice\":\"Adds liquidity to a pool with arbitrary token amounts.\"},\"donate(address,uint256[],bool,bytes)\":{\"notice\":\"Adds liquidity to a pool by donating the amounts in (no BPT out).\"},\"initialize(address,address[],uint256[],uint256,bool,bytes)\":{\"notice\":\"Initialize a liquidity pool.\"},\"queryAddLiquidityCustom(address,uint256[],uint256,address,bytes)\":{\"notice\":\"Queries an `addLiquidityCustom` operation without actually executing it.\"},\"queryAddLiquidityProportional(address,uint256,address,bytes)\":{\"notice\":\"Queries an `addLiquidityProportional` operation without actually executing it.\"},\"queryAddLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"notice\":\"Queries an `addLiquiditySingleTokenExactOut` operation without actually executing it.\"},\"queryAddLiquidityUnbalanced(address,uint256[],address,bytes)\":{\"notice\":\"Queries an `addLiquidityUnbalanced` operation without actually executing it.\"},\"queryRemoveLiquidityCustom(address,uint256,uint256[],address,bytes)\":{\"notice\":\"Queries a `removeLiquidityCustom` operation without actually executing it.\"},\"queryRemoveLiquidityProportional(address,uint256,address,bytes)\":{\"notice\":\"Queries a `removeLiquidityProportional` operation without actually executing it.\"},\"queryRemoveLiquidityRecovery(address,uint256)\":{\"notice\":\"Queries a `removeLiquidityRecovery` operation without actually executing it.\"},\"queryRemoveLiquiditySingleTokenExactIn(address,uint256,address,address,bytes)\":{\"notice\":\"Queries a `removeLiquiditySingleTokenExactIn` operation without actually executing it.\"},\"queryRemoveLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"notice\":\"Queries a `removeLiquiditySingleTokenExactOut` operation without actually executing it.\"},\"querySwapSingleTokenExactIn(address,address,address,uint256,address,bytes)\":{\"notice\":\"Queries a swap operation specifying an exact input token amount without actually executing it.\"},\"querySwapSingleTokenExactOut(address,address,address,uint256,address,bytes)\":{\"notice\":\"Queries a swap operation specifying an exact output token amount without actually executing it.\"},\"removeLiquidityCustom(address,uint256,uint256[],bool,bytes)\":{\"notice\":\"Removes liquidity from a pool with a custom request.\"},\"removeLiquidityProportional(address,uint256,uint256[],bool,bytes)\":{\"notice\":\"Removes liquidity with proportional token amounts from a pool, burning an exact pool token amount.\"},\"removeLiquidityRecovery(address,uint256,uint256[])\":{\"notice\":\"Removes liquidity proportionally, burning an exact pool token amount. Only available in Recovery Mode.\"},\"removeLiquiditySingleTokenExactIn(address,uint256,address,uint256,bool,bytes)\":{\"notice\":\"Removes liquidity from a pool via a single token, burning an exact pool token amount.\"},\"removeLiquiditySingleTokenExactOut(address,uint256,address,uint256,bool,bytes)\":{\"notice\":\"Removes liquidity from a pool via a single token, specifying the exact amount of tokens to receive.\"},\"swapSingleTokenExactIn(address,address,address,uint256,uint256,uint256,bool,bytes)\":{\"notice\":\"Executes a swap operation specifying an exact input token amount.\"},\"swapSingleTokenExactOut(address,address,address,uint256,uint256,uint256,bool,bytes)\":{\"notice\":\"Executes a swap operation specifying an exact output token amount.\"}},\"notice\":\"User-friendly interface to basic Vault operations: swap, add/remove liquidity, and associated queries.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\":\"IRouter\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\":{\"keccak256\":\"0x39a5cd3ee5c0bab644f068ad8ba617a0cf71a91610693b1c93c9536464151ee3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6a5f61af5cda44d8ef95e610c0b418f2cfb984e9c47a58fb1fa8c8bc949def75\",\"dweb:/ipfs/Qmby1D2D5Ym44jgBTTM8eTGnmNGCCKrb8ujpkhVPE6C6Cr\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IRouterCommon.sol":{"IRouterCommon":{"abi":[{"inputs":[],"name":"getPermit2","outputs":[{"internalType":"contract IPermit2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWeth","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"internalType":"struct IRouterCommon.PermitApproval[]","name":"permitBatch","type":"tuple[]"},{"internalType":"bytes[]","name":"permitSignatures","type":"bytes[]"},{"components":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint160","name":"amount","type":"uint160"},{"internalType":"uint48","name":"expiration","type":"uint48"},{"internalType":"uint48","name":"nonce","type":"uint48"}],"internalType":"struct IAllowanceTransfer.PermitDetails[]","name":"details","type":"tuple[]"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"sigDeadline","type":"uint256"}],"internalType":"struct IAllowanceTransfer.PermitBatch","name":"permit2Batch","type":"tuple"},{"internalType":"bytes","name":"permit2Signature","type":"bytes"},{"internalType":"bytes[]","name":"multicallData","type":"bytes[]"}],"name":"permitBatchAndCall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getPermit2()":"1bbf2e23","getWeth()":"107c279f","multicall(bytes[])":"ac9650d8","permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])":"19c6989f"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getPermit2\",\"outputs\":[{\"internalType\":\"contract IPermit2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWeth\",\"outputs\":[{\"internalType\":\"contract IWETH\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"internalType\":\"struct IRouterCommon.PermitApproval[]\",\"name\":\"permitBatch\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"permitSignatures\",\"type\":\"bytes[]\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"internalType\":\"uint48\",\"name\":\"expiration\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"nonce\",\"type\":\"uint48\"}],\"internalType\":\"struct IAllowanceTransfer.PermitDetails[]\",\"name\":\"details\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sigDeadline\",\"type\":\"uint256\"}],\"internalType\":\"struct IAllowanceTransfer.PermitBatch\",\"name\":\"permit2Batch\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"permit2Signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes[]\",\"name\":\"multicallData\",\"type\":\"bytes[]\"}],\"name\":\"permitBatchAndCall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"multicall(bytes[])\":{\"params\":{\"data\":\"Encoded function calls to be executed in the batch.\"},\"returns\":{\"results\":\"Array of bytes arrays, each representing the return data from each function call executed.\"}},\"permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])\":{\"params\":{\"multicallData\":\"An array of bytes arrays, each representing an encoded function call on this contract\",\"permit2Batch\":\"A batch of permit2 approvals\",\"permit2Signature\":\"A permit2 signature for the batch approval\",\"permitBatch\":\"An array of `PermitApproval` structs, each representing an ERC20 permit request\",\"permitSignatures\":\"An array of bytes, corresponding to the permit request signature in `permitBatch`\"},\"returns\":{\"results\":\"Array of bytes arrays, each representing the return data from each function call executed\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getPermit2()\":{\"notice\":\"Returns Permit2 contract address.\"},\"getWeth()\":{\"notice\":\"Returns WETH contract address.\"},\"multicall(bytes[])\":{\"notice\":\"Executes a batch of function calls on this contract.\"},\"permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])\":{\"notice\":\"Permits multiple allowances and executes a batch of function calls on this contract.\"}},\"notice\":\"Interface for functions shared between the `Router` and `BatchRouter`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IRouterCommon.sol\":\"IRouterCommon\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x75d5964b2f92dba9b9254e0052de28a9378e6759b1b28ccbb51db0bc80024176\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6ec9c862929ccff2be994d0296c0a4de3ddc19bb5a7aae3d4df0887dc7b29c8e\",\"dweb:/ipfs/QmSNr2fkNM2VyAo3B1DG1cuRh41t4A6mJZqeUu6vvYb97G\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouterCommon.sol\":{\"keccak256\":\"0x82d459426edf0ac20a33ad2065dae1f83544069b9887618248c0722e25a8b736\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c4566915a8c2b10f6232f92dad5e4409bb2aa46baf6a5d78dc0ac447facbfb37\",\"dweb:/ipfs/QmReRhA1BxRocwWsGgacaAcC2xRtWqJgN57bd2Yyy7A1gd\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"permit2/src/interfaces/IAllowanceTransfer.sol\":{\"keccak256\":\"0x37f0ac203b6ef605c9533e1a739477e8e9dcea90710b40e645a367f8a21ace29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0104d72aeaec1cd66cc232e7de7b7ead08608efcc179491b8a66387614670b0\",\"dweb:/ipfs/QmfAZDyuNC9FXXbnJUwqHNwmAK6uRrXxtWEytLsxjskPsN\"]},\"permit2/src/interfaces/IEIP712.sol\":{\"keccak256\":\"0xfdccf2b9639070803cd0e4198427fb0df3cc452ca59bd3b8a0d957a9a4254138\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7c936ac42ce89e827db905a1544397f8bdf46db34cdb6aa1b90dea42fdb4c72\",\"dweb:/ipfs/QmVgurxo1N31qZqkPBirw9Z7S9tLYmv6jSwQp8R8ur2cBk\"]},\"permit2/src/interfaces/IPermit2.sol\":{\"keccak256\":\"0xaa631cc9f53e699301d94233007110a345e6779011def484e8dd97b8fe0af771\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc0502cf19c9c18f320a3001201e89e350393b75837f6b7971de18b2de06f30d\",\"dweb:/ipfs/QmT9SfhdJ7VJNNrf94g4H5usyi7ShqWGx7Cqsz9jZTjX96\"]},\"permit2/src/interfaces/ISignatureTransfer.sol\":{\"keccak256\":\"0xe6df9966f8841dc3958ee86169c89de97e7f614c81c28b9dc947b12d732df64e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3d4eafdee7f48c3be8350a94eb6edd0bfb2af2c105df65787a77174f356c0317\",\"dweb:/ipfs/QmY1j2adeeAhNpn6cUuthemxGCdLXHTfyMh9yTKsY4mZ2d\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/ISenderGuard.sol":{"ISenderGuard":{"abi":[{"inputs":[],"name":"EthTransfer","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"inputs":[],"name":"getSender","outputs":[{"internalType":"address","name":"sender","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getSender()":"5e01eb5a"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"EthTransfer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"getSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getSender()\":{\"returns\":{\"sender\":\"The address of the sender\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"EthTransfer()\":[{\"notice\":\"Incoming ETH transfer from an address that is not WETH.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}]},\"kind\":\"user\",\"methods\":{\"getSender()\":{\"notice\":\"Get the first sender which initialized the call to Router.\"}},\"notice\":\"Interface for functions shared across all trusted routers.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/ISenderGuard.sol\":\"ISenderGuard\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/ISenderGuard.sol\":{\"keccak256\":\"0x2ec1ecf5c578aab7502f6985a03fbb79998218bdef819845d70d28a6994cff5b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a32637a45f19c29797db11eb25eb9bfda73302f280a64a9d9a4ab123db1b8e6f\",\"dweb:/ipfs/QmXGimviZ4Mr6kwgqkCwpHH5uGHVEjAcCRNvAwvoVYKi6f\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol":{"ISwapFeePercentageBounds":{"abi":[{"inputs":[],"name":"getMaximumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"maximumSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"minimumSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getMaximumSwapFeePercentage()":"654cf15d","getMinimumSwapFeePercentage()":"ce20ece7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getMaximumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maximumSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The Vault does not enforce bounds on swap fee percentages; `IBasePool` implements this interface to ensure that new pool developers think about and set these bounds according to their specific pool type. A minimum swap fee might be necessary to ensure mathematical soundness (e.g., Weighted Pools, which use the power function in the invariant). A maximum swap fee is general protection for users. With no limits at the Vault level, a pool could specify a near 100% swap fee, effectively disabling trading. Though there are some use cases, such as LVR/MEV strategies, where a very high fee makes sense. Note that the Vault does ensure that dynamic and aggregate fees are less than 100% to prevent attempting to allocate more fees than were collected by the operation. The true `MAX_FEE_PERCENTAGE` is defined in VaultTypes.sol, and is the highest value below 100% that satisfies the precision requirements.\",\"kind\":\"dev\",\"methods\":{\"getMaximumSwapFeePercentage()\":{\"returns\":{\"maximumSwapFeePercentage\":\"The maximum swap fee percentage for a pool\"}},\"getMinimumSwapFeePercentage()\":{\"returns\":{\"minimumSwapFeePercentage\":\"The minimum swap fee percentage for a pool\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Return the minimum/maximum swap fee percentages for a pool.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":\"ISwapFeePercentageBounds\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol":{"IUnbalancedLiquidityInvariantRatioBounds":{"abi":[{"inputs":[],"name":"getMaximumInvariantRatio","outputs":[{"internalType":"uint256","name":"maximumInvariantRatio","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumInvariantRatio","outputs":[{"internalType":"uint256","name":"minimumInvariantRatio","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getMaximumInvariantRatio()":"273c1adf","getMinimumInvariantRatio()":"b677fa56"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getMaximumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maximumInvariantRatio\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumInvariantRatio\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The Vault does not enforce any \\\"baseline\\\" bounds on invariant ratios, since such bounds are highly specific and dependent on the math of each pool type. Instead, the Vault reads invariant ratio bounds from the pools. `IBasePool` implements this interface to ensure that new pool developers think about and set these bounds according to their pool type's math. For instance, Balancer Weighted Pool math involves exponentiation (the `pow` function), which uses natural logarithms and a discrete Taylor series expansion to compute x^y values for the 18-decimal floating point numbers used in all Vault computations. See `LogExpMath` and `WeightedMath` for a derivation of the bounds for these pools.\",\"kind\":\"dev\",\"methods\":{\"getMaximumInvariantRatio()\":{\"returns\":{\"maximumInvariantRatio\":\"The maximum invariant ratio for a pool during unbalanced add liquidity\"}},\"getMinimumInvariantRatio()\":{\"returns\":{\"minimumInvariantRatio\":\"The minimum invariant ratio for a pool during unbalanced remove liquidity\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Return the minimum/maximum invariant ratios allowed during an unbalanced liquidity operation.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":\"IUnbalancedLiquidityInvariantRatioBounds\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol":{"IVault":{"abi":[{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"tokenAllowance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBuffersPaused","outputs":[{"internalType":"bool","name":"buffersPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"yieldFeeAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"swapParams","type":"tuple"}],"name":"computeDynamicSwapFeePercentage","outputs":[{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQueryPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"emitAuxiliaryEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"enableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"actionId","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddLiquidityCalledFlag","outputs":[{"internalType":"bool","name":"liquidityAdded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"yieldFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBptRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferAsset","outputs":[{"internalType":"address","name":"underlyingToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"underlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"wrappedBalanceRaw","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"bufferMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"liquidityOwner","type":"address"}],"name":"getBufferOwnerShares","outputs":[{"internalType":"uint256","name":"ownerShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodDuration","outputs":[{"internalType":"uint32","name":"bufferPeriodDuration","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodEndTime","outputs":[{"internalType":"uint32","name":"bufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTotalShares","outputs":[{"internalType":"uint256","name":"bufferShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getERC4626BufferAsset","outputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getHooksConfig","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumPoolTokens","outputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumPoolTokens","outputs":[{"internalType":"uint256","name":"minTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumTradeAmount","outputs":[{"internalType":"uint256","name":"minimumTradeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumWrapAmount","outputs":[{"internalType":"uint256","name":"minimumWrapAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonzeroDeltaCount","outputs":[{"internalType":"uint256","name":"nonzeroDeltaCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolConfig","outputs":[{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"poolConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"poolMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolPausedState","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"},{"internalType":"uint32","name":"poolPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"poolBufferPeriodEndTime","type":"uint32"},{"internalType":"address","name":"pauseManager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolRoleAccounts","outputs":[{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"tokenCount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenRates","outputs":[{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getReservesOf","outputs":[{"internalType":"uint256","name":"reserveAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenDelta","outputs":[{"internalType":"int256","name":"tokenDelta","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAdmin","outputs":[{"internalType":"address","name":"vaultAdmin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"vaultExtension","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultPausedState","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"},{"internalType":"uint32","name":"vaultPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"vaultBufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"isERC4626BufferInitialized","outputs":[{"internalType":"bool","name":"isBufferInitialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInRecoveryMode","outputs":[{"internalType":"bool","name":"inRecoveryMode","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInitialized","outputs":[{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolPaused","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabled","outputs":[{"internalType":"bool","name":"queryDisabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabledPermanently","outputs":[{"internalType":"bool","name":"queryDisabledPermanently","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"unlocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isVaultPaused","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"pausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quote","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quoteAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"}],"name":"removeLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"setProtocolFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"tokenTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"unpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"updateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateYieldFeePercentage","type":"uint256"}],"name":"updateAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","addLiquidityToBuffer(address,uint256,uint256,uint256,address)":"e2a92b1a","allowance(address,address,address)":"927da105","approve(address,address,uint256)":"e1f21c67","areBuffersPaused()":"55cba7fe","balanceOf(address,address)":"f7888aec","collectAggregateFees(address)":"8f4ab9ca","computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))":"4d472bdd","disableQuery()":"de1a36a6","disableQueryPermanently()":"821440f2","disableRecoveryMode(address)":"bffb78b2","emitAuxiliaryEvent(bytes32,bytes)":"c8088247","enableQuery()":"e0d55605","enableRecoveryMode(address)":"dc3f574e","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","getActionId(bytes4)":"851c1bb3","getAddLiquidityCalledFlag(address)":"ace9b89b","getAggregateSwapFeeAmount(address,address)":"85e0b999","getAggregateYieldFeeAmount(address,address)":"00fdfa13","getAuthorizer()":"aaabadc5","getBptRate(address)":"4f037ee7","getBufferAsset(address)":"0387587d","getBufferBalance(address)":"4021fe0f","getBufferMinimumTotalSupply()":"26a8a991","getBufferOwnerShares(address,address)":"9385e39a","getBufferPeriodDuration()":"20c1fb7a","getBufferPeriodEndTime()":"cd51c12f","getBufferTotalShares(address)":"f2784e07","getCurrentLiveBalances(address)":"535cfd8a","getERC4626BufferAsset(address)":"4afbaf5a","getHooksConfig(address)":"ce8630d4","getMaximumPoolTokens()":"2e42f4d5","getMinimumPoolTokens()":"a8175b27","getMinimumTradeAmount()":"e2cb0ba0","getMinimumWrapAmount()":"53956aa2","getNonzeroDeltaCount()":"db817187","getPauseWindowEndTime()":"8a8d123a","getPoolConfig(address)":"f29486a1","getPoolData(address)":"13d21cdf","getPoolMinimumTotalSupply()":"d0965a6b","getPoolPausedState(address)":"15e32046","getPoolRoleAccounts(address)":"e9ddeb26","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getPoolTokenInfo(address)":"67e0e076","getPoolTokenRates(address)":"7e361bde","getPoolTokens(address)":"ca4f2803","getProtocolFeeController()":"85f2dbd4","getReservesOf(address)":"96787092","getStaticSwapFeePercentage(address)":"b45090f9","getTokenDelta(address)":"9e825ff5","getVaultAdmin()":"1ba0ae45","getVaultExtension()":"b9a8effa","getVaultPausedState()":"85c8c015","initialize(address,address,address[],uint256[],uint256,bytes)":"ba8a2be0","initializeBuffer(address,uint256,uint256,uint256,address)":"653eb3b0","isERC4626BufferInitialized(address)":"6844846b","isPoolInRecoveryMode(address)":"be7d628a","isPoolInitialized(address)":"532cec7c","isPoolPaused(address)":"6c9bc732","isPoolRegistered(address)":"c673bdaf","isQueryDisabled()":"b4aef0ab","isQueryDisabledPermanently()":"13ef8a5d","isUnlocked()":"8380edb7","isVaultPaused()":"098401f5","pausePool(address)":"55aca1ec","pauseVault()":"9e0879c2","pauseVaultBuffers()":"e085c5a8","quote(bytes)":"edfa3568","quoteAndRevert(bytes)":"757d64b3","registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"eeec802f","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","removeLiquidityFromBuffer(address,uint256,uint256,uint256)":"ebc7955c","removeLiquidityRecovery(address,address,uint256,uint256[])":"a07d6040","sendTo(address,address,uint256)":"ae639329","setAuthorizer(address)":"058a628f","setProtocolFeeController(address)":"2d771389","setStaticSwapFeePercentage(address,uint256)":"d15126ba","settle(address,uint256)":"15afd409","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","totalSupply(address)":"e4dc2aa4","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unlock(bytes)":"48c89491","unpausePool(address)":"f21c38cd","unpauseVault()":"0b7562be","unpauseVaultBuffers()":"b9212b49","updateAggregateSwapFeePercentage(address,uint256)":"5e0b06f4","updateAggregateYieldFeePercentage(address,uint256)":"e253670a","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAllowance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"buffersPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yieldFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQueryPermanently\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"emitAuxiliaryEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"actionId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getAddLiquidityCalledFlag\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"liquidityAdded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"yieldFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityOwner\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ownerShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getERC4626BufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumTradeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumWrapAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonzeroDeltaCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"poolConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"poolPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"poolBufferPeriodEndTime\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"tokenDelta\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultAdmin\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultExtension\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"vaultPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"vaultBufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"isERC4626BufferInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isBufferInitialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"inRecoveryMode\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabledPermanently\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabledPermanently\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingInRaw\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedInRaw\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens deposited into the buffer\"}},\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"tokenAllowance\":\"Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\",\"returns\":{\"buffersPaused\":\"True if the Vault buffers are paused\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"tokenBalance\":\"Token balance of the account\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"swapFeeAmounts\":\"An array with the total swap fees collected, sorted in token registration order\",\"yieldFeeAmounts\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"dynamicSwapFeePercentage\":\"The dynamic swap fee percentage\"}},\"disableQuery()\":{\"details\":\"The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2). This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether disabling queries is completely necessary; queries can still be re-enabled after this call.\"},\"disableQueryPermanently()\":{\"details\":\"Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\"},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\"}},\"enableQuery()\":{\"details\":\"Only works if queries are not permanently disabled.\"},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\",\"params\":{\"pool\":\"The address of the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"actionId\":\"The computed actionId\"}},\"getAddLiquidityCalledFlag(address)\":{\"details\":\"Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional is the only standard way to exit a position without fees, and this flag is used to enable fees in that case. It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse than a simple swap for every pool type.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"liquidityAdded\":\"True if liquidity has been added to this pool in the current transaction Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"swapFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"yieldFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"authorizer\":\"Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingBalanceRaw\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"wrappedBalanceRaw\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"bufferMinimumTotalSupply\":\"The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"ownerShares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodDuration\":\"The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodEndTime\":\"The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"bufferShares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getERC4626BufferAsset(address)\":{\"details\":\"To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers should never call `wrapper.asset()` directly, at least without checking it against the asset registered with the Vault on initialization.\",\"params\":{\"wrappedToken\":\"The wrapped token specifying the buffer\"},\"returns\":{\"asset\":\"The underlying asset of the wrapped token\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"hooksConfig\":\"The hooks configuration as a `HooksConfig` struct\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"maxTokens\":\"The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"minTokens\":\"The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"minimumTradeAmount\":\"The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"minimumWrapAmount\":\"The minimum wrap amount in native underlying token decimals\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"nonzeroDeltaCount\":\"The current value of `_nonzeroDeltaCount`\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance. Balancer timestamps are 32 bits.\",\"returns\":{\"pauseWindowEndTime\":\"The timestamp when the Vault's pause window ends\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"poolConfig\":\"The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"poolData\":\"The `PoolData` result\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"poolMinimumTotalSupply\":\"The minimum total supply a pool can have after initialization\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period. Balancer timestamps are 32 bits.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"pauseManager\":\"The pause manager, or the zero address\",\"poolBufferPeriodEndTime\":\"The timestamp after which the Pool unpauses itself (if paused)\",\"poolPauseWindowEndTime\":\"The timestamp of the end of the Pool's pause window\",\"poolPaused\":\"True if the Pool is paused\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"roleAccounts\":\"A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"index\":\"Index corresponding to the given token in the pool's token list\",\"tokenCount\":\"Number of tokens in the pool\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"tokens\":\"List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"reserveAmount\":\"The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"swapFeePercentage\":\"The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"tokenDelta\":\"The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"vaultAdmin\":\"The address of the Vault admin\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"vaultExtension\":\"Address of the VaultExtension\"}},\"getVaultPausedState()\":{\"details\":\"Balancer timestamps are 32 bits.\",\"returns\":{\"vaultBufferPeriodEndTime\":\"The timestamp of the end of the Vault's buffer period\",\"vaultPauseWindowEndTime\":\"The timestamp of the end of the Vault's pause window\",\"vaultPaused\":\"True if the Vault is paused\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isERC4626BufferInitialized(address)\":{\"details\":\"An initialized buffer should have an asset registered in the Vault.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"isBufferInitialized\":\"True if the ERC4626 buffer is initialized\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"inRecoveryMode\":\"True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"initialized\":\"True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"poolPaused\":\"True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"registered\":\"True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"If true, queries might either be disabled temporarily or permanently.\",\"returns\":{\"queryDisabled\":\"True if query functionality is reversibly disabled\"}},\"isQueryDisabledPermanently()\":{\"details\":\"This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\",\"returns\":{\"queryDisabledPermanently\":\"True if query functionality is permanently disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"unlocked\":\"True if the Vault is unlocked, false otherwise\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `areBuffersPaused` to check the pause state of the buffers.\",\"returns\":{\"vaultPaused\":\"True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment. Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers are also paused (with `pauseVaultBuffers`).\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting buffers, and vice versa.\"},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. Balancer timestamps are 32 bits. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOut\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"tokenTotalSupply\":\"Total supply of the token\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`. If the Vault was also paused, it will remain in that state until explicitly unpaused. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateSwapFeePercentageChanged` event.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose swap fee percentage will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateYieldFeePercentageChanged` event.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose yield fee percentage will be updated\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The main Vault address.\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\"},\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"disableQuery()\":{\"notice\":\"Disables query functionality on the Vault. Can only be called by governance.\"},\"disableQueryPermanently()\":{\"notice\":\"Disables query functionality permanently on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"enableQuery()\":{\"notice\":\"Enables query functionality on the Vault. Can only be called by governance.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAddLiquidityCalledFlag(address)\":{\"notice\":\"This flag is used to detect and tax \\\"round-trip\\\" interactions (adding and removing liquidity in the same pool).\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getERC4626BufferAsset(address)\":{\"notice\":\"Gets the registered asset for a given buffer.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isERC4626BufferInitialized(address)\":{\"notice\":\"Checks if the wrapped token has an initialized buffer in the Vault.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Returns true if queries are disabled on the Vault.\"},\"isQueryDisabledPermanently()\":{\"notice\":\"Returns true if queries are disabled permanently; false if they are enabled.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"}},\"notice\":\"Composite interface for all Vault operations: swap, add/remove liquidity, and associated queries.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":\"IVault\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol":{"IVaultAdmin":{"abi":[{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBuffersPaused","outputs":[{"internalType":"bool","name":"buffersPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"},{"internalType":"uint256[]","name":"yieldFeeAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQueryPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"enableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferAsset","outputs":[{"internalType":"address","name":"underlyingToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"underlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"wrappedBalanceRaw","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"bufferMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"liquidityOwner","type":"address"}],"name":"getBufferOwnerShares","outputs":[{"internalType":"uint256","name":"ownerShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodDuration","outputs":[{"internalType":"uint32","name":"bufferPeriodDuration","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodEndTime","outputs":[{"internalType":"uint32","name":"bufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTotalShares","outputs":[{"internalType":"uint256","name":"bufferShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumPoolTokens","outputs":[{"internalType":"uint256","name":"maxTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumPoolTokens","outputs":[{"internalType":"uint256","name":"minTokens","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumTradeAmount","outputs":[{"internalType":"uint256","name":"minimumTradeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumWrapAmount","outputs":[{"internalType":"uint256","name":"minimumWrapAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"poolMinimumTotalSupply","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getVaultPausedState","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"},{"internalType":"uint32","name":"vaultPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"vaultBufferPeriodEndTime","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isVaultPaused","outputs":[{"internalType":"bool","name":"vaultPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"pausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"}],"name":"removeLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"setProtocolFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"unpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"updateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateYieldFeePercentage","type":"uint256"}],"name":"updateAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidityToBuffer(address,uint256,uint256,uint256,address)":"e2a92b1a","areBuffersPaused()":"55cba7fe","collectAggregateFees(address)":"8f4ab9ca","disableQuery()":"de1a36a6","disableQueryPermanently()":"821440f2","disableRecoveryMode(address)":"bffb78b2","enableQuery()":"e0d55605","enableRecoveryMode(address)":"dc3f574e","getBufferAsset(address)":"0387587d","getBufferBalance(address)":"4021fe0f","getBufferMinimumTotalSupply()":"26a8a991","getBufferOwnerShares(address,address)":"9385e39a","getBufferPeriodDuration()":"20c1fb7a","getBufferPeriodEndTime()":"cd51c12f","getBufferTotalShares(address)":"f2784e07","getMaximumPoolTokens()":"2e42f4d5","getMinimumPoolTokens()":"a8175b27","getMinimumTradeAmount()":"e2cb0ba0","getMinimumWrapAmount()":"53956aa2","getPauseWindowEndTime()":"8a8d123a","getPoolMinimumTotalSupply()":"d0965a6b","getVaultPausedState()":"85c8c015","initializeBuffer(address,uint256,uint256,uint256,address)":"653eb3b0","isVaultPaused()":"098401f5","pausePool(address)":"55aca1ec","pauseVault()":"9e0879c2","pauseVaultBuffers()":"e085c5a8","removeLiquidityFromBuffer(address,uint256,uint256,uint256)":"ebc7955c","setAuthorizer(address)":"058a628f","setProtocolFeeController(address)":"2d771389","setStaticSwapFeePercentage(address,uint256)":"d15126ba","unpausePool(address)":"f21c38cd","unpauseVault()":"0b7562be","unpauseVaultBuffers()":"b9212b49","updateAggregateSwapFeePercentage(address,uint256)":"5e0b06f4","updateAggregateYieldFeePercentage(address,uint256)":"e253670a","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"buffersPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"yieldFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQueryPermanently\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"underlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"liquidityOwner\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"ownerShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"bufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bufferShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumTradeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"minimumWrapAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"poolMinimumTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"vaultPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"vaultBufferPeriodEndTime\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"vaultPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"`VaultAdmin` is the Proxy extension of `VaultExtension`, and handles the least critical operations, as two delegate calls add gas to each call. Most of the permissioned calls are here.\",\"kind\":\"dev\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingInRaw\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedInRaw\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens deposited into the buffer\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\",\"returns\":{\"buffersPaused\":\"True if the Vault buffers are paused\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"swapFeeAmounts\":\"An array with the total swap fees collected, sorted in token registration order\",\"yieldFeeAmounts\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"disableQuery()\":{\"details\":\"The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2). This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether disabling queries is completely necessary; queries can still be re-enabled after this call.\"},\"disableQueryPermanently()\":{\"details\":\"Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\"},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"enableQuery()\":{\"details\":\"Only works if queries are not permanently disabled.\"},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\",\"params\":{\"pool\":\"The address of the pool\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingBalanceRaw\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"wrappedBalanceRaw\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"bufferMinimumTotalSupply\":\"The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"ownerShares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodDuration\":\"The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer timestamps are 32 bits.\",\"returns\":{\"bufferPeriodEndTime\":\"The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"bufferShares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"maxTokens\":\"The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"minTokens\":\"The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"minimumTradeAmount\":\"The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"minimumWrapAmount\":\"The minimum wrap amount in native underlying token decimals\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance. Balancer timestamps are 32 bits.\",\"returns\":{\"pauseWindowEndTime\":\"The timestamp when the Vault's pause window ends\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"poolMinimumTotalSupply\":\"The minimum total supply a pool can have after initialization\"}},\"getVaultPausedState()\":{\"details\":\"Balancer timestamps are 32 bits.\",\"returns\":{\"vaultBufferPeriodEndTime\":\"The timestamp of the end of the Vault's buffer period\",\"vaultPauseWindowEndTime\":\"The timestamp of the end of the Vault's pause window\",\"vaultPaused\":\"True if the Vault is paused\"}},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `areBuffersPaused` to check the pause state of the buffers.\",\"returns\":{\"vaultPaused\":\"True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment. Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers are also paused (with `pauseVaultBuffers`).\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting buffers, and vice versa.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`. If the Vault was also paused, it will remain in that state until explicitly unpaused. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateSwapFeePercentageChanged` event.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose swap fee percentage will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateYieldFeePercentageChanged` event.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose yield fee percentage will be updated\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"disableQuery()\":{\"notice\":\"Disables query functionality on the Vault. Can only be called by governance.\"},\"disableQueryPermanently()\":{\"notice\":\"Disables query functionality permanently on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"enableQuery()\":{\"notice\":\"Enables query functionality on the Vault. Can only be called by governance.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"notice\":\"Interface for functions defined on the `VaultAdmin` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":\"IVaultAdmin\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol":{"IVaultErrors":{"abi":[{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Errors are declared inside an interface (namespace) to improve DX with Typechain.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":\"IVaultErrors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol":{"IVaultEvents":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"Events are declared inside an interface (namespace) to improve DX with Typechain.\",\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":\"IVaultEvents\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol":{"IVaultExtension":{"abi":[{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"tokenAllowance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"tokenBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"swapParams","type":"tuple"}],"name":"computeDynamicSwapFeePercentage","outputs":[{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"emitAuxiliaryEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddLiquidityCalledFlag","outputs":[{"internalType":"bool","name":"liquidityAdded","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"yieldFeeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBptRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getERC4626BufferAsset","outputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getHooksConfig","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonzeroDeltaCount","outputs":[{"internalType":"uint256","name":"nonzeroDeltaCount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolConfig","outputs":[{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"poolConfig","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolPausedState","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"},{"internalType":"uint32","name":"poolPauseWindowEndTime","type":"uint32"},{"internalType":"uint32","name":"poolBufferPeriodEndTime","type":"uint32"},{"internalType":"address","name":"pauseManager","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolRoleAccounts","outputs":[{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenRates","outputs":[{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getReservesOf","outputs":[{"internalType":"uint256","name":"reserveAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenDelta","outputs":[{"internalType":"int256","name":"tokenDelta","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAdmin","outputs":[{"internalType":"address","name":"vaultAdmin","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"isERC4626BufferInitialized","outputs":[{"internalType":"bool","name":"isBufferInitialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInRecoveryMode","outputs":[{"internalType":"bool","name":"inRecoveryMode","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInitialized","outputs":[{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolPaused","outputs":[{"internalType":"bool","name":"poolPaused","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"registered","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabled","outputs":[{"internalType":"bool","name":"queryDisabled","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabledPermanently","outputs":[{"internalType":"bool","name":"queryDisabledPermanently","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"unlocked","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quote","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quoteAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"tokenTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address,address)":"927da105","approve(address,address,uint256)":"e1f21c67","balanceOf(address,address)":"f7888aec","computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))":"4d472bdd","emitAuxiliaryEvent(bytes32,bytes)":"c8088247","getAddLiquidityCalledFlag(address)":"ace9b89b","getAggregateSwapFeeAmount(address,address)":"85e0b999","getAggregateYieldFeeAmount(address,address)":"00fdfa13","getAuthorizer()":"aaabadc5","getBptRate(address)":"4f037ee7","getCurrentLiveBalances(address)":"535cfd8a","getERC4626BufferAsset(address)":"4afbaf5a","getHooksConfig(address)":"ce8630d4","getNonzeroDeltaCount()":"db817187","getPoolConfig(address)":"f29486a1","getPoolData(address)":"13d21cdf","getPoolPausedState(address)":"15e32046","getPoolRoleAccounts(address)":"e9ddeb26","getPoolTokenInfo(address)":"67e0e076","getPoolTokenRates(address)":"7e361bde","getPoolTokens(address)":"ca4f2803","getProtocolFeeController()":"85f2dbd4","getReservesOf(address)":"96787092","getStaticSwapFeePercentage(address)":"b45090f9","getTokenDelta(address)":"9e825ff5","getVaultAdmin()":"1ba0ae45","initialize(address,address,address[],uint256[],uint256,bytes)":"ba8a2be0","isERC4626BufferInitialized(address)":"6844846b","isPoolInRecoveryMode(address)":"be7d628a","isPoolInitialized(address)":"532cec7c","isPoolPaused(address)":"6c9bc732","isPoolRegistered(address)":"c673bdaf","isQueryDisabled()":"b4aef0ab","isQueryDisabledPermanently()":"13ef8a5d","isUnlocked()":"8380edb7","quote(bytes)":"edfa3568","quoteAndRevert(bytes)":"757d64b3","registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"eeec802f","removeLiquidityRecovery(address,address,uint256,uint256[])":"a07d6040","totalSupply(address)":"e4dc2aa4","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenAllowance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"emitAuxiliaryEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getAddLiquidityCalledFlag\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"liquidityAdded\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"yieldFeeAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getERC4626BufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonzeroDeltaCount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"poolConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"poolPauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"poolBufferPeriodEndTime\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"reserveAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"tokenDelta\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultAdmin\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"isERC4626BufferInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isBufferInitialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"inRecoveryMode\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"initialized\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"poolPaused\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"registered\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabled\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabledPermanently\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"queryDisabledPermanently\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"unlocked\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenTotalSupply\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"`VaultExtension` handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls. The main Vault contains the core code for swaps and liquidity operations.\",\"kind\":\"dev\",\"methods\":{\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"tokenAllowance\":\"Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"tokenBalance\":\"Token balance of the account\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"dynamicSwapFeePercentage\":\"The dynamic swap fee percentage\"}},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\"}},\"getAddLiquidityCalledFlag(address)\":{\"details\":\"Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional is the only standard way to exit a position without fees, and this flag is used to enable fees in that case. It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse than a simple swap for every pool type.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"liquidityAdded\":\"True if liquidity has been added to this pool in the current transaction Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"swapFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"yieldFeeAmount\":\"The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"authorizer\":\"Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getERC4626BufferAsset(address)\":{\"details\":\"To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers should never call `wrapper.asset()` directly, at least without checking it against the asset registered with the Vault on initialization.\",\"params\":{\"wrappedToken\":\"The wrapped token specifying the buffer\"},\"returns\":{\"asset\":\"The underlying asset of the wrapped token\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"hooksConfig\":\"The hooks configuration as a `HooksConfig` struct\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"nonzeroDeltaCount\":\"The current value of `_nonzeroDeltaCount`\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"poolConfig\":\"The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"poolData\":\"The `PoolData` result\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period. Balancer timestamps are 32 bits.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"pauseManager\":\"The pause manager, or the zero address\",\"poolBufferPeriodEndTime\":\"The timestamp after which the Pool unpauses itself (if paused)\",\"poolPauseWindowEndTime\":\"The timestamp of the end of the Pool's pause window\",\"poolPaused\":\"True if the Pool is paused\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"roleAccounts\":\"A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"tokens\":\"List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"protocolFeeController\":\"Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"reserveAmount\":\"The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"swapFeePercentage\":\"The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"tokenDelta\":\"The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"vaultAdmin\":\"The address of the Vault admin\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"isERC4626BufferInitialized(address)\":{\"details\":\"An initialized buffer should have an asset registered in the Vault.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"isBufferInitialized\":\"True if the ERC4626 buffer is initialized\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"inRecoveryMode\":\"True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"initialized\":\"True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"poolPaused\":\"True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"registered\":\"True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"If true, queries might either be disabled temporarily or permanently.\",\"returns\":{\"queryDisabled\":\"True if query functionality is reversibly disabled\"}},\"isQueryDisabledPermanently()\":{\"details\":\"This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\",\"returns\":{\"queryDisabledPermanently\":\"True if query functionality is permanently disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"unlocked\":\"True if the Vault is unlocked, false otherwise\"}},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. Balancer timestamps are 32 bits. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOut\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"tokenTotalSupply\":\"Total supply of the token\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"getAddLiquidityCalledFlag(address)\":{\"notice\":\"This flag is used to detect and tax \\\"round-trip\\\" interactions (adding and removing liquidity in the same pool).\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getERC4626BufferAsset(address)\":{\"notice\":\"Gets the registered asset for a given buffer.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"isERC4626BufferInitialized(address)\":{\"notice\":\"Checks if the wrapped token has an initialized buffer in the Vault.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Returns true if queries are disabled on the Vault.\"},\"isQueryDisabledPermanently()\":{\"notice\":\"Returns true if queries are disabled permanently; false if they are enabled.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"notice\":\"Interface for functions defined on the `VaultExtension` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":\"IVaultExtension\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol":{"IVaultMain":{"abi":[{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"tokenCount","type":"uint256"},{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"vaultExtension","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getVaultExtension()":"b9a8effa","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","sendTo(address,address,uint256)":"ae639329","settle(address,uint256)":"15afd409","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unlock(bytes)":"48c89491"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"vaultExtension\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These are generally \\\"critical path\\\" functions (swap, add/remove liquidity) that are in the main contract for technical or performance reasons.\",\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"index\":\"Index corresponding to the given token in the pool's token list\",\"tokenCount\":\"Number of tokens in the pool\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"vaultExtension\":\"Address of the VaultExtension\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"success\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"}},\"notice\":\"Interface for functions defined on the main Vault contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":\"IVaultMain\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-pool-utils/contracts/BasePoolAuthentication.sol":{"BasePoolAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Base contract for performing access control on external functions within pools.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Pools should use the pool factory as the disambiguator passed into the base Authentication contract. Otherwise, permissions would conflict if different pools reused function names.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-pool-utils/contracts/BasePoolAuthentication.sol\":\"BasePoolAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-pool-utils/contracts/BasePoolAuthentication.sol\":{\"keccak256\":\"0x3ce8a430e284241e1b7f07994d0e1fd57bc16d0322cad658fea4519bd6b79ee3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70e91f80e4f484b2d7beb894e873f95092384784147d77437ca0f88a0e966b80\",\"dweb:/ipfs/QmQZDVcHJU2xceLdUJnxf7mXu7zXXYpnfMVppRxTcKPoTm\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol\":{\"keccak256\":\"0x89bd8b60aa203c8aa72af6e88671af68f4407a26dd3e0541b0e4dc387fd0081e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://411eb9ee6df963198102de5ae597c1f1377b0a45be23f17d38463f2eeefa2b0a\",\"dweb:/ipfs/QmcEaMawADJEyLswG5hhvhQuTNV3XUxBVu3YZCbJzQkoJ7\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-pool-utils/contracts/BasePoolFactory.sol":{"BasePoolFactory":{"abi":[{"inputs":[],"name":"Disabled","type":"error"},{"inputs":[],"name":"IndexOutOfBounds","type":"error"},{"inputs":[],"name":"PoolPauseWindowDurationOverflow","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"StandardPoolWithCreator","type":"error"},{"anonymous":false,"inputs":[],"name":"FactoryDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreated","type":"event"},{"inputs":[],"name":"disable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDefaultLiquidityManagement","outputs":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getDefaultPoolHooksContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"constructorArgs","type":"bytes"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"getDeploymentAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNewPoolPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOriginalPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowDuration","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPools","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getPoolsInRange","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolFromFactory","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"disable()":"2f2770db","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getDefaultLiquidityManagement()":"193ad50f","getDefaultPoolHooksContract()":"ec888061","getDeploymentAddress(bytes,bytes32)":"44f6fec7","getNewPoolPauseWindowEndTime()":"db035ebc","getOriginalPauseWindowEndTime()":"e9d56e19","getPauseWindowDuration()":"78da80cb","getPoolCount()":"8eec5d70","getPools()":"673a2a1f","getPoolsInRange(uint256,uint256)":"53a72f7e","getVault()":"8d928af8","isDisabled()":"6c57f5a9","isPoolFromFactory(address)":"6634b753"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"Disabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolPauseWindowDurationOverflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StandardPoolWithCreator\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"FactoryDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"disable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDefaultLiquidityManagement\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDefaultPoolHooksContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"constructorArgs\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"getDeploymentAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNewPoolPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOriginalPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPools\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"getPoolsInRange\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"PoolCreated(address)\":{\"params\":{\"pool\":\"The address of the new pool\"}}},\"kind\":\"dev\",\"methods\":{\"disable()\":{\"details\":\"Existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getDefaultLiquidityManagement()\":{\"details\":\"Users can call this to create a structure with all false arguments, then set the ones they need to true.\",\"returns\":{\"liquidityManagement\":\"Liquidity management flags, all initialized to false\"}},\"getDeploymentAddress(bytes,bytes32)\":{\"params\":{\"constructorArgs\":\"The arguments used to create the pool\",\"salt\":\"The salt used to deploy the pool\"},\"returns\":{\"_0\":\"The predicted address of the pool, given the salt\"}},\"getNewPoolPauseWindowEndTime()\":{\"details\":\"We intend for all pools deployed by this factory to have the same pause window end time (i.e., after this date, all future pools will be unpausable). This function will return `_poolsPauseWindowEndTime` until it passes, after which it will return 0.\",\"returns\":{\"_0\":\"pauseWindowEndTime The resolved pause window end time (0 indicating it's no longer pausable)\"}},\"getOriginalPauseWindowEndTime()\":{\"returns\":{\"_0\":\"pauseWindowEndTime The end time as a timestamp\"}},\"getPauseWindowDuration()\":{\"returns\":{\"_0\":\"pauseWindowDuration The duration in seconds\"}},\"getPoolCount()\":{\"details\":\"This can then be used to \\\"paginate\\\" calls to `getPools` to control gas costs.\",\"returns\":{\"_0\":\"The number of pools deployed by this factory\"}},\"getPools()\":{\"returns\":{\"_0\":\"The list of pools deployed by this factory\"}},\"getPoolsInRange(uint256,uint256)\":{\"details\":\"`start` must be a valid index, but if `count` exceeds the total length, it will not revert, but simply stop at the end and return fewer results than requested.\",\"params\":{\"count\":\"The maximum number of pools to return\",\"start\":\"The index of the first pool to return\"},\"returns\":{\"pools\":\"The list of pools deployed by this factory, starting at `start` and returning up to `count` pools\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isDisabled()\":{\"returns\":{\"_0\":\"True if this factory was disabled\"}},\"isPoolFromFactory(address)\":{\"params\":{\"pool\":\"The pool to check\"},\"returns\":{\"_0\":\"True if `pool` was created by this factory\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"Disabled()\":[{\"notice\":\"Attempted pool creation after the factory was disabled.\"}],\"IndexOutOfBounds()\":[{\"notice\":\"A pool index is beyond the current bounds of the array.\"}],\"PoolPauseWindowDurationOverflow()\":[{\"notice\":\"The factory deployer gave a duration that would overflow the Unix timestamp.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"StandardPoolWithCreator()\":[{\"notice\":\"A pool creator was specified for a pool from a Balancer core pool type.\"}]},\"events\":{\"FactoryDisabled()\":{\"notice\":\"The factory was disabled by governance.\"},\"PoolCreated(address)\":{\"notice\":\"A pool was deployed.\"}},\"kind\":\"user\",\"methods\":{\"disable()\":{\"notice\":\"Disable the factory, preventing the creation of more pools.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getDefaultLiquidityManagement()\":{\"notice\":\"Convenience function for constructing a LiquidityManagement object.\"},\"getDefaultPoolHooksContract()\":{\"notice\":\"A common place to retrieve a default hooks contract. Currently set to address(0) (i.e. no hooks).\"},\"getDeploymentAddress(bytes,bytes32)\":{\"notice\":\"Return the address where a new pool will be deployed, based on the factory address and salt.\"},\"getNewPoolPauseWindowEndTime()\":{\"notice\":\"Returns the current pauseWindowEndTime that will be applied to Pools created by this factory.\"},\"getOriginalPauseWindowEndTime()\":{\"notice\":\"Returns the original factory pauseWindowEndTime, regardless of the current time.\"},\"getPauseWindowDuration()\":{\"notice\":\"Return the pause window duration. This is the time pools will be pausable after factory deployment.\"},\"getPoolCount()\":{\"notice\":\"Return the total number of pools deployed by this factory.\"},\"getPools()\":{\"notice\":\"Return the complete list of pools deployed by this factory.\"},\"getPoolsInRange(uint256,uint256)\":{\"notice\":\"Return a subset of the list of pools deployed by this factory.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isDisabled()\":{\"notice\":\"Check whether this factory has been disabled by governance.\"},\"isPoolFromFactory(address)\":{\"notice\":\"Check whether a pool was deployed by this factory.\"}},\"notice\":\"Base contract for Pool factories. Pools are deployed from factories to allow third parties to more easily reason about them. Unknown Pools may have arbitrary logic: being able to assert that a Pool's behavior follows certain rules (those imposed by the contracts created by the factory) is very powerful. Note that in v3, the factory alone is not enough to ensure the safety of a pool. v3 pools can have arbitrary hook contracts, rate providers, complex tokens, and configuration that significantly impacts pool behavior. Specialty factories can be designed to limit their pools range of behavior (e.g., weighted 80/20 factories where the token count and weights are fixed). Since we expect to release new versions of pool types regularly - and the blockchain is forever - versioning will become increasingly important. Governance can deprecate a factory by calling `disable`, which will permanently prevent the creation of any future pools from the factory. Use of factories is also important for security. Calls to `registerPool` or `initialize` made directly on the Vault could potentially be frontrun. In the case of registration, a DoS attack could register a pool with malicious parameters, causing the legitimate registration transaction to fail. The standard Balancer factories avoid this by deploying and registering in a single `create` function. It would also be possible to frontrun `initialize` (e.g., with unbalanced liquidity), and cause the intended initialization to fail. Like registration, initialization only happens once. The Balancer standard factories do not initialize on create, as this would be more complex (e.g., requiring token approvals), and it's very common for the deployment and funding to be performed from different accounts. Also, frontrunning `initialize` doesn't have serious consequences, beyond being a DoS. Nevertheless, this is a factor to consider when launching new pools. To avoid any possibility of frontrunning, the best practice would be to create (i.e., deploy and register) and initialize in the same transaction.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-pool-utils/contracts/BasePoolFactory.sol\":\"BasePoolFactory\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\":{\"keccak256\":\"0x6f8c558b0520faae0c4576f30225b5a97821a4cd210878a0ba10c102a2f753f3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b40aa7a5ee39fa2e297c684fd29ad45d866f1fc61cd997120a417b02a4d908aa\",\"dweb:/ipfs/QmYP5pQAF7SDLgy3aerqfnc4VwdmfQix2jcQUNL3o83BY9\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-pool-utils/contracts/BasePoolFactory.sol\":{\"keccak256\":\"0x5888b7317d6a8f91a7665922da7e1e00ee8ef47f6690d4bd7f44d37888e21848\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://00b22e2600301568c628a652fcc8f5d79145218feab59a8963dfe300763d8763\",\"dweb:/ipfs/QmNt2BgJYNL7ywhNvR42NneXDYQ7xRyTaTunfgJ2cCVQFR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol\":{\"keccak256\":\"0x89bd8b60aa203c8aa72af6e88671af68f4407a26dd3e0541b0e4dc387fd0081e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://411eb9ee6df963198102de5ae597c1f1377b0a45be23f17d38463f2eeefa2b0a\",\"dweb:/ipfs/QmcEaMawADJEyLswG5hhvhQuTNV3XUxBVu3YZCbJzQkoJ7\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/FactoryWidePauseWindow.sol\":{\"keccak256\":\"0x9594d2dc75aa8c92bb39d30cd76d3bfbb203fe17c4ae35b6f8d882ed4ac868d4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a43d706d34c9f071bed27372100fedaeb12ec4c5c3529e150c8684444c4a619\",\"dweb:/ipfs/QmYUnJ2CtjJY2XktSzamExryTNbAYjesnymMpqTvQuXUka\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x4910eb69dc3e3141803a36fb176349ae3d774f4a9811e4d486c44bf6a8e4e055\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://afec051b387a1dad075acfbe0093b443e9e5827e29f7b960af3c1b69645aa290\",\"dweb:/ipfs/QmdLcyhmHCiEyVbFsVByyjEdUn9pDTzVAPNyBpdH2YEs4Y\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/utils/Create2.sol\":{\"keccak256\":\"0x2b9807d194b92f1068d868e9587d27037264a9a067c778486f86ae21c61cbd5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://22d71f40aa38a20cf466d8647452a6e3f746353474f8c8af40f03aa8cae38420\",\"dweb:/ipfs/QmQ752Hz5av7YDK8pFojzb5qgeXQvfsdkdwkHVzaXoYAZR\"]}},\"version\":1}"}},"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol":{"PoolInfo":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"getAggregateFeePercentages","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60a03461008557601f610ab938819003918201601f19168301916001600160401b038311848410176100895780849260209460405283398101031261008557516001600160a01b038116810361008557608052604051610a1b908161009e823960805181818160ae015281816101820152818161026d01528181610528015261060d0152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080604081815260049182361015610015575f80fd5b5f3560e01c90816381fa807c146105b357508063aa6ca808146104d0578063abb1dc4414610211578063b156aa0a1461012a5763d335b0cf14610056575f80fd5b34610115575f600319360112610115578051917fb45090f9000000000000000000000000000000000000000000000000000000008352309083015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610121575f916100e8575b6020925051908152f35b90506020823d602011610119575b8161010360209383610873565b810103126101155760209151906100de565b5f80fd5b3d91506100f6565b513d5f823e3d90fd5b5034610115575f600319360112610115578051917f535cfd8a00000000000000000000000000000000000000000000000000000000835230908301525f8260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610121575f916101cd575b6101c9925051918291602083526020830190610840565b0390f35b90503d805f843e6101de8184610873565b8201916020818403126101155780519267ffffffffffffffff8411610115576101c99361020b9201610984565b906101b2565b5034610115575f6003193601126101155773ffffffffffffffffffffffffffffffffffffffff9080517f67e0e07600000000000000000000000000000000000000000000000000000000815230848201526024915f82602481877f0000000000000000000000000000000000000000000000000000000000000000165afa9283156104c6575f945f965f945f96610369575b5090916102ba8451976080895260808901906107f7565b91602091888403838a015282808b5195868152019a01945f925b8584106103015750898b03878b015289806101c98b6102f38f8d610840565b908382036060850152610840565b9091929394959a8b518051600281101561033e578252808701518416878301528801511515888201526060019a85019594936001019291906102d4565b856021857f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b94509450955093503d805f843e6103808184610873565b8201936080838603126101155782519567ffffffffffffffff9687811161011557866103ad918601610906565b936020968782015189811161011557820181601f82011215610115578051906103d5826108ee565b996103e288519b8c610873565b828b52808b0181606080950284010192858411610115578201905b838210610442575050505050848201518981116101155781610420918401610984565b986060830151908111610115576104379201610984565b93959693945f6102a3565b8482870312610115578951908582018f81118382101761049b578b52825160028110156101155782528383015190898216820361011557828592838995015261048c8d86016108e1565b8d8201528152019101906103fd565b8a60418f7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b50513d5f823e3d90fd5b5034610115575f600319360112610115578051917fca4f280300000000000000000000000000000000000000000000000000000000835230908301525f8260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610121575f9161056f575b6101c99250519182916020835260208301906107f7565b90503d805f843e6105808184610873565b8201916020818403126101155780519267ffffffffffffffff8411610115576101c9936105ad9201610906565b90610558565b83915034610115575f600319360112610115577ff29486a100000000000000000000000000000000000000000000000000000000815230828201526101a0808260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9283156107ed575f93610655575b50505060608282015191015182519182526020820152f35b9091809350823d84116107e6575b61066d8183610873565b8101039180831261011557845193610140938486019367ffffffffffffffff91878610838711176107ba57608013610115576101c087019182118583101761078e575086526106bb816108e1565b83526106c9602082016108e1565b9261016093848701526106dd8783016108e1565b9261018093848801526106f2606084016108e1565b9087015285526080810151602086015260a08101518686015260c0810151606086015260e081015164ffffffffff811681036101155760808601526101008082015163ffffffff8116810361011557610782946107789160a089015261076c610120976107608987016108e1565b60c08b015285016108e1565b60e089015283016108e1565b90860152016108e1565b9082015282808061063d565b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b6041827f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b503d610663565b84513d5f823e3d90fd5b9081518082526020808093019301915f5b828110610816575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101610808565b9081518082526020808093019301915f5b82811061085f575050505090565b835185529381019392810192600101610851565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176108b457604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5190811515820361011557565b67ffffffffffffffff81116108b45760051b60200190565b9080601f8301121561011557815190602091610921816108ee565b9361092f6040519586610873565b81855260208086019260051b82010192831161011557602001905b828210610958575050505090565b815173ffffffffffffffffffffffffffffffffffffffff8116810361011557815290830190830161094a565b9080601f830112156101155781519060209161099f816108ee565b936109ad6040519586610873565b81855260208086019260051b82010192831161011557602001905b8282106109d6575050505090565b815181529083019083016109c856fea264697066735822122022db32edeb0c3095a8ed536cfb86e2457f03e0e5f9d4df2aaeffa3d6869fcadb64736f6c634300081b0033","opcodes":"PUSH1 0xA0 CALLVALUE PUSH2 0x85 JUMPI PUSH1 0x1F PUSH2 0xAB9 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x89 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x85 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x85 JUMPI PUSH1 0x80 MSTORE PUSH1 0x40 MLOAD PUSH2 0xA1B SWAP1 DUP2 PUSH2 0x9E DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH1 0xAE ADD MSTORE DUP2 DUP2 PUSH2 0x182 ADD MSTORE DUP2 DUP2 PUSH2 0x26D ADD MSTORE DUP2 DUP2 PUSH2 0x528 ADD MSTORE PUSH2 0x60D ADD MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x81FA807C EQ PUSH2 0x5B3 JUMPI POP DUP1 PUSH4 0xAA6CA808 EQ PUSH2 0x4D0 JUMPI DUP1 PUSH4 0xABB1DC44 EQ PUSH2 0x211 JUMPI DUP1 PUSH4 0xB156AA0A EQ PUSH2 0x12A JUMPI PUSH4 0xD335B0CF EQ PUSH2 0x56 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x115 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115 JUMPI DUP1 MLOAD SWAP2 PUSH32 0xB45090F900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x121 JUMPI PUSH0 SWAP2 PUSH2 0xE8 JUMPI JUMPDEST PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x119 JUMPI JUMPDEST DUP2 PUSH2 0x103 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x873 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x115 JUMPI PUSH1 0x20 SWAP2 MLOAD SWAP1 PUSH2 0xDE JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xF6 JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x115 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115 JUMPI DUP1 MLOAD SWAP2 PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH0 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x121 JUMPI PUSH0 SWAP2 PUSH2 0x1CD JUMPI JUMPDEST PUSH2 0x1C9 SWAP3 POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x840 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST SWAP1 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x1DE DUP2 DUP5 PUSH2 0x873 JUMP JUMPDEST DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP5 SUB SLT PUSH2 0x115 JUMPI DUP1 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0x115 JUMPI PUSH2 0x1C9 SWAP4 PUSH2 0x20B SWAP3 ADD PUSH2 0x984 JUMP JUMPDEST SWAP1 PUSH2 0x1B2 JUMP JUMPDEST POP CALLVALUE PUSH2 0x115 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP1 MLOAD PUSH32 0x67E0E07600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP5 DUP3 ADD MSTORE PUSH1 0x24 SWAP2 PUSH0 DUP3 PUSH1 0x24 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x4C6 JUMPI PUSH0 SWAP5 PUSH0 SWAP7 PUSH0 SWAP5 PUSH0 SWAP7 PUSH2 0x369 JUMPI JUMPDEST POP SWAP1 SWAP2 PUSH2 0x2BA DUP5 MLOAD SWAP8 PUSH1 0x80 DUP10 MSTORE PUSH1 0x80 DUP10 ADD SWAP1 PUSH2 0x7F7 JUMP JUMPDEST SWAP2 PUSH1 0x20 SWAP2 DUP9 DUP5 SUB DUP4 DUP11 ADD MSTORE DUP3 DUP1 DUP12 MLOAD SWAP6 DUP7 DUP2 MSTORE ADD SWAP11 ADD SWAP5 PUSH0 SWAP3 JUMPDEST DUP6 DUP5 LT PUSH2 0x301 JUMPI POP DUP10 DUP12 SUB DUP8 DUP12 ADD MSTORE DUP10 DUP1 PUSH2 0x1C9 DUP12 PUSH2 0x2F3 DUP16 DUP14 PUSH2 0x840 JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x840 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP11 DUP12 MLOAD DUP1 MLOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x33E JUMPI DUP3 MSTORE DUP1 DUP8 ADD MLOAD DUP5 AND DUP8 DUP4 ADD MSTORE DUP9 ADD MLOAD ISZERO ISZERO DUP9 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP11 DUP6 ADD SWAP6 SWAP5 SWAP4 PUSH1 0x1 ADD SWAP3 SWAP2 SWAP1 PUSH2 0x2D4 JUMP JUMPDEST DUP6 PUSH1 0x21 DUP6 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST SWAP5 POP SWAP5 POP SWAP6 POP SWAP4 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x380 DUP2 DUP5 PUSH2 0x873 JUMP JUMPDEST DUP3 ADD SWAP4 PUSH1 0x80 DUP4 DUP7 SUB SLT PUSH2 0x115 JUMPI DUP3 MLOAD SWAP6 PUSH8 0xFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP2 GT PUSH2 0x115 JUMPI DUP7 PUSH2 0x3AD SWAP2 DUP7 ADD PUSH2 0x906 JUMP JUMPDEST SWAP4 PUSH1 0x20 SWAP7 DUP8 DUP3 ADD MLOAD DUP10 DUP2 GT PUSH2 0x115 JUMPI DUP3 ADD DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x115 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x3D5 DUP3 PUSH2 0x8EE JUMP JUMPDEST SWAP10 PUSH2 0x3E2 DUP9 MLOAD SWAP12 DUP13 PUSH2 0x873 JUMP JUMPDEST DUP3 DUP12 MSTORE DUP1 DUP12 ADD DUP2 PUSH1 0x60 DUP1 SWAP6 MUL DUP5 ADD ADD SWAP3 DUP6 DUP5 GT PUSH2 0x115 JUMPI DUP3 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x442 JUMPI POP POP POP POP POP DUP5 DUP3 ADD MLOAD DUP10 DUP2 GT PUSH2 0x115 JUMPI DUP2 PUSH2 0x420 SWAP2 DUP5 ADD PUSH2 0x984 JUMP JUMPDEST SWAP9 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x115 JUMPI PUSH2 0x437 SWAP3 ADD PUSH2 0x984 JUMP JUMPDEST SWAP4 SWAP6 SWAP7 SWAP4 SWAP5 PUSH0 PUSH2 0x2A3 JUMP JUMPDEST DUP5 DUP3 DUP8 SUB SLT PUSH2 0x115 JUMPI DUP10 MLOAD SWAP1 DUP6 DUP3 ADD DUP16 DUP2 GT DUP4 DUP3 LT OR PUSH2 0x49B JUMPI DUP12 MSTORE DUP3 MLOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x115 JUMPI DUP3 MSTORE DUP4 DUP4 ADD MLOAD SWAP1 DUP10 DUP3 AND DUP3 SUB PUSH2 0x115 JUMPI DUP3 DUP6 SWAP3 DUP4 DUP10 SWAP6 ADD MSTORE PUSH2 0x48C DUP14 DUP7 ADD PUSH2 0x8E1 JUMP JUMPDEST DUP14 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x3FD JUMP JUMPDEST DUP11 PUSH1 0x41 DUP16 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x115 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115 JUMPI DUP1 MLOAD SWAP2 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH0 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x121 JUMPI PUSH0 SWAP2 PUSH2 0x56F JUMPI JUMPDEST PUSH2 0x1C9 SWAP3 POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x7F7 JUMP JUMPDEST SWAP1 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x580 DUP2 DUP5 PUSH2 0x873 JUMP JUMPDEST DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP5 SUB SLT PUSH2 0x115 JUMPI DUP1 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0x115 JUMPI PUSH2 0x1C9 SWAP4 PUSH2 0x5AD SWAP3 ADD PUSH2 0x906 JUMP JUMPDEST SWAP1 PUSH2 0x558 JUMP JUMPDEST DUP4 SWAP2 POP CALLVALUE PUSH2 0x115 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115 JUMPI PUSH32 0xF29486A100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE PUSH2 0x1A0 DUP1 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x7ED JUMPI PUSH0 SWAP4 PUSH2 0x655 JUMPI JUMPDEST POP POP POP PUSH1 0x60 DUP3 DUP3 ADD MLOAD SWAP2 ADD MLOAD DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST SWAP1 SWAP2 DUP1 SWAP4 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x7E6 JUMPI JUMPDEST PUSH2 0x66D DUP2 DUP4 PUSH2 0x873 JUMP JUMPDEST DUP2 ADD SUB SWAP2 DUP1 DUP4 SLT PUSH2 0x115 JUMPI DUP5 MLOAD SWAP4 PUSH2 0x140 SWAP4 DUP5 DUP7 ADD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP8 DUP7 LT DUP4 DUP8 GT OR PUSH2 0x7BA JUMPI PUSH1 0x80 SGT PUSH2 0x115 JUMPI PUSH2 0x1C0 DUP8 ADD SWAP2 DUP3 GT DUP6 DUP4 LT OR PUSH2 0x78E JUMPI POP DUP7 MSTORE PUSH2 0x6BB DUP2 PUSH2 0x8E1 JUMP JUMPDEST DUP4 MSTORE PUSH2 0x6C9 PUSH1 0x20 DUP3 ADD PUSH2 0x8E1 JUMP JUMPDEST SWAP3 PUSH2 0x160 SWAP4 DUP5 DUP8 ADD MSTORE PUSH2 0x6DD DUP8 DUP4 ADD PUSH2 0x8E1 JUMP JUMPDEST SWAP3 PUSH2 0x180 SWAP4 DUP5 DUP9 ADD MSTORE PUSH2 0x6F2 PUSH1 0x60 DUP5 ADD PUSH2 0x8E1 JUMP JUMPDEST SWAP1 DUP8 ADD MSTORE DUP6 MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD DUP7 DUP7 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x115 JUMPI PUSH1 0x80 DUP7 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x115 JUMPI PUSH2 0x782 SWAP5 PUSH2 0x778 SWAP2 PUSH1 0xA0 DUP10 ADD MSTORE PUSH2 0x76C PUSH2 0x120 SWAP8 PUSH2 0x760 DUP10 DUP8 ADD PUSH2 0x8E1 JUMP JUMPDEST PUSH1 0xC0 DUP12 ADD MSTORE DUP6 ADD PUSH2 0x8E1 JUMP JUMPDEST PUSH1 0xE0 DUP10 ADD MSTORE DUP4 ADD PUSH2 0x8E1 JUMP JUMPDEST SWAP1 DUP7 ADD MSTORE ADD PUSH2 0x8E1 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE DUP3 DUP1 DUP1 PUSH2 0x63D JUMP JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP3 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x663 JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x816 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x808 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x85F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x851 JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x8B4 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x115 JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x8B4 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x115 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x921 DUP2 PUSH2 0x8EE JUMP JUMPDEST SWAP4 PUSH2 0x92F PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x873 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x115 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x958 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x115 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x94A JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x115 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x99F DUP2 PUSH2 0x8EE JUMP JUMPDEST SWAP4 PUSH2 0x9AD PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x873 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x115 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x9D6 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x9C8 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x22 0xDB ORIGIN 0xED 0xEB 0xC ADDRESS SWAP6 0xA8 0xED MSTORE8 PUSH13 0xFB86E2457F03E0E5F9D4DF2AAE SELFDESTRUCT LOG3 0xD6 DUP7 SWAP16 0xCA 0xDB PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"639:1471:36:-:0;;;;;;;;;;;;;-1:-1:-1;;639:1471:36;;;;-1:-1:-1;;;;;639:1471:36;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;639:1471:36;;;;;;750:14;;639:1471;;;;;;;;750:14;639:1471;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;639:1471:36;;;;;;-1:-1:-1;639:1471:36;;;;;-1:-1:-1;639:1471:36"},"deployedBytecode":{"functionDebugData":{"abi_decode_array_contract_IERC20_dyn_fromMemory":{"entryPoint":2310,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn_fromMemory":{"entryPoint":2436,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":2273,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_array_contract_IERC20_dyn":{"entryPoint":2039,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":2112,"id":null,"parameterSlots":2,"returnSlots":1},"array_allocation_size_array_contract_IERC20_dyn":{"entryPoint":2286,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":2163,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"5300":[{"length":32,"start":174},{"length":32,"start":386},{"length":32,"start":621},{"length":32,"start":1320},{"length":32,"start":1549}]},"linkReferences":{},"object":"6080604081815260049182361015610015575f80fd5b5f3560e01c90816381fa807c146105b357508063aa6ca808146104d0578063abb1dc4414610211578063b156aa0a1461012a5763d335b0cf14610056575f80fd5b34610115575f600319360112610115578051917fb45090f9000000000000000000000000000000000000000000000000000000008352309083015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610121575f916100e8575b6020925051908152f35b90506020823d602011610119575b8161010360209383610873565b810103126101155760209151906100de565b5f80fd5b3d91506100f6565b513d5f823e3d90fd5b5034610115575f600319360112610115578051917f535cfd8a00000000000000000000000000000000000000000000000000000000835230908301525f8260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610121575f916101cd575b6101c9925051918291602083526020830190610840565b0390f35b90503d805f843e6101de8184610873565b8201916020818403126101155780519267ffffffffffffffff8411610115576101c99361020b9201610984565b906101b2565b5034610115575f6003193601126101155773ffffffffffffffffffffffffffffffffffffffff9080517f67e0e07600000000000000000000000000000000000000000000000000000000815230848201526024915f82602481877f0000000000000000000000000000000000000000000000000000000000000000165afa9283156104c6575f945f965f945f96610369575b5090916102ba8451976080895260808901906107f7565b91602091888403838a015282808b5195868152019a01945f925b8584106103015750898b03878b015289806101c98b6102f38f8d610840565b908382036060850152610840565b9091929394959a8b518051600281101561033e578252808701518416878301528801511515888201526060019a85019594936001019291906102d4565b856021857f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b94509450955093503d805f843e6103808184610873565b8201936080838603126101155782519567ffffffffffffffff9687811161011557866103ad918601610906565b936020968782015189811161011557820181601f82011215610115578051906103d5826108ee565b996103e288519b8c610873565b828b52808b0181606080950284010192858411610115578201905b838210610442575050505050848201518981116101155781610420918401610984565b986060830151908111610115576104379201610984565b93959693945f6102a3565b8482870312610115578951908582018f81118382101761049b578b52825160028110156101155782528383015190898216820361011557828592838995015261048c8d86016108e1565b8d8201528152019101906103fd565b8a60418f7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b50513d5f823e3d90fd5b5034610115575f600319360112610115578051917fca4f280300000000000000000000000000000000000000000000000000000000835230908301525f8260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610121575f9161056f575b6101c99250519182916020835260208301906107f7565b90503d805f843e6105808184610873565b8201916020818403126101155780519267ffffffffffffffff8411610115576101c9936105ad9201610906565b90610558565b83915034610115575f600319360112610115577ff29486a100000000000000000000000000000000000000000000000000000000815230828201526101a0808260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9283156107ed575f93610655575b50505060608282015191015182519182526020820152f35b9091809350823d84116107e6575b61066d8183610873565b8101039180831261011557845193610140938486019367ffffffffffffffff91878610838711176107ba57608013610115576101c087019182118583101761078e575086526106bb816108e1565b83526106c9602082016108e1565b9261016093848701526106dd8783016108e1565b9261018093848801526106f2606084016108e1565b9087015285526080810151602086015260a08101518686015260c0810151606086015260e081015164ffffffffff811681036101155760808601526101008082015163ffffffff8116810361011557610782946107789160a089015261076c610120976107608987016108e1565b60c08b015285016108e1565b60e089015283016108e1565b90860152016108e1565b9082015282808061063d565b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b6041827f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b503d610663565b84513d5f823e3d90fd5b9081518082526020808093019301915f5b828110610816575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101610808565b9081518082526020808093019301915f5b82811061085f575050505090565b835185529381019392810192600101610851565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176108b457604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5190811515820361011557565b67ffffffffffffffff81116108b45760051b60200190565b9080601f8301121561011557815190602091610921816108ee565b9361092f6040519586610873565b81855260208086019260051b82010192831161011557602001905b828210610958575050505090565b815173ffffffffffffffffffffffffffffffffffffffff8116810361011557815290830190830161094a565b9080601f830112156101155781519060209161099f816108ee565b936109ad6040519586610873565b81855260208086019260051b82010192831161011557602001905b8282106109d6575050505090565b815181529083019083016109c856fea264697066735822122022db32edeb0c3095a8ed536cfb86e2457f03e0e5f9d4df2aaeffa3d6869fcadb64736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x81FA807C EQ PUSH2 0x5B3 JUMPI POP DUP1 PUSH4 0xAA6CA808 EQ PUSH2 0x4D0 JUMPI DUP1 PUSH4 0xABB1DC44 EQ PUSH2 0x211 JUMPI DUP1 PUSH4 0xB156AA0A EQ PUSH2 0x12A JUMPI PUSH4 0xD335B0CF EQ PUSH2 0x56 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x115 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115 JUMPI DUP1 MLOAD SWAP2 PUSH32 0xB45090F900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x121 JUMPI PUSH0 SWAP2 PUSH2 0xE8 JUMPI JUMPDEST PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x119 JUMPI JUMPDEST DUP2 PUSH2 0x103 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x873 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x115 JUMPI PUSH1 0x20 SWAP2 MLOAD SWAP1 PUSH2 0xDE JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xF6 JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x115 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115 JUMPI DUP1 MLOAD SWAP2 PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH0 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x121 JUMPI PUSH0 SWAP2 PUSH2 0x1CD JUMPI JUMPDEST PUSH2 0x1C9 SWAP3 POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x840 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST SWAP1 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x1DE DUP2 DUP5 PUSH2 0x873 JUMP JUMPDEST DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP5 SUB SLT PUSH2 0x115 JUMPI DUP1 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0x115 JUMPI PUSH2 0x1C9 SWAP4 PUSH2 0x20B SWAP3 ADD PUSH2 0x984 JUMP JUMPDEST SWAP1 PUSH2 0x1B2 JUMP JUMPDEST POP CALLVALUE PUSH2 0x115 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP1 MLOAD PUSH32 0x67E0E07600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP5 DUP3 ADD MSTORE PUSH1 0x24 SWAP2 PUSH0 DUP3 PUSH1 0x24 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x4C6 JUMPI PUSH0 SWAP5 PUSH0 SWAP7 PUSH0 SWAP5 PUSH0 SWAP7 PUSH2 0x369 JUMPI JUMPDEST POP SWAP1 SWAP2 PUSH2 0x2BA DUP5 MLOAD SWAP8 PUSH1 0x80 DUP10 MSTORE PUSH1 0x80 DUP10 ADD SWAP1 PUSH2 0x7F7 JUMP JUMPDEST SWAP2 PUSH1 0x20 SWAP2 DUP9 DUP5 SUB DUP4 DUP11 ADD MSTORE DUP3 DUP1 DUP12 MLOAD SWAP6 DUP7 DUP2 MSTORE ADD SWAP11 ADD SWAP5 PUSH0 SWAP3 JUMPDEST DUP6 DUP5 LT PUSH2 0x301 JUMPI POP DUP10 DUP12 SUB DUP8 DUP12 ADD MSTORE DUP10 DUP1 PUSH2 0x1C9 DUP12 PUSH2 0x2F3 DUP16 DUP14 PUSH2 0x840 JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x840 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 SWAP11 DUP12 MLOAD DUP1 MLOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x33E JUMPI DUP3 MSTORE DUP1 DUP8 ADD MLOAD DUP5 AND DUP8 DUP4 ADD MSTORE DUP9 ADD MLOAD ISZERO ISZERO DUP9 DUP3 ADD MSTORE PUSH1 0x60 ADD SWAP11 DUP6 ADD SWAP6 SWAP5 SWAP4 PUSH1 0x1 ADD SWAP3 SWAP2 SWAP1 PUSH2 0x2D4 JUMP JUMPDEST DUP6 PUSH1 0x21 DUP6 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST SWAP5 POP SWAP5 POP SWAP6 POP SWAP4 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x380 DUP2 DUP5 PUSH2 0x873 JUMP JUMPDEST DUP3 ADD SWAP4 PUSH1 0x80 DUP4 DUP7 SUB SLT PUSH2 0x115 JUMPI DUP3 MLOAD SWAP6 PUSH8 0xFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP2 GT PUSH2 0x115 JUMPI DUP7 PUSH2 0x3AD SWAP2 DUP7 ADD PUSH2 0x906 JUMP JUMPDEST SWAP4 PUSH1 0x20 SWAP7 DUP8 DUP3 ADD MLOAD DUP10 DUP2 GT PUSH2 0x115 JUMPI DUP3 ADD DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x115 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x3D5 DUP3 PUSH2 0x8EE JUMP JUMPDEST SWAP10 PUSH2 0x3E2 DUP9 MLOAD SWAP12 DUP13 PUSH2 0x873 JUMP JUMPDEST DUP3 DUP12 MSTORE DUP1 DUP12 ADD DUP2 PUSH1 0x60 DUP1 SWAP6 MUL DUP5 ADD ADD SWAP3 DUP6 DUP5 GT PUSH2 0x115 JUMPI DUP3 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x442 JUMPI POP POP POP POP POP DUP5 DUP3 ADD MLOAD DUP10 DUP2 GT PUSH2 0x115 JUMPI DUP2 PUSH2 0x420 SWAP2 DUP5 ADD PUSH2 0x984 JUMP JUMPDEST SWAP9 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x115 JUMPI PUSH2 0x437 SWAP3 ADD PUSH2 0x984 JUMP JUMPDEST SWAP4 SWAP6 SWAP7 SWAP4 SWAP5 PUSH0 PUSH2 0x2A3 JUMP JUMPDEST DUP5 DUP3 DUP8 SUB SLT PUSH2 0x115 JUMPI DUP10 MLOAD SWAP1 DUP6 DUP3 ADD DUP16 DUP2 GT DUP4 DUP3 LT OR PUSH2 0x49B JUMPI DUP12 MSTORE DUP3 MLOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x115 JUMPI DUP3 MSTORE DUP4 DUP4 ADD MLOAD SWAP1 DUP10 DUP3 AND DUP3 SUB PUSH2 0x115 JUMPI DUP3 DUP6 SWAP3 DUP4 DUP10 SWAP6 ADD MSTORE PUSH2 0x48C DUP14 DUP7 ADD PUSH2 0x8E1 JUMP JUMPDEST DUP14 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x3FD JUMP JUMPDEST DUP11 PUSH1 0x41 DUP16 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x115 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115 JUMPI DUP1 MLOAD SWAP2 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH0 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x121 JUMPI PUSH0 SWAP2 PUSH2 0x56F JUMPI JUMPDEST PUSH2 0x1C9 SWAP3 POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x7F7 JUMP JUMPDEST SWAP1 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x580 DUP2 DUP5 PUSH2 0x873 JUMP JUMPDEST DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP5 SUB SLT PUSH2 0x115 JUMPI DUP1 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0x115 JUMPI PUSH2 0x1C9 SWAP4 PUSH2 0x5AD SWAP3 ADD PUSH2 0x906 JUMP JUMPDEST SWAP1 PUSH2 0x558 JUMP JUMPDEST DUP4 SWAP2 POP CALLVALUE PUSH2 0x115 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115 JUMPI PUSH32 0xF29486A100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE PUSH2 0x1A0 DUP1 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x7ED JUMPI PUSH0 SWAP4 PUSH2 0x655 JUMPI JUMPDEST POP POP POP PUSH1 0x60 DUP3 DUP3 ADD MLOAD SWAP2 ADD MLOAD DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST SWAP1 SWAP2 DUP1 SWAP4 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x7E6 JUMPI JUMPDEST PUSH2 0x66D DUP2 DUP4 PUSH2 0x873 JUMP JUMPDEST DUP2 ADD SUB SWAP2 DUP1 DUP4 SLT PUSH2 0x115 JUMPI DUP5 MLOAD SWAP4 PUSH2 0x140 SWAP4 DUP5 DUP7 ADD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP8 DUP7 LT DUP4 DUP8 GT OR PUSH2 0x7BA JUMPI PUSH1 0x80 SGT PUSH2 0x115 JUMPI PUSH2 0x1C0 DUP8 ADD SWAP2 DUP3 GT DUP6 DUP4 LT OR PUSH2 0x78E JUMPI POP DUP7 MSTORE PUSH2 0x6BB DUP2 PUSH2 0x8E1 JUMP JUMPDEST DUP4 MSTORE PUSH2 0x6C9 PUSH1 0x20 DUP3 ADD PUSH2 0x8E1 JUMP JUMPDEST SWAP3 PUSH2 0x160 SWAP4 DUP5 DUP8 ADD MSTORE PUSH2 0x6DD DUP8 DUP4 ADD PUSH2 0x8E1 JUMP JUMPDEST SWAP3 PUSH2 0x180 SWAP4 DUP5 DUP9 ADD MSTORE PUSH2 0x6F2 PUSH1 0x60 DUP5 ADD PUSH2 0x8E1 JUMP JUMPDEST SWAP1 DUP8 ADD MSTORE DUP6 MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD DUP7 DUP7 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x115 JUMPI PUSH1 0x80 DUP7 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x115 JUMPI PUSH2 0x782 SWAP5 PUSH2 0x778 SWAP2 PUSH1 0xA0 DUP10 ADD MSTORE PUSH2 0x76C PUSH2 0x120 SWAP8 PUSH2 0x760 DUP10 DUP8 ADD PUSH2 0x8E1 JUMP JUMPDEST PUSH1 0xC0 DUP12 ADD MSTORE DUP6 ADD PUSH2 0x8E1 JUMP JUMPDEST PUSH1 0xE0 DUP10 ADD MSTORE DUP4 ADD PUSH2 0x8E1 JUMP JUMPDEST SWAP1 DUP7 ADD MSTORE ADD PUSH2 0x8E1 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE DUP3 DUP1 DUP1 PUSH2 0x63D JUMP JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP3 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x663 JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x816 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x808 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x85F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x851 JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x8B4 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x115 JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x8B4 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x115 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x921 DUP2 PUSH2 0x8EE JUMP JUMPDEST SWAP4 PUSH2 0x92F PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x873 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x115 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x958 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x115 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x94A JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x115 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x99F DUP2 PUSH2 0x8EE JUMP JUMPDEST SWAP4 PUSH2 0x9AD PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x873 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x115 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x9D6 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x9C8 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x22 0xDB ORIGIN 0xED 0xEB 0xC ADDRESS SWAP6 0xA8 0xED MSTORE8 PUSH13 0xFB86E2457F03E0E5F9D4DF2AAE SELFDESTRUCT LOG3 0xD6 DUP7 SWAP16 0xCA 0xDB PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"639:1471:36:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;639:1471:36;;;;;;;1615:50;639:1471;1615:50;;1658:4;1615:50;;;639:1471;1615:50;:6;639:1471;1615:6;639:1471;1615:6;639:1471;1615:50;;;;;;;639:1471;1615:50;;;639:1471;1615:50;639:1471;;;;;;;1615:50;;;;;;;;;;;;;;;;;:::i;:::-;;;639:1471;;;;1615:50;639:1471;;1615:50;;;639:1471;;;;1615:50;;;-1:-1:-1;1615:50:36;;;639:1471;;;;;;;;;;;;;;-1:-1:-1;;639:1471:36;;;;;;;1441:44;639:1471;1441:44;;1479:4;1441:44;;;639:1471;;1441:6;639:1471;1441:6;639:1471;1441:6;639:1471;1441:44;;;;;;;639:1471;1441:44;;;639:1471;;;;;;;;;;;;;;;;:::i;:::-;;;;1441:44;;;;;639:1471;1441:44;;;;;;:::i;:::-;;;639:1471;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1441:44;;;639:1471;;;;;;-1:-1:-1;;639:1471:36;;;;;;;;;;1247:38;;1279:4;1247:38;;;639:1471;;1247:6;639:1471;1247:6;639:1471;1247:6;;;639:1471;1247:38;;;;;;;639:1471;;;;;;;1247:38;;;639:1471;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;639:1471:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1247:38;;;;;;;;;;;639:1471;1247:38;;;;;;:::i;:::-;;;639:1471;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;1247:38;;;;;;;;639:1471;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1247:38;639:1471;;;;;;;;;;;;;;;-1:-1:-1;;639:1471:36;;;;;;;892:35;639:1471;892:35;;921:4;892:35;;;639:1471;;892:6;639:1471;892:6;639:1471;892:6;639:1471;892:35;;;;;;;639:1471;892:35;;;639:1471;;;;;;;;;;;;;;;;:::i;892:35::-;;;;;639:1471;892:35;;;;;;:::i;:::-;;;639:1471;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;892:35;;;639:1471;;;;;;;;-1:-1:-1;;639:1471:36;;;;;;1911:35;;1940:4;1911:35;;;639:1471;1911:35;:6;;639:1471;1911:6;639:1471;1911:6;639:1471;1911:35;;;;;;;639:1471;1911:35;;;639:1471;1986:37;;;2063:38;1986:37;;;639:1471;2063:38;;639:1471;;;;;;;;;;;1911:35;;;;;;;;;;;;;;;;;:::i;:::-;;;639:1471;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;639:1471:36;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;1911:35;;;;;639:1471;;;;;;;;;;;;;;;;;;;;1911:35;;;;;;639:1471;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;639:1471:36;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;639:1471:36;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;"},"methodIdentifiers":{"getAggregateFeePercentages()":"81fa807c","getCurrentLiveBalances()":"b156aa0a","getStaticSwapFeePercentage()":"d335b0cf","getTokenInfo()":"abb1dc44","getTokens()":"aa6ca808"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"getAggregateFeePercentages\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Balancer standard pools inherit from this optional interface to provide a standard off-chain interface for commonly requested data.\",\"kind\":\"dev\",\"methods\":{\"getAggregateFeePercentages()\":{\"details\":\"These are determined by the current protocol and pool creator fees, set in the `ProtocolFeeController`.\",\"returns\":{\"aggregateSwapFeePercentage\":\"The aggregate percentage fee applied to swaps\",\"aggregateYieldFeePercentage\":\"The aggregate percentage fee applied to yield\"}},\"getCurrentLiveBalances()\":{\"details\":\"Note that live balances will not necessarily be accurate if the pool is in Recovery Mode. Withdrawals in Recovery Mode do not make external calls (including those necessary for updating live balances), so if there are withdrawals, raw and live balances will be out of sync until Recovery Mode is disabled.\",\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getStaticSwapFeePercentage()\":{\"returns\":{\"_0\":\"18-decimal FP value of the static swap fee percentage\"}},\"getTokenInfo()\":{\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"Pool tokens, sorted in token registration order\"}},\"getTokens()\":{\"returns\":{\"tokens\":\"List of tokens in the pool, sorted in registration order\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getAggregateFeePercentages()\":{\"notice\":\"Gets the aggregate swap and yield fee percentages for a pool.\"},\"getCurrentLiveBalances()\":{\"notice\":\"Gets the current live balances of the pool as fixed point, 18-decimal numbers.\"},\"getStaticSwapFeePercentage()\":{\"notice\":\"Fetches the static swap fee percentage for the pool.\"},\"getTokenInfo()\":{\"notice\":\"Gets the raw data for the pool: tokens, token info, raw balances, and last live balances.\"},\"getTokens()\":{\"notice\":\"Gets the tokens registered in the pool.\"}},\"notice\":\"Standard implementation of the `IPoolInfo` interface.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol\":\"PoolInfo\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol\":{\"keccak256\":\"0xa7adbaf80bc9cfa44e41776f632b5d7cb2c02c562a124c0e4cb17f06c4a54db3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e4fdf59a7f3dc3b7d6bb6f466e4a0a6263b66c0fc12492baf06ec8c6fdcc2398\",\"dweb:/ipfs/QmWxLpicLjGdgGQ8GjuN9YfDyVapYWwzdgET86ucs9hmFa\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol\":{\"keccak256\":\"0xa97e2a0fd95d78dcecf67fd8c554ced63bbd6da372b6f8b12f16ad526b6ec608\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d98ad2022f9e3653fd63daca8c0725c7ccbd4f63d0d27c413e90669ce7284a96\",\"dweb:/ipfs/QmZ62RpJj3qSUrrdVD3H72qEszTUuvGkFLSBXAKMhBn5nX\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol":{"Authentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract is used via the `authenticate` modifier (or the `_authenticateCaller` function), which can be applied to external functions to make them only callable by authorized accounts. Derived contracts must implement the `_canPerform` function, which holds the actual access control logic.\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"The main purpose of the `actionIdDisambiguator` is to prevent accidental function selector collisions in multi-contract systems. There are two main uses for it: - if the contract is a singleton, any unique identifier can be used to make the associated action identifiers unique. The contract's own address is a good option. - if the contract belongs to a family that shares action identifiers for the same functions, an identifier shared by the entire family (and no other contract) should be used instead.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"notice\":\"Building block for performing access control on external functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":\"Authentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/BufferHelpers.sol":{"BufferHelpers":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212202a8c40d8d7db823a67eb89958a2e4bea6f7ee418639f1ab88821e639be1f821464736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2A DUP13 BLOCKHASH 0xD8 0xD7 0xDB DUP3 GASPRICE PUSH8 0xEB89958A2E4BEA6F PUSH31 0xE418639F1AB88821E639BE1F821464736F6C634300081B0033000000000000 ","sourceMap":"289:4401:38:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212202a8c40d8d7db823a67eb89958a2e4bea6f7ee418639f1ab88821e639be1f821464736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2A DUP13 BLOCKHASH 0xD8 0xD7 0xDB DUP3 GASPRICE PUSH8 0xEB89958A2E4BEA6F PUSH31 0xE418639F1AB88821E639BE1F821464736F6C634300081B0033000000000000 ","sourceMap":"289:4401:38:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/BufferHelpers.sol\":\"BufferHelpers\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/BufferHelpers.sol\":{\"keccak256\":\"0x528ef10b3f14bb2b1d64043ec8c7d732a502147fe9d4e4bd3339f57e40fe3ce7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9a71bd94d0c5ba098b04b2bc65a7842c1bb3b96d91dd6a95756efc468cd6dbc5\",\"dweb:/ipfs/QmPrHPMmrdpJjvny8UjWbWFJo5nWpBtmjxWGbX1zDbNx6Z\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\":{\"keccak256\":\"0xa1014b8d96cdfd149f502cda06f25e51885a6456b41061ed213086fcc1c496b4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8a96e7e176f73762c6de904de39472fe970f12f6d3631097227bc664bd0780c1\",\"dweb:/ipfs/QmXcu5bk8tJTqR6UwkdKNtsodzqYGpJsPdfjQmdJFyKZjR\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol":{"CastingHelpers":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220eef71ff0cfee2d382e4c98ac4d9cb4e4fd6e42b3e31e438eb1b8455192f3d28964736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEE 0xF7 0x1F CREATE 0xCF 0xEE 0x2D CODESIZE 0x2E 0x4C SWAP9 0xAC 0x4D SWAP13 0xB4 0xE4 REVERT PUSH15 0x42B3E31E438EB1B8455192F3D28964 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"217:637:39:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220eef71ff0cfee2d382e4c98ac4d9cb4e4fd6e42b3e31e438eb1b8455192f3d28964736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xEE 0xF7 0x1F CREATE 0xCF 0xEE 0x2D CODESIZE 0x2E 0x4C SWAP9 0xAC 0x4D SWAP13 0xB4 0xE4 REVERT PUSH15 0x42B3E31E438EB1B8455192F3D28964 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"217:637:39:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library of helper functions related to typecasting arrays.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":\"CastingHelpers\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol":{"CommonAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Base contract for performing access control on external functions within pools.\",\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol\":\"CommonAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol\":{\"keccak256\":\"0x89bd8b60aa203c8aa72af6e88671af68f4407a26dd3e0541b0e4dc387fd0081e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://411eb9ee6df963198102de5ae597c1f1377b0a45be23f17d38463f2eeefa2b0a\",\"dweb:/ipfs/QmcEaMawADJEyLswG5hhvhQuTNV3XUxBVu3YZCbJzQkoJ7\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol":{"EVMCallModeHelpers":{"abi":[{"inputs":[],"name":"NotStaticCall","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea264697066735822122015e8fcc1ebdad7cdf16fba9e91369fea96594c806a2f27c9a08a7bdce15325fd64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ISZERO 0xE8 0xFC 0xC1 0xEB 0xDA 0xD7 0xCD CALL PUSH16 0xBA9E91369FEA96594C806A2F27C9A08A PUSH28 0xDCE15325FD64736F6C634300081B0033000000000000000000000000 ","sourceMap":"173:775:41:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea264697066735822122015e8fcc1ebdad7cdf16fba9e91369fea96594c806a2f27c9a08a7bdce15325fd64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 ISZERO 0xE8 0xFC 0xC1 0xEB 0xDA 0xD7 0xCD CALL PUSH16 0xBA9E91369FEA96594C806A2F27C9A08A PUSH28 0xDCE15325FD64736F6C634300081B0033000000000000000000000000 ","sourceMap":"173:775:41:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"NotStaticCall\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"NotStaticCall()\":[{\"notice\":\"A state-changing transaction was initiated in a context that only allows static calls.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Library used to check whether the current operation was initiated through a static call.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol\":\"EVMCallModeHelpers\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol\":{\"keccak256\":\"0x9dc4c8d6dd5dbc108dd377dab73a3e6c84e8c104713d2afb3cba8acc9ddf4c63\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2ef7c65fe356144f8cd720109b818e1ec6cc495ca35b55ca273ef9db45c6ae00\",\"dweb:/ipfs/QmREJgnfgoqemnYKvfYjTFJBAMsV9VAKA5AY5Woprpc1vs\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/FactoryWidePauseWindow.sol":{"FactoryWidePauseWindow":{"abi":[{"inputs":[{"internalType":"uint32","name":"pauseWindowDuration","type":"uint32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"PoolPauseWindowDurationOverflow","type":"error"},{"inputs":[],"name":"getNewPoolPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOriginalPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowDuration","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60c0346100b057601f61026d38819003918201601f19168301916001600160401b038311848410176100b4578084926020946040528339810103126100b0575163ffffffff908181168082036100b05742019081421161009c5782821161008d576080521660a0526040516101a490816100c982396080518161014a015260a0518181816077015260d60152f35b6368755a1160e01b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c90816378da80cb1461011257508063db035ebc1461009f5763e9d56e191461003d575f80fd5b3461009b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b57602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b3461009b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b57602063ffffffff7f000000000000000000000000000000000000000000000000000000000000000081811642101561010a57905b60405191168152f35b505f90610101565b3461009b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b5760209063ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f3fea26469706673582212203b6aae1835181022e26df0568a13bb640796334e3b052c0d9093d6378ccb072e64736f6c634300081b0033","opcodes":"PUSH1 0xC0 CALLVALUE PUSH2 0xB0 JUMPI PUSH1 0x1F PUSH2 0x26D CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0xB4 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0xB0 JUMPI MLOAD PUSH4 0xFFFFFFFF SWAP1 DUP2 DUP2 AND DUP1 DUP3 SUB PUSH2 0xB0 JUMPI TIMESTAMP ADD SWAP1 DUP2 TIMESTAMP GT PUSH2 0x9C JUMPI DUP3 DUP3 GT PUSH2 0x8D JUMPI PUSH1 0x80 MSTORE AND PUSH1 0xA0 MSTORE PUSH1 0x40 MLOAD PUSH2 0x1A4 SWAP1 DUP2 PUSH2 0xC9 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x14A ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH1 0x77 ADD MSTORE PUSH1 0xD6 ADD MSTORE RETURN JUMPDEST PUSH4 0x68755A11 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x78DA80CB EQ PUSH2 0x112 JUMPI POP DUP1 PUSH4 0xDB035EBC EQ PUSH2 0x9F JUMPI PUSH4 0xE9D56E19 EQ PUSH2 0x3D JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x9B JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x9B JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x9B JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x9B JUMPI PUSH1 0x20 PUSH4 0xFFFFFFFF PUSH32 0x0 DUP2 DUP2 AND TIMESTAMP LT ISZERO PUSH2 0x10A JUMPI SWAP1 JUMPDEST PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP PUSH0 SWAP1 PUSH2 0x101 JUMP JUMPDEST CALLVALUE PUSH2 0x9B JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x9B JUMPI PUSH1 0x20 SWAP1 PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXTCODESIZE PUSH11 0xAE1835181022E26DF0568A SGT 0xBB PUSH5 0x796334E3B SDIV 0x2C 0xD SWAP1 SWAP4 0xD6 CALLDATACOPY DUP13 0xCB SMOD 0x2E PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"803:2453:42:-:0;;;;;;;;;;;;;-1:-1:-1;;803:2453:42;;;;-1:-1:-1;;;;;803:2453:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1461:15;803:2453;1461:15;;;803:2453;;;1513:35;;;1509:106;;1625:42;;803:2453;1735:53;;803:2453;;;;;;;;1625:42;803:2453;;;;;1735:53;803:2453;;;;;;;;;;;1509:106;1571:33;;;-1:-1:-1;1571:33:42;;-1:-1:-1;1571:33:42;803:2453;;;;-1:-1:-1;803:2453:42;;;;;-1:-1:-1;803:2453:42;;-1:-1:-1;803:2453:42;;;;;;-1:-1:-1;803:2453:42;;;;;-1:-1:-1;803:2453:42"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{"5820":[{"length":32,"start":330}],"5822":[{"length":32,"start":119},{"length":32,"start":214}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f3560e01c90816378da80cb1461011257508063db035ebc1461009f5763e9d56e191461003d575f80fd5b3461009b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b57602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5f80fd5b3461009b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b57602063ffffffff7f000000000000000000000000000000000000000000000000000000000000000081811642101561010a57905b60405191168152f35b505f90610101565b3461009b575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261009b5760209063ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f3fea26469706673582212203b6aae1835181022e26df0568a13bb640796334e3b052c0d9093d6378ccb072e64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x78DA80CB EQ PUSH2 0x112 JUMPI POP DUP1 PUSH4 0xDB035EBC EQ PUSH2 0x9F JUMPI PUSH4 0xE9D56E19 EQ PUSH2 0x3D JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x9B JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x9B JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x9B JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x9B JUMPI PUSH1 0x20 PUSH4 0xFFFFFFFF PUSH32 0x0 DUP2 DUP2 AND TIMESTAMP LT ISZERO PUSH2 0x10A JUMPI SWAP1 JUMPDEST PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP PUSH0 SWAP1 PUSH2 0x101 JUMP JUMPDEST CALLVALUE PUSH2 0x9B JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x9B JUMPI PUSH1 0x20 SWAP1 PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 EXTCODESIZE PUSH11 0xAE1835181022E26DF0568A SGT 0xBB PUSH5 0x796334E3B SDIV 0x2C 0xD SWAP1 SWAP4 0xD6 CALLDATACOPY DUP13 0xCB SMOD 0x2E PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"803:2453:42:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2369:24;803:2453;;;;;;;;;;;;;;;;;;;;;3191:24;803:2453;;;3173:15;:42;803:2453;;;3172:75;;803:2453;;;;;;;3172:75;;803:2453;3172:75;;;803:2453;;;;;;;;;;;;2073:20;803:2453;2073:20;803:2453;;;"},"methodIdentifiers":{"getNewPoolPauseWindowEndTime()":"db035ebc","getOriginalPauseWindowEndTime()":"e9d56e19","getPauseWindowDuration()":"78da80cb"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"pauseWindowDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"PoolPauseWindowDurationOverflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"getNewPoolPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOriginalPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Each pool deployment calls `getPauseWindowDuration` on the factory so that all Pools created by this factory will share the same Pause Window end time, after which both old and new Pools will not be pausable. All pools are reversibly pausable until the pause window expires. Afterward, there is an additional buffer period, set to the same duration as the Vault's buffer period. If a pool was paused, it will remain paused through this buffer period, and cannot be unpaused. When the buffer period expires, it will unpause automatically, and remain permissionless forever after.\",\"kind\":\"dev\",\"methods\":{\"getNewPoolPauseWindowEndTime()\":{\"details\":\"We intend for all pools deployed by this factory to have the same pause window end time (i.e., after this date, all future pools will be unpausable). This function will return `_poolsPauseWindowEndTime` until it passes, after which it will return 0.\",\"returns\":{\"_0\":\"pauseWindowEndTime The resolved pause window end time (0 indicating it's no longer pausable)\"}},\"getOriginalPauseWindowEndTime()\":{\"returns\":{\"_0\":\"pauseWindowEndTime The end time as a timestamp\"}},\"getPauseWindowDuration()\":{\"returns\":{\"_0\":\"pauseWindowDuration The duration in seconds\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"PoolPauseWindowDurationOverflow()\":[{\"notice\":\"The factory deployer gave a duration that would overflow the Unix timestamp.\"}]},\"kind\":\"user\",\"methods\":{\"getNewPoolPauseWindowEndTime()\":{\"notice\":\"Returns the current pauseWindowEndTime that will be applied to Pools created by this factory.\"},\"getOriginalPauseWindowEndTime()\":{\"notice\":\"Returns the original factory pauseWindowEndTime, regardless of the current time.\"},\"getPauseWindowDuration()\":{\"notice\":\"Return the pause window duration. This is the time pools will be pausable after factory deployment.\"}},\"notice\":\"Base contract for v3 factories to support pause windows for pools based on the factory deployment time.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/FactoryWidePauseWindow.sol\":\"FactoryWidePauseWindow\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/FactoryWidePauseWindow.sol\":{\"keccak256\":\"0x9594d2dc75aa8c92bb39d30cd76d3bfbb203fe17c4ae35b6f8d882ed4ac868d4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a43d706d34c9f071bed27372100fedaeb12ec4c5c3529e150c8684444c4a619\",\"dweb:/ipfs/QmYUnJ2CtjJY2XktSzamExryTNbAYjesnymMpqTvQuXUka\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol":{"InputHelpers":{"abi":[{"inputs":[],"name":"AllZeroInputs","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[],"name":"MultipleNonZeroInputs","type":"error"},{"inputs":[],"name":"TokensNotSorted","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea264697066735822122023a7778c31587e5bfe1716981e77b8fbfb1064a897881d27a7bd65803a770b6a64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x23 0xA7 PUSH24 0x8C31587E5BFE1716981E77B8FBFB1064A897881D27A7BD65 DUP1 GASPRICE PUSH24 0xB6A64736F6C634300081B00330000000000000000000000 ","sourceMap":"202:4350:43:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea264697066735822122023a7778c31587e5bfe1716981e77b8fbfb1064a897881d27a7bd65803a770b6a64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x23 0xA7 PUSH24 0x8C31587E5BFE1716981E77B8FBFB1064A897881D27A7BD65 DUP1 GASPRICE PUSH24 0xB6A64736F6C634300081B00330000000000000000000000 ","sourceMap":"202:4350:43:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AllZeroInputs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MultipleNonZeroInputs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokensNotSorted\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"AllZeroInputs()\":[{\"details\":\"Input arrays for single token add/remove liquidity operations are expected to have one non-zero value, corresponding to the token being added or removed. This error results if all entries are zero.\"}],\"MultipleNonZeroInputs()\":[{\"details\":\"Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value, corresponding to the token being added or removed. This error results if there are multiple non-zero entries.\"}],\"TokensNotSorted()\":[{\"details\":\"Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can predict the token order without having to query the Vault. (It is also legacy v2 behavior.)\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"AllZeroInputs()\":[{\"notice\":\"No valid input was given for a single token operation.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"MultipleNonZeroInputs()\":[{\"notice\":\"More than one non-zero value was given for a single token operation.\"}],\"TokensNotSorted()\":[{\"notice\":\"The tokens supplied to an array argument were not sorted in numerical order.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":\"InputHelpers\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol":{"PackedTokenBalance":{"abi":[{"inputs":[],"name":"BalanceOverflow","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220265998fb316c28ac65c9ec2c43c675f998fe014909885d4b69f27704422da06f64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x26 MSIZE SWAP9 0xFB BALANCE PUSH13 0x28AC65C9EC2C43C675F998FE01 BLOBHASH MULMOD DUP9 TSTORE 0x4B PUSH10 0xF27704422DA06F64736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"982:2131:44:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220265998fb316c28ac65c9ec2c43c675f998fe014909885d4b69f27704422da06f64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x26 MSIZE SWAP9 0xFB BALANCE PUSH13 0x28AC65C9EC2C43C675F998FE01 BLOBHASH MULMOD DUP9 TSTORE 0x4B PUSH10 0xF27704422DA06F64736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"982:2131:44:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BalanceOverflow\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"We could use a Solidity struct to pack balance values together in a single storage slot, but unfortunately Solidity only allows for structs to live in either storage, calldata or memory. Because a memory struct still takes up a slot in the stack (to store its memory location), and because the entire balance fits in a single stack slot (two 128 bit values), using memory is strictly less gas performant. Therefore, we do manual packing and unpacking. We could also use custom types now, but given the simplicity here, and the existing EnumerableMap type, it seemed easier to leave it as a bytes32.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"BalanceOverflow()\":[{\"notice\":\"One of the balances is above the maximum value that can be stored.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"This library represents a data structure for packing a token's current raw and derived balances. A derived balance can be the \\\"last\\\" live balance scaled18 of the raw token, or the balance of the wrapped version of the token in a vault buffer, among others.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\":\"PackedTokenBalance\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\":{\"keccak256\":\"0xa1014b8d96cdfd149f502cda06f25e51885a6456b41061ed213086fcc1c496b4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8a96e7e176f73762c6de904de39472fe970f12f6d3631097227bc664bd0780c1\",\"dweb:/ipfs/QmXcu5bk8tJTqR6UwkdKNtsodzqYGpJsPdfjQmdJFyKZjR\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol":{"RevertCodec":{"abi":[{"inputs":[],"name":"ErrorSelectorNotFound","type":"error"},{"inputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"name":"Result","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212208683019c0f17e585a20b0fc05084b8273a26fbb5ee6a380f717073becaabfbfa64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP7 DUP4 ADD SWAP13 0xF OR 0xE5 DUP6 LOG2 SIGNEXTEND 0xF 0xC0 POP DUP5 0xB8 0x27 GASPRICE 0x26 0xFB 0xB5 0xEE PUSH11 0x380F717073BECAABFBFA64 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"231:2016:45:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212208683019c0f17e585a20b0fc05084b8273a26fbb5ee6a380f717073becaabfbfa64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP7 DUP4 ADD SWAP13 0xF OR 0xE5 DUP6 LOG2 SIGNEXTEND 0xF 0xC0 POP DUP5 0xB8 0x27 GASPRICE 0x26 0xFB 0xB5 0xEE PUSH11 0x380F717073BECAABFBFA64 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"231:2016:45:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ErrorSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"Result\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"Result(bytes)\":[{\"params\":{\"result\":\"The result of the query operation\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ErrorSelectorNotFound()\":[{\"notice\":\"Handle the \\\"reverted without a reason\\\" case (i.e., no return data).\"}],\"Result(bytes)\":[{\"notice\":\"On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Support `quoteAndRevert`: a v2-style query which always reverts, and returns the result in the return data.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":\"RevertCodec\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":{\"keccak256\":\"0xb4ee9e1543d36bdf9eeb4a9d5ab41170723239a1e27a2272f2e31de4765c019b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b70dd5e4fa496c2c1efb6bd20368587ba3c9c0d0afac9dc3631a29ff2628f99\",\"dweb:/ipfs/QmQigXUkpDuVK5VSX67RABrAC9bashPcHMasgPRNJb4k8Z\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol":{"ScalingHelpers":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212206f8696e8ef06c1fab893bb743f03b98025eb1aefd2ee584ce75cc2087247233264736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH16 0x8696E8EF06C1FAB893BB743F03B98025 0xEB BYTE 0xEF 0xD2 0xEE PC 0x4C 0xE7 TLOAD 0xC2 ADDMOD PUSH19 0x47233264736F6C634300081B00330000000000 ","sourceMap":"938:9455:46:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212206f8696e8ef06c1fab893bb743f03b98025eb1aefd2ee584ce75cc2087247233264736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH16 0x8696E8EF06C1FAB893BB743F03B98025 0xEB BYTE 0xEF 0xD2 0xEE PC 0x4C 0xE7 TLOAD 0xC2 ADDMOD PUSH19 0x47233264736F6C634300081B00330000000000 ","sourceMap":"938:9455:46:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"To simplify Pool logic, all token balances and amounts are normalized to behave as if the token had 18 decimals. When comparing DAI (18 decimals) and USDC (6 decimals), 1 USDC and 1 DAI would both be represented as 1e18. This allows us to not consider differences in token decimals in the internal Pool math, simplifying it greatly. The Vault does not support tokens with more than 18 decimals (see `_MAX_TOKEN_DECIMALS` in `VaultStorage`), or tokens that do not implement `IERC20Metadata.decimals`. These helpers can also be used to scale amounts by other 18-decimal floating point values, such as rates.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Helper functions to apply/undo token decimal and rate adjustments, rounding in the direction indicated.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol\":\"ScalingHelpers\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol\":{\"keccak256\":\"0xf98fec19a1516432d7540f0cde2e967b627afbc5a361835766d57be8ba10b4e2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://94b49929bff77d1fdaab8916350356fc9816317beef4f33c3af0e6a40493d01c\",\"dweb:/ipfs/QmPPhtmpPvgedbtQaJZz7JQCmiGKKTHmfh7EGhJS1yUCia\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol":{"TransientStorageHelpers":{"abi":[{"inputs":[],"name":"TransientIndexOutOfBounds","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212209e49b7ec540e871d23009f31d58c0cb7e44bdf4192d76605fb646288f37e853e64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP15 BLOBHASH 0xB7 0xEC SLOAD 0xE DUP8 SAR 0x23 STOP SWAP16 BALANCE 0xD5 DUP13 0xC 0xB7 0xE4 0x4B 0xDF COINBASE SWAP3 0xD7 PUSH7 0x5FB646288F37E DUP6 RETURNDATACOPY PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"991:5950:47:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212209e49b7ec540e871d23009f31d58c0cb7e44bdf4192d76605fb646288f37e853e64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP15 BLOBHASH 0xB7 0xEC SLOAD 0xE DUP8 SAR 0x23 STOP SWAP16 BALANCE 0xD5 DUP13 0xC 0xB7 0xE4 0x4B 0xDF COINBASE SWAP3 0xD7 PUSH7 0x5FB646288F37E DUP6 RETURNDATACOPY PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"991:5950:47:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"TransientIndexOutOfBounds\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"This is temporary, based on Open Zeppelin's partially released library. When the final version is published, we should be able to remove our copies and import directly from OZ. When Solidity catches up and puts direct support for transient storage in the language, we should be able to get rid of this altogether. This only works on networks where EIP-1153 is supported.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"TransientIndexOutOfBounds()\":[{\"notice\":\"An index is out of bounds on an array operation (e.g., at).\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Helper functions to read and write values from transient storage, including support for arrays and mappings.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":\"TransientStorageHelpers\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":{\"keccak256\":\"0xb5f6b1d0ee3f295a717ce58329eaadccb1eefc2e1e02e2e7c438e377628475cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03c1b9bc73b7d14d9e1948a31c271a03a6ba4291f44d9aff17e60d300c111d0d\",\"dweb:/ipfs/QmNpW3iD3ST76N6xTncuVgYSuafSqFkXUmxNaK8uybr96G\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol":{"Version":{"abi":[{"inputs":[{"internalType":"string","name":"version_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"allocate_memory":{"entryPoint":463,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6080604052346101cb5761041880380380610019816101cf565b928339810190602080828403126101cb5781516001600160401b03928382116101cb570192601f908082860112156101cb5784518481116101b757601f1995610067828501881686016101cf565b928284528583830101116101cb57815f92868093018386015e8301015280519384116101b7575f54926001938481811c911680156101ad575b8282101461019957838111610156575b50809285116001146100f65750839450908392915f946100eb575b50501b915f199060031b1c1916175f555b60405161022390816101f58239f35b015192505f806100cb565b9294849081165f8052845f20945f905b8883831061013c5750505010610124575b505050811b015f556100dc565b01515f1960f88460031b161c191690555f8080610117565b858701518855909601959485019487935090810190610106565b5f8052815f208480880160051c820192848910610190575b0160051c019085905b8281106101855750506100b0565b5f8155018590610177565b9250819261016e565b634e487b7160e01b5f52602260045260245ffd5b90607f16906100a0565b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b038111838210176101b75760405256fe6080600436101561000e575f80fd5b5f3560e01c6354fd4d5014610021575f80fd5b346101e9575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e9575f5f546001908060011c92600182169384156101e1575b60209384821086146101b4578187528487019587948690821561017b575050600114610124575b505003601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090811684019367ffffffffffffffff8511818610176100f7576040938593601f9285875281865251918280928701528686015e5f85828601015201168101030190f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f80805285935091907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b828410610163575050508201015f8061008d565b8054848a01860152889550869490930192810161014f565b915093507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009150168552151560051b8201015f8061008d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b607f16610066565b5f80fdfea26469706673582212208f8983b58d785cd472d19f393d5480e584109f683297852db2ac88152dfc995864736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x1CB JUMPI PUSH2 0x418 DUP1 CODESIZE SUB DUP1 PUSH2 0x19 DUP2 PUSH2 0x1CF JUMP JUMPDEST SWAP3 DUP4 CODECOPY DUP2 ADD SWAP1 PUSH1 0x20 DUP1 DUP3 DUP5 SUB SLT PUSH2 0x1CB JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 DUP4 DUP3 GT PUSH2 0x1CB JUMPI ADD SWAP3 PUSH1 0x1F SWAP1 DUP1 DUP3 DUP7 ADD SLT ISZERO PUSH2 0x1CB JUMPI DUP5 MLOAD DUP5 DUP2 GT PUSH2 0x1B7 JUMPI PUSH1 0x1F NOT SWAP6 PUSH2 0x67 DUP3 DUP6 ADD DUP9 AND DUP7 ADD PUSH2 0x1CF JUMP JUMPDEST SWAP3 DUP3 DUP5 MSTORE DUP6 DUP4 DUP4 ADD ADD GT PUSH2 0x1CB JUMPI DUP2 PUSH0 SWAP3 DUP7 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE DUP1 MLOAD SWAP4 DUP5 GT PUSH2 0x1B7 JUMPI PUSH0 SLOAD SWAP3 PUSH1 0x1 SWAP4 DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x1AD JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x199 JUMPI DUP4 DUP2 GT PUSH2 0x156 JUMPI JUMPDEST POP DUP1 SWAP3 DUP6 GT PUSH1 0x1 EQ PUSH2 0xF6 JUMPI POP DUP4 SWAP5 POP SWAP1 DUP4 SWAP3 SWAP2 PUSH0 SWAP5 PUSH2 0xEB JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x223 SWAP1 DUP2 PUSH2 0x1F5 DUP3 CODECOPY RETURN JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0xCB JUMP JUMPDEST SWAP3 SWAP5 DUP5 SWAP1 DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0x13C JUMPI POP POP POP LT PUSH2 0x124 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH2 0xDC JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x117 JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x106 JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP1 DUP9 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP5 DUP10 LT PUSH2 0x190 JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP6 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x185 JUMPI POP POP PUSH2 0xB0 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0x177 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x16E JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xA0 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x1B7 JUMPI PUSH1 0x40 MSTORE JUMP INVALID PUSH1 0x80 PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0xE JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0x54FD4D50 EQ PUSH2 0x21 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1E9 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x1E9 JUMPI PUSH0 PUSH0 SLOAD PUSH1 0x1 SWAP1 DUP1 PUSH1 0x1 SHR SWAP3 PUSH1 0x1 DUP3 AND SWAP4 DUP5 ISZERO PUSH2 0x1E1 JUMPI JUMPDEST PUSH1 0x20 SWAP4 DUP5 DUP3 LT DUP7 EQ PUSH2 0x1B4 JUMPI DUP2 DUP8 MSTORE DUP5 DUP8 ADD SWAP6 DUP8 SWAP5 DUP7 SWAP1 DUP3 ISZERO PUSH2 0x17B JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x124 JUMPI JUMPDEST POP POP SUB PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND DUP5 ADD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT DUP2 DUP7 LT OR PUSH2 0xF7 JUMPI PUSH1 0x40 SWAP4 DUP6 SWAP4 PUSH1 0x1F SWAP3 DUP6 DUP8 MSTORE DUP2 DUP7 MSTORE MLOAD SWAP2 DUP3 DUP1 SWAP3 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 DUP1 MSTORE DUP6 SWAP4 POP SWAP2 SWAP1 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP3 DUP5 LT PUSH2 0x163 JUMPI POP POP POP DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x8D JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP7 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x14F JUMP JUMPDEST SWAP2 POP SWAP4 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP2 POP AND DUP6 MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x8D JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x7F AND PUSH2 0x66 JUMP JUMPDEST PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP16 DUP10 DUP4 0xB5 DUP14 PUSH25 0x5CD472D19F393D5480E584109F683297852DB2AC88152DFC99 PC PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"666:520:48:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;666:520:48;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;666:520:48;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;666:520:48;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:48;;;;;;;;;;;;;;-1:-1:-1;666:520:48;;;;;;;;;;;-1:-1:-1;666:520:48;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:48;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:48;;;;;;;;;;;;;;;-1:-1:-1;666:520:48;;;;;;;;;;;-1:-1:-1;666:520:48;;;-1:-1:-1;666:520:48;;-1:-1:-1;666:520:48;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:48;;;;;;;-1:-1:-1;666:520:48;;;-1:-1:-1;666:520:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:48;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:48;;;;;-1:-1:-1;666:520:48;;;;;;;;;;;;-1:-1:-1;666:520:48;;;;;-1:-1:-1;666:520:48;;-1:-1:-1;666:520:48;;;;;;;;;-1:-1:-1;;666:520:48;;;-1:-1:-1;;;;;666:520:48;;;;;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080600436101561000e575f80fd5b5f3560e01c6354fd4d5014610021575f80fd5b346101e9575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e9575f5f546001908060011c92600182169384156101e1575b60209384821086146101b4578187528487019587948690821561017b575050600114610124575b505003601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090811684019367ffffffffffffffff8511818610176100f7576040938593601f9285875281865251918280928701528686015e5f85828601015201168101030190f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f80805285935091907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b828410610163575050508201015f8061008d565b8054848a01860152889550869490930192810161014f565b915093507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff009150168552151560051b8201015f8061008d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b607f16610066565b5f80fdfea26469706673582212208f8983b58d785cd472d19f393d5480e584109f683297852db2ac88152dfc995864736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0xE JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR PUSH4 0x54FD4D50 EQ PUSH2 0x21 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1E9 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x1E9 JUMPI PUSH0 PUSH0 SLOAD PUSH1 0x1 SWAP1 DUP1 PUSH1 0x1 SHR SWAP3 PUSH1 0x1 DUP3 AND SWAP4 DUP5 ISZERO PUSH2 0x1E1 JUMPI JUMPDEST PUSH1 0x20 SWAP4 DUP5 DUP3 LT DUP7 EQ PUSH2 0x1B4 JUMPI DUP2 DUP8 MSTORE DUP5 DUP8 ADD SWAP6 DUP8 SWAP5 DUP7 SWAP1 DUP3 ISZERO PUSH2 0x17B JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x124 JUMPI JUMPDEST POP POP SUB PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 DUP2 AND DUP5 ADD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT DUP2 DUP7 LT OR PUSH2 0xF7 JUMPI PUSH1 0x40 SWAP4 DUP6 SWAP4 PUSH1 0x1F SWAP3 DUP6 DUP8 MSTORE DUP2 DUP7 MSTORE MLOAD SWAP2 DUP3 DUP1 SWAP3 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP1 RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 DUP1 MSTORE DUP6 SWAP4 POP SWAP2 SWAP1 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP3 DUP5 LT PUSH2 0x163 JUMPI POP POP POP DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x8D JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP7 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x14F JUMP JUMPDEST SWAP2 POP SWAP4 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP2 POP AND DUP6 MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x8D JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x7F AND PUSH2 0x66 JUMP JUMPDEST PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP16 DUP10 DUP4 0xB5 DUP14 PUSH25 0x5CD472D19F393D5480E584109F683297852DB2AC88152DFC99 PC PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"666:520:48:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;666:520:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;666:520:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"methodIdentifiers":{"version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"version_\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The version is set at deployment time and cannot be changed. It would be immutable, but immutable strings are not yet supported. Contracts like factories and pools should have versions. These typically take the form of JSON strings containing detailed information about the deployment. For instance: `{name: 'ChildChainGaugeFactory', version: 2, deployment: '20230316-child-chain-gauge-factory-v2'}`\",\"kind\":\"dev\",\"methods\":{\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"version()\":{\"notice\":\"Getter for the version.\"}},\"notice\":\"Retrieves a contract's version from storage.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":\"Version\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol":{"WordCodec":{"abi":[{"inputs":[],"name":"CodecOverflow","type":"error"},{"inputs":[],"name":"OutOfBounds","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212204577ea115ac42206cb4c13e13c299342f7dea46ca941f422887dd92ff95f4bca64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 GASLIMIT PUSH24 0xEA115AC42206CB4C13E13C299342F7DEA46CA941F422887D 0xD9 0x2F 0xF9 PUSH0 0x4B 0xCA PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1408:9257:49:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212204577ea115ac42206cb4c13e13c299342f7dea46ca941f422887dd92ff95f4bca64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 GASLIMIT PUSH24 0xEA115AC42206CB4C13E13C299342F7DEA46CA941F422887D 0xD9 0x2F 0xF9 PUSH0 0x4B 0xCA PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1408:9257:49:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"CodecOverflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfBounds\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Typically used to pack multiple values in a single slot, saving gas by performing fewer storage accesses. Each value is defined by its size and the least significant bit in the word, also known as offset. For example, two 128 bit values may be encoded in a word by assigning one an offset of 0, and the other an offset of 128. We could use Solidity structs to pack values together in a single storage slot instead of relying on a custom and error-prone library, but unfortunately Solidity only allows for structs to live in either storage, calldata or memory. Because a memory struct uses not just memory but also a slot in the stack (to store its memory location), using memory for word-sized values (i.e. of 256 bits or less) is strictly less gas performant, and doesn't even prevent stack-too-deep issues. This is compounded by the fact that Balancer contracts typically are memory- intensive, and the cost of accessing memory increases quadratically with the number of allocated words. Manual packing and unpacking is therefore the preferred approach.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"CodecOverflow()\":[{\"notice\":\"Function called with an invalid value.\"}],\"OutOfBounds()\":[{\"notice\":\"Function called with an invalid bitLength or offset.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Library for encoding and decoding values stored inside a 256 bit word.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\":\"WordCodec\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0xeb183354089582d4a3fc8ded6cc410a2937f2eac2aa47b3ab13b0f5e6ede10e5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ecef18f7f0f57d749d5b0e11ab887299be15e1b6971a4bb9104d06e45705231b\",\"dweb:/ipfs/QmeYRDD5UtVKu2YFJm3SmHFriK6LUa2Tzg7EdZrneEfzNR\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol":{"FixedPoint":{"abi":[{"inputs":[],"name":"ZeroDivision","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220e9cc622b7f35aaf8f3efa30ad767c4a02aedd5ccde9b7738c8491078c2823d0164736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 0xCC PUSH3 0x2B7F35 0xAA 0xF8 RETURN 0xEF LOG3 EXP 0xD7 PUSH8 0xC4A02AEDD5CCDE9B PUSH24 0x38C8491078C2823D0164736F6C634300081B003300000000 ","sourceMap":"239:5688:50:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220e9cc622b7f35aaf8f3efa30ad767c4a02aedd5ccde9b7738c8491078c2823d0164736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE9 0xCC PUSH3 0x2B7F35 0xAA 0xF8 RETURN 0xEF LOG3 EXP 0xD7 PUSH8 0xC4A02AEDD5CCDE9B PUSH24 0x38C8491078C2823D0164736F6C634300081B003300000000 ","sourceMap":"239:5688:50:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Support 18-decimal fixed point arithmetic. All Vault calculations use this for high and uniform precision.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":\"FixedPoint\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol":{"LogExpMath":{"abi":[{"inputs":[],"name":"BaseOutOfBounds","type":"error"},{"inputs":[],"name":"ExponentOutOfBounds","type":"error"},{"inputs":[],"name":"InvalidExponent","type":"error"},{"inputs":[],"name":"OutOfBounds","type":"error"},{"inputs":[],"name":"ProductOutOfBounds","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220f7e8e3ef4405ba858296891409b167de675961dcc03dc03125ef5eed9c9eb29264736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF7 0xE8 0xE3 0xEF PREVRANDAO SDIV 0xBA DUP6 DUP3 SWAP7 DUP10 EQ MULMOD 0xB1 PUSH8 0xDE675961DCC03DC0 BALANCE 0x25 0xEF MCOPY 0xED SWAP13 SWAP15 0xB2 SWAP3 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"595:21889:51:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220f7e8e3ef4405ba858296891409b167de675961dcc03dc03125ef5eed9c9eb29264736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xF7 0xE8 0xE3 0xEF PREVRANDAO SDIV 0xBA DUP6 DUP3 SWAP7 DUP10 EQ MULMOD 0xB1 PUSH8 0xDE675961DCC03DC0 BALANCE 0x25 0xEF MCOPY 0xED SWAP13 SWAP15 0xB2 SWAP3 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"595:21889:51:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BaseOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExponentOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExponent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProductOutOfBounds\",\"type\":\"error\"}],\"devdoc\":{\"author\":\"Fernando Martinelli - @fernandomartinelliSergio Yuhjtman - @sergioyuhjtmanDaniel Fernandez - @dmf7z\",\"details\":\"Exponentiation and logarithm functions for 18 decimal fixed point numbers (both base and exponent/argument). Exponentiation and logarithm with arbitrary bases (x^y and log_x(y)) are implemented by conversion to natural exponentiation and logarithm (where the base is Euler's number). All math operations are unchecked in order to save gas.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"BaseOutOfBounds()\":[{\"notice\":\"This error is thrown when a base is not within an acceptable range.\"}],\"ExponentOutOfBounds()\":[{\"notice\":\"This error is thrown when a exponent is not within an acceptable range.\"}],\"InvalidExponent()\":[{\"notice\":\"This error is thrown when an exponent used in the exp function is not within an acceptable range.\"}],\"OutOfBounds()\":[{\"notice\":\"This error is thrown when a variable or result is not within the acceptable bounds defined in the function.\"}],\"ProductOutOfBounds()\":[{\"notice\":\"This error is thrown when the exponent * ln(base) is not within an acceptable range.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":\"LogExpMath\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/math/WeightedMath.sol":{"WeightedMath":{"abi":[{"inputs":[],"name":"MaxInRatio","type":"error"},{"inputs":[],"name":"MaxOutRatio","type":"error"},{"inputs":[],"name":"ZeroInvariant","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220da883693ae1711206a5a279d5435d27618b60387ad9845206cb0c2b277fa525664736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDA DUP9 CALLDATASIZE SWAP4 0xAE OR GT KECCAK256 PUSH11 0x5A279D5435D27618B60387 0xAD SWAP9 GASLIMIT KECCAK256 PUSH13 0xB0C2B277FA525664736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"708:13255:52:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220da883693ae1711206a5a279d5435d27618b60387ad9845206cb0c2b277fa525664736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDA DUP9 CALLDATASIZE SWAP4 0xAE OR GT KECCAK256 PUSH11 0x5A279D5435D27618B60387 0xAD SWAP9 GASLIMIT KECCAK256 PUSH13 0xB0C2B277FA525664736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"708:13255:52:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"MaxInRatio\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxOutRatio\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroInvariant\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"It is a generalization of the x * y = k constant product formula, accounting for cases with more than two tokens, and weights that are not 50/50. See https://docs.balancer.fi/concepts/explore-available-balancer-pools/weighted-pool/weighted-math.html For security reasons, to help ensure that for all possible \\\"round trip\\\" paths the caller always receives the same or fewer tokens than supplied, we have chosen the rounding direction to favor the protocol in all cases.\",\"errors\":{\"ZeroInvariant()\":[{\"details\":\"Most commonly, this happens when a token balance is zero.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"MaxInRatio()\":[{\"notice\":\"User attempted to add a disproportionate amountIn of tokens to a pool.\"}],\"MaxOutRatio()\":[{\"notice\":\"User attempted to extract a disproportionate amountOut of tokens from a pool.\"}],\"ZeroInvariant()\":[{\"notice\":\"Error thrown when the calculated invariant is zero, indicating an issue with the invariant calculation.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Implementation of Balancer Weighted Math, essentially unchanged since v1.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/math/WeightedMath.sol\":\"WeightedMath\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/WeightedMath.sol\":{\"keccak256\":\"0x4d9faedc605adaa52594ae9949374d87bce13107f887edc593a0b9b7a5c91042\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://648e918881e78d62505f049d2f88335e679aa01b82d403ac80b854d9d85efcc2\",\"dweb:/ipfs/QmXA36vdUX611mTH3V9qNGM3uF591TB3xaADqWG41NFmWP\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol":{"ReentrancyGuardTransient":{"abi":[{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"NOTE: This variant only works on networks where EIP-1153 is available.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Variant of {ReentrancyGuard} that uses transient storage.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":\"ReentrancyGuardTransient\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol":{"SlotDerivation":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea264697066735822122071f4243db7eb0091925ccdbf9a6e7c81e1691c90a83bbafbe750e8ad8983b93364736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH18 0xF4243DB7EB0091925CCDBF9A6E7C81E1691C SWAP1 0xA8 EXTCODESIZE 0xBA 0xFB 0xE7 POP 0xE8 0xAD DUP10 DUP4 0xB9 CALLER PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1652:3778:54:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea264697066735822122071f4243db7eb0091925ccdbf9a6e7c81e1691c90a83bbafbe750e8ad8983b93364736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH18 0xF4243DB7EB0091925CCDBF9A6E7C81E1691C SWAP1 0xA8 EXTCODESIZE 0xBA 0xFB 0xE7 POP 0xE8 0xAD DUP10 DUP4 0xB9 CALLER PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1652:3778:54:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"The derivation method for array and mapping matches the storage layout used by the solidity language/compiler. See https://docs.soliditylang.org/en/v0.8.20/internals/layout_in_storage.html#mappings-and-dynamic-arrays[Solidity docs for mappings and dynamic arrays.]. Example usage: ```solidity contract Example { // Add the library methods using StorageSlot for bytes32; using SlotDerivation for bytes32; // Declare a namespace string private constant _NAMESPACE = \\\"\\\" // eg. OpenZeppelin.Slot function setValueInNamespace(uint256 key, address newValue) internal { _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value = newValue; } function getValueInNamespace(uint256 key) internal view returns (address) { return _NAMESPACE.erc7201Slot().deriveMapping(key).getAddressSlot().value; } } ``` TIP: Consider using this library along with {StorageSlot}. NOTE: This library provides a way to manipulate storage locations in a non-standard way. Tooling for checking upgrade safety will ignore the slots accessed through this library.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library for computing storage (and transient storage) locations from namespaces and deriving slots corresponding to standard patterns.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":\"SlotDerivation\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol":{"StorageSlotExtension":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212207d1ece238b2a90fbead6c43dfa8046238cc35e0b4dec12d000c4f2cebfef20e164736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH30 0x1ECE238B2A90FBEAD6C43DFA8046238CC35E0B4DEC12D000C4F2CEBFEF20 0xE1 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"278:4371:55:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212207d1ece238b2a90fbead6c43dfa8046238cc35e0b4dec12d000c4f2cebfef20e164736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH30 0x1ECE238B2A90FBEAD6C43DFA8046238CC35E0B4DEC12D000C4F2CEBFEF20 0xE1 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"278:4371:55:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"TIP: Consider using this library along with {SlotDerivation}.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Library for reading and writing primitive types to specific storage slots. Based on OpenZeppelin; just adding support for int256.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":\"StorageSlotExtension\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]}},\"version\":1}"}},"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/TransientEnumerableSet.sol":{"TransientEnumerableSet":{"abi":[{"inputs":[],"name":"ElementNotFound","type":"error"},{"inputs":[],"name":"IndexOutOfBounds","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220a948896d1c9d9d317967aec31ad03a53c0e73188129c4b059add120a7470833764736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA9 BASEFEE DUP10 PUSH14 0x1C9D9D317967AEC31AD03A53C0E7 BALANCE DUP9 SLT SWAP13 0x4B SDIV SWAP11 0xDD SLT EXP PUSH21 0x70833764736F6C634300081B003300000000000000 ","sourceMap":"1284:6680:56:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220a948896d1c9d9d317967aec31ad03a53c0e73188129c4b059add120a7470833764736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA9 BASEFEE DUP10 PUSH14 0x1C9D9D317967AEC31AD03A53C0E7 BALANCE DUP9 SLT SWAP13 0x4B SDIV SWAP11 0xDD SLT EXP PUSH21 0x70833764736F6C634300081B003300000000000000 ","sourceMap":"1284:6680:56:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ElementNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"See https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive types. Based on the EnumerableSet library from OpenZeppelin Contracts, altered to remove the base private functions that work on bytes32, replacing them with a native implementation for address values, to reduce bytecode size and runtime costs. It also uses transient storage. The `unchecked_at` function was also added, which allows for more gas efficient data reads in some scenarios. Sets have the following properties: - Elements are added, removed, and checked for existence in constant time (O(1)). - Elements are enumerated in O(n). No guarantees are made on the ordering. ``` contract Example { // Add the library methods using TransientEnumerableSet for TransientEnumerableSet.AddressSet; // Declare a set state variable TransientEnumerableSet.AddressSet private mySet; } ```\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"ElementNotFound()\":[{\"notice\":\"An element that is not present in the set.\"}],\"IndexOutOfBounds()\":[{\"notice\":\"An index is beyond the current bounds of the set.\"}]},\"kind\":\"user\",\"methods\":{},\"notice\":\"Library for managing sets of primitive types.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/TransientEnumerableSet.sol\":\"TransientEnumerableSet\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":{\"keccak256\":\"0xb5f6b1d0ee3f295a717ce58329eaadccb1eefc2e1e02e2e7c438e377628475cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03c1b9bc73b7d14d9e1948a31c271a03a6ba4291f44d9aff17e60d300c111d0d\",\"dweb:/ipfs/QmNpW3iD3ST76N6xTncuVgYSuafSqFkXUmxNaK8uybr96G\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/TransientEnumerableSet.sol\":{\"keccak256\":\"0x1b77bbe902f863cb148ed28ae055841f77fc245b44f878932d0b8e3f2efba7f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1925829096d14d87eacbf2b7d42866128e2b43e1ff4249742a74f62e372ad247\",\"dweb:/ipfs/QmbFmGn45eoiHZHFGhXRqKSzg53j2Lz2XGQqaw6pkSjRxq\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol":{"BalancerPoolToken":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault_","type":"address"},{"internalType":"string","name":"bptName","type":"string"},{"internalType":"string","name":"bptSymbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ECDSAInvalidSignature","type":"error"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"name":"ECDSAInvalidSignatureLength","type":"error"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"ECDSAInvalidSignatureS","type":"error"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"ERC2612ExpiredSignature","type":"error"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC2612InvalidSigner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"currentNonce","type":"uint256"}],"name":"InvalidAccountNonce","type":"error"},{"inputs":[],"name":"InvalidShortString","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"name":"StringTooLong","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"EIP712DomainChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitApproval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incrementNonce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_string_fromMemory":{"entryPoint":1104,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":1069,"id":null,"parameterSlots":2,"returnSlots":0},"fun_toShortStringWithFallback":{"entryPoint":1576,"id":41065,"parameterSlots":1,"returnSlots":1},"fun_toShortStringWithFallback_3774":{"entryPoint":1189,"id":41065,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"61018060408181523461042957611c7b803803809161001e828661042d565b8439820190606083830312610429578251906001600160a01b0382168203610429576020848101516001600160401b0395919291908681116104295785610066918301610450565b94828201518781116104295761007c9201610450565b918151958287018781108282111761034057835260019081885282880194603160f81b86526100aa886104a5565b976101209889526100ba8a610628565b966101409788528151868301209a8b60e052519020996101009a808c524660a052875190878201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f84528983015260608201524660808201523060a082015260a0815260c08101818110868211176103405788525190206080523060c052610160978852805191838311610340576003928354928684811c9416801561041f575b8885101461040b578190601f948581116103bd575b50889085831160011461035f575f92610354575b50505f1982861b1c191690861b1783555b80519384116103405760049586548681811c91168015610336575b82821014610323578381116102e0575b508092851160011461027b57509383949184925f95610270575b50501b925f19911b1c19161790555b519261151c948561075f86396080518561108f015260a0518561115b015260c05185611060015260e051856110de01525184611104015251836106f901525182610723015251818181610175015281816103b50152818161052a015281816106be015281816108e7015281816109a601528181610b8201528181610c130152610ff50152f35b015193505f806101db565b92919084601f198116885f52855f20955f905b898383106102c657505050106102ad575b50505050811b0190556101ea565b01519060f8845f19921b161c191690555f80808061029f565b85870151895590970196948501948893509081019061028e565b875f52815f208480880160051c82019284891061031a575b0160051c019087905b82811061030f5750506101c1565b5f8155018790610301565b925081926102f8565b602288634e487b7160e01b5f525260245ffd5b90607f16906101b1565b634e487b7160e01b5f52604160045260245ffd5b015190505f80610185565b90889350601f19831691875f528a5f20925f5b8c8282106103a75750508411610390575b505050811b018355610196565b01515f1983881b60f8161c191690555f8080610383565b8385015186558c97909501949384019301610372565b909150855f52885f208580850160051c8201928b8610610402575b918a91869594930160051c01915b8281106103f4575050610171565b5f81558594508a91016103e6565b925081926103d8565b634e487b7160e01b5f52602260045260245ffd5b93607f169361015c565b5f80fd5b601f909101601f19168101906001600160401b0382119082101761034057604052565b81601f82011215610429578051906001600160401b0382116103405760405192610484601f8401601f19166020018561042d565b8284526020838301011161042957815f9260208093018386015e8301015290565b80516020908181101561051b5750601f8251116104dd57808251920151908083106104cf57501790565b825f19910360031b1b161790565b60448260405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b906001600160401b038211610340575f54926001938481811c9116801561061e575b8382101461040b57601f81116105eb575b5081601f841160011461058957509282939183925f9461057e575b50501b915f199060031b1c1916175f5560ff90565b015192505f80610569565b919083601f1981165f8052845f20945f905b888383106105d157505050106105b9575b505050811b015f5560ff90565b01515f1960f88460031b161c191690555f80806105ac565b85870151885590960195948501948793509081019061059b565b5f805284601f845f20920160051c820191601f860160051c015b82811061061357505061054e565b5f8155018590610605565b90607f169061053d565b8051602090818110156106525750601f8251116104dd57808251920151908083106104cf57501790565b9192916001600160401b0381116103405760019182548381811c91168015610754575b8282101461040b57601f8111610721575b5080601f83116001146106c15750819293945f926106b6575b50505f19600383901b1c191690821b17905560ff90565b015190505f8061069f565b90601f19831695845f52825f20925f905b88821061070a57505083859697106106f2575b505050811b01905560ff90565b01515f1960f88460031b161c191690555f80806106e5565b8087859682949686015181550195019301906106d2565b835f5283601f835f20920160051c820191601f850160051c015b828110610749575050610686565b5f815501849061073b565b90607f169061067556fe6080604081815260049182361015610015575f80fd5b5f3560e01c90816301ffc9a714610db95750806306fdde0314610cc9578063095ea7b314610c4c57806318160ddd14610bba57806323b872dd14610b1157806323de665114610adf57806330adf81f14610aa5578063313ce56714610a8a5780633644e51514610a675780635687f2b814610a08578063627cdcb9146109df578063679aefce1461094d57806370a08231146108795780637ecebe001461083557806384b0196e146106e25780638d928af81461069257806395d89b4114610588578063a9059cbb14610493578063d505accf146101f15763dd62ed3e146100fb575f80fd5b346101dc57806003193601126101dc576020610115610e63565b606461011f610e86565b9473ffffffffffffffffffffffffffffffffffffffff808097875198899687957f927da10500000000000000000000000000000000000000000000000000000000875230908701521660248501521660448301527f0000000000000000000000000000000000000000000000000000000000000000165afa9081156101e8575f916101af575b6020925051908152f35b90506020823d6020116101e0575b816101ca60209383610f85565b810103126101dc5760209151906101a5565b5f80fd5b3d91506101bd565b513d5f823e3d90fd5b50346101dc5760e06003193601126101dc5761020b610e63565b90610214610e86565b604435926064359060843560ff811681036101dc57824211610468576102618273ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2080549060018201905590565b90855160208101907f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9825273ffffffffffffffffffffffffffffffffffffffff9586861694858a84015287891660608401528a608084015260a083015260c082015260c0815260e0810181811067ffffffffffffffff82111761043c5792610340926103379288958b525190206102f6611049565b908a51917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015260c43591604260a4359220611374565b9092919261140e565b1681810361040f5750505f8495966103b160209651988996879586947fe1f21c67000000000000000000000000000000000000000000000000000000008652850160409194939294606082019573ffffffffffffffffffffffffffffffffffffffff80921683521660208201520152565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19081156101e857506103e557005b6104069060203d602011610408575b6103fe8183610f85565b810190610fc6565b005b503d6103f4565b877f4b800e46000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b60418b7f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b82877f62791302000000000000000000000000000000000000000000000000000000005f525260245ffd5b50346101dc57806003193601126101dc576020610510926104b2610e63565b83517fbeabacc80000000000000000000000000000000000000000000000000000000081523392810192835273ffffffffffffffffffffffffffffffffffffffff909116602083015260243560408301529384918291606090910190565b03815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af191821561057e57602092610563575b505160018152f35b61057990833d8511610408576103fe8183610f85565b61055b565b50513d5f823e3d90fd5b5090346101dc575f6003193601126101dc57815191825f83546105aa81610eeb565b90818452602095600191876001821691825f1461064d5750506001146105f1575b5050506105ed92916105de910385610f85565b51928284938452830190610e20565b0390f35b5f90815286935091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b82841061063557505050820101816105de6105ed6105cb565b8054848a01860152889550879490930192810161061c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168782015293151560051b860190930193508492506105de91506105ed90506105cb565b50346101dc575f6003193601126101dc576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5090346101dc575f6003193601126101dc5761071d7f0000000000000000000000000000000000000000000000000000000000000000611181565b916107477f00000000000000000000000000000000000000000000000000000000000000006112b6565b815191602091602084019484861067ffffffffffffffff87111761080957506107be82602092876107b199989795525f855281519889987f0f000000000000000000000000000000000000000000000000000000000000008a5260e0868b015260e08a0190610e20565b9188830390890152610e20565b914660608701523060808701525f60a087015285830360c087015251918281520192915f5b8281106107f257505050500390f35b8351855286955093810193928101926001016107e3565b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b50346101dc5760206003193601126101dc5760209073ffffffffffffffffffffffffffffffffffffffff610867610e63565b165f5260028252805f20549051908152f35b5090346101dc57602091826003193601126101dc5782610897610e63565b604473ffffffffffffffffffffffffffffffffffffffff9485855196879485937ff7888aec00000000000000000000000000000000000000000000000000000000855230908501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa91821561057e575f9261091e575b5051908152f35b9091508281813d8311610946575b6109368183610f85565b810103126101dc5751905f610917565b503d61092c565b50346101dc575f6003193601126101dc578051917f4f037ee7000000000000000000000000000000000000000000000000000000008352309083015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156101e8575f916101af576020925051908152f35b346101dc575f6003193601126101dc57335f908152600260205260409020805460018101909155005b50346101dc5760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925610a3a36610ea9565b939194610a45610fde565b5193845273ffffffffffffffffffffffffffffffffffffffff908116941692a3005b50346101dc575f6003193601126101dc57602090610a83611049565b9051908152f35b50346101dc575f6003193601126101dc576020905160128152f35b50346101dc575f6003193601126101dc57602090517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b50346101dc5760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef610a3a36610ea9565b50346101dc5760205f6084610b2536610ea9565b86517f15dacbea000000000000000000000000000000000000000000000000000000008152339881019890985273ffffffffffffffffffffffffffffffffffffffff928316602489015290821660448801526064870152859283917f0000000000000000000000000000000000000000000000000000000000000000165af191821561057e5760209261056357505160018152f35b50346101dc575f6003193601126101dc578051917fe4dc2aa4000000000000000000000000000000000000000000000000000000008352309083015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156101e8575f916101af576020925051908152f35b50346101dc57806003193601126101dc57602061051092610c6b610e63565b83517fe1f21c670000000000000000000000000000000000000000000000000000000081523392810192835273ffffffffffffffffffffffffffffffffffffffff909116602083015260243560408301529384918291606090910190565b50346101dc575f6003193601126101dc5780516003549091825f610cec84610eeb565b808352602094600190866001821691825f14610d79575050600114610d1e575b50506105ed92916105de910385610f85565b9085925060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f925b828410610d6157505050820101816105de610d0c565b8054848a018601528895508794909301928101610d4b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168682015292151560051b850190920192508391506105de9050610d0c565b83346101dc5760206003193601126101dc5735907fffffffff0000000000000000000000000000000000000000000000000000000082168092036101dc577f01ffc9a700000000000000000000000000000000000000000000000000000000602092148152f35b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101dc57565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101dc57565b60031960609101126101dc5773ffffffffffffffffffffffffffffffffffffffff9060043582811681036101dc579160243590811681036101dc579060443590565b90600182811c92168015610f32575b6020831014610f0557565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691610efa565b6040810190811067ffffffffffffffff821117610f5857604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610f5857604052565b908160209103126101dc575180151581036101dc5790565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361101d57565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016301480611158575b156110b1577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff821117610f585760405251902090565b507f00000000000000000000000000000000000000000000000000000000000000004614611088565b60ff81146111d55760ff811690601f82116111ad57604051916111a383610f3c565b8252602082015290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040515f815f54916111e783610eeb565b808352926020906001908181169081156112735750600114611215575b505061121292500382610f85565b90565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b82841061125b57506112129450505081016020015f80611204565b85548785018301529485019486945092810192611240565b9050602093506112129592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f80611204565b60ff81146112d85760ff811690601f82116111ad57604051916111a383610f3c565b506040515f816001916001546112ed81610eeb565b8084529360209160018116908115611273575060011461131557505061121292500382610f85565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b82841061135c57506112129450505081016020015f80611204565b85548785018301529485019486945092810192611341565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411611403579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156113f8575f5173ffffffffffffffffffffffffffffffffffffffff8116156113ee57905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b60048110156114b95780611420575050565b60018103611450577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b6002810361148457507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b60031461148e5750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffdfea26469706673582212204f28aa9c086a68d05f85edec0d26ea50fc81b2cdb1146a887e28ea4939adb0b064736f6c634300081b0033","opcodes":"PUSH2 0x180 PUSH1 0x40 DUP2 DUP2 MSTORE CALLVALUE PUSH2 0x429 JUMPI PUSH2 0x1C7B DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x1E DUP3 DUP7 PUSH2 0x42D JUMP JUMPDEST DUP5 CODECOPY DUP3 ADD SWAP1 PUSH1 0x60 DUP4 DUP4 SUB SLT PUSH2 0x429 JUMPI DUP3 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x429 JUMPI PUSH1 0x20 DUP5 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP6 SWAP2 SWAP3 SWAP2 SWAP1 DUP7 DUP2 GT PUSH2 0x429 JUMPI DUP6 PUSH2 0x66 SWAP2 DUP4 ADD PUSH2 0x450 JUMP JUMPDEST SWAP5 DUP3 DUP3 ADD MLOAD DUP8 DUP2 GT PUSH2 0x429 JUMPI PUSH2 0x7C SWAP3 ADD PUSH2 0x450 JUMP JUMPDEST SWAP2 DUP2 MLOAD SWAP6 DUP3 DUP8 ADD DUP8 DUP2 LT DUP3 DUP3 GT OR PUSH2 0x340 JUMPI DUP4 MSTORE PUSH1 0x1 SWAP1 DUP2 DUP9 MSTORE DUP3 DUP9 ADD SWAP5 PUSH1 0x31 PUSH1 0xF8 SHL DUP7 MSTORE PUSH2 0xAA DUP9 PUSH2 0x4A5 JUMP JUMPDEST SWAP8 PUSH2 0x120 SWAP9 DUP10 MSTORE PUSH2 0xBA DUP11 PUSH2 0x628 JUMP JUMPDEST SWAP7 PUSH2 0x140 SWAP8 DUP9 MSTORE DUP2 MLOAD DUP7 DUP4 ADD KECCAK256 SWAP11 DUP12 PUSH1 0xE0 MSTORE MLOAD SWAP1 KECCAK256 SWAP10 PUSH2 0x100 SWAP11 DUP1 DUP13 MSTORE CHAINID PUSH1 0xA0 MSTORE DUP8 MLOAD SWAP1 DUP8 DUP3 ADD SWAP3 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP5 MSTORE DUP10 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT DUP7 DUP3 GT OR PUSH2 0x340 JUMPI DUP9 MSTORE MLOAD SWAP1 KECCAK256 PUSH1 0x80 MSTORE ADDRESS PUSH1 0xC0 MSTORE PUSH2 0x160 SWAP8 DUP9 MSTORE DUP1 MLOAD SWAP2 DUP4 DUP4 GT PUSH2 0x340 JUMPI PUSH1 0x3 SWAP3 DUP4 SLOAD SWAP3 DUP7 DUP5 DUP2 SHR SWAP5 AND DUP1 ISZERO PUSH2 0x41F JUMPI JUMPDEST DUP9 DUP6 LT EQ PUSH2 0x40B JUMPI DUP2 SWAP1 PUSH1 0x1F SWAP5 DUP6 DUP2 GT PUSH2 0x3BD JUMPI JUMPDEST POP DUP9 SWAP1 DUP6 DUP4 GT PUSH1 0x1 EQ PUSH2 0x35F JUMPI PUSH0 SWAP3 PUSH2 0x354 JUMPI JUMPDEST POP POP PUSH0 NOT DUP3 DUP7 SHL SHR NOT AND SWAP1 DUP7 SHL OR DUP4 SSTORE JUMPDEST DUP1 MLOAD SWAP4 DUP5 GT PUSH2 0x340 JUMPI PUSH1 0x4 SWAP6 DUP7 SLOAD DUP7 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x336 JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x323 JUMPI DUP4 DUP2 GT PUSH2 0x2E0 JUMPI JUMPDEST POP DUP1 SWAP3 DUP6 GT PUSH1 0x1 EQ PUSH2 0x27B JUMPI POP SWAP4 DUP4 SWAP5 SWAP2 DUP5 SWAP3 PUSH0 SWAP6 PUSH2 0x270 JUMPI JUMPDEST POP POP SHL SWAP3 PUSH0 NOT SWAP2 SHL SHR NOT AND OR SWAP1 SSTORE JUMPDEST MLOAD SWAP3 PUSH2 0x151C SWAP5 DUP6 PUSH2 0x75F DUP7 CODECOPY PUSH1 0x80 MLOAD DUP6 PUSH2 0x108F ADD MSTORE PUSH1 0xA0 MLOAD DUP6 PUSH2 0x115B ADD MSTORE PUSH1 0xC0 MLOAD DUP6 PUSH2 0x1060 ADD MSTORE PUSH1 0xE0 MLOAD DUP6 PUSH2 0x10DE ADD MSTORE MLOAD DUP5 PUSH2 0x1104 ADD MSTORE MLOAD DUP4 PUSH2 0x6F9 ADD MSTORE MLOAD DUP3 PUSH2 0x723 ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0x175 ADD MSTORE DUP2 DUP2 PUSH2 0x3B5 ADD MSTORE DUP2 DUP2 PUSH2 0x52A ADD MSTORE DUP2 DUP2 PUSH2 0x6BE ADD MSTORE DUP2 DUP2 PUSH2 0x8E7 ADD MSTORE DUP2 DUP2 PUSH2 0x9A6 ADD MSTORE DUP2 DUP2 PUSH2 0xB82 ADD MSTORE DUP2 DUP2 PUSH2 0xC13 ADD MSTORE PUSH2 0xFF5 ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP4 POP PUSH0 DUP1 PUSH2 0x1DB JUMP JUMPDEST SWAP3 SWAP2 SWAP1 DUP5 PUSH1 0x1F NOT DUP2 AND DUP9 PUSH0 MSTORE DUP6 PUSH0 KECCAK256 SWAP6 PUSH0 SWAP1 JUMPDEST DUP10 DUP4 DUP4 LT PUSH2 0x2C6 JUMPI POP POP POP LT PUSH2 0x2AD JUMPI JUMPDEST POP POP POP POP DUP2 SHL ADD SWAP1 SSTORE PUSH2 0x1EA JUMP JUMPDEST ADD MLOAD SWAP1 PUSH1 0xF8 DUP5 PUSH0 NOT SWAP3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 DUP1 PUSH2 0x29F JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP10 SSTORE SWAP1 SWAP8 ADD SWAP7 SWAP5 DUP6 ADD SWAP5 DUP9 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x28E JUMP JUMPDEST DUP8 PUSH0 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP1 DUP9 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP5 DUP10 LT PUSH2 0x31A JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP8 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x30F JUMPI POP POP PUSH2 0x1C1 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP8 SWAP1 PUSH2 0x301 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x2F8 JUMP JUMPDEST PUSH1 0x22 DUP9 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x1B1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x185 JUMP JUMPDEST SWAP1 DUP9 SWAP4 POP PUSH1 0x1F NOT DUP4 AND SWAP2 DUP8 PUSH0 MSTORE DUP11 PUSH0 KECCAK256 SWAP3 PUSH0 JUMPDEST DUP13 DUP3 DUP3 LT PUSH2 0x3A7 JUMPI POP POP DUP5 GT PUSH2 0x390 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD DUP4 SSTORE PUSH2 0x196 JUMP JUMPDEST ADD MLOAD PUSH0 NOT DUP4 DUP9 SHL PUSH1 0xF8 AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x383 JUMP JUMPDEST DUP4 DUP6 ADD MLOAD DUP7 SSTORE DUP13 SWAP8 SWAP1 SWAP6 ADD SWAP5 SWAP4 DUP5 ADD SWAP4 ADD PUSH2 0x372 JUMP JUMPDEST SWAP1 SWAP2 POP DUP6 PUSH0 MSTORE DUP9 PUSH0 KECCAK256 DUP6 DUP1 DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP12 DUP7 LT PUSH2 0x402 JUMPI JUMPDEST SWAP2 DUP11 SWAP2 DUP7 SWAP6 SWAP5 SWAP4 ADD PUSH1 0x5 SHR ADD SWAP2 JUMPDEST DUP3 DUP2 LT PUSH2 0x3F4 JUMPI POP POP PUSH2 0x171 JUMP JUMPDEST PUSH0 DUP2 SSTORE DUP6 SWAP5 POP DUP11 SWAP2 ADD PUSH2 0x3E6 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x3D8 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP4 PUSH1 0x7F AND SWAP4 PUSH2 0x15C JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x340 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x429 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x340 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x484 PUSH1 0x1F DUP5 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP6 PUSH2 0x42D JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x429 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0x51B JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0x4DD JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0x4CF JUMPI POP OR SWAP1 JUMP JUMPDEST DUP3 PUSH0 NOT SWAP2 SUB PUSH1 0x3 SHL SHL AND OR SWAP1 JUMP JUMPDEST PUSH1 0x44 DUP3 PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH4 0x305A27A9 PUSH1 0xE0 SHL DUP4 MSTORE DUP2 PUSH1 0x4 DUP5 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH1 0x24 DUP7 ADD MSTORE ADD DUP5 DUP5 ADD MCOPY PUSH0 DUP3 DUP3 ADD DUP5 ADD MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP2 ADD SUB ADD SWAP1 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x340 JUMPI PUSH0 SLOAD SWAP3 PUSH1 0x1 SWAP4 DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x61E JUMPI JUMPDEST DUP4 DUP3 LT EQ PUSH2 0x40B JUMPI PUSH1 0x1F DUP2 GT PUSH2 0x5EB JUMPI JUMPDEST POP DUP2 PUSH1 0x1F DUP5 GT PUSH1 0x1 EQ PUSH2 0x589 JUMPI POP SWAP3 DUP3 SWAP4 SWAP2 DUP4 SWAP3 PUSH0 SWAP5 PUSH2 0x57E JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0x569 JUMP JUMPDEST SWAP2 SWAP1 DUP4 PUSH1 0x1F NOT DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0x5D1 JUMPI POP POP POP LT PUSH2 0x5B9 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x5AC JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x59B JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP5 PUSH1 0x1F DUP5 PUSH0 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 PUSH1 0x1F DUP7 ADD PUSH1 0x5 SHR ADD JUMPDEST DUP3 DUP2 LT PUSH2 0x613 JUMPI POP POP PUSH2 0x54E JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0x605 JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x53D JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0x652 JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0x4DD JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0x4CF JUMPI POP OR SWAP1 JUMP JUMPDEST SWAP2 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x340 JUMPI PUSH1 0x1 SWAP2 DUP3 SLOAD DUP4 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x754 JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x40B JUMPI PUSH1 0x1F DUP2 GT PUSH2 0x721 JUMPI JUMPDEST POP DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0x6C1 JUMPI POP DUP2 SWAP3 SWAP4 SWAP5 PUSH0 SWAP3 PUSH2 0x6B6 JUMPI JUMPDEST POP POP PUSH0 NOT PUSH1 0x3 DUP4 SWAP1 SHL SHR NOT AND SWAP1 DUP3 SHL OR SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x69F JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT DUP4 AND SWAP6 DUP5 PUSH0 MSTORE DUP3 PUSH0 KECCAK256 SWAP3 PUSH0 SWAP1 JUMPDEST DUP9 DUP3 LT PUSH2 0x70A JUMPI POP POP DUP4 DUP6 SWAP7 SWAP8 LT PUSH2 0x6F2 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x6E5 JUMP JUMPDEST DUP1 DUP8 DUP6 SWAP7 DUP3 SWAP5 SWAP7 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP6 ADD SWAP4 ADD SWAP1 PUSH2 0x6D2 JUMP JUMPDEST DUP4 PUSH0 MSTORE DUP4 PUSH1 0x1F DUP4 PUSH0 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR ADD JUMPDEST DUP3 DUP2 LT PUSH2 0x749 JUMPI POP POP PUSH2 0x686 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP5 SWAP1 PUSH2 0x73B JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x675 JUMP INVALID PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0xDB9 JUMPI POP DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xCC9 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xC4C JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0xBBA JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0xB11 JUMPI DUP1 PUSH4 0x23DE6651 EQ PUSH2 0xADF JUMPI DUP1 PUSH4 0x30ADF81F EQ PUSH2 0xAA5 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0xA8A JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0xA67 JUMPI DUP1 PUSH4 0x5687F2B8 EQ PUSH2 0xA08 JUMPI DUP1 PUSH4 0x627CDCB9 EQ PUSH2 0x9DF JUMPI DUP1 PUSH4 0x679AEFCE EQ PUSH2 0x94D JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x879 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x835 JUMPI DUP1 PUSH4 0x84B0196E EQ PUSH2 0x6E2 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x692 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x588 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x493 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x1F1 JUMPI PUSH4 0xDD62ED3E EQ PUSH2 0xFB JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1DC JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI PUSH1 0x20 PUSH2 0x115 PUSH2 0xE63 JUMP JUMPDEST PUSH1 0x64 PUSH2 0x11F PUSH2 0xE86 JUMP JUMPDEST SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP1 SWAP8 DUP8 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 PUSH32 0x927DA10500000000000000000000000000000000000000000000000000000000 DUP8 MSTORE ADDRESS SWAP1 DUP8 ADD MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE AND PUSH1 0x44 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1E8 JUMPI PUSH0 SWAP2 PUSH2 0x1AF JUMPI JUMPDEST PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1E0 JUMPI JUMPDEST DUP2 PUSH2 0x1CA PUSH1 0x20 SWAP4 DUP4 PUSH2 0xF85 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1DC JUMPI PUSH1 0x20 SWAP2 MLOAD SWAP1 PUSH2 0x1A5 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1BD JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1DC JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI PUSH2 0x20B PUSH2 0xE63 JUMP JUMPDEST SWAP1 PUSH2 0x214 PUSH2 0xE86 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP3 PUSH1 0x64 CALLDATALOAD SWAP1 PUSH1 0x84 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 SUB PUSH2 0x1DC JUMPI DUP3 TIMESTAMP GT PUSH2 0x468 JUMPI PUSH2 0x261 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH1 0x1 DUP3 ADD SWAP1 SSTORE SWAP1 JUMP JUMPDEST SWAP1 DUP6 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 DUP7 AND SWAP5 DUP6 DUP11 DUP5 ADD MSTORE DUP8 DUP10 AND PUSH1 0x60 DUP5 ADD MSTORE DUP11 PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 MSTORE PUSH1 0xE0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x43C JUMPI SWAP3 PUSH2 0x340 SWAP3 PUSH2 0x337 SWAP3 DUP9 SWAP6 DUP12 MSTORE MLOAD SWAP1 KECCAK256 PUSH2 0x2F6 PUSH2 0x1049 JUMP JUMPDEST SWAP1 DUP11 MLOAD SWAP2 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x2 DUP4 ADD MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0xC4 CALLDATALOAD SWAP2 PUSH1 0x42 PUSH1 0xA4 CALLDATALOAD SWAP3 KECCAK256 PUSH2 0x1374 JUMP JUMPDEST SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x140E JUMP JUMPDEST AND DUP2 DUP2 SUB PUSH2 0x40F JUMPI POP POP PUSH0 DUP5 SWAP6 SWAP7 PUSH2 0x3B1 PUSH1 0x20 SWAP7 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP7 MSTORE DUP6 ADD PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 SWAP5 PUSH1 0x60 DUP3 ADD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP4 MSTORE AND PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x1E8 JUMPI POP PUSH2 0x3E5 JUMPI STOP JUMPDEST PUSH2 0x406 SWAP1 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x408 JUMPI JUMPDEST PUSH2 0x3FE DUP2 DUP4 PUSH2 0xF85 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xFC6 JUMP JUMPDEST STOP JUMPDEST POP RETURNDATASIZE PUSH2 0x3F4 JUMP JUMPDEST DUP8 PUSH32 0x4B800E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP12 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 DUP8 PUSH32 0x6279130200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1DC JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI PUSH1 0x20 PUSH2 0x510 SWAP3 PUSH2 0x4B2 PUSH2 0xE63 JUMP JUMPDEST DUP4 MLOAD PUSH32 0xBEABACC800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x57E JUMPI PUSH1 0x20 SWAP3 PUSH2 0x563 JUMPI JUMPDEST POP MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x579 SWAP1 DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x408 JUMPI PUSH2 0x3FE DUP2 DUP4 PUSH2 0xF85 JUMP JUMPDEST PUSH2 0x55B JUMP JUMPDEST POP MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI DUP2 MLOAD SWAP2 DUP3 PUSH0 DUP4 SLOAD PUSH2 0x5AA DUP2 PUSH2 0xEEB JUMP JUMPDEST SWAP1 DUP2 DUP5 MSTORE PUSH1 0x20 SWAP6 PUSH1 0x1 SWAP2 DUP8 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x64D JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x5F1 JUMPI JUMPDEST POP POP POP PUSH2 0x5ED SWAP3 SWAP2 PUSH2 0x5DE SWAP2 SUB DUP6 PUSH2 0xF85 JUMP JUMPDEST MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0xE20 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH0 SWAP1 DUP2 MSTORE DUP7 SWAP4 POP SWAP2 SWAP1 PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B JUMPDEST DUP3 DUP5 LT PUSH2 0x635 JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x5DE PUSH2 0x5ED PUSH2 0x5CB JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x61C JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 DUP3 ADD MSTORE SWAP4 ISZERO ISZERO PUSH1 0x5 SHL DUP7 ADD SWAP1 SWAP4 ADD SWAP4 POP DUP5 SWAP3 POP PUSH2 0x5DE SWAP2 POP PUSH2 0x5ED SWAP1 POP PUSH2 0x5CB JUMP JUMPDEST POP CALLVALUE PUSH2 0x1DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI PUSH2 0x71D PUSH32 0x0 PUSH2 0x1181 JUMP JUMPDEST SWAP2 PUSH2 0x747 PUSH32 0x0 PUSH2 0x12B6 JUMP JUMPDEST DUP2 MLOAD SWAP2 PUSH1 0x20 SWAP2 PUSH1 0x20 DUP5 ADD SWAP5 DUP5 DUP7 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP8 GT OR PUSH2 0x809 JUMPI POP PUSH2 0x7BE DUP3 PUSH1 0x20 SWAP3 DUP8 PUSH2 0x7B1 SWAP10 SWAP9 SWAP8 SWAP6 MSTORE PUSH0 DUP6 MSTORE DUP2 MLOAD SWAP9 DUP10 SWAP9 PUSH32 0xF00000000000000000000000000000000000000000000000000000000000000 DUP11 MSTORE PUSH1 0xE0 DUP7 DUP12 ADD MSTORE PUSH1 0xE0 DUP11 ADD SWAP1 PUSH2 0xE20 JUMP JUMPDEST SWAP2 DUP9 DUP4 SUB SWAP1 DUP10 ADD MSTORE PUSH2 0xE20 JUMP JUMPDEST SWAP2 CHAINID PUSH1 0x60 DUP8 ADD MSTORE ADDRESS PUSH1 0x80 DUP8 ADD MSTORE PUSH0 PUSH1 0xA0 DUP8 ADD MSTORE DUP6 DUP4 SUB PUSH1 0xC0 DUP8 ADD MSTORE MLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP3 SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x7F2 JUMPI POP POP POP POP SUB SWAP1 RETURN JUMPDEST DUP4 MLOAD DUP6 MSTORE DUP7 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x7E3 JUMP JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x867 PUSH2 0xE63 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1DC JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI DUP3 PUSH2 0x897 PUSH2 0xE63 JUMP JUMPDEST PUSH1 0x44 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP6 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP4 PUSH32 0xF7888AEC00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS SWAP1 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x57E JUMPI PUSH0 SWAP3 PUSH2 0x91E JUMPI JUMPDEST POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP DUP3 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x946 JUMPI JUMPDEST PUSH2 0x936 DUP2 DUP4 PUSH2 0xF85 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1DC JUMPI MLOAD SWAP1 PUSH0 PUSH2 0x917 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x92C JUMP JUMPDEST POP CALLVALUE PUSH2 0x1DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI DUP1 MLOAD SWAP2 PUSH32 0x4F037EE700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1E8 JUMPI PUSH0 SWAP2 PUSH2 0x1AF JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x1DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI CALLER PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD SWAP1 SWAP2 SSTORE STOP JUMPDEST POP CALLVALUE PUSH2 0x1DC JUMPI PUSH1 0x20 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH2 0xA3A CALLDATASIZE PUSH2 0xEA9 JUMP JUMPDEST SWAP4 SWAP2 SWAP5 PUSH2 0xA45 PUSH2 0xFDE JUMP JUMPDEST MLOAD SWAP4 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP5 AND SWAP3 LOG3 STOP JUMPDEST POP CALLVALUE PUSH2 0x1DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI PUSH1 0x20 SWAP1 PUSH2 0xA83 PUSH2 0x1049 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1DC JUMPI PUSH1 0x20 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH2 0xA3A CALLDATASIZE PUSH2 0xEA9 JUMP JUMPDEST POP CALLVALUE PUSH2 0x1DC JUMPI PUSH1 0x20 PUSH0 PUSH1 0x84 PUSH2 0xB25 CALLDATASIZE PUSH2 0xEA9 JUMP JUMPDEST DUP7 MLOAD PUSH32 0x15DACBEA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP9 DUP2 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x24 DUP10 ADD MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP9 ADD MSTORE PUSH1 0x64 DUP8 ADD MSTORE DUP6 SWAP3 DUP4 SWAP2 PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x57E JUMPI PUSH1 0x20 SWAP3 PUSH2 0x563 JUMPI POP MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI DUP1 MLOAD SWAP2 PUSH32 0xE4DC2AA400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1E8 JUMPI PUSH0 SWAP2 PUSH2 0x1AF JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1DC JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI PUSH1 0x20 PUSH2 0x510 SWAP3 PUSH2 0xC6B PUSH2 0xE63 JUMP JUMPDEST DUP4 MLOAD PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST POP CALLVALUE PUSH2 0x1DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI DUP1 MLOAD PUSH1 0x3 SLOAD SWAP1 SWAP2 DUP3 PUSH0 PUSH2 0xCEC DUP5 PUSH2 0xEEB JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 SWAP5 PUSH1 0x1 SWAP1 DUP7 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0xD79 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xD1E JUMPI JUMPDEST POP POP PUSH2 0x5ED SWAP3 SWAP2 PUSH2 0x5DE SWAP2 SUB DUP6 PUSH2 0xF85 JUMP JUMPDEST SWAP1 DUP6 SWAP3 POP PUSH1 0x3 PUSH0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP2 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0xD61 JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x5DE PUSH2 0xD0C JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0xD4B JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 DUP3 ADD MSTORE SWAP3 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD SWAP1 SWAP3 ADD SWAP3 POP DUP4 SWAP2 POP PUSH2 0x5DE SWAP1 POP PUSH2 0xD0C JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x1DC JUMPI PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP3 EQ DUP2 MSTORE RETURN JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1DC JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1DC JUMPI JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x1DC JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x1DC JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x1DC JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0xF32 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0xF05 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0xEFA JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF58 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF58 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x1DC JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x1DC JUMPI SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x101D JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND ADDRESS EQ DUP1 PUSH2 0x1158 JUMPI JUMPDEST ISZERO PUSH2 0x10B1 JUMPI PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP3 MSTORE PUSH32 0x0 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF58 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST POP PUSH32 0x0 CHAINID EQ PUSH2 0x1088 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x11D5 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x11AD JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x11A3 DUP4 PUSH2 0xF3C JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH32 0xB3512B0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH0 SLOAD SWAP2 PUSH2 0x11E7 DUP4 PUSH2 0xEEB JUMP JUMPDEST DUP1 DUP4 MSTORE SWAP3 PUSH1 0x20 SWAP1 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x1273 JUMPI POP PUSH1 0x1 EQ PUSH2 0x1215 JUMPI JUMPDEST POP POP PUSH2 0x1212 SWAP3 POP SUB DUP3 PUSH2 0xF85 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x125B JUMPI POP PUSH2 0x1212 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x1204 JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x1240 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 SWAP4 POP PUSH2 0x1212 SWAP6 SWAP3 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP2 POP AND DUP3 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x1204 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x12D8 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x11AD JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x11A3 DUP4 PUSH2 0xF3C JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD PUSH2 0x12ED DUP2 PUSH2 0xEEB JUMP JUMPDEST DUP1 DUP5 MSTORE SWAP4 PUSH1 0x20 SWAP2 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x1273 JUMPI POP PUSH1 0x1 EQ PUSH2 0x1315 JUMPI POP POP PUSH2 0x1212 SWAP3 POP SUB DUP3 PUSH2 0xF85 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x135C JUMPI POP PUSH2 0x1212 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x1204 JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x1341 JUMP JUMPDEST SWAP2 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP5 GT PUSH2 0x1403 JUMPI SWAP2 PUSH1 0x20 SWAP4 PUSH1 0x80 SWAP3 PUSH1 0xFF PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND DUP7 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE DUP3 DUP1 MSTORE PUSH1 0x1 GAS STATICCALL ISZERO PUSH2 0x13F8 JUMPI PUSH0 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x13EE JUMPI SWAP1 PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 PUSH1 0x1 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP POP POP PUSH0 SWAP2 PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x14B9 JUMPI DUP1 PUSH2 0x1420 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x1450 JUMPI PUSH32 0xF645EEDF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x1484 JUMPI POP PUSH32 0xFCE698F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x3 EQ PUSH2 0x148E JUMPI POP JUMP JUMPDEST PUSH32 0xD78BCE0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4F 0x28 0xAA SWAP13 ADDMOD PUSH11 0x68D05F85EDEC0D26EA50FC DUP2 0xB2 0xCD 0xB1 EQ PUSH11 0x887E28EA4939ADB0B06473 PUSH16 0x6C634300081B00330000000000000000 ","sourceMap":"1269:5749:57:-:0;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1269:5749:57;;;;;;;;;;;-1:-1:-1;;;;;1269:5749:57;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1269:5749:57;;3401:45:114;;;:::i;:::-;3393:53;;;;;3467:51;;;:::i;:::-;3456:62;;;;;1269:5749:57;;;;;3542:22:114;3528:36;;;;1269:5749:57;3591:25:114;;3574:42;;;;;;3644:13;3627:30;;1269:5749:57;;4204:80:114;;;;2079:95;;;;;;;;1269:5749:57;2079:95:114;;;3644:13;2079:95;;;;4278:4;3627:30;2079:95;;;3627:30;4204:80;;2079:95;1269:5749:57;;;;;;;;;;;;;;4194:91:114;;2079:95;3667:48;4278:4;2079:95;3725:27;409:14:72;;;;1269:5749:57;;;;;;;;2265:18;1269:5749;;;;;;;;;;;;;;-1:-1:-1;1269:5749:57;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:57;;;;;;;;;;-1:-1:-1;1269:5749:57;;;;-1:-1:-1;;;;1269:5749:57;;;;;;;;;;;;;;;;;;;;2293:22;1269:5749;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:57;;;;;;;;;;;;;;;;;;;;;;;;;;;2079:95:114;1269:5749:57;;;;;3627:30:114;1269:5749:57;;;;;2079:95:114;1269:5749:57;;;;;3528:36:114;1269:5749:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:57;;;;;4204:80:114;;;;;;1269:5749:57;;;-1:-1:-1;1269:5749:57;;-1:-1:-1;1269:5749:57;;-1:-1:-1;1269:5749:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:57;;;;;;;;-1:-1:-1;1269:5749:57;;-1:-1:-1;1269:5749:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:57;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:57;;;-1:-1:-1;1269:5749:57;;;;;;;;;;;;-1:-1:-1;1269:5749:57;;2293:22;1269:5749;;-1:-1:-1;1269:5749:57;;;;;-1:-1:-1;1269:5749:57;;;;;4204:80:114;;;;;;1269:5749:57;;;;-1:-1:-1;1269:5749:57;;-1:-1:-1;1269:5749:57;;-1:-1:-1;1269:5749:57;;;;;;;;;;-1:-1:-1;1269:5749:57;;;;;;;;;;;;;;;;-1:-1:-1;;1269:5749:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:57;;-1:-1:-1;1269:5749:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:57;;;;-1:-1:-1;1269:5749:57;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:57;;;;;-1:-1:-1;1269:5749:57;;;;;;;;;-1:-1:-1;1269:5749:57;;;;;;;-1:-1:-1;;1269:5749:57;;;;-1:-1:-1;;;;;1269:5749:57;;;;;;;;;;:::o;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1269:5749:57;;;;;;;;4204:80:114;1269:5749:57;;-1:-1:-1;;1269:5749:57;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1269:5749:57;;;;;;;;;;;;;;:::o;2914:340:110:-;1269:5749:57;;3059:2:110;;3037:24;;;3059:2;;;1269:5749:57;1854:2:110;1269:5749:57;;1840:16:110;1836:72;;1269:5749:57;;;;;2079:95:114;1269:5749:57;;;;;;1949:36:110;;3077:27;:::o;1269:5749:57:-;;;;;;;;;;1949:36:110;3077:27;:::o;1836:72::-;1269:5749:57;;;;1879:18:110;;;;;;;;;;;;1269:5749:57;;;;;;;;;;;;;;;;3432:13:114;1269:5749:57;;;;;;1854:2:110;1269:5749:57;-1:-1:-1;;1269:5749:57;;;1879:18:110;;;;3033:215;1269:5749:57;-1:-1:-1;;;;;1269:5749:57;;;;3432:13:114;1269:5749:57;;;;;;;;;;;;;;3033:215:110;1269:5749:57;;;;;;;;;;;3033:215:110;1269:5749:57;;;;;;;;;;;;;;;;3432:13:114;1269:5749:57;;;;;;;;;;;;;;;;;3432:13:114;1269:5749:57;1390:66:110;3195:42;:::o;1269:5749:57:-;;;;-1:-1:-1;1269:5749:57;;;;;4204:80:114;;;;;1269:5749:57;;3432:13:114;1269:5749:57;;;3432:13:114;1269:5749:57;;3432:13:114;1269:5749:57;;;;;;;;;;;;;;;;;;;;;3432:13:114;1269:5749:57;1390:66:110;3195:42;:::o;1269:5749:57:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:57;;;;;;;3432:13:114;1269:5749:57;;;;;3432:13:114;1269:5749:57;;;;;;;;;;;;;;;;;;;;;;;;;3432:13:114;1269:5749:57;;;;;;;;;;;;;;2914:340:110;1269:5749:57;;3059:2:110;;3037:24;;;3059:2;;;1269:5749:57;1854:2:110;1269:5749:57;;1840:16:110;1836:72;;1269:5749:57;;;;;2079:95:114;1269:5749:57;;;;;;1949:36:110;;3077:27;:::o;3033:215::-;1269:5749:57;;;-1:-1:-1;;;;;1269:5749:57;;;;;;;;;;;;;;;;;;3033:215:110;1269:5749:57;;;;;;;;;;;3033:215:110;1269:5749:57;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;1269:5749:57;;;;;;;;;;;;;1390:66:110;;3195:42::o;1269:5749:57:-;;;;-1:-1:-1;1269:5749:57;;;;;4204:80:114;;;1269:5749:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1390:66:110;3195:42;:::o;1269:5749:57:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":3718,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_7265":{"entryPoint":3683,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_addresst_addresst_uint256":{"entryPoint":3753,"id":null,"parameterSlots":1,"returnSlots":3},"abi_decode_bool_fromMemory":{"entryPoint":4038,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_address_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_string":{"entryPoint":3616,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":3819,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":3973,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_11167":{"entryPoint":3900,"id":null,"parameterSlots":1,"returnSlots":0},"fun_domainSeparatorV4":{"entryPoint":4169,"id":41960,"parameterSlots":0,"returnSlots":1},"fun_ensureOnlyVault":{"entryPoint":4062,"id":28148,"parameterSlots":0,"returnSlots":0},"fun_throwError":{"entryPoint":5134,"id":41836,"parameterSlots":2,"returnSlots":0},"fun_toStringWithFallback":{"entryPoint":4790,"id":41092,"parameterSlots":1,"returnSlots":1},"fun_toStringWithFallback_7271":{"entryPoint":4481,"id":41092,"parameterSlots":1,"returnSlots":1},"fun_tryRecover":{"entryPoint":4980,"id":41751,"parameterSlots":4,"returnSlots":3},"fun_useNonce":{"entryPoint":null,"id":40881,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"28110":[{"length":32,"start":373},{"length":32,"start":949},{"length":32,"start":1322},{"length":32,"start":1726},{"length":32,"start":2279},{"length":32,"start":2470},{"length":32,"start":2946},{"length":32,"start":3091},{"length":32,"start":4085}],"41858":[{"length":32,"start":4239}],"41860":[{"length":32,"start":4443}],"41862":[{"length":32,"start":4192}],"41864":[{"length":32,"start":4318}],"41866":[{"length":32,"start":4356}],"41869":[{"length":32,"start":1785}],"41872":[{"length":32,"start":1827}]},"linkReferences":{},"object":"6080604081815260049182361015610015575f80fd5b5f3560e01c90816301ffc9a714610db95750806306fdde0314610cc9578063095ea7b314610c4c57806318160ddd14610bba57806323b872dd14610b1157806323de665114610adf57806330adf81f14610aa5578063313ce56714610a8a5780633644e51514610a675780635687f2b814610a08578063627cdcb9146109df578063679aefce1461094d57806370a08231146108795780637ecebe001461083557806384b0196e146106e25780638d928af81461069257806395d89b4114610588578063a9059cbb14610493578063d505accf146101f15763dd62ed3e146100fb575f80fd5b346101dc57806003193601126101dc576020610115610e63565b606461011f610e86565b9473ffffffffffffffffffffffffffffffffffffffff808097875198899687957f927da10500000000000000000000000000000000000000000000000000000000875230908701521660248501521660448301527f0000000000000000000000000000000000000000000000000000000000000000165afa9081156101e8575f916101af575b6020925051908152f35b90506020823d6020116101e0575b816101ca60209383610f85565b810103126101dc5760209151906101a5565b5f80fd5b3d91506101bd565b513d5f823e3d90fd5b50346101dc5760e06003193601126101dc5761020b610e63565b90610214610e86565b604435926064359060843560ff811681036101dc57824211610468576102618273ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2080549060018201905590565b90855160208101907f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9825273ffffffffffffffffffffffffffffffffffffffff9586861694858a84015287891660608401528a608084015260a083015260c082015260c0815260e0810181811067ffffffffffffffff82111761043c5792610340926103379288958b525190206102f6611049565b908a51917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015260c43591604260a4359220611374565b9092919261140e565b1681810361040f5750505f8495966103b160209651988996879586947fe1f21c67000000000000000000000000000000000000000000000000000000008652850160409194939294606082019573ffffffffffffffffffffffffffffffffffffffff80921683521660208201520152565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19081156101e857506103e557005b6104069060203d602011610408575b6103fe8183610f85565b810190610fc6565b005b503d6103f4565b877f4b800e46000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b60418b7f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b82877f62791302000000000000000000000000000000000000000000000000000000005f525260245ffd5b50346101dc57806003193601126101dc576020610510926104b2610e63565b83517fbeabacc80000000000000000000000000000000000000000000000000000000081523392810192835273ffffffffffffffffffffffffffffffffffffffff909116602083015260243560408301529384918291606090910190565b03815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af191821561057e57602092610563575b505160018152f35b61057990833d8511610408576103fe8183610f85565b61055b565b50513d5f823e3d90fd5b5090346101dc575f6003193601126101dc57815191825f83546105aa81610eeb565b90818452602095600191876001821691825f1461064d5750506001146105f1575b5050506105ed92916105de910385610f85565b51928284938452830190610e20565b0390f35b5f90815286935091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b82841061063557505050820101816105de6105ed6105cb565b8054848a01860152889550879490930192810161061c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168782015293151560051b860190930193508492506105de91506105ed90506105cb565b50346101dc575f6003193601126101dc576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5090346101dc575f6003193601126101dc5761071d7f0000000000000000000000000000000000000000000000000000000000000000611181565b916107477f00000000000000000000000000000000000000000000000000000000000000006112b6565b815191602091602084019484861067ffffffffffffffff87111761080957506107be82602092876107b199989795525f855281519889987f0f000000000000000000000000000000000000000000000000000000000000008a5260e0868b015260e08a0190610e20565b9188830390890152610e20565b914660608701523060808701525f60a087015285830360c087015251918281520192915f5b8281106107f257505050500390f35b8351855286955093810193928101926001016107e3565b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b50346101dc5760206003193601126101dc5760209073ffffffffffffffffffffffffffffffffffffffff610867610e63565b165f5260028252805f20549051908152f35b5090346101dc57602091826003193601126101dc5782610897610e63565b604473ffffffffffffffffffffffffffffffffffffffff9485855196879485937ff7888aec00000000000000000000000000000000000000000000000000000000855230908501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa91821561057e575f9261091e575b5051908152f35b9091508281813d8311610946575b6109368183610f85565b810103126101dc5751905f610917565b503d61092c565b50346101dc575f6003193601126101dc578051917f4f037ee7000000000000000000000000000000000000000000000000000000008352309083015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156101e8575f916101af576020925051908152f35b346101dc575f6003193601126101dc57335f908152600260205260409020805460018101909155005b50346101dc5760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925610a3a36610ea9565b939194610a45610fde565b5193845273ffffffffffffffffffffffffffffffffffffffff908116941692a3005b50346101dc575f6003193601126101dc57602090610a83611049565b9051908152f35b50346101dc575f6003193601126101dc576020905160128152f35b50346101dc575f6003193601126101dc57602090517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b50346101dc5760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef610a3a36610ea9565b50346101dc5760205f6084610b2536610ea9565b86517f15dacbea000000000000000000000000000000000000000000000000000000008152339881019890985273ffffffffffffffffffffffffffffffffffffffff928316602489015290821660448801526064870152859283917f0000000000000000000000000000000000000000000000000000000000000000165af191821561057e5760209261056357505160018152f35b50346101dc575f6003193601126101dc578051917fe4dc2aa4000000000000000000000000000000000000000000000000000000008352309083015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156101e8575f916101af576020925051908152f35b50346101dc57806003193601126101dc57602061051092610c6b610e63565b83517fe1f21c670000000000000000000000000000000000000000000000000000000081523392810192835273ffffffffffffffffffffffffffffffffffffffff909116602083015260243560408301529384918291606090910190565b50346101dc575f6003193601126101dc5780516003549091825f610cec84610eeb565b808352602094600190866001821691825f14610d79575050600114610d1e575b50506105ed92916105de910385610f85565b9085925060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f925b828410610d6157505050820101816105de610d0c565b8054848a018601528895508794909301928101610d4b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168682015292151560051b850190920192508391506105de9050610d0c565b83346101dc5760206003193601126101dc5735907fffffffff0000000000000000000000000000000000000000000000000000000082168092036101dc577f01ffc9a700000000000000000000000000000000000000000000000000000000602092148152f35b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101dc57565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101dc57565b60031960609101126101dc5773ffffffffffffffffffffffffffffffffffffffff9060043582811681036101dc579160243590811681036101dc579060443590565b90600182811c92168015610f32575b6020831014610f0557565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691610efa565b6040810190811067ffffffffffffffff821117610f5857604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610f5857604052565b908160209103126101dc575180151581036101dc5790565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361101d57565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016301480611158575b156110b1577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff821117610f585760405251902090565b507f00000000000000000000000000000000000000000000000000000000000000004614611088565b60ff81146111d55760ff811690601f82116111ad57604051916111a383610f3c565b8252602082015290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040515f815f54916111e783610eeb565b808352926020906001908181169081156112735750600114611215575b505061121292500382610f85565b90565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b82841061125b57506112129450505081016020015f80611204565b85548785018301529485019486945092810192611240565b9050602093506112129592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f80611204565b60ff81146112d85760ff811690601f82116111ad57604051916111a383610f3c565b506040515f816001916001546112ed81610eeb565b8084529360209160018116908115611273575060011461131557505061121292500382610f85565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b82841061135c57506112129450505081016020015f80611204565b85548785018301529485019486945092810192611341565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411611403579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa156113f8575f5173ffffffffffffffffffffffffffffffffffffffff8116156113ee57905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b60048110156114b95780611420575050565b60018103611450577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b6002810361148457507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b60031461148e5750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffdfea26469706673582212204f28aa9c086a68d05f85edec0d26ea50fc81b2cdb1146a887e28ea4939adb0b064736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 DUP2 DUP2 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0xDB9 JUMPI POP DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0xCC9 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0xC4C JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0xBBA JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0xB11 JUMPI DUP1 PUSH4 0x23DE6651 EQ PUSH2 0xADF JUMPI DUP1 PUSH4 0x30ADF81F EQ PUSH2 0xAA5 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0xA8A JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0xA67 JUMPI DUP1 PUSH4 0x5687F2B8 EQ PUSH2 0xA08 JUMPI DUP1 PUSH4 0x627CDCB9 EQ PUSH2 0x9DF JUMPI DUP1 PUSH4 0x679AEFCE EQ PUSH2 0x94D JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x879 JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x835 JUMPI DUP1 PUSH4 0x84B0196E EQ PUSH2 0x6E2 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x692 JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x588 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x493 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x1F1 JUMPI PUSH4 0xDD62ED3E EQ PUSH2 0xFB JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1DC JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI PUSH1 0x20 PUSH2 0x115 PUSH2 0xE63 JUMP JUMPDEST PUSH1 0x64 PUSH2 0x11F PUSH2 0xE86 JUMP JUMPDEST SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP1 SWAP8 DUP8 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 PUSH32 0x927DA10500000000000000000000000000000000000000000000000000000000 DUP8 MSTORE ADDRESS SWAP1 DUP8 ADD MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE AND PUSH1 0x44 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1E8 JUMPI PUSH0 SWAP2 PUSH2 0x1AF JUMPI JUMPDEST PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1E0 JUMPI JUMPDEST DUP2 PUSH2 0x1CA PUSH1 0x20 SWAP4 DUP4 PUSH2 0xF85 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1DC JUMPI PUSH1 0x20 SWAP2 MLOAD SWAP1 PUSH2 0x1A5 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1BD JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1DC JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI PUSH2 0x20B PUSH2 0xE63 JUMP JUMPDEST SWAP1 PUSH2 0x214 PUSH2 0xE86 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP3 PUSH1 0x64 CALLDATALOAD SWAP1 PUSH1 0x84 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 SUB PUSH2 0x1DC JUMPI DUP3 TIMESTAMP GT PUSH2 0x468 JUMPI PUSH2 0x261 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH1 0x1 DUP3 ADD SWAP1 SSTORE SWAP1 JUMP JUMPDEST SWAP1 DUP6 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP3 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 DUP7 AND SWAP5 DUP6 DUP11 DUP5 ADD MSTORE DUP8 DUP10 AND PUSH1 0x60 DUP5 ADD MSTORE DUP11 PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 MSTORE PUSH1 0xE0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x43C JUMPI SWAP3 PUSH2 0x340 SWAP3 PUSH2 0x337 SWAP3 DUP9 SWAP6 DUP12 MSTORE MLOAD SWAP1 KECCAK256 PUSH2 0x2F6 PUSH2 0x1049 JUMP JUMPDEST SWAP1 DUP11 MLOAD SWAP2 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x2 DUP4 ADD MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0xC4 CALLDATALOAD SWAP2 PUSH1 0x42 PUSH1 0xA4 CALLDATALOAD SWAP3 KECCAK256 PUSH2 0x1374 JUMP JUMPDEST SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x140E JUMP JUMPDEST AND DUP2 DUP2 SUB PUSH2 0x40F JUMPI POP POP PUSH0 DUP5 SWAP6 SWAP7 PUSH2 0x3B1 PUSH1 0x20 SWAP7 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP7 MSTORE DUP6 ADD PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 SWAP5 PUSH1 0x60 DUP3 ADD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP4 MSTORE AND PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x1E8 JUMPI POP PUSH2 0x3E5 JUMPI STOP JUMPDEST PUSH2 0x406 SWAP1 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x408 JUMPI JUMPDEST PUSH2 0x3FE DUP2 DUP4 PUSH2 0xF85 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xFC6 JUMP JUMPDEST STOP JUMPDEST POP RETURNDATASIZE PUSH2 0x3F4 JUMP JUMPDEST DUP8 PUSH32 0x4B800E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH1 0x41 DUP12 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 DUP8 PUSH32 0x6279130200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1DC JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI PUSH1 0x20 PUSH2 0x510 SWAP3 PUSH2 0x4B2 PUSH2 0xE63 JUMP JUMPDEST DUP4 MLOAD PUSH32 0xBEABACC800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x57E JUMPI PUSH1 0x20 SWAP3 PUSH2 0x563 JUMPI JUMPDEST POP MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x579 SWAP1 DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x408 JUMPI PUSH2 0x3FE DUP2 DUP4 PUSH2 0xF85 JUMP JUMPDEST PUSH2 0x55B JUMP JUMPDEST POP MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI DUP2 MLOAD SWAP2 DUP3 PUSH0 DUP4 SLOAD PUSH2 0x5AA DUP2 PUSH2 0xEEB JUMP JUMPDEST SWAP1 DUP2 DUP5 MSTORE PUSH1 0x20 SWAP6 PUSH1 0x1 SWAP2 DUP8 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x64D JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x5F1 JUMPI JUMPDEST POP POP POP PUSH2 0x5ED SWAP3 SWAP2 PUSH2 0x5DE SWAP2 SUB DUP6 PUSH2 0xF85 JUMP JUMPDEST MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0xE20 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH0 SWAP1 DUP2 MSTORE DUP7 SWAP4 POP SWAP2 SWAP1 PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B JUMPDEST DUP3 DUP5 LT PUSH2 0x635 JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x5DE PUSH2 0x5ED PUSH2 0x5CB JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x61C JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 DUP3 ADD MSTORE SWAP4 ISZERO ISZERO PUSH1 0x5 SHL DUP7 ADD SWAP1 SWAP4 ADD SWAP4 POP DUP5 SWAP3 POP PUSH2 0x5DE SWAP2 POP PUSH2 0x5ED SWAP1 POP PUSH2 0x5CB JUMP JUMPDEST POP CALLVALUE PUSH2 0x1DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI PUSH2 0x71D PUSH32 0x0 PUSH2 0x1181 JUMP JUMPDEST SWAP2 PUSH2 0x747 PUSH32 0x0 PUSH2 0x12B6 JUMP JUMPDEST DUP2 MLOAD SWAP2 PUSH1 0x20 SWAP2 PUSH1 0x20 DUP5 ADD SWAP5 DUP5 DUP7 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP8 GT OR PUSH2 0x809 JUMPI POP PUSH2 0x7BE DUP3 PUSH1 0x20 SWAP3 DUP8 PUSH2 0x7B1 SWAP10 SWAP9 SWAP8 SWAP6 MSTORE PUSH0 DUP6 MSTORE DUP2 MLOAD SWAP9 DUP10 SWAP9 PUSH32 0xF00000000000000000000000000000000000000000000000000000000000000 DUP11 MSTORE PUSH1 0xE0 DUP7 DUP12 ADD MSTORE PUSH1 0xE0 DUP11 ADD SWAP1 PUSH2 0xE20 JUMP JUMPDEST SWAP2 DUP9 DUP4 SUB SWAP1 DUP10 ADD MSTORE PUSH2 0xE20 JUMP JUMPDEST SWAP2 CHAINID PUSH1 0x60 DUP8 ADD MSTORE ADDRESS PUSH1 0x80 DUP8 ADD MSTORE PUSH0 PUSH1 0xA0 DUP8 ADD MSTORE DUP6 DUP4 SUB PUSH1 0xC0 DUP8 ADD MSTORE MLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP3 SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x7F2 JUMPI POP POP POP POP SUB SWAP1 RETURN JUMPDEST DUP4 MLOAD DUP6 MSTORE DUP7 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x7E3 JUMP JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x1DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x867 PUSH2 0xE63 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x1DC JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI DUP3 PUSH2 0x897 PUSH2 0xE63 JUMP JUMPDEST PUSH1 0x44 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP6 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP4 PUSH32 0xF7888AEC00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS SWAP1 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x57E JUMPI PUSH0 SWAP3 PUSH2 0x91E JUMPI JUMPDEST POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP DUP3 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x946 JUMPI JUMPDEST PUSH2 0x936 DUP2 DUP4 PUSH2 0xF85 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1DC JUMPI MLOAD SWAP1 PUSH0 PUSH2 0x917 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x92C JUMP JUMPDEST POP CALLVALUE PUSH2 0x1DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI DUP1 MLOAD SWAP2 PUSH32 0x4F037EE700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1E8 JUMPI PUSH0 SWAP2 PUSH2 0x1AF JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x1DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI CALLER PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD SWAP1 SWAP2 SSTORE STOP JUMPDEST POP CALLVALUE PUSH2 0x1DC JUMPI PUSH1 0x20 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH2 0xA3A CALLDATASIZE PUSH2 0xEA9 JUMP JUMPDEST SWAP4 SWAP2 SWAP5 PUSH2 0xA45 PUSH2 0xFDE JUMP JUMPDEST MLOAD SWAP4 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP5 AND SWAP3 LOG3 STOP JUMPDEST POP CALLVALUE PUSH2 0x1DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI PUSH1 0x20 SWAP1 PUSH2 0xA83 PUSH2 0x1049 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1DC JUMPI PUSH1 0x20 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH2 0xA3A CALLDATASIZE PUSH2 0xEA9 JUMP JUMPDEST POP CALLVALUE PUSH2 0x1DC JUMPI PUSH1 0x20 PUSH0 PUSH1 0x84 PUSH2 0xB25 CALLDATASIZE PUSH2 0xEA9 JUMP JUMPDEST DUP7 MLOAD PUSH32 0x15DACBEA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP9 DUP2 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x24 DUP10 ADD MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP9 ADD MSTORE PUSH1 0x64 DUP8 ADD MSTORE DUP6 SWAP3 DUP4 SWAP2 PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x57E JUMPI PUSH1 0x20 SWAP3 PUSH2 0x563 JUMPI POP MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI DUP1 MLOAD SWAP2 PUSH32 0xE4DC2AA400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1E8 JUMPI PUSH0 SWAP2 PUSH2 0x1AF JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x1DC JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI PUSH1 0x20 PUSH2 0x510 SWAP3 PUSH2 0xC6B PUSH2 0xE63 JUMP JUMPDEST DUP4 MLOAD PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST POP CALLVALUE PUSH2 0x1DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI DUP1 MLOAD PUSH1 0x3 SLOAD SWAP1 SWAP2 DUP3 PUSH0 PUSH2 0xCEC DUP5 PUSH2 0xEEB JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 SWAP5 PUSH1 0x1 SWAP1 DUP7 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0xD79 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xD1E JUMPI JUMPDEST POP POP PUSH2 0x5ED SWAP3 SWAP2 PUSH2 0x5DE SWAP2 SUB DUP6 PUSH2 0xF85 JUMP JUMPDEST SWAP1 DUP6 SWAP3 POP PUSH1 0x3 PUSH0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP2 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0xD61 JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x5DE PUSH2 0xD0C JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0xD4B JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 DUP3 ADD MSTORE SWAP3 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD SWAP1 SWAP3 ADD SWAP3 POP DUP4 SWAP2 POP PUSH2 0x5DE SWAP1 POP PUSH2 0xD0C JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1DC JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x1DC JUMPI PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP3 EQ DUP2 MSTORE RETURN JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1DC JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1DC JUMPI JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x1DC JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x1DC JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x1DC JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0xF32 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0xF05 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0xEFA JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF58 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF58 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x1DC JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x1DC JUMPI SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x101D JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND ADDRESS EQ DUP1 PUSH2 0x1158 JUMPI JUMPDEST ISZERO PUSH2 0x10B1 JUMPI PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP3 MSTORE PUSH32 0x0 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF58 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST POP PUSH32 0x0 CHAINID EQ PUSH2 0x1088 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x11D5 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x11AD JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x11A3 DUP4 PUSH2 0xF3C JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH32 0xB3512B0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH0 SLOAD SWAP2 PUSH2 0x11E7 DUP4 PUSH2 0xEEB JUMP JUMPDEST DUP1 DUP4 MSTORE SWAP3 PUSH1 0x20 SWAP1 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x1273 JUMPI POP PUSH1 0x1 EQ PUSH2 0x1215 JUMPI JUMPDEST POP POP PUSH2 0x1212 SWAP3 POP SUB DUP3 PUSH2 0xF85 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x125B JUMPI POP PUSH2 0x1212 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x1204 JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x1240 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 SWAP4 POP PUSH2 0x1212 SWAP6 SWAP3 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP2 POP AND DUP3 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x1204 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x12D8 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x11AD JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x11A3 DUP4 PUSH2 0xF3C JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD PUSH2 0x12ED DUP2 PUSH2 0xEEB JUMP JUMPDEST DUP1 DUP5 MSTORE SWAP4 PUSH1 0x20 SWAP2 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x1273 JUMPI POP PUSH1 0x1 EQ PUSH2 0x1315 JUMPI POP POP PUSH2 0x1212 SWAP3 POP SUB DUP3 PUSH2 0xF85 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x135C JUMPI POP PUSH2 0x1212 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x1204 JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x1341 JUMP JUMPDEST SWAP2 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP5 GT PUSH2 0x1403 JUMPI SWAP2 PUSH1 0x20 SWAP4 PUSH1 0x80 SWAP3 PUSH1 0xFF PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND DUP7 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE DUP3 DUP1 MSTORE PUSH1 0x1 GAS STATICCALL ISZERO PUSH2 0x13F8 JUMPI PUSH0 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x13EE JUMPI SWAP1 PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 PUSH1 0x1 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP POP POP PUSH0 SWAP2 PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x14B9 JUMPI DUP1 PUSH2 0x1420 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x1450 JUMPI PUSH32 0xF645EEDF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x1484 JUMPI POP PUSH32 0xFCE698F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x3 EQ PUSH2 0x148E JUMPI POP JUMP JUMPDEST PUSH32 0xD78BCE0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4F 0x28 0xAA SWAP13 ADDMOD PUSH11 0x68D05F85EDEC0D26EA50FC DUP2 0xB2 0xCD 0xB1 EQ PUSH11 0x887E28EA4939ADB0B06473 PUSH16 0x6C634300081B00330000000000000000 ","sourceMap":"1269:5749:57:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2839:33;1269:5749;2839:33;;;4124:49;1269:5749;4124:49;;;1269:5749;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6973:36;1269:5749;6973:36;;;1269:5749;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1269:5749:57;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;3545:47;;;;;1269:5749;3545:47;;3570:4;3545:47;;;1269:5749;;;;;;;;;;;3545:6;1269:5749;3545:47;;;;;;;1269:5749;3545:47;;;1269:5749;;;;;;;;;3545:47;;;1269:5749;3545:47;;1269:5749;3545:47;;;;;;1269:5749;3545:47;;;:::i;:::-;;;1269:5749;;;;;;;3545:47;;;1269:5749;;;;3545:47;;;-1:-1:-1;3545:47:57;;;1269:5749;;;;;;;;;;;;;;-1:-1:-1;;1269:5749:57;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;5510:15;;:26;5506:97;;5696:16;;1269:5749;;-1:-1:-1;1269:5749:57;1121:7:109;1269:5749:57;;;-1:-1:-1;1269:5749:57;;;;;;;;;759:395:109;;5696:16:57;1269:5749;;;;5644:79;;1269:5749;1443:95;1269:5749;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5644:79;;1269:5749;;;;;;;;;;;;;7021:8:113;1269:5749:57;6967:25:113;1269:5749:57;;;;;;5634:90;;5053:20:114;;:::i;:::-;3515:233:115;;;;;;;;;;;;;;;1269:5749:57;;;3515:233:115;1269:5749:57;;3515:233:115;;6967:25:113;:::i;:::-;7021:8;;;;;:::i;:::-;1269:5749:57;5848:15;;;5844:88;;1269:5749;;;;;;5942:38;1269:5749;;;5942:38;;;;;;;1269:5749;5942:38;;;;1269:5749;;;;;;;;;;;;;;;;;;;;;;;;5942:38;;:6;;1269:5749;5942:38;;;;;;;;;;1269:5749;5942:38;;;1269:5749;5942:38;1269:5749;5942:38;;;;;;;;:::i;:::-;;;;;:::i;:::-;1269:5749;5942:38;;;;;5844:88;5886:35;;1269:5749;5886:35;1269:5749;;;;;5886:35;1269:5749;;;;;;;;;;5506:97;5559:33;;;1269:5749;5559:33;1269:5749;;;5559:33;1269:5749;;;;;;-1:-1:-1;;1269:5749:57;;;;;;3345:39;1269:5749;;;:::i;:::-;;;;3345:39;;3361:10;3345:39;;;1269:5749;;;;;;;;;;;;;;;;;;;;;;;;;;;;3345:39;;:6;1269:5749;;3345:6;1269:5749;3345:39;;;;;;;1269:5749;3345:39;;;1269:5749;;;;;;;3345:39;;;;;;;;;;;;;:::i;:::-;;;;1269:5749;;;;;;;;;;;;;;;;-1:-1:-1;;1269:5749:57;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;1269:5749:57;;;;;;;;;-1:-1:-1;;;1269:5749:57;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:57;;-1:-1:-1;1269:5749:57;;-1:-1:-1;1269:5749:57;;-1:-1:-1;1269:5749:57;;;;;;;;-1:-1:-1;;1269:5749:57;;;;;;;;;2951:6;1269:5749;;;;;;;;;;;-1:-1:-1;;1269:5749:57;;;;;6099:41:114;:5;:41;:::i;:::-;6554:8;:47;:8;:47;:::i;:::-;1269:5749:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;5590:13:114;;1269:5749:57;;;;5625:4:114;1269:5749:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:57;;;;;;;;6584:16:114;1269:5749:57;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1269:5749:57;;;;;;;;;;:::i;:::-;;;;624:7:109;1269:5749:57;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1269:5749:57;;;;;;;;:::i;:::-;;;;;;;3082:40;;;;;1269:5749;3082:40;;3107:4;3082:40;;;1269:5749;;;;;;3082:6;1269:5749;3082:40;;;;;;;1269:5749;3082:40;;;1269:5749;;;;;;;3082:40;;;;;;;;;;;;;;;;;:::i;:::-;;;1269:5749;;;;;3082:40;;;;;;;;;1269:5749;;;;;;-1:-1:-1;;1269:5749:57;;;;;;;6973:36;1269:5749;6973:36;;7003:4;6973:36;;;1269:5749;6973:36;2951:6;1269:5749;2951:6;1269:5749;2951:6;1269:5749;6973:36;;;;;;;1269:5749;6973:36;;;;1269:5749;;;;;;;;;;;;-1:-1:-1;;1269:5749:57;;;;;6339:10;-1:-1:-1;1269:5749:57;;;1121:7:109;1269:5749:57;;;;;;;;;;;;;;;;;;;;5175:32;1269:5749;;;:::i;:::-;436:67:72;;;;;:::i;:::-;1269:5749:57;;;;;;;;;;;5175:32;1269:5749;;;;;;;-1:-1:-1;;1269:5749:57;;;;;;6533:20;;;:::i;:::-;1269:5749;;;;;;;;;;;;-1:-1:-1;;1269:5749:57;;;;;;;;2727:2;1269:5749;;;;;;;;;-1:-1:-1;;1269:5749:57;;;;;;;;1443:95;1269:5749;;;;;;;;;4942:26;1269:5749;;;:::i;:::-;;;;;4124:49;1269:5749;;;;;:::i;:::-;;;;4124:49;;4144:10;4124:49;;;1269:5749;;;;;;;;;;;;;;;;;;;;;;;;;;;4124:6;1269:5749;4124:49;;;;;;;;;;;1269:5749;;4190:4;1269:5749;;;;;;;;;-1:-1:-1;;1269:5749:57;;;;;;;2839:33;1269:5749;2839:33;;2866:4;2839:33;;;1269:5749;2839:33;:6;1269:5749;2839:6;1269:5749;2839:6;1269:5749;2839:33;;;;;;;1269:5749;2839:33;;;;1269:5749;;;;;;;;;;;;;-1:-1:-1;;1269:5749:57;;;;;;3819:43;1269:5749;;;:::i;:::-;;;;3819:43;;3834:10;3819:43;;;1269:5749;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1269:5749:57;;;;;;;2434:8;1269:5749;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;2434:8;1269:5749;;;;;;;;;;;;-1:-1:-1;;;1269:5749:57;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:57;;-1:-1:-1;1269:5749:57;;-1:-1:-1;1269:5749:57;;;;;;;;-1:-1:-1;;1269:5749:57;;;;;;;;;;;;;;;876:25:116;1269:5749:57;861:40:116;;1269:5749:57;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:57;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;-1:-1:-1;;1269:5749:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;509:165:72:-;1269:5749:57;586:6:72;1269:5749:57;564:10:72;:29;560:108;;509:165::o;560:108::-;616:41;;;564:10;616:41;1269:5749:57;;616:41:72;;3845:262:114;1269:5749:57;3938:11:114;1269:5749:57;3929:4:114;3921:28;:63;;;3845:262;3917:184;;;4007:22;4000:29;:::o;3917:184::-;1269:5749:57;;4204:80:114;;;1269:5749:57;2079:95:114;1269:5749:57;;4226:11:114;1269:5749:57;2079:95:114;;1269:5749:57;4239:14:114;2079:95;;;1269:5749:57;4255:13:114;2079:95;;;1269:5749:57;3929:4:114;2079:95;;;1269:5749:57;2079:95:114;4204:80;;2079:95;1269:5749:57;;;;;;;;;;;;;;4194:91:114;;4060:30;:::o;3921:63::-;3970:14;;3953:13;:31;3921:63;;3385:267:110;1390:66;3508:46;;1390:66;;;2652:40;;2706:11;2715:2;2706:11;;2702:69;;1269:5749:57;;;;;;:::i;:::-;2367:90:110;;2311:2;1269:5749:57;;2367:90:110;3570:22;:::o;2702:69::-;2740:20;1269:5749:57;2740:20:110;;1269:5749:57;2740:20:110;3504:142;1269:5749:57;;;-1:-1:-1;1269:5749:57;-1:-1:-1;1269:5749:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1390:66:110;;;;;;;;:::i;:::-;3623:12;:::o;1269:5749:57:-;;;;-1:-1:-1;1269:5749:57;;;;-1:-1:-1;1269:5749:57;;;;;;;-1:-1:-1;1390:66:110;;-1:-1:-1;;;1269:5749:57;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:57;;;;;;;;;;;;1390:66:110;1269:5749:57;;;;;;;;;;;;;;;;;;;;;;3385:267:110;1390:66;3508:46;;1390:66;;;2652:40;;2706:11;2715:2;2706:11;;2702:69;;1269:5749:57;;;;;;:::i;3504:142:110:-;1269:5749:57;;;-1:-1:-1;6584:16:114;;1269:5749:57;6584:16:114;1269:5749:57;;;;:::i;:::-;;;;;;;6584:16:114;1269:5749:57;;;6584:16:114;;;;1269:5749:57;;;;;1390:66:110;;;;;;;;:::i;1269:5749:57:-;;;;6584:16:114;-1:-1:-1;1269:5749:57;;;-1:-1:-1;1269:5749:57;;;;;;;-1:-1:-1;1390:66:110;;-1:-1:-1;;;1269:5749:57;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1269:5749:57;;;;;;5140:1530:113;;;6199:66;6186:79;;6182:164;;1269:5749:57;;;;;;;;;;;;;;;;;;;;;;;;;;6457:24:113;;;;;;;;;1269:5749:57;6457:24:113;1269:5749:57;;;6495:20:113;6491:113;;6614:49;1269:5749:57;6614:49:113;1269:5749:57;5140:1530:113;:::o;6491:113::-;6531:62;1269:5749:57;6531:62:113;6457:24;6531:62;1269:5749:57;6531:62:113;:::o;6457:24::-;1269:5749:57;;;;;;;;;6182:164:113;6281:54;;;1269:5749:57;6281:54:113;6301:30;6281:54;;:::o;7196:532::-;1269:5749:57;;;;;;7282:29:113;;;7327:7;;:::o;7278:444::-;1269:5749:57;7378:38:113;;1269:5749:57;;7439:23:113;-1:-1:-1;7439:23:113;1269:5749:57;-1:-1:-1;7439:23:113;7374:348;7492:35;7483:44;;7492:35;;7550:46;;-1:-1:-1;7550:46:113;1269:5749:57;;;-1:-1:-1;7550:46:113;7479:243;7626:30;7617:39;7613:109;;7479:243;7196:532::o;7613:109::-;7679:32;-1:-1:-1;7679:32:113;1269:5749:57;;;-1:-1:-1;7679:32:113;1269:5749:57;;7291:20:113;1269:5749:57;;;;;7291:20:113;1269:5749:57"},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","PERMIT_TYPEHASH()":"30adf81f","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","eip712Domain()":"84b0196e","emitApproval(address,address,uint256)":"5687f2b8","emitTransfer(address,address,uint256)":"23de6651","getRate()":"679aefce","getVault()":"8d928af8","incrementNonce()":"627cdcb9","name()":"06fdde03","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","supportsInterface(bytes4)":"01ffc9a7","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault_\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"bptName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"bptSymbol\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"ERC2612ExpiredSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC2612InvalidSigner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"name\":\"InvalidAccountNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidShortString\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"StringTooLong\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"emitApproval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"emitTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"incrementNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the ERC-20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[ERC-2612].\",\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"ERC2612ExpiredSignature(uint256)\":[{\"params\":{\"deadline\":\"The permit deadline that expired\"}}],\"ERC2612InvalidSigner(address,address)\":[{\"params\":{\"owner\":\"The address of the owner (expected value of the signature provider)\",\"signer\":\"The address corresponding to the signature provider\"}}],\"InvalidAccountNonce(address,uint256)\":[{\"details\":\"The nonce used for an `account` is not the expected current nonce.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"emitApproval(address,address,uint256)\":{\"details\":\"Emit the Approval event. This function can only be called by the MultiToken.\"},\"emitTransfer(address,address,uint256)\":{\"details\":\"Emit the Transfer event. This function can only be called by the MultiToken.\"},\"getRate()\":{\"details\":\"The VaultExtension contract defines a default implementation (`getBptRate`) to calculate the rate of any given pool, which should be sufficient in nearly all cases.\",\"returns\":{\"_0\":\"rate Rate of the pool's BPT\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"ERC2612ExpiredSignature(uint256)\":[{\"notice\":\"Operation failed due to an expired permit signature.\"}],\"ERC2612InvalidSigner(address,address)\":[{\"notice\":\"Operation failed due to a non-matching signature.\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}]},\"kind\":\"user\",\"methods\":{\"getRate()\":{\"notice\":\"Get the BPT rate, which is defined as: pool invariant/total supply.\"},\"incrementNonce()\":{\"notice\":\"Increment the sender's nonce to revoke any currently granted (but not yet executed) `permit`.\"}},\"notice\":\"`BalancerPoolToken` is a fully ERC20-compatible token to be used as the base contract for Balancer Pools, with all the data and implementation delegated to the ERC20Multitoken contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol\":\"BalancerPoolToken\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x79f2ec4f7314bd1c3555368ff02bb9d382489dc8bbd7efbbf306f9a5084f3bec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a57c155451c5b1c1c59a27770754ccd9ba1be9344db6ac45b8744eba5fa4fa2f\",\"dweb:/ipfs/QmarkRwGaS3egg1FaQH6LibqjT6NocVUbD1jMPWtFxFaQV\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/BaseHooks.sol":{"BaseHooks":{"abi":[{"inputs":[],"name":"getHookFlags","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"}],"internalType":"struct HookFlags","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"enum AddLiquidityKind","name":"","type":"uint8"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsInRaw","type":"uint256[]"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onAfterAddLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onAfterInitialize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsOutRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onAfterRemoveLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountInScaled18","type":"uint256"},{"internalType":"uint256","name":"amountOutScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenInBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenOutBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AfterSwapParams","name":"","type":"tuple"}],"name":"onAfterSwap","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"enum AddLiquidityKind","name":"","type":"uint8"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onBeforeAddLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onBeforeInitialize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onBeforeRemoveLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"","type":"tuple"},{"internalType":"address","name":"","type":"address"}],"name":"onBeforeSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"","type":"tuple"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"onComputeDynamicSwapFeePercentage","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"","type":"tuple[]"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"","type":"tuple"}],"name":"onRegister","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getHookFlags()":"d77153a7","onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)":"976907cc","onAfterInitialize(uint256[],uint256,bytes)":"38be241d","onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)":"2754888d","onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))":"18b6eb55","onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)":"45421ec7","onBeforeInitialize(uint256[],bytes)":"1c149e28","onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)":"ba5f9f40","onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)":"5211fa77","onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)":"a0e8f5ac","onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))":"0b89f182"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"getHookFlags\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"}],\"internalType\":\"struct HookFlags\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onAfterAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onAfterInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onAfterRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenInBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenOutBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AfterSwapParams\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"onAfterSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onBeforeAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onBeforeInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onBeforeRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"onBeforeSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"onComputeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"onRegister\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Hook contracts that only implement a subset of callbacks can inherit from here instead of IHooks, and only override what they need. `VaultGuard` allows use of the `onlyVault` modifier, which isn't used in this abstract contract, but should be used in real derived hook contracts.\",\"kind\":\"dev\",\"methods\":{\"getHookFlags()\":{\"details\":\"The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero). `onRegister` is the only \\\"mandatory\\\" hook.\",\"returns\":{\"_0\":\"Flags indicating which hooks the contract supports\"}},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsInRaw\":\"Actual amounts of tokens added, sorted in token registration order\",\"amountsInScaled18\":\"Actual amounts of tokens added, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountOut\":\"Amount of pool tokens minted\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\",\"_1\":\"New amountsInRaw, potentially modified by the hook\"}},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"details\":\"Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"bptAmountOut\":\"Amount of pool tokens minted during initialization\",\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"_0\":\"True if the pool accepts the initialization results\"}},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsOutRaw\":\"Actual amount of tokens to receive, sorted in token registration order\",\"amountsOutScaled18\":\"Scaled amount of tokens to receive, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountIn\":\"Amount of pool tokens to burn\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\",\"_1\":\"New amountsOutRaw, potentially modified by the hook\"}},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"details\":\"Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\",\"_1\":\"New amount calculated, potentially modified by the hook\"}},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeAddLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"maxAmountsInScaled18\":\"Maximum amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeInitialize(uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with initialization\"}},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeRemoveLiquidity` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"maxBptAmountIn\":\"Maximum amount of input pool tokens\",\"minAmountsOutScaled18\":\"Minimum output amounts, sorted in token registration order\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\"}},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"details\":\"Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\"}},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"details\":\"Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\",\"staticSwapFeePercentage\":\"18-decimal FP value of the static swap fee percentage, for reference\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\",\"_1\":\"Value of the swap fee percentage, as an 18-decimal FP value\"}},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"details\":\"Returns true if registration was successful, and false to revert the pool registration. Make sure this function is properly implemented (e.g. check the factory, and check that the given pool is from the factory). The Vault address will be msg.sender.\",\"params\":{\"factory\":\"Address of the pool factory (contract deploying the pool)\",\"liquidityManagement\":\"Liquidity management flags indicating which functions are enabled\",\"pool\":\"Address of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"},\"returns\":{\"_0\":\"True if the hook allowed the registration, false otherwise\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getHookFlags()\":{\"notice\":\"Return the set of hooks implemented by the contract.\"},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed after adding liquidity.\"},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"notice\":\"Hook to be executed after pool initialization.\"},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed after removing liquidity.\"},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"notice\":\"Called after a swap to perform further actions once the balances have been updated by the swap.\"},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed before adding liquidity.\"},\"onBeforeInitialize(uint256[],bytes)\":{\"notice\":\"Hook executed before pool initialization.\"},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed before removing liquidity.\"},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"notice\":\"Called before a swap to give the Pool an opportunity to perform actions.\"},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"notice\":\"Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\"},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"notice\":\"Hook executed when a pool is registered with a non-zero hooks contract.\"}},\"notice\":\"Base for pool hooks contracts.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/BaseHooks.sol\":\"BaseHooks\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-vault/contracts/BaseHooks.sol\":{\"keccak256\":\"0xe987f0806641ac62fc66a6f3b0c6b58a44832c01a1c95f349eb880b00529756a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f8fc15c0fc44dd7032aa5ece3f281d1d83076719ef9b6f6442be79a62e2c1848\",\"dweb:/ipfs/QmVAZSVhzg6fb3ChkCeAPtLLwqnwmxdkxrenvJaf83trNC\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/BasePoolMath.sol":{"BasePoolMath":{"abi":[{"inputs":[{"internalType":"uint256","name":"invariantRatio","type":"uint256"},{"internalType":"uint256","name":"maxInvariantRatio","type":"uint256"}],"name":"InvariantRatioAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"invariantRatio","type":"uint256"},{"internalType":"uint256","name":"minInvariantRatio","type":"uint256"}],"name":"InvariantRatioBelowMin","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea264697066735822122072317ee83774e0a3b537beb5d1586907379fc695ce6ca5c1b0d099b7273fc8fa64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH19 0x317EE83774E0A3B537BEB5D1586907379FC695 0xCE PUSH13 0xA5C1B0D099B7273FC8FA64736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"343:24265:59:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea264697066735822122072317ee83774e0a3b537beb5d1586907379fc695ce6ca5c1b0d099b7273fc8fa64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH19 0x317EE83774E0A3B537BEB5D1586907379FC695 0xCE PUSH13 0xA5C1B0D099B7273FC8FA64736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"343:24265:59:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"invariantRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxInvariantRatio\",\"type\":\"uint256\"}],\"name\":\"InvariantRatioAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"invariantRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minInvariantRatio\",\"type\":\"uint256\"}],\"name\":\"InvariantRatioBelowMin\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"InvariantRatioAboveMax(uint256,uint256)\":[{\"details\":\"This value is determined by each pool type, and depends on the specific math used to compute the price curve.\",\"params\":{\"invariantRatio\":\"The ratio of the new invariant (after an operation) to the old\",\"maxInvariantRatio\":\"The maximum allowed invariant ratio\"}}],\"InvariantRatioBelowMin(uint256,uint256)\":[{\"details\":\"This value is determined by each pool type, and depends on the specific math used to compute the price curve.\",\"params\":{\"invariantRatio\":\"The ratio of the new invariant (after an operation) to the old\",\"minInvariantRatio\":\"The minimum allowed invariant ratio\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"InvariantRatioAboveMax(uint256,uint256)\":[{\"notice\":\"An add liquidity operation increased the invariant above the limit.\"}],\"InvariantRatioBelowMin(uint256,uint256)\":[{\"notice\":\"A remove liquidity operation decreased the invariant below the limit.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/BasePoolMath.sol\":\"BasePoolMath\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-vault/contracts/BasePoolMath.sol\":{\"keccak256\":\"0x28078c6fa4d55418c25505d4683642cb51fe55b2155ef7418db6c70631a30d6a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://864b91fdc2b69725bcc07f06d9adebe87117561582fa58f1e4410d8928cd205c\",\"dweb:/ipfs/QmWCDsbTxtmEMLhorqfGF1LDMHMqqVnV9sk9mUTPR7eog8\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/BatchRouter.sol":{"BatchRouter":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"contract IWETH","name":"weth","type":"address"},{"internalType":"contract IPermit2","name":"permit2","type":"address"},{"internalType":"string","name":"routerVersion","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"ErrorSelectorNotFound","type":"error"},{"inputs":[],"name":"EthTransfer","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[],"name":"InsufficientEth","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"inputs":[],"name":"TransientIndexOutOfBounds","type":"error"},{"inputs":[],"name":"getPermit2","outputs":[{"internalType":"contract IPermit2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSender","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWeth","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"internalType":"struct IRouterCommon.PermitApproval[]","name":"permitBatch","type":"tuple[]"},{"internalType":"bytes[]","name":"permitSignatures","type":"bytes[]"},{"components":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint160","name":"amount","type":"uint160"},{"internalType":"uint48","name":"expiration","type":"uint48"},{"internalType":"uint48","name":"nonce","type":"uint48"}],"internalType":"struct IAllowanceTransfer.PermitDetails[]","name":"details","type":"tuple[]"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"sigDeadline","type":"uint256"}],"internalType":"struct IAllowanceTransfer.PermitBatch","name":"permit2Batch","type":"tuple"},{"internalType":"bytes","name":"permit2Signature","type":"bytes"},{"internalType":"bytes[]","name":"multicallData","type":"bytes[]"}],"name":"permitBatchAndCall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct IBatchRouter.SwapPathStep[]","name":"steps","type":"tuple[]"},{"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"internalType":"struct IBatchRouter.SwapPathExactAmountIn[]","name":"paths","type":"tuple[]"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"querySwapExactIn","outputs":[{"internalType":"uint256[]","name":"pathAmountsOut","type":"uint256[]"},{"internalType":"address[]","name":"tokensOut","type":"address[]"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"components":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct IBatchRouter.SwapPathStep[]","name":"steps","type":"tuple[]"},{"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"internalType":"struct IBatchRouter.SwapPathExactAmountIn[]","name":"paths","type":"tuple[]"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct IBatchRouter.SwapExactInHookParams","name":"params","type":"tuple"}],"name":"querySwapExactInHook","outputs":[{"internalType":"uint256[]","name":"pathAmountsOut","type":"uint256[]"},{"internalType":"address[]","name":"tokensOut","type":"address[]"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct IBatchRouter.SwapPathStep[]","name":"steps","type":"tuple[]"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"}],"internalType":"struct IBatchRouter.SwapPathExactAmountOut[]","name":"paths","type":"tuple[]"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"querySwapExactOut","outputs":[{"internalType":"uint256[]","name":"pathAmountsIn","type":"uint256[]"},{"internalType":"address[]","name":"tokensIn","type":"address[]"},{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"components":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct IBatchRouter.SwapPathStep[]","name":"steps","type":"tuple[]"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"}],"internalType":"struct IBatchRouter.SwapPathExactAmountOut[]","name":"paths","type":"tuple[]"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct IBatchRouter.SwapExactOutHookParams","name":"params","type":"tuple"}],"name":"querySwapExactOutHook","outputs":[{"internalType":"uint256[]","name":"pathAmountsIn","type":"uint256[]"},{"internalType":"address[]","name":"tokensIn","type":"address[]"},{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct IBatchRouter.SwapPathStep[]","name":"steps","type":"tuple[]"},{"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"internalType":"struct IBatchRouter.SwapPathExactAmountIn[]","name":"paths","type":"tuple[]"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"swapExactIn","outputs":[{"internalType":"uint256[]","name":"pathAmountsOut","type":"uint256[]"},{"internalType":"address[]","name":"tokensOut","type":"address[]"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"components":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct IBatchRouter.SwapPathStep[]","name":"steps","type":"tuple[]"},{"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"internalType":"struct IBatchRouter.SwapPathExactAmountIn[]","name":"paths","type":"tuple[]"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct IBatchRouter.SwapExactInHookParams","name":"params","type":"tuple"}],"name":"swapExactInHook","outputs":[{"internalType":"uint256[]","name":"pathAmountsOut","type":"uint256[]"},{"internalType":"address[]","name":"tokensOut","type":"address[]"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct IBatchRouter.SwapPathStep[]","name":"steps","type":"tuple[]"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"}],"internalType":"struct IBatchRouter.SwapPathExactAmountOut[]","name":"paths","type":"tuple[]"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"swapExactOut","outputs":[{"internalType":"uint256[]","name":"pathAmountsIn","type":"uint256[]"},{"internalType":"address[]","name":"tokensIn","type":"address[]"},{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"components":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct IBatchRouter.SwapPathStep[]","name":"steps","type":"tuple[]"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"}],"internalType":"struct IBatchRouter.SwapPathExactAmountOut[]","name":"paths","type":"tuple[]"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct IBatchRouter.SwapExactOutHookParams","name":"params","type":"tuple"}],"name":"swapExactOutHook","outputs":[{"internalType":"uint256[]","name":"pathAmountsIn","type":"uint256[]"},{"internalType":"address[]","name":"tokensIn","type":"address[]"},{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}],"evm":{"bytecode":{"functionDebugData":{"finalize_allocation":{"entryPoint":1579,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_6470":{"entryPoint":1552,"id":null,"parameterSlots":1,"returnSlots":0},"fun_calculateBatchRouterStorageSlot":{"entryPoint":1614,"id":14065,"parameterSlots":1,"returnSlots":1},"fun_calculateSlot":{"entryPoint":1668,"id":6911,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6101c06040908082523461060c57614c6a803803809161001f828561062b565b833981019160808284031261060c5781516001600160a01b039390848116810361060c576020938481015192868416840361060c5784820151968716870361060c5760608201516001600160401b039283821161060c570192601f9082828601121561060c5784518481116105f857601f19958851946100a58b8987860116018761062b565b8286528a838301011161060c57815f928b8093018388015e8501015261010987516100cf81610610565b600b81526a14d95b99195c91dd585c9960aa1b8a8201528851906100f282610610565b600682526539b2b73232b960d11b8b830152610684565b60805260a05281519283116105f8575f54916001928381811c911680156105ee575b898210146105da57828111610597575b508791841160011461053a57839450908392915f9461052f575b50501b915f199060031b1c1916175f555b6101ba825161017481610610565b600c81526b2937baba32b921b7b6b6b7b760a11b8582015283519061019882610610565b60118252701a5cd4995d1d5c9b915d1a131bd8dad959607a1b86830152610684565b60c05260e05261010092835261020281516101d481610610565b601381527f63757272656e7453776170546f6b656e73496e000000000000000000000000008482015261064e565b91610120928352610245825161021781610610565b601481527f63757272656e7453776170546f6b656e734f75740000000000000000000000008382015261064e565b610140908152610287835161025981610610565b601981527f63757272656e7453776170546f6b656e496e416d6f756e7473000000000000008482015261064e565b9061016091825261030d6102cd855161029f81610610565b601a81527f63757272656e7453776170546f6b656e4f7574416d6f756e74730000000000008682015261064e565b936101809485527f736574746c6564546f6b656e416d6f756e74730000000000000000000000000086519161030183610610565b6013835282015261064e565b936101a09485525194614533968761073788396080518781816102c00152818161054b015281816118bb015261295a015260a05187818161025c01528181611a1801528181611c7c01528181611ebe01528181612115015281816122ae015281816123bf0152818161244d0152818161250f01528181612b4901528181612d2801528181612d7001528181612dee01528181612e9501528181612fa301528181613020015281816132b5015281816133e4015281816134810152818161354701528181613c0801528181613d2d01528181613f70015281816140a70152614303015260c0518781816118450152613756015260e051878181602201528181610f1501528181613b9a01528181613e8001528181613fc6015261414101525186818161088301528181610a4901528181610b5d0152818161200a01528181612090015281816131150152613d09015251858181612605015281816127ec015281816129f60152613674015251848181611cdf01528181611f2b01528181612311015281816125730152818161266a015281816127c801528181612bae0152613644015251838181611ddf01528181612631015281816128180152818161332a015281816135a501526136c7015251828181611d0801528181611f5c0152818161259d015281816126bd0152818161285001528181612bed015261336c01525181818161233b0152818161269b01528181612c1e01528181612ef201526136a50152f35b015192505f80610155565b91938316915f805283885f20935f5b8a888383106105805750505010610568575b505050811b015f55610166565b01515f1960f88460031b161c191690555f808061055b565b868601518855909601959485019487935001610549565b5f8052885f208380870160051c8201928b88106105d1575b0160051c019084905b8281106105c657505061013b565b5f81550184906105b8565b925081926105af565b634e487b7160e01b5f52602260045260245ffd5b90607f169061012b565b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b604081019081106001600160401b038211176105f857604052565b601f909101601f19168101906001600160401b038211908210176105f857604052565b6106819060405161065e81610610565b60118152702130ba31b42937baba32b921b7b6b6b7b760791b6020820152610684565b90565b906106f1603a60209260405193849181808401977f62616c616e6365722d6c6162732e76332e73746f726167652e000000000000008952805191829101603986015e830190601760f91b60398301528051928391018583015e015f8382015203601a81018452018261062b565b5190205f1981019081116107225760405190602082019081526020825261071782610610565b9051902060ff191690565b634e487b7160e01b5f52601160045260245ffdfe60806040526004361015610072575b3615610018575f80fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361004a57005b7f0540ddf6000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f3560e01c806308a465f614610f39578063107c279f14610ef657806319c6989f146108a75780631bbf2e2314610864578063286f580d146107cd5780632950286e146106e257806354fd4d50146105a55780635a3c39871461057c5780635e01eb5a146105375780638a12a08c146104dc5780638eb1b65e146103d5578063945ed33f1461035a578063ac9650d8146103165763e3b5dff40361000e5734610312576060806003193601126103125767ffffffffffffffff60043581811161031257610143903690600401611360565b61014b61123d565b6044359283116103125761016661016e933690600401611069565b939091612955565b905f5b835181101561019257805f876101896001948861172d565b51015201610171565b5061020661021461024f946101cc5f9488604051936101b0856111b6565b30855260208501525f196040850152866060850152369161141d565b60808201526040519283917f8a12a08c000000000000000000000000000000000000000000000000000000006020840152602483016114da565b03601f1981018352826111ee565b604051809481927fedfa3568000000000000000000000000000000000000000000000000000000008352602060048401526024830190611097565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1918215610307576102b9926102a4915f916102e5575b5060208082518301019101611670565b909391926102bd575b60405193849384610fcb565b0390f35b5f7f00000000000000000000000000000000000000000000000000000000000000005d6102ad565b61030191503d805f833e6102f981836111ee565b8101906115e9565b84610294565b6040513d5f823e3d90fd5b5f80fd5b60206003193601126103125760043567ffffffffffffffff81116103125761034e6103486102b9923690600401611038565b90611837565b604051918291826110bc565b346103125761036836610f66565b6103706119e1565b610378611a0e565b6103a66102b961038783612997565b919390946103a06060610399836113e0565b92016113f4565b906127c5565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d60405193849384610fcb565b60806003193601126103125767ffffffffffffffff60043581811161031257610402903690600401611360565b9061040b611253565b90606435908111610312576102066104a161024f946104676104325f953690600401611069565b61043b33612955565b9760405194610449866111b6565b3386526020860152602435604086015215156060850152369161141d565b60808201526040519283917f945ed33f0000000000000000000000000000000000000000000000000000000060208401526024830161176e565b604051809481927f48c89491000000000000000000000000000000000000000000000000000000008352602060048401526024830190611097565b34610312576102b96105056104f036610f66565b6104f86119e1565b610500611a0e565b611ad7565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f009492945d60405193849384610fcb565b34610312575f6003193601126103125760207f00000000000000000000000000000000000000000000000000000000000000005c6001600160a01b0360405191168152f35b34610312576102b961050561059036610f66565b6105986119e1565b6105a0611a0e565b612997565b34610312575f600319360112610312576040515f5f549060018260011c91600184169182156106d8575b60209485851084146106ab5785879486865291825f1461066d575050600114610614575b50610600925003836111ee565b6102b9604051928284938452830190611097565b5f808052859250907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8583106106555750506106009350820101856105f3565b8054838901850152879450869390920191810161063e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168582015261060095151560051b85010192508791506105f39050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f16926105cf565b346103125760606003193601126103125767ffffffffffffffff60043581811161031257610714903690600401611360565b9061071d61123d565b60443591821161031257610738610740923690600401611069565b929091612955565b905f5b845181101561077557806fffffffffffffffffffffffffffffffff604061076c6001948961172d565b51015201610743565b50610206610214856107935f9461024f97604051936101b0856111b6565b60808201526040519283917f5a3c39870000000000000000000000000000000000000000000000000000000060208401526024830161176e565b60806003193601126103125767ffffffffffffffff600435818111610312576107fa903690600401611360565b90610803611253565b90606435908111610312576102066104a161024f9461082a6104325f953690600401611069565b60808201526040519283917f08a465f6000000000000000000000000000000000000000000000000000000006020840152602483016114da565b34610312575f6003193601126103125760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b60a06003193601126103125767ffffffffffffffff60043511610312573660236004350112156103125767ffffffffffffffff60043560040135116103125736602460c060043560040135026004350101116103125760243567ffffffffffffffff81116103125761091d903690600401611038565b67ffffffffffffffff60443511610312576060600319604435360301126103125760643567ffffffffffffffff81116103125761095e903690600401611069565b60843567ffffffffffffffff81116103125761097e903690600401611038565b9490936109896119e1565b806004356004013503610ece575f5b600435600401358110610c2b5750505060443560040135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd60443536030182121561031257816044350160048101359067ffffffffffffffff82116103125760248260071b360391011361031257610a3c575b6102b961034e86865f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d611837565b6001600160a01b039492947f0000000000000000000000000000000000000000000000000000000000000000163b1561031257604051947f2a2d80d10000000000000000000000000000000000000000000000000000000086523360048701526060602487015260c486019260443501602481019367ffffffffffffffff60048301351161031257600482013560071b360385136103125760606064890152600482013590529192869260e484019291905f905b60048101358210610bad57505050602091601f19601f865f9787956001600160a01b03610b21602460443501611229565b16608488015260448035013560a48801526003198787030160448801528186528786013787868286010152011601030181836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1918215610307576102b99361034e93610b9e575b829450819350610a0c565b610ba7906111a2565b84610b93565b9195945091926001600160a01b03610bc487611229565b168152602080870135916001600160a01b03831680930361031257600492600192820152610bf460408901612942565b65ffffffffffff8091166040830152610c0f60608a01612942565b1660608201526080809101970193019050889495939291610af0565b610c40610c398284866119c6565b369161141d565b604051610c4c8161113d565b5f81526020915f838301525f60408301528281015190606060408201519101515f1a91835283830152604082015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc81850260043501360301126103125760405190610cb982611186565b610ccc602460c086026004350101611229565b808352610ce2604460c087026004350101611229565b908185850152610cfb606460c088026004350101611229565b60408581019190915260043560c08802016084810135606087015260a4810135608087015260c4013560a086015283015183519386015160ff91909116926001600160a01b0383163b15610312575f6001600160a01b03809460e4948b98849860c460c06040519c8d9b8c9a7fd505accf000000000000000000000000000000000000000000000000000000008c521660048b01523060248b0152608482820260043501013560448b0152026004350101356064880152608487015260a486015260c4850152165af19081610ebf575b50610eb557610dd8612913565b906001600160a01b0381511690836001600160a01b0381830151166044604051809581937fdd62ed3e00000000000000000000000000000000000000000000000000000000835260048301523060248301525afa918215610307575f92610e85575b506060015103610e505750506001905b01610998565b805115610e5d5780519101fd5b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b9091508381813d8311610eae575b610e9d81836111ee565b810103126103125751906060610e3a565b503d610e93565b5050600190610e4a565b610ec8906111a2565b8a610dcb565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610312575f6003193601126103125760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461031257610f4736610f66565b610f4f6119e1565b610f57611a0e565b6103a66102b961038783611ad7565b60031990602082820112610312576004359167ffffffffffffffff8311610312578260a0920301126103125760040190565b9081518082526020808093019301915f5b828110610fb7575050505090565b835185529381019392810192600101610fa9565b939290610fe090606086526060860190610f98565b936020948181036020830152602080855192838152019401905f5b81811061101b575050506110189394506040818403910152610f98565b90565b82516001600160a01b031686529487019491870191600101610ffb565b9181601f840112156103125782359167ffffffffffffffff8311610312576020808501948460051b01011161031257565b9181601f840112156103125782359167ffffffffffffffff8311610312576020838186019501011161031257565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b8483106110f15750505050505090565b909192939495848061112d837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528a51611097565b98019301930191949392906110e1565b6060810190811067ffffffffffffffff82111761115957604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60c0810190811067ffffffffffffffff82111761115957604052565b67ffffffffffffffff811161115957604052565b60a0810190811067ffffffffffffffff82111761115957604052565b60e0810190811067ffffffffffffffff82111761115957604052565b90601f601f19910116810190811067ffffffffffffffff82111761115957604052565b67ffffffffffffffff81116111595760051b60200190565b35906001600160a01b038216820361031257565b602435906001600160a01b038216820361031257565b60443590811515820361031257565b91909160808184031261031257604090815191608083019467ffffffffffffffff9584811087821117611159578252839561129c84611229565b85526020908185013590811161031257840182601f82011215610312578035906112c582611211565b936112d2865195866111ee565b8285528385019084606080950284010192818411610312578501915b8383106113105750505050508401528181013590830152606090810135910152565b8483830312610312578751906113258261113d565b61132e84611229565b825261133b878501611229565b8783015288840135908115158203610312578288928b899501528152019201916112ee565b81601f820112156103125780359160209161137a84611211565b9361138860405195866111ee565b808552838086019160051b8301019280841161031257848301915b8483106113b35750505050505090565b823567ffffffffffffffff81116103125786916113d584848094890101611262565b8152019201916113a3565b356001600160a01b03811681036103125790565b3580151581036103125790565b67ffffffffffffffff811161115957601f01601f191660200190565b92919261142982611401565b9161143760405193846111ee565b829481845281830111610312578281602093845f960137010152565b9060808101916001600160a01b03808251168352602093848301519460808186015285518092528060a086019601925f905b8382106114a75750505050506060816040829301516040850152015191015290565b84518051821689528084015182168985015260409081015115159089015260609097019693820193600190910190611485565b91909160209081815260c08101916001600160a01b0385511681830152808501519260a06040840152835180915260e08301918060e08360051b8601019501925f905b8382106115595750505050506080846040611018959601516060840152606081015115158284015201519060a0601f1982850301910152611097565b90919293958380611594837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff208a600196030186528a51611453565b9801920192019093929161151d565b81601f82011215610312578051906115ba82611401565b926115c860405194856111ee565b8284526020838301011161031257815f9260208093018386015e8301015290565b9060208282031261031257815167ffffffffffffffff81116103125761101892016115a3565b9080601f830112156103125781519060209161162a81611211565b9361163860405195866111ee565b81855260208086019260051b82010192831161031257602001905b828210611661575050505090565b81518152908301908301611653565b90916060828403126103125781519167ffffffffffffffff92838111610312578461169c91830161160f565b936020808301518581116103125783019082601f83011215610312578151916116c483611211565b926116d260405194856111ee565b808452828085019160051b83010191858311610312578301905b82821061170e575050505093604083015190811161031257611018920161160f565b81516001600160a01b03811681036103125781529083019083016116ec565b80518210156117415760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b91909160209081815260c08101916001600160a01b0385511681830152808501519260a06040840152835180915260e08301918060e08360051b8601019501925f905b8382106117ed5750505050506080846040611018959601516060840152606081015115158284015201519060a0601f1982850301910152611097565b90919293958380611828837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff208a600196030186528a51611453565b980192019201909392916117b1565b919061184233612955565b907f000000000000000000000000000000000000000000000000000000000000000093845c61194d576001906001865d61187b83611211565b9261188960405194856111ee565b808452601f1961189882611211565b015f5b81811061193c5750505f5b8181106118f35750505050905f6118e892945d7f0000000000000000000000000000000000000000000000000000000000000000805c916118ea575b5061374d565b565b5f905d5f6118e2565b806119205f80611908610c398996888a6119c6565b602081519101305af4611919612913565b90306141ee565b61192a828861172d565b52611935818761172d565b50016118a6565b80606060208093890101520161189b565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610312570180359067ffffffffffffffff82116103125760200191813603831361031257565b90821015611741576119dd9160051b810190611975565b9091565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c61194d576001905d565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163303611a4057565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b90611a7682611211565b611a8360405191826111ee565b828152601f19611a938294611211565b0190602036910137565b91908201809211611aaa57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b6040810135421161275f5790611afa611af36020840184613790565b9050611a6c565b915f5b611b0a6020830183613790565b905081101561266357611b3481611b2f611b276020860186613790565b3693916137e4565b611262565b936040850151936001600160a01b0386511690602087015180511561174157602001516040015115158061265a575b156125ff57611b88611b74866113e0565b8784611b8260608a016113f4565b92613b79565b5f5b6020880151518110156125ef57611b9f613824565b6020890151515f198101908111611aaa578214806020830152821582525f146125e8576060890151905b611bd78360208c015161172d565b51604081015190919015611d8a57611c6f6001600160a01b03835116936001600160a01b03881685145f14611d83576001945b60405195611c17876111b6565b5f8752611c238161385a565b6020870152604086015260609485918d838301526080820152604051809381927f43583be500000000000000000000000000000000000000000000000000000000835260048301613abe565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1938415610307575f94611d4c575b50506020015115611d3257816001600160a01b036020611d2c9360019695611cd48c8c61172d565b5201611d03828251167f0000000000000000000000000000000000000000000000000000000000000000614252565b5051167f000000000000000000000000000000000000000000000000000000000000000061429c565b01611b8a565b602001519097506001600160a01b03169250600190611d2c565b60209294509081611d7192903d10611d7c575b611d6981836111ee565b810190613891565b91505092905f611cac565b503d611d5f565b5f94611c0a565b888a6001600160a01b038495945116806001600160a01b038a16145f146121ce575050815115905061210a57888a801515806120ef575b611fe9575b6001600160a01b03939291611e7982611eb1978b5f95897f0000000000000000000000000000000000000000000000000000000000000000921680885282602052604088205c611fd8575b5050505b6001611e388983511660208401998b8b51169080158a14611fd2575083916142b5565b999092511694611e4d60809182810190611975565b93909460405197611e5d89611186565b885230602089015260408801526060870152850152369161141d565b60a0820152604051809681927f2145789700000000000000000000000000000000000000000000000000000000835260048301613a4d565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1938415610307575f94611fa8575b506020015115611f855791611f58826001600160a01b0360019695611f16611f80968661172d565b51611f218d8d61172d565b52611f4f828251167f0000000000000000000000000000000000000000000000000000000000000000614252565b5051169261172d565b51907f000000000000000000000000000000000000000000000000000000000000000061429c565b611d2c565b98506001929450611f9e906001600160a01b039261172d565b5197511692611d2c565b6020919450611fc8903d805f833e611fc081836111ee565b810190613a05565b5094919050611eee565b916142b5565b611fe1926143d3565b5f8281611e11565b50611ff6909291926113e0565b916120008b61438f565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b15610312576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039485166004820152306024820152908416604482015292871660648401525f8380608481010381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af18015610307578a611e798d611eb1976001600160a01b03975f956120e0575b50975092505091929350611dc6565b6120e9906111a2565b5f6120d1565b506120f9826113e0565b6001600160a01b0316301415611dc1565b906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916001600160a01b0384511692803b15610312576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03949094166004850152306024850152604484018c90525f908490606490829084905af18015610307578a611e798d611eb1976001600160a01b03975f956121bf575b50611e15565b6121c8906111a2565b5f6121b9565b6001600160a01b0360208796949701511690898183145f146124735761226992506122a1979150600161220f5f96956001600160a01b0393848b51166142b5565b5092828951169560208901511515881461244a5761222c826113e0565b945b61223d60809384810190611975565b9590966040519961224d8b611186565b8a5216602089015260408801526060870152850152369161141d565b60a0820152604051809581927f4af29ec400000000000000000000000000000000000000000000000000000000835260048301613994565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1928315610307575f93612420575b50602001511561235f57816001600160a01b036020611f8093600196956123058c8c61172d565b526123358383830151167f0000000000000000000000000000000000000000000000000000000000000000614252565b500151167f000000000000000000000000000000000000000000000000000000000000000061429c565b60208181015191516040517f15afd4090000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101859052939a50909116945081806044810103815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af18015610307576123f5575b50600190611d2c565b602090813d8311612419575b61240b81836111ee565b81010312610312575f6123ec565b503d612401565b6020919350612440903d805f833e61243881836111ee565b810190613918565b50939190506122de565b837f0000000000000000000000000000000000000000000000000000000000000000169461222e565b6001600160a01b03612502956124ca93949561249460809b8c810190611975565b939094604051976124a4896111d2565b5f8952602089015216604087015260609a8b978888015286015260a0850152369161141d565b60c0820152604051809381927f2bfb780c000000000000000000000000000000000000000000000000000000008352600483016138ac565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1938415610307575f946125c1575b50506020015115611d3257816001600160a01b036020611f8093600196956125678c8c61172d565b526125978383830151167f0000000000000000000000000000000000000000000000000000000000000000614252565b500151167f000000000000000000000000000000000000000000000000000000000000000061429c565b602092945090816125dd92903d10611d7c57611d6981836111ee565b91505092905f61253f565b5f90611bc9565b5091955090935050600101611afd565b612629827f0000000000000000000000000000000000000000000000000000000000000000614252565b5061265586837f000000000000000000000000000000000000000000000000000000000000000061429c565b611b88565b50321515611b63565b505061268e7f0000000000000000000000000000000000000000000000000000000000000000613b0d565b916126998351611a6c565b7f0000000000000000000000000000000000000000000000000000000000000000917f000000000000000000000000000000000000000000000000000000000000000091905f5b8651811015612756576001906001600160a01b03806126ff838b61172d565b51165f528560205261272d60405f205c8261271a858d61172d565b51165f528860205260405f205c90611a9d565b612737838761172d565b52612742828a61172d565b51165f52856020525f604081205d016126e0565b50949391509150565b7fe08b8af0000000000000000000000000000000000000000000000000000000005f5260045ffd5b905f198201918213600116611aaa57565b7f80000000000000000000000000000000000000000000000000000000000000008114611aaa575f190190565b907f000000000000000000000000000000000000000000000000000000000000000090815c7f0000000000000000000000000000000000000000000000000000000000000000612815815c612787565b907f0000000000000000000000000000000000000000000000000000000000000000915b5f8112156128d65750505061284d90612787565b917f0000000000000000000000000000000000000000000000000000000000000000925b5f81121561288657505050506118e89061374d565b6128d190825f526128cb60205f83828220015c91828252888152886040916128be8a8d8587205c906001600160a01b03891690613f4c565b8484525281205d84613ea9565b50612798565b612871565b61290e90825f526128cb60205f8a8785848420015c938484528181526128be8c6040948587205c906001600160a01b03891690613b79565b612839565b3d1561293d573d9061292482611401565b9161293260405193846111ee565b82523d5f602084013e565b606090565b359065ffffffffffff8216820361031257565b905f917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03815c161561298d575050565b909192505d600190565b906040820135421161275f576129b3611af36020840184613790565b915f5b6129c36020830183613790565b905081101561366d576129e081611b2f611b276020860186613790565b606081015190612a1a6001600160a01b038251167f0000000000000000000000000000000000000000000000000000000000000000614252565b506020810151515f198101908111611aaa575b5f811215612a40575050506001016129b6565b612a4e81602084015161172d565b51612a57613824565b9082156020830152602084015151805f19810111611aaa575f1901831480835261362b575b6020820151156135f05760408401516001600160a01b03855116915b604081015115612cb95783916001600160a01b036060926020612b3c970151151580612cb0575b612c89575b5116906001600160a01b0385168203612c82576001915b60405192612ae8846111b6565b60018452612af58161385a565b6020840152604083015288838301526080820152604051809581927f43583be500000000000000000000000000000000000000000000000000000000835260048301613abe565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19283156103075787918b915f95612c5b575b506020015115612c4c57612c429284612b9e612c47979694612c119461172d565b52612bd26001600160a01b0382167f0000000000000000000000000000000000000000000000000000000000000000614252565b506001600160a01b03612be98460408a015161384d565b91167f000000000000000000000000000000000000000000000000000000000000000061429c565b6001600160a01b038551167f000000000000000000000000000000000000000000000000000000000000000061429c565b612798565b612a2d565b505050612c4791935092612798565b6020919550612c789060603d606011611d7c57611d6981836111ee565b5095919050612b7d565b5f91612adb565b612cab612c958d6113e0565b8d8b611b828860408884511693015193016113f4565b612ac4565b50321515612abf565b906001600160a01b03825116806001600160a01b038516145f146131d3575060208401516130e55750604051927f967870920000000000000000000000000000000000000000000000000000000084526001600160a01b03831660048501526020846024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa938415610307575f946130b1575b5083916001600160a01b038151166001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b15610312576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015230602482015260448101959095525f8580606481010381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af190811561030757612e88955f926130a2575b505b611e796001600160a01b03612e448b8285511683602087015116906142b5565b50925116918c6002612e5b60809283810190611975565b92909360405196612e6b88611186565b87523060208801528960408801526060870152850152369161141d565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1938415610307575f9461307f575b506020015115612f6b57908291612c479493612ee1898d61172d565b52612f16836001600160a01b0384167f000000000000000000000000000000000000000000000000000000000000000061429c565b80831080612f50575b612f2c575b505050612798565b612f42612f4893612f3c8b6113e0565b9261384d565b916143e8565b5f8080612f24565b50306001600160a01b03612f638b6113e0565b161415612f1f565b9450908094808210612f84575b505050612c4790612798565b91612f946020926130139461384d565b90612fc9826001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016836143e8565b60405193849283927f15afd40900000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561030757613054575b8080612f78565b602090813d8311613078575b61306a81836111ee565b81010312610312575f61304d565b503d613060565b6020919450613097903d805f833e611fc081836111ee565b509094919050612ec5565b6130ab906111a2565b5f612e22565b9093506020813d6020116130dd575b816130cd602093836111ee565b810103126103125751925f612d58565b3d91506130c0565b90926130f0896113e0565b6001600160a01b033091160361310b575b5f612e8894612e24565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169361313f8a6113e0565b6131488461438f565b90863b15610312576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152306024820152918116604483015285166064820152945f908690608490829084905af190811561030757612e88955f926131c4575b50945050613101565b6131cd906111a2565b5f6131bb565b6001600160a01b036020849695940151168a8282145f146134a7575050506132a861320a5f92846001600160a01b038851166142b5565b92906132708c6001600160a01b03808a51169389511515861461347b5761323f613233846113e0565b935b6080810190611975565b9290936040519661324f88611186565b875216602086015260408501528c606085015260026080850152369161141d565b60a0820152604051809381927f4af29ec400000000000000000000000000000000000000000000000000000000835260048301613994565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610307575f91613460575b5060208401518c908a90156134465783836001600160a01b039361331f613325946133188f9c9b9a989961334e9a61172d565b519261172d565b5261172d565b5191167f000000000000000000000000000000000000000000000000000000000000000061429c565b511561339057612c4792916001600160a01b036020612c42930151167f00000000000000000000000000000000000000000000000000000000000000006143d3565b516040517f15afd4090000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201526024810191909152602081806044810103815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156103075761341b575b50612c4790612798565b602090813d831161343f575b61343181836111ee565b81010312610312575f613411565b503d613427565b50509091506134579293965061172d565b5193849161334e565b61347491503d805f833e61243881836111ee565b90506132e5565b61323f827f00000000000000000000000000000000000000000000000000000000000000001693613235565b61353a965090613502916060948b6134c760809998999384810190611975565b939094604051976134d7896111d2565b6001895260208901526001600160a01b038b1660408901528888015286015260a0850152369161141d565b60c0820152604051809581927f2bfb780c000000000000000000000000000000000000000000000000000000008352600483016138ac565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19283156103075787918b915f956135c9575b506020015115612c4c57612c4292846135a1612c479796946001600160a01b039461172d565b52167f000000000000000000000000000000000000000000000000000000000000000061429c565b60209195506135e69060603d606011611d7c57611d6981836111ee565b509591905061357b565b6fffffffffffffffffffffffffffffffff6001600160a01b0360206136218188015161361b88612787565b9061172d565b5101511691612a98565b613668856001600160a01b0360208401611d03828251167f0000000000000000000000000000000000000000000000000000000000000000614252565b612a7c565b50506136987f0000000000000000000000000000000000000000000000000000000000000000613b0d565b916136a38351611a6c565b7f0000000000000000000000000000000000000000000000000000000000000000917f000000000000000000000000000000000000000000000000000000000000000091905f5b8651811015612756576001906001600160a01b0380613709838b61172d565b51165f528560205261372460405f205c8261271a858d61172d565b61372e838761172d565b52613739828a61172d565b51165f52856020525f604081205d016136ea565b47801561378c577f00000000000000000000000000000000000000000000000000000000000000005c61378c576001600160a01b036118e89216614172565b5050565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610312570180359067ffffffffffffffff821161031257602001918160051b3603831361031257565b91908110156117415760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8181360301821215610312570190565b604051906040820182811067ffffffffffffffff821117611159576040525f6020838281520152565b91908203918211611aaa57565b6002111561386457565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b90816060910312610312578051916040602083015192015190565b61010060c0611018936020845280516138c48161385a565b602085015260208101516001600160a01b0380911660408601528060408301511660608601526060820151166080850152608081015160a085015260a08101518285015201519160e0808201520190611097565b90916060828403126103125781519167ffffffffffffffff92838111610312578461394491830161160f565b9360208201519360408301519081116103125761101892016115a3565b9081518082526020808093019301915f5b828110613980575050505090565b835185529381019392810192600101613972565b602081526001600160a01b0380835116602083015260208301511660408201526139cd604083015160c0606084015260e0830190613961565b906060830151608082015260808301516005811015613864576110189360a0918284015201519060c0601f1982850301910152611097565b916060838303126103125782519260208101519267ffffffffffffffff938481116103125781613a3691840161160f565b9360408301519081116103125761101892016115a3565b602081526001600160a01b03808351166020830152602083015116604082015260408201516060820152613a90606083015160c0608084015260e0830190613961565b9060808301516004811015613864576110189360a0918284015201519060c0601f1982850301910152611097565b91909160808060a08301948051613ad48161385a565b84526020810151613ae48161385a565b60208501526001600160a01b036040820151166040850152606081015160608501520151910152565b90815c613b1981611211565b613b2660405191826111ee565b818152613b3282611211565b601f196020910136602084013781945f5b848110613b51575050505050565b600190825f5280845f20015c6001600160a01b03613b6f838861172d565b9116905201613b43565b919280613e74575b15613ced575050804710613cc5576001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001691823b1561031257604051907fd0e30db00000000000000000000000000000000000000000000000000000000082525f915f8160048185895af1801561030757613cae575b506044602092937f00000000000000000000000000000000000000000000000000000000000000001694613c348387836143e8565b8460405196879485937f15afd409000000000000000000000000000000000000000000000000000000008552600485015260248401525af1908115613ca25750613c7b5750565b602090813d8311613c9b575b613c9181836111ee565b8101031261031257565b503d613c87565b604051903d90823e3d90fd5b60209250613cbb906111a2565b60445f9250613bff565b7fa01a9df6000000000000000000000000000000000000000000000000000000005f5260045ffd5b90915f9080613cfd575b50505050565b6001600160a01b0393847f00000000000000000000000000000000000000000000000000000000000000001694807f00000000000000000000000000000000000000000000000000000000000000001691613d578461438f565b96803b15610312576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152848316602482015297821660448901529186161660648701525f908690608490829084905af194851561030757613e1c95613e60575b5082936020936040518097819582947f15afd40900000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03925af1908115613ca25750613e35575b808080613cf7565b602090813d8311613e59575b613e4b81836111ee565b81010312610312575f613e2d565b503d613e41565b60209350613e6d906111a2565b5f92613dcb565b506001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001690821614613b81565b6001810191805f5260209183835260405f205c8015155f14613f43575f1990818101835c8380820191828403613f06575b5050505050815c81810192818411611aaa575f93815d835284832001015d5f52525f604081205d600190565b613f13613f2393886144cc565b865f52885f2001015c91856144cc565b835f52808383885f2001015d5f5285855260405f205d5f80808381613eda565b50505050505f90565b909392935f94831561416a5780614135575b1561409857506001600160a01b0390817f000000000000000000000000000000000000000000000000000000000000000016803b15610312576040517fae6393290000000000000000000000000000000000000000000000000000000081525f8160648183887f000000000000000000000000000000000000000000000000000000000000000016968760048401523060248401528a60448401525af1801561030757614085575b508086913b156140815781906024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083528960048401525af180156140765761405e575b506118e893945016614172565b61406886916111a2565b6140725784614051565b8480fd5b6040513d88823e3d90fd5b5080fd5b6140909196506111a2565b5f945f614006565b91909293506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b15610312576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03938416600482015293909216602484015260448301525f908290606490829084905af180156103075761412c5750565b6118e8906111a2565b506001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001690821614613f5e565b505050509050565b8147106141c2575f8080936001600160a01b038294165af1614192612913565b501561419a57565b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fcd786059000000000000000000000000000000000000000000000000000000005f523060045260245ffd5b90614203575080511561419a57805190602001fd5b81511580614249575b614214575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561420c565b6001810190825f528160205260405f205c155f1461429557805c815f52838160205f20015d60018101809111611aaa57815d5c915f5260205260405f205d600190565b5050505f90565b905f526020526142b160405f2091825c611a9d565b905d565b916044929391936001600160a01b03604094859282808551998a9586947fc9c1661b0000000000000000000000000000000000000000000000000000000086521660048501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa938415614385575f935f9561434e575b505061434b6143448594611a6c565b948561172d565b52565b809295508194503d831161437e575b61436781836111ee565b810103126103125760208251920151925f80614335565b503d61435d565b83513d5f823e3d90fd5b6001600160a01b03908181116143a3571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f5260a060045260245260445ffd5b905f526020526142b160405f2091825c61384d565b6040519260208401907fa9059cbb0000000000000000000000000000000000000000000000000000000082526001600160a01b038094166024860152604485015260448452608084019084821067ffffffffffffffff83111761115957614467935f9384936040521694519082865af1614460612913565b90836141ee565b80519081151591826144a8575b505061447d5750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b81925090602091810103126103125760200151801590811503610312575f80614474565b5c11156144d557565b7f0f4ae0e4000000000000000000000000000000000000000000000000000000005f5260045ffdfea2646970667358221220c454b5c6b2228cad6081c9bede33f823be1a13e2774d7b00e869883d9408eefd64736f6c634300081b0033","opcodes":"PUSH2 0x1C0 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x60C JUMPI PUSH2 0x4C6A DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x1F DUP3 DUP6 PUSH2 0x62B JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SWAP2 PUSH1 0x80 DUP3 DUP5 SUB SLT PUSH2 0x60C JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 DUP5 DUP2 AND DUP2 SUB PUSH2 0x60C JUMPI PUSH1 0x20 SWAP4 DUP5 DUP2 ADD MLOAD SWAP3 DUP7 DUP5 AND DUP5 SUB PUSH2 0x60C JUMPI DUP5 DUP3 ADD MLOAD SWAP7 DUP8 AND DUP8 SUB PUSH2 0x60C JUMPI PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 DUP4 DUP3 GT PUSH2 0x60C JUMPI ADD SWAP3 PUSH1 0x1F SWAP1 DUP3 DUP3 DUP7 ADD SLT ISZERO PUSH2 0x60C JUMPI DUP5 MLOAD DUP5 DUP2 GT PUSH2 0x5F8 JUMPI PUSH1 0x1F NOT SWAP6 DUP9 MLOAD SWAP5 PUSH2 0xA5 DUP12 DUP10 DUP8 DUP7 ADD AND ADD DUP8 PUSH2 0x62B JUMP JUMPDEST DUP3 DUP7 MSTORE DUP11 DUP4 DUP4 ADD ADD GT PUSH2 0x60C JUMPI DUP2 PUSH0 SWAP3 DUP12 DUP1 SWAP4 ADD DUP4 DUP9 ADD MCOPY DUP6 ADD ADD MSTORE PUSH2 0x109 DUP8 MLOAD PUSH2 0xCF DUP2 PUSH2 0x610 JUMP JUMPDEST PUSH1 0xB DUP2 MSTORE PUSH11 0x14D95B99195C91DD585C99 PUSH1 0xAA SHL DUP11 DUP3 ADD MSTORE DUP9 MLOAD SWAP1 PUSH2 0xF2 DUP3 PUSH2 0x610 JUMP JUMPDEST PUSH1 0x6 DUP3 MSTORE PUSH6 0x39B2B73232B9 PUSH1 0xD1 SHL DUP12 DUP4 ADD MSTORE PUSH2 0x684 JUMP JUMPDEST PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE DUP2 MLOAD SWAP3 DUP4 GT PUSH2 0x5F8 JUMPI PUSH0 SLOAD SWAP2 PUSH1 0x1 SWAP3 DUP4 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x5EE JUMPI JUMPDEST DUP10 DUP3 LT EQ PUSH2 0x5DA JUMPI DUP3 DUP2 GT PUSH2 0x597 JUMPI JUMPDEST POP DUP8 SWAP2 DUP5 GT PUSH1 0x1 EQ PUSH2 0x53A JUMPI DUP4 SWAP5 POP SWAP1 DUP4 SWAP3 SWAP2 PUSH0 SWAP5 PUSH2 0x52F JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE JUMPDEST PUSH2 0x1BA DUP3 MLOAD PUSH2 0x174 DUP2 PUSH2 0x610 JUMP JUMPDEST PUSH1 0xC DUP2 MSTORE PUSH12 0x2937BABA32B921B7B6B6B7B7 PUSH1 0xA1 SHL DUP6 DUP3 ADD MSTORE DUP4 MLOAD SWAP1 PUSH2 0x198 DUP3 PUSH2 0x610 JUMP JUMPDEST PUSH1 0x11 DUP3 MSTORE PUSH17 0x1A5CD4995D1D5C9B915D1A131BD8DAD959 PUSH1 0x7A SHL DUP7 DUP4 ADD MSTORE PUSH2 0x684 JUMP JUMPDEST PUSH1 0xC0 MSTORE PUSH1 0xE0 MSTORE PUSH2 0x100 SWAP3 DUP4 MSTORE PUSH2 0x202 DUP2 MLOAD PUSH2 0x1D4 DUP2 PUSH2 0x610 JUMP JUMPDEST PUSH1 0x13 DUP2 MSTORE PUSH32 0x63757272656E7453776170546F6B656E73496E00000000000000000000000000 DUP5 DUP3 ADD MSTORE PUSH2 0x64E JUMP JUMPDEST SWAP2 PUSH2 0x120 SWAP3 DUP4 MSTORE PUSH2 0x245 DUP3 MLOAD PUSH2 0x217 DUP2 PUSH2 0x610 JUMP JUMPDEST PUSH1 0x14 DUP2 MSTORE PUSH32 0x63757272656E7453776170546F6B656E734F7574000000000000000000000000 DUP4 DUP3 ADD MSTORE PUSH2 0x64E JUMP JUMPDEST PUSH2 0x140 SWAP1 DUP2 MSTORE PUSH2 0x287 DUP4 MLOAD PUSH2 0x259 DUP2 PUSH2 0x610 JUMP JUMPDEST PUSH1 0x19 DUP2 MSTORE PUSH32 0x63757272656E7453776170546F6B656E496E416D6F756E747300000000000000 DUP5 DUP3 ADD MSTORE PUSH2 0x64E JUMP JUMPDEST SWAP1 PUSH2 0x160 SWAP2 DUP3 MSTORE PUSH2 0x30D PUSH2 0x2CD DUP6 MLOAD PUSH2 0x29F DUP2 PUSH2 0x610 JUMP JUMPDEST PUSH1 0x1A DUP2 MSTORE PUSH32 0x63757272656E7453776170546F6B656E4F7574416D6F756E7473000000000000 DUP7 DUP3 ADD MSTORE PUSH2 0x64E JUMP JUMPDEST SWAP4 PUSH2 0x180 SWAP5 DUP6 MSTORE PUSH32 0x736574746C6564546F6B656E416D6F756E747300000000000000000000000000 DUP7 MLOAD SWAP2 PUSH2 0x301 DUP4 PUSH2 0x610 JUMP JUMPDEST PUSH1 0x13 DUP4 MSTORE DUP3 ADD MSTORE PUSH2 0x64E JUMP JUMPDEST SWAP4 PUSH2 0x1A0 SWAP5 DUP6 MSTORE MLOAD SWAP5 PUSH2 0x4533 SWAP7 DUP8 PUSH2 0x737 DUP9 CODECOPY PUSH1 0x80 MLOAD DUP8 DUP2 DUP2 PUSH2 0x2C0 ADD MSTORE DUP2 DUP2 PUSH2 0x54B ADD MSTORE DUP2 DUP2 PUSH2 0x18BB ADD MSTORE PUSH2 0x295A ADD MSTORE PUSH1 0xA0 MLOAD DUP8 DUP2 DUP2 PUSH2 0x25C ADD MSTORE DUP2 DUP2 PUSH2 0x1A18 ADD MSTORE DUP2 DUP2 PUSH2 0x1C7C ADD MSTORE DUP2 DUP2 PUSH2 0x1EBE ADD MSTORE DUP2 DUP2 PUSH2 0x2115 ADD MSTORE DUP2 DUP2 PUSH2 0x22AE ADD MSTORE DUP2 DUP2 PUSH2 0x23BF ADD MSTORE DUP2 DUP2 PUSH2 0x244D ADD MSTORE DUP2 DUP2 PUSH2 0x250F ADD MSTORE DUP2 DUP2 PUSH2 0x2B49 ADD MSTORE DUP2 DUP2 PUSH2 0x2D28 ADD MSTORE DUP2 DUP2 PUSH2 0x2D70 ADD MSTORE DUP2 DUP2 PUSH2 0x2DEE ADD MSTORE DUP2 DUP2 PUSH2 0x2E95 ADD MSTORE DUP2 DUP2 PUSH2 0x2FA3 ADD MSTORE DUP2 DUP2 PUSH2 0x3020 ADD MSTORE DUP2 DUP2 PUSH2 0x32B5 ADD MSTORE DUP2 DUP2 PUSH2 0x33E4 ADD MSTORE DUP2 DUP2 PUSH2 0x3481 ADD MSTORE DUP2 DUP2 PUSH2 0x3547 ADD MSTORE DUP2 DUP2 PUSH2 0x3C08 ADD MSTORE DUP2 DUP2 PUSH2 0x3D2D ADD MSTORE DUP2 DUP2 PUSH2 0x3F70 ADD MSTORE DUP2 DUP2 PUSH2 0x40A7 ADD MSTORE PUSH2 0x4303 ADD MSTORE PUSH1 0xC0 MLOAD DUP8 DUP2 DUP2 PUSH2 0x1845 ADD MSTORE PUSH2 0x3756 ADD MSTORE PUSH1 0xE0 MLOAD DUP8 DUP2 DUP2 PUSH1 0x22 ADD MSTORE DUP2 DUP2 PUSH2 0xF15 ADD MSTORE DUP2 DUP2 PUSH2 0x3B9A ADD MSTORE DUP2 DUP2 PUSH2 0x3E80 ADD MSTORE DUP2 DUP2 PUSH2 0x3FC6 ADD MSTORE PUSH2 0x4141 ADD MSTORE MLOAD DUP7 DUP2 DUP2 PUSH2 0x883 ADD MSTORE DUP2 DUP2 PUSH2 0xA49 ADD MSTORE DUP2 DUP2 PUSH2 0xB5D ADD MSTORE DUP2 DUP2 PUSH2 0x200A ADD MSTORE DUP2 DUP2 PUSH2 0x2090 ADD MSTORE DUP2 DUP2 PUSH2 0x3115 ADD MSTORE PUSH2 0x3D09 ADD MSTORE MLOAD DUP6 DUP2 DUP2 PUSH2 0x2605 ADD MSTORE DUP2 DUP2 PUSH2 0x27EC ADD MSTORE DUP2 DUP2 PUSH2 0x29F6 ADD MSTORE PUSH2 0x3674 ADD MSTORE MLOAD DUP5 DUP2 DUP2 PUSH2 0x1CDF ADD MSTORE DUP2 DUP2 PUSH2 0x1F2B ADD MSTORE DUP2 DUP2 PUSH2 0x2311 ADD MSTORE DUP2 DUP2 PUSH2 0x2573 ADD MSTORE DUP2 DUP2 PUSH2 0x266A ADD MSTORE DUP2 DUP2 PUSH2 0x27C8 ADD MSTORE DUP2 DUP2 PUSH2 0x2BAE ADD MSTORE PUSH2 0x3644 ADD MSTORE MLOAD DUP4 DUP2 DUP2 PUSH2 0x1DDF ADD MSTORE DUP2 DUP2 PUSH2 0x2631 ADD MSTORE DUP2 DUP2 PUSH2 0x2818 ADD MSTORE DUP2 DUP2 PUSH2 0x332A ADD MSTORE DUP2 DUP2 PUSH2 0x35A5 ADD MSTORE PUSH2 0x36C7 ADD MSTORE MLOAD DUP3 DUP2 DUP2 PUSH2 0x1D08 ADD MSTORE DUP2 DUP2 PUSH2 0x1F5C ADD MSTORE DUP2 DUP2 PUSH2 0x259D ADD MSTORE DUP2 DUP2 PUSH2 0x26BD ADD MSTORE DUP2 DUP2 PUSH2 0x2850 ADD MSTORE DUP2 DUP2 PUSH2 0x2BED ADD MSTORE PUSH2 0x336C ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0x233B ADD MSTORE DUP2 DUP2 PUSH2 0x269B ADD MSTORE DUP2 DUP2 PUSH2 0x2C1E ADD MSTORE DUP2 DUP2 PUSH2 0x2EF2 ADD MSTORE PUSH2 0x36A5 ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0x155 JUMP JUMPDEST SWAP2 SWAP4 DUP4 AND SWAP2 PUSH0 DUP1 MSTORE DUP4 DUP9 PUSH0 KECCAK256 SWAP4 PUSH0 JUMPDEST DUP11 DUP9 DUP4 DUP4 LT PUSH2 0x580 JUMPI POP POP POP LT PUSH2 0x568 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH2 0x166 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x55B JUMP JUMPDEST DUP7 DUP7 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP ADD PUSH2 0x549 JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP9 PUSH0 KECCAK256 DUP4 DUP1 DUP8 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP12 DUP9 LT PUSH2 0x5D1 JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP5 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x5C6 JUMPI POP POP PUSH2 0x13B JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP5 SWAP1 PUSH2 0x5B8 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x5AF JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x12B JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0x5F8 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x5F8 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH2 0x681 SWAP1 PUSH1 0x40 MLOAD PUSH2 0x65E DUP2 PUSH2 0x610 JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH17 0x2130BA31B42937BABA32B921B7B6B6B7B7 PUSH1 0x79 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x684 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x6F1 PUSH1 0x3A PUSH1 0x20 SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP2 DUP2 DUP1 DUP5 ADD SWAP8 PUSH32 0x62616C616E6365722D6C6162732E76332E73746F726167652E00000000000000 DUP10 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 ADD PUSH1 0x39 DUP7 ADD MCOPY DUP4 ADD SWAP1 PUSH1 0x17 PUSH1 0xF9 SHL PUSH1 0x39 DUP4 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 SWAP2 ADD DUP6 DUP4 ADD MCOPY ADD PUSH0 DUP4 DUP3 ADD MSTORE SUB PUSH1 0x1A DUP2 ADD DUP5 MSTORE ADD DUP3 PUSH2 0x62B JUMP JUMPDEST MLOAD SWAP1 KECCAK256 PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x722 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP3 MSTORE PUSH2 0x717 DUP3 PUSH2 0x610 JUMP JUMPDEST SWAP1 MLOAD SWAP1 KECCAK256 PUSH1 0xFF NOT AND SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x72 JUMPI JUMPDEST CALLDATASIZE ISZERO PUSH2 0x18 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x4A JUMPI STOP JUMPDEST PUSH32 0x540DDF600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8A465F6 EQ PUSH2 0xF39 JUMPI DUP1 PUSH4 0x107C279F EQ PUSH2 0xEF6 JUMPI DUP1 PUSH4 0x19C6989F EQ PUSH2 0x8A7 JUMPI DUP1 PUSH4 0x1BBF2E23 EQ PUSH2 0x864 JUMPI DUP1 PUSH4 0x286F580D EQ PUSH2 0x7CD JUMPI DUP1 PUSH4 0x2950286E EQ PUSH2 0x6E2 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x5A5 JUMPI DUP1 PUSH4 0x5A3C3987 EQ PUSH2 0x57C JUMPI DUP1 PUSH4 0x5E01EB5A EQ PUSH2 0x537 JUMPI DUP1 PUSH4 0x8A12A08C EQ PUSH2 0x4DC JUMPI DUP1 PUSH4 0x8EB1B65E EQ PUSH2 0x3D5 JUMPI DUP1 PUSH4 0x945ED33F EQ PUSH2 0x35A JUMPI DUP1 PUSH4 0xAC9650D8 EQ PUSH2 0x316 JUMPI PUSH4 0xE3B5DFF4 SUB PUSH2 0xE JUMPI CALLVALUE PUSH2 0x312 JUMPI PUSH1 0x60 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x312 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x312 JUMPI PUSH2 0x143 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1360 JUMP JUMPDEST PUSH2 0x14B PUSH2 0x123D JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP3 DUP4 GT PUSH2 0x312 JUMPI PUSH2 0x166 PUSH2 0x16E SWAP4 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1069 JUMP JUMPDEST SWAP4 SWAP1 SWAP2 PUSH2 0x2955 JUMP JUMPDEST SWAP1 PUSH0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x192 JUMPI DUP1 PUSH0 DUP8 PUSH2 0x189 PUSH1 0x1 SWAP5 DUP9 PUSH2 0x172D JUMP JUMPDEST MLOAD ADD MSTORE ADD PUSH2 0x171 JUMP JUMPDEST POP PUSH2 0x206 PUSH2 0x214 PUSH2 0x24F SWAP5 PUSH2 0x1CC PUSH0 SWAP5 DUP9 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x1B0 DUP6 PUSH2 0x11B6 JUMP JUMPDEST ADDRESS DUP6 MSTORE PUSH1 0x20 DUP6 ADD MSTORE PUSH0 NOT PUSH1 0x40 DUP6 ADD MSTORE DUP7 PUSH1 0x60 DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x141D JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x8A12A08C00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x14DA JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x11EE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP3 PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x1097 JUMP JUMPDEST SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x307 JUMPI PUSH2 0x2B9 SWAP3 PUSH2 0x2A4 SWAP2 PUSH0 SWAP2 PUSH2 0x2E5 JUMPI JUMPDEST POP PUSH1 0x20 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x1670 JUMP JUMPDEST SWAP1 SWAP4 SWAP2 SWAP3 PUSH2 0x2BD JUMPI JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0xFCB JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH0 PUSH32 0x0 TSTORE PUSH2 0x2AD JUMP JUMPDEST PUSH2 0x301 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2F9 DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x15E9 JUMP JUMPDEST DUP5 PUSH2 0x294 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x312 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x312 JUMPI PUSH2 0x34E PUSH2 0x348 PUSH2 0x2B9 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1038 JUMP JUMPDEST SWAP1 PUSH2 0x1837 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x10BC JUMP JUMPDEST CALLVALUE PUSH2 0x312 JUMPI PUSH2 0x368 CALLDATASIZE PUSH2 0xF66 JUMP JUMPDEST PUSH2 0x370 PUSH2 0x19E1 JUMP JUMPDEST PUSH2 0x378 PUSH2 0x1A0E JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x2B9 PUSH2 0x387 DUP4 PUSH2 0x2997 JUMP JUMPDEST SWAP2 SWAP4 SWAP1 SWAP5 PUSH2 0x3A0 PUSH1 0x60 PUSH2 0x399 DUP4 PUSH2 0x13E0 JUMP JUMPDEST SWAP3 ADD PUSH2 0x13F4 JUMP JUMPDEST SWAP1 PUSH2 0x27C5 JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0xFCB JUMP JUMPDEST PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x312 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x312 JUMPI PUSH2 0x402 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1360 JUMP JUMPDEST SWAP1 PUSH2 0x40B PUSH2 0x1253 JUMP JUMPDEST SWAP1 PUSH1 0x64 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x312 JUMPI PUSH2 0x206 PUSH2 0x4A1 PUSH2 0x24F SWAP5 PUSH2 0x467 PUSH2 0x432 PUSH0 SWAP6 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1069 JUMP JUMPDEST PUSH2 0x43B CALLER PUSH2 0x2955 JUMP JUMPDEST SWAP8 PUSH1 0x40 MLOAD SWAP5 PUSH2 0x449 DUP7 PUSH2 0x11B6 JUMP JUMPDEST CALLER DUP7 MSTORE PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP7 ADD MSTORE ISZERO ISZERO PUSH1 0x60 DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x141D JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x945ED33F00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x176E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP3 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x1097 JUMP JUMPDEST CALLVALUE PUSH2 0x312 JUMPI PUSH2 0x2B9 PUSH2 0x505 PUSH2 0x4F0 CALLDATASIZE PUSH2 0xF66 JUMP JUMPDEST PUSH2 0x4F8 PUSH2 0x19E1 JUMP JUMPDEST PUSH2 0x500 PUSH2 0x1A0E JUMP JUMPDEST PUSH2 0x1AD7 JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SWAP5 SWAP3 SWAP5 TSTORE PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0xFCB JUMP JUMPDEST CALLVALUE PUSH2 0x312 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x312 JUMPI PUSH1 0x20 PUSH32 0x0 TLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x312 JUMPI PUSH2 0x2B9 PUSH2 0x505 PUSH2 0x590 CALLDATASIZE PUSH2 0xF66 JUMP JUMPDEST PUSH2 0x598 PUSH2 0x19E1 JUMP JUMPDEST PUSH2 0x5A0 PUSH2 0x1A0E JUMP JUMPDEST PUSH2 0x2997 JUMP JUMPDEST CALLVALUE PUSH2 0x312 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x312 JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH0 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0x6D8 JUMPI JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP6 LT DUP5 EQ PUSH2 0x6AB JUMPI DUP6 DUP8 SWAP5 DUP7 DUP7 MSTORE SWAP2 DUP3 PUSH0 EQ PUSH2 0x66D JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x614 JUMPI JUMPDEST POP PUSH2 0x600 SWAP3 POP SUB DUP4 PUSH2 0x11EE JUMP JUMPDEST PUSH2 0x2B9 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1097 JUMP JUMPDEST PUSH0 DUP1 DUP1 MSTORE DUP6 SWAP3 POP SWAP1 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP6 DUP4 LT PUSH2 0x655 JUMPI POP POP PUSH2 0x600 SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x5F3 JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x63E JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0x600 SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0x5F3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0x5CF JUMP JUMPDEST CALLVALUE PUSH2 0x312 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x312 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x312 JUMPI PUSH2 0x714 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1360 JUMP JUMPDEST SWAP1 PUSH2 0x71D PUSH2 0x123D JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x312 JUMPI PUSH2 0x738 PUSH2 0x740 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1069 JUMP JUMPDEST SWAP3 SWAP1 SWAP2 PUSH2 0x2955 JUMP JUMPDEST SWAP1 PUSH0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x775 JUMPI DUP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH2 0x76C PUSH1 0x1 SWAP5 DUP10 PUSH2 0x172D JUMP JUMPDEST MLOAD ADD MSTORE ADD PUSH2 0x743 JUMP JUMPDEST POP PUSH2 0x206 PUSH2 0x214 DUP6 PUSH2 0x793 PUSH0 SWAP5 PUSH2 0x24F SWAP8 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x1B0 DUP6 PUSH2 0x11B6 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x5A3C398700000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x176E JUMP JUMPDEST PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x312 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x312 JUMPI PUSH2 0x7FA SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1360 JUMP JUMPDEST SWAP1 PUSH2 0x803 PUSH2 0x1253 JUMP JUMPDEST SWAP1 PUSH1 0x64 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x312 JUMPI PUSH2 0x206 PUSH2 0x4A1 PUSH2 0x24F SWAP5 PUSH2 0x82A PUSH2 0x432 PUSH0 SWAP6 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1069 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x8A465F600000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x14DA JUMP JUMPDEST CALLVALUE PUSH2 0x312 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x312 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x312 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD GT PUSH2 0x312 JUMPI CALLDATASIZE PUSH1 0x23 PUSH1 0x4 CALLDATALOAD ADD SLT ISZERO PUSH2 0x312 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD GT PUSH2 0x312 JUMPI CALLDATASIZE PUSH1 0x24 PUSH1 0xC0 PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD MUL PUSH1 0x4 CALLDATALOAD ADD ADD GT PUSH2 0x312 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x312 JUMPI PUSH2 0x91D SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1038 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD GT PUSH2 0x312 JUMPI PUSH1 0x60 PUSH1 0x3 NOT PUSH1 0x44 CALLDATALOAD CALLDATASIZE SUB ADD SLT PUSH2 0x312 JUMPI PUSH1 0x64 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x312 JUMPI PUSH2 0x95E SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1069 JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x312 JUMPI PUSH2 0x97E SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1038 JUMP JUMPDEST SWAP5 SWAP1 SWAP4 PUSH2 0x989 PUSH2 0x19E1 JUMP JUMPDEST DUP1 PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD SUB PUSH2 0xECE JUMPI PUSH0 JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD DUP2 LT PUSH2 0xC2B JUMPI POP POP POP PUSH1 0x44 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD PUSH1 0x44 CALLDATALOAD CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x312 JUMPI DUP2 PUSH1 0x44 CALLDATALOAD ADD PUSH1 0x4 DUP2 ADD CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x312 JUMPI PUSH1 0x24 DUP3 PUSH1 0x7 SHL CALLDATASIZE SUB SWAP2 ADD SGT PUSH2 0x312 JUMPI PUSH2 0xA3C JUMPI JUMPDEST PUSH2 0x2B9 PUSH2 0x34E DUP7 DUP7 PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH2 0x1837 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP3 SWAP5 PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x312 JUMPI PUSH1 0x40 MLOAD SWAP5 PUSH32 0x2A2D80D100000000000000000000000000000000000000000000000000000000 DUP7 MSTORE CALLER PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x60 PUSH1 0x24 DUP8 ADD MSTORE PUSH1 0xC4 DUP7 ADD SWAP3 PUSH1 0x44 CALLDATALOAD ADD PUSH1 0x24 DUP2 ADD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 DUP4 ADD CALLDATALOAD GT PUSH2 0x312 JUMPI PUSH1 0x4 DUP3 ADD CALLDATALOAD PUSH1 0x7 SHL CALLDATASIZE SUB DUP6 SGT PUSH2 0x312 JUMPI PUSH1 0x60 PUSH1 0x64 DUP10 ADD MSTORE PUSH1 0x4 DUP3 ADD CALLDATALOAD SWAP1 MSTORE SWAP2 SWAP3 DUP7 SWAP3 PUSH1 0xE4 DUP5 ADD SWAP3 SWAP2 SWAP1 PUSH0 SWAP1 JUMPDEST PUSH1 0x4 DUP2 ADD CALLDATALOAD DUP3 LT PUSH2 0xBAD JUMPI POP POP POP PUSH1 0x20 SWAP2 PUSH1 0x1F NOT PUSH1 0x1F DUP7 PUSH0 SWAP8 DUP8 SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xB21 PUSH1 0x24 PUSH1 0x44 CALLDATALOAD ADD PUSH2 0x1229 JUMP JUMPDEST AND PUSH1 0x84 DUP9 ADD MSTORE PUSH1 0x44 DUP1 CALLDATALOAD ADD CALLDATALOAD PUSH1 0xA4 DUP9 ADD MSTORE PUSH1 0x3 NOT DUP8 DUP8 SUB ADD PUSH1 0x44 DUP9 ADD MSTORE DUP2 DUP7 MSTORE DUP8 DUP7 ADD CALLDATACOPY DUP8 DUP7 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD SUB ADD DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x307 JUMPI PUSH2 0x2B9 SWAP4 PUSH2 0x34E SWAP4 PUSH2 0xB9E JUMPI JUMPDEST DUP3 SWAP5 POP DUP2 SWAP4 POP PUSH2 0xA0C JUMP JUMPDEST PUSH2 0xBA7 SWAP1 PUSH2 0x11A2 JUMP JUMPDEST DUP5 PUSH2 0xB93 JUMP JUMPDEST SWAP2 SWAP6 SWAP5 POP SWAP2 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBC4 DUP8 PUSH2 0x1229 JUMP JUMPDEST AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP8 ADD CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP1 SWAP4 SUB PUSH2 0x312 JUMPI PUSH1 0x4 SWAP3 PUSH1 0x1 SWAP3 DUP3 ADD MSTORE PUSH2 0xBF4 PUSH1 0x40 DUP10 ADD PUSH2 0x2942 JUMP JUMPDEST PUSH6 0xFFFFFFFFFFFF DUP1 SWAP2 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0xC0F PUSH1 0x60 DUP11 ADD PUSH2 0x2942 JUMP JUMPDEST AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP1 SWAP2 ADD SWAP8 ADD SWAP4 ADD SWAP1 POP DUP9 SWAP5 SWAP6 SWAP4 SWAP3 SWAP2 PUSH2 0xAF0 JUMP JUMPDEST PUSH2 0xC40 PUSH2 0xC39 DUP3 DUP5 DUP7 PUSH2 0x19C6 JUMP JUMPDEST CALLDATASIZE SWAP2 PUSH2 0x141D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xC4C DUP2 PUSH2 0x113D JUMP JUMPDEST PUSH0 DUP2 MSTORE PUSH1 0x20 SWAP2 PUSH0 DUP4 DUP4 ADD MSTORE PUSH0 PUSH1 0x40 DUP4 ADD MSTORE DUP3 DUP2 ADD MLOAD SWAP1 PUSH1 0x60 PUSH1 0x40 DUP3 ADD MLOAD SWAP2 ADD MLOAD PUSH0 BYTE SWAP2 DUP4 MSTORE DUP4 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xC0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP2 DUP6 MUL PUSH1 0x4 CALLDATALOAD ADD CALLDATASIZE SUB ADD SLT PUSH2 0x312 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0xCB9 DUP3 PUSH2 0x1186 JUMP JUMPDEST PUSH2 0xCCC PUSH1 0x24 PUSH1 0xC0 DUP7 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x1229 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH2 0xCE2 PUSH1 0x44 PUSH1 0xC0 DUP8 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x1229 JUMP JUMPDEST SWAP1 DUP2 DUP6 DUP6 ADD MSTORE PUSH2 0xCFB PUSH1 0x64 PUSH1 0xC0 DUP9 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x1229 JUMP JUMPDEST PUSH1 0x40 DUP6 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x4 CALLDATALOAD PUSH1 0xC0 DUP9 MUL ADD PUSH1 0x84 DUP2 ADD CALLDATALOAD PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0xA4 DUP2 ADD CALLDATALOAD PUSH1 0x80 DUP8 ADD MSTORE PUSH1 0xC4 ADD CALLDATALOAD PUSH1 0xA0 DUP7 ADD MSTORE DUP4 ADD MLOAD DUP4 MLOAD SWAP4 DUP7 ADD MLOAD PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EXTCODESIZE ISZERO PUSH2 0x312 JUMPI PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 PUSH1 0xE4 SWAP5 DUP12 SWAP9 DUP5 SWAP9 PUSH1 0xC4 PUSH1 0xC0 PUSH1 0x40 MLOAD SWAP13 DUP14 SWAP12 DUP13 SWAP11 PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP13 MSTORE AND PUSH1 0x4 DUP12 ADD MSTORE ADDRESS PUSH1 0x24 DUP12 ADD MSTORE PUSH1 0x84 DUP3 DUP3 MUL PUSH1 0x4 CALLDATALOAD ADD ADD CALLDATALOAD PUSH1 0x44 DUP12 ADD MSTORE MUL PUSH1 0x4 CALLDATALOAD ADD ADD CALLDATALOAD PUSH1 0x64 DUP9 ADD MSTORE PUSH1 0x84 DUP8 ADD MSTORE PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xC4 DUP6 ADD MSTORE AND GAS CALL SWAP1 DUP2 PUSH2 0xEBF JUMPI JUMPDEST POP PUSH2 0xEB5 JUMPI PUSH2 0xDD8 PUSH2 0x2913 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 MLOAD AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP4 ADD MLOAD AND PUSH1 0x44 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x307 JUMPI PUSH0 SWAP3 PUSH2 0xE85 JUMPI JUMPDEST POP PUSH1 0x60 ADD MLOAD SUB PUSH2 0xE50 JUMPI POP POP PUSH1 0x1 SWAP1 JUMPDEST ADD PUSH2 0x998 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0xE5D JUMPI DUP1 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP DUP4 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0xEAE JUMPI JUMPDEST PUSH2 0xE9D DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x312 JUMPI MLOAD SWAP1 PUSH1 0x60 PUSH2 0xE3A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xE93 JUMP JUMPDEST POP POP PUSH1 0x1 SWAP1 PUSH2 0xE4A JUMP JUMPDEST PUSH2 0xEC8 SWAP1 PUSH2 0x11A2 JUMP JUMPDEST DUP11 PUSH2 0xDCB JUMP JUMPDEST PUSH32 0xAAAD13F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x312 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x312 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x312 JUMPI PUSH2 0xF47 CALLDATASIZE PUSH2 0xF66 JUMP JUMPDEST PUSH2 0xF4F PUSH2 0x19E1 JUMP JUMPDEST PUSH2 0xF57 PUSH2 0x1A0E JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x2B9 PUSH2 0x387 DUP4 PUSH2 0x1AD7 JUMP JUMPDEST PUSH1 0x3 NOT SWAP1 PUSH1 0x20 DUP3 DUP3 ADD SLT PUSH2 0x312 JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x312 JUMPI DUP3 PUSH1 0xA0 SWAP3 SUB ADD SLT PUSH2 0x312 JUMPI PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0xFB7 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0xFA9 JUMP JUMPDEST SWAP4 SWAP3 SWAP1 PUSH2 0xFE0 SWAP1 PUSH1 0x60 DUP7 MSTORE PUSH1 0x60 DUP7 ADD SWAP1 PUSH2 0xF98 JUMP JUMPDEST SWAP4 PUSH1 0x20 SWAP5 DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP1 DUP6 MLOAD SWAP3 DUP4 DUP2 MSTORE ADD SWAP5 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x101B JUMPI POP POP POP PUSH2 0x1018 SWAP4 SWAP5 POP PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0xF98 JUMP JUMPDEST SWAP1 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 MSTORE SWAP5 DUP8 ADD SWAP5 SWAP2 DUP8 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xFFB JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x312 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x312 JUMPI PUSH1 0x20 DUP1 DUP6 ADD SWAP5 DUP5 PUSH1 0x5 SHL ADD ADD GT PUSH2 0x312 JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x312 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x312 JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x312 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD SWAP1 PUSH1 0x20 DUP4 MSTORE DUP4 MLOAD DUP1 SWAP3 MSTORE PUSH1 0x40 DUP4 ADD SWAP3 PUSH1 0x20 PUSH1 0x40 DUP5 PUSH1 0x5 SHL DUP4 ADD ADD SWAP6 ADD SWAP4 PUSH0 SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x10F1 JUMPI POP POP POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 DUP5 DUP1 PUSH2 0x112D DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP7 PUSH1 0x1 SWAP7 SUB ADD DUP8 MSTORE DUP11 MLOAD PUSH2 0x1097 JUMP JUMPDEST SWAP9 ADD SWAP4 ADD SWAP4 ADD SWAP2 SWAP5 SWAP4 SWAP3 SWAP1 PUSH2 0x10E1 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1159 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0xC0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1159 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1159 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1159 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1159 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1159 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1159 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x312 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x312 JUMPI JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x312 JUMPI JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x80 DUP2 DUP5 SUB SLT PUSH2 0x312 JUMPI PUSH1 0x40 SWAP1 DUP2 MLOAD SWAP2 PUSH1 0x80 DUP4 ADD SWAP5 PUSH8 0xFFFFFFFFFFFFFFFF SWAP6 DUP5 DUP2 LT DUP8 DUP3 GT OR PUSH2 0x1159 JUMPI DUP3 MSTORE DUP4 SWAP6 PUSH2 0x129C DUP5 PUSH2 0x1229 JUMP JUMPDEST DUP6 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP6 ADD CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x312 JUMPI DUP5 ADD DUP3 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x312 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH2 0x12C5 DUP3 PUSH2 0x1211 JUMP JUMPDEST SWAP4 PUSH2 0x12D2 DUP7 MLOAD SWAP6 DUP7 PUSH2 0x11EE JUMP JUMPDEST DUP3 DUP6 MSTORE DUP4 DUP6 ADD SWAP1 DUP5 PUSH1 0x60 DUP1 SWAP6 MUL DUP5 ADD ADD SWAP3 DUP2 DUP5 GT PUSH2 0x312 JUMPI DUP6 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x1310 JUMPI POP POP POP POP POP DUP5 ADD MSTORE DUP2 DUP2 ADD CALLDATALOAD SWAP1 DUP4 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 ADD CALLDATALOAD SWAP2 ADD MSTORE JUMP JUMPDEST DUP5 DUP4 DUP4 SUB SLT PUSH2 0x312 JUMPI DUP8 MLOAD SWAP1 PUSH2 0x1325 DUP3 PUSH2 0x113D JUMP JUMPDEST PUSH2 0x132E DUP5 PUSH2 0x1229 JUMP JUMPDEST DUP3 MSTORE PUSH2 0x133B DUP8 DUP6 ADD PUSH2 0x1229 JUMP JUMPDEST DUP8 DUP4 ADD MSTORE DUP9 DUP5 ADD CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x312 JUMPI DUP3 DUP9 SWAP3 DUP12 DUP10 SWAP6 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x12EE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x312 JUMPI DUP1 CALLDATALOAD SWAP2 PUSH1 0x20 SWAP2 PUSH2 0x137A DUP5 PUSH2 0x1211 JUMP JUMPDEST SWAP4 PUSH2 0x1388 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x11EE JUMP JUMPDEST DUP1 DUP6 MSTORE DUP4 DUP1 DUP7 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP3 DUP1 DUP5 GT PUSH2 0x312 JUMPI DUP5 DUP4 ADD SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x13B3 JUMPI POP POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x312 JUMPI DUP7 SWAP2 PUSH2 0x13D5 DUP5 DUP5 DUP1 SWAP5 DUP10 ADD ADD PUSH2 0x1262 JUMP JUMPDEST DUP2 MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x13A3 JUMP JUMPDEST CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x312 JUMPI SWAP1 JUMP JUMPDEST CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x312 JUMPI SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1159 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH2 0x1429 DUP3 PUSH2 0x1401 JUMP JUMPDEST SWAP2 PUSH2 0x1437 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x11EE JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0x312 JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x80 DUP2 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP4 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 ADD MLOAD SWAP5 PUSH1 0x80 DUP2 DUP7 ADD MSTORE DUP6 MLOAD DUP1 SWAP3 MSTORE DUP1 PUSH1 0xA0 DUP7 ADD SWAP7 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x14A7 JUMPI POP POP POP POP POP PUSH1 0x60 DUP2 PUSH1 0x40 DUP3 SWAP4 ADD MLOAD PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST DUP5 MLOAD DUP1 MLOAD DUP3 AND DUP10 MSTORE DUP1 DUP5 ADD MLOAD DUP3 AND DUP10 DUP6 ADD MSTORE PUSH1 0x40 SWAP1 DUP2 ADD MLOAD ISZERO ISZERO SWAP1 DUP10 ADD MSTORE PUSH1 0x60 SWAP1 SWAP8 ADD SWAP7 SWAP4 DUP3 ADD SWAP4 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x1485 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x20 SWAP1 DUP2 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 MLOAD AND DUP2 DUP4 ADD MSTORE DUP1 DUP6 ADD MLOAD SWAP3 PUSH1 0xA0 PUSH1 0x40 DUP5 ADD MSTORE DUP4 MLOAD DUP1 SWAP2 MSTORE PUSH1 0xE0 DUP4 ADD SWAP2 DUP1 PUSH1 0xE0 DUP4 PUSH1 0x5 SHL DUP7 ADD ADD SWAP6 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x1559 JUMPI POP POP POP POP POP PUSH1 0x80 DUP5 PUSH1 0x40 PUSH2 0x1018 SWAP6 SWAP7 ADD MLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD ISZERO ISZERO DUP3 DUP5 ADD MSTORE ADD MLOAD SWAP1 PUSH1 0xA0 PUSH1 0x1F NOT DUP3 DUP6 SUB ADD SWAP2 ADD MSTORE PUSH2 0x1097 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP6 DUP4 DUP1 PUSH2 0x1594 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 DUP11 PUSH1 0x1 SWAP7 SUB ADD DUP7 MSTORE DUP11 MLOAD PUSH2 0x1453 JUMP JUMPDEST SWAP9 ADD SWAP3 ADD SWAP3 ADD SWAP1 SWAP4 SWAP3 SWAP2 PUSH2 0x151D JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x312 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x15BA DUP3 PUSH2 0x1401 JUMP JUMPDEST SWAP3 PUSH2 0x15C8 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x11EE JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x312 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x312 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x312 JUMPI PUSH2 0x1018 SWAP3 ADD PUSH2 0x15A3 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x312 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x162A DUP2 PUSH2 0x1211 JUMP JUMPDEST SWAP4 PUSH2 0x1638 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x11EE JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x312 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1661 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1653 JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x60 DUP3 DUP5 SUB SLT PUSH2 0x312 JUMPI DUP2 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x312 JUMPI DUP5 PUSH2 0x169C SWAP2 DUP4 ADD PUSH2 0x160F JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP1 DUP4 ADD MLOAD DUP6 DUP2 GT PUSH2 0x312 JUMPI DUP4 ADD SWAP1 DUP3 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x312 JUMPI DUP2 MLOAD SWAP2 PUSH2 0x16C4 DUP4 PUSH2 0x1211 JUMP JUMPDEST SWAP3 PUSH2 0x16D2 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x11EE JUMP JUMPDEST DUP1 DUP5 MSTORE DUP3 DUP1 DUP6 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 DUP6 DUP4 GT PUSH2 0x312 JUMPI DUP4 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x170E JUMPI POP POP POP POP SWAP4 PUSH1 0x40 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x312 JUMPI PUSH2 0x1018 SWAP3 ADD PUSH2 0x160F JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x312 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x16EC JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x1741 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x20 SWAP1 DUP2 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 MLOAD AND DUP2 DUP4 ADD MSTORE DUP1 DUP6 ADD MLOAD SWAP3 PUSH1 0xA0 PUSH1 0x40 DUP5 ADD MSTORE DUP4 MLOAD DUP1 SWAP2 MSTORE PUSH1 0xE0 DUP4 ADD SWAP2 DUP1 PUSH1 0xE0 DUP4 PUSH1 0x5 SHL DUP7 ADD ADD SWAP6 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x17ED JUMPI POP POP POP POP POP PUSH1 0x80 DUP5 PUSH1 0x40 PUSH2 0x1018 SWAP6 SWAP7 ADD MLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD ISZERO ISZERO DUP3 DUP5 ADD MSTORE ADD MLOAD SWAP1 PUSH1 0xA0 PUSH1 0x1F NOT DUP3 DUP6 SUB ADD SWAP2 ADD MSTORE PUSH2 0x1097 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP6 DUP4 DUP1 PUSH2 0x1828 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 DUP11 PUSH1 0x1 SWAP7 SUB ADD DUP7 MSTORE DUP11 MLOAD PUSH2 0x1453 JUMP JUMPDEST SWAP9 ADD SWAP3 ADD SWAP3 ADD SWAP1 SWAP4 SWAP3 SWAP2 PUSH2 0x17B1 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x1842 CALLER PUSH2 0x2955 JUMP JUMPDEST SWAP1 PUSH32 0x0 SWAP4 DUP5 TLOAD PUSH2 0x194D JUMPI PUSH1 0x1 SWAP1 PUSH1 0x1 DUP7 TSTORE PUSH2 0x187B DUP4 PUSH2 0x1211 JUMP JUMPDEST SWAP3 PUSH2 0x1889 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x11EE JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x1F NOT PUSH2 0x1898 DUP3 PUSH2 0x1211 JUMP JUMPDEST ADD PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x193C JUMPI POP POP PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x18F3 JUMPI POP POP POP POP SWAP1 PUSH0 PUSH2 0x18E8 SWAP3 SWAP5 TSTORE PUSH32 0x0 DUP1 TLOAD SWAP2 PUSH2 0x18EA JUMPI JUMPDEST POP PUSH2 0x374D JUMP JUMPDEST JUMP JUMPDEST PUSH0 SWAP1 TSTORE PUSH0 PUSH2 0x18E2 JUMP JUMPDEST DUP1 PUSH2 0x1920 PUSH0 DUP1 PUSH2 0x1908 PUSH2 0xC39 DUP10 SWAP7 DUP9 DUP11 PUSH2 0x19C6 JUMP JUMPDEST PUSH1 0x20 DUP2 MLOAD SWAP2 ADD ADDRESS GAS DELEGATECALL PUSH2 0x1919 PUSH2 0x2913 JUMP JUMPDEST SWAP1 ADDRESS PUSH2 0x41EE JUMP JUMPDEST PUSH2 0x192A DUP3 DUP9 PUSH2 0x172D JUMP JUMPDEST MSTORE PUSH2 0x1935 DUP2 DUP8 PUSH2 0x172D JUMP JUMPDEST POP ADD PUSH2 0x18A6 JUMP JUMPDEST DUP1 PUSH1 0x60 PUSH1 0x20 DUP1 SWAP4 DUP10 ADD ADD MSTORE ADD PUSH2 0x189B JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP2 CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x312 JUMPI ADD DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x312 JUMPI PUSH1 0x20 ADD SWAP2 DUP2 CALLDATASIZE SUB DUP4 SGT PUSH2 0x312 JUMPI JUMP JUMPDEST SWAP1 DUP3 LT ISZERO PUSH2 0x1741 JUMPI PUSH2 0x19DD SWAP2 PUSH1 0x5 SHL DUP2 ADD SWAP1 PUSH2 0x1975 JUMP JUMPDEST SWAP1 SWAP2 JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x194D JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x1A40 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x1A76 DUP3 PUSH2 0x1211 JUMP JUMPDEST PUSH2 0x1A83 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x11EE JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x1A93 DUP3 SWAP5 PUSH2 0x1211 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x1AAA JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD CALLDATALOAD TIMESTAMP GT PUSH2 0x275F JUMPI SWAP1 PUSH2 0x1AFA PUSH2 0x1AF3 PUSH1 0x20 DUP5 ADD DUP5 PUSH2 0x3790 JUMP JUMPDEST SWAP1 POP PUSH2 0x1A6C JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST PUSH2 0x1B0A PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x3790 JUMP JUMPDEST SWAP1 POP DUP2 LT ISZERO PUSH2 0x2663 JUMPI PUSH2 0x1B34 DUP2 PUSH2 0x1B2F PUSH2 0x1B27 PUSH1 0x20 DUP7 ADD DUP7 PUSH2 0x3790 JUMP JUMPDEST CALLDATASIZE SWAP4 SWAP2 PUSH2 0x37E4 JUMP JUMPDEST PUSH2 0x1262 JUMP JUMPDEST SWAP4 PUSH1 0x40 DUP6 ADD MLOAD SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 MLOAD AND SWAP1 PUSH1 0x20 DUP8 ADD MLOAD DUP1 MLOAD ISZERO PUSH2 0x1741 JUMPI PUSH1 0x20 ADD MLOAD PUSH1 0x40 ADD MLOAD ISZERO ISZERO DUP1 PUSH2 0x265A JUMPI JUMPDEST ISZERO PUSH2 0x25FF JUMPI PUSH2 0x1B88 PUSH2 0x1B74 DUP7 PUSH2 0x13E0 JUMP JUMPDEST DUP8 DUP5 PUSH2 0x1B82 PUSH1 0x60 DUP11 ADD PUSH2 0x13F4 JUMP JUMPDEST SWAP3 PUSH2 0x3B79 JUMP JUMPDEST PUSH0 JUMPDEST PUSH1 0x20 DUP9 ADD MLOAD MLOAD DUP2 LT ISZERO PUSH2 0x25EF JUMPI PUSH2 0x1B9F PUSH2 0x3824 JUMP JUMPDEST PUSH1 0x20 DUP10 ADD MLOAD MLOAD PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x1AAA JUMPI DUP3 EQ DUP1 PUSH1 0x20 DUP4 ADD MSTORE DUP3 ISZERO DUP3 MSTORE PUSH0 EQ PUSH2 0x25E8 JUMPI PUSH1 0x60 DUP10 ADD MLOAD SWAP1 JUMPDEST PUSH2 0x1BD7 DUP4 PUSH1 0x20 DUP13 ADD MLOAD PUSH2 0x172D JUMP JUMPDEST MLOAD PUSH1 0x40 DUP2 ADD MLOAD SWAP1 SWAP2 SWAP1 ISZERO PUSH2 0x1D8A JUMPI PUSH2 0x1C6F PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 MLOAD AND SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP6 EQ PUSH0 EQ PUSH2 0x1D83 JUMPI PUSH1 0x1 SWAP5 JUMPDEST PUSH1 0x40 MLOAD SWAP6 PUSH2 0x1C17 DUP8 PUSH2 0x11B6 JUMP JUMPDEST PUSH0 DUP8 MSTORE PUSH2 0x1C23 DUP2 PUSH2 0x385A JUMP JUMPDEST PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x60 SWAP5 DUP6 SWAP2 DUP14 DUP4 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x43583BE500000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x3ABE JUMP JUMPDEST SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x307 JUMPI PUSH0 SWAP5 PUSH2 0x1D4C JUMPI JUMPDEST POP POP PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x1D32 JUMPI DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH2 0x1D2C SWAP4 PUSH1 0x1 SWAP7 SWAP6 PUSH2 0x1CD4 DUP13 DUP13 PUSH2 0x172D JUMP JUMPDEST MSTORE ADD PUSH2 0x1D03 DUP3 DUP3 MLOAD AND PUSH32 0x0 PUSH2 0x4252 JUMP JUMPDEST POP MLOAD AND PUSH32 0x0 PUSH2 0x429C JUMP JUMPDEST ADD PUSH2 0x1B8A JUMP JUMPDEST PUSH1 0x20 ADD MLOAD SWAP1 SWAP8 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 POP PUSH1 0x1 SWAP1 PUSH2 0x1D2C JUMP JUMPDEST PUSH1 0x20 SWAP3 SWAP5 POP SWAP1 DUP2 PUSH2 0x1D71 SWAP3 SWAP1 RETURNDATASIZE LT PUSH2 0x1D7C JUMPI JUMPDEST PUSH2 0x1D69 DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3891 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP1 PUSH0 PUSH2 0x1CAC JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1D5F JUMP JUMPDEST PUSH0 SWAP5 PUSH2 0x1C0A JUMP JUMPDEST DUP9 DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 SWAP6 SWAP5 MLOAD AND DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND EQ PUSH0 EQ PUSH2 0x21CE JUMPI POP POP DUP2 MLOAD ISZERO SWAP1 POP PUSH2 0x210A JUMPI DUP9 DUP11 DUP1 ISZERO ISZERO DUP1 PUSH2 0x20EF JUMPI JUMPDEST PUSH2 0x1FE9 JUMPI JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP3 SWAP2 PUSH2 0x1E79 DUP3 PUSH2 0x1EB1 SWAP8 DUP12 PUSH0 SWAP6 DUP10 PUSH32 0x0 SWAP3 AND DUP1 DUP9 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP9 KECCAK256 TLOAD PUSH2 0x1FD8 JUMPI JUMPDEST POP POP POP JUMPDEST PUSH1 0x1 PUSH2 0x1E38 DUP10 DUP4 MLOAD AND PUSH1 0x20 DUP5 ADD SWAP10 DUP12 DUP12 MLOAD AND SWAP1 DUP1 ISZERO DUP11 EQ PUSH2 0x1FD2 JUMPI POP DUP4 SWAP2 PUSH2 0x42B5 JUMP JUMPDEST SWAP10 SWAP1 SWAP3 MLOAD AND SWAP5 PUSH2 0x1E4D PUSH1 0x80 SWAP2 DUP3 DUP2 ADD SWAP1 PUSH2 0x1975 JUMP JUMPDEST SWAP4 SWAP1 SWAP5 PUSH1 0x40 MLOAD SWAP8 PUSH2 0x1E5D DUP10 PUSH2 0x1186 JUMP JUMPDEST DUP9 MSTORE ADDRESS PUSH1 0x20 DUP10 ADD MSTORE PUSH1 0x40 DUP9 ADD MSTORE PUSH1 0x60 DUP8 ADD MSTORE DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x141D JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP7 DUP2 SWAP3 PUSH32 0x2145789700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x3A4D JUMP JUMPDEST SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x307 JUMPI PUSH0 SWAP5 PUSH2 0x1FA8 JUMPI JUMPDEST POP PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x1F85 JUMPI SWAP2 PUSH2 0x1F58 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x1 SWAP7 SWAP6 PUSH2 0x1F16 PUSH2 0x1F80 SWAP7 DUP7 PUSH2 0x172D JUMP JUMPDEST MLOAD PUSH2 0x1F21 DUP14 DUP14 PUSH2 0x172D JUMP JUMPDEST MSTORE PUSH2 0x1F4F DUP3 DUP3 MLOAD AND PUSH32 0x0 PUSH2 0x4252 JUMP JUMPDEST POP MLOAD AND SWAP3 PUSH2 0x172D JUMP JUMPDEST MLOAD SWAP1 PUSH32 0x0 PUSH2 0x429C JUMP JUMPDEST PUSH2 0x1D2C JUMP JUMPDEST SWAP9 POP PUSH1 0x1 SWAP3 SWAP5 POP PUSH2 0x1F9E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH2 0x172D JUMP JUMPDEST MLOAD SWAP8 MLOAD AND SWAP3 PUSH2 0x1D2C JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP5 POP PUSH2 0x1FC8 SWAP1 RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x1FC0 DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3A05 JUMP JUMPDEST POP SWAP5 SWAP2 SWAP1 POP PUSH2 0x1EEE JUMP JUMPDEST SWAP2 PUSH2 0x42B5 JUMP JUMPDEST PUSH2 0x1FE1 SWAP3 PUSH2 0x43D3 JUMP JUMPDEST PUSH0 DUP3 DUP2 PUSH2 0x1E11 JUMP JUMPDEST POP PUSH2 0x1FF6 SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x13E0 JUMP JUMPDEST SWAP2 PUSH2 0x2000 DUP12 PUSH2 0x438F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x312 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP1 DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE SWAP3 DUP8 AND PUSH1 0x64 DUP5 ADD MSTORE PUSH0 DUP4 DUP1 PUSH1 0x84 DUP2 ADD SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x307 JUMPI DUP11 PUSH2 0x1E79 DUP14 PUSH2 0x1EB1 SWAP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP8 PUSH0 SWAP6 PUSH2 0x20E0 JUMPI JUMPDEST POP SWAP8 POP SWAP3 POP POP SWAP2 SWAP3 SWAP4 POP PUSH2 0x1DC6 JUMP JUMPDEST PUSH2 0x20E9 SWAP1 PUSH2 0x11A2 JUMP JUMPDEST PUSH0 PUSH2 0x20D1 JUMP JUMPDEST POP PUSH2 0x20F9 DUP3 PUSH2 0x13E0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ ISZERO PUSH2 0x1DC1 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 MLOAD AND SWAP3 DUP1 EXTCODESIZE ISZERO PUSH2 0x312 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP1 SWAP5 AND PUSH1 0x4 DUP6 ADD MSTORE ADDRESS PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD DUP13 SWAP1 MSTORE PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x64 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL DUP1 ISZERO PUSH2 0x307 JUMPI DUP11 PUSH2 0x1E79 DUP14 PUSH2 0x1EB1 SWAP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP8 PUSH0 SWAP6 PUSH2 0x21BF JUMPI JUMPDEST POP PUSH2 0x1E15 JUMP JUMPDEST PUSH2 0x21C8 SWAP1 PUSH2 0x11A2 JUMP JUMPDEST PUSH0 PUSH2 0x21B9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP8 SWAP7 SWAP5 SWAP8 ADD MLOAD AND SWAP1 DUP10 DUP2 DUP4 EQ PUSH0 EQ PUSH2 0x2473 JUMPI PUSH2 0x2269 SWAP3 POP PUSH2 0x22A1 SWAP8 SWAP2 POP PUSH1 0x1 PUSH2 0x220F PUSH0 SWAP7 SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 DUP12 MLOAD AND PUSH2 0x42B5 JUMP JUMPDEST POP SWAP3 DUP3 DUP10 MLOAD AND SWAP6 PUSH1 0x20 DUP10 ADD MLOAD ISZERO ISZERO DUP9 EQ PUSH2 0x244A JUMPI PUSH2 0x222C DUP3 PUSH2 0x13E0 JUMP JUMPDEST SWAP5 JUMPDEST PUSH2 0x223D PUSH1 0x80 SWAP4 DUP5 DUP2 ADD SWAP1 PUSH2 0x1975 JUMP JUMPDEST SWAP6 SWAP1 SWAP7 PUSH1 0x40 MLOAD SWAP10 PUSH2 0x224D DUP12 PUSH2 0x1186 JUMP JUMPDEST DUP11 MSTORE AND PUSH1 0x20 DUP10 ADD MSTORE PUSH1 0x40 DUP9 ADD MSTORE PUSH1 0x60 DUP8 ADD MSTORE DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x141D JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP3 PUSH32 0x4AF29EC400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x3994 JUMP JUMPDEST SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x307 JUMPI PUSH0 SWAP4 PUSH2 0x2420 JUMPI JUMPDEST POP PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x235F JUMPI DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH2 0x1F80 SWAP4 PUSH1 0x1 SWAP7 SWAP6 PUSH2 0x2305 DUP13 DUP13 PUSH2 0x172D JUMP JUMPDEST MSTORE PUSH2 0x2335 DUP4 DUP4 DUP4 ADD MLOAD AND PUSH32 0x0 PUSH2 0x4252 JUMP JUMPDEST POP ADD MLOAD AND PUSH32 0x0 PUSH2 0x429C JUMP JUMPDEST PUSH1 0x20 DUP2 DUP2 ADD MLOAD SWAP2 MLOAD PUSH1 0x40 MLOAD PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP6 SWAP1 MSTORE SWAP4 SWAP11 POP SWAP1 SWAP2 AND SWAP5 POP DUP2 DUP1 PUSH1 0x44 DUP2 ADD SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x307 JUMPI PUSH2 0x23F5 JUMPI JUMPDEST POP PUSH1 0x1 SWAP1 PUSH2 0x1D2C JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2419 JUMPI JUMPDEST PUSH2 0x240B DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x312 JUMPI PUSH0 PUSH2 0x23EC JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2401 JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP4 POP PUSH2 0x2440 SWAP1 RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2438 DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3918 JUMP JUMPDEST POP SWAP4 SWAP2 SWAP1 POP PUSH2 0x22DE JUMP JUMPDEST DUP4 PUSH32 0x0 AND SWAP5 PUSH2 0x222E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2502 SWAP6 PUSH2 0x24CA SWAP4 SWAP5 SWAP6 PUSH2 0x2494 PUSH1 0x80 SWAP12 DUP13 DUP2 ADD SWAP1 PUSH2 0x1975 JUMP JUMPDEST SWAP4 SWAP1 SWAP5 PUSH1 0x40 MLOAD SWAP8 PUSH2 0x24A4 DUP10 PUSH2 0x11D2 JUMP JUMPDEST PUSH0 DUP10 MSTORE PUSH1 0x20 DUP10 ADD MSTORE AND PUSH1 0x40 DUP8 ADD MSTORE PUSH1 0x60 SWAP11 DUP12 SWAP8 DUP9 DUP9 ADD MSTORE DUP7 ADD MSTORE PUSH1 0xA0 DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x141D JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x2BFB780C00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x38AC JUMP JUMPDEST SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x307 JUMPI PUSH0 SWAP5 PUSH2 0x25C1 JUMPI JUMPDEST POP POP PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x1D32 JUMPI DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH2 0x1F80 SWAP4 PUSH1 0x1 SWAP7 SWAP6 PUSH2 0x2567 DUP13 DUP13 PUSH2 0x172D JUMP JUMPDEST MSTORE PUSH2 0x2597 DUP4 DUP4 DUP4 ADD MLOAD AND PUSH32 0x0 PUSH2 0x4252 JUMP JUMPDEST POP ADD MLOAD AND PUSH32 0x0 PUSH2 0x429C JUMP JUMPDEST PUSH1 0x20 SWAP3 SWAP5 POP SWAP1 DUP2 PUSH2 0x25DD SWAP3 SWAP1 RETURNDATASIZE LT PUSH2 0x1D7C JUMPI PUSH2 0x1D69 DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP1 PUSH0 PUSH2 0x253F JUMP JUMPDEST PUSH0 SWAP1 PUSH2 0x1BC9 JUMP JUMPDEST POP SWAP2 SWAP6 POP SWAP1 SWAP4 POP POP PUSH1 0x1 ADD PUSH2 0x1AFD JUMP JUMPDEST PUSH2 0x2629 DUP3 PUSH32 0x0 PUSH2 0x4252 JUMP JUMPDEST POP PUSH2 0x2655 DUP7 DUP4 PUSH32 0x0 PUSH2 0x429C JUMP JUMPDEST PUSH2 0x1B88 JUMP JUMPDEST POP ORIGIN ISZERO ISZERO PUSH2 0x1B63 JUMP JUMPDEST POP POP PUSH2 0x268E PUSH32 0x0 PUSH2 0x3B0D JUMP JUMPDEST SWAP2 PUSH2 0x2699 DUP4 MLOAD PUSH2 0x1A6C JUMP JUMPDEST PUSH32 0x0 SWAP2 PUSH32 0x0 SWAP2 SWAP1 PUSH0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x2756 JUMPI PUSH1 0x1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x26FF DUP4 DUP12 PUSH2 0x172D JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP6 PUSH1 0x20 MSTORE PUSH2 0x272D PUSH1 0x40 PUSH0 KECCAK256 TLOAD DUP3 PUSH2 0x271A DUP6 DUP14 PUSH2 0x172D JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP9 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP1 PUSH2 0x1A9D JUMP JUMPDEST PUSH2 0x2737 DUP4 DUP8 PUSH2 0x172D JUMP JUMPDEST MSTORE PUSH2 0x2742 DUP3 DUP11 PUSH2 0x172D JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP6 PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 TSTORE ADD PUSH2 0x26E0 JUMP JUMPDEST POP SWAP5 SWAP4 SWAP2 POP SWAP2 POP JUMP JUMPDEST PUSH32 0xE08B8AF000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH0 NOT DUP3 ADD SWAP2 DUP3 SGT PUSH1 0x1 AND PUSH2 0x1AAA JUMPI JUMP JUMPDEST PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x1AAA JUMPI PUSH0 NOT ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0x0 SWAP1 DUP2 TLOAD PUSH32 0x0 PUSH2 0x2815 DUP2 TLOAD PUSH2 0x2787 JUMP JUMPDEST SWAP1 PUSH32 0x0 SWAP2 JUMPDEST PUSH0 DUP2 SLT ISZERO PUSH2 0x28D6 JUMPI POP POP POP PUSH2 0x284D SWAP1 PUSH2 0x2787 JUMP JUMPDEST SWAP2 PUSH32 0x0 SWAP3 JUMPDEST PUSH0 DUP2 SLT ISZERO PUSH2 0x2886 JUMPI POP POP POP POP PUSH2 0x18E8 SWAP1 PUSH2 0x374D JUMP JUMPDEST PUSH2 0x28D1 SWAP1 DUP3 PUSH0 MSTORE PUSH2 0x28CB PUSH1 0x20 PUSH0 DUP4 DUP3 DUP3 KECCAK256 ADD TLOAD SWAP2 DUP3 DUP3 MSTORE DUP9 DUP2 MSTORE DUP9 PUSH1 0x40 SWAP2 PUSH2 0x28BE DUP11 DUP14 DUP6 DUP8 KECCAK256 TLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP1 PUSH2 0x3F4C JUMP JUMPDEST DUP5 DUP5 MSTORE MSTORE DUP2 KECCAK256 TSTORE DUP5 PUSH2 0x3EA9 JUMP JUMPDEST POP PUSH2 0x2798 JUMP JUMPDEST PUSH2 0x2871 JUMP JUMPDEST PUSH2 0x290E SWAP1 DUP3 PUSH0 MSTORE PUSH2 0x28CB PUSH1 0x20 PUSH0 DUP11 DUP8 DUP6 DUP5 DUP5 KECCAK256 ADD TLOAD SWAP4 DUP5 DUP5 MSTORE DUP2 DUP2 MSTORE PUSH2 0x28BE DUP13 PUSH1 0x40 SWAP5 DUP6 DUP8 KECCAK256 TLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP1 PUSH2 0x3B79 JUMP JUMPDEST PUSH2 0x2839 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x293D JUMPI RETURNDATASIZE SWAP1 PUSH2 0x2924 DUP3 PUSH2 0x1401 JUMP JUMPDEST SWAP2 PUSH2 0x2932 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x11EE JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH6 0xFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x312 JUMPI JUMP JUMPDEST SWAP1 PUSH0 SWAP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 TLOAD AND ISZERO PUSH2 0x298D JUMPI POP POP JUMP JUMPDEST SWAP1 SWAP2 SWAP3 POP TSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x40 DUP3 ADD CALLDATALOAD TIMESTAMP GT PUSH2 0x275F JUMPI PUSH2 0x29B3 PUSH2 0x1AF3 PUSH1 0x20 DUP5 ADD DUP5 PUSH2 0x3790 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST PUSH2 0x29C3 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x3790 JUMP JUMPDEST SWAP1 POP DUP2 LT ISZERO PUSH2 0x366D JUMPI PUSH2 0x29E0 DUP2 PUSH2 0x1B2F PUSH2 0x1B27 PUSH1 0x20 DUP7 ADD DUP7 PUSH2 0x3790 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD SWAP1 PUSH2 0x2A1A PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 MLOAD AND PUSH32 0x0 PUSH2 0x4252 JUMP JUMPDEST POP PUSH1 0x20 DUP2 ADD MLOAD MLOAD PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x1AAA JUMPI JUMPDEST PUSH0 DUP2 SLT ISZERO PUSH2 0x2A40 JUMPI POP POP POP PUSH1 0x1 ADD PUSH2 0x29B6 JUMP JUMPDEST PUSH2 0x2A4E DUP2 PUSH1 0x20 DUP5 ADD MLOAD PUSH2 0x172D JUMP JUMPDEST MLOAD PUSH2 0x2A57 PUSH2 0x3824 JUMP JUMPDEST SWAP1 DUP3 ISZERO PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP5 ADD MLOAD MLOAD DUP1 PUSH0 NOT DUP2 ADD GT PUSH2 0x1AAA JUMPI PUSH0 NOT ADD DUP4 EQ DUP1 DUP4 MSTORE PUSH2 0x362B JUMPI JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD ISZERO PUSH2 0x35F0 JUMPI PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 MLOAD AND SWAP2 JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD ISZERO PUSH2 0x2CB9 JUMPI DUP4 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x60 SWAP3 PUSH1 0x20 PUSH2 0x2B3C SWAP8 ADD MLOAD ISZERO ISZERO DUP1 PUSH2 0x2CB0 JUMPI JUMPDEST PUSH2 0x2C89 JUMPI JUMPDEST MLOAD AND SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP3 SUB PUSH2 0x2C82 JUMPI PUSH1 0x1 SWAP2 JUMPDEST PUSH1 0x40 MLOAD SWAP3 PUSH2 0x2AE8 DUP5 PUSH2 0x11B6 JUMP JUMPDEST PUSH1 0x1 DUP5 MSTORE PUSH2 0x2AF5 DUP2 PUSH2 0x385A JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE DUP9 DUP4 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP3 PUSH32 0x43583BE500000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x3ABE JUMP JUMPDEST SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x307 JUMPI DUP8 SWAP2 DUP12 SWAP2 PUSH0 SWAP6 PUSH2 0x2C5B JUMPI JUMPDEST POP PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x2C4C JUMPI PUSH2 0x2C42 SWAP3 DUP5 PUSH2 0x2B9E PUSH2 0x2C47 SWAP8 SWAP7 SWAP5 PUSH2 0x2C11 SWAP5 PUSH2 0x172D JUMP JUMPDEST MSTORE PUSH2 0x2BD2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH32 0x0 PUSH2 0x4252 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2BE9 DUP5 PUSH1 0x40 DUP11 ADD MLOAD PUSH2 0x384D JUMP JUMPDEST SWAP2 AND PUSH32 0x0 PUSH2 0x429C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 MLOAD AND PUSH32 0x0 PUSH2 0x429C JUMP JUMPDEST PUSH2 0x2798 JUMP JUMPDEST PUSH2 0x2A2D JUMP JUMPDEST POP POP POP PUSH2 0x2C47 SWAP2 SWAP4 POP SWAP3 PUSH2 0x2798 JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP6 POP PUSH2 0x2C78 SWAP1 PUSH1 0x60 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x1D7C JUMPI PUSH2 0x1D69 DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST POP SWAP6 SWAP2 SWAP1 POP PUSH2 0x2B7D JUMP JUMPDEST PUSH0 SWAP2 PUSH2 0x2ADB JUMP JUMPDEST PUSH2 0x2CAB PUSH2 0x2C95 DUP14 PUSH2 0x13E0 JUMP JUMPDEST DUP14 DUP12 PUSH2 0x1B82 DUP9 PUSH1 0x40 DUP9 DUP5 MLOAD AND SWAP4 ADD MLOAD SWAP4 ADD PUSH2 0x13F4 JUMP JUMPDEST PUSH2 0x2AC4 JUMP JUMPDEST POP ORIGIN ISZERO ISZERO PUSH2 0x2ABF JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 MLOAD AND DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EQ PUSH0 EQ PUSH2 0x31D3 JUMPI POP PUSH1 0x20 DUP5 ADD MLOAD PUSH2 0x30E5 JUMPI POP PUSH1 0x40 MLOAD SWAP3 PUSH32 0x9678709200000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x20 DUP5 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x307 JUMPI PUSH0 SWAP5 PUSH2 0x30B1 JUMPI JUMPDEST POP DUP4 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 MLOAD AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x312 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH0 DUP6 DUP1 PUSH1 0x64 DUP2 ADD SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x307 JUMPI PUSH2 0x2E88 SWAP6 PUSH0 SWAP3 PUSH2 0x30A2 JUMPI JUMPDEST POP JUMPDEST PUSH2 0x1E79 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2E44 DUP12 DUP3 DUP6 MLOAD AND DUP4 PUSH1 0x20 DUP8 ADD MLOAD AND SWAP1 PUSH2 0x42B5 JUMP JUMPDEST POP SWAP3 MLOAD AND SWAP2 DUP13 PUSH1 0x2 PUSH2 0x2E5B PUSH1 0x80 SWAP3 DUP4 DUP2 ADD SWAP1 PUSH2 0x1975 JUMP JUMPDEST SWAP3 SWAP1 SWAP4 PUSH1 0x40 MLOAD SWAP7 PUSH2 0x2E6B DUP9 PUSH2 0x1186 JUMP JUMPDEST DUP8 MSTORE ADDRESS PUSH1 0x20 DUP9 ADD MSTORE DUP10 PUSH1 0x40 DUP9 ADD MSTORE PUSH1 0x60 DUP8 ADD MSTORE DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x141D JUMP JUMPDEST SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x307 JUMPI PUSH0 SWAP5 PUSH2 0x307F JUMPI JUMPDEST POP PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x2F6B JUMPI SWAP1 DUP3 SWAP2 PUSH2 0x2C47 SWAP5 SWAP4 PUSH2 0x2EE1 DUP10 DUP14 PUSH2 0x172D JUMP JUMPDEST MSTORE PUSH2 0x2F16 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH32 0x0 PUSH2 0x429C JUMP JUMPDEST DUP1 DUP4 LT DUP1 PUSH2 0x2F50 JUMPI JUMPDEST PUSH2 0x2F2C JUMPI JUMPDEST POP POP POP PUSH2 0x2798 JUMP JUMPDEST PUSH2 0x2F42 PUSH2 0x2F48 SWAP4 PUSH2 0x2F3C DUP12 PUSH2 0x13E0 JUMP JUMPDEST SWAP3 PUSH2 0x384D JUMP JUMPDEST SWAP2 PUSH2 0x43E8 JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0x2F24 JUMP JUMPDEST POP ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2F63 DUP12 PUSH2 0x13E0 JUMP JUMPDEST AND EQ ISZERO PUSH2 0x2F1F JUMP JUMPDEST SWAP5 POP SWAP1 DUP1 SWAP5 DUP1 DUP3 LT PUSH2 0x2F84 JUMPI JUMPDEST POP POP POP PUSH2 0x2C47 SWAP1 PUSH2 0x2798 JUMP JUMPDEST SWAP2 PUSH2 0x2F94 PUSH1 0x20 SWAP3 PUSH2 0x3013 SWAP5 PUSH2 0x384D JUMP JUMPDEST SWAP1 PUSH2 0x2FC9 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP4 PUSH2 0x43E8 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP3 DUP4 SWAP3 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x307 JUMPI PUSH2 0x3054 JUMPI JUMPDEST DUP1 DUP1 PUSH2 0x2F78 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3078 JUMPI JUMPDEST PUSH2 0x306A DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x312 JUMPI PUSH0 PUSH2 0x304D JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3060 JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP5 POP PUSH2 0x3097 SWAP1 RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x1FC0 DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST POP SWAP1 SWAP5 SWAP2 SWAP1 POP PUSH2 0x2EC5 JUMP JUMPDEST PUSH2 0x30AB SWAP1 PUSH2 0x11A2 JUMP JUMPDEST PUSH0 PUSH2 0x2E22 JUMP JUMPDEST SWAP1 SWAP4 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x30DD JUMPI JUMPDEST DUP2 PUSH2 0x30CD PUSH1 0x20 SWAP4 DUP4 PUSH2 0x11EE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x312 JUMPI MLOAD SWAP3 PUSH0 PUSH2 0x2D58 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x30C0 JUMP JUMPDEST SWAP1 SWAP3 PUSH2 0x30F0 DUP10 PUSH2 0x13E0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB ADDRESS SWAP2 AND SUB PUSH2 0x310B JUMPI JUMPDEST PUSH0 PUSH2 0x2E88 SWAP5 PUSH2 0x2E24 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP4 PUSH2 0x313F DUP11 PUSH2 0x13E0 JUMP JUMPDEST PUSH2 0x3148 DUP5 PUSH2 0x438F JUMP JUMPDEST SWAP1 DUP7 EXTCODESIZE ISZERO PUSH2 0x312 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP2 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE DUP6 AND PUSH1 0x64 DUP3 ADD MSTORE SWAP5 PUSH0 SWAP1 DUP7 SWAP1 PUSH1 0x84 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x307 JUMPI PUSH2 0x2E88 SWAP6 PUSH0 SWAP3 PUSH2 0x31C4 JUMPI JUMPDEST POP SWAP5 POP POP PUSH2 0x3101 JUMP JUMPDEST PUSH2 0x31CD SWAP1 PUSH2 0x11A2 JUMP JUMPDEST PUSH0 PUSH2 0x31BB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP5 SWAP7 SWAP6 SWAP5 ADD MLOAD AND DUP11 DUP3 DUP3 EQ PUSH0 EQ PUSH2 0x34A7 JUMPI POP POP POP PUSH2 0x32A8 PUSH2 0x320A PUSH0 SWAP3 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 MLOAD AND PUSH2 0x42B5 JUMP JUMPDEST SWAP3 SWAP1 PUSH2 0x3270 DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP11 MLOAD AND SWAP4 DUP10 MLOAD ISZERO ISZERO DUP7 EQ PUSH2 0x347B JUMPI PUSH2 0x323F PUSH2 0x3233 DUP5 PUSH2 0x13E0 JUMP JUMPDEST SWAP4 JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 PUSH2 0x1975 JUMP JUMPDEST SWAP3 SWAP1 SWAP4 PUSH1 0x40 MLOAD SWAP7 PUSH2 0x324F DUP9 PUSH2 0x1186 JUMP JUMPDEST DUP8 MSTORE AND PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE DUP13 PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x2 PUSH1 0x80 DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x141D JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x4AF29EC400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x3994 JUMP JUMPDEST SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x307 JUMPI PUSH0 SWAP2 PUSH2 0x3460 JUMPI JUMPDEST POP PUSH1 0x20 DUP5 ADD MLOAD DUP13 SWAP1 DUP11 SWAP1 ISZERO PUSH2 0x3446 JUMPI DUP4 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 PUSH2 0x331F PUSH2 0x3325 SWAP5 PUSH2 0x3318 DUP16 SWAP13 SWAP12 SWAP11 SWAP9 SWAP10 PUSH2 0x334E SWAP11 PUSH2 0x172D JUMP JUMPDEST MLOAD SWAP3 PUSH2 0x172D JUMP JUMPDEST MSTORE PUSH2 0x172D JUMP JUMPDEST MLOAD SWAP2 AND PUSH32 0x0 PUSH2 0x429C JUMP JUMPDEST MLOAD ISZERO PUSH2 0x3390 JUMPI PUSH2 0x2C47 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH2 0x2C42 SWAP4 ADD MLOAD AND PUSH32 0x0 PUSH2 0x43D3 JUMP JUMPDEST MLOAD PUSH1 0x40 MLOAD PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 DUP1 PUSH1 0x44 DUP2 ADD SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x307 JUMPI PUSH2 0x341B JUMPI JUMPDEST POP PUSH2 0x2C47 SWAP1 PUSH2 0x2798 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x343F JUMPI JUMPDEST PUSH2 0x3431 DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x312 JUMPI PUSH0 PUSH2 0x3411 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3427 JUMP JUMPDEST POP POP SWAP1 SWAP2 POP PUSH2 0x3457 SWAP3 SWAP4 SWAP7 POP PUSH2 0x172D JUMP JUMPDEST MLOAD SWAP4 DUP5 SWAP2 PUSH2 0x334E JUMP JUMPDEST PUSH2 0x3474 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2438 DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST SWAP1 POP PUSH2 0x32E5 JUMP JUMPDEST PUSH2 0x323F DUP3 PUSH32 0x0 AND SWAP4 PUSH2 0x3235 JUMP JUMPDEST PUSH2 0x353A SWAP7 POP SWAP1 PUSH2 0x3502 SWAP2 PUSH1 0x60 SWAP5 DUP12 PUSH2 0x34C7 PUSH1 0x80 SWAP10 SWAP9 SWAP10 SWAP4 DUP5 DUP2 ADD SWAP1 PUSH2 0x1975 JUMP JUMPDEST SWAP4 SWAP1 SWAP5 PUSH1 0x40 MLOAD SWAP8 PUSH2 0x34D7 DUP10 PUSH2 0x11D2 JUMP JUMPDEST PUSH1 0x1 DUP10 MSTORE PUSH1 0x20 DUP10 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND PUSH1 0x40 DUP10 ADD MSTORE DUP9 DUP9 ADD MSTORE DUP7 ADD MSTORE PUSH1 0xA0 DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x141D JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP3 PUSH32 0x2BFB780C00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x38AC JUMP JUMPDEST SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x307 JUMPI DUP8 SWAP2 DUP12 SWAP2 PUSH0 SWAP6 PUSH2 0x35C9 JUMPI JUMPDEST POP PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x2C4C JUMPI PUSH2 0x2C42 SWAP3 DUP5 PUSH2 0x35A1 PUSH2 0x2C47 SWAP8 SWAP7 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 PUSH2 0x172D JUMP JUMPDEST MSTORE AND PUSH32 0x0 PUSH2 0x429C JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP6 POP PUSH2 0x35E6 SWAP1 PUSH1 0x60 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x1D7C JUMPI PUSH2 0x1D69 DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST POP SWAP6 SWAP2 SWAP1 POP PUSH2 0x357B JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH2 0x3621 DUP2 DUP9 ADD MLOAD PUSH2 0x361B DUP9 PUSH2 0x2787 JUMP JUMPDEST SWAP1 PUSH2 0x172D JUMP JUMPDEST MLOAD ADD MLOAD AND SWAP2 PUSH2 0x2A98 JUMP JUMPDEST PUSH2 0x3668 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP5 ADD PUSH2 0x1D03 DUP3 DUP3 MLOAD AND PUSH32 0x0 PUSH2 0x4252 JUMP JUMPDEST PUSH2 0x2A7C JUMP JUMPDEST POP POP PUSH2 0x3698 PUSH32 0x0 PUSH2 0x3B0D JUMP JUMPDEST SWAP2 PUSH2 0x36A3 DUP4 MLOAD PUSH2 0x1A6C JUMP JUMPDEST PUSH32 0x0 SWAP2 PUSH32 0x0 SWAP2 SWAP1 PUSH0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x2756 JUMPI PUSH1 0x1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x3709 DUP4 DUP12 PUSH2 0x172D JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP6 PUSH1 0x20 MSTORE PUSH2 0x3724 PUSH1 0x40 PUSH0 KECCAK256 TLOAD DUP3 PUSH2 0x271A DUP6 DUP14 PUSH2 0x172D JUMP JUMPDEST PUSH2 0x372E DUP4 DUP8 PUSH2 0x172D JUMP JUMPDEST MSTORE PUSH2 0x3739 DUP3 DUP11 PUSH2 0x172D JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP6 PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 TSTORE ADD PUSH2 0x36EA JUMP JUMPDEST SELFBALANCE DUP1 ISZERO PUSH2 0x378C JUMPI PUSH32 0x0 TLOAD PUSH2 0x378C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x18E8 SWAP3 AND PUSH2 0x4172 JUMP JUMPDEST POP POP JUMP JUMPDEST SWAP1 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP2 CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x312 JUMPI ADD DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x312 JUMPI PUSH1 0x20 ADD SWAP2 DUP2 PUSH1 0x5 SHL CALLDATASIZE SUB DUP4 SGT PUSH2 0x312 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x1741 JUMPI PUSH1 0x5 SHL DUP2 ADD CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 DUP2 CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x312 JUMPI ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0x40 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1159 JUMPI PUSH1 0x40 MSTORE PUSH0 PUSH1 0x20 DUP4 DUP3 DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x1AAA JUMPI JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x3864 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x60 SWAP2 SUB SLT PUSH2 0x312 JUMPI DUP1 MLOAD SWAP2 PUSH1 0x40 PUSH1 0x20 DUP4 ADD MLOAD SWAP3 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x100 PUSH1 0xC0 PUSH2 0x1018 SWAP4 PUSH1 0x20 DUP5 MSTORE DUP1 MLOAD PUSH2 0x38C4 DUP2 PUSH2 0x385A JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH1 0x40 DUP7 ADD MSTORE DUP1 PUSH1 0x40 DUP4 ADD MLOAD AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD DUP3 DUP6 ADD MSTORE ADD MLOAD SWAP2 PUSH1 0xE0 DUP1 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x1097 JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x60 DUP3 DUP5 SUB SLT PUSH2 0x312 JUMPI DUP2 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x312 JUMPI DUP5 PUSH2 0x3944 SWAP2 DUP4 ADD PUSH2 0x160F JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP3 ADD MLOAD SWAP4 PUSH1 0x40 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x312 JUMPI PUSH2 0x1018 SWAP3 ADD PUSH2 0x15A3 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x3980 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x3972 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x39CD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0xC0 PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0xE0 DUP4 ADD SWAP1 PUSH2 0x3961 JUMP JUMPDEST SWAP1 PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0x3864 JUMPI PUSH2 0x1018 SWAP4 PUSH1 0xA0 SWAP2 DUP3 DUP5 ADD MSTORE ADD MLOAD SWAP1 PUSH1 0xC0 PUSH1 0x1F NOT DUP3 DUP6 SUB ADD SWAP2 ADD MSTORE PUSH2 0x1097 JUMP JUMPDEST SWAP2 PUSH1 0x60 DUP4 DUP4 SUB SLT PUSH2 0x312 JUMPI DUP3 MLOAD SWAP3 PUSH1 0x20 DUP2 ADD MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP2 GT PUSH2 0x312 JUMPI DUP2 PUSH2 0x3A36 SWAP2 DUP5 ADD PUSH2 0x160F JUMP JUMPDEST SWAP4 PUSH1 0x40 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x312 JUMPI PUSH2 0x1018 SWAP3 ADD PUSH2 0x15A3 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x3A90 PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xC0 PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xE0 DUP4 ADD SWAP1 PUSH2 0x3961 JUMP JUMPDEST SWAP1 PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x3864 JUMPI PUSH2 0x1018 SWAP4 PUSH1 0xA0 SWAP2 DUP3 DUP5 ADD MSTORE ADD MLOAD SWAP1 PUSH1 0xC0 PUSH1 0x1F NOT DUP3 DUP6 SUB ADD SWAP2 ADD MSTORE PUSH2 0x1097 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x80 DUP1 PUSH1 0xA0 DUP4 ADD SWAP5 DUP1 MLOAD PUSH2 0x3AD4 DUP2 PUSH2 0x385A JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x3AE4 DUP2 PUSH2 0x385A JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP6 ADD MSTORE ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 TLOAD PUSH2 0x3B19 DUP2 PUSH2 0x1211 JUMP JUMPDEST PUSH2 0x3B26 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x11EE JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH2 0x3B32 DUP3 PUSH2 0x1211 JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x20 SWAP2 ADD CALLDATASIZE PUSH1 0x20 DUP5 ADD CALLDATACOPY DUP2 SWAP5 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x3B51 JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH0 MSTORE DUP1 DUP5 PUSH0 KECCAK256 ADD TLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x3B6F DUP4 DUP9 PUSH2 0x172D JUMP JUMPDEST SWAP2 AND SWAP1 MSTORE ADD PUSH2 0x3B43 JUMP JUMPDEST SWAP2 SWAP3 DUP1 PUSH2 0x3E74 JUMPI JUMPDEST ISZERO PUSH2 0x3CED JUMPI POP POP DUP1 SELFBALANCE LT PUSH2 0x3CC5 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP2 DUP3 EXTCODESIZE ISZERO PUSH2 0x312 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xD0E30DB000000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH0 SWAP2 PUSH0 DUP2 PUSH1 0x4 DUP2 DUP6 DUP10 GAS CALL DUP1 ISZERO PUSH2 0x307 JUMPI PUSH2 0x3CAE JUMPI JUMPDEST POP PUSH1 0x44 PUSH1 0x20 SWAP3 SWAP4 PUSH32 0x0 AND SWAP5 PUSH2 0x3C34 DUP4 DUP8 DUP4 PUSH2 0x43E8 JUMP JUMPDEST DUP5 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP4 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x3CA2 JUMPI POP PUSH2 0x3C7B JUMPI POP JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3C9B JUMPI JUMPDEST PUSH2 0x3C91 DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x312 JUMPI JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3C87 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x20 SWAP3 POP PUSH2 0x3CBB SWAP1 PUSH2 0x11A2 JUMP JUMPDEST PUSH1 0x44 PUSH0 SWAP3 POP PUSH2 0x3BFF JUMP JUMPDEST PUSH32 0xA01A9DF600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 PUSH0 SWAP1 DUP1 PUSH2 0x3CFD JUMPI JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 PUSH32 0x0 AND SWAP5 DUP1 PUSH32 0x0 AND SWAP2 PUSH2 0x3D57 DUP5 PUSH2 0x438F JUMP JUMPDEST SWAP7 DUP1 EXTCODESIZE ISZERO PUSH2 0x312 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP8 DUP3 AND PUSH1 0x44 DUP10 ADD MSTORE SWAP2 DUP7 AND AND PUSH1 0x64 DUP8 ADD MSTORE PUSH0 SWAP1 DUP7 SWAP1 PUSH1 0x84 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP5 DUP6 ISZERO PUSH2 0x307 JUMPI PUSH2 0x3E1C SWAP6 PUSH2 0x3E60 JUMPI JUMPDEST POP DUP3 SWAP4 PUSH1 0x20 SWAP4 PUSH1 0x40 MLOAD DUP1 SWAP8 DUP2 SWAP6 DUP3 SWAP5 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x3CA2 JUMPI POP PUSH2 0x3E35 JUMPI JUMPDEST DUP1 DUP1 DUP1 PUSH2 0x3CF7 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3E59 JUMPI JUMPDEST PUSH2 0x3E4B DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x312 JUMPI PUSH0 PUSH2 0x3E2D JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3E41 JUMP JUMPDEST PUSH1 0x20 SWAP4 POP PUSH2 0x3E6D SWAP1 PUSH2 0x11A2 JUMP JUMPDEST PUSH0 SWAP3 PUSH2 0x3DCB JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP1 DUP3 AND EQ PUSH2 0x3B81 JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SWAP2 DUP1 PUSH0 MSTORE PUSH1 0x20 SWAP2 DUP4 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD DUP1 ISZERO ISZERO PUSH0 EQ PUSH2 0x3F43 JUMPI PUSH0 NOT SWAP1 DUP2 DUP2 ADD DUP4 TLOAD DUP4 DUP1 DUP3 ADD SWAP2 DUP3 DUP5 SUB PUSH2 0x3F06 JUMPI JUMPDEST POP POP POP POP POP DUP2 TLOAD DUP2 DUP2 ADD SWAP3 DUP2 DUP5 GT PUSH2 0x1AAA JUMPI PUSH0 SWAP4 DUP2 TSTORE DUP4 MSTORE DUP5 DUP4 KECCAK256 ADD ADD TSTORE PUSH0 MSTORE MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 TSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH2 0x3F13 PUSH2 0x3F23 SWAP4 DUP9 PUSH2 0x44CC JUMP JUMPDEST DUP7 PUSH0 MSTORE DUP9 PUSH0 KECCAK256 ADD ADD TLOAD SWAP2 DUP6 PUSH2 0x44CC JUMP JUMPDEST DUP4 PUSH0 MSTORE DUP1 DUP4 DUP4 DUP9 PUSH0 KECCAK256 ADD ADD TSTORE PUSH0 MSTORE DUP6 DUP6 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TSTORE PUSH0 DUP1 DUP1 DUP4 DUP2 PUSH2 0x3EDA JUMP JUMPDEST POP POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SWAP1 SWAP4 SWAP3 SWAP4 PUSH0 SWAP5 DUP4 ISZERO PUSH2 0x416A JUMPI DUP1 PUSH2 0x4135 JUMPI JUMPDEST ISZERO PUSH2 0x4098 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH32 0x0 AND DUP1 EXTCODESIZE ISZERO PUSH2 0x312 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 DUP9 PUSH32 0x0 AND SWAP7 DUP8 PUSH1 0x4 DUP5 ADD MSTORE ADDRESS PUSH1 0x24 DUP5 ADD MSTORE DUP11 PUSH1 0x44 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x307 JUMPI PUSH2 0x4085 JUMPI JUMPDEST POP DUP1 DUP7 SWAP2 EXTCODESIZE ISZERO PUSH2 0x4081 JUMPI DUP2 SWAP1 PUSH1 0x24 PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x2E1A7D4D00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x4076 JUMPI PUSH2 0x405E JUMPI JUMPDEST POP PUSH2 0x18E8 SWAP4 SWAP5 POP AND PUSH2 0x4172 JUMP JUMPDEST PUSH2 0x4068 DUP7 SWAP2 PUSH2 0x11A2 JUMP JUMPDEST PUSH2 0x4072 JUMPI DUP5 PUSH2 0x4051 JUMP JUMPDEST DUP5 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP9 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST PUSH2 0x4090 SWAP2 SWAP7 POP PUSH2 0x11A2 JUMP JUMPDEST PUSH0 SWAP5 PUSH0 PUSH2 0x4006 JUMP JUMPDEST SWAP2 SWAP1 SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP1 EXTCODESIZE ISZERO PUSH2 0x312 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP4 SWAP1 SWAP3 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE PUSH0 SWAP1 DUP3 SWAP1 PUSH1 0x64 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL DUP1 ISZERO PUSH2 0x307 JUMPI PUSH2 0x412C JUMPI POP JUMP JUMPDEST PUSH2 0x18E8 SWAP1 PUSH2 0x11A2 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP1 DUP3 AND EQ PUSH2 0x3F5E JUMP JUMPDEST POP POP POP POP SWAP1 POP JUMP JUMPDEST DUP2 SELFBALANCE LT PUSH2 0x41C2 JUMPI PUSH0 DUP1 DUP1 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 SWAP5 AND GAS CALL PUSH2 0x4192 PUSH2 0x2913 JUMP JUMPDEST POP ISZERO PUSH2 0x419A JUMPI JUMP JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0xCD78605900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE ADDRESS PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x4203 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x419A JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x4249 JUMPI JUMPDEST PUSH2 0x4214 JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x420C JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SWAP1 DUP3 PUSH0 MSTORE DUP2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD ISZERO PUSH0 EQ PUSH2 0x4295 JUMPI DUP1 TLOAD DUP2 PUSH0 MSTORE DUP4 DUP2 PUSH1 0x20 PUSH0 KECCAK256 ADD TSTORE PUSH1 0x1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x1AAA JUMPI DUP2 TSTORE TLOAD SWAP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x42B1 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 TLOAD PUSH2 0x1A9D JUMP JUMPDEST SWAP1 TSTORE JUMP JUMPDEST SWAP2 PUSH1 0x44 SWAP3 SWAP4 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 SWAP5 DUP6 SWAP3 DUP3 DUP1 DUP6 MLOAD SWAP10 DUP11 SWAP6 DUP7 SWAP5 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x4 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x4385 JUMPI PUSH0 SWAP4 PUSH0 SWAP6 PUSH2 0x434E JUMPI JUMPDEST POP POP PUSH2 0x434B PUSH2 0x4344 DUP6 SWAP5 PUSH2 0x1A6C JUMP JUMPDEST SWAP5 DUP6 PUSH2 0x172D JUMP JUMPDEST MSTORE JUMP JUMPDEST DUP1 SWAP3 SWAP6 POP DUP2 SWAP5 POP RETURNDATASIZE DUP4 GT PUSH2 0x437E JUMPI JUMPDEST PUSH2 0x4367 DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x312 JUMPI PUSH1 0x20 DUP3 MLOAD SWAP3 ADD MLOAD SWAP3 PUSH0 DUP1 PUSH2 0x4335 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x435D JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP2 GT PUSH2 0x43A3 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0xA0 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x42B1 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 TLOAD PUSH2 0x384D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 PUSH1 0x20 DUP5 ADD SWAP1 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 AND PUSH1 0x24 DUP7 ADD MSTORE PUSH1 0x44 DUP6 ADD MSTORE PUSH1 0x44 DUP5 MSTORE PUSH1 0x80 DUP5 ADD SWAP1 DUP5 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x1159 JUMPI PUSH2 0x4467 SWAP4 PUSH0 SWAP4 DUP5 SWAP4 PUSH1 0x40 MSTORE AND SWAP5 MLOAD SWAP1 DUP3 DUP7 GAS CALL PUSH2 0x4460 PUSH2 0x2913 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x41EE JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x44A8 JUMPI JUMPDEST POP POP PUSH2 0x447D JUMPI POP JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 SWAP3 POP SWAP1 PUSH1 0x20 SWAP2 DUP2 ADD SUB SLT PUSH2 0x312 JUMPI PUSH1 0x20 ADD MLOAD DUP1 ISZERO SWAP1 DUP2 ISZERO SUB PUSH2 0x312 JUMPI PUSH0 DUP1 PUSH2 0x4474 JUMP JUMPDEST TLOAD GT ISZERO PUSH2 0x44D5 JUMPI JUMP JUMPDEST PUSH32 0xF4AE0E400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC4 SLOAD 0xB5 0xC6 0xB2 0x22 DUP13 0xAD PUSH1 0x81 0xC9 0xBE 0xDE CALLER 0xF8 0x23 0xBE BYTE SGT 0xE2 PUSH24 0x4D7B00E869883D9408EEFD64736F6C634300081B00330000 ","sourceMap":"1782:32167:60:-:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;1782:32167:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1782:32167:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1782:32167:60;;;;;;;;;;;;;1487:71:66;1782:32167:60;;;;;:::i;:::-;;;;-1:-1:-1;;;1782:32167:60;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;1782:32167:60;;;;1487:71:66;:::i;:::-;1782:32167:60;1487:71:66;409:14:72;;1782:32167:60;;;;;;;-1:-1:-1;1782:32167:60;;;;;;;;;;;;;;-1:-1:-1;1782:32167:60;;;;;;;;;;;-1:-1:-1;1782:32167:60;;;;;;;;;;;;;;;;-1:-1:-1;1782:32167:60;;;;;;;;;;;;;;;;;-1:-1:-1;1782:32167:60;;2796:83:65;1782:32167:60;;;;;:::i;:::-;;;;-1:-1:-1;;;1782:32167:60;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;1782:32167:60;;;;2796:83:65;:::i;:::-;;;3976:12;;3998:18;;;;1422:55:61;1782:32167:60;;;;;:::i;:::-;;;;;;;;;1422:55:61;:::i;:::-;;;;;;1540:56;1782:32167:60;;;;;:::i;:::-;;;;;;;;;1540:56:61;:::i;:::-;;;;;1674:61;1782:32167:60;;;;;:::i;:::-;;;;;;;;;1674:61:61;:::i;:::-;;;;;;1938:55;1814:62;1782:32167:60;;;;;:::i;:::-;;;;;;;;;1814:62:61;:::i;:::-;;;;;;1782:32167:60;;;;;;;:::i;:::-;;;;;;;1938:55:61;:::i;:::-;;;;;;1782:32167:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;409:14:72;1782:32167:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2796:83:65;1782:32167:60;;;;;;;;;;3976:12:65;1782:32167:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1782:32167:60;;;;;;;;;;-1:-1:-1;1782:32167:60;;;;-1:-1:-1;1782:32167:60;;-1:-1:-1;1782:32167:60;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1782:32167:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1782:32167:60;;;;-1:-1:-1;1782:32167:60;;;-1:-1:-1;1782:32167:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1782:32167:60;;;;;;;;;;;;;;;;;;-1:-1:-1;1782:32167:60;;;;;-1:-1:-1;1782:32167:60;;;;;;;;;;;;-1:-1:-1;1782:32167:60;;;;;-1:-1:-1;1782:32167:60;;-1:-1:-1;1782:32167:60;;;;;;;;;-1:-1:-1;;;;;1782:32167:60;;;;;;;:::o;:::-;;;;;-1:-1:-1;;1782:32167:60;;;;-1:-1:-1;;;;;1782:32167:60;;;;;;;;;;:::o;4125:189:61:-;4235:72;4125:189;1782:32167:60;;;;;:::i;:::-;;;;-1:-1:-1;;;1782:32167:60;;;;4235:72:61;:::i;:::-;4125:189;:::o;1276:306:47:-;;1461:67;1782:32167:60;1461:67:47;1276:306;1782:32167:60;;1461:67:47;;;;;;;1782:32167:60;;;;;;;;;;;;;;;;;-1:-1:-1;;;1782:32167:60;;;;;;;;;;;;;;;-1:-1:-1;1782:32167:60;;;;1461:67:47;;;;;;;;;:::i;:::-;1782:32167:60;1451:78:47;;-1:-1:-1;;1782:32167:60;;;;;;;;;1432:103:47;1461:67;1432:103;;1782:32167:60;;;1461:67:47;1432:103;;;;;:::i;:::-;1782:32167:60;;1405:144:47;;-1:-1:-1;;1405:170:47;;1276:306::o;1782:32167:60:-;;;;-1:-1:-1;1782:32167:60;;;;;-1:-1:-1;1782:32167:60"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":4669,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_array_bytes_calldata_dyn_calldata":{"entryPoint":4152,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_array_struct_SwapPathExactAmountIn_dyn":{"entryPoint":4960,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn_fromMemory":{"entryPoint":5647,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dynt_array_address_dynt_array_uint256_dyn_fromMemory":{"entryPoint":5744,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_array_uint256_dynt_uint256t_bytes_fromMemory":{"entryPoint":14616,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_available_length_bytes":{"entryPoint":5149,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_bool":{"entryPoint":4691,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bytes_calldata":{"entryPoint":4201,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bytes_fromMemory":{"entryPoint":5539,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bytes_memory_ptr_fromMemory":{"entryPoint":5609,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IERC20":{"entryPoint":4649,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_struct_SwapExactInHookParams_calldata":{"entryPoint":3942,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_struct_SwapPathExactAmountIn":{"entryPoint":4706,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint256t_array_uint256_dynt_bytes_fromMemory":{"entryPoint":14853,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_uint256t_uint256t_uint256_fromMemory":{"entryPoint":14481,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_uint48":{"entryPoint":10562,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address_address_uint160_address":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_array_bytes_dyn":{"entryPoint":4284,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":3992,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn_array_address_dyn_array_uint256_dyn":{"entryPoint":4043,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_array_uint256_dyn_memory_ptr":{"entryPoint":14689,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bytes":{"entryPoint":4247,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_contract_IERC20_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_contract_IERC20_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_struct_AddLiquidityParams":{"entryPoint":14740,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_BufferWrapOrUnwrapParams":{"entryPoint":15038,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_RemoveLiquidityParams":{"entryPoint":14925,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_SwapExactInHookParams":{"entryPoint":5338,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_SwapExactOutHookParams":{"entryPoint":5998,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_SwapPathExactAmountIn":{"entryPoint":5203,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_VaultSwapParams":{"entryPoint":14508,"id":null,"parameterSlots":2,"returnSlots":1},"access_calldata_tail_array_struct_SwapPathExactAmountIn_calldata_dyn_calldata":{"entryPoint":14224,"id":null,"parameterSlots":2,"returnSlots":2},"access_calldata_tail_bytes_calldata":{"entryPoint":6517,"id":null,"parameterSlots":2,"returnSlots":2},"allocate_and_zero_memory_array_array_uint256_dyn":{"entryPoint":6764,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_and_zero_memory_struct_struct_SwapStepLocals":{"entryPoint":14372,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_array_struct_SwapPathExactAmountIn_dyn":{"entryPoint":4625,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":5121,"id":null,"parameterSlots":1,"returnSlots":1},"calldata_array_index_access_bytes_calldata_dyn_calldata":{"entryPoint":6598,"id":null,"parameterSlots":3,"returnSlots":2},"calldata_array_index_access_struct_SwapPathExactAmountIn_calldata_dyn_calldata":{"entryPoint":14308,"id":null,"parameterSlots":3,"returnSlots":1},"checked_add_uint256":{"entryPoint":6813,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_int256":{"entryPoint":10119,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_uint256":{"entryPoint":14413,"id":null,"parameterSlots":2,"returnSlots":1},"decrement_int256":{"entryPoint":10136,"id":null,"parameterSlots":1,"returnSlots":1},"extract_returndata":{"entryPoint":10515,"id":null,"parameterSlots":0,"returnSlots":1},"finalize_allocation":{"entryPoint":4590,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_33353":{"entryPoint":4413,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_33354":{"entryPoint":4486,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_33355":{"entryPoint":4514,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_33359":{"entryPoint":4534,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_33415":{"entryPoint":4562,"id":null,"parameterSlots":1,"returnSlots":0},"fun_add":{"entryPoint":16978,"id":10357,"parameterSlots":2,"returnSlots":1},"fun_ensureIndexWithinBounds":{"entryPoint":17612,"id":7241,"parameterSlots":2,"returnSlots":0},"fun_ensureOnlyVault":{"entryPoint":6670,"id":28148,"parameterSlots":0,"returnSlots":0},"fun_getSingleInputArrayAndTokenIndex":{"entryPoint":17077,"id":19026,"parameterSlots":3,"returnSlots":2},"fun_nonReentrantBefore":{"entryPoint":6625,"id":9916,"parameterSlots":0,"returnSlots":0},"fun_remove":{"entryPoint":16041,"id":10455,"parameterSlots":2,"returnSlots":1},"fun_returnEth":{"entryPoint":14157,"id":18982,"parameterSlots":1,"returnSlots":0},"fun_safeTransfer":{"entryPoint":17384,"id":40221,"parameterSlots":3,"returnSlots":0},"fun_saveSender":{"entryPoint":10581,"id":19282,"parameterSlots":1,"returnSlots":1},"fun_sendTokenOut":{"entryPoint":16204,"id":19126,"parameterSlots":4,"returnSlots":0},"fun_sendValue":{"entryPoint":16754,"id":40518,"parameterSlots":2,"returnSlots":0},"fun_settlePaths":{"entryPoint":10181,"id":14206,"parameterSlots":2,"returnSlots":0},"fun_swapExactInHook":{"entryPoint":6871,"id":12399,"parameterSlots":1,"returnSlots":3},"fun_swapExactOutHook":{"entryPoint":10647,"id":13086,"parameterSlots":1,"returnSlots":3},"fun_tAdd":{"entryPoint":17052,"id":7103,"parameterSlots":3,"returnSlots":0},"fun_tSub":{"entryPoint":17363,"id":7133,"parameterSlots":3,"returnSlots":0},"fun_takeTokenIn":{"entryPoint":15225,"id":19083,"parameterSlots":4,"returnSlots":0},"fun_toUint160":{"entryPoint":17295,"id":43591,"parameterSlots":1,"returnSlots":1},"fun_values":{"entryPoint":15117,"id":10655,"parameterSlots":1,"returnSlots":1},"fun_verifyCallResultFromTarget":{"entryPoint":16878,"id":40673,"parameterSlots":3,"returnSlots":1},"memory_array_index_access_struct_SwapPathExactAmountOut_dyn":{"entryPoint":5933,"id":null,"parameterSlots":2,"returnSlots":1},"modifier_saveSenderAndManageEth":{"entryPoint":6199,"id":18636,"parameterSlots":2,"returnSlots":1},"read_from_calldatat_address":{"entryPoint":5088,"id":null,"parameterSlots":1,"returnSlots":1},"read_from_calldatat_bool":{"entryPoint":5108,"id":null,"parameterSlots":1,"returnSlots":1},"validator_assert_enum_SwapKind":{"entryPoint":14426,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"13947":[{"length":32,"start":9733},{"length":32,"start":10220},{"length":32,"start":10742},{"length":32,"start":13940}],"13952":[{"length":32,"start":7391},{"length":32,"start":7979},{"length":32,"start":8977},{"length":32,"start":9587},{"length":32,"start":9834},{"length":32,"start":10184},{"length":32,"start":11182},{"length":32,"start":13892}],"13957":[{"length":32,"start":7647},{"length":32,"start":9777},{"length":32,"start":10264},{"length":32,"start":13098},{"length":32,"start":13733},{"length":32,"start":14023}],"13962":[{"length":32,"start":7432},{"length":32,"start":8028},{"length":32,"start":9629},{"length":32,"start":9917},{"length":32,"start":10320},{"length":32,"start":11245},{"length":32,"start":13164}],"13967":[{"length":32,"start":9019},{"length":32,"start":9883},{"length":32,"start":11294},{"length":32,"start":12018},{"length":32,"start":13989}],"18582":[{"length":32,"start":6213},{"length":32,"start":14166}],"18585":[{"length":32,"start":34},{"length":32,"start":3861},{"length":32,"start":15258},{"length":32,"start":16000},{"length":32,"start":16326},{"length":32,"start":16705}],"18588":[{"length":32,"start":2179},{"length":32,"start":2633},{"length":32,"start":2909},{"length":32,"start":8202},{"length":32,"start":8336},{"length":32,"start":12565},{"length":32,"start":15625}],"19225":[{"length":32,"start":704},{"length":32,"start":1355},{"length":32,"start":6331},{"length":32,"start":10586}],"28110":[{"length":32,"start":604},{"length":32,"start":6680},{"length":32,"start":7292},{"length":32,"start":7870},{"length":32,"start":8469},{"length":32,"start":8878},{"length":32,"start":9151},{"length":32,"start":9293},{"length":32,"start":9487},{"length":32,"start":11081},{"length":32,"start":11560},{"length":32,"start":11632},{"length":32,"start":11758},{"length":32,"start":11925},{"length":32,"start":12195},{"length":32,"start":12320},{"length":32,"start":12981},{"length":32,"start":13284},{"length":32,"start":13441},{"length":32,"start":13639},{"length":32,"start":15368},{"length":32,"start":15661},{"length":32,"start":16240},{"length":32,"start":16551},{"length":32,"start":17155}]},"linkReferences":{},"object":"60806040526004361015610072575b3615610018575f80fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361004a57005b7f0540ddf6000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f3560e01c806308a465f614610f39578063107c279f14610ef657806319c6989f146108a75780631bbf2e2314610864578063286f580d146107cd5780632950286e146106e257806354fd4d50146105a55780635a3c39871461057c5780635e01eb5a146105375780638a12a08c146104dc5780638eb1b65e146103d5578063945ed33f1461035a578063ac9650d8146103165763e3b5dff40361000e5734610312576060806003193601126103125767ffffffffffffffff60043581811161031257610143903690600401611360565b61014b61123d565b6044359283116103125761016661016e933690600401611069565b939091612955565b905f5b835181101561019257805f876101896001948861172d565b51015201610171565b5061020661021461024f946101cc5f9488604051936101b0856111b6565b30855260208501525f196040850152866060850152369161141d565b60808201526040519283917f8a12a08c000000000000000000000000000000000000000000000000000000006020840152602483016114da565b03601f1981018352826111ee565b604051809481927fedfa3568000000000000000000000000000000000000000000000000000000008352602060048401526024830190611097565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1918215610307576102b9926102a4915f916102e5575b5060208082518301019101611670565b909391926102bd575b60405193849384610fcb565b0390f35b5f7f00000000000000000000000000000000000000000000000000000000000000005d6102ad565b61030191503d805f833e6102f981836111ee565b8101906115e9565b84610294565b6040513d5f823e3d90fd5b5f80fd5b60206003193601126103125760043567ffffffffffffffff81116103125761034e6103486102b9923690600401611038565b90611837565b604051918291826110bc565b346103125761036836610f66565b6103706119e1565b610378611a0e565b6103a66102b961038783612997565b919390946103a06060610399836113e0565b92016113f4565b906127c5565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d60405193849384610fcb565b60806003193601126103125767ffffffffffffffff60043581811161031257610402903690600401611360565b9061040b611253565b90606435908111610312576102066104a161024f946104676104325f953690600401611069565b61043b33612955565b9760405194610449866111b6565b3386526020860152602435604086015215156060850152369161141d565b60808201526040519283917f945ed33f0000000000000000000000000000000000000000000000000000000060208401526024830161176e565b604051809481927f48c89491000000000000000000000000000000000000000000000000000000008352602060048401526024830190611097565b34610312576102b96105056104f036610f66565b6104f86119e1565b610500611a0e565b611ad7565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f009492945d60405193849384610fcb565b34610312575f6003193601126103125760207f00000000000000000000000000000000000000000000000000000000000000005c6001600160a01b0360405191168152f35b34610312576102b961050561059036610f66565b6105986119e1565b6105a0611a0e565b612997565b34610312575f600319360112610312576040515f5f549060018260011c91600184169182156106d8575b60209485851084146106ab5785879486865291825f1461066d575050600114610614575b50610600925003836111ee565b6102b9604051928284938452830190611097565b5f808052859250907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b8583106106555750506106009350820101856105f3565b8054838901850152879450869390920191810161063e565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168582015261060095151560051b85010192508791506105f39050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f16926105cf565b346103125760606003193601126103125767ffffffffffffffff60043581811161031257610714903690600401611360565b9061071d61123d565b60443591821161031257610738610740923690600401611069565b929091612955565b905f5b845181101561077557806fffffffffffffffffffffffffffffffff604061076c6001948961172d565b51015201610743565b50610206610214856107935f9461024f97604051936101b0856111b6565b60808201526040519283917f5a3c39870000000000000000000000000000000000000000000000000000000060208401526024830161176e565b60806003193601126103125767ffffffffffffffff600435818111610312576107fa903690600401611360565b90610803611253565b90606435908111610312576102066104a161024f9461082a6104325f953690600401611069565b60808201526040519283917f08a465f6000000000000000000000000000000000000000000000000000000006020840152602483016114da565b34610312575f6003193601126103125760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b60a06003193601126103125767ffffffffffffffff60043511610312573660236004350112156103125767ffffffffffffffff60043560040135116103125736602460c060043560040135026004350101116103125760243567ffffffffffffffff81116103125761091d903690600401611038565b67ffffffffffffffff60443511610312576060600319604435360301126103125760643567ffffffffffffffff81116103125761095e903690600401611069565b60843567ffffffffffffffff81116103125761097e903690600401611038565b9490936109896119e1565b806004356004013503610ece575f5b600435600401358110610c2b5750505060443560040135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd60443536030182121561031257816044350160048101359067ffffffffffffffff82116103125760248260071b360391011361031257610a3c575b6102b961034e86865f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d611837565b6001600160a01b039492947f0000000000000000000000000000000000000000000000000000000000000000163b1561031257604051947f2a2d80d10000000000000000000000000000000000000000000000000000000086523360048701526060602487015260c486019260443501602481019367ffffffffffffffff60048301351161031257600482013560071b360385136103125760606064890152600482013590529192869260e484019291905f905b60048101358210610bad57505050602091601f19601f865f9787956001600160a01b03610b21602460443501611229565b16608488015260448035013560a48801526003198787030160448801528186528786013787868286010152011601030181836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1918215610307576102b99361034e93610b9e575b829450819350610a0c565b610ba7906111a2565b84610b93565b9195945091926001600160a01b03610bc487611229565b168152602080870135916001600160a01b03831680930361031257600492600192820152610bf460408901612942565b65ffffffffffff8091166040830152610c0f60608a01612942565b1660608201526080809101970193019050889495939291610af0565b610c40610c398284866119c6565b369161141d565b604051610c4c8161113d565b5f81526020915f838301525f60408301528281015190606060408201519101515f1a91835283830152604082015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc81850260043501360301126103125760405190610cb982611186565b610ccc602460c086026004350101611229565b808352610ce2604460c087026004350101611229565b908185850152610cfb606460c088026004350101611229565b60408581019190915260043560c08802016084810135606087015260a4810135608087015260c4013560a086015283015183519386015160ff91909116926001600160a01b0383163b15610312575f6001600160a01b03809460e4948b98849860c460c06040519c8d9b8c9a7fd505accf000000000000000000000000000000000000000000000000000000008c521660048b01523060248b0152608482820260043501013560448b0152026004350101356064880152608487015260a486015260c4850152165af19081610ebf575b50610eb557610dd8612913565b906001600160a01b0381511690836001600160a01b0381830151166044604051809581937fdd62ed3e00000000000000000000000000000000000000000000000000000000835260048301523060248301525afa918215610307575f92610e85575b506060015103610e505750506001905b01610998565b805115610e5d5780519101fd5b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b9091508381813d8311610eae575b610e9d81836111ee565b810103126103125751906060610e3a565b503d610e93565b5050600190610e4a565b610ec8906111a2565b8a610dcb565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610312575f6003193601126103125760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461031257610f4736610f66565b610f4f6119e1565b610f57611a0e565b6103a66102b961038783611ad7565b60031990602082820112610312576004359167ffffffffffffffff8311610312578260a0920301126103125760040190565b9081518082526020808093019301915f5b828110610fb7575050505090565b835185529381019392810192600101610fa9565b939290610fe090606086526060860190610f98565b936020948181036020830152602080855192838152019401905f5b81811061101b575050506110189394506040818403910152610f98565b90565b82516001600160a01b031686529487019491870191600101610ffb565b9181601f840112156103125782359167ffffffffffffffff8311610312576020808501948460051b01011161031257565b9181601f840112156103125782359167ffffffffffffffff8311610312576020838186019501011161031257565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b8483106110f15750505050505090565b909192939495848061112d837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528a51611097565b98019301930191949392906110e1565b6060810190811067ffffffffffffffff82111761115957604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60c0810190811067ffffffffffffffff82111761115957604052565b67ffffffffffffffff811161115957604052565b60a0810190811067ffffffffffffffff82111761115957604052565b60e0810190811067ffffffffffffffff82111761115957604052565b90601f601f19910116810190811067ffffffffffffffff82111761115957604052565b67ffffffffffffffff81116111595760051b60200190565b35906001600160a01b038216820361031257565b602435906001600160a01b038216820361031257565b60443590811515820361031257565b91909160808184031261031257604090815191608083019467ffffffffffffffff9584811087821117611159578252839561129c84611229565b85526020908185013590811161031257840182601f82011215610312578035906112c582611211565b936112d2865195866111ee565b8285528385019084606080950284010192818411610312578501915b8383106113105750505050508401528181013590830152606090810135910152565b8483830312610312578751906113258261113d565b61132e84611229565b825261133b878501611229565b8783015288840135908115158203610312578288928b899501528152019201916112ee565b81601f820112156103125780359160209161137a84611211565b9361138860405195866111ee565b808552838086019160051b8301019280841161031257848301915b8483106113b35750505050505090565b823567ffffffffffffffff81116103125786916113d584848094890101611262565b8152019201916113a3565b356001600160a01b03811681036103125790565b3580151581036103125790565b67ffffffffffffffff811161115957601f01601f191660200190565b92919261142982611401565b9161143760405193846111ee565b829481845281830111610312578281602093845f960137010152565b9060808101916001600160a01b03808251168352602093848301519460808186015285518092528060a086019601925f905b8382106114a75750505050506060816040829301516040850152015191015290565b84518051821689528084015182168985015260409081015115159089015260609097019693820193600190910190611485565b91909160209081815260c08101916001600160a01b0385511681830152808501519260a06040840152835180915260e08301918060e08360051b8601019501925f905b8382106115595750505050506080846040611018959601516060840152606081015115158284015201519060a0601f1982850301910152611097565b90919293958380611594837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff208a600196030186528a51611453565b9801920192019093929161151d565b81601f82011215610312578051906115ba82611401565b926115c860405194856111ee565b8284526020838301011161031257815f9260208093018386015e8301015290565b9060208282031261031257815167ffffffffffffffff81116103125761101892016115a3565b9080601f830112156103125781519060209161162a81611211565b9361163860405195866111ee565b81855260208086019260051b82010192831161031257602001905b828210611661575050505090565b81518152908301908301611653565b90916060828403126103125781519167ffffffffffffffff92838111610312578461169c91830161160f565b936020808301518581116103125783019082601f83011215610312578151916116c483611211565b926116d260405194856111ee565b808452828085019160051b83010191858311610312578301905b82821061170e575050505093604083015190811161031257611018920161160f565b81516001600160a01b03811681036103125781529083019083016116ec565b80518210156117415760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b91909160209081815260c08101916001600160a01b0385511681830152808501519260a06040840152835180915260e08301918060e08360051b8601019501925f905b8382106117ed5750505050506080846040611018959601516060840152606081015115158284015201519060a0601f1982850301910152611097565b90919293958380611828837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff208a600196030186528a51611453565b980192019201909392916117b1565b919061184233612955565b907f000000000000000000000000000000000000000000000000000000000000000093845c61194d576001906001865d61187b83611211565b9261188960405194856111ee565b808452601f1961189882611211565b015f5b81811061193c5750505f5b8181106118f35750505050905f6118e892945d7f0000000000000000000000000000000000000000000000000000000000000000805c916118ea575b5061374d565b565b5f905d5f6118e2565b806119205f80611908610c398996888a6119c6565b602081519101305af4611919612913565b90306141ee565b61192a828861172d565b52611935818761172d565b50016118a6565b80606060208093890101520161189b565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610312570180359067ffffffffffffffff82116103125760200191813603831361031257565b90821015611741576119dd9160051b810190611975565b9091565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c61194d576001905d565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163303611a4057565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b90611a7682611211565b611a8360405191826111ee565b828152601f19611a938294611211565b0190602036910137565b91908201809211611aaa57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b6040810135421161275f5790611afa611af36020840184613790565b9050611a6c565b915f5b611b0a6020830183613790565b905081101561266357611b3481611b2f611b276020860186613790565b3693916137e4565b611262565b936040850151936001600160a01b0386511690602087015180511561174157602001516040015115158061265a575b156125ff57611b88611b74866113e0565b8784611b8260608a016113f4565b92613b79565b5f5b6020880151518110156125ef57611b9f613824565b6020890151515f198101908111611aaa578214806020830152821582525f146125e8576060890151905b611bd78360208c015161172d565b51604081015190919015611d8a57611c6f6001600160a01b03835116936001600160a01b03881685145f14611d83576001945b60405195611c17876111b6565b5f8752611c238161385a565b6020870152604086015260609485918d838301526080820152604051809381927f43583be500000000000000000000000000000000000000000000000000000000835260048301613abe565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1938415610307575f94611d4c575b50506020015115611d3257816001600160a01b036020611d2c9360019695611cd48c8c61172d565b5201611d03828251167f0000000000000000000000000000000000000000000000000000000000000000614252565b5051167f000000000000000000000000000000000000000000000000000000000000000061429c565b01611b8a565b602001519097506001600160a01b03169250600190611d2c565b60209294509081611d7192903d10611d7c575b611d6981836111ee565b810190613891565b91505092905f611cac565b503d611d5f565b5f94611c0a565b888a6001600160a01b038495945116806001600160a01b038a16145f146121ce575050815115905061210a57888a801515806120ef575b611fe9575b6001600160a01b03939291611e7982611eb1978b5f95897f0000000000000000000000000000000000000000000000000000000000000000921680885282602052604088205c611fd8575b5050505b6001611e388983511660208401998b8b51169080158a14611fd2575083916142b5565b999092511694611e4d60809182810190611975565b93909460405197611e5d89611186565b885230602089015260408801526060870152850152369161141d565b60a0820152604051809681927f2145789700000000000000000000000000000000000000000000000000000000835260048301613a4d565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1938415610307575f94611fa8575b506020015115611f855791611f58826001600160a01b0360019695611f16611f80968661172d565b51611f218d8d61172d565b52611f4f828251167f0000000000000000000000000000000000000000000000000000000000000000614252565b5051169261172d565b51907f000000000000000000000000000000000000000000000000000000000000000061429c565b611d2c565b98506001929450611f9e906001600160a01b039261172d565b5197511692611d2c565b6020919450611fc8903d805f833e611fc081836111ee565b810190613a05565b5094919050611eee565b916142b5565b611fe1926143d3565b5f8281611e11565b50611ff6909291926113e0565b916120008b61438f565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b15610312576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039485166004820152306024820152908416604482015292871660648401525f8380608481010381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af18015610307578a611e798d611eb1976001600160a01b03975f956120e0575b50975092505091929350611dc6565b6120e9906111a2565b5f6120d1565b506120f9826113e0565b6001600160a01b0316301415611dc1565b906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916001600160a01b0384511692803b15610312576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03949094166004850152306024850152604484018c90525f908490606490829084905af18015610307578a611e798d611eb1976001600160a01b03975f956121bf575b50611e15565b6121c8906111a2565b5f6121b9565b6001600160a01b0360208796949701511690898183145f146124735761226992506122a1979150600161220f5f96956001600160a01b0393848b51166142b5565b5092828951169560208901511515881461244a5761222c826113e0565b945b61223d60809384810190611975565b9590966040519961224d8b611186565b8a5216602089015260408801526060870152850152369161141d565b60a0820152604051809581927f4af29ec400000000000000000000000000000000000000000000000000000000835260048301613994565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1928315610307575f93612420575b50602001511561235f57816001600160a01b036020611f8093600196956123058c8c61172d565b526123358383830151167f0000000000000000000000000000000000000000000000000000000000000000614252565b500151167f000000000000000000000000000000000000000000000000000000000000000061429c565b60208181015191516040517f15afd4090000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101859052939a50909116945081806044810103815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af18015610307576123f5575b50600190611d2c565b602090813d8311612419575b61240b81836111ee565b81010312610312575f6123ec565b503d612401565b6020919350612440903d805f833e61243881836111ee565b810190613918565b50939190506122de565b837f0000000000000000000000000000000000000000000000000000000000000000169461222e565b6001600160a01b03612502956124ca93949561249460809b8c810190611975565b939094604051976124a4896111d2565b5f8952602089015216604087015260609a8b978888015286015260a0850152369161141d565b60c0820152604051809381927f2bfb780c000000000000000000000000000000000000000000000000000000008352600483016138ac565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1938415610307575f946125c1575b50506020015115611d3257816001600160a01b036020611f8093600196956125678c8c61172d565b526125978383830151167f0000000000000000000000000000000000000000000000000000000000000000614252565b500151167f000000000000000000000000000000000000000000000000000000000000000061429c565b602092945090816125dd92903d10611d7c57611d6981836111ee565b91505092905f61253f565b5f90611bc9565b5091955090935050600101611afd565b612629827f0000000000000000000000000000000000000000000000000000000000000000614252565b5061265586837f000000000000000000000000000000000000000000000000000000000000000061429c565b611b88565b50321515611b63565b505061268e7f0000000000000000000000000000000000000000000000000000000000000000613b0d565b916126998351611a6c565b7f0000000000000000000000000000000000000000000000000000000000000000917f000000000000000000000000000000000000000000000000000000000000000091905f5b8651811015612756576001906001600160a01b03806126ff838b61172d565b51165f528560205261272d60405f205c8261271a858d61172d565b51165f528860205260405f205c90611a9d565b612737838761172d565b52612742828a61172d565b51165f52856020525f604081205d016126e0565b50949391509150565b7fe08b8af0000000000000000000000000000000000000000000000000000000005f5260045ffd5b905f198201918213600116611aaa57565b7f80000000000000000000000000000000000000000000000000000000000000008114611aaa575f190190565b907f000000000000000000000000000000000000000000000000000000000000000090815c7f0000000000000000000000000000000000000000000000000000000000000000612815815c612787565b907f0000000000000000000000000000000000000000000000000000000000000000915b5f8112156128d65750505061284d90612787565b917f0000000000000000000000000000000000000000000000000000000000000000925b5f81121561288657505050506118e89061374d565b6128d190825f526128cb60205f83828220015c91828252888152886040916128be8a8d8587205c906001600160a01b03891690613f4c565b8484525281205d84613ea9565b50612798565b612871565b61290e90825f526128cb60205f8a8785848420015c938484528181526128be8c6040948587205c906001600160a01b03891690613b79565b612839565b3d1561293d573d9061292482611401565b9161293260405193846111ee565b82523d5f602084013e565b606090565b359065ffffffffffff8216820361031257565b905f917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03815c161561298d575050565b909192505d600190565b906040820135421161275f576129b3611af36020840184613790565b915f5b6129c36020830183613790565b905081101561366d576129e081611b2f611b276020860186613790565b606081015190612a1a6001600160a01b038251167f0000000000000000000000000000000000000000000000000000000000000000614252565b506020810151515f198101908111611aaa575b5f811215612a40575050506001016129b6565b612a4e81602084015161172d565b51612a57613824565b9082156020830152602084015151805f19810111611aaa575f1901831480835261362b575b6020820151156135f05760408401516001600160a01b03855116915b604081015115612cb95783916001600160a01b036060926020612b3c970151151580612cb0575b612c89575b5116906001600160a01b0385168203612c82576001915b60405192612ae8846111b6565b60018452612af58161385a565b6020840152604083015288838301526080820152604051809581927f43583be500000000000000000000000000000000000000000000000000000000835260048301613abe565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19283156103075787918b915f95612c5b575b506020015115612c4c57612c429284612b9e612c47979694612c119461172d565b52612bd26001600160a01b0382167f0000000000000000000000000000000000000000000000000000000000000000614252565b506001600160a01b03612be98460408a015161384d565b91167f000000000000000000000000000000000000000000000000000000000000000061429c565b6001600160a01b038551167f000000000000000000000000000000000000000000000000000000000000000061429c565b612798565b612a2d565b505050612c4791935092612798565b6020919550612c789060603d606011611d7c57611d6981836111ee565b5095919050612b7d565b5f91612adb565b612cab612c958d6113e0565b8d8b611b828860408884511693015193016113f4565b612ac4565b50321515612abf565b906001600160a01b03825116806001600160a01b038516145f146131d3575060208401516130e55750604051927f967870920000000000000000000000000000000000000000000000000000000084526001600160a01b03831660048501526020846024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa938415610307575f946130b1575b5083916001600160a01b038151166001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b15610312576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015230602482015260448101959095525f8580606481010381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af190811561030757612e88955f926130a2575b505b611e796001600160a01b03612e448b8285511683602087015116906142b5565b50925116918c6002612e5b60809283810190611975565b92909360405196612e6b88611186565b87523060208801528960408801526060870152850152369161141d565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1938415610307575f9461307f575b506020015115612f6b57908291612c479493612ee1898d61172d565b52612f16836001600160a01b0384167f000000000000000000000000000000000000000000000000000000000000000061429c565b80831080612f50575b612f2c575b505050612798565b612f42612f4893612f3c8b6113e0565b9261384d565b916143e8565b5f8080612f24565b50306001600160a01b03612f638b6113e0565b161415612f1f565b9450908094808210612f84575b505050612c4790612798565b91612f946020926130139461384d565b90612fc9826001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016836143e8565b60405193849283927f15afd40900000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561030757613054575b8080612f78565b602090813d8311613078575b61306a81836111ee565b81010312610312575f61304d565b503d613060565b6020919450613097903d805f833e611fc081836111ee565b509094919050612ec5565b6130ab906111a2565b5f612e22565b9093506020813d6020116130dd575b816130cd602093836111ee565b810103126103125751925f612d58565b3d91506130c0565b90926130f0896113e0565b6001600160a01b033091160361310b575b5f612e8894612e24565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169361313f8a6113e0565b6131488461438f565b90863b15610312576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152306024820152918116604483015285166064820152945f908690608490829084905af190811561030757612e88955f926131c4575b50945050613101565b6131cd906111a2565b5f6131bb565b6001600160a01b036020849695940151168a8282145f146134a7575050506132a861320a5f92846001600160a01b038851166142b5565b92906132708c6001600160a01b03808a51169389511515861461347b5761323f613233846113e0565b935b6080810190611975565b9290936040519661324f88611186565b875216602086015260408501528c606085015260026080850152369161141d565b60a0820152604051809381927f4af29ec400000000000000000000000000000000000000000000000000000000835260048301613994565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610307575f91613460575b5060208401518c908a90156134465783836001600160a01b039361331f613325946133188f9c9b9a989961334e9a61172d565b519261172d565b5261172d565b5191167f000000000000000000000000000000000000000000000000000000000000000061429c565b511561339057612c4792916001600160a01b036020612c42930151167f00000000000000000000000000000000000000000000000000000000000000006143d3565b516040517f15afd4090000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201526024810191909152602081806044810103815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156103075761341b575b50612c4790612798565b602090813d831161343f575b61343181836111ee565b81010312610312575f613411565b503d613427565b50509091506134579293965061172d565b5193849161334e565b61347491503d805f833e61243881836111ee565b90506132e5565b61323f827f00000000000000000000000000000000000000000000000000000000000000001693613235565b61353a965090613502916060948b6134c760809998999384810190611975565b939094604051976134d7896111d2565b6001895260208901526001600160a01b038b1660408901528888015286015260a0850152369161141d565b60c0820152604051809581927f2bfb780c000000000000000000000000000000000000000000000000000000008352600483016138ac565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19283156103075787918b915f956135c9575b506020015115612c4c57612c4292846135a1612c479796946001600160a01b039461172d565b52167f000000000000000000000000000000000000000000000000000000000000000061429c565b60209195506135e69060603d606011611d7c57611d6981836111ee565b509591905061357b565b6fffffffffffffffffffffffffffffffff6001600160a01b0360206136218188015161361b88612787565b9061172d565b5101511691612a98565b613668856001600160a01b0360208401611d03828251167f0000000000000000000000000000000000000000000000000000000000000000614252565b612a7c565b50506136987f0000000000000000000000000000000000000000000000000000000000000000613b0d565b916136a38351611a6c565b7f0000000000000000000000000000000000000000000000000000000000000000917f000000000000000000000000000000000000000000000000000000000000000091905f5b8651811015612756576001906001600160a01b0380613709838b61172d565b51165f528560205261372460405f205c8261271a858d61172d565b61372e838761172d565b52613739828a61172d565b51165f52856020525f604081205d016136ea565b47801561378c577f00000000000000000000000000000000000000000000000000000000000000005c61378c576001600160a01b036118e89216614172565b5050565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610312570180359067ffffffffffffffff821161031257602001918160051b3603831361031257565b91908110156117415760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8181360301821215610312570190565b604051906040820182811067ffffffffffffffff821117611159576040525f6020838281520152565b91908203918211611aaa57565b6002111561386457565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b90816060910312610312578051916040602083015192015190565b61010060c0611018936020845280516138c48161385a565b602085015260208101516001600160a01b0380911660408601528060408301511660608601526060820151166080850152608081015160a085015260a08101518285015201519160e0808201520190611097565b90916060828403126103125781519167ffffffffffffffff92838111610312578461394491830161160f565b9360208201519360408301519081116103125761101892016115a3565b9081518082526020808093019301915f5b828110613980575050505090565b835185529381019392810192600101613972565b602081526001600160a01b0380835116602083015260208301511660408201526139cd604083015160c0606084015260e0830190613961565b906060830151608082015260808301516005811015613864576110189360a0918284015201519060c0601f1982850301910152611097565b916060838303126103125782519260208101519267ffffffffffffffff938481116103125781613a3691840161160f565b9360408301519081116103125761101892016115a3565b602081526001600160a01b03808351166020830152602083015116604082015260408201516060820152613a90606083015160c0608084015260e0830190613961565b9060808301516004811015613864576110189360a0918284015201519060c0601f1982850301910152611097565b91909160808060a08301948051613ad48161385a565b84526020810151613ae48161385a565b60208501526001600160a01b036040820151166040850152606081015160608501520151910152565b90815c613b1981611211565b613b2660405191826111ee565b818152613b3282611211565b601f196020910136602084013781945f5b848110613b51575050505050565b600190825f5280845f20015c6001600160a01b03613b6f838861172d565b9116905201613b43565b919280613e74575b15613ced575050804710613cc5576001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001691823b1561031257604051907fd0e30db00000000000000000000000000000000000000000000000000000000082525f915f8160048185895af1801561030757613cae575b506044602092937f00000000000000000000000000000000000000000000000000000000000000001694613c348387836143e8565b8460405196879485937f15afd409000000000000000000000000000000000000000000000000000000008552600485015260248401525af1908115613ca25750613c7b5750565b602090813d8311613c9b575b613c9181836111ee565b8101031261031257565b503d613c87565b604051903d90823e3d90fd5b60209250613cbb906111a2565b60445f9250613bff565b7fa01a9df6000000000000000000000000000000000000000000000000000000005f5260045ffd5b90915f9080613cfd575b50505050565b6001600160a01b0393847f00000000000000000000000000000000000000000000000000000000000000001694807f00000000000000000000000000000000000000000000000000000000000000001691613d578461438f565b96803b15610312576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152848316602482015297821660448901529186161660648701525f908690608490829084905af194851561030757613e1c95613e60575b5082936020936040518097819582947f15afd40900000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03925af1908115613ca25750613e35575b808080613cf7565b602090813d8311613e59575b613e4b81836111ee565b81010312610312575f613e2d565b503d613e41565b60209350613e6d906111a2565b5f92613dcb565b506001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001690821614613b81565b6001810191805f5260209183835260405f205c8015155f14613f43575f1990818101835c8380820191828403613f06575b5050505050815c81810192818411611aaa575f93815d835284832001015d5f52525f604081205d600190565b613f13613f2393886144cc565b865f52885f2001015c91856144cc565b835f52808383885f2001015d5f5285855260405f205d5f80808381613eda565b50505050505f90565b909392935f94831561416a5780614135575b1561409857506001600160a01b0390817f000000000000000000000000000000000000000000000000000000000000000016803b15610312576040517fae6393290000000000000000000000000000000000000000000000000000000081525f8160648183887f000000000000000000000000000000000000000000000000000000000000000016968760048401523060248401528a60448401525af1801561030757614085575b508086913b156140815781906024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083528960048401525af180156140765761405e575b506118e893945016614172565b61406886916111a2565b6140725784614051565b8480fd5b6040513d88823e3d90fd5b5080fd5b6140909196506111a2565b5f945f614006565b91909293506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b15610312576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03938416600482015293909216602484015260448301525f908290606490829084905af180156103075761412c5750565b6118e8906111a2565b506001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001690821614613f5e565b505050509050565b8147106141c2575f8080936001600160a01b038294165af1614192612913565b501561419a57565b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fcd786059000000000000000000000000000000000000000000000000000000005f523060045260245ffd5b90614203575080511561419a57805190602001fd5b81511580614249575b614214575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561420c565b6001810190825f528160205260405f205c155f1461429557805c815f52838160205f20015d60018101809111611aaa57815d5c915f5260205260405f205d600190565b5050505f90565b905f526020526142b160405f2091825c611a9d565b905d565b916044929391936001600160a01b03604094859282808551998a9586947fc9c1661b0000000000000000000000000000000000000000000000000000000086521660048501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa938415614385575f935f9561434e575b505061434b6143448594611a6c565b948561172d565b52565b809295508194503d831161437e575b61436781836111ee565b810103126103125760208251920151925f80614335565b503d61435d565b83513d5f823e3d90fd5b6001600160a01b03908181116143a3571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f5260a060045260245260445ffd5b905f526020526142b160405f2091825c61384d565b6040519260208401907fa9059cbb0000000000000000000000000000000000000000000000000000000082526001600160a01b038094166024860152604485015260448452608084019084821067ffffffffffffffff83111761115957614467935f9384936040521694519082865af1614460612913565b90836141ee565b80519081151591826144a8575b505061447d5750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b81925090602091810103126103125760200151801590811503610312575f80614474565b5c11156144d557565b7f0f4ae0e4000000000000000000000000000000000000000000000000000000005f5260045ffdfea2646970667358221220c454b5c6b2228cad6081c9bede33f823be1a13e2774d7b00e869883d9408eefd64736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x72 JUMPI JUMPDEST CALLDATASIZE ISZERO PUSH2 0x18 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x4A JUMPI STOP JUMPDEST PUSH32 0x540DDF600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8A465F6 EQ PUSH2 0xF39 JUMPI DUP1 PUSH4 0x107C279F EQ PUSH2 0xEF6 JUMPI DUP1 PUSH4 0x19C6989F EQ PUSH2 0x8A7 JUMPI DUP1 PUSH4 0x1BBF2E23 EQ PUSH2 0x864 JUMPI DUP1 PUSH4 0x286F580D EQ PUSH2 0x7CD JUMPI DUP1 PUSH4 0x2950286E EQ PUSH2 0x6E2 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x5A5 JUMPI DUP1 PUSH4 0x5A3C3987 EQ PUSH2 0x57C JUMPI DUP1 PUSH4 0x5E01EB5A EQ PUSH2 0x537 JUMPI DUP1 PUSH4 0x8A12A08C EQ PUSH2 0x4DC JUMPI DUP1 PUSH4 0x8EB1B65E EQ PUSH2 0x3D5 JUMPI DUP1 PUSH4 0x945ED33F EQ PUSH2 0x35A JUMPI DUP1 PUSH4 0xAC9650D8 EQ PUSH2 0x316 JUMPI PUSH4 0xE3B5DFF4 SUB PUSH2 0xE JUMPI CALLVALUE PUSH2 0x312 JUMPI PUSH1 0x60 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x312 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x312 JUMPI PUSH2 0x143 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1360 JUMP JUMPDEST PUSH2 0x14B PUSH2 0x123D JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP3 DUP4 GT PUSH2 0x312 JUMPI PUSH2 0x166 PUSH2 0x16E SWAP4 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1069 JUMP JUMPDEST SWAP4 SWAP1 SWAP2 PUSH2 0x2955 JUMP JUMPDEST SWAP1 PUSH0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x192 JUMPI DUP1 PUSH0 DUP8 PUSH2 0x189 PUSH1 0x1 SWAP5 DUP9 PUSH2 0x172D JUMP JUMPDEST MLOAD ADD MSTORE ADD PUSH2 0x171 JUMP JUMPDEST POP PUSH2 0x206 PUSH2 0x214 PUSH2 0x24F SWAP5 PUSH2 0x1CC PUSH0 SWAP5 DUP9 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x1B0 DUP6 PUSH2 0x11B6 JUMP JUMPDEST ADDRESS DUP6 MSTORE PUSH1 0x20 DUP6 ADD MSTORE PUSH0 NOT PUSH1 0x40 DUP6 ADD MSTORE DUP7 PUSH1 0x60 DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x141D JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x8A12A08C00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x14DA JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x11EE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP3 PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x1097 JUMP JUMPDEST SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x307 JUMPI PUSH2 0x2B9 SWAP3 PUSH2 0x2A4 SWAP2 PUSH0 SWAP2 PUSH2 0x2E5 JUMPI JUMPDEST POP PUSH1 0x20 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x1670 JUMP JUMPDEST SWAP1 SWAP4 SWAP2 SWAP3 PUSH2 0x2BD JUMPI JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0xFCB JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH0 PUSH32 0x0 TSTORE PUSH2 0x2AD JUMP JUMPDEST PUSH2 0x301 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2F9 DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x15E9 JUMP JUMPDEST DUP5 PUSH2 0x294 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x312 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x312 JUMPI PUSH2 0x34E PUSH2 0x348 PUSH2 0x2B9 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1038 JUMP JUMPDEST SWAP1 PUSH2 0x1837 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x10BC JUMP JUMPDEST CALLVALUE PUSH2 0x312 JUMPI PUSH2 0x368 CALLDATASIZE PUSH2 0xF66 JUMP JUMPDEST PUSH2 0x370 PUSH2 0x19E1 JUMP JUMPDEST PUSH2 0x378 PUSH2 0x1A0E JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x2B9 PUSH2 0x387 DUP4 PUSH2 0x2997 JUMP JUMPDEST SWAP2 SWAP4 SWAP1 SWAP5 PUSH2 0x3A0 PUSH1 0x60 PUSH2 0x399 DUP4 PUSH2 0x13E0 JUMP JUMPDEST SWAP3 ADD PUSH2 0x13F4 JUMP JUMPDEST SWAP1 PUSH2 0x27C5 JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0xFCB JUMP JUMPDEST PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x312 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x312 JUMPI PUSH2 0x402 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1360 JUMP JUMPDEST SWAP1 PUSH2 0x40B PUSH2 0x1253 JUMP JUMPDEST SWAP1 PUSH1 0x64 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x312 JUMPI PUSH2 0x206 PUSH2 0x4A1 PUSH2 0x24F SWAP5 PUSH2 0x467 PUSH2 0x432 PUSH0 SWAP6 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1069 JUMP JUMPDEST PUSH2 0x43B CALLER PUSH2 0x2955 JUMP JUMPDEST SWAP8 PUSH1 0x40 MLOAD SWAP5 PUSH2 0x449 DUP7 PUSH2 0x11B6 JUMP JUMPDEST CALLER DUP7 MSTORE PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP7 ADD MSTORE ISZERO ISZERO PUSH1 0x60 DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x141D JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x945ED33F00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x176E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP3 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x1097 JUMP JUMPDEST CALLVALUE PUSH2 0x312 JUMPI PUSH2 0x2B9 PUSH2 0x505 PUSH2 0x4F0 CALLDATASIZE PUSH2 0xF66 JUMP JUMPDEST PUSH2 0x4F8 PUSH2 0x19E1 JUMP JUMPDEST PUSH2 0x500 PUSH2 0x1A0E JUMP JUMPDEST PUSH2 0x1AD7 JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SWAP5 SWAP3 SWAP5 TSTORE PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0xFCB JUMP JUMPDEST CALLVALUE PUSH2 0x312 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x312 JUMPI PUSH1 0x20 PUSH32 0x0 TLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x312 JUMPI PUSH2 0x2B9 PUSH2 0x505 PUSH2 0x590 CALLDATASIZE PUSH2 0xF66 JUMP JUMPDEST PUSH2 0x598 PUSH2 0x19E1 JUMP JUMPDEST PUSH2 0x5A0 PUSH2 0x1A0E JUMP JUMPDEST PUSH2 0x2997 JUMP JUMPDEST CALLVALUE PUSH2 0x312 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x312 JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH0 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0x6D8 JUMPI JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP6 LT DUP5 EQ PUSH2 0x6AB JUMPI DUP6 DUP8 SWAP5 DUP7 DUP7 MSTORE SWAP2 DUP3 PUSH0 EQ PUSH2 0x66D JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x614 JUMPI JUMPDEST POP PUSH2 0x600 SWAP3 POP SUB DUP4 PUSH2 0x11EE JUMP JUMPDEST PUSH2 0x2B9 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1097 JUMP JUMPDEST PUSH0 DUP1 DUP1 MSTORE DUP6 SWAP3 POP SWAP1 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP6 DUP4 LT PUSH2 0x655 JUMPI POP POP PUSH2 0x600 SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x5F3 JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x63E JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0x600 SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0x5F3 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0x5CF JUMP JUMPDEST CALLVALUE PUSH2 0x312 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x312 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x312 JUMPI PUSH2 0x714 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1360 JUMP JUMPDEST SWAP1 PUSH2 0x71D PUSH2 0x123D JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x312 JUMPI PUSH2 0x738 PUSH2 0x740 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1069 JUMP JUMPDEST SWAP3 SWAP1 SWAP2 PUSH2 0x2955 JUMP JUMPDEST SWAP1 PUSH0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x775 JUMPI DUP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH2 0x76C PUSH1 0x1 SWAP5 DUP10 PUSH2 0x172D JUMP JUMPDEST MLOAD ADD MSTORE ADD PUSH2 0x743 JUMP JUMPDEST POP PUSH2 0x206 PUSH2 0x214 DUP6 PUSH2 0x793 PUSH0 SWAP5 PUSH2 0x24F SWAP8 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x1B0 DUP6 PUSH2 0x11B6 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x5A3C398700000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x176E JUMP JUMPDEST PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x312 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x312 JUMPI PUSH2 0x7FA SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1360 JUMP JUMPDEST SWAP1 PUSH2 0x803 PUSH2 0x1253 JUMP JUMPDEST SWAP1 PUSH1 0x64 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x312 JUMPI PUSH2 0x206 PUSH2 0x4A1 PUSH2 0x24F SWAP5 PUSH2 0x82A PUSH2 0x432 PUSH0 SWAP6 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1069 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x8A465F600000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x14DA JUMP JUMPDEST CALLVALUE PUSH2 0x312 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x312 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x312 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD GT PUSH2 0x312 JUMPI CALLDATASIZE PUSH1 0x23 PUSH1 0x4 CALLDATALOAD ADD SLT ISZERO PUSH2 0x312 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD GT PUSH2 0x312 JUMPI CALLDATASIZE PUSH1 0x24 PUSH1 0xC0 PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD MUL PUSH1 0x4 CALLDATALOAD ADD ADD GT PUSH2 0x312 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x312 JUMPI PUSH2 0x91D SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1038 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD GT PUSH2 0x312 JUMPI PUSH1 0x60 PUSH1 0x3 NOT PUSH1 0x44 CALLDATALOAD CALLDATASIZE SUB ADD SLT PUSH2 0x312 JUMPI PUSH1 0x64 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x312 JUMPI PUSH2 0x95E SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1069 JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x312 JUMPI PUSH2 0x97E SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1038 JUMP JUMPDEST SWAP5 SWAP1 SWAP4 PUSH2 0x989 PUSH2 0x19E1 JUMP JUMPDEST DUP1 PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD SUB PUSH2 0xECE JUMPI PUSH0 JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD DUP2 LT PUSH2 0xC2B JUMPI POP POP POP PUSH1 0x44 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD PUSH1 0x44 CALLDATALOAD CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x312 JUMPI DUP2 PUSH1 0x44 CALLDATALOAD ADD PUSH1 0x4 DUP2 ADD CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x312 JUMPI PUSH1 0x24 DUP3 PUSH1 0x7 SHL CALLDATASIZE SUB SWAP2 ADD SGT PUSH2 0x312 JUMPI PUSH2 0xA3C JUMPI JUMPDEST PUSH2 0x2B9 PUSH2 0x34E DUP7 DUP7 PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH2 0x1837 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP3 SWAP5 PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x312 JUMPI PUSH1 0x40 MLOAD SWAP5 PUSH32 0x2A2D80D100000000000000000000000000000000000000000000000000000000 DUP7 MSTORE CALLER PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x60 PUSH1 0x24 DUP8 ADD MSTORE PUSH1 0xC4 DUP7 ADD SWAP3 PUSH1 0x44 CALLDATALOAD ADD PUSH1 0x24 DUP2 ADD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 DUP4 ADD CALLDATALOAD GT PUSH2 0x312 JUMPI PUSH1 0x4 DUP3 ADD CALLDATALOAD PUSH1 0x7 SHL CALLDATASIZE SUB DUP6 SGT PUSH2 0x312 JUMPI PUSH1 0x60 PUSH1 0x64 DUP10 ADD MSTORE PUSH1 0x4 DUP3 ADD CALLDATALOAD SWAP1 MSTORE SWAP2 SWAP3 DUP7 SWAP3 PUSH1 0xE4 DUP5 ADD SWAP3 SWAP2 SWAP1 PUSH0 SWAP1 JUMPDEST PUSH1 0x4 DUP2 ADD CALLDATALOAD DUP3 LT PUSH2 0xBAD JUMPI POP POP POP PUSH1 0x20 SWAP2 PUSH1 0x1F NOT PUSH1 0x1F DUP7 PUSH0 SWAP8 DUP8 SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xB21 PUSH1 0x24 PUSH1 0x44 CALLDATALOAD ADD PUSH2 0x1229 JUMP JUMPDEST AND PUSH1 0x84 DUP9 ADD MSTORE PUSH1 0x44 DUP1 CALLDATALOAD ADD CALLDATALOAD PUSH1 0xA4 DUP9 ADD MSTORE PUSH1 0x3 NOT DUP8 DUP8 SUB ADD PUSH1 0x44 DUP9 ADD MSTORE DUP2 DUP7 MSTORE DUP8 DUP7 ADD CALLDATACOPY DUP8 DUP7 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD SUB ADD DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x307 JUMPI PUSH2 0x2B9 SWAP4 PUSH2 0x34E SWAP4 PUSH2 0xB9E JUMPI JUMPDEST DUP3 SWAP5 POP DUP2 SWAP4 POP PUSH2 0xA0C JUMP JUMPDEST PUSH2 0xBA7 SWAP1 PUSH2 0x11A2 JUMP JUMPDEST DUP5 PUSH2 0xB93 JUMP JUMPDEST SWAP2 SWAP6 SWAP5 POP SWAP2 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBC4 DUP8 PUSH2 0x1229 JUMP JUMPDEST AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP8 ADD CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP1 SWAP4 SUB PUSH2 0x312 JUMPI PUSH1 0x4 SWAP3 PUSH1 0x1 SWAP3 DUP3 ADD MSTORE PUSH2 0xBF4 PUSH1 0x40 DUP10 ADD PUSH2 0x2942 JUMP JUMPDEST PUSH6 0xFFFFFFFFFFFF DUP1 SWAP2 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0xC0F PUSH1 0x60 DUP11 ADD PUSH2 0x2942 JUMP JUMPDEST AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP1 SWAP2 ADD SWAP8 ADD SWAP4 ADD SWAP1 POP DUP9 SWAP5 SWAP6 SWAP4 SWAP3 SWAP2 PUSH2 0xAF0 JUMP JUMPDEST PUSH2 0xC40 PUSH2 0xC39 DUP3 DUP5 DUP7 PUSH2 0x19C6 JUMP JUMPDEST CALLDATASIZE SWAP2 PUSH2 0x141D JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xC4C DUP2 PUSH2 0x113D JUMP JUMPDEST PUSH0 DUP2 MSTORE PUSH1 0x20 SWAP2 PUSH0 DUP4 DUP4 ADD MSTORE PUSH0 PUSH1 0x40 DUP4 ADD MSTORE DUP3 DUP2 ADD MLOAD SWAP1 PUSH1 0x60 PUSH1 0x40 DUP3 ADD MLOAD SWAP2 ADD MLOAD PUSH0 BYTE SWAP2 DUP4 MSTORE DUP4 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xC0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP2 DUP6 MUL PUSH1 0x4 CALLDATALOAD ADD CALLDATASIZE SUB ADD SLT PUSH2 0x312 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0xCB9 DUP3 PUSH2 0x1186 JUMP JUMPDEST PUSH2 0xCCC PUSH1 0x24 PUSH1 0xC0 DUP7 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x1229 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH2 0xCE2 PUSH1 0x44 PUSH1 0xC0 DUP8 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x1229 JUMP JUMPDEST SWAP1 DUP2 DUP6 DUP6 ADD MSTORE PUSH2 0xCFB PUSH1 0x64 PUSH1 0xC0 DUP9 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x1229 JUMP JUMPDEST PUSH1 0x40 DUP6 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x4 CALLDATALOAD PUSH1 0xC0 DUP9 MUL ADD PUSH1 0x84 DUP2 ADD CALLDATALOAD PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0xA4 DUP2 ADD CALLDATALOAD PUSH1 0x80 DUP8 ADD MSTORE PUSH1 0xC4 ADD CALLDATALOAD PUSH1 0xA0 DUP7 ADD MSTORE DUP4 ADD MLOAD DUP4 MLOAD SWAP4 DUP7 ADD MLOAD PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EXTCODESIZE ISZERO PUSH2 0x312 JUMPI PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 PUSH1 0xE4 SWAP5 DUP12 SWAP9 DUP5 SWAP9 PUSH1 0xC4 PUSH1 0xC0 PUSH1 0x40 MLOAD SWAP13 DUP14 SWAP12 DUP13 SWAP11 PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP13 MSTORE AND PUSH1 0x4 DUP12 ADD MSTORE ADDRESS PUSH1 0x24 DUP12 ADD MSTORE PUSH1 0x84 DUP3 DUP3 MUL PUSH1 0x4 CALLDATALOAD ADD ADD CALLDATALOAD PUSH1 0x44 DUP12 ADD MSTORE MUL PUSH1 0x4 CALLDATALOAD ADD ADD CALLDATALOAD PUSH1 0x64 DUP9 ADD MSTORE PUSH1 0x84 DUP8 ADD MSTORE PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xC4 DUP6 ADD MSTORE AND GAS CALL SWAP1 DUP2 PUSH2 0xEBF JUMPI JUMPDEST POP PUSH2 0xEB5 JUMPI PUSH2 0xDD8 PUSH2 0x2913 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 MLOAD AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP4 ADD MLOAD AND PUSH1 0x44 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x307 JUMPI PUSH0 SWAP3 PUSH2 0xE85 JUMPI JUMPDEST POP PUSH1 0x60 ADD MLOAD SUB PUSH2 0xE50 JUMPI POP POP PUSH1 0x1 SWAP1 JUMPDEST ADD PUSH2 0x998 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0xE5D JUMPI DUP1 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP DUP4 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0xEAE JUMPI JUMPDEST PUSH2 0xE9D DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x312 JUMPI MLOAD SWAP1 PUSH1 0x60 PUSH2 0xE3A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xE93 JUMP JUMPDEST POP POP PUSH1 0x1 SWAP1 PUSH2 0xE4A JUMP JUMPDEST PUSH2 0xEC8 SWAP1 PUSH2 0x11A2 JUMP JUMPDEST DUP11 PUSH2 0xDCB JUMP JUMPDEST PUSH32 0xAAAD13F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x312 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x312 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x312 JUMPI PUSH2 0xF47 CALLDATASIZE PUSH2 0xF66 JUMP JUMPDEST PUSH2 0xF4F PUSH2 0x19E1 JUMP JUMPDEST PUSH2 0xF57 PUSH2 0x1A0E JUMP JUMPDEST PUSH2 0x3A6 PUSH2 0x2B9 PUSH2 0x387 DUP4 PUSH2 0x1AD7 JUMP JUMPDEST PUSH1 0x3 NOT SWAP1 PUSH1 0x20 DUP3 DUP3 ADD SLT PUSH2 0x312 JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x312 JUMPI DUP3 PUSH1 0xA0 SWAP3 SUB ADD SLT PUSH2 0x312 JUMPI PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0xFB7 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0xFA9 JUMP JUMPDEST SWAP4 SWAP3 SWAP1 PUSH2 0xFE0 SWAP1 PUSH1 0x60 DUP7 MSTORE PUSH1 0x60 DUP7 ADD SWAP1 PUSH2 0xF98 JUMP JUMPDEST SWAP4 PUSH1 0x20 SWAP5 DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP1 DUP6 MLOAD SWAP3 DUP4 DUP2 MSTORE ADD SWAP5 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x101B JUMPI POP POP POP PUSH2 0x1018 SWAP4 SWAP5 POP PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0xF98 JUMP JUMPDEST SWAP1 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 MSTORE SWAP5 DUP8 ADD SWAP5 SWAP2 DUP8 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xFFB JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x312 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x312 JUMPI PUSH1 0x20 DUP1 DUP6 ADD SWAP5 DUP5 PUSH1 0x5 SHL ADD ADD GT PUSH2 0x312 JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x312 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x312 JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x312 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD SWAP1 PUSH1 0x20 DUP4 MSTORE DUP4 MLOAD DUP1 SWAP3 MSTORE PUSH1 0x40 DUP4 ADD SWAP3 PUSH1 0x20 PUSH1 0x40 DUP5 PUSH1 0x5 SHL DUP4 ADD ADD SWAP6 ADD SWAP4 PUSH0 SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x10F1 JUMPI POP POP POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 DUP5 DUP1 PUSH2 0x112D DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP7 PUSH1 0x1 SWAP7 SUB ADD DUP8 MSTORE DUP11 MLOAD PUSH2 0x1097 JUMP JUMPDEST SWAP9 ADD SWAP4 ADD SWAP4 ADD SWAP2 SWAP5 SWAP4 SWAP3 SWAP1 PUSH2 0x10E1 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1159 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0xC0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1159 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1159 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1159 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1159 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1159 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1159 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x312 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x312 JUMPI JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x312 JUMPI JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x80 DUP2 DUP5 SUB SLT PUSH2 0x312 JUMPI PUSH1 0x40 SWAP1 DUP2 MLOAD SWAP2 PUSH1 0x80 DUP4 ADD SWAP5 PUSH8 0xFFFFFFFFFFFFFFFF SWAP6 DUP5 DUP2 LT DUP8 DUP3 GT OR PUSH2 0x1159 JUMPI DUP3 MSTORE DUP4 SWAP6 PUSH2 0x129C DUP5 PUSH2 0x1229 JUMP JUMPDEST DUP6 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP6 ADD CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x312 JUMPI DUP5 ADD DUP3 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x312 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH2 0x12C5 DUP3 PUSH2 0x1211 JUMP JUMPDEST SWAP4 PUSH2 0x12D2 DUP7 MLOAD SWAP6 DUP7 PUSH2 0x11EE JUMP JUMPDEST DUP3 DUP6 MSTORE DUP4 DUP6 ADD SWAP1 DUP5 PUSH1 0x60 DUP1 SWAP6 MUL DUP5 ADD ADD SWAP3 DUP2 DUP5 GT PUSH2 0x312 JUMPI DUP6 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x1310 JUMPI POP POP POP POP POP DUP5 ADD MSTORE DUP2 DUP2 ADD CALLDATALOAD SWAP1 DUP4 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 ADD CALLDATALOAD SWAP2 ADD MSTORE JUMP JUMPDEST DUP5 DUP4 DUP4 SUB SLT PUSH2 0x312 JUMPI DUP8 MLOAD SWAP1 PUSH2 0x1325 DUP3 PUSH2 0x113D JUMP JUMPDEST PUSH2 0x132E DUP5 PUSH2 0x1229 JUMP JUMPDEST DUP3 MSTORE PUSH2 0x133B DUP8 DUP6 ADD PUSH2 0x1229 JUMP JUMPDEST DUP8 DUP4 ADD MSTORE DUP9 DUP5 ADD CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x312 JUMPI DUP3 DUP9 SWAP3 DUP12 DUP10 SWAP6 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x12EE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x312 JUMPI DUP1 CALLDATALOAD SWAP2 PUSH1 0x20 SWAP2 PUSH2 0x137A DUP5 PUSH2 0x1211 JUMP JUMPDEST SWAP4 PUSH2 0x1388 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x11EE JUMP JUMPDEST DUP1 DUP6 MSTORE DUP4 DUP1 DUP7 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP3 DUP1 DUP5 GT PUSH2 0x312 JUMPI DUP5 DUP4 ADD SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x13B3 JUMPI POP POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x312 JUMPI DUP7 SWAP2 PUSH2 0x13D5 DUP5 DUP5 DUP1 SWAP5 DUP10 ADD ADD PUSH2 0x1262 JUMP JUMPDEST DUP2 MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x13A3 JUMP JUMPDEST CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x312 JUMPI SWAP1 JUMP JUMPDEST CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x312 JUMPI SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1159 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH2 0x1429 DUP3 PUSH2 0x1401 JUMP JUMPDEST SWAP2 PUSH2 0x1437 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x11EE JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0x312 JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x80 DUP2 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP4 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 ADD MLOAD SWAP5 PUSH1 0x80 DUP2 DUP7 ADD MSTORE DUP6 MLOAD DUP1 SWAP3 MSTORE DUP1 PUSH1 0xA0 DUP7 ADD SWAP7 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x14A7 JUMPI POP POP POP POP POP PUSH1 0x60 DUP2 PUSH1 0x40 DUP3 SWAP4 ADD MLOAD PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST DUP5 MLOAD DUP1 MLOAD DUP3 AND DUP10 MSTORE DUP1 DUP5 ADD MLOAD DUP3 AND DUP10 DUP6 ADD MSTORE PUSH1 0x40 SWAP1 DUP2 ADD MLOAD ISZERO ISZERO SWAP1 DUP10 ADD MSTORE PUSH1 0x60 SWAP1 SWAP8 ADD SWAP7 SWAP4 DUP3 ADD SWAP4 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x1485 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x20 SWAP1 DUP2 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 MLOAD AND DUP2 DUP4 ADD MSTORE DUP1 DUP6 ADD MLOAD SWAP3 PUSH1 0xA0 PUSH1 0x40 DUP5 ADD MSTORE DUP4 MLOAD DUP1 SWAP2 MSTORE PUSH1 0xE0 DUP4 ADD SWAP2 DUP1 PUSH1 0xE0 DUP4 PUSH1 0x5 SHL DUP7 ADD ADD SWAP6 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x1559 JUMPI POP POP POP POP POP PUSH1 0x80 DUP5 PUSH1 0x40 PUSH2 0x1018 SWAP6 SWAP7 ADD MLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD ISZERO ISZERO DUP3 DUP5 ADD MSTORE ADD MLOAD SWAP1 PUSH1 0xA0 PUSH1 0x1F NOT DUP3 DUP6 SUB ADD SWAP2 ADD MSTORE PUSH2 0x1097 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP6 DUP4 DUP1 PUSH2 0x1594 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 DUP11 PUSH1 0x1 SWAP7 SUB ADD DUP7 MSTORE DUP11 MLOAD PUSH2 0x1453 JUMP JUMPDEST SWAP9 ADD SWAP3 ADD SWAP3 ADD SWAP1 SWAP4 SWAP3 SWAP2 PUSH2 0x151D JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x312 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x15BA DUP3 PUSH2 0x1401 JUMP JUMPDEST SWAP3 PUSH2 0x15C8 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x11EE JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x312 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x312 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x312 JUMPI PUSH2 0x1018 SWAP3 ADD PUSH2 0x15A3 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x312 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x162A DUP2 PUSH2 0x1211 JUMP JUMPDEST SWAP4 PUSH2 0x1638 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x11EE JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x312 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1661 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1653 JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x60 DUP3 DUP5 SUB SLT PUSH2 0x312 JUMPI DUP2 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x312 JUMPI DUP5 PUSH2 0x169C SWAP2 DUP4 ADD PUSH2 0x160F JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP1 DUP4 ADD MLOAD DUP6 DUP2 GT PUSH2 0x312 JUMPI DUP4 ADD SWAP1 DUP3 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x312 JUMPI DUP2 MLOAD SWAP2 PUSH2 0x16C4 DUP4 PUSH2 0x1211 JUMP JUMPDEST SWAP3 PUSH2 0x16D2 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x11EE JUMP JUMPDEST DUP1 DUP5 MSTORE DUP3 DUP1 DUP6 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 DUP6 DUP4 GT PUSH2 0x312 JUMPI DUP4 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x170E JUMPI POP POP POP POP SWAP4 PUSH1 0x40 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x312 JUMPI PUSH2 0x1018 SWAP3 ADD PUSH2 0x160F JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x312 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x16EC JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x1741 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x20 SWAP1 DUP2 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 MLOAD AND DUP2 DUP4 ADD MSTORE DUP1 DUP6 ADD MLOAD SWAP3 PUSH1 0xA0 PUSH1 0x40 DUP5 ADD MSTORE DUP4 MLOAD DUP1 SWAP2 MSTORE PUSH1 0xE0 DUP4 ADD SWAP2 DUP1 PUSH1 0xE0 DUP4 PUSH1 0x5 SHL DUP7 ADD ADD SWAP6 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x17ED JUMPI POP POP POP POP POP PUSH1 0x80 DUP5 PUSH1 0x40 PUSH2 0x1018 SWAP6 SWAP7 ADD MLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD ISZERO ISZERO DUP3 DUP5 ADD MSTORE ADD MLOAD SWAP1 PUSH1 0xA0 PUSH1 0x1F NOT DUP3 DUP6 SUB ADD SWAP2 ADD MSTORE PUSH2 0x1097 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP6 DUP4 DUP1 PUSH2 0x1828 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 DUP11 PUSH1 0x1 SWAP7 SUB ADD DUP7 MSTORE DUP11 MLOAD PUSH2 0x1453 JUMP JUMPDEST SWAP9 ADD SWAP3 ADD SWAP3 ADD SWAP1 SWAP4 SWAP3 SWAP2 PUSH2 0x17B1 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x1842 CALLER PUSH2 0x2955 JUMP JUMPDEST SWAP1 PUSH32 0x0 SWAP4 DUP5 TLOAD PUSH2 0x194D JUMPI PUSH1 0x1 SWAP1 PUSH1 0x1 DUP7 TSTORE PUSH2 0x187B DUP4 PUSH2 0x1211 JUMP JUMPDEST SWAP3 PUSH2 0x1889 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x11EE JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x1F NOT PUSH2 0x1898 DUP3 PUSH2 0x1211 JUMP JUMPDEST ADD PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x193C JUMPI POP POP PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x18F3 JUMPI POP POP POP POP SWAP1 PUSH0 PUSH2 0x18E8 SWAP3 SWAP5 TSTORE PUSH32 0x0 DUP1 TLOAD SWAP2 PUSH2 0x18EA JUMPI JUMPDEST POP PUSH2 0x374D JUMP JUMPDEST JUMP JUMPDEST PUSH0 SWAP1 TSTORE PUSH0 PUSH2 0x18E2 JUMP JUMPDEST DUP1 PUSH2 0x1920 PUSH0 DUP1 PUSH2 0x1908 PUSH2 0xC39 DUP10 SWAP7 DUP9 DUP11 PUSH2 0x19C6 JUMP JUMPDEST PUSH1 0x20 DUP2 MLOAD SWAP2 ADD ADDRESS GAS DELEGATECALL PUSH2 0x1919 PUSH2 0x2913 JUMP JUMPDEST SWAP1 ADDRESS PUSH2 0x41EE JUMP JUMPDEST PUSH2 0x192A DUP3 DUP9 PUSH2 0x172D JUMP JUMPDEST MSTORE PUSH2 0x1935 DUP2 DUP8 PUSH2 0x172D JUMP JUMPDEST POP ADD PUSH2 0x18A6 JUMP JUMPDEST DUP1 PUSH1 0x60 PUSH1 0x20 DUP1 SWAP4 DUP10 ADD ADD MSTORE ADD PUSH2 0x189B JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP2 CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x312 JUMPI ADD DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x312 JUMPI PUSH1 0x20 ADD SWAP2 DUP2 CALLDATASIZE SUB DUP4 SGT PUSH2 0x312 JUMPI JUMP JUMPDEST SWAP1 DUP3 LT ISZERO PUSH2 0x1741 JUMPI PUSH2 0x19DD SWAP2 PUSH1 0x5 SHL DUP2 ADD SWAP1 PUSH2 0x1975 JUMP JUMPDEST SWAP1 SWAP2 JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x194D JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x1A40 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x1A76 DUP3 PUSH2 0x1211 JUMP JUMPDEST PUSH2 0x1A83 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x11EE JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x1A93 DUP3 SWAP5 PUSH2 0x1211 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x1AAA JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD CALLDATALOAD TIMESTAMP GT PUSH2 0x275F JUMPI SWAP1 PUSH2 0x1AFA PUSH2 0x1AF3 PUSH1 0x20 DUP5 ADD DUP5 PUSH2 0x3790 JUMP JUMPDEST SWAP1 POP PUSH2 0x1A6C JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST PUSH2 0x1B0A PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x3790 JUMP JUMPDEST SWAP1 POP DUP2 LT ISZERO PUSH2 0x2663 JUMPI PUSH2 0x1B34 DUP2 PUSH2 0x1B2F PUSH2 0x1B27 PUSH1 0x20 DUP7 ADD DUP7 PUSH2 0x3790 JUMP JUMPDEST CALLDATASIZE SWAP4 SWAP2 PUSH2 0x37E4 JUMP JUMPDEST PUSH2 0x1262 JUMP JUMPDEST SWAP4 PUSH1 0x40 DUP6 ADD MLOAD SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 MLOAD AND SWAP1 PUSH1 0x20 DUP8 ADD MLOAD DUP1 MLOAD ISZERO PUSH2 0x1741 JUMPI PUSH1 0x20 ADD MLOAD PUSH1 0x40 ADD MLOAD ISZERO ISZERO DUP1 PUSH2 0x265A JUMPI JUMPDEST ISZERO PUSH2 0x25FF JUMPI PUSH2 0x1B88 PUSH2 0x1B74 DUP7 PUSH2 0x13E0 JUMP JUMPDEST DUP8 DUP5 PUSH2 0x1B82 PUSH1 0x60 DUP11 ADD PUSH2 0x13F4 JUMP JUMPDEST SWAP3 PUSH2 0x3B79 JUMP JUMPDEST PUSH0 JUMPDEST PUSH1 0x20 DUP9 ADD MLOAD MLOAD DUP2 LT ISZERO PUSH2 0x25EF JUMPI PUSH2 0x1B9F PUSH2 0x3824 JUMP JUMPDEST PUSH1 0x20 DUP10 ADD MLOAD MLOAD PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x1AAA JUMPI DUP3 EQ DUP1 PUSH1 0x20 DUP4 ADD MSTORE DUP3 ISZERO DUP3 MSTORE PUSH0 EQ PUSH2 0x25E8 JUMPI PUSH1 0x60 DUP10 ADD MLOAD SWAP1 JUMPDEST PUSH2 0x1BD7 DUP4 PUSH1 0x20 DUP13 ADD MLOAD PUSH2 0x172D JUMP JUMPDEST MLOAD PUSH1 0x40 DUP2 ADD MLOAD SWAP1 SWAP2 SWAP1 ISZERO PUSH2 0x1D8A JUMPI PUSH2 0x1C6F PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 MLOAD AND SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP6 EQ PUSH0 EQ PUSH2 0x1D83 JUMPI PUSH1 0x1 SWAP5 JUMPDEST PUSH1 0x40 MLOAD SWAP6 PUSH2 0x1C17 DUP8 PUSH2 0x11B6 JUMP JUMPDEST PUSH0 DUP8 MSTORE PUSH2 0x1C23 DUP2 PUSH2 0x385A JUMP JUMPDEST PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x60 SWAP5 DUP6 SWAP2 DUP14 DUP4 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x43583BE500000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x3ABE JUMP JUMPDEST SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x307 JUMPI PUSH0 SWAP5 PUSH2 0x1D4C JUMPI JUMPDEST POP POP PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x1D32 JUMPI DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH2 0x1D2C SWAP4 PUSH1 0x1 SWAP7 SWAP6 PUSH2 0x1CD4 DUP13 DUP13 PUSH2 0x172D JUMP JUMPDEST MSTORE ADD PUSH2 0x1D03 DUP3 DUP3 MLOAD AND PUSH32 0x0 PUSH2 0x4252 JUMP JUMPDEST POP MLOAD AND PUSH32 0x0 PUSH2 0x429C JUMP JUMPDEST ADD PUSH2 0x1B8A JUMP JUMPDEST PUSH1 0x20 ADD MLOAD SWAP1 SWAP8 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 POP PUSH1 0x1 SWAP1 PUSH2 0x1D2C JUMP JUMPDEST PUSH1 0x20 SWAP3 SWAP5 POP SWAP1 DUP2 PUSH2 0x1D71 SWAP3 SWAP1 RETURNDATASIZE LT PUSH2 0x1D7C JUMPI JUMPDEST PUSH2 0x1D69 DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3891 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP1 PUSH0 PUSH2 0x1CAC JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1D5F JUMP JUMPDEST PUSH0 SWAP5 PUSH2 0x1C0A JUMP JUMPDEST DUP9 DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 SWAP6 SWAP5 MLOAD AND DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND EQ PUSH0 EQ PUSH2 0x21CE JUMPI POP POP DUP2 MLOAD ISZERO SWAP1 POP PUSH2 0x210A JUMPI DUP9 DUP11 DUP1 ISZERO ISZERO DUP1 PUSH2 0x20EF JUMPI JUMPDEST PUSH2 0x1FE9 JUMPI JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP3 SWAP2 PUSH2 0x1E79 DUP3 PUSH2 0x1EB1 SWAP8 DUP12 PUSH0 SWAP6 DUP10 PUSH32 0x0 SWAP3 AND DUP1 DUP9 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP9 KECCAK256 TLOAD PUSH2 0x1FD8 JUMPI JUMPDEST POP POP POP JUMPDEST PUSH1 0x1 PUSH2 0x1E38 DUP10 DUP4 MLOAD AND PUSH1 0x20 DUP5 ADD SWAP10 DUP12 DUP12 MLOAD AND SWAP1 DUP1 ISZERO DUP11 EQ PUSH2 0x1FD2 JUMPI POP DUP4 SWAP2 PUSH2 0x42B5 JUMP JUMPDEST SWAP10 SWAP1 SWAP3 MLOAD AND SWAP5 PUSH2 0x1E4D PUSH1 0x80 SWAP2 DUP3 DUP2 ADD SWAP1 PUSH2 0x1975 JUMP JUMPDEST SWAP4 SWAP1 SWAP5 PUSH1 0x40 MLOAD SWAP8 PUSH2 0x1E5D DUP10 PUSH2 0x1186 JUMP JUMPDEST DUP9 MSTORE ADDRESS PUSH1 0x20 DUP10 ADD MSTORE PUSH1 0x40 DUP9 ADD MSTORE PUSH1 0x60 DUP8 ADD MSTORE DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x141D JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP7 DUP2 SWAP3 PUSH32 0x2145789700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x3A4D JUMP JUMPDEST SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x307 JUMPI PUSH0 SWAP5 PUSH2 0x1FA8 JUMPI JUMPDEST POP PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x1F85 JUMPI SWAP2 PUSH2 0x1F58 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x1 SWAP7 SWAP6 PUSH2 0x1F16 PUSH2 0x1F80 SWAP7 DUP7 PUSH2 0x172D JUMP JUMPDEST MLOAD PUSH2 0x1F21 DUP14 DUP14 PUSH2 0x172D JUMP JUMPDEST MSTORE PUSH2 0x1F4F DUP3 DUP3 MLOAD AND PUSH32 0x0 PUSH2 0x4252 JUMP JUMPDEST POP MLOAD AND SWAP3 PUSH2 0x172D JUMP JUMPDEST MLOAD SWAP1 PUSH32 0x0 PUSH2 0x429C JUMP JUMPDEST PUSH2 0x1D2C JUMP JUMPDEST SWAP9 POP PUSH1 0x1 SWAP3 SWAP5 POP PUSH2 0x1F9E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH2 0x172D JUMP JUMPDEST MLOAD SWAP8 MLOAD AND SWAP3 PUSH2 0x1D2C JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP5 POP PUSH2 0x1FC8 SWAP1 RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x1FC0 DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3A05 JUMP JUMPDEST POP SWAP5 SWAP2 SWAP1 POP PUSH2 0x1EEE JUMP JUMPDEST SWAP2 PUSH2 0x42B5 JUMP JUMPDEST PUSH2 0x1FE1 SWAP3 PUSH2 0x43D3 JUMP JUMPDEST PUSH0 DUP3 DUP2 PUSH2 0x1E11 JUMP JUMPDEST POP PUSH2 0x1FF6 SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x13E0 JUMP JUMPDEST SWAP2 PUSH2 0x2000 DUP12 PUSH2 0x438F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x312 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP1 DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE SWAP3 DUP8 AND PUSH1 0x64 DUP5 ADD MSTORE PUSH0 DUP4 DUP1 PUSH1 0x84 DUP2 ADD SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x307 JUMPI DUP11 PUSH2 0x1E79 DUP14 PUSH2 0x1EB1 SWAP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP8 PUSH0 SWAP6 PUSH2 0x20E0 JUMPI JUMPDEST POP SWAP8 POP SWAP3 POP POP SWAP2 SWAP3 SWAP4 POP PUSH2 0x1DC6 JUMP JUMPDEST PUSH2 0x20E9 SWAP1 PUSH2 0x11A2 JUMP JUMPDEST PUSH0 PUSH2 0x20D1 JUMP JUMPDEST POP PUSH2 0x20F9 DUP3 PUSH2 0x13E0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ ISZERO PUSH2 0x1DC1 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 MLOAD AND SWAP3 DUP1 EXTCODESIZE ISZERO PUSH2 0x312 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP1 SWAP5 AND PUSH1 0x4 DUP6 ADD MSTORE ADDRESS PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD DUP13 SWAP1 MSTORE PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x64 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL DUP1 ISZERO PUSH2 0x307 JUMPI DUP11 PUSH2 0x1E79 DUP14 PUSH2 0x1EB1 SWAP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP8 PUSH0 SWAP6 PUSH2 0x21BF JUMPI JUMPDEST POP PUSH2 0x1E15 JUMP JUMPDEST PUSH2 0x21C8 SWAP1 PUSH2 0x11A2 JUMP JUMPDEST PUSH0 PUSH2 0x21B9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP8 SWAP7 SWAP5 SWAP8 ADD MLOAD AND SWAP1 DUP10 DUP2 DUP4 EQ PUSH0 EQ PUSH2 0x2473 JUMPI PUSH2 0x2269 SWAP3 POP PUSH2 0x22A1 SWAP8 SWAP2 POP PUSH1 0x1 PUSH2 0x220F PUSH0 SWAP7 SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 DUP12 MLOAD AND PUSH2 0x42B5 JUMP JUMPDEST POP SWAP3 DUP3 DUP10 MLOAD AND SWAP6 PUSH1 0x20 DUP10 ADD MLOAD ISZERO ISZERO DUP9 EQ PUSH2 0x244A JUMPI PUSH2 0x222C DUP3 PUSH2 0x13E0 JUMP JUMPDEST SWAP5 JUMPDEST PUSH2 0x223D PUSH1 0x80 SWAP4 DUP5 DUP2 ADD SWAP1 PUSH2 0x1975 JUMP JUMPDEST SWAP6 SWAP1 SWAP7 PUSH1 0x40 MLOAD SWAP10 PUSH2 0x224D DUP12 PUSH2 0x1186 JUMP JUMPDEST DUP11 MSTORE AND PUSH1 0x20 DUP10 ADD MSTORE PUSH1 0x40 DUP9 ADD MSTORE PUSH1 0x60 DUP8 ADD MSTORE DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x141D JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP3 PUSH32 0x4AF29EC400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x3994 JUMP JUMPDEST SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x307 JUMPI PUSH0 SWAP4 PUSH2 0x2420 JUMPI JUMPDEST POP PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x235F JUMPI DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH2 0x1F80 SWAP4 PUSH1 0x1 SWAP7 SWAP6 PUSH2 0x2305 DUP13 DUP13 PUSH2 0x172D JUMP JUMPDEST MSTORE PUSH2 0x2335 DUP4 DUP4 DUP4 ADD MLOAD AND PUSH32 0x0 PUSH2 0x4252 JUMP JUMPDEST POP ADD MLOAD AND PUSH32 0x0 PUSH2 0x429C JUMP JUMPDEST PUSH1 0x20 DUP2 DUP2 ADD MLOAD SWAP2 MLOAD PUSH1 0x40 MLOAD PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP6 SWAP1 MSTORE SWAP4 SWAP11 POP SWAP1 SWAP2 AND SWAP5 POP DUP2 DUP1 PUSH1 0x44 DUP2 ADD SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x307 JUMPI PUSH2 0x23F5 JUMPI JUMPDEST POP PUSH1 0x1 SWAP1 PUSH2 0x1D2C JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2419 JUMPI JUMPDEST PUSH2 0x240B DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x312 JUMPI PUSH0 PUSH2 0x23EC JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2401 JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP4 POP PUSH2 0x2440 SWAP1 RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2438 DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3918 JUMP JUMPDEST POP SWAP4 SWAP2 SWAP1 POP PUSH2 0x22DE JUMP JUMPDEST DUP4 PUSH32 0x0 AND SWAP5 PUSH2 0x222E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2502 SWAP6 PUSH2 0x24CA SWAP4 SWAP5 SWAP6 PUSH2 0x2494 PUSH1 0x80 SWAP12 DUP13 DUP2 ADD SWAP1 PUSH2 0x1975 JUMP JUMPDEST SWAP4 SWAP1 SWAP5 PUSH1 0x40 MLOAD SWAP8 PUSH2 0x24A4 DUP10 PUSH2 0x11D2 JUMP JUMPDEST PUSH0 DUP10 MSTORE PUSH1 0x20 DUP10 ADD MSTORE AND PUSH1 0x40 DUP8 ADD MSTORE PUSH1 0x60 SWAP11 DUP12 SWAP8 DUP9 DUP9 ADD MSTORE DUP7 ADD MSTORE PUSH1 0xA0 DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x141D JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x2BFB780C00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x38AC JUMP JUMPDEST SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x307 JUMPI PUSH0 SWAP5 PUSH2 0x25C1 JUMPI JUMPDEST POP POP PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x1D32 JUMPI DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH2 0x1F80 SWAP4 PUSH1 0x1 SWAP7 SWAP6 PUSH2 0x2567 DUP13 DUP13 PUSH2 0x172D JUMP JUMPDEST MSTORE PUSH2 0x2597 DUP4 DUP4 DUP4 ADD MLOAD AND PUSH32 0x0 PUSH2 0x4252 JUMP JUMPDEST POP ADD MLOAD AND PUSH32 0x0 PUSH2 0x429C JUMP JUMPDEST PUSH1 0x20 SWAP3 SWAP5 POP SWAP1 DUP2 PUSH2 0x25DD SWAP3 SWAP1 RETURNDATASIZE LT PUSH2 0x1D7C JUMPI PUSH2 0x1D69 DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP1 PUSH0 PUSH2 0x253F JUMP JUMPDEST PUSH0 SWAP1 PUSH2 0x1BC9 JUMP JUMPDEST POP SWAP2 SWAP6 POP SWAP1 SWAP4 POP POP PUSH1 0x1 ADD PUSH2 0x1AFD JUMP JUMPDEST PUSH2 0x2629 DUP3 PUSH32 0x0 PUSH2 0x4252 JUMP JUMPDEST POP PUSH2 0x2655 DUP7 DUP4 PUSH32 0x0 PUSH2 0x429C JUMP JUMPDEST PUSH2 0x1B88 JUMP JUMPDEST POP ORIGIN ISZERO ISZERO PUSH2 0x1B63 JUMP JUMPDEST POP POP PUSH2 0x268E PUSH32 0x0 PUSH2 0x3B0D JUMP JUMPDEST SWAP2 PUSH2 0x2699 DUP4 MLOAD PUSH2 0x1A6C JUMP JUMPDEST PUSH32 0x0 SWAP2 PUSH32 0x0 SWAP2 SWAP1 PUSH0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x2756 JUMPI PUSH1 0x1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x26FF DUP4 DUP12 PUSH2 0x172D JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP6 PUSH1 0x20 MSTORE PUSH2 0x272D PUSH1 0x40 PUSH0 KECCAK256 TLOAD DUP3 PUSH2 0x271A DUP6 DUP14 PUSH2 0x172D JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP9 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP1 PUSH2 0x1A9D JUMP JUMPDEST PUSH2 0x2737 DUP4 DUP8 PUSH2 0x172D JUMP JUMPDEST MSTORE PUSH2 0x2742 DUP3 DUP11 PUSH2 0x172D JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP6 PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 TSTORE ADD PUSH2 0x26E0 JUMP JUMPDEST POP SWAP5 SWAP4 SWAP2 POP SWAP2 POP JUMP JUMPDEST PUSH32 0xE08B8AF000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH0 NOT DUP3 ADD SWAP2 DUP3 SGT PUSH1 0x1 AND PUSH2 0x1AAA JUMPI JUMP JUMPDEST PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x1AAA JUMPI PUSH0 NOT ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0x0 SWAP1 DUP2 TLOAD PUSH32 0x0 PUSH2 0x2815 DUP2 TLOAD PUSH2 0x2787 JUMP JUMPDEST SWAP1 PUSH32 0x0 SWAP2 JUMPDEST PUSH0 DUP2 SLT ISZERO PUSH2 0x28D6 JUMPI POP POP POP PUSH2 0x284D SWAP1 PUSH2 0x2787 JUMP JUMPDEST SWAP2 PUSH32 0x0 SWAP3 JUMPDEST PUSH0 DUP2 SLT ISZERO PUSH2 0x2886 JUMPI POP POP POP POP PUSH2 0x18E8 SWAP1 PUSH2 0x374D JUMP JUMPDEST PUSH2 0x28D1 SWAP1 DUP3 PUSH0 MSTORE PUSH2 0x28CB PUSH1 0x20 PUSH0 DUP4 DUP3 DUP3 KECCAK256 ADD TLOAD SWAP2 DUP3 DUP3 MSTORE DUP9 DUP2 MSTORE DUP9 PUSH1 0x40 SWAP2 PUSH2 0x28BE DUP11 DUP14 DUP6 DUP8 KECCAK256 TLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP1 PUSH2 0x3F4C JUMP JUMPDEST DUP5 DUP5 MSTORE MSTORE DUP2 KECCAK256 TSTORE DUP5 PUSH2 0x3EA9 JUMP JUMPDEST POP PUSH2 0x2798 JUMP JUMPDEST PUSH2 0x2871 JUMP JUMPDEST PUSH2 0x290E SWAP1 DUP3 PUSH0 MSTORE PUSH2 0x28CB PUSH1 0x20 PUSH0 DUP11 DUP8 DUP6 DUP5 DUP5 KECCAK256 ADD TLOAD SWAP4 DUP5 DUP5 MSTORE DUP2 DUP2 MSTORE PUSH2 0x28BE DUP13 PUSH1 0x40 SWAP5 DUP6 DUP8 KECCAK256 TLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP1 PUSH2 0x3B79 JUMP JUMPDEST PUSH2 0x2839 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x293D JUMPI RETURNDATASIZE SWAP1 PUSH2 0x2924 DUP3 PUSH2 0x1401 JUMP JUMPDEST SWAP2 PUSH2 0x2932 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x11EE JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH6 0xFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x312 JUMPI JUMP JUMPDEST SWAP1 PUSH0 SWAP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 TLOAD AND ISZERO PUSH2 0x298D JUMPI POP POP JUMP JUMPDEST SWAP1 SWAP2 SWAP3 POP TSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x40 DUP3 ADD CALLDATALOAD TIMESTAMP GT PUSH2 0x275F JUMPI PUSH2 0x29B3 PUSH2 0x1AF3 PUSH1 0x20 DUP5 ADD DUP5 PUSH2 0x3790 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST PUSH2 0x29C3 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x3790 JUMP JUMPDEST SWAP1 POP DUP2 LT ISZERO PUSH2 0x366D JUMPI PUSH2 0x29E0 DUP2 PUSH2 0x1B2F PUSH2 0x1B27 PUSH1 0x20 DUP7 ADD DUP7 PUSH2 0x3790 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD SWAP1 PUSH2 0x2A1A PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 MLOAD AND PUSH32 0x0 PUSH2 0x4252 JUMP JUMPDEST POP PUSH1 0x20 DUP2 ADD MLOAD MLOAD PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x1AAA JUMPI JUMPDEST PUSH0 DUP2 SLT ISZERO PUSH2 0x2A40 JUMPI POP POP POP PUSH1 0x1 ADD PUSH2 0x29B6 JUMP JUMPDEST PUSH2 0x2A4E DUP2 PUSH1 0x20 DUP5 ADD MLOAD PUSH2 0x172D JUMP JUMPDEST MLOAD PUSH2 0x2A57 PUSH2 0x3824 JUMP JUMPDEST SWAP1 DUP3 ISZERO PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP5 ADD MLOAD MLOAD DUP1 PUSH0 NOT DUP2 ADD GT PUSH2 0x1AAA JUMPI PUSH0 NOT ADD DUP4 EQ DUP1 DUP4 MSTORE PUSH2 0x362B JUMPI JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD ISZERO PUSH2 0x35F0 JUMPI PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 MLOAD AND SWAP2 JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD ISZERO PUSH2 0x2CB9 JUMPI DUP4 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x60 SWAP3 PUSH1 0x20 PUSH2 0x2B3C SWAP8 ADD MLOAD ISZERO ISZERO DUP1 PUSH2 0x2CB0 JUMPI JUMPDEST PUSH2 0x2C89 JUMPI JUMPDEST MLOAD AND SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP3 SUB PUSH2 0x2C82 JUMPI PUSH1 0x1 SWAP2 JUMPDEST PUSH1 0x40 MLOAD SWAP3 PUSH2 0x2AE8 DUP5 PUSH2 0x11B6 JUMP JUMPDEST PUSH1 0x1 DUP5 MSTORE PUSH2 0x2AF5 DUP2 PUSH2 0x385A JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE DUP9 DUP4 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP3 PUSH32 0x43583BE500000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x3ABE JUMP JUMPDEST SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x307 JUMPI DUP8 SWAP2 DUP12 SWAP2 PUSH0 SWAP6 PUSH2 0x2C5B JUMPI JUMPDEST POP PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x2C4C JUMPI PUSH2 0x2C42 SWAP3 DUP5 PUSH2 0x2B9E PUSH2 0x2C47 SWAP8 SWAP7 SWAP5 PUSH2 0x2C11 SWAP5 PUSH2 0x172D JUMP JUMPDEST MSTORE PUSH2 0x2BD2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH32 0x0 PUSH2 0x4252 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2BE9 DUP5 PUSH1 0x40 DUP11 ADD MLOAD PUSH2 0x384D JUMP JUMPDEST SWAP2 AND PUSH32 0x0 PUSH2 0x429C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 MLOAD AND PUSH32 0x0 PUSH2 0x429C JUMP JUMPDEST PUSH2 0x2798 JUMP JUMPDEST PUSH2 0x2A2D JUMP JUMPDEST POP POP POP PUSH2 0x2C47 SWAP2 SWAP4 POP SWAP3 PUSH2 0x2798 JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP6 POP PUSH2 0x2C78 SWAP1 PUSH1 0x60 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x1D7C JUMPI PUSH2 0x1D69 DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST POP SWAP6 SWAP2 SWAP1 POP PUSH2 0x2B7D JUMP JUMPDEST PUSH0 SWAP2 PUSH2 0x2ADB JUMP JUMPDEST PUSH2 0x2CAB PUSH2 0x2C95 DUP14 PUSH2 0x13E0 JUMP JUMPDEST DUP14 DUP12 PUSH2 0x1B82 DUP9 PUSH1 0x40 DUP9 DUP5 MLOAD AND SWAP4 ADD MLOAD SWAP4 ADD PUSH2 0x13F4 JUMP JUMPDEST PUSH2 0x2AC4 JUMP JUMPDEST POP ORIGIN ISZERO ISZERO PUSH2 0x2ABF JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 MLOAD AND DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EQ PUSH0 EQ PUSH2 0x31D3 JUMPI POP PUSH1 0x20 DUP5 ADD MLOAD PUSH2 0x30E5 JUMPI POP PUSH1 0x40 MLOAD SWAP3 PUSH32 0x9678709200000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x20 DUP5 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x307 JUMPI PUSH0 SWAP5 PUSH2 0x30B1 JUMPI JUMPDEST POP DUP4 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 MLOAD AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x312 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH0 DUP6 DUP1 PUSH1 0x64 DUP2 ADD SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x307 JUMPI PUSH2 0x2E88 SWAP6 PUSH0 SWAP3 PUSH2 0x30A2 JUMPI JUMPDEST POP JUMPDEST PUSH2 0x1E79 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2E44 DUP12 DUP3 DUP6 MLOAD AND DUP4 PUSH1 0x20 DUP8 ADD MLOAD AND SWAP1 PUSH2 0x42B5 JUMP JUMPDEST POP SWAP3 MLOAD AND SWAP2 DUP13 PUSH1 0x2 PUSH2 0x2E5B PUSH1 0x80 SWAP3 DUP4 DUP2 ADD SWAP1 PUSH2 0x1975 JUMP JUMPDEST SWAP3 SWAP1 SWAP4 PUSH1 0x40 MLOAD SWAP7 PUSH2 0x2E6B DUP9 PUSH2 0x1186 JUMP JUMPDEST DUP8 MSTORE ADDRESS PUSH1 0x20 DUP9 ADD MSTORE DUP10 PUSH1 0x40 DUP9 ADD MSTORE PUSH1 0x60 DUP8 ADD MSTORE DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x141D JUMP JUMPDEST SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x307 JUMPI PUSH0 SWAP5 PUSH2 0x307F JUMPI JUMPDEST POP PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x2F6B JUMPI SWAP1 DUP3 SWAP2 PUSH2 0x2C47 SWAP5 SWAP4 PUSH2 0x2EE1 DUP10 DUP14 PUSH2 0x172D JUMP JUMPDEST MSTORE PUSH2 0x2F16 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH32 0x0 PUSH2 0x429C JUMP JUMPDEST DUP1 DUP4 LT DUP1 PUSH2 0x2F50 JUMPI JUMPDEST PUSH2 0x2F2C JUMPI JUMPDEST POP POP POP PUSH2 0x2798 JUMP JUMPDEST PUSH2 0x2F42 PUSH2 0x2F48 SWAP4 PUSH2 0x2F3C DUP12 PUSH2 0x13E0 JUMP JUMPDEST SWAP3 PUSH2 0x384D JUMP JUMPDEST SWAP2 PUSH2 0x43E8 JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0x2F24 JUMP JUMPDEST POP ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2F63 DUP12 PUSH2 0x13E0 JUMP JUMPDEST AND EQ ISZERO PUSH2 0x2F1F JUMP JUMPDEST SWAP5 POP SWAP1 DUP1 SWAP5 DUP1 DUP3 LT PUSH2 0x2F84 JUMPI JUMPDEST POP POP POP PUSH2 0x2C47 SWAP1 PUSH2 0x2798 JUMP JUMPDEST SWAP2 PUSH2 0x2F94 PUSH1 0x20 SWAP3 PUSH2 0x3013 SWAP5 PUSH2 0x384D JUMP JUMPDEST SWAP1 PUSH2 0x2FC9 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP4 PUSH2 0x43E8 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP3 DUP4 SWAP3 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x307 JUMPI PUSH2 0x3054 JUMPI JUMPDEST DUP1 DUP1 PUSH2 0x2F78 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3078 JUMPI JUMPDEST PUSH2 0x306A DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x312 JUMPI PUSH0 PUSH2 0x304D JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3060 JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP5 POP PUSH2 0x3097 SWAP1 RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x1FC0 DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST POP SWAP1 SWAP5 SWAP2 SWAP1 POP PUSH2 0x2EC5 JUMP JUMPDEST PUSH2 0x30AB SWAP1 PUSH2 0x11A2 JUMP JUMPDEST PUSH0 PUSH2 0x2E22 JUMP JUMPDEST SWAP1 SWAP4 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x30DD JUMPI JUMPDEST DUP2 PUSH2 0x30CD PUSH1 0x20 SWAP4 DUP4 PUSH2 0x11EE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x312 JUMPI MLOAD SWAP3 PUSH0 PUSH2 0x2D58 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x30C0 JUMP JUMPDEST SWAP1 SWAP3 PUSH2 0x30F0 DUP10 PUSH2 0x13E0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB ADDRESS SWAP2 AND SUB PUSH2 0x310B JUMPI JUMPDEST PUSH0 PUSH2 0x2E88 SWAP5 PUSH2 0x2E24 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP4 PUSH2 0x313F DUP11 PUSH2 0x13E0 JUMP JUMPDEST PUSH2 0x3148 DUP5 PUSH2 0x438F JUMP JUMPDEST SWAP1 DUP7 EXTCODESIZE ISZERO PUSH2 0x312 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP2 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE DUP6 AND PUSH1 0x64 DUP3 ADD MSTORE SWAP5 PUSH0 SWAP1 DUP7 SWAP1 PUSH1 0x84 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x307 JUMPI PUSH2 0x2E88 SWAP6 PUSH0 SWAP3 PUSH2 0x31C4 JUMPI JUMPDEST POP SWAP5 POP POP PUSH2 0x3101 JUMP JUMPDEST PUSH2 0x31CD SWAP1 PUSH2 0x11A2 JUMP JUMPDEST PUSH0 PUSH2 0x31BB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP5 SWAP7 SWAP6 SWAP5 ADD MLOAD AND DUP11 DUP3 DUP3 EQ PUSH0 EQ PUSH2 0x34A7 JUMPI POP POP POP PUSH2 0x32A8 PUSH2 0x320A PUSH0 SWAP3 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 MLOAD AND PUSH2 0x42B5 JUMP JUMPDEST SWAP3 SWAP1 PUSH2 0x3270 DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP11 MLOAD AND SWAP4 DUP10 MLOAD ISZERO ISZERO DUP7 EQ PUSH2 0x347B JUMPI PUSH2 0x323F PUSH2 0x3233 DUP5 PUSH2 0x13E0 JUMP JUMPDEST SWAP4 JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 PUSH2 0x1975 JUMP JUMPDEST SWAP3 SWAP1 SWAP4 PUSH1 0x40 MLOAD SWAP7 PUSH2 0x324F DUP9 PUSH2 0x1186 JUMP JUMPDEST DUP8 MSTORE AND PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE DUP13 PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x2 PUSH1 0x80 DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x141D JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x4AF29EC400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x3994 JUMP JUMPDEST SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x307 JUMPI PUSH0 SWAP2 PUSH2 0x3460 JUMPI JUMPDEST POP PUSH1 0x20 DUP5 ADD MLOAD DUP13 SWAP1 DUP11 SWAP1 ISZERO PUSH2 0x3446 JUMPI DUP4 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 PUSH2 0x331F PUSH2 0x3325 SWAP5 PUSH2 0x3318 DUP16 SWAP13 SWAP12 SWAP11 SWAP9 SWAP10 PUSH2 0x334E SWAP11 PUSH2 0x172D JUMP JUMPDEST MLOAD SWAP3 PUSH2 0x172D JUMP JUMPDEST MSTORE PUSH2 0x172D JUMP JUMPDEST MLOAD SWAP2 AND PUSH32 0x0 PUSH2 0x429C JUMP JUMPDEST MLOAD ISZERO PUSH2 0x3390 JUMPI PUSH2 0x2C47 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH2 0x2C42 SWAP4 ADD MLOAD AND PUSH32 0x0 PUSH2 0x43D3 JUMP JUMPDEST MLOAD PUSH1 0x40 MLOAD PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 DUP1 PUSH1 0x44 DUP2 ADD SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x307 JUMPI PUSH2 0x341B JUMPI JUMPDEST POP PUSH2 0x2C47 SWAP1 PUSH2 0x2798 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x343F JUMPI JUMPDEST PUSH2 0x3431 DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x312 JUMPI PUSH0 PUSH2 0x3411 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3427 JUMP JUMPDEST POP POP SWAP1 SWAP2 POP PUSH2 0x3457 SWAP3 SWAP4 SWAP7 POP PUSH2 0x172D JUMP JUMPDEST MLOAD SWAP4 DUP5 SWAP2 PUSH2 0x334E JUMP JUMPDEST PUSH2 0x3474 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2438 DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST SWAP1 POP PUSH2 0x32E5 JUMP JUMPDEST PUSH2 0x323F DUP3 PUSH32 0x0 AND SWAP4 PUSH2 0x3235 JUMP JUMPDEST PUSH2 0x353A SWAP7 POP SWAP1 PUSH2 0x3502 SWAP2 PUSH1 0x60 SWAP5 DUP12 PUSH2 0x34C7 PUSH1 0x80 SWAP10 SWAP9 SWAP10 SWAP4 DUP5 DUP2 ADD SWAP1 PUSH2 0x1975 JUMP JUMPDEST SWAP4 SWAP1 SWAP5 PUSH1 0x40 MLOAD SWAP8 PUSH2 0x34D7 DUP10 PUSH2 0x11D2 JUMP JUMPDEST PUSH1 0x1 DUP10 MSTORE PUSH1 0x20 DUP10 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND PUSH1 0x40 DUP10 ADD MSTORE DUP9 DUP9 ADD MSTORE DUP7 ADD MSTORE PUSH1 0xA0 DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x141D JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP3 PUSH32 0x2BFB780C00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x38AC JUMP JUMPDEST SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x307 JUMPI DUP8 SWAP2 DUP12 SWAP2 PUSH0 SWAP6 PUSH2 0x35C9 JUMPI JUMPDEST POP PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x2C4C JUMPI PUSH2 0x2C42 SWAP3 DUP5 PUSH2 0x35A1 PUSH2 0x2C47 SWAP8 SWAP7 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 PUSH2 0x172D JUMP JUMPDEST MSTORE AND PUSH32 0x0 PUSH2 0x429C JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP6 POP PUSH2 0x35E6 SWAP1 PUSH1 0x60 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x1D7C JUMPI PUSH2 0x1D69 DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST POP SWAP6 SWAP2 SWAP1 POP PUSH2 0x357B JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH2 0x3621 DUP2 DUP9 ADD MLOAD PUSH2 0x361B DUP9 PUSH2 0x2787 JUMP JUMPDEST SWAP1 PUSH2 0x172D JUMP JUMPDEST MLOAD ADD MLOAD AND SWAP2 PUSH2 0x2A98 JUMP JUMPDEST PUSH2 0x3668 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP5 ADD PUSH2 0x1D03 DUP3 DUP3 MLOAD AND PUSH32 0x0 PUSH2 0x4252 JUMP JUMPDEST PUSH2 0x2A7C JUMP JUMPDEST POP POP PUSH2 0x3698 PUSH32 0x0 PUSH2 0x3B0D JUMP JUMPDEST SWAP2 PUSH2 0x36A3 DUP4 MLOAD PUSH2 0x1A6C JUMP JUMPDEST PUSH32 0x0 SWAP2 PUSH32 0x0 SWAP2 SWAP1 PUSH0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x2756 JUMPI PUSH1 0x1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x3709 DUP4 DUP12 PUSH2 0x172D JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP6 PUSH1 0x20 MSTORE PUSH2 0x3724 PUSH1 0x40 PUSH0 KECCAK256 TLOAD DUP3 PUSH2 0x271A DUP6 DUP14 PUSH2 0x172D JUMP JUMPDEST PUSH2 0x372E DUP4 DUP8 PUSH2 0x172D JUMP JUMPDEST MSTORE PUSH2 0x3739 DUP3 DUP11 PUSH2 0x172D JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP6 PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 TSTORE ADD PUSH2 0x36EA JUMP JUMPDEST SELFBALANCE DUP1 ISZERO PUSH2 0x378C JUMPI PUSH32 0x0 TLOAD PUSH2 0x378C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x18E8 SWAP3 AND PUSH2 0x4172 JUMP JUMPDEST POP POP JUMP JUMPDEST SWAP1 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP2 CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x312 JUMPI ADD DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x312 JUMPI PUSH1 0x20 ADD SWAP2 DUP2 PUSH1 0x5 SHL CALLDATASIZE SUB DUP4 SGT PUSH2 0x312 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x1741 JUMPI PUSH1 0x5 SHL DUP2 ADD CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 DUP2 CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x312 JUMPI ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0x40 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1159 JUMPI PUSH1 0x40 MSTORE PUSH0 PUSH1 0x20 DUP4 DUP3 DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x1AAA JUMPI JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x3864 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x60 SWAP2 SUB SLT PUSH2 0x312 JUMPI DUP1 MLOAD SWAP2 PUSH1 0x40 PUSH1 0x20 DUP4 ADD MLOAD SWAP3 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x100 PUSH1 0xC0 PUSH2 0x1018 SWAP4 PUSH1 0x20 DUP5 MSTORE DUP1 MLOAD PUSH2 0x38C4 DUP2 PUSH2 0x385A JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH1 0x40 DUP7 ADD MSTORE DUP1 PUSH1 0x40 DUP4 ADD MLOAD AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD DUP3 DUP6 ADD MSTORE ADD MLOAD SWAP2 PUSH1 0xE0 DUP1 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x1097 JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x60 DUP3 DUP5 SUB SLT PUSH2 0x312 JUMPI DUP2 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x312 JUMPI DUP5 PUSH2 0x3944 SWAP2 DUP4 ADD PUSH2 0x160F JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP3 ADD MLOAD SWAP4 PUSH1 0x40 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x312 JUMPI PUSH2 0x1018 SWAP3 ADD PUSH2 0x15A3 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x3980 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x3972 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x39CD PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0xC0 PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0xE0 DUP4 ADD SWAP1 PUSH2 0x3961 JUMP JUMPDEST SWAP1 PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0x3864 JUMPI PUSH2 0x1018 SWAP4 PUSH1 0xA0 SWAP2 DUP3 DUP5 ADD MSTORE ADD MLOAD SWAP1 PUSH1 0xC0 PUSH1 0x1F NOT DUP3 DUP6 SUB ADD SWAP2 ADD MSTORE PUSH2 0x1097 JUMP JUMPDEST SWAP2 PUSH1 0x60 DUP4 DUP4 SUB SLT PUSH2 0x312 JUMPI DUP3 MLOAD SWAP3 PUSH1 0x20 DUP2 ADD MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP2 GT PUSH2 0x312 JUMPI DUP2 PUSH2 0x3A36 SWAP2 DUP5 ADD PUSH2 0x160F JUMP JUMPDEST SWAP4 PUSH1 0x40 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x312 JUMPI PUSH2 0x1018 SWAP3 ADD PUSH2 0x15A3 JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x3A90 PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xC0 PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xE0 DUP4 ADD SWAP1 PUSH2 0x3961 JUMP JUMPDEST SWAP1 PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x3864 JUMPI PUSH2 0x1018 SWAP4 PUSH1 0xA0 SWAP2 DUP3 DUP5 ADD MSTORE ADD MLOAD SWAP1 PUSH1 0xC0 PUSH1 0x1F NOT DUP3 DUP6 SUB ADD SWAP2 ADD MSTORE PUSH2 0x1097 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x80 DUP1 PUSH1 0xA0 DUP4 ADD SWAP5 DUP1 MLOAD PUSH2 0x3AD4 DUP2 PUSH2 0x385A JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x3AE4 DUP2 PUSH2 0x385A JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP6 ADD MSTORE ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 TLOAD PUSH2 0x3B19 DUP2 PUSH2 0x1211 JUMP JUMPDEST PUSH2 0x3B26 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x11EE JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH2 0x3B32 DUP3 PUSH2 0x1211 JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x20 SWAP2 ADD CALLDATASIZE PUSH1 0x20 DUP5 ADD CALLDATACOPY DUP2 SWAP5 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x3B51 JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH0 MSTORE DUP1 DUP5 PUSH0 KECCAK256 ADD TLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x3B6F DUP4 DUP9 PUSH2 0x172D JUMP JUMPDEST SWAP2 AND SWAP1 MSTORE ADD PUSH2 0x3B43 JUMP JUMPDEST SWAP2 SWAP3 DUP1 PUSH2 0x3E74 JUMPI JUMPDEST ISZERO PUSH2 0x3CED JUMPI POP POP DUP1 SELFBALANCE LT PUSH2 0x3CC5 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP2 DUP3 EXTCODESIZE ISZERO PUSH2 0x312 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xD0E30DB000000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH0 SWAP2 PUSH0 DUP2 PUSH1 0x4 DUP2 DUP6 DUP10 GAS CALL DUP1 ISZERO PUSH2 0x307 JUMPI PUSH2 0x3CAE JUMPI JUMPDEST POP PUSH1 0x44 PUSH1 0x20 SWAP3 SWAP4 PUSH32 0x0 AND SWAP5 PUSH2 0x3C34 DUP4 DUP8 DUP4 PUSH2 0x43E8 JUMP JUMPDEST DUP5 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP4 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x3CA2 JUMPI POP PUSH2 0x3C7B JUMPI POP JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3C9B JUMPI JUMPDEST PUSH2 0x3C91 DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x312 JUMPI JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3C87 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x20 SWAP3 POP PUSH2 0x3CBB SWAP1 PUSH2 0x11A2 JUMP JUMPDEST PUSH1 0x44 PUSH0 SWAP3 POP PUSH2 0x3BFF JUMP JUMPDEST PUSH32 0xA01A9DF600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 PUSH0 SWAP1 DUP1 PUSH2 0x3CFD JUMPI JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 PUSH32 0x0 AND SWAP5 DUP1 PUSH32 0x0 AND SWAP2 PUSH2 0x3D57 DUP5 PUSH2 0x438F JUMP JUMPDEST SWAP7 DUP1 EXTCODESIZE ISZERO PUSH2 0x312 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP8 DUP3 AND PUSH1 0x44 DUP10 ADD MSTORE SWAP2 DUP7 AND AND PUSH1 0x64 DUP8 ADD MSTORE PUSH0 SWAP1 DUP7 SWAP1 PUSH1 0x84 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP5 DUP6 ISZERO PUSH2 0x307 JUMPI PUSH2 0x3E1C SWAP6 PUSH2 0x3E60 JUMPI JUMPDEST POP DUP3 SWAP4 PUSH1 0x20 SWAP4 PUSH1 0x40 MLOAD DUP1 SWAP8 DUP2 SWAP6 DUP3 SWAP5 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x3CA2 JUMPI POP PUSH2 0x3E35 JUMPI JUMPDEST DUP1 DUP1 DUP1 PUSH2 0x3CF7 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3E59 JUMPI JUMPDEST PUSH2 0x3E4B DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x312 JUMPI PUSH0 PUSH2 0x3E2D JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3E41 JUMP JUMPDEST PUSH1 0x20 SWAP4 POP PUSH2 0x3E6D SWAP1 PUSH2 0x11A2 JUMP JUMPDEST PUSH0 SWAP3 PUSH2 0x3DCB JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP1 DUP3 AND EQ PUSH2 0x3B81 JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SWAP2 DUP1 PUSH0 MSTORE PUSH1 0x20 SWAP2 DUP4 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD DUP1 ISZERO ISZERO PUSH0 EQ PUSH2 0x3F43 JUMPI PUSH0 NOT SWAP1 DUP2 DUP2 ADD DUP4 TLOAD DUP4 DUP1 DUP3 ADD SWAP2 DUP3 DUP5 SUB PUSH2 0x3F06 JUMPI JUMPDEST POP POP POP POP POP DUP2 TLOAD DUP2 DUP2 ADD SWAP3 DUP2 DUP5 GT PUSH2 0x1AAA JUMPI PUSH0 SWAP4 DUP2 TSTORE DUP4 MSTORE DUP5 DUP4 KECCAK256 ADD ADD TSTORE PUSH0 MSTORE MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 TSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH2 0x3F13 PUSH2 0x3F23 SWAP4 DUP9 PUSH2 0x44CC JUMP JUMPDEST DUP7 PUSH0 MSTORE DUP9 PUSH0 KECCAK256 ADD ADD TLOAD SWAP2 DUP6 PUSH2 0x44CC JUMP JUMPDEST DUP4 PUSH0 MSTORE DUP1 DUP4 DUP4 DUP9 PUSH0 KECCAK256 ADD ADD TSTORE PUSH0 MSTORE DUP6 DUP6 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TSTORE PUSH0 DUP1 DUP1 DUP4 DUP2 PUSH2 0x3EDA JUMP JUMPDEST POP POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SWAP1 SWAP4 SWAP3 SWAP4 PUSH0 SWAP5 DUP4 ISZERO PUSH2 0x416A JUMPI DUP1 PUSH2 0x4135 JUMPI JUMPDEST ISZERO PUSH2 0x4098 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH32 0x0 AND DUP1 EXTCODESIZE ISZERO PUSH2 0x312 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 DUP9 PUSH32 0x0 AND SWAP7 DUP8 PUSH1 0x4 DUP5 ADD MSTORE ADDRESS PUSH1 0x24 DUP5 ADD MSTORE DUP11 PUSH1 0x44 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x307 JUMPI PUSH2 0x4085 JUMPI JUMPDEST POP DUP1 DUP7 SWAP2 EXTCODESIZE ISZERO PUSH2 0x4081 JUMPI DUP2 SWAP1 PUSH1 0x24 PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x2E1A7D4D00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x4076 JUMPI PUSH2 0x405E JUMPI JUMPDEST POP PUSH2 0x18E8 SWAP4 SWAP5 POP AND PUSH2 0x4172 JUMP JUMPDEST PUSH2 0x4068 DUP7 SWAP2 PUSH2 0x11A2 JUMP JUMPDEST PUSH2 0x4072 JUMPI DUP5 PUSH2 0x4051 JUMP JUMPDEST DUP5 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP9 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST PUSH2 0x4090 SWAP2 SWAP7 POP PUSH2 0x11A2 JUMP JUMPDEST PUSH0 SWAP5 PUSH0 PUSH2 0x4006 JUMP JUMPDEST SWAP2 SWAP1 SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP1 EXTCODESIZE ISZERO PUSH2 0x312 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP4 SWAP1 SWAP3 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE PUSH0 SWAP1 DUP3 SWAP1 PUSH1 0x64 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL DUP1 ISZERO PUSH2 0x307 JUMPI PUSH2 0x412C JUMPI POP JUMP JUMPDEST PUSH2 0x18E8 SWAP1 PUSH2 0x11A2 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP1 DUP3 AND EQ PUSH2 0x3F5E JUMP JUMPDEST POP POP POP POP SWAP1 POP JUMP JUMPDEST DUP2 SELFBALANCE LT PUSH2 0x41C2 JUMPI PUSH0 DUP1 DUP1 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 SWAP5 AND GAS CALL PUSH2 0x4192 PUSH2 0x2913 JUMP JUMPDEST POP ISZERO PUSH2 0x419A JUMPI JUMP JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0xCD78605900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE ADDRESS PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x4203 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x419A JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x4249 JUMPI JUMPDEST PUSH2 0x4214 JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x420C JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SWAP1 DUP3 PUSH0 MSTORE DUP2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD ISZERO PUSH0 EQ PUSH2 0x4295 JUMPI DUP1 TLOAD DUP2 PUSH0 MSTORE DUP4 DUP2 PUSH1 0x20 PUSH0 KECCAK256 ADD TSTORE PUSH1 0x1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x1AAA JUMPI DUP2 TSTORE TLOAD SWAP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x42B1 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 TLOAD PUSH2 0x1A9D JUMP JUMPDEST SWAP1 TSTORE JUMP JUMPDEST SWAP2 PUSH1 0x44 SWAP3 SWAP4 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 SWAP5 DUP6 SWAP3 DUP3 DUP1 DUP6 MLOAD SWAP10 DUP11 SWAP6 DUP7 SWAP5 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x4 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x4385 JUMPI PUSH0 SWAP4 PUSH0 SWAP6 PUSH2 0x434E JUMPI JUMPDEST POP POP PUSH2 0x434B PUSH2 0x4344 DUP6 SWAP5 PUSH2 0x1A6C JUMP JUMPDEST SWAP5 DUP6 PUSH2 0x172D JUMP JUMPDEST MSTORE JUMP JUMPDEST DUP1 SWAP3 SWAP6 POP DUP2 SWAP5 POP RETURNDATASIZE DUP4 GT PUSH2 0x437E JUMPI JUMPDEST PUSH2 0x4367 DUP2 DUP4 PUSH2 0x11EE JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x312 JUMPI PUSH1 0x20 DUP3 MLOAD SWAP3 ADD MLOAD SWAP3 PUSH0 DUP1 PUSH2 0x4335 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x435D JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP2 GT PUSH2 0x43A3 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0xA0 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x42B1 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 TLOAD PUSH2 0x384D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 PUSH1 0x20 DUP5 ADD SWAP1 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 AND PUSH1 0x24 DUP7 ADD MSTORE PUSH1 0x44 DUP6 ADD MSTORE PUSH1 0x44 DUP5 MSTORE PUSH1 0x80 DUP5 ADD SWAP1 DUP5 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x1159 JUMPI PUSH2 0x4467 SWAP4 PUSH0 SWAP4 DUP5 SWAP4 PUSH1 0x40 MSTORE AND SWAP5 MLOAD SWAP1 DUP3 DUP7 GAS CALL PUSH2 0x4460 PUSH2 0x2913 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x41EE JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x44A8 JUMPI JUMPDEST POP POP PUSH2 0x447D JUMPI POP JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 SWAP3 POP SWAP1 PUSH1 0x20 SWAP2 DUP2 ADD SUB SLT PUSH2 0x312 JUMPI PUSH1 0x20 ADD MLOAD DUP1 ISZERO SWAP1 DUP2 ISZERO SUB PUSH2 0x312 JUMPI PUSH0 DUP1 PUSH2 0x4474 JUMP JUMPDEST TLOAD GT ISZERO PUSH2 0x44D5 JUMPI JUMP JUMPDEST PUSH32 0xF4AE0E400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC4 SLOAD 0xB5 0xC6 0xB2 0x22 DUP13 0xAD PUSH1 0x81 0xC9 0xBE 0xDE CALLER 0xF8 0x23 0xBE BYTE SGT 0xE2 PUSH24 0x4D7B00E869883D9408EEFD64736F6C634300081B00330000 ","sourceMap":"1782:32167:60:-:0;;;;;;;;;-1:-1:-1;1782:32167:60;;;;;;;;-1:-1:-1;;;;;13086:5:65;1782:32167:60;13064:10:65;:28;13060:79;;1782:32167:60;13060:79:65;13115:13;;;1782:32167:60;13115:13:65;;1782:32167:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1782:32167:60;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;3599:19:66;1782:32167:60;;;;;;:::i;:::-;3599:19:66;;;;:::i;:::-;31554:13:60;1782:32167;31587:3;1782:32167;;31569:16;;;;;31606:8;1782:32167;31606:8;;1782:32167;31606:8;;;:::i;:::-;;:21;1782:32167;;31554:13;;31569:16;;31733:413;;1782:32167;31569:16;1782:32167;;31569:16;;1782:32167;;;;;;:::i;:::-;31899:4;1782:32167;;;31831:293;;1782:32167;-1:-1:-1;;1782:32167:60;31831:293;;1782:32167;31831:293;1782:32167;31831:293;;1782:32167;;;;:::i;:::-;31831:293;;;1782:32167;;;31733:413;;;;1782:32167;31733:413;;;1782:32167;31733:413;;;:::i;:::-;;-1:-1:-1;;31733:413:60;;;;;;:::i;:::-;1782:32167;;31699:465;;;;1782:32167;31699:465;;1782:32167;;31699:465;;1782:32167;;;;;;:::i;:::-;31699:465;:6;;-1:-1:-1;;;;;31699:6:60;1782:32167;31699:465;;;;;;;1782:32167;31699:465;31671:558;31699:465;1782:32167;31699:465;;;31549:93;1782:32167;;;;;31671:558;;;;;;:::i;:::-;4282:82:66;;;;;;31549:93:60;1782:32167;;;;;;;:::i;:::-;;;;4282:82:66;1782:32167:60;4704:12:66;3051:52:55;4282:82:66;;31699:465:60;;;;;;1782:32167;31699:465;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;1782:32167;;;;;;;;;;;;;;;-1:-1:-1;;1782:32167:60;;;;;;;;;;;;8105:22:65;1782:32167:60;;;;;;;;:::i;:::-;8105:22:65;;:::i;:::-;1782:32167:60;;;;;;;:::i;:::-;;;;;;;:::i;:::-;1083:103:53;;:::i;:::-;436:67:72;;:::i;:::-;17491:16:60;1782:32167;17427:25;;;:::i;:::-;17476:13;;;;17491:16;1782:32167;17476:13;;;:::i;:::-;17491:16;;;:::i;:::-;;;:::i;:::-;1782:32167;551:66:53;3051:52:55;1782:32167:60;;;;;;;:::i;:::-;;-1:-1:-1;;1782:32167:60;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;3911:402;;1782:32167;;;;;;;;;;;:::i;:::-;3599:19:66;3699:10:60;3599:19:66;:::i;:::-;1782:32167:60;;;;;;;:::i;:::-;3699:10;1782:32167;;;4005:286;;1782:32167;;;;4005:286;;1782:32167;;;;4005:286;;1782:32167;;;;:::i;:::-;;4005:286;;1782:32167;;;3911:402;;;;1782:32167;3911:402;;;1782:32167;3911:402;;;:::i;:::-;1782:32167;;3876:455;;;;1782:32167;3876:455;;1782:32167;;3876:455;;1782:32167;;;;;;:::i;:::-;;;;;33580:24;1782:32167;;;:::i;:::-;1083:103:53;;:::i;:::-;436:67:72;;:::i;:::-;33580:24:60;:::i;:::-;1782:32167;551:66:53;3051:52:55;;;;1782:32167:60;;;;;;;:::i;:::-;;;;;-1:-1:-1;;1782:32167:60;;;;;;4704:12:66;2295:53:55;-1:-1:-1;;;;;1782:32167:60;;;;;;;;;;;;33915:25;1782:32167;;;:::i;:::-;1083:103:53;;:::i;:::-;436:67:72;;:::i;:::-;33915:25:60;:::i;1782:32167::-;;;;;-1:-1:-1;;1782:32167:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;1782:32167:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1782:32167:60;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1782:32167:60;;-1:-1:-1;1782:32167:60;;-1:-1:-1;1782:32167:60;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1782:32167:60;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;3599:19:66;1782:32167:60;;;;;;:::i;:::-;3599:19:66;;;;:::i;:::-;32579:13:60;1782:32167;32612:3;1782:32167;;32594:16;;;;;32631:8;1782:32167;;32631:8;1782:32167;32631:8;;;:::i;:::-;;:20;1782:32167;;32579:13;;32594:16;;32767:415;;32594:16;1782:32167;;32594:16;1782:32167;32594:16;1782:32167;;;;;;:::i;:::-;32866:294;;;1782:32167;;;32767:415;;;;1782:32167;32767:415;;;1782:32167;32767:415;;;:::i;1782:32167::-;;-1:-1:-1;;1782:32167:60;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;2960:400;;1782:32167;;;;;;;;;;;:::i;:::-;;3053:285;;1782:32167;;;2960:400;;;;1782:32167;2960:400;;;1782:32167;2960:400;;;:::i;1782:32167::-;;;;;-1:-1:-1;;1782:32167:60;;;;;;;;-1:-1:-1;;;;;4253:8:65;1782:32167:60;;;;;;-1:-1:-1;;1782:32167:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;1782:32167:60;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;1083:103:53;;;;;:::i;:::-;1782:32167:60;;;;;;1500:6:43;1496:65;;1782:32167:60;5670:22:65;1782:32167:60;;;;;5670:22:65;;;;1782:32167:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7088:860:65;;5650:1371;1782:32167:60;8105:22:65;3051:52:55;;1782:32167:60;551:66:53;3051:52:55;8105:22:65;:::i;7088:860::-;-1:-1:-1;;;;;7878:8:65;;;;1782:32167:60;7878:59:65;;;;1782:32167:60;;7878:59:65;1782:32167:60;7878:59:65;;7894:10;1782:32167:60;7878:59:65;;1782:32167:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1782:32167:60;;;;;;-1:-1:-1;;;;;1782:32167:60;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;1782:32167:60;;;;;;;;;;;;;;;;;;;;;;;;;7878:59:65;;:8;;-1:-1:-1;;;;;7878:8:65;1782:32167:60;7878:59:65;;;;;;;1782:32167:60;7878:59:65;8105:22;7878:59;;;1782:32167:60;7088:860:65;;;;;;;;7878:59;;;;:::i;:::-;;;;1782:32167:60;;;;;;;-1:-1:-1;;;;;1782:32167:60;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;1782:32167:60;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;5694:3:65;1782:32167:60;5738:19:65;;;;;:::i;:::-;1782:32167:60;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;8585:180:65;;;;;1782:32167:60;;8585:180:65;;;;;;1782:32167:60;8585:180:65;1782:32167:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1782:32167:60;;5942:338:65;;;;1782:32167:60;-1:-1:-1;;;;;1782:32167:60;;;;;;;;;;;;5942:338:65;;;;;1782:32167:60;5942:338:65;;1782:32167:60;;5942:338:65;;1782:32167:60;6055:4:65;1782:32167:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5942:338:65;;;;;;5694:3;-1:-1:-1;5922:1089:65;;6407:604;;:::i;:::-;1782:32167:60;-1:-1:-1;;;;;1782:32167:60;;;;;-1:-1:-1;;;;;1782:32167:60;;;;;;;;6680:75:65;;;;1782:32167:60;6680:75:65;;1782:32167:60;6680:75:65;;1782:32167:60;6055:4:65;1782:32167:60;;;;6680:75:65;;;;;;;1782:32167:60;6680:75:65;;;5922:1089;1782:32167:60;;;;6680:100:65;6655:342;;5922:1089;;1782:32167:60;5922:1089:65;;1782:32167:60;5655:13:65;;6655:342;1782:32167:60;;1881:21:45;:17;;2008:160;;;;;1877:362;2205:23;1782:32167:60;2205:23:45;1782:32167:60;;2205:23:45;6680:75:65;;;;;;;;;;;;;;;;;:::i;:::-;;;1782:32167:60;;;;;;;6680:75:65;;;;;;;5922:1089;;;1782:32167:60;5922:1089:65;;;5942:338;;;;:::i;:::-;;;;1496:65:43;1529:21;1782:32167:60;1529:21:43;1782:32167:60;;1529:21:43;1782:32167:60;;;;;-1:-1:-1;;1782:32167:60;;;;;;;;-1:-1:-1;;;;;4129:5:65;1782:32167:60;;;;;;;;;;;:::i;:::-;1083:103:53;;:::i;:::-;436:67:72;;:::i;:::-;4769:16:60;1782:32167;4706:24;;;:::i;1782:32167::-;-1:-1:-1;;1782:32167:60;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;1782:32167:60;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;-1:-1:-1;;;;;1782:32167:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;;1782:32167:60;;;;;;;;;;;;;;;;;-1:-1:-1;1782:32167:60;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;1782:32167:60;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;1782:32167:60;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;1782:32167:60;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1782:32167:60;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;1782:32167:60;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;1782:32167:60;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;1782:32167:60;;;;;;:::o;:::-;;;;;;-1:-1:-1;;;;;1782:32167:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1782:32167:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1782:32167:60;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1782:32167:60;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;1782:32167:60;;;;;;;;;;;;;;;;1820:17:66;1782:32167:60;;1820:17:66;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1820:17:66;;1782:32167:60;1820:17:66;;;1782:32167:60;1820:17:66;;;;;;;;;;1782:32167:60;;;;;;;;1820:17:66;;1782:32167:60;1820:17:66;;;;;;1782:32167:60;;1820:17:66;;;;;;;;;;;;;;;;;;;;;;;;;1782:32167:60;1820:17:66;;;;1782:32167:60;;1820:17:66;;;1782:32167:60;1820:17:66;;;;-1:-1:-1;;1820:17:66;;;;;;;;:::i;:::-;;;;;;;;1782:32167:60;1820:17:66;;;;;;;;;;;1782:32167:60;:::i;:::-;;;1820:17:66;;;;;;;;;;3191:591:65;;;3259:23;3271:10;3259:23;:::i;:::-;12307:26;;2806:53:55;;;3385:100:65;;3578:4;3051:52:55;3578:4:65;3051:52:55;;1782:32167:60;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1782:32167:60;;;:::i;:::-;;-1:-1:-1;1782:32167:60;;;;;;8188:13:65;;-1:-1:-1;8203:15:65;;;;;;3593:1;;;;;-1:-1:-1;3768:6:65;3593:1;3051:52:55;;4704:12:66;2295:53:55;;4282:82:66;;;8183:132:65;3768:6;;:::i;:::-;3191:591::o;4282:82:66:-;-1:-1:-1;3051:52:55;;4282:82:66;;;8220:3:65;8296:7;4297:55:106;-1:-1:-1;8296:7:65;1782:32167:60;8296:7:65;;;;;;:::i;1782:32167:60:-;;4255:25:106;;;;8289:4:65;4255:25:106;;;;:::i;:::-;8289:4:65;;4297:55:106;:::i;:::-;8239:65:65;;;;:::i;:::-;;;;;;:::i;:::-;;1782:32167:60;8188:13:65;;1782:32167:60;;;;;;;;;;;;;3385:100:65;3444:30;-1:-1:-1;3444:30:65;;-1:-1:-1;3444:30:65;1782:32167:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;:::o;1192:349:53:-;551:66;2295:53:55;;1316:93:53;;1529:4;3051:52:55;;1192:349:53:o;509:165:72:-;-1:-1:-1;;;;;586:6:72;1782:32167:60;564:10:72;:29;560:108;;509:165::o;560:108::-;616:41;;;564:10;616:41;1782:32167:60;;616:41:72;;1782:32167:60;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;1782:32167:60;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;4799:1054;5170:15;;;1782:32167;5152:15;:33;5148:85;;6036:12;6022:34;6036:12;;;;;;:::i;:::-;6022:34;;;:::i;:::-;6072:13;-1:-1:-1;6112:3:60;6091:12;6036;;;6091;;:::i;:::-;6087:23;;;;;;;1782:32167;6036:12;6167:15;:12;6036;;;6167;;:::i;:::-;1782:32167;;;6167:15;:::i;:::-;1782:32167;:::i;:::-;6429:18;5170:15;6429:18;;1782:32167;;-1:-1:-1;;;;;1782:32167:60;;;6513:10;6036:12;6513:10;;;1782:32167;;1820:17:66;;;6036:12:60;1820:17:66;6513:13:60;5170:15;6513:22;1782:32167;;;;6513:68;;6112:3;6509:776;;;6763:16;6716:13;;;:::i;:::-;6763:16;;;;;;;:::i;:::-;;;:::i;:::-;-1:-1:-1;7342:3:60;6036:12;6513:10;;7323;1782:32167;7319:21;;;;;1782:32167;;:::i;:::-;6036:12;6513:10;;7445;1782:32167;-1:-1:-1;;1782:32167:60;;;;;;;7440:26;;7415:21;6036:12;7415:21;;1782:32167;7511:6;;1782:32167;;7638:163;1782:32167;;;7702:17;;;1782:32167;7638:163;;7846:13;6513:10;6036:12;6513:10;;7846;:13;:::i;:::-;;5170:15;7882:13;;1782:32167;7846:13;;7882;1782:32167;5170:15;;7945:553;-1:-1:-1;;;;;1782:32167:60;;;8122:149;-1:-1:-1;;;;;1782:32167:60;;8122:33;;:149;1782:32167;;;;8122:149;;5170:15;1782:32167;;;;;:::i;:::-;-1:-1:-1;1782:32167:60;;;;;:::i;:::-;6036:12;8003:473;;1782:32167;5170:15;8003:473;;1782:32167;8003:473;;;;;;;;1782:32167;8003:473;;;1782:32167;5170:15;1782:32167;7945:553;;;;1782:32167;7945:553;;;;;;:::i;:::-;;:6;-1:-1:-1;;;;;;7945:6:60;1782:32167;7945:553;;;;;;;-1:-1:-1;7945:553:60;;;8122:149;-1:-1:-1;;6036:12:60;7415:21;1782:32167;;6036:12;;8787:29;-1:-1:-1;;;;;6036:12:60;8978:9;8787:29;1782:32167;8787:29;;;;;;:::i;:::-;1782:32167;8878:13;8842:51;1782:32167;;;;2875:28:61;8842:51:60;:::i;:::-;;1782:32167;;3474:36:61;8978:9:60;:::i;:::-;1782:32167;7304:13;;8521:801;6036:12;9286:13;1782:32167;9121:29;;-1:-1:-1;;;;;;1782:32167:60;;-1:-1:-1;1782:32167:60;;8521:801;;7945:553;6036:12;7945:553;;;;;;;;;-1:-1:-1;7945:553:60;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;8122:149;-1:-1:-1;8122:149:60;;;7878:9220;1782:32167;;-1:-1:-1;;;;;1782:32167:60;;;;;;-1:-1:-1;;;;;1782:32167:60;;9350:33;9346:7752;9350:33;;;-1:-1:-1;;1782:32167:60;;;;-1:-1:-1;9803:22:60;;9857:21;;;;;:55;;;9799:1644;9853:914;;9799:1644;-1:-1:-1;;;;;3211:35:61;;;1782:32167:60;3211:35:61;12242:463:60;3211:35:61;;-1:-1:-1;3211:35:61;;;1782:32167:60;;2870:125:54;;;;6036:12:60;2870:125:54;5170:15:60;2870:125:54;;2295:53:55;10885:196:60;;9799:1644;;;;;1782:32167;11690:191;1782:32167;;;;6036:12;11784:13;;1782:32167;;;;;11823:36;:17;;;;;;:36;;;11690:191;:::i;:::-;1782:32167;;;;;12641:15;;;;;;;;;:::i;:::-;1782:32167;;;5170:15;1782:32167;;;;;:::i;:::-;;;12401:4;6036:12;12290:393;;1782:32167;5170:15;12290:393;;1782:32167;12290:393;;;1782:32167;12290:393;;1782:32167;;;;:::i;:::-;12290:393;;;1782:32167;5170:15;1782:32167;12242:463;;;;1782:32167;12242:463;;1782:32167;12242:463;;;:::i;:::-;;:6;;-1:-1:-1;;;;;12242:6:60;1782:32167;12242:463;;;;;;;-1:-1:-1;;12242:463:60;;11823:36;-1:-1:-1;6036:12:60;7415:21;1782:32167;;6036:12;;13014:22;13198;13014;-1:-1:-1;;;;;1782:32167:60;13014:22;;;13198;13014;;;:::i;:::-;1782:32167;12994:42;;;;:::i;:::-;1782:32167;13062:51;1782:32167;;;;2875:28:61;13062:51:60;:::i;:::-;;1782:32167;;13198:22;;:::i;:::-;1782:32167;3474:36:61;;13198:22:60;:::i;:::-;7878:9220;;12728:840;13374:22;;1782:32167;13374:22;;;;;-1:-1:-1;;;;;13374:22:60;;:::i;:::-;1782:32167;;;;12728:840;7878:9220;;12242:463;6036:12;12242:463;;;;;;;-1:-1:-1;12242:463:60;;;;;;:::i;:::-;;;;;:::i;:::-;-1:-1:-1;12242:463:60;;;-1:-1:-1;12242:463:60;;11823:36;;11690:191;:::i;10885:196::-;11036:17;;;:::i;:::-;10885:196;;;;;9853:914;10533:13;;;;;;;:::i;:::-;10627:29;;;;:::i;:::-;-1:-1:-1;;;;;10478:8:60;1782:32167;10478:262;;;;5170:15;1782:32167;;10478:262;;-1:-1:-1;;;;;1782:32167:60;;;10478:262;;;1782:32167;10588:4;1782:32167;;;;;;;;;;;;;;;;;;-1:-1:-1;1782:32167:60;;;;;10478:262;:8;;-1:-1:-1;;;;;10478:8:60;1782:32167;10478:262;;;;;;;1782:32167;10478:262;12242:463;10478:262;-1:-1:-1;;;;;10478:262:60;-1:-1:-1;10478:262:60;;;9853:914;;;;;;;;;;;;;10478:262;;;;:::i;:::-;;;;9857:55;9882:13;;;;:::i;:::-;-1:-1:-1;;;;;1782:32167:60;9907:4;9882:30;;9857:55;;9799:1644;11354:6;-1:-1:-1;;;;;11354:6:60;1782:32167;;-1:-1:-1;;;;;1782:32167:60;;;11354:66;;;;;;5170:15;1782:32167;;11354:66;;-1:-1:-1;;;;;1782:32167:60;;;;11354:66;;;1782:32167;11395:4;1782:32167;;;;;;;;;;-1:-1:-1;;1782:32167:60;;;;;;-1:-1:-1;;11354:66:60;;;;;;;1782:32167;11354:66;12242:463;11354:66;-1:-1:-1;;;;;11354:66:60;-1:-1:-1;11354:66:60;;;9799:1644;;;;11354:66;;;;:::i;:::-;;;;9346:7752;-1:-1:-1;;;;;6036:12:60;13604:13;;;;;1782:32167;;13596:35;;;;;13592:3506;13596:35;;;1782:32167;;;14008:482;1782:32167;;;;13786:170;-1:-1:-1;1782:32167:60;;-1:-1:-1;;;;;1782:32167:60;;;;;13786:170;:::i;:::-;1782:32167;;;;;;7415:21;6036:12;7415:21;;1782:32167;;;14151:55;;;;14175:13;;;:::i;:::-;14151:55;;14426:15;;;;;;;;:::i;:::-;1782:32167;;;5170:15;1782:32167;;;;;:::i;:::-;;;;6036:12;14053:415;;1782:32167;5170:15;14053:415;;1782:32167;14053:415;;;1782:32167;14053:415;;1782:32167;;;;:::i;:::-;14053:415;;;1782:32167;5170:15;1782:32167;14008:482;;;;1782:32167;14008:482;;;;;;:::i;:::-;;:6;;-1:-1:-1;;;;;14008:6:60;1782:32167;14008:482;;;;;;;-1:-1:-1;;14008:482:60;;14151:55;-1:-1:-1;6036:12:60;7415:21;1782:32167;;6036:12;;14908:32;-1:-1:-1;;;;;6036:12:60;15095;14908:32;1782:32167;14908:32;;;;;;:::i;:::-;1782:32167;14966:51;13604:13;;;;1782:32167;;2875:28:61;14966:51:60;:::i;:::-;;13604:13;1782:32167;;4084:27:61;15095:12:60;:::i;14513:1118::-;6036:12;13604:13;;;1782:32167;;;5170:15;1782:32167;;15562:46;;-1:-1:-1;;;;;1782:32167:60;;;14008:482;15562:46;;1782:32167;;;;;;;;;-1:-1:-1;1782:32167:60;;;;-1:-1:-1;1782:32167:60;;;;;15562:46;14008:6;-1:-1:-1;;;;;;14008:6:60;1782:32167;15562:46;;;;;;;;14513:1118;;1782:32167;14513:1118;7878:9220;;15562:46;6036:12;15562:46;;;;;;;;;;;;:::i;:::-;;;1782:32167;;;;15562:46;;;;;;;;14008:482;6036:12;14008:482;;;;;;;-1:-1:-1;14008:482:60;;;;;;:::i;:::-;;;;;:::i;:::-;-1:-1:-1;14008:482:60;;;-1:-1:-1;14008:482:60;;14151:55;14008:6;;1782:32167;14151:55;;;13592:3506;-1:-1:-1;;;;;15783:473:60;16192:15;1782:32167;16192:15;;;;;;;;;;;:::i;:::-;1782:32167;;;5170:15;1782:32167;;;;;:::i;:::-;-1:-1:-1;1782:32167:60;;6036:12;15820:414;;1782:32167;;5170:15;15820:414;;1782:32167;15820:414;;;;;;;1782:32167;15820:414;;1782:32167;15820:414;;;1782:32167;;;;:::i;:::-;15820:414;;;1782:32167;5170:15;1782:32167;15783:473;;;;1782:32167;15783:473;;;;;;:::i;:::-;;:6;-1:-1:-1;;;;;;15783:6:60;1782:32167;15783:473;;;;;;;-1:-1:-1;15783:473:60;;;13592:3506;-1:-1:-1;;6036:12:60;7415:21;1782:32167;;6036:12;;16545:29;-1:-1:-1;;;;;6036:12:60;16736:9;16545:29;1782:32167;16545:29;;;;;;:::i;:::-;1782:32167;16600:51;13604:13;;;;1782:32167;;2875:28:61;16600:51:60;:::i;:::-;;13604:13;1782:32167;;3474:36:61;16736:9:60;:::i;15783:473::-;6036:12;15783:473;;;;;;;;;-1:-1:-1;15783:473:60;;;;;;:::i;:::-;;;;;;;;;7638:163;-1:-1:-1;7638:163:60;;;7319:21;-1:-1:-1;7319:21:60;;-1:-1:-1;7319:21:60;;-1:-1:-1;;1782:32167:60;;6072:13;;6509:776;7130:48;2613:27:61;;7130:48:60;:::i;:::-;;7252:17;3211:35:61;;;7252:17:60;:::i;:::-;6509:776;;6513:68;859:9:41;;:23;1782:32167:60;6513:68;;6087:23;;;5481:32;2875:28:61;5481:32:60;:::i;:::-;1782:32167;5536:31;1782:32167;;5536:31;:::i;:::-;4084:27:61;;3474:36;;5582:13:60;-1:-1:-1;5619:3:60;1782:32167;;5597:20;;;;;1782:32167;;-1:-1:-1;;;;;5705:12:60;;;;;:::i;:::-;1782:32167;;-1:-1:-1;2870:125:54;;6036:12:60;2870:125:54;5670:108:60;5170:15;-1:-1:-1;2870:125:54;2295:53:55;5765:12:60;;;;;:::i;:::-;1782:32167;;-1:-1:-1;2870:125:54;;6036:12:60;2870:125:54;5170:15:60;-1:-1:-1;2870:125:54;2295:53:55;5670:108:60;;:::i;:::-;5638:140;;;;:::i;:::-;1782:32167;5820:12;;;;:::i;:::-;1782:32167;;-1:-1:-1;2870:125:54;;6036:12:60;2870:125:54;-1:-1:-1;5170:15:60;2870:125:54;;3051:52:55;1782:32167:60;5582:13;;5597:20;;;;;;;;4799:1054::o;5148:85::-;5208:14;-1:-1:-1;5208:14:60;;-1:-1:-1;5208:14:60;1782:32167;;-1:-1:-1;;1782:32167:60;;;;;5475:1:61;1782:32167:60;;;:::o;:::-;;;;;;-1:-1:-1;;1782:32167:60;;:::o;4643:1836:61:-;;2875:28;;2295:53:55;;2613:27:61;5461:15;2295:53:55;;5461:15:61;:::i;:::-;3211:35;;5438:470;5479:6;-1:-1:-1;5479:6:61;;;;;5941:16;;;;;;:::i;:::-;3474:36;;5918:481;5960:6;-1:-1:-1;5960:6:61;;;;;6465;;;;;;;:::i;5968:3::-;;1782:32167:60;;-1:-1:-1;1782:32167:60;6348:40:61;1782:32167:60;-1:-1:-1;1782:32167:60;;;;;2295:53:55;2870:125:54;;;;;;;;;;6154:9:61;2870:125:54;;;;;2295:53:55;1782:32167:60;-1:-1:-1;;;;;1782:32167:60;;6154:9:61;;:::i;:::-;2870:125:54;;;;;;3051:52:55;6348:40:61;;:::i;:::-;;5968:3;:::i;:::-;5923:35;;5487:3;;1782:32167:60;;-1:-1:-1;1782:32167:60;5859:38:61;1782:32167:60;-1:-1:-1;1782:32167:60;;;;;;;2295:53:55;2870:125:54;;;;;;;5667:9:61;2870:125:54;;;;;;2295:53:55;1782:32167:60;-1:-1:-1;;;;;1782:32167:60;;5667:9:61;;:::i;5487:3::-;5443:34;;1782:32167:60;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;1782:32167:60;;;;:::o;:::-;;;:::o;:::-;;;;;;;;;;:::o;3694:351:66:-;;1782:32167:60;4704:12:66;;-1:-1:-1;;;;;2295:53:55;;1782:32167:60;3919:25:66;3915:124;;3694:351;;:::o;3915:124::-;3051:52:55;;;;;4024:4:66;3915:124;3694:351::o;17521:1044:60:-;;17891:15;;;1782:32167;17873:15;:33;17869:85;;18924:34;18938:12;;;;;;:::i;18924:34::-;18974:13;-1:-1:-1;19014:3:60;18993:12;18938;;;18993;;:::i;:::-;18989:23;;;;;;;1782:32167;18938:12;19070:15;:12;18938;;;19070;;:::i;1782:32167::-;19324:19;;;1782:32167;;19859:49;-1:-1:-1;;;;;1782:32167:60;;;2613:27:61;19859:49:60;:::i;:::-;;18938:12;20160:10;;;1782:32167;-1:-1:-1;;1782:32167:60;;;;;;;20184:6;-1:-1:-1;20184:6:60;;;;;19014:3;;;1782:32167;;18974:13;;20192:3;20242:22;20160:10;18938:12;20160:10;;20242;:22;:::i;:::-;;1782:32167;;:::i;:::-;20357:6;;;18938:12;20332:21;;1782:32167;18938:12;20160:10;;20422;1782:32167;;-1:-1:-1;;1782:32167:60;;;;;-1:-1:-1;;1782:32167:60;20408:35;;1782:32167;;;20705:510;;20192:3;18938:12;20332:21;;1782:32167;;18938:12;;17891:15;21474:16;;1782:32167;-1:-1:-1;;;;;1782:32167:60;;;21233:748;;17891:15;22003:13;;1782:32167;;17891:15;;20332:21;;-1:-1:-1;;;;;19324:19:60;20332:21;18938:12;22398:558;20332:21;;1782:32167;;;22044:67;;;21999:8973;22040:311;;21999:8973;1782:32167;;;-1:-1:-1;;;;;1782:32167:60;;22576:33;;1782:32167;;;22576:149;;17891:15;1782:32167;;;;;:::i;:::-;;;;;;;:::i;:::-;18938:12;22456:478;;1782:32167;17891:15;22456:478;;1782:32167;22456:478;;;;1782:32167;22456:478;;;1782:32167;17891:15;1782:32167;22398:558;;;;1782:32167;22398:558;;;;;;:::i;:::-;;:6;-1:-1:-1;;;;;;22398:6:60;1782:32167;22398:558;;;;;;;;;;;-1:-1:-1;;22398:558:60;;22576:149;-1:-1:-1;18938:12:60;20332:21;1782:32167;;18938:12;;23745:8;23032:27;;;20192:3;23032:27;;;23374;23032;;:::i;:::-;1782:32167;23242:49;-1:-1:-1;;;;;1782:32167:60;;2875:28:61;23242:49:60;:::i;:::-;;-1:-1:-1;;;;;23374:27:60;:16;17891:15;23374:16;;1782:32167;23374:27;:::i;:::-;1782:32167;;3474:36:61;23374:27:60;:::i;:::-;-1:-1:-1;;;;;1782:32167:60;;;4084:27:61;23745:8:60;:::i;:::-;20192:3;:::i;:::-;20142:40;;22979:882;23809:29;;;20192:3;23809:29;;;22979:882;20192:3;:::i;22398:558::-;18938:12;22398:558;;;;;19324:19;22398:558;19324:19;22398:558;;;;;;;:::i;:::-;-1:-1:-1;22398:558:60;;;-1:-1:-1;22398:558:60;;22576:149;-1:-1:-1;22576:149:60;;;22040:311;22311:16;22264:13;;;:::i;:::-;1782:32167;;22311:16;1782:32167;17891:15;1782:32167;;;;22293:16;;1782:32167;22311:16;;;:::i;:::-;22040:311;;22044:67;859:9:41;;:23;1782:32167:60;22044:67;;21999:8973;1782:32167;-1:-1:-1;;;;;1782:32167:60;;;;-1:-1:-1;;;;;1782:32167:60;;23889:33;23885:7087;23889:33;;;-1:-1:-1;18938:12:60;20332:21;;1782:32167;18938:12;;1782:32167;17891:15;1782:32167;24688:33;1782:32167;24688:33;;-1:-1:-1;;;;;1782:32167:60;;24688:33;;;1782:32167;18938:12;24688:6;1782:32167;24688:6;-1:-1:-1;;;;;24688:6:60;1782:32167;24688:33;;;;;;;-1:-1:-1;24688:33:60;;;24608:1046;24670:51;;1782:32167;-1:-1:-1;;;;;1782:32167:60;;;-1:-1:-1;;;;;24688:6:60;1782:32167;24747:64;;;;17891:15;1782:32167;;24747:64;;-1:-1:-1;;;;;1782:32167:60;;;24688:33;24747:64;;1782:32167;24788:4;1782:32167;;;;;;;;;;;-1:-1:-1;1782:32167:60;;;;;24747:64;24688:6;;-1:-1:-1;;;;;24688:6:60;1782:32167;24747:64;;;;;;;26143:467;24747:64;-1:-1:-1;24747:64:60;;;24608:1046;;;1782:32167;-1:-1:-1;;;;;25715:173:60;1782:32167;;;;;25809:13;18938:12;25809:13;;1782:32167;;25715:173;;:::i;:::-;1782:32167;;;;26546:15;;26464:42;26546:15;;;;;;;;:::i;:::-;1782:32167;;;17891:15;1782:32167;;;;;:::i;:::-;;;26302:4;18938:12;26191:397;;1782:32167;26191:397;17891:15;26191:397;;1782:32167;19324:19;26191:397;;1782:32167;26191:397;;1782:32167;;;;:::i;26143:467::-;;:6;;-1:-1:-1;;;;;26143:6:60;1782:32167;26143:467;;;;;;;-1:-1:-1;;26143:467:60;;24608:1046;-1:-1:-1;18938:12:60;20332:21;1782:32167;;18938:12;;26798:30;;;20192:3;26798:30;;;;;;:::i;:::-;1782:32167;26904:11;1782:32167;-1:-1:-1;;;;;1782:32167:60;;4084:27:61;26904:11:60;:::i;:::-;27021:29;;;:63;;;26633:1183;27017:205;;26633:1183;;;;20192:3;:::i;27017:205::-;27165:29;;27149:13;;;;:::i;:::-;27165:29;;:::i;:::-;;;:::i;:::-;27017:205;;;;;27021:63;26302:4;;-1:-1:-1;;;;;27054:13:60;;;:::i;:::-;1782:32167;27054:30;;27021:63;;26633:1183;27357:32;;;;27499:29;;;;27495:299;;26633:1183;;;;20192:3;26633:1183;20192:3;:::i;27495:299::-;27583:29;;18938:12;27583:29;27727:40;27583:29;;:::i;:::-;26143:6;27684:12;26143:6;-1:-1:-1;;;;;26143:6:60;1782:32167;27684:12;;:::i;:::-;17891:15;1782:32167;27727:40;;;;;1782:32167;27727:40;;1782:32167;27727:40;;1782:32167;;;;;;-1:-1:-1;;;;;1782:32167:60;;;;;;;;;;27727:40;;26143:6;-1:-1:-1;;;;;;26143:6:60;1782:32167;27727:40;;;;;;;;27495:299;;;;;27727:40;18938:12;27727:40;;;;;;;;;;;;:::i;:::-;;;1782:32167;;;;27727:40;;;;;;;;26143:467;18938:12;26143:467;;;;;;;-1:-1:-1;26143:467:60;;;;;;:::i;:::-;-1:-1:-1;26143:467:60;;;;-1:-1:-1;26143:467:60;;24747:64;;;;:::i;:::-;;;;24688:33;;;;18938:12;24688:33;;18938:12;24688:33;;;;;;18938:12;24688:33;;;:::i;:::-;;;1782:32167;;;;;24688:33;;;;;;;-1:-1:-1;24688:33:60;;24608:1046;24844:13;;;;;:::i;:::-;-1:-1:-1;;;;;24869:4:60;1782:32167;;24844:30;24840:814;;24608:1046;-1:-1:-1;26143:467:60;24608:1046;;;24840:814;-1:-1:-1;;;;;25391:8:60;1782:32167;25442:13;;;;:::i;:::-;25528:27;;;:::i;:::-;25391:240;;;;;;17891:15;1782:32167;;25391:240;;-1:-1:-1;;;;;1782:32167:60;;;25391:240;;;1782:32167;24869:4;1782:32167;;;;;;;;;;;;;;;;;;-1:-1:-1;;1782:32167:60;;;;;;-1:-1:-1;;25391:240:60;;;;;;;26143:467;25391:240;-1:-1:-1;25391:240:60;;;24840:814;;;;;;;25391:240;;;;:::i;:::-;;;;23885:7087;-1:-1:-1;;;;;18938:12:60;27852:13;;;;;1782:32167;;27844:35;;;;27840:3132;27844:35;;;1782:32167;;;28366:500;28039:168;-1:-1:-1;1782:32167:60;;-1:-1:-1;;;;;1782:32167:60;;;28039:168;:::i;:::-;1782:32167;;;;-1:-1:-1;;;;;1782:32167:60;;;;;;;;;28509:56;;;;28802:15;28534:13;;;:::i;:::-;28509:56;;28802:15;;;;;:::i;:::-;1782:32167;;;17891:15;1782:32167;;;;;:::i;:::-;;;;18938:12;28411:433;;1782:32167;17891:15;28411:433;;1782:32167;28411:433;19324:19;28411:433;;1782:32167;28723:39;28802:15;28411:433;;1782:32167;;;;:::i;:::-;28411:433;;;1782:32167;17891:15;1782:32167;28366:500;;;;1782:32167;28366:500;;;;;;:::i;:::-;;:6;;-1:-1:-1;;;;;28366:6:60;1782:32167;28366:500;;;;;;;-1:-1:-1;;28366:500:60;;28509:56;-1:-1:-1;18938:12:60;20332:21;;1782:32167;20332:21;;;;1782:32167;18938:12;;29074:25;;-1:-1:-1;;;;;29074:25:60;29055:44;29181:25;29074;;;;;;;;29181;29074;;:::i;:::-;1782:32167;29055:44;;:::i;:::-;1782:32167;29181:25;:::i;:::-;1782:32167;;;3211:35:61;29181:25:60;:::i;:::-;1782:32167;;29466:22;;20192:3;27852:13;;-1:-1:-1;;;;;18938:12:60;29765:18;27852:13;;1782:32167;;3474:36:61;29765:18:60;:::i;29462:561::-;1782:32167;17891:15;1782:32167;;29948:52;;-1:-1:-1;;;;;1782:32167:60;;;28366:500;29948:52;;1782:32167;;;;;;;;18938:12;1782:32167;;;;;29948:52;28366:6;-1:-1:-1;;;;;;28366:6:60;1782:32167;29948:52;;;;;;;;29462:561;;20192:3;29462:561;20192:3;:::i;29948:52::-;18938:12;29948:52;;;;;;;;;;;;:::i;:::-;;;1782:32167;;;;29948:52;;;;;;;;28889:442;29283:25;;;;;;;;;;;:::i;:::-;1782:32167;28889:442;;;;;28366:500;;;;;;-1:-1:-1;28366:500:60;;;;;;:::i;:::-;;;;;28509:56;28802:15;28366:6;;1782:32167;28509:56;;;27840:3132;30175:478;30589:15;;;1782:32167;30589:15;19324:19;30589:15;;;;;;;;;;;;;:::i;:::-;1782:32167;;;17891:15;1782:32167;;;;;:::i;:::-;;;;18938:12;30212:419;;1782:32167;-1:-1:-1;;;;;1782:32167:60;;17891:15;30212:419;;1782:32167;30212:419;;;1782:32167;30212:419;;1782:32167;30212:419;;;1782:32167;;;;:::i;:::-;30212:419;;;1782:32167;17891:15;1782:32167;30175:478;;;;1782:32167;30175:478;;;;;;:::i;:::-;;:6;-1:-1:-1;;;;;;30175:6:60;1782:32167;30175:478;;;;;;;;;;;-1:-1:-1;;30175:478:60;;27840:3132;-1:-1:-1;18938:12:60;20332:21;1782:32167;;18938:12;;30838:8;30729:27;;;20192:3;30729:27;;;-1:-1:-1;;;;;30729:27:60;;:::i;:::-;1782:32167;;3211:35:61;30838:8:60;:::i;30175:478::-;18938:12;30175:478;;;;;19324:19;30175:478;19324:19;30175:478;;;;;;;:::i;:::-;-1:-1:-1;30175:478:60;;;-1:-1:-1;30175:478:60;;21233:748;1782:32167;-1:-1:-1;;;;;18938:12:60;21927:26;20160:10;;;21927;21946:5;;;:::i;:::-;21927:26;;:::i;:::-;;:35;1782:32167;;21233:748;;;20705:510;21177:18;21081:13;-1:-1:-1;;;;;18938:12:60;21081:13;;21045:51;1782:32167;;;;2875:28:61;21045:51:60;:::i;21177:18::-;20705:510;;18989:23;;;18198:31;2613:27:61;18198:31:60;:::i;:::-;1782:32167;18287:30;1782:32167;;18287:30;:::i;:::-;4084:27:61;;3211:35;;18332:13:60;-1:-1:-1;18368:3:60;1782:32167;;18347:19;;;;;1782:32167;;-1:-1:-1;;;;;18436:11:60;;;;;:::i;:::-;1782:32167;;-1:-1:-1;2870:125:54;;18938:12:60;2870:125:54;18402:89:60;17891:15;-1:-1:-1;2870:125:54;2295:53:55;18479:11:60;;;;;:::i;18402:89::-;18387:104;;;;:::i;:::-;1782:32167;18533:11;;;;:::i;:::-;1782:32167;;-1:-1:-1;2870:125:54;;18938:12:60;2870:125:54;-1:-1:-1;17891:15:60;2870:125:54;;3051:52:55;1782:32167:60;18332:13;;9544:584:65;9780:21;9815:11;;9811:48;;12307:26;2295:53:55;10009:69:65;;-1:-1:-1;;;;;10114:6:65;1782:32167:60;;10114:6:65;:::i;10009:69::-;10061:7;;:::o;1782:32167:60:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;1782:32167:60;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;-1:-1:-1;1782:32167:60;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;1782:32167:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;1782:32167:60;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1782:32167:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1782:32167:60;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;1782:32167:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1782:32167:60;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;1782:32167:60;;;;;;;;;;;;;;;;;;;;;;:::o;7103:296:56:-;;2295:53:55;;1782:32167:60;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;-1:-1:-1;;1782:32167:60;;;;;;;;7250:30:56;7296:13;-1:-1:-1;7311:7:56;;;;;;7103:296;;;;;:::o;7320:3::-;1782:32167:60;;;-1:-1:-1;1782:32167:60;;;-1:-1:-1;1782:32167:60;;2295:53:55;-1:-1:-1;;;;;7339:43:56;;;;:::i;:::-;1782:32167:60;;;;;7296:13:56;;10829:553:65;;;11006:29;;;10829:553;11002:374;;;1074:21:78;;;;:38;1070:93;;-1:-1:-1;;;;;11051:5:65;;1782:32167:60;1207:39:78;;;;;;1782:32167:60;;1207:39:78;1782:32167:60;1207:39:78;;;;;;;;;;;;;;;;;;11002:374:65;11074:6;1782:32167:60;1382:34:78;11074:6:65;;;1782:32167:60;1321:14:78;;;;;;:::i;:::-;1782:32167:60;;;1382:34:78;;;;;1782:32167:60;1382:34:78;;1207:39;1382:34;;1782:32167:60;;;;;1382:34:78;;;;;;;;;;11002:374:65;10829:553::o;1382:34:78:-;;;;;;;;;;;;;;:::i;:::-;;;1782:32167:60;;;;10829:553:65:o;1382:34:78:-;;;;;;1782:32167:60;;;;;;;;;;1207:39:78;1382:34;1207:39;;;;;:::i;:::-;1782:32167:60;1207:39:78;;;;;1070:93;1135:17;;;;;;11002:374:65;11137:1;;;11126:12;;11122:244;;11002:374;;;;;10829:553::o;11122:244::-;-1:-1:-1;;;;;11215:8:65;;;1782:32167:60;11253:6:65;;;1782:32167:60;11262:20:65;;;;:::i;:::-;11215:86;;;;;;1782:32167:60;;;11215:86:65;;-1:-1:-1;;;;;1782:32167:60;;;11215:86:65;;;1782:32167:60;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1782:32167:60;;;;;;-1:-1:-1;;11215:86:65;;;;;;;11319:32;11215:86;;;11122:244;1782:32167:60;;;11319:32:65;1782:32167:60;;;11319:32:65;;;;;;1782:32167:60;11319:32:65;;11215:86;11319:32;;1782:32167:60;;;;;;-1:-1:-1;;;;;1782:32167:60;;;;;;;;;;11319:32:65;;;;;;;;;;;;;11122:244;;;;;;11319:32;;;;;;;;;;;;;;:::i;:::-;;;1782:32167:60;;;;11319:32:65;;;;;;;;11215:86;11319:32;11215:86;;;;;:::i;:::-;11137:1;11215:86;;;11006:29;1782:32167:60;-1:-1:-1;;;;;11030:5:65;;1782:32167:60;;;;11019:16:65;11006:29;;2887:1758:56;7863:13;;;2870:125:54;;1782:32167:60;2870:125:54;;;;;;;1782:32167:60;2870:125:54;2295:53:55;3138:15:56;;;3134:1505;3138:15;;;-1:-1:-1;;1782:32167:60;;;;2295:53:55;;1782:32167:60;;;;3802:26:56;;;;3798:415;;3134:1505;3831:53:55;;;;;;;1782:32167:60;;;;;;;;;;3051:52:55;;;1782:32167:60;;;;;;;3051:52:55;1782:32167:60;2870:125:54;;1782:32167:60;2870:125:54;;;3051:52:55;7863:13:56;4574:11;:::o;3798:415::-;4255:5:47;4493;4255;;;:::i;:::-;1782:32167:60;;;;;;;;2295:53:55;4493:5:47;;;:::i;:::-;1782:32167:60;;;;;;;;;;;3051:52:55;1782:32167:60;2870:125:54;;;;;1782:32167:60;2870:125:54;3051:52:55;3798:415:56;;;;;;;3134:1505;4616:12;;;;;1782:32167:60;4616:12:56;:::o;11388:489:65:-;;;;;11515:1;11502:14;;;11498:51;;11632:30;;;11388:489;11628:243;;;1782:32167:60;-1:-1:-1;;;;;11714:6:65;;;1782:32167:60;1590:47:78;;;;;1782:32167:60;;;1590:47:78;;11515:1:65;11678:5;1782:32167:60;11678:5:65;;;;1782:32167:60;1590:47:78;;;;;1782:32167:60;1617:4:78;1782:32167:60;;;;;;;;;1590:47:78;;;;;;;;11628:243:65;1680:27:78;;;;;;;;1782:32167:60;;;;;1680:27:78;;;;1782:32167:60;1680:27:78;;;1590:47;1680:27;;1782:32167:60;1680:27:78;;;;;;;;11628:243:65;1782:32167:60;1774:12:78;1782:32167:60;;;;1774:12:78;:::i;1680:27::-;;;;;:::i;:::-;1782:32167:60;;1680:27:78;;;1782:32167:60;;;;1680:27:78;1782:32167:60;;;;;;;;;1680:27:78;1782:32167:60;;;1590:47:78;;;;;;:::i;:::-;11515:1:65;1590:47:78;;;;11628:243:65;11818:6;;;;;-1:-1:-1;;;;;11818:6:65;1782:32167:60;11818:42:65;;;;;1782:32167:60;;;11818:42:65;;-1:-1:-1;;;;;1782:32167:60;;;11818:42:65;;;1782:32167:60;;;;;;;;;;;;;-1:-1:-1;;1782:32167:60;;;;;;-1:-1:-1;;11818:42:65;;;;;;;;11628:243;11388:489::o;11818:42::-;;;;:::i;11632:30::-;1782:32167:60;-1:-1:-1;;;;;11657:5:65;;1782:32167:60;;;;11645:17:65;11632:30;;11498:51;11532:7;;;;;;:::o;1531:331:106:-;1616:21;;:30;1612:109;;1750:33;1782:32167:60;;;-1:-1:-1;;;;;1782:32167:60;;;1750:33:106;;;;:::i;:::-;;1797:8;1793:63;;1531:331::o;1793:63::-;1828:17;1750:33;1828:17;;1750:33;1828:17;1612:109;1669:41;;;1624:4;1669:41;1782:32167:60;;1669:41:106;;4625:582;;4797:8;;-1:-1:-1;1782:32167:60;;5874:21:106;:17;;6046:142;;;;;;4793:408;1782:32167:60;;5045:22:106;:49;;;4793:408;5041:119;;5173:17;;:::o;5041:119::-;-1:-1:-1;;;;;5121:24:106;;5066:1;5121:24;1782:32167:60;5121:24:106;1782:32167:60;;5066:1:106;5121:24;5045:49;5071:18;;;:23;5045:49;;2304:424:56;7863:13;;;2870:125:54;;1782:32167:60;2870:125:54;;;;;1782:32167:60;2870:125:54;2295:53:55;4814:30:56;2390:332;2870:125:54;;;3831:53:55;;1782:32167:60;;;;;2870:125:54;1782:32167:60;;;3051:52:55;7863:13:56;1782:32167:60;;;;;;;3051:52:55;;2295:53;2870:125:54;1782:32167:60;2870:125:54;;;;1782:32167:60;2870:125:54;3051:52:55;7863:13:56;2657:11;:::o;2390:332::-;2699:12;;;1782:32167:60;2699:12:56;:::o;3350:199:47:-;;-1:-1:-1;2870:125:54;;;3518:23:47;2870:125:54;-1:-1:-1;2870:125:54;2295:53:55;;;3518:23:47;:::i;:::-;3051:52:55;;3350:199:47:o;10408:415:65:-;;1782:32167:60;10408:415:65;;;;-1:-1:-1;;;;;1782:32167:60;;;;;;;;10667:52:65;;;;;1782:32167:60;10667:52:65;;1782:32167:60;10667:52:65;;;1782:32167:60;;;;;;10667:6:65;1782:32167:60;10667:52:65;;;;;;;-1:-1:-1;;;10667:52:65;;;10408:415;10641:78;;10778:38;10744:24;10641:78;10744:24;;:::i;:::-;10778:38;;;:::i;:::-;1782:32167:60;10408:415:65:o;10667:52::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;1782:32167:60;;;;;;;;;;10667:52:65;;;;;;;;;;;1782:32167:60;;;-1:-1:-1;1782:32167:60;;;;;7223:218:119;-1:-1:-1;;;;;7303:25:119;;;;7299:105;;1782:32167:60;7223:218:119;:::o;7299:105::-;7351:42;;;7382:3;7351:42;1782:32167:60;;;;7351:42:119;;3555:199:47;;-1:-1:-1;2870:125:54;;;3723:23:47;2870:125:54;-1:-1:-1;2870:125:54;2295:53:55;;;3723:23:47;:::i;1303:160:105:-;1782:32167:60;;1412:43:105;;;;;1782:32167:60;1412:43:105;;-1:-1:-1;;;;;1782:32167:60;;;1412:43:105;;;1782:32167:60;;;;;;1412:43:105;;1782:32167:60;;;;;;;;;;;;;3510:55:106;1782:32167:60;-1:-1:-1;1782:32167:60;;;;;;3462:31:106;;;;;;;;;:::i;:::-;3510:55;;;:::i;:::-;1782:32167:60;;4551:22:105;;;;:57;;;;1303:160;4547:135;;;;1303:160;:::o;4547:135::-;4631:40;-1:-1:-1;4631:40:105;;1782:32167:60;1412:43:105;-1:-1:-1;4631:40:105;4551:57;4578:30;;;;1412:43;4578:30;;;1782:32167:60;;;;1412:43:105;4578:30;1782:32167:60;;;;;;;;;4551:57:105;;;;4609:265:47;3831:53:55;-1:-1:-1;4792:15:47;4788:80;;4609:265::o;4788:80::-;4830:27;-1:-1:-1;4830:27:47;;-1:-1:-1;4830:27:47"},"methodIdentifiers":{"getPermit2()":"1bbf2e23","getSender()":"5e01eb5a","getWeth()":"107c279f","multicall(bytes[])":"ac9650d8","permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])":"19c6989f","querySwapExactIn((address,(address,address,bool)[],uint256,uint256)[],address,bytes)":"e3b5dff4","querySwapExactInHook((address,(address,(address,address,bool)[],uint256,uint256)[],uint256,bool,bytes))":"8a12a08c","querySwapExactOut((address,(address,address,bool)[],uint256,uint256)[],address,bytes)":"2950286e","querySwapExactOutHook((address,(address,(address,address,bool)[],uint256,uint256)[],uint256,bool,bytes))":"5a3c3987","swapExactIn((address,(address,address,bool)[],uint256,uint256)[],uint256,bool,bytes)":"286f580d","swapExactInHook((address,(address,(address,address,bool)[],uint256,uint256)[],uint256,bool,bytes))":"08a465f6","swapExactOut((address,(address,address,bool)[],uint256,uint256)[],uint256,bool,bytes)":"8eb1b65e","swapExactOutHook((address,(address,(address,address,bool)[],uint256,uint256)[],uint256,bool,bytes))":"945ed33f","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IWETH\",\"name\":\"weth\",\"type\":\"address\"},{\"internalType\":\"contract IPermit2\",\"name\":\"permit2\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"routerVersion\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EthTransfer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransientIndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"getPermit2\",\"outputs\":[{\"internalType\":\"contract IPermit2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWeth\",\"outputs\":[{\"internalType\":\"contract IWETH\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"internalType\":\"struct IRouterCommon.PermitApproval[]\",\"name\":\"permitBatch\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"permitSignatures\",\"type\":\"bytes[]\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"internalType\":\"uint48\",\"name\":\"expiration\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"nonce\",\"type\":\"uint48\"}],\"internalType\":\"struct IAllowanceTransfer.PermitDetails[]\",\"name\":\"details\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sigDeadline\",\"type\":\"uint256\"}],\"internalType\":\"struct IAllowanceTransfer.PermitBatch\",\"name\":\"permit2Batch\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"permit2Signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes[]\",\"name\":\"multicallData\",\"type\":\"bytes[]\"}],\"name\":\"permitBatchAndCall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct IBatchRouter.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"internalType\":\"struct IBatchRouter.SwapPathExactAmountIn[]\",\"name\":\"paths\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"querySwapExactIn\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"pathAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"tokensOut\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct IBatchRouter.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"internalType\":\"struct IBatchRouter.SwapPathExactAmountIn[]\",\"name\":\"paths\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IBatchRouter.SwapExactInHookParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"querySwapExactInHook\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"pathAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"tokensOut\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct IBatchRouter.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"}],\"internalType\":\"struct IBatchRouter.SwapPathExactAmountOut[]\",\"name\":\"paths\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"querySwapExactOut\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"pathAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"tokensIn\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct IBatchRouter.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"}],\"internalType\":\"struct IBatchRouter.SwapPathExactAmountOut[]\",\"name\":\"paths\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IBatchRouter.SwapExactOutHookParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"querySwapExactOutHook\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"pathAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"tokensIn\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct IBatchRouter.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"internalType\":\"struct IBatchRouter.SwapPathExactAmountIn[]\",\"name\":\"paths\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"swapExactIn\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"pathAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"tokensOut\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct IBatchRouter.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"internalType\":\"struct IBatchRouter.SwapPathExactAmountIn[]\",\"name\":\"paths\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IBatchRouter.SwapExactInHookParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"swapExactInHook\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"pathAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"tokensOut\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct IBatchRouter.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"}],\"internalType\":\"struct IBatchRouter.SwapPathExactAmountOut[]\",\"name\":\"paths\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"swapExactOut\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"pathAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"tokensIn\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct IBatchRouter.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"}],\"internalType\":\"struct IBatchRouter.SwapPathExactAmountOut[]\",\"name\":\"paths\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IBatchRouter.SwapExactOutHookParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"swapExactOutHook\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"pathAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"tokensIn\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"The external API functions unlock the Vault, which calls back into the corresponding hook functions. These interpret the steps and paths in the input data, perform token accounting (in transient storage, to save gas), settle with the Vault, and handle wrapping and unwrapping ETH.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}]},\"kind\":\"dev\",\"methods\":{\"getSender()\":{\"returns\":{\"_0\":\"The address of the sender\"}},\"multicall(bytes[])\":{\"params\":{\"data\":\"Encoded function calls to be executed in the batch.\"},\"returns\":{\"results\":\"Array of bytes arrays, each representing the return data from each function call executed.\"}},\"permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])\":{\"params\":{\"multicallData\":\"An array of bytes arrays, each representing an encoded function call on this contract\",\"permit2Batch\":\"A batch of permit2 approvals\",\"permit2Signature\":\"A permit2 signature for the batch approval\",\"permitBatch\":\"An array of `PermitApproval` structs, each representing an ERC20 permit request\",\"permitSignatures\":\"An array of bytes, corresponding to the permit request signature in `permitBatch`\"},\"returns\":{\"results\":\"Array of bytes arrays, each representing the return data from each function call executed\"}},\"querySwapExactIn((address,(address,address,bool)[],uint256,uint256)[],address,bytes)\":{\"details\":\"Min amounts out specified in the paths are ignored.\",\"params\":{\"paths\":\"Swap paths from token in to token out, specifying exact amounts in\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data required for the query\"},\"returns\":{\"amountsOut\":\"Calculated amounts of output tokens to be received, ordered by output token address\",\"pathAmountsOut\":\"Calculated amounts of output tokens corresponding to the last step of each given path\",\"tokensOut\":\"Output token addresses\"}},\"querySwapExactOut((address,(address,address,bool)[],uint256,uint256)[],address,bytes)\":{\"details\":\"Max amounts in specified in the paths are ignored.\",\"params\":{\"paths\":\"Swap paths from token in to token out, specifying exact amounts out\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data required for the query\"},\"returns\":{\"amountsIn\":\"Calculated amounts of input tokens to be received, ordered by input token address\",\"pathAmountsIn\":\"Calculated amounts of input tokens corresponding to the last step of each given path\",\"tokensIn\":\"Input token addresses\"}},\"swapExactIn((address,(address,address,bool)[],uint256,uint256)[],uint256,bool,bytes)\":{\"params\":{\"deadline\":\"Deadline for the swap, after which it will revert\",\"paths\":\"Swap paths from token in to token out, specifying exact amounts in\",\"userData\":\"Additional (optional) data required for the swap\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsOut\":\"Calculated amounts of output tokens, ordered by output token address\",\"pathAmountsOut\":\"Calculated amounts of output tokens corresponding to the last step of each given path\",\"tokensOut\":\"Output token addresses\"}},\"swapExactOut((address,(address,address,bool)[],uint256,uint256)[],uint256,bool,bytes)\":{\"params\":{\"deadline\":\"Deadline for the swap\",\"paths\":\"Swap paths from token in to token out, specifying exact amounts out\",\"userData\":\"Additional (optional) data required for the swap\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsIn\":\"Calculated amounts of input tokens, ordered by input token address\",\"pathAmountsIn\":\"Calculated amounts of input tokens corresponding to the first step of each given path\",\"tokensIn\":\"Input token addresses\"}},\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"ErrorSelectorNotFound()\":[{\"notice\":\"Handle the \\\"reverted without a reason\\\" case (i.e., no return data).\"}],\"EthTransfer()\":[{\"notice\":\"Incoming ETH transfer from an address that is not WETH.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"InsufficientEth()\":[{\"notice\":\"The amount of ETH paid is insufficient to complete this operation.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}],\"TransientIndexOutOfBounds()\":[{\"notice\":\"An index is out of bounds on an array operation (e.g., at).\"}]},\"kind\":\"user\",\"methods\":{\"getPermit2()\":{\"notice\":\"Returns Permit2 contract address.\"},\"getSender()\":{\"notice\":\"Get the first sender which initialized the call to Router.\"},\"getWeth()\":{\"notice\":\"Returns WETH contract address.\"},\"multicall(bytes[])\":{\"notice\":\"Executes a batch of function calls on this contract.\"},\"permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])\":{\"notice\":\"Permits multiple allowances and executes a batch of function calls on this contract.\"},\"querySwapExactIn((address,(address,address,bool)[],uint256,uint256)[],address,bytes)\":{\"notice\":\"Queries a swap operation involving multiple paths (steps), specifying exact input token amounts.\"},\"querySwapExactOut((address,(address,address,bool)[],uint256,uint256)[],address,bytes)\":{\"notice\":\"Queries a swap operation involving multiple paths (steps), specifying exact output token amounts.\"},\"swapExactIn((address,(address,address,bool)[],uint256,uint256)[],uint256,bool,bytes)\":{\"notice\":\"Executes a swap operation involving multiple paths (steps), specifying exact input token amounts.\"},\"swapExactOut((address,(address,address,bool)[],uint256,uint256)[],uint256,bool,bytes)\":{\"notice\":\"Executes a swap operation involving multiple paths (steps), specifying exact output token amounts.\"},\"version()\":{\"notice\":\"Getter for the version.\"}},\"notice\":\"Entrypoint for batch swaps, and batch swap queries.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/BatchRouter.sol\":\"BatchRouter\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x75d5964b2f92dba9b9254e0052de28a9378e6759b1b28ccbb51db0bc80024176\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6ec9c862929ccff2be994d0296c0a4de3ddc19bb5a7aae3d4df0887dc7b29c8e\",\"dweb:/ipfs/QmSNr2fkNM2VyAo3B1DG1cuRh41t4A6mJZqeUu6vvYb97G\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBatchRouter.sol\":{\"keccak256\":\"0x700bec0606b05dd5e2799eeb01d5fc63149d84cddf349f75b43df241dd828798\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d18022dc7acd83fc7b37526f63bdd4d7cc11d9ab8cbe273a5a24e5e32c4df7db\",\"dweb:/ipfs/QmR9jWC8iY1nAXhhm9jj2UqvJdK9Coi7S3QVzGmayJcmpw\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouterCommon.sol\":{\"keccak256\":\"0x82d459426edf0ac20a33ad2065dae1f83544069b9887618248c0722e25a8b736\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c4566915a8c2b10f6232f92dad5e4409bb2aa46baf6a5d78dc0ac447facbfb37\",\"dweb:/ipfs/QmReRhA1BxRocwWsGgacaAcC2xRtWqJgN57bd2Yyy7A1gd\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISenderGuard.sol\":{\"keccak256\":\"0x2ec1ecf5c578aab7502f6985a03fbb79998218bdef819845d70d28a6994cff5b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a32637a45f19c29797db11eb25eb9bfda73302f280a64a9d9a4ab123db1b8e6f\",\"dweb:/ipfs/QmXGimviZ4Mr6kwgqkCwpHH5uGHVEjAcCRNvAwvoVYKi6f\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol\":{\"keccak256\":\"0x9dc4c8d6dd5dbc108dd377dab73a3e6c84e8c104713d2afb3cba8acc9ddf4c63\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2ef7c65fe356144f8cd720109b818e1ec6cc495ca35b55ca273ef9db45c6ae00\",\"dweb:/ipfs/QmREJgnfgoqemnYKvfYjTFJBAMsV9VAKA5AY5Woprpc1vs\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":{\"keccak256\":\"0xb4ee9e1543d36bdf9eeb4a9d5ab41170723239a1e27a2272f2e31de4765c019b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b70dd5e4fa496c2c1efb6bd20368587ba3c9c0d0afac9dc3631a29ff2628f99\",\"dweb:/ipfs/QmQigXUkpDuVK5VSX67RABrAC9bashPcHMasgPRNJb4k8Z\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":{\"keccak256\":\"0xb5f6b1d0ee3f295a717ce58329eaadccb1eefc2e1e02e2e7c438e377628475cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03c1b9bc73b7d14d9e1948a31c271a03a6ba4291f44d9aff17e60d300c111d0d\",\"dweb:/ipfs/QmNpW3iD3ST76N6xTncuVgYSuafSqFkXUmxNaK8uybr96G\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/TransientEnumerableSet.sol\":{\"keccak256\":\"0x1b77bbe902f863cb148ed28ae055841f77fc245b44f878932d0b8e3f2efba7f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1925829096d14d87eacbf2b7d42866128e2b43e1ff4249742a74f62e372ad247\",\"dweb:/ipfs/QmbFmGn45eoiHZHFGhXRqKSzg53j2Lz2XGQqaw6pkSjRxq\"]},\"@balancer-labs/v3-vault/contracts/BatchRouter.sol\":{\"keccak256\":\"0x1bfa17be2b1221e762f442d8d70ba20f47813c44feffb9ab1afa1ad13883abca\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32fc58bb361c2b084a4fbc594881a9f7a1a74de0a9a8a6ab1d6323bc68cb5bcb\",\"dweb:/ipfs/QmUEzgjg1H2HXrXyFyinsHR4WL1wBRHhAY7p7UfaEd3r4n\"]},\"@balancer-labs/v3-vault/contracts/BatchRouterCommon.sol\":{\"keccak256\":\"0x2e823b86db98c526a3ae859eeee2280dbd8db385e2f70fd41a32072dea0b2567\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://83e33ceaf6b9737c2bc83dc045c06aa67f4e563c106f5d7862f975c3493438fd\",\"dweb:/ipfs/QmQmYzzUCT8mmRenu6kGu81fk7GViYob4mhTuAi1zsYBnr\"]},\"@balancer-labs/v3-vault/contracts/RouterCommon.sol\":{\"keccak256\":\"0xb473ef641d1465f4d3c4f0372183e7c4c0baa77b2e2cf73dee947ab7ab722bac\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://61a166cdf1760c79790f921a8edee1f1977f07cef699db901bd15100ab30f96f\",\"dweb:/ipfs/QmdyhDm4PgNyzNC3s25k68yd52GtqM4PJt6QpfkmEmRtHW\"]},\"@balancer-labs/v3-vault/contracts/SenderGuard.sol\":{\"keccak256\":\"0x43fbf1ee03766ff75e6306520827db7d8f9cbc63f4609105a7062cbf6c6980a2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c015d974c3c8ae2f0677905a3216148611be430d4f3b8e64698ede996c8b4a46\",\"dweb:/ipfs/QmdrU9JE9NoksjQ6DUmGH1uKjgdyXVZXfD1RzdwFPnYtzr\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@balancer-labs/v3-vault/contracts/lib/RouterWethLib.sol\":{\"keccak256\":\"0xd66f21fa586085e10a1e322370c7015ebe472c44fc27472a6fdfe67ad6d9b188\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://88b4830e07a76a68dce1e3adba583f60259df5187087def2fd43d3c1f8b0e2ae\",\"dweb:/ipfs/QmbGNEfYtDUFpGrFYo9iJcSg9sJxiAVN9iaJApCaHobTDm\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"permit2/src/interfaces/IAllowanceTransfer.sol\":{\"keccak256\":\"0x37f0ac203b6ef605c9533e1a739477e8e9dcea90710b40e645a367f8a21ace29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0104d72aeaec1cd66cc232e7de7b7ead08608efcc179491b8a66387614670b0\",\"dweb:/ipfs/QmfAZDyuNC9FXXbnJUwqHNwmAK6uRrXxtWEytLsxjskPsN\"]},\"permit2/src/interfaces/IEIP712.sol\":{\"keccak256\":\"0xfdccf2b9639070803cd0e4198427fb0df3cc452ca59bd3b8a0d957a9a4254138\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7c936ac42ce89e827db905a1544397f8bdf46db34cdb6aa1b90dea42fdb4c72\",\"dweb:/ipfs/QmVgurxo1N31qZqkPBirw9Z7S9tLYmv6jSwQp8R8ur2cBk\"]},\"permit2/src/interfaces/IPermit2.sol\":{\"keccak256\":\"0xaa631cc9f53e699301d94233007110a345e6779011def484e8dd97b8fe0af771\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc0502cf19c9c18f320a3001201e89e350393b75837f6b7971de18b2de06f30d\",\"dweb:/ipfs/QmT9SfhdJ7VJNNrf94g4H5usyi7ShqWGx7Cqsz9jZTjX96\"]},\"permit2/src/interfaces/ISignatureTransfer.sol\":{\"keccak256\":\"0xe6df9966f8841dc3958ee86169c89de97e7f614c81c28b9dc947b12d732df64e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3d4eafdee7f48c3be8350a94eb6edd0bfb2af2c105df65787a77174f356c0317\",\"dweb:/ipfs/QmY1j2adeeAhNpn6cUuthemxGCdLXHTfyMh9yTKsY4mZ2d\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/BatchRouterCommon.sol":{"BatchRouterCommon":{"abi":[{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"ErrorSelectorNotFound","type":"error"},{"inputs":[],"name":"EthTransfer","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"inputs":[],"name":"getPermit2","outputs":[{"internalType":"contract IPermit2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSender","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWeth","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"internalType":"struct IRouterCommon.PermitApproval[]","name":"permitBatch","type":"tuple[]"},{"internalType":"bytes[]","name":"permitSignatures","type":"bytes[]"},{"components":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint160","name":"amount","type":"uint160"},{"internalType":"uint48","name":"expiration","type":"uint48"},{"internalType":"uint48","name":"nonce","type":"uint48"}],"internalType":"struct IAllowanceTransfer.PermitDetails[]","name":"details","type":"tuple[]"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"sigDeadline","type":"uint256"}],"internalType":"struct IAllowanceTransfer.PermitBatch","name":"permit2Batch","type":"tuple"},{"internalType":"bytes","name":"permit2Signature","type":"bytes"},{"internalType":"bytes[]","name":"multicallData","type":"bytes[]"}],"name":"permitBatchAndCall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getPermit2()":"1bbf2e23","getSender()":"5e01eb5a","getWeth()":"107c279f","multicall(bytes[])":"ac9650d8","permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])":"19c6989f","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EthTransfer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"getPermit2\",\"outputs\":[{\"internalType\":\"contract IPermit2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWeth\",\"outputs\":[{\"internalType\":\"contract IWETH\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"internalType\":\"struct IRouterCommon.PermitApproval[]\",\"name\":\"permitBatch\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"permitSignatures\",\"type\":\"bytes[]\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"internalType\":\"uint48\",\"name\":\"expiration\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"nonce\",\"type\":\"uint48\"}],\"internalType\":\"struct IAllowanceTransfer.PermitDetails[]\",\"name\":\"details\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sigDeadline\",\"type\":\"uint256\"}],\"internalType\":\"struct IAllowanceTransfer.PermitBatch\",\"name\":\"permit2Batch\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"permit2Signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes[]\",\"name\":\"multicallData\",\"type\":\"bytes[]\"}],\"name\":\"permitBatchAndCall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}]},\"kind\":\"dev\",\"methods\":{\"getSender()\":{\"returns\":{\"_0\":\"The address of the sender\"}},\"multicall(bytes[])\":{\"params\":{\"data\":\"Encoded function calls to be executed in the batch.\"},\"returns\":{\"results\":\"Array of bytes arrays, each representing the return data from each function call executed.\"}},\"permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])\":{\"params\":{\"multicallData\":\"An array of bytes arrays, each representing an encoded function call on this contract\",\"permit2Batch\":\"A batch of permit2 approvals\",\"permit2Signature\":\"A permit2 signature for the batch approval\",\"permitBatch\":\"An array of `PermitApproval` structs, each representing an ERC20 permit request\",\"permitSignatures\":\"An array of bytes, corresponding to the permit request signature in `permitBatch`\"},\"returns\":{\"results\":\"Array of bytes arrays, each representing the return data from each function call executed\"}},\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"ErrorSelectorNotFound()\":[{\"notice\":\"Handle the \\\"reverted without a reason\\\" case (i.e., no return data).\"}],\"EthTransfer()\":[{\"notice\":\"Incoming ETH transfer from an address that is not WETH.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}]},\"kind\":\"user\",\"methods\":{\"getPermit2()\":{\"notice\":\"Returns Permit2 contract address.\"},\"getSender()\":{\"notice\":\"Get the first sender which initialized the call to Router.\"},\"getWeth()\":{\"notice\":\"Returns WETH contract address.\"},\"multicall(bytes[])\":{\"notice\":\"Executes a batch of function calls on this contract.\"},\"permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])\":{\"notice\":\"Permits multiple allowances and executes a batch of function calls on this contract.\"},\"version()\":{\"notice\":\"Getter for the version.\"}},\"notice\":\"Transient storage for Batch and Composite Liquidity Router operations.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/BatchRouterCommon.sol\":\"BatchRouterCommon\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x75d5964b2f92dba9b9254e0052de28a9378e6759b1b28ccbb51db0bc80024176\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6ec9c862929ccff2be994d0296c0a4de3ddc19bb5a7aae3d4df0887dc7b29c8e\",\"dweb:/ipfs/QmSNr2fkNM2VyAo3B1DG1cuRh41t4A6mJZqeUu6vvYb97G\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouterCommon.sol\":{\"keccak256\":\"0x82d459426edf0ac20a33ad2065dae1f83544069b9887618248c0722e25a8b736\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c4566915a8c2b10f6232f92dad5e4409bb2aa46baf6a5d78dc0ac447facbfb37\",\"dweb:/ipfs/QmReRhA1BxRocwWsGgacaAcC2xRtWqJgN57bd2Yyy7A1gd\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISenderGuard.sol\":{\"keccak256\":\"0x2ec1ecf5c578aab7502f6985a03fbb79998218bdef819845d70d28a6994cff5b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a32637a45f19c29797db11eb25eb9bfda73302f280a64a9d9a4ab123db1b8e6f\",\"dweb:/ipfs/QmXGimviZ4Mr6kwgqkCwpHH5uGHVEjAcCRNvAwvoVYKi6f\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":{\"keccak256\":\"0xb4ee9e1543d36bdf9eeb4a9d5ab41170723239a1e27a2272f2e31de4765c019b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b70dd5e4fa496c2c1efb6bd20368587ba3c9c0d0afac9dc3631a29ff2628f99\",\"dweb:/ipfs/QmQigXUkpDuVK5VSX67RABrAC9bashPcHMasgPRNJb4k8Z\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":{\"keccak256\":\"0xb5f6b1d0ee3f295a717ce58329eaadccb1eefc2e1e02e2e7c438e377628475cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03c1b9bc73b7d14d9e1948a31c271a03a6ba4291f44d9aff17e60d300c111d0d\",\"dweb:/ipfs/QmNpW3iD3ST76N6xTncuVgYSuafSqFkXUmxNaK8uybr96G\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/TransientEnumerableSet.sol\":{\"keccak256\":\"0x1b77bbe902f863cb148ed28ae055841f77fc245b44f878932d0b8e3f2efba7f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1925829096d14d87eacbf2b7d42866128e2b43e1ff4249742a74f62e372ad247\",\"dweb:/ipfs/QmbFmGn45eoiHZHFGhXRqKSzg53j2Lz2XGQqaw6pkSjRxq\"]},\"@balancer-labs/v3-vault/contracts/BatchRouterCommon.sol\":{\"keccak256\":\"0x2e823b86db98c526a3ae859eeee2280dbd8db385e2f70fd41a32072dea0b2567\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://83e33ceaf6b9737c2bc83dc045c06aa67f4e563c106f5d7862f975c3493438fd\",\"dweb:/ipfs/QmQmYzzUCT8mmRenu6kGu81fk7GViYob4mhTuAi1zsYBnr\"]},\"@balancer-labs/v3-vault/contracts/RouterCommon.sol\":{\"keccak256\":\"0xb473ef641d1465f4d3c4f0372183e7c4c0baa77b2e2cf73dee947ab7ab722bac\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://61a166cdf1760c79790f921a8edee1f1977f07cef699db901bd15100ab30f96f\",\"dweb:/ipfs/QmdyhDm4PgNyzNC3s25k68yd52GtqM4PJt6QpfkmEmRtHW\"]},\"@balancer-labs/v3-vault/contracts/SenderGuard.sol\":{\"keccak256\":\"0x43fbf1ee03766ff75e6306520827db7d8f9cbc63f4609105a7062cbf6c6980a2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c015d974c3c8ae2f0677905a3216148611be430d4f3b8e64698ede996c8b4a46\",\"dweb:/ipfs/QmdrU9JE9NoksjQ6DUmGH1uKjgdyXVZXfD1RzdwFPnYtzr\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@balancer-labs/v3-vault/contracts/lib/RouterWethLib.sol\":{\"keccak256\":\"0xd66f21fa586085e10a1e322370c7015ebe472c44fc27472a6fdfe67ad6d9b188\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://88b4830e07a76a68dce1e3adba583f60259df5187087def2fd43d3c1f8b0e2ae\",\"dweb:/ipfs/QmbGNEfYtDUFpGrFYo9iJcSg9sJxiAVN9iaJApCaHobTDm\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"permit2/src/interfaces/IAllowanceTransfer.sol\":{\"keccak256\":\"0x37f0ac203b6ef605c9533e1a739477e8e9dcea90710b40e645a367f8a21ace29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0104d72aeaec1cd66cc232e7de7b7ead08608efcc179491b8a66387614670b0\",\"dweb:/ipfs/QmfAZDyuNC9FXXbnJUwqHNwmAK6uRrXxtWEytLsxjskPsN\"]},\"permit2/src/interfaces/IEIP712.sol\":{\"keccak256\":\"0xfdccf2b9639070803cd0e4198427fb0df3cc452ca59bd3b8a0d957a9a4254138\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7c936ac42ce89e827db905a1544397f8bdf46db34cdb6aa1b90dea42fdb4c72\",\"dweb:/ipfs/QmVgurxo1N31qZqkPBirw9Z7S9tLYmv6jSwQp8R8ur2cBk\"]},\"permit2/src/interfaces/IPermit2.sol\":{\"keccak256\":\"0xaa631cc9f53e699301d94233007110a345e6779011def484e8dd97b8fe0af771\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc0502cf19c9c18f320a3001201e89e350393b75837f6b7971de18b2de06f30d\",\"dweb:/ipfs/QmT9SfhdJ7VJNNrf94g4H5usyi7ShqWGx7Cqsz9jZTjX96\"]},\"permit2/src/interfaces/ISignatureTransfer.sol\":{\"keccak256\":\"0xe6df9966f8841dc3958ee86169c89de97e7f614c81c28b9dc947b12d732df64e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3d4eafdee7f48c3be8350a94eb6edd0bfb2af2c105df65787a77174f356c0317\",\"dweb:/ipfs/QmY1j2adeeAhNpn6cUuthemxGCdLXHTfyMh9yTKsY4mZ2d\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/BufferRouter.sol":{"BufferRouter":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"contract IWETH","name":"weth","type":"address"},{"internalType":"contract IPermit2","name":"permit2","type":"address"},{"internalType":"string","name":"routerVersion","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"ErrorSelectorNotFound","type":"error"},{"inputs":[],"name":"EthTransfer","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[],"name":"InsufficientEth","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedIn","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingIn","type":"uint256"},{"internalType":"uint256","name":"amountWrappedIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedIn","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBufferHook","outputs":[{"internalType":"uint256","name":"amountUnderlyingIn","type":"uint256"},{"internalType":"uint256","name":"amountWrappedIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getPermit2","outputs":[{"internalType":"contract IPermit2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSender","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWeth","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"exactAmountUnderlyingIn","type":"uint256"},{"internalType":"uint256","name":"exactAmountWrappedIn","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"exactAmountUnderlyingIn","type":"uint256"},{"internalType":"uint256","name":"exactAmountWrappedIn","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBufferHook","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"internalType":"struct IRouterCommon.PermitApproval[]","name":"permitBatch","type":"tuple[]"},{"internalType":"bytes[]","name":"permitSignatures","type":"bytes[]"},{"components":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint160","name":"amount","type":"uint160"},{"internalType":"uint48","name":"expiration","type":"uint48"},{"internalType":"uint48","name":"nonce","type":"uint48"}],"internalType":"struct IAllowanceTransfer.PermitDetails[]","name":"details","type":"tuple[]"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"sigDeadline","type":"uint256"}],"internalType":"struct IAllowanceTransfer.PermitBatch","name":"permit2Batch","type":"tuple"},{"internalType":"bytes","name":"permit2Signature","type":"bytes"},{"internalType":"bytes[]","name":"multicallData","type":"bytes[]"}],"name":"permitBatchAndCall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"}],"name":"queryAddLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingIn","type":"uint256"},{"internalType":"uint256","name":"amountWrappedIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"}],"name":"queryAddLiquidityToBufferHook","outputs":[{"internalType":"uint256","name":"amountUnderlyingIn","type":"uint256"},{"internalType":"uint256","name":"amountWrappedIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"exactAmountUnderlyingIn","type":"uint256"},{"internalType":"uint256","name":"exactAmountWrappedIn","type":"uint256"}],"name":"queryInitializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"exactAmountUnderlyingIn","type":"uint256"},{"internalType":"uint256","name":"exactAmountWrappedIn","type":"uint256"}],"name":"queryInitializeBufferHook","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"exactSharesToRemove","type":"uint256"}],"name":"queryRemoveLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceOut","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"exactSharesToRemove","type":"uint256"}],"name":"queryRemoveLiquidityFromBufferHook","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceOut","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}],"evm":{"bytecode":{"functionDebugData":{"finalize_allocation":{"entryPoint":869,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_4843":{"entryPoint":842,"id":null,"parameterSlots":1,"returnSlots":0},"fun_calculateSlot":{"entryPoint":904,"id":6911,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"61012060409080825234610346576123c3803803809161001f8285610365565b83398101916080828403126103465781516001600160a01b039283821682036103465760209081810151928584168403610346578482015195861686036103465760608201516001600160401b0392838211610346570190601f9088828401121561034657825184811161033257601f199388519a6100a4888787860116018d610365565b828c5287838301011161034657815f928c898080950191015e8b01015261010987516100cf8161034a565b600b81526a14d95b99195c91dd585c9960aa1b878201528851906100f28261034a565b600682526539b2b73232b960d11b88830152610388565b60805260a0528751928311610332575f54916001928381811c91168015610328575b86821014610314578281116102d1575b50849184116001146102725750829182916101bb969798995f94610267575b50501b915f199060031b1c1916175f555b83516101768161034a565b600c81526b2937baba32b921b7b6b6b7b760a11b82820152701a5cd4995d1d5c9b915d1a131bd8dad959607a1b8551926101af8461034a565b60118452830152610388565b60c05260e05261010091825251611f88918261043b83396080518281816109a30152611958015260a05182818161021f0152818161035a0152818161050c01528181610683015281816107c00152818161092201528181610c2801528181610ddd01528181611c2a0152611cc9015260c0518281816119980152611e30015260e05182818160310152611660015251818181610e6d015281816110640152818161118b0152611ca60152f35b015192505f8061015a565b83929316905f8052845f20915f5b8181106102bc575098836101bb9798999a106102a4575b505050811b015f5561016b565b01515f1960f88460031b161c191690555f8080610297565b8a830151845592850192918601918601610280565b5f8052855f208380870160051c82019288881061030b575b0160051c019084905b82811061030057505061013b565b5f81550184906102f2565b925081926102e9565b634e487b7160e01b5f52602260045260245ffd5b90607f169061012b565b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b604081019081106001600160401b0382111761033257604052565b601f909101601f19168101906001600160401b0382119082101761033257604052565b906103f5603a60209260405193849181808401977f62616c616e6365722d6c6162732e76332e73746f726167652e000000000000008952805191829101603986015e830190601760f91b60398301528051928391018583015e015f8382015203601a810184520182610365565b5190205f1981019081116104265760405190602082019081526020825261041b8261034a565b9051902060ff191690565b634e487b7160e01b5f52601160045260245ffdfe6080806040526004361015610081575b50361561001a575f80fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361005957005b7f0540ddf6000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f3560e01c908163107c279f146116365750806313f7bb4d146115b957806319c6989f14610e915780631bbf2e2314610e41578063400f230d14610d3b5780634fe56ed614610b9e578063502383f414610b1e57806354fd4d50146109e15780635e01eb5a1461098f578063662727cc14610850578063a390260414610739578063ac9650d8146106f1578063b365a3c2146105a0578063d96af07014610480578063d9f70869146102cf5763e0fefe351461013d575f61000f565b3461026c5761014b36611823565b73ffffffffffffffffffffffffffffffffffffffff9182604051947fa3902604000000000000000000000000000000000000000000000000000000006020870152166024850152604484015260648301526064825260a082019082821067ffffffffffffffff8311176102a257815f91816040527fedfa3568000000000000000000000000000000000000000000000000000000008252602060a486015281837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608761021a60c48201826116f9565b0301927f0000000000000000000000000000000000000000000000000000000000000000165af1918215610297575f92610270575b505060208180518101031261026c57602080910151604051908152f35b5f80fd5b610290925060a0903d90815f853e610288828561186e565b0101906118ad565b5f8061024f565b6040513d5f823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b3461026c576102dd3661179f565b91906102ea949394611be6565b6102f2611c13565b6040517f653eb3b000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201879052604482018490526064820192909252838216608482015260209591937f00000000000000000000000000000000000000000000000000000000000000008516929091878160a4815f885af19687156102975788915f9861044d575b50908692916024604051809581937f4afbaf5a00000000000000000000000000000000000000000000000000000000835216978860048301525afa958615610297576103f5966103f0935f91610420575b501683611c7e565b611c7e565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051908152f35b61044091508a3d8c11610446575b610438818361186e565b810190611926565b8a6103e8565b503d61042e565b828194939299503d8311610479575b610466818361186e565b8101031261026c57905195879086610397565b503d61045c565b3461026c57604060031936011261026c576084604061049d611684565b6104a5611be6565b6104ad611c13565b73ffffffffffffffffffffffffffffffffffffffff9283915f845195869485937febc7955c00000000000000000000000000000000000000000000000000000000855216600484015260243560248401528160448401528160648401527f0000000000000000000000000000000000000000000000000000000000000000165af1908115610297576040915f915f91610571575b505f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d82519182526020820152f35b90506105939150823d8411610599575b61058b818361186e565b810190611910565b83610541565b503d610581565b3461026c576106695f61062061062e6105b8366117e8565b6040517fd9f7086900000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff90941660248501526044840192909252606483015260848201523360a482015291829060c4820190565b03601f19810183528261186e565b604051809381927f48c894910000000000000000000000000000000000000000000000000000000083526020600484015260248301906116f9565b03818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610297575f916106cf575b5060208180518101031261026c57602080910151604051908152f35b6106eb91503d805f833e6106e3818361186e565b8101906118ad565b816106b3565b602060031936011261026c5760043567ffffffffffffffff811161026c576107296107236107359236906004016116c8565b90611952565b6040519182918261171e565b0390f35b3461026c5760a4602061074b36611823565b91610757949194611be6565b61075f611c13565b5f73ffffffffffffffffffffffffffffffffffffffff809460405197889687957f653eb3b0000000000000000000000000000000000000000000000000000000008752166004860152602485015260448401528160648401523060848401527f0000000000000000000000000000000000000000000000000000000000000000165af18015610297575f9061081d575b6020905f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051908152f35b506020813d602011610848575b816108376020938361186e565b8101031261026c57602090516107ef565b3d915061082a565b3461026c57604060031936011261026c576109085f6106206108cd610873611684565b6040517f400f230d00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091166024808301919091523560448201529182906064820190565b604051809381927fedfa35680000000000000000000000000000000000000000000000000000000083526020600484015260248301906116f9565b03818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af190811561029757604091610969915f91610975575b5060208082518301019101611910565b82519182526020820152f35b61098991503d805f833e6106e3818361186e565b83610959565b3461026c575f60031936011261026c5760207f00000000000000000000000000000000000000000000000000000000000000005c73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b3461026c575f60031936011261026c576040515f5f549060018260011c9160018416918215610b14575b6020948585108414610ae75785879486865291825f14610aa9575050600114610a50575b50610a3c9250038361186e565b6107356040519282849384528301906116f9565b5f808052859250907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b858310610a91575050610a3c935082010185610a2f565b80548389018501528794508693909201918101610a7a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685820152610a3c95151560051b8501019250879150610a2f9050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f1692610a0b565b3461026c576109085f61062061062e610b36366117e8565b6040517f4fe56ed600000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff90941660248501526044840192909252606483015260848201523360a482015291829060c4820190565b3461026c57610bac3661179f565b93919092610bb8611be6565b610bc0611c13565b604080517fe2a92b1a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482019390935260448101939093526064830194909452848116608483015290927f00000000000000000000000000000000000000000000000000000000000000008216908460a4815f855af1928315610297575f945f94610d0e575b5090602083926024604051809681937f4afbaf5a00000000000000000000000000000000000000000000000000000000835216948560048301525afa958615610297576103f0868694604099610cc0975f91610cef57501683611c7e565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d82519182526020820152f35b610d08915060203d60201161044657610438818361186e565b8b6103e8565b602095508392919450610d2f9060403d6040116105995761058b818361186e565b95909594919250610c62565b3461026c57604060031936011261026c5760a46040610d58611684565b610d60611be6565b610d68611c13565b73ffffffffffffffffffffffffffffffffffffffff9283915f845195869485937fe2a92b1a0000000000000000000000000000000000000000000000000000000085521660048401526fffffffffffffffffffffffffffffffff806024850152604484015260243560648401523060848401527f0000000000000000000000000000000000000000000000000000000000000000165af1908115610297576040915f915f9161057157505f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d82519182526020820152f35b3461026c575f60031936011261026c57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b60a060031936011261026c5767ffffffffffffffff6004351161026c5736602360043501121561026c5767ffffffffffffffff600435600401351161026c5736602460c0600435600401350260043501011161026c5760243567ffffffffffffffff811161026c57610f079036906004016116c8565b67ffffffffffffffff6044351161026c5760606003196044353603011261026c5767ffffffffffffffff6064351161026c5736602360643501121561026c5767ffffffffffffffff606435600401351161026c573660246064356004013560643501011161026c5760843567ffffffffffffffff811161026c57610f8f9036906004016116c8565b929091610f9a611be6565b806004356004013503611591575f5b60043560040135811061128257505050604435600401357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd60443536030181121561026c57806044350160048101359067ffffffffffffffff821161026c5760248260071b360391011361026c5761104c575b61073561072984845f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d611952565b9173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b1561026c57604051927f2a2d80d10000000000000000000000000000000000000000000000000000000084523360048501526060602485015260c484019060443501602481019167ffffffffffffffff60048301351161026c57600482013560071b3603831361026c576060606487015260048201359052849160e48301915f905b600481013582106111ee57505050906020815f9373ffffffffffffffffffffffffffffffffffffffff61113e6024604435016116a7565b1660848301526044803581013560a4840152600319838303019083015260643560048101358083529060240184830137600460643501358181018401869052601f01601f191601030181837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af19182156102975761073593610729936111df575b5091509161101c565b6111e89061185a565b846111d6565b9193509173ffffffffffffffffffffffffffffffffffffffff611210856116a7565b1681526020808501359173ffffffffffffffffffffffffffffffffffffffff831680930361026c5760049260019282015261124d60408701611bd3565b65ffffffffffff809116604083015261126860608801611bd3565b166060820152608080910195019301905086939291611107565b611297611290828486611acd565b3691611b5a565b6040519081606081011067ffffffffffffffff6060840111176102a257606082016040525f82525f60208301525f6040830152602081015190606060408201519101515f1a9183526020830152604082015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc818402600435013603011261026c57604051908160c081011067ffffffffffffffff60c0840111176102a25760c08201604052611352602460c0850260043501016116a7565b808352611368604460c0860260043501016116a7565b90816020850152611382606460c0870260043501016116a7565b60408581019190915260043560c08702016084810135606087015260a4810135608087015260c4013560a0860152830151835160209094015160ff919091169273ffffffffffffffffffffffffffffffffffffffff83163b1561026c575f73ffffffffffffffffffffffffffffffffffffffff809460e4948a98849860c460c06040519c8d9b8c9a7fd505accf000000000000000000000000000000000000000000000000000000008c521660048b01523060248b0152608482820260043501013560448b0152026004350101356064880152608487015260a486015260c4850152165af19081611582575b506115795761147b611ba4565b9073ffffffffffffffffffffffffffffffffffffffff81511690602073ffffffffffffffffffffffffffffffffffffffff81830151166044604051809581937fdd62ed3e00000000000000000000000000000000000000000000000000000000835260048301523060248301525afa918215610297575f92611544575b50606001510361150d57506001905b01610fa9565b80511561151c57805190602001fd5b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b9091506020813d602011611571575b816115606020938361186e565b8101031261026c57519060606114f8565b3d9150611553565b50600190611507565b61158b9061185a565b8761146e565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461026c57604060031936011261026c576109085f6106206108cd6115dc611684565b6040517fd96af07000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091166024808301919091523560448201529182906064820190565b3461026c575f60031936011261026c5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361026c57565b359073ffffffffffffffffffffffffffffffffffffffff8216820361026c57565b9181601f8401121561026c5782359167ffffffffffffffff831161026c576020808501948460051b01011161026c57565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b8483106117535750505050505090565b909192939495848061178f837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528a516116f9565b9801930193019194939290611743565b60031960a091011261026c5773ffffffffffffffffffffffffffffffffffffffff600435818116810361026c5791602435916044359160643591608435908116810361026c5790565b600319608091011261026c5760043573ffffffffffffffffffffffffffffffffffffffff8116810361026c5790602435906044359060643590565b600319606091011261026c5760043573ffffffffffffffffffffffffffffffffffffffff8116810361026c57906024359060443590565b67ffffffffffffffff81116102a257604052565b90601f601f19910116810190811067ffffffffffffffff8211176102a257604052565b67ffffffffffffffff81116102a257601f01601f191660200190565b60208183031261026c5780519067ffffffffffffffff821161026c570181601f8201121561026c578051906118e182611891565b926118ef604051948561186e565b8284526020838301011161026c57815f9260208093018386015e8301015290565b919082604091031261026c576020825192015190565b9081602091031261026c575173ffffffffffffffffffffffffffffffffffffffff8116810361026c5790565b91905f907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff825c1615611aa8575b7f000000000000000000000000000000000000000000000000000000000000000094855c611a80576001906001875d6119ce83611ab5565b926119dc604051948561186e565b808452601f196119eb82611ab5565b015f5b818110611a6f5750505f5b818110611a265750505050905f611a1b9392955d805c91611a1d575b50611e26565b565b5f905d5f611a15565b80611a535f80611a3b6112908996888a611acd565b602081519101305af4611a4c611ba4565b9030611ee1565b611a5d8288611b90565b52611a688187611b90565b50016119f9565b8060606020809389010152016119ee565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b915033815d600191611996565b67ffffffffffffffff81116102a25760051b60200190565b9190811015611b2d5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561026c57019081359167ffffffffffffffff831161026c57602001823603811361026c579190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b929192611b6682611891565b91611b74604051938461186e565b82948184528183011161026c578281602093845f960137010152565b8051821015611b2d5760209160051b010190565b3d15611bce573d90611bb582611891565b91611bc3604051938461186e565b82523d5f602084013e565b606090565b359065ffffffffffff8216820361026c57565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c611a80576001905d565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303611c5257565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b90915f9080611c8e575b50505050565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016817f00000000000000000000000000000000000000000000000000000000000000001695828411611df557821694813b1561026c57608483915f809460405196879586947f36c785160000000000000000000000000000000000000000000000000000000086521660048501528b6024850152881660448401528960648401525af1801561029757611dde575b506044829360209360405196879485937f15afd409000000000000000000000000000000000000000000000000000000008552600485015260248401525af1908115611dd25750611da7575b808080611c88565b602090813d8311611dcb575b611dbd818361186e565b8101031261026c575f611d9f565b503d611db3565b604051903d90823e3d90fd5b60209250611deb9061185a565b60445f9250611d53565b837f6dfcc650000000000000000000000000000000000000000000000000000000005f5260a060045260245260445ffd5b47908115611edd577f00000000000000000000000000000000000000000000000000000000000000005c611edd57814710611eb1575f80809373ffffffffffffffffffffffffffffffffffffffff8294165af1611e81611ba4565b5015611e8957565b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fcd786059000000000000000000000000000000000000000000000000000000005f523060045260245ffd5b5050565b90611ef65750805115611e8957805190602001fd5b81511580611f49575b611f07575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15611eff56fea2646970667358221220ba27397543a77a9b25a3557c69861633e8407221aac50fce4ecc68767f9eb05064736f6c634300081b0033","opcodes":"PUSH2 0x120 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x346 JUMPI PUSH2 0x23C3 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x1F DUP3 DUP6 PUSH2 0x365 JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SWAP2 PUSH1 0x80 DUP3 DUP5 SUB SLT PUSH2 0x346 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP3 AND DUP3 SUB PUSH2 0x346 JUMPI PUSH1 0x20 SWAP1 DUP2 DUP2 ADD MLOAD SWAP3 DUP6 DUP5 AND DUP5 SUB PUSH2 0x346 JUMPI DUP5 DUP3 ADD MLOAD SWAP6 DUP7 AND DUP7 SUB PUSH2 0x346 JUMPI PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 DUP4 DUP3 GT PUSH2 0x346 JUMPI ADD SWAP1 PUSH1 0x1F SWAP1 DUP9 DUP3 DUP5 ADD SLT ISZERO PUSH2 0x346 JUMPI DUP3 MLOAD DUP5 DUP2 GT PUSH2 0x332 JUMPI PUSH1 0x1F NOT SWAP4 DUP9 MLOAD SWAP11 PUSH2 0xA4 DUP9 DUP8 DUP8 DUP7 ADD AND ADD DUP14 PUSH2 0x365 JUMP JUMPDEST DUP3 DUP13 MSTORE DUP8 DUP4 DUP4 ADD ADD GT PUSH2 0x346 JUMPI DUP2 PUSH0 SWAP3 DUP13 DUP10 DUP1 DUP1 SWAP6 ADD SWAP2 ADD MCOPY DUP12 ADD ADD MSTORE PUSH2 0x109 DUP8 MLOAD PUSH2 0xCF DUP2 PUSH2 0x34A JUMP JUMPDEST PUSH1 0xB DUP2 MSTORE PUSH11 0x14D95B99195C91DD585C99 PUSH1 0xAA SHL DUP8 DUP3 ADD MSTORE DUP9 MLOAD SWAP1 PUSH2 0xF2 DUP3 PUSH2 0x34A JUMP JUMPDEST PUSH1 0x6 DUP3 MSTORE PUSH6 0x39B2B73232B9 PUSH1 0xD1 SHL DUP9 DUP4 ADD MSTORE PUSH2 0x388 JUMP JUMPDEST PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE DUP8 MLOAD SWAP3 DUP4 GT PUSH2 0x332 JUMPI PUSH0 SLOAD SWAP2 PUSH1 0x1 SWAP3 DUP4 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x328 JUMPI JUMPDEST DUP7 DUP3 LT EQ PUSH2 0x314 JUMPI DUP3 DUP2 GT PUSH2 0x2D1 JUMPI JUMPDEST POP DUP5 SWAP2 DUP5 GT PUSH1 0x1 EQ PUSH2 0x272 JUMPI POP DUP3 SWAP2 DUP3 SWAP2 PUSH2 0x1BB SWAP7 SWAP8 SWAP9 SWAP10 PUSH0 SWAP5 PUSH2 0x267 JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE JUMPDEST DUP4 MLOAD PUSH2 0x176 DUP2 PUSH2 0x34A JUMP JUMPDEST PUSH1 0xC DUP2 MSTORE PUSH12 0x2937BABA32B921B7B6B6B7B7 PUSH1 0xA1 SHL DUP3 DUP3 ADD MSTORE PUSH17 0x1A5CD4995D1D5C9B915D1A131BD8DAD959 PUSH1 0x7A SHL DUP6 MLOAD SWAP3 PUSH2 0x1AF DUP5 PUSH2 0x34A JUMP JUMPDEST PUSH1 0x11 DUP5 MSTORE DUP4 ADD MSTORE PUSH2 0x388 JUMP JUMPDEST PUSH1 0xC0 MSTORE PUSH1 0xE0 MSTORE PUSH2 0x100 SWAP2 DUP3 MSTORE MLOAD PUSH2 0x1F88 SWAP2 DUP3 PUSH2 0x43B DUP4 CODECOPY PUSH1 0x80 MLOAD DUP3 DUP2 DUP2 PUSH2 0x9A3 ADD MSTORE PUSH2 0x1958 ADD MSTORE PUSH1 0xA0 MLOAD DUP3 DUP2 DUP2 PUSH2 0x21F ADD MSTORE DUP2 DUP2 PUSH2 0x35A ADD MSTORE DUP2 DUP2 PUSH2 0x50C ADD MSTORE DUP2 DUP2 PUSH2 0x683 ADD MSTORE DUP2 DUP2 PUSH2 0x7C0 ADD MSTORE DUP2 DUP2 PUSH2 0x922 ADD MSTORE DUP2 DUP2 PUSH2 0xC28 ADD MSTORE DUP2 DUP2 PUSH2 0xDDD ADD MSTORE DUP2 DUP2 PUSH2 0x1C2A ADD MSTORE PUSH2 0x1CC9 ADD MSTORE PUSH1 0xC0 MLOAD DUP3 DUP2 DUP2 PUSH2 0x1998 ADD MSTORE PUSH2 0x1E30 ADD MSTORE PUSH1 0xE0 MLOAD DUP3 DUP2 DUP2 PUSH1 0x31 ADD MSTORE PUSH2 0x1660 ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0xE6D ADD MSTORE DUP2 DUP2 PUSH2 0x1064 ADD MSTORE DUP2 DUP2 PUSH2 0x118B ADD MSTORE PUSH2 0x1CA6 ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0x15A JUMP JUMPDEST DUP4 SWAP3 SWAP4 AND SWAP1 PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP2 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x2BC JUMPI POP SWAP9 DUP4 PUSH2 0x1BB SWAP8 SWAP9 SWAP10 SWAP11 LT PUSH2 0x2A4 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH2 0x16B JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x297 JUMP JUMPDEST DUP11 DUP4 ADD MLOAD DUP5 SSTORE SWAP3 DUP6 ADD SWAP3 SWAP2 DUP7 ADD SWAP2 DUP7 ADD PUSH2 0x280 JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP6 PUSH0 KECCAK256 DUP4 DUP1 DUP8 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP9 DUP9 LT PUSH2 0x30B JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP5 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x300 JUMPI POP POP PUSH2 0x13B JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP5 SWAP1 PUSH2 0x2F2 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x2E9 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x12B JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0x332 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x332 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH2 0x3F5 PUSH1 0x3A PUSH1 0x20 SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP2 DUP2 DUP1 DUP5 ADD SWAP8 PUSH32 0x62616C616E6365722D6C6162732E76332E73746F726167652E00000000000000 DUP10 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 ADD PUSH1 0x39 DUP7 ADD MCOPY DUP4 ADD SWAP1 PUSH1 0x17 PUSH1 0xF9 SHL PUSH1 0x39 DUP4 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 SWAP2 ADD DUP6 DUP4 ADD MCOPY ADD PUSH0 DUP4 DUP3 ADD MSTORE SUB PUSH1 0x1A DUP2 ADD DUP5 MSTORE ADD DUP3 PUSH2 0x365 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x426 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP3 MSTORE PUSH2 0x41B DUP3 PUSH2 0x34A JUMP JUMPDEST SWAP1 MLOAD SWAP1 KECCAK256 PUSH1 0xFF NOT AND SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x81 JUMPI JUMPDEST POP CALLDATASIZE ISZERO PUSH2 0x1A JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x59 JUMPI STOP JUMPDEST PUSH32 0x540DDF600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x107C279F EQ PUSH2 0x1636 JUMPI POP DUP1 PUSH4 0x13F7BB4D EQ PUSH2 0x15B9 JUMPI DUP1 PUSH4 0x19C6989F EQ PUSH2 0xE91 JUMPI DUP1 PUSH4 0x1BBF2E23 EQ PUSH2 0xE41 JUMPI DUP1 PUSH4 0x400F230D EQ PUSH2 0xD3B JUMPI DUP1 PUSH4 0x4FE56ED6 EQ PUSH2 0xB9E JUMPI DUP1 PUSH4 0x502383F4 EQ PUSH2 0xB1E JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x9E1 JUMPI DUP1 PUSH4 0x5E01EB5A EQ PUSH2 0x98F JUMPI DUP1 PUSH4 0x662727CC EQ PUSH2 0x850 JUMPI DUP1 PUSH4 0xA3902604 EQ PUSH2 0x739 JUMPI DUP1 PUSH4 0xAC9650D8 EQ PUSH2 0x6F1 JUMPI DUP1 PUSH4 0xB365A3C2 EQ PUSH2 0x5A0 JUMPI DUP1 PUSH4 0xD96AF070 EQ PUSH2 0x480 JUMPI DUP1 PUSH4 0xD9F70869 EQ PUSH2 0x2CF JUMPI PUSH4 0xE0FEFE35 EQ PUSH2 0x13D JUMPI PUSH0 PUSH2 0xF JUMP JUMPDEST CALLVALUE PUSH2 0x26C JUMPI PUSH2 0x14B CALLDATASIZE PUSH2 0x1823 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 PUSH1 0x40 MLOAD SWAP5 PUSH32 0xA390260400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP8 ADD MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x64 DUP3 MSTORE PUSH1 0xA0 DUP3 ADD SWAP1 DUP3 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x2A2 JUMPI DUP2 PUSH0 SWAP2 DUP2 PUSH1 0x40 MSTORE PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 PUSH1 0xA4 DUP7 ADD MSTORE DUP2 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 DUP8 PUSH2 0x21A PUSH1 0xC4 DUP3 ADD DUP3 PUSH2 0x16F9 JUMP JUMPDEST SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x297 JUMPI PUSH0 SWAP3 PUSH2 0x270 JUMPI JUMPDEST POP POP PUSH1 0x20 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x26C JUMPI PUSH1 0x20 DUP1 SWAP2 ADD MLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x290 SWAP3 POP PUSH1 0xA0 SWAP1 RETURNDATASIZE SWAP1 DUP2 PUSH0 DUP6 RETURNDATACOPY PUSH2 0x288 DUP3 DUP6 PUSH2 0x186E JUMP JUMPDEST ADD ADD SWAP1 PUSH2 0x18AD JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x24F JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x26C JUMPI PUSH2 0x2DD CALLDATASIZE PUSH2 0x179F JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x2EA SWAP5 SWAP4 SWAP5 PUSH2 0x1BE6 JUMP JUMPDEST PUSH2 0x2F2 PUSH2 0x1C13 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x653EB3B000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP8 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x64 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP4 DUP3 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0x20 SWAP6 SWAP2 SWAP4 PUSH32 0x0 DUP6 AND SWAP3 SWAP1 SWAP2 DUP8 DUP2 PUSH1 0xA4 DUP2 PUSH0 DUP9 GAS CALL SWAP7 DUP8 ISZERO PUSH2 0x297 JUMPI DUP9 SWAP2 PUSH0 SWAP9 PUSH2 0x44D JUMPI JUMPDEST POP SWAP1 DUP7 SWAP3 SWAP2 PUSH1 0x24 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH32 0x4AFBAF5A00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND SWAP8 DUP9 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP6 DUP7 ISZERO PUSH2 0x297 JUMPI PUSH2 0x3F5 SWAP7 PUSH2 0x3F0 SWAP4 PUSH0 SWAP2 PUSH2 0x420 JUMPI JUMPDEST POP AND DUP4 PUSH2 0x1C7E JUMP JUMPDEST PUSH2 0x1C7E JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x440 SWAP2 POP DUP11 RETURNDATASIZE DUP13 GT PUSH2 0x446 JUMPI JUMPDEST PUSH2 0x438 DUP2 DUP4 PUSH2 0x186E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1926 JUMP JUMPDEST DUP11 PUSH2 0x3E8 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x42E JUMP JUMPDEST DUP3 DUP2 SWAP5 SWAP4 SWAP3 SWAP10 POP RETURNDATASIZE DUP4 GT PUSH2 0x479 JUMPI JUMPDEST PUSH2 0x466 DUP2 DUP4 PUSH2 0x186E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x26C JUMPI SWAP1 MLOAD SWAP6 DUP8 SWAP1 DUP7 PUSH2 0x397 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x45C JUMP JUMPDEST CALLVALUE PUSH2 0x26C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x26C JUMPI PUSH1 0x84 PUSH1 0x40 PUSH2 0x49D PUSH2 0x1684 JUMP JUMPDEST PUSH2 0x4A5 PUSH2 0x1BE6 JUMP JUMPDEST PUSH2 0x4AD PUSH2 0x1C13 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 SWAP2 PUSH0 DUP5 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xEBC7955C00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x24 DUP5 ADD MSTORE DUP2 PUSH1 0x44 DUP5 ADD MSTORE DUP2 PUSH1 0x64 DUP5 ADD MSTORE PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x297 JUMPI PUSH1 0x40 SWAP2 PUSH0 SWAP2 PUSH0 SWAP2 PUSH2 0x571 JUMPI JUMPDEST POP PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST SWAP1 POP PUSH2 0x593 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x599 JUMPI JUMPDEST PUSH2 0x58B DUP2 DUP4 PUSH2 0x186E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1910 JUMP JUMPDEST DUP4 PUSH2 0x541 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x581 JUMP JUMPDEST CALLVALUE PUSH2 0x26C JUMPI PUSH2 0x669 PUSH0 PUSH2 0x620 PUSH2 0x62E PUSH2 0x5B8 CALLDATASIZE PUSH2 0x17E8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD9F7086900000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP5 AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 ADD MSTORE CALLER PUSH1 0xA4 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 PUSH1 0xC4 DUP3 ADD SWAP1 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x186E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x16F9 JUMP JUMPDEST SUB DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x297 JUMPI PUSH0 SWAP2 PUSH2 0x6CF JUMPI JUMPDEST POP PUSH1 0x20 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x26C JUMPI PUSH1 0x20 DUP1 SWAP2 ADD MLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x6EB SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x6E3 DUP2 DUP4 PUSH2 0x186E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x18AD JUMP JUMPDEST DUP2 PUSH2 0x6B3 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x26C JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x26C JUMPI PUSH2 0x729 PUSH2 0x723 PUSH2 0x735 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x16C8 JUMP JUMPDEST SWAP1 PUSH2 0x1952 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x171E JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x26C JUMPI PUSH1 0xA4 PUSH1 0x20 PUSH2 0x74B CALLDATASIZE PUSH2 0x1823 JUMP JUMPDEST SWAP2 PUSH2 0x757 SWAP5 SWAP2 SWAP5 PUSH2 0x1BE6 JUMP JUMPDEST PUSH2 0x75F PUSH2 0x1C13 JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP5 PUSH1 0x40 MLOAD SWAP8 DUP9 SWAP7 DUP8 SWAP6 PUSH32 0x653EB3B000000000000000000000000000000000000000000000000000000000 DUP8 MSTORE AND PUSH1 0x4 DUP7 ADD MSTORE PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE DUP2 PUSH1 0x64 DUP5 ADD MSTORE ADDRESS PUSH1 0x84 DUP5 ADD MSTORE PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x297 JUMPI PUSH0 SWAP1 PUSH2 0x81D JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x848 JUMPI JUMPDEST DUP2 PUSH2 0x837 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x186E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x26C JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH2 0x7EF JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x82A JUMP JUMPDEST CALLVALUE PUSH2 0x26C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x26C JUMPI PUSH2 0x908 PUSH0 PUSH2 0x620 PUSH2 0x8CD PUSH2 0x873 PUSH2 0x1684 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x400F230D00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x24 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLDATALOAD PUSH1 0x44 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x16F9 JUMP JUMPDEST SUB DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x297 JUMPI PUSH1 0x40 SWAP2 PUSH2 0x969 SWAP2 PUSH0 SWAP2 PUSH2 0x975 JUMPI JUMPDEST POP PUSH1 0x20 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x1910 JUMP JUMPDEST DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH2 0x989 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x6E3 DUP2 DUP4 PUSH2 0x186E JUMP JUMPDEST DUP4 PUSH2 0x959 JUMP JUMPDEST CALLVALUE PUSH2 0x26C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x26C JUMPI PUSH1 0x20 PUSH32 0x0 TLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x26C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x26C JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH0 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0xB14 JUMPI JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP6 LT DUP5 EQ PUSH2 0xAE7 JUMPI DUP6 DUP8 SWAP5 DUP7 DUP7 MSTORE SWAP2 DUP3 PUSH0 EQ PUSH2 0xAA9 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xA50 JUMPI JUMPDEST POP PUSH2 0xA3C SWAP3 POP SUB DUP4 PUSH2 0x186E JUMP JUMPDEST PUSH2 0x735 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x16F9 JUMP JUMPDEST PUSH0 DUP1 DUP1 MSTORE DUP6 SWAP3 POP SWAP1 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP6 DUP4 LT PUSH2 0xA91 JUMPI POP POP PUSH2 0xA3C SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0xA2F JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0xA7A JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0xA3C SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0xA2F SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0xA0B JUMP JUMPDEST CALLVALUE PUSH2 0x26C JUMPI PUSH2 0x908 PUSH0 PUSH2 0x620 PUSH2 0x62E PUSH2 0xB36 CALLDATASIZE PUSH2 0x17E8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4FE56ED600000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP5 AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 ADD MSTORE CALLER PUSH1 0xA4 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 PUSH1 0xC4 DUP3 ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x26C JUMPI PUSH2 0xBAC CALLDATASIZE PUSH2 0x179F JUMP JUMPDEST SWAP4 SWAP2 SWAP1 SWAP3 PUSH2 0xBB8 PUSH2 0x1BE6 JUMP JUMPDEST PUSH2 0xBC0 PUSH2 0x1C13 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xE2A92B1A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x44 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x64 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP5 DUP2 AND PUSH1 0x84 DUP4 ADD MSTORE SWAP1 SWAP3 PUSH32 0x0 DUP3 AND SWAP1 DUP5 PUSH1 0xA4 DUP2 PUSH0 DUP6 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x297 JUMPI PUSH0 SWAP5 PUSH0 SWAP5 PUSH2 0xD0E JUMPI JUMPDEST POP SWAP1 PUSH1 0x20 DUP4 SWAP3 PUSH1 0x24 PUSH1 0x40 MLOAD DUP1 SWAP7 DUP2 SWAP4 PUSH32 0x4AFBAF5A00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND SWAP5 DUP6 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP6 DUP7 ISZERO PUSH2 0x297 JUMPI PUSH2 0x3F0 DUP7 DUP7 SWAP5 PUSH1 0x40 SWAP10 PUSH2 0xCC0 SWAP8 PUSH0 SWAP2 PUSH2 0xCEF JUMPI POP AND DUP4 PUSH2 0x1C7E JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH2 0xD08 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x446 JUMPI PUSH2 0x438 DUP2 DUP4 PUSH2 0x186E JUMP JUMPDEST DUP12 PUSH2 0x3E8 JUMP JUMPDEST PUSH1 0x20 SWAP6 POP DUP4 SWAP3 SWAP2 SWAP5 POP PUSH2 0xD2F SWAP1 PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x599 JUMPI PUSH2 0x58B DUP2 DUP4 PUSH2 0x186E JUMP JUMPDEST SWAP6 SWAP1 SWAP6 SWAP5 SWAP2 SWAP3 POP PUSH2 0xC62 JUMP JUMPDEST CALLVALUE PUSH2 0x26C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x26C JUMPI PUSH1 0xA4 PUSH1 0x40 PUSH2 0xD58 PUSH2 0x1684 JUMP JUMPDEST PUSH2 0xD60 PUSH2 0x1BE6 JUMP JUMPDEST PUSH2 0xD68 PUSH2 0x1C13 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 SWAP2 PUSH0 DUP5 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xE2A92B1A00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x64 DUP5 ADD MSTORE ADDRESS PUSH1 0x84 DUP5 ADD MSTORE PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x297 JUMPI PUSH1 0x40 SWAP2 PUSH0 SWAP2 PUSH0 SWAP2 PUSH2 0x571 JUMPI POP PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x26C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x26C JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x26C JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD GT PUSH2 0x26C JUMPI CALLDATASIZE PUSH1 0x23 PUSH1 0x4 CALLDATALOAD ADD SLT ISZERO PUSH2 0x26C JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD GT PUSH2 0x26C JUMPI CALLDATASIZE PUSH1 0x24 PUSH1 0xC0 PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD MUL PUSH1 0x4 CALLDATALOAD ADD ADD GT PUSH2 0x26C JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x26C JUMPI PUSH2 0xF07 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x16C8 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD GT PUSH2 0x26C JUMPI PUSH1 0x60 PUSH1 0x3 NOT PUSH1 0x44 CALLDATALOAD CALLDATASIZE SUB ADD SLT PUSH2 0x26C JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD GT PUSH2 0x26C JUMPI CALLDATASIZE PUSH1 0x23 PUSH1 0x64 CALLDATALOAD ADD SLT ISZERO PUSH2 0x26C JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD GT PUSH2 0x26C JUMPI CALLDATASIZE PUSH1 0x24 PUSH1 0x64 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD PUSH1 0x64 CALLDATALOAD ADD ADD GT PUSH2 0x26C JUMPI PUSH1 0x84 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x26C JUMPI PUSH2 0xF8F SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x16C8 JUMP JUMPDEST SWAP3 SWAP1 SWAP2 PUSH2 0xF9A PUSH2 0x1BE6 JUMP JUMPDEST DUP1 PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD SUB PUSH2 0x1591 JUMPI PUSH0 JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD DUP2 LT PUSH2 0x1282 JUMPI POP POP POP PUSH1 0x44 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD PUSH1 0x44 CALLDATALOAD CALLDATASIZE SUB ADD DUP2 SLT ISZERO PUSH2 0x26C JUMPI DUP1 PUSH1 0x44 CALLDATALOAD ADD PUSH1 0x4 DUP2 ADD CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x26C JUMPI PUSH1 0x24 DUP3 PUSH1 0x7 SHL CALLDATASIZE SUB SWAP2 ADD SGT PUSH2 0x26C JUMPI PUSH2 0x104C JUMPI JUMPDEST PUSH2 0x735 PUSH2 0x729 DUP5 DUP5 PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH2 0x1952 JUMP JUMPDEST SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x26C JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH32 0x2A2D80D100000000000000000000000000000000000000000000000000000000 DUP5 MSTORE CALLER PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x60 PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0xC4 DUP5 ADD SWAP1 PUSH1 0x44 CALLDATALOAD ADD PUSH1 0x24 DUP2 ADD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 DUP4 ADD CALLDATALOAD GT PUSH2 0x26C JUMPI PUSH1 0x4 DUP3 ADD CALLDATALOAD PUSH1 0x7 SHL CALLDATASIZE SUB DUP4 SGT PUSH2 0x26C JUMPI PUSH1 0x60 PUSH1 0x64 DUP8 ADD MSTORE PUSH1 0x4 DUP3 ADD CALLDATALOAD SWAP1 MSTORE DUP5 SWAP2 PUSH1 0xE4 DUP4 ADD SWAP2 PUSH0 SWAP1 JUMPDEST PUSH1 0x4 DUP2 ADD CALLDATALOAD DUP3 LT PUSH2 0x11EE JUMPI POP POP POP SWAP1 PUSH1 0x20 DUP2 PUSH0 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x113E PUSH1 0x24 PUSH1 0x44 CALLDATALOAD ADD PUSH2 0x16A7 JUMP JUMPDEST AND PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0x44 DUP1 CALLDATALOAD DUP2 ADD CALLDATALOAD PUSH1 0xA4 DUP5 ADD MSTORE PUSH1 0x3 NOT DUP4 DUP4 SUB ADD SWAP1 DUP4 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x4 DUP2 ADD CALLDATALOAD DUP1 DUP4 MSTORE SWAP1 PUSH1 0x24 ADD DUP5 DUP4 ADD CALLDATACOPY PUSH1 0x4 PUSH1 0x64 CALLDATALOAD ADD CALLDATALOAD DUP2 DUP2 ADD DUP5 ADD DUP7 SWAP1 MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND ADD SUB ADD DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x297 JUMPI PUSH2 0x735 SWAP4 PUSH2 0x729 SWAP4 PUSH2 0x11DF JUMPI JUMPDEST POP SWAP2 POP SWAP2 PUSH2 0x101C JUMP JUMPDEST PUSH2 0x11E8 SWAP1 PUSH2 0x185A JUMP JUMPDEST DUP5 PUSH2 0x11D6 JUMP JUMPDEST SWAP2 SWAP4 POP SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1210 DUP6 PUSH2 0x16A7 JUMP JUMPDEST AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD CALLDATALOAD SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP1 SWAP4 SUB PUSH2 0x26C JUMPI PUSH1 0x4 SWAP3 PUSH1 0x1 SWAP3 DUP3 ADD MSTORE PUSH2 0x124D PUSH1 0x40 DUP8 ADD PUSH2 0x1BD3 JUMP JUMPDEST PUSH6 0xFFFFFFFFFFFF DUP1 SWAP2 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x1268 PUSH1 0x60 DUP9 ADD PUSH2 0x1BD3 JUMP JUMPDEST AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP1 SWAP2 ADD SWAP6 ADD SWAP4 ADD SWAP1 POP DUP7 SWAP4 SWAP3 SWAP2 PUSH2 0x1107 JUMP JUMPDEST PUSH2 0x1297 PUSH2 0x1290 DUP3 DUP5 DUP7 PUSH2 0x1ACD JUMP JUMPDEST CALLDATASIZE SWAP2 PUSH2 0x1B5A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 PUSH1 0x60 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x60 DUP5 ADD GT OR PUSH2 0x2A2 JUMPI PUSH1 0x60 DUP3 ADD PUSH1 0x40 MSTORE PUSH0 DUP3 MSTORE PUSH0 PUSH1 0x20 DUP4 ADD MSTORE PUSH0 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD SWAP1 PUSH1 0x60 PUSH1 0x40 DUP3 ADD MLOAD SWAP2 ADD MLOAD PUSH0 BYTE SWAP2 DUP4 MSTORE PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xC0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP2 DUP5 MUL PUSH1 0x4 CALLDATALOAD ADD CALLDATASIZE SUB ADD SLT PUSH2 0x26C JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 PUSH1 0xC0 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xC0 DUP5 ADD GT OR PUSH2 0x2A2 JUMPI PUSH1 0xC0 DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x1352 PUSH1 0x24 PUSH1 0xC0 DUP6 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x16A7 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH2 0x1368 PUSH1 0x44 PUSH1 0xC0 DUP7 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x16A7 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 DUP6 ADD MSTORE PUSH2 0x1382 PUSH1 0x64 PUSH1 0xC0 DUP8 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x16A7 JUMP JUMPDEST PUSH1 0x40 DUP6 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x4 CALLDATALOAD PUSH1 0xC0 DUP8 MUL ADD PUSH1 0x84 DUP2 ADD CALLDATALOAD PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0xA4 DUP2 ADD CALLDATALOAD PUSH1 0x80 DUP8 ADD MSTORE PUSH1 0xC4 ADD CALLDATALOAD PUSH1 0xA0 DUP7 ADD MSTORE DUP4 ADD MLOAD DUP4 MLOAD PUSH1 0x20 SWAP1 SWAP5 ADD MLOAD PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND EXTCODESIZE ISZERO PUSH2 0x26C JUMPI PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP5 PUSH1 0xE4 SWAP5 DUP11 SWAP9 DUP5 SWAP9 PUSH1 0xC4 PUSH1 0xC0 PUSH1 0x40 MLOAD SWAP13 DUP14 SWAP12 DUP13 SWAP11 PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP13 MSTORE AND PUSH1 0x4 DUP12 ADD MSTORE ADDRESS PUSH1 0x24 DUP12 ADD MSTORE PUSH1 0x84 DUP3 DUP3 MUL PUSH1 0x4 CALLDATALOAD ADD ADD CALLDATALOAD PUSH1 0x44 DUP12 ADD MSTORE MUL PUSH1 0x4 CALLDATALOAD ADD ADD CALLDATALOAD PUSH1 0x64 DUP9 ADD MSTORE PUSH1 0x84 DUP8 ADD MSTORE PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xC4 DUP6 ADD MSTORE AND GAS CALL SWAP1 DUP2 PUSH2 0x1582 JUMPI JUMPDEST POP PUSH2 0x1579 JUMPI PUSH2 0x147B PUSH2 0x1BA4 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD AND SWAP1 PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP4 ADD MLOAD AND PUSH1 0x44 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x297 JUMPI PUSH0 SWAP3 PUSH2 0x1544 JUMPI JUMPDEST POP PUSH1 0x60 ADD MLOAD SUB PUSH2 0x150D JUMPI POP PUSH1 0x1 SWAP1 JUMPDEST ADD PUSH2 0xFA9 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x151C JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1571 JUMPI JUMPDEST DUP2 PUSH2 0x1560 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x186E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x26C JUMPI MLOAD SWAP1 PUSH1 0x60 PUSH2 0x14F8 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1553 JUMP JUMPDEST POP PUSH1 0x1 SWAP1 PUSH2 0x1507 JUMP JUMPDEST PUSH2 0x158B SWAP1 PUSH2 0x185A JUMP JUMPDEST DUP8 PUSH2 0x146E JUMP JUMPDEST PUSH32 0xAAAD13F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x26C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x26C JUMPI PUSH2 0x908 PUSH0 PUSH2 0x620 PUSH2 0x8CD PUSH2 0x15DC PUSH2 0x1684 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD96AF07000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x24 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLDATALOAD PUSH1 0x44 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x26C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x26C JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x26C JUMPI JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x26C JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x26C JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x26C JUMPI PUSH1 0x20 DUP1 DUP6 ADD SWAP5 DUP5 PUSH1 0x5 SHL ADD ADD GT PUSH2 0x26C JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD SWAP1 PUSH1 0x20 DUP4 MSTORE DUP4 MLOAD DUP1 SWAP3 MSTORE PUSH1 0x40 DUP4 ADD SWAP3 PUSH1 0x20 PUSH1 0x40 DUP5 PUSH1 0x5 SHL DUP4 ADD ADD SWAP6 ADD SWAP4 PUSH0 SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x1753 JUMPI POP POP POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 DUP5 DUP1 PUSH2 0x178F DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP7 PUSH1 0x1 SWAP7 SUB ADD DUP8 MSTORE DUP11 MLOAD PUSH2 0x16F9 JUMP JUMPDEST SWAP9 ADD SWAP4 ADD SWAP4 ADD SWAP2 SWAP5 SWAP4 SWAP3 SWAP1 PUSH2 0x1743 JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0xA0 SWAP2 ADD SLT PUSH2 0x26C JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x26C JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP2 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH1 0x64 CALLDATALOAD SWAP2 PUSH1 0x84 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x26C JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x80 SWAP2 ADD SLT PUSH2 0x26C JUMPI PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x26C JUMPI SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x64 CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x26C JUMPI PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x26C JUMPI SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2A2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2A2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2A2 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 DUP4 SUB SLT PUSH2 0x26C JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x26C JUMPI ADD DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x26C JUMPI DUP1 MLOAD SWAP1 PUSH2 0x18E1 DUP3 PUSH2 0x1891 JUMP JUMPDEST SWAP3 PUSH2 0x18EF PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x186E JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x26C JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x26C JUMPI PUSH1 0x20 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x26C JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x26C JUMPI SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH0 SWAP1 PUSH32 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 TLOAD AND ISZERO PUSH2 0x1AA8 JUMPI JUMPDEST PUSH32 0x0 SWAP5 DUP6 TLOAD PUSH2 0x1A80 JUMPI PUSH1 0x1 SWAP1 PUSH1 0x1 DUP8 TSTORE PUSH2 0x19CE DUP4 PUSH2 0x1AB5 JUMP JUMPDEST SWAP3 PUSH2 0x19DC PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x186E JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x1F NOT PUSH2 0x19EB DUP3 PUSH2 0x1AB5 JUMP JUMPDEST ADD PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x1A6F JUMPI POP POP PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x1A26 JUMPI POP POP POP POP SWAP1 PUSH0 PUSH2 0x1A1B SWAP4 SWAP3 SWAP6 TSTORE DUP1 TLOAD SWAP2 PUSH2 0x1A1D JUMPI JUMPDEST POP PUSH2 0x1E26 JUMP JUMPDEST JUMP JUMPDEST PUSH0 SWAP1 TSTORE PUSH0 PUSH2 0x1A15 JUMP JUMPDEST DUP1 PUSH2 0x1A53 PUSH0 DUP1 PUSH2 0x1A3B PUSH2 0x1290 DUP10 SWAP7 DUP9 DUP11 PUSH2 0x1ACD JUMP JUMPDEST PUSH1 0x20 DUP2 MLOAD SWAP2 ADD ADDRESS GAS DELEGATECALL PUSH2 0x1A4C PUSH2 0x1BA4 JUMP JUMPDEST SWAP1 ADDRESS PUSH2 0x1EE1 JUMP JUMPDEST PUSH2 0x1A5D DUP3 DUP9 PUSH2 0x1B90 JUMP JUMPDEST MSTORE PUSH2 0x1A68 DUP2 DUP8 PUSH2 0x1B90 JUMP JUMPDEST POP ADD PUSH2 0x19F9 JUMP JUMPDEST DUP1 PUSH1 0x60 PUSH1 0x20 DUP1 SWAP4 DUP10 ADD ADD MSTORE ADD PUSH2 0x19EE JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 POP CALLER DUP2 TSTORE PUSH1 0x1 SWAP2 PUSH2 0x1996 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2A2 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x1B2D JUMPI PUSH1 0x5 SHL DUP2 ADD CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP2 CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x26C JUMPI ADD SWAP1 DUP2 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x26C JUMPI PUSH1 0x20 ADD DUP3 CALLDATASIZE SUB DUP2 SGT PUSH2 0x26C JUMPI SWAP2 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 SWAP2 SWAP3 PUSH2 0x1B66 DUP3 PUSH2 0x1891 JUMP JUMPDEST SWAP2 PUSH2 0x1B74 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x186E JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0x26C JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x1B2D JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x1BCE JUMPI RETURNDATASIZE SWAP1 PUSH2 0x1BB5 DUP3 PUSH2 0x1891 JUMP JUMPDEST SWAP2 PUSH2 0x1BC3 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x186E JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH6 0xFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x26C JUMPI JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x1A80 JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x1C52 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 PUSH0 SWAP1 DUP1 PUSH2 0x1C8E JUMPI JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND DUP2 PUSH32 0x0 AND SWAP6 DUP3 DUP5 GT PUSH2 0x1DF5 JUMPI DUP3 AND SWAP5 DUP2 EXTCODESIZE ISZERO PUSH2 0x26C JUMPI PUSH1 0x84 DUP4 SWAP2 PUSH0 DUP1 SWAP5 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x4 DUP6 ADD MSTORE DUP12 PUSH1 0x24 DUP6 ADD MSTORE DUP9 AND PUSH1 0x44 DUP5 ADD MSTORE DUP10 PUSH1 0x64 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x297 JUMPI PUSH2 0x1DDE JUMPI JUMPDEST POP PUSH1 0x44 DUP3 SWAP4 PUSH1 0x20 SWAP4 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP4 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x1DD2 JUMPI POP PUSH2 0x1DA7 JUMPI JUMPDEST DUP1 DUP1 DUP1 PUSH2 0x1C88 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1DCB JUMPI JUMPDEST PUSH2 0x1DBD DUP2 DUP4 PUSH2 0x186E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x26C JUMPI PUSH0 PUSH2 0x1D9F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1DB3 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x20 SWAP3 POP PUSH2 0x1DEB SWAP1 PUSH2 0x185A JUMP JUMPDEST PUSH1 0x44 PUSH0 SWAP3 POP PUSH2 0x1D53 JUMP JUMPDEST DUP4 PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0xA0 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SELFBALANCE SWAP1 DUP2 ISZERO PUSH2 0x1EDD JUMPI PUSH32 0x0 TLOAD PUSH2 0x1EDD JUMPI DUP2 SELFBALANCE LT PUSH2 0x1EB1 JUMPI PUSH0 DUP1 DUP1 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 SWAP5 AND GAS CALL PUSH2 0x1E81 PUSH2 0x1BA4 JUMP JUMPDEST POP ISZERO PUSH2 0x1E89 JUMPI JUMP JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0xCD78605900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE ADDRESS PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP POP JUMP JUMPDEST SWAP1 PUSH2 0x1EF6 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x1E89 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x1F49 JUMPI JUMPDEST PUSH2 0x1F07 JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x1EFF JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBA 0x27 CODECOPY PUSH22 0x43A77A9B25A3557C69861633E8407221AAC50FCE4ECC PUSH9 0x767F9EB05064736F6C PUSH4 0x4300081B STOP CALLER ","sourceMap":"1151:8386:62:-:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;1151:8386:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1151:8386:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1151:8386:62;;;;;;;;;;;;;;1487:71:66;1151:8386:62;;;;;:::i;:::-;;;;-1:-1:-1;;;1151:8386:62;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;1151:8386:62;;;;1487:71:66;:::i;:::-;1151:8386:62;1487:71:66;409:14:72;;1151:8386:62;;;;;;;-1:-1:-1;1151:8386:62;;;;;;;;;;;;;;-1:-1:-1;1151:8386:62;;;;;;;;;;;-1:-1:-1;1151:8386:62;;;;;;;;;;;;;;2796:83:65;1151:8386:62;;;;-1:-1:-1;1151:8386:62;;;;;;;;;;;;;;;;;-1:-1:-1;1151:8386:62;;;;;;;:::i;:::-;;;;-1:-1:-1;;;1151:8386:62;;;;-1:-1:-1;;;1151:8386:62;;;;;;:::i;:::-;;;;;;;2796:83:65;:::i;:::-;;;3976:12;;3998:18;;;;1151:8386:62;;;;;;;;;;;;;;;;;;409:14:72;1151:8386:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2796:83:65;1151:8386:62;;;;;;;;;;3976:12:65;1151:8386:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1151:8386:62;;;;;;;;;;-1:-1:-1;1151:8386:62;;;-1:-1:-1;1151:8386:62;;-1:-1:-1;1151:8386:62;;;;;;;;;2796:83:65;1151:8386:62;;;;;;;;;;;;;;-1:-1:-1;1151:8386:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1151:8386:62;;;-1:-1:-1;1151:8386:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1151:8386:62;;;;;;;;;;;;;;;;;;-1:-1:-1;1151:8386:62;;;;;-1:-1:-1;1151:8386:62;;;;;;;;;;;;-1:-1:-1;1151:8386:62;;;;;-1:-1:-1;1151:8386:62;;-1:-1:-1;1151:8386:62;;;;;;;;;-1:-1:-1;;;;;1151:8386:62;;;;;;;:::o;:::-;;;;;-1:-1:-1;;1151:8386:62;;;;-1:-1:-1;;;;;1151:8386:62;;;;;;;;;;:::o;1276:306:47:-;;1461:67;1151:8386:62;1461:67:47;1276:306;1151:8386:62;;1461:67:47;;;;;;;1151:8386:62;;;;;;;;;;;;;;;;;-1:-1:-1;;;1151:8386:62;;;;;;;;;;;;;;;-1:-1:-1;1151:8386:62;;;;1461:67:47;;;;;;;;;:::i;:::-;1151:8386:62;1451:78:47;;-1:-1:-1;;1151:8386:62;;;;;;;;;1432:103:47;1461:67;1432:103;;1151:8386:62;;;1461:67:47;1432:103;;;;;:::i;:::-;1151:8386:62;;1405:144:47;;-1:-1:-1;;1405:170:47;;1276:306::o;1151:8386:62:-;;;;-1:-1:-1;1151:8386:62;;;;;-1:-1:-1;1151:8386:62"},"deployedBytecode":{"functionDebugData":{"abi_decode_address_fromMemory":{"entryPoint":6438,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_bytes_calldata_dyn_calldata":{"entryPoint":5832,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_available_length_bytes":{"entryPoint":7002,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_bytes_fromMemory":{"entryPoint":6317,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IERC4626":{"entryPoint":5799,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_contract_IERC4626_19364":{"entryPoint":5764,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_contract_IERC4626t_uint256t_uint256":{"entryPoint":6179,"id":null,"parameterSlots":1,"returnSlots":3},"abi_decode_contract_IERC4626t_uint256t_uint256t_uint256":{"entryPoint":6120,"id":null,"parameterSlots":1,"returnSlots":4},"abi_decode_contract_IERC4626t_uint256t_uint256t_uint256t_address":{"entryPoint":6047,"id":null,"parameterSlots":1,"returnSlots":5},"abi_decode_uint256t_uint256_fromMemory":{"entryPoint":6416,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_uint48":{"entryPoint":7123,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_array_bytes_dyn":{"entryPoint":5918,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bytes":{"entryPoint":5881,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_contract_IERC4626_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_contract_IERC4626_uint256_uint256_uint256_address":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"array_allocation_size_array_bytes_dyn":{"entryPoint":6837,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":6289,"id":null,"parameterSlots":1,"returnSlots":1},"calldata_array_index_access_bytes_calldata_dyn_calldata":{"entryPoint":6861,"id":null,"parameterSlots":3,"returnSlots":2},"extract_returndata":{"entryPoint":7076,"id":null,"parameterSlots":0,"returnSlots":1},"finalize_allocation":{"entryPoint":6254,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_19367":{"entryPoint":6234,"id":null,"parameterSlots":1,"returnSlots":0},"fun_ensureOnlyVault":{"entryPoint":7187,"id":28148,"parameterSlots":0,"returnSlots":0},"fun_nonReentrantBefore":{"entryPoint":7142,"id":9916,"parameterSlots":0,"returnSlots":0},"fun_returnEth":{"entryPoint":7718,"id":18982,"parameterSlots":1,"returnSlots":0},"fun_takeTokenIn":{"entryPoint":7294,"id":19083,"parameterSlots":3,"returnSlots":0},"fun_verifyCallResultFromTarget":{"entryPoint":7905,"id":40673,"parameterSlots":3,"returnSlots":1},"memory_array_index_access_bytes_dyn":{"entryPoint":7056,"id":null,"parameterSlots":2,"returnSlots":1},"modifier_saveSenderAndManageEth":{"entryPoint":6482,"id":18636,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"18582":[{"length":32,"start":6552},{"length":32,"start":7728}],"18585":[{"length":32,"start":49},{"length":32,"start":5728}],"18588":[{"length":32,"start":3693},{"length":32,"start":4196},{"length":32,"start":4491},{"length":32,"start":7334}],"19225":[{"length":32,"start":2467},{"length":32,"start":6488}],"28110":[{"length":32,"start":543},{"length":32,"start":858},{"length":32,"start":1292},{"length":32,"start":1667},{"length":32,"start":1984},{"length":32,"start":2338},{"length":32,"start":3112},{"length":32,"start":3549},{"length":32,"start":7210},{"length":32,"start":7369}]},"linkReferences":{},"object":"6080806040526004361015610081575b50361561001a575f80fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361005957005b7f0540ddf6000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f3560e01c908163107c279f146116365750806313f7bb4d146115b957806319c6989f14610e915780631bbf2e2314610e41578063400f230d14610d3b5780634fe56ed614610b9e578063502383f414610b1e57806354fd4d50146109e15780635e01eb5a1461098f578063662727cc14610850578063a390260414610739578063ac9650d8146106f1578063b365a3c2146105a0578063d96af07014610480578063d9f70869146102cf5763e0fefe351461013d575f61000f565b3461026c5761014b36611823565b73ffffffffffffffffffffffffffffffffffffffff9182604051947fa3902604000000000000000000000000000000000000000000000000000000006020870152166024850152604484015260648301526064825260a082019082821067ffffffffffffffff8311176102a257815f91816040527fedfa3568000000000000000000000000000000000000000000000000000000008252602060a486015281837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608761021a60c48201826116f9565b0301927f0000000000000000000000000000000000000000000000000000000000000000165af1918215610297575f92610270575b505060208180518101031261026c57602080910151604051908152f35b5f80fd5b610290925060a0903d90815f853e610288828561186e565b0101906118ad565b5f8061024f565b6040513d5f823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b3461026c576102dd3661179f565b91906102ea949394611be6565b6102f2611c13565b6040517f653eb3b000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201879052604482018490526064820192909252838216608482015260209591937f00000000000000000000000000000000000000000000000000000000000000008516929091878160a4815f885af19687156102975788915f9861044d575b50908692916024604051809581937f4afbaf5a00000000000000000000000000000000000000000000000000000000835216978860048301525afa958615610297576103f5966103f0935f91610420575b501683611c7e565b611c7e565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051908152f35b61044091508a3d8c11610446575b610438818361186e565b810190611926565b8a6103e8565b503d61042e565b828194939299503d8311610479575b610466818361186e565b8101031261026c57905195879086610397565b503d61045c565b3461026c57604060031936011261026c576084604061049d611684565b6104a5611be6565b6104ad611c13565b73ffffffffffffffffffffffffffffffffffffffff9283915f845195869485937febc7955c00000000000000000000000000000000000000000000000000000000855216600484015260243560248401528160448401528160648401527f0000000000000000000000000000000000000000000000000000000000000000165af1908115610297576040915f915f91610571575b505f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d82519182526020820152f35b90506105939150823d8411610599575b61058b818361186e565b810190611910565b83610541565b503d610581565b3461026c576106695f61062061062e6105b8366117e8565b6040517fd9f7086900000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff90941660248501526044840192909252606483015260848201523360a482015291829060c4820190565b03601f19810183528261186e565b604051809381927f48c894910000000000000000000000000000000000000000000000000000000083526020600484015260248301906116f9565b03818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1908115610297575f916106cf575b5060208180518101031261026c57602080910151604051908152f35b6106eb91503d805f833e6106e3818361186e565b8101906118ad565b816106b3565b602060031936011261026c5760043567ffffffffffffffff811161026c576107296107236107359236906004016116c8565b90611952565b6040519182918261171e565b0390f35b3461026c5760a4602061074b36611823565b91610757949194611be6565b61075f611c13565b5f73ffffffffffffffffffffffffffffffffffffffff809460405197889687957f653eb3b0000000000000000000000000000000000000000000000000000000008752166004860152602485015260448401528160648401523060848401527f0000000000000000000000000000000000000000000000000000000000000000165af18015610297575f9061081d575b6020905f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051908152f35b506020813d602011610848575b816108376020938361186e565b8101031261026c57602090516107ef565b3d915061082a565b3461026c57604060031936011261026c576109085f6106206108cd610873611684565b6040517f400f230d00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091166024808301919091523560448201529182906064820190565b604051809381927fedfa35680000000000000000000000000000000000000000000000000000000083526020600484015260248301906116f9565b03818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af190811561029757604091610969915f91610975575b5060208082518301019101611910565b82519182526020820152f35b61098991503d805f833e6106e3818361186e565b83610959565b3461026c575f60031936011261026c5760207f00000000000000000000000000000000000000000000000000000000000000005c73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b3461026c575f60031936011261026c576040515f5f549060018260011c9160018416918215610b14575b6020948585108414610ae75785879486865291825f14610aa9575050600114610a50575b50610a3c9250038361186e565b6107356040519282849384528301906116f9565b5f808052859250907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b858310610a91575050610a3c935082010185610a2f565b80548389018501528794508693909201918101610a7a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685820152610a3c95151560051b8501019250879150610a2f9050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f1692610a0b565b3461026c576109085f61062061062e610b36366117e8565b6040517f4fe56ed600000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff90941660248501526044840192909252606483015260848201523360a482015291829060c4820190565b3461026c57610bac3661179f565b93919092610bb8611be6565b610bc0611c13565b604080517fe2a92b1a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482019390935260448101939093526064830194909452848116608483015290927f00000000000000000000000000000000000000000000000000000000000000008216908460a4815f855af1928315610297575f945f94610d0e575b5090602083926024604051809681937f4afbaf5a00000000000000000000000000000000000000000000000000000000835216948560048301525afa958615610297576103f0868694604099610cc0975f91610cef57501683611c7e565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d82519182526020820152f35b610d08915060203d60201161044657610438818361186e565b8b6103e8565b602095508392919450610d2f9060403d6040116105995761058b818361186e565b95909594919250610c62565b3461026c57604060031936011261026c5760a46040610d58611684565b610d60611be6565b610d68611c13565b73ffffffffffffffffffffffffffffffffffffffff9283915f845195869485937fe2a92b1a0000000000000000000000000000000000000000000000000000000085521660048401526fffffffffffffffffffffffffffffffff806024850152604484015260243560648401523060848401527f0000000000000000000000000000000000000000000000000000000000000000165af1908115610297576040915f915f9161057157505f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d82519182526020820152f35b3461026c575f60031936011261026c57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b60a060031936011261026c5767ffffffffffffffff6004351161026c5736602360043501121561026c5767ffffffffffffffff600435600401351161026c5736602460c0600435600401350260043501011161026c5760243567ffffffffffffffff811161026c57610f079036906004016116c8565b67ffffffffffffffff6044351161026c5760606003196044353603011261026c5767ffffffffffffffff6064351161026c5736602360643501121561026c5767ffffffffffffffff606435600401351161026c573660246064356004013560643501011161026c5760843567ffffffffffffffff811161026c57610f8f9036906004016116c8565b929091610f9a611be6565b806004356004013503611591575f5b60043560040135811061128257505050604435600401357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd60443536030181121561026c57806044350160048101359067ffffffffffffffff821161026c5760248260071b360391011361026c5761104c575b61073561072984845f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d611952565b9173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b1561026c57604051927f2a2d80d10000000000000000000000000000000000000000000000000000000084523360048501526060602485015260c484019060443501602481019167ffffffffffffffff60048301351161026c57600482013560071b3603831361026c576060606487015260048201359052849160e48301915f905b600481013582106111ee57505050906020815f9373ffffffffffffffffffffffffffffffffffffffff61113e6024604435016116a7565b1660848301526044803581013560a4840152600319838303019083015260643560048101358083529060240184830137600460643501358181018401869052601f01601f191601030181837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af19182156102975761073593610729936111df575b5091509161101c565b6111e89061185a565b846111d6565b9193509173ffffffffffffffffffffffffffffffffffffffff611210856116a7565b1681526020808501359173ffffffffffffffffffffffffffffffffffffffff831680930361026c5760049260019282015261124d60408701611bd3565b65ffffffffffff809116604083015261126860608801611bd3565b166060820152608080910195019301905086939291611107565b611297611290828486611acd565b3691611b5a565b6040519081606081011067ffffffffffffffff6060840111176102a257606082016040525f82525f60208301525f6040830152602081015190606060408201519101515f1a9183526020830152604082015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc818402600435013603011261026c57604051908160c081011067ffffffffffffffff60c0840111176102a25760c08201604052611352602460c0850260043501016116a7565b808352611368604460c0860260043501016116a7565b90816020850152611382606460c0870260043501016116a7565b60408581019190915260043560c08702016084810135606087015260a4810135608087015260c4013560a0860152830151835160209094015160ff919091169273ffffffffffffffffffffffffffffffffffffffff83163b1561026c575f73ffffffffffffffffffffffffffffffffffffffff809460e4948a98849860c460c06040519c8d9b8c9a7fd505accf000000000000000000000000000000000000000000000000000000008c521660048b01523060248b0152608482820260043501013560448b0152026004350101356064880152608487015260a486015260c4850152165af19081611582575b506115795761147b611ba4565b9073ffffffffffffffffffffffffffffffffffffffff81511690602073ffffffffffffffffffffffffffffffffffffffff81830151166044604051809581937fdd62ed3e00000000000000000000000000000000000000000000000000000000835260048301523060248301525afa918215610297575f92611544575b50606001510361150d57506001905b01610fa9565b80511561151c57805190602001fd5b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b9091506020813d602011611571575b816115606020938361186e565b8101031261026c57519060606114f8565b3d9150611553565b50600190611507565b61158b9061185a565b8761146e565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461026c57604060031936011261026c576109085f6106206108cd6115dc611684565b6040517fd96af07000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091166024808301919091523560448201529182906064820190565b3461026c575f60031936011261026c5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361026c57565b359073ffffffffffffffffffffffffffffffffffffffff8216820361026c57565b9181601f8401121561026c5782359167ffffffffffffffff831161026c576020808501948460051b01011161026c57565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b8483106117535750505050505090565b909192939495848061178f837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528a516116f9565b9801930193019194939290611743565b60031960a091011261026c5773ffffffffffffffffffffffffffffffffffffffff600435818116810361026c5791602435916044359160643591608435908116810361026c5790565b600319608091011261026c5760043573ffffffffffffffffffffffffffffffffffffffff8116810361026c5790602435906044359060643590565b600319606091011261026c5760043573ffffffffffffffffffffffffffffffffffffffff8116810361026c57906024359060443590565b67ffffffffffffffff81116102a257604052565b90601f601f19910116810190811067ffffffffffffffff8211176102a257604052565b67ffffffffffffffff81116102a257601f01601f191660200190565b60208183031261026c5780519067ffffffffffffffff821161026c570181601f8201121561026c578051906118e182611891565b926118ef604051948561186e565b8284526020838301011161026c57815f9260208093018386015e8301015290565b919082604091031261026c576020825192015190565b9081602091031261026c575173ffffffffffffffffffffffffffffffffffffffff8116810361026c5790565b91905f907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff825c1615611aa8575b7f000000000000000000000000000000000000000000000000000000000000000094855c611a80576001906001875d6119ce83611ab5565b926119dc604051948561186e565b808452601f196119eb82611ab5565b015f5b818110611a6f5750505f5b818110611a265750505050905f611a1b9392955d805c91611a1d575b50611e26565b565b5f905d5f611a15565b80611a535f80611a3b6112908996888a611acd565b602081519101305af4611a4c611ba4565b9030611ee1565b611a5d8288611b90565b52611a688187611b90565b50016119f9565b8060606020809389010152016119ee565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b915033815d600191611996565b67ffffffffffffffff81116102a25760051b60200190565b9190811015611b2d5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561026c57019081359167ffffffffffffffff831161026c57602001823603811361026c579190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b929192611b6682611891565b91611b74604051938461186e565b82948184528183011161026c578281602093845f960137010152565b8051821015611b2d5760209160051b010190565b3d15611bce573d90611bb582611891565b91611bc3604051938461186e565b82523d5f602084013e565b606090565b359065ffffffffffff8216820361026c57565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c611a80576001905d565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303611c5257565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b90915f9080611c8e575b50505050565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016817f00000000000000000000000000000000000000000000000000000000000000001695828411611df557821694813b1561026c57608483915f809460405196879586947f36c785160000000000000000000000000000000000000000000000000000000086521660048501528b6024850152881660448401528960648401525af1801561029757611dde575b506044829360209360405196879485937f15afd409000000000000000000000000000000000000000000000000000000008552600485015260248401525af1908115611dd25750611da7575b808080611c88565b602090813d8311611dcb575b611dbd818361186e565b8101031261026c575f611d9f565b503d611db3565b604051903d90823e3d90fd5b60209250611deb9061185a565b60445f9250611d53565b837f6dfcc650000000000000000000000000000000000000000000000000000000005f5260a060045260245260445ffd5b47908115611edd577f00000000000000000000000000000000000000000000000000000000000000005c611edd57814710611eb1575f80809373ffffffffffffffffffffffffffffffffffffffff8294165af1611e81611ba4565b5015611e8957565b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fcd786059000000000000000000000000000000000000000000000000000000005f523060045260245ffd5b5050565b90611ef65750805115611e8957805190602001fd5b81511580611f49575b611f07575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15611eff56fea2646970667358221220ba27397543a77a9b25a3557c69861633e8407221aac50fce4ecc68767f9eb05064736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x81 JUMPI JUMPDEST POP CALLDATASIZE ISZERO PUSH2 0x1A JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x59 JUMPI STOP JUMPDEST PUSH32 0x540DDF600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x107C279F EQ PUSH2 0x1636 JUMPI POP DUP1 PUSH4 0x13F7BB4D EQ PUSH2 0x15B9 JUMPI DUP1 PUSH4 0x19C6989F EQ PUSH2 0xE91 JUMPI DUP1 PUSH4 0x1BBF2E23 EQ PUSH2 0xE41 JUMPI DUP1 PUSH4 0x400F230D EQ PUSH2 0xD3B JUMPI DUP1 PUSH4 0x4FE56ED6 EQ PUSH2 0xB9E JUMPI DUP1 PUSH4 0x502383F4 EQ PUSH2 0xB1E JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x9E1 JUMPI DUP1 PUSH4 0x5E01EB5A EQ PUSH2 0x98F JUMPI DUP1 PUSH4 0x662727CC EQ PUSH2 0x850 JUMPI DUP1 PUSH4 0xA3902604 EQ PUSH2 0x739 JUMPI DUP1 PUSH4 0xAC9650D8 EQ PUSH2 0x6F1 JUMPI DUP1 PUSH4 0xB365A3C2 EQ PUSH2 0x5A0 JUMPI DUP1 PUSH4 0xD96AF070 EQ PUSH2 0x480 JUMPI DUP1 PUSH4 0xD9F70869 EQ PUSH2 0x2CF JUMPI PUSH4 0xE0FEFE35 EQ PUSH2 0x13D JUMPI PUSH0 PUSH2 0xF JUMP JUMPDEST CALLVALUE PUSH2 0x26C JUMPI PUSH2 0x14B CALLDATASIZE PUSH2 0x1823 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 PUSH1 0x40 MLOAD SWAP5 PUSH32 0xA390260400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP8 ADD MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x64 DUP3 MSTORE PUSH1 0xA0 DUP3 ADD SWAP1 DUP3 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x2A2 JUMPI DUP2 PUSH0 SWAP2 DUP2 PUSH1 0x40 MSTORE PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 PUSH1 0xA4 DUP7 ADD MSTORE DUP2 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 DUP8 PUSH2 0x21A PUSH1 0xC4 DUP3 ADD DUP3 PUSH2 0x16F9 JUMP JUMPDEST SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x297 JUMPI PUSH0 SWAP3 PUSH2 0x270 JUMPI JUMPDEST POP POP PUSH1 0x20 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x26C JUMPI PUSH1 0x20 DUP1 SWAP2 ADD MLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x290 SWAP3 POP PUSH1 0xA0 SWAP1 RETURNDATASIZE SWAP1 DUP2 PUSH0 DUP6 RETURNDATACOPY PUSH2 0x288 DUP3 DUP6 PUSH2 0x186E JUMP JUMPDEST ADD ADD SWAP1 PUSH2 0x18AD JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x24F JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x26C JUMPI PUSH2 0x2DD CALLDATASIZE PUSH2 0x179F JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x2EA SWAP5 SWAP4 SWAP5 PUSH2 0x1BE6 JUMP JUMPDEST PUSH2 0x2F2 PUSH2 0x1C13 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x653EB3B000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP8 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x64 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP4 DUP3 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0x20 SWAP6 SWAP2 SWAP4 PUSH32 0x0 DUP6 AND SWAP3 SWAP1 SWAP2 DUP8 DUP2 PUSH1 0xA4 DUP2 PUSH0 DUP9 GAS CALL SWAP7 DUP8 ISZERO PUSH2 0x297 JUMPI DUP9 SWAP2 PUSH0 SWAP9 PUSH2 0x44D JUMPI JUMPDEST POP SWAP1 DUP7 SWAP3 SWAP2 PUSH1 0x24 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH32 0x4AFBAF5A00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND SWAP8 DUP9 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP6 DUP7 ISZERO PUSH2 0x297 JUMPI PUSH2 0x3F5 SWAP7 PUSH2 0x3F0 SWAP4 PUSH0 SWAP2 PUSH2 0x420 JUMPI JUMPDEST POP AND DUP4 PUSH2 0x1C7E JUMP JUMPDEST PUSH2 0x1C7E JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x440 SWAP2 POP DUP11 RETURNDATASIZE DUP13 GT PUSH2 0x446 JUMPI JUMPDEST PUSH2 0x438 DUP2 DUP4 PUSH2 0x186E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1926 JUMP JUMPDEST DUP11 PUSH2 0x3E8 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x42E JUMP JUMPDEST DUP3 DUP2 SWAP5 SWAP4 SWAP3 SWAP10 POP RETURNDATASIZE DUP4 GT PUSH2 0x479 JUMPI JUMPDEST PUSH2 0x466 DUP2 DUP4 PUSH2 0x186E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x26C JUMPI SWAP1 MLOAD SWAP6 DUP8 SWAP1 DUP7 PUSH2 0x397 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x45C JUMP JUMPDEST CALLVALUE PUSH2 0x26C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x26C JUMPI PUSH1 0x84 PUSH1 0x40 PUSH2 0x49D PUSH2 0x1684 JUMP JUMPDEST PUSH2 0x4A5 PUSH2 0x1BE6 JUMP JUMPDEST PUSH2 0x4AD PUSH2 0x1C13 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 SWAP2 PUSH0 DUP5 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xEBC7955C00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x24 DUP5 ADD MSTORE DUP2 PUSH1 0x44 DUP5 ADD MSTORE DUP2 PUSH1 0x64 DUP5 ADD MSTORE PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x297 JUMPI PUSH1 0x40 SWAP2 PUSH0 SWAP2 PUSH0 SWAP2 PUSH2 0x571 JUMPI JUMPDEST POP PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST SWAP1 POP PUSH2 0x593 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x599 JUMPI JUMPDEST PUSH2 0x58B DUP2 DUP4 PUSH2 0x186E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1910 JUMP JUMPDEST DUP4 PUSH2 0x541 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x581 JUMP JUMPDEST CALLVALUE PUSH2 0x26C JUMPI PUSH2 0x669 PUSH0 PUSH2 0x620 PUSH2 0x62E PUSH2 0x5B8 CALLDATASIZE PUSH2 0x17E8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD9F7086900000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP5 AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 ADD MSTORE CALLER PUSH1 0xA4 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 PUSH1 0xC4 DUP3 ADD SWAP1 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x186E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x16F9 JUMP JUMPDEST SUB DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x297 JUMPI PUSH0 SWAP2 PUSH2 0x6CF JUMPI JUMPDEST POP PUSH1 0x20 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x26C JUMPI PUSH1 0x20 DUP1 SWAP2 ADD MLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x6EB SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x6E3 DUP2 DUP4 PUSH2 0x186E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x18AD JUMP JUMPDEST DUP2 PUSH2 0x6B3 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x26C JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x26C JUMPI PUSH2 0x729 PUSH2 0x723 PUSH2 0x735 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x16C8 JUMP JUMPDEST SWAP1 PUSH2 0x1952 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x171E JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x26C JUMPI PUSH1 0xA4 PUSH1 0x20 PUSH2 0x74B CALLDATASIZE PUSH2 0x1823 JUMP JUMPDEST SWAP2 PUSH2 0x757 SWAP5 SWAP2 SWAP5 PUSH2 0x1BE6 JUMP JUMPDEST PUSH2 0x75F PUSH2 0x1C13 JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP5 PUSH1 0x40 MLOAD SWAP8 DUP9 SWAP7 DUP8 SWAP6 PUSH32 0x653EB3B000000000000000000000000000000000000000000000000000000000 DUP8 MSTORE AND PUSH1 0x4 DUP7 ADD MSTORE PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE DUP2 PUSH1 0x64 DUP5 ADD MSTORE ADDRESS PUSH1 0x84 DUP5 ADD MSTORE PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x297 JUMPI PUSH0 SWAP1 PUSH2 0x81D JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x848 JUMPI JUMPDEST DUP2 PUSH2 0x837 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x186E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x26C JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH2 0x7EF JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x82A JUMP JUMPDEST CALLVALUE PUSH2 0x26C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x26C JUMPI PUSH2 0x908 PUSH0 PUSH2 0x620 PUSH2 0x8CD PUSH2 0x873 PUSH2 0x1684 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x400F230D00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x24 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLDATALOAD PUSH1 0x44 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x16F9 JUMP JUMPDEST SUB DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x297 JUMPI PUSH1 0x40 SWAP2 PUSH2 0x969 SWAP2 PUSH0 SWAP2 PUSH2 0x975 JUMPI JUMPDEST POP PUSH1 0x20 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x1910 JUMP JUMPDEST DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH2 0x989 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x6E3 DUP2 DUP4 PUSH2 0x186E JUMP JUMPDEST DUP4 PUSH2 0x959 JUMP JUMPDEST CALLVALUE PUSH2 0x26C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x26C JUMPI PUSH1 0x20 PUSH32 0x0 TLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x26C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x26C JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH0 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0xB14 JUMPI JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP6 LT DUP5 EQ PUSH2 0xAE7 JUMPI DUP6 DUP8 SWAP5 DUP7 DUP7 MSTORE SWAP2 DUP3 PUSH0 EQ PUSH2 0xAA9 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xA50 JUMPI JUMPDEST POP PUSH2 0xA3C SWAP3 POP SUB DUP4 PUSH2 0x186E JUMP JUMPDEST PUSH2 0x735 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x16F9 JUMP JUMPDEST PUSH0 DUP1 DUP1 MSTORE DUP6 SWAP3 POP SWAP1 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP6 DUP4 LT PUSH2 0xA91 JUMPI POP POP PUSH2 0xA3C SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0xA2F JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0xA7A JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0xA3C SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0xA2F SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0xA0B JUMP JUMPDEST CALLVALUE PUSH2 0x26C JUMPI PUSH2 0x908 PUSH0 PUSH2 0x620 PUSH2 0x62E PUSH2 0xB36 CALLDATASIZE PUSH2 0x17E8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4FE56ED600000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP5 AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 ADD MSTORE CALLER PUSH1 0xA4 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 PUSH1 0xC4 DUP3 ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x26C JUMPI PUSH2 0xBAC CALLDATASIZE PUSH2 0x179F JUMP JUMPDEST SWAP4 SWAP2 SWAP1 SWAP3 PUSH2 0xBB8 PUSH2 0x1BE6 JUMP JUMPDEST PUSH2 0xBC0 PUSH2 0x1C13 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xE2A92B1A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x44 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x64 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP5 DUP2 AND PUSH1 0x84 DUP4 ADD MSTORE SWAP1 SWAP3 PUSH32 0x0 DUP3 AND SWAP1 DUP5 PUSH1 0xA4 DUP2 PUSH0 DUP6 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x297 JUMPI PUSH0 SWAP5 PUSH0 SWAP5 PUSH2 0xD0E JUMPI JUMPDEST POP SWAP1 PUSH1 0x20 DUP4 SWAP3 PUSH1 0x24 PUSH1 0x40 MLOAD DUP1 SWAP7 DUP2 SWAP4 PUSH32 0x4AFBAF5A00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND SWAP5 DUP6 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP6 DUP7 ISZERO PUSH2 0x297 JUMPI PUSH2 0x3F0 DUP7 DUP7 SWAP5 PUSH1 0x40 SWAP10 PUSH2 0xCC0 SWAP8 PUSH0 SWAP2 PUSH2 0xCEF JUMPI POP AND DUP4 PUSH2 0x1C7E JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH2 0xD08 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x446 JUMPI PUSH2 0x438 DUP2 DUP4 PUSH2 0x186E JUMP JUMPDEST DUP12 PUSH2 0x3E8 JUMP JUMPDEST PUSH1 0x20 SWAP6 POP DUP4 SWAP3 SWAP2 SWAP5 POP PUSH2 0xD2F SWAP1 PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x599 JUMPI PUSH2 0x58B DUP2 DUP4 PUSH2 0x186E JUMP JUMPDEST SWAP6 SWAP1 SWAP6 SWAP5 SWAP2 SWAP3 POP PUSH2 0xC62 JUMP JUMPDEST CALLVALUE PUSH2 0x26C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x26C JUMPI PUSH1 0xA4 PUSH1 0x40 PUSH2 0xD58 PUSH2 0x1684 JUMP JUMPDEST PUSH2 0xD60 PUSH2 0x1BE6 JUMP JUMPDEST PUSH2 0xD68 PUSH2 0x1C13 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 SWAP2 PUSH0 DUP5 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xE2A92B1A00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x64 DUP5 ADD MSTORE ADDRESS PUSH1 0x84 DUP5 ADD MSTORE PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x297 JUMPI PUSH1 0x40 SWAP2 PUSH0 SWAP2 PUSH0 SWAP2 PUSH2 0x571 JUMPI POP PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x26C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x26C JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x26C JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD GT PUSH2 0x26C JUMPI CALLDATASIZE PUSH1 0x23 PUSH1 0x4 CALLDATALOAD ADD SLT ISZERO PUSH2 0x26C JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD GT PUSH2 0x26C JUMPI CALLDATASIZE PUSH1 0x24 PUSH1 0xC0 PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD MUL PUSH1 0x4 CALLDATALOAD ADD ADD GT PUSH2 0x26C JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x26C JUMPI PUSH2 0xF07 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x16C8 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD GT PUSH2 0x26C JUMPI PUSH1 0x60 PUSH1 0x3 NOT PUSH1 0x44 CALLDATALOAD CALLDATASIZE SUB ADD SLT PUSH2 0x26C JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD GT PUSH2 0x26C JUMPI CALLDATASIZE PUSH1 0x23 PUSH1 0x64 CALLDATALOAD ADD SLT ISZERO PUSH2 0x26C JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD GT PUSH2 0x26C JUMPI CALLDATASIZE PUSH1 0x24 PUSH1 0x64 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD PUSH1 0x64 CALLDATALOAD ADD ADD GT PUSH2 0x26C JUMPI PUSH1 0x84 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x26C JUMPI PUSH2 0xF8F SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x16C8 JUMP JUMPDEST SWAP3 SWAP1 SWAP2 PUSH2 0xF9A PUSH2 0x1BE6 JUMP JUMPDEST DUP1 PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD SUB PUSH2 0x1591 JUMPI PUSH0 JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD DUP2 LT PUSH2 0x1282 JUMPI POP POP POP PUSH1 0x44 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD PUSH1 0x44 CALLDATALOAD CALLDATASIZE SUB ADD DUP2 SLT ISZERO PUSH2 0x26C JUMPI DUP1 PUSH1 0x44 CALLDATALOAD ADD PUSH1 0x4 DUP2 ADD CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x26C JUMPI PUSH1 0x24 DUP3 PUSH1 0x7 SHL CALLDATASIZE SUB SWAP2 ADD SGT PUSH2 0x26C JUMPI PUSH2 0x104C JUMPI JUMPDEST PUSH2 0x735 PUSH2 0x729 DUP5 DUP5 PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH2 0x1952 JUMP JUMPDEST SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x26C JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH32 0x2A2D80D100000000000000000000000000000000000000000000000000000000 DUP5 MSTORE CALLER PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x60 PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0xC4 DUP5 ADD SWAP1 PUSH1 0x44 CALLDATALOAD ADD PUSH1 0x24 DUP2 ADD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 DUP4 ADD CALLDATALOAD GT PUSH2 0x26C JUMPI PUSH1 0x4 DUP3 ADD CALLDATALOAD PUSH1 0x7 SHL CALLDATASIZE SUB DUP4 SGT PUSH2 0x26C JUMPI PUSH1 0x60 PUSH1 0x64 DUP8 ADD MSTORE PUSH1 0x4 DUP3 ADD CALLDATALOAD SWAP1 MSTORE DUP5 SWAP2 PUSH1 0xE4 DUP4 ADD SWAP2 PUSH0 SWAP1 JUMPDEST PUSH1 0x4 DUP2 ADD CALLDATALOAD DUP3 LT PUSH2 0x11EE JUMPI POP POP POP SWAP1 PUSH1 0x20 DUP2 PUSH0 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x113E PUSH1 0x24 PUSH1 0x44 CALLDATALOAD ADD PUSH2 0x16A7 JUMP JUMPDEST AND PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0x44 DUP1 CALLDATALOAD DUP2 ADD CALLDATALOAD PUSH1 0xA4 DUP5 ADD MSTORE PUSH1 0x3 NOT DUP4 DUP4 SUB ADD SWAP1 DUP4 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x4 DUP2 ADD CALLDATALOAD DUP1 DUP4 MSTORE SWAP1 PUSH1 0x24 ADD DUP5 DUP4 ADD CALLDATACOPY PUSH1 0x4 PUSH1 0x64 CALLDATALOAD ADD CALLDATALOAD DUP2 DUP2 ADD DUP5 ADD DUP7 SWAP1 MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND ADD SUB ADD DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x297 JUMPI PUSH2 0x735 SWAP4 PUSH2 0x729 SWAP4 PUSH2 0x11DF JUMPI JUMPDEST POP SWAP2 POP SWAP2 PUSH2 0x101C JUMP JUMPDEST PUSH2 0x11E8 SWAP1 PUSH2 0x185A JUMP JUMPDEST DUP5 PUSH2 0x11D6 JUMP JUMPDEST SWAP2 SWAP4 POP SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1210 DUP6 PUSH2 0x16A7 JUMP JUMPDEST AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD CALLDATALOAD SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP1 SWAP4 SUB PUSH2 0x26C JUMPI PUSH1 0x4 SWAP3 PUSH1 0x1 SWAP3 DUP3 ADD MSTORE PUSH2 0x124D PUSH1 0x40 DUP8 ADD PUSH2 0x1BD3 JUMP JUMPDEST PUSH6 0xFFFFFFFFFFFF DUP1 SWAP2 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x1268 PUSH1 0x60 DUP9 ADD PUSH2 0x1BD3 JUMP JUMPDEST AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP1 SWAP2 ADD SWAP6 ADD SWAP4 ADD SWAP1 POP DUP7 SWAP4 SWAP3 SWAP2 PUSH2 0x1107 JUMP JUMPDEST PUSH2 0x1297 PUSH2 0x1290 DUP3 DUP5 DUP7 PUSH2 0x1ACD JUMP JUMPDEST CALLDATASIZE SWAP2 PUSH2 0x1B5A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 PUSH1 0x60 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x60 DUP5 ADD GT OR PUSH2 0x2A2 JUMPI PUSH1 0x60 DUP3 ADD PUSH1 0x40 MSTORE PUSH0 DUP3 MSTORE PUSH0 PUSH1 0x20 DUP4 ADD MSTORE PUSH0 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD SWAP1 PUSH1 0x60 PUSH1 0x40 DUP3 ADD MLOAD SWAP2 ADD MLOAD PUSH0 BYTE SWAP2 DUP4 MSTORE PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xC0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP2 DUP5 MUL PUSH1 0x4 CALLDATALOAD ADD CALLDATASIZE SUB ADD SLT PUSH2 0x26C JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 PUSH1 0xC0 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xC0 DUP5 ADD GT OR PUSH2 0x2A2 JUMPI PUSH1 0xC0 DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x1352 PUSH1 0x24 PUSH1 0xC0 DUP6 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x16A7 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH2 0x1368 PUSH1 0x44 PUSH1 0xC0 DUP7 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x16A7 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 DUP6 ADD MSTORE PUSH2 0x1382 PUSH1 0x64 PUSH1 0xC0 DUP8 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x16A7 JUMP JUMPDEST PUSH1 0x40 DUP6 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x4 CALLDATALOAD PUSH1 0xC0 DUP8 MUL ADD PUSH1 0x84 DUP2 ADD CALLDATALOAD PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0xA4 DUP2 ADD CALLDATALOAD PUSH1 0x80 DUP8 ADD MSTORE PUSH1 0xC4 ADD CALLDATALOAD PUSH1 0xA0 DUP7 ADD MSTORE DUP4 ADD MLOAD DUP4 MLOAD PUSH1 0x20 SWAP1 SWAP5 ADD MLOAD PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND EXTCODESIZE ISZERO PUSH2 0x26C JUMPI PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP5 PUSH1 0xE4 SWAP5 DUP11 SWAP9 DUP5 SWAP9 PUSH1 0xC4 PUSH1 0xC0 PUSH1 0x40 MLOAD SWAP13 DUP14 SWAP12 DUP13 SWAP11 PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP13 MSTORE AND PUSH1 0x4 DUP12 ADD MSTORE ADDRESS PUSH1 0x24 DUP12 ADD MSTORE PUSH1 0x84 DUP3 DUP3 MUL PUSH1 0x4 CALLDATALOAD ADD ADD CALLDATALOAD PUSH1 0x44 DUP12 ADD MSTORE MUL PUSH1 0x4 CALLDATALOAD ADD ADD CALLDATALOAD PUSH1 0x64 DUP9 ADD MSTORE PUSH1 0x84 DUP8 ADD MSTORE PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xC4 DUP6 ADD MSTORE AND GAS CALL SWAP1 DUP2 PUSH2 0x1582 JUMPI JUMPDEST POP PUSH2 0x1579 JUMPI PUSH2 0x147B PUSH2 0x1BA4 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD AND SWAP1 PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP4 ADD MLOAD AND PUSH1 0x44 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x297 JUMPI PUSH0 SWAP3 PUSH2 0x1544 JUMPI JUMPDEST POP PUSH1 0x60 ADD MLOAD SUB PUSH2 0x150D JUMPI POP PUSH1 0x1 SWAP1 JUMPDEST ADD PUSH2 0xFA9 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x151C JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1571 JUMPI JUMPDEST DUP2 PUSH2 0x1560 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x186E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x26C JUMPI MLOAD SWAP1 PUSH1 0x60 PUSH2 0x14F8 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1553 JUMP JUMPDEST POP PUSH1 0x1 SWAP1 PUSH2 0x1507 JUMP JUMPDEST PUSH2 0x158B SWAP1 PUSH2 0x185A JUMP JUMPDEST DUP8 PUSH2 0x146E JUMP JUMPDEST PUSH32 0xAAAD13F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x26C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x26C JUMPI PUSH2 0x908 PUSH0 PUSH2 0x620 PUSH2 0x8CD PUSH2 0x15DC PUSH2 0x1684 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD96AF07000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x24 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLDATALOAD PUSH1 0x44 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x26C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x26C JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x26C JUMPI JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x26C JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x26C JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x26C JUMPI PUSH1 0x20 DUP1 DUP6 ADD SWAP5 DUP5 PUSH1 0x5 SHL ADD ADD GT PUSH2 0x26C JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD SWAP1 PUSH1 0x20 DUP4 MSTORE DUP4 MLOAD DUP1 SWAP3 MSTORE PUSH1 0x40 DUP4 ADD SWAP3 PUSH1 0x20 PUSH1 0x40 DUP5 PUSH1 0x5 SHL DUP4 ADD ADD SWAP6 ADD SWAP4 PUSH0 SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x1753 JUMPI POP POP POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 DUP5 DUP1 PUSH2 0x178F DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP7 PUSH1 0x1 SWAP7 SUB ADD DUP8 MSTORE DUP11 MLOAD PUSH2 0x16F9 JUMP JUMPDEST SWAP9 ADD SWAP4 ADD SWAP4 ADD SWAP2 SWAP5 SWAP4 SWAP3 SWAP1 PUSH2 0x1743 JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0xA0 SWAP2 ADD SLT PUSH2 0x26C JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x26C JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP2 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH1 0x64 CALLDATALOAD SWAP2 PUSH1 0x84 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x26C JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x80 SWAP2 ADD SLT PUSH2 0x26C JUMPI PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x26C JUMPI SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x64 CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x26C JUMPI PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x26C JUMPI SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2A2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2A2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2A2 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 DUP4 SUB SLT PUSH2 0x26C JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x26C JUMPI ADD DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x26C JUMPI DUP1 MLOAD SWAP1 PUSH2 0x18E1 DUP3 PUSH2 0x1891 JUMP JUMPDEST SWAP3 PUSH2 0x18EF PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x186E JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x26C JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x26C JUMPI PUSH1 0x20 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x26C JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x26C JUMPI SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH0 SWAP1 PUSH32 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 TLOAD AND ISZERO PUSH2 0x1AA8 JUMPI JUMPDEST PUSH32 0x0 SWAP5 DUP6 TLOAD PUSH2 0x1A80 JUMPI PUSH1 0x1 SWAP1 PUSH1 0x1 DUP8 TSTORE PUSH2 0x19CE DUP4 PUSH2 0x1AB5 JUMP JUMPDEST SWAP3 PUSH2 0x19DC PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x186E JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x1F NOT PUSH2 0x19EB DUP3 PUSH2 0x1AB5 JUMP JUMPDEST ADD PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x1A6F JUMPI POP POP PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x1A26 JUMPI POP POP POP POP SWAP1 PUSH0 PUSH2 0x1A1B SWAP4 SWAP3 SWAP6 TSTORE DUP1 TLOAD SWAP2 PUSH2 0x1A1D JUMPI JUMPDEST POP PUSH2 0x1E26 JUMP JUMPDEST JUMP JUMPDEST PUSH0 SWAP1 TSTORE PUSH0 PUSH2 0x1A15 JUMP JUMPDEST DUP1 PUSH2 0x1A53 PUSH0 DUP1 PUSH2 0x1A3B PUSH2 0x1290 DUP10 SWAP7 DUP9 DUP11 PUSH2 0x1ACD JUMP JUMPDEST PUSH1 0x20 DUP2 MLOAD SWAP2 ADD ADDRESS GAS DELEGATECALL PUSH2 0x1A4C PUSH2 0x1BA4 JUMP JUMPDEST SWAP1 ADDRESS PUSH2 0x1EE1 JUMP JUMPDEST PUSH2 0x1A5D DUP3 DUP9 PUSH2 0x1B90 JUMP JUMPDEST MSTORE PUSH2 0x1A68 DUP2 DUP8 PUSH2 0x1B90 JUMP JUMPDEST POP ADD PUSH2 0x19F9 JUMP JUMPDEST DUP1 PUSH1 0x60 PUSH1 0x20 DUP1 SWAP4 DUP10 ADD ADD MSTORE ADD PUSH2 0x19EE JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 POP CALLER DUP2 TSTORE PUSH1 0x1 SWAP2 PUSH2 0x1996 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2A2 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x1B2D JUMPI PUSH1 0x5 SHL DUP2 ADD CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP2 CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x26C JUMPI ADD SWAP1 DUP2 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x26C JUMPI PUSH1 0x20 ADD DUP3 CALLDATASIZE SUB DUP2 SGT PUSH2 0x26C JUMPI SWAP2 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 SWAP2 SWAP3 PUSH2 0x1B66 DUP3 PUSH2 0x1891 JUMP JUMPDEST SWAP2 PUSH2 0x1B74 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x186E JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0x26C JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x1B2D JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x1BCE JUMPI RETURNDATASIZE SWAP1 PUSH2 0x1BB5 DUP3 PUSH2 0x1891 JUMP JUMPDEST SWAP2 PUSH2 0x1BC3 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x186E JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH6 0xFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x26C JUMPI JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x1A80 JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x1C52 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 PUSH0 SWAP1 DUP1 PUSH2 0x1C8E JUMPI JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND DUP2 PUSH32 0x0 AND SWAP6 DUP3 DUP5 GT PUSH2 0x1DF5 JUMPI DUP3 AND SWAP5 DUP2 EXTCODESIZE ISZERO PUSH2 0x26C JUMPI PUSH1 0x84 DUP4 SWAP2 PUSH0 DUP1 SWAP5 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x4 DUP6 ADD MSTORE DUP12 PUSH1 0x24 DUP6 ADD MSTORE DUP9 AND PUSH1 0x44 DUP5 ADD MSTORE DUP10 PUSH1 0x64 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x297 JUMPI PUSH2 0x1DDE JUMPI JUMPDEST POP PUSH1 0x44 DUP3 SWAP4 PUSH1 0x20 SWAP4 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP4 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x1DD2 JUMPI POP PUSH2 0x1DA7 JUMPI JUMPDEST DUP1 DUP1 DUP1 PUSH2 0x1C88 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1DCB JUMPI JUMPDEST PUSH2 0x1DBD DUP2 DUP4 PUSH2 0x186E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x26C JUMPI PUSH0 PUSH2 0x1D9F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1DB3 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x20 SWAP3 POP PUSH2 0x1DEB SWAP1 PUSH2 0x185A JUMP JUMPDEST PUSH1 0x44 PUSH0 SWAP3 POP PUSH2 0x1D53 JUMP JUMPDEST DUP4 PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0xA0 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SELFBALANCE SWAP1 DUP2 ISZERO PUSH2 0x1EDD JUMPI PUSH32 0x0 TLOAD PUSH2 0x1EDD JUMPI DUP2 SELFBALANCE LT PUSH2 0x1EB1 JUMPI PUSH0 DUP1 DUP1 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 SWAP5 AND GAS CALL PUSH2 0x1E81 PUSH2 0x1BA4 JUMP JUMPDEST POP ISZERO PUSH2 0x1E89 JUMPI JUMP JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0xCD78605900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE ADDRESS PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP POP JUMP JUMPDEST SWAP1 PUSH2 0x1EF6 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x1E89 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x1F49 JUMPI JUMPDEST PUSH2 0x1F07 JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x1EFF JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBA 0x27 CODECOPY PUSH22 0x43A77A9B25A3557C69861633E8407221AAC50FCE4ECC PUSH9 0x767F9EB05064736F6C PUSH4 0x4300081B STOP CALLER ","sourceMap":"1151:8386:62:-:0;;;;;;;;;;-1:-1:-1;1151:8386:62;;;;;;;;;;13086:5:65;1151:8386:62;13064:10:65;:28;13060:79;;1151:8386:62;13060:79:65;13115:13;;;1151:8386:62;13115:13:65;;1151:8386:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7582:172;1151:8386;7582:172;;;1151:8386;;;;;2047:392;1151:8386;2047:392;;;1151:8386;;;;;;3670:184;;;1151:8386;;;;;;;;;;:::i;:::-;;;;;;7084:187;;;;;;1151:8386;7084:187;;;1151:8386;;;;;;;;;;7084:187;;1151:8386;;;;;;;;;;;;;;;;;;;;7050:239;;7084:187;7050:239;;;1151:8386;;;7050:239;1151:8386;;;;;;;:::i;:::-;7050:239;;:6;;1151:8386;7050:239;;;;;;;1151:8386;7050:239;;;1151:8386;;;7084:187;1151:8386;;;7022:308;;1151:8386;;;;7084:187;7022:308;;;1151:8386;;;;;;;;;;;7050:239;;;;1151:8386;7050:239;;;;1151:8386;7050:239;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;1151:8386;;;;;;;;;;;;;;;;7084:187;1151:8386;;;;;;;;;:::i;:::-;1083:103:53;;;;;;;:::i;:::-;436:67:72;;:::i;:::-;1151:8386:62;;;3670:184;;1151:8386;;;;;3670:184;;1151:8386;;;;;;;;;;;;;;;;;;;;;;;;;;;3670:184;;1151:8386;;3670:6;1151:8386;;;;;3670:184;1151:8386;;;-1:-1:-1;1151:8386:62;3670:184;;;;;;;;;1151:8386;3670:184;;;1151:8386;;;;;;;;;3881:42;;;;1151:8386;3881:42;;1151:8386;3881:42;;1151:8386;3881:42;;1151:8386;3881:42;;;;;;;4094:5;3881:42;3999:5;3881:42;1151:8386;3881:42;;;1151:8386;;;3999:5;;:::i;:::-;4094;:::i;:::-;1151:8386;551:66:53;3051:52:55;1151:8386:62;;;;;;3881:42;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;3670:184;;;;;;;;;;;;;;;;;;:::i;:::-;;;1151:8386;;;;;;;;;;3670:184;;;;;;;1151:8386;;;;;-1:-1:-1;;1151:8386:62;;;;;;;;;:::i;:::-;1083:103:53;;:::i;:::-;436:67:72;;:::i;:::-;1151:8386:62;;;;;;;9455:73;;;;;1151:8386;9455:73;;1151:8386;;9455:73;;1151:8386;;;;;;;;;;;;;;;;;9455:6;1151:8386;9455:73;;;;;;;1151:8386;9455:73;1151:8386;;;9455:73;;;1151:8386;3051:52:55;1151:8386:62;551:66:53;3051:52:55;1151:8386:62;;;;;;;;;;9455:73;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;1151:8386;;;;;;2047:392;;1151:8386;;;:::i;:::-;;;2047:392;;;;;1151:8386;;;;2047:392;;;1151:8386;;;;;;;;;;;;;;;;2366:10;1151:8386;;;;;;;;;;;;2047:392;;-1:-1:-1;;2047:392:62;;;;;;:::i;:::-;1151:8386;;2012:445;;;;1151:8386;2012:445;;2047:392;1151:8386;2012:445;;1151:8386;2047:392;1151:8386;;;;:::i;:::-;2012:445;:6;;1151:8386;2012:6;1151:8386;2012:445;;;;;;;1151:8386;2012:445;;;1151:8386;;2047:392;1151:8386;;;1984:514;;1151:8386;;;;2047:392;1984:514;;;1151:8386;;;;;;;2012:445;;;;;;1151:8386;2012:445;;;;;;:::i;:::-;;;;;:::i;:::-;;;;1151:8386;;-1:-1:-1;;1151:8386:62;;;;;;;;;;;;8105:22:65;1151:8386:62;;;;;;;;:::i;:::-;8105:22:65;;:::i;:::-;1151:8386:62;;;;;;;:::i;:::-;;;;;;;;;7582:172;1151:8386;;;:::i;:::-;1083:103:53;;;;;;:::i;:::-;436:67:72;;:::i;:::-;1151:8386:62;;;;;;7582:172;;;;;1151:8386;7582:172;;1151:8386;;7582:172;;1151:8386;;;;;;;;;;;;;;7739:4;1151:8386;;;;7582:6;1151:8386;7582:172;;;;;;1151:8386;7582:172;;;1151:8386;7582:172;3051:52:55;1151:8386:62;551:66:53;3051:52:55;1151:8386:62;;;;;;7582:172;;;;;;;;;;;;;;;;:::i;:::-;;;1151:8386;;;;7582:172;1151:8386;;7582:172;;;;;-1:-1:-1;7582:172:62;;1151:8386;;;;;-1:-1:-1;;1151:8386:62;;;;;;;8071:94;;1151:8386;;:::i;:::-;;;8071:94;1151:8386;8071:94;;;1151:8386;;;;;8071:94;;;1151:8386;;;;;;;;;;;;;;;;;8071:94;1151:8386;;8037:146;;;;1151:8386;8037:146;;1151:8386;;8037:146;;1151:8386;;;;;;:::i;:::-;8037:146;:6;;1151:8386;8037:6;1151:8386;8037:146;;;;;;;1151:8386;8037:146;8009:224;8037:146;1151:8386;8037:146;;;1151:8386;;;;;;8009:224;;;;;;:::i;:::-;1151:8386;;;;;;;;;;8037:146;;;;;;1151:8386;8037:146;;;;;;:::i;:::-;;;;1151:8386;;;;;-1:-1:-1;;1151:8386:62;;;;;;4704:12:66;2295:53:55;1151:8386:62;;;;;;;;;;;;;-1:-1:-1;;1151:8386:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;1151:8386:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1151:8386:62;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1151:8386:62;;-1:-1:-1;1151:8386:62;;-1:-1:-1;1151:8386:62;;;;;;;;;;;;;;;;;;;;;;;;4488:395;;1151:8386;;;:::i;:::-;;;4488:395;;;;;1151:8386;;;;4488:395;;;1151:8386;;;;;;;;;;;;;;;;4810:10;1151:8386;;;;;;;;;;;;;;;;;;;:::i;:::-;1083:103:53;;;;;;:::i;:::-;436:67:72;;:::i;:::-;1151:8386:62;;;;6336:187;;1151:8386;;;;;6336:187;;1151:8386;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6336:6;1151:8386;;;;;;-1:-1:-1;1151:8386:62;6336:187;;;;;;;1151:8386;;;6336:187;;;1151:8386;;;6550:42;1151:8386;;;;;6550:42;;;;1151:8386;6550:42;;1151:8386;6550:42;;1151:8386;6550:42;;1151:8386;6550:42;;;;;;;6663:5;6550:42;;;1151:8386;6550:42;6753:5;6550:42;1151:8386;6550:42;;;1151:8386;;6663:5;;:::i;6753:::-;1151:8386;551:66:53;3051:52:55;1151:8386:62;;;;;6550:42;1151:8386;;;;6550:42;;;;;;;;;;;;;;:::i;:::-;;;;6336:187;6550:42;6336:187;;;;;;;;;1151:8386;6336:187;1151:8386;6336:187;;;;;;;:::i;:::-;;;;;;;;;;1151:8386;;;;;-1:-1:-1;;1151:8386:62;;;;;;;;;:::i;:::-;1083:103:53;;:::i;:::-;436:67:72;;:::i;:::-;1151:8386:62;;;;;;;8502:184;;;;;1151:8386;8502:184;;1151:8386;;8502:184;;1151:8386;8569:17;1151:8386;;;;;;;;;;;;;;;8671:4;1151:8386;;;;8502:6;1151:8386;8502:184;;;;;;;1151:8386;8502:184;1151:8386;;;8502:184;;;3051:52:55;1151:8386:62;551:66:53;3051:52:55;1151:8386:62;;;;;;;;;;;;;;;-1:-1:-1;;1151:8386:62;;;;;;;;;4253:8:65;1151:8386:62;;;;;;-1:-1:-1;;1151:8386:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;1151:8386:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1083:103:53;;;;;:::i;:::-;1151:8386:62;;;;;;1500:6:43;1496:65;;1151:8386:62;5670:22:65;1151:8386:62;;;;;5670:22:65;;;;1151:8386:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7088:860:65;;5650:1371;1151:8386:62;8105:22:65;3051:52:55;;1151:8386:62;551:66:53;3051:52:55;8105:22:65;:::i;7088:860::-;7878:8;1151:8386:62;7878:8:65;1151:8386:62;7878:59:65;;;;1151:8386:62;;7878:59:65;1151:8386:62;7878:59:65;;7894:10;1151:8386:62;7878:59:65;;1151:8386:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;1151:8386:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1151:8386:62;;7878:59:65;;:8;1151:8386:62;7878:8:65;1151:8386:62;;7878:59:65;;;;;;;1151:8386:62;7878:59:65;8105:22;7878:59;;;1151:8386:62;7088:860:65;;;;;;7878:59;;;;:::i;:::-;;;;1151:8386:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;5694:3:65;1151:8386:62;5738:19:65;;;;;:::i;:::-;1151:8386:62;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8585:180:65;;;;1151:8386:62;;8585:180:65;;;;;;1151:8386:62;8585:180:65;1151:8386:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5942:338:65;;;;1151:8386:62;;;;;;;;;;;;;;5942:338:65;;;;;1151:8386:62;5942:338:65;;1151:8386:62;;5942:338:65;;1151:8386:62;6055:4:65;1151:8386:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5942:338:65;;;;;;5694:3;-1:-1:-1;5922:1089:65;;6407:604;;:::i;:::-;1151:8386:62;;;;;;;;;;;;;;;;6680:75:65;;;;1151:8386:62;6680:75:65;;1151:8386:62;6680:75:65;;1151:8386:62;6055:4:65;1151:8386:62;;;;6680:75:65;;;;;;;1151:8386:62;6680:75:65;;;5922:1089;1151:8386:62;;;;6680:100:65;6655:342;;5922:1089;1151:8386:62;5922:1089:65;;1151:8386:62;5655:13:65;;6655:342;1151:8386:62;;1881:21:45;:17;;2008:160;;;1151:8386:62;2008:160:45;;1877:362;2205:23;1151:8386:62;2205:23:45;1151:8386:62;;2205:23:45;6680:75:65;;;;1151:8386:62;6680:75:65;;1151:8386:62;6680:75:65;;;;;;1151:8386:62;6680:75:65;;;:::i;:::-;;;1151:8386:62;;;;;;;6680:75:65;;;;;-1:-1:-1;6680:75:65;;5922:1089;;1151:8386:62;5922:1089:65;;;5942:338;;;;:::i;:::-;;;;1496:65:43;1529:21;1151:8386:62;1529:21:43;1151:8386:62;;1529:21:43;1151:8386:62;;;;;-1:-1:-1;;1151:8386:62;;;;;;;9027:100;;1151:8386;;:::i;:::-;;;9027:100;1151:8386;9027:100;;;1151:8386;;;;;9027:100;;;1151:8386;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1151:8386:62;;;;;;4129:5:65;1151:8386:62;4129:5:65;1151:8386:62;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;;1151:8386:62;;;;;;;;;;;;;;;;;-1:-1:-1;1151:8386:62;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;1151:8386:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;1151:8386:62;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;1151:8386:62;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;-1:-1:-1;;1151:8386:62;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;1151:8386:62;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1151:8386:62;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;3191:591:65:-;;;-1:-1:-1;4704:12:66;;2295:53:55;1151:8386:62;2295:53:55;;1151:8386:62;3919:25:66;3915:124;;3191:591:65;12307:26;2806:53:55;;;3385:100:65;;3578:4;3051:52:55;3578:4:65;3051:52:55;;1151:8386:62;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1151:8386:62;;;:::i;:::-;;-1:-1:-1;1151:8386:62;;;;;;8188:13:65;;-1:-1:-1;8203:15:65;;;;;;3593:1;;;;;-1:-1:-1;3768:6:65;3593:1;;3051:52:55;;2295:53;;4282:82:66;;;8183:132:65;3768:6;;:::i;:::-;3191:591::o;4282:82:66:-;-1:-1:-1;3051:52:55;;4282:82:66;;;8220:3:65;8296:7;4297:55:106;-1:-1:-1;8296:7:65;1151:8386:62;8296:7:65;;;;;;:::i;1151:8386:62:-;;4255:25:106;;;;8289:4:65;4255:25:106;;;;:::i;:::-;8289:4:65;;4297:55:106;:::i;:::-;8239:65:65;;;;:::i;:::-;;;;;;:::i;:::-;;1151:8386:62;8188:13:65;;1151:8386:62;;;;;;;;;;;;;3385:100:65;3444:30;-1:-1:-1;3444:30:65;;-1:-1:-1;3444:30:65;3915:124:66;3271:10:65;;;3051:52:55;;4024:4:66;3915:124;;;1151:8386:62;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;1151:8386:62;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;1151:8386:62;;;;:::o;:::-;;;:::o;:::-;;;;;;;;;;:::o;1192:349:53:-;551:66;2295:53:55;;1316:93:53;;1529:4;3051:52:55;;1192:349:53:o;509:165:72:-;1151:8386:62;586:6:72;1151:8386:62;564:10:72;:29;560:108;;509:165::o;560:108::-;616:41;;;564:10;616:41;1151:8386:62;;616:41:72;;10829:553:65;;;1151:8386:62;11126:12:65;;11122:244;;10829:553;;;;;:::o;11122:244::-;1151:8386:62;11215:8:65;;1151:8386:62;11253:6:65;;1151:8386:62;7303:25:119;;;;7299:105;;1151:8386:62;;11215:86:65;;;;;;1151:8386:62;;;;;;;;11215:86:65;;;;;1151:8386:62;11215:86:65;;1151:8386:62;11215:86:65;;;1151:8386:62;;;;;;;;;;;;;;;;;11215:86:65;;;;;;;;11122:244;1151:8386:62;;;;;;;;11319:32:65;;;;;1151:8386:62;11319:32:65;;11215:86;11319:32;;1151:8386:62;;;;;11319:32:65;;;;;;;;;;11122:244;;;;;;11319:32;1151:8386:62;11319:32:65;;;;;;;;;;;;:::i;:::-;;;1151:8386:62;;;;11319:32:65;;;;;;;;;1151:8386:62;;;;;;;;;;11215:86:65;1151:8386:62;11215:86:65;;;;;:::i;:::-;1151:8386:62;;11215:86:65;;;;7299:105:119;7351:42;;1151:8386:62;7351:42:119;7382:3;7351:42;1151:8386:62;;;;;7351:42:119;9544:584:65;9780:21;9815:11;;;9811:48;;12307:26;2295:53:55;10009:69:65;;1616:21:106;;:30;1612:109;;9825:1:65;1151:8386:62;;;;;;;1750:33:106;;;;:::i;:::-;;1797:8;1793:63;;9544:584:65:o;1793:63:106:-;1828:17;9825:1:65;1828:17:106;;9825:1:65;1828:17:106;1612:109;1669:41;9825:1:65;1669:41:106;9788:4:65;1669:41:106;1151:8386:62;;9825:1:65;1669:41:106;10009:69:65;10061:7;;:::o;4625:582:106:-;;4797:8;;-1:-1:-1;1151:8386:62;;5874:21:106;:17;;6046:142;;;;;;4793:408;1151:8386:62;;5045:22:106;:49;;;4793:408;5041:119;;5173:17;;:::o;5041:119::-;1151:8386:62;5121:24:106;;5066:1;5121:24;1151:8386:62;5121:24:106;1151:8386:62;;5066:1:106;5121:24;5045:49;5071:18;;;:23;5045:49;"},"methodIdentifiers":{"addLiquidityToBuffer(address,uint256,uint256,uint256)":"502383f4","addLiquidityToBufferHook(address,uint256,uint256,uint256,address)":"4fe56ed6","getPermit2()":"1bbf2e23","getSender()":"5e01eb5a","getWeth()":"107c279f","initializeBuffer(address,uint256,uint256,uint256)":"b365a3c2","initializeBufferHook(address,uint256,uint256,uint256,address)":"d9f70869","multicall(bytes[])":"ac9650d8","permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])":"19c6989f","queryAddLiquidityToBuffer(address,uint256)":"662727cc","queryAddLiquidityToBufferHook(address,uint256)":"400f230d","queryInitializeBuffer(address,uint256,uint256)":"e0fefe35","queryInitializeBufferHook(address,uint256,uint256)":"a3902604","queryRemoveLiquidityFromBuffer(address,uint256)":"13f7bb4d","queryRemoveLiquidityFromBufferHook(address,uint256)":"d96af070","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IWETH\",\"name\":\"weth\",\"type\":\"address\"},{\"internalType\":\"contract IPermit2\",\"name\":\"permit2\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"routerVersion\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EthTransfer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBufferHook\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermit2\",\"outputs\":[{\"internalType\":\"contract IPermit2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWeth\",\"outputs\":[{\"internalType\":\"contract IWETH\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountUnderlyingIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountWrappedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountUnderlyingIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountWrappedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBufferHook\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"internalType\":\"struct IRouterCommon.PermitApproval[]\",\"name\":\"permitBatch\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"permitSignatures\",\"type\":\"bytes[]\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"internalType\":\"uint48\",\"name\":\"expiration\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"nonce\",\"type\":\"uint48\"}],\"internalType\":\"struct IAllowanceTransfer.PermitDetails[]\",\"name\":\"details\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sigDeadline\",\"type\":\"uint256\"}],\"internalType\":\"struct IAllowanceTransfer.PermitBatch\",\"name\":\"permit2Batch\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"permit2Signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes[]\",\"name\":\"multicallData\",\"type\":\"bytes[]\"}],\"name\":\"permitBatchAndCall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"}],\"name\":\"queryAddLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"}],\"name\":\"queryAddLiquidityToBufferHook\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountUnderlyingIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountWrappedIn\",\"type\":\"uint256\"}],\"name\":\"queryInitializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountUnderlyingIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountWrappedIn\",\"type\":\"uint256\"}],\"name\":\"queryInitializeBufferHook\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToRemove\",\"type\":\"uint256\"}],\"name\":\"queryRemoveLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToRemove\",\"type\":\"uint256\"}],\"name\":\"queryRemoveLiquidityFromBufferHook\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"The external API functions unlock the Vault, which calls back into the corresponding hook functions. These interact with the Vault, transfer tokens, settle accounting, and handle wrapping and unwrapping ETH.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}]},\"kind\":\"dev\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Requires the buffer to be initialized beforehand. Restricting adds to proportional simplifies the Vault code, avoiding rounding issues and minimum amount checks. It is possible to add unbalanced by interacting with the wrapper contract directly.\",\"params\":{\"exactSharesToIssue\":\"The amount of shares that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingIn\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedIn\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingIn\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedIn\":\"Amount of wrapped tokens deposited into the buffer\"}},\"addLiquidityToBufferHook(address,uint256,uint256,uint256,address)\":{\"details\":\"Can only be called by the Vault.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingIn\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedIn\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingIn\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedIn\":\"Amount of wrapped tokens deposited into the buffer\"}},\"getSender()\":{\"returns\":{\"_0\":\"The address of the sender\"}},\"initializeBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Calling this method binds the wrapped token to its underlying asset internally; the asset in the wrapper cannot change afterwards, or every other operation on that wrapper (add / remove / wrap / unwrap) will fail. To avoid unexpected behavior, always initialize buffers before creating or initializing any pools that contain the wrapped tokens to be used with them.\",\"params\":{\"exactAmountUnderlyingIn\":\"Amount of underlying tokens that will be deposited into the buffer\",\"exactAmountWrappedIn\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, denominated in underlying tokens (This is the BPT of the Vault's internal ERC4626 buffer.)\"}},\"initializeBufferHook(address,uint256,uint256,uint256,address)\":{\"details\":\"Can only be called by the Vault. Buffers must be initialized before use.\",\"params\":{\"exactAmountUnderlyingIn\":\"Amount of underlying tokens that will be deposited into the buffer\",\"exactAmountWrappedIn\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive, in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (This is the BPT of an internal ERC4626 buffer)\"}},\"multicall(bytes[])\":{\"params\":{\"data\":\"Encoded function calls to be executed in the batch.\"},\"returns\":{\"results\":\"Array of bytes arrays, each representing the return data from each function call executed.\"}},\"permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])\":{\"params\":{\"multicallData\":\"An array of bytes arrays, each representing an encoded function call on this contract\",\"permit2Batch\":\"A batch of permit2 approvals\",\"permit2Signature\":\"A permit2 signature for the batch approval\",\"permitBatch\":\"An array of `PermitApproval` structs, each representing an ERC20 permit request\",\"permitSignatures\":\"An array of bytes, corresponding to the permit request signature in `permitBatch`\"},\"returns\":{\"results\":\"Array of bytes arrays, each representing the return data from each function call executed\"}},\"queryAddLiquidityToBuffer(address,uint256)\":{\"params\":{\"exactSharesToIssue\":\"The amount of shares that would be minted, in underlying token decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingIn\":\"Amount of underlying tokens that would be deposited into the buffer\",\"amountWrappedIn\":\"Amount of wrapped tokens that would be deposited into the buffer\"}},\"queryInitializeBuffer(address,uint256,uint256)\":{\"params\":{\"exactAmountUnderlyingIn\":\"Amount of underlying tokens that the sender wishes to deposit into the buffer\",\"exactAmountWrappedIn\":\"Amount of wrapped tokens that the sender wishes to deposit into the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"The amount of shares that would be minted, in underlying token decimals\"}},\"queryRemoveLiquidityFromBuffer(address,uint256)\":{\"params\":{\"exactSharesToRemove\":\"The amount of shares that would be burned, in underlying token decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceOut\":\"Amount of underlying tokens that would be removed from the buffer\",\"removedWrappedBalanceOut\":\"Amount of wrapped tokens that would be removed from the buffer\"}},\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"ErrorSelectorNotFound()\":[{\"notice\":\"Handle the \\\"reverted without a reason\\\" case (i.e., no return data).\"}],\"EthTransfer()\":[{\"notice\":\"Incoming ETH transfer from an address that is not WETH.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"InsufficientEth()\":[{\"notice\":\"The amount of ETH paid is insufficient to complete this operation.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}]},\"kind\":\"user\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Adds liquidity proportionally to an internal ERC4626 buffer in the Vault.\"},\"addLiquidityToBufferHook(address,uint256,uint256,uint256,address)\":{\"notice\":\"Hook for adding liquidity to vault buffers. The Vault will enforce that the buffer is initialized.\"},\"getPermit2()\":{\"notice\":\"Returns Permit2 contract address.\"},\"getSender()\":{\"notice\":\"Get the first sender which initialized the call to Router.\"},\"getWeth()\":{\"notice\":\"Returns WETH contract address.\"},\"initializeBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Adds liquidity for the first time to an internal ERC4626 buffer in the Vault.\"},\"initializeBufferHook(address,uint256,uint256,uint256,address)\":{\"notice\":\"Hook for initializing a vault buffer.\"},\"multicall(bytes[])\":{\"notice\":\"Executes a batch of function calls on this contract.\"},\"permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])\":{\"notice\":\"Permits multiple allowances and executes a batch of function calls on this contract.\"},\"queryAddLiquidityToBuffer(address,uint256)\":{\"notice\":\"Queries an `addLiquidityToBuffer` operation without actually executing it.\"},\"queryInitializeBuffer(address,uint256,uint256)\":{\"notice\":\"Queries an `initializeBuffer` operation without actually executing it.\"},\"queryRemoveLiquidityFromBuffer(address,uint256)\":{\"notice\":\"Queries an `removeLiquidityFromBuffer` operation without actually executing it.\"},\"version()\":{\"notice\":\"Getter for the version.\"}},\"notice\":\"Entrypoint for swaps, liquidity operations, and corresponding queries.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/BufferRouter.sol\":\"BufferRouter\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x75d5964b2f92dba9b9254e0052de28a9378e6759b1b28ccbb51db0bc80024176\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6ec9c862929ccff2be994d0296c0a4de3ddc19bb5a7aae3d4df0887dc7b29c8e\",\"dweb:/ipfs/QmSNr2fkNM2VyAo3B1DG1cuRh41t4A6mJZqeUu6vvYb97G\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBufferRouter.sol\":{\"keccak256\":\"0xcef9acd5d8cf67d7e126da0961fef2f7dac4e9b24ae13385dfd17d2313536cd9\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e1bf4ede1c5055ea3a57536a6804bd3ca984017a738be03a2a7673eaec0c5ed\",\"dweb:/ipfs/QmYyfLkUeTj17JuDnzzKfqtFK9kEjfbs3XWEsdh83kNt1Z\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouterCommon.sol\":{\"keccak256\":\"0x82d459426edf0ac20a33ad2065dae1f83544069b9887618248c0722e25a8b736\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c4566915a8c2b10f6232f92dad5e4409bb2aa46baf6a5d78dc0ac447facbfb37\",\"dweb:/ipfs/QmReRhA1BxRocwWsGgacaAcC2xRtWqJgN57bd2Yyy7A1gd\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISenderGuard.sol\":{\"keccak256\":\"0x2ec1ecf5c578aab7502f6985a03fbb79998218bdef819845d70d28a6994cff5b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a32637a45f19c29797db11eb25eb9bfda73302f280a64a9d9a4ab123db1b8e6f\",\"dweb:/ipfs/QmXGimviZ4Mr6kwgqkCwpHH5uGHVEjAcCRNvAwvoVYKi6f\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":{\"keccak256\":\"0xb4ee9e1543d36bdf9eeb4a9d5ab41170723239a1e27a2272f2e31de4765c019b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b70dd5e4fa496c2c1efb6bd20368587ba3c9c0d0afac9dc3631a29ff2628f99\",\"dweb:/ipfs/QmQigXUkpDuVK5VSX67RABrAC9bashPcHMasgPRNJb4k8Z\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":{\"keccak256\":\"0xb5f6b1d0ee3f295a717ce58329eaadccb1eefc2e1e02e2e7c438e377628475cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03c1b9bc73b7d14d9e1948a31c271a03a6ba4291f44d9aff17e60d300c111d0d\",\"dweb:/ipfs/QmNpW3iD3ST76N6xTncuVgYSuafSqFkXUmxNaK8uybr96G\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/BufferRouter.sol\":{\"keccak256\":\"0x86ed9d1f9e5a54d2f4213e88f070e25b6a746222c26653de4638b9f619111bd2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://78b8b3026d22679c0697dca993c35cab0de0dcfc6e47781f4b90e3455fb341e9\",\"dweb:/ipfs/QmaEQrJmeHQTA4kWJnaHYJmpe7nKL424henYhBQHrbe3sa\"]},\"@balancer-labs/v3-vault/contracts/RouterCommon.sol\":{\"keccak256\":\"0xb473ef641d1465f4d3c4f0372183e7c4c0baa77b2e2cf73dee947ab7ab722bac\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://61a166cdf1760c79790f921a8edee1f1977f07cef699db901bd15100ab30f96f\",\"dweb:/ipfs/QmdyhDm4PgNyzNC3s25k68yd52GtqM4PJt6QpfkmEmRtHW\"]},\"@balancer-labs/v3-vault/contracts/SenderGuard.sol\":{\"keccak256\":\"0x43fbf1ee03766ff75e6306520827db7d8f9cbc63f4609105a7062cbf6c6980a2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c015d974c3c8ae2f0677905a3216148611be430d4f3b8e64698ede996c8b4a46\",\"dweb:/ipfs/QmdrU9JE9NoksjQ6DUmGH1uKjgdyXVZXfD1RzdwFPnYtzr\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@balancer-labs/v3-vault/contracts/lib/RouterWethLib.sol\":{\"keccak256\":\"0xd66f21fa586085e10a1e322370c7015ebe472c44fc27472a6fdfe67ad6d9b188\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://88b4830e07a76a68dce1e3adba583f60259df5187087def2fd43d3c1f8b0e2ae\",\"dweb:/ipfs/QmbGNEfYtDUFpGrFYo9iJcSg9sJxiAVN9iaJApCaHobTDm\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"permit2/src/interfaces/IAllowanceTransfer.sol\":{\"keccak256\":\"0x37f0ac203b6ef605c9533e1a739477e8e9dcea90710b40e645a367f8a21ace29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0104d72aeaec1cd66cc232e7de7b7ead08608efcc179491b8a66387614670b0\",\"dweb:/ipfs/QmfAZDyuNC9FXXbnJUwqHNwmAK6uRrXxtWEytLsxjskPsN\"]},\"permit2/src/interfaces/IEIP712.sol\":{\"keccak256\":\"0xfdccf2b9639070803cd0e4198427fb0df3cc452ca59bd3b8a0d957a9a4254138\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7c936ac42ce89e827db905a1544397f8bdf46db34cdb6aa1b90dea42fdb4c72\",\"dweb:/ipfs/QmVgurxo1N31qZqkPBirw9Z7S9tLYmv6jSwQp8R8ur2cBk\"]},\"permit2/src/interfaces/IPermit2.sol\":{\"keccak256\":\"0xaa631cc9f53e699301d94233007110a345e6779011def484e8dd97b8fe0af771\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc0502cf19c9c18f320a3001201e89e350393b75837f6b7971de18b2de06f30d\",\"dweb:/ipfs/QmT9SfhdJ7VJNNrf94g4H5usyi7ShqWGx7Cqsz9jZTjX96\"]},\"permit2/src/interfaces/ISignatureTransfer.sol\":{\"keccak256\":\"0xe6df9966f8841dc3958ee86169c89de97e7f614c81c28b9dc947b12d732df64e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3d4eafdee7f48c3be8350a94eb6edd0bfb2af2c105df65787a77174f356c0317\",\"dweb:/ipfs/QmY1j2adeeAhNpn6cUuthemxGCdLXHTfyMh9yTKsY4mZ2d\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol":{"ProtocolFeeController":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"pool","type":"address"}],"name":"CallerIsNotPoolCreator","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[],"name":"InvalidMigrationSource","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[],"name":"PoolCreatorFeePercentageTooHigh","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreatorNotRegistered","type":"error"},{"inputs":[],"name":"ProtocolSwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ProtocolYieldFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"ZeroDivision","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"GlobalProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"GlobalProtocolYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateSwapFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateYieldFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PoolCreatorFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"PoolCreatorSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"PoolCreatorYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"poolCreator","type":"address"},{"indexed":false,"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"PoolRegisteredWithFeeController","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolSwapFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"ProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolYieldFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"ProtocolYieldFeePercentageChanged","type":"event"},{"inputs":[],"name":"MAX_CREATOR_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFeesHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"protocolFeePercentage","type":"uint256"},{"internalType":"uint256","name":"poolCreatorFeePercentage","type":"uint256"}],"name":"computeAggregateFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolSwapFeeInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolYieldFeeInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getProtocolFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"migratePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"registerPool","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setGlobalProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setGlobalProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"setPoolCreatorSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"setPoolCreatorYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60e03461010957601f612e7d38819003918201601f19168301916001600160401b0383118484101761010d5780849260209460405283398101031261010957516001600160a01b038116810361010957306080528060a05260c052604051612d5b9081610122823960805181612172015260a051818181610ed6015281816110fc0152612883015260c0518181816102530152818161036e015281816103f8015281816105170152818161058501528181610864015281816108d201528181610c7d01528181610db3015281816115d60152818161177b0152818161191c01528181611a7601528181611be401528181612350015281816126060152818161278201526129ce0152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c9081630252aab514611fa6575080630874327f14611b935780630b8e059b14611b5b5780630ddd60c614611b3a5780631377c16c14611a1b5780632772d156146118385780632e1d388d146119f95780633af52712146118c157806352f125f01461189657806355fb76af146118795780635c15a0b41461183d5780635e32e4e81461183857806371447ea81461169357806371ecc8fb146114ef57806377ff76e71461125b5780637869ee181461123f5780637a2b97dc146111d4578063851c1bb3146111845780638a3c5c69146111205780638d928af8146110dd5780638df44c54146110555780638f4ab9ca146110345780639e95f3fd14610fa8578063a93df2a414610f43578063aaabadc514610e90578063abaa335614610ce7578063b53a70b214610c00578063c673bdaf14610bc3578063cf7b287f14610b5d578063f706144514610b28578063fa399f2a14610392578063fbfa77cf1461034f5763fd267f3914610187575f80fd5b34610323576040600319360112610323576101a0611fda565b602435906101ac61281e565b6706f05b59d3b200008211610327576101c4826127d6565b6101cd8161228e565b6101d68261246f565b916040516101e381612063565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600260205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169161027d81612b67565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e92602092610309575b50604051908152a2005b610312906120ac565b5f6102ff565b6040513d5f823e3d90fd5b5f80fd5b7f7e6eb7fb000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610323576020600319360112610323576103ab611fda565b6103b3612778565b6040517f8f4ab9ca0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201525f81602481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610318575f905f92610acb575b506001600160a01b0383165f52600260205267ffffffffffffffff60405f20541690600560205260405f2054905f928215159384610ac1575b84610ab1575b6104728761298f565b94905f5b8681106108225789896001600160a01b0382165f52600360205267ffffffffffffffff60405f205416905f92600660205260405f2054925f8415159485610818575b85610806575b6104c78461298f565b96905f5b8881106104d457005b6104de8189612213565b516104ec575b6001016104cb565b986001600160a01b036104ff8b84612213565b51169061050c8b8a612213565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561080257604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201528181606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156107f7579082916107e0575b506107b357505f99816105c8828b612213565b516040519081527fe505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e260206001600160a01b038c1692a383156107385761060e818a612213565b5186156107105761061e906124c1565b6001670de0b6b3a764000061065f8a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848c8783010401901515026124de565b928301040190151502916001600160a01b0389165f52600760205260405f20815f5260205260405f206106938482546124b4565b905561069f828b612213565b519081848103116106e3576001936106d9916001600160a01b038c165f52600860205260405f20905f5260205260405f20920382546124b4565b90555b90506104e4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001918561077d5761074a828b612213565b51906001600160a01b038a165f52600760205260405f20905f5260205261077660405f209182546124b4565b90556106dc565b610787828b612213565b51906001600160a01b038a165f52600860205260405f20905f5260205261077660405f209182546124b4565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6107e9906120ac565b6107f457808c6105b5565b80fd5b6040513d84823e3d90fd5b5080fd5b905061081281836124f1565b906104be565b82151595506104b8565b61082c8187612213565b5161083a575b600101610476565b6001600160a01b0361084c8284612213565b5116906108598188612213565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561032357604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201525f81606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561031857610aa2575b50818b7fae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f60206001600160a01b03610937868d612213565b51936040519485521692a38815610a27576109528188612213565b51851561071057610962906124c1565b6001670de0b6b3a76400006109a3897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848b8783010401901515026124de565b928301040190151502916001600160a01b038c165f52600760205260405f20815f5260205260405f206109d78482546124b4565b90556109e38289612213565b519081848103116106e357600193610a1d916001600160a01b038f165f52600860205260405f20905f5260205260405f20920382546124b4565b90555b9050610832565b60019184610a6c57610a398289612213565b51906001600160a01b038d165f52600760205260405f20905f52602052610a6560405f209182546124b4565b9055610a20565b610a768289612213565b51906001600160a01b038d165f52600860205260405f20905f52602052610a6560405f209182546124b4565b610aab906120ac565b8b6108ff565b50610abc83826124f1565b610469565b8115159450610463565b9150503d805f833e610add81836120dc565b8101906040818303126103235780519167ffffffffffffffff928381116103235781610b0a91840161240e565b92602083015190811161032357610b21920161240e565b908361042a565b3461032357604060031936011261032357610b5b610b44611fda565b610b4c611ff0565b90610b5681612532565b6126c1565b005b3461032357604060031936011261032357610b76611fda565b610b7e611ff0565b90610b8761281e565b610b908161298f565b915f5b838110610b9c57005b80610bbd6001600160a01b03610bb460019487612213565b51168785612aa3565b01610b93565b34610323576020600319360112610323576001600160a01b03610be4611fda565b165f526004602052602060ff60405f2054166040519015158152f35b3461032357606060031936011261032357610c19611fda565b610c21611ff0565b604435906001600160a01b039283831680840361032357604090610c4361281e565b60448251809781937fc9c1661b000000000000000000000000000000000000000000000000000000008352818716600484015260248301527f0000000000000000000000000000000000000000000000000000000000000000165afa801561031857610cb4575b610b5b9350612aa3565b6040843d604011610cdf575b81610ccd604093836120dc565b8101031261032357610b5b9350610caa565b3d9150610cc0565b3461032357604060031936011261032357610d00611fda565b60243590610d0c61281e565b6706f05b59d3b200008211610e6857610d24826127d6565b610d2d8161228e565b610d368261246f565b91604051610d4381612063565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600360205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f00000000000000000000000000000000000000000000000000000000000000001691610ddd81612b35565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd926020926103095750604051908152a2005b7fa7849e8e000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576040517faaabadc50000000000000000000000000000000000000000000000000000000081526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa908115610318576020925f92610f14575b5060405191168152f35b610f35919250833d8511610f3c575b610f2d81836120dc565b8101906123ef565b9083610f0a565b503d610f23565b34610323576020600319360112610323576004356706f05b59d3b200008111610e6857602081610f937f48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f6936127d6565b610f9b61281e565b80600155604051908152a1005b346103235760208060031936011261032357610fc2611fda565b90610fcc8261298f565b90610fd6826121c4565b925f946001600160a01b03809116955b848110610fff5760405180610ffb8882612028565b0390f35b600190875f526008845260405f20836110188388612213565b51165f52845260405f205461102d8289612213565b5201610fe6565b3461032357602060031936011261032357610b5b611050611fda565b61228e565b34610323576020806003193601126103235761106f611fda565b906110798261298f565b90611083826121c4565b925f946001600160a01b03809116955b8481106110a85760405180610ffb8882612028565b600190875f526007845260405f20836110c18388612213565b51165f52845260405f20546110d68289612213565b5201611093565b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610323576020600319360112610323576004356706f05b59d3b200008111610327576020816111707fbf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d936127d6565b61117861281e565b805f55604051908152a1005b34610323576020600319360112610323576004357fffffffff0000000000000000000000000000000000000000000000000000000081168103610323576111cc602091612147565b604051908152f35b34610323576020600319360112610323576001600160a01b036111f5611fda565b165f526003602052602060405f206040519061121082612063565b5467ffffffffffffffff811680835260ff604092831c1615159390920183905280519182526020820192909252f35b34610323575f6003193601126103235760205f54604051908152f35b3461032357606060031936011261032357611274611fda565b61127c611ff0565b90604435918215159081840361032357611294612778565b6001600160a01b0380931691825f52826020926004845260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055865f146114e457835f9687925b8915611469578483878c5f9b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611454967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb985b6113698461246f565b6040519061137682612063565b67ffffffffffffffff809116825260036113e6868401948686528b5f5260028852604084905f209551169480549651151560401b967fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000968768ff0000000000000000809a1692161717905561246f565b956040839051976113f689612063565b1687528087019586528a5f525260405f209451169184549351151560401b16921617179055604061143a905192839283909291602090604083019483521515910152565b0390a28d518c815290151560208201529081906040820190565b0390a289519586521693a38351928352820152f35b8483878c6001549b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611454967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb98611360565b835f549687926112e5565b346103235760208060031936011261032357611509611fda565b6115128161228e565b6001600160a01b039182821692835f526002825260405f20906040519161153883612063565b549167ffffffffffffffff9060ff8285169485835260401c1615908582159101525f549381611688575b5061156957005b6115728361246f565b90806040519261158184612063565b168252848201905f8252875f526002865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169261160081612b67565b843b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e936103095750604051908152a2005b905083141587611562565b3461032357602080600319360112610323576116ad611fda565b6116b68161228e565b6001600160a01b039182821692835f526003825260405f2090604051916116dc83612063565b549167ffffffffffffffff9060ff8285169485835260401c161590858215910152600154938161182d575b5061170e57005b6117178361246f565b90806040519261172684612063565b168252848201905f8252875f526003865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f000000000000000000000000000000000000000000000000000000000000000016926117a581612b35565b843b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd936103095750604051908152a2005b905083141587611707565b612006565b34610323576020600319360112610323576001600160a01b0361185e611fda565b165f526002602052602060405f206040519061121082612063565b34610323575f600319360112610323576020600154604051908152f35b3461032357602060031936011261032357610b5b6118b2611fda565b6118bb816125c7565b906126c1565b34610323576040600319360112610323576118da611fda565b602435906118e781612532565b670de0ad9b58f1600082116119d1576118ff8161228e565b6001600160a01b039182821692835f5260066020528160405f20557f0000000000000000000000000000000000000000000000000000000000000000169161194681612b35565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34926020926103095750604051908152a2005b7f0370da74000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576020604051670de0ad9b58f160008152f35b3461032357604060031936011261032357611a34611fda565b60243590611a4181612532565b670de0ad9b58f1600082116119d157611a598161228e565b6001600160a01b039182821692835f5260056020528160405f20557f00000000000000000000000000000000000000000000000000000000000000001691611aa081612b67565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577fb7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c92602092611b2b5750604051908152a2005b611b34906120ac565b846102ff565b346103235760406003193601126103235760206111cc6024356004356124f1565b34610323576020600319360112610323576001600160a01b03611b7c611fda565b165f526005602052602060405f2054604051908152f35b346103235760208060031936011261032357611bad611fda565b906001600160a01b036040517f85f2dbd40000000000000000000000000000000000000000000000000000000081528281600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156103185782915f91611f6c575b501692308414611f44571690815f526004815260ff60405f205416611f1857815f526004815260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556040517f5c15a0b4000000000000000000000000000000000000000000000000000000008152826004820152604081602481875afa908115610318575f905f92611ef4575b50611cb79061246f565b9060405190611cc582612063565b67ffffffffffffffff80931682528382019015158152845f52600284528260405f209251169180549151151560401b917fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000938468ff0000000000000000809516921617179055604051917f7a2b97dc0000000000000000000000000000000000000000000000000000000083528560048401526040836024818a5afa928315610318575f905f94611ec0575b50611d7b9061246f565b938060405195611d8a87612063565b1685528585019315158452865f526003865260405f209451169184549351151560401b169216171790556040517f0b8e059b0000000000000000000000000000000000000000000000000000000081528260048201528181602481875afa5f9181611e8e575b50938291602495611e7c575b50604051948580927f0252aab50000000000000000000000000000000000000000000000000000000082528660048301525afa5f9381611e4d575b50611e3e57005b6006915f525260405f20555f80f35b9093508181813d8311611e75575b611e6581836120dc565b8101031261032357519284611e37565b503d611e5b565b845f526005835260405f205585611dfc565b9150938282813d8311611eb9575b611ea681836120dc565b8101031261032357905190936024611df0565b503d611e9c565b611d7b9450611ee7915060403d604011611eed575b611edf81836120dc565b81019061212a565b93611d71565b503d611ed5565b611cb79250611f12915060403d604011611eed57611edf81836120dc565b91611cad565b507fdb771c80000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fb82fd5bf000000000000000000000000000000000000000000000000000000005f5260045ffd5b809250848092503d8311611f9f575b611f8581836120dc565b810103126103235751818116810361032357819085611c15565b503d611f7b565b34610323576020600319360112610323576020906001600160a01b03611fca611fda565b165f526006825260405f20548152f35b600435906001600160a01b038216820361032357565b602435906001600160a01b038216820361032357565b34610323575f6003193601126103235760206040516706f05b59d3b200008152f35b60209060206040818301928281528551809452019301915f5b82811061204f575050505090565b835185529381019392810192600101612041565b6040810190811067ffffffffffffffff82111761207f57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161207f57604052565b6060810190811067ffffffffffffffff82111761207f57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761207f57604052565b5190811515820361032357565b91908260409103126103235761214460208351930161211d565b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526121a6816120c0565b51902090565b67ffffffffffffffff811161207f5760051b60200190565b906121ce826121ac565b6121db60405191826120dc565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061220982946121ac565b0190602036910137565b80518210156122275760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b67ffffffffffffffff811161207f57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0905f601f6001600160a01b036040519383604460209684888201947ffa399f2a00000000000000000000000000000000000000000000000000000000865216602482015260248152612300816120c0565b604051988996879586937f48c894910000000000000000000000000000000000000000000000000000000085528b60048601525180918160248701528686015e85858286010152011681010301927f0000000000000000000000000000000000000000000000000000000000000000165af1801561031857612380575050565b3d805f843e61238f81846120dc565b82019181818403126103235780519067ffffffffffffffff821161032357019180601f84011215610323578251906123c682612254565b906123d460405192836120dc565b8282528383860101116103235781835f95018483015e010152565b9081602091031261032357516001600160a01b03811681036103235790565b9080601f8301121561032357815190602091612429816121ac565b9361243760405195866120dc565b81855260208086019260051b82010192831161032357602001905b828210612460575050505090565b81518152908301908301612452565b67ffffffffffffffff90818111612484571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b919082018092116106e357565b90670de0b6b3a7640000918281029281840414901517156106e357565b818102929181159184041417156106e357565b9061251e64174876e800928392612517670de0b6b3a764000091838303838510026124de565b04906124b4565b048181029181830414901517156106e35790565b6001600160a01b039081612545826125c7565b168015612586573303612556575050565b7ffbecdbf4000000000000000000000000000000000000000000000000000000005f52336004521660245260445ffd5b507f8bcbf353000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b51906001600160a01b038216820361032357565b604080517fe9ddeb260000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526060816024817f000000000000000000000000000000000000000000000000000000000000000087165afa9081156126b7575f9161263e575b5001511690565b90506060813d6060116126af575b81612659606093836120dc565b81010312610323578151906060820182811067ffffffffffffffff82111761207f576126a5918491825261268c816125b3565b845261269a602082016125b3565b6020850152016125b3565b828201525f612637565b3d915061264c565b82513d5f823e3d90fd5b906126cb8261298f565b92905f5b8481106126dd575050505050565b6001906001600160a01b03806126f38386612213565b5116818616805f5260086020818152604094855f20855f528252855f20549586612725575b50505050505050016126cf565b7f938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f993855f528352805f20865f5283525f81812055612764878d88612b99565b519586528a1694a45f808080808080612718565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036127aa57565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b64174876e8008082048181029181830414901517156106e357036127f657565b7f833fb3ce000000000000000000000000000000000000000000000000000000005f5260045ffd5b61284a7fffffffff000000000000000000000000000000000000000000000000000000005f3516612147565b6001600160a01b036040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156103185784925f9261296d575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610318575f92612937575b50501561290f57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d8311612966575b61294e81836120dc565b810103126103235761295f9061211d565b5f80612906565b503d612944565b606491925061298890843d8611610f3c57610f2d81836120dc565b91906128b5565b906001600160a01b0380604051937fca4f28030000000000000000000000000000000000000000000000000000000085521660048401525f83602481847f0000000000000000000000000000000000000000000000000000000000000000165afa928315610318575f93612a05575b5050815190565b909192503d805f833e612a1881836120dc565b810160209182818303126103235780519067ffffffffffffffff821161032357019281601f85011215610323578351612a50816121ac565b94612a5e60405196876120dc565b818652848087019260051b820101938411610323578401905b838210612a8b575050505050905f806129fe565b81518381168103610323578152908401908401612a77565b91906001600160a01b0380931690815f52600760205260405f209284811693845f5260205260405f20549485612adc575b505050505050565b82612b21877f1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b595602095885f526007875260405f208a5f5287525f6040812055612b99565b6040519687521694a45f8080808080612ad4565b6001600160a01b03165f52600360205261214467ffffffffffffffff60405f205416600660205260405f2054906124f1565b6001600160a01b03165f52600260205261214467ffffffffffffffff60405f205416600560205260405f2054906124f1565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082019081526001600160a01b03938416602483015260448083019590955293815292612c2d925f9283929190612bf66064886120dc565b1694519082865af13d15612c91573d90612c0f82612254565b91612c1d60405193846120dc565b82523d5f602084013e5b83612c99565b8051908115159182612c6e575b5050612c435750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8192509060209181010312610323576020612c89910161211d565b155f80612c3a565b606090612c27565b90612cd65750805115612cae57805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580612d1c575b612ce7575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15612cdf56fea2646970667358221220779606b3785feb7919003f1a04823c3563027f2fdbcc858f33e7d2f27b80b35b64736f6c634300081b0033","opcodes":"PUSH1 0xE0 CALLVALUE PUSH2 0x109 JUMPI PUSH1 0x1F PUSH2 0x2E7D CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x10D JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x109 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x109 JUMPI ADDRESS PUSH1 0x80 MSTORE DUP1 PUSH1 0xA0 MSTORE PUSH1 0xC0 MSTORE PUSH1 0x40 MLOAD PUSH2 0x2D5B SWAP1 DUP2 PUSH2 0x122 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x2172 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0xED6 ADD MSTORE DUP2 DUP2 PUSH2 0x10FC ADD MSTORE PUSH2 0x2883 ADD MSTORE PUSH1 0xC0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x253 ADD MSTORE DUP2 DUP2 PUSH2 0x36E ADD MSTORE DUP2 DUP2 PUSH2 0x3F8 ADD MSTORE DUP2 DUP2 PUSH2 0x517 ADD MSTORE DUP2 DUP2 PUSH2 0x585 ADD MSTORE DUP2 DUP2 PUSH2 0x864 ADD MSTORE DUP2 DUP2 PUSH2 0x8D2 ADD MSTORE DUP2 DUP2 PUSH2 0xC7D ADD MSTORE DUP2 DUP2 PUSH2 0xDB3 ADD MSTORE DUP2 DUP2 PUSH2 0x15D6 ADD MSTORE DUP2 DUP2 PUSH2 0x177B ADD MSTORE DUP2 DUP2 PUSH2 0x191C ADD MSTORE DUP2 DUP2 PUSH2 0x1A76 ADD MSTORE DUP2 DUP2 PUSH2 0x1BE4 ADD MSTORE DUP2 DUP2 PUSH2 0x2350 ADD MSTORE DUP2 DUP2 PUSH2 0x2606 ADD MSTORE DUP2 DUP2 PUSH2 0x2782 ADD MSTORE PUSH2 0x29CE ADD MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x252AAB5 EQ PUSH2 0x1FA6 JUMPI POP DUP1 PUSH4 0x874327F EQ PUSH2 0x1B93 JUMPI DUP1 PUSH4 0xB8E059B EQ PUSH2 0x1B5B JUMPI DUP1 PUSH4 0xDDD60C6 EQ PUSH2 0x1B3A JUMPI DUP1 PUSH4 0x1377C16C EQ PUSH2 0x1A1B JUMPI DUP1 PUSH4 0x2772D156 EQ PUSH2 0x1838 JUMPI DUP1 PUSH4 0x2E1D388D EQ PUSH2 0x19F9 JUMPI DUP1 PUSH4 0x3AF52712 EQ PUSH2 0x18C1 JUMPI DUP1 PUSH4 0x52F125F0 EQ PUSH2 0x1896 JUMPI DUP1 PUSH4 0x55FB76AF EQ PUSH2 0x1879 JUMPI DUP1 PUSH4 0x5C15A0B4 EQ PUSH2 0x183D JUMPI DUP1 PUSH4 0x5E32E4E8 EQ PUSH2 0x1838 JUMPI DUP1 PUSH4 0x71447EA8 EQ PUSH2 0x1693 JUMPI DUP1 PUSH4 0x71ECC8FB EQ PUSH2 0x14EF JUMPI DUP1 PUSH4 0x77FF76E7 EQ PUSH2 0x125B JUMPI DUP1 PUSH4 0x7869EE18 EQ PUSH2 0x123F JUMPI DUP1 PUSH4 0x7A2B97DC EQ PUSH2 0x11D4 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x1184 JUMPI DUP1 PUSH4 0x8A3C5C69 EQ PUSH2 0x1120 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x10DD JUMPI DUP1 PUSH4 0x8DF44C54 EQ PUSH2 0x1055 JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0x1034 JUMPI DUP1 PUSH4 0x9E95F3FD EQ PUSH2 0xFA8 JUMPI DUP1 PUSH4 0xA93DF2A4 EQ PUSH2 0xF43 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xE90 JUMPI DUP1 PUSH4 0xABAA3356 EQ PUSH2 0xCE7 JUMPI DUP1 PUSH4 0xB53A70B2 EQ PUSH2 0xC00 JUMPI DUP1 PUSH4 0xC673BDAF EQ PUSH2 0xBC3 JUMPI DUP1 PUSH4 0xCF7B287F EQ PUSH2 0xB5D JUMPI DUP1 PUSH4 0xF7061445 EQ PUSH2 0xB28 JUMPI DUP1 PUSH4 0xFA399F2A EQ PUSH2 0x392 JUMPI DUP1 PUSH4 0xFBFA77CF EQ PUSH2 0x34F JUMPI PUSH4 0xFD267F39 EQ PUSH2 0x187 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A0 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1AC PUSH2 0x281E JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0x327 JUMPI PUSH2 0x1C4 DUP3 PUSH2 0x27D6 JUMP JUMPDEST PUSH2 0x1CD DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH2 0x1D6 DUP3 PUSH2 0x246F JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0x1E3 DUP2 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x27D DUP2 PUSH2 0x2B67 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x312 SWAP1 PUSH2 0x20AC JUMP JUMPDEST PUSH0 PUSH2 0x2FF JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x3AB PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x3B3 PUSH2 0x2778 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0xACB JUMPI JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH0 SWAP3 DUP3 ISZERO ISZERO SWAP4 DUP5 PUSH2 0xAC1 JUMPI JUMPDEST DUP5 PUSH2 0xAB1 JUMPI JUMPDEST PUSH2 0x472 DUP8 PUSH2 0x298F JUMP JUMPDEST SWAP5 SWAP1 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x822 JUMPI DUP10 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH0 SWAP3 PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 PUSH0 DUP5 ISZERO ISZERO SWAP5 DUP6 PUSH2 0x818 JUMPI JUMPDEST DUP6 PUSH2 0x806 JUMPI JUMPDEST PUSH2 0x4C7 DUP5 PUSH2 0x298F JUMP JUMPDEST SWAP7 SWAP1 PUSH0 JUMPDEST DUP9 DUP2 LT PUSH2 0x4D4 JUMPI STOP JUMPDEST PUSH2 0x4DE DUP2 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH2 0x4EC JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x4CB JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x4FF DUP12 DUP5 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x50C DUP12 DUP11 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x7F7 JUMPI SWAP1 DUP3 SWAP2 PUSH2 0x7E0 JUMPI JUMPDEST POP PUSH2 0x7B3 JUMPI POP PUSH0 SWAP10 DUP2 PUSH2 0x5C8 DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xE505E41B0D437B47350A9990142CCF38ACB11FFA0E5AF8F973B9E172F3D5D5E2 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP3 LOG3 DUP4 ISZERO PUSH2 0x738 JUMPI PUSH2 0x60E DUP2 DUP11 PUSH2 0x2213 JUMP JUMPDEST MLOAD DUP7 ISZERO PUSH2 0x710 JUMPI PUSH2 0x61E SWAP1 PUSH2 0x24C1 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x65F DUP11 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP13 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x24DE JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x693 DUP5 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x69F DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0x6D9 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x4E4 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 SWAP2 DUP6 PUSH2 0x77D JUMPI PUSH2 0x74A DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x6DC JUMP JUMPDEST PUSH2 0x787 DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST DUP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x24 SWAP3 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH2 0x7E9 SWAP1 PUSH2 0x20AC JUMP JUMPDEST PUSH2 0x7F4 JUMPI DUP1 DUP13 PUSH2 0x5B5 JUMP JUMPDEST DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST SWAP1 POP PUSH2 0x812 DUP2 DUP4 PUSH2 0x24F1 JUMP JUMPDEST SWAP1 PUSH2 0x4BE JUMP JUMPDEST DUP3 ISZERO ISZERO SWAP6 POP PUSH2 0x4B8 JUMP JUMPDEST PUSH2 0x82C DUP2 DUP8 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH2 0x83A JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x476 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x84C DUP3 DUP5 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x859 DUP2 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xAA2 JUMPI JUMPDEST POP DUP2 DUP12 PUSH32 0xAE7EBAD9FC3D1D17965F063FA520D393595E2EF6C8E22AE8413B60900444E19F PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x937 DUP7 DUP14 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 DUP9 ISZERO PUSH2 0xA27 JUMPI PUSH2 0x952 DUP2 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD DUP6 ISZERO PUSH2 0x710 JUMPI PUSH2 0x962 SWAP1 PUSH2 0x24C1 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x9A3 DUP10 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP12 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x24DE JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x9D7 DUP5 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x9E3 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0xA1D SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x832 JUMP JUMPDEST PUSH1 0x1 SWAP2 DUP5 PUSH2 0xA6C JUMPI PUSH2 0xA39 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0xA20 JUMP JUMPDEST PUSH2 0xA76 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST PUSH2 0xAAB SWAP1 PUSH2 0x20AC JUMP JUMPDEST DUP12 PUSH2 0x8FF JUMP JUMPDEST POP PUSH2 0xABC DUP4 DUP3 PUSH2 0x24F1 JUMP JUMPDEST PUSH2 0x469 JUMP JUMPDEST DUP2 ISZERO ISZERO SWAP5 POP PUSH2 0x463 JUMP JUMPDEST SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xADD DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x40 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x323 JUMPI DUP2 PUSH2 0xB0A SWAP2 DUP5 ADD PUSH2 0x240E JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x323 JUMPI PUSH2 0xB21 SWAP3 ADD PUSH2 0x240E JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x42A JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0xB44 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xB4C PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH2 0xB56 DUP2 PUSH2 0x2532 JUMP JUMPDEST PUSH2 0x26C1 JUMP JUMPDEST STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB76 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xB7E PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH2 0xB87 PUSH2 0x281E JUMP JUMPDEST PUSH2 0xB90 DUP2 PUSH2 0x298F JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0xB9C JUMPI STOP JUMPDEST DUP1 PUSH2 0xBBD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBB4 PUSH1 0x1 SWAP5 DUP8 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND DUP8 DUP6 PUSH2 0x2AA3 JUMP JUMPDEST ADD PUSH2 0xB93 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBE4 PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xC19 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xC21 PUSH2 0x1FF0 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP4 AND DUP1 DUP5 SUB PUSH2 0x323 JUMPI PUSH1 0x40 SWAP1 PUSH2 0xC43 PUSH2 0x281E JUMP JUMPDEST PUSH1 0x44 DUP3 MLOAD DUP1 SWAP8 DUP2 SWAP4 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP2 DUP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xCB4 JUMPI JUMPDEST PUSH2 0xB5B SWAP4 POP PUSH2 0x2AA3 JUMP JUMPDEST PUSH1 0x40 DUP5 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0xCDF JUMPI JUMPDEST DUP2 PUSH2 0xCCD PUSH1 0x40 SWAP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0xB5B SWAP4 POP PUSH2 0xCAA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xCC0 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xD00 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xD0C PUSH2 0x281E JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0xE68 JUMPI PUSH2 0xD24 DUP3 PUSH2 0x27D6 JUMP JUMPDEST PUSH2 0xD2D DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH2 0xD36 DUP3 PUSH2 0x246F JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0xD43 DUP2 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0xDDD DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0xA7849E8E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0xF14 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xF35 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0xF3C JUMPI JUMPDEST PUSH2 0xF2D DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x23EF JUMP JUMPDEST SWAP1 DUP4 PUSH2 0xF0A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xF23 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0xE68 JUMPI PUSH1 0x20 DUP2 PUSH2 0xF93 PUSH32 0x48C5C3CCEC54C4E0EA08D83D838FA9BB725EB0B52C591CB00BD6E63BCA8C44F6 SWAP4 PUSH2 0x27D6 JUMP JUMPDEST PUSH2 0xF9B PUSH2 0x281E JUMP JUMPDEST DUP1 PUSH1 0x1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xFC2 PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH2 0xFCC DUP3 PUSH2 0x298F JUMP JUMPDEST SWAP1 PUSH2 0xFD6 DUP3 PUSH2 0x21C4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0xFFF JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xFFB DUP9 DUP3 PUSH2 0x2028 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x8 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x1018 DUP4 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x102D DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MSTORE ADD PUSH2 0xFE6 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x1050 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x228E JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x106F PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH2 0x1079 DUP3 PUSH2 0x298F JUMP JUMPDEST SWAP1 PUSH2 0x1083 DUP3 PUSH2 0x21C4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0x10A8 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xFFB DUP9 DUP3 PUSH2 0x2028 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x7 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x10C1 DUP4 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x10D6 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MSTORE ADD PUSH2 0x1093 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0x327 JUMPI PUSH1 0x20 DUP2 PUSH2 0x1170 PUSH32 0xBF5AC0FC89BBF8819BE79F280146B65EA2AF2A9705CD9CFE0C9D93F6E87F307D SWAP4 PUSH2 0x27D6 JUMP JUMPDEST PUSH2 0x1178 PUSH2 0x281E JUMP JUMPDEST DUP1 PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI PUSH2 0x11CC PUSH1 0x20 SWAP2 PUSH2 0x2147 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x11F5 PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1210 DUP3 PUSH2 0x2063 JUMP JUMPDEST SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP1 DUP4 MSTORE PUSH1 0xFF PUSH1 0x40 SWAP3 DUP4 SHR AND ISZERO ISZERO SWAP4 SWAP1 SWAP3 ADD DUP4 SWAP1 MSTORE DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH0 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1274 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x127C PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 ISZERO ISZERO SWAP1 DUP2 DUP5 SUB PUSH2 0x323 JUMPI PUSH2 0x1294 PUSH2 0x2778 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP2 DUP3 PUSH0 MSTORE DUP3 PUSH1 0x20 SWAP3 PUSH1 0x4 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE DUP7 PUSH0 EQ PUSH2 0x14E4 JUMPI DUP4 PUSH0 SWAP7 DUP8 SWAP3 JUMPDEST DUP10 ISZERO PUSH2 0x1469 JUMPI DUP5 DUP4 DUP8 DUP13 PUSH0 SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1454 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 JUMPDEST PUSH2 0x1369 DUP5 PUSH2 0x246F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1376 DUP3 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP3 MSTORE PUSH1 0x3 PUSH2 0x13E6 DUP7 DUP5 ADD SWAP5 DUP7 DUP7 MSTORE DUP12 PUSH0 MSTORE PUSH1 0x2 DUP9 MSTORE PUSH1 0x40 DUP5 SWAP1 PUSH0 KECCAK256 SWAP6 MLOAD AND SWAP5 DUP1 SLOAD SWAP7 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP7 DUP8 PUSH9 0xFF0000000000000000 DUP1 SWAP11 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH2 0x246F JUMP JUMPDEST SWAP6 PUSH1 0x40 DUP4 SWAP1 MLOAD SWAP8 PUSH2 0x13F6 DUP10 PUSH2 0x2063 JUMP JUMPDEST AND DUP8 MSTORE DUP1 DUP8 ADD SWAP6 DUP7 MSTORE DUP11 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 PUSH2 0x143A SWAP1 MLOAD SWAP3 DUP4 SWAP3 DUP4 SWAP1 SWAP3 SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x40 DUP4 ADD SWAP5 DUP4 MSTORE ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 DUP14 MLOAD DUP13 DUP2 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x40 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 DUP10 MLOAD SWAP6 DUP7 MSTORE AND SWAP4 LOG3 DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE RETURN JUMPDEST DUP5 DUP4 DUP8 DUP13 PUSH1 0x1 SLOAD SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1454 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 PUSH2 0x1360 JUMP JUMPDEST DUP4 PUSH0 SLOAD SWAP7 DUP8 SWAP3 PUSH2 0x12E5 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1509 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x1512 DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1538 DUP4 PUSH2 0x2063 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH0 SLOAD SWAP4 DUP2 PUSH2 0x1688 JUMPI JUMPDEST POP PUSH2 0x1569 JUMPI STOP JUMPDEST PUSH2 0x1572 DUP4 PUSH2 0x246F JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1581 DUP5 PUSH2 0x2063 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x2 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x1600 DUP2 PUSH2 0x2B67 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1562 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x16AD PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x16B6 DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x16DC DUP4 PUSH2 0x2063 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH1 0x1 SLOAD SWAP4 DUP2 PUSH2 0x182D JUMPI JUMPDEST POP PUSH2 0x170E JUMPI STOP JUMPDEST PUSH2 0x1717 DUP4 PUSH2 0x246F JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1726 DUP5 PUSH2 0x2063 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x17A5 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1707 JUMP JUMPDEST PUSH2 0x2006 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x185E PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1210 DUP3 PUSH2 0x2063 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x18B2 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x18BB DUP2 PUSH2 0x25C7 JUMP JUMPDEST SWAP1 PUSH2 0x26C1 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x18DA PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x18E7 DUP2 PUSH2 0x2532 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x19D1 JUMPI PUSH2 0x18FF DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1946 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x47F70DDBC624C299CEF7841AAEA0A86B677C800203E953104E958C9EC9BDAB34 SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0x370DA7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0xDE0AD9B58F16000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A34 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1A41 DUP2 PUSH2 0x2532 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x19D1 JUMPI PUSH2 0x1A59 DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1AA0 DUP2 PUSH2 0x2B67 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xB7CF36369623C01ED7B2EAFC4025224E924A2836D5FB49428A0F65417586BF5C SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x1B2B JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x1B34 SWAP1 PUSH2 0x20AC JUMP JUMPDEST DUP5 PUSH2 0x2FF JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x11CC PUSH1 0x24 CALLDATALOAD PUSH1 0x4 CALLDATALOAD PUSH2 0x24F1 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1B7C PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1BAD PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0x1F6C JUMPI JUMPDEST POP AND SWAP3 ADDRESS DUP5 EQ PUSH2 0x1F44 JUMPI AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH2 0x1F18 JUMPI DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x5C15A0B400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x40 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0x1EF4 JUMPI JUMPDEST POP PUSH2 0x1CB7 SWAP1 PUSH2 0x246F JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1CC5 DUP3 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP4 AND DUP3 MSTORE DUP4 DUP3 ADD SWAP1 ISZERO ISZERO DUP2 MSTORE DUP5 PUSH0 MSTORE PUSH1 0x2 DUP5 MSTORE DUP3 PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND SWAP2 DUP1 SLOAD SWAP2 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP4 DUP5 PUSH9 0xFF0000000000000000 DUP1 SWAP6 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP2 PUSH32 0x7A2B97DC00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP6 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 DUP4 PUSH1 0x24 DUP2 DUP11 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP5 PUSH2 0x1EC0 JUMPI JUMPDEST POP PUSH2 0x1D7B SWAP1 PUSH2 0x246F JUMP JUMPDEST SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x1D8A DUP8 PUSH2 0x2063 JUMP JUMPDEST AND DUP6 MSTORE DUP6 DUP6 ADD SWAP4 ISZERO ISZERO DUP5 MSTORE DUP7 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xB8E059B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL PUSH0 SWAP2 DUP2 PUSH2 0x1E8E JUMPI JUMPDEST POP SWAP4 DUP3 SWAP2 PUSH1 0x24 SWAP6 PUSH2 0x1E7C JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x252AAB500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL PUSH0 SWAP4 DUP2 PUSH2 0x1E4D JUMPI JUMPDEST POP PUSH2 0x1E3E JUMPI STOP JUMPDEST PUSH1 0x6 SWAP2 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP1 SWAP4 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1E75 JUMPI JUMPDEST PUSH2 0x1E65 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD SWAP3 DUP5 PUSH2 0x1E37 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E5B JUMP JUMPDEST DUP5 PUSH0 MSTORE PUSH1 0x5 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE DUP6 PUSH2 0x1DFC JUMP JUMPDEST SWAP2 POP SWAP4 DUP3 DUP3 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1EB9 JUMPI JUMPDEST PUSH2 0x1EA6 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI SWAP1 MLOAD SWAP1 SWAP4 PUSH1 0x24 PUSH2 0x1DF0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E9C JUMP JUMPDEST PUSH2 0x1D7B SWAP5 POP PUSH2 0x1EE7 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1EED JUMPI JUMPDEST PUSH2 0x1EDF DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x212A JUMP JUMPDEST SWAP4 PUSH2 0x1D71 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1ED5 JUMP JUMPDEST PUSH2 0x1CB7 SWAP3 POP PUSH2 0x1F12 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1EED JUMPI PUSH2 0x1EDF DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST SWAP2 PUSH2 0x1CAD JUMP JUMPDEST POP PUSH32 0xDB771C8000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xB82FD5BF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 SWAP3 POP DUP5 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x1F9F JUMPI JUMPDEST PUSH2 0x1F85 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 SWAP1 DUP6 PUSH2 0x1C15 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1F7B JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1FCA PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x6 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x6F05B59D3B20000 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x204F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2041 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x323 JUMPI PUSH2 0x2144 PUSH1 0x20 DUP4 MLOAD SWAP4 ADD PUSH2 0x211D JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x21A6 DUP2 PUSH2 0x20C0 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x21CE DUP3 PUSH2 0x21AC JUMP JUMPDEST PUSH2 0x21DB PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x20DC JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x2209 DUP3 SWAP5 PUSH2 0x21AC JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x2227 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 PUSH0 PUSH1 0x1F PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP4 DUP4 PUSH1 0x44 PUSH1 0x20 SWAP7 DUP5 DUP9 DUP3 ADD SWAP5 PUSH32 0xFA399F2A00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x2300 DUP2 PUSH2 0x20C0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP12 PUSH1 0x4 DUP7 ADD MSTORE MLOAD DUP1 SWAP2 DUP2 PUSH1 0x24 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY DUP6 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0x2380 JUMPI POP POP JUMP JUMPDEST RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x238F DUP2 DUP5 PUSH2 0x20DC JUMP JUMPDEST DUP3 ADD SWAP2 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP3 MLOAD SWAP1 PUSH2 0x23C6 DUP3 PUSH2 0x2254 JUMP JUMPDEST SWAP1 PUSH2 0x23D4 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP3 DUP3 MSTORE DUP4 DUP4 DUP7 ADD ADD GT PUSH2 0x323 JUMPI DUP2 DUP4 PUSH0 SWAP6 ADD DUP5 DUP4 ADD MCOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x323 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x2429 DUP2 PUSH2 0x21AC JUMP JUMPDEST SWAP4 PUSH2 0x2437 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x20DC JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x323 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x2460 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x2452 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x2484 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x251E PUSH5 0x174876E800 SWAP3 DUP4 SWAP3 PUSH2 0x2517 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP4 DUP4 SUB DUP4 DUP6 LT MUL PUSH2 0x24DE JUMP JUMPDEST DIV SWAP1 PUSH2 0x24B4 JUMP JUMPDEST DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH2 0x2545 DUP3 PUSH2 0x25C7 JUMP JUMPDEST AND DUP1 ISZERO PUSH2 0x2586 JUMPI CALLER SUB PUSH2 0x2556 JUMPI POP POP JUMP JUMPDEST PUSH32 0xFBECDBF400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP PUSH32 0x8BCBF35300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x60 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 DUP8 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x26B7 JUMPI PUSH0 SWAP2 PUSH2 0x263E JUMPI JUMPDEST POP ADD MLOAD AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x26AF JUMPI JUMPDEST DUP2 PUSH2 0x2659 PUSH1 0x60 SWAP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x60 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH2 0x26A5 SWAP2 DUP5 SWAP2 DUP3 MSTORE PUSH2 0x268C DUP2 PUSH2 0x25B3 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x269A PUSH1 0x20 DUP3 ADD PUSH2 0x25B3 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE ADD PUSH2 0x25B3 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE PUSH0 PUSH2 0x2637 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x264C JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH2 0x26CB DUP3 PUSH2 0x298F JUMP JUMPDEST SWAP3 SWAP1 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x26DD JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x26F3 DUP4 DUP7 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND DUP2 DUP7 AND DUP1 PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP5 DUP6 PUSH0 KECCAK256 DUP6 PUSH0 MSTORE DUP3 MSTORE DUP6 PUSH0 KECCAK256 SLOAD SWAP6 DUP7 PUSH2 0x2725 JUMPI JUMPDEST POP POP POP POP POP POP POP ADD PUSH2 0x26CF JUMP JUMPDEST PUSH32 0x938F3A3A03EE425CCC0F8010B0468938CBAFD3750FA43BBDF09C6F75E97E51F9 SWAP4 DUP6 PUSH0 MSTORE DUP4 MSTORE DUP1 PUSH0 KECCAK256 DUP7 PUSH0 MSTORE DUP4 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE PUSH2 0x2764 DUP8 DUP14 DUP9 PUSH2 0x2B99 JUMP JUMPDEST MLOAD SWAP6 DUP7 MSTORE DUP11 AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2718 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x27AA JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SUB PUSH2 0x27F6 JUMPI JUMP JUMPDEST PUSH32 0x833FB3CE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x284A PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x2147 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x296D JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP3 PUSH2 0x2937 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x290F JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2966 JUMPI JUMPDEST PUSH2 0x294E DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0x295F SWAP1 PUSH2 0x211D JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x2906 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2944 JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x2988 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xF3C JUMPI PUSH2 0xF2D DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x28B5 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP4 PUSH2 0x2A05 JUMPI JUMPDEST POP POP DUP2 MLOAD SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2A18 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD PUSH1 0x20 SWAP2 DUP3 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP3 DUP2 PUSH1 0x1F DUP6 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP4 MLOAD PUSH2 0x2A50 DUP2 PUSH2 0x21AC JUMP JUMPDEST SWAP5 PUSH2 0x2A5E PUSH1 0x40 MLOAD SWAP7 DUP8 PUSH2 0x20DC JUMP JUMPDEST DUP2 DUP7 MSTORE DUP5 DUP1 DUP8 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP4 DUP5 GT PUSH2 0x323 JUMPI DUP5 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x2A8B JUMPI POP POP POP POP POP SWAP1 PUSH0 DUP1 PUSH2 0x29FE JUMP JUMPDEST DUP2 MLOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 MSTORE SWAP1 DUP5 ADD SWAP1 DUP5 ADD PUSH2 0x2A77 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 DUP5 DUP2 AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP5 DUP6 PUSH2 0x2ADC JUMPI JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 PUSH2 0x2B21 DUP8 PUSH32 0x1C2887FCB98F75E66BB9A36311F2D3D22FB204E6362106F30E9DF7EAF63131B5 SWAP6 PUSH1 0x20 SWAP6 DUP9 PUSH0 MSTORE PUSH1 0x7 DUP8 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP11 PUSH0 MSTORE DUP8 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH2 0x2B99 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2AD4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH2 0x2144 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x24F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH2 0x2144 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x24F1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP2 MSTORE SWAP3 PUSH2 0x2C2D SWAP3 PUSH0 SWAP3 DUP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2BF6 PUSH1 0x64 DUP9 PUSH2 0x20DC JUMP JUMPDEST AND SWAP5 MLOAD SWAP1 DUP3 DUP7 GAS CALL RETURNDATASIZE ISZERO PUSH2 0x2C91 JUMPI RETURNDATASIZE SWAP1 PUSH2 0x2C0F DUP3 PUSH2 0x2254 JUMP JUMPDEST SWAP2 PUSH2 0x2C1D PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x20DC JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMPDEST DUP4 PUSH2 0x2C99 JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x2C6E JUMPI JUMPDEST POP POP PUSH2 0x2C43 JUMPI POP JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 SWAP3 POP SWAP1 PUSH1 0x20 SWAP2 DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x2C89 SWAP2 ADD PUSH2 0x211D JUMP JUMPDEST ISZERO PUSH0 DUP1 PUSH2 0x2C3A JUMP JUMPDEST PUSH1 0x60 SWAP1 PUSH2 0x2C27 JUMP JUMPDEST SWAP1 PUSH2 0x2CD6 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x2CAE JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x2D1C JUMPI JUMPDEST PUSH2 0x2CE7 JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x2CDF JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH24 0x9606B3785FEB7919003F1A04823C3563027F2FDBCC858F33 0xE7 0xD2 CALLCODE PUSH28 0x80B35B64736F6C634300081B00330000000000000000000000000000 ","sourceMap":"3120:30085:63:-:0;;;;;;;;;;;;;-1:-1:-1;;3120:30085:63;;;;-1:-1:-1;;;;;3120:30085:63;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3120:30085:63;;;;;;971:4:67;1347:46:37;;923:14:40;;;409::72;;3120:30085:63;;;;;;;;1347:46:37;3120:30085:63;;;;;923:14:40;3120:30085:63;;;;;;;;;;;;;;;409:14:72;3120:30085:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3120:30085:63;;;;;;-1:-1:-1;3120:30085:63;;;;;-1:-1:-1;3120:30085:63"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":8176,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_18593":{"entryPoint":8154,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":9651,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_uint256_dyn_fromMemory":{"entryPoint":9230,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":8477,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":9199,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint256t_bool_fromMemory":{"entryPoint":8490,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":8232,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_uint256_bool":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"allocate_and_zero_memory_array_array_uint256_dyn":{"entryPoint":8644,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_uint256_dyn":{"entryPoint":8620,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":8788,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_uint256":{"entryPoint":9396,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256":{"entryPoint":9438,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256_18743":{"entryPoint":9409,"id":null,"parameterSlots":1,"returnSlots":1},"external_fun_MAX_PROTOCOL_SWAP_FEE_PERCENTAGE":{"entryPoint":8198,"id":null,"parameterSlots":0,"returnSlots":0},"finalize_allocation":{"entryPoint":8412,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_18595":{"entryPoint":8291,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_18728":{"entryPoint":8364,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_43115":{"entryPoint":8384,"id":null,"parameterSlots":1,"returnSlots":0},"fun_authenticateCaller":{"entryPoint":10270,"id":5469,"parameterSlots":0,"returnSlots":0},"fun_collectAggregateFees":{"entryPoint":8846,"id":14883,"parameterSlots":1,"returnSlots":0},"fun_computeAggregateFeePercentage":{"entryPoint":9457,"id":15530,"parameterSlots":2,"returnSlots":1},"fun_ensureCallerIsPoolCreator":{"entryPoint":9522,"id":15566,"parameterSlots":1,"returnSlots":0},"fun_ensureOnlyVault":{"entryPoint":10104,"id":28148,"parameterSlots":0,"returnSlots":0},"fun_ensureValidPrecision":{"entryPoint":10198,"id":16324,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":8519,"id":5487,"parameterSlots":1,"returnSlots":1},"fun_getAggregateFeePercentage":{"entryPoint":11061,"id":15500,"parameterSlots":1,"returnSlots":1},"fun_getAggregateFeePercentage_18729":{"entryPoint":11111,"id":15500,"parameterSlots":1,"returnSlots":1},"fun_getPoolCreator":{"entryPoint":9671,"id":15609,"parameterSlots":1,"returnSlots":1},"fun_getPoolTokensAndCount":{"entryPoint":10639,"id":15590,"parameterSlots":1,"returnSlots":2},"fun_safeTransfer":{"entryPoint":11161,"id":40221,"parameterSlots":3,"returnSlots":0},"fun_toUint64":{"entryPoint":9327,"id":43927,"parameterSlots":1,"returnSlots":1},"fun_verifyCallResultFromTarget":{"entryPoint":11417,"id":40673,"parameterSlots":3,"returnSlots":1},"fun_withdrawPoolCreatorFees":{"entryPoint":9921,"id":16227,"parameterSlots":2,"returnSlots":0},"fun_withdrawProtocolFees":{"entryPoint":10915,"id":16123,"parameterSlots":3,"returnSlots":0},"memory_array_index_access_contract_IERC20_dyn":{"entryPoint":8723,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"5427":[{"length":32,"start":8562}],"5654":[{"length":32,"start":3798},{"length":32,"start":4348},{"length":32,"start":10371}],"28110":[{"length":32,"start":595},{"length":32,"start":878},{"length":32,"start":1016},{"length":32,"start":1303},{"length":32,"start":1413},{"length":32,"start":2148},{"length":32,"start":2258},{"length":32,"start":3197},{"length":32,"start":3507},{"length":32,"start":5590},{"length":32,"start":6011},{"length":32,"start":6428},{"length":32,"start":6774},{"length":32,"start":7140},{"length":32,"start":9040},{"length":32,"start":9734},{"length":32,"start":10114},{"length":32,"start":10702}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f3560e01c9081630252aab514611fa6575080630874327f14611b935780630b8e059b14611b5b5780630ddd60c614611b3a5780631377c16c14611a1b5780632772d156146118385780632e1d388d146119f95780633af52712146118c157806352f125f01461189657806355fb76af146118795780635c15a0b41461183d5780635e32e4e81461183857806371447ea81461169357806371ecc8fb146114ef57806377ff76e71461125b5780637869ee181461123f5780637a2b97dc146111d4578063851c1bb3146111845780638a3c5c69146111205780638d928af8146110dd5780638df44c54146110555780638f4ab9ca146110345780639e95f3fd14610fa8578063a93df2a414610f43578063aaabadc514610e90578063abaa335614610ce7578063b53a70b214610c00578063c673bdaf14610bc3578063cf7b287f14610b5d578063f706144514610b28578063fa399f2a14610392578063fbfa77cf1461034f5763fd267f3914610187575f80fd5b34610323576040600319360112610323576101a0611fda565b602435906101ac61281e565b6706f05b59d3b200008211610327576101c4826127d6565b6101cd8161228e565b6101d68261246f565b916040516101e381612063565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600260205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169161027d81612b67565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e92602092610309575b50604051908152a2005b610312906120ac565b5f6102ff565b6040513d5f823e3d90fd5b5f80fd5b7f7e6eb7fb000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610323576020600319360112610323576103ab611fda565b6103b3612778565b6040517f8f4ab9ca0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201525f81602481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610318575f905f92610acb575b506001600160a01b0383165f52600260205267ffffffffffffffff60405f20541690600560205260405f2054905f928215159384610ac1575b84610ab1575b6104728761298f565b94905f5b8681106108225789896001600160a01b0382165f52600360205267ffffffffffffffff60405f205416905f92600660205260405f2054925f8415159485610818575b85610806575b6104c78461298f565b96905f5b8881106104d457005b6104de8189612213565b516104ec575b6001016104cb565b986001600160a01b036104ff8b84612213565b51169061050c8b8a612213565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561080257604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201528181606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156107f7579082916107e0575b506107b357505f99816105c8828b612213565b516040519081527fe505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e260206001600160a01b038c1692a383156107385761060e818a612213565b5186156107105761061e906124c1565b6001670de0b6b3a764000061065f8a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848c8783010401901515026124de565b928301040190151502916001600160a01b0389165f52600760205260405f20815f5260205260405f206106938482546124b4565b905561069f828b612213565b519081848103116106e3576001936106d9916001600160a01b038c165f52600860205260405f20905f5260205260405f20920382546124b4565b90555b90506104e4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001918561077d5761074a828b612213565b51906001600160a01b038a165f52600760205260405f20905f5260205261077660405f209182546124b4565b90556106dc565b610787828b612213565b51906001600160a01b038a165f52600860205260405f20905f5260205261077660405f209182546124b4565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6107e9906120ac565b6107f457808c6105b5565b80fd5b6040513d84823e3d90fd5b5080fd5b905061081281836124f1565b906104be565b82151595506104b8565b61082c8187612213565b5161083a575b600101610476565b6001600160a01b0361084c8284612213565b5116906108598188612213565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561032357604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201525f81606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561031857610aa2575b50818b7fae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f60206001600160a01b03610937868d612213565b51936040519485521692a38815610a27576109528188612213565b51851561071057610962906124c1565b6001670de0b6b3a76400006109a3897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848b8783010401901515026124de565b928301040190151502916001600160a01b038c165f52600760205260405f20815f5260205260405f206109d78482546124b4565b90556109e38289612213565b519081848103116106e357600193610a1d916001600160a01b038f165f52600860205260405f20905f5260205260405f20920382546124b4565b90555b9050610832565b60019184610a6c57610a398289612213565b51906001600160a01b038d165f52600760205260405f20905f52602052610a6560405f209182546124b4565b9055610a20565b610a768289612213565b51906001600160a01b038d165f52600860205260405f20905f52602052610a6560405f209182546124b4565b610aab906120ac565b8b6108ff565b50610abc83826124f1565b610469565b8115159450610463565b9150503d805f833e610add81836120dc565b8101906040818303126103235780519167ffffffffffffffff928381116103235781610b0a91840161240e565b92602083015190811161032357610b21920161240e565b908361042a565b3461032357604060031936011261032357610b5b610b44611fda565b610b4c611ff0565b90610b5681612532565b6126c1565b005b3461032357604060031936011261032357610b76611fda565b610b7e611ff0565b90610b8761281e565b610b908161298f565b915f5b838110610b9c57005b80610bbd6001600160a01b03610bb460019487612213565b51168785612aa3565b01610b93565b34610323576020600319360112610323576001600160a01b03610be4611fda565b165f526004602052602060ff60405f2054166040519015158152f35b3461032357606060031936011261032357610c19611fda565b610c21611ff0565b604435906001600160a01b039283831680840361032357604090610c4361281e565b60448251809781937fc9c1661b000000000000000000000000000000000000000000000000000000008352818716600484015260248301527f0000000000000000000000000000000000000000000000000000000000000000165afa801561031857610cb4575b610b5b9350612aa3565b6040843d604011610cdf575b81610ccd604093836120dc565b8101031261032357610b5b9350610caa565b3d9150610cc0565b3461032357604060031936011261032357610d00611fda565b60243590610d0c61281e565b6706f05b59d3b200008211610e6857610d24826127d6565b610d2d8161228e565b610d368261246f565b91604051610d4381612063565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600360205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f00000000000000000000000000000000000000000000000000000000000000001691610ddd81612b35565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd926020926103095750604051908152a2005b7fa7849e8e000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576040517faaabadc50000000000000000000000000000000000000000000000000000000081526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa908115610318576020925f92610f14575b5060405191168152f35b610f35919250833d8511610f3c575b610f2d81836120dc565b8101906123ef565b9083610f0a565b503d610f23565b34610323576020600319360112610323576004356706f05b59d3b200008111610e6857602081610f937f48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f6936127d6565b610f9b61281e565b80600155604051908152a1005b346103235760208060031936011261032357610fc2611fda565b90610fcc8261298f565b90610fd6826121c4565b925f946001600160a01b03809116955b848110610fff5760405180610ffb8882612028565b0390f35b600190875f526008845260405f20836110188388612213565b51165f52845260405f205461102d8289612213565b5201610fe6565b3461032357602060031936011261032357610b5b611050611fda565b61228e565b34610323576020806003193601126103235761106f611fda565b906110798261298f565b90611083826121c4565b925f946001600160a01b03809116955b8481106110a85760405180610ffb8882612028565b600190875f526007845260405f20836110c18388612213565b51165f52845260405f20546110d68289612213565b5201611093565b34610323575f6003193601126103235760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610323576020600319360112610323576004356706f05b59d3b200008111610327576020816111707fbf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d936127d6565b61117861281e565b805f55604051908152a1005b34610323576020600319360112610323576004357fffffffff0000000000000000000000000000000000000000000000000000000081168103610323576111cc602091612147565b604051908152f35b34610323576020600319360112610323576001600160a01b036111f5611fda565b165f526003602052602060405f206040519061121082612063565b5467ffffffffffffffff811680835260ff604092831c1615159390920183905280519182526020820192909252f35b34610323575f6003193601126103235760205f54604051908152f35b3461032357606060031936011261032357611274611fda565b61127c611ff0565b90604435918215159081840361032357611294612778565b6001600160a01b0380931691825f52826020926004845260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055865f146114e457835f9687925b8915611469578483878c5f9b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611454967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb985b6113698461246f565b6040519061137682612063565b67ffffffffffffffff809116825260036113e6868401948686528b5f5260028852604084905f209551169480549651151560401b967fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000968768ff0000000000000000809a1692161717905561246f565b956040839051976113f689612063565b1687528087019586528a5f525260405f209451169184549351151560401b16921617179055604061143a905192839283909291602090604083019483521515910152565b0390a28d518c815290151560208201529081906040820190565b0390a289519586521693a38351928352820152f35b8483878c6001549b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611454967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb98611360565b835f549687926112e5565b346103235760208060031936011261032357611509611fda565b6115128161228e565b6001600160a01b039182821692835f526002825260405f20906040519161153883612063565b549167ffffffffffffffff9060ff8285169485835260401c1615908582159101525f549381611688575b5061156957005b6115728361246f565b90806040519261158184612063565b168252848201905f8252875f526002865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169261160081612b67565b843b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e936103095750604051908152a2005b905083141587611562565b3461032357602080600319360112610323576116ad611fda565b6116b68161228e565b6001600160a01b039182821692835f526003825260405f2090604051916116dc83612063565b549167ffffffffffffffff9060ff8285169485835260401c161590858215910152600154938161182d575b5061170e57005b6117178361246f565b90806040519261172684612063565b168252848201905f8252875f526003865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f000000000000000000000000000000000000000000000000000000000000000016926117a581612b35565b843b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af1928315610318577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd936103095750604051908152a2005b905083141587611707565b612006565b34610323576020600319360112610323576001600160a01b0361185e611fda565b165f526002602052602060405f206040519061121082612063565b34610323575f600319360112610323576020600154604051908152f35b3461032357602060031936011261032357610b5b6118b2611fda565b6118bb816125c7565b906126c1565b34610323576040600319360112610323576118da611fda565b602435906118e781612532565b670de0ad9b58f1600082116119d1576118ff8161228e565b6001600160a01b039182821692835f5260066020528160405f20557f0000000000000000000000000000000000000000000000000000000000000000169161194681612b35565b833b15610323576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577f47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab34926020926103095750604051908152a2005b7f0370da74000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610323575f600319360112610323576020604051670de0ad9b58f160008152f35b3461032357604060031936011261032357611a34611fda565b60243590611a4181612532565b670de0ad9b58f1600082116119d157611a598161228e565b6001600160a01b039182821692835f5260056020528160405f20557f00000000000000000000000000000000000000000000000000000000000000001691611aa081612b67565b833b15610323576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af1908115610318577fb7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c92602092611b2b5750604051908152a2005b611b34906120ac565b846102ff565b346103235760406003193601126103235760206111cc6024356004356124f1565b34610323576020600319360112610323576001600160a01b03611b7c611fda565b165f526005602052602060405f2054604051908152f35b346103235760208060031936011261032357611bad611fda565b906001600160a01b036040517f85f2dbd40000000000000000000000000000000000000000000000000000000081528281600481857f0000000000000000000000000000000000000000000000000000000000000000165afa80156103185782915f91611f6c575b501692308414611f44571690815f526004815260ff60405f205416611f1857815f526004815260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556040517f5c15a0b4000000000000000000000000000000000000000000000000000000008152826004820152604081602481875afa908115610318575f905f92611ef4575b50611cb79061246f565b9060405190611cc582612063565b67ffffffffffffffff80931682528382019015158152845f52600284528260405f209251169180549151151560401b917fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000938468ff0000000000000000809516921617179055604051917f7a2b97dc0000000000000000000000000000000000000000000000000000000083528560048401526040836024818a5afa928315610318575f905f94611ec0575b50611d7b9061246f565b938060405195611d8a87612063565b1685528585019315158452865f526003865260405f209451169184549351151560401b169216171790556040517f0b8e059b0000000000000000000000000000000000000000000000000000000081528260048201528181602481875afa5f9181611e8e575b50938291602495611e7c575b50604051948580927f0252aab50000000000000000000000000000000000000000000000000000000082528660048301525afa5f9381611e4d575b50611e3e57005b6006915f525260405f20555f80f35b9093508181813d8311611e75575b611e6581836120dc565b8101031261032357519284611e37565b503d611e5b565b845f526005835260405f205585611dfc565b9150938282813d8311611eb9575b611ea681836120dc565b8101031261032357905190936024611df0565b503d611e9c565b611d7b9450611ee7915060403d604011611eed575b611edf81836120dc565b81019061212a565b93611d71565b503d611ed5565b611cb79250611f12915060403d604011611eed57611edf81836120dc565b91611cad565b507fdb771c80000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fb82fd5bf000000000000000000000000000000000000000000000000000000005f5260045ffd5b809250848092503d8311611f9f575b611f8581836120dc565b810103126103235751818116810361032357819085611c15565b503d611f7b565b34610323576020600319360112610323576020906001600160a01b03611fca611fda565b165f526006825260405f20548152f35b600435906001600160a01b038216820361032357565b602435906001600160a01b038216820361032357565b34610323575f6003193601126103235760206040516706f05b59d3b200008152f35b60209060206040818301928281528551809452019301915f5b82811061204f575050505090565b835185529381019392810192600101612041565b6040810190811067ffffffffffffffff82111761207f57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161207f57604052565b6060810190811067ffffffffffffffff82111761207f57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761207f57604052565b5190811515820361032357565b91908260409103126103235761214460208351930161211d565b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526121a6816120c0565b51902090565b67ffffffffffffffff811161207f5760051b60200190565b906121ce826121ac565b6121db60405191826120dc565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061220982946121ac565b0190602036910137565b80518210156122275760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b67ffffffffffffffff811161207f57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0905f601f6001600160a01b036040519383604460209684888201947ffa399f2a00000000000000000000000000000000000000000000000000000000865216602482015260248152612300816120c0565b604051988996879586937f48c894910000000000000000000000000000000000000000000000000000000085528b60048601525180918160248701528686015e85858286010152011681010301927f0000000000000000000000000000000000000000000000000000000000000000165af1801561031857612380575050565b3d805f843e61238f81846120dc565b82019181818403126103235780519067ffffffffffffffff821161032357019180601f84011215610323578251906123c682612254565b906123d460405192836120dc565b8282528383860101116103235781835f95018483015e010152565b9081602091031261032357516001600160a01b03811681036103235790565b9080601f8301121561032357815190602091612429816121ac565b9361243760405195866120dc565b81855260208086019260051b82010192831161032357602001905b828210612460575050505090565b81518152908301908301612452565b67ffffffffffffffff90818111612484571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b919082018092116106e357565b90670de0b6b3a7640000918281029281840414901517156106e357565b818102929181159184041417156106e357565b9061251e64174876e800928392612517670de0b6b3a764000091838303838510026124de565b04906124b4565b048181029181830414901517156106e35790565b6001600160a01b039081612545826125c7565b168015612586573303612556575050565b7ffbecdbf4000000000000000000000000000000000000000000000000000000005f52336004521660245260445ffd5b507f8bcbf353000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b51906001600160a01b038216820361032357565b604080517fe9ddeb260000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526060816024817f000000000000000000000000000000000000000000000000000000000000000087165afa9081156126b7575f9161263e575b5001511690565b90506060813d6060116126af575b81612659606093836120dc565b81010312610323578151906060820182811067ffffffffffffffff82111761207f576126a5918491825261268c816125b3565b845261269a602082016125b3565b6020850152016125b3565b828201525f612637565b3d915061264c565b82513d5f823e3d90fd5b906126cb8261298f565b92905f5b8481106126dd575050505050565b6001906001600160a01b03806126f38386612213565b5116818616805f5260086020818152604094855f20855f528252855f20549586612725575b50505050505050016126cf565b7f938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f993855f528352805f20865f5283525f81812055612764878d88612b99565b519586528a1694a45f808080808080612718565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036127aa57565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b64174876e8008082048181029181830414901517156106e357036127f657565b7f833fb3ce000000000000000000000000000000000000000000000000000000005f5260045ffd5b61284a7fffffffff000000000000000000000000000000000000000000000000000000005f3516612147565b6001600160a01b036040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156103185784925f9261296d575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610318575f92612937575b50501561290f57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d8311612966575b61294e81836120dc565b810103126103235761295f9061211d565b5f80612906565b503d612944565b606491925061298890843d8611610f3c57610f2d81836120dc565b91906128b5565b906001600160a01b0380604051937fca4f28030000000000000000000000000000000000000000000000000000000085521660048401525f83602481847f0000000000000000000000000000000000000000000000000000000000000000165afa928315610318575f93612a05575b5050815190565b909192503d805f833e612a1881836120dc565b810160209182818303126103235780519067ffffffffffffffff821161032357019281601f85011215610323578351612a50816121ac565b94612a5e60405196876120dc565b818652848087019260051b820101938411610323578401905b838210612a8b575050505050905f806129fe565b81518381168103610323578152908401908401612a77565b91906001600160a01b0380931690815f52600760205260405f209284811693845f5260205260405f20549485612adc575b505050505050565b82612b21877f1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b595602095885f526007875260405f208a5f5287525f6040812055612b99565b6040519687521694a45f8080808080612ad4565b6001600160a01b03165f52600360205261214467ffffffffffffffff60405f205416600660205260405f2054906124f1565b6001600160a01b03165f52600260205261214467ffffffffffffffff60405f205416600560205260405f2054906124f1565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082019081526001600160a01b03938416602483015260448083019590955293815292612c2d925f9283929190612bf66064886120dc565b1694519082865af13d15612c91573d90612c0f82612254565b91612c1d60405193846120dc565b82523d5f602084013e5b83612c99565b8051908115159182612c6e575b5050612c435750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8192509060209181010312610323576020612c89910161211d565b155f80612c3a565b606090612c27565b90612cd65750805115612cae57805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580612d1c575b612ce7575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15612cdf56fea2646970667358221220779606b3785feb7919003f1a04823c3563027f2fdbcc858f33e7d2f27b80b35b64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x252AAB5 EQ PUSH2 0x1FA6 JUMPI POP DUP1 PUSH4 0x874327F EQ PUSH2 0x1B93 JUMPI DUP1 PUSH4 0xB8E059B EQ PUSH2 0x1B5B JUMPI DUP1 PUSH4 0xDDD60C6 EQ PUSH2 0x1B3A JUMPI DUP1 PUSH4 0x1377C16C EQ PUSH2 0x1A1B JUMPI DUP1 PUSH4 0x2772D156 EQ PUSH2 0x1838 JUMPI DUP1 PUSH4 0x2E1D388D EQ PUSH2 0x19F9 JUMPI DUP1 PUSH4 0x3AF52712 EQ PUSH2 0x18C1 JUMPI DUP1 PUSH4 0x52F125F0 EQ PUSH2 0x1896 JUMPI DUP1 PUSH4 0x55FB76AF EQ PUSH2 0x1879 JUMPI DUP1 PUSH4 0x5C15A0B4 EQ PUSH2 0x183D JUMPI DUP1 PUSH4 0x5E32E4E8 EQ PUSH2 0x1838 JUMPI DUP1 PUSH4 0x71447EA8 EQ PUSH2 0x1693 JUMPI DUP1 PUSH4 0x71ECC8FB EQ PUSH2 0x14EF JUMPI DUP1 PUSH4 0x77FF76E7 EQ PUSH2 0x125B JUMPI DUP1 PUSH4 0x7869EE18 EQ PUSH2 0x123F JUMPI DUP1 PUSH4 0x7A2B97DC EQ PUSH2 0x11D4 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x1184 JUMPI DUP1 PUSH4 0x8A3C5C69 EQ PUSH2 0x1120 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x10DD JUMPI DUP1 PUSH4 0x8DF44C54 EQ PUSH2 0x1055 JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0x1034 JUMPI DUP1 PUSH4 0x9E95F3FD EQ PUSH2 0xFA8 JUMPI DUP1 PUSH4 0xA93DF2A4 EQ PUSH2 0xF43 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0xE90 JUMPI DUP1 PUSH4 0xABAA3356 EQ PUSH2 0xCE7 JUMPI DUP1 PUSH4 0xB53A70B2 EQ PUSH2 0xC00 JUMPI DUP1 PUSH4 0xC673BDAF EQ PUSH2 0xBC3 JUMPI DUP1 PUSH4 0xCF7B287F EQ PUSH2 0xB5D JUMPI DUP1 PUSH4 0xF7061445 EQ PUSH2 0xB28 JUMPI DUP1 PUSH4 0xFA399F2A EQ PUSH2 0x392 JUMPI DUP1 PUSH4 0xFBFA77CF EQ PUSH2 0x34F JUMPI PUSH4 0xFD267F39 EQ PUSH2 0x187 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A0 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1AC PUSH2 0x281E JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0x327 JUMPI PUSH2 0x1C4 DUP3 PUSH2 0x27D6 JUMP JUMPDEST PUSH2 0x1CD DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH2 0x1D6 DUP3 PUSH2 0x246F JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0x1E3 DUP2 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x27D DUP2 PUSH2 0x2B67 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x312 SWAP1 PUSH2 0x20AC JUMP JUMPDEST PUSH0 PUSH2 0x2FF JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x3AB PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x3B3 PUSH2 0x2778 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0xACB JUMPI JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH0 SWAP3 DUP3 ISZERO ISZERO SWAP4 DUP5 PUSH2 0xAC1 JUMPI JUMPDEST DUP5 PUSH2 0xAB1 JUMPI JUMPDEST PUSH2 0x472 DUP8 PUSH2 0x298F JUMP JUMPDEST SWAP5 SWAP1 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x822 JUMPI DUP10 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH0 SWAP3 PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 PUSH0 DUP5 ISZERO ISZERO SWAP5 DUP6 PUSH2 0x818 JUMPI JUMPDEST DUP6 PUSH2 0x806 JUMPI JUMPDEST PUSH2 0x4C7 DUP5 PUSH2 0x298F JUMP JUMPDEST SWAP7 SWAP1 PUSH0 JUMPDEST DUP9 DUP2 LT PUSH2 0x4D4 JUMPI STOP JUMPDEST PUSH2 0x4DE DUP2 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH2 0x4EC JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x4CB JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x4FF DUP12 DUP5 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x50C DUP12 DUP11 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x802 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x7F7 JUMPI SWAP1 DUP3 SWAP2 PUSH2 0x7E0 JUMPI JUMPDEST POP PUSH2 0x7B3 JUMPI POP PUSH0 SWAP10 DUP2 PUSH2 0x5C8 DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xE505E41B0D437B47350A9990142CCF38ACB11FFA0E5AF8F973B9E172F3D5D5E2 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP3 LOG3 DUP4 ISZERO PUSH2 0x738 JUMPI PUSH2 0x60E DUP2 DUP11 PUSH2 0x2213 JUMP JUMPDEST MLOAD DUP7 ISZERO PUSH2 0x710 JUMPI PUSH2 0x61E SWAP1 PUSH2 0x24C1 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x65F DUP11 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP13 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x24DE JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x693 DUP5 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x69F DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0x6D9 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x4E4 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 SWAP2 DUP6 PUSH2 0x77D JUMPI PUSH2 0x74A DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x6DC JUMP JUMPDEST PUSH2 0x787 DUP3 DUP12 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x776 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST DUP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x24 SWAP3 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH2 0x7E9 SWAP1 PUSH2 0x20AC JUMP JUMPDEST PUSH2 0x7F4 JUMPI DUP1 DUP13 PUSH2 0x5B5 JUMP JUMPDEST DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST SWAP1 POP PUSH2 0x812 DUP2 DUP4 PUSH2 0x24F1 JUMP JUMPDEST SWAP1 PUSH2 0x4BE JUMP JUMPDEST DUP3 ISZERO ISZERO SWAP6 POP PUSH2 0x4B8 JUMP JUMPDEST PUSH2 0x82C DUP2 DUP8 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH2 0x83A JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x476 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x84C DUP3 DUP5 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x859 DUP2 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xAA2 JUMPI JUMPDEST POP DUP2 DUP12 PUSH32 0xAE7EBAD9FC3D1D17965F063FA520D393595E2EF6C8E22AE8413B60900444E19F PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x937 DUP7 DUP14 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 DUP9 ISZERO PUSH2 0xA27 JUMPI PUSH2 0x952 DUP2 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD DUP6 ISZERO PUSH2 0x710 JUMPI PUSH2 0x962 SWAP1 PUSH2 0x24C1 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x9A3 DUP10 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP12 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x24DE JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x9D7 DUP5 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x9E3 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x6E3 JUMPI PUSH1 0x1 SWAP4 PUSH2 0xA1D SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x832 JUMP JUMPDEST PUSH1 0x1 SWAP2 DUP5 PUSH2 0xA6C JUMPI PUSH2 0xA39 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0xA20 JUMP JUMPDEST PUSH2 0xA76 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA65 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x24B4 JUMP JUMPDEST PUSH2 0xAAB SWAP1 PUSH2 0x20AC JUMP JUMPDEST DUP12 PUSH2 0x8FF JUMP JUMPDEST POP PUSH2 0xABC DUP4 DUP3 PUSH2 0x24F1 JUMP JUMPDEST PUSH2 0x469 JUMP JUMPDEST DUP2 ISZERO ISZERO SWAP5 POP PUSH2 0x463 JUMP JUMPDEST SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xADD DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x40 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x323 JUMPI DUP2 PUSH2 0xB0A SWAP2 DUP5 ADD PUSH2 0x240E JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x323 JUMPI PUSH2 0xB21 SWAP3 ADD PUSH2 0x240E JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x42A JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0xB44 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xB4C PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH2 0xB56 DUP2 PUSH2 0x2532 JUMP JUMPDEST PUSH2 0x26C1 JUMP JUMPDEST STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB76 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xB7E PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH2 0xB87 PUSH2 0x281E JUMP JUMPDEST PUSH2 0xB90 DUP2 PUSH2 0x298F JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0xB9C JUMPI STOP JUMPDEST DUP1 PUSH2 0xBBD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBB4 PUSH1 0x1 SWAP5 DUP8 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND DUP8 DUP6 PUSH2 0x2AA3 JUMP JUMPDEST ADD PUSH2 0xB93 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBE4 PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xC19 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xC21 PUSH2 0x1FF0 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP4 AND DUP1 DUP5 SUB PUSH2 0x323 JUMPI PUSH1 0x40 SWAP1 PUSH2 0xC43 PUSH2 0x281E JUMP JUMPDEST PUSH1 0x44 DUP3 MLOAD DUP1 SWAP8 DUP2 SWAP4 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP2 DUP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0xCB4 JUMPI JUMPDEST PUSH2 0xB5B SWAP4 POP PUSH2 0x2AA3 JUMP JUMPDEST PUSH1 0x40 DUP5 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0xCDF JUMPI JUMPDEST DUP2 PUSH2 0xCCD PUSH1 0x40 SWAP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0xB5B SWAP4 POP PUSH2 0xCAA JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xCC0 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xD00 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xD0C PUSH2 0x281E JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0xE68 JUMPI PUSH2 0xD24 DUP3 PUSH2 0x27D6 JUMP JUMPDEST PUSH2 0xD2D DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH2 0xD36 DUP3 PUSH2 0x246F JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0xD43 DUP2 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0xDDD DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0xA7849E8E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0xF14 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xF35 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0xF3C JUMPI JUMPDEST PUSH2 0xF2D DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x23EF JUMP JUMPDEST SWAP1 DUP4 PUSH2 0xF0A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xF23 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0xE68 JUMPI PUSH1 0x20 DUP2 PUSH2 0xF93 PUSH32 0x48C5C3CCEC54C4E0EA08D83D838FA9BB725EB0B52C591CB00BD6E63BCA8C44F6 SWAP4 PUSH2 0x27D6 JUMP JUMPDEST PUSH2 0xF9B PUSH2 0x281E JUMP JUMPDEST DUP1 PUSH1 0x1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xFC2 PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH2 0xFCC DUP3 PUSH2 0x298F JUMP JUMPDEST SWAP1 PUSH2 0xFD6 DUP3 PUSH2 0x21C4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0xFFF JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xFFB DUP9 DUP3 PUSH2 0x2028 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x8 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x1018 DUP4 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x102D DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MSTORE ADD PUSH2 0xFE6 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x1050 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x228E JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x106F PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH2 0x1079 DUP3 PUSH2 0x298F JUMP JUMPDEST SWAP1 PUSH2 0x1083 DUP3 PUSH2 0x21C4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0x10A8 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xFFB DUP9 DUP3 PUSH2 0x2028 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x7 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x10C1 DUP4 DUP9 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x10D6 DUP3 DUP10 PUSH2 0x2213 JUMP JUMPDEST MSTORE ADD PUSH2 0x1093 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0x327 JUMPI PUSH1 0x20 DUP2 PUSH2 0x1170 PUSH32 0xBF5AC0FC89BBF8819BE79F280146B65EA2AF2A9705CD9CFE0C9D93F6E87F307D SWAP4 PUSH2 0x27D6 JUMP JUMPDEST PUSH2 0x1178 PUSH2 0x281E JUMP JUMPDEST DUP1 PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI PUSH2 0x11CC PUSH1 0x20 SWAP2 PUSH2 0x2147 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x11F5 PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1210 DUP3 PUSH2 0x2063 JUMP JUMPDEST SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP1 DUP4 MSTORE PUSH1 0xFF PUSH1 0x40 SWAP3 DUP4 SHR AND ISZERO ISZERO SWAP4 SWAP1 SWAP3 ADD DUP4 SWAP1 MSTORE DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH0 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1274 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x127C PUSH2 0x1FF0 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 ISZERO ISZERO SWAP1 DUP2 DUP5 SUB PUSH2 0x323 JUMPI PUSH2 0x1294 PUSH2 0x2778 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP2 DUP3 PUSH0 MSTORE DUP3 PUSH1 0x20 SWAP3 PUSH1 0x4 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE DUP7 PUSH0 EQ PUSH2 0x14E4 JUMPI DUP4 PUSH0 SWAP7 DUP8 SWAP3 JUMPDEST DUP10 ISZERO PUSH2 0x1469 JUMPI DUP5 DUP4 DUP8 DUP13 PUSH0 SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1454 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 JUMPDEST PUSH2 0x1369 DUP5 PUSH2 0x246F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1376 DUP3 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP3 MSTORE PUSH1 0x3 PUSH2 0x13E6 DUP7 DUP5 ADD SWAP5 DUP7 DUP7 MSTORE DUP12 PUSH0 MSTORE PUSH1 0x2 DUP9 MSTORE PUSH1 0x40 DUP5 SWAP1 PUSH0 KECCAK256 SWAP6 MLOAD AND SWAP5 DUP1 SLOAD SWAP7 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP7 DUP8 PUSH9 0xFF0000000000000000 DUP1 SWAP11 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH2 0x246F JUMP JUMPDEST SWAP6 PUSH1 0x40 DUP4 SWAP1 MLOAD SWAP8 PUSH2 0x13F6 DUP10 PUSH2 0x2063 JUMP JUMPDEST AND DUP8 MSTORE DUP1 DUP8 ADD SWAP6 DUP7 MSTORE DUP11 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 PUSH2 0x143A SWAP1 MLOAD SWAP3 DUP4 SWAP3 DUP4 SWAP1 SWAP3 SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x40 DUP4 ADD SWAP5 DUP4 MSTORE ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 DUP14 MLOAD DUP13 DUP2 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x40 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 DUP10 MLOAD SWAP6 DUP7 MSTORE AND SWAP4 LOG3 DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE RETURN JUMPDEST DUP5 DUP4 DUP8 DUP13 PUSH1 0x1 SLOAD SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1454 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 PUSH2 0x1360 JUMP JUMPDEST DUP4 PUSH0 SLOAD SWAP7 DUP8 SWAP3 PUSH2 0x12E5 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1509 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x1512 DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1538 DUP4 PUSH2 0x2063 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH0 SLOAD SWAP4 DUP2 PUSH2 0x1688 JUMPI JUMPDEST POP PUSH2 0x1569 JUMPI STOP JUMPDEST PUSH2 0x1572 DUP4 PUSH2 0x246F JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1581 DUP5 PUSH2 0x2063 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x2 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x1600 DUP2 PUSH2 0x2B67 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1562 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x16AD PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x16B6 DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x16DC DUP4 PUSH2 0x2063 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH1 0x1 SLOAD SWAP4 DUP2 PUSH2 0x182D JUMPI JUMPDEST POP PUSH2 0x170E JUMPI STOP JUMPDEST PUSH2 0x1717 DUP4 PUSH2 0x246F JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1726 DUP5 PUSH2 0x2063 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x17A5 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP4 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1707 JUMP JUMPDEST PUSH2 0x2006 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x185E PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1210 DUP3 PUSH2 0x2063 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0xB5B PUSH2 0x18B2 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0x18BB DUP2 PUSH2 0x25C7 JUMP JUMPDEST SWAP1 PUSH2 0x26C1 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x18DA PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x18E7 DUP2 PUSH2 0x2532 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x19D1 JUMPI PUSH2 0x18FF DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1946 DUP2 PUSH2 0x2B35 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0x47F70DDBC624C299CEF7841AAEA0A86B677C800203E953104E958C9EC9BDAB34 SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x309 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0x370DA7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0xDE0AD9B58F16000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1A34 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1A41 DUP2 PUSH2 0x2532 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x19D1 JUMPI PUSH2 0x1A59 DUP2 PUSH2 0x228E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1AA0 DUP2 PUSH2 0x2B67 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x323 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH32 0xB7CF36369623C01ED7B2EAFC4025224E924A2836D5FB49428A0F65417586BF5C SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x1B2B JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x1B34 SWAP1 PUSH2 0x20AC JUMP JUMPDEST DUP5 PUSH2 0x2FF JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x11CC PUSH1 0x24 CALLDATALOAD PUSH1 0x4 CALLDATALOAD PUSH2 0x24F1 JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1B7C PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH2 0x1BAD PUSH2 0x1FDA JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x318 JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0x1F6C JUMPI JUMPDEST POP AND SWAP3 ADDRESS DUP5 EQ PUSH2 0x1F44 JUMPI AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH2 0x1F18 JUMPI DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x5C15A0B400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x40 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0x1EF4 JUMPI JUMPDEST POP PUSH2 0x1CB7 SWAP1 PUSH2 0x246F JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1CC5 DUP3 PUSH2 0x2063 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP4 AND DUP3 MSTORE DUP4 DUP3 ADD SWAP1 ISZERO ISZERO DUP2 MSTORE DUP5 PUSH0 MSTORE PUSH1 0x2 DUP5 MSTORE DUP3 PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND SWAP2 DUP1 SLOAD SWAP2 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP4 DUP5 PUSH9 0xFF0000000000000000 DUP1 SWAP6 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP2 PUSH32 0x7A2B97DC00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP6 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 DUP4 PUSH1 0x24 DUP2 DUP11 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP1 PUSH0 SWAP5 PUSH2 0x1EC0 JUMPI JUMPDEST POP PUSH2 0x1D7B SWAP1 PUSH2 0x246F JUMP JUMPDEST SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x1D8A DUP8 PUSH2 0x2063 JUMP JUMPDEST AND DUP6 MSTORE DUP6 DUP6 ADD SWAP4 ISZERO ISZERO DUP5 MSTORE DUP7 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xB8E059B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL PUSH0 SWAP2 DUP2 PUSH2 0x1E8E JUMPI JUMPDEST POP SWAP4 DUP3 SWAP2 PUSH1 0x24 SWAP6 PUSH2 0x1E7C JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x252AAB500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL PUSH0 SWAP4 DUP2 PUSH2 0x1E4D JUMPI JUMPDEST POP PUSH2 0x1E3E JUMPI STOP JUMPDEST PUSH1 0x6 SWAP2 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP1 SWAP4 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1E75 JUMPI JUMPDEST PUSH2 0x1E65 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD SWAP3 DUP5 PUSH2 0x1E37 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E5B JUMP JUMPDEST DUP5 PUSH0 MSTORE PUSH1 0x5 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE DUP6 PUSH2 0x1DFC JUMP JUMPDEST SWAP2 POP SWAP4 DUP3 DUP3 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1EB9 JUMPI JUMPDEST PUSH2 0x1EA6 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI SWAP1 MLOAD SWAP1 SWAP4 PUSH1 0x24 PUSH2 0x1DF0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1E9C JUMP JUMPDEST PUSH2 0x1D7B SWAP5 POP PUSH2 0x1EE7 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1EED JUMPI JUMPDEST PUSH2 0x1EDF DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x212A JUMP JUMPDEST SWAP4 PUSH2 0x1D71 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1ED5 JUMP JUMPDEST PUSH2 0x1CB7 SWAP3 POP PUSH2 0x1F12 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x1EED JUMPI PUSH2 0x1EDF DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST SWAP2 PUSH2 0x1CAD JUMP JUMPDEST POP PUSH32 0xDB771C8000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xB82FD5BF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 SWAP3 POP DUP5 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x1F9F JUMPI JUMPDEST PUSH2 0x1F85 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 SWAP1 DUP6 PUSH2 0x1C15 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1F7B JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1FCA PUSH2 0x1FDA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x6 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x323 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x6F05B59D3B20000 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x204F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2041 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x323 JUMPI PUSH2 0x2144 PUSH1 0x20 DUP4 MLOAD SWAP4 ADD PUSH2 0x211D JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x21A6 DUP2 PUSH2 0x20C0 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x21CE DUP3 PUSH2 0x21AC JUMP JUMPDEST PUSH2 0x21DB PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x20DC JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x2209 DUP3 SWAP5 PUSH2 0x21AC JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x2227 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x207F JUMPI PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 PUSH0 PUSH1 0x1F PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP4 DUP4 PUSH1 0x44 PUSH1 0x20 SWAP7 DUP5 DUP9 DUP3 ADD SWAP5 PUSH32 0xFA399F2A00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x2300 DUP2 PUSH2 0x20C0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP12 PUSH1 0x4 DUP7 ADD MSTORE MLOAD DUP1 SWAP2 DUP2 PUSH1 0x24 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY DUP6 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x318 JUMPI PUSH2 0x2380 JUMPI POP POP JUMP JUMPDEST RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x238F DUP2 DUP5 PUSH2 0x20DC JUMP JUMPDEST DUP3 ADD SWAP2 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP3 MLOAD SWAP1 PUSH2 0x23C6 DUP3 PUSH2 0x2254 JUMP JUMPDEST SWAP1 PUSH2 0x23D4 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP3 DUP3 MSTORE DUP4 DUP4 DUP7 ADD ADD GT PUSH2 0x323 JUMPI DUP2 DUP4 PUSH0 SWAP6 ADD DUP5 DUP4 ADD MCOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x323 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x2429 DUP2 PUSH2 0x21AC JUMP JUMPDEST SWAP4 PUSH2 0x2437 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x20DC JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x323 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x2460 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x2452 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x2484 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x6E3 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x251E PUSH5 0x174876E800 SWAP3 DUP4 SWAP3 PUSH2 0x2517 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP4 DUP4 SUB DUP4 DUP6 LT MUL PUSH2 0x24DE JUMP JUMPDEST DIV SWAP1 PUSH2 0x24B4 JUMP JUMPDEST DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH2 0x2545 DUP3 PUSH2 0x25C7 JUMP JUMPDEST AND DUP1 ISZERO PUSH2 0x2586 JUMPI CALLER SUB PUSH2 0x2556 JUMPI POP POP JUMP JUMPDEST PUSH32 0xFBECDBF400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP PUSH32 0x8BCBF35300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x323 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x60 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 DUP8 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x26B7 JUMPI PUSH0 SWAP2 PUSH2 0x263E JUMPI JUMPDEST POP ADD MLOAD AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x26AF JUMPI JUMPDEST DUP2 PUSH2 0x2659 PUSH1 0x60 SWAP4 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x60 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x207F JUMPI PUSH2 0x26A5 SWAP2 DUP5 SWAP2 DUP3 MSTORE PUSH2 0x268C DUP2 PUSH2 0x25B3 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x269A PUSH1 0x20 DUP3 ADD PUSH2 0x25B3 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE ADD PUSH2 0x25B3 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE PUSH0 PUSH2 0x2637 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x264C JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH2 0x26CB DUP3 PUSH2 0x298F JUMP JUMPDEST SWAP3 SWAP1 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x26DD JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x26F3 DUP4 DUP7 PUSH2 0x2213 JUMP JUMPDEST MLOAD AND DUP2 DUP7 AND DUP1 PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP5 DUP6 PUSH0 KECCAK256 DUP6 PUSH0 MSTORE DUP3 MSTORE DUP6 PUSH0 KECCAK256 SLOAD SWAP6 DUP7 PUSH2 0x2725 JUMPI JUMPDEST POP POP POP POP POP POP POP ADD PUSH2 0x26CF JUMP JUMPDEST PUSH32 0x938F3A3A03EE425CCC0F8010B0468938CBAFD3750FA43BBDF09C6F75E97E51F9 SWAP4 DUP6 PUSH0 MSTORE DUP4 MSTORE DUP1 PUSH0 KECCAK256 DUP7 PUSH0 MSTORE DUP4 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE PUSH2 0x2764 DUP8 DUP14 DUP9 PUSH2 0x2B99 JUMP JUMPDEST MLOAD SWAP6 DUP7 MSTORE DUP11 AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2718 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x27AA JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x6E3 JUMPI SUB PUSH2 0x27F6 JUMPI JUMP JUMPDEST PUSH32 0x833FB3CE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x284A PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x2147 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x318 JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x296D JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP3 PUSH2 0x2937 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x290F JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2966 JUMPI JUMPDEST PUSH2 0x294E DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH2 0x295F SWAP1 PUSH2 0x211D JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x2906 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2944 JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x2988 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xF3C JUMPI PUSH2 0xF2D DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x28B5 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x318 JUMPI PUSH0 SWAP4 PUSH2 0x2A05 JUMPI JUMPDEST POP POP DUP2 MLOAD SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2A18 DUP2 DUP4 PUSH2 0x20DC JUMP JUMPDEST DUP2 ADD PUSH1 0x20 SWAP2 DUP3 DUP2 DUP4 SUB SLT PUSH2 0x323 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x323 JUMPI ADD SWAP3 DUP2 PUSH1 0x1F DUP6 ADD SLT ISZERO PUSH2 0x323 JUMPI DUP4 MLOAD PUSH2 0x2A50 DUP2 PUSH2 0x21AC JUMP JUMPDEST SWAP5 PUSH2 0x2A5E PUSH1 0x40 MLOAD SWAP7 DUP8 PUSH2 0x20DC JUMP JUMPDEST DUP2 DUP7 MSTORE DUP5 DUP1 DUP8 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP4 DUP5 GT PUSH2 0x323 JUMPI DUP5 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x2A8B JUMPI POP POP POP POP POP SWAP1 PUSH0 DUP1 PUSH2 0x29FE JUMP JUMPDEST DUP2 MLOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x323 JUMPI DUP2 MSTORE SWAP1 DUP5 ADD SWAP1 DUP5 ADD PUSH2 0x2A77 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 DUP5 DUP2 AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP5 DUP6 PUSH2 0x2ADC JUMPI JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 PUSH2 0x2B21 DUP8 PUSH32 0x1C2887FCB98F75E66BB9A36311F2D3D22FB204E6362106F30E9DF7EAF63131B5 SWAP6 PUSH1 0x20 SWAP6 DUP9 PUSH0 MSTORE PUSH1 0x7 DUP8 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP11 PUSH0 MSTORE DUP8 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH2 0x2B99 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2AD4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH2 0x2144 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x24F1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH2 0x2144 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x24F1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP2 MSTORE SWAP3 PUSH2 0x2C2D SWAP3 PUSH0 SWAP3 DUP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2BF6 PUSH1 0x64 DUP9 PUSH2 0x20DC JUMP JUMPDEST AND SWAP5 MLOAD SWAP1 DUP3 DUP7 GAS CALL RETURNDATASIZE ISZERO PUSH2 0x2C91 JUMPI RETURNDATASIZE SWAP1 PUSH2 0x2C0F DUP3 PUSH2 0x2254 JUMP JUMPDEST SWAP2 PUSH2 0x2C1D PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x20DC JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMPDEST DUP4 PUSH2 0x2C99 JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x2C6E JUMPI JUMPDEST POP POP PUSH2 0x2C43 JUMPI POP JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 SWAP3 POP SWAP1 PUSH1 0x20 SWAP2 DUP2 ADD SUB SLT PUSH2 0x323 JUMPI PUSH1 0x20 PUSH2 0x2C89 SWAP2 ADD PUSH2 0x211D JUMP JUMPDEST ISZERO PUSH0 DUP1 PUSH2 0x2C3A JUMP JUMPDEST PUSH1 0x60 SWAP1 PUSH2 0x2C27 JUMP JUMPDEST SWAP1 PUSH2 0x2CD6 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x2CAE JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x2D1C JUMPI JUMPDEST PUSH2 0x2CE7 JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x2CDF JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH24 0x9606B3785FEB7919003F1A04823C3563027F2FDBCC858F33 0xE7 0xD2 CALLCODE PUSH28 0x80B35B64736F6C634300081B00330000000000000000000000000000 ","sourceMap":"3120:30085:63:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1473:26:67;3120:30085:63;1473:26:67;;;3120:30085:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30085:63;;;;;;;:::i;:::-;;;1525:73:37;;;:::i;:::-;4720:5:63;7248:55;;7244:127;;7402:20;;;:::i;:::-;8176:4;;;:::i;:::-;31036:39;;;:::i;:::-;3120:30085;;;;;;:::i;:::-;;;;;;;30993:129;;;3120:30085;26060:4;3120:30085;;-1:-1:-1;;;;;3120:30085:63;;;;;;;;30953:31;30993:129;3120:30085;;;;;;;;;;;;;;;;;;;;;;;;31217:6;3120:30085;31263:54;;;;:::i;:::-;31217:101;;;;;3120:30085;;;31217:101;;-1:-1:-1;;;;;3120:30085:63;;;;;31217:101;;3120:30085;;;;;;-1:-1:-1;;3120:30085:63;;;;;;-1:-1:-1;;31217:101:63;;;;;;;31334:68;31217:101;30993:129;31217:101;;;3120:30085;;;;;;;31334:68;3120:30085;31217:101;;;;:::i;:::-;3120:30085;31217:101;;;3120:30085;;;;;;;;;31217:101;3120:30085;;;7244:127;7326:34;3120:30085;7326:34;3120:30085;;7326:34;3120:30085;;;;;-1:-1:-1;;3120:30085:63;;;;;;;;-1:-1:-1;;;;;8461:6:63;3120:30085;;;;;;;;;-1:-1:-1;;3120:30085:63;;;;;;;:::i;:::-;436:67:72;;:::i;:::-;3120:30085:63;;;9135:33;;-1:-1:-1;;;;;3120:30085:63;;;9135:33;;3120:30085;;9135:6;3120:30085;9135:6;;-1:-1:-1;;;;;9135:6:63;3120:30085;9135:33;;;;;;;3120:30085;;;9135:33;;;3120:30085;;-1:-1:-1;;;;;3120:30085:63;;;;;;;;;;;;;;11126:30;3120:30085;;;;;;11225:30;3120:30085;11289:28;;;;:57;;;;3120:30085;11356:199;;;3120:30085;11615:28;;;:::i;:::-;11658:13;;3120:30085;11673:13;;;;;;10881:20;;-1:-1:-1;;;;;3120:30085:63;;;;10982:32;3120:30085;;;;;;;;11080:134;3120:30085;;11177:31;3120:30085;;;;;;11225:30;3120:30085;11289:28;;;:57;;;;11653:1939;11356:199;;;11653:1939;11615:28;;;:::i;:::-;11658:13;;3120:30085;11673:13;;;;;;3120:30085;11688:3;11711:13;;;;:::i;:::-;3120:30085;11707:1875;;11688:3;3120:30085;;11658:13;;11707:1875;11763:13;-1:-1:-1;;;;;11763:13:63;;;;:::i;:::-;3120:30085;;11831:13;;;;;:::i;:::-;3120:30085;-1:-1:-1;;;;;9135:6:63;3120:30085;11795:50;;;;3120:30085;;11795:50;3120:30085;11795:50;;;3120:30085;11795:50;;3120:30085;11824:4;3120:30085;;;;;;;;9135:6;;3120:30085;9135:6;;-1:-1:-1;;;;;9135:6:63;3120:30085;11795:50;;;;;;;;;;;11707:1875;3120:30085;;;12020:240;3120:30085;12227:13;;;;;;:::i;:::-;3120:30085;;;;;;12188:53;3120:30085;-1:-1:-1;;;;;3120:30085:63;;12188:53;;12278:1290;;;;12884:13;;;;:::i;:::-;3120:30085;2004:6:50;;2000:58;;2153:5;;;:::i;:::-;3120:30085:63;465:4:50;1068:5;2560:120;;;;;;;;;;;;;;1068:5;:::i;:::-;1186:122;;;;;;;;;3120:30085:63;-1:-1:-1;;;;;3120:30085:63;;;;13044:19;3120:30085;;;;;;;;;;;;;13044:51;3120:30085;;;13044:51;:::i;:::-;3120:30085;;13156:13;;;;:::i;:::-;3120:30085;;;;;;;;;;;13117:70;3120:30085;-1:-1:-1;;;;;3120:30085:63;;;;13117:22;3120:30085;;;;;;;;;;;;;;;;;13117:70;:::i;:::-;3120:30085;;12278:1290;11707:1875;;;;3120:30085;;;;;;;;;;2000:58:50;2033:14;3120:30085:63;2033:14:50;3120:30085:63;;2033:14:50;12278:1290:63;3120:30085;;11289:28;;;13407:13;;;;:::i;:::-;3120:30085;;-1:-1:-1;;;;;3120:30085:63;;;;13371:19;3120:30085;;;;;;;;;;13371:49;3120:30085;;;;;;13371:49;:::i;:::-;3120:30085;;12278:1290;;13310:240;13514:13;;;;:::i;:::-;3120:30085;;-1:-1:-1;;;;;3120:30085:63;;;;13475:22;3120:30085;;;;;;;;;;13475:52;3120:30085;;;;;;13475:52;:::i;3120:30085::-;;;;;;;;;;11795:50;;;;:::i;:::-;3120:30085;;11795:50;;;;3120:30085;;;11795:50;3120:30085;;;;;;;;;11795:50;3120:30085;;;11356:199;11465:79;;;;;;:::i;:::-;11356:199;;;11289:57;11321:25;;;;-1:-1:-1;11289:57:63;;11688:3;11711:13;;;;:::i;:::-;3120:30085;11707:1875;;11688:3;3120:30085;;11658:13;;11707:1875;-1:-1:-1;;;;;11763:13:63;;;;:::i;:::-;3120:30085;;11831:13;;;;;:::i;:::-;3120:30085;-1:-1:-1;;;;;9135:6:63;3120:30085;11795:50;;;;3120:30085;;11795:50;3120:30085;11795:50;;;3120:30085;11795:50;;3120:30085;11824:4;3120:30085;;;;;;;;;9135:6;3120:30085;9135:6;;-1:-1:-1;;;;;9135:6:63;3120:30085;11795:50;;;;;;;;11707:1875;12122:13;;;12084:52;3120:30085;-1:-1:-1;;;;;12122:13:63;;;;:::i;:::-;3120:30085;;;;;;;;12084:52;;12278:1290;;;;12884:13;;;;:::i;:::-;3120:30085;2004:6:50;;2000:58;;2153:5;;;:::i;:::-;3120:30085:63;465:4:50;1068:5;2560:120;;;;;;;;;;;;;;1068:5;:::i;:::-;1186:122;;;;;;;;;3120:30085:63;-1:-1:-1;;;;;3120:30085:63;;;;13044:19;3120:30085;;;;;;;;;;;;;13044:51;3120:30085;;;13044:51;:::i;:::-;3120:30085;;13156:13;;;;:::i;:::-;3120:30085;;;;;;;;;;;13117:70;3120:30085;-1:-1:-1;;;;;3120:30085:63;;;;13117:22;3120:30085;;;;;;;;;;;;;;;;;13117:70;:::i;:::-;3120:30085;;12278:1290;11707:1875;;;;12278:1290;3120:30085;;11289:28;;;13407:13;;;;:::i;:::-;3120:30085;;-1:-1:-1;;;;;3120:30085:63;;;;13371:19;3120:30085;;;;;;;;;;13371:49;3120:30085;;;;;;13371:49;:::i;:::-;3120:30085;;12278:1290;;13310:240;13514:13;;;;:::i;:::-;3120:30085;;-1:-1:-1;;;;;3120:30085:63;;;;13475:22;3120:30085;;;;;;;;;;13475:52;3120:30085;;;;;;13475:52;:::i;11795:50::-;;;;:::i;:::-;;;;11356:199;11465:79;;;;;:::i;:::-;11356:199;;11289:57;11321:25;;;;-1:-1:-1;11289:57:63;;9135:33;;;;;;3120:30085;9135:33;;;;;;:::i;:::-;;;3120:30085;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;9135:33;;;;3120:30085;;;;;-1:-1:-1;;3120:30085:63;;;;;29584:9;3120:30085;;:::i;:::-;;;:::i;:::-;7088:4;;;;:::i;:::-;29584:9;:::i;:::-;3120:30085;;;;;;-1:-1:-1;;3120:30085:63;;;;;;;:::i;:::-;;;:::i;:::-;1525:73:37;;;:::i;:::-;28417:28:63;;;:::i;:::-;28461:13;3120:30085;28476:13;;;;;;3120:30085;28491:3;28525:13;28592:5;-1:-1:-1;;;;;28525:13:63;3120:30085;28525:13;;;:::i;:::-;3120:30085;;28592:5;;;:::i;:::-;3120:30085;28461:13;;3120:30085;;;;;-1:-1:-1;;3120:30085:63;;;;;-1:-1:-1;;;;;3120:30085:63;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30085:63;;;;;;;:::i;:::-;;;:::i;:::-;;;;-1:-1:-1;;;;;3120:30085:63;;;;;;;;;;1525:73:37;;;:::i;:::-;3120:30085:63;;;28874:52;;;;3120:30085;28874:52;;3120:30085;;;;28874:52;;3120:30085;;;;;28874:6;3120:30085;28874:52;;;;;;;;3120:30085;28975:5;;;;:::i;28874:52::-;3120:30085;28874:52;;3120:30085;28874:52;;;;;;3120:30085;28874:52;;;:::i;:::-;;;3120:30085;;;;28975:5;;-1:-1:-1;28874:52:63;;;;;-1:-1:-1;28874:52:63;;3120:30085;;;;;-1:-1:-1;;3120:30085:63;;;;;;;:::i;:::-;;;1525:73:37;;;:::i;:::-;4720:5:63;7581:57;;7577:130;;7738:21;;;:::i;:::-;8176:4;;;:::i;:::-;32069:40;;;:::i;:::-;3120:30085;;;;;;:::i;:::-;;;;;;;32026:130;;;3120:30085;26404:4;3120:30085;;-1:-1:-1;;;;;3120:30085:63;;;;;;;;31985:32;32026:130;3120:30085;;;;;;;;;;;;;;;;;;;;;;;;32252:6;3120:30085;32299:55;;;;:::i;:::-;32252:103;;;;;3120:30085;;;32252:103;;-1:-1:-1;;;;;3120:30085:63;;;;;32252:103;;3120:30085;;;;;;-1:-1:-1;;3120:30085:63;;;;;;-1:-1:-1;;32252:103:63;;;;;;;32371:70;32252:103;32026:130;32252:103;;;3120:30085;;;;;;32371:70;3120:30085;7577:130;7661:35;3120:30085;7661:35;3120:30085;;7661:35;3120:30085;;;;;-1:-1:-1;;3120:30085:63;;;;;;;;1473:26:67;;-1:-1:-1;;;;;1473:26:67;3120:30085:63;;;1019:6:40;3120:30085:63;;1473:26:67;;;;;;;;;3120:30085:63;1473:26:67;;;3120:30085:63;;;;;;;;;1473:26:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;3120:30085:63;;;;;-1:-1:-1;;3120:30085:63;;;;;;;4720:5;7581:57;;7577:130;;3120:30085;7738:21;;25657:70;7738:21;;:::i;:::-;1525:73:37;;:::i;:::-;3120:30085:63;;;;;;;;25657:70;3120:30085;;;;;;;-1:-1:-1;;3120:30085:63;;;;;;;:::i;:::-;15714:28;;;;:::i;:::-;15766:24;;;;:::i;:::-;15805:13;3120:30085;;-1:-1:-1;;;;;3120:30085:63;;;15800:124;15820:13;;;;;;3120:30085;;;;;;;:::i;:::-;;;;15835:3;3120:30085;;;;;15870:22;3120:30085;;;;;15899:13;;;;;:::i;:::-;3120:30085;;;;;;;;;;15854:59;;;;:::i;:::-;3120:30085;;15805:13;;3120:30085;;;;;-1:-1:-1;;3120:30085:63;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;-1:-1:-1;;3120:30085:63;;;;;;;:::i;:::-;15292:28;;;;:::i;:::-;15344:24;;;;:::i;:::-;15383:13;3120:30085;;-1:-1:-1;;;;;3120:30085:63;;;15378:121;15398:13;;;;;;3120:30085;;;;;;;:::i;15413:3::-;3120:30085;;;;;15448:19;3120:30085;;;;;15474:13;;;;;:::i;:::-;3120:30085;;;;;;;;;;15432:56;;;;:::i;:::-;3120:30085;;15383:13;;3120:30085;;;;;-1:-1:-1;;3120:30085:63;;;;;;;;-1:-1:-1;;;;;1019:6:40;3120:30085:63;;;;;;;;;-1:-1:-1;;3120:30085:63;;;;;;;4720:5;7248:55;;7244:127;;3120:30085;7402:20;;25273:68;7402:20;;:::i;:::-;1525:73:37;;:::i;:::-;3120:30085:63;;;;;;;;25273:68;3120:30085;;;;;;-1:-1:-1;;3120:30085:63;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;3120:30085:63;;;;;-1:-1:-1;;;;;3120:30085:63;;:::i;:::-;;;;14588:32;3120:30085;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30085:63;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30085:63;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;436:67:72;;:::i;:::-;-1:-1:-1;;;;;3120:30085:63;;;;;;;;;;;;;;;;23465:4;3120:30085;;;;;;;23598:56;;;;;;3120:30085;23598:56;;;;23694:57;;;;;;;;3120:30085;23694:57;24681:90;3120:30085;23694:57;24894:69;23694:57;;;24786:92;23694:57;24786:92;23694:57;;24282:37;;;:::i;:::-;3120:30085;;;;;;:::i;:::-;;;;;;;24383:32;24467:38;24239:134;;;3120:30085;;;;;;;24199:31;3120:30085;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24467:38;:::i;:::-;3120:30085;;;;;;;;;:::i;:::-;;;;24424:135;;;3120:30085;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24681:90;3120:30085;;24681:90;;;;3120:30085;;;;;;;;;;;;;;;;;24681:90;;;;3120:30085;;;;;;;;;;;;;;;;;;;;24786:92;;;;3120:30085;;;;;;24894:69;;3120:30085;;;;;;;;;23694:57;3120:30085;;;;23465:4;3120:30085;23694:57;24681:90;3120:30085;23694:57;24894:69;23694:57;;;24786:92;23694:57;24786:92;23694:57;;;23598:56;3120:30085;;;23598:56;;;;;3120:30085;;;;;;-1:-1:-1;;3120:30085:63;;;;;;;:::i;:::-;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:30085:63;;;;;;;;16417:31;3120:30085;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;16543:81;;;;3120:30085;16539:176;;;3120:30085;16539:176;31036:39;;;:::i;:::-;3120:30085;;;;;;;;:::i;:::-;;;;30993:129;;;3120:30085;;;;;;;16417:31;3120:30085;;;;;;;;;;;;;;;;;;;;;;;;;31217:6;3120:30085;31263:54;;;;:::i;:::-;31217:101;;;;;3120:30085;;;31217:101;;-1:-1:-1;;;;;3120:30085:63;;;;;31217:101;;3120:30085;;;;;;-1:-1:-1;;3120:30085:63;;;;;;-1:-1:-1;;31217:101:63;;;;;;;31334:68;31217:101;;;3120:30085;;;;;;31334:68;3120:30085;16543:81;16576:48;;;;;16543:81;;;3120:30085;;;;;;-1:-1:-1;;3120:30085:63;;;;;;;:::i;:::-;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:30085:63;;;;;;;;16899:32;3120:30085;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;16980:33;3120:30085;17028:82;;;;3120:30085;17024:179;;;3120:30085;17024:179;32069:40;;;:::i;:::-;3120:30085;;;;;;;;:::i;:::-;;;;32026:130;;;3120:30085;;;;;;;16899:32;3120:30085;;;;;;;;;;;;;;;;;;;;;;;;;32252:6;3120:30085;32299:55;;;;:::i;:::-;32252:103;;;;;3120:30085;;;32252:103;;-1:-1:-1;;;;;3120:30085:63;;;;;32252:103;;3120:30085;;;;;;-1:-1:-1;;3120:30085:63;;;;;;-1:-1:-1;;32252:103:63;;;;;;;32371:70;32252:103;;;3120:30085;;;;;;32371:70;3120:30085;17028:82;17061:49;;;;;17028:82;;;3120:30085;;:::i;:::-;;;;;-1:-1:-1;;3120:30085:63;;;;;-1:-1:-1;;;;;3120:30085:63;;:::i;:::-;;;;14307:31;3120:30085;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;3120:30085:63;;;;;;13926:33;3120:30085;;;;;;;;;;;;-1:-1:-1;;3120:30085:63;;;;;29747:21;3120:30085;;:::i;:::-;29747:21;;;:::i;:::-;;;:::i;3120:30085::-;;;;;-1:-1:-1;;3120:30085:63;;;;;;;:::i;:::-;;;7088:4;;;;:::i;:::-;4975:9;7868:56;;7864:127;;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:30085:63;;;;;;;;27849:31;3120:30085;;;;;;;28015:6;3120:30085;28062:55;;;;:::i;:::-;28015:103;;;;;3120:30085;;;28015:103;;-1:-1:-1;;;;;3120:30085:63;;;;;28015:103;;3120:30085;;;;;;-1:-1:-1;;3120:30085:63;;;;;;-1:-1:-1;;28015:103:63;;;;;;;28138:68;28015:103;3120:30085;28015:103;;;3120:30085;;;;;;28138:68;3120:30085;7864:127;7947:33;3120:30085;7947:33;3120:30085;;7947:33;3120:30085;;;;;-1:-1:-1;;3120:30085:63;;;;;;;;4975:9;3120:30085;;;;;;;;-1:-1:-1;;3120:30085:63;;;;;;;:::i;:::-;;;7088:4;;;;:::i;:::-;4975:9;7868:56;;7864:127;;8176:4;;;:::i;:::-;-1:-1:-1;;;;;3120:30085:63;;;;;;;;27466:30;3120:30085;;;;;;;27630:6;3120:30085;27676:54;;;;:::i;:::-;27630:101;;;;;3120:30085;;;27630:101;;-1:-1:-1;;;;;3120:30085:63;;;;;27630:101;;3120:30085;;;;;;-1:-1:-1;;3120:30085:63;;;;;;-1:-1:-1;;27630:101:63;;;;;;;27751:67;27630:101;3120:30085;27630:101;;;3120:30085;;;;;;27751:67;3120:30085;27630:101;;;;:::i;:::-;;;;3120:30085;;;;;-1:-1:-1;;3120:30085:63;;;;;;16154:79;3120:30085;;;;16154:79;:::i;3120:30085::-;;;;;-1:-1:-1;;3120:30085:63;;;;;-1:-1:-1;;;;;3120:30085:63;;:::i;:::-;;;;14845:30;3120:30085;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3120:30085:63;;;;;;;:::i;:::-;;-1:-1:-1;;;;;3120:30085:63;;;21067:33;;:6;;3120:30085;21067:6;;;3120:30085;21067:33;;;;;;;;3120:30085;21067:33;;;3120:30085;;;21152:4;;21115:42;;21111:104;;3120:30085;;;;;;;;;;;;;;21225:87;;3120:30085;;;;;;;;;21347:4;3120:30085;;;;;;;;;;21424:49;;;3120:30085;21424:49;;3120:30085;;21424:49;3120:30085;21424:49;;;;;;;;;3120:30085;;;21424:49;;;3120:30085;21566:36;;;;:::i;:::-;3120:30085;;;;;;;:::i;:::-;;;;;;;21523:133;;;3120:30085;;;;;;;;21483:31;3120:30085;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21731:72;3120:30085;21731:72;;;3120:30085;21731:72;;3120:30085;;21731:72;3120:30085;21731:72;;;;;;;;;3120:30085;;;21731:72;;;3120:30085;21897:37;;;;:::i;:::-;3120:30085;;;;;;;;:::i;:::-;;;;21854:135;;;3120:30085;;;;;;;;21813:32;3120:30085;;;;;;;;;;;;;;;;;;;;;;;;;;;22521:54;;;3120:30085;22521:54;;3120:30085;22521:54;;3120:30085;22521:54;;;;3120:30085;;22521:54;;;3120:30085;22517:207;;;;3120:30085;22517:207;;;3120:30085;;;;22738:55;;;;3120:30085;22738:55;;;3120:30085;22738:55;;3120:30085;22738:55;;3120:30085;;22738:55;;;3120:30085;22734:211;;;3120:30085;22734:211;22856:31;3120:30085;;;;;;;;;;;22738:55;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30085;;;;;22738:55;;;;;;;;;22517:207;3120:30085;;;22637:30;3120:30085;;;;;;22517:207;;;22521:54;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30085;;;;;;22521:54;;3120:30085;22521:54;;;;;;;21731:72;21897:37;21731:72;;;;;3120:30085;21731:72;3120:30085;21731:72;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;21424:49;21566:36;21424:49;;;;;3120:30085;21424:49;3120:30085;21424:49;;;;;;;:::i;:::-;;;;21225:87;21274:27;;3120:30085;21274:27;3120:30085;;;;21274:27;21111:104;21180:24;3120:30085;21180:24;3120:30085;;21180:24;21067:33;;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30085;;;;;;;;;;;;21067:33;;;;;;;;;;3120:30085;;;;;-1:-1:-1;;3120:30085:63;;;;;;;-1:-1:-1;;;;;3120:30085:63;;:::i;:::-;;;;15042:31;3120:30085;;;;;;;;;;;;;-1:-1:-1;;;;;3120:30085:63;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;3120:30085:63;;;;;;:::o;:::-;;;;;-1:-1:-1;;3120:30085:63;;;;;;;;4720:5;3120:30085;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;1931:430:37:-;3120:30085:63;;;2303:50:37;;;2320:22;;3120:30085:63;;;;;;;2303:50:37;;;;;;:::i;:::-;3120:30085:63;2293:61:37;;1931:430;:::o;3120:30085:63:-;;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;8523:151::-;8598:68;8523:151;-1:-1:-1;3120:30085:63;-1:-1:-1;;;;;3120:30085:63;;8598:68;;3120:30085;8598:68;;;;;;;;;;3120:30085;8598:68;;;3120:30085;8598:68;;;;;;:::i;:::-;3120:30085;;8584:83;;;;;;;3120:30085;8584:83;;;8598:68;8584:83;;3120:30085;;;;;8598:68;3120:30085;;;;;;;;;;;;;;;;;;8584:83;;:6;;3120:30085;8584:83;;;;;;;;8523:151;;:::o;8584:83::-;;;-1:-1:-1;8584:83:63;;;;;;:::i;:::-;;;3120:30085;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;3120:30085:63;;;;;;;;;8523:151::o;3120:30085::-;;;;;;;;;;-1:-1:-1;;;;;3120:30085:63;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;13291:213:119;3120:30085:63;13369:24:119;;;;13365:103;;3120:30085:63;13291:213:119;:::o;13365:103::-;13416:41;;;13447:2;13416:41;3120:30085:63;;;;13416:41:119;;3120:30085:63;;;;;;;;;;:::o;19669:4:33:-;;465::50;19669::33;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;17922:1064:63:-;;18151:104;19669:4:33;5832:87:50;;;838:5;5832:87;;;;;;;;;838:5;:::i;:::-;19669:4:33;18151:104:63;;:::i;:::-;19669:4:33;;;;;;;;;;;;;;;17922:1064:63;:::o;18992:340::-;-1:-1:-1;;;;;19088:21:63;;;;;:::i;:::-;3120:30085;19124:25;;19120:93;;19242:10;19227:25;19223:103;;18992:340;;:::o;19223:103::-;19275:40;19147:1;19275:40;19242:10;19275:40;3120:30085;;;;;19147:1;19275:40;19120:93;19172:30;;19147:1;19172:30;3120:30085;19172:30;3120:30085;;19147:1;19172:30;3120:30085;;;-1:-1:-1;;;;;3120:30085:63;;;;;;:::o;19603:201::-;3120:30085;;;;19723:32;;-1:-1:-1;;;;;3120:30085:63;;;19723:32;;;3120:30085;19723:32;3120:30085;;;19723:6;3120:30085;;19723:32;;;;;;;-1:-1:-1;19723:32:63;;;19603:201;19773:24;;3120:30085;;19603:201;:::o;19723:32::-;;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30085;;;;;;;19723:32;3120:30085;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;19723:32;;;;;;-1:-1:-1;19723:32:63;;;3120:30085;;;-1:-1:-1;3120:30085:63;;;;;29782:616;;29917:28;;;:::i;:::-;29961:13;;29973:1;29976:13;;;;;;29782:616;;;;;:::o;29991:3::-;3120:30085;;-1:-1:-1;;;;;30025:13:63;;;;;:::i;:::-;3120:30085;;;;;;29973:1;3120:30085;30080:22;3120:30085;;;;;;;29973:1;3120:30085;;29973:1;3120:30085;;;;29973:1;3120:30085;;30133:20;;30129:253;;29991:3;;;;;;;;3120:30085;29961:13;;30129:253;30301:66;3120:30085;;29973:1;3120:30085;;;;29973:1;3120:30085;;29973:1;3120:30085;;;29973:1;3120:30085;;;;30260:16;;;;;:::i;:::-;3120:30085;;;;;;30301:66;;30129:253;;;;;;;;;509:165:72;-1:-1:-1;;;;;586:6:72;3120:30085:63;564:10:72;:29;560:108;;509:165::o;560:108::-;616:41;;;564:10;616:41;3120:30085:63;;616:41:72;;32454:749:63;19669:4:33;;;;;;;;;;;;;;;;;;33055:74:63;33051:146;;32454:749::o;33051:146::-;33152:34;-1:-1:-1;33152:34:63;;-1:-1:-1;33152:34:63;1688:201:37;1762:20;1774:7;;;;1762:20;:::i;:::-;-1:-1:-1;;;;;3120:30085:63;;;1231:22:40;;;:6;;;:22;:6;;;3120:30085:63;1231:22:40;;;;;;;;;1774:7:37;1231:22:40;;;1688:201:37;3120:30085:63;;;;;1231:64:40;;;;;3120:30085:63;1231:64:40;;:22;:64;;3120:30085:63;1820:10:37;3120:30085:63;;;;1289:4:40;3120:30085:63;;;;;1231:64:40;;;;;;;1774:7:37;1231:64:40;;;1688:201:37;1797:34;;;1793:90;;1688:201::o;1793:90::-;1854:18;1774:7;1854:18;1231:22:40;1774:7:37;1854:18;1231:64:40;;;;;;;;;;;;;;;;:::i;:::-;;;3120:30085:63;;;;;;;:::i;:::-;1231:64:40;;;;;;;;;:22;3120:30085:63;1231:22:40;;;;;;;;;;;;;;;:::i;:::-;;;;;19338:199:63;;-1:-1:-1;;;;;3120:30085:63;;;19469:26;3120:30085;19469:26;;3120:30085;19469:26;;;3120:30085;19469:26;:6;3120:30085;19469:6;;;3120:30085;19469:26;;;;;;;;;;;19338:199;19460:35;;;3120:30085;19338:199;:::o;19469:26::-;;;;;;;;;;;;;;:::i;:::-;;;3120:30085;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;19469:26;;;;;;;;;;3120:30085;;;;;;;;;;;;;;;;;;;;28994:403;;;-1:-1:-1;;;;;3120:30085:63;;;;;-1:-1:-1;3120:30085:63;29118:19;3120:30085;;;-1:-1:-1;3120:30085:63;;;;;;;-1:-1:-1;3120:30085:63;;;;-1:-1:-1;3120:30085:63;;29164:20;;29160:231;;28994:403;;;;;;;:::o;29160:231::-;3120:30085;29280:16;3120:30085;29317:63;3120:30085;;;;-1:-1:-1;3120:30085:63;29118:19;3120:30085;;;-1:-1:-1;3120:30085:63;;-1:-1:-1;3120:30085:63;;;-1:-1:-1;3120:30085:63;;;;29280:16;:::i;:::-;3120:30085;;;;;;29317:63;;29160:231;;;;;;;;17215:701;-1:-1:-1;;;;;3120:30085:63;17414:399;3120:30085;17672:32;3120:30085;;17830:79;3120:30085;;17414:399;3120:30085;;;17765:31;3120:30085;;;17414:399;3120:30085;;17830:79;;:::i;17215:701::-;-1:-1:-1;;;;;3120:30085:63;-1:-1:-1;3120:30085:63;;;;17830:79;3120:30085;;-1:-1:-1;3120:30085:63;;;17581:30;3120:30085;;;-1:-1:-1;3120:30085:63;;17830:79;;:::i;1303:160:105:-;3120:30085:63;;;1412:43:105;;;;;;-1:-1:-1;;;;;3120:30085:63;;;1412:43:105;;;3120:30085:63;;;;;;;;;1412:43:105;;;3120:30085:63;3510:55:106;;-1:-1:-1;;;;1412:43:105;3120:30085:63;1412:43:105;3120:30085:63;;1412:43:105;:::i;:::-;3120:30085:63;3462:31:106;;;;;;;3120:30085:63;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2847:1:106;1412:43:105;3120:30085:63;;;;3510:55:106;;:::i;:::-;3120:30085:63;;4551:22:105;;;;:57;;;;3120:30085:63;4547:135:105;;;;1303:160;:::o;4547:135::-;4631:40;2847:1:106;4631:40:105;;3120:30085:63;1412:43:105;2847:1:106;4631:40:105;4551:57;4578:30;;;;1412:43;4578:30;;;3120:30085:63;;;;1412:43:105;3120:30085:63;4578:30:105;;3120:30085:63;:::i;:::-;4577:31:105;4551:57;;;;3120:30085:63;;;;;4625:582:106;;4797:8;;-1:-1:-1;3120:30085:63;;5874:21:106;:17;;6046:142;;;;;;5870:383;6225:17;5894:1;6225:17;;5894:1;6225:17;4793:408;3120:30085:63;;5045:22:106;:49;;;4793:408;5041:119;;5173:17;;:::o;5041:119::-;-1:-1:-1;;;;;5121:24:106;;5066:1;5121:24;3120:30085:63;5121:24:106;3120:30085:63;;5066:1:106;5121:24;5045:49;5071:18;;;:23;5045:49;"},"methodIdentifiers":{"MAX_CREATOR_FEE_PERCENTAGE()":"2e1d388d","MAX_PROTOCOL_SWAP_FEE_PERCENTAGE()":"2772d156","MAX_PROTOCOL_YIELD_FEE_PERCENTAGE()":"5e32e4e8","collectAggregateFees(address)":"8f4ab9ca","collectAggregateFeesHook(address)":"fa399f2a","computeAggregateFeePercentage(uint256,uint256)":"0ddd60c6","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getGlobalProtocolSwapFeePercentage()":"7869ee18","getGlobalProtocolYieldFeePercentage()":"55fb76af","getPoolCreatorFeeAmounts(address)":"9e95f3fd","getPoolCreatorSwapFeePercentage(address)":"0b8e059b","getPoolCreatorYieldFeePercentage(address)":"0252aab5","getPoolProtocolSwapFeeInfo(address)":"5c15a0b4","getPoolProtocolYieldFeeInfo(address)":"7a2b97dc","getProtocolFeeAmounts(address)":"8df44c54","getVault()":"8d928af8","isPoolRegistered(address)":"c673bdaf","migratePool(address)":"0874327f","registerPool(address,address,bool)":"77ff76e7","setGlobalProtocolSwapFeePercentage(uint256)":"8a3c5c69","setGlobalProtocolYieldFeePercentage(uint256)":"a93df2a4","setPoolCreatorSwapFeePercentage(address,uint256)":"1377c16c","setPoolCreatorYieldFeePercentage(address,uint256)":"3af52712","setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356","updateProtocolSwapFeePercentage(address)":"71ecc8fb","updateProtocolYieldFeePercentage(address)":"71447ea8","vault()":"fbfa77cf","withdrawPoolCreatorFees(address)":"52f125f0","withdrawPoolCreatorFees(address,address)":"f7061445","withdrawProtocolFees(address,address)":"cf7b287f","withdrawProtocolFeesForToken(address,address,address)":"b53a70b2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"CallerIsNotPoolCreator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMigrationSource\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolCreatorFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolYieldFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateSwapFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateYieldFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"PoolRegisteredWithFeeController\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_CREATOR_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFeesHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeAggregateFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolSwapFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolYieldFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getProtocolFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"migratePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"registerPool\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract stores global default protocol swap and yield fees, and also tracks the values of those fees for each pool (the `PoolFeeConfig` described below). Protocol fees can always be overwritten by governance, but pool creator fees are controlled by the registered poolCreator (see `PoolRoleAccounts`). The Vault stores a single aggregate percentage for swap and yield fees; only this `ProtocolFeeController` knows the component fee percentages, and how to compute the aggregate from the components. This is done for performance reasons, to minimize gas on the critical path, as this way the Vault simply applies a single \\\"cut\\\", and stores the fee amounts separately from the pool balances. The pool creator fees are \\\"net\\\" protocol fees, meaning the protocol fee is taken first, and the pool creator fee percentage is applied to the remainder. Essentially, the protocol is paid first, then the remainder is divided between the pool creator and the LPs. There is a permissionless function (`collectAggregateFees`) that transfers these tokens from the Vault to this contract, and distributes them between the protocol and pool creator, after which they can be withdrawn at any time by governance and the pool creator, respectively. Protocol fees can be zero in some cases (e.g., the token is registered as exempt), and pool creator fees are zero if there is no creator role address defined. Protocol fees are capped at a maximum percentage (50%); pool creator fees are computed \\\"net\\\" protocol fees, so they can be any value from 0 to 100%. Any combination is possible. A protocol-fee-exempt pool with a 100% pool creator fee would send all fees to the creator. If there is no pool creator, a pool with a 50% protocol fee would divide the fees evenly between the protocol and LPs. This contract is deployed with the Vault, but can be changed by governance.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"CallerIsNotPoolCreator(address,address)\":[{\"params\":{\"caller\":\"The account attempting to withdraw pool creator fees\",\"pool\":\"The pool the caller tried to withdraw from\"}}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"PoolAlreadyRegistered(address)\":[{\"details\":\"This can happen if there is an error in the migration, or if governance somehow grants permission to `migratePool`, which should never happen.\",\"params\":{\"pool\":\"The pool\"}}],\"PoolCreatorNotRegistered(address)\":[{\"params\":{\"pool\":\"The pool with no creator\"}}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol swap fee percentages.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol yield fee percentages.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"params\":{\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"params\":{\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global swap fee percentage.\",\"params\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global yield fee percentage.\",\"params\":{\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which pool creator fees are being withdrawn\",\"recipient\":\"The recipient of the funds (the pool creator if permissionless, or another account)\",\"token\":\"The token being withdrawn\"}},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator swap fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage for the pool\"}},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator yield fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage for the pool\"}},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"details\":\"The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee counterpart also include the protocol fee exemption flag, we might as well include it here as well.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (non-zero, or the event would not be emitted)\",\"protocolFeeExempt\":\"True if the pool is initially exempt from protocol fees\"}},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which protocol fees are being withdrawn\",\"recipient\":\"The recipient of the funds\",\"token\":\"The token being withdrawn\"}},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the swap fee was charged\",\"token\":\"The token in which the swap fee was charged\"}},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol swap fee will be changed\",\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the yield fee was charged\",\"token\":\"The token in which the yield fee was charged\"}},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol yield fee will be changed\",\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}}},\"kind\":\"dev\",\"methods\":{\"collectAggregateFees(address)\":{\"params\":{\"pool\":\"The pool with aggregate fees\"}},\"collectAggregateFeesHook(address)\":{\"details\":\"Copy and zero out the `aggregateFeeAmounts` collected in the Vault accounting, supplying credit for each token. Then have the Vault transfer tokens to this contract, debiting each token for the amount transferred so that the transaction settles when the hook returns.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"details\":\"Not tied to any particular pool; this just performs the low-level \\\"additive fee\\\" calculation. Note that pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are stored in the Vault with 24-bit precision, this will truncate any values that require greater precision. It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee components, but the truncation ensures it will not revert for any valid set of fee percentages. See example below: tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60% totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000 protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400 creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600 creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360 lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\",\"params\":{\"poolCreatorFeePercentage\":\"The pool creator portion of the aggregate fee percentage\",\"protocolFeePercentage\":\"The protocol portion of the aggregate fee percentage\"},\"returns\":{\"_0\":\"The computed aggregate percentage\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getGlobalProtocolSwapFeePercentage()\":{\"returns\":{\"_0\":\"The global protocol swap fee percentage\"}},\"getGlobalProtocolYieldFeePercentage()\":{\"returns\":{\"_0\":\"The global protocol yield fee percentage\"}},\"getPoolCreatorFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getPoolCreatorSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\"}},\"getPoolCreatorYieldFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee\"}},\"getPoolProtocolSwapFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"The protocol swap fee percentage for the given pool\",\"_1\":\"True if the protocol fee has been overridden\"}},\"getPoolProtocolYieldFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"The protocol yield fee percentage for the given pool\",\"_1\":\"True if the protocol fee has been overridden\"}},\"getProtocolFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\"}},\"migratePool(address)\":{\"details\":\"Permission should NEVER be granted to this function outside of a migration contract. It is necessary to permit migration of the `ProtocolFeeController` with all state (in particular, protocol fee overrides and pool creator fees) that cannot be written outside of the `registerPool` function called by the Vault during pool deployment. Even if governance were to grant permission to call this function, the `_registeredPools` latch keeps it safe, guaranteeing that it is impossible to use this function to change anything after registration. A pool can only be registered / configured once - either copied to a new controller in the migration context, or added normally through the Vault calling `registerPool`.\",\"params\":{\"pool\":\"The address of the pool to be migrated\"}},\"registerPool(address,address,bool)\":{\"details\":\"This must be called from the Vault during pool registration. It will initialize the pool to the global protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate fee percentages, based on an initial pool creator fee of 0.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (or 0 if there won't be a pool creator fee)\",\"protocolFeeExempt\":\"If true, the pool is initially exempt from protocol fees\"},\"returns\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\"}},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\"}},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage to apply to the pool\"}},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage to apply to the pool\"}},\"setProtocolSwapFeePercentage(address,uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol swap fee\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol yield fee\"}},\"updateProtocolSwapFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol swap fee\"}},\"updateProtocolYieldFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol yield fee\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The Vault address\"}},\"withdrawPoolCreatorFees(address)\":{\"details\":\"Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable value, this function is permissionless.\",\"params\":{\"pool\":\"The pool on which fees were collected\"}},\"withdrawPoolCreatorFees(address,address)\":{\"details\":\"Sends swap and yield pool creator fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFees(address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFeesForToken(address,address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\",\"token\":\"Token to withdraw\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"notice\":\"Error raised if the wrong account attempts to withdraw pool creator fees.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"InvalidMigrationSource()\":[{\"notice\":\"Migration source cannot be this contract.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"Prevent pool data from being registered more than once.\"}],\"PoolCreatorFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\"}],\"PoolCreatorNotRegistered(address)\":[{\"notice\":\"Error raised if there is no pool creator on a withdrawal attempt from the given pool.\"}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated.\"},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated.\"},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\"},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\"},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of pool creator fees in a specific token and amount.\"},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator swap fee percentage of a pool is updated.\"},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator yield fee percentage of a pool is updated.\"},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"notice\":\"Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\"},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of protocol fees in a specific token and amount.\"},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol swap fees in a specific token and amount.\"},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated for a specific pool.\"},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol yield fees in a specific token and amount.\"},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated for a specific pool.\"}},\"kind\":\"user\",\"methods\":{\"collectAggregateFees(address)\":{\"notice\":\"Collects aggregate fees from the Vault for a given pool.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"notice\":\"Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getGlobalProtocolSwapFeePercentage()\":{\"notice\":\"Getter for the current global protocol swap fee.\"},\"getGlobalProtocolYieldFeePercentage()\":{\"notice\":\"Getter for the current global protocol yield fee.\"},\"getPoolCreatorFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the pool creator for withdrawal.\"},\"getPoolCreatorSwapFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator swap fee percentage for a given pool.\"},\"getPoolCreatorYieldFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator yield fee percentage for a given pool.\"},\"getPoolProtocolSwapFeeInfo(address)\":{\"notice\":\"Getter for the current protocol swap fee for a given pool.\"},\"getPoolProtocolYieldFeeInfo(address)\":{\"notice\":\"Getter for the current protocol yield fee for a given pool.\"},\"getProtocolFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the protocol for withdrawal.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isPoolRegistered(address)\":{\"notice\":\"Getter for pool registration flag.\"},\"migratePool(address)\":{\"notice\":\"Not exposed in the interface, this enables migration of hidden pool state.\"},\"registerPool(address,address,bool)\":{\"notice\":\"Add pool-specific entries to the protocol swap and yield percentages.\"},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"notice\":\"Set the global protocol swap fee percentage, used by standard pools.\"},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"notice\":\"Set the global protocol yield fee percentage, used by standard pools.\"},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator swap fee percentage to the specified pool.\"},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator yield fee percentage to the specified pool.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"updateProtocolSwapFeePercentage(address)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"updateProtocolYieldFeePercentage(address)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"vault()\":{\"notice\":\"Get the address of the main Vault contract.\"},\"withdrawPoolCreatorFees(address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool.\"},\"withdrawPoolCreatorFees(address,address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool. This is a permissioned function.\"},\"withdrawProtocolFees(address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\"},\"withdrawProtocolFeesForToken(address,address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\"}},\"notice\":\"Helper contract to manage protocol and creator fees outside the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\":\"ProtocolFeeController\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol\":{\"keccak256\":\"0x89bd8b60aa203c8aa72af6e88671af68f4407a26dd3e0541b0e4dc387fd0081e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://411eb9ee6df963198102de5ae597c1f1377b0a45be23f17d38463f2eeefa2b0a\",\"dweb:/ipfs/QmcEaMawADJEyLswG5hhvhQuTNV3XUxBVu3YZCbJzQkoJ7\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\":{\"keccak256\":\"0x11b6e6c5d818d4f7c2ad5afbbd226230deb0f1c42b5cac2159dd66a8d0c9a1b6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://25e64898f2101a3c2492bdf08837b049859306df52fdfc925588cbcd39c01b02\",\"dweb:/ipfs/QmVC7Qs2X7XLwdswtp7Tzu5bYvGQyGfpL3YkYr6tJBHaEn\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x4910eb69dc3e3141803a36fb176349ae3d774f4a9811e4d486c44bf6a8e4e055\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://afec051b387a1dad075acfbe0093b443e9e5827e29f7b960af3c1b69645aa290\",\"dweb:/ipfs/QmdLcyhmHCiEyVbFsVByyjEdUn9pDTzVAPNyBpdH2YEs4Y\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/Router.sol":{"Router":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"contract IWETH","name":"weth","type":"address"},{"internalType":"contract IPermit2","name":"permit2","type":"address"},{"internalType":"string","name":"routerVersion","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"ErrorSelectorNotFound","type":"error"},{"inputs":[],"name":"EthTransfer","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[],"name":"InsufficientEth","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"addLiquidityCustom","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct IRouterCommon.AddLiquidityHookParams","name":"params","type":"tuple"}],"name":"addLiquidityHook","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"addLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"addLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"addLiquidityUnbalanced","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"donate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getPermit2","outputs":[{"internalType":"contract IPermit2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSender","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWeth","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct IRouter.InitializeHookParams","name":"params","type":"tuple"}],"name":"initializeHook","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"internalType":"struct IRouterCommon.PermitApproval[]","name":"permitBatch","type":"tuple[]"},{"internalType":"bytes[]","name":"permitSignatures","type":"bytes[]"},{"components":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint160","name":"amount","type":"uint160"},{"internalType":"uint48","name":"expiration","type":"uint48"},{"internalType":"uint48","name":"nonce","type":"uint48"}],"internalType":"struct IAllowanceTransfer.PermitDetails[]","name":"details","type":"tuple[]"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"sigDeadline","type":"uint256"}],"internalType":"struct IAllowanceTransfer.PermitBatch","name":"permit2Batch","type":"tuple"},{"internalType":"bytes","name":"permit2Signature","type":"bytes"},{"internalType":"bytes[]","name":"multicallData","type":"bytes[]"}],"name":"permitBatchAndCall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquidityCustom","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct IRouterCommon.AddLiquidityHookParams","name":"params","type":"tuple"}],"name":"queryAddLiquidityHook","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquidityUnbalanced","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquidityCustom","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct IRouterCommon.RemoveLiquidityHookParams","name":"params","type":"tuple"}],"name":"queryRemoveLiquidityHook","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"}],"name":"queryRemoveLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"}],"name":"queryRemoveLiquidityRecoveryHook","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquiditySingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGiven","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct IRouter.SwapSingleTokenHookParams","name":"params","type":"tuple"}],"name":"querySwapHook","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"querySwapSingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountCalculated","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"querySwapSingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountCalculated","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"removeLiquidityCustom","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct IRouterCommon.RemoveLiquidityHookParams","name":"params","type":"tuple"}],"name":"removeLiquidityHook","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"removeLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecoveryHook","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"removeLiquiditySingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"removeLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"swapSingleTokenExactIn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"swapSingleTokenExactOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGiven","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct IRouter.SwapSingleTokenHookParams","name":"params","type":"tuple"}],"name":"swapSingleTokenHook","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}],"evm":{"bytecode":{"functionDebugData":{"finalize_allocation":{"entryPoint":1156,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_4843":{"entryPoint":1129,"id":null,"parameterSlots":1,"returnSlots":0},"fun_calculateSlot":{"entryPoint":1191,"id":6911,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6101206040908082523461046557615cdc803803809161001f8285610484565b83398101916080828403126104655781516001600160a01b039283821682036104655760209081810151928584168403610465578482015195861686036104655760608201516001600160401b0392838211610465570190601f9088828401121561046557825184811161045157601f199388519a6100a4888787860116018d610484565b828c5287838301011161046557815f928c898080950191015e8b01015261010987516100cf81610469565b600b81526a14d95b99195c91dd585c9960aa1b878201528851906100f282610469565b600682526539b2b73232b960d11b888301526104a7565b60805260a0528751928311610451575f54916001928381811c91168015610447575b86821014610433578281116103f0575b50849184116001146103915750829182916101bb969798995f94610386575b50501b915f199060031b1c1916175f555b835161017681610469565b600c81526b2937baba32b921b7b6b6b7b760a11b82820152701a5cd4995d1d5c9b915d1a131bd8dad959607a1b8551926101af84610469565b601184528301526104a7565b60c05260e05261010091825251615782918261055a83396080518281816104ed0152818161099e01528181610bd20152818161111b015281816120ab0152818161291b01528181614d340152614e0a015260a0518281816103150152818161048c0152818161061a015281816107aa0152818161093e01528181610b9b01528181610d3f01528181610e9101528181610fa9015281816112b10152818161138f0152818161167601528181611ad801528181611c1801528181611cc101528181611de001528181611f89015281816121040152818161275e015281816128bb01528181612a6a01528181612b3701528181612d0201528181613644015281816138c10152818161394501528181613f0601528181614e7e015281816151df0152818161539f0152818161545c01526154ac015260c051828181614cbe0152615115015260e05182818160220152818161180e015281816118be01528181611ce201528181611d3601528181611f2b015281816122aa015281816124260152818161360201528181613af501528181613c750152818161547d0152615546015251818181611dbc015281816122d801528181612e93015281816130590152818161315b0152613b220152f35b015192505f8061015a565b83929316905f8052845f20915f5b8181106103db575098836101bb9798999a106103c3575b505050811b015f5561016b565b01515f1960f88460031b161c191690555f80806103b6565b8a83015184559285019291860191860161039f565b5f8052855f208380870160051c82019288881061042a575b0160051c019084905b82811061041f57505061013b565b5f8155018490610411565b92508192610408565b634e487b7160e01b5f52602260045260245ffd5b90607f169061012b565b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b604081019081106001600160401b0382111761045157604052565b601f909101601f19168101906001600160401b0382119082101761045157604052565b90610514603a60209260405193849181808401977f62616c616e6365722d6c6162732e76332e73746f726167652e000000000000008952805191829101603986015e830190601760f91b60398301528051928391018583015e015f8382015203601a810184520182610484565b5190205f1981019081116105455760405190602082019081526020825261053a82610469565b9051902060ff191690565b634e487b7160e01b5f52601160045260245ffdfe60806040526004361015610072575b3615610018575f80fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361004a57005b7f0540ddf6000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f3560e01c8063026b3d9514613d25578063086fad661461391d57806308c04793146137ff5780630ca078ec146137675780630f71088814613626578063107c279f146135e3578063175d44081461350457806319c6989f14612eb75780631bbf2e2314612e745780631d56798d14612cd957806323b3924114612ad75780633ebc54e51461295a578063452db952146127d657806351682750146126c357806353d0bb981461260e57806354fd4d50146124d15780635b343791146120dc5780635e01eb5a146120975780635f9815ff14611f5457806368a24fe014611c59578063724dba3314611b4057806372657d17146119f5578063750283bc146119785780637b03c7ba1461164857806382bf2b241461157457806382cd54fb1461132c57806394e86ef8146111a15780639de9051814610f82578063ac9650d814610f3e578063b037ed3614610dad578063b24bd57114610c63578063be5ae84114610c0e578063bf6ee3fd14610a75578063c08bc851146109dd578063c330c7be14610816578063da001f7d14610685578063e7326def14610534578063ecb2182c146103965763efd85f140361000e57346103925761023136614177565b610239614e74565b6001600160a01b039061024e602082016146d3565b610257826146d3565b9261026560408401846146e7565b9093608081013593600585101561039257836102d0610311966060856102bb5f9c9b6102ab99878f9e61029e60c06102d79d018761473b565b9a909b6040519e8f614038565b168d521660208c0152369161408f565b604089015201356060870152608086016148ac565b3691614126565b60a08201526040519485809481937f4af29ec400000000000000000000000000000000000000000000000000000000835260048301614be4565b03927f0000000000000000000000000000000000000000000000000000000000000000165af18015610387575f905f925f9161035d575b50610359906040519384938461426b565b0390f35b9050610359925061038091503d805f833e6103788183614054565b81019061496f565b9092610348565b6040513d5f823e3d90fd5b5f80fd5b61044c6103c55f61043e816104886103ad366145d1565b97939a92999094916103be33614e05565b9a83615191565b9790946001600160a01b039b8c96604051946103e086613feb565b33865260209e8f9116908601526040850152606084015260016080840152151560a083015260c08201526040519283917f7b03c7ba000000000000000000000000000000000000000000000000000000008c84015260248301614a8c565b03601f198101835282614054565b6040519586809481937f48c894910000000000000000000000000000000000000000000000000000000083528b60048401526024830190614246565b03927f0000000000000000000000000000000000000000000000000000000000000000165af1918215610387576104db926104d3915f91610512575b50858082518301019101614aea565b509050614bd0565b51906104ea575b604051908152f35b5f7f00000000000000000000000000000000000000000000000000000000000000005d6104e2565b61052e91503d805f833e6105268183614054565b8101906146ad565b866104c4565b61043e6105da5f8061061661056561054b366145d1565b9161055e9b959b9a949691939a33614e05565b9a8c615191565b50916001600160a01b03956040519361057d85613feb565b3385528760209d168d8601526040850152606084015260026080840152151560a083015260c08201526040519283917f7b03c7ba000000000000000000000000000000000000000000000000000000008b84015260248301614a8c565b6040519485809481937f48c894910000000000000000000000000000000000000000000000000000000083528a60048401526024830190614246565b03927f0000000000000000000000000000000000000000000000000000000000000000165af180156103875761065c915f9161066b575b50838082518301019101614aea565b5050906104ea57604051908152f35b61067f91503d805f833e6105268183614054565b8461064d565b346103925760806003193601126103925761069e613f7f565b67ffffffffffffffff602435818111610392576106bf9036906004016140dd565b906106c8613fc1565b606435918211610392576107a65f929161043e61076a6106f66106f08796369060040161415c565b93614e05565b966001600160a01b03936040519161070d83613feb565b3083528560209b168b8401526040830152866060830152600160808301528660a083015260c08201526040519283917fefd85f14000000000000000000000000000000000000000000000000000000008b840152602483016148f2565b6040519485809481937fedfa35680000000000000000000000000000000000000000000000000000000083528a60048401526024830190614246565b03927f0000000000000000000000000000000000000000000000000000000000000000165af18015610387576107ec915f916107fc575b5083808251830101910161496f565b509190506104ea57604051908152f35b61081091503d805f833e6105268183614054565b846107dd565b346103925760a06003193601126103925761082f613f7f565b67ffffffffffffffff604435818111610392576108509036906004016140dd565b91610859613f95565b91608435908111610392575f9361043e6108fd869461088861088261093a96369060040161415c565b97614e05565b966001600160a01b039485604051936108a085613feb565b30855216602084015260408301526024356060830152600360808301528660a083015260c08201526040519283917fb24bd57100000000000000000000000000000000000000000000000000000000602084015260248301614a8c565b6040519586809481937fedfa3568000000000000000000000000000000000000000000000000000000008352602060048401526024830190614246565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19182156103875761035992610986915f916109c3575b5060208082518301019101614aea565b9093919261099b575b604051938493846145a6565b5f7f00000000000000000000000000000000000000000000000000000000000000005d61098f565b6109d791503d805f833e6105268183614054565b84610976565b61043e6105da5f806107a66109f1366141dc565b610a019993919892949933614e05565b986001600160a01b039560405193610a1885613feb565b3385528760209d168d8601526040850152606084015260016080840152151560a083015260c08201526040519283917f5b343791000000000000000000000000000000000000000000000000000000008b840152602483016148f2565b608060031936011261039257610a89613f7f565b67ffffffffffffffff9060243582811161039257610aab9036906004016140dd565b906044359283151580940361039257606435908111610392575f9261043e610b5a8594610adf610b9795369060040161415c565b610ae833614e05565b986001600160a01b03958660405194610b0086613feb565b33865216602085015260408401528760608401526003608084015260a083015260c08201526040519283917f5b343791000000000000000000000000000000000000000000000000000000006020840152602483016148f2565b6040519485809481937f48c89491000000000000000000000000000000000000000000000000000000008352602060048401526024830190614246565b03927f0000000000000000000000000000000000000000000000000000000000000000165af1801561038757610bf4575b50610bcf57005b5f7f00000000000000000000000000000000000000000000000000000000000000005d005b610c07903d805f833e6105268183614054565b5081610bc8565b34610392576020610c36610c21366144fa565b610c29614e47565b610c31614e74565b61526b565b50505f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051908152f35b3461039257610c7136614177565b610c79614e74565b6001600160a01b03610c8d602083016146d3565b610c96836146d3565b91610ca460408501856146e7565b9490608082013593600485101561039257836102d0610d3b96610cf3610d01955f9b606089878f9e61029e60c0610cdc9e018461473b565b168d521660208c0152013560408a0152369161408f565b606087015260808601614a73565b60a08201526040519485809481937f2145789700000000000000000000000000000000000000000000000000000000835260048301614c54565b03927f0000000000000000000000000000000000000000000000000000000000000000165af18015610387575f905f925f91610d83575b5061035990604051938493846145a6565b90506103599250610da691503d805f833e610d9e8183614054565b810190614aea565b9092610d72565b3461039257604060031936011261039257610dc6613f7f565b6001600160a01b0360405190806020937f5f9815ff000000000000000000000000000000000000000000000000000000008585015216602483015230604483015260243560648301526064825260a082019082821067ffffffffffffffff831117610f1157815f91816040527fedfa35680000000000000000000000000000000000000000000000000000000082528560a486015281837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6087610e8c60c4820182614246565b0301927f0000000000000000000000000000000000000000000000000000000000000000165af190811561038757610ed5925f92610eea575b5050828082518301019101614886565b906103596040519282849384528301906141a9565b610f0a925060a0903d90815f853e610f028285614054565b0101906146ad565b8380610ec5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60206003193601126103925760043567ffffffffffffffff811161039257610f76610f70610359923690600401614352565b90614cb0565b604051918291826143b1565b3461039257610f9c610f9336614294565b92919390614e05565b916001600160a01b0390817f00000000000000000000000000000000000000000000000000000000000000001691604051937fca4f280300000000000000000000000000000000000000000000000000000000855216928360048201525f81602481865afa908115610387575f9161117f575b50519461101b86614a42565b955f5b81811061115a5750505f9261043e61109c8886956110d8956040519261104384613feb565b30845260209a8b850152604084015260608301528660808301528660a083015260c08201526040519283917fefd85f14000000000000000000000000000000000000000000000000000000008a840152602483016148f2565b6040519485809481937fedfa35680000000000000000000000000000000000000000000000000000000083528960048401526024830190614246565b03925af18015610387576110fc915f91611140575b5082808251830101910161496f565b505091611118575b6103596040519282849384528301906141a9565b5f7f00000000000000000000000000000000000000000000000000000000000000005d611104565b61115491503d805f833e6105268183614054565b846110ed565b806fffffffffffffffffffffffffffffffff6111786001938b614bd0565b520161101e565b61119b91503d805f833e6111938183614054565b8101906149b8565b8661100f565b6111aa3661452d565b949095939193336111ba90614e05565b97604051996111c88b61401b565b338b5260208b01600190526001600160a01b031660408b01526001600160a01b031660608a01526001600160a01b0316608089015260a088015260c087015260e08601521515610100850152369061121f92614126565b6101208301526040517f68a24fe000000000000000000000000000000000000000000000000000000000602082015291829061125e9060248301614b3f565b03601f19810183526112709083614054565b60405180927f48c894910000000000000000000000000000000000000000000000000000000082526004820160209052602482016112ad91614246565b03827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691815a5f948591f1918215610387575f92611310575b5060208280518101031261039257602080920151906104ea57604051908152f35b6113259192503d805f833e6105268183614054565b90826112ef565b3461039257608060031936011261039257611345613f7f565b61134d613fab565b906064359067ffffffffffffffff8211610392576113726113e89236906004016140dd565b9061137b614e47565b611383614e74565b6001600160a01b035f817f00000000000000000000000000000000000000000000000000000000000000001693604051809681927fa07d60400000000000000000000000000000000000000000000000000000000083526044358a88600486016147f6565b038183875af1938415610387575f94611550575b5080604051927fca4f28030000000000000000000000000000000000000000000000000000000084521660048301525f82602481865afa918215610387575f92611534575b505f5b82518110156114f0576114578186614bd0565b519081611469575b6001915001611444565b826114748286614bd0565b5116853b15610392576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152908816602482015260448101929092525f8260648183895af1918215610387576001926114e1575b5061145f565b6114ea90614007565b876114db565b610359856114fd8861510c565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d6040519182916020835260208301906141a9565b6115499192503d805f833e6111938183614054565b9085611441565b61156d9194503d805f833e6115658183614054565b810190614886565b92856113fc565b5f61043e8161093a61160b61158836614491565b9061159898949295939833614e05565b986001600160a01b039687604051956115b087613feb565b3387521660208601526040850152606084015260036080840152151560a083015260c08201526040519283917f7b03c7ba00000000000000000000000000000000000000000000000000000000602084015260248301614a8c565b6040519586809481937f48c89491000000000000000000000000000000000000000000000000000000008352602060048401526024830190614246565b346103925761165636614177565b61165e614e47565b611666614e74565b6001600160a01b039060208101907f0000000000000000000000000000000000000000000000000000000000000000908382166116a2846146d3565b946116ac836146d3565b6116b960408501856146e7565b979091608086013590600482101561039257846102d061171593610cf35f9761174d9e6116ea8d60c081019061473b565b969097816040519b6116fb8d614038565b168b521660208a015260608d013560408a0152369161408f565b60a0820152604051809881927f2145789700000000000000000000000000000000000000000000000000000000835260048301614c54565b038183865af1908115610387575f955f975f9361194f575b5061176f906146d3565b9681604051987fca4f2803000000000000000000000000000000000000000000000000000000008a521660048901525f88602481875afa978815610387575f98611933575b50919560a0850192905f5b89518110156118ee576117d28184614bd0565b519081156118e557846117e5828d614bd0565b51166117f0876147e9565b806118ba575b15611838575061183260019261180b8a6146d3565b8b7f0000000000000000000000000000000000000000000000000000000000000000615575565b016117bf565b611841896146d3565b883b15610392576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529116602482015260448101929092525f82606481838b5af1918215610387576001926118ab575b50611832565b6118b490614007565b8b6118a5565b50857f00000000000000000000000000000000000000000000000000000000000000001681146117f6565b60019150611832565b50610359886119046118ff896146d3565b61510c565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051938493846145a6565b6119489198503d805f833e6111938183614054565b96886117b4565b90925061196c91975061176f96503d805f833e610d9e8183614054565b97919690979290611765565b6119813661452d565b9490959391933361199190614e05565b976040519961199f8b61401b565b338b5260208b015f90526001600160a01b031660408b01526001600160a01b031660608a01526001600160a01b0316608089015260a088015260c087015260e08601521515610100850152369061121f92614126565b60c060031936011261039257611a09613f7f565b611a11613fab565b611a196140fb565b60a4359067ffffffffffffffff8211610392575f611ad4611a3f8294369060040161415c565b9261043e61044c611a5d611a5233614e05565b98604435908b615191565b966001600160a01b039460405192611a7484613feb565b3384528660209d168d8501526040840152606435606084015260026080840152151560a083015260c08201526040519283917f5b343791000000000000000000000000000000000000000000000000000000008c840152602483016148f2565b03927f0000000000000000000000000000000000000000000000000000000000000000165af1918215610387576104db92611b1f915f91611b26575b5085808251830101910161496f565b5050614bd0565b611b3a91503d805f833e6105268183614054565b86611b10565b61043e611bd85f80611c14611b54366141dc565b611b65999391999892949833614e05565b996001600160a01b039560405193611b7c85613feb565b3385528760209c168c86015260408501526060840152876080840152151560a083015260c08201526040519283917f5b343791000000000000000000000000000000000000000000000000000000008a840152602483016148f2565b6040519485809481937f48c894910000000000000000000000000000000000000000000000000000000083528960048401526024830190614246565b03927f0000000000000000000000000000000000000000000000000000000000000000165af18015610387576110fc915f91611140575082808251830101910161496f565b3461039257611c67366144fa565b611c6f614e47565b611c77614e74565b611c808161526b565b611c8e6060859395016146d3565b90611c98836146d3565b94610100840195611ca8876147e9565b80611f1f575b15611d9c575094611d2b91611d066020977f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614f16565b611d0f856146d3565b91611d25611d1f608088016146d3565b916147e9565b92615443565b6001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016911614611d8a575b505f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051908152f35b6118ff611d96916146d3565b82611d5e565b81611db0575b5050602094611d2b91611d06565b6001600160a01b0390817f00000000000000000000000000000000000000000000000000000000000000001691807f00000000000000000000000000000000000000000000000000000000000000001691611e0a85614ed2565b93803b15610392576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152848316602482015294821660448601529187161660648401525f908390608490829084905af1908115610387575f93602093611ed093611f10575b506040519485809481937f15afd4090000000000000000000000000000000000000000000000000000000083528a60048401602090939291936001600160a01b0360408201951681520152565b03925af1801561038757611ee5575b80611da2565b602090813d8311611f09575b611efb8183614054565b810103126103925785611edf565b503d611ef1565b611f1990614007565b8a611e83565b506001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001690851614611cae565b3461039257606060031936011261039257611f6d613f7f565b611f75613fab565b611f7d614e74565b6001600160a01b0390817f000000000000000000000000000000000000000000000000000000000000000016604051927fca4f2803000000000000000000000000000000000000000000000000000000008452841660048401525f83602481845afa938415610387575f611ffe612039968296839161207d575b5051614a42565b93604051968795869485937fa07d604000000000000000000000000000000000000000000000000000000000855260443591600486016147f6565b03925af1801561038757610359915f91612063575b506040519182916020835260208301906141a9565b61207791503d805f833e6115658183614054565b8261204e565b61209191503d8085833e6111938183614054565b88611ff7565b34610392575f6003193601126103925760207f00000000000000000000000000000000000000000000000000000000000000005c6001600160a01b0360405191168152f35b34610392576120ea36614177565b6120f2614e47565b6120fa614e74565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008181169260209081810190612137826146d3565b95612141826146d3565b9661214f60408401846146e7565b919098608085013591600583101561039257896102d0612193946121a26121f29e5f988d866121ba996121868f60c081019061473b565b99909a6040519d8e614038565b168c5216908a0152369161408f565b604087015260608901356060870152608086016148ac565b60a0820152604051809981927f4af29ec400000000000000000000000000000000000000000000000000000000835260048301614be4565b038183855af1958615610387575f935f985f986124a8575b50612214906146d3565b81604051917fca4f28030000000000000000000000000000000000000000000000000000000083521660048201525f81602481865afa908115610387575f9161248e575b50969760a0840197905f5b825181101561244d57836122778285614bd0565b51166122838289614bd0565b519081156123e0576122948c6147e9565b80612422575b156122d45750906122ce6001928b7f0000000000000000000000000000000000000000000000000000000000000000614f16565b01612263565b90857f00000000000000000000000000000000000000000000000000000000000000001690612302896146d3565b61230b82614ed2565b833b15610392576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201528a831660248201529082166044820152908416606482015292915f908490608490829084905af1918215610387576123cc938c93612413575b5060405193849283927f15afd40900000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03815f8a5af19081156103875789916123ea575b50506001906122ce565b813d831161240c575b6123fd8183614054565b8101031261039257878c6123e0565b503d6123f3565b61241c90614007565b8f612381565b50857f000000000000000000000000000000000000000000000000000000000000000016811461229a565b50856103598b61245f6118ff896146d3565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d6040519384938461426b565b6124a291503d805f833e6111938183614054565b89612258565b9097506124c591985061221494503d805f833e6103788183614054565b9891949098979061220a565b34610392575f600319360112610392576040515f5f549060018260011c9160018416918215612604575b60209485851084146125d75785879486865291825f14612599575050600114612540575b5061252c92500383614054565b610359604051928284938452830190614246565b5f808052859250907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b85831061258157505061252c93508201018561251f565b8054838901850152879450869390920191810161256a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168582015261252c95151560051b850101925087915061251f9050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f16926124fb565b346103925761263f6126385f8061061661076a61043e61262d36614432565b95939a929990614e05565b988a615191565b506001600160a01b03936040519161265683613feb565b3083528560209b168b84015260408301526fffffffffffffffffffffffffffffffff6060830152600260808301528660a083015260c08201526040519283917fb24bd571000000000000000000000000000000000000000000000000000000008b84015260248301614a8c565b61043e611bd85f8061275a6126d736614491565b6126e79993949892919933614e05565b996001600160a01b0395604051936126fe85613feb565b3385528760209c168c86015260408501526060840152876080840152151560a083015260c08201526040519283917f7b03c7ba000000000000000000000000000000000000000000000000000000008a84015260248301614a8c565b03927f0000000000000000000000000000000000000000000000000000000000000000165af18015610387576127a0915f916127bc575b50828082518301019101614aea565b50929050611118576103596040519282849384528301906141a9565b6127d091503d805f833e6105268183614054565b84612791565b346103925760a0600319360112610392576127ef613f7f565b67ffffffffffffffff602435818111610392576128109036906004016140dd565b91612819613f95565b91608435908111610392575f9361043e6108fd86946128426108826128b796369060040161415c565b966001600160a01b0394856040519361285a85613feb565b30855216602084015260408301526044356060830152600460808301528660a083015260c08201526040519283917fefd85f14000000000000000000000000000000000000000000000000000000006020840152602483016148f2565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19182156103875761035992612903915f91612940575b506020808251830101910161496f565b90939192612918575b6040519384938461426b565b5f7f00000000000000000000000000000000000000000000000000000000000000005d61290c565b61295491503d805f833e6105268183614054565b846128f3565b3461039257612968366142e6565b906129769094939294614e05565b936001600160a01b038093816040519661298f8861401b565b3388528160209a8b8a015f905216604089015216606087015216608085015260a084015260c083015f905260e083016fffffffffffffffffffffffffffffffff905261010083015f905261012083015260405180928582017fbe5ae8410000000000000000000000000000000000000000000000000000000090526024820190612a1891614b3f565b03601f1981018352612a2a9083614054565b6040518080937fedfa356800000000000000000000000000000000000000000000000000000000825286600483015260248201612a6691614246565b03917f00000000000000000000000000000000000000000000000000000000000000001691815a5f948591f1908115610387575f91612abd575b50828180518101031261039257820151906104ea57604051908152f35b612ad191503d805f833e6105268183614054565b83612aa0565b346103925760a060031936011261039257612af0613f7f565b612af8613fc1565b90612b01613f95565b60843567ffffffffffffffff811161039257612b24612b2a91369060040161415c565b91614e05565b916001600160a01b0391827f0000000000000000000000000000000000000000000000000000000000000000169280604051937fc9c1661b0000000000000000000000000000000000000000000000000000000085521695866004850152166024830152604082604481865afa918215610387575f905f93612c9a575b505f9361043e612c368694612bbe612c7295614a42565b906001612bcb8984614bd0565b5260405191612bd983613feb565b30835260209b8c84015260408301526024356060830152600160808301528660a083015260c08201526040519283917fb24bd571000000000000000000000000000000000000000000000000000000008c84015260248301614a8c565b6040519586809481937fedfa35680000000000000000000000000000000000000000000000000000000083528b60048401526024830190614246565b03925af1918215610387576104db926104d3915f916105125750858082518301019101614aea565b925050916040823d604011612cd1575b81612cb760409383614054565b81010312610392578151602090920151909290915f612ba7565b3d9150612caa565b3461039257612cf5612cea36614432565b929490939193614e05565b926001600160a01b0392837f0000000000000000000000000000000000000000000000000000000000000000169380604051947fc9c1661b0000000000000000000000000000000000000000000000000000000086521696876004860152166024840152604083604481875afa928315610387575f905f94612e37575b509361043e612c365f9694612e0f94612d8b8997614a42565b916fffffffffffffffffffffffffffffffff612da78a85614bd0565b5260405192612db584613feb565b30845260209c8d85015260408401526060830152600260808301528660a083015260c08201526040519283917fefd85f14000000000000000000000000000000000000000000000000000000008c840152602483016148f2565b03925af1918215610387576104db92611b1f915f91611b26575085808251830101910161496f565b9350506040833d604011612e6c575b81612e5360409383614054565b810103126103925782516020909301519261043e612d72565b3d9150612e46565b34610392575f6003193601126103925760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b60a06003193601126103925767ffffffffffffffff60043511610392573660236004350112156103925767ffffffffffffffff60043560040135116103925736602460c060043560040135026004350101116103925760243567ffffffffffffffff811161039257612f2d903690600401614352565b67ffffffffffffffff60443511610392576060600319604435360301126103925760643567ffffffffffffffff811161039257612f6e903690600401614383565b60843567ffffffffffffffff811161039257612f8e903690600401614352565b949093612f99614e47565b8060043560040135036134dc575f5b6004356004013581106132295750505060443560040135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd60443536030182121561039257816044350160048101359067ffffffffffffffff82116103925760248260071b36039101136103925761304c575b610359610f7686865f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d614cb0565b6001600160a01b039492947f0000000000000000000000000000000000000000000000000000000000000000163b1561039257604051947f2a2d80d10000000000000000000000000000000000000000000000000000000086523360048701526060602487015260c486019260443501602481019367ffffffffffffffff60048301351161039257600482013560071b360385136103925760606064890152600482013590529192869260e484019291905f905b600481013582106131ab5750505082915f9461314e926001600160a01b0361312c602460443501613fd7565b16608486015260448035013560a486015260031985840301604486015261478c565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19182156103875761035993610f769361319c575b82945081935061301c565b6131a590614007565b84613191565b9195945091926001600160a01b036131c287613fd7565b168152602080870135916001600160a01b038316809303610392576004926001928201526131f26040890161517e565b65ffffffffffff809116604083015261320d60608a0161517e565b1660608201526080809101970193019050889495939291613100565b6132376102d0828486614dee565b60405180606081011067ffffffffffffffff606083011117610f1157606081016040525f81526020915f838301525f60408301528281015190606060408201519101515f1a91835283830152604082015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc818502600435013603011261039257604051906132c782614038565b6132da602460c086026004350101613fd7565b8083526132f0604460c087026004350101613fd7565b908185850152613309606460c088026004350101613fd7565b60408581019190915260043560c08802016084810135606087015260a4810135608087015260c4013560a086015283015183519386015160ff91909116926001600160a01b0383163b15610392575f6001600160a01b03809460e4948b98849860c460c06040519c8d9b8c9a7fd505accf000000000000000000000000000000000000000000000000000000008c521660048b01523060248b0152608482820260043501013560448b0152026004350101356064880152608487015260a486015260c4850152165af190816134cd575b506134c3576133e661514f565b906001600160a01b0381511690836001600160a01b0381830151166044604051809581937fdd62ed3e00000000000000000000000000000000000000000000000000000000835260048301523060248301525afa918215610387575f92613493575b50606001510361345e5750506001905b01612fa8565b80511561346b5780519101fd5b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b9091508381813d83116134bc575b6134ab8183614054565b810103126103925751906060613448565b503d6134a1565b5050600190613458565b6134d690614007565b8a6133d9565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461039257613512366142e6565b906135209094939294614e05565b936001600160a01b03809381604051966135398861401b565b3388528160209a8b8a016001905216604089015216606087015216608085015260a084015260c083016fffffffffffffffffffffffffffffffff905260e083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905261010083015f905261012083015260405180928582017fbe5ae8410000000000000000000000000000000000000000000000000000000090526024820190612a1891614b3f565b34610392575f6003193601126103925760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461039257613637610f9336614294565b926001600160a01b0392837f00000000000000000000000000000000000000000000000000000000000000001693604051937fca4f280300000000000000000000000000000000000000000000000000000000855216938460048501525f84602481845afa9384156103875761109c5f959461372a946136c3889761043e95899161374d575051614a42565b91604051926136d184613feb565b30845260209a8b850152604084015260608301528660808301528660a083015260c08201526040519283917fb24bd571000000000000000000000000000000000000000000000000000000008a84015260248301614a8c565b03925af18015610387576127a0915f916127bc5750828082518301019101614aea565b61376191503d808b833e6111938183614054565b8c611ff7565b5f61043e816128b761160b61377b366141dc565b9061378c9894929895939533614e05565b986001600160a01b039687604051956137a487613feb565b3387521660208601526040850152606084015260046080840152151560a083015260c08201526040519283917f5b343791000000000000000000000000000000000000000000000000000000006020840152602483016148f2565b606060031936011261039257613813613f7f565b60443567ffffffffffffffff8111610392575f61043e61387a61383d6138b49436906004016140dd565b6040519283916020977f82cd54fb0000000000000000000000000000000000000000000000000000000089850152602435903390602486016147f6565b604051809381927f48c894910000000000000000000000000000000000000000000000000000000083528660048401526024830190614246565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561038757610ed5915f91613903575b50828082518301019101614886565b61391791503d805f833e6105268183614054565b836138f4565b346103925761392b36614177565b613933614e47565b61393b614e74565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000006020826139728583016146d3565b9461397c816146d3565b95604082019661398c88846146e7565b9061399a60608601866146e7565b939092806139ab60c089018961473b565b6040517fba8a2be0000000000000000000000000000000000000000000000000000000008152988e1660048a01529c909316602488015260c0604488015260c487015294999460e48b0192905f5b8a828210613d0657505050506003198a83030160648b01528382527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8411610392578794858b9594613a6d94879660051b8092848301370160808901356084870152601c8682030160a4870152019161478c565b03815f8689165af1948515610387575f95613cd7575b50939460a0850194905f5b613a9882846146e7565b9050811015613c9e57613abd613ab882613ab285876146e7565b906147ac565b6146d3565b613ace82613ab260608701876146e7565b35908115613c2f57613adf896147e9565b80613c71575b15613b1f575090613b19600192887f0000000000000000000000000000000000000000000000000000000000000000614f16565b01613a8e565b857f00000000000000000000000000000000000000000000000000000000000000001691613b4c866146d3565b613b5582614ed2565b843b15610392576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152898c168316602482015290821660448201528389169091166064820152925f908490608490829084905af191821561038757613c19938993613c62575060405193849283927f15afd40900000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03815f898c165af1908115610387578691613c39575b5050600190613b19565b813d8311613c5b575b613c4c8183614054565b81010312610392578489613c2f565b503d613c42565b613c6b90614007565b8c612381565b50857f00000000000000000000000000000000000000000000000000000000000000001686821614613ae5565b8488613cac6118ff866146d3565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051908152f35b9094508281813d8311613cff575b613cef8183614054565b8101031261039257519386613a83565b503d613ce5565b8084968c613d176001959697613fd7565b1681520195019291016139f9565b60c060031936011261039257613d39613f7f565b6024359067ffffffffffffffff808311610392573660238401121561039257826004013591613d6783614077565b92613d756040519485614054565b80845260209460248686019260051b82010191368311610392576024879201905b838210613f68575050505060443582811161039257613db99036906004016140dd565b92613dc26140fb565b9260a43590811161039257613ddb90369060040161415c565b93613de533614e05565b946001600160a01b039460405192613dfc84613feb565b338452868985019616865260408401948552606084019081526080840194606435865260a08501921515835260c0850193845287604051977f086fad66000000000000000000000000000000000000000000000000000000008c8a01528b60248a0152816101248a0197511660448a015251166064880152519360e0608488015284518091528961014488019501905f5b8b828210613f5257505050509461043e613f02955f989583956105da95613ee28c9b51937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc94858983030160a48a0152614634565b935160c487015251151560e4860152519084830301610104850152614246565b03927f0000000000000000000000000000000000000000000000000000000000000000165af1908115610387575f91612abd5750828180518101031261039257820151906104ea57604051908152f35b83518b1688529687019690920191600101613e8d565b828091613f7484613fd7565b815201910190613d96565b600435906001600160a01b038216820361039257565b606435906001600160a01b038216820361039257565b602435906001600160a01b038216820361039257565b604435906001600160a01b038216820361039257565b35906001600160a01b038216820361039257565b60e0810190811067ffffffffffffffff821117610f1157604052565b67ffffffffffffffff8111610f1157604052565b610140810190811067ffffffffffffffff821117610f1157604052565b60c0810190811067ffffffffffffffff821117610f1157604052565b90601f601f19910116810190811067ffffffffffffffff821117610f1157604052565b67ffffffffffffffff8111610f115760051b60200190565b929161409a82614077565b916140a86040519384614054565b829481845260208094019160051b810192831161039257905b8282106140ce5750505050565b813581529083019083016140c1565b9080601f83011215610392578160206140f89335910161408f565b90565b60843590811515820361039257565b67ffffffffffffffff8111610f1157601f01601f191660200190565b9291926141328261410a565b916141406040519384614054565b829481845281830111610392578281602093845f960137010152565b9080601f83011215610392578160206140f893359101614126565b60031990602082820112610392576004359167ffffffffffffffff8311610392578260e0920301126103925760040190565b9081518082526020808093019301915f5b8281106141c8575050505090565b8351855293810193928101926001016141ba565b9060a0600319830112610392576004356001600160a01b0381168103610392579167ffffffffffffffff90602435828111610392578161421e916004016140dd565b926044359260643580151581036103925792608435918211610392576140f89160040161415c565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6142816140f894926060835260608301906141a9565b9260208201526040818403910152614246565b6080600319820112610392576001600160a01b03906004358281168103610392579260243592604435908116810361039257916064359067ffffffffffffffff8211610392576140f89160040161415c565b60c0600319820112610392576001600160a01b0391600435838116810361039257926024358181168103610392579260443582811681036103925792606435926084359081168103610392579160a4359067ffffffffffffffff8211610392576140f89160040161415c565b9181601f840112156103925782359167ffffffffffffffff8311610392576020808501948460051b01011161039257565b9181601f840112156103925782359167ffffffffffffffff8311610392576020838186019501011161039257565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b8483106143e65750505050505090565b9091929394958480614422837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528a51614246565b98019301930191949392906143d6565b9060a0600319830112610392576001600160a01b03600435818116810361039257926024358281168103610392579260443592606435908116810361039257916084359067ffffffffffffffff8211610392576140f89160040161415c565b60a0600319820112610392576004356001600160a01b038116810361039257916024359167ffffffffffffffff9160443583811161039257826144d6916004016140dd565b9260643580151581036103925792608435918211610392576140f89160040161415c565b60031990602082820112610392576004359167ffffffffffffffff83116103925782610140920301126103925760040190565b610100600319820112610392576001600160a01b0390600435828116810361039257926024358381168103610392579260443590811681036103925791606435916084359160a4359160c4358015158103610392579160e4359067ffffffffffffffff8211610392576145a291600401614383565b9091565b916145c3906140f8949284526060602085015260608401906141a9565b916040818403910152614246565b60c0600319820112610392576001600160a01b0390600435828116810361039257926024359260443590811681036103925791606435916084358015158103610392579160a4359067ffffffffffffffff8211610392576140f89160040161415c565b9081518082526020808093019301915f5b828110614653575050505090565b835185529381019392810192600101614645565b81601f820112156103925780519061467e8261410a565b9261468c6040519485614054565b8284526020838301011161039257815f9260208093018386015e8301015290565b9060208282031261039257815167ffffffffffffffff8111610392576140f89201614667565b356001600160a01b03811681036103925790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610392570180359067ffffffffffffffff821161039257602001918160051b3603831361039257565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610392570180359067ffffffffffffffff82116103925760200191813603831361039257565b601f8260209493601f1993818652868601375f8582860101520116010190565b91908110156147bc5760051b0190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b3580151581036103925790565b90926140f894936080936001600160a01b038092168452166020830152604082015281606082015201906141a9565b9080601f830112156103925781519060209161484081614077565b9361484e6040519586614054565b81855260208086019260051b82010192831161039257602001905b828210614877575050505090565b81518152908301908301614869565b9060208282031261039257815167ffffffffffffffff8111610392576140f89201614825565b60058210156148b85752565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b9060058210156148b85752565b906140f891602081526001600160a01b03808351166020830152602083015116604082015260c0614933604084015160e06060850152610100840190614634565b9260608101516080840152614950608082015160a08501906148e5565b60a081015115158284015201519060e0601f1982850301910152614246565b90916060828403126103925781519167ffffffffffffffff92838111610392578461499b918301614825565b936020820151936040830151908111610392576140f89201614667565b60209081818403126103925780519067ffffffffffffffff821161039257019180601f840112156103925782516149ee81614077565b936149fc6040519586614054565b818552838086019260051b820101928311610392578301905b828210614a23575050505090565b81516001600160a01b0381168103610392578152908301908301614a15565b90614a4c82614077565b614a596040519182614054565b828152601f19614a698294614077565b0190602036910137565b60048210156148b85752565b9060048210156148b85752565b906140f891602081526001600160a01b03808351166020830152602083015116604082015260c0614acd604084015160e06060850152610100840190614634565b9260608101516080840152614950608082015160a0850190614a7f565b916060838303126103925782519260208101519267ffffffffffffffff938481116103925781614b1b918401614825565b936040830151908111610392576140f89201614667565b9060028210156148b85752565b6101606140f892602083526001600160a01b03808251166020850152614b6d60208301516040860190614b32565b80604083015116606085015280606083015116608085015260808201511660a084015260a081015160c084015260c081015160e084015260e081015161010090818501528101519061012091151582850152015191610140808201520190614246565b80518210156147bc5760209160051b010190565b906140f891602081526001600160a01b03808351166020830152602083015116604082015260a0614c24604084015160c0606085015260e0840190614634565b9260608101516080840152614c406080820151838501906148e5565b01519060c0601f1982850301910152614246565b906140f891602081526001600160a01b0380835116602083015260208301511660408201526040820151606082015260a0614c9e606084015160c0608085015260e0840190614634565b92614c40608082015183850190614a7f565b9190614cbb33614e05565b907f000000000000000000000000000000000000000000000000000000000000000093845c614dc6576001906001865d614cf483614077565b92614d026040519485614054565b808452601f19614d1182614077565b015f5b818110614db55750505f5b818110614d6c5750505050905f614d6192945d7f0000000000000000000000000000000000000000000000000000000000000000805c91614d63575b5061510c565b565b5f905d5f614d5b565b80614d995f80614d816102d08996888a614dee565b602081519101305af4614d9261514f565b90306156e8565b614da38288614bd0565b52614dae8187614bd0565b5001614d1f565b806060602080938901015201614d14565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b908210156147bc576145a29160051b81019061473b565b905f917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03815c1615614e3d575050565b909192505d600190565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c614dc6576001905d565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163303614ea657565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b6001600160a01b0390818111614ee6571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f5260a060045260245260445ffd5b9190918147106150e4576001600160a01b0380911692833b15610392576040918251917fd0e30db00000000000000000000000000000000000000000000000000000000083525f925f81600481898b5af180156150da576150c7575b501692825194602095868101907fa9059cbb000000000000000000000000000000000000000000000000000000008252866024820152836044820152604481526080810181811067ffffffffffffffff821117610f1157865251614fe7918591829182865af1614fe061514f565b90836156e8565b80518781151591826150a2575b5050905061507757906044869284865197889485937f15afd409000000000000000000000000000000000000000000000000000000008552600485015260248401525af191821561506d575050615049575050565b813d8311615066575b61505c8183614054565b8101031261039257565b503d615052565b51903d90823e3d90fd5b7f5274afe7000000000000000000000000000000000000000000000000000000008352600452602482fd5b83809293500103126150c3578601518015908115036150c35780875f614ff4565b8380fd5b6150d2919350614007565b5f915f614f72565b85513d5f823e3d90fd5b7fa01a9df6000000000000000000000000000000000000000000000000000000005f5260045ffd5b47801561514b577f00000000000000000000000000000000000000000000000000000000000000005c61514b576001600160a01b03614d61921661566c565b5050565b3d15615179573d906151608261410a565b9161516e6040519384614054565b82523d5f602084013e565b606090565b359065ffffffffffff8216820361039257565b916044929391936001600160a01b03604094859282808551998a9586947fc9c1661b0000000000000000000000000000000000000000000000000000000086521660048501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa938415615261575f935f9561522a575b50506152276152208594614a42565b9485614bd0565b52565b809295508194503d831161525a575b6152438183614054565b810103126103925760208251920151925f80615211565b503d615239565b83513d5f823e3d90fd5b60e0810135421161541b576001600160a01b0360208201359160028310156103925760409261529b8285016146d3565b928060609485938486016152ae906146d3565b956152bb608082016146d3565b90846152cb61012083018361473b565b91908c51956152d987613feb565b8652816020870197168752818d87019b168b52818a870195168552608086019260a0850135845260a087019460c001358552369061531692614126565b9360c08601948552818d519b8c9a8b998a997f2bfb780c000000000000000000000000000000000000000000000000000000008b5260048b016020905260248b0190519061536391614b32565b5116604489015251166064870152511660848501525160a48401525160c48301525160e4820160e09052610104820161539b91614246565b03917f0000000000000000000000000000000000000000000000000000000000000000165a905f91f1908115615261575f935f935f936153de575b505050909192565b92509250809350813d8311615414575b6153f88183614054565b81010312610392578151602083015191909201515f80806153d6565b503d6153ee565b7fe08b8af0000000000000000000000000000000000000000000000000000000005f5260045ffd5b92821561556f578061553a575b156154a15750614d61917f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000615575565b906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b15610392576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03938416600482015293909216602484015260448301525f908290606490829084905af18015610387576155315750565b614d6190614007565b506001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001690821614615450565b50505050565b9392916001600160a01b03809216803b15610392576040517fae6393290000000000000000000000000000000000000000000000000000000081525f816064818388819c16968760048401523060248401528a60448401525af1801561038757615659575b508086913b156156555781906024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083528960048401525af1801561564a57615632575b50614d619394501661566c565b61563c8691614007565b6156465784615625565b8480fd5b6040513d88823e3d90fd5b5080fd5b615664919650614007565b5f945f6155da565b8147106156bc575f8080936001600160a01b038294165af161568c61514f565b501561569457565b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fcd786059000000000000000000000000000000000000000000000000000000005f523060045260245ffd5b906156fd575080511561569457805190602001fd5b81511580615743575b61570e575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561570656fea264697066735822122057f622c4f53a759f8550565d430c6f6c937500a4b88dcfafc92ca53c120c2d2564736f6c634300081b0033","opcodes":"PUSH2 0x120 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x465 JUMPI PUSH2 0x5CDC DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x1F DUP3 DUP6 PUSH2 0x484 JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SWAP2 PUSH1 0x80 DUP3 DUP5 SUB SLT PUSH2 0x465 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP3 AND DUP3 SUB PUSH2 0x465 JUMPI PUSH1 0x20 SWAP1 DUP2 DUP2 ADD MLOAD SWAP3 DUP6 DUP5 AND DUP5 SUB PUSH2 0x465 JUMPI DUP5 DUP3 ADD MLOAD SWAP6 DUP7 AND DUP7 SUB PUSH2 0x465 JUMPI PUSH1 0x60 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 DUP4 DUP3 GT PUSH2 0x465 JUMPI ADD SWAP1 PUSH1 0x1F SWAP1 DUP9 DUP3 DUP5 ADD SLT ISZERO PUSH2 0x465 JUMPI DUP3 MLOAD DUP5 DUP2 GT PUSH2 0x451 JUMPI PUSH1 0x1F NOT SWAP4 DUP9 MLOAD SWAP11 PUSH2 0xA4 DUP9 DUP8 DUP8 DUP7 ADD AND ADD DUP14 PUSH2 0x484 JUMP JUMPDEST DUP3 DUP13 MSTORE DUP8 DUP4 DUP4 ADD ADD GT PUSH2 0x465 JUMPI DUP2 PUSH0 SWAP3 DUP13 DUP10 DUP1 DUP1 SWAP6 ADD SWAP2 ADD MCOPY DUP12 ADD ADD MSTORE PUSH2 0x109 DUP8 MLOAD PUSH2 0xCF DUP2 PUSH2 0x469 JUMP JUMPDEST PUSH1 0xB DUP2 MSTORE PUSH11 0x14D95B99195C91DD585C99 PUSH1 0xAA SHL DUP8 DUP3 ADD MSTORE DUP9 MLOAD SWAP1 PUSH2 0xF2 DUP3 PUSH2 0x469 JUMP JUMPDEST PUSH1 0x6 DUP3 MSTORE PUSH6 0x39B2B73232B9 PUSH1 0xD1 SHL DUP9 DUP4 ADD MSTORE PUSH2 0x4A7 JUMP JUMPDEST PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE DUP8 MLOAD SWAP3 DUP4 GT PUSH2 0x451 JUMPI PUSH0 SLOAD SWAP2 PUSH1 0x1 SWAP3 DUP4 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x447 JUMPI JUMPDEST DUP7 DUP3 LT EQ PUSH2 0x433 JUMPI DUP3 DUP2 GT PUSH2 0x3F0 JUMPI JUMPDEST POP DUP5 SWAP2 DUP5 GT PUSH1 0x1 EQ PUSH2 0x391 JUMPI POP DUP3 SWAP2 DUP3 SWAP2 PUSH2 0x1BB SWAP7 SWAP8 SWAP9 SWAP10 PUSH0 SWAP5 PUSH2 0x386 JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE JUMPDEST DUP4 MLOAD PUSH2 0x176 DUP2 PUSH2 0x469 JUMP JUMPDEST PUSH1 0xC DUP2 MSTORE PUSH12 0x2937BABA32B921B7B6B6B7B7 PUSH1 0xA1 SHL DUP3 DUP3 ADD MSTORE PUSH17 0x1A5CD4995D1D5C9B915D1A131BD8DAD959 PUSH1 0x7A SHL DUP6 MLOAD SWAP3 PUSH2 0x1AF DUP5 PUSH2 0x469 JUMP JUMPDEST PUSH1 0x11 DUP5 MSTORE DUP4 ADD MSTORE PUSH2 0x4A7 JUMP JUMPDEST PUSH1 0xC0 MSTORE PUSH1 0xE0 MSTORE PUSH2 0x100 SWAP2 DUP3 MSTORE MLOAD PUSH2 0x5782 SWAP2 DUP3 PUSH2 0x55A DUP4 CODECOPY PUSH1 0x80 MLOAD DUP3 DUP2 DUP2 PUSH2 0x4ED ADD MSTORE DUP2 DUP2 PUSH2 0x99E ADD MSTORE DUP2 DUP2 PUSH2 0xBD2 ADD MSTORE DUP2 DUP2 PUSH2 0x111B ADD MSTORE DUP2 DUP2 PUSH2 0x20AB ADD MSTORE DUP2 DUP2 PUSH2 0x291B ADD MSTORE DUP2 DUP2 PUSH2 0x4D34 ADD MSTORE PUSH2 0x4E0A ADD MSTORE PUSH1 0xA0 MLOAD DUP3 DUP2 DUP2 PUSH2 0x315 ADD MSTORE DUP2 DUP2 PUSH2 0x48C ADD MSTORE DUP2 DUP2 PUSH2 0x61A ADD MSTORE DUP2 DUP2 PUSH2 0x7AA ADD MSTORE DUP2 DUP2 PUSH2 0x93E ADD MSTORE DUP2 DUP2 PUSH2 0xB9B ADD MSTORE DUP2 DUP2 PUSH2 0xD3F ADD MSTORE DUP2 DUP2 PUSH2 0xE91 ADD MSTORE DUP2 DUP2 PUSH2 0xFA9 ADD MSTORE DUP2 DUP2 PUSH2 0x12B1 ADD MSTORE DUP2 DUP2 PUSH2 0x138F ADD MSTORE DUP2 DUP2 PUSH2 0x1676 ADD MSTORE DUP2 DUP2 PUSH2 0x1AD8 ADD MSTORE DUP2 DUP2 PUSH2 0x1C18 ADD MSTORE DUP2 DUP2 PUSH2 0x1CC1 ADD MSTORE DUP2 DUP2 PUSH2 0x1DE0 ADD MSTORE DUP2 DUP2 PUSH2 0x1F89 ADD MSTORE DUP2 DUP2 PUSH2 0x2104 ADD MSTORE DUP2 DUP2 PUSH2 0x275E ADD MSTORE DUP2 DUP2 PUSH2 0x28BB ADD MSTORE DUP2 DUP2 PUSH2 0x2A6A ADD MSTORE DUP2 DUP2 PUSH2 0x2B37 ADD MSTORE DUP2 DUP2 PUSH2 0x2D02 ADD MSTORE DUP2 DUP2 PUSH2 0x3644 ADD MSTORE DUP2 DUP2 PUSH2 0x38C1 ADD MSTORE DUP2 DUP2 PUSH2 0x3945 ADD MSTORE DUP2 DUP2 PUSH2 0x3F06 ADD MSTORE DUP2 DUP2 PUSH2 0x4E7E ADD MSTORE DUP2 DUP2 PUSH2 0x51DF ADD MSTORE DUP2 DUP2 PUSH2 0x539F ADD MSTORE DUP2 DUP2 PUSH2 0x545C ADD MSTORE PUSH2 0x54AC ADD MSTORE PUSH1 0xC0 MLOAD DUP3 DUP2 DUP2 PUSH2 0x4CBE ADD MSTORE PUSH2 0x5115 ADD MSTORE PUSH1 0xE0 MLOAD DUP3 DUP2 DUP2 PUSH1 0x22 ADD MSTORE DUP2 DUP2 PUSH2 0x180E ADD MSTORE DUP2 DUP2 PUSH2 0x18BE ADD MSTORE DUP2 DUP2 PUSH2 0x1CE2 ADD MSTORE DUP2 DUP2 PUSH2 0x1D36 ADD MSTORE DUP2 DUP2 PUSH2 0x1F2B ADD MSTORE DUP2 DUP2 PUSH2 0x22AA ADD MSTORE DUP2 DUP2 PUSH2 0x2426 ADD MSTORE DUP2 DUP2 PUSH2 0x3602 ADD MSTORE DUP2 DUP2 PUSH2 0x3AF5 ADD MSTORE DUP2 DUP2 PUSH2 0x3C75 ADD MSTORE DUP2 DUP2 PUSH2 0x547D ADD MSTORE PUSH2 0x5546 ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0x1DBC ADD MSTORE DUP2 DUP2 PUSH2 0x22D8 ADD MSTORE DUP2 DUP2 PUSH2 0x2E93 ADD MSTORE DUP2 DUP2 PUSH2 0x3059 ADD MSTORE DUP2 DUP2 PUSH2 0x315B ADD MSTORE PUSH2 0x3B22 ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0x15A JUMP JUMPDEST DUP4 SWAP3 SWAP4 AND SWAP1 PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP2 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x3DB JUMPI POP SWAP9 DUP4 PUSH2 0x1BB SWAP8 SWAP9 SWAP10 SWAP11 LT PUSH2 0x3C3 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH2 0x16B JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x3B6 JUMP JUMPDEST DUP11 DUP4 ADD MLOAD DUP5 SSTORE SWAP3 DUP6 ADD SWAP3 SWAP2 DUP7 ADD SWAP2 DUP7 ADD PUSH2 0x39F JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP6 PUSH0 KECCAK256 DUP4 DUP1 DUP8 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP9 DUP9 LT PUSH2 0x42A JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP5 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x41F JUMPI POP POP PUSH2 0x13B JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP5 SWAP1 PUSH2 0x411 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x408 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x12B JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0x451 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x451 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH2 0x514 PUSH1 0x3A PUSH1 0x20 SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP2 DUP2 DUP1 DUP5 ADD SWAP8 PUSH32 0x62616C616E6365722D6C6162732E76332E73746F726167652E00000000000000 DUP10 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 ADD PUSH1 0x39 DUP7 ADD MCOPY DUP4 ADD SWAP1 PUSH1 0x17 PUSH1 0xF9 SHL PUSH1 0x39 DUP4 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 SWAP2 ADD DUP6 DUP4 ADD MCOPY ADD PUSH0 DUP4 DUP3 ADD MSTORE SUB PUSH1 0x1A DUP2 ADD DUP5 MSTORE ADD DUP3 PUSH2 0x484 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x545 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP3 MSTORE PUSH2 0x53A DUP3 PUSH2 0x469 JUMP JUMPDEST SWAP1 MLOAD SWAP1 KECCAK256 PUSH1 0xFF NOT AND SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x72 JUMPI JUMPDEST CALLDATASIZE ISZERO PUSH2 0x18 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x4A JUMPI STOP JUMPDEST PUSH32 0x540DDF600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x26B3D95 EQ PUSH2 0x3D25 JUMPI DUP1 PUSH4 0x86FAD66 EQ PUSH2 0x391D JUMPI DUP1 PUSH4 0x8C04793 EQ PUSH2 0x37FF JUMPI DUP1 PUSH4 0xCA078EC EQ PUSH2 0x3767 JUMPI DUP1 PUSH4 0xF710888 EQ PUSH2 0x3626 JUMPI DUP1 PUSH4 0x107C279F EQ PUSH2 0x35E3 JUMPI DUP1 PUSH4 0x175D4408 EQ PUSH2 0x3504 JUMPI DUP1 PUSH4 0x19C6989F EQ PUSH2 0x2EB7 JUMPI DUP1 PUSH4 0x1BBF2E23 EQ PUSH2 0x2E74 JUMPI DUP1 PUSH4 0x1D56798D EQ PUSH2 0x2CD9 JUMPI DUP1 PUSH4 0x23B39241 EQ PUSH2 0x2AD7 JUMPI DUP1 PUSH4 0x3EBC54E5 EQ PUSH2 0x295A JUMPI DUP1 PUSH4 0x452DB952 EQ PUSH2 0x27D6 JUMPI DUP1 PUSH4 0x51682750 EQ PUSH2 0x26C3 JUMPI DUP1 PUSH4 0x53D0BB98 EQ PUSH2 0x260E JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x24D1 JUMPI DUP1 PUSH4 0x5B343791 EQ PUSH2 0x20DC JUMPI DUP1 PUSH4 0x5E01EB5A EQ PUSH2 0x2097 JUMPI DUP1 PUSH4 0x5F9815FF EQ PUSH2 0x1F54 JUMPI DUP1 PUSH4 0x68A24FE0 EQ PUSH2 0x1C59 JUMPI DUP1 PUSH4 0x724DBA33 EQ PUSH2 0x1B40 JUMPI DUP1 PUSH4 0x72657D17 EQ PUSH2 0x19F5 JUMPI DUP1 PUSH4 0x750283BC EQ PUSH2 0x1978 JUMPI DUP1 PUSH4 0x7B03C7BA EQ PUSH2 0x1648 JUMPI DUP1 PUSH4 0x82BF2B24 EQ PUSH2 0x1574 JUMPI DUP1 PUSH4 0x82CD54FB EQ PUSH2 0x132C JUMPI DUP1 PUSH4 0x94E86EF8 EQ PUSH2 0x11A1 JUMPI DUP1 PUSH4 0x9DE90518 EQ PUSH2 0xF82 JUMPI DUP1 PUSH4 0xAC9650D8 EQ PUSH2 0xF3E JUMPI DUP1 PUSH4 0xB037ED36 EQ PUSH2 0xDAD JUMPI DUP1 PUSH4 0xB24BD571 EQ PUSH2 0xC63 JUMPI DUP1 PUSH4 0xBE5AE841 EQ PUSH2 0xC0E JUMPI DUP1 PUSH4 0xBF6EE3FD EQ PUSH2 0xA75 JUMPI DUP1 PUSH4 0xC08BC851 EQ PUSH2 0x9DD JUMPI DUP1 PUSH4 0xC330C7BE EQ PUSH2 0x816 JUMPI DUP1 PUSH4 0xDA001F7D EQ PUSH2 0x685 JUMPI DUP1 PUSH4 0xE7326DEF EQ PUSH2 0x534 JUMPI DUP1 PUSH4 0xECB2182C EQ PUSH2 0x396 JUMPI PUSH4 0xEFD85F14 SUB PUSH2 0xE JUMPI CALLVALUE PUSH2 0x392 JUMPI PUSH2 0x231 CALLDATASIZE PUSH2 0x4177 JUMP JUMPDEST PUSH2 0x239 PUSH2 0x4E74 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH2 0x24E PUSH1 0x20 DUP3 ADD PUSH2 0x46D3 JUMP JUMPDEST PUSH2 0x257 DUP3 PUSH2 0x46D3 JUMP JUMPDEST SWAP3 PUSH2 0x265 PUSH1 0x40 DUP5 ADD DUP5 PUSH2 0x46E7 JUMP JUMPDEST SWAP1 SWAP4 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP4 PUSH1 0x5 DUP6 LT ISZERO PUSH2 0x392 JUMPI DUP4 PUSH2 0x2D0 PUSH2 0x311 SWAP7 PUSH1 0x60 DUP6 PUSH2 0x2BB PUSH0 SWAP13 SWAP12 PUSH2 0x2AB SWAP10 DUP8 DUP16 SWAP15 PUSH2 0x29E PUSH1 0xC0 PUSH2 0x2D7 SWAP14 ADD DUP8 PUSH2 0x473B JUMP JUMPDEST SWAP11 SWAP1 SWAP12 PUSH1 0x40 MLOAD SWAP15 DUP16 PUSH2 0x4038 JUMP JUMPDEST AND DUP14 MSTORE AND PUSH1 0x20 DUP13 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x408F JUMP JUMPDEST PUSH1 0x40 DUP10 ADD MSTORE ADD CALLDATALOAD PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0x80 DUP7 ADD PUSH2 0x48AC JUMP JUMPDEST CALLDATASIZE SWAP2 PUSH2 0x4126 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x4AF29EC400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x4BE4 JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH0 SWAP2 PUSH2 0x35D JUMPI JUMPDEST POP PUSH2 0x359 SWAP1 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x426B JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST SWAP1 POP PUSH2 0x359 SWAP3 POP PUSH2 0x380 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x378 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x496F JUMP JUMPDEST SWAP1 SWAP3 PUSH2 0x348 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x44C PUSH2 0x3C5 PUSH0 PUSH2 0x43E DUP2 PUSH2 0x488 PUSH2 0x3AD CALLDATASIZE PUSH2 0x45D1 JUMP JUMPDEST SWAP8 SWAP4 SWAP11 SWAP3 SWAP10 SWAP1 SWAP5 SWAP2 PUSH2 0x3BE CALLER PUSH2 0x4E05 JUMP JUMPDEST SWAP11 DUP4 PUSH2 0x5191 JUMP JUMPDEST SWAP8 SWAP1 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP12 DUP13 SWAP7 PUSH1 0x40 MLOAD SWAP5 PUSH2 0x3E0 DUP7 PUSH2 0x3FEB JUMP JUMPDEST CALLER DUP7 MSTORE PUSH1 0x20 SWAP15 DUP16 SWAP2 AND SWAP1 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x7B03C7BA00000000000000000000000000000000000000000000000000000000 DUP13 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x4A8C JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x4054 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP12 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4246 JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH2 0x4DB SWAP3 PUSH2 0x4D3 SWAP2 PUSH0 SWAP2 PUSH2 0x512 JUMPI JUMPDEST POP DUP6 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x4AEA JUMP JUMPDEST POP SWAP1 POP PUSH2 0x4BD0 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x4EA JUMPI JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH0 PUSH32 0x0 TSTORE PUSH2 0x4E2 JUMP JUMPDEST PUSH2 0x52E SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x526 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x46AD JUMP JUMPDEST DUP7 PUSH2 0x4C4 JUMP JUMPDEST PUSH2 0x43E PUSH2 0x5DA PUSH0 DUP1 PUSH2 0x616 PUSH2 0x565 PUSH2 0x54B CALLDATASIZE PUSH2 0x45D1 JUMP JUMPDEST SWAP2 PUSH2 0x55E SWAP12 SWAP6 SWAP12 SWAP11 SWAP5 SWAP7 SWAP2 SWAP4 SWAP11 CALLER PUSH2 0x4E05 JUMP JUMPDEST SWAP11 DUP13 PUSH2 0x5191 JUMP JUMPDEST POP SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x57D DUP6 PUSH2 0x3FEB JUMP JUMPDEST CALLER DUP6 MSTORE DUP8 PUSH1 0x20 SWAP14 AND DUP14 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x2 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x7B03C7BA00000000000000000000000000000000000000000000000000000000 DUP12 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x4A8C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP11 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4246 JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x387 JUMPI PUSH2 0x65C SWAP2 PUSH0 SWAP2 PUSH2 0x66B JUMPI JUMPDEST POP DUP4 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x4AEA JUMP JUMPDEST POP POP SWAP1 PUSH2 0x4EA JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x67F SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x526 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP5 PUSH2 0x64D JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH2 0x69E PUSH2 0x3F7F JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x392 JUMPI PUSH2 0x6BF SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x40DD JUMP JUMPDEST SWAP1 PUSH2 0x6C8 PUSH2 0x3FC1 JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x392 JUMPI PUSH2 0x7A6 PUSH0 SWAP3 SWAP2 PUSH2 0x43E PUSH2 0x76A PUSH2 0x6F6 PUSH2 0x6F0 DUP8 SWAP7 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x415C JUMP JUMPDEST SWAP4 PUSH2 0x4E05 JUMP JUMPDEST SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x70D DUP4 PUSH2 0x3FEB JUMP JUMPDEST ADDRESS DUP4 MSTORE DUP6 PUSH1 0x20 SWAP12 AND DUP12 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE DUP7 PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xEFD85F1400000000000000000000000000000000000000000000000000000000 DUP12 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x48F2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP11 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4246 JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x387 JUMPI PUSH2 0x7EC SWAP2 PUSH0 SWAP2 PUSH2 0x7FC JUMPI JUMPDEST POP DUP4 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x496F JUMP JUMPDEST POP SWAP2 SWAP1 POP PUSH2 0x4EA JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x810 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x526 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP5 PUSH2 0x7DD JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH2 0x82F PUSH2 0x3F7F JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x392 JUMPI PUSH2 0x850 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x40DD JUMP JUMPDEST SWAP2 PUSH2 0x859 PUSH2 0x3F95 JUMP JUMPDEST SWAP2 PUSH1 0x84 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x392 JUMPI PUSH0 SWAP4 PUSH2 0x43E PUSH2 0x8FD DUP7 SWAP5 PUSH2 0x888 PUSH2 0x882 PUSH2 0x93A SWAP7 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x415C JUMP JUMPDEST SWAP8 PUSH2 0x4E05 JUMP JUMPDEST SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x8A0 DUP6 PUSH2 0x3FEB JUMP JUMPDEST ADDRESS DUP6 MSTORE AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x3 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xB24BD57100000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x4A8C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4246 JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH2 0x359 SWAP3 PUSH2 0x986 SWAP2 PUSH0 SWAP2 PUSH2 0x9C3 JUMPI JUMPDEST POP PUSH1 0x20 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x4AEA JUMP JUMPDEST SWAP1 SWAP4 SWAP2 SWAP3 PUSH2 0x99B JUMPI JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x45A6 JUMP JUMPDEST PUSH0 PUSH32 0x0 TSTORE PUSH2 0x98F JUMP JUMPDEST PUSH2 0x9D7 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x526 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP5 PUSH2 0x976 JUMP JUMPDEST PUSH2 0x43E PUSH2 0x5DA PUSH0 DUP1 PUSH2 0x7A6 PUSH2 0x9F1 CALLDATASIZE PUSH2 0x41DC JUMP JUMPDEST PUSH2 0xA01 SWAP10 SWAP4 SWAP2 SWAP9 SWAP3 SWAP5 SWAP10 CALLER PUSH2 0x4E05 JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 PUSH1 0x40 MLOAD SWAP4 PUSH2 0xA18 DUP6 PUSH2 0x3FEB JUMP JUMPDEST CALLER DUP6 MSTORE DUP8 PUSH1 0x20 SWAP14 AND DUP14 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x5B34379100000000000000000000000000000000000000000000000000000000 DUP12 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x48F2 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH2 0xA89 PUSH2 0x3F7F JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x24 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x392 JUMPI PUSH2 0xAAB SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x40DD JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP3 DUP4 ISZERO ISZERO DUP1 SWAP5 SUB PUSH2 0x392 JUMPI PUSH1 0x64 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x392 JUMPI PUSH0 SWAP3 PUSH2 0x43E PUSH2 0xB5A DUP6 SWAP5 PUSH2 0xADF PUSH2 0xB97 SWAP6 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x415C JUMP JUMPDEST PUSH2 0xAE8 CALLER PUSH2 0x4E05 JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 PUSH1 0x40 MLOAD SWAP5 PUSH2 0xB00 DUP7 PUSH2 0x3FEB JUMP JUMPDEST CALLER DUP7 MSTORE AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD MSTORE DUP8 PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x3 PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x5B34379100000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x48F2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4246 JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x387 JUMPI PUSH2 0xBF4 JUMPI JUMPDEST POP PUSH2 0xBCF JUMPI STOP JUMPDEST PUSH0 PUSH32 0x0 TSTORE STOP JUMPDEST PUSH2 0xC07 SWAP1 RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x526 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST POP DUP2 PUSH2 0xBC8 JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH1 0x20 PUSH2 0xC36 PUSH2 0xC21 CALLDATASIZE PUSH2 0x44FA JUMP JUMPDEST PUSH2 0xC29 PUSH2 0x4E47 JUMP JUMPDEST PUSH2 0xC31 PUSH2 0x4E74 JUMP JUMPDEST PUSH2 0x526B JUMP JUMPDEST POP POP PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH2 0xC71 CALLDATASIZE PUSH2 0x4177 JUMP JUMPDEST PUSH2 0xC79 PUSH2 0x4E74 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xC8D PUSH1 0x20 DUP4 ADD PUSH2 0x46D3 JUMP JUMPDEST PUSH2 0xC96 DUP4 PUSH2 0x46D3 JUMP JUMPDEST SWAP2 PUSH2 0xCA4 PUSH1 0x40 DUP6 ADD DUP6 PUSH2 0x46E7 JUMP JUMPDEST SWAP5 SWAP1 PUSH1 0x80 DUP3 ADD CALLDATALOAD SWAP4 PUSH1 0x4 DUP6 LT ISZERO PUSH2 0x392 JUMPI DUP4 PUSH2 0x2D0 PUSH2 0xD3B SWAP7 PUSH2 0xCF3 PUSH2 0xD01 SWAP6 PUSH0 SWAP12 PUSH1 0x60 DUP10 DUP8 DUP16 SWAP15 PUSH2 0x29E PUSH1 0xC0 PUSH2 0xCDC SWAP15 ADD DUP5 PUSH2 0x473B JUMP JUMPDEST AND DUP14 MSTORE AND PUSH1 0x20 DUP13 ADD MSTORE ADD CALLDATALOAD PUSH1 0x40 DUP11 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x408F JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0x80 DUP7 ADD PUSH2 0x4A73 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x2145789700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x4C54 JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH0 SWAP2 PUSH2 0xD83 JUMPI JUMPDEST POP PUSH2 0x359 SWAP1 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x45A6 JUMP JUMPDEST SWAP1 POP PUSH2 0x359 SWAP3 POP PUSH2 0xDA6 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xD9E DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x4AEA JUMP JUMPDEST SWAP1 SWAP3 PUSH2 0xD72 JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH2 0xDC6 PUSH2 0x3F7F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP1 DUP1 PUSH1 0x20 SWAP4 PUSH32 0x5F9815FF00000000000000000000000000000000000000000000000000000000 DUP6 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x64 DUP3 MSTORE PUSH1 0xA0 DUP3 ADD SWAP1 DUP3 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0xF11 JUMPI DUP2 PUSH0 SWAP2 DUP2 PUSH1 0x40 MSTORE PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP6 PUSH1 0xA4 DUP7 ADD MSTORE DUP2 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 DUP8 PUSH2 0xE8C PUSH1 0xC4 DUP3 ADD DUP3 PUSH2 0x4246 JUMP JUMPDEST SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x387 JUMPI PUSH2 0xED5 SWAP3 PUSH0 SWAP3 PUSH2 0xEEA JUMPI JUMPDEST POP POP DUP3 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x4886 JUMP JUMPDEST SWAP1 PUSH2 0x359 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x41A9 JUMP JUMPDEST PUSH2 0xF0A SWAP3 POP PUSH1 0xA0 SWAP1 RETURNDATASIZE SWAP1 DUP2 PUSH0 DUP6 RETURNDATACOPY PUSH2 0xF02 DUP3 DUP6 PUSH2 0x4054 JUMP JUMPDEST ADD ADD SWAP1 PUSH2 0x46AD JUMP JUMPDEST DUP4 DUP1 PUSH2 0xEC5 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x392 JUMPI PUSH2 0xF76 PUSH2 0xF70 PUSH2 0x359 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4352 JUMP JUMPDEST SWAP1 PUSH2 0x4CB0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x43B1 JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH2 0xF9C PUSH2 0xF93 CALLDATASIZE PUSH2 0x4294 JUMP JUMPDEST SWAP3 SWAP2 SWAP4 SWAP1 PUSH2 0x4E05 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH32 0x0 AND SWAP2 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND SWAP3 DUP4 PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP2 PUSH2 0x117F JUMPI JUMPDEST POP MLOAD SWAP5 PUSH2 0x101B DUP7 PUSH2 0x4A42 JUMP JUMPDEST SWAP6 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x115A JUMPI POP POP PUSH0 SWAP3 PUSH2 0x43E PUSH2 0x109C DUP9 DUP7 SWAP6 PUSH2 0x10D8 SWAP6 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1043 DUP5 PUSH2 0x3FEB JUMP JUMPDEST ADDRESS DUP5 MSTORE PUSH1 0x20 SWAP11 DUP12 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE DUP7 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xEFD85F1400000000000000000000000000000000000000000000000000000000 DUP11 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x48F2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4246 JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x387 JUMPI PUSH2 0x10FC SWAP2 PUSH0 SWAP2 PUSH2 0x1140 JUMPI JUMPDEST POP DUP3 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x496F JUMP JUMPDEST POP POP SWAP2 PUSH2 0x1118 JUMPI JUMPDEST PUSH2 0x359 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x41A9 JUMP JUMPDEST PUSH0 PUSH32 0x0 TSTORE PUSH2 0x1104 JUMP JUMPDEST PUSH2 0x1154 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x526 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP5 PUSH2 0x10ED JUMP JUMPDEST DUP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1178 PUSH1 0x1 SWAP4 DUP12 PUSH2 0x4BD0 JUMP JUMPDEST MSTORE ADD PUSH2 0x101E JUMP JUMPDEST PUSH2 0x119B SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x1193 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x49B8 JUMP JUMPDEST DUP7 PUSH2 0x100F JUMP JUMPDEST PUSH2 0x11AA CALLDATASIZE PUSH2 0x452D JUMP JUMPDEST SWAP5 SWAP1 SWAP6 SWAP4 SWAP2 SWAP4 CALLER PUSH2 0x11BA SWAP1 PUSH2 0x4E05 JUMP JUMPDEST SWAP8 PUSH1 0x40 MLOAD SWAP10 PUSH2 0x11C8 DUP12 PUSH2 0x401B JUMP JUMPDEST CALLER DUP12 MSTORE PUSH1 0x20 DUP12 ADD PUSH1 0x1 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x40 DUP12 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 DUP11 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP10 ADD MSTORE PUSH1 0xA0 DUP9 ADD MSTORE PUSH1 0xC0 DUP8 ADD MSTORE PUSH1 0xE0 DUP7 ADD MSTORE ISZERO ISZERO PUSH2 0x100 DUP6 ADD MSTORE CALLDATASIZE SWAP1 PUSH2 0x121F SWAP3 PUSH2 0x4126 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE PUSH1 0x40 MLOAD PUSH32 0x68A24FE000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 PUSH2 0x125E SWAP1 PUSH1 0x24 DUP4 ADD PUSH2 0x4B3F JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE PUSH2 0x1270 SWAP1 DUP4 PUSH2 0x4054 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP3 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD PUSH1 0x20 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD PUSH2 0x12AD SWAP2 PUSH2 0x4246 JUMP JUMPDEST SUB DUP3 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 DUP2 GAS PUSH0 SWAP5 DUP6 SWAP2 CALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP3 PUSH2 0x1310 JUMPI JUMPDEST POP PUSH1 0x20 DUP3 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x392 JUMPI PUSH1 0x20 DUP1 SWAP3 ADD MLOAD SWAP1 PUSH2 0x4EA JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x1325 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x526 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST SWAP1 DUP3 PUSH2 0x12EF JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH2 0x1345 PUSH2 0x3F7F JUMP JUMPDEST PUSH2 0x134D PUSH2 0x3FAB JUMP JUMPDEST SWAP1 PUSH1 0x64 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x392 JUMPI PUSH2 0x1372 PUSH2 0x13E8 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x40DD JUMP JUMPDEST SWAP1 PUSH2 0x137B PUSH2 0x4E47 JUMP JUMPDEST PUSH2 0x1383 PUSH2 0x4E74 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 DUP2 PUSH32 0x0 AND SWAP4 PUSH1 0x40 MLOAD DUP1 SWAP7 DUP2 SWAP3 PUSH32 0xA07D604000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x44 CALLDATALOAD DUP11 DUP9 PUSH1 0x4 DUP7 ADD PUSH2 0x47F6 JUMP JUMPDEST SUB DUP2 DUP4 DUP8 GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP5 PUSH2 0x1550 JUMPI JUMPDEST POP DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP5 MSTORE AND PUSH1 0x4 DUP4 ADD MSTORE PUSH0 DUP3 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP3 PUSH2 0x1534 JUMPI JUMPDEST POP PUSH0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x14F0 JUMPI PUSH2 0x1457 DUP2 DUP7 PUSH2 0x4BD0 JUMP JUMPDEST MLOAD SWAP1 DUP2 PUSH2 0x1469 JUMPI JUMPDEST PUSH1 0x1 SWAP2 POP ADD PUSH2 0x1444 JUMP JUMPDEST DUP3 PUSH2 0x1474 DUP3 DUP7 PUSH2 0x4BD0 JUMP JUMPDEST MLOAD AND DUP6 EXTCODESIZE ISZERO PUSH2 0x392 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP9 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH0 DUP3 PUSH1 0x64 DUP2 DUP4 DUP10 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH1 0x1 SWAP3 PUSH2 0x14E1 JUMPI JUMPDEST POP PUSH2 0x145F JUMP JUMPDEST PUSH2 0x14EA SWAP1 PUSH2 0x4007 JUMP JUMPDEST DUP8 PUSH2 0x14DB JUMP JUMPDEST PUSH2 0x359 DUP6 PUSH2 0x14FD DUP9 PUSH2 0x510C JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x41A9 JUMP JUMPDEST PUSH2 0x1549 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x1193 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST SWAP1 DUP6 PUSH2 0x1441 JUMP JUMPDEST PUSH2 0x156D SWAP2 SWAP5 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x1565 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x4886 JUMP JUMPDEST SWAP3 DUP6 PUSH2 0x13FC JUMP JUMPDEST PUSH0 PUSH2 0x43E DUP2 PUSH2 0x93A PUSH2 0x160B PUSH2 0x1588 CALLDATASIZE PUSH2 0x4491 JUMP JUMPDEST SWAP1 PUSH2 0x1598 SWAP9 SWAP5 SWAP3 SWAP6 SWAP4 SWAP9 CALLER PUSH2 0x4E05 JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x15B0 DUP8 PUSH2 0x3FEB JUMP JUMPDEST CALLER DUP8 MSTORE AND PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x3 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x7B03C7BA00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x4A8C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4246 JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH2 0x1656 CALLDATASIZE PUSH2 0x4177 JUMP JUMPDEST PUSH2 0x165E PUSH2 0x4E47 JUMP JUMPDEST PUSH2 0x1666 PUSH2 0x4E74 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x0 SWAP1 DUP4 DUP3 AND PUSH2 0x16A2 DUP5 PUSH2 0x46D3 JUMP JUMPDEST SWAP5 PUSH2 0x16AC DUP4 PUSH2 0x46D3 JUMP JUMPDEST PUSH2 0x16B9 PUSH1 0x40 DUP6 ADD DUP6 PUSH2 0x46E7 JUMP JUMPDEST SWAP8 SWAP1 SWAP2 PUSH1 0x80 DUP7 ADD CALLDATALOAD SWAP1 PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x392 JUMPI DUP5 PUSH2 0x2D0 PUSH2 0x1715 SWAP4 PUSH2 0xCF3 PUSH0 SWAP8 PUSH2 0x174D SWAP15 PUSH2 0x16EA DUP14 PUSH1 0xC0 DUP2 ADD SWAP1 PUSH2 0x473B JUMP JUMPDEST SWAP7 SWAP1 SWAP8 DUP2 PUSH1 0x40 MLOAD SWAP12 PUSH2 0x16FB DUP14 PUSH2 0x4038 JUMP JUMPDEST AND DUP12 MSTORE AND PUSH1 0x20 DUP11 ADD MSTORE PUSH1 0x60 DUP14 ADD CALLDATALOAD PUSH1 0x40 DUP11 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x408F JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP9 DUP2 SWAP3 PUSH32 0x2145789700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x4C54 JUMP JUMPDEST SUB DUP2 DUP4 DUP7 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP6 PUSH0 SWAP8 PUSH0 SWAP4 PUSH2 0x194F JUMPI JUMPDEST POP PUSH2 0x176F SWAP1 PUSH2 0x46D3 JUMP JUMPDEST SWAP7 DUP2 PUSH1 0x40 MLOAD SWAP9 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP11 MSTORE AND PUSH1 0x4 DUP10 ADD MSTORE PUSH0 DUP9 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL SWAP8 DUP9 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP9 PUSH2 0x1933 JUMPI JUMPDEST POP SWAP2 SWAP6 PUSH1 0xA0 DUP6 ADD SWAP3 SWAP1 PUSH0 JUMPDEST DUP10 MLOAD DUP2 LT ISZERO PUSH2 0x18EE JUMPI PUSH2 0x17D2 DUP2 DUP5 PUSH2 0x4BD0 JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO PUSH2 0x18E5 JUMPI DUP5 PUSH2 0x17E5 DUP3 DUP14 PUSH2 0x4BD0 JUMP JUMPDEST MLOAD AND PUSH2 0x17F0 DUP8 PUSH2 0x47E9 JUMP JUMPDEST DUP1 PUSH2 0x18BA JUMPI JUMPDEST ISZERO PUSH2 0x1838 JUMPI POP PUSH2 0x1832 PUSH1 0x1 SWAP3 PUSH2 0x180B DUP11 PUSH2 0x46D3 JUMP JUMPDEST DUP12 PUSH32 0x0 PUSH2 0x5575 JUMP JUMPDEST ADD PUSH2 0x17BF JUMP JUMPDEST PUSH2 0x1841 DUP10 PUSH2 0x46D3 JUMP JUMPDEST DUP9 EXTCODESIZE ISZERO PUSH2 0x392 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH0 DUP3 PUSH1 0x64 DUP2 DUP4 DUP12 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH1 0x1 SWAP3 PUSH2 0x18AB JUMPI JUMPDEST POP PUSH2 0x1832 JUMP JUMPDEST PUSH2 0x18B4 SWAP1 PUSH2 0x4007 JUMP JUMPDEST DUP12 PUSH2 0x18A5 JUMP JUMPDEST POP DUP6 PUSH32 0x0 AND DUP2 EQ PUSH2 0x17F6 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x1832 JUMP JUMPDEST POP PUSH2 0x359 DUP9 PUSH2 0x1904 PUSH2 0x18FF DUP10 PUSH2 0x46D3 JUMP JUMPDEST PUSH2 0x510C JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x45A6 JUMP JUMPDEST PUSH2 0x1948 SWAP2 SWAP9 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x1193 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST SWAP7 DUP9 PUSH2 0x17B4 JUMP JUMPDEST SWAP1 SWAP3 POP PUSH2 0x196C SWAP2 SWAP8 POP PUSH2 0x176F SWAP7 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xD9E DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST SWAP8 SWAP2 SWAP7 SWAP1 SWAP8 SWAP3 SWAP1 PUSH2 0x1765 JUMP JUMPDEST PUSH2 0x1981 CALLDATASIZE PUSH2 0x452D JUMP JUMPDEST SWAP5 SWAP1 SWAP6 SWAP4 SWAP2 SWAP4 CALLER PUSH2 0x1991 SWAP1 PUSH2 0x4E05 JUMP JUMPDEST SWAP8 PUSH1 0x40 MLOAD SWAP10 PUSH2 0x199F DUP12 PUSH2 0x401B JUMP JUMPDEST CALLER DUP12 MSTORE PUSH1 0x20 DUP12 ADD PUSH0 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x40 DUP12 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 DUP11 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP10 ADD MSTORE PUSH1 0xA0 DUP9 ADD MSTORE PUSH1 0xC0 DUP8 ADD MSTORE PUSH1 0xE0 DUP7 ADD MSTORE ISZERO ISZERO PUSH2 0x100 DUP6 ADD MSTORE CALLDATASIZE SWAP1 PUSH2 0x121F SWAP3 PUSH2 0x4126 JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH2 0x1A09 PUSH2 0x3F7F JUMP JUMPDEST PUSH2 0x1A11 PUSH2 0x3FAB JUMP JUMPDEST PUSH2 0x1A19 PUSH2 0x40FB JUMP JUMPDEST PUSH1 0xA4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x392 JUMPI PUSH0 PUSH2 0x1AD4 PUSH2 0x1A3F DUP3 SWAP5 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x415C JUMP JUMPDEST SWAP3 PUSH2 0x43E PUSH2 0x44C PUSH2 0x1A5D PUSH2 0x1A52 CALLER PUSH2 0x4E05 JUMP JUMPDEST SWAP9 PUSH1 0x44 CALLDATALOAD SWAP1 DUP12 PUSH2 0x5191 JUMP JUMPDEST SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1A74 DUP5 PUSH2 0x3FEB JUMP JUMPDEST CALLER DUP5 MSTORE DUP7 PUSH1 0x20 SWAP14 AND DUP14 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x2 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x5B34379100000000000000000000000000000000000000000000000000000000 DUP13 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x48F2 JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH2 0x4DB SWAP3 PUSH2 0x1B1F SWAP2 PUSH0 SWAP2 PUSH2 0x1B26 JUMPI JUMPDEST POP DUP6 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x496F JUMP JUMPDEST POP POP PUSH2 0x4BD0 JUMP JUMPDEST PUSH2 0x1B3A SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x526 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP7 PUSH2 0x1B10 JUMP JUMPDEST PUSH2 0x43E PUSH2 0x1BD8 PUSH0 DUP1 PUSH2 0x1C14 PUSH2 0x1B54 CALLDATASIZE PUSH2 0x41DC JUMP JUMPDEST PUSH2 0x1B65 SWAP10 SWAP4 SWAP2 SWAP10 SWAP9 SWAP3 SWAP5 SWAP9 CALLER PUSH2 0x4E05 JUMP JUMPDEST SWAP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x1B7C DUP6 PUSH2 0x3FEB JUMP JUMPDEST CALLER DUP6 MSTORE DUP8 PUSH1 0x20 SWAP13 AND DUP13 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE DUP8 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x5B34379100000000000000000000000000000000000000000000000000000000 DUP11 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x48F2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4246 JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x387 JUMPI PUSH2 0x10FC SWAP2 PUSH0 SWAP2 PUSH2 0x1140 JUMPI POP DUP3 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x496F JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH2 0x1C67 CALLDATASIZE PUSH2 0x44FA JUMP JUMPDEST PUSH2 0x1C6F PUSH2 0x4E47 JUMP JUMPDEST PUSH2 0x1C77 PUSH2 0x4E74 JUMP JUMPDEST PUSH2 0x1C80 DUP2 PUSH2 0x526B JUMP JUMPDEST PUSH2 0x1C8E PUSH1 0x60 DUP6 SWAP4 SWAP6 ADD PUSH2 0x46D3 JUMP JUMPDEST SWAP1 PUSH2 0x1C98 DUP4 PUSH2 0x46D3 JUMP JUMPDEST SWAP5 PUSH2 0x100 DUP5 ADD SWAP6 PUSH2 0x1CA8 DUP8 PUSH2 0x47E9 JUMP JUMPDEST DUP1 PUSH2 0x1F1F JUMPI JUMPDEST ISZERO PUSH2 0x1D9C JUMPI POP SWAP5 PUSH2 0x1D2B SWAP2 PUSH2 0x1D06 PUSH1 0x20 SWAP8 PUSH32 0x0 PUSH32 0x0 PUSH2 0x4F16 JUMP JUMPDEST PUSH2 0x1D0F DUP6 PUSH2 0x46D3 JUMP JUMPDEST SWAP2 PUSH2 0x1D25 PUSH2 0x1D1F PUSH1 0x80 DUP9 ADD PUSH2 0x46D3 JUMP JUMPDEST SWAP2 PUSH2 0x47E9 JUMP JUMPDEST SWAP3 PUSH2 0x5443 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP2 AND EQ PUSH2 0x1D8A JUMPI JUMPDEST POP PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x18FF PUSH2 0x1D96 SWAP2 PUSH2 0x46D3 JUMP JUMPDEST DUP3 PUSH2 0x1D5E JUMP JUMPDEST DUP2 PUSH2 0x1DB0 JUMPI JUMPDEST POP POP PUSH1 0x20 SWAP5 PUSH2 0x1D2B SWAP2 PUSH2 0x1D06 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH32 0x0 AND SWAP2 DUP1 PUSH32 0x0 AND SWAP2 PUSH2 0x1E0A DUP6 PUSH2 0x4ED2 JUMP JUMPDEST SWAP4 DUP1 EXTCODESIZE ISZERO PUSH2 0x392 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP5 DUP3 AND PUSH1 0x44 DUP7 ADD MSTORE SWAP2 DUP8 AND AND PUSH1 0x64 DUP5 ADD MSTORE PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x84 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP4 PUSH1 0x20 SWAP4 PUSH2 0x1ED0 SWAP4 PUSH2 0x1F10 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP11 PUSH1 0x4 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x387 JUMPI PUSH2 0x1EE5 JUMPI JUMPDEST DUP1 PUSH2 0x1DA2 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1F09 JUMPI JUMPDEST PUSH2 0x1EFB DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x392 JUMPI DUP6 PUSH2 0x1EDF JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1EF1 JUMP JUMPDEST PUSH2 0x1F19 SWAP1 PUSH2 0x4007 JUMP JUMPDEST DUP11 PUSH2 0x1E83 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP1 DUP6 AND EQ PUSH2 0x1CAE JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH2 0x1F6D PUSH2 0x3F7F JUMP JUMPDEST PUSH2 0x1F75 PUSH2 0x3FAB JUMP JUMPDEST PUSH2 0x1F7D PUSH2 0x4E74 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH32 0x0 AND PUSH1 0x40 MLOAD SWAP3 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP5 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 DUP5 GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x387 JUMPI PUSH0 PUSH2 0x1FFE PUSH2 0x2039 SWAP7 DUP3 SWAP7 DUP4 SWAP2 PUSH2 0x207D JUMPI JUMPDEST POP MLOAD PUSH2 0x4A42 JUMP JUMPDEST SWAP4 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xA07D604000000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x44 CALLDATALOAD SWAP2 PUSH1 0x4 DUP7 ADD PUSH2 0x47F6 JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x387 JUMPI PUSH2 0x359 SWAP2 PUSH0 SWAP2 PUSH2 0x2063 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x41A9 JUMP JUMPDEST PUSH2 0x2077 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x1565 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP3 PUSH2 0x204E JUMP JUMPDEST PUSH2 0x2091 SWAP2 POP RETURNDATASIZE DUP1 DUP6 DUP4 RETURNDATACOPY PUSH2 0x1193 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP9 PUSH2 0x1FF7 JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH1 0x20 PUSH32 0x0 TLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH2 0x20EA CALLDATASIZE PUSH2 0x4177 JUMP JUMPDEST PUSH2 0x20F2 PUSH2 0x4E47 JUMP JUMPDEST PUSH2 0x20FA PUSH2 0x4E74 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 DUP2 AND SWAP3 PUSH1 0x20 SWAP1 DUP2 DUP2 ADD SWAP1 PUSH2 0x2137 DUP3 PUSH2 0x46D3 JUMP JUMPDEST SWAP6 PUSH2 0x2141 DUP3 PUSH2 0x46D3 JUMP JUMPDEST SWAP7 PUSH2 0x214F PUSH1 0x40 DUP5 ADD DUP5 PUSH2 0x46E7 JUMP JUMPDEST SWAP2 SWAP1 SWAP9 PUSH1 0x80 DUP6 ADD CALLDATALOAD SWAP2 PUSH1 0x5 DUP4 LT ISZERO PUSH2 0x392 JUMPI DUP10 PUSH2 0x2D0 PUSH2 0x2193 SWAP5 PUSH2 0x21A2 PUSH2 0x21F2 SWAP15 PUSH0 SWAP9 DUP14 DUP7 PUSH2 0x21BA SWAP10 PUSH2 0x2186 DUP16 PUSH1 0xC0 DUP2 ADD SWAP1 PUSH2 0x473B JUMP JUMPDEST SWAP10 SWAP1 SWAP11 PUSH1 0x40 MLOAD SWAP14 DUP15 PUSH2 0x4038 JUMP JUMPDEST AND DUP13 MSTORE AND SWAP1 DUP11 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x408F JUMP JUMPDEST PUSH1 0x40 DUP8 ADD MSTORE PUSH1 0x60 DUP10 ADD CALLDATALOAD PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0x80 DUP7 ADD PUSH2 0x48AC JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP10 DUP2 SWAP3 PUSH32 0x4AF29EC400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x4BE4 JUMP JUMPDEST SUB DUP2 DUP4 DUP6 GAS CALL SWAP6 DUP7 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP4 PUSH0 SWAP9 PUSH0 SWAP9 PUSH2 0x24A8 JUMPI JUMPDEST POP PUSH2 0x2214 SWAP1 PUSH2 0x46D3 JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD SWAP2 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP2 PUSH2 0x248E JUMPI JUMPDEST POP SWAP7 SWAP8 PUSH1 0xA0 DUP5 ADD SWAP8 SWAP1 PUSH0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x244D JUMPI DUP4 PUSH2 0x2277 DUP3 DUP6 PUSH2 0x4BD0 JUMP JUMPDEST MLOAD AND PUSH2 0x2283 DUP3 DUP10 PUSH2 0x4BD0 JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO PUSH2 0x23E0 JUMPI PUSH2 0x2294 DUP13 PUSH2 0x47E9 JUMP JUMPDEST DUP1 PUSH2 0x2422 JUMPI JUMPDEST ISZERO PUSH2 0x22D4 JUMPI POP SWAP1 PUSH2 0x22CE PUSH1 0x1 SWAP3 DUP12 PUSH32 0x0 PUSH2 0x4F16 JUMP JUMPDEST ADD PUSH2 0x2263 JUMP JUMPDEST SWAP1 DUP6 PUSH32 0x0 AND SWAP1 PUSH2 0x2302 DUP10 PUSH2 0x46D3 JUMP JUMPDEST PUSH2 0x230B DUP3 PUSH2 0x4ED2 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x392 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE DUP11 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE SWAP1 DUP5 AND PUSH1 0x64 DUP3 ADD MSTORE SWAP3 SWAP2 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x84 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH2 0x23CC SWAP4 DUP13 SWAP4 PUSH2 0x2413 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP3 DUP4 SWAP3 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB DUP2 PUSH0 DUP11 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x387 JUMPI DUP10 SWAP2 PUSH2 0x23EA JUMPI JUMPDEST POP POP PUSH1 0x1 SWAP1 PUSH2 0x22CE JUMP JUMPDEST DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x240C JUMPI JUMPDEST PUSH2 0x23FD DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x392 JUMPI DUP8 DUP13 PUSH2 0x23E0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x23F3 JUMP JUMPDEST PUSH2 0x241C SWAP1 PUSH2 0x4007 JUMP JUMPDEST DUP16 PUSH2 0x2381 JUMP JUMPDEST POP DUP6 PUSH32 0x0 AND DUP2 EQ PUSH2 0x229A JUMP JUMPDEST POP DUP6 PUSH2 0x359 DUP12 PUSH2 0x245F PUSH2 0x18FF DUP10 PUSH2 0x46D3 JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x426B JUMP JUMPDEST PUSH2 0x24A2 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x1193 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP10 PUSH2 0x2258 JUMP JUMPDEST SWAP1 SWAP8 POP PUSH2 0x24C5 SWAP2 SWAP9 POP PUSH2 0x2214 SWAP5 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x378 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST SWAP9 SWAP2 SWAP5 SWAP1 SWAP9 SWAP8 SWAP1 PUSH2 0x220A JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH0 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0x2604 JUMPI JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP6 LT DUP5 EQ PUSH2 0x25D7 JUMPI DUP6 DUP8 SWAP5 DUP7 DUP7 MSTORE SWAP2 DUP3 PUSH0 EQ PUSH2 0x2599 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x2540 JUMPI JUMPDEST POP PUSH2 0x252C SWAP3 POP SUB DUP4 PUSH2 0x4054 JUMP JUMPDEST PUSH2 0x359 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x4246 JUMP JUMPDEST PUSH0 DUP1 DUP1 MSTORE DUP6 SWAP3 POP SWAP1 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP6 DUP4 LT PUSH2 0x2581 JUMPI POP POP PUSH2 0x252C SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x251F JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x256A JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0x252C SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0x251F SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0x24FB JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH2 0x263F PUSH2 0x2638 PUSH0 DUP1 PUSH2 0x616 PUSH2 0x76A PUSH2 0x43E PUSH2 0x262D CALLDATASIZE PUSH2 0x4432 JUMP JUMPDEST SWAP6 SWAP4 SWAP11 SWAP3 SWAP10 SWAP1 PUSH2 0x4E05 JUMP JUMPDEST SWAP9 DUP11 PUSH2 0x5191 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x2656 DUP4 PUSH2 0x3FEB JUMP JUMPDEST ADDRESS DUP4 MSTORE DUP6 PUSH1 0x20 SWAP12 AND DUP12 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x2 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xB24BD57100000000000000000000000000000000000000000000000000000000 DUP12 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x4A8C JUMP JUMPDEST PUSH2 0x43E PUSH2 0x1BD8 PUSH0 DUP1 PUSH2 0x275A PUSH2 0x26D7 CALLDATASIZE PUSH2 0x4491 JUMP JUMPDEST PUSH2 0x26E7 SWAP10 SWAP4 SWAP5 SWAP9 SWAP3 SWAP2 SWAP10 CALLER PUSH2 0x4E05 JUMP JUMPDEST SWAP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x26FE DUP6 PUSH2 0x3FEB JUMP JUMPDEST CALLER DUP6 MSTORE DUP8 PUSH1 0x20 SWAP13 AND DUP13 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE DUP8 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x7B03C7BA00000000000000000000000000000000000000000000000000000000 DUP11 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x4A8C JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x387 JUMPI PUSH2 0x27A0 SWAP2 PUSH0 SWAP2 PUSH2 0x27BC JUMPI JUMPDEST POP DUP3 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x4AEA JUMP JUMPDEST POP SWAP3 SWAP1 POP PUSH2 0x1118 JUMPI PUSH2 0x359 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x41A9 JUMP JUMPDEST PUSH2 0x27D0 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x526 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP5 PUSH2 0x2791 JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH2 0x27EF PUSH2 0x3F7F JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x392 JUMPI PUSH2 0x2810 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x40DD JUMP JUMPDEST SWAP2 PUSH2 0x2819 PUSH2 0x3F95 JUMP JUMPDEST SWAP2 PUSH1 0x84 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x392 JUMPI PUSH0 SWAP4 PUSH2 0x43E PUSH2 0x8FD DUP7 SWAP5 PUSH2 0x2842 PUSH2 0x882 PUSH2 0x28B7 SWAP7 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x415C JUMP JUMPDEST SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x285A DUP6 PUSH2 0x3FEB JUMP JUMPDEST ADDRESS DUP6 MSTORE AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x4 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xEFD85F1400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x48F2 JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH2 0x359 SWAP3 PUSH2 0x2903 SWAP2 PUSH0 SWAP2 PUSH2 0x2940 JUMPI JUMPDEST POP PUSH1 0x20 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x496F JUMP JUMPDEST SWAP1 SWAP4 SWAP2 SWAP3 PUSH2 0x2918 JUMPI JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x426B JUMP JUMPDEST PUSH0 PUSH32 0x0 TSTORE PUSH2 0x290C JUMP JUMPDEST PUSH2 0x2954 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x526 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP5 PUSH2 0x28F3 JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH2 0x2968 CALLDATASIZE PUSH2 0x42E6 JUMP JUMPDEST SWAP1 PUSH2 0x2976 SWAP1 SWAP5 SWAP4 SWAP3 SWAP5 PUSH2 0x4E05 JUMP JUMPDEST SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 DUP2 PUSH1 0x40 MLOAD SWAP7 PUSH2 0x298F DUP9 PUSH2 0x401B JUMP JUMPDEST CALLER DUP9 MSTORE DUP2 PUSH1 0x20 SWAP11 DUP12 DUP11 ADD PUSH0 SWAP1 MSTORE AND PUSH1 0x40 DUP10 ADD MSTORE AND PUSH1 0x60 DUP8 ADD MSTORE AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP4 ADD PUSH0 SWAP1 MSTORE PUSH1 0xE0 DUP4 ADD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 MSTORE PUSH2 0x100 DUP4 ADD PUSH0 SWAP1 MSTORE PUSH2 0x120 DUP4 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP3 DUP6 DUP3 ADD PUSH32 0xBE5AE84100000000000000000000000000000000000000000000000000000000 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD SWAP1 PUSH2 0x2A18 SWAP2 PUSH2 0x4B3F JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE PUSH2 0x2A2A SWAP1 DUP4 PUSH2 0x4054 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 SWAP4 PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD PUSH2 0x2A66 SWAP2 PUSH2 0x4246 JUMP JUMPDEST SUB SWAP2 PUSH32 0x0 AND SWAP2 DUP2 GAS PUSH0 SWAP5 DUP6 SWAP2 CALL SWAP1 DUP2 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP2 PUSH2 0x2ABD JUMPI JUMPDEST POP DUP3 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x392 JUMPI DUP3 ADD MLOAD SWAP1 PUSH2 0x4EA JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x2AD1 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x526 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP4 PUSH2 0x2AA0 JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH2 0x2AF0 PUSH2 0x3F7F JUMP JUMPDEST PUSH2 0x2AF8 PUSH2 0x3FC1 JUMP JUMPDEST SWAP1 PUSH2 0x2B01 PUSH2 0x3F95 JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x392 JUMPI PUSH2 0x2B24 PUSH2 0x2B2A SWAP2 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x415C JUMP JUMPDEST SWAP2 PUSH2 0x4E05 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 PUSH32 0x0 AND SWAP3 DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND SWAP6 DUP7 PUSH1 0x4 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x40 DUP3 PUSH1 0x44 DUP2 DUP7 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP1 PUSH0 SWAP4 PUSH2 0x2C9A JUMPI JUMPDEST POP PUSH0 SWAP4 PUSH2 0x43E PUSH2 0x2C36 DUP7 SWAP5 PUSH2 0x2BBE PUSH2 0x2C72 SWAP6 PUSH2 0x4A42 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH2 0x2BCB DUP10 DUP5 PUSH2 0x4BD0 JUMP JUMPDEST MSTORE PUSH1 0x40 MLOAD SWAP2 PUSH2 0x2BD9 DUP4 PUSH2 0x3FEB JUMP JUMPDEST ADDRESS DUP4 MSTORE PUSH1 0x20 SWAP12 DUP13 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xB24BD57100000000000000000000000000000000000000000000000000000000 DUP13 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x4A8C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP12 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4246 JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH2 0x4DB SWAP3 PUSH2 0x4D3 SWAP2 PUSH0 SWAP2 PUSH2 0x512 JUMPI POP DUP6 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x4AEA JUMP JUMPDEST SWAP3 POP POP SWAP2 PUSH1 0x40 DUP3 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x2CD1 JUMPI JUMPDEST DUP2 PUSH2 0x2CB7 PUSH1 0x40 SWAP4 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x392 JUMPI DUP2 MLOAD PUSH1 0x20 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 PUSH0 PUSH2 0x2BA7 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2CAA JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH2 0x2CF5 PUSH2 0x2CEA CALLDATASIZE PUSH2 0x4432 JUMP JUMPDEST SWAP3 SWAP5 SWAP1 SWAP4 SWAP2 SWAP4 PUSH2 0x4E05 JUMP JUMPDEST SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 PUSH32 0x0 AND SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP5 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND SWAP7 DUP8 PUSH1 0x4 DUP7 ADD MSTORE AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x40 DUP4 PUSH1 0x44 DUP2 DUP8 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP1 PUSH0 SWAP5 PUSH2 0x2E37 JUMPI JUMPDEST POP SWAP4 PUSH2 0x43E PUSH2 0x2C36 PUSH0 SWAP7 SWAP5 PUSH2 0x2E0F SWAP5 PUSH2 0x2D8B DUP10 SWAP8 PUSH2 0x4A42 JUMP JUMPDEST SWAP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x2DA7 DUP11 DUP6 PUSH2 0x4BD0 JUMP JUMPDEST MSTORE PUSH1 0x40 MLOAD SWAP3 PUSH2 0x2DB5 DUP5 PUSH2 0x3FEB JUMP JUMPDEST ADDRESS DUP5 MSTORE PUSH1 0x20 SWAP13 DUP14 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x2 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xEFD85F1400000000000000000000000000000000000000000000000000000000 DUP13 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x48F2 JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH2 0x4DB SWAP3 PUSH2 0x1B1F SWAP2 PUSH0 SWAP2 PUSH2 0x1B26 JUMPI POP DUP6 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x496F JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP4 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x2E6C JUMPI JUMPDEST DUP2 PUSH2 0x2E53 PUSH1 0x40 SWAP4 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x392 JUMPI DUP3 MLOAD PUSH1 0x20 SWAP1 SWAP4 ADD MLOAD SWAP3 PUSH2 0x43E PUSH2 0x2D72 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2E46 JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD GT PUSH2 0x392 JUMPI CALLDATASIZE PUSH1 0x23 PUSH1 0x4 CALLDATALOAD ADD SLT ISZERO PUSH2 0x392 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD GT PUSH2 0x392 JUMPI CALLDATASIZE PUSH1 0x24 PUSH1 0xC0 PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD MUL PUSH1 0x4 CALLDATALOAD ADD ADD GT PUSH2 0x392 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x392 JUMPI PUSH2 0x2F2D SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4352 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD GT PUSH2 0x392 JUMPI PUSH1 0x60 PUSH1 0x3 NOT PUSH1 0x44 CALLDATALOAD CALLDATASIZE SUB ADD SLT PUSH2 0x392 JUMPI PUSH1 0x64 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x392 JUMPI PUSH2 0x2F6E SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4383 JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x392 JUMPI PUSH2 0x2F8E SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4352 JUMP JUMPDEST SWAP5 SWAP1 SWAP4 PUSH2 0x2F99 PUSH2 0x4E47 JUMP JUMPDEST DUP1 PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD SUB PUSH2 0x34DC JUMPI PUSH0 JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD DUP2 LT PUSH2 0x3229 JUMPI POP POP POP PUSH1 0x44 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD PUSH1 0x44 CALLDATALOAD CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x392 JUMPI DUP2 PUSH1 0x44 CALLDATALOAD ADD PUSH1 0x4 DUP2 ADD CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x392 JUMPI PUSH1 0x24 DUP3 PUSH1 0x7 SHL CALLDATASIZE SUB SWAP2 ADD SGT PUSH2 0x392 JUMPI PUSH2 0x304C JUMPI JUMPDEST PUSH2 0x359 PUSH2 0xF76 DUP7 DUP7 PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH2 0x4CB0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP3 SWAP5 PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x392 JUMPI PUSH1 0x40 MLOAD SWAP5 PUSH32 0x2A2D80D100000000000000000000000000000000000000000000000000000000 DUP7 MSTORE CALLER PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x60 PUSH1 0x24 DUP8 ADD MSTORE PUSH1 0xC4 DUP7 ADD SWAP3 PUSH1 0x44 CALLDATALOAD ADD PUSH1 0x24 DUP2 ADD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 DUP4 ADD CALLDATALOAD GT PUSH2 0x392 JUMPI PUSH1 0x4 DUP3 ADD CALLDATALOAD PUSH1 0x7 SHL CALLDATASIZE SUB DUP6 SGT PUSH2 0x392 JUMPI PUSH1 0x60 PUSH1 0x64 DUP10 ADD MSTORE PUSH1 0x4 DUP3 ADD CALLDATALOAD SWAP1 MSTORE SWAP2 SWAP3 DUP7 SWAP3 PUSH1 0xE4 DUP5 ADD SWAP3 SWAP2 SWAP1 PUSH0 SWAP1 JUMPDEST PUSH1 0x4 DUP2 ADD CALLDATALOAD DUP3 LT PUSH2 0x31AB JUMPI POP POP POP DUP3 SWAP2 PUSH0 SWAP5 PUSH2 0x314E SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x312C PUSH1 0x24 PUSH1 0x44 CALLDATALOAD ADD PUSH2 0x3FD7 JUMP JUMPDEST AND PUSH1 0x84 DUP7 ADD MSTORE PUSH1 0x44 DUP1 CALLDATALOAD ADD CALLDATALOAD PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0x3 NOT DUP6 DUP5 SUB ADD PUSH1 0x44 DUP7 ADD MSTORE PUSH2 0x478C JUMP JUMPDEST SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH2 0x359 SWAP4 PUSH2 0xF76 SWAP4 PUSH2 0x319C JUMPI JUMPDEST DUP3 SWAP5 POP DUP2 SWAP4 POP PUSH2 0x301C JUMP JUMPDEST PUSH2 0x31A5 SWAP1 PUSH2 0x4007 JUMP JUMPDEST DUP5 PUSH2 0x3191 JUMP JUMPDEST SWAP2 SWAP6 SWAP5 POP SWAP2 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x31C2 DUP8 PUSH2 0x3FD7 JUMP JUMPDEST AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP8 ADD CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP1 SWAP4 SUB PUSH2 0x392 JUMPI PUSH1 0x4 SWAP3 PUSH1 0x1 SWAP3 DUP3 ADD MSTORE PUSH2 0x31F2 PUSH1 0x40 DUP10 ADD PUSH2 0x517E JUMP JUMPDEST PUSH6 0xFFFFFFFFFFFF DUP1 SWAP2 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x320D PUSH1 0x60 DUP11 ADD PUSH2 0x517E JUMP JUMPDEST AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP1 SWAP2 ADD SWAP8 ADD SWAP4 ADD SWAP1 POP DUP9 SWAP5 SWAP6 SWAP4 SWAP3 SWAP2 PUSH2 0x3100 JUMP JUMPDEST PUSH2 0x3237 PUSH2 0x2D0 DUP3 DUP5 DUP7 PUSH2 0x4DEE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x60 DUP4 ADD GT OR PUSH2 0xF11 JUMPI PUSH1 0x60 DUP2 ADD PUSH1 0x40 MSTORE PUSH0 DUP2 MSTORE PUSH1 0x20 SWAP2 PUSH0 DUP4 DUP4 ADD MSTORE PUSH0 PUSH1 0x40 DUP4 ADD MSTORE DUP3 DUP2 ADD MLOAD SWAP1 PUSH1 0x60 PUSH1 0x40 DUP3 ADD MLOAD SWAP2 ADD MLOAD PUSH0 BYTE SWAP2 DUP4 MSTORE DUP4 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xC0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP2 DUP6 MUL PUSH1 0x4 CALLDATALOAD ADD CALLDATASIZE SUB ADD SLT PUSH2 0x392 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0x32C7 DUP3 PUSH2 0x4038 JUMP JUMPDEST PUSH2 0x32DA PUSH1 0x24 PUSH1 0xC0 DUP7 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x3FD7 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH2 0x32F0 PUSH1 0x44 PUSH1 0xC0 DUP8 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x3FD7 JUMP JUMPDEST SWAP1 DUP2 DUP6 DUP6 ADD MSTORE PUSH2 0x3309 PUSH1 0x64 PUSH1 0xC0 DUP9 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x3FD7 JUMP JUMPDEST PUSH1 0x40 DUP6 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x4 CALLDATALOAD PUSH1 0xC0 DUP9 MUL ADD PUSH1 0x84 DUP2 ADD CALLDATALOAD PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0xA4 DUP2 ADD CALLDATALOAD PUSH1 0x80 DUP8 ADD MSTORE PUSH1 0xC4 ADD CALLDATALOAD PUSH1 0xA0 DUP7 ADD MSTORE DUP4 ADD MLOAD DUP4 MLOAD SWAP4 DUP7 ADD MLOAD PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EXTCODESIZE ISZERO PUSH2 0x392 JUMPI PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 PUSH1 0xE4 SWAP5 DUP12 SWAP9 DUP5 SWAP9 PUSH1 0xC4 PUSH1 0xC0 PUSH1 0x40 MLOAD SWAP13 DUP14 SWAP12 DUP13 SWAP11 PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP13 MSTORE AND PUSH1 0x4 DUP12 ADD MSTORE ADDRESS PUSH1 0x24 DUP12 ADD MSTORE PUSH1 0x84 DUP3 DUP3 MUL PUSH1 0x4 CALLDATALOAD ADD ADD CALLDATALOAD PUSH1 0x44 DUP12 ADD MSTORE MUL PUSH1 0x4 CALLDATALOAD ADD ADD CALLDATALOAD PUSH1 0x64 DUP9 ADD MSTORE PUSH1 0x84 DUP8 ADD MSTORE PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xC4 DUP6 ADD MSTORE AND GAS CALL SWAP1 DUP2 PUSH2 0x34CD JUMPI JUMPDEST POP PUSH2 0x34C3 JUMPI PUSH2 0x33E6 PUSH2 0x514F JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 MLOAD AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP4 ADD MLOAD AND PUSH1 0x44 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP3 PUSH2 0x3493 JUMPI JUMPDEST POP PUSH1 0x60 ADD MLOAD SUB PUSH2 0x345E JUMPI POP POP PUSH1 0x1 SWAP1 JUMPDEST ADD PUSH2 0x2FA8 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x346B JUMPI DUP1 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP DUP4 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x34BC JUMPI JUMPDEST PUSH2 0x34AB DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x392 JUMPI MLOAD SWAP1 PUSH1 0x60 PUSH2 0x3448 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x34A1 JUMP JUMPDEST POP POP PUSH1 0x1 SWAP1 PUSH2 0x3458 JUMP JUMPDEST PUSH2 0x34D6 SWAP1 PUSH2 0x4007 JUMP JUMPDEST DUP11 PUSH2 0x33D9 JUMP JUMPDEST PUSH32 0xAAAD13F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH2 0x3512 CALLDATASIZE PUSH2 0x42E6 JUMP JUMPDEST SWAP1 PUSH2 0x3520 SWAP1 SWAP5 SWAP4 SWAP3 SWAP5 PUSH2 0x4E05 JUMP JUMPDEST SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 DUP2 PUSH1 0x40 MLOAD SWAP7 PUSH2 0x3539 DUP9 PUSH2 0x401B JUMP JUMPDEST CALLER DUP9 MSTORE DUP2 PUSH1 0x20 SWAP11 DUP12 DUP11 ADD PUSH1 0x1 SWAP1 MSTORE AND PUSH1 0x40 DUP10 ADD MSTORE AND PUSH1 0x60 DUP8 ADD MSTORE AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP4 ADD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 MSTORE PUSH1 0xE0 DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 MSTORE PUSH2 0x100 DUP4 ADD PUSH0 SWAP1 MSTORE PUSH2 0x120 DUP4 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP3 DUP6 DUP3 ADD PUSH32 0xBE5AE84100000000000000000000000000000000000000000000000000000000 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD SWAP1 PUSH2 0x2A18 SWAP2 PUSH2 0x4B3F JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH2 0x3637 PUSH2 0xF93 CALLDATASIZE PUSH2 0x4294 JUMP JUMPDEST SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 PUSH32 0x0 AND SWAP4 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND SWAP4 DUP5 PUSH1 0x4 DUP6 ADD MSTORE PUSH0 DUP5 PUSH1 0x24 DUP2 DUP5 GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x387 JUMPI PUSH2 0x109C PUSH0 SWAP6 SWAP5 PUSH2 0x372A SWAP5 PUSH2 0x36C3 DUP9 SWAP8 PUSH2 0x43E SWAP6 DUP10 SWAP2 PUSH2 0x374D JUMPI POP MLOAD PUSH2 0x4A42 JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x36D1 DUP5 PUSH2 0x3FEB JUMP JUMPDEST ADDRESS DUP5 MSTORE PUSH1 0x20 SWAP11 DUP12 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE DUP7 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xB24BD57100000000000000000000000000000000000000000000000000000000 DUP11 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x4A8C JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x387 JUMPI PUSH2 0x27A0 SWAP2 PUSH0 SWAP2 PUSH2 0x27BC JUMPI POP DUP3 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x4AEA JUMP JUMPDEST PUSH2 0x3761 SWAP2 POP RETURNDATASIZE DUP1 DUP12 DUP4 RETURNDATACOPY PUSH2 0x1193 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP13 PUSH2 0x1FF7 JUMP JUMPDEST PUSH0 PUSH2 0x43E DUP2 PUSH2 0x28B7 PUSH2 0x160B PUSH2 0x377B CALLDATASIZE PUSH2 0x41DC JUMP JUMPDEST SWAP1 PUSH2 0x378C SWAP9 SWAP5 SWAP3 SWAP9 SWAP6 SWAP4 SWAP6 CALLER PUSH2 0x4E05 JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x37A4 DUP8 PUSH2 0x3FEB JUMP JUMPDEST CALLER DUP8 MSTORE AND PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x4 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x5B34379100000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x48F2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH2 0x3813 PUSH2 0x3F7F JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x392 JUMPI PUSH0 PUSH2 0x43E PUSH2 0x387A PUSH2 0x383D PUSH2 0x38B4 SWAP5 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x40DD JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH1 0x20 SWAP8 PUSH32 0x82CD54FB00000000000000000000000000000000000000000000000000000000 DUP10 DUP6 ADD MSTORE PUSH1 0x24 CALLDATALOAD SWAP1 CALLER SWAP1 PUSH1 0x24 DUP7 ADD PUSH2 0x47F6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP7 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4246 JUMP JUMPDEST SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x387 JUMPI PUSH2 0xED5 SWAP2 PUSH0 SWAP2 PUSH2 0x3903 JUMPI JUMPDEST POP DUP3 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x4886 JUMP JUMPDEST PUSH2 0x3917 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x526 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP4 PUSH2 0x38F4 JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH2 0x392B CALLDATASIZE PUSH2 0x4177 JUMP JUMPDEST PUSH2 0x3933 PUSH2 0x4E47 JUMP JUMPDEST PUSH2 0x393B PUSH2 0x4E74 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 PUSH1 0x20 DUP3 PUSH2 0x3972 DUP6 DUP4 ADD PUSH2 0x46D3 JUMP JUMPDEST SWAP5 PUSH2 0x397C DUP2 PUSH2 0x46D3 JUMP JUMPDEST SWAP6 PUSH1 0x40 DUP3 ADD SWAP7 PUSH2 0x398C DUP9 DUP5 PUSH2 0x46E7 JUMP JUMPDEST SWAP1 PUSH2 0x399A PUSH1 0x60 DUP7 ADD DUP7 PUSH2 0x46E7 JUMP JUMPDEST SWAP4 SWAP1 SWAP3 DUP1 PUSH2 0x39AB PUSH1 0xC0 DUP10 ADD DUP10 PUSH2 0x473B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xBA8A2BE000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP9 DUP15 AND PUSH1 0x4 DUP11 ADD MSTORE SWAP13 SWAP1 SWAP4 AND PUSH1 0x24 DUP9 ADD MSTORE PUSH1 0xC0 PUSH1 0x44 DUP9 ADD MSTORE PUSH1 0xC4 DUP8 ADD MSTORE SWAP5 SWAP10 SWAP5 PUSH1 0xE4 DUP12 ADD SWAP3 SWAP1 PUSH0 JUMPDEST DUP11 DUP3 DUP3 LT PUSH2 0x3D06 JUMPI POP POP POP POP PUSH1 0x3 NOT DUP11 DUP4 SUB ADD PUSH1 0x64 DUP12 ADD MSTORE DUP4 DUP3 MSTORE PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0x392 JUMPI DUP8 SWAP5 DUP6 DUP12 SWAP6 SWAP5 PUSH2 0x3A6D SWAP5 DUP8 SWAP7 PUSH1 0x5 SHL DUP1 SWAP3 DUP5 DUP4 ADD CALLDATACOPY ADD PUSH1 0x80 DUP10 ADD CALLDATALOAD PUSH1 0x84 DUP8 ADD MSTORE PUSH1 0x1C DUP7 DUP3 SUB ADD PUSH1 0xA4 DUP8 ADD MSTORE ADD SWAP2 PUSH2 0x478C JUMP JUMPDEST SUB DUP2 PUSH0 DUP7 DUP10 AND GAS CALL SWAP5 DUP6 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP6 PUSH2 0x3CD7 JUMPI JUMPDEST POP SWAP4 SWAP5 PUSH1 0xA0 DUP6 ADD SWAP5 SWAP1 PUSH0 JUMPDEST PUSH2 0x3A98 DUP3 DUP5 PUSH2 0x46E7 JUMP JUMPDEST SWAP1 POP DUP2 LT ISZERO PUSH2 0x3C9E JUMPI PUSH2 0x3ABD PUSH2 0x3AB8 DUP3 PUSH2 0x3AB2 DUP6 DUP8 PUSH2 0x46E7 JUMP JUMPDEST SWAP1 PUSH2 0x47AC JUMP JUMPDEST PUSH2 0x46D3 JUMP JUMPDEST PUSH2 0x3ACE DUP3 PUSH2 0x3AB2 PUSH1 0x60 DUP8 ADD DUP8 PUSH2 0x46E7 JUMP JUMPDEST CALLDATALOAD SWAP1 DUP2 ISZERO PUSH2 0x3C2F JUMPI PUSH2 0x3ADF DUP10 PUSH2 0x47E9 JUMP JUMPDEST DUP1 PUSH2 0x3C71 JUMPI JUMPDEST ISZERO PUSH2 0x3B1F JUMPI POP SWAP1 PUSH2 0x3B19 PUSH1 0x1 SWAP3 DUP9 PUSH32 0x0 PUSH2 0x4F16 JUMP JUMPDEST ADD PUSH2 0x3A8E JUMP JUMPDEST DUP6 PUSH32 0x0 AND SWAP2 PUSH2 0x3B4C DUP7 PUSH2 0x46D3 JUMP JUMPDEST PUSH2 0x3B55 DUP3 PUSH2 0x4ED2 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x392 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE DUP10 DUP13 AND DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE DUP4 DUP10 AND SWAP1 SWAP2 AND PUSH1 0x64 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x84 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH2 0x3C19 SWAP4 DUP10 SWAP4 PUSH2 0x3C62 JUMPI POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP3 DUP4 SWAP3 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB DUP2 PUSH0 DUP10 DUP13 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x387 JUMPI DUP7 SWAP2 PUSH2 0x3C39 JUMPI JUMPDEST POP POP PUSH1 0x1 SWAP1 PUSH2 0x3B19 JUMP JUMPDEST DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3C5B JUMPI JUMPDEST PUSH2 0x3C4C DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x392 JUMPI DUP5 DUP10 PUSH2 0x3C2F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3C42 JUMP JUMPDEST PUSH2 0x3C6B SWAP1 PUSH2 0x4007 JUMP JUMPDEST DUP13 PUSH2 0x2381 JUMP JUMPDEST POP DUP6 PUSH32 0x0 AND DUP7 DUP3 AND EQ PUSH2 0x3AE5 JUMP JUMPDEST DUP5 DUP9 PUSH2 0x3CAC PUSH2 0x18FF DUP7 PUSH2 0x46D3 JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP5 POP DUP3 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3CFF JUMPI JUMPDEST PUSH2 0x3CEF DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x392 JUMPI MLOAD SWAP4 DUP7 PUSH2 0x3A83 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3CE5 JUMP JUMPDEST DUP1 DUP5 SWAP7 DUP13 PUSH2 0x3D17 PUSH1 0x1 SWAP6 SWAP7 SWAP8 PUSH2 0x3FD7 JUMP JUMPDEST AND DUP2 MSTORE ADD SWAP6 ADD SWAP3 SWAP2 ADD PUSH2 0x39F9 JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH2 0x3D39 PUSH2 0x3F7F JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP4 GT PUSH2 0x392 JUMPI CALLDATASIZE PUSH1 0x23 DUP5 ADD SLT ISZERO PUSH2 0x392 JUMPI DUP3 PUSH1 0x4 ADD CALLDATALOAD SWAP2 PUSH2 0x3D67 DUP4 PUSH2 0x4077 JUMP JUMPDEST SWAP3 PUSH2 0x3D75 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x4054 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 SWAP5 PUSH1 0x24 DUP7 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x392 JUMPI PUSH1 0x24 DUP8 SWAP3 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x3F68 JUMPI POP POP POP POP PUSH1 0x44 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x392 JUMPI PUSH2 0x3DB9 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x40DD JUMP JUMPDEST SWAP3 PUSH2 0x3DC2 PUSH2 0x40FB JUMP JUMPDEST SWAP3 PUSH1 0xA4 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x392 JUMPI PUSH2 0x3DDB SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x415C JUMP JUMPDEST SWAP4 PUSH2 0x3DE5 CALLER PUSH2 0x4E05 JUMP JUMPDEST SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x3DFC DUP5 PUSH2 0x3FEB JUMP JUMPDEST CALLER DUP5 MSTORE DUP7 DUP10 DUP6 ADD SWAP7 AND DUP7 MSTORE PUSH1 0x40 DUP5 ADD SWAP5 DUP6 MSTORE PUSH1 0x60 DUP5 ADD SWAP1 DUP2 MSTORE PUSH1 0x80 DUP5 ADD SWAP5 PUSH1 0x64 CALLDATALOAD DUP7 MSTORE PUSH1 0xA0 DUP6 ADD SWAP3 ISZERO ISZERO DUP4 MSTORE PUSH1 0xC0 DUP6 ADD SWAP4 DUP5 MSTORE DUP8 PUSH1 0x40 MLOAD SWAP8 PUSH32 0x86FAD6600000000000000000000000000000000000000000000000000000000 DUP13 DUP11 ADD MSTORE DUP12 PUSH1 0x24 DUP11 ADD MSTORE DUP2 PUSH2 0x124 DUP11 ADD SWAP8 MLOAD AND PUSH1 0x44 DUP11 ADD MSTORE MLOAD AND PUSH1 0x64 DUP9 ADD MSTORE MLOAD SWAP4 PUSH1 0xE0 PUSH1 0x84 DUP9 ADD MSTORE DUP5 MLOAD DUP1 SWAP2 MSTORE DUP10 PUSH2 0x144 DUP9 ADD SWAP6 ADD SWAP1 PUSH0 JUMPDEST DUP12 DUP3 DUP3 LT PUSH2 0x3F52 JUMPI POP POP POP POP SWAP5 PUSH2 0x43E PUSH2 0x3F02 SWAP6 PUSH0 SWAP9 SWAP6 DUP4 SWAP6 PUSH2 0x5DA SWAP6 PUSH2 0x3EE2 DUP13 SWAP12 MLOAD SWAP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC SWAP5 DUP6 DUP10 DUP4 SUB ADD PUSH1 0xA4 DUP11 ADD MSTORE PUSH2 0x4634 JUMP JUMPDEST SWAP4 MLOAD PUSH1 0xC4 DUP8 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xE4 DUP7 ADD MSTORE MLOAD SWAP1 DUP5 DUP4 SUB ADD PUSH2 0x104 DUP6 ADD MSTORE PUSH2 0x4246 JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP2 PUSH2 0x2ABD JUMPI POP DUP3 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x392 JUMPI DUP3 ADD MLOAD SWAP1 PUSH2 0x4EA JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 MLOAD DUP12 AND DUP9 MSTORE SWAP7 DUP8 ADD SWAP7 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x3E8D JUMP JUMPDEST DUP3 DUP1 SWAP2 PUSH2 0x3F74 DUP5 PUSH2 0x3FD7 JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x3D96 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x392 JUMPI JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x392 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x392 JUMPI JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x392 JUMPI JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x392 JUMPI JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF11 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xF11 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH2 0x140 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF11 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF11 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF11 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xF11 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 SWAP2 PUSH2 0x409A DUP3 PUSH2 0x4077 JUMP JUMPDEST SWAP2 PUSH2 0x40A8 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x4054 JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE PUSH1 0x20 DUP1 SWAP5 ADD SWAP2 PUSH1 0x5 SHL DUP2 ADD SWAP3 DUP4 GT PUSH2 0x392 JUMPI SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x40CE JUMPI POP POP POP POP JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x40C1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x392 JUMPI DUP2 PUSH1 0x20 PUSH2 0x40F8 SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0x408F JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x392 JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xF11 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH2 0x4132 DUP3 PUSH2 0x410A JUMP JUMPDEST SWAP2 PUSH2 0x4140 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x4054 JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0x392 JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x392 JUMPI DUP2 PUSH1 0x20 PUSH2 0x40F8 SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0x4126 JUMP JUMPDEST PUSH1 0x3 NOT SWAP1 PUSH1 0x20 DUP3 DUP3 ADD SLT PUSH2 0x392 JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x392 JUMPI DUP3 PUSH1 0xE0 SWAP3 SUB ADD SLT PUSH2 0x392 JUMPI PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x41C8 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x41BA JUMP JUMPDEST SWAP1 PUSH1 0xA0 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x392 JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x24 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x392 JUMPI DUP2 PUSH2 0x421E SWAP2 PUSH1 0x4 ADD PUSH2 0x40DD JUMP JUMPDEST SWAP3 PUSH1 0x44 CALLDATALOAD SWAP3 PUSH1 0x64 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x392 JUMPI SWAP3 PUSH1 0x84 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x392 JUMPI PUSH2 0x40F8 SWAP2 PUSH1 0x4 ADD PUSH2 0x415C JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH2 0x4281 PUSH2 0x40F8 SWAP5 SWAP3 PUSH1 0x60 DUP4 MSTORE PUSH1 0x60 DUP4 ADD SWAP1 PUSH2 0x41A9 JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x4246 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x392 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP3 PUSH1 0x24 CALLDATALOAD SWAP3 PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP2 PUSH1 0x64 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x392 JUMPI PUSH2 0x40F8 SWAP2 PUSH1 0x4 ADD PUSH2 0x415C JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x392 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 PUSH1 0x4 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP3 PUSH1 0x24 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP3 PUSH1 0x44 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP3 PUSH1 0x64 CALLDATALOAD SWAP3 PUSH1 0x84 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP2 PUSH1 0xA4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x392 JUMPI PUSH2 0x40F8 SWAP2 PUSH1 0x4 ADD PUSH2 0x415C JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x392 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x392 JUMPI PUSH1 0x20 DUP1 DUP6 ADD SWAP5 DUP5 PUSH1 0x5 SHL ADD ADD GT PUSH2 0x392 JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x392 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x392 JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x392 JUMPI JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD SWAP1 PUSH1 0x20 DUP4 MSTORE DUP4 MLOAD DUP1 SWAP3 MSTORE PUSH1 0x40 DUP4 ADD SWAP3 PUSH1 0x20 PUSH1 0x40 DUP5 PUSH1 0x5 SHL DUP4 ADD ADD SWAP6 ADD SWAP4 PUSH0 SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x43E6 JUMPI POP POP POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 DUP5 DUP1 PUSH2 0x4422 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP7 PUSH1 0x1 SWAP7 SUB ADD DUP8 MSTORE DUP11 MLOAD PUSH2 0x4246 JUMP JUMPDEST SWAP9 ADD SWAP4 ADD SWAP4 ADD SWAP2 SWAP5 SWAP4 SWAP3 SWAP1 PUSH2 0x43D6 JUMP JUMPDEST SWAP1 PUSH1 0xA0 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x392 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP3 PUSH1 0x24 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP3 PUSH1 0x44 CALLDATALOAD SWAP3 PUSH1 0x64 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP2 PUSH1 0x84 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x392 JUMPI PUSH2 0x40F8 SWAP2 PUSH1 0x4 ADD PUSH2 0x415C JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x392 JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x44 CALLDATALOAD DUP4 DUP2 GT PUSH2 0x392 JUMPI DUP3 PUSH2 0x44D6 SWAP2 PUSH1 0x4 ADD PUSH2 0x40DD JUMP JUMPDEST SWAP3 PUSH1 0x64 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x392 JUMPI SWAP3 PUSH1 0x84 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x392 JUMPI PUSH2 0x40F8 SWAP2 PUSH1 0x4 ADD PUSH2 0x415C JUMP JUMPDEST PUSH1 0x3 NOT SWAP1 PUSH1 0x20 DUP3 DUP3 ADD SLT PUSH2 0x392 JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x392 JUMPI DUP3 PUSH2 0x140 SWAP3 SUB ADD SLT PUSH2 0x392 JUMPI PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST PUSH2 0x100 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x392 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP3 PUSH1 0x24 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP3 PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP2 PUSH1 0x64 CALLDATALOAD SWAP2 PUSH1 0x84 CALLDATALOAD SWAP2 PUSH1 0xA4 CALLDATALOAD SWAP2 PUSH1 0xC4 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x392 JUMPI SWAP2 PUSH1 0xE4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x392 JUMPI PUSH2 0x45A2 SWAP2 PUSH1 0x4 ADD PUSH2 0x4383 JUMP JUMPDEST SWAP1 SWAP2 JUMP JUMPDEST SWAP2 PUSH2 0x45C3 SWAP1 PUSH2 0x40F8 SWAP5 SWAP3 DUP5 MSTORE PUSH1 0x60 PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD SWAP1 PUSH2 0x41A9 JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x4246 JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x392 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP3 PUSH1 0x24 CALLDATALOAD SWAP3 PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP2 PUSH1 0x64 CALLDATALOAD SWAP2 PUSH1 0x84 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x392 JUMPI SWAP2 PUSH1 0xA4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x392 JUMPI PUSH2 0x40F8 SWAP2 PUSH1 0x4 ADD PUSH2 0x415C JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x4653 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x4645 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x392 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x467E DUP3 PUSH2 0x410A JUMP JUMPDEST SWAP3 PUSH2 0x468C PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x4054 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x392 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x392 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x392 JUMPI PUSH2 0x40F8 SWAP3 ADD PUSH2 0x4667 JUMP JUMPDEST CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP1 JUMP JUMPDEST SWAP1 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP2 CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x392 JUMPI ADD DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x392 JUMPI PUSH1 0x20 ADD SWAP2 DUP2 PUSH1 0x5 SHL CALLDATASIZE SUB DUP4 SGT PUSH2 0x392 JUMPI JUMP JUMPDEST SWAP1 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP2 CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x392 JUMPI ADD DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x392 JUMPI PUSH1 0x20 ADD SWAP2 DUP2 CALLDATASIZE SUB DUP4 SGT PUSH2 0x392 JUMPI JUMP JUMPDEST PUSH1 0x1F DUP3 PUSH1 0x20 SWAP5 SWAP4 PUSH1 0x1F NOT SWAP4 DUP2 DUP7 MSTORE DUP7 DUP7 ADD CALLDATACOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x47BC JUMPI PUSH1 0x5 SHL ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x392 JUMPI SWAP1 JUMP JUMPDEST SWAP1 SWAP3 PUSH2 0x40F8 SWAP5 SWAP4 PUSH1 0x80 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP5 MSTORE AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE DUP2 PUSH1 0x60 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x41A9 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x392 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x4840 DUP2 PUSH2 0x4077 JUMP JUMPDEST SWAP4 PUSH2 0x484E PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x4054 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x392 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x4877 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x4869 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x392 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x392 JUMPI PUSH2 0x40F8 SWAP3 ADD PUSH2 0x4825 JUMP JUMPDEST PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x48B8 JUMPI MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x48B8 JUMPI MSTORE JUMP JUMPDEST SWAP1 PUSH2 0x40F8 SWAP2 PUSH1 0x20 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xC0 PUSH2 0x4933 PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0xE0 PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x100 DUP5 ADD SWAP1 PUSH2 0x4634 JUMP JUMPDEST SWAP3 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x4950 PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0xA0 DUP6 ADD SWAP1 PUSH2 0x48E5 JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD MLOAD ISZERO ISZERO DUP3 DUP5 ADD MSTORE ADD MLOAD SWAP1 PUSH1 0xE0 PUSH1 0x1F NOT DUP3 DUP6 SUB ADD SWAP2 ADD MSTORE PUSH2 0x4246 JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x60 DUP3 DUP5 SUB SLT PUSH2 0x392 JUMPI DUP2 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x392 JUMPI DUP5 PUSH2 0x499B SWAP2 DUP4 ADD PUSH2 0x4825 JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP3 ADD MLOAD SWAP4 PUSH1 0x40 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x392 JUMPI PUSH2 0x40F8 SWAP3 ADD PUSH2 0x4667 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x392 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x392 JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x392 JUMPI DUP3 MLOAD PUSH2 0x49EE DUP2 PUSH2 0x4077 JUMP JUMPDEST SWAP4 PUSH2 0x49FC PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x4054 JUMP JUMPDEST DUP2 DUP6 MSTORE DUP4 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x392 JUMPI DUP4 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x4A23 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x4A15 JUMP JUMPDEST SWAP1 PUSH2 0x4A4C DUP3 PUSH2 0x4077 JUMP JUMPDEST PUSH2 0x4A59 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x4054 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x4A69 DUP3 SWAP5 PUSH2 0x4077 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x48B8 JUMPI MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x48B8 JUMPI MSTORE JUMP JUMPDEST SWAP1 PUSH2 0x40F8 SWAP2 PUSH1 0x20 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xC0 PUSH2 0x4ACD PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0xE0 PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x100 DUP5 ADD SWAP1 PUSH2 0x4634 JUMP JUMPDEST SWAP3 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x4950 PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0xA0 DUP6 ADD SWAP1 PUSH2 0x4A7F JUMP JUMPDEST SWAP2 PUSH1 0x60 DUP4 DUP4 SUB SLT PUSH2 0x392 JUMPI DUP3 MLOAD SWAP3 PUSH1 0x20 DUP2 ADD MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP2 GT PUSH2 0x392 JUMPI DUP2 PUSH2 0x4B1B SWAP2 DUP5 ADD PUSH2 0x4825 JUMP JUMPDEST SWAP4 PUSH1 0x40 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x392 JUMPI PUSH2 0x40F8 SWAP3 ADD PUSH2 0x4667 JUMP JUMPDEST SWAP1 PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x48B8 JUMPI MSTORE JUMP JUMPDEST PUSH2 0x160 PUSH2 0x40F8 SWAP3 PUSH1 0x20 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND PUSH1 0x20 DUP6 ADD MSTORE PUSH2 0x4B6D PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP7 ADD SWAP1 PUSH2 0x4B32 JUMP JUMPDEST DUP1 PUSH1 0x40 DUP4 ADD MLOAD AND PUSH1 0x60 DUP6 ADD MSTORE DUP1 PUSH1 0x60 DUP4 ADD MLOAD AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH2 0x100 SWAP1 DUP2 DUP6 ADD MSTORE DUP2 ADD MLOAD SWAP1 PUSH2 0x120 SWAP2 ISZERO ISZERO DUP3 DUP6 ADD MSTORE ADD MLOAD SWAP2 PUSH2 0x140 DUP1 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x4246 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x47BC JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x40F8 SWAP2 PUSH1 0x20 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xA0 PUSH2 0x4C24 PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0xC0 PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0xE0 DUP5 ADD SWAP1 PUSH2 0x4634 JUMP JUMPDEST SWAP3 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x4C40 PUSH1 0x80 DUP3 ADD MLOAD DUP4 DUP6 ADD SWAP1 PUSH2 0x48E5 JUMP JUMPDEST ADD MLOAD SWAP1 PUSH1 0xC0 PUSH1 0x1F NOT DUP3 DUP6 SUB ADD SWAP2 ADD MSTORE PUSH2 0x4246 JUMP JUMPDEST SWAP1 PUSH2 0x40F8 SWAP2 PUSH1 0x20 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA0 PUSH2 0x4C9E PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0xC0 PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xE0 DUP5 ADD SWAP1 PUSH2 0x4634 JUMP JUMPDEST SWAP3 PUSH2 0x4C40 PUSH1 0x80 DUP3 ADD MLOAD DUP4 DUP6 ADD SWAP1 PUSH2 0x4A7F JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x4CBB CALLER PUSH2 0x4E05 JUMP JUMPDEST SWAP1 PUSH32 0x0 SWAP4 DUP5 TLOAD PUSH2 0x4DC6 JUMPI PUSH1 0x1 SWAP1 PUSH1 0x1 DUP7 TSTORE PUSH2 0x4CF4 DUP4 PUSH2 0x4077 JUMP JUMPDEST SWAP3 PUSH2 0x4D02 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x4054 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x1F NOT PUSH2 0x4D11 DUP3 PUSH2 0x4077 JUMP JUMPDEST ADD PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x4DB5 JUMPI POP POP PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x4D6C JUMPI POP POP POP POP SWAP1 PUSH0 PUSH2 0x4D61 SWAP3 SWAP5 TSTORE PUSH32 0x0 DUP1 TLOAD SWAP2 PUSH2 0x4D63 JUMPI JUMPDEST POP PUSH2 0x510C JUMP JUMPDEST JUMP JUMPDEST PUSH0 SWAP1 TSTORE PUSH0 PUSH2 0x4D5B JUMP JUMPDEST DUP1 PUSH2 0x4D99 PUSH0 DUP1 PUSH2 0x4D81 PUSH2 0x2D0 DUP10 SWAP7 DUP9 DUP11 PUSH2 0x4DEE JUMP JUMPDEST PUSH1 0x20 DUP2 MLOAD SWAP2 ADD ADDRESS GAS DELEGATECALL PUSH2 0x4D92 PUSH2 0x514F JUMP JUMPDEST SWAP1 ADDRESS PUSH2 0x56E8 JUMP JUMPDEST PUSH2 0x4DA3 DUP3 DUP9 PUSH2 0x4BD0 JUMP JUMPDEST MSTORE PUSH2 0x4DAE DUP2 DUP8 PUSH2 0x4BD0 JUMP JUMPDEST POP ADD PUSH2 0x4D1F JUMP JUMPDEST DUP1 PUSH1 0x60 PUSH1 0x20 DUP1 SWAP4 DUP10 ADD ADD MSTORE ADD PUSH2 0x4D14 JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP3 LT ISZERO PUSH2 0x47BC JUMPI PUSH2 0x45A2 SWAP2 PUSH1 0x5 SHL DUP2 ADD SWAP1 PUSH2 0x473B JUMP JUMPDEST SWAP1 PUSH0 SWAP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 TLOAD AND ISZERO PUSH2 0x4E3D JUMPI POP POP JUMP JUMPDEST SWAP1 SWAP2 SWAP3 POP TSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x4DC6 JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x4EA6 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP2 GT PUSH2 0x4EE6 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0xA0 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 DUP2 SELFBALANCE LT PUSH2 0x50E4 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x392 JUMPI PUSH1 0x40 SWAP2 DUP3 MLOAD SWAP2 PUSH32 0xD0E30DB000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH0 SWAP3 PUSH0 DUP2 PUSH1 0x4 DUP2 DUP10 DUP12 GAS CALL DUP1 ISZERO PUSH2 0x50DA JUMPI PUSH2 0x50C7 JUMPI JUMPDEST POP AND SWAP3 DUP3 MLOAD SWAP5 PUSH1 0x20 SWAP6 DUP7 DUP2 ADD SWAP1 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH1 0x24 DUP3 ADD MSTORE DUP4 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH1 0x80 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF11 JUMPI DUP7 MSTORE MLOAD PUSH2 0x4FE7 SWAP2 DUP6 SWAP2 DUP3 SWAP2 DUP3 DUP7 GAS CALL PUSH2 0x4FE0 PUSH2 0x514F JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x56E8 JUMP JUMPDEST DUP1 MLOAD DUP8 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x50A2 JUMPI JUMPDEST POP POP SWAP1 POP PUSH2 0x5077 JUMPI SWAP1 PUSH1 0x44 DUP7 SWAP3 DUP5 DUP7 MLOAD SWAP8 DUP9 SWAP5 DUP6 SWAP4 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x506D JUMPI POP POP PUSH2 0x5049 JUMPI POP POP JUMP JUMPDEST DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x5066 JUMPI JUMPDEST PUSH2 0x505C DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x392 JUMPI JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x5052 JUMP JUMPDEST MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 DUP3 REVERT JUMPDEST DUP4 DUP1 SWAP3 SWAP4 POP ADD SUB SLT PUSH2 0x50C3 JUMPI DUP7 ADD MLOAD DUP1 ISZERO SWAP1 DUP2 ISZERO SUB PUSH2 0x50C3 JUMPI DUP1 DUP8 PUSH0 PUSH2 0x4FF4 JUMP JUMPDEST DUP4 DUP1 REVERT JUMPDEST PUSH2 0x50D2 SWAP2 SWAP4 POP PUSH2 0x4007 JUMP JUMPDEST PUSH0 SWAP2 PUSH0 PUSH2 0x4F72 JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0xA01A9DF600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SELFBALANCE DUP1 ISZERO PUSH2 0x514B JUMPI PUSH32 0x0 TLOAD PUSH2 0x514B JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x4D61 SWAP3 AND PUSH2 0x566C JUMP JUMPDEST POP POP JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x5179 JUMPI RETURNDATASIZE SWAP1 PUSH2 0x5160 DUP3 PUSH2 0x410A JUMP JUMPDEST SWAP2 PUSH2 0x516E PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x4054 JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH6 0xFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x392 JUMPI JUMP JUMPDEST SWAP2 PUSH1 0x44 SWAP3 SWAP4 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 SWAP5 DUP6 SWAP3 DUP3 DUP1 DUP6 MLOAD SWAP10 DUP11 SWAP6 DUP7 SWAP5 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x4 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x5261 JUMPI PUSH0 SWAP4 PUSH0 SWAP6 PUSH2 0x522A JUMPI JUMPDEST POP POP PUSH2 0x5227 PUSH2 0x5220 DUP6 SWAP5 PUSH2 0x4A42 JUMP JUMPDEST SWAP5 DUP6 PUSH2 0x4BD0 JUMP JUMPDEST MSTORE JUMP JUMPDEST DUP1 SWAP3 SWAP6 POP DUP2 SWAP5 POP RETURNDATASIZE DUP4 GT PUSH2 0x525A JUMPI JUMPDEST PUSH2 0x5243 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x392 JUMPI PUSH1 0x20 DUP3 MLOAD SWAP3 ADD MLOAD SWAP3 PUSH0 DUP1 PUSH2 0x5211 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x5239 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0xE0 DUP2 ADD CALLDATALOAD TIMESTAMP GT PUSH2 0x541B JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x2 DUP4 LT ISZERO PUSH2 0x392 JUMPI PUSH1 0x40 SWAP3 PUSH2 0x529B DUP3 DUP6 ADD PUSH2 0x46D3 JUMP JUMPDEST SWAP3 DUP1 PUSH1 0x60 SWAP5 DUP6 SWAP4 DUP5 DUP7 ADD PUSH2 0x52AE SWAP1 PUSH2 0x46D3 JUMP JUMPDEST SWAP6 PUSH2 0x52BB PUSH1 0x80 DUP3 ADD PUSH2 0x46D3 JUMP JUMPDEST SWAP1 DUP5 PUSH2 0x52CB PUSH2 0x120 DUP4 ADD DUP4 PUSH2 0x473B JUMP JUMPDEST SWAP2 SWAP1 DUP13 MLOAD SWAP6 PUSH2 0x52D9 DUP8 PUSH2 0x3FEB JUMP JUMPDEST DUP7 MSTORE DUP2 PUSH1 0x20 DUP8 ADD SWAP8 AND DUP8 MSTORE DUP2 DUP14 DUP8 ADD SWAP12 AND DUP12 MSTORE DUP2 DUP11 DUP8 ADD SWAP6 AND DUP6 MSTORE PUSH1 0x80 DUP7 ADD SWAP3 PUSH1 0xA0 DUP6 ADD CALLDATALOAD DUP5 MSTORE PUSH1 0xA0 DUP8 ADD SWAP5 PUSH1 0xC0 ADD CALLDATALOAD DUP6 MSTORE CALLDATASIZE SWAP1 PUSH2 0x5316 SWAP3 PUSH2 0x4126 JUMP JUMPDEST SWAP4 PUSH1 0xC0 DUP7 ADD SWAP5 DUP6 MSTORE DUP2 DUP14 MLOAD SWAP12 DUP13 SWAP11 DUP12 SWAP10 DUP11 SWAP10 PUSH32 0x2BFB780C00000000000000000000000000000000000000000000000000000000 DUP12 MSTORE PUSH1 0x4 DUP12 ADD PUSH1 0x20 SWAP1 MSTORE PUSH1 0x24 DUP12 ADD SWAP1 MLOAD SWAP1 PUSH2 0x5363 SWAP2 PUSH2 0x4B32 JUMP JUMPDEST MLOAD AND PUSH1 0x44 DUP10 ADD MSTORE MLOAD AND PUSH1 0x64 DUP8 ADD MSTORE MLOAD AND PUSH1 0x84 DUP6 ADD MSTORE MLOAD PUSH1 0xA4 DUP5 ADD MSTORE MLOAD PUSH1 0xC4 DUP4 ADD MSTORE MLOAD PUSH1 0xE4 DUP3 ADD PUSH1 0xE0 SWAP1 MSTORE PUSH2 0x104 DUP3 ADD PUSH2 0x539B SWAP2 PUSH2 0x4246 JUMP JUMPDEST SUB SWAP2 PUSH32 0x0 AND GAS SWAP1 PUSH0 SWAP2 CALL SWAP1 DUP2 ISZERO PUSH2 0x5261 JUMPI PUSH0 SWAP4 PUSH0 SWAP4 PUSH0 SWAP4 PUSH2 0x53DE JUMPI JUMPDEST POP POP POP SWAP1 SWAP2 SWAP3 JUMP JUMPDEST SWAP3 POP SWAP3 POP DUP1 SWAP4 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x5414 JUMPI JUMPDEST PUSH2 0x53F8 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x392 JUMPI DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD SWAP2 SWAP1 SWAP3 ADD MLOAD PUSH0 DUP1 DUP1 PUSH2 0x53D6 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x53EE JUMP JUMPDEST PUSH32 0xE08B8AF000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP3 DUP3 ISZERO PUSH2 0x556F JUMPI DUP1 PUSH2 0x553A JUMPI JUMPDEST ISZERO PUSH2 0x54A1 JUMPI POP PUSH2 0x4D61 SWAP2 PUSH32 0x0 PUSH32 0x0 PUSH2 0x5575 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP1 EXTCODESIZE ISZERO PUSH2 0x392 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP4 SWAP1 SWAP3 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE PUSH0 SWAP1 DUP3 SWAP1 PUSH1 0x64 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL DUP1 ISZERO PUSH2 0x387 JUMPI PUSH2 0x5531 JUMPI POP JUMP JUMPDEST PUSH2 0x4D61 SWAP1 PUSH2 0x4007 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP1 DUP3 AND EQ PUSH2 0x5450 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST SWAP4 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP1 EXTCODESIZE ISZERO PUSH2 0x392 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 DUP9 DUP2 SWAP13 AND SWAP7 DUP8 PUSH1 0x4 DUP5 ADD MSTORE ADDRESS PUSH1 0x24 DUP5 ADD MSTORE DUP11 PUSH1 0x44 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x387 JUMPI PUSH2 0x5659 JUMPI JUMPDEST POP DUP1 DUP7 SWAP2 EXTCODESIZE ISZERO PUSH2 0x5655 JUMPI DUP2 SWAP1 PUSH1 0x24 PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x2E1A7D4D00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x564A JUMPI PUSH2 0x5632 JUMPI JUMPDEST POP PUSH2 0x4D61 SWAP4 SWAP5 POP AND PUSH2 0x566C JUMP JUMPDEST PUSH2 0x563C DUP7 SWAP2 PUSH2 0x4007 JUMP JUMPDEST PUSH2 0x5646 JUMPI DUP5 PUSH2 0x5625 JUMP JUMPDEST DUP5 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP9 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST PUSH2 0x5664 SWAP2 SWAP7 POP PUSH2 0x4007 JUMP JUMPDEST PUSH0 SWAP5 PUSH0 PUSH2 0x55DA JUMP JUMPDEST DUP2 SELFBALANCE LT PUSH2 0x56BC JUMPI PUSH0 DUP1 DUP1 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 SWAP5 AND GAS CALL PUSH2 0x568C PUSH2 0x514F JUMP JUMPDEST POP ISZERO PUSH2 0x5694 JUMPI JUMP JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0xCD78605900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE ADDRESS PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x56FD JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x5694 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x5743 JUMPI JUMPDEST PUSH2 0x570E JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x5706 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 JUMPI 0xF6 0x22 0xC4 CREATE2 GASPRICE PUSH22 0x9F8550565D430C6F6C937500A4B88DCFAFC92CA53C12 0xC 0x2D 0x25 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1180:38695:64:-:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1180:38695:64;;;;;;;;;;;;;;1487:71:66;1180:38695:64;;;;;:::i;:::-;;;;-1:-1:-1;;;1180:38695:64;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;1180:38695:64;;;;1487:71:66;:::i;:::-;1180:38695:64;1487:71:66;409:14:72;;1180:38695:64;;;;;;;-1:-1:-1;1180:38695:64;;;;;;;;;;;;;;-1:-1:-1;1180:38695:64;;;;;;;;;;;-1:-1:-1;1180:38695:64;;;;;;;;;;;;;;2796:83:65;1180:38695:64;;;;-1:-1:-1;1180:38695:64;;;;;;;;;;;;;;;;;-1:-1:-1;1180:38695:64;;;;;;;:::i;:::-;;;;-1:-1:-1;;;1180:38695:64;;;;-1:-1:-1;;;1180:38695:64;;;;;;:::i;:::-;;;;;;;2796:83:65;:::i;:::-;;;3976:12;;3998:18;;;;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;409:14:72;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2796:83:65;1180:38695:64;;;;;;;;;;3976:12:65;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1180:38695:64;;;;;;;;;;-1:-1:-1;1180:38695:64;;;-1:-1:-1;1180:38695:64;;-1:-1:-1;1180:38695:64;;;;;;;;;2796:83:65;1180:38695:64;;;;;;;;;;;;;;-1:-1:-1;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1180:38695:64;;;-1:-1:-1;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1180:38695:64;;;;;;;;;;;;;;;;;;-1:-1:-1;1180:38695:64;;;;;-1:-1:-1;1180:38695:64;;;;;;;;;;;;-1:-1:-1;1180:38695:64;;;;;-1:-1:-1;1180:38695:64;;-1:-1:-1;1180:38695:64;;;;;;;;;-1:-1:-1;;;;;1180:38695:64;;;;;;;:::o;:::-;;;;;-1:-1:-1;;1180:38695:64;;;;-1:-1:-1;;;;;1180:38695:64;;;;;;;;;;:::o;1276:306:47:-;;1461:67;1180:38695:64;1461:67:47;1276:306;1180:38695:64;;1461:67:47;;;;;;;1180:38695:64;;;;;;;;;;;;;;;;;-1:-1:-1;;;1180:38695:64;;;;;;;;;;;;;;;-1:-1:-1;1180:38695:64;;;;1461:67:47;;;;;;;;;:::i;:::-;1180:38695:64;1451:78:47;;-1:-1:-1;;1180:38695:64;;;;;;;;;1432:103:47;1461:67;1432:103;;1180:38695:64;;;1461:67:47;1432:103;;;;;:::i;:::-;1180:38695:64;;1405:144:47;;-1:-1:-1;;1405:170:47;;1276:306::o;1180:38695:64:-;;;;-1:-1:-1;1180:38695:64;;;;;-1:-1:-1;1180:38695:64"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":16343,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_address_52870":{"entryPoint":16255,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_52892":{"entryPoint":16277,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_52908":{"entryPoint":16299,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_52945":{"entryPoint":16321,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_addresst_array_uint256_dynt_uint256t_boolt_bytes":{"entryPoint":16860,"id":null,"parameterSlots":1,"returnSlots":5},"abi_decode_addresst_contract_IERC20t_contract_IERC20t_uint256t_addresst_bytes":{"entryPoint":17126,"id":null,"parameterSlots":1,"returnSlots":6},"abi_decode_addresst_contract_IERC20t_contract_IERC20t_uint256t_uint256t_uint256t_boolt_bytes_calldata":{"entryPoint":17709,"id":null,"parameterSlots":1,"returnSlots":9},"abi_decode_addresst_contract_IERC20t_uint256t_addresst_bytes":{"entryPoint":17458,"id":null,"parameterSlots":1,"returnSlots":5},"abi_decode_addresst_uint256t_addresst_bytes":{"entryPoint":17044,"id":null,"parameterSlots":1,"returnSlots":4},"abi_decode_addresst_uint256t_array_uint256_dynt_boolt_bytes":{"entryPoint":17553,"id":null,"parameterSlots":1,"returnSlots":5},"abi_decode_addresst_uint256t_contract_IERC20t_uint256t_boolt_bytes":{"entryPoint":17873,"id":null,"parameterSlots":1,"returnSlots":6},"abi_decode_array_bytes_calldata_dyn_calldata":{"entryPoint":17234,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_array_contract_IERC20_dyn_fromMemory":{"entryPoint":18872,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn":{"entryPoint":16605,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn_fromMemory":{"entryPoint":18566,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn_memory_ptr_fromMemory":{"entryPoint":18469,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dynt_uint256t_bytes_fromMemory":{"entryPoint":18799,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_available_length_array_uint256_dyn":{"entryPoint":16527,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_available_length_bytes":{"entryPoint":16678,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_bool":{"entryPoint":16635,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bytes":{"entryPoint":16732,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bytes_calldata":{"entryPoint":17283,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bytes_fromMemory":{"entryPoint":18023,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bytes_memory_ptr_fromMemory":{"entryPoint":18093,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_InitializeHookParams_calldata":{"entryPoint":16759,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_struct_SwapSingleTokenHookParams_calldata":{"entryPoint":17658,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint256t_array_uint256_dynt_bytes_fromMemory":{"entryPoint":19178,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_uint48":{"entryPoint":20862,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address_address_uint160_address":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_address_address_uint256_array_uint256_dyn":{"entryPoint":18422,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_array_bytes_dyn":{"entryPoint":17329,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":16809,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn_to_array_uint256_dyn":{"entryPoint":17972,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn_uint256_bytes":{"entryPoint":17003,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_bytes":{"entryPoint":16966,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bytes_calldata":{"entryPoint":18316,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_contract_IERC20_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_contract_IERC20_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_enum_AddLiquidityKind":{"entryPoint":18661,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_enum_RemoveLiquidityKind":{"entryPoint":19071,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_enum_SwapKind":{"entryPoint":19250,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_struct_AddLiquidityHookParams":{"entryPoint":18674,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_AddLiquidityParams":{"entryPoint":19428,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_RemoveLiquidityHookParams":{"entryPoint":19084,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_RemoveLiquidityParams":{"entryPoint":19540,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_SwapSingleTokenHookParams":{"entryPoint":19263,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_uint256_array_uint256_dyn_bytes":{"entryPoint":17830,"id":null,"parameterSlots":4,"returnSlots":1},"access_calldata_tail_array_contract_IERC20_dyn_calldata":{"entryPoint":18151,"id":null,"parameterSlots":2,"returnSlots":2},"access_calldata_tail_bytes_calldata":{"entryPoint":18235,"id":null,"parameterSlots":2,"returnSlots":2},"allocate_and_zero_memory_array_array_uint256_dyn":{"entryPoint":19010,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_contract_IERC20_dyn":{"entryPoint":16503,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":16650,"id":null,"parameterSlots":1,"returnSlots":1},"calldata_array_index_access_bytes_calldata_dyn_calldata":{"entryPoint":19950,"id":null,"parameterSlots":3,"returnSlots":2},"calldata_array_index_access_contract_IERC20_dyn_calldata":{"entryPoint":18348,"id":null,"parameterSlots":3,"returnSlots":1},"extract_returndata":{"entryPoint":20815,"id":null,"parameterSlots":0,"returnSlots":1},"finalize_allocation":{"entryPoint":16468,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_52872":{"entryPoint":16363,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_52874":{"entryPoint":16391,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_52881":{"entryPoint":16411,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_52883":{"entryPoint":16440,"id":null,"parameterSlots":1,"returnSlots":0},"fun_ensureOnlyVault":{"entryPoint":20084,"id":28148,"parameterSlots":0,"returnSlots":0},"fun_getSingleInputArrayAndTokenIndex":{"entryPoint":20881,"id":19026,"parameterSlots":3,"returnSlots":2},"fun_nonReentrantBefore":{"entryPoint":20039,"id":9916,"parameterSlots":0,"returnSlots":0},"fun_returnEth":{"entryPoint":20748,"id":18982,"parameterSlots":1,"returnSlots":0},"fun_saveSender":{"entryPoint":19973,"id":19282,"parameterSlots":1,"returnSlots":1},"fun_sendTokenOut":{"entryPoint":21571,"id":19126,"parameterSlots":4,"returnSlots":0},"fun_sendValue":{"entryPoint":22124,"id":40518,"parameterSlots":2,"returnSlots":0},"fun_swapHook":{"entryPoint":21099,"id":17706,"parameterSlots":1,"returnSlots":3},"fun_toUint160":{"entryPoint":20178,"id":43591,"parameterSlots":1,"returnSlots":1},"fun_unwrapWethAndTransferToSender":{"entryPoint":21877,"id":31146,"parameterSlots":4,"returnSlots":0},"fun_verifyCallResultFromTarget":{"entryPoint":22248,"id":40673,"parameterSlots":3,"returnSlots":1},"fun_wrapEthAndSettle":{"entryPoint":20246,"id":31107,"parameterSlots":3,"returnSlots":0},"memory_array_index_access_uint256_dyn":{"entryPoint":19408,"id":null,"parameterSlots":2,"returnSlots":1},"modifier_saveSenderAndManageEth":{"entryPoint":19632,"id":18636,"parameterSlots":2,"returnSlots":1},"read_from_calldatat_address":{"entryPoint":18131,"id":null,"parameterSlots":1,"returnSlots":1},"read_from_calldatat_bool":{"entryPoint":18409,"id":null,"parameterSlots":1,"returnSlots":1},"write_to_memory_enum_AddLiquidityKind":{"entryPoint":18604,"id":null,"parameterSlots":2,"returnSlots":0},"write_to_memory_enum_RemoveLiquidityKind":{"entryPoint":19059,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"18582":[{"length":32,"start":19646},{"length":32,"start":20757}],"18585":[{"length":32,"start":34},{"length":32,"start":6158},{"length":32,"start":6334},{"length":32,"start":7394},{"length":32,"start":7478},{"length":32,"start":7979},{"length":32,"start":8874},{"length":32,"start":9254},{"length":32,"start":13826},{"length":32,"start":15093},{"length":32,"start":15477},{"length":32,"start":21629},{"length":32,"start":21830}],"18588":[{"length":32,"start":7612},{"length":32,"start":8920},{"length":32,"start":11923},{"length":32,"start":12377},{"length":32,"start":12635},{"length":32,"start":15138}],"19225":[{"length":32,"start":1261},{"length":32,"start":2462},{"length":32,"start":3026},{"length":32,"start":4379},{"length":32,"start":8363},{"length":32,"start":10523},{"length":32,"start":19764},{"length":32,"start":19978}],"28110":[{"length":32,"start":789},{"length":32,"start":1164},{"length":32,"start":1562},{"length":32,"start":1962},{"length":32,"start":2366},{"length":32,"start":2971},{"length":32,"start":3391},{"length":32,"start":3729},{"length":32,"start":4009},{"length":32,"start":4785},{"length":32,"start":5007},{"length":32,"start":5750},{"length":32,"start":6872},{"length":32,"start":7192},{"length":32,"start":7361},{"length":32,"start":7648},{"length":32,"start":8073},{"length":32,"start":8452},{"length":32,"start":10078},{"length":32,"start":10427},{"length":32,"start":10858},{"length":32,"start":11063},{"length":32,"start":11522},{"length":32,"start":13892},{"length":32,"start":14529},{"length":32,"start":14661},{"length":32,"start":16134},{"length":32,"start":20094},{"length":32,"start":20959},{"length":32,"start":21407},{"length":32,"start":21596},{"length":32,"start":21676}]},"linkReferences":{},"object":"60806040526004361015610072575b3615610018575f80fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361004a57005b7f0540ddf6000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f3560e01c8063026b3d9514613d25578063086fad661461391d57806308c04793146137ff5780630ca078ec146137675780630f71088814613626578063107c279f146135e3578063175d44081461350457806319c6989f14612eb75780631bbf2e2314612e745780631d56798d14612cd957806323b3924114612ad75780633ebc54e51461295a578063452db952146127d657806351682750146126c357806353d0bb981461260e57806354fd4d50146124d15780635b343791146120dc5780635e01eb5a146120975780635f9815ff14611f5457806368a24fe014611c59578063724dba3314611b4057806372657d17146119f5578063750283bc146119785780637b03c7ba1461164857806382bf2b241461157457806382cd54fb1461132c57806394e86ef8146111a15780639de9051814610f82578063ac9650d814610f3e578063b037ed3614610dad578063b24bd57114610c63578063be5ae84114610c0e578063bf6ee3fd14610a75578063c08bc851146109dd578063c330c7be14610816578063da001f7d14610685578063e7326def14610534578063ecb2182c146103965763efd85f140361000e57346103925761023136614177565b610239614e74565b6001600160a01b039061024e602082016146d3565b610257826146d3565b9261026560408401846146e7565b9093608081013593600585101561039257836102d0610311966060856102bb5f9c9b6102ab99878f9e61029e60c06102d79d018761473b565b9a909b6040519e8f614038565b168d521660208c0152369161408f565b604089015201356060870152608086016148ac565b3691614126565b60a08201526040519485809481937f4af29ec400000000000000000000000000000000000000000000000000000000835260048301614be4565b03927f0000000000000000000000000000000000000000000000000000000000000000165af18015610387575f905f925f9161035d575b50610359906040519384938461426b565b0390f35b9050610359925061038091503d805f833e6103788183614054565b81019061496f565b9092610348565b6040513d5f823e3d90fd5b5f80fd5b61044c6103c55f61043e816104886103ad366145d1565b97939a92999094916103be33614e05565b9a83615191565b9790946001600160a01b039b8c96604051946103e086613feb565b33865260209e8f9116908601526040850152606084015260016080840152151560a083015260c08201526040519283917f7b03c7ba000000000000000000000000000000000000000000000000000000008c84015260248301614a8c565b03601f198101835282614054565b6040519586809481937f48c894910000000000000000000000000000000000000000000000000000000083528b60048401526024830190614246565b03927f0000000000000000000000000000000000000000000000000000000000000000165af1918215610387576104db926104d3915f91610512575b50858082518301019101614aea565b509050614bd0565b51906104ea575b604051908152f35b5f7f00000000000000000000000000000000000000000000000000000000000000005d6104e2565b61052e91503d805f833e6105268183614054565b8101906146ad565b866104c4565b61043e6105da5f8061061661056561054b366145d1565b9161055e9b959b9a949691939a33614e05565b9a8c615191565b50916001600160a01b03956040519361057d85613feb565b3385528760209d168d8601526040850152606084015260026080840152151560a083015260c08201526040519283917f7b03c7ba000000000000000000000000000000000000000000000000000000008b84015260248301614a8c565b6040519485809481937f48c894910000000000000000000000000000000000000000000000000000000083528a60048401526024830190614246565b03927f0000000000000000000000000000000000000000000000000000000000000000165af180156103875761065c915f9161066b575b50838082518301019101614aea565b5050906104ea57604051908152f35b61067f91503d805f833e6105268183614054565b8461064d565b346103925760806003193601126103925761069e613f7f565b67ffffffffffffffff602435818111610392576106bf9036906004016140dd565b906106c8613fc1565b606435918211610392576107a65f929161043e61076a6106f66106f08796369060040161415c565b93614e05565b966001600160a01b03936040519161070d83613feb565b3083528560209b168b8401526040830152866060830152600160808301528660a083015260c08201526040519283917fefd85f14000000000000000000000000000000000000000000000000000000008b840152602483016148f2565b6040519485809481937fedfa35680000000000000000000000000000000000000000000000000000000083528a60048401526024830190614246565b03927f0000000000000000000000000000000000000000000000000000000000000000165af18015610387576107ec915f916107fc575b5083808251830101910161496f565b509190506104ea57604051908152f35b61081091503d805f833e6105268183614054565b846107dd565b346103925760a06003193601126103925761082f613f7f565b67ffffffffffffffff604435818111610392576108509036906004016140dd565b91610859613f95565b91608435908111610392575f9361043e6108fd869461088861088261093a96369060040161415c565b97614e05565b966001600160a01b039485604051936108a085613feb565b30855216602084015260408301526024356060830152600360808301528660a083015260c08201526040519283917fb24bd57100000000000000000000000000000000000000000000000000000000602084015260248301614a8c565b6040519586809481937fedfa3568000000000000000000000000000000000000000000000000000000008352602060048401526024830190614246565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19182156103875761035992610986915f916109c3575b5060208082518301019101614aea565b9093919261099b575b604051938493846145a6565b5f7f00000000000000000000000000000000000000000000000000000000000000005d61098f565b6109d791503d805f833e6105268183614054565b84610976565b61043e6105da5f806107a66109f1366141dc565b610a019993919892949933614e05565b986001600160a01b039560405193610a1885613feb565b3385528760209d168d8601526040850152606084015260016080840152151560a083015260c08201526040519283917f5b343791000000000000000000000000000000000000000000000000000000008b840152602483016148f2565b608060031936011261039257610a89613f7f565b67ffffffffffffffff9060243582811161039257610aab9036906004016140dd565b906044359283151580940361039257606435908111610392575f9261043e610b5a8594610adf610b9795369060040161415c565b610ae833614e05565b986001600160a01b03958660405194610b0086613feb565b33865216602085015260408401528760608401526003608084015260a083015260c08201526040519283917f5b343791000000000000000000000000000000000000000000000000000000006020840152602483016148f2565b6040519485809481937f48c89491000000000000000000000000000000000000000000000000000000008352602060048401526024830190614246565b03927f0000000000000000000000000000000000000000000000000000000000000000165af1801561038757610bf4575b50610bcf57005b5f7f00000000000000000000000000000000000000000000000000000000000000005d005b610c07903d805f833e6105268183614054565b5081610bc8565b34610392576020610c36610c21366144fa565b610c29614e47565b610c31614e74565b61526b565b50505f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051908152f35b3461039257610c7136614177565b610c79614e74565b6001600160a01b03610c8d602083016146d3565b610c96836146d3565b91610ca460408501856146e7565b9490608082013593600485101561039257836102d0610d3b96610cf3610d01955f9b606089878f9e61029e60c0610cdc9e018461473b565b168d521660208c0152013560408a0152369161408f565b606087015260808601614a73565b60a08201526040519485809481937f2145789700000000000000000000000000000000000000000000000000000000835260048301614c54565b03927f0000000000000000000000000000000000000000000000000000000000000000165af18015610387575f905f925f91610d83575b5061035990604051938493846145a6565b90506103599250610da691503d805f833e610d9e8183614054565b810190614aea565b9092610d72565b3461039257604060031936011261039257610dc6613f7f565b6001600160a01b0360405190806020937f5f9815ff000000000000000000000000000000000000000000000000000000008585015216602483015230604483015260243560648301526064825260a082019082821067ffffffffffffffff831117610f1157815f91816040527fedfa35680000000000000000000000000000000000000000000000000000000082528560a486015281837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6087610e8c60c4820182614246565b0301927f0000000000000000000000000000000000000000000000000000000000000000165af190811561038757610ed5925f92610eea575b5050828082518301019101614886565b906103596040519282849384528301906141a9565b610f0a925060a0903d90815f853e610f028285614054565b0101906146ad565b8380610ec5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60206003193601126103925760043567ffffffffffffffff811161039257610f76610f70610359923690600401614352565b90614cb0565b604051918291826143b1565b3461039257610f9c610f9336614294565b92919390614e05565b916001600160a01b0390817f00000000000000000000000000000000000000000000000000000000000000001691604051937fca4f280300000000000000000000000000000000000000000000000000000000855216928360048201525f81602481865afa908115610387575f9161117f575b50519461101b86614a42565b955f5b81811061115a5750505f9261043e61109c8886956110d8956040519261104384613feb565b30845260209a8b850152604084015260608301528660808301528660a083015260c08201526040519283917fefd85f14000000000000000000000000000000000000000000000000000000008a840152602483016148f2565b6040519485809481937fedfa35680000000000000000000000000000000000000000000000000000000083528960048401526024830190614246565b03925af18015610387576110fc915f91611140575b5082808251830101910161496f565b505091611118575b6103596040519282849384528301906141a9565b5f7f00000000000000000000000000000000000000000000000000000000000000005d611104565b61115491503d805f833e6105268183614054565b846110ed565b806fffffffffffffffffffffffffffffffff6111786001938b614bd0565b520161101e565b61119b91503d805f833e6111938183614054565b8101906149b8565b8661100f565b6111aa3661452d565b949095939193336111ba90614e05565b97604051996111c88b61401b565b338b5260208b01600190526001600160a01b031660408b01526001600160a01b031660608a01526001600160a01b0316608089015260a088015260c087015260e08601521515610100850152369061121f92614126565b6101208301526040517f68a24fe000000000000000000000000000000000000000000000000000000000602082015291829061125e9060248301614b3f565b03601f19810183526112709083614054565b60405180927f48c894910000000000000000000000000000000000000000000000000000000082526004820160209052602482016112ad91614246565b03827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691815a5f948591f1918215610387575f92611310575b5060208280518101031261039257602080920151906104ea57604051908152f35b6113259192503d805f833e6105268183614054565b90826112ef565b3461039257608060031936011261039257611345613f7f565b61134d613fab565b906064359067ffffffffffffffff8211610392576113726113e89236906004016140dd565b9061137b614e47565b611383614e74565b6001600160a01b035f817f00000000000000000000000000000000000000000000000000000000000000001693604051809681927fa07d60400000000000000000000000000000000000000000000000000000000083526044358a88600486016147f6565b038183875af1938415610387575f94611550575b5080604051927fca4f28030000000000000000000000000000000000000000000000000000000084521660048301525f82602481865afa918215610387575f92611534575b505f5b82518110156114f0576114578186614bd0565b519081611469575b6001915001611444565b826114748286614bd0565b5116853b15610392576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152908816602482015260448101929092525f8260648183895af1918215610387576001926114e1575b5061145f565b6114ea90614007565b876114db565b610359856114fd8861510c565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d6040519182916020835260208301906141a9565b6115499192503d805f833e6111938183614054565b9085611441565b61156d9194503d805f833e6115658183614054565b810190614886565b92856113fc565b5f61043e8161093a61160b61158836614491565b9061159898949295939833614e05565b986001600160a01b039687604051956115b087613feb565b3387521660208601526040850152606084015260036080840152151560a083015260c08201526040519283917f7b03c7ba00000000000000000000000000000000000000000000000000000000602084015260248301614a8c565b6040519586809481937f48c89491000000000000000000000000000000000000000000000000000000008352602060048401526024830190614246565b346103925761165636614177565b61165e614e47565b611666614e74565b6001600160a01b039060208101907f0000000000000000000000000000000000000000000000000000000000000000908382166116a2846146d3565b946116ac836146d3565b6116b960408501856146e7565b979091608086013590600482101561039257846102d061171593610cf35f9761174d9e6116ea8d60c081019061473b565b969097816040519b6116fb8d614038565b168b521660208a015260608d013560408a0152369161408f565b60a0820152604051809881927f2145789700000000000000000000000000000000000000000000000000000000835260048301614c54565b038183865af1908115610387575f955f975f9361194f575b5061176f906146d3565b9681604051987fca4f2803000000000000000000000000000000000000000000000000000000008a521660048901525f88602481875afa978815610387575f98611933575b50919560a0850192905f5b89518110156118ee576117d28184614bd0565b519081156118e557846117e5828d614bd0565b51166117f0876147e9565b806118ba575b15611838575061183260019261180b8a6146d3565b8b7f0000000000000000000000000000000000000000000000000000000000000000615575565b016117bf565b611841896146d3565b883b15610392576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529116602482015260448101929092525f82606481838b5af1918215610387576001926118ab575b50611832565b6118b490614007565b8b6118a5565b50857f00000000000000000000000000000000000000000000000000000000000000001681146117f6565b60019150611832565b50610359886119046118ff896146d3565b61510c565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051938493846145a6565b6119489198503d805f833e6111938183614054565b96886117b4565b90925061196c91975061176f96503d805f833e610d9e8183614054565b97919690979290611765565b6119813661452d565b9490959391933361199190614e05565b976040519961199f8b61401b565b338b5260208b015f90526001600160a01b031660408b01526001600160a01b031660608a01526001600160a01b0316608089015260a088015260c087015260e08601521515610100850152369061121f92614126565b60c060031936011261039257611a09613f7f565b611a11613fab565b611a196140fb565b60a4359067ffffffffffffffff8211610392575f611ad4611a3f8294369060040161415c565b9261043e61044c611a5d611a5233614e05565b98604435908b615191565b966001600160a01b039460405192611a7484613feb565b3384528660209d168d8501526040840152606435606084015260026080840152151560a083015260c08201526040519283917f5b343791000000000000000000000000000000000000000000000000000000008c840152602483016148f2565b03927f0000000000000000000000000000000000000000000000000000000000000000165af1918215610387576104db92611b1f915f91611b26575b5085808251830101910161496f565b5050614bd0565b611b3a91503d805f833e6105268183614054565b86611b10565b61043e611bd85f80611c14611b54366141dc565b611b65999391999892949833614e05565b996001600160a01b039560405193611b7c85613feb565b3385528760209c168c86015260408501526060840152876080840152151560a083015260c08201526040519283917f5b343791000000000000000000000000000000000000000000000000000000008a840152602483016148f2565b6040519485809481937f48c894910000000000000000000000000000000000000000000000000000000083528960048401526024830190614246565b03927f0000000000000000000000000000000000000000000000000000000000000000165af18015610387576110fc915f91611140575082808251830101910161496f565b3461039257611c67366144fa565b611c6f614e47565b611c77614e74565b611c808161526b565b611c8e6060859395016146d3565b90611c98836146d3565b94610100840195611ca8876147e9565b80611f1f575b15611d9c575094611d2b91611d066020977f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614f16565b611d0f856146d3565b91611d25611d1f608088016146d3565b916147e9565b92615443565b6001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016911614611d8a575b505f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051908152f35b6118ff611d96916146d3565b82611d5e565b81611db0575b5050602094611d2b91611d06565b6001600160a01b0390817f00000000000000000000000000000000000000000000000000000000000000001691807f00000000000000000000000000000000000000000000000000000000000000001691611e0a85614ed2565b93803b15610392576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152848316602482015294821660448601529187161660648401525f908390608490829084905af1908115610387575f93602093611ed093611f10575b506040519485809481937f15afd4090000000000000000000000000000000000000000000000000000000083528a60048401602090939291936001600160a01b0360408201951681520152565b03925af1801561038757611ee5575b80611da2565b602090813d8311611f09575b611efb8183614054565b810103126103925785611edf565b503d611ef1565b611f1990614007565b8a611e83565b506001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001690851614611cae565b3461039257606060031936011261039257611f6d613f7f565b611f75613fab565b611f7d614e74565b6001600160a01b0390817f000000000000000000000000000000000000000000000000000000000000000016604051927fca4f2803000000000000000000000000000000000000000000000000000000008452841660048401525f83602481845afa938415610387575f611ffe612039968296839161207d575b5051614a42565b93604051968795869485937fa07d604000000000000000000000000000000000000000000000000000000000855260443591600486016147f6565b03925af1801561038757610359915f91612063575b506040519182916020835260208301906141a9565b61207791503d805f833e6115658183614054565b8261204e565b61209191503d8085833e6111938183614054565b88611ff7565b34610392575f6003193601126103925760207f00000000000000000000000000000000000000000000000000000000000000005c6001600160a01b0360405191168152f35b34610392576120ea36614177565b6120f2614e47565b6120fa614e74565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008181169260209081810190612137826146d3565b95612141826146d3565b9661214f60408401846146e7565b919098608085013591600583101561039257896102d0612193946121a26121f29e5f988d866121ba996121868f60c081019061473b565b99909a6040519d8e614038565b168c5216908a0152369161408f565b604087015260608901356060870152608086016148ac565b60a0820152604051809981927f4af29ec400000000000000000000000000000000000000000000000000000000835260048301614be4565b038183855af1958615610387575f935f985f986124a8575b50612214906146d3565b81604051917fca4f28030000000000000000000000000000000000000000000000000000000083521660048201525f81602481865afa908115610387575f9161248e575b50969760a0840197905f5b825181101561244d57836122778285614bd0565b51166122838289614bd0565b519081156123e0576122948c6147e9565b80612422575b156122d45750906122ce6001928b7f0000000000000000000000000000000000000000000000000000000000000000614f16565b01612263565b90857f00000000000000000000000000000000000000000000000000000000000000001690612302896146d3565b61230b82614ed2565b833b15610392576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201528a831660248201529082166044820152908416606482015292915f908490608490829084905af1918215610387576123cc938c93612413575b5060405193849283927f15afd40900000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03815f8a5af19081156103875789916123ea575b50506001906122ce565b813d831161240c575b6123fd8183614054565b8101031261039257878c6123e0565b503d6123f3565b61241c90614007565b8f612381565b50857f000000000000000000000000000000000000000000000000000000000000000016811461229a565b50856103598b61245f6118ff896146d3565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d6040519384938461426b565b6124a291503d805f833e6111938183614054565b89612258565b9097506124c591985061221494503d805f833e6103788183614054565b9891949098979061220a565b34610392575f600319360112610392576040515f5f549060018260011c9160018416918215612604575b60209485851084146125d75785879486865291825f14612599575050600114612540575b5061252c92500383614054565b610359604051928284938452830190614246565b5f808052859250907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b85831061258157505061252c93508201018561251f565b8054838901850152879450869390920191810161256a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168582015261252c95151560051b850101925087915061251f9050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f16926124fb565b346103925761263f6126385f8061061661076a61043e61262d36614432565b95939a929990614e05565b988a615191565b506001600160a01b03936040519161265683613feb565b3083528560209b168b84015260408301526fffffffffffffffffffffffffffffffff6060830152600260808301528660a083015260c08201526040519283917fb24bd571000000000000000000000000000000000000000000000000000000008b84015260248301614a8c565b61043e611bd85f8061275a6126d736614491565b6126e79993949892919933614e05565b996001600160a01b0395604051936126fe85613feb565b3385528760209c168c86015260408501526060840152876080840152151560a083015260c08201526040519283917f7b03c7ba000000000000000000000000000000000000000000000000000000008a84015260248301614a8c565b03927f0000000000000000000000000000000000000000000000000000000000000000165af18015610387576127a0915f916127bc575b50828082518301019101614aea565b50929050611118576103596040519282849384528301906141a9565b6127d091503d805f833e6105268183614054565b84612791565b346103925760a0600319360112610392576127ef613f7f565b67ffffffffffffffff602435818111610392576128109036906004016140dd565b91612819613f95565b91608435908111610392575f9361043e6108fd86946128426108826128b796369060040161415c565b966001600160a01b0394856040519361285a85613feb565b30855216602084015260408301526044356060830152600460808301528660a083015260c08201526040519283917fefd85f14000000000000000000000000000000000000000000000000000000006020840152602483016148f2565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19182156103875761035992612903915f91612940575b506020808251830101910161496f565b90939192612918575b6040519384938461426b565b5f7f00000000000000000000000000000000000000000000000000000000000000005d61290c565b61295491503d805f833e6105268183614054565b846128f3565b3461039257612968366142e6565b906129769094939294614e05565b936001600160a01b038093816040519661298f8861401b565b3388528160209a8b8a015f905216604089015216606087015216608085015260a084015260c083015f905260e083016fffffffffffffffffffffffffffffffff905261010083015f905261012083015260405180928582017fbe5ae8410000000000000000000000000000000000000000000000000000000090526024820190612a1891614b3f565b03601f1981018352612a2a9083614054565b6040518080937fedfa356800000000000000000000000000000000000000000000000000000000825286600483015260248201612a6691614246565b03917f00000000000000000000000000000000000000000000000000000000000000001691815a5f948591f1908115610387575f91612abd575b50828180518101031261039257820151906104ea57604051908152f35b612ad191503d805f833e6105268183614054565b83612aa0565b346103925760a060031936011261039257612af0613f7f565b612af8613fc1565b90612b01613f95565b60843567ffffffffffffffff811161039257612b24612b2a91369060040161415c565b91614e05565b916001600160a01b0391827f0000000000000000000000000000000000000000000000000000000000000000169280604051937fc9c1661b0000000000000000000000000000000000000000000000000000000085521695866004850152166024830152604082604481865afa918215610387575f905f93612c9a575b505f9361043e612c368694612bbe612c7295614a42565b906001612bcb8984614bd0565b5260405191612bd983613feb565b30835260209b8c84015260408301526024356060830152600160808301528660a083015260c08201526040519283917fb24bd571000000000000000000000000000000000000000000000000000000008c84015260248301614a8c565b6040519586809481937fedfa35680000000000000000000000000000000000000000000000000000000083528b60048401526024830190614246565b03925af1918215610387576104db926104d3915f916105125750858082518301019101614aea565b925050916040823d604011612cd1575b81612cb760409383614054565b81010312610392578151602090920151909290915f612ba7565b3d9150612caa565b3461039257612cf5612cea36614432565b929490939193614e05565b926001600160a01b0392837f0000000000000000000000000000000000000000000000000000000000000000169380604051947fc9c1661b0000000000000000000000000000000000000000000000000000000086521696876004860152166024840152604083604481875afa928315610387575f905f94612e37575b509361043e612c365f9694612e0f94612d8b8997614a42565b916fffffffffffffffffffffffffffffffff612da78a85614bd0565b5260405192612db584613feb565b30845260209c8d85015260408401526060830152600260808301528660a083015260c08201526040519283917fefd85f14000000000000000000000000000000000000000000000000000000008c840152602483016148f2565b03925af1918215610387576104db92611b1f915f91611b26575085808251830101910161496f565b9350506040833d604011612e6c575b81612e5360409383614054565b810103126103925782516020909301519261043e612d72565b3d9150612e46565b34610392575f6003193601126103925760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b60a06003193601126103925767ffffffffffffffff60043511610392573660236004350112156103925767ffffffffffffffff60043560040135116103925736602460c060043560040135026004350101116103925760243567ffffffffffffffff811161039257612f2d903690600401614352565b67ffffffffffffffff60443511610392576060600319604435360301126103925760643567ffffffffffffffff811161039257612f6e903690600401614383565b60843567ffffffffffffffff811161039257612f8e903690600401614352565b949093612f99614e47565b8060043560040135036134dc575f5b6004356004013581106132295750505060443560040135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd60443536030182121561039257816044350160048101359067ffffffffffffffff82116103925760248260071b36039101136103925761304c575b610359610f7686865f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d614cb0565b6001600160a01b039492947f0000000000000000000000000000000000000000000000000000000000000000163b1561039257604051947f2a2d80d10000000000000000000000000000000000000000000000000000000086523360048701526060602487015260c486019260443501602481019367ffffffffffffffff60048301351161039257600482013560071b360385136103925760606064890152600482013590529192869260e484019291905f905b600481013582106131ab5750505082915f9461314e926001600160a01b0361312c602460443501613fd7565b16608486015260448035013560a486015260031985840301604486015261478c565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af19182156103875761035993610f769361319c575b82945081935061301c565b6131a590614007565b84613191565b9195945091926001600160a01b036131c287613fd7565b168152602080870135916001600160a01b038316809303610392576004926001928201526131f26040890161517e565b65ffffffffffff809116604083015261320d60608a0161517e565b1660608201526080809101970193019050889495939291613100565b6132376102d0828486614dee565b60405180606081011067ffffffffffffffff606083011117610f1157606081016040525f81526020915f838301525f60408301528281015190606060408201519101515f1a91835283830152604082015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc818502600435013603011261039257604051906132c782614038565b6132da602460c086026004350101613fd7565b8083526132f0604460c087026004350101613fd7565b908185850152613309606460c088026004350101613fd7565b60408581019190915260043560c08802016084810135606087015260a4810135608087015260c4013560a086015283015183519386015160ff91909116926001600160a01b0383163b15610392575f6001600160a01b03809460e4948b98849860c460c06040519c8d9b8c9a7fd505accf000000000000000000000000000000000000000000000000000000008c521660048b01523060248b0152608482820260043501013560448b0152026004350101356064880152608487015260a486015260c4850152165af190816134cd575b506134c3576133e661514f565b906001600160a01b0381511690836001600160a01b0381830151166044604051809581937fdd62ed3e00000000000000000000000000000000000000000000000000000000835260048301523060248301525afa918215610387575f92613493575b50606001510361345e5750506001905b01612fa8565b80511561346b5780519101fd5b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b9091508381813d83116134bc575b6134ab8183614054565b810103126103925751906060613448565b503d6134a1565b5050600190613458565b6134d690614007565b8a6133d9565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461039257613512366142e6565b906135209094939294614e05565b936001600160a01b03809381604051966135398861401b565b3388528160209a8b8a016001905216604089015216606087015216608085015260a084015260c083016fffffffffffffffffffffffffffffffff905260e083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905261010083015f905261012083015260405180928582017fbe5ae8410000000000000000000000000000000000000000000000000000000090526024820190612a1891614b3f565b34610392575f6003193601126103925760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461039257613637610f9336614294565b926001600160a01b0392837f00000000000000000000000000000000000000000000000000000000000000001693604051937fca4f280300000000000000000000000000000000000000000000000000000000855216938460048501525f84602481845afa9384156103875761109c5f959461372a946136c3889761043e95899161374d575051614a42565b91604051926136d184613feb565b30845260209a8b850152604084015260608301528660808301528660a083015260c08201526040519283917fb24bd571000000000000000000000000000000000000000000000000000000008a84015260248301614a8c565b03925af18015610387576127a0915f916127bc5750828082518301019101614aea565b61376191503d808b833e6111938183614054565b8c611ff7565b5f61043e816128b761160b61377b366141dc565b9061378c9894929895939533614e05565b986001600160a01b039687604051956137a487613feb565b3387521660208601526040850152606084015260046080840152151560a083015260c08201526040519283917f5b343791000000000000000000000000000000000000000000000000000000006020840152602483016148f2565b606060031936011261039257613813613f7f565b60443567ffffffffffffffff8111610392575f61043e61387a61383d6138b49436906004016140dd565b6040519283916020977f82cd54fb0000000000000000000000000000000000000000000000000000000089850152602435903390602486016147f6565b604051809381927f48c894910000000000000000000000000000000000000000000000000000000083528660048401526024830190614246565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561038757610ed5915f91613903575b50828082518301019101614886565b61391791503d805f833e6105268183614054565b836138f4565b346103925761392b36614177565b613933614e47565b61393b614e74565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000006020826139728583016146d3565b9461397c816146d3565b95604082019661398c88846146e7565b9061399a60608601866146e7565b939092806139ab60c089018961473b565b6040517fba8a2be0000000000000000000000000000000000000000000000000000000008152988e1660048a01529c909316602488015260c0604488015260c487015294999460e48b0192905f5b8a828210613d0657505050506003198a83030160648b01528382527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8411610392578794858b9594613a6d94879660051b8092848301370160808901356084870152601c8682030160a4870152019161478c565b03815f8689165af1948515610387575f95613cd7575b50939460a0850194905f5b613a9882846146e7565b9050811015613c9e57613abd613ab882613ab285876146e7565b906147ac565b6146d3565b613ace82613ab260608701876146e7565b35908115613c2f57613adf896147e9565b80613c71575b15613b1f575090613b19600192887f0000000000000000000000000000000000000000000000000000000000000000614f16565b01613a8e565b857f00000000000000000000000000000000000000000000000000000000000000001691613b4c866146d3565b613b5582614ed2565b843b15610392576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152898c168316602482015290821660448201528389169091166064820152925f908490608490829084905af191821561038757613c19938993613c62575060405193849283927f15afd40900000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03815f898c165af1908115610387578691613c39575b5050600190613b19565b813d8311613c5b575b613c4c8183614054565b81010312610392578489613c2f565b503d613c42565b613c6b90614007565b8c612381565b50857f00000000000000000000000000000000000000000000000000000000000000001686821614613ae5565b8488613cac6118ff866146d3565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051908152f35b9094508281813d8311613cff575b613cef8183614054565b8101031261039257519386613a83565b503d613ce5565b8084968c613d176001959697613fd7565b1681520195019291016139f9565b60c060031936011261039257613d39613f7f565b6024359067ffffffffffffffff808311610392573660238401121561039257826004013591613d6783614077565b92613d756040519485614054565b80845260209460248686019260051b82010191368311610392576024879201905b838210613f68575050505060443582811161039257613db99036906004016140dd565b92613dc26140fb565b9260a43590811161039257613ddb90369060040161415c565b93613de533614e05565b946001600160a01b039460405192613dfc84613feb565b338452868985019616865260408401948552606084019081526080840194606435865260a08501921515835260c0850193845287604051977f086fad66000000000000000000000000000000000000000000000000000000008c8a01528b60248a0152816101248a0197511660448a015251166064880152519360e0608488015284518091528961014488019501905f5b8b828210613f5257505050509461043e613f02955f989583956105da95613ee28c9b51937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc94858983030160a48a0152614634565b935160c487015251151560e4860152519084830301610104850152614246565b03927f0000000000000000000000000000000000000000000000000000000000000000165af1908115610387575f91612abd5750828180518101031261039257820151906104ea57604051908152f35b83518b1688529687019690920191600101613e8d565b828091613f7484613fd7565b815201910190613d96565b600435906001600160a01b038216820361039257565b606435906001600160a01b038216820361039257565b602435906001600160a01b038216820361039257565b604435906001600160a01b038216820361039257565b35906001600160a01b038216820361039257565b60e0810190811067ffffffffffffffff821117610f1157604052565b67ffffffffffffffff8111610f1157604052565b610140810190811067ffffffffffffffff821117610f1157604052565b60c0810190811067ffffffffffffffff821117610f1157604052565b90601f601f19910116810190811067ffffffffffffffff821117610f1157604052565b67ffffffffffffffff8111610f115760051b60200190565b929161409a82614077565b916140a86040519384614054565b829481845260208094019160051b810192831161039257905b8282106140ce5750505050565b813581529083019083016140c1565b9080601f83011215610392578160206140f89335910161408f565b90565b60843590811515820361039257565b67ffffffffffffffff8111610f1157601f01601f191660200190565b9291926141328261410a565b916141406040519384614054565b829481845281830111610392578281602093845f960137010152565b9080601f83011215610392578160206140f893359101614126565b60031990602082820112610392576004359167ffffffffffffffff8311610392578260e0920301126103925760040190565b9081518082526020808093019301915f5b8281106141c8575050505090565b8351855293810193928101926001016141ba565b9060a0600319830112610392576004356001600160a01b0381168103610392579167ffffffffffffffff90602435828111610392578161421e916004016140dd565b926044359260643580151581036103925792608435918211610392576140f89160040161415c565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6142816140f894926060835260608301906141a9565b9260208201526040818403910152614246565b6080600319820112610392576001600160a01b03906004358281168103610392579260243592604435908116810361039257916064359067ffffffffffffffff8211610392576140f89160040161415c565b60c0600319820112610392576001600160a01b0391600435838116810361039257926024358181168103610392579260443582811681036103925792606435926084359081168103610392579160a4359067ffffffffffffffff8211610392576140f89160040161415c565b9181601f840112156103925782359167ffffffffffffffff8311610392576020808501948460051b01011161039257565b9181601f840112156103925782359167ffffffffffffffff8311610392576020838186019501011161039257565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b8483106143e65750505050505090565b9091929394958480614422837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528a51614246565b98019301930191949392906143d6565b9060a0600319830112610392576001600160a01b03600435818116810361039257926024358281168103610392579260443592606435908116810361039257916084359067ffffffffffffffff8211610392576140f89160040161415c565b60a0600319820112610392576004356001600160a01b038116810361039257916024359167ffffffffffffffff9160443583811161039257826144d6916004016140dd565b9260643580151581036103925792608435918211610392576140f89160040161415c565b60031990602082820112610392576004359167ffffffffffffffff83116103925782610140920301126103925760040190565b610100600319820112610392576001600160a01b0390600435828116810361039257926024358381168103610392579260443590811681036103925791606435916084359160a4359160c4358015158103610392579160e4359067ffffffffffffffff8211610392576145a291600401614383565b9091565b916145c3906140f8949284526060602085015260608401906141a9565b916040818403910152614246565b60c0600319820112610392576001600160a01b0390600435828116810361039257926024359260443590811681036103925791606435916084358015158103610392579160a4359067ffffffffffffffff8211610392576140f89160040161415c565b9081518082526020808093019301915f5b828110614653575050505090565b835185529381019392810192600101614645565b81601f820112156103925780519061467e8261410a565b9261468c6040519485614054565b8284526020838301011161039257815f9260208093018386015e8301015290565b9060208282031261039257815167ffffffffffffffff8111610392576140f89201614667565b356001600160a01b03811681036103925790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610392570180359067ffffffffffffffff821161039257602001918160051b3603831361039257565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610392570180359067ffffffffffffffff82116103925760200191813603831361039257565b601f8260209493601f1993818652868601375f8582860101520116010190565b91908110156147bc5760051b0190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b3580151581036103925790565b90926140f894936080936001600160a01b038092168452166020830152604082015281606082015201906141a9565b9080601f830112156103925781519060209161484081614077565b9361484e6040519586614054565b81855260208086019260051b82010192831161039257602001905b828210614877575050505090565b81518152908301908301614869565b9060208282031261039257815167ffffffffffffffff8111610392576140f89201614825565b60058210156148b85752565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b9060058210156148b85752565b906140f891602081526001600160a01b03808351166020830152602083015116604082015260c0614933604084015160e06060850152610100840190614634565b9260608101516080840152614950608082015160a08501906148e5565b60a081015115158284015201519060e0601f1982850301910152614246565b90916060828403126103925781519167ffffffffffffffff92838111610392578461499b918301614825565b936020820151936040830151908111610392576140f89201614667565b60209081818403126103925780519067ffffffffffffffff821161039257019180601f840112156103925782516149ee81614077565b936149fc6040519586614054565b818552838086019260051b820101928311610392578301905b828210614a23575050505090565b81516001600160a01b0381168103610392578152908301908301614a15565b90614a4c82614077565b614a596040519182614054565b828152601f19614a698294614077565b0190602036910137565b60048210156148b85752565b9060048210156148b85752565b906140f891602081526001600160a01b03808351166020830152602083015116604082015260c0614acd604084015160e06060850152610100840190614634565b9260608101516080840152614950608082015160a0850190614a7f565b916060838303126103925782519260208101519267ffffffffffffffff938481116103925781614b1b918401614825565b936040830151908111610392576140f89201614667565b9060028210156148b85752565b6101606140f892602083526001600160a01b03808251166020850152614b6d60208301516040860190614b32565b80604083015116606085015280606083015116608085015260808201511660a084015260a081015160c084015260c081015160e084015260e081015161010090818501528101519061012091151582850152015191610140808201520190614246565b80518210156147bc5760209160051b010190565b906140f891602081526001600160a01b03808351166020830152602083015116604082015260a0614c24604084015160c0606085015260e0840190614634565b9260608101516080840152614c406080820151838501906148e5565b01519060c0601f1982850301910152614246565b906140f891602081526001600160a01b0380835116602083015260208301511660408201526040820151606082015260a0614c9e606084015160c0608085015260e0840190614634565b92614c40608082015183850190614a7f565b9190614cbb33614e05565b907f000000000000000000000000000000000000000000000000000000000000000093845c614dc6576001906001865d614cf483614077565b92614d026040519485614054565b808452601f19614d1182614077565b015f5b818110614db55750505f5b818110614d6c5750505050905f614d6192945d7f0000000000000000000000000000000000000000000000000000000000000000805c91614d63575b5061510c565b565b5f905d5f614d5b565b80614d995f80614d816102d08996888a614dee565b602081519101305af4614d9261514f565b90306156e8565b614da38288614bd0565b52614dae8187614bd0565b5001614d1f565b806060602080938901015201614d14565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b908210156147bc576145a29160051b81019061473b565b905f917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03815c1615614e3d575050565b909192505d600190565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c614dc6576001905d565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163303614ea657565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b6001600160a01b0390818111614ee6571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f5260a060045260245260445ffd5b9190918147106150e4576001600160a01b0380911692833b15610392576040918251917fd0e30db00000000000000000000000000000000000000000000000000000000083525f925f81600481898b5af180156150da576150c7575b501692825194602095868101907fa9059cbb000000000000000000000000000000000000000000000000000000008252866024820152836044820152604481526080810181811067ffffffffffffffff821117610f1157865251614fe7918591829182865af1614fe061514f565b90836156e8565b80518781151591826150a2575b5050905061507757906044869284865197889485937f15afd409000000000000000000000000000000000000000000000000000000008552600485015260248401525af191821561506d575050615049575050565b813d8311615066575b61505c8183614054565b8101031261039257565b503d615052565b51903d90823e3d90fd5b7f5274afe7000000000000000000000000000000000000000000000000000000008352600452602482fd5b83809293500103126150c3578601518015908115036150c35780875f614ff4565b8380fd5b6150d2919350614007565b5f915f614f72565b85513d5f823e3d90fd5b7fa01a9df6000000000000000000000000000000000000000000000000000000005f5260045ffd5b47801561514b577f00000000000000000000000000000000000000000000000000000000000000005c61514b576001600160a01b03614d61921661566c565b5050565b3d15615179573d906151608261410a565b9161516e6040519384614054565b82523d5f602084013e565b606090565b359065ffffffffffff8216820361039257565b916044929391936001600160a01b03604094859282808551998a9586947fc9c1661b0000000000000000000000000000000000000000000000000000000086521660048501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa938415615261575f935f9561522a575b50506152276152208594614a42565b9485614bd0565b52565b809295508194503d831161525a575b6152438183614054565b810103126103925760208251920151925f80615211565b503d615239565b83513d5f823e3d90fd5b60e0810135421161541b576001600160a01b0360208201359160028310156103925760409261529b8285016146d3565b928060609485938486016152ae906146d3565b956152bb608082016146d3565b90846152cb61012083018361473b565b91908c51956152d987613feb565b8652816020870197168752818d87019b168b52818a870195168552608086019260a0850135845260a087019460c001358552369061531692614126565b9360c08601948552818d519b8c9a8b998a997f2bfb780c000000000000000000000000000000000000000000000000000000008b5260048b016020905260248b0190519061536391614b32565b5116604489015251166064870152511660848501525160a48401525160c48301525160e4820160e09052610104820161539b91614246565b03917f0000000000000000000000000000000000000000000000000000000000000000165a905f91f1908115615261575f935f935f936153de575b505050909192565b92509250809350813d8311615414575b6153f88183614054565b81010312610392578151602083015191909201515f80806153d6565b503d6153ee565b7fe08b8af0000000000000000000000000000000000000000000000000000000005f5260045ffd5b92821561556f578061553a575b156154a15750614d61917f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000615575565b906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b15610392576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03938416600482015293909216602484015260448301525f908290606490829084905af18015610387576155315750565b614d6190614007565b506001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001690821614615450565b50505050565b9392916001600160a01b03809216803b15610392576040517fae6393290000000000000000000000000000000000000000000000000000000081525f816064818388819c16968760048401523060248401528a60448401525af1801561038757615659575b508086913b156156555781906024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083528960048401525af1801561564a57615632575b50614d619394501661566c565b61563c8691614007565b6156465784615625565b8480fd5b6040513d88823e3d90fd5b5080fd5b615664919650614007565b5f945f6155da565b8147106156bc575f8080936001600160a01b038294165af161568c61514f565b501561569457565b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fcd786059000000000000000000000000000000000000000000000000000000005f523060045260245ffd5b906156fd575080511561569457805190602001fd5b81511580615743575b61570e575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561570656fea264697066735822122057f622c4f53a759f8550565d430c6f6c937500a4b88dcfafc92ca53c120c2d2564736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x72 JUMPI JUMPDEST CALLDATASIZE ISZERO PUSH2 0x18 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x4A JUMPI STOP JUMPDEST PUSH32 0x540DDF600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x26B3D95 EQ PUSH2 0x3D25 JUMPI DUP1 PUSH4 0x86FAD66 EQ PUSH2 0x391D JUMPI DUP1 PUSH4 0x8C04793 EQ PUSH2 0x37FF JUMPI DUP1 PUSH4 0xCA078EC EQ PUSH2 0x3767 JUMPI DUP1 PUSH4 0xF710888 EQ PUSH2 0x3626 JUMPI DUP1 PUSH4 0x107C279F EQ PUSH2 0x35E3 JUMPI DUP1 PUSH4 0x175D4408 EQ PUSH2 0x3504 JUMPI DUP1 PUSH4 0x19C6989F EQ PUSH2 0x2EB7 JUMPI DUP1 PUSH4 0x1BBF2E23 EQ PUSH2 0x2E74 JUMPI DUP1 PUSH4 0x1D56798D EQ PUSH2 0x2CD9 JUMPI DUP1 PUSH4 0x23B39241 EQ PUSH2 0x2AD7 JUMPI DUP1 PUSH4 0x3EBC54E5 EQ PUSH2 0x295A JUMPI DUP1 PUSH4 0x452DB952 EQ PUSH2 0x27D6 JUMPI DUP1 PUSH4 0x51682750 EQ PUSH2 0x26C3 JUMPI DUP1 PUSH4 0x53D0BB98 EQ PUSH2 0x260E JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x24D1 JUMPI DUP1 PUSH4 0x5B343791 EQ PUSH2 0x20DC JUMPI DUP1 PUSH4 0x5E01EB5A EQ PUSH2 0x2097 JUMPI DUP1 PUSH4 0x5F9815FF EQ PUSH2 0x1F54 JUMPI DUP1 PUSH4 0x68A24FE0 EQ PUSH2 0x1C59 JUMPI DUP1 PUSH4 0x724DBA33 EQ PUSH2 0x1B40 JUMPI DUP1 PUSH4 0x72657D17 EQ PUSH2 0x19F5 JUMPI DUP1 PUSH4 0x750283BC EQ PUSH2 0x1978 JUMPI DUP1 PUSH4 0x7B03C7BA EQ PUSH2 0x1648 JUMPI DUP1 PUSH4 0x82BF2B24 EQ PUSH2 0x1574 JUMPI DUP1 PUSH4 0x82CD54FB EQ PUSH2 0x132C JUMPI DUP1 PUSH4 0x94E86EF8 EQ PUSH2 0x11A1 JUMPI DUP1 PUSH4 0x9DE90518 EQ PUSH2 0xF82 JUMPI DUP1 PUSH4 0xAC9650D8 EQ PUSH2 0xF3E JUMPI DUP1 PUSH4 0xB037ED36 EQ PUSH2 0xDAD JUMPI DUP1 PUSH4 0xB24BD571 EQ PUSH2 0xC63 JUMPI DUP1 PUSH4 0xBE5AE841 EQ PUSH2 0xC0E JUMPI DUP1 PUSH4 0xBF6EE3FD EQ PUSH2 0xA75 JUMPI DUP1 PUSH4 0xC08BC851 EQ PUSH2 0x9DD JUMPI DUP1 PUSH4 0xC330C7BE EQ PUSH2 0x816 JUMPI DUP1 PUSH4 0xDA001F7D EQ PUSH2 0x685 JUMPI DUP1 PUSH4 0xE7326DEF EQ PUSH2 0x534 JUMPI DUP1 PUSH4 0xECB2182C EQ PUSH2 0x396 JUMPI PUSH4 0xEFD85F14 SUB PUSH2 0xE JUMPI CALLVALUE PUSH2 0x392 JUMPI PUSH2 0x231 CALLDATASIZE PUSH2 0x4177 JUMP JUMPDEST PUSH2 0x239 PUSH2 0x4E74 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH2 0x24E PUSH1 0x20 DUP3 ADD PUSH2 0x46D3 JUMP JUMPDEST PUSH2 0x257 DUP3 PUSH2 0x46D3 JUMP JUMPDEST SWAP3 PUSH2 0x265 PUSH1 0x40 DUP5 ADD DUP5 PUSH2 0x46E7 JUMP JUMPDEST SWAP1 SWAP4 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP4 PUSH1 0x5 DUP6 LT ISZERO PUSH2 0x392 JUMPI DUP4 PUSH2 0x2D0 PUSH2 0x311 SWAP7 PUSH1 0x60 DUP6 PUSH2 0x2BB PUSH0 SWAP13 SWAP12 PUSH2 0x2AB SWAP10 DUP8 DUP16 SWAP15 PUSH2 0x29E PUSH1 0xC0 PUSH2 0x2D7 SWAP14 ADD DUP8 PUSH2 0x473B JUMP JUMPDEST SWAP11 SWAP1 SWAP12 PUSH1 0x40 MLOAD SWAP15 DUP16 PUSH2 0x4038 JUMP JUMPDEST AND DUP14 MSTORE AND PUSH1 0x20 DUP13 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x408F JUMP JUMPDEST PUSH1 0x40 DUP10 ADD MSTORE ADD CALLDATALOAD PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0x80 DUP7 ADD PUSH2 0x48AC JUMP JUMPDEST CALLDATASIZE SWAP2 PUSH2 0x4126 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x4AF29EC400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x4BE4 JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH0 SWAP2 PUSH2 0x35D JUMPI JUMPDEST POP PUSH2 0x359 SWAP1 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x426B JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST SWAP1 POP PUSH2 0x359 SWAP3 POP PUSH2 0x380 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x378 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x496F JUMP JUMPDEST SWAP1 SWAP3 PUSH2 0x348 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x44C PUSH2 0x3C5 PUSH0 PUSH2 0x43E DUP2 PUSH2 0x488 PUSH2 0x3AD CALLDATASIZE PUSH2 0x45D1 JUMP JUMPDEST SWAP8 SWAP4 SWAP11 SWAP3 SWAP10 SWAP1 SWAP5 SWAP2 PUSH2 0x3BE CALLER PUSH2 0x4E05 JUMP JUMPDEST SWAP11 DUP4 PUSH2 0x5191 JUMP JUMPDEST SWAP8 SWAP1 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP12 DUP13 SWAP7 PUSH1 0x40 MLOAD SWAP5 PUSH2 0x3E0 DUP7 PUSH2 0x3FEB JUMP JUMPDEST CALLER DUP7 MSTORE PUSH1 0x20 SWAP15 DUP16 SWAP2 AND SWAP1 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x7B03C7BA00000000000000000000000000000000000000000000000000000000 DUP13 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x4A8C JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x4054 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP12 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4246 JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH2 0x4DB SWAP3 PUSH2 0x4D3 SWAP2 PUSH0 SWAP2 PUSH2 0x512 JUMPI JUMPDEST POP DUP6 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x4AEA JUMP JUMPDEST POP SWAP1 POP PUSH2 0x4BD0 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x4EA JUMPI JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH0 PUSH32 0x0 TSTORE PUSH2 0x4E2 JUMP JUMPDEST PUSH2 0x52E SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x526 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x46AD JUMP JUMPDEST DUP7 PUSH2 0x4C4 JUMP JUMPDEST PUSH2 0x43E PUSH2 0x5DA PUSH0 DUP1 PUSH2 0x616 PUSH2 0x565 PUSH2 0x54B CALLDATASIZE PUSH2 0x45D1 JUMP JUMPDEST SWAP2 PUSH2 0x55E SWAP12 SWAP6 SWAP12 SWAP11 SWAP5 SWAP7 SWAP2 SWAP4 SWAP11 CALLER PUSH2 0x4E05 JUMP JUMPDEST SWAP11 DUP13 PUSH2 0x5191 JUMP JUMPDEST POP SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x57D DUP6 PUSH2 0x3FEB JUMP JUMPDEST CALLER DUP6 MSTORE DUP8 PUSH1 0x20 SWAP14 AND DUP14 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x2 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x7B03C7BA00000000000000000000000000000000000000000000000000000000 DUP12 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x4A8C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP11 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4246 JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x387 JUMPI PUSH2 0x65C SWAP2 PUSH0 SWAP2 PUSH2 0x66B JUMPI JUMPDEST POP DUP4 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x4AEA JUMP JUMPDEST POP POP SWAP1 PUSH2 0x4EA JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x67F SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x526 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP5 PUSH2 0x64D JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH2 0x69E PUSH2 0x3F7F JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x392 JUMPI PUSH2 0x6BF SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x40DD JUMP JUMPDEST SWAP1 PUSH2 0x6C8 PUSH2 0x3FC1 JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x392 JUMPI PUSH2 0x7A6 PUSH0 SWAP3 SWAP2 PUSH2 0x43E PUSH2 0x76A PUSH2 0x6F6 PUSH2 0x6F0 DUP8 SWAP7 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x415C JUMP JUMPDEST SWAP4 PUSH2 0x4E05 JUMP JUMPDEST SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x70D DUP4 PUSH2 0x3FEB JUMP JUMPDEST ADDRESS DUP4 MSTORE DUP6 PUSH1 0x20 SWAP12 AND DUP12 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE DUP7 PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xEFD85F1400000000000000000000000000000000000000000000000000000000 DUP12 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x48F2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP11 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4246 JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x387 JUMPI PUSH2 0x7EC SWAP2 PUSH0 SWAP2 PUSH2 0x7FC JUMPI JUMPDEST POP DUP4 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x496F JUMP JUMPDEST POP SWAP2 SWAP1 POP PUSH2 0x4EA JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x810 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x526 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP5 PUSH2 0x7DD JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH2 0x82F PUSH2 0x3F7F JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x392 JUMPI PUSH2 0x850 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x40DD JUMP JUMPDEST SWAP2 PUSH2 0x859 PUSH2 0x3F95 JUMP JUMPDEST SWAP2 PUSH1 0x84 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x392 JUMPI PUSH0 SWAP4 PUSH2 0x43E PUSH2 0x8FD DUP7 SWAP5 PUSH2 0x888 PUSH2 0x882 PUSH2 0x93A SWAP7 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x415C JUMP JUMPDEST SWAP8 PUSH2 0x4E05 JUMP JUMPDEST SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x8A0 DUP6 PUSH2 0x3FEB JUMP JUMPDEST ADDRESS DUP6 MSTORE AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x3 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xB24BD57100000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x4A8C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4246 JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH2 0x359 SWAP3 PUSH2 0x986 SWAP2 PUSH0 SWAP2 PUSH2 0x9C3 JUMPI JUMPDEST POP PUSH1 0x20 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x4AEA JUMP JUMPDEST SWAP1 SWAP4 SWAP2 SWAP3 PUSH2 0x99B JUMPI JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x45A6 JUMP JUMPDEST PUSH0 PUSH32 0x0 TSTORE PUSH2 0x98F JUMP JUMPDEST PUSH2 0x9D7 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x526 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP5 PUSH2 0x976 JUMP JUMPDEST PUSH2 0x43E PUSH2 0x5DA PUSH0 DUP1 PUSH2 0x7A6 PUSH2 0x9F1 CALLDATASIZE PUSH2 0x41DC JUMP JUMPDEST PUSH2 0xA01 SWAP10 SWAP4 SWAP2 SWAP9 SWAP3 SWAP5 SWAP10 CALLER PUSH2 0x4E05 JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 PUSH1 0x40 MLOAD SWAP4 PUSH2 0xA18 DUP6 PUSH2 0x3FEB JUMP JUMPDEST CALLER DUP6 MSTORE DUP8 PUSH1 0x20 SWAP14 AND DUP14 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x5B34379100000000000000000000000000000000000000000000000000000000 DUP12 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x48F2 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH2 0xA89 PUSH2 0x3F7F JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x24 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x392 JUMPI PUSH2 0xAAB SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x40DD JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP3 DUP4 ISZERO ISZERO DUP1 SWAP5 SUB PUSH2 0x392 JUMPI PUSH1 0x64 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x392 JUMPI PUSH0 SWAP3 PUSH2 0x43E PUSH2 0xB5A DUP6 SWAP5 PUSH2 0xADF PUSH2 0xB97 SWAP6 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x415C JUMP JUMPDEST PUSH2 0xAE8 CALLER PUSH2 0x4E05 JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 PUSH1 0x40 MLOAD SWAP5 PUSH2 0xB00 DUP7 PUSH2 0x3FEB JUMP JUMPDEST CALLER DUP7 MSTORE AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD MSTORE DUP8 PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x3 PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x5B34379100000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x48F2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4246 JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x387 JUMPI PUSH2 0xBF4 JUMPI JUMPDEST POP PUSH2 0xBCF JUMPI STOP JUMPDEST PUSH0 PUSH32 0x0 TSTORE STOP JUMPDEST PUSH2 0xC07 SWAP1 RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x526 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST POP DUP2 PUSH2 0xBC8 JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH1 0x20 PUSH2 0xC36 PUSH2 0xC21 CALLDATASIZE PUSH2 0x44FA JUMP JUMPDEST PUSH2 0xC29 PUSH2 0x4E47 JUMP JUMPDEST PUSH2 0xC31 PUSH2 0x4E74 JUMP JUMPDEST PUSH2 0x526B JUMP JUMPDEST POP POP PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH2 0xC71 CALLDATASIZE PUSH2 0x4177 JUMP JUMPDEST PUSH2 0xC79 PUSH2 0x4E74 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xC8D PUSH1 0x20 DUP4 ADD PUSH2 0x46D3 JUMP JUMPDEST PUSH2 0xC96 DUP4 PUSH2 0x46D3 JUMP JUMPDEST SWAP2 PUSH2 0xCA4 PUSH1 0x40 DUP6 ADD DUP6 PUSH2 0x46E7 JUMP JUMPDEST SWAP5 SWAP1 PUSH1 0x80 DUP3 ADD CALLDATALOAD SWAP4 PUSH1 0x4 DUP6 LT ISZERO PUSH2 0x392 JUMPI DUP4 PUSH2 0x2D0 PUSH2 0xD3B SWAP7 PUSH2 0xCF3 PUSH2 0xD01 SWAP6 PUSH0 SWAP12 PUSH1 0x60 DUP10 DUP8 DUP16 SWAP15 PUSH2 0x29E PUSH1 0xC0 PUSH2 0xCDC SWAP15 ADD DUP5 PUSH2 0x473B JUMP JUMPDEST AND DUP14 MSTORE AND PUSH1 0x20 DUP13 ADD MSTORE ADD CALLDATALOAD PUSH1 0x40 DUP11 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x408F JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0x80 DUP7 ADD PUSH2 0x4A73 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x2145789700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x4C54 JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH0 SWAP2 PUSH2 0xD83 JUMPI JUMPDEST POP PUSH2 0x359 SWAP1 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x45A6 JUMP JUMPDEST SWAP1 POP PUSH2 0x359 SWAP3 POP PUSH2 0xDA6 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xD9E DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x4AEA JUMP JUMPDEST SWAP1 SWAP3 PUSH2 0xD72 JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH2 0xDC6 PUSH2 0x3F7F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP1 DUP1 PUSH1 0x20 SWAP4 PUSH32 0x5F9815FF00000000000000000000000000000000000000000000000000000000 DUP6 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x64 DUP3 MSTORE PUSH1 0xA0 DUP3 ADD SWAP1 DUP3 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0xF11 JUMPI DUP2 PUSH0 SWAP2 DUP2 PUSH1 0x40 MSTORE PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP6 PUSH1 0xA4 DUP7 ADD MSTORE DUP2 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 DUP8 PUSH2 0xE8C PUSH1 0xC4 DUP3 ADD DUP3 PUSH2 0x4246 JUMP JUMPDEST SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x387 JUMPI PUSH2 0xED5 SWAP3 PUSH0 SWAP3 PUSH2 0xEEA JUMPI JUMPDEST POP POP DUP3 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x4886 JUMP JUMPDEST SWAP1 PUSH2 0x359 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x41A9 JUMP JUMPDEST PUSH2 0xF0A SWAP3 POP PUSH1 0xA0 SWAP1 RETURNDATASIZE SWAP1 DUP2 PUSH0 DUP6 RETURNDATACOPY PUSH2 0xF02 DUP3 DUP6 PUSH2 0x4054 JUMP JUMPDEST ADD ADD SWAP1 PUSH2 0x46AD JUMP JUMPDEST DUP4 DUP1 PUSH2 0xEC5 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x392 JUMPI PUSH2 0xF76 PUSH2 0xF70 PUSH2 0x359 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4352 JUMP JUMPDEST SWAP1 PUSH2 0x4CB0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x43B1 JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH2 0xF9C PUSH2 0xF93 CALLDATASIZE PUSH2 0x4294 JUMP JUMPDEST SWAP3 SWAP2 SWAP4 SWAP1 PUSH2 0x4E05 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH32 0x0 AND SWAP2 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND SWAP3 DUP4 PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP2 PUSH2 0x117F JUMPI JUMPDEST POP MLOAD SWAP5 PUSH2 0x101B DUP7 PUSH2 0x4A42 JUMP JUMPDEST SWAP6 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x115A JUMPI POP POP PUSH0 SWAP3 PUSH2 0x43E PUSH2 0x109C DUP9 DUP7 SWAP6 PUSH2 0x10D8 SWAP6 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1043 DUP5 PUSH2 0x3FEB JUMP JUMPDEST ADDRESS DUP5 MSTORE PUSH1 0x20 SWAP11 DUP12 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE DUP7 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xEFD85F1400000000000000000000000000000000000000000000000000000000 DUP11 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x48F2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4246 JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x387 JUMPI PUSH2 0x10FC SWAP2 PUSH0 SWAP2 PUSH2 0x1140 JUMPI JUMPDEST POP DUP3 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x496F JUMP JUMPDEST POP POP SWAP2 PUSH2 0x1118 JUMPI JUMPDEST PUSH2 0x359 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x41A9 JUMP JUMPDEST PUSH0 PUSH32 0x0 TSTORE PUSH2 0x1104 JUMP JUMPDEST PUSH2 0x1154 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x526 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP5 PUSH2 0x10ED JUMP JUMPDEST DUP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1178 PUSH1 0x1 SWAP4 DUP12 PUSH2 0x4BD0 JUMP JUMPDEST MSTORE ADD PUSH2 0x101E JUMP JUMPDEST PUSH2 0x119B SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x1193 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x49B8 JUMP JUMPDEST DUP7 PUSH2 0x100F JUMP JUMPDEST PUSH2 0x11AA CALLDATASIZE PUSH2 0x452D JUMP JUMPDEST SWAP5 SWAP1 SWAP6 SWAP4 SWAP2 SWAP4 CALLER PUSH2 0x11BA SWAP1 PUSH2 0x4E05 JUMP JUMPDEST SWAP8 PUSH1 0x40 MLOAD SWAP10 PUSH2 0x11C8 DUP12 PUSH2 0x401B JUMP JUMPDEST CALLER DUP12 MSTORE PUSH1 0x20 DUP12 ADD PUSH1 0x1 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x40 DUP12 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 DUP11 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP10 ADD MSTORE PUSH1 0xA0 DUP9 ADD MSTORE PUSH1 0xC0 DUP8 ADD MSTORE PUSH1 0xE0 DUP7 ADD MSTORE ISZERO ISZERO PUSH2 0x100 DUP6 ADD MSTORE CALLDATASIZE SWAP1 PUSH2 0x121F SWAP3 PUSH2 0x4126 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE PUSH1 0x40 MLOAD PUSH32 0x68A24FE000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 PUSH2 0x125E SWAP1 PUSH1 0x24 DUP4 ADD PUSH2 0x4B3F JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE PUSH2 0x1270 SWAP1 DUP4 PUSH2 0x4054 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP3 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD PUSH1 0x20 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD PUSH2 0x12AD SWAP2 PUSH2 0x4246 JUMP JUMPDEST SUB DUP3 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 DUP2 GAS PUSH0 SWAP5 DUP6 SWAP2 CALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP3 PUSH2 0x1310 JUMPI JUMPDEST POP PUSH1 0x20 DUP3 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x392 JUMPI PUSH1 0x20 DUP1 SWAP3 ADD MLOAD SWAP1 PUSH2 0x4EA JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x1325 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x526 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST SWAP1 DUP3 PUSH2 0x12EF JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH2 0x1345 PUSH2 0x3F7F JUMP JUMPDEST PUSH2 0x134D PUSH2 0x3FAB JUMP JUMPDEST SWAP1 PUSH1 0x64 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x392 JUMPI PUSH2 0x1372 PUSH2 0x13E8 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x40DD JUMP JUMPDEST SWAP1 PUSH2 0x137B PUSH2 0x4E47 JUMP JUMPDEST PUSH2 0x1383 PUSH2 0x4E74 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 DUP2 PUSH32 0x0 AND SWAP4 PUSH1 0x40 MLOAD DUP1 SWAP7 DUP2 SWAP3 PUSH32 0xA07D604000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x44 CALLDATALOAD DUP11 DUP9 PUSH1 0x4 DUP7 ADD PUSH2 0x47F6 JUMP JUMPDEST SUB DUP2 DUP4 DUP8 GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP5 PUSH2 0x1550 JUMPI JUMPDEST POP DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP5 MSTORE AND PUSH1 0x4 DUP4 ADD MSTORE PUSH0 DUP3 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP3 PUSH2 0x1534 JUMPI JUMPDEST POP PUSH0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x14F0 JUMPI PUSH2 0x1457 DUP2 DUP7 PUSH2 0x4BD0 JUMP JUMPDEST MLOAD SWAP1 DUP2 PUSH2 0x1469 JUMPI JUMPDEST PUSH1 0x1 SWAP2 POP ADD PUSH2 0x1444 JUMP JUMPDEST DUP3 PUSH2 0x1474 DUP3 DUP7 PUSH2 0x4BD0 JUMP JUMPDEST MLOAD AND DUP6 EXTCODESIZE ISZERO PUSH2 0x392 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP9 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH0 DUP3 PUSH1 0x64 DUP2 DUP4 DUP10 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH1 0x1 SWAP3 PUSH2 0x14E1 JUMPI JUMPDEST POP PUSH2 0x145F JUMP JUMPDEST PUSH2 0x14EA SWAP1 PUSH2 0x4007 JUMP JUMPDEST DUP8 PUSH2 0x14DB JUMP JUMPDEST PUSH2 0x359 DUP6 PUSH2 0x14FD DUP9 PUSH2 0x510C JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x41A9 JUMP JUMPDEST PUSH2 0x1549 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x1193 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST SWAP1 DUP6 PUSH2 0x1441 JUMP JUMPDEST PUSH2 0x156D SWAP2 SWAP5 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x1565 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x4886 JUMP JUMPDEST SWAP3 DUP6 PUSH2 0x13FC JUMP JUMPDEST PUSH0 PUSH2 0x43E DUP2 PUSH2 0x93A PUSH2 0x160B PUSH2 0x1588 CALLDATASIZE PUSH2 0x4491 JUMP JUMPDEST SWAP1 PUSH2 0x1598 SWAP9 SWAP5 SWAP3 SWAP6 SWAP4 SWAP9 CALLER PUSH2 0x4E05 JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x15B0 DUP8 PUSH2 0x3FEB JUMP JUMPDEST CALLER DUP8 MSTORE AND PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x3 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x7B03C7BA00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x4A8C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4246 JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH2 0x1656 CALLDATASIZE PUSH2 0x4177 JUMP JUMPDEST PUSH2 0x165E PUSH2 0x4E47 JUMP JUMPDEST PUSH2 0x1666 PUSH2 0x4E74 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x0 SWAP1 DUP4 DUP3 AND PUSH2 0x16A2 DUP5 PUSH2 0x46D3 JUMP JUMPDEST SWAP5 PUSH2 0x16AC DUP4 PUSH2 0x46D3 JUMP JUMPDEST PUSH2 0x16B9 PUSH1 0x40 DUP6 ADD DUP6 PUSH2 0x46E7 JUMP JUMPDEST SWAP8 SWAP1 SWAP2 PUSH1 0x80 DUP7 ADD CALLDATALOAD SWAP1 PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x392 JUMPI DUP5 PUSH2 0x2D0 PUSH2 0x1715 SWAP4 PUSH2 0xCF3 PUSH0 SWAP8 PUSH2 0x174D SWAP15 PUSH2 0x16EA DUP14 PUSH1 0xC0 DUP2 ADD SWAP1 PUSH2 0x473B JUMP JUMPDEST SWAP7 SWAP1 SWAP8 DUP2 PUSH1 0x40 MLOAD SWAP12 PUSH2 0x16FB DUP14 PUSH2 0x4038 JUMP JUMPDEST AND DUP12 MSTORE AND PUSH1 0x20 DUP11 ADD MSTORE PUSH1 0x60 DUP14 ADD CALLDATALOAD PUSH1 0x40 DUP11 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x408F JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP9 DUP2 SWAP3 PUSH32 0x2145789700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x4C54 JUMP JUMPDEST SUB DUP2 DUP4 DUP7 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP6 PUSH0 SWAP8 PUSH0 SWAP4 PUSH2 0x194F JUMPI JUMPDEST POP PUSH2 0x176F SWAP1 PUSH2 0x46D3 JUMP JUMPDEST SWAP7 DUP2 PUSH1 0x40 MLOAD SWAP9 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP11 MSTORE AND PUSH1 0x4 DUP10 ADD MSTORE PUSH0 DUP9 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL SWAP8 DUP9 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP9 PUSH2 0x1933 JUMPI JUMPDEST POP SWAP2 SWAP6 PUSH1 0xA0 DUP6 ADD SWAP3 SWAP1 PUSH0 JUMPDEST DUP10 MLOAD DUP2 LT ISZERO PUSH2 0x18EE JUMPI PUSH2 0x17D2 DUP2 DUP5 PUSH2 0x4BD0 JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO PUSH2 0x18E5 JUMPI DUP5 PUSH2 0x17E5 DUP3 DUP14 PUSH2 0x4BD0 JUMP JUMPDEST MLOAD AND PUSH2 0x17F0 DUP8 PUSH2 0x47E9 JUMP JUMPDEST DUP1 PUSH2 0x18BA JUMPI JUMPDEST ISZERO PUSH2 0x1838 JUMPI POP PUSH2 0x1832 PUSH1 0x1 SWAP3 PUSH2 0x180B DUP11 PUSH2 0x46D3 JUMP JUMPDEST DUP12 PUSH32 0x0 PUSH2 0x5575 JUMP JUMPDEST ADD PUSH2 0x17BF JUMP JUMPDEST PUSH2 0x1841 DUP10 PUSH2 0x46D3 JUMP JUMPDEST DUP9 EXTCODESIZE ISZERO PUSH2 0x392 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH0 DUP3 PUSH1 0x64 DUP2 DUP4 DUP12 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH1 0x1 SWAP3 PUSH2 0x18AB JUMPI JUMPDEST POP PUSH2 0x1832 JUMP JUMPDEST PUSH2 0x18B4 SWAP1 PUSH2 0x4007 JUMP JUMPDEST DUP12 PUSH2 0x18A5 JUMP JUMPDEST POP DUP6 PUSH32 0x0 AND DUP2 EQ PUSH2 0x17F6 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x1832 JUMP JUMPDEST POP PUSH2 0x359 DUP9 PUSH2 0x1904 PUSH2 0x18FF DUP10 PUSH2 0x46D3 JUMP JUMPDEST PUSH2 0x510C JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x45A6 JUMP JUMPDEST PUSH2 0x1948 SWAP2 SWAP9 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x1193 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST SWAP7 DUP9 PUSH2 0x17B4 JUMP JUMPDEST SWAP1 SWAP3 POP PUSH2 0x196C SWAP2 SWAP8 POP PUSH2 0x176F SWAP7 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xD9E DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST SWAP8 SWAP2 SWAP7 SWAP1 SWAP8 SWAP3 SWAP1 PUSH2 0x1765 JUMP JUMPDEST PUSH2 0x1981 CALLDATASIZE PUSH2 0x452D JUMP JUMPDEST SWAP5 SWAP1 SWAP6 SWAP4 SWAP2 SWAP4 CALLER PUSH2 0x1991 SWAP1 PUSH2 0x4E05 JUMP JUMPDEST SWAP8 PUSH1 0x40 MLOAD SWAP10 PUSH2 0x199F DUP12 PUSH2 0x401B JUMP JUMPDEST CALLER DUP12 MSTORE PUSH1 0x20 DUP12 ADD PUSH0 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x40 DUP12 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 DUP11 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP10 ADD MSTORE PUSH1 0xA0 DUP9 ADD MSTORE PUSH1 0xC0 DUP8 ADD MSTORE PUSH1 0xE0 DUP7 ADD MSTORE ISZERO ISZERO PUSH2 0x100 DUP6 ADD MSTORE CALLDATASIZE SWAP1 PUSH2 0x121F SWAP3 PUSH2 0x4126 JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH2 0x1A09 PUSH2 0x3F7F JUMP JUMPDEST PUSH2 0x1A11 PUSH2 0x3FAB JUMP JUMPDEST PUSH2 0x1A19 PUSH2 0x40FB JUMP JUMPDEST PUSH1 0xA4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x392 JUMPI PUSH0 PUSH2 0x1AD4 PUSH2 0x1A3F DUP3 SWAP5 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x415C JUMP JUMPDEST SWAP3 PUSH2 0x43E PUSH2 0x44C PUSH2 0x1A5D PUSH2 0x1A52 CALLER PUSH2 0x4E05 JUMP JUMPDEST SWAP9 PUSH1 0x44 CALLDATALOAD SWAP1 DUP12 PUSH2 0x5191 JUMP JUMPDEST SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1A74 DUP5 PUSH2 0x3FEB JUMP JUMPDEST CALLER DUP5 MSTORE DUP7 PUSH1 0x20 SWAP14 AND DUP14 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x2 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x5B34379100000000000000000000000000000000000000000000000000000000 DUP13 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x48F2 JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH2 0x4DB SWAP3 PUSH2 0x1B1F SWAP2 PUSH0 SWAP2 PUSH2 0x1B26 JUMPI JUMPDEST POP DUP6 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x496F JUMP JUMPDEST POP POP PUSH2 0x4BD0 JUMP JUMPDEST PUSH2 0x1B3A SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x526 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP7 PUSH2 0x1B10 JUMP JUMPDEST PUSH2 0x43E PUSH2 0x1BD8 PUSH0 DUP1 PUSH2 0x1C14 PUSH2 0x1B54 CALLDATASIZE PUSH2 0x41DC JUMP JUMPDEST PUSH2 0x1B65 SWAP10 SWAP4 SWAP2 SWAP10 SWAP9 SWAP3 SWAP5 SWAP9 CALLER PUSH2 0x4E05 JUMP JUMPDEST SWAP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x1B7C DUP6 PUSH2 0x3FEB JUMP JUMPDEST CALLER DUP6 MSTORE DUP8 PUSH1 0x20 SWAP13 AND DUP13 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE DUP8 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x5B34379100000000000000000000000000000000000000000000000000000000 DUP11 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x48F2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4246 JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x387 JUMPI PUSH2 0x10FC SWAP2 PUSH0 SWAP2 PUSH2 0x1140 JUMPI POP DUP3 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x496F JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH2 0x1C67 CALLDATASIZE PUSH2 0x44FA JUMP JUMPDEST PUSH2 0x1C6F PUSH2 0x4E47 JUMP JUMPDEST PUSH2 0x1C77 PUSH2 0x4E74 JUMP JUMPDEST PUSH2 0x1C80 DUP2 PUSH2 0x526B JUMP JUMPDEST PUSH2 0x1C8E PUSH1 0x60 DUP6 SWAP4 SWAP6 ADD PUSH2 0x46D3 JUMP JUMPDEST SWAP1 PUSH2 0x1C98 DUP4 PUSH2 0x46D3 JUMP JUMPDEST SWAP5 PUSH2 0x100 DUP5 ADD SWAP6 PUSH2 0x1CA8 DUP8 PUSH2 0x47E9 JUMP JUMPDEST DUP1 PUSH2 0x1F1F JUMPI JUMPDEST ISZERO PUSH2 0x1D9C JUMPI POP SWAP5 PUSH2 0x1D2B SWAP2 PUSH2 0x1D06 PUSH1 0x20 SWAP8 PUSH32 0x0 PUSH32 0x0 PUSH2 0x4F16 JUMP JUMPDEST PUSH2 0x1D0F DUP6 PUSH2 0x46D3 JUMP JUMPDEST SWAP2 PUSH2 0x1D25 PUSH2 0x1D1F PUSH1 0x80 DUP9 ADD PUSH2 0x46D3 JUMP JUMPDEST SWAP2 PUSH2 0x47E9 JUMP JUMPDEST SWAP3 PUSH2 0x5443 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP2 AND EQ PUSH2 0x1D8A JUMPI JUMPDEST POP PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x18FF PUSH2 0x1D96 SWAP2 PUSH2 0x46D3 JUMP JUMPDEST DUP3 PUSH2 0x1D5E JUMP JUMPDEST DUP2 PUSH2 0x1DB0 JUMPI JUMPDEST POP POP PUSH1 0x20 SWAP5 PUSH2 0x1D2B SWAP2 PUSH2 0x1D06 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH32 0x0 AND SWAP2 DUP1 PUSH32 0x0 AND SWAP2 PUSH2 0x1E0A DUP6 PUSH2 0x4ED2 JUMP JUMPDEST SWAP4 DUP1 EXTCODESIZE ISZERO PUSH2 0x392 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP5 DUP3 AND PUSH1 0x44 DUP7 ADD MSTORE SWAP2 DUP8 AND AND PUSH1 0x64 DUP5 ADD MSTORE PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x84 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP4 PUSH1 0x20 SWAP4 PUSH2 0x1ED0 SWAP4 PUSH2 0x1F10 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP11 PUSH1 0x4 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x387 JUMPI PUSH2 0x1EE5 JUMPI JUMPDEST DUP1 PUSH2 0x1DA2 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1F09 JUMPI JUMPDEST PUSH2 0x1EFB DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x392 JUMPI DUP6 PUSH2 0x1EDF JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1EF1 JUMP JUMPDEST PUSH2 0x1F19 SWAP1 PUSH2 0x4007 JUMP JUMPDEST DUP11 PUSH2 0x1E83 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP1 DUP6 AND EQ PUSH2 0x1CAE JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH2 0x1F6D PUSH2 0x3F7F JUMP JUMPDEST PUSH2 0x1F75 PUSH2 0x3FAB JUMP JUMPDEST PUSH2 0x1F7D PUSH2 0x4E74 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH32 0x0 AND PUSH1 0x40 MLOAD SWAP3 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP5 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 DUP5 GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x387 JUMPI PUSH0 PUSH2 0x1FFE PUSH2 0x2039 SWAP7 DUP3 SWAP7 DUP4 SWAP2 PUSH2 0x207D JUMPI JUMPDEST POP MLOAD PUSH2 0x4A42 JUMP JUMPDEST SWAP4 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xA07D604000000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x44 CALLDATALOAD SWAP2 PUSH1 0x4 DUP7 ADD PUSH2 0x47F6 JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x387 JUMPI PUSH2 0x359 SWAP2 PUSH0 SWAP2 PUSH2 0x2063 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x41A9 JUMP JUMPDEST PUSH2 0x2077 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x1565 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP3 PUSH2 0x204E JUMP JUMPDEST PUSH2 0x2091 SWAP2 POP RETURNDATASIZE DUP1 DUP6 DUP4 RETURNDATACOPY PUSH2 0x1193 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP9 PUSH2 0x1FF7 JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH1 0x20 PUSH32 0x0 TLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH2 0x20EA CALLDATASIZE PUSH2 0x4177 JUMP JUMPDEST PUSH2 0x20F2 PUSH2 0x4E47 JUMP JUMPDEST PUSH2 0x20FA PUSH2 0x4E74 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 DUP2 AND SWAP3 PUSH1 0x20 SWAP1 DUP2 DUP2 ADD SWAP1 PUSH2 0x2137 DUP3 PUSH2 0x46D3 JUMP JUMPDEST SWAP6 PUSH2 0x2141 DUP3 PUSH2 0x46D3 JUMP JUMPDEST SWAP7 PUSH2 0x214F PUSH1 0x40 DUP5 ADD DUP5 PUSH2 0x46E7 JUMP JUMPDEST SWAP2 SWAP1 SWAP9 PUSH1 0x80 DUP6 ADD CALLDATALOAD SWAP2 PUSH1 0x5 DUP4 LT ISZERO PUSH2 0x392 JUMPI DUP10 PUSH2 0x2D0 PUSH2 0x2193 SWAP5 PUSH2 0x21A2 PUSH2 0x21F2 SWAP15 PUSH0 SWAP9 DUP14 DUP7 PUSH2 0x21BA SWAP10 PUSH2 0x2186 DUP16 PUSH1 0xC0 DUP2 ADD SWAP1 PUSH2 0x473B JUMP JUMPDEST SWAP10 SWAP1 SWAP11 PUSH1 0x40 MLOAD SWAP14 DUP15 PUSH2 0x4038 JUMP JUMPDEST AND DUP13 MSTORE AND SWAP1 DUP11 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x408F JUMP JUMPDEST PUSH1 0x40 DUP8 ADD MSTORE PUSH1 0x60 DUP10 ADD CALLDATALOAD PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0x80 DUP7 ADD PUSH2 0x48AC JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP10 DUP2 SWAP3 PUSH32 0x4AF29EC400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x4BE4 JUMP JUMPDEST SUB DUP2 DUP4 DUP6 GAS CALL SWAP6 DUP7 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP4 PUSH0 SWAP9 PUSH0 SWAP9 PUSH2 0x24A8 JUMPI JUMPDEST POP PUSH2 0x2214 SWAP1 PUSH2 0x46D3 JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD SWAP2 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP2 PUSH2 0x248E JUMPI JUMPDEST POP SWAP7 SWAP8 PUSH1 0xA0 DUP5 ADD SWAP8 SWAP1 PUSH0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x244D JUMPI DUP4 PUSH2 0x2277 DUP3 DUP6 PUSH2 0x4BD0 JUMP JUMPDEST MLOAD AND PUSH2 0x2283 DUP3 DUP10 PUSH2 0x4BD0 JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO PUSH2 0x23E0 JUMPI PUSH2 0x2294 DUP13 PUSH2 0x47E9 JUMP JUMPDEST DUP1 PUSH2 0x2422 JUMPI JUMPDEST ISZERO PUSH2 0x22D4 JUMPI POP SWAP1 PUSH2 0x22CE PUSH1 0x1 SWAP3 DUP12 PUSH32 0x0 PUSH2 0x4F16 JUMP JUMPDEST ADD PUSH2 0x2263 JUMP JUMPDEST SWAP1 DUP6 PUSH32 0x0 AND SWAP1 PUSH2 0x2302 DUP10 PUSH2 0x46D3 JUMP JUMPDEST PUSH2 0x230B DUP3 PUSH2 0x4ED2 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x392 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE DUP11 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE SWAP1 DUP5 AND PUSH1 0x64 DUP3 ADD MSTORE SWAP3 SWAP2 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x84 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH2 0x23CC SWAP4 DUP13 SWAP4 PUSH2 0x2413 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP3 DUP4 SWAP3 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB DUP2 PUSH0 DUP11 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x387 JUMPI DUP10 SWAP2 PUSH2 0x23EA JUMPI JUMPDEST POP POP PUSH1 0x1 SWAP1 PUSH2 0x22CE JUMP JUMPDEST DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x240C JUMPI JUMPDEST PUSH2 0x23FD DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x392 JUMPI DUP8 DUP13 PUSH2 0x23E0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x23F3 JUMP JUMPDEST PUSH2 0x241C SWAP1 PUSH2 0x4007 JUMP JUMPDEST DUP16 PUSH2 0x2381 JUMP JUMPDEST POP DUP6 PUSH32 0x0 AND DUP2 EQ PUSH2 0x229A JUMP JUMPDEST POP DUP6 PUSH2 0x359 DUP12 PUSH2 0x245F PUSH2 0x18FF DUP10 PUSH2 0x46D3 JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x426B JUMP JUMPDEST PUSH2 0x24A2 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x1193 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP10 PUSH2 0x2258 JUMP JUMPDEST SWAP1 SWAP8 POP PUSH2 0x24C5 SWAP2 SWAP9 POP PUSH2 0x2214 SWAP5 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x378 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST SWAP9 SWAP2 SWAP5 SWAP1 SWAP9 SWAP8 SWAP1 PUSH2 0x220A JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH0 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0x2604 JUMPI JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP6 LT DUP5 EQ PUSH2 0x25D7 JUMPI DUP6 DUP8 SWAP5 DUP7 DUP7 MSTORE SWAP2 DUP3 PUSH0 EQ PUSH2 0x2599 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x2540 JUMPI JUMPDEST POP PUSH2 0x252C SWAP3 POP SUB DUP4 PUSH2 0x4054 JUMP JUMPDEST PUSH2 0x359 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x4246 JUMP JUMPDEST PUSH0 DUP1 DUP1 MSTORE DUP6 SWAP3 POP SWAP1 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP6 DUP4 LT PUSH2 0x2581 JUMPI POP POP PUSH2 0x252C SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x251F JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x256A JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0x252C SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0x251F SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0x24FB JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH2 0x263F PUSH2 0x2638 PUSH0 DUP1 PUSH2 0x616 PUSH2 0x76A PUSH2 0x43E PUSH2 0x262D CALLDATASIZE PUSH2 0x4432 JUMP JUMPDEST SWAP6 SWAP4 SWAP11 SWAP3 SWAP10 SWAP1 PUSH2 0x4E05 JUMP JUMPDEST SWAP9 DUP11 PUSH2 0x5191 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x2656 DUP4 PUSH2 0x3FEB JUMP JUMPDEST ADDRESS DUP4 MSTORE DUP6 PUSH1 0x20 SWAP12 AND DUP12 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x2 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xB24BD57100000000000000000000000000000000000000000000000000000000 DUP12 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x4A8C JUMP JUMPDEST PUSH2 0x43E PUSH2 0x1BD8 PUSH0 DUP1 PUSH2 0x275A PUSH2 0x26D7 CALLDATASIZE PUSH2 0x4491 JUMP JUMPDEST PUSH2 0x26E7 SWAP10 SWAP4 SWAP5 SWAP9 SWAP3 SWAP2 SWAP10 CALLER PUSH2 0x4E05 JUMP JUMPDEST SWAP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x26FE DUP6 PUSH2 0x3FEB JUMP JUMPDEST CALLER DUP6 MSTORE DUP8 PUSH1 0x20 SWAP13 AND DUP13 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE DUP8 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x7B03C7BA00000000000000000000000000000000000000000000000000000000 DUP11 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x4A8C JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x387 JUMPI PUSH2 0x27A0 SWAP2 PUSH0 SWAP2 PUSH2 0x27BC JUMPI JUMPDEST POP DUP3 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x4AEA JUMP JUMPDEST POP SWAP3 SWAP1 POP PUSH2 0x1118 JUMPI PUSH2 0x359 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x41A9 JUMP JUMPDEST PUSH2 0x27D0 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x526 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP5 PUSH2 0x2791 JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH2 0x27EF PUSH2 0x3F7F JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x392 JUMPI PUSH2 0x2810 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x40DD JUMP JUMPDEST SWAP2 PUSH2 0x2819 PUSH2 0x3F95 JUMP JUMPDEST SWAP2 PUSH1 0x84 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x392 JUMPI PUSH0 SWAP4 PUSH2 0x43E PUSH2 0x8FD DUP7 SWAP5 PUSH2 0x2842 PUSH2 0x882 PUSH2 0x28B7 SWAP7 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x415C JUMP JUMPDEST SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x285A DUP6 PUSH2 0x3FEB JUMP JUMPDEST ADDRESS DUP6 MSTORE AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x4 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xEFD85F1400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x48F2 JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH2 0x359 SWAP3 PUSH2 0x2903 SWAP2 PUSH0 SWAP2 PUSH2 0x2940 JUMPI JUMPDEST POP PUSH1 0x20 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x496F JUMP JUMPDEST SWAP1 SWAP4 SWAP2 SWAP3 PUSH2 0x2918 JUMPI JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x426B JUMP JUMPDEST PUSH0 PUSH32 0x0 TSTORE PUSH2 0x290C JUMP JUMPDEST PUSH2 0x2954 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x526 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP5 PUSH2 0x28F3 JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH2 0x2968 CALLDATASIZE PUSH2 0x42E6 JUMP JUMPDEST SWAP1 PUSH2 0x2976 SWAP1 SWAP5 SWAP4 SWAP3 SWAP5 PUSH2 0x4E05 JUMP JUMPDEST SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 DUP2 PUSH1 0x40 MLOAD SWAP7 PUSH2 0x298F DUP9 PUSH2 0x401B JUMP JUMPDEST CALLER DUP9 MSTORE DUP2 PUSH1 0x20 SWAP11 DUP12 DUP11 ADD PUSH0 SWAP1 MSTORE AND PUSH1 0x40 DUP10 ADD MSTORE AND PUSH1 0x60 DUP8 ADD MSTORE AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP4 ADD PUSH0 SWAP1 MSTORE PUSH1 0xE0 DUP4 ADD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 MSTORE PUSH2 0x100 DUP4 ADD PUSH0 SWAP1 MSTORE PUSH2 0x120 DUP4 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP3 DUP6 DUP3 ADD PUSH32 0xBE5AE84100000000000000000000000000000000000000000000000000000000 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD SWAP1 PUSH2 0x2A18 SWAP2 PUSH2 0x4B3F JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE PUSH2 0x2A2A SWAP1 DUP4 PUSH2 0x4054 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 SWAP4 PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD PUSH2 0x2A66 SWAP2 PUSH2 0x4246 JUMP JUMPDEST SUB SWAP2 PUSH32 0x0 AND SWAP2 DUP2 GAS PUSH0 SWAP5 DUP6 SWAP2 CALL SWAP1 DUP2 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP2 PUSH2 0x2ABD JUMPI JUMPDEST POP DUP3 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x392 JUMPI DUP3 ADD MLOAD SWAP1 PUSH2 0x4EA JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x2AD1 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x526 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP4 PUSH2 0x2AA0 JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH2 0x2AF0 PUSH2 0x3F7F JUMP JUMPDEST PUSH2 0x2AF8 PUSH2 0x3FC1 JUMP JUMPDEST SWAP1 PUSH2 0x2B01 PUSH2 0x3F95 JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x392 JUMPI PUSH2 0x2B24 PUSH2 0x2B2A SWAP2 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x415C JUMP JUMPDEST SWAP2 PUSH2 0x4E05 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 PUSH32 0x0 AND SWAP3 DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND SWAP6 DUP7 PUSH1 0x4 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x40 DUP3 PUSH1 0x44 DUP2 DUP7 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP1 PUSH0 SWAP4 PUSH2 0x2C9A JUMPI JUMPDEST POP PUSH0 SWAP4 PUSH2 0x43E PUSH2 0x2C36 DUP7 SWAP5 PUSH2 0x2BBE PUSH2 0x2C72 SWAP6 PUSH2 0x4A42 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH2 0x2BCB DUP10 DUP5 PUSH2 0x4BD0 JUMP JUMPDEST MSTORE PUSH1 0x40 MLOAD SWAP2 PUSH2 0x2BD9 DUP4 PUSH2 0x3FEB JUMP JUMPDEST ADDRESS DUP4 MSTORE PUSH1 0x20 SWAP12 DUP13 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xB24BD57100000000000000000000000000000000000000000000000000000000 DUP13 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x4A8C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP12 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4246 JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH2 0x4DB SWAP3 PUSH2 0x4D3 SWAP2 PUSH0 SWAP2 PUSH2 0x512 JUMPI POP DUP6 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x4AEA JUMP JUMPDEST SWAP3 POP POP SWAP2 PUSH1 0x40 DUP3 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x2CD1 JUMPI JUMPDEST DUP2 PUSH2 0x2CB7 PUSH1 0x40 SWAP4 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x392 JUMPI DUP2 MLOAD PUSH1 0x20 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 PUSH0 PUSH2 0x2BA7 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2CAA JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH2 0x2CF5 PUSH2 0x2CEA CALLDATASIZE PUSH2 0x4432 JUMP JUMPDEST SWAP3 SWAP5 SWAP1 SWAP4 SWAP2 SWAP4 PUSH2 0x4E05 JUMP JUMPDEST SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 PUSH32 0x0 AND SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP5 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND SWAP7 DUP8 PUSH1 0x4 DUP7 ADD MSTORE AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x40 DUP4 PUSH1 0x44 DUP2 DUP8 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP1 PUSH0 SWAP5 PUSH2 0x2E37 JUMPI JUMPDEST POP SWAP4 PUSH2 0x43E PUSH2 0x2C36 PUSH0 SWAP7 SWAP5 PUSH2 0x2E0F SWAP5 PUSH2 0x2D8B DUP10 SWAP8 PUSH2 0x4A42 JUMP JUMPDEST SWAP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x2DA7 DUP11 DUP6 PUSH2 0x4BD0 JUMP JUMPDEST MSTORE PUSH1 0x40 MLOAD SWAP3 PUSH2 0x2DB5 DUP5 PUSH2 0x3FEB JUMP JUMPDEST ADDRESS DUP5 MSTORE PUSH1 0x20 SWAP13 DUP14 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x2 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xEFD85F1400000000000000000000000000000000000000000000000000000000 DUP13 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x48F2 JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH2 0x4DB SWAP3 PUSH2 0x1B1F SWAP2 PUSH0 SWAP2 PUSH2 0x1B26 JUMPI POP DUP6 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x496F JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP4 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x2E6C JUMPI JUMPDEST DUP2 PUSH2 0x2E53 PUSH1 0x40 SWAP4 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x392 JUMPI DUP3 MLOAD PUSH1 0x20 SWAP1 SWAP4 ADD MLOAD SWAP3 PUSH2 0x43E PUSH2 0x2D72 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2E46 JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD GT PUSH2 0x392 JUMPI CALLDATASIZE PUSH1 0x23 PUSH1 0x4 CALLDATALOAD ADD SLT ISZERO PUSH2 0x392 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD GT PUSH2 0x392 JUMPI CALLDATASIZE PUSH1 0x24 PUSH1 0xC0 PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD MUL PUSH1 0x4 CALLDATALOAD ADD ADD GT PUSH2 0x392 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x392 JUMPI PUSH2 0x2F2D SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4352 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD GT PUSH2 0x392 JUMPI PUSH1 0x60 PUSH1 0x3 NOT PUSH1 0x44 CALLDATALOAD CALLDATASIZE SUB ADD SLT PUSH2 0x392 JUMPI PUSH1 0x64 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x392 JUMPI PUSH2 0x2F6E SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4383 JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x392 JUMPI PUSH2 0x2F8E SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4352 JUMP JUMPDEST SWAP5 SWAP1 SWAP4 PUSH2 0x2F99 PUSH2 0x4E47 JUMP JUMPDEST DUP1 PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD SUB PUSH2 0x34DC JUMPI PUSH0 JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD DUP2 LT PUSH2 0x3229 JUMPI POP POP POP PUSH1 0x44 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD PUSH1 0x44 CALLDATALOAD CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x392 JUMPI DUP2 PUSH1 0x44 CALLDATALOAD ADD PUSH1 0x4 DUP2 ADD CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x392 JUMPI PUSH1 0x24 DUP3 PUSH1 0x7 SHL CALLDATASIZE SUB SWAP2 ADD SGT PUSH2 0x392 JUMPI PUSH2 0x304C JUMPI JUMPDEST PUSH2 0x359 PUSH2 0xF76 DUP7 DUP7 PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH2 0x4CB0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP3 SWAP5 PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x392 JUMPI PUSH1 0x40 MLOAD SWAP5 PUSH32 0x2A2D80D100000000000000000000000000000000000000000000000000000000 DUP7 MSTORE CALLER PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x60 PUSH1 0x24 DUP8 ADD MSTORE PUSH1 0xC4 DUP7 ADD SWAP3 PUSH1 0x44 CALLDATALOAD ADD PUSH1 0x24 DUP2 ADD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 DUP4 ADD CALLDATALOAD GT PUSH2 0x392 JUMPI PUSH1 0x4 DUP3 ADD CALLDATALOAD PUSH1 0x7 SHL CALLDATASIZE SUB DUP6 SGT PUSH2 0x392 JUMPI PUSH1 0x60 PUSH1 0x64 DUP10 ADD MSTORE PUSH1 0x4 DUP3 ADD CALLDATALOAD SWAP1 MSTORE SWAP2 SWAP3 DUP7 SWAP3 PUSH1 0xE4 DUP5 ADD SWAP3 SWAP2 SWAP1 PUSH0 SWAP1 JUMPDEST PUSH1 0x4 DUP2 ADD CALLDATALOAD DUP3 LT PUSH2 0x31AB JUMPI POP POP POP DUP3 SWAP2 PUSH0 SWAP5 PUSH2 0x314E SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x312C PUSH1 0x24 PUSH1 0x44 CALLDATALOAD ADD PUSH2 0x3FD7 JUMP JUMPDEST AND PUSH1 0x84 DUP7 ADD MSTORE PUSH1 0x44 DUP1 CALLDATALOAD ADD CALLDATALOAD PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0x3 NOT DUP6 DUP5 SUB ADD PUSH1 0x44 DUP7 ADD MSTORE PUSH2 0x478C JUMP JUMPDEST SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH2 0x359 SWAP4 PUSH2 0xF76 SWAP4 PUSH2 0x319C JUMPI JUMPDEST DUP3 SWAP5 POP DUP2 SWAP4 POP PUSH2 0x301C JUMP JUMPDEST PUSH2 0x31A5 SWAP1 PUSH2 0x4007 JUMP JUMPDEST DUP5 PUSH2 0x3191 JUMP JUMPDEST SWAP2 SWAP6 SWAP5 POP SWAP2 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x31C2 DUP8 PUSH2 0x3FD7 JUMP JUMPDEST AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP8 ADD CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP1 SWAP4 SUB PUSH2 0x392 JUMPI PUSH1 0x4 SWAP3 PUSH1 0x1 SWAP3 DUP3 ADD MSTORE PUSH2 0x31F2 PUSH1 0x40 DUP10 ADD PUSH2 0x517E JUMP JUMPDEST PUSH6 0xFFFFFFFFFFFF DUP1 SWAP2 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x320D PUSH1 0x60 DUP11 ADD PUSH2 0x517E JUMP JUMPDEST AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP1 SWAP2 ADD SWAP8 ADD SWAP4 ADD SWAP1 POP DUP9 SWAP5 SWAP6 SWAP4 SWAP3 SWAP2 PUSH2 0x3100 JUMP JUMPDEST PUSH2 0x3237 PUSH2 0x2D0 DUP3 DUP5 DUP7 PUSH2 0x4DEE JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH1 0x60 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x60 DUP4 ADD GT OR PUSH2 0xF11 JUMPI PUSH1 0x60 DUP2 ADD PUSH1 0x40 MSTORE PUSH0 DUP2 MSTORE PUSH1 0x20 SWAP2 PUSH0 DUP4 DUP4 ADD MSTORE PUSH0 PUSH1 0x40 DUP4 ADD MSTORE DUP3 DUP2 ADD MLOAD SWAP1 PUSH1 0x60 PUSH1 0x40 DUP3 ADD MLOAD SWAP2 ADD MLOAD PUSH0 BYTE SWAP2 DUP4 MSTORE DUP4 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xC0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP2 DUP6 MUL PUSH1 0x4 CALLDATALOAD ADD CALLDATASIZE SUB ADD SLT PUSH2 0x392 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0x32C7 DUP3 PUSH2 0x4038 JUMP JUMPDEST PUSH2 0x32DA PUSH1 0x24 PUSH1 0xC0 DUP7 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x3FD7 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH2 0x32F0 PUSH1 0x44 PUSH1 0xC0 DUP8 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x3FD7 JUMP JUMPDEST SWAP1 DUP2 DUP6 DUP6 ADD MSTORE PUSH2 0x3309 PUSH1 0x64 PUSH1 0xC0 DUP9 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x3FD7 JUMP JUMPDEST PUSH1 0x40 DUP6 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x4 CALLDATALOAD PUSH1 0xC0 DUP9 MUL ADD PUSH1 0x84 DUP2 ADD CALLDATALOAD PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0xA4 DUP2 ADD CALLDATALOAD PUSH1 0x80 DUP8 ADD MSTORE PUSH1 0xC4 ADD CALLDATALOAD PUSH1 0xA0 DUP7 ADD MSTORE DUP4 ADD MLOAD DUP4 MLOAD SWAP4 DUP7 ADD MLOAD PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EXTCODESIZE ISZERO PUSH2 0x392 JUMPI PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 PUSH1 0xE4 SWAP5 DUP12 SWAP9 DUP5 SWAP9 PUSH1 0xC4 PUSH1 0xC0 PUSH1 0x40 MLOAD SWAP13 DUP14 SWAP12 DUP13 SWAP11 PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP13 MSTORE AND PUSH1 0x4 DUP12 ADD MSTORE ADDRESS PUSH1 0x24 DUP12 ADD MSTORE PUSH1 0x84 DUP3 DUP3 MUL PUSH1 0x4 CALLDATALOAD ADD ADD CALLDATALOAD PUSH1 0x44 DUP12 ADD MSTORE MUL PUSH1 0x4 CALLDATALOAD ADD ADD CALLDATALOAD PUSH1 0x64 DUP9 ADD MSTORE PUSH1 0x84 DUP8 ADD MSTORE PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xC4 DUP6 ADD MSTORE AND GAS CALL SWAP1 DUP2 PUSH2 0x34CD JUMPI JUMPDEST POP PUSH2 0x34C3 JUMPI PUSH2 0x33E6 PUSH2 0x514F JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 MLOAD AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP4 ADD MLOAD AND PUSH1 0x44 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP3 PUSH2 0x3493 JUMPI JUMPDEST POP PUSH1 0x60 ADD MLOAD SUB PUSH2 0x345E JUMPI POP POP PUSH1 0x1 SWAP1 JUMPDEST ADD PUSH2 0x2FA8 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x346B JUMPI DUP1 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP DUP4 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x34BC JUMPI JUMPDEST PUSH2 0x34AB DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x392 JUMPI MLOAD SWAP1 PUSH1 0x60 PUSH2 0x3448 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x34A1 JUMP JUMPDEST POP POP PUSH1 0x1 SWAP1 PUSH2 0x3458 JUMP JUMPDEST PUSH2 0x34D6 SWAP1 PUSH2 0x4007 JUMP JUMPDEST DUP11 PUSH2 0x33D9 JUMP JUMPDEST PUSH32 0xAAAD13F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH2 0x3512 CALLDATASIZE PUSH2 0x42E6 JUMP JUMPDEST SWAP1 PUSH2 0x3520 SWAP1 SWAP5 SWAP4 SWAP3 SWAP5 PUSH2 0x4E05 JUMP JUMPDEST SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 DUP2 PUSH1 0x40 MLOAD SWAP7 PUSH2 0x3539 DUP9 PUSH2 0x401B JUMP JUMPDEST CALLER DUP9 MSTORE DUP2 PUSH1 0x20 SWAP11 DUP12 DUP11 ADD PUSH1 0x1 SWAP1 MSTORE AND PUSH1 0x40 DUP10 ADD MSTORE AND PUSH1 0x60 DUP8 ADD MSTORE AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP4 ADD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 MSTORE PUSH1 0xE0 DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 MSTORE PUSH2 0x100 DUP4 ADD PUSH0 SWAP1 MSTORE PUSH2 0x120 DUP4 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP3 DUP6 DUP3 ADD PUSH32 0xBE5AE84100000000000000000000000000000000000000000000000000000000 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD SWAP1 PUSH2 0x2A18 SWAP2 PUSH2 0x4B3F JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH2 0x3637 PUSH2 0xF93 CALLDATASIZE PUSH2 0x4294 JUMP JUMPDEST SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 PUSH32 0x0 AND SWAP4 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND SWAP4 DUP5 PUSH1 0x4 DUP6 ADD MSTORE PUSH0 DUP5 PUSH1 0x24 DUP2 DUP5 GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x387 JUMPI PUSH2 0x109C PUSH0 SWAP6 SWAP5 PUSH2 0x372A SWAP5 PUSH2 0x36C3 DUP9 SWAP8 PUSH2 0x43E SWAP6 DUP10 SWAP2 PUSH2 0x374D JUMPI POP MLOAD PUSH2 0x4A42 JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x36D1 DUP5 PUSH2 0x3FEB JUMP JUMPDEST ADDRESS DUP5 MSTORE PUSH1 0x20 SWAP11 DUP12 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE DUP7 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xB24BD57100000000000000000000000000000000000000000000000000000000 DUP11 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x4A8C JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x387 JUMPI PUSH2 0x27A0 SWAP2 PUSH0 SWAP2 PUSH2 0x27BC JUMPI POP DUP3 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x4AEA JUMP JUMPDEST PUSH2 0x3761 SWAP2 POP RETURNDATASIZE DUP1 DUP12 DUP4 RETURNDATACOPY PUSH2 0x1193 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP13 PUSH2 0x1FF7 JUMP JUMPDEST PUSH0 PUSH2 0x43E DUP2 PUSH2 0x28B7 PUSH2 0x160B PUSH2 0x377B CALLDATASIZE PUSH2 0x41DC JUMP JUMPDEST SWAP1 PUSH2 0x378C SWAP9 SWAP5 SWAP3 SWAP9 SWAP6 SWAP4 SWAP6 CALLER PUSH2 0x4E05 JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x37A4 DUP8 PUSH2 0x3FEB JUMP JUMPDEST CALLER DUP8 MSTORE AND PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x4 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x5B34379100000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x48F2 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH2 0x3813 PUSH2 0x3F7F JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x392 JUMPI PUSH0 PUSH2 0x43E PUSH2 0x387A PUSH2 0x383D PUSH2 0x38B4 SWAP5 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x40DD JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH1 0x20 SWAP8 PUSH32 0x82CD54FB00000000000000000000000000000000000000000000000000000000 DUP10 DUP6 ADD MSTORE PUSH1 0x24 CALLDATALOAD SWAP1 CALLER SWAP1 PUSH1 0x24 DUP7 ADD PUSH2 0x47F6 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP7 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4246 JUMP JUMPDEST SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x387 JUMPI PUSH2 0xED5 SWAP2 PUSH0 SWAP2 PUSH2 0x3903 JUMPI JUMPDEST POP DUP3 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x4886 JUMP JUMPDEST PUSH2 0x3917 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x526 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP4 PUSH2 0x38F4 JUMP JUMPDEST CALLVALUE PUSH2 0x392 JUMPI PUSH2 0x392B CALLDATASIZE PUSH2 0x4177 JUMP JUMPDEST PUSH2 0x3933 PUSH2 0x4E47 JUMP JUMPDEST PUSH2 0x393B PUSH2 0x4E74 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 PUSH1 0x20 DUP3 PUSH2 0x3972 DUP6 DUP4 ADD PUSH2 0x46D3 JUMP JUMPDEST SWAP5 PUSH2 0x397C DUP2 PUSH2 0x46D3 JUMP JUMPDEST SWAP6 PUSH1 0x40 DUP3 ADD SWAP7 PUSH2 0x398C DUP9 DUP5 PUSH2 0x46E7 JUMP JUMPDEST SWAP1 PUSH2 0x399A PUSH1 0x60 DUP7 ADD DUP7 PUSH2 0x46E7 JUMP JUMPDEST SWAP4 SWAP1 SWAP3 DUP1 PUSH2 0x39AB PUSH1 0xC0 DUP10 ADD DUP10 PUSH2 0x473B JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xBA8A2BE000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP9 DUP15 AND PUSH1 0x4 DUP11 ADD MSTORE SWAP13 SWAP1 SWAP4 AND PUSH1 0x24 DUP9 ADD MSTORE PUSH1 0xC0 PUSH1 0x44 DUP9 ADD MSTORE PUSH1 0xC4 DUP8 ADD MSTORE SWAP5 SWAP10 SWAP5 PUSH1 0xE4 DUP12 ADD SWAP3 SWAP1 PUSH0 JUMPDEST DUP11 DUP3 DUP3 LT PUSH2 0x3D06 JUMPI POP POP POP POP PUSH1 0x3 NOT DUP11 DUP4 SUB ADD PUSH1 0x64 DUP12 ADD MSTORE DUP4 DUP3 MSTORE PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0x392 JUMPI DUP8 SWAP5 DUP6 DUP12 SWAP6 SWAP5 PUSH2 0x3A6D SWAP5 DUP8 SWAP7 PUSH1 0x5 SHL DUP1 SWAP3 DUP5 DUP4 ADD CALLDATACOPY ADD PUSH1 0x80 DUP10 ADD CALLDATALOAD PUSH1 0x84 DUP8 ADD MSTORE PUSH1 0x1C DUP7 DUP3 SUB ADD PUSH1 0xA4 DUP8 ADD MSTORE ADD SWAP2 PUSH2 0x478C JUMP JUMPDEST SUB DUP2 PUSH0 DUP7 DUP10 AND GAS CALL SWAP5 DUP6 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP6 PUSH2 0x3CD7 JUMPI JUMPDEST POP SWAP4 SWAP5 PUSH1 0xA0 DUP6 ADD SWAP5 SWAP1 PUSH0 JUMPDEST PUSH2 0x3A98 DUP3 DUP5 PUSH2 0x46E7 JUMP JUMPDEST SWAP1 POP DUP2 LT ISZERO PUSH2 0x3C9E JUMPI PUSH2 0x3ABD PUSH2 0x3AB8 DUP3 PUSH2 0x3AB2 DUP6 DUP8 PUSH2 0x46E7 JUMP JUMPDEST SWAP1 PUSH2 0x47AC JUMP JUMPDEST PUSH2 0x46D3 JUMP JUMPDEST PUSH2 0x3ACE DUP3 PUSH2 0x3AB2 PUSH1 0x60 DUP8 ADD DUP8 PUSH2 0x46E7 JUMP JUMPDEST CALLDATALOAD SWAP1 DUP2 ISZERO PUSH2 0x3C2F JUMPI PUSH2 0x3ADF DUP10 PUSH2 0x47E9 JUMP JUMPDEST DUP1 PUSH2 0x3C71 JUMPI JUMPDEST ISZERO PUSH2 0x3B1F JUMPI POP SWAP1 PUSH2 0x3B19 PUSH1 0x1 SWAP3 DUP9 PUSH32 0x0 PUSH2 0x4F16 JUMP JUMPDEST ADD PUSH2 0x3A8E JUMP JUMPDEST DUP6 PUSH32 0x0 AND SWAP2 PUSH2 0x3B4C DUP7 PUSH2 0x46D3 JUMP JUMPDEST PUSH2 0x3B55 DUP3 PUSH2 0x4ED2 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x392 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE DUP10 DUP13 AND DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE DUP4 DUP10 AND SWAP1 SWAP2 AND PUSH1 0x64 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x84 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x387 JUMPI PUSH2 0x3C19 SWAP4 DUP10 SWAP4 PUSH2 0x3C62 JUMPI POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP3 DUP4 SWAP3 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB DUP2 PUSH0 DUP10 DUP13 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x387 JUMPI DUP7 SWAP2 PUSH2 0x3C39 JUMPI JUMPDEST POP POP PUSH1 0x1 SWAP1 PUSH2 0x3B19 JUMP JUMPDEST DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3C5B JUMPI JUMPDEST PUSH2 0x3C4C DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x392 JUMPI DUP5 DUP10 PUSH2 0x3C2F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3C42 JUMP JUMPDEST PUSH2 0x3C6B SWAP1 PUSH2 0x4007 JUMP JUMPDEST DUP13 PUSH2 0x2381 JUMP JUMPDEST POP DUP6 PUSH32 0x0 AND DUP7 DUP3 AND EQ PUSH2 0x3AE5 JUMP JUMPDEST DUP5 DUP9 PUSH2 0x3CAC PUSH2 0x18FF DUP7 PUSH2 0x46D3 JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP5 POP DUP3 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3CFF JUMPI JUMPDEST PUSH2 0x3CEF DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x392 JUMPI MLOAD SWAP4 DUP7 PUSH2 0x3A83 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3CE5 JUMP JUMPDEST DUP1 DUP5 SWAP7 DUP13 PUSH2 0x3D17 PUSH1 0x1 SWAP6 SWAP7 SWAP8 PUSH2 0x3FD7 JUMP JUMPDEST AND DUP2 MSTORE ADD SWAP6 ADD SWAP3 SWAP2 ADD PUSH2 0x39F9 JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x392 JUMPI PUSH2 0x3D39 PUSH2 0x3F7F JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP4 GT PUSH2 0x392 JUMPI CALLDATASIZE PUSH1 0x23 DUP5 ADD SLT ISZERO PUSH2 0x392 JUMPI DUP3 PUSH1 0x4 ADD CALLDATALOAD SWAP2 PUSH2 0x3D67 DUP4 PUSH2 0x4077 JUMP JUMPDEST SWAP3 PUSH2 0x3D75 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x4054 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 SWAP5 PUSH1 0x24 DUP7 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x392 JUMPI PUSH1 0x24 DUP8 SWAP3 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x3F68 JUMPI POP POP POP POP PUSH1 0x44 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x392 JUMPI PUSH2 0x3DB9 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x40DD JUMP JUMPDEST SWAP3 PUSH2 0x3DC2 PUSH2 0x40FB JUMP JUMPDEST SWAP3 PUSH1 0xA4 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x392 JUMPI PUSH2 0x3DDB SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x415C JUMP JUMPDEST SWAP4 PUSH2 0x3DE5 CALLER PUSH2 0x4E05 JUMP JUMPDEST SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x3DFC DUP5 PUSH2 0x3FEB JUMP JUMPDEST CALLER DUP5 MSTORE DUP7 DUP10 DUP6 ADD SWAP7 AND DUP7 MSTORE PUSH1 0x40 DUP5 ADD SWAP5 DUP6 MSTORE PUSH1 0x60 DUP5 ADD SWAP1 DUP2 MSTORE PUSH1 0x80 DUP5 ADD SWAP5 PUSH1 0x64 CALLDATALOAD DUP7 MSTORE PUSH1 0xA0 DUP6 ADD SWAP3 ISZERO ISZERO DUP4 MSTORE PUSH1 0xC0 DUP6 ADD SWAP4 DUP5 MSTORE DUP8 PUSH1 0x40 MLOAD SWAP8 PUSH32 0x86FAD6600000000000000000000000000000000000000000000000000000000 DUP13 DUP11 ADD MSTORE DUP12 PUSH1 0x24 DUP11 ADD MSTORE DUP2 PUSH2 0x124 DUP11 ADD SWAP8 MLOAD AND PUSH1 0x44 DUP11 ADD MSTORE MLOAD AND PUSH1 0x64 DUP9 ADD MSTORE MLOAD SWAP4 PUSH1 0xE0 PUSH1 0x84 DUP9 ADD MSTORE DUP5 MLOAD DUP1 SWAP2 MSTORE DUP10 PUSH2 0x144 DUP9 ADD SWAP6 ADD SWAP1 PUSH0 JUMPDEST DUP12 DUP3 DUP3 LT PUSH2 0x3F52 JUMPI POP POP POP POP SWAP5 PUSH2 0x43E PUSH2 0x3F02 SWAP6 PUSH0 SWAP9 SWAP6 DUP4 SWAP6 PUSH2 0x5DA SWAP6 PUSH2 0x3EE2 DUP13 SWAP12 MLOAD SWAP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC SWAP5 DUP6 DUP10 DUP4 SUB ADD PUSH1 0xA4 DUP11 ADD MSTORE PUSH2 0x4634 JUMP JUMPDEST SWAP4 MLOAD PUSH1 0xC4 DUP8 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xE4 DUP7 ADD MSTORE MLOAD SWAP1 DUP5 DUP4 SUB ADD PUSH2 0x104 DUP6 ADD MSTORE PUSH2 0x4246 JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x387 JUMPI PUSH0 SWAP2 PUSH2 0x2ABD JUMPI POP DUP3 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x392 JUMPI DUP3 ADD MLOAD SWAP1 PUSH2 0x4EA JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 MLOAD DUP12 AND DUP9 MSTORE SWAP7 DUP8 ADD SWAP7 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x3E8D JUMP JUMPDEST DUP3 DUP1 SWAP2 PUSH2 0x3F74 DUP5 PUSH2 0x3FD7 JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x3D96 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x392 JUMPI JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x392 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x392 JUMPI JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x392 JUMPI JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x392 JUMPI JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF11 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xF11 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH2 0x140 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF11 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF11 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF11 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xF11 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 SWAP2 PUSH2 0x409A DUP3 PUSH2 0x4077 JUMP JUMPDEST SWAP2 PUSH2 0x40A8 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x4054 JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE PUSH1 0x20 DUP1 SWAP5 ADD SWAP2 PUSH1 0x5 SHL DUP2 ADD SWAP3 DUP4 GT PUSH2 0x392 JUMPI SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x40CE JUMPI POP POP POP POP JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x40C1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x392 JUMPI DUP2 PUSH1 0x20 PUSH2 0x40F8 SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0x408F JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x392 JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xF11 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH2 0x4132 DUP3 PUSH2 0x410A JUMP JUMPDEST SWAP2 PUSH2 0x4140 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x4054 JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0x392 JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x392 JUMPI DUP2 PUSH1 0x20 PUSH2 0x40F8 SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0x4126 JUMP JUMPDEST PUSH1 0x3 NOT SWAP1 PUSH1 0x20 DUP3 DUP3 ADD SLT PUSH2 0x392 JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x392 JUMPI DUP3 PUSH1 0xE0 SWAP3 SUB ADD SLT PUSH2 0x392 JUMPI PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x41C8 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x41BA JUMP JUMPDEST SWAP1 PUSH1 0xA0 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x392 JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x24 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x392 JUMPI DUP2 PUSH2 0x421E SWAP2 PUSH1 0x4 ADD PUSH2 0x40DD JUMP JUMPDEST SWAP3 PUSH1 0x44 CALLDATALOAD SWAP3 PUSH1 0x64 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x392 JUMPI SWAP3 PUSH1 0x84 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x392 JUMPI PUSH2 0x40F8 SWAP2 PUSH1 0x4 ADD PUSH2 0x415C JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH2 0x4281 PUSH2 0x40F8 SWAP5 SWAP3 PUSH1 0x60 DUP4 MSTORE PUSH1 0x60 DUP4 ADD SWAP1 PUSH2 0x41A9 JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x4246 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x392 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP3 PUSH1 0x24 CALLDATALOAD SWAP3 PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP2 PUSH1 0x64 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x392 JUMPI PUSH2 0x40F8 SWAP2 PUSH1 0x4 ADD PUSH2 0x415C JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x392 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 PUSH1 0x4 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP3 PUSH1 0x24 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP3 PUSH1 0x44 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP3 PUSH1 0x64 CALLDATALOAD SWAP3 PUSH1 0x84 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP2 PUSH1 0xA4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x392 JUMPI PUSH2 0x40F8 SWAP2 PUSH1 0x4 ADD PUSH2 0x415C JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x392 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x392 JUMPI PUSH1 0x20 DUP1 DUP6 ADD SWAP5 DUP5 PUSH1 0x5 SHL ADD ADD GT PUSH2 0x392 JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x392 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x392 JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x392 JUMPI JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD SWAP1 PUSH1 0x20 DUP4 MSTORE DUP4 MLOAD DUP1 SWAP3 MSTORE PUSH1 0x40 DUP4 ADD SWAP3 PUSH1 0x20 PUSH1 0x40 DUP5 PUSH1 0x5 SHL DUP4 ADD ADD SWAP6 ADD SWAP4 PUSH0 SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x43E6 JUMPI POP POP POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 DUP5 DUP1 PUSH2 0x4422 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP7 PUSH1 0x1 SWAP7 SUB ADD DUP8 MSTORE DUP11 MLOAD PUSH2 0x4246 JUMP JUMPDEST SWAP9 ADD SWAP4 ADD SWAP4 ADD SWAP2 SWAP5 SWAP4 SWAP3 SWAP1 PUSH2 0x43D6 JUMP JUMPDEST SWAP1 PUSH1 0xA0 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x392 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP3 PUSH1 0x24 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP3 PUSH1 0x44 CALLDATALOAD SWAP3 PUSH1 0x64 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP2 PUSH1 0x84 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x392 JUMPI PUSH2 0x40F8 SWAP2 PUSH1 0x4 ADD PUSH2 0x415C JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x392 JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x44 CALLDATALOAD DUP4 DUP2 GT PUSH2 0x392 JUMPI DUP3 PUSH2 0x44D6 SWAP2 PUSH1 0x4 ADD PUSH2 0x40DD JUMP JUMPDEST SWAP3 PUSH1 0x64 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x392 JUMPI SWAP3 PUSH1 0x84 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x392 JUMPI PUSH2 0x40F8 SWAP2 PUSH1 0x4 ADD PUSH2 0x415C JUMP JUMPDEST PUSH1 0x3 NOT SWAP1 PUSH1 0x20 DUP3 DUP3 ADD SLT PUSH2 0x392 JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x392 JUMPI DUP3 PUSH2 0x140 SWAP3 SUB ADD SLT PUSH2 0x392 JUMPI PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST PUSH2 0x100 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x392 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP3 PUSH1 0x24 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP3 PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP2 PUSH1 0x64 CALLDATALOAD SWAP2 PUSH1 0x84 CALLDATALOAD SWAP2 PUSH1 0xA4 CALLDATALOAD SWAP2 PUSH1 0xC4 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x392 JUMPI SWAP2 PUSH1 0xE4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x392 JUMPI PUSH2 0x45A2 SWAP2 PUSH1 0x4 ADD PUSH2 0x4383 JUMP JUMPDEST SWAP1 SWAP2 JUMP JUMPDEST SWAP2 PUSH2 0x45C3 SWAP1 PUSH2 0x40F8 SWAP5 SWAP3 DUP5 MSTORE PUSH1 0x60 PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD SWAP1 PUSH2 0x41A9 JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x4246 JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x392 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP3 PUSH1 0x24 CALLDATALOAD SWAP3 PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP2 PUSH1 0x64 CALLDATALOAD SWAP2 PUSH1 0x84 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x392 JUMPI SWAP2 PUSH1 0xA4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x392 JUMPI PUSH2 0x40F8 SWAP2 PUSH1 0x4 ADD PUSH2 0x415C JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x4653 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x4645 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x392 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x467E DUP3 PUSH2 0x410A JUMP JUMPDEST SWAP3 PUSH2 0x468C PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x4054 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x392 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x392 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x392 JUMPI PUSH2 0x40F8 SWAP3 ADD PUSH2 0x4667 JUMP JUMPDEST CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI SWAP1 JUMP JUMPDEST SWAP1 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP2 CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x392 JUMPI ADD DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x392 JUMPI PUSH1 0x20 ADD SWAP2 DUP2 PUSH1 0x5 SHL CALLDATASIZE SUB DUP4 SGT PUSH2 0x392 JUMPI JUMP JUMPDEST SWAP1 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP2 CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x392 JUMPI ADD DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x392 JUMPI PUSH1 0x20 ADD SWAP2 DUP2 CALLDATASIZE SUB DUP4 SGT PUSH2 0x392 JUMPI JUMP JUMPDEST PUSH1 0x1F DUP3 PUSH1 0x20 SWAP5 SWAP4 PUSH1 0x1F NOT SWAP4 DUP2 DUP7 MSTORE DUP7 DUP7 ADD CALLDATACOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x47BC JUMPI PUSH1 0x5 SHL ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x392 JUMPI SWAP1 JUMP JUMPDEST SWAP1 SWAP3 PUSH2 0x40F8 SWAP5 SWAP4 PUSH1 0x80 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP5 MSTORE AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE DUP2 PUSH1 0x60 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x41A9 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x392 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x4840 DUP2 PUSH2 0x4077 JUMP JUMPDEST SWAP4 PUSH2 0x484E PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x4054 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x392 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x4877 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x4869 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x392 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x392 JUMPI PUSH2 0x40F8 SWAP3 ADD PUSH2 0x4825 JUMP JUMPDEST PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x48B8 JUMPI MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x48B8 JUMPI MSTORE JUMP JUMPDEST SWAP1 PUSH2 0x40F8 SWAP2 PUSH1 0x20 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xC0 PUSH2 0x4933 PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0xE0 PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x100 DUP5 ADD SWAP1 PUSH2 0x4634 JUMP JUMPDEST SWAP3 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x4950 PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0xA0 DUP6 ADD SWAP1 PUSH2 0x48E5 JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD MLOAD ISZERO ISZERO DUP3 DUP5 ADD MSTORE ADD MLOAD SWAP1 PUSH1 0xE0 PUSH1 0x1F NOT DUP3 DUP6 SUB ADD SWAP2 ADD MSTORE PUSH2 0x4246 JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x60 DUP3 DUP5 SUB SLT PUSH2 0x392 JUMPI DUP2 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x392 JUMPI DUP5 PUSH2 0x499B SWAP2 DUP4 ADD PUSH2 0x4825 JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP3 ADD MLOAD SWAP4 PUSH1 0x40 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x392 JUMPI PUSH2 0x40F8 SWAP3 ADD PUSH2 0x4667 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x392 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x392 JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x392 JUMPI DUP3 MLOAD PUSH2 0x49EE DUP2 PUSH2 0x4077 JUMP JUMPDEST SWAP4 PUSH2 0x49FC PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x4054 JUMP JUMPDEST DUP2 DUP6 MSTORE DUP4 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x392 JUMPI DUP4 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x4A23 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x392 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x4A15 JUMP JUMPDEST SWAP1 PUSH2 0x4A4C DUP3 PUSH2 0x4077 JUMP JUMPDEST PUSH2 0x4A59 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x4054 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x4A69 DUP3 SWAP5 PUSH2 0x4077 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x48B8 JUMPI MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x48B8 JUMPI MSTORE JUMP JUMPDEST SWAP1 PUSH2 0x40F8 SWAP2 PUSH1 0x20 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xC0 PUSH2 0x4ACD PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0xE0 PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x100 DUP5 ADD SWAP1 PUSH2 0x4634 JUMP JUMPDEST SWAP3 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x4950 PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0xA0 DUP6 ADD SWAP1 PUSH2 0x4A7F JUMP JUMPDEST SWAP2 PUSH1 0x60 DUP4 DUP4 SUB SLT PUSH2 0x392 JUMPI DUP3 MLOAD SWAP3 PUSH1 0x20 DUP2 ADD MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP2 GT PUSH2 0x392 JUMPI DUP2 PUSH2 0x4B1B SWAP2 DUP5 ADD PUSH2 0x4825 JUMP JUMPDEST SWAP4 PUSH1 0x40 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x392 JUMPI PUSH2 0x40F8 SWAP3 ADD PUSH2 0x4667 JUMP JUMPDEST SWAP1 PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x48B8 JUMPI MSTORE JUMP JUMPDEST PUSH2 0x160 PUSH2 0x40F8 SWAP3 PUSH1 0x20 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND PUSH1 0x20 DUP6 ADD MSTORE PUSH2 0x4B6D PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP7 ADD SWAP1 PUSH2 0x4B32 JUMP JUMPDEST DUP1 PUSH1 0x40 DUP4 ADD MLOAD AND PUSH1 0x60 DUP6 ADD MSTORE DUP1 PUSH1 0x60 DUP4 ADD MLOAD AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH2 0x100 SWAP1 DUP2 DUP6 ADD MSTORE DUP2 ADD MLOAD SWAP1 PUSH2 0x120 SWAP2 ISZERO ISZERO DUP3 DUP6 ADD MSTORE ADD MLOAD SWAP2 PUSH2 0x140 DUP1 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x4246 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x47BC JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x40F8 SWAP2 PUSH1 0x20 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xA0 PUSH2 0x4C24 PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0xC0 PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0xE0 DUP5 ADD SWAP1 PUSH2 0x4634 JUMP JUMPDEST SWAP3 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x4C40 PUSH1 0x80 DUP3 ADD MLOAD DUP4 DUP6 ADD SWAP1 PUSH2 0x48E5 JUMP JUMPDEST ADD MLOAD SWAP1 PUSH1 0xC0 PUSH1 0x1F NOT DUP3 DUP6 SUB ADD SWAP2 ADD MSTORE PUSH2 0x4246 JUMP JUMPDEST SWAP1 PUSH2 0x40F8 SWAP2 PUSH1 0x20 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA0 PUSH2 0x4C9E PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0xC0 PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xE0 DUP5 ADD SWAP1 PUSH2 0x4634 JUMP JUMPDEST SWAP3 PUSH2 0x4C40 PUSH1 0x80 DUP3 ADD MLOAD DUP4 DUP6 ADD SWAP1 PUSH2 0x4A7F JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x4CBB CALLER PUSH2 0x4E05 JUMP JUMPDEST SWAP1 PUSH32 0x0 SWAP4 DUP5 TLOAD PUSH2 0x4DC6 JUMPI PUSH1 0x1 SWAP1 PUSH1 0x1 DUP7 TSTORE PUSH2 0x4CF4 DUP4 PUSH2 0x4077 JUMP JUMPDEST SWAP3 PUSH2 0x4D02 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x4054 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x1F NOT PUSH2 0x4D11 DUP3 PUSH2 0x4077 JUMP JUMPDEST ADD PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x4DB5 JUMPI POP POP PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x4D6C JUMPI POP POP POP POP SWAP1 PUSH0 PUSH2 0x4D61 SWAP3 SWAP5 TSTORE PUSH32 0x0 DUP1 TLOAD SWAP2 PUSH2 0x4D63 JUMPI JUMPDEST POP PUSH2 0x510C JUMP JUMPDEST JUMP JUMPDEST PUSH0 SWAP1 TSTORE PUSH0 PUSH2 0x4D5B JUMP JUMPDEST DUP1 PUSH2 0x4D99 PUSH0 DUP1 PUSH2 0x4D81 PUSH2 0x2D0 DUP10 SWAP7 DUP9 DUP11 PUSH2 0x4DEE JUMP JUMPDEST PUSH1 0x20 DUP2 MLOAD SWAP2 ADD ADDRESS GAS DELEGATECALL PUSH2 0x4D92 PUSH2 0x514F JUMP JUMPDEST SWAP1 ADDRESS PUSH2 0x56E8 JUMP JUMPDEST PUSH2 0x4DA3 DUP3 DUP9 PUSH2 0x4BD0 JUMP JUMPDEST MSTORE PUSH2 0x4DAE DUP2 DUP8 PUSH2 0x4BD0 JUMP JUMPDEST POP ADD PUSH2 0x4D1F JUMP JUMPDEST DUP1 PUSH1 0x60 PUSH1 0x20 DUP1 SWAP4 DUP10 ADD ADD MSTORE ADD PUSH2 0x4D14 JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP3 LT ISZERO PUSH2 0x47BC JUMPI PUSH2 0x45A2 SWAP2 PUSH1 0x5 SHL DUP2 ADD SWAP1 PUSH2 0x473B JUMP JUMPDEST SWAP1 PUSH0 SWAP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 TLOAD AND ISZERO PUSH2 0x4E3D JUMPI POP POP JUMP JUMPDEST SWAP1 SWAP2 SWAP3 POP TSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x4DC6 JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x4EA6 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP2 GT PUSH2 0x4EE6 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0xA0 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 DUP2 SELFBALANCE LT PUSH2 0x50E4 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x392 JUMPI PUSH1 0x40 SWAP2 DUP3 MLOAD SWAP2 PUSH32 0xD0E30DB000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH0 SWAP3 PUSH0 DUP2 PUSH1 0x4 DUP2 DUP10 DUP12 GAS CALL DUP1 ISZERO PUSH2 0x50DA JUMPI PUSH2 0x50C7 JUMPI JUMPDEST POP AND SWAP3 DUP3 MLOAD SWAP5 PUSH1 0x20 SWAP6 DUP7 DUP2 ADD SWAP1 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH1 0x24 DUP3 ADD MSTORE DUP4 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH1 0x80 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF11 JUMPI DUP7 MSTORE MLOAD PUSH2 0x4FE7 SWAP2 DUP6 SWAP2 DUP3 SWAP2 DUP3 DUP7 GAS CALL PUSH2 0x4FE0 PUSH2 0x514F JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x56E8 JUMP JUMPDEST DUP1 MLOAD DUP8 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x50A2 JUMPI JUMPDEST POP POP SWAP1 POP PUSH2 0x5077 JUMPI SWAP1 PUSH1 0x44 DUP7 SWAP3 DUP5 DUP7 MLOAD SWAP8 DUP9 SWAP5 DUP6 SWAP4 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x506D JUMPI POP POP PUSH2 0x5049 JUMPI POP POP JUMP JUMPDEST DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x5066 JUMPI JUMPDEST PUSH2 0x505C DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x392 JUMPI JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x5052 JUMP JUMPDEST MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 DUP3 REVERT JUMPDEST DUP4 DUP1 SWAP3 SWAP4 POP ADD SUB SLT PUSH2 0x50C3 JUMPI DUP7 ADD MLOAD DUP1 ISZERO SWAP1 DUP2 ISZERO SUB PUSH2 0x50C3 JUMPI DUP1 DUP8 PUSH0 PUSH2 0x4FF4 JUMP JUMPDEST DUP4 DUP1 REVERT JUMPDEST PUSH2 0x50D2 SWAP2 SWAP4 POP PUSH2 0x4007 JUMP JUMPDEST PUSH0 SWAP2 PUSH0 PUSH2 0x4F72 JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0xA01A9DF600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SELFBALANCE DUP1 ISZERO PUSH2 0x514B JUMPI PUSH32 0x0 TLOAD PUSH2 0x514B JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x4D61 SWAP3 AND PUSH2 0x566C JUMP JUMPDEST POP POP JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x5179 JUMPI RETURNDATASIZE SWAP1 PUSH2 0x5160 DUP3 PUSH2 0x410A JUMP JUMPDEST SWAP2 PUSH2 0x516E PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x4054 JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH6 0xFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x392 JUMPI JUMP JUMPDEST SWAP2 PUSH1 0x44 SWAP3 SWAP4 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 SWAP5 DUP6 SWAP3 DUP3 DUP1 DUP6 MLOAD SWAP10 DUP11 SWAP6 DUP7 SWAP5 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x4 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x5261 JUMPI PUSH0 SWAP4 PUSH0 SWAP6 PUSH2 0x522A JUMPI JUMPDEST POP POP PUSH2 0x5227 PUSH2 0x5220 DUP6 SWAP5 PUSH2 0x4A42 JUMP JUMPDEST SWAP5 DUP6 PUSH2 0x4BD0 JUMP JUMPDEST MSTORE JUMP JUMPDEST DUP1 SWAP3 SWAP6 POP DUP2 SWAP5 POP RETURNDATASIZE DUP4 GT PUSH2 0x525A JUMPI JUMPDEST PUSH2 0x5243 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x392 JUMPI PUSH1 0x20 DUP3 MLOAD SWAP3 ADD MLOAD SWAP3 PUSH0 DUP1 PUSH2 0x5211 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x5239 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0xE0 DUP2 ADD CALLDATALOAD TIMESTAMP GT PUSH2 0x541B JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x2 DUP4 LT ISZERO PUSH2 0x392 JUMPI PUSH1 0x40 SWAP3 PUSH2 0x529B DUP3 DUP6 ADD PUSH2 0x46D3 JUMP JUMPDEST SWAP3 DUP1 PUSH1 0x60 SWAP5 DUP6 SWAP4 DUP5 DUP7 ADD PUSH2 0x52AE SWAP1 PUSH2 0x46D3 JUMP JUMPDEST SWAP6 PUSH2 0x52BB PUSH1 0x80 DUP3 ADD PUSH2 0x46D3 JUMP JUMPDEST SWAP1 DUP5 PUSH2 0x52CB PUSH2 0x120 DUP4 ADD DUP4 PUSH2 0x473B JUMP JUMPDEST SWAP2 SWAP1 DUP13 MLOAD SWAP6 PUSH2 0x52D9 DUP8 PUSH2 0x3FEB JUMP JUMPDEST DUP7 MSTORE DUP2 PUSH1 0x20 DUP8 ADD SWAP8 AND DUP8 MSTORE DUP2 DUP14 DUP8 ADD SWAP12 AND DUP12 MSTORE DUP2 DUP11 DUP8 ADD SWAP6 AND DUP6 MSTORE PUSH1 0x80 DUP7 ADD SWAP3 PUSH1 0xA0 DUP6 ADD CALLDATALOAD DUP5 MSTORE PUSH1 0xA0 DUP8 ADD SWAP5 PUSH1 0xC0 ADD CALLDATALOAD DUP6 MSTORE CALLDATASIZE SWAP1 PUSH2 0x5316 SWAP3 PUSH2 0x4126 JUMP JUMPDEST SWAP4 PUSH1 0xC0 DUP7 ADD SWAP5 DUP6 MSTORE DUP2 DUP14 MLOAD SWAP12 DUP13 SWAP11 DUP12 SWAP10 DUP11 SWAP10 PUSH32 0x2BFB780C00000000000000000000000000000000000000000000000000000000 DUP12 MSTORE PUSH1 0x4 DUP12 ADD PUSH1 0x20 SWAP1 MSTORE PUSH1 0x24 DUP12 ADD SWAP1 MLOAD SWAP1 PUSH2 0x5363 SWAP2 PUSH2 0x4B32 JUMP JUMPDEST MLOAD AND PUSH1 0x44 DUP10 ADD MSTORE MLOAD AND PUSH1 0x64 DUP8 ADD MSTORE MLOAD AND PUSH1 0x84 DUP6 ADD MSTORE MLOAD PUSH1 0xA4 DUP5 ADD MSTORE MLOAD PUSH1 0xC4 DUP4 ADD MSTORE MLOAD PUSH1 0xE4 DUP3 ADD PUSH1 0xE0 SWAP1 MSTORE PUSH2 0x104 DUP3 ADD PUSH2 0x539B SWAP2 PUSH2 0x4246 JUMP JUMPDEST SUB SWAP2 PUSH32 0x0 AND GAS SWAP1 PUSH0 SWAP2 CALL SWAP1 DUP2 ISZERO PUSH2 0x5261 JUMPI PUSH0 SWAP4 PUSH0 SWAP4 PUSH0 SWAP4 PUSH2 0x53DE JUMPI JUMPDEST POP POP POP SWAP1 SWAP2 SWAP3 JUMP JUMPDEST SWAP3 POP SWAP3 POP DUP1 SWAP4 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x5414 JUMPI JUMPDEST PUSH2 0x53F8 DUP2 DUP4 PUSH2 0x4054 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x392 JUMPI DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD SWAP2 SWAP1 SWAP3 ADD MLOAD PUSH0 DUP1 DUP1 PUSH2 0x53D6 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x53EE JUMP JUMPDEST PUSH32 0xE08B8AF000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP3 DUP3 ISZERO PUSH2 0x556F JUMPI DUP1 PUSH2 0x553A JUMPI JUMPDEST ISZERO PUSH2 0x54A1 JUMPI POP PUSH2 0x4D61 SWAP2 PUSH32 0x0 PUSH32 0x0 PUSH2 0x5575 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP1 EXTCODESIZE ISZERO PUSH2 0x392 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP4 SWAP1 SWAP3 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE PUSH0 SWAP1 DUP3 SWAP1 PUSH1 0x64 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL DUP1 ISZERO PUSH2 0x387 JUMPI PUSH2 0x5531 JUMPI POP JUMP JUMPDEST PUSH2 0x4D61 SWAP1 PUSH2 0x4007 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP1 DUP3 AND EQ PUSH2 0x5450 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST SWAP4 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP1 EXTCODESIZE ISZERO PUSH2 0x392 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 DUP9 DUP2 SWAP13 AND SWAP7 DUP8 PUSH1 0x4 DUP5 ADD MSTORE ADDRESS PUSH1 0x24 DUP5 ADD MSTORE DUP11 PUSH1 0x44 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x387 JUMPI PUSH2 0x5659 JUMPI JUMPDEST POP DUP1 DUP7 SWAP2 EXTCODESIZE ISZERO PUSH2 0x5655 JUMPI DUP2 SWAP1 PUSH1 0x24 PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x2E1A7D4D00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x564A JUMPI PUSH2 0x5632 JUMPI JUMPDEST POP PUSH2 0x4D61 SWAP4 SWAP5 POP AND PUSH2 0x566C JUMP JUMPDEST PUSH2 0x563C DUP7 SWAP2 PUSH2 0x4007 JUMP JUMPDEST PUSH2 0x5646 JUMPI DUP5 PUSH2 0x5625 JUMP JUMPDEST DUP5 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP9 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST PUSH2 0x5664 SWAP2 SWAP7 POP PUSH2 0x4007 JUMP JUMPDEST PUSH0 SWAP5 PUSH0 PUSH2 0x55DA JUMP JUMPDEST DUP2 SELFBALANCE LT PUSH2 0x56BC JUMPI PUSH0 DUP1 DUP1 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 SWAP5 AND GAS CALL PUSH2 0x568C PUSH2 0x514F JUMP JUMPDEST POP ISZERO PUSH2 0x5694 JUMPI JUMP JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0xCD78605900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE ADDRESS PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x56FD JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x5694 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x5743 JUMPI JUMPDEST PUSH2 0x570E JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x5706 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 JUMPI 0xF6 0x22 0xC4 CREATE2 GASPRICE PUSH22 0x9F8550565D430C6F6C937500A4B88DCFAFC92CA53C12 0xC 0x2D 0x25 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"1180:38695:64:-:0;;;;;;;;;-1:-1:-1;1180:38695:64;;;;;;;;-1:-1:-1;;;;;13086:5:65;1180:38695:64;13064:10:65;:28;13060:79;;1180:38695:64;13060:79:65;13115:13;;;1180:38695:64;13115:13:65;;1180:38695:64;;;;;;;;;;;;;;;3233:11;1180:38695;3233:11;;;1180:38695;;;;;;;;;;;;;;;;;;;;38694:545;1180:38695;38694:545;;;1180:38695;;;;;;;;;;26883:571;1180:38695;26883:571;;;1180:38695;;;;;37603:527;1180:38695;37603:527;;;1180:38695;;;;;;;;;;32938:574;1180:38695;32938:574;;;1180:38695;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20370:539;1180:38695;20370:539;;;1180:38695;;;;;;;;;;;;;;;21527:540;1180:38695;21527:540;;;1180:38695;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5971:387;1180:38695;5971:387;;;1180:38695;;;;;;;;;;14435:403;1180:38695;14435:403;;;1180:38695;13299:404;1180:38695;13299:404;1180:38695;;;;;;:::i;:::-;436:67:72;;:::i;:::-;-1:-1:-1;;;;;29532:11:64;;;;;;:::i;:::-;29565:13;;;:::i;:::-;29610:19;;1180:38695;29610:19;;;;:::i;:::-;29710:11;;;;;1180:38695;;;;;;;;29749:15;29489:290;29456:333;29749:15;1180:38695;29749:15;1180:38695;;29749:15;;1180:38695;29749:15;;;;;;1180:38695;29749:15;;;;:::i;:::-;1180:38695;;;;;;;;:::i;:::-;;;;;29532:11;29489:290;;1180:38695;;;;:::i;:::-;;29489:290;;1180:38695;29664:22;1180:38695;;29489:290;;1180:38695;29710:11;29489:290;;;:::i;:::-;1180:38695;;;:::i;:::-;29489:290;;;1180:38695;;;29456:333;;;;;;1180:38695;29456:333;;1180:38695;29456:333;;;:::i;:::-;;:6;;1180:38695;29456:333;;;;;;1180:38695;;;;;29456:333;;;1180:38695;;;;;;;;;;;:::i;:::-;;;;29456:333;;;1180:38695;29456:333;;;;;;;1180:38695;29456:333;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;1180:38695;;;;;;;;;;;;;;13215:506;13004:109;1180:38695;13215:506;1180:38695;;;;;:::i;:::-;12899:10;;;;;;;;3599:19:66;12899:10:64;3599:19:66;:::i;:::-;13004:109:64;;;:::i;:::-;1180:38695;;;-1:-1:-1;;;;;1180:38695:64;;;;;;;;;:::i;:::-;12899:10;1180:38695;;13299:404;1180:38695;;;;13299:404;;;1180:38695;;13299:404;;1180:38695;13299:404;;;1180:38695;13549:41;13299:404;;;1180:38695;;;13299:404;;;1180:38695;13299:404;;;1180:38695;;;13215:506;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;13215:506:64;;;;;;:::i;:::-;1180:38695;;13184:551;;;;;;1180:38695;13184:551;;;1180:38695;13184:551;;1180:38695;13215:506;1180:38695;;;;:::i;:::-;13184:551;:6;;1180:38695;13184:551;;;;;;;13804:22;13184:551;13160:626;13184:551;1180:38695;13184:551;;;1180:38695;;;;;;13160:626;;;;;;:::i;:::-;13804:22;;;;:::i;:::-;1180:38695;4282:82:66;;;1180:38695:64;;;;;;;4282:82:66;1180:38695:64;4704:12:66;3051:52:55;4282:82:66;;13184:551:64;;;;;;1180:38695;13184:551;;;;;;:::i;:::-;;;;;:::i;:::-;;;;1180:38695;14351:505;;1180:38695;;;14200:65;1180:38695;;;:::i;:::-;14111:10;3599:19:66;14111:10:64;;;;;;;;;;3599:19:66;:::i;:::-;14200:65:64;;;:::i;:::-;1180:38695;;-1:-1:-1;;;;;1180:38695:64;;;;;;;:::i;:::-;14111:10;1180:38695;;14435:403;;1180:38695;;14435:403;;;1180:38695;;14435:403;;1180:38695;14435:403;;;1180:38695;14683:42;14435:403;;;1180:38695;;;14435:403;;;1180:38695;14435:403;;;1180:38695;;;14351:505;;;;;;;;;;;;:::i;:::-;1180:38695;;14320:550;;;;;;1180:38695;14320:550;;;1180:38695;14320:550;;1180:38695;14351:505;1180:38695;;;;:::i;:::-;14320:550;:6;;1180:38695;14320:550;;;;;;14296:625;14320:550;1180:38695;14320:550;;;1180:38695;;;;;;14296:625;;;;;;:::i;:::-;4282:82:66;;;;;1180:38695:64;;;;;;14320:550;;;;;;1180:38695;14320:550;;;;;;:::i;:::-;;;;1180:38695;;;;;-1:-1:-1;;1180:38695:64;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;25528:649;;3599:19:66;1180:38695:64;;;;;;;;:::i;:::-;3599:19:66;;:::i;:::-;1180:38695:64;-1:-1:-1;;;;;1180:38695:64;;;;;;;:::i;:::-;25852:4;1180:38695;;;;;;25614:545;;;1180:38695;;25614:545;;1180:38695;25614:545;1180:38695;25614:545;;1180:38695;26023:27;1180:38695;25614:545;;1180:38695;25614:545;;;;1180:38695;25614:545;;;1180:38695;;;25528:649;;;;;;;;1180:38695;25528:649;;;:::i;:::-;1180:38695;;25498:693;;;;;;1180:38695;25498:693;;;1180:38695;25498:693;;1180:38695;;;;;;:::i;:::-;25498:693;:6;;1180:38695;25498:693;;;;;;25474:768;25498:693;1180:38695;25498:693;;;1180:38695;;;;;;25474:768;;;;;;:::i;:::-;4282:82:66;;;;;;1180:38695:64;;;;;;25498:693;;;;;;1180:38695;25498:693;;;;;;:::i;:::-;;;;1180:38695;;;;;-1:-1:-1;;1180:38695:64;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;34059:720;;1180:38695;;3599:19:66;1180:38695:64;;;;;;;;:::i;:::-;3599:19:66;;:::i;:::-;1180:38695:64;-1:-1:-1;;;;;1180:38695:64;;;;;;;;:::i;:::-;34411:4;1180:38695;;;;34156:601;;1180:38695;;34156:601;;1180:38695;;;;34156:601;;1180:38695;34610:26;1180:38695;34156:601;;1180:38695;34156:601;1180:38695;34156:601;;1180:38695;34156:601;;;1180:38695;;;34059:720;;;;1180:38695;34059:720;;;1180:38695;34059:720;;;:::i;:::-;1180:38695;;34025:772;;;;;;1180:38695;34025:772;;1180:38695;;34025:772;;1180:38695;;;;;;:::i;:::-;34025:772;:6;;1180:38695;34025:772;;;;;;;1180:38695;34025:772;33997:859;34025:772;1180:38695;34025:772;;;1180:38695;;;;;;33997:859;;;;;;:::i;:::-;4282:82:66;;;;;;1180:38695:64;;;;;;;;:::i;4282:82:66:-;1180:38695:64;4704:12:66;3051:52:55;4282:82:66;;34025:772:64;;;;;;1180:38695;34025:772;;;;;;:::i;:::-;;;;1180:38695;5890:486;;1180:38695;;;;;;:::i;:::-;3599:19:66;5761:10:64;;;;;;;;3599:19:66;:::i;:::-;1180:38695:64;-1:-1:-1;;;;;1180:38695:64;;;;;;;:::i;:::-;5761:10;1180:38695;;5971:387;;1180:38695;;5971:387;;;1180:38695;;5971:387;;1180:38695;5971:387;;;1180:38695;6218:27;5971:387;;;1180:38695;;;5971:387;;;1180:38695;5971:387;;;1180:38695;;;5890:486;;;;;;;;;;;;:::i;1180:38695::-;;-1:-1:-1;;1180:38695:64;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;7888:421;;1180:38695;;;;;;;;;;:::i;:::-;3599:19:66;7839:10:64;3599:19:66;:::i;:::-;1180:38695:64;-1:-1:-1;;;;;1180:38695:64;;;;;;;;:::i;:::-;7839:10;1180:38695;;;;7961:334;;1180:38695;;7961:334;;1180:38695;7961:334;1180:38695;7961:334;;1180:38695;8169:25;1180:38695;7961:334;;1180:38695;7961:334;;;1180:38695;7961:334;;;1180:38695;;;7888:421;;;;1180:38695;7888:421;;;1180:38695;7888:421;;;:::i;:::-;1180:38695;;7861:458;;;;;;1180:38695;7861:458;;1180:38695;;7861:458;;1180:38695;;;;;;:::i;:::-;7861:458;:6;;1180:38695;7861:458;;;;;;;;1180:38695;4282:82:66;;;1180:38695:64;4282:82:66;1180:38695:64;4704:12:66;3051:52:55;1180:38695:64;7861:458;;;;;1180:38695;7861:458;;;;;;:::i;:::-;;;;;1180:38695;;;;;39815:17;1180:38695;;;:::i;:::-;1083:103:53;;:::i;:::-;436:67:72;;:::i;:::-;39815:17:64;:::i;:::-;3051:52:55;;1180:38695:64;551:66:53;3051:52:55;1180:38695:64;;;;;;;;;;;;;:::i;:::-;436:67:72;;:::i;:::-;-1:-1:-1;;;;;36066:11:64;;;;;:::i;:::-;36105:13;;;:::i;:::-;36214:20;;1180:38695;36214:20;;;;:::i;:::-;36262:11;;;;;1180:38695;;;;;;;;36305:15;36016:323;35976:377;36305:15;1180:38695;;36305:15;1180:38695;36305:15;1180:38695;36305:15;;;;;;1180:38695;36305:15;;;;:::i;1180:38695::-;;;;;36066:11;36016:323;;1180:38695;36156:21;1180:38695;;36016:323;;1180:38695;;;;:::i;:::-;;36016:323;;1180:38695;36262:11;36016:323;;;:::i;1180:38695::-;36016:323;;;1180:38695;;;35976:377;;;;;;1180:38695;35976:377;;1180:38695;35976:377;;;:::i;:::-;;:6;;1180:38695;35976:377;;;;;;1180:38695;;;;;35976:377;;;1180:38695;;;;;;;;;;;:::i;35976:377::-;;;1180:38695;35976:377;;;;;;;1180:38695;35976:377;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;1180:38695;;;;;-1:-1:-1;;1180:38695:64;;;;;;;:::i;:::-;-1:-1:-1;;;;;1180:38695:64;;;;;35135:96;;;;;;1180:38695;;35135:96;;1180:38695;35206:4;1180:38695;;;;;;;;;;;35135:96;;1180:38695;;;;;;;;;;;;;;;;;;;;35101:148;;;;;;1180:38695;;;35101:148;1180:38695;;;;;;;:::i;:::-;35101:148;;:6;;1180:38695;35101:148;;;;;;;35073:219;35101:148;1180:38695;35101:148;;;1180:38695;;;;;;;35073:219;;;;;;:::i;:::-;1180:38695;;;;;;;;;;;;;;:::i;35101:148::-;;;;1180:38695;35101:148;;;;1180:38695;35101:148;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;1180:38695;;;;;;;;;;;;-1:-1:-1;;1180:38695:64;;;;;;;;;;;;8105:22:65;1180:38695:64;;;;;;;;:::i;:::-;8105:22:65;;:::i;:::-;1180:38695:64;;;;;;;:::i;:::-;;;;3599:19:66;1180:38695:64;;;:::i;:::-;3599:19:66;;;;;:::i;:::-;1180:38695:64;-1:-1:-1;;;;;24413:6:64;;;1180:38695;;;;12003:26:65;1180:38695:64;12003:26:65;;1180:38695:64;12003:26:65;;1180:38695:64;12003:26:65;;1180:38695:64;;12003:26:65;1180:38695:64;12003:26:65;;;;;;;;;1180:38695:64;12003:26:65;;;1180:38695:64;;;12058:24:65;;;;:::i;:::-;12097:13;1180:38695:64;12112:13:65;;;;;;1180:38695:64;;;;24443:674;;1180:38695;;;;;;;;;;;:::i;:::-;24767:4;1180:38695;;;24529:570;;;;1180:38695;;24529:570;;1180:38695;;24529:570;;1180:38695;24529:570;;;;1180:38695;24529:570;;;;1180:38695;24529:570;;;1180:38695;;;24443:674;;;;;;;;1180:38695;24443:674;;;:::i;:::-;1180:38695;;24413:718;;;;;;1180:38695;24413:718;;;1180:38695;24413:718;;1180:38695;;;;;;:::i;:::-;24413:718;;;;;;;;24389:793;24413:718;1180:38695;24413:718;;;12092:91:65;1180:38695:64;;;;;24389:793;;;;;;:::i;:::-;4282:82:66;;;;;12092:91:65;1180:38695:64;;;;;;;;;;;;;:::i;4282:82:66:-;1180:38695:64;4704:12:66;3051:52:55;4282:82:66;;24413:718:64;;;;;;1180:38695;24413:718;;;;;;:::i;:::-;;;;12127:3:65;12146:26;1180:38695:64;12146:26:65;1180:38695:64;12146:26:65;;;:::i;:::-;1180:38695:64;;12097:13:65;;12003:26;;;;;;1180:38695:64;12003:26:65;;;;;;:::i;:::-;;;;;:::i;:::-;;;;1180:38695:64;;;;:::i;:::-;21313:10;;;;;;;3599:19:66;;;:::i;:::-;1180:38695:64;;;;;;;:::i;:::-;21313:10;1180:38695;;21527:540;;;21637:18;1820:17:66;;-1:-1:-1;;;;;1180:38695:64;;21527:540;;1180:38695;-1:-1:-1;;;;;1180:38695:64;21527:540;;;1180:38695;-1:-1:-1;;;;;1180:38695:64;21527:540;;;1180:38695;21527:540;;;1180:38695;21527:540;;;1180:38695;;21527:540;;1180:38695;;;21527:540;;;1180:38695;;;;;;:::i;:::-;21527:540;;;1180:38695;;;21435:654;21527:540;21435:654;;;1180:38695;;;21435:654;;;;;;:::i;:::-;;-1:-1:-1;;21435:654:64;;;;;;;;:::i;:::-;1180:38695;;21400:707;;1180:38695;21400:707;;1180:38695;21400:707;;21527:540;1180:38695;;21435:654;1180:38695;;;;;:::i;:::-;21400:707;:6;;-1:-1:-1;;;;;1180:38695:64;21400:707;;;1180:38695;21400:707;;;;;;;;;1180:38695;21400:707;;;1180:38695;;21527:540;1180:38695;;;21372:776;;1180:38695;;;;21527:540;21372:776;;;1180:38695;4282:82:66;;;1180:38695:64;;;;;;21400:707;;;;;;;1180:38695;21400:707;;;;;;:::i;:::-;;;;;1180:38695;;;;;-1:-1:-1;;1180:38695:64;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;19173:77;1180:38695;;;;;;:::i;:::-;1083:103:53;;;:::i;:::-;436:67:72;;:::i;:::-;-1:-1:-1;;;;;1180:38695:64;19173:6;;1180:38695;;;;19173:77;;;;1180:38695;19173:77;;1180:38695;;19173:77;;1180:38695;19173:77;;;:::i;:::-;;;;;;;;;;;;1180:38695;19173:77;;;1180:38695;;;;;19286:26;1180:38695;19286:26;;1180:38695;;19286:26;;1180:38695;;19286:26;1180:38695;19286:26;;;;;;;;;1180:38695;19286:26;;;1180:38695;19328:13;1180:38695;19362:3;1180:38695;;19343:17;;;;;19401:13;;;;:::i;:::-;1180:38695;19432:13;;19428:160;;19362:3;1180:38695;19362:3;;1180:38695;19328:13;;19428:160;19544:9;;;;;:::i;:::-;1180:38695;;19530:43;;;;;1180:38695;;;19530:43;;-1:-1:-1;;;;;1180:38695:64;;;;19530:43;;1180:38695;;;;;;;;;;;;;;;-1:-1:-1;1180:38695:64;;;-1:-1:-1;19530:43:64;;;;;;;;1180:38695;19530:43;;;19428:160;;;;19530:43;;;;:::i;:::-;;;;19343:17;1180:38695;19343:17;19619:6;19343:17;19619:6;:::i;:::-;1180:38695;551:66:53;3051:52:55;1180:38695:64;;;;;;;;;;;;;:::i;19286:26::-;;;;;;;1180:38695;19286:26;;;;;;:::i;:::-;;;;;19173:77;;;;;;;1180:38695;19173:77;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;1180:38695;;15429:533;1180:38695;;15429:533;1180:38695;;;:::i;:::-;15229:10;3599:19:66;15229:10:64;;;;;;;3599:19:66;:::i;:::-;1180:38695:64;-1:-1:-1;;;;;1180:38695:64;;;;;;;;:::i;:::-;15229:10;1180:38695;;;15521:419;;;1180:38695;;15521:419;;1180:38695;;15521:419;;1180:38695;15789:26;15521:419;;;1180:38695;;;15521:419;;;1180:38695;15521:419;;;1180:38695;;;15429:533;;;;15521:419;15429:533;;;;;;;:::i;:::-;1180:38695;;15394:586;;;;;;1180:38695;15394:586;;15521:419;1180:38695;15394:586;;1180:38695;15429:533;1180:38695;;;;:::i;:::-;;;;;;;:::i;:::-;1083:103:53;;:::i;:::-;436:67:72;;:::i;:::-;-1:-1:-1;;;;;1180:38695:64;17314:11;;;;17232:6;;1180:38695;;;17314:11;;;:::i;:::-;17349:13;;;;:::i;:::-;17450:20;1180:38695;17450:20;;;;:::i;:::-;17494:11;;;;;;1180:38695;;;;;;;;17533:15;17268:295;1180:38695;17533:15;1180:38695;;17533:15;17232:341;17533:15;;;;;;;;:::i;:::-;1180:38695;;;;;;;;;;:::i;:::-;;;;;17314:11;17268:295;;1180:38695;;17396:21;;1180:38695;;17268:295;;1180:38695;;;;:::i;:::-;17268:295;;;1180:38695;;;17232:341;;;;1180:38695;17232:341;;1180:38695;17232:341;;;:::i;:::-;;;;;;;;;;;;1180:38695;;;;;17232:341;;;1180:38695;17709:11;;;;:::i;:::-;1180:38695;;;;17688:33;1180:38695;17688:33;;1180:38695;;17688:33;;1180:38695;;17688:33;1180:38695;17688:33;;;;;;;;;1180:38695;17688:33;;;1180:38695;-1:-1:-1;17737:13:64;;17268:295;18016:16;;;-1:-1:-1;1180:38695:64;17771:3;1180:38695;;17752:17;;;;;17810:13;;;;:::i;:::-;1180:38695;17841:14;;;17837:61;;17927:9;;;;;:::i;:::-;1180:38695;;18016:16;;;:::i;:::-;:52;;;17771:3;18012:310;;;18132:13;18147:9;1180:38695;18132:13;;;;:::i;:::-;18088:5;;18147:9;:::i;:::-;1180:38695;17737:13;;18012:310;18282:13;;;:::i;:::-;18261:46;;;;;1180:38695;;;18261:46;;-1:-1:-1;;;;;1180:38695:64;;;;18261:46;;1180:38695;;;;;;;;;;;;;;-1:-1:-1;1180:38695:64;;;-1:-1:-1;18261:46:64;;;;;;;;1180:38695;18261:46;;;18012:310;;;;18261:46;;;;:::i;:::-;;;;18016:52;18062:5;;;1180:38695;18036:32;;18016:52;;17837:61;1180:38695;17875:8;;;;17752:17;;1180:38695;17752:17;18353:13;;17752:17;18353:13;:::i;:::-;;:::i;:::-;1180:38695;551:66:53;3051:52:55;1180:38695:64;;;;;;;:::i;17688:33::-;;;;;;;1180:38695;17688:33;;;;;;:::i;:::-;;;;;17232:341;;;;;;;;17709:11;17232:341;;;;1180:38695;17232:341;;;;;;:::i;:::-;;;;;;;;;;1180:38695;;;;:::i;:::-;20156:10;;;;;;;3599:19:66;;;:::i;:::-;1180:38695:64;;;;;;;:::i;:::-;20156:10;1180:38695;;20370:539;;;1180:38695;1820:17:66;;-1:-1:-1;;;;;1180:38695:64;;20370:539;;1180:38695;-1:-1:-1;;;;;1180:38695:64;20370:539;;;1180:38695;-1:-1:-1;;;;;1180:38695:64;20370:539;;;1180:38695;20370:539;;;1180:38695;20370:539;;;1180:38695;;20370:539;;1180:38695;;;20370:539;;;1180:38695;;;;;;:::i;:::-;;-1:-1:-1;;1180:38695:64;;;;;;;:::i;:::-;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;6722:10;7033:498;;6825:107;3599:19:66;6722:10:64;3599:19:66;:::i;:::-;1180:38695:64;;;6825:107;;;:::i;:::-;1180:38695;-1:-1:-1;;;;;1180:38695:64;;;;;;;:::i;:::-;6722:10;1180:38695;;;;;;7114:399;;;1180:38695;;7114:399;;1180:38695;;;;7114:399;;1180:38695;7361:39;1180:38695;7114:399;;1180:38695;;;;7114:399;;1180:38695;;7114:399;;1180:38695;;;7033:498;;;;;;;;1180:38695;7033:498;;;:::i;1180:38695::-;7002:543;:6;;1180:38695;7002:543;;;;;;;7614:21;7002:543;6978:618;7002:543;1180:38695;7002:543;;;1180:38695;;;;;;6978:618;;;;;;:::i;:::-;7614:21;;;:::i;7002:543::-;;;;;;1180:38695;7002:543;;;;;;:::i;:::-;;;;1180:38695;4950:488;;1180:38695;;;;;;:::i;:::-;3599:19:66;4818:10:64;;;;;;;;;3599:19:66;:::i;:::-;1180:38695:64;-1:-1:-1;;;;;1180:38695:64;;;;;;;:::i;:::-;4818:10;1180:38695;;5031:389;;1180:38695;;5031:389;;;1180:38695;;5031:389;;1180:38695;;5031:389;;1180:38695;5031:389;;;;1180:38695;;;5031:389;;;1180:38695;5031:389;;;1180:38695;;;4950:488;;;;;;;;;;;;:::i;:::-;1180:38695;;4919:533;;;;;;1180:38695;4919:533;;;1180:38695;4919:533;;1180:38695;4950:488;1180:38695;;;;:::i;:::-;4919:533;:6;;1180:38695;4919:533;;;;;;4895:608;4919:533;1180:38695;4919:533;;;1180:38695;;;;;4895:608;;;;;;:::i;1180:38695::-;;;;;;;:::i;:::-;1083:103:53;;:::i;:::-;436:67:72;;:::i;:::-;22675:17:64;;;:::i;:::-;22720:14;;;;;;;:::i;:::-;22758:13;;;;:::i;:::-;22792:16;;;;;;;;:::i;:::-;11006:29:65;;;1180:38695:64;11002:374:65;;;11074:6;;22876:16:64;11074:6:65;11082:8;1180:38695:64;11074:6:65;;11051:5;11082:8;:::i;:::-;22833:13:64;;;:::i;:::-;22848:15;22876:16;22848:15;;;;;:::i;:::-;22876:16;;:::i;:::-;;;:::i;:::-;-1:-1:-1;;;;;22919:5:64;;1180:38695;;;22908:16;22904:120;;11002:374:65;3051:52:55;1180:38695:64;551:66:53;3051:52:55;1180:38695:64;;;;;;22904:120;22999:13;;;;:::i;:::-;22904:120;;;11002:374:65;11126:12;11122:244;;11002:374;;;1180:38695:64;11002:374:65;22876:16:64;11002:374:65;;;11122:244;-1:-1:-1;;;;;11215:8:65;;;1180:38695:64;11253:6:65;;;1180:38695:64;11262:20:65;;;;:::i;:::-;11215:86;;;;;;1180:38695:64;;;11215:86:65;;-1:-1:-1;;;;;1180:38695:64;;;;11215:86:65;;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1180:38695:64;;;;;;-1:-1:-1;;11215:86:65;;;;;;;1180:38695:64;11215:86:65;11319:32;11215:86;11319:32;11215:86;;;11122:244;1180:38695:64;;;11319:32:65;;;;;;1180:38695:64;11319:32:65;;;1180:38695:64;11319:32:65;;1180:38695:64;;;;;;-1:-1:-1;;;;;1180:38695:64;;;;;;;;;;11319:32:65;;;;;;;;;;;11122:244;;;;11319:32;;;;;;;;;;;;;;:::i;:::-;;;1180:38695:64;;;;11319:32:65;;;;;;;;11215:86;;;;:::i;:::-;;;;11006:29;1180:38695:64;-1:-1:-1;;;;;11030:5:65;;1180:38695:64;;;;11019:16:65;11006:29;;1180:38695:64;;;;;-1:-1:-1;;1180:38695:64;;;;;;;:::i;:::-;;;:::i;:::-;436:67:72;;:::i;:::-;-1:-1:-1;;;;;36994:6:64;;;1180:38695;;;36994:26;1180:38695;36994:26;;1180:38695;;;36994:26;;1180:38695;;36994:26;1180:38695;36994:26;;;;;;;;;1180:38695;36980:48;37045:77;36994:26;;;;;;;1180:38695;;;36980:48;:::i;:::-;1180:38695;;;37045:77;;;;;;;1180:38695;37045:77;;1180:38695;;37045:77;1180:38695;37045:77;;;:::i;:::-;;;;;;;;;1180:38695;37045:77;1180:38695;37045:77;;;1180:38695;;;;;;;;;;;;;;;:::i;37045:77::-;;;;;;1180:38695;37045:77;;;;;;:::i;:::-;;;;36994:26;;;;;;;;;;;;;:::i;:::-;;;;1180:38695;;;;;-1:-1:-1;;1180:38695:64;;;;;;4704:12:66;2295:53:55;-1:-1:-1;;;;;1180:38695:64;;;;;;;;;;;;;;:::i;:::-;1083:103:53;;:::i;:::-;436:67:72;;:::i;:::-;-1:-1:-1;;;;;10097:6:64;1180:38695;;;;10173:11;;;;;;;;;:::i;:::-;10206:13;;;;:::i;:::-;10251:19;;1180:38695;10251:19;;;;:::i;:::-;10351:11;;;;;;1180:38695;;;;;;;;10390:15;10130:290;1180:38695;10390:15;1180:38695;10097:333;10390:15;1180:38695;10390:15;;;1180:38695;10390:15;;;;;;;;:::i;:::-;1180:38695;;;;;;;;:::i;:::-;;;;;10130:290;;;1180:38695;;;;:::i;:::-;;10130:290;;1180:38695;;10305:22;;1180:38695;;10130:290;;1180:38695;10351:11;10130:290;;;:::i;1180:38695::-;10130:290;;;1180:38695;;;10097:333;;;;1180:38695;10097:333;;1180:38695;10097:333;;;:::i;:::-;;;;;;;;;;;;1180:38695;;;;;10097:333;;;1180:38695;10565:11;;;;:::i;:::-;1180:38695;;;10544:33;1180:38695;10544:33;;1180:38695;;10544:33;;1180:38695;;10544:33;1180:38695;10544:33;;;;;;;;;1180:38695;10544:33;;;1180:38695;-1:-1:-1;10593:13:64;;10130:290;10869:16;;;-1:-1:-1;1180:38695:64;10627:3;1180:38695;;10608:17;;;;;10661:9;;;;;:::i;:::-;1180:38695;;10703:12;;;;:::i;:::-;1180:38695;10734:13;;;10730:60;;10869:16;;;:::i;:::-;:52;;;10627:3;10865:490;;;10941:5;;10972:8;1180:38695;10941:5;;;10972:8;:::i;:::-;1180:38695;10593:13;;10865:490;11201:8;;;1180:38695;11223:13;;;;:::i;:::-;11255:20;;;:::i;:::-;11201:91;;;;;1180:38695;;;11201:91;;-1:-1:-1;;;;;1180:38695:64;;;;11201:91;;1180:38695;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1180:38695:64;;;;;;-1:-1:-1;;11201:91:64;;;;;;;11310:30;11201:91;;;;;10865:490;1180:38695;;;11310:30;;;;;1180:38695;11310:30;;1180:38695;11310:30;;1180:38695;;;;;;-1:-1:-1;;;;;1180:38695:64;;;;;;;;;;11310:30;;;1180:38695;11310:30;;;;;;;;;;;;10865:490;;;1180:38695;10865:490;;;11310:30;;;;;;;;;;;;:::i;:::-;;;1180:38695;;;;11310:30;;;;;;;;;11201:91;;;;:::i;:::-;;;;10869:52;10915:5;;;1180:38695;10889:32;;10869:52;;10608:17;;;1180:38695;10608:17;11429:13;;10608:17;11429:13;:::i;:::-;1180:38695;551:66:53;3051:52:55;1180:38695:64;;;;;;;:::i;10544:33::-;;;;;;1180:38695;10544:33;;;;;;:::i;:::-;;;;10097:333;;;;;;;;10565:11;10097:333;;;;1180:38695;10097:333;;;;;;:::i;:::-;;;;;;;;;;1180:38695;;;;;-1:-1:-1;;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1180:38695:64;;-1:-1:-1;1180:38695:64;;-1:-1:-1;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;32699:65;3599:19:66;1180:38695:64;;;32849:681;;1180:38695;;;:::i;:::-;3599:19:66;;;;;;;:::i;:::-;32699:65:64;;;:::i;:::-;1180:38695;-1:-1:-1;;;;;1180:38695:64;;;;;;;:::i;:::-;33181:4;1180:38695;;32938:574;;1180:38695;;32938:574;;;1180:38695;;32938:574;;1180:38695;;32938:574;;;1180:38695;33361:42;32938:574;;;1180:38695;32938:574;;;;1180:38695;32938:574;;;1180:38695;;;32849:681;;;;;;;;;;;;:::i;1180:38695::-;12053:497;;1180:38695;;;;;;:::i;:::-;3599:19:66;11919:10:64;;;;;;;;3599:19:66;:::i;:::-;1180:38695:64;-1:-1:-1;;;;;1180:38695:64;;;;;;;:::i;:::-;11919:10;1180:38695;;12137:395;;1180:38695;;12137:395;;;1180:38695;;12137:395;;1180:38695;;12137:395;;1180:38695;12137:395;;;;1180:38695;;;12137:395;;;1180:38695;12137:395;;;1180:38695;;;12053:497;;;;;;;;;;;;:::i;1180:38695::-;12022:542;:6;;1180:38695;12022:542;;;;;;11998:617;12022:542;1180:38695;12022:542;;;1180:38695;;;;;;11998:617;;;;;;:::i;:::-;4282:82:66;;;;;;1180:38695:64;;;;;;;;;;;;;:::i;12022:542::-;;;;;;1180:38695;12022:542;;;;;;:::i;:::-;;;;1180:38695;;;;;-1:-1:-1;;1180:38695:64;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;28008:709;;1180:38695;;3599:19:66;1180:38695:64;;;;;;;;:::i;3599:19:66:-;1180:38695:64;-1:-1:-1;;;;;1180:38695:64;;;;;;;;:::i;:::-;28352:4;1180:38695;;;;28102:593;;1180:38695;;28102:593;;1180:38695;;;;28102:593;;1180:38695;;;28102:593;;1180:38695;28102:593;1180:38695;28102:593;;1180:38695;28102:593;;;1180:38695;;;28008:709;;;;1180:38695;28008:709;;;1180:38695;28008:709;;;:::i;1180:38695::-;27974:761;:6;;1180:38695;27974:761;;;;;;;1180:38695;27974:761;27946:848;27974:761;1180:38695;27974:761;;;1180:38695;;;;;;27946:848;;;;;;:::i;:::-;4282:82:66;;;;;;1180:38695:64;;;;;;;;:::i;4282:82:66:-;1180:38695:64;4704:12:66;3051:52:55;4282:82:66;;27974:761:64;;;;;;1180:38695;27974:761;;;;;;:::i;:::-;;;;1180:38695;;;;;;;:::i;:::-;3599:19:66;;;;;;;;:::i;:::-;1180:38695:64;-1:-1:-1;;;;;1180:38695:64;;;;;;;;;:::i;:::-;37667:10;1180:38695;;37603:527;;;;;;1180:38695;1820:17:66;;1180:38695:64;;37603:527;;1180:38695;;37603:527;;;1180:38695;;37603:527;;;1180:38695;37603:527;;;1180:38695;37603:527;;;1180:38695;;;;37603:527;;1180:38695;;;37603:527;;;1180:38695;;;37603:527;;;1180:38695;;;37517:635;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;37517:635:64;;;;;;;;:::i;:::-;1180:38695;;37483:687;;;1180:38695;37483:687;;;1180:38695;37483:687;;1180:38695;37517:635;1180:38695;;;;;:::i;:::-;37483:687;:6;;1180:38695;37483:687;;;1180:38695;37483:687;;;;;;;;;1180:38695;37483:687;;;1180:38695;;;;;;37455:756;;1180:38695;;;;37455:756;;1180:38695;4282:82:66;;;1180:38695:64;;;;;;37483:687;;;;;;1180:38695;37483:687;;;;;;:::i;:::-;;;;1180:38695;;;;;-1:-1:-1;;1180:38695:64;;;;;;;:::i;:::-;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;3599:19:66;1180:38695:64;;;;;;:::i;:::-;3599:19:66;;:::i;:::-;1180:38695:64;-1:-1:-1;;;;;10667:6:65;;;1180:38695:64;;;;;10667:52:65;1180:38695:64;10667:52:65;;1180:38695:64;10667:52:65;;1180:38695:64;10667:52:65;;1180:38695:64;;;;;;;10667:52:65;1180:38695:64;10667:52:65;;;;;;;;;1180:38695:64;;;10667:52:65;;;1180:38695:64;10744:24:65;1180:38695:64;10744:24:65;31574:685:64;;10744:24:65;;;1180:38695:64;10744:24:65;;:::i;:::-;10778:38;31471:1:64;10778:38:65;;;;:::i;:::-;1180:38695:64;;;;;;;:::i;:::-;31906:4;1180:38695;;;31663:578;;;;1180:38695;;31663:578;;1180:38695;;;;31663:578;;1180:38695;31471:1;1180:38695;31663:578;;1180:38695;31663:578;1180:38695;31663:578;;1180:38695;31663:578;;;1180:38695;;;31574:685;;;;;;;;1180:38695;31574:685;;;:::i;:::-;1180:38695;;31544:729;;;;;;1180:38695;31544:729;;;1180:38695;31544:729;;1180:38695;;;;;;:::i;:::-;31544:729;;;;;;;;;32342:22;31544:729;31520:804;31544:729;1180:38695;31544:729;;;1180:38695;;;;;31520:804;;;;;;:::i;10667:52:65:-;;;;;1180:38695:64;10667:52:65;;1180:38695:64;10667:52:65;;;;;;1180:38695:64;10667:52:65;;;:::i;:::-;;;1180:38695:64;;;;;;;;;;;;;;;;10667:52:65;;;;;-1:-1:-1;10667:52:65;;1180:38695:64;;;;3599:19:66;1180:38695:64;;;:::i;:::-;3599:19:66;;;;;;;:::i;:::-;1180:38695:64;-1:-1:-1;;;;;10667:6:65;;;1180:38695:64;;;;;10667:52:65;1180:38695:64;10667:52:65;;1180:38695:64;10667:52:65;;1180:38695:64;10667:52:65;;1180:38695:64;;;;;;;10667:52:65;1180:38695:64;10667:52:65;;;;;;;;;1180:38695:64;;;10667:52:65;;;1180:38695:64;10744:24:65;;26797:675:64;;1180:38695;10744:24:65;;1180:38695:64;10744:24:65;;;;;:::i;:::-;10778:38;1180:38695:64;10778:38:65;;;;:::i;:::-;1180:38695:64;;;;;;;:::i;:::-;27121:4;1180:38695;;26883:571;;;;;1180:38695;;26883:571;;1180:38695;26883:571;;;1180:38695;27306:39;26883:571;;;1180:38695;26883:571;;;;1180:38695;26883:571;;;1180:38695;;;26797:675;;;;;;;;1180:38695;26797:675;;;:::i;1180:38695::-;26767:719;;;;;;;;;27555:21;26767:719;26743:794;26767:719;1180:38695;26767:719;;;1180:38695;;;;;26743:794;;;;;;:::i;10667:52:65:-;;;;1180:38695:64;10667:52:65;;1180:38695:64;10667:52:65;;;;;;1180:38695:64;10667:52:65;;;:::i;:::-;;;1180:38695:64;;;;;;;;;;;;26797:675;10667:52:65;;;;;-1:-1:-1;10667:52:65;;1180:38695:64;;;;;-1:-1:-1;;1180:38695:64;;;;;;;;-1:-1:-1;;;;;4253:8:65;1180:38695:64;;;;;;-1:-1:-1;;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;1083:103:53;;;;;:::i;:::-;1180:38695:64;;;;;;1500:6:43;1496:65;;1180:38695:64;5670:22:65;1180:38695:64;;;;;5670:22:65;;;;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7088:860:65;;5650:1371;1180:38695:64;8105:22:65;3051:52:55;;1180:38695:64;551:66:53;3051:52:55;8105:22:65;:::i;7088:860::-;-1:-1:-1;;;;;7878:8:65;;;;1180:38695:64;7878:59:65;;;;1180:38695:64;;7878:59:65;1180:38695:64;7878:59:65;;7894:10;1180:38695:64;7878:59:65;;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1180:38695:64;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;1180:38695:64;;;;;;;;;:::i;:::-;7878:59:65;:8;;-1:-1:-1;;;;;7878:8:65;1180:38695:64;7878:59:65;;;;;;;1180:38695:64;7878:59:65;8105:22;7878:59;;;1180:38695:64;7088:860:65;;;;;;;;7878:59;;;;:::i;:::-;;;;1180:38695:64;;;;;;;-1:-1:-1;;;;;1180:38695:64;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;1180:38695:64;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;5694:3:65;1180:38695:64;5738:19:65;;;;;:::i;1180:38695:64:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8585:180:65;;;;;1180:38695:64;;8585:180:65;;;;;;1180:38695:64;8585:180:65;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1180:38695:64;;5942:338:65;;;;1180:38695:64;-1:-1:-1;;;;;1180:38695:64;;;;;;;;;;;;5942:338:65;;;;;1180:38695:64;5942:338:65;;1180:38695:64;;5942:338:65;;1180:38695:64;6055:4:65;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5942:338:65;;;;;;5694:3;-1:-1:-1;5922:1089:65;;6407:604;;:::i;:::-;1180:38695:64;-1:-1:-1;;;;;1180:38695:64;;;;;-1:-1:-1;;;;;1180:38695:64;;;;;;;;6680:75:65;;;;1180:38695:64;6680:75:65;;1180:38695:64;6680:75:65;;1180:38695:64;6055:4:65;1180:38695:64;;;;6680:75:65;;;;;;;1180:38695:64;6680:75:65;;;5922:1089;1180:38695:64;;;;6680:100:65;6655:342;;5922:1089;;1180:38695:64;5922:1089:65;;1180:38695:64;5655:13:65;;6655:342;1180:38695:64;;1881:21:45;:17;;2008:160;;;;;1877:362;2205:23;1180:38695:64;2205:23:45;1180:38695:64;;2205:23:45;6680:75:65;;;;;;;;;;;;;;;;;:::i;:::-;;;1180:38695:64;;;;;;;6680:75:65;;;;;;;5922:1089;;;1180:38695:64;5922:1089:65;;;5942:338;;;;:::i;:::-;;;;1496:65:43;1529:21;1180:38695:64;1529:21:43;1180:38695:64;;1529:21:43;1180:38695:64;;;;;;;:::i;:::-;3599:19:66;;;;;;;;:::i;:::-;1180:38695:64;-1:-1:-1;;;;;1180:38695:64;;;;;;;;;:::i;:::-;38758:10;1180:38695;;38694:545;;;;;;38804:18;1820:17:66;;1180:38695:64;;38694:545;;1180:38695;;38694:545;;;1180:38695;;38694:545;;;1180:38695;38694:545;;;1180:38695;38694:545;;;1180:38695;;;;38694:545;;39101:17;1180:38695;;38694:545;;;1180:38695;;;38694:545;;;1180:38695;;;38608:653;;;;;;;;;;;;;;;:::i;1180:38695::-;;;;;-1:-1:-1;;1180:38695:64;;;;;;;;-1:-1:-1;;;;;4129:5:65;1180:38695:64;;;;;;;;3599:19:66;1180:38695:64;;;:::i;3599:19:66:-;1180:38695:64;-1:-1:-1;;;;;30112:6:64;;;1180:38695;;;;30112:26;1180:38695;30112:26;;1180:38695;30112:26;;1180:38695;30112:26;;1180:38695;;30112:26;1180:38695;30112:26;;;;;;;;;30229:676;1180:38695;30112:26;;1180:38695;30112:26;30098:48;30112:26;;30229:676;30112:26;;;;;1180:38695;;30098:48;:::i;:::-;1180:38695;;;;;;;:::i;:::-;30561:4;1180:38695;;;30318:569;;;;1180:38695;;30318:569;;1180:38695;;30318:569;;1180:38695;30318:569;;;;1180:38695;30318:569;;;;1180:38695;30318:569;;;1180:38695;;;30229:676;;;;;;;;1180:38695;30229:676;;;:::i;1180:38695::-;30199:720;;;;;;;;30175:795;30199:720;1180:38695;30199:720;;;1180:38695;;;;;30175:795;;;;;;:::i;30112:26::-;;;;;;;;;;;;;:::i;:::-;;;;1180:38695;;8795:524;1180:38695;;8795:524;1180:38695;;;:::i;:::-;8595:10;3599:19:66;8595:10:64;;;;;;;;3599:19:66;:::i;:::-;1180:38695:64;-1:-1:-1;;;;;1180:38695:64;;;;;;;;:::i;:::-;8595:10;1180:38695;;;8884:413;;;1180:38695;;8884:413;;1180:38695;;8884:413;;1180:38695;;8884:413;;;1180:38695;;;8884:413;;;1180:38695;8884:413;;;1180:38695;;;8795:524;;;;8884:413;8795:524;;;;;;;:::i;1180:38695::-;;-1:-1:-1;;1180:38695:64;;;;;;;:::i;:::-;;;;;;;;;16348:103;;1180:38695;;;;;;;;:::i;:::-;;;;;;;16348:103;;;;;;1180:38695;;16406:10;;16348:103;1180:38695;16348:103;;;:::i;:::-;1180:38695;;16317:148;;;;1180:38695;16317:148;;;1180:38695;16317:148;;1180:38695;;;;;;:::i;:::-;16317:148;:6;;-1:-1:-1;;;;;16317:6:64;1180:38695;16317:148;;;;;;16293:207;16317:148;1180:38695;16317:148;;;1180:38695;;;;;;16293:207;;;;;;:::i;16317:148::-;;;;;;1180:38695;16317:148;;;;;;:::i;:::-;;;;1180:38695;;;;;;;:::i;:::-;1083:103:53;;:::i;:::-;436:67:72;;:::i;:::-;-1:-1:-1;;;;;3202:6:64;3233:11;1180:38695;3233:11;;;;;:::i;:::-;3258:13;;;;:::i;:::-;3285;1180:38695;3285:13;;;;;;;:::i;:::-;3312:21;;;;;;;:::i;:::-;3383:15;;;;;;;;;;:::i;:::-;1180:38695;;;3202:206;;1180:38695;;;;3202:206;;1180:38695;;;;;;;;;3383:15;1180:38695;;;;;;;;;;;;;;;;-1:-1:-1;1180:38695:64;;;;;;;;;;;-1:-1:-1;;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3347:22;;;1180:38695;;;;;;;;;;;;;;;;;:::i;:::-;3202:206;1180:38695;;;;;3202:206;;;;;;;1180:38695;3202:206;;;1180:38695;-1:-1:-1;3424:13:64;;1180:38695;3726:16;;;;1180:38695;3465:3;3443:13;;;;:::i;:::-;3439:24;;;;;;;3499:16;;:13;;;;;:::i;:::-;:16;;:::i;:::-;;:::i;:::-;3548:24;3312:21;3548;3312;;;3548;;:::i;:24::-;1180:38695;3591:13;;;3587:60;;3726:16;;;:::i;:::-;:52;;;3465:3;3722:551;;;3798:5;;3829:8;1180:38695;3798:5;;;3829:8;:::i;:::-;1180:38695;3424:13;;3722:551;4119:8;;1180:38695;4141:13;;;;:::i;:::-;4173:20;;;:::i;:::-;4119:91;;;;;1180:38695;;;4119:91;;-1:-1:-1;;;;;1180:38695:64;;;;4119:91;;1180:38695;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1180:38695:64;;;;;;-1:-1:-1;;4119:91:64;;;;;;;4228:30;4119:91;;;;;1180:38695;;;4228:30;;;;;1180:38695;4228:30;;1180:38695;4228:30;;1180:38695;;;;;;-1:-1:-1;;;;;1180:38695:64;;;;;;;;;;4228:30;;1180:38695;;;;;4228:30;;;;;;;;;;;3722:551;;;1180:38695;3722:551;;;4228:30;;;;;;;;;;;;:::i;:::-;;;1180:38695;;;;4228:30;;;;;;;;;4119:91;;;;:::i;:::-;;;;3726:52;3772:5;;;1180:38695;;;;3746:32;3726:52;;3439:24;;;4332:13;;3439:24;4332:13;:::i;:::-;1180:38695;551:66:53;3051:52:55;1180:38695:64;;;;;;3202:206;;;;;;;;;;;;;;;;;:::i;:::-;;;1180:38695;;;;;3202:206;;;;;;;;;1180:38695;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;1180:38695:64;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;2059:10;3599:19:66;2059:10:64;3599:19:66;:::i;:::-;1180:38695:64;-1:-1:-1;;;;;1180:38695:64;;;;;;;:::i;:::-;2059:10;1180:38695;;2281:400;;;;1180:38695;;;;;2281:400;;1180:38695;;;;2281:400;;1180:38695;;;;2281:400;;1180:38695;;;;;;2281:400;;1180:38695;;;;;;2281:400;;1180:38695;;;;;;2194:509;;;;;;;1180:38695;2194:509;;1180:38695;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2194:509;1180:38695;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2159:562;:6;;1180:38695;2159:562;;;;;;;1180:38695;2159:562;;;1180:38695;;;;;2131:631;;1180:38695;;;;2131:631;;1180:38695;4282:82:66;;;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;1180:38695:64;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;1180:38695:64;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;1180:38695:64;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;1180:38695:64;;;;;;:::o;:::-;;;-1:-1:-1;;;;;1180:38695:64;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;1820:17:66;1180:38695:64;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;1180:38695:64;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;1180:38695:64;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;1180:38695:64;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;1180:38695:64;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1180:38695:64;;;;;;;-1:-1:-1;;;;;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;1180:38695:64;;;;;;;;;;;;;;;;;-1:-1:-1;1180:38695:64;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;1180:38695:64;;;;;-1:-1:-1;;;;;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;1180:38695:64;;;;;-1:-1:-1;;;;;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;1180:38695:64;;;;;-1:-1:-1;;;;;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;1180:38695:64;;;;;;;-1:-1:-1;;;;;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;;1180:38695:64;;;;;-1:-1:-1;;;;;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;-1:-1:-1;;1180:38695:64;;;;;-1:-1:-1;;;;;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;1180:38695:64;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1180:38695:64;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;1180:38695:64;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;-1:-1:-1;;1180:38695:64;;;;;;;;-1:-1:-1;1180:38695:64;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;;;;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;-1:-1:-1;1180:38695:64;;;;;-1:-1:-1;1180:38695:64;;;;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;1180:38695:64;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;1180:38695:64;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;1180:38695:64;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;1820:17:66:-;;;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;1820:17:66;;;1180:38695:64;1820:17:66;;;1180:38695:64;1820:17:66;;;;;;;;;;:::i;:::-;;;;;;1180:38695:64;1820:17:66;;;1180:38695:64;1820:17:66;;;;;1180:38695:64;1820:17:66;;;1180:38695:64;1820:17:66;;;;1180:38695:64;1820:17:66;;;1180:38695:64;1820:17:66;;;;;;;1180:38695:64;1820:17:66;;;;;;;1180:38695:64;1820:17:66;;;;;;;;;1180:38695:64;1820:17:66;;;;;1180:38695:64;;;1820:17:66;;;1180:38695:64;1820:17:66;;;;;;;;;;;:::i;1180:38695:64:-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;1180:38695:64;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;1180:38695:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;3191:591:65:-;;;3259:23;3271:10;3259:23;:::i;:::-;12307:26;;2806:53:55;;;3385:100:65;;3578:4;3051:52:55;3578:4:65;3051:52:55;;1180:38695:64;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1180:38695:64;;;:::i;:::-;;-1:-1:-1;1180:38695:64;;;;;;8188:13:65;;-1:-1:-1;8203:15:65;;;;;;3593:1;;;;;-1:-1:-1;3768:6:65;3593:1;3051:52:55;;4704:12:66;2295:53:55;;4282:82:66;;;8183:132:65;3768:6;;:::i;:::-;3191:591::o;4282:82:66:-;-1:-1:-1;3051:52:55;;4282:82:66;;;8220:3:65;8296:7;4297:55:106;-1:-1:-1;8296:7:65;1180:38695:64;8296:7:65;;;;;;:::i;1180:38695:64:-;;4255:25:106;;;;8289:4:65;4255:25:106;;;;:::i;:::-;8289:4:65;;4297:55:106;:::i;:::-;8239:65:65;;;;:::i;:::-;;;;;;:::i;:::-;;1180:38695:64;8188:13:65;;1180:38695:64;;;;;;;;;;;;;3385:100:65;3444:30;-1:-1:-1;3444:30:65;;-1:-1:-1;3444:30:65;1180:38695:64;;;;;;;;;;;;;;;:::i;3694:351:66:-;;1180:38695:64;4704:12:66;;-1:-1:-1;;;;;2295:53:55;;1180:38695:64;3919:25:66;3915:124;;3694:351;;:::o;3915:124::-;3051:52:55;;;;;4024:4:66;3915:124;3694:351::o;1192:349:53:-;551:66;2295:53:55;;1316:93:53;;1529:4;3051:52:55;;1192:349:53:o;509:165:72:-;-1:-1:-1;;;;;586:6:72;1180:38695:64;564:10:72;:29;560:108;;509:165::o;560:108::-;616:41;;;564:10;616:41;1180:38695:64;;616:41:72;;7223:218:119;-1:-1:-1;;;;;7303:25:119;;;;7299:105;;1180:38695:64;7223:218:119;:::o;7299:105::-;7351:42;;;7382:3;7351:42;1180:38695:64;;;;7351:42:119;;975:448:78;;;;1074:21;;:38;1070:93;;-1:-1:-1;;;;;1180:38695:64;;;1207:39:78;;;;;;1180:38695:64;;;;1207:39:78;1180:38695:64;1207:39:78;;;;;;;;;;;;;;;;;;975:448;1180:38695:64;;;;;1412:43:105;;;;;;;1180:38695:64;1412:43:105;;;;;;1180:38695:64;;;;;;;1412:43:105;;1180:38695:64;;;;;;;;;;;;;;3462:31:106;3510:55;;1180:38695:64;;;;;3462:31:106;;;;;:::i;:::-;3510:55;;;:::i;:::-;1180:38695:64;;4551:22:105;;;;:57;;;;975:448:78;4547:135:105;;;;;;1180:38695:64;;;;;;;1382:34:78;;;;;1180:38695:64;1382:34:78;;1207:39;1382:34;;1180:38695:64;1412:43:105;1180:38695:64;;;1382:34:78;;;;;;;;;;;975:448;;:::o;1382:34::-;;;;;;;;;;;;:::i;:::-;;;1180:38695:64;;;;975:448:78:o;1382:34::-;;;;;;1180:38695:64;;;;;;;;;4547:135:105;4631:40;;;1207:39:78;1180:38695:64;1412:43:105;4631:40;;4551:57;4578:30;;;;;;1180:38695:64;;;;4578:30:105;;1180:38695:64;;;;;;;;;4551:57:105;;;;;1180:38695:64;;;;1207:39:78;;;;;;:::i;:::-;;;;;;;1180:38695:64;;;1207:39:78;1180:38695:64;;;;;1070:93:78;1135:17;;;;;;9544:584:65;9780:21;9815:11;;9811:48;;12307:26;2295:53:55;10009:69:65;;-1:-1:-1;;;;;10114:6:65;1180:38695:64;;10114:6:65;:::i;10009:69::-;10061:7;;:::o;1180:38695:64:-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;1180:38695:64;;;;:::o;:::-;;;:::o;:::-;;;;;;;;;;:::o;10408:415:65:-;;1180:38695:64;10408:415:65;;;;-1:-1:-1;;;;;1180:38695:64;;;;;;;;10667:52:65;;;;;1180:38695:64;10667:52:65;;1180:38695:64;10667:52:65;;;1180:38695:64;;;;;;10667:6:65;1180:38695:64;10667:52:65;;;;;;;-1:-1:-1;;;10667:52:65;;;10408:415;10641:78;;10778:38;10744:24;10641:78;10744:24;;:::i;:::-;10778:38;;;:::i;:::-;1180:38695:64;10408:415:65:o;10667:52::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;1180:38695:64;;;;;;;;;;10667:52:65;;;;;;;;;;;1180:38695:64;;;-1:-1:-1;1180:38695:64;;;;;23070:818;23411:15;;;1180:38695;23393:15;:33;23389:85;;-1:-1:-1;;;;;23591:11:64;;;1180:38695;;;;;;;;23626:11;;;;;;;:::i;:::-;23664:14;;;;;;;;;;;;:::i;:::-;23706:15;;;;;;:::i;:::-;23841;;;;;;;;:::i;:::-;1180:38695;;;;;;;;:::i;:::-;1820:17:66;;23551:320:64;23591:11;23551:320;;1180:38695;;;;23551:320;;;;1180:38695;;;;23551:320;;;;1180:38695;;;;23706:15;23551:320;;23755:18;;;;1180:38695;;;23755:18;23551:320;;23801:12;;;1180:38695;;;;;;;;:::i;:::-;23551:320;23801:12;23551:320;;1180:38695;;;;;;23526:355;;;;;;;1180:38695;23526:355;;;;;23591:11;1180:38695;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23411:15;1180:38695;;;;;;;;:::i;:::-;23526:355;:6;;1180:38695;23526:355;;-1:-1:-1;23526:355:64;;;;;;;-1:-1:-1;;;;;23526:355:64;;;23070:818;23484:397;;;;;23070:818;:::o;23526:355::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;1180:38695;;;;;;23591:11;1180:38695;;;;;;;;23526:355;;;;;;;;;;23389:85;23449:14;-1:-1:-1;23449:14:64;;-1:-1:-1;23449:14:64;11388:489:65;;11502:14;;11498:51;;11632:30;;;11388:489;11628:243;;;11714:6;11730:9;11714:6;;11678:5;11730:9;:::i;11628:243::-;11818:6;-1:-1:-1;;;;;11818:6:65;1180:38695:64;11818:42:65;;;;;1180:38695:64;;;11818:42:65;;-1:-1:-1;;;;;1180:38695:64;;;11818:42:65;;;1180:38695:64;;;;;;;;;;;;;-1:-1:-1;;1180:38695:64;;;;;;-1:-1:-1;;11818:42:65;;;;;;;;11628:243;11388:489::o;11818:42::-;;;;:::i;11632:30::-;1180:38695:64;-1:-1:-1;;;;;11657:5:65;;1180:38695:64;;;;11645:17:65;11632:30;;11498:51;11532:7;;;;:::o;1429:365:78:-;;;;-1:-1:-1;;;;;1180:38695:64;;;1590:47:78;;;;;1180:38695:64;;;1590:47:78;;;;1180:38695:64;1590:47:78;;;;1180:38695:64;;1590:47:78;;;;;1180:38695:64;1617:4:78;1180:38695:64;;;;;;;;;1590:47:78;;;;;;;;1429:365;1680:27;;;;;;;;1180:38695:64;;;;;1680:27:78;;;;1180:38695:64;1680:27:78;;;1590:47;1680:27;;1180:38695:64;1680:27:78;;;;;;;;1429:365;1180:38695:64;1774:12:78;1180:38695:64;;;;1774:12:78;:::i;1680:27::-;;;;;:::i;:::-;1180:38695:64;;1680:27:78;;;1180:38695:64;;;;1680:27:78;1180:38695:64;;;;;;;;;1680:27:78;1180:38695:64;;;1590:47:78;;;;;;:::i;:::-;;;;;;1531:331:106;1616:21;;:30;1612:109;;1750:33;1180:38695:64;;;-1:-1:-1;;;;;1180:38695:64;;;1750:33:106;;;;:::i;:::-;;1797:8;1793:63;;1531:331::o;1793:63::-;1828:17;1750:33;1828:17;;1750:33;1828:17;1612:109;1669:41;;;1624:4;1669:41;1180:38695:64;;1669:41:106;;4625:582;;4797:8;;-1:-1:-1;1180:38695:64;;5874:21:106;:17;;6046:142;;;;;;4793:408;1180:38695:64;;5045:22:106;:49;;;4793:408;5041:119;;5173:17;;:::o;5041:119::-;-1:-1:-1;;;;;5121:24:106;;5066:1;5121:24;1180:38695:64;5121:24:106;1180:38695:64;;5066:1:106;5121:24;5045:49;5071:18;;;:23;5045:49;"},"methodIdentifiers":{"addLiquidityCustom(address,uint256[],uint256,bool,bytes)":"0ca078ec","addLiquidityHook((address,address,uint256[],uint256,uint8,bool,bytes))":"5b343791","addLiquidityProportional(address,uint256[],uint256,bool,bytes)":"724dba33","addLiquiditySingleTokenExactOut(address,address,uint256,uint256,bool,bytes)":"72657d17","addLiquidityUnbalanced(address,uint256[],uint256,bool,bytes)":"c08bc851","donate(address,uint256[],bool,bytes)":"bf6ee3fd","getPermit2()":"1bbf2e23","getSender()":"5e01eb5a","getWeth()":"107c279f","initialize(address,address[],uint256[],uint256,bool,bytes)":"026b3d95","initializeHook((address,address,address[],uint256[],uint256,bool,bytes))":"086fad66","multicall(bytes[])":"ac9650d8","permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])":"19c6989f","queryAddLiquidityCustom(address,uint256[],uint256,address,bytes)":"452db952","queryAddLiquidityHook((address,address,uint256[],uint256,uint8,bool,bytes))":"efd85f14","queryAddLiquidityProportional(address,uint256,address,bytes)":"9de90518","queryAddLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)":"1d56798d","queryAddLiquidityUnbalanced(address,uint256[],address,bytes)":"da001f7d","queryRemoveLiquidityCustom(address,uint256,uint256[],address,bytes)":"c330c7be","queryRemoveLiquidityHook((address,address,uint256[],uint256,uint8,bool,bytes))":"b24bd571","queryRemoveLiquidityProportional(address,uint256,address,bytes)":"0f710888","queryRemoveLiquidityRecovery(address,uint256)":"b037ed36","queryRemoveLiquidityRecoveryHook(address,address,uint256)":"5f9815ff","queryRemoveLiquiditySingleTokenExactIn(address,uint256,address,address,bytes)":"23b39241","queryRemoveLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)":"53d0bb98","querySwapHook((address,uint8,address,address,address,uint256,uint256,uint256,bool,bytes))":"be5ae841","querySwapSingleTokenExactIn(address,address,address,uint256,address,bytes)":"3ebc54e5","querySwapSingleTokenExactOut(address,address,address,uint256,address,bytes)":"175d4408","removeLiquidityCustom(address,uint256,uint256[],bool,bytes)":"82bf2b24","removeLiquidityHook((address,address,uint256[],uint256,uint8,bool,bytes))":"7b03c7ba","removeLiquidityProportional(address,uint256,uint256[],bool,bytes)":"51682750","removeLiquidityRecovery(address,uint256,uint256[])":"08c04793","removeLiquidityRecoveryHook(address,address,uint256,uint256[])":"82cd54fb","removeLiquiditySingleTokenExactIn(address,uint256,address,uint256,bool,bytes)":"ecb2182c","removeLiquiditySingleTokenExactOut(address,uint256,address,uint256,bool,bytes)":"e7326def","swapSingleTokenExactIn(address,address,address,uint256,uint256,uint256,bool,bytes)":"750283bc","swapSingleTokenExactOut(address,address,address,uint256,uint256,uint256,bool,bytes)":"94e86ef8","swapSingleTokenHook((address,uint8,address,address,address,uint256,uint256,uint256,bool,bytes))":"68a24fe0","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IWETH\",\"name\":\"weth\",\"type\":\"address\"},{\"internalType\":\"contract IPermit2\",\"name\":\"permit2\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"routerVersion\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EthTransfer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"addLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IRouterCommon.AddLiquidityHookParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidityHook\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"addLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"addLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"addLiquidityUnbalanced\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"donate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermit2\",\"outputs\":[{\"internalType\":\"contract IPermit2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWeth\",\"outputs\":[{\"internalType\":\"contract IWETH\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IRouter.InitializeHookParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"initializeHook\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"internalType\":\"struct IRouterCommon.PermitApproval[]\",\"name\":\"permitBatch\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"permitSignatures\",\"type\":\"bytes[]\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"internalType\":\"uint48\",\"name\":\"expiration\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"nonce\",\"type\":\"uint48\"}],\"internalType\":\"struct IAllowanceTransfer.PermitDetails[]\",\"name\":\"details\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sigDeadline\",\"type\":\"uint256\"}],\"internalType\":\"struct IAllowanceTransfer.PermitBatch\",\"name\":\"permit2Batch\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"permit2Signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes[]\",\"name\":\"multicallData\",\"type\":\"bytes[]\"}],\"name\":\"permitBatchAndCall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IRouterCommon.AddLiquidityHookParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"queryAddLiquidityHook\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquidityUnbalanced\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IRouterCommon.RemoveLiquidityHookParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"queryRemoveLiquidityHook\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"}],\"name\":\"queryRemoveLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"}],\"name\":\"queryRemoveLiquidityRecoveryHook\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquiditySingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGiven\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IRouter.SwapSingleTokenHookParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"querySwapHook\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"querySwapSingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculated\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"querySwapSingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculated\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"removeLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IRouterCommon.RemoveLiquidityHookParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidityHook\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"removeLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecoveryHook\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"removeLiquiditySingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"removeLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"swapSingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"swapSingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGiven\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IRouter.SwapSingleTokenHookParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"swapSingleTokenHook\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"The external API functions unlock the Vault, which calls back into the corresponding hook functions. These interact with the Vault, transfer tokens, settle accounting, and handle wrapping and unwrapping ETH.\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}]},\"kind\":\"dev\",\"methods\":{\"addLiquidityCustom(address,uint256[],uint256,bool,bytes)\":{\"details\":\"The given maximum and minimum amounts given may be interpreted as exact depending on the pool type. In any case the caller can expect them to be hard boundaries for the request.\",\"params\":{\"maxAmountsIn\":\"Maximum amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Minimum amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to add liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsIn\":\"Actual amounts of tokens added, sorted in token registration order\",\"bptAmountOut\":\"Actual amount of pool tokens received\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"addLiquidityHook((address,address,uint256[],uint256,uint8,bool,bytes))\":{\"details\":\"Can only be called by the Vault.\",\"params\":{\"params\":\"Add liquidity parameters (see IRouter for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts in required for the join\",\"bptAmountOut\":\"BPT amount minted in exchange for the input tokens\",\"returnData\":\"Arbitrary data with encoded response from the pool\"}},\"addLiquidityProportional(address,uint256[],uint256,bool,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Exact amount of pool tokens to be received\",\"maxAmountsIn\":\"Maximum amounts of tokens to be added, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to add liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsIn\":\"Actual amounts of tokens added, sorted in token registration order\"}},\"addLiquiditySingleTokenExactOut(address,address,uint256,uint256,bool,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Exact amount of pool tokens to be received\",\"maxAmountIn\":\"Maximum amount of tokens to be added\",\"pool\":\"Address of the liquidity pool\",\"tokenIn\":\"Token used to add liquidity\",\"userData\":\"Additional (optional) data sent with the request to add liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountIn\":\"Actual amount of tokens added\"}},\"addLiquidityUnbalanced(address,uint256[],uint256,bool,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Minimum amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to add liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"bptAmountOut\":\"Actual amount of pool tokens received\"}},\"donate(address,uint256[],bool,bytes)\":{\"details\":\"To support donation, the pool config `enableDonation` flag must be set to true.\",\"params\":{\"amountsIn\":\"Amounts of tokens to be donated, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to donate liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"}},\"getSender()\":{\"returns\":{\"_0\":\"The address of the sender\"}},\"initialize(address,address[],uint256[],uint256,bool,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Minimum amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"tokens\":\"Pool tokens, in token registration order\",\"userData\":\"Additional (optional) data sent with the request to add initial liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"bptAmountOut\":\"Actual amount of pool tokens minted in exchange for initial liquidity\"}},\"initializeHook((address,address,address[],uint256[],uint256,bool,bytes))\":{\"details\":\"Can only be called by the Vault.\",\"params\":{\"params\":\"Initialization parameters (see IRouter for struct definition)\"},\"returns\":{\"bptAmountOut\":\"BPT amount minted in exchange for the input tokens\"}},\"multicall(bytes[])\":{\"params\":{\"data\":\"Encoded function calls to be executed in the batch.\"},\"returns\":{\"results\":\"Array of bytes arrays, each representing the return data from each function call executed.\"}},\"permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])\":{\"params\":{\"multicallData\":\"An array of bytes arrays, each representing an encoded function call on this contract\",\"permit2Batch\":\"A batch of permit2 approvals\",\"permit2Signature\":\"A permit2 signature for the batch approval\",\"permitBatch\":\"An array of `PermitApproval` structs, each representing an ERC20 permit request\",\"permitSignatures\":\"An array of bytes, corresponding to the permit request signature in `permitBatch`\"},\"returns\":{\"results\":\"Array of bytes arrays, each representing the return data from each function call executed\"}},\"queryAddLiquidityCustom(address,uint256[],uint256,address,bytes)\":{\"params\":{\"maxAmountsIn\":\"Maximum amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Expected minimum amount of pool tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsIn\":\"Expected amounts of tokens to add, sorted in token registration order\",\"bptAmountOut\":\"Expected amount of pool tokens to receive\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"queryAddLiquidityHook((address,address,uint256[],uint256,uint8,bool,bytes))\":{\"details\":\"Can only be called by the Vault.\",\"params\":{\"params\":\"Add liquidity parameters (see IRouter for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual token amounts in required as inputs\",\"bptAmountOut\":\"Expected pool tokens to be minted\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"queryAddLiquidityProportional(address,uint256,address,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Exact amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsIn\":\"Expected amounts of tokens to add, sorted in token registration order\"}},\"queryAddLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Expected exact amount of pool tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenIn\":\"Token used to add liquidity\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountIn\":\"Expected amount of tokens to add\"}},\"queryAddLiquidityUnbalanced(address,uint256[],address,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of tokens to be added, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"bptAmountOut\":\"Expected amount of pool tokens to receive\"}},\"queryRemoveLiquidityCustom(address,uint256,uint256[],address,bytes)\":{\"params\":{\"maxBptAmountIn\":\"Maximum amount of pool tokens provided\",\"minAmountsOut\":\"Expected minimum amounts of tokens to receive, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsOut\":\"Expected amounts of tokens to receive, sorted in token registration order\",\"bptAmountIn\":\"Expected amount of pool tokens to burn\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"queryRemoveLiquidityHook((address,address,uint256[],uint256,uint8,bool,bytes))\":{\"details\":\"Can only be called by the Vault.\",\"params\":{\"params\":\"Remove liquidity parameters (see IRouter for struct definition)\"},\"returns\":{\"amountsOut\":\"Expected token amounts to be transferred to the sender\",\"bptAmountIn\":\"Pool token amount to be burned for the output tokens\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"queryRemoveLiquidityProportional(address,uint256,address,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided for the query\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsOut\":\"Expected amounts of tokens to receive, sorted in token registration order\"}},\"queryRemoveLiquidityRecovery(address,uint256)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided for the query\",\"pool\":\"Address of the liquidity pool\"},\"returns\":{\"amountsOut\":\"Expected amounts of tokens to receive, sorted in token registration order\"}},\"queryRemoveLiquidityRecoveryHook(address,address,uint256)\":{\"details\":\"Can only be called by the Vault.\",\"params\":{\"exactBptAmountIn\":\"Pool token amount to be burned for the output tokens\",\"pool\":\"The liquidity pool\",\"sender\":\"Account originating the remove liquidity operation\"},\"returns\":{\"amountsOut\":\"Expected token amounts to be transferred to the sender\"}},\"queryRemoveLiquiditySingleTokenExactIn(address,uint256,address,address,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided for the query\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountOut\":\"Expected amount of tokens to receive\"}},\"queryRemoveLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"params\":{\"exactAmountOut\":\"Expected exact amount of tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"bptAmountIn\":\"Expected amount of pool tokens to burn\"}},\"querySwapHook((address,uint8,address,address,address,uint256,uint256,uint256,bool,bytes))\":{\"details\":\"Can only be called by the Vault. Also handles native ETH.\",\"params\":{\"params\":\"Swap parameters (see IRouter for struct definition)\"},\"returns\":{\"_0\":\"amountCalculated Token amount calculated by the pool math (e.g., amountOut for an exact in swap)\"}},\"querySwapSingleTokenExactIn(address,address,address,uint256,address,bytes)\":{\"params\":{\"exactAmountIn\":\"Exact amounts of input tokens to send\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountCalculated\":\"Calculated amount of output tokens to be received in exchange for the given input tokens\"}},\"querySwapSingleTokenExactOut(address,address,address,uint256,address,bytes)\":{\"params\":{\"exactAmountOut\":\"Exact amounts of input tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountCalculated\":\"Calculated amount of input tokens to be sent in exchange for the requested output tokens\"}},\"removeLiquidityCustom(address,uint256,uint256[],bool,bytes)\":{\"details\":\"The given maximum and minimum amounts given may be interpreted as exact depending on the pool type. In any case the caller can expect them to be hard boundaries for the request.\",\"params\":{\"maxBptAmountIn\":\"Maximum amount of pool tokens provided\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to remove liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsOut\":\"Actual amounts of tokens received, sorted in token registration order\",\"bptAmountIn\":\"Actual amount of pool tokens burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"removeLiquidityHook((address,address,uint256[],uint256,uint8,bool,bytes))\":{\"details\":\"Can only be called by the Vault.\",\"params\":{\"params\":\"Remove liquidity parameters (see IRouter for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual token amounts transferred in exchange for the BPT\",\"bptAmountIn\":\"BPT amount burned for the output tokens\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"removeLiquidityProportional(address,uint256,uint256[],bool,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to remove liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsOut\":\"Actual amounts of tokens received, sorted in token registration order\"}},\"removeLiquidityRecovery(address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\"},\"returns\":{\"amountsOut\":\"Actual amounts of tokens received, sorted in token registration order\"}},\"removeLiquidityRecoveryHook(address,address,uint256,uint256[])\":{\"details\":\"Can only be called by the Vault, when the pool is in Recovery Mode.\",\"params\":{\"exactBptAmountIn\":\"BPT amount burned for the output tokens\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"Account originating the remove liquidity operation\"},\"returns\":{\"amountsOut\":\"Actual token amounts transferred in exchange for the BPT\"}},\"removeLiquiditySingleTokenExactIn(address,uint256,address,uint256,bool,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided\",\"minAmountOut\":\"Minimum amount of tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the request to remove liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountOut\":\"Actual amount of tokens received\"}},\"removeLiquiditySingleTokenExactOut(address,uint256,address,uint256,bool,bytes)\":{\"params\":{\"exactAmountOut\":\"Exact amount of tokens to be received\",\"maxBptAmountIn\":\"Maximum amount of pool tokens provided\",\"pool\":\"Address of the liquidity pool\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the request to remove liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"bptAmountIn\":\"Actual amount of pool tokens burned\"}},\"swapSingleTokenExactIn(address,address,address,uint256,uint256,uint256,bool,bytes)\":{\"params\":{\"deadline\":\"Deadline for the swap, after which it will revert\",\"exactAmountIn\":\"Exact amounts of input tokens to send\",\"minAmountOut\":\"Minimum amount of tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the swap request\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"_0\":\"Calculated amount of output tokens to be received in exchange for the given input tokens\"}},\"swapSingleTokenExactOut(address,address,address,uint256,uint256,uint256,bool,bytes)\":{\"params\":{\"deadline\":\"Deadline for the swap, after which it will revert\",\"exactAmountOut\":\"Exact amounts of input tokens to receive\",\"maxAmountIn\":\"Maximum amount of tokens to be sent\",\"pool\":\"Address of the liquidity pool\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the swap request\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"_0\":\"Calculated amount of input tokens to be sent in exchange for the requested output tokens\"}},\"swapSingleTokenHook((address,uint8,address,address,address,uint256,uint256,uint256,bool,bytes))\":{\"details\":\"Can only be called by the Vault. Also handles native ETH.\",\"params\":{\"params\":\"Swap parameters (see IRouter for struct definition)\"},\"returns\":{\"_0\":\"amountCalculated Token amount calculated by the pool math (e.g., amountOut for an exact in swap)\"}},\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"ErrorSelectorNotFound()\":[{\"notice\":\"Handle the \\\"reverted without a reason\\\" case (i.e., no return data).\"}],\"EthTransfer()\":[{\"notice\":\"Incoming ETH transfer from an address that is not WETH.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"InsufficientEth()\":[{\"notice\":\"The amount of ETH paid is insufficient to complete this operation.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}]},\"kind\":\"user\",\"methods\":{\"addLiquidityCustom(address,uint256[],uint256,bool,bytes)\":{\"notice\":\"Adds liquidity to a pool with a custom request.\"},\"addLiquidityHook((address,address,uint256[],uint256,uint8,bool,bytes))\":{\"notice\":\"Hook for adding liquidity.\"},\"addLiquidityProportional(address,uint256[],uint256,bool,bytes)\":{\"notice\":\"Adds liquidity to a pool with proportional token amounts, receiving an exact amount of pool tokens.\"},\"addLiquiditySingleTokenExactOut(address,address,uint256,uint256,bool,bytes)\":{\"notice\":\"Adds liquidity to a pool in a single token, receiving an exact amount of pool tokens.\"},\"addLiquidityUnbalanced(address,uint256[],uint256,bool,bytes)\":{\"notice\":\"Adds liquidity to a pool with arbitrary token amounts.\"},\"donate(address,uint256[],bool,bytes)\":{\"notice\":\"Adds liquidity to a pool by donating the amounts in (no BPT out).\"},\"getPermit2()\":{\"notice\":\"Returns Permit2 contract address.\"},\"getSender()\":{\"notice\":\"Get the first sender which initialized the call to Router.\"},\"getWeth()\":{\"notice\":\"Returns WETH contract address.\"},\"initialize(address,address[],uint256[],uint256,bool,bytes)\":{\"notice\":\"Initialize a liquidity pool.\"},\"initializeHook((address,address,address[],uint256[],uint256,bool,bytes))\":{\"notice\":\"Hook for initialization.\"},\"multicall(bytes[])\":{\"notice\":\"Executes a batch of function calls on this contract.\"},\"permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])\":{\"notice\":\"Permits multiple allowances and executes a batch of function calls on this contract.\"},\"queryAddLiquidityCustom(address,uint256[],uint256,address,bytes)\":{\"notice\":\"Queries an `addLiquidityCustom` operation without actually executing it.\"},\"queryAddLiquidityHook((address,address,uint256[],uint256,uint8,bool,bytes))\":{\"notice\":\"Hook for add liquidity queries.\"},\"queryAddLiquidityProportional(address,uint256,address,bytes)\":{\"notice\":\"Queries an `addLiquidityProportional` operation without actually executing it.\"},\"queryAddLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"notice\":\"Queries an `addLiquiditySingleTokenExactOut` operation without actually executing it.\"},\"queryAddLiquidityUnbalanced(address,uint256[],address,bytes)\":{\"notice\":\"Queries an `addLiquidityUnbalanced` operation without actually executing it.\"},\"queryRemoveLiquidityCustom(address,uint256,uint256[],address,bytes)\":{\"notice\":\"Queries a `removeLiquidityCustom` operation without actually executing it.\"},\"queryRemoveLiquidityHook((address,address,uint256[],uint256,uint8,bool,bytes))\":{\"notice\":\"Hook for remove liquidity queries.\"},\"queryRemoveLiquidityProportional(address,uint256,address,bytes)\":{\"notice\":\"Queries a `removeLiquidityProportional` operation without actually executing it.\"},\"queryRemoveLiquidityRecovery(address,uint256)\":{\"notice\":\"Queries a `removeLiquidityRecovery` operation without actually executing it.\"},\"queryRemoveLiquidityRecoveryHook(address,address,uint256)\":{\"notice\":\"Hook for remove liquidity queries.\"},\"queryRemoveLiquiditySingleTokenExactIn(address,uint256,address,address,bytes)\":{\"notice\":\"Queries a `removeLiquiditySingleTokenExactIn` operation without actually executing it.\"},\"queryRemoveLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"notice\":\"Queries a `removeLiquiditySingleTokenExactOut` operation without actually executing it.\"},\"querySwapHook((address,uint8,address,address,address,uint256,uint256,uint256,bool,bytes))\":{\"notice\":\"Hook for swap queries.\"},\"querySwapSingleTokenExactIn(address,address,address,uint256,address,bytes)\":{\"notice\":\"Queries a swap operation specifying an exact input token amount without actually executing it.\"},\"querySwapSingleTokenExactOut(address,address,address,uint256,address,bytes)\":{\"notice\":\"Queries a swap operation specifying an exact output token amount without actually executing it.\"},\"removeLiquidityCustom(address,uint256,uint256[],bool,bytes)\":{\"notice\":\"Removes liquidity from a pool with a custom request.\"},\"removeLiquidityHook((address,address,uint256[],uint256,uint8,bool,bytes))\":{\"notice\":\"Hook for removing liquidity.\"},\"removeLiquidityProportional(address,uint256,uint256[],bool,bytes)\":{\"notice\":\"Removes liquidity with proportional token amounts from a pool, burning an exact pool token amount.\"},\"removeLiquidityRecovery(address,uint256,uint256[])\":{\"notice\":\"Removes liquidity proportionally, burning an exact pool token amount. Only available in Recovery Mode.\"},\"removeLiquidityRecoveryHook(address,address,uint256,uint256[])\":{\"notice\":\"Hook for removing liquidity in Recovery Mode.\"},\"removeLiquiditySingleTokenExactIn(address,uint256,address,uint256,bool,bytes)\":{\"notice\":\"Removes liquidity from a pool via a single token, burning an exact pool token amount.\"},\"removeLiquiditySingleTokenExactOut(address,uint256,address,uint256,bool,bytes)\":{\"notice\":\"Removes liquidity from a pool via a single token, specifying the exact amount of tokens to receive.\"},\"swapSingleTokenExactIn(address,address,address,uint256,uint256,uint256,bool,bytes)\":{\"notice\":\"Executes a swap operation specifying an exact input token amount.\"},\"swapSingleTokenExactOut(address,address,address,uint256,uint256,uint256,bool,bytes)\":{\"notice\":\"Executes a swap operation specifying an exact output token amount.\"},\"swapSingleTokenHook((address,uint8,address,address,address,uint256,uint256,uint256,bool,bytes))\":{\"notice\":\"Hook for swaps.\"},\"version()\":{\"notice\":\"Getter for the version.\"}},\"notice\":\"Entrypoint for swaps, liquidity operations, and corresponding queries.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/Router.sol\":\"Router\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x75d5964b2f92dba9b9254e0052de28a9378e6759b1b28ccbb51db0bc80024176\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6ec9c862929ccff2be994d0296c0a4de3ddc19bb5a7aae3d4df0887dc7b29c8e\",\"dweb:/ipfs/QmSNr2fkNM2VyAo3B1DG1cuRh41t4A6mJZqeUu6vvYb97G\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\":{\"keccak256\":\"0x39a5cd3ee5c0bab644f068ad8ba617a0cf71a91610693b1c93c9536464151ee3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6a5f61af5cda44d8ef95e610c0b418f2cfb984e9c47a58fb1fa8c8bc949def75\",\"dweb:/ipfs/Qmby1D2D5Ym44jgBTTM8eTGnmNGCCKrb8ujpkhVPE6C6Cr\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouterCommon.sol\":{\"keccak256\":\"0x82d459426edf0ac20a33ad2065dae1f83544069b9887618248c0722e25a8b736\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c4566915a8c2b10f6232f92dad5e4409bb2aa46baf6a5d78dc0ac447facbfb37\",\"dweb:/ipfs/QmReRhA1BxRocwWsGgacaAcC2xRtWqJgN57bd2Yyy7A1gd\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISenderGuard.sol\":{\"keccak256\":\"0x2ec1ecf5c578aab7502f6985a03fbb79998218bdef819845d70d28a6994cff5b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a32637a45f19c29797db11eb25eb9bfda73302f280a64a9d9a4ab123db1b8e6f\",\"dweb:/ipfs/QmXGimviZ4Mr6kwgqkCwpHH5uGHVEjAcCRNvAwvoVYKi6f\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":{\"keccak256\":\"0xb4ee9e1543d36bdf9eeb4a9d5ab41170723239a1e27a2272f2e31de4765c019b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b70dd5e4fa496c2c1efb6bd20368587ba3c9c0d0afac9dc3631a29ff2628f99\",\"dweb:/ipfs/QmQigXUkpDuVK5VSX67RABrAC9bashPcHMasgPRNJb4k8Z\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":{\"keccak256\":\"0xb5f6b1d0ee3f295a717ce58329eaadccb1eefc2e1e02e2e7c438e377628475cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03c1b9bc73b7d14d9e1948a31c271a03a6ba4291f44d9aff17e60d300c111d0d\",\"dweb:/ipfs/QmNpW3iD3ST76N6xTncuVgYSuafSqFkXUmxNaK8uybr96G\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/Router.sol\":{\"keccak256\":\"0x89aa26654c62facc3a34dd8126e5ec36c0950c324632e5bd2f91ee7b9586f703\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://48307d0a004912eb66564d4f31748042a719a7ea11385d967a9af2f0898dec17\",\"dweb:/ipfs/QmPucqFg1WNzqPPBtwV5DFLmcdK7RkrctmX4VL1c39Tjro\"]},\"@balancer-labs/v3-vault/contracts/RouterCommon.sol\":{\"keccak256\":\"0xb473ef641d1465f4d3c4f0372183e7c4c0baa77b2e2cf73dee947ab7ab722bac\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://61a166cdf1760c79790f921a8edee1f1977f07cef699db901bd15100ab30f96f\",\"dweb:/ipfs/QmdyhDm4PgNyzNC3s25k68yd52GtqM4PJt6QpfkmEmRtHW\"]},\"@balancer-labs/v3-vault/contracts/SenderGuard.sol\":{\"keccak256\":\"0x43fbf1ee03766ff75e6306520827db7d8f9cbc63f4609105a7062cbf6c6980a2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c015d974c3c8ae2f0677905a3216148611be430d4f3b8e64698ede996c8b4a46\",\"dweb:/ipfs/QmdrU9JE9NoksjQ6DUmGH1uKjgdyXVZXfD1RzdwFPnYtzr\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@balancer-labs/v3-vault/contracts/lib/RouterWethLib.sol\":{\"keccak256\":\"0xd66f21fa586085e10a1e322370c7015ebe472c44fc27472a6fdfe67ad6d9b188\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://88b4830e07a76a68dce1e3adba583f60259df5187087def2fd43d3c1f8b0e2ae\",\"dweb:/ipfs/QmbGNEfYtDUFpGrFYo9iJcSg9sJxiAVN9iaJApCaHobTDm\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"permit2/src/interfaces/IAllowanceTransfer.sol\":{\"keccak256\":\"0x37f0ac203b6ef605c9533e1a739477e8e9dcea90710b40e645a367f8a21ace29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0104d72aeaec1cd66cc232e7de7b7ead08608efcc179491b8a66387614670b0\",\"dweb:/ipfs/QmfAZDyuNC9FXXbnJUwqHNwmAK6uRrXxtWEytLsxjskPsN\"]},\"permit2/src/interfaces/IEIP712.sol\":{\"keccak256\":\"0xfdccf2b9639070803cd0e4198427fb0df3cc452ca59bd3b8a0d957a9a4254138\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7c936ac42ce89e827db905a1544397f8bdf46db34cdb6aa1b90dea42fdb4c72\",\"dweb:/ipfs/QmVgurxo1N31qZqkPBirw9Z7S9tLYmv6jSwQp8R8ur2cBk\"]},\"permit2/src/interfaces/IPermit2.sol\":{\"keccak256\":\"0xaa631cc9f53e699301d94233007110a345e6779011def484e8dd97b8fe0af771\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc0502cf19c9c18f320a3001201e89e350393b75837f6b7971de18b2de06f30d\",\"dweb:/ipfs/QmT9SfhdJ7VJNNrf94g4H5usyi7ShqWGx7Cqsz9jZTjX96\"]},\"permit2/src/interfaces/ISignatureTransfer.sol\":{\"keccak256\":\"0xe6df9966f8841dc3958ee86169c89de97e7f614c81c28b9dc947b12d732df64e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3d4eafdee7f48c3be8350a94eb6edd0bfb2af2c105df65787a77174f356c0317\",\"dweb:/ipfs/QmY1j2adeeAhNpn6cUuthemxGCdLXHTfyMh9yTKsY4mZ2d\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/RouterCommon.sol":{"RouterCommon":{"abi":[{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"ErrorSelectorNotFound","type":"error"},{"inputs":[],"name":"EthTransfer","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"inputs":[],"name":"getPermit2","outputs":[{"internalType":"contract IPermit2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSender","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWeth","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"internalType":"struct IRouterCommon.PermitApproval[]","name":"permitBatch","type":"tuple[]"},{"internalType":"bytes[]","name":"permitSignatures","type":"bytes[]"},{"components":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint160","name":"amount","type":"uint160"},{"internalType":"uint48","name":"expiration","type":"uint48"},{"internalType":"uint48","name":"nonce","type":"uint48"}],"internalType":"struct IAllowanceTransfer.PermitDetails[]","name":"details","type":"tuple[]"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"sigDeadline","type":"uint256"}],"internalType":"struct IAllowanceTransfer.PermitBatch","name":"permit2Batch","type":"tuple"},{"internalType":"bytes","name":"permit2Signature","type":"bytes"},{"internalType":"bytes[]","name":"multicallData","type":"bytes[]"}],"name":"permitBatchAndCall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getPermit2()":"1bbf2e23","getSender()":"5e01eb5a","getWeth()":"107c279f","multicall(bytes[])":"ac9650d8","permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])":"19c6989f","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EthTransfer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"getPermit2\",\"outputs\":[{\"internalType\":\"contract IPermit2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWeth\",\"outputs\":[{\"internalType\":\"contract IWETH\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"internalType\":\"struct IRouterCommon.PermitApproval[]\",\"name\":\"permitBatch\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"permitSignatures\",\"type\":\"bytes[]\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"internalType\":\"uint48\",\"name\":\"expiration\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"nonce\",\"type\":\"uint48\"}],\"internalType\":\"struct IAllowanceTransfer.PermitDetails[]\",\"name\":\"details\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sigDeadline\",\"type\":\"uint256\"}],\"internalType\":\"struct IAllowanceTransfer.PermitBatch\",\"name\":\"permit2Batch\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"permit2Signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes[]\",\"name\":\"multicallData\",\"type\":\"bytes[]\"}],\"name\":\"permitBatchAndCall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"Common functionality includes access to the sender (which would normally be obscured, since msg.sender in the Vault is the Router contract itself, not the account that invoked the Router), versioning, and the external invocation functions (`permitBatchAndCall` and `multicall`).\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}]},\"kind\":\"dev\",\"methods\":{\"getSender()\":{\"returns\":{\"_0\":\"The address of the sender\"}},\"multicall(bytes[])\":{\"params\":{\"data\":\"Encoded function calls to be executed in the batch.\"},\"returns\":{\"results\":\"Array of bytes arrays, each representing the return data from each function call executed.\"}},\"permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])\":{\"params\":{\"multicallData\":\"An array of bytes arrays, each representing an encoded function call on this contract\",\"permit2Batch\":\"A batch of permit2 approvals\",\"permit2Signature\":\"A permit2 signature for the batch approval\",\"permitBatch\":\"An array of `PermitApproval` structs, each representing an ERC20 permit request\",\"permitSignatures\":\"An array of bytes, corresponding to the permit request signature in `permitBatch`\"},\"returns\":{\"results\":\"Array of bytes arrays, each representing the return data from each function call executed\"}},\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"ErrorSelectorNotFound()\":[{\"notice\":\"Handle the \\\"reverted without a reason\\\" case (i.e., no return data).\"}],\"EthTransfer()\":[{\"notice\":\"Incoming ETH transfer from an address that is not WETH.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}]},\"kind\":\"user\",\"methods\":{\"getPermit2()\":{\"notice\":\"Returns Permit2 contract address.\"},\"getSender()\":{\"notice\":\"Get the first sender which initialized the call to Router.\"},\"getWeth()\":{\"notice\":\"Returns WETH contract address.\"},\"multicall(bytes[])\":{\"notice\":\"Executes a batch of function calls on this contract.\"},\"permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])\":{\"notice\":\"Permits multiple allowances and executes a batch of function calls on this contract.\"},\"version()\":{\"notice\":\"Getter for the version.\"}},\"notice\":\"Abstract base contract for functions shared among all Routers.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/RouterCommon.sol\":\"RouterCommon\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x75d5964b2f92dba9b9254e0052de28a9378e6759b1b28ccbb51db0bc80024176\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6ec9c862929ccff2be994d0296c0a4de3ddc19bb5a7aae3d4df0887dc7b29c8e\",\"dweb:/ipfs/QmSNr2fkNM2VyAo3B1DG1cuRh41t4A6mJZqeUu6vvYb97G\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouterCommon.sol\":{\"keccak256\":\"0x82d459426edf0ac20a33ad2065dae1f83544069b9887618248c0722e25a8b736\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c4566915a8c2b10f6232f92dad5e4409bb2aa46baf6a5d78dc0ac447facbfb37\",\"dweb:/ipfs/QmReRhA1BxRocwWsGgacaAcC2xRtWqJgN57bd2Yyy7A1gd\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISenderGuard.sol\":{\"keccak256\":\"0x2ec1ecf5c578aab7502f6985a03fbb79998218bdef819845d70d28a6994cff5b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a32637a45f19c29797db11eb25eb9bfda73302f280a64a9d9a4ab123db1b8e6f\",\"dweb:/ipfs/QmXGimviZ4Mr6kwgqkCwpHH5uGHVEjAcCRNvAwvoVYKi6f\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":{\"keccak256\":\"0xb4ee9e1543d36bdf9eeb4a9d5ab41170723239a1e27a2272f2e31de4765c019b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b70dd5e4fa496c2c1efb6bd20368587ba3c9c0d0afac9dc3631a29ff2628f99\",\"dweb:/ipfs/QmQigXUkpDuVK5VSX67RABrAC9bashPcHMasgPRNJb4k8Z\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":{\"keccak256\":\"0xb5f6b1d0ee3f295a717ce58329eaadccb1eefc2e1e02e2e7c438e377628475cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03c1b9bc73b7d14d9e1948a31c271a03a6ba4291f44d9aff17e60d300c111d0d\",\"dweb:/ipfs/QmNpW3iD3ST76N6xTncuVgYSuafSqFkXUmxNaK8uybr96G\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/RouterCommon.sol\":{\"keccak256\":\"0xb473ef641d1465f4d3c4f0372183e7c4c0baa77b2e2cf73dee947ab7ab722bac\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://61a166cdf1760c79790f921a8edee1f1977f07cef699db901bd15100ab30f96f\",\"dweb:/ipfs/QmdyhDm4PgNyzNC3s25k68yd52GtqM4PJt6QpfkmEmRtHW\"]},\"@balancer-labs/v3-vault/contracts/SenderGuard.sol\":{\"keccak256\":\"0x43fbf1ee03766ff75e6306520827db7d8f9cbc63f4609105a7062cbf6c6980a2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c015d974c3c8ae2f0677905a3216148611be430d4f3b8e64698ede996c8b4a46\",\"dweb:/ipfs/QmdrU9JE9NoksjQ6DUmGH1uKjgdyXVZXfD1RzdwFPnYtzr\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@balancer-labs/v3-vault/contracts/lib/RouterWethLib.sol\":{\"keccak256\":\"0xd66f21fa586085e10a1e322370c7015ebe472c44fc27472a6fdfe67ad6d9b188\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://88b4830e07a76a68dce1e3adba583f60259df5187087def2fd43d3c1f8b0e2ae\",\"dweb:/ipfs/QmbGNEfYtDUFpGrFYo9iJcSg9sJxiAVN9iaJApCaHobTDm\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"permit2/src/interfaces/IAllowanceTransfer.sol\":{\"keccak256\":\"0x37f0ac203b6ef605c9533e1a739477e8e9dcea90710b40e645a367f8a21ace29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0104d72aeaec1cd66cc232e7de7b7ead08608efcc179491b8a66387614670b0\",\"dweb:/ipfs/QmfAZDyuNC9FXXbnJUwqHNwmAK6uRrXxtWEytLsxjskPsN\"]},\"permit2/src/interfaces/IEIP712.sol\":{\"keccak256\":\"0xfdccf2b9639070803cd0e4198427fb0df3cc452ca59bd3b8a0d957a9a4254138\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7c936ac42ce89e827db905a1544397f8bdf46db34cdb6aa1b90dea42fdb4c72\",\"dweb:/ipfs/QmVgurxo1N31qZqkPBirw9Z7S9tLYmv6jSwQp8R8ur2cBk\"]},\"permit2/src/interfaces/IPermit2.sol\":{\"keccak256\":\"0xaa631cc9f53e699301d94233007110a345e6779011def484e8dd97b8fe0af771\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc0502cf19c9c18f320a3001201e89e350393b75837f6b7971de18b2de06f30d\",\"dweb:/ipfs/QmT9SfhdJ7VJNNrf94g4H5usyi7ShqWGx7Cqsz9jZTjX96\"]},\"permit2/src/interfaces/ISignatureTransfer.sol\":{\"keccak256\":\"0xe6df9966f8841dc3958ee86169c89de97e7f614c81c28b9dc947b12d732df64e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3d4eafdee7f48c3be8350a94eb6edd0bfb2af2c105df65787a77174f356c0317\",\"dweb:/ipfs/QmY1j2adeeAhNpn6cUuthemxGCdLXHTfyMh9yTKsY4mZ2d\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/SenderGuard.sol":{"SenderGuard":{"abi":[{"inputs":[],"name":"EthTransfer","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"inputs":[],"name":"getSender","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getSender()":"5e01eb5a"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"EthTransfer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"getSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Common functionality includes access to the sender (which would normally be obscured, since msg.sender in the Vault is the Router contract itself, not the account that invoked the Router), versioning, and the external invocation functions (`permitBatchAndCall` and `multicall`).\",\"kind\":\"dev\",\"methods\":{\"getSender()\":{\"returns\":{\"_0\":\"The address of the sender\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"EthTransfer()\":[{\"notice\":\"Incoming ETH transfer from an address that is not WETH.\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}]},\"kind\":\"user\",\"methods\":{\"getSender()\":{\"notice\":\"Get the first sender which initialized the call to Router.\"}},\"notice\":\"Abstract base contract for functions shared among all Routers.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/SenderGuard.sol\":\"SenderGuard\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x75d5964b2f92dba9b9254e0052de28a9378e6759b1b28ccbb51db0bc80024176\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6ec9c862929ccff2be994d0296c0a4de3ddc19bb5a7aae3d4df0887dc7b29c8e\",\"dweb:/ipfs/QmSNr2fkNM2VyAo3B1DG1cuRh41t4A6mJZqeUu6vvYb97G\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISenderGuard.sol\":{\"keccak256\":\"0x2ec1ecf5c578aab7502f6985a03fbb79998218bdef819845d70d28a6994cff5b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a32637a45f19c29797db11eb25eb9bfda73302f280a64a9d9a4ab123db1b8e6f\",\"dweb:/ipfs/QmXGimviZ4Mr6kwgqkCwpHH5uGHVEjAcCRNvAwvoVYKi6f\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":{\"keccak256\":\"0xb5f6b1d0ee3f295a717ce58329eaadccb1eefc2e1e02e2e7c438e377628475cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03c1b9bc73b7d14d9e1948a31c271a03a6ba4291f44d9aff17e60d300c111d0d\",\"dweb:/ipfs/QmNpW3iD3ST76N6xTncuVgYSuafSqFkXUmxNaK8uybr96G\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/SenderGuard.sol\":{\"keccak256\":\"0x43fbf1ee03766ff75e6306520827db7d8f9cbc63f4609105a7062cbf6c6980a2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c015d974c3c8ae2f0677905a3216148611be430d4f3b8e64698ede996c8b4a46\",\"dweb:/ipfs/QmdrU9JE9NoksjQ6DUmGH1uKjgdyXVZXfD1RzdwFPnYtzr\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol":{"SingletonAuthentication":{"abi":[{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getVault()":"8d928af8"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The disambiguator is the contract's own address. This is used in the construction of actionIds for permissioned functions, to avoid conflicts when multiple contracts (or multiple versions of the same contract) use the same function name.\",\"kind\":\"dev\",\"methods\":{\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"}},\"notice\":\"Base contract suitable for Singleton contracts (e.g., pool factories) that have permissioned functions.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":\"SingletonAuthentication\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol\":{\"keccak256\":\"0x89bd8b60aa203c8aa72af6e88671af68f4407a26dd3e0541b0e4dc387fd0081e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://411eb9ee6df963198102de5ae597c1f1377b0a45be23f17d38463f2eeefa2b0a\",\"dweb:/ipfs/QmcEaMawADJEyLswG5hhvhQuTNV3XUxBVu3YZCbJzQkoJ7\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x4910eb69dc3e3141803a36fb176349ae3d774f4a9811e4d486c44bf6a8e4e055\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://afec051b387a1dad075acfbe0093b443e9e5827e29f7b960af3c1b69645aa290\",\"dweb:/ipfs/QmdLcyhmHCiEyVbFsVByyjEdUn9pDTzVAPNyBpdH2YEs4Y\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/Vault.sol":{"Vault":{"abi":[{"inputs":[{"internalType":"contract IVaultExtension","name":"vaultExtension","type":"address"},{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"},{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AllZeroInputs","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BalanceOverflow","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"invariantRatio","type":"uint256"},{"internalType":"uint256","name":"maxInvariantRatio","type":"uint256"}],"name":"InvariantRatioAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"invariantRatio","type":"uint256"},{"internalType":"uint256","name":"minInvariantRatio","type":"uint256"}],"name":"InvariantRatioBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"MultipleNonZeroInputs","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotStaticCall","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"PoolTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntToUint","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintToInt","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"},{"inputs":[],"name":"ZeroDivision","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reentrancyGuardEntered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculated","type":"uint256"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_contract_IVault_fromMemory":{"entryPoint":1268,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint32_fromMemory":{"entryPoint":1299,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":1233,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_5262":{"entryPoint":1186,"id":null,"parameterSlots":1,"returnSlots":0},"fun_calculateVaultStorageSlot":{"entryPoint":1327,"id":28383,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6101e06040908082523461036b57606081617103803803809161002282856104d1565b83398101031261036b5780516001600160a01b0380821680830361036b5760208085015194838616860361036b5786015183811680910361036b57610086875161006b816104a2565b600a8152691a5cd55b9b1bd8dad95960b21b8482015261052f565b60c0526100b98751610097816104a2565b60118152701b9bdb96995c9bd1195b1d1850dbdd5b9d607a1b8482015261052f565b60e0526100e687516100ca816104a2565b600b81526a746f6b656e44656c74617360a81b8482015261052f565b9661010097885261011e81516100fb816104a2565b6012815271185919131a5c5d5a591a5d1e50d85b1b195960721b8582015261052f565b9661012097885261014d8251610133816104a2565b60098152681cd95cdcda5bdb925960ba1b8682015261052f565b9261014093845282519663fbfa77cf60e01b9081895260049887818b818c5afa9081156103af575f91610485575b50813091160361047757845191825286828a81865afa9182156103e8575f92610448575b503091160361043a576101c0978852600a80546001600160a01b0319169190911790558151634546891d60e11b81529380858881895afa948515610430575f95610411575b506101609485528251631060fdbd60e11b815296818882818a5afa978815610376575f986103f2575b506101a0978852835163cd51c12f60e01b81529682888381845afa9788156103e8575f986103b9575b506101809788528451630716585d60e51b815283818481855afa9081156103af57908492915f91610380575b5060805285516329cab55160e11b815292839182905afa918215610376575f92610344575b505060a05260098054610100600160a81b03191660089290921b610100600160a81b031691909117905551616b009790969088610603893960805188615b65015260a05188613b16015260c051888181611318015261166c015260e05188818161135901528181614df30152614e3701525187614db301525186818161144301526126e70152518581816113850152818161140f01526126b30152518450505183611b1801525182611bc70152518181816109bc01526115bd0152f35b90809250813d831161036f575b61035b81836104d1565b8101031261036b57515f80610287565b5f80fd5b503d610351565b84513d5f823e3d90fd5b83819492503d83116103a8575b61039781836104d1565b8101031261036b578391515f610262565b503d61038d565b86513d5f823e3d90fd5b6103da919850833d85116103e1575b6103d281836104d1565b810190610513565b965f610236565b503d6103c8565b85513d5f823e3d90fd5b61040a919850823d84116103e1576103d281836104d1565b965f61020d565b816104299296503d87116103e1576103d281836104d1565b935f6101e4565b83513d5f823e3d90fd5b86631bbe95c760e01b5f525ffd5b610469919250873d8911610470575b61046181836104d1565b8101906104f4565b905f61019f565b503d610457565b886301ab9d9d60e41b5f525ffd5b61049c9150883d8a116104705761046181836104d1565b5f61017b565b604081019081106001600160401b038211176104bd57604052565b634e487b7160e01b5f52604160045260245ffd5b601f909101601f19168101906001600160401b038211908210176104bd57604052565b9081602091031261036b57516001600160a01b038116810361036b5790565b9081602091031261036b575163ffffffff8116810361036b5790565b6040519061053c826104a2565b600c82526105bd603a602084016b5661756c7453746f7261676560a01b81526020604051948592828401977f62616c616e6365722d6c6162732e76332e73746f726167652e000000000000008952518091603986015e830190601760f91b60398301528051928391018583015e015f8382015203601a8101845201826104d1565b5190205f1981019081116105ee576040519060208201908152602082526105e3826104a2565b9051902060ff191690565b634e487b7160e01b5f52601160045260245ffdfe60806040526004361015610018575b366115a65761157e565b5f3560e01c806315afd409146100d757806315dacbea146100d257806321457897146100cd5780632bfb780c146100c857806343583be5146100c357806348c89491146100be5780634af29ec4146100b9578063ae639329146100b4578063b9a8effa146100af578063beabacc8146100aa578063c9c1661b146100a55763d2c725e00361000e57610b14565b610a16565b6109e0565b61099d565b61089a565b6107ca565b610731565b6106a5565b6105cd565b6104e8565b610228565b6100fe565b6001600160a01b038116036100ed57565b5f80fd5b35906100fc826100dc565b565b346100ed5760406003193601126100ed5760043561011b816100dc565b6024356101266115f0565b61012e61166a565b6001600160a01b0382165f818152600860209081526040918290205491517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152919492829060249082905afa938415610223576101e6946101ba925f916101f4575b50806101b4856001600160a01b03165f52600860205260405f2090565b55610ba7565b918083116101ea575b50816101ce916116bb565b6101d6611645565b6040519081529081906020820190565b0390f35b91506101ce6101c3565b610216915060203d60201161021c575b61020e81836102ff565b810190610b52565b5f610197565b503d610204565b610b61565b346100ed5760806003193601126100ed57610276600435610248816100dc565b602435610254816100dc565b60443590610261826100dc565b610270606435809483336116f9565b336118dd565b602060405160018152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116102c257604052565b610281565b60e0810190811067ffffffffffffffff8211176102c257604052565b6060810190811067ffffffffffffffff8211176102c257604052565b90601f601f19910116810190811067ffffffffffffffff8211176102c257604052565b6040519060c0820182811067ffffffffffffffff8211176102c257604052565b604051906100fc826102c7565b60405190610180820182811067ffffffffffffffff8211176102c257604052565b67ffffffffffffffff81116102c25760051b60200190565b9080601f830112156100ed5760209082356103a281610370565b936103b060405195866102ff565b81855260208086019260051b8201019283116100ed57602001905b8282106103d9575050505090565b813581529083019083016103cb565b359060048210156100ed57565b67ffffffffffffffff81116102c257601f01601f191660200190565b92919261041d826103f5565b9161042b60405193846102ff565b8294818452818301116100ed578281602093845f960137010152565b9080601f830112156100ed5781602061046293359101610411565b90565b9081518082526020808093019301915f5b828110610484575050505090565b835185529381019392810192600101610476565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b916104da9061046294928452606060208501526060840190610465565b916040818403910152610498565b346100ed576003196020813601126100ed5760043567ffffffffffffffff918282116100ed5760c09082360301126100ed57610522610322565b61052e826004016100f1565b815261053c602483016100f1565b60208201526044820135604082015260648201358381116100ed576105679060043691850101610388565b6060820152610578608483016103e8565b608082015260a48201359283116100ed5761059f6105a99260046101e69536920101610447565b60a0820152610bb4565b604093919351938493846104bd565b600211156100ed57565b35906100fc826105b8565b346100ed576003196020813601126100ed5760043567ffffffffffffffff918282116100ed5760e09082360301126100ed57610607610342565b610613826004016105c2565b8152610621602483016100f1565b6020820152610632604483016100f1565b6040820152610643606483016100f1565b60608201526084820135608082015260a482013560a082015260c48201359283116100ed5761067e6106889260046101e69536920101610447565b60c0820152610d3e565b604080519384526020840192909252908201529081906060820190565b346100ed5760a06003193601126100ed5760405160a0810181811067ffffffffffffffff8211176102c2576101e691610688916040526004356106e7816105b8565b81526024356106f5816105b8565b6020820152604435610706816100dc565b604082015260643560608201526084356080820152610fcd565b906020610462928181520190610498565b346100ed5760206003193601126100ed5767ffffffffffffffff6004358181116100ed57366023820112156100ed5780600401359182116100ed5736602483830101116100ed576101e6916024610788920161130d565b60405191829182610720565b359060058210156100ed57565b6107b76104629492606083526060830190610465565b9260208201526040818403910152610498565b346100ed576003196020813601126100ed5760043567ffffffffffffffff918282116100ed5760c09082360301126100ed57610804610322565b610810826004016100f1565b815261081e602483016100f1565b602082015260448201358381116100ed5761083f9060043691850101610388565b60408201526064820135606082015261085a60848301610794565b608082015260a48201359283116100ed5761088161088b9260046101e69536920101610447565b60a08201526113da565b604093919351938493846107a1565b346100ed5760606003193601126100ed576004356108b7816100dc565b602435906108c4826100dc565b604435906108d06115f0565b6108d861166a565b6108ea6108e483614d4e565b82614da3565b6001600160a01b0381165f52600860205260405f2080549383850394851161098e579390556040517fa9059cbb0000000000000000000000000000000000000000000000000000000060208201526001600160a01b03909316602484015260448084019290925290825261096991906109646064836102ff565b6165a0565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b610b6c565b5f9103126100ed57565b346100ed575f6003193601126100ed5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100ed5760606003193601126100ed57610276600435610a00816100dc565b602435610a0c816100dc565b60443591336118dd565b346100ed5760406003193601126100ed57600435610a33816100dc565b60243590610a40826100dc565b6001600160a01b0380911691825f525f602052600192600160405f20541615610ae9575f93929352600360205260405f20926040519283602086549182815201955f5260205f20925f905b828210610abc5786610aa987610aa3838c03846102ff565b82614ce8565b9051604080519182526020820192909252f35b90919280610add86998483985416906001600160a01b036020921681520190565b98019493920190610a8b565b7f9e51bd5c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b346100ed575f6003193601126100ed5760207f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6040519015158152f35b908160209103126100ed575190565b6040513d5f823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b905f19820191821161098e57565b9190820391821161098e57565b90610bbd61166a565b610bd06001600160a01b03835116611ac3565b610be9610be483516001600160a01b031690565b611b10565b610c02610bfd83516001600160a01b031690565b611c38565b90610c56602083015151610c1d6060860191825151906120f5565b805160c0850190610c3782519160a0880192835191612196565b92610c47875160019060101c1690565b610ccf575b505050848461261a565b9490919586610c6a835160019060111c1690565b610c78575b50505050929190565b84975093610cc594610cbb610cae610c9785516001600160a01b031690565b6001600160a01b03165f52600260205260405f2090565b546001600160a01b031690565b9484513390612d86565b925f808080610c6f565b610cf7610d3694888a610cef610cae610c9783516001600160a01b031690565b9233906122a5565b610d2b610d25610d0e8a516001600160a01b031690565b6001600160a01b03165f52600560205260405f2090565b8861238f565b519151905191612196565b5f8080610c4c565b90610d4761166a565b60208201906001600160a01b03610d6081845116611ac3565b610d74610be484516001600160a01b031690565b608084015115610f695760408401516001600160a01b031690610db0610da460608701516001600160a01b031690565b6001600160a01b031690565b911614610f4157610dcb610bfd83516001600160a01b031690565b92610dd68482612f40565b90610de2858383612fd7565b8551600c1c600116610ec6575b8551610e099190600b1c600116610e85575b86848461338e565b9791979490978397610e208451600190600d1c1690565b610e50575b505050505051610e3481610fbe565b610e3d81610fbe565b610e48575081929190565b918093509190565b85985090610e6f610cae610c97610e7a9894516001600160a01b031690565b948451913392613845565b925f80808080610e25565b85516001600160a01b0316610ebf60608601918251610eb8610cae836001600160a01b03165f52600260205260405f2090565b9185613282565b9052610e01565b610eff90610edb86516001600160a01b031690565b610ef9610cae826001600160a01b03165f52600260205260405f2090565b9161310e565b610f1c610f16610d0e86516001600160a01b031690565b8661238f565b610f278286836131c7565b6040830152610e09610f3a868484612fd7565b9050610def565b7fa54b181d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f57a456b7000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60021115610fc857565b610f91565b610fd561166a565b600160075460021c166112d05760408101916001600160a01b03928381511693845f52600e6020528060405f205416156112a457600494506110156115f0565b602061102b610da484516001600160a01b031690565b604051968780927f38d52e0f0000000000000000000000000000000000000000000000000000000082525afa8015610223576080955f91611275575b50166110838161107e84516001600160a01b031690565b613abd565b81516001600160a01b03169061109f6060860192835190613b13565b600160208601516110af81610fbe565b6110b881610fbe565b0361120a576110e0918551916110cd83610fbe565b84516001600160a01b0316915192614003565b7feeb740c90bf2b18c9532eb7d473137767036d893dff3e009f32718f821b2a4c0829692979397968861113e611120610da489516001600160a01b031690565b94604051938493846040919493926060820195825260208201520152565b0390a25b805161114d81610fbe565b61115681610fbe565b6111c057015180841061118f575061118261117d91849283915b516001600160a01b031690565b613b13565b61118a611645565b929190565b7fe2ea151b000000000000000000000000000000000000000000000000000000005f52600484905260245260445b5ffd5b01518085116111da575061118261117d9185928391611170565b7fe2ea151b000000000000000000000000000000000000000000000000000000005f52600485905260245260445ffd5b61122d9185519161121a83610fbe565b84516001600160a01b0316915192613ba5565b7f3771d13c67011e31e12031c54bb59b0bf544a80b81d280a3711e172aa8b7f47b829692979397968861126d611120610da489516001600160a01b031690565b0390a2611142565b611297915060203d60201161129d575b61128f81836102ff565b8101906112f8565b5f611067565b503d611285565b847f85f41299000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f0f27df09000000000000000000000000000000000000000000000000000000005f5260045ffd5b908160209103126100ed5751610462816100dc565b91909161134f6113497f000000000000000000000000000000000000000000000000000000000000000092835c1595866113d1575b3691610411565b33616054565b926113575750565b7f00000000000000000000000000000000000000000000000000000000000000005c6113a9575f905d6100fc7f000000000000000000000000000000000000000000000000000000000000000061436d565b7f20f1d86d000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001855d611342565b906113e361166a565b6113f66001600160a01b03835116611ac3565b61140a610be483516001600160a01b031690565b6114677f00000000000000000000000000000000000000000000000000000000000000005c61144084516001600160a01b031690565b907f000000000000000000000000000000000000000000000000000000000000000061437e565b61148061147b83516001600160a01b031690565b611ed0565b906114d460208301515161149b6040860191825151906120f5565b805160c08501906114b582519160a0880192835191614397565b926114c58751600190600e1c1690565b611527575b50505084846145d8565b94909586846114e88451600190600f1c1690565b6114f7575b5050505050929190565b61151d9550611513610cae610c9785516001600160a01b031690565b9484513390614b2d565b5f808086816114ed565b61154e61157694888a611547610cae610c9783516001600160a01b031690565b9233614475565b61156b611565610d0e8a516001600160a01b031690565b886123fc565b519151905191614397565b5f80806114ca565b7ff2238896000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461157e57365f80375f8036816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af43d5f803e156115ec573d5ff35b3d5ffd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c61161d576001905d565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d565b7f00000000000000000000000000000000000000000000000000000000000000005c1561169357565b7fc09ba736000000000000000000000000000000000000000000000000000000005f5260045ffd5b906116c590614d4e565b907f8000000000000000000000000000000000000000000000000000000000000000821461098e576100fc915f0390614da3565b92919091611708828486614e64565b5f198103611718575b5050505050565b8082116118a25703906001600160a01b039283811693841561186d5780831695861561183857846117788561176286611762866001600160a01b03165f52601060205260405f2090565b906001600160a01b03165f5260205260405f2090565b551692833b156100ed576040517f5687f2b80000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152919092166024820152604481018290527fa0175360a15bca328baf7ea85c7b784d58b222a50d0ce760b10dba336d226a6191611812915f8180606481015b038183895af161181f575b506040519081529081906020820190565b0390a45f80808080611711565b8061182c611832926102ae565b80610993565b5f611801565b7f94280d62000000000000000000000000000000000000000000000000000000005f526001600160a01b03841660045260245ffd5b7fe602df05000000000000000000000000000000000000000000000000000000005f526001600160a01b03821660045260245ffd5b6001600160a01b03837ffb8f41b2000000000000000000000000000000000000000000000000000000005f521660045260245260445260645ffd5b929091926001600160a01b0390818416918215611a8e57808616918215611a595761191d86611762836001600160a01b03165f52600f60205260405f2090565b54808611611a1c5785900361194787611762846001600160a01b03165f52600f60205260405f2090565b5561196787611762836001600160a01b03165f52600f60205260405f2090565b8581540190551691827fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f604051806119a488829190602083019252565b0390a4803b156100ed576040517f23de66510000000000000000000000000000000000000000000000000000000081526001600160a01b03938416600482015293909216602484015260448301525f908290818381606481015b03925af1801561022357611a0f5750565b8061182c6100fc926102ae565b7fe450d38c000000000000000000000000000000000000000000000000000000005f526001600160a01b038716600452602452604485905260645ffd5b7fec442f05000000000000000000000000000000000000000000000000000000005f526001600160a01b03871660045260245ffd5b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f526001600160a01b03851660045260245ffd5b6001600160a01b0316805f525f602052600160405f2054811c1615611ae55750565b7f4bdace13000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b63ffffffff807f00000000000000000000000000000000000000000000000000000000000000001642111580611c2a575b611c02576001600160a01b0382165f525f60205260405f20549060018260021c1690611b6b605a90565b906028820180921161098e5782611bbc575b50509050611b885750565b7fd971f597000000000000000000000000000000000000000000000000000000005f526001600160a01b031660045260245ffd5b611bee9250611bf7937f0000000000000000000000000000000000000000000000000000000000000000921c16616ab2565b63ffffffff1690565b421115805f80611b7d565b7fda9f8b34000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001600754811c16611b41565b604090815191611c47836102c7565b5f8352826020810191606080845281830190808252808401908082526080936080860182815260a0870183815260c08801938452611c836115f0565b6001600160a01b038a165f526005602052825f20935f602052835f2054926004602052611cbf855f20946003602052865f209081549c52614eb0565b8b52611cca8a614f07565b8852611cd58a612124565b8752611ce08a612124565b9052611ced898d51616610565b9052611cf888612124565b81528a5191600199600184811c169384611ebc575b5083611eaa575b5f5b8d8b8210611d74575050505050505050505050505080611d65611d4d611d6c936001600160a01b03165f52600560205260405f2090565b916001600160a01b03165f52600660205260405f2090565b9083614f94565b610462611645565b908a8d92828c8c8c611dd684611dc281611db4611daf8f8f61117085611d9a9251612155565b6001600160a01b03165f5260205260405f2090565b614f55565b94905f5260205260405f2090565b54945183611dd08383612155565b52612155565b50611de0816150f8565b611deb858d51612155565b52611e096fffffffffffffffffffffffffffffffff841685876151c8565b878d8d15611e9d5782015115159182611e7f575b5050611e30575b50505050505b01611d16565b82611e5392611e4a82611e43885161666c565b9451612155565b51961c8561668f565b9283611e63575b8e93508c611e24565b611e7693611e7091610ba7565b916151c8565b5f8f8282611e5a565b90915051611e8c81610fbe565b611e9581610fbe565b14875f611e1d565b5050505050505050611e2a565b8c5190935060031c6001161592611d14565b611ec791945061666c565b1515925f611d0d565b604090815191611edf836102c7565b5f8352826020810191606080845281830190808252808401908082526080936080860182815260a0870183815260c08801938452611f1b6115f0565b6001600160a01b038a165f526005602052825f20935f602052835f2054926004602052611f57855f20946003602052865f209081549c52614eb0565b8b52611f628a614f07565b8852611f6d8a612124565b8752611f788a612124565b9052611f85898d51616610565b9052611f9088612124565b81528a5191600199600184811c1693846120e1575b50836120cf575b5f5b8d8b8210611fe5575050505050505050505050505080611d65611d4d611d6c936001600160a01b03165f52600560205260405f2090565b908a8d92828c8c8c61200b84611dc281611db4611daf8f8f61117085611d9a9251612155565b50612015816150f8565b612020858d51612155565b5261203e6fffffffffffffffffffffffffffffffff84168587615215565b878d8d156120c257820151151591826120a4575b5050612065575b50505050505b01611fae565b8261207892611e4a82611e43885161666c565b9283612088575b8e93508c612059565b61209b9361209591610ba7565b91615215565b5f8f828261207f565b909150516120b181610fbe565b6120ba81610fbe565b14875f612052565b505050505050505061205f565b8c5190935060031c6001161592611fac565b6120ec91945061666c565b1515925f611fa5565b036120fc57565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b9061212e82610370565b61213b60405191826102ff565b828152601f1961214b8294610370565b0190602036910137565b80518210156121695760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b91908251916121a98251825190856150a9565b6121b283612124565b935f5b8481106121c457505050505090565b806121f96121d460019385612155565b516121f46121e28489612155565b516121ed8589612155565b51926150e5565b61576b565b6122038289612155565b52016121b5565b60041115610fc857565b519081151582036100ed57565b908160209103126100ed5761046290612214565b906004821015610fc85752565b95929361227361229795610462999793612289956001600160a01b038092168b521660208a01526040890190612235565b606087015260e0608087015260e0860190610465565b9084820360a0860152610465565b9160c0818403910152610498565b5f6001600160a01b03602095969361231d6122c787516001600160a01b031690565b946080880151976122d78961220a565b60a0608060408301519c0151910151916040519b8c9a8b998a977fba5f9f4000000000000000000000000000000000000000000000000000000000895260048901612242565b0393165af1908115610223575f91612360575b501561233857565b7f2aaf8866000000000000000000000000000000000000000000000000000000005f5260045ffd5b612382915060203d602011612388575b61237a81836102ff565b810190612221565b5f612330565b503d612370565b60208082015151925f5b8481106123a7575050505050565b6001906123f66fffffffffffffffffffffffffffffffff60406123d66123d085838b0151612155565b516150f8565b6123e48560a08b0151612155565b52835f528587525f20541682876151c8565b01612399565b60208082015151925f5b848110612414575050505050565b60019061245d6fffffffffffffffffffffffffffffffff604061243d6123d085838b0151612155565b61244b8560a08b0151612155565b52835f528587525f2054168287615215565b01612406565b60405190612470826102e3565b5f6040838281528260208201520152565b9080601f830112156100ed5781519060209161249c81610370565b936124aa60405195866102ff565b81855260208086019260051b8201019283116100ed57602001905b8282106124d3575050505090565b815181529083019083016124c5565b81601f820112156100ed578051906124f9826103f5565b9261250760405194856102ff565b828452602083830101116100ed57815f9260208093018386015e8301015290565b6080818303126100ed5780519260208201519167ffffffffffffffff928381116100ed5784612558918301612481565b9360408201518481116100ed5781612571918401612481565b9360608301519081116100ed5761046292016124e2565b939061046295936125c6936001600160a01b036125b893168752602087015260a0604087015260a0860190610465565b908482036060860152610465565b916080818403910152610498565b906001820180921161098e57565b9190820180921161098e57565b9161260c9061046294928452606060208501526060840190610465565b916040818403910152610465565b926126236115f0565b60609161262e612463565b926020860190612642825151808752612124565b90608084019687516126538161220a565b61265c8161220a565b612a9157506040840151906126718751612124565b956126ad8360808c01516126a761268f8a516001600160a01b031690565b6001600160a01b03165f52601160205260405f205490565b9061571a565b9261271e7f00000000000000000000000000000000000000000000000000000000000000005c6126e489516001600160a01b031690565b907f0000000000000000000000000000000000000000000000000000000000000000905f5260205260405f20905f5260205260405f205c90565b612a14575b60408701518082116129e3575061273c819a999a61578d565b60208a01985f5b8b5181101561289e578c6127578288612155565b516127618161578d565b61276b838a612155565b5161288c57816127918460a06127888260c0612798980151612155565b51930151612155565b519161579e565b806127a3838a612155565b525b6127b3611170838b51612155565b60608b016127c2848251612155565b51831061284057508e83611e708f8f8f966128349161281c86612814818b60019e9d6127f18861283a9f6116bb565b61280d6127fe8489612155565b5191516001600160a01b031690565b908d6157cd565b875292612155565b5261282b856060880151612155565b519251906125e2565b90610ba7565b01612743565b9161284f846111bd9451612155565b517f2f785e46000000000000000000000000000000000000000000000000000000005f526001600160a01b03909216600452602452604452606490565b50506128988188612155565b516127a5565b509399509594509592986128c49197506128bf85516001600160a01b031690565b6158f1565b7ffbe5b0d79fb94f1e81c0a92bf86ae9d3a19e9d1bf6202c0d3e75120f65d5d8a56128f684516001600160a01b031690565b9261291886602087019561291187516001600160a01b031690565b33916116f9565b612920615954565b6129b8575b61294b8661293a87516001600160a01b031690565b86516001600160a01b0316906159d4565b61297f61268f61297361296588516001600160a01b031690565b96516001600160a01b031690565b9451966111708861220a565b926129a76001600160a01b03926129958861220a565b8c8460405195869516981696846125ef565b0390a46129b2611645565b93929190565b6129de866129cd87516001600160a01b031690565b86516001600160a01b031690615969565b612925565b7f31d38e0b000000000000000000000000000000000000000000000000000000005f5260049190915260245260445ffd5b989491612a278b97949995929b51615350565b9a5f5b8651811015612a8157808b612a7a8f93612a74612a638f8390612a59600199612a53848a612155565b5161576b565b611dd08383612155565b51612a6e8386612155565b51610ba7565b92612155565b5201612a2a565b5091949893969a50919498612723565b949060018851612aa08161220a565b612aa98161220a565b03612b2d57612ab8895161528d565b60408501519186928a612b27612b1d8b8a6040612ad860608301516152c1565b92019482865286608082015193612b17610da4612b09612b0261268f88516001600160a01b031690565b9551615350565b95516001600160a01b031690565b946155ea565b909251909a612155565b52612723565b60028896929651612b3d8161220a565b612b468161220a565b03612bd957612b55895161528d565b612bd2826060870190612b79612b6b83516152c1565b60408c019381855251612155565b51612b85835188612155565b528b612b98608082015193518093612155565b51612bb7612bb061268f8c516001600160a01b031690565b9251615350565b92612bcc610da48c516001600160a01b031690565b946153a7565b9690612723565b509360038751612be88161220a565b612bf18161220a565b03612cb257612c008851615258565b5f612c18610da4610da487516001600160a01b031690565b9560408601519660808b0151918360a089015199612c666040519b8c96879586947fab68e28c0000000000000000000000000000000000000000000000000000000086523360048701612588565b03925af1948515610223575f915f965f925f91612c87575b50919692612723565b9250509550612ca891503d805f833e612ca081836102ff565b810190612528565b919690915f612c7e565b7f137a9a39000000000000000000000000000000000000000000000000000000005f5260045ffd5b9190916040818403126100ed57612cf081612214565b92602082015167ffffffffffffffff81116100ed576104629201612481565b969394610462989692612d7896612d49612d6a96612d5c95610100948d6001600160a01b0380931690521660208d015260408c0190612235565b60608a01528060808a0152880190610465565b9086820360a0880152610465565b9084820360c0860152610465565b9160e0818403910152610498565b949395929691908451612d9f906001600160a01b031690565b90608086015192612daf8461220a565b60808601518a60a0890151926040519b8c9788977f2754888d0000000000000000000000000000000000000000000000000000000089526004890197612df498612d0f565b03916001600160a01b031691815a5f948591f1938415610223575f905f95612f19575b50158015612f0d575b612ee5576001809360091c1615612e3e5792935090915f835b612e45575b5050505090565b8451811015612ee057612e588186612155565b516060840190612e69838351612155565b5111612e785750830183612e39565b612ea382612e9b81612e956111708b9760206111bd9a0151612155565b95612155565b519251612155565b517ffbd8a724000000000000000000000000000000000000000000000000000000005f526001600160a01b03909216600452602452604452606490565b612e3e565b7f1d3391d8000000000000000000000000000000000000000000000000000000005f5260045ffd5b50835185511415612e20565b9050612f389194503d805f833e612f3081836102ff565b810190612cda565b93905f612e17565b6040519291608084019067ffffffffffffffff8211858310176102c257612fc7916040525f855260208501945f8652612fbf60408201915f83528360608201965f88528299612fb860208401805190612fa86001600160a01b03928360408801511690614ce8565b8752519060608501511690614ce8565b90526131c7565b905251615350565b9052565b612fd482610fbe565b52565b919091606060c0604051612fea816102c7565b5f81525f60208201528260408201525f838201525f60808201525f60a0820152015280519261301884610fbe565b6080604082015193015160c0602083519301519301519361304161303a610342565b9687612fcb565b60208601526040850152606084015260808301523360a083015260c082015290565b90612fd482610fbe565b919060e0810190835161307f81610fbe565b8152602080850151602083015260408501519260e060408401528351809152602061010084019401915f5b8281106130fa575050505060c0846060610462959601516060840152608081015160808401526130ea60a082015160a08501906001600160a01b03169052565b01519060c0818403910152610498565b8351865294810194928101926001016130aa565b6020919261315e5f6001600160a01b038094604051978896879586937f5211fa7700000000000000000000000000000000000000000000000000000000855260406004860152604485019061306d565b911660248301520393165af1908115610223575f916131a8575b501561318057565b7fe91e17e7000000000000000000000000000000000000000000000000000000005f5260045ffd5b6131c1915060203d6020116123885761237a81836102ff565b5f613178565b91909180516131d581610fbe565b6131de81610fbe565b613223579061321a670de0b6b3a7640000936121ed608061321f9501519360a061320e60c0850151835190612155565b51930151905190612155565b6150e5565b0490565b6104629261325f61325960806121f49401519460a061324d602060c0870151930192835190612155565b51940151905190612155565b51615b3f565b926150e5565b91908260409103126100ed57602061327c83612214565b92015190565b90926132d3604093946001600160a01b039384918651978896879586947fa0e8f5ac00000000000000000000000000000000000000000000000000000000865260606004870152606486019061306d565b9216602484015260448301520392165afa908115610223575f905f9261335c575b501561333457670de0b5cad2bef000811161330c5790565b7f746e5940000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f53f976d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050613380915060403d604011613387575b61337881836102ff565b810190613265565b905f6132f4565b503d61336e565b5f949193929361339c6115f0565b6133a4612463565b9180516133b081610fbe565b6133b981610fbe565b15613745575b6020918286016133cf8151615b63565b83613424818501986133ee610da4610da48c516001600160a01b031690565b906040519c8d809481937f72c981860000000000000000000000000000000000000000000000000000000083526004830161376d565b03925af1988915610223575f99613726575b508861344181615b63565b835161344c81610fbe565b61345581610fbe565b6136ae57506040820151905261349460c088015161348d61325961347e87860193845190612155565b519260a08c0151905190612155565b908a61579e565b9360808301519685979860a085015180881061367e57505b60408501948a86516134c4906001600160a01b031690565b906134ce91614cd6565b606001958987516134e5906001600160a01b031690565b906134ef916116bb565b835183516001600160a01b031687516001600160a01b031687519161351493866157cd565b9190818601956040019283528552855160608401928d8285519061353791612155565b5190613542916125e2565b905161354d91610ba7565b61355791856151c8565b85019182518b8184519061356a91612155565b519061357591610ba7565b61357f91836151c8565b83516001600160a01b03165f90815260056020526040902091805187516135a591612155565b519160800191825188516135b891612155565b516135c291615c40565b87516135d69085905f5260205260405f2090565b555183516135e391612155565b51905183516135f191612155565b516135fb91615c40565b915161360e91905f5260205260405f2090565b5551925193516060928301519151604080518b8152602081018b905290810193909352928201929092526001600160a01b039182169382169291909116907f0874b2d545cb271cdbda4e093020c452328b24af12382ed62c4d00f5c26709db90608090a4939291906100fc611645565b7fe2ea151b000000000000000000000000000000000000000000000000000000005f52600488905260245260445ffd5b90508198506136d560606136de930151670de0b6b3a7640000818103908210029083615c0c565b908186526125e2565b9661370b6136f260c0890151835190612155565b5161370360a08a0151845190612155565b51908a615c2c565b93608083015196859860a085015180881161367e57506134ac565b61373e919950843d861161021c5761020e81836102ff565b975f613436565b6020850161376661375c825160608601519061576b565b8086528251610ba7565b90526133bf565b90602061046292818152019061306d565b6101a06104629260208352613797602084018251613063565b60208101516001600160a01b0316604084015260408101516001600160a01b0316606084015260608101516080840152608081015160a084015260a081015160c084015260c081015160e084015260e08101516101009081850152810151610120908185015281015161381861014091828601906001600160a01b03169052565b8101519061383461016092838601906001600160a01b03169052565b015191610180808201520190610498565b939590919492865161385681610fbe565b61385f81610fbe565b613aae5786604085015191845b82519461387886610fbe565b604097889788860151613891906001600160a01b031690565b9660608701516138a7906001600160a01b031690565b9360800192835181516138b991612155565b51935190602001516138ca91612155565b519360208801516138e1906001600160a01b031690565b9760c00151986138ef61034f565b9a6138fa908c612fcb565b6001600160a01b031660208b01526001600160a01b0316898b01526060890152608088015260a087015260c086015260e085015261010084018890526001600160a01b03166101208401526001600160a01b0316610140830152610160820152815196878080937f18b6eb5500000000000000000000000000000000000000000000000000000000825260048201906139929161377e565b03916001600160a01b03165a905f91f1948515610223575f915f96613a8a575b505015613a625760091c60011615613a5c575080516139d081610fbe565b6139d981610fbe565b1580613a4f575b8015613a24575b6139ef575090565b60a001517fcc0e4a99000000000000000000000000000000000000000000000000000000005f5260049190915260245260445ffd5b5060018151613a3281610fbe565b613a3b81610fbe565b1480156139e7575060a081015182116139e7565b5060a081015182106139e0565b91505090565b7f15a29dec000000000000000000000000000000000000000000000000000000005f5260045ffd5b613aa593965080919250903d106133875761337881836102ff565b93905f806139b2565b8660408501519184929461386c565b6001600160a01b0380911690815f52600e6020528060405f2054169216809203613ae5575050565b7f36b18d09000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b907f000000000000000000000000000000000000000000000000000000000000000011613b3d5750565b6001600160a01b03907f18fe7385000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b81810392915f13801582851316918412161761098e57565b9190915f838201938412911290801582169115161761098e57565b939091613bb185610fbe565b84158015613f7357613bff6020613bc787610b99565b604051809381927fef8b30f7000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03816001600160a01b0387165afa801561022357613c24915f91613f54575b50610b99565b94955b613c42836001600160a01b03165f52600b60205260405f2090565b5491613c4c615954565b613f4c57869288929091608083901c91858310613cca5750505092613cc482613ca186613c9c6001600160a01b03966fffffffffffffffffffffffffffffffff896100fc9b60801c0393166125e2565b615c40565b9788613cbe856001600160a01b03165f52600b60205260405f2090565b55614cd6565b166116bb565b90929350613cd9919450610fbe565b15613df457613d01613cfc613cee8584615f06565b613cf78a614d4e565b613b8a565b615d67565b926001600160a01b03811693613d18818689615eb7565b6040517f6e553f650000000000000000000000000000000000000000000000000000000081526004810182905230602482015294602090869060449082905f905af1801561022357613ca18995613dcf87613dc46001600160a01b038f96888f896100fc9f859e613dbe8f613cc49f613dc496613dc9996fffffffffffffffffffffffffffffffff965f91613dd5575b509a8b935b1690613db98282615d9c565b615f9b565b166125e2565b610ba7565b946125e2565b90615c40565b613dee915060203d60201161021c5761020e81836102ff565b5f613da8565b9091613e14613cfc613e068385615ca4565b613e0f89614d4e565b613b72565b6040517fb3d7f6b9000000000000000000000000000000000000000000000000000000008152600481018290526001600160a01b038316936020939290918481602481895afa801561022357613e73915f91613f2f575b50868a615eb7565b6040517f94bf804d00000000000000000000000000000000000000000000000000000000815260048101829052306024820152948490869060449082905f905af1918215610223576100fc96613dcf8b613dc4858f966001600160a01b038f896fffffffffffffffffffffffffffffffff879f9a849f8f96613cc49f97613dc496613ca19f99613dc99a613dbe955f92613f12575b5050988992613dad565b613f289250803d1061021c5761020e81836102ff565b5f80613f08565b613f469150863d881161021c5761020e81836102ff565b5f613e6b565b509093505050565b613f6d915060203d60201161021c5761020e81836102ff565b5f613c1e565b613fb96020613f81876125d4565b604051809381927fb3d7f6b9000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03816001600160a01b0387165afa801561022357613fde915f91613fe4575b506125d4565b95613c27565b613ffd915060203d60201161021c5761020e81836102ff565b5f613fd8565b939061400e85610fbe565b84159485156142fd5761405d602061402587610b99565b604051809381927f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03816001600160a01b0389165afa801561022357614081915f91613f545750610b99565b94955b61409f856001600160a01b03165f52600b60205260405f2090565b54916140a9615954565b613f4c5787938793909290916fffffffffffffffffffffffffffffffff918284169186831061412957505050936001600160a01b036140ff83866100fc986140f7866141249860801c6125e2565b921603615c40565b978861411c826001600160a01b03165f52600b60205260405f2090565b555b16614cd6565b6116bb565b9196509294506141399150610fbe565b156142375761414e613cfc613cee8785615ca4565b6040517fba087652000000000000000000000000000000000000000000000000000000008152600481018290523060248201819052604482015293906020856064815f6001600160a01b038c165af18015610223576141f58995613dcf84613dc48e6141ec8b8f6001600160a01b036100fc9f9c6141e78f9d6141249f94889f859f613dc4975f91614218575b509586925b1690615fe0565b6125e2565b9460801c6125e2565b9788614212826001600160a01b03165f52600b60205260405f2090565b5561411e565b614231915060203d60201161021c5761020e81836102ff565b5f6141db565b614247613cfc613e068785615f06565b6040517fb460af940000000000000000000000000000000000000000000000000000000081526004810182905230602482018190526044820152906020826064815f6001600160a01b038c165af1918215610223576141f58995613dcf6001600160a01b03613dc48e6141ec8b8f8a6100fc9f6141e78f936141249f9e889f958b9f96613dc4975f916142de575b509b8c936141e0565b6142f7915060203d60201161021c5761020e81836102ff565b5f6142d5565b614343602061430b876125d4565b604051809381927f0a28a477000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03816001600160a01b0389165afa801561022357614367915f91613fe457506125d4565b95614084565b805c906001820180921161098e575d565b905f5260205260405f20905f52602052600160405f205d565b91908251916143aa8251825190856150a9565b6143b383612124565b935f5b8481106143c557505050505090565b80670de0b6b3a76400006143f76143de60019486612155565b5161321a6143ec858a612155565b516121ed868a612155565b046144028289612155565b52016143b6565b60051115610fc857565b906005821015610fc85752565b95919361445161046298969461446293612297976001600160a01b038092168b521660208a01526040890190614413565b60e0606088015260e0870190610465565b91608086015284820360a0860152610465565b925f6001600160a01b036020959693966144ef61449987516001600160a01b031690565b946080880151976144a989614409565b60a060806060830151930151910151916040519b8c9a8b998a977f45421ec700000000000000000000000000000000000000000000000000000000895260048901614420565b0393165af1908115610223575f91614532575b501561450a57565b7f0b2eb652000000000000000000000000000000000000000000000000000000005f5260045ffd5b61454b915060203d6020116123885761237a81836102ff565b5f614502565b916080838303126100ed5782519067ffffffffffffffff918281116100ed578361457c918601612481565b9360208101519360408201518481116100ed5781612571918401612481565b936145c56125c6936001600160a01b0361046298969416875260a0602088015260a0870190610465565b9160408601528482036060860152610465565b91906145e26115f0565b60606145ec612463565b91602085016145ff815151808652612124565b6080830195865161460f81614409565b61461881614409565b6148895750606083015161462c8651612124565b946146508260808b015161464a61268f89516001600160a01b031690565b9061640b565b995b6060860151808410614859575061466b8399989961578d565b60208901975f5b8c8b51821015614798578161468691612155565b516146908161578d565b61469a8288612155565b51614787576146bf908d6146b88460a06127888260c0860151612155565b5191615c2c565b806146ca8389612155565b525b6146da611170838a51612155565b60408a016146e9848251612155565b51831161473b57508d83611e708e61472d8f968f9761471886612814818b60019e9d6127f1886147359f614cd6565b52614727856060880151612155565b516125e2565b905190610ba7565b01614672565b9161474a846111bd9451612155565b517f8eda85e4000000000000000000000000000000000000000000000000000000005f526001600160a01b03909216600452602452604452606490565b506147928187612155565b516146cc565b50509396945096509650966147b8906128bf85516001600160a01b031690565b7fa26a52d8d53702bba7f137907b8e1f99ff87f6d450144270ca25e72481cca8716147ea84516001600160a01b031690565b9261480b89602087019561480587516001600160a01b031690565b90616452565b61483161268f61482561296588516001600160a01b031690565b94519661117088614409565b926129a76001600160a01b039261484788614409565b888460405195869516981696846125ef565b7f8d261d5d000000000000000000000000000000000000000000000000000000005f52600484905260245260445ffd5b6003875161489681614409565b61489f81614409565b036148c1576148ae88516163d6565b6148b88151612124565b945f9199614652565b97600187516148cf81614409565b6148d881614409565b03614940576148e7885161528d565b614938896148f9846040880151616172565b60808a01519061491361268f88516001600160a01b031690565b61491d8c51615350565b91614932610da48a516001600160a01b031690565b9361618d565b959091614652565b97936002875161494f81614409565b61495881614409565b036149c45797879861496a895161528d565b606085015191614979876152c1565b6149be6149b460408b0192808452898b9f886080820151936149ae610da4612b09612b0261268f88516001600160a01b031690565b946160a7565b9092519099612155565b52614652565b50600486516149d281614409565b6149db81614409565b03614a9c576149ea8751616072565b5f614a02610da4610da486516001600160a01b031690565b60608501519060808a0151918360a088015198614a4f6040519a8b96879586947fe4c43663000000000000000000000000000000000000000000000000000000008652336004870161459b565b03925af1938415610223575f905f955f915f91614a71575b5090959199614652565b92505050614a929194503d805f833e614a8a81836102ff565b810190614551565b919592915f614a67565b7f6c02b395000000000000000000000000000000000000000000000000000000005f5260045ffd5b9692610462989694614b1a93614afe614b0c93612d789995610100938d6001600160a01b0380931690521660208d015260408c0190614413565b8060608b0152890190610465565b908782036080890152610465565b9160a086015284820360c0860152610465565b949391959296908451614b46906001600160a01b031690565b608086015191614b5583614409565b608086015160a0880151906040968c6040519c8d9788977f976907cc0000000000000000000000000000000000000000000000000000000089526004890197614b9d98614ac4565b03916001600160a01b031691815a5f948591f1948515610223575f905f96614cb7575b50158015614cab575b614c83576001809460091c1615614be957909192809495505f905b614bf1575b505050505090565b8551811015614c7e57614c048187612155565b5182850190614c14838351612155565b5110614c235750840184614be4565b8690614c4183612e9b81612e956111706111bd9860208c0151612155565b517fcefa3afa000000000000000000000000000000000000000000000000000000005f526001600160a01b03909216600452602452604452606490565b614be9565b7fe1249165000000000000000000000000000000000000000000000000000000005f5260045ffd5b50845186511415614bc9565b9050614cce9195503d805f833e612f3081836102ff565b94905f614bc0565b614ce26100fc92614d4e565b90614da3565b905f5b8251811015614d19576001600160a01b0380614d078386612155565b511690831614613a5c57600101614ceb565b6001600160a01b03827fddef98d7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111614d785790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8115614e60576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000009116805f5281602052614dea60405f205c9384613b8a565b9283614e2e57507f0000000000000000000000000000000000000000000000000000000000000000805c905f19820191821161098e575d5b5f5260205260405f205d565b614e2257614e5b7f000000000000000000000000000000000000000000000000000000000000000061436d565b614e22565b5050565b6001600160a01b03929183811684841603614e8257505050505f1990565b614eac9361176292165f52601060205260405f20906001600160a01b03165f5260205260405f2090565b5490565b90604051918281549182825260209260208301915f5260205f20935f905b828210614ee4575050506100fc925003836102ff565b85546001600160a01b031684526001958601958895509381019390910190614ece565b90614f1182610370565b614f1e60405191826102ff565b828152601f19614f2e8294610370565b01905f5b828110614f3e57505050565b602090614f49612463565b82828501015201614f32565b90604051614f62816102e3565b604060ff829454818116614f7581610fbe565b84526001600160a01b038160081c16602085015260a81c161515910152565b60608101805151935f5b858110614fad57505050505050565b80614fc16111706001936020880151612155565b614fec614fd68389905f5260205260405f2090565b546fffffffffffffffffffffffffffffffff1690565b614ff7838751612155565b51811161503e575b505061502561500f828651612155565b5161501e836080890151612155565b5190615c40565b6150378288905f5260205260405f2090565b5501614f9e565b6150896150a19161508361507a615066868a906001600160a01b03165f5260205260405f2090565b5492615073888c51612155565b5190610ba7565b8260801c6125e2565b906166e2565b9185906001600160a01b03165f5260205260405f2090565b555f80614fff565b811480159291906150bd575b50506120fc57565b141590505f806150b5565b90670de0b6b3a76400009182810292818404149015171561098e57565b8181029291811591840414171561098e57565b805161510381610fbe565b61510c81610fbe565b8061511f575050670de0b6b3a764000090565b8061512b600192610fbe565b036151a057602061514a610da48260049401516001600160a01b031690565b604051928380927f679aefce0000000000000000000000000000000000000000000000000000000082525afa908115610223575f91615187575090565b610462915060203d60201161021c5761020e81836102ff565b7fdf450632000000000000000000000000000000000000000000000000000000005f5260045ffd5b91906080670de0b6b3a764000061520c612fd494806151eb8660608a0151612155565b5261321a6151fd8660c08a0151612155565b516121ed8760a08b0151612155565b04930151612155565b91906080615250612fd4938061522f856060890151612155565b526121f46152418560c0890151612155565b516121ed8660a08a0151612155565b930151612155565b60061c6001161561526557565b7fcf0a95c0000000000000000000000000000000000000000000000000000000005f5260045ffd5b60041c60011661529957565b7fd4f5779c000000000000000000000000000000000000000000000000000000005f5260045ffd5b80519081905f5b8281106153035750508110156152db5790565b7f7e46bddc000000000000000000000000000000000000000000000000000000005f5260045ffd5b61530d8183612155565b5161531b575b6001016152c8565b9282036153285782615313565b7f6b8c3be5000000000000000000000000000000000000000000000000000000005f5260045ffd5b62ffffff9060121c1664174876e8009081810291818304149015171561098e5790565b9190602061538a5f92604086526040860190610465565b930152565b9190602061538a600192604086526040860190610465565b90949291928151946153b886612124565b945f5b8781106155a157506153d190612a6e8988612155565b6153db8887612155565b52604051947f984de9e80000000000000000000000000000000000000000000000000000000092838752602087806154168860048301615373565b03816001600160a01b0385165afa968715610223575f97615580575b50604051948486526020868061544b8660048301615373565b03816001600160a01b0386165afa93841561022357613dc46154ad8c6150736154a66154c39661549f8f61548f6154f99f9160209e88935f91615561575b50615bb3565b9261549a848d6166fe565b612155565b519061576b565b9188612155565b91670de0b6b3a764000081810391100282615bb3565b936154d285612a6e8c86612155565b6154dc8b85612155565b526001600160a01b0360405180978195829483526004830161538f565b0392165afa908115610223576155359561552f935f93615538575b5061552161552891612124565b9788612155565b5283610ba7565b90615c0c565b91565b6155289193506155596155219160203d60201161021c5761020e81836102ff565b939150615514565b602061557a92503d60201161021c5761020e81836102ff565b5f615489565b61559a91975060203d60201161021c5761020e81836102ff565b955f615432565b806155b76155b160019388612155565b51610b99565b6155c1828a612155565b52016153bb565b6155e060409295949395606083526060830190610465565b9460208201520152565b90949183039183831161098e5760206156506001600160a01b039261560f8787615bb3565b61561981836166fe565b6040519485809481937f16a0b3e00000000000000000000000000000000000000000000000000000000083528d8a600485016155c8565b0392165afa801561022357615535956121f48861569b936156a4986156ab965f926156b1575b5061568982612a6e613dc494958b612155565b986156948d8a612155565b5190615c0c565b93849251612124565b9586612155565b52610ba7565b613dc49250612a6e936156d56156899260203d60201161021c5761020e81836102ff565b93509350615676565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8115615715570490565b6156de565b9092916157278251612124565b915f5b815181101561576457615747836157418385612155565b516150e5565b90861561571557866001920461575d8287612155565b520161572a565b5050509150565b90615775916150e5565b6001670de0b6b3a76400005f19830104019015150290565b806157955750565b6100fc90615b63565b916157a8916150e5565b90670de0b6b3a76400009081810291818304149015171561098e578115615715570490565b91949290945f955f95816157e2575050505050565b8497506127916157fb8260c06158079697980151612155565b519160a08a0151612155565b945160018160031c161561581d575b8080611711565b62ffffff91929450602a1c1664174876e8009081810291818304149015171561098e57615853670de0b6b3a764000091866150e5565b04928484116158c957806117626158a86158856158c094611762876001600160a01b03165f52600660205260405f2090565b546158a2886fffffffffffffffffffffffffffffffff83166125e2565b906167b5565b936001600160a01b03165f52600660205260405f2090565b555f8080615816565b7f4c69ac5d000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160a01b0390929192165f52602060056020526040805f205f5b6060860151805182101561594b579061593b61592c82600194612155565b5161501e8360808b0151612155565b815f52838652845f20550161590e565b50505050509050565b32158061595e5790565b506001600754161590565b90326159ac576001600160a01b0361599d92165f52600f60205260405f20906001600160a01b03165f5260205260405f2090565b805491820180921161098e5755565b7f67f84ab2000000000000000000000000000000000000000000000000000000005f5260045ffd5b90916001600160a01b03808416928315611a8e57615a0785611762836001600160a01b03165f52600f60205260405f2090565b54808411615b0257839003615a3186611762846001600160a01b03165f52600f60205260405f2090565b55615a5783615a51836001600160a01b03165f52601160205260405f2090565b54610ba7565b615a60816167c3565b615a7b826001600160a01b03165f52601160205260405f2090565b551690813b156100ed576040517f23de66510000000000000000000000000000000000000000000000000000000081526001600160a01b0390941660048501525f6024850181905260448501829052937fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f91615afd91868180606481016117f6565b0390a4565b7fe450d38c000000000000000000000000000000000000000000000000000000005f526001600160a01b038616600452602452604483905260645ffd5b670de0b6b3a7640000808204028103615b555790565b6001810180911161098e5790565b7f000000000000000000000000000000000000000000000000000000000000000011615b8b57565b7f1ed4d118000000000000000000000000000000000000000000000000000000005f5260045ffd5b908015615be457670de0b6b3a76400009182810292818404149015171561098e576001905f19830104019015150290565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b8215615be457600191615c1e916150e5565b915f19830104019015150290565b9061046292615c3a916150e5565b90615bb3565b906fffffffffffffffffffffffffffffffff808311908115615c9a575b50615c725760801b90810180911161098e5790565b7f89560ca1000000000000000000000000000000000000000000000000000000005f5260045ffd5b905081115f615c5d565b90615cb18260801c614d4e565b906fffffffffffffffffffffffffffffffff5f931680615cde575b5050600291615cda91613b72565b0590565b6001600160a01b03935090602460209260405195869384927f0a28a4770000000000000000000000000000000000000000000000000000000084526004840152165afa90811561022357615d3f615cda926002945f91615d48575b50614d4e565b92819250615ccc565b615d61915060203d60201161021c5761020e81836102ff565b5f615d39565b5f8112615d715790565b7fa8ce4432000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6040517f095ea7b300000000000000000000000000000000000000000000000000000000602082018181526001600160a01b03851660248401525f6044840152909391929183606481015b0391615dfb601f19938481018752866102ff565b5f806001600160a01b0386169287519082855af190615e18616025565b82615e85575b5081615e7a575b5015615e32575050505050565b60405160208101959095526001600160a01b031660248501525f604485015260649081018452615e709361096491615e6a90826102ff565b826165a0565b5f80808080611711565b90503b15155f615e25565b80519192508115918215615e9d575b5050905f615e1e565b615eb09250602080918301019101612221565b5f80615e94565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000602082018181526001600160a01b038516602484015260448301959095529390928360648101615de7565b90615f226fffffffffffffffffffffffffffffffff8316614d4e565b905f9260801c80615f3b575050600291615cda91613b72565b6001600160a01b03935090602460209260405195869384927fb3d7f6b90000000000000000000000000000000000000000000000000000000084526004840152165afa90811561022357615d3f615cda926002945f91615d485750614d4e565b9291906001600160a01b038085165f52600860205260405f205492830392831161098e5781165f52600860205260405f205492830180931161098e576100fc936167fb565b9291906001600160a01b038085165f52600860205260405f205492830180931161098e5781165f52600860205260405f205492830392831161098e576100fc936167fb565b3d1561604f573d90616036826103f5565b9161604460405193846102ff565b82523d5f602084013e565b606090565b5f806104629360208151910182855af161606c616025565b91616982565b60051c6001161561607f57565b7f4876c0bc000000000000000000000000000000000000000000000000000000005f5260045ffd5b90949160206160d66160c1866001600160a01b03946125e2565b946160cc8787615bb3565b6156198183616a0e565b0392165afa80156102235761553595613dc46154ad8561569b946156a4998c998a616135995f9461613b575b509061612961612261611b616130946128349798612155565b5187610ba7565b9c8c612155565b51906150e5565b61570b565b526125e2565b612834945061612261611b61613094936161666161299460203d60201161021c5761020e81836102ff565b97509394505050616102565b9060208083516161838451826120f5565b60051b930191015e565b92919093835161619c81612124565b916161a682612124565b965f5b83811061639b5750506001600160a01b03811691604051957f984de9e800000000000000000000000000000000000000000000000000000000928388526020988989806161f98460048301615373565b0381895afa988915610223575f9961637c575b506040518581528a81806162238b6004830161538f565b03818a5afa908115610223578a61613061625e93616257938f5f9261635f575b9b999d9c9a989796959493929190506150c8565b8093616a0e565b5f5b8981106162cd5750505050616284955060405180968194829383526004830161538f565b03915afa9182156102235783616130936162aa92615535975f926162b0575b5050610ba7565b906150e5565b6162c69250803d1061021c5761020e81836102ff565b5f806162a3565b869899959750838d8394959698836162f16162ea82600198612155565b51896167a2565b806162fc8385612155565b5111616318575b505050505001908a9694989795939291616260565b818361633961634a97616343946163328561507399612155565b510361576b565b611dd08388612155565b5192612155565b616354828b612155565b52848d8a835f616303565b6163759250803d1061021c5761020e81836102ff565b5f8f616243565b6163949199508a3d8c1161021c5761020e81836102ff565b975f61620c565b806163c56163c06163ae6001948c612155565b516163b98487612155565b51906125e2565b610b99565b6163cf8288612155565b52016161a9565b60071c600116156163e357565b7fefe0265d000000000000000000000000000000000000000000000000000000005f5260045ffd5b92916164178451612124565b935f5b815181101561644c578061643b858561643560019587612155565b51615c0c565b6164458289612155565b520161641a565b50505050565b916001600160a01b0380831693841561656b5761648a83616484836001600160a01b03165f52601160205260405f2090565b546125e2565b6164a985611762846001600160a01b03165f52600f60205260405f2090565b8481540190556164b8816167c3565b6164d3826001600160a01b03165f52601160205260405f2090565b5516925f847fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f6040518061650c87829190602083019252565b0390a4823b156100ed576040517f23de66510000000000000000000000000000000000000000000000000000000081525f600482018190526001600160a01b0390931660248201526044810191909152918290818381606481016119fe565b7fec442f05000000000000000000000000000000000000000000000000000000005f526001600160a01b03841660045260245ffd5b6001600160a01b036165b491169182616054565b80519081151591826165f5575b50506165ca5750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6166089250602080918301019101612221565b155f806165c1565b9064ffffffffff61662082612124565b92605a1c165f5b8281106166345750505090565b600580820290828204148215171561098e5782601f911c1690604d821161098e57600191600a0a6166658287612155565b5201616627565b62ffffff9060421c1664174876e8009081810291818304149015171561098e5790565b9093925f946166a2846080850151612155565b518181116166b1575050505050565b6166d7959650916166c691612791930361576b565b9260a06127888260c0860151612155565b905f80808080611711565b906fffffffffffffffffffffffffffffffff6104629216615c40565b9060206001600160a01b03926004604051809581937fb677fa56000000000000000000000000000000000000000000000000000000008352165afa918215610223575f92616781575b50818110616753575050565b7fe31c95be000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b61679b91925060203d60201161021c5761020e81836102ff565b905f616747565b670de0b6b3a76400009161321f916150e5565b906104629160801c90615c40565b620f424081106167d05750565b7fd38d20fc000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000808252306004830152602095939490926001600160a01b03929187836024818786165afa928315610223575f93616963575b5080831061691e5750616875906001600160a01b03165f52600860205260405f2090565b556040519182523060048301528316908481602481855afa948515610223575f956168ff575b50508184106168c45750506168c1906001600160a01b03165f52600860205260405f2090565b55565b7f1149424d000000000000000000000000000000000000000000000000000000005f526001600160a01b03166004526024525060445260645ffd5b616916929550803d1061021c5761020e81836102ff565b925f8061689b565b90506111bd92867f1c6a5375000000000000000000000000000000000000000000000000000000005f52169291906001600160a01b0360649416600452602452604452565b61697b919350883d8a1161021c5761020e81836102ff565b915f616851565b906169bf575080511561699757805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580616a05575b6169d0575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b156169c8565b9060206001600160a01b03926004604051809581937f273c1adf000000000000000000000000000000000000000000000000000000008352165afa918215610223575f92616a91575b50818111616a63575050565b7f3e8960dc000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b616aab91925060203d60201161021c5761020e81836102ff565b905f616a57565b91909163ffffffff8080941691160191821161098e5756fea2646970667358221220bdbdd4322d6f59d90560043e08c2efef84699d8d2c325f29bf8ef64a016d5bc464736f6c634300081b0033","opcodes":"PUSH2 0x1E0 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x36B JUMPI PUSH1 0x60 DUP2 PUSH2 0x7103 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x22 DUP3 DUP6 PUSH2 0x4D1 JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x36B JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND DUP1 DUP4 SUB PUSH2 0x36B JUMPI PUSH1 0x20 DUP1 DUP6 ADD MLOAD SWAP5 DUP4 DUP7 AND DUP7 SUB PUSH2 0x36B JUMPI DUP7 ADD MLOAD DUP4 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x36B JUMPI PUSH2 0x86 DUP8 MLOAD PUSH2 0x6B DUP2 PUSH2 0x4A2 JUMP JUMPDEST PUSH1 0xA DUP2 MSTORE PUSH10 0x1A5CD55B9B1BD8DAD959 PUSH1 0xB2 SHL DUP5 DUP3 ADD MSTORE PUSH2 0x52F JUMP JUMPDEST PUSH1 0xC0 MSTORE PUSH2 0xB9 DUP8 MLOAD PUSH2 0x97 DUP2 PUSH2 0x4A2 JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH17 0x1B9BDB96995C9BD1195B1D1850DBDD5B9D PUSH1 0x7A SHL DUP5 DUP3 ADD MSTORE PUSH2 0x52F JUMP JUMPDEST PUSH1 0xE0 MSTORE PUSH2 0xE6 DUP8 MLOAD PUSH2 0xCA DUP2 PUSH2 0x4A2 JUMP JUMPDEST PUSH1 0xB DUP2 MSTORE PUSH11 0x746F6B656E44656C746173 PUSH1 0xA8 SHL DUP5 DUP3 ADD MSTORE PUSH2 0x52F JUMP JUMPDEST SWAP7 PUSH2 0x100 SWAP8 DUP9 MSTORE PUSH2 0x11E DUP2 MLOAD PUSH2 0xFB DUP2 PUSH2 0x4A2 JUMP JUMPDEST PUSH1 0x12 DUP2 MSTORE PUSH18 0x185919131A5C5D5A591A5D1E50D85B1B1959 PUSH1 0x72 SHL DUP6 DUP3 ADD MSTORE PUSH2 0x52F JUMP JUMPDEST SWAP7 PUSH2 0x120 SWAP8 DUP9 MSTORE PUSH2 0x14D DUP3 MLOAD PUSH2 0x133 DUP2 PUSH2 0x4A2 JUMP JUMPDEST PUSH1 0x9 DUP2 MSTORE PUSH9 0x1CD95CDCDA5BDB9259 PUSH1 0xBA SHL DUP7 DUP3 ADD MSTORE PUSH2 0x52F JUMP JUMPDEST SWAP3 PUSH2 0x140 SWAP4 DUP5 MSTORE DUP3 MLOAD SWAP7 PUSH4 0xFBFA77CF PUSH1 0xE0 SHL SWAP1 DUP2 DUP10 MSTORE PUSH1 0x4 SWAP9 DUP8 DUP2 DUP12 DUP2 DUP13 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x3AF JUMPI PUSH0 SWAP2 PUSH2 0x485 JUMPI JUMPDEST POP DUP2 ADDRESS SWAP2 AND SUB PUSH2 0x477 JUMPI DUP5 MLOAD SWAP2 DUP3 MSTORE DUP7 DUP3 DUP11 DUP2 DUP7 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x3E8 JUMPI PUSH0 SWAP3 PUSH2 0x448 JUMPI JUMPDEST POP ADDRESS SWAP2 AND SUB PUSH2 0x43A JUMPI PUSH2 0x1C0 SWAP8 DUP9 MSTORE PUSH1 0xA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP2 MLOAD PUSH4 0x4546891D PUSH1 0xE1 SHL DUP2 MSTORE SWAP4 DUP1 DUP6 DUP9 DUP2 DUP10 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x430 JUMPI PUSH0 SWAP6 PUSH2 0x411 JUMPI JUMPDEST POP PUSH2 0x160 SWAP5 DUP6 MSTORE DUP3 MLOAD PUSH4 0x1060FDBD PUSH1 0xE1 SHL DUP2 MSTORE SWAP7 DUP2 DUP9 DUP3 DUP2 DUP11 GAS STATICCALL SWAP8 DUP9 ISZERO PUSH2 0x376 JUMPI PUSH0 SWAP9 PUSH2 0x3F2 JUMPI JUMPDEST POP PUSH2 0x1A0 SWAP8 DUP9 MSTORE DUP4 MLOAD PUSH4 0xCD51C12F PUSH1 0xE0 SHL DUP2 MSTORE SWAP7 DUP3 DUP9 DUP4 DUP2 DUP5 GAS STATICCALL SWAP8 DUP9 ISZERO PUSH2 0x3E8 JUMPI PUSH0 SWAP9 PUSH2 0x3B9 JUMPI JUMPDEST POP PUSH2 0x180 SWAP8 DUP9 MSTORE DUP5 MLOAD PUSH4 0x716585D PUSH1 0xE5 SHL DUP2 MSTORE DUP4 DUP2 DUP5 DUP2 DUP6 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x3AF JUMPI SWAP1 DUP5 SWAP3 SWAP2 PUSH0 SWAP2 PUSH2 0x380 JUMPI JUMPDEST POP PUSH1 0x80 MSTORE DUP6 MLOAD PUSH4 0x29CAB551 PUSH1 0xE1 SHL DUP2 MSTORE SWAP3 DUP4 SWAP2 DUP3 SWAP1 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x376 JUMPI PUSH0 SWAP3 PUSH2 0x344 JUMPI JUMPDEST POP POP PUSH1 0xA0 MSTORE PUSH1 0x9 DUP1 SLOAD PUSH2 0x100 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT AND PUSH1 0x8 SWAP3 SWAP1 SWAP3 SHL PUSH2 0x100 PUSH1 0x1 PUSH1 0xA8 SHL SUB AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE MLOAD PUSH2 0x6B00 SWAP8 SWAP1 SWAP7 SWAP1 DUP9 PUSH2 0x603 DUP10 CODECOPY PUSH1 0x80 MLOAD DUP9 PUSH2 0x5B65 ADD MSTORE PUSH1 0xA0 MLOAD DUP9 PUSH2 0x3B16 ADD MSTORE PUSH1 0xC0 MLOAD DUP9 DUP2 DUP2 PUSH2 0x1318 ADD MSTORE PUSH2 0x166C ADD MSTORE PUSH1 0xE0 MLOAD DUP9 DUP2 DUP2 PUSH2 0x1359 ADD MSTORE DUP2 DUP2 PUSH2 0x4DF3 ADD MSTORE PUSH2 0x4E37 ADD MSTORE MLOAD DUP8 PUSH2 0x4DB3 ADD MSTORE MLOAD DUP7 DUP2 DUP2 PUSH2 0x1443 ADD MSTORE PUSH2 0x26E7 ADD MSTORE MLOAD DUP6 DUP2 DUP2 PUSH2 0x1385 ADD MSTORE DUP2 DUP2 PUSH2 0x140F ADD MSTORE PUSH2 0x26B3 ADD MSTORE MLOAD DUP5 POP POP MLOAD DUP4 PUSH2 0x1B18 ADD MSTORE MLOAD DUP3 PUSH2 0x1BC7 ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0x9BC ADD MSTORE PUSH2 0x15BD ADD MSTORE RETURN JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x36F JUMPI JUMPDEST PUSH2 0x35B DUP2 DUP4 PUSH2 0x4D1 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x36B JUMPI MLOAD PUSH0 DUP1 PUSH2 0x287 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x351 JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 DUP2 SWAP5 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x3A8 JUMPI JUMPDEST PUSH2 0x397 DUP2 DUP4 PUSH2 0x4D1 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x36B JUMPI DUP4 SWAP2 MLOAD PUSH0 PUSH2 0x262 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x38D JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x3DA SWAP2 SWAP9 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x3E1 JUMPI JUMPDEST PUSH2 0x3D2 DUP2 DUP4 PUSH2 0x4D1 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x513 JUMP JUMPDEST SWAP7 PUSH0 PUSH2 0x236 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3C8 JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x40A SWAP2 SWAP9 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x3E1 JUMPI PUSH2 0x3D2 DUP2 DUP4 PUSH2 0x4D1 JUMP JUMPDEST SWAP7 PUSH0 PUSH2 0x20D JUMP JUMPDEST DUP2 PUSH2 0x429 SWAP3 SWAP7 POP RETURNDATASIZE DUP8 GT PUSH2 0x3E1 JUMPI PUSH2 0x3D2 DUP2 DUP4 PUSH2 0x4D1 JUMP JUMPDEST SWAP4 PUSH0 PUSH2 0x1E4 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP7 PUSH4 0x1BBE95C7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x469 SWAP2 SWAP3 POP DUP8 RETURNDATASIZE DUP10 GT PUSH2 0x470 JUMPI JUMPDEST PUSH2 0x461 DUP2 DUP4 PUSH2 0x4D1 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x4F4 JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x19F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x457 JUMP JUMPDEST DUP9 PUSH4 0x1AB9D9D PUSH1 0xE4 SHL PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x49C SWAP2 POP DUP9 RETURNDATASIZE DUP11 GT PUSH2 0x470 JUMPI PUSH2 0x461 DUP2 DUP4 PUSH2 0x4D1 JUMP JUMPDEST PUSH0 PUSH2 0x17B JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0x4BD JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x4BD JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x36B JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x36B JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x36B JUMPI MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x36B JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x53C DUP3 PUSH2 0x4A2 JUMP JUMPDEST PUSH1 0xC DUP3 MSTORE PUSH2 0x5BD PUSH1 0x3A PUSH1 0x20 DUP5 ADD PUSH12 0x5661756C7453746F72616765 PUSH1 0xA0 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP3 DUP3 DUP5 ADD SWAP8 PUSH32 0x62616C616E6365722D6C6162732E76332E73746F726167652E00000000000000 DUP10 MSTORE MLOAD DUP1 SWAP2 PUSH1 0x39 DUP7 ADD MCOPY DUP4 ADD SWAP1 PUSH1 0x17 PUSH1 0xF9 SHL PUSH1 0x39 DUP4 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 SWAP2 ADD DUP6 DUP4 ADD MCOPY ADD PUSH0 DUP4 DUP3 ADD MSTORE SUB PUSH1 0x1A DUP2 ADD DUP5 MSTORE ADD DUP3 PUSH2 0x4D1 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x5EE JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP3 MSTORE PUSH2 0x5E3 DUP3 PUSH2 0x4A2 JUMP JUMPDEST SWAP1 MLOAD SWAP1 KECCAK256 PUSH1 0xFF NOT AND SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x18 JUMPI JUMPDEST CALLDATASIZE PUSH2 0x15A6 JUMPI PUSH2 0x157E JUMP JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x15AFD409 EQ PUSH2 0xD7 JUMPI DUP1 PUSH4 0x15DACBEA EQ PUSH2 0xD2 JUMPI DUP1 PUSH4 0x21457897 EQ PUSH2 0xCD JUMPI DUP1 PUSH4 0x2BFB780C EQ PUSH2 0xC8 JUMPI DUP1 PUSH4 0x43583BE5 EQ PUSH2 0xC3 JUMPI DUP1 PUSH4 0x48C89491 EQ PUSH2 0xBE JUMPI DUP1 PUSH4 0x4AF29EC4 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0xAE639329 EQ PUSH2 0xB4 JUMPI DUP1 PUSH4 0xB9A8EFFA EQ PUSH2 0xAF JUMPI DUP1 PUSH4 0xBEABACC8 EQ PUSH2 0xAA JUMPI DUP1 PUSH4 0xC9C1661B EQ PUSH2 0xA5 JUMPI PUSH4 0xD2C725E0 SUB PUSH2 0xE JUMPI PUSH2 0xB14 JUMP JUMPDEST PUSH2 0xA16 JUMP JUMPDEST PUSH2 0x9E0 JUMP JUMPDEST PUSH2 0x99D JUMP JUMPDEST PUSH2 0x89A JUMP JUMPDEST PUSH2 0x7CA JUMP JUMPDEST PUSH2 0x731 JUMP JUMPDEST PUSH2 0x6A5 JUMP JUMPDEST PUSH2 0x5CD JUMP JUMPDEST PUSH2 0x4E8 JUMP JUMPDEST PUSH2 0x228 JUMP JUMPDEST PUSH2 0xFE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SUB PUSH2 0xED JUMPI JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLDATALOAD SWAP1 PUSH2 0xFC DUP3 PUSH2 0xDC JUMP JUMPDEST JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x11B DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x126 PUSH2 0x15F0 JUMP JUMPDEST PUSH2 0x12E PUSH2 0x166A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD SWAP2 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP5 SWAP3 DUP3 SWAP1 PUSH1 0x24 SWAP1 DUP3 SWAP1 GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x223 JUMPI PUSH2 0x1E6 SWAP5 PUSH2 0x1BA SWAP3 PUSH0 SWAP2 PUSH2 0x1F4 JUMPI JUMPDEST POP DUP1 PUSH2 0x1B4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0xBA7 JUMP JUMPDEST SWAP2 DUP1 DUP4 GT PUSH2 0x1EA JUMPI JUMPDEST POP DUP2 PUSH2 0x1CE SWAP2 PUSH2 0x16BB JUMP JUMPDEST PUSH2 0x1D6 PUSH2 0x1645 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST SWAP2 POP PUSH2 0x1CE PUSH2 0x1C3 JUMP JUMPDEST PUSH2 0x216 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI JUMPDEST PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xB52 JUMP JUMPDEST PUSH0 PUSH2 0x197 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x204 JUMP JUMPDEST PUSH2 0xB61 JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH2 0x276 PUSH1 0x4 CALLDATALOAD PUSH2 0x248 DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x254 DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH2 0x261 DUP3 PUSH2 0xDC JUMP JUMPDEST PUSH2 0x270 PUSH1 0x64 CALLDATALOAD DUP1 SWAP5 DUP4 CALLER PUSH2 0x16F9 JUMP JUMPDEST CALLER PUSH2 0x18DD JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2C2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH2 0x281 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2C2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2C2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2C2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0xC0 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2C2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0xFC DUP3 PUSH2 0x2C7 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x180 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2C2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2C2 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0xED JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x3A2 DUP2 PUSH2 0x370 JUMP JUMPDEST SWAP4 PUSH2 0x3B0 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x2FF JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xED JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x3D9 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x3CB JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH1 0x4 DUP3 LT ISZERO PUSH2 0xED JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2C2 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH2 0x41D DUP3 PUSH2 0x3F5 JUMP JUMPDEST SWAP2 PUSH2 0x42B PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x2FF JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0xED JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0xED JUMPI DUP2 PUSH1 0x20 PUSH2 0x462 SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0x411 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x484 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x476 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x4DA SWAP1 PUSH2 0x462 SWAP5 SWAP3 DUP5 MSTORE PUSH1 0x60 PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD SWAP1 PUSH2 0x465 JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x498 JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x3 NOT PUSH1 0x20 DUP2 CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP3 GT PUSH2 0xED JUMPI PUSH1 0xC0 SWAP1 DUP3 CALLDATASIZE SUB ADD SLT PUSH2 0xED JUMPI PUSH2 0x522 PUSH2 0x322 JUMP JUMPDEST PUSH2 0x52E DUP3 PUSH1 0x4 ADD PUSH2 0xF1 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x53C PUSH1 0x24 DUP4 ADD PUSH2 0xF1 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x44 DUP3 ADD CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x64 DUP3 ADD CALLDATALOAD DUP4 DUP2 GT PUSH2 0xED JUMPI PUSH2 0x567 SWAP1 PUSH1 0x4 CALLDATASIZE SWAP2 DUP6 ADD ADD PUSH2 0x388 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x578 PUSH1 0x84 DUP4 ADD PUSH2 0x3E8 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA4 DUP3 ADD CALLDATALOAD SWAP3 DUP4 GT PUSH2 0xED JUMPI PUSH2 0x59F PUSH2 0x5A9 SWAP3 PUSH1 0x4 PUSH2 0x1E6 SWAP6 CALLDATASIZE SWAP3 ADD ADD PUSH2 0x447 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0xBB4 JUMP JUMPDEST PUSH1 0x40 SWAP4 SWAP2 SWAP4 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x4BD JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0xED JUMPI JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH2 0xFC DUP3 PUSH2 0x5B8 JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x3 NOT PUSH1 0x20 DUP2 CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP3 GT PUSH2 0xED JUMPI PUSH1 0xE0 SWAP1 DUP3 CALLDATASIZE SUB ADD SLT PUSH2 0xED JUMPI PUSH2 0x607 PUSH2 0x342 JUMP JUMPDEST PUSH2 0x613 DUP3 PUSH1 0x4 ADD PUSH2 0x5C2 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x621 PUSH1 0x24 DUP4 ADD PUSH2 0xF1 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x632 PUSH1 0x44 DUP4 ADD PUSH2 0xF1 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x643 PUSH1 0x64 DUP4 ADD PUSH2 0xF1 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x84 DUP3 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA4 DUP3 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC4 DUP3 ADD CALLDATALOAD SWAP3 DUP4 GT PUSH2 0xED JUMPI PUSH2 0x67E PUSH2 0x688 SWAP3 PUSH1 0x4 PUSH2 0x1E6 SWAP6 CALLDATASIZE SWAP3 ADD ADD PUSH2 0x447 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0xD3E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x60 DUP3 ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2C2 JUMPI PUSH2 0x1E6 SWAP2 PUSH2 0x688 SWAP2 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATALOAD PUSH2 0x6E7 DUP2 PUSH2 0x5B8 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x24 CALLDATALOAD PUSH2 0x6F5 DUP2 PUSH2 0x5B8 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH2 0x706 DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x84 CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0xFCD JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0x462 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x498 JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0xED JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0xED JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP2 DUP3 GT PUSH2 0xED JUMPI CALLDATASIZE PUSH1 0x24 DUP4 DUP4 ADD ADD GT PUSH2 0xED JUMPI PUSH2 0x1E6 SWAP2 PUSH1 0x24 PUSH2 0x788 SWAP3 ADD PUSH2 0x130D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x720 JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0xED JUMPI JUMP JUMPDEST PUSH2 0x7B7 PUSH2 0x462 SWAP5 SWAP3 PUSH1 0x60 DUP4 MSTORE PUSH1 0x60 DUP4 ADD SWAP1 PUSH2 0x465 JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x498 JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x3 NOT PUSH1 0x20 DUP2 CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP3 GT PUSH2 0xED JUMPI PUSH1 0xC0 SWAP1 DUP3 CALLDATASIZE SUB ADD SLT PUSH2 0xED JUMPI PUSH2 0x804 PUSH2 0x322 JUMP JUMPDEST PUSH2 0x810 DUP3 PUSH1 0x4 ADD PUSH2 0xF1 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x81E PUSH1 0x24 DUP4 ADD PUSH2 0xF1 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x44 DUP3 ADD CALLDATALOAD DUP4 DUP2 GT PUSH2 0xED JUMPI PUSH2 0x83F SWAP1 PUSH1 0x4 CALLDATASIZE SWAP2 DUP6 ADD ADD PUSH2 0x388 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x64 DUP3 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x85A PUSH1 0x84 DUP4 ADD PUSH2 0x794 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA4 DUP3 ADD CALLDATALOAD SWAP3 DUP4 GT PUSH2 0xED JUMPI PUSH2 0x881 PUSH2 0x88B SWAP3 PUSH1 0x4 PUSH2 0x1E6 SWAP6 CALLDATASIZE SWAP3 ADD ADD PUSH2 0x447 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x13DA JUMP JUMPDEST PUSH1 0x40 SWAP4 SWAP2 SWAP4 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x7A1 JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x8B7 DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x8C4 DUP3 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH2 0x8D0 PUSH2 0x15F0 JUMP JUMPDEST PUSH2 0x8D8 PUSH2 0x166A JUMP JUMPDEST PUSH2 0x8EA PUSH2 0x8E4 DUP4 PUSH2 0x4D4E JUMP JUMPDEST DUP3 PUSH2 0x4DA3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP4 DUP4 DUP6 SUB SWAP5 DUP6 GT PUSH2 0x98E JUMPI SWAP4 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP1 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 MSTORE PUSH2 0x969 SWAP2 SWAP1 PUSH2 0x964 PUSH1 0x64 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH2 0x65A0 JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH2 0xB6C JUMP JUMPDEST PUSH0 SWAP2 SUB SLT PUSH2 0xED JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH2 0x276 PUSH1 0x4 CALLDATALOAD PUSH2 0xA00 DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0xA0C DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 CALLER PUSH2 0x18DD JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0xA33 DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xA40 DUP3 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP2 DUP3 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 SWAP3 PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0xAE9 JUMPI PUSH0 SWAP4 SWAP3 SWAP4 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH1 0x20 DUP7 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP6 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP3 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xABC JUMPI DUP7 PUSH2 0xAA9 DUP8 PUSH2 0xAA3 DUP4 DUP13 SUB DUP5 PUSH2 0x2FF JUMP JUMPDEST DUP3 PUSH2 0x4CE8 JUMP JUMPDEST SWAP1 MLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE RETURN JUMPDEST SWAP1 SWAP2 SWAP3 DUP1 PUSH2 0xADD DUP7 SWAP10 DUP5 DUP4 SWAP9 SLOAD AND SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 SWAP3 AND DUP2 MSTORE ADD SWAP1 JUMP JUMPDEST SWAP9 ADD SWAP5 SWAP4 SWAP3 ADD SWAP1 PUSH2 0xA8B JUMP JUMPDEST PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x20 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xED JUMPI MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH0 NOT DUP3 ADD SWAP2 DUP3 GT PUSH2 0x98E JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x98E JUMPI JUMP JUMPDEST SWAP1 PUSH2 0xBBD PUSH2 0x166A JUMP JUMPDEST PUSH2 0xBD0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 MLOAD AND PUSH2 0x1AC3 JUMP JUMPDEST PUSH2 0xBE9 PUSH2 0xBE4 DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x1B10 JUMP JUMPDEST PUSH2 0xC02 PUSH2 0xBFD DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x1C38 JUMP JUMPDEST SWAP1 PUSH2 0xC56 PUSH1 0x20 DUP4 ADD MLOAD MLOAD PUSH2 0xC1D PUSH1 0x60 DUP7 ADD SWAP2 DUP3 MLOAD MLOAD SWAP1 PUSH2 0x20F5 JUMP JUMPDEST DUP1 MLOAD PUSH1 0xC0 DUP6 ADD SWAP1 PUSH2 0xC37 DUP3 MLOAD SWAP2 PUSH1 0xA0 DUP9 ADD SWAP3 DUP4 MLOAD SWAP2 PUSH2 0x2196 JUMP JUMPDEST SWAP3 PUSH2 0xC47 DUP8 MLOAD PUSH1 0x1 SWAP1 PUSH1 0x10 SHR AND SWAP1 JUMP JUMPDEST PUSH2 0xCCF JUMPI JUMPDEST POP POP POP DUP5 DUP5 PUSH2 0x261A JUMP JUMPDEST SWAP5 SWAP1 SWAP2 SWAP6 DUP7 PUSH2 0xC6A DUP4 MLOAD PUSH1 0x1 SWAP1 PUSH1 0x11 SHR AND SWAP1 JUMP JUMPDEST PUSH2 0xC78 JUMPI JUMPDEST POP POP POP POP SWAP3 SWAP2 SWAP1 JUMP JUMPDEST DUP5 SWAP8 POP SWAP4 PUSH2 0xCC5 SWAP5 PUSH2 0xCBB PUSH2 0xCAE PUSH2 0xC97 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 DUP5 MLOAD CALLER SWAP1 PUSH2 0x2D86 JUMP JUMPDEST SWAP3 PUSH0 DUP1 DUP1 DUP1 PUSH2 0xC6F JUMP JUMPDEST PUSH2 0xCF7 PUSH2 0xD36 SWAP5 DUP9 DUP11 PUSH2 0xCEF PUSH2 0xCAE PUSH2 0xC97 DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 CALLER SWAP1 PUSH2 0x22A5 JUMP JUMPDEST PUSH2 0xD2B PUSH2 0xD25 PUSH2 0xD0E DUP11 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP9 PUSH2 0x238F JUMP JUMPDEST MLOAD SWAP2 MLOAD SWAP1 MLOAD SWAP2 PUSH2 0x2196 JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0xC4C JUMP JUMPDEST SWAP1 PUSH2 0xD47 PUSH2 0x166A JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xD60 DUP2 DUP5 MLOAD AND PUSH2 0x1AC3 JUMP JUMPDEST PUSH2 0xD74 PUSH2 0xBE4 DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD ISZERO PUSH2 0xF69 JUMPI PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0xDB0 PUSH2 0xDA4 PUSH1 0x60 DUP8 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP2 AND EQ PUSH2 0xF41 JUMPI PUSH2 0xDCB PUSH2 0xBFD DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 PUSH2 0xDD6 DUP5 DUP3 PUSH2 0x2F40 JUMP JUMPDEST SWAP1 PUSH2 0xDE2 DUP6 DUP4 DUP4 PUSH2 0x2FD7 JUMP JUMPDEST DUP6 MLOAD PUSH1 0xC SHR PUSH1 0x1 AND PUSH2 0xEC6 JUMPI JUMPDEST DUP6 MLOAD PUSH2 0xE09 SWAP2 SWAP1 PUSH1 0xB SHR PUSH1 0x1 AND PUSH2 0xE85 JUMPI JUMPDEST DUP7 DUP5 DUP5 PUSH2 0x338E JUMP JUMPDEST SWAP8 SWAP2 SWAP8 SWAP5 SWAP1 SWAP8 DUP4 SWAP8 PUSH2 0xE20 DUP5 MLOAD PUSH1 0x1 SWAP1 PUSH1 0xD SHR AND SWAP1 JUMP JUMPDEST PUSH2 0xE50 JUMPI JUMPDEST POP POP POP POP POP MLOAD PUSH2 0xE34 DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0xE3D DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0xE48 JUMPI POP DUP2 SWAP3 SWAP2 SWAP1 JUMP JUMPDEST SWAP2 DUP1 SWAP4 POP SWAP2 SWAP1 JUMP JUMPDEST DUP6 SWAP9 POP SWAP1 PUSH2 0xE6F PUSH2 0xCAE PUSH2 0xC97 PUSH2 0xE7A SWAP9 SWAP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 DUP5 MLOAD SWAP2 CALLER SWAP3 PUSH2 0x3845 JUMP JUMPDEST SWAP3 PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0xE25 JUMP JUMPDEST DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xEBF PUSH1 0x60 DUP7 ADD SWAP2 DUP3 MLOAD PUSH2 0xEB8 PUSH2 0xCAE DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 DUP6 PUSH2 0x3282 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0xE01 JUMP JUMPDEST PUSH2 0xEFF SWAP1 PUSH2 0xEDB DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0xEF9 PUSH2 0xCAE DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x310E JUMP JUMPDEST PUSH2 0xF1C PUSH2 0xF16 PUSH2 0xD0E DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP7 PUSH2 0x238F JUMP JUMPDEST PUSH2 0xF27 DUP3 DUP7 DUP4 PUSH2 0x31C7 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0xE09 PUSH2 0xF3A DUP7 DUP5 DUP5 PUSH2 0x2FD7 JUMP JUMPDEST SWAP1 POP PUSH2 0xDEF JUMP JUMPDEST PUSH32 0xA54B181D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x57A456B700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0xFC8 JUMPI JUMP JUMPDEST PUSH2 0xF91 JUMP JUMPDEST PUSH2 0xFD5 PUSH2 0x166A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x7 SLOAD PUSH1 0x2 SHR AND PUSH2 0x12D0 JUMPI PUSH1 0x40 DUP2 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP2 MLOAD AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x12A4 JUMPI PUSH1 0x4 SWAP5 POP PUSH2 0x1015 PUSH2 0x15F0 JUMP JUMPDEST PUSH1 0x20 PUSH2 0x102B PUSH2 0xDA4 DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP7 DUP8 DUP1 SWAP3 PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL DUP1 ISZERO PUSH2 0x223 JUMPI PUSH1 0x80 SWAP6 PUSH0 SWAP2 PUSH2 0x1275 JUMPI JUMPDEST POP AND PUSH2 0x1083 DUP2 PUSH2 0x107E DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x3ABD JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x109F PUSH1 0x60 DUP7 ADD SWAP3 DUP4 MLOAD SWAP1 PUSH2 0x3B13 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0x10AF DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x10B8 DUP2 PUSH2 0xFBE JUMP JUMPDEST SUB PUSH2 0x120A JUMPI PUSH2 0x10E0 SWAP2 DUP6 MLOAD SWAP2 PUSH2 0x10CD DUP4 PUSH2 0xFBE JUMP JUMPDEST DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 MLOAD SWAP3 PUSH2 0x4003 JUMP JUMPDEST PUSH32 0xEEB740C90BF2B18C9532EB7D473137767036D893DFF3E009F32718F821B2A4C0 DUP3 SWAP7 SWAP3 SWAP8 SWAP4 SWAP8 SWAP7 DUP9 PUSH2 0x113E PUSH2 0x1120 PUSH2 0xDA4 DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 PUSH1 0x60 DUP3 ADD SWAP6 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 JUMPDEST DUP1 MLOAD PUSH2 0x114D DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x1156 DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x11C0 JUMPI ADD MLOAD DUP1 DUP5 LT PUSH2 0x118F JUMPI POP PUSH2 0x1182 PUSH2 0x117D SWAP2 DUP5 SWAP3 DUP4 SWAP2 JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x3B13 JUMP JUMPDEST PUSH2 0x118A PUSH2 0x1645 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 JUMP JUMPDEST PUSH32 0xE2EA151B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 DUP5 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 JUMPDEST PUSH0 REVERT JUMPDEST ADD MLOAD DUP1 DUP6 GT PUSH2 0x11DA JUMPI POP PUSH2 0x1182 PUSH2 0x117D SWAP2 DUP6 SWAP3 DUP4 SWAP2 PUSH2 0x1170 JUMP JUMPDEST PUSH32 0xE2EA151B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 DUP6 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x122D SWAP2 DUP6 MLOAD SWAP2 PUSH2 0x121A DUP4 PUSH2 0xFBE JUMP JUMPDEST DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 MLOAD SWAP3 PUSH2 0x3BA5 JUMP JUMPDEST PUSH32 0x3771D13C67011E31E12031C54BB59B0BF544A80B81D280A3711E172AA8B7F47B DUP3 SWAP7 SWAP3 SWAP8 SWAP4 SWAP8 SWAP7 DUP9 PUSH2 0x126D PUSH2 0x1120 PUSH2 0xDA4 DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 PUSH2 0x1142 JUMP JUMPDEST PUSH2 0x1297 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x129D JUMPI JUMPDEST PUSH2 0x128F DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x12F8 JUMP JUMPDEST PUSH0 PUSH2 0x1067 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1285 JUMP JUMPDEST DUP5 PUSH32 0x85F4129900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xF27DF0900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xED JUMPI MLOAD PUSH2 0x462 DUP2 PUSH2 0xDC JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH2 0x134F PUSH2 0x1349 PUSH32 0x0 SWAP3 DUP4 TLOAD ISZERO SWAP6 DUP7 PUSH2 0x13D1 JUMPI JUMPDEST CALLDATASIZE SWAP2 PUSH2 0x411 JUMP JUMPDEST CALLER PUSH2 0x6054 JUMP JUMPDEST SWAP3 PUSH2 0x1357 JUMPI POP JUMP JUMPDEST PUSH32 0x0 TLOAD PUSH2 0x13A9 JUMPI PUSH0 SWAP1 TSTORE PUSH2 0xFC PUSH32 0x0 PUSH2 0x436D JUMP JUMPDEST PUSH32 0x20F1D86D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 DUP6 TSTORE PUSH2 0x1342 JUMP JUMPDEST SWAP1 PUSH2 0x13E3 PUSH2 0x166A JUMP JUMPDEST PUSH2 0x13F6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 MLOAD AND PUSH2 0x1AC3 JUMP JUMPDEST PUSH2 0x140A PUSH2 0xBE4 DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x1467 PUSH32 0x0 TLOAD PUSH2 0x1440 DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0x0 PUSH2 0x437E JUMP JUMPDEST PUSH2 0x1480 PUSH2 0x147B DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x1ED0 JUMP JUMPDEST SWAP1 PUSH2 0x14D4 PUSH1 0x20 DUP4 ADD MLOAD MLOAD PUSH2 0x149B PUSH1 0x40 DUP7 ADD SWAP2 DUP3 MLOAD MLOAD SWAP1 PUSH2 0x20F5 JUMP JUMPDEST DUP1 MLOAD PUSH1 0xC0 DUP6 ADD SWAP1 PUSH2 0x14B5 DUP3 MLOAD SWAP2 PUSH1 0xA0 DUP9 ADD SWAP3 DUP4 MLOAD SWAP2 PUSH2 0x4397 JUMP JUMPDEST SWAP3 PUSH2 0x14C5 DUP8 MLOAD PUSH1 0x1 SWAP1 PUSH1 0xE SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x1527 JUMPI JUMPDEST POP POP POP DUP5 DUP5 PUSH2 0x45D8 JUMP JUMPDEST SWAP5 SWAP1 SWAP6 DUP7 DUP5 PUSH2 0x14E8 DUP5 MLOAD PUSH1 0x1 SWAP1 PUSH1 0xF SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x14F7 JUMPI JUMPDEST POP POP POP POP POP SWAP3 SWAP2 SWAP1 JUMP JUMPDEST PUSH2 0x151D SWAP6 POP PUSH2 0x1513 PUSH2 0xCAE PUSH2 0xC97 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 DUP5 MLOAD CALLER SWAP1 PUSH2 0x4B2D JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP7 DUP2 PUSH2 0x14ED JUMP JUMPDEST PUSH2 0x154E PUSH2 0x1576 SWAP5 DUP9 DUP11 PUSH2 0x1547 PUSH2 0xCAE PUSH2 0xC97 DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 CALLER PUSH2 0x4475 JUMP JUMPDEST PUSH2 0x156B PUSH2 0x1565 PUSH2 0xD0E DUP11 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP9 PUSH2 0x23FC JUMP JUMPDEST MLOAD SWAP2 MLOAD SWAP1 MLOAD SWAP2 PUSH2 0x4397 JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0x14CA JUMP JUMPDEST PUSH32 0xF223889600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x157E JUMPI CALLDATASIZE PUSH0 DUP1 CALLDATACOPY PUSH0 DUP1 CALLDATASIZE DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS DELEGATECALL RETURNDATASIZE PUSH0 DUP1 RETURNDATACOPY ISZERO PUSH2 0x15EC JUMPI RETURNDATASIZE PUSH0 RETURN JUMPDEST RETURNDATASIZE PUSH0 REVERT JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x161D JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE JUMP JUMPDEST PUSH32 0x0 TLOAD ISZERO PUSH2 0x1693 JUMPI JUMP JUMPDEST PUSH32 0xC09BA73600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x16C5 SWAP1 PUSH2 0x4D4E JUMP JUMPDEST SWAP1 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP3 EQ PUSH2 0x98E JUMPI PUSH2 0xFC SWAP2 PUSH0 SUB SWAP1 PUSH2 0x4DA3 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 SWAP2 PUSH2 0x1708 DUP3 DUP5 DUP7 PUSH2 0x4E64 JUMP JUMPDEST PUSH0 NOT DUP2 SUB PUSH2 0x1718 JUMPI JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP1 DUP3 GT PUSH2 0x18A2 JUMPI SUB SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP2 AND SWAP4 DUP5 ISZERO PUSH2 0x186D JUMPI DUP1 DUP4 AND SWAP6 DUP7 ISZERO PUSH2 0x1838 JUMPI DUP5 PUSH2 0x1778 DUP6 PUSH2 0x1762 DUP7 PUSH2 0x1762 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x10 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0xED JUMPI PUSH1 0x40 MLOAD PUSH32 0x5687F2B800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH32 0xA0175360A15BCA328BAF7EA85C7B784D58B222A50D0CE760B10DBA336D226A61 SWAP2 PUSH2 0x1812 SWAP2 PUSH0 DUP2 DUP1 PUSH1 0x64 DUP2 ADD JUMPDEST SUB DUP2 DUP4 DUP10 GAS CALL PUSH2 0x181F JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x1711 JUMP JUMPDEST DUP1 PUSH2 0x182C PUSH2 0x1832 SWAP3 PUSH2 0x2AE JUMP JUMPDEST DUP1 PUSH2 0x993 JUMP JUMPDEST PUSH0 PUSH2 0x1801 JUMP JUMPDEST PUSH32 0x94280D6200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xE602DF0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 PUSH32 0xFB8F41B200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST SWAP3 SWAP1 SWAP2 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0x1A8E JUMPI DUP1 DUP7 AND SWAP2 DUP3 ISZERO PUSH2 0x1A59 JUMPI PUSH2 0x191D DUP7 PUSH2 0x1762 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD DUP1 DUP7 GT PUSH2 0x1A1C JUMPI DUP6 SWAP1 SUB PUSH2 0x1947 DUP8 PUSH2 0x1762 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0x1967 DUP8 PUSH2 0x1762 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP6 DUP2 SLOAD ADD SWAP1 SSTORE AND SWAP2 DUP3 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F PUSH1 0x40 MLOAD DUP1 PUSH2 0x19A4 DUP9 DUP3 SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB SWAP1 LOG4 DUP1 EXTCODESIZE ISZERO PUSH2 0xED JUMPI PUSH1 0x40 MLOAD PUSH32 0x23DE665100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP4 SWAP1 SWAP3 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE PUSH0 SWAP1 DUP3 SWAP1 DUP2 DUP4 DUP2 PUSH1 0x64 DUP2 ADD JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x223 JUMPI PUSH2 0x1A0F JUMPI POP JUMP JUMPDEST DUP1 PUSH2 0x182C PUSH2 0xFC SWAP3 PUSH2 0x2AE JUMP JUMPDEST PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 DUP6 SWAP1 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x96C6FD1E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 SHR AND ISZERO PUSH2 0x1AE5 JUMPI POP JUMP JUMPDEST PUSH32 0x4BDACE1300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0xFFFFFFFF DUP1 PUSH32 0x0 AND TIMESTAMP GT ISZERO DUP1 PUSH2 0x1C2A JUMPI JUMPDEST PUSH2 0x1C02 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x2 SHR AND SWAP1 PUSH2 0x1B6B PUSH1 0x5A SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x28 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x98E JUMPI DUP3 PUSH2 0x1BBC JUMPI JUMPDEST POP POP SWAP1 POP PUSH2 0x1B88 JUMPI POP JUMP JUMPDEST PUSH32 0xD971F59700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x1BEE SWAP3 POP PUSH2 0x1BF7 SWAP4 PUSH32 0x0 SWAP3 SHR AND PUSH2 0x6AB2 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND SWAP1 JUMP JUMPDEST TIMESTAMP GT ISZERO DUP1 PUSH0 DUP1 PUSH2 0x1B7D JUMP JUMPDEST PUSH32 0xDA9F8B3400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x7 SLOAD DUP2 SHR AND PUSH2 0x1B41 JUMP JUMPDEST PUSH1 0x40 SWAP1 DUP2 MLOAD SWAP2 PUSH2 0x1C47 DUP4 PUSH2 0x2C7 JUMP JUMPDEST PUSH0 DUP4 MSTORE DUP3 PUSH1 0x20 DUP2 ADD SWAP2 PUSH1 0x60 DUP1 DUP5 MSTORE DUP2 DUP4 ADD SWAP1 DUP1 DUP3 MSTORE DUP1 DUP5 ADD SWAP1 DUP1 DUP3 MSTORE PUSH1 0x80 SWAP4 PUSH1 0x80 DUP7 ADD DUP3 DUP2 MSTORE PUSH1 0xA0 DUP8 ADD DUP4 DUP2 MSTORE PUSH1 0xC0 DUP9 ADD SWAP4 DUP5 MSTORE PUSH2 0x1C83 PUSH2 0x15F0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SWAP4 PUSH0 PUSH1 0x20 MSTORE DUP4 PUSH0 KECCAK256 SLOAD SWAP3 PUSH1 0x4 PUSH1 0x20 MSTORE PUSH2 0x1CBF DUP6 PUSH0 KECCAK256 SWAP5 PUSH1 0x3 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SWAP1 DUP2 SLOAD SWAP13 MSTORE PUSH2 0x4EB0 JUMP JUMPDEST DUP12 MSTORE PUSH2 0x1CCA DUP11 PUSH2 0x4F07 JUMP JUMPDEST DUP9 MSTORE PUSH2 0x1CD5 DUP11 PUSH2 0x2124 JUMP JUMPDEST DUP8 MSTORE PUSH2 0x1CE0 DUP11 PUSH2 0x2124 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x1CED DUP10 DUP14 MLOAD PUSH2 0x6610 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x1CF8 DUP9 PUSH2 0x2124 JUMP JUMPDEST DUP2 MSTORE DUP11 MLOAD SWAP2 PUSH1 0x1 SWAP10 PUSH1 0x1 DUP5 DUP2 SHR AND SWAP4 DUP5 PUSH2 0x1EBC JUMPI JUMPDEST POP DUP4 PUSH2 0x1EAA JUMPI JUMPDEST PUSH0 JUMPDEST DUP14 DUP12 DUP3 LT PUSH2 0x1D74 JUMPI POP POP POP POP POP POP POP POP POP POP POP POP POP DUP1 PUSH2 0x1D65 PUSH2 0x1D4D PUSH2 0x1D6C SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x4F94 JUMP JUMPDEST PUSH2 0x462 PUSH2 0x1645 JUMP JUMPDEST SWAP1 DUP11 DUP14 SWAP3 DUP3 DUP13 DUP13 DUP13 PUSH2 0x1DD6 DUP5 PUSH2 0x1DC2 DUP2 PUSH2 0x1DB4 PUSH2 0x1DAF DUP16 DUP16 PUSH2 0x1170 DUP6 PUSH2 0x1D9A SWAP3 MLOAD PUSH2 0x2155 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0x4F55 JUMP JUMPDEST SWAP5 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP5 MLOAD DUP4 PUSH2 0x1DD0 DUP4 DUP4 PUSH2 0x2155 JUMP JUMPDEST MSTORE PUSH2 0x2155 JUMP JUMPDEST POP PUSH2 0x1DE0 DUP2 PUSH2 0x50F8 JUMP JUMPDEST PUSH2 0x1DEB DUP6 DUP14 MLOAD PUSH2 0x2155 JUMP JUMPDEST MSTORE PUSH2 0x1E09 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP6 DUP8 PUSH2 0x51C8 JUMP JUMPDEST DUP8 DUP14 DUP14 ISZERO PUSH2 0x1E9D JUMPI DUP3 ADD MLOAD ISZERO ISZERO SWAP2 DUP3 PUSH2 0x1E7F JUMPI JUMPDEST POP POP PUSH2 0x1E30 JUMPI JUMPDEST POP POP POP POP POP JUMPDEST ADD PUSH2 0x1D16 JUMP JUMPDEST DUP3 PUSH2 0x1E53 SWAP3 PUSH2 0x1E4A DUP3 PUSH2 0x1E43 DUP9 MLOAD PUSH2 0x666C JUMP JUMPDEST SWAP5 MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP7 SHR DUP6 PUSH2 0x668F JUMP JUMPDEST SWAP3 DUP4 PUSH2 0x1E63 JUMPI JUMPDEST DUP15 SWAP4 POP DUP13 PUSH2 0x1E24 JUMP JUMPDEST PUSH2 0x1E76 SWAP4 PUSH2 0x1E70 SWAP2 PUSH2 0xBA7 JUMP JUMPDEST SWAP2 PUSH2 0x51C8 JUMP JUMPDEST PUSH0 DUP16 DUP3 DUP3 PUSH2 0x1E5A JUMP JUMPDEST SWAP1 SWAP2 POP MLOAD PUSH2 0x1E8C DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x1E95 DUP2 PUSH2 0xFBE JUMP JUMPDEST EQ DUP8 PUSH0 PUSH2 0x1E1D JUMP JUMPDEST POP POP POP POP POP POP POP POP PUSH2 0x1E2A JUMP JUMPDEST DUP13 MLOAD SWAP1 SWAP4 POP PUSH1 0x3 SHR PUSH1 0x1 AND ISZERO SWAP3 PUSH2 0x1D14 JUMP JUMPDEST PUSH2 0x1EC7 SWAP2 SWAP5 POP PUSH2 0x666C JUMP JUMPDEST ISZERO ISZERO SWAP3 PUSH0 PUSH2 0x1D0D JUMP JUMPDEST PUSH1 0x40 SWAP1 DUP2 MLOAD SWAP2 PUSH2 0x1EDF DUP4 PUSH2 0x2C7 JUMP JUMPDEST PUSH0 DUP4 MSTORE DUP3 PUSH1 0x20 DUP2 ADD SWAP2 PUSH1 0x60 DUP1 DUP5 MSTORE DUP2 DUP4 ADD SWAP1 DUP1 DUP3 MSTORE DUP1 DUP5 ADD SWAP1 DUP1 DUP3 MSTORE PUSH1 0x80 SWAP4 PUSH1 0x80 DUP7 ADD DUP3 DUP2 MSTORE PUSH1 0xA0 DUP8 ADD DUP4 DUP2 MSTORE PUSH1 0xC0 DUP9 ADD SWAP4 DUP5 MSTORE PUSH2 0x1F1B PUSH2 0x15F0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SWAP4 PUSH0 PUSH1 0x20 MSTORE DUP4 PUSH0 KECCAK256 SLOAD SWAP3 PUSH1 0x4 PUSH1 0x20 MSTORE PUSH2 0x1F57 DUP6 PUSH0 KECCAK256 SWAP5 PUSH1 0x3 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SWAP1 DUP2 SLOAD SWAP13 MSTORE PUSH2 0x4EB0 JUMP JUMPDEST DUP12 MSTORE PUSH2 0x1F62 DUP11 PUSH2 0x4F07 JUMP JUMPDEST DUP9 MSTORE PUSH2 0x1F6D DUP11 PUSH2 0x2124 JUMP JUMPDEST DUP8 MSTORE PUSH2 0x1F78 DUP11 PUSH2 0x2124 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x1F85 DUP10 DUP14 MLOAD PUSH2 0x6610 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x1F90 DUP9 PUSH2 0x2124 JUMP JUMPDEST DUP2 MSTORE DUP11 MLOAD SWAP2 PUSH1 0x1 SWAP10 PUSH1 0x1 DUP5 DUP2 SHR AND SWAP4 DUP5 PUSH2 0x20E1 JUMPI JUMPDEST POP DUP4 PUSH2 0x20CF JUMPI JUMPDEST PUSH0 JUMPDEST DUP14 DUP12 DUP3 LT PUSH2 0x1FE5 JUMPI POP POP POP POP POP POP POP POP POP POP POP POP POP DUP1 PUSH2 0x1D65 PUSH2 0x1D4D PUSH2 0x1D6C SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP11 DUP14 SWAP3 DUP3 DUP13 DUP13 DUP13 PUSH2 0x200B DUP5 PUSH2 0x1DC2 DUP2 PUSH2 0x1DB4 PUSH2 0x1DAF DUP16 DUP16 PUSH2 0x1170 DUP6 PUSH2 0x1D9A SWAP3 MLOAD PUSH2 0x2155 JUMP JUMPDEST POP PUSH2 0x2015 DUP2 PUSH2 0x50F8 JUMP JUMPDEST PUSH2 0x2020 DUP6 DUP14 MLOAD PUSH2 0x2155 JUMP JUMPDEST MSTORE PUSH2 0x203E PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP6 DUP8 PUSH2 0x5215 JUMP JUMPDEST DUP8 DUP14 DUP14 ISZERO PUSH2 0x20C2 JUMPI DUP3 ADD MLOAD ISZERO ISZERO SWAP2 DUP3 PUSH2 0x20A4 JUMPI JUMPDEST POP POP PUSH2 0x2065 JUMPI JUMPDEST POP POP POP POP POP JUMPDEST ADD PUSH2 0x1FAE JUMP JUMPDEST DUP3 PUSH2 0x2078 SWAP3 PUSH2 0x1E4A DUP3 PUSH2 0x1E43 DUP9 MLOAD PUSH2 0x666C JUMP JUMPDEST SWAP3 DUP4 PUSH2 0x2088 JUMPI JUMPDEST DUP15 SWAP4 POP DUP13 PUSH2 0x2059 JUMP JUMPDEST PUSH2 0x209B SWAP4 PUSH2 0x2095 SWAP2 PUSH2 0xBA7 JUMP JUMPDEST SWAP2 PUSH2 0x5215 JUMP JUMPDEST PUSH0 DUP16 DUP3 DUP3 PUSH2 0x207F JUMP JUMPDEST SWAP1 SWAP2 POP MLOAD PUSH2 0x20B1 DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x20BA DUP2 PUSH2 0xFBE JUMP JUMPDEST EQ DUP8 PUSH0 PUSH2 0x2052 JUMP JUMPDEST POP POP POP POP POP POP POP POP PUSH2 0x205F JUMP JUMPDEST DUP13 MLOAD SWAP1 SWAP4 POP PUSH1 0x3 SHR PUSH1 0x1 AND ISZERO SWAP3 PUSH2 0x1FAC JUMP JUMPDEST PUSH2 0x20EC SWAP2 SWAP5 POP PUSH2 0x666C JUMP JUMPDEST ISZERO ISZERO SWAP3 PUSH0 PUSH2 0x1FA5 JUMP JUMPDEST SUB PUSH2 0x20FC JUMPI JUMP JUMPDEST PUSH32 0xAAAD13F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x212E DUP3 PUSH2 0x370 JUMP JUMPDEST PUSH2 0x213B PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x2FF JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x214B DUP3 SWAP5 PUSH2 0x370 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x2169 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 MLOAD SWAP2 PUSH2 0x21A9 DUP3 MLOAD DUP3 MLOAD SWAP1 DUP6 PUSH2 0x50A9 JUMP JUMPDEST PUSH2 0x21B2 DUP4 PUSH2 0x2124 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x21C4 JUMPI POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x21F9 PUSH2 0x21D4 PUSH1 0x1 SWAP4 DUP6 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x21F4 PUSH2 0x21E2 DUP5 DUP10 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x21ED DUP6 DUP10 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP3 PUSH2 0x50E5 JUMP JUMPDEST PUSH2 0x576B JUMP JUMPDEST PUSH2 0x2203 DUP3 DUP10 PUSH2 0x2155 JUMP JUMPDEST MSTORE ADD PUSH2 0x21B5 JUMP JUMPDEST PUSH1 0x4 GT ISZERO PUSH2 0xFC8 JUMPI JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0xED JUMPI JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xED JUMPI PUSH2 0x462 SWAP1 PUSH2 0x2214 JUMP JUMPDEST SWAP1 PUSH1 0x4 DUP3 LT ISZERO PUSH2 0xFC8 JUMPI MSTORE JUMP JUMPDEST SWAP6 SWAP3 SWAP4 PUSH2 0x2273 PUSH2 0x2297 SWAP6 PUSH2 0x462 SWAP10 SWAP8 SWAP4 PUSH2 0x2289 SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP12 MSTORE AND PUSH1 0x20 DUP11 ADD MSTORE PUSH1 0x40 DUP10 ADD SWAP1 PUSH2 0x2235 JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0xE0 PUSH1 0x80 DUP8 ADD MSTORE PUSH1 0xE0 DUP7 ADD SWAP1 PUSH2 0x465 JUMP JUMPDEST SWAP1 DUP5 DUP3 SUB PUSH1 0xA0 DUP7 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST SWAP2 PUSH1 0xC0 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x498 JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 SWAP6 SWAP7 SWAP4 PUSH2 0x231D PUSH2 0x22C7 DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH1 0x80 DUP9 ADD MLOAD SWAP8 PUSH2 0x22D7 DUP10 PUSH2 0x220A JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x80 PUSH1 0x40 DUP4 ADD MLOAD SWAP13 ADD MLOAD SWAP2 ADD MLOAD SWAP2 PUSH1 0x40 MLOAD SWAP12 DUP13 SWAP11 DUP12 SWAP10 DUP11 SWAP8 PUSH32 0xBA5F9F4000000000000000000000000000000000000000000000000000000000 DUP10 MSTORE PUSH1 0x4 DUP10 ADD PUSH2 0x2242 JUMP JUMPDEST SUB SWAP4 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP2 PUSH2 0x2360 JUMPI JUMPDEST POP ISZERO PUSH2 0x2338 JUMPI JUMP JUMPDEST PUSH32 0x2AAF886600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x2382 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x2388 JUMPI JUMPDEST PUSH2 0x237A DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2221 JUMP JUMPDEST PUSH0 PUSH2 0x2330 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2370 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD MLOAD MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x23A7 JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH2 0x23F6 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH2 0x23D6 PUSH2 0x23D0 DUP6 DUP4 DUP12 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x50F8 JUMP JUMPDEST PUSH2 0x23E4 DUP6 PUSH1 0xA0 DUP12 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MSTORE DUP4 PUSH0 MSTORE DUP6 DUP8 MSTORE PUSH0 KECCAK256 SLOAD AND DUP3 DUP8 PUSH2 0x51C8 JUMP JUMPDEST ADD PUSH2 0x2399 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD MLOAD MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x2414 JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH2 0x245D PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH2 0x243D PUSH2 0x23D0 DUP6 DUP4 DUP12 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST PUSH2 0x244B DUP6 PUSH1 0xA0 DUP12 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MSTORE DUP4 PUSH0 MSTORE DUP6 DUP8 MSTORE PUSH0 KECCAK256 SLOAD AND DUP3 DUP8 PUSH2 0x5215 JUMP JUMPDEST ADD PUSH2 0x2406 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x2470 DUP3 PUSH2 0x2E3 JUMP JUMPDEST PUSH0 PUSH1 0x40 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0xED JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x249C DUP2 PUSH2 0x370 JUMP JUMPDEST SWAP4 PUSH2 0x24AA PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x2FF JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xED JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x24D3 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x24C5 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0xED JUMPI DUP1 MLOAD SWAP1 PUSH2 0x24F9 DUP3 PUSH2 0x3F5 JUMP JUMPDEST SWAP3 PUSH2 0x2507 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x2FF JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0xED JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP2 DUP4 SUB SLT PUSH2 0xED JUMPI DUP1 MLOAD SWAP3 PUSH1 0x20 DUP3 ADD MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0xED JUMPI DUP5 PUSH2 0x2558 SWAP2 DUP4 ADD PUSH2 0x2481 JUMP JUMPDEST SWAP4 PUSH1 0x40 DUP3 ADD MLOAD DUP5 DUP2 GT PUSH2 0xED JUMPI DUP2 PUSH2 0x2571 SWAP2 DUP5 ADD PUSH2 0x2481 JUMP JUMPDEST SWAP4 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0xED JUMPI PUSH2 0x462 SWAP3 ADD PUSH2 0x24E2 JUMP JUMPDEST SWAP4 SWAP1 PUSH2 0x462 SWAP6 SWAP4 PUSH2 0x25C6 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x25B8 SWAP4 AND DUP8 MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP8 ADD MSTORE PUSH1 0xA0 DUP7 ADD SWAP1 PUSH2 0x465 JUMP JUMPDEST SWAP1 DUP5 DUP3 SUB PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x498 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x98E JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x98E JUMPI JUMP JUMPDEST SWAP2 PUSH2 0x260C SWAP1 PUSH2 0x462 SWAP5 SWAP3 DUP5 MSTORE PUSH1 0x60 PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD SWAP1 PUSH2 0x465 JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST SWAP3 PUSH2 0x2623 PUSH2 0x15F0 JUMP JUMPDEST PUSH1 0x60 SWAP2 PUSH2 0x262E PUSH2 0x2463 JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP7 ADD SWAP1 PUSH2 0x2642 DUP3 MLOAD MLOAD DUP1 DUP8 MSTORE PUSH2 0x2124 JUMP JUMPDEST SWAP1 PUSH1 0x80 DUP5 ADD SWAP7 DUP8 MLOAD PUSH2 0x2653 DUP2 PUSH2 0x220A JUMP JUMPDEST PUSH2 0x265C DUP2 PUSH2 0x220A JUMP JUMPDEST PUSH2 0x2A91 JUMPI POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 PUSH2 0x2671 DUP8 MLOAD PUSH2 0x2124 JUMP JUMPDEST SWAP6 PUSH2 0x26AD DUP4 PUSH1 0x80 DUP13 ADD MLOAD PUSH2 0x26A7 PUSH2 0x268F DUP11 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x571A JUMP JUMPDEST SWAP3 PUSH2 0x271E PUSH32 0x0 TLOAD PUSH2 0x26E4 DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0x0 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2A14 JUMPI JUMPDEST PUSH1 0x40 DUP8 ADD MLOAD DUP1 DUP3 GT PUSH2 0x29E3 JUMPI POP PUSH2 0x273C DUP2 SWAP11 SWAP10 SWAP11 PUSH2 0x578D JUMP JUMPDEST PUSH1 0x20 DUP11 ADD SWAP9 PUSH0 JUMPDEST DUP12 MLOAD DUP2 LT ISZERO PUSH2 0x289E JUMPI DUP13 PUSH2 0x2757 DUP3 DUP9 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x2761 DUP2 PUSH2 0x578D JUMP JUMPDEST PUSH2 0x276B DUP4 DUP11 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x288C JUMPI DUP2 PUSH2 0x2791 DUP5 PUSH1 0xA0 PUSH2 0x2788 DUP3 PUSH1 0xC0 PUSH2 0x2798 SWAP9 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP4 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP2 PUSH2 0x579E JUMP JUMPDEST DUP1 PUSH2 0x27A3 DUP4 DUP11 PUSH2 0x2155 JUMP JUMPDEST MSTORE JUMPDEST PUSH2 0x27B3 PUSH2 0x1170 DUP4 DUP12 MLOAD PUSH2 0x2155 JUMP JUMPDEST PUSH1 0x60 DUP12 ADD PUSH2 0x27C2 DUP5 DUP3 MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD DUP4 LT PUSH2 0x2840 JUMPI POP DUP15 DUP4 PUSH2 0x1E70 DUP16 DUP16 DUP16 SWAP7 PUSH2 0x2834 SWAP2 PUSH2 0x281C DUP7 PUSH2 0x2814 DUP2 DUP12 PUSH1 0x1 SWAP15 SWAP14 PUSH2 0x27F1 DUP9 PUSH2 0x283A SWAP16 PUSH2 0x16BB JUMP JUMPDEST PUSH2 0x280D PUSH2 0x27FE DUP5 DUP10 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 DUP14 PUSH2 0x57CD JUMP JUMPDEST DUP8 MSTORE SWAP3 PUSH2 0x2155 JUMP JUMPDEST MSTORE PUSH2 0x282B DUP6 PUSH1 0x60 DUP9 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP3 MLOAD SWAP1 PUSH2 0x25E2 JUMP JUMPDEST SWAP1 PUSH2 0xBA7 JUMP JUMPDEST ADD PUSH2 0x2743 JUMP JUMPDEST SWAP2 PUSH2 0x284F DUP5 PUSH2 0x11BD SWAP5 MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST POP POP PUSH2 0x2898 DUP2 DUP9 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x27A5 JUMP JUMPDEST POP SWAP4 SWAP10 POP SWAP6 SWAP5 POP SWAP6 SWAP3 SWAP9 PUSH2 0x28C4 SWAP2 SWAP8 POP PUSH2 0x28BF DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x58F1 JUMP JUMPDEST PUSH32 0xFBE5B0D79FB94F1E81C0A92BF86AE9D3A19E9D1BF6202C0D3E75120F65D5D8A5 PUSH2 0x28F6 DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 PUSH2 0x2918 DUP7 PUSH1 0x20 DUP8 ADD SWAP6 PUSH2 0x2911 DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST CALLER SWAP2 PUSH2 0x16F9 JUMP JUMPDEST PUSH2 0x2920 PUSH2 0x5954 JUMP JUMPDEST PUSH2 0x29B8 JUMPI JUMPDEST PUSH2 0x294B DUP7 PUSH2 0x293A DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x59D4 JUMP JUMPDEST PUSH2 0x297F PUSH2 0x268F PUSH2 0x2973 PUSH2 0x2965 DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 MLOAD SWAP7 PUSH2 0x1170 DUP9 PUSH2 0x220A JUMP JUMPDEST SWAP3 PUSH2 0x29A7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH2 0x2995 DUP9 PUSH2 0x220A JUMP JUMPDEST DUP13 DUP5 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP6 AND SWAP9 AND SWAP7 DUP5 PUSH2 0x25EF JUMP JUMPDEST SUB SWAP1 LOG4 PUSH2 0x29B2 PUSH2 0x1645 JUMP JUMPDEST SWAP4 SWAP3 SWAP2 SWAP1 JUMP JUMPDEST PUSH2 0x29DE DUP7 PUSH2 0x29CD DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x5969 JUMP JUMPDEST PUSH2 0x2925 JUMP JUMPDEST PUSH32 0x31D38E0B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP9 SWAP5 SWAP2 PUSH2 0x2A27 DUP12 SWAP8 SWAP5 SWAP10 SWAP6 SWAP3 SWAP12 MLOAD PUSH2 0x5350 JUMP JUMPDEST SWAP11 PUSH0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x2A81 JUMPI DUP1 DUP12 PUSH2 0x2A7A DUP16 SWAP4 PUSH2 0x2A74 PUSH2 0x2A63 DUP16 DUP4 SWAP1 PUSH2 0x2A59 PUSH1 0x1 SWAP10 PUSH2 0x2A53 DUP5 DUP11 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x576B JUMP JUMPDEST PUSH2 0x1DD0 DUP4 DUP4 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x2A6E DUP4 DUP7 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0xBA7 JUMP JUMPDEST SWAP3 PUSH2 0x2155 JUMP JUMPDEST MSTORE ADD PUSH2 0x2A2A JUMP JUMPDEST POP SWAP2 SWAP5 SWAP9 SWAP4 SWAP7 SWAP11 POP SWAP2 SWAP5 SWAP9 PUSH2 0x2723 JUMP JUMPDEST SWAP5 SWAP1 PUSH1 0x1 DUP9 MLOAD PUSH2 0x2AA0 DUP2 PUSH2 0x220A JUMP JUMPDEST PUSH2 0x2AA9 DUP2 PUSH2 0x220A JUMP JUMPDEST SUB PUSH2 0x2B2D JUMPI PUSH2 0x2AB8 DUP10 MLOAD PUSH2 0x528D JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP2 DUP7 SWAP3 DUP11 PUSH2 0x2B27 PUSH2 0x2B1D DUP12 DUP11 PUSH1 0x40 PUSH2 0x2AD8 PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x52C1 JUMP JUMPDEST SWAP3 ADD SWAP5 DUP3 DUP7 MSTORE DUP7 PUSH1 0x80 DUP3 ADD MLOAD SWAP4 PUSH2 0x2B17 PUSH2 0xDA4 PUSH2 0x2B09 PUSH2 0x2B02 PUSH2 0x268F DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP6 MLOAD PUSH2 0x5350 JUMP JUMPDEST SWAP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH2 0x55EA JUMP JUMPDEST SWAP1 SWAP3 MLOAD SWAP1 SWAP11 PUSH2 0x2155 JUMP JUMPDEST MSTORE PUSH2 0x2723 JUMP JUMPDEST PUSH1 0x2 DUP9 SWAP7 SWAP3 SWAP7 MLOAD PUSH2 0x2B3D DUP2 PUSH2 0x220A JUMP JUMPDEST PUSH2 0x2B46 DUP2 PUSH2 0x220A JUMP JUMPDEST SUB PUSH2 0x2BD9 JUMPI PUSH2 0x2B55 DUP10 MLOAD PUSH2 0x528D JUMP JUMPDEST PUSH2 0x2BD2 DUP3 PUSH1 0x60 DUP8 ADD SWAP1 PUSH2 0x2B79 PUSH2 0x2B6B DUP4 MLOAD PUSH2 0x52C1 JUMP JUMPDEST PUSH1 0x40 DUP13 ADD SWAP4 DUP2 DUP6 MSTORE MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x2B85 DUP4 MLOAD DUP9 PUSH2 0x2155 JUMP JUMPDEST MSTORE DUP12 PUSH2 0x2B98 PUSH1 0x80 DUP3 ADD MLOAD SWAP4 MLOAD DUP1 SWAP4 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x2BB7 PUSH2 0x2BB0 PUSH2 0x268F DUP13 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 MLOAD PUSH2 0x5350 JUMP JUMPDEST SWAP3 PUSH2 0x2BCC PUSH2 0xDA4 DUP13 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH2 0x53A7 JUMP JUMPDEST SWAP7 SWAP1 PUSH2 0x2723 JUMP JUMPDEST POP SWAP4 PUSH1 0x3 DUP8 MLOAD PUSH2 0x2BE8 DUP2 PUSH2 0x220A JUMP JUMPDEST PUSH2 0x2BF1 DUP2 PUSH2 0x220A JUMP JUMPDEST SUB PUSH2 0x2CB2 JUMPI PUSH2 0x2C00 DUP9 MLOAD PUSH2 0x5258 JUMP JUMPDEST PUSH0 PUSH2 0x2C18 PUSH2 0xDA4 PUSH2 0xDA4 DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP6 PUSH1 0x40 DUP7 ADD MLOAD SWAP7 PUSH1 0x80 DUP12 ADD MLOAD SWAP2 DUP4 PUSH1 0xA0 DUP10 ADD MLOAD SWAP10 PUSH2 0x2C66 PUSH1 0x40 MLOAD SWAP12 DUP13 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xAB68E28C00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE CALLER PUSH1 0x4 DUP8 ADD PUSH2 0x2588 JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP5 DUP6 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP2 PUSH0 SWAP7 PUSH0 SWAP3 PUSH0 SWAP2 PUSH2 0x2C87 JUMPI JUMPDEST POP SWAP2 SWAP7 SWAP3 PUSH2 0x2723 JUMP JUMPDEST SWAP3 POP POP SWAP6 POP PUSH2 0x2CA8 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2CA0 DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2528 JUMP JUMPDEST SWAP2 SWAP7 SWAP1 SWAP2 PUSH0 PUSH2 0x2C7E JUMP JUMPDEST PUSH32 0x137A9A3900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SLT PUSH2 0xED JUMPI PUSH2 0x2CF0 DUP2 PUSH2 0x2214 JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP3 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xED JUMPI PUSH2 0x462 SWAP3 ADD PUSH2 0x2481 JUMP JUMPDEST SWAP7 SWAP4 SWAP5 PUSH2 0x462 SWAP9 SWAP7 SWAP3 PUSH2 0x2D78 SWAP7 PUSH2 0x2D49 PUSH2 0x2D6A SWAP7 PUSH2 0x2D5C SWAP6 PUSH2 0x100 SWAP5 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 MSTORE AND PUSH1 0x20 DUP14 ADD MSTORE PUSH1 0x40 DUP13 ADD SWAP1 PUSH2 0x2235 JUMP JUMPDEST PUSH1 0x60 DUP11 ADD MSTORE DUP1 PUSH1 0x80 DUP11 ADD MSTORE DUP9 ADD SWAP1 PUSH2 0x465 JUMP JUMPDEST SWAP1 DUP7 DUP3 SUB PUSH1 0xA0 DUP9 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST SWAP1 DUP5 DUP3 SUB PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST SWAP2 PUSH1 0xE0 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x498 JUMP JUMPDEST SWAP5 SWAP4 SWAP6 SWAP3 SWAP7 SWAP2 SWAP1 DUP5 MLOAD PUSH2 0x2D9F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x80 DUP7 ADD MLOAD SWAP3 PUSH2 0x2DAF DUP5 PUSH2 0x220A JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD DUP11 PUSH1 0xA0 DUP10 ADD MLOAD SWAP3 PUSH1 0x40 MLOAD SWAP12 DUP13 SWAP8 DUP9 SWAP8 PUSH32 0x2754888D00000000000000000000000000000000000000000000000000000000 DUP10 MSTORE PUSH1 0x4 DUP10 ADD SWAP8 PUSH2 0x2DF4 SWAP9 PUSH2 0x2D0F JUMP JUMPDEST SUB SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 DUP2 GAS PUSH0 SWAP5 DUP6 SWAP2 CALL SWAP4 DUP5 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP1 PUSH0 SWAP6 PUSH2 0x2F19 JUMPI JUMPDEST POP ISZERO DUP1 ISZERO PUSH2 0x2F0D JUMPI JUMPDEST PUSH2 0x2EE5 JUMPI PUSH1 0x1 DUP1 SWAP4 PUSH1 0x9 SHR AND ISZERO PUSH2 0x2E3E JUMPI SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH0 DUP4 JUMPDEST PUSH2 0x2E45 JUMPI JUMPDEST POP POP POP POP SWAP1 JUMP JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x2EE0 JUMPI PUSH2 0x2E58 DUP2 DUP7 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH1 0x60 DUP5 ADD SWAP1 PUSH2 0x2E69 DUP4 DUP4 MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD GT PUSH2 0x2E78 JUMPI POP DUP4 ADD DUP4 PUSH2 0x2E39 JUMP JUMPDEST PUSH2 0x2EA3 DUP3 PUSH2 0x2E9B DUP2 PUSH2 0x2E95 PUSH2 0x1170 DUP12 SWAP8 PUSH1 0x20 PUSH2 0x11BD SWAP11 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST SWAP6 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP3 MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH32 0xFBD8A72400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST PUSH2 0x2E3E JUMP JUMPDEST PUSH32 0x1D3391D800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP DUP4 MLOAD DUP6 MLOAD EQ ISZERO PUSH2 0x2E20 JUMP JUMPDEST SWAP1 POP PUSH2 0x2F38 SWAP2 SWAP5 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2F30 DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2CDA JUMP JUMPDEST SWAP4 SWAP1 PUSH0 PUSH2 0x2E17 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 SWAP2 PUSH1 0x80 DUP5 ADD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT DUP6 DUP4 LT OR PUSH2 0x2C2 JUMPI PUSH2 0x2FC7 SWAP2 PUSH1 0x40 MSTORE PUSH0 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP5 PUSH0 DUP7 MSTORE PUSH2 0x2FBF PUSH1 0x40 DUP3 ADD SWAP2 PUSH0 DUP4 MSTORE DUP4 PUSH1 0x60 DUP3 ADD SWAP7 PUSH0 DUP9 MSTORE DUP3 SWAP10 PUSH2 0x2FB8 PUSH1 0x20 DUP5 ADD DUP1 MLOAD SWAP1 PUSH2 0x2FA8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 PUSH1 0x40 DUP9 ADD MLOAD AND SWAP1 PUSH2 0x4CE8 JUMP JUMPDEST DUP8 MSTORE MLOAD SWAP1 PUSH1 0x60 DUP6 ADD MLOAD AND SWAP1 PUSH2 0x4CE8 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x31C7 JUMP JUMPDEST SWAP1 MSTORE MLOAD PUSH2 0x5350 JUMP JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x2FD4 DUP3 PUSH2 0xFBE JUMP JUMPDEST MSTORE JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x60 PUSH1 0xC0 PUSH1 0x40 MLOAD PUSH2 0x2FEA DUP2 PUSH2 0x2C7 JUMP JUMPDEST PUSH0 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE PUSH0 DUP4 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE PUSH0 PUSH1 0xA0 DUP3 ADD MSTORE ADD MSTORE DUP1 MLOAD SWAP3 PUSH2 0x3018 DUP5 PUSH2 0xFBE JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 DUP3 ADD MLOAD SWAP4 ADD MLOAD PUSH1 0xC0 PUSH1 0x20 DUP4 MLOAD SWAP4 ADD MLOAD SWAP4 ADD MLOAD SWAP4 PUSH2 0x3041 PUSH2 0x303A PUSH2 0x342 JUMP JUMPDEST SWAP7 DUP8 PUSH2 0x2FCB JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE CALLER PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x2FD4 DUP3 PUSH2 0xFBE JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0xE0 DUP2 ADD SWAP1 DUP4 MLOAD PUSH2 0x307F DUP2 PUSH2 0xFBE JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP6 ADD MLOAD SWAP3 PUSH1 0xE0 PUSH1 0x40 DUP5 ADD MSTORE DUP4 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH2 0x100 DUP5 ADD SWAP5 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x30FA JUMPI POP POP POP POP PUSH1 0xC0 DUP5 PUSH1 0x60 PUSH2 0x462 SWAP6 SWAP7 ADD MLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x30EA PUSH1 0xA0 DUP3 ADD MLOAD PUSH1 0xA0 DUP6 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST ADD MLOAD SWAP1 PUSH1 0xC0 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x498 JUMP JUMPDEST DUP4 MLOAD DUP7 MSTORE SWAP5 DUP2 ADD SWAP5 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x30AA JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP3 PUSH2 0x315E PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 PUSH1 0x40 MLOAD SWAP8 DUP9 SWAP7 DUP8 SWAP6 DUP7 SWAP4 PUSH32 0x5211FA7700000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x40 PUSH1 0x4 DUP7 ADD MSTORE PUSH1 0x44 DUP6 ADD SWAP1 PUSH2 0x306D JUMP JUMPDEST SWAP2 AND PUSH1 0x24 DUP4 ADD MSTORE SUB SWAP4 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP2 PUSH2 0x31A8 JUMPI JUMPDEST POP ISZERO PUSH2 0x3180 JUMPI JUMP JUMPDEST PUSH32 0xE91E17E700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x31C1 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x2388 JUMPI PUSH2 0x237A DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH0 PUSH2 0x3178 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 DUP1 MLOAD PUSH2 0x31D5 DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x31DE DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x3223 JUMPI SWAP1 PUSH2 0x321A PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH2 0x21ED PUSH1 0x80 PUSH2 0x321F SWAP6 ADD MLOAD SWAP4 PUSH1 0xA0 PUSH2 0x320E PUSH1 0xC0 DUP6 ADD MLOAD DUP4 MLOAD SWAP1 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP4 ADD MLOAD SWAP1 MLOAD SWAP1 PUSH2 0x2155 JUMP JUMPDEST PUSH2 0x50E5 JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST PUSH2 0x462 SWAP3 PUSH2 0x325F PUSH2 0x3259 PUSH1 0x80 PUSH2 0x21F4 SWAP5 ADD MLOAD SWAP5 PUSH1 0xA0 PUSH2 0x324D PUSH1 0x20 PUSH1 0xC0 DUP8 ADD MLOAD SWAP4 ADD SWAP3 DUP4 MLOAD SWAP1 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP5 ADD MLOAD SWAP1 MLOAD SWAP1 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x5B3F JUMP JUMPDEST SWAP3 PUSH2 0x50E5 JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0xED JUMPI PUSH1 0x20 PUSH2 0x327C DUP4 PUSH2 0x2214 JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 JUMP JUMPDEST SWAP1 SWAP3 PUSH2 0x32D3 PUSH1 0x40 SWAP4 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 SWAP2 DUP7 MLOAD SWAP8 DUP9 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xA0E8F5AC00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE PUSH1 0x60 PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x64 DUP7 ADD SWAP1 PUSH2 0x306D JUMP JUMPDEST SWAP3 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE SUB SWAP3 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0x335C JUMPI JUMPDEST POP ISZERO PUSH2 0x3334 JUMPI PUSH8 0xDE0B5CAD2BEF000 DUP2 GT PUSH2 0x330C JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x746E594000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x53F976D400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH2 0x3380 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x3387 JUMPI JUMPDEST PUSH2 0x3378 DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3265 JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x32F4 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x336E JUMP JUMPDEST PUSH0 SWAP5 SWAP2 SWAP4 SWAP3 SWAP4 PUSH2 0x339C PUSH2 0x15F0 JUMP JUMPDEST PUSH2 0x33A4 PUSH2 0x2463 JUMP JUMPDEST SWAP2 DUP1 MLOAD PUSH2 0x33B0 DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x33B9 DUP2 PUSH2 0xFBE JUMP JUMPDEST ISZERO PUSH2 0x3745 JUMPI JUMPDEST PUSH1 0x20 SWAP2 DUP3 DUP7 ADD PUSH2 0x33CF DUP2 MLOAD PUSH2 0x5B63 JUMP JUMPDEST DUP4 PUSH2 0x3424 DUP2 DUP6 ADD SWAP9 PUSH2 0x33EE PUSH2 0xDA4 PUSH2 0xDA4 DUP13 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP13 DUP14 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x72C9818600000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x376D JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP9 DUP10 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP10 PUSH2 0x3726 JUMPI JUMPDEST POP DUP9 PUSH2 0x3441 DUP2 PUSH2 0x5B63 JUMP JUMPDEST DUP4 MLOAD PUSH2 0x344C DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x3455 DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x36AE JUMPI POP PUSH1 0x40 DUP3 ADD MLOAD SWAP1 MSTORE PUSH2 0x3494 PUSH1 0xC0 DUP9 ADD MLOAD PUSH2 0x348D PUSH2 0x3259 PUSH2 0x347E DUP8 DUP7 ADD SWAP4 DUP5 MLOAD SWAP1 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP3 PUSH1 0xA0 DUP13 ADD MLOAD SWAP1 MLOAD SWAP1 PUSH2 0x2155 JUMP JUMPDEST SWAP1 DUP11 PUSH2 0x579E JUMP JUMPDEST SWAP4 PUSH1 0x80 DUP4 ADD MLOAD SWAP7 DUP6 SWAP8 SWAP9 PUSH1 0xA0 DUP6 ADD MLOAD DUP1 DUP9 LT PUSH2 0x367E JUMPI POP JUMPDEST PUSH1 0x40 DUP6 ADD SWAP5 DUP11 DUP7 MLOAD PUSH2 0x34C4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x34CE SWAP2 PUSH2 0x4CD6 JUMP JUMPDEST PUSH1 0x60 ADD SWAP6 DUP10 DUP8 MLOAD PUSH2 0x34E5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x34EF SWAP2 PUSH2 0x16BB JUMP JUMPDEST DUP4 MLOAD DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MLOAD SWAP2 PUSH2 0x3514 SWAP4 DUP7 PUSH2 0x57CD JUMP JUMPDEST SWAP2 SWAP1 DUP2 DUP7 ADD SWAP6 PUSH1 0x40 ADD SWAP3 DUP4 MSTORE DUP6 MSTORE DUP6 MLOAD PUSH1 0x60 DUP5 ADD SWAP3 DUP14 DUP3 DUP6 MLOAD SWAP1 PUSH2 0x3537 SWAP2 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x3542 SWAP2 PUSH2 0x25E2 JUMP JUMPDEST SWAP1 MLOAD PUSH2 0x354D SWAP2 PUSH2 0xBA7 JUMP JUMPDEST PUSH2 0x3557 SWAP2 DUP6 PUSH2 0x51C8 JUMP JUMPDEST DUP6 ADD SWAP2 DUP3 MLOAD DUP12 DUP2 DUP5 MLOAD SWAP1 PUSH2 0x356A SWAP2 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x3575 SWAP2 PUSH2 0xBA7 JUMP JUMPDEST PUSH2 0x357F SWAP2 DUP4 PUSH2 0x51C8 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 DUP1 MLOAD DUP8 MLOAD PUSH2 0x35A5 SWAP2 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP2 PUSH1 0x80 ADD SWAP2 DUP3 MLOAD DUP9 MLOAD PUSH2 0x35B8 SWAP2 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x35C2 SWAP2 PUSH2 0x5C40 JUMP JUMPDEST DUP8 MLOAD PUSH2 0x35D6 SWAP1 DUP6 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE MLOAD DUP4 MLOAD PUSH2 0x35E3 SWAP2 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP1 MLOAD DUP4 MLOAD PUSH2 0x35F1 SWAP2 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x35FB SWAP2 PUSH2 0x5C40 JUMP JUMPDEST SWAP2 MLOAD PUSH2 0x360E SWAP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE MLOAD SWAP3 MLOAD SWAP4 MLOAD PUSH1 0x60 SWAP3 DUP4 ADD MLOAD SWAP2 MLOAD PUSH1 0x40 DUP1 MLOAD DUP12 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP12 SWAP1 MSTORE SWAP1 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP4 DUP3 AND SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH32 0x874B2D545CB271CDBDA4E093020C452328B24AF12382ED62C4D00F5C26709DB SWAP1 PUSH1 0x80 SWAP1 LOG4 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xFC PUSH2 0x1645 JUMP JUMPDEST PUSH32 0xE2EA151B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 DUP9 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 POP DUP2 SWAP9 POP PUSH2 0x36D5 PUSH1 0x60 PUSH2 0x36DE SWAP4 ADD MLOAD PUSH8 0xDE0B6B3A7640000 DUP2 DUP2 SUB SWAP1 DUP3 LT MUL SWAP1 DUP4 PUSH2 0x5C0C JUMP JUMPDEST SWAP1 DUP2 DUP7 MSTORE PUSH2 0x25E2 JUMP JUMPDEST SWAP7 PUSH2 0x370B PUSH2 0x36F2 PUSH1 0xC0 DUP10 ADD MLOAD DUP4 MLOAD SWAP1 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x3703 PUSH1 0xA0 DUP11 ADD MLOAD DUP5 MLOAD SWAP1 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP1 DUP11 PUSH2 0x5C2C JUMP JUMPDEST SWAP4 PUSH1 0x80 DUP4 ADD MLOAD SWAP7 DUP6 SWAP9 PUSH1 0xA0 DUP6 ADD MLOAD DUP1 DUP9 GT PUSH2 0x367E JUMPI POP PUSH2 0x34AC JUMP JUMPDEST PUSH2 0x373E SWAP2 SWAP10 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP8 PUSH0 PUSH2 0x3436 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD PUSH2 0x3766 PUSH2 0x375C DUP3 MLOAD PUSH1 0x60 DUP7 ADD MLOAD SWAP1 PUSH2 0x576B JUMP JUMPDEST DUP1 DUP7 MSTORE DUP3 MLOAD PUSH2 0xBA7 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x33BF JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0x462 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x306D JUMP JUMPDEST PUSH2 0x1A0 PUSH2 0x462 SWAP3 PUSH1 0x20 DUP4 MSTORE PUSH2 0x3797 PUSH1 0x20 DUP5 ADD DUP3 MLOAD PUSH2 0x3063 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH2 0x100 SWAP1 DUP2 DUP6 ADD MSTORE DUP2 ADD MLOAD PUSH2 0x120 SWAP1 DUP2 DUP6 ADD MSTORE DUP2 ADD MLOAD PUSH2 0x3818 PUSH2 0x140 SWAP2 DUP3 DUP7 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST DUP2 ADD MLOAD SWAP1 PUSH2 0x3834 PUSH2 0x160 SWAP3 DUP4 DUP7 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST ADD MLOAD SWAP2 PUSH2 0x180 DUP1 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x498 JUMP JUMPDEST SWAP4 SWAP6 SWAP1 SWAP2 SWAP5 SWAP3 DUP7 MLOAD PUSH2 0x3856 DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x385F DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x3AAE JUMPI DUP7 PUSH1 0x40 DUP6 ADD MLOAD SWAP2 DUP5 JUMPDEST DUP3 MLOAD SWAP5 PUSH2 0x3878 DUP7 PUSH2 0xFBE JUMP JUMPDEST PUSH1 0x40 SWAP8 DUP9 SWAP8 DUP9 DUP7 ADD MLOAD PUSH2 0x3891 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP7 PUSH1 0x60 DUP8 ADD MLOAD PUSH2 0x38A7 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP4 PUSH1 0x80 ADD SWAP3 DUP4 MLOAD DUP2 MLOAD PUSH2 0x38B9 SWAP2 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP4 MLOAD SWAP1 PUSH1 0x20 ADD MLOAD PUSH2 0x38CA SWAP2 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x20 DUP9 ADD MLOAD PUSH2 0x38E1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP8 PUSH1 0xC0 ADD MLOAD SWAP9 PUSH2 0x38EF PUSH2 0x34F JUMP JUMPDEST SWAP11 PUSH2 0x38FA SWAP1 DUP13 PUSH2 0x2FCB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x20 DUP12 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 DUP12 ADD MSTORE PUSH1 0x60 DUP10 ADD MSTORE PUSH1 0x80 DUP9 ADD MSTORE PUSH1 0xA0 DUP8 ADD MSTORE PUSH1 0xC0 DUP7 ADD MSTORE PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 DUP5 ADD DUP9 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x120 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x140 DUP4 ADD MSTORE PUSH2 0x160 DUP3 ADD MSTORE DUP2 MLOAD SWAP7 DUP8 DUP1 DUP1 SWAP4 PUSH32 0x18B6EB5500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD SWAP1 PUSH2 0x3992 SWAP2 PUSH2 0x377E JUMP JUMPDEST SUB SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS SWAP1 PUSH0 SWAP2 CALL SWAP5 DUP6 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP2 PUSH0 SWAP7 PUSH2 0x3A8A JUMPI JUMPDEST POP POP ISZERO PUSH2 0x3A62 JUMPI PUSH1 0x9 SHR PUSH1 0x1 AND ISZERO PUSH2 0x3A5C JUMPI POP DUP1 MLOAD PUSH2 0x39D0 DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x39D9 DUP2 PUSH2 0xFBE JUMP JUMPDEST ISZERO DUP1 PUSH2 0x3A4F JUMPI JUMPDEST DUP1 ISZERO PUSH2 0x3A24 JUMPI JUMPDEST PUSH2 0x39EF JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0xA0 ADD MLOAD PUSH32 0xCC0E4A9900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP PUSH1 0x1 DUP2 MLOAD PUSH2 0x3A32 DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x3A3B DUP2 PUSH2 0xFBE JUMP JUMPDEST EQ DUP1 ISZERO PUSH2 0x39E7 JUMPI POP PUSH1 0xA0 DUP2 ADD MLOAD DUP3 GT PUSH2 0x39E7 JUMP JUMPDEST POP PUSH1 0xA0 DUP2 ADD MLOAD DUP3 LT PUSH2 0x39E0 JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH32 0x15A29DEC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x3AA5 SWAP4 SWAP7 POP DUP1 SWAP2 SWAP3 POP SWAP1 RETURNDATASIZE LT PUSH2 0x3387 JUMPI PUSH2 0x3378 DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP4 SWAP1 PUSH0 DUP1 PUSH2 0x39B2 JUMP JUMPDEST DUP7 PUSH1 0x40 DUP6 ADD MLOAD SWAP2 DUP5 SWAP3 SWAP5 PUSH2 0x386C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP3 AND DUP1 SWAP3 SUB PUSH2 0x3AE5 JUMPI POP POP JUMP JUMPDEST PUSH32 0x36B18D0900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 PUSH32 0x0 GT PUSH2 0x3B3D JUMPI POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x18FE738500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 DUP2 SUB SWAP3 SWAP2 PUSH0 SGT DUP1 ISZERO DUP3 DUP6 SGT AND SWAP2 DUP5 SLT AND OR PUSH2 0x98E JUMPI JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH0 DUP4 DUP3 ADD SWAP4 DUP5 SLT SWAP2 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x98E JUMPI JUMP JUMPDEST SWAP4 SWAP1 SWAP2 PUSH2 0x3BB1 DUP6 PUSH2 0xFBE JUMP JUMPDEST DUP5 ISZERO DUP1 ISZERO PUSH2 0x3F73 JUMPI PUSH2 0x3BFF PUSH1 0x20 PUSH2 0x3BC7 DUP8 PUSH2 0xB99 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xEF8B30F700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x223 JUMPI PUSH2 0x3C24 SWAP2 PUSH0 SWAP2 PUSH2 0x3F54 JUMPI JUMPDEST POP PUSH2 0xB99 JUMP JUMPDEST SWAP5 SWAP6 JUMPDEST PUSH2 0x3C42 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP2 PUSH2 0x3C4C PUSH2 0x5954 JUMP JUMPDEST PUSH2 0x3F4C JUMPI DUP7 SWAP3 DUP9 SWAP3 SWAP1 SWAP2 PUSH1 0x80 DUP4 SWAP1 SHR SWAP2 DUP6 DUP4 LT PUSH2 0x3CCA JUMPI POP POP POP SWAP3 PUSH2 0x3CC4 DUP3 PUSH2 0x3CA1 DUP7 PUSH2 0x3C9C PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 PUSH2 0xFC SWAP12 PUSH1 0x80 SHR SUB SWAP4 AND PUSH2 0x25E2 JUMP JUMPDEST PUSH2 0x5C40 JUMP JUMPDEST SWAP8 DUP9 PUSH2 0x3CBE DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0x4CD6 JUMP JUMPDEST AND PUSH2 0x16BB JUMP JUMPDEST SWAP1 SWAP3 SWAP4 POP PUSH2 0x3CD9 SWAP2 SWAP5 POP PUSH2 0xFBE JUMP JUMPDEST ISZERO PUSH2 0x3DF4 JUMPI PUSH2 0x3D01 PUSH2 0x3CFC PUSH2 0x3CEE DUP6 DUP5 PUSH2 0x5F06 JUMP JUMPDEST PUSH2 0x3CF7 DUP11 PUSH2 0x4D4E JUMP JUMPDEST PUSH2 0x3B8A JUMP JUMPDEST PUSH2 0x5D67 JUMP JUMPDEST SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP4 PUSH2 0x3D18 DUP2 DUP7 DUP10 PUSH2 0x5EB7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x6E553F6500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP5 PUSH1 0x20 SWAP1 DUP7 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 PUSH0 SWAP1 GAS CALL DUP1 ISZERO PUSH2 0x223 JUMPI PUSH2 0x3CA1 DUP10 SWAP6 PUSH2 0x3DCF DUP8 PUSH2 0x3DC4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 SWAP7 DUP9 DUP16 DUP10 PUSH2 0xFC SWAP16 DUP6 SWAP15 PUSH2 0x3DBE DUP16 PUSH2 0x3CC4 SWAP16 PUSH2 0x3DC4 SWAP7 PUSH2 0x3DC9 SWAP10 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 PUSH0 SWAP2 PUSH2 0x3DD5 JUMPI JUMPDEST POP SWAP11 DUP12 SWAP4 JUMPDEST AND SWAP1 PUSH2 0x3DB9 DUP3 DUP3 PUSH2 0x5D9C JUMP JUMPDEST PUSH2 0x5F9B JUMP JUMPDEST AND PUSH2 0x25E2 JUMP JUMPDEST PUSH2 0xBA7 JUMP JUMPDEST SWAP5 PUSH2 0x25E2 JUMP JUMPDEST SWAP1 PUSH2 0x5C40 JUMP JUMPDEST PUSH2 0x3DEE SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH0 PUSH2 0x3DA8 JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x3E14 PUSH2 0x3CFC PUSH2 0x3E06 DUP4 DUP6 PUSH2 0x5CA4 JUMP JUMPDEST PUSH2 0x3E0F DUP10 PUSH2 0x4D4E JUMP JUMPDEST PUSH2 0x3B72 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB3D7F6B900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP4 PUSH1 0x20 SWAP4 SWAP3 SWAP1 SWAP2 DUP5 DUP2 PUSH1 0x24 DUP2 DUP10 GAS STATICCALL DUP1 ISZERO PUSH2 0x223 JUMPI PUSH2 0x3E73 SWAP2 PUSH0 SWAP2 PUSH2 0x3F2F JUMPI JUMPDEST POP DUP7 DUP11 PUSH2 0x5EB7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x94BF804D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP5 DUP5 SWAP1 DUP7 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 PUSH0 SWAP1 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x223 JUMPI PUSH2 0xFC SWAP7 PUSH2 0x3DCF DUP12 PUSH2 0x3DC4 DUP6 DUP16 SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 DUP10 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 SWAP16 SWAP11 DUP5 SWAP16 DUP16 SWAP7 PUSH2 0x3CC4 SWAP16 SWAP8 PUSH2 0x3DC4 SWAP7 PUSH2 0x3CA1 SWAP16 SWAP10 PUSH2 0x3DC9 SWAP11 PUSH2 0x3DBE SWAP6 PUSH0 SWAP3 PUSH2 0x3F12 JUMPI JUMPDEST POP POP SWAP9 DUP10 SWAP3 PUSH2 0x3DAD JUMP JUMPDEST PUSH2 0x3F28 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x3F08 JUMP JUMPDEST PUSH2 0x3F46 SWAP2 POP DUP7 RETURNDATASIZE DUP9 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH0 PUSH2 0x3E6B JUMP JUMPDEST POP SWAP1 SWAP4 POP POP POP JUMP JUMPDEST PUSH2 0x3F6D SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH0 PUSH2 0x3C1E JUMP JUMPDEST PUSH2 0x3FB9 PUSH1 0x20 PUSH2 0x3F81 DUP8 PUSH2 0x25D4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xB3D7F6B900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x223 JUMPI PUSH2 0x3FDE SWAP2 PUSH0 SWAP2 PUSH2 0x3FE4 JUMPI JUMPDEST POP PUSH2 0x25D4 JUMP JUMPDEST SWAP6 PUSH2 0x3C27 JUMP JUMPDEST PUSH2 0x3FFD SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH0 PUSH2 0x3FD8 JUMP JUMPDEST SWAP4 SWAP1 PUSH2 0x400E DUP6 PUSH2 0xFBE JUMP JUMPDEST DUP5 ISZERO SWAP5 DUP6 ISZERO PUSH2 0x42FD JUMPI PUSH2 0x405D PUSH1 0x20 PUSH2 0x4025 DUP8 PUSH2 0xB99 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x4CDAD50600000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x223 JUMPI PUSH2 0x4081 SWAP2 PUSH0 SWAP2 PUSH2 0x3F54 JUMPI POP PUSH2 0xB99 JUMP JUMPDEST SWAP5 SWAP6 JUMPDEST PUSH2 0x409F DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP2 PUSH2 0x40A9 PUSH2 0x5954 JUMP JUMPDEST PUSH2 0x3F4C JUMPI DUP8 SWAP4 DUP8 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP5 AND SWAP2 DUP7 DUP4 LT PUSH2 0x4129 JUMPI POP POP POP SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x40FF DUP4 DUP7 PUSH2 0xFC SWAP9 PUSH2 0x40F7 DUP7 PUSH2 0x4124 SWAP9 PUSH1 0x80 SHR PUSH2 0x25E2 JUMP JUMPDEST SWAP3 AND SUB PUSH2 0x5C40 JUMP JUMPDEST SWAP8 DUP9 PUSH2 0x411C DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE JUMPDEST AND PUSH2 0x4CD6 JUMP JUMPDEST PUSH2 0x16BB JUMP JUMPDEST SWAP2 SWAP7 POP SWAP3 SWAP5 POP PUSH2 0x4139 SWAP2 POP PUSH2 0xFBE JUMP JUMPDEST ISZERO PUSH2 0x4237 JUMPI PUSH2 0x414E PUSH2 0x3CFC PUSH2 0x3CEE DUP8 DUP6 PUSH2 0x5CA4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP4 SWAP1 PUSH1 0x20 DUP6 PUSH1 0x64 DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND GAS CALL DUP1 ISZERO PUSH2 0x223 JUMPI PUSH2 0x41F5 DUP10 SWAP6 PUSH2 0x3DCF DUP5 PUSH2 0x3DC4 DUP15 PUSH2 0x41EC DUP12 DUP16 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xFC SWAP16 SWAP13 PUSH2 0x41E7 DUP16 SWAP14 PUSH2 0x4124 SWAP16 SWAP5 DUP9 SWAP16 DUP6 SWAP16 PUSH2 0x3DC4 SWAP8 PUSH0 SWAP2 PUSH2 0x4218 JUMPI JUMPDEST POP SWAP6 DUP7 SWAP3 JUMPDEST AND SWAP1 PUSH2 0x5FE0 JUMP JUMPDEST PUSH2 0x25E2 JUMP JUMPDEST SWAP5 PUSH1 0x80 SHR PUSH2 0x25E2 JUMP JUMPDEST SWAP8 DUP9 PUSH2 0x4212 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0x411E JUMP JUMPDEST PUSH2 0x4231 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH0 PUSH2 0x41DB JUMP JUMPDEST PUSH2 0x4247 PUSH2 0x3CFC PUSH2 0x3E06 DUP8 DUP6 PUSH2 0x5F06 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB460AF9400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 PUSH1 0x20 DUP3 PUSH1 0x64 DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x223 JUMPI PUSH2 0x41F5 DUP10 SWAP6 PUSH2 0x3DCF PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x3DC4 DUP15 PUSH2 0x41EC DUP12 DUP16 DUP11 PUSH2 0xFC SWAP16 PUSH2 0x41E7 DUP16 SWAP4 PUSH2 0x4124 SWAP16 SWAP15 DUP9 SWAP16 SWAP6 DUP12 SWAP16 SWAP7 PUSH2 0x3DC4 SWAP8 PUSH0 SWAP2 PUSH2 0x42DE JUMPI JUMPDEST POP SWAP12 DUP13 SWAP4 PUSH2 0x41E0 JUMP JUMPDEST PUSH2 0x42F7 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH0 PUSH2 0x42D5 JUMP JUMPDEST PUSH2 0x4343 PUSH1 0x20 PUSH2 0x430B DUP8 PUSH2 0x25D4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xA28A47700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x223 JUMPI PUSH2 0x4367 SWAP2 PUSH0 SWAP2 PUSH2 0x3FE4 JUMPI POP PUSH2 0x25D4 JUMP JUMPDEST SWAP6 PUSH2 0x4084 JUMP JUMPDEST DUP1 TLOAD SWAP1 PUSH1 0x1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x98E JUMPI TSTORE JUMP JUMPDEST SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 TSTORE JUMP JUMPDEST SWAP2 SWAP1 DUP3 MLOAD SWAP2 PUSH2 0x43AA DUP3 MLOAD DUP3 MLOAD SWAP1 DUP6 PUSH2 0x50A9 JUMP JUMPDEST PUSH2 0x43B3 DUP4 PUSH2 0x2124 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x43C5 JUMPI POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x43F7 PUSH2 0x43DE PUSH1 0x1 SWAP5 DUP7 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x321A PUSH2 0x43EC DUP6 DUP11 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x21ED DUP7 DUP11 PUSH2 0x2155 JUMP JUMPDEST DIV PUSH2 0x4402 DUP3 DUP10 PUSH2 0x2155 JUMP JUMPDEST MSTORE ADD PUSH2 0x43B6 JUMP JUMPDEST PUSH1 0x5 GT ISZERO PUSH2 0xFC8 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0xFC8 JUMPI MSTORE JUMP JUMPDEST SWAP6 SWAP2 SWAP4 PUSH2 0x4451 PUSH2 0x462 SWAP9 SWAP7 SWAP5 PUSH2 0x4462 SWAP4 PUSH2 0x2297 SWAP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP12 MSTORE AND PUSH1 0x20 DUP11 ADD MSTORE PUSH1 0x40 DUP10 ADD SWAP1 PUSH2 0x4413 JUMP JUMPDEST PUSH1 0xE0 PUSH1 0x60 DUP9 ADD MSTORE PUSH1 0xE0 DUP8 ADD SWAP1 PUSH2 0x465 JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP7 ADD MSTORE DUP5 DUP3 SUB PUSH1 0xA0 DUP7 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST SWAP3 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 SWAP6 SWAP7 SWAP4 SWAP7 PUSH2 0x44EF PUSH2 0x4499 DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH1 0x80 DUP9 ADD MLOAD SWAP8 PUSH2 0x44A9 DUP10 PUSH2 0x4409 JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x80 PUSH1 0x60 DUP4 ADD MLOAD SWAP4 ADD MLOAD SWAP2 ADD MLOAD SWAP2 PUSH1 0x40 MLOAD SWAP12 DUP13 SWAP11 DUP12 SWAP10 DUP11 SWAP8 PUSH32 0x45421EC700000000000000000000000000000000000000000000000000000000 DUP10 MSTORE PUSH1 0x4 DUP10 ADD PUSH2 0x4420 JUMP JUMPDEST SUB SWAP4 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP2 PUSH2 0x4532 JUMPI JUMPDEST POP ISZERO PUSH2 0x450A JUMPI JUMP JUMPDEST PUSH32 0xB2EB65200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x454B SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x2388 JUMPI PUSH2 0x237A DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH0 PUSH2 0x4502 JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP4 DUP4 SUB SLT PUSH2 0xED JUMPI DUP3 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP2 GT PUSH2 0xED JUMPI DUP4 PUSH2 0x457C SWAP2 DUP7 ADD PUSH2 0x2481 JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP2 ADD MLOAD SWAP4 PUSH1 0x40 DUP3 ADD MLOAD DUP5 DUP2 GT PUSH2 0xED JUMPI DUP2 PUSH2 0x2571 SWAP2 DUP5 ADD PUSH2 0x2481 JUMP JUMPDEST SWAP4 PUSH2 0x45C5 PUSH2 0x25C6 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x462 SWAP9 SWAP7 SWAP5 AND DUP8 MSTORE PUSH1 0xA0 PUSH1 0x20 DUP9 ADD MSTORE PUSH1 0xA0 DUP8 ADD SWAP1 PUSH2 0x465 JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP7 ADD MSTORE DUP5 DUP3 SUB PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x45E2 PUSH2 0x15F0 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x45EC PUSH2 0x2463 JUMP JUMPDEST SWAP2 PUSH1 0x20 DUP6 ADD PUSH2 0x45FF DUP2 MLOAD MLOAD DUP1 DUP7 MSTORE PUSH2 0x2124 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD SWAP6 DUP7 MLOAD PUSH2 0x460F DUP2 PUSH2 0x4409 JUMP JUMPDEST PUSH2 0x4618 DUP2 PUSH2 0x4409 JUMP JUMPDEST PUSH2 0x4889 JUMPI POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x462C DUP7 MLOAD PUSH2 0x2124 JUMP JUMPDEST SWAP5 PUSH2 0x4650 DUP3 PUSH1 0x80 DUP12 ADD MLOAD PUSH2 0x464A PUSH2 0x268F DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x640B JUMP JUMPDEST SWAP10 JUMPDEST PUSH1 0x60 DUP7 ADD MLOAD DUP1 DUP5 LT PUSH2 0x4859 JUMPI POP PUSH2 0x466B DUP4 SWAP10 SWAP9 SWAP10 PUSH2 0x578D JUMP JUMPDEST PUSH1 0x20 DUP10 ADD SWAP8 PUSH0 JUMPDEST DUP13 DUP12 MLOAD DUP3 LT ISZERO PUSH2 0x4798 JUMPI DUP2 PUSH2 0x4686 SWAP2 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x4690 DUP2 PUSH2 0x578D JUMP JUMPDEST PUSH2 0x469A DUP3 DUP9 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x4787 JUMPI PUSH2 0x46BF SWAP1 DUP14 PUSH2 0x46B8 DUP5 PUSH1 0xA0 PUSH2 0x2788 DUP3 PUSH1 0xC0 DUP7 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP2 PUSH2 0x5C2C JUMP JUMPDEST DUP1 PUSH2 0x46CA DUP4 DUP10 PUSH2 0x2155 JUMP JUMPDEST MSTORE JUMPDEST PUSH2 0x46DA PUSH2 0x1170 DUP4 DUP11 MLOAD PUSH2 0x2155 JUMP JUMPDEST PUSH1 0x40 DUP11 ADD PUSH2 0x46E9 DUP5 DUP3 MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD DUP4 GT PUSH2 0x473B JUMPI POP DUP14 DUP4 PUSH2 0x1E70 DUP15 PUSH2 0x472D DUP16 SWAP7 DUP16 SWAP8 PUSH2 0x4718 DUP7 PUSH2 0x2814 DUP2 DUP12 PUSH1 0x1 SWAP15 SWAP14 PUSH2 0x27F1 DUP9 PUSH2 0x4735 SWAP16 PUSH2 0x4CD6 JUMP JUMPDEST MSTORE PUSH2 0x4727 DUP6 PUSH1 0x60 DUP9 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x25E2 JUMP JUMPDEST SWAP1 MLOAD SWAP1 PUSH2 0xBA7 JUMP JUMPDEST ADD PUSH2 0x4672 JUMP JUMPDEST SWAP2 PUSH2 0x474A DUP5 PUSH2 0x11BD SWAP5 MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH32 0x8EDA85E400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST POP PUSH2 0x4792 DUP2 DUP8 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x46CC JUMP JUMPDEST POP POP SWAP4 SWAP7 SWAP5 POP SWAP7 POP SWAP7 POP SWAP7 PUSH2 0x47B8 SWAP1 PUSH2 0x28BF DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH32 0xA26A52D8D53702BBA7F137907B8E1F99FF87F6D450144270CA25E72481CCA871 PUSH2 0x47EA DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 PUSH2 0x480B DUP10 PUSH1 0x20 DUP8 ADD SWAP6 PUSH2 0x4805 DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x6452 JUMP JUMPDEST PUSH2 0x4831 PUSH2 0x268F PUSH2 0x4825 PUSH2 0x2965 DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 MLOAD SWAP7 PUSH2 0x1170 DUP9 PUSH2 0x4409 JUMP JUMPDEST SWAP3 PUSH2 0x29A7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH2 0x4847 DUP9 PUSH2 0x4409 JUMP JUMPDEST DUP9 DUP5 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP6 AND SWAP9 AND SWAP7 DUP5 PUSH2 0x25EF JUMP JUMPDEST PUSH32 0x8D261D5D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 DUP5 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH1 0x3 DUP8 MLOAD PUSH2 0x4896 DUP2 PUSH2 0x4409 JUMP JUMPDEST PUSH2 0x489F DUP2 PUSH2 0x4409 JUMP JUMPDEST SUB PUSH2 0x48C1 JUMPI PUSH2 0x48AE DUP9 MLOAD PUSH2 0x63D6 JUMP JUMPDEST PUSH2 0x48B8 DUP2 MLOAD PUSH2 0x2124 JUMP JUMPDEST SWAP5 PUSH0 SWAP2 SWAP10 PUSH2 0x4652 JUMP JUMPDEST SWAP8 PUSH1 0x1 DUP8 MLOAD PUSH2 0x48CF DUP2 PUSH2 0x4409 JUMP JUMPDEST PUSH2 0x48D8 DUP2 PUSH2 0x4409 JUMP JUMPDEST SUB PUSH2 0x4940 JUMPI PUSH2 0x48E7 DUP9 MLOAD PUSH2 0x528D JUMP JUMPDEST PUSH2 0x4938 DUP10 PUSH2 0x48F9 DUP5 PUSH1 0x40 DUP9 ADD MLOAD PUSH2 0x6172 JUMP JUMPDEST PUSH1 0x80 DUP11 ADD MLOAD SWAP1 PUSH2 0x4913 PUSH2 0x268F DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x491D DUP13 MLOAD PUSH2 0x5350 JUMP JUMPDEST SWAP2 PUSH2 0x4932 PUSH2 0xDA4 DUP11 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP4 PUSH2 0x618D JUMP JUMPDEST SWAP6 SWAP1 SWAP2 PUSH2 0x4652 JUMP JUMPDEST SWAP8 SWAP4 PUSH1 0x2 DUP8 MLOAD PUSH2 0x494F DUP2 PUSH2 0x4409 JUMP JUMPDEST PUSH2 0x4958 DUP2 PUSH2 0x4409 JUMP JUMPDEST SUB PUSH2 0x49C4 JUMPI SWAP8 DUP8 SWAP9 PUSH2 0x496A DUP10 MLOAD PUSH2 0x528D JUMP JUMPDEST PUSH1 0x60 DUP6 ADD MLOAD SWAP2 PUSH2 0x4979 DUP8 PUSH2 0x52C1 JUMP JUMPDEST PUSH2 0x49BE PUSH2 0x49B4 PUSH1 0x40 DUP12 ADD SWAP3 DUP1 DUP5 MSTORE DUP10 DUP12 SWAP16 DUP9 PUSH1 0x80 DUP3 ADD MLOAD SWAP4 PUSH2 0x49AE PUSH2 0xDA4 PUSH2 0x2B09 PUSH2 0x2B02 PUSH2 0x268F DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH2 0x60A7 JUMP JUMPDEST SWAP1 SWAP3 MLOAD SWAP1 SWAP10 PUSH2 0x2155 JUMP JUMPDEST MSTORE PUSH2 0x4652 JUMP JUMPDEST POP PUSH1 0x4 DUP7 MLOAD PUSH2 0x49D2 DUP2 PUSH2 0x4409 JUMP JUMPDEST PUSH2 0x49DB DUP2 PUSH2 0x4409 JUMP JUMPDEST SUB PUSH2 0x4A9C JUMPI PUSH2 0x49EA DUP8 MLOAD PUSH2 0x6072 JUMP JUMPDEST PUSH0 PUSH2 0x4A02 PUSH2 0xDA4 PUSH2 0xDA4 DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP6 ADD MLOAD SWAP1 PUSH1 0x80 DUP11 ADD MLOAD SWAP2 DUP4 PUSH1 0xA0 DUP9 ADD MLOAD SWAP9 PUSH2 0x4A4F PUSH1 0x40 MLOAD SWAP11 DUP12 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xE4C4366300000000000000000000000000000000000000000000000000000000 DUP7 MSTORE CALLER PUSH1 0x4 DUP8 ADD PUSH2 0x459B JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP1 PUSH0 SWAP6 PUSH0 SWAP2 PUSH0 SWAP2 PUSH2 0x4A71 JUMPI JUMPDEST POP SWAP1 SWAP6 SWAP2 SWAP10 PUSH2 0x4652 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x4A92 SWAP2 SWAP5 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x4A8A DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x4551 JUMP JUMPDEST SWAP2 SWAP6 SWAP3 SWAP2 PUSH0 PUSH2 0x4A67 JUMP JUMPDEST PUSH32 0x6C02B39500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP7 SWAP3 PUSH2 0x462 SWAP9 SWAP7 SWAP5 PUSH2 0x4B1A SWAP4 PUSH2 0x4AFE PUSH2 0x4B0C SWAP4 PUSH2 0x2D78 SWAP10 SWAP6 PUSH2 0x100 SWAP4 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 MSTORE AND PUSH1 0x20 DUP14 ADD MSTORE PUSH1 0x40 DUP13 ADD SWAP1 PUSH2 0x4413 JUMP JUMPDEST DUP1 PUSH1 0x60 DUP12 ADD MSTORE DUP10 ADD SWAP1 PUSH2 0x465 JUMP JUMPDEST SWAP1 DUP8 DUP3 SUB PUSH1 0x80 DUP10 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST SWAP2 PUSH1 0xA0 DUP7 ADD MSTORE DUP5 DUP3 SUB PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST SWAP5 SWAP4 SWAP2 SWAP6 SWAP3 SWAP7 SWAP1 DUP5 MLOAD PUSH2 0x4B46 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD SWAP2 PUSH2 0x4B55 DUP4 PUSH2 0x4409 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD PUSH1 0xA0 DUP9 ADD MLOAD SWAP1 PUSH1 0x40 SWAP7 DUP13 PUSH1 0x40 MLOAD SWAP13 DUP14 SWAP8 DUP9 SWAP8 PUSH32 0x976907CC00000000000000000000000000000000000000000000000000000000 DUP10 MSTORE PUSH1 0x4 DUP10 ADD SWAP8 PUSH2 0x4B9D SWAP9 PUSH2 0x4AC4 JUMP JUMPDEST SUB SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 DUP2 GAS PUSH0 SWAP5 DUP6 SWAP2 CALL SWAP5 DUP6 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP1 PUSH0 SWAP7 PUSH2 0x4CB7 JUMPI JUMPDEST POP ISZERO DUP1 ISZERO PUSH2 0x4CAB JUMPI JUMPDEST PUSH2 0x4C83 JUMPI PUSH1 0x1 DUP1 SWAP5 PUSH1 0x9 SHR AND ISZERO PUSH2 0x4BE9 JUMPI SWAP1 SWAP2 SWAP3 DUP1 SWAP5 SWAP6 POP PUSH0 SWAP1 JUMPDEST PUSH2 0x4BF1 JUMPI JUMPDEST POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x4C7E JUMPI PUSH2 0x4C04 DUP2 DUP8 PUSH2 0x2155 JUMP JUMPDEST MLOAD DUP3 DUP6 ADD SWAP1 PUSH2 0x4C14 DUP4 DUP4 MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD LT PUSH2 0x4C23 JUMPI POP DUP5 ADD DUP5 PUSH2 0x4BE4 JUMP JUMPDEST DUP7 SWAP1 PUSH2 0x4C41 DUP4 PUSH2 0x2E9B DUP2 PUSH2 0x2E95 PUSH2 0x1170 PUSH2 0x11BD SWAP9 PUSH1 0x20 DUP13 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH32 0xCEFA3AFA00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST PUSH2 0x4BE9 JUMP JUMPDEST PUSH32 0xE124916500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP DUP5 MLOAD DUP7 MLOAD EQ ISZERO PUSH2 0x4BC9 JUMP JUMPDEST SWAP1 POP PUSH2 0x4CCE SWAP2 SWAP6 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2F30 DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP5 SWAP1 PUSH0 PUSH2 0x4BC0 JUMP JUMPDEST PUSH2 0x4CE2 PUSH2 0xFC SWAP3 PUSH2 0x4D4E JUMP JUMPDEST SWAP1 PUSH2 0x4DA3 JUMP JUMPDEST SWAP1 PUSH0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x4D19 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x4D07 DUP4 DUP7 PUSH2 0x2155 JUMP JUMPDEST MLOAD AND SWAP1 DUP4 AND EQ PUSH2 0x3A5C JUMPI PUSH1 0x1 ADD PUSH2 0x4CEB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 PUSH32 0xDDEF98D700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x4D78 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 ISZERO PUSH2 0x4E60 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 SWAP2 AND DUP1 PUSH0 MSTORE DUP2 PUSH1 0x20 MSTORE PUSH2 0x4DEA PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP4 DUP5 PUSH2 0x3B8A JUMP JUMPDEST SWAP3 DUP4 PUSH2 0x4E2E JUMPI POP PUSH32 0x0 DUP1 TLOAD SWAP1 PUSH0 NOT DUP3 ADD SWAP2 DUP3 GT PUSH2 0x98E JUMPI TSTORE JUMPDEST PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TSTORE JUMP JUMPDEST PUSH2 0x4E22 JUMPI PUSH2 0x4E5B PUSH32 0x0 PUSH2 0x436D JUMP JUMPDEST PUSH2 0x4E22 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP2 DUP4 DUP2 AND DUP5 DUP5 AND SUB PUSH2 0x4E82 JUMPI POP POP POP POP PUSH0 NOT SWAP1 JUMP JUMPDEST PUSH2 0x4EAC SWAP4 PUSH2 0x1762 SWAP3 AND PUSH0 MSTORE PUSH1 0x10 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP2 DUP3 DUP2 SLOAD SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP3 PUSH1 0x20 DUP4 ADD SWAP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP4 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x4EE4 JUMPI POP POP POP PUSH2 0xFC SWAP3 POP SUB DUP4 PUSH2 0x2FF JUMP JUMPDEST DUP6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 MSTORE PUSH1 0x1 SWAP6 DUP7 ADD SWAP6 DUP9 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x4ECE JUMP JUMPDEST SWAP1 PUSH2 0x4F11 DUP3 PUSH2 0x370 JUMP JUMPDEST PUSH2 0x4F1E PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x2FF JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x4F2E DUP3 SWAP5 PUSH2 0x370 JUMP JUMPDEST ADD SWAP1 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x4F3E JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH2 0x4F49 PUSH2 0x2463 JUMP JUMPDEST DUP3 DUP3 DUP6 ADD ADD MSTORE ADD PUSH2 0x4F32 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD PUSH2 0x4F62 DUP2 PUSH2 0x2E3 JUMP JUMPDEST PUSH1 0x40 PUSH1 0xFF DUP3 SWAP5 SLOAD DUP2 DUP2 AND PUSH2 0x4F75 DUP2 PUSH2 0xFBE JUMP JUMPDEST DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 PUSH1 0x8 SHR AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0xA8 SHR AND ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD DUP1 MLOAD MLOAD SWAP4 PUSH0 JUMPDEST DUP6 DUP2 LT PUSH2 0x4FAD JUMPI POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x4FC1 PUSH2 0x1170 PUSH1 0x1 SWAP4 PUSH1 0x20 DUP9 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST PUSH2 0x4FEC PUSH2 0x4FD6 DUP4 DUP10 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x4FF7 DUP4 DUP8 MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD DUP2 GT PUSH2 0x503E JUMPI JUMPDEST POP POP PUSH2 0x5025 PUSH2 0x500F DUP3 DUP7 MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x501E DUP4 PUSH1 0x80 DUP10 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x5C40 JUMP JUMPDEST PUSH2 0x5037 DUP3 DUP9 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE ADD PUSH2 0x4F9E JUMP JUMPDEST PUSH2 0x5089 PUSH2 0x50A1 SWAP2 PUSH2 0x5083 PUSH2 0x507A PUSH2 0x5066 DUP7 DUP11 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP3 PUSH2 0x5073 DUP9 DUP13 MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0xBA7 JUMP JUMPDEST DUP3 PUSH1 0x80 SHR PUSH2 0x25E2 JUMP JUMPDEST SWAP1 PUSH2 0x66E2 JUMP JUMPDEST SWAP2 DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH0 DUP1 PUSH2 0x4FFF JUMP JUMPDEST DUP2 EQ DUP1 ISZERO SWAP3 SWAP2 SWAP1 PUSH2 0x50BD JUMPI JUMPDEST POP POP PUSH2 0x20FC JUMPI JUMP JUMPDEST EQ ISZERO SWAP1 POP PUSH0 DUP1 PUSH2 0x50B5 JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x98E JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x98E JUMPI JUMP JUMPDEST DUP1 MLOAD PUSH2 0x5103 DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x510C DUP2 PUSH2 0xFBE JUMP JUMPDEST DUP1 PUSH2 0x511F JUMPI POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x512B PUSH1 0x1 SWAP3 PUSH2 0xFBE JUMP JUMPDEST SUB PUSH2 0x51A0 JUMPI PUSH1 0x20 PUSH2 0x514A PUSH2 0xDA4 DUP3 PUSH1 0x4 SWAP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0x679AEFCE00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP2 PUSH2 0x5187 JUMPI POP SWAP1 JUMP JUMPDEST PUSH2 0x462 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH32 0xDF45063200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 PUSH1 0x80 PUSH8 0xDE0B6B3A7640000 PUSH2 0x520C PUSH2 0x2FD4 SWAP5 DUP1 PUSH2 0x51EB DUP7 PUSH1 0x60 DUP11 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MSTORE PUSH2 0x321A PUSH2 0x51FD DUP7 PUSH1 0xC0 DUP11 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x21ED DUP8 PUSH1 0xA0 DUP12 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST DIV SWAP4 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x80 PUSH2 0x5250 PUSH2 0x2FD4 SWAP4 DUP1 PUSH2 0x522F DUP6 PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MSTORE PUSH2 0x21F4 PUSH2 0x5241 DUP6 PUSH1 0xC0 DUP10 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x21ED DUP7 PUSH1 0xA0 DUP11 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST SWAP4 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST PUSH1 0x6 SHR PUSH1 0x1 AND ISZERO PUSH2 0x5265 JUMPI JUMP JUMPDEST PUSH32 0xCF0A95C000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x4 SHR PUSH1 0x1 AND PUSH2 0x5299 JUMPI JUMP JUMPDEST PUSH32 0xD4F5779C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 MLOAD SWAP1 DUP2 SWAP1 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x5303 JUMPI POP POP DUP2 LT ISZERO PUSH2 0x52DB JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x7E46BDDC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x530D DUP2 DUP4 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x531B JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x52C8 JUMP JUMPDEST SWAP3 DUP3 SUB PUSH2 0x5328 JUMPI DUP3 PUSH2 0x5313 JUMP JUMPDEST PUSH32 0x6B8C3BE500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH3 0xFFFFFF SWAP1 PUSH1 0x12 SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x98E JUMPI SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x20 PUSH2 0x538A PUSH0 SWAP3 PUSH1 0x40 DUP7 MSTORE PUSH1 0x40 DUP7 ADD SWAP1 PUSH2 0x465 JUMP JUMPDEST SWAP4 ADD MSTORE JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x20 PUSH2 0x538A PUSH1 0x1 SWAP3 PUSH1 0x40 DUP7 MSTORE PUSH1 0x40 DUP7 ADD SWAP1 PUSH2 0x465 JUMP JUMPDEST SWAP1 SWAP5 SWAP3 SWAP2 SWAP3 DUP2 MLOAD SWAP5 PUSH2 0x53B8 DUP7 PUSH2 0x2124 JUMP JUMPDEST SWAP5 PUSH0 JUMPDEST DUP8 DUP2 LT PUSH2 0x55A1 JUMPI POP PUSH2 0x53D1 SWAP1 PUSH2 0x2A6E DUP10 DUP9 PUSH2 0x2155 JUMP JUMPDEST PUSH2 0x53DB DUP9 DUP8 PUSH2 0x2155 JUMP JUMPDEST MSTORE PUSH1 0x40 MLOAD SWAP5 PUSH32 0x984DE9E800000000000000000000000000000000000000000000000000000000 SWAP3 DUP4 DUP8 MSTORE PUSH1 0x20 DUP8 DUP1 PUSH2 0x5416 DUP9 PUSH1 0x4 DUP4 ADD PUSH2 0x5373 JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP8 PUSH2 0x5580 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP5 DUP5 DUP7 MSTORE PUSH1 0x20 DUP7 DUP1 PUSH2 0x544B DUP7 PUSH1 0x4 DUP4 ADD PUSH2 0x5373 JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x223 JUMPI PUSH2 0x3DC4 PUSH2 0x54AD DUP13 PUSH2 0x5073 PUSH2 0x54A6 PUSH2 0x54C3 SWAP7 PUSH2 0x549F DUP16 PUSH2 0x548F PUSH2 0x54F9 SWAP16 SWAP2 PUSH1 0x20 SWAP15 DUP9 SWAP4 PUSH0 SWAP2 PUSH2 0x5561 JUMPI JUMPDEST POP PUSH2 0x5BB3 JUMP JUMPDEST SWAP3 PUSH2 0x549A DUP5 DUP14 PUSH2 0x66FE JUMP JUMPDEST PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x576B JUMP JUMPDEST SWAP2 DUP9 PUSH2 0x2155 JUMP JUMPDEST SWAP2 PUSH8 0xDE0B6B3A7640000 DUP2 DUP2 SUB SWAP2 LT MUL DUP3 PUSH2 0x5BB3 JUMP JUMPDEST SWAP4 PUSH2 0x54D2 DUP6 PUSH2 0x2A6E DUP13 DUP7 PUSH2 0x2155 JUMP JUMPDEST PUSH2 0x54DC DUP12 DUP6 PUSH2 0x2155 JUMP JUMPDEST MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD DUP1 SWAP8 DUP2 SWAP6 DUP3 SWAP5 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x538F JUMP JUMPDEST SUB SWAP3 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x223 JUMPI PUSH2 0x5535 SWAP6 PUSH2 0x552F SWAP4 PUSH0 SWAP4 PUSH2 0x5538 JUMPI JUMPDEST POP PUSH2 0x5521 PUSH2 0x5528 SWAP2 PUSH2 0x2124 JUMP JUMPDEST SWAP8 DUP9 PUSH2 0x2155 JUMP JUMPDEST MSTORE DUP4 PUSH2 0xBA7 JUMP JUMPDEST SWAP1 PUSH2 0x5C0C JUMP JUMPDEST SWAP2 JUMP JUMPDEST PUSH2 0x5528 SWAP2 SWAP4 POP PUSH2 0x5559 PUSH2 0x5521 SWAP2 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP4 SWAP2 POP PUSH2 0x5514 JUMP JUMPDEST PUSH1 0x20 PUSH2 0x557A SWAP3 POP RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH0 PUSH2 0x5489 JUMP JUMPDEST PUSH2 0x559A SWAP2 SWAP8 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP6 PUSH0 PUSH2 0x5432 JUMP JUMPDEST DUP1 PUSH2 0x55B7 PUSH2 0x55B1 PUSH1 0x1 SWAP4 DUP9 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0xB99 JUMP JUMPDEST PUSH2 0x55C1 DUP3 DUP11 PUSH2 0x2155 JUMP JUMPDEST MSTORE ADD PUSH2 0x53BB JUMP JUMPDEST PUSH2 0x55E0 PUSH1 0x40 SWAP3 SWAP6 SWAP5 SWAP4 SWAP6 PUSH1 0x60 DUP4 MSTORE PUSH1 0x60 DUP4 ADD SWAP1 PUSH2 0x465 JUMP JUMPDEST SWAP5 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 SWAP5 SWAP2 DUP4 SUB SWAP2 DUP4 DUP4 GT PUSH2 0x98E JUMPI PUSH1 0x20 PUSH2 0x5650 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH2 0x560F DUP8 DUP8 PUSH2 0x5BB3 JUMP JUMPDEST PUSH2 0x5619 DUP2 DUP4 PUSH2 0x66FE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x16A0B3E000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP14 DUP11 PUSH1 0x4 DUP6 ADD PUSH2 0x55C8 JUMP JUMPDEST SUB SWAP3 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x223 JUMPI PUSH2 0x5535 SWAP6 PUSH2 0x21F4 DUP9 PUSH2 0x569B SWAP4 PUSH2 0x56A4 SWAP9 PUSH2 0x56AB SWAP7 PUSH0 SWAP3 PUSH2 0x56B1 JUMPI JUMPDEST POP PUSH2 0x5689 DUP3 PUSH2 0x2A6E PUSH2 0x3DC4 SWAP5 SWAP6 DUP12 PUSH2 0x2155 JUMP JUMPDEST SWAP9 PUSH2 0x5694 DUP14 DUP11 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x5C0C JUMP JUMPDEST SWAP4 DUP5 SWAP3 MLOAD PUSH2 0x2124 JUMP JUMPDEST SWAP6 DUP7 PUSH2 0x2155 JUMP JUMPDEST MSTORE PUSH2 0xBA7 JUMP JUMPDEST PUSH2 0x3DC4 SWAP3 POP PUSH2 0x2A6E SWAP4 PUSH2 0x56D5 PUSH2 0x5689 SWAP3 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP4 POP SWAP4 POP PUSH2 0x5676 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 ISZERO PUSH2 0x5715 JUMPI DIV SWAP1 JUMP JUMPDEST PUSH2 0x56DE JUMP JUMPDEST SWAP1 SWAP3 SWAP2 PUSH2 0x5727 DUP3 MLOAD PUSH2 0x2124 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x5764 JUMPI PUSH2 0x5747 DUP4 PUSH2 0x5741 DUP4 DUP6 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x50E5 JUMP JUMPDEST SWAP1 DUP7 ISZERO PUSH2 0x5715 JUMPI DUP7 PUSH1 0x1 SWAP3 DIV PUSH2 0x575D DUP3 DUP8 PUSH2 0x2155 JUMP JUMPDEST MSTORE ADD PUSH2 0x572A JUMP JUMPDEST POP POP POP SWAP2 POP JUMP JUMPDEST SWAP1 PUSH2 0x5775 SWAP2 PUSH2 0x50E5 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x5795 JUMPI POP JUMP JUMPDEST PUSH2 0xFC SWAP1 PUSH2 0x5B63 JUMP JUMPDEST SWAP2 PUSH2 0x57A8 SWAP2 PUSH2 0x50E5 JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x98E JUMPI DUP2 ISZERO PUSH2 0x5715 JUMPI DIV SWAP1 JUMP JUMPDEST SWAP2 SWAP5 SWAP3 SWAP1 SWAP5 PUSH0 SWAP6 PUSH0 SWAP6 DUP2 PUSH2 0x57E2 JUMPI POP POP POP POP POP JUMP JUMPDEST DUP5 SWAP8 POP PUSH2 0x2791 PUSH2 0x57FB DUP3 PUSH1 0xC0 PUSH2 0x5807 SWAP7 SWAP8 SWAP9 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP2 PUSH1 0xA0 DUP11 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST SWAP5 MLOAD PUSH1 0x1 DUP2 PUSH1 0x3 SHR AND ISZERO PUSH2 0x581D JUMPI JUMPDEST DUP1 DUP1 PUSH2 0x1711 JUMP JUMPDEST PUSH3 0xFFFFFF SWAP2 SWAP3 SWAP5 POP PUSH1 0x2A SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x98E JUMPI PUSH2 0x5853 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP7 PUSH2 0x50E5 JUMP JUMPDEST DIV SWAP3 DUP5 DUP5 GT PUSH2 0x58C9 JUMPI DUP1 PUSH2 0x1762 PUSH2 0x58A8 PUSH2 0x5885 PUSH2 0x58C0 SWAP5 PUSH2 0x1762 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x58A2 DUP9 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x25E2 JUMP JUMPDEST SWAP1 PUSH2 0x67B5 JUMP JUMPDEST SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH0 DUP1 DUP1 PUSH2 0x5816 JUMP JUMPDEST PUSH32 0x4C69AC5D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 SWAP2 SWAP3 AND PUSH0 MSTORE PUSH1 0x20 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH0 JUMPDEST PUSH1 0x60 DUP7 ADD MLOAD DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x594B JUMPI SWAP1 PUSH2 0x593B PUSH2 0x592C DUP3 PUSH1 0x1 SWAP5 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x501E DUP4 PUSH1 0x80 DUP12 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST DUP2 PUSH0 MSTORE DUP4 DUP7 MSTORE DUP5 PUSH0 KECCAK256 SSTORE ADD PUSH2 0x590E JUMP JUMPDEST POP POP POP POP POP SWAP1 POP JUMP JUMPDEST ORIGIN ISZERO DUP1 PUSH2 0x595E JUMPI SWAP1 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x7 SLOAD AND ISZERO SWAP1 JUMP JUMPDEST SWAP1 ORIGIN PUSH2 0x59AC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x599D SWAP3 AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP1 SLOAD SWAP2 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x98E JUMPI SSTORE JUMP JUMPDEST PUSH32 0x67F84AB200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 DUP4 ISZERO PUSH2 0x1A8E JUMPI PUSH2 0x5A07 DUP6 PUSH2 0x1762 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD DUP1 DUP5 GT PUSH2 0x5B02 JUMPI DUP4 SWAP1 SUB PUSH2 0x5A31 DUP7 PUSH2 0x1762 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0x5A57 DUP4 PUSH2 0x5A51 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0xBA7 JUMP JUMPDEST PUSH2 0x5A60 DUP2 PUSH2 0x67C3 JUMP JUMPDEST PUSH2 0x5A7B DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP1 DUP2 EXTCODESIZE ISZERO PUSH2 0xED JUMPI PUSH1 0x40 MLOAD PUSH32 0x23DE665100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP5 AND PUSH1 0x4 DUP6 ADD MSTORE PUSH0 PUSH1 0x24 DUP6 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP6 ADD DUP3 SWAP1 MSTORE SWAP4 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F SWAP2 PUSH2 0x5AFD SWAP2 DUP7 DUP2 DUP1 PUSH1 0x64 DUP2 ADD PUSH2 0x17F6 JUMP JUMPDEST SUB SWAP1 LOG4 JUMP JUMPDEST PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 DUP4 SWAP1 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP1 DUP3 DIV MUL DUP2 SUB PUSH2 0x5B55 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x98E JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x0 GT PUSH2 0x5B8B JUMPI JUMP JUMPDEST PUSH32 0x1ED4D11800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x5BE4 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x98E JUMPI PUSH1 0x1 SWAP1 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP3 ISZERO PUSH2 0x5BE4 JUMPI PUSH1 0x1 SWAP2 PUSH2 0x5C1E SWAP2 PUSH2 0x50E5 JUMP JUMPDEST SWAP2 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x462 SWAP3 PUSH2 0x5C3A SWAP2 PUSH2 0x50E5 JUMP JUMPDEST SWAP1 PUSH2 0x5BB3 JUMP JUMPDEST SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 GT SWAP1 DUP2 ISZERO PUSH2 0x5C9A JUMPI JUMPDEST POP PUSH2 0x5C72 JUMPI PUSH1 0x80 SHL SWAP1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x98E JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x89560CA100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP DUP2 GT PUSH0 PUSH2 0x5C5D JUMP JUMPDEST SWAP1 PUSH2 0x5CB1 DUP3 PUSH1 0x80 SHR PUSH2 0x4D4E JUMP JUMPDEST SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SWAP4 AND DUP1 PUSH2 0x5CDE JUMPI JUMPDEST POP POP PUSH1 0x2 SWAP2 PUSH2 0x5CDA SWAP2 PUSH2 0x3B72 JUMP JUMPDEST SDIV SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 POP SWAP1 PUSH1 0x24 PUSH1 0x20 SWAP3 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH32 0xA28A47700000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x223 JUMPI PUSH2 0x5D3F PUSH2 0x5CDA SWAP3 PUSH1 0x2 SWAP5 PUSH0 SWAP2 PUSH2 0x5D48 JUMPI JUMPDEST POP PUSH2 0x4D4E JUMP JUMPDEST SWAP3 DUP2 SWAP3 POP PUSH2 0x5CCC JUMP JUMPDEST PUSH2 0x5D61 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH0 PUSH2 0x5D39 JUMP JUMPDEST PUSH0 DUP2 SLT PUSH2 0x5D71 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0xA8CE443200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH0 PUSH1 0x44 DUP5 ADD MSTORE SWAP1 SWAP4 SWAP2 SWAP3 SWAP2 DUP4 PUSH1 0x64 DUP2 ADD JUMPDEST SUB SWAP2 PUSH2 0x5DFB PUSH1 0x1F NOT SWAP4 DUP5 DUP2 ADD DUP8 MSTORE DUP7 PUSH2 0x2FF JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP3 DUP8 MLOAD SWAP1 DUP3 DUP6 GAS CALL SWAP1 PUSH2 0x5E18 PUSH2 0x6025 JUMP JUMPDEST DUP3 PUSH2 0x5E85 JUMPI JUMPDEST POP DUP2 PUSH2 0x5E7A JUMPI JUMPDEST POP ISZERO PUSH2 0x5E32 JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x24 DUP6 ADD MSTORE PUSH0 PUSH1 0x44 DUP6 ADD MSTORE PUSH1 0x64 SWAP1 DUP2 ADD DUP5 MSTORE PUSH2 0x5E70 SWAP4 PUSH2 0x964 SWAP2 PUSH2 0x5E6A SWAP1 DUP3 PUSH2 0x2FF JUMP JUMPDEST DUP3 PUSH2 0x65A0 JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x1711 JUMP JUMPDEST SWAP1 POP EXTCODESIZE ISZERO ISZERO PUSH0 PUSH2 0x5E25 JUMP JUMPDEST DUP1 MLOAD SWAP2 SWAP3 POP DUP2 ISZERO SWAP2 DUP3 ISZERO PUSH2 0x5E9D JUMPI JUMPDEST POP POP SWAP1 PUSH0 PUSH2 0x5E1E JUMP JUMPDEST PUSH2 0x5EB0 SWAP3 POP PUSH1 0x20 DUP1 SWAP2 DUP4 ADD ADD SWAP2 ADD PUSH2 0x2221 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x5E94 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 SWAP1 SWAP3 DUP4 PUSH1 0x64 DUP2 ADD PUSH2 0x5DE7 JUMP JUMPDEST SWAP1 PUSH2 0x5F22 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x4D4E JUMP JUMPDEST SWAP1 PUSH0 SWAP3 PUSH1 0x80 SHR DUP1 PUSH2 0x5F3B JUMPI POP POP PUSH1 0x2 SWAP2 PUSH2 0x5CDA SWAP2 PUSH2 0x3B72 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 POP SWAP1 PUSH1 0x24 PUSH1 0x20 SWAP3 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH32 0xB3D7F6B900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x223 JUMPI PUSH2 0x5D3F PUSH2 0x5CDA SWAP3 PUSH1 0x2 SWAP5 PUSH0 SWAP2 PUSH2 0x5D48 JUMPI POP PUSH2 0x4D4E JUMP JUMPDEST SWAP3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 DUP4 SUB SWAP3 DUP4 GT PUSH2 0x98E JUMPI DUP2 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 DUP4 ADD DUP1 SWAP4 GT PUSH2 0x98E JUMPI PUSH2 0xFC SWAP4 PUSH2 0x67FB JUMP JUMPDEST SWAP3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 DUP4 ADD DUP1 SWAP4 GT PUSH2 0x98E JUMPI DUP2 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 DUP4 SUB SWAP3 DUP4 GT PUSH2 0x98E JUMPI PUSH2 0xFC SWAP4 PUSH2 0x67FB JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x604F JUMPI RETURNDATASIZE SWAP1 PUSH2 0x6036 DUP3 PUSH2 0x3F5 JUMP JUMPDEST SWAP2 PUSH2 0x6044 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x2FF JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x462 SWAP4 PUSH1 0x20 DUP2 MLOAD SWAP2 ADD DUP3 DUP6 GAS CALL PUSH2 0x606C PUSH2 0x6025 JUMP JUMPDEST SWAP2 PUSH2 0x6982 JUMP JUMPDEST PUSH1 0x5 SHR PUSH1 0x1 AND ISZERO PUSH2 0x607F JUMPI JUMP JUMPDEST PUSH32 0x4876C0BC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP5 SWAP2 PUSH1 0x20 PUSH2 0x60D6 PUSH2 0x60C1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 PUSH2 0x25E2 JUMP JUMPDEST SWAP5 PUSH2 0x60CC DUP8 DUP8 PUSH2 0x5BB3 JUMP JUMPDEST PUSH2 0x5619 DUP2 DUP4 PUSH2 0x6A0E JUMP JUMPDEST SUB SWAP3 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x223 JUMPI PUSH2 0x5535 SWAP6 PUSH2 0x3DC4 PUSH2 0x54AD DUP6 PUSH2 0x569B SWAP5 PUSH2 0x56A4 SWAP10 DUP13 SWAP10 DUP11 PUSH2 0x6135 SWAP10 PUSH0 SWAP5 PUSH2 0x613B JUMPI JUMPDEST POP SWAP1 PUSH2 0x6129 PUSH2 0x6122 PUSH2 0x611B PUSH2 0x6130 SWAP5 PUSH2 0x2834 SWAP8 SWAP9 PUSH2 0x2155 JUMP JUMPDEST MLOAD DUP8 PUSH2 0xBA7 JUMP JUMPDEST SWAP13 DUP13 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x50E5 JUMP JUMPDEST PUSH2 0x570B JUMP JUMPDEST MSTORE PUSH2 0x25E2 JUMP JUMPDEST PUSH2 0x2834 SWAP5 POP PUSH2 0x6122 PUSH2 0x611B PUSH2 0x6130 SWAP5 SWAP4 PUSH2 0x6166 PUSH2 0x6129 SWAP5 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP8 POP SWAP4 SWAP5 POP POP POP PUSH2 0x6102 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP1 DUP4 MLOAD PUSH2 0x6183 DUP5 MLOAD DUP3 PUSH2 0x20F5 JUMP JUMPDEST PUSH1 0x5 SHL SWAP4 ADD SWAP2 ADD MCOPY JUMP JUMPDEST SWAP3 SWAP2 SWAP1 SWAP4 DUP4 MLOAD PUSH2 0x619C DUP2 PUSH2 0x2124 JUMP JUMPDEST SWAP2 PUSH2 0x61A6 DUP3 PUSH2 0x2124 JUMP JUMPDEST SWAP7 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0x639B JUMPI POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP2 PUSH1 0x40 MLOAD SWAP6 PUSH32 0x984DE9E800000000000000000000000000000000000000000000000000000000 SWAP3 DUP4 DUP9 MSTORE PUSH1 0x20 SWAP9 DUP10 DUP10 DUP1 PUSH2 0x61F9 DUP5 PUSH1 0x4 DUP4 ADD PUSH2 0x5373 JUMP JUMPDEST SUB DUP2 DUP10 GAS STATICCALL SWAP9 DUP10 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP10 PUSH2 0x637C JUMPI JUMPDEST POP PUSH1 0x40 MLOAD DUP6 DUP2 MSTORE DUP11 DUP2 DUP1 PUSH2 0x6223 DUP12 PUSH1 0x4 DUP4 ADD PUSH2 0x538F JUMP JUMPDEST SUB DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x223 JUMPI DUP11 PUSH2 0x6130 PUSH2 0x625E SWAP4 PUSH2 0x6257 SWAP4 DUP16 PUSH0 SWAP3 PUSH2 0x635F JUMPI JUMPDEST SWAP12 SWAP10 SWAP14 SWAP13 SWAP11 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 POP PUSH2 0x50C8 JUMP JUMPDEST DUP1 SWAP4 PUSH2 0x6A0E JUMP JUMPDEST PUSH0 JUMPDEST DUP10 DUP2 LT PUSH2 0x62CD JUMPI POP POP POP POP PUSH2 0x6284 SWAP6 POP PUSH1 0x40 MLOAD DUP1 SWAP7 DUP2 SWAP5 DUP3 SWAP4 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x538F JUMP JUMPDEST SUB SWAP2 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x223 JUMPI DUP4 PUSH2 0x6130 SWAP4 PUSH2 0x62AA SWAP3 PUSH2 0x5535 SWAP8 PUSH0 SWAP3 PUSH2 0x62B0 JUMPI JUMPDEST POP POP PUSH2 0xBA7 JUMP JUMPDEST SWAP1 PUSH2 0x50E5 JUMP JUMPDEST PUSH2 0x62C6 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x62A3 JUMP JUMPDEST DUP7 SWAP9 SWAP10 SWAP6 SWAP8 POP DUP4 DUP14 DUP4 SWAP5 SWAP6 SWAP7 SWAP9 DUP4 PUSH2 0x62F1 PUSH2 0x62EA DUP3 PUSH1 0x1 SWAP9 PUSH2 0x2155 JUMP JUMPDEST MLOAD DUP10 PUSH2 0x67A2 JUMP JUMPDEST DUP1 PUSH2 0x62FC DUP4 DUP6 PUSH2 0x2155 JUMP JUMPDEST MLOAD GT PUSH2 0x6318 JUMPI JUMPDEST POP POP POP POP POP ADD SWAP1 DUP11 SWAP7 SWAP5 SWAP9 SWAP8 SWAP6 SWAP4 SWAP3 SWAP2 PUSH2 0x6260 JUMP JUMPDEST DUP2 DUP4 PUSH2 0x6339 PUSH2 0x634A SWAP8 PUSH2 0x6343 SWAP5 PUSH2 0x6332 DUP6 PUSH2 0x5073 SWAP10 PUSH2 0x2155 JUMP JUMPDEST MLOAD SUB PUSH2 0x576B JUMP JUMPDEST PUSH2 0x1DD0 DUP4 DUP9 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP3 PUSH2 0x2155 JUMP JUMPDEST PUSH2 0x6354 DUP3 DUP12 PUSH2 0x2155 JUMP JUMPDEST MSTORE DUP5 DUP14 DUP11 DUP4 PUSH0 PUSH2 0x6303 JUMP JUMPDEST PUSH2 0x6375 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH0 DUP16 PUSH2 0x6243 JUMP JUMPDEST PUSH2 0x6394 SWAP2 SWAP10 POP DUP11 RETURNDATASIZE DUP13 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP8 PUSH0 PUSH2 0x620C JUMP JUMPDEST DUP1 PUSH2 0x63C5 PUSH2 0x63C0 PUSH2 0x63AE PUSH1 0x1 SWAP5 DUP13 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x63B9 DUP5 DUP8 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x25E2 JUMP JUMPDEST PUSH2 0xB99 JUMP JUMPDEST PUSH2 0x63CF DUP3 DUP9 PUSH2 0x2155 JUMP JUMPDEST MSTORE ADD PUSH2 0x61A9 JUMP JUMPDEST PUSH1 0x7 SHR PUSH1 0x1 AND ISZERO PUSH2 0x63E3 JUMPI JUMP JUMPDEST PUSH32 0xEFE0265D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP3 SWAP2 PUSH2 0x6417 DUP5 MLOAD PUSH2 0x2124 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x644C JUMPI DUP1 PUSH2 0x643B DUP6 DUP6 PUSH2 0x6435 PUSH1 0x1 SWAP6 DUP8 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x5C0C JUMP JUMPDEST PUSH2 0x6445 DUP3 DUP10 PUSH2 0x2155 JUMP JUMPDEST MSTORE ADD PUSH2 0x641A JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP4 DUP5 ISZERO PUSH2 0x656B JUMPI PUSH2 0x648A DUP4 PUSH2 0x6484 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x25E2 JUMP JUMPDEST PUSH2 0x64A9 DUP6 PUSH2 0x1762 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP5 DUP2 SLOAD ADD SWAP1 SSTORE PUSH2 0x64B8 DUP2 PUSH2 0x67C3 JUMP JUMPDEST PUSH2 0x64D3 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP3 PUSH0 DUP5 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F PUSH1 0x40 MLOAD DUP1 PUSH2 0x650C DUP8 DUP3 SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB SWAP1 LOG4 DUP3 EXTCODESIZE ISZERO PUSH2 0xED JUMPI PUSH1 0x40 MLOAD PUSH32 0x23DE665100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 DUP3 SWAP1 DUP2 DUP4 DUP2 PUSH1 0x64 DUP2 ADD PUSH2 0x19FE JUMP JUMPDEST PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x65B4 SWAP2 AND SWAP2 DUP3 PUSH2 0x6054 JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x65F5 JUMPI JUMPDEST POP POP PUSH2 0x65CA JUMPI POP JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x6608 SWAP3 POP PUSH1 0x20 DUP1 SWAP2 DUP4 ADD ADD SWAP2 ADD PUSH2 0x2221 JUMP JUMPDEST ISZERO PUSH0 DUP1 PUSH2 0x65C1 JUMP JUMPDEST SWAP1 PUSH5 0xFFFFFFFFFF PUSH2 0x6620 DUP3 PUSH2 0x2124 JUMP JUMPDEST SWAP3 PUSH1 0x5A SHR AND PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x6634 JUMPI POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x5 DUP1 DUP3 MUL SWAP1 DUP3 DUP3 DIV EQ DUP3 ISZERO OR ISZERO PUSH2 0x98E JUMPI DUP3 PUSH1 0x1F SWAP2 SHR AND SWAP1 PUSH1 0x4D DUP3 GT PUSH2 0x98E JUMPI PUSH1 0x1 SWAP2 PUSH1 0xA EXP PUSH2 0x6665 DUP3 DUP8 PUSH2 0x2155 JUMP JUMPDEST MSTORE ADD PUSH2 0x6627 JUMP JUMPDEST PUSH3 0xFFFFFF SWAP1 PUSH1 0x42 SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x98E JUMPI SWAP1 JUMP JUMPDEST SWAP1 SWAP4 SWAP3 PUSH0 SWAP5 PUSH2 0x66A2 DUP5 PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD DUP2 DUP2 GT PUSH2 0x66B1 JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH2 0x66D7 SWAP6 SWAP7 POP SWAP2 PUSH2 0x66C6 SWAP2 PUSH2 0x2791 SWAP4 SUB PUSH2 0x576B JUMP JUMPDEST SWAP3 PUSH1 0xA0 PUSH2 0x2788 DUP3 PUSH1 0xC0 DUP7 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST SWAP1 PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x1711 JUMP JUMPDEST SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x462 SWAP3 AND PUSH2 0x5C40 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x4 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH32 0xB677FA5600000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP3 PUSH2 0x6781 JUMPI JUMPDEST POP DUP2 DUP2 LT PUSH2 0x6753 JUMPI POP POP JUMP JUMPDEST PUSH32 0xE31C95BE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x679B SWAP2 SWAP3 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x6747 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH2 0x321F SWAP2 PUSH2 0x50E5 JUMP JUMPDEST SWAP1 PUSH2 0x462 SWAP2 PUSH1 0x80 SHR SWAP1 PUSH2 0x5C40 JUMP JUMPDEST PUSH3 0xF4240 DUP2 LT PUSH2 0x67D0 JUMPI POP JUMP JUMPDEST PUSH32 0xD38D20FC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x20 SWAP6 SWAP4 SWAP5 SWAP1 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP2 DUP8 DUP4 PUSH1 0x24 DUP2 DUP8 DUP7 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP4 PUSH2 0x6963 JUMPI JUMPDEST POP DUP1 DUP4 LT PUSH2 0x691E JUMPI POP PUSH2 0x6875 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH1 0x40 MLOAD SWAP2 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 DUP5 DUP2 PUSH1 0x24 DUP2 DUP6 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP6 PUSH2 0x68FF JUMPI JUMPDEST POP POP DUP2 DUP5 LT PUSH2 0x68C4 JUMPI POP POP PUSH2 0x68C1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE JUMP JUMPDEST PUSH32 0x1149424D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE POP PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH2 0x6916 SWAP3 SWAP6 POP DUP1 RETURNDATASIZE LT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP3 PUSH0 DUP1 PUSH2 0x689B JUMP JUMPDEST SWAP1 POP PUSH2 0x11BD SWAP3 DUP7 PUSH32 0x1C6A537500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND SWAP3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x64 SWAP5 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE JUMP JUMPDEST PUSH2 0x697B SWAP2 SWAP4 POP DUP9 RETURNDATASIZE DUP11 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x6851 JUMP JUMPDEST SWAP1 PUSH2 0x69BF JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x6997 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x6A05 JUMPI JUMPDEST PUSH2 0x69D0 JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x69C8 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x4 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH32 0x273C1ADF00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP3 PUSH2 0x6A91 JUMPI JUMPDEST POP DUP2 DUP2 GT PUSH2 0x6A63 JUMPI POP POP JUMP JUMPDEST PUSH32 0x3E8960DC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x6AAB SWAP2 SWAP3 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x6A57 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH4 0xFFFFFFFF DUP1 DUP1 SWAP5 AND SWAP2 AND ADD SWAP2 DUP3 GT PUSH2 0x98E JUMPI JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBD 0xBD 0xD4 ORIGIN 0x2D PUSH16 0x59D90560043E08C2EFEF84699D8D2C32 PUSH0 0x29 0xBF DUP15 0xF6 BLOBBASEFEE ADD PUSH14 0x5BC464736F6C634300081B003300 ","sourceMap":"2550:79548:68:-:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;2550:79548:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3400:40:73;2550:79548:68;;;;;:::i;:::-;;;;-1:-1:-1;;;2550:79548:68;;;;3400:40:73;:::i;:::-;;;3501:47;2550:79548:68;;;;;:::i;:::-;;;;-1:-1:-1;;;2550:79548:68;;;;3501:47:73;:::i;:::-;;;3601:41;2550:79548:68;;;;;:::i;:::-;;;;-1:-1:-1;;;2550:79548:68;;;;3601:41:73;:::i;:::-;;;;;;3703:48;2550:79548:68;;;;;:::i;:::-;;;;-1:-1:-1;;;2550:79548:68;;;;3703:48:73;:::i;:::-;;;;;;3802:39;2550:79548:68;;;;;:::i;:::-;;;;-1:-1:-1;;;2550:79548:68;;;;3802:39:73;:::i;:::-;;;;;;2550:79548:68;;;;;;3414:22;;;;;;;;;;;;;;;;;;-1:-1:-1;3414:22:68;;;-1:-1:-1;3449:4:68;;;2550:79548;;3406:48;3402:117;;2550:79548;;3541:29;;;;;;;;;;;;;;;-1:-1:-1;3541:29:68;;;-1:-1:-1;3449:4:68;;2550:79548;;3533:55;3529:131;;3670:32;;;;2550:79548;;;-1:-1:-1;;;;;;2550:79548:68;;;;;;;;;-1:-1:-1;;;3796:60:68;;2550:79548;;;3796:60;2550:79548;3796:60;;;;;;;;-1:-1:-1;3796:60:68;;;-1:-1:-1;;3769:87:68;;;;2550:79548;;-1:-1:-1;;;3895:62:68;;2550:79548;3895:62;2550:79548;;;3895:62;;;;;;;;-1:-1:-1;3895:62:68;;;-1:-1:-1;;3866:91:68;;;;2550:79548;;-1:-1:-1;;;3995:61:68;;2550:79548;3995:61;2550:79548;3995:61;2550:79548;;3995:61;;;;;;;-1:-1:-1;3995:61:68;;;-1:-1:-1;;3967:89:68;;;;2550:79548;;-1:-1:-1;;;4091:60:68;;;2550:79548;4091:60;2550:79548;4091:60;;;;;;;;;;;;-1:-1:-1;4091:60:68;;;-1:-1:-1;;4067:84:68;;2550:79548;;-1:-1:-1;;;4184:59:68;;2550:79548;;;;;4184:59;;;;;;;-1:-1:-1;4184:59:68;;;-1:-1:-1;;;4161:82:68;;2550:79548;;;-1:-1:-1;;;;;;2550:79548:68;;;;;;-1:-1:-1;;;;;2550:79548:68;;;;;;;;;;;;;;;;;4067:84;2550:79548;;;;;4161:82;2550:79548;;;;;3400:40:73;2550:79548:68;;;;;;;;;;3501:47:73;2550:79548:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4184:59;;;;;;;;;;;;;;;;:::i;:::-;;;2550:79548;;;;;4184:59;;;;2550:79548;-1:-1:-1;2550:79548:68;;4184:59;;;;;;2550:79548;;;-1:-1:-1;2550:79548:68;;;;;4091:60;;;;;;;;;;;;;;;;:::i;:::-;;;2550:79548;;;;;;;4091:60;;;;;;;;;2550:79548;;;-1:-1:-1;2550:79548:68;;;;;3995:61;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;2550:79548;;;-1:-1:-1;2550:79548:68;;;;;3895:62;;;;;;;;;;;;;;;:::i;:::-;;;;;3796:60;;;;;;;;;;;;;;;:::i;:::-;;;;;;2550:79548;;;-1:-1:-1;2550:79548:68;;;;;3529:131;3611:38;;;;-1:-1:-1;3611:38:68;-1:-1:-1;3611:38:68;3541:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;3402:117;3477:31;;;;-1:-1:-1;3477:31:68;-1:-1:-1;3477:31:68;3414:22;;;;;;;;;;;;;;:::i;:::-;;;;2550:79548;;;;;;;-1:-1:-1;;;;;2550:79548:68;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;2550:79548:68;;;;-1:-1:-1;;;;;2550:79548:68;;;;;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;;;;;2550:79548:68;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;9892:177:73:-;2550:79548:68;;;;;;:::i;:::-;;;;1461:67:47;2550:79548:68;;;;-1:-1:-1;;;2550:79548:68;;;;;1461:67:47;;;;;;2550:79548:68;;;;;;;;;;;;;;-1:-1:-1;;;2550:79548:68;;;;;;;;;;;;;;;-1:-1:-1;2550:79548:68;;;;1461:67:47;;;;;;;;;:::i;:::-;2550:79548:68;1451:78:47;;-1:-1:-1;;2550:79548:68;;;;;;;;;1432:103:47;2550:79548:68;1432:103:47;;2550:79548:68;;;;1432:103:47;;;;;:::i;:::-;2550:79548:68;;1405:144:47;;-1:-1:-1;;1405:170:47;;9892:177:73:o;2550:79548:68:-;;;;-1:-1:-1;2550:79548:68;;;;;-1:-1:-1;2550:79548:68"},"deployedBytecode":{"functionDebugData":{"abi_decode":{"entryPoint":2451,"id":null,"parameterSlots":2,"returnSlots":0},"abi_decode_address_fromMemory":{"entryPoint":4856,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn":{"entryPoint":904,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn_fromMemory":{"entryPoint":9345,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dynt_uint256t_array_uint256_dynt_bytes_fromMemory":{"entryPoint":17745,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_available_length_bytes":{"entryPoint":1041,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":8737,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_boolt_array_uint256_dyn_fromMemory":{"entryPoint":11482,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_boolt_uint256_fromMemory":{"entryPoint":12901,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bytes":{"entryPoint":1095,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bytes_fromMemory":{"entryPoint":9442,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IERC20":{"entryPoint":241,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_enum_AddLiquidityKind":{"entryPoint":1940,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_enum_RemoveLiquidityKind":{"entryPoint":1000,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_enum_SwapKind":{"entryPoint":1474,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_t_bool_fromMemory":{"entryPoint":8724,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint256_fromMemory":{"entryPoint":2898,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint256t_array_uint256_dynt_array_uint256_dynt_bytes_fromMemory":{"entryPoint":9512,"id":null,"parameterSlots":2,"returnSlots":4},"abi_encodeUpdatedPos_contract_IERC20":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_address_38631":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address_address_enum_AddLiquidityKind_array_uint256_dyn_array_uint256_dyn_uint256_array_uint256_dyn_bytes":{"entryPoint":19140,"id":null,"parameterSlots":9,"returnSlots":1},"abi_encode_address_address_enum_AddLiquidityKind_array_uint256_dyn_uint256_array_uint256_dyn_bytes":{"entryPoint":17440,"id":null,"parameterSlots":8,"returnSlots":1},"abi_encode_address_address_enum_RemoveLiquidityKind_uint256_array_uint256_dyn_array_uint256_dyn_array_uint256_dyn_bytes":{"entryPoint":11535,"id":null,"parameterSlots":9,"returnSlots":1},"abi_encode_address_address_enum_RemoveLiquidityKind_uint256_array_uint256_dyn_array_uint256_dyn_bytes":{"entryPoint":8770,"id":null,"parameterSlots":8,"returnSlots":1},"abi_encode_address_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_address_address_uint256_38836":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_address_address_uint256_38855":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_address_array_uint256_dyn_uint256_array_uint256_dyn_bytes":{"entryPoint":17819,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_address_uint256_69121":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_address_uint256_array_uint256_dyn_array_uint256_dyn_bytes":{"entryPoint":9608,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_address_uint256_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":1125,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn_enum_Rounding":{"entryPoint":21391,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn_enum_Rounding_38822":{"entryPoint":21363,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn_uint256_bytes":{"entryPoint":1953,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_array_uint256_dyn_uint256_uint256":{"entryPoint":21960,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_bytes":{"entryPoint":1824,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bytes_memory_ptr":{"entryPoint":1176,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_enum_AddLiquidityKind":{"entryPoint":17427,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_enum_RemoveLiquidityKind":{"entryPoint":8757,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_enum_SwapKind":{"entryPoint":12387,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_struct_AfterSwapParams":{"entryPoint":14206,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_PoolSwapParams":{"entryPoint":12397,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_PoolSwapParams_memory_ptr":{"entryPoint":14189,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_uint256":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_uint256_address":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_uint256_address_address":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_uint256_array_uint256_dyn_array_uint256_dyn":{"entryPoint":9711,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_uint256_array_uint256_dyn_bytes":{"entryPoint":1213,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_uint256_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_uint256_uint256_38577":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_uint256_uint256_uint256":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_uint256_uint256_uint256_uint256":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"allocate_and_zero_memory_array_array_struct_TokenInfo_dyn":{"entryPoint":20231,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_and_zero_memory_array_array_uint256_dyn":{"entryPoint":8484,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_and_zero_memory_struct_struct_LiquidityLocals":{"entryPoint":9315,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory":{"entryPoint":834,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_38490":{"entryPoint":802,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_38749":{"entryPoint":847,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_array_uint256_dyn":{"entryPoint":880,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":1013,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_int256":{"entryPoint":15242,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_uint256":{"entryPoint":9698,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_uint256_38754":{"entryPoint":9684,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_uint32":{"entryPoint":27314,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_uint256":{"entryPoint":22283,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256":{"entryPoint":20709,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256_38848":{"entryPoint":20680,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_int256":{"entryPoint":15218,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_uint256":{"entryPoint":2983,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_uint256_38756":{"entryPoint":2969,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_bool":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"constant_AGGREGATE_YIELD_FEE_OFFSET":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"constant_DECIMAL_SCALING_FACTORS_OFFSET":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"convert_uint32_to_uint256":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"copy_array_from_storage_to_memory_array_contract_IERC20_dyn_ptr":{"entryPoint":20144,"id":null,"parameterSlots":1,"returnSlots":1},"external_fun_addLiquidity":{"entryPoint":1994,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_erc4626BufferWrapOrUnwrap":{"entryPoint":1701,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getPoolTokenCountAndIndexOfToken":{"entryPoint":2582,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getVaultExtension":{"entryPoint":2461,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_reentrancyGuardEntered":{"entryPoint":2836,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_removeLiquidity":{"entryPoint":1256,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_sendTo":{"entryPoint":2202,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_settle":{"entryPoint":254,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_swap":{"entryPoint":1485,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_transfer":{"entryPoint":2528,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_transferFrom":{"entryPoint":552,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_unlock":{"entryPoint":1841,"id":null,"parameterSlots":0,"returnSlots":0},"extract_returndata":{"entryPoint":24613,"id":null,"parameterSlots":0,"returnSlots":1},"finalize_allocation":{"entryPoint":767,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_38634":{"entryPoint":686,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_38650":{"entryPoint":711,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_38687":{"entryPoint":739,"id":null,"parameterSlots":1,"returnSlots":0},"fun":{"entryPoint":5502,"id":22778,"parameterSlots":0,"returnSlots":0},"fun_22796":{"entryPoint":5542,"id":22796,"parameterSlots":0,"returnSlots":0},"fun_accountDelta":{"entryPoint":19875,"id":24964,"parameterSlots":2,"returnSlots":0},"fun_addLiquidity":{"entryPoint":17880,"id":21046,"parameterSlots":3,"returnSlots":4},"fun_addLiquidity_20598":{"entryPoint":5082,"id":20598,"parameterSlots":1,"returnSlots":3},"fun_allowance":{"entryPoint":20068,"id":38954,"parameterSlots":3,"returnSlots":1},"fun_buildPoolSwapParams":{"entryPoint":12247,"id":20062,"parameterSlots":3,"returnSlots":1},"fun_burn":{"entryPoint":22996,"id":39222,"parameterSlots":3,"returnSlots":0},"fun_callAfterAddLiquidityHook":{"entryPoint":19245,"id":29256,"parameterSlots":8,"returnSlots":1},"fun_callAfterRemoveLiquidityHook":{"entryPoint":11654,"id":29416,"parameterSlots":8,"returnSlots":1},"fun_callAfterSwapHook":{"entryPoint":14405,"id":29096,"parameterSlots":8,"returnSlots":1},"fun_callBeforeAddLiquidityHook":{"entryPoint":17525,"id":29139,"parameterSlots":5,"returnSlots":0},"fun_callBeforeRemoveLiquidityHook":{"entryPoint":8869,"id":29299,"parameterSlots":5,"returnSlots":0},"fun_callBeforeSwapHook":{"entryPoint":12558,"id":28960,"parameterSlots":3,"returnSlots":0},"fun_callComputeDynamicSwapFeeHook":{"entryPoint":12930,"id":28933,"parameterSlots":4,"returnSlots":1},"fun_callOptionalReturn":{"entryPoint":26016,"id":40411,"parameterSlots":2,"returnSlots":0},"fun_computeAddLiquiditySingleTokenExactOut":{"entryPoint":24743,"id":11762,"parameterSlots":6,"returnSlots":2},"fun_computeAddLiquidityUnbalanced":{"entryPoint":24973,"id":11654,"parameterSlots":5,"returnSlots":2},"fun_computeAmountGivenScaled18":{"entryPoint":12743,"id":20115,"parameterSlots":3,"returnSlots":1},"fun_computeAndChargeAggregateSwapFees":{"entryPoint":22477,"id":21795,"parameterSlots":5,"returnSlots":2},"fun_computeProportionalAmountsIn":{"entryPoint":25611,"id":11423,"parameterSlots":3,"returnSlots":1},"fun_computeProportionalAmountsOut":{"entryPoint":22298,"id":11473,"parameterSlots":3,"returnSlots":1},"fun_computeRateRoundUp":{"entryPoint":23359,"id":6847,"parameterSlots":1,"returnSlots":1},"fun_computeRemoveLiquiditySingleTokenExactIn":{"entryPoint":21994,"id":12030,"parameterSlots":6,"returnSlots":2},"fun_computeRemoveLiquiditySingleTokenExactOut":{"entryPoint":21415,"id":11927,"parameterSlots":6,"returnSlots":2},"fun_computeYieldFeesDue":{"entryPoint":26255,"id":31030,"parameterSlots":4,"returnSlots":1},"fun_copyToArray":{"entryPoint":24946,"id":6554,"parameterSlots":2,"returnSlots":0},"fun_copyToScaled18ApplyRateRoundDownArray":{"entryPoint":17303,"id":6684,"parameterSlots":3,"returnSlots":1},"fun_copyToScaled18ApplyRateRoundUpArray":{"entryPoint":8598,"id":6814,"parameterSlots":3,"returnSlots":1},"fun_ensureCorrectBufferAsset":{"entryPoint":15037,"id":25257,"parameterSlots":2,"returnSlots":0},"fun_ensureInitializedPool":{"entryPoint":6851,"id":25183,"parameterSlots":1,"returnSlots":0},"fun_ensureInputLengthMatch":{"entryPoint":20649,"id":5948,"parameterSlots":3,"returnSlots":0},"fun_ensureInputLengthMatch_5926":{"entryPoint":8437,"id":5926,"parameterSlots":2,"returnSlots":0},"fun_ensureInvariantRatioAboveMinimumBound":{"entryPoint":26366,"id":12082,"parameterSlots":2,"returnSlots":0},"fun_ensureInvariantRatioBelowMaximumBound":{"entryPoint":27150,"id":12056,"parameterSlots":2,"returnSlots":0},"fun_ensurePoolMinimumTotalSupply":{"entryPoint":26563,"id":39074,"parameterSlots":1,"returnSlots":0},"fun_ensureUnlocked":{"entryPoint":5738,"id":24863,"parameterSlots":0,"returnSlots":0},"fun_ensureUnpaused":{"entryPoint":6928,"id":24998,"parameterSlots":1,"returnSlots":0},"fun_ensureValidSwapAmount":{"entryPoint":23395,"id":22748,"parameterSlots":1,"returnSlots":0},"fun_ensureValidTradeAmount":{"entryPoint":22413,"id":22734,"parameterSlots":1,"returnSlots":0},"fun_ensureValidWrapAmount":{"entryPoint":15123,"id":22063,"parameterSlots":2,"returnSlots":0},"fun_findTokenIndex":{"entryPoint":19688,"id":25546,"parameterSlots":2,"returnSlots":1},"fun_forceApprove":{"entryPoint":24247,"id":40369,"parameterSlots":3,"returnSlots":0},"fun_forceApprove_38760":{"entryPoint":23964,"id":40369,"parameterSlots":2,"returnSlots":0},"fun_functionCallWithValue":{"entryPoint":24660,"id":40581,"parameterSlots":2,"returnSlots":1},"fun_getAggregateYieldFeePercentage":{"entryPoint":26220,"id":30183,"parameterSlots":1,"returnSlots":1},"fun_getBalanceRaw":{"entryPoint":null,"id":6222,"parameterSlots":1,"returnSlots":1},"fun_getBufferUnderlyingImbalance":{"entryPoint":24326,"id":5560,"parameterSlots":2,"returnSlots":1},"fun_getBufferWrappedImbalance":{"entryPoint":23716,"id":5609,"parameterSlots":2,"returnSlots":1},"fun_getDecimalScalingFactors":{"entryPoint":26128,"id":30315,"parameterSlots":2,"returnSlots":1},"fun_getSingleInputIndex":{"entryPoint":21185,"id":6007,"parameterSlots":1,"returnSlots":1},"fun_getStaticSwapFeePercentage":{"entryPoint":21328,"id":30061,"parameterSlots":1,"returnSlots":1},"fun_getTokenRate":{"entryPoint":20728,"id":30916,"parameterSlots":1,"returnSlots":1},"fun_isPoolInRecoveryMode":{"entryPoint":null,"id":29766,"parameterSlots":1,"returnSlots":1},"fun_isQueryContext":{"entryPoint":22868,"id":25605,"parameterSlots":0,"returnSlots":1},"fun_loadPoolDataUpdatingBalancesAndYieldFees":{"entryPoint":7888,"id":25381,"parameterSlots":1,"returnSlots":1},"fun_loadPoolDataUpdatingBalancesAndYieldFees_38530":{"entryPoint":7224,"id":25381,"parameterSlots":1,"returnSlots":1},"fun_loadSwapState":{"entryPoint":12096,"id":20029,"parameterSlots":2,"returnSlots":1},"fun_mint":{"entryPoint":25682,"id":39059,"parameterSlots":3,"returnSlots":0},"fun_mulDivUp":{"entryPoint":23564,"id":8034,"parameterSlots":3,"returnSlots":1},"fun_mulDivUp_38824":{"entryPoint":23475,"id":8034,"parameterSlots":2,"returnSlots":1},"fun_mulDown":{"entryPoint":26530,"id":7953,"parameterSlots":2,"returnSlots":1},"fun_mulUp":{"entryPoint":22379,"id":7970,"parameterSlots":2,"returnSlots":1},"fun_nonReentrantAfter":{"entryPoint":5701,"id":9928,"parameterSlots":0,"returnSlots":0},"fun_nonReentrantBefore":{"entryPoint":5616,"id":9916,"parameterSlots":0,"returnSlots":0},"fun_queryModeBalanceIncrease":{"entryPoint":22889,"id":38988,"parameterSlots":3,"returnSlots":0},"fun_reloadBalancesAndRates":{"entryPoint":9103,"id":30871,"parameterSlots":2,"returnSlots":0},"fun_reloadBalancesAndRates_38629":{"entryPoint":9212,"id":30871,"parameterSlots":2,"returnSlots":0},"fun_removeLiquidity":{"entryPoint":9754,"id":21702,"parameterSlots":3,"returnSlots":4},"fun_removeLiquidity_21196":{"entryPoint":2996,"id":21196,"parameterSlots":1,"returnSlots":3},"fun_requireAddLiquidityCustomEnabled":{"entryPoint":24690,"id":29891,"parameterSlots":1,"returnSlots":0},"fun_requireDonationEnabled":{"entryPoint":25558,"id":30040,"parameterSlots":1,"returnSlots":0},"fun_requireRemoveLiquidityCustomEnabled":{"entryPoint":21080,"id":29953,"parameterSlots":1,"returnSlots":0},"fun_requireUnbalancedLiquidityEnabled":{"entryPoint":21133,"id":29829,"parameterSlots":1,"returnSlots":0},"fun_setBalanceDerived":{"entryPoint":26338,"id":6275,"parameterSlots":2,"returnSlots":1},"fun_setBalanceRaw":{"entryPoint":26549,"id":6257,"parameterSlots":2,"returnSlots":1},"fun_settleUnwrap":{"entryPoint":24544,"id":22640,"parameterSlots":4,"returnSlots":0},"fun_settleWrap":{"entryPoint":24475,"id":22602,"parameterSlots":4,"returnSlots":0},"fun_settleWrapUnwrap":{"entryPoint":26619,"id":22719,"parameterSlots":4,"returnSlots":0},"fun_shouldCallAfterAddLiquidity":{"entryPoint":null,"id":28722,"parameterSlots":1,"returnSlots":1},"fun_shouldCallAfterRemoveLiquidity":{"entryPoint":null,"id":28808,"parameterSlots":1,"returnSlots":1},"fun_shouldCallAfterSwap":{"entryPoint":null,"id":28636,"parameterSlots":1,"returnSlots":1},"fun_shouldCallBeforeAddLiquidity":{"entryPoint":null,"id":28679,"parameterSlots":1,"returnSlots":1},"fun_shouldCallBeforeRemoveLiquidity":{"entryPoint":null,"id":28765,"parameterSlots":1,"returnSlots":1},"fun_shouldCallBeforeSwap":{"entryPoint":null,"id":28593,"parameterSlots":1,"returnSlots":1},"fun_shouldCallComputeDynamicSwapFee":{"entryPoint":null,"id":28550,"parameterSlots":1,"returnSlots":1},"fun_spendAllowance":{"entryPoint":5881,"id":39428,"parameterSlots":4,"returnSlots":0},"fun_supplyCredit":{"entryPoint":5819,"id":24891,"parameterSlots":2,"returnSlots":0},"fun_syncPoolBalancesAndFees":{"entryPoint":20372,"id":30807,"parameterSlots":3,"returnSlots":0},"fun_tGet":{"entryPoint":null,"id":7043,"parameterSlots":3,"returnSlots":1},"fun_tIncrement":{"entryPoint":17261,"id":7424,"parameterSlots":1,"returnSlots":0},"fun_tSet":{"entryPoint":17278,"id":7073,"parameterSlots":3,"returnSlots":0},"fun_takeDebt":{"entryPoint":19670,"id":24908,"parameterSlots":2,"returnSlots":0},"fun_toInt256":{"entryPoint":19790,"id":44982,"parameterSlots":1,"returnSlots":1},"fun_toPackedBalance":{"entryPoint":23616,"id":6303,"parameterSlots":2,"returnSlots":1},"fun_toRawUndoRateRoundDown":{"entryPoint":22430,"id":6509,"parameterSlots":3,"returnSlots":1},"fun_toRawUndoRateRoundUp":{"entryPoint":23596,"id":6530,"parameterSlots":3,"returnSlots":1},"fun_toUint256":{"entryPoint":23911,"id":44146,"parameterSlots":1,"returnSlots":1},"fun_totalSupply":{"entryPoint":null,"id":38906,"parameterSlots":1,"returnSlots":1},"fun_transfer":{"entryPoint":6365,"id":39312,"parameterSlots":4,"returnSlots":0},"fun_unwrapWithBuffer":{"entryPoint":16387,"id":22564,"parameterSlots":4,"returnSlots":3},"fun_updateRawAndLiveBalance":{"entryPoint":20936,"id":30978,"parameterSlots":3,"returnSlots":0},"fun_updateRawAndLiveBalance_69105":{"entryPoint":21013,"id":30978,"parameterSlots":3,"returnSlots":0},"fun_verifyCallResultFromTarget":{"entryPoint":27010,"id":40673,"parameterSlots":3,"returnSlots":1},"fun_wrapWithBuffer":{"entryPoint":15269,"id":22328,"parameterSlots":4,"returnSlots":3},"fun_writePoolBalancesToStorage":{"entryPoint":22769,"id":25305,"parameterSlots":2,"returnSlots":0},"mapping_index_access_mapping_contract_IERC20_uint256_of_contract_IERC20":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"mapping_index_access_mapping_contract_IERC20_uint256_of_contract_IERC20_38486":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_contract_IERC20_uint256_of_contract_IERC20_38531":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_contract_IERC20_uint256_of_contract_IERC20_38532":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_contract_IERC20_uint256_of_contract_IERC20_38633":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_contract_IERC20_uint256_of_contract_IERC20_38637":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_contract_IERC20_uint256_of_contract_IERC20_38653":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_contract_IERC20_uint256_of_contract_IERC20_38758":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_contract_IERC20_uint256_of_contract_IERC20_38834":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_uint256_bytes32_of_uint256":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"memory_array_index_access_uint256_dyn":{"entryPoint":8533,"id":null,"parameterSlots":2,"returnSlots":1},"modifier_nonReentrant":{"entryPoint":13198,"id":9897,"parameterSlots":4,"returnSlots":4},"modifier_onlyWhenUnlocked":{"entryPoint":4045,"id":24848,"parameterSlots":1,"returnSlots":3},"modifier_onlyWhenUnlocked_38494":{"entryPoint":3390,"id":24848,"parameterSlots":1,"returnSlots":3},"modifier_transient":{"entryPoint":4877,"id":19663,"parameterSlots":2,"returnSlots":1},"panic_error_0x11":{"entryPoint":2924,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":22238,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":3985,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":641,"id":null,"parameterSlots":0,"returnSlots":0},"read_from_memoryt_contract_IERC20":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"read_from_storage_reference_type_struct_TokenInfo":{"entryPoint":20309,"id":null,"parameterSlots":1,"returnSlots":1},"read_from_storage_split_offset_contract_IHooks":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"revert_forward":{"entryPoint":2913,"id":null,"parameterSlots":0,"returnSlots":0},"validator_assert_enum_AddLiquidityKind":{"entryPoint":17417,"id":null,"parameterSlots":1,"returnSlots":0},"validator_assert_enum_RemoveLiquidityKind":{"entryPoint":8714,"id":null,"parameterSlots":1,"returnSlots":0},"validator_assert_enum_SwapKind":{"entryPoint":4030,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_contract_IERC20":{"entryPoint":220,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_enum_SwapKind":{"entryPoint":1464,"id":null,"parameterSlots":1,"returnSlots":0},"write_to_memory_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"write_to_memory_enum_SwapKind":{"entryPoint":12235,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"19501":[{"length":32,"start":2492},{"length":32,"start":5565}],"28194":[{"length":32,"start":23397}],"28196":[{"length":32,"start":15126}],"28201":[{"length":32,"start":4888},{"length":32,"start":5740}],"28206":[{"length":32,"start":4953},{"length":32,"start":19955},{"length":32,"start":20023}],"28211":[{"length":32,"start":19891}],"28216":[{"length":32,"start":5187},{"length":32,"start":9959}],"28221":[{"length":32,"start":4997},{"length":32,"start":5135},{"length":32,"start":9907}],"28267":[{"length":32,"start":6936}],"28269":[{"length":32,"start":7111}]},"linkReferences":{},"object":"60806040526004361015610018575b366115a65761157e565b5f3560e01c806315afd409146100d757806315dacbea146100d257806321457897146100cd5780632bfb780c146100c857806343583be5146100c357806348c89491146100be5780634af29ec4146100b9578063ae639329146100b4578063b9a8effa146100af578063beabacc8146100aa578063c9c1661b146100a55763d2c725e00361000e57610b14565b610a16565b6109e0565b61099d565b61089a565b6107ca565b610731565b6106a5565b6105cd565b6104e8565b610228565b6100fe565b6001600160a01b038116036100ed57565b5f80fd5b35906100fc826100dc565b565b346100ed5760406003193601126100ed5760043561011b816100dc565b6024356101266115f0565b61012e61166a565b6001600160a01b0382165f818152600860209081526040918290205491517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152919492829060249082905afa938415610223576101e6946101ba925f916101f4575b50806101b4856001600160a01b03165f52600860205260405f2090565b55610ba7565b918083116101ea575b50816101ce916116bb565b6101d6611645565b6040519081529081906020820190565b0390f35b91506101ce6101c3565b610216915060203d60201161021c575b61020e81836102ff565b810190610b52565b5f610197565b503d610204565b610b61565b346100ed5760806003193601126100ed57610276600435610248816100dc565b602435610254816100dc565b60443590610261826100dc565b610270606435809483336116f9565b336118dd565b602060405160018152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116102c257604052565b610281565b60e0810190811067ffffffffffffffff8211176102c257604052565b6060810190811067ffffffffffffffff8211176102c257604052565b90601f601f19910116810190811067ffffffffffffffff8211176102c257604052565b6040519060c0820182811067ffffffffffffffff8211176102c257604052565b604051906100fc826102c7565b60405190610180820182811067ffffffffffffffff8211176102c257604052565b67ffffffffffffffff81116102c25760051b60200190565b9080601f830112156100ed5760209082356103a281610370565b936103b060405195866102ff565b81855260208086019260051b8201019283116100ed57602001905b8282106103d9575050505090565b813581529083019083016103cb565b359060048210156100ed57565b67ffffffffffffffff81116102c257601f01601f191660200190565b92919261041d826103f5565b9161042b60405193846102ff565b8294818452818301116100ed578281602093845f960137010152565b9080601f830112156100ed5781602061046293359101610411565b90565b9081518082526020808093019301915f5b828110610484575050505090565b835185529381019392810192600101610476565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b916104da9061046294928452606060208501526060840190610465565b916040818403910152610498565b346100ed576003196020813601126100ed5760043567ffffffffffffffff918282116100ed5760c09082360301126100ed57610522610322565b61052e826004016100f1565b815261053c602483016100f1565b60208201526044820135604082015260648201358381116100ed576105679060043691850101610388565b6060820152610578608483016103e8565b608082015260a48201359283116100ed5761059f6105a99260046101e69536920101610447565b60a0820152610bb4565b604093919351938493846104bd565b600211156100ed57565b35906100fc826105b8565b346100ed576003196020813601126100ed5760043567ffffffffffffffff918282116100ed5760e09082360301126100ed57610607610342565b610613826004016105c2565b8152610621602483016100f1565b6020820152610632604483016100f1565b6040820152610643606483016100f1565b60608201526084820135608082015260a482013560a082015260c48201359283116100ed5761067e6106889260046101e69536920101610447565b60c0820152610d3e565b604080519384526020840192909252908201529081906060820190565b346100ed5760a06003193601126100ed5760405160a0810181811067ffffffffffffffff8211176102c2576101e691610688916040526004356106e7816105b8565b81526024356106f5816105b8565b6020820152604435610706816100dc565b604082015260643560608201526084356080820152610fcd565b906020610462928181520190610498565b346100ed5760206003193601126100ed5767ffffffffffffffff6004358181116100ed57366023820112156100ed5780600401359182116100ed5736602483830101116100ed576101e6916024610788920161130d565b60405191829182610720565b359060058210156100ed57565b6107b76104629492606083526060830190610465565b9260208201526040818403910152610498565b346100ed576003196020813601126100ed5760043567ffffffffffffffff918282116100ed5760c09082360301126100ed57610804610322565b610810826004016100f1565b815261081e602483016100f1565b602082015260448201358381116100ed5761083f9060043691850101610388565b60408201526064820135606082015261085a60848301610794565b608082015260a48201359283116100ed5761088161088b9260046101e69536920101610447565b60a08201526113da565b604093919351938493846107a1565b346100ed5760606003193601126100ed576004356108b7816100dc565b602435906108c4826100dc565b604435906108d06115f0565b6108d861166a565b6108ea6108e483614d4e565b82614da3565b6001600160a01b0381165f52600860205260405f2080549383850394851161098e579390556040517fa9059cbb0000000000000000000000000000000000000000000000000000000060208201526001600160a01b03909316602484015260448084019290925290825261096991906109646064836102ff565b6165a0565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b610b6c565b5f9103126100ed57565b346100ed575f6003193601126100ed5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346100ed5760606003193601126100ed57610276600435610a00816100dc565b602435610a0c816100dc565b60443591336118dd565b346100ed5760406003193601126100ed57600435610a33816100dc565b60243590610a40826100dc565b6001600160a01b0380911691825f525f602052600192600160405f20541615610ae9575f93929352600360205260405f20926040519283602086549182815201955f5260205f20925f905b828210610abc5786610aa987610aa3838c03846102ff565b82614ce8565b9051604080519182526020820192909252f35b90919280610add86998483985416906001600160a01b036020921681520190565b98019493920190610a8b565b7f9e51bd5c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b346100ed575f6003193601126100ed5760207f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6040519015158152f35b908160209103126100ed575190565b6040513d5f823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b905f19820191821161098e57565b9190820391821161098e57565b90610bbd61166a565b610bd06001600160a01b03835116611ac3565b610be9610be483516001600160a01b031690565b611b10565b610c02610bfd83516001600160a01b031690565b611c38565b90610c56602083015151610c1d6060860191825151906120f5565b805160c0850190610c3782519160a0880192835191612196565b92610c47875160019060101c1690565b610ccf575b505050848461261a565b9490919586610c6a835160019060111c1690565b610c78575b50505050929190565b84975093610cc594610cbb610cae610c9785516001600160a01b031690565b6001600160a01b03165f52600260205260405f2090565b546001600160a01b031690565b9484513390612d86565b925f808080610c6f565b610cf7610d3694888a610cef610cae610c9783516001600160a01b031690565b9233906122a5565b610d2b610d25610d0e8a516001600160a01b031690565b6001600160a01b03165f52600560205260405f2090565b8861238f565b519151905191612196565b5f8080610c4c565b90610d4761166a565b60208201906001600160a01b03610d6081845116611ac3565b610d74610be484516001600160a01b031690565b608084015115610f695760408401516001600160a01b031690610db0610da460608701516001600160a01b031690565b6001600160a01b031690565b911614610f4157610dcb610bfd83516001600160a01b031690565b92610dd68482612f40565b90610de2858383612fd7565b8551600c1c600116610ec6575b8551610e099190600b1c600116610e85575b86848461338e565b9791979490978397610e208451600190600d1c1690565b610e50575b505050505051610e3481610fbe565b610e3d81610fbe565b610e48575081929190565b918093509190565b85985090610e6f610cae610c97610e7a9894516001600160a01b031690565b948451913392613845565b925f80808080610e25565b85516001600160a01b0316610ebf60608601918251610eb8610cae836001600160a01b03165f52600260205260405f2090565b9185613282565b9052610e01565b610eff90610edb86516001600160a01b031690565b610ef9610cae826001600160a01b03165f52600260205260405f2090565b9161310e565b610f1c610f16610d0e86516001600160a01b031690565b8661238f565b610f278286836131c7565b6040830152610e09610f3a868484612fd7565b9050610def565b7fa54b181d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f57a456b7000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60021115610fc857565b610f91565b610fd561166a565b600160075460021c166112d05760408101916001600160a01b03928381511693845f52600e6020528060405f205416156112a457600494506110156115f0565b602061102b610da484516001600160a01b031690565b604051968780927f38d52e0f0000000000000000000000000000000000000000000000000000000082525afa8015610223576080955f91611275575b50166110838161107e84516001600160a01b031690565b613abd565b81516001600160a01b03169061109f6060860192835190613b13565b600160208601516110af81610fbe565b6110b881610fbe565b0361120a576110e0918551916110cd83610fbe565b84516001600160a01b0316915192614003565b7feeb740c90bf2b18c9532eb7d473137767036d893dff3e009f32718f821b2a4c0829692979397968861113e611120610da489516001600160a01b031690565b94604051938493846040919493926060820195825260208201520152565b0390a25b805161114d81610fbe565b61115681610fbe565b6111c057015180841061118f575061118261117d91849283915b516001600160a01b031690565b613b13565b61118a611645565b929190565b7fe2ea151b000000000000000000000000000000000000000000000000000000005f52600484905260245260445b5ffd5b01518085116111da575061118261117d9185928391611170565b7fe2ea151b000000000000000000000000000000000000000000000000000000005f52600485905260245260445ffd5b61122d9185519161121a83610fbe565b84516001600160a01b0316915192613ba5565b7f3771d13c67011e31e12031c54bb59b0bf544a80b81d280a3711e172aa8b7f47b829692979397968861126d611120610da489516001600160a01b031690565b0390a2611142565b611297915060203d60201161129d575b61128f81836102ff565b8101906112f8565b5f611067565b503d611285565b847f85f41299000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f0f27df09000000000000000000000000000000000000000000000000000000005f5260045ffd5b908160209103126100ed5751610462816100dc565b91909161134f6113497f000000000000000000000000000000000000000000000000000000000000000092835c1595866113d1575b3691610411565b33616054565b926113575750565b7f00000000000000000000000000000000000000000000000000000000000000005c6113a9575f905d6100fc7f000000000000000000000000000000000000000000000000000000000000000061436d565b7f20f1d86d000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001855d611342565b906113e361166a565b6113f66001600160a01b03835116611ac3565b61140a610be483516001600160a01b031690565b6114677f00000000000000000000000000000000000000000000000000000000000000005c61144084516001600160a01b031690565b907f000000000000000000000000000000000000000000000000000000000000000061437e565b61148061147b83516001600160a01b031690565b611ed0565b906114d460208301515161149b6040860191825151906120f5565b805160c08501906114b582519160a0880192835191614397565b926114c58751600190600e1c1690565b611527575b50505084846145d8565b94909586846114e88451600190600f1c1690565b6114f7575b5050505050929190565b61151d9550611513610cae610c9785516001600160a01b031690565b9484513390614b2d565b5f808086816114ed565b61154e61157694888a611547610cae610c9783516001600160a01b031690565b9233614475565b61156b611565610d0e8a516001600160a01b031690565b886123fc565b519151905191614397565b5f80806114ca565b7ff2238896000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461157e57365f80375f8036816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af43d5f803e156115ec573d5ff35b3d5ffd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c61161d576001905d565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d565b7f00000000000000000000000000000000000000000000000000000000000000005c1561169357565b7fc09ba736000000000000000000000000000000000000000000000000000000005f5260045ffd5b906116c590614d4e565b907f8000000000000000000000000000000000000000000000000000000000000000821461098e576100fc915f0390614da3565b92919091611708828486614e64565b5f198103611718575b5050505050565b8082116118a25703906001600160a01b039283811693841561186d5780831695861561183857846117788561176286611762866001600160a01b03165f52601060205260405f2090565b906001600160a01b03165f5260205260405f2090565b551692833b156100ed576040517f5687f2b80000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152919092166024820152604481018290527fa0175360a15bca328baf7ea85c7b784d58b222a50d0ce760b10dba336d226a6191611812915f8180606481015b038183895af161181f575b506040519081529081906020820190565b0390a45f80808080611711565b8061182c611832926102ae565b80610993565b5f611801565b7f94280d62000000000000000000000000000000000000000000000000000000005f526001600160a01b03841660045260245ffd5b7fe602df05000000000000000000000000000000000000000000000000000000005f526001600160a01b03821660045260245ffd5b6001600160a01b03837ffb8f41b2000000000000000000000000000000000000000000000000000000005f521660045260245260445260645ffd5b929091926001600160a01b0390818416918215611a8e57808616918215611a595761191d86611762836001600160a01b03165f52600f60205260405f2090565b54808611611a1c5785900361194787611762846001600160a01b03165f52600f60205260405f2090565b5561196787611762836001600160a01b03165f52600f60205260405f2090565b8581540190551691827fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f604051806119a488829190602083019252565b0390a4803b156100ed576040517f23de66510000000000000000000000000000000000000000000000000000000081526001600160a01b03938416600482015293909216602484015260448301525f908290818381606481015b03925af1801561022357611a0f5750565b8061182c6100fc926102ae565b7fe450d38c000000000000000000000000000000000000000000000000000000005f526001600160a01b038716600452602452604485905260645ffd5b7fec442f05000000000000000000000000000000000000000000000000000000005f526001600160a01b03871660045260245ffd5b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f526001600160a01b03851660045260245ffd5b6001600160a01b0316805f525f602052600160405f2054811c1615611ae55750565b7f4bdace13000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b63ffffffff807f00000000000000000000000000000000000000000000000000000000000000001642111580611c2a575b611c02576001600160a01b0382165f525f60205260405f20549060018260021c1690611b6b605a90565b906028820180921161098e5782611bbc575b50509050611b885750565b7fd971f597000000000000000000000000000000000000000000000000000000005f526001600160a01b031660045260245ffd5b611bee9250611bf7937f0000000000000000000000000000000000000000000000000000000000000000921c16616ab2565b63ffffffff1690565b421115805f80611b7d565b7fda9f8b34000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001600754811c16611b41565b604090815191611c47836102c7565b5f8352826020810191606080845281830190808252808401908082526080936080860182815260a0870183815260c08801938452611c836115f0565b6001600160a01b038a165f526005602052825f20935f602052835f2054926004602052611cbf855f20946003602052865f209081549c52614eb0565b8b52611cca8a614f07565b8852611cd58a612124565b8752611ce08a612124565b9052611ced898d51616610565b9052611cf888612124565b81528a5191600199600184811c169384611ebc575b5083611eaa575b5f5b8d8b8210611d74575050505050505050505050505080611d65611d4d611d6c936001600160a01b03165f52600560205260405f2090565b916001600160a01b03165f52600660205260405f2090565b9083614f94565b610462611645565b908a8d92828c8c8c611dd684611dc281611db4611daf8f8f61117085611d9a9251612155565b6001600160a01b03165f5260205260405f2090565b614f55565b94905f5260205260405f2090565b54945183611dd08383612155565b52612155565b50611de0816150f8565b611deb858d51612155565b52611e096fffffffffffffffffffffffffffffffff841685876151c8565b878d8d15611e9d5782015115159182611e7f575b5050611e30575b50505050505b01611d16565b82611e5392611e4a82611e43885161666c565b9451612155565b51961c8561668f565b9283611e63575b8e93508c611e24565b611e7693611e7091610ba7565b916151c8565b5f8f8282611e5a565b90915051611e8c81610fbe565b611e9581610fbe565b14875f611e1d565b5050505050505050611e2a565b8c5190935060031c6001161592611d14565b611ec791945061666c565b1515925f611d0d565b604090815191611edf836102c7565b5f8352826020810191606080845281830190808252808401908082526080936080860182815260a0870183815260c08801938452611f1b6115f0565b6001600160a01b038a165f526005602052825f20935f602052835f2054926004602052611f57855f20946003602052865f209081549c52614eb0565b8b52611f628a614f07565b8852611f6d8a612124565b8752611f788a612124565b9052611f85898d51616610565b9052611f9088612124565b81528a5191600199600184811c1693846120e1575b50836120cf575b5f5b8d8b8210611fe5575050505050505050505050505080611d65611d4d611d6c936001600160a01b03165f52600560205260405f2090565b908a8d92828c8c8c61200b84611dc281611db4611daf8f8f61117085611d9a9251612155565b50612015816150f8565b612020858d51612155565b5261203e6fffffffffffffffffffffffffffffffff84168587615215565b878d8d156120c257820151151591826120a4575b5050612065575b50505050505b01611fae565b8261207892611e4a82611e43885161666c565b9283612088575b8e93508c612059565b61209b9361209591610ba7565b91615215565b5f8f828261207f565b909150516120b181610fbe565b6120ba81610fbe565b14875f612052565b505050505050505061205f565b8c5190935060031c6001161592611fac565b6120ec91945061666c565b1515925f611fa5565b036120fc57565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b9061212e82610370565b61213b60405191826102ff565b828152601f1961214b8294610370565b0190602036910137565b80518210156121695760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b91908251916121a98251825190856150a9565b6121b283612124565b935f5b8481106121c457505050505090565b806121f96121d460019385612155565b516121f46121e28489612155565b516121ed8589612155565b51926150e5565b61576b565b6122038289612155565b52016121b5565b60041115610fc857565b519081151582036100ed57565b908160209103126100ed5761046290612214565b906004821015610fc85752565b95929361227361229795610462999793612289956001600160a01b038092168b521660208a01526040890190612235565b606087015260e0608087015260e0860190610465565b9084820360a0860152610465565b9160c0818403910152610498565b5f6001600160a01b03602095969361231d6122c787516001600160a01b031690565b946080880151976122d78961220a565b60a0608060408301519c0151910151916040519b8c9a8b998a977fba5f9f4000000000000000000000000000000000000000000000000000000000895260048901612242565b0393165af1908115610223575f91612360575b501561233857565b7f2aaf8866000000000000000000000000000000000000000000000000000000005f5260045ffd5b612382915060203d602011612388575b61237a81836102ff565b810190612221565b5f612330565b503d612370565b60208082015151925f5b8481106123a7575050505050565b6001906123f66fffffffffffffffffffffffffffffffff60406123d66123d085838b0151612155565b516150f8565b6123e48560a08b0151612155565b52835f528587525f20541682876151c8565b01612399565b60208082015151925f5b848110612414575050505050565b60019061245d6fffffffffffffffffffffffffffffffff604061243d6123d085838b0151612155565b61244b8560a08b0151612155565b52835f528587525f2054168287615215565b01612406565b60405190612470826102e3565b5f6040838281528260208201520152565b9080601f830112156100ed5781519060209161249c81610370565b936124aa60405195866102ff565b81855260208086019260051b8201019283116100ed57602001905b8282106124d3575050505090565b815181529083019083016124c5565b81601f820112156100ed578051906124f9826103f5565b9261250760405194856102ff565b828452602083830101116100ed57815f9260208093018386015e8301015290565b6080818303126100ed5780519260208201519167ffffffffffffffff928381116100ed5784612558918301612481565b9360408201518481116100ed5781612571918401612481565b9360608301519081116100ed5761046292016124e2565b939061046295936125c6936001600160a01b036125b893168752602087015260a0604087015260a0860190610465565b908482036060860152610465565b916080818403910152610498565b906001820180921161098e57565b9190820180921161098e57565b9161260c9061046294928452606060208501526060840190610465565b916040818403910152610465565b926126236115f0565b60609161262e612463565b926020860190612642825151808752612124565b90608084019687516126538161220a565b61265c8161220a565b612a9157506040840151906126718751612124565b956126ad8360808c01516126a761268f8a516001600160a01b031690565b6001600160a01b03165f52601160205260405f205490565b9061571a565b9261271e7f00000000000000000000000000000000000000000000000000000000000000005c6126e489516001600160a01b031690565b907f0000000000000000000000000000000000000000000000000000000000000000905f5260205260405f20905f5260205260405f205c90565b612a14575b60408701518082116129e3575061273c819a999a61578d565b60208a01985f5b8b5181101561289e578c6127578288612155565b516127618161578d565b61276b838a612155565b5161288c57816127918460a06127888260c0612798980151612155565b51930151612155565b519161579e565b806127a3838a612155565b525b6127b3611170838b51612155565b60608b016127c2848251612155565b51831061284057508e83611e708f8f8f966128349161281c86612814818b60019e9d6127f18861283a9f6116bb565b61280d6127fe8489612155565b5191516001600160a01b031690565b908d6157cd565b875292612155565b5261282b856060880151612155565b519251906125e2565b90610ba7565b01612743565b9161284f846111bd9451612155565b517f2f785e46000000000000000000000000000000000000000000000000000000005f526001600160a01b03909216600452602452604452606490565b50506128988188612155565b516127a5565b509399509594509592986128c49197506128bf85516001600160a01b031690565b6158f1565b7ffbe5b0d79fb94f1e81c0a92bf86ae9d3a19e9d1bf6202c0d3e75120f65d5d8a56128f684516001600160a01b031690565b9261291886602087019561291187516001600160a01b031690565b33916116f9565b612920615954565b6129b8575b61294b8661293a87516001600160a01b031690565b86516001600160a01b0316906159d4565b61297f61268f61297361296588516001600160a01b031690565b96516001600160a01b031690565b9451966111708861220a565b926129a76001600160a01b03926129958861220a565b8c8460405195869516981696846125ef565b0390a46129b2611645565b93929190565b6129de866129cd87516001600160a01b031690565b86516001600160a01b031690615969565b612925565b7f31d38e0b000000000000000000000000000000000000000000000000000000005f5260049190915260245260445ffd5b989491612a278b97949995929b51615350565b9a5f5b8651811015612a8157808b612a7a8f93612a74612a638f8390612a59600199612a53848a612155565b5161576b565b611dd08383612155565b51612a6e8386612155565b51610ba7565b92612155565b5201612a2a565b5091949893969a50919498612723565b949060018851612aa08161220a565b612aa98161220a565b03612b2d57612ab8895161528d565b60408501519186928a612b27612b1d8b8a6040612ad860608301516152c1565b92019482865286608082015193612b17610da4612b09612b0261268f88516001600160a01b031690565b9551615350565b95516001600160a01b031690565b946155ea565b909251909a612155565b52612723565b60028896929651612b3d8161220a565b612b468161220a565b03612bd957612b55895161528d565b612bd2826060870190612b79612b6b83516152c1565b60408c019381855251612155565b51612b85835188612155565b528b612b98608082015193518093612155565b51612bb7612bb061268f8c516001600160a01b031690565b9251615350565b92612bcc610da48c516001600160a01b031690565b946153a7565b9690612723565b509360038751612be88161220a565b612bf18161220a565b03612cb257612c008851615258565b5f612c18610da4610da487516001600160a01b031690565b9560408601519660808b0151918360a089015199612c666040519b8c96879586947fab68e28c0000000000000000000000000000000000000000000000000000000086523360048701612588565b03925af1948515610223575f915f965f925f91612c87575b50919692612723565b9250509550612ca891503d805f833e612ca081836102ff565b810190612528565b919690915f612c7e565b7f137a9a39000000000000000000000000000000000000000000000000000000005f5260045ffd5b9190916040818403126100ed57612cf081612214565b92602082015167ffffffffffffffff81116100ed576104629201612481565b969394610462989692612d7896612d49612d6a96612d5c95610100948d6001600160a01b0380931690521660208d015260408c0190612235565b60608a01528060808a0152880190610465565b9086820360a0880152610465565b9084820360c0860152610465565b9160e0818403910152610498565b949395929691908451612d9f906001600160a01b031690565b90608086015192612daf8461220a565b60808601518a60a0890151926040519b8c9788977f2754888d0000000000000000000000000000000000000000000000000000000089526004890197612df498612d0f565b03916001600160a01b031691815a5f948591f1938415610223575f905f95612f19575b50158015612f0d575b612ee5576001809360091c1615612e3e5792935090915f835b612e45575b5050505090565b8451811015612ee057612e588186612155565b516060840190612e69838351612155565b5111612e785750830183612e39565b612ea382612e9b81612e956111708b9760206111bd9a0151612155565b95612155565b519251612155565b517ffbd8a724000000000000000000000000000000000000000000000000000000005f526001600160a01b03909216600452602452604452606490565b612e3e565b7f1d3391d8000000000000000000000000000000000000000000000000000000005f5260045ffd5b50835185511415612e20565b9050612f389194503d805f833e612f3081836102ff565b810190612cda565b93905f612e17565b6040519291608084019067ffffffffffffffff8211858310176102c257612fc7916040525f855260208501945f8652612fbf60408201915f83528360608201965f88528299612fb860208401805190612fa86001600160a01b03928360408801511690614ce8565b8752519060608501511690614ce8565b90526131c7565b905251615350565b9052565b612fd482610fbe565b52565b919091606060c0604051612fea816102c7565b5f81525f60208201528260408201525f838201525f60808201525f60a0820152015280519261301884610fbe565b6080604082015193015160c0602083519301519301519361304161303a610342565b9687612fcb565b60208601526040850152606084015260808301523360a083015260c082015290565b90612fd482610fbe565b919060e0810190835161307f81610fbe565b8152602080850151602083015260408501519260e060408401528351809152602061010084019401915f5b8281106130fa575050505060c0846060610462959601516060840152608081015160808401526130ea60a082015160a08501906001600160a01b03169052565b01519060c0818403910152610498565b8351865294810194928101926001016130aa565b6020919261315e5f6001600160a01b038094604051978896879586937f5211fa7700000000000000000000000000000000000000000000000000000000855260406004860152604485019061306d565b911660248301520393165af1908115610223575f916131a8575b501561318057565b7fe91e17e7000000000000000000000000000000000000000000000000000000005f5260045ffd5b6131c1915060203d6020116123885761237a81836102ff565b5f613178565b91909180516131d581610fbe565b6131de81610fbe565b613223579061321a670de0b6b3a7640000936121ed608061321f9501519360a061320e60c0850151835190612155565b51930151905190612155565b6150e5565b0490565b6104629261325f61325960806121f49401519460a061324d602060c0870151930192835190612155565b51940151905190612155565b51615b3f565b926150e5565b91908260409103126100ed57602061327c83612214565b92015190565b90926132d3604093946001600160a01b039384918651978896879586947fa0e8f5ac00000000000000000000000000000000000000000000000000000000865260606004870152606486019061306d565b9216602484015260448301520392165afa908115610223575f905f9261335c575b501561333457670de0b5cad2bef000811161330c5790565b7f746e5940000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f53f976d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050613380915060403d604011613387575b61337881836102ff565b810190613265565b905f6132f4565b503d61336e565b5f949193929361339c6115f0565b6133a4612463565b9180516133b081610fbe565b6133b981610fbe565b15613745575b6020918286016133cf8151615b63565b83613424818501986133ee610da4610da48c516001600160a01b031690565b906040519c8d809481937f72c981860000000000000000000000000000000000000000000000000000000083526004830161376d565b03925af1988915610223575f99613726575b508861344181615b63565b835161344c81610fbe565b61345581610fbe565b6136ae57506040820151905261349460c088015161348d61325961347e87860193845190612155565b519260a08c0151905190612155565b908a61579e565b9360808301519685979860a085015180881061367e57505b60408501948a86516134c4906001600160a01b031690565b906134ce91614cd6565b606001958987516134e5906001600160a01b031690565b906134ef916116bb565b835183516001600160a01b031687516001600160a01b031687519161351493866157cd565b9190818601956040019283528552855160608401928d8285519061353791612155565b5190613542916125e2565b905161354d91610ba7565b61355791856151c8565b85019182518b8184519061356a91612155565b519061357591610ba7565b61357f91836151c8565b83516001600160a01b03165f90815260056020526040902091805187516135a591612155565b519160800191825188516135b891612155565b516135c291615c40565b87516135d69085905f5260205260405f2090565b555183516135e391612155565b51905183516135f191612155565b516135fb91615c40565b915161360e91905f5260205260405f2090565b5551925193516060928301519151604080518b8152602081018b905290810193909352928201929092526001600160a01b039182169382169291909116907f0874b2d545cb271cdbda4e093020c452328b24af12382ed62c4d00f5c26709db90608090a4939291906100fc611645565b7fe2ea151b000000000000000000000000000000000000000000000000000000005f52600488905260245260445ffd5b90508198506136d560606136de930151670de0b6b3a7640000818103908210029083615c0c565b908186526125e2565b9661370b6136f260c0890151835190612155565b5161370360a08a0151845190612155565b51908a615c2c565b93608083015196859860a085015180881161367e57506134ac565b61373e919950843d861161021c5761020e81836102ff565b975f613436565b6020850161376661375c825160608601519061576b565b8086528251610ba7565b90526133bf565b90602061046292818152019061306d565b6101a06104629260208352613797602084018251613063565b60208101516001600160a01b0316604084015260408101516001600160a01b0316606084015260608101516080840152608081015160a084015260a081015160c084015260c081015160e084015260e08101516101009081850152810151610120908185015281015161381861014091828601906001600160a01b03169052565b8101519061383461016092838601906001600160a01b03169052565b015191610180808201520190610498565b939590919492865161385681610fbe565b61385f81610fbe565b613aae5786604085015191845b82519461387886610fbe565b604097889788860151613891906001600160a01b031690565b9660608701516138a7906001600160a01b031690565b9360800192835181516138b991612155565b51935190602001516138ca91612155565b519360208801516138e1906001600160a01b031690565b9760c00151986138ef61034f565b9a6138fa908c612fcb565b6001600160a01b031660208b01526001600160a01b0316898b01526060890152608088015260a087015260c086015260e085015261010084018890526001600160a01b03166101208401526001600160a01b0316610140830152610160820152815196878080937f18b6eb5500000000000000000000000000000000000000000000000000000000825260048201906139929161377e565b03916001600160a01b03165a905f91f1948515610223575f915f96613a8a575b505015613a625760091c60011615613a5c575080516139d081610fbe565b6139d981610fbe565b1580613a4f575b8015613a24575b6139ef575090565b60a001517fcc0e4a99000000000000000000000000000000000000000000000000000000005f5260049190915260245260445ffd5b5060018151613a3281610fbe565b613a3b81610fbe565b1480156139e7575060a081015182116139e7565b5060a081015182106139e0565b91505090565b7f15a29dec000000000000000000000000000000000000000000000000000000005f5260045ffd5b613aa593965080919250903d106133875761337881836102ff565b93905f806139b2565b8660408501519184929461386c565b6001600160a01b0380911690815f52600e6020528060405f2054169216809203613ae5575050565b7f36b18d09000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b907f000000000000000000000000000000000000000000000000000000000000000011613b3d5750565b6001600160a01b03907f18fe7385000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b81810392915f13801582851316918412161761098e57565b9190915f838201938412911290801582169115161761098e57565b939091613bb185610fbe565b84158015613f7357613bff6020613bc787610b99565b604051809381927fef8b30f7000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03816001600160a01b0387165afa801561022357613c24915f91613f54575b50610b99565b94955b613c42836001600160a01b03165f52600b60205260405f2090565b5491613c4c615954565b613f4c57869288929091608083901c91858310613cca5750505092613cc482613ca186613c9c6001600160a01b03966fffffffffffffffffffffffffffffffff896100fc9b60801c0393166125e2565b615c40565b9788613cbe856001600160a01b03165f52600b60205260405f2090565b55614cd6565b166116bb565b90929350613cd9919450610fbe565b15613df457613d01613cfc613cee8584615f06565b613cf78a614d4e565b613b8a565b615d67565b926001600160a01b03811693613d18818689615eb7565b6040517f6e553f650000000000000000000000000000000000000000000000000000000081526004810182905230602482015294602090869060449082905f905af1801561022357613ca18995613dcf87613dc46001600160a01b038f96888f896100fc9f859e613dbe8f613cc49f613dc496613dc9996fffffffffffffffffffffffffffffffff965f91613dd5575b509a8b935b1690613db98282615d9c565b615f9b565b166125e2565b610ba7565b946125e2565b90615c40565b613dee915060203d60201161021c5761020e81836102ff565b5f613da8565b9091613e14613cfc613e068385615ca4565b613e0f89614d4e565b613b72565b6040517fb3d7f6b9000000000000000000000000000000000000000000000000000000008152600481018290526001600160a01b038316936020939290918481602481895afa801561022357613e73915f91613f2f575b50868a615eb7565b6040517f94bf804d00000000000000000000000000000000000000000000000000000000815260048101829052306024820152948490869060449082905f905af1918215610223576100fc96613dcf8b613dc4858f966001600160a01b038f896fffffffffffffffffffffffffffffffff879f9a849f8f96613cc49f97613dc496613ca19f99613dc99a613dbe955f92613f12575b5050988992613dad565b613f289250803d1061021c5761020e81836102ff565b5f80613f08565b613f469150863d881161021c5761020e81836102ff565b5f613e6b565b509093505050565b613f6d915060203d60201161021c5761020e81836102ff565b5f613c1e565b613fb96020613f81876125d4565b604051809381927fb3d7f6b9000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03816001600160a01b0387165afa801561022357613fde915f91613fe4575b506125d4565b95613c27565b613ffd915060203d60201161021c5761020e81836102ff565b5f613fd8565b939061400e85610fbe565b84159485156142fd5761405d602061402587610b99565b604051809381927f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03816001600160a01b0389165afa801561022357614081915f91613f545750610b99565b94955b61409f856001600160a01b03165f52600b60205260405f2090565b54916140a9615954565b613f4c5787938793909290916fffffffffffffffffffffffffffffffff918284169186831061412957505050936001600160a01b036140ff83866100fc986140f7866141249860801c6125e2565b921603615c40565b978861411c826001600160a01b03165f52600b60205260405f2090565b555b16614cd6565b6116bb565b9196509294506141399150610fbe565b156142375761414e613cfc613cee8785615ca4565b6040517fba087652000000000000000000000000000000000000000000000000000000008152600481018290523060248201819052604482015293906020856064815f6001600160a01b038c165af18015610223576141f58995613dcf84613dc48e6141ec8b8f6001600160a01b036100fc9f9c6141e78f9d6141249f94889f859f613dc4975f91614218575b509586925b1690615fe0565b6125e2565b9460801c6125e2565b9788614212826001600160a01b03165f52600b60205260405f2090565b5561411e565b614231915060203d60201161021c5761020e81836102ff565b5f6141db565b614247613cfc613e068785615f06565b6040517fb460af940000000000000000000000000000000000000000000000000000000081526004810182905230602482018190526044820152906020826064815f6001600160a01b038c165af1918215610223576141f58995613dcf6001600160a01b03613dc48e6141ec8b8f8a6100fc9f6141e78f936141249f9e889f958b9f96613dc4975f916142de575b509b8c936141e0565b6142f7915060203d60201161021c5761020e81836102ff565b5f6142d5565b614343602061430b876125d4565b604051809381927f0a28a477000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03816001600160a01b0389165afa801561022357614367915f91613fe457506125d4565b95614084565b805c906001820180921161098e575d565b905f5260205260405f20905f52602052600160405f205d565b91908251916143aa8251825190856150a9565b6143b383612124565b935f5b8481106143c557505050505090565b80670de0b6b3a76400006143f76143de60019486612155565b5161321a6143ec858a612155565b516121ed868a612155565b046144028289612155565b52016143b6565b60051115610fc857565b906005821015610fc85752565b95919361445161046298969461446293612297976001600160a01b038092168b521660208a01526040890190614413565b60e0606088015260e0870190610465565b91608086015284820360a0860152610465565b925f6001600160a01b036020959693966144ef61449987516001600160a01b031690565b946080880151976144a989614409565b60a060806060830151930151910151916040519b8c9a8b998a977f45421ec700000000000000000000000000000000000000000000000000000000895260048901614420565b0393165af1908115610223575f91614532575b501561450a57565b7f0b2eb652000000000000000000000000000000000000000000000000000000005f5260045ffd5b61454b915060203d6020116123885761237a81836102ff565b5f614502565b916080838303126100ed5782519067ffffffffffffffff918281116100ed578361457c918601612481565b9360208101519360408201518481116100ed5781612571918401612481565b936145c56125c6936001600160a01b0361046298969416875260a0602088015260a0870190610465565b9160408601528482036060860152610465565b91906145e26115f0565b60606145ec612463565b91602085016145ff815151808652612124565b6080830195865161460f81614409565b61461881614409565b6148895750606083015161462c8651612124565b946146508260808b015161464a61268f89516001600160a01b031690565b9061640b565b995b6060860151808410614859575061466b8399989961578d565b60208901975f5b8c8b51821015614798578161468691612155565b516146908161578d565b61469a8288612155565b51614787576146bf908d6146b88460a06127888260c0860151612155565b5191615c2c565b806146ca8389612155565b525b6146da611170838a51612155565b60408a016146e9848251612155565b51831161473b57508d83611e708e61472d8f968f9761471886612814818b60019e9d6127f1886147359f614cd6565b52614727856060880151612155565b516125e2565b905190610ba7565b01614672565b9161474a846111bd9451612155565b517f8eda85e4000000000000000000000000000000000000000000000000000000005f526001600160a01b03909216600452602452604452606490565b506147928187612155565b516146cc565b50509396945096509650966147b8906128bf85516001600160a01b031690565b7fa26a52d8d53702bba7f137907b8e1f99ff87f6d450144270ca25e72481cca8716147ea84516001600160a01b031690565b9261480b89602087019561480587516001600160a01b031690565b90616452565b61483161268f61482561296588516001600160a01b031690565b94519661117088614409565b926129a76001600160a01b039261484788614409565b888460405195869516981696846125ef565b7f8d261d5d000000000000000000000000000000000000000000000000000000005f52600484905260245260445ffd5b6003875161489681614409565b61489f81614409565b036148c1576148ae88516163d6565b6148b88151612124565b945f9199614652565b97600187516148cf81614409565b6148d881614409565b03614940576148e7885161528d565b614938896148f9846040880151616172565b60808a01519061491361268f88516001600160a01b031690565b61491d8c51615350565b91614932610da48a516001600160a01b031690565b9361618d565b959091614652565b97936002875161494f81614409565b61495881614409565b036149c45797879861496a895161528d565b606085015191614979876152c1565b6149be6149b460408b0192808452898b9f886080820151936149ae610da4612b09612b0261268f88516001600160a01b031690565b946160a7565b9092519099612155565b52614652565b50600486516149d281614409565b6149db81614409565b03614a9c576149ea8751616072565b5f614a02610da4610da486516001600160a01b031690565b60608501519060808a0151918360a088015198614a4f6040519a8b96879586947fe4c43663000000000000000000000000000000000000000000000000000000008652336004870161459b565b03925af1938415610223575f905f955f915f91614a71575b5090959199614652565b92505050614a929194503d805f833e614a8a81836102ff565b810190614551565b919592915f614a67565b7f6c02b395000000000000000000000000000000000000000000000000000000005f5260045ffd5b9692610462989694614b1a93614afe614b0c93612d789995610100938d6001600160a01b0380931690521660208d015260408c0190614413565b8060608b0152890190610465565b908782036080890152610465565b9160a086015284820360c0860152610465565b949391959296908451614b46906001600160a01b031690565b608086015191614b5583614409565b608086015160a0880151906040968c6040519c8d9788977f976907cc0000000000000000000000000000000000000000000000000000000089526004890197614b9d98614ac4565b03916001600160a01b031691815a5f948591f1948515610223575f905f96614cb7575b50158015614cab575b614c83576001809460091c1615614be957909192809495505f905b614bf1575b505050505090565b8551811015614c7e57614c048187612155565b5182850190614c14838351612155565b5110614c235750840184614be4565b8690614c4183612e9b81612e956111706111bd9860208c0151612155565b517fcefa3afa000000000000000000000000000000000000000000000000000000005f526001600160a01b03909216600452602452604452606490565b614be9565b7fe1249165000000000000000000000000000000000000000000000000000000005f5260045ffd5b50845186511415614bc9565b9050614cce9195503d805f833e612f3081836102ff565b94905f614bc0565b614ce26100fc92614d4e565b90614da3565b905f5b8251811015614d19576001600160a01b0380614d078386612155565b511690831614613a5c57600101614ceb565b6001600160a01b03827fddef98d7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8111614d785790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8115614e60576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000009116805f5281602052614dea60405f205c9384613b8a565b9283614e2e57507f0000000000000000000000000000000000000000000000000000000000000000805c905f19820191821161098e575d5b5f5260205260405f205d565b614e2257614e5b7f000000000000000000000000000000000000000000000000000000000000000061436d565b614e22565b5050565b6001600160a01b03929183811684841603614e8257505050505f1990565b614eac9361176292165f52601060205260405f20906001600160a01b03165f5260205260405f2090565b5490565b90604051918281549182825260209260208301915f5260205f20935f905b828210614ee4575050506100fc925003836102ff565b85546001600160a01b031684526001958601958895509381019390910190614ece565b90614f1182610370565b614f1e60405191826102ff565b828152601f19614f2e8294610370565b01905f5b828110614f3e57505050565b602090614f49612463565b82828501015201614f32565b90604051614f62816102e3565b604060ff829454818116614f7581610fbe565b84526001600160a01b038160081c16602085015260a81c161515910152565b60608101805151935f5b858110614fad57505050505050565b80614fc16111706001936020880151612155565b614fec614fd68389905f5260205260405f2090565b546fffffffffffffffffffffffffffffffff1690565b614ff7838751612155565b51811161503e575b505061502561500f828651612155565b5161501e836080890151612155565b5190615c40565b6150378288905f5260205260405f2090565b5501614f9e565b6150896150a19161508361507a615066868a906001600160a01b03165f5260205260405f2090565b5492615073888c51612155565b5190610ba7565b8260801c6125e2565b906166e2565b9185906001600160a01b03165f5260205260405f2090565b555f80614fff565b811480159291906150bd575b50506120fc57565b141590505f806150b5565b90670de0b6b3a76400009182810292818404149015171561098e57565b8181029291811591840414171561098e57565b805161510381610fbe565b61510c81610fbe565b8061511f575050670de0b6b3a764000090565b8061512b600192610fbe565b036151a057602061514a610da48260049401516001600160a01b031690565b604051928380927f679aefce0000000000000000000000000000000000000000000000000000000082525afa908115610223575f91615187575090565b610462915060203d60201161021c5761020e81836102ff565b7fdf450632000000000000000000000000000000000000000000000000000000005f5260045ffd5b91906080670de0b6b3a764000061520c612fd494806151eb8660608a0151612155565b5261321a6151fd8660c08a0151612155565b516121ed8760a08b0151612155565b04930151612155565b91906080615250612fd4938061522f856060890151612155565b526121f46152418560c0890151612155565b516121ed8660a08a0151612155565b930151612155565b60061c6001161561526557565b7fcf0a95c0000000000000000000000000000000000000000000000000000000005f5260045ffd5b60041c60011661529957565b7fd4f5779c000000000000000000000000000000000000000000000000000000005f5260045ffd5b80519081905f5b8281106153035750508110156152db5790565b7f7e46bddc000000000000000000000000000000000000000000000000000000005f5260045ffd5b61530d8183612155565b5161531b575b6001016152c8565b9282036153285782615313565b7f6b8c3be5000000000000000000000000000000000000000000000000000000005f5260045ffd5b62ffffff9060121c1664174876e8009081810291818304149015171561098e5790565b9190602061538a5f92604086526040860190610465565b930152565b9190602061538a600192604086526040860190610465565b90949291928151946153b886612124565b945f5b8781106155a157506153d190612a6e8988612155565b6153db8887612155565b52604051947f984de9e80000000000000000000000000000000000000000000000000000000092838752602087806154168860048301615373565b03816001600160a01b0385165afa968715610223575f97615580575b50604051948486526020868061544b8660048301615373565b03816001600160a01b0386165afa93841561022357613dc46154ad8c6150736154a66154c39661549f8f61548f6154f99f9160209e88935f91615561575b50615bb3565b9261549a848d6166fe565b612155565b519061576b565b9188612155565b91670de0b6b3a764000081810391100282615bb3565b936154d285612a6e8c86612155565b6154dc8b85612155565b526001600160a01b0360405180978195829483526004830161538f565b0392165afa908115610223576155359561552f935f93615538575b5061552161552891612124565b9788612155565b5283610ba7565b90615c0c565b91565b6155289193506155596155219160203d60201161021c5761020e81836102ff565b939150615514565b602061557a92503d60201161021c5761020e81836102ff565b5f615489565b61559a91975060203d60201161021c5761020e81836102ff565b955f615432565b806155b76155b160019388612155565b51610b99565b6155c1828a612155565b52016153bb565b6155e060409295949395606083526060830190610465565b9460208201520152565b90949183039183831161098e5760206156506001600160a01b039261560f8787615bb3565b61561981836166fe565b6040519485809481937f16a0b3e00000000000000000000000000000000000000000000000000000000083528d8a600485016155c8565b0392165afa801561022357615535956121f48861569b936156a4986156ab965f926156b1575b5061568982612a6e613dc494958b612155565b986156948d8a612155565b5190615c0c565b93849251612124565b9586612155565b52610ba7565b613dc49250612a6e936156d56156899260203d60201161021c5761020e81836102ff565b93509350615676565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b8115615715570490565b6156de565b9092916157278251612124565b915f5b815181101561576457615747836157418385612155565b516150e5565b90861561571557866001920461575d8287612155565b520161572a565b5050509150565b90615775916150e5565b6001670de0b6b3a76400005f19830104019015150290565b806157955750565b6100fc90615b63565b916157a8916150e5565b90670de0b6b3a76400009081810291818304149015171561098e578115615715570490565b91949290945f955f95816157e2575050505050565b8497506127916157fb8260c06158079697980151612155565b519160a08a0151612155565b945160018160031c161561581d575b8080611711565b62ffffff91929450602a1c1664174876e8009081810291818304149015171561098e57615853670de0b6b3a764000091866150e5565b04928484116158c957806117626158a86158856158c094611762876001600160a01b03165f52600660205260405f2090565b546158a2886fffffffffffffffffffffffffffffffff83166125e2565b906167b5565b936001600160a01b03165f52600660205260405f2090565b555f8080615816565b7f4c69ac5d000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160a01b0390929192165f52602060056020526040805f205f5b6060860151805182101561594b579061593b61592c82600194612155565b5161501e8360808b0151612155565b815f52838652845f20550161590e565b50505050509050565b32158061595e5790565b506001600754161590565b90326159ac576001600160a01b0361599d92165f52600f60205260405f20906001600160a01b03165f5260205260405f2090565b805491820180921161098e5755565b7f67f84ab2000000000000000000000000000000000000000000000000000000005f5260045ffd5b90916001600160a01b03808416928315611a8e57615a0785611762836001600160a01b03165f52600f60205260405f2090565b54808411615b0257839003615a3186611762846001600160a01b03165f52600f60205260405f2090565b55615a5783615a51836001600160a01b03165f52601160205260405f2090565b54610ba7565b615a60816167c3565b615a7b826001600160a01b03165f52601160205260405f2090565b551690813b156100ed576040517f23de66510000000000000000000000000000000000000000000000000000000081526001600160a01b0390941660048501525f6024850181905260448501829052937fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f91615afd91868180606481016117f6565b0390a4565b7fe450d38c000000000000000000000000000000000000000000000000000000005f526001600160a01b038616600452602452604483905260645ffd5b670de0b6b3a7640000808204028103615b555790565b6001810180911161098e5790565b7f000000000000000000000000000000000000000000000000000000000000000011615b8b57565b7f1ed4d118000000000000000000000000000000000000000000000000000000005f5260045ffd5b908015615be457670de0b6b3a76400009182810292818404149015171561098e576001905f19830104019015150290565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b8215615be457600191615c1e916150e5565b915f19830104019015150290565b9061046292615c3a916150e5565b90615bb3565b906fffffffffffffffffffffffffffffffff808311908115615c9a575b50615c725760801b90810180911161098e5790565b7f89560ca1000000000000000000000000000000000000000000000000000000005f5260045ffd5b905081115f615c5d565b90615cb18260801c614d4e565b906fffffffffffffffffffffffffffffffff5f931680615cde575b5050600291615cda91613b72565b0590565b6001600160a01b03935090602460209260405195869384927f0a28a4770000000000000000000000000000000000000000000000000000000084526004840152165afa90811561022357615d3f615cda926002945f91615d48575b50614d4e565b92819250615ccc565b615d61915060203d60201161021c5761020e81836102ff565b5f615d39565b5f8112615d715790565b7fa8ce4432000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6040517f095ea7b300000000000000000000000000000000000000000000000000000000602082018181526001600160a01b03851660248401525f6044840152909391929183606481015b0391615dfb601f19938481018752866102ff565b5f806001600160a01b0386169287519082855af190615e18616025565b82615e85575b5081615e7a575b5015615e32575050505050565b60405160208101959095526001600160a01b031660248501525f604485015260649081018452615e709361096491615e6a90826102ff565b826165a0565b5f80808080611711565b90503b15155f615e25565b80519192508115918215615e9d575b5050905f615e1e565b615eb09250602080918301019101612221565b5f80615e94565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000602082018181526001600160a01b038516602484015260448301959095529390928360648101615de7565b90615f226fffffffffffffffffffffffffffffffff8316614d4e565b905f9260801c80615f3b575050600291615cda91613b72565b6001600160a01b03935090602460209260405195869384927fb3d7f6b90000000000000000000000000000000000000000000000000000000084526004840152165afa90811561022357615d3f615cda926002945f91615d485750614d4e565b9291906001600160a01b038085165f52600860205260405f205492830392831161098e5781165f52600860205260405f205492830180931161098e576100fc936167fb565b9291906001600160a01b038085165f52600860205260405f205492830180931161098e5781165f52600860205260405f205492830392831161098e576100fc936167fb565b3d1561604f573d90616036826103f5565b9161604460405193846102ff565b82523d5f602084013e565b606090565b5f806104629360208151910182855af161606c616025565b91616982565b60051c6001161561607f57565b7f4876c0bc000000000000000000000000000000000000000000000000000000005f5260045ffd5b90949160206160d66160c1866001600160a01b03946125e2565b946160cc8787615bb3565b6156198183616a0e565b0392165afa80156102235761553595613dc46154ad8561569b946156a4998c998a616135995f9461613b575b509061612961612261611b616130946128349798612155565b5187610ba7565b9c8c612155565b51906150e5565b61570b565b526125e2565b612834945061612261611b61613094936161666161299460203d60201161021c5761020e81836102ff565b97509394505050616102565b9060208083516161838451826120f5565b60051b930191015e565b92919093835161619c81612124565b916161a682612124565b965f5b83811061639b5750506001600160a01b03811691604051957f984de9e800000000000000000000000000000000000000000000000000000000928388526020988989806161f98460048301615373565b0381895afa988915610223575f9961637c575b506040518581528a81806162238b6004830161538f565b03818a5afa908115610223578a61613061625e93616257938f5f9261635f575b9b999d9c9a989796959493929190506150c8565b8093616a0e565b5f5b8981106162cd5750505050616284955060405180968194829383526004830161538f565b03915afa9182156102235783616130936162aa92615535975f926162b0575b5050610ba7565b906150e5565b6162c69250803d1061021c5761020e81836102ff565b5f806162a3565b869899959750838d8394959698836162f16162ea82600198612155565b51896167a2565b806162fc8385612155565b5111616318575b505050505001908a9694989795939291616260565b818361633961634a97616343946163328561507399612155565b510361576b565b611dd08388612155565b5192612155565b616354828b612155565b52848d8a835f616303565b6163759250803d1061021c5761020e81836102ff565b5f8f616243565b6163949199508a3d8c1161021c5761020e81836102ff565b975f61620c565b806163c56163c06163ae6001948c612155565b516163b98487612155565b51906125e2565b610b99565b6163cf8288612155565b52016161a9565b60071c600116156163e357565b7fefe0265d000000000000000000000000000000000000000000000000000000005f5260045ffd5b92916164178451612124565b935f5b815181101561644c578061643b858561643560019587612155565b51615c0c565b6164458289612155565b520161641a565b50505050565b916001600160a01b0380831693841561656b5761648a83616484836001600160a01b03165f52601160205260405f2090565b546125e2565b6164a985611762846001600160a01b03165f52600f60205260405f2090565b8481540190556164b8816167c3565b6164d3826001600160a01b03165f52601160205260405f2090565b5516925f847fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f6040518061650c87829190602083019252565b0390a4823b156100ed576040517f23de66510000000000000000000000000000000000000000000000000000000081525f600482018190526001600160a01b0390931660248201526044810191909152918290818381606481016119fe565b7fec442f05000000000000000000000000000000000000000000000000000000005f526001600160a01b03841660045260245ffd5b6001600160a01b036165b491169182616054565b80519081151591826165f5575b50506165ca5750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6166089250602080918301019101612221565b155f806165c1565b9064ffffffffff61662082612124565b92605a1c165f5b8281106166345750505090565b600580820290828204148215171561098e5782601f911c1690604d821161098e57600191600a0a6166658287612155565b5201616627565b62ffffff9060421c1664174876e8009081810291818304149015171561098e5790565b9093925f946166a2846080850151612155565b518181116166b1575050505050565b6166d7959650916166c691612791930361576b565b9260a06127888260c0860151612155565b905f80808080611711565b906fffffffffffffffffffffffffffffffff6104629216615c40565b9060206001600160a01b03926004604051809581937fb677fa56000000000000000000000000000000000000000000000000000000008352165afa918215610223575f92616781575b50818110616753575050565b7fe31c95be000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b61679b91925060203d60201161021c5761020e81836102ff565b905f616747565b670de0b6b3a76400009161321f916150e5565b906104629160801c90615c40565b620f424081106167d05750565b7fd38d20fc000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000808252306004830152602095939490926001600160a01b03929187836024818786165afa928315610223575f93616963575b5080831061691e5750616875906001600160a01b03165f52600860205260405f2090565b556040519182523060048301528316908481602481855afa948515610223575f956168ff575b50508184106168c45750506168c1906001600160a01b03165f52600860205260405f2090565b55565b7f1149424d000000000000000000000000000000000000000000000000000000005f526001600160a01b03166004526024525060445260645ffd5b616916929550803d1061021c5761020e81836102ff565b925f8061689b565b90506111bd92867f1c6a5375000000000000000000000000000000000000000000000000000000005f52169291906001600160a01b0360649416600452602452604452565b61697b919350883d8a1161021c5761020e81836102ff565b915f616851565b906169bf575080511561699757805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580616a05575b6169d0575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b156169c8565b9060206001600160a01b03926004604051809581937f273c1adf000000000000000000000000000000000000000000000000000000008352165afa918215610223575f92616a91575b50818111616a63575050565b7f3e8960dc000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b616aab91925060203d60201161021c5761020e81836102ff565b905f616a57565b91909163ffffffff8080941691160191821161098e5756fea2646970667358221220bdbdd4322d6f59d90560043e08c2efef84699d8d2c325f29bf8ef64a016d5bc464736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x18 JUMPI JUMPDEST CALLDATASIZE PUSH2 0x15A6 JUMPI PUSH2 0x157E JUMP JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x15AFD409 EQ PUSH2 0xD7 JUMPI DUP1 PUSH4 0x15DACBEA EQ PUSH2 0xD2 JUMPI DUP1 PUSH4 0x21457897 EQ PUSH2 0xCD JUMPI DUP1 PUSH4 0x2BFB780C EQ PUSH2 0xC8 JUMPI DUP1 PUSH4 0x43583BE5 EQ PUSH2 0xC3 JUMPI DUP1 PUSH4 0x48C89491 EQ PUSH2 0xBE JUMPI DUP1 PUSH4 0x4AF29EC4 EQ PUSH2 0xB9 JUMPI DUP1 PUSH4 0xAE639329 EQ PUSH2 0xB4 JUMPI DUP1 PUSH4 0xB9A8EFFA EQ PUSH2 0xAF JUMPI DUP1 PUSH4 0xBEABACC8 EQ PUSH2 0xAA JUMPI DUP1 PUSH4 0xC9C1661B EQ PUSH2 0xA5 JUMPI PUSH4 0xD2C725E0 SUB PUSH2 0xE JUMPI PUSH2 0xB14 JUMP JUMPDEST PUSH2 0xA16 JUMP JUMPDEST PUSH2 0x9E0 JUMP JUMPDEST PUSH2 0x99D JUMP JUMPDEST PUSH2 0x89A JUMP JUMPDEST PUSH2 0x7CA JUMP JUMPDEST PUSH2 0x731 JUMP JUMPDEST PUSH2 0x6A5 JUMP JUMPDEST PUSH2 0x5CD JUMP JUMPDEST PUSH2 0x4E8 JUMP JUMPDEST PUSH2 0x228 JUMP JUMPDEST PUSH2 0xFE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SUB PUSH2 0xED JUMPI JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLDATALOAD SWAP1 PUSH2 0xFC DUP3 PUSH2 0xDC JUMP JUMPDEST JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x11B DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x126 PUSH2 0x15F0 JUMP JUMPDEST PUSH2 0x12E PUSH2 0x166A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD SWAP2 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP5 SWAP3 DUP3 SWAP1 PUSH1 0x24 SWAP1 DUP3 SWAP1 GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x223 JUMPI PUSH2 0x1E6 SWAP5 PUSH2 0x1BA SWAP3 PUSH0 SWAP2 PUSH2 0x1F4 JUMPI JUMPDEST POP DUP1 PUSH2 0x1B4 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0xBA7 JUMP JUMPDEST SWAP2 DUP1 DUP4 GT PUSH2 0x1EA JUMPI JUMPDEST POP DUP2 PUSH2 0x1CE SWAP2 PUSH2 0x16BB JUMP JUMPDEST PUSH2 0x1D6 PUSH2 0x1645 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST SWAP2 POP PUSH2 0x1CE PUSH2 0x1C3 JUMP JUMPDEST PUSH2 0x216 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI JUMPDEST PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0xB52 JUMP JUMPDEST PUSH0 PUSH2 0x197 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x204 JUMP JUMPDEST PUSH2 0xB61 JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH2 0x276 PUSH1 0x4 CALLDATALOAD PUSH2 0x248 DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x254 DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH2 0x261 DUP3 PUSH2 0xDC JUMP JUMPDEST PUSH2 0x270 PUSH1 0x64 CALLDATALOAD DUP1 SWAP5 DUP4 CALLER PUSH2 0x16F9 JUMP JUMPDEST CALLER PUSH2 0x18DD JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2C2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH2 0x281 JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2C2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2C2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2C2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0xC0 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2C2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0xFC DUP3 PUSH2 0x2C7 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x180 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2C2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2C2 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0xED JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x3A2 DUP2 PUSH2 0x370 JUMP JUMPDEST SWAP4 PUSH2 0x3B0 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x2FF JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xED JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x3D9 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x3CB JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH1 0x4 DUP3 LT ISZERO PUSH2 0xED JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2C2 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH2 0x41D DUP3 PUSH2 0x3F5 JUMP JUMPDEST SWAP2 PUSH2 0x42B PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x2FF JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0xED JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0xED JUMPI DUP2 PUSH1 0x20 PUSH2 0x462 SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0x411 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x484 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x476 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x4DA SWAP1 PUSH2 0x462 SWAP5 SWAP3 DUP5 MSTORE PUSH1 0x60 PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD SWAP1 PUSH2 0x465 JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x498 JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x3 NOT PUSH1 0x20 DUP2 CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP3 GT PUSH2 0xED JUMPI PUSH1 0xC0 SWAP1 DUP3 CALLDATASIZE SUB ADD SLT PUSH2 0xED JUMPI PUSH2 0x522 PUSH2 0x322 JUMP JUMPDEST PUSH2 0x52E DUP3 PUSH1 0x4 ADD PUSH2 0xF1 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x53C PUSH1 0x24 DUP4 ADD PUSH2 0xF1 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x44 DUP3 ADD CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x64 DUP3 ADD CALLDATALOAD DUP4 DUP2 GT PUSH2 0xED JUMPI PUSH2 0x567 SWAP1 PUSH1 0x4 CALLDATASIZE SWAP2 DUP6 ADD ADD PUSH2 0x388 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x578 PUSH1 0x84 DUP4 ADD PUSH2 0x3E8 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA4 DUP3 ADD CALLDATALOAD SWAP3 DUP4 GT PUSH2 0xED JUMPI PUSH2 0x59F PUSH2 0x5A9 SWAP3 PUSH1 0x4 PUSH2 0x1E6 SWAP6 CALLDATASIZE SWAP3 ADD ADD PUSH2 0x447 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0xBB4 JUMP JUMPDEST PUSH1 0x40 SWAP4 SWAP2 SWAP4 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x4BD JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0xED JUMPI JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH2 0xFC DUP3 PUSH2 0x5B8 JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x3 NOT PUSH1 0x20 DUP2 CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP3 GT PUSH2 0xED JUMPI PUSH1 0xE0 SWAP1 DUP3 CALLDATASIZE SUB ADD SLT PUSH2 0xED JUMPI PUSH2 0x607 PUSH2 0x342 JUMP JUMPDEST PUSH2 0x613 DUP3 PUSH1 0x4 ADD PUSH2 0x5C2 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x621 PUSH1 0x24 DUP4 ADD PUSH2 0xF1 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x632 PUSH1 0x44 DUP4 ADD PUSH2 0xF1 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x643 PUSH1 0x64 DUP4 ADD PUSH2 0xF1 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x84 DUP3 ADD CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA4 DUP3 ADD CALLDATALOAD PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xC4 DUP3 ADD CALLDATALOAD SWAP3 DUP4 GT PUSH2 0xED JUMPI PUSH2 0x67E PUSH2 0x688 SWAP3 PUSH1 0x4 PUSH2 0x1E6 SWAP6 CALLDATASIZE SWAP3 ADD ADD PUSH2 0x447 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0xD3E JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 ADD MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x60 DUP3 ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2C2 JUMPI PUSH2 0x1E6 SWAP2 PUSH2 0x688 SWAP2 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATALOAD PUSH2 0x6E7 DUP2 PUSH2 0x5B8 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x24 CALLDATALOAD PUSH2 0x6F5 DUP2 PUSH2 0x5B8 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH2 0x706 DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x84 CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH2 0xFCD JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0x462 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x498 JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0xED JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0xED JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP2 DUP3 GT PUSH2 0xED JUMPI CALLDATASIZE PUSH1 0x24 DUP4 DUP4 ADD ADD GT PUSH2 0xED JUMPI PUSH2 0x1E6 SWAP2 PUSH1 0x24 PUSH2 0x788 SWAP3 ADD PUSH2 0x130D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x720 JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0xED JUMPI JUMP JUMPDEST PUSH2 0x7B7 PUSH2 0x462 SWAP5 SWAP3 PUSH1 0x60 DUP4 MSTORE PUSH1 0x60 DUP4 ADD SWAP1 PUSH2 0x465 JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x498 JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x3 NOT PUSH1 0x20 DUP2 CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP3 GT PUSH2 0xED JUMPI PUSH1 0xC0 SWAP1 DUP3 CALLDATASIZE SUB ADD SLT PUSH2 0xED JUMPI PUSH2 0x804 PUSH2 0x322 JUMP JUMPDEST PUSH2 0x810 DUP3 PUSH1 0x4 ADD PUSH2 0xF1 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x81E PUSH1 0x24 DUP4 ADD PUSH2 0xF1 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x44 DUP3 ADD CALLDATALOAD DUP4 DUP2 GT PUSH2 0xED JUMPI PUSH2 0x83F SWAP1 PUSH1 0x4 CALLDATASIZE SWAP2 DUP6 ADD ADD PUSH2 0x388 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x64 DUP3 ADD CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x85A PUSH1 0x84 DUP4 ADD PUSH2 0x794 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0xA4 DUP3 ADD CALLDATALOAD SWAP3 DUP4 GT PUSH2 0xED JUMPI PUSH2 0x881 PUSH2 0x88B SWAP3 PUSH1 0x4 PUSH2 0x1E6 SWAP6 CALLDATASIZE SWAP3 ADD ADD PUSH2 0x447 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH2 0x13DA JUMP JUMPDEST PUSH1 0x40 SWAP4 SWAP2 SWAP4 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x7A1 JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x8B7 DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x8C4 DUP3 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH2 0x8D0 PUSH2 0x15F0 JUMP JUMPDEST PUSH2 0x8D8 PUSH2 0x166A JUMP JUMPDEST PUSH2 0x8EA PUSH2 0x8E4 DUP4 PUSH2 0x4D4E JUMP JUMPDEST DUP3 PUSH2 0x4DA3 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP4 DUP4 DUP6 SUB SWAP5 DUP6 GT PUSH2 0x98E JUMPI SWAP4 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP1 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 MSTORE PUSH2 0x969 SWAP2 SWAP1 PUSH2 0x964 PUSH1 0x64 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH2 0x65A0 JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH2 0xB6C JUMP JUMPDEST PUSH0 SWAP2 SUB SLT PUSH2 0xED JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH2 0x276 PUSH1 0x4 CALLDATALOAD PUSH2 0xA00 DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0xA0C DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 CALLER PUSH2 0x18DD JUMP JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0xA33 DUP2 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xA40 DUP3 PUSH2 0xDC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP2 DUP3 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 SWAP3 PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0xAE9 JUMPI PUSH0 SWAP4 SWAP3 SWAP4 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH1 0x20 DUP7 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP6 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP3 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xABC JUMPI DUP7 PUSH2 0xAA9 DUP8 PUSH2 0xAA3 DUP4 DUP13 SUB DUP5 PUSH2 0x2FF JUMP JUMPDEST DUP3 PUSH2 0x4CE8 JUMP JUMPDEST SWAP1 MLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE RETURN JUMPDEST SWAP1 SWAP2 SWAP3 DUP1 PUSH2 0xADD DUP7 SWAP10 DUP5 DUP4 SWAP9 SLOAD AND SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 SWAP3 AND DUP2 MSTORE ADD SWAP1 JUMP JUMPDEST SWAP9 ADD SWAP5 SWAP4 SWAP3 ADD SWAP1 PUSH2 0xA8B JUMP JUMPDEST PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xED JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xED JUMPI PUSH1 0x20 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xED JUMPI MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH0 NOT DUP3 ADD SWAP2 DUP3 GT PUSH2 0x98E JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x98E JUMPI JUMP JUMPDEST SWAP1 PUSH2 0xBBD PUSH2 0x166A JUMP JUMPDEST PUSH2 0xBD0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 MLOAD AND PUSH2 0x1AC3 JUMP JUMPDEST PUSH2 0xBE9 PUSH2 0xBE4 DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x1B10 JUMP JUMPDEST PUSH2 0xC02 PUSH2 0xBFD DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x1C38 JUMP JUMPDEST SWAP1 PUSH2 0xC56 PUSH1 0x20 DUP4 ADD MLOAD MLOAD PUSH2 0xC1D PUSH1 0x60 DUP7 ADD SWAP2 DUP3 MLOAD MLOAD SWAP1 PUSH2 0x20F5 JUMP JUMPDEST DUP1 MLOAD PUSH1 0xC0 DUP6 ADD SWAP1 PUSH2 0xC37 DUP3 MLOAD SWAP2 PUSH1 0xA0 DUP9 ADD SWAP3 DUP4 MLOAD SWAP2 PUSH2 0x2196 JUMP JUMPDEST SWAP3 PUSH2 0xC47 DUP8 MLOAD PUSH1 0x1 SWAP1 PUSH1 0x10 SHR AND SWAP1 JUMP JUMPDEST PUSH2 0xCCF JUMPI JUMPDEST POP POP POP DUP5 DUP5 PUSH2 0x261A JUMP JUMPDEST SWAP5 SWAP1 SWAP2 SWAP6 DUP7 PUSH2 0xC6A DUP4 MLOAD PUSH1 0x1 SWAP1 PUSH1 0x11 SHR AND SWAP1 JUMP JUMPDEST PUSH2 0xC78 JUMPI JUMPDEST POP POP POP POP SWAP3 SWAP2 SWAP1 JUMP JUMPDEST DUP5 SWAP8 POP SWAP4 PUSH2 0xCC5 SWAP5 PUSH2 0xCBB PUSH2 0xCAE PUSH2 0xC97 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 DUP5 MLOAD CALLER SWAP1 PUSH2 0x2D86 JUMP JUMPDEST SWAP3 PUSH0 DUP1 DUP1 DUP1 PUSH2 0xC6F JUMP JUMPDEST PUSH2 0xCF7 PUSH2 0xD36 SWAP5 DUP9 DUP11 PUSH2 0xCEF PUSH2 0xCAE PUSH2 0xC97 DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 CALLER SWAP1 PUSH2 0x22A5 JUMP JUMPDEST PUSH2 0xD2B PUSH2 0xD25 PUSH2 0xD0E DUP11 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP9 PUSH2 0x238F JUMP JUMPDEST MLOAD SWAP2 MLOAD SWAP1 MLOAD SWAP2 PUSH2 0x2196 JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0xC4C JUMP JUMPDEST SWAP1 PUSH2 0xD47 PUSH2 0x166A JUMP JUMPDEST PUSH1 0x20 DUP3 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xD60 DUP2 DUP5 MLOAD AND PUSH2 0x1AC3 JUMP JUMPDEST PUSH2 0xD74 PUSH2 0xBE4 DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD MLOAD ISZERO PUSH2 0xF69 JUMPI PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0xDB0 PUSH2 0xDA4 PUSH1 0x60 DUP8 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP2 AND EQ PUSH2 0xF41 JUMPI PUSH2 0xDCB PUSH2 0xBFD DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 PUSH2 0xDD6 DUP5 DUP3 PUSH2 0x2F40 JUMP JUMPDEST SWAP1 PUSH2 0xDE2 DUP6 DUP4 DUP4 PUSH2 0x2FD7 JUMP JUMPDEST DUP6 MLOAD PUSH1 0xC SHR PUSH1 0x1 AND PUSH2 0xEC6 JUMPI JUMPDEST DUP6 MLOAD PUSH2 0xE09 SWAP2 SWAP1 PUSH1 0xB SHR PUSH1 0x1 AND PUSH2 0xE85 JUMPI JUMPDEST DUP7 DUP5 DUP5 PUSH2 0x338E JUMP JUMPDEST SWAP8 SWAP2 SWAP8 SWAP5 SWAP1 SWAP8 DUP4 SWAP8 PUSH2 0xE20 DUP5 MLOAD PUSH1 0x1 SWAP1 PUSH1 0xD SHR AND SWAP1 JUMP JUMPDEST PUSH2 0xE50 JUMPI JUMPDEST POP POP POP POP POP MLOAD PUSH2 0xE34 DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0xE3D DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0xE48 JUMPI POP DUP2 SWAP3 SWAP2 SWAP1 JUMP JUMPDEST SWAP2 DUP1 SWAP4 POP SWAP2 SWAP1 JUMP JUMPDEST DUP6 SWAP9 POP SWAP1 PUSH2 0xE6F PUSH2 0xCAE PUSH2 0xC97 PUSH2 0xE7A SWAP9 SWAP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 DUP5 MLOAD SWAP2 CALLER SWAP3 PUSH2 0x3845 JUMP JUMPDEST SWAP3 PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0xE25 JUMP JUMPDEST DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0xEBF PUSH1 0x60 DUP7 ADD SWAP2 DUP3 MLOAD PUSH2 0xEB8 PUSH2 0xCAE DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 DUP6 PUSH2 0x3282 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0xE01 JUMP JUMPDEST PUSH2 0xEFF SWAP1 PUSH2 0xEDB DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0xEF9 PUSH2 0xCAE DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x310E JUMP JUMPDEST PUSH2 0xF1C PUSH2 0xF16 PUSH2 0xD0E DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP7 PUSH2 0x238F JUMP JUMPDEST PUSH2 0xF27 DUP3 DUP7 DUP4 PUSH2 0x31C7 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0xE09 PUSH2 0xF3A DUP7 DUP5 DUP5 PUSH2 0x2FD7 JUMP JUMPDEST SWAP1 POP PUSH2 0xDEF JUMP JUMPDEST PUSH32 0xA54B181D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x57A456B700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0xFC8 JUMPI JUMP JUMPDEST PUSH2 0xF91 JUMP JUMPDEST PUSH2 0xFD5 PUSH2 0x166A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x7 SLOAD PUSH1 0x2 SHR AND PUSH2 0x12D0 JUMPI PUSH1 0x40 DUP2 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP2 MLOAD AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x12A4 JUMPI PUSH1 0x4 SWAP5 POP PUSH2 0x1015 PUSH2 0x15F0 JUMP JUMPDEST PUSH1 0x20 PUSH2 0x102B PUSH2 0xDA4 DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP7 DUP8 DUP1 SWAP3 PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL DUP1 ISZERO PUSH2 0x223 JUMPI PUSH1 0x80 SWAP6 PUSH0 SWAP2 PUSH2 0x1275 JUMPI JUMPDEST POP AND PUSH2 0x1083 DUP2 PUSH2 0x107E DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x3ABD JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x109F PUSH1 0x60 DUP7 ADD SWAP3 DUP4 MLOAD SWAP1 PUSH2 0x3B13 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0x10AF DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x10B8 DUP2 PUSH2 0xFBE JUMP JUMPDEST SUB PUSH2 0x120A JUMPI PUSH2 0x10E0 SWAP2 DUP6 MLOAD SWAP2 PUSH2 0x10CD DUP4 PUSH2 0xFBE JUMP JUMPDEST DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 MLOAD SWAP3 PUSH2 0x4003 JUMP JUMPDEST PUSH32 0xEEB740C90BF2B18C9532EB7D473137767036D893DFF3E009F32718F821B2A4C0 DUP3 SWAP7 SWAP3 SWAP8 SWAP4 SWAP8 SWAP7 DUP9 PUSH2 0x113E PUSH2 0x1120 PUSH2 0xDA4 DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 PUSH1 0x60 DUP3 ADD SWAP6 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 JUMPDEST DUP1 MLOAD PUSH2 0x114D DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x1156 DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x11C0 JUMPI ADD MLOAD DUP1 DUP5 LT PUSH2 0x118F JUMPI POP PUSH2 0x1182 PUSH2 0x117D SWAP2 DUP5 SWAP3 DUP4 SWAP2 JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x3B13 JUMP JUMPDEST PUSH2 0x118A PUSH2 0x1645 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 JUMP JUMPDEST PUSH32 0xE2EA151B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 DUP5 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 JUMPDEST PUSH0 REVERT JUMPDEST ADD MLOAD DUP1 DUP6 GT PUSH2 0x11DA JUMPI POP PUSH2 0x1182 PUSH2 0x117D SWAP2 DUP6 SWAP3 DUP4 SWAP2 PUSH2 0x1170 JUMP JUMPDEST PUSH32 0xE2EA151B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 DUP6 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x122D SWAP2 DUP6 MLOAD SWAP2 PUSH2 0x121A DUP4 PUSH2 0xFBE JUMP JUMPDEST DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 MLOAD SWAP3 PUSH2 0x3BA5 JUMP JUMPDEST PUSH32 0x3771D13C67011E31E12031C54BB59B0BF544A80B81D280A3711E172AA8B7F47B DUP3 SWAP7 SWAP3 SWAP8 SWAP4 SWAP8 SWAP7 DUP9 PUSH2 0x126D PUSH2 0x1120 PUSH2 0xDA4 DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 PUSH2 0x1142 JUMP JUMPDEST PUSH2 0x1297 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x129D JUMPI JUMPDEST PUSH2 0x128F DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x12F8 JUMP JUMPDEST PUSH0 PUSH2 0x1067 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1285 JUMP JUMPDEST DUP5 PUSH32 0x85F4129900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xF27DF0900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xED JUMPI MLOAD PUSH2 0x462 DUP2 PUSH2 0xDC JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH2 0x134F PUSH2 0x1349 PUSH32 0x0 SWAP3 DUP4 TLOAD ISZERO SWAP6 DUP7 PUSH2 0x13D1 JUMPI JUMPDEST CALLDATASIZE SWAP2 PUSH2 0x411 JUMP JUMPDEST CALLER PUSH2 0x6054 JUMP JUMPDEST SWAP3 PUSH2 0x1357 JUMPI POP JUMP JUMPDEST PUSH32 0x0 TLOAD PUSH2 0x13A9 JUMPI PUSH0 SWAP1 TSTORE PUSH2 0xFC PUSH32 0x0 PUSH2 0x436D JUMP JUMPDEST PUSH32 0x20F1D86D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 DUP6 TSTORE PUSH2 0x1342 JUMP JUMPDEST SWAP1 PUSH2 0x13E3 PUSH2 0x166A JUMP JUMPDEST PUSH2 0x13F6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 MLOAD AND PUSH2 0x1AC3 JUMP JUMPDEST PUSH2 0x140A PUSH2 0xBE4 DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x1467 PUSH32 0x0 TLOAD PUSH2 0x1440 DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0x0 PUSH2 0x437E JUMP JUMPDEST PUSH2 0x1480 PUSH2 0x147B DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x1ED0 JUMP JUMPDEST SWAP1 PUSH2 0x14D4 PUSH1 0x20 DUP4 ADD MLOAD MLOAD PUSH2 0x149B PUSH1 0x40 DUP7 ADD SWAP2 DUP3 MLOAD MLOAD SWAP1 PUSH2 0x20F5 JUMP JUMPDEST DUP1 MLOAD PUSH1 0xC0 DUP6 ADD SWAP1 PUSH2 0x14B5 DUP3 MLOAD SWAP2 PUSH1 0xA0 DUP9 ADD SWAP3 DUP4 MLOAD SWAP2 PUSH2 0x4397 JUMP JUMPDEST SWAP3 PUSH2 0x14C5 DUP8 MLOAD PUSH1 0x1 SWAP1 PUSH1 0xE SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x1527 JUMPI JUMPDEST POP POP POP DUP5 DUP5 PUSH2 0x45D8 JUMP JUMPDEST SWAP5 SWAP1 SWAP6 DUP7 DUP5 PUSH2 0x14E8 DUP5 MLOAD PUSH1 0x1 SWAP1 PUSH1 0xF SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x14F7 JUMPI JUMPDEST POP POP POP POP POP SWAP3 SWAP2 SWAP1 JUMP JUMPDEST PUSH2 0x151D SWAP6 POP PUSH2 0x1513 PUSH2 0xCAE PUSH2 0xC97 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 DUP5 MLOAD CALLER SWAP1 PUSH2 0x4B2D JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP7 DUP2 PUSH2 0x14ED JUMP JUMPDEST PUSH2 0x154E PUSH2 0x1576 SWAP5 DUP9 DUP11 PUSH2 0x1547 PUSH2 0xCAE PUSH2 0xC97 DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 CALLER PUSH2 0x4475 JUMP JUMPDEST PUSH2 0x156B PUSH2 0x1565 PUSH2 0xD0E DUP11 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP9 PUSH2 0x23FC JUMP JUMPDEST MLOAD SWAP2 MLOAD SWAP1 MLOAD SWAP2 PUSH2 0x4397 JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0x14CA JUMP JUMPDEST PUSH32 0xF223889600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x157E JUMPI CALLDATASIZE PUSH0 DUP1 CALLDATACOPY PUSH0 DUP1 CALLDATASIZE DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS DELEGATECALL RETURNDATASIZE PUSH0 DUP1 RETURNDATACOPY ISZERO PUSH2 0x15EC JUMPI RETURNDATASIZE PUSH0 RETURN JUMPDEST RETURNDATASIZE PUSH0 REVERT JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x161D JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE JUMP JUMPDEST PUSH32 0x0 TLOAD ISZERO PUSH2 0x1693 JUMPI JUMP JUMPDEST PUSH32 0xC09BA73600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x16C5 SWAP1 PUSH2 0x4D4E JUMP JUMPDEST SWAP1 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP3 EQ PUSH2 0x98E JUMPI PUSH2 0xFC SWAP2 PUSH0 SUB SWAP1 PUSH2 0x4DA3 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 SWAP2 PUSH2 0x1708 DUP3 DUP5 DUP7 PUSH2 0x4E64 JUMP JUMPDEST PUSH0 NOT DUP2 SUB PUSH2 0x1718 JUMPI JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP1 DUP3 GT PUSH2 0x18A2 JUMPI SUB SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP2 AND SWAP4 DUP5 ISZERO PUSH2 0x186D JUMPI DUP1 DUP4 AND SWAP6 DUP7 ISZERO PUSH2 0x1838 JUMPI DUP5 PUSH2 0x1778 DUP6 PUSH2 0x1762 DUP7 PUSH2 0x1762 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x10 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0xED JUMPI PUSH1 0x40 MLOAD PUSH32 0x5687F2B800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH32 0xA0175360A15BCA328BAF7EA85C7B784D58B222A50D0CE760B10DBA336D226A61 SWAP2 PUSH2 0x1812 SWAP2 PUSH0 DUP2 DUP1 PUSH1 0x64 DUP2 ADD JUMPDEST SUB DUP2 DUP4 DUP10 GAS CALL PUSH2 0x181F JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x1711 JUMP JUMPDEST DUP1 PUSH2 0x182C PUSH2 0x1832 SWAP3 PUSH2 0x2AE JUMP JUMPDEST DUP1 PUSH2 0x993 JUMP JUMPDEST PUSH0 PUSH2 0x1801 JUMP JUMPDEST PUSH32 0x94280D6200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xE602DF0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 PUSH32 0xFB8F41B200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST SWAP3 SWAP1 SWAP2 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0x1A8E JUMPI DUP1 DUP7 AND SWAP2 DUP3 ISZERO PUSH2 0x1A59 JUMPI PUSH2 0x191D DUP7 PUSH2 0x1762 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD DUP1 DUP7 GT PUSH2 0x1A1C JUMPI DUP6 SWAP1 SUB PUSH2 0x1947 DUP8 PUSH2 0x1762 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0x1967 DUP8 PUSH2 0x1762 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP6 DUP2 SLOAD ADD SWAP1 SSTORE AND SWAP2 DUP3 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F PUSH1 0x40 MLOAD DUP1 PUSH2 0x19A4 DUP9 DUP3 SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB SWAP1 LOG4 DUP1 EXTCODESIZE ISZERO PUSH2 0xED JUMPI PUSH1 0x40 MLOAD PUSH32 0x23DE665100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP4 SWAP1 SWAP3 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE PUSH0 SWAP1 DUP3 SWAP1 DUP2 DUP4 DUP2 PUSH1 0x64 DUP2 ADD JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x223 JUMPI PUSH2 0x1A0F JUMPI POP JUMP JUMPDEST DUP1 PUSH2 0x182C PUSH2 0xFC SWAP3 PUSH2 0x2AE JUMP JUMPDEST PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 DUP6 SWAP1 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x96C6FD1E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 SHR AND ISZERO PUSH2 0x1AE5 JUMPI POP JUMP JUMPDEST PUSH32 0x4BDACE1300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0xFFFFFFFF DUP1 PUSH32 0x0 AND TIMESTAMP GT ISZERO DUP1 PUSH2 0x1C2A JUMPI JUMPDEST PUSH2 0x1C02 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x2 SHR AND SWAP1 PUSH2 0x1B6B PUSH1 0x5A SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x28 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x98E JUMPI DUP3 PUSH2 0x1BBC JUMPI JUMPDEST POP POP SWAP1 POP PUSH2 0x1B88 JUMPI POP JUMP JUMPDEST PUSH32 0xD971F59700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x1BEE SWAP3 POP PUSH2 0x1BF7 SWAP4 PUSH32 0x0 SWAP3 SHR AND PUSH2 0x6AB2 JUMP JUMPDEST PUSH4 0xFFFFFFFF AND SWAP1 JUMP JUMPDEST TIMESTAMP GT ISZERO DUP1 PUSH0 DUP1 PUSH2 0x1B7D JUMP JUMPDEST PUSH32 0xDA9F8B3400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x7 SLOAD DUP2 SHR AND PUSH2 0x1B41 JUMP JUMPDEST PUSH1 0x40 SWAP1 DUP2 MLOAD SWAP2 PUSH2 0x1C47 DUP4 PUSH2 0x2C7 JUMP JUMPDEST PUSH0 DUP4 MSTORE DUP3 PUSH1 0x20 DUP2 ADD SWAP2 PUSH1 0x60 DUP1 DUP5 MSTORE DUP2 DUP4 ADD SWAP1 DUP1 DUP3 MSTORE DUP1 DUP5 ADD SWAP1 DUP1 DUP3 MSTORE PUSH1 0x80 SWAP4 PUSH1 0x80 DUP7 ADD DUP3 DUP2 MSTORE PUSH1 0xA0 DUP8 ADD DUP4 DUP2 MSTORE PUSH1 0xC0 DUP9 ADD SWAP4 DUP5 MSTORE PUSH2 0x1C83 PUSH2 0x15F0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SWAP4 PUSH0 PUSH1 0x20 MSTORE DUP4 PUSH0 KECCAK256 SLOAD SWAP3 PUSH1 0x4 PUSH1 0x20 MSTORE PUSH2 0x1CBF DUP6 PUSH0 KECCAK256 SWAP5 PUSH1 0x3 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SWAP1 DUP2 SLOAD SWAP13 MSTORE PUSH2 0x4EB0 JUMP JUMPDEST DUP12 MSTORE PUSH2 0x1CCA DUP11 PUSH2 0x4F07 JUMP JUMPDEST DUP9 MSTORE PUSH2 0x1CD5 DUP11 PUSH2 0x2124 JUMP JUMPDEST DUP8 MSTORE PUSH2 0x1CE0 DUP11 PUSH2 0x2124 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x1CED DUP10 DUP14 MLOAD PUSH2 0x6610 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x1CF8 DUP9 PUSH2 0x2124 JUMP JUMPDEST DUP2 MSTORE DUP11 MLOAD SWAP2 PUSH1 0x1 SWAP10 PUSH1 0x1 DUP5 DUP2 SHR AND SWAP4 DUP5 PUSH2 0x1EBC JUMPI JUMPDEST POP DUP4 PUSH2 0x1EAA JUMPI JUMPDEST PUSH0 JUMPDEST DUP14 DUP12 DUP3 LT PUSH2 0x1D74 JUMPI POP POP POP POP POP POP POP POP POP POP POP POP POP DUP1 PUSH2 0x1D65 PUSH2 0x1D4D PUSH2 0x1D6C SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x4F94 JUMP JUMPDEST PUSH2 0x462 PUSH2 0x1645 JUMP JUMPDEST SWAP1 DUP11 DUP14 SWAP3 DUP3 DUP13 DUP13 DUP13 PUSH2 0x1DD6 DUP5 PUSH2 0x1DC2 DUP2 PUSH2 0x1DB4 PUSH2 0x1DAF DUP16 DUP16 PUSH2 0x1170 DUP6 PUSH2 0x1D9A SWAP3 MLOAD PUSH2 0x2155 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0x4F55 JUMP JUMPDEST SWAP5 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP5 MLOAD DUP4 PUSH2 0x1DD0 DUP4 DUP4 PUSH2 0x2155 JUMP JUMPDEST MSTORE PUSH2 0x2155 JUMP JUMPDEST POP PUSH2 0x1DE0 DUP2 PUSH2 0x50F8 JUMP JUMPDEST PUSH2 0x1DEB DUP6 DUP14 MLOAD PUSH2 0x2155 JUMP JUMPDEST MSTORE PUSH2 0x1E09 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP6 DUP8 PUSH2 0x51C8 JUMP JUMPDEST DUP8 DUP14 DUP14 ISZERO PUSH2 0x1E9D JUMPI DUP3 ADD MLOAD ISZERO ISZERO SWAP2 DUP3 PUSH2 0x1E7F JUMPI JUMPDEST POP POP PUSH2 0x1E30 JUMPI JUMPDEST POP POP POP POP POP JUMPDEST ADD PUSH2 0x1D16 JUMP JUMPDEST DUP3 PUSH2 0x1E53 SWAP3 PUSH2 0x1E4A DUP3 PUSH2 0x1E43 DUP9 MLOAD PUSH2 0x666C JUMP JUMPDEST SWAP5 MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP7 SHR DUP6 PUSH2 0x668F JUMP JUMPDEST SWAP3 DUP4 PUSH2 0x1E63 JUMPI JUMPDEST DUP15 SWAP4 POP DUP13 PUSH2 0x1E24 JUMP JUMPDEST PUSH2 0x1E76 SWAP4 PUSH2 0x1E70 SWAP2 PUSH2 0xBA7 JUMP JUMPDEST SWAP2 PUSH2 0x51C8 JUMP JUMPDEST PUSH0 DUP16 DUP3 DUP3 PUSH2 0x1E5A JUMP JUMPDEST SWAP1 SWAP2 POP MLOAD PUSH2 0x1E8C DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x1E95 DUP2 PUSH2 0xFBE JUMP JUMPDEST EQ DUP8 PUSH0 PUSH2 0x1E1D JUMP JUMPDEST POP POP POP POP POP POP POP POP PUSH2 0x1E2A JUMP JUMPDEST DUP13 MLOAD SWAP1 SWAP4 POP PUSH1 0x3 SHR PUSH1 0x1 AND ISZERO SWAP3 PUSH2 0x1D14 JUMP JUMPDEST PUSH2 0x1EC7 SWAP2 SWAP5 POP PUSH2 0x666C JUMP JUMPDEST ISZERO ISZERO SWAP3 PUSH0 PUSH2 0x1D0D JUMP JUMPDEST PUSH1 0x40 SWAP1 DUP2 MLOAD SWAP2 PUSH2 0x1EDF DUP4 PUSH2 0x2C7 JUMP JUMPDEST PUSH0 DUP4 MSTORE DUP3 PUSH1 0x20 DUP2 ADD SWAP2 PUSH1 0x60 DUP1 DUP5 MSTORE DUP2 DUP4 ADD SWAP1 DUP1 DUP3 MSTORE DUP1 DUP5 ADD SWAP1 DUP1 DUP3 MSTORE PUSH1 0x80 SWAP4 PUSH1 0x80 DUP7 ADD DUP3 DUP2 MSTORE PUSH1 0xA0 DUP8 ADD DUP4 DUP2 MSTORE PUSH1 0xC0 DUP9 ADD SWAP4 DUP5 MSTORE PUSH2 0x1F1B PUSH2 0x15F0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SWAP4 PUSH0 PUSH1 0x20 MSTORE DUP4 PUSH0 KECCAK256 SLOAD SWAP3 PUSH1 0x4 PUSH1 0x20 MSTORE PUSH2 0x1F57 DUP6 PUSH0 KECCAK256 SWAP5 PUSH1 0x3 PUSH1 0x20 MSTORE DUP7 PUSH0 KECCAK256 SWAP1 DUP2 SLOAD SWAP13 MSTORE PUSH2 0x4EB0 JUMP JUMPDEST DUP12 MSTORE PUSH2 0x1F62 DUP11 PUSH2 0x4F07 JUMP JUMPDEST DUP9 MSTORE PUSH2 0x1F6D DUP11 PUSH2 0x2124 JUMP JUMPDEST DUP8 MSTORE PUSH2 0x1F78 DUP11 PUSH2 0x2124 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x1F85 DUP10 DUP14 MLOAD PUSH2 0x6610 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x1F90 DUP9 PUSH2 0x2124 JUMP JUMPDEST DUP2 MSTORE DUP11 MLOAD SWAP2 PUSH1 0x1 SWAP10 PUSH1 0x1 DUP5 DUP2 SHR AND SWAP4 DUP5 PUSH2 0x20E1 JUMPI JUMPDEST POP DUP4 PUSH2 0x20CF JUMPI JUMPDEST PUSH0 JUMPDEST DUP14 DUP12 DUP3 LT PUSH2 0x1FE5 JUMPI POP POP POP POP POP POP POP POP POP POP POP POP POP DUP1 PUSH2 0x1D65 PUSH2 0x1D4D PUSH2 0x1D6C SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP11 DUP14 SWAP3 DUP3 DUP13 DUP13 DUP13 PUSH2 0x200B DUP5 PUSH2 0x1DC2 DUP2 PUSH2 0x1DB4 PUSH2 0x1DAF DUP16 DUP16 PUSH2 0x1170 DUP6 PUSH2 0x1D9A SWAP3 MLOAD PUSH2 0x2155 JUMP JUMPDEST POP PUSH2 0x2015 DUP2 PUSH2 0x50F8 JUMP JUMPDEST PUSH2 0x2020 DUP6 DUP14 MLOAD PUSH2 0x2155 JUMP JUMPDEST MSTORE PUSH2 0x203E PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP6 DUP8 PUSH2 0x5215 JUMP JUMPDEST DUP8 DUP14 DUP14 ISZERO PUSH2 0x20C2 JUMPI DUP3 ADD MLOAD ISZERO ISZERO SWAP2 DUP3 PUSH2 0x20A4 JUMPI JUMPDEST POP POP PUSH2 0x2065 JUMPI JUMPDEST POP POP POP POP POP JUMPDEST ADD PUSH2 0x1FAE JUMP JUMPDEST DUP3 PUSH2 0x2078 SWAP3 PUSH2 0x1E4A DUP3 PUSH2 0x1E43 DUP9 MLOAD PUSH2 0x666C JUMP JUMPDEST SWAP3 DUP4 PUSH2 0x2088 JUMPI JUMPDEST DUP15 SWAP4 POP DUP13 PUSH2 0x2059 JUMP JUMPDEST PUSH2 0x209B SWAP4 PUSH2 0x2095 SWAP2 PUSH2 0xBA7 JUMP JUMPDEST SWAP2 PUSH2 0x5215 JUMP JUMPDEST PUSH0 DUP16 DUP3 DUP3 PUSH2 0x207F JUMP JUMPDEST SWAP1 SWAP2 POP MLOAD PUSH2 0x20B1 DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x20BA DUP2 PUSH2 0xFBE JUMP JUMPDEST EQ DUP8 PUSH0 PUSH2 0x2052 JUMP JUMPDEST POP POP POP POP POP POP POP POP PUSH2 0x205F JUMP JUMPDEST DUP13 MLOAD SWAP1 SWAP4 POP PUSH1 0x3 SHR PUSH1 0x1 AND ISZERO SWAP3 PUSH2 0x1FAC JUMP JUMPDEST PUSH2 0x20EC SWAP2 SWAP5 POP PUSH2 0x666C JUMP JUMPDEST ISZERO ISZERO SWAP3 PUSH0 PUSH2 0x1FA5 JUMP JUMPDEST SUB PUSH2 0x20FC JUMPI JUMP JUMPDEST PUSH32 0xAAAD13F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x212E DUP3 PUSH2 0x370 JUMP JUMPDEST PUSH2 0x213B PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x2FF JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x214B DUP3 SWAP5 PUSH2 0x370 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x2169 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 MLOAD SWAP2 PUSH2 0x21A9 DUP3 MLOAD DUP3 MLOAD SWAP1 DUP6 PUSH2 0x50A9 JUMP JUMPDEST PUSH2 0x21B2 DUP4 PUSH2 0x2124 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x21C4 JUMPI POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x21F9 PUSH2 0x21D4 PUSH1 0x1 SWAP4 DUP6 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x21F4 PUSH2 0x21E2 DUP5 DUP10 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x21ED DUP6 DUP10 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP3 PUSH2 0x50E5 JUMP JUMPDEST PUSH2 0x576B JUMP JUMPDEST PUSH2 0x2203 DUP3 DUP10 PUSH2 0x2155 JUMP JUMPDEST MSTORE ADD PUSH2 0x21B5 JUMP JUMPDEST PUSH1 0x4 GT ISZERO PUSH2 0xFC8 JUMPI JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0xED JUMPI JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xED JUMPI PUSH2 0x462 SWAP1 PUSH2 0x2214 JUMP JUMPDEST SWAP1 PUSH1 0x4 DUP3 LT ISZERO PUSH2 0xFC8 JUMPI MSTORE JUMP JUMPDEST SWAP6 SWAP3 SWAP4 PUSH2 0x2273 PUSH2 0x2297 SWAP6 PUSH2 0x462 SWAP10 SWAP8 SWAP4 PUSH2 0x2289 SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP12 MSTORE AND PUSH1 0x20 DUP11 ADD MSTORE PUSH1 0x40 DUP10 ADD SWAP1 PUSH2 0x2235 JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0xE0 PUSH1 0x80 DUP8 ADD MSTORE PUSH1 0xE0 DUP7 ADD SWAP1 PUSH2 0x465 JUMP JUMPDEST SWAP1 DUP5 DUP3 SUB PUSH1 0xA0 DUP7 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST SWAP2 PUSH1 0xC0 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x498 JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 SWAP6 SWAP7 SWAP4 PUSH2 0x231D PUSH2 0x22C7 DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH1 0x80 DUP9 ADD MLOAD SWAP8 PUSH2 0x22D7 DUP10 PUSH2 0x220A JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x80 PUSH1 0x40 DUP4 ADD MLOAD SWAP13 ADD MLOAD SWAP2 ADD MLOAD SWAP2 PUSH1 0x40 MLOAD SWAP12 DUP13 SWAP11 DUP12 SWAP10 DUP11 SWAP8 PUSH32 0xBA5F9F4000000000000000000000000000000000000000000000000000000000 DUP10 MSTORE PUSH1 0x4 DUP10 ADD PUSH2 0x2242 JUMP JUMPDEST SUB SWAP4 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP2 PUSH2 0x2360 JUMPI JUMPDEST POP ISZERO PUSH2 0x2338 JUMPI JUMP JUMPDEST PUSH32 0x2AAF886600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x2382 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x2388 JUMPI JUMPDEST PUSH2 0x237A DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2221 JUMP JUMPDEST PUSH0 PUSH2 0x2330 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2370 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD MLOAD MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x23A7 JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH2 0x23F6 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH2 0x23D6 PUSH2 0x23D0 DUP6 DUP4 DUP12 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x50F8 JUMP JUMPDEST PUSH2 0x23E4 DUP6 PUSH1 0xA0 DUP12 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MSTORE DUP4 PUSH0 MSTORE DUP6 DUP8 MSTORE PUSH0 KECCAK256 SLOAD AND DUP3 DUP8 PUSH2 0x51C8 JUMP JUMPDEST ADD PUSH2 0x2399 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD MLOAD MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x2414 JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH2 0x245D PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH2 0x243D PUSH2 0x23D0 DUP6 DUP4 DUP12 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST PUSH2 0x244B DUP6 PUSH1 0xA0 DUP12 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MSTORE DUP4 PUSH0 MSTORE DUP6 DUP8 MSTORE PUSH0 KECCAK256 SLOAD AND DUP3 DUP8 PUSH2 0x5215 JUMP JUMPDEST ADD PUSH2 0x2406 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x2470 DUP3 PUSH2 0x2E3 JUMP JUMPDEST PUSH0 PUSH1 0x40 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0xED JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x249C DUP2 PUSH2 0x370 JUMP JUMPDEST SWAP4 PUSH2 0x24AA PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x2FF JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xED JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x24D3 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x24C5 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0xED JUMPI DUP1 MLOAD SWAP1 PUSH2 0x24F9 DUP3 PUSH2 0x3F5 JUMP JUMPDEST SWAP3 PUSH2 0x2507 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x2FF JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0xED JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP2 DUP4 SUB SLT PUSH2 0xED JUMPI DUP1 MLOAD SWAP3 PUSH1 0x20 DUP3 ADD MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0xED JUMPI DUP5 PUSH2 0x2558 SWAP2 DUP4 ADD PUSH2 0x2481 JUMP JUMPDEST SWAP4 PUSH1 0x40 DUP3 ADD MLOAD DUP5 DUP2 GT PUSH2 0xED JUMPI DUP2 PUSH2 0x2571 SWAP2 DUP5 ADD PUSH2 0x2481 JUMP JUMPDEST SWAP4 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0xED JUMPI PUSH2 0x462 SWAP3 ADD PUSH2 0x24E2 JUMP JUMPDEST SWAP4 SWAP1 PUSH2 0x462 SWAP6 SWAP4 PUSH2 0x25C6 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x25B8 SWAP4 AND DUP8 MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP8 ADD MSTORE PUSH1 0xA0 DUP7 ADD SWAP1 PUSH2 0x465 JUMP JUMPDEST SWAP1 DUP5 DUP3 SUB PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x498 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x98E JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x98E JUMPI JUMP JUMPDEST SWAP2 PUSH2 0x260C SWAP1 PUSH2 0x462 SWAP5 SWAP3 DUP5 MSTORE PUSH1 0x60 PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD SWAP1 PUSH2 0x465 JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST SWAP3 PUSH2 0x2623 PUSH2 0x15F0 JUMP JUMPDEST PUSH1 0x60 SWAP2 PUSH2 0x262E PUSH2 0x2463 JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP7 ADD SWAP1 PUSH2 0x2642 DUP3 MLOAD MLOAD DUP1 DUP8 MSTORE PUSH2 0x2124 JUMP JUMPDEST SWAP1 PUSH1 0x80 DUP5 ADD SWAP7 DUP8 MLOAD PUSH2 0x2653 DUP2 PUSH2 0x220A JUMP JUMPDEST PUSH2 0x265C DUP2 PUSH2 0x220A JUMP JUMPDEST PUSH2 0x2A91 JUMPI POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 PUSH2 0x2671 DUP8 MLOAD PUSH2 0x2124 JUMP JUMPDEST SWAP6 PUSH2 0x26AD DUP4 PUSH1 0x80 DUP13 ADD MLOAD PUSH2 0x26A7 PUSH2 0x268F DUP11 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x571A JUMP JUMPDEST SWAP3 PUSH2 0x271E PUSH32 0x0 TLOAD PUSH2 0x26E4 DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0x0 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2A14 JUMPI JUMPDEST PUSH1 0x40 DUP8 ADD MLOAD DUP1 DUP3 GT PUSH2 0x29E3 JUMPI POP PUSH2 0x273C DUP2 SWAP11 SWAP10 SWAP11 PUSH2 0x578D JUMP JUMPDEST PUSH1 0x20 DUP11 ADD SWAP9 PUSH0 JUMPDEST DUP12 MLOAD DUP2 LT ISZERO PUSH2 0x289E JUMPI DUP13 PUSH2 0x2757 DUP3 DUP9 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x2761 DUP2 PUSH2 0x578D JUMP JUMPDEST PUSH2 0x276B DUP4 DUP11 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x288C JUMPI DUP2 PUSH2 0x2791 DUP5 PUSH1 0xA0 PUSH2 0x2788 DUP3 PUSH1 0xC0 PUSH2 0x2798 SWAP9 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP4 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP2 PUSH2 0x579E JUMP JUMPDEST DUP1 PUSH2 0x27A3 DUP4 DUP11 PUSH2 0x2155 JUMP JUMPDEST MSTORE JUMPDEST PUSH2 0x27B3 PUSH2 0x1170 DUP4 DUP12 MLOAD PUSH2 0x2155 JUMP JUMPDEST PUSH1 0x60 DUP12 ADD PUSH2 0x27C2 DUP5 DUP3 MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD DUP4 LT PUSH2 0x2840 JUMPI POP DUP15 DUP4 PUSH2 0x1E70 DUP16 DUP16 DUP16 SWAP7 PUSH2 0x2834 SWAP2 PUSH2 0x281C DUP7 PUSH2 0x2814 DUP2 DUP12 PUSH1 0x1 SWAP15 SWAP14 PUSH2 0x27F1 DUP9 PUSH2 0x283A SWAP16 PUSH2 0x16BB JUMP JUMPDEST PUSH2 0x280D PUSH2 0x27FE DUP5 DUP10 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 DUP14 PUSH2 0x57CD JUMP JUMPDEST DUP8 MSTORE SWAP3 PUSH2 0x2155 JUMP JUMPDEST MSTORE PUSH2 0x282B DUP6 PUSH1 0x60 DUP9 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP3 MLOAD SWAP1 PUSH2 0x25E2 JUMP JUMPDEST SWAP1 PUSH2 0xBA7 JUMP JUMPDEST ADD PUSH2 0x2743 JUMP JUMPDEST SWAP2 PUSH2 0x284F DUP5 PUSH2 0x11BD SWAP5 MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST POP POP PUSH2 0x2898 DUP2 DUP9 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x27A5 JUMP JUMPDEST POP SWAP4 SWAP10 POP SWAP6 SWAP5 POP SWAP6 SWAP3 SWAP9 PUSH2 0x28C4 SWAP2 SWAP8 POP PUSH2 0x28BF DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x58F1 JUMP JUMPDEST PUSH32 0xFBE5B0D79FB94F1E81C0A92BF86AE9D3A19E9D1BF6202C0D3E75120F65D5D8A5 PUSH2 0x28F6 DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 PUSH2 0x2918 DUP7 PUSH1 0x20 DUP8 ADD SWAP6 PUSH2 0x2911 DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST CALLER SWAP2 PUSH2 0x16F9 JUMP JUMPDEST PUSH2 0x2920 PUSH2 0x5954 JUMP JUMPDEST PUSH2 0x29B8 JUMPI JUMPDEST PUSH2 0x294B DUP7 PUSH2 0x293A DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x59D4 JUMP JUMPDEST PUSH2 0x297F PUSH2 0x268F PUSH2 0x2973 PUSH2 0x2965 DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 MLOAD SWAP7 PUSH2 0x1170 DUP9 PUSH2 0x220A JUMP JUMPDEST SWAP3 PUSH2 0x29A7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH2 0x2995 DUP9 PUSH2 0x220A JUMP JUMPDEST DUP13 DUP5 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP6 AND SWAP9 AND SWAP7 DUP5 PUSH2 0x25EF JUMP JUMPDEST SUB SWAP1 LOG4 PUSH2 0x29B2 PUSH2 0x1645 JUMP JUMPDEST SWAP4 SWAP3 SWAP2 SWAP1 JUMP JUMPDEST PUSH2 0x29DE DUP7 PUSH2 0x29CD DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x5969 JUMP JUMPDEST PUSH2 0x2925 JUMP JUMPDEST PUSH32 0x31D38E0B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP9 SWAP5 SWAP2 PUSH2 0x2A27 DUP12 SWAP8 SWAP5 SWAP10 SWAP6 SWAP3 SWAP12 MLOAD PUSH2 0x5350 JUMP JUMPDEST SWAP11 PUSH0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x2A81 JUMPI DUP1 DUP12 PUSH2 0x2A7A DUP16 SWAP4 PUSH2 0x2A74 PUSH2 0x2A63 DUP16 DUP4 SWAP1 PUSH2 0x2A59 PUSH1 0x1 SWAP10 PUSH2 0x2A53 DUP5 DUP11 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x576B JUMP JUMPDEST PUSH2 0x1DD0 DUP4 DUP4 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x2A6E DUP4 DUP7 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0xBA7 JUMP JUMPDEST SWAP3 PUSH2 0x2155 JUMP JUMPDEST MSTORE ADD PUSH2 0x2A2A JUMP JUMPDEST POP SWAP2 SWAP5 SWAP9 SWAP4 SWAP7 SWAP11 POP SWAP2 SWAP5 SWAP9 PUSH2 0x2723 JUMP JUMPDEST SWAP5 SWAP1 PUSH1 0x1 DUP9 MLOAD PUSH2 0x2AA0 DUP2 PUSH2 0x220A JUMP JUMPDEST PUSH2 0x2AA9 DUP2 PUSH2 0x220A JUMP JUMPDEST SUB PUSH2 0x2B2D JUMPI PUSH2 0x2AB8 DUP10 MLOAD PUSH2 0x528D JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP2 DUP7 SWAP3 DUP11 PUSH2 0x2B27 PUSH2 0x2B1D DUP12 DUP11 PUSH1 0x40 PUSH2 0x2AD8 PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x52C1 JUMP JUMPDEST SWAP3 ADD SWAP5 DUP3 DUP7 MSTORE DUP7 PUSH1 0x80 DUP3 ADD MLOAD SWAP4 PUSH2 0x2B17 PUSH2 0xDA4 PUSH2 0x2B09 PUSH2 0x2B02 PUSH2 0x268F DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP6 MLOAD PUSH2 0x5350 JUMP JUMPDEST SWAP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH2 0x55EA JUMP JUMPDEST SWAP1 SWAP3 MLOAD SWAP1 SWAP11 PUSH2 0x2155 JUMP JUMPDEST MSTORE PUSH2 0x2723 JUMP JUMPDEST PUSH1 0x2 DUP9 SWAP7 SWAP3 SWAP7 MLOAD PUSH2 0x2B3D DUP2 PUSH2 0x220A JUMP JUMPDEST PUSH2 0x2B46 DUP2 PUSH2 0x220A JUMP JUMPDEST SUB PUSH2 0x2BD9 JUMPI PUSH2 0x2B55 DUP10 MLOAD PUSH2 0x528D JUMP JUMPDEST PUSH2 0x2BD2 DUP3 PUSH1 0x60 DUP8 ADD SWAP1 PUSH2 0x2B79 PUSH2 0x2B6B DUP4 MLOAD PUSH2 0x52C1 JUMP JUMPDEST PUSH1 0x40 DUP13 ADD SWAP4 DUP2 DUP6 MSTORE MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x2B85 DUP4 MLOAD DUP9 PUSH2 0x2155 JUMP JUMPDEST MSTORE DUP12 PUSH2 0x2B98 PUSH1 0x80 DUP3 ADD MLOAD SWAP4 MLOAD DUP1 SWAP4 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x2BB7 PUSH2 0x2BB0 PUSH2 0x268F DUP13 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 MLOAD PUSH2 0x5350 JUMP JUMPDEST SWAP3 PUSH2 0x2BCC PUSH2 0xDA4 DUP13 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH2 0x53A7 JUMP JUMPDEST SWAP7 SWAP1 PUSH2 0x2723 JUMP JUMPDEST POP SWAP4 PUSH1 0x3 DUP8 MLOAD PUSH2 0x2BE8 DUP2 PUSH2 0x220A JUMP JUMPDEST PUSH2 0x2BF1 DUP2 PUSH2 0x220A JUMP JUMPDEST SUB PUSH2 0x2CB2 JUMPI PUSH2 0x2C00 DUP9 MLOAD PUSH2 0x5258 JUMP JUMPDEST PUSH0 PUSH2 0x2C18 PUSH2 0xDA4 PUSH2 0xDA4 DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP6 PUSH1 0x40 DUP7 ADD MLOAD SWAP7 PUSH1 0x80 DUP12 ADD MLOAD SWAP2 DUP4 PUSH1 0xA0 DUP10 ADD MLOAD SWAP10 PUSH2 0x2C66 PUSH1 0x40 MLOAD SWAP12 DUP13 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xAB68E28C00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE CALLER PUSH1 0x4 DUP8 ADD PUSH2 0x2588 JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP5 DUP6 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP2 PUSH0 SWAP7 PUSH0 SWAP3 PUSH0 SWAP2 PUSH2 0x2C87 JUMPI JUMPDEST POP SWAP2 SWAP7 SWAP3 PUSH2 0x2723 JUMP JUMPDEST SWAP3 POP POP SWAP6 POP PUSH2 0x2CA8 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2CA0 DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2528 JUMP JUMPDEST SWAP2 SWAP7 SWAP1 SWAP2 PUSH0 PUSH2 0x2C7E JUMP JUMPDEST PUSH32 0x137A9A3900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SLT PUSH2 0xED JUMPI PUSH2 0x2CF0 DUP2 PUSH2 0x2214 JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP3 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xED JUMPI PUSH2 0x462 SWAP3 ADD PUSH2 0x2481 JUMP JUMPDEST SWAP7 SWAP4 SWAP5 PUSH2 0x462 SWAP9 SWAP7 SWAP3 PUSH2 0x2D78 SWAP7 PUSH2 0x2D49 PUSH2 0x2D6A SWAP7 PUSH2 0x2D5C SWAP6 PUSH2 0x100 SWAP5 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 MSTORE AND PUSH1 0x20 DUP14 ADD MSTORE PUSH1 0x40 DUP13 ADD SWAP1 PUSH2 0x2235 JUMP JUMPDEST PUSH1 0x60 DUP11 ADD MSTORE DUP1 PUSH1 0x80 DUP11 ADD MSTORE DUP9 ADD SWAP1 PUSH2 0x465 JUMP JUMPDEST SWAP1 DUP7 DUP3 SUB PUSH1 0xA0 DUP9 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST SWAP1 DUP5 DUP3 SUB PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST SWAP2 PUSH1 0xE0 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x498 JUMP JUMPDEST SWAP5 SWAP4 SWAP6 SWAP3 SWAP7 SWAP2 SWAP1 DUP5 MLOAD PUSH2 0x2D9F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x80 DUP7 ADD MLOAD SWAP3 PUSH2 0x2DAF DUP5 PUSH2 0x220A JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD DUP11 PUSH1 0xA0 DUP10 ADD MLOAD SWAP3 PUSH1 0x40 MLOAD SWAP12 DUP13 SWAP8 DUP9 SWAP8 PUSH32 0x2754888D00000000000000000000000000000000000000000000000000000000 DUP10 MSTORE PUSH1 0x4 DUP10 ADD SWAP8 PUSH2 0x2DF4 SWAP9 PUSH2 0x2D0F JUMP JUMPDEST SUB SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 DUP2 GAS PUSH0 SWAP5 DUP6 SWAP2 CALL SWAP4 DUP5 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP1 PUSH0 SWAP6 PUSH2 0x2F19 JUMPI JUMPDEST POP ISZERO DUP1 ISZERO PUSH2 0x2F0D JUMPI JUMPDEST PUSH2 0x2EE5 JUMPI PUSH1 0x1 DUP1 SWAP4 PUSH1 0x9 SHR AND ISZERO PUSH2 0x2E3E JUMPI SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH0 DUP4 JUMPDEST PUSH2 0x2E45 JUMPI JUMPDEST POP POP POP POP SWAP1 JUMP JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x2EE0 JUMPI PUSH2 0x2E58 DUP2 DUP7 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH1 0x60 DUP5 ADD SWAP1 PUSH2 0x2E69 DUP4 DUP4 MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD GT PUSH2 0x2E78 JUMPI POP DUP4 ADD DUP4 PUSH2 0x2E39 JUMP JUMPDEST PUSH2 0x2EA3 DUP3 PUSH2 0x2E9B DUP2 PUSH2 0x2E95 PUSH2 0x1170 DUP12 SWAP8 PUSH1 0x20 PUSH2 0x11BD SWAP11 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST SWAP6 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP3 MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH32 0xFBD8A72400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST PUSH2 0x2E3E JUMP JUMPDEST PUSH32 0x1D3391D800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP DUP4 MLOAD DUP6 MLOAD EQ ISZERO PUSH2 0x2E20 JUMP JUMPDEST SWAP1 POP PUSH2 0x2F38 SWAP2 SWAP5 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2F30 DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2CDA JUMP JUMPDEST SWAP4 SWAP1 PUSH0 PUSH2 0x2E17 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 SWAP2 PUSH1 0x80 DUP5 ADD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT DUP6 DUP4 LT OR PUSH2 0x2C2 JUMPI PUSH2 0x2FC7 SWAP2 PUSH1 0x40 MSTORE PUSH0 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP5 PUSH0 DUP7 MSTORE PUSH2 0x2FBF PUSH1 0x40 DUP3 ADD SWAP2 PUSH0 DUP4 MSTORE DUP4 PUSH1 0x60 DUP3 ADD SWAP7 PUSH0 DUP9 MSTORE DUP3 SWAP10 PUSH2 0x2FB8 PUSH1 0x20 DUP5 ADD DUP1 MLOAD SWAP1 PUSH2 0x2FA8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 PUSH1 0x40 DUP9 ADD MLOAD AND SWAP1 PUSH2 0x4CE8 JUMP JUMPDEST DUP8 MSTORE MLOAD SWAP1 PUSH1 0x60 DUP6 ADD MLOAD AND SWAP1 PUSH2 0x4CE8 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x31C7 JUMP JUMPDEST SWAP1 MSTORE MLOAD PUSH2 0x5350 JUMP JUMPDEST SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x2FD4 DUP3 PUSH2 0xFBE JUMP JUMPDEST MSTORE JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x60 PUSH1 0xC0 PUSH1 0x40 MLOAD PUSH2 0x2FEA DUP2 PUSH2 0x2C7 JUMP JUMPDEST PUSH0 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE PUSH0 DUP4 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE PUSH0 PUSH1 0xA0 DUP3 ADD MSTORE ADD MSTORE DUP1 MLOAD SWAP3 PUSH2 0x3018 DUP5 PUSH2 0xFBE JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 DUP3 ADD MLOAD SWAP4 ADD MLOAD PUSH1 0xC0 PUSH1 0x20 DUP4 MLOAD SWAP4 ADD MLOAD SWAP4 ADD MLOAD SWAP4 PUSH2 0x3041 PUSH2 0x303A PUSH2 0x342 JUMP JUMPDEST SWAP7 DUP8 PUSH2 0x2FCB JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE CALLER PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x2FD4 DUP3 PUSH2 0xFBE JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0xE0 DUP2 ADD SWAP1 DUP4 MLOAD PUSH2 0x307F DUP2 PUSH2 0xFBE JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP6 ADD MLOAD SWAP3 PUSH1 0xE0 PUSH1 0x40 DUP5 ADD MSTORE DUP4 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH2 0x100 DUP5 ADD SWAP5 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x30FA JUMPI POP POP POP POP PUSH1 0xC0 DUP5 PUSH1 0x60 PUSH2 0x462 SWAP6 SWAP7 ADD MLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x30EA PUSH1 0xA0 DUP3 ADD MLOAD PUSH1 0xA0 DUP6 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST ADD MLOAD SWAP1 PUSH1 0xC0 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x498 JUMP JUMPDEST DUP4 MLOAD DUP7 MSTORE SWAP5 DUP2 ADD SWAP5 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x30AA JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP3 PUSH2 0x315E PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 PUSH1 0x40 MLOAD SWAP8 DUP9 SWAP7 DUP8 SWAP6 DUP7 SWAP4 PUSH32 0x5211FA7700000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x40 PUSH1 0x4 DUP7 ADD MSTORE PUSH1 0x44 DUP6 ADD SWAP1 PUSH2 0x306D JUMP JUMPDEST SWAP2 AND PUSH1 0x24 DUP4 ADD MSTORE SUB SWAP4 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP2 PUSH2 0x31A8 JUMPI JUMPDEST POP ISZERO PUSH2 0x3180 JUMPI JUMP JUMPDEST PUSH32 0xE91E17E700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x31C1 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x2388 JUMPI PUSH2 0x237A DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH0 PUSH2 0x3178 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 DUP1 MLOAD PUSH2 0x31D5 DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x31DE DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x3223 JUMPI SWAP1 PUSH2 0x321A PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH2 0x21ED PUSH1 0x80 PUSH2 0x321F SWAP6 ADD MLOAD SWAP4 PUSH1 0xA0 PUSH2 0x320E PUSH1 0xC0 DUP6 ADD MLOAD DUP4 MLOAD SWAP1 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP4 ADD MLOAD SWAP1 MLOAD SWAP1 PUSH2 0x2155 JUMP JUMPDEST PUSH2 0x50E5 JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST PUSH2 0x462 SWAP3 PUSH2 0x325F PUSH2 0x3259 PUSH1 0x80 PUSH2 0x21F4 SWAP5 ADD MLOAD SWAP5 PUSH1 0xA0 PUSH2 0x324D PUSH1 0x20 PUSH1 0xC0 DUP8 ADD MLOAD SWAP4 ADD SWAP3 DUP4 MLOAD SWAP1 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP5 ADD MLOAD SWAP1 MLOAD SWAP1 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x5B3F JUMP JUMPDEST SWAP3 PUSH2 0x50E5 JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0xED JUMPI PUSH1 0x20 PUSH2 0x327C DUP4 PUSH2 0x2214 JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 JUMP JUMPDEST SWAP1 SWAP3 PUSH2 0x32D3 PUSH1 0x40 SWAP4 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 SWAP2 DUP7 MLOAD SWAP8 DUP9 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xA0E8F5AC00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE PUSH1 0x60 PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x64 DUP7 ADD SWAP1 PUSH2 0x306D JUMP JUMPDEST SWAP3 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE SUB SWAP3 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0x335C JUMPI JUMPDEST POP ISZERO PUSH2 0x3334 JUMPI PUSH8 0xDE0B5CAD2BEF000 DUP2 GT PUSH2 0x330C JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x746E594000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x53F976D400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH2 0x3380 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x3387 JUMPI JUMPDEST PUSH2 0x3378 DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3265 JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x32F4 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x336E JUMP JUMPDEST PUSH0 SWAP5 SWAP2 SWAP4 SWAP3 SWAP4 PUSH2 0x339C PUSH2 0x15F0 JUMP JUMPDEST PUSH2 0x33A4 PUSH2 0x2463 JUMP JUMPDEST SWAP2 DUP1 MLOAD PUSH2 0x33B0 DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x33B9 DUP2 PUSH2 0xFBE JUMP JUMPDEST ISZERO PUSH2 0x3745 JUMPI JUMPDEST PUSH1 0x20 SWAP2 DUP3 DUP7 ADD PUSH2 0x33CF DUP2 MLOAD PUSH2 0x5B63 JUMP JUMPDEST DUP4 PUSH2 0x3424 DUP2 DUP6 ADD SWAP9 PUSH2 0x33EE PUSH2 0xDA4 PUSH2 0xDA4 DUP13 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP13 DUP14 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x72C9818600000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x376D JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP9 DUP10 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP10 PUSH2 0x3726 JUMPI JUMPDEST POP DUP9 PUSH2 0x3441 DUP2 PUSH2 0x5B63 JUMP JUMPDEST DUP4 MLOAD PUSH2 0x344C DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x3455 DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x36AE JUMPI POP PUSH1 0x40 DUP3 ADD MLOAD SWAP1 MSTORE PUSH2 0x3494 PUSH1 0xC0 DUP9 ADD MLOAD PUSH2 0x348D PUSH2 0x3259 PUSH2 0x347E DUP8 DUP7 ADD SWAP4 DUP5 MLOAD SWAP1 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP3 PUSH1 0xA0 DUP13 ADD MLOAD SWAP1 MLOAD SWAP1 PUSH2 0x2155 JUMP JUMPDEST SWAP1 DUP11 PUSH2 0x579E JUMP JUMPDEST SWAP4 PUSH1 0x80 DUP4 ADD MLOAD SWAP7 DUP6 SWAP8 SWAP9 PUSH1 0xA0 DUP6 ADD MLOAD DUP1 DUP9 LT PUSH2 0x367E JUMPI POP JUMPDEST PUSH1 0x40 DUP6 ADD SWAP5 DUP11 DUP7 MLOAD PUSH2 0x34C4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x34CE SWAP2 PUSH2 0x4CD6 JUMP JUMPDEST PUSH1 0x60 ADD SWAP6 DUP10 DUP8 MLOAD PUSH2 0x34E5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x34EF SWAP2 PUSH2 0x16BB JUMP JUMPDEST DUP4 MLOAD DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MLOAD SWAP2 PUSH2 0x3514 SWAP4 DUP7 PUSH2 0x57CD JUMP JUMPDEST SWAP2 SWAP1 DUP2 DUP7 ADD SWAP6 PUSH1 0x40 ADD SWAP3 DUP4 MSTORE DUP6 MSTORE DUP6 MLOAD PUSH1 0x60 DUP5 ADD SWAP3 DUP14 DUP3 DUP6 MLOAD SWAP1 PUSH2 0x3537 SWAP2 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x3542 SWAP2 PUSH2 0x25E2 JUMP JUMPDEST SWAP1 MLOAD PUSH2 0x354D SWAP2 PUSH2 0xBA7 JUMP JUMPDEST PUSH2 0x3557 SWAP2 DUP6 PUSH2 0x51C8 JUMP JUMPDEST DUP6 ADD SWAP2 DUP3 MLOAD DUP12 DUP2 DUP5 MLOAD SWAP1 PUSH2 0x356A SWAP2 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x3575 SWAP2 PUSH2 0xBA7 JUMP JUMPDEST PUSH2 0x357F SWAP2 DUP4 PUSH2 0x51C8 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 DUP1 MLOAD DUP8 MLOAD PUSH2 0x35A5 SWAP2 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP2 PUSH1 0x80 ADD SWAP2 DUP3 MLOAD DUP9 MLOAD PUSH2 0x35B8 SWAP2 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x35C2 SWAP2 PUSH2 0x5C40 JUMP JUMPDEST DUP8 MLOAD PUSH2 0x35D6 SWAP1 DUP6 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE MLOAD DUP4 MLOAD PUSH2 0x35E3 SWAP2 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP1 MLOAD DUP4 MLOAD PUSH2 0x35F1 SWAP2 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x35FB SWAP2 PUSH2 0x5C40 JUMP JUMPDEST SWAP2 MLOAD PUSH2 0x360E SWAP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE MLOAD SWAP3 MLOAD SWAP4 MLOAD PUSH1 0x60 SWAP3 DUP4 ADD MLOAD SWAP2 MLOAD PUSH1 0x40 DUP1 MLOAD DUP12 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP12 SWAP1 MSTORE SWAP1 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP4 DUP3 AND SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH32 0x874B2D545CB271CDBDA4E093020C452328B24AF12382ED62C4D00F5C26709DB SWAP1 PUSH1 0x80 SWAP1 LOG4 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xFC PUSH2 0x1645 JUMP JUMPDEST PUSH32 0xE2EA151B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 DUP9 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 POP DUP2 SWAP9 POP PUSH2 0x36D5 PUSH1 0x60 PUSH2 0x36DE SWAP4 ADD MLOAD PUSH8 0xDE0B6B3A7640000 DUP2 DUP2 SUB SWAP1 DUP3 LT MUL SWAP1 DUP4 PUSH2 0x5C0C JUMP JUMPDEST SWAP1 DUP2 DUP7 MSTORE PUSH2 0x25E2 JUMP JUMPDEST SWAP7 PUSH2 0x370B PUSH2 0x36F2 PUSH1 0xC0 DUP10 ADD MLOAD DUP4 MLOAD SWAP1 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x3703 PUSH1 0xA0 DUP11 ADD MLOAD DUP5 MLOAD SWAP1 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP1 DUP11 PUSH2 0x5C2C JUMP JUMPDEST SWAP4 PUSH1 0x80 DUP4 ADD MLOAD SWAP7 DUP6 SWAP9 PUSH1 0xA0 DUP6 ADD MLOAD DUP1 DUP9 GT PUSH2 0x367E JUMPI POP PUSH2 0x34AC JUMP JUMPDEST PUSH2 0x373E SWAP2 SWAP10 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP8 PUSH0 PUSH2 0x3436 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD PUSH2 0x3766 PUSH2 0x375C DUP3 MLOAD PUSH1 0x60 DUP7 ADD MLOAD SWAP1 PUSH2 0x576B JUMP JUMPDEST DUP1 DUP7 MSTORE DUP3 MLOAD PUSH2 0xBA7 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x33BF JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0x462 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x306D JUMP JUMPDEST PUSH2 0x1A0 PUSH2 0x462 SWAP3 PUSH1 0x20 DUP4 MSTORE PUSH2 0x3797 PUSH1 0x20 DUP5 ADD DUP3 MLOAD PUSH2 0x3063 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH2 0x100 SWAP1 DUP2 DUP6 ADD MSTORE DUP2 ADD MLOAD PUSH2 0x120 SWAP1 DUP2 DUP6 ADD MSTORE DUP2 ADD MLOAD PUSH2 0x3818 PUSH2 0x140 SWAP2 DUP3 DUP7 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST DUP2 ADD MLOAD SWAP1 PUSH2 0x3834 PUSH2 0x160 SWAP3 DUP4 DUP7 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST ADD MLOAD SWAP2 PUSH2 0x180 DUP1 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x498 JUMP JUMPDEST SWAP4 SWAP6 SWAP1 SWAP2 SWAP5 SWAP3 DUP7 MLOAD PUSH2 0x3856 DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x385F DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x3AAE JUMPI DUP7 PUSH1 0x40 DUP6 ADD MLOAD SWAP2 DUP5 JUMPDEST DUP3 MLOAD SWAP5 PUSH2 0x3878 DUP7 PUSH2 0xFBE JUMP JUMPDEST PUSH1 0x40 SWAP8 DUP9 SWAP8 DUP9 DUP7 ADD MLOAD PUSH2 0x3891 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP7 PUSH1 0x60 DUP8 ADD MLOAD PUSH2 0x38A7 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP4 PUSH1 0x80 ADD SWAP3 DUP4 MLOAD DUP2 MLOAD PUSH2 0x38B9 SWAP2 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP4 MLOAD SWAP1 PUSH1 0x20 ADD MLOAD PUSH2 0x38CA SWAP2 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x20 DUP9 ADD MLOAD PUSH2 0x38E1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP8 PUSH1 0xC0 ADD MLOAD SWAP9 PUSH2 0x38EF PUSH2 0x34F JUMP JUMPDEST SWAP11 PUSH2 0x38FA SWAP1 DUP13 PUSH2 0x2FCB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x20 DUP12 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 DUP12 ADD MSTORE PUSH1 0x60 DUP10 ADD MSTORE PUSH1 0x80 DUP9 ADD MSTORE PUSH1 0xA0 DUP8 ADD MSTORE PUSH1 0xC0 DUP7 ADD MSTORE PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 DUP5 ADD DUP9 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x120 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x140 DUP4 ADD MSTORE PUSH2 0x160 DUP3 ADD MSTORE DUP2 MLOAD SWAP7 DUP8 DUP1 DUP1 SWAP4 PUSH32 0x18B6EB5500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD SWAP1 PUSH2 0x3992 SWAP2 PUSH2 0x377E JUMP JUMPDEST SUB SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS SWAP1 PUSH0 SWAP2 CALL SWAP5 DUP6 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP2 PUSH0 SWAP7 PUSH2 0x3A8A JUMPI JUMPDEST POP POP ISZERO PUSH2 0x3A62 JUMPI PUSH1 0x9 SHR PUSH1 0x1 AND ISZERO PUSH2 0x3A5C JUMPI POP DUP1 MLOAD PUSH2 0x39D0 DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x39D9 DUP2 PUSH2 0xFBE JUMP JUMPDEST ISZERO DUP1 PUSH2 0x3A4F JUMPI JUMPDEST DUP1 ISZERO PUSH2 0x3A24 JUMPI JUMPDEST PUSH2 0x39EF JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0xA0 ADD MLOAD PUSH32 0xCC0E4A9900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP PUSH1 0x1 DUP2 MLOAD PUSH2 0x3A32 DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x3A3B DUP2 PUSH2 0xFBE JUMP JUMPDEST EQ DUP1 ISZERO PUSH2 0x39E7 JUMPI POP PUSH1 0xA0 DUP2 ADD MLOAD DUP3 GT PUSH2 0x39E7 JUMP JUMPDEST POP PUSH1 0xA0 DUP2 ADD MLOAD DUP3 LT PUSH2 0x39E0 JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH32 0x15A29DEC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x3AA5 SWAP4 SWAP7 POP DUP1 SWAP2 SWAP3 POP SWAP1 RETURNDATASIZE LT PUSH2 0x3387 JUMPI PUSH2 0x3378 DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP4 SWAP1 PUSH0 DUP1 PUSH2 0x39B2 JUMP JUMPDEST DUP7 PUSH1 0x40 DUP6 ADD MLOAD SWAP2 DUP5 SWAP3 SWAP5 PUSH2 0x386C JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP3 AND DUP1 SWAP3 SUB PUSH2 0x3AE5 JUMPI POP POP JUMP JUMPDEST PUSH32 0x36B18D0900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 PUSH32 0x0 GT PUSH2 0x3B3D JUMPI POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x18FE738500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 DUP2 SUB SWAP3 SWAP2 PUSH0 SGT DUP1 ISZERO DUP3 DUP6 SGT AND SWAP2 DUP5 SLT AND OR PUSH2 0x98E JUMPI JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH0 DUP4 DUP3 ADD SWAP4 DUP5 SLT SWAP2 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x98E JUMPI JUMP JUMPDEST SWAP4 SWAP1 SWAP2 PUSH2 0x3BB1 DUP6 PUSH2 0xFBE JUMP JUMPDEST DUP5 ISZERO DUP1 ISZERO PUSH2 0x3F73 JUMPI PUSH2 0x3BFF PUSH1 0x20 PUSH2 0x3BC7 DUP8 PUSH2 0xB99 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xEF8B30F700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x223 JUMPI PUSH2 0x3C24 SWAP2 PUSH0 SWAP2 PUSH2 0x3F54 JUMPI JUMPDEST POP PUSH2 0xB99 JUMP JUMPDEST SWAP5 SWAP6 JUMPDEST PUSH2 0x3C42 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP2 PUSH2 0x3C4C PUSH2 0x5954 JUMP JUMPDEST PUSH2 0x3F4C JUMPI DUP7 SWAP3 DUP9 SWAP3 SWAP1 SWAP2 PUSH1 0x80 DUP4 SWAP1 SHR SWAP2 DUP6 DUP4 LT PUSH2 0x3CCA JUMPI POP POP POP SWAP3 PUSH2 0x3CC4 DUP3 PUSH2 0x3CA1 DUP7 PUSH2 0x3C9C PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 PUSH2 0xFC SWAP12 PUSH1 0x80 SHR SUB SWAP4 AND PUSH2 0x25E2 JUMP JUMPDEST PUSH2 0x5C40 JUMP JUMPDEST SWAP8 DUP9 PUSH2 0x3CBE DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0x4CD6 JUMP JUMPDEST AND PUSH2 0x16BB JUMP JUMPDEST SWAP1 SWAP3 SWAP4 POP PUSH2 0x3CD9 SWAP2 SWAP5 POP PUSH2 0xFBE JUMP JUMPDEST ISZERO PUSH2 0x3DF4 JUMPI PUSH2 0x3D01 PUSH2 0x3CFC PUSH2 0x3CEE DUP6 DUP5 PUSH2 0x5F06 JUMP JUMPDEST PUSH2 0x3CF7 DUP11 PUSH2 0x4D4E JUMP JUMPDEST PUSH2 0x3B8A JUMP JUMPDEST PUSH2 0x5D67 JUMP JUMPDEST SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP4 PUSH2 0x3D18 DUP2 DUP7 DUP10 PUSH2 0x5EB7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x6E553F6500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP5 PUSH1 0x20 SWAP1 DUP7 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 PUSH0 SWAP1 GAS CALL DUP1 ISZERO PUSH2 0x223 JUMPI PUSH2 0x3CA1 DUP10 SWAP6 PUSH2 0x3DCF DUP8 PUSH2 0x3DC4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 SWAP7 DUP9 DUP16 DUP10 PUSH2 0xFC SWAP16 DUP6 SWAP15 PUSH2 0x3DBE DUP16 PUSH2 0x3CC4 SWAP16 PUSH2 0x3DC4 SWAP7 PUSH2 0x3DC9 SWAP10 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 PUSH0 SWAP2 PUSH2 0x3DD5 JUMPI JUMPDEST POP SWAP11 DUP12 SWAP4 JUMPDEST AND SWAP1 PUSH2 0x3DB9 DUP3 DUP3 PUSH2 0x5D9C JUMP JUMPDEST PUSH2 0x5F9B JUMP JUMPDEST AND PUSH2 0x25E2 JUMP JUMPDEST PUSH2 0xBA7 JUMP JUMPDEST SWAP5 PUSH2 0x25E2 JUMP JUMPDEST SWAP1 PUSH2 0x5C40 JUMP JUMPDEST PUSH2 0x3DEE SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH0 PUSH2 0x3DA8 JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x3E14 PUSH2 0x3CFC PUSH2 0x3E06 DUP4 DUP6 PUSH2 0x5CA4 JUMP JUMPDEST PUSH2 0x3E0F DUP10 PUSH2 0x4D4E JUMP JUMPDEST PUSH2 0x3B72 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB3D7F6B900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP4 PUSH1 0x20 SWAP4 SWAP3 SWAP1 SWAP2 DUP5 DUP2 PUSH1 0x24 DUP2 DUP10 GAS STATICCALL DUP1 ISZERO PUSH2 0x223 JUMPI PUSH2 0x3E73 SWAP2 PUSH0 SWAP2 PUSH2 0x3F2F JUMPI JUMPDEST POP DUP7 DUP11 PUSH2 0x5EB7 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x94BF804D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP5 DUP5 SWAP1 DUP7 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 PUSH0 SWAP1 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x223 JUMPI PUSH2 0xFC SWAP7 PUSH2 0x3DCF DUP12 PUSH2 0x3DC4 DUP6 DUP16 SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 DUP10 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 SWAP16 SWAP11 DUP5 SWAP16 DUP16 SWAP7 PUSH2 0x3CC4 SWAP16 SWAP8 PUSH2 0x3DC4 SWAP7 PUSH2 0x3CA1 SWAP16 SWAP10 PUSH2 0x3DC9 SWAP11 PUSH2 0x3DBE SWAP6 PUSH0 SWAP3 PUSH2 0x3F12 JUMPI JUMPDEST POP POP SWAP9 DUP10 SWAP3 PUSH2 0x3DAD JUMP JUMPDEST PUSH2 0x3F28 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x3F08 JUMP JUMPDEST PUSH2 0x3F46 SWAP2 POP DUP7 RETURNDATASIZE DUP9 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH0 PUSH2 0x3E6B JUMP JUMPDEST POP SWAP1 SWAP4 POP POP POP JUMP JUMPDEST PUSH2 0x3F6D SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH0 PUSH2 0x3C1E JUMP JUMPDEST PUSH2 0x3FB9 PUSH1 0x20 PUSH2 0x3F81 DUP8 PUSH2 0x25D4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xB3D7F6B900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x223 JUMPI PUSH2 0x3FDE SWAP2 PUSH0 SWAP2 PUSH2 0x3FE4 JUMPI JUMPDEST POP PUSH2 0x25D4 JUMP JUMPDEST SWAP6 PUSH2 0x3C27 JUMP JUMPDEST PUSH2 0x3FFD SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH0 PUSH2 0x3FD8 JUMP JUMPDEST SWAP4 SWAP1 PUSH2 0x400E DUP6 PUSH2 0xFBE JUMP JUMPDEST DUP5 ISZERO SWAP5 DUP6 ISZERO PUSH2 0x42FD JUMPI PUSH2 0x405D PUSH1 0x20 PUSH2 0x4025 DUP8 PUSH2 0xB99 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x4CDAD50600000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x223 JUMPI PUSH2 0x4081 SWAP2 PUSH0 SWAP2 PUSH2 0x3F54 JUMPI POP PUSH2 0xB99 JUMP JUMPDEST SWAP5 SWAP6 JUMPDEST PUSH2 0x409F DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP2 PUSH2 0x40A9 PUSH2 0x5954 JUMP JUMPDEST PUSH2 0x3F4C JUMPI DUP8 SWAP4 DUP8 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP5 AND SWAP2 DUP7 DUP4 LT PUSH2 0x4129 JUMPI POP POP POP SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x40FF DUP4 DUP7 PUSH2 0xFC SWAP9 PUSH2 0x40F7 DUP7 PUSH2 0x4124 SWAP9 PUSH1 0x80 SHR PUSH2 0x25E2 JUMP JUMPDEST SWAP3 AND SUB PUSH2 0x5C40 JUMP JUMPDEST SWAP8 DUP9 PUSH2 0x411C DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE JUMPDEST AND PUSH2 0x4CD6 JUMP JUMPDEST PUSH2 0x16BB JUMP JUMPDEST SWAP2 SWAP7 POP SWAP3 SWAP5 POP PUSH2 0x4139 SWAP2 POP PUSH2 0xFBE JUMP JUMPDEST ISZERO PUSH2 0x4237 JUMPI PUSH2 0x414E PUSH2 0x3CFC PUSH2 0x3CEE DUP8 DUP6 PUSH2 0x5CA4 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP4 SWAP1 PUSH1 0x20 DUP6 PUSH1 0x64 DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND GAS CALL DUP1 ISZERO PUSH2 0x223 JUMPI PUSH2 0x41F5 DUP10 SWAP6 PUSH2 0x3DCF DUP5 PUSH2 0x3DC4 DUP15 PUSH2 0x41EC DUP12 DUP16 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xFC SWAP16 SWAP13 PUSH2 0x41E7 DUP16 SWAP14 PUSH2 0x4124 SWAP16 SWAP5 DUP9 SWAP16 DUP6 SWAP16 PUSH2 0x3DC4 SWAP8 PUSH0 SWAP2 PUSH2 0x4218 JUMPI JUMPDEST POP SWAP6 DUP7 SWAP3 JUMPDEST AND SWAP1 PUSH2 0x5FE0 JUMP JUMPDEST PUSH2 0x25E2 JUMP JUMPDEST SWAP5 PUSH1 0x80 SHR PUSH2 0x25E2 JUMP JUMPDEST SWAP8 DUP9 PUSH2 0x4212 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0x411E JUMP JUMPDEST PUSH2 0x4231 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH0 PUSH2 0x41DB JUMP JUMPDEST PUSH2 0x4247 PUSH2 0x3CFC PUSH2 0x3E06 DUP8 DUP6 PUSH2 0x5F06 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB460AF9400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 PUSH1 0x20 DUP3 PUSH1 0x64 DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x223 JUMPI PUSH2 0x41F5 DUP10 SWAP6 PUSH2 0x3DCF PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x3DC4 DUP15 PUSH2 0x41EC DUP12 DUP16 DUP11 PUSH2 0xFC SWAP16 PUSH2 0x41E7 DUP16 SWAP4 PUSH2 0x4124 SWAP16 SWAP15 DUP9 SWAP16 SWAP6 DUP12 SWAP16 SWAP7 PUSH2 0x3DC4 SWAP8 PUSH0 SWAP2 PUSH2 0x42DE JUMPI JUMPDEST POP SWAP12 DUP13 SWAP4 PUSH2 0x41E0 JUMP JUMPDEST PUSH2 0x42F7 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH0 PUSH2 0x42D5 JUMP JUMPDEST PUSH2 0x4343 PUSH1 0x20 PUSH2 0x430B DUP8 PUSH2 0x25D4 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xA28A47700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x223 JUMPI PUSH2 0x4367 SWAP2 PUSH0 SWAP2 PUSH2 0x3FE4 JUMPI POP PUSH2 0x25D4 JUMP JUMPDEST SWAP6 PUSH2 0x4084 JUMP JUMPDEST DUP1 TLOAD SWAP1 PUSH1 0x1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x98E JUMPI TSTORE JUMP JUMPDEST SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 TSTORE JUMP JUMPDEST SWAP2 SWAP1 DUP3 MLOAD SWAP2 PUSH2 0x43AA DUP3 MLOAD DUP3 MLOAD SWAP1 DUP6 PUSH2 0x50A9 JUMP JUMPDEST PUSH2 0x43B3 DUP4 PUSH2 0x2124 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x43C5 JUMPI POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x43F7 PUSH2 0x43DE PUSH1 0x1 SWAP5 DUP7 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x321A PUSH2 0x43EC DUP6 DUP11 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x21ED DUP7 DUP11 PUSH2 0x2155 JUMP JUMPDEST DIV PUSH2 0x4402 DUP3 DUP10 PUSH2 0x2155 JUMP JUMPDEST MSTORE ADD PUSH2 0x43B6 JUMP JUMPDEST PUSH1 0x5 GT ISZERO PUSH2 0xFC8 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0xFC8 JUMPI MSTORE JUMP JUMPDEST SWAP6 SWAP2 SWAP4 PUSH2 0x4451 PUSH2 0x462 SWAP9 SWAP7 SWAP5 PUSH2 0x4462 SWAP4 PUSH2 0x2297 SWAP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP12 MSTORE AND PUSH1 0x20 DUP11 ADD MSTORE PUSH1 0x40 DUP10 ADD SWAP1 PUSH2 0x4413 JUMP JUMPDEST PUSH1 0xE0 PUSH1 0x60 DUP9 ADD MSTORE PUSH1 0xE0 DUP8 ADD SWAP1 PUSH2 0x465 JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP7 ADD MSTORE DUP5 DUP3 SUB PUSH1 0xA0 DUP7 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST SWAP3 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 SWAP6 SWAP7 SWAP4 SWAP7 PUSH2 0x44EF PUSH2 0x4499 DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH1 0x80 DUP9 ADD MLOAD SWAP8 PUSH2 0x44A9 DUP10 PUSH2 0x4409 JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x80 PUSH1 0x60 DUP4 ADD MLOAD SWAP4 ADD MLOAD SWAP2 ADD MLOAD SWAP2 PUSH1 0x40 MLOAD SWAP12 DUP13 SWAP11 DUP12 SWAP10 DUP11 SWAP8 PUSH32 0x45421EC700000000000000000000000000000000000000000000000000000000 DUP10 MSTORE PUSH1 0x4 DUP10 ADD PUSH2 0x4420 JUMP JUMPDEST SUB SWAP4 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP2 PUSH2 0x4532 JUMPI JUMPDEST POP ISZERO PUSH2 0x450A JUMPI JUMP JUMPDEST PUSH32 0xB2EB65200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x454B SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x2388 JUMPI PUSH2 0x237A DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH0 PUSH2 0x4502 JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP4 DUP4 SUB SLT PUSH2 0xED JUMPI DUP3 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP2 GT PUSH2 0xED JUMPI DUP4 PUSH2 0x457C SWAP2 DUP7 ADD PUSH2 0x2481 JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP2 ADD MLOAD SWAP4 PUSH1 0x40 DUP3 ADD MLOAD DUP5 DUP2 GT PUSH2 0xED JUMPI DUP2 PUSH2 0x2571 SWAP2 DUP5 ADD PUSH2 0x2481 JUMP JUMPDEST SWAP4 PUSH2 0x45C5 PUSH2 0x25C6 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x462 SWAP9 SWAP7 SWAP5 AND DUP8 MSTORE PUSH1 0xA0 PUSH1 0x20 DUP9 ADD MSTORE PUSH1 0xA0 DUP8 ADD SWAP1 PUSH2 0x465 JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP7 ADD MSTORE DUP5 DUP3 SUB PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x45E2 PUSH2 0x15F0 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x45EC PUSH2 0x2463 JUMP JUMPDEST SWAP2 PUSH1 0x20 DUP6 ADD PUSH2 0x45FF DUP2 MLOAD MLOAD DUP1 DUP7 MSTORE PUSH2 0x2124 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD SWAP6 DUP7 MLOAD PUSH2 0x460F DUP2 PUSH2 0x4409 JUMP JUMPDEST PUSH2 0x4618 DUP2 PUSH2 0x4409 JUMP JUMPDEST PUSH2 0x4889 JUMPI POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x462C DUP7 MLOAD PUSH2 0x2124 JUMP JUMPDEST SWAP5 PUSH2 0x4650 DUP3 PUSH1 0x80 DUP12 ADD MLOAD PUSH2 0x464A PUSH2 0x268F DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x640B JUMP JUMPDEST SWAP10 JUMPDEST PUSH1 0x60 DUP7 ADD MLOAD DUP1 DUP5 LT PUSH2 0x4859 JUMPI POP PUSH2 0x466B DUP4 SWAP10 SWAP9 SWAP10 PUSH2 0x578D JUMP JUMPDEST PUSH1 0x20 DUP10 ADD SWAP8 PUSH0 JUMPDEST DUP13 DUP12 MLOAD DUP3 LT ISZERO PUSH2 0x4798 JUMPI DUP2 PUSH2 0x4686 SWAP2 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x4690 DUP2 PUSH2 0x578D JUMP JUMPDEST PUSH2 0x469A DUP3 DUP9 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x4787 JUMPI PUSH2 0x46BF SWAP1 DUP14 PUSH2 0x46B8 DUP5 PUSH1 0xA0 PUSH2 0x2788 DUP3 PUSH1 0xC0 DUP7 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP2 PUSH2 0x5C2C JUMP JUMPDEST DUP1 PUSH2 0x46CA DUP4 DUP10 PUSH2 0x2155 JUMP JUMPDEST MSTORE JUMPDEST PUSH2 0x46DA PUSH2 0x1170 DUP4 DUP11 MLOAD PUSH2 0x2155 JUMP JUMPDEST PUSH1 0x40 DUP11 ADD PUSH2 0x46E9 DUP5 DUP3 MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD DUP4 GT PUSH2 0x473B JUMPI POP DUP14 DUP4 PUSH2 0x1E70 DUP15 PUSH2 0x472D DUP16 SWAP7 DUP16 SWAP8 PUSH2 0x4718 DUP7 PUSH2 0x2814 DUP2 DUP12 PUSH1 0x1 SWAP15 SWAP14 PUSH2 0x27F1 DUP9 PUSH2 0x4735 SWAP16 PUSH2 0x4CD6 JUMP JUMPDEST MSTORE PUSH2 0x4727 DUP6 PUSH1 0x60 DUP9 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x25E2 JUMP JUMPDEST SWAP1 MLOAD SWAP1 PUSH2 0xBA7 JUMP JUMPDEST ADD PUSH2 0x4672 JUMP JUMPDEST SWAP2 PUSH2 0x474A DUP5 PUSH2 0x11BD SWAP5 MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH32 0x8EDA85E400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST POP PUSH2 0x4792 DUP2 DUP8 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x46CC JUMP JUMPDEST POP POP SWAP4 SWAP7 SWAP5 POP SWAP7 POP SWAP7 POP SWAP7 PUSH2 0x47B8 SWAP1 PUSH2 0x28BF DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH32 0xA26A52D8D53702BBA7F137907B8E1F99FF87F6D450144270CA25E72481CCA871 PUSH2 0x47EA DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 PUSH2 0x480B DUP10 PUSH1 0x20 DUP8 ADD SWAP6 PUSH2 0x4805 DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x6452 JUMP JUMPDEST PUSH2 0x4831 PUSH2 0x268F PUSH2 0x4825 PUSH2 0x2965 DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 MLOAD SWAP7 PUSH2 0x1170 DUP9 PUSH2 0x4409 JUMP JUMPDEST SWAP3 PUSH2 0x29A7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH2 0x4847 DUP9 PUSH2 0x4409 JUMP JUMPDEST DUP9 DUP5 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP6 AND SWAP9 AND SWAP7 DUP5 PUSH2 0x25EF JUMP JUMPDEST PUSH32 0x8D261D5D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 DUP5 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH1 0x3 DUP8 MLOAD PUSH2 0x4896 DUP2 PUSH2 0x4409 JUMP JUMPDEST PUSH2 0x489F DUP2 PUSH2 0x4409 JUMP JUMPDEST SUB PUSH2 0x48C1 JUMPI PUSH2 0x48AE DUP9 MLOAD PUSH2 0x63D6 JUMP JUMPDEST PUSH2 0x48B8 DUP2 MLOAD PUSH2 0x2124 JUMP JUMPDEST SWAP5 PUSH0 SWAP2 SWAP10 PUSH2 0x4652 JUMP JUMPDEST SWAP8 PUSH1 0x1 DUP8 MLOAD PUSH2 0x48CF DUP2 PUSH2 0x4409 JUMP JUMPDEST PUSH2 0x48D8 DUP2 PUSH2 0x4409 JUMP JUMPDEST SUB PUSH2 0x4940 JUMPI PUSH2 0x48E7 DUP9 MLOAD PUSH2 0x528D JUMP JUMPDEST PUSH2 0x4938 DUP10 PUSH2 0x48F9 DUP5 PUSH1 0x40 DUP9 ADD MLOAD PUSH2 0x6172 JUMP JUMPDEST PUSH1 0x80 DUP11 ADD MLOAD SWAP1 PUSH2 0x4913 PUSH2 0x268F DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x491D DUP13 MLOAD PUSH2 0x5350 JUMP JUMPDEST SWAP2 PUSH2 0x4932 PUSH2 0xDA4 DUP11 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP4 PUSH2 0x618D JUMP JUMPDEST SWAP6 SWAP1 SWAP2 PUSH2 0x4652 JUMP JUMPDEST SWAP8 SWAP4 PUSH1 0x2 DUP8 MLOAD PUSH2 0x494F DUP2 PUSH2 0x4409 JUMP JUMPDEST PUSH2 0x4958 DUP2 PUSH2 0x4409 JUMP JUMPDEST SUB PUSH2 0x49C4 JUMPI SWAP8 DUP8 SWAP9 PUSH2 0x496A DUP10 MLOAD PUSH2 0x528D JUMP JUMPDEST PUSH1 0x60 DUP6 ADD MLOAD SWAP2 PUSH2 0x4979 DUP8 PUSH2 0x52C1 JUMP JUMPDEST PUSH2 0x49BE PUSH2 0x49B4 PUSH1 0x40 DUP12 ADD SWAP3 DUP1 DUP5 MSTORE DUP10 DUP12 SWAP16 DUP9 PUSH1 0x80 DUP3 ADD MLOAD SWAP4 PUSH2 0x49AE PUSH2 0xDA4 PUSH2 0x2B09 PUSH2 0x2B02 PUSH2 0x268F DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH2 0x60A7 JUMP JUMPDEST SWAP1 SWAP3 MLOAD SWAP1 SWAP10 PUSH2 0x2155 JUMP JUMPDEST MSTORE PUSH2 0x4652 JUMP JUMPDEST POP PUSH1 0x4 DUP7 MLOAD PUSH2 0x49D2 DUP2 PUSH2 0x4409 JUMP JUMPDEST PUSH2 0x49DB DUP2 PUSH2 0x4409 JUMP JUMPDEST SUB PUSH2 0x4A9C JUMPI PUSH2 0x49EA DUP8 MLOAD PUSH2 0x6072 JUMP JUMPDEST PUSH0 PUSH2 0x4A02 PUSH2 0xDA4 PUSH2 0xDA4 DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP6 ADD MLOAD SWAP1 PUSH1 0x80 DUP11 ADD MLOAD SWAP2 DUP4 PUSH1 0xA0 DUP9 ADD MLOAD SWAP9 PUSH2 0x4A4F PUSH1 0x40 MLOAD SWAP11 DUP12 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xE4C4366300000000000000000000000000000000000000000000000000000000 DUP7 MSTORE CALLER PUSH1 0x4 DUP8 ADD PUSH2 0x459B JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP1 PUSH0 SWAP6 PUSH0 SWAP2 PUSH0 SWAP2 PUSH2 0x4A71 JUMPI JUMPDEST POP SWAP1 SWAP6 SWAP2 SWAP10 PUSH2 0x4652 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x4A92 SWAP2 SWAP5 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x4A8A DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x4551 JUMP JUMPDEST SWAP2 SWAP6 SWAP3 SWAP2 PUSH0 PUSH2 0x4A67 JUMP JUMPDEST PUSH32 0x6C02B39500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP7 SWAP3 PUSH2 0x462 SWAP9 SWAP7 SWAP5 PUSH2 0x4B1A SWAP4 PUSH2 0x4AFE PUSH2 0x4B0C SWAP4 PUSH2 0x2D78 SWAP10 SWAP6 PUSH2 0x100 SWAP4 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 MSTORE AND PUSH1 0x20 DUP14 ADD MSTORE PUSH1 0x40 DUP13 ADD SWAP1 PUSH2 0x4413 JUMP JUMPDEST DUP1 PUSH1 0x60 DUP12 ADD MSTORE DUP10 ADD SWAP1 PUSH2 0x465 JUMP JUMPDEST SWAP1 DUP8 DUP3 SUB PUSH1 0x80 DUP10 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST SWAP2 PUSH1 0xA0 DUP7 ADD MSTORE DUP5 DUP3 SUB PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x465 JUMP JUMPDEST SWAP5 SWAP4 SWAP2 SWAP6 SWAP3 SWAP7 SWAP1 DUP5 MLOAD PUSH2 0x4B46 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD SWAP2 PUSH2 0x4B55 DUP4 PUSH2 0x4409 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD PUSH1 0xA0 DUP9 ADD MLOAD SWAP1 PUSH1 0x40 SWAP7 DUP13 PUSH1 0x40 MLOAD SWAP13 DUP14 SWAP8 DUP9 SWAP8 PUSH32 0x976907CC00000000000000000000000000000000000000000000000000000000 DUP10 MSTORE PUSH1 0x4 DUP10 ADD SWAP8 PUSH2 0x4B9D SWAP9 PUSH2 0x4AC4 JUMP JUMPDEST SUB SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 DUP2 GAS PUSH0 SWAP5 DUP6 SWAP2 CALL SWAP5 DUP6 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP1 PUSH0 SWAP7 PUSH2 0x4CB7 JUMPI JUMPDEST POP ISZERO DUP1 ISZERO PUSH2 0x4CAB JUMPI JUMPDEST PUSH2 0x4C83 JUMPI PUSH1 0x1 DUP1 SWAP5 PUSH1 0x9 SHR AND ISZERO PUSH2 0x4BE9 JUMPI SWAP1 SWAP2 SWAP3 DUP1 SWAP5 SWAP6 POP PUSH0 SWAP1 JUMPDEST PUSH2 0x4BF1 JUMPI JUMPDEST POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x4C7E JUMPI PUSH2 0x4C04 DUP2 DUP8 PUSH2 0x2155 JUMP JUMPDEST MLOAD DUP3 DUP6 ADD SWAP1 PUSH2 0x4C14 DUP4 DUP4 MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD LT PUSH2 0x4C23 JUMPI POP DUP5 ADD DUP5 PUSH2 0x4BE4 JUMP JUMPDEST DUP7 SWAP1 PUSH2 0x4C41 DUP4 PUSH2 0x2E9B DUP2 PUSH2 0x2E95 PUSH2 0x1170 PUSH2 0x11BD SWAP9 PUSH1 0x20 DUP13 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH32 0xCEFA3AFA00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST PUSH2 0x4BE9 JUMP JUMPDEST PUSH32 0xE124916500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP DUP5 MLOAD DUP7 MLOAD EQ ISZERO PUSH2 0x4BC9 JUMP JUMPDEST SWAP1 POP PUSH2 0x4CCE SWAP2 SWAP6 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2F30 DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP5 SWAP1 PUSH0 PUSH2 0x4BC0 JUMP JUMPDEST PUSH2 0x4CE2 PUSH2 0xFC SWAP3 PUSH2 0x4D4E JUMP JUMPDEST SWAP1 PUSH2 0x4DA3 JUMP JUMPDEST SWAP1 PUSH0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x4D19 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x4D07 DUP4 DUP7 PUSH2 0x2155 JUMP JUMPDEST MLOAD AND SWAP1 DUP4 AND EQ PUSH2 0x3A5C JUMPI PUSH1 0x1 ADD PUSH2 0x4CEB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 PUSH32 0xDDEF98D700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x4D78 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 ISZERO PUSH2 0x4E60 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 SWAP2 AND DUP1 PUSH0 MSTORE DUP2 PUSH1 0x20 MSTORE PUSH2 0x4DEA PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP4 DUP5 PUSH2 0x3B8A JUMP JUMPDEST SWAP3 DUP4 PUSH2 0x4E2E JUMPI POP PUSH32 0x0 DUP1 TLOAD SWAP1 PUSH0 NOT DUP3 ADD SWAP2 DUP3 GT PUSH2 0x98E JUMPI TSTORE JUMPDEST PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TSTORE JUMP JUMPDEST PUSH2 0x4E22 JUMPI PUSH2 0x4E5B PUSH32 0x0 PUSH2 0x436D JUMP JUMPDEST PUSH2 0x4E22 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP2 DUP4 DUP2 AND DUP5 DUP5 AND SUB PUSH2 0x4E82 JUMPI POP POP POP POP PUSH0 NOT SWAP1 JUMP JUMPDEST PUSH2 0x4EAC SWAP4 PUSH2 0x1762 SWAP3 AND PUSH0 MSTORE PUSH1 0x10 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP2 DUP3 DUP2 SLOAD SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP3 PUSH1 0x20 DUP4 ADD SWAP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP4 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x4EE4 JUMPI POP POP POP PUSH2 0xFC SWAP3 POP SUB DUP4 PUSH2 0x2FF JUMP JUMPDEST DUP6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 MSTORE PUSH1 0x1 SWAP6 DUP7 ADD SWAP6 DUP9 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x4ECE JUMP JUMPDEST SWAP1 PUSH2 0x4F11 DUP3 PUSH2 0x370 JUMP JUMPDEST PUSH2 0x4F1E PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x2FF JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x4F2E DUP3 SWAP5 PUSH2 0x370 JUMP JUMPDEST ADD SWAP1 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x4F3E JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH2 0x4F49 PUSH2 0x2463 JUMP JUMPDEST DUP3 DUP3 DUP6 ADD ADD MSTORE ADD PUSH2 0x4F32 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD PUSH2 0x4F62 DUP2 PUSH2 0x2E3 JUMP JUMPDEST PUSH1 0x40 PUSH1 0xFF DUP3 SWAP5 SLOAD DUP2 DUP2 AND PUSH2 0x4F75 DUP2 PUSH2 0xFBE JUMP JUMPDEST DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 PUSH1 0x8 SHR AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0xA8 SHR AND ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD DUP1 MLOAD MLOAD SWAP4 PUSH0 JUMPDEST DUP6 DUP2 LT PUSH2 0x4FAD JUMPI POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0x4FC1 PUSH2 0x1170 PUSH1 0x1 SWAP4 PUSH1 0x20 DUP9 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST PUSH2 0x4FEC PUSH2 0x4FD6 DUP4 DUP10 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x4FF7 DUP4 DUP8 MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD DUP2 GT PUSH2 0x503E JUMPI JUMPDEST POP POP PUSH2 0x5025 PUSH2 0x500F DUP3 DUP7 MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x501E DUP4 PUSH1 0x80 DUP10 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x5C40 JUMP JUMPDEST PUSH2 0x5037 DUP3 DUP9 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE ADD PUSH2 0x4F9E JUMP JUMPDEST PUSH2 0x5089 PUSH2 0x50A1 SWAP2 PUSH2 0x5083 PUSH2 0x507A PUSH2 0x5066 DUP7 DUP11 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP3 PUSH2 0x5073 DUP9 DUP13 MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0xBA7 JUMP JUMPDEST DUP3 PUSH1 0x80 SHR PUSH2 0x25E2 JUMP JUMPDEST SWAP1 PUSH2 0x66E2 JUMP JUMPDEST SWAP2 DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH0 DUP1 PUSH2 0x4FFF JUMP JUMPDEST DUP2 EQ DUP1 ISZERO SWAP3 SWAP2 SWAP1 PUSH2 0x50BD JUMPI JUMPDEST POP POP PUSH2 0x20FC JUMPI JUMP JUMPDEST EQ ISZERO SWAP1 POP PUSH0 DUP1 PUSH2 0x50B5 JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x98E JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x98E JUMPI JUMP JUMPDEST DUP1 MLOAD PUSH2 0x5103 DUP2 PUSH2 0xFBE JUMP JUMPDEST PUSH2 0x510C DUP2 PUSH2 0xFBE JUMP JUMPDEST DUP1 PUSH2 0x511F JUMPI POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x512B PUSH1 0x1 SWAP3 PUSH2 0xFBE JUMP JUMPDEST SUB PUSH2 0x51A0 JUMPI PUSH1 0x20 PUSH2 0x514A PUSH2 0xDA4 DUP3 PUSH1 0x4 SWAP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0x679AEFCE00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP2 PUSH2 0x5187 JUMPI POP SWAP1 JUMP JUMPDEST PUSH2 0x462 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH32 0xDF45063200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 PUSH1 0x80 PUSH8 0xDE0B6B3A7640000 PUSH2 0x520C PUSH2 0x2FD4 SWAP5 DUP1 PUSH2 0x51EB DUP7 PUSH1 0x60 DUP11 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MSTORE PUSH2 0x321A PUSH2 0x51FD DUP7 PUSH1 0xC0 DUP11 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x21ED DUP8 PUSH1 0xA0 DUP12 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST DIV SWAP4 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x80 PUSH2 0x5250 PUSH2 0x2FD4 SWAP4 DUP1 PUSH2 0x522F DUP6 PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MSTORE PUSH2 0x21F4 PUSH2 0x5241 DUP6 PUSH1 0xC0 DUP10 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x21ED DUP7 PUSH1 0xA0 DUP11 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST SWAP4 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST PUSH1 0x6 SHR PUSH1 0x1 AND ISZERO PUSH2 0x5265 JUMPI JUMP JUMPDEST PUSH32 0xCF0A95C000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x4 SHR PUSH1 0x1 AND PUSH2 0x5299 JUMPI JUMP JUMPDEST PUSH32 0xD4F5779C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 MLOAD SWAP1 DUP2 SWAP1 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x5303 JUMPI POP POP DUP2 LT ISZERO PUSH2 0x52DB JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x7E46BDDC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x530D DUP2 DUP4 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x531B JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x52C8 JUMP JUMPDEST SWAP3 DUP3 SUB PUSH2 0x5328 JUMPI DUP3 PUSH2 0x5313 JUMP JUMPDEST PUSH32 0x6B8C3BE500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH3 0xFFFFFF SWAP1 PUSH1 0x12 SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x98E JUMPI SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x20 PUSH2 0x538A PUSH0 SWAP3 PUSH1 0x40 DUP7 MSTORE PUSH1 0x40 DUP7 ADD SWAP1 PUSH2 0x465 JUMP JUMPDEST SWAP4 ADD MSTORE JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x20 PUSH2 0x538A PUSH1 0x1 SWAP3 PUSH1 0x40 DUP7 MSTORE PUSH1 0x40 DUP7 ADD SWAP1 PUSH2 0x465 JUMP JUMPDEST SWAP1 SWAP5 SWAP3 SWAP2 SWAP3 DUP2 MLOAD SWAP5 PUSH2 0x53B8 DUP7 PUSH2 0x2124 JUMP JUMPDEST SWAP5 PUSH0 JUMPDEST DUP8 DUP2 LT PUSH2 0x55A1 JUMPI POP PUSH2 0x53D1 SWAP1 PUSH2 0x2A6E DUP10 DUP9 PUSH2 0x2155 JUMP JUMPDEST PUSH2 0x53DB DUP9 DUP8 PUSH2 0x2155 JUMP JUMPDEST MSTORE PUSH1 0x40 MLOAD SWAP5 PUSH32 0x984DE9E800000000000000000000000000000000000000000000000000000000 SWAP3 DUP4 DUP8 MSTORE PUSH1 0x20 DUP8 DUP1 PUSH2 0x5416 DUP9 PUSH1 0x4 DUP4 ADD PUSH2 0x5373 JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP8 PUSH2 0x5580 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP5 DUP5 DUP7 MSTORE PUSH1 0x20 DUP7 DUP1 PUSH2 0x544B DUP7 PUSH1 0x4 DUP4 ADD PUSH2 0x5373 JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x223 JUMPI PUSH2 0x3DC4 PUSH2 0x54AD DUP13 PUSH2 0x5073 PUSH2 0x54A6 PUSH2 0x54C3 SWAP7 PUSH2 0x549F DUP16 PUSH2 0x548F PUSH2 0x54F9 SWAP16 SWAP2 PUSH1 0x20 SWAP15 DUP9 SWAP4 PUSH0 SWAP2 PUSH2 0x5561 JUMPI JUMPDEST POP PUSH2 0x5BB3 JUMP JUMPDEST SWAP3 PUSH2 0x549A DUP5 DUP14 PUSH2 0x66FE JUMP JUMPDEST PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x576B JUMP JUMPDEST SWAP2 DUP9 PUSH2 0x2155 JUMP JUMPDEST SWAP2 PUSH8 0xDE0B6B3A7640000 DUP2 DUP2 SUB SWAP2 LT MUL DUP3 PUSH2 0x5BB3 JUMP JUMPDEST SWAP4 PUSH2 0x54D2 DUP6 PUSH2 0x2A6E DUP13 DUP7 PUSH2 0x2155 JUMP JUMPDEST PUSH2 0x54DC DUP12 DUP6 PUSH2 0x2155 JUMP JUMPDEST MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD DUP1 SWAP8 DUP2 SWAP6 DUP3 SWAP5 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x538F JUMP JUMPDEST SUB SWAP3 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x223 JUMPI PUSH2 0x5535 SWAP6 PUSH2 0x552F SWAP4 PUSH0 SWAP4 PUSH2 0x5538 JUMPI JUMPDEST POP PUSH2 0x5521 PUSH2 0x5528 SWAP2 PUSH2 0x2124 JUMP JUMPDEST SWAP8 DUP9 PUSH2 0x2155 JUMP JUMPDEST MSTORE DUP4 PUSH2 0xBA7 JUMP JUMPDEST SWAP1 PUSH2 0x5C0C JUMP JUMPDEST SWAP2 JUMP JUMPDEST PUSH2 0x5528 SWAP2 SWAP4 POP PUSH2 0x5559 PUSH2 0x5521 SWAP2 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP4 SWAP2 POP PUSH2 0x5514 JUMP JUMPDEST PUSH1 0x20 PUSH2 0x557A SWAP3 POP RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH0 PUSH2 0x5489 JUMP JUMPDEST PUSH2 0x559A SWAP2 SWAP8 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP6 PUSH0 PUSH2 0x5432 JUMP JUMPDEST DUP1 PUSH2 0x55B7 PUSH2 0x55B1 PUSH1 0x1 SWAP4 DUP9 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0xB99 JUMP JUMPDEST PUSH2 0x55C1 DUP3 DUP11 PUSH2 0x2155 JUMP JUMPDEST MSTORE ADD PUSH2 0x53BB JUMP JUMPDEST PUSH2 0x55E0 PUSH1 0x40 SWAP3 SWAP6 SWAP5 SWAP4 SWAP6 PUSH1 0x60 DUP4 MSTORE PUSH1 0x60 DUP4 ADD SWAP1 PUSH2 0x465 JUMP JUMPDEST SWAP5 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 SWAP5 SWAP2 DUP4 SUB SWAP2 DUP4 DUP4 GT PUSH2 0x98E JUMPI PUSH1 0x20 PUSH2 0x5650 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH2 0x560F DUP8 DUP8 PUSH2 0x5BB3 JUMP JUMPDEST PUSH2 0x5619 DUP2 DUP4 PUSH2 0x66FE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x16A0B3E000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP14 DUP11 PUSH1 0x4 DUP6 ADD PUSH2 0x55C8 JUMP JUMPDEST SUB SWAP3 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x223 JUMPI PUSH2 0x5535 SWAP6 PUSH2 0x21F4 DUP9 PUSH2 0x569B SWAP4 PUSH2 0x56A4 SWAP9 PUSH2 0x56AB SWAP7 PUSH0 SWAP3 PUSH2 0x56B1 JUMPI JUMPDEST POP PUSH2 0x5689 DUP3 PUSH2 0x2A6E PUSH2 0x3DC4 SWAP5 SWAP6 DUP12 PUSH2 0x2155 JUMP JUMPDEST SWAP9 PUSH2 0x5694 DUP14 DUP11 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x5C0C JUMP JUMPDEST SWAP4 DUP5 SWAP3 MLOAD PUSH2 0x2124 JUMP JUMPDEST SWAP6 DUP7 PUSH2 0x2155 JUMP JUMPDEST MSTORE PUSH2 0xBA7 JUMP JUMPDEST PUSH2 0x3DC4 SWAP3 POP PUSH2 0x2A6E SWAP4 PUSH2 0x56D5 PUSH2 0x5689 SWAP3 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP4 POP SWAP4 POP PUSH2 0x5676 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 ISZERO PUSH2 0x5715 JUMPI DIV SWAP1 JUMP JUMPDEST PUSH2 0x56DE JUMP JUMPDEST SWAP1 SWAP3 SWAP2 PUSH2 0x5727 DUP3 MLOAD PUSH2 0x2124 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x5764 JUMPI PUSH2 0x5747 DUP4 PUSH2 0x5741 DUP4 DUP6 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x50E5 JUMP JUMPDEST SWAP1 DUP7 ISZERO PUSH2 0x5715 JUMPI DUP7 PUSH1 0x1 SWAP3 DIV PUSH2 0x575D DUP3 DUP8 PUSH2 0x2155 JUMP JUMPDEST MSTORE ADD PUSH2 0x572A JUMP JUMPDEST POP POP POP SWAP2 POP JUMP JUMPDEST SWAP1 PUSH2 0x5775 SWAP2 PUSH2 0x50E5 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x5795 JUMPI POP JUMP JUMPDEST PUSH2 0xFC SWAP1 PUSH2 0x5B63 JUMP JUMPDEST SWAP2 PUSH2 0x57A8 SWAP2 PUSH2 0x50E5 JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x98E JUMPI DUP2 ISZERO PUSH2 0x5715 JUMPI DIV SWAP1 JUMP JUMPDEST SWAP2 SWAP5 SWAP3 SWAP1 SWAP5 PUSH0 SWAP6 PUSH0 SWAP6 DUP2 PUSH2 0x57E2 JUMPI POP POP POP POP POP JUMP JUMPDEST DUP5 SWAP8 POP PUSH2 0x2791 PUSH2 0x57FB DUP3 PUSH1 0xC0 PUSH2 0x5807 SWAP7 SWAP8 SWAP9 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP2 PUSH1 0xA0 DUP11 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST SWAP5 MLOAD PUSH1 0x1 DUP2 PUSH1 0x3 SHR AND ISZERO PUSH2 0x581D JUMPI JUMPDEST DUP1 DUP1 PUSH2 0x1711 JUMP JUMPDEST PUSH3 0xFFFFFF SWAP2 SWAP3 SWAP5 POP PUSH1 0x2A SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x98E JUMPI PUSH2 0x5853 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP7 PUSH2 0x50E5 JUMP JUMPDEST DIV SWAP3 DUP5 DUP5 GT PUSH2 0x58C9 JUMPI DUP1 PUSH2 0x1762 PUSH2 0x58A8 PUSH2 0x5885 PUSH2 0x58C0 SWAP5 PUSH2 0x1762 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x58A2 DUP9 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x25E2 JUMP JUMPDEST SWAP1 PUSH2 0x67B5 JUMP JUMPDEST SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH0 DUP1 DUP1 PUSH2 0x5816 JUMP JUMPDEST PUSH32 0x4C69AC5D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 SWAP2 SWAP3 AND PUSH0 MSTORE PUSH1 0x20 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH0 JUMPDEST PUSH1 0x60 DUP7 ADD MLOAD DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x594B JUMPI SWAP1 PUSH2 0x593B PUSH2 0x592C DUP3 PUSH1 0x1 SWAP5 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x501E DUP4 PUSH1 0x80 DUP12 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST DUP2 PUSH0 MSTORE DUP4 DUP7 MSTORE DUP5 PUSH0 KECCAK256 SSTORE ADD PUSH2 0x590E JUMP JUMPDEST POP POP POP POP POP SWAP1 POP JUMP JUMPDEST ORIGIN ISZERO DUP1 PUSH2 0x595E JUMPI SWAP1 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x7 SLOAD AND ISZERO SWAP1 JUMP JUMPDEST SWAP1 ORIGIN PUSH2 0x59AC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x599D SWAP3 AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP1 SLOAD SWAP2 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x98E JUMPI SSTORE JUMP JUMPDEST PUSH32 0x67F84AB200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 DUP4 ISZERO PUSH2 0x1A8E JUMPI PUSH2 0x5A07 DUP6 PUSH2 0x1762 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD DUP1 DUP5 GT PUSH2 0x5B02 JUMPI DUP4 SWAP1 SUB PUSH2 0x5A31 DUP7 PUSH2 0x1762 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0x5A57 DUP4 PUSH2 0x5A51 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0xBA7 JUMP JUMPDEST PUSH2 0x5A60 DUP2 PUSH2 0x67C3 JUMP JUMPDEST PUSH2 0x5A7B DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP1 DUP2 EXTCODESIZE ISZERO PUSH2 0xED JUMPI PUSH1 0x40 MLOAD PUSH32 0x23DE665100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP5 AND PUSH1 0x4 DUP6 ADD MSTORE PUSH0 PUSH1 0x24 DUP6 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP6 ADD DUP3 SWAP1 MSTORE SWAP4 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F SWAP2 PUSH2 0x5AFD SWAP2 DUP7 DUP2 DUP1 PUSH1 0x64 DUP2 ADD PUSH2 0x17F6 JUMP JUMPDEST SUB SWAP1 LOG4 JUMP JUMPDEST PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 DUP4 SWAP1 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP1 DUP3 DIV MUL DUP2 SUB PUSH2 0x5B55 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x98E JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x0 GT PUSH2 0x5B8B JUMPI JUMP JUMPDEST PUSH32 0x1ED4D11800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x5BE4 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x98E JUMPI PUSH1 0x1 SWAP1 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP3 ISZERO PUSH2 0x5BE4 JUMPI PUSH1 0x1 SWAP2 PUSH2 0x5C1E SWAP2 PUSH2 0x50E5 JUMP JUMPDEST SWAP2 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x462 SWAP3 PUSH2 0x5C3A SWAP2 PUSH2 0x50E5 JUMP JUMPDEST SWAP1 PUSH2 0x5BB3 JUMP JUMPDEST SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 GT SWAP1 DUP2 ISZERO PUSH2 0x5C9A JUMPI JUMPDEST POP PUSH2 0x5C72 JUMPI PUSH1 0x80 SHL SWAP1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x98E JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x89560CA100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP DUP2 GT PUSH0 PUSH2 0x5C5D JUMP JUMPDEST SWAP1 PUSH2 0x5CB1 DUP3 PUSH1 0x80 SHR PUSH2 0x4D4E JUMP JUMPDEST SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SWAP4 AND DUP1 PUSH2 0x5CDE JUMPI JUMPDEST POP POP PUSH1 0x2 SWAP2 PUSH2 0x5CDA SWAP2 PUSH2 0x3B72 JUMP JUMPDEST SDIV SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 POP SWAP1 PUSH1 0x24 PUSH1 0x20 SWAP3 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH32 0xA28A47700000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x223 JUMPI PUSH2 0x5D3F PUSH2 0x5CDA SWAP3 PUSH1 0x2 SWAP5 PUSH0 SWAP2 PUSH2 0x5D48 JUMPI JUMPDEST POP PUSH2 0x4D4E JUMP JUMPDEST SWAP3 DUP2 SWAP3 POP PUSH2 0x5CCC JUMP JUMPDEST PUSH2 0x5D61 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH0 PUSH2 0x5D39 JUMP JUMPDEST PUSH0 DUP2 SLT PUSH2 0x5D71 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0xA8CE443200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH0 PUSH1 0x44 DUP5 ADD MSTORE SWAP1 SWAP4 SWAP2 SWAP3 SWAP2 DUP4 PUSH1 0x64 DUP2 ADD JUMPDEST SUB SWAP2 PUSH2 0x5DFB PUSH1 0x1F NOT SWAP4 DUP5 DUP2 ADD DUP8 MSTORE DUP7 PUSH2 0x2FF JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP3 DUP8 MLOAD SWAP1 DUP3 DUP6 GAS CALL SWAP1 PUSH2 0x5E18 PUSH2 0x6025 JUMP JUMPDEST DUP3 PUSH2 0x5E85 JUMPI JUMPDEST POP DUP2 PUSH2 0x5E7A JUMPI JUMPDEST POP ISZERO PUSH2 0x5E32 JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x24 DUP6 ADD MSTORE PUSH0 PUSH1 0x44 DUP6 ADD MSTORE PUSH1 0x64 SWAP1 DUP2 ADD DUP5 MSTORE PUSH2 0x5E70 SWAP4 PUSH2 0x964 SWAP2 PUSH2 0x5E6A SWAP1 DUP3 PUSH2 0x2FF JUMP JUMPDEST DUP3 PUSH2 0x65A0 JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x1711 JUMP JUMPDEST SWAP1 POP EXTCODESIZE ISZERO ISZERO PUSH0 PUSH2 0x5E25 JUMP JUMPDEST DUP1 MLOAD SWAP2 SWAP3 POP DUP2 ISZERO SWAP2 DUP3 ISZERO PUSH2 0x5E9D JUMPI JUMPDEST POP POP SWAP1 PUSH0 PUSH2 0x5E1E JUMP JUMPDEST PUSH2 0x5EB0 SWAP3 POP PUSH1 0x20 DUP1 SWAP2 DUP4 ADD ADD SWAP2 ADD PUSH2 0x2221 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x5E94 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 SWAP1 SWAP3 DUP4 PUSH1 0x64 DUP2 ADD PUSH2 0x5DE7 JUMP JUMPDEST SWAP1 PUSH2 0x5F22 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x4D4E JUMP JUMPDEST SWAP1 PUSH0 SWAP3 PUSH1 0x80 SHR DUP1 PUSH2 0x5F3B JUMPI POP POP PUSH1 0x2 SWAP2 PUSH2 0x5CDA SWAP2 PUSH2 0x3B72 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 POP SWAP1 PUSH1 0x24 PUSH1 0x20 SWAP3 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH32 0xB3D7F6B900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x223 JUMPI PUSH2 0x5D3F PUSH2 0x5CDA SWAP3 PUSH1 0x2 SWAP5 PUSH0 SWAP2 PUSH2 0x5D48 JUMPI POP PUSH2 0x4D4E JUMP JUMPDEST SWAP3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 DUP4 SUB SWAP3 DUP4 GT PUSH2 0x98E JUMPI DUP2 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 DUP4 ADD DUP1 SWAP4 GT PUSH2 0x98E JUMPI PUSH2 0xFC SWAP4 PUSH2 0x67FB JUMP JUMPDEST SWAP3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 DUP4 ADD DUP1 SWAP4 GT PUSH2 0x98E JUMPI DUP2 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 DUP4 SUB SWAP3 DUP4 GT PUSH2 0x98E JUMPI PUSH2 0xFC SWAP4 PUSH2 0x67FB JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x604F JUMPI RETURNDATASIZE SWAP1 PUSH2 0x6036 DUP3 PUSH2 0x3F5 JUMP JUMPDEST SWAP2 PUSH2 0x6044 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x2FF JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x462 SWAP4 PUSH1 0x20 DUP2 MLOAD SWAP2 ADD DUP3 DUP6 GAS CALL PUSH2 0x606C PUSH2 0x6025 JUMP JUMPDEST SWAP2 PUSH2 0x6982 JUMP JUMPDEST PUSH1 0x5 SHR PUSH1 0x1 AND ISZERO PUSH2 0x607F JUMPI JUMP JUMPDEST PUSH32 0x4876C0BC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP5 SWAP2 PUSH1 0x20 PUSH2 0x60D6 PUSH2 0x60C1 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 PUSH2 0x25E2 JUMP JUMPDEST SWAP5 PUSH2 0x60CC DUP8 DUP8 PUSH2 0x5BB3 JUMP JUMPDEST PUSH2 0x5619 DUP2 DUP4 PUSH2 0x6A0E JUMP JUMPDEST SUB SWAP3 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x223 JUMPI PUSH2 0x5535 SWAP6 PUSH2 0x3DC4 PUSH2 0x54AD DUP6 PUSH2 0x569B SWAP5 PUSH2 0x56A4 SWAP10 DUP13 SWAP10 DUP11 PUSH2 0x6135 SWAP10 PUSH0 SWAP5 PUSH2 0x613B JUMPI JUMPDEST POP SWAP1 PUSH2 0x6129 PUSH2 0x6122 PUSH2 0x611B PUSH2 0x6130 SWAP5 PUSH2 0x2834 SWAP8 SWAP9 PUSH2 0x2155 JUMP JUMPDEST MLOAD DUP8 PUSH2 0xBA7 JUMP JUMPDEST SWAP13 DUP13 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x50E5 JUMP JUMPDEST PUSH2 0x570B JUMP JUMPDEST MSTORE PUSH2 0x25E2 JUMP JUMPDEST PUSH2 0x2834 SWAP5 POP PUSH2 0x6122 PUSH2 0x611B PUSH2 0x6130 SWAP5 SWAP4 PUSH2 0x6166 PUSH2 0x6129 SWAP5 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP8 POP SWAP4 SWAP5 POP POP POP PUSH2 0x6102 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP1 DUP4 MLOAD PUSH2 0x6183 DUP5 MLOAD DUP3 PUSH2 0x20F5 JUMP JUMPDEST PUSH1 0x5 SHL SWAP4 ADD SWAP2 ADD MCOPY JUMP JUMPDEST SWAP3 SWAP2 SWAP1 SWAP4 DUP4 MLOAD PUSH2 0x619C DUP2 PUSH2 0x2124 JUMP JUMPDEST SWAP2 PUSH2 0x61A6 DUP3 PUSH2 0x2124 JUMP JUMPDEST SWAP7 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0x639B JUMPI POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP2 PUSH1 0x40 MLOAD SWAP6 PUSH32 0x984DE9E800000000000000000000000000000000000000000000000000000000 SWAP3 DUP4 DUP9 MSTORE PUSH1 0x20 SWAP9 DUP10 DUP10 DUP1 PUSH2 0x61F9 DUP5 PUSH1 0x4 DUP4 ADD PUSH2 0x5373 JUMP JUMPDEST SUB DUP2 DUP10 GAS STATICCALL SWAP9 DUP10 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP10 PUSH2 0x637C JUMPI JUMPDEST POP PUSH1 0x40 MLOAD DUP6 DUP2 MSTORE DUP11 DUP2 DUP1 PUSH2 0x6223 DUP12 PUSH1 0x4 DUP4 ADD PUSH2 0x538F JUMP JUMPDEST SUB DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x223 JUMPI DUP11 PUSH2 0x6130 PUSH2 0x625E SWAP4 PUSH2 0x6257 SWAP4 DUP16 PUSH0 SWAP3 PUSH2 0x635F JUMPI JUMPDEST SWAP12 SWAP10 SWAP14 SWAP13 SWAP11 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 POP PUSH2 0x50C8 JUMP JUMPDEST DUP1 SWAP4 PUSH2 0x6A0E JUMP JUMPDEST PUSH0 JUMPDEST DUP10 DUP2 LT PUSH2 0x62CD JUMPI POP POP POP POP PUSH2 0x6284 SWAP6 POP PUSH1 0x40 MLOAD DUP1 SWAP7 DUP2 SWAP5 DUP3 SWAP4 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x538F JUMP JUMPDEST SUB SWAP2 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x223 JUMPI DUP4 PUSH2 0x6130 SWAP4 PUSH2 0x62AA SWAP3 PUSH2 0x5535 SWAP8 PUSH0 SWAP3 PUSH2 0x62B0 JUMPI JUMPDEST POP POP PUSH2 0xBA7 JUMP JUMPDEST SWAP1 PUSH2 0x50E5 JUMP JUMPDEST PUSH2 0x62C6 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x62A3 JUMP JUMPDEST DUP7 SWAP9 SWAP10 SWAP6 SWAP8 POP DUP4 DUP14 DUP4 SWAP5 SWAP6 SWAP7 SWAP9 DUP4 PUSH2 0x62F1 PUSH2 0x62EA DUP3 PUSH1 0x1 SWAP9 PUSH2 0x2155 JUMP JUMPDEST MLOAD DUP10 PUSH2 0x67A2 JUMP JUMPDEST DUP1 PUSH2 0x62FC DUP4 DUP6 PUSH2 0x2155 JUMP JUMPDEST MLOAD GT PUSH2 0x6318 JUMPI JUMPDEST POP POP POP POP POP ADD SWAP1 DUP11 SWAP7 SWAP5 SWAP9 SWAP8 SWAP6 SWAP4 SWAP3 SWAP2 PUSH2 0x6260 JUMP JUMPDEST DUP2 DUP4 PUSH2 0x6339 PUSH2 0x634A SWAP8 PUSH2 0x6343 SWAP5 PUSH2 0x6332 DUP6 PUSH2 0x5073 SWAP10 PUSH2 0x2155 JUMP JUMPDEST MLOAD SUB PUSH2 0x576B JUMP JUMPDEST PUSH2 0x1DD0 DUP4 DUP9 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP3 PUSH2 0x2155 JUMP JUMPDEST PUSH2 0x6354 DUP3 DUP12 PUSH2 0x2155 JUMP JUMPDEST MSTORE DUP5 DUP14 DUP11 DUP4 PUSH0 PUSH2 0x6303 JUMP JUMPDEST PUSH2 0x6375 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST PUSH0 DUP16 PUSH2 0x6243 JUMP JUMPDEST PUSH2 0x6394 SWAP2 SWAP10 POP DUP11 RETURNDATASIZE DUP13 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP8 PUSH0 PUSH2 0x620C JUMP JUMPDEST DUP1 PUSH2 0x63C5 PUSH2 0x63C0 PUSH2 0x63AE PUSH1 0x1 SWAP5 DUP13 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x63B9 DUP5 DUP8 PUSH2 0x2155 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x25E2 JUMP JUMPDEST PUSH2 0xB99 JUMP JUMPDEST PUSH2 0x63CF DUP3 DUP9 PUSH2 0x2155 JUMP JUMPDEST MSTORE ADD PUSH2 0x61A9 JUMP JUMPDEST PUSH1 0x7 SHR PUSH1 0x1 AND ISZERO PUSH2 0x63E3 JUMPI JUMP JUMPDEST PUSH32 0xEFE0265D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP3 SWAP2 PUSH2 0x6417 DUP5 MLOAD PUSH2 0x2124 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x644C JUMPI DUP1 PUSH2 0x643B DUP6 DUP6 PUSH2 0x6435 PUSH1 0x1 SWAP6 DUP8 PUSH2 0x2155 JUMP JUMPDEST MLOAD PUSH2 0x5C0C JUMP JUMPDEST PUSH2 0x6445 DUP3 DUP10 PUSH2 0x2155 JUMP JUMPDEST MSTORE ADD PUSH2 0x641A JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP4 DUP5 ISZERO PUSH2 0x656B JUMPI PUSH2 0x648A DUP4 PUSH2 0x6484 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x25E2 JUMP JUMPDEST PUSH2 0x64A9 DUP6 PUSH2 0x1762 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP5 DUP2 SLOAD ADD SWAP1 SSTORE PUSH2 0x64B8 DUP2 PUSH2 0x67C3 JUMP JUMPDEST PUSH2 0x64D3 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP3 PUSH0 DUP5 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F PUSH1 0x40 MLOAD DUP1 PUSH2 0x650C DUP8 DUP3 SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB SWAP1 LOG4 DUP3 EXTCODESIZE ISZERO PUSH2 0xED JUMPI PUSH1 0x40 MLOAD PUSH32 0x23DE665100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 DUP3 SWAP1 DUP2 DUP4 DUP2 PUSH1 0x64 DUP2 ADD PUSH2 0x19FE JUMP JUMPDEST PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x65B4 SWAP2 AND SWAP2 DUP3 PUSH2 0x6054 JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x65F5 JUMPI JUMPDEST POP POP PUSH2 0x65CA JUMPI POP JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x6608 SWAP3 POP PUSH1 0x20 DUP1 SWAP2 DUP4 ADD ADD SWAP2 ADD PUSH2 0x2221 JUMP JUMPDEST ISZERO PUSH0 DUP1 PUSH2 0x65C1 JUMP JUMPDEST SWAP1 PUSH5 0xFFFFFFFFFF PUSH2 0x6620 DUP3 PUSH2 0x2124 JUMP JUMPDEST SWAP3 PUSH1 0x5A SHR AND PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x6634 JUMPI POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x5 DUP1 DUP3 MUL SWAP1 DUP3 DUP3 DIV EQ DUP3 ISZERO OR ISZERO PUSH2 0x98E JUMPI DUP3 PUSH1 0x1F SWAP2 SHR AND SWAP1 PUSH1 0x4D DUP3 GT PUSH2 0x98E JUMPI PUSH1 0x1 SWAP2 PUSH1 0xA EXP PUSH2 0x6665 DUP3 DUP8 PUSH2 0x2155 JUMP JUMPDEST MSTORE ADD PUSH2 0x6627 JUMP JUMPDEST PUSH3 0xFFFFFF SWAP1 PUSH1 0x42 SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x98E JUMPI SWAP1 JUMP JUMPDEST SWAP1 SWAP4 SWAP3 PUSH0 SWAP5 PUSH2 0x66A2 DUP5 PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST MLOAD DUP2 DUP2 GT PUSH2 0x66B1 JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH2 0x66D7 SWAP6 SWAP7 POP SWAP2 PUSH2 0x66C6 SWAP2 PUSH2 0x2791 SWAP4 SUB PUSH2 0x576B JUMP JUMPDEST SWAP3 PUSH1 0xA0 PUSH2 0x2788 DUP3 PUSH1 0xC0 DUP7 ADD MLOAD PUSH2 0x2155 JUMP JUMPDEST SWAP1 PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x1711 JUMP JUMPDEST SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x462 SWAP3 AND PUSH2 0x5C40 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x4 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH32 0xB677FA5600000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP3 PUSH2 0x6781 JUMPI JUMPDEST POP DUP2 DUP2 LT PUSH2 0x6753 JUMPI POP POP JUMP JUMPDEST PUSH32 0xE31C95BE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x679B SWAP2 SWAP3 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x6747 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH2 0x321F SWAP2 PUSH2 0x50E5 JUMP JUMPDEST SWAP1 PUSH2 0x462 SWAP2 PUSH1 0x80 SHR SWAP1 PUSH2 0x5C40 JUMP JUMPDEST PUSH3 0xF4240 DUP2 LT PUSH2 0x67D0 JUMPI POP JUMP JUMPDEST PUSH32 0xD38D20FC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x20 SWAP6 SWAP4 SWAP5 SWAP1 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP2 DUP8 DUP4 PUSH1 0x24 DUP2 DUP8 DUP7 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP4 PUSH2 0x6963 JUMPI JUMPDEST POP DUP1 DUP4 LT PUSH2 0x691E JUMPI POP PUSH2 0x6875 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH1 0x40 MLOAD SWAP2 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 DUP5 DUP2 PUSH1 0x24 DUP2 DUP6 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP6 PUSH2 0x68FF JUMPI JUMPDEST POP POP DUP2 DUP5 LT PUSH2 0x68C4 JUMPI POP POP PUSH2 0x68C1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE JUMP JUMPDEST PUSH32 0x1149424D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE POP PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH2 0x6916 SWAP3 SWAP6 POP DUP1 RETURNDATASIZE LT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP3 PUSH0 DUP1 PUSH2 0x689B JUMP JUMPDEST SWAP1 POP PUSH2 0x11BD SWAP3 DUP7 PUSH32 0x1C6A537500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND SWAP3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x64 SWAP5 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE JUMP JUMPDEST PUSH2 0x697B SWAP2 SWAP4 POP DUP9 RETURNDATASIZE DUP11 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x6851 JUMP JUMPDEST SWAP1 PUSH2 0x69BF JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x6997 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x6A05 JUMPI JUMPDEST PUSH2 0x69D0 JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x69C8 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x4 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH32 0x273C1ADF00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x223 JUMPI PUSH0 SWAP3 PUSH2 0x6A91 JUMPI JUMPDEST POP DUP2 DUP2 GT PUSH2 0x6A63 JUMPI POP POP JUMP JUMPDEST PUSH32 0x3E8960DC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x6AAB SWAP2 SWAP3 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x21C JUMPI PUSH2 0x20E DUP2 DUP4 PUSH2 0x2FF JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x6A57 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH4 0xFFFFFFFF DUP1 DUP1 SWAP5 AND SWAP2 AND ADD SWAP2 DUP3 GT PUSH2 0x98E JUMPI JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBD 0xBD 0xD4 ORIGIN 0x2D PUSH16 0x59D90560043E08C2EFEF84699D8D2C32 PUSH0 0x29 0xBF DUP15 0xF6 BLOBBASEFEE ADD PUSH14 0x5BC464736F6C634300081B003300 ","sourceMap":"2550:79548:68:-:0;;;;;;;;;-1:-1:-1;2550:79548:68;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;-1:-1:-1;;;;;2550:79548:68;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;:::o;:::-;;;;;-1:-1:-1;;2550:79548:68;;;;;;;;;;:::i;:::-;;;1083:103:53;;:::i;:::-;2707:73:70;;:::i;:::-;-1:-1:-1;;;;;2550:79548:68;;-1:-1:-1;2550:79548:68;;;7242:11;2550:79548;;;;;;;;;;;;;7296:30;;7320:4;2550:79548;7296:30;;2550:79548;;;;;;;;;;7296:30;;;;;;;2550:79548;7296:30;7391:32;7296:30;-1:-1:-1;7296:30:68;;;2550:79548;7336:18;;;;-1:-1:-1;;;;;2550:79548:68;;;7242:11;2550:79548;;;;;;;7336:18;2550:79548;7391:32;:::i;:::-;7656:19;;;;7652:532;;2550:79548;8215:6;;;;;:::i;:::-;1148:1:53;;:::i;:::-;2550:79548:68;;;;;;;;;;;;;;;;;7652:532;;-1:-1:-1;8215:6:68;7652:532;;7296:30;;;;2550:79548;7296:30;2550:79548;7296:30;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;:::i;2550:79548::-;;;;;-1:-1:-1;;2550:79548:68;;;;;54104:6;2550:79548;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;:::i;:::-;54055:6;2550:79548;;54028:10;;;;54055:6;:::i;:::-;54028:10;54104:6;:::i;:::-;2550:79548;;;54128:4;2550:79548;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;2550:79548:68;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;2550:79548:68;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;2550:79548:68;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;2550:79548:68;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2550:79548:68;;;;;;;;;;;;;;;;;-1:-1:-1;2550:79548:68;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2550:79548:68;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;-1:-1:-1;2550:79548:68;;;:::o;:::-;;;;;;:::i;:::-;;;;-1:-1:-1;;2550:79548:68;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10931:17;2550:79548;;;;;;;;;:::i;:::-;;;;;10931:17;:::i;:::-;2550:79548;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2550:79548:68;;;;;;;;;;;;;;;;;;;;;54704:20;2550:79548;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;54704:20;:::i;2550:79548::-;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;2550:79548:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6980:19;2550:79548;;6980:19;:::i;:::-;2550:79548;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2550:79548:68;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;2550:79548:68;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;1083:103:53;;;:::i;:::-;2707:73:70;;:::i;:::-;3891:15;;;;:::i;:::-;;;:::i;:::-;-1:-1:-1;;;;;2550:79548:68;;-1:-1:-1;2550:79548:68;8407:11;2550:79548;;;-1:-1:-1;2550:79548:68;;;;;;;;;;;;;;;;;;;1412:43:105;;;-1:-1:-1;;;;;2550:79548:68;;;;1412:43:105;;2550:79548:68;;;;;;;;;1412:43:105;;;;;2550:79548:68;1412:43:105;2550:79548:68;;1412:43:105;:::i;:::-;;:::i;:::-;-1:-1:-1;551:66:53;3051:52:55;2550:79548:68;;;:::i;:::-;;;;;;;:::o;:::-;;;;;-1:-1:-1;;2550:79548:68;;;;;;;;-1:-1:-1;;;;;81348:15:68;2550:79548;;;;;;;;;-1:-1:-1;;2550:79548:68;;;;;53825:6;2550:79548;;;;;:::i;:::-;;;;;;:::i;:::-;;;53802:10;;53825:6;:::i;2550:79548::-;;;;;-1:-1:-1;;2550:79548:68;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;-1:-1:-1;;;;;2550:79548:68;;;;;-1:-1:-1;2550:79548:68;-1:-1:-1;2550:79548:68;;7916:84:49;2550:79548:68;7916:84:49;2550:79548:68;-1:-1:-1;2550:79548:68;;7916:84:49;8984:24:70;8980:85;;-1:-1:-1;2550:79548:68;;;;53306:11;2550:79548;;;-1:-1:-1;2550:79548:68;;;;;;;;;;;;;;;-1:-1:-1;2550:79548:68;;-1:-1:-1;2550:79548:68;;-1:-1:-1;2550:79548:68;;;;;;;;53350:34;2550:79548;;;;;;;:::i;:::-;53350:34;;:::i;:::-;2550:79548;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2550:79548:68;;;;;;;;;;;;;;;;;;8980:85:70;9031:23;-1:-1:-1;9031:23:70;2550:79548:68;;;-1:-1:-1;9031:23:70;2550:79548:68;;;;;-1:-1:-1;;2550:79548:68;;;;;;551:66:53;2806:53:55;2550:79548:68;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2550:79548:68;;;;;;;:::o;:::-;;;;;;;;;;:::o;37300:4015::-;;2707:73:70;;:::i;:::-;8882:4;-1:-1:-1;;;;;2550:79548:68;;;8882:4:70;:::i;:::-;37891:11:68;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;;37891:11;:::i;:::-;38389:75;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;;38389:75;:::i;:::-;38510:15;40513:103;38510:15;;;;2550:79548;38534:27;2550:79548;38534:20;;;;;2550:79548;38534:27;;:::i;:::-;38895:20;;38965:30;;;;38895:143;38965:30;;39009:19;;;;;;;38895:143;;:::i;:::-;2550:79548;39132:57;2550:79548;;2370:1:75;5866:205:74;958:1:75;7916:84:49;;5866:205:74;;39132:57:68;39128:897;;37300:4015;40513:103;;;;;;:::i;:::-;40453:163;;;;;40818:56;2550:79548;;7916:84:49;6405:203:74;958:1:75;7916:84:49;;6405:203:74;;40818:56:68;40814:495;;37300:4015;37526:23;;;;;;37300:4015;:::o;40814:495::-;2550:79548;;;;41030:268;2550:79548;40974:28;;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;;-1:-1:-1;;;;;2550:79548:68;;;39384:15;2550:79548;;;;;;;40974:28;2550:79548;-1:-1:-1;;;;;2550:79548:68;;;40974:28;2550:79548;;;41100:10;41030:268;;:::i;:::-;40814:495;;;;;;;39128:897;39384:28;39859:155;2550:79548;;;39384:28;;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;39384:28;39306:10;;39384:28;;:::i;:::-;39717:19;39684:31;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;;-1:-1:-1;;;;;2550:79548:68;;;39684:18;2550:79548;;;;;;;39684:31;39717:19;;:::i;:::-;39859:20;39933:30;;39981:19;;39859:155;;:::i;:::-;39128:897;;;;;2707:73:70;;;;:::i;:::-;10848:20:68;;;2550:79548;-1:-1:-1;;;;;8882:4:70;2550:79548:68;;;;8882:4:70;:::i;:::-;10980:20:68;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;10980:20;11016:30;;;2550:79548;11016:35;11012:90;;11116:23;;;2550:79548;-1:-1:-1;;;;;2550:79548:68;11143:24;11116:51;2550:79548;11143:24;;;2550:79548;-1:-1:-1;;;;;2550:79548:68;;;;-1:-1:-1;;;;;2550:79548:68;;;11116:51;2550:79548;;11116:51;11112:110;;11694:84;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;11694:84;11817:41;;;;;:::i;:::-;11907:58;;;;;;:::i;:::-;2550:79548;;958:1:75;7916:84:49;2042:1:75;7916:84:49;11976:992:68;;2707:73:70;2550:79548:68;;19099:20;;2550:79548;958:1:75;7916:84:49;;;13433:346:68;;2707:73:70;19099:20:68;;;;:::i;:::-;14060:185;;;;;;;2550:79548;14488:45;2550:79548;;7916:84:49;4435:180:74;958:1:75;7916:84:49;;4435:180:74;;14488:45:68;14484:507;;2707:73:70;2550:79548:68;;;;;;;;;:::i;:::-;;;;:::i;:::-;15005:41;;15062:28;;2772:1:70;;2707:73;:::o;15001:158:68:-;15121:27;;;;2772:1:70;2707:73;:::o;14484:507:68:-;2550:79548;;;;14633:37;;2550:79548;14704:276;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;14633:37;2550:79548;;;14839:10;;14704:276;;:::i;:::-;14484:507;;;;;;;;13433:346;2550:79548;;-1:-1:-1;;;;;2550:79548:68;13540:228;11143:24;13672:27;;2550:79548;;;13717:37;;;-1:-1:-1;;;;;2550:79548:68;;;39384:15;2550:79548;;;;;;;13717:37;13540:228;;;:::i;:::-;2550:79548;;13433:346;;11976:992;12163:37;2550:79548;;;;-1:-1:-1;;;;;2550:79548:68;;;;12163:37;;;-1:-1:-1;;;;;2550:79548:68;;;39384:15;2550:79548;;;;;;;12163:37;;;:::i;:::-;12617:19;12575:40;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;12575:40;12617:19;;:::i;:::-;12802:65;;;;;:::i;:::-;11116:23;12770:29;;2550:79548;19099:20;12899:58;;;;;:::i;:::-;11976:992;;;;11112:110;11190:21;-1:-1:-1;11190:21:68;;-1:-1:-1;11190:21:68;11012:90;11074:17;-1:-1:-1;11074:17:68;;-1:-1:-1;11074:17:68;2550:79548;;;;;;;;;;;;-1:-1:-1;2550:79548:68;;;:::o;:::-;;:::i;2707:73:70:-;;;:::i;:::-;568:1:80;8248:15:70;2550:79548:68;;7916:84:49;;8244:95:70;;54595:19:68;;;2550:79548;-1:-1:-1;;;;;2550:79548:68;;;;;;;;;10124:13:70;2550:79548:68;;;54595:19;2550:79548;;;;10124:41:70;10120:113;;54772:27:68;1083:103:53;;;;:::i;:::-;2550:79548:68;54772:25;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;54772:25;54595:19;2550:79548;54772:27;;;;2550:79548;54772:27;;;;;;;;55833:15;54772:27;2550:79548;54772:27;;;2707:73:70;2550:79548:68;;54857:24;2550:79548;;;;-1:-1:-1;;;;;2550:79548:68;;;;54857:24;:::i;:::-;2550:79548;;-1:-1:-1;;;;;2550:79548:68;54937:21;;;;;2550:79548;;;54937:21;;:::i;:::-;568:1:80;2550:79548:68;54974:16;;2550:79548;;;;:::i;:::-;;;;:::i;:::-;54974:44;568:1:80;;55116:169:68;2550:79548;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;2550:79548:68;;;55116:169;;:::i;:::-;55304:70;55070:215;;;;;;;;55304:70;;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;55304:70;2550:79548;54595:19;2550:79548;55304:70;;;;2550:79548;;;;;;;;;;;;;;;;;;55304:70;;;;54970:782;2550:79548;;;;;:::i;:::-;;;;:::i;:::-;55766:32;;55833:15;2550:79548;55818:30;;;55814:116;;55943:34;56233:19;2550:79548;55943:34;;55762:417;;;;2550:79548;-1:-1:-1;;;;;2550:79548:68;;;;56233:19;:::i;:::-;1148:1:53;;:::i;:::-;2772::70;;2707:73;:::o;55814:116:68:-;55875:40;2550:79548;55875:40;54772:27;2550:79548;;;;;;55875:40;2550:79548;55875:40;55762:417;56026:15;2550:79548;56012:29;;;56008:114;;56135:33;56233:19;2550:79548;56135:33;;55762:417;;;;;56008:114;56068:39;2550:79548;56068:39;54772:27;2550:79548;;;;;;;55875:40;54970:782;55487:167;2550:79548;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;2550:79548:68;;;55487:167;;:::i;:::-;55673:68;55441:213;;;;;;;;55673:68;;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;55673:68;;;;54970:782;;54772:27;;;;2550:79548;54772:27;2550:79548;54772:27;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;10120:113:70;10188:34;;2550:79548:68;10188:34:70;;2550:79548:68;;;10188:34:70;8244:95;8305:23;2550:79548:68;8305:23:70;;2550:79548:68;8305:23:70;2550:79548:68;;;;;;;;;;;;;:::i;5061:1817::-;;;;2811:38:106;2550:79548:68;9187:17:73;2806:53:55;;;2550:79548:68;5148:82;;;;5061:1817;2550:79548;;;:::i;:::-;7019:10;2811:38:106;:::i;:::-;5339:1533:68;;;5061:1817;:::o;5339:1533::-;9342:26:73;2806:53:55;5384:98:68;;-1:-1:-1;3051:52:55;;6832:27:68;9851:16:73;6832:27:68;:::i;5384:98::-;5448:19;-1:-1:-1;5448:19:68;;-1:-1:-1;5448:19:68;5148:82;2550:79548;3051:52:55;;5148:82:68;;25236:4237;;2707:73:70;;:::i;:::-;8882:4;-1:-1:-1;;;;;2550:79548:68;;;8882:4:70;:::i;:::-;25828:11:68;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;25828:11;25916:4;9851:16:73;2806:53:55;2550:79548:68;;;-1:-1:-1;;;;;2550:79548:68;;;;9702:26:73;;25916:4:68;:::i;:::-;26415:73;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;;26415:73;:::i;:::-;26534:15;28687:99;26534:15;;;;2550:79548;26558:26;:19;;;;;;2550:79548;26558:26;;:::i;:::-;26983:19;;27054:30;;;;26983:144;27054:30;;27098:19;;;;;;;26983:144;;:::i;:::-;2550:79548;27142:54;2550:79548;;2191:1:75;4860:199:74;958:1:75;7916:84:49;;4860:199:74;;27142:54:68;27138:890;;25236:4237;28687:99;;;;;;:::i;:::-;28628:158;;;;;28984:53;2550:79548;;7916:84:49;5365:197:74;958:1:75;7916:84:49;;5365:197:74;;28984:53:68;28980:487;;25236:4237;25456:23;;;;;;;25236:4237;:::o;28980:487::-;29192:264;2550:79548;;29137:28;;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;29137:28;2550:79548;;;29259:10;29192:264;;:::i;:::-;28980:487;;;;;;;27138:890;27387:28;27861:156;2550:79548;;;27387:28;;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;27387:28;27271:10;;27387:28;:::i;:::-;27723:17;27690:31;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;27690:31;27723:17;;:::i;:::-;27861:19;27936:30;;27984:19;;27861:156;;:::i;:::-;27138:890;;;;;81602:69;81646:18;;;;;;81952:144;82003:9;81999:69;;1019:819:101;82015:1:68;1019:819:101;;82015:1:68;1019:819:101;;81348:15:68;-1:-1:-1;;;;;81348:15:68;2550:79548;1019:819:101;;;82015:1:68;1019:819:101;;;;;;82015:1:68;1019:819:101;;;82015:1:68;1019:819:101;1192:349:53;551:66;2806:53:55;;1316:93:53;;1529:4;3051:52:55;;1192:349:53:o;1316:93::-;1368:30;-1:-1:-1;1368:30:53;;-1:-1:-1;1368:30:53;1547:106;1640:5;551:66;3051:52:55;1547:106:53:o;2786:145:70:-;9187:17:73;2806:53:55;2550:79548:68;2837:88:70;;2786:145::o;2837:88::-;2894:20;-1:-1:-1;2894:20:70;;-1:-1:-1;2894:20:70;3450:119;;3544:17;3450:119;3544:17;:::i;:::-;2550:79548:68;;;;;;3543:18:70;2550:79548:68;-1:-1:-1;2550:79548:68;3543:18:70;;:::i;8289:494:95:-;;;;;8422:32;;;;;:::i;:::-;-1:-1:-1;;8468:37:95;;8464:313;;8289:494;;;;;;:::o;8464:313::-;8525:25;;;8521:132;;2550:79548:68;;-1:-1:-1;;;;;2550:79548:68;;;;7477:19:95;;;7473:84;;2550:79548:68;;;7571:21:95;;;7567:87;;7664:17;:33;:17;:24;:17;;;-1:-1:-1;;;;;2550:79548:68;;;7664:11:95;2550:79548:68;;;;;;;7664:17:95;2550:79548:68;-1:-1:-1;;;;;2550:79548:68;;;;;;;;;;7664:33:95;2550:79548:68;;8004:60:95;;;;;;2550:79548:68;;;8004:60:95;;-1:-1:-1;;;;;2550:79548:68;;;8004:60:95;;;2550:79548:68;;;;;;;;;;;;;;;8238:38:95;;;;7494:1;2550:79548:68;;;;;8004:60:95;;;;;;;;;8464:313;-1:-1:-1;2550:79548:68;;;;;;;;;;;;;8238:38:95;;;;8464:313;;;;;;;8004:60;;;;;;:::i;:::-;;;:::i;:::-;;;;7567:87;7615:28;7494:1;7615:28;-1:-1:-1;;;;;2550:79548:68;;7519:27:95;2550:79548:68;;;55875:40;7473:84:95;7519:27;7494:1;7519:27;-1:-1:-1;;;;;2550:79548:68;;7519:27:95;2550:79548:68;;;55875:40;8521:132:95;-1:-1:-1;;;;;8577:61:95;;;;2550:79548:68;8577:61:95;2550:79548:68;;;;;;8577:61:95;;6402:966;;;;;-1:-1:-1;;;;;2550:79548:68;;;;6500:18:95;;;6496:80;;2550:79548:68;;;6590:16:95;;;6586:78;;6696:21;:15;;;-1:-1:-1;;;;;2550:79548:68;;;6696:9:95;2550:79548:68;;;;;;;6696:21:95;2550:79548:68;6731:20:95;;;6727:109;;2550:79548:68;;;6870:21:95;:15;;;-1:-1:-1;;;;;2550:79548:68;;;6696:9:95;2550:79548:68;;;;;;;6870:21:95;2550:79548:68;7095:19:95;:15;;;-1:-1:-1;;;;;2550:79548:68;;;6696:9:95;2550:79548:68;;;;;;;7095:19:95;2550:79548:68;;;;;;;;;7150:32:95;2550:79548:68;;7150:32:95;;;;2550:79548:68;;;;;;;;7150:32:95;;;;7307:54;;;;;2550:79548:68;;;7307:54:95;;-1:-1:-1;;;;;2550:79548:68;;;7307:54:95;;;2550:79548:68;;;;;;;;;;;;;-1:-1:-1;;2550:79548:68;;;-1:-1:-1;2550:79548:68;;;;7307:54:95;;;;;;;;;;;6402:966;:::o;7307:54::-;;;;;;:::i;6727:109::-;6774:51;6516:1;6774:51;-1:-1:-1;;;;;2550:79548:68;;6774:51:95;2550:79548:68;;;;;;;;;55875:40;6586:78:95;6629:24;6516:1;6629:24;-1:-1:-1;;;;;2550:79548:68;;7519:27:95;2550:79548:68;;;55875:40;6496:80:95;6541:24;6516:1;6541:24;-1:-1:-1;;;;;2550:79548:68;;7519:27:95;2550:79548:68;;;55875:40;9293:163:70;-1:-1:-1;;;;;2550:79548:68;;9604:15:70;2550:79548:68;9604:15:70;2550:79548:68;;1038:1:75;2550:79548:68;9604:15:70;2550:79548:68;;7916:84:49;;;9367:25:70;9363:87;;9293:163;:::o;9363:87::-;9415:24;9604:15;9415:24;;2550:79548:68;;9604:15:70;9415:24;5894:129;2550:79548:68;6394:25:70;;2550:79548:68;6375:15:70;:44;;:79;;;5894:129;5751:67;;-1:-1:-1;;;;;2550:79548:68;;-1:-1:-1;2550:79548:68;-1:-1:-1;2550:79548:68;;;-1:-1:-1;2550:79548:68;;7916:84:49;;;958:1:75;7916:84:49;;2958:30:75;;2550:79548:68;2790:99:75;;2958:30;2550:79548:68;3212:2:75;2550:79548:68;;;;;;;7592:82:70;;;5894:129;6800:73;;;;;;5894:129;:::o;6800:73::-;6846:16;-1:-1:-1;6846:16:70;-1:-1:-1;;;;;2550:79548:68;7519:27:95;2550:79548:68;;;55875:40;7592:82:70;7627:47;7648:26;;7608:66;7648:26;;6019:108:49;;;7627:47:70;:::i;:::-;2550:79548:68;;;;7608:66:70;6375:15;7608:66;;7592:82;;;;;5751:67;5794:13;-1:-1:-1;5794:13:70;;-1:-1:-1;5794:13:70;6375:79;2550:79548:68;7916:84:49;6423:15:70;2550:79548:68;7916:84:49;;;6375:79:70;;13206:573;2550:79548:68;;;;;;;;:::i;:::-;-1:-1:-1;2550:79548:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1083:103:53;;:::i;:::-;-1:-1:-1;;;;;2550:79548:68;;-1:-1:-1;2550:79548:68;13497:18:70;2550:79548:68;;;-1:-1:-1;2550:79548:68;;-1:-1:-1;2550:79548:68;;;-1:-1:-1;2550:79548:68;;;13570:14:70;2550:79548:68;;;;-1:-1:-1;2550:79548:68;;13604:11:70;2550:79548:68;;;-1:-1:-1;2550:79548:68;;;;;;;:::i;:::-;1947:24:77;;2002:26;;;:::i;:::-;1981:47;;2061:24;;;:::i;:::-;2038:47;;2127:24;;;:::i;:::-;2095:56;;2194:74;2550:79548:68;;;2194:74:77;:::i;:::-;2161:107;;2300:24;;;:::i;:::-;2278:46;;2550:79548:68;;1038:1:75;;7916:84:49;1038:1:75;7916:84:49;;;;2365:119:77;;;;13206:573:70;2365:190:77;;;;13206:573:70;-1:-1:-1;2586:13:77;;;;;;;13719:24:70;;;;;;;;;;;;;;13745:26;13719:24;13745:26;13719:24;-1:-1:-1;;;;;2550:79548:68;;;39684:18;2550:79548;;;;;;;13719:24:70;13745:26;-1:-1:-1;;;;;2550:79548:68;;;13745:20:70;2550:79548:68;;;;;;;13745:26:70;;;;:::i;:::-;1148:1:53;;:::i;2601:3:77:-;2663:15;;;;;;;;2755:33;2663:15;2720:20;2663:15;2550:79548:68;2649:33:77;2663:15;;:18;:15;:18;:15;;:18;:::i;:::-;-1:-1:-1;;;;;2550:79548:68;;;;;;;;;;2649:33:77;2550:79548:68;:::i;:::-;2720:20:77;2550:79548:68;;;;;;;;;;2720:20:77;2550:79548:68;2755:18:77;;:33;;;;;:::i;:::-;;;:::i;:::-;;2827:23;;;:::i;:::-;2802:48;:19;;;:48;:::i;:::-;2550:79548:68;2932:17:77;1237:14:44;1460:31;;2932:17:77;;;:::i;:::-;2550:79548:68;;;;3059:78:77;;3800:23;;2550:79548:68;;;3800:69:77;;;;2601:3;3977:660;;;;2601:3;;;;;;2571:13;2550:79548:68;2571:13:77;;3977:660;2550:79548:68;4236:195:77;2550:79548:68;4157:23:77;2550:79548:68;4062:56:77;2550:79548:68;;4062:56:77;:::i;:::-;4157:20;;:23;:::i;:::-;2550:79548:68;;;4236:195:77;;:::i;:::-;4454:30;;4450:173;;3977:660;;;;;;;4450:173;4586:17;4545:39;;;;:::i;:::-;4586:17;;:::i;:::-;4450:173;;;;;;3800:69;2550:79548:68;;;;;;;:::i;:::-;;;;:::i;:::-;3827:42:77;3800:69;;;;3059:78;3114:8;;;;;;;;;;2365:190;2550:79548:68;;;;-1:-1:-1;958:1:75;7916:84:49;1192:1:75;7916:84:49;2550:79548:68;2365:190:77;;;:119;2424:56;;;;;:::i;:::-;:60;;2365:119;;;;13206:573:70;2550:79548:68;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1083:103:53;;:::i;:::-;-1:-1:-1;;;;;2550:79548:68;;;;13497:18:70;2550:79548:68;;;;;;;;;;;;;;13570:14:70;2550:79548:68;;;;;;;13604:11:70;2550:79548:68;;;;;;;;;;;:::i;:::-;1947:24:77;;2002:26;;;:::i;:::-;1981:47;;2061:24;;;:::i;:::-;2038:47;;2127:24;;;:::i;:::-;2095:56;;2194:74;2550:79548:68;;;2194:74:77;:::i;:::-;2161:107;;2300:24;;;:::i;:::-;2278:46;;2550:79548:68;;1038:1:75;;7916:84:49;1038:1:75;7916:84:49;;;;2365:119:77;;;;13206:573:70;2365:190:77;;;;13206:573:70;2550:79548:68;2586:13:77;;;;;;;13719:24:70;;;;;;;;;;;;;;13745:26;13719:24;13745:26;13719:24;-1:-1:-1;;;;;2550:79548:68;;;39684:18;2550:79548;;;;;;;2601:3:77;2663:15;;;;;;;;2755:33;2663:15;2720:20;2663:15;2550:79548:68;2649:33:77;2663:15;;:18;:15;:18;:15;;:18;:::i;2755:33::-;;2827:23;;;:::i;:::-;2802:48;:19;;;:48;:::i;:::-;2550:79548:68;2932:17:77;1237:14:44;1460:31;;2932:17:77;;;:::i;:::-;2550:79548:68;;;;3059:78:77;;3800:23;;2550:79548:68;;;3800:69:77;;;;2601:3;3977:660;;;;2601:3;;;;;;2571:13;2550:79548:68;2571:13:77;;3977:660;2550:79548:68;4236:195:77;2550:79548:68;4157:23:77;2550:79548:68;4062:56:77;2550:79548:68;;4062:56:77;:::i;4236:195::-;4454:30;;4450:173;;3977:660;;;;;;;4450:173;4586:17;4545:39;;;;:::i;:::-;4586:17;;:::i;:::-;4450:173;;;;;;3800:69;2550:79548:68;;;;;;;:::i;:::-;;;;:::i;:::-;3827:42:77;3800:69;;;;3059:78;3114:8;;;;;;;;;;2365:190;2550:79548:68;;;;-1:-1:-1;958:1:75;7916:84:49;1192:1:75;7916:84:49;2550:79548:68;2365:190:77;;;:119;2424:56;;;;;:::i;:::-;:60;;2365:119;;;;1418:149:43;1500:6;1496:65;;1418:149::o;1496:65::-;1529:21;;;;;;2550:79548:68;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;2550:79548:68;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;8800:610:46;;;2550:79548:68;;;9122:17:46;2550:79548:68;;;;9122:17:46;;;:::i;:::-;9185:21;;;:::i;:::-;9222:13;9234:1;9237:10;;;;;;9381:22;;;;;8800:610;:::o;9249:3::-;9289:10;2688:41;9289:10;2550:79548:68;9289:10:46;;;:::i;:::-;2550:79548:68;2689:22:46;9327:17;;;;:::i;:::-;2550:79548:68;9346:13:46;;;;:::i;:::-;2550:79548:68;2689:22:46;;:::i;:::-;2688:41;:::i;:::-;9268:92;;;;:::i;:::-;2550:79548:68;;9222:13:46;;2550:79548:68;;-1:-1:-1;2550:79548:68;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;2550:79548:68;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;17171:657:74:-;-1:-1:-1;;;;;;17433:291:74;17171:657;;;17433:291;2550:79548:68;;;-1:-1:-1;;;;;2550:79548:68;;;;17541:11:74;;;;2550:79548:68;;;;;:::i;:::-;17695:15:74;17541:11;17570:21;;;2550:79548:68;17648:29:74;;;17695:15;;;2550:79548:68;17570:21:74;2550:79548:68;17433:291:74;;;;;;;2550:79548:68;17433:291:74;;;;;;:::i;:::-;;2550:79548:68;;17433:291:74;;;;;;;-1:-1:-1;17433:291:74;;;17171:657;2550:79548:68;;17416:406:74;;17171:657::o;17416:406::-;17765:46;-1:-1:-1;17765:46:74;17433:291;-1:-1:-1;17765:46:74;17433:291;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;6574:856:77;6819:15;;;;;2550:79548:68;7033:13:77;-1:-1:-1;7048:13:77;;;;;;6574:856;;;;;:::o;7063:3::-;38444:19:68;7120:18:77;7395:17;1237:14:44;7120:18:77;7107:35;7120:21;:18;;;;;:21;:::i;:::-;;7107:35;:::i;:::-;7082:60;:19;;;;;:60;:::i;:::-;2550:79548:68;;-1:-1:-1;2550:79548:68;;;;-1:-1:-1;2550:79548:68;;1460:31:44;7395:17:77;;;:::i;:::-;2550:79548:68;7033:13:77;;6574:856;6819:15;;;;;2550:79548:68;7033:13:77;2550:79548:68;7048:13:77;;;;;;6574:856;;;;;:::o;7063:3::-;2550:79548:68;7120:18:77;7395:17;1237:14:44;7120:18:77;7107:35;7120:21;:18;;;;;:21;:::i;7107:35::-;7082:60;:19;;;;;:60;:::i;:::-;2550:79548:68;;;;;;;;;;1460:31:44;7395:17:77;;;:::i;:::-;2550:79548:68;7033:13:77;;2550:79548:68;;;;;;;:::i;:::-;-1:-1:-1;2550:79548:68;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;2550:79548:68;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;2550:79548:68;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;58549:1;2550:79548;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;41786:8110::-;;1083:103:53;;:::i;:::-;2550:79548:68;;;;:::i;:::-;42245:15;;;;;42293:31;42245:15;;2550:79548;;;;42293:31;:::i;:::-;42434;42480:11;;;2550:79548;;;;;;:::i;:::-;;;;:::i;:::-;42480:47;;42557:21;;;;2550:79548;;42609:31;2550:79548;;42609:31;:::i;:::-;42735:29;42675:175;42735:29;42480:11;42735:29;;;42782:25;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;;-1:-1:-1;;;;;2550:79548:68;-1:-1:-1;2550:79548:68;2487:14:95;2550:79548:68;;;-1:-1:-1;2550:79548:68;;2402:112:95;;42782:25:68;42675:175;;:::i;:::-;9851:16:73;43521:65:68;9851:16:73;2806:53:55;2550:79548:68;;;-1:-1:-1;;;;;2550:79548:68;;;;9702:26:73;;2574:386:47;-1:-1:-1;2550:79548:68;;;;-1:-1:-1;2550:79548:68;;-1:-1:-1;2550:79548:68;;;;-1:-1:-1;2550:79548:68;2806:53:55;2574:386:47;;43521:65:68;43517:419;;42476:3712;46216:21;;;2550:79548;46202:35;;;46198:128;;46360:11;;;;;;;:::i;:::-;42245:15;48030:32;;;2550:79548;46425:3;2550:79548;;46403:20;;;;;46569:21;;;;;:::i;:::-;2550:79548;46632:17;;;:::i;:::-;46757:16;;;;:::i;:::-;2550:79548;46757:16;;47078:30;47137:22;47078:30;47137:19;47078:33;:30;;47012:169;47078:30;;;:33;:::i;:::-;2550:79548;47137:19;;;:22;:::i;:::-;2550:79548;47012:169;;:::i;:::-;47203:31;;;;;:::i;:::-;2550:79548;46753:737;47533:18;;:15;;;:18;:::i;:::-;2550:79548;47632:20;;:23;:20;;;:23;:::i;:::-;2550:79548;47617:38;;47613:147;;47855:12;;;48675:75;47855:12;;;;48702:47;47855:12;48010:236;47855:12;48066:180;47855:12;;2550:79548;47855:12;;;;48768:19;47855:12;;:::i;:::-;2550:79548;48144:17;;;;:::i;:::-;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;;48066:180;;;:::i;:::-;2550:79548;;;48010:236;:::i;:::-;2550:79548;48675:23;:20;2550:79548;48675:20;;;:23;:::i;:::-;2550:79548;;;48702:47;;:::i;:::-;48675:75;;:::i;48768:19::-;2550:79548;46388:13;;47613:147;47721:20;:23;:20;47682:63;47721:20;;:23;:::i;:::-;2550:79548;47682:63;2550:79548;47682:63;-1:-1:-1;;;;;2550:79548:68;;;6774:51:95;2550:79548:68;;;;;;;;46753:737;47455:16;;;;;;:::i;:::-;2550:79548;46753:737;;46403:20;;;;;;;;;;;48912:8;46403:20;;;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;;48912:8;:::i;:::-;49694:195;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;;49086:11;49111;49086;42245:15;49086:11;;2550:79548;;;;-1:-1:-1;;;;;2550:79548:68;;;;49099:10;49111:11;;:::i;:::-;49138:17;;:::i;:::-;49134:189;;46383:2429;49634:11;2550:79548;;;;-1:-1:-1;;;;;2550:79548:68;;;;;;-1:-1:-1;;;;;2550:79548:68;49634:11;;:::i;:::-;49799:25;2550:79548;;;;;-1:-1:-1;;;;;2550:79548:68;;;;;;-1:-1:-1;;;;;2550:79548:68;;;;;;;;;;:::i;49799:25::-;2550:79548;49694:195;-1:-1:-1;;;;;2550:79548:68;;;;:::i;:::-;;;46216:21;2550:79548;;;;;;;49694:195;;;:::i;:::-;;;;1148:1:53;;:::i;:::-;42139:23:68;;;41786:8110;:::o;49134:189::-;49300:11;2550:79548;;;;-1:-1:-1;;;;;2550:79548:68;;;;;;-1:-1:-1;;;;;2550:79548:68;49300:11;;:::i;:::-;49134:189;;46198:128;46260:55;2550:79548;46260:55;54772:27;2550:79548;;;;;;;;55875:40;43517:419;2550:79548;;;43634:52;2550:79548;;;;;;;;43634:52;:::i;:::-;43709:13;2550:79548;43746:3;2550:79548;;43724:20;;;;;43793:21;;43861:42;43793:21;;43861:42;43886:17;43793:21;;;:46;2550:79548;43793:21;;;;;:::i;:::-;2550:79548;43793:46;:::i;:::-;43773:66;;;;:::i;43886:17::-;2550:79548;43861:42;;;;:::i;:::-;2550:79548;43861:42;:::i;:::-;;;:::i;:::-;2550:79548;;43709:13;;43724:20;;;;;;;;;;;;43517:419;;42476:3712;2550:79548;;43971:41;2550:79548;;;;;:::i;:::-;;;;:::i;:::-;43956:56;43971:41;;44028:57;2550:79548;;44028:57;:::i;:::-;44115:21;;;2550:79548;44150:42;;44259:20;;44295:434;44353:376;44259:20;;44115:21;44226:54;2550:79548;44259:20;;;44226:54;:::i;:::-;44206:17;;2550:79548;;;;44445:29;42480:11;44445:29;;;2550:79548;44689:22;2550:79548;44615:52;44568:25;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;44568:25;2550:79548;;44615:52;:::i;:::-;2550:79548;;-1:-1:-1;;;;;2550:79548:68;;;44689:22;44353:376;;:::i;:::-;2550:79548;;;44295:434;;;:::i;:::-;2550:79548;42476:3712;;43952:2236;44765:42;2550:79548;;;;;;;;:::i;:::-;;;;:::i;:::-;44750:57;44765:42;;44823:57;2550:79548;;44823:57;:::i;:::-;45161:358;44896:42;2550:79548;45005:20;;;45075:39;44972:54;45005:20;;44972:54;:::i;:::-;44952:17;;;2550:79548;;;;45075:20;:39;:::i;:::-;2550:79548;45040:74;2550:79548;;45040:74;;:::i;:::-;2550:79548;45233:29;45315:37;42480:11;45233:29;;;2550:79548;;45315:37;;;:::i;:::-;2550:79548;45413:52;45370:25;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;45370:25;2550:79548;;45413:52;:::i;:::-;2550:79548;45483:22;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;45483:22;45161:358;;:::i;:::-;45129:390;;42476:3712;;44746:1442;2550:79548;;45555:26;2550:79548;;;;;:::i;:::-;;;;:::i;:::-;45540:41;45555:26;;45597:59;2550:79548;;45597:59;:::i;:::-;2550:79548;45819:68;:27;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;45819:68;45941:21;;;;2550:79548;46027:29;42480:11;46027:29;;;46078:15;;;;;;2550:79548;45819:292;45941:21;2550:79548;45819:292;;;;;;;2550:79548;45819:292;;45909:10;45819:292;;;;:::i;:::-;;;;;;;;;;2550:79548;;;;;;;45819:292;;;45536:652;45755:356;;;;42476:3712;;45819:292;;;;;;;;;;;2550:79548;45819:292;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;45536:652;46149:28;2550:79548;46149:28;;2550:79548;46149:28;2550:79548;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2550:79548:68;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;18837:1504:74:-;;;;;;;;2550:79548:68;;;;-1:-1:-1;;;;;2550:79548:68;;;;19361:11:74;;;;2550:79548:68;;;;;:::i;:::-;19361:11:74;19470:29;;;19513:15;;;;;2550:79548:68;;;19266:272:74;;;;;2550:79548:68;19266:272:74;;;;;;;;;:::i;:::-;;2550:79548:68;-1:-1:-1;;;;;2550:79548:68;19266:272:74;;;-1:-1:-1;19266:272:74;;;;;;;;;-1:-1:-1;;;19266:272:74;;;18837:1504;2550:79548:68;;;;19553:76:74;;18837:1504;19549:159;;7916:84:49;;;958:1:75;7916:84:49;;2550:79548:68;19806:94:74;;19915:13;;-1:-1:-1;19915:13:74;;-1:-1:-1;19915:13:74;7916:84:49;;;19910:382:74;20302:32;;;;18837:1504;:::o;19968:3::-;2550:79548:68;;19930:36:74;;;;;19991:28;;;;:::i;:::-;2550:79548:68;;20022:20:74;;;:23;:20;;;:23;:::i;:::-;2550:79548:68;-1:-1:-1;19987:295:74;;-1:-1:-1;2550:79548:68;;19968:3:74;19915:13;;19987:295;20226:23;20136:15;20176:28;20136:15;:18;;:15;;;20072:195;20136:15;;;:18;:::i;:::-;20176:28;;:::i;:::-;2550:79548:68;20226:20:74;;:23;:::i;:::-;2550:79548:68;20072:195:74;-1:-1:-1;20072:195:74;-1:-1:-1;;;;;2550:79548:68;;;6774:51:95;2550:79548:68;;;;;;;;19930:36:74;;;19549:159;19652:45;-1:-1:-1;19652:45:74;19266:272;-1:-1:-1;19652:45:74;19553:76;2550:79548:68;;;;;19573:56:74;;19553:76;;19266:272;;;;;;;;;-1:-1:-1;19266:272:74;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;15171:546:68;2550:79548;;;15171:546;2550:79548;;;;;;;;;;;;;15658:52;2550:79548;;;-1:-1:-1;2550:79548:68;;;;;;-1:-1:-1;2550:79548:68;;15553:65;2550:79548;;;;-1:-1:-1;2550:79548:68;;;;;;;-1:-1:-1;2550:79548:68;;15306:26;15380:15;15452:58;2550:79548;15380:15;;;;2550:79548;15364:57;-1:-1:-1;;;;;15397:23:68;;2550:79548;15397:23;;2550:79548;;15364:57;;:::i;:::-;2550:79548;;15468:15;15485:24;2550:79548;15485:24;;2550:79548;;15452:58;;:::i;:::-;2550:79548;;15553:65;:::i;:::-;2550:79548;;;15658:52;:::i;:::-;2550:79548;;15171:546::o;2550:79548::-;;;;:::i;:::-;;:::o;15723:700::-;;;;2550:79548;;;;;;;:::i;:::-;-1:-1:-1;2550:79548:68;;-1:-1:-1;2550:79548:68;;;;;;;;;-1:-1:-1;2550:79548:68;;;;-1:-1:-1;2550:79548:68;;;;-1:-1:-1;2550:79548:68;;;;;;;;;;;;:::i;:::-;;;16129:29;;2550:79548;16194:29;;;2550:79548;;;;16295:18;;2550:79548;16377:24;;;2550:79548;16031:385;2550:79548;;:::i;:::-;16031:385;;;:::i;:::-;2550:79548;16031:385;;2550:79548;;16031:385;;2550:79548;;16031:385;;2550:79548;;16031:385;;2550:79548;16339:10;2550:79548;16031:385;;2550:79548;;16031:385;;2550:79548;15723:700;:::o;2550:79548::-;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2550:79548:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2550:79548:68;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;9557:350:74;9678:44;9557:350;;2550:79548:68;-1:-1:-1;;;;;;2550:79548:68;;;;9678:44:74;;;;;;;2550:79548:68;9678:44:74;;2550:79548:68;9678:44:74;;;2550:79548:68;;;;;;:::i;:::-;;;;;;;9678:44:74;2550:79548:68;;9678:44:74;;;;;;;-1:-1:-1;9678:44:74;;;9557:350;2550:79548:68;;9674:227:74;;9557:350::o;9674:227::-;9855:35;-1:-1:-1;9855:35:74;9678:44;-1:-1:-1;9855:35:74;9678:44;;;;;;;;;;;;;;:::i;:::-;;;;16600:1318:68;;;;2550:79548;;;;;:::i;:::-;;;;:::i;:::-;17002:41;;17062:30;1946:22:46;465:4:50;17062:30:68;17214:38;17062:30;838:5:50;17062:30:68;;2550:79548;17143:30;17214:19;17143:49;:30;;;;2550:79548;;17143:49;;:::i;:::-;2550:79548;17214:19;;;2550:79548;;17214:38;;:::i;1946:22:46:-;838:5:50;:::i;:::-;2550:79548:68;16600:1318;:::o;17002:909::-;2688:41:46;17289:30:68;17833:60;:39;17289:30;2689:22:46;17289:30:68;;2550:79548;17368:30;17833:19;17368:50;17399:18;17368:30;;;;17399:18;;2550:79548;;;17368:50;;:::i;:::-;2550:79548;17833:19;;;2550:79548;;17833:39;;:::i;:::-;2550:79548;17833:60;:::i;:::-;2689:22:46;;:::i;2550:79548:68:-;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;8443:856:74:-;;;2550:79548:68;;8443:856:74;;-1:-1:-1;;;;;2550:79548:68;;;;;8709:136:74;;;;;;;2550:79548:68;8709:136:74;;2550:79548:68;8709:136:74;;;2550:79548:68;;;;;;:::i;:::-;;;;;;;;;;;8709:136:74;2550:79548:68;;8709:136:74;;;;;;;-1:-1:-1;;;8709:136:74;;;8443:856;2550:79548:68;;8856:93:74;;19917:10:33;9153:38:74;;9149:109;;8443:856;:::o;9149:109::-;9214:33;-1:-1:-1;9214:33:74;8709:136;-1:-1:-1;9214:33:74;8856:93;8899:39;-1:-1:-1;8899:39:74;8709:136;-1:-1:-1;8899:39:74;8709:136;;;;;;2550:79548:68;8709:136:74;2550:79548:68;8709:136:74;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;1083:103:53;-1:-1:-1;1083:103:53;;;;;;;:::i;:::-;2550:79548:68;;:::i;:::-;;;;;;;:::i;:::-;;;;:::i;:::-;19191:41;19187:325;;1083:103:53;19545:34:68;;;;;;2550:79548;;19545:34;:::i;:::-;19745:20;19735:54;19745:20;;;2550:79548;19735:38;:31;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;19735:38;2550:79548;;;19735:54;;;;;;2550:79548;19735:54;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;19735:54:68;;;1083:103:53;19708:81:68;;19823:24;;;:::i;:::-;2550:79548;;;;;:::i;:::-;;;;:::i;:::-;20227:41;;20504:29;2550:79548;20504:29;;2550:79548;;;20661:620;20726:30;;;;21207:60;:39;20726:50;20757:18;;;2550:79548;;;20726:50;;:::i;:::-;2550:79548;21207:19;;;;;2550:79548;;21207:39;;:::i;:60::-;20661:620;;;:::i;:::-;21327:30;;;;2550:79548;21296:83;;;21413:24;21207:19;21413:24;;2550:79548;21398:39;;;21394:134;;20223:2688;;2550:79548;22995:23;;2550:79548;;;;;;-1:-1:-1;;;;;2550:79548:68;;;;23020:11;;;;:::i;:::-;23056:24;;2550:79548;;;;;;-1:-1:-1;;;;;2550:79548:68;;;;23082:12;;;;:::i;:::-;2550:79548;;;;-1:-1:-1;;;;;2550:79548:68;;;-1:-1:-1;;;;;2550:79548:68;;;23379:215;;;;;:::i;:::-;23317:28;;;;;23347;2550:79548;23347:28;2550:79548;;;;;;;23056:24;23726:20;;;;;;;:39;;;;:::i;:::-;2550:79548;23726:53;;;;:::i;:::-;2550:79548;;23726:84;;;:::i;:::-;23824:19;;;;:::i;:::-;23909:18;;2550:79548;;;23941:20;;;;:40;;;;:::i;:::-;2550:79548;23941:55;;;;:::i;:::-;24010:19;;;;:::i;:::-;2550:79548;;-1:-1:-1;;;;;2550:79548:68;;;;;39684:18;2550:79548;;;;;24358:20;;;2550:79548;;24358:39;;;:::i;:::-;2550:79548;24411:29;;;;;;2550:79548;;24411:48;;;:::i;:::-;2550:79548;24310:159;;;:::i;:::-;2550:79548;;24276:31;;;2550:79548;;;;;;;;;;24276:31;2550:79548;24562:20;2550:79548;;24562:40;;;:::i;:::-;2550:79548;24616:29;;2550:79548;;24616:49;;;:::i;:::-;2550:79548;24514:161;;;:::i;:::-;2550:79548;;24479:32;;2550:79548;;;;;;;;;;24479:32;2550:79548;;;;;;23056:24;24901:27;;;2550:79548;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2550:79548:68;;;;;;;;;;;;24723:257;;2550:79548;;24723:257;1148:1:53;;;;;;:::i;21394:134:68:-;21464:49;-1:-1:-1;21464:49:68;54772:27;2550:79548;;;;;;;55875:40;20223:2688;22171:27;;;;;22120:150;22171:27;22285:61;22171:27;;2550:79548;5832:87:50;;;;;;;;22120:150:68;;;:::i;:::-;2550:79548;;;;22285:61;:::i;:::-;22537:30;22474:182;22537:49;:30;;;;2550:79548;;22537:49;;:::i;:::-;2550:79548;22604:38;:19;;;;2550:79548;;22604:38;;:::i;:::-;2550:79548;22474:182;;;:::i;:::-;22723:30;;;;2550:79548;22671:83;;22787:24;22604:19;22787:24;;2550:79548;22773:38;;;22769:132;;20223:2688;;;19735:54;;;;;;;;;;;;;;;:::i;:::-;;;;;19187:325;19347:34;;;19430:71;19347:69;2550:79548;;19388:27;;;2550:79548;19347:69;;:::i;:::-;2550:79548;;;;;19430:71;:::i;:::-;2550:79548;;19187:325;;2550:79548;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;2550:79548:68;;;;;;;;;-1:-1:-1;;;;;2550:79548:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2550:79548:68;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2550:79548:68;;;;;;;;;;;;;;;;:::i;10826:2303:74:-;;;;;;;2550:79548:68;;;;;:::i;:::-;;;;:::i;:::-;11281:41:74;;11338:25;;;;2550:79548:68;11281:177:74;;;2550:79548:68;;;;;;:::i;:::-;11653:23:74;;;;;;;2550:79548:68;;;-1:-1:-1;;;;;2550:79548:68;;;;11704:24:74;;;;2550:79548:68;;;-1:-1:-1;;;;;2550:79548:68;;;;11876:29:74;;;;;;2550:79548:68;;11876:44:74;;;:::i;:::-;2550:79548:68;11963:29:74;;11993:14;;;2550:79548:68;11963:45:74;;;:::i;:::-;2550:79548:68;12190:20:74;11993:14;12190:20;;2550:79548:68;;;-1:-1:-1;;;;;2550:79548:68;;;;12238:24:74;;;;2550:79548:68;;;:::i;:::-;11566:711:74;;;;;:::i;:::-;-1:-1:-1;;;;;2550:79548:68;11993:14:74;11566:711;;2550:79548:68;-1:-1:-1;;;;;2550:79548:68;11566:711:74;;;2550:79548:68;11704:24:74;11566:711;;2550:79548:68;11876:29:74;11566:711;;2550:79548:68;11566:711:74;;;2550:79548:68;12238:24:74;11566:711;;2550:79548:68;11566:711:74;;;2550:79548:68;11566:711:74;;;2550:79548:68;;;-1:-1:-1;;;;;2550:79548:68;11566:711:74;;;2550:79548:68;-1:-1:-1;;;;;2550:79548:68;11566:711:74;;;2550:79548:68;11566:711:74;;;2550:79548:68;;;11527:760:74;;;;;2550:79548:68;11527:760:74;;;;;;;;;:::i;:::-;;2550:79548:68;-1:-1:-1;;;;;2550:79548:68;11527:760:74;;2550:79548:68;11527:760:74;;;;;;;2550:79548:68;;;11527:760:74;;;11281:177;2550:79548:68;;;12298:188:74;;958:1:75;7916:84:49;;;2550:79548:68;12584:100:74;;2550:79548:68;;;;;;:::i;:::-;;;;:::i;:::-;12712:41:74;:103;;;11281:177;12711:227;;;;11281:177;12694:380;;13084:38;10826:2303;:::o;12694:380::-;11566:711;13038:24;2550:79548:68;12970:93:74;2550:79548:68;12970:93:74;54772:27:68;2550:79548;;;;;;;;55875:40;12711:227:74;2550:79548:68;7916:84:49;2550:79548:68;;;;;:::i;:::-;;;;:::i;:::-;12833:42:74;:104;;12711:227;12833:104;12913:24;11566:711;12913:24;;2550:79548:68;12879:58:74;;12711:227;;12712:103;12791:24;11566:711;12791:24;;2550:79548:68;12757:58:74;;12712:103;;12584:100;12647:26;;;;:::o;12298:188::-;12441:34;2550:79548:68;12441:34:74;11527:760;2550:79548:68;12441:34:74;11527:760;;;;;;;;;;;-1:-1:-1;11527:760:74;;;;;;:::i;:::-;;;;;;;11281:177;11432:25;;;;2550:79548:68;11281:177:74;;;;;;10464:315:70;-1:-1:-1;;;;;2550:79548:68;;;;;-1:-1:-1;2550:79548:68;10575:13:70;2550:79548:68;;;;-1:-1:-1;2550:79548:68;;;;;10575:46:70;;;10571:202;;10464:315;;:::o;10571:202::-;10711:51;-1:-1:-1;10711:51:70;;2550:79548:68;;;;-1:-1:-1;10711:51:70;56532:199:68;;56639:20;-1:-1:-1;56626:99:68;;56532:199;:::o;56626:99::-;-1:-1:-1;;;;;56682:32:68;;;;2550:79548;56682:32;2550:79548;;56682:32;;2550:79548;;;;;;;-1:-1:-1;2550:79548:68;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;57133:8001::-;;;;2550:79548;;;:::i;:::-;57389:25;;;;;;57944:44;;57972:15;;;:::i;:::-;2550:79548;;57944:44;;;;2550:79548;57944:44;;;;;2550:79548;;;;;;;;57944:44;;2550:79548;-1:-1:-1;;;;;2550:79548:68;;57944:44;;;;;;:48;:44;2550:79548;57944:44;;;57385:1195;57944:48;;:::i;:::-;57889:104;57385:1195;;58607:34;;-1:-1:-1;;;;;2550:79548:68;;;58607:20;2550:79548;;;;;;;58607:34;2550:79548;58919:17;;;:::i;:::-;58915:109;;2550:79548;;;;;;1616:3:44;2550:79548:68;;;;59038:54;;;;;2550:79548;;;;65053:18;2550:79548;59474:152;2550:79548;59526:51;-1:-1:-1;;;;;2550:79548:68;1237:14:44;2550:79548:68;65082:45;2550:79548;1616:3:44;2550:79548:68;;1460:31:44;;59526:51:68;:::i;:::-;59474:152;:::i;:::-;59640:34;;;;-1:-1:-1;;;;;2550:79548:68;;;58607:20;2550:79548;;;;;;;59640:34;2550:79548;65053:18;:::i;:::-;2550:79548;65082:45;:::i;59034:5982::-;60078:32;;;;2550:79548;60078:32;;;2550:79548;:::i;:::-;60246:25;;;61319:71;61320:57;61217;;;;:::i;:::-;61320:29;;;:::i;:::-;:57;:::i;:::-;61319:71;:::i;:::-;2550:79548;-1:-1:-1;;;;;2550:79548:68;;61460:24;;;;;;:::i;:::-;2550:79548;;;61527:61;;;;;2550:79548;;;61582:4;2550:79548;;;;;61527:61;;2550:79548;;;;;;-1:-1:-1;;61527:61:68;;;;;;64701:239;61527:61;;64849:77;61527:61;64849:58;-1:-1:-1;;;;;61527:61:68;;;;;65082:45;61527:61;;;64065:21;61527:61;65053:18;61527:61;64753:51;61527:61;64753:78;61527:61;1237:14:44;61527:61:68;2550:79548;61527:61;;;60242:3221;61503:85;60242:3221;;;;2550:79548;63719:54;;;;;:::i;:::-;64065:21;:::i;:::-;1460:31:44;64753:51:68;:::i;:::-;:78;:::i;:::-;64849:58;;:::i;:77::-;64701:239;;:::i;61527:61::-;;;;;;;;;;;;;;:::i;:::-;;;;60242:3221;62504:54;;62600:66;62601:52;62504:54;;;;:::i;:::-;62601:27;;;:::i;:::-;:52;:::i;62600:66::-;2550:79548;;;62919:47;;;;;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;62919:47;;2550:79548;;;62919:47;2550:79548;;;;62919:47;;;;;;63322:24;62919:47;2550:79548;62919:47;;;60242:3221;63322:24;;;;:::i;:::-;2550:79548;;;63393:55;;62919:47;63393:55;;2550:79548;;;63442:4;2550:79548;;;;;;;;;;;;;-1:-1:-1;;63393:55:68;;;;;;;65082:45;63393:55;64849:77;63393:55;64849:58;63393:55;;;-1:-1:-1;;;;;63393:55:68;;1237:14:44;63393:55:68;;;;;;;65053:18;63393:55;;64753:51;63393:55;64701:239;63393:55;;64753:78;63393:55;64065:21;63393:55;2550:79548;63393:55;;;60242:3221;63366:82;;60242:3221;;;;;63393:55;;;;;;-1:-1:-1;63393:55:68;;;;;;:::i;:::-;;;;;62919:47;;;;;;;;;;;;;;:::i;:::-;;;;58915:109;-1:-1:-1;58952:61:68;;-1:-1:-1;;;58952:61:68:o;57944:44::-;;;;;;;;;;;;;;:::i;:::-;;;;57385:1195;58510:41;;58535:15;;;:::i;:::-;2550:79548;;58510:41;;;;2550:79548;58510:41;;;;;2550:79548;;;;;;;;58510:41;;2550:79548;-1:-1:-1;;;;;2550:79548:68;;58510:41;;;;;;:45;:41;2550:79548;58510:41;;;57385:1195;58510:45;;:::i;:::-;57385:1195;;;58510:41;;;;;;;;;;;;;;:::i;:::-;;;;65540:6987;;;2550:79548;;;:::i;:::-;65798:25;;;;;;;66349:43;;66376:15;;;:::i;:::-;2550:79548;;66349:43;;;;2550:79548;66349:43;;;;;2550:79548;;;;;;;;66349:43;;2550:79548;-1:-1:-1;;;;;2550:79548:68;;66349:43;;;;;;:47;:43;2550:79548;66349:43;;;:47;;:::i;:::-;66294:103;65794:1205;;67026:34;;-1:-1:-1;;;;;2550:79548:68;;;58607:20;2550:79548;;;;;;;67026:34;2550:79548;67336:17;;;:::i;:::-;67332:109;;1237:14:44;;;;;;;;;;1460:31;;;;67455:53:68;;;;;2550:79548;;;;-1:-1:-1;;;;;67880:149:68;2550:79548;;72500:19;2550:79548;67963:52;2550:79548;72419:40;2550:79548;1616:3:44;2550:79548:68;67963:52;:::i;:::-;1460:31:44;;2550:79548:68;67880:149;:::i;:::-;68043:34;;;;-1:-1:-1;;;;;2550:79548:68;;;58607:20;2550:79548;;;;;;;68043:34;2550:79548;67451:4958;2550:79548;72419:40;:::i;:::-;72500:19;:::i;67451:4958::-;68482:32;;;;;;2550:79548;68482:32;;2550:79548;:::i;:::-;68650:25;;;69684:65;69685:51;69588:54;;;;:::i;69684:65::-;2550:79548;;;69794:72;;;;;2550:79548;;;69845:4;2550:79548;;;;;;;;;;;;69794:72;2550:79548;;;-1:-1:-1;;;;;;2550:79548:68;;69794:72;;;;;;72094:239;69794:72;;72243:76;69794:72;72243:52;69794:72;72146:79;69794:72;;-1:-1:-1;;;;;72500:19:68;69794:72;;71423:21;69794:72;;72419:40;69794:72;;;;;;72146:57;69794:72;2550:79548;69794:72;;;68646:2484;69767:99;68646:2484;;;;2550:79548;71423:21;;:::i;:::-;72146:57;:::i;:79::-;2550:79548;1616:3:44;2550:79548:68;72243:52;:::i;72094:239::-;72347:34;;;;-1:-1:-1;;;;;2550:79548:68;;;58607:20;2550:79548;;;;;;;72347:34;2550:79548;67451:4958;;69794:72;;;;;;;;;;;;;;:::i;:::-;;;;68646:2484;70924:72;70925:58;70822:57;;;;:::i;70924:72::-;2550:79548;;;71038:77;;;;;2550:79548;;;71094:4;2550:79548;;;;;;;;;;;71038:77;2550:79548;;;-1:-1:-1;;;;;;2550:79548:68;;71038:77;;;;;;;72094:239;71038:77;;72243:76;-1:-1:-1;;;;;72243:52:68;71038:77;72146:79;71038:77;;;72500:19;71038:77;71423:21;71038:77;;72419:40;71038:77;;;;;;;;72146:57;71038:77;2550:79548;71038:77;;;68646:2484;71014:101;68646:2484;;;;;71038:77;;;;;;;;;;;;;;:::i;:::-;;;;65794:1205;66925:45;;66954:15;;;:::i;:::-;2550:79548;;66925:45;;;;2550:79548;66925:45;;;;;2550:79548;;;;;;;;66925:45;;2550:79548;-1:-1:-1;;;;;2550:79548:68;;66925:45;;;;;;:49;:45;2550:79548;66925:45;;;:49;;:::i;:::-;65794:1205;;;6697:118:47;3831:53:55;;2550:79548:68;6806:1:47;2550:79548:68;;;;;;;3051:52:55;6697:118:47:o;2966:315::-;;-1:-1:-1;2550:79548:68;;;;-1:-1:-1;2550:79548:68;;-1:-1:-1;2550:79548:68;;;25916:4;2550:79548;-1:-1:-1;2550:79548:68;3051:52:55;2966:315:47:o;6714:614:46:-;;;2550:79548:68;;;7038:17:46;2550:79548:68;;;;7038:17:46;;;:::i;:::-;7101:21;;;:::i;:::-;7138:13;7150:1;7153:10;;;;;;7299:22;;;;;6714:614;:::o;7165:3::-;7205:10;465:4:50;838:5;7205:10:46;2550:79548:68;7205:10:46;;;:::i;:::-;2550:79548:68;1946:22:46;7245:17;;;;:::i;:::-;2550:79548:68;7264:13:46;;;;:::i;838:5:50:-;2550:79548:68;7184:94:46;;;;:::i;:::-;2550:79548:68;;7138:13:46;;2550:79548:68;;-1:-1:-1;2550:79548:68;;;:::o;:::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;2550:79548:68;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;13587:644:74:-;;-1:-1:-1;;;;;;13842:288:74;13587:644;;;;13842:288;2550:79548:68;;;-1:-1:-1;;;;;2550:79548:68;;;;13947:11:74;;;;2550:79548:68;;;;;:::i;:::-;14101:15:74;13947:11;14014:22;;;2550:79548:68;14054:29:74;;;14101:15;;;2550:79548:68;;;13842:288:74;;;;;;;2550:79548:68;13842:288:74;;;;;;:::i;:::-;;2550:79548:68;;13842:288:74;;;;;;;-1:-1:-1;13842:288:74;;;13587:644;2550:79548:68;;13825:400:74;;13587:644::o;13825:400::-;14171:43;-1:-1:-1;14171:43:74;13842:288;-1:-1:-1;14171:43:74;13842:288;;;;;;;;;;;;;;:::i;:::-;;;;2550:79548:68;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;2550:79548:68;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;30167:6883::-;;;1083:103:53;;:::i;:::-;2550:79548:68;;;:::i;:::-;30618:15;;;;30665:31;30618:15;;2550:79548;;;;30665:31;:::i;:::-;30852:11;;;2550:79548;;;;;;:::i;:::-;;;;:::i;:::-;30852:44;;30927:22;2550:79548;30927:22;;2550:79548;31084:31;2550:79548;;31084:31;:::i;:::-;31209:29;31150:175;31209:29;30852:11;31209:29;;;31256:25;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;31256:25;31150:175;;:::i;:::-;30848:2980;;2550:79548;33917:22;;2550:79548;33902:37;;;33898:133;;34065:12;;;;;;;:::i;:::-;30618:15;35721:32;;;2550:79548;34131:3;2550:79548;;;34109:20;;;;;34150:19;34272:20;34150:19;34272:20;:::i;:::-;2550:79548;34334:16;;;:::i;:::-;34458:15;;;;:::i;:::-;2550:79548;34458:15;;34718:166;34781:30;;34840:22;34781:30;34840:19;34781:33;:30;;;;;:33;:::i;34840:22::-;2550:79548;34718:166;;:::i;:::-;34907:29;;;;;:::i;:::-;2550:79548;34454:735;35232:18;;:15;;;:18;:::i;:::-;35331:19;;;:22;:19;;;:22;:::i;:::-;2550:79548;35317:36;;35313:142;;35547:11;;;36313:72;35547:11;36313:37;35547:11;;;;35701:236;35547:11;35757:180;35547:11;;2550:79548;35547:11;;;;36403:19;35547:11;;:::i;35701:236::-;2550:79548;36313:23;:20;2550:79548;36313:20;;;:23;:::i;:::-;2550:79548;36313:37;:::i;:::-;2550:79548;;36313:72;;:::i;36403:19::-;2550:79548;34094:13;;35313:142;35417:19;:22;:19;35380:60;35417:19;;:22;:::i;:::-;2550:79548;35380:60;2550:79548;35380:60;-1:-1:-1;;;;;2550:79548:68;;;6774:51:95;2550:79548:68;;;;;;;;34454:735;35155:15;;;;;:::i;:::-;2550:79548;34454:735;;34109:20;;;;;;;;;;;;36547:8;34109:20;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;36547:8;36853:190;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;;36781:9;36792:12;36781:9;30618:15;36781:9;;2550:79548;;;;-1:-1:-1;;;;;2550:79548:68;;;;36792:12;;:::i;:::-;36954:25;2550:79548;;;;;-1:-1:-1;;;;;2550:79548:68;;;;;;;;;;:::i;36954:25::-;2550:79548;36853:190;-1:-1:-1;;;;;2550:79548:68;;;;:::i;:::-;;;35331:19;2550:79548;;;;;;;36853:190;;;:::i;33898:133::-;33962:58;2550:79548;33962:58;54772:27;2550:79548;;;;;;;55875:40;30848:2980;31361:25;2550:79548;;;;;:::i;:::-;;;;:::i;:::-;31346:40;31361:25;;31402:46;2550:79548;;31402:46;:::i;:::-;31482:42;2550:79548;;31482:42;:::i;:::-;31538:16;2550:79548;31568:40;31342:2486;30848:2980;;31342:2486;2550:79548;31644:27;2550:79548;;;;;:::i;:::-;;;;:::i;:::-;31629:42;31644:27;;31687:57;2550:79548;;31687:57;:::i;:::-;32085:294;31761:40;32024:12;32003:19;;;;;32024:12;:::i;:::-;30852:11;32145:29;;;2550:79548;32230:25;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;32230:25;32273:52;2550:79548;;32273:52;:::i;:::-;2550:79548;32343:22;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;32343:22;32085:294;;:::i;:::-;32052:327;;31625:2203;30848:2980;;31625:2203;2550:79548;;32415:39;2550:79548;;;;;:::i;:::-;;;;:::i;:::-;32400:54;32415:39;;2550:79548;;;32470:57;2550:79548;;32470:57;:::i;:::-;2550:79548;32559:22;;2550:79548;32615:54;;;;:::i;:::-;32738:432;32795:375;32595:17;;;2550:79548;;;;32684:40;;32885:29;;30852:11;32885:29;;;2550:79548;33130:22;2550:79548;33056:52;33009:25;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;33130:22;32795:375;;:::i;:::-;2550:79548;;;32738:432;;;:::i;:::-;2550:79548;30848:2980;;32396:1432;2550:79548;33206:23;2550:79548;;;;;:::i;:::-;;;;:::i;:::-;33191:38;33206:23;;33245:56;2550:79548;;33245:56;:::i;:::-;2550:79548;33465:65;:27;2550:79548;;;-1:-1:-1;;;;;2550:79548:68;;;33465:65;2550:79548;33626:22;;2550:79548;33670:29;30852:11;33670:29;;;33721:15;;;;;;2550:79548;33465:289;2550:79548;;33465:289;;;;;;;2550:79548;33465:289;;33552:10;33206:23;33465:289;;;:::i;:::-;;;;;;;;;;2550:79548;;;;;;;33465:289;;;33187:641;33401:353;;;;33187:641;30848:2980;;33465:289;;;;;;;;;;;2550:79548;33465:289;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;33187:641;33792:25;2550:79548;33792:25;33206:23;2550:79548;33792:25;2550:79548;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2550:79548:68;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;15237:1479:74:-;;;;;;;;2550:79548:68;;;;-1:-1:-1;;;;;2550:79548:68;;;;15750:11:74;;;2550:79548:68;;;;;:::i;:::-;15750:11:74;15858:29;;;15901:15;;;;2550:79548:68;;;;;;15658:268:74;;;;;2550:79548:68;15658:268:74;;;;;;;;;:::i;:::-;;2550:79548:68;-1:-1:-1;;;;;2550:79548:68;15658:268:74;;;-1:-1:-1;15658:268:74;;;;;;;;;-1:-1:-1;;;15658:268:74;;;15237:1479;2550:79548:68;;;;15941:74:74;;15237:1479;15937:154;;7916:84:49;;;958:1:75;7916:84:49;;2550:79548:68;16189:93:74;;16297:13;;;;;;;-1:-1:-1;16292:376:74;7916:84:49;;;16292:376:74;16678:31;;;;;15237:1479;:::o;16349:3::-;2550:79548:68;;16312:35:74;;;;;16372:27;;;;:::i;:::-;2550:79548:68;16402:19:74;;;;:22;:19;;;:22;:::i;:::-;2550:79548:68;-1:-1:-1;16368:290:74;;-1:-1:-1;2550:79548:68;;16349:3:74;16297:13;;16368:290;16514:15;;16603:22;16514:15;16554:27;16514:15;:18;;16451:192;16514:15;;;;;:18;:::i;16603:22::-;2550:79548:68;16451:192:74;-1:-1:-1;16451:192:74;-1:-1:-1;;;;;2550:79548:68;;;6774:51:95;2550:79548:68;;;;;;;;16312:35:74;;;15937:154;16038:42;-1:-1:-1;16038:42:74;15658:268;-1:-1:-1;16038:42:74;15941:74;2550:79548:68;;;;;15961:54:74;;15941:74;;15658:268;;;;;;;;;-1:-1:-1;15658:268:74;;;;;;:::i;:::-;;;;;;3804:110:70;3891:15;;3804:110;3891:15;:::i;:::-;;;:::i;15788:287::-;;2550:79548:68;15932:3:70;2550:79548:68;;15913:17:70;;;;;-1:-1:-1;;;;;15955:9:70;;;;;:::i;:::-;2550:79548:68;;;;;15955:18:70;15951:65;;2550:79548:68;;15898:13:70;;15913:17;-1:-1:-1;;;;;15913:17:70;16043:25;2550:79548:68;16043:25:70;2550:79548:68;16043:25:70;2550:79548:68;;;16043:25:70;34375:314:119;34568:16;34552:33;;34548:105;;34375:314;:::o;34548:105::-;34608:34;;;;2550:79548:68;;34608:34:119;;4346:904:70;4485:10;;4481:23;;-1:-1:-1;;;;;9520:18:73;2550:79548:68;;;4494:1:70;2550:79548:68;;;;4708:15:70;2550:79548:68;4494:1:70;2550:79548:68;2806:53:55;4708:15:70;;;:::i;:::-;4738:9;;;;9342:26:73;;3831:53:55;;2550:79548:68;-1:-1:-1;;2550:79548:68;;;;;;;3051:52:55;4734:423:70;4494:1;2550:79548:68;;;;4494:1:70;2550:79548:68;3051:52:55;4346:904:70:o;4734:423::-;;4940:217;5113:31;9342:26:73;5113:31:70;:::i;:::-;4734:423;;4481:23;4497:7;;:::o;2657:309:95:-;-1:-1:-1;;;;;2550:79548:68;2657:309:95;2550:79548:68;;;;;;2822:16:95;2550:79548:68;;2854:24:95;;;;-1:-1:-1;;2854:24:95;:::o;2818:142::-;2916:33;2550:79548:68;2916:24:95;2550:79548:68;;;;2916:11:95;2550:79548:68;;;;;;-1:-1:-1;;;;;2550:79548:68;;;;;;;;;;2916:33:95;2550:79548:68;2909:40:95;:::o;2550:79548:68:-;;;;;;;;;;;;;;;;;;-1:-1:-1;2550:79548:68;;-1:-1:-1;2550:79548:68;;-1:-1:-1;2550:79548:68;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;2550:79548:68;;;;;;;;;;-1:-1:-1;2550:79548:68;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;2550:79548:68;;;;:::i;:::-;;;-1:-1:-1;2550:79548:68;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;2550:79548:68;;;;;;;;;;;;;;;;:::o;4659:1499:77:-;4963:20;;;;;2550:79548:68;5006:13:77;-1:-1:-1;5021:13:77;;;;;;4659:1499;;;;;;:::o;5036:3::-;5070:15;:18;;2550:79548:68;5070:15:77;;;;;:18;:::i;:::-;5188:30;5127:20;;;2550:79548:68;;;;;;;;;;5127:20:77;2550:79548:68;1237:14:44;1460:31;1371:127;;5188:30:77;5423:23;:20;;;:23;:::i;:::-;2550:79548:68;5404:42:77;;5400:565;;5036:3;6054:20;;6002:139;6054:23;:20;;;:23;:::i;:::-;2550:79548:68;6095:32:77;:29;;;;;:32;:::i;:::-;2550:79548:68;6002:139:77;;:::i;:::-;5979:20;;;2550:79548:68;;;;;;;;;;5979:20:77;2550:79548:68;;5006:13:77;;5400:565;5777:173;5736:38;5680;5841:91;5889:42;5680:38;;;2550:79548:68;-1:-1:-1;;;;;2550:79548:68;;;;;;;;;;5680:38:77;2550:79548:68;5908:20:77;:23;:20;;;:23;:::i;:::-;2550:79548:68;5889:42:77;;:::i;:::-;2550:79548:68;6095:29:77;2550:79548:68;5841:91:77;:::i;:::-;5777:173;;:::i;:::-;5736:38;;2550:79548:68;-1:-1:-1;;;;;2550:79548:68;;;;;;;;;;5736:38:77;2550:79548:68;5400:565:77;;;;1573:170:43;1666:6;;;;;1573:170;;1666:16;;1573:170;1662:75;;;;1573:170::o;1666:16::-;1676:6;;;-1:-1:-1;1666:16:43;;;;2550:79548:68;;465:4:50;2550:79548:68;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;7436:424:77:-;2550:79548:68;;;;;:::i;:::-;;;;:::i;:::-;7589:31:77;;;7636:21;;465:4:50;7585:269:77;7436:424::o;7585:269::-;2550:79548:68;;7691:19:77;2550:79548:68;;:::i;:::-;7678:32:77;7691:19;;7733:22;:30;2550:79548:68;7733:22:77;:32;:22;;2550:79548:68;-1:-1:-1;;;;;2550:79548:68;;;7733:30:77;2550:79548:68;;7733:32:77;;;;2550:79548:68;7733:32:77;;;;;;;;;2550:79548:68;7733:32:77;;;7726:39;7674:180;7436:424::o;7733:32::-;;;;:22;:32;:22;:32;;;;;;;:::i;7674:180::-;7803:40;2550:79548:68;7803:40:77;;2550:79548:68;7803:40:77;7866:704;;;8372:29;465:4:50;838:5;8372:191:77;7866:704;8058:20;:48;:20;;;;;:48;:::i;:::-;2550:79548:68;1946:22:46;8466:42:77;:30;;;;;:42;:::i;:::-;2550:79548:68;8522:31:77;:19;;;;;:31;:::i;838:5:50:-;2550:79548:68;8372:29:77;;;:191;:::i;7866:704::-;;;8372:29;2688:41:46;8372:191:77;7866:704;8058:20;:48;:20;;;;;:48;:::i;:::-;2550:79548:68;2689:22:46;8466:42:77;:30;;;;;:42;:::i;:::-;2550:79548:68;8522:31:77;:19;;;;;:31;:::i;2688:41:46:-;8372:29:77;;;:191;:::i;5369:233:76:-;958:1:75;7916:84:49;;;2550:79548:68;5461:135:76;;5369:233::o;5461:135::-;5535:50;-1:-1:-1;5535:50:76;958:1:75;-1:-1:-1;5535:50:76;3666:227;958:1:75;7916:84:49;;;3756:131:76;;3666:227::o;3756:131::-;3828:48;-1:-1:-1;3828:48:76;958:1:75;-1:-1:-1;3828:48:76;1835:554:43;2550:79548:68;;1994:19:43;;2029:13;2041:1;2044:10;;;;;;2286:20;;;;;2282:73;;1835:554;:::o;2282:73::-;2329:15;2041:1;2329:15;;2041:1;2329:15;2056:3;2079:15;;;;:::i;:::-;2550:79548:68;2075:187:43;;2056:3;2550:79548:68;;2029:13:43;;2075:187;2123:20;;;2119:97;;2233:14;2075:187;;2119:97;2174:23;2041:1;2174:23;;2041:1;2174:23;6731:255:76;6019:108:49;6731:255:76;958:1:75;6019:108:49;;19669:4:33;2550:79548:68;;;;;;;;;;;;;;;6731:255:76;:::o;2550:79548:68:-;;;;;16942:1:59;2550:79548:68;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;17017:1:59;2550:79548:68;;;;;;;;;:::i;16306:3888:59:-;;;;;;2550:79548:68;;16842:24:59;;;;:::i;:::-;16930:13;16942:1;16945:13;;;;;;17136:26;:43;:26;;;;;:::i;:43::-;17107:72;;;;:::i;:::-;2550:79548:68;;;;;17730:57:59;;;;;;;;;;;;;:::i;:::-;;2550:79548:68;-1:-1:-1;;;;;2550:79548:68;;17730:57:59;;;;;;;16942:1;17730:57;;;16925:104;2550:79548:68;;;18181:53:59;;;;17730:57;18181:53;;;;17730:57;18181:53;;;:::i;:::-;;2550:79548:68;-1:-1:-1;;;;;2550:79548:68;;18181:53:59;;;;;;;1744:19:50;18478:81:59;18181:53;18533:26;18478:52;18765:67;18181:53;18499:30;18181:53;1744:19:50;19124:55:59;18181:53;;17730:57;18181:53;;;16942:1;18181:53;;;16925:104;1744:19:50;;:::i;:::-;18313:14:59;;;;;:::i;:::-;18499:30;:::i;:::-;2550:79548:68;18478:52:59;;:::i;:::-;18533:26;;;:::i;18478:81::-;465:4:50;;5832:87;;;;;;1744:19;;:::i;18765:67:59:-;18921:26;:32;:26;;;;;:::i;:32::-;18892:61;;;;:::i;:::-;2550:79548:68;-1:-1:-1;;;;;2550:79548:68;;19124:55:59;;;;;;;;17730:57;19124:55;;;:::i;:::-;;2550:79548:68;;19124:55:59;;;;;;;20104:83;19124:55;20125:43;19124:55;16942:1;19124:55;;;16925:104;19282:24;;19316:35;19282:24;;:::i;:::-;19316:35;;;:::i;:::-;2550:79548:68;20125:43:59;;:::i;:::-;20104:83;;:::i;:::-;16306:3888;:::o;19124:55::-;19316:35;19124:55;;;;19282:24;19124:55;17730:57;19124:55;17730:57;19124:55;;;;;;;:::i;:::-;;;;;;18181:53;17730:57;18181:53;;;;17730:57;18181:53;;;;;;;:::i;:::-;;;;17730:57;;;;;;;;;;;;;;;:::i;:::-;;;;;16960:3;16996:18;:22;:18;17017:1;16996:18;;;:::i;:::-;2550:79548:68;16996:22:59;:::i;:::-;16979:39;;;;:::i;:::-;2550:79548:68;;16930:13:59;;2550:79548:68;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::o;21079:2229:59:-;;;;2550:79548:68;;;;;;;;22208:67:59;;-1:-1:-1;;;;;1744:19:50;;;;;:::i;:::-;21662:14:59;;;;:::i;:::-;2550:79548:68;;22208:67:59;;;;;;2550:79548:68;22208:67:59;;;;;;;;:::i;:::-;;2550:79548:68;;22208:67:59;;;;;;23286:15;22208:67;22859:32;22208:67;22973:38;22208:67;23114:37;22208:67;23161:35;22208:67;-1:-1:-1;22208:67:59;;;21079:2229;22367:30;:43;:30;;22648:63;22367:30;;;;:::i;:43::-;22667:30;;;;;:::i;:::-;2550:79548:68;22648:63:59;;:::i;22973:38::-;2550:79548:68;;;;23114:37:59;:::i;:::-;23161:35;;;:::i;:::-;2550:79548:68;23286:15:59;:::i;22208:67::-;22648:63;22208:67;;22367:30;22208:67;;22367:43;22208:67;;;;;;;;;;;:::i;:::-;;;;;;;2550:79548:68;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;4619:1444:59:-;;;;5749:30;2550:79548:68;;5749:30:59;:::i;:::-;5794:13;5806:1;5830:3;2550:79548:68;;5809:19:59;;;;;6003:25;:11;;;;;:::i;:::-;2550:79548:68;6003:25:59;:::i;:::-;2550:79548:68;;;;;;;;;5986:60:59;;;;:::i;:::-;2550:79548:68;;5794:13:59;;5809:19;;;;;;4619:1444::o;887:427:50:-;;1068:5;887:427;1068:5;:::i;:::-;1186:122;;-1:-1:-1;;1186:122:50;;;;;;;;887:427;:::o;79658:166:68:-;79740:16;79736:82;;79658:166;:::o;79736:82::-;79795:11;;;:::i;3280:418:46:-;;3665:25;3280:418;3665:25;:::i;:::-;465:4:50;;2550:79548:68;;;;;;;;;;;;;;;;;;;;3280:418:46;:::o;50496:2352:68:-;;;;;;2550:79548;50740:33;2550:79548;50871:30;;50867:1975;;50496:2352;;;;;:::o;50867:1975::-;51292:30;;;51347:26;51292:37;:30;;51225:162;51292:30;;;;;:37;:::i;:::-;2550:79548;51347:19;;;;;:26;:::i;51225:162::-;2550:79548;;1192:1:75;7916:84:49;958:1:75;7916:84:49;;2550:79548:68;51578:1254;;50867:1975;;;;;51578:1254;6019:108:49;;;;;2550:79548:68;6019:108:49;;19669:4:33;2550:79548:68;;;;;;;;;;;;;;;838:5:50;465:4;838:5;;;:::i;:::-;2550:79548:68;52238:49;;;;52234:137;;52592:26;52643;52679:138;52592:33;52643;52592:26;;;-1:-1:-1;;;;;2550:79548:68;;;13745:20:70;2550:79548:68;;;;;;;52592:33;2550:79548;52735:64;1460:31:44;1237:14;1460:31;;52735:64:68;:::i;:::-;52679:138;;:::i;:::-;52643:26;-1:-1:-1;;;;;2550:79548:68;;;13745:20:70;2550:79548:68;;;;;;;52643:33;2550:79548;51578:1254;;;;;52234:137;52318:34;2550:79548;52318:34;;2550:79548;52318:34;11202:521:70;-1:-1:-1;;;;;11202:521:70;;;;2550:79548:68;-1:-1:-1;2550:79548:68;;11379:18:70;2550:79548:68;;;;-1:-1:-1;2550:79548:68;-1:-1:-1;11467:3:70;11438:20;;;;2550:79548:68;;11434:31:70;;;;;11619:23;11567:139;11619:23;;2550:79548:68;11619:23:70;;:::i;:::-;2550:79548:68;11660:32:70;:29;;;;;:32;:::i;11567:139::-;2550:79548:68;-1:-1:-1;2550:79548:68;;;;;-1:-1:-1;2550:79548:68;;;11419:13:70;;11434:31;;;;;;;;11202:521::o;17101:159::-;859:9:41;:23;17174:79:70;;;17101:159;:::o;17174:79::-;2550:79548:68;7916:84:49;17211:15:70;2550:79548:68;7916:84:49;2550:79548:68;17101:159:70;:::o;3162:428:95:-;;859:9:41;3337:114:95;;-1:-1:-1;;;;;3545:28:95;2550:79548:68;;3378:5:95;2550:79548:68;3545:9:95;2550:79548:68;;;3378:5:95;2550:79548:68;;-1:-1:-1;;;;;2550:79548:68;;;;;;;;;;3545:28:95;2550:79548:68;;;;;;;;;;;3162:428:95:o;3337:114::-;3406:34;3378:5;3406:34;;3378:5;3406:34;5216:1180;;;-1:-1:-1;;;;;2550:79548:68;;;5298:18:95;;;5294:80;;5409:21;:15;;;-1:-1:-1;;;;;2550:79548:68;;;6696:9:95;2550:79548:68;;;;;;;5409:21:95;2550:79548:68;5444:23:95;;;5440:115;;2550:79548:68;;;5589:21:95;:15;;;-1:-1:-1;;;;;2550:79548:68;;;6696:9:95;2550:79548:68;;;;;;;5589:21:95;2550:79548:68;5681:29:95;:20;;;-1:-1:-1;;;;;2550:79548:68;;;5681:14:95;2550:79548:68;;;;;;;5681:20:95;2550:79548:68;5681:29:95;:::i;:::-;5751:14;;;:::i;:::-;5777:20;;-1:-1:-1;;;;;2550:79548:68;;;5681:14:95;2550:79548:68;;;;;;;5777:20:95;2550:79548:68;;6113:62:95;;;;;;2550:79548:68;;;6113:62:95;;-1:-1:-1;;;;;2550:79548:68;;;6113:62:95;;;2550:79548:68;5314:1:95;2550:79548:68;;;;;;;;;;;;5314:1:95;6349:40;;;;5314:1;2550:79548:68;;;;;6113:62:95;2550:79548:68;6349:40:95;;;;5216:1180::o;5440:115::-;5490:54;5314:1;5490:54;-1:-1:-1;;;;;2550:79548:68;;6774:51:95;2550:79548:68;;;;;;;;;55875:40;9930:461:46;465:4:50;2550:79548:68;;;;10347:19:46;;;;9930:461;:::o;10347:37::-;10383:1;2550:79548:68;;;;;;;9930:461:46;:::o;80579:177:68:-;80674:21;-1:-1:-1;80656:94:68;;80579:177::o;80656:94::-;80718:21;;;;;;1822:864:50;;2004:6;;2000:58;;465:4;2550:79548:68;;;;;;;;;;;;;;;2560:120:50;;-1:-1:-1;;2560:120:50;;;;;;;;1822:864;:::o;2000:58::-;2033:14;2009:1;2033:14;;2009:1;2033:14;1822:864;2004:6;;2000:58;;2560:120;2153:5;;;;:::i;:::-;2560:120;-1:-1:-1;;2560:120:50;;;;;;;;1822:864;:::o;4238:414:46:-;;1744:19:50;4238:414:46;4619:25;4238:414;4619:25;:::i;:::-;1744:19:50;;:::i;2311:281:44:-;;1237:14;2426:25;;;:58;;;;;2311:281;2422:113;;;3080:3;2550:79548:68;;;;;;;;;2311:281:44;:::o;2422:113::-;2507:17;;;;;;2426:58;2455:29;;;;2426:58;;;3791:897:38;;3937:44;2550:79548:68;1616:3:44;2550:79548:68;3937:44:38;:::i;:::-;3992:37;1237:14:44;4028:1:38;1460:31:44;;4043:33:38;4039:476;;3791:897;4633:43;;4680:1;4633:43;;;;:::i;:::-;2550:79548:68;3791:897:38;:::o;4039:476::-;-1:-1:-1;;;;;2550:79548:68;;;;4434:59:38;2550:79548:68;;;4434:59:38;;;;;2550:79548:68;4434:59:38;;;;;2550:79548:68;;4434:59:38;;;;;;;:70;4633:43;4434:59;4680:1;4434:59;4028:1;4434:59;;;4039:476;4434:70;;:::i;:::-;4039:476;;;;;;4434:59;;;;;;;;;;;;;;:::i;:::-;;;;17166:193:119;17253:1;17245:9;;17241:81;;17166:193;:::o;17241:81::-;17277:34;17253:1;17277:34;;2550:79548:68;;17253:1:119;17277:34;3296:380:105;2550:79548:68;;;3411:47:105;;;;;;-1:-1:-1;;;;;2550:79548:68;;3411:47:105;;;2550:79548:68;;;;;;;;;;3411:47:105;2550:79548:68;;;;3411:47:105;;;;-1:-1:-1;;3411:47:105;;;;;;;;:::i;:::-;2550:79548:68;;-1:-1:-1;;;;;2550:79548:68;;5615:25:105;;;;;;;;;;;:::i;:::-;5657:69;;;3296:380;5657:103;;;;3296:380;3473:45;;3469:201;;3296:380;;;;;:::o;3469:201::-;2550:79548:68;;3411:47:105;3561:43;;;;;;-1:-1:-1;;;;;2550:79548:68;3411:47:105;3561:43;;2550:79548:68;-1:-1:-1;2550:79548:68;;;;;3561:43:105;;;;;3646:12;;3561:43;;;;2550:79548:68;3561:43:105;:::i;:::-;;;:::i;3646:12::-;3469:201;;;;;;;5657:103;5730:26;;;:30;;5657:103;;;:69;2550:79548:68;;;;-1:-1:-1;5669:22:105;;;:56;;;;5657:69;;;;;;;5669:56;5695:30;;;3411:47;5695:30;;;;;;;;:::i;:::-;5669:56;;;;3296:380;2550:79548:68;;;3411:47:105;;;;;;-1:-1:-1;;;;;2550:79548:68;;3411:47:105;;;2550:79548:68;;;;;;;;;;;;;;;3411:47:105;2550:79548:68;1644:900:38;;1796:40;1237:14:44;1460:31;;1796:40:38;:::i;:::-;1847:37;-1:-1:-1;2550:79548:68;1616:3:44;2550:79548:68;1898:37:38;1894:474;;2486:46;;4680:1;2486:46;;;;:::i;1894:474::-;-1:-1:-1;;;;;2550:79548:68;;;;2287:59:38;2550:79548:68;;;2287:59:38;;;;;2550:79548:68;2287:59:38;;;;;2550:79548:68;;2287:59:38;;;;;;;:70;2486:46;2287:59;4680:1;2287:59;-1:-1:-1;2287:59:38;;;:70;;:::i;73284:870:68:-;;;;-1:-1:-1;;;;;2550:79548:68;;;-1:-1:-1;2550:79548:68;73701:11;2550:79548;;;-1:-1:-1;2550:79548:68;;;;;;;;;;;;-1:-1:-1;2550:79548:68;73701:11;2550:79548;;;-1:-1:-1;2550:79548:68;;;;;;;;;;74118:28;;;:::i;74889:878::-;;;;-1:-1:-1;;;;;2550:79548:68;;;-1:-1:-1;2550:79548:68;75306:11;2550:79548;;;-1:-1:-1;2550:79548:68;;;;;;;;;;;;-1:-1:-1;2550:79548:68;75306:11;2550:79548;;;-1:-1:-1;2550:79548:68;;;;;;;;;;75731:28;;;:::i;2550:79548::-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;2550:79548:68;;;;:::o;:::-;;;:::o;3180:392:106:-;5172:5:68;3180:392:106;3510:55;3180:392;3462:31;;;;;;;;;;;:::i;:::-;3510:55;;:::i;4522:224:76:-;958:1:75;7916:84:49;1414:1:75;7916:84:49;2550:79548:68;4611:129:76;;4522:224::o;4611:129::-;4682:47;-1:-1:-1;4682:47:76;958:1:75;-1:-1:-1;4682:47:76;13430:2163:59;;;;14330:66;;13855:31;13430:2163;-1:-1:-1;;;;;13430:2163:59;13855:31;:::i;:::-;1744:19:50;;;;;:::i;:::-;14283:14:59;;;;:::i;14330:66::-;;2550:79548:68;;14330:66:59;;;;;;15572:14;14330:66;1744:19:50;15064:30:59;14330:66;15210:67;14330:66;15380:37;14330:66;;;;15427:34;14330:66;-1:-1:-1;14330:66:59;;;13430:2163;14500:29;;14849;14487:42;14500:29;14837:41;14500:29;14836:57;14500:29;;;:::i;:::-;2550:79548:68;14487:42:59;;:::i;:::-;14849:29;;;:::i;:::-;2550:79548:68;14837:41:59;;:::i;:::-;14836:57;:::i;15427:34::-;2550:79548:68;15572:14:59;:::i;14330:66::-;14836:57;14330:66;;14487:42;14500:29;14837:41;14330:66;;;14849:29;14330:66;;;;;;;;;;;:::i;:::-;;;;;;;;;;4873:359:46;;5121:105;2550:79548:68;;;5044:9:46;2550:79548:68;;5044:9:46;;:::i;:::-;5121:105;;;;;;;4873:359::o;7248:4946:59:-;;;;;2550:79548:68;;8498:24:59;;;:::i;:::-;8623;;;;:::i;:::-;8743:13;8755:1;8758:13;;;;;;2550:79548:68;;-1:-1:-1;;;;;2550:79548:68;;;;;;;9134:57:59;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;8755:1;9134:57;;;8738:165;2550:79548:68;;;9286:55:59;;;;;;;;9134:57;9286:55;;;:::i;:::-;;;;;;;;;;;;1511:7:50;9422:14:59;9286:55;1625:13:50;9286:55:59;;8755:1;9286:55;;;8738:165;1511:7:50;;;;;;;;;;;;;;;;:::i;1625:13::-;9422:14:59;;;:::i;:::-;8755:1;9531:13;;;;;;2550:79548:68;;;;11183:55:59;2550:79548:68;;;;11183:55:59;;;;;;;;9134:57;11183:55;;;:::i;:::-;;;;;;;;;;;12108:59;11183:55;12123:43;11183:55;12107:80;11183:55;8755:1;11183:55;;;9511:1375;12123:43;;;:::i;:::-;12108:59;;:::i;11183:55::-;;;;;;-1:-1:-1;11183:55:59;;;;;;:::i;:::-;;;;;9546:3;10047:18;;;;;;;;;;;;;;10024:42;10047:18;;8848:1;10047:18;;:::i;:::-;2550:79548:68;10024:42:59;;:::i;:::-;10084:14;;;;;:::i;:::-;2550:79548:68;10084:41:59;10080:796;;9546:3;;;;;;2550:79548:68;9516:13:59;;;;;;;;;;;;10080:796;10232:14;;10374:38;10827:34;10232:14;10827;10232;;;10844:17;10232:14;;:::i;:::-;2550:79548:68;;10374:38:59;:::i;:::-;10354:58;;;;:::i;10827:14::-;2550:79548:68;10844:17:59;;:::i;10827:34::-;10810:51;;;;:::i;:::-;2550:79548:68;10080:796:59;;;;;;;9286:55;;;;;;-1:-1:-1;9286:55:59;;;;;;:::i;:::-;;;;;9134:57;;;;;;;;;;;;;;;:::i;:::-;;;;;8773:3;8809:18;:40;:36;:18;8848:1;8809:18;;;:::i;:::-;2550:79548:68;8830:15:59;;;;:::i;:::-;2550:79548:68;8809:36:59;;:::i;:::-;:40;:::i;:::-;8792:57;;;;:::i;:::-;2550:79548:68;;8743:13:59;;6495:194:76;958:1:75;7916:84:49;1586:1:75;7916:84:49;2550:79548:68;6574:109:76;;6495:194::o;6574:109::-;6635:37;-1:-1:-1;6635:37:76;958:1:75;-1:-1:-1;6635:37:76;2420:1364:59;;;3468:30;2550:79548:68;;3468:30:59;:::i;:::-;3513:13;3525:1;3549:3;2550:79548:68;;3528:19:59;;;;;3717:11;:50;:11;;;2550:79548:68;3717:11:59;;;:::i;:::-;2550:79548:68;3717:50:59;:::i;:::-;3702:65;;;;:::i;:::-;2550:79548:68;;3513:13:59;;3528:19;;;;;2420:1364::o;3596:756:95:-;;-1:-1:-1;;;;;2550:79548:68;;;3676:16:95;;;3672:78;;3785:29;:20;;;-1:-1:-1;;;;;2550:79548:68;;;5681:14:95;2550:79548:68;;;;;;;3785:20:95;2550:79548:68;3785:29:95;:::i;:::-;3963:19;:15;;;-1:-1:-1;;;;;2550:79548:68;;;6696:9:95;2550:79548:68;;;;;;;3963:19:95;2550:79548:68;;;;;;4043:14:95;;;:::i;:::-;4069:20;;-1:-1:-1;;;;;2550:79548:68;;;5681:14:95;2550:79548:68;;;;;;;4069:20:95;2550:79548:68;;;3690:1:95;2550:79548:68;4122:38:95;2550:79548:68;;4122:38:95;;;;2550:79548:68;;;;;;;;4122:38:95;;;;4285:60;;;;;2550:79548:68;;;4285:60:95;;3690:1;4285:60;;;2550:79548:68;;;-1:-1:-1;;;;;2550:79548:68;;;;;;;;;;;;;;;;;;3690:1:95;2550:79548:68;;;;4285:60:95;2550:79548:68;3672:78:95;3715:24;3690:1;3715:24;-1:-1:-1;;;;;2550:79548:68;;7519:27:95;2550:79548:68;;;55875:40;4059:629:105;-1:-1:-1;;;;;2811:38:106;4059:629:105;2550:79548:68;2811:38:106;;;:::i;:::-;2550:79548:68;;4551:22:105;;;;:57;;;;4059:629;4547:135;;;;4059:629;:::o;4547:135::-;4631:40;2847:1:106;4631:40:105;;2550:79548:68;;2847:1:106;4631:40:105;4551:57;4578:30;;;;;;;;;;;;:::i;:::-;4577:31;4551:57;;;;9628:806:76;;2550:79548:68;9811:24:76;;;:::i;:::-;9470:46;2550:79548:68;6019:108:49;;-1:-1:-1;9952:13:76;;;;;;10406:21;;;9628:806;:::o;9967:3::-;2550:79548:68;;;;;;;;;;;;;;;6019:108:49;;;;;3267:1:75;;;;;;6019:108:49;3267:1:75;;;10348:37:76;;;;:::i;:::-;2550:79548:68;;9937:13:76;;8442:263;6019:108:49;;2550:79548:68;6019:108:49;;19669:4:33;2550:79548:68;;;;;;;;;;;;;;;8442:263:76;:::o;8641:1623:77:-;;;;2550:79548:68;8915:29:77;:41;:29;;;;;:41;:::i;:::-;2550:79548:68;9458:36:77;;;9454:804;;8641:1623;;;;;:::o;9454:804::-;10044:189;2550:79548:68;;;;9669:111:77;2550:79548:68;10184:31:77;2550:79548:68;;9669:111:77;:::i;:::-;10120:30;10184:19;10120:42;:30;;;;;:42;:::i;10044:189::-;9454:804;;;;;;;;2011:185:44;;1237:14;2131:58;2011:185;1460:31;2131:58;:::i;24291:315:59:-;;24430:31;-1:-1:-1;;;;;24291:315:59;24430:31;2550:79548:68;;24430:31:59;;;;2550:79548:68;24430:31:59;;2550:79548:68;24430:31:59;;;;;;;;;;;24291:315;24475:34;;;;24471:129;;24291:315;;:::o;24471:129::-;24532:57;24430:31;24532:57;24430:31;2550:79548:68;;;;24430:31:59;24532:57;24430:31;;;;;;;;;;;;;;;:::i;:::-;;;;;662:219:50;465:4;662:219;838:5;662:219;838:5;:::i;1736:177:44:-;;1848:58;1736:177;1616:3;2550:79548:68;1848:58:44;;:::i;4358:211:95:-;928:3;4449:43;;4445:118;;4358:211;:::o;4445:118::-;4515:37;;;;2550:79548:68;;4515:37:95;;76675:2695:68;2550:79548;;;76968:40;;;77002:4;76968:40;;;2550:79548;76968:40;;76675:2695;;2550:79548;;-1:-1:-1;;;;;2550:79548:68;;76968:40;2550:79548;;;;;;76968:40;;;;;;;-1:-1:-1;76968:40:68;;;76675:2695;77022:57;;;;77018:892;;78083:28;;;-1:-1:-1;;;;;2550:79548:68;;;7242:11;2550:79548;;;;;;;78083:28;2550:79548;;;78227:37;;;77002:4;76968:40;78227:37;;2550:79548;;;;77002:4;2550:79548;;;;78227:37;;;;;;;-1:-1:-1;78227:37:68;;;76675:2695;78278:51;;;;;78274:866;;79315:25;;;;-1:-1:-1;;;;;2550:79548:68;;;7242:11;2550:79548;;;;;;;79315:25;2550:79548;76675:2695::o;78274:866::-;78966:163;-1:-1:-1;78966:163:68;-1:-1:-1;;;;;2550:79548:68;6774:51:95;2550:79548:68;;;-1:-1:-1;2550:79548:68;;;;55875:40;78227:37;;;;;;;-1:-1:-1;78227:37:68;;;;;;:::i;:::-;;;;;;77018:892;77727:172;;;;;;-1:-1:-1;77727:172:68;2550:79548;;;;-1:-1:-1;;;;;2550:79548:68;;;6774:51:95;2550:79548:68;;;;;;76968:40;;;;;;;;;;;;;;;:::i;:::-;;;;;4625:582:106;;4797:8;;-1:-1:-1;2550:79548:68;;5874:21:106;:17;;6046:142;;;;;;5870:383;6225:17;5894:1;6225:17;;5894:1;6225:17;4793:408;2550:79548:68;;5045:22:106;:49;;;4793:408;5041:119;;5173:17;;:::o;5041:119::-;-1:-1:-1;;;;;5121:24:106;;5066:1;5121:24;2550:79548:68;5121:24:106;2550:79548:68;;5066:1:106;5121:24;5045:49;5071:18;;;:23;5045:49;;23639:315:59;;23778:31;-1:-1:-1;;;;;23639:315:59;23778:31;2550:79548:68;;23778:31:59;;;;2550:79548:68;23778:31:59;;2550:79548:68;23778:31:59;;;;;;;;;;;23639:315;23823:34;;;;23819:129;;23639:315;;:::o;23819:129::-;23880:57;23778:31;23880:57;23778:31;2550:79548:68;;;;23778:31:59;23880:57;23778:31;;;;;;;;;;;;;;;:::i;:::-;;;;;2550:79548:68;;;;;;;;;;;;;;;;;:::o"},"methodIdentifiers":{"addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getVaultExtension()":"b9a8effa","reentrancyGuardEntered()":"d2c725e0","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","sendTo(address,address,uint256)":"ae639329","settle(address,uint256)":"15afd409","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unlock(bytes)":"48c89491"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVaultExtension\",\"name\":\"vaultExtension\",\"type\":\"address\"},{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"},{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllZeroInputs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceOverflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"invariantRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxInvariantRatio\",\"type\":\"uint256\"}],\"name\":\"InvariantRatioAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"invariantRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minInvariantRatio\",\"type\":\"uint256\"}],\"name\":\"InvariantRatioBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MultipleNonZeroInputs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotStaticCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"PoolTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntToUint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reentrancyGuardEntered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculated\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"AllZeroInputs()\":[{\"details\":\"Input arrays for single token add/remove liquidity operations are expected to have one non-zero value, corresponding to the token being added or removed. This error results if all entries are zero.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"InvariantRatioAboveMax(uint256,uint256)\":[{\"details\":\"This value is determined by each pool type, and depends on the specific math used to compute the price curve.\",\"params\":{\"invariantRatio\":\"The ratio of the new invariant (after an operation) to the old\",\"maxInvariantRatio\":\"The maximum allowed invariant ratio\"}}],\"InvariantRatioBelowMin(uint256,uint256)\":[{\"details\":\"This value is determined by each pool type, and depends on the specific math used to compute the price curve.\",\"params\":{\"invariantRatio\":\"The ratio of the new invariant (after an operation) to the old\",\"minInvariantRatio\":\"The minimum allowed invariant ratio\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"MultipleNonZeroInputs()\":[{\"details\":\"Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value, corresponding to the token being added or removed. This error results if there are multiple non-zero entries.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"PoolTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SafeCastOverflowedIntToUint(int256)\":[{\"details\":\"An int value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"Approval(address,address,address,uint256)\":{\"params\":{\"owner\":\"The token holder\",\"pool\":\"The pool token receiving the allowance\",\"spender\":\"The account being authorized to spend a given amount of the token\",\"value\":\"The number of tokens spender is authorized to transfer from owner\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Transfer(address,address,address,uint256)\":{\"params\":{\"from\":\"The token source\",\"pool\":\"The pool token being transferred\",\"to\":\"The token destination\",\"value\":\"The number of tokens\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"_0\":\"Number of tokens in the pool\",\"_1\":\"Index corresponding to the given token in the pool's token list\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"_0\":\"Address of the VaultExtension\"}},\"reentrancyGuardEntered()\":{\"returns\":{\"_0\":\"True if the Vault is currently executing a nonReentrant function\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculated\":\"Calculated swap amount\",\"amountIn\":\"Amount of input tokens for the swap\",\"amountOut\":\"Amount of output tokens from the swap\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AllZeroInputs()\":[{\"notice\":\"No valid input was given for a single token operation.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BalanceOverflow()\":[{\"notice\":\"One of the balances is above the maximum value that can be stored.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"InvariantRatioAboveMax(uint256,uint256)\":[{\"notice\":\"An add liquidity operation increased the invariant above the limit.\"}],\"InvariantRatioBelowMin(uint256,uint256)\":[{\"notice\":\"A remove liquidity operation decreased the invariant below the limit.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"MultipleNonZeroInputs()\":[{\"notice\":\"More than one non-zero value was given for a single token operation.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotStaticCall()\":[{\"notice\":\"A state-changing transaction was initiated in a context that only allows static calls.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"PoolTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a pool token can't be lower than the absolute minimum.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}],\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"Approval(address,address,address,uint256)\":{\"notice\":\"The allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Transfer(address,address,address,uint256)\":{\"notice\":\"Pool tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"reentrancyGuardEntered()\":{\"notice\":\"Expose the state of the Vault's reentrancy guard.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/Vault.sol\":\"Vault\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IERC20MultiTokenErrors.sol\":{\"keccak256\":\"0x4994bc0f8e5905640876a9411dadb73221ea2b7b1168d22cf5fe44ee1ca16960\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://69a0a6ab9c2622426ccfcb7263deb5615e589e98b3b31ea9fcd21595bb42a13d\",\"dweb:/ipfs/QmVW6GVXGTHnVo8MGk7zdLMASR8uN7khPsrEMXwgy4NBrQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IPoolLiquidity.sol\":{\"keccak256\":\"0x0cdc0d3817887d0439c3c6f4c811bd37091ef75a855dd8b14c0e8f337e2799dd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4ffd05df90ccdf19a35177fd6c6f78edc61ca2a37df7d0934932a3ad5a96f1e6\",\"dweb:/ipfs/QmaCmKktnMy4XXZn2FaKTjwQBGUhuXKikbxCbPX6K5PPgi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/BufferHelpers.sol\":{\"keccak256\":\"0x528ef10b3f14bb2b1d64043ec8c7d732a502147fe9d4e4bd3339f57e40fe3ce7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9a71bd94d0c5ba098b04b2bc65a7842c1bb3b96d91dd6a95756efc468cd6dbc5\",\"dweb:/ipfs/QmPrHPMmrdpJjvny8UjWbWFJo5nWpBtmjxWGbX1zDbNx6Z\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol\":{\"keccak256\":\"0x9dc4c8d6dd5dbc108dd377dab73a3e6c84e8c104713d2afb3cba8acc9ddf4c63\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2ef7c65fe356144f8cd720109b818e1ec6cc495ca35b55ca273ef9db45c6ae00\",\"dweb:/ipfs/QmREJgnfgoqemnYKvfYjTFJBAMsV9VAKA5AY5Woprpc1vs\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\":{\"keccak256\":\"0xa1014b8d96cdfd149f502cda06f25e51885a6456b41061ed213086fcc1c496b4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8a96e7e176f73762c6de904de39472fe970f12f6d3631097227bc664bd0780c1\",\"dweb:/ipfs/QmXcu5bk8tJTqR6UwkdKNtsodzqYGpJsPdfjQmdJFyKZjR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol\":{\"keccak256\":\"0xf98fec19a1516432d7540f0cde2e967b627afbc5a361835766d57be8ba10b4e2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://94b49929bff77d1fdaab8916350356fc9816317beef4f33c3af0e6a40493d01c\",\"dweb:/ipfs/QmPPhtmpPvgedbtQaJZz7JQCmiGKKTHmfh7EGhJS1yUCia\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":{\"keccak256\":\"0xb5f6b1d0ee3f295a717ce58329eaadccb1eefc2e1e02e2e7c438e377628475cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03c1b9bc73b7d14d9e1948a31c271a03a6ba4291f44d9aff17e60d300c111d0d\",\"dweb:/ipfs/QmNpW3iD3ST76N6xTncuVgYSuafSqFkXUmxNaK8uybr96G\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0xeb183354089582d4a3fc8ded6cc410a2937f2eac2aa47b3ab13b0f5e6ede10e5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ecef18f7f0f57d749d5b0e11ab887299be15e1b6971a4bb9104d06e45705231b\",\"dweb:/ipfs/QmeYRDD5UtVKu2YFJm3SmHFriK6LUa2Tzg7EdZrneEfzNR\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x79f2ec4f7314bd1c3555368ff02bb9d382489dc8bbd7efbbf306f9a5084f3bec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a57c155451c5b1c1c59a27770754ccd9ba1be9344db6ac45b8744eba5fa4fa2f\",\"dweb:/ipfs/QmarkRwGaS3egg1FaQH6LibqjT6NocVUbD1jMPWtFxFaQV\"]},\"@balancer-labs/v3-vault/contracts/BasePoolMath.sol\":{\"keccak256\":\"0x28078c6fa4d55418c25505d4683642cb51fe55b2155ef7418db6c70631a30d6a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://864b91fdc2b69725bcc07f06d9adebe87117561582fa58f1e4410d8928cd205c\",\"dweb:/ipfs/QmWCDsbTxtmEMLhorqfGF1LDMHMqqVnV9sk9mUTPR7eog8\"]},\"@balancer-labs/v3-vault/contracts/Vault.sol\":{\"keccak256\":\"0x9e8cd2281dc50fa2f07b57e9c1287ceb437616697d85cabe02d98a302b94e488\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://322585130a4fbb52430a720eb493dbc7bfbfa2fa28634a32429b572805d0b0b1\",\"dweb:/ipfs/Qmbm7aEZR4ZuUQEh5EepXGXzq9Ay8m3XbRKCHtbhb3gvfz\"]},\"@balancer-labs/v3-vault/contracts/VaultCommon.sol\":{\"keccak256\":\"0xad949728097754fb91dd82f46a4f3430f0caf092fe719f04c030325e623c59cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b6ba4635b64181a08098f2b4bde9bc6ceb8580d24654ec39c3d38ac2c8082317\",\"dweb:/ipfs/QmbthXemuT8Qvs2jdTADdyzbcPuZaKWfZjRn7j8dWuwffs\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@balancer-labs/v3-vault/contracts/VaultStorage.sol\":{\"keccak256\":\"0x283153cc86b04e7b5ded7b317a7773cd52912661922d477bccc7e3ef9c4fd332\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://30e03b35be9f4aebba5ea1f6fd1f72fb37990c916a22ef1dd4a01af809f89146\",\"dweb:/ipfs/QmNri89FgxWKFPkN67tvzAGf6kSyMuYvZd62ZW9a5MJBJH\"]},\"@balancer-labs/v3-vault/contracts/lib/HooksConfigLib.sol\":{\"keccak256\":\"0xaf3a7b4bbc1427ffb36b89cab5e485494afbddaff7195e0533f9c29a88c217b3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c653115b697d1c2a340a485e37a1d1a7b18bd3da4304ef12480bf9dcb8f61dc8\",\"dweb:/ipfs/QmfPNVqSeuG6gJr2x4y41czE5ivBz8vLpZ3R97VVnbK1uT\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolConfigConst.sol\":{\"keccak256\":\"0xcec5acd992ba3d85194d2a66de785676e5fbd76c7ef4bd75f581582c637e9191\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03feaba5c47de6cfa364a9f78f3d1cbc48c6e59e89348a56e773631ce3d52c4d\",\"dweb:/ipfs/QmWZmpFLKk6qEsTtbPaiKBWvTnSuYzQdbNJZX4Bng16c3F\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolConfigLib.sol\":{\"keccak256\":\"0x0df4ac214754751acdaa044f697ef2a45823689689aac22a6a102c8e543d97c7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13c1c708ac1a1f5523282a7430d7f5300120ac17b3c77a0bd103d2afe7aff979\",\"dweb:/ipfs/QmPstE7ZquJ4zMaCEXix8iCXc6hTSyNQaR9Z4aWBMTa9ys\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolDataLib.sol\":{\"keccak256\":\"0x0f004ef9c126426c1391516247f90cbb699982f3c545c821c2bdc3796c93f781\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://93d7b94cb4e0c9eee127258fb69e390d34c391444f337b6cc5cbe5beb702f4e7\",\"dweb:/ipfs/QmbswDz4DrsXaEh9RSvpmWKX5JCLoTavyAX2511eKr5rQd\"]},\"@balancer-labs/v3-vault/contracts/lib/VaultStateLib.sol\":{\"keccak256\":\"0xc40f34646f76afe536a326173d3c8cd663a655375531f65f3e6f7c63cecddeeb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a97b6d2363d70869b9cf66104a6c6bdfc84d351085c94b23b0104f2608e52ff4\",\"dweb:/ipfs/QmVPVR8F6nSxxhxTpFp5cgH9n1dE2E5UXD6cPauumtpS3e\"]},\"@balancer-labs/v3-vault/contracts/token/ERC20MultiToken.sol\":{\"keccak256\":\"0x49578c053271957fa9661c6a3e3ce6310a3f0690be6deca9eeb28f4e129bcfd3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e3bbd6d7baa790f6e259dfcab0ae2b0db96c08b21739dca829217af6fdbea15d\",\"dweb:/ipfs/QmVgirrgRbkHVdfthMKTJi98QeHmx9DHTT1WBNQRYogpBn\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/VaultAdmin.sol":{"VaultAdmin":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"mainVault","type":"address"},{"internalType":"uint32","name":"pauseWindowDuration","type":"uint32"},{"internalType":"uint32","name":"bufferPeriodDuration","type":"uint32"},{"internalType":"uint256","name":"minTradeAmount","type":"uint256"},{"internalType":"uint256","name":"minWrapAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BalanceOverflow","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"CodecOverflow","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotStaticCall","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"OutOfBounds","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"PoolTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintToInt","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"},{"inputs":[],"name":"ZeroDivision","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBuffersPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[{"internalType":"uint256[]","name":"totalSwapFees","type":"uint256[]"},{"internalType":"uint256[]","name":"totalYieldFees","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQueryPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"enableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferAsset","outputs":[{"internalType":"address","name":"underlyingToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"token","type":"address"}],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"token","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"getBufferOwnerShares","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodDuration","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodEndTime","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"token","type":"address"}],"name":"getBufferTotalShares","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumPoolTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumPoolTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumTradeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumWrapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getVaultPausedState","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isVaultPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"pausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reentrancyGuardEntered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"}],"name":"removeLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"removeLiquidityFromBufferHook","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"setProtocolFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"unpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"updateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateYieldFeePercentage","type":"uint256"}],"name":"updateAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_uint32_fromMemory":{"entryPoint":961,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":926,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_4621":{"entryPoint":879,"id":null,"parameterSlots":1,"returnSlots":0},"fun_calculateVaultStorageSlot":{"entryPoint":978,"id":28383,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6102006040908082523461036b5760a081613fac8038038091610022828561039e565b83398101031261036b5780516001600160a01b03811680820361036b57602061004c8185016103c1565b6100578686016103c1565b91608060608701519601519561008c88516100718161036f565b600a8152691a5cd55b9b1bd8dad95960b21b848201526103d2565b60c0526100bf885161009d8161036f565b60118152701b9bdb96995c9bd1195b1d1850dbdd5b9d607a1b848201526103d2565b60e0526100ec88516100d08161036f565b600b81526a746f6b656e44656c74617360a81b848201526103d2565b9761010098895261012481516101018161036f565b6012815271185919131a5c5d5a591a5d1e50d85b1b195960721b858201526103d2565b9761012098895261015382516101398161036f565b60098152681cd95cdcda5bdb925960ba1b868201526103d2565b926101409384526101c09788526101e098895263ffffffff80961694630784ce00861161035c578688169562ed4e00871161034d5742019081421161032457878211610338575086166101608181526101a098895295019586116103245761018095865260805260a0525196613b1a98896104928a3960805189610728015260a05189612bb1015260c0518961347b015260e05189818161387701526138d70152518861382c0152518750505186505051858181611add01528181611ec60152611f3e0152518481816112ec01528181611f6501526133a201525183818161044101528181610e25015281816111fa01528181612b670152612d7201525182613185015251818181610281015281816102d401528181610328015281816104bd0152818161076401528181610a1601528181610b6501528181610c2801528181610cc301528181610d2101528181610f1101528181611330015281816119c201528181611a7501528181611bbd01528181611c1d01528181611f0001528181611ff40152818161206c015281816123f1015281816124ab015281816129bb01528181612a1201528181612bfa01528181612c9301528181612dab01528181612e7601528181612ed90152612f900152f35b634e487b7160e01b5f52601160045260245ffd5b6306dfcc6560e41b5f5260045260245260445ffd5b634f5277f760e11b5f5260045ffd5b63cc0e8fe560e01b5f5260045ffd5b5f80fd5b604081019081106001600160401b0382111761038a57604052565b634e487b7160e01b5f52604160045260245ffd5b601f909101601f19168101906001600160401b0382119082101761038a57604052565b519063ffffffff8216820361036b57565b604051906103df8261036f565b600c8252610460603a602084016b5661756c7453746f7261676560a01b81526020604051948592828401977f62616c616e6365722d6c6162732e76332e73746f726167652e000000000000008952518091603986015e830190601760f91b60398301528051928391018583015e015f8382015203601a81018452018261039e565b5190205f198101908111610324576040519060208201908152602082526104868261036f565b9051902060ff19169056fe6080604052600436101561009f575b361561007757346100775760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7420696d706c656d656e74656400000000000000000000000000000000006044820152fd5b7ff2238896000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f5f3560e01c80630387587d14612f70578063058a628f14612eae578063098401f514612e615780630b7562be14612d9657806320c1fb7a14612d5657806326a8a99114612d3a5780632d77138914612c695780632e42f4d514612c4e5780634021fe0f14612bd457806353956aa214612b9a57806355aca1ec146129f457806355cba7fe146129a65780635dcacd64146124945780635e0b06f4146123ce578063653eb3b014612053578063821440f214611fde578063851c1bb314611f8c57806385c8c01514611eea5780638a8d123a14611ea95780638f4ab9ca14611bff5780639385e39a14611b855780639e0879c214611a5f578063a8175b2714611a43578063b9212b49146119ac578063bffb78b214611310578063cd51c12f146112cf578063d0965a6b146112b1578063d15126ba14610eef578063d2c725e014610eb0578063dc3f574e14610cfa578063de1a36a614610cad578063e085c5a814610c12578063e0d5560514610b4f578063e253670a146109f3578063e2a92b1a1461074b578063e2cb0ba014610710578063ebc7955c146104a1578063f21c38cd14610309578063f2784e07146102a85763fbfa77cf14610262575061000e565b346102a557806003193601126102a55760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b80fd5b50346102a55760206003193601126102a55760406020916001600160a01b036102cf612fd3565b6102f87f0000000000000000000000000000000000000000000000000000000000000000613267565b168152600d83522054604051908152f35b50346102a55760206003193601126102a557610323612fd3565b61034c7f0000000000000000000000000000000000000000000000000000000000000000613267565b6103558161342e565b6103796001600160a01b039182811692835f52600160205260405f205416906137ab565b805f525f60205260405f205460018160021c1663ffffffff80836103a361039e605a90565b61313f565b1c168261043b575b50501561040f5760207f57e20448028297190122571be7cb6c1b1ef85730c673f7c72f533c8662419aa7917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb5f91858352828452166040822055604051908152a280f35b507ffdcd6894000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b908092507f0000000000000000000000000000000000000000000000000000000000000000160181811161047457164211155f806103ab565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b50346102a55760806003193601126102a5576104bb612fd3565b7f00000000000000000000000000000000000000000000000000000000000000006104e581613267565b6001600160a01b03906040519260209280848601927f5dcacd640000000000000000000000000000000000000000000000000000000084521660248601526024356044860152604435606486015260643560848601523360a486015260a4855260e085019067ffffffffffffffff92868310848411176106e357601f948389809460448b8496856040527f48c894910000000000000000000000000000000000000000000000000000000086528c60e4830152848251918261010485015282610124918286015e83830101527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09b018b168101030193165af19485156106d8578695610618575b5050505060408280518101031261061457604080935081830151920151908351928352820152f35b8280fd5b9091929394503d8087843e61062d81846130df565b810191858260e085019403126106d45751908382116106d457018160ff820112156106d05760e0810151916101009383116106a357908693929161067b8760405197601f86011601876130df565b82865283838301011161069f5785928291018386015e83010152905f8080806105ec565b8380fd5b6024877f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8580fd5b8680fd5b6040513d88823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b50346102a557806003193601126102a55760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b50346102a55761075a36612fe9565b61078895919294957f0000000000000000000000000000000000000000000000000000000000000000613267565b610790613479565b6107986135b9565b6107a1866134ca565b6107a96133d9565b6001600160a01b0392838716916040517f38d52e0f0000000000000000000000000000000000000000000000000000000081526020958682600481885afa9182156106d85786926109c4575b50848652600e875280604087205416911680910361099457838552600b8652604085205497600d87526040862054916fffffffffffffffffffffffffffffffff8a169161085261084685888661372c565b9b60801c94878661372c565b99808c116109605750808a1161092c5750936108fd936108cd60409c946108c78c6108c18f6108df986108bc8e6108b37f75c4dc5f23640eeba7d404d9165f515fc3d9e23a5c8b6e2d09b4b9da56ff00a99f6108ad866137c7565b9061381c565b6108ad866137c7565b61314d565b9261314d565b90613557565b93878952600b8a52848d8a2055613627565b8851918291888a846040919493926060820195825260208201520152565b0390a27f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d8351928352820152f35b876064918b897f8eda85e4000000000000000000000000000000000000000000000000000000008452600452602452604452fd5b886064918d857f8eda85e4000000000000000000000000000000000000000000000000000000008452600452602452604452fd5b84604491857f36b18d09000000000000000000000000000000000000000000000000000000008352600452602452fd5b6109e5919250873d89116109ec575b6109dd81836130df565b810190613120565b905f6107f5565b503d6109d3565b50346102a55760406003193601126102a557610a0d612fd3565b60243590610a3a7f0000000000000000000000000000000000000000000000000000000000000000613267565b610a438161342e565b670de0b6b3a76400008211610b27576001600160a01b039081600a54163303610aff571690818352826020526040832054670de0b5cad2bef0008211610ad7577f606eb97d83164bd6b200d638cd49c14c65d94d4f2c674cfd85e24e0e202c3ca591610ac2602092610ab3604290565b9064174876e800840490613950565b8486528583526040862055604051908152a280f35b6004847f746e5940000000000000000000000000000000000000000000000000000000008152fd5b6004847f23dada53000000000000000000000000000000000000000000000000000000008152fd5b6004837f4c69ac5d000000000000000000000000000000000000000000000000000000008152fd5b50346102a557806003193601126102a557610b897f0000000000000000000000000000000000000000000000000000000000000000613267565b610b916132a0565b60ff60095416610bea577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe600754166007557f91d7478835f2b5adc315f5aad920f4a7f0a02f7fddf3042d17b2c80168ea17f58180a180f35b807f069f8cbc0000000000000000000000000000000000000000000000000000000060049252fd5b50346102a557806003193601126102a557610c4c7f0000000000000000000000000000000000000000000000000000000000000000613267565b610c546132a0565b60047ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb60075416176007557f300c7ca619eb846386aa0a6e5916ac2a41406448b0a2e99ba9ccafeb899015a5602060405160018152a180f35b50346102a557806003193601126102a557610ce77f0000000000000000000000000000000000000000000000000000000000000000613267565b610cef6132a0565b610cf76136db565b80f35b50346102a55760206003193601126102a5576001600160a01b03610d1c612fd3565b610d457f0000000000000000000000000000000000000000000000000000000000000000613267565b610d4e8161342e565b16808252816020526001604083205460031c16610e855780825281602052604082205460018160021c169063ffffffff8091610d8b61039e605a90565b1c1682610e1f575b50501580610e10575b610e03575b805f525f60205260405f2060087ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff78254161790557fc2354cc2f78ea57777e55ddd43a7f22b112ce98868596880edaeb22b4f9c73a9602060405160018152a280f35b610e0b6132a0565b610da1565b50610e1961339b565b15610d9c565b908092507f00000000000000000000000000000000000000000000000000000000000000001601818111610e5857164211155f80610d93565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b7f346d7607000000000000000000000000000000000000000000000000000000008252600452602490fd5b50346102a557806003193601126102a55760207f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6040519015158152f35b50346102a55760406003193601126102a557610f09612fd3565b602435610f357f0000000000000000000000000000000000000000000000000000000000000000613267565b610f3e8261342e565b6001600160a01b0380831692838552602091600183526001604087200154169081155f1461128257610f709150613997565b610f7861339b565b61125a57828452838152604084205460018160021c169063ffffffff8091610fa161039e605a90565b1c16826111f4575b50506111c8576040517fce20ece70000000000000000000000000000000000000000000000000000000081528181600481875afa90811561116857859161119b575b508210611173576040517f654cf15d0000000000000000000000000000000000000000000000000000000081528181600481875afa908115611168578591611137575b50821161110f57828452838152604084205491670de0b5cad2bef00081116110e75764174876e8008104928360181c6110bf577ffffffffffffffffffffffffffffffffffffffffffffffffffffffc000003ffff7f89d41522342fabac1471ca6073a5623e5caf367b03ca6e9a001478d0cf8be4a19486885287855260121b9116176040862055604051908152a280f35b7fe4337c05000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004857f746e5940000000000000000000000000000000000000000000000000000000008152fd5b6004847f7f47834b000000000000000000000000000000000000000000000000000000008152fd5b90508181813d8311611161575b61114e81836130df565b8101031261115d57515f61102e565b5f80fd5b503d611144565b6040513d87823e3d90fd5b6004847fbfb20688000000000000000000000000000000000000000000000000000000008152fd5b90508181813d83116111c1575b6111b281836130df565b8101031261115d57515f610feb565b503d6111a8565b602484847fd971f597000000000000000000000000000000000000000000000000000000008252600452fd5b908092507f0000000000000000000000000000000000000000000000000000000000000000160181811161122d57164211155f80610fa9565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6004847fda9f8b34000000000000000000000000000000000000000000000000000000008152fd5b503314610f70576004847f23dada53000000000000000000000000000000000000000000000000000000008152fd5b50346102a557806003193601126102a5576020604051620f42408152f35b50346102a557806003193601126102a557602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102a55760206003193601126102a55761132a612fd3565b906113547f0000000000000000000000000000000000000000000000000000000000000000613267565b61135d8261342e565b6113656132a0565b6001600160a01b0382168152806020526001604082205460031c16156119785761138d6133d9565b6040519160e0830183811067ffffffffffffffff8211176106e3576040525f8352606060208401526060604084015260608084015260606080840152606060a0840152606060c08401526001600160a01b0381165f52600560205260405f205f60205260405f205490600460205260405f2090600360205260405f2080549387526040519060208286815201905f528160205f20915f5b8781106119555750611438925003826130df565b6020870152611446836131bf565b61145360405191826130df565b8381527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611480856131bf565b015f5b81811061192c575050604087015261149a836131d7565b60608701526114a8836131d7565b6080870152855164ffffffffff6114be856131d7565b91605a1c165f5b8581106118f057505060c08701526114dc836131d7565b60a0870152855191600183811c1692836118dc575b50826118cc575b5f5b8481106115ee578787876001600160a01b0381165f52600560205260405f20905f5b60608501518051821015611562579061155061153a82600194613226565b516115498360808a0151613226565b5190613557565b815f528460205260405f20550161151c565b84835f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d6001600160a01b03165f8181526020818152604080832080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7169055519182527fc2354cc2f78ea57777e55ddd43a7f22b112ce98868596880edaeb22b4f9c73a991a280f35b6001600160a01b036116048260208b0151613226565b51165f528160205260405f20906040519161161e836130c3565b5460ff9081811661162e81613a2e565b84526001600160a01b038160081c16602085015260a81c1615156040830152805f528360205260405f2054916116748260408c01518361166e8383613226565b52613226565b50805161168081613a2e565b61168981613a2e565b806118055750670de0b6b3a76400005b6116a78360a08d0151613226565b526116c56fffffffffffffffffffffffffffffffff8416838c613a88565b85156117fb576040810151151590816117dd575b506116ea575b600191505b016114fa565b886116f58151613a65565b611703836060840151613226565b519360801c6117178460805f950151613226565b5181811161174e575b50505060019281611733575b50506116df565b61174791611740916130a2565b828b613a88565b5f8061172c565b611759935003613058565b91670de0b6b3a7640000926001847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83010401901515026117b88b6117b18560a06117a88260c0860151613226565b51930151613226565b5190613058565b8185810204851482151715610474576001946117d4920261306b565b90925f80611720565b60019150516117eb81613a2e565b6117f481613a2e565b145f6116d9565b50600191506116e4565b80611811600192613a2e565b036118a457600460206001600160a01b038184015116604051928380927f679aefce0000000000000000000000000000000000000000000000000000000082525afa908115611899575f91611867575b50611699565b90506020813d602011611891575b81611882602093836130df565b8101031261115d57515f611861565b3d9150611875565b6040513d5f823e3d90fd5b7fdf450632000000000000000000000000000000000000000000000000000000005f5260045ffd5b865160031c6001161592506114f8565b6118e7919350613a65565b1515915f6114f1565b60058102908082046005148115171561047457604d601f84841c161161047457601f836001931c16600a0a6119258286613226565b52016114c5565b60209060405161193b816130c3565b5f81525f838201525f604082015282828601015201611483565b91506001602081926001600160a01b038654168152019301910191839192611424565b6001600160a01b036024927fef029adf00000000000000000000000000000000000000000000000000000000835216600452fd5b50346102a557806003193601126102a5576119e67f0000000000000000000000000000000000000000000000000000000000000000613267565b6119ee6132a0565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb600754166007557f300c7ca619eb846386aa0a6e5916ac2a41406448b0a2e99ba9ccafeb899015a560206040515f8152a180f35b50346102a557806003193601126102a557602060405160028152f35b50346102a557806003193601126102a557611a997f0000000000000000000000000000000000000000000000000000000000000000613267565b611aa16132a0565b611aa961339b565b15611ad6577fda9f8b34000000000000000000000000000000000000000000000000000000005f5260045ffd5b63ffffffff7f000000000000000000000000000000000000000000000000000000000000000016421015611b5d5760027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60075416176007557fe0629fe656e45ad7fd63a24b899da368690024c07043b88e57aee5095b1d3d02602060405160018152a180f35b7f0e4460b7000000000000000000000000000000000000000000000000000000005f5260045ffd5b50346102a55760406003193601126102a557611b9f612fd3565b602435916001600160a01b0380841680940361115d57604092611be17f0000000000000000000000000000000000000000000000000000000000000000613267565b168152600c60205220905f52602052602060405f2054604051908152f35b50346102a557602080600319360112611ea557611c1a612fd3565b907f0000000000000000000000000000000000000000000000000000000000000000611c4581613267565b611c4d613479565b6001600160a01b039283600a54163303611e7d57938084602487611c71839961342e565b60405197889384927fca4f28030000000000000000000000000000000000000000000000000000000084521696876004840152165afa938415611e70578194611dd0575b50835192611ccb611cc5856131d7565b946131d7565b90825b8651811015611da2578088611ce56001938a613226565b511686865260069081855260408720815f5285526fffffffffffffffffffffffffffffffff60405f20548060801c611d1d868a613226565b5216611d29848b613226565b52611d34838a613226565b5115801590611d8f575b611d4b575b505001611cce565b611d8891888852855260408720815f5285528660405f2055611d82611d70848b613226565b51611d7b8589613226565b519061314d565b90613517565b5f80611d43565b50611d9a8387613226565b511515611d3e565b611dbf86611dcc8486604051948594604086526040860190613025565b9184830390850152613025565b0390f35b9093503d8085833e611de281836130df565b8101908381830312611e6c5780519067ffffffffffffffff82116106d057019080601f83011215611e6c578151611e18816131bf565b92611e2660405194856130df565b818452858085019260051b8201019283116106d4578501905b828210611e5057505050925f611cb5565b81518881168103611e68578152908501908501611e3f565b8780fd5b8480fd5b50604051903d90823e3d90fd5b6004857f23dada53000000000000000000000000000000000000000000000000000000008152fd5b5080fd5b50346102a557806003193601126102a557602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102a557806003193601126102a557611f247f0000000000000000000000000000000000000000000000000000000000000000613267565b6060611f2e61339b565b604051901515815263ffffffff807f00000000000000000000000000000000000000000000000000000000000000001660208301527f0000000000000000000000000000000000000000000000000000000000000000166040820152f35b50346102a55760206003193601126102a557600435907fffffffff00000000000000000000000000000000000000000000000000000000821682036102a5576020611fd68361315a565b604051908152f35b50346102a557806003193601126102a5576120187f0000000000000000000000000000000000000000000000000000000000000000613267565b6120206132a0565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff006009541617600955610cf76136db565b50346102a55761206236612fe9565b94926120909291927f0000000000000000000000000000000000000000000000000000000000000000613267565b612098613479565b6120a06135b9565b6120a86133d9565b6001600160a01b039586861693848652602097600e8952806040882054166123a2576040517f38d52e0f00000000000000000000000000000000000000000000000000000000815289816004818a5afa90811561234e578891612385575b501680156123595761214e90868852600e8a5260408820817fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556108ad856137c7565b61216061215a856137c7565b8661381c565b61216a8484613557565b91858752600b89528260408820556040517f4cdad50600000000000000000000000000000000000000000000000000000000815285600482015289816024818a5afa801561234e578590899061231d575b6121c5925061314d565b976121cf896135f0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8f089019889116122f05761225291899189897fd66f031d33381c6408f0b32c884461e5de3df8808399b6f3a3d86b1368f8ec348e828452600d8152612710806040862055600c8252604085205f805282528060405f2055604051908152a3613627565b8087106122c05750604080519283526020830193909352918101919091527f75c4dc5f23640eeba7d404d9165f515fc3d9e23a5c8b6e2d09b4b9da56ff00a990606090a27f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051908152f35b85604491887fda0cb07e000000000000000000000000000000000000000000000000000000008352600452602452fd5b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b50508981813d8311612347575b61233481836130df565b8101031261115d57846121c591516121bb565b503d61232a565b6040513d8a823e3d90fd5b602487877fd407f9c5000000000000000000000000000000000000000000000000000000008252600452fd5b61239c91508a3d8c116109ec576109dd81836130df565b5f612106565b602487877f1690fa40000000000000000000000000000000000000000000000000000000008252600452fd5b50346102a55760406003193601126102a5576123e8612fd3565b602435906124157f0000000000000000000000000000000000000000000000000000000000000000613267565b61241e8161342e565b670de0b6b3a76400008211610b27576001600160a01b039081600a54163303610aff571690818352826020526040832054670de0b5cad2bef0008211610ad75781610ac260209264174876e8007fe4d371097beea42453a37406e2aef4c04f3c548f84ac50e72578662c0dcd735495049061390e565b503461115d576124a336612fe9565b9490929193947f00000000000000000000000000000000000000000000000000000000000000006124d381613267565b6001600160a01b038116330361297a576124eb613479565b6124f4876134ca565b3215808061296d575b612905575b506001600160a01b0387165f52600c60205260405f206001600160a01b0383165f5260205260405f205484116128dd576001600160a01b0387165f52600b60205260405f205495600d60205260405f20549661258a61257c89612577896fffffffffffffffffffffffffffffffff8616613058565b61306b565b98612577888460801c613058565b966001600160a01b038a165f52600e6020526001600160a01b0360405f20541692808a106128aa575080881061286e5750612605906125c98984613517565b6125dc886001600160a01b038c16613517565b6108c7886125fc8b6fffffffffffffffffffffffffffffffff85166130a2565b9260801c6130a2565b946001600160a01b0389165f52600b6020528560405f20556001600160a01b03841615612846576001600160a01b0389165f52600d60205261264b8160405f20546130a2565b612654816135f0565b6001600160a01b038a165f52600d60205260405f2055600c60205260405f206001600160a01b0385165f5260205260405f206126918282546130a2565b90556040519081526001600160a01b038416907f4e09f7f7fc37ce2897800e2c2a9099565edb0a133d19d84a6871b3530af8846b60206001600160a01b038c1692a3866127c5575b5084612735575b5050604080518581526020810185905280820193909352946001600160a01b0316917f44d97b36e99b590b3d2875aad3b167b1d7fb1e063f3f1325a1eeac76caee51139150606090a282519182526020820152f35b6001600160a01b0381163b15610614576001600160a01b03606488858381958160405198899788967fae6393290000000000000000000000000000000000000000000000000000000088521660048701521660248501528a6044850152165af180156127ba576127a6575b806126e0565b6127b082916130af565b6102a557806127a0565b6040513d84823e3d90fd5b6001600160a01b0382163b1561115d57604051907fae63932900000000000000000000000000000000000000000000000000000000825260048201526001600160a01b03831660248201528660448201525f81606481836001600160a01b0387165af1801561189957156126d95761283e9193506130af565b5f915f6126d9565b7f586d06df000000000000000000000000000000000000000000000000000000005f5260045ffd5b876001600160a01b038b7f8eda85e4000000000000000000000000000000000000000000000000000000005f521660045260245260445260645ffd5b89847f8eda85e4000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b7f98c5dbd6000000000000000000000000000000000000000000000000000000005f5260045ffd5b15612945576001600160a01b0387165f52600c60205260405f206001600160a01b0383165f5260205260405f2061293d85825461314d565b90555f612502565b7f67f84ab2000000000000000000000000000000000000000000000000000000005f5260045ffd5b50600160075416156124fd565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b3461115d575f60031936011261115d576129df7f0000000000000000000000000000000000000000000000000000000000000000613267565b6020600160075460021c166040519015158152f35b3461115d57602060031936011261115d57612a0d612fd3565b612a367f0000000000000000000000000000000000000000000000000000000000000000613267565b612a3f8161342e565b612a636001600160a01b039182811692835f52600160205260405f205416906137ab565b805f525f60205260405f205460018160021c1663ffffffff908183612a8961039e605a90565b1c1681612b62575b5015612ac357827fd971f597000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b81612ace605a61313f565b1c16421015612b36577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb600491835f525f602052161760405f20557f57e20448028297190122571be7cb6c1b1ef85730c673f7c72f533c8662419aa7602060405160018152a2005b507feb5a1217000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9050817f0000000000000000000000000000000000000000000000000000000000000000160181811161047457811642111584612a91565b3461115d575f60031936011261115d5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461115d57602060031936011261115d576001600160a01b03612bf5612fd3565b612c1e7f0000000000000000000000000000000000000000000000000000000000000000613267565b165f52600b6020526040805f20548151906fffffffffffffffffffffffffffffffff8116825260801c6020820152f35b3461115d575f60031936011261115d57602060405160088152f35b3461115d57602060031936011261115d576004356001600160a01b03811680910361115d57612cb77f0000000000000000000000000000000000000000000000000000000000000000613267565b612cbf6132a0565b612cc76133d9565b807fffffffffffffffffffffffff0000000000000000000000000000000000000000600a541617600a557f280a60b1e63c1774d397d35cce80eb80e51408ead755fb446e6f744ce98e5df05f80a25f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b3461115d575f60031936011261115d5760206040516127108152f35b3461115d575f60031936011261115d57602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461115d575f60031936011261115d57612dcf7f0000000000000000000000000000000000000000000000000000000000000000613267565b612dd76132a0565b612ddf61339b565b15612e39577fe0629fe656e45ad7fd63a24b899da368690024c07043b88e57aee5095b1d3d0260205f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60075416600755604051908152a1005b7ff7ff4dca000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461115d575f60031936011261115d57612e9a7f0000000000000000000000000000000000000000000000000000000000000000613267565b6020612ea461339b565b6040519015158152f35b3461115d57602060031936011261115d576004356001600160a01b0381169081810361115d57612efd7f0000000000000000000000000000000000000000000000000000000000000000613267565b612f056132a0565b7fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff006009549260081b169116176009557f94b979b6831a51293e2641426f97747feed46f17779fed9cd18d1ecefcfe92ef5f80a2005b3461115d57602060031936011261115d576020612f8b612fd3565b612fb47f0000000000000000000000000000000000000000000000000000000000000000613267565b6001600160a01b038091165f52600e825260405f205416604051908152f35b600435906001600160a01b038216820361115d57565b60031960a091011261115d576001600160a01b03600435818116810361115d5791602435916044359160643591608435908116810361115d5790565b9081518082526020808093019301915f5b828110613044575050505090565b835185529381019392810192600101613036565b8181029291811591840414171561047457565b8115613075570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b9190820391821161047457565b67ffffffffffffffff81116106e357604052565b6060810190811067ffffffffffffffff8211176106e357604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176106e357604052565b9081602091031261115d57516001600160a01b038116810361115d5790565b906028820180921161047457565b9190820180921161047457565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526131b9816130c3565b51902090565b67ffffffffffffffff81116106e35760051b60200190565b906131e1826131bf565b6131ee60405191826130df565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061321c82946131bf565b0190602036910137565b805182101561323a5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6001600160a01b0316300361327857565b7f9fd25b36000000000000000000000000000000000000000000000000000000005f5260045ffd5b61332a60206132d17fffffffff000000000000000000000000000000000000000000000000000000005f351661315a565b6009546040517f9be2a88400000000000000000000000000000000000000000000000000000000815260048101929092523360248301523060448301529092839160081c6001600160a01b031690829081906064820190565b03915afa908115611899575f9161336c575b501561334457565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b61338e915060203d602011613394575b61338681836130df565b810190613793565b5f61333c565b503d61337c565b63ffffffff7f000000000000000000000000000000000000000000000000000000000000000016421115806133cd5790565b506001600754811c1690565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c613406576001905d565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160a01b0316805f525f602052600160405f2054161561344e5750565b7f9e51bd5c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f00000000000000000000000000000000000000000000000000000000000000005c156134a257565b7fc09ba736000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160a01b0380911690815f52600e60205260405f205416156134ec5750565b7f85f41299000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90613521906137c7565b907f8000000000000000000000000000000000000000000000000000000000000000821461047457613555915f039061381c565b565b6fffffffffffffffffffffffffffffffff8082119081156135af575b50613587576135849160801b61314d565b90565b7f89560ca1000000000000000000000000000000000000000000000000000000005f5260045ffd5b905082115f613573565b600160075460021c166135c857565b7f0f27df09000000000000000000000000000000000000000000000000000000005f5260045ffd5b61271081106135fc5750565b7f34bdbfaa000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b91906001600160a01b038091169283156136b3577fd66f031d33381c6408f0b32c884461e5de3df8808399b6f3a3d86b1368f8ec34916020911692835f52600d82526136778160405f205461314d565b613680816135f0565b845f52600d835260405f2055600c825260405f20855f52825260405f206136a882825461314d565b9055604051908152a3565b7fdbe6b10e000000000000000000000000000000000000000000000000000000005f5260045ffd5b60017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60075416176007557fbd204090fd387f08e3076528bf09b4fc99d8100d749eace96c06002d3fedc6255f80a1565b821561376b5760019161373e91613058565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830104019015150290565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b9081602091031261115d5751801515810361115d5790565b906001600160a01b031633146137c45761355590613997565b50565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116137f15790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b811561390a576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000009116805f528160205260405f205c8381019384125f821290801582169115161761047457836138d157507f0000000000000000000000000000000000000000000000000000000000000000805c907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211610474575d5b5f5260205260405f205d565b6138c5577f0000000000000000000000000000000000000000000000000000000000000000805c9060018201809211610474575d6138c5565b5050565b908060181c6110bf57602a1b9062ffffff602a1b19161790565b7fb4120f14000000000000000000000000000000000000000000000000000000005f5260045ffd5b906101008084101561392857838103908111610474578060ff105f14613992575060ff5b601811613928578060181c6110bf5762ffffff90831b921b19161790565b613974565b602061332a916139c97fffffffff000000000000000000000000000000000000000000000000000000005f351661315a565b6001600160a01b0360095460081c16906040518095819482937f9be2a884000000000000000000000000000000000000000000000000000000008452339060048501916040919493606084019584526001600160a01b03809216602085015216910152565b60021115613a3857565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b62ffffff9060421c1664174876e800908181029181830414901517156104745790565b91906080670de0b6b3a7640000613ad8613ae19480613aab8660608a0151613226565b52613ad3613abd8660c08a0151613226565b51613acc8760a08b0151613226565b5192613058565b613058565b04930151613226565b5256fea26469706673582212202dd034325ea1127c120ddcf76f0f4728a3af63c5c92e2a04bdf8a9cbd496f36364736f6c634300081b0033","opcodes":"PUSH2 0x200 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x36B JUMPI PUSH1 0xA0 DUP2 PUSH2 0x3FAC DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x22 DUP3 DUP6 PUSH2 0x39E JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x36B JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP1 DUP3 SUB PUSH2 0x36B JUMPI PUSH1 0x20 PUSH2 0x4C DUP2 DUP6 ADD PUSH2 0x3C1 JUMP JUMPDEST PUSH2 0x57 DUP7 DUP7 ADD PUSH2 0x3C1 JUMP JUMPDEST SWAP2 PUSH1 0x80 PUSH1 0x60 DUP8 ADD MLOAD SWAP7 ADD MLOAD SWAP6 PUSH2 0x8C DUP9 MLOAD PUSH2 0x71 DUP2 PUSH2 0x36F JUMP JUMPDEST PUSH1 0xA DUP2 MSTORE PUSH10 0x1A5CD55B9B1BD8DAD959 PUSH1 0xB2 SHL DUP5 DUP3 ADD MSTORE PUSH2 0x3D2 JUMP JUMPDEST PUSH1 0xC0 MSTORE PUSH2 0xBF DUP9 MLOAD PUSH2 0x9D DUP2 PUSH2 0x36F JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH17 0x1B9BDB96995C9BD1195B1D1850DBDD5B9D PUSH1 0x7A SHL DUP5 DUP3 ADD MSTORE PUSH2 0x3D2 JUMP JUMPDEST PUSH1 0xE0 MSTORE PUSH2 0xEC DUP9 MLOAD PUSH2 0xD0 DUP2 PUSH2 0x36F JUMP JUMPDEST PUSH1 0xB DUP2 MSTORE PUSH11 0x746F6B656E44656C746173 PUSH1 0xA8 SHL DUP5 DUP3 ADD MSTORE PUSH2 0x3D2 JUMP JUMPDEST SWAP8 PUSH2 0x100 SWAP9 DUP10 MSTORE PUSH2 0x124 DUP2 MLOAD PUSH2 0x101 DUP2 PUSH2 0x36F JUMP JUMPDEST PUSH1 0x12 DUP2 MSTORE PUSH18 0x185919131A5C5D5A591A5D1E50D85B1B1959 PUSH1 0x72 SHL DUP6 DUP3 ADD MSTORE PUSH2 0x3D2 JUMP JUMPDEST SWAP8 PUSH2 0x120 SWAP9 DUP10 MSTORE PUSH2 0x153 DUP3 MLOAD PUSH2 0x139 DUP2 PUSH2 0x36F JUMP JUMPDEST PUSH1 0x9 DUP2 MSTORE PUSH9 0x1CD95CDCDA5BDB9259 PUSH1 0xBA SHL DUP7 DUP3 ADD MSTORE PUSH2 0x3D2 JUMP JUMPDEST SWAP3 PUSH2 0x140 SWAP4 DUP5 MSTORE PUSH2 0x1C0 SWAP8 DUP9 MSTORE PUSH2 0x1E0 SWAP9 DUP10 MSTORE PUSH4 0xFFFFFFFF DUP1 SWAP7 AND SWAP5 PUSH4 0x784CE00 DUP7 GT PUSH2 0x35C JUMPI DUP7 DUP9 AND SWAP6 PUSH3 0xED4E00 DUP8 GT PUSH2 0x34D JUMPI TIMESTAMP ADD SWAP1 DUP2 TIMESTAMP GT PUSH2 0x324 JUMPI DUP8 DUP3 GT PUSH2 0x338 JUMPI POP DUP7 AND PUSH2 0x160 DUP2 DUP2 MSTORE PUSH2 0x1A0 SWAP9 DUP10 MSTORE SWAP6 ADD SWAP6 DUP7 GT PUSH2 0x324 JUMPI PUSH2 0x180 SWAP6 DUP7 MSTORE PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE MLOAD SWAP7 PUSH2 0x3B1A SWAP9 DUP10 PUSH2 0x492 DUP11 CODECOPY PUSH1 0x80 MLOAD DUP10 PUSH2 0x728 ADD MSTORE PUSH1 0xA0 MLOAD DUP10 PUSH2 0x2BB1 ADD MSTORE PUSH1 0xC0 MLOAD DUP10 PUSH2 0x347B ADD MSTORE PUSH1 0xE0 MLOAD DUP10 DUP2 DUP2 PUSH2 0x3877 ADD MSTORE PUSH2 0x38D7 ADD MSTORE MLOAD DUP9 PUSH2 0x382C ADD MSTORE MLOAD DUP8 POP POP MLOAD DUP7 POP POP MLOAD DUP6 DUP2 DUP2 PUSH2 0x1ADD ADD MSTORE DUP2 DUP2 PUSH2 0x1EC6 ADD MSTORE PUSH2 0x1F3E ADD MSTORE MLOAD DUP5 DUP2 DUP2 PUSH2 0x12EC ADD MSTORE DUP2 DUP2 PUSH2 0x1F65 ADD MSTORE PUSH2 0x33A2 ADD MSTORE MLOAD DUP4 DUP2 DUP2 PUSH2 0x441 ADD MSTORE DUP2 DUP2 PUSH2 0xE25 ADD MSTORE DUP2 DUP2 PUSH2 0x11FA ADD MSTORE DUP2 DUP2 PUSH2 0x2B67 ADD MSTORE PUSH2 0x2D72 ADD MSTORE MLOAD DUP3 PUSH2 0x3185 ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0x281 ADD MSTORE DUP2 DUP2 PUSH2 0x2D4 ADD MSTORE DUP2 DUP2 PUSH2 0x328 ADD MSTORE DUP2 DUP2 PUSH2 0x4BD ADD MSTORE DUP2 DUP2 PUSH2 0x764 ADD MSTORE DUP2 DUP2 PUSH2 0xA16 ADD MSTORE DUP2 DUP2 PUSH2 0xB65 ADD MSTORE DUP2 DUP2 PUSH2 0xC28 ADD MSTORE DUP2 DUP2 PUSH2 0xCC3 ADD MSTORE DUP2 DUP2 PUSH2 0xD21 ADD MSTORE DUP2 DUP2 PUSH2 0xF11 ADD MSTORE DUP2 DUP2 PUSH2 0x1330 ADD MSTORE DUP2 DUP2 PUSH2 0x19C2 ADD MSTORE DUP2 DUP2 PUSH2 0x1A75 ADD MSTORE DUP2 DUP2 PUSH2 0x1BBD ADD MSTORE DUP2 DUP2 PUSH2 0x1C1D ADD MSTORE DUP2 DUP2 PUSH2 0x1F00 ADD MSTORE DUP2 DUP2 PUSH2 0x1FF4 ADD MSTORE DUP2 DUP2 PUSH2 0x206C ADD MSTORE DUP2 DUP2 PUSH2 0x23F1 ADD MSTORE DUP2 DUP2 PUSH2 0x24AB ADD MSTORE DUP2 DUP2 PUSH2 0x29BB ADD MSTORE DUP2 DUP2 PUSH2 0x2A12 ADD MSTORE DUP2 DUP2 PUSH2 0x2BFA ADD MSTORE DUP2 DUP2 PUSH2 0x2C93 ADD MSTORE DUP2 DUP2 PUSH2 0x2DAB ADD MSTORE DUP2 DUP2 PUSH2 0x2E76 ADD MSTORE DUP2 DUP2 PUSH2 0x2ED9 ADD MSTORE PUSH2 0x2F90 ADD MSTORE RETURN JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x6DFCC65 PUSH1 0xE4 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH4 0x4F5277F7 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0xCC0E8FE5 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0x38A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x38A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x36B JUMPI JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x3DF DUP3 PUSH2 0x36F JUMP JUMPDEST PUSH1 0xC DUP3 MSTORE PUSH2 0x460 PUSH1 0x3A PUSH1 0x20 DUP5 ADD PUSH12 0x5661756C7453746F72616765 PUSH1 0xA0 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP3 DUP3 DUP5 ADD SWAP8 PUSH32 0x62616C616E6365722D6C6162732E76332E73746F726167652E00000000000000 DUP10 MSTORE MLOAD DUP1 SWAP2 PUSH1 0x39 DUP7 ADD MCOPY DUP4 ADD SWAP1 PUSH1 0x17 PUSH1 0xF9 SHL PUSH1 0x39 DUP4 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 SWAP2 ADD DUP6 DUP4 ADD MCOPY ADD PUSH0 DUP4 DUP3 ADD MSTORE SUB PUSH1 0x1A DUP2 ADD DUP5 MSTORE ADD DUP3 PUSH2 0x39E JUMP JUMPDEST MLOAD SWAP1 KECCAK256 PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x324 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP3 MSTORE PUSH2 0x486 DUP3 PUSH2 0x36F JUMP JUMPDEST SWAP1 MLOAD SWAP1 KECCAK256 PUSH1 0xFF NOT AND SWAP1 JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x9F JUMPI JUMPDEST CALLDATASIZE ISZERO PUSH2 0x77 JUMPI CALLVALUE PUSH2 0x77 JUMPI PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F7420696D706C656D656E7465640000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH32 0xF223889600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x387587D EQ PUSH2 0x2F70 JUMPI DUP1 PUSH4 0x58A628F EQ PUSH2 0x2EAE JUMPI DUP1 PUSH4 0x98401F5 EQ PUSH2 0x2E61 JUMPI DUP1 PUSH4 0xB7562BE EQ PUSH2 0x2D96 JUMPI DUP1 PUSH4 0x20C1FB7A EQ PUSH2 0x2D56 JUMPI DUP1 PUSH4 0x26A8A991 EQ PUSH2 0x2D3A JUMPI DUP1 PUSH4 0x2D771389 EQ PUSH2 0x2C69 JUMPI DUP1 PUSH4 0x2E42F4D5 EQ PUSH2 0x2C4E JUMPI DUP1 PUSH4 0x4021FE0F EQ PUSH2 0x2BD4 JUMPI DUP1 PUSH4 0x53956AA2 EQ PUSH2 0x2B9A JUMPI DUP1 PUSH4 0x55ACA1EC EQ PUSH2 0x29F4 JUMPI DUP1 PUSH4 0x55CBA7FE EQ PUSH2 0x29A6 JUMPI DUP1 PUSH4 0x5DCACD64 EQ PUSH2 0x2494 JUMPI DUP1 PUSH4 0x5E0B06F4 EQ PUSH2 0x23CE JUMPI DUP1 PUSH4 0x653EB3B0 EQ PUSH2 0x2053 JUMPI DUP1 PUSH4 0x821440F2 EQ PUSH2 0x1FDE JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x1F8C JUMPI DUP1 PUSH4 0x85C8C015 EQ PUSH2 0x1EEA JUMPI DUP1 PUSH4 0x8A8D123A EQ PUSH2 0x1EA9 JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0x1BFF JUMPI DUP1 PUSH4 0x9385E39A EQ PUSH2 0x1B85 JUMPI DUP1 PUSH4 0x9E0879C2 EQ PUSH2 0x1A5F JUMPI DUP1 PUSH4 0xA8175B27 EQ PUSH2 0x1A43 JUMPI DUP1 PUSH4 0xB9212B49 EQ PUSH2 0x19AC JUMPI DUP1 PUSH4 0xBFFB78B2 EQ PUSH2 0x1310 JUMPI DUP1 PUSH4 0xCD51C12F EQ PUSH2 0x12CF JUMPI DUP1 PUSH4 0xD0965A6B EQ PUSH2 0x12B1 JUMPI DUP1 PUSH4 0xD15126BA EQ PUSH2 0xEEF JUMPI DUP1 PUSH4 0xD2C725E0 EQ PUSH2 0xEB0 JUMPI DUP1 PUSH4 0xDC3F574E EQ PUSH2 0xCFA JUMPI DUP1 PUSH4 0xDE1A36A6 EQ PUSH2 0xCAD JUMPI DUP1 PUSH4 0xE085C5A8 EQ PUSH2 0xC12 JUMPI DUP1 PUSH4 0xE0D55605 EQ PUSH2 0xB4F JUMPI DUP1 PUSH4 0xE253670A EQ PUSH2 0x9F3 JUMPI DUP1 PUSH4 0xE2A92B1A EQ PUSH2 0x74B JUMPI DUP1 PUSH4 0xE2CB0BA0 EQ PUSH2 0x710 JUMPI DUP1 PUSH4 0xEBC7955C EQ PUSH2 0x4A1 JUMPI DUP1 PUSH4 0xF21C38CD EQ PUSH2 0x309 JUMPI DUP1 PUSH4 0xF2784E07 EQ PUSH2 0x2A8 JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x262 JUMPI POP PUSH2 0xE JUMP JUMPDEST CALLVALUE PUSH2 0x2A5 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH1 0x40 PUSH1 0x20 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2CF PUSH2 0x2FD3 JUMP JUMPDEST PUSH2 0x2F8 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST AND DUP2 MSTORE PUSH1 0xD DUP4 MSTORE KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH2 0x323 PUSH2 0x2FD3 JUMP JUMPDEST PUSH2 0x34C PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x355 DUP2 PUSH2 0x342E JUMP JUMPDEST PUSH2 0x379 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP2 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH2 0x37AB JUMP JUMPDEST DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x1 DUP2 PUSH1 0x2 SHR AND PUSH4 0xFFFFFFFF DUP1 DUP4 PUSH2 0x3A3 PUSH2 0x39E PUSH1 0x5A SWAP1 JUMP JUMPDEST PUSH2 0x313F JUMP JUMPDEST SHR AND DUP3 PUSH2 0x43B JUMPI JUMPDEST POP POP ISZERO PUSH2 0x40F JUMPI PUSH1 0x20 PUSH32 0x57E20448028297190122571BE7CB6C1B1EF85730C673F7C72F533C8662419AA7 SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB PUSH0 SWAP2 DUP6 DUP4 MSTORE DUP3 DUP5 MSTORE AND PUSH1 0x40 DUP3 KECCAK256 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 DUP1 RETURN JUMPDEST POP PUSH32 0xFDCD689400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP PUSH32 0x0 AND ADD DUP2 DUP2 GT PUSH2 0x474 JUMPI AND TIMESTAMP GT ISZERO PUSH0 DUP1 PUSH2 0x3AB JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH2 0x4BB PUSH2 0x2FD3 JUMP JUMPDEST PUSH32 0x0 PUSH2 0x4E5 DUP2 PUSH2 0x3267 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x40 MLOAD SWAP3 PUSH1 0x20 SWAP3 DUP1 DUP5 DUP7 ADD SWAP3 PUSH32 0x5DCACD6400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE AND PUSH1 0x24 DUP7 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x44 DUP7 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x64 DUP7 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x84 DUP7 ADD MSTORE CALLER PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xA4 DUP6 MSTORE PUSH1 0xE0 DUP6 ADD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP7 DUP4 LT DUP5 DUP5 GT OR PUSH2 0x6E3 JUMPI PUSH1 0x1F SWAP5 DUP4 DUP10 DUP1 SWAP5 PUSH1 0x44 DUP12 DUP5 SWAP7 DUP6 PUSH1 0x40 MSTORE PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP7 MSTORE DUP13 PUSH1 0xE4 DUP4 ADD MSTORE DUP5 DUP3 MLOAD SWAP2 DUP3 PUSH2 0x104 DUP6 ADD MSTORE DUP3 PUSH2 0x124 SWAP2 DUP3 DUP7 ADD MCOPY DUP4 DUP4 ADD ADD MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP12 ADD DUP12 AND DUP2 ADD SUB ADD SWAP4 AND GAS CALL SWAP5 DUP6 ISZERO PUSH2 0x6D8 JUMPI DUP7 SWAP6 PUSH2 0x618 JUMPI JUMPDEST POP POP POP POP PUSH1 0x40 DUP3 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x614 JUMPI PUSH1 0x40 DUP1 SWAP4 POP DUP2 DUP4 ADD MLOAD SWAP3 ADD MLOAD SWAP1 DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE RETURN JUMPDEST DUP3 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 POP RETURNDATASIZE DUP1 DUP8 DUP5 RETURNDATACOPY PUSH2 0x62D DUP2 DUP5 PUSH2 0x30DF JUMP JUMPDEST DUP2 ADD SWAP2 DUP6 DUP3 PUSH1 0xE0 DUP6 ADD SWAP5 SUB SLT PUSH2 0x6D4 JUMPI MLOAD SWAP1 DUP4 DUP3 GT PUSH2 0x6D4 JUMPI ADD DUP2 PUSH1 0xFF DUP3 ADD SLT ISZERO PUSH2 0x6D0 JUMPI PUSH1 0xE0 DUP2 ADD MLOAD SWAP2 PUSH2 0x100 SWAP4 DUP4 GT PUSH2 0x6A3 JUMPI SWAP1 DUP7 SWAP4 SWAP3 SWAP2 PUSH2 0x67B DUP8 PUSH1 0x40 MLOAD SWAP8 PUSH1 0x1F DUP7 ADD AND ADD DUP8 PUSH2 0x30DF JUMP JUMPDEST DUP3 DUP7 MSTORE DUP4 DUP4 DUP4 ADD ADD GT PUSH2 0x69F JUMPI DUP6 SWAP3 DUP3 SWAP2 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 PUSH0 DUP1 DUP1 DUP1 PUSH2 0x5EC JUMP JUMPDEST DUP4 DUP1 REVERT JUMPDEST PUSH1 0x24 DUP8 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP7 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP9 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI PUSH2 0x75A CALLDATASIZE PUSH2 0x2FE9 JUMP JUMPDEST PUSH2 0x788 SWAP6 SWAP2 SWAP3 SWAP5 SWAP6 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x790 PUSH2 0x3479 JUMP JUMPDEST PUSH2 0x798 PUSH2 0x35B9 JUMP JUMPDEST PUSH2 0x7A1 DUP7 PUSH2 0x34CA JUMP JUMPDEST PUSH2 0x7A9 PUSH2 0x33D9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP8 AND SWAP2 PUSH1 0x40 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP6 DUP7 DUP3 PUSH1 0x4 DUP2 DUP9 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x6D8 JUMPI DUP7 SWAP3 PUSH2 0x9C4 JUMPI JUMPDEST POP DUP5 DUP7 MSTORE PUSH1 0xE DUP8 MSTORE DUP1 PUSH1 0x40 DUP8 KECCAK256 SLOAD AND SWAP2 AND DUP1 SWAP2 SUB PUSH2 0x994 JUMPI DUP4 DUP6 MSTORE PUSH1 0xB DUP7 MSTORE PUSH1 0x40 DUP6 KECCAK256 SLOAD SWAP8 PUSH1 0xD DUP8 MSTORE PUSH1 0x40 DUP7 KECCAK256 SLOAD SWAP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP2 PUSH2 0x852 PUSH2 0x846 DUP6 DUP9 DUP7 PUSH2 0x372C JUMP JUMPDEST SWAP12 PUSH1 0x80 SHR SWAP5 DUP8 DUP7 PUSH2 0x372C JUMP JUMPDEST SWAP10 DUP1 DUP13 GT PUSH2 0x960 JUMPI POP DUP1 DUP11 GT PUSH2 0x92C JUMPI POP SWAP4 PUSH2 0x8FD SWAP4 PUSH2 0x8CD PUSH1 0x40 SWAP13 SWAP5 PUSH2 0x8C7 DUP13 PUSH2 0x8C1 DUP16 PUSH2 0x8DF SWAP9 PUSH2 0x8BC DUP15 PUSH2 0x8B3 PUSH32 0x75C4DC5F23640EEBA7D404D9165F515FC3D9E23A5C8B6E2D09B4B9DA56FF00A9 SWAP16 PUSH2 0x8AD DUP7 PUSH2 0x37C7 JUMP JUMPDEST SWAP1 PUSH2 0x381C JUMP JUMPDEST PUSH2 0x8AD DUP7 PUSH2 0x37C7 JUMP JUMPDEST PUSH2 0x314D JUMP JUMPDEST SWAP3 PUSH2 0x314D JUMP JUMPDEST SWAP1 PUSH2 0x3557 JUMP JUMPDEST SWAP4 DUP8 DUP10 MSTORE PUSH1 0xB DUP11 MSTORE DUP5 DUP14 DUP11 KECCAK256 SSTORE PUSH2 0x3627 JUMP JUMPDEST DUP9 MLOAD SWAP2 DUP3 SWAP2 DUP9 DUP11 DUP5 PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 PUSH1 0x60 DUP3 ADD SWAP6 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE RETURN JUMPDEST DUP8 PUSH1 0x64 SWAP2 DUP12 DUP10 PUSH32 0x8EDA85E400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE REVERT JUMPDEST DUP9 PUSH1 0x64 SWAP2 DUP14 DUP6 PUSH32 0x8EDA85E400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE REVERT JUMPDEST DUP5 PUSH1 0x44 SWAP2 DUP6 PUSH32 0x36B18D0900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE REVERT JUMPDEST PUSH2 0x9E5 SWAP2 SWAP3 POP DUP8 RETURNDATASIZE DUP10 GT PUSH2 0x9EC JUMPI JUMPDEST PUSH2 0x9DD DUP2 DUP4 PUSH2 0x30DF JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3120 JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x7F5 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x9D3 JUMP JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH2 0xA0D PUSH2 0x2FD3 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xA3A PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0xA43 DUP2 PUSH2 0x342E JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP3 GT PUSH2 0xB27 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH1 0xA SLOAD AND CALLER SUB PUSH2 0xAFF JUMPI AND SWAP1 DUP2 DUP4 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP4 KECCAK256 SLOAD PUSH8 0xDE0B5CAD2BEF000 DUP3 GT PUSH2 0xAD7 JUMPI PUSH32 0x606EB97D83164BD6B200D638CD49C14C65D94D4F2C674CFD85E24E0E202C3CA5 SWAP2 PUSH2 0xAC2 PUSH1 0x20 SWAP3 PUSH2 0xAB3 PUSH1 0x42 SWAP1 JUMP JUMPDEST SWAP1 PUSH5 0x174876E800 DUP5 DIV SWAP1 PUSH2 0x3950 JUMP JUMPDEST DUP5 DUP7 MSTORE DUP6 DUP4 MSTORE PUSH1 0x40 DUP7 KECCAK256 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 DUP1 RETURN JUMPDEST PUSH1 0x4 DUP5 PUSH32 0x746E594000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP5 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP4 PUSH32 0x4C69AC5D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH2 0xB89 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0xB91 PUSH2 0x32A0 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x9 SLOAD AND PUSH2 0xBEA JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE PUSH1 0x7 SLOAD AND PUSH1 0x7 SSTORE PUSH32 0x91D7478835F2B5ADC315F5AAD920F4A7F0A02F7FDDF3042D17B2C80168EA17F5 DUP2 DUP1 LOG1 DUP1 RETURN JUMPDEST DUP1 PUSH32 0x69F8CBC00000000000000000000000000000000000000000000000000000000 PUSH1 0x4 SWAP3 MSTORE REVERT JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH2 0xC4C PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0xC54 PUSH2 0x32A0 JUMP JUMPDEST PUSH1 0x4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB PUSH1 0x7 SLOAD AND OR PUSH1 0x7 SSTORE PUSH32 0x300C7CA619EB846386AA0A6E5916AC2A41406448B0A2E99BA9CCAFEB899015A5 PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE LOG1 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH2 0xCE7 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0xCEF PUSH2 0x32A0 JUMP JUMPDEST PUSH2 0xCF7 PUSH2 0x36DB JUMP JUMPDEST DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xD1C PUSH2 0x2FD3 JUMP JUMPDEST PUSH2 0xD45 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0xD4E DUP2 PUSH2 0x342E JUMP JUMPDEST AND DUP1 DUP3 MSTORE DUP2 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 DUP4 KECCAK256 SLOAD PUSH1 0x3 SHR AND PUSH2 0xE85 JUMPI DUP1 DUP3 MSTORE DUP2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP3 KECCAK256 SLOAD PUSH1 0x1 DUP2 PUSH1 0x2 SHR AND SWAP1 PUSH4 0xFFFFFFFF DUP1 SWAP2 PUSH2 0xD8B PUSH2 0x39E PUSH1 0x5A SWAP1 JUMP JUMPDEST SHR AND DUP3 PUSH2 0xE1F JUMPI JUMPDEST POP POP ISZERO DUP1 PUSH2 0xE10 JUMPI JUMPDEST PUSH2 0xE03 JUMPI JUMPDEST DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x8 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH32 0xC2354CC2F78EA57777E55DDD43A7F22B112CE98868596880EDAEB22B4F9C73A9 PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE LOG2 DUP1 RETURN JUMPDEST PUSH2 0xE0B PUSH2 0x32A0 JUMP JUMPDEST PUSH2 0xDA1 JUMP JUMPDEST POP PUSH2 0xE19 PUSH2 0x339B JUMP JUMPDEST ISZERO PUSH2 0xD9C JUMP JUMPDEST SWAP1 DUP1 SWAP3 POP PUSH32 0x0 AND ADD DUP2 DUP2 GT PUSH2 0xE58 JUMPI AND TIMESTAMP GT ISZERO PUSH0 DUP1 PUSH2 0xD93 JUMP JUMPDEST PUSH1 0x24 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH32 0x346D760700000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH1 0x20 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH2 0xF09 PUSH2 0x2FD3 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0xF35 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0xF3E DUP3 PUSH2 0x342E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP3 DUP4 DUP6 MSTORE PUSH1 0x20 SWAP2 PUSH1 0x1 DUP4 MSTORE PUSH1 0x1 PUSH1 0x40 DUP8 KECCAK256 ADD SLOAD AND SWAP1 DUP2 ISZERO PUSH0 EQ PUSH2 0x1282 JUMPI PUSH2 0xF70 SWAP2 POP PUSH2 0x3997 JUMP JUMPDEST PUSH2 0xF78 PUSH2 0x339B JUMP JUMPDEST PUSH2 0x125A JUMPI DUP3 DUP5 MSTORE DUP4 DUP2 MSTORE PUSH1 0x40 DUP5 KECCAK256 SLOAD PUSH1 0x1 DUP2 PUSH1 0x2 SHR AND SWAP1 PUSH4 0xFFFFFFFF DUP1 SWAP2 PUSH2 0xFA1 PUSH2 0x39E PUSH1 0x5A SWAP1 JUMP JUMPDEST SHR AND DUP3 PUSH2 0x11F4 JUMPI JUMPDEST POP POP PUSH2 0x11C8 JUMPI PUSH1 0x40 MLOAD PUSH32 0xCE20ECE700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP2 PUSH1 0x4 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1168 JUMPI DUP6 SWAP2 PUSH2 0x119B JUMPI JUMPDEST POP DUP3 LT PUSH2 0x1173 JUMPI PUSH1 0x40 MLOAD PUSH32 0x654CF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP2 PUSH1 0x4 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1168 JUMPI DUP6 SWAP2 PUSH2 0x1137 JUMPI JUMPDEST POP DUP3 GT PUSH2 0x110F JUMPI DUP3 DUP5 MSTORE DUP4 DUP2 MSTORE PUSH1 0x40 DUP5 KECCAK256 SLOAD SWAP2 PUSH8 0xDE0B5CAD2BEF000 DUP2 GT PUSH2 0x10E7 JUMPI PUSH5 0x174876E800 DUP2 DIV SWAP3 DUP4 PUSH1 0x18 SHR PUSH2 0x10BF JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC000003FFFF PUSH32 0x89D41522342FABAC1471CA6073A5623E5CAF367B03CA6E9A001478D0CF8BE4A1 SWAP5 DUP7 DUP9 MSTORE DUP8 DUP6 MSTORE PUSH1 0x12 SHL SWAP2 AND OR PUSH1 0x40 DUP7 KECCAK256 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 DUP1 RETURN JUMPDEST PUSH32 0xE4337C0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x4 DUP6 PUSH32 0x746E594000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP5 PUSH32 0x7F47834B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST SWAP1 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1161 JUMPI JUMPDEST PUSH2 0x114E DUP2 DUP4 PUSH2 0x30DF JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x115D JUMPI MLOAD PUSH0 PUSH2 0x102E JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x1144 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP8 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP5 PUSH32 0xBFB2068800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST SWAP1 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x11C1 JUMPI JUMPDEST PUSH2 0x11B2 DUP2 DUP4 PUSH2 0x30DF JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x115D JUMPI MLOAD PUSH0 PUSH2 0xFEB JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x11A8 JUMP JUMPDEST PUSH1 0x24 DUP5 DUP5 PUSH32 0xD971F59700000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 MSTORE REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP PUSH32 0x0 AND ADD DUP2 DUP2 GT PUSH2 0x122D JUMPI AND TIMESTAMP GT ISZERO PUSH0 DUP1 PUSH2 0xFA9 JUMP JUMPDEST PUSH1 0x24 DUP7 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP5 PUSH32 0xDA9F8B3400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP CALLER EQ PUSH2 0xF70 JUMPI PUSH1 0x4 DUP5 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH3 0xF4240 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH2 0x132A PUSH2 0x2FD3 JUMP JUMPDEST SWAP1 PUSH2 0x1354 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x135D DUP3 PUSH2 0x342E JUMP JUMPDEST PUSH2 0x1365 PUSH2 0x32A0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP2 MSTORE DUP1 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 DUP3 KECCAK256 SLOAD PUSH1 0x3 SHR AND ISZERO PUSH2 0x1978 JUMPI PUSH2 0x138D PUSH2 0x33D9 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH1 0xE0 DUP4 ADD DUP4 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x6E3 JUMPI PUSH1 0x40 MSTORE PUSH0 DUP4 MSTORE PUSH1 0x60 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x60 DUP1 DUP5 ADD MSTORE PUSH1 0x60 PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x60 PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x60 PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP4 DUP8 MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 DUP7 DUP2 MSTORE ADD SWAP1 PUSH0 MSTORE DUP2 PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 JUMPDEST DUP8 DUP2 LT PUSH2 0x1955 JUMPI POP PUSH2 0x1438 SWAP3 POP SUB DUP3 PUSH2 0x30DF JUMP JUMPDEST PUSH1 0x20 DUP8 ADD MSTORE PUSH2 0x1446 DUP4 PUSH2 0x31BF JUMP JUMPDEST PUSH2 0x1453 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x30DF JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x1480 DUP6 PUSH2 0x31BF JUMP JUMPDEST ADD PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x192C JUMPI POP POP PUSH1 0x40 DUP8 ADD MSTORE PUSH2 0x149A DUP4 PUSH2 0x31D7 JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MSTORE PUSH2 0x14A8 DUP4 PUSH2 0x31D7 JUMP JUMPDEST PUSH1 0x80 DUP8 ADD MSTORE DUP6 MLOAD PUSH5 0xFFFFFFFFFF PUSH2 0x14BE DUP6 PUSH2 0x31D7 JUMP JUMPDEST SWAP2 PUSH1 0x5A SHR AND PUSH0 JUMPDEST DUP6 DUP2 LT PUSH2 0x18F0 JUMPI POP POP PUSH1 0xC0 DUP8 ADD MSTORE PUSH2 0x14DC DUP4 PUSH2 0x31D7 JUMP JUMPDEST PUSH1 0xA0 DUP8 ADD MSTORE DUP6 MLOAD SWAP2 PUSH1 0x1 DUP4 DUP2 SHR AND SWAP3 DUP4 PUSH2 0x18DC JUMPI JUMPDEST POP DUP3 PUSH2 0x18CC JUMPI JUMPDEST PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x15EE JUMPI DUP8 DUP8 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 JUMPDEST PUSH1 0x60 DUP6 ADD MLOAD DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x1562 JUMPI SWAP1 PUSH2 0x1550 PUSH2 0x153A DUP3 PUSH1 0x1 SWAP5 PUSH2 0x3226 JUMP JUMPDEST MLOAD PUSH2 0x1549 DUP4 PUSH1 0x80 DUP11 ADD MLOAD PUSH2 0x3226 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x3557 JUMP JUMPDEST DUP2 PUSH0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE ADD PUSH2 0x151C JUMP JUMPDEST DUP5 DUP4 PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 AND SWAP1 SSTORE MLOAD SWAP2 DUP3 MSTORE PUSH32 0xC2354CC2F78EA57777E55DDD43A7F22B112CE98868596880EDAEB22B4F9C73A9 SWAP2 LOG2 DUP1 RETURN JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1604 DUP3 PUSH1 0x20 DUP12 ADD MLOAD PUSH2 0x3226 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x161E DUP4 PUSH2 0x30C3 JUMP JUMPDEST SLOAD PUSH1 0xFF SWAP1 DUP2 DUP2 AND PUSH2 0x162E DUP2 PUSH2 0x3A2E JUMP JUMPDEST DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 PUSH1 0x8 SHR AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0xA8 SHR AND ISZERO ISZERO PUSH1 0x40 DUP4 ADD MSTORE DUP1 PUSH0 MSTORE DUP4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP2 PUSH2 0x1674 DUP3 PUSH1 0x40 DUP13 ADD MLOAD DUP4 PUSH2 0x166E DUP4 DUP4 PUSH2 0x3226 JUMP JUMPDEST MSTORE PUSH2 0x3226 JUMP JUMPDEST POP DUP1 MLOAD PUSH2 0x1680 DUP2 PUSH2 0x3A2E JUMP JUMPDEST PUSH2 0x1689 DUP2 PUSH2 0x3A2E JUMP JUMPDEST DUP1 PUSH2 0x1805 JUMPI POP PUSH8 0xDE0B6B3A7640000 JUMPDEST PUSH2 0x16A7 DUP4 PUSH1 0xA0 DUP14 ADD MLOAD PUSH2 0x3226 JUMP JUMPDEST MSTORE PUSH2 0x16C5 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP4 DUP13 PUSH2 0x3A88 JUMP JUMPDEST DUP6 ISZERO PUSH2 0x17FB JUMPI PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO SWAP1 DUP2 PUSH2 0x17DD JUMPI JUMPDEST POP PUSH2 0x16EA JUMPI JUMPDEST PUSH1 0x1 SWAP2 POP JUMPDEST ADD PUSH2 0x14FA JUMP JUMPDEST DUP9 PUSH2 0x16F5 DUP2 MLOAD PUSH2 0x3A65 JUMP JUMPDEST PUSH2 0x1703 DUP4 PUSH1 0x60 DUP5 ADD MLOAD PUSH2 0x3226 JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x80 SHR PUSH2 0x1717 DUP5 PUSH1 0x80 PUSH0 SWAP6 ADD MLOAD PUSH2 0x3226 JUMP JUMPDEST MLOAD DUP2 DUP2 GT PUSH2 0x174E JUMPI JUMPDEST POP POP POP PUSH1 0x1 SWAP3 DUP2 PUSH2 0x1733 JUMPI JUMPDEST POP POP PUSH2 0x16DF JUMP JUMPDEST PUSH2 0x1747 SWAP2 PUSH2 0x1740 SWAP2 PUSH2 0x30A2 JUMP JUMPDEST DUP3 DUP12 PUSH2 0x3A88 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x172C JUMP JUMPDEST PUSH2 0x1759 SWAP4 POP SUB PUSH2 0x3058 JUMP JUMPDEST SWAP2 PUSH8 0xDE0B6B3A7640000 SWAP3 PUSH1 0x1 DUP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x17B8 DUP12 PUSH2 0x17B1 DUP6 PUSH1 0xA0 PUSH2 0x17A8 DUP3 PUSH1 0xC0 DUP7 ADD MLOAD PUSH2 0x3226 JUMP JUMPDEST MLOAD SWAP4 ADD MLOAD PUSH2 0x3226 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x3058 JUMP JUMPDEST DUP2 DUP6 DUP2 MUL DIV DUP6 EQ DUP3 ISZERO OR ISZERO PUSH2 0x474 JUMPI PUSH1 0x1 SWAP5 PUSH2 0x17D4 SWAP3 MUL PUSH2 0x306B JUMP JUMPDEST SWAP1 SWAP3 PUSH0 DUP1 PUSH2 0x1720 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP MLOAD PUSH2 0x17EB DUP2 PUSH2 0x3A2E JUMP JUMPDEST PUSH2 0x17F4 DUP2 PUSH2 0x3A2E JUMP JUMPDEST EQ PUSH0 PUSH2 0x16D9 JUMP JUMPDEST POP PUSH1 0x1 SWAP2 POP PUSH2 0x16E4 JUMP JUMPDEST DUP1 PUSH2 0x1811 PUSH1 0x1 SWAP3 PUSH2 0x3A2E JUMP JUMPDEST SUB PUSH2 0x18A4 JUMPI PUSH1 0x4 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP5 ADD MLOAD AND PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0x679AEFCE00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1899 JUMPI PUSH0 SWAP2 PUSH2 0x1867 JUMPI JUMPDEST POP PUSH2 0x1699 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1891 JUMPI JUMPDEST DUP2 PUSH2 0x1882 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x30DF JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x115D JUMPI MLOAD PUSH0 PUSH2 0x1861 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1875 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0xDF45063200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP7 MLOAD PUSH1 0x3 SHR PUSH1 0x1 AND ISZERO SWAP3 POP PUSH2 0x14F8 JUMP JUMPDEST PUSH2 0x18E7 SWAP2 SWAP4 POP PUSH2 0x3A65 JUMP JUMPDEST ISZERO ISZERO SWAP2 PUSH0 PUSH2 0x14F1 JUMP JUMPDEST PUSH1 0x5 DUP2 MUL SWAP1 DUP1 DUP3 DIV PUSH1 0x5 EQ DUP2 ISZERO OR ISZERO PUSH2 0x474 JUMPI PUSH1 0x4D PUSH1 0x1F DUP5 DUP5 SHR AND GT PUSH2 0x474 JUMPI PUSH1 0x1F DUP4 PUSH1 0x1 SWAP4 SHR AND PUSH1 0xA EXP PUSH2 0x1925 DUP3 DUP7 PUSH2 0x3226 JUMP JUMPDEST MSTORE ADD PUSH2 0x14C5 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD PUSH2 0x193B DUP2 PUSH2 0x30C3 JUMP JUMPDEST PUSH0 DUP2 MSTORE PUSH0 DUP4 DUP3 ADD MSTORE PUSH0 PUSH1 0x40 DUP3 ADD MSTORE DUP3 DUP3 DUP7 ADD ADD MSTORE ADD PUSH2 0x1483 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 PUSH1 0x20 DUP2 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 SLOAD AND DUP2 MSTORE ADD SWAP4 ADD SWAP2 ADD SWAP2 DUP4 SWAP2 SWAP3 PUSH2 0x1424 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x24 SWAP3 PUSH32 0xEF029ADF00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND PUSH1 0x4 MSTORE REVERT JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH2 0x19E6 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x19EE PUSH2 0x32A0 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB PUSH1 0x7 SLOAD AND PUSH1 0x7 SSTORE PUSH32 0x300C7CA619EB846386AA0A6E5916AC2A41406448B0A2E99BA9CCAFEB899015A5 PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE LOG1 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x2 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH2 0x1A99 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x1AA1 PUSH2 0x32A0 JUMP JUMPDEST PUSH2 0x1AA9 PUSH2 0x339B JUMP JUMPDEST ISZERO PUSH2 0x1AD6 JUMPI PUSH32 0xDA9F8B3400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0xFFFFFFFF PUSH32 0x0 AND TIMESTAMP LT ISZERO PUSH2 0x1B5D JUMPI PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD PUSH1 0x7 SLOAD AND OR PUSH1 0x7 SSTORE PUSH32 0xE0629FE656E45AD7FD63A24B899DA368690024C07043B88E57AEE5095B1D3D02 PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE LOG1 DUP1 RETURN JUMPDEST PUSH32 0xE4460B700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH2 0x1B9F PUSH2 0x2FD3 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND DUP1 SWAP5 SUB PUSH2 0x115D JUMPI PUSH1 0x40 SWAP3 PUSH2 0x1BE1 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST AND DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1EA5 JUMPI PUSH2 0x1C1A PUSH2 0x2FD3 JUMP JUMPDEST SWAP1 PUSH32 0x0 PUSH2 0x1C45 DUP2 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x1C4D PUSH2 0x3479 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 PUSH1 0xA SLOAD AND CALLER SUB PUSH2 0x1E7D JUMPI SWAP4 DUP1 DUP5 PUSH1 0x24 DUP8 PUSH2 0x1C71 DUP4 SWAP10 PUSH2 0x342E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP8 DUP9 SWAP4 DUP5 SWAP3 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP5 MSTORE AND SWAP7 DUP8 PUSH1 0x4 DUP5 ADD MSTORE AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x1E70 JUMPI DUP2 SWAP5 PUSH2 0x1DD0 JUMPI JUMPDEST POP DUP4 MLOAD SWAP3 PUSH2 0x1CCB PUSH2 0x1CC5 DUP6 PUSH2 0x31D7 JUMP JUMPDEST SWAP5 PUSH2 0x31D7 JUMP JUMPDEST SWAP1 DUP3 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x1DA2 JUMPI DUP1 DUP9 PUSH2 0x1CE5 PUSH1 0x1 SWAP4 DUP11 PUSH2 0x3226 JUMP JUMPDEST MLOAD AND DUP7 DUP7 MSTORE PUSH1 0x6 SWAP1 DUP2 DUP6 MSTORE PUSH1 0x40 DUP8 KECCAK256 DUP2 PUSH0 MSTORE DUP6 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP1 PUSH1 0x80 SHR PUSH2 0x1D1D DUP7 DUP11 PUSH2 0x3226 JUMP JUMPDEST MSTORE AND PUSH2 0x1D29 DUP5 DUP12 PUSH2 0x3226 JUMP JUMPDEST MSTORE PUSH2 0x1D34 DUP4 DUP11 PUSH2 0x3226 JUMP JUMPDEST MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1D8F JUMPI JUMPDEST PUSH2 0x1D4B JUMPI JUMPDEST POP POP ADD PUSH2 0x1CCE JUMP JUMPDEST PUSH2 0x1D88 SWAP2 DUP9 DUP9 MSTORE DUP6 MSTORE PUSH1 0x40 DUP8 KECCAK256 DUP2 PUSH0 MSTORE DUP6 MSTORE DUP7 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH2 0x1D82 PUSH2 0x1D70 DUP5 DUP12 PUSH2 0x3226 JUMP JUMPDEST MLOAD PUSH2 0x1D7B DUP6 DUP10 PUSH2 0x3226 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x314D JUMP JUMPDEST SWAP1 PUSH2 0x3517 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x1D43 JUMP JUMPDEST POP PUSH2 0x1D9A DUP4 DUP8 PUSH2 0x3226 JUMP JUMPDEST MLOAD ISZERO ISZERO PUSH2 0x1D3E JUMP JUMPDEST PUSH2 0x1DBF DUP7 PUSH2 0x1DCC DUP5 DUP7 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP5 PUSH1 0x40 DUP7 MSTORE PUSH1 0x40 DUP7 ADD SWAP1 PUSH2 0x3025 JUMP JUMPDEST SWAP2 DUP5 DUP4 SUB SWAP1 DUP6 ADD MSTORE PUSH2 0x3025 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST SWAP1 SWAP4 POP RETURNDATASIZE DUP1 DUP6 DUP4 RETURNDATACOPY PUSH2 0x1DE2 DUP2 DUP4 PUSH2 0x30DF JUMP JUMPDEST DUP2 ADD SWAP1 DUP4 DUP2 DUP4 SUB SLT PUSH2 0x1E6C JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x6D0 JUMPI ADD SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x1E6C JUMPI DUP2 MLOAD PUSH2 0x1E18 DUP2 PUSH2 0x31BF JUMP JUMPDEST SWAP3 PUSH2 0x1E26 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x30DF JUMP JUMPDEST DUP2 DUP5 MSTORE DUP6 DUP1 DUP6 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x6D4 JUMPI DUP6 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1E50 JUMPI POP POP POP SWAP3 PUSH0 PUSH2 0x1CB5 JUMP JUMPDEST DUP2 MLOAD DUP9 DUP2 AND DUP2 SUB PUSH2 0x1E68 JUMPI DUP2 MSTORE SWAP1 DUP6 ADD SWAP1 DUP6 ADD PUSH2 0x1E3F JUMP JUMPDEST DUP8 DUP1 REVERT JUMPDEST DUP5 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP6 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH2 0x1F24 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1F2E PUSH2 0x339B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH4 0xFFFFFFFF DUP1 PUSH32 0x0 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x0 AND PUSH1 0x40 DUP3 ADD MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x2A5 JUMPI PUSH1 0x20 PUSH2 0x1FD6 DUP4 PUSH2 0x315A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH2 0x2018 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x2020 PUSH2 0x32A0 JUMP JUMPDEST PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x9 SLOAD AND OR PUSH1 0x9 SSTORE PUSH2 0xCF7 PUSH2 0x36DB JUMP JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI PUSH2 0x2062 CALLDATASIZE PUSH2 0x2FE9 JUMP JUMPDEST SWAP5 SWAP3 PUSH2 0x2090 SWAP3 SWAP2 SWAP3 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x2098 PUSH2 0x3479 JUMP JUMPDEST PUSH2 0x20A0 PUSH2 0x35B9 JUMP JUMPDEST PUSH2 0x20A8 PUSH2 0x33D9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 DUP7 AND SWAP4 DUP5 DUP7 MSTORE PUSH1 0x20 SWAP8 PUSH1 0xE DUP10 MSTORE DUP1 PUSH1 0x40 DUP9 KECCAK256 SLOAD AND PUSH2 0x23A2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP10 DUP2 PUSH1 0x4 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x234E JUMPI DUP9 SWAP2 PUSH2 0x2385 JUMPI JUMPDEST POP AND DUP1 ISZERO PUSH2 0x2359 JUMPI PUSH2 0x214E SWAP1 DUP7 DUP9 MSTORE PUSH1 0xE DUP11 MSTORE PUSH1 0x40 DUP9 KECCAK256 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH2 0x8AD DUP6 PUSH2 0x37C7 JUMP JUMPDEST PUSH2 0x2160 PUSH2 0x215A DUP6 PUSH2 0x37C7 JUMP JUMPDEST DUP7 PUSH2 0x381C JUMP JUMPDEST PUSH2 0x216A DUP5 DUP5 PUSH2 0x3557 JUMP JUMPDEST SWAP2 DUP6 DUP8 MSTORE PUSH1 0xB DUP10 MSTORE DUP3 PUSH1 0x40 DUP9 KECCAK256 SSTORE PUSH1 0x40 MLOAD PUSH32 0x4CDAD50600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP6 PUSH1 0x4 DUP3 ADD MSTORE DUP10 DUP2 PUSH1 0x24 DUP2 DUP11 GAS STATICCALL DUP1 ISZERO PUSH2 0x234E JUMPI DUP6 SWAP1 DUP10 SWAP1 PUSH2 0x231D JUMPI JUMPDEST PUSH2 0x21C5 SWAP3 POP PUSH2 0x314D JUMP JUMPDEST SWAP8 PUSH2 0x21CF DUP10 PUSH2 0x35F0 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8F0 DUP10 ADD SWAP9 DUP10 GT PUSH2 0x22F0 JUMPI PUSH2 0x2252 SWAP2 DUP10 SWAP2 DUP10 DUP10 PUSH32 0xD66F031D33381C6408F0B32C884461E5DE3DF8808399B6F3A3D86B1368F8EC34 DUP15 DUP3 DUP5 MSTORE PUSH1 0xD DUP2 MSTORE PUSH2 0x2710 DUP1 PUSH1 0x40 DUP7 KECCAK256 SSTORE PUSH1 0xC DUP3 MSTORE PUSH1 0x40 DUP6 KECCAK256 PUSH0 DUP1 MSTORE DUP3 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG3 PUSH2 0x3627 JUMP JUMPDEST DUP1 DUP8 LT PUSH2 0x22C0 JUMPI POP PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x75C4DC5F23640EEBA7D404D9165F515FC3D9E23A5C8B6E2D09B4B9DA56FF00A9 SWAP1 PUSH1 0x60 SWAP1 LOG2 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP6 PUSH1 0x44 SWAP2 DUP9 PUSH32 0xDA0CB07E00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE REVERT JUMPDEST PUSH1 0x24 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE REVERT JUMPDEST POP POP DUP10 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2347 JUMPI JUMPDEST PUSH2 0x2334 DUP2 DUP4 PUSH2 0x30DF JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x115D JUMPI DUP5 PUSH2 0x21C5 SWAP2 MLOAD PUSH2 0x21BB JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x232A JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP11 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x24 DUP8 DUP8 PUSH32 0xD407F9C500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH2 0x239C SWAP2 POP DUP11 RETURNDATASIZE DUP13 GT PUSH2 0x9EC JUMPI PUSH2 0x9DD DUP2 DUP4 PUSH2 0x30DF JUMP JUMPDEST PUSH0 PUSH2 0x2106 JUMP JUMPDEST PUSH1 0x24 DUP8 DUP8 PUSH32 0x1690FA4000000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 MSTORE REVERT JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH2 0x23E8 PUSH2 0x2FD3 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x2415 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x241E DUP2 PUSH2 0x342E JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP3 GT PUSH2 0xB27 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH1 0xA SLOAD AND CALLER SUB PUSH2 0xAFF JUMPI AND SWAP1 DUP2 DUP4 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP4 KECCAK256 SLOAD PUSH8 0xDE0B5CAD2BEF000 DUP3 GT PUSH2 0xAD7 JUMPI DUP2 PUSH2 0xAC2 PUSH1 0x20 SWAP3 PUSH5 0x174876E800 PUSH32 0xE4D371097BEEA42453A37406E2AEF4C04F3C548F84AC50E72578662C0DCD7354 SWAP6 DIV SWAP1 PUSH2 0x390E JUMP JUMPDEST POP CALLVALUE PUSH2 0x115D JUMPI PUSH2 0x24A3 CALLDATASIZE PUSH2 0x2FE9 JUMP JUMPDEST SWAP5 SWAP1 SWAP3 SWAP2 SWAP4 SWAP5 PUSH32 0x0 PUSH2 0x24D3 DUP2 PUSH2 0x3267 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND CALLER SUB PUSH2 0x297A JUMPI PUSH2 0x24EB PUSH2 0x3479 JUMP JUMPDEST PUSH2 0x24F4 DUP8 PUSH2 0x34CA JUMP JUMPDEST ORIGIN ISZERO DUP1 DUP1 PUSH2 0x296D JUMPI JUMPDEST PUSH2 0x2905 JUMPI JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH0 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP5 GT PUSH2 0x28DD JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP6 PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP7 PUSH2 0x258A PUSH2 0x257C DUP10 PUSH2 0x2577 DUP10 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH2 0x3058 JUMP JUMPDEST PUSH2 0x306B JUMP JUMPDEST SWAP9 PUSH2 0x2577 DUP9 DUP5 PUSH1 0x80 SHR PUSH2 0x3058 JUMP JUMPDEST SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP3 DUP1 DUP11 LT PUSH2 0x28AA JUMPI POP DUP1 DUP9 LT PUSH2 0x286E JUMPI POP PUSH2 0x2605 SWAP1 PUSH2 0x25C9 DUP10 DUP5 PUSH2 0x3517 JUMP JUMPDEST PUSH2 0x25DC DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH2 0x3517 JUMP JUMPDEST PUSH2 0x8C7 DUP9 PUSH2 0x25FC DUP12 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH2 0x30A2 JUMP JUMPDEST SWAP3 PUSH1 0x80 SHR PUSH2 0x30A2 JUMP JUMPDEST SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE DUP6 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO PUSH2 0x2846 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH0 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH2 0x264B DUP2 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x30A2 JUMP JUMPDEST PUSH2 0x2654 DUP2 PUSH2 0x35F0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x2691 DUP3 DUP3 SLOAD PUSH2 0x30A2 JUMP JUMPDEST SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH32 0x4E09F7F7FC37CE2897800E2C2A9099565EDB0A133D19D84A6871B3530AF8846B PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP3 LOG3 DUP7 PUSH2 0x27C5 JUMPI JUMPDEST POP DUP5 PUSH2 0x2735 JUMPI JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH32 0x44D97B36E99B590B3D2875AAD3B167B1D7FB1E063F3F1325A1EEAC76CAEE5113 SWAP2 POP PUSH1 0x60 SWAP1 LOG2 DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE ISZERO PUSH2 0x614 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x64 DUP9 DUP6 DUP4 DUP2 SWAP6 DUP2 PUSH1 0x40 MLOAD SWAP9 DUP10 SWAP8 DUP9 SWAP7 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP9 MSTORE AND PUSH1 0x4 DUP8 ADD MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE DUP11 PUSH1 0x44 DUP6 ADD MSTORE AND GAS CALL DUP1 ISZERO PUSH2 0x27BA JUMPI PUSH2 0x27A6 JUMPI JUMPDEST DUP1 PUSH2 0x26E0 JUMP JUMPDEST PUSH2 0x27B0 DUP3 SWAP2 PUSH2 0x30AF JUMP JUMPDEST PUSH2 0x2A5 JUMPI DUP1 PUSH2 0x27A0 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EXTCODESIZE ISZERO PUSH2 0x115D JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE DUP7 PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND GAS CALL DUP1 ISZERO PUSH2 0x1899 JUMPI ISZERO PUSH2 0x26D9 JUMPI PUSH2 0x283E SWAP2 SWAP4 POP PUSH2 0x30AF JUMP JUMPDEST PUSH0 SWAP2 PUSH0 PUSH2 0x26D9 JUMP JUMPDEST PUSH32 0x586D06DF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 PUSH32 0x8EDA85E400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST DUP10 DUP5 PUSH32 0x8EDA85E400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH32 0x98C5DBD600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST ISZERO PUSH2 0x2945 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH0 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x293D DUP6 DUP3 SLOAD PUSH2 0x314D JUMP JUMPDEST SWAP1 SSTORE PUSH0 PUSH2 0x2502 JUMP JUMPDEST PUSH32 0x67F84AB200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x7 SLOAD AND ISZERO PUSH2 0x24FD JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x115D JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115D JUMPI PUSH2 0x29DF PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1 PUSH1 0x7 SLOAD PUSH1 0x2 SHR AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x115D JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115D JUMPI PUSH2 0x2A0D PUSH2 0x2FD3 JUMP JUMPDEST PUSH2 0x2A36 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x2A3F DUP2 PUSH2 0x342E JUMP JUMPDEST PUSH2 0x2A63 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP2 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH2 0x37AB JUMP JUMPDEST DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x1 DUP2 PUSH1 0x2 SHR AND PUSH4 0xFFFFFFFF SWAP1 DUP2 DUP4 PUSH2 0x2A89 PUSH2 0x39E PUSH1 0x5A SWAP1 JUMP JUMPDEST SHR AND DUP2 PUSH2 0x2B62 JUMPI JUMPDEST POP ISZERO PUSH2 0x2AC3 JUMPI DUP3 PUSH32 0xD971F59700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 PUSH2 0x2ACE PUSH1 0x5A PUSH2 0x313F JUMP JUMPDEST SHR AND TIMESTAMP LT ISZERO PUSH2 0x2B36 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB PUSH1 0x4 SWAP2 DUP4 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE AND OR PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x57E20448028297190122571BE7CB6C1B1EF85730C673F7C72F533C8662419AA7 PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE LOG2 STOP JUMPDEST POP PUSH32 0xEB5A121700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP2 PUSH32 0x0 AND ADD DUP2 DUP2 GT PUSH2 0x474 JUMPI DUP2 AND TIMESTAMP GT ISZERO DUP5 PUSH2 0x2A91 JUMP JUMPDEST CALLVALUE PUSH2 0x115D JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115D JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x115D JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115D JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2BF5 PUSH2 0x2FD3 JUMP JUMPDEST PUSH2 0x2C1E PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 SLOAD DUP2 MLOAD SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP3 MSTORE PUSH1 0x80 SHR PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x115D JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115D JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x8 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x115D JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115D JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP1 SWAP2 SUB PUSH2 0x115D JUMPI PUSH2 0x2CB7 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x2CBF PUSH2 0x32A0 JUMP JUMPDEST PUSH2 0x2CC7 PUSH2 0x33D9 JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0xA SLOAD AND OR PUSH1 0xA SSTORE PUSH32 0x280A60B1E63C1774D397D35CCE80EB80E51408EAD755FB446E6F744CE98E5DF0 PUSH0 DUP1 LOG2 PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST CALLVALUE PUSH2 0x115D JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115D JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH2 0x2710 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x115D JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115D JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x115D JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115D JUMPI PUSH2 0x2DCF PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x2DD7 PUSH2 0x32A0 JUMP JUMPDEST PUSH2 0x2DDF PUSH2 0x339B JUMP JUMPDEST ISZERO PUSH2 0x2E39 JUMPI PUSH32 0xE0629FE656E45AD7FD63A24B899DA368690024C07043B88E57AEE5095B1D3D02 PUSH1 0x20 PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD PUSH1 0x7 SLOAD AND PUSH1 0x7 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST PUSH32 0xF7FF4DCA00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x115D JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115D JUMPI PUSH2 0x2E9A PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH1 0x20 PUSH2 0x2EA4 PUSH2 0x339B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x115D JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115D JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP1 DUP2 DUP2 SUB PUSH2 0x115D JUMPI PUSH2 0x2EFD PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x2F05 PUSH2 0x32A0 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x9 SLOAD SWAP3 PUSH1 0x8 SHL AND SWAP2 AND OR PUSH1 0x9 SSTORE PUSH32 0x94B979B6831A51293E2641426F97747FEED46F17779FED9CD18D1ECEFCFE92EF PUSH0 DUP1 LOG2 STOP JUMPDEST CALLVALUE PUSH2 0x115D JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115D JUMPI PUSH1 0x20 PUSH2 0x2F8B PUSH2 0x2FD3 JUMP JUMPDEST PUSH2 0x2FB4 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0xE DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x115D JUMPI JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0xA0 SWAP2 ADD SLT PUSH2 0x115D JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x115D JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP2 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH1 0x64 CALLDATALOAD SWAP2 PUSH1 0x84 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x115D JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x3044 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x3036 JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x474 JUMPI JUMP JUMPDEST DUP2 ISZERO PUSH2 0x3075 JUMPI DIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x474 JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6E3 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x6E3 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x6E3 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x115D JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x115D JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x28 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x474 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x474 JUMPI JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x31B9 DUP2 PUSH2 0x30C3 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6E3 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x31E1 DUP3 PUSH2 0x31BF JUMP JUMPDEST PUSH2 0x31EE PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x30DF JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x321C DUP3 SWAP5 PUSH2 0x31BF JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x323A JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS SUB PUSH2 0x3278 JUMPI JUMP JUMPDEST PUSH32 0x9FD25B3600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x332A PUSH1 0x20 PUSH2 0x32D1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x315A JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x40 MLOAD PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE CALLER PUSH1 0x24 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE SWAP1 SWAP3 DUP4 SWAP2 PUSH1 0x8 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP2 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1899 JUMPI PUSH0 SWAP2 PUSH2 0x336C JUMPI JUMPDEST POP ISZERO PUSH2 0x3344 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x338E SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3394 JUMPI JUMPDEST PUSH2 0x3386 DUP2 DUP4 PUSH2 0x30DF JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3793 JUMP JUMPDEST PUSH0 PUSH2 0x333C JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x337C JUMP JUMPDEST PUSH4 0xFFFFFFFF PUSH32 0x0 AND TIMESTAMP GT ISZERO DUP1 PUSH2 0x33CD JUMPI SWAP1 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x7 SLOAD DUP2 SHR AND SWAP1 JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x3406 JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x344E JUMPI POP JUMP JUMPDEST PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x0 TLOAD ISZERO PUSH2 0x34A2 JUMPI JUMP JUMPDEST PUSH32 0xC09BA73600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x34EC JUMPI POP JUMP JUMPDEST PUSH32 0x85F4129900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x3521 SWAP1 PUSH2 0x37C7 JUMP JUMPDEST SWAP1 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP3 EQ PUSH2 0x474 JUMPI PUSH2 0x3555 SWAP2 PUSH0 SUB SWAP1 PUSH2 0x381C JUMP JUMPDEST JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 GT SWAP1 DUP2 ISZERO PUSH2 0x35AF JUMPI JUMPDEST POP PUSH2 0x3587 JUMPI PUSH2 0x3584 SWAP2 PUSH1 0x80 SHL PUSH2 0x314D JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH32 0x89560CA100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP DUP3 GT PUSH0 PUSH2 0x3573 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x7 SLOAD PUSH1 0x2 SHR AND PUSH2 0x35C8 JUMPI JUMP JUMPDEST PUSH32 0xF27DF0900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x2710 DUP2 LT PUSH2 0x35FC JUMPI POP JUMP JUMPDEST PUSH32 0x34BDBFAA00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP3 DUP4 ISZERO PUSH2 0x36B3 JUMPI PUSH32 0xD66F031D33381C6408F0B32C884461E5DE3DF8808399B6F3A3D86B1368F8EC34 SWAP2 PUSH1 0x20 SWAP2 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0xD DUP3 MSTORE PUSH2 0x3677 DUP2 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x314D JUMP JUMPDEST PUSH2 0x3680 DUP2 PUSH2 0x35F0 JUMP JUMPDEST DUP5 PUSH0 MSTORE PUSH1 0xD DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0xC DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP6 PUSH0 MSTORE DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x36A8 DUP3 DUP3 SLOAD PUSH2 0x314D JUMP JUMPDEST SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG3 JUMP JUMPDEST PUSH32 0xDBE6B10E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE PUSH1 0x7 SLOAD AND OR PUSH1 0x7 SSTORE PUSH32 0xBD204090FD387F08E3076528BF09B4FC99D8100D749EACE96C06002D3FEDC625 PUSH0 DUP1 LOG1 JUMP JUMPDEST DUP3 ISZERO PUSH2 0x376B JUMPI PUSH1 0x1 SWAP2 PUSH2 0x373E SWAP2 PUSH2 0x3058 JUMP JUMPDEST SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x115D JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x115D JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x37C4 JUMPI PUSH2 0x3555 SWAP1 PUSH2 0x3997 JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x37F1 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 ISZERO PUSH2 0x390A JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 SWAP2 AND DUP1 PUSH0 MSTORE DUP2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD DUP4 DUP2 ADD SWAP4 DUP5 SLT PUSH0 DUP3 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x474 JUMPI DUP4 PUSH2 0x38D1 JUMPI POP PUSH32 0x0 DUP1 TLOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 ADD SWAP2 DUP3 GT PUSH2 0x474 JUMPI TSTORE JUMPDEST PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TSTORE JUMP JUMPDEST PUSH2 0x38C5 JUMPI PUSH32 0x0 DUP1 TLOAD SWAP1 PUSH1 0x1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x474 JUMPI TSTORE PUSH2 0x38C5 JUMP JUMPDEST POP POP JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x18 SHR PUSH2 0x10BF JUMPI PUSH1 0x2A SHL SWAP1 PUSH3 0xFFFFFF PUSH1 0x2A SHL NOT AND OR SWAP1 JUMP JUMPDEST PUSH32 0xB4120F1400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x100 DUP1 DUP5 LT ISZERO PUSH2 0x3928 JUMPI DUP4 DUP2 SUB SWAP1 DUP2 GT PUSH2 0x474 JUMPI DUP1 PUSH1 0xFF LT PUSH0 EQ PUSH2 0x3992 JUMPI POP PUSH1 0xFF JUMPDEST PUSH1 0x18 GT PUSH2 0x3928 JUMPI DUP1 PUSH1 0x18 SHR PUSH2 0x10BF JUMPI PUSH3 0xFFFFFF SWAP1 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST PUSH2 0x3974 JUMP JUMPDEST PUSH1 0x20 PUSH2 0x332A SWAP2 PUSH2 0x39C9 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x315A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x9 SLOAD PUSH1 0x8 SHR AND SWAP1 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP5 DUP3 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE CALLER SWAP1 PUSH1 0x4 DUP6 ADD SWAP2 PUSH1 0x40 SWAP2 SWAP5 SWAP4 PUSH1 0x60 DUP5 ADD SWAP6 DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND PUSH1 0x20 DUP6 ADD MSTORE AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x3A38 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH3 0xFFFFFF SWAP1 PUSH1 0x42 SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x474 JUMPI SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x80 PUSH8 0xDE0B6B3A7640000 PUSH2 0x3AD8 PUSH2 0x3AE1 SWAP5 DUP1 PUSH2 0x3AAB DUP7 PUSH1 0x60 DUP11 ADD MLOAD PUSH2 0x3226 JUMP JUMPDEST MSTORE PUSH2 0x3AD3 PUSH2 0x3ABD DUP7 PUSH1 0xC0 DUP11 ADD MLOAD PUSH2 0x3226 JUMP JUMPDEST MLOAD PUSH2 0x3ACC DUP8 PUSH1 0xA0 DUP12 ADD MLOAD PUSH2 0x3226 JUMP JUMPDEST MLOAD SWAP3 PUSH2 0x3058 JUMP JUMPDEST PUSH2 0x3058 JUMP JUMPDEST DIV SWAP4 ADD MLOAD PUSH2 0x3226 JUMP JUMPDEST MSTORE JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2D 0xD0 CALLVALUE ORIGIN MCOPY LOG1 SLT PUSH29 0x120DDCF76F0F4728A3AF63C5C92E2A04BDF8A9CBD496F36364736F6C63 NUMBER STOP ADDMOD SHL STOP CALLER ","sourceMap":"2072:32096:69:-:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;2072:32096:69;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;3400:40:73;2072:32096:69;;;;;:::i;:::-;;;;-1:-1:-1;;;2072:32096:69;;;;3400:40:73;:::i;:::-;;;3501:47;2072:32096:69;;;;;:::i;:::-;;;;-1:-1:-1;;;2072:32096:69;;;;3501:47:73;:::i;:::-;;;3601:41;2072:32096:69;;;;;:::i;:::-;;;;-1:-1:-1;;;2072:32096:69;;;;3601:41:73;:::i;:::-;;;;;;3703:48;2072:32096:69;;;;;:::i;:::-;;;;-1:-1:-1;;;2072:32096:69;;;;3703:48:73;:::i;:::-;;;;;;3802:39;2072:32096:69;;;;;:::i;:::-;;;;-1:-1:-1;;;2072:32096:69;;;;3802:39:73;:::i;:::-;;;;;;1347:46:37;;;;409:14:72;;;;2072:32096:69;;;;3503:48;2194:12:73;3503:48:69;;3499:120;;2072:32096;;;3632:50;2268:8:73;3632:50:69;;3628:123;;3844:15;2268:8:73;3844:15:69;;;2268:8:73;;;15369:24:119;;;15365:103;;-1:-1:-1;2072:32096:69;;3904:45;;;;3959:49;;;;2268:8:73;;;;;;;4018:69:69;;;;2072:32096;4098:38;2072:32096;4146:36;2072:32096;;;;;;;;;;;;;;;;;;;;3400:40:73;2072:32096:69;;;;;3501:47:73;2072:32096:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2268:8:73;;;;-1:-1:-1;2268:8:73;2072:32096:69;2268:8:73;;;-1:-1:-1;2268:8:73;15365:103:119;15416:41;;;-1:-1:-1;15416:41:119;;2072:32096:69;;;;-1:-1:-1;15416:41:119;3628:123:69;3705:35;;;-1:-1:-1;3705:35:69;;-1:-1:-1;3705:35:69;3499:120;3574:34;;;-1:-1:-1;3574:34:69;;-1:-1:-1;3574:34:69;2072:32096;-1:-1:-1;2072:32096:69;;;;;;;;;-1:-1:-1;;;;;2072:32096:69;;;;;;;:::o;:::-;2268:8:73;;;2072:32096:69;;;;;;;;;;;;;-1:-1:-1;;2072:32096:69;;;;-1:-1:-1;;;;;2072:32096:69;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;9892:177:73:-;2072:32096:69;;;;;;:::i;:::-;;;;1461:67:47;2072:32096:69;;;;-1:-1:-1;;;2072:32096:69;;;;;1461:67:47;;;;;;2072:32096:69;;;;;;;;;;;;;;-1:-1:-1;;;2072:32096:69;;;;;;;;;;;;;;;-1:-1:-1;2072:32096:69;;;;1461:67:47;;;;;;;;;:::i;:::-;2072:32096:69;1451:78:47;;-1:-1:-1;;2072:32096:69;;;;;;;;;1432:103:47;2072:32096:69;1432:103:47;;2072:32096:69;;;;1432:103:47;;;;;:::i;:::-;2072:32096:69;;1405:144:47;;-1:-1:-1;;1405:170:47;;9892:177:73:o"},"deployedBytecode":{"functionDebugData":{"abi_decode_address_fromMemory":{"entryPoint":12576,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":14227,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IERC4626":{"entryPoint":12243,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_contract_IERC4626t_uint256t_uint256t_uint256t_address":{"entryPoint":12265,"id":null,"parameterSlots":1,"returnSlots":5},"abi_encode_array_uint256_dyn":{"entryPoint":12325,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bytes32_address_address":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_uint256_uint256_bytes32":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"allocate_and_zero_memory_array_array_uint256_dyn":{"entryPoint":12759,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_contract_IERC20_dyn":{"entryPoint":12735,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_uint256":{"entryPoint":12621,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_uint256_50116":{"entryPoint":12607,"id":null,"parameterSlots":1,"returnSlots":1},"checked_div_uint256":{"entryPoint":12395,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256":{"entryPoint":12376,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_uint256":{"entryPoint":12450,"id":null,"parameterSlots":2,"returnSlots":1},"constant_AGGREGATE_YIELD_FEE_OFFSET":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"constant_DECIMAL_SCALING_FACTORS_OFFSET":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"finalize_allocation":{"entryPoint":12511,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_49837":{"entryPoint":12463,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_50103":{"entryPoint":12483,"id":null,"parameterSlots":1,"returnSlots":0},"fun_accountDelta":{"entryPoint":14364,"id":24964,"parameterSlots":2,"returnSlots":0},"fun_authenticateCaller":{"entryPoint":12960,"id":5469,"parameterSlots":0,"returnSlots":0},"fun_disableQuery":{"entryPoint":14043,"id":23725,"parameterSlots":0,"returnSlots":0},"fun_ensureAuthenticated":{"entryPoint":14743,"id":24703,"parameterSlots":1,"returnSlots":0},"fun_ensureAuthenticatedByRole":{"entryPoint":14251,"id":24646,"parameterSlots":2,"returnSlots":0},"fun_ensureBufferInitialized":{"entryPoint":13514,"id":25235,"parameterSlots":1,"returnSlots":0},"fun_ensureBufferMinimumTotalSupply":{"entryPoint":13808,"id":24606,"parameterSlots":1,"returnSlots":0},"fun_ensureRegisteredPool":{"entryPoint":13358,"id":25147,"parameterSlots":1,"returnSlots":0},"fun_ensureUnlocked":{"entryPoint":13433,"id":24863,"parameterSlots":0,"returnSlots":0},"fun_ensureVaultBuffersAreNotPaused":{"entryPoint":13753,"id":25109,"parameterSlots":0,"returnSlots":0},"fun_ensureVaultDelegateCall":{"entryPoint":12903,"id":31177,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":12634,"id":5487,"parameterSlots":1,"returnSlots":1},"fun_getAggregateYieldFeePercentage":{"entryPoint":14949,"id":30183,"parameterSlots":1,"returnSlots":1},"fun_insertUint":{"entryPoint":14606,"id":7523,"parameterSlots":2,"returnSlots":1},"fun_insertUint_49840":{"entryPoint":14672,"id":7523,"parameterSlots":3,"returnSlots":1},"fun_isVaultPaused":{"entryPoint":13211,"id":25014,"parameterSlots":0,"returnSlots":1},"fun_mintBufferShares":{"entryPoint":13863,"id":24192,"parameterSlots":3,"returnSlots":0},"fun_mulDivUp":{"entryPoint":14124,"id":8034,"parameterSlots":3,"returnSlots":1},"fun_nonReentrantBefore":{"entryPoint":13273,"id":9916,"parameterSlots":0,"returnSlots":0},"fun_supplyCredit":{"entryPoint":13591,"id":24891,"parameterSlots":2,"returnSlots":0},"fun_toInt256":{"entryPoint":14279,"id":44982,"parameterSlots":1,"returnSlots":1},"fun_toPackedBalance":{"entryPoint":13655,"id":6303,"parameterSlots":2,"returnSlots":1},"fun_updateRawAndLiveBalance":{"entryPoint":14984,"id":30978,"parameterSlots":3,"returnSlots":0},"memory_array_index_access_contract_IERC20_dyn":{"entryPoint":12838,"id":null,"parameterSlots":2,"returnSlots":1},"validator_assert_enum_TokenType":{"entryPoint":14894,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"5427":[{"length":32,"start":12677}],"28110":[{"length":32,"start":641},{"length":32,"start":724},{"length":32,"start":808},{"length":32,"start":1213},{"length":32,"start":1892},{"length":32,"start":2582},{"length":32,"start":2917},{"length":32,"start":3112},{"length":32,"start":3267},{"length":32,"start":3361},{"length":32,"start":3857},{"length":32,"start":4912},{"length":32,"start":6594},{"length":32,"start":6773},{"length":32,"start":7101},{"length":32,"start":7197},{"length":32,"start":7936},{"length":32,"start":8180},{"length":32,"start":8300},{"length":32,"start":9201},{"length":32,"start":9387},{"length":32,"start":10683},{"length":32,"start":10770},{"length":32,"start":11258},{"length":32,"start":11411},{"length":32,"start":11691},{"length":32,"start":11894},{"length":32,"start":11993},{"length":32,"start":12176}],"28194":[{"length":32,"start":1832}],"28196":[{"length":32,"start":11185}],"28201":[{"length":32,"start":13435}],"28206":[{"length":32,"start":14455},{"length":32,"start":14551}],"28211":[{"length":32,"start":14380}],"28265":[{"length":32,"start":6877},{"length":32,"start":7878},{"length":32,"start":7998}],"28267":[{"length":32,"start":4844},{"length":32,"start":8037},{"length":32,"start":13218}],"28269":[{"length":32,"start":1089},{"length":32,"start":3621},{"length":32,"start":4602},{"length":32,"start":11111},{"length":32,"start":11634}]},"linkReferences":{},"object":"6080604052600436101561009f575b361561007757346100775760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7420696d706c656d656e74656400000000000000000000000000000000006044820152fd5b7ff2238896000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f5f3560e01c80630387587d14612f70578063058a628f14612eae578063098401f514612e615780630b7562be14612d9657806320c1fb7a14612d5657806326a8a99114612d3a5780632d77138914612c695780632e42f4d514612c4e5780634021fe0f14612bd457806353956aa214612b9a57806355aca1ec146129f457806355cba7fe146129a65780635dcacd64146124945780635e0b06f4146123ce578063653eb3b014612053578063821440f214611fde578063851c1bb314611f8c57806385c8c01514611eea5780638a8d123a14611ea95780638f4ab9ca14611bff5780639385e39a14611b855780639e0879c214611a5f578063a8175b2714611a43578063b9212b49146119ac578063bffb78b214611310578063cd51c12f146112cf578063d0965a6b146112b1578063d15126ba14610eef578063d2c725e014610eb0578063dc3f574e14610cfa578063de1a36a614610cad578063e085c5a814610c12578063e0d5560514610b4f578063e253670a146109f3578063e2a92b1a1461074b578063e2cb0ba014610710578063ebc7955c146104a1578063f21c38cd14610309578063f2784e07146102a85763fbfa77cf14610262575061000e565b346102a557806003193601126102a55760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b80fd5b50346102a55760206003193601126102a55760406020916001600160a01b036102cf612fd3565b6102f87f0000000000000000000000000000000000000000000000000000000000000000613267565b168152600d83522054604051908152f35b50346102a55760206003193601126102a557610323612fd3565b61034c7f0000000000000000000000000000000000000000000000000000000000000000613267565b6103558161342e565b6103796001600160a01b039182811692835f52600160205260405f205416906137ab565b805f525f60205260405f205460018160021c1663ffffffff80836103a361039e605a90565b61313f565b1c168261043b575b50501561040f5760207f57e20448028297190122571be7cb6c1b1ef85730c673f7c72f533c8662419aa7917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb5f91858352828452166040822055604051908152a280f35b507ffdcd6894000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b908092507f0000000000000000000000000000000000000000000000000000000000000000160181811161047457164211155f806103ab565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b50346102a55760806003193601126102a5576104bb612fd3565b7f00000000000000000000000000000000000000000000000000000000000000006104e581613267565b6001600160a01b03906040519260209280848601927f5dcacd640000000000000000000000000000000000000000000000000000000084521660248601526024356044860152604435606486015260643560848601523360a486015260a4855260e085019067ffffffffffffffff92868310848411176106e357601f948389809460448b8496856040527f48c894910000000000000000000000000000000000000000000000000000000086528c60e4830152848251918261010485015282610124918286015e83830101527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09b018b168101030193165af19485156106d8578695610618575b5050505060408280518101031261061457604080935081830151920151908351928352820152f35b8280fd5b9091929394503d8087843e61062d81846130df565b810191858260e085019403126106d45751908382116106d457018160ff820112156106d05760e0810151916101009383116106a357908693929161067b8760405197601f86011601876130df565b82865283838301011161069f5785928291018386015e83010152905f8080806105ec565b8380fd5b6024877f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8580fd5b8680fd5b6040513d88823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b50346102a557806003193601126102a55760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b50346102a55761075a36612fe9565b61078895919294957f0000000000000000000000000000000000000000000000000000000000000000613267565b610790613479565b6107986135b9565b6107a1866134ca565b6107a96133d9565b6001600160a01b0392838716916040517f38d52e0f0000000000000000000000000000000000000000000000000000000081526020958682600481885afa9182156106d85786926109c4575b50848652600e875280604087205416911680910361099457838552600b8652604085205497600d87526040862054916fffffffffffffffffffffffffffffffff8a169161085261084685888661372c565b9b60801c94878661372c565b99808c116109605750808a1161092c5750936108fd936108cd60409c946108c78c6108c18f6108df986108bc8e6108b37f75c4dc5f23640eeba7d404d9165f515fc3d9e23a5c8b6e2d09b4b9da56ff00a99f6108ad866137c7565b9061381c565b6108ad866137c7565b61314d565b9261314d565b90613557565b93878952600b8a52848d8a2055613627565b8851918291888a846040919493926060820195825260208201520152565b0390a27f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d8351928352820152f35b876064918b897f8eda85e4000000000000000000000000000000000000000000000000000000008452600452602452604452fd5b886064918d857f8eda85e4000000000000000000000000000000000000000000000000000000008452600452602452604452fd5b84604491857f36b18d09000000000000000000000000000000000000000000000000000000008352600452602452fd5b6109e5919250873d89116109ec575b6109dd81836130df565b810190613120565b905f6107f5565b503d6109d3565b50346102a55760406003193601126102a557610a0d612fd3565b60243590610a3a7f0000000000000000000000000000000000000000000000000000000000000000613267565b610a438161342e565b670de0b6b3a76400008211610b27576001600160a01b039081600a54163303610aff571690818352826020526040832054670de0b5cad2bef0008211610ad7577f606eb97d83164bd6b200d638cd49c14c65d94d4f2c674cfd85e24e0e202c3ca591610ac2602092610ab3604290565b9064174876e800840490613950565b8486528583526040862055604051908152a280f35b6004847f746e5940000000000000000000000000000000000000000000000000000000008152fd5b6004847f23dada53000000000000000000000000000000000000000000000000000000008152fd5b6004837f4c69ac5d000000000000000000000000000000000000000000000000000000008152fd5b50346102a557806003193601126102a557610b897f0000000000000000000000000000000000000000000000000000000000000000613267565b610b916132a0565b60ff60095416610bea577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe600754166007557f91d7478835f2b5adc315f5aad920f4a7f0a02f7fddf3042d17b2c80168ea17f58180a180f35b807f069f8cbc0000000000000000000000000000000000000000000000000000000060049252fd5b50346102a557806003193601126102a557610c4c7f0000000000000000000000000000000000000000000000000000000000000000613267565b610c546132a0565b60047ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb60075416176007557f300c7ca619eb846386aa0a6e5916ac2a41406448b0a2e99ba9ccafeb899015a5602060405160018152a180f35b50346102a557806003193601126102a557610ce77f0000000000000000000000000000000000000000000000000000000000000000613267565b610cef6132a0565b610cf76136db565b80f35b50346102a55760206003193601126102a5576001600160a01b03610d1c612fd3565b610d457f0000000000000000000000000000000000000000000000000000000000000000613267565b610d4e8161342e565b16808252816020526001604083205460031c16610e855780825281602052604082205460018160021c169063ffffffff8091610d8b61039e605a90565b1c1682610e1f575b50501580610e10575b610e03575b805f525f60205260405f2060087ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff78254161790557fc2354cc2f78ea57777e55ddd43a7f22b112ce98868596880edaeb22b4f9c73a9602060405160018152a280f35b610e0b6132a0565b610da1565b50610e1961339b565b15610d9c565b908092507f00000000000000000000000000000000000000000000000000000000000000001601818111610e5857164211155f80610d93565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b7f346d7607000000000000000000000000000000000000000000000000000000008252600452602490fd5b50346102a557806003193601126102a55760207f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6040519015158152f35b50346102a55760406003193601126102a557610f09612fd3565b602435610f357f0000000000000000000000000000000000000000000000000000000000000000613267565b610f3e8261342e565b6001600160a01b0380831692838552602091600183526001604087200154169081155f1461128257610f709150613997565b610f7861339b565b61125a57828452838152604084205460018160021c169063ffffffff8091610fa161039e605a90565b1c16826111f4575b50506111c8576040517fce20ece70000000000000000000000000000000000000000000000000000000081528181600481875afa90811561116857859161119b575b508210611173576040517f654cf15d0000000000000000000000000000000000000000000000000000000081528181600481875afa908115611168578591611137575b50821161110f57828452838152604084205491670de0b5cad2bef00081116110e75764174876e8008104928360181c6110bf577ffffffffffffffffffffffffffffffffffffffffffffffffffffffc000003ffff7f89d41522342fabac1471ca6073a5623e5caf367b03ca6e9a001478d0cf8be4a19486885287855260121b9116176040862055604051908152a280f35b7fe4337c05000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004857f746e5940000000000000000000000000000000000000000000000000000000008152fd5b6004847f7f47834b000000000000000000000000000000000000000000000000000000008152fd5b90508181813d8311611161575b61114e81836130df565b8101031261115d57515f61102e565b5f80fd5b503d611144565b6040513d87823e3d90fd5b6004847fbfb20688000000000000000000000000000000000000000000000000000000008152fd5b90508181813d83116111c1575b6111b281836130df565b8101031261115d57515f610feb565b503d6111a8565b602484847fd971f597000000000000000000000000000000000000000000000000000000008252600452fd5b908092507f0000000000000000000000000000000000000000000000000000000000000000160181811161122d57164211155f80610fa9565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6004847fda9f8b34000000000000000000000000000000000000000000000000000000008152fd5b503314610f70576004847f23dada53000000000000000000000000000000000000000000000000000000008152fd5b50346102a557806003193601126102a5576020604051620f42408152f35b50346102a557806003193601126102a557602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102a55760206003193601126102a55761132a612fd3565b906113547f0000000000000000000000000000000000000000000000000000000000000000613267565b61135d8261342e565b6113656132a0565b6001600160a01b0382168152806020526001604082205460031c16156119785761138d6133d9565b6040519160e0830183811067ffffffffffffffff8211176106e3576040525f8352606060208401526060604084015260608084015260606080840152606060a0840152606060c08401526001600160a01b0381165f52600560205260405f205f60205260405f205490600460205260405f2090600360205260405f2080549387526040519060208286815201905f528160205f20915f5b8781106119555750611438925003826130df565b6020870152611446836131bf565b61145360405191826130df565b8381527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611480856131bf565b015f5b81811061192c575050604087015261149a836131d7565b60608701526114a8836131d7565b6080870152855164ffffffffff6114be856131d7565b91605a1c165f5b8581106118f057505060c08701526114dc836131d7565b60a0870152855191600183811c1692836118dc575b50826118cc575b5f5b8481106115ee578787876001600160a01b0381165f52600560205260405f20905f5b60608501518051821015611562579061155061153a82600194613226565b516115498360808a0151613226565b5190613557565b815f528460205260405f20550161151c565b84835f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d6001600160a01b03165f8181526020818152604080832080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7169055519182527fc2354cc2f78ea57777e55ddd43a7f22b112ce98868596880edaeb22b4f9c73a991a280f35b6001600160a01b036116048260208b0151613226565b51165f528160205260405f20906040519161161e836130c3565b5460ff9081811661162e81613a2e565b84526001600160a01b038160081c16602085015260a81c1615156040830152805f528360205260405f2054916116748260408c01518361166e8383613226565b52613226565b50805161168081613a2e565b61168981613a2e565b806118055750670de0b6b3a76400005b6116a78360a08d0151613226565b526116c56fffffffffffffffffffffffffffffffff8416838c613a88565b85156117fb576040810151151590816117dd575b506116ea575b600191505b016114fa565b886116f58151613a65565b611703836060840151613226565b519360801c6117178460805f950151613226565b5181811161174e575b50505060019281611733575b50506116df565b61174791611740916130a2565b828b613a88565b5f8061172c565b611759935003613058565b91670de0b6b3a7640000926001847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83010401901515026117b88b6117b18560a06117a88260c0860151613226565b51930151613226565b5190613058565b8185810204851482151715610474576001946117d4920261306b565b90925f80611720565b60019150516117eb81613a2e565b6117f481613a2e565b145f6116d9565b50600191506116e4565b80611811600192613a2e565b036118a457600460206001600160a01b038184015116604051928380927f679aefce0000000000000000000000000000000000000000000000000000000082525afa908115611899575f91611867575b50611699565b90506020813d602011611891575b81611882602093836130df565b8101031261115d57515f611861565b3d9150611875565b6040513d5f823e3d90fd5b7fdf450632000000000000000000000000000000000000000000000000000000005f5260045ffd5b865160031c6001161592506114f8565b6118e7919350613a65565b1515915f6114f1565b60058102908082046005148115171561047457604d601f84841c161161047457601f836001931c16600a0a6119258286613226565b52016114c5565b60209060405161193b816130c3565b5f81525f838201525f604082015282828601015201611483565b91506001602081926001600160a01b038654168152019301910191839192611424565b6001600160a01b036024927fef029adf00000000000000000000000000000000000000000000000000000000835216600452fd5b50346102a557806003193601126102a5576119e67f0000000000000000000000000000000000000000000000000000000000000000613267565b6119ee6132a0565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb600754166007557f300c7ca619eb846386aa0a6e5916ac2a41406448b0a2e99ba9ccafeb899015a560206040515f8152a180f35b50346102a557806003193601126102a557602060405160028152f35b50346102a557806003193601126102a557611a997f0000000000000000000000000000000000000000000000000000000000000000613267565b611aa16132a0565b611aa961339b565b15611ad6577fda9f8b34000000000000000000000000000000000000000000000000000000005f5260045ffd5b63ffffffff7f000000000000000000000000000000000000000000000000000000000000000016421015611b5d5760027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60075416176007557fe0629fe656e45ad7fd63a24b899da368690024c07043b88e57aee5095b1d3d02602060405160018152a180f35b7f0e4460b7000000000000000000000000000000000000000000000000000000005f5260045ffd5b50346102a55760406003193601126102a557611b9f612fd3565b602435916001600160a01b0380841680940361115d57604092611be17f0000000000000000000000000000000000000000000000000000000000000000613267565b168152600c60205220905f52602052602060405f2054604051908152f35b50346102a557602080600319360112611ea557611c1a612fd3565b907f0000000000000000000000000000000000000000000000000000000000000000611c4581613267565b611c4d613479565b6001600160a01b039283600a54163303611e7d57938084602487611c71839961342e565b60405197889384927fca4f28030000000000000000000000000000000000000000000000000000000084521696876004840152165afa938415611e70578194611dd0575b50835192611ccb611cc5856131d7565b946131d7565b90825b8651811015611da2578088611ce56001938a613226565b511686865260069081855260408720815f5285526fffffffffffffffffffffffffffffffff60405f20548060801c611d1d868a613226565b5216611d29848b613226565b52611d34838a613226565b5115801590611d8f575b611d4b575b505001611cce565b611d8891888852855260408720815f5285528660405f2055611d82611d70848b613226565b51611d7b8589613226565b519061314d565b90613517565b5f80611d43565b50611d9a8387613226565b511515611d3e565b611dbf86611dcc8486604051948594604086526040860190613025565b9184830390850152613025565b0390f35b9093503d8085833e611de281836130df565b8101908381830312611e6c5780519067ffffffffffffffff82116106d057019080601f83011215611e6c578151611e18816131bf565b92611e2660405194856130df565b818452858085019260051b8201019283116106d4578501905b828210611e5057505050925f611cb5565b81518881168103611e68578152908501908501611e3f565b8780fd5b8480fd5b50604051903d90823e3d90fd5b6004857f23dada53000000000000000000000000000000000000000000000000000000008152fd5b5080fd5b50346102a557806003193601126102a557602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102a557806003193601126102a557611f247f0000000000000000000000000000000000000000000000000000000000000000613267565b6060611f2e61339b565b604051901515815263ffffffff807f00000000000000000000000000000000000000000000000000000000000000001660208301527f0000000000000000000000000000000000000000000000000000000000000000166040820152f35b50346102a55760206003193601126102a557600435907fffffffff00000000000000000000000000000000000000000000000000000000821682036102a5576020611fd68361315a565b604051908152f35b50346102a557806003193601126102a5576120187f0000000000000000000000000000000000000000000000000000000000000000613267565b6120206132a0565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff006009541617600955610cf76136db565b50346102a55761206236612fe9565b94926120909291927f0000000000000000000000000000000000000000000000000000000000000000613267565b612098613479565b6120a06135b9565b6120a86133d9565b6001600160a01b039586861693848652602097600e8952806040882054166123a2576040517f38d52e0f00000000000000000000000000000000000000000000000000000000815289816004818a5afa90811561234e578891612385575b501680156123595761214e90868852600e8a5260408820817fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556108ad856137c7565b61216061215a856137c7565b8661381c565b61216a8484613557565b91858752600b89528260408820556040517f4cdad50600000000000000000000000000000000000000000000000000000000815285600482015289816024818a5afa801561234e578590899061231d575b6121c5925061314d565b976121cf896135f0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8f089019889116122f05761225291899189897fd66f031d33381c6408f0b32c884461e5de3df8808399b6f3a3d86b1368f8ec348e828452600d8152612710806040862055600c8252604085205f805282528060405f2055604051908152a3613627565b8087106122c05750604080519283526020830193909352918101919091527f75c4dc5f23640eeba7d404d9165f515fc3d9e23a5c8b6e2d09b4b9da56ff00a990606090a27f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051908152f35b85604491887fda0cb07e000000000000000000000000000000000000000000000000000000008352600452602452fd5b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b50508981813d8311612347575b61233481836130df565b8101031261115d57846121c591516121bb565b503d61232a565b6040513d8a823e3d90fd5b602487877fd407f9c5000000000000000000000000000000000000000000000000000000008252600452fd5b61239c91508a3d8c116109ec576109dd81836130df565b5f612106565b602487877f1690fa40000000000000000000000000000000000000000000000000000000008252600452fd5b50346102a55760406003193601126102a5576123e8612fd3565b602435906124157f0000000000000000000000000000000000000000000000000000000000000000613267565b61241e8161342e565b670de0b6b3a76400008211610b27576001600160a01b039081600a54163303610aff571690818352826020526040832054670de0b5cad2bef0008211610ad75781610ac260209264174876e8007fe4d371097beea42453a37406e2aef4c04f3c548f84ac50e72578662c0dcd735495049061390e565b503461115d576124a336612fe9565b9490929193947f00000000000000000000000000000000000000000000000000000000000000006124d381613267565b6001600160a01b038116330361297a576124eb613479565b6124f4876134ca565b3215808061296d575b612905575b506001600160a01b0387165f52600c60205260405f206001600160a01b0383165f5260205260405f205484116128dd576001600160a01b0387165f52600b60205260405f205495600d60205260405f20549661258a61257c89612577896fffffffffffffffffffffffffffffffff8616613058565b61306b565b98612577888460801c613058565b966001600160a01b038a165f52600e6020526001600160a01b0360405f20541692808a106128aa575080881061286e5750612605906125c98984613517565b6125dc886001600160a01b038c16613517565b6108c7886125fc8b6fffffffffffffffffffffffffffffffff85166130a2565b9260801c6130a2565b946001600160a01b0389165f52600b6020528560405f20556001600160a01b03841615612846576001600160a01b0389165f52600d60205261264b8160405f20546130a2565b612654816135f0565b6001600160a01b038a165f52600d60205260405f2055600c60205260405f206001600160a01b0385165f5260205260405f206126918282546130a2565b90556040519081526001600160a01b038416907f4e09f7f7fc37ce2897800e2c2a9099565edb0a133d19d84a6871b3530af8846b60206001600160a01b038c1692a3866127c5575b5084612735575b5050604080518581526020810185905280820193909352946001600160a01b0316917f44d97b36e99b590b3d2875aad3b167b1d7fb1e063f3f1325a1eeac76caee51139150606090a282519182526020820152f35b6001600160a01b0381163b15610614576001600160a01b03606488858381958160405198899788967fae6393290000000000000000000000000000000000000000000000000000000088521660048701521660248501528a6044850152165af180156127ba576127a6575b806126e0565b6127b082916130af565b6102a557806127a0565b6040513d84823e3d90fd5b6001600160a01b0382163b1561115d57604051907fae63932900000000000000000000000000000000000000000000000000000000825260048201526001600160a01b03831660248201528660448201525f81606481836001600160a01b0387165af1801561189957156126d95761283e9193506130af565b5f915f6126d9565b7f586d06df000000000000000000000000000000000000000000000000000000005f5260045ffd5b876001600160a01b038b7f8eda85e4000000000000000000000000000000000000000000000000000000005f521660045260245260445260645ffd5b89847f8eda85e4000000000000000000000000000000000000000000000000000000005f5260045260245260445260645ffd5b7f98c5dbd6000000000000000000000000000000000000000000000000000000005f5260045ffd5b15612945576001600160a01b0387165f52600c60205260405f206001600160a01b0383165f5260205260405f2061293d85825461314d565b90555f612502565b7f67f84ab2000000000000000000000000000000000000000000000000000000005f5260045ffd5b50600160075416156124fd565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b3461115d575f60031936011261115d576129df7f0000000000000000000000000000000000000000000000000000000000000000613267565b6020600160075460021c166040519015158152f35b3461115d57602060031936011261115d57612a0d612fd3565b612a367f0000000000000000000000000000000000000000000000000000000000000000613267565b612a3f8161342e565b612a636001600160a01b039182811692835f52600160205260405f205416906137ab565b805f525f60205260405f205460018160021c1663ffffffff908183612a8961039e605a90565b1c1681612b62575b5015612ac357827fd971f597000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b81612ace605a61313f565b1c16421015612b36577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb600491835f525f602052161760405f20557f57e20448028297190122571be7cb6c1b1ef85730c673f7c72f533c8662419aa7602060405160018152a2005b507feb5a1217000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9050817f0000000000000000000000000000000000000000000000000000000000000000160181811161047457811642111584612a91565b3461115d575f60031936011261115d5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461115d57602060031936011261115d576001600160a01b03612bf5612fd3565b612c1e7f0000000000000000000000000000000000000000000000000000000000000000613267565b165f52600b6020526040805f20548151906fffffffffffffffffffffffffffffffff8116825260801c6020820152f35b3461115d575f60031936011261115d57602060405160088152f35b3461115d57602060031936011261115d576004356001600160a01b03811680910361115d57612cb77f0000000000000000000000000000000000000000000000000000000000000000613267565b612cbf6132a0565b612cc76133d9565b807fffffffffffffffffffffffff0000000000000000000000000000000000000000600a541617600a557f280a60b1e63c1774d397d35cce80eb80e51408ead755fb446e6f744ce98e5df05f80a25f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b3461115d575f60031936011261115d5760206040516127108152f35b3461115d575f60031936011261115d57602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461115d575f60031936011261115d57612dcf7f0000000000000000000000000000000000000000000000000000000000000000613267565b612dd76132a0565b612ddf61339b565b15612e39577fe0629fe656e45ad7fd63a24b899da368690024c07043b88e57aee5095b1d3d0260205f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60075416600755604051908152a1005b7ff7ff4dca000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461115d575f60031936011261115d57612e9a7f0000000000000000000000000000000000000000000000000000000000000000613267565b6020612ea461339b565b6040519015158152f35b3461115d57602060031936011261115d576004356001600160a01b0381169081810361115d57612efd7f0000000000000000000000000000000000000000000000000000000000000000613267565b612f056132a0565b7fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff006009549260081b169116176009557f94b979b6831a51293e2641426f97747feed46f17779fed9cd18d1ecefcfe92ef5f80a2005b3461115d57602060031936011261115d576020612f8b612fd3565b612fb47f0000000000000000000000000000000000000000000000000000000000000000613267565b6001600160a01b038091165f52600e825260405f205416604051908152f35b600435906001600160a01b038216820361115d57565b60031960a091011261115d576001600160a01b03600435818116810361115d5791602435916044359160643591608435908116810361115d5790565b9081518082526020808093019301915f5b828110613044575050505090565b835185529381019392810192600101613036565b8181029291811591840414171561047457565b8115613075570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b9190820391821161047457565b67ffffffffffffffff81116106e357604052565b6060810190811067ffffffffffffffff8211176106e357604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176106e357604052565b9081602091031261115d57516001600160a01b038116810361115d5790565b906028820180921161047457565b9190820180921161047457565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526131b9816130c3565b51902090565b67ffffffffffffffff81116106e35760051b60200190565b906131e1826131bf565b6131ee60405191826130df565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061321c82946131bf565b0190602036910137565b805182101561323a5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6001600160a01b0316300361327857565b7f9fd25b36000000000000000000000000000000000000000000000000000000005f5260045ffd5b61332a60206132d17fffffffff000000000000000000000000000000000000000000000000000000005f351661315a565b6009546040517f9be2a88400000000000000000000000000000000000000000000000000000000815260048101929092523360248301523060448301529092839160081c6001600160a01b031690829081906064820190565b03915afa908115611899575f9161336c575b501561334457565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b61338e915060203d602011613394575b61338681836130df565b810190613793565b5f61333c565b503d61337c565b63ffffffff7f000000000000000000000000000000000000000000000000000000000000000016421115806133cd5790565b506001600754811c1690565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c613406576001905d565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160a01b0316805f525f602052600160405f2054161561344e5750565b7f9e51bd5c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f00000000000000000000000000000000000000000000000000000000000000005c156134a257565b7fc09ba736000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160a01b0380911690815f52600e60205260405f205416156134ec5750565b7f85f41299000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90613521906137c7565b907f8000000000000000000000000000000000000000000000000000000000000000821461047457613555915f039061381c565b565b6fffffffffffffffffffffffffffffffff8082119081156135af575b50613587576135849160801b61314d565b90565b7f89560ca1000000000000000000000000000000000000000000000000000000005f5260045ffd5b905082115f613573565b600160075460021c166135c857565b7f0f27df09000000000000000000000000000000000000000000000000000000005f5260045ffd5b61271081106135fc5750565b7f34bdbfaa000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b91906001600160a01b038091169283156136b3577fd66f031d33381c6408f0b32c884461e5de3df8808399b6f3a3d86b1368f8ec34916020911692835f52600d82526136778160405f205461314d565b613680816135f0565b845f52600d835260405f2055600c825260405f20855f52825260405f206136a882825461314d565b9055604051908152a3565b7fdbe6b10e000000000000000000000000000000000000000000000000000000005f5260045ffd5b60017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60075416176007557fbd204090fd387f08e3076528bf09b4fc99d8100d749eace96c06002d3fedc6255f80a1565b821561376b5760019161373e91613058565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830104019015150290565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b9081602091031261115d5751801515810361115d5790565b906001600160a01b031633146137c45761355590613997565b50565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116137f15790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b811561390a576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000009116805f528160205260405f205c8381019384125f821290801582169115161761047457836138d157507f0000000000000000000000000000000000000000000000000000000000000000805c907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211610474575d5b5f5260205260405f205d565b6138c5577f0000000000000000000000000000000000000000000000000000000000000000805c9060018201809211610474575d6138c5565b5050565b908060181c6110bf57602a1b9062ffffff602a1b19161790565b7fb4120f14000000000000000000000000000000000000000000000000000000005f5260045ffd5b906101008084101561392857838103908111610474578060ff105f14613992575060ff5b601811613928578060181c6110bf5762ffffff90831b921b19161790565b613974565b602061332a916139c97fffffffff000000000000000000000000000000000000000000000000000000005f351661315a565b6001600160a01b0360095460081c16906040518095819482937f9be2a884000000000000000000000000000000000000000000000000000000008452339060048501916040919493606084019584526001600160a01b03809216602085015216910152565b60021115613a3857565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b62ffffff9060421c1664174876e800908181029181830414901517156104745790565b91906080670de0b6b3a7640000613ad8613ae19480613aab8660608a0151613226565b52613ad3613abd8660c08a0151613226565b51613acc8760a08b0151613226565b5192613058565b613058565b04930151613226565b5256fea26469706673582212202dd034325ea1127c120ddcf76f0f4728a3af63c5c92e2a04bdf8a9cbd496f36364736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x9F JUMPI JUMPDEST CALLDATASIZE ISZERO PUSH2 0x77 JUMPI CALLVALUE PUSH2 0x77 JUMPI PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F7420696D706C656D656E7465640000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH32 0xF223889600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x387587D EQ PUSH2 0x2F70 JUMPI DUP1 PUSH4 0x58A628F EQ PUSH2 0x2EAE JUMPI DUP1 PUSH4 0x98401F5 EQ PUSH2 0x2E61 JUMPI DUP1 PUSH4 0xB7562BE EQ PUSH2 0x2D96 JUMPI DUP1 PUSH4 0x20C1FB7A EQ PUSH2 0x2D56 JUMPI DUP1 PUSH4 0x26A8A991 EQ PUSH2 0x2D3A JUMPI DUP1 PUSH4 0x2D771389 EQ PUSH2 0x2C69 JUMPI DUP1 PUSH4 0x2E42F4D5 EQ PUSH2 0x2C4E JUMPI DUP1 PUSH4 0x4021FE0F EQ PUSH2 0x2BD4 JUMPI DUP1 PUSH4 0x53956AA2 EQ PUSH2 0x2B9A JUMPI DUP1 PUSH4 0x55ACA1EC EQ PUSH2 0x29F4 JUMPI DUP1 PUSH4 0x55CBA7FE EQ PUSH2 0x29A6 JUMPI DUP1 PUSH4 0x5DCACD64 EQ PUSH2 0x2494 JUMPI DUP1 PUSH4 0x5E0B06F4 EQ PUSH2 0x23CE JUMPI DUP1 PUSH4 0x653EB3B0 EQ PUSH2 0x2053 JUMPI DUP1 PUSH4 0x821440F2 EQ PUSH2 0x1FDE JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x1F8C JUMPI DUP1 PUSH4 0x85C8C015 EQ PUSH2 0x1EEA JUMPI DUP1 PUSH4 0x8A8D123A EQ PUSH2 0x1EA9 JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0x1BFF JUMPI DUP1 PUSH4 0x9385E39A EQ PUSH2 0x1B85 JUMPI DUP1 PUSH4 0x9E0879C2 EQ PUSH2 0x1A5F JUMPI DUP1 PUSH4 0xA8175B27 EQ PUSH2 0x1A43 JUMPI DUP1 PUSH4 0xB9212B49 EQ PUSH2 0x19AC JUMPI DUP1 PUSH4 0xBFFB78B2 EQ PUSH2 0x1310 JUMPI DUP1 PUSH4 0xCD51C12F EQ PUSH2 0x12CF JUMPI DUP1 PUSH4 0xD0965A6B EQ PUSH2 0x12B1 JUMPI DUP1 PUSH4 0xD15126BA EQ PUSH2 0xEEF JUMPI DUP1 PUSH4 0xD2C725E0 EQ PUSH2 0xEB0 JUMPI DUP1 PUSH4 0xDC3F574E EQ PUSH2 0xCFA JUMPI DUP1 PUSH4 0xDE1A36A6 EQ PUSH2 0xCAD JUMPI DUP1 PUSH4 0xE085C5A8 EQ PUSH2 0xC12 JUMPI DUP1 PUSH4 0xE0D55605 EQ PUSH2 0xB4F JUMPI DUP1 PUSH4 0xE253670A EQ PUSH2 0x9F3 JUMPI DUP1 PUSH4 0xE2A92B1A EQ PUSH2 0x74B JUMPI DUP1 PUSH4 0xE2CB0BA0 EQ PUSH2 0x710 JUMPI DUP1 PUSH4 0xEBC7955C EQ PUSH2 0x4A1 JUMPI DUP1 PUSH4 0xF21C38CD EQ PUSH2 0x309 JUMPI DUP1 PUSH4 0xF2784E07 EQ PUSH2 0x2A8 JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x262 JUMPI POP PUSH2 0xE JUMP JUMPDEST CALLVALUE PUSH2 0x2A5 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH1 0x40 PUSH1 0x20 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2CF PUSH2 0x2FD3 JUMP JUMPDEST PUSH2 0x2F8 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST AND DUP2 MSTORE PUSH1 0xD DUP4 MSTORE KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH2 0x323 PUSH2 0x2FD3 JUMP JUMPDEST PUSH2 0x34C PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x355 DUP2 PUSH2 0x342E JUMP JUMPDEST PUSH2 0x379 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP2 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH2 0x37AB JUMP JUMPDEST DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x1 DUP2 PUSH1 0x2 SHR AND PUSH4 0xFFFFFFFF DUP1 DUP4 PUSH2 0x3A3 PUSH2 0x39E PUSH1 0x5A SWAP1 JUMP JUMPDEST PUSH2 0x313F JUMP JUMPDEST SHR AND DUP3 PUSH2 0x43B JUMPI JUMPDEST POP POP ISZERO PUSH2 0x40F JUMPI PUSH1 0x20 PUSH32 0x57E20448028297190122571BE7CB6C1B1EF85730C673F7C72F533C8662419AA7 SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB PUSH0 SWAP2 DUP6 DUP4 MSTORE DUP3 DUP5 MSTORE AND PUSH1 0x40 DUP3 KECCAK256 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 DUP1 RETURN JUMPDEST POP PUSH32 0xFDCD689400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP PUSH32 0x0 AND ADD DUP2 DUP2 GT PUSH2 0x474 JUMPI AND TIMESTAMP GT ISZERO PUSH0 DUP1 PUSH2 0x3AB JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH2 0x4BB PUSH2 0x2FD3 JUMP JUMPDEST PUSH32 0x0 PUSH2 0x4E5 DUP2 PUSH2 0x3267 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x40 MLOAD SWAP3 PUSH1 0x20 SWAP3 DUP1 DUP5 DUP7 ADD SWAP3 PUSH32 0x5DCACD6400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE AND PUSH1 0x24 DUP7 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x44 DUP7 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x64 DUP7 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x84 DUP7 ADD MSTORE CALLER PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xA4 DUP6 MSTORE PUSH1 0xE0 DUP6 ADD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP7 DUP4 LT DUP5 DUP5 GT OR PUSH2 0x6E3 JUMPI PUSH1 0x1F SWAP5 DUP4 DUP10 DUP1 SWAP5 PUSH1 0x44 DUP12 DUP5 SWAP7 DUP6 PUSH1 0x40 MSTORE PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP7 MSTORE DUP13 PUSH1 0xE4 DUP4 ADD MSTORE DUP5 DUP3 MLOAD SWAP2 DUP3 PUSH2 0x104 DUP6 ADD MSTORE DUP3 PUSH2 0x124 SWAP2 DUP3 DUP7 ADD MCOPY DUP4 DUP4 ADD ADD MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP12 ADD DUP12 AND DUP2 ADD SUB ADD SWAP4 AND GAS CALL SWAP5 DUP6 ISZERO PUSH2 0x6D8 JUMPI DUP7 SWAP6 PUSH2 0x618 JUMPI JUMPDEST POP POP POP POP PUSH1 0x40 DUP3 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x614 JUMPI PUSH1 0x40 DUP1 SWAP4 POP DUP2 DUP4 ADD MLOAD SWAP3 ADD MLOAD SWAP1 DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE RETURN JUMPDEST DUP3 DUP1 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 POP RETURNDATASIZE DUP1 DUP8 DUP5 RETURNDATACOPY PUSH2 0x62D DUP2 DUP5 PUSH2 0x30DF JUMP JUMPDEST DUP2 ADD SWAP2 DUP6 DUP3 PUSH1 0xE0 DUP6 ADD SWAP5 SUB SLT PUSH2 0x6D4 JUMPI MLOAD SWAP1 DUP4 DUP3 GT PUSH2 0x6D4 JUMPI ADD DUP2 PUSH1 0xFF DUP3 ADD SLT ISZERO PUSH2 0x6D0 JUMPI PUSH1 0xE0 DUP2 ADD MLOAD SWAP2 PUSH2 0x100 SWAP4 DUP4 GT PUSH2 0x6A3 JUMPI SWAP1 DUP7 SWAP4 SWAP3 SWAP2 PUSH2 0x67B DUP8 PUSH1 0x40 MLOAD SWAP8 PUSH1 0x1F DUP7 ADD AND ADD DUP8 PUSH2 0x30DF JUMP JUMPDEST DUP3 DUP7 MSTORE DUP4 DUP4 DUP4 ADD ADD GT PUSH2 0x69F JUMPI DUP6 SWAP3 DUP3 SWAP2 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 PUSH0 DUP1 DUP1 DUP1 PUSH2 0x5EC JUMP JUMPDEST DUP4 DUP1 REVERT JUMPDEST PUSH1 0x24 DUP8 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP7 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP9 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI PUSH2 0x75A CALLDATASIZE PUSH2 0x2FE9 JUMP JUMPDEST PUSH2 0x788 SWAP6 SWAP2 SWAP3 SWAP5 SWAP6 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x790 PUSH2 0x3479 JUMP JUMPDEST PUSH2 0x798 PUSH2 0x35B9 JUMP JUMPDEST PUSH2 0x7A1 DUP7 PUSH2 0x34CA JUMP JUMPDEST PUSH2 0x7A9 PUSH2 0x33D9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP8 AND SWAP2 PUSH1 0x40 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP6 DUP7 DUP3 PUSH1 0x4 DUP2 DUP9 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x6D8 JUMPI DUP7 SWAP3 PUSH2 0x9C4 JUMPI JUMPDEST POP DUP5 DUP7 MSTORE PUSH1 0xE DUP8 MSTORE DUP1 PUSH1 0x40 DUP8 KECCAK256 SLOAD AND SWAP2 AND DUP1 SWAP2 SUB PUSH2 0x994 JUMPI DUP4 DUP6 MSTORE PUSH1 0xB DUP7 MSTORE PUSH1 0x40 DUP6 KECCAK256 SLOAD SWAP8 PUSH1 0xD DUP8 MSTORE PUSH1 0x40 DUP7 KECCAK256 SLOAD SWAP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP2 PUSH2 0x852 PUSH2 0x846 DUP6 DUP9 DUP7 PUSH2 0x372C JUMP JUMPDEST SWAP12 PUSH1 0x80 SHR SWAP5 DUP8 DUP7 PUSH2 0x372C JUMP JUMPDEST SWAP10 DUP1 DUP13 GT PUSH2 0x960 JUMPI POP DUP1 DUP11 GT PUSH2 0x92C JUMPI POP SWAP4 PUSH2 0x8FD SWAP4 PUSH2 0x8CD PUSH1 0x40 SWAP13 SWAP5 PUSH2 0x8C7 DUP13 PUSH2 0x8C1 DUP16 PUSH2 0x8DF SWAP9 PUSH2 0x8BC DUP15 PUSH2 0x8B3 PUSH32 0x75C4DC5F23640EEBA7D404D9165F515FC3D9E23A5C8B6E2D09B4B9DA56FF00A9 SWAP16 PUSH2 0x8AD DUP7 PUSH2 0x37C7 JUMP JUMPDEST SWAP1 PUSH2 0x381C JUMP JUMPDEST PUSH2 0x8AD DUP7 PUSH2 0x37C7 JUMP JUMPDEST PUSH2 0x314D JUMP JUMPDEST SWAP3 PUSH2 0x314D JUMP JUMPDEST SWAP1 PUSH2 0x3557 JUMP JUMPDEST SWAP4 DUP8 DUP10 MSTORE PUSH1 0xB DUP11 MSTORE DUP5 DUP14 DUP11 KECCAK256 SSTORE PUSH2 0x3627 JUMP JUMPDEST DUP9 MLOAD SWAP2 DUP3 SWAP2 DUP9 DUP11 DUP5 PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 PUSH1 0x60 DUP3 ADD SWAP6 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE RETURN JUMPDEST DUP8 PUSH1 0x64 SWAP2 DUP12 DUP10 PUSH32 0x8EDA85E400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE REVERT JUMPDEST DUP9 PUSH1 0x64 SWAP2 DUP14 DUP6 PUSH32 0x8EDA85E400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE REVERT JUMPDEST DUP5 PUSH1 0x44 SWAP2 DUP6 PUSH32 0x36B18D0900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE REVERT JUMPDEST PUSH2 0x9E5 SWAP2 SWAP3 POP DUP8 RETURNDATASIZE DUP10 GT PUSH2 0x9EC JUMPI JUMPDEST PUSH2 0x9DD DUP2 DUP4 PUSH2 0x30DF JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3120 JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x7F5 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x9D3 JUMP JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH2 0xA0D PUSH2 0x2FD3 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xA3A PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0xA43 DUP2 PUSH2 0x342E JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP3 GT PUSH2 0xB27 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH1 0xA SLOAD AND CALLER SUB PUSH2 0xAFF JUMPI AND SWAP1 DUP2 DUP4 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP4 KECCAK256 SLOAD PUSH8 0xDE0B5CAD2BEF000 DUP3 GT PUSH2 0xAD7 JUMPI PUSH32 0x606EB97D83164BD6B200D638CD49C14C65D94D4F2C674CFD85E24E0E202C3CA5 SWAP2 PUSH2 0xAC2 PUSH1 0x20 SWAP3 PUSH2 0xAB3 PUSH1 0x42 SWAP1 JUMP JUMPDEST SWAP1 PUSH5 0x174876E800 DUP5 DIV SWAP1 PUSH2 0x3950 JUMP JUMPDEST DUP5 DUP7 MSTORE DUP6 DUP4 MSTORE PUSH1 0x40 DUP7 KECCAK256 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 DUP1 RETURN JUMPDEST PUSH1 0x4 DUP5 PUSH32 0x746E594000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP5 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP4 PUSH32 0x4C69AC5D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH2 0xB89 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0xB91 PUSH2 0x32A0 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x9 SLOAD AND PUSH2 0xBEA JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE PUSH1 0x7 SLOAD AND PUSH1 0x7 SSTORE PUSH32 0x91D7478835F2B5ADC315F5AAD920F4A7F0A02F7FDDF3042D17B2C80168EA17F5 DUP2 DUP1 LOG1 DUP1 RETURN JUMPDEST DUP1 PUSH32 0x69F8CBC00000000000000000000000000000000000000000000000000000000 PUSH1 0x4 SWAP3 MSTORE REVERT JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH2 0xC4C PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0xC54 PUSH2 0x32A0 JUMP JUMPDEST PUSH1 0x4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB PUSH1 0x7 SLOAD AND OR PUSH1 0x7 SSTORE PUSH32 0x300C7CA619EB846386AA0A6E5916AC2A41406448B0A2E99BA9CCAFEB899015A5 PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE LOG1 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH2 0xCE7 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0xCEF PUSH2 0x32A0 JUMP JUMPDEST PUSH2 0xCF7 PUSH2 0x36DB JUMP JUMPDEST DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xD1C PUSH2 0x2FD3 JUMP JUMPDEST PUSH2 0xD45 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0xD4E DUP2 PUSH2 0x342E JUMP JUMPDEST AND DUP1 DUP3 MSTORE DUP2 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 DUP4 KECCAK256 SLOAD PUSH1 0x3 SHR AND PUSH2 0xE85 JUMPI DUP1 DUP3 MSTORE DUP2 PUSH1 0x20 MSTORE PUSH1 0x40 DUP3 KECCAK256 SLOAD PUSH1 0x1 DUP2 PUSH1 0x2 SHR AND SWAP1 PUSH4 0xFFFFFFFF DUP1 SWAP2 PUSH2 0xD8B PUSH2 0x39E PUSH1 0x5A SWAP1 JUMP JUMPDEST SHR AND DUP3 PUSH2 0xE1F JUMPI JUMPDEST POP POP ISZERO DUP1 PUSH2 0xE10 JUMPI JUMPDEST PUSH2 0xE03 JUMPI JUMPDEST DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x8 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH32 0xC2354CC2F78EA57777E55DDD43A7F22B112CE98868596880EDAEB22B4F9C73A9 PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE LOG2 DUP1 RETURN JUMPDEST PUSH2 0xE0B PUSH2 0x32A0 JUMP JUMPDEST PUSH2 0xDA1 JUMP JUMPDEST POP PUSH2 0xE19 PUSH2 0x339B JUMP JUMPDEST ISZERO PUSH2 0xD9C JUMP JUMPDEST SWAP1 DUP1 SWAP3 POP PUSH32 0x0 AND ADD DUP2 DUP2 GT PUSH2 0xE58 JUMPI AND TIMESTAMP GT ISZERO PUSH0 DUP1 PUSH2 0xD93 JUMP JUMPDEST PUSH1 0x24 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH32 0x346D760700000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH1 0x20 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH2 0xF09 PUSH2 0x2FD3 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0xF35 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0xF3E DUP3 PUSH2 0x342E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP3 DUP4 DUP6 MSTORE PUSH1 0x20 SWAP2 PUSH1 0x1 DUP4 MSTORE PUSH1 0x1 PUSH1 0x40 DUP8 KECCAK256 ADD SLOAD AND SWAP1 DUP2 ISZERO PUSH0 EQ PUSH2 0x1282 JUMPI PUSH2 0xF70 SWAP2 POP PUSH2 0x3997 JUMP JUMPDEST PUSH2 0xF78 PUSH2 0x339B JUMP JUMPDEST PUSH2 0x125A JUMPI DUP3 DUP5 MSTORE DUP4 DUP2 MSTORE PUSH1 0x40 DUP5 KECCAK256 SLOAD PUSH1 0x1 DUP2 PUSH1 0x2 SHR AND SWAP1 PUSH4 0xFFFFFFFF DUP1 SWAP2 PUSH2 0xFA1 PUSH2 0x39E PUSH1 0x5A SWAP1 JUMP JUMPDEST SHR AND DUP3 PUSH2 0x11F4 JUMPI JUMPDEST POP POP PUSH2 0x11C8 JUMPI PUSH1 0x40 MLOAD PUSH32 0xCE20ECE700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP2 PUSH1 0x4 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1168 JUMPI DUP6 SWAP2 PUSH2 0x119B JUMPI JUMPDEST POP DUP3 LT PUSH2 0x1173 JUMPI PUSH1 0x40 MLOAD PUSH32 0x654CF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP2 PUSH1 0x4 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1168 JUMPI DUP6 SWAP2 PUSH2 0x1137 JUMPI JUMPDEST POP DUP3 GT PUSH2 0x110F JUMPI DUP3 DUP5 MSTORE DUP4 DUP2 MSTORE PUSH1 0x40 DUP5 KECCAK256 SLOAD SWAP2 PUSH8 0xDE0B5CAD2BEF000 DUP2 GT PUSH2 0x10E7 JUMPI PUSH5 0x174876E800 DUP2 DIV SWAP3 DUP4 PUSH1 0x18 SHR PUSH2 0x10BF JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC000003FFFF PUSH32 0x89D41522342FABAC1471CA6073A5623E5CAF367B03CA6E9A001478D0CF8BE4A1 SWAP5 DUP7 DUP9 MSTORE DUP8 DUP6 MSTORE PUSH1 0x12 SHL SWAP2 AND OR PUSH1 0x40 DUP7 KECCAK256 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 DUP1 RETURN JUMPDEST PUSH32 0xE4337C0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x4 DUP6 PUSH32 0x746E594000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP5 PUSH32 0x7F47834B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST SWAP1 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1161 JUMPI JUMPDEST PUSH2 0x114E DUP2 DUP4 PUSH2 0x30DF JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x115D JUMPI MLOAD PUSH0 PUSH2 0x102E JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x1144 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP8 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP5 PUSH32 0xBFB2068800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST SWAP1 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x11C1 JUMPI JUMPDEST PUSH2 0x11B2 DUP2 DUP4 PUSH2 0x30DF JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x115D JUMPI MLOAD PUSH0 PUSH2 0xFEB JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x11A8 JUMP JUMPDEST PUSH1 0x24 DUP5 DUP5 PUSH32 0xD971F59700000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 MSTORE REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP PUSH32 0x0 AND ADD DUP2 DUP2 GT PUSH2 0x122D JUMPI AND TIMESTAMP GT ISZERO PUSH0 DUP1 PUSH2 0xFA9 JUMP JUMPDEST PUSH1 0x24 DUP7 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP5 PUSH32 0xDA9F8B3400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP CALLER EQ PUSH2 0xF70 JUMPI PUSH1 0x4 DUP5 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH3 0xF4240 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH2 0x132A PUSH2 0x2FD3 JUMP JUMPDEST SWAP1 PUSH2 0x1354 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x135D DUP3 PUSH2 0x342E JUMP JUMPDEST PUSH2 0x1365 PUSH2 0x32A0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP2 MSTORE DUP1 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 DUP3 KECCAK256 SLOAD PUSH1 0x3 SHR AND ISZERO PUSH2 0x1978 JUMPI PUSH2 0x138D PUSH2 0x33D9 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH1 0xE0 DUP4 ADD DUP4 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x6E3 JUMPI PUSH1 0x40 MSTORE PUSH0 DUP4 MSTORE PUSH1 0x60 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x60 DUP1 DUP5 ADD MSTORE PUSH1 0x60 PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x60 PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x60 PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP4 DUP8 MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 DUP7 DUP2 MSTORE ADD SWAP1 PUSH0 MSTORE DUP2 PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 JUMPDEST DUP8 DUP2 LT PUSH2 0x1955 JUMPI POP PUSH2 0x1438 SWAP3 POP SUB DUP3 PUSH2 0x30DF JUMP JUMPDEST PUSH1 0x20 DUP8 ADD MSTORE PUSH2 0x1446 DUP4 PUSH2 0x31BF JUMP JUMPDEST PUSH2 0x1453 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x30DF JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x1480 DUP6 PUSH2 0x31BF JUMP JUMPDEST ADD PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x192C JUMPI POP POP PUSH1 0x40 DUP8 ADD MSTORE PUSH2 0x149A DUP4 PUSH2 0x31D7 JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MSTORE PUSH2 0x14A8 DUP4 PUSH2 0x31D7 JUMP JUMPDEST PUSH1 0x80 DUP8 ADD MSTORE DUP6 MLOAD PUSH5 0xFFFFFFFFFF PUSH2 0x14BE DUP6 PUSH2 0x31D7 JUMP JUMPDEST SWAP2 PUSH1 0x5A SHR AND PUSH0 JUMPDEST DUP6 DUP2 LT PUSH2 0x18F0 JUMPI POP POP PUSH1 0xC0 DUP8 ADD MSTORE PUSH2 0x14DC DUP4 PUSH2 0x31D7 JUMP JUMPDEST PUSH1 0xA0 DUP8 ADD MSTORE DUP6 MLOAD SWAP2 PUSH1 0x1 DUP4 DUP2 SHR AND SWAP3 DUP4 PUSH2 0x18DC JUMPI JUMPDEST POP DUP3 PUSH2 0x18CC JUMPI JUMPDEST PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x15EE JUMPI DUP8 DUP8 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 JUMPDEST PUSH1 0x60 DUP6 ADD MLOAD DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x1562 JUMPI SWAP1 PUSH2 0x1550 PUSH2 0x153A DUP3 PUSH1 0x1 SWAP5 PUSH2 0x3226 JUMP JUMPDEST MLOAD PUSH2 0x1549 DUP4 PUSH1 0x80 DUP11 ADD MLOAD PUSH2 0x3226 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x3557 JUMP JUMPDEST DUP2 PUSH0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE ADD PUSH2 0x151C JUMP JUMPDEST DUP5 DUP4 PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 AND SWAP1 SSTORE MLOAD SWAP2 DUP3 MSTORE PUSH32 0xC2354CC2F78EA57777E55DDD43A7F22B112CE98868596880EDAEB22B4F9C73A9 SWAP2 LOG2 DUP1 RETURN JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1604 DUP3 PUSH1 0x20 DUP12 ADD MLOAD PUSH2 0x3226 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x161E DUP4 PUSH2 0x30C3 JUMP JUMPDEST SLOAD PUSH1 0xFF SWAP1 DUP2 DUP2 AND PUSH2 0x162E DUP2 PUSH2 0x3A2E JUMP JUMPDEST DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 PUSH1 0x8 SHR AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0xA8 SHR AND ISZERO ISZERO PUSH1 0x40 DUP4 ADD MSTORE DUP1 PUSH0 MSTORE DUP4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP2 PUSH2 0x1674 DUP3 PUSH1 0x40 DUP13 ADD MLOAD DUP4 PUSH2 0x166E DUP4 DUP4 PUSH2 0x3226 JUMP JUMPDEST MSTORE PUSH2 0x3226 JUMP JUMPDEST POP DUP1 MLOAD PUSH2 0x1680 DUP2 PUSH2 0x3A2E JUMP JUMPDEST PUSH2 0x1689 DUP2 PUSH2 0x3A2E JUMP JUMPDEST DUP1 PUSH2 0x1805 JUMPI POP PUSH8 0xDE0B6B3A7640000 JUMPDEST PUSH2 0x16A7 DUP4 PUSH1 0xA0 DUP14 ADD MLOAD PUSH2 0x3226 JUMP JUMPDEST MSTORE PUSH2 0x16C5 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP4 DUP13 PUSH2 0x3A88 JUMP JUMPDEST DUP6 ISZERO PUSH2 0x17FB JUMPI PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO SWAP1 DUP2 PUSH2 0x17DD JUMPI JUMPDEST POP PUSH2 0x16EA JUMPI JUMPDEST PUSH1 0x1 SWAP2 POP JUMPDEST ADD PUSH2 0x14FA JUMP JUMPDEST DUP9 PUSH2 0x16F5 DUP2 MLOAD PUSH2 0x3A65 JUMP JUMPDEST PUSH2 0x1703 DUP4 PUSH1 0x60 DUP5 ADD MLOAD PUSH2 0x3226 JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x80 SHR PUSH2 0x1717 DUP5 PUSH1 0x80 PUSH0 SWAP6 ADD MLOAD PUSH2 0x3226 JUMP JUMPDEST MLOAD DUP2 DUP2 GT PUSH2 0x174E JUMPI JUMPDEST POP POP POP PUSH1 0x1 SWAP3 DUP2 PUSH2 0x1733 JUMPI JUMPDEST POP POP PUSH2 0x16DF JUMP JUMPDEST PUSH2 0x1747 SWAP2 PUSH2 0x1740 SWAP2 PUSH2 0x30A2 JUMP JUMPDEST DUP3 DUP12 PUSH2 0x3A88 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x172C JUMP JUMPDEST PUSH2 0x1759 SWAP4 POP SUB PUSH2 0x3058 JUMP JUMPDEST SWAP2 PUSH8 0xDE0B6B3A7640000 SWAP3 PUSH1 0x1 DUP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x17B8 DUP12 PUSH2 0x17B1 DUP6 PUSH1 0xA0 PUSH2 0x17A8 DUP3 PUSH1 0xC0 DUP7 ADD MLOAD PUSH2 0x3226 JUMP JUMPDEST MLOAD SWAP4 ADD MLOAD PUSH2 0x3226 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x3058 JUMP JUMPDEST DUP2 DUP6 DUP2 MUL DIV DUP6 EQ DUP3 ISZERO OR ISZERO PUSH2 0x474 JUMPI PUSH1 0x1 SWAP5 PUSH2 0x17D4 SWAP3 MUL PUSH2 0x306B JUMP JUMPDEST SWAP1 SWAP3 PUSH0 DUP1 PUSH2 0x1720 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP MLOAD PUSH2 0x17EB DUP2 PUSH2 0x3A2E JUMP JUMPDEST PUSH2 0x17F4 DUP2 PUSH2 0x3A2E JUMP JUMPDEST EQ PUSH0 PUSH2 0x16D9 JUMP JUMPDEST POP PUSH1 0x1 SWAP2 POP PUSH2 0x16E4 JUMP JUMPDEST DUP1 PUSH2 0x1811 PUSH1 0x1 SWAP3 PUSH2 0x3A2E JUMP JUMPDEST SUB PUSH2 0x18A4 JUMPI PUSH1 0x4 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP5 ADD MLOAD AND PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0x679AEFCE00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1899 JUMPI PUSH0 SWAP2 PUSH2 0x1867 JUMPI JUMPDEST POP PUSH2 0x1699 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1891 JUMPI JUMPDEST DUP2 PUSH2 0x1882 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x30DF JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x115D JUMPI MLOAD PUSH0 PUSH2 0x1861 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1875 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0xDF45063200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP7 MLOAD PUSH1 0x3 SHR PUSH1 0x1 AND ISZERO SWAP3 POP PUSH2 0x14F8 JUMP JUMPDEST PUSH2 0x18E7 SWAP2 SWAP4 POP PUSH2 0x3A65 JUMP JUMPDEST ISZERO ISZERO SWAP2 PUSH0 PUSH2 0x14F1 JUMP JUMPDEST PUSH1 0x5 DUP2 MUL SWAP1 DUP1 DUP3 DIV PUSH1 0x5 EQ DUP2 ISZERO OR ISZERO PUSH2 0x474 JUMPI PUSH1 0x4D PUSH1 0x1F DUP5 DUP5 SHR AND GT PUSH2 0x474 JUMPI PUSH1 0x1F DUP4 PUSH1 0x1 SWAP4 SHR AND PUSH1 0xA EXP PUSH2 0x1925 DUP3 DUP7 PUSH2 0x3226 JUMP JUMPDEST MSTORE ADD PUSH2 0x14C5 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD PUSH2 0x193B DUP2 PUSH2 0x30C3 JUMP JUMPDEST PUSH0 DUP2 MSTORE PUSH0 DUP4 DUP3 ADD MSTORE PUSH0 PUSH1 0x40 DUP3 ADD MSTORE DUP3 DUP3 DUP7 ADD ADD MSTORE ADD PUSH2 0x1483 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 PUSH1 0x20 DUP2 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 SLOAD AND DUP2 MSTORE ADD SWAP4 ADD SWAP2 ADD SWAP2 DUP4 SWAP2 SWAP3 PUSH2 0x1424 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x24 SWAP3 PUSH32 0xEF029ADF00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND PUSH1 0x4 MSTORE REVERT JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH2 0x19E6 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x19EE PUSH2 0x32A0 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB PUSH1 0x7 SLOAD AND PUSH1 0x7 SSTORE PUSH32 0x300C7CA619EB846386AA0A6E5916AC2A41406448B0A2E99BA9CCAFEB899015A5 PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE LOG1 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x2 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH2 0x1A99 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x1AA1 PUSH2 0x32A0 JUMP JUMPDEST PUSH2 0x1AA9 PUSH2 0x339B JUMP JUMPDEST ISZERO PUSH2 0x1AD6 JUMPI PUSH32 0xDA9F8B3400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0xFFFFFFFF PUSH32 0x0 AND TIMESTAMP LT ISZERO PUSH2 0x1B5D JUMPI PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD PUSH1 0x7 SLOAD AND OR PUSH1 0x7 SSTORE PUSH32 0xE0629FE656E45AD7FD63A24B899DA368690024C07043B88E57AEE5095B1D3D02 PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE LOG1 DUP1 RETURN JUMPDEST PUSH32 0xE4460B700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH2 0x1B9F PUSH2 0x2FD3 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND DUP1 SWAP5 SUB PUSH2 0x115D JUMPI PUSH1 0x40 SWAP3 PUSH2 0x1BE1 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST AND DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1EA5 JUMPI PUSH2 0x1C1A PUSH2 0x2FD3 JUMP JUMPDEST SWAP1 PUSH32 0x0 PUSH2 0x1C45 DUP2 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x1C4D PUSH2 0x3479 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 PUSH1 0xA SLOAD AND CALLER SUB PUSH2 0x1E7D JUMPI SWAP4 DUP1 DUP5 PUSH1 0x24 DUP8 PUSH2 0x1C71 DUP4 SWAP10 PUSH2 0x342E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP8 DUP9 SWAP4 DUP5 SWAP3 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP5 MSTORE AND SWAP7 DUP8 PUSH1 0x4 DUP5 ADD MSTORE AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x1E70 JUMPI DUP2 SWAP5 PUSH2 0x1DD0 JUMPI JUMPDEST POP DUP4 MLOAD SWAP3 PUSH2 0x1CCB PUSH2 0x1CC5 DUP6 PUSH2 0x31D7 JUMP JUMPDEST SWAP5 PUSH2 0x31D7 JUMP JUMPDEST SWAP1 DUP3 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x1DA2 JUMPI DUP1 DUP9 PUSH2 0x1CE5 PUSH1 0x1 SWAP4 DUP11 PUSH2 0x3226 JUMP JUMPDEST MLOAD AND DUP7 DUP7 MSTORE PUSH1 0x6 SWAP1 DUP2 DUP6 MSTORE PUSH1 0x40 DUP8 KECCAK256 DUP2 PUSH0 MSTORE DUP6 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP1 PUSH1 0x80 SHR PUSH2 0x1D1D DUP7 DUP11 PUSH2 0x3226 JUMP JUMPDEST MSTORE AND PUSH2 0x1D29 DUP5 DUP12 PUSH2 0x3226 JUMP JUMPDEST MSTORE PUSH2 0x1D34 DUP4 DUP11 PUSH2 0x3226 JUMP JUMPDEST MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x1D8F JUMPI JUMPDEST PUSH2 0x1D4B JUMPI JUMPDEST POP POP ADD PUSH2 0x1CCE JUMP JUMPDEST PUSH2 0x1D88 SWAP2 DUP9 DUP9 MSTORE DUP6 MSTORE PUSH1 0x40 DUP8 KECCAK256 DUP2 PUSH0 MSTORE DUP6 MSTORE DUP7 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH2 0x1D82 PUSH2 0x1D70 DUP5 DUP12 PUSH2 0x3226 JUMP JUMPDEST MLOAD PUSH2 0x1D7B DUP6 DUP10 PUSH2 0x3226 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x314D JUMP JUMPDEST SWAP1 PUSH2 0x3517 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x1D43 JUMP JUMPDEST POP PUSH2 0x1D9A DUP4 DUP8 PUSH2 0x3226 JUMP JUMPDEST MLOAD ISZERO ISZERO PUSH2 0x1D3E JUMP JUMPDEST PUSH2 0x1DBF DUP7 PUSH2 0x1DCC DUP5 DUP7 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP5 PUSH1 0x40 DUP7 MSTORE PUSH1 0x40 DUP7 ADD SWAP1 PUSH2 0x3025 JUMP JUMPDEST SWAP2 DUP5 DUP4 SUB SWAP1 DUP6 ADD MSTORE PUSH2 0x3025 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST SWAP1 SWAP4 POP RETURNDATASIZE DUP1 DUP6 DUP4 RETURNDATACOPY PUSH2 0x1DE2 DUP2 DUP4 PUSH2 0x30DF JUMP JUMPDEST DUP2 ADD SWAP1 DUP4 DUP2 DUP4 SUB SLT PUSH2 0x1E6C JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x6D0 JUMPI ADD SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x1E6C JUMPI DUP2 MLOAD PUSH2 0x1E18 DUP2 PUSH2 0x31BF JUMP JUMPDEST SWAP3 PUSH2 0x1E26 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x30DF JUMP JUMPDEST DUP2 DUP5 MSTORE DUP6 DUP1 DUP6 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x6D4 JUMPI DUP6 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1E50 JUMPI POP POP POP SWAP3 PUSH0 PUSH2 0x1CB5 JUMP JUMPDEST DUP2 MLOAD DUP9 DUP2 AND DUP2 SUB PUSH2 0x1E68 JUMPI DUP2 MSTORE SWAP1 DUP6 ADD SWAP1 DUP6 ADD PUSH2 0x1E3F JUMP JUMPDEST DUP8 DUP1 REVERT JUMPDEST DUP5 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP6 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH2 0x1F24 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x1F2E PUSH2 0x339B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH4 0xFFFFFFFF DUP1 PUSH32 0x0 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x0 AND PUSH1 0x40 DUP3 ADD MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x2A5 JUMPI PUSH1 0x20 PUSH2 0x1FD6 DUP4 PUSH2 0x315A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH2 0x2018 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x2020 PUSH2 0x32A0 JUMP JUMPDEST PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x9 SLOAD AND OR PUSH1 0x9 SSTORE PUSH2 0xCF7 PUSH2 0x36DB JUMP JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI PUSH2 0x2062 CALLDATASIZE PUSH2 0x2FE9 JUMP JUMPDEST SWAP5 SWAP3 PUSH2 0x2090 SWAP3 SWAP2 SWAP3 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x2098 PUSH2 0x3479 JUMP JUMPDEST PUSH2 0x20A0 PUSH2 0x35B9 JUMP JUMPDEST PUSH2 0x20A8 PUSH2 0x33D9 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 DUP7 AND SWAP4 DUP5 DUP7 MSTORE PUSH1 0x20 SWAP8 PUSH1 0xE DUP10 MSTORE DUP1 PUSH1 0x40 DUP9 KECCAK256 SLOAD AND PUSH2 0x23A2 JUMPI PUSH1 0x40 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP10 DUP2 PUSH1 0x4 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x234E JUMPI DUP9 SWAP2 PUSH2 0x2385 JUMPI JUMPDEST POP AND DUP1 ISZERO PUSH2 0x2359 JUMPI PUSH2 0x214E SWAP1 DUP7 DUP9 MSTORE PUSH1 0xE DUP11 MSTORE PUSH1 0x40 DUP9 KECCAK256 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH2 0x8AD DUP6 PUSH2 0x37C7 JUMP JUMPDEST PUSH2 0x2160 PUSH2 0x215A DUP6 PUSH2 0x37C7 JUMP JUMPDEST DUP7 PUSH2 0x381C JUMP JUMPDEST PUSH2 0x216A DUP5 DUP5 PUSH2 0x3557 JUMP JUMPDEST SWAP2 DUP6 DUP8 MSTORE PUSH1 0xB DUP10 MSTORE DUP3 PUSH1 0x40 DUP9 KECCAK256 SSTORE PUSH1 0x40 MLOAD PUSH32 0x4CDAD50600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP6 PUSH1 0x4 DUP3 ADD MSTORE DUP10 DUP2 PUSH1 0x24 DUP2 DUP11 GAS STATICCALL DUP1 ISZERO PUSH2 0x234E JUMPI DUP6 SWAP1 DUP10 SWAP1 PUSH2 0x231D JUMPI JUMPDEST PUSH2 0x21C5 SWAP3 POP PUSH2 0x314D JUMP JUMPDEST SWAP8 PUSH2 0x21CF DUP10 PUSH2 0x35F0 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8F0 DUP10 ADD SWAP9 DUP10 GT PUSH2 0x22F0 JUMPI PUSH2 0x2252 SWAP2 DUP10 SWAP2 DUP10 DUP10 PUSH32 0xD66F031D33381C6408F0B32C884461E5DE3DF8808399B6F3A3D86B1368F8EC34 DUP15 DUP3 DUP5 MSTORE PUSH1 0xD DUP2 MSTORE PUSH2 0x2710 DUP1 PUSH1 0x40 DUP7 KECCAK256 SSTORE PUSH1 0xC DUP3 MSTORE PUSH1 0x40 DUP6 KECCAK256 PUSH0 DUP1 MSTORE DUP3 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG3 PUSH2 0x3627 JUMP JUMPDEST DUP1 DUP8 LT PUSH2 0x22C0 JUMPI POP PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x75C4DC5F23640EEBA7D404D9165F515FC3D9E23A5C8B6E2D09B4B9DA56FF00A9 SWAP1 PUSH1 0x60 SWAP1 LOG2 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP6 PUSH1 0x44 SWAP2 DUP9 PUSH32 0xDA0CB07E00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE REVERT JUMPDEST PUSH1 0x24 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE REVERT JUMPDEST POP POP DUP10 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2347 JUMPI JUMPDEST PUSH2 0x2334 DUP2 DUP4 PUSH2 0x30DF JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x115D JUMPI DUP5 PUSH2 0x21C5 SWAP2 MLOAD PUSH2 0x21BB JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x232A JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP11 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x24 DUP8 DUP8 PUSH32 0xD407F9C500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH2 0x239C SWAP2 POP DUP11 RETURNDATASIZE DUP13 GT PUSH2 0x9EC JUMPI PUSH2 0x9DD DUP2 DUP4 PUSH2 0x30DF JUMP JUMPDEST PUSH0 PUSH2 0x2106 JUMP JUMPDEST PUSH1 0x24 DUP8 DUP8 PUSH32 0x1690FA4000000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 MSTORE REVERT JUMPDEST POP CALLVALUE PUSH2 0x2A5 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2A5 JUMPI PUSH2 0x23E8 PUSH2 0x2FD3 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x2415 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x241E DUP2 PUSH2 0x342E JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP3 GT PUSH2 0xB27 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH1 0xA SLOAD AND CALLER SUB PUSH2 0xAFF JUMPI AND SWAP1 DUP2 DUP4 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP4 KECCAK256 SLOAD PUSH8 0xDE0B5CAD2BEF000 DUP3 GT PUSH2 0xAD7 JUMPI DUP2 PUSH2 0xAC2 PUSH1 0x20 SWAP3 PUSH5 0x174876E800 PUSH32 0xE4D371097BEEA42453A37406E2AEF4C04F3C548F84AC50E72578662C0DCD7354 SWAP6 DIV SWAP1 PUSH2 0x390E JUMP JUMPDEST POP CALLVALUE PUSH2 0x115D JUMPI PUSH2 0x24A3 CALLDATASIZE PUSH2 0x2FE9 JUMP JUMPDEST SWAP5 SWAP1 SWAP3 SWAP2 SWAP4 SWAP5 PUSH32 0x0 PUSH2 0x24D3 DUP2 PUSH2 0x3267 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND CALLER SUB PUSH2 0x297A JUMPI PUSH2 0x24EB PUSH2 0x3479 JUMP JUMPDEST PUSH2 0x24F4 DUP8 PUSH2 0x34CA JUMP JUMPDEST ORIGIN ISZERO DUP1 DUP1 PUSH2 0x296D JUMPI JUMPDEST PUSH2 0x2905 JUMPI JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH0 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP5 GT PUSH2 0x28DD JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP6 PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP7 PUSH2 0x258A PUSH2 0x257C DUP10 PUSH2 0x2577 DUP10 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH2 0x3058 JUMP JUMPDEST PUSH2 0x306B JUMP JUMPDEST SWAP9 PUSH2 0x2577 DUP9 DUP5 PUSH1 0x80 SHR PUSH2 0x3058 JUMP JUMPDEST SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP3 DUP1 DUP11 LT PUSH2 0x28AA JUMPI POP DUP1 DUP9 LT PUSH2 0x286E JUMPI POP PUSH2 0x2605 SWAP1 PUSH2 0x25C9 DUP10 DUP5 PUSH2 0x3517 JUMP JUMPDEST PUSH2 0x25DC DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH2 0x3517 JUMP JUMPDEST PUSH2 0x8C7 DUP9 PUSH2 0x25FC DUP12 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH2 0x30A2 JUMP JUMPDEST SWAP3 PUSH1 0x80 SHR PUSH2 0x30A2 JUMP JUMPDEST SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE DUP6 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND ISZERO PUSH2 0x2846 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH0 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH2 0x264B DUP2 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x30A2 JUMP JUMPDEST PUSH2 0x2654 DUP2 PUSH2 0x35F0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x2691 DUP3 DUP3 SLOAD PUSH2 0x30A2 JUMP JUMPDEST SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND SWAP1 PUSH32 0x4E09F7F7FC37CE2897800E2C2A9099565EDB0A133D19D84A6871B3530AF8846B PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP3 LOG3 DUP7 PUSH2 0x27C5 JUMPI JUMPDEST POP DUP5 PUSH2 0x2735 JUMPI JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH32 0x44D97B36E99B590B3D2875AAD3B167B1D7FB1E063F3F1325A1EEAC76CAEE5113 SWAP2 POP PUSH1 0x60 SWAP1 LOG2 DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE ISZERO PUSH2 0x614 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x64 DUP9 DUP6 DUP4 DUP2 SWAP6 DUP2 PUSH1 0x40 MLOAD SWAP9 DUP10 SWAP8 DUP9 SWAP7 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP9 MSTORE AND PUSH1 0x4 DUP8 ADD MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE DUP11 PUSH1 0x44 DUP6 ADD MSTORE AND GAS CALL DUP1 ISZERO PUSH2 0x27BA JUMPI PUSH2 0x27A6 JUMPI JUMPDEST DUP1 PUSH2 0x26E0 JUMP JUMPDEST PUSH2 0x27B0 DUP3 SWAP2 PUSH2 0x30AF JUMP JUMPDEST PUSH2 0x2A5 JUMPI DUP1 PUSH2 0x27A0 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EXTCODESIZE ISZERO PUSH2 0x115D JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE DUP7 PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND GAS CALL DUP1 ISZERO PUSH2 0x1899 JUMPI ISZERO PUSH2 0x26D9 JUMPI PUSH2 0x283E SWAP2 SWAP4 POP PUSH2 0x30AF JUMP JUMPDEST PUSH0 SWAP2 PUSH0 PUSH2 0x26D9 JUMP JUMPDEST PUSH32 0x586D06DF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 PUSH32 0x8EDA85E400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST DUP10 DUP5 PUSH32 0x8EDA85E400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH32 0x98C5DBD600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST ISZERO PUSH2 0x2945 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH0 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x293D DUP6 DUP3 SLOAD PUSH2 0x314D JUMP JUMPDEST SWAP1 SSTORE PUSH0 PUSH2 0x2502 JUMP JUMPDEST PUSH32 0x67F84AB200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x7 SLOAD AND ISZERO PUSH2 0x24FD JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x115D JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115D JUMPI PUSH2 0x29DF PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1 PUSH1 0x7 SLOAD PUSH1 0x2 SHR AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x115D JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115D JUMPI PUSH2 0x2A0D PUSH2 0x2FD3 JUMP JUMPDEST PUSH2 0x2A36 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x2A3F DUP2 PUSH2 0x342E JUMP JUMPDEST PUSH2 0x2A63 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP2 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH2 0x37AB JUMP JUMPDEST DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x1 DUP2 PUSH1 0x2 SHR AND PUSH4 0xFFFFFFFF SWAP1 DUP2 DUP4 PUSH2 0x2A89 PUSH2 0x39E PUSH1 0x5A SWAP1 JUMP JUMPDEST SHR AND DUP2 PUSH2 0x2B62 JUMPI JUMPDEST POP ISZERO PUSH2 0x2AC3 JUMPI DUP3 PUSH32 0xD971F59700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 PUSH2 0x2ACE PUSH1 0x5A PUSH2 0x313F JUMP JUMPDEST SHR AND TIMESTAMP LT ISZERO PUSH2 0x2B36 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB PUSH1 0x4 SWAP2 DUP4 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE AND OR PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x57E20448028297190122571BE7CB6C1B1EF85730C673F7C72F533C8662419AA7 PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE LOG2 STOP JUMPDEST POP PUSH32 0xEB5A121700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP2 PUSH32 0x0 AND ADD DUP2 DUP2 GT PUSH2 0x474 JUMPI DUP2 AND TIMESTAMP GT ISZERO DUP5 PUSH2 0x2A91 JUMP JUMPDEST CALLVALUE PUSH2 0x115D JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115D JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x115D JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115D JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2BF5 PUSH2 0x2FD3 JUMP JUMPDEST PUSH2 0x2C1E PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 SLOAD DUP2 MLOAD SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP3 MSTORE PUSH1 0x80 SHR PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x115D JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115D JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x8 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x115D JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115D JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP1 SWAP2 SUB PUSH2 0x115D JUMPI PUSH2 0x2CB7 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x2CBF PUSH2 0x32A0 JUMP JUMPDEST PUSH2 0x2CC7 PUSH2 0x33D9 JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0xA SLOAD AND OR PUSH1 0xA SSTORE PUSH32 0x280A60B1E63C1774D397D35CCE80EB80E51408EAD755FB446E6F744CE98E5DF0 PUSH0 DUP1 LOG2 PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST CALLVALUE PUSH2 0x115D JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115D JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH2 0x2710 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x115D JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115D JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x115D JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115D JUMPI PUSH2 0x2DCF PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x2DD7 PUSH2 0x32A0 JUMP JUMPDEST PUSH2 0x2DDF PUSH2 0x339B JUMP JUMPDEST ISZERO PUSH2 0x2E39 JUMPI PUSH32 0xE0629FE656E45AD7FD63A24B899DA368690024C07043B88E57AEE5095B1D3D02 PUSH1 0x20 PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD PUSH1 0x7 SLOAD AND PUSH1 0x7 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST PUSH32 0xF7FF4DCA00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x115D JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115D JUMPI PUSH2 0x2E9A PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH1 0x20 PUSH2 0x2EA4 PUSH2 0x339B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x115D JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115D JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP1 DUP2 DUP2 SUB PUSH2 0x115D JUMPI PUSH2 0x2EFD PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH2 0x2F05 PUSH2 0x32A0 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x9 SLOAD SWAP3 PUSH1 0x8 SHL AND SWAP2 AND OR PUSH1 0x9 SSTORE PUSH32 0x94B979B6831A51293E2641426F97747FEED46F17779FED9CD18D1ECEFCFE92EF PUSH0 DUP1 LOG2 STOP JUMPDEST CALLVALUE PUSH2 0x115D JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x115D JUMPI PUSH1 0x20 PUSH2 0x2F8B PUSH2 0x2FD3 JUMP JUMPDEST PUSH2 0x2FB4 PUSH32 0x0 PUSH2 0x3267 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0xE DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x115D JUMPI JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0xA0 SWAP2 ADD SLT PUSH2 0x115D JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x115D JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP2 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH1 0x64 CALLDATALOAD SWAP2 PUSH1 0x84 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x115D JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x3044 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x3036 JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x474 JUMPI JUMP JUMPDEST DUP2 ISZERO PUSH2 0x3075 JUMPI DIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x474 JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6E3 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x6E3 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x6E3 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x115D JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x115D JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x28 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x474 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x474 JUMPI JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x31B9 DUP2 PUSH2 0x30C3 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6E3 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x31E1 DUP3 PUSH2 0x31BF JUMP JUMPDEST PUSH2 0x31EE PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x30DF JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x321C DUP3 SWAP5 PUSH2 0x31BF JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x323A JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS SUB PUSH2 0x3278 JUMPI JUMP JUMPDEST PUSH32 0x9FD25B3600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x332A PUSH1 0x20 PUSH2 0x32D1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x315A JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x40 MLOAD PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE CALLER PUSH1 0x24 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE SWAP1 SWAP3 DUP4 SWAP2 PUSH1 0x8 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP2 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1899 JUMPI PUSH0 SWAP2 PUSH2 0x336C JUMPI JUMPDEST POP ISZERO PUSH2 0x3344 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x338E SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3394 JUMPI JUMPDEST PUSH2 0x3386 DUP2 DUP4 PUSH2 0x30DF JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3793 JUMP JUMPDEST PUSH0 PUSH2 0x333C JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x337C JUMP JUMPDEST PUSH4 0xFFFFFFFF PUSH32 0x0 AND TIMESTAMP GT ISZERO DUP1 PUSH2 0x33CD JUMPI SWAP1 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x7 SLOAD DUP2 SHR AND SWAP1 JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x3406 JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x344E JUMPI POP JUMP JUMPDEST PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x0 TLOAD ISZERO PUSH2 0x34A2 JUMPI JUMP JUMPDEST PUSH32 0xC09BA73600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x34EC JUMPI POP JUMP JUMPDEST PUSH32 0x85F4129900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x3521 SWAP1 PUSH2 0x37C7 JUMP JUMPDEST SWAP1 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP3 EQ PUSH2 0x474 JUMPI PUSH2 0x3555 SWAP2 PUSH0 SUB SWAP1 PUSH2 0x381C JUMP JUMPDEST JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 GT SWAP1 DUP2 ISZERO PUSH2 0x35AF JUMPI JUMPDEST POP PUSH2 0x3587 JUMPI PUSH2 0x3584 SWAP2 PUSH1 0x80 SHL PUSH2 0x314D JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH32 0x89560CA100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP DUP3 GT PUSH0 PUSH2 0x3573 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x7 SLOAD PUSH1 0x2 SHR AND PUSH2 0x35C8 JUMPI JUMP JUMPDEST PUSH32 0xF27DF0900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x2710 DUP2 LT PUSH2 0x35FC JUMPI POP JUMP JUMPDEST PUSH32 0x34BDBFAA00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP3 DUP4 ISZERO PUSH2 0x36B3 JUMPI PUSH32 0xD66F031D33381C6408F0B32C884461E5DE3DF8808399B6F3A3D86B1368F8EC34 SWAP2 PUSH1 0x20 SWAP2 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0xD DUP3 MSTORE PUSH2 0x3677 DUP2 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x314D JUMP JUMPDEST PUSH2 0x3680 DUP2 PUSH2 0x35F0 JUMP JUMPDEST DUP5 PUSH0 MSTORE PUSH1 0xD DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0xC DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP6 PUSH0 MSTORE DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x36A8 DUP3 DUP3 SLOAD PUSH2 0x314D JUMP JUMPDEST SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG3 JUMP JUMPDEST PUSH32 0xDBE6B10E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE PUSH1 0x7 SLOAD AND OR PUSH1 0x7 SSTORE PUSH32 0xBD204090FD387F08E3076528BF09B4FC99D8100D749EACE96C06002D3FEDC625 PUSH0 DUP1 LOG1 JUMP JUMPDEST DUP3 ISZERO PUSH2 0x376B JUMPI PUSH1 0x1 SWAP2 PUSH2 0x373E SWAP2 PUSH2 0x3058 JUMP JUMPDEST SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x115D JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x115D JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x37C4 JUMPI PUSH2 0x3555 SWAP1 PUSH2 0x3997 JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x37F1 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 ISZERO PUSH2 0x390A JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 SWAP2 AND DUP1 PUSH0 MSTORE DUP2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD DUP4 DUP2 ADD SWAP4 DUP5 SLT PUSH0 DUP3 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x474 JUMPI DUP4 PUSH2 0x38D1 JUMPI POP PUSH32 0x0 DUP1 TLOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 ADD SWAP2 DUP3 GT PUSH2 0x474 JUMPI TSTORE JUMPDEST PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TSTORE JUMP JUMPDEST PUSH2 0x38C5 JUMPI PUSH32 0x0 DUP1 TLOAD SWAP1 PUSH1 0x1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x474 JUMPI TSTORE PUSH2 0x38C5 JUMP JUMPDEST POP POP JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x18 SHR PUSH2 0x10BF JUMPI PUSH1 0x2A SHL SWAP1 PUSH3 0xFFFFFF PUSH1 0x2A SHL NOT AND OR SWAP1 JUMP JUMPDEST PUSH32 0xB4120F1400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x100 DUP1 DUP5 LT ISZERO PUSH2 0x3928 JUMPI DUP4 DUP2 SUB SWAP1 DUP2 GT PUSH2 0x474 JUMPI DUP1 PUSH1 0xFF LT PUSH0 EQ PUSH2 0x3992 JUMPI POP PUSH1 0xFF JUMPDEST PUSH1 0x18 GT PUSH2 0x3928 JUMPI DUP1 PUSH1 0x18 SHR PUSH2 0x10BF JUMPI PUSH3 0xFFFFFF SWAP1 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST PUSH2 0x3974 JUMP JUMPDEST PUSH1 0x20 PUSH2 0x332A SWAP2 PUSH2 0x39C9 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x315A JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x9 SLOAD PUSH1 0x8 SHR AND SWAP1 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP5 DUP3 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE CALLER SWAP1 PUSH1 0x4 DUP6 ADD SWAP2 PUSH1 0x40 SWAP2 SWAP5 SWAP4 PUSH1 0x60 DUP5 ADD SWAP6 DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND PUSH1 0x20 DUP6 ADD MSTORE AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x3A38 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH3 0xFFFFFF SWAP1 PUSH1 0x42 SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x474 JUMPI SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x80 PUSH8 0xDE0B6B3A7640000 PUSH2 0x3AD8 PUSH2 0x3AE1 SWAP5 DUP1 PUSH2 0x3AAB DUP7 PUSH1 0x60 DUP11 ADD MLOAD PUSH2 0x3226 JUMP JUMPDEST MSTORE PUSH2 0x3AD3 PUSH2 0x3ABD DUP7 PUSH1 0xC0 DUP11 ADD MLOAD PUSH2 0x3226 JUMP JUMPDEST MLOAD PUSH2 0x3ACC DUP8 PUSH1 0xA0 DUP12 ADD MLOAD PUSH2 0x3226 JUMP JUMPDEST MLOAD SWAP3 PUSH2 0x3058 JUMP JUMPDEST PUSH2 0x3058 JUMP JUMPDEST DIV SWAP4 ADD MLOAD PUSH2 0x3226 JUMP JUMPDEST MSTORE JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2D 0xD0 CALLVALUE ORIGIN MCOPY LOG1 SLT PUSH29 0x120DDCF76F0F4728A3AF63C5C92E2A04BDF8A9CBD496F36364736F6C63 NUMBER STOP ADDMOD SHL STOP CALLER ","sourceMap":"2072:32096:69:-:0;;;;;;;;;-1:-1:-1;2072:32096:69;;;;34059:9;34055:69;;2072:32096;;;34134:25;;;2072:32096;;34134:25;;2072:32096;;;;;;;;;;;34134:25;34055:69;34095:18;34071:1;34095:18;2072:32096;34071:1;34095:18;2072:32096;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2072:32096:69;;;;;;;;-1:-1:-1;;;;;4519:6:69;2072:32096;;;;;;;;;;;;;-1:-1:-1;;2072:32096:69;;;;;;;;-1:-1:-1;;;;;2072:32096:69;;:::i;:::-;2666:30;:6;:30;:::i;:::-;2072:32096;;;31121:18;2072:32096;;;;;;;;;;;;;;;;-1:-1:-1;;2072:32096:69;;;;;;;:::i;:::-;2666:30;:6;:30;:::i;:::-;8718:4:70;;;:::i;:::-;8759:36:69;-1:-1:-1;;;;;2072:32096:69;;;;;;;;8759:17;2072:32096;;;;;;;8759:36;;:::i;:::-;2072:32096;;;;;;;;;;8759:17;7916:84:49;958:1:75;7916:84:49;;2072:32096:69;2958:30:75;;:62;:30;2072:32096:69;2790:99:75;;2958:30;:62;:::i;:::-;6019:108:49;;7592:82:70;;;2072:32096:69;-1:-1:-1;;8867:19:69;;;2072:32096;9892:37;8902:140;8470:156:49;2072:32096:69;8863:916;2072:32096;;;;;;8470:156:49;2072:32096:69;;;;;;;;;9892:37;2072:32096;;8863:916;9735:19;;2072:32096;9735:19;2072:32096;;;;9735:19;7592:82:70;7648:26;;;;;2072:32096:69;;;;;;;;7608:15:70;:66;;7592:82;;;;2072:32096:69;;;;;;;;;;;;;;;;-1:-1:-1;;2072:32096:69;;;;;;;:::i;:::-;2666:6;:30;;;:::i;:::-;-1:-1:-1;;;;;2072:32096:69;;;;;24572:221;;;;;;;;;2072:32096;;24572:221;;2072:32096;;;;;;;;;;;;;;;;;;;24760:10;2072:32096;;;;;24572:221;;2072:32096;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24537:274;;;;;;2072:32096;;;;;;;;;;;;;;;;;;;;;;24572:221;;2072:32096;;;;;24537:274;;;2072:32096;24537:274;;;;;;;;;;;2072:32096;;;;;;;;;24509:352;;2072:32096;;;;;24509:352;;;;;;2072:32096;;;;;;;;;;;;;;;;;;24537:274;;;;;;;;;;;;;;;;:::i;:::-;;;;;;2072:32096;24537:274;;2072:32096;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;24537:274;;;;;;;2072:32096;;;;;;;;;;;;;;;;;;;;;;24537:274;2072:32096;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2072:32096:69;;;;;;;;5700:21;2072:32096;;;;;;;;;;;:::i;:::-;2666:30;:6;;;;;;:30;:::i;:::-;2707:73:70;;:::i;:::-;8020:101;;:::i;:::-;10002:12;;;:::i;:::-;1083:103:53;;:::i;:::-;-1:-1:-1;;;;;2072:32096:69;;;;;;;;20895:20;;;;;;2072:32096;20895:20;;;;;;;;;;;;;2072:32096;;;;;10575:13:70;2072:32096:69;;;;;;;;;;10575:46:70;;;10571:202;;2072:32096:69;;;21017:20;2072:32096;;;;;;;21632:18;2072:32096;;;;;;1460:31:44;1237:14;1460:31;;21696:72:69;21797:76;21696:72;;;;;:::i;:::-;2072:32096;1616:3:44;2072:32096:69;21797:76;;;;:::i;:::-;21888:46;;;;21884:172;;22070:40;;;;22066:157;;3891:15:70;;22878:91:69;3891:15:70;22508:177:69;2072:32096;3891:15:70;;22622:53:69;3891:15:70;22556:52:69;3891:15:70;22843:18:69;3891:15:70;;;;22878:91:69;3891:15:70;;;;:::i;:::-;;;:::i;:::-;;;;:::i;:::-;22556:52:69;:::i;:::-;22622:53;;:::i;:::-;22508:177;;:::i;:::-;2072:32096;;;;21017:20;2072:32096;;;;;;;22843:18;:::i;:::-;2072:32096;;22878:91;;;;;;2072:32096;;;;;;;;;;;;;;;;;;22878:91;;;;551:66:53;3051:52:55;2072:32096:69;;;;;;;;;22066:157;22133:79;2072:32096;22133:79;;;;;;2072:32096;;;;;;22133:79;21884:172;21957:88;2072:32096;21957:88;;;;;;2072:32096;;;;;;21957:88;10571:202:70;10711:51;2072:32096:69;10711:51:70;;;;;2072:32096:69;;;;10711:51:70;20895:20:69;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;2072:32096;;;;;;-1:-1:-1;;2072:32096:69;;;;;;;:::i;:::-;;;2666:6;:30;:6;:30;:::i;:::-;8718:4:70;;;:::i;:::-;465::50;3098:36:69;;3094:108;;-1:-1:-1;;;;;2072:32096:69;;2877:22;2072:32096;;2855:10;:45;2851:101;;2072:32096;;;;;;;;;;;;19917:10:33;8864:26:76;;8860:97;;12581:72:69;9149:42:76;9060:184;2072:32096:69;9149:42:76;;2072:32096:69;2690:94:75;;9149:42:76;2072:32096:69;19669:4:33;2072:32096:69;;9060:184:76;;:::i;:::-;2072:32096:69;;;;;;;;;;;;;;;12581:72;2072:32096;;8860:97:76;2072:32096:69;8913:33:76;;;;;2851:101:69;2072:32096;2923:18;;;;;3094:108;2072:32096;3157:34;;;;;2072:32096;;;;;;-1:-1:-1;;2072:32096:69;;;;;2666:30;:6;:30;:::i;:::-;1525:73:37;;:::i;:::-;2072:32096:69;16609:27;2072:32096;;16605:93;;8470:156:49;16736:15:69;2072:32096;8470:156:49;16736:15:69;2072:32096;16862:21;;;;2072:32096;;16605:93;16659:28;;2072:32096;16659:28;;;2072:32096;;;;;;-1:-1:-1;;2072:32096:69;;;;;2666:30;:6;:30;:::i;:::-;1525:73:37;;:::i;:::-;2072:32096:69;8470:156:49;17707:15:69;2072:32096;8470:156:49;;17707:15:69;2072:32096;17834:38;2072:32096;;;17433:4;2072:32096;;17834:38;2072:32096;;;;;;;;-1:-1:-1;;2072:32096:69;;;;;2666:30;:6;:30;:::i;:::-;1525:73:37;;:::i;:::-;15965:100:69;;:::i;:::-;2072:32096;;;;;;;;-1:-1:-1;;2072:32096:69;;;;;-1:-1:-1;;;;;2072:32096:69;;:::i;:::-;2666:30;:6;:30;:::i;:::-;8718:4:70;;;:::i;:::-;2072:32096:69;;;;;;;1192:1:75;2072:32096:69;;;;958:1:75;7916:84:49;;14143:89:69;;2072:32096;;;;;;;;;;1192:1:75;7916:84:49;958:1:75;7916:84:49;;2072:32096:69;;2958:30:75;;:62;:30;2072:32096:69;2790:99:75;;2958:62;6019:108:49;;7592:82:70;;;2072:32096:69;;;;13501:57;;;2072:32096;13497:177;;2072:32096;;;;;;;;;;8470:156:49;;2072:32096:69;;8470:156:49;;2072:32096:69;;15164:48;2072:32096;;;1192:1:75;2072:32096:69;;15164:48;2072:32096;;13497:177;;;:::i;:::-;;;13501:57;13533:16;;;:::i;:::-;2072:32096;13501:57;;7592:82:70;7648:26;;;;;2072:32096:69;;;;;;;;7608:15:70;:66;;7592:82;;;;2072:32096:69;;;;;;;;;;14143:89;14197:24;;;2072:32096;;;;14197:24;2072:32096;;;;;;-1:-1:-1;;2072:32096:69;;;;;;551:66:53;2806:53:55;2072:32096:69;;;;;;;;;;;;;;-1:-1:-1;;2072:32096:69;;;;;;;:::i;:::-;;;2666:30;:6;:30;:::i;:::-;8718:4:70;;;:::i;:::-;-1:-1:-1;;;;;2072:32096:69;;;;;;;;;;;;;;;;10398:38;2072:32096;;32650:25;;;32646:225;32650:25;;;32768:4;;;;:::i;:::-;5755:16:70;;:::i;:::-;5751:67;;2072:32096:69;;;;;;;;;;;7916:84:49;958:1:75;7916:84:49;;2072:32096:69;;2958:30:75;;:62;:30;2072:32096:69;2790:99:75;;2958:62;6019:108:49;;7592:82:70;;;32646:225:69;6800:73:70;;;;2072:32096:69;;;15152:60:70;;;;2072:32096:69;15152:60:70;;;;;;;;;;;;;32646:225:69;15132:80:70;;;15128:143;;2072:32096:69;;;15305:60:70;;;;2072:32096:69;15305:60:70;;;;;;;;;;;;;32646:225:69;15285:80:70;;;15281:144;;2072:32096:69;;;;;;;;;;7292:26:76;19917:10:33;7292:26:76;;7288:97;;19669:4:33;2072:32096:69;;;;19627:2:33;2072:32096:69;9400:76:49;;2539:209;15647:49:70;2072:32096:69;;;;;;;;2539:209:49;;;;2072:32096:69;;;;;;;;;15647:49:70;2072:32096:69;;9400:76:49;9450:15;2072:32096:69;9450:15:49;2072:32096:69;;9450:15:49;7288:97:76;2072:32096:69;7341:33:76;;;;;15281:144:70;2072:32096:69;15388:26:70;;;;;15305:60;;;;;;;;;;;;;;;;:::i;:::-;;;2072:32096:69;;;;;15305:60:70;;;2072:32096:69;;;;15305:60:70;;;;;;2072:32096:69;;;;;;;;;15128:143:70;2072:32096:69;15235:25:70;;;;;15152:60;;;;;;;;;;;;;;;;:::i;:::-;;;2072:32096:69;;;;;15152:60:70;;;;;;;;6800:73;2072:32096:69;6846:16:70;;;;;2072:32096:69;;6846:16:70;7592:82;7648:26;;;;;2072:32096:69;;;;;;;;7608:15:70;:66;;7592:82;;;;2072:32096:69;;;;;;;;;;5751:67:70;2072:32096:69;5794:13:70;;;;;32646:225:69;-1:-1:-1;32794:10:69;32790:81;32646:225;32790:81;2072:32096;32842:18;;;;;2072:32096;;;;;;-1:-1:-1;;2072:32096:69;;;;;;;;928:3:95;2072:32096:69;;;;;;;;;-1:-1:-1;;2072:32096:69;;;;;;;;;4956:25;2072:32096;;;;;;;;;;-1:-1:-1;;2072:32096:69;;;;;;;:::i;:::-;2666:6;:30;:6;:30;:::i;:::-;8718:4:70;;;:::i;:::-;1525:73:37;;:::i;:::-;-1:-1:-1;;;;;2072:32096:69;;;;;;;1192:1:75;2072:32096:69;;;;958:1:75;7916:84:49;;16646:28:70;16642:93;;1083:103:53;;:::i;:::-;2072:32096:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2072:32096:69;;;;12587:18:70;2072:32096:69;;;;;;;;;;;;;;;;;;;;958:1:75;2072:32096:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;1947:24:77;2072:32096:69;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;1981:47:77;2061:24;;;:::i;:::-;2072:32096:69;;;2038:47:77;2127:24;;;:::i;:::-;2072:32096:69;;;2095:56:77;2072:32096:69;;;9811:24:76;;;:::i;:::-;9470:46;2072:32096:69;6019:108:49;;2072:32096:69;9952:13:76;;;;;;2072:32096:69;;;;;2161:107:77;2300:24;;;:::i;:::-;2072:32096:69;;;2278:46:77;2072:32096:69;;7916:84:49;1192:1:75;7916:84:49;;;;2365:119:77;;;;9932:464:76;2365:190:77;;;;9932:464:76;2072:32096:69;2586:13:77;;;;;;2072:32096:69;;;-1:-1:-1;;;;;2072:32096:69;;;;12587:18:70;2072:32096:69;;;;;11419:13:70;2072:32096:69;11467:3:70;2072:32096:69;;;11438:20:70;2072:32096:69;;11434:31:70;;;;;11619:23;11567:139;11619:23;;1192:1:75;11619:23:70;;:::i;:::-;2072:32096:69;11660:32:70;2072:32096:69;;;;11660:29:70;:32;:::i;:::-;2072:32096:69;11567:139:70;;:::i;:::-;2072:32096:69;;;;;;;;;;;11419:13:70;;11434:31;;;2072:32096:69;551:66:53;3051:52:55;-1:-1:-1;;;;;2072:32096:69;;;;;;;;;;;;;;;8470:156:49;;2072:32096:69;;;;;;15164:48;;;2072:32096;;2601:3:77;-1:-1:-1;;;;;2663:18:77;2072:32096:69;;;;2663:15:77;:18;:::i;:::-;2072:32096:69;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;2072:32096:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;2755:33:77;2072:32096:69;;;;2755:18:77;:33;;;;;:::i;:::-;;;:::i;:::-;;2072:32096:69;;;;;:::i;:::-;;;;:::i;:::-;7589:31:77;;;7636:21;465:4:50;7585:269:77;2802:48;2072:32096:69;;;;2802:19:77;:48;:::i;:::-;2072:32096:69;2932:17:77;1237:14:44;1460:31;;2932:17:77;;;:::i;:::-;2072:32096:69;;3059:78:77;;2072:32096:69;;;;;;3800:69:77;;;;7585:269;3977:660;;;7585:269;1192:1:75;2601:3:77;;2571:13;2072:32096:69;2571:13:77;;3977:660;2072:32096:69;4062:56:77;2072:32096:69;;4062:56:77;:::i;:::-;4157:23;2072:32096:69;;;;4157:20:77;:23;:::i;:::-;2072:32096:69;;;;8915:41:77;4236:195;2072:32096:69;;;;8915:29:77;:41;:::i;:::-;2072:32096:69;9458:36:77;;;9454:804;;3977:660;4454:30;;;1192:1:75;4454:30:77;;4450:173;;3977:660;;;;;4450:173;4586:17;4545:39;;;;:::i;:::-;4586:17;;;:::i;:::-;4450:173;;;;9454:804;1068:5:50;2072:32096:69;;;1068:5:50;:::i;:::-;1186:122;;;1192:1:75;1186:122:50;;;;;;;;;;3665:25:46;2072:32096:69;10184:31:77;2072:32096:69;;10120:42:77;2072:32096:69;;;;10120:30:77;:42;:::i;:::-;2072:32096:69;;;10184:19:77;:31;:::i;:::-;2072:32096:69;3665:25:46;;:::i;:::-;2072:32096:69;;;;;;;;;;;;;1192:1:75;2072:32096:69;1625:13:50;2072:32096:69;;1625:13:50;:::i;:::-;9454:804:77;;;;;;3800:69;1192:1:75;2072:32096:69;;;;;;:::i;:::-;;;;:::i;:::-;3827:42:77;3800:69;;;3059:78;3114:8;1192:1:75;3114:8:77;;;;7585:269;2072:32096:69;;1192:1:75;2072:32096:69;;:::i;:::-;7678:32:77;1192:1:75;;2072:32096:69;;-1:-1:-1;;;;;2072:32096:69;;;;;;;7733:32:77;;;;2072:32096:69;7733:32:77;;;;;;;;;2072:32096:69;7733:32:77;;;7674:180;7726:39;7585:269;;7733:32;;;2072:32096:69;7733:32:77;;2072:32096:69;7733:32:77;;;;;;2072:32096:69;7733:32:77;;;:::i;:::-;;;2072:32096:69;;;;;7733:32:77;;;;;;-1:-1:-1;7733:32:77;;;2072:32096:69;;;;;;;;;7674:180:77;7803:40;2072:32096:69;7803:40:77;2072:32096:69;;7803:40:77;2365:190;2072:32096:69;;958:1:75;7916:84:49;1192:1:75;7916:84:49;2072:32096:69;;-1:-1:-1;2365:190:77;;:119;2424:56;;;;;:::i;:::-;:60;;2365:119;;;;9967:3:76;12587:18:70;2072:32096:69;;;;;;12587:18:70;2072:32096:69;;;;;;;3267:1:75;6019:108:49;;;;;3267:1:75;;;6019:108:49;;1192:1:75;6019:108:49;;;3267:1:75;;10348:37:76;;;;:::i;:::-;2072:32096:69;;9937:13:76;;2072:32096:69;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;1192:1:75;2072:32096:69;;;-1:-1:-1;;;;;2072:32096:69;;;;;;;;;;;;;;;;16642:93:70;-1:-1:-1;;;;;2072:32096:69;16697:27:70;;;;2072:32096:69;;;16697:27:70;2072:32096:69;;;;;;-1:-1:-1;;2072:32096:69;;;;;2666:30;:6;:30;:::i;:::-;1525:73:37;;:::i;:::-;8470:156:49;17707:15:69;2072:32096;8470:156:49;17707:15:69;2072:32096;17834:38;2072:32096;;;;;;17834:38;2072:32096;;;;;;;;-1:-1:-1;;2072:32096:69;;;;;;;;1746:1:73;2072:32096:69;;;;;;;;;-1:-1:-1;;2072:32096:69;;;;;2666:30;:6;:30;:::i;:::-;1525:73:37;;:::i;:::-;6986:16:69;;:::i;:::-;;;;7127:13;2072:32096;7127:13;2072:32096;;7127:13;6982:900;2072:32096;7634:24;2072:32096;7615:15;:43;;7611:122;;8470:156:49;;7920:15:69;2072:32096;8470:156:49;;7920:15:69;2072:32096;8046:32;2072:32096;;;6610:4;2072:32096;;8046:32;2072:32096;;7611:122;7689:25;2072:32096;7689:25;2072:32096;;7689:25;2072:32096;;;;;;-1:-1:-1;;2072:32096:69;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;2072:32096:69;;;;;;;;;2666:6;:30;:6;:30;:::i;:::-;2072:32096;;;30924:15;2072:32096;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2072:32096:69;;;;;;;:::i;:::-;2666:6;;:30;;;:::i;:::-;2707:73:70;;:::i;:::-;-1:-1:-1;;;;;2072:32096:69;;2877:22;2072:32096;;2855:10;:45;2851:101;;8718:4:70;;;2072:32096:69;8718:4:70;;;;;:::i;:::-;2072:32096:69;;10896:26;;;;;2072:32096;10896:26;;2072:32096;10896:26;;2072:32096;10896:26;;2072:32096;;10896:26;;;;;;;;;;;2072:32096;;;;10996:24;11047;10996;;;:::i;:::-;11047;;:::i;:::-;11087:13;;11125:3;2072:32096;;11102:21;;;;;11159:13;;;2072:32096;11159:13;;;:::i;:::-;2072:32096;;;;;11227:20;2072:32096;;;;;;;;;;;;1237:14:44;2072:32096:69;;;;;1616:3:44;2072:32096:69;11187:93;;;;:::i;:::-;2072:32096;1460:31:44;11187:93:69;;;;:::i;:::-;2072:32096;11299:16;;;;:::i;:::-;2072:32096;11299:20;;;:45;;;11125:3;11295:260;;11125:3;;;2072:32096;11087:13;;11295:260;11503:36;2072:32096;;;;;;;;;;;;;;;;;;;11503:36;:16;;;;:::i;:::-;2072:32096;11522:17;;;;:::i;:::-;2072:32096;11503:36;;:::i;:::-;;;:::i;:::-;11295:260;;;;11299:45;11323:17;;;;;:::i;:::-;2072:32096;11323:21;;11299:45;;11102:21;2072:32096;11102:21;2072:32096;11102:21;;2072:32096;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;10896:26;;;;;;;;;;;;;:::i;:::-;;;2072:32096;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;10896:26;;;;;;;2072:32096;;;;;;;;;;;;;;;;;;;;;;;;;;;;10896:26;2072:32096;;;;;;;;;;;2851:101;2072:32096;2923:18;;;;;2072:32096;;;;;;;;;;-1:-1:-1;;2072:32096:69;;;;;;;;;4651:24;2072:32096;;;;;;;;;;-1:-1:-1;;2072:32096:69;;;;;2666:30;:6;:30;:::i;:::-;2072:32096;6403:16;;:::i;:::-;2072:32096;;;;;;;;6421:24;;2072:32096;;;;;6447:25;2072:32096;;;;;;;;;;;;-1:-1:-1;;2072:32096:69;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;2072:32096:69;;;;;2666:30;:6;:30;:::i;:::-;1525:73:37;;:::i;:::-;16222:4:69;2072:32096;16192:34;2072:32096;;;16192:34;2072:32096;16192:34;;:::i;2072:32096::-;;;;;;;;:::i;:::-;2666:6;;:30;:6;;;;:30;:::i;:::-;2707:73:70;;:::i;:::-;8020:101;;:::i;:::-;1083:103:53;;:::i;:::-;-1:-1:-1;;;;;2072:32096:69;;;;;;;;;;18298:13;2072:32096;;;;;;;;18294:117;;2072:32096;;;18447:20;;;;2072:32096;18447:20;;;;;;;;;;;;;2072:32096;;;18482:29;;18478:272;;3891:15:70;2072:32096:69;;;;18298:13;2072:32096;;;;;;;;;;;;;3891:15:70;;;:::i;:::-;;;;;:::i;:::-;;;:::i;:::-;19100:73:69;;;;:::i;:::-;2072:32096;;;;19183:20;2072:32096;;;;;;;;;;19570:44;;;2072:32096;19570:44;;2072:32096;19570:44;;2072:32096;19570:44;;;;;;;;;;;;;;2072:32096;19570:66;;;;:::i;:::-;19678:12;;;;:::i;:::-;2072:32096;;;;;;;;20054:12;2072:32096;;;;;23226:74;2072:32096;;;;23065:18;2072:32096;;2529:3;2072:32096;;;;;23138:15;2072:32096;;;;;;;;;;;;;;;;;;;;23226:74;20054:12;:::i;:::-;20082:30;;;20078:119;;-1:-1:-1;2072:32096:69;;;;;;;;;;;;;;;;;;;;20212:91;;2072:32096;;20212:91;551:66:53;3051:52:55;2072:32096:69;;;;;;20078:119;20135:51;2072:32096;20135:51;;;;;2072:32096;;;;20135:51;2072:32096;;;;;;;;;;19570:44;;;;;;;;;;;;;;;;:::i;:::-;;;2072:32096;;;;;19570:66;2072:32096;;19570:44;;;;;;;;2072:32096;;;;;;;;;18478:272;2072:32096;18703:36;;;;;2072:32096;;18703:36;18447:20;;;;;;;;;;;;;;:::i;:::-;;;;18294:117;2072:32096;18362:38;;;;;2072:32096;;18362:38;2072:32096;;;;;;-1:-1:-1;;2072:32096:69;;;;;;;:::i;:::-;;;2666:6;:30;:6;:30;:::i;:::-;8718:4:70;;;:::i;:::-;465::50;3098:36:69;;3094:108;;-1:-1:-1;;;;;2072:32096:69;;2877:22;2072:32096;;2855:10;:45;2851:101;;2072:32096;;;;;;;;;;;;19917:10:33;8036:26:76;;8032:97;;2072:32096:69;8232:183:76;2072:32096:69;;19669:4:33;12035:70:69;2072:32096;;8232:183:76;;:::i;2072:32096:69:-;;;;;;;;:::i;:::-;2666:6;;;;;;;:30;;;:::i;:::-;-1:-1:-1;;;;;2072:32096:69;;564:10:72;:29;560:108;;2707:73:70;;:::i;:::-;10002:12;;;:::i;:::-;859:9:41;:23;;;17174:79:70;;2072:32096:69;26600:241;;2072:32096;;-1:-1:-1;;;;;2072:32096:69;;;;26872:15;2072:32096;;;;;-1:-1:-1;;;;;2072:32096:69;;;;;;;;;;26855:59;;26851:120;;-1:-1:-1;;;;;2072:32096:69;;;;27006:20;2072:32096;;;;;;;27072:18;2072:32096;;;;;;1460:31:44;27245:67:69;27145:63;1460:31:44;27146:47:69;1460:31:44;1237:14;1460:31;;27146:47:69;:::i;:::-;27145:63;:::i;:::-;2072:32096;27246:51;2072:32096;;1616:3:44;2072:32096:69;27246:51;:::i;27245:67::-;2072:32096;-1:-1:-1;;;;;2072:32096:69;;;;27776:13;2072:32096;;-1:-1:-1;;;;;2072:32096:69;;;;;27819:55;;;;27815:190;;28019:49;;;;28015:175;;28231:27;28350:193;28231:27;;;;;:::i;:::-;28269:53;2072:32096;-1:-1:-1;;;;;2072:32096:69;;28269:53;:::i;:::-;28472:61;1460:31:44;28398:60:69;1460:31:44;1237:14;1460:31;;28398:60:69;:::i;:::-;2072:32096;1616:3:44;2072:32096:69;28472:61;:::i;28350:193::-;2072:32096;-1:-1:-1;;;;;2072:32096:69;;;;27006:20;2072:32096;;;;;;;-1:-1:-1;;;;;2072:32096:69;;29494:18;29490:82;;-1:-1:-1;;;;;2072:32096:69;;;;27072:18;2072:32096;;29607:41;2072:32096;;;;;29607:41;:::i;:::-;29778:14;;;:::i;:::-;-1:-1:-1;;;;;2072:32096:69;;;;27072:18;2072:32096;;;;;;26872:15;2072:32096;;;;;-1:-1:-1;;;;;2072:32096:69;;;;;;;;;29863:45;2072:32096;;;29863:45;:::i;:::-;2072:32096;;;;;;;-1:-1:-1;;;;;2072:32096:69;;;29924:46;2072:32096;-1:-1:-1;;;;;2072:32096:69;;29924:46;;28930:31;28926:134;;2072:32096;29073:28;;29069:125;;2072:32096;-1:-1:-1;;2072:32096:69;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2072:32096:69;;29209:169;;-1:-1:-1;2072:32096:69;;29209:169;2072:32096;;;;;;;;;;29069:125;-1:-1:-1;;;;;2072:32096:69;;29117:66;;;;-1:-1:-1;;;;;2072:32096:69;;;;;;;;;29117:66;;;;;2072:32096;29117:66;;2072:32096;;29117:66;;2072:32096;;;;;;;;;;;;29117:66;;;;;;;;29069:125;;;;29117:66;;;;;:::i;:::-;2072:32096;;29117:66;;;;2072:32096;;;;;;;;;28926:134;-1:-1:-1;;;;;2072:32096:69;;28977:72;;;;2072:32096;;28977:72;2072:32096;28977:72;;2072:32096;28977:72;;2072:32096;-1:-1:-1;;;;;2072:32096:69;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2072:32096:69;;28977:72;;;;;;;28926:134;28977:72;;;;;;:::i;:::-;2072:32096;28977:72;;28926:134;;29490:82;29535:26;2072:32096;29535:26;2072:32096;;29535:26;28015:175;28091:88;-1:-1:-1;;;;;28091:88:69;;2072:32096;28091:88;2072:32096;;;;;;;;;28091:88;27815:190;27897:97;;;2072:32096;27897:97;2072:32096;;;;;;;;27897:97;26851:120;26937:23;2072:32096;26937:23;2072:32096;;26937:23;26600:241;2072:32096;30248:114;;-1:-1:-1;;;;;2072:32096:69;;;;30456:15;2072:32096;;;;;-1:-1:-1;;;;;2072:32096:69;;;;;;;;;30456:43;2072:32096;;;30456:43;:::i;:::-;2072:32096;;26600:241;;;30248:114;30317:34;2072:32096;30317:34;2072:32096;;30317:34;17174:79:70;2072:32096:69;7916:84:49;17211:15:70;2072:32096:69;7916:84:49;2072:32096:69;17174:79:70;;560:108:72;616:41;2072:32096:69;616:41:72;564:10;2072:32096:69;;;;616:41:72;2072:32096:69;;;;;-1:-1:-1;;2072:32096:69;;;;;2666:30;:6;:30;:::i;:::-;2072:32096;7916:84:49;17245:15:69;2072:32096;;7916:84:49;;2072:32096:69;;;;;;;;;;;;;-1:-1:-1;;2072:32096:69;;;;;;;:::i;:::-;2666:30;:6;:30;:::i;:::-;8718:4:70;;;:::i;:::-;8759:36:69;-1:-1:-1;;;;;2072:32096:69;;;;;;;;8464:4;2072:32096;;;;;;;8759:36;;:::i;:::-;2072:32096;;;;;;;;;;8464:4;7916:84:49;958:1:75;7916:84:49;;2072:32096:69;2958:30:75;;;:62;:30;2072:32096:69;2790:99:75;;2958:62;6019:108:49;;7592:82:70;;;2072:32096:69;-1:-1:-1;8867:19:69;;;9011:16;;2072:32096;9011:16;2072:32096;;;;9011:16;8863:916;2958:30:75;:62;2072:32096:69;2958:62:75;:::i;:::-;6019:108:49;;9500:15:69;:49;;9496:131;;8470:156:49;2072:32096:69;8863:916;2072:32096;;;;;;8470:156:49;;2072:32096:69;;;;9892:37;2072:32096;;;8464:4;2072:32096;;9892:37;2072:32096;9496:131;9580:28;;2072:32096;9580:28;2072:32096;;;;9580:28;7592:82:70;7648:26;;;;2072:32096:69;;;;;;;;;7608:15:70;:66;;7592:82;;;2072:32096:69;;;;;-1:-1:-1;;2072:32096:69;;;;;;;;5847:20;2072:32096;;;;;;;;-1:-1:-1;;2072:32096:69;;;;;-1:-1:-1;;;;;2072:32096:69;;:::i;:::-;2666:30;:6;:30;:::i;:::-;2072:32096;;;31391:20;2072:32096;;;;;;;;;1460:31:44;1237:14;1460:31;;2072:32096:69;;1616:3:44;2072:32096:69;;;;;;;;;;;-1:-1:-1;;2072:32096:69;;;;;;;;1913:1:73;2072:32096:69;;;;;;;;-1:-1:-1;;2072:32096:69;;;;;;;-1:-1:-1;;;;;2072:32096:69;;;;;;;2666:30;:6;:30;:::i;:::-;1525:73:37;;:::i;:::-;1083:103:53;;:::i;:::-;2072:32096:69;;12862:49;2072:32096;;;12862:49;2072:32096;12927:54;2072:32096;12927:54;;2072:32096;551:66:53;3051:52:55;2072:32096:69;;;;;;-1:-1:-1;;2072:32096:69;;;;;;;;2529:3;2072:32096;;;;;;;;-1:-1:-1;;2072:32096:69;;;;;;;;;4803:26;2072:32096;;;;;;;;;-1:-1:-1;;2072:32096:69;;;;;2666:30;:6;:30;:::i;:::-;1525:73:37;;:::i;:::-;6986:16:69;;:::i;:::-;;;;8046:32;2072:32096;;8470:156:49;7920:15:69;2072:32096;8470:156:49;7920:15:69;2072:32096;;;;;;8046:32;2072:32096;6982:900;7841:16;2072:32096;7841:16;2072:32096;;7841:16;2072:32096;;;;;-1:-1:-1;;2072:32096:69;;;;;2666:30;:6;:30;:::i;:::-;2072:32096;6226:16;;:::i;:::-;2072:32096;;;;;;;;;;;;;-1:-1:-1;;2072:32096:69;;;;;;;-1:-1:-1;;;;;2072:32096:69;;;;;;;;2666:30;:6;:30;:::i;:::-;1525:73:37;;:::i;:::-;2072:32096:69;;32073:27;2072:32096;;;;;;;;32073:27;2072:32096;32116:32;2072:32096;32116:32;;2072:32096;;;;;;-1:-1:-1;;2072:32096:69;;;;;;;;:::i;:::-;2666:30;:6;:30;:::i;:::-;-1:-1:-1;;;;;2072:32096:69;;;;;30692:13;2072:32096;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2072:32096:69;;;;;;:::o;:::-;-1:-1:-1;;2072:32096:69;;;;;;-1:-1:-1;;;;;2072:32096:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;2072:32096:69;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;;;;;2072:32096:69;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;1931:430:37:-;2072:32096:69;;;2303:50:37;;;2320:22;;2072:32096:69;;;;;;;2303:50:37;;;;;;:::i;:::-;2072:32096:69;2293:61:37;;1931:430;:::o;2072:32096:69:-;;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;930:316:79;-1:-1:-1;;;;;2072:32096:69;1148:4:79;1140:31;1136:104;;930:316::o;1136:104::-;1194:35;;;;;;1688:201:37;33336:53:69;;1762:20:37;1774:7;;;;1762:20;:::i;:::-;33336:11:69;2072:32096;;;;33336:53;;;;;2072:32096;;;;1820:10:37;2072:32096:69;;;;33383:4;2072:32096;;;;;;;;;;-1:-1:-1;;;;;2072:32096:69;;;;;;;;;;;33336:53;;;;;;;;;;1774:7:37;33336:53:69;;;1688:201:37;1797:34;;1793:90;;1688:201::o;1793:90::-;1854:18;1774:7;1854:18;33336:53:69;1774:7:37;1854:18;33336:53:69;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;6249:212:70;2072:32096:69;6394:25:70;2072:32096:69;6375:15:70;:44;;:79;;;6249:212;:::o;6375:79::-;2072:32096:69;7916:84:49;6423:15:70;2072:32096:69;7916:84:49;;;6249:212:70;:::o;1192:349:53:-;551:66;2806:53:55;;1316:93:53;;1529:4;3051:52:55;;1192:349:53:o;1316:93::-;1368:30;-1:-1:-1;1368:30:53;;-1:-1:-1;1368:30:53;8911:160:70;-1:-1:-1;;;;;2072:32096:69;;9217:15:70;2072:32096:69;9217:15:70;2072:32096:69;;7916:84:49;2072:32096:69;9217:15:70;2072:32096:69;;7916:84:49;8984:24:70;8980:85;;8911:160;:::o;8980:85::-;9031:23;9217:15;9031:23;;2072:32096:69;;9217:15:70;9031:23;2786:145;9187:17:73;2806:53:55;2072:32096:69;2837:88:70;;2786:145::o;2837:88::-;2894:20;-1:-1:-1;2894:20:70;;-1:-1:-1;2894:20:70;10039:200;-1:-1:-1;;;;;2072:32096:69;;;;;-1:-1:-1;2072:32096:69;10124:13:70;2072:32096:69;;;-1:-1:-1;2072:32096:69;;;10124:41:70;10120:113;;10039:200;:::o;10120:113::-;10188:34;-1:-1:-1;10188:34:70;;2072:32096:69;;-1:-1:-1;10188:34:70;3450:119;;3544:17;3450:119;3544:17;:::i;:::-;2072:32096:69;;;;;;3543:18:70;2072:32096:69;-1:-1:-1;2072:32096:69;3543:18:70;;:::i;:::-;3450:119::o;2311:281:44:-;1237:14;2426:25;;;:58;;;;;2311:281;2422:113;;;3060:43;2072:32096:69;3080:3:44;2072:32096:69;3060:43:44;:::i;:::-;2311:281;:::o;2422:113::-;2507:17;;;;;;2426:58;2455:29;;;;2426:58;;;8177:168:70;7916:84:49;8248:15:70;2072:32096:69;;7916:84:49;;8244:95:70;;8177:168::o;8244:95::-;8305:23;-1:-1:-1;8305:23:70;;-1:-1:-1;8305:23:70;31497:216:69;2529:3;31589:45;;31585:122;;31497:216;:::o;31585:122::-;31657:39;;;;2072:32096;;31657:39;;23313:831;;;-1:-1:-1;;;;;2072:32096:69;;;23414:16;;;23410:83;;24093:44;2072:32096;;;;;;23428:1;2072:32096;23528:18;2072:32096;;23528:41;2072:32096;;23428:1;2072:32096;;23528:41;:::i;:::-;23949:14;;;:::i;:::-;2072:32096;23428:1;2072:32096;23528:18;2072:32096;;;23428:1;2072:32096;;24034:15;2072:32096;;;23428:1;2072:32096;;23428:1;2072:32096;;;;23428:1;2072:32096;24034:43;2072:32096;;;24034:43;:::i;:::-;2072:32096;;;;;;;24093:44;23313:831::o;23410:83::-;23453:29;23428:1;23453:29;;23428:1;23453:29;16264:226;16402:4;8470:156:49;16336:15:69;2072:32096;8470:156:49;;16336:15:69;2072:32096;16461:22;-1:-1:-1;16461:22:69;;16264:226::o;1822:864:50:-;2004:6;;2000:58;;2560:120;2153:5;;;;:::i;:::-;2560:120;;;;;;;;;;1822:864;:::o;2000:58::-;2033:14;2009:1;2033:14;;2009:1;2033:14;2072:32096:69;;;;;;;;;;;;;;;;;;:::o;32241:199::-;;-1:-1:-1;;;;;2072:32096:69;32339:10;:25;32335:62;;32428:4;;;:::i;32335:62::-;32380:7;:::o;34375:314:119:-;34568:16;34552:33;;34548:105;;34375:314;:::o;34548:105::-;34608:34;;;;2072:32096:69;;34608:34:119;;4346:904:70;4485:10;;4481:23;;-1:-1:-1;;;;;9520:18:73;2072:32096:69;;;4494:1:70;2072:32096:69;;;;;4494:1:70;2072:32096:69;2806:53:55;2072:32096:69;;;;;;4494:1:70;2072:32096:69;;;;;;;;;;;;;4738:9:70;;;9342:26:73;;3831:53:55;;2072:32096:69;;;;;;;;;3051:52:55;4734:423:70;4494:1;2072:32096:69;;;;4494:1:70;2072:32096:69;3051:52:55;4346:904:70:o;4734:423::-;;4940:217;9342:26:73;3831:53:55;;2072:32096:69;6806:1:47;2072:32096:69;;;;;;;3051:52:55;4734:423:70;;4481:23;4497:7;;:::o;2097:657:49:-;;2072:32096:69;19627:2:33;2072:32096:69;9400:76:49;;2072:32096:69;2539:209:49;;;2072:32096:69;2539:209:49;;;;2097:657;:::o;9180:112::-;9268:13;9186:14;9268:13;;9186:14;9268:13;2097:657;;8966:3;8956:13;;;;8952:64;;2072:32096:69;;;;;;;;2641:5:118;9226:3:49;2641:5:118;:13;:5;;;:13;9226:3:49;2641:13:118;19627:2:33;9204:40:49;9180:112;;2072:32096:69;19627:2:33;2072:32096:69;9400:76:49;;2539:209;;;;;;;;;2097:657;:::o;2641:13:118:-;;;32935:227:69;33615:45;;32935:227;33021:20;33033:7;;;;33021:20;:::i;:::-;-1:-1:-1;;;;;33615:11:69;2072:32096;;;;;;;33615:45;;;;;;2072:32096;33615:45;;33078:10;33615:45;;;;2072:32096;;;;;;;;;;;-1:-1:-1;;;;;2072:32096:69;;;;;;;;;;;;;;-1:-1:-1;2072:32096:69;;;:::o;:::-;;;;;;;;;;8442:263:76;6019:108:49;;2072:32096:69;6019:108:49;;19669:4:33;2072:32096:69;;;;;;;;;;;;;;;8442:263:76;:::o;7866:704:77:-;;;8372:29;465:4:50;838:5;8372:191:77;7866:704;8058:20;:48;:20;;;;;:48;:::i;:::-;2072:32096:69;1946:22:46;8466:42:77;:30;;;;;:42;:::i;:::-;2072:32096:69;8522:31:77;:19;;;;;:31;:::i;:::-;2072:32096:69;1946:22:46;;:::i;:::-;838:5:50;:::i;:::-;2072:32096:69;8372:29:77;;;:191;:::i;:::-;2072:32096:69;7866:704:77:o"},"methodIdentifiers":{"addLiquidityToBuffer(address,uint256,uint256,uint256,address)":"e2a92b1a","areBuffersPaused()":"55cba7fe","collectAggregateFees(address)":"8f4ab9ca","disableQuery()":"de1a36a6","disableQueryPermanently()":"821440f2","disableRecoveryMode(address)":"bffb78b2","enableQuery()":"e0d55605","enableRecoveryMode(address)":"dc3f574e","getActionId(bytes4)":"851c1bb3","getBufferAsset(address)":"0387587d","getBufferBalance(address)":"4021fe0f","getBufferMinimumTotalSupply()":"26a8a991","getBufferOwnerShares(address,address)":"9385e39a","getBufferPeriodDuration()":"20c1fb7a","getBufferPeriodEndTime()":"cd51c12f","getBufferTotalShares(address)":"f2784e07","getMaximumPoolTokens()":"2e42f4d5","getMinimumPoolTokens()":"a8175b27","getMinimumTradeAmount()":"e2cb0ba0","getMinimumWrapAmount()":"53956aa2","getPauseWindowEndTime()":"8a8d123a","getPoolMinimumTotalSupply()":"d0965a6b","getVaultPausedState()":"85c8c015","initializeBuffer(address,uint256,uint256,uint256,address)":"653eb3b0","isVaultPaused()":"098401f5","pausePool(address)":"55aca1ec","pauseVault()":"9e0879c2","pauseVaultBuffers()":"e085c5a8","reentrancyGuardEntered()":"d2c725e0","removeLiquidityFromBuffer(address,uint256,uint256,uint256)":"ebc7955c","removeLiquidityFromBufferHook(address,uint256,uint256,uint256,address)":"5dcacd64","setAuthorizer(address)":"058a628f","setProtocolFeeController(address)":"2d771389","setStaticSwapFeePercentage(address,uint256)":"d15126ba","unpausePool(address)":"f21c38cd","unpauseVault()":"0b7562be","unpauseVaultBuffers()":"b9212b49","updateAggregateSwapFeePercentage(address,uint256)":"5e0b06f4","updateAggregateYieldFeePercentage(address,uint256)":"e253670a","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"mainVault\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"minTradeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minWrapAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceOverflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CodecOverflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotStaticCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"PoolTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"totalSwapFees\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"totalYieldFees\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQueryPermanently\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reentrancyGuardEntered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"removeLiquidityFromBufferHook\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"Bytecode extension for the Vault containing permissioned functions. Complementary to `VaultExtension`, it has access to the same storage layout as the main vault. The functions in this contract are not meant to be called directly. They must only be called by the Vault via delegate calls, so that any state modifications produced by this contract's code will actually target the main Vault's state. The storage of this contract is in practice unused.\",\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"PoolTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"Approval(address,address,address,uint256)\":{\"params\":{\"owner\":\"The token holder\",\"pool\":\"The pool token receiving the allowance\",\"spender\":\"The account being authorized to spend a given amount of the token\",\"value\":\"The number of tokens spender is authorized to transfer from owner\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Transfer(address,address,address,uint256)\":{\"params\":{\"from\":\"The token source\",\"pool\":\"The pool token being transferred\",\"to\":\"The token destination\",\"value\":\"The number of tokens\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingInRaw\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedInRaw\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens deposited into the buffer\"}},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\",\"returns\":{\"_0\":\"True if the Vault buffers are paused\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"totalSwapFees\":\"An array with the total swap fees collected, sorted in token registration order\",\"totalYieldFees\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"disableQuery()\":{\"details\":\"The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2). This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether disabling queries is completely necessary; queries can still be re-enabled after this call.\"},\"disableQueryPermanently()\":{\"details\":\"Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\"},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"enableQuery()\":{\"details\":\"Only works if queries are not permanently disabled.\"},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\",\"params\":{\"pool\":\"The address of the pool\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"_0\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"_1\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"_0\":\"The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"shares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer timestamps are 32 bits.\",\"returns\":{\"_0\":\"The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer timestamps are 32 bits.\",\"returns\":{\"_0\":\"The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"shares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"_0\":\"The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"_0\":\"The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"_0\":\"The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"_0\":\"The minimum wrap amount in native underlying token decimals\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance. Balancer timestamps are 32 bits.\",\"returns\":{\"_0\":\"The timestamp when the Vault's pause window ends\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"_0\":\"The minimum total supply a pool can have after initialization\"}},\"getVaultPausedState()\":{\"details\":\"Balancer timestamps are 32 bits.\",\"returns\":{\"_0\":\"True if the Vault is paused\",\"_1\":\"The timestamp of the end of the Vault's pause window\",\"_2\":\"The timestamp of the end of the Vault's buffer period\"}},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `areBuffersPaused` to check the pause state of the buffers.\",\"returns\":{\"_0\":\"True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment. Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers are also paused (with `pauseVaultBuffers`).\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting buffers, and vice versa.\"},\"reentrancyGuardEntered()\":{\"returns\":{\"_0\":\"True if the Vault is currently executing a nonReentrant function\"}},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"removeLiquidityFromBufferHook(address,uint256,uint256,uint256,address)\":{\"details\":\"Internal hook for `removeLiquidityFromBuffer`. Can only be called by the Vault itself via `removeLiquidityFromBuffer`, which correctly forwards the real sender as the `sharesOwner`. This function must be reentrant because it calls the nonReentrant function `sendTo`. However, since `sendTo` is the only function that makes external calls, `removeLiquidityFromBufferHook` cannot reenter the Vault.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Owner of the shares (`msg.sender` for `removeLiquidityFromBuffer` entrypoint)\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`. If the Vault was also paused, it will remain in that state until explicitly unpaused. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateSwapFeePercentageChanged` event.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose swap fee percentage will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateYieldFeePercentageChanged` event.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose yield fee percentage will be updated\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BalanceOverflow()\":[{\"notice\":\"One of the balances is above the maximum value that can be stored.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"CodecOverflow()\":[{\"notice\":\"Function called with an invalid value.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotStaticCall()\":[{\"notice\":\"A state-changing transaction was initiated in a context that only allows static calls.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"OutOfBounds()\":[{\"notice\":\"Function called with an invalid bitLength or offset.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"PoolTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a pool token can't be lower than the absolute minimum.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}],\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"Approval(address,address,address,uint256)\":{\"notice\":\"The allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Transfer(address,address,address,uint256)\":{\"notice\":\"Pool tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"disableQuery()\":{\"notice\":\"Disables query functionality on the Vault. Can only be called by governance.\"},\"disableQueryPermanently()\":{\"notice\":\"Disables query functionality permanently on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"enableQuery()\":{\"notice\":\"Enables query functionality on the Vault. Can only be called by governance.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"reentrancyGuardEntered()\":{\"notice\":\"Expose the state of the Vault's reentrancy guard.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/VaultAdmin.sol\":\"VaultAdmin\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IERC20MultiTokenErrors.sol\":{\"keccak256\":\"0x4994bc0f8e5905640876a9411dadb73221ea2b7b1168d22cf5fe44ee1ca16960\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://69a0a6ab9c2622426ccfcb7263deb5615e589e98b3b31ea9fcd21595bb42a13d\",\"dweb:/ipfs/QmVW6GVXGTHnVo8MGk7zdLMASR8uN7khPsrEMXwgy4NBrQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol\":{\"keccak256\":\"0x9dc4c8d6dd5dbc108dd377dab73a3e6c84e8c104713d2afb3cba8acc9ddf4c63\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2ef7c65fe356144f8cd720109b818e1ec6cc495ca35b55ca273ef9db45c6ae00\",\"dweb:/ipfs/QmREJgnfgoqemnYKvfYjTFJBAMsV9VAKA5AY5Woprpc1vs\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\":{\"keccak256\":\"0xa1014b8d96cdfd149f502cda06f25e51885a6456b41061ed213086fcc1c496b4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8a96e7e176f73762c6de904de39472fe970f12f6d3631097227bc664bd0780c1\",\"dweb:/ipfs/QmXcu5bk8tJTqR6UwkdKNtsodzqYGpJsPdfjQmdJFyKZjR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol\":{\"keccak256\":\"0xf98fec19a1516432d7540f0cde2e967b627afbc5a361835766d57be8ba10b4e2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://94b49929bff77d1fdaab8916350356fc9816317beef4f33c3af0e6a40493d01c\",\"dweb:/ipfs/QmPPhtmpPvgedbtQaJZz7JQCmiGKKTHmfh7EGhJS1yUCia\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":{\"keccak256\":\"0xb5f6b1d0ee3f295a717ce58329eaadccb1eefc2e1e02e2e7c438e377628475cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03c1b9bc73b7d14d9e1948a31c271a03a6ba4291f44d9aff17e60d300c111d0d\",\"dweb:/ipfs/QmNpW3iD3ST76N6xTncuVgYSuafSqFkXUmxNaK8uybr96G\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0xeb183354089582d4a3fc8ded6cc410a2937f2eac2aa47b3ab13b0f5e6ede10e5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ecef18f7f0f57d749d5b0e11ab887299be15e1b6971a4bb9104d06e45705231b\",\"dweb:/ipfs/QmeYRDD5UtVKu2YFJm3SmHFriK6LUa2Tzg7EdZrneEfzNR\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x79f2ec4f7314bd1c3555368ff02bb9d382489dc8bbd7efbbf306f9a5084f3bec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a57c155451c5b1c1c59a27770754ccd9ba1be9344db6ac45b8744eba5fa4fa2f\",\"dweb:/ipfs/QmarkRwGaS3egg1FaQH6LibqjT6NocVUbD1jMPWtFxFaQV\"]},\"@balancer-labs/v3-vault/contracts/VaultAdmin.sol\":{\"keccak256\":\"0x4867fd0bb2efe3fd6de41c7ba17e31fa2b8f8a9fdc085c03f45c5504c3a95d3c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8cb23e3dda5ef46a0f11861ac8a1a0e787c33df7241899208291d6fef1fec7fe\",\"dweb:/ipfs/QmVLLgjmomkgg6t2mB3PjDLhkAZ9x9gLSqU6kH22J3gwRu\"]},\"@balancer-labs/v3-vault/contracts/VaultCommon.sol\":{\"keccak256\":\"0xad949728097754fb91dd82f46a4f3430f0caf092fe719f04c030325e623c59cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b6ba4635b64181a08098f2b4bde9bc6ceb8580d24654ec39c3d38ac2c8082317\",\"dweb:/ipfs/QmbthXemuT8Qvs2jdTADdyzbcPuZaKWfZjRn7j8dWuwffs\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@balancer-labs/v3-vault/contracts/VaultStorage.sol\":{\"keccak256\":\"0x283153cc86b04e7b5ded7b317a7773cd52912661922d477bccc7e3ef9c4fd332\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://30e03b35be9f4aebba5ea1f6fd1f72fb37990c916a22ef1dd4a01af809f89146\",\"dweb:/ipfs/QmNri89FgxWKFPkN67tvzAGf6kSyMuYvZd62ZW9a5MJBJH\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolConfigConst.sol\":{\"keccak256\":\"0xcec5acd992ba3d85194d2a66de785676e5fbd76c7ef4bd75f581582c637e9191\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03feaba5c47de6cfa364a9f78f3d1cbc48c6e59e89348a56e773631ce3d52c4d\",\"dweb:/ipfs/QmWZmpFLKk6qEsTtbPaiKBWvTnSuYzQdbNJZX4Bng16c3F\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolConfigLib.sol\":{\"keccak256\":\"0x0df4ac214754751acdaa044f697ef2a45823689689aac22a6a102c8e543d97c7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13c1c708ac1a1f5523282a7430d7f5300120ac17b3c77a0bd103d2afe7aff979\",\"dweb:/ipfs/QmPstE7ZquJ4zMaCEXix8iCXc6hTSyNQaR9Z4aWBMTa9ys\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolDataLib.sol\":{\"keccak256\":\"0x0f004ef9c126426c1391516247f90cbb699982f3c545c821c2bdc3796c93f781\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://93d7b94cb4e0c9eee127258fb69e390d34c391444f337b6cc5cbe5beb702f4e7\",\"dweb:/ipfs/QmbswDz4DrsXaEh9RSvpmWKX5JCLoTavyAX2511eKr5rQd\"]},\"@balancer-labs/v3-vault/contracts/lib/VaultExtensionsLib.sol\":{\"keccak256\":\"0xf17a6fb82ff8eac940260544aa041e2cf8b826c0f7e205b4d52a4c5394a7ee38\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c88893eba6593f2f7ef05e3ffeb61416b6cc630eaad2efa90e77262f3282ab81\",\"dweb:/ipfs/QmX9XhQix9yKT7buiT77igy8Bf1jvwwYGxpmTr4e5mWnQD\"]},\"@balancer-labs/v3-vault/contracts/lib/VaultStateLib.sol\":{\"keccak256\":\"0xc40f34646f76afe536a326173d3c8cd663a655375531f65f3e6f7c63cecddeeb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a97b6d2363d70869b9cf66104a6c6bdfc84d351085c94b23b0104f2608e52ff4\",\"dweb:/ipfs/QmVPVR8F6nSxxhxTpFp5cgH9n1dE2E5UXD6cPauumtpS3e\"]},\"@balancer-labs/v3-vault/contracts/token/ERC20MultiToken.sol\":{\"keccak256\":\"0x49578c053271957fa9661c6a3e3ce6310a3f0690be6deca9eeb28f4e129bcfd3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e3bbd6d7baa790f6e259dfcab0ae2b0db96c08b21739dca829217af6fdbea15d\",\"dweb:/ipfs/QmVgirrgRbkHVdfthMKTJi98QeHmx9DHTT1WBNQRYogpBn\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/VaultCommon.sol":{"VaultCommon":{"abi":[{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"PoolTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"},{"inputs":[],"name":"reentrancyGuardEntered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"reentrancyGuardEntered()":"d2c725e0"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"PoolTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"reentrancyGuardEntered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This contract contains common utilities in the inheritance chain that require storage to work, and will be required in both the main Vault and its extensions.\",\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"PoolTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"Approval(address,address,address,uint256)\":{\"params\":{\"owner\":\"The token holder\",\"pool\":\"The pool token receiving the allowance\",\"spender\":\"The account being authorized to spend a given amount of the token\",\"value\":\"The number of tokens spender is authorized to transfer from owner\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Transfer(address,address,address,uint256)\":{\"params\":{\"from\":\"The token source\",\"pool\":\"The pool token being transferred\",\"to\":\"The token destination\",\"value\":\"The number of tokens\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{\"reentrancyGuardEntered()\":{\"returns\":{\"_0\":\"True if the Vault is currently executing a nonReentrant function\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"PoolTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a pool token can't be lower than the absolute minimum.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"Approval(address,address,address,uint256)\":{\"notice\":\"The allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Transfer(address,address,address,uint256)\":{\"notice\":\"Pool tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{\"reentrancyGuardEntered()\":{\"notice\":\"Expose the state of the Vault's reentrancy guard.\"}},\"notice\":\"Functions and modifiers shared between the main Vault and its extension contracts.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/VaultCommon.sol\":\"VaultCommon\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IERC20MultiTokenErrors.sol\":{\"keccak256\":\"0x4994bc0f8e5905640876a9411dadb73221ea2b7b1168d22cf5fe44ee1ca16960\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://69a0a6ab9c2622426ccfcb7263deb5615e589e98b3b31ea9fcd21595bb42a13d\",\"dweb:/ipfs/QmVW6GVXGTHnVo8MGk7zdLMASR8uN7khPsrEMXwgy4NBrQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol\":{\"keccak256\":\"0x9dc4c8d6dd5dbc108dd377dab73a3e6c84e8c104713d2afb3cba8acc9ddf4c63\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2ef7c65fe356144f8cd720109b818e1ec6cc495ca35b55ca273ef9db45c6ae00\",\"dweb:/ipfs/QmREJgnfgoqemnYKvfYjTFJBAMsV9VAKA5AY5Woprpc1vs\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\":{\"keccak256\":\"0xa1014b8d96cdfd149f502cda06f25e51885a6456b41061ed213086fcc1c496b4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8a96e7e176f73762c6de904de39472fe970f12f6d3631097227bc664bd0780c1\",\"dweb:/ipfs/QmXcu5bk8tJTqR6UwkdKNtsodzqYGpJsPdfjQmdJFyKZjR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol\":{\"keccak256\":\"0xf98fec19a1516432d7540f0cde2e967b627afbc5a361835766d57be8ba10b4e2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://94b49929bff77d1fdaab8916350356fc9816317beef4f33c3af0e6a40493d01c\",\"dweb:/ipfs/QmPPhtmpPvgedbtQaJZz7JQCmiGKKTHmfh7EGhJS1yUCia\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":{\"keccak256\":\"0xb5f6b1d0ee3f295a717ce58329eaadccb1eefc2e1e02e2e7c438e377628475cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03c1b9bc73b7d14d9e1948a31c271a03a6ba4291f44d9aff17e60d300c111d0d\",\"dweb:/ipfs/QmNpW3iD3ST76N6xTncuVgYSuafSqFkXUmxNaK8uybr96G\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0xeb183354089582d4a3fc8ded6cc410a2937f2eac2aa47b3ab13b0f5e6ede10e5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ecef18f7f0f57d749d5b0e11ab887299be15e1b6971a4bb9104d06e45705231b\",\"dweb:/ipfs/QmeYRDD5UtVKu2YFJm3SmHFriK6LUa2Tzg7EdZrneEfzNR\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x79f2ec4f7314bd1c3555368ff02bb9d382489dc8bbd7efbbf306f9a5084f3bec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a57c155451c5b1c1c59a27770754ccd9ba1be9344db6ac45b8744eba5fa4fa2f\",\"dweb:/ipfs/QmarkRwGaS3egg1FaQH6LibqjT6NocVUbD1jMPWtFxFaQV\"]},\"@balancer-labs/v3-vault/contracts/VaultCommon.sol\":{\"keccak256\":\"0xad949728097754fb91dd82f46a4f3430f0caf092fe719f04c030325e623c59cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b6ba4635b64181a08098f2b4bde9bc6ceb8580d24654ec39c3d38ac2c8082317\",\"dweb:/ipfs/QmbthXemuT8Qvs2jdTADdyzbcPuZaKWfZjRn7j8dWuwffs\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@balancer-labs/v3-vault/contracts/VaultStorage.sol\":{\"keccak256\":\"0x283153cc86b04e7b5ded7b317a7773cd52912661922d477bccc7e3ef9c4fd332\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://30e03b35be9f4aebba5ea1f6fd1f72fb37990c916a22ef1dd4a01af809f89146\",\"dweb:/ipfs/QmNri89FgxWKFPkN67tvzAGf6kSyMuYvZd62ZW9a5MJBJH\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolConfigConst.sol\":{\"keccak256\":\"0xcec5acd992ba3d85194d2a66de785676e5fbd76c7ef4bd75f581582c637e9191\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03feaba5c47de6cfa364a9f78f3d1cbc48c6e59e89348a56e773631ce3d52c4d\",\"dweb:/ipfs/QmWZmpFLKk6qEsTtbPaiKBWvTnSuYzQdbNJZX4Bng16c3F\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolConfigLib.sol\":{\"keccak256\":\"0x0df4ac214754751acdaa044f697ef2a45823689689aac22a6a102c8e543d97c7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13c1c708ac1a1f5523282a7430d7f5300120ac17b3c77a0bd103d2afe7aff979\",\"dweb:/ipfs/QmPstE7ZquJ4zMaCEXix8iCXc6hTSyNQaR9Z4aWBMTa9ys\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolDataLib.sol\":{\"keccak256\":\"0x0f004ef9c126426c1391516247f90cbb699982f3c545c821c2bdc3796c93f781\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://93d7b94cb4e0c9eee127258fb69e390d34c391444f337b6cc5cbe5beb702f4e7\",\"dweb:/ipfs/QmbswDz4DrsXaEh9RSvpmWKX5JCLoTavyAX2511eKr5rQd\"]},\"@balancer-labs/v3-vault/contracts/lib/VaultStateLib.sol\":{\"keccak256\":\"0xc40f34646f76afe536a326173d3c8cd663a655375531f65f3e6f7c63cecddeeb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a97b6d2363d70869b9cf66104a6c6bdfc84d351085c94b23b0104f2608e52ff4\",\"dweb:/ipfs/QmVPVR8F6nSxxhxTpFp5cgH9n1dE2E5UXD6cPauumtpS3e\"]},\"@balancer-labs/v3-vault/contracts/token/ERC20MultiToken.sol\":{\"keccak256\":\"0x49578c053271957fa9661c6a3e3ce6310a3f0690be6deca9eeb28f4e129bcfd3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e3bbd6d7baa790f6e259dfcab0ae2b0db96c08b21739dca829217af6fdbea15d\",\"dweb:/ipfs/QmVgirrgRbkHVdfthMKTJi98QeHmx9DHTT1WBNQRYogpBn\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/VaultExtension.sol":{"VaultExtension":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"mainVault","type":"address"},{"internalType":"contract IVaultAdmin","name":"vaultAdmin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BalanceOverflow","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"CodecOverflow","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"ErrorSelectorNotFound","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotStaticCall","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"OutOfBounds","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"PoolTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"name":"Result","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintToInt","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TokensNotSorted","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"swapParams","type":"tuple"}],"name":"computeDynamicSwapFeePercentage","outputs":[{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"emitAuxiliaryEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddLiquidityCalledFlag","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBptRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getERC4626BufferAsset","outputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getHooksConfig","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonzeroDeltaCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolConfig","outputs":[{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolPausedState","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolRoleAccounts","outputs":[{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenRates","outputs":[{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getReservesOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenDelta","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"isERC4626BufferInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInRecoveryMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabledPermanently","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quote","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quoteAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reentrancyGuardEntered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOutRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_contract_IVault_fromMemory":{"entryPoint":981,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint32_fromMemory":{"entryPoint":1001,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":946,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_4298":{"entryPoint":899,"id":null,"parameterSlots":1,"returnSlots":0},"fun_calculateVaultStorageSlot":{"entryPoint":1029,"id":28383,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6102006040908082523461036e578181615de2803803809161002182856103b2565b83398101031261036e57610034816103d5565b6020918201516001600160a01b03929091908383169081840361036e5761007a865161005f81610383565b600a8152691a5cd55b9b1bd8dad95960b21b83820152610405565b60c0526100ad865161008b81610383565b60118152701b9bdb96995c9bd1195b1d1850dbdd5b9d607a1b83820152610405565b60e0526100da86516100be81610383565b600b81526a746f6b656e44656c74617360a81b83820152610405565b9561010096875261011281516100ef81610383565b6012815271185919131a5c5d5a591a5d1e50d85b1b195960721b84820152610405565b95610120968752610141825161012781610383565b60098152681cd95cdcda5bdb925960ba1b85820152610405565b610140908152825163fbfa77cf60e01b815290918482600481895afa918215610379575f9261033e575b5080871691160361032f578151634546891d60e11b8152918383600481885afa928315610325575f93610306575b506101609283528051631060fdbd60e11b8152948486600481845afa9586156102d8575f966102e2575b50846004916101a097885283519283809263cd51c12f60e01b82525afa9485156102d8575f956102a9575b50506101809384526101c09586526101e0968752519661590998896104d98a3960805189505060a05189505060c05189818161110e015281816130bf015261335e015260e051898181611ce601528181615117015261515f01525188818161129001526150bd015251878181611476015261180001525186818161145401526117de0152518550505184613ff50152518381816105dd0152612eea0152518281816122860152612bac01525181818161065d0152612b6f0152f35b6102c9929550803d106102d1575b6102c181836103b2565b8101906103e9565b925f806101ee565b503d6102b7565b82513d5f823e3d90fd5b60049196506102fe8691823d84116102d1576102c181836103b2565b9691506101c3565b61031e919350843d86116102d1576102c181836103b2565b915f610199565b50513d5f823e3d90fd5b634166145b60e11b5f5260045ffd5b9091508481813d8311610372575b61035681836103b2565b8101031261036e57610367906103d5565b905f61016b565b5f80fd5b503d61034c565b84513d5f823e3d90fd5b604081019081106001600160401b0382111761039e57604052565b634e487b7160e01b5f52604160045260245ffd5b601f909101601f19168101906001600160401b0382119082101761039e57604052565b51906001600160a01b038216820361036e57565b9081602091031261036e575163ffffffff8116810361036e5790565b6040519061041282610383565b600c8252610493603a602084016b5661756c7453746f7261676560a01b81526020604051948592828401977f62616c616e6365722d6c6162732e76332e73746f726167652e000000000000008952518091603986015e830190601760f91b60398301528051928391018583015e015f8382015203601a8101845201826103b2565b5190205f1981019081116104c4576040519060208201908152602082526104b982610383565b9051902060ff191690565b634e487b7160e01b5f52601160045260245ffdfe60806040526004361015610018575b36612b5857612b30565b5f3560e01c8062fdfa13146102b657806313d21cdf146102b157806313ef8a5d146102ac57806315e32046146102a75780631ba0ae45146102a25780634afbaf5a1461029d5780634d472bdd146102985780634f037ee714610293578063532cec7c1461028e578063535cfd8a1461028957806367e0e076146102845780636844846b1461027f5780636c9bc7321461027a578063757d64b3146102755780637e361bde146102705780638380edb71461026b57806385e0b9991461026657806385f2dbd414610261578063927da1051461025c57806396787092146102575780639e825ff514610252578063a07d60401461024d578063aaabadc514610248578063ace9b89b14610243578063b45090f91461023e578063b4aef0ab14610239578063ba8a2be014610234578063be7d628a1461022f578063c673bdaf1461022a578063c808824714610225578063ca4f280314610220578063ce8630d41461021b578063d2c725e014610216578063db81718714610211578063e1f21c671461020c578063e4dc2aa414610207578063e9ddeb2614610202578063edfa3568146101fd578063eeec802f146101f8578063f29486a1146101f3578063f7888aec146101ee5763fbfa77cf0361000e57612267565b6121fe565b612164565b611f70565b611e8a565b611dce565b611d57565b611d0e565b611cca565b611c8c565b611b94565b611ae6565b611a3e565b6119f6565b6119a2565b6118b7565b61188d565b611841565b6117b2565b611781565b6112c6565b611264565b611220565b6111d0565b6111a2565b611138565b6110f2565b610fd2565b610e7c565b610ddc565b610d94565b610c3e565b610b38565b610ad4565b6109d2565b6108f0565b610681565b61063e565b61059c565b610572565b610483565b610313565b6001600160a01b038116036102cc57565b5f80fd5b61010435906102de826102bb565b565b35906102de826102bb565b60031960409101126102cc57600435610303816102bb565b90602435610310816102bb565b90565b346102cc5760206103626001600160a01b0361032e366102eb565b9190610338612ba2565b61034181612bfc565b165f526006835260405f20906001600160a01b03165f5260205260405f2090565b5460801c604051908152f35b9081518082526020808093019301915f5b82811061038d575050505090565b83516001600160a01b03168552938101939281019260010161037f565b600211156103b457565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b90604060609280516103f2816103aa565b83526001600160a01b0360208201511660208401520151151560408201520190565b9081518082526020808093019301915f5b828110610433575050505090565b909192938261044560019287516103e1565b950193929101610425565b9081518082526020808093019301915f5b82811061046f575050505090565b835185529381019392810192600101610461565b346102cc5760206003193601126102cc576105646104c56004356104a6816102bb565b6104ae6122aa565b506104b7612ba2565b6104c081612c47565b612c94565b60405191829160208352805160208401526104f0602082015160e0604086015261010085019061036e565b60c061055261053f61052b610517604087015195601f1996878b83030160608c0152610414565b6060870151868a83030160808b0152610450565b6080860151858983030160a08a0152610450565b60a0850151848883030184890152610450565b920151908483030160e0850152610450565b0390f35b5f9103126102cc57565b346102cc575f6003193601126102cc5761058a612ba2565b602060ff600954166040519015158152f35b346102cc5760206003193601126102cc5760806004356105bb816102bb565b6105c3612ba2565b6105cc81612bfc565b6105d581612eab565b6106029291927f00000000000000000000000000000000000000000000000000000000000000008261230e565b916001600160a01b038091165f52600160205260405f20541691604051931515845263ffffffff80921660208501521660408301526060820152f35b346102cc575f6003193601126102cc5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102cc5760206003193601126102cc5760206004356106a0816102bb565b6106a8612ba2565b6001600160a01b038091165f52600e825260405f205416604051908152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6060810190811067ffffffffffffffff82111761071057604052565b6106c7565b6080810190811067ffffffffffffffff82111761071057604052565b610140810190811067ffffffffffffffff82111761071057604052565b60e0810190811067ffffffffffffffff82111761071057604052565b67ffffffffffffffff811161071057604052565b90601f601f19910116810190811067ffffffffffffffff82111761071057604052565b604051906102de8261074e565b604051906102de82610715565b604051906102de82610731565b60405190610160820182811067ffffffffffffffff82111761071057604052565b604051906102de826106f4565b600211156102cc57565b35906102de826107f6565b67ffffffffffffffff81116107105760051b60200190565b9080601f830112156102cc57602090823561083d8161080b565b9361084b604051958661077e565b81855260208086019260051b8201019283116102cc57602001905b828210610874575050505090565b81358152908301908301610866565b67ffffffffffffffff811161071057601f01601f191660200190565b9291926108ab82610883565b916108b9604051938461077e565b8294818452818301116102cc578281602093845f960137010152565b9080601f830112156102cc578160206103109335910161089f565b346102cc576003196040813601126102cc5760043561090e816102bb565b6024359067ffffffffffffffff928383116102cc5760e09083360301126102cc576109376107a1565b9061094483600401610800565b82526024830135602083015260448301358481116102cc5761096c9060043691860101610823565b6040830152606483013560608301526084830135608083015261099160a484016102e0565b60a083015260c48301359384116102cc576109b86109c293600461056496369201016108d5565b60c083015261232b565b6040519081529081906020820190565b346102cc5760206003193601126102cc576004356109ef816102bb565b6109f7612ba2565b610a0081612c47565b610a4d60206080610a1084612c94565b0151604051809381927f984de9e8000000000000000000000000000000000000000000000000000000008352604060048401526044830190610450565b6001602483015203816001600160a01b0386165afa8015610acf57610564926109c2925f92610a9a575b50610a93906001600160a01b03165f52601160205260405f2090565b5490613088565b610a93919250610ac19060203d602011610ac8575b610ab9818361077e565b810190612457565b9190610a77565b503d610aaf565b612483565b346102cc5760206003193601126102cc576001600160a01b03600435610af9816102bb565b610b01612ba2565b610b0a81612bfc565b165f525f6020526020600160405f2054811c166040519015158152f35b906020610310928181520190610450565b346102cc5760206003193601126102cc576105646080610b6e600435610b5d816102bb565b610b65612ba2565b6104c081612bfc565b0151604051918291602083526020830190610450565b9081518082526020808093019301915f5b828110610ba3575050505090565b83516001600160a01b031685529381019392810192600101610b95565b9290610bd89095949295608085526080850190610b84565b6020908481036020860152602080885192838152019701915f5b828110610c21575050505084610c1391846103109697036040860152610450565b916060818403910152610450565b9091929782610c336001928b516103e1565b990193929101610bf2565b346102cc5760206003193601126102cc57600435610c5b816102bb565b610c63612ba2565b610c6c81612bfc565b6001600160a01b0381165f52600560205260405f20610ca4610c9f836001600160a01b03165f52600360205260405f2090565b61248e565b90815192610cb184612503565b93610cbb81612551565b91610cc582612551565b935f5b838110610ce0576040518061056488888c8c85610bc0565b80610cf560019284905f5260205260405f2090565b54610d4c610d478a610d32610d2586610d1f8b6001600160a01b03165f52600460205260405f2090565b936125af565b516001600160a01b031690565b6001600160a01b03165f5260205260405f2090565b6125d4565b610d56838c6125af565b52610d61828b6125af565b506fffffffffffffffffffffffffffffffff8116610d7f83896125af565b5260801c610d8d82896125af565b5201610cc8565b346102cc5760206003193601126102cc576020600435610db3816102bb565b610dbb612ba2565b6001600160a01b038091165f52600e825260405f2054161515604051908152f35b346102cc5760206003193601126102cc576020610e14600435610dfe816102bb565b610e06612ba2565b610e0f81612bfc565b612eab565b506040519015158152f35b9181601f840112156102cc5782359167ffffffffffffffff83116102cc57602083818601950101116102cc57565b60206003198201126102cc576004359067ffffffffffffffff82116102cc57610e7891600401610e1f565b9091565b346102cc575f80610e8c36610e4d565b90610e956130ac565b610e9d612ba2565b8160405192839283378101838152039082335af1610eb9612613565b908015610f065790610ecf81610f029333613140565b506040519182917f5ab64fb800000000000000000000000000000000000000000000000000000000835260048301611e79565b0390fd5b506004815110610f85577f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000060208301511603613131577f28f95541000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b9091610fc461031093604084526040840190610450565b916020818403910152610450565b346102cc5760206003193601126102cc57600435610fef816102bb565b610ff7612ba2565b61100081612bfc565b6001600160a01b038082165f525f60205260405f2054600360205260405f209160405180938491602082549182815201915f5260205f20935f905b8282106110ca575050506110519250038361077e565b61105d825180926131cc565b9161106782612551565b935f5b8381106110805760405180610564888883610fad565b6001906110b96110b4610d476110a7866001600160a01b03165f52600460205260405f2090565b610d32610d25868a6125af565b61321e565b6110c382896125af565b520161106a565b85546001600160a01b039082161684526001958601958895506020909401939091019061103b565b346102cc575f6003193601126102cc5761110a612ba2565b60207f00000000000000000000000000000000000000000000000000000000000000005c6040519015158152f35b346102cc5760206fffffffffffffffffffffffffffffffff6111986001600160a01b03611164366102eb565b919061116e612ba2565b61117781612bfc565b165f526006845260405f20906001600160a01b03165f5260205260405f2090565b5416604051908152f35b346102cc575f6003193601126102cc576111ba612ba2565b60206001600160a01b03600a5416604051908152f35b346102cc5760606003193601126102cc5760206112186004356111f2816102bb565b6024356111fe816102bb565b6044359161120b836102bb565b611213612ba2565b6132fa565b604051908152f35b346102cc5760206003193601126102cc576001600160a01b03600435611245816102bb565b61124d612ba2565b165f526008602052602060405f2054604051908152f35b346102cc5760206003193601126102cc576020611218600435611286816102bb565b61128e612ba2565b7f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b03165f5260205260405f205c90565b346102cc5760806003193601126102cc576004356112e3816102bb565b6024356112ef816102bb565b6044359060643567ffffffffffffffff81116102cc57611313903690600401610823565b61131b612ba2565b61132361335c565b61132b6133ad565b61133484612c47565b6001600160a01b039384811691825f526020905f60205261135d60405f205460019060031c1690565b156117555761137d836001600160a01b03165f52600560205260405f2090565b96611386612642565b926113a5610c9f866001600160a01b03165f52600360205260405f2090565b80855251966113ba6040860198808a52612551565b97608086019889525f5b815181101561140d57806113fb6113e56001938f905f5260205260405f2090565b546fffffffffffffffffffffffffffffffff1690565b611406828d516125af565b52016113c4565b50899896979861143b8189516114348c6001600160a01b03165f52601160205260405f2090565b5490613427565b996114468351612551565b95606089019687526114ad8b7f00000000000000000000000000000000000000000000000000000000000000005c7f0000000000000000000000000000000000000000000000000000000000000000905f5260205260405f20905f5260205260405f205c90565b151560a08a018181529590611728575b5f5b855181101561160d576114e9818f8a8e838e6114db8e51151590565b6115bd575b505050506125af565b516114f4828c6125af565b511161155457808c8f826115478f8261154d9461152e61151d610d2560019b61153396516125af565b61152784846125af565b5190613498565b6125af565b5193519361154183866125af565b516126b2565b926125af565b52016114bf565b8d8a61157d836115768f95611570610d25826115ba99516125af565b956125af565b51926125af565b517f2f785e46000000000000000000000000000000000000000000000000000000005f526001600160a01b03909216600452602452604452606490565b5ffd5b6115dc6115ee936115f9956115d285896125af565b5191015190613476565b6115e78383516125af565b52516125af565b5161154184846125af565b61160383836125af565b528a8e838e6114e0565b508a95509187918d938d611632816001600160a01b03165f52600560205260405f2090565b965f5b8951811015611683578061166a8c6116638361165b6001968f905f5260205260405f2090565b5492516125af565b51906134d6565b61167c828c905f5260205260405f2090565b5501611635565b610564885f89897ffbe5b0d79fb94f1e81c0a92bf86ae9d3a19e9d1bf6202c0d3e75120f65d5d8a58a8a6117016116ef8c6116d88d6116c4813388866134e4565b6116cc613560565b611718575b85836135c5565b6001600160a01b03165f52601160205260405f2090565b549551886040519485941697846126bf565b0390a461170c613402565b60405191829182610b27565b611723818785613582565b6116d1565b61174b6117458d6001600160a01b03165f525f60205260405f2090565b54612f52565b60208b01526114bd565b837fef029adf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b346102cc575f6003193601126102cc57611799612ba2565b60206001600160a01b0360095460081c16604051908152f35b346102cc5760206003193601126102cc5760206118376004356117d4816102bb565b6117dc612ba2565b7f00000000000000000000000000000000000000000000000000000000000000005c7f0000000000000000000000000000000000000000000000000000000000000000905f5260205260405f20905f5260205260405f205c90565b6040519015158152f35b346102cc5760206003193601126102cc576001600160a01b03600435611866816102bb565b61186e612ba2565b61187781612bfc565b165f525f602052602061121860405f2054612f52565b346102cc575f6003193601126102cc576118a5612ba2565b60206001600754166040519015158152f35b346102cc5760c06003193601126102cc576004356118d4816102bb565b602435906118e1826102bb565b6044359167ffffffffffffffff918284116102cc57366023850112156102cc57836004013561190f8161080b565b9461191d604051968761077e565b8186526020916024602088019160051b830101913683116102cc57602401905b82821061198957505050506064358381116102cc57611960903690600401610823565b60a4359384116102cc576105649461197f6109c29536906004016108d5565b93608435936126ea565b8380918335611997816102bb565b81520191019061193d565b346102cc5760206003193601126102cc576001600160a01b036004356119c7816102bb565b6119cf612ba2565b6119d881612bfc565b165f525f6020526020600160405f205460031c166040519015158152f35b346102cc5760206003193601126102cc576001600160a01b03600435611a1b816102bb565b611a23612ba2565b165f525f6020526020600160405f2054166040519015158152f35b346102cc5760406003193601126102cc5760243567ffffffffffffffff81116102cc57611a6f903690600401610e1f565b611a77612ba2565b611a8033612bfc565b80604051926020845281602085015260408401375f604082840101527f4bc4412e210115456903c65b5277d299a505e79f2eb852b92b1ca52d8585642860043592604081601f19601f339601168101030190a3005b906020610310928181520190610b84565b346102cc5760206003193601126102cc57600435611b03816102bb565b611b0b612ba2565b611b1481612bfc565b6001600160a01b038091165f52600360205260405f20906040519081602084549182815201935f5260205f20915f905b828210611b675761056485611b5b8189038261077e565b60405191829182611ad5565b909192946001611b89819284895416906001600160a01b036020921681520190565b960193920190611b44565b346102cc5760206003193601126102cc57610160611bf9600435611bb7816102bb565b611bbf612891565b50611bc8612ba2565b611bd181612bfc565b6001600160a01b038091165f525f60205260405f205490600260205260405f20541690613d80565b611c8a604051809280511515825260208082015115159083015260408082015115159083015260608082015115159083015260808082015115159083015260a08082015115159083015260c08082015115159083015260e0808201511515908301526101008082015115159083015261012080820151151590830152610140908101516001600160a01b0316910152565bf35b346102cc575f6003193601126102cc5760207f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6040519015158152f35b346102cc575f6003193601126102cc57611ce2612ba2565b60207f00000000000000000000000000000000000000000000000000000000000000005c604051908152f35b346102cc5760606003193601126102cc57611d4c600435611d2e816102bb565b602435611d3a816102bb565b611d42612ba2565b6044359133613ebe565b602060405160018152f35b346102cc5760206003193601126102cc576001600160a01b03600435611d7c816102bb565b611d84612ba2565b165f526011602052602060405f2054604051908152f35b6102de909291926060810193604090816001600160a01b0391828151168552826020820151166020860152015116910152565b346102cc5760206003193601126102cc57610564600435611dee816102bb565b611df66124e5565b50611dff612ba2565b611e0881612bfc565b6001600160a01b038091165f52600160205260405f2090600260405192611e2e846106f4565b828154168452826001820154166020850152015416604082015260405191829182611d9b565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b906020610310928181520190611e54565b346102cc57610564611ed35f80611eba611ea336610e4d565b611eab6130ac565b611eb3612ba2565b369161089f565b60208151910182335af1611ecc612613565b9033613140565b604051918291602083526020830190611e54565b801515036102cc57565b608435906102de82611ee7565b6064359063ffffffff821682036102cc57565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c60609101126102cc5760a490565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedc60809101126102cc5761012490565b346102cc576101a06003193601126102cc57600435611f8e816102bb565b60243567ffffffffffffffff81116102cc57366023820112156102cc57806004013591611fba8361080b565b91604093611fcb604051948561077e565b8084526020906024602086019160071b840101923684116102cc57602401905b83821061202f5761202d8686611fff611efe565b612007611ef1565b61201036611f11565b916120196102d0565b9361202336611f40565b95604435916128f4565b005b6080823603126102cc5782608091885161204881610715565b8435612053816102bb565b815282850135612062816107f6565b8382015289850135612073816102bb565b8a8201526060808601359061208782611ee7565b820152815201910190611feb565b6102de909291926101806101a08201946120d68382516060809180511515845260208101511515602085015260408101511515604085015201511515910152565b60208101516080840152604081015160a0840152606081015160c084015261210c608082015160e085019064ffffffffff169052565b60a081015190612127610100928386019063ffffffff169052565b61215b60c082015192612141610120948588019015159052565b60e083015115156101408701528201511515610160860152565b01511515910152565b346102cc5760206003193601126102cc576105646121f2600435612187816102bb565b5f61012060405161219781610731565b6040516121a381610715565b83815283602082015283604082015283606082015281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201520152612a1a565b60405191829182612095565b346102cc5760406003193601126102cc57602061225e600435612220816102bb565b6001600160a01b0360243591612235836102bb565b61223d612ba2565b165f52600f835260405f20906001600160a01b03165f5260205260405f2090565b54604051908152f35b346102cc575f6003193601126102cc5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b604051906122b78261074e565b815f815260c060609182602082015282604082015282808201528260808201528260a08201520152565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b91909163ffffffff8080941691160191821161232657565b6122e1565b6123a891612337612ba2565b61234082612c47565b6001600160a01b039081831690815f525f6020526040938493612365855f2054612f52565b935f526002602052845f205416918451968794859384937fa0e8f5ac00000000000000000000000000000000000000000000000000000000855260048501612f9f565b03915afa918215610acf575f915f93612425575b5050156123fd57670de0b5cad2bef00081116123d55790565b7f746e5940000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f53f976d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b612448935080919250903d10612450575b612440818361077e565b810190612f80565b905f806123bc565b503d612436565b908160209103126102cc575190565b9190602061247e600192604086526040860190610450565b930152565b6040513d5f823e3d90fd5b90604051918281549182825260209260208301915f5260205f20935f905b8282106124c2575050506102de9250038361077e565b85546001600160a01b0316845260019586019588955093810193909101906124ac565b604051906124f2826106f4565b5f6040838281528260208201520152565b9061250d8261080b565b61251a604051918261077e565b828152601f1961252a829461080b565b01905f5b82811061253a57505050565b6020906125456124e5565b8282850101520161252e565b9061255b8261080b565b612568604051918261077e565b828152601f19612578829461080b565b0190602036910137565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b80518210156125c35760209160051b010190565b612582565b6125d1826103aa565b52565b906040516125e1816106f4565b604060ff8294548181166125f4816103aa565b84526001600160a01b038160081c16602085015260a81c161515910152565b3d1561263d573d9061262482610883565b91612632604051938461077e565b82523d5f602084013e565b606090565b6040519060c0820182811067ffffffffffffffff821117610710576040525f60a08360608152826020820152826040820152606080820152606060808201520152565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0bdc0820191821161232657565b9190820391821161232657565b916126dc9061031094928452606060208501526060840190610450565b916040818403910152610450565b93959491959290926126fa612ba2565b61270261335c565b61270b85612bfc565b6127136133ad565b61271c85613796565b61272585612c94565b916127348351600190811c1690565b61285c5761279d969761274e6020850151518351906137e4565b60c0840195865161276660a087019182519086613813565b9789612777885160019060081c1690565b6127eb575b899492508791509261278f9695936139fc565b94859151600190600a1c1690565b6127ae575b50505050610310613402565b6127dc6127cf6127e2956001600160a01b03165f52600260205260405f2090565b546001600160a01b031690565b92613cb4565b5f8080836127a2565b9161284f91612821899b8b61281b6127cf61278f9c9b999a986001600160a01b03165f52600260205260405f2090565b916138b9565b61284561283f8d6001600160a01b03165f52600560205260405f2090565b8a61398f565b5190519084613813565b978193929495508961277c565b7f218e3747000000000000000000000000000000000000000000000000000000005f526001600160a01b03861660045260245ffd5b60405190610160820182811067ffffffffffffffff821117610710576040525f610140838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e082015282610100820152826101208201520152565b94969263ffffffff91969492612908612ba2565b6129106133ad565b612918613fee565b604051976129258961074e565b88526020880152166040860152151560608501526060853603126102cc576129a16129a8926129b296604080519161295c836106f4565b8035612967816102bb565b83526020810135612977816102bb565b60208401520135612987816102bb565b604082015260808701526001600160a01b031660a0860152565b36906129ba565b60c08301526144da565b6102de613402565b91908260809103126102cc576040516129d281610715565b606080829480356129e281611ee7565b845260208101356129f281611ee7565b60208501526040810135612a0581611ee7565b6040850152013591612a1683611ee7565b0152565b612a4590612a26612ba2565b612a2f81612bfc565b6001600160a01b03165f525f60205260405f2090565b546103106001612a5483612f52565b92612afd612a6182614fc2565b612af0612a6d84614fe5565b64ffffffffff85605a1c169063ffffffff86612a87608290565b1c1693612a926107ae565b600488901c89161515815299600588901c8916151560208c0152600688901c8916151560408c0152600788901c8916151560608c0152612ad06107bb565b9a8b5260208b015260408a0152606089015264ffffffffff166080880152565b63ffffffff1660a0860152565b808216151560c085015280821c8216151560e0850152600281901c8216151561010085015260031c161515610120830152565b7ff2238896000000000000000000000000000000000000000000000000000000005f5260045ffd5b34612b3057365f80375f8036816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af43d5f803e15612b9e573d5ff35b3d5ffd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003612bd457565b7f9fd25b36000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160a01b0316805f525f602052600160405f20541615612c1c5750565b7f9e51bd5c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6001600160a01b0316805f525f602052600160405f2054811c1615612c695750565b7f4bdace13000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b906001600160a01b03612ca56122aa565b92165f5260056020526040805f205f602052815f2054906004602052825f20906003602052835f20938454938752612ce06020880195615008565b8552612ceb84612503565b91818801928352612cfb85612551565b9160608901928352612d0c86612551565b9460809560808b0152612d20878b516131cc565b60c08b0152612d2e87612551565b60a08b019081528a5191600199600184811c169384612e97575b5083612e85575b8c5f5b8b8110612d685750505050505050505050505050565b8a8d92828c8c8c612daf84612d9b81612d8d610d478f8f610d2585610d3292516125af565b94905f5260205260405f2090565b54945183612da983836125af565b526125af565b50612db98161321e565b612dc4858d516125af565b52612de26fffffffffffffffffffffffffffffffff84168587615238565b878d8d15612e785782015115159182612e5a575b5050612e0b575b50505050505b018d90612d52565b82612e2e92612e2582612e1e8851614fe5565b94516125af565b51961c856157a3565b9283612e3e575b8e93508c612dfd565b612e5193612e4b916126b2565b91615238565b5f8f8282612e35565b90915051612e67816103aa565b612e70816103aa565b14875f612df6565b5050505050505050612e03565b8c5190935060031c6001161592612d4f565b612ea2919450614fe5565b1515925f612d48565b6001600160a01b03165f525f60205260405f20549060018260021c1663ffffffff8093612ed6608290565b1c169281612ee357509190565b9050612f0f7f00000000000000000000000000000000000000000000000000000000000000008461230e565b164211159190565b60ff60019116019060ff821161232657565b9060058202918083046005149015171561232657565b8181029291811591840414171561232657565b62ffffff9060121c1664174876e800908181029181830414901517156123265790565b51906102de82611ee7565b91908260409103126102cc5760208251612f9981611ee7565b92015190565b612a1661303f60409396959496606084528051612fbb816103aa565b60608501526020810151608085015260c0612fe58683015160e060a0880152610140870190610450565b91606081015182870152608081015160e08701526001600160a01b0360a08201511661010087015201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa085830301610120860152611e54565b6001600160a01b039096166020830152565b811561305b570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b90670de0b6b3a7640000918281029281840414901517156123265761031091613051565b32613109576001600754166130e15760017f00000000000000000000000000000000000000000000000000000000000000005d565b7f7a198886000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f67f84ab2000000000000000000000000000000000000000000000000000000005f5260045ffd5b805115610f8557805190602001fd5b9061317d575080511561315557805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b815115806131c3575b61318e575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15613186565b9064ffffffffff6131dc82612551565b92605a1c165f5b8281106131f05750505090565b601f826131fc83612f29565b1c1690604d821161232657600191600a0a61321782876125af565b52016131e3565b8051613229816103aa565b613232816103aa565b80613245575050670de0b6b3a764000090565b806132516001926103aa565b036132d257602061327c6132708260049401516001600160a01b031690565b6001600160a01b031690565b604051928380927f679aefce0000000000000000000000000000000000000000000000000000000082525afa908115610acf575f916132b9575090565b610310915060203d602011610ac857610ab9818361077e565b7fdf450632000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160a01b0392918381168484160361331857505050505f1990565b6133589361334292165f52601060205260405f20906001600160a01b03165f5260205260405f2090565b906001600160a01b03165f5260205260405f2090565b5490565b7f00000000000000000000000000000000000000000000000000000000000000005c1561338557565b7fc09ba736000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c6133da576001905d565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d565b92916134338451612551565b935f5b8151811015613470578061345f8561345a86613454600196886125af565b51612f3f565b613051565b61346982896125af565b5201613436565b50505050565b9061348091612f3f565b6001670de0b6b3a76400005f19830104019015150290565b906134a29061505f565b907f80000000000000000000000000000000000000000000000000000000000000008214612326576102de915f03906150b4565b906103109160801c9061519c565b91909392936134f48282856132fa565b5f198103613505575b505050509050565b808611613523579461351994950392613ebe565b805f8080806134fd565b85906001600160a01b03847ffb8f41b2000000000000000000000000000000000000000000000000000000005f521660045260245260445260645ffd5b32158061356a5790565b506001600754161590565b9190820180921161232657565b9032613109576001600160a01b036135b692165f52600f60205260405f20906001600160a01b03165f5260205260405f2090565b80549182018092116123265755565b90916001600160a01b03808416928315613761576135f885613342836001600160a01b03165f52600f60205260405f2090565b548084116137245783900361362286613342846001600160a01b03165f52600f60205260405f2090565b5561364883613642836001600160a01b03165f52601160205260405f2090565b546126b2565b61365181615200565b61366c826001600160a01b03165f52601160205260405f2090565b551690813b156102cc576040517f23de66510000000000000000000000000000000000000000000000000000000081526001600160a01b0390941660048501525f6024850181905260448501829052937fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f9161370691868180606481015b038183895af161370b575b506040519081529081906020820190565b0390a4565b8061371861371e9261076a565b80610568565b5f6136f5565b7fe450d38c000000000000000000000000000000000000000000000000000000005f526001600160a01b038616600452602452604483905260645ffd5b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f526001600160a01b03851660045260245ffd5b61379e613fee565b6137a781612eab565b506137af5750565b6001600160a01b03907fd971f597000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b036137eb57565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b91908251918151815181851491821592613899575b50506137eb5761383783612551565b935f5b84811061384957505050505090565b80670de0b6b3a7640000613887613862600194866125af565b51613882613870858a6125af565b5161387b868a6125af565b5192612f3f565b612f3f565b0461389282896125af565b520161383a565b141590505f80613828565b908160209103126102cc575161031081611ee7565b9061391d9261390b5f6001600160a01b03602095604051978896879586937f1c149e28000000000000000000000000000000000000000000000000000000008552604060048601526044850190610450565b90600319848303016024850152611e54565b0393165af1908115610acf575f91613960575b501561393857565b7f60612925000000000000000000000000000000000000000000000000000000005f5260045ffd5b613982915060203d602011613988575b61397a818361077e565b8101906138a4565b5f613930565b503d613970565b60208082015151925f5b8481106139a7575050505050565b6001906139f66fffffffffffffffffffffffffffffffff60406139d66139d085838b01516125af565b5161321e565b6139e48560a08b01516125af565b52835f528587525f2054168287615238565b01613999565b929195969496613a1d846001600160a01b03165f52600560205260405f2090565b955f5b60208901518051821015613afb57610d2582613a3b926125af565b613a4b613270610d2584896125af565b6001600160a01b038216908103613aa7575090613a75600192613a6e838b6125af565b5190615285565b613a8e8b613a8783611576818d6125af565b519061519c565b613aa0828b905f5260205260405f2090565b5501613a20565b6115ba9088613abc613270610d25878c6125af565b7fffe261a1000000000000000000000000000000000000000000000000000000005f526001600160a01b03918216600452811660245216604452606490565b50509694919250969450613b3384517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd600291161790565b808552613b50846001600160a01b03165f525f60205260405f2090565b556001600160a01b0392613b96602085831697604051809381927f984de9e800000000000000000000000000000000000000000000000000000000835260048301612466565b03818a5afa8015610acf57613bbb915f91613c95575b50613bb681615200565b612685565b97613bc582615297565b613bd08985846153a7565b808910613c655750928592613c3c7fa26a52d8d53702bba7f137907b8e1f99ff87f6d450144270ca25e72481cca87193613c2d6020613c2360019a996001600160a01b03165f52601160205260405f2090565b5498015151612551565b906040519485941697846126bf565b0390a47fcad8c9d32507393b6508ca4a888b81979919b477510585bde8488f153072d6f35f80a2565b7f8d261d5d000000000000000000000000000000000000000000000000000000005f52600489905260245260445ffd5b613cae915060203d602011610ac857610ab9818361077e565b5f613bac565b92613d075f6001600160a01b036020959496613d1e604051988997889687947f38be241d000000000000000000000000000000000000000000000000000000008652606060048701526064860190610450565b916024850152600319848303016044850152611e54565b0393165af1908115610acf575f91613d61575b5015613d3957565b7f0f23dbc6000000000000000000000000000000000000000000000000000000005f5260045ffd5b613d7a915060203d6020116139885761397a818361077e565b5f613d31565b90613d89612891565b5060ff6001808483613d9b600c612f17565b613da490612f17565b161c16818584613db4600c612f17565b613dbd90612f17565b613dc690612f17565b161c1690828685613dd7600c612f17565b613de090612f17565b613de990612f17565b613df290612f17565b161c1692808786613e03600c612f17565b613e0c90612f17565b613e1590612f17565b613e1e90612f17565b613e2790612f17565b161c16948188818184600c161c1692600c613e4190612f17565b161c1691613e4d6107c8565b60098a901c82161515815298600881901c8216151560208b0152600a81901c8216151560408b0152600b1c161515606089015215156080880152151560a0870152151560c0860152151560e0850152151561010084015215156101208301526001600160a01b031661014082015290565b9290916001600160a01b0392838116938415613fb957808316958615613f845784613f028561334286613342866001600160a01b03165f52601060205260405f2090565b551692833b156102cc576040517f5687f2b80000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152919092166024820152604481018290527fa0175360a15bca328baf7ea85c7b784d58b222a50d0ce760b10dba336d226a6191613706915f8180606481016136ea565b7f94280d62000000000000000000000000000000000000000000000000000000005f526001600160a01b03841660045260245ffd5b7fe602df05000000000000000000000000000000000000000000000000000000005f526001600160a01b03821660045260245ffd5b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000164211158061404c575b61402457565b7fda9f8b34000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001600754811c1661401e565b90805190614067826103aa565b614070826103aa565b82546020820151604092909201517fffffffffffffffffffff0000000000000000000000000000000000000000000090911660ff939093169290921760089190911b74ffffffffffffffffffffffffffffffffffffffff00161790151560a81b75ff00000000000000000000000000000000000000000016179055565b908160209103126102cc575160ff811681036102cc5790565b80546801000000000000000081101561071057600181018083558110156125c3576001600160a01b03915f5260205f200191167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b815181547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039182161782556102de92600291906040906141e28360208301511660018701906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b0151169101906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b91908260409103126102cc576020825192015190565b9081518082526020808093019301915f5b82811061424f575050505090565b9091929382608060019287516001600160a01b0380825116835284820151614276816103aa565b838601526040828101519091169083015260609081015115159082015201950193929101614241565b9493916102de936060926142d1926001600160a01b03809216895216602088015260e0604088015260e0870190614230565b9401906060809180511515845260208101511515602085015260408101511515604085015201511515910152565b90816101409103126102cc576143136107bb565b9061431d81612f75565b825261432b60208201612f75565b602083015261433c60408201612f75565b604083015261434d60608201612f75565b606083015261435e60808201612f75565b608083015261436f60a08201612f75565b60a083015261438060c08201612f75565b60c083015261439160e08201612f75565b60e08301526101006143a4818301612f75565b908301526143b6610120809201612f75565b9082015290565b919695939461441f6102de9663ffffffff610220966143e76144ad966102a0808a52890190614230565b9b60208801521660408601526060850190604090816001600160a01b0391828151168552826020820151166020860152015116910152565b60c083019080511515825260208082015115159083015260408082015115159083015260608082015115159083015260808082015115159083015260a08082015115159083015260c08082015115159083015260e0808201511515908301526101008082015115159083015261012080820151151590830152610140908101516001600160a01b0316910152565b01906060809180511515845260208101511515602085015260408101511515604085015201511515910152565b906144ff6144f8836001600160a01b03165f525f60205260405f2090565b5460011690565b614f8d5780515160028110614f655760088111614f3d5792919061452284612551565b5f945f5b818110614c305750506145f2929394506080820191614560835161455b876001600160a01b03165f52600160205260405f2090565b614162565b614575613270600a546001600160a01b031690565b6040809161458e828751016001600160a01b0390511690565b9061459c6060860151151590565b83517f77ff76e70000000000000000000000000000000000000000000000000000000081526001600160a01b03808c166004830152909316602484015215156044830152909687919082905f9082906064820190565b03925af18015610acf575f955f91614bfd575b5061471e60c08401916147196146e88451976146d16146cb61462d8b51151560041b60011790565b9a606061469b61466a60209e8f85015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf9060051b91161790565b8c84015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf9060061b91161790565b91015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f9060071b91161790565b916154f5565b90605a9164ffffffffff908116831b921b19161790565b986147148688019a6146fe8c5163ffffffff1690565b9060829163ffffffff908116831b921b19161790565b6155c5565b6155e5565b9360a08401906001600160a01b0395898761474085516001600160a01b031690565b1680614841575b50906147658193926001600160a01b03165f525f60205260405f2090565b5582516001600160a01b03166001600160a01b03166147958b6001600160a01b03165f52600260205260405f2090565b906147cd91906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b85019485516147dc908b615609565b519451975163ffffffff16965191516001600160a01b03166001600160a01b031661480691613d80565b915192519586953399169761481b95876143bd565b037fbc1561eeab9f40962e2fb827a7ff9c7cdb47a9d7c84caeefa4ed90e043842dad91a3565b61488391849189515f8951938b51968795869485937f0b89f182000000000000000000000000000000000000000000000000000000008552336004860161429f565b03925af1908115610acf575f91614be0575b5015614bcb576148b261327061327085516001600160a01b031690565b90855180927fd77153a70000000000000000000000000000000000000000000000000000000082528160046101409586935afa928315610acf575f93614b9c575b50508151151580614b82575b614b2f5790614afd610120614969614aca614a98614a66614a34614a026149d08e6149a561499c8c8f614b289f906149696149719261493e8551151590565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdff9060091b91161790565b920151151590565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff9060081b91161790565b918c0151151590565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbff90600a1b91161790565b60608a015115157ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff90600b1b91161790565b608089015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff90600c1b91161790565b60a088015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfff90600d1b91161790565b60c087015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfff90600e1b91161790565b60e086015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fff90600f1b91161790565b61010085015115157ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff9060101b91161790565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff9060111b91161790565b895f614747565b6115ba8b614b4486516001600160a01b031690565b7ffa93d814000000000000000000000000000000000000000000000000000000005f526001600160a01b039081166004521660245233604452606490565b50614b96614b91865151151590565b151590565b156148ff565b614bbc929350803d10614bc4575b614bb4818361077e565b8101906142ff565b905f806148f3565b503d614baa565b6115ba8a614b4485516001600160a01b031690565b614bf79150833d85116139885761397a818361077e565b5f614895565b905081614c209296503d8711614c29575b614c18818361077e565b81019061421a565b9490945f614605565b503d614c0e565b614c3b8185516125af565b5196614c4e88516001600160a01b031690565b906001600160a01b038083169182158015614f32575b614f0a5716808210614ee2578114614ead57604090818a01998a51614c8f906001600160a01b031690565b6001600160a01b0316159060209b8c8201908d825191614cae836103aa565b516001600160a01b031693606001938451614cc890151590565b91614cd16107e9565b93614cdc90856125c8565b6001600160a01b039091169083015215158187015286614d0d8d6001600160a01b03165f52600460205260405f2090565b90614d2891906001600160a01b03165f5260205260405f2090565b90614d329161405a565b8051614d3d816103aa565b614d46816103aa565b614e5e5750811591614e53575b506132d25789915b51998a80927f313ce56700000000000000000000000000000000000000000000000000000000825260049c8d915afa918215610acf575f92614e26575b505060129060ff9180838316115f14614dd2578a7f686d3607000000000000000000000000000000000000000000000000000000005f525ffd5b60019495969798999a5090614df692910316614dee85886125af565b9060ff169052565b614e1a81614e15896001600160a01b03165f52600360205260405f2090565b614106565b96959493929101614526565b614e459250803d10614e4c575b614e3d818361077e565b8101906140ed565b5f80614d98565b503d614e33565b51151590505f614d53565b6001915051614e6c816103aa565b614e75816103aa565b03614e85576132d2578991614d5b565b7fa1e9dd9d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4f4b634e000000000000000000000000000000000000000000000000000000005f526001600160a01b03821660045260245ffd5b7f6e8f1947000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fc1ab6dc1000000000000000000000000000000000000000000000000000000005f5260045ffd5b508189168314614c64565b7f707bdf58000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f5ed4ba8f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fdb771c80000000000000000000000000000000000000000000000000000000005f526001600160a01b03821660045260245ffd5b62ffffff90602a1c1664174876e800908181029181830414901517156123265790565b62ffffff9060421c1664174876e800908181029181830414901517156123265790565b90604051918281549182825260209260208301915f5260205f20935f905b82821061503c575050506102de9250038361077e565b85546001600160a01b031684526001958601958895509381019390910190615026565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116150895790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b908015615198577f0000000000000000000000000000000000000000000000000000000000000000916150f98184906001600160a01b03165f5260205260405f205c90565b8281019283125f8212908015821691151617612326578261514e57507f000000000000000000000000000000000000000000000000000000000000000092835c5f198101908111612326576102de945d615811565b1561515d575b6102de92615811565b7f000000000000000000000000000000000000000000000000000000000000000092835c60018101809111612326576102de945d9250615154565b5050565b906fffffffffffffffffffffffffffffffff8083119081156151f6575b506151ce5760801b9081018091116123265790565b7f89560ca1000000000000000000000000000000000000000000000000000000005f5260045ffd5b905081115f6151b9565b620f4240811061520d5750565b7fd38d20fc000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b91906080670de0b6b3a764000061527c6125d1948061525b8660608a01516125af565b5261388261526d8660c08a01516125af565b5161387b8760a08b01516125af565b049301516125af565b6152916102de9261505f565b906150b4565b6152b2816001600160a01b03165f52601160205260405f2090565b908154620f424090818101809111612326576001600160a01b0393556152e9826001600160a01b03165f52600f60205260405f2090565b5f805260205260405f20908154019055165f80827fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f604051806153338190620f4240602083019252565b0390a4803b156102cc575f60405180927f23de66510000000000000000000000000000000000000000000000000000000082528183816153896004820190620f4240604060608401935f81525f60208201520152565b03925af18015610acf5761539a5750565b806137186102de9261076a565b916001600160a01b038083169384156154c0576153df836153d9836001600160a01b03165f52601160205260405f2090565b54613575565b6153fe85613342846001600160a01b03165f52600f60205260405f2090565b84815401905561540d81615200565b615428826001600160a01b03165f52601160205260405f2090565b5516925f847fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f6040518061546187829190602083019252565b0390a4823b156102cc576040517f23de66510000000000000000000000000000000000000000000000000000000081525f600482018190526001600160a01b039093166024820152604481019190915291829081838160648101615389565b7fec442f05000000000000000000000000000000000000000000000000000000005f526001600160a01b03841660045260245ffd5b5f9190825b81518410156155b95761550d84836125af565b5160ff9161551a86612f29565b916101008084101561558c5783810390811161232657808510156155b45750835b600590811161558c57816007911c1661556457600193601f9116831b921b1916179301926154fa565b7fe4337c05000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fb4120f14000000000000000000000000000000000000000000000000000000005f5260045ffd5b61553b565b64ffffffffff16925050565b670de0b5cad2bef00082116123d55764174876e800610310920490615827565b90670de0b5cad2bef00081116123d5576103109164174876e8006042920490615841565b906001600160a01b038216916040517fce20ece70000000000000000000000000000000000000000000000000000000081526020908181600481885afa908115610acf575f91615786575b50831061575e576040517f654cf15d0000000000000000000000000000000000000000000000000000000081528181600481885afa918215610acf575f92615741575b505082116157195781816157036156ec7f89d41522342fabac1471ca6073a5623e5caf367b03ca6e9a001478d0cf8be4a1956156e6615714966001600160a01b03165f525f60205260405f2090565b54615888565b916001600160a01b03165f525f60205260405f2090565b556040519081529081906020820190565b0390a2565b7f7f47834b000000000000000000000000000000000000000000000000000000005f5260045ffd5b6157579250803d10610ac857610ab9818361077e565b5f80615697565b7fbfb20688000000000000000000000000000000000000000000000000000000005f5260045ffd5b61579d9150823d8411610ac857610ab9818361077e565b5f615654565b9093925f946157b68460808501516125af565b518181116157c6575b5050505050565b61580695965061580093926157f9926157df9203613476565b9360a06157f08260c08601516125af565b519301516125af565b5190612f3f565b90613088565b905f808080806157bf565b906001600160a01b03165f5260205260405f205d565b908060181c61556457602a1b9062ffffff602a1b19161790565b906101008084101561558c57838103908111612326578060ff105f14615883575060ff5b60181161558c578060181c6155645762ffffff90831b921b19161790565b615865565b90670de0b5cad2bef00081116123d55764174876e80090048060181c615564577ffffffffffffffffffffffffffffffffffffffffffffffffffffffc000003ffff9060121b9116179056fea2646970667358221220c9525eb5f41174f1907706a8cefaa7d6ed21051f4be2ea1862dd8dea2f5389f864736f6c634300081b0033","opcodes":"PUSH2 0x200 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x36E JUMPI DUP2 DUP2 PUSH2 0x5DE2 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x21 DUP3 DUP6 PUSH2 0x3B2 JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x36E JUMPI PUSH2 0x34 DUP2 PUSH2 0x3D5 JUMP JUMPDEST PUSH1 0x20 SWAP2 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP2 SWAP1 DUP4 DUP4 AND SWAP1 DUP2 DUP5 SUB PUSH2 0x36E JUMPI PUSH2 0x7A DUP7 MLOAD PUSH2 0x5F DUP2 PUSH2 0x383 JUMP JUMPDEST PUSH1 0xA DUP2 MSTORE PUSH10 0x1A5CD55B9B1BD8DAD959 PUSH1 0xB2 SHL DUP4 DUP3 ADD MSTORE PUSH2 0x405 JUMP JUMPDEST PUSH1 0xC0 MSTORE PUSH2 0xAD DUP7 MLOAD PUSH2 0x8B DUP2 PUSH2 0x383 JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH17 0x1B9BDB96995C9BD1195B1D1850DBDD5B9D PUSH1 0x7A SHL DUP4 DUP3 ADD MSTORE PUSH2 0x405 JUMP JUMPDEST PUSH1 0xE0 MSTORE PUSH2 0xDA DUP7 MLOAD PUSH2 0xBE DUP2 PUSH2 0x383 JUMP JUMPDEST PUSH1 0xB DUP2 MSTORE PUSH11 0x746F6B656E44656C746173 PUSH1 0xA8 SHL DUP4 DUP3 ADD MSTORE PUSH2 0x405 JUMP JUMPDEST SWAP6 PUSH2 0x100 SWAP7 DUP8 MSTORE PUSH2 0x112 DUP2 MLOAD PUSH2 0xEF DUP2 PUSH2 0x383 JUMP JUMPDEST PUSH1 0x12 DUP2 MSTORE PUSH18 0x185919131A5C5D5A591A5D1E50D85B1B1959 PUSH1 0x72 SHL DUP5 DUP3 ADD MSTORE PUSH2 0x405 JUMP JUMPDEST SWAP6 PUSH2 0x120 SWAP7 DUP8 MSTORE PUSH2 0x141 DUP3 MLOAD PUSH2 0x127 DUP2 PUSH2 0x383 JUMP JUMPDEST PUSH1 0x9 DUP2 MSTORE PUSH9 0x1CD95CDCDA5BDB9259 PUSH1 0xBA SHL DUP6 DUP3 ADD MSTORE PUSH2 0x405 JUMP JUMPDEST PUSH2 0x140 SWAP1 DUP2 MSTORE DUP3 MLOAD PUSH4 0xFBFA77CF PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 SWAP2 DUP5 DUP3 PUSH1 0x4 DUP2 DUP10 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x379 JUMPI PUSH0 SWAP3 PUSH2 0x33E JUMPI JUMPDEST POP DUP1 DUP8 AND SWAP2 AND SUB PUSH2 0x32F JUMPI DUP2 MLOAD PUSH4 0x4546891D PUSH1 0xE1 SHL DUP2 MSTORE SWAP2 DUP4 DUP4 PUSH1 0x4 DUP2 DUP9 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x325 JUMPI PUSH0 SWAP4 PUSH2 0x306 JUMPI JUMPDEST POP PUSH2 0x160 SWAP3 DUP4 MSTORE DUP1 MLOAD PUSH4 0x1060FDBD PUSH1 0xE1 SHL DUP2 MSTORE SWAP5 DUP5 DUP7 PUSH1 0x4 DUP2 DUP5 GAS STATICCALL SWAP6 DUP7 ISZERO PUSH2 0x2D8 JUMPI PUSH0 SWAP7 PUSH2 0x2E2 JUMPI JUMPDEST POP DUP5 PUSH1 0x4 SWAP2 PUSH2 0x1A0 SWAP8 DUP9 MSTORE DUP4 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH4 0xCD51C12F PUSH1 0xE0 SHL DUP3 MSTORE GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x2D8 JUMPI PUSH0 SWAP6 PUSH2 0x2A9 JUMPI JUMPDEST POP POP PUSH2 0x180 SWAP4 DUP5 MSTORE PUSH2 0x1C0 SWAP6 DUP7 MSTORE PUSH2 0x1E0 SWAP7 DUP8 MSTORE MLOAD SWAP7 PUSH2 0x5909 SWAP9 DUP10 PUSH2 0x4D9 DUP11 CODECOPY PUSH1 0x80 MLOAD DUP10 POP POP PUSH1 0xA0 MLOAD DUP10 POP POP PUSH1 0xC0 MLOAD DUP10 DUP2 DUP2 PUSH2 0x110E ADD MSTORE DUP2 DUP2 PUSH2 0x30BF ADD MSTORE PUSH2 0x335E ADD MSTORE PUSH1 0xE0 MLOAD DUP10 DUP2 DUP2 PUSH2 0x1CE6 ADD MSTORE DUP2 DUP2 PUSH2 0x5117 ADD MSTORE PUSH2 0x515F ADD MSTORE MLOAD DUP9 DUP2 DUP2 PUSH2 0x1290 ADD MSTORE PUSH2 0x50BD ADD MSTORE MLOAD DUP8 DUP2 DUP2 PUSH2 0x1476 ADD MSTORE PUSH2 0x1800 ADD MSTORE MLOAD DUP7 DUP2 DUP2 PUSH2 0x1454 ADD MSTORE PUSH2 0x17DE ADD MSTORE MLOAD DUP6 POP POP MLOAD DUP5 PUSH2 0x3FF5 ADD MSTORE MLOAD DUP4 DUP2 DUP2 PUSH2 0x5DD ADD MSTORE PUSH2 0x2EEA ADD MSTORE MLOAD DUP3 DUP2 DUP2 PUSH2 0x2286 ADD MSTORE PUSH2 0x2BAC ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0x65D ADD MSTORE PUSH2 0x2B6F ADD MSTORE RETURN JUMPDEST PUSH2 0x2C9 SWAP3 SWAP6 POP DUP1 RETURNDATASIZE LT PUSH2 0x2D1 JUMPI JUMPDEST PUSH2 0x2C1 DUP2 DUP4 PUSH2 0x3B2 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3E9 JUMP JUMPDEST SWAP3 PUSH0 DUP1 PUSH2 0x1EE JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2B7 JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x4 SWAP2 SWAP7 POP PUSH2 0x2FE DUP7 SWAP2 DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x2D1 JUMPI PUSH2 0x2C1 DUP2 DUP4 PUSH2 0x3B2 JUMP JUMPDEST SWAP7 SWAP2 POP PUSH2 0x1C3 JUMP JUMPDEST PUSH2 0x31E SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x2D1 JUMPI PUSH2 0x2C1 DUP2 DUP4 PUSH2 0x3B2 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x199 JUMP JUMPDEST POP MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH4 0x4166145B PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP DUP5 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x372 JUMPI JUMPDEST PUSH2 0x356 DUP2 DUP4 PUSH2 0x3B2 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x36E JUMPI PUSH2 0x367 SWAP1 PUSH2 0x3D5 JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x16B JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x34C JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0x39E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x39E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x36E JUMPI JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x36E JUMPI MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x36E JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x412 DUP3 PUSH2 0x383 JUMP JUMPDEST PUSH1 0xC DUP3 MSTORE PUSH2 0x493 PUSH1 0x3A PUSH1 0x20 DUP5 ADD PUSH12 0x5661756C7453746F72616765 PUSH1 0xA0 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP3 DUP3 DUP5 ADD SWAP8 PUSH32 0x62616C616E6365722D6C6162732E76332E73746F726167652E00000000000000 DUP10 MSTORE MLOAD DUP1 SWAP2 PUSH1 0x39 DUP7 ADD MCOPY DUP4 ADD SWAP1 PUSH1 0x17 PUSH1 0xF9 SHL PUSH1 0x39 DUP4 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 SWAP2 ADD DUP6 DUP4 ADD MCOPY ADD PUSH0 DUP4 DUP3 ADD MSTORE SUB PUSH1 0x1A DUP2 ADD DUP5 MSTORE ADD DUP3 PUSH2 0x3B2 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x4C4 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP3 MSTORE PUSH2 0x4B9 DUP3 PUSH2 0x383 JUMP JUMPDEST SWAP1 MLOAD SWAP1 KECCAK256 PUSH1 0xFF NOT AND SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x18 JUMPI JUMPDEST CALLDATASIZE PUSH2 0x2B58 JUMPI PUSH2 0x2B30 JUMP JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH3 0xFDFA13 EQ PUSH2 0x2B6 JUMPI DUP1 PUSH4 0x13D21CDF EQ PUSH2 0x2B1 JUMPI DUP1 PUSH4 0x13EF8A5D EQ PUSH2 0x2AC JUMPI DUP1 PUSH4 0x15E32046 EQ PUSH2 0x2A7 JUMPI DUP1 PUSH4 0x1BA0AE45 EQ PUSH2 0x2A2 JUMPI DUP1 PUSH4 0x4AFBAF5A EQ PUSH2 0x29D JUMPI DUP1 PUSH4 0x4D472BDD EQ PUSH2 0x298 JUMPI DUP1 PUSH4 0x4F037EE7 EQ PUSH2 0x293 JUMPI DUP1 PUSH4 0x532CEC7C EQ PUSH2 0x28E JUMPI DUP1 PUSH4 0x535CFD8A EQ PUSH2 0x289 JUMPI DUP1 PUSH4 0x67E0E076 EQ PUSH2 0x284 JUMPI DUP1 PUSH4 0x6844846B EQ PUSH2 0x27F JUMPI DUP1 PUSH4 0x6C9BC732 EQ PUSH2 0x27A JUMPI DUP1 PUSH4 0x757D64B3 EQ PUSH2 0x275 JUMPI DUP1 PUSH4 0x7E361BDE EQ PUSH2 0x270 JUMPI DUP1 PUSH4 0x8380EDB7 EQ PUSH2 0x26B JUMPI DUP1 PUSH4 0x85E0B999 EQ PUSH2 0x266 JUMPI DUP1 PUSH4 0x85F2DBD4 EQ PUSH2 0x261 JUMPI DUP1 PUSH4 0x927DA105 EQ PUSH2 0x25C JUMPI DUP1 PUSH4 0x96787092 EQ PUSH2 0x257 JUMPI DUP1 PUSH4 0x9E825FF5 EQ PUSH2 0x252 JUMPI DUP1 PUSH4 0xA07D6040 EQ PUSH2 0x24D JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x248 JUMPI DUP1 PUSH4 0xACE9B89B EQ PUSH2 0x243 JUMPI DUP1 PUSH4 0xB45090F9 EQ PUSH2 0x23E JUMPI DUP1 PUSH4 0xB4AEF0AB EQ PUSH2 0x239 JUMPI DUP1 PUSH4 0xBA8A2BE0 EQ PUSH2 0x234 JUMPI DUP1 PUSH4 0xBE7D628A EQ PUSH2 0x22F JUMPI DUP1 PUSH4 0xC673BDAF EQ PUSH2 0x22A JUMPI DUP1 PUSH4 0xC8088247 EQ PUSH2 0x225 JUMPI DUP1 PUSH4 0xCA4F2803 EQ PUSH2 0x220 JUMPI DUP1 PUSH4 0xCE8630D4 EQ PUSH2 0x21B JUMPI DUP1 PUSH4 0xD2C725E0 EQ PUSH2 0x216 JUMPI DUP1 PUSH4 0xDB817187 EQ PUSH2 0x211 JUMPI DUP1 PUSH4 0xE1F21C67 EQ PUSH2 0x20C JUMPI DUP1 PUSH4 0xE4DC2AA4 EQ PUSH2 0x207 JUMPI DUP1 PUSH4 0xE9DDEB26 EQ PUSH2 0x202 JUMPI DUP1 PUSH4 0xEDFA3568 EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0xEEEC802F EQ PUSH2 0x1F8 JUMPI DUP1 PUSH4 0xF29486A1 EQ PUSH2 0x1F3 JUMPI DUP1 PUSH4 0xF7888AEC EQ PUSH2 0x1EE JUMPI PUSH4 0xFBFA77CF SUB PUSH2 0xE JUMPI PUSH2 0x2267 JUMP JUMPDEST PUSH2 0x21FE JUMP JUMPDEST PUSH2 0x2164 JUMP JUMPDEST PUSH2 0x1F70 JUMP JUMPDEST PUSH2 0x1E8A JUMP JUMPDEST PUSH2 0x1DCE JUMP JUMPDEST PUSH2 0x1D57 JUMP JUMPDEST PUSH2 0x1D0E JUMP JUMPDEST PUSH2 0x1CCA JUMP JUMPDEST PUSH2 0x1C8C JUMP JUMPDEST PUSH2 0x1B94 JUMP JUMPDEST PUSH2 0x1AE6 JUMP JUMPDEST PUSH2 0x1A3E JUMP JUMPDEST PUSH2 0x19F6 JUMP JUMPDEST PUSH2 0x19A2 JUMP JUMPDEST PUSH2 0x18B7 JUMP JUMPDEST PUSH2 0x188D JUMP JUMPDEST PUSH2 0x1841 JUMP JUMPDEST PUSH2 0x17B2 JUMP JUMPDEST PUSH2 0x1781 JUMP JUMPDEST PUSH2 0x12C6 JUMP JUMPDEST PUSH2 0x1264 JUMP JUMPDEST PUSH2 0x1220 JUMP JUMPDEST PUSH2 0x11D0 JUMP JUMPDEST PUSH2 0x11A2 JUMP JUMPDEST PUSH2 0x1138 JUMP JUMPDEST PUSH2 0x10F2 JUMP JUMPDEST PUSH2 0xFD2 JUMP JUMPDEST PUSH2 0xE7C JUMP JUMPDEST PUSH2 0xDDC JUMP JUMPDEST PUSH2 0xD94 JUMP JUMPDEST PUSH2 0xC3E JUMP JUMPDEST PUSH2 0xB38 JUMP JUMPDEST PUSH2 0xAD4 JUMP JUMPDEST PUSH2 0x9D2 JUMP JUMPDEST PUSH2 0x8F0 JUMP JUMPDEST PUSH2 0x681 JUMP JUMPDEST PUSH2 0x63E JUMP JUMPDEST PUSH2 0x59C JUMP JUMPDEST PUSH2 0x572 JUMP JUMPDEST PUSH2 0x483 JUMP JUMPDEST PUSH2 0x313 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SUB PUSH2 0x2CC JUMPI JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x104 CALLDATALOAD SWAP1 PUSH2 0x2DE DUP3 PUSH2 0x2BB JUMP JUMPDEST JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH2 0x2DE DUP3 PUSH2 0x2BB JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x40 SWAP2 ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x303 DUP2 PUSH2 0x2BB JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD PUSH2 0x310 DUP2 PUSH2 0x2BB JUMP JUMPDEST SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH2 0x362 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x32E CALLDATASIZE PUSH2 0x2EB JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x338 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x341 DUP2 PUSH2 0x2BFC JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x6 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x80 SHR PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x38D JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x37F JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x3B4 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x60 SWAP3 DUP1 MLOAD PUSH2 0x3F2 DUP2 PUSH2 0x3AA JUMP JUMPDEST DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x433 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 DUP3 PUSH2 0x445 PUSH1 0x1 SWAP3 DUP8 MLOAD PUSH2 0x3E1 JUMP JUMPDEST SWAP6 ADD SWAP4 SWAP3 SWAP2 ADD PUSH2 0x425 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x46F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x461 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH2 0x564 PUSH2 0x4C5 PUSH1 0x4 CALLDATALOAD PUSH2 0x4A6 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x4AE PUSH2 0x22AA JUMP JUMPDEST POP PUSH2 0x4B7 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x4C0 DUP2 PUSH2 0x2C47 JUMP JUMPDEST PUSH2 0x2C94 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE DUP1 MLOAD PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x4F0 PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0xE0 PUSH1 0x40 DUP7 ADD MSTORE PUSH2 0x100 DUP6 ADD SWAP1 PUSH2 0x36E JUMP JUMPDEST PUSH1 0xC0 PUSH2 0x552 PUSH2 0x53F PUSH2 0x52B PUSH2 0x517 PUSH1 0x40 DUP8 ADD MLOAD SWAP6 PUSH1 0x1F NOT SWAP7 DUP8 DUP12 DUP4 SUB ADD PUSH1 0x60 DUP13 ADD MSTORE PUSH2 0x414 JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MLOAD DUP7 DUP11 DUP4 SUB ADD PUSH1 0x80 DUP12 ADD MSTORE PUSH2 0x450 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD DUP6 DUP10 DUP4 SUB ADD PUSH1 0xA0 DUP11 ADD MSTORE PUSH2 0x450 JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD DUP5 DUP9 DUP4 SUB ADD DUP5 DUP10 ADD MSTORE PUSH2 0x450 JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 DUP5 DUP4 SUB ADD PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x450 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH0 SWAP2 SUB SLT PUSH2 0x2CC JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH2 0x58A PUSH2 0x2BA2 JUMP JUMPDEST PUSH1 0x20 PUSH1 0xFF PUSH1 0x9 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x80 PUSH1 0x4 CALLDATALOAD PUSH2 0x5BB DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x5C3 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x5CC DUP2 PUSH2 0x2BFC JUMP JUMPDEST PUSH2 0x5D5 DUP2 PUSH2 0x2EAB JUMP JUMPDEST PUSH2 0x602 SWAP3 SWAP2 SWAP3 PUSH32 0x0 DUP3 PUSH2 0x230E JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP2 PUSH1 0x40 MLOAD SWAP4 ISZERO ISZERO DUP5 MSTORE PUSH4 0xFFFFFFFF DUP1 SWAP3 AND PUSH1 0x20 DUP6 ADD MSTORE AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x4 CALLDATALOAD PUSH2 0x6A0 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x6A8 PUSH2 0x2BA2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0xE DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH2 0x6C7 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH2 0x140 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x2DE DUP3 PUSH2 0x74E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x2DE DUP3 PUSH2 0x715 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x2DE DUP3 PUSH2 0x731 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x160 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x2DE DUP3 PUSH2 0x6F4 JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x2CC JUMPI JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH2 0x2DE DUP3 PUSH2 0x7F6 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x710 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x2CC JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x83D DUP2 PUSH2 0x80B JUMP JUMPDEST SWAP4 PUSH2 0x84B PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x77E JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x2CC JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x874 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x866 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x710 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH2 0x8AB DUP3 PUSH2 0x883 JUMP JUMPDEST SWAP2 PUSH2 0x8B9 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x77E JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0x2CC JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x2CC JUMPI DUP2 PUSH1 0x20 PUSH2 0x310 SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0x89F JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x3 NOT PUSH1 0x40 DUP2 CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x90E DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP4 GT PUSH2 0x2CC JUMPI PUSH1 0xE0 SWAP1 DUP4 CALLDATASIZE SUB ADD SLT PUSH2 0x2CC JUMPI PUSH2 0x937 PUSH2 0x7A1 JUMP JUMPDEST SWAP1 PUSH2 0x944 DUP4 PUSH1 0x4 ADD PUSH2 0x800 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x24 DUP4 ADD CALLDATALOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x44 DUP4 ADD CALLDATALOAD DUP5 DUP2 GT PUSH2 0x2CC JUMPI PUSH2 0x96C SWAP1 PUSH1 0x4 CALLDATASIZE SWAP2 DUP7 ADD ADD PUSH2 0x823 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x64 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x84 DUP4 ADD CALLDATALOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x991 PUSH1 0xA4 DUP5 ADD PUSH2 0x2E0 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC4 DUP4 ADD CALLDATALOAD SWAP4 DUP5 GT PUSH2 0x2CC JUMPI PUSH2 0x9B8 PUSH2 0x9C2 SWAP4 PUSH1 0x4 PUSH2 0x564 SWAP7 CALLDATASIZE SWAP3 ADD ADD PUSH2 0x8D5 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x232B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x9EF DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x9F7 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0xA00 DUP2 PUSH2 0x2C47 JUMP JUMPDEST PUSH2 0xA4D PUSH1 0x20 PUSH1 0x80 PUSH2 0xA10 DUP5 PUSH2 0x2C94 JUMP JUMPDEST ADD MLOAD PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x984DE9E800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x40 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x450 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x24 DUP4 ADD MSTORE SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND GAS STATICCALL DUP1 ISZERO PUSH2 0xACF JUMPI PUSH2 0x564 SWAP3 PUSH2 0x9C2 SWAP3 PUSH0 SWAP3 PUSH2 0xA9A JUMPI JUMPDEST POP PUSH2 0xA93 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP1 PUSH2 0x3088 JUMP JUMPDEST PUSH2 0xA93 SWAP2 SWAP3 POP PUSH2 0xAC1 SWAP1 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xAC8 JUMPI JUMPDEST PUSH2 0xAB9 DUP2 DUP4 PUSH2 0x77E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2457 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0xA77 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xAAF JUMP JUMPDEST PUSH2 0x2483 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0xAF9 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0xB01 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0xB0A DUP2 PUSH2 0x2BFC JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 SHR AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0x310 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x450 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH2 0x564 PUSH1 0x80 PUSH2 0xB6E PUSH1 0x4 CALLDATALOAD PUSH2 0xB5D DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0xB65 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x4C0 DUP2 PUSH2 0x2BFC JUMP JUMPDEST ADD MLOAD PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x450 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0xBA3 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0xB95 JUMP JUMPDEST SWAP3 SWAP1 PUSH2 0xBD8 SWAP1 SWAP6 SWAP5 SWAP3 SWAP6 PUSH1 0x80 DUP6 MSTORE PUSH1 0x80 DUP6 ADD SWAP1 PUSH2 0xB84 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP5 DUP2 SUB PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x20 DUP1 DUP9 MLOAD SWAP3 DUP4 DUP2 MSTORE ADD SWAP8 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0xC21 JUMPI POP POP POP POP DUP5 PUSH2 0xC13 SWAP2 DUP5 PUSH2 0x310 SWAP7 SWAP8 SUB PUSH1 0x40 DUP7 ADD MSTORE PUSH2 0x450 JUMP JUMPDEST SWAP2 PUSH1 0x60 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x450 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP8 DUP3 PUSH2 0xC33 PUSH1 0x1 SWAP3 DUP12 MLOAD PUSH2 0x3E1 JUMP JUMPDEST SWAP10 ADD SWAP4 SWAP3 SWAP2 ADD PUSH2 0xBF2 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0xC5B DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0xC63 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0xC6C DUP2 PUSH2 0x2BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0xCA4 PUSH2 0xC9F DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0x248E JUMP JUMPDEST SWAP1 DUP2 MLOAD SWAP3 PUSH2 0xCB1 DUP5 PUSH2 0x2503 JUMP JUMPDEST SWAP4 PUSH2 0xCBB DUP2 PUSH2 0x2551 JUMP JUMPDEST SWAP2 PUSH2 0xCC5 DUP3 PUSH2 0x2551 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0xCE0 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0x564 DUP9 DUP9 DUP13 DUP13 DUP6 PUSH2 0xBC0 JUMP JUMPDEST DUP1 PUSH2 0xCF5 PUSH1 0x1 SWAP3 DUP5 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0xD4C PUSH2 0xD47 DUP11 PUSH2 0xD32 PUSH2 0xD25 DUP7 PUSH2 0xD1F DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP4 PUSH2 0x25AF JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0x25D4 JUMP JUMPDEST PUSH2 0xD56 DUP4 DUP13 PUSH2 0x25AF JUMP JUMPDEST MSTORE PUSH2 0xD61 DUP3 DUP12 PUSH2 0x25AF JUMP JUMPDEST POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0xD7F DUP4 DUP10 PUSH2 0x25AF JUMP JUMPDEST MSTORE PUSH1 0x80 SHR PUSH2 0xD8D DUP3 DUP10 PUSH2 0x25AF JUMP JUMPDEST MSTORE ADD PUSH2 0xCC8 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x4 CALLDATALOAD PUSH2 0xDB3 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0xDBB PUSH2 0x2BA2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0xE DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH2 0xE14 PUSH1 0x4 CALLDATALOAD PUSH2 0xDFE DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0xE06 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0xE0F DUP2 PUSH2 0x2BFC JUMP JUMPDEST PUSH2 0x2EAB JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x2CC JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x2CC JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x2CC JUMPI JUMP JUMPDEST PUSH1 0x20 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x2CC JUMPI PUSH2 0xE78 SWAP2 PUSH1 0x4 ADD PUSH2 0xE1F JUMP JUMPDEST SWAP1 SWAP2 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH0 DUP1 PUSH2 0xE8C CALLDATASIZE PUSH2 0xE4D JUMP JUMPDEST SWAP1 PUSH2 0xE95 PUSH2 0x30AC JUMP JUMPDEST PUSH2 0xE9D PUSH2 0x2BA2 JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP3 DUP4 CALLDATACOPY DUP2 ADD DUP4 DUP2 MSTORE SUB SWAP1 DUP3 CALLER GAS CALL PUSH2 0xEB9 PUSH2 0x2613 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0xF06 JUMPI SWAP1 PUSH2 0xECF DUP2 PUSH2 0xF02 SWAP4 CALLER PUSH2 0x3140 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x1E79 JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x4 DUP2 MLOAD LT PUSH2 0xF85 JUMPI PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP4 ADD MLOAD AND SUB PUSH2 0x3131 JUMPI PUSH32 0x28F9554100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 PUSH2 0xFC4 PUSH2 0x310 SWAP4 PUSH1 0x40 DUP5 MSTORE PUSH1 0x40 DUP5 ADD SWAP1 PUSH2 0x450 JUMP JUMPDEST SWAP2 PUSH1 0x20 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x450 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0xFEF DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0xFF7 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x1000 DUP2 PUSH2 0x2BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP2 PUSH1 0x40 MLOAD DUP1 SWAP4 DUP5 SWAP2 PUSH1 0x20 DUP3 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP4 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x10CA JUMPI POP POP POP PUSH2 0x1051 SWAP3 POP SUB DUP4 PUSH2 0x77E JUMP JUMPDEST PUSH2 0x105D DUP3 MLOAD DUP1 SWAP3 PUSH2 0x31CC JUMP JUMPDEST SWAP2 PUSH2 0x1067 DUP3 PUSH2 0x2551 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0x1080 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0x564 DUP9 DUP9 DUP4 PUSH2 0xFAD JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH2 0x10B9 PUSH2 0x10B4 PUSH2 0xD47 PUSH2 0x10A7 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0xD32 PUSH2 0xD25 DUP7 DUP11 PUSH2 0x25AF JUMP JUMPDEST PUSH2 0x321E JUMP JUMPDEST PUSH2 0x10C3 DUP3 DUP10 PUSH2 0x25AF JUMP JUMPDEST MSTORE ADD PUSH2 0x106A JUMP JUMPDEST DUP6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP3 AND AND DUP5 MSTORE PUSH1 0x1 SWAP6 DUP7 ADD SWAP6 DUP9 SWAP6 POP PUSH1 0x20 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x103B JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH2 0x110A PUSH2 0x2BA2 JUMP JUMPDEST PUSH1 0x20 PUSH32 0x0 TLOAD PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1198 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1164 CALLDATASIZE PUSH2 0x2EB JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x116E PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x1177 DUP2 PUSH2 0x2BFC JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x6 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH2 0x11BA PUSH2 0x2BA2 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xA SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH2 0x1218 PUSH1 0x4 CALLDATALOAD PUSH2 0x11F2 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x11FE DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x120B DUP4 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x1213 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x32FA JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x1245 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x124D PUSH2 0x2BA2 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH2 0x1218 PUSH1 0x4 CALLDATALOAD PUSH2 0x1286 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x128E PUSH2 0x2BA2 JUMP JUMPDEST PUSH32 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x12E3 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x12EF DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x64 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2CC JUMPI PUSH2 0x1313 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x823 JUMP JUMPDEST PUSH2 0x131B PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x1323 PUSH2 0x335C JUMP JUMPDEST PUSH2 0x132B PUSH2 0x33AD JUMP JUMPDEST PUSH2 0x1334 DUP5 PUSH2 0x2C47 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 DUP2 AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x20 SWAP1 PUSH0 PUSH1 0x20 MSTORE PUSH2 0x135D PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x1 SWAP1 PUSH1 0x3 SHR AND SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x1755 JUMPI PUSH2 0x137D DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP7 PUSH2 0x1386 PUSH2 0x2642 JUMP JUMPDEST SWAP3 PUSH2 0x13A5 PUSH2 0xC9F DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP1 DUP6 MSTORE MLOAD SWAP7 PUSH2 0x13BA PUSH1 0x40 DUP7 ADD SWAP9 DUP1 DUP11 MSTORE PUSH2 0x2551 JUMP JUMPDEST SWAP8 PUSH1 0x80 DUP7 ADD SWAP9 DUP10 MSTORE PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x140D JUMPI DUP1 PUSH2 0x13FB PUSH2 0x13E5 PUSH1 0x1 SWAP4 DUP16 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x1406 DUP3 DUP14 MLOAD PUSH2 0x25AF JUMP JUMPDEST MSTORE ADD PUSH2 0x13C4 JUMP JUMPDEST POP DUP10 SWAP9 SWAP7 SWAP8 SWAP9 PUSH2 0x143B DUP2 DUP10 MLOAD PUSH2 0x1434 DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP1 PUSH2 0x3427 JUMP JUMPDEST SWAP10 PUSH2 0x1446 DUP4 MLOAD PUSH2 0x2551 JUMP JUMPDEST SWAP6 PUSH1 0x60 DUP10 ADD SWAP7 DUP8 MSTORE PUSH2 0x14AD DUP12 PUSH32 0x0 TLOAD PUSH32 0x0 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP1 JUMP JUMPDEST ISZERO ISZERO PUSH1 0xA0 DUP11 ADD DUP2 DUP2 MSTORE SWAP6 SWAP1 PUSH2 0x1728 JUMPI JUMPDEST PUSH0 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x160D JUMPI PUSH2 0x14E9 DUP2 DUP16 DUP11 DUP15 DUP4 DUP15 PUSH2 0x14DB DUP15 MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x15BD JUMPI JUMPDEST POP POP POP POP PUSH2 0x25AF JUMP JUMPDEST MLOAD PUSH2 0x14F4 DUP3 DUP13 PUSH2 0x25AF JUMP JUMPDEST MLOAD GT PUSH2 0x1554 JUMPI DUP1 DUP13 DUP16 DUP3 PUSH2 0x1547 DUP16 DUP3 PUSH2 0x154D SWAP5 PUSH2 0x152E PUSH2 0x151D PUSH2 0xD25 PUSH1 0x1 SWAP12 PUSH2 0x1533 SWAP7 MLOAD PUSH2 0x25AF JUMP JUMPDEST PUSH2 0x1527 DUP5 DUP5 PUSH2 0x25AF JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x3498 JUMP JUMPDEST PUSH2 0x25AF JUMP JUMPDEST MLOAD SWAP4 MLOAD SWAP4 PUSH2 0x1541 DUP4 DUP7 PUSH2 0x25AF JUMP JUMPDEST MLOAD PUSH2 0x26B2 JUMP JUMPDEST SWAP3 PUSH2 0x25AF JUMP JUMPDEST MSTORE ADD PUSH2 0x14BF JUMP JUMPDEST DUP14 DUP11 PUSH2 0x157D DUP4 PUSH2 0x1576 DUP16 SWAP6 PUSH2 0x1570 PUSH2 0xD25 DUP3 PUSH2 0x15BA SWAP10 MLOAD PUSH2 0x25AF JUMP JUMPDEST SWAP6 PUSH2 0x25AF JUMP JUMPDEST MLOAD SWAP3 PUSH2 0x25AF JUMP JUMPDEST MLOAD PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST PUSH0 REVERT JUMPDEST PUSH2 0x15DC PUSH2 0x15EE SWAP4 PUSH2 0x15F9 SWAP6 PUSH2 0x15D2 DUP6 DUP10 PUSH2 0x25AF JUMP JUMPDEST MLOAD SWAP2 ADD MLOAD SWAP1 PUSH2 0x3476 JUMP JUMPDEST PUSH2 0x15E7 DUP4 DUP4 MLOAD PUSH2 0x25AF JUMP JUMPDEST MSTORE MLOAD PUSH2 0x25AF JUMP JUMPDEST MLOAD PUSH2 0x1541 DUP5 DUP5 PUSH2 0x25AF JUMP JUMPDEST PUSH2 0x1603 DUP4 DUP4 PUSH2 0x25AF JUMP JUMPDEST MSTORE DUP11 DUP15 DUP4 DUP15 PUSH2 0x14E0 JUMP JUMPDEST POP DUP11 SWAP6 POP SWAP2 DUP8 SWAP2 DUP14 SWAP4 DUP14 PUSH2 0x1632 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP7 PUSH0 JUMPDEST DUP10 MLOAD DUP2 LT ISZERO PUSH2 0x1683 JUMPI DUP1 PUSH2 0x166A DUP13 PUSH2 0x1663 DUP4 PUSH2 0x165B PUSH1 0x1 SWAP7 DUP16 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP3 MLOAD PUSH2 0x25AF JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x34D6 JUMP JUMPDEST PUSH2 0x167C DUP3 DUP13 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE ADD PUSH2 0x1635 JUMP JUMPDEST PUSH2 0x564 DUP9 PUSH0 DUP10 DUP10 PUSH32 0xFBE5B0D79FB94F1E81C0A92BF86AE9D3A19E9D1BF6202C0D3E75120F65D5D8A5 DUP11 DUP11 PUSH2 0x1701 PUSH2 0x16EF DUP13 PUSH2 0x16D8 DUP14 PUSH2 0x16C4 DUP2 CALLER DUP9 DUP7 PUSH2 0x34E4 JUMP JUMPDEST PUSH2 0x16CC PUSH2 0x3560 JUMP JUMPDEST PUSH2 0x1718 JUMPI JUMPDEST DUP6 DUP4 PUSH2 0x35C5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP6 MLOAD DUP9 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP5 AND SWAP8 DUP5 PUSH2 0x26BF JUMP JUMPDEST SUB SWAP1 LOG4 PUSH2 0x170C PUSH2 0x3402 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0xB27 JUMP JUMPDEST PUSH2 0x1723 DUP2 DUP8 DUP6 PUSH2 0x3582 JUMP JUMPDEST PUSH2 0x16D1 JUMP JUMPDEST PUSH2 0x174B PUSH2 0x1745 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x2F52 JUMP JUMPDEST PUSH1 0x20 DUP12 ADD MSTORE PUSH2 0x14BD JUMP JUMPDEST DUP4 PUSH32 0xEF029ADF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH2 0x1799 PUSH2 0x2BA2 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x9 SLOAD PUSH1 0x8 SHR AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH2 0x1837 PUSH1 0x4 CALLDATALOAD PUSH2 0x17D4 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x17DC PUSH2 0x2BA2 JUMP JUMPDEST PUSH32 0x0 TLOAD PUSH32 0x0 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x1866 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x186E PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x1877 DUP2 PUSH2 0x2BFC JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH2 0x1218 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x2F52 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH2 0x18A5 PUSH2 0x2BA2 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1 PUSH1 0x7 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0xC0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x18D4 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x18E1 DUP3 PUSH2 0x2BB JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP5 GT PUSH2 0x2CC JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0x2CC JUMPI DUP4 PUSH1 0x4 ADD CALLDATALOAD PUSH2 0x190F DUP2 PUSH2 0x80B JUMP JUMPDEST SWAP5 PUSH2 0x191D PUSH1 0x40 MLOAD SWAP7 DUP8 PUSH2 0x77E JUMP JUMPDEST DUP2 DUP7 MSTORE PUSH1 0x20 SWAP2 PUSH1 0x24 PUSH1 0x20 DUP9 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x2CC JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1989 JUMPI POP POP POP POP PUSH1 0x64 CALLDATALOAD DUP4 DUP2 GT PUSH2 0x2CC JUMPI PUSH2 0x1960 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x823 JUMP JUMPDEST PUSH1 0xA4 CALLDATALOAD SWAP4 DUP5 GT PUSH2 0x2CC JUMPI PUSH2 0x564 SWAP5 PUSH2 0x197F PUSH2 0x9C2 SWAP6 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x8D5 JUMP JUMPDEST SWAP4 PUSH1 0x84 CALLDATALOAD SWAP4 PUSH2 0x26EA JUMP JUMPDEST DUP4 DUP1 SWAP2 DUP4 CALLDATALOAD PUSH2 0x1997 DUP2 PUSH2 0x2BB JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x193D JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x19C7 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x19CF PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x19D8 DUP2 PUSH2 0x2BFC JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x3 SHR AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x1A1B DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x1A23 PUSH2 0x2BA2 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2CC JUMPI PUSH2 0x1A6F SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xE1F JUMP JUMPDEST PUSH2 0x1A77 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x1A80 CALLER PUSH2 0x2BFC JUMP JUMPDEST DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH1 0x20 DUP5 MSTORE DUP2 PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD CALLDATACOPY PUSH0 PUSH1 0x40 DUP3 DUP5 ADD ADD MSTORE PUSH32 0x4BC4412E210115456903C65B5277D299A505E79F2EB852B92B1CA52D85856428 PUSH1 0x4 CALLDATALOAD SWAP3 PUSH1 0x40 DUP2 PUSH1 0x1F NOT PUSH1 0x1F CALLER SWAP7 ADD AND DUP2 ADD SUB ADD SWAP1 LOG3 STOP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0x310 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0xB84 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x1B03 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x1B0B PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x1B14 DUP2 PUSH2 0x2BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 PUSH1 0x20 DUP5 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP4 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1B67 JUMPI PUSH2 0x564 DUP6 PUSH2 0x1B5B DUP2 DUP10 SUB DUP3 PUSH2 0x77E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x1AD5 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP5 PUSH1 0x1 PUSH2 0x1B89 DUP2 SWAP3 DUP5 DUP10 SLOAD AND SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 SWAP3 AND DUP2 MSTORE ADD SWAP1 JUMP JUMPDEST SWAP7 ADD SWAP4 SWAP3 ADD SWAP1 PUSH2 0x1B44 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH2 0x160 PUSH2 0x1BF9 PUSH1 0x4 CALLDATALOAD PUSH2 0x1BB7 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x1BBF PUSH2 0x2891 JUMP JUMPDEST POP PUSH2 0x1BC8 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x1BD1 DUP2 PUSH2 0x2BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH2 0x3D80 JUMP JUMPDEST PUSH2 0x1C8A PUSH1 0x40 MLOAD DUP1 SWAP3 DUP1 MLOAD ISZERO ISZERO DUP3 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0x40 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0x60 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0x80 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0xA0 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0xC0 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0xE0 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 SWAP1 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 ADD MSTORE JUMP JUMPDEST RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH2 0x1CE2 PUSH2 0x2BA2 JUMP JUMPDEST PUSH1 0x20 PUSH32 0x0 TLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH2 0x1D4C PUSH1 0x4 CALLDATALOAD PUSH2 0x1D2E DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x1D3A DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x1D42 PUSH2 0x2BA2 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 CALLER PUSH2 0x3EBE JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x1D7C DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x1D84 PUSH2 0x2BA2 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x2DE SWAP1 SWAP3 SWAP2 SWAP3 PUSH1 0x60 DUP2 ADD SWAP4 PUSH1 0x40 SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH2 0x564 PUSH1 0x4 CALLDATALOAD PUSH2 0x1DEE DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x1DF6 PUSH2 0x24E5 JUMP JUMPDEST POP PUSH2 0x1DFF PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x1E08 DUP2 PUSH2 0x2BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x2 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1E2E DUP5 PUSH2 0x6F4 JUMP JUMPDEST DUP3 DUP2 SLOAD AND DUP5 MSTORE DUP3 PUSH1 0x1 DUP3 ADD SLOAD AND PUSH1 0x20 DUP6 ADD MSTORE ADD SLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x1D9B JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0x310 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x1E54 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH2 0x564 PUSH2 0x1ED3 PUSH0 DUP1 PUSH2 0x1EBA PUSH2 0x1EA3 CALLDATASIZE PUSH2 0xE4D JUMP JUMPDEST PUSH2 0x1EAB PUSH2 0x30AC JUMP JUMPDEST PUSH2 0x1EB3 PUSH2 0x2BA2 JUMP JUMPDEST CALLDATASIZE SWAP2 PUSH2 0x89F JUMP JUMPDEST PUSH1 0x20 DUP2 MLOAD SWAP2 ADD DUP3 CALLER GAS CALL PUSH2 0x1ECC PUSH2 0x2613 JUMP JUMPDEST SWAP1 CALLER PUSH2 0x3140 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1E54 JUMP JUMPDEST DUP1 ISZERO ISZERO SUB PUSH2 0x2CC JUMPI JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD SWAP1 PUSH2 0x2DE DUP3 PUSH2 0x1EE7 JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x2CC JUMPI JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x2CC JUMPI PUSH1 0xA4 SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDC PUSH1 0x80 SWAP2 ADD SLT PUSH2 0x2CC JUMPI PUSH2 0x124 SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH2 0x1A0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x1F8E DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2CC JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x2CC JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP2 PUSH2 0x1FBA DUP4 PUSH2 0x80B JUMP JUMPDEST SWAP2 PUSH1 0x40 SWAP4 PUSH2 0x1FCB PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x77E JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 SWAP1 PUSH1 0x24 PUSH1 0x20 DUP7 ADD SWAP2 PUSH1 0x7 SHL DUP5 ADD ADD SWAP3 CALLDATASIZE DUP5 GT PUSH2 0x2CC JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x202F JUMPI PUSH2 0x202D DUP7 DUP7 PUSH2 0x1FFF PUSH2 0x1EFE JUMP JUMPDEST PUSH2 0x2007 PUSH2 0x1EF1 JUMP JUMPDEST PUSH2 0x2010 CALLDATASIZE PUSH2 0x1F11 JUMP JUMPDEST SWAP2 PUSH2 0x2019 PUSH2 0x2D0 JUMP JUMPDEST SWAP4 PUSH2 0x2023 CALLDATASIZE PUSH2 0x1F40 JUMP JUMPDEST SWAP6 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x28F4 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x80 DUP3 CALLDATASIZE SUB SLT PUSH2 0x2CC JUMPI DUP3 PUSH1 0x80 SWAP2 DUP9 MLOAD PUSH2 0x2048 DUP2 PUSH2 0x715 JUMP JUMPDEST DUP5 CALLDATALOAD PUSH2 0x2053 DUP2 PUSH2 0x2BB JUMP JUMPDEST DUP2 MSTORE DUP3 DUP6 ADD CALLDATALOAD PUSH2 0x2062 DUP2 PUSH2 0x7F6 JUMP JUMPDEST DUP4 DUP3 ADD MSTORE DUP10 DUP6 ADD CALLDATALOAD PUSH2 0x2073 DUP2 PUSH2 0x2BB JUMP JUMPDEST DUP11 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP7 ADD CALLDATALOAD SWAP1 PUSH2 0x2087 DUP3 PUSH2 0x1EE7 JUMP JUMPDEST DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x1FEB JUMP JUMPDEST PUSH2 0x2DE SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x180 PUSH2 0x1A0 DUP3 ADD SWAP5 PUSH2 0x20D6 DUP4 DUP3 MLOAD PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x210C PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0xE0 DUP6 ADD SWAP1 PUSH5 0xFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD MLOAD SWAP1 PUSH2 0x2127 PUSH2 0x100 SWAP3 DUP4 DUP7 ADD SWAP1 PUSH4 0xFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x215B PUSH1 0xC0 DUP3 ADD MLOAD SWAP3 PUSH2 0x2141 PUSH2 0x120 SWAP5 DUP6 DUP9 ADD SWAP1 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MLOAD ISZERO ISZERO PUSH2 0x140 DUP8 ADD MSTORE DUP3 ADD MLOAD ISZERO ISZERO PUSH2 0x160 DUP7 ADD MSTORE JUMP JUMPDEST ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH2 0x564 PUSH2 0x21F2 PUSH1 0x4 CALLDATALOAD PUSH2 0x2187 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH0 PUSH2 0x120 PUSH1 0x40 MLOAD PUSH2 0x2197 DUP2 PUSH2 0x731 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x21A3 DUP2 PUSH2 0x715 JUMP JUMPDEST DUP4 DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP4 PUSH1 0x40 DUP3 ADD MSTORE DUP4 PUSH1 0x60 DUP3 ADD MSTORE DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE DUP3 PUSH1 0xC0 DUP3 ADD MSTORE DUP3 PUSH1 0xE0 DUP3 ADD MSTORE DUP3 PUSH2 0x100 DUP3 ADD MSTORE ADD MSTORE PUSH2 0x2A1A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x2095 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH2 0x225E PUSH1 0x4 CALLDATALOAD PUSH2 0x2220 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x24 CALLDATALOAD SWAP2 PUSH2 0x2235 DUP4 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x223D PUSH2 0x2BA2 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0xF DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x22B7 DUP3 PUSH2 0x74E JUMP JUMPDEST DUP2 PUSH0 DUP2 MSTORE PUSH1 0xC0 PUSH1 0x60 SWAP2 DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 DUP1 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 PUSH4 0xFFFFFFFF DUP1 DUP1 SWAP5 AND SWAP2 AND ADD SWAP2 DUP3 GT PUSH2 0x2326 JUMPI JUMP JUMPDEST PUSH2 0x22E1 JUMP JUMPDEST PUSH2 0x23A8 SWAP2 PUSH2 0x2337 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x2340 DUP3 PUSH2 0x2C47 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP4 AND SWAP1 DUP2 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP4 DUP5 SWAP4 PUSH2 0x2365 DUP6 PUSH0 KECCAK256 SLOAD PUSH2 0x2F52 JUMP JUMPDEST SWAP4 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE DUP5 PUSH0 KECCAK256 SLOAD AND SWAP2 DUP5 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP4 DUP5 SWAP4 PUSH32 0xA0E8F5AC00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD PUSH2 0x2F9F JUMP JUMPDEST SUB SWAP2 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xACF JUMPI PUSH0 SWAP2 PUSH0 SWAP4 PUSH2 0x2425 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x23FD JUMPI PUSH8 0xDE0B5CAD2BEF000 DUP2 GT PUSH2 0x23D5 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x746E594000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x53F976D400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x2448 SWAP4 POP DUP1 SWAP2 SWAP3 POP SWAP1 RETURNDATASIZE LT PUSH2 0x2450 JUMPI JUMPDEST PUSH2 0x2440 DUP2 DUP4 PUSH2 0x77E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2F80 JUMP JUMPDEST SWAP1 PUSH0 DUP1 PUSH2 0x23BC JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2436 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x2CC JUMPI MLOAD SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x20 PUSH2 0x247E PUSH1 0x1 SWAP3 PUSH1 0x40 DUP7 MSTORE PUSH1 0x40 DUP7 ADD SWAP1 PUSH2 0x450 JUMP JUMPDEST SWAP4 ADD MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP2 DUP3 DUP2 SLOAD SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP3 PUSH1 0x20 DUP4 ADD SWAP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP4 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x24C2 JUMPI POP POP POP PUSH2 0x2DE SWAP3 POP SUB DUP4 PUSH2 0x77E JUMP JUMPDEST DUP6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 MSTORE PUSH1 0x1 SWAP6 DUP7 ADD SWAP6 DUP9 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x24AC JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x24F2 DUP3 PUSH2 0x6F4 JUMP JUMPDEST PUSH0 PUSH1 0x40 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 PUSH2 0x250D DUP3 PUSH2 0x80B JUMP JUMPDEST PUSH2 0x251A PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x77E JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x252A DUP3 SWAP5 PUSH2 0x80B JUMP JUMPDEST ADD SWAP1 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x253A JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH2 0x2545 PUSH2 0x24E5 JUMP JUMPDEST DUP3 DUP3 DUP6 ADD ADD MSTORE ADD PUSH2 0x252E JUMP JUMPDEST SWAP1 PUSH2 0x255B DUP3 PUSH2 0x80B JUMP JUMPDEST PUSH2 0x2568 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x77E JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x2578 DUP3 SWAP5 PUSH2 0x80B JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x25C3 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH2 0x2582 JUMP JUMPDEST PUSH2 0x25D1 DUP3 PUSH2 0x3AA JUMP JUMPDEST MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD PUSH2 0x25E1 DUP2 PUSH2 0x6F4 JUMP JUMPDEST PUSH1 0x40 PUSH1 0xFF DUP3 SWAP5 SLOAD DUP2 DUP2 AND PUSH2 0x25F4 DUP2 PUSH2 0x3AA JUMP JUMPDEST DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 PUSH1 0x8 SHR AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0xA8 SHR AND ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x263D JUMPI RETURNDATASIZE SWAP1 PUSH2 0x2624 DUP3 PUSH2 0x883 JUMP JUMPDEST SWAP2 PUSH2 0x2632 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x77E JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0xC0 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE PUSH0 PUSH1 0xA0 DUP4 PUSH1 0x60 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x80 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BDC0 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x2326 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x2326 JUMPI JUMP JUMPDEST SWAP2 PUSH2 0x26DC SWAP1 PUSH2 0x310 SWAP5 SWAP3 DUP5 MSTORE PUSH1 0x60 PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD SWAP1 PUSH2 0x450 JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x450 JUMP JUMPDEST SWAP4 SWAP6 SWAP5 SWAP2 SWAP6 SWAP3 SWAP1 SWAP3 PUSH2 0x26FA PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x2702 PUSH2 0x335C JUMP JUMPDEST PUSH2 0x270B DUP6 PUSH2 0x2BFC JUMP JUMPDEST PUSH2 0x2713 PUSH2 0x33AD JUMP JUMPDEST PUSH2 0x271C DUP6 PUSH2 0x3796 JUMP JUMPDEST PUSH2 0x2725 DUP6 PUSH2 0x2C94 JUMP JUMPDEST SWAP2 PUSH2 0x2734 DUP4 MLOAD PUSH1 0x1 SWAP1 DUP2 SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x285C JUMPI PUSH2 0x279D SWAP7 SWAP8 PUSH2 0x274E PUSH1 0x20 DUP6 ADD MLOAD MLOAD DUP4 MLOAD SWAP1 PUSH2 0x37E4 JUMP JUMPDEST PUSH1 0xC0 DUP5 ADD SWAP6 DUP7 MLOAD PUSH2 0x2766 PUSH1 0xA0 DUP8 ADD SWAP2 DUP3 MLOAD SWAP1 DUP7 PUSH2 0x3813 JUMP JUMPDEST SWAP8 DUP10 PUSH2 0x2777 DUP9 MLOAD PUSH1 0x1 SWAP1 PUSH1 0x8 SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x27EB JUMPI JUMPDEST DUP10 SWAP5 SWAP3 POP DUP8 SWAP2 POP SWAP3 PUSH2 0x278F SWAP7 SWAP6 SWAP4 PUSH2 0x39FC JUMP JUMPDEST SWAP5 DUP6 SWAP2 MLOAD PUSH1 0x1 SWAP1 PUSH1 0xA SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x27AE JUMPI JUMPDEST POP POP POP POP PUSH2 0x310 PUSH2 0x3402 JUMP JUMPDEST PUSH2 0x27DC PUSH2 0x27CF PUSH2 0x27E2 SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 PUSH2 0x3CB4 JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP4 PUSH2 0x27A2 JUMP JUMPDEST SWAP2 PUSH2 0x284F SWAP2 PUSH2 0x2821 DUP10 SWAP12 DUP12 PUSH2 0x281B PUSH2 0x27CF PUSH2 0x278F SWAP13 SWAP12 SWAP10 SWAP11 SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x38B9 JUMP JUMPDEST PUSH2 0x2845 PUSH2 0x283F DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP11 PUSH2 0x398F JUMP JUMPDEST MLOAD SWAP1 MLOAD SWAP1 DUP5 PUSH2 0x3813 JUMP JUMPDEST SWAP8 DUP2 SWAP4 SWAP3 SWAP5 SWAP6 POP DUP10 PUSH2 0x277C JUMP JUMPDEST PUSH32 0x218E374700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x160 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE PUSH0 PUSH2 0x140 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE DUP3 PUSH1 0xC0 DUP3 ADD MSTORE DUP3 PUSH1 0xE0 DUP3 ADD MSTORE DUP3 PUSH2 0x100 DUP3 ADD MSTORE DUP3 PUSH2 0x120 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP5 SWAP7 SWAP3 PUSH4 0xFFFFFFFF SWAP2 SWAP7 SWAP5 SWAP3 PUSH2 0x2908 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x2910 PUSH2 0x33AD JUMP JUMPDEST PUSH2 0x2918 PUSH2 0x3FEE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP8 PUSH2 0x2925 DUP10 PUSH2 0x74E JUMP JUMPDEST DUP9 MSTORE PUSH1 0x20 DUP9 ADD MSTORE AND PUSH1 0x40 DUP7 ADD MSTORE ISZERO ISZERO PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x60 DUP6 CALLDATASIZE SUB SLT PUSH2 0x2CC JUMPI PUSH2 0x29A1 PUSH2 0x29A8 SWAP3 PUSH2 0x29B2 SWAP7 PUSH1 0x40 DUP1 MLOAD SWAP2 PUSH2 0x295C DUP4 PUSH2 0x6F4 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x2967 DUP2 PUSH2 0x2BB JUMP JUMPDEST DUP4 MSTORE PUSH1 0x20 DUP2 ADD CALLDATALOAD PUSH2 0x2977 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MSTORE ADD CALLDATALOAD PUSH2 0x2987 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 DUP8 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 DUP7 ADD MSTORE JUMP JUMPDEST CALLDATASIZE SWAP1 PUSH2 0x29BA JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x44DA JUMP JUMPDEST PUSH2 0x2DE PUSH2 0x3402 JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x80 SWAP2 SUB SLT PUSH2 0x2CC JUMPI PUSH1 0x40 MLOAD PUSH2 0x29D2 DUP2 PUSH2 0x715 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 SWAP5 DUP1 CALLDATALOAD PUSH2 0x29E2 DUP2 PUSH2 0x1EE7 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP2 ADD CALLDATALOAD PUSH2 0x29F2 DUP2 PUSH2 0x1EE7 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD CALLDATALOAD PUSH2 0x2A05 DUP2 PUSH2 0x1EE7 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MSTORE ADD CALLDATALOAD SWAP2 PUSH2 0x2A16 DUP4 PUSH2 0x1EE7 JUMP JUMPDEST ADD MSTORE JUMP JUMPDEST PUSH2 0x2A45 SWAP1 PUSH2 0x2A26 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x2A2F DUP2 PUSH2 0x2BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x310 PUSH1 0x1 PUSH2 0x2A54 DUP4 PUSH2 0x2F52 JUMP JUMPDEST SWAP3 PUSH2 0x2AFD PUSH2 0x2A61 DUP3 PUSH2 0x4FC2 JUMP JUMPDEST PUSH2 0x2AF0 PUSH2 0x2A6D DUP5 PUSH2 0x4FE5 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF DUP6 PUSH1 0x5A SHR AND SWAP1 PUSH4 0xFFFFFFFF DUP7 PUSH2 0x2A87 PUSH1 0x82 SWAP1 JUMP JUMPDEST SHR AND SWAP4 PUSH2 0x2A92 PUSH2 0x7AE JUMP JUMPDEST PUSH1 0x4 DUP9 SWAP1 SHR DUP10 AND ISZERO ISZERO DUP2 MSTORE SWAP10 PUSH1 0x5 DUP9 SWAP1 SHR DUP10 AND ISZERO ISZERO PUSH1 0x20 DUP13 ADD MSTORE PUSH1 0x6 DUP9 SWAP1 SHR DUP10 AND ISZERO ISZERO PUSH1 0x40 DUP13 ADD MSTORE PUSH1 0x7 DUP9 SWAP1 SHR DUP10 AND ISZERO ISZERO PUSH1 0x60 DUP13 ADD MSTORE PUSH2 0x2AD0 PUSH2 0x7BB JUMP JUMPDEST SWAP11 DUP12 MSTORE PUSH1 0x20 DUP12 ADD MSTORE PUSH1 0x40 DUP11 ADD MSTORE PUSH1 0x60 DUP10 ADD MSTORE PUSH5 0xFFFFFFFFFF AND PUSH1 0x80 DUP9 ADD MSTORE JUMP JUMPDEST PUSH4 0xFFFFFFFF AND PUSH1 0xA0 DUP7 ADD MSTORE JUMP JUMPDEST DUP1 DUP3 AND ISZERO ISZERO PUSH1 0xC0 DUP6 ADD MSTORE DUP1 DUP3 SHR DUP3 AND ISZERO ISZERO PUSH1 0xE0 DUP6 ADD MSTORE PUSH1 0x2 DUP2 SWAP1 SHR DUP3 AND ISZERO ISZERO PUSH2 0x100 DUP6 ADD MSTORE PUSH1 0x3 SHR AND ISZERO ISZERO PUSH2 0x120 DUP4 ADD MSTORE JUMP JUMPDEST PUSH32 0xF223889600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2B30 JUMPI CALLDATASIZE PUSH0 DUP1 CALLDATACOPY PUSH0 DUP1 CALLDATASIZE DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS DELEGATECALL RETURNDATASIZE PUSH0 DUP1 RETURNDATACOPY ISZERO PUSH2 0x2B9E JUMPI RETURNDATASIZE PUSH0 RETURN JUMPDEST RETURNDATASIZE PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND ADDRESS SUB PUSH2 0x2BD4 JUMPI JUMP JUMPDEST PUSH32 0x9FD25B3600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x2C1C JUMPI POP JUMP JUMPDEST PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 SHR AND ISZERO PUSH2 0x2C69 JUMPI POP JUMP JUMPDEST PUSH32 0x4BDACE1300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2CA5 PUSH2 0x22AA JUMP JUMPDEST SWAP3 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH0 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SLOAD SWAP1 PUSH1 0x4 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SWAP1 PUSH1 0x3 PUSH1 0x20 MSTORE DUP4 PUSH0 KECCAK256 SWAP4 DUP5 SLOAD SWAP4 DUP8 MSTORE PUSH2 0x2CE0 PUSH1 0x20 DUP9 ADD SWAP6 PUSH2 0x5008 JUMP JUMPDEST DUP6 MSTORE PUSH2 0x2CEB DUP5 PUSH2 0x2503 JUMP JUMPDEST SWAP2 DUP2 DUP9 ADD SWAP3 DUP4 MSTORE PUSH2 0x2CFB DUP6 PUSH2 0x2551 JUMP JUMPDEST SWAP2 PUSH1 0x60 DUP10 ADD SWAP3 DUP4 MSTORE PUSH2 0x2D0C DUP7 PUSH2 0x2551 JUMP JUMPDEST SWAP5 PUSH1 0x80 SWAP6 PUSH1 0x80 DUP12 ADD MSTORE PUSH2 0x2D20 DUP8 DUP12 MLOAD PUSH2 0x31CC JUMP JUMPDEST PUSH1 0xC0 DUP12 ADD MSTORE PUSH2 0x2D2E DUP8 PUSH2 0x2551 JUMP JUMPDEST PUSH1 0xA0 DUP12 ADD SWAP1 DUP2 MSTORE DUP11 MLOAD SWAP2 PUSH1 0x1 SWAP10 PUSH1 0x1 DUP5 DUP2 SHR AND SWAP4 DUP5 PUSH2 0x2E97 JUMPI JUMPDEST POP DUP4 PUSH2 0x2E85 JUMPI JUMPDEST DUP13 PUSH0 JUMPDEST DUP12 DUP2 LT PUSH2 0x2D68 JUMPI POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP11 DUP14 SWAP3 DUP3 DUP13 DUP13 DUP13 PUSH2 0x2DAF DUP5 PUSH2 0x2D9B DUP2 PUSH2 0x2D8D PUSH2 0xD47 DUP16 DUP16 PUSH2 0xD25 DUP6 PUSH2 0xD32 SWAP3 MLOAD PUSH2 0x25AF JUMP JUMPDEST SWAP5 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP5 MLOAD DUP4 PUSH2 0x2DA9 DUP4 DUP4 PUSH2 0x25AF JUMP JUMPDEST MSTORE PUSH2 0x25AF JUMP JUMPDEST POP PUSH2 0x2DB9 DUP2 PUSH2 0x321E JUMP JUMPDEST PUSH2 0x2DC4 DUP6 DUP14 MLOAD PUSH2 0x25AF JUMP JUMPDEST MSTORE PUSH2 0x2DE2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP6 DUP8 PUSH2 0x5238 JUMP JUMPDEST DUP8 DUP14 DUP14 ISZERO PUSH2 0x2E78 JUMPI DUP3 ADD MLOAD ISZERO ISZERO SWAP2 DUP3 PUSH2 0x2E5A JUMPI JUMPDEST POP POP PUSH2 0x2E0B JUMPI JUMPDEST POP POP POP POP POP JUMPDEST ADD DUP14 SWAP1 PUSH2 0x2D52 JUMP JUMPDEST DUP3 PUSH2 0x2E2E SWAP3 PUSH2 0x2E25 DUP3 PUSH2 0x2E1E DUP9 MLOAD PUSH2 0x4FE5 JUMP JUMPDEST SWAP5 MLOAD PUSH2 0x25AF JUMP JUMPDEST MLOAD SWAP7 SHR DUP6 PUSH2 0x57A3 JUMP JUMPDEST SWAP3 DUP4 PUSH2 0x2E3E JUMPI JUMPDEST DUP15 SWAP4 POP DUP13 PUSH2 0x2DFD JUMP JUMPDEST PUSH2 0x2E51 SWAP4 PUSH2 0x2E4B SWAP2 PUSH2 0x26B2 JUMP JUMPDEST SWAP2 PUSH2 0x5238 JUMP JUMPDEST PUSH0 DUP16 DUP3 DUP3 PUSH2 0x2E35 JUMP JUMPDEST SWAP1 SWAP2 POP MLOAD PUSH2 0x2E67 DUP2 PUSH2 0x3AA JUMP JUMPDEST PUSH2 0x2E70 DUP2 PUSH2 0x3AA JUMP JUMPDEST EQ DUP8 PUSH0 PUSH2 0x2DF6 JUMP JUMPDEST POP POP POP POP POP POP POP POP PUSH2 0x2E03 JUMP JUMPDEST DUP13 MLOAD SWAP1 SWAP4 POP PUSH1 0x3 SHR PUSH1 0x1 AND ISZERO SWAP3 PUSH2 0x2D4F JUMP JUMPDEST PUSH2 0x2EA2 SWAP2 SWAP5 POP PUSH2 0x4FE5 JUMP JUMPDEST ISZERO ISZERO SWAP3 PUSH0 PUSH2 0x2D48 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x2 SHR AND PUSH4 0xFFFFFFFF DUP1 SWAP4 PUSH2 0x2ED6 PUSH1 0x82 SWAP1 JUMP JUMPDEST SHR AND SWAP3 DUP2 PUSH2 0x2EE3 JUMPI POP SWAP2 SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x2F0F PUSH32 0x0 DUP5 PUSH2 0x230E JUMP JUMPDEST AND TIMESTAMP GT ISZERO SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x1 SWAP2 AND ADD SWAP1 PUSH1 0xFF DUP3 GT PUSH2 0x2326 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x5 DUP3 MUL SWAP2 DUP1 DUP4 DIV PUSH1 0x5 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2326 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x2326 JUMPI JUMP JUMPDEST PUSH3 0xFFFFFF SWAP1 PUSH1 0x12 SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2326 JUMPI SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x2DE DUP3 PUSH2 0x1EE7 JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x2CC JUMPI PUSH1 0x20 DUP3 MLOAD PUSH2 0x2F99 DUP2 PUSH2 0x1EE7 JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2A16 PUSH2 0x303F PUSH1 0x40 SWAP4 SWAP7 SWAP6 SWAP5 SWAP7 PUSH1 0x60 DUP5 MSTORE DUP1 MLOAD PUSH2 0x2FBB DUP2 PUSH2 0x3AA JUMP JUMPDEST PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xC0 PUSH2 0x2FE5 DUP7 DUP4 ADD MLOAD PUSH1 0xE0 PUSH1 0xA0 DUP9 ADD MSTORE PUSH2 0x140 DUP8 ADD SWAP1 PUSH2 0x450 JUMP JUMPDEST SWAP2 PUSH1 0x60 DUP2 ADD MLOAD DUP3 DUP8 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xE0 DUP8 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH2 0x100 DUP8 ADD MSTORE ADD MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 DUP6 DUP4 SUB ADD PUSH2 0x120 DUP7 ADD MSTORE PUSH2 0x1E54 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP7 AND PUSH1 0x20 DUP4 ADD MSTORE JUMP JUMPDEST DUP2 ISZERO PUSH2 0x305B JUMPI DIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2326 JUMPI PUSH2 0x310 SWAP2 PUSH2 0x3051 JUMP JUMPDEST ORIGIN PUSH2 0x3109 JUMPI PUSH1 0x1 PUSH1 0x7 SLOAD AND PUSH2 0x30E1 JUMPI PUSH1 0x1 PUSH32 0x0 TSTORE JUMP JUMPDEST PUSH32 0x7A19888600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x67F84AB200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 MLOAD ISZERO PUSH2 0xF85 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST SWAP1 PUSH2 0x317D JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x3155 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x31C3 JUMPI JUMPDEST PUSH2 0x318E JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x3186 JUMP JUMPDEST SWAP1 PUSH5 0xFFFFFFFFFF PUSH2 0x31DC DUP3 PUSH2 0x2551 JUMP JUMPDEST SWAP3 PUSH1 0x5A SHR AND PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x31F0 JUMPI POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x1F DUP3 PUSH2 0x31FC DUP4 PUSH2 0x2F29 JUMP JUMPDEST SHR AND SWAP1 PUSH1 0x4D DUP3 GT PUSH2 0x2326 JUMPI PUSH1 0x1 SWAP2 PUSH1 0xA EXP PUSH2 0x3217 DUP3 DUP8 PUSH2 0x25AF JUMP JUMPDEST MSTORE ADD PUSH2 0x31E3 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x3229 DUP2 PUSH2 0x3AA JUMP JUMPDEST PUSH2 0x3232 DUP2 PUSH2 0x3AA JUMP JUMPDEST DUP1 PUSH2 0x3245 JUMPI POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x3251 PUSH1 0x1 SWAP3 PUSH2 0x3AA JUMP JUMPDEST SUB PUSH2 0x32D2 JUMPI PUSH1 0x20 PUSH2 0x327C PUSH2 0x3270 DUP3 PUSH1 0x4 SWAP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0x679AEFCE00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xACF JUMPI PUSH0 SWAP2 PUSH2 0x32B9 JUMPI POP SWAP1 JUMP JUMPDEST PUSH2 0x310 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xAC8 JUMPI PUSH2 0xAB9 DUP2 DUP4 PUSH2 0x77E JUMP JUMPDEST PUSH32 0xDF45063200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP2 DUP4 DUP2 AND DUP5 DUP5 AND SUB PUSH2 0x3318 JUMPI POP POP POP POP PUSH0 NOT SWAP1 JUMP JUMPDEST PUSH2 0x3358 SWAP4 PUSH2 0x3342 SWAP3 AND PUSH0 MSTORE PUSH1 0x10 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST PUSH32 0x0 TLOAD ISZERO PUSH2 0x3385 JUMPI JUMP JUMPDEST PUSH32 0xC09BA73600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x33DA JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE JUMP JUMPDEST SWAP3 SWAP2 PUSH2 0x3433 DUP5 MLOAD PUSH2 0x2551 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x3470 JUMPI DUP1 PUSH2 0x345F DUP6 PUSH2 0x345A DUP7 PUSH2 0x3454 PUSH1 0x1 SWAP7 DUP9 PUSH2 0x25AF JUMP JUMPDEST MLOAD PUSH2 0x2F3F JUMP JUMPDEST PUSH2 0x3051 JUMP JUMPDEST PUSH2 0x3469 DUP3 DUP10 PUSH2 0x25AF JUMP JUMPDEST MSTORE ADD PUSH2 0x3436 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST SWAP1 PUSH2 0x3480 SWAP2 PUSH2 0x2F3F JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x34A2 SWAP1 PUSH2 0x505F JUMP JUMPDEST SWAP1 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP3 EQ PUSH2 0x2326 JUMPI PUSH2 0x2DE SWAP2 PUSH0 SUB SWAP1 PUSH2 0x50B4 JUMP JUMPDEST SWAP1 PUSH2 0x310 SWAP2 PUSH1 0x80 SHR SWAP1 PUSH2 0x519C JUMP JUMPDEST SWAP2 SWAP1 SWAP4 SWAP3 SWAP4 PUSH2 0x34F4 DUP3 DUP3 DUP6 PUSH2 0x32FA JUMP JUMPDEST PUSH0 NOT DUP2 SUB PUSH2 0x3505 JUMPI JUMPDEST POP POP POP POP SWAP1 POP JUMP JUMPDEST DUP1 DUP7 GT PUSH2 0x3523 JUMPI SWAP5 PUSH2 0x3519 SWAP5 SWAP6 SUB SWAP3 PUSH2 0x3EBE JUMP JUMPDEST DUP1 PUSH0 DUP1 DUP1 DUP1 PUSH2 0x34FD JUMP JUMPDEST DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 PUSH32 0xFB8F41B200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST ORIGIN ISZERO DUP1 PUSH2 0x356A JUMPI SWAP1 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x7 SLOAD AND ISZERO SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x2326 JUMPI JUMP JUMPDEST SWAP1 ORIGIN PUSH2 0x3109 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x35B6 SWAP3 AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP1 SLOAD SWAP2 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x2326 JUMPI SSTORE JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 DUP4 ISZERO PUSH2 0x3761 JUMPI PUSH2 0x35F8 DUP6 PUSH2 0x3342 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD DUP1 DUP5 GT PUSH2 0x3724 JUMPI DUP4 SWAP1 SUB PUSH2 0x3622 DUP7 PUSH2 0x3342 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0x3648 DUP4 PUSH2 0x3642 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x26B2 JUMP JUMPDEST PUSH2 0x3651 DUP2 PUSH2 0x5200 JUMP JUMPDEST PUSH2 0x366C DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP1 DUP2 EXTCODESIZE ISZERO PUSH2 0x2CC JUMPI PUSH1 0x40 MLOAD PUSH32 0x23DE665100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP5 AND PUSH1 0x4 DUP6 ADD MSTORE PUSH0 PUSH1 0x24 DUP6 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP6 ADD DUP3 SWAP1 MSTORE SWAP4 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F SWAP2 PUSH2 0x3706 SWAP2 DUP7 DUP2 DUP1 PUSH1 0x64 DUP2 ADD JUMPDEST SUB DUP2 DUP4 DUP10 GAS CALL PUSH2 0x370B JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG4 JUMP JUMPDEST DUP1 PUSH2 0x3718 PUSH2 0x371E SWAP3 PUSH2 0x76A JUMP JUMPDEST DUP1 PUSH2 0x568 JUMP JUMPDEST PUSH0 PUSH2 0x36F5 JUMP JUMPDEST PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 DUP4 SWAP1 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH32 0x96C6FD1E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x379E PUSH2 0x3FEE JUMP JUMPDEST PUSH2 0x37A7 DUP2 PUSH2 0x2EAB JUMP JUMPDEST POP PUSH2 0x37AF JUMPI POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0xD971F59700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SUB PUSH2 0x37EB JUMPI JUMP JUMPDEST PUSH32 0xAAAD13F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 MLOAD SWAP2 DUP2 MLOAD DUP2 MLOAD DUP2 DUP6 EQ SWAP2 DUP3 ISZERO SWAP3 PUSH2 0x3899 JUMPI JUMPDEST POP POP PUSH2 0x37EB JUMPI PUSH2 0x3837 DUP4 PUSH2 0x2551 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x3849 JUMPI POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x3887 PUSH2 0x3862 PUSH1 0x1 SWAP5 DUP7 PUSH2 0x25AF JUMP JUMPDEST MLOAD PUSH2 0x3882 PUSH2 0x3870 DUP6 DUP11 PUSH2 0x25AF JUMP JUMPDEST MLOAD PUSH2 0x387B DUP7 DUP11 PUSH2 0x25AF JUMP JUMPDEST MLOAD SWAP3 PUSH2 0x2F3F JUMP JUMPDEST PUSH2 0x2F3F JUMP JUMPDEST DIV PUSH2 0x3892 DUP3 DUP10 PUSH2 0x25AF JUMP JUMPDEST MSTORE ADD PUSH2 0x383A JUMP JUMPDEST EQ ISZERO SWAP1 POP PUSH0 DUP1 PUSH2 0x3828 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x2CC JUMPI MLOAD PUSH2 0x310 DUP2 PUSH2 0x1EE7 JUMP JUMPDEST SWAP1 PUSH2 0x391D SWAP3 PUSH2 0x390B PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 SWAP6 PUSH1 0x40 MLOAD SWAP8 DUP9 SWAP7 DUP8 SWAP6 DUP7 SWAP4 PUSH32 0x1C149E2800000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x40 PUSH1 0x4 DUP7 ADD MSTORE PUSH1 0x44 DUP6 ADD SWAP1 PUSH2 0x450 JUMP JUMPDEST SWAP1 PUSH1 0x3 NOT DUP5 DUP4 SUB ADD PUSH1 0x24 DUP6 ADD MSTORE PUSH2 0x1E54 JUMP JUMPDEST SUB SWAP4 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xACF JUMPI PUSH0 SWAP2 PUSH2 0x3960 JUMPI JUMPDEST POP ISZERO PUSH2 0x3938 JUMPI JUMP JUMPDEST PUSH32 0x6061292500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x3982 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3988 JUMPI JUMPDEST PUSH2 0x397A DUP2 DUP4 PUSH2 0x77E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x38A4 JUMP JUMPDEST PUSH0 PUSH2 0x3930 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3970 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD MLOAD MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x39A7 JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH2 0x39F6 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH2 0x39D6 PUSH2 0x39D0 DUP6 DUP4 DUP12 ADD MLOAD PUSH2 0x25AF JUMP JUMPDEST MLOAD PUSH2 0x321E JUMP JUMPDEST PUSH2 0x39E4 DUP6 PUSH1 0xA0 DUP12 ADD MLOAD PUSH2 0x25AF JUMP JUMPDEST MSTORE DUP4 PUSH0 MSTORE DUP6 DUP8 MSTORE PUSH0 KECCAK256 SLOAD AND DUP3 DUP8 PUSH2 0x5238 JUMP JUMPDEST ADD PUSH2 0x3999 JUMP JUMPDEST SWAP3 SWAP2 SWAP6 SWAP7 SWAP5 SWAP7 PUSH2 0x3A1D DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP6 PUSH0 JUMPDEST PUSH1 0x20 DUP10 ADD MLOAD DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x3AFB JUMPI PUSH2 0xD25 DUP3 PUSH2 0x3A3B SWAP3 PUSH2 0x25AF JUMP JUMPDEST PUSH2 0x3A4B PUSH2 0x3270 PUSH2 0xD25 DUP5 DUP10 PUSH2 0x25AF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 DUP2 SUB PUSH2 0x3AA7 JUMPI POP SWAP1 PUSH2 0x3A75 PUSH1 0x1 SWAP3 PUSH2 0x3A6E DUP4 DUP12 PUSH2 0x25AF JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x5285 JUMP JUMPDEST PUSH2 0x3A8E DUP12 PUSH2 0x3A87 DUP4 PUSH2 0x1576 DUP2 DUP14 PUSH2 0x25AF JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x519C JUMP JUMPDEST PUSH2 0x3AA0 DUP3 DUP12 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE ADD PUSH2 0x3A20 JUMP JUMPDEST PUSH2 0x15BA SWAP1 DUP9 PUSH2 0x3ABC PUSH2 0x3270 PUSH2 0xD25 DUP8 DUP13 PUSH2 0x25AF JUMP JUMPDEST PUSH32 0xFFE261A100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x4 MSTORE DUP2 AND PUSH1 0x24 MSTORE AND PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST POP POP SWAP7 SWAP5 SWAP2 SWAP3 POP SWAP7 SWAP5 POP PUSH2 0x3B33 DUP5 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD PUSH1 0x2 SWAP2 AND OR SWAP1 JUMP JUMPDEST DUP1 DUP6 MSTORE PUSH2 0x3B50 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH2 0x3B96 PUSH1 0x20 DUP6 DUP4 AND SWAP8 PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x984DE9E800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x2466 JUMP JUMPDEST SUB DUP2 DUP11 GAS STATICCALL DUP1 ISZERO PUSH2 0xACF JUMPI PUSH2 0x3BBB SWAP2 PUSH0 SWAP2 PUSH2 0x3C95 JUMPI JUMPDEST POP PUSH2 0x3BB6 DUP2 PUSH2 0x5200 JUMP JUMPDEST PUSH2 0x2685 JUMP JUMPDEST SWAP8 PUSH2 0x3BC5 DUP3 PUSH2 0x5297 JUMP JUMPDEST PUSH2 0x3BD0 DUP10 DUP6 DUP5 PUSH2 0x53A7 JUMP JUMPDEST DUP1 DUP10 LT PUSH2 0x3C65 JUMPI POP SWAP3 DUP6 SWAP3 PUSH2 0x3C3C PUSH32 0xA26A52D8D53702BBA7F137907B8E1F99FF87F6D450144270CA25E72481CCA871 SWAP4 PUSH2 0x3C2D PUSH1 0x20 PUSH2 0x3C23 PUSH1 0x1 SWAP11 SWAP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP9 ADD MLOAD MLOAD PUSH2 0x2551 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP5 AND SWAP8 DUP5 PUSH2 0x26BF JUMP JUMPDEST SUB SWAP1 LOG4 PUSH32 0xCAD8C9D32507393B6508CA4A888B81979919B477510585BDE8488F153072D6F3 PUSH0 DUP1 LOG2 JUMP JUMPDEST PUSH32 0x8D261D5D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 DUP10 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x3CAE SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xAC8 JUMPI PUSH2 0xAB9 DUP2 DUP4 PUSH2 0x77E JUMP JUMPDEST PUSH0 PUSH2 0x3BAC JUMP JUMPDEST SWAP3 PUSH2 0x3D07 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 SWAP6 SWAP5 SWAP7 PUSH2 0x3D1E PUSH1 0x40 MLOAD SWAP9 DUP10 SWAP8 DUP9 SWAP7 DUP8 SWAP5 PUSH32 0x38BE241D00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE PUSH1 0x60 PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x64 DUP7 ADD SWAP1 PUSH2 0x450 JUMP JUMPDEST SWAP2 PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x3 NOT DUP5 DUP4 SUB ADD PUSH1 0x44 DUP6 ADD MSTORE PUSH2 0x1E54 JUMP JUMPDEST SUB SWAP4 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xACF JUMPI PUSH0 SWAP2 PUSH2 0x3D61 JUMPI JUMPDEST POP ISZERO PUSH2 0x3D39 JUMPI JUMP JUMPDEST PUSH32 0xF23DBC600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x3D7A SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3988 JUMPI PUSH2 0x397A DUP2 DUP4 PUSH2 0x77E JUMP JUMPDEST PUSH0 PUSH2 0x3D31 JUMP JUMPDEST SWAP1 PUSH2 0x3D89 PUSH2 0x2891 JUMP JUMPDEST POP PUSH1 0xFF PUSH1 0x1 DUP1 DUP5 DUP4 PUSH2 0x3D9B PUSH1 0xC PUSH2 0x2F17 JUMP JUMPDEST PUSH2 0x3DA4 SWAP1 PUSH2 0x2F17 JUMP JUMPDEST AND SHR AND DUP2 DUP6 DUP5 PUSH2 0x3DB4 PUSH1 0xC PUSH2 0x2F17 JUMP JUMPDEST PUSH2 0x3DBD SWAP1 PUSH2 0x2F17 JUMP JUMPDEST PUSH2 0x3DC6 SWAP1 PUSH2 0x2F17 JUMP JUMPDEST AND SHR AND SWAP1 DUP3 DUP7 DUP6 PUSH2 0x3DD7 PUSH1 0xC PUSH2 0x2F17 JUMP JUMPDEST PUSH2 0x3DE0 SWAP1 PUSH2 0x2F17 JUMP JUMPDEST PUSH2 0x3DE9 SWAP1 PUSH2 0x2F17 JUMP JUMPDEST PUSH2 0x3DF2 SWAP1 PUSH2 0x2F17 JUMP JUMPDEST AND SHR AND SWAP3 DUP1 DUP8 DUP7 PUSH2 0x3E03 PUSH1 0xC PUSH2 0x2F17 JUMP JUMPDEST PUSH2 0x3E0C SWAP1 PUSH2 0x2F17 JUMP JUMPDEST PUSH2 0x3E15 SWAP1 PUSH2 0x2F17 JUMP JUMPDEST PUSH2 0x3E1E SWAP1 PUSH2 0x2F17 JUMP JUMPDEST PUSH2 0x3E27 SWAP1 PUSH2 0x2F17 JUMP JUMPDEST AND SHR AND SWAP5 DUP2 DUP9 DUP2 DUP2 DUP5 PUSH1 0xC AND SHR AND SWAP3 PUSH1 0xC PUSH2 0x3E41 SWAP1 PUSH2 0x2F17 JUMP JUMPDEST AND SHR AND SWAP2 PUSH2 0x3E4D PUSH2 0x7C8 JUMP JUMPDEST PUSH1 0x9 DUP11 SWAP1 SHR DUP3 AND ISZERO ISZERO DUP2 MSTORE SWAP9 PUSH1 0x8 DUP2 SWAP1 SHR DUP3 AND ISZERO ISZERO PUSH1 0x20 DUP12 ADD MSTORE PUSH1 0xA DUP2 SWAP1 SHR DUP3 AND ISZERO ISZERO PUSH1 0x40 DUP12 ADD MSTORE PUSH1 0xB SHR AND ISZERO ISZERO PUSH1 0x60 DUP10 ADD MSTORE ISZERO ISZERO PUSH1 0x80 DUP9 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP8 ADD MSTORE ISZERO ISZERO PUSH1 0xC0 DUP7 ADD MSTORE ISZERO ISZERO PUSH1 0xE0 DUP6 ADD MSTORE ISZERO ISZERO PUSH2 0x100 DUP5 ADD MSTORE ISZERO ISZERO PUSH2 0x120 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x140 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP3 SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP2 AND SWAP4 DUP5 ISZERO PUSH2 0x3FB9 JUMPI DUP1 DUP4 AND SWAP6 DUP7 ISZERO PUSH2 0x3F84 JUMPI DUP5 PUSH2 0x3F02 DUP6 PUSH2 0x3342 DUP7 PUSH2 0x3342 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x10 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x2CC JUMPI PUSH1 0x40 MLOAD PUSH32 0x5687F2B800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH32 0xA0175360A15BCA328BAF7EA85C7B784D58B222A50D0CE760B10DBA336D226A61 SWAP2 PUSH2 0x3706 SWAP2 PUSH0 DUP2 DUP1 PUSH1 0x64 DUP2 ADD PUSH2 0x36EA JUMP JUMPDEST PUSH32 0x94280D6200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xE602DF0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0xFFFFFFFF PUSH32 0x0 AND TIMESTAMP GT ISZERO DUP1 PUSH2 0x404C JUMPI JUMPDEST PUSH2 0x4024 JUMPI JUMP JUMPDEST PUSH32 0xDA9F8B3400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x7 SLOAD DUP2 SHR AND PUSH2 0x401E JUMP JUMPDEST SWAP1 DUP1 MLOAD SWAP1 PUSH2 0x4067 DUP3 PUSH2 0x3AA JUMP JUMPDEST PUSH2 0x4070 DUP3 PUSH2 0x3AA JUMP JUMPDEST DUP3 SLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 SWAP3 SWAP1 SWAP3 ADD MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000 SWAP1 SWAP2 AND PUSH1 0xFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR PUSH1 0x8 SWAP2 SWAP1 SWAP2 SHL PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND OR SWAP1 ISZERO ISZERO PUSH1 0xA8 SHL PUSH22 0xFF000000000000000000000000000000000000000000 AND OR SWAP1 SSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x2CC JUMPI MLOAD PUSH1 0xFF DUP2 AND DUP2 SUB PUSH2 0x2CC JUMPI SWAP1 JUMP JUMPDEST DUP1 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x710 JUMPI PUSH1 0x1 DUP2 ADD DUP1 DUP4 SSTORE DUP2 LT ISZERO PUSH2 0x25C3 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE JUMP JUMPDEST DUP2 MLOAD DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND OR DUP3 SSTORE PUSH2 0x2DE SWAP3 PUSH1 0x2 SWAP2 SWAP1 PUSH1 0x40 SWAP1 PUSH2 0x41E2 DUP4 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x1 DUP8 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE JUMP JUMPDEST ADD MLOAD AND SWAP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x2CC JUMPI PUSH1 0x20 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x424F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 DUP3 PUSH1 0x80 PUSH1 0x1 SWAP3 DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP5 DUP3 ADD MLOAD PUSH2 0x4276 DUP2 PUSH2 0x3AA JUMP JUMPDEST DUP4 DUP7 ADD MSTORE PUSH1 0x40 DUP3 DUP2 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP4 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 ADD MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE ADD SWAP6 ADD SWAP4 SWAP3 SWAP2 ADD PUSH2 0x4241 JUMP JUMPDEST SWAP5 SWAP4 SWAP2 PUSH2 0x2DE SWAP4 PUSH1 0x60 SWAP3 PUSH2 0x42D1 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP10 MSTORE AND PUSH1 0x20 DUP9 ADD MSTORE PUSH1 0xE0 PUSH1 0x40 DUP9 ADD MSTORE PUSH1 0xE0 DUP8 ADD SWAP1 PUSH2 0x4230 JUMP JUMPDEST SWAP5 ADD SWAP1 PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH2 0x140 SWAP2 SUB SLT PUSH2 0x2CC JUMPI PUSH2 0x4313 PUSH2 0x7BB JUMP JUMPDEST SWAP1 PUSH2 0x431D DUP2 PUSH2 0x2F75 JUMP JUMPDEST DUP3 MSTORE PUSH2 0x432B PUSH1 0x20 DUP3 ADD PUSH2 0x2F75 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x433C PUSH1 0x40 DUP3 ADD PUSH2 0x2F75 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x434D PUSH1 0x60 DUP3 ADD PUSH2 0x2F75 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x435E PUSH1 0x80 DUP3 ADD PUSH2 0x2F75 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x436F PUSH1 0xA0 DUP3 ADD PUSH2 0x2F75 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0x4380 PUSH1 0xC0 DUP3 ADD PUSH2 0x2F75 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x4391 PUSH1 0xE0 DUP3 ADD PUSH2 0x2F75 JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 PUSH2 0x43A4 DUP2 DUP4 ADD PUSH2 0x2F75 JUMP JUMPDEST SWAP1 DUP4 ADD MSTORE PUSH2 0x43B6 PUSH2 0x120 DUP1 SWAP3 ADD PUSH2 0x2F75 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP2 SWAP7 SWAP6 SWAP4 SWAP5 PUSH2 0x441F PUSH2 0x2DE SWAP7 PUSH4 0xFFFFFFFF PUSH2 0x220 SWAP7 PUSH2 0x43E7 PUSH2 0x44AD SWAP7 PUSH2 0x2A0 DUP1 DUP11 MSTORE DUP10 ADD SWAP1 PUSH2 0x4230 JUMP JUMPDEST SWAP12 PUSH1 0x20 DUP9 ADD MSTORE AND PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x60 DUP6 ADD SWAP1 PUSH1 0x40 SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD SWAP1 DUP1 MLOAD ISZERO ISZERO DUP3 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0x40 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0x60 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0x80 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0xA0 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0xC0 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0xE0 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 SWAP1 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 ADD MSTORE JUMP JUMPDEST ADD SWAP1 PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SWAP1 PUSH2 0x44FF PUSH2 0x44F8 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x1 AND SWAP1 JUMP JUMPDEST PUSH2 0x4F8D JUMPI DUP1 MLOAD MLOAD PUSH1 0x2 DUP2 LT PUSH2 0x4F65 JUMPI PUSH1 0x8 DUP2 GT PUSH2 0x4F3D JUMPI SWAP3 SWAP2 SWAP1 PUSH2 0x4522 DUP5 PUSH2 0x2551 JUMP JUMPDEST PUSH0 SWAP5 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x4C30 JUMPI POP POP PUSH2 0x45F2 SWAP3 SWAP4 SWAP5 POP PUSH1 0x80 DUP3 ADD SWAP2 PUSH2 0x4560 DUP4 MLOAD PUSH2 0x455B DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x4575 PUSH2 0x3270 PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 SWAP2 PUSH2 0x458E DUP3 DUP8 MLOAD ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 MLOAD AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x459C PUSH1 0x60 DUP7 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH32 0x77FF76E700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP13 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP4 AND PUSH1 0x24 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x44 DUP4 ADD MSTORE SWAP1 SWAP7 DUP8 SWAP2 SWAP1 DUP3 SWAP1 PUSH0 SWAP1 DUP3 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0xACF JUMPI PUSH0 SWAP6 PUSH0 SWAP2 PUSH2 0x4BFD JUMPI JUMPDEST POP PUSH2 0x471E PUSH1 0xC0 DUP5 ADD SWAP2 PUSH2 0x4719 PUSH2 0x46E8 DUP5 MLOAD SWAP8 PUSH2 0x46D1 PUSH2 0x46CB PUSH2 0x462D DUP12 MLOAD ISZERO ISZERO PUSH1 0x4 SHL PUSH1 0x1 OR SWAP1 JUMP JUMPDEST SWAP11 PUSH1 0x60 PUSH2 0x469B PUSH2 0x466A PUSH1 0x20 SWAP15 DUP16 DUP6 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF SWAP1 PUSH1 0x5 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST DUP13 DUP5 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF SWAP1 PUSH1 0x6 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST SWAP2 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F SWAP1 PUSH1 0x7 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x54F5 JUMP JUMPDEST SWAP1 PUSH1 0x5A SWAP2 PUSH5 0xFFFFFFFFFF SWAP1 DUP2 AND DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP9 PUSH2 0x4714 DUP7 DUP9 ADD SWAP11 PUSH2 0x46FE DUP13 MLOAD PUSH4 0xFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x82 SWAP2 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST PUSH2 0x55C5 JUMP JUMPDEST PUSH2 0x55E5 JUMP JUMPDEST SWAP4 PUSH1 0xA0 DUP5 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP10 DUP8 PUSH2 0x4740 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST AND DUP1 PUSH2 0x4841 JUMPI JUMPDEST POP SWAP1 PUSH2 0x4765 DUP2 SWAP4 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4795 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x47CD SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE JUMP JUMPDEST DUP6 ADD SWAP5 DUP6 MLOAD PUSH2 0x47DC SWAP1 DUP12 PUSH2 0x5609 JUMP JUMPDEST MLOAD SWAP5 MLOAD SWAP8 MLOAD PUSH4 0xFFFFFFFF AND SWAP7 MLOAD SWAP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4806 SWAP2 PUSH2 0x3D80 JUMP JUMPDEST SWAP2 MLOAD SWAP3 MLOAD SWAP6 DUP7 SWAP6 CALLER SWAP10 AND SWAP8 PUSH2 0x481B SWAP6 DUP8 PUSH2 0x43BD JUMP JUMPDEST SUB PUSH32 0xBC1561EEAB9F40962E2FB827A7FF9C7CDB47A9D7C84CAEEFA4ED90E043842DAD SWAP2 LOG3 JUMP JUMPDEST PUSH2 0x4883 SWAP2 DUP5 SWAP2 DUP10 MLOAD PUSH0 DUP10 MLOAD SWAP4 DUP12 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xB89F18200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE CALLER PUSH1 0x4 DUP7 ADD PUSH2 0x429F JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xACF JUMPI PUSH0 SWAP2 PUSH2 0x4BE0 JUMPI JUMPDEST POP ISZERO PUSH2 0x4BCB JUMPI PUSH2 0x48B2 PUSH2 0x3270 PUSH2 0x3270 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 DUP6 MLOAD DUP1 SWAP3 PUSH32 0xD77153A700000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 PUSH1 0x4 PUSH2 0x140 SWAP6 DUP7 SWAP4 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xACF JUMPI PUSH0 SWAP4 PUSH2 0x4B9C JUMPI JUMPDEST POP POP DUP2 MLOAD ISZERO ISZERO DUP1 PUSH2 0x4B82 JUMPI JUMPDEST PUSH2 0x4B2F JUMPI SWAP1 PUSH2 0x4AFD PUSH2 0x120 PUSH2 0x4969 PUSH2 0x4ACA PUSH2 0x4A98 PUSH2 0x4A66 PUSH2 0x4A34 PUSH2 0x4A02 PUSH2 0x49D0 DUP15 PUSH2 0x49A5 PUSH2 0x499C DUP13 DUP16 PUSH2 0x4B28 SWAP16 SWAP1 PUSH2 0x4969 PUSH2 0x4971 SWAP3 PUSH2 0x493E DUP6 MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFF SWAP1 PUSH1 0x9 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST SWAP3 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFF SWAP1 PUSH1 0x8 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST SWAP2 DUP13 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFF SWAP1 PUSH1 0xA SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP11 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FF SWAP1 PUSH1 0xB SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP10 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF SWAP1 PUSH1 0xC SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0xA0 DUP9 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFF SWAP1 PUSH1 0xD SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0xC0 DUP8 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFF SWAP1 PUSH1 0xE SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0xE0 DUP7 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFF SWAP1 PUSH1 0xF SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH2 0x100 DUP6 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFF SWAP1 PUSH1 0x10 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF SWAP1 PUSH1 0x11 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST DUP10 PUSH0 PUSH2 0x4747 JUMP JUMPDEST PUSH2 0x15BA DUP12 PUSH2 0x4B44 DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH32 0xFA93D81400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE CALLER PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST POP PUSH2 0x4B96 PUSH2 0x4B91 DUP7 MLOAD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x48FF JUMP JUMPDEST PUSH2 0x4BBC SWAP3 SWAP4 POP DUP1 RETURNDATASIZE LT PUSH2 0x4BC4 JUMPI JUMPDEST PUSH2 0x4BB4 DUP2 DUP4 PUSH2 0x77E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x42FF JUMP JUMPDEST SWAP1 PUSH0 DUP1 PUSH2 0x48F3 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x4BAA JUMP JUMPDEST PUSH2 0x15BA DUP11 PUSH2 0x4B44 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x4BF7 SWAP2 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x3988 JUMPI PUSH2 0x397A DUP2 DUP4 PUSH2 0x77E JUMP JUMPDEST PUSH0 PUSH2 0x4895 JUMP JUMPDEST SWAP1 POP DUP2 PUSH2 0x4C20 SWAP3 SWAP7 POP RETURNDATASIZE DUP8 GT PUSH2 0x4C29 JUMPI JUMPDEST PUSH2 0x4C18 DUP2 DUP4 PUSH2 0x77E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x421A JUMP JUMPDEST SWAP5 SWAP1 SWAP5 PUSH0 PUSH2 0x4605 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x4C0E JUMP JUMPDEST PUSH2 0x4C3B DUP2 DUP6 MLOAD PUSH2 0x25AF JUMP JUMPDEST MLOAD SWAP7 PUSH2 0x4C4E DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 DUP3 ISZERO DUP1 ISZERO PUSH2 0x4F32 JUMPI JUMPDEST PUSH2 0x4F0A JUMPI AND DUP1 DUP3 LT PUSH2 0x4EE2 JUMPI DUP2 EQ PUSH2 0x4EAD JUMPI PUSH1 0x40 SWAP1 DUP2 DUP11 ADD SWAP10 DUP11 MLOAD PUSH2 0x4C8F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO SWAP1 PUSH1 0x20 SWAP12 DUP13 DUP3 ADD SWAP1 DUP14 DUP3 MLOAD SWAP2 PUSH2 0x4CAE DUP4 PUSH2 0x3AA JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP4 PUSH1 0x60 ADD SWAP4 DUP5 MLOAD PUSH2 0x4CC8 SWAP1 ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x4CD1 PUSH2 0x7E9 JUMP JUMPDEST SWAP4 PUSH2 0x4CDC SWAP1 DUP6 PUSH2 0x25C8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP4 ADD MSTORE ISZERO ISZERO DUP2 DUP8 ADD MSTORE DUP7 PUSH2 0x4D0D DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x4D28 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x4D32 SWAP2 PUSH2 0x405A JUMP JUMPDEST DUP1 MLOAD PUSH2 0x4D3D DUP2 PUSH2 0x3AA JUMP JUMPDEST PUSH2 0x4D46 DUP2 PUSH2 0x3AA JUMP JUMPDEST PUSH2 0x4E5E JUMPI POP DUP2 ISZERO SWAP2 PUSH2 0x4E53 JUMPI JUMPDEST POP PUSH2 0x32D2 JUMPI DUP10 SWAP2 JUMPDEST MLOAD SWAP10 DUP11 DUP1 SWAP3 PUSH32 0x313CE56700000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 SWAP13 DUP14 SWAP2 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xACF JUMPI PUSH0 SWAP3 PUSH2 0x4E26 JUMPI JUMPDEST POP POP PUSH1 0x12 SWAP1 PUSH1 0xFF SWAP2 DUP1 DUP4 DUP4 AND GT PUSH0 EQ PUSH2 0x4DD2 JUMPI DUP11 PUSH32 0x686D360700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x1 SWAP5 SWAP6 SWAP7 SWAP8 SWAP9 SWAP10 SWAP11 POP SWAP1 PUSH2 0x4DF6 SWAP3 SWAP2 SUB AND PUSH2 0x4DEE DUP6 DUP9 PUSH2 0x25AF JUMP JUMPDEST SWAP1 PUSH1 0xFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x4E1A DUP2 PUSH2 0x4E15 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0x4106 JUMP JUMPDEST SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 ADD PUSH2 0x4526 JUMP JUMPDEST PUSH2 0x4E45 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x4E4C JUMPI JUMPDEST PUSH2 0x4E3D DUP2 DUP4 PUSH2 0x77E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x40ED JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x4D98 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x4E33 JUMP JUMPDEST MLOAD ISZERO ISZERO SWAP1 POP PUSH0 PUSH2 0x4D53 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP MLOAD PUSH2 0x4E6C DUP2 PUSH2 0x3AA JUMP JUMPDEST PUSH2 0x4E75 DUP2 PUSH2 0x3AA JUMP JUMPDEST SUB PUSH2 0x4E85 JUMPI PUSH2 0x32D2 JUMPI DUP10 SWAP2 PUSH2 0x4D5B JUMP JUMPDEST PUSH32 0xA1E9DD9D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x4F4B634E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x6E8F194700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0xC1AB6DC100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP DUP2 DUP10 AND DUP4 EQ PUSH2 0x4C64 JUMP JUMPDEST PUSH32 0x707BDF5800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x5ED4BA8F00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0xDB771C8000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH3 0xFFFFFF SWAP1 PUSH1 0x2A SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2326 JUMPI SWAP1 JUMP JUMPDEST PUSH3 0xFFFFFF SWAP1 PUSH1 0x42 SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2326 JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP2 DUP3 DUP2 SLOAD SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP3 PUSH1 0x20 DUP4 ADD SWAP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP4 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x503C JUMPI POP POP POP PUSH2 0x2DE SWAP3 POP SUB DUP4 PUSH2 0x77E JUMP JUMPDEST DUP6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 MSTORE PUSH1 0x1 SWAP6 DUP7 ADD SWAP6 DUP9 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x5026 JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x5089 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x5198 JUMPI PUSH32 0x0 SWAP2 PUSH2 0x50F9 DUP2 DUP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP1 JUMP JUMPDEST DUP3 DUP2 ADD SWAP3 DUP4 SLT PUSH0 DUP3 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x2326 JUMPI DUP3 PUSH2 0x514E JUMPI POP PUSH32 0x0 SWAP3 DUP4 TLOAD PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x2326 JUMPI PUSH2 0x2DE SWAP5 TSTORE PUSH2 0x5811 JUMP JUMPDEST ISZERO PUSH2 0x515D JUMPI JUMPDEST PUSH2 0x2DE SWAP3 PUSH2 0x5811 JUMP JUMPDEST PUSH32 0x0 SWAP3 DUP4 TLOAD PUSH1 0x1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x2326 JUMPI PUSH2 0x2DE SWAP5 TSTORE SWAP3 POP PUSH2 0x5154 JUMP JUMPDEST POP POP JUMP JUMPDEST SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 GT SWAP1 DUP2 ISZERO PUSH2 0x51F6 JUMPI JUMPDEST POP PUSH2 0x51CE JUMPI PUSH1 0x80 SHL SWAP1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x2326 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x89560CA100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP DUP2 GT PUSH0 PUSH2 0x51B9 JUMP JUMPDEST PUSH3 0xF4240 DUP2 LT PUSH2 0x520D JUMPI POP JUMP JUMPDEST PUSH32 0xD38D20FC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 PUSH1 0x80 PUSH8 0xDE0B6B3A7640000 PUSH2 0x527C PUSH2 0x25D1 SWAP5 DUP1 PUSH2 0x525B DUP7 PUSH1 0x60 DUP11 ADD MLOAD PUSH2 0x25AF JUMP JUMPDEST MSTORE PUSH2 0x3882 PUSH2 0x526D DUP7 PUSH1 0xC0 DUP11 ADD MLOAD PUSH2 0x25AF JUMP JUMPDEST MLOAD PUSH2 0x387B DUP8 PUSH1 0xA0 DUP12 ADD MLOAD PUSH2 0x25AF JUMP JUMPDEST DIV SWAP4 ADD MLOAD PUSH2 0x25AF JUMP JUMPDEST PUSH2 0x5291 PUSH2 0x2DE SWAP3 PUSH2 0x505F JUMP JUMPDEST SWAP1 PUSH2 0x50B4 JUMP JUMPDEST PUSH2 0x52B2 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 SLOAD PUSH3 0xF4240 SWAP1 DUP2 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x2326 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SSTORE PUSH2 0x52E9 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH0 DUP1 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 DUP2 SLOAD ADD SWAP1 SSTORE AND PUSH0 DUP1 DUP3 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F PUSH1 0x40 MLOAD DUP1 PUSH2 0x5333 DUP2 SWAP1 PUSH3 0xF4240 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB SWAP1 LOG4 DUP1 EXTCODESIZE ISZERO PUSH2 0x2CC JUMPI PUSH0 PUSH1 0x40 MLOAD DUP1 SWAP3 PUSH32 0x23DE665100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP4 DUP2 PUSH2 0x5389 PUSH1 0x4 DUP3 ADD SWAP1 PUSH3 0xF4240 PUSH1 0x40 PUSH1 0x60 DUP5 ADD SWAP4 PUSH0 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0xACF JUMPI PUSH2 0x539A JUMPI POP JUMP JUMPDEST DUP1 PUSH2 0x3718 PUSH2 0x2DE SWAP3 PUSH2 0x76A JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP4 DUP5 ISZERO PUSH2 0x54C0 JUMPI PUSH2 0x53DF DUP4 PUSH2 0x53D9 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x3575 JUMP JUMPDEST PUSH2 0x53FE DUP6 PUSH2 0x3342 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP5 DUP2 SLOAD ADD SWAP1 SSTORE PUSH2 0x540D DUP2 PUSH2 0x5200 JUMP JUMPDEST PUSH2 0x5428 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP3 PUSH0 DUP5 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F PUSH1 0x40 MLOAD DUP1 PUSH2 0x5461 DUP8 DUP3 SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB SWAP1 LOG4 DUP3 EXTCODESIZE ISZERO PUSH2 0x2CC JUMPI PUSH1 0x40 MLOAD PUSH32 0x23DE665100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 DUP3 SWAP1 DUP2 DUP4 DUP2 PUSH1 0x64 DUP2 ADD PUSH2 0x5389 JUMP JUMPDEST PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 SWAP2 SWAP1 DUP3 JUMPDEST DUP2 MLOAD DUP5 LT ISZERO PUSH2 0x55B9 JUMPI PUSH2 0x550D DUP5 DUP4 PUSH2 0x25AF JUMP JUMPDEST MLOAD PUSH1 0xFF SWAP2 PUSH2 0x551A DUP7 PUSH2 0x2F29 JUMP JUMPDEST SWAP2 PUSH2 0x100 DUP1 DUP5 LT ISZERO PUSH2 0x558C JUMPI DUP4 DUP2 SUB SWAP1 DUP2 GT PUSH2 0x2326 JUMPI DUP1 DUP6 LT ISZERO PUSH2 0x55B4 JUMPI POP DUP4 JUMPDEST PUSH1 0x5 SWAP1 DUP2 GT PUSH2 0x558C JUMPI DUP2 PUSH1 0x7 SWAP2 SHR AND PUSH2 0x5564 JUMPI PUSH1 0x1 SWAP4 PUSH1 0x1F SWAP2 AND DUP4 SHL SWAP3 SHL NOT AND OR SWAP4 ADD SWAP3 PUSH2 0x54FA JUMP JUMPDEST PUSH32 0xE4337C0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0xB4120F1400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x553B JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND SWAP3 POP POP JUMP JUMPDEST PUSH8 0xDE0B5CAD2BEF000 DUP3 GT PUSH2 0x23D5 JUMPI PUSH5 0x174876E800 PUSH2 0x310 SWAP3 DIV SWAP1 PUSH2 0x5827 JUMP JUMPDEST SWAP1 PUSH8 0xDE0B5CAD2BEF000 DUP2 GT PUSH2 0x23D5 JUMPI PUSH2 0x310 SWAP2 PUSH5 0x174876E800 PUSH1 0x42 SWAP3 DIV SWAP1 PUSH2 0x5841 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP2 PUSH1 0x40 MLOAD PUSH32 0xCE20ECE700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 PUSH1 0x4 DUP2 DUP9 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xACF JUMPI PUSH0 SWAP2 PUSH2 0x5786 JUMPI JUMPDEST POP DUP4 LT PUSH2 0x575E JUMPI PUSH1 0x40 MLOAD PUSH32 0x654CF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP2 PUSH1 0x4 DUP2 DUP9 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xACF JUMPI PUSH0 SWAP3 PUSH2 0x5741 JUMPI JUMPDEST POP POP DUP3 GT PUSH2 0x5719 JUMPI DUP2 DUP2 PUSH2 0x5703 PUSH2 0x56EC PUSH32 0x89D41522342FABAC1471CA6073A5623E5CAF367B03CA6E9A001478D0CF8BE4A1 SWAP6 PUSH2 0x56E6 PUSH2 0x5714 SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x5888 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 JUMP JUMPDEST PUSH32 0x7F47834B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x5757 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0xAC8 JUMPI PUSH2 0xAB9 DUP2 DUP4 PUSH2 0x77E JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x5697 JUMP JUMPDEST PUSH32 0xBFB2068800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x579D SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0xAC8 JUMPI PUSH2 0xAB9 DUP2 DUP4 PUSH2 0x77E JUMP JUMPDEST PUSH0 PUSH2 0x5654 JUMP JUMPDEST SWAP1 SWAP4 SWAP3 PUSH0 SWAP5 PUSH2 0x57B6 DUP5 PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x25AF JUMP JUMPDEST MLOAD DUP2 DUP2 GT PUSH2 0x57C6 JUMPI JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x5806 SWAP6 SWAP7 POP PUSH2 0x5800 SWAP4 SWAP3 PUSH2 0x57F9 SWAP3 PUSH2 0x57DF SWAP3 SUB PUSH2 0x3476 JUMP JUMPDEST SWAP4 PUSH1 0xA0 PUSH2 0x57F0 DUP3 PUSH1 0xC0 DUP7 ADD MLOAD PUSH2 0x25AF JUMP JUMPDEST MLOAD SWAP4 ADD MLOAD PUSH2 0x25AF JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x2F3F JUMP JUMPDEST SWAP1 PUSH2 0x3088 JUMP JUMPDEST SWAP1 PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x57BF JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TSTORE JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x18 SHR PUSH2 0x5564 JUMPI PUSH1 0x2A SHL SWAP1 PUSH3 0xFFFFFF PUSH1 0x2A SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x100 DUP1 DUP5 LT ISZERO PUSH2 0x558C JUMPI DUP4 DUP2 SUB SWAP1 DUP2 GT PUSH2 0x2326 JUMPI DUP1 PUSH1 0xFF LT PUSH0 EQ PUSH2 0x5883 JUMPI POP PUSH1 0xFF JUMPDEST PUSH1 0x18 GT PUSH2 0x558C JUMPI DUP1 PUSH1 0x18 SHR PUSH2 0x5564 JUMPI PUSH3 0xFFFFFF SWAP1 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST PUSH2 0x5865 JUMP JUMPDEST SWAP1 PUSH8 0xDE0B5CAD2BEF000 DUP2 GT PUSH2 0x23D5 JUMPI PUSH5 0x174876E800 SWAP1 DIV DUP1 PUSH1 0x18 SHR PUSH2 0x5564 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC000003FFFF SWAP1 PUSH1 0x12 SHL SWAP2 AND OR SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC9 MSTORE MCOPY 0xB5 DELEGATECALL GT PUSH21 0xF1907706A8CEFAA7D6ED21051F4BE2EA1862DD8DEA 0x2F MSTORE8 DUP10 0xF8 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"3171:37276:71:-:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;3171:37276:71;;;;;;;;;;;;;3400:40:73;3171:37276:71;;;;;:::i;:::-;;;;-1:-1:-1;;;3171:37276:71;;;;3400:40:73;:::i;:::-;;;3501:47;3171:37276:71;;;;;:::i;:::-;;;;-1:-1:-1;;;3171:37276:71;;;;3501:47:73;:::i;:::-;;;3601:41;3171:37276:71;;;;;:::i;:::-;;;;-1:-1:-1;;;3171:37276:71;;;;3601:41:73;:::i;:::-;;;;;;3703:48;3171:37276:71;;;;;:::i;:::-;;;;-1:-1:-1;;;3171:37276:71;;;;3703:48:73;:::i;:::-;;;;;;3802:39;3171:37276:71;;;;;:::i;:::-;;;;-1:-1:-1;;;3171:37276:71;;;;3802:39:73;:::i;:::-;;;;;3171:37276:71;;-1:-1:-1;;;4174:18:71;;3802:39:73;;4174:18:71;3171:37276;4174:18;3171:37276;4174:18;;;;;;;;-1:-1:-1;4174:18:71;;;-1:-1:-1;3171:37276:71;;;;;;4174:31;4170:96;;3171:37276;;-1:-1:-1;;;4303:34:71;;3171:37276;4303:34;3171:37276;4174:18;3171:37276;4303:34;;;;;;;;-1:-1:-1;4303:34:71;;;-1:-1:-1;;4276:61:71;;;;3171:37276;;-1:-1:-1;;;4376:36:71;;3171:37276;4376:36;3171:37276;4174:18;3171:37276;;4376:36;;;;;;;-1:-1:-1;4376:36:71;;;-1:-1:-1;4347:65:71;;4174:18;4347:65;;;;;3171:37276;;;;;;;;;4450:35;;;;;;;;;-1:-1:-1;4450:35:71;;;-1:-1:-1;4422:63:71;;;;;;4496:18;;;;4524:24;;;;3171:37276;;;;;;;;;;;;;;;;;;3400:40:73;3171:37276:71;;;;;;;;;;;;;;;3501:47:73;3171:37276:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4450:35;;;;;;;-1:-1:-1;4450:35:71;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;3171:37276;;;-1:-1:-1;3171:37276:71;;;;;4376:36;4174:18;4376:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;4303:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;3171:37276;;;-1:-1:-1;3171:37276:71;;;;;4170:96;4228:27;;;-1:-1:-1;4228:27:71;4174:18;-1:-1:-1;4228:27:71;4174:18;;;;;;;;;;;;;;;;;:::i;:::-;;;3171:37276;;;;;;;:::i;:::-;4174:18;;;;3171:37276;-1:-1:-1;3171:37276:71;;4174:18;;;;;;3171:37276;;;-1:-1:-1;3171:37276:71;;;;;;;;;;;;-1:-1:-1;;;;;3171:37276:71;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;3171:37276:71;;;;-1:-1:-1;;;;;3171:37276:71;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;3171:37276:71;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;9892:177:73:-;3171:37276:71;;;;;;:::i;:::-;;;;1461:67:47;3171:37276:71;;;;-1:-1:-1;;;3171:37276:71;;;;;1461:67:47;;;;;;3171:37276:71;;;;;;;;;;;;;;-1:-1:-1;;;3171:37276:71;;;;;;;;;;;;;;;-1:-1:-1;3171:37276:71;;;;1461:67:47;;;;;;;;;:::i;:::-;3171:37276:71;1451:78:47;;-1:-1:-1;;3171:37276:71;;;;;;;;;1432:103:47;3171:37276:71;1432:103:47;;3171:37276:71;;;;1432:103:47;;;;;:::i;:::-;3171:37276:71;;1405:144:47;;-1:-1:-1;;1405:170:47;;9892:177:73:o;3171:37276:71:-;;;;-1:-1:-1;3171:37276:71;;;;;-1:-1:-1;3171:37276:71"},"deployedBytecode":{"functionDebugData":{"abi_decode":{"entryPoint":1384,"id":null,"parameterSlots":2,"returnSlots":0},"abi_decode_address":{"entryPoint":736,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_address_34053":{"entryPoint":720,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_addresst_contract_IERC20":{"entryPoint":747,"id":null,"parameterSlots":1,"returnSlots":2},"abi_decode_array_uint256_dyn":{"entryPoint":2083,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_available_length_bytes":{"entryPoint":2207,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_bool":{"entryPoint":7921,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":14500,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_boolt_uint256_fromMemory":{"entryPoint":12160,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bytes":{"entryPoint":2261,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bytes_calldata":{"entryPoint":3615,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bytes_calldata_34027":{"entryPoint":3661,"id":null,"parameterSlots":1,"returnSlots":2},"abi_decode_enum_SwapKind":{"entryPoint":2048,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_struct_HookFlags_fromMemory":{"entryPoint":17151,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_LiquidityManagement":{"entryPoint":10682,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_LiquidityManagement_calldata":{"entryPoint":8000,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_struct_PoolRoleAccounts_calldata":{"entryPoint":7953,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_t_bool_fromMemory":{"entryPoint":12149,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint256_fromMemory":{"entryPoint":9303,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint256t_uint256_fromMemory":{"entryPoint":16922,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_uint32":{"entryPoint":7934,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_uint8_fromMemory":{"entryPoint":16621,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encodeUpdatedPos_contract_IERC20":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encodeUpdatedPos_struct_TokenInfo":{"entryPoint":993,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_address_address_address":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_address_address_array_struct_TokenConfig_dyn_struct_LiquidityManagement":{"entryPoint":17055,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_address_address_bool":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_address_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_address_address_uint256_34246":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_address_address_uint256_34290":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address_address_uint256_34296":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_array_contract_IERC20_dyn":{"entryPoint":6869,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_contract_IERC20_dyn_array_struct_TokenInfo_dyn_array_uint256_dyn_array_uint256_dyn":{"entryPoint":3008,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_array_contract_IERC20_dyn_memory_ptr":{"entryPoint":878,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_contract_IERC20_dyn_to_array_address_dyn":{"entryPoint":2948,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_struct_TokenConfig_dyn":{"entryPoint":16944,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_struct_TokenConfig_dyn_uint256_uint32_struct_PoolRoleAccounts_struct_HooksConfig_struct_LiquidityManagement":{"entryPoint":17341,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_array_struct_TokenInfo_dyn":{"entryPoint":1044,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":2855,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn_array_uint256_dyn":{"entryPoint":4013,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_array_uint256_dyn_enum_Rounding":{"entryPoint":9318,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn_to_array_uint256_dyn":{"entryPoint":1104,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bool":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_bytes":{"entryPoint":7801,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bytes_memory_ptr":{"entryPoint":7764,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_contract_IERC20_uint256_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_struct_HooksConfig":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_struct_LiquidityManagement":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_struct_PoolConfig":{"entryPoint":8341,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_PoolRoleAccounts":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_struct_PoolRoleAccounts_memory_ptr":{"entryPoint":7579,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_PoolSwapParams_address_uint256":{"entryPoint":12191,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_uint256":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_uint256_34289":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_uint256_array_uint256_dyn_array_uint256_dyn":{"entryPoint":9919,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_uint256_uint256":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_uint32":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_uint40":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"allocate_and_zero_memory_array_array_struct_TokenInfo_dyn":{"entryPoint":9475,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_and_zero_memory_array_array_uint256_dyn":{"entryPoint":9553,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_and_zero_memory_struct_struct_HooksConfig":{"entryPoint":10385,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_and_zero_memory_struct_struct_PoolData":{"entryPoint":8874,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_and_zero_memory_struct_struct_RecoveryLocals":{"entryPoint":9794,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_and_zero_memory_struct_struct_TokenInfo":{"entryPoint":9445,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory":{"entryPoint":1953,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_34199":{"entryPoint":1966,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_34200":{"entryPoint":1979,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_34258":{"entryPoint":1992,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_34268":{"entryPoint":2025,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_array_uint256_dyn":{"entryPoint":2059,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":2179,"id":null,"parameterSlots":1,"returnSlots":1},"array_push_from_contract_IERC20_to_array_contract_IERC20_dyn_storage_ptr":{"entryPoint":16646,"id":null,"parameterSlots":2,"returnSlots":0},"checked_add_uint256":{"entryPoint":13685,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_uint32":{"entryPoint":8974,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_uint8":{"entryPoint":12055,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_uint8_129758":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_uint8_129759":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_uint8_129760":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_uint8_129761":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_uint8_129762":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_uint8_129763":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"checked_div_uint256":{"entryPoint":12369,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256":{"entryPoint":12095,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256_34237":{"entryPoint":12073,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_uint256":{"entryPoint":9906,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_uint256_34254":{"entryPoint":9861,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_bool":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_uint32":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"constant_AGGREGATE_YIELD_FEE_OFFSET":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"constant_DECIMAL_SCALING_FACTORS_OFFSET":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"constant_PAUSE_WINDOW_END_TIME_OFFSET":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"copy_array_from_storage_to_memory_array_contract_IERC20_dyn":{"entryPoint":9358,"id":null,"parameterSlots":1,"returnSlots":1},"copy_array_from_storage_to_memory_array_contract_IERC20_dyn_ptr":{"entryPoint":20488,"id":null,"parameterSlots":1,"returnSlots":1},"copy_struct_to_storage_from_struct_PoolRoleAccounts_to_struct_PoolRoleAccounts":{"entryPoint":16738,"id":null,"parameterSlots":2,"returnSlots":0},"copy_struct_to_storage_from_struct_TokenInfo_to_struct_TokenInfo":{"entryPoint":16474,"id":null,"parameterSlots":2,"returnSlots":0},"external_fun_allowance":{"entryPoint":4560,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_approve":{"entryPoint":7438,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_balanceOf":{"entryPoint":8702,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_computeDynamicSwapFeePercentage":{"entryPoint":2288,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_emitAuxiliaryEvent":{"entryPoint":6718,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getAddLiquidityCalledFlag":{"entryPoint":6066,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getAggregateSwapFeeAmount":{"entryPoint":4408,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getAggregateYieldFeeAmount":{"entryPoint":787,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getAuthorizer":{"entryPoint":6017,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getBptRate":{"entryPoint":2514,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getCurrentLiveBalances":{"entryPoint":2872,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getERC4626BufferAsset":{"entryPoint":1665,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getHooksConfig":{"entryPoint":7060,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getNonzeroDeltaCount":{"entryPoint":7370,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getPoolConfig":{"entryPoint":8548,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getPoolData":{"entryPoint":1155,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getPoolPausedState":{"entryPoint":1436,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getPoolRoleAccounts":{"entryPoint":7630,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getPoolTokenInfo":{"entryPoint":3134,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getPoolTokenRates":{"entryPoint":4050,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getPoolTokens":{"entryPoint":6886,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getProtocolFeeController":{"entryPoint":4514,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getReservesOf":{"entryPoint":4640,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getStaticSwapFeePercentage":{"entryPoint":6209,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getTokenDelta":{"entryPoint":4708,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getVaultAdmin":{"entryPoint":1598,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_initialize":{"entryPoint":6327,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_isERC4626BufferInitialized":{"entryPoint":3476,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_isPoolInRecoveryMode":{"entryPoint":6562,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_isPoolInitialized":{"entryPoint":2772,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_isPoolPaused":{"entryPoint":3548,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_isPoolRegistered":{"entryPoint":6646,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_isQueryDisabled":{"entryPoint":6285,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_isQueryDisabledPermanently":{"entryPoint":1394,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_isUnlocked":{"entryPoint":4338,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_quote":{"entryPoint":7818,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_quoteAndRevert":{"entryPoint":3708,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_reentrancyGuardEntered":{"entryPoint":7308,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_registerPool":{"entryPoint":8048,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_removeLiquidityRecovery":{"entryPoint":4806,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_totalSupply":{"entryPoint":7511,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_vault":{"entryPoint":8807,"id":null,"parameterSlots":0,"returnSlots":0},"extract_returndata":{"entryPoint":9747,"id":null,"parameterSlots":0,"returnSlots":1},"finalize_allocation":{"entryPoint":1918,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_34042":{"entryPoint":1780,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_34048":{"entryPoint":1813,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_34055":{"entryPoint":1841,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_34057":{"entryPoint":1870,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_34247":{"entryPoint":1898,"id":null,"parameterSlots":1,"returnSlots":0},"fun":{"entryPoint":11056,"id":28081,"parameterSlots":0,"returnSlots":0},"fun_28099":{"entryPoint":11096,"id":28099,"parameterSlots":0,"returnSlots":0},"fun_accountDelta":{"entryPoint":20660,"id":24964,"parameterSlots":2,"returnSlots":0},"fun_allowance":{"entryPoint":13050,"id":38954,"parameterSlots":3,"returnSlots":1},"fun_approve":{"entryPoint":16062,"id":39378,"parameterSlots":4,"returnSlots":0},"fun_bubbleUpRevert":{"entryPoint":12593,"id":6433,"parameterSlots":1,"returnSlots":0},"fun_burn":{"entryPoint":13765,"id":39222,"parameterSlots":3,"returnSlots":0},"fun_callAfterInitializeHook":{"entryPoint":15540,"id":29473,"parameterSlots":4,"returnSlots":0},"fun_callBeforeInitializeHook":{"entryPoint":14521,"id":29443,"parameterSlots":3,"returnSlots":0},"fun_computeProportionalAmountsOut":{"entryPoint":13351,"id":11473,"parameterSlots":3,"returnSlots":1},"fun_computeYieldFeesDue":{"entryPoint":22435,"id":31030,"parameterSlots":4,"returnSlots":1},"fun_copyToScaled18ApplyRateRoundDownArray":{"entryPoint":14355,"id":6684,"parameterSlots":3,"returnSlots":1},"fun_divDown":{"entryPoint":12424,"id":7990,"parameterSlots":2,"returnSlots":1},"fun_ensureInitializedPool":{"entryPoint":11335,"id":25183,"parameterSlots":1,"returnSlots":0},"fun_ensureInputLengthMatch":{"entryPoint":14308,"id":5926,"parameterSlots":2,"returnSlots":0},"fun_ensurePoolMinimumTotalSupply":{"entryPoint":20992,"id":39074,"parameterSlots":1,"returnSlots":0},"fun_ensureRegisteredPool":{"entryPoint":11260,"id":25147,"parameterSlots":1,"returnSlots":0},"fun_ensureUnlocked":{"entryPoint":13148,"id":24863,"parameterSlots":0,"returnSlots":0},"fun_ensureUnpaused":{"entryPoint":14230,"id":24998,"parameterSlots":1,"returnSlots":0},"fun_ensureVaultDelegateCall":{"entryPoint":11170,"id":25740,"parameterSlots":0,"returnSlots":0},"fun_ensureVaultNotPaused":{"entryPoint":16366,"id":24984,"parameterSlots":0,"returnSlots":0},"fun_getAggregateSwapFeePercentage":{"entryPoint":20418,"id":30122,"parameterSlots":1,"returnSlots":1},"fun_getAggregateYieldFeePercentage":{"entryPoint":20453,"id":30183,"parameterSlots":1,"returnSlots":1},"fun_getBalanceRaw":{"entryPoint":null,"id":6222,"parameterSlots":1,"returnSlots":1},"fun_getDecimalScalingFactors":{"entryPoint":12748,"id":30315,"parameterSlots":2,"returnSlots":1},"fun_getPoolPausedState":{"entryPoint":11947,"id":25088,"parameterSlots":1,"returnSlots":2},"fun_getStaticSwapFeePercentage":{"entryPoint":12114,"id":30061,"parameterSlots":1,"returnSlots":1},"fun_getTokenRate":{"entryPoint":12830,"id":30916,"parameterSlots":1,"returnSlots":1},"fun_initialize":{"entryPoint":14844,"id":26810,"parameterSlots":7,"returnSlots":1},"fun_insertBool":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_101845":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_101846":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_108948":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_108949":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_115968":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_115969":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_72426":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_79933":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_79934":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_87356":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_87357":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_94654":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertUint":{"entryPoint":22593,"id":7523,"parameterSlots":3,"returnSlots":1},"fun_insertUint_129764":{"entryPoint":22567,"id":7523,"parameterSlots":2,"returnSlots":1},"fun_isPoolInRecoveryMode":{"entryPoint":null,"id":29766,"parameterSlots":1,"returnSlots":1},"fun_isPoolInitialized":{"entryPoint":null,"id":29680,"parameterSlots":1,"returnSlots":1},"fun_isPoolRegistered":{"entryPoint":null,"id":29637,"parameterSlots":1,"returnSlots":1},"fun_isQueryContext":{"entryPoint":13664,"id":25605,"parameterSlots":0,"returnSlots":1},"fun_loadPoolData":{"entryPoint":11412,"id":25336,"parameterSlots":1,"returnSlots":1},"fun_mint":{"entryPoint":21415,"id":39059,"parameterSlots":3,"returnSlots":0},"fun_mintMinimumSupplyReserve":{"entryPoint":21143,"id":39126,"parameterSlots":1,"returnSlots":0},"fun_mulUp":{"entryPoint":13430,"id":7970,"parameterSlots":2,"returnSlots":1},"fun_nonReentrantAfter":{"entryPoint":13314,"id":9928,"parameterSlots":0,"returnSlots":0},"fun_nonReentrantBefore":{"entryPoint":13229,"id":9916,"parameterSlots":0,"returnSlots":0},"fun_queryModeBalanceIncrease":{"entryPoint":13698,"id":38988,"parameterSlots":3,"returnSlots":0},"fun_registerPool":{"entryPoint":17626,"id":26463,"parameterSlots":2,"returnSlots":0},"fun_reloadBalancesAndRates":{"entryPoint":14735,"id":30871,"parameterSlots":2,"returnSlots":0},"fun_setAggregateSwapFeePercentage":{"entryPoint":21957,"id":30162,"parameterSlots":2,"returnSlots":1},"fun_setAggregateYieldFeePercentage":{"entryPoint":21989,"id":30223,"parameterSlots":2,"returnSlots":1},"fun_setBalanceRaw":{"entryPoint":13526,"id":6257,"parameterSlots":2,"returnSlots":1},"fun_setDisableUnbalancedLiquidity":{"entryPoint":null,"id":29854,"parameterSlots":1,"returnSlots":1},"fun_setPauseWindowEndTime":{"entryPoint":null,"id":30392,"parameterSlots":2,"returnSlots":1},"fun_setPoolInitialized":{"entryPoint":null,"id":29705,"parameterSlots":1,"returnSlots":1},"fun_setStaticSwapFeePercentage":{"entryPoint":22025,"id":25506,"parameterSlots":2,"returnSlots":0},"fun_setStaticSwapFeePercentage_30101":{"entryPoint":22664,"id":30101,"parameterSlots":2,"returnSlots":1},"fun_setTokenDecimalDiffs":{"entryPoint":null,"id":30342,"parameterSlots":2,"returnSlots":1},"fun_setupQuery":{"entryPoint":12460,"id":27919,"parameterSlots":0,"returnSlots":0},"fun_shouldCallAfterInitialize":{"entryPoint":null,"id":28507,"parameterSlots":1,"returnSlots":1},"fun_shouldCallBeforeInitialize":{"entryPoint":null,"id":28464,"parameterSlots":1,"returnSlots":1},"fun_spendAllowance":{"entryPoint":13540,"id":39428,"parameterSlots":4,"returnSlots":0},"fun_supplyCredit":{"entryPoint":13464,"id":24891,"parameterSlots":2,"returnSlots":0},"fun_tGet":{"entryPoint":null,"id":6938,"parameterSlots":2,"returnSlots":1},"fun_tGet_7043":{"entryPoint":null,"id":7043,"parameterSlots":3,"returnSlots":1},"fun_tSet":{"entryPoint":22545,"id":6967,"parameterSlots":3,"returnSlots":0},"fun_takeDebt":{"entryPoint":21125,"id":24908,"parameterSlots":2,"returnSlots":0},"fun_toHooksConfig":{"entryPoint":15744,"id":28883,"parameterSlots":2,"returnSlots":1},"fun_toInt256":{"entryPoint":20575,"id":44982,"parameterSlots":1,"returnSlots":1},"fun_toPackedBalance":{"entryPoint":20892,"id":6303,"parameterSlots":2,"returnSlots":1},"fun_toTokenDecimalDiffs":{"entryPoint":21749,"id":30440,"parameterSlots":1,"returnSlots":1},"fun_updateRawAndLiveBalance":{"entryPoint":21048,"id":30978,"parameterSlots":3,"returnSlots":0},"fun_verifyCallResultFromTarget":{"entryPoint":12608,"id":40673,"parameterSlots":3,"returnSlots":1},"mapping_index_access_mapping_address_mapping_contract_IERC20_bytes32_of_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"mapping_index_access_mapping_address_mapping_contract_IERC20_bytes32_of_address_34023":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_address_mapping_contract_IERC20_bytes32_of_address_34025":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_address_mapping_contract_IERC20_bytes32_of_address_34026":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_address_mapping_contract_IERC20_bytes32_of_address_34031":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_address_mapping_contract_IERC20_bytes32_of_address_34034":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_address_mapping_contract_IERC20_bytes32_of_address_34147":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_address_mapping_contract_IERC20_bytes32_of_address_34241":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_address_mapping_contract_IERC20_bytes32_of_address_34261":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_address_mapping_contract_IERC20_bytes32_of_address_34273":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_uint256_bytes32_of_uint256":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"memory_array_index_access_contract_IERC20_dyn":{"entryPoint":9647,"id":null,"parameterSlots":2,"returnSlots":1},"modifier_onlyVaultDelegateCall":{"entryPoint":10484,"id":25731,"parameterSlots":8,"returnSlots":0},"modifier_onlyVaultDelegateCall_27100":{"entryPoint":10778,"id":25731,"parameterSlots":1,"returnSlots":1},"modifier_onlyVaultDelegateCall_34020":{"entryPoint":9003,"id":25731,"parameterSlots":2,"returnSlots":1},"modifier_onlyVaultDelegateCall_34040":{"entryPoint":9962,"id":25731,"parameterSlots":6,"returnSlots":1},"panic_error_0x11":{"entryPoint":8929,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":9602,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":1735,"id":null,"parameterSlots":0,"returnSlots":0},"read_from_memoryt_bool":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"read_from_memoryt_contract_IERC20":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"read_from_storage_reference_type_struct_TokenInfo":{"entryPoint":9684,"id":null,"parameterSlots":1,"returnSlots":1},"read_from_storage_split_offset_contract_IHooks":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"revert_forward":{"entryPoint":9347,"id":null,"parameterSlots":0,"returnSlots":0},"update_storage_value_offsett_address_to_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"validator_assert_enum_TokenType":{"entryPoint":938,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_address":{"entryPoint":699,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_bool":{"entryPoint":7911,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_enum_SwapKind":{"entryPoint":2038,"id":null,"parameterSlots":1,"returnSlots":0},"write_to_memory_bool":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"write_to_memory_contract_IRateProvider":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"write_to_memory_enum_TokenType":{"entryPoint":9672,"id":null,"parameterSlots":2,"returnSlots":0},"write_to_memory_uint32":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"write_to_memory_uint40":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"write_to_memory_uint8":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"25720":[{"length":32,"start":8838},{"length":32,"start":11180}],"25723":[{"length":32,"start":1629},{"length":32,"start":11119}],"28201":[{"length":32,"start":4366},{"length":32,"start":12479},{"length":32,"start":13150}],"28206":[{"length":32,"start":7398},{"length":32,"start":20759},{"length":32,"start":20831}],"28211":[{"length":32,"start":4752},{"length":32,"start":20669}],"28216":[{"length":32,"start":5238},{"length":32,"start":6144}],"28221":[{"length":32,"start":5204},{"length":32,"start":6110}],"28267":[{"length":32,"start":16373}],"28269":[{"length":32,"start":1501},{"length":32,"start":12010}]},"linkReferences":{},"object":"60806040526004361015610018575b36612b5857612b30565b5f3560e01c8062fdfa13146102b657806313d21cdf146102b157806313ef8a5d146102ac57806315e32046146102a75780631ba0ae45146102a25780634afbaf5a1461029d5780634d472bdd146102985780634f037ee714610293578063532cec7c1461028e578063535cfd8a1461028957806367e0e076146102845780636844846b1461027f5780636c9bc7321461027a578063757d64b3146102755780637e361bde146102705780638380edb71461026b57806385e0b9991461026657806385f2dbd414610261578063927da1051461025c57806396787092146102575780639e825ff514610252578063a07d60401461024d578063aaabadc514610248578063ace9b89b14610243578063b45090f91461023e578063b4aef0ab14610239578063ba8a2be014610234578063be7d628a1461022f578063c673bdaf1461022a578063c808824714610225578063ca4f280314610220578063ce8630d41461021b578063d2c725e014610216578063db81718714610211578063e1f21c671461020c578063e4dc2aa414610207578063e9ddeb2614610202578063edfa3568146101fd578063eeec802f146101f8578063f29486a1146101f3578063f7888aec146101ee5763fbfa77cf0361000e57612267565b6121fe565b612164565b611f70565b611e8a565b611dce565b611d57565b611d0e565b611cca565b611c8c565b611b94565b611ae6565b611a3e565b6119f6565b6119a2565b6118b7565b61188d565b611841565b6117b2565b611781565b6112c6565b611264565b611220565b6111d0565b6111a2565b611138565b6110f2565b610fd2565b610e7c565b610ddc565b610d94565b610c3e565b610b38565b610ad4565b6109d2565b6108f0565b610681565b61063e565b61059c565b610572565b610483565b610313565b6001600160a01b038116036102cc57565b5f80fd5b61010435906102de826102bb565b565b35906102de826102bb565b60031960409101126102cc57600435610303816102bb565b90602435610310816102bb565b90565b346102cc5760206103626001600160a01b0361032e366102eb565b9190610338612ba2565b61034181612bfc565b165f526006835260405f20906001600160a01b03165f5260205260405f2090565b5460801c604051908152f35b9081518082526020808093019301915f5b82811061038d575050505090565b83516001600160a01b03168552938101939281019260010161037f565b600211156103b457565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b90604060609280516103f2816103aa565b83526001600160a01b0360208201511660208401520151151560408201520190565b9081518082526020808093019301915f5b828110610433575050505090565b909192938261044560019287516103e1565b950193929101610425565b9081518082526020808093019301915f5b82811061046f575050505090565b835185529381019392810192600101610461565b346102cc5760206003193601126102cc576105646104c56004356104a6816102bb565b6104ae6122aa565b506104b7612ba2565b6104c081612c47565b612c94565b60405191829160208352805160208401526104f0602082015160e0604086015261010085019061036e565b60c061055261053f61052b610517604087015195601f1996878b83030160608c0152610414565b6060870151868a83030160808b0152610450565b6080860151858983030160a08a0152610450565b60a0850151848883030184890152610450565b920151908483030160e0850152610450565b0390f35b5f9103126102cc57565b346102cc575f6003193601126102cc5761058a612ba2565b602060ff600954166040519015158152f35b346102cc5760206003193601126102cc5760806004356105bb816102bb565b6105c3612ba2565b6105cc81612bfc565b6105d581612eab565b6106029291927f00000000000000000000000000000000000000000000000000000000000000008261230e565b916001600160a01b038091165f52600160205260405f20541691604051931515845263ffffffff80921660208501521660408301526060820152f35b346102cc575f6003193601126102cc5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102cc5760206003193601126102cc5760206004356106a0816102bb565b6106a8612ba2565b6001600160a01b038091165f52600e825260405f205416604051908152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6060810190811067ffffffffffffffff82111761071057604052565b6106c7565b6080810190811067ffffffffffffffff82111761071057604052565b610140810190811067ffffffffffffffff82111761071057604052565b60e0810190811067ffffffffffffffff82111761071057604052565b67ffffffffffffffff811161071057604052565b90601f601f19910116810190811067ffffffffffffffff82111761071057604052565b604051906102de8261074e565b604051906102de82610715565b604051906102de82610731565b60405190610160820182811067ffffffffffffffff82111761071057604052565b604051906102de826106f4565b600211156102cc57565b35906102de826107f6565b67ffffffffffffffff81116107105760051b60200190565b9080601f830112156102cc57602090823561083d8161080b565b9361084b604051958661077e565b81855260208086019260051b8201019283116102cc57602001905b828210610874575050505090565b81358152908301908301610866565b67ffffffffffffffff811161071057601f01601f191660200190565b9291926108ab82610883565b916108b9604051938461077e565b8294818452818301116102cc578281602093845f960137010152565b9080601f830112156102cc578160206103109335910161089f565b346102cc576003196040813601126102cc5760043561090e816102bb565b6024359067ffffffffffffffff928383116102cc5760e09083360301126102cc576109376107a1565b9061094483600401610800565b82526024830135602083015260448301358481116102cc5761096c9060043691860101610823565b6040830152606483013560608301526084830135608083015261099160a484016102e0565b60a083015260c48301359384116102cc576109b86109c293600461056496369201016108d5565b60c083015261232b565b6040519081529081906020820190565b346102cc5760206003193601126102cc576004356109ef816102bb565b6109f7612ba2565b610a0081612c47565b610a4d60206080610a1084612c94565b0151604051809381927f984de9e8000000000000000000000000000000000000000000000000000000008352604060048401526044830190610450565b6001602483015203816001600160a01b0386165afa8015610acf57610564926109c2925f92610a9a575b50610a93906001600160a01b03165f52601160205260405f2090565b5490613088565b610a93919250610ac19060203d602011610ac8575b610ab9818361077e565b810190612457565b9190610a77565b503d610aaf565b612483565b346102cc5760206003193601126102cc576001600160a01b03600435610af9816102bb565b610b01612ba2565b610b0a81612bfc565b165f525f6020526020600160405f2054811c166040519015158152f35b906020610310928181520190610450565b346102cc5760206003193601126102cc576105646080610b6e600435610b5d816102bb565b610b65612ba2565b6104c081612bfc565b0151604051918291602083526020830190610450565b9081518082526020808093019301915f5b828110610ba3575050505090565b83516001600160a01b031685529381019392810192600101610b95565b9290610bd89095949295608085526080850190610b84565b6020908481036020860152602080885192838152019701915f5b828110610c21575050505084610c1391846103109697036040860152610450565b916060818403910152610450565b9091929782610c336001928b516103e1565b990193929101610bf2565b346102cc5760206003193601126102cc57600435610c5b816102bb565b610c63612ba2565b610c6c81612bfc565b6001600160a01b0381165f52600560205260405f20610ca4610c9f836001600160a01b03165f52600360205260405f2090565b61248e565b90815192610cb184612503565b93610cbb81612551565b91610cc582612551565b935f5b838110610ce0576040518061056488888c8c85610bc0565b80610cf560019284905f5260205260405f2090565b54610d4c610d478a610d32610d2586610d1f8b6001600160a01b03165f52600460205260405f2090565b936125af565b516001600160a01b031690565b6001600160a01b03165f5260205260405f2090565b6125d4565b610d56838c6125af565b52610d61828b6125af565b506fffffffffffffffffffffffffffffffff8116610d7f83896125af565b5260801c610d8d82896125af565b5201610cc8565b346102cc5760206003193601126102cc576020600435610db3816102bb565b610dbb612ba2565b6001600160a01b038091165f52600e825260405f2054161515604051908152f35b346102cc5760206003193601126102cc576020610e14600435610dfe816102bb565b610e06612ba2565b610e0f81612bfc565b612eab565b506040519015158152f35b9181601f840112156102cc5782359167ffffffffffffffff83116102cc57602083818601950101116102cc57565b60206003198201126102cc576004359067ffffffffffffffff82116102cc57610e7891600401610e1f565b9091565b346102cc575f80610e8c36610e4d565b90610e956130ac565b610e9d612ba2565b8160405192839283378101838152039082335af1610eb9612613565b908015610f065790610ecf81610f029333613140565b506040519182917f5ab64fb800000000000000000000000000000000000000000000000000000000835260048301611e79565b0390fd5b506004815110610f85577f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000060208301511603613131577f28f95541000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b9091610fc461031093604084526040840190610450565b916020818403910152610450565b346102cc5760206003193601126102cc57600435610fef816102bb565b610ff7612ba2565b61100081612bfc565b6001600160a01b038082165f525f60205260405f2054600360205260405f209160405180938491602082549182815201915f5260205f20935f905b8282106110ca575050506110519250038361077e565b61105d825180926131cc565b9161106782612551565b935f5b8381106110805760405180610564888883610fad565b6001906110b96110b4610d476110a7866001600160a01b03165f52600460205260405f2090565b610d32610d25868a6125af565b61321e565b6110c382896125af565b520161106a565b85546001600160a01b039082161684526001958601958895506020909401939091019061103b565b346102cc575f6003193601126102cc5761110a612ba2565b60207f00000000000000000000000000000000000000000000000000000000000000005c6040519015158152f35b346102cc5760206fffffffffffffffffffffffffffffffff6111986001600160a01b03611164366102eb565b919061116e612ba2565b61117781612bfc565b165f526006845260405f20906001600160a01b03165f5260205260405f2090565b5416604051908152f35b346102cc575f6003193601126102cc576111ba612ba2565b60206001600160a01b03600a5416604051908152f35b346102cc5760606003193601126102cc5760206112186004356111f2816102bb565b6024356111fe816102bb565b6044359161120b836102bb565b611213612ba2565b6132fa565b604051908152f35b346102cc5760206003193601126102cc576001600160a01b03600435611245816102bb565b61124d612ba2565b165f526008602052602060405f2054604051908152f35b346102cc5760206003193601126102cc576020611218600435611286816102bb565b61128e612ba2565b7f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b03165f5260205260405f205c90565b346102cc5760806003193601126102cc576004356112e3816102bb565b6024356112ef816102bb565b6044359060643567ffffffffffffffff81116102cc57611313903690600401610823565b61131b612ba2565b61132361335c565b61132b6133ad565b61133484612c47565b6001600160a01b039384811691825f526020905f60205261135d60405f205460019060031c1690565b156117555761137d836001600160a01b03165f52600560205260405f2090565b96611386612642565b926113a5610c9f866001600160a01b03165f52600360205260405f2090565b80855251966113ba6040860198808a52612551565b97608086019889525f5b815181101561140d57806113fb6113e56001938f905f5260205260405f2090565b546fffffffffffffffffffffffffffffffff1690565b611406828d516125af565b52016113c4565b50899896979861143b8189516114348c6001600160a01b03165f52601160205260405f2090565b5490613427565b996114468351612551565b95606089019687526114ad8b7f00000000000000000000000000000000000000000000000000000000000000005c7f0000000000000000000000000000000000000000000000000000000000000000905f5260205260405f20905f5260205260405f205c90565b151560a08a018181529590611728575b5f5b855181101561160d576114e9818f8a8e838e6114db8e51151590565b6115bd575b505050506125af565b516114f4828c6125af565b511161155457808c8f826115478f8261154d9461152e61151d610d2560019b61153396516125af565b61152784846125af565b5190613498565b6125af565b5193519361154183866125af565b516126b2565b926125af565b52016114bf565b8d8a61157d836115768f95611570610d25826115ba99516125af565b956125af565b51926125af565b517f2f785e46000000000000000000000000000000000000000000000000000000005f526001600160a01b03909216600452602452604452606490565b5ffd5b6115dc6115ee936115f9956115d285896125af565b5191015190613476565b6115e78383516125af565b52516125af565b5161154184846125af565b61160383836125af565b528a8e838e6114e0565b508a95509187918d938d611632816001600160a01b03165f52600560205260405f2090565b965f5b8951811015611683578061166a8c6116638361165b6001968f905f5260205260405f2090565b5492516125af565b51906134d6565b61167c828c905f5260205260405f2090565b5501611635565b610564885f89897ffbe5b0d79fb94f1e81c0a92bf86ae9d3a19e9d1bf6202c0d3e75120f65d5d8a58a8a6117016116ef8c6116d88d6116c4813388866134e4565b6116cc613560565b611718575b85836135c5565b6001600160a01b03165f52601160205260405f2090565b549551886040519485941697846126bf565b0390a461170c613402565b60405191829182610b27565b611723818785613582565b6116d1565b61174b6117458d6001600160a01b03165f525f60205260405f2090565b54612f52565b60208b01526114bd565b837fef029adf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b346102cc575f6003193601126102cc57611799612ba2565b60206001600160a01b0360095460081c16604051908152f35b346102cc5760206003193601126102cc5760206118376004356117d4816102bb565b6117dc612ba2565b7f00000000000000000000000000000000000000000000000000000000000000005c7f0000000000000000000000000000000000000000000000000000000000000000905f5260205260405f20905f5260205260405f205c90565b6040519015158152f35b346102cc5760206003193601126102cc576001600160a01b03600435611866816102bb565b61186e612ba2565b61187781612bfc565b165f525f602052602061121860405f2054612f52565b346102cc575f6003193601126102cc576118a5612ba2565b60206001600754166040519015158152f35b346102cc5760c06003193601126102cc576004356118d4816102bb565b602435906118e1826102bb565b6044359167ffffffffffffffff918284116102cc57366023850112156102cc57836004013561190f8161080b565b9461191d604051968761077e565b8186526020916024602088019160051b830101913683116102cc57602401905b82821061198957505050506064358381116102cc57611960903690600401610823565b60a4359384116102cc576105649461197f6109c29536906004016108d5565b93608435936126ea565b8380918335611997816102bb565b81520191019061193d565b346102cc5760206003193601126102cc576001600160a01b036004356119c7816102bb565b6119cf612ba2565b6119d881612bfc565b165f525f6020526020600160405f205460031c166040519015158152f35b346102cc5760206003193601126102cc576001600160a01b03600435611a1b816102bb565b611a23612ba2565b165f525f6020526020600160405f2054166040519015158152f35b346102cc5760406003193601126102cc5760243567ffffffffffffffff81116102cc57611a6f903690600401610e1f565b611a77612ba2565b611a8033612bfc565b80604051926020845281602085015260408401375f604082840101527f4bc4412e210115456903c65b5277d299a505e79f2eb852b92b1ca52d8585642860043592604081601f19601f339601168101030190a3005b906020610310928181520190610b84565b346102cc5760206003193601126102cc57600435611b03816102bb565b611b0b612ba2565b611b1481612bfc565b6001600160a01b038091165f52600360205260405f20906040519081602084549182815201935f5260205f20915f905b828210611b675761056485611b5b8189038261077e565b60405191829182611ad5565b909192946001611b89819284895416906001600160a01b036020921681520190565b960193920190611b44565b346102cc5760206003193601126102cc57610160611bf9600435611bb7816102bb565b611bbf612891565b50611bc8612ba2565b611bd181612bfc565b6001600160a01b038091165f525f60205260405f205490600260205260405f20541690613d80565b611c8a604051809280511515825260208082015115159083015260408082015115159083015260608082015115159083015260808082015115159083015260a08082015115159083015260c08082015115159083015260e0808201511515908301526101008082015115159083015261012080820151151590830152610140908101516001600160a01b0316910152565bf35b346102cc575f6003193601126102cc5760207f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6040519015158152f35b346102cc575f6003193601126102cc57611ce2612ba2565b60207f00000000000000000000000000000000000000000000000000000000000000005c604051908152f35b346102cc5760606003193601126102cc57611d4c600435611d2e816102bb565b602435611d3a816102bb565b611d42612ba2565b6044359133613ebe565b602060405160018152f35b346102cc5760206003193601126102cc576001600160a01b03600435611d7c816102bb565b611d84612ba2565b165f526011602052602060405f2054604051908152f35b6102de909291926060810193604090816001600160a01b0391828151168552826020820151166020860152015116910152565b346102cc5760206003193601126102cc57610564600435611dee816102bb565b611df66124e5565b50611dff612ba2565b611e0881612bfc565b6001600160a01b038091165f52600160205260405f2090600260405192611e2e846106f4565b828154168452826001820154166020850152015416604082015260405191829182611d9b565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b906020610310928181520190611e54565b346102cc57610564611ed35f80611eba611ea336610e4d565b611eab6130ac565b611eb3612ba2565b369161089f565b60208151910182335af1611ecc612613565b9033613140565b604051918291602083526020830190611e54565b801515036102cc57565b608435906102de82611ee7565b6064359063ffffffff821682036102cc57565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c60609101126102cc5760a490565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedc60809101126102cc5761012490565b346102cc576101a06003193601126102cc57600435611f8e816102bb565b60243567ffffffffffffffff81116102cc57366023820112156102cc57806004013591611fba8361080b565b91604093611fcb604051948561077e565b8084526020906024602086019160071b840101923684116102cc57602401905b83821061202f5761202d8686611fff611efe565b612007611ef1565b61201036611f11565b916120196102d0565b9361202336611f40565b95604435916128f4565b005b6080823603126102cc5782608091885161204881610715565b8435612053816102bb565b815282850135612062816107f6565b8382015289850135612073816102bb565b8a8201526060808601359061208782611ee7565b820152815201910190611feb565b6102de909291926101806101a08201946120d68382516060809180511515845260208101511515602085015260408101511515604085015201511515910152565b60208101516080840152604081015160a0840152606081015160c084015261210c608082015160e085019064ffffffffff169052565b60a081015190612127610100928386019063ffffffff169052565b61215b60c082015192612141610120948588019015159052565b60e083015115156101408701528201511515610160860152565b01511515910152565b346102cc5760206003193601126102cc576105646121f2600435612187816102bb565b5f61012060405161219781610731565b6040516121a381610715565b83815283602082015283604082015283606082015281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201520152612a1a565b60405191829182612095565b346102cc5760406003193601126102cc57602061225e600435612220816102bb565b6001600160a01b0360243591612235836102bb565b61223d612ba2565b165f52600f835260405f20906001600160a01b03165f5260205260405f2090565b54604051908152f35b346102cc575f6003193601126102cc5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b604051906122b78261074e565b815f815260c060609182602082015282604082015282808201528260808201528260a08201520152565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b91909163ffffffff8080941691160191821161232657565b6122e1565b6123a891612337612ba2565b61234082612c47565b6001600160a01b039081831690815f525f6020526040938493612365855f2054612f52565b935f526002602052845f205416918451968794859384937fa0e8f5ac00000000000000000000000000000000000000000000000000000000855260048501612f9f565b03915afa918215610acf575f915f93612425575b5050156123fd57670de0b5cad2bef00081116123d55790565b7f746e5940000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f53f976d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b612448935080919250903d10612450575b612440818361077e565b810190612f80565b905f806123bc565b503d612436565b908160209103126102cc575190565b9190602061247e600192604086526040860190610450565b930152565b6040513d5f823e3d90fd5b90604051918281549182825260209260208301915f5260205f20935f905b8282106124c2575050506102de9250038361077e565b85546001600160a01b0316845260019586019588955093810193909101906124ac565b604051906124f2826106f4565b5f6040838281528260208201520152565b9061250d8261080b565b61251a604051918261077e565b828152601f1961252a829461080b565b01905f5b82811061253a57505050565b6020906125456124e5565b8282850101520161252e565b9061255b8261080b565b612568604051918261077e565b828152601f19612578829461080b565b0190602036910137565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b80518210156125c35760209160051b010190565b612582565b6125d1826103aa565b52565b906040516125e1816106f4565b604060ff8294548181166125f4816103aa565b84526001600160a01b038160081c16602085015260a81c161515910152565b3d1561263d573d9061262482610883565b91612632604051938461077e565b82523d5f602084013e565b606090565b6040519060c0820182811067ffffffffffffffff821117610710576040525f60a08360608152826020820152826040820152606080820152606060808201520152565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0bdc0820191821161232657565b9190820391821161232657565b916126dc9061031094928452606060208501526060840190610450565b916040818403910152610450565b93959491959290926126fa612ba2565b61270261335c565b61270b85612bfc565b6127136133ad565b61271c85613796565b61272585612c94565b916127348351600190811c1690565b61285c5761279d969761274e6020850151518351906137e4565b60c0840195865161276660a087019182519086613813565b9789612777885160019060081c1690565b6127eb575b899492508791509261278f9695936139fc565b94859151600190600a1c1690565b6127ae575b50505050610310613402565b6127dc6127cf6127e2956001600160a01b03165f52600260205260405f2090565b546001600160a01b031690565b92613cb4565b5f8080836127a2565b9161284f91612821899b8b61281b6127cf61278f9c9b999a986001600160a01b03165f52600260205260405f2090565b916138b9565b61284561283f8d6001600160a01b03165f52600560205260405f2090565b8a61398f565b5190519084613813565b978193929495508961277c565b7f218e3747000000000000000000000000000000000000000000000000000000005f526001600160a01b03861660045260245ffd5b60405190610160820182811067ffffffffffffffff821117610710576040525f610140838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e082015282610100820152826101208201520152565b94969263ffffffff91969492612908612ba2565b6129106133ad565b612918613fee565b604051976129258961074e565b88526020880152166040860152151560608501526060853603126102cc576129a16129a8926129b296604080519161295c836106f4565b8035612967816102bb565b83526020810135612977816102bb565b60208401520135612987816102bb565b604082015260808701526001600160a01b031660a0860152565b36906129ba565b60c08301526144da565b6102de613402565b91908260809103126102cc576040516129d281610715565b606080829480356129e281611ee7565b845260208101356129f281611ee7565b60208501526040810135612a0581611ee7565b6040850152013591612a1683611ee7565b0152565b612a4590612a26612ba2565b612a2f81612bfc565b6001600160a01b03165f525f60205260405f2090565b546103106001612a5483612f52565b92612afd612a6182614fc2565b612af0612a6d84614fe5565b64ffffffffff85605a1c169063ffffffff86612a87608290565b1c1693612a926107ae565b600488901c89161515815299600588901c8916151560208c0152600688901c8916151560408c0152600788901c8916151560608c0152612ad06107bb565b9a8b5260208b015260408a0152606089015264ffffffffff166080880152565b63ffffffff1660a0860152565b808216151560c085015280821c8216151560e0850152600281901c8216151561010085015260031c161515610120830152565b7ff2238896000000000000000000000000000000000000000000000000000000005f5260045ffd5b34612b3057365f80375f8036816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af43d5f803e15612b9e573d5ff35b3d5ffd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003612bd457565b7f9fd25b36000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160a01b0316805f525f602052600160405f20541615612c1c5750565b7f9e51bd5c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6001600160a01b0316805f525f602052600160405f2054811c1615612c695750565b7f4bdace13000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b906001600160a01b03612ca56122aa565b92165f5260056020526040805f205f602052815f2054906004602052825f20906003602052835f20938454938752612ce06020880195615008565b8552612ceb84612503565b91818801928352612cfb85612551565b9160608901928352612d0c86612551565b9460809560808b0152612d20878b516131cc565b60c08b0152612d2e87612551565b60a08b019081528a5191600199600184811c169384612e97575b5083612e85575b8c5f5b8b8110612d685750505050505050505050505050565b8a8d92828c8c8c612daf84612d9b81612d8d610d478f8f610d2585610d3292516125af565b94905f5260205260405f2090565b54945183612da983836125af565b526125af565b50612db98161321e565b612dc4858d516125af565b52612de26fffffffffffffffffffffffffffffffff84168587615238565b878d8d15612e785782015115159182612e5a575b5050612e0b575b50505050505b018d90612d52565b82612e2e92612e2582612e1e8851614fe5565b94516125af565b51961c856157a3565b9283612e3e575b8e93508c612dfd565b612e5193612e4b916126b2565b91615238565b5f8f8282612e35565b90915051612e67816103aa565b612e70816103aa565b14875f612df6565b5050505050505050612e03565b8c5190935060031c6001161592612d4f565b612ea2919450614fe5565b1515925f612d48565b6001600160a01b03165f525f60205260405f20549060018260021c1663ffffffff8093612ed6608290565b1c169281612ee357509190565b9050612f0f7f00000000000000000000000000000000000000000000000000000000000000008461230e565b164211159190565b60ff60019116019060ff821161232657565b9060058202918083046005149015171561232657565b8181029291811591840414171561232657565b62ffffff9060121c1664174876e800908181029181830414901517156123265790565b51906102de82611ee7565b91908260409103126102cc5760208251612f9981611ee7565b92015190565b612a1661303f60409396959496606084528051612fbb816103aa565b60608501526020810151608085015260c0612fe58683015160e060a0880152610140870190610450565b91606081015182870152608081015160e08701526001600160a01b0360a08201511661010087015201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa085830301610120860152611e54565b6001600160a01b039096166020830152565b811561305b570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b90670de0b6b3a7640000918281029281840414901517156123265761031091613051565b32613109576001600754166130e15760017f00000000000000000000000000000000000000000000000000000000000000005d565b7f7a198886000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f67f84ab2000000000000000000000000000000000000000000000000000000005f5260045ffd5b805115610f8557805190602001fd5b9061317d575080511561315557805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b815115806131c3575b61318e575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15613186565b9064ffffffffff6131dc82612551565b92605a1c165f5b8281106131f05750505090565b601f826131fc83612f29565b1c1690604d821161232657600191600a0a61321782876125af565b52016131e3565b8051613229816103aa565b613232816103aa565b80613245575050670de0b6b3a764000090565b806132516001926103aa565b036132d257602061327c6132708260049401516001600160a01b031690565b6001600160a01b031690565b604051928380927f679aefce0000000000000000000000000000000000000000000000000000000082525afa908115610acf575f916132b9575090565b610310915060203d602011610ac857610ab9818361077e565b7fdf450632000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160a01b0392918381168484160361331857505050505f1990565b6133589361334292165f52601060205260405f20906001600160a01b03165f5260205260405f2090565b906001600160a01b03165f5260205260405f2090565b5490565b7f00000000000000000000000000000000000000000000000000000000000000005c1561338557565b7fc09ba736000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c6133da576001905d565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d565b92916134338451612551565b935f5b8151811015613470578061345f8561345a86613454600196886125af565b51612f3f565b613051565b61346982896125af565b5201613436565b50505050565b9061348091612f3f565b6001670de0b6b3a76400005f19830104019015150290565b906134a29061505f565b907f80000000000000000000000000000000000000000000000000000000000000008214612326576102de915f03906150b4565b906103109160801c9061519c565b91909392936134f48282856132fa565b5f198103613505575b505050509050565b808611613523579461351994950392613ebe565b805f8080806134fd565b85906001600160a01b03847ffb8f41b2000000000000000000000000000000000000000000000000000000005f521660045260245260445260645ffd5b32158061356a5790565b506001600754161590565b9190820180921161232657565b9032613109576001600160a01b036135b692165f52600f60205260405f20906001600160a01b03165f5260205260405f2090565b80549182018092116123265755565b90916001600160a01b03808416928315613761576135f885613342836001600160a01b03165f52600f60205260405f2090565b548084116137245783900361362286613342846001600160a01b03165f52600f60205260405f2090565b5561364883613642836001600160a01b03165f52601160205260405f2090565b546126b2565b61365181615200565b61366c826001600160a01b03165f52601160205260405f2090565b551690813b156102cc576040517f23de66510000000000000000000000000000000000000000000000000000000081526001600160a01b0390941660048501525f6024850181905260448501829052937fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f9161370691868180606481015b038183895af161370b575b506040519081529081906020820190565b0390a4565b8061371861371e9261076a565b80610568565b5f6136f5565b7fe450d38c000000000000000000000000000000000000000000000000000000005f526001600160a01b038616600452602452604483905260645ffd5b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f526001600160a01b03851660045260245ffd5b61379e613fee565b6137a781612eab565b506137af5750565b6001600160a01b03907fd971f597000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b036137eb57565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b91908251918151815181851491821592613899575b50506137eb5761383783612551565b935f5b84811061384957505050505090565b80670de0b6b3a7640000613887613862600194866125af565b51613882613870858a6125af565b5161387b868a6125af565b5192612f3f565b612f3f565b0461389282896125af565b520161383a565b141590505f80613828565b908160209103126102cc575161031081611ee7565b9061391d9261390b5f6001600160a01b03602095604051978896879586937f1c149e28000000000000000000000000000000000000000000000000000000008552604060048601526044850190610450565b90600319848303016024850152611e54565b0393165af1908115610acf575f91613960575b501561393857565b7f60612925000000000000000000000000000000000000000000000000000000005f5260045ffd5b613982915060203d602011613988575b61397a818361077e565b8101906138a4565b5f613930565b503d613970565b60208082015151925f5b8481106139a7575050505050565b6001906139f66fffffffffffffffffffffffffffffffff60406139d66139d085838b01516125af565b5161321e565b6139e48560a08b01516125af565b52835f528587525f2054168287615238565b01613999565b929195969496613a1d846001600160a01b03165f52600560205260405f2090565b955f5b60208901518051821015613afb57610d2582613a3b926125af565b613a4b613270610d2584896125af565b6001600160a01b038216908103613aa7575090613a75600192613a6e838b6125af565b5190615285565b613a8e8b613a8783611576818d6125af565b519061519c565b613aa0828b905f5260205260405f2090565b5501613a20565b6115ba9088613abc613270610d25878c6125af565b7fffe261a1000000000000000000000000000000000000000000000000000000005f526001600160a01b03918216600452811660245216604452606490565b50509694919250969450613b3384517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd600291161790565b808552613b50846001600160a01b03165f525f60205260405f2090565b556001600160a01b0392613b96602085831697604051809381927f984de9e800000000000000000000000000000000000000000000000000000000835260048301612466565b03818a5afa8015610acf57613bbb915f91613c95575b50613bb681615200565b612685565b97613bc582615297565b613bd08985846153a7565b808910613c655750928592613c3c7fa26a52d8d53702bba7f137907b8e1f99ff87f6d450144270ca25e72481cca87193613c2d6020613c2360019a996001600160a01b03165f52601160205260405f2090565b5498015151612551565b906040519485941697846126bf565b0390a47fcad8c9d32507393b6508ca4a888b81979919b477510585bde8488f153072d6f35f80a2565b7f8d261d5d000000000000000000000000000000000000000000000000000000005f52600489905260245260445ffd5b613cae915060203d602011610ac857610ab9818361077e565b5f613bac565b92613d075f6001600160a01b036020959496613d1e604051988997889687947f38be241d000000000000000000000000000000000000000000000000000000008652606060048701526064860190610450565b916024850152600319848303016044850152611e54565b0393165af1908115610acf575f91613d61575b5015613d3957565b7f0f23dbc6000000000000000000000000000000000000000000000000000000005f5260045ffd5b613d7a915060203d6020116139885761397a818361077e565b5f613d31565b90613d89612891565b5060ff6001808483613d9b600c612f17565b613da490612f17565b161c16818584613db4600c612f17565b613dbd90612f17565b613dc690612f17565b161c1690828685613dd7600c612f17565b613de090612f17565b613de990612f17565b613df290612f17565b161c1692808786613e03600c612f17565b613e0c90612f17565b613e1590612f17565b613e1e90612f17565b613e2790612f17565b161c16948188818184600c161c1692600c613e4190612f17565b161c1691613e4d6107c8565b60098a901c82161515815298600881901c8216151560208b0152600a81901c8216151560408b0152600b1c161515606089015215156080880152151560a0870152151560c0860152151560e0850152151561010084015215156101208301526001600160a01b031661014082015290565b9290916001600160a01b0392838116938415613fb957808316958615613f845784613f028561334286613342866001600160a01b03165f52601060205260405f2090565b551692833b156102cc576040517f5687f2b80000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152919092166024820152604481018290527fa0175360a15bca328baf7ea85c7b784d58b222a50d0ce760b10dba336d226a6191613706915f8180606481016136ea565b7f94280d62000000000000000000000000000000000000000000000000000000005f526001600160a01b03841660045260245ffd5b7fe602df05000000000000000000000000000000000000000000000000000000005f526001600160a01b03821660045260245ffd5b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000164211158061404c575b61402457565b7fda9f8b34000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001600754811c1661401e565b90805190614067826103aa565b614070826103aa565b82546020820151604092909201517fffffffffffffffffffff0000000000000000000000000000000000000000000090911660ff939093169290921760089190911b74ffffffffffffffffffffffffffffffffffffffff00161790151560a81b75ff00000000000000000000000000000000000000000016179055565b908160209103126102cc575160ff811681036102cc5790565b80546801000000000000000081101561071057600181018083558110156125c3576001600160a01b03915f5260205f200191167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b815181547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039182161782556102de92600291906040906141e28360208301511660018701906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b0151169101906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b91908260409103126102cc576020825192015190565b9081518082526020808093019301915f5b82811061424f575050505090565b9091929382608060019287516001600160a01b0380825116835284820151614276816103aa565b838601526040828101519091169083015260609081015115159082015201950193929101614241565b9493916102de936060926142d1926001600160a01b03809216895216602088015260e0604088015260e0870190614230565b9401906060809180511515845260208101511515602085015260408101511515604085015201511515910152565b90816101409103126102cc576143136107bb565b9061431d81612f75565b825261432b60208201612f75565b602083015261433c60408201612f75565b604083015261434d60608201612f75565b606083015261435e60808201612f75565b608083015261436f60a08201612f75565b60a083015261438060c08201612f75565b60c083015261439160e08201612f75565b60e08301526101006143a4818301612f75565b908301526143b6610120809201612f75565b9082015290565b919695939461441f6102de9663ffffffff610220966143e76144ad966102a0808a52890190614230565b9b60208801521660408601526060850190604090816001600160a01b0391828151168552826020820151166020860152015116910152565b60c083019080511515825260208082015115159083015260408082015115159083015260608082015115159083015260808082015115159083015260a08082015115159083015260c08082015115159083015260e0808201511515908301526101008082015115159083015261012080820151151590830152610140908101516001600160a01b0316910152565b01906060809180511515845260208101511515602085015260408101511515604085015201511515910152565b906144ff6144f8836001600160a01b03165f525f60205260405f2090565b5460011690565b614f8d5780515160028110614f655760088111614f3d5792919061452284612551565b5f945f5b818110614c305750506145f2929394506080820191614560835161455b876001600160a01b03165f52600160205260405f2090565b614162565b614575613270600a546001600160a01b031690565b6040809161458e828751016001600160a01b0390511690565b9061459c6060860151151590565b83517f77ff76e70000000000000000000000000000000000000000000000000000000081526001600160a01b03808c166004830152909316602484015215156044830152909687919082905f9082906064820190565b03925af18015610acf575f955f91614bfd575b5061471e60c08401916147196146e88451976146d16146cb61462d8b51151560041b60011790565b9a606061469b61466a60209e8f85015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf9060051b91161790565b8c84015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf9060061b91161790565b91015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f9060071b91161790565b916154f5565b90605a9164ffffffffff908116831b921b19161790565b986147148688019a6146fe8c5163ffffffff1690565b9060829163ffffffff908116831b921b19161790565b6155c5565b6155e5565b9360a08401906001600160a01b0395898761474085516001600160a01b031690565b1680614841575b50906147658193926001600160a01b03165f525f60205260405f2090565b5582516001600160a01b03166001600160a01b03166147958b6001600160a01b03165f52600260205260405f2090565b906147cd91906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b85019485516147dc908b615609565b519451975163ffffffff16965191516001600160a01b03166001600160a01b031661480691613d80565b915192519586953399169761481b95876143bd565b037fbc1561eeab9f40962e2fb827a7ff9c7cdb47a9d7c84caeefa4ed90e043842dad91a3565b61488391849189515f8951938b51968795869485937f0b89f182000000000000000000000000000000000000000000000000000000008552336004860161429f565b03925af1908115610acf575f91614be0575b5015614bcb576148b261327061327085516001600160a01b031690565b90855180927fd77153a70000000000000000000000000000000000000000000000000000000082528160046101409586935afa928315610acf575f93614b9c575b50508151151580614b82575b614b2f5790614afd610120614969614aca614a98614a66614a34614a026149d08e6149a561499c8c8f614b289f906149696149719261493e8551151590565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdff9060091b91161790565b920151151590565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff9060081b91161790565b918c0151151590565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbff90600a1b91161790565b60608a015115157ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff90600b1b91161790565b608089015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff90600c1b91161790565b60a088015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfff90600d1b91161790565b60c087015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfff90600e1b91161790565b60e086015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fff90600f1b91161790565b61010085015115157ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff9060101b91161790565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff9060111b91161790565b895f614747565b6115ba8b614b4486516001600160a01b031690565b7ffa93d814000000000000000000000000000000000000000000000000000000005f526001600160a01b039081166004521660245233604452606490565b50614b96614b91865151151590565b151590565b156148ff565b614bbc929350803d10614bc4575b614bb4818361077e565b8101906142ff565b905f806148f3565b503d614baa565b6115ba8a614b4485516001600160a01b031690565b614bf79150833d85116139885761397a818361077e565b5f614895565b905081614c209296503d8711614c29575b614c18818361077e565b81019061421a565b9490945f614605565b503d614c0e565b614c3b8185516125af565b5196614c4e88516001600160a01b031690565b906001600160a01b038083169182158015614f32575b614f0a5716808210614ee2578114614ead57604090818a01998a51614c8f906001600160a01b031690565b6001600160a01b0316159060209b8c8201908d825191614cae836103aa565b516001600160a01b031693606001938451614cc890151590565b91614cd16107e9565b93614cdc90856125c8565b6001600160a01b039091169083015215158187015286614d0d8d6001600160a01b03165f52600460205260405f2090565b90614d2891906001600160a01b03165f5260205260405f2090565b90614d329161405a565b8051614d3d816103aa565b614d46816103aa565b614e5e5750811591614e53575b506132d25789915b51998a80927f313ce56700000000000000000000000000000000000000000000000000000000825260049c8d915afa918215610acf575f92614e26575b505060129060ff9180838316115f14614dd2578a7f686d3607000000000000000000000000000000000000000000000000000000005f525ffd5b60019495969798999a5090614df692910316614dee85886125af565b9060ff169052565b614e1a81614e15896001600160a01b03165f52600360205260405f2090565b614106565b96959493929101614526565b614e459250803d10614e4c575b614e3d818361077e565b8101906140ed565b5f80614d98565b503d614e33565b51151590505f614d53565b6001915051614e6c816103aa565b614e75816103aa565b03614e85576132d2578991614d5b565b7fa1e9dd9d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4f4b634e000000000000000000000000000000000000000000000000000000005f526001600160a01b03821660045260245ffd5b7f6e8f1947000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fc1ab6dc1000000000000000000000000000000000000000000000000000000005f5260045ffd5b508189168314614c64565b7f707bdf58000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f5ed4ba8f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fdb771c80000000000000000000000000000000000000000000000000000000005f526001600160a01b03821660045260245ffd5b62ffffff90602a1c1664174876e800908181029181830414901517156123265790565b62ffffff9060421c1664174876e800908181029181830414901517156123265790565b90604051918281549182825260209260208301915f5260205f20935f905b82821061503c575050506102de9250038361077e565b85546001600160a01b031684526001958601958895509381019390910190615026565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116150895790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b908015615198577f0000000000000000000000000000000000000000000000000000000000000000916150f98184906001600160a01b03165f5260205260405f205c90565b8281019283125f8212908015821691151617612326578261514e57507f000000000000000000000000000000000000000000000000000000000000000092835c5f198101908111612326576102de945d615811565b1561515d575b6102de92615811565b7f000000000000000000000000000000000000000000000000000000000000000092835c60018101809111612326576102de945d9250615154565b5050565b906fffffffffffffffffffffffffffffffff8083119081156151f6575b506151ce5760801b9081018091116123265790565b7f89560ca1000000000000000000000000000000000000000000000000000000005f5260045ffd5b905081115f6151b9565b620f4240811061520d5750565b7fd38d20fc000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b91906080670de0b6b3a764000061527c6125d1948061525b8660608a01516125af565b5261388261526d8660c08a01516125af565b5161387b8760a08b01516125af565b049301516125af565b6152916102de9261505f565b906150b4565b6152b2816001600160a01b03165f52601160205260405f2090565b908154620f424090818101809111612326576001600160a01b0393556152e9826001600160a01b03165f52600f60205260405f2090565b5f805260205260405f20908154019055165f80827fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f604051806153338190620f4240602083019252565b0390a4803b156102cc575f60405180927f23de66510000000000000000000000000000000000000000000000000000000082528183816153896004820190620f4240604060608401935f81525f60208201520152565b03925af18015610acf5761539a5750565b806137186102de9261076a565b916001600160a01b038083169384156154c0576153df836153d9836001600160a01b03165f52601160205260405f2090565b54613575565b6153fe85613342846001600160a01b03165f52600f60205260405f2090565b84815401905561540d81615200565b615428826001600160a01b03165f52601160205260405f2090565b5516925f847fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f6040518061546187829190602083019252565b0390a4823b156102cc576040517f23de66510000000000000000000000000000000000000000000000000000000081525f600482018190526001600160a01b039093166024820152604481019190915291829081838160648101615389565b7fec442f05000000000000000000000000000000000000000000000000000000005f526001600160a01b03841660045260245ffd5b5f9190825b81518410156155b95761550d84836125af565b5160ff9161551a86612f29565b916101008084101561558c5783810390811161232657808510156155b45750835b600590811161558c57816007911c1661556457600193601f9116831b921b1916179301926154fa565b7fe4337c05000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fb4120f14000000000000000000000000000000000000000000000000000000005f5260045ffd5b61553b565b64ffffffffff16925050565b670de0b5cad2bef00082116123d55764174876e800610310920490615827565b90670de0b5cad2bef00081116123d5576103109164174876e8006042920490615841565b906001600160a01b038216916040517fce20ece70000000000000000000000000000000000000000000000000000000081526020908181600481885afa908115610acf575f91615786575b50831061575e576040517f654cf15d0000000000000000000000000000000000000000000000000000000081528181600481885afa918215610acf575f92615741575b505082116157195781816157036156ec7f89d41522342fabac1471ca6073a5623e5caf367b03ca6e9a001478d0cf8be4a1956156e6615714966001600160a01b03165f525f60205260405f2090565b54615888565b916001600160a01b03165f525f60205260405f2090565b556040519081529081906020820190565b0390a2565b7f7f47834b000000000000000000000000000000000000000000000000000000005f5260045ffd5b6157579250803d10610ac857610ab9818361077e565b5f80615697565b7fbfb20688000000000000000000000000000000000000000000000000000000005f5260045ffd5b61579d9150823d8411610ac857610ab9818361077e565b5f615654565b9093925f946157b68460808501516125af565b518181116157c6575b5050505050565b61580695965061580093926157f9926157df9203613476565b9360a06157f08260c08601516125af565b519301516125af565b5190612f3f565b90613088565b905f808080806157bf565b906001600160a01b03165f5260205260405f205d565b908060181c61556457602a1b9062ffffff602a1b19161790565b906101008084101561558c57838103908111612326578060ff105f14615883575060ff5b60181161558c578060181c6155645762ffffff90831b921b19161790565b615865565b90670de0b5cad2bef00081116123d55764174876e80090048060181c615564577ffffffffffffffffffffffffffffffffffffffffffffffffffffffc000003ffff9060121b9116179056fea2646970667358221220c9525eb5f41174f1907706a8cefaa7d6ed21051f4be2ea1862dd8dea2f5389f864736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x18 JUMPI JUMPDEST CALLDATASIZE PUSH2 0x2B58 JUMPI PUSH2 0x2B30 JUMP JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH3 0xFDFA13 EQ PUSH2 0x2B6 JUMPI DUP1 PUSH4 0x13D21CDF EQ PUSH2 0x2B1 JUMPI DUP1 PUSH4 0x13EF8A5D EQ PUSH2 0x2AC JUMPI DUP1 PUSH4 0x15E32046 EQ PUSH2 0x2A7 JUMPI DUP1 PUSH4 0x1BA0AE45 EQ PUSH2 0x2A2 JUMPI DUP1 PUSH4 0x4AFBAF5A EQ PUSH2 0x29D JUMPI DUP1 PUSH4 0x4D472BDD EQ PUSH2 0x298 JUMPI DUP1 PUSH4 0x4F037EE7 EQ PUSH2 0x293 JUMPI DUP1 PUSH4 0x532CEC7C EQ PUSH2 0x28E JUMPI DUP1 PUSH4 0x535CFD8A EQ PUSH2 0x289 JUMPI DUP1 PUSH4 0x67E0E076 EQ PUSH2 0x284 JUMPI DUP1 PUSH4 0x6844846B EQ PUSH2 0x27F JUMPI DUP1 PUSH4 0x6C9BC732 EQ PUSH2 0x27A JUMPI DUP1 PUSH4 0x757D64B3 EQ PUSH2 0x275 JUMPI DUP1 PUSH4 0x7E361BDE EQ PUSH2 0x270 JUMPI DUP1 PUSH4 0x8380EDB7 EQ PUSH2 0x26B JUMPI DUP1 PUSH4 0x85E0B999 EQ PUSH2 0x266 JUMPI DUP1 PUSH4 0x85F2DBD4 EQ PUSH2 0x261 JUMPI DUP1 PUSH4 0x927DA105 EQ PUSH2 0x25C JUMPI DUP1 PUSH4 0x96787092 EQ PUSH2 0x257 JUMPI DUP1 PUSH4 0x9E825FF5 EQ PUSH2 0x252 JUMPI DUP1 PUSH4 0xA07D6040 EQ PUSH2 0x24D JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x248 JUMPI DUP1 PUSH4 0xACE9B89B EQ PUSH2 0x243 JUMPI DUP1 PUSH4 0xB45090F9 EQ PUSH2 0x23E JUMPI DUP1 PUSH4 0xB4AEF0AB EQ PUSH2 0x239 JUMPI DUP1 PUSH4 0xBA8A2BE0 EQ PUSH2 0x234 JUMPI DUP1 PUSH4 0xBE7D628A EQ PUSH2 0x22F JUMPI DUP1 PUSH4 0xC673BDAF EQ PUSH2 0x22A JUMPI DUP1 PUSH4 0xC8088247 EQ PUSH2 0x225 JUMPI DUP1 PUSH4 0xCA4F2803 EQ PUSH2 0x220 JUMPI DUP1 PUSH4 0xCE8630D4 EQ PUSH2 0x21B JUMPI DUP1 PUSH4 0xD2C725E0 EQ PUSH2 0x216 JUMPI DUP1 PUSH4 0xDB817187 EQ PUSH2 0x211 JUMPI DUP1 PUSH4 0xE1F21C67 EQ PUSH2 0x20C JUMPI DUP1 PUSH4 0xE4DC2AA4 EQ PUSH2 0x207 JUMPI DUP1 PUSH4 0xE9DDEB26 EQ PUSH2 0x202 JUMPI DUP1 PUSH4 0xEDFA3568 EQ PUSH2 0x1FD JUMPI DUP1 PUSH4 0xEEEC802F EQ PUSH2 0x1F8 JUMPI DUP1 PUSH4 0xF29486A1 EQ PUSH2 0x1F3 JUMPI DUP1 PUSH4 0xF7888AEC EQ PUSH2 0x1EE JUMPI PUSH4 0xFBFA77CF SUB PUSH2 0xE JUMPI PUSH2 0x2267 JUMP JUMPDEST PUSH2 0x21FE JUMP JUMPDEST PUSH2 0x2164 JUMP JUMPDEST PUSH2 0x1F70 JUMP JUMPDEST PUSH2 0x1E8A JUMP JUMPDEST PUSH2 0x1DCE JUMP JUMPDEST PUSH2 0x1D57 JUMP JUMPDEST PUSH2 0x1D0E JUMP JUMPDEST PUSH2 0x1CCA JUMP JUMPDEST PUSH2 0x1C8C JUMP JUMPDEST PUSH2 0x1B94 JUMP JUMPDEST PUSH2 0x1AE6 JUMP JUMPDEST PUSH2 0x1A3E JUMP JUMPDEST PUSH2 0x19F6 JUMP JUMPDEST PUSH2 0x19A2 JUMP JUMPDEST PUSH2 0x18B7 JUMP JUMPDEST PUSH2 0x188D JUMP JUMPDEST PUSH2 0x1841 JUMP JUMPDEST PUSH2 0x17B2 JUMP JUMPDEST PUSH2 0x1781 JUMP JUMPDEST PUSH2 0x12C6 JUMP JUMPDEST PUSH2 0x1264 JUMP JUMPDEST PUSH2 0x1220 JUMP JUMPDEST PUSH2 0x11D0 JUMP JUMPDEST PUSH2 0x11A2 JUMP JUMPDEST PUSH2 0x1138 JUMP JUMPDEST PUSH2 0x10F2 JUMP JUMPDEST PUSH2 0xFD2 JUMP JUMPDEST PUSH2 0xE7C JUMP JUMPDEST PUSH2 0xDDC JUMP JUMPDEST PUSH2 0xD94 JUMP JUMPDEST PUSH2 0xC3E JUMP JUMPDEST PUSH2 0xB38 JUMP JUMPDEST PUSH2 0xAD4 JUMP JUMPDEST PUSH2 0x9D2 JUMP JUMPDEST PUSH2 0x8F0 JUMP JUMPDEST PUSH2 0x681 JUMP JUMPDEST PUSH2 0x63E JUMP JUMPDEST PUSH2 0x59C JUMP JUMPDEST PUSH2 0x572 JUMP JUMPDEST PUSH2 0x483 JUMP JUMPDEST PUSH2 0x313 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SUB PUSH2 0x2CC JUMPI JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x104 CALLDATALOAD SWAP1 PUSH2 0x2DE DUP3 PUSH2 0x2BB JUMP JUMPDEST JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH2 0x2DE DUP3 PUSH2 0x2BB JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x40 SWAP2 ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x303 DUP2 PUSH2 0x2BB JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD PUSH2 0x310 DUP2 PUSH2 0x2BB JUMP JUMPDEST SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH2 0x362 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x32E CALLDATASIZE PUSH2 0x2EB JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x338 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x341 DUP2 PUSH2 0x2BFC JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x6 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x80 SHR PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x38D JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x37F JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x3B4 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x60 SWAP3 DUP1 MLOAD PUSH2 0x3F2 DUP2 PUSH2 0x3AA JUMP JUMPDEST DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x433 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 DUP3 PUSH2 0x445 PUSH1 0x1 SWAP3 DUP8 MLOAD PUSH2 0x3E1 JUMP JUMPDEST SWAP6 ADD SWAP4 SWAP3 SWAP2 ADD PUSH2 0x425 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x46F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x461 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH2 0x564 PUSH2 0x4C5 PUSH1 0x4 CALLDATALOAD PUSH2 0x4A6 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x4AE PUSH2 0x22AA JUMP JUMPDEST POP PUSH2 0x4B7 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x4C0 DUP2 PUSH2 0x2C47 JUMP JUMPDEST PUSH2 0x2C94 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE DUP1 MLOAD PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x4F0 PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0xE0 PUSH1 0x40 DUP7 ADD MSTORE PUSH2 0x100 DUP6 ADD SWAP1 PUSH2 0x36E JUMP JUMPDEST PUSH1 0xC0 PUSH2 0x552 PUSH2 0x53F PUSH2 0x52B PUSH2 0x517 PUSH1 0x40 DUP8 ADD MLOAD SWAP6 PUSH1 0x1F NOT SWAP7 DUP8 DUP12 DUP4 SUB ADD PUSH1 0x60 DUP13 ADD MSTORE PUSH2 0x414 JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MLOAD DUP7 DUP11 DUP4 SUB ADD PUSH1 0x80 DUP12 ADD MSTORE PUSH2 0x450 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD DUP6 DUP10 DUP4 SUB ADD PUSH1 0xA0 DUP11 ADD MSTORE PUSH2 0x450 JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD DUP5 DUP9 DUP4 SUB ADD DUP5 DUP10 ADD MSTORE PUSH2 0x450 JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 DUP5 DUP4 SUB ADD PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x450 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH0 SWAP2 SUB SLT PUSH2 0x2CC JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH2 0x58A PUSH2 0x2BA2 JUMP JUMPDEST PUSH1 0x20 PUSH1 0xFF PUSH1 0x9 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x80 PUSH1 0x4 CALLDATALOAD PUSH2 0x5BB DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x5C3 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x5CC DUP2 PUSH2 0x2BFC JUMP JUMPDEST PUSH2 0x5D5 DUP2 PUSH2 0x2EAB JUMP JUMPDEST PUSH2 0x602 SWAP3 SWAP2 SWAP3 PUSH32 0x0 DUP3 PUSH2 0x230E JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP2 PUSH1 0x40 MLOAD SWAP4 ISZERO ISZERO DUP5 MSTORE PUSH4 0xFFFFFFFF DUP1 SWAP3 AND PUSH1 0x20 DUP6 ADD MSTORE AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x4 CALLDATALOAD PUSH2 0x6A0 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x6A8 PUSH2 0x2BA2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0xE DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH2 0x6C7 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH2 0x140 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x2DE DUP3 PUSH2 0x74E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x2DE DUP3 PUSH2 0x715 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x2DE DUP3 PUSH2 0x731 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x160 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x2DE DUP3 PUSH2 0x6F4 JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x2CC JUMPI JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH2 0x2DE DUP3 PUSH2 0x7F6 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x710 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x2CC JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x83D DUP2 PUSH2 0x80B JUMP JUMPDEST SWAP4 PUSH2 0x84B PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x77E JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x2CC JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x874 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x866 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x710 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH2 0x8AB DUP3 PUSH2 0x883 JUMP JUMPDEST SWAP2 PUSH2 0x8B9 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x77E JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0x2CC JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x2CC JUMPI DUP2 PUSH1 0x20 PUSH2 0x310 SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0x89F JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x3 NOT PUSH1 0x40 DUP2 CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x90E DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP4 GT PUSH2 0x2CC JUMPI PUSH1 0xE0 SWAP1 DUP4 CALLDATASIZE SUB ADD SLT PUSH2 0x2CC JUMPI PUSH2 0x937 PUSH2 0x7A1 JUMP JUMPDEST SWAP1 PUSH2 0x944 DUP4 PUSH1 0x4 ADD PUSH2 0x800 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x24 DUP4 ADD CALLDATALOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x44 DUP4 ADD CALLDATALOAD DUP5 DUP2 GT PUSH2 0x2CC JUMPI PUSH2 0x96C SWAP1 PUSH1 0x4 CALLDATASIZE SWAP2 DUP7 ADD ADD PUSH2 0x823 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x64 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x84 DUP4 ADD CALLDATALOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x991 PUSH1 0xA4 DUP5 ADD PUSH2 0x2E0 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC4 DUP4 ADD CALLDATALOAD SWAP4 DUP5 GT PUSH2 0x2CC JUMPI PUSH2 0x9B8 PUSH2 0x9C2 SWAP4 PUSH1 0x4 PUSH2 0x564 SWAP7 CALLDATASIZE SWAP3 ADD ADD PUSH2 0x8D5 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x232B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x9EF DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x9F7 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0xA00 DUP2 PUSH2 0x2C47 JUMP JUMPDEST PUSH2 0xA4D PUSH1 0x20 PUSH1 0x80 PUSH2 0xA10 DUP5 PUSH2 0x2C94 JUMP JUMPDEST ADD MLOAD PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x984DE9E800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x40 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x450 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x24 DUP4 ADD MSTORE SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND GAS STATICCALL DUP1 ISZERO PUSH2 0xACF JUMPI PUSH2 0x564 SWAP3 PUSH2 0x9C2 SWAP3 PUSH0 SWAP3 PUSH2 0xA9A JUMPI JUMPDEST POP PUSH2 0xA93 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP1 PUSH2 0x3088 JUMP JUMPDEST PUSH2 0xA93 SWAP2 SWAP3 POP PUSH2 0xAC1 SWAP1 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xAC8 JUMPI JUMPDEST PUSH2 0xAB9 DUP2 DUP4 PUSH2 0x77E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2457 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0xA77 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xAAF JUMP JUMPDEST PUSH2 0x2483 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0xAF9 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0xB01 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0xB0A DUP2 PUSH2 0x2BFC JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 SHR AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0x310 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x450 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH2 0x564 PUSH1 0x80 PUSH2 0xB6E PUSH1 0x4 CALLDATALOAD PUSH2 0xB5D DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0xB65 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x4C0 DUP2 PUSH2 0x2BFC JUMP JUMPDEST ADD MLOAD PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x450 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0xBA3 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0xB95 JUMP JUMPDEST SWAP3 SWAP1 PUSH2 0xBD8 SWAP1 SWAP6 SWAP5 SWAP3 SWAP6 PUSH1 0x80 DUP6 MSTORE PUSH1 0x80 DUP6 ADD SWAP1 PUSH2 0xB84 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP5 DUP2 SUB PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x20 DUP1 DUP9 MLOAD SWAP3 DUP4 DUP2 MSTORE ADD SWAP8 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0xC21 JUMPI POP POP POP POP DUP5 PUSH2 0xC13 SWAP2 DUP5 PUSH2 0x310 SWAP7 SWAP8 SUB PUSH1 0x40 DUP7 ADD MSTORE PUSH2 0x450 JUMP JUMPDEST SWAP2 PUSH1 0x60 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x450 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP8 DUP3 PUSH2 0xC33 PUSH1 0x1 SWAP3 DUP12 MLOAD PUSH2 0x3E1 JUMP JUMPDEST SWAP10 ADD SWAP4 SWAP3 SWAP2 ADD PUSH2 0xBF2 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0xC5B DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0xC63 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0xC6C DUP2 PUSH2 0x2BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0xCA4 PUSH2 0xC9F DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0x248E JUMP JUMPDEST SWAP1 DUP2 MLOAD SWAP3 PUSH2 0xCB1 DUP5 PUSH2 0x2503 JUMP JUMPDEST SWAP4 PUSH2 0xCBB DUP2 PUSH2 0x2551 JUMP JUMPDEST SWAP2 PUSH2 0xCC5 DUP3 PUSH2 0x2551 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0xCE0 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0x564 DUP9 DUP9 DUP13 DUP13 DUP6 PUSH2 0xBC0 JUMP JUMPDEST DUP1 PUSH2 0xCF5 PUSH1 0x1 SWAP3 DUP5 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0xD4C PUSH2 0xD47 DUP11 PUSH2 0xD32 PUSH2 0xD25 DUP7 PUSH2 0xD1F DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP4 PUSH2 0x25AF JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0x25D4 JUMP JUMPDEST PUSH2 0xD56 DUP4 DUP13 PUSH2 0x25AF JUMP JUMPDEST MSTORE PUSH2 0xD61 DUP3 DUP12 PUSH2 0x25AF JUMP JUMPDEST POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0xD7F DUP4 DUP10 PUSH2 0x25AF JUMP JUMPDEST MSTORE PUSH1 0x80 SHR PUSH2 0xD8D DUP3 DUP10 PUSH2 0x25AF JUMP JUMPDEST MSTORE ADD PUSH2 0xCC8 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x4 CALLDATALOAD PUSH2 0xDB3 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0xDBB PUSH2 0x2BA2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0xE DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH2 0xE14 PUSH1 0x4 CALLDATALOAD PUSH2 0xDFE DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0xE06 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0xE0F DUP2 PUSH2 0x2BFC JUMP JUMPDEST PUSH2 0x2EAB JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x2CC JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x2CC JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x2CC JUMPI JUMP JUMPDEST PUSH1 0x20 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x2CC JUMPI PUSH2 0xE78 SWAP2 PUSH1 0x4 ADD PUSH2 0xE1F JUMP JUMPDEST SWAP1 SWAP2 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH0 DUP1 PUSH2 0xE8C CALLDATASIZE PUSH2 0xE4D JUMP JUMPDEST SWAP1 PUSH2 0xE95 PUSH2 0x30AC JUMP JUMPDEST PUSH2 0xE9D PUSH2 0x2BA2 JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP3 DUP4 CALLDATACOPY DUP2 ADD DUP4 DUP2 MSTORE SUB SWAP1 DUP3 CALLER GAS CALL PUSH2 0xEB9 PUSH2 0x2613 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0xF06 JUMPI SWAP1 PUSH2 0xECF DUP2 PUSH2 0xF02 SWAP4 CALLER PUSH2 0x3140 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x1E79 JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x4 DUP2 MLOAD LT PUSH2 0xF85 JUMPI PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP4 ADD MLOAD AND SUB PUSH2 0x3131 JUMPI PUSH32 0x28F9554100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 PUSH2 0xFC4 PUSH2 0x310 SWAP4 PUSH1 0x40 DUP5 MSTORE PUSH1 0x40 DUP5 ADD SWAP1 PUSH2 0x450 JUMP JUMPDEST SWAP2 PUSH1 0x20 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x450 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0xFEF DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0xFF7 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x1000 DUP2 PUSH2 0x2BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP2 PUSH1 0x40 MLOAD DUP1 SWAP4 DUP5 SWAP2 PUSH1 0x20 DUP3 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP4 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x10CA JUMPI POP POP POP PUSH2 0x1051 SWAP3 POP SUB DUP4 PUSH2 0x77E JUMP JUMPDEST PUSH2 0x105D DUP3 MLOAD DUP1 SWAP3 PUSH2 0x31CC JUMP JUMPDEST SWAP2 PUSH2 0x1067 DUP3 PUSH2 0x2551 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0x1080 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0x564 DUP9 DUP9 DUP4 PUSH2 0xFAD JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH2 0x10B9 PUSH2 0x10B4 PUSH2 0xD47 PUSH2 0x10A7 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0xD32 PUSH2 0xD25 DUP7 DUP11 PUSH2 0x25AF JUMP JUMPDEST PUSH2 0x321E JUMP JUMPDEST PUSH2 0x10C3 DUP3 DUP10 PUSH2 0x25AF JUMP JUMPDEST MSTORE ADD PUSH2 0x106A JUMP JUMPDEST DUP6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP3 AND AND DUP5 MSTORE PUSH1 0x1 SWAP6 DUP7 ADD SWAP6 DUP9 SWAP6 POP PUSH1 0x20 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x103B JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH2 0x110A PUSH2 0x2BA2 JUMP JUMPDEST PUSH1 0x20 PUSH32 0x0 TLOAD PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1198 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1164 CALLDATASIZE PUSH2 0x2EB JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x116E PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x1177 DUP2 PUSH2 0x2BFC JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x6 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH2 0x11BA PUSH2 0x2BA2 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xA SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH2 0x1218 PUSH1 0x4 CALLDATALOAD PUSH2 0x11F2 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x11FE DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x120B DUP4 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x1213 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x32FA JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x1245 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x124D PUSH2 0x2BA2 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH2 0x1218 PUSH1 0x4 CALLDATALOAD PUSH2 0x1286 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x128E PUSH2 0x2BA2 JUMP JUMPDEST PUSH32 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x12E3 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x12EF DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x64 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2CC JUMPI PUSH2 0x1313 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x823 JUMP JUMPDEST PUSH2 0x131B PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x1323 PUSH2 0x335C JUMP JUMPDEST PUSH2 0x132B PUSH2 0x33AD JUMP JUMPDEST PUSH2 0x1334 DUP5 PUSH2 0x2C47 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 DUP2 AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x20 SWAP1 PUSH0 PUSH1 0x20 MSTORE PUSH2 0x135D PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x1 SWAP1 PUSH1 0x3 SHR AND SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x1755 JUMPI PUSH2 0x137D DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP7 PUSH2 0x1386 PUSH2 0x2642 JUMP JUMPDEST SWAP3 PUSH2 0x13A5 PUSH2 0xC9F DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP1 DUP6 MSTORE MLOAD SWAP7 PUSH2 0x13BA PUSH1 0x40 DUP7 ADD SWAP9 DUP1 DUP11 MSTORE PUSH2 0x2551 JUMP JUMPDEST SWAP8 PUSH1 0x80 DUP7 ADD SWAP9 DUP10 MSTORE PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x140D JUMPI DUP1 PUSH2 0x13FB PUSH2 0x13E5 PUSH1 0x1 SWAP4 DUP16 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x1406 DUP3 DUP14 MLOAD PUSH2 0x25AF JUMP JUMPDEST MSTORE ADD PUSH2 0x13C4 JUMP JUMPDEST POP DUP10 SWAP9 SWAP7 SWAP8 SWAP9 PUSH2 0x143B DUP2 DUP10 MLOAD PUSH2 0x1434 DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP1 PUSH2 0x3427 JUMP JUMPDEST SWAP10 PUSH2 0x1446 DUP4 MLOAD PUSH2 0x2551 JUMP JUMPDEST SWAP6 PUSH1 0x60 DUP10 ADD SWAP7 DUP8 MSTORE PUSH2 0x14AD DUP12 PUSH32 0x0 TLOAD PUSH32 0x0 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP1 JUMP JUMPDEST ISZERO ISZERO PUSH1 0xA0 DUP11 ADD DUP2 DUP2 MSTORE SWAP6 SWAP1 PUSH2 0x1728 JUMPI JUMPDEST PUSH0 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x160D JUMPI PUSH2 0x14E9 DUP2 DUP16 DUP11 DUP15 DUP4 DUP15 PUSH2 0x14DB DUP15 MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x15BD JUMPI JUMPDEST POP POP POP POP PUSH2 0x25AF JUMP JUMPDEST MLOAD PUSH2 0x14F4 DUP3 DUP13 PUSH2 0x25AF JUMP JUMPDEST MLOAD GT PUSH2 0x1554 JUMPI DUP1 DUP13 DUP16 DUP3 PUSH2 0x1547 DUP16 DUP3 PUSH2 0x154D SWAP5 PUSH2 0x152E PUSH2 0x151D PUSH2 0xD25 PUSH1 0x1 SWAP12 PUSH2 0x1533 SWAP7 MLOAD PUSH2 0x25AF JUMP JUMPDEST PUSH2 0x1527 DUP5 DUP5 PUSH2 0x25AF JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x3498 JUMP JUMPDEST PUSH2 0x25AF JUMP JUMPDEST MLOAD SWAP4 MLOAD SWAP4 PUSH2 0x1541 DUP4 DUP7 PUSH2 0x25AF JUMP JUMPDEST MLOAD PUSH2 0x26B2 JUMP JUMPDEST SWAP3 PUSH2 0x25AF JUMP JUMPDEST MSTORE ADD PUSH2 0x14BF JUMP JUMPDEST DUP14 DUP11 PUSH2 0x157D DUP4 PUSH2 0x1576 DUP16 SWAP6 PUSH2 0x1570 PUSH2 0xD25 DUP3 PUSH2 0x15BA SWAP10 MLOAD PUSH2 0x25AF JUMP JUMPDEST SWAP6 PUSH2 0x25AF JUMP JUMPDEST MLOAD SWAP3 PUSH2 0x25AF JUMP JUMPDEST MLOAD PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST PUSH0 REVERT JUMPDEST PUSH2 0x15DC PUSH2 0x15EE SWAP4 PUSH2 0x15F9 SWAP6 PUSH2 0x15D2 DUP6 DUP10 PUSH2 0x25AF JUMP JUMPDEST MLOAD SWAP2 ADD MLOAD SWAP1 PUSH2 0x3476 JUMP JUMPDEST PUSH2 0x15E7 DUP4 DUP4 MLOAD PUSH2 0x25AF JUMP JUMPDEST MSTORE MLOAD PUSH2 0x25AF JUMP JUMPDEST MLOAD PUSH2 0x1541 DUP5 DUP5 PUSH2 0x25AF JUMP JUMPDEST PUSH2 0x1603 DUP4 DUP4 PUSH2 0x25AF JUMP JUMPDEST MSTORE DUP11 DUP15 DUP4 DUP15 PUSH2 0x14E0 JUMP JUMPDEST POP DUP11 SWAP6 POP SWAP2 DUP8 SWAP2 DUP14 SWAP4 DUP14 PUSH2 0x1632 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP7 PUSH0 JUMPDEST DUP10 MLOAD DUP2 LT ISZERO PUSH2 0x1683 JUMPI DUP1 PUSH2 0x166A DUP13 PUSH2 0x1663 DUP4 PUSH2 0x165B PUSH1 0x1 SWAP7 DUP16 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP3 MLOAD PUSH2 0x25AF JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x34D6 JUMP JUMPDEST PUSH2 0x167C DUP3 DUP13 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE ADD PUSH2 0x1635 JUMP JUMPDEST PUSH2 0x564 DUP9 PUSH0 DUP10 DUP10 PUSH32 0xFBE5B0D79FB94F1E81C0A92BF86AE9D3A19E9D1BF6202C0D3E75120F65D5D8A5 DUP11 DUP11 PUSH2 0x1701 PUSH2 0x16EF DUP13 PUSH2 0x16D8 DUP14 PUSH2 0x16C4 DUP2 CALLER DUP9 DUP7 PUSH2 0x34E4 JUMP JUMPDEST PUSH2 0x16CC PUSH2 0x3560 JUMP JUMPDEST PUSH2 0x1718 JUMPI JUMPDEST DUP6 DUP4 PUSH2 0x35C5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP6 MLOAD DUP9 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP5 AND SWAP8 DUP5 PUSH2 0x26BF JUMP JUMPDEST SUB SWAP1 LOG4 PUSH2 0x170C PUSH2 0x3402 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0xB27 JUMP JUMPDEST PUSH2 0x1723 DUP2 DUP8 DUP6 PUSH2 0x3582 JUMP JUMPDEST PUSH2 0x16D1 JUMP JUMPDEST PUSH2 0x174B PUSH2 0x1745 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x2F52 JUMP JUMPDEST PUSH1 0x20 DUP12 ADD MSTORE PUSH2 0x14BD JUMP JUMPDEST DUP4 PUSH32 0xEF029ADF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH2 0x1799 PUSH2 0x2BA2 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x9 SLOAD PUSH1 0x8 SHR AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH2 0x1837 PUSH1 0x4 CALLDATALOAD PUSH2 0x17D4 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x17DC PUSH2 0x2BA2 JUMP JUMPDEST PUSH32 0x0 TLOAD PUSH32 0x0 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x1866 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x186E PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x1877 DUP2 PUSH2 0x2BFC JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH2 0x1218 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x2F52 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH2 0x18A5 PUSH2 0x2BA2 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1 PUSH1 0x7 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0xC0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x18D4 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x18E1 DUP3 PUSH2 0x2BB JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP5 GT PUSH2 0x2CC JUMPI CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0x2CC JUMPI DUP4 PUSH1 0x4 ADD CALLDATALOAD PUSH2 0x190F DUP2 PUSH2 0x80B JUMP JUMPDEST SWAP5 PUSH2 0x191D PUSH1 0x40 MLOAD SWAP7 DUP8 PUSH2 0x77E JUMP JUMPDEST DUP2 DUP7 MSTORE PUSH1 0x20 SWAP2 PUSH1 0x24 PUSH1 0x20 DUP9 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x2CC JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1989 JUMPI POP POP POP POP PUSH1 0x64 CALLDATALOAD DUP4 DUP2 GT PUSH2 0x2CC JUMPI PUSH2 0x1960 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x823 JUMP JUMPDEST PUSH1 0xA4 CALLDATALOAD SWAP4 DUP5 GT PUSH2 0x2CC JUMPI PUSH2 0x564 SWAP5 PUSH2 0x197F PUSH2 0x9C2 SWAP6 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x8D5 JUMP JUMPDEST SWAP4 PUSH1 0x84 CALLDATALOAD SWAP4 PUSH2 0x26EA JUMP JUMPDEST DUP4 DUP1 SWAP2 DUP4 CALLDATALOAD PUSH2 0x1997 DUP2 PUSH2 0x2BB JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x193D JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x19C7 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x19CF PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x19D8 DUP2 PUSH2 0x2BFC JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x3 SHR AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x1A1B DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x1A23 PUSH2 0x2BA2 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2CC JUMPI PUSH2 0x1A6F SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xE1F JUMP JUMPDEST PUSH2 0x1A77 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x1A80 CALLER PUSH2 0x2BFC JUMP JUMPDEST DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH1 0x20 DUP5 MSTORE DUP2 PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD CALLDATACOPY PUSH0 PUSH1 0x40 DUP3 DUP5 ADD ADD MSTORE PUSH32 0x4BC4412E210115456903C65B5277D299A505E79F2EB852B92B1CA52D85856428 PUSH1 0x4 CALLDATALOAD SWAP3 PUSH1 0x40 DUP2 PUSH1 0x1F NOT PUSH1 0x1F CALLER SWAP7 ADD AND DUP2 ADD SUB ADD SWAP1 LOG3 STOP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0x310 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0xB84 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x1B03 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x1B0B PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x1B14 DUP2 PUSH2 0x2BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 PUSH1 0x20 DUP5 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP4 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1B67 JUMPI PUSH2 0x564 DUP6 PUSH2 0x1B5B DUP2 DUP10 SUB DUP3 PUSH2 0x77E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x1AD5 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP5 PUSH1 0x1 PUSH2 0x1B89 DUP2 SWAP3 DUP5 DUP10 SLOAD AND SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 SWAP3 AND DUP2 MSTORE ADD SWAP1 JUMP JUMPDEST SWAP7 ADD SWAP4 SWAP3 ADD SWAP1 PUSH2 0x1B44 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH2 0x160 PUSH2 0x1BF9 PUSH1 0x4 CALLDATALOAD PUSH2 0x1BB7 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x1BBF PUSH2 0x2891 JUMP JUMPDEST POP PUSH2 0x1BC8 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x1BD1 DUP2 PUSH2 0x2BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH2 0x3D80 JUMP JUMPDEST PUSH2 0x1C8A PUSH1 0x40 MLOAD DUP1 SWAP3 DUP1 MLOAD ISZERO ISZERO DUP3 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0x40 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0x60 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0x80 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0xA0 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0xC0 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0xE0 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 SWAP1 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 ADD MSTORE JUMP JUMPDEST RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH2 0x1CE2 PUSH2 0x2BA2 JUMP JUMPDEST PUSH1 0x20 PUSH32 0x0 TLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH2 0x1D4C PUSH1 0x4 CALLDATALOAD PUSH2 0x1D2E DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x1D3A DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x1D42 PUSH2 0x2BA2 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 CALLER PUSH2 0x3EBE JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x1D7C DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x1D84 PUSH2 0x2BA2 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x2DE SWAP1 SWAP3 SWAP2 SWAP3 PUSH1 0x60 DUP2 ADD SWAP4 PUSH1 0x40 SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH2 0x564 PUSH1 0x4 CALLDATALOAD PUSH2 0x1DEE DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x1DF6 PUSH2 0x24E5 JUMP JUMPDEST POP PUSH2 0x1DFF PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x1E08 DUP2 PUSH2 0x2BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x2 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1E2E DUP5 PUSH2 0x6F4 JUMP JUMPDEST DUP3 DUP2 SLOAD AND DUP5 MSTORE DUP3 PUSH1 0x1 DUP3 ADD SLOAD AND PUSH1 0x20 DUP6 ADD MSTORE ADD SLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x1D9B JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0x310 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x1E54 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH2 0x564 PUSH2 0x1ED3 PUSH0 DUP1 PUSH2 0x1EBA PUSH2 0x1EA3 CALLDATASIZE PUSH2 0xE4D JUMP JUMPDEST PUSH2 0x1EAB PUSH2 0x30AC JUMP JUMPDEST PUSH2 0x1EB3 PUSH2 0x2BA2 JUMP JUMPDEST CALLDATASIZE SWAP2 PUSH2 0x89F JUMP JUMPDEST PUSH1 0x20 DUP2 MLOAD SWAP2 ADD DUP3 CALLER GAS CALL PUSH2 0x1ECC PUSH2 0x2613 JUMP JUMPDEST SWAP1 CALLER PUSH2 0x3140 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1E54 JUMP JUMPDEST DUP1 ISZERO ISZERO SUB PUSH2 0x2CC JUMPI JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD SWAP1 PUSH2 0x2DE DUP3 PUSH2 0x1EE7 JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x2CC JUMPI JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x2CC JUMPI PUSH1 0xA4 SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDC PUSH1 0x80 SWAP2 ADD SLT PUSH2 0x2CC JUMPI PUSH2 0x124 SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH2 0x1A0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x1F8E DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2CC JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x2CC JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP2 PUSH2 0x1FBA DUP4 PUSH2 0x80B JUMP JUMPDEST SWAP2 PUSH1 0x40 SWAP4 PUSH2 0x1FCB PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x77E JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 SWAP1 PUSH1 0x24 PUSH1 0x20 DUP7 ADD SWAP2 PUSH1 0x7 SHL DUP5 ADD ADD SWAP3 CALLDATASIZE DUP5 GT PUSH2 0x2CC JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x202F JUMPI PUSH2 0x202D DUP7 DUP7 PUSH2 0x1FFF PUSH2 0x1EFE JUMP JUMPDEST PUSH2 0x2007 PUSH2 0x1EF1 JUMP JUMPDEST PUSH2 0x2010 CALLDATASIZE PUSH2 0x1F11 JUMP JUMPDEST SWAP2 PUSH2 0x2019 PUSH2 0x2D0 JUMP JUMPDEST SWAP4 PUSH2 0x2023 CALLDATASIZE PUSH2 0x1F40 JUMP JUMPDEST SWAP6 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x28F4 JUMP JUMPDEST STOP JUMPDEST PUSH1 0x80 DUP3 CALLDATASIZE SUB SLT PUSH2 0x2CC JUMPI DUP3 PUSH1 0x80 SWAP2 DUP9 MLOAD PUSH2 0x2048 DUP2 PUSH2 0x715 JUMP JUMPDEST DUP5 CALLDATALOAD PUSH2 0x2053 DUP2 PUSH2 0x2BB JUMP JUMPDEST DUP2 MSTORE DUP3 DUP6 ADD CALLDATALOAD PUSH2 0x2062 DUP2 PUSH2 0x7F6 JUMP JUMPDEST DUP4 DUP3 ADD MSTORE DUP10 DUP6 ADD CALLDATALOAD PUSH2 0x2073 DUP2 PUSH2 0x2BB JUMP JUMPDEST DUP11 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP7 ADD CALLDATALOAD SWAP1 PUSH2 0x2087 DUP3 PUSH2 0x1EE7 JUMP JUMPDEST DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x1FEB JUMP JUMPDEST PUSH2 0x2DE SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x180 PUSH2 0x1A0 DUP3 ADD SWAP5 PUSH2 0x20D6 DUP4 DUP3 MLOAD PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x210C PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0xE0 DUP6 ADD SWAP1 PUSH5 0xFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD MLOAD SWAP1 PUSH2 0x2127 PUSH2 0x100 SWAP3 DUP4 DUP7 ADD SWAP1 PUSH4 0xFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x215B PUSH1 0xC0 DUP3 ADD MLOAD SWAP3 PUSH2 0x2141 PUSH2 0x120 SWAP5 DUP6 DUP9 ADD SWAP1 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MLOAD ISZERO ISZERO PUSH2 0x140 DUP8 ADD MSTORE DUP3 ADD MLOAD ISZERO ISZERO PUSH2 0x160 DUP7 ADD MSTORE JUMP JUMPDEST ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH2 0x564 PUSH2 0x21F2 PUSH1 0x4 CALLDATALOAD PUSH2 0x2187 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH0 PUSH2 0x120 PUSH1 0x40 MLOAD PUSH2 0x2197 DUP2 PUSH2 0x731 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x21A3 DUP2 PUSH2 0x715 JUMP JUMPDEST DUP4 DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP4 PUSH1 0x40 DUP3 ADD MSTORE DUP4 PUSH1 0x60 DUP3 ADD MSTORE DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE DUP3 PUSH1 0xC0 DUP3 ADD MSTORE DUP3 PUSH1 0xE0 DUP3 ADD MSTORE DUP3 PUSH2 0x100 DUP3 ADD MSTORE ADD MSTORE PUSH2 0x2A1A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x2095 JUMP JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH2 0x225E PUSH1 0x4 CALLDATALOAD PUSH2 0x2220 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x24 CALLDATALOAD SWAP2 PUSH2 0x2235 DUP4 PUSH2 0x2BB JUMP JUMPDEST PUSH2 0x223D PUSH2 0x2BA2 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0xF DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2CC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2CC JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x22B7 DUP3 PUSH2 0x74E JUMP JUMPDEST DUP2 PUSH0 DUP2 MSTORE PUSH1 0xC0 PUSH1 0x60 SWAP2 DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 DUP1 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 PUSH4 0xFFFFFFFF DUP1 DUP1 SWAP5 AND SWAP2 AND ADD SWAP2 DUP3 GT PUSH2 0x2326 JUMPI JUMP JUMPDEST PUSH2 0x22E1 JUMP JUMPDEST PUSH2 0x23A8 SWAP2 PUSH2 0x2337 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x2340 DUP3 PUSH2 0x2C47 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP4 AND SWAP1 DUP2 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP4 DUP5 SWAP4 PUSH2 0x2365 DUP6 PUSH0 KECCAK256 SLOAD PUSH2 0x2F52 JUMP JUMPDEST SWAP4 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE DUP5 PUSH0 KECCAK256 SLOAD AND SWAP2 DUP5 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP4 DUP5 SWAP4 PUSH32 0xA0E8F5AC00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD PUSH2 0x2F9F JUMP JUMPDEST SUB SWAP2 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xACF JUMPI PUSH0 SWAP2 PUSH0 SWAP4 PUSH2 0x2425 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x23FD JUMPI PUSH8 0xDE0B5CAD2BEF000 DUP2 GT PUSH2 0x23D5 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x746E594000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x53F976D400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x2448 SWAP4 POP DUP1 SWAP2 SWAP3 POP SWAP1 RETURNDATASIZE LT PUSH2 0x2450 JUMPI JUMPDEST PUSH2 0x2440 DUP2 DUP4 PUSH2 0x77E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2F80 JUMP JUMPDEST SWAP1 PUSH0 DUP1 PUSH2 0x23BC JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2436 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x2CC JUMPI MLOAD SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x20 PUSH2 0x247E PUSH1 0x1 SWAP3 PUSH1 0x40 DUP7 MSTORE PUSH1 0x40 DUP7 ADD SWAP1 PUSH2 0x450 JUMP JUMPDEST SWAP4 ADD MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP2 DUP3 DUP2 SLOAD SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP3 PUSH1 0x20 DUP4 ADD SWAP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP4 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x24C2 JUMPI POP POP POP PUSH2 0x2DE SWAP3 POP SUB DUP4 PUSH2 0x77E JUMP JUMPDEST DUP6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 MSTORE PUSH1 0x1 SWAP6 DUP7 ADD SWAP6 DUP9 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x24AC JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x24F2 DUP3 PUSH2 0x6F4 JUMP JUMPDEST PUSH0 PUSH1 0x40 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 PUSH2 0x250D DUP3 PUSH2 0x80B JUMP JUMPDEST PUSH2 0x251A PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x77E JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x252A DUP3 SWAP5 PUSH2 0x80B JUMP JUMPDEST ADD SWAP1 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x253A JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH2 0x2545 PUSH2 0x24E5 JUMP JUMPDEST DUP3 DUP3 DUP6 ADD ADD MSTORE ADD PUSH2 0x252E JUMP JUMPDEST SWAP1 PUSH2 0x255B DUP3 PUSH2 0x80B JUMP JUMPDEST PUSH2 0x2568 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x77E JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x2578 DUP3 SWAP5 PUSH2 0x80B JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x25C3 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH2 0x2582 JUMP JUMPDEST PUSH2 0x25D1 DUP3 PUSH2 0x3AA JUMP JUMPDEST MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD PUSH2 0x25E1 DUP2 PUSH2 0x6F4 JUMP JUMPDEST PUSH1 0x40 PUSH1 0xFF DUP3 SWAP5 SLOAD DUP2 DUP2 AND PUSH2 0x25F4 DUP2 PUSH2 0x3AA JUMP JUMPDEST DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 PUSH1 0x8 SHR AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0xA8 SHR AND ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x263D JUMPI RETURNDATASIZE SWAP1 PUSH2 0x2624 DUP3 PUSH2 0x883 JUMP JUMPDEST SWAP2 PUSH2 0x2632 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x77E JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0xC0 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE PUSH0 PUSH1 0xA0 DUP4 PUSH1 0x60 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x80 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BDC0 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x2326 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x2326 JUMPI JUMP JUMPDEST SWAP2 PUSH2 0x26DC SWAP1 PUSH2 0x310 SWAP5 SWAP3 DUP5 MSTORE PUSH1 0x60 PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD SWAP1 PUSH2 0x450 JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x450 JUMP JUMPDEST SWAP4 SWAP6 SWAP5 SWAP2 SWAP6 SWAP3 SWAP1 SWAP3 PUSH2 0x26FA PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x2702 PUSH2 0x335C JUMP JUMPDEST PUSH2 0x270B DUP6 PUSH2 0x2BFC JUMP JUMPDEST PUSH2 0x2713 PUSH2 0x33AD JUMP JUMPDEST PUSH2 0x271C DUP6 PUSH2 0x3796 JUMP JUMPDEST PUSH2 0x2725 DUP6 PUSH2 0x2C94 JUMP JUMPDEST SWAP2 PUSH2 0x2734 DUP4 MLOAD PUSH1 0x1 SWAP1 DUP2 SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x285C JUMPI PUSH2 0x279D SWAP7 SWAP8 PUSH2 0x274E PUSH1 0x20 DUP6 ADD MLOAD MLOAD DUP4 MLOAD SWAP1 PUSH2 0x37E4 JUMP JUMPDEST PUSH1 0xC0 DUP5 ADD SWAP6 DUP7 MLOAD PUSH2 0x2766 PUSH1 0xA0 DUP8 ADD SWAP2 DUP3 MLOAD SWAP1 DUP7 PUSH2 0x3813 JUMP JUMPDEST SWAP8 DUP10 PUSH2 0x2777 DUP9 MLOAD PUSH1 0x1 SWAP1 PUSH1 0x8 SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x27EB JUMPI JUMPDEST DUP10 SWAP5 SWAP3 POP DUP8 SWAP2 POP SWAP3 PUSH2 0x278F SWAP7 SWAP6 SWAP4 PUSH2 0x39FC JUMP JUMPDEST SWAP5 DUP6 SWAP2 MLOAD PUSH1 0x1 SWAP1 PUSH1 0xA SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x27AE JUMPI JUMPDEST POP POP POP POP PUSH2 0x310 PUSH2 0x3402 JUMP JUMPDEST PUSH2 0x27DC PUSH2 0x27CF PUSH2 0x27E2 SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 PUSH2 0x3CB4 JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP4 PUSH2 0x27A2 JUMP JUMPDEST SWAP2 PUSH2 0x284F SWAP2 PUSH2 0x2821 DUP10 SWAP12 DUP12 PUSH2 0x281B PUSH2 0x27CF PUSH2 0x278F SWAP13 SWAP12 SWAP10 SWAP11 SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x38B9 JUMP JUMPDEST PUSH2 0x2845 PUSH2 0x283F DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP11 PUSH2 0x398F JUMP JUMPDEST MLOAD SWAP1 MLOAD SWAP1 DUP5 PUSH2 0x3813 JUMP JUMPDEST SWAP8 DUP2 SWAP4 SWAP3 SWAP5 SWAP6 POP DUP10 PUSH2 0x277C JUMP JUMPDEST PUSH32 0x218E374700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x160 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE PUSH0 PUSH2 0x140 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE DUP3 PUSH1 0xC0 DUP3 ADD MSTORE DUP3 PUSH1 0xE0 DUP3 ADD MSTORE DUP3 PUSH2 0x100 DUP3 ADD MSTORE DUP3 PUSH2 0x120 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP5 SWAP7 SWAP3 PUSH4 0xFFFFFFFF SWAP2 SWAP7 SWAP5 SWAP3 PUSH2 0x2908 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x2910 PUSH2 0x33AD JUMP JUMPDEST PUSH2 0x2918 PUSH2 0x3FEE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP8 PUSH2 0x2925 DUP10 PUSH2 0x74E JUMP JUMPDEST DUP9 MSTORE PUSH1 0x20 DUP9 ADD MSTORE AND PUSH1 0x40 DUP7 ADD MSTORE ISZERO ISZERO PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x60 DUP6 CALLDATASIZE SUB SLT PUSH2 0x2CC JUMPI PUSH2 0x29A1 PUSH2 0x29A8 SWAP3 PUSH2 0x29B2 SWAP7 PUSH1 0x40 DUP1 MLOAD SWAP2 PUSH2 0x295C DUP4 PUSH2 0x6F4 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x2967 DUP2 PUSH2 0x2BB JUMP JUMPDEST DUP4 MSTORE PUSH1 0x20 DUP2 ADD CALLDATALOAD PUSH2 0x2977 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MSTORE ADD CALLDATALOAD PUSH2 0x2987 DUP2 PUSH2 0x2BB JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 DUP8 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 DUP7 ADD MSTORE JUMP JUMPDEST CALLDATASIZE SWAP1 PUSH2 0x29BA JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x44DA JUMP JUMPDEST PUSH2 0x2DE PUSH2 0x3402 JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x80 SWAP2 SUB SLT PUSH2 0x2CC JUMPI PUSH1 0x40 MLOAD PUSH2 0x29D2 DUP2 PUSH2 0x715 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 SWAP5 DUP1 CALLDATALOAD PUSH2 0x29E2 DUP2 PUSH2 0x1EE7 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP2 ADD CALLDATALOAD PUSH2 0x29F2 DUP2 PUSH2 0x1EE7 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD CALLDATALOAD PUSH2 0x2A05 DUP2 PUSH2 0x1EE7 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MSTORE ADD CALLDATALOAD SWAP2 PUSH2 0x2A16 DUP4 PUSH2 0x1EE7 JUMP JUMPDEST ADD MSTORE JUMP JUMPDEST PUSH2 0x2A45 SWAP1 PUSH2 0x2A26 PUSH2 0x2BA2 JUMP JUMPDEST PUSH2 0x2A2F DUP2 PUSH2 0x2BFC JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x310 PUSH1 0x1 PUSH2 0x2A54 DUP4 PUSH2 0x2F52 JUMP JUMPDEST SWAP3 PUSH2 0x2AFD PUSH2 0x2A61 DUP3 PUSH2 0x4FC2 JUMP JUMPDEST PUSH2 0x2AF0 PUSH2 0x2A6D DUP5 PUSH2 0x4FE5 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF DUP6 PUSH1 0x5A SHR AND SWAP1 PUSH4 0xFFFFFFFF DUP7 PUSH2 0x2A87 PUSH1 0x82 SWAP1 JUMP JUMPDEST SHR AND SWAP4 PUSH2 0x2A92 PUSH2 0x7AE JUMP JUMPDEST PUSH1 0x4 DUP9 SWAP1 SHR DUP10 AND ISZERO ISZERO DUP2 MSTORE SWAP10 PUSH1 0x5 DUP9 SWAP1 SHR DUP10 AND ISZERO ISZERO PUSH1 0x20 DUP13 ADD MSTORE PUSH1 0x6 DUP9 SWAP1 SHR DUP10 AND ISZERO ISZERO PUSH1 0x40 DUP13 ADD MSTORE PUSH1 0x7 DUP9 SWAP1 SHR DUP10 AND ISZERO ISZERO PUSH1 0x60 DUP13 ADD MSTORE PUSH2 0x2AD0 PUSH2 0x7BB JUMP JUMPDEST SWAP11 DUP12 MSTORE PUSH1 0x20 DUP12 ADD MSTORE PUSH1 0x40 DUP11 ADD MSTORE PUSH1 0x60 DUP10 ADD MSTORE PUSH5 0xFFFFFFFFFF AND PUSH1 0x80 DUP9 ADD MSTORE JUMP JUMPDEST PUSH4 0xFFFFFFFF AND PUSH1 0xA0 DUP7 ADD MSTORE JUMP JUMPDEST DUP1 DUP3 AND ISZERO ISZERO PUSH1 0xC0 DUP6 ADD MSTORE DUP1 DUP3 SHR DUP3 AND ISZERO ISZERO PUSH1 0xE0 DUP6 ADD MSTORE PUSH1 0x2 DUP2 SWAP1 SHR DUP3 AND ISZERO ISZERO PUSH2 0x100 DUP6 ADD MSTORE PUSH1 0x3 SHR AND ISZERO ISZERO PUSH2 0x120 DUP4 ADD MSTORE JUMP JUMPDEST PUSH32 0xF223889600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2B30 JUMPI CALLDATASIZE PUSH0 DUP1 CALLDATACOPY PUSH0 DUP1 CALLDATASIZE DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS DELEGATECALL RETURNDATASIZE PUSH0 DUP1 RETURNDATACOPY ISZERO PUSH2 0x2B9E JUMPI RETURNDATASIZE PUSH0 RETURN JUMPDEST RETURNDATASIZE PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND ADDRESS SUB PUSH2 0x2BD4 JUMPI JUMP JUMPDEST PUSH32 0x9FD25B3600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x2C1C JUMPI POP JUMP JUMPDEST PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 SHR AND ISZERO PUSH2 0x2C69 JUMPI POP JUMP JUMPDEST PUSH32 0x4BDACE1300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2CA5 PUSH2 0x22AA JUMP JUMPDEST SWAP3 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH0 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SLOAD SWAP1 PUSH1 0x4 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SWAP1 PUSH1 0x3 PUSH1 0x20 MSTORE DUP4 PUSH0 KECCAK256 SWAP4 DUP5 SLOAD SWAP4 DUP8 MSTORE PUSH2 0x2CE0 PUSH1 0x20 DUP9 ADD SWAP6 PUSH2 0x5008 JUMP JUMPDEST DUP6 MSTORE PUSH2 0x2CEB DUP5 PUSH2 0x2503 JUMP JUMPDEST SWAP2 DUP2 DUP9 ADD SWAP3 DUP4 MSTORE PUSH2 0x2CFB DUP6 PUSH2 0x2551 JUMP JUMPDEST SWAP2 PUSH1 0x60 DUP10 ADD SWAP3 DUP4 MSTORE PUSH2 0x2D0C DUP7 PUSH2 0x2551 JUMP JUMPDEST SWAP5 PUSH1 0x80 SWAP6 PUSH1 0x80 DUP12 ADD MSTORE PUSH2 0x2D20 DUP8 DUP12 MLOAD PUSH2 0x31CC JUMP JUMPDEST PUSH1 0xC0 DUP12 ADD MSTORE PUSH2 0x2D2E DUP8 PUSH2 0x2551 JUMP JUMPDEST PUSH1 0xA0 DUP12 ADD SWAP1 DUP2 MSTORE DUP11 MLOAD SWAP2 PUSH1 0x1 SWAP10 PUSH1 0x1 DUP5 DUP2 SHR AND SWAP4 DUP5 PUSH2 0x2E97 JUMPI JUMPDEST POP DUP4 PUSH2 0x2E85 JUMPI JUMPDEST DUP13 PUSH0 JUMPDEST DUP12 DUP2 LT PUSH2 0x2D68 JUMPI POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP11 DUP14 SWAP3 DUP3 DUP13 DUP13 DUP13 PUSH2 0x2DAF DUP5 PUSH2 0x2D9B DUP2 PUSH2 0x2D8D PUSH2 0xD47 DUP16 DUP16 PUSH2 0xD25 DUP6 PUSH2 0xD32 SWAP3 MLOAD PUSH2 0x25AF JUMP JUMPDEST SWAP5 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP5 MLOAD DUP4 PUSH2 0x2DA9 DUP4 DUP4 PUSH2 0x25AF JUMP JUMPDEST MSTORE PUSH2 0x25AF JUMP JUMPDEST POP PUSH2 0x2DB9 DUP2 PUSH2 0x321E JUMP JUMPDEST PUSH2 0x2DC4 DUP6 DUP14 MLOAD PUSH2 0x25AF JUMP JUMPDEST MSTORE PUSH2 0x2DE2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP6 DUP8 PUSH2 0x5238 JUMP JUMPDEST DUP8 DUP14 DUP14 ISZERO PUSH2 0x2E78 JUMPI DUP3 ADD MLOAD ISZERO ISZERO SWAP2 DUP3 PUSH2 0x2E5A JUMPI JUMPDEST POP POP PUSH2 0x2E0B JUMPI JUMPDEST POP POP POP POP POP JUMPDEST ADD DUP14 SWAP1 PUSH2 0x2D52 JUMP JUMPDEST DUP3 PUSH2 0x2E2E SWAP3 PUSH2 0x2E25 DUP3 PUSH2 0x2E1E DUP9 MLOAD PUSH2 0x4FE5 JUMP JUMPDEST SWAP5 MLOAD PUSH2 0x25AF JUMP JUMPDEST MLOAD SWAP7 SHR DUP6 PUSH2 0x57A3 JUMP JUMPDEST SWAP3 DUP4 PUSH2 0x2E3E JUMPI JUMPDEST DUP15 SWAP4 POP DUP13 PUSH2 0x2DFD JUMP JUMPDEST PUSH2 0x2E51 SWAP4 PUSH2 0x2E4B SWAP2 PUSH2 0x26B2 JUMP JUMPDEST SWAP2 PUSH2 0x5238 JUMP JUMPDEST PUSH0 DUP16 DUP3 DUP3 PUSH2 0x2E35 JUMP JUMPDEST SWAP1 SWAP2 POP MLOAD PUSH2 0x2E67 DUP2 PUSH2 0x3AA JUMP JUMPDEST PUSH2 0x2E70 DUP2 PUSH2 0x3AA JUMP JUMPDEST EQ DUP8 PUSH0 PUSH2 0x2DF6 JUMP JUMPDEST POP POP POP POP POP POP POP POP PUSH2 0x2E03 JUMP JUMPDEST DUP13 MLOAD SWAP1 SWAP4 POP PUSH1 0x3 SHR PUSH1 0x1 AND ISZERO SWAP3 PUSH2 0x2D4F JUMP JUMPDEST PUSH2 0x2EA2 SWAP2 SWAP5 POP PUSH2 0x4FE5 JUMP JUMPDEST ISZERO ISZERO SWAP3 PUSH0 PUSH2 0x2D48 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x2 SHR AND PUSH4 0xFFFFFFFF DUP1 SWAP4 PUSH2 0x2ED6 PUSH1 0x82 SWAP1 JUMP JUMPDEST SHR AND SWAP3 DUP2 PUSH2 0x2EE3 JUMPI POP SWAP2 SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x2F0F PUSH32 0x0 DUP5 PUSH2 0x230E JUMP JUMPDEST AND TIMESTAMP GT ISZERO SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x1 SWAP2 AND ADD SWAP1 PUSH1 0xFF DUP3 GT PUSH2 0x2326 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x5 DUP3 MUL SWAP2 DUP1 DUP4 DIV PUSH1 0x5 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2326 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x2326 JUMPI JUMP JUMPDEST PUSH3 0xFFFFFF SWAP1 PUSH1 0x12 SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2326 JUMPI SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x2DE DUP3 PUSH2 0x1EE7 JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x2CC JUMPI PUSH1 0x20 DUP3 MLOAD PUSH2 0x2F99 DUP2 PUSH2 0x1EE7 JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2A16 PUSH2 0x303F PUSH1 0x40 SWAP4 SWAP7 SWAP6 SWAP5 SWAP7 PUSH1 0x60 DUP5 MSTORE DUP1 MLOAD PUSH2 0x2FBB DUP2 PUSH2 0x3AA JUMP JUMPDEST PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xC0 PUSH2 0x2FE5 DUP7 DUP4 ADD MLOAD PUSH1 0xE0 PUSH1 0xA0 DUP9 ADD MSTORE PUSH2 0x140 DUP8 ADD SWAP1 PUSH2 0x450 JUMP JUMPDEST SWAP2 PUSH1 0x60 DUP2 ADD MLOAD DUP3 DUP8 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xE0 DUP8 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH2 0x100 DUP8 ADD MSTORE ADD MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 DUP6 DUP4 SUB ADD PUSH2 0x120 DUP7 ADD MSTORE PUSH2 0x1E54 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP7 AND PUSH1 0x20 DUP4 ADD MSTORE JUMP JUMPDEST DUP2 ISZERO PUSH2 0x305B JUMPI DIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2326 JUMPI PUSH2 0x310 SWAP2 PUSH2 0x3051 JUMP JUMPDEST ORIGIN PUSH2 0x3109 JUMPI PUSH1 0x1 PUSH1 0x7 SLOAD AND PUSH2 0x30E1 JUMPI PUSH1 0x1 PUSH32 0x0 TSTORE JUMP JUMPDEST PUSH32 0x7A19888600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x67F84AB200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 MLOAD ISZERO PUSH2 0xF85 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST SWAP1 PUSH2 0x317D JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x3155 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x31C3 JUMPI JUMPDEST PUSH2 0x318E JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x3186 JUMP JUMPDEST SWAP1 PUSH5 0xFFFFFFFFFF PUSH2 0x31DC DUP3 PUSH2 0x2551 JUMP JUMPDEST SWAP3 PUSH1 0x5A SHR AND PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x31F0 JUMPI POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x1F DUP3 PUSH2 0x31FC DUP4 PUSH2 0x2F29 JUMP JUMPDEST SHR AND SWAP1 PUSH1 0x4D DUP3 GT PUSH2 0x2326 JUMPI PUSH1 0x1 SWAP2 PUSH1 0xA EXP PUSH2 0x3217 DUP3 DUP8 PUSH2 0x25AF JUMP JUMPDEST MSTORE ADD PUSH2 0x31E3 JUMP JUMPDEST DUP1 MLOAD PUSH2 0x3229 DUP2 PUSH2 0x3AA JUMP JUMPDEST PUSH2 0x3232 DUP2 PUSH2 0x3AA JUMP JUMPDEST DUP1 PUSH2 0x3245 JUMPI POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x3251 PUSH1 0x1 SWAP3 PUSH2 0x3AA JUMP JUMPDEST SUB PUSH2 0x32D2 JUMPI PUSH1 0x20 PUSH2 0x327C PUSH2 0x3270 DUP3 PUSH1 0x4 SWAP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0x679AEFCE00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xACF JUMPI PUSH0 SWAP2 PUSH2 0x32B9 JUMPI POP SWAP1 JUMP JUMPDEST PUSH2 0x310 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xAC8 JUMPI PUSH2 0xAB9 DUP2 DUP4 PUSH2 0x77E JUMP JUMPDEST PUSH32 0xDF45063200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP2 DUP4 DUP2 AND DUP5 DUP5 AND SUB PUSH2 0x3318 JUMPI POP POP POP POP PUSH0 NOT SWAP1 JUMP JUMPDEST PUSH2 0x3358 SWAP4 PUSH2 0x3342 SWAP3 AND PUSH0 MSTORE PUSH1 0x10 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST PUSH32 0x0 TLOAD ISZERO PUSH2 0x3385 JUMPI JUMP JUMPDEST PUSH32 0xC09BA73600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x33DA JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE JUMP JUMPDEST SWAP3 SWAP2 PUSH2 0x3433 DUP5 MLOAD PUSH2 0x2551 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x3470 JUMPI DUP1 PUSH2 0x345F DUP6 PUSH2 0x345A DUP7 PUSH2 0x3454 PUSH1 0x1 SWAP7 DUP9 PUSH2 0x25AF JUMP JUMPDEST MLOAD PUSH2 0x2F3F JUMP JUMPDEST PUSH2 0x3051 JUMP JUMPDEST PUSH2 0x3469 DUP3 DUP10 PUSH2 0x25AF JUMP JUMPDEST MSTORE ADD PUSH2 0x3436 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST SWAP1 PUSH2 0x3480 SWAP2 PUSH2 0x2F3F JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x34A2 SWAP1 PUSH2 0x505F JUMP JUMPDEST SWAP1 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP3 EQ PUSH2 0x2326 JUMPI PUSH2 0x2DE SWAP2 PUSH0 SUB SWAP1 PUSH2 0x50B4 JUMP JUMPDEST SWAP1 PUSH2 0x310 SWAP2 PUSH1 0x80 SHR SWAP1 PUSH2 0x519C JUMP JUMPDEST SWAP2 SWAP1 SWAP4 SWAP3 SWAP4 PUSH2 0x34F4 DUP3 DUP3 DUP6 PUSH2 0x32FA JUMP JUMPDEST PUSH0 NOT DUP2 SUB PUSH2 0x3505 JUMPI JUMPDEST POP POP POP POP SWAP1 POP JUMP JUMPDEST DUP1 DUP7 GT PUSH2 0x3523 JUMPI SWAP5 PUSH2 0x3519 SWAP5 SWAP6 SUB SWAP3 PUSH2 0x3EBE JUMP JUMPDEST DUP1 PUSH0 DUP1 DUP1 DUP1 PUSH2 0x34FD JUMP JUMPDEST DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 PUSH32 0xFB8F41B200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST ORIGIN ISZERO DUP1 PUSH2 0x356A JUMPI SWAP1 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x7 SLOAD AND ISZERO SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x2326 JUMPI JUMP JUMPDEST SWAP1 ORIGIN PUSH2 0x3109 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x35B6 SWAP3 AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP1 SLOAD SWAP2 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x2326 JUMPI SSTORE JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 DUP4 ISZERO PUSH2 0x3761 JUMPI PUSH2 0x35F8 DUP6 PUSH2 0x3342 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD DUP1 DUP5 GT PUSH2 0x3724 JUMPI DUP4 SWAP1 SUB PUSH2 0x3622 DUP7 PUSH2 0x3342 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0x3648 DUP4 PUSH2 0x3642 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x26B2 JUMP JUMPDEST PUSH2 0x3651 DUP2 PUSH2 0x5200 JUMP JUMPDEST PUSH2 0x366C DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP1 DUP2 EXTCODESIZE ISZERO PUSH2 0x2CC JUMPI PUSH1 0x40 MLOAD PUSH32 0x23DE665100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP5 AND PUSH1 0x4 DUP6 ADD MSTORE PUSH0 PUSH1 0x24 DUP6 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP6 ADD DUP3 SWAP1 MSTORE SWAP4 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F SWAP2 PUSH2 0x3706 SWAP2 DUP7 DUP2 DUP1 PUSH1 0x64 DUP2 ADD JUMPDEST SUB DUP2 DUP4 DUP10 GAS CALL PUSH2 0x370B JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG4 JUMP JUMPDEST DUP1 PUSH2 0x3718 PUSH2 0x371E SWAP3 PUSH2 0x76A JUMP JUMPDEST DUP1 PUSH2 0x568 JUMP JUMPDEST PUSH0 PUSH2 0x36F5 JUMP JUMPDEST PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 DUP4 SWAP1 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH32 0x96C6FD1E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x379E PUSH2 0x3FEE JUMP JUMPDEST PUSH2 0x37A7 DUP2 PUSH2 0x2EAB JUMP JUMPDEST POP PUSH2 0x37AF JUMPI POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0xD971F59700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SUB PUSH2 0x37EB JUMPI JUMP JUMPDEST PUSH32 0xAAAD13F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 MLOAD SWAP2 DUP2 MLOAD DUP2 MLOAD DUP2 DUP6 EQ SWAP2 DUP3 ISZERO SWAP3 PUSH2 0x3899 JUMPI JUMPDEST POP POP PUSH2 0x37EB JUMPI PUSH2 0x3837 DUP4 PUSH2 0x2551 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x3849 JUMPI POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x3887 PUSH2 0x3862 PUSH1 0x1 SWAP5 DUP7 PUSH2 0x25AF JUMP JUMPDEST MLOAD PUSH2 0x3882 PUSH2 0x3870 DUP6 DUP11 PUSH2 0x25AF JUMP JUMPDEST MLOAD PUSH2 0x387B DUP7 DUP11 PUSH2 0x25AF JUMP JUMPDEST MLOAD SWAP3 PUSH2 0x2F3F JUMP JUMPDEST PUSH2 0x2F3F JUMP JUMPDEST DIV PUSH2 0x3892 DUP3 DUP10 PUSH2 0x25AF JUMP JUMPDEST MSTORE ADD PUSH2 0x383A JUMP JUMPDEST EQ ISZERO SWAP1 POP PUSH0 DUP1 PUSH2 0x3828 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x2CC JUMPI MLOAD PUSH2 0x310 DUP2 PUSH2 0x1EE7 JUMP JUMPDEST SWAP1 PUSH2 0x391D SWAP3 PUSH2 0x390B PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 SWAP6 PUSH1 0x40 MLOAD SWAP8 DUP9 SWAP7 DUP8 SWAP6 DUP7 SWAP4 PUSH32 0x1C149E2800000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x40 PUSH1 0x4 DUP7 ADD MSTORE PUSH1 0x44 DUP6 ADD SWAP1 PUSH2 0x450 JUMP JUMPDEST SWAP1 PUSH1 0x3 NOT DUP5 DUP4 SUB ADD PUSH1 0x24 DUP6 ADD MSTORE PUSH2 0x1E54 JUMP JUMPDEST SUB SWAP4 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xACF JUMPI PUSH0 SWAP2 PUSH2 0x3960 JUMPI JUMPDEST POP ISZERO PUSH2 0x3938 JUMPI JUMP JUMPDEST PUSH32 0x6061292500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x3982 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3988 JUMPI JUMPDEST PUSH2 0x397A DUP2 DUP4 PUSH2 0x77E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x38A4 JUMP JUMPDEST PUSH0 PUSH2 0x3930 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3970 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD MLOAD MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x39A7 JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH2 0x39F6 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH2 0x39D6 PUSH2 0x39D0 DUP6 DUP4 DUP12 ADD MLOAD PUSH2 0x25AF JUMP JUMPDEST MLOAD PUSH2 0x321E JUMP JUMPDEST PUSH2 0x39E4 DUP6 PUSH1 0xA0 DUP12 ADD MLOAD PUSH2 0x25AF JUMP JUMPDEST MSTORE DUP4 PUSH0 MSTORE DUP6 DUP8 MSTORE PUSH0 KECCAK256 SLOAD AND DUP3 DUP8 PUSH2 0x5238 JUMP JUMPDEST ADD PUSH2 0x3999 JUMP JUMPDEST SWAP3 SWAP2 SWAP6 SWAP7 SWAP5 SWAP7 PUSH2 0x3A1D DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP6 PUSH0 JUMPDEST PUSH1 0x20 DUP10 ADD MLOAD DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x3AFB JUMPI PUSH2 0xD25 DUP3 PUSH2 0x3A3B SWAP3 PUSH2 0x25AF JUMP JUMPDEST PUSH2 0x3A4B PUSH2 0x3270 PUSH2 0xD25 DUP5 DUP10 PUSH2 0x25AF JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 DUP2 SUB PUSH2 0x3AA7 JUMPI POP SWAP1 PUSH2 0x3A75 PUSH1 0x1 SWAP3 PUSH2 0x3A6E DUP4 DUP12 PUSH2 0x25AF JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x5285 JUMP JUMPDEST PUSH2 0x3A8E DUP12 PUSH2 0x3A87 DUP4 PUSH2 0x1576 DUP2 DUP14 PUSH2 0x25AF JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x519C JUMP JUMPDEST PUSH2 0x3AA0 DUP3 DUP12 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE ADD PUSH2 0x3A20 JUMP JUMPDEST PUSH2 0x15BA SWAP1 DUP9 PUSH2 0x3ABC PUSH2 0x3270 PUSH2 0xD25 DUP8 DUP13 PUSH2 0x25AF JUMP JUMPDEST PUSH32 0xFFE261A100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x4 MSTORE DUP2 AND PUSH1 0x24 MSTORE AND PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST POP POP SWAP7 SWAP5 SWAP2 SWAP3 POP SWAP7 SWAP5 POP PUSH2 0x3B33 DUP5 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD PUSH1 0x2 SWAP2 AND OR SWAP1 JUMP JUMPDEST DUP1 DUP6 MSTORE PUSH2 0x3B50 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH2 0x3B96 PUSH1 0x20 DUP6 DUP4 AND SWAP8 PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x984DE9E800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x2466 JUMP JUMPDEST SUB DUP2 DUP11 GAS STATICCALL DUP1 ISZERO PUSH2 0xACF JUMPI PUSH2 0x3BBB SWAP2 PUSH0 SWAP2 PUSH2 0x3C95 JUMPI JUMPDEST POP PUSH2 0x3BB6 DUP2 PUSH2 0x5200 JUMP JUMPDEST PUSH2 0x2685 JUMP JUMPDEST SWAP8 PUSH2 0x3BC5 DUP3 PUSH2 0x5297 JUMP JUMPDEST PUSH2 0x3BD0 DUP10 DUP6 DUP5 PUSH2 0x53A7 JUMP JUMPDEST DUP1 DUP10 LT PUSH2 0x3C65 JUMPI POP SWAP3 DUP6 SWAP3 PUSH2 0x3C3C PUSH32 0xA26A52D8D53702BBA7F137907B8E1F99FF87F6D450144270CA25E72481CCA871 SWAP4 PUSH2 0x3C2D PUSH1 0x20 PUSH2 0x3C23 PUSH1 0x1 SWAP11 SWAP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP9 ADD MLOAD MLOAD PUSH2 0x2551 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP5 AND SWAP8 DUP5 PUSH2 0x26BF JUMP JUMPDEST SUB SWAP1 LOG4 PUSH32 0xCAD8C9D32507393B6508CA4A888B81979919B477510585BDE8488F153072D6F3 PUSH0 DUP1 LOG2 JUMP JUMPDEST PUSH32 0x8D261D5D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 DUP10 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x3CAE SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xAC8 JUMPI PUSH2 0xAB9 DUP2 DUP4 PUSH2 0x77E JUMP JUMPDEST PUSH0 PUSH2 0x3BAC JUMP JUMPDEST SWAP3 PUSH2 0x3D07 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 SWAP6 SWAP5 SWAP7 PUSH2 0x3D1E PUSH1 0x40 MLOAD SWAP9 DUP10 SWAP8 DUP9 SWAP7 DUP8 SWAP5 PUSH32 0x38BE241D00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE PUSH1 0x60 PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x64 DUP7 ADD SWAP1 PUSH2 0x450 JUMP JUMPDEST SWAP2 PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x3 NOT DUP5 DUP4 SUB ADD PUSH1 0x44 DUP6 ADD MSTORE PUSH2 0x1E54 JUMP JUMPDEST SUB SWAP4 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xACF JUMPI PUSH0 SWAP2 PUSH2 0x3D61 JUMPI JUMPDEST POP ISZERO PUSH2 0x3D39 JUMPI JUMP JUMPDEST PUSH32 0xF23DBC600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x3D7A SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3988 JUMPI PUSH2 0x397A DUP2 DUP4 PUSH2 0x77E JUMP JUMPDEST PUSH0 PUSH2 0x3D31 JUMP JUMPDEST SWAP1 PUSH2 0x3D89 PUSH2 0x2891 JUMP JUMPDEST POP PUSH1 0xFF PUSH1 0x1 DUP1 DUP5 DUP4 PUSH2 0x3D9B PUSH1 0xC PUSH2 0x2F17 JUMP JUMPDEST PUSH2 0x3DA4 SWAP1 PUSH2 0x2F17 JUMP JUMPDEST AND SHR AND DUP2 DUP6 DUP5 PUSH2 0x3DB4 PUSH1 0xC PUSH2 0x2F17 JUMP JUMPDEST PUSH2 0x3DBD SWAP1 PUSH2 0x2F17 JUMP JUMPDEST PUSH2 0x3DC6 SWAP1 PUSH2 0x2F17 JUMP JUMPDEST AND SHR AND SWAP1 DUP3 DUP7 DUP6 PUSH2 0x3DD7 PUSH1 0xC PUSH2 0x2F17 JUMP JUMPDEST PUSH2 0x3DE0 SWAP1 PUSH2 0x2F17 JUMP JUMPDEST PUSH2 0x3DE9 SWAP1 PUSH2 0x2F17 JUMP JUMPDEST PUSH2 0x3DF2 SWAP1 PUSH2 0x2F17 JUMP JUMPDEST AND SHR AND SWAP3 DUP1 DUP8 DUP7 PUSH2 0x3E03 PUSH1 0xC PUSH2 0x2F17 JUMP JUMPDEST PUSH2 0x3E0C SWAP1 PUSH2 0x2F17 JUMP JUMPDEST PUSH2 0x3E15 SWAP1 PUSH2 0x2F17 JUMP JUMPDEST PUSH2 0x3E1E SWAP1 PUSH2 0x2F17 JUMP JUMPDEST PUSH2 0x3E27 SWAP1 PUSH2 0x2F17 JUMP JUMPDEST AND SHR AND SWAP5 DUP2 DUP9 DUP2 DUP2 DUP5 PUSH1 0xC AND SHR AND SWAP3 PUSH1 0xC PUSH2 0x3E41 SWAP1 PUSH2 0x2F17 JUMP JUMPDEST AND SHR AND SWAP2 PUSH2 0x3E4D PUSH2 0x7C8 JUMP JUMPDEST PUSH1 0x9 DUP11 SWAP1 SHR DUP3 AND ISZERO ISZERO DUP2 MSTORE SWAP9 PUSH1 0x8 DUP2 SWAP1 SHR DUP3 AND ISZERO ISZERO PUSH1 0x20 DUP12 ADD MSTORE PUSH1 0xA DUP2 SWAP1 SHR DUP3 AND ISZERO ISZERO PUSH1 0x40 DUP12 ADD MSTORE PUSH1 0xB SHR AND ISZERO ISZERO PUSH1 0x60 DUP10 ADD MSTORE ISZERO ISZERO PUSH1 0x80 DUP9 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP8 ADD MSTORE ISZERO ISZERO PUSH1 0xC0 DUP7 ADD MSTORE ISZERO ISZERO PUSH1 0xE0 DUP6 ADD MSTORE ISZERO ISZERO PUSH2 0x100 DUP5 ADD MSTORE ISZERO ISZERO PUSH2 0x120 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x140 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP3 SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP2 AND SWAP4 DUP5 ISZERO PUSH2 0x3FB9 JUMPI DUP1 DUP4 AND SWAP6 DUP7 ISZERO PUSH2 0x3F84 JUMPI DUP5 PUSH2 0x3F02 DUP6 PUSH2 0x3342 DUP7 PUSH2 0x3342 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x10 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x2CC JUMPI PUSH1 0x40 MLOAD PUSH32 0x5687F2B800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH32 0xA0175360A15BCA328BAF7EA85C7B784D58B222A50D0CE760B10DBA336D226A61 SWAP2 PUSH2 0x3706 SWAP2 PUSH0 DUP2 DUP1 PUSH1 0x64 DUP2 ADD PUSH2 0x36EA JUMP JUMPDEST PUSH32 0x94280D6200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xE602DF0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0xFFFFFFFF PUSH32 0x0 AND TIMESTAMP GT ISZERO DUP1 PUSH2 0x404C JUMPI JUMPDEST PUSH2 0x4024 JUMPI JUMP JUMPDEST PUSH32 0xDA9F8B3400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x7 SLOAD DUP2 SHR AND PUSH2 0x401E JUMP JUMPDEST SWAP1 DUP1 MLOAD SWAP1 PUSH2 0x4067 DUP3 PUSH2 0x3AA JUMP JUMPDEST PUSH2 0x4070 DUP3 PUSH2 0x3AA JUMP JUMPDEST DUP3 SLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 SWAP3 SWAP1 SWAP3 ADD MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000 SWAP1 SWAP2 AND PUSH1 0xFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR PUSH1 0x8 SWAP2 SWAP1 SWAP2 SHL PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND OR SWAP1 ISZERO ISZERO PUSH1 0xA8 SHL PUSH22 0xFF000000000000000000000000000000000000000000 AND OR SWAP1 SSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x2CC JUMPI MLOAD PUSH1 0xFF DUP2 AND DUP2 SUB PUSH2 0x2CC JUMPI SWAP1 JUMP JUMPDEST DUP1 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x710 JUMPI PUSH1 0x1 DUP2 ADD DUP1 DUP4 SSTORE DUP2 LT ISZERO PUSH2 0x25C3 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE JUMP JUMPDEST DUP2 MLOAD DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND OR DUP3 SSTORE PUSH2 0x2DE SWAP3 PUSH1 0x2 SWAP2 SWAP1 PUSH1 0x40 SWAP1 PUSH2 0x41E2 DUP4 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x1 DUP8 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE JUMP JUMPDEST ADD MLOAD AND SWAP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x2CC JUMPI PUSH1 0x20 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x424F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 DUP3 PUSH1 0x80 PUSH1 0x1 SWAP3 DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP5 DUP3 ADD MLOAD PUSH2 0x4276 DUP2 PUSH2 0x3AA JUMP JUMPDEST DUP4 DUP7 ADD MSTORE PUSH1 0x40 DUP3 DUP2 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP4 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 ADD MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE ADD SWAP6 ADD SWAP4 SWAP3 SWAP2 ADD PUSH2 0x4241 JUMP JUMPDEST SWAP5 SWAP4 SWAP2 PUSH2 0x2DE SWAP4 PUSH1 0x60 SWAP3 PUSH2 0x42D1 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP10 MSTORE AND PUSH1 0x20 DUP9 ADD MSTORE PUSH1 0xE0 PUSH1 0x40 DUP9 ADD MSTORE PUSH1 0xE0 DUP8 ADD SWAP1 PUSH2 0x4230 JUMP JUMPDEST SWAP5 ADD SWAP1 PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH2 0x140 SWAP2 SUB SLT PUSH2 0x2CC JUMPI PUSH2 0x4313 PUSH2 0x7BB JUMP JUMPDEST SWAP1 PUSH2 0x431D DUP2 PUSH2 0x2F75 JUMP JUMPDEST DUP3 MSTORE PUSH2 0x432B PUSH1 0x20 DUP3 ADD PUSH2 0x2F75 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x433C PUSH1 0x40 DUP3 ADD PUSH2 0x2F75 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x434D PUSH1 0x60 DUP3 ADD PUSH2 0x2F75 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x435E PUSH1 0x80 DUP3 ADD PUSH2 0x2F75 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x436F PUSH1 0xA0 DUP3 ADD PUSH2 0x2F75 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0x4380 PUSH1 0xC0 DUP3 ADD PUSH2 0x2F75 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x4391 PUSH1 0xE0 DUP3 ADD PUSH2 0x2F75 JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 PUSH2 0x43A4 DUP2 DUP4 ADD PUSH2 0x2F75 JUMP JUMPDEST SWAP1 DUP4 ADD MSTORE PUSH2 0x43B6 PUSH2 0x120 DUP1 SWAP3 ADD PUSH2 0x2F75 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP2 SWAP7 SWAP6 SWAP4 SWAP5 PUSH2 0x441F PUSH2 0x2DE SWAP7 PUSH4 0xFFFFFFFF PUSH2 0x220 SWAP7 PUSH2 0x43E7 PUSH2 0x44AD SWAP7 PUSH2 0x2A0 DUP1 DUP11 MSTORE DUP10 ADD SWAP1 PUSH2 0x4230 JUMP JUMPDEST SWAP12 PUSH1 0x20 DUP9 ADD MSTORE AND PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x60 DUP6 ADD SWAP1 PUSH1 0x40 SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD SWAP1 DUP1 MLOAD ISZERO ISZERO DUP3 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0x40 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0x60 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0x80 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0xA0 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0xC0 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0xE0 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 SWAP1 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 ADD MSTORE JUMP JUMPDEST ADD SWAP1 PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SWAP1 PUSH2 0x44FF PUSH2 0x44F8 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x1 AND SWAP1 JUMP JUMPDEST PUSH2 0x4F8D JUMPI DUP1 MLOAD MLOAD PUSH1 0x2 DUP2 LT PUSH2 0x4F65 JUMPI PUSH1 0x8 DUP2 GT PUSH2 0x4F3D JUMPI SWAP3 SWAP2 SWAP1 PUSH2 0x4522 DUP5 PUSH2 0x2551 JUMP JUMPDEST PUSH0 SWAP5 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x4C30 JUMPI POP POP PUSH2 0x45F2 SWAP3 SWAP4 SWAP5 POP PUSH1 0x80 DUP3 ADD SWAP2 PUSH2 0x4560 DUP4 MLOAD PUSH2 0x455B DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0x4162 JUMP JUMPDEST PUSH2 0x4575 PUSH2 0x3270 PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 SWAP2 PUSH2 0x458E DUP3 DUP8 MLOAD ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 MLOAD AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x459C PUSH1 0x60 DUP7 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH32 0x77FF76E700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP13 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP4 AND PUSH1 0x24 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x44 DUP4 ADD MSTORE SWAP1 SWAP7 DUP8 SWAP2 SWAP1 DUP3 SWAP1 PUSH0 SWAP1 DUP3 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0xACF JUMPI PUSH0 SWAP6 PUSH0 SWAP2 PUSH2 0x4BFD JUMPI JUMPDEST POP PUSH2 0x471E PUSH1 0xC0 DUP5 ADD SWAP2 PUSH2 0x4719 PUSH2 0x46E8 DUP5 MLOAD SWAP8 PUSH2 0x46D1 PUSH2 0x46CB PUSH2 0x462D DUP12 MLOAD ISZERO ISZERO PUSH1 0x4 SHL PUSH1 0x1 OR SWAP1 JUMP JUMPDEST SWAP11 PUSH1 0x60 PUSH2 0x469B PUSH2 0x466A PUSH1 0x20 SWAP15 DUP16 DUP6 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF SWAP1 PUSH1 0x5 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST DUP13 DUP5 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF SWAP1 PUSH1 0x6 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST SWAP2 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F SWAP1 PUSH1 0x7 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x54F5 JUMP JUMPDEST SWAP1 PUSH1 0x5A SWAP2 PUSH5 0xFFFFFFFFFF SWAP1 DUP2 AND DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP9 PUSH2 0x4714 DUP7 DUP9 ADD SWAP11 PUSH2 0x46FE DUP13 MLOAD PUSH4 0xFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x82 SWAP2 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST PUSH2 0x55C5 JUMP JUMPDEST PUSH2 0x55E5 JUMP JUMPDEST SWAP4 PUSH1 0xA0 DUP5 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP10 DUP8 PUSH2 0x4740 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST AND DUP1 PUSH2 0x4841 JUMPI JUMPDEST POP SWAP1 PUSH2 0x4765 DUP2 SWAP4 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4795 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x47CD SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE JUMP JUMPDEST DUP6 ADD SWAP5 DUP6 MLOAD PUSH2 0x47DC SWAP1 DUP12 PUSH2 0x5609 JUMP JUMPDEST MLOAD SWAP5 MLOAD SWAP8 MLOAD PUSH4 0xFFFFFFFF AND SWAP7 MLOAD SWAP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4806 SWAP2 PUSH2 0x3D80 JUMP JUMPDEST SWAP2 MLOAD SWAP3 MLOAD SWAP6 DUP7 SWAP6 CALLER SWAP10 AND SWAP8 PUSH2 0x481B SWAP6 DUP8 PUSH2 0x43BD JUMP JUMPDEST SUB PUSH32 0xBC1561EEAB9F40962E2FB827A7FF9C7CDB47A9D7C84CAEEFA4ED90E043842DAD SWAP2 LOG3 JUMP JUMPDEST PUSH2 0x4883 SWAP2 DUP5 SWAP2 DUP10 MLOAD PUSH0 DUP10 MLOAD SWAP4 DUP12 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xB89F18200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE CALLER PUSH1 0x4 DUP7 ADD PUSH2 0x429F JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xACF JUMPI PUSH0 SWAP2 PUSH2 0x4BE0 JUMPI JUMPDEST POP ISZERO PUSH2 0x4BCB JUMPI PUSH2 0x48B2 PUSH2 0x3270 PUSH2 0x3270 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 DUP6 MLOAD DUP1 SWAP3 PUSH32 0xD77153A700000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 PUSH1 0x4 PUSH2 0x140 SWAP6 DUP7 SWAP4 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xACF JUMPI PUSH0 SWAP4 PUSH2 0x4B9C JUMPI JUMPDEST POP POP DUP2 MLOAD ISZERO ISZERO DUP1 PUSH2 0x4B82 JUMPI JUMPDEST PUSH2 0x4B2F JUMPI SWAP1 PUSH2 0x4AFD PUSH2 0x120 PUSH2 0x4969 PUSH2 0x4ACA PUSH2 0x4A98 PUSH2 0x4A66 PUSH2 0x4A34 PUSH2 0x4A02 PUSH2 0x49D0 DUP15 PUSH2 0x49A5 PUSH2 0x499C DUP13 DUP16 PUSH2 0x4B28 SWAP16 SWAP1 PUSH2 0x4969 PUSH2 0x4971 SWAP3 PUSH2 0x493E DUP6 MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFF SWAP1 PUSH1 0x9 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST SWAP3 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFF SWAP1 PUSH1 0x8 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST SWAP2 DUP13 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFF SWAP1 PUSH1 0xA SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP11 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FF SWAP1 PUSH1 0xB SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP10 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF SWAP1 PUSH1 0xC SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0xA0 DUP9 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFF SWAP1 PUSH1 0xD SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0xC0 DUP8 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFF SWAP1 PUSH1 0xE SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0xE0 DUP7 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFF SWAP1 PUSH1 0xF SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH2 0x100 DUP6 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFF SWAP1 PUSH1 0x10 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF SWAP1 PUSH1 0x11 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST DUP10 PUSH0 PUSH2 0x4747 JUMP JUMPDEST PUSH2 0x15BA DUP12 PUSH2 0x4B44 DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH32 0xFA93D81400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE CALLER PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST POP PUSH2 0x4B96 PUSH2 0x4B91 DUP7 MLOAD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x48FF JUMP JUMPDEST PUSH2 0x4BBC SWAP3 SWAP4 POP DUP1 RETURNDATASIZE LT PUSH2 0x4BC4 JUMPI JUMPDEST PUSH2 0x4BB4 DUP2 DUP4 PUSH2 0x77E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x42FF JUMP JUMPDEST SWAP1 PUSH0 DUP1 PUSH2 0x48F3 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x4BAA JUMP JUMPDEST PUSH2 0x15BA DUP11 PUSH2 0x4B44 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x4BF7 SWAP2 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x3988 JUMPI PUSH2 0x397A DUP2 DUP4 PUSH2 0x77E JUMP JUMPDEST PUSH0 PUSH2 0x4895 JUMP JUMPDEST SWAP1 POP DUP2 PUSH2 0x4C20 SWAP3 SWAP7 POP RETURNDATASIZE DUP8 GT PUSH2 0x4C29 JUMPI JUMPDEST PUSH2 0x4C18 DUP2 DUP4 PUSH2 0x77E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x421A JUMP JUMPDEST SWAP5 SWAP1 SWAP5 PUSH0 PUSH2 0x4605 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x4C0E JUMP JUMPDEST PUSH2 0x4C3B DUP2 DUP6 MLOAD PUSH2 0x25AF JUMP JUMPDEST MLOAD SWAP7 PUSH2 0x4C4E DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 DUP3 ISZERO DUP1 ISZERO PUSH2 0x4F32 JUMPI JUMPDEST PUSH2 0x4F0A JUMPI AND DUP1 DUP3 LT PUSH2 0x4EE2 JUMPI DUP2 EQ PUSH2 0x4EAD JUMPI PUSH1 0x40 SWAP1 DUP2 DUP11 ADD SWAP10 DUP11 MLOAD PUSH2 0x4C8F SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO SWAP1 PUSH1 0x20 SWAP12 DUP13 DUP3 ADD SWAP1 DUP14 DUP3 MLOAD SWAP2 PUSH2 0x4CAE DUP4 PUSH2 0x3AA JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP4 PUSH1 0x60 ADD SWAP4 DUP5 MLOAD PUSH2 0x4CC8 SWAP1 ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x4CD1 PUSH2 0x7E9 JUMP JUMPDEST SWAP4 PUSH2 0x4CDC SWAP1 DUP6 PUSH2 0x25C8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP4 ADD MSTORE ISZERO ISZERO DUP2 DUP8 ADD MSTORE DUP7 PUSH2 0x4D0D DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x4D28 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x4D32 SWAP2 PUSH2 0x405A JUMP JUMPDEST DUP1 MLOAD PUSH2 0x4D3D DUP2 PUSH2 0x3AA JUMP JUMPDEST PUSH2 0x4D46 DUP2 PUSH2 0x3AA JUMP JUMPDEST PUSH2 0x4E5E JUMPI POP DUP2 ISZERO SWAP2 PUSH2 0x4E53 JUMPI JUMPDEST POP PUSH2 0x32D2 JUMPI DUP10 SWAP2 JUMPDEST MLOAD SWAP10 DUP11 DUP1 SWAP3 PUSH32 0x313CE56700000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 SWAP13 DUP14 SWAP2 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xACF JUMPI PUSH0 SWAP3 PUSH2 0x4E26 JUMPI JUMPDEST POP POP PUSH1 0x12 SWAP1 PUSH1 0xFF SWAP2 DUP1 DUP4 DUP4 AND GT PUSH0 EQ PUSH2 0x4DD2 JUMPI DUP11 PUSH32 0x686D360700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x1 SWAP5 SWAP6 SWAP7 SWAP8 SWAP9 SWAP10 SWAP11 POP SWAP1 PUSH2 0x4DF6 SWAP3 SWAP2 SUB AND PUSH2 0x4DEE DUP6 DUP9 PUSH2 0x25AF JUMP JUMPDEST SWAP1 PUSH1 0xFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x4E1A DUP2 PUSH2 0x4E15 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0x4106 JUMP JUMPDEST SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 ADD PUSH2 0x4526 JUMP JUMPDEST PUSH2 0x4E45 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x4E4C JUMPI JUMPDEST PUSH2 0x4E3D DUP2 DUP4 PUSH2 0x77E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x40ED JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x4D98 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x4E33 JUMP JUMPDEST MLOAD ISZERO ISZERO SWAP1 POP PUSH0 PUSH2 0x4D53 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP MLOAD PUSH2 0x4E6C DUP2 PUSH2 0x3AA JUMP JUMPDEST PUSH2 0x4E75 DUP2 PUSH2 0x3AA JUMP JUMPDEST SUB PUSH2 0x4E85 JUMPI PUSH2 0x32D2 JUMPI DUP10 SWAP2 PUSH2 0x4D5B JUMP JUMPDEST PUSH32 0xA1E9DD9D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x4F4B634E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x6E8F194700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0xC1AB6DC100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP DUP2 DUP10 AND DUP4 EQ PUSH2 0x4C64 JUMP JUMPDEST PUSH32 0x707BDF5800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x5ED4BA8F00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0xDB771C8000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH3 0xFFFFFF SWAP1 PUSH1 0x2A SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2326 JUMPI SWAP1 JUMP JUMPDEST PUSH3 0xFFFFFF SWAP1 PUSH1 0x42 SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2326 JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP2 DUP3 DUP2 SLOAD SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP3 PUSH1 0x20 DUP4 ADD SWAP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP4 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x503C JUMPI POP POP POP PUSH2 0x2DE SWAP3 POP SUB DUP4 PUSH2 0x77E JUMP JUMPDEST DUP6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 MSTORE PUSH1 0x1 SWAP6 DUP7 ADD SWAP6 DUP9 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x5026 JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x5089 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x5198 JUMPI PUSH32 0x0 SWAP2 PUSH2 0x50F9 DUP2 DUP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP1 JUMP JUMPDEST DUP3 DUP2 ADD SWAP3 DUP4 SLT PUSH0 DUP3 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x2326 JUMPI DUP3 PUSH2 0x514E JUMPI POP PUSH32 0x0 SWAP3 DUP4 TLOAD PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x2326 JUMPI PUSH2 0x2DE SWAP5 TSTORE PUSH2 0x5811 JUMP JUMPDEST ISZERO PUSH2 0x515D JUMPI JUMPDEST PUSH2 0x2DE SWAP3 PUSH2 0x5811 JUMP JUMPDEST PUSH32 0x0 SWAP3 DUP4 TLOAD PUSH1 0x1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x2326 JUMPI PUSH2 0x2DE SWAP5 TSTORE SWAP3 POP PUSH2 0x5154 JUMP JUMPDEST POP POP JUMP JUMPDEST SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 GT SWAP1 DUP2 ISZERO PUSH2 0x51F6 JUMPI JUMPDEST POP PUSH2 0x51CE JUMPI PUSH1 0x80 SHL SWAP1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x2326 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x89560CA100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP DUP2 GT PUSH0 PUSH2 0x51B9 JUMP JUMPDEST PUSH3 0xF4240 DUP2 LT PUSH2 0x520D JUMPI POP JUMP JUMPDEST PUSH32 0xD38D20FC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 PUSH1 0x80 PUSH8 0xDE0B6B3A7640000 PUSH2 0x527C PUSH2 0x25D1 SWAP5 DUP1 PUSH2 0x525B DUP7 PUSH1 0x60 DUP11 ADD MLOAD PUSH2 0x25AF JUMP JUMPDEST MSTORE PUSH2 0x3882 PUSH2 0x526D DUP7 PUSH1 0xC0 DUP11 ADD MLOAD PUSH2 0x25AF JUMP JUMPDEST MLOAD PUSH2 0x387B DUP8 PUSH1 0xA0 DUP12 ADD MLOAD PUSH2 0x25AF JUMP JUMPDEST DIV SWAP4 ADD MLOAD PUSH2 0x25AF JUMP JUMPDEST PUSH2 0x5291 PUSH2 0x2DE SWAP3 PUSH2 0x505F JUMP JUMPDEST SWAP1 PUSH2 0x50B4 JUMP JUMPDEST PUSH2 0x52B2 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 SLOAD PUSH3 0xF4240 SWAP1 DUP2 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x2326 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SSTORE PUSH2 0x52E9 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH0 DUP1 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 DUP2 SLOAD ADD SWAP1 SSTORE AND PUSH0 DUP1 DUP3 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F PUSH1 0x40 MLOAD DUP1 PUSH2 0x5333 DUP2 SWAP1 PUSH3 0xF4240 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB SWAP1 LOG4 DUP1 EXTCODESIZE ISZERO PUSH2 0x2CC JUMPI PUSH0 PUSH1 0x40 MLOAD DUP1 SWAP3 PUSH32 0x23DE665100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP4 DUP2 PUSH2 0x5389 PUSH1 0x4 DUP3 ADD SWAP1 PUSH3 0xF4240 PUSH1 0x40 PUSH1 0x60 DUP5 ADD SWAP4 PUSH0 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0xACF JUMPI PUSH2 0x539A JUMPI POP JUMP JUMPDEST DUP1 PUSH2 0x3718 PUSH2 0x2DE SWAP3 PUSH2 0x76A JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP4 DUP5 ISZERO PUSH2 0x54C0 JUMPI PUSH2 0x53DF DUP4 PUSH2 0x53D9 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x3575 JUMP JUMPDEST PUSH2 0x53FE DUP6 PUSH2 0x3342 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP5 DUP2 SLOAD ADD SWAP1 SSTORE PUSH2 0x540D DUP2 PUSH2 0x5200 JUMP JUMPDEST PUSH2 0x5428 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP3 PUSH0 DUP5 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F PUSH1 0x40 MLOAD DUP1 PUSH2 0x5461 DUP8 DUP3 SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB SWAP1 LOG4 DUP3 EXTCODESIZE ISZERO PUSH2 0x2CC JUMPI PUSH1 0x40 MLOAD PUSH32 0x23DE665100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 DUP3 SWAP1 DUP2 DUP4 DUP2 PUSH1 0x64 DUP2 ADD PUSH2 0x5389 JUMP JUMPDEST PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 SWAP2 SWAP1 DUP3 JUMPDEST DUP2 MLOAD DUP5 LT ISZERO PUSH2 0x55B9 JUMPI PUSH2 0x550D DUP5 DUP4 PUSH2 0x25AF JUMP JUMPDEST MLOAD PUSH1 0xFF SWAP2 PUSH2 0x551A DUP7 PUSH2 0x2F29 JUMP JUMPDEST SWAP2 PUSH2 0x100 DUP1 DUP5 LT ISZERO PUSH2 0x558C JUMPI DUP4 DUP2 SUB SWAP1 DUP2 GT PUSH2 0x2326 JUMPI DUP1 DUP6 LT ISZERO PUSH2 0x55B4 JUMPI POP DUP4 JUMPDEST PUSH1 0x5 SWAP1 DUP2 GT PUSH2 0x558C JUMPI DUP2 PUSH1 0x7 SWAP2 SHR AND PUSH2 0x5564 JUMPI PUSH1 0x1 SWAP4 PUSH1 0x1F SWAP2 AND DUP4 SHL SWAP3 SHL NOT AND OR SWAP4 ADD SWAP3 PUSH2 0x54FA JUMP JUMPDEST PUSH32 0xE4337C0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0xB4120F1400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x553B JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND SWAP3 POP POP JUMP JUMPDEST PUSH8 0xDE0B5CAD2BEF000 DUP3 GT PUSH2 0x23D5 JUMPI PUSH5 0x174876E800 PUSH2 0x310 SWAP3 DIV SWAP1 PUSH2 0x5827 JUMP JUMPDEST SWAP1 PUSH8 0xDE0B5CAD2BEF000 DUP2 GT PUSH2 0x23D5 JUMPI PUSH2 0x310 SWAP2 PUSH5 0x174876E800 PUSH1 0x42 SWAP3 DIV SWAP1 PUSH2 0x5841 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP2 PUSH1 0x40 MLOAD PUSH32 0xCE20ECE700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 PUSH1 0x4 DUP2 DUP9 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xACF JUMPI PUSH0 SWAP2 PUSH2 0x5786 JUMPI JUMPDEST POP DUP4 LT PUSH2 0x575E JUMPI PUSH1 0x40 MLOAD PUSH32 0x654CF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP2 PUSH1 0x4 DUP2 DUP9 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xACF JUMPI PUSH0 SWAP3 PUSH2 0x5741 JUMPI JUMPDEST POP POP DUP3 GT PUSH2 0x5719 JUMPI DUP2 DUP2 PUSH2 0x5703 PUSH2 0x56EC PUSH32 0x89D41522342FABAC1471CA6073A5623E5CAF367B03CA6E9A001478D0CF8BE4A1 SWAP6 PUSH2 0x56E6 PUSH2 0x5714 SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x5888 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 JUMP JUMPDEST PUSH32 0x7F47834B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x5757 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0xAC8 JUMPI PUSH2 0xAB9 DUP2 DUP4 PUSH2 0x77E JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x5697 JUMP JUMPDEST PUSH32 0xBFB2068800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x579D SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0xAC8 JUMPI PUSH2 0xAB9 DUP2 DUP4 PUSH2 0x77E JUMP JUMPDEST PUSH0 PUSH2 0x5654 JUMP JUMPDEST SWAP1 SWAP4 SWAP3 PUSH0 SWAP5 PUSH2 0x57B6 DUP5 PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x25AF JUMP JUMPDEST MLOAD DUP2 DUP2 GT PUSH2 0x57C6 JUMPI JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x5806 SWAP6 SWAP7 POP PUSH2 0x5800 SWAP4 SWAP3 PUSH2 0x57F9 SWAP3 PUSH2 0x57DF SWAP3 SUB PUSH2 0x3476 JUMP JUMPDEST SWAP4 PUSH1 0xA0 PUSH2 0x57F0 DUP3 PUSH1 0xC0 DUP7 ADD MLOAD PUSH2 0x25AF JUMP JUMPDEST MLOAD SWAP4 ADD MLOAD PUSH2 0x25AF JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x2F3F JUMP JUMPDEST SWAP1 PUSH2 0x3088 JUMP JUMPDEST SWAP1 PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x57BF JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TSTORE JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x18 SHR PUSH2 0x5564 JUMPI PUSH1 0x2A SHL SWAP1 PUSH3 0xFFFFFF PUSH1 0x2A SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x100 DUP1 DUP5 LT ISZERO PUSH2 0x558C JUMPI DUP4 DUP2 SUB SWAP1 DUP2 GT PUSH2 0x2326 JUMPI DUP1 PUSH1 0xFF LT PUSH0 EQ PUSH2 0x5883 JUMPI POP PUSH1 0xFF JUMPDEST PUSH1 0x18 GT PUSH2 0x558C JUMPI DUP1 PUSH1 0x18 SHR PUSH2 0x5564 JUMPI PUSH3 0xFFFFFF SWAP1 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST PUSH2 0x5865 JUMP JUMPDEST SWAP1 PUSH8 0xDE0B5CAD2BEF000 DUP2 GT PUSH2 0x23D5 JUMPI PUSH5 0x174876E800 SWAP1 DIV DUP1 PUSH1 0x18 SHR PUSH2 0x5564 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC000003FFFF SWAP1 PUSH1 0x12 SHL SWAP2 AND OR SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC9 MSTORE MCOPY 0xB5 DELEGATECALL GT PUSH21 0xF1907706A8CEFAA7D6ED21051F4BE2EA1862DD8DEA 0x2F MSTORE8 DUP10 0xF8 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"3171:37276:71:-:0;;;;;;;;;-1:-1:-1;3171:37276:71;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;-1:-1:-1;;;;;3171:37276:71;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;:::o;:::-;;;;;;:::i;:::-;-1:-1:-1;;3171:37276:71;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;:::o;:::-;;;;;29973:33;-1:-1:-1;;;;;3171:37276:71;;;:::i;:::-;3908:87;;;;:::i;:::-;8718:4:70;;;:::i;:::-;3171:37276:71;-1:-1:-1;3171:37276:71;29973:20;3171:37276;;;-1:-1:-1;3171:37276:71;;-1:-1:-1;;;;;3171:37276:71;;;;;;;;;;29973:33;3171:37276;1616:3:44;3171:37276:71;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3171:37276:71;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;3171:37276:71;;;;;;;;;;;;;;;;;-1:-1:-1;3171:37276:71;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;3171:37276:71;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;3171:37276:71;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3171:37276:71;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3171:37276:71;;;;;;22690:40;3171:37276;;;;;:::i;:::-;;;:::i;:::-;;3908:87;;:::i;:::-;8882:4:70;;;:::i;:::-;22690:40:71;:::i;:::-;3171:37276;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;3171:37276:71;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;-1:-1:-1;;3171:37276:71;;;;;3908:87;;:::i;:::-;3171:37276;;38573:27;3171:37276;;;;;;;;;;;;;;;-1:-1:-1;;3171:37276:71;;;;;;;;;;;:::i;:::-;3908:87;;:::i;:::-;8718:4:70;;;:::i;:::-;28077:25:71;;;:::i;:::-;28186:47;28207:26;;;;28186:47;;:::i;:::-;3171:37276;-1:-1:-1;;;;;3171:37276:71;;;-1:-1:-1;3171:37276:71;28247:17;3171:37276;;;-1:-1:-1;3171:37276:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3171:37276:71;;;;;;;;-1:-1:-1;;;;;39438:11:71;3171:37276;;;;;;;;;-1:-1:-1;;3171:37276:71;;;;;;;;;;;:::i;:::-;3908:87;;:::i;:::-;-1:-1:-1;;;;;3171:37276:71;;;-1:-1:-1;3171:37276:71;28912:13;3171:37276;;;-1:-1:-1;3171:37276:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;-1:-1:-1;;3171:37276:71;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;-1:-1:-1;3171:37276:71;;;:::o;:::-;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3171:37276:71;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;3171:37276:71;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;3171:37276:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;30797:32;3171:37276;;;;;;;;;:::i;:::-;;;;;30797:32;:::i;:::-;3171:37276;;;;;;;;;;;;;;;;;;-1:-1:-1;;3171:37276:71;;;;;;;;;;:::i;:::-;3908:87;;:::i;:::-;8882:4:70;;;:::i;:::-;3171:37276:71;;26213:29;26110:40;;;:::i;:::-;26213:29;;3171:37276;;26180:84;;;;3171:37276;26180:84;;3171:37276;;26180:84;;3171:37276;;;;;;:::i;:::-;26130:19;3171:37276;;;;26180:84;3171:37276;-1:-1:-1;;;;;3171:37276:71;;26180:84;;;;;;3171:37276;26180:84;26282:37;26180:84;-1:-1:-1;26180:84:71;;;3171:37276;2487:20:95;;;-1:-1:-1;;;;;3171:37276:71;;;2487:14:95;3171:37276:71;;;;;;;2487:20:95;3171:37276:71;26282:37;;:::i;26180:84::-;2487:20:95;26180:84:71;;;;;3171:37276;26180:84;3171:37276;26180:84;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;:::i;3171:37276::-;;;;;-1:-1:-1;;3171:37276:71;;;;;-1:-1:-1;;;;;3171:37276:71;;;;;:::i;:::-;3908:87;;:::i;:::-;8718:4:70;;;:::i;:::-;3171:37276:71;-1:-1:-1;3171:37276:71;-1:-1:-1;3171:37276:71;;;1038:1:75;3171:37276:71;-1:-1:-1;3171:37276:71;;7916:84:49;;;3171:37276:71;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;3171:37276:71;;;;;;24124:61;:40;3171:37276;;;;;:::i;:::-;3908:87;;:::i;:::-;8718:4:70;;;:::i;24124:40:71:-;:61;;3171:37276;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;3171:37276:71;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;3171:37276:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;3171:37276:71;;;;;;;;;;:::i;:::-;3908:87;;:::i;:::-;8718:4:70;;;:::i;:::-;-1:-1:-1;;;;;3171:37276:71;;-1:-1:-1;3171:37276:71;23313:18;3171:37276;;;-1:-1:-1;3171:37276:71;;23356:17;;-1:-1:-1;;;;;3171:37276:71;;;23356:11;3171:37276;;;;;;;23356:17;3171:37276;:::i;:::-;;;;23438:26;;;;:::i;:::-;23488:24;;;;:::i;:::-;23549;;;;:::i;:::-;23589:13;-1:-1:-1;23604:13:71;;;;;;3171:37276;;;;;;;;;;:::i;23619:3::-;23662:20;;3171:37276;23662:20;;3171:37276;;;;;;;;;;23662:20;3171:37276;;23711:31;:20;23732:9;;23711:20;;;-1:-1:-1;;;;;3171:37276:71;;;;;;;;;;;23711:20;23732:9;;:::i;:::-;3171:37276;-1:-1:-1;;;;;3171:37276:71;;;23732:9;-1:-1:-1;;;;;3171:37276:71;;;;;;;;;;23711:31;3171:37276;:::i;:::-;23696:46;;;;:::i;:::-;;;;;;:::i;:::-;;1237:14:44;1460:31;;23756:46:71;;;;:::i;:::-;3171:37276;1616:3:44;3171:37276:71;23816:63;;;;:::i;:::-;3171:37276;;23589:13;;3171:37276;;;;;-1:-1:-1;;3171:37276:71;;;;;;;;;;;:::i;:::-;3908:87;;:::i;:::-;-1:-1:-1;;;;;3171:37276:71;;;-1:-1:-1;3171:37276:71;28691:13;3171:37276;;;-1:-1:-1;3171:37276:71;;;28691:41;;3171:37276;;;;;;;;;;;-1:-1:-1;;3171:37276:71;;;;;;7067:25:70;3171:37276:71;;;;;:::i;:::-;3908:87;;:::i;:::-;8718:4:70;;;:::i;:::-;7067:25;:::i;:::-;3171:37276:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;;3171:37276:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;37491:23;3171:37276;;;;:::i;:::-;36425:58;;;:::i;:::-;3908:87;;:::i;:::-;3171:37276;;;;;;;;;;;;;37491:23;37492:10;;;37491:23;;;;:::i;:::-;37524:718;;;;;37492:10;37639:63;37492:10;37768:26;37492:10;;37639:63;:::i;:::-;;3171:37276;;37768:26;;;;;;3171:37276;37768:26;;;:::i;:::-;;;;37524:718;3171:37276;;;;1443:21:45;1439:82;;38028:27:71;3171:37276;1530:151:45;;;;3171:37276:71;38011:44;38224:6;38007:110;38082:20;37491:23;38082:20;3171:37276;37491:23;38082:20;1439:82:45;1487:23;37491::71;1487::45;3171:37276:71;37491:23;1487::45;3171:37276:71;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;3171:37276:71;;;;;;;;;;:::i;:::-;3908:87;;:::i;:::-;8718:4:70;;;:::i;:::-;-1:-1:-1;;;;;3171:37276:71;;;-1:-1:-1;3171:37276:71;-1:-1:-1;3171:37276:71;;;-1:-1:-1;3171:37276:71;;22085:11;3171:37276;;;-1:-1:-1;3171:37276:71;;;;;;;;;;;;;;;;;-1:-1:-1;3171:37276:71;;-1:-1:-1;3171:37276:71;;-1:-1:-1;3171:37276:71;;;;;;;;;;;;;;;;:::i;:::-;22179:61;3171:37276;;22179:61;;;:::i;:::-;22263:24;;;;:::i;:::-;22303:13;-1:-1:-1;22318:13:71;;;;;;3171:37276;;;;;;;;:::i;22333:3::-;3171:37276;22381:20;22442:35;3171:37276;22381:31;:20;;-1:-1:-1;;;;;3171:37276:71;;;;;;;;;;;22381:20;22402:9;;;;;:::i;3171:37276::-;22442:35;:::i;:::-;22426:51;;;;:::i;:::-;3171:37276;;22303:13;;3171:37276;;;-1:-1:-1;;;;;3171:37276:71;;;;;;;;;;;;;-1:-1:-1;3171:37276:71;;;;;;;;;;;;;;;;-1:-1:-1;;3171:37276:71;;;;;3908:87;;:::i;:::-;3171:37276;9187:17:73;2806:53:55;3171:37276:71;;;;;;;;;;;;;1237:14:44;29693:33:71;-1:-1:-1;;;;;3171:37276:71;;;:::i;:::-;3908:87;;;;:::i;:::-;8718:4:70;;;:::i;:::-;3171:37276:71;-1:-1:-1;3171:37276:71;29693:20;3171:37276;;;-1:-1:-1;3171:37276:71;;-1:-1:-1;;;;;3171:37276:71;;;;;;;;;;29693:33;3171:37276;1460:31:44;3171:37276:71;;;;;;;;;;;-1:-1:-1;;3171:37276:71;;;;;3908:87;;:::i;:::-;3171:37276;-1:-1:-1;;;;;31246:22:71;3171:37276;;;;;;;;;;;;;-1:-1:-1;;3171:37276:71;;;;;;27132:33;3171:37276;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;:::i;:::-;3908:87;;:::i;:::-;27132:33;:::i;:::-;3171:37276;;;;;;;;;;;-1:-1:-1;;3171:37276:71;;;;;-1:-1:-1;;;;;3171:37276:71;;;;;:::i;:::-;3908:87;;:::i;:::-;3171:37276;-1:-1:-1;3171:37276:71;5935:11;3171:37276;;;;-1:-1:-1;3171:37276:71;;;;;;;;;;;;;-1:-1:-1;;3171:37276:71;;;;;;5752:26;3171:37276;;;;;:::i;:::-;3908:87;;:::i;:::-;9520:18:73;1796:196:47;-1:-1:-1;;;;;3171:37276:71;-1:-1:-1;3171:37276:71;;;;-1:-1:-1;3171:37276:71;2806:53:55;1796:196:47;;3171:37276:71;;;;;-1:-1:-1;;3171:37276:71;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;3908:87;;:::i;:::-;2707:73:70;;:::i;:::-;1083:103:53;;:::i;:::-;8882:4:70;;;:::i;:::-;-1:-1:-1;;;;;3171:37276:71;;;;;;-1:-1:-1;3171:37276:71;;;-1:-1:-1;3171:37276:71;;17044:44:70;3171:37276:71;-1:-1:-1;3171:37276:71;;1192:1:75;2788:189:76;958:1:75;7916:84:49;;2788:189:76;;17044:44:70;16646:28;16642:93;;32579:24:71;;-1:-1:-1;;;;;3171:37276:71;;;32579:18;3171:37276;;;;;;;32579:24;3171:37276;;;:::i;:::-;32769:17;3171:37276;32769:17;;-1:-1:-1;;;;;3171:37276:71;;;23356:11;3171:37276;;;;;;;;32753:33;;;3171:37276;32796:16;32867:31;3171:37276;32796:16;;3171:37276;;;;32867:31;:::i;:::-;32846:18;3171:37276;32846:18;;:52;;;-1:-1:-1;32983:3:71;3171:37276;;32961:20;;;;;33026;:36;:20;3171:37276;33026:20;;3171:37276;;;;;;;;;;33026:20;3171:37276;1237:14:44;1460:31;1371:127;;33026:36:71;33002:60;:18;;;:60;:::i;:::-;3171:37276;;32946:13;;32961:20;;;;;;;33099:146;33155:18;;;2487:20:95;;-1:-1:-1;;;;;3171:37276:71;;;2487:14:95;3171:37276:71;;;;;;;2487:20:95;3171:37276:71;33099:146;;:::i;:::-;3171:37276;33658:31;3171:37276;;33658:31;:::i;:::-;33631:24;3171:37276;33631:24;;:58;;;33727;9851:16:73;;2806:53:55;9702:26:73;2574:386:47;-1:-1:-1;3171:37276:71;;;;-1:-1:-1;3171:37276:71;;-1:-1:-1;3171:37276:71;;;;-1:-1:-1;3171:37276:71;2806:53:55;2574:386:47;;33727:58:71;3171:37276;;33699:25;;;3171:37276;;;33699:25;;33866:133;;32941:132;-1:-1:-1;34051:3:71;3171:37276;;34029:20;;;;;34295:16;3171:37276;;;;;;;;;;;;;;34070:207;;34051:3;34295:16;;;;;:::i;:::-;3171:37276;34314:16;;;;:::i;:::-;3171:37276;-1:-1:-1;34291:152:71;;34517:13;;;;34702:41;34517:13;;34702:41;34517:13;34535:16;34517;;3171:37276;34517:13;34727:16;34517:13;;:16;:::i;:::-;34535;;;;:::i;:::-;3171:37276;34535:16;;:::i;:::-;34727;:::i;:::-;3171:37276;34702:18;;:41;;;;;:::i;:::-;3171:37276;34702:41;:::i;:::-;;;:::i;:::-;3171:37276;;34014:13;;34291:152;34375:13;;34411:16;34375:13;34393:16;34375:13;;:16;;:13;34357:71;34375:13;;:16;:::i;:::-;34393;;:::i;:::-;3171:37276;34411:16;;:::i;:::-;3171:37276;34357:71;-1:-1:-1;34357:71:71;-1:-1:-1;;;;;3171:37276:71;;;;;;;;;;;;34357:71;-1:-1:-1;34357:71:71;34070:207;34149:48;34235:27;34149:16;34215:47;34149:16;;;;;:::i;:::-;3171:37276;34172:24;;3171:37276;34149:48;;:::i;:::-;34119:78;:24;;;:78;:::i;:::-;3171:37276;34235:24;:27;:::i;:::-;3171:37276;34215:47;;;;:::i;:::-;;;;;:::i;:::-;3171:37276;34070:207;;;;;;34029:20;;;;;;;;;;;35092:24;;-1:-1:-1;;;;;3171:37276:71;;;32579:18;3171:37276;;;;;;;35092:24;35132:13;-1:-1:-1;35169:3:71;3171:37276;;35147:20;;;;;35205:15;35252:51;35205:15;35281:21;35205:15;;3171:37276;35205:15;;3171:37276;;;;;;;;;;35205:15;3171:37276;35281:18;;:21;:::i;:::-;3171:37276;35252:51;;:::i;:::-;35234:15;;;3171:37276;;;;;;;;;;35234:15;3171:37276;;35132:13;;35147:20;3171:37276;35147:20;-1:-1:-1;35147:20:71;;35899:205;35147:20;;35899:205;2487:20:95;35147::71;35866:16;35147:20;35364:16;35352:10;;35364:16;;;:::i;:::-;35396:17;;:::i;:::-;35392:180;;35127:187;35866:16;;;:::i;:::-;-1:-1:-1;;;;;3171:37276:71;;;2487:14:95;3171:37276:71;;;;;;;2487:20:95;3171:37276:71;36070:24;;3171:37276;;;;;;;35899:205;;;:::i;:::-;;;;1148:1:53;;:::i;:::-;3171:37276:71;;;;;;;:::i;35392:180::-;35544:16;;;;;:::i;:::-;35392:180;;33866:133;33938:50;:21;;-1:-1:-1;;;;;3171:37276:71;-1:-1:-1;3171:37276:71;-1:-1:-1;3171:37276:71;;;-1:-1:-1;3171:37276:71;;;33938:21;3171:37276;33938:50;:::i;:::-;3171:37276;33911:24;;3171:37276;33866:133;;16642:93:70;16697:27;;-1:-1:-1;16697:27:70;3171:37276:71;;;-1:-1:-1;16697:27:70;3171:37276:71;;;;;-1:-1:-1;;3171:37276:71;;;;;3908:87;;:::i;:::-;3171:37276;-1:-1:-1;;;;;38971:11:71;3171:37276;;;;;;;;;;;;;;;-1:-1:-1;;3171:37276:71;;;;;;6119:58;3171:37276;;;;;:::i;:::-;3908:87;;:::i;:::-;9851:16:73;2806:53:55;9702:26:73;2574:386:47;-1:-1:-1;3171:37276:71;;;;-1:-1:-1;3171:37276:71;;-1:-1:-1;3171:37276:71;;;;-1:-1:-1;3171:37276:71;2806:53:55;2574:386:47;;6119:58:71;3171:37276;;;;;;;;;;;;;-1:-1:-1;;3171:37276:71;;;;;-1:-1:-1;;;;;3171:37276:71;;;;;:::i;:::-;3908:87;;:::i;:::-;8718:4:70;;;:::i;:::-;3171:37276:71;-1:-1:-1;3171:37276:71;-1:-1:-1;3171:37276:71;;;30290:35;3171:37276;-1:-1:-1;3171:37276:71;;30290:35;:::i;3171:37276::-;;;;;-1:-1:-1;;3171:37276:71;;;;;3908:87;;:::i;:::-;3171:37276;7916:84:49;38385:15:71;3171:37276;7916:84:49;3171:37276:71;;;;;;;;;;;;;-1:-1:-1;;3171:37276:71;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;16384:20;3171:37276;;;;;;:::i;:::-;;;;16384:20;;:::i;3171:37276::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;3171:37276:71;;;;;-1:-1:-1;;;;;3171:37276:71;;;;;:::i;:::-;3908:87;;:::i;:::-;8718:4:70;;;:::i;:::-;3171:37276:71;-1:-1:-1;3171:37276:71;-1:-1:-1;3171:37276:71;;;1192:1:75;3171:37276:71;-1:-1:-1;3171:37276:71;;958:1:75;7916:84:49;;3171:37276:71;;;;;;;;;;;;;-1:-1:-1;;3171:37276:71;;;;;-1:-1:-1;;;;;3171:37276:71;;;;;:::i;:::-;3908:87;;:::i;:::-;3171:37276;-1:-1:-1;3171:37276:71;-1:-1:-1;3171:37276:71;;;7916:84:49;3171:37276:71;-1:-1:-1;3171:37276:71;;7916:84:49;3171:37276:71;;;;;;;;;;;;;-1:-1:-1;;3171:37276:71;;;;;;;;;;;;;;;;;;;:::i;:::-;3908:87;;:::i;:::-;8718:4:70;39643:10:71;8718:4:70;:::i;:::-;3171:37276:71;;;;;;;;;;;;;;;;-1:-1:-1;3171:37276:71;;;;;;39670:47;3171:37276;;39643:10;3171:37276;39643:10;-1:-1:-1;;3171:37276:71;39643:10;3171:37276;;;;;39670:47;;;;3171:37276;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;3171:37276:71;;;;;;;;;;:::i;:::-;3908:87;;:::i;:::-;8718:4:70;;;:::i;:::-;-1:-1:-1;;;;;3171:37276:71;;;-1:-1:-1;3171:37276:71;21601:11;3171:37276;;;-1:-1:-1;3171:37276:71;;;;;;;;;;;;;;;-1:-1:-1;3171:37276:71;;-1:-1:-1;3171:37276:71;;-1:-1:-1;3171:37276:71;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;3171:37276:71;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3171:37276:71;;;;;;25833:58;3171:37276;;;;;:::i;:::-;;;:::i;:::-;;3908:87;;:::i;:::-;8718:4:70;;;:::i;:::-;-1:-1:-1;;;;;3171:37276:71;;;-1:-1:-1;3171:37276:71;-1:-1:-1;3171:37276:71;;;-1:-1:-1;3171:37276:71;;;25869:15;3171:37276;;;-1:-1:-1;3171:37276:71;;;25833:58;;:::i;:::-;3171:37276;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3171:37276:71;;;;;;;;;;;;-1:-1:-1;;3171:37276:71;;;;;;551:66:53;2806:53:55;3171:37276:71;;;;;;;;;;;;;-1:-1:-1;;3171:37276:71;;;;;3908:87;;:::i;:::-;3171:37276;9342:26:73;2806:53:55;3171:37276:71;;;;;;;;;;;-1:-1:-1;;3171:37276:71;;;;;27372:6;3171:37276;;;;;:::i;:::-;;;;;;:::i;:::-;3908:87;;:::i;:::-;3171:37276;;27344:10;;27372:6;:::i;:::-;3171:37276;;;27396:4;3171:37276;;;;;;;;-1:-1:-1;;3171:37276:71;;;;;-1:-1:-1;;;;;3171:37276:71;;;;;:::i;:::-;3908:87;;:::i;:::-;3171:37276;-1:-1:-1;3171:37276:71;2487:14:95;3171:37276:71;;;;-1:-1:-1;3171:37276:71;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3171:37276:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3171:37276:71;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;3908:87;;:::i;:::-;8718:4:70;;;:::i;:::-;-1:-1:-1;;;;;3171:37276:71;;;-1:-1:-1;3171:37276:71;30543:17;3171:37276;;;-1:-1:-1;3171:37276:71;;;;;;;;;:::i;:::-;;;;;;;;30543:17;3171:37276;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;3171:37276:71;;;;;;;;;;;;;;;;;-1:-1:-1;3171:37276:71;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;3510:55:106;-1:-1:-1;3171:37276:71;;;;;:::i;:::-;36425:58;;:::i;:::-;3908:87;;:::i;:::-;3171:37276;;;:::i;:::-;3462:31:106;;;;;37142:10:71;;3462:31:106;;;;:::i;:::-;37142:10:71;;3510:55:106;:::i;:::-;3171:37276:71;;;;;3462:31:106;3171:37276:71;;3462:31:106;3171:37276:71;;;;:::i;:::-;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;-1:-1:-1;;3171:37276:71;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6754:870;3171:37276;;;;:::i;:::-;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;;;;;:::i;:::-;;;;6754:870;;:::i;:::-;3171:37276;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3171:37276:71;;;;;;24355:17;3171:37276;;;;;:::i;:::-;-1:-1:-1;3171:37276:71;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24355:17;:::i;:::-;3171:37276;;;;;;;:::i;:::-;;;;;-1:-1:-1;;3171:37276:71;;;;;;2620:24:95;3171:37276:71;;;;;:::i;:::-;-1:-1:-1;;;;;3171:37276:71;;;;;;:::i;:::-;3908:87;;:::i;:::-;3171:37276;-1:-1:-1;3171:37276:71;2620:9:95;3171:37276:71;;;-1:-1:-1;3171:37276:71;;-1:-1:-1;;;;;3171:37276:71;;;;;;;;;;2620:24:95;3171:37276:71;;;;;;;;;;;;-1:-1:-1;;3171:37276:71;;;;;;;;-1:-1:-1;;;;;4888:6:71;3171:37276;;;;;;;;;;;:::i;:::-;;-1:-1:-1;3171:37276:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;3908:87::-;8709:136:74;3908:87:71;;;:::i;:::-;8882:4:70;;;:::i;:::-;-1:-1:-1;;;;;3171:37276:71;;;;;;;;;;;;;;;30972:50;3171:37276;;;;30972:50;:::i;:::-;3171:37276;;;31040:15;3171:37276;;;;;;;;;;8709:136:74;;;;;;;3171:37276:71;8709:136:74;;;;;;:::i;:::-;;;;;;;;;;3171:37276:71;;;8709:136:74;;;3908:87:71;3171:37276;;;8856:93:74;;19917:10:33;9153:38:74;;9149:109;;3908:87:71;:::o;9149:109:74:-;9214:33;3171:37276:71;9214:33:74;8709:136;3171:37276:71;9214:33:74;8856:93;8899:39;3171:37276:71;8899:39:74;8709:136;3171:37276:71;8899:39:74;8709:136;;;;;;;;;;-1:-1:-1;8709:136:74;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;3171:37276:71;;;;;;;;;;;:::o;:::-;;;;;19596:4;3171:37276;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3171:37276:71;;-1:-1:-1;3171:37276:71;;-1:-1:-1;3171:37276:71;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;3171:37276:71;;;;;;;;;;-1:-1:-1;3171:37276:71;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3171:37276:71;;;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;3171:37276:71;;;;:::i;:::-;;;-1:-1:-1;3171:37276:71;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;3171:37276:71;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;:::i;:::-;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;3171:37276:71;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;3171:37276:71;;;;:::o;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;3171:37276:71;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;3908:87::-;;;;;;;;;;;:::i;:::-;2707:73:70;;:::i;:::-;8718:4;;;:::i;:::-;1083:103:53;;:::i;:::-;16436:4:71;;;:::i;:::-;16596:40;;;:::i;:::-;3171:37276;16651:43;3171:37276;;1038:1:75;1904:184:76;7916:84:49;;;1904:184:76;;16651:43:71;16647:109;;18155:51;16785:15;;16865:21;16785:15;;;;3171:37276;;;16865:21;;:::i;:::-;17146:30;;;;;;17080:139;17190:19;;;;;;17080:139;;;:::i;:::-;3171:37276;;17234:52;3171:37276;;7916:84:49;2495:194:74;958:1:75;7916:84:49;;2495:194:74;;17234:52:71;17230:789;;3908:87;18044:96;;;;;;;;;;;;;:::i;:::-;3171:37276;;;;7916:84:49;2990:192:74;958:1:75;7916:84:49;;2990:192:74;;18155:51:71;18151:303;;3908:87;1148:1:53;;;;;;:::i;18151:303:71:-;18306:21;;18429:13;18306:21;-1:-1:-1;;;;;3171:37276:71;;;17376:15;3171:37276;;;;;;;18306:21;3171:37276;-1:-1:-1;;;;;3171:37276:71;;;18306:21;18429:13;;:::i;:::-;18151:303;;;;;;17230:789;17376:21;17857:151;17376:21;;;;;;;18044:96;17376:21;;;;;-1:-1:-1;;;;;3171:37276:71;;;17376:15;3171:37276;;;;;;;17376:21;;;:::i;:::-;17706:19;17680:24;;-1:-1:-1;;;;;3171:37276:71;;;32579:18;3171:37276;;;;;;;17680:24;17706:19;;:::i;:::-;17927:30;17975:19;;17857:151;;;:::i;:::-;17230:789;;;;;;;;;;16647:109;16717:28;3171:37276;16717:28;-1:-1:-1;;;;;3171:37276:71;;16717:28;3171:37276;;-1:-1:-1;34357:71:71;3171:37276;;;;;;;;;;;;;;;;;;-1:-1:-1;3171:37276:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3908:87::-;;;;3171:37276;3908:87;;;;;;:::i;:::-;1083:103:53;;:::i;:::-;5562:81:70;;:::i;:::-;3171:37276:71;;;;;;:::i;:::-;;;7207:400;;;3171:37276;;;7207:400;;3171:37276;;;7207:400;;;3171:37276;7207:400;3171:37276;;;;;;7207:400;3171:37276;;7207:400;3171:37276;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;7207:400;3171:37276;;;;;;:::i;:::-;7207:400;3171:37276;;;;;;;;:::i;:::-;;;;;7207:400;;;3171:37276;-1:-1:-1;;;;;3171:37276:71;7207:400;;;3171:37276;;7207:400;3171:37276;;;:::i;:::-;7207:400;;;3171:37276;7207:400;:::i;:::-;1148:1:53;;:::i;3171:37276:71:-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;:::o;3908:87::-;24408:21;3908:87;;;:::i;:::-;8718:4:70;;;:::i;:::-;-1:-1:-1;;;;;3171:37276:71;-1:-1:-1;3171:37276:71;-1:-1:-1;3171:37276:71;;;-1:-1:-1;3171:37276:71;;;24408:21;3171:37276;24459:1166;7916:84:49;24759:35:71;;;:::i;:::-;24840:38;24459:1166;24840:38;;;:::i;:::-;24459:1166;24925:39;;;:::i;:::-;3171:37276;9470:46:76;3171:37276:71;6019:108:49;;11059:44:76;3171:37276:71;11059:44:76;;3171:37276:71;2895:125:75;;11059:44:76;6019:108:49;;3171:37276:71;;;:::i;:::-;958:1:75;7916:84:49;;;;;3567:86:76;25319:37:71;3171:37276;;7916:84:49;958:1:75;7916:84:49;;;;;3171:37276:71;;25137:473;;;3171:37276;958:1:75;7916:84:49;;;;;3171:37276:71;;25137:473;;;3171:37276;958:1:75;7916:84:49;;;;;3171:37276:71;;25137:473;;;3171:37276;;;:::i;:::-;;;;25137:473;24459:1166;;3171:37276;25137:473;24459:1166;;3171:37276;25137:473;24459:1166;;3171:37276;;;;24459:1166;;3171:37276;;24459:1166;3171:37276;;24459:1166;;;3171:37276;;24459:1166;7916:84:49;;;3171:37276:71;;24459:1166;;;3171:37276;7916:84:49;;;;;3171:37276:71;;24459:1166;;;3171:37276;958:1:75;7916:84:49;;;;;3171:37276:71;;24459:1166;;;3171:37276;958:1:75;7916:84:49;;3171:37276:71;;24459:1166;;;3171:37276;;39955:69;39999:18;;;;;;40301:144;40352:9;40348:69;;1019:819:101;40364:1:71;1019:819:101;;40364:1:71;1019:819:101;;39438:11:71;-1:-1:-1;;;;;39438:11:71;3171:37276;1019:819:101;;;40364:1:71;1019:819:101;;;;;;40364:1:71;1019:819:101;;;40364:1:71;1019:819:101;4001:99:71;-1:-1:-1;;;;;4061:6:71;3171:37276;1148:4:79;1140:31;1136:104;;4001:99:71:o;1136:104:79:-;1194:35;;;;;;8911:160:70;-1:-1:-1;;;;;3171:37276:71;;9217:15:70;3171:37276:71;9217:15:70;3171:37276:71;;7916:84:49;3171:37276:71;9217:15:70;3171:37276:71;;7916:84:49;8984:24:70;8980:85;;8911:160;:::o;8980:85::-;9031:23;9217:15;9031:23;;3171:37276:71;;9217:15:70;9031:23;9293:163;-1:-1:-1;;;;;3171:37276:71;;9604:15:70;3171:37276:71;9604:15:70;3171:37276:71;;1038:1:75;3171:37276:71;9604:15:70;3171:37276:71;;7916:84:49;;;9367:25:70;9363:87;;9293:163;:::o;9363:87::-;9415:24;9604:15;9415:24;;3171:37276:71;;9604:15:70;9415:24;12436:323;;-1:-1:-1;;;;;3171:37276:71;;:::i;:::-;;;-1:-1:-1;3171:37276:71;12587:18:70;3171:37276:71;;;;-1:-1:-1;3171:37276:71;-1:-1:-1;3171:37276:71;;;-1:-1:-1;3171:37276:71;;;12660:14:70;3171:37276:71;;;-1:-1:-1;3171:37276:71;;12694:11:70;3171:37276:71;;;-1:-1:-1;3171:37276:71;;;;;;;;;1947:15:77;;3171:37276:71;;:::i;:::-;1947:24:77;;2002:26;;;:::i;:::-;1981:18;;;;:47;;;2061:24;;;:::i;:::-;2038:20;;;;:47;;;2127:24;;;:::i;:::-;2095:29;;;;;;:56;2194:74;3171:37276:71;;;2194:74:77;:::i;:::-;2161:30;;;:107;2300:24;;;:::i;:::-;2278:19;;;:46;;;3171:37276:71;;1038:1:75;;7916:84:49;1038:1:75;7916:84:49;;;;2365:119:77;;;;12436:323:70;2365:190:77;;;;12436:323:70;2571:13:77;-1:-1:-1;2586:13:77;;;;;;12436:323:70;;;;;;;;;;;;;:::o;2601:3:77:-;2663:15;;;;;;;2755:33;2663:15;2720:20;2663:15;3171:37276:71;2649:33:77;2663:15;;:18;:15;:18;:15;;:18;:::i;3171:37276:71:-;2720:20:77;3171:37276:71;;;;;;;;;;2720:20:77;3171:37276:71;2755:18:77;;:33;;;;;:::i;:::-;;;:::i;:::-;;2827:23;;;:::i;:::-;2802:48;:19;;;:48;:::i;:::-;3171:37276:71;2932:17:77;1237:14:44;1460:31;;2932:17:77;;;:::i;:::-;3171:37276:71;;;;3059:78:77;;3800:23;;3171:37276:71;;;3800:69:77;;;;2601:3;3977:660;;;;2601:3;;;;;;2571:13;3171:37276:71;2571:13:77;;;;3977:660;3171:37276:71;4236:195:77;3171:37276:71;4157:23:77;3171:37276:71;4062:56:77;3171:37276:71;;4062:56:77;:::i;:::-;4157:20;;:23;:::i;:::-;3171:37276:71;;;4236:195:77;;:::i;:::-;4454:30;;4450:173;;3977:660;;;;;;;4450:173;4586:17;4545:39;;;;:::i;:::-;4586:17;;:::i;:::-;4450:173;;;;;;3800:69;3171:37276:71;;;;;;;:::i;:::-;;;;:::i;:::-;3827:42:77;3800:69;;;;3059:78;3114:8;;;;;;;;;;2365:190;3171:37276:71;;;;-1:-1:-1;958:1:75;7916:84:49;1192:1:75;7916:84:49;3171:37276:71;2365:190:77;;;:119;2424:56;;;;;:::i;:::-;:60;;2365:119;;;;7222:480:70;-1:-1:-1;;;;;3171:37276:71;7336:15:70;3171:37276:71;7336:15:70;3171:37276:71;;;7336:15:70;3171:37276:71;;7916:84:49;;;958:1:75;7916:84:49;;3171:37276:71;11059:44:76;;;3171:37276:71;2895:125:75;;11059:44:76;6019:108:49;;7592:82:70;;;;7584:111;;7222:480;:::o;7592:82::-;7648:26;;7627:47;7648:26;7627:47;;:::i;:::-;3171:37276:71;7608:15:70;:66;;7584:111;7222:480;:::o;958:1:75:-;3171:37276:71;;958:1:75;3171:37276:71;958:1:75;;3171:37276:71;958:1:75;;;;:::o;19669:4:33:-;;3171:37276:71;19669:4:33;;;;;;3171:37276:71;19669:4:33;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;6731:255:76:-;6019:108:49;6731:255:76;958:1:75;6019:108:49;;19669:4:33;;;;;;;;;;;;;;;;6731:255:76;:::o;3171:37276:71:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3171:37276:71;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3171:37276:71;;;;;;;;465:4:50;;;;;;;:::o;:::-;;;;;;;;;;1320:325;;465:4;19669::33;;;;;;;;;;;;;;;1625:13:50;;;:::i;36489:409:71:-;859:9:41;36531:114:71;;3171:37276;36679:15;3171:37276;7916:84:49;36722:71:71;;3171:37276;9187:17:73;3051:52:55;36489:409:71:o;36722:71::-;36765:17;36572:5;36765:17;;36572:5;36765:17;36531:114;36600:34;36572:5;36600:34;;36572:5;36600:34;1741:504:45;3171:37276:71;;1881:21:45;:17;;2008:160;;;;;;4625:582:106;;4797:8;;-1:-1:-1;3171:37276:71;;5874:21:106;:17;;6046:142;;;;;;5870:383;6225:17;5894:1;6225:17;;5894:1;6225:17;4793:408;3171:37276:71;;5045:22:106;:49;;;4793:408;5041:119;;5173:17;;:::o;5041:119::-;-1:-1:-1;;;;;5121:24:106;;5066:1;5121:24;3171:37276:71;5121:24:106;3171:37276:71;;5066:1:106;5121:24;5045:49;5071:18;;;:23;5045:49;;9628:806:76;;3171:37276:71;9811:24:76;;;:::i;:::-;9470:46;3171:37276:71;6019:108:49;;-1:-1:-1;9952:13:76;;;;;;10406:21;;;9628:806;:::o;9967:3::-;6019:108:49;10054:42:76;;;;:::i;:::-;6019:108:49;;3267:1:75;;;;;;3171:37276:71;3267:1:75;;;10348:37:76;;;;:::i;:::-;3171:37276:71;;9937:13:76;;7436:424:77;3171:37276:71;;;;;:::i;:::-;;;;:::i;:::-;7589:31:77;;;7636:21;;465:4:50;7585:269:77;7436:424::o;7585:269::-;3171:37276:71;;7691:19:77;3171:37276:71;;:::i;:::-;7678:32:77;7691:19;;7733:22;:30;3171:37276:71;7733:22:77;:32;:22;;3171:37276:71;-1:-1:-1;;;;;3171:37276:71;;;;-1:-1:-1;;;;;3171:37276:71;;;7733:30:77;3171:37276:71;;7733:32:77;;;;3171:37276:71;7733:32:77;;;;;;;;;3171:37276:71;7733:32:77;;;7726:39;7674:180;7436:424::o;7733:32::-;;;;:22;:32;:22;:32;;;;;;;:::i;7674:180::-;7803:40;3171:37276:71;7803:40:77;;3171:37276:71;7803:40:77;2657:309:95;-1:-1:-1;;;;;3171:37276:71;2657:309:95;3171:37276:71;;;;;;2822:16:95;3171:37276:71;;2854:24:95;;;;-1:-1:-1;;2854:24:95;:::o;2818:142::-;2916:33;3171:37276:71;2916:24:95;3171:37276:71;;;;2916:11:95;3171:37276:71;;;;;;-1:-1:-1;;;;;3171:37276:71;;;;;;;;;;2916:24:95;3171:37276:71;-1:-1:-1;;;;;3171:37276:71;;;;;;;;;;2916:33:95;3171:37276:71;2909:40:95;:::o;2786:145:70:-;9187:17:73;2806:53:55;3171:37276:71;2837:88:70;;2786:145::o;2837:88::-;2894:20;-1:-1:-1;2894:20:70;;-1:-1:-1;2894:20:70;1192:349:53;551:66;2806:53:55;;1316:93:53;;1529:4;3051:52:55;;1192:349:53:o;1316:93::-;1368:30;-1:-1:-1;1368:30:53;;-1:-1:-1;1368:30:53;1547:106;1640:5;551:66;3051:52:55;1547:106:53:o;4619:1444:59:-;;;5749:30;3171:37276:71;;5749:30:59;:::i;:::-;5794:13;5806:1;5830:3;3171:37276:71;;5809:19:59;;;;;6003:11;6002:44;6003:11;:25;:11;;3171:37276:71;6003:11:59;;;:::i;:::-;3171:37276:71;6003:25:59;:::i;:::-;6002:44;:::i;:::-;5986:60;;;;:::i;:::-;3171:37276:71;;5794:13:59;;5809:19;;;;;4619:1444::o;887:427:50:-;;1068:5;887:427;1068:5;:::i;:::-;1186:122;;-1:-1:-1;;1186:122:50;;;;;;;;887:427;:::o;3450:119:70:-;;3544:17;3450:119;3544:17;:::i;:::-;3171:37276:71;;;;;;3543:18:70;3171:37276:71;-1:-1:-1;3171:37276:71;3543:18:70;;:::i;1736:177:44:-;;1848:58;1736:177;1616:3;3171:37276:71;1848:58:44;;:::i;8289:494:95:-;;;;;;8422:32;;;;;:::i;:::-;-1:-1:-1;;8468:37:95;;8464:313;;8289:494;;;;;;;:::o;8464:313::-;8525:25;;;8521:132;;3171:37276:71;8726:25:95;3171:37276:71;;;8726:25:95;;:::i;:::-;8464:313;;;;;;;8521:132;8577:61;;-1:-1:-1;;;;;8577:61:95;;;;3171:37276:71;8577:61:95;3171:37276:71;;;;;;8577:61:95;;17101:159:70;859:9:41;:23;17174:79:70;;;17101:159;:::o;17174:79::-;3171:37276:71;7916:84:49;17211:15:70;3171:37276:71;7916:84:49;3171:37276:71;17101:159:70;:::o;3171:37276:71:-;;;;;;;;;;:::o;3162:428:95:-;;859:9:41;3337:114:95;;-1:-1:-1;;;;;3545:28:95;3171:37276:71;;3378:5:95;3171:37276:71;3545:9:95;3171:37276:71;;;3378:5:95;3171:37276:71;;-1:-1:-1;;;;;3171:37276:71;;;;;;;;;;3545:28:95;3171:37276:71;;;;;;;;;;;3162:428:95:o;5216:1180::-;;;-1:-1:-1;;;;;3171:37276:71;;;5298:18:95;;;5294:80;;5409:21;:15;;;-1:-1:-1;;;;;3171:37276:71;;;5409:9:95;3171:37276:71;;;;;;;5409:21:95;3171:37276:71;5444:23:95;;;5440:115;;3171:37276:71;;;5589:21:95;:15;;;-1:-1:-1;;;;;3171:37276:71;;;5409:9:95;3171:37276:71;;;;;;;5589:21:95;3171:37276:71;5681:29:95;:20;;;-1:-1:-1;;;;;3171:37276:71;;;2487:14:95;3171:37276:71;;;;;;;5681:20:95;3171:37276:71;5681:29:95;:::i;:::-;5751:14;;;:::i;:::-;5777:20;;-1:-1:-1;;;;;3171:37276:71;;;2487:14:95;3171:37276:71;;;;;;;5777:20:95;3171:37276:71;;6113:62:95;;;;;;3171:37276:71;;;6113:62:95;;-1:-1:-1;;;;;3171:37276:71;;;6113:62:95;;;3171:37276:71;5314:1:95;3171:37276:71;;;;;;;;;;;;5314:1:95;6349:40;;;;5314:1;3171:37276:71;;;;;6113:62:95;;;;;;;;;5216:1180;-1:-1:-1;3171:37276:71;;;;;;;;;;;;;6349:40:95;;;;5216:1180::o;6113:62::-;;;;;;:::i;:::-;;;:::i;:::-;;;;5440:115;5490:54;5314:1;5490:54;-1:-1:-1;;;;;3171:37276:71;;;;;;;;;;;-1:-1:-1;34357:71:71;5294:80:95;5339:24;5314:1;5339:24;-1:-1:-1;;;;;3171:37276:71;;16717:28;3171:37276;;-1:-1:-1;34357:71:71;5894:129:70;;;:::i;:::-;7067:25;;;:::i;:::-;6800:73;;;5894:129;:::o;6800:73::-;-1:-1:-1;;;;;6846:16:70;;-1:-1:-1;6846:16:70;3171:37276:71;6846:16:70;3171:37276:71;;-1:-1:-1;6846:16:70;1418:149:43;1500:6;1496:65;;1418:149::o;1496:65::-;1529:21;;;;;;6714:614:46;;;3171:37276:71;;;;;;;1666:6:43;;;;;;:16;;;6714:614:46;1662:75:43;;;;7101:21:46;;;:::i;:::-;7138:13;7150:1;7153:10;;;;;;7299:22;;;;;6714:614;:::o;7165:3::-;7205:10;465:4:50;838:5;7205:10:46;3171:37276:71;7205:10:46;;;:::i;:::-;3171:37276:71;1946:22:46;7245:17;;;;:::i;:::-;3171:37276:71;7264:13:46;;;;:::i;:::-;3171:37276:71;1946:22:46;;:::i;:::-;838:5:50;:::i;:::-;465:4;7184:94:46;;;;:::i;:::-;3171:37276:71;;7138:13:46;;1666:16:43;1676:6;;;-1:-1:-1;1666:16:43;;;;3171:37276:71;;;;;;;;;;;;;:::i;20684:329:74:-;;3171:37276:71;20684:329:74;3171:37276:71;-1:-1:-1;;;;;;20857:66:74;20684:329;3171:37276:71;;20857:66:74;;;;;;;3171:37276:71;20857:66:74;;3171:37276:71;20857:66:74;;;3171:37276:71;;;;;;:::i;:::-;;-1:-1:-1;;3171:37276:71;;;;;;;;;:::i;:::-;20857:66:74;3171:37276:71;;20857:66:74;;;;;;;-1:-1:-1;20857:66:74;;;20684:329;3171:37276:71;;20853:154:74;;20684:329::o;20853:154::-;20955:41;-1:-1:-1;20955:41:74;20857:66;-1:-1:-1;20955:41:74;20857:66;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;6574:856:77;6819:15;;;;;3171:37276:71;7033:13:77;-1:-1:-1;7048:13:77;;;;;;6574:856;;;;;:::o;7063:3::-;16616:19:71;7120:18:77;7395:17;1237:14:44;7120:18:77;7107:35;7120:21;:18;;;;;:21;:::i;:::-;;7107:35;:::i;:::-;7082:60;:19;;;;;:60;:::i;:::-;3171:37276:71;;-1:-1:-1;3171:37276:71;;;;-1:-1:-1;3171:37276:71;;1460:31:44;7395:17:77;;;:::i;:::-;3171:37276:71;7033:13:77;;18466:2486:71;;;;;;;18855:24;;-1:-1:-1;;;;;3171:37276:71;;;32579:18;3171:37276;;;;;;;18855:24;18895:13;18907:1;18938:3;18914:15;;;;3171:37276;;18910:26;;;;;18978:18;;;;;:::i;:::-;19089:24;19104:9;;;;;:::i;19089:24::-;-1:-1:-1;;;;;3171:37276:71;;19089:24;;;19085:132;;19298:17;;;3171:37276;19298:17;;;;;:::i;:::-;3171:37276;19298:17;;:::i;:::-;19426:80;19461:17;19480:25;19461:17;;;;;:::i;19480:25::-;3171:37276;19426:80;;:::i;:::-;19408:15;;;3171:37276;;;;;;;;;;19408:15;3171:37276;;18895:13;;19085:132;19140:62;19169:9;;19161:18;19169:9;;;;;:::i;19161:18::-;19140:62;18907:1;19140:62;-1:-1:-1;;;;;3171:37276:71;;;19140:62;3171:37276;;;;;;;;;;;18910:26;;;;;;;;;;;19553:48;3171:37276;;8470:156:49;;2094:277:76;8470:156:49;;2094:277:76;;19553:48:71;3171:37276;;;19670:21;;-1:-1:-1;;;;;3171:37276:71;-1:-1:-1;3171:37276:71;-1:-1:-1;3171:37276:71;;;-1:-1:-1;3171:37276:71;;;19670:21;3171:37276;-1:-1:-1;;;;;3171:37276:71;19788:77;18914:15;3171:37276;;;;;;19788:77;;;;3171:37276;19788:77;;;;;;:::i;:::-;;;;;;;;;;20037:42;19788:77;18907:1;19788:77;;;18890:627;19906:12;;;;:::i;:::-;20037:42;:::i;:::-;20374:13;;;;:::i;:::-;20423:12;;;;;:::i;:::-;20511:30;;;20507:119;;2487:20:95;;;;20641:210:71;;2487:20:95;20804:37:71;18914:15;2487:20:95;3171:37276:71;2487:20:95;;-1:-1:-1;;;;;3171:37276:71;;;2487:14:95;3171:37276:71;;;;;;;2487:20:95;3171:37276:71;20818:15;;;3171:37276;20804:37;:::i;:::-;3171:37276;;;;;;;20641:210;;;:::i;:::-;;;;20924:21;18907:1;20924:21;;18466:2486::o;20507:119::-;20564:51;18907:1;20564:51;19788:77;3171:37276;;;928:3:95;3171:37276:71;928:3:95;-1:-1:-1;34357:71:71;19788:77;;;;18914:15;19788:77;18914:15;19788:77;;;;;;;:::i;:::-;;;;21457:370:74;;3171:37276:71;-1:-1:-1;;;;;;21659:79:74;21457:370;;;3171:37276:71;;;21659:79:74;;;;;;;3171:37276:71;21659:79:74;;3171:37276:71;21659:79:74;;;3171:37276:71;;;;;;:::i;:::-;;;;;;-1:-1:-1;;3171:37276:71;;;;;;;;;:::i;:::-;21659:79:74;3171:37276:71;;21659:79:74;;;;;;;-1:-1:-1;21659:79:74;;;21457:370;3171:37276:71;;21655:166:74;;21457:370::o;21655:166::-;21770:40;-1:-1:-1;21770:40:74;21659:79;-1:-1:-1;21770:40:74;21659:79;;;;;;;;;;;;;;:::i;:::-;;;;6940:1043;;3171:37276:71;;:::i;:::-;-1:-1:-1;3171:37276:71;1792:1:75;;2016:27;3171:37276:71;2091:22:75;958:1;2091:22;:::i;:::-;2171:21;;;:::i;:::-;3171:37276:71;7916:84:49;;2016:27:75;;;2091:22;958:1;2091:22;:::i;:::-;2171:21;;;:::i;:::-;2249:31;;;:::i;:::-;3171:37276:71;7916:84:49;;;2016:27:75;;;2091:22;958:1;2091:22;:::i;:::-;2171:21;;;:::i;:::-;2249:31;;;:::i;:::-;2341:30;;;:::i;:::-;3171:37276:71;7916:84:49;;;;2016:27:75;;2091:22;958:1;2091:22;:::i;:::-;2171:21;;;:::i;:::-;2249:31;;;:::i;:::-;2341:30;;;:::i;:::-;2431:34;;;:::i;:::-;3171:37276:71;7916:84:49;;;2016:27:75;;;;;958:1;3171:37276:71;7916:84:49;;;958:1:75;2091:22;;;:::i;:::-;3171:37276:71;7916:84:49;;3171:37276:71;;;:::i;:::-;958:1:75;7916:84:49;;;;;3171:37276:71;;;;7916:84:49;958:1:75;7916:84:49;;;;;3171:37276:71;;7080:896:74;;;3171:37276:71;958:1:75;7916:84:49;;;;;3171:37276:71;;7080:896:74;;;3171:37276:71;958:1:75;7916:84:49;;3171:37276:71;;7080:896:74;;;3171:37276:71;;;7080:896:74;;;3171:37276:71;;;7080:896:74;;;3171:37276:71;;;7080:896:74;;;3171:37276:71;;;7080:896:74;;;3171:37276:71;;;7080:896:74;;;3171:37276:71;;;7080:896:74;;;3171:37276:71;-1:-1:-1;;;;;3171:37276:71;7080:896:74;;;3171:37276:71;;:::o;7374:909:95:-;;;;-1:-1:-1;;;;;3171:37276:71;;;;7477:19:95;;;7473:84;;3171:37276:71;;;7571:21:95;;;7567:87;;7664:17;:33;:17;:24;:17;;;-1:-1:-1;;;;;3171:37276:71;;;7664:11:95;3171:37276:71;;;;;;;7664:33:95;3171:37276:71;;8004:60:95;;;;;;3171:37276:71;;;8004:60:95;;-1:-1:-1;;;;;3171:37276:71;;;8004:60:95;;;3171:37276:71;;;;;;;;;;;;;;;8238:38:95;;;;7494:1;3171:37276:71;;;;;8004:60:95;3171:37276:71;7567:87:95;7615:28;7494:1;7615:28;-1:-1:-1;;;;;3171:37276:71;;16717:28;3171:37276;;-1:-1:-1;34357:71:71;7473:84:95;7519:27;7494:1;7519:27;-1:-1:-1;;;;;3171:37276:71;;16717:28;3171:37276;;-1:-1:-1;34357:71:71;5694:130:70;3171:37276:71;6394:25:70;3171:37276:71;6375:15:70;:44;;:79;;;5694:130;5751:67;;5694:130::o;5751:67::-;5794:13;-1:-1:-1;5794:13:70;;-1:-1:-1;5794:13:70;6375:79;3171:37276:71;568:1:80;6423:15:70;3171:37276:71;7916:84:49;;;6375:79:70;;1913:1:73;;3171:37276:71;;;;;;:::i;:::-;;;;:::i;:::-;1913:1:73;;;;;3171:37276:71;1913:1:73;;;;;3171:37276:71;1913:1:73;;;;;;;;;;;;;;;;;;;;;3171:37276:71;;;1913:1:73;;;;;;;:::o;:::-;;;;;;;;;;3171:37276:71;;;1913:1:73;;;;;:::o;2080:2::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3171:37276:71;-1:-1:-1;3171:37276:71;;-1:-1:-1;3171:37276:71;2080:2:73;3171:37276:71;;2080:2:73;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;3171:37276:71;;;2080:2:73;;;;;;;3171:37276:71;2080:2:73;;;;;;;;3171:37276:71;2080:2:73;;;;-1:-1:-1;;;;;3171:37276:71;2080:2:73;;;;;;;;;;;3171:37276:71;2080:2:73;;;-1:-1:-1;;;;;3171:37276:71;2080:2:73;;;;;;;;;;;;;;;;;;;3171:37276:71;;2080:2:73;;3171:37276:71;2080:2:73;:::o;:::-;;3171:37276:71;;;;;;;;;;;;2080:2:73;-1:-1:-1;2080:2:73;;;;;;;;;;;:::o;:::-;;;;;;;;;;;-1:-1:-1;;;;;2080:2:73;;;3171:37276:71;;;2080:2:73;;;;3171:37276:71;;;:::i;:::-;2080:2:73;;;3171:37276:71;2080:2:73;;;;;3171:37276:71;;;2080:2:73;;;3171:37276:71;2080:2:73;;;;;3171:37276:71;;2080:2:73;;;3171:37276:71;2080:2:73;;3171:37276:71;;2080:2:73;;;;;;;;;;;;;;;-1:-1:-1;;;;;3171:37276:71;;;;;;2080:2:73;;;3171:37276:71;2080:2:73;;;;;;;;;;:::i;:::-;;;;3171:37276:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2080:2:73;;;;;;;;;;;:::i;:::-;3171:37276:71;;;;:::i;:::-;2080:2:73;;3171:37276:71;2080:2:73;;;3171:37276:71;:::i;:::-;2080:2:73;;;;3171:37276:71;2080:2:73;;;3171:37276:71;:::i;:::-;2080:2:73;;;;3171:37276:71;2080:2:73;;;3171:37276:71;:::i;:::-;2080:2:73;;;;3171:37276:71;2080:2:73;;;3171:37276:71;:::i;:::-;2080:2:73;;;;3171:37276:71;2080:2:73;;;3171:37276:71;:::i;:::-;2080:2:73;;;;3171:37276:71;2080:2:73;;;3171:37276:71;:::i;:::-;2080:2:73;;;;3171:37276:71;2080:2:73;;;3171:37276:71;:::i;:::-;2080:2:73;;;;;3171:37276:71;2080:2:73;;;3171:37276:71;:::i;:::-;2080:2:73;;;;3171:37276:71;2080:2:73;;;;3171:37276:71;:::i;:::-;2080:2:73;;;;;:::o;:::-;;;;;;;;;3171:37276:71;2080:2:73;;;;;;;;;;;;;:::i;:::-;;;;;3171:37276:71;;2080:2:73;;;3171:37276:71;2080:2:73;;;;3171:37276:71;;;-1:-1:-1;;;;;3171:37276:71;;;;;;;;;;;;;;;;;;;;;;;;2080:2:73;;;;;3171:37276:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3171:37276:71;;;;;2080:2:73;;;3171:37276:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7951:7863;;9255:25:70;9217:21;;-1:-1:-1;;;;;3171:37276:71;-1:-1:-1;3171:37276:71;-1:-1:-1;3171:37276:71;;;-1:-1:-1;3171:37276:71;;;9217:21:70;3171:37276:71;7916:84:49;;1435:182:76;;9255:25:70;8098:88:71;;8216:18;;3171:37276;1746:1:73;8255:23:71;;8251:72;;1913:1:73;8336:23:71;;8332:72;;8449:22;;;;;;:::i;:::-;9217:15:70;8517:13:71;9217:15:70;8532:13:71;;;;;;10645:19;;10970:117;10645:19;;;;;;;;2080:2:73;10645:19:71;;10619:23;;-1:-1:-1;;;;;3171:37276:71;;;10619:17;3171:37276;;;;;;;10619:23;2080:2:73;:::i;:::-;10970:52:71;3171:37276;10970:22;3171:37276;-1:-1:-1;;;;;3171:37276:71;;;10970:52;9210:22;11029:19;;:31;:19;;;:31;-1:-1:-1;;;;;3171:37276:71;;;;;11029:31;11062:24;3171:37276;9451:23;11062:24;;3171:37276;;;;;;;;;10970:117;;-1:-1:-1;;;;;3171:37276:71;;;9276:14;10970:117;;3171:37276;;;;2080:2:73;;;3171:37276:71;;;2080:2:73;;;3171:37276:71;;;;;-1:-1:-1;3171:37276:71;;9217:15:70;;3171:37276:71;;2080:2:73;;;;;10970:117:71;;;;;;;;;9217:15:70;;;10970:117:71;;;8512:2038;11250:26;12041:74;11250:26;;;;11938:72;11724:89;11250:26;;3171:37276;11760:52;6379:89:76;11188:129:71;3171:37276;;;;958:1:75;8470:156:49;10619:17:71;8470:156:49;3899:414:76;;11188:129:71;9345:19;9451:23;5826:175:76;4964:169;9345:19:71;11385:51;;;;3171:37276;;;8470:156:49;8160:472;3171:37276:71;8470:156:49;;;;8160:472;;4964:169:76;11525:54:71;;;3171:37276;;;8470:156:49;8160:472;3171:37276:71;8470:156:49;;;;8160:472;;5826:175:76;11651:41:71;;3171:37276;;;8470:156:49;8160:472;3171:37276:71;8470:156:49;;;;8160:472;;6379:89:76;11760:52:71;;:::i;:::-;11724:89;3171:37276;;;;;;2539:209:49;;;;;;;10440:413:76;;11724:89:71;11881:25;11844:63;11881:25;;;2080:2:73;;;;3171:37276:71;;;;2080:2:73;11844:63:71;3171:37276;;;;;;2539:209:49;;;;;;;11205:402:76;;11844:63:71;11938:72;:::i;:::-;12041:74;:::i;:::-;12134:24;;;;3171:37276;-1:-1:-1;;;;;2080:2:73;;;;;;-1:-1:-1;;;;;3171:37276:71;;;2080:2:73;3171:37276:71;12134:38;12130:2933;;8512:2038;15077:21;;;;;;-1:-1:-1;;;;;3171:37276:71;-1:-1:-1;3171:37276:71;-1:-1:-1;3171:37276:71;;;-1:-1:-1;3171:37276:71;;;15077:21;3171:37276;2080:2:73;;-1:-1:-1;;;;;3171:37276:71;-1:-1:-1;;;;;3171:37276:71;15129:21;;-1:-1:-1;;;;;3171:37276:71;;;17376:15;3171:37276;;;;;;;15129:21;:56;;;2080:2:73;-1:-1:-1;;;;;3171:37276:71;2080:2:73;;;;;;;;15129:56:71;15345:24;;3171:37276;;;15345:24;;;;:::i;:::-;15553:18;3171:37276;;2080:2:73;;3171:37276:71;;15662:19;;2080:2:73;;-1:-1:-1;;;;;3171:37276:71;-1:-1:-1;;;;;3171:37276:71;15695:62;;;:::i;:::-;15771:26;;3171:37276;;15529:10;;;;3171:37276;;15483:324;;;;;:::i;:::-;;;;;7951:7863::o;12130:2933::-;12311:227;12446:18;;;;;9217:15:70;12490:26:71;;3171:37276;;;12311:227;;;;;;;3171:37276;12311:227;;12380:10;9276:14;12311:227;;;:::i;:::-;;;;;;;;;;9217:15:70;12311:227:71;;;12130:2933;3171:37276;;12286:394;;12904:45;:32;2080:2:73;;;-1:-1:-1;;;;;3171:37276:71;;;12904:45;3171:37276;;;12904:47;;3171:37276;12904:47;;;9276:14;12904:47;;;;;;;;;;;9217:15:70;12904:47:71;;;12130:2933;-1:-1:-1;;3171:37276:71;;;;13512:121;;;12130:2933;13487:279;;3171:37276;;14990:40;6283:95:74;5748:91;5246:92;4764:82;4338:83;3891:88;3366;3171:37276:71;;2874:89:74;3171:37276:71;;6819:94:74;3171:37276:71;;2368:100:74;3171:37276:71;;;;;;;;;;8470:156:49;8160:472;3171:37276:71;8470:156:49;;;;8160:472;;2368:100:74;13955:36:71;;3171:37276;;;;;;8470:156:49;8160:472;3171:37276:71;8470:156:49;;;;8160:472;;2874:89:74;14071:35:71;;;3171:37276;;;;;;8470:156:49;8160:472;3171:37276:71;8470:156:49;;;;8160:472;;3366:88:74;9451:23:71;14213:41;;3171:37276;;;8470:156:49;8160:472;3171:37276:71;8470:156:49;;;;8160:472;;3891:88:74;10645:19:71;14346:30;;3171:37276;;;8470:156:49;8160:472;3171:37276:71;8470:156:49;;;;8160:472;;4338:83:74;12134:24:71;14450:29;;3171:37276;;;8470:156:49;8160:472;3171:37276:71;8470:156:49;;;;8160:472;;4764:82:74;11250:26:71;14562:38;;3171:37276;;;8470:156:49;8160:472;3171:37276:71;8470:156:49;;;;8160:472;;5246:92:74;3171:37276:71;14682:37;;3171:37276;;;8470:156:49;8160:472;3171:37276:71;8470:156:49;;;;8160:472;;5748:91:74;14826:41:71;;;3171:37276;;;8470:156:49;8160:472;3171:37276:71;8470:156:49;;;;8160:472;;3171:37276:71;8470:156:49;8160:472;3171:37276:71;8470:156:49;;;;8160:472;;6819:94:74;12130:2933:71;;;;13487:279;13681:66;2080:2:73;;;;-1:-1:-1;;;;;3171:37276:71;;;2080:2:73;13681:66:71;9217:15:70;13681:66:71;-1:-1:-1;;;;;3171:37276:71;;;19140:62;3171:37276;;;;12380:10;3171:37276;;;;;13512:121;13571:26;:62;:53;:26;;3171:37276;;;;;13571:53;3171:37276;;;;13571:62;;13512:121;;12904:47;;;;;;;-1:-1:-1;12904:47:71;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;12286:394;12595:66;2080:2:73;;;;-1:-1:-1;;;;;3171:37276:71;;;12311:227;;;;;;;;;;;;;;:::i;:::-;;;;10970:117;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;8547:3;8597:21;:18;;;:21;:::i;:::-;;3171:37276;;;;-1:-1:-1;;;;;3171:37276:71;;;;;-1:-1:-1;;;;;3171:37276:71;;;8736:28;;;:54;;;;8547:3;8732:114;;3171:37276;8969:21;;;8965:97;;9080:22;;9076:97;;9210:22;;;;;3171:37276;;;;;-1:-1:-1;;;;;3171:37276:71;;;;-1:-1:-1;;;;;3171:37276:71;9210:51;9345:19;;;;;;3171:37276;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;3171:37276:71;9451:23;;;3171:37276;;;;;;;;;;;;;:::i;:::-;9306:183;;;;;:::i;:::-;-1:-1:-1;;;;;3171:37276:71;;;9306:183;;;3171:37276;;;9306:183;;;3171:37276;9276:20;;;-1:-1:-1;;;;;3171:37276:71;;;;;;;;;;;9276:20;:27;;;3171:37276;-1:-1:-1;;;;;3171:37276:71;;;;;;;;;;9276:27;1913:1:73;;;;:::i;:::-;3171:37276:71;;;;;:::i;:::-;;;;:::i;:::-;9508:41;;9210:51;;;9573:42;;;9504:457;9569:123;;;9504:457;;;3171:37276;10099:41;;;;3171:37276;10099:41;;9276:14;10099:41;;;;;;;;;;9217:15:70;10099:41:71;;;9504:457;2080:2:73;;;3171:37276:71;;;;;;;10159:35;10155:250;2080:2:73;;;10221:22:71;;9217:15:70;10221:22:71;9217:15:70;10221:22:71;10155:250;3171:37276;2080:2:73;;;;;;;;;10314:58:71;2080:2:73;;;3171:37276:71;10314:58;;;;:::i;:::-;2080:2:73;3171:37276:71;;2080:2:73;;;10314:58:71;10475:29;:17;;;-1:-1:-1;;;;;3171:37276:71;;;23356:11;3171:37276;;;;;;;10475:17;:29;:::i;:::-;8547:3;8517:13;;;;;3171:37276;8517:13;;10099:41;;;;;;-1:-1:-1;10099:41:71;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;9573:42;3171:37276;;;;-1:-1:-1;9573:42:71;;;9504:457;3171:37276;;;;;;;:::i;:::-;;;;:::i;:::-;9716:42;3171:37276;;9778:105;;9712:249;;9504:457;;9712:249;9928:18;9217:15:70;9928:18:71;9276:14;9217:15:70;9928:18:71;9076:97;9129:29;9217:15:70;9129:29:71;-1:-1:-1;;;;;3171:37276:71;;16717:28;3171:37276;;-1:-1:-1;34357:71:71;8965:97;9017:30;9217:15:70;9017:30:71;9276:14;9217:15:70;9017:30:71;8732:114;8817:14;9217:15:70;8817:14:71;9276;9217:15:70;8817:14:71;8736:54;3171:37276;;;;8768:22;;8736:54;;8332:72;8382:11;9217:15:70;8382:11:71;;9217:15:70;8382:11:71;8251:72;8301:11;9217:15:70;8301:11:71;;9217:15:70;8301:11:71;8098:88;8148:27;9217:15:70;8148:27:71;-1:-1:-1;;;;;3171:37276:71;;16717:28;3171:37276;;-1:-1:-1;34357:71:71;7617:261:76;6019:108:49;7617:261:76;3171:37276:71;6019:108:49;;19669:4:33;;;;;;;;;;;;;;;;7617:261:76;:::o;8442:263::-;6019:108:49;;3171:37276:71;6019:108:49;;19669:4:33;;;;;;;;;;;;;;;;8442:263:76;:::o;3171:37276:71:-;;;;;;;;;;;;;;;;;;-1:-1:-1;3171:37276:71;;-1:-1:-1;3171:37276:71;;-1:-1:-1;3171:37276:71;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;3171:37276:71;;;;;;;;;;-1:-1:-1;3171:37276:71;;;;;;;;;;34375:314:119;34568:16;34552:33;;34548:105;;34375:314;:::o;34548:105::-;34608:34;;;;3171:37276:71;;34608:34:119;;4346:904:70;;4485:10;;4481:23;;9520:18:73;4589:26:70;;;;1796:196:47;-1:-1:-1;;;;;3171:37276:71;-1:-1:-1;3171:37276:71;;;;-1:-1:-1;3171:37276:71;2806:53:55;1796:196:47;;4589:26:70;3171:37276:71;;;;;;4494:1:70;3171:37276:71;;;;;;;;;;;;;4738:9:70;;;9342:26:73;;3831:53:55;;;-1:-1:-1;;3171:37276:71;;;;;;;5238:4:70;3051:52:55;;5238:4:70;:::i;4734:423::-;4944:12;4940:217;;4734:423;5238:4;4734:423;5238:4;:::i;4940:217::-;9342:26:73;3831:53:55;;;6806:1:47;3171:37276:71;;;;;;;5238:4:70;3051:52:55;;4940:217:70;;;;4481:23;4497:7;;:::o;2311:281:44:-;;1237:14;2426:25;;;:58;;;;;2311:281;2422:113;;;3080:3;2080:2:73;3171:37276:71;;;;;;;;2311:281:44;:::o;2422:113::-;2507:17;;;;;;2426:58;2455:29;;;;2426:58;;;4358:211:95;928:3;4449:43;;4445:118;;4358:211;:::o;4445:118::-;4515:37;;;;3171:37276:71;;4515:37:95;;7866:704:77;;;8372:29;465:4:50;838:5;8372:191:77;7866:704;8058:20;:48;:20;;;;;:48;:::i;:::-;3171:37276:71;1946:22:46;8466:42:77;:30;;;;;:42;:::i;:::-;3171:37276:71;8522:31:77;:19;;;;;:31;:::i;838:5:50:-;465:4;8372:29:77;;;:191;:::i;3804:110:70:-;3891:15;;3804:110;3891:15;:::i;:::-;;;:::i;4575:635:95:-;4643:20;;-1:-1:-1;;;;;3171:37276:71;;;2487:14:95;3171:37276:71;;;;;;;4643:20:95;3171:37276:71;;;928:3:95;3171:37276:71;;;;;;;;;-1:-1:-1;;;;;3171:37276:71;;4842:15:95;;-1:-1:-1;;;;;3171:37276:71;;;5409:9:95;3171:37276:71;;;;;;;4842:15:95;-1:-1:-1;3171:37276:71;;;;;-1:-1:-1;3171:37276:71;;;;;;;;-1:-1:-1;3171:37276:71;;4924:66:95;3171:37276:71;;4924:66:95;;;3171:37276:71;928:3:95;3171:37276:71;;;;;;4924:66:95;;;;5115:88;;;;;-1:-1:-1;3171:37276:71;;5115:88:95;;3171:37276:71;5115:88:95;;;;;;;;;3171:37276:71;928:3:95;3171:37276:71;;;;;;;;;;;;;;;;5115:88:95;;;;;;;;;;;4575:635;:::o;5115:88::-;;;;;;:::i;3596:756::-;;-1:-1:-1;;;;;3171:37276:71;;;3676:16:95;;;3672:78;;3785:29;:20;;;-1:-1:-1;;;;;3171:37276:71;;;2487:14:95;3171:37276:71;;;;;;;3785:20:95;3171:37276:71;3785:29:95;:::i;:::-;3963:19;:15;;;-1:-1:-1;;;;;3171:37276:71;;;5409:9:95;3171:37276:71;;;;;;;3963:19:95;3171:37276:71;;;;;;4043:14:95;;;:::i;:::-;4069:20;;-1:-1:-1;;;;;3171:37276:71;;;2487:14:95;3171:37276:71;;;;;;;4069:20:95;3171:37276:71;;;3690:1:95;3171:37276:71;4122:38:95;3171:37276:71;;4122:38:95;;;;3171:37276:71;;;;;;;;4122:38:95;;;;4285:60;;;;;3171:37276:71;;;4285:60:95;;3690:1;4285:60;;;3171:37276:71;;;-1:-1:-1;;;;;3171:37276:71;;;;;;;;;;;;;;;;;;3690:1:95;3171:37276:71;;;;4285:60:95;3171:37276:71;3672:78:95;3715:24;3690:1;3715:24;-1:-1:-1;;;;;3171:37276:71;;16717:28;3171:37276;;-1:-1:-1;34357:71:71;11721:446:76;3171:37276:71;;11721:446:76;3171:37276:71;11899:3:76;3171:37276:71;;11869:28:76;;;;;11960:20;;;;:::i;:::-;3171:37276:71;;11998:42:76;;;;:::i;:::-;8966:3:49;;8956:13;;;;8952:64;;3171:37276:71;;;;;;;;2641:5:118;;;;;;:13;;;3171:37276:71;9204:40:49;;;9180:112;;3171:37276:71;;;;;9400:76:49;;3171:37276:71;;2539:209:49;3171:37276:71;;2539:209:49;;;;;;;11899:3:76;3171:37276:71;11854:13:76;;;9400:76:49;9450:15;3171:37276:71;9450:15:49;;3171:37276:71;9450:15:49;9180:112;9268:13;3171:37276:71;9268:13:49;;3171:37276:71;9268:13:49;2641::118;;;11869:28:76;3171:37276:71;;;-1:-1:-1;;11721:446:76:o;7884:552::-;19917:10:33;8036:26:76;;8032:97;;19669:4:33;8232:183:76;465:4:50;;8232:183:76;;:::i;8711:554::-;;19917:10:33;8864:26:76;;8860:97;;9060:184;;19669:4:33;3171:37276:71;465:4:50;;9060:184:76;;:::i;14924:779:70:-;;-1:-1:-1;;;;;3171:37276:71;;;;;;15152:60:70;;;;;;;;;;;;;;;;;;;;14924:779;15132:80;;;15128:143;;3171:37276:71;;;15305:60:70;;;;15152;15305;;;;;;;;;15152;15305;;;14924:779;15285:80;;;;15281:144;;15564:21;;15540;15564:67;15647:49;15564:21;;15647:49;15564:21;-1:-1:-1;;;;;3171:37276:71;-1:-1:-1;3171:37276:71;-1:-1:-1;3171:37276:71;;;-1:-1:-1;3171:37276:71;;;15564:21:70;3171:37276:71;15564:67:70;:::i;:::-;15540:21;-1:-1:-1;;;;;3171:37276:71;-1:-1:-1;3171:37276:71;-1:-1:-1;3171:37276:71;;;-1:-1:-1;3171:37276:71;;;15540:21:70;3171:37276:71;;;;;;;;;;;;;;15647:49:70;;;;14924:779::o;15281:144::-;15388:26;15152:60;15388:26;15152:60;;15388:26;15305:60;;;;;;-1:-1:-1;15305:60:70;;;;;;:::i;:::-;;;;;15128:143;15235:25;15152:60;15235:25;15152:60;;15235:25;15152:60;;;;;;;;;;;;;;:::i;:::-;;;;8641:1623:77;;;;3171:37276:71;8915:29:77;:41;:29;;;;;:41;:::i;:::-;3171:37276:71;9458:36:77;;;9454:804;;8641:1623;;;;;;:::o;9454:804::-;3638:53:46;3171:37276:71;;;3665:25:46;3171:37276:71;;10184:31:77;3171:37276:71;9669:111:77;3171:37276:71;;9669:111:77;:::i;:::-;10120:30;10184:19;10120:42;:30;;;;;:42;:::i;:::-;3171:37276:71;10184:19:77;;;:31;:::i;:::-;3171:37276:71;3665:25:46;;:::i;:::-;3638:53;;:::i;:::-;9454:804:77;;;;;;;;1998:187:47;;-1:-1:-1;;;;;3171:37276:71;-1:-1:-1;3171:37276:71;;;;-1:-1:-1;3171:37276:71;3051:52:55;1998:187:47:o;2097:657:49:-;;3171:37276:71;19627:2:33;3171:37276:71;9400:76:49;;3171:37276:71;2539:209:49;;;3171:37276:71;2539:209:49;;;;2097:657;:::o;:::-;;8966:3;8956:13;;;;8952:64;;3171:37276:71;;;;;;;;2641:5:118;9226:3:49;2641:5:118;:13;:5;;;:13;9226:3:49;2641:13:118;19627:2:33;9204:40:49;9180:112;;3171:37276:71;19627:2:33;3171:37276:71;9400:76:49;;2539:209;;;;;;;;;2097:657;:::o;2641:13:118:-;;;6992:619:76;;19917:10:33;7292:26:76;;7288:97;;19669:4:33;465::50;;3171:37276:71;19627:2:33;3171:37276:71;9400:76:49;;2539:209;;3171:37276:71;2539:209:49;;;;6992:619:76;:::o"},"methodIdentifiers":{"allowance(address,address,address)":"927da105","approve(address,address,uint256)":"e1f21c67","balanceOf(address,address)":"f7888aec","computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))":"4d472bdd","emitAuxiliaryEvent(bytes32,bytes)":"c8088247","getAddLiquidityCalledFlag(address)":"ace9b89b","getAggregateSwapFeeAmount(address,address)":"85e0b999","getAggregateYieldFeeAmount(address,address)":"00fdfa13","getAuthorizer()":"aaabadc5","getBptRate(address)":"4f037ee7","getCurrentLiveBalances(address)":"535cfd8a","getERC4626BufferAsset(address)":"4afbaf5a","getHooksConfig(address)":"ce8630d4","getNonzeroDeltaCount()":"db817187","getPoolConfig(address)":"f29486a1","getPoolData(address)":"13d21cdf","getPoolPausedState(address)":"15e32046","getPoolRoleAccounts(address)":"e9ddeb26","getPoolTokenInfo(address)":"67e0e076","getPoolTokenRates(address)":"7e361bde","getPoolTokens(address)":"ca4f2803","getProtocolFeeController()":"85f2dbd4","getReservesOf(address)":"96787092","getStaticSwapFeePercentage(address)":"b45090f9","getTokenDelta(address)":"9e825ff5","getVaultAdmin()":"1ba0ae45","initialize(address,address,address[],uint256[],uint256,bytes)":"ba8a2be0","isERC4626BufferInitialized(address)":"6844846b","isPoolInRecoveryMode(address)":"be7d628a","isPoolInitialized(address)":"532cec7c","isPoolPaused(address)":"6c9bc732","isPoolRegistered(address)":"c673bdaf","isQueryDisabled()":"b4aef0ab","isQueryDisabledPermanently()":"13ef8a5d","isUnlocked()":"8380edb7","quote(bytes)":"edfa3568","quoteAndRevert(bytes)":"757d64b3","reentrancyGuardEntered()":"d2c725e0","registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"eeec802f","removeLiquidityRecovery(address,address,uint256,uint256[])":"a07d6040","totalSupply(address)":"e4dc2aa4","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"mainVault\",\"type\":\"address\"},{\"internalType\":\"contract IVaultAdmin\",\"name\":\"vaultAdmin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceOverflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CodecOverflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotStaticCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"PoolTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"Result\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokensNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"emitAuxiliaryEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getAddLiquidityCalledFlag\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getERC4626BufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"isERC4626BufferInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabledPermanently\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reentrancyGuardEntered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOutRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"PoolTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"Result(bytes)\":[{\"params\":{\"result\":\"The result of the query operation\"}}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"TokensNotSorted()\":[{\"details\":\"Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can predict the token order without having to query the Vault. (It is also legacy v2 behavior.)\"}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"Approval(address,address,address,uint256)\":{\"params\":{\"owner\":\"The token holder\",\"pool\":\"The pool token receiving the allowance\",\"spender\":\"The account being authorized to spend a given amount of the token\",\"value\":\"The number of tokens spender is authorized to transfer from owner\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Transfer(address,address,address,uint256)\":{\"params\":{\"from\":\"The token source\",\"pool\":\"The pool token being transferred\",\"to\":\"The token destination\",\"value\":\"The number of tokens\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"_0\":\"Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"_0\":\"True if successful, false otherwise\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"_0\":\"Token balance of the account\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"dynamicSwapFeePercentage\":\"The dynamic swap fee percentage\"}},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\"}},\"getAddLiquidityCalledFlag(address)\":{\"details\":\"Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional is the only standard way to exit a position without fees, and this flag is used to enable fees in that case. It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse than a simple swap for every pool type.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"_0\":\"True if liquidity has been added to this pool in the current transaction Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"_0\":\"The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"_0\":\"The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"_0\":\"Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getERC4626BufferAsset(address)\":{\"details\":\"To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers should never call `wrapper.asset()` directly, at least without checking it against the asset registered with the Vault on initialization.\",\"params\":{\"wrappedToken\":\"The wrapped token specifying the buffer\"},\"returns\":{\"asset\":\"The underlying asset of the wrapped token\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"_0\":\"The hooks configuration as a `HooksConfig` struct\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"_0\":\"The current value of `_nonzeroDeltaCount`\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"_0\":\"The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"The `PoolData` result\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period. Balancer timestamps are 32 bits.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"_0\":\"True if the Pool is paused\",\"_1\":\"The timestamp of the end of the Pool's pause window\",\"_2\":\"The timestamp after which the Pool unpauses itself (if paused)\",\"_3\":\"The pause manager, or the zero address\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"_0\":\"A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"tokens\":\"List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"_0\":\"Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"_0\":\"The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"_0\":\"The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"_0\":\"The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"_0\":\"The address of the Vault admin\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"isERC4626BufferInitialized(address)\":{\"details\":\"An initialized buffer should have an asset registered in the Vault.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"_0\":\"True if the ERC4626 buffer is initialized\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"_0\":\"True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"_0\":\"True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"_0\":\"True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"_0\":\"True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"If true, queries might either be disabled temporarily or permanently.\",\"returns\":{\"_0\":\"True if query functionality is reversibly disabled\"}},\"isQueryDisabledPermanently()\":{\"details\":\"This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\",\"returns\":{\"_0\":\"True if query functionality is permanently disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"_0\":\"True if the Vault is unlocked, false otherwise\"}},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"reentrancyGuardEntered()\":{\"returns\":{\"_0\":\"True if the Vault is currently executing a nonReentrant function\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. Balancer timestamps are 32 bits. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOutRaw\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"_0\":\"Total supply of the token\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BalanceOverflow()\":[{\"notice\":\"One of the balances is above the maximum value that can be stored.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"CodecOverflow()\":[{\"notice\":\"Function called with an invalid value.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"ErrorSelectorNotFound()\":[{\"notice\":\"Handle the \\\"reverted without a reason\\\" case (i.e., no return data).\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotStaticCall()\":[{\"notice\":\"A state-changing transaction was initiated in a context that only allows static calls.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"OutOfBounds()\":[{\"notice\":\"Function called with an invalid bitLength or offset.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"PoolTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a pool token can't be lower than the absolute minimum.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"Result(bytes)\":[{\"notice\":\"On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TokensNotSorted()\":[{\"notice\":\"The tokens supplied to an array argument were not sorted in numerical order.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"Approval(address,address,address,uint256)\":{\"notice\":\"The allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Transfer(address,address,address,uint256)\":{\"notice\":\"Pool tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"getAddLiquidityCalledFlag(address)\":{\"notice\":\"This flag is used to detect and tax \\\"round-trip\\\" interactions (adding and removing liquidity in the same pool).\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getERC4626BufferAsset(address)\":{\"notice\":\"Gets the registered asset for a given buffer.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"isERC4626BufferInitialized(address)\":{\"notice\":\"Checks if the wrapped token has an initialized buffer in the Vault.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Returns true if queries are disabled on the Vault.\"},\"isQueryDisabledPermanently()\":{\"notice\":\"Returns true if queries are disabled permanently; false if they are enabled.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"reentrancyGuardEntered()\":{\"notice\":\"Expose the state of the Vault's reentrancy guard.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"notice\":\"Bytecode extension for the Vault containing permissionless functions outside the critical path. It has access to the same storage layout as the main vault. The functions in this contract are not meant to be called directly. They must only be called by the Vault via delegate calls, so that any state modifications produced by this contract's code will actually target the main Vault's state. The storage of this contract is in practice unused.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/VaultExtension.sol\":\"VaultExtension\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IERC20MultiTokenErrors.sol\":{\"keccak256\":\"0x4994bc0f8e5905640876a9411dadb73221ea2b7b1168d22cf5fe44ee1ca16960\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://69a0a6ab9c2622426ccfcb7263deb5615e589e98b3b31ea9fcd21595bb42a13d\",\"dweb:/ipfs/QmVW6GVXGTHnVo8MGk7zdLMASR8uN7khPsrEMXwgy4NBrQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol\":{\"keccak256\":\"0x9dc4c8d6dd5dbc108dd377dab73a3e6c84e8c104713d2afb3cba8acc9ddf4c63\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2ef7c65fe356144f8cd720109b818e1ec6cc495ca35b55ca273ef9db45c6ae00\",\"dweb:/ipfs/QmREJgnfgoqemnYKvfYjTFJBAMsV9VAKA5AY5Woprpc1vs\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\":{\"keccak256\":\"0xa1014b8d96cdfd149f502cda06f25e51885a6456b41061ed213086fcc1c496b4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8a96e7e176f73762c6de904de39472fe970f12f6d3631097227bc664bd0780c1\",\"dweb:/ipfs/QmXcu5bk8tJTqR6UwkdKNtsodzqYGpJsPdfjQmdJFyKZjR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":{\"keccak256\":\"0xb4ee9e1543d36bdf9eeb4a9d5ab41170723239a1e27a2272f2e31de4765c019b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b70dd5e4fa496c2c1efb6bd20368587ba3c9c0d0afac9dc3631a29ff2628f99\",\"dweb:/ipfs/QmQigXUkpDuVK5VSX67RABrAC9bashPcHMasgPRNJb4k8Z\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol\":{\"keccak256\":\"0xf98fec19a1516432d7540f0cde2e967b627afbc5a361835766d57be8ba10b4e2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://94b49929bff77d1fdaab8916350356fc9816317beef4f33c3af0e6a40493d01c\",\"dweb:/ipfs/QmPPhtmpPvgedbtQaJZz7JQCmiGKKTHmfh7EGhJS1yUCia\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":{\"keccak256\":\"0xb5f6b1d0ee3f295a717ce58329eaadccb1eefc2e1e02e2e7c438e377628475cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03c1b9bc73b7d14d9e1948a31c271a03a6ba4291f44d9aff17e60d300c111d0d\",\"dweb:/ipfs/QmNpW3iD3ST76N6xTncuVgYSuafSqFkXUmxNaK8uybr96G\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0xeb183354089582d4a3fc8ded6cc410a2937f2eac2aa47b3ab13b0f5e6ede10e5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ecef18f7f0f57d749d5b0e11ab887299be15e1b6971a4bb9104d06e45705231b\",\"dweb:/ipfs/QmeYRDD5UtVKu2YFJm3SmHFriK6LUa2Tzg7EdZrneEfzNR\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x79f2ec4f7314bd1c3555368ff02bb9d382489dc8bbd7efbbf306f9a5084f3bec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a57c155451c5b1c1c59a27770754ccd9ba1be9344db6ac45b8744eba5fa4fa2f\",\"dweb:/ipfs/QmarkRwGaS3egg1FaQH6LibqjT6NocVUbD1jMPWtFxFaQV\"]},\"@balancer-labs/v3-vault/contracts/BasePoolMath.sol\":{\"keccak256\":\"0x28078c6fa4d55418c25505d4683642cb51fe55b2155ef7418db6c70631a30d6a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://864b91fdc2b69725bcc07f06d9adebe87117561582fa58f1e4410d8928cd205c\",\"dweb:/ipfs/QmWCDsbTxtmEMLhorqfGF1LDMHMqqVnV9sk9mUTPR7eog8\"]},\"@balancer-labs/v3-vault/contracts/VaultCommon.sol\":{\"keccak256\":\"0xad949728097754fb91dd82f46a4f3430f0caf092fe719f04c030325e623c59cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b6ba4635b64181a08098f2b4bde9bc6ceb8580d24654ec39c3d38ac2c8082317\",\"dweb:/ipfs/QmbthXemuT8Qvs2jdTADdyzbcPuZaKWfZjRn7j8dWuwffs\"]},\"@balancer-labs/v3-vault/contracts/VaultExtension.sol\":{\"keccak256\":\"0x40490c1c492b44a3fbc04a9642abb41c86b124a0e510aedbee2886040058a5a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7b7d969f2f08bb32524e3678ef1b9cbdd3d9630b0cee495527a42a0ca640cd94\",\"dweb:/ipfs/QmSpqFru9X2V1SD3cE63jcdNiHLZdTvXXGw6suCbzHnqxM\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@balancer-labs/v3-vault/contracts/VaultStorage.sol\":{\"keccak256\":\"0x283153cc86b04e7b5ded7b317a7773cd52912661922d477bccc7e3ef9c4fd332\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://30e03b35be9f4aebba5ea1f6fd1f72fb37990c916a22ef1dd4a01af809f89146\",\"dweb:/ipfs/QmNri89FgxWKFPkN67tvzAGf6kSyMuYvZd62ZW9a5MJBJH\"]},\"@balancer-labs/v3-vault/contracts/lib/HooksConfigLib.sol\":{\"keccak256\":\"0xaf3a7b4bbc1427ffb36b89cab5e485494afbddaff7195e0533f9c29a88c217b3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c653115b697d1c2a340a485e37a1d1a7b18bd3da4304ef12480bf9dcb8f61dc8\",\"dweb:/ipfs/QmfPNVqSeuG6gJr2x4y41czE5ivBz8vLpZ3R97VVnbK1uT\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolConfigConst.sol\":{\"keccak256\":\"0xcec5acd992ba3d85194d2a66de785676e5fbd76c7ef4bd75f581582c637e9191\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03feaba5c47de6cfa364a9f78f3d1cbc48c6e59e89348a56e773631ce3d52c4d\",\"dweb:/ipfs/QmWZmpFLKk6qEsTtbPaiKBWvTnSuYzQdbNJZX4Bng16c3F\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolConfigLib.sol\":{\"keccak256\":\"0x0df4ac214754751acdaa044f697ef2a45823689689aac22a6a102c8e543d97c7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13c1c708ac1a1f5523282a7430d7f5300120ac17b3c77a0bd103d2afe7aff979\",\"dweb:/ipfs/QmPstE7ZquJ4zMaCEXix8iCXc6hTSyNQaR9Z4aWBMTa9ys\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolDataLib.sol\":{\"keccak256\":\"0x0f004ef9c126426c1391516247f90cbb699982f3c545c821c2bdc3796c93f781\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://93d7b94cb4e0c9eee127258fb69e390d34c391444f337b6cc5cbe5beb702f4e7\",\"dweb:/ipfs/QmbswDz4DrsXaEh9RSvpmWKX5JCLoTavyAX2511eKr5rQd\"]},\"@balancer-labs/v3-vault/contracts/lib/VaultExtensionsLib.sol\":{\"keccak256\":\"0xf17a6fb82ff8eac940260544aa041e2cf8b826c0f7e205b4d52a4c5394a7ee38\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c88893eba6593f2f7ef05e3ffeb61416b6cc630eaad2efa90e77262f3282ab81\",\"dweb:/ipfs/QmX9XhQix9yKT7buiT77igy8Bf1jvwwYGxpmTr4e5mWnQD\"]},\"@balancer-labs/v3-vault/contracts/lib/VaultStateLib.sol\":{\"keccak256\":\"0xc40f34646f76afe536a326173d3c8cd663a655375531f65f3e6f7c63cecddeeb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a97b6d2363d70869b9cf66104a6c6bdfc84d351085c94b23b0104f2608e52ff4\",\"dweb:/ipfs/QmVPVR8F6nSxxhxTpFp5cgH9n1dE2E5UXD6cPauumtpS3e\"]},\"@balancer-labs/v3-vault/contracts/token/ERC20MultiToken.sol\":{\"keccak256\":\"0x49578c053271957fa9661c6a3e3ce6310a3f0690be6deca9eeb28f4e129bcfd3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e3bbd6d7baa790f6e259dfcab0ae2b0db96c08b21739dca829217af6fdbea15d\",\"dweb:/ipfs/QmVgirrgRbkHVdfthMKTJi98QeHmx9DHTT1WBNQRYogpBn\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/VaultGuard.sol":{"VaultGuard":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60a034606057601f60b238819003918201601f19168301916001600160401b03831184841017606457808492602094604052833981010312606057516001600160a01b03811681036060576080526040516039908160798239608051815050f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe5f80fdfea26469706673582212205eb38cb825d4eb9173120381e173db99b9a726aee63c8bf1b9ab18ca0b07c5c964736f6c634300081b0033","opcodes":"PUSH1 0xA0 CALLVALUE PUSH1 0x60 JUMPI PUSH1 0x1F PUSH1 0xB2 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH1 0x64 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH1 0x60 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH1 0x60 JUMPI PUSH1 0x80 MSTORE PUSH1 0x40 MLOAD PUSH1 0x39 SWAP1 DUP2 PUSH1 0x79 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MCOPY 0xB3 DUP13 0xB8 0x25 0xD4 0xEB SWAP2 PUSH20 0x120381E173DB99B9A726AEE63C8BF1B9AB18CA0B SMOD 0xC5 0xC9 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"308:368:72:-:0;;;;;;;;;;;;;-1:-1:-1;;308:368:72;;;;-1:-1:-1;;;;;308:368:72;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;308:368:72;;;;;;409:14;;308:368;;;;;;;;409:14;308:368;;;;;;-1:-1:-1;308:368:72;;;;;;-1:-1:-1;308:368:72;;;;;-1:-1:-1;308:368:72"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212205eb38cb825d4eb9173120381e173db99b9a726aee63c8bf1b9ab18ca0b07c5c964736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 MCOPY 0xB3 DUP13 0xB8 0x25 0xD4 0xEB SWAP2 PUSH20 0x120381E173DB99B9A726AEE63C8BF1B9AB18CA0B SMOD 0xC5 0xC9 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"308:368:72:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Contract that shares the modifier `onlyVault`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":\"VaultGuard\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/VaultStorage.sol":{"VaultStorage":{"abi":[],"evm":{"bytecode":{"functionDebugData":{"finalize_allocation":{"entryPoint":338,"id":null,"parameterSlots":1,"returnSlots":0},"fun_calculateVaultStorageSlot":{"entryPoint":385,"id":28383,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6101c06040908082523461014e578061001a61003692610152565b600a8152691a5cd55b9b1bd8dad95960b21b6020820152610181565b60c05261006a815161004781610152565b60118152701b9bdb96995c9bd1195b1d1850dbdd5b9d607a1b6020820152610181565b60e052610098815161007b81610152565b600b81526a746f6b656e44656c74617360a81b6020820152610181565b906101009182526100d181516100ad81610152565b6012815271185919131a5c5d5a591a5d1e50d85b1b195960721b6020820152610181565b9061012091825261010181516100e681610152565b60098152681cd95cdcda5bdb925960ba1b6020820152610181565b90610140918252519160399384610266853960805184505060a05184505060c05184505060e05184505051835050518250505181505061016051815050610180518150506101a051815050f35b5f80fd5b604081019081106001600160401b0382111761016d57604052565b634e487b7160e01b5f52604160045260245ffd5b60405161018d81610152565b600c8152602081016b5661756c7453746f7261676560a01b81526020604051938492828401947f62616c616e6365722d6c6162732e76332e73746f726167652e000000000000008652518091603986015e830190601760f91b6039830152805192839101603a83015e015f603a82015203601a810183526059601f1991011682019180831060018060401b0384111761016d57826040525190205f19810190811161025157602082019081526020825261024682610152565b9051902060ff191690565b634e487b7160e01b5f52601160045260245ffdfe5f80fdfea2646970667358221220da98ed6422f5595d2c708119c088dcad2ad3ce459be20196d4d0ec6f0c4a720564736f6c634300081b0033","opcodes":"PUSH2 0x1C0 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x14E JUMPI DUP1 PUSH2 0x1A PUSH2 0x36 SWAP3 PUSH2 0x152 JUMP JUMPDEST PUSH1 0xA DUP2 MSTORE PUSH10 0x1A5CD55B9B1BD8DAD959 PUSH1 0xB2 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x181 JUMP JUMPDEST PUSH1 0xC0 MSTORE PUSH2 0x6A DUP2 MLOAD PUSH2 0x47 DUP2 PUSH2 0x152 JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH17 0x1B9BDB96995C9BD1195B1D1850DBDD5B9D PUSH1 0x7A SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x181 JUMP JUMPDEST PUSH1 0xE0 MSTORE PUSH2 0x98 DUP2 MLOAD PUSH2 0x7B DUP2 PUSH2 0x152 JUMP JUMPDEST PUSH1 0xB DUP2 MSTORE PUSH11 0x746F6B656E44656C746173 PUSH1 0xA8 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x181 JUMP JUMPDEST SWAP1 PUSH2 0x100 SWAP2 DUP3 MSTORE PUSH2 0xD1 DUP2 MLOAD PUSH2 0xAD DUP2 PUSH2 0x152 JUMP JUMPDEST PUSH1 0x12 DUP2 MSTORE PUSH18 0x185919131A5C5D5A591A5D1E50D85B1B1959 PUSH1 0x72 SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x181 JUMP JUMPDEST SWAP1 PUSH2 0x120 SWAP2 DUP3 MSTORE PUSH2 0x101 DUP2 MLOAD PUSH2 0xE6 DUP2 PUSH2 0x152 JUMP JUMPDEST PUSH1 0x9 DUP2 MSTORE PUSH9 0x1CD95CDCDA5BDB9259 PUSH1 0xBA SHL PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x181 JUMP JUMPDEST SWAP1 PUSH2 0x140 SWAP2 DUP3 MSTORE MLOAD SWAP2 PUSH1 0x39 SWAP4 DUP5 PUSH2 0x266 DUP6 CODECOPY PUSH1 0x80 MLOAD DUP5 POP POP PUSH1 0xA0 MLOAD DUP5 POP POP PUSH1 0xC0 MLOAD DUP5 POP POP PUSH1 0xE0 MLOAD DUP5 POP POP MLOAD DUP4 POP POP MLOAD DUP3 POP POP MLOAD DUP2 POP POP PUSH2 0x160 MLOAD DUP2 POP POP PUSH2 0x180 MLOAD DUP2 POP POP PUSH2 0x1A0 MLOAD DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0x16D JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x18D DUP2 PUSH2 0x152 JUMP JUMPDEST PUSH1 0xC DUP2 MSTORE PUSH1 0x20 DUP2 ADD PUSH12 0x5661756C7453746F72616765 PUSH1 0xA0 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP3 DUP3 DUP5 ADD SWAP5 PUSH32 0x62616C616E6365722D6C6162732E76332E73746F726167652E00000000000000 DUP7 MSTORE MLOAD DUP1 SWAP2 PUSH1 0x39 DUP7 ADD MCOPY DUP4 ADD SWAP1 PUSH1 0x17 PUSH1 0xF9 SHL PUSH1 0x39 DUP4 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 SWAP2 ADD PUSH1 0x3A DUP4 ADD MCOPY ADD PUSH0 PUSH1 0x3A DUP3 ADD MSTORE SUB PUSH1 0x1A DUP2 ADD DUP4 MSTORE PUSH1 0x59 PUSH1 0x1F NOT SWAP2 ADD AND DUP3 ADD SWAP2 DUP1 DUP4 LT PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB DUP5 GT OR PUSH2 0x16D JUMPI DUP3 PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x251 JUMPI PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP3 MSTORE PUSH2 0x246 DUP3 PUSH2 0x152 JUMP JUMPDEST SWAP1 MLOAD SWAP1 KECCAK256 PUSH1 0xFF NOT AND SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDA SWAP9 0xED PUSH5 0x22F5595D2C PUSH17 0x8119C088DCAD2AD3CE459BE20196D4D0EC PUSH16 0xC4A720564736F6C634300081B003300 ","sourceMap":"1377:8694:73:-:0;;;;;;;;;;;3400:40;1377:8694;;:::i;:::-;;;;-1:-1:-1;;;1377:8694:73;;;;3400:40;:::i;:::-;;;3501:47;1377:8694;;;;;:::i;:::-;;;;-1:-1:-1;;;1377:8694:73;;;;3501:47;:::i;:::-;;;3601:41;1377:8694;;;;;:::i;:::-;;;;-1:-1:-1;;;1377:8694:73;;;;3601:41;:::i;:::-;;;;;;3703:48;1377:8694;;;;;:::i;:::-;;;;-1:-1:-1;;;1377:8694:73;;;;3703:48;:::i;:::-;;;;;;3802:39;1377:8694;;;;;:::i;:::-;;;;-1:-1:-1;;;1377:8694:73;;;;3802:39;:::i;:::-;;;;;;1377:8694;;;;;;;;;;;;;;;;;;3400:40;1377:8694;;;;3501:47;1377:8694;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1377:8694:73;;;;;;;:::o;:::-;;;;;;;;;;;;9892:177;1377:8694;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;1377:8694:73;;;;;1461:67:47;;;;;;1377:8694:73;;;;;;;;;;;;;;-1:-1:-1;;;1377:8694:73;;;;;;;;;;;;;;;-1:-1:-1;1377:8694:73;;;;1461:67:47;;;;;;1377:8694:73;;;;;;;;;;;;;;;;;;;;;;;;;;1451:78:47;;1377:8694:73;;;;;;;;;;1432:103:47;;1377:8694:73;;;;1432:103:47;;;;;:::i;:::-;1377:8694:73;;1405:144:47;;-1:-1:-1;;1405:170:47;;9892:177:73:o;1377:8694::-;;;;-1:-1:-1;1377:8694:73;;;;;-1:-1:-1;1377:8694:73"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220da98ed6422f5595d2c708119c088dcad2ad3ce459be20196d4d0ec6f0c4a720564736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDA SWAP9 0xED PUSH5 0x22F5595D2C PUSH17 0x8119C088DCAD2AD3CE459BE20196D4D0EC PUSH16 0xC4A720564736F6C634300081B003300 ","sourceMap":"1377:8694:73:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"This contract has no code, but is inherited by all three Vault contracts. In order to ensure that *only* the Vault contract's storage is actually used, calls to the extension contracts must be delegate calls made through the main Vault.\",\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"_queriesDisabledPermanently\":{\"details\":\"Flag that prevents re-enabling queries.\"},\"_reservesOf\":{\"details\":\"Represents the total reserve of each ERC20 token. It should be always equal to `token.balanceOf(vault)`, except during `unlock`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Storage layout for the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/VaultStorage.sol\":\"VaultStorage\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":{\"keccak256\":\"0xb5f6b1d0ee3f295a717ce58329eaadccb1eefc2e1e02e2e7c438e377628475cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03c1b9bc73b7d14d9e1948a31c271a03a6ba4291f44d9aff17e60d300c111d0d\",\"dweb:/ipfs/QmNpW3iD3ST76N6xTncuVgYSuafSqFkXUmxNaK8uybr96G\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0xeb183354089582d4a3fc8ded6cc410a2937f2eac2aa47b3ab13b0f5e6ede10e5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ecef18f7f0f57d749d5b0e11ab887299be15e1b6971a4bb9104d06e45705231b\",\"dweb:/ipfs/QmeYRDD5UtVKu2YFJm3SmHFriK6LUa2Tzg7EdZrneEfzNR\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/VaultStorage.sol\":{\"keccak256\":\"0x283153cc86b04e7b5ded7b317a7773cd52912661922d477bccc7e3ef9c4fd332\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://30e03b35be9f4aebba5ea1f6fd1f72fb37990c916a22ef1dd4a01af809f89146\",\"dweb:/ipfs/QmNri89FgxWKFPkN67tvzAGf6kSyMuYvZd62ZW9a5MJBJH\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolConfigConst.sol\":{\"keccak256\":\"0xcec5acd992ba3d85194d2a66de785676e5fbd76c7ef4bd75f581582c637e9191\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03feaba5c47de6cfa364a9f78f3d1cbc48c6e59e89348a56e773631ce3d52c4d\",\"dweb:/ipfs/QmWZmpFLKk6qEsTtbPaiKBWvTnSuYzQdbNJZX4Bng16c3F\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolConfigLib.sol\":{\"keccak256\":\"0x0df4ac214754751acdaa044f697ef2a45823689689aac22a6a102c8e543d97c7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13c1c708ac1a1f5523282a7430d7f5300120ac17b3c77a0bd103d2afe7aff979\",\"dweb:/ipfs/QmPstE7ZquJ4zMaCEXix8iCXc6hTSyNQaR9Z4aWBMTa9ys\"]},\"@balancer-labs/v3-vault/contracts/lib/VaultStateLib.sol\":{\"keccak256\":\"0xc40f34646f76afe536a326173d3c8cd663a655375531f65f3e6f7c63cecddeeb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a97b6d2363d70869b9cf66104a6c6bdfc84d351085c94b23b0104f2608e52ff4\",\"dweb:/ipfs/QmVPVR8F6nSxxhxTpFp5cgH9n1dE2E5UXD6cPauumtpS3e\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/lib/HooksConfigLib.sol":{"HooksConfigLib":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea264697066735822122034aeb757ff971d89abcdee4fe29558a95c80330dfd8eb4c1cda387f5314a336864736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLVALUE 0xAE 0xB7 JUMPI SELFDESTRUCT SWAP8 SAR DUP10 0xAB 0xCD 0xEE 0x4F 0xE2 SWAP6 PC 0xA9 TLOAD DUP1 CALLER 0xD REVERT DUP15 0xB4 0xC1 0xCD LOG3 DUP8 CREATE2 BALANCE BLOBBASEFEE CALLER PUSH9 0x64736F6C634300081B STOP CALLER ","sourceMap":"1878:19951:74:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea264697066735822122034aeb757ff971d89abcdee4fe29558a95c80330dfd8eb4c1cda387f5314a336864736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLVALUE 0xAE 0xB7 JUMPI SELFDESTRUCT SWAP8 SAR DUP10 0xAB 0xCD 0xEE 0x4F 0xE2 SWAP6 PC 0xA9 TLOAD DUP1 CALLER 0xD REVERT DUP15 0xB4 0xC1 0xCD LOG3 DUP8 CREATE2 BALANCE BLOBBASEFEE CALLER PUSH9 0x64736F6C634300081B STOP CALLER ","sourceMap":"1878:19951:74:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"This library has two additional functions. `toHooksConfig` constructs a `HooksConfig` structure from the PoolConfig and the hooks contract address. Also, there are `call` functions that forward the arguments to the corresponding functions in the hook contract, then validate and return the results. Note that the entire configuration of each pool is stored in the `_poolConfigBits` mapping (one slot per pool). This includes the data in the `PoolConfig` struct, plus the data in the `HookFlags` struct. The layout (i.e., offsets for each data field) is specified in `PoolConfigConst`. There are two libraries for interpreting these data. This one parses fields related to hooks, and also contains helpers for the struct building and hooks contract forwarding functions described above. `PoolConfigLib` contains helpers related to the non-hook-related flags, along with aggregate fee percentages and other data associated with pools. The `PoolData` struct contains the raw bitmap with the entire pool state (`PoolConfigBits`), plus the token configuration, scaling factors, and dynamic information such as current balances and rates. The hooks contract addresses themselves are stored in a separate `_hooksContracts` mapping.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Helper functions to read and write the packed hook configuration flags stored in `_poolConfigBits`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/lib/HooksConfigLib.sol\":\"HooksConfigLib\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0xeb183354089582d4a3fc8ded6cc410a2937f2eac2aa47b3ab13b0f5e6ede10e5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ecef18f7f0f57d749d5b0e11ab887299be15e1b6971a4bb9104d06e45705231b\",\"dweb:/ipfs/QmeYRDD5UtVKu2YFJm3SmHFriK6LUa2Tzg7EdZrneEfzNR\"]},\"@balancer-labs/v3-vault/contracts/lib/HooksConfigLib.sol\":{\"keccak256\":\"0xaf3a7b4bbc1427ffb36b89cab5e485494afbddaff7195e0533f9c29a88c217b3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c653115b697d1c2a340a485e37a1d1a7b18bd3da4304ef12480bf9dcb8f61dc8\",\"dweb:/ipfs/QmfPNVqSeuG6gJr2x4y41czE5ivBz8vLpZ3R97VVnbK1uT\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolConfigConst.sol\":{\"keccak256\":\"0xcec5acd992ba3d85194d2a66de785676e5fbd76c7ef4bd75f581582c637e9191\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03feaba5c47de6cfa364a9f78f3d1cbc48c6e59e89348a56e773631ce3d52c4d\",\"dweb:/ipfs/QmWZmpFLKk6qEsTtbPaiKBWvTnSuYzQdbNJZX4Bng16c3F\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/lib/PoolConfigConst.sol":{"PoolConfigConst":{"abi":[{"inputs":[],"name":"ADD_LIQUIDITY_CUSTOM_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AFTER_ADD_LIQUIDITY_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AFTER_INITIALIZE_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AFTER_REMOVE_LIQUIDITY_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AFTER_SWAP_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AGGREGATE_SWAP_FEE_OFFSET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AGGREGATE_YIELD_FEE_OFFSET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BEFORE_ADD_LIQUIDITY_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BEFORE_INITIALIZE_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BEFORE_REMOVE_LIQUIDITY_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BEFORE_SWAP_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DECIMAL_DIFF_BITLENGTH","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DECIMAL_SCALING_FACTORS_OFFSET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DONATION_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DYNAMIC_SWAP_FEE_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENABLE_HOOK_ADJUSTED_AMOUNTS_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PAUSE_WINDOW_END_TIME_OFFSET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL_INITIALIZED_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL_PAUSED_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL_RECOVERY_MODE_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POOL_REGISTERED_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REMOVE_LIQUIDITY_CUSTOM_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STATIC_SWAP_FEE_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIMESTAMP_BITLENGTH","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_DECIMAL_DIFFS_BITLENGTH","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNBALANCED_LIQUIDITY_OFFSET","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460195761039a908161001e823930815050f35b5f80fdfe60806040908082526004361015610014575f80fd5b5f3560e01c9081631294794b1461035057508063185186281461033a57806328b161ce146102075780632d6724e1146103245780633dc52c431461030e5780633f60345a146102f8578063547acb16146102e25780636801b442146102cd57806368aa2524146102b75780637e3edbf1146102a15780637ea0cde91461028b57806380b1c55b1461027557806384efbfd51461025f578063a22425b614610249578063aa6cda9114610233578063af815f041461021d578063b2cb247c14610207578063bc848769146101f1578063bdefaf71146101db578063d9827217146101c5578063d9cebbd9146101ac578063dde7b13f14610196578063df9d385b14610181578063e2ce6c6c1461016b578063fab86870146101555763fd5da0101461013c575f80fd5b5f600319360112610151576020905160128152f35b5f80fd5b505f600319360112610151576020905160098152f35b505f600319360112610151576020905160078152f35b505f6003193601126101515760209051818152f35b505f6003193601126101515760209051600e8152f35b505f6003193601126101515760209060425b9051908152f35b505f600319360112610151576020905160048152f35b505f6003193601126101515760209051600d8152f35b505f600319360112610151576020905160108152f35b505f600319360112610151576020905160058152f35b505f600319360112610151576020905160028152f35b505f6003193601126101515760209051600f8152f35b505f6003193601126101515760209051600c8152f35b505f6003193601126101515760209051600b8152f35b505f600319360112610151576020905160118152f35b505f600319360112610151576020905160288152f35b505f600319360112610151576020905160068152f35b505f600319360112610151575160828152602090f35b505f60031936011261015157602090515f8152f35b505f600319360112610151576020905160088152f35b505f6003193601126101515760209051600a8152f35b505f60031936011261015157602090605a6101be565b505f600319360112610151576020905160038152f35b505f600319360112610151576020905160018152f35b5f6003193601126101515780602a60209252f3fea26469706673582212201bcbd0a5d17a34476245c36c65bc4dbc80d305c6b26d0bae76cdc8a86edf6d9164736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x19 JUMPI PUSH2 0x39A SWAP1 DUP2 PUSH2 0x1E DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1294794B EQ PUSH2 0x350 JUMPI POP DUP1 PUSH4 0x18518628 EQ PUSH2 0x33A JUMPI DUP1 PUSH4 0x28B161CE EQ PUSH2 0x207 JUMPI DUP1 PUSH4 0x2D6724E1 EQ PUSH2 0x324 JUMPI DUP1 PUSH4 0x3DC52C43 EQ PUSH2 0x30E JUMPI DUP1 PUSH4 0x3F60345A EQ PUSH2 0x2F8 JUMPI DUP1 PUSH4 0x547ACB16 EQ PUSH2 0x2E2 JUMPI DUP1 PUSH4 0x6801B442 EQ PUSH2 0x2CD JUMPI DUP1 PUSH4 0x68AA2524 EQ PUSH2 0x2B7 JUMPI DUP1 PUSH4 0x7E3EDBF1 EQ PUSH2 0x2A1 JUMPI DUP1 PUSH4 0x7EA0CDE9 EQ PUSH2 0x28B JUMPI DUP1 PUSH4 0x80B1C55B EQ PUSH2 0x275 JUMPI DUP1 PUSH4 0x84EFBFD5 EQ PUSH2 0x25F JUMPI DUP1 PUSH4 0xA22425B6 EQ PUSH2 0x249 JUMPI DUP1 PUSH4 0xAA6CDA91 EQ PUSH2 0x233 JUMPI DUP1 PUSH4 0xAF815F04 EQ PUSH2 0x21D JUMPI DUP1 PUSH4 0xB2CB247C EQ PUSH2 0x207 JUMPI DUP1 PUSH4 0xBC848769 EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0xBDEFAF71 EQ PUSH2 0x1DB JUMPI DUP1 PUSH4 0xD9827217 EQ PUSH2 0x1C5 JUMPI DUP1 PUSH4 0xD9CEBBD9 EQ PUSH2 0x1AC JUMPI DUP1 PUSH4 0xDDE7B13F EQ PUSH2 0x196 JUMPI DUP1 PUSH4 0xDF9D385B EQ PUSH2 0x181 JUMPI DUP1 PUSH4 0xE2CE6C6C EQ PUSH2 0x16B JUMPI DUP1 PUSH4 0xFAB86870 EQ PUSH2 0x155 JUMPI PUSH4 0xFD5DA010 EQ PUSH2 0x13C JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x9 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x7 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD DUP2 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xE DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x42 JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x4 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xD DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x10 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x5 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x2 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xF DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xC DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xB DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x11 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x28 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x6 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI MLOAD PUSH1 0x82 DUP2 MSTORE PUSH1 0x20 SWAP1 RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x8 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xA DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x5A PUSH2 0x1BE JUMP JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x3 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI DUP1 PUSH1 0x2A PUSH1 0x20 SWAP3 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SHL 0xCB 0xD0 0xA5 0xD1 PUSH27 0x34476245C36C65BC4DBC80D305C6B26D0BAE76CDC8A86EDF6D9164 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"831:2493:75:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"constant_AGGREGATE_YIELD_FEE_OFFSET":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"constant_DECIMAL_SCALING_FACTORS_OFFSET":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"60806040908082526004361015610014575f80fd5b5f3560e01c9081631294794b1461035057508063185186281461033a57806328b161ce146102075780632d6724e1146103245780633dc52c431461030e5780633f60345a146102f8578063547acb16146102e25780636801b442146102cd57806368aa2524146102b75780637e3edbf1146102a15780637ea0cde91461028b57806380b1c55b1461027557806384efbfd51461025f578063a22425b614610249578063aa6cda9114610233578063af815f041461021d578063b2cb247c14610207578063bc848769146101f1578063bdefaf71146101db578063d9827217146101c5578063d9cebbd9146101ac578063dde7b13f14610196578063df9d385b14610181578063e2ce6c6c1461016b578063fab86870146101555763fd5da0101461013c575f80fd5b5f600319360112610151576020905160128152f35b5f80fd5b505f600319360112610151576020905160098152f35b505f600319360112610151576020905160078152f35b505f6003193601126101515760209051818152f35b505f6003193601126101515760209051600e8152f35b505f6003193601126101515760209060425b9051908152f35b505f600319360112610151576020905160048152f35b505f6003193601126101515760209051600d8152f35b505f600319360112610151576020905160108152f35b505f600319360112610151576020905160058152f35b505f600319360112610151576020905160028152f35b505f6003193601126101515760209051600f8152f35b505f6003193601126101515760209051600c8152f35b505f6003193601126101515760209051600b8152f35b505f600319360112610151576020905160118152f35b505f600319360112610151576020905160288152f35b505f600319360112610151576020905160068152f35b505f600319360112610151575160828152602090f35b505f60031936011261015157602090515f8152f35b505f600319360112610151576020905160088152f35b505f6003193601126101515760209051600a8152f35b505f60031936011261015157602090605a6101be565b505f600319360112610151576020905160038152f35b505f600319360112610151576020905160018152f35b5f6003193601126101515780602a60209252f3fea26469706673582212201bcbd0a5d17a34476245c36c65bc4dbc80d305c6b26d0bae76cdc8a86edf6d9164736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x14 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1294794B EQ PUSH2 0x350 JUMPI POP DUP1 PUSH4 0x18518628 EQ PUSH2 0x33A JUMPI DUP1 PUSH4 0x28B161CE EQ PUSH2 0x207 JUMPI DUP1 PUSH4 0x2D6724E1 EQ PUSH2 0x324 JUMPI DUP1 PUSH4 0x3DC52C43 EQ PUSH2 0x30E JUMPI DUP1 PUSH4 0x3F60345A EQ PUSH2 0x2F8 JUMPI DUP1 PUSH4 0x547ACB16 EQ PUSH2 0x2E2 JUMPI DUP1 PUSH4 0x6801B442 EQ PUSH2 0x2CD JUMPI DUP1 PUSH4 0x68AA2524 EQ PUSH2 0x2B7 JUMPI DUP1 PUSH4 0x7E3EDBF1 EQ PUSH2 0x2A1 JUMPI DUP1 PUSH4 0x7EA0CDE9 EQ PUSH2 0x28B JUMPI DUP1 PUSH4 0x80B1C55B EQ PUSH2 0x275 JUMPI DUP1 PUSH4 0x84EFBFD5 EQ PUSH2 0x25F JUMPI DUP1 PUSH4 0xA22425B6 EQ PUSH2 0x249 JUMPI DUP1 PUSH4 0xAA6CDA91 EQ PUSH2 0x233 JUMPI DUP1 PUSH4 0xAF815F04 EQ PUSH2 0x21D JUMPI DUP1 PUSH4 0xB2CB247C EQ PUSH2 0x207 JUMPI DUP1 PUSH4 0xBC848769 EQ PUSH2 0x1F1 JUMPI DUP1 PUSH4 0xBDEFAF71 EQ PUSH2 0x1DB JUMPI DUP1 PUSH4 0xD9827217 EQ PUSH2 0x1C5 JUMPI DUP1 PUSH4 0xD9CEBBD9 EQ PUSH2 0x1AC JUMPI DUP1 PUSH4 0xDDE7B13F EQ PUSH2 0x196 JUMPI DUP1 PUSH4 0xDF9D385B EQ PUSH2 0x181 JUMPI DUP1 PUSH4 0xE2CE6C6C EQ PUSH2 0x16B JUMPI DUP1 PUSH4 0xFAB86870 EQ PUSH2 0x155 JUMPI PUSH4 0xFD5DA010 EQ PUSH2 0x13C JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x9 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x7 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD DUP2 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xE DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x42 JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x4 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xD DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x10 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x5 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x2 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xF DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xC DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xB DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x11 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x28 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x6 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI MLOAD PUSH1 0x82 DUP2 MSTORE PUSH1 0x20 SWAP1 RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x8 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0xA DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x5A PUSH2 0x1BE JUMP JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x3 DUP2 MSTORE RETURN JUMPDEST POP PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x151 JUMPI DUP1 PUSH1 0x2A PUSH1 0x20 SWAP3 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SHL 0xCB 0xD0 0xA5 0xD1 PUSH27 0x34476245C36C65BC4DBC80D305C6B26D0BAE76CDC8A86EDF6D9164 PUSH20 0x6F6C634300081B00330000000000000000000000 ","sourceMap":"831:2493:75:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3319:2;831:2493;3319:2;;;831:2493;;;;;;;;;;;;;;-1:-1:-1;;831:2493:75;;;;;;;;958:1;831:2493;;;;;;;;;;-1:-1:-1;;831:2493:75;;;;;;;;958:1;831:2493;;;;;;-1:-1:-1;;831:2493:75;;;;;;;;958:1;831:2493;;;;;;-1:-1:-1;;831:2493:75;;;;;3319:2;831:2493;;;;;;;;;-1:-1:-1;;831:2493:75;;;;;;;;958:1;831:2493;;;;;;-1:-1:-1;;831:2493:75;;;;;;;19627:2:33;2690:94:75;831:2493;;;;;;;;;-1:-1:-1;;831:2493:75;;;;;;;;;;;;;;;-1:-1:-1;;831:2493:75;;;;;;;;958:1;831:2493;;;;;;-1:-1:-1;;831:2493:75;;;;;;;;958:1;831:2493;;;;;;-1:-1:-1;;831:2493:75;;;;;;;;958:1;831:2493;;;;;;-1:-1:-1;;831:2493:75;;;;;;;;958:1;831:2493;;;;;;-1:-1:-1;;831:2493:75;;;;;;;;958:1;831:2493;;;;;;-1:-1:-1;;831:2493:75;;;;;;;;958:1;831:2493;;;;;;-1:-1:-1;;831:2493:75;;;;;;;;958:1;831:2493;;;;;;-1:-1:-1;;831:2493:75;;;;;;;;958:1;831:2493;;;;;;-1:-1:-1;;831:2493:75;;;;;;;;3212:2;831:2493;;;;;;-1:-1:-1;;831:2493:75;;;;;;;;958:1;831:2493;;;;;;-1:-1:-1;;831:2493:75;;;;;;19627:2:33;831:2493:75;;;;;;;;-1:-1:-1;;831:2493:75;;;;;;;;;;;;;;;-1:-1:-1;;831:2493:75;;;;;;;;958:1;831:2493;;;;;;-1:-1:-1;;831:2493:75;;;;;;;;958:1;831:2493;;;;;;-1:-1:-1;;831:2493:75;;;;;;;19627:2:33;2790:99:75;;831:2493;;;-1:-1:-1;;831:2493:75;;;;;;;;958:1;831:2493;;;;;;-1:-1:-1;;831:2493:75;;;;;;;;;;;;;;-1:-1:-1;;831:2493:75;;;;;;19627:2:33;831:2493:75;;;"},"methodIdentifiers":{"ADD_LIQUIDITY_CUSTOM_OFFSET()":"b2cb247c","AFTER_ADD_LIQUIDITY_OFFSET()":"aa6cda91","AFTER_INITIALIZE_OFFSET()":"3f60345a","AFTER_REMOVE_LIQUIDITY_OFFSET()":"80b1c55b","AFTER_SWAP_OFFSET()":"bdefaf71","AGGREGATE_SWAP_FEE_OFFSET()":"1294794b","AGGREGATE_YIELD_FEE_OFFSET()":"d9cebbd9","BEFORE_ADD_LIQUIDITY_OFFSET()":"dde7b13f","BEFORE_INITIALIZE_OFFSET()":"547acb16","BEFORE_REMOVE_LIQUIDITY_OFFSET()":"bc848769","BEFORE_SWAP_OFFSET()":"a22425b6","DECIMAL_DIFF_BITLENGTH()":"28b161ce","DECIMAL_SCALING_FACTORS_OFFSET()":"3dc52c43","DONATION_OFFSET()":"e2ce6c6c","DYNAMIC_SWAP_FEE_OFFSET()":"84efbfd5","ENABLE_HOOK_ADJUSTED_AMOUNTS_OFFSET()":"fab86870","PAUSE_WINDOW_END_TIME_OFFSET()":"68aa2524","POOL_INITIALIZED_OFFSET()":"18518628","POOL_PAUSED_OFFSET()":"af815f04","POOL_RECOVERY_MODE_OFFSET()":"2d6724e1","POOL_REGISTERED_OFFSET()":"6801b442","REMOVE_LIQUIDITY_CUSTOM_OFFSET()":"7e3edbf1","STATIC_SWAP_FEE_OFFSET()":"fd5da010","TIMESTAMP_BITLENGTH()":"df9d385b","TOKEN_DECIMAL_DIFFS_BITLENGTH()":"7ea0cde9","UNBALANCED_LIQUIDITY_OFFSET()":"d9827217"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ADD_LIQUIDITY_CUSTOM_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AFTER_ADD_LIQUIDITY_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AFTER_INITIALIZE_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AFTER_REMOVE_LIQUIDITY_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AFTER_SWAP_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AGGREGATE_SWAP_FEE_OFFSET\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"AGGREGATE_YIELD_FEE_OFFSET\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BEFORE_ADD_LIQUIDITY_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BEFORE_INITIALIZE_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BEFORE_REMOVE_LIQUIDITY_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BEFORE_SWAP_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DECIMAL_DIFF_BITLENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DECIMAL_SCALING_FACTORS_OFFSET\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DONATION_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DYNAMIC_SWAP_FEE_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ENABLE_HOOK_ADJUSTED_AMOUNTS_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAUSE_WINDOW_END_TIME_OFFSET\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_INITIALIZED_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_PAUSED_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_RECOVERY_MODE_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POOL_REGISTERED_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"REMOVE_LIQUIDITY_CUSTOM_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STATIC_SWAP_FEE_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TIMESTAMP_BITLENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TOKEN_DECIMAL_DIFFS_BITLENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNBALANCED_LIQUIDITY_OFFSET\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Note that the entire configuration of each pool is stored in the `_poolConfigBits` mapping (one slot per pool). This includes the data in the `PoolConfig` struct, plus the data in the `HookFlags` struct. The layout (i.e., offsets for each data field) is specified here. There are two libraries for interpreting these data. `HooksConfigLib` parses fields related to hooks, while `PoolConfigLib` contains helpers related to the non-hook-related flags, along with aggregate fee percentages and other data associated with pools.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Helper functions to read and write the packed configuration flags stored in `_poolConfigBits`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/lib/PoolConfigConst.sol\":\"PoolConfigConst\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolConfigConst.sol\":{\"keccak256\":\"0xcec5acd992ba3d85194d2a66de785676e5fbd76c7ef4bd75f581582c637e9191\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03feaba5c47de6cfa364a9f78f3d1cbc48c6e59e89348a56e773631ce3d52c4d\",\"dweb:/ipfs/QmWZmpFLKk6qEsTtbPaiKBWvTnSuYzQdbNJZX4Bng16c3F\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/lib/PoolConfigLib.sol":{"PoolConfigLib":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220394671b3d62de69035efb96d599d618ecf3aef986d4d334469c4d1c089763b0364736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CODECOPY CHAINID PUSH18 0xB3D62DE69035EFB96D599D618ECF3AEF986D 0x4D CALLER PREVRANDAO PUSH10 0xC4D1C089763B0364736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"1279:10890:76:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220394671b3d62de69035efb96d599d618ecf3aef986d4d334469c4d1c089763b0364736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CODECOPY CHAINID PUSH18 0xB3D62DE69035EFB96D599D618ECF3AEF986D 0x4D CALLER PREVRANDAO PUSH10 0xC4D1C089763B0364736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"1279:10890:76:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Note that the entire configuration of each pool is stored in the `_poolConfigBits` mapping (one slot per pool). This includes the data in the `PoolConfig` struct, plus the data in the `HookFlags` struct. The layout (i.e., offsets for each data field) is specified in `PoolConfigConst`. There are two libraries for interpreting these data. `HooksConfigLib` parses fields related to hooks, while this one contains helpers related to the non-hook-related flags, along with aggregate fee percentages and other data associated with pools. The `PoolData` struct contains the raw bitmap with the entire pool state (`PoolConfigBits`), plus the token configuration, scaling factors, and dynamic information such as current balances and rates.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Helper functions to read and write the packed hook configuration flags stored in `_poolConfigBits`.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/lib/PoolConfigLib.sol\":\"PoolConfigLib\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0xeb183354089582d4a3fc8ded6cc410a2937f2eac2aa47b3ab13b0f5e6ede10e5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ecef18f7f0f57d749d5b0e11ab887299be15e1b6971a4bb9104d06e45705231b\",\"dweb:/ipfs/QmeYRDD5UtVKu2YFJm3SmHFriK6LUa2Tzg7EdZrneEfzNR\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolConfigConst.sol\":{\"keccak256\":\"0xcec5acd992ba3d85194d2a66de785676e5fbd76c7ef4bd75f581582c637e9191\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03feaba5c47de6cfa364a9f78f3d1cbc48c6e59e89348a56e773631ce3d52c4d\",\"dweb:/ipfs/QmWZmpFLKk6qEsTtbPaiKBWvTnSuYzQdbNJZX4Bng16c3F\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolConfigLib.sol\":{\"keccak256\":\"0x0df4ac214754751acdaa044f697ef2a45823689689aac22a6a102c8e543d97c7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13c1c708ac1a1f5523282a7430d7f5300120ac17b3c77a0bd103d2afe7aff979\",\"dweb:/ipfs/QmPstE7ZquJ4zMaCEXix8iCXc6hTSyNQaR9Z4aWBMTa9ys\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/lib/PoolDataLib.sol":{"PoolDataLib":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212201dbdf007911bfad17818d5e0c6c6f2985975cdf7e94ee9df8bf2fbf3b6ee5ae064736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SAR 0xBD CREATE SMOD SWAP2 SHL STATICCALL 0xD1 PUSH25 0x18D5E0C6C6F2985975CDF7E94EE9DF8BF2FBF3B6EE5AE06473 PUSH16 0x6C634300081B00330000000000000000 ","sourceMap":"1321:8945:77:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212201dbdf007911bfad17818d5e0c6c6f2985975cdf7e94ee9df8bf2fbf3b6ee5ae064736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SAR 0xBD CREATE SMOD SWAP2 SHL STATICCALL 0xD1 PUSH25 0x18D5E0C6C6F2985975CDF7E94EE9DF8BF2FBF3B6EE5AE06473 PUSH16 0x6C634300081B00330000000000000000 ","sourceMap":"1321:8945:77:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Note that the entire configuration of each pool is stored in the `_poolConfigBits` mapping (one slot per pool). This includes the data in the `PoolConfig` struct, plus the data in the `HookFlags` struct. The layout (i.e., offsets for each data field) is specified in `PoolConfigConst`. The `PoolData` struct contains the raw bitmap with the entire pool state (`PoolConfigBits`), plus the token configuration, scaling factors, and dynamic information such as current balances and rates.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Helper functions to read/write a `PoolData` struct.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/lib/PoolDataLib.sol\":\"PoolDataLib\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\":{\"keccak256\":\"0xa1014b8d96cdfd149f502cda06f25e51885a6456b41061ed213086fcc1c496b4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8a96e7e176f73762c6de904de39472fe970f12f6d3631097227bc664bd0780c1\",\"dweb:/ipfs/QmXcu5bk8tJTqR6UwkdKNtsodzqYGpJsPdfjQmdJFyKZjR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol\":{\"keccak256\":\"0xf98fec19a1516432d7540f0cde2e967b627afbc5a361835766d57be8ba10b4e2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://94b49929bff77d1fdaab8916350356fc9816317beef4f33c3af0e6a40493d01c\",\"dweb:/ipfs/QmPPhtmpPvgedbtQaJZz7JQCmiGKKTHmfh7EGhJS1yUCia\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0xeb183354089582d4a3fc8ded6cc410a2937f2eac2aa47b3ab13b0f5e6ede10e5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ecef18f7f0f57d749d5b0e11ab887299be15e1b6971a4bb9104d06e45705231b\",\"dweb:/ipfs/QmeYRDD5UtVKu2YFJm3SmHFriK6LUa2Tzg7EdZrneEfzNR\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolConfigConst.sol\":{\"keccak256\":\"0xcec5acd992ba3d85194d2a66de785676e5fbd76c7ef4bd75f581582c637e9191\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03feaba5c47de6cfa364a9f78f3d1cbc48c6e59e89348a56e773631ce3d52c4d\",\"dweb:/ipfs/QmWZmpFLKk6qEsTtbPaiKBWvTnSuYzQdbNJZX4Bng16c3F\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolConfigLib.sol\":{\"keccak256\":\"0x0df4ac214754751acdaa044f697ef2a45823689689aac22a6a102c8e543d97c7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13c1c708ac1a1f5523282a7430d7f5300120ac17b3c77a0bd103d2afe7aff979\",\"dweb:/ipfs/QmPstE7ZquJ4zMaCEXix8iCXc6hTSyNQaR9Z4aWBMTa9ys\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolDataLib.sol\":{\"keccak256\":\"0x0f004ef9c126426c1391516247f90cbb699982f3c545c821c2bdc3796c93f781\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://93d7b94cb4e0c9eee127258fb69e390d34c391444f337b6cc5cbe5beb702f4e7\",\"dweb:/ipfs/QmbswDz4DrsXaEh9RSvpmWKX5JCLoTavyAX2511eKr5rQd\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/lib/RouterWethLib.sol":{"RouterWethLib":{"abi":[{"inputs":[],"name":"InsufficientEth","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220b2e1a5b7b2f0f79559f32c23ac9b0e2dc3ab66cfdd0543dd38630ff67519e8db64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB2 0xE1 0xA5 0xB7 0xB2 CREATE 0xF7 SWAP6 MSIZE RETURN 0x2C 0x23 0xAC SWAP12 0xE 0x2D 0xC3 0xAB PUSH7 0xCFDD0543DD3863 0xF 0xF6 PUSH22 0x19E8DB64736F6C634300081B00330000000000000000 ","sourceMap":"725:1071:78:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220b2e1a5b7b2f0f79559f32c23ac9b0e2dc3ab66cfdd0543dd38630ff67519e8db64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xB2 0xE1 0xA5 0xB7 0xB2 CREATE 0xF7 SWAP6 MSIZE RETURN 0x2C 0x23 0xAC SWAP12 0xE 0x2D 0xC3 0xAB PUSH7 0xCFDD0543DD3863 0xF 0xF6 PUSH22 0x19E8DB64736F6C634300081B00330000000000000000 ","sourceMap":"725:1071:78:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InsufficientEth\",\"type\":\"error\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"InsufficientEth()\":[{\"notice\":\"The amount of ETH paid is insufficient to complete this operation.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/lib/RouterWethLib.sol\":\"RouterWethLib\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x75d5964b2f92dba9b9254e0052de28a9378e6759b1b28ccbb51db0bc80024176\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6ec9c862929ccff2be994d0296c0a4de3ddc19bb5a7aae3d4df0887dc7b29c8e\",\"dweb:/ipfs/QmSNr2fkNM2VyAo3B1DG1cuRh41t4A6mJZqeUu6vvYb97G\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":{\"keccak256\":\"0xb5f6b1d0ee3f295a717ce58329eaadccb1eefc2e1e02e2e7c438e377628475cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03c1b9bc73b7d14d9e1948a31c271a03a6ba4291f44d9aff17e60d300c111d0d\",\"dweb:/ipfs/QmNpW3iD3ST76N6xTncuVgYSuafSqFkXUmxNaK8uybr96G\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/lib/RouterWethLib.sol\":{\"keccak256\":\"0xd66f21fa586085e10a1e322370c7015ebe472c44fc27472a6fdfe67ad6d9b188\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://88b4830e07a76a68dce1e3adba583f60259df5187087def2fd43d3c1f8b0e2ae\",\"dweb:/ipfs/QmbGNEfYtDUFpGrFYo9iJcSg9sJxiAVN9iaJApCaHobTDm\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/lib/VaultExtensionsLib.sol":{"VaultExtensionsLib":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212202c25e19b6bc4859d4c895fd5437c0f62d2fbf7628127a8def1413ca156ac69e764736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2C 0x25 0xE1 SWAP12 PUSH12 0xC4859D4C895FD5437C0F62D2 0xFB 0xF7 PUSH3 0x8127A8 0xDE CALL COINBASE EXTCODECOPY LOG1 JUMP 0xAC PUSH10 0xE764736F6C634300081B STOP CALLER ","sourceMap":"897:351:79:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212202c25e19b6bc4859d4c895fd5437c0f62d2fbf7628127a8def1413ca156ac69e764736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2C 0x25 0xE1 SWAP12 PUSH12 0xC4859D4C895FD5437C0F62D2 0xFB 0xF7 PUSH3 0x8127A8 0xDE CALL COINBASE EXTCODECOPY LOG1 JUMP 0xAC PUSH10 0xE764736F6C634300081B STOP CALLER ","sourceMap":"897:351:79:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"The Vault is composed of three contracts, using the Proxy pattern from OpenZeppelin. `ensureVaultDelegateCall` can be called on the locally stored Vault address by modifiers in extension contracts to ensure that their functions can only be called through the main Vault. Because the storage *layout* is shared (through inheritance of `VaultStorage`), but each contract actually has its own storage, we need to make sure we are always calling in the main Vault context, to avoid referencing storage in the extension contracts.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Ensure functions in extension contracts can only be called through the main Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/lib/VaultExtensionsLib.sol\":\"VaultExtensionsLib\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-vault/contracts/lib/VaultExtensionsLib.sol\":{\"keccak256\":\"0xf17a6fb82ff8eac940260544aa041e2cf8b826c0f7e205b4d52a4c5394a7ee38\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c88893eba6593f2f7ef05e3ffeb61416b6cc630eaad2efa90e77262f3282ab81\",\"dweb:/ipfs/QmX9XhQix9yKT7buiT77igy8Bf1jvwwYGxpmTr4e5mWnQD\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/lib/VaultStateLib.sol":{"VaultStateLib":{"abi":[{"inputs":[],"name":"BUFFER_PAUSED_OFFSET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"QUERY_DISABLED_OFFSET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VAULT_PAUSED_OFFSET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60808060405234601957610109908161001e823930815050f35b5f80fdfe60808060405260043610156011575f80fd5b5f3560e01c908163227e492d1460a2575080632577aa9014606f5763434e60ca146039575f80fd5b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112606b5760206040515f8152f35b5f80fd5b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112606b57602060405160018152f35b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112606b5780600260209252f3fea264697066735822122068cf6041e3f00d8e14c89ae5e56411f52cccdbe213516e2d186458af6fcd47b564736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x19 JUMPI PUSH2 0x109 SWAP1 DUP2 PUSH2 0x1E DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH1 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x227E492D EQ PUSH1 0xA2 JUMPI POP DUP1 PUSH4 0x2577AA90 EQ PUSH1 0x6F JUMPI PUSH4 0x434E60CA EQ PUSH1 0x39 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH1 0x6B JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH1 0x6B JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH1 0x6B JUMPI DUP1 PUSH1 0x2 PUSH1 0x20 SWAP3 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH9 0xCF6041E3F00D8E14C8 SWAP11 0xE5 0xE5 PUSH5 0x11F52CCCDB 0xE2 SGT MLOAD PUSH15 0x2D186458AF6FCD47B564736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"335:1477:80:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"60808060405260043610156011575f80fd5b5f3560e01c908163227e492d1460a2575080632577aa9014606f5763434e60ca146039575f80fd5b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112606b5760206040515f8152f35b5f80fd5b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112606b57602060405160018152f35b5f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112606b5780600260209252f3fea264697066735822122068cf6041e3f00d8e14c89ae5e56411f52cccdbe213516e2d186458af6fcd47b564736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH1 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x227E492D EQ PUSH1 0xA2 JUMPI POP DUP1 PUSH4 0x2577AA90 EQ PUSH1 0x6F JUMPI PUSH4 0x434E60CA EQ PUSH1 0x39 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH1 0x6B JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH1 0x6B JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH1 0x6B JUMPI DUP1 PUSH1 0x2 PUSH1 0x20 SWAP3 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH9 0xCF6041E3F00D8E14C8 SWAP11 0xE5 0xE5 PUSH5 0x11F52CCCDB 0xE2 SGT MLOAD PUSH15 0x2D186458AF6FCD47B564736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"335:1477:80:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;568:1;335:1477;;;;;;;;;;;;491:1;335:1477;;;"},"methodIdentifiers":{"BUFFER_PAUSED_OFFSET()":"227e492d","QUERY_DISABLED_OFFSET()":"434e60ca","VAULT_PAUSED_OFFSET()":"2577aa90"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BUFFER_PAUSED_OFFSET\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"QUERY_DISABLED_OFFSET\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VAULT_PAUSED_OFFSET\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Helper functions for reading and writing the `VaultState` struct.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/lib/VaultStateLib.sol\":\"VaultStateLib\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0xeb183354089582d4a3fc8ded6cc410a2937f2eac2aa47b3ab13b0f5e6ede10e5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ecef18f7f0f57d749d5b0e11ab887299be15e1b6971a4bb9104d06e45705231b\",\"dweb:/ipfs/QmeYRDD5UtVKu2YFJm3SmHFriK6LUa2Tzg7EdZrneEfzNR\"]},\"@balancer-labs/v3-vault/contracts/lib/VaultStateLib.sol\":{\"keccak256\":\"0xc40f34646f76afe536a326173d3c8cd663a655375531f65f3e6f7c63cecddeeb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a97b6d2363d70869b9cf66104a6c6bdfc84d351085c94b23b0104f2608e52ff4\",\"dweb:/ipfs/QmVPVR8F6nSxxhxTpFp5cgH9n1dE2E5UXD6cPauumtpS3e\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/test/BasePoolMathMock.sol":{"BasePoolMathMock":{"abi":[{"inputs":[{"internalType":"uint256","name":"invariantRatio","type":"uint256"},{"internalType":"uint256","name":"maxInvariantRatio","type":"uint256"}],"name":"InvariantRatioAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"invariantRatio","type":"uint256"},{"internalType":"uint256","name":"minInvariantRatio","type":"uint256"}],"name":"InvariantRatioBelowMin","type":"error"},{"inputs":[],"name":"ZeroDivision","type":"error"},{"inputs":[{"internalType":"uint256[]","name":"currentBalances","type":"uint256[]"},{"internalType":"uint256","name":"tokenInIndex","type":"uint256"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"computeAddLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountInWithFee","type":"uint256"},{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"currentBalances","type":"uint256[]"},{"internalType":"uint256[]","name":"exactAmounts","type":"uint256[]"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"computeAddLiquidityUnbalanced","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"balances","type":"uint256[]"},{"internalType":"uint256","name":"tokenInIndex","type":"uint256"},{"internalType":"uint256","name":"invariantRatio","type":"uint256"}],"name":"computeBalance","outputs":[{"internalType":"uint256","name":"newBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"balances","type":"uint256[]"},{"internalType":"enum Rounding","name":"","type":"uint8"}],"name":"computeInvariant","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"balances","type":"uint256[]"},{"internalType":"uint256","name":"bptTotalSupply","type":"uint256"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"name":"computeProportionalAmountsIn","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"balances","type":"uint256[]"},{"internalType":"uint256","name":"bptTotalSupply","type":"uint256"},{"internalType":"uint256","name":"bptAmountIn","type":"uint256"}],"name":"computeProportionalAmountsOut","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"currentBalances","type":"uint256[]"},{"internalType":"uint256","name":"tokenOutIndex","type":"uint256"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"computeRemoveLiquiditySingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOutWithFee","type":"uint256"},{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"currentBalances","type":"uint256[]"},{"internalType":"uint256","name":"tokenOutIndex","type":"uint256"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"computeRemoveLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumInvariantRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMaximumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumInvariantRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"","type":"tuple"}],"name":"onSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"computeAddLiquiditySingleTokenExactOut(uint256[],uint256,uint256,uint256,uint256)":"85d5261a","computeAddLiquidityUnbalanced(uint256[],uint256[],uint256,uint256)":"d9c7cc7a","computeBalance(uint256[],uint256,uint256)":"16a0b3e0","computeInvariant(uint256[],uint8)":"984de9e8","computeProportionalAmountsIn(uint256[],uint256,uint256)":"c548e4d8","computeProportionalAmountsOut(uint256[],uint256,uint256)":"da317980","computeRemoveLiquiditySingleTokenExactIn(uint256[],uint256,uint256,uint256,uint256)":"3ab05915","computeRemoveLiquiditySingleTokenExactOut(uint256[],uint256,uint256,uint256,uint256)":"9a87ffbf","getMaximumInvariantRatio()":"273c1adf","getMaximumSwapFeePercentage()":"654cf15d","getMinimumInvariantRatio()":"b677fa56","getMinimumSwapFeePercentage()":"ce20ece7","onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))":"72c98186"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"invariantRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxInvariantRatio\",\"type\":\"uint256\"}],\"name\":\"InvariantRatioAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"invariantRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minInvariantRatio\",\"type\":\"uint256\"}],\"name\":\"InvariantRatioBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"currentBalances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"tokenInIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeAddLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountInWithFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"currentBalances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeAddLiquidityUnbalanced\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"tokenInIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"invariantRatio\",\"type\":\"uint256\"}],\"name\":\"computeBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"enum Rounding\",\"name\":\"\",\"type\":\"uint8\"}],\"name\":\"computeInvariant\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptTotalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"name\":\"computeProportionalAmountsIn\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptTotalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"}],\"name\":\"computeProportionalAmountsOut\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"currentBalances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"tokenOutIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeRemoveLiquiditySingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOutWithFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"currentBalances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"tokenOutIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeRemoveLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"onSwap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"InvariantRatioAboveMax(uint256,uint256)\":[{\"details\":\"This value is determined by each pool type, and depends on the specific math used to compute the price curve.\",\"params\":{\"invariantRatio\":\"The ratio of the new invariant (after an operation) to the old\",\"maxInvariantRatio\":\"The maximum allowed invariant ratio\"}}],\"InvariantRatioBelowMin(uint256,uint256)\":[{\"details\":\"This value is determined by each pool type, and depends on the specific math used to compute the price curve.\",\"params\":{\"invariantRatio\":\"The ratio of the new invariant (after an operation) to the old\",\"minInvariantRatio\":\"The minimum allowed invariant ratio\"}}]},\"kind\":\"dev\",\"methods\":{\"getMaximumInvariantRatio()\":{\"returns\":{\"_0\":\"The maximum invariant ratio for a pool during unbalanced add liquidity\"}},\"getMaximumSwapFeePercentage()\":{\"returns\":{\"_0\":\"The maximum swap fee percentage for a pool\"}},\"getMinimumInvariantRatio()\":{\"returns\":{\"_0\":\"The minimum invariant ratio for a pool during unbalanced remove liquidity\"}},\"getMinimumSwapFeePercentage()\":{\"returns\":{\"_0\":\"The minimum swap fee percentage for a pool\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"InvariantRatioAboveMax(uint256,uint256)\":[{\"notice\":\"An add liquidity operation increased the invariant above the limit.\"}],\"InvariantRatioBelowMin(uint256,uint256)\":[{\"notice\":\"A remove liquidity operation decreased the invariant below the limit.\"}],\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/test/BasePoolMathMock.sol\":\"BasePoolMathMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-vault/contracts/BasePoolMath.sol\":{\"keccak256\":\"0x28078c6fa4d55418c25505d4683642cb51fe55b2155ef7418db6c70631a30d6a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://864b91fdc2b69725bcc07f06d9adebe87117561582fa58f1e4410d8928cd205c\",\"dweb:/ipfs/QmWCDsbTxtmEMLhorqfGF1LDMHMqqVnV9sk9mUTPR7eog8\"]},\"@balancer-labs/v3-vault/contracts/test/BasePoolMathMock.sol\":{\"keccak256\":\"0x8d03867c2d8a32b4d3407df0b8e0bc8997eb838c6bc8339e5bbd5fd41cf82910\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://379bc567783a42259380747ad96e284f7fa9264a75bbe6dc1a277959bc9ff0ae\",\"dweb:/ipfs/QmdVAwsacp2tbXGtGdTSnd6FTHKvUYWWdpdvSnyD4zJqnq\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/test/BasicAuthorizerMock.sol":{"BasicAuthorizerMock":{"abi":[{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"where","type":"address"}],"name":"canPerform","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"where","type":"address"}],"name":"grantSpecificRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"where","type":"address"}],"name":"hasSpecificRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"where","type":"address"}],"name":"revokeSpecificRole","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60808060405234601557610458908161001a8239f35b5f80fdfe6040608081526004361015610012575f80fd5b5f3560e01c80632f2ff15d14610311578063686c7a1d146102a457806391d14854146102345780639be2a884146101b6578063b7cfddf614610165578063d547741f146100da5763f5407f7714610067575f80fd5b346100d657610075366103c2565b915f526001602052825f2073ffffffffffffffffffffffffffffffffffffffff8092165f52602052825f2091165f526020525f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790555f80f35b5f80fd5b50346100d657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100d65761011161039f565b6004355f525f60205273ffffffffffffffffffffffffffffffffffffffff825f2091165f526020525f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690555f80f35b50346100d657602090610177366103c2565b915f5260018452825f2073ffffffffffffffffffffffffffffffffffffffff8092165f528452825f2091165f52825260ff815f20541690519015158152f35b50346100d6576101c5366103c2565b9290825f5260209360018552825f209173ffffffffffffffffffffffffffffffffffffffff80911692835f528652835f2091165f52845260ff825f205416928315610215575b5050519015158152f35b5f9081528085528281209181529084528181205460ff1692508061020b565b50346100d657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100d65760209061026e61039f565b6004355f525f835273ffffffffffffffffffffffffffffffffffffffff825f2091165f52825260ff815f20541690519015158152f35b50346100d6576102b3366103c2565b915f526001602052825f2073ffffffffffffffffffffffffffffffffffffffff8092165f52602052825f2091165f526020525f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690555f80f35b50346100d657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100d65761034861039f565b6004355f525f60205273ffffffffffffffffffffffffffffffffffffffff825f2091165f526020525f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790555f80f35b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100d657565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60609101126100d6576004359073ffffffffffffffffffffffffffffffffffffffff9060243582811681036100d6579160443590811681036100d6579056fea2646970667358221220364009910c7b6e481e528a717c09bf2600b87fc5a75e12a0506357c25c2335b764736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x15 JUMPI PUSH2 0x458 SWAP1 DUP2 PUSH2 0x1A DUP3 CODECOPY RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2F2FF15D EQ PUSH2 0x311 JUMPI DUP1 PUSH4 0x686C7A1D EQ PUSH2 0x2A4 JUMPI DUP1 PUSH4 0x91D14854 EQ PUSH2 0x234 JUMPI DUP1 PUSH4 0x9BE2A884 EQ PUSH2 0x1B6 JUMPI DUP1 PUSH4 0xB7CFDDF6 EQ PUSH2 0x165 JUMPI DUP1 PUSH4 0xD547741F EQ PUSH2 0xDA JUMPI PUSH4 0xF5407F77 EQ PUSH2 0x67 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xD6 JUMPI PUSH2 0x75 CALLDATASIZE PUSH2 0x3C2 JUMP JUMPDEST SWAP2 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND PUSH0 MSTORE PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SWAP2 AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xD6 JUMPI DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xD6 JUMPI PUSH2 0x111 PUSH2 0x39F JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP2 AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0xD6 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x177 CALLDATASIZE PUSH2 0x3C2 JUMP JUMPDEST SWAP2 PUSH0 MSTORE PUSH1 0x1 DUP5 MSTORE DUP3 PUSH0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND PUSH0 MSTORE DUP5 MSTORE DUP3 PUSH0 KECCAK256 SWAP2 AND PUSH0 MSTORE DUP3 MSTORE PUSH1 0xFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0xD6 JUMPI PUSH2 0x1C5 CALLDATASIZE PUSH2 0x3C2 JUMP JUMPDEST SWAP3 SWAP1 DUP3 PUSH0 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x1 DUP6 MSTORE DUP3 PUSH0 KECCAK256 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP3 DUP4 PUSH0 MSTORE DUP7 MSTORE DUP4 PUSH0 KECCAK256 SWAP2 AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0xFF DUP3 PUSH0 KECCAK256 SLOAD AND SWAP3 DUP4 ISZERO PUSH2 0x215 JUMPI JUMPDEST POP POP MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH0 SWAP1 DUP2 MSTORE DUP1 DUP6 MSTORE DUP3 DUP2 KECCAK256 SWAP2 DUP2 MSTORE SWAP1 DUP5 MSTORE DUP2 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND SWAP3 POP DUP1 PUSH2 0x20B JUMP JUMPDEST POP CALLVALUE PUSH2 0xD6 JUMPI DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xD6 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x26E PUSH2 0x39F JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH0 MSTORE PUSH0 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP2 AND PUSH0 MSTORE DUP3 MSTORE PUSH1 0xFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0xD6 JUMPI PUSH2 0x2B3 CALLDATASIZE PUSH2 0x3C2 JUMP JUMPDEST SWAP2 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND PUSH0 MSTORE PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SWAP2 AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0xD6 JUMPI DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xD6 JUMPI PUSH2 0x348 PUSH2 0x39F JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP2 AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xD6 JUMPI JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC PUSH1 0x60 SWAP2 ADD SLT PUSH2 0xD6 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x24 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0xD6 JUMPI SWAP2 PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0xD6 JUMPI SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLDATASIZE BLOCKHASH MULMOD SWAP2 0xC PUSH28 0x6E481E528A717C09BF2600B87FC5A75E12A0506357C25C2335B76473 PUSH16 0x6C634300081B00330000000000000000 ","sourceMap":"165:1474:82:-:0;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":927,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bytes32t_addresst_address":{"entryPoint":962,"id":null,"parameterSlots":1,"returnSlots":3}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6040608081526004361015610012575f80fd5b5f3560e01c80632f2ff15d14610311578063686c7a1d146102a457806391d14854146102345780639be2a884146101b6578063b7cfddf614610165578063d547741f146100da5763f5407f7714610067575f80fd5b346100d657610075366103c2565b915f526001602052825f2073ffffffffffffffffffffffffffffffffffffffff8092165f52602052825f2091165f526020525f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790555f80f35b5f80fd5b50346100d657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100d65761011161039f565b6004355f525f60205273ffffffffffffffffffffffffffffffffffffffff825f2091165f526020525f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690555f80f35b50346100d657602090610177366103c2565b915f5260018452825f2073ffffffffffffffffffffffffffffffffffffffff8092165f528452825f2091165f52825260ff815f20541690519015158152f35b50346100d6576101c5366103c2565b9290825f5260209360018552825f209173ffffffffffffffffffffffffffffffffffffffff80911692835f528652835f2091165f52845260ff825f205416928315610215575b5050519015158152f35b5f9081528085528281209181529084528181205460ff1692508061020b565b50346100d657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100d65760209061026e61039f565b6004355f525f835273ffffffffffffffffffffffffffffffffffffffff825f2091165f52825260ff815f20541690519015158152f35b50346100d6576102b3366103c2565b915f526001602052825f2073ffffffffffffffffffffffffffffffffffffffff8092165f52602052825f2091165f526020525f207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690555f80f35b50346100d657807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100d65761034861039f565b6004355f525f60205273ffffffffffffffffffffffffffffffffffffffff825f2091165f526020525f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790555f80f35b6024359073ffffffffffffffffffffffffffffffffffffffff821682036100d657565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60609101126100d6576004359073ffffffffffffffffffffffffffffffffffffffff9060243582811681036100d6579160443590811681036100d6579056fea2646970667358221220364009910c7b6e481e528a717c09bf2600b87fc5a75e12a0506357c25c2335b764736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x2F2FF15D EQ PUSH2 0x311 JUMPI DUP1 PUSH4 0x686C7A1D EQ PUSH2 0x2A4 JUMPI DUP1 PUSH4 0x91D14854 EQ PUSH2 0x234 JUMPI DUP1 PUSH4 0x9BE2A884 EQ PUSH2 0x1B6 JUMPI DUP1 PUSH4 0xB7CFDDF6 EQ PUSH2 0x165 JUMPI DUP1 PUSH4 0xD547741F EQ PUSH2 0xDA JUMPI PUSH4 0xF5407F77 EQ PUSH2 0x67 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xD6 JUMPI PUSH2 0x75 CALLDATASIZE PUSH2 0x3C2 JUMP JUMPDEST SWAP2 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND PUSH0 MSTORE PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SWAP2 AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xD6 JUMPI DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xD6 JUMPI PUSH2 0x111 PUSH2 0x39F JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP2 AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0xD6 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x177 CALLDATASIZE PUSH2 0x3C2 JUMP JUMPDEST SWAP2 PUSH0 MSTORE PUSH1 0x1 DUP5 MSTORE DUP3 PUSH0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND PUSH0 MSTORE DUP5 MSTORE DUP3 PUSH0 KECCAK256 SWAP2 AND PUSH0 MSTORE DUP3 MSTORE PUSH1 0xFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0xD6 JUMPI PUSH2 0x1C5 CALLDATASIZE PUSH2 0x3C2 JUMP JUMPDEST SWAP3 SWAP1 DUP3 PUSH0 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x1 DUP6 MSTORE DUP3 PUSH0 KECCAK256 SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP3 DUP4 PUSH0 MSTORE DUP7 MSTORE DUP4 PUSH0 KECCAK256 SWAP2 AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0xFF DUP3 PUSH0 KECCAK256 SLOAD AND SWAP3 DUP4 ISZERO PUSH2 0x215 JUMPI JUMPDEST POP POP MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH0 SWAP1 DUP2 MSTORE DUP1 DUP6 MSTORE DUP3 DUP2 KECCAK256 SWAP2 DUP2 MSTORE SWAP1 DUP5 MSTORE DUP2 DUP2 KECCAK256 SLOAD PUSH1 0xFF AND SWAP3 POP DUP1 PUSH2 0x20B JUMP JUMPDEST POP CALLVALUE PUSH2 0xD6 JUMPI DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xD6 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x26E PUSH2 0x39F JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH0 MSTORE PUSH0 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP2 AND PUSH0 MSTORE DUP3 MSTORE PUSH1 0xFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0xD6 JUMPI PUSH2 0x2B3 CALLDATASIZE PUSH2 0x3C2 JUMP JUMPDEST SWAP2 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND PUSH0 MSTORE PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SWAP2 AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0xD6 JUMPI DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xD6 JUMPI PUSH2 0x348 PUSH2 0x39F JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH0 KECCAK256 SWAP2 AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0xD6 JUMPI JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC PUSH1 0x60 SWAP2 ADD SLT PUSH2 0xD6 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x24 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0xD6 JUMPI SWAP2 PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0xD6 JUMPI SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 CALLDATASIZE BLOCKHASH MULMOD SWAP2 0xC PUSH28 0x6E481E528A717C09BF2600B87FC5A75E12A0506357C25C2335B76473 PUSH16 0x6C634300081B00330000000000000000 ","sourceMap":"165:1474:82:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;1312:4;165:1474;;;;;;;;;;;;;;;;;;;;;;;;1312:4;165:1474;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;1594:14;165:1474;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;1594:14;165:1474;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;714:63;;;;;165:1474;;;;;;;;;;714:63;165:1474;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;165:1474:82;714:63;;165:1474;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;1422:14;165:1474;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o"},"methodIdentifiers":{"canPerform(bytes32,address,address)":"9be2a884","grantRole(bytes32,address)":"2f2ff15d","grantSpecificRole(bytes32,address,address)":"f5407f77","hasRole(bytes32,address)":"91d14854","hasSpecificRole(bytes32,address,address)":"b7cfddf6","revokeRole(bytes32,address)":"d547741f","revokeSpecificRole(bytes32,address,address)":"686c7a1d"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"where\",\"type\":\"address\"}],\"name\":\"canPerform\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"where\",\"type\":\"address\"}],\"name\":\"grantSpecificRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"where\",\"type\":\"address\"}],\"name\":\"hasSpecificRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"where\",\"type\":\"address\"}],\"name\":\"revokeSpecificRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"params\":{\"account\":\"Account trying to perform the action\",\"actionId\":\"Identifier for the action to be performed\",\"where\":\"Target contract for the action\"},\"returns\":{\"_0\":\"True if the action is permitted\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"canPerform(bytes32,address,address)\":{\"notice\":\"Returns true if `account` can perform the action described by `actionId` in the contract `where`.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/test/BasicAuthorizerMock.sol\":\"BasicAuthorizerMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-vault/contracts/test/BasicAuthorizerMock.sol\":{\"keccak256\":\"0xf9b2b8c4e606a02c03daf9e80a2db6c68b4da516d6f665b37ac4356cb6e4960b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://eb2e3afc61b6e6edca07092d61f1b0e9eba3a87121f0a604d9a5ac0f8d9add99\",\"dweb:/ipfs/QmVGKbJdCVog3Um8ai9KGW9aLWjine4s9hjM2u8TDfoQN6\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/test/BatchRouterMock.sol":{"BatchRouterMock":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"contract IWETH","name":"weth","type":"address"},{"internalType":"contract IPermit2","name":"permit2","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"ErrorSelectorNotFound","type":"error"},{"inputs":[],"name":"EthTransfer","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[],"name":"InsufficientEth","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"inputs":[],"name":"TransientIndexOutOfBounds","type":"error"},{"inputs":[],"name":"getPermit2","outputs":[{"internalType":"contract IPermit2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSender","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWeth","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualGetCurrentSwapTokenInAmounts","outputs":[{"internalType":"AddressToUintMappingSlot","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualGetCurrentSwapTokenOutAmounts","outputs":[{"internalType":"AddressToUintMappingSlot","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualGetCurrentSwapTokensInSlot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualGetCurrentSwapTokensOutSlot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualGetSettledTokenAmounts","outputs":[{"internalType":"AddressToUintMappingSlot","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"internalType":"struct IRouterCommon.PermitApproval[]","name":"permitBatch","type":"tuple[]"},{"internalType":"bytes[]","name":"permitSignatures","type":"bytes[]"},{"components":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint160","name":"amount","type":"uint160"},{"internalType":"uint48","name":"expiration","type":"uint48"},{"internalType":"uint48","name":"nonce","type":"uint48"}],"internalType":"struct IAllowanceTransfer.PermitDetails[]","name":"details","type":"tuple[]"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"sigDeadline","type":"uint256"}],"internalType":"struct IAllowanceTransfer.PermitBatch","name":"permit2Batch","type":"tuple"},{"internalType":"bytes","name":"permit2Signature","type":"bytes"},{"internalType":"bytes[]","name":"multicallData","type":"bytes[]"}],"name":"permitBatchAndCall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct IBatchRouter.SwapPathStep[]","name":"steps","type":"tuple[]"},{"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"internalType":"struct IBatchRouter.SwapPathExactAmountIn[]","name":"paths","type":"tuple[]"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"querySwapExactIn","outputs":[{"internalType":"uint256[]","name":"pathAmountsOut","type":"uint256[]"},{"internalType":"address[]","name":"tokensOut","type":"address[]"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"components":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct IBatchRouter.SwapPathStep[]","name":"steps","type":"tuple[]"},{"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"internalType":"struct IBatchRouter.SwapPathExactAmountIn[]","name":"paths","type":"tuple[]"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct IBatchRouter.SwapExactInHookParams","name":"params","type":"tuple"}],"name":"querySwapExactInHook","outputs":[{"internalType":"uint256[]","name":"pathAmountsOut","type":"uint256[]"},{"internalType":"address[]","name":"tokensOut","type":"address[]"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct IBatchRouter.SwapPathStep[]","name":"steps","type":"tuple[]"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"}],"internalType":"struct IBatchRouter.SwapPathExactAmountOut[]","name":"paths","type":"tuple[]"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"querySwapExactOut","outputs":[{"internalType":"uint256[]","name":"pathAmountsIn","type":"uint256[]"},{"internalType":"address[]","name":"tokensIn","type":"address[]"},{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"components":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct IBatchRouter.SwapPathStep[]","name":"steps","type":"tuple[]"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"}],"internalType":"struct IBatchRouter.SwapPathExactAmountOut[]","name":"paths","type":"tuple[]"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct IBatchRouter.SwapExactOutHookParams","name":"params","type":"tuple"}],"name":"querySwapExactOutHook","outputs":[{"internalType":"uint256[]","name":"pathAmountsIn","type":"uint256[]"},{"internalType":"address[]","name":"tokensIn","type":"address[]"},{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct IBatchRouter.SwapPathStep[]","name":"steps","type":"tuple[]"},{"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"internalType":"struct IBatchRouter.SwapPathExactAmountIn[]","name":"paths","type":"tuple[]"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"swapExactIn","outputs":[{"internalType":"uint256[]","name":"pathAmountsOut","type":"uint256[]"},{"internalType":"address[]","name":"tokensOut","type":"address[]"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"components":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct IBatchRouter.SwapPathStep[]","name":"steps","type":"tuple[]"},{"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"internalType":"struct IBatchRouter.SwapPathExactAmountIn[]","name":"paths","type":"tuple[]"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct IBatchRouter.SwapExactInHookParams","name":"params","type":"tuple"}],"name":"swapExactInHook","outputs":[{"internalType":"uint256[]","name":"pathAmountsOut","type":"uint256[]"},{"internalType":"address[]","name":"tokensOut","type":"address[]"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct IBatchRouter.SwapPathStep[]","name":"steps","type":"tuple[]"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"}],"internalType":"struct IBatchRouter.SwapPathExactAmountOut[]","name":"paths","type":"tuple[]"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"swapExactOut","outputs":[{"internalType":"uint256[]","name":"pathAmountsIn","type":"uint256[]"},{"internalType":"address[]","name":"tokensIn","type":"address[]"},{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"components":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"bool","name":"isBuffer","type":"bool"}],"internalType":"struct IBatchRouter.SwapPathStep[]","name":"steps","type":"tuple[]"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"}],"internalType":"struct IBatchRouter.SwapPathExactAmountOut[]","name":"paths","type":"tuple[]"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct IBatchRouter.SwapExactOutHookParams","name":"params","type":"tuple"}],"name":"swapExactOutHook","outputs":[{"internalType":"uint256[]","name":"pathAmountsIn","type":"uint256[]"},{"internalType":"address[]","name":"tokensIn","type":"address[]"},{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}],"evm":{"bytecode":{"functionDebugData":{"finalize_allocation":{"entryPoint":1704,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_8261":{"entryPoint":1677,"id":null,"parameterSlots":1,"returnSlots":0},"fun_calculateSlot":{"entryPoint":1739,"id":6911,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6101c060408181523461068957606082614e0a803803809161002182856106a8565b8339810103126106895781516001600160a01b0392909190838316830361068957602092838201519185831683036106895783015194851685036106895782519061006b8261068d565b601382527f4d6f636b204261746368526f7574657220763100000000000000000000000000858301526100dc84516100a28161068d565b600b81526a14d95b99195c91dd585c9960aa1b878201528551906100c58261068d565b600682526539b2b73232b960d11b888301526106cb565b60805260a05280516001600160401b038111610675575f54916001928381811c9116801561066b575b8782101461065757601f8111610611575b508590601f83116001146105b2579282939183925f946105a7575b50501b915f199060031b1c1916175f555b81519061014e8261068d565b600c82526b2937baba32b921b7b6b6b7b760a11b8483015261019883516101748161068d565b601193848252701a5cd4995d1d5c9b915d1a131bd8dad959607a1b878301526106cb565b60c05260e0526101009384528151906101b08261068d565b601382527f63757272656e7453776170546f6b656e73496e000000000000000000000000008483015261020b8351926101e88461068d565b828452702130ba31b42937baba32b921b7b6b6b7b760791b9384878201526106cb565b9361012094855261036261026485516102238161068d565b601481527f63757272656e7453776170546f6b656e734f75740000000000000000000000008482015286516102578161068d565b85815286858201526106cb565b916101409283526102ba86516102798161068d565b601981527f63757272656e7453776170546f6b656e496e416d6f756e7473000000000000008382015287516102ad8161068d565b86815287848201526106cb565b9361016094855261031087516102cf8161068d565b601a81527f63757272656e7453776170546f6b656e4f7574416d6f756e74730000000000008482015288516103038161068d565b83815288858201526106cb565b956101809687528751926103238461068d565b601384527f736574746c6564546f6b656e416d6f756e747300000000000000000000000000818501528851926103588461068d565b83528201526106cb565b936101a0948552519461468c968761077e88396080518781816102f70152818161063001528181611a140152612ab3015260a05187818161029301528181611b7101528181611dd5015281816120170152818161226e0152818161240701528181612518015281816125a60152818161266801528181612ca201528181612e8101528181612ec901528181612f4701528181612fee015281816130fc015281816131790152818161340e0152818161353d015281816135da015281816136a001528181613d6101528181613e86015281816140c901528181614200015261445c015260c05187818161199e01526138af015260e05187818160220152818161103401528181613cf301528181613fd90152818161411f015261429a0152518681816109a201528181610b6801528181610c7c01528181612163015281816121e90152818161326e0152613e6201525185818161059e0152818161275e0152818161294501528181612b4f01526137cd0152518481816103e201528181611e38015281816120840152818161246a015281816126cc015281816127c30152818161292101528181612d07015261379d0152518381816107de01528181611f380152818161278a0152818161297101528181613483015281816136fe015261382001525182818161106f01528181611e61015281816120b5015281816126f601528181612816015281816129a901528181612d4601526134c501525181818161036401528181612494015281816127f401528181612d770152818161304b01526137fe0152f35b015192505f80610131565b90601f198316915f805283885f20935f5b8a888383106105fa57505050106105e2575b505050811b015f55610142565b01515f1960f88460031b161c191690555f80806105d5565b8686015188559096019594850194879350016105c3565b5f8052865f20601f840160051c81019188851061064d575b601f0160051c019084905b828110610642575050610116565b5f8155018490610634565b9091508190610629565b634e487b7160e01b5f52602260045260245ffd5b90607f1690610105565b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b604081019081106001600160401b0382111761067557604052565b601f909101601f19168101906001600160401b0382119082101761067557604052565b90610738603a60209260405193849181808401977f62616c616e6365722d6c6162732e76332e73746f726167652e000000000000008952805191829101603986015e830190601760f91b60398301528051928391018583015e015f8382015203601a8101845201826106a8565b5190205f1981019081116107695760405190602082019081526020825261075e8261068d565b9051902060ff191690565b634e487b7160e01b5f52601160045260245ffdfe60806040526004361015610072575b3615610018575f80fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361004a57005b7f0540ddf6000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f3560e01c806308a465f6146110925780630f8fb1cc14611058578063107c279f1461101557806319c6989f146109c65780631bbf2e2314610983578063286f580d146108ec5780632950286e1461080157806348bbd869146107c757806354fd4d501461068a5780635a3c3987146106615780635e01eb5a1461061c5780638a12a08c146105c15780638c824cd9146105875780638eb1b65e14610480578063945ed33f1461040557806396123406146103cb578063ac9650d814610387578063cd791ccc1461034d5763e3b5dff40361000e5734610349576060806003193601126103495767ffffffffffffffff6004358181116103495761017a9036906004016114b9565b610182611396565b6044359283116103495761019d6101a59336906004016111c2565b939091612aae565b905f5b83518110156101c957805f876101c060019488611886565b510152016101a8565b5061023d61024b610286946102035f9488604051936101e78561130f565b30855260208501525f1960408501528660608501523691611576565b60808201526040519283917f8a12a08c00000000000000000000000000000000000000000000000000000000602084015260248301611633565b03601f198101835282611347565b604051809481927fedfa35680000000000000000000000000000000000000000000000000000000083526020600484015260248301906111f0565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af191821561033e576102f0926102db915f9161031c575b50602080825183010191016117c9565b909391926102f4575b60405193849384611124565b0390f35b5f7f00000000000000000000000000000000000000000000000000000000000000005d6102e4565b61033891503d805f833e6103308183611347565b810190611742565b846102cb565b6040513d5f823e3d90fd5b5f80fd5b34610349575f6003193601126103495760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b60206003193601126103495760043567ffffffffffffffff8111610349576103bf6103b96102f0923690600401611191565b90611990565b60405191829182611215565b34610349575f6003193601126103495760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461034957610413366110bf565b61041b611b3a565b610423611b67565b6104516102f061043283612af0565b9193909461044b606061044483611539565b920161154d565b9061291e565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d60405193849384611124565b60806003193601126103495767ffffffffffffffff600435818111610349576104ad9036906004016114b9565b906104b66113ac565b906064359081116103495761023d61054c610286946105126104dd5f9536906004016111c2565b6104e633612aae565b97604051946104f48661130f565b33865260208601526024356040860152151560608501523691611576565b60808201526040519283917f945ed33f000000000000000000000000000000000000000000000000000000006020840152602483016118c7565b604051809481927f48c894910000000000000000000000000000000000000000000000000000000083526020600484015260248301906111f0565b34610349575f6003193601126103495760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610349576102f06105ea6105d5366110bf565b6105dd611b3a565b6105e5611b67565b611c30565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f009492945d60405193849384611124565b34610349575f6003193601126103495760207f00000000000000000000000000000000000000000000000000000000000000005c6001600160a01b0360405191168152f35b34610349576102f06105ea610675366110bf565b61067d611b3a565b610685611b67565b612af0565b34610349575f600319360112610349576040515f5f549060018260011c91600184169182156107bd575b60209485851084146107905785879486865291825f146107525750506001146106f9575b506106e592500383611347565b6102f06040519282849384528301906111f0565b5f808052859250907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b85831061073a5750506106e59350820101856106d8565b80548389018501528794508693909201918101610723565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016858201526106e595151560051b85010192508791506106d89050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f16926106b4565b34610349575f6003193601126103495760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346103495760606003193601126103495767ffffffffffffffff600435818111610349576108339036906004016114b9565b9061083c611396565b6044359182116103495761085761085f9236906004016111c2565b929091612aae565b905f5b845181101561089457806fffffffffffffffffffffffffffffffff604061088b60019489611886565b51015201610862565b5061023d61024b856108b25f9461028697604051936101e78561130f565b60808201526040519283917f5a3c3987000000000000000000000000000000000000000000000000000000006020840152602483016118c7565b60806003193601126103495767ffffffffffffffff600435818111610349576109199036906004016114b9565b906109226113ac565b906064359081116103495761023d61054c610286946109496104dd5f9536906004016111c2565b60808201526040519283917f08a465f600000000000000000000000000000000000000000000000000000000602084015260248301611633565b34610349575f6003193601126103495760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b60a06003193601126103495767ffffffffffffffff60043511610349573660236004350112156103495767ffffffffffffffff60043560040135116103495736602460c060043560040135026004350101116103495760243567ffffffffffffffff811161034957610a3c903690600401611191565b67ffffffffffffffff60443511610349576060600319604435360301126103495760643567ffffffffffffffff811161034957610a7d9036906004016111c2565b60843567ffffffffffffffff811161034957610a9d903690600401611191565b949093610aa8611b3a565b806004356004013503610fed575f5b600435600401358110610d4a5750505060443560040135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd60443536030182121561034957816044350160048101359067ffffffffffffffff82116103495760248260071b360391011361034957610b5b575b6102f06103bf86865f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d611990565b6001600160a01b039492947f0000000000000000000000000000000000000000000000000000000000000000163b1561034957604051947f2a2d80d10000000000000000000000000000000000000000000000000000000086523360048701526060602487015260c486019260443501602481019367ffffffffffffffff60048301351161034957600482013560071b360385136103495760606064890152600482013590529192869260e484019291905f905b60048101358210610ccc57505050602091601f19601f865f9787956001600160a01b03610c40602460443501611382565b16608488015260448035013560a48801526003198787030160448801528186528786013787868286010152011601030181836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af191821561033e576102f0936103bf93610cbd575b829450819350610b2b565b610cc6906112fb565b84610cb2565b9195945091926001600160a01b03610ce387611382565b168152602080870135916001600160a01b03831680930361034957600492600192820152610d1360408901612a9b565b65ffffffffffff8091166040830152610d2e60608a01612a9b565b1660608201526080809101970193019050889495939291610c0f565b610d5f610d58828486611b1f565b3691611576565b604051610d6b81611296565b5f81526020915f838301525f60408301528281015190606060408201519101515f1a91835283830152604082015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc81850260043501360301126103495760405190610dd8826112df565b610deb602460c086026004350101611382565b808352610e01604460c087026004350101611382565b908185850152610e1a606460c088026004350101611382565b60408581019190915260043560c08802016084810135606087015260a4810135608087015260c4013560a086015283015183519386015160ff91909116926001600160a01b0383163b15610349575f6001600160a01b03809460e4948b98849860c460c06040519c8d9b8c9a7fd505accf000000000000000000000000000000000000000000000000000000008c521660048b01523060248b0152608482820260043501013560448b0152026004350101356064880152608487015260a486015260c4850152165af19081610fde575b50610fd457610ef7612a6c565b906001600160a01b0381511690836001600160a01b0381830151166044604051809581937fdd62ed3e00000000000000000000000000000000000000000000000000000000835260048301523060248301525afa91821561033e575f92610fa4575b506060015103610f6f5750506001905b01610ab7565b805115610f7c5780519101fd5b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b9091508381813d8311610fcd575b610fbc8183611347565b810103126103495751906060610f59565b503d610fb2565b5050600190610f69565b610fe7906112fb565b8a610eea565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610349575f6003193601126103495760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610349575f6003193601126103495760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610349576110a0366110bf565b6110a8611b3a565b6110b0611b67565b6104516102f061043283611c30565b60031990602082820112610349576004359167ffffffffffffffff8311610349578260a0920301126103495760040190565b9081518082526020808093019301915f5b828110611110575050505090565b835185529381019392810192600101611102565b939290611139906060865260608601906110f1565b936020948181036020830152602080855192838152019401905f5b8181106111745750505061117193945060408184039101526110f1565b90565b82516001600160a01b031686529487019491870191600101611154565b9181601f840112156103495782359167ffffffffffffffff8311610349576020808501948460051b01011161034957565b9181601f840112156103495782359167ffffffffffffffff8311610349576020838186019501011161034957565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b84831061124a5750505050505090565b9091929394958480611286837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528a516111f0565b980193019301919493929061123a565b6060810190811067ffffffffffffffff8211176112b257604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60c0810190811067ffffffffffffffff8211176112b257604052565b67ffffffffffffffff81116112b257604052565b60a0810190811067ffffffffffffffff8211176112b257604052565b60e0810190811067ffffffffffffffff8211176112b257604052565b90601f601f19910116810190811067ffffffffffffffff8211176112b257604052565b67ffffffffffffffff81116112b25760051b60200190565b35906001600160a01b038216820361034957565b602435906001600160a01b038216820361034957565b60443590811515820361034957565b91909160808184031261034957604090815191608083019467ffffffffffffffff95848110878211176112b257825283956113f584611382565b85526020908185013590811161034957840182601f820112156103495780359061141e8261136a565b9361142b86519586611347565b8285528385019084606080950284010192818411610349578501915b8383106114695750505050508401528181013590830152606090810135910152565b84838303126103495787519061147e82611296565b61148784611382565b8252611494878501611382565b8783015288840135908115158203610349578288928b89950152815201920191611447565b81601f82011215610349578035916020916114d38461136a565b936114e16040519586611347565b808552838086019160051b8301019280841161034957848301915b84831061150c5750505050505090565b823567ffffffffffffffff811161034957869161152e848480948901016113bb565b8152019201916114fc565b356001600160a01b03811681036103495790565b3580151581036103495790565b67ffffffffffffffff81116112b257601f01601f191660200190565b9291926115828261155a565b916115906040519384611347565b829481845281830111610349578281602093845f960137010152565b9060808101916001600160a01b03808251168352602093848301519460808186015285518092528060a086019601925f905b8382106116005750505050506060816040829301516040850152015191015290565b845180518216895280840151821689850152604090810151151590890152606090970196938201936001909101906115de565b91909160209081815260c08101916001600160a01b0385511681830152808501519260a06040840152835180915260e08301918060e08360051b8601019501925f905b8382106116b25750505050506080846040611171959601516060840152606081015115158284015201519060a0601f19828503019101526111f0565b909192939583806116ed837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff208a600196030186528a516115ac565b98019201920190939291611676565b81601f82011215610349578051906117138261155a565b926117216040519485611347565b8284526020838301011161034957815f9260208093018386015e8301015290565b9060208282031261034957815167ffffffffffffffff81116103495761117192016116fc565b9080601f83011215610349578151906020916117838161136a565b936117916040519586611347565b81855260208086019260051b82010192831161034957602001905b8282106117ba575050505090565b815181529083019083016117ac565b90916060828403126103495781519167ffffffffffffffff9283811161034957846117f5918301611768565b936020808301518581116103495783019082601f830112156103495781519161181d8361136a565b9261182b6040519485611347565b808452828085019160051b83010191858311610349578301905b8282106118675750505050936040830151908111610349576111719201611768565b81516001600160a01b0381168103610349578152908301908301611845565b805182101561189a5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b91909160209081815260c08101916001600160a01b0385511681830152808501519260a06040840152835180915260e08301918060e08360051b8601019501925f905b8382106119465750505050506080846040611171959601516060840152606081015115158284015201519060a0601f19828503019101526111f0565b90919293958380611981837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff208a600196030186528a516115ac565b9801920192019093929161190a565b919061199b33612aae565b907f000000000000000000000000000000000000000000000000000000000000000093845c611aa6576001906001865d6119d48361136a565b926119e26040519485611347565b808452601f196119f18261136a565b015f5b818110611a955750505f5b818110611a4c5750505050905f611a4192945d7f0000000000000000000000000000000000000000000000000000000000000000805c91611a43575b506138a6565b565b5f905d5f611a3b565b80611a795f80611a61610d588996888a611b1f565b602081519101305af4611a72612a6c565b9030614347565b611a838288611886565b52611a8e8187611886565b50016119ff565b8060606020809389010152016119f4565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610349570180359067ffffffffffffffff82116103495760200191813603831361034957565b9082101561189a57611b369160051b810190611ace565b9091565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c611aa6576001905d565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163303611b9957565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b90611bcf8261136a565b611bdc6040519182611347565b828152601f19611bec829461136a565b0190602036910137565b91908201809211611c0357565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b604081013542116128b85790611c53611c4c60208401846138e9565b9050611bc5565b915f5b611c6360208301836138e9565b90508110156127bc57611c8d81611c88611c8060208601866138e9565b36939161393d565b6113bb565b936040850151936001600160a01b0386511690602087015180511561189a5760200151604001511515806127b3575b1561275857611ce1611ccd86611539565b8784611cdb60608a0161154d565b92613cd2565b5f5b60208801515181101561274857611cf861397d565b6020890151515f198101908111611c03578214806020830152821582525f14612741576060890151905b611d308360208c0151611886565b51604081015190919015611ee357611dc86001600160a01b03835116936001600160a01b03881685145f14611edc576001945b60405195611d708761130f565b5f8752611d7c816139b3565b6020870152604086015260609485918d838301526080820152604051809381927f43583be500000000000000000000000000000000000000000000000000000000835260048301613c17565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af193841561033e575f94611ea5575b50506020015115611e8b57816001600160a01b036020611e859360019695611e2d8c8c611886565b5201611e5c828251167f00000000000000000000000000000000000000000000000000000000000000006143ab565b5051167f00000000000000000000000000000000000000000000000000000000000000006143f5565b01611ce3565b602001519097506001600160a01b03169250600190611e85565b60209294509081611eca92903d10611ed5575b611ec28183611347565b8101906139ea565b91505092905f611e05565b503d611eb8565b5f94611d63565b888a6001600160a01b038495945116806001600160a01b038a16145f14612327575050815115905061226357888a80151580612248575b612142575b6001600160a01b03939291611fd28261200a978b5f95897f0000000000000000000000000000000000000000000000000000000000000000921680885282602052604088205c612131575b5050505b6001611f918983511660208401998b8b51169080158a1461212b5750839161440e565b999092511694611fa660809182810190611ace565b93909460405197611fb6896112df565b8852306020890152604088015260608701528501523691611576565b60a0820152604051809681927f2145789700000000000000000000000000000000000000000000000000000000835260048301613ba6565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af193841561033e575f94612101575b5060200151156120de57916120b1826001600160a01b036001969561206f6120d99686611886565b5161207a8d8d611886565b526120a8828251167f00000000000000000000000000000000000000000000000000000000000000006143ab565b50511692611886565b51907f00000000000000000000000000000000000000000000000000000000000000006143f5565b611e85565b985060019294506120f7906001600160a01b0392611886565b5197511692611e85565b6020919450612121903d805f833e6121198183611347565b810190613b5e565b5094919050612047565b9161440e565b61213a9261452c565b5f8281611f6a565b5061214f90929192611539565b916121598b6144e8565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b15610349576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039485166004820152306024820152908416604482015292871660648401525f8380608481010381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561033e578a611fd28d61200a976001600160a01b03975f95612239575b50975092505091929350611f1f565b612242906112fb565b5f61222a565b5061225282611539565b6001600160a01b0316301415611f1a565b906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916001600160a01b0384511692803b15610349576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03949094166004850152306024850152604484018c90525f908490606490829084905af1801561033e578a611fd28d61200a976001600160a01b03975f95612318575b50611f6e565b612321906112fb565b5f612312565b6001600160a01b0360208796949701511690898183145f146125cc576123c292506123fa97915060016123685f96956001600160a01b0393848b511661440e565b509282895116956020890151151588146125a35761238582611539565b945b61239660809384810190611ace565b959096604051996123a68b6112df565b8a52166020890152604088015260608701528501523691611576565b60a0820152604051809581927f4af29ec400000000000000000000000000000000000000000000000000000000835260048301613aed565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af192831561033e575f93612579575b5060200151156124b857816001600160a01b0360206120d9936001969561245e8c8c611886565b5261248e8383830151167f00000000000000000000000000000000000000000000000000000000000000006143ab565b500151167f00000000000000000000000000000000000000000000000000000000000000006143f5565b60208181015191516040517f15afd4090000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101859052939a50909116945081806044810103815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561033e5761254e575b50600190611e85565b602090813d8311612572575b6125648183611347565b81010312610349575f612545565b503d61255a565b6020919350612599903d805f833e6125918183611347565b810190613a71565b5093919050612437565b837f00000000000000000000000000000000000000000000000000000000000000001694612387565b6001600160a01b0361265b956126239394956125ed60809b8c810190611ace565b939094604051976125fd8961132b565b5f8952602089015216604087015260609a8b978888015286015260a08501523691611576565b60c0820152604051809381927f2bfb780c00000000000000000000000000000000000000000000000000000000835260048301613a05565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af193841561033e575f9461271a575b50506020015115611e8b57816001600160a01b0360206120d993600196956126c08c8c611886565b526126f08383830151167f00000000000000000000000000000000000000000000000000000000000000006143ab565b500151167f00000000000000000000000000000000000000000000000000000000000000006143f5565b6020929450908161273692903d10611ed557611ec28183611347565b91505092905f612698565b5f90611d22565b5091955090935050600101611c56565b612782827f00000000000000000000000000000000000000000000000000000000000000006143ab565b506127ae86837f00000000000000000000000000000000000000000000000000000000000000006143f5565b611ce1565b50321515611cbc565b50506127e77f0000000000000000000000000000000000000000000000000000000000000000613c66565b916127f28351611bc5565b7f0000000000000000000000000000000000000000000000000000000000000000917f000000000000000000000000000000000000000000000000000000000000000091905f5b86518110156128af576001906001600160a01b0380612858838b611886565b51165f528560205261288660405f205c82612873858d611886565b51165f528860205260405f205c90611bf6565b6128908387611886565b5261289b828a611886565b51165f52856020525f604081205d01612839565b50949391509150565b7fe08b8af0000000000000000000000000000000000000000000000000000000005f5260045ffd5b905f198201918213600116611c0357565b7f80000000000000000000000000000000000000000000000000000000000000008114611c03575f190190565b907f000000000000000000000000000000000000000000000000000000000000000090815c7f000000000000000000000000000000000000000000000000000000000000000061296e815c6128e0565b907f0000000000000000000000000000000000000000000000000000000000000000915b5f811215612a2f575050506129a6906128e0565b917f0000000000000000000000000000000000000000000000000000000000000000925b5f8112156129df5750505050611a41906138a6565b612a2a90825f52612a2460205f83828220015c9182825288815288604091612a178a8d8587205c906001600160a01b038916906140a5565b8484525281205d84614002565b506128f1565b6129ca565b612a6790825f52612a2460205f8a8785848420015c93848452818152612a178c6040948587205c906001600160a01b03891690613cd2565b612992565b3d15612a96573d90612a7d8261155a565b91612a8b6040519384611347565b82523d5f602084013e565b606090565b359065ffffffffffff8216820361034957565b905f917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03815c1615612ae6575050565b909192505d600190565b90604082013542116128b857612b0c611c4c60208401846138e9565b915f5b612b1c60208301836138e9565b90508110156137c657612b3981611c88611c8060208601866138e9565b606081015190612b736001600160a01b038251167f00000000000000000000000000000000000000000000000000000000000000006143ab565b506020810151515f198101908111611c03575b5f811215612b9957505050600101612b0f565b612ba7816020840151611886565b51612bb061397d565b9082156020830152602084015151805f19810111611c03575f19018314808352613784575b6020820151156137495760408401516001600160a01b03855116915b604081015115612e125783916001600160a01b036060926020612c95970151151580612e09575b612de2575b5116906001600160a01b0385168203612ddb576001915b60405192612c418461130f565b60018452612c4e816139b3565b6020840152604083015288838301526080820152604051809581927f43583be500000000000000000000000000000000000000000000000000000000835260048301613c17565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af192831561033e5787918b915f95612db4575b506020015115612da557612d9b9284612cf7612da0979694612d6a94611886565b52612d2b6001600160a01b0382167f00000000000000000000000000000000000000000000000000000000000000006143ab565b506001600160a01b03612d428460408a01516139a6565b91167f00000000000000000000000000000000000000000000000000000000000000006143f5565b6001600160a01b038551167f00000000000000000000000000000000000000000000000000000000000000006143f5565b6128f1565b612b86565b505050612da0919350926128f1565b6020919550612dd19060603d606011611ed557611ec28183611347565b5095919050612cd6565b5f91612c34565b612e04612dee8d611539565b8d8b611cdb88604088845116930151930161154d565b612c1d565b50321515612c18565b906001600160a01b03825116806001600160a01b038516145f1461332c5750602084015161323e5750604051927f967870920000000000000000000000000000000000000000000000000000000084526001600160a01b03831660048501526020846024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa93841561033e575f9461320a575b5083916001600160a01b038151166001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b15610349576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015230602482015260448101959095525f8580606481010381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af190811561033e57612fe1955f926131fb575b505b611fd26001600160a01b03612f9d8b82855116836020870151169061440e565b50925116918c6002612fb460809283810190611ace565b92909360405196612fc4886112df565b875230602088015289604088015260608701528501523691611576565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af193841561033e575f946131d8575b5060200151156130c457908291612da0949361303a898d611886565b5261306f836001600160a01b0384167f00000000000000000000000000000000000000000000000000000000000000006143f5565b808310806130a9575b613085575b5050506128f1565b61309b6130a1936130958b611539565b926139a6565b91614541565b5f808061307d565b50306001600160a01b036130bc8b611539565b161415613078565b94509080948082106130dd575b505050612da0906128f1565b916130ed60209261316c946139a6565b90613122826001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001683614541565b60405193849283927f15afd40900000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561033e576131ad575b80806130d1565b602090813d83116131d1575b6131c38183611347565b81010312610349575f6131a6565b503d6131b9565b60209194506131f0903d805f833e6121198183611347565b50909491905061301e565b613204906112fb565b5f612f7b565b9093506020813d602011613236575b8161322660209383611347565b810103126103495751925f612eb1565b3d9150613219565b909261324989611539565b6001600160a01b0330911603613264575b5f612fe194612f7d565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016936132988a611539565b6132a1846144e8565b90863b15610349576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152306024820152918116604483015285166064820152945f908690608490829084905af190811561033e57612fe1955f9261331d575b5094505061325a565b613326906112fb565b5f613314565b6001600160a01b036020849695940151168a8282145f14613600575050506134016133635f92846001600160a01b0388511661440e565b92906133c98c6001600160a01b03808a5116938951151586146135d45761339861338c84611539565b935b6080810190611ace565b929093604051966133a8886112df565b875216602086015260408501528c6060850152600260808501523691611576565b60a0820152604051809381927f4af29ec400000000000000000000000000000000000000000000000000000000835260048301613aed565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af190811561033e575f916135b9575b5060208401518c908a901561359f5783836001600160a01b039361347861347e946134718f9c9b9a98996134a79a611886565b5192611886565b52611886565b5191167f00000000000000000000000000000000000000000000000000000000000000006143f5565b51156134e957612da092916001600160a01b036020612d9b930151167f000000000000000000000000000000000000000000000000000000000000000061452c565b516040517f15afd4090000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201526024810191909152602081806044810103815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561033e57613574575b50612da0906128f1565b602090813d8311613598575b61358a8183611347565b81010312610349575f61356a565b503d613580565b50509091506135b092939650611886565b519384916134a7565b6135cd91503d805f833e6125918183611347565b905061343e565b613398827f0000000000000000000000000000000000000000000000000000000000000000169361338e565b61369396509061365b916060948b61362060809998999384810190611ace565b939094604051976136308961132b565b6001895260208901526001600160a01b038b1660408901528888015286015260a08501523691611576565b60c0820152604051809581927f2bfb780c00000000000000000000000000000000000000000000000000000000835260048301613a05565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af192831561033e5787918b915f95613722575b506020015115612da557612d9b92846136fa612da09796946001600160a01b0394611886565b52167f00000000000000000000000000000000000000000000000000000000000000006143f5565b602091955061373f9060603d606011611ed557611ec28183611347565b50959190506136d4565b6fffffffffffffffffffffffffffffffff6001600160a01b03602061377a81880151613774886128e0565b90611886565b5101511691612bf1565b6137c1856001600160a01b0360208401611e5c828251167f00000000000000000000000000000000000000000000000000000000000000006143ab565b612bd5565b50506137f17f0000000000000000000000000000000000000000000000000000000000000000613c66565b916137fc8351611bc5565b7f0000000000000000000000000000000000000000000000000000000000000000917f000000000000000000000000000000000000000000000000000000000000000091905f5b86518110156128af576001906001600160a01b0380613862838b611886565b51165f528560205261387d60405f205c82612873858d611886565b6138878387611886565b52613892828a611886565b51165f52856020525f604081205d01613843565b4780156138e5577f00000000000000000000000000000000000000000000000000000000000000005c6138e5576001600160a01b03611a4192166142cb565b5050565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610349570180359067ffffffffffffffff821161034957602001918160051b3603831361034957565b919081101561189a5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8181360301821215610349570190565b604051906040820182811067ffffffffffffffff8211176112b2576040525f6020838281520152565b91908203918211611c0357565b600211156139bd57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b90816060910312610349578051916040602083015192015190565b61010060c061117193602084528051613a1d816139b3565b602085015260208101516001600160a01b0380911660408601528060408301511660608601526060820151166080850152608081015160a085015260a08101518285015201519160e08082015201906111f0565b90916060828403126103495781519167ffffffffffffffff928381116103495784613a9d918301611768565b9360208201519360408301519081116103495761117192016116fc565b9081518082526020808093019301915f5b828110613ad9575050505090565b835185529381019392810192600101613acb565b602081526001600160a01b038083511660208301526020830151166040820152613b26604083015160c0606084015260e0830190613aba565b9060608301516080820152608083015160058110156139bd576111719360a0918284015201519060c0601f19828503019101526111f0565b916060838303126103495782519260208101519267ffffffffffffffff938481116103495781613b8f918401611768565b9360408301519081116103495761117192016116fc565b602081526001600160a01b03808351166020830152602083015116604082015260408201516060820152613be9606083015160c0608084015260e0830190613aba565b90608083015160048110156139bd576111719360a0918284015201519060c0601f19828503019101526111f0565b91909160808060a08301948051613c2d816139b3565b84526020810151613c3d816139b3565b60208501526001600160a01b036040820151166040850152606081015160608501520151910152565b90815c613c728161136a565b613c7f6040519182611347565b818152613c8b8261136a565b601f196020910136602084013781945f5b848110613caa575050505050565b600190825f5280845f20015c6001600160a01b03613cc88388611886565b9116905201613c9c565b919280613fcd575b15613e46575050804710613e1e576001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001691823b1561034957604051907fd0e30db00000000000000000000000000000000000000000000000000000000082525f915f8160048185895af1801561033e57613e07575b506044602092937f00000000000000000000000000000000000000000000000000000000000000001694613d8d838783614541565b8460405196879485937f15afd409000000000000000000000000000000000000000000000000000000008552600485015260248401525af1908115613dfb5750613dd45750565b602090813d8311613df4575b613dea8183611347565b8101031261034957565b503d613de0565b604051903d90823e3d90fd5b60209250613e14906112fb565b60445f9250613d58565b7fa01a9df6000000000000000000000000000000000000000000000000000000005f5260045ffd5b90915f9080613e56575b50505050565b6001600160a01b0393847f00000000000000000000000000000000000000000000000000000000000000001694807f00000000000000000000000000000000000000000000000000000000000000001691613eb0846144e8565b96803b15610349576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152848316602482015297821660448901529186161660648701525f908690608490829084905af194851561033e57613f7595613fb9575b5082936020936040518097819582947f15afd40900000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03925af1908115613dfb5750613f8e575b808080613e50565b602090813d8311613fb2575b613fa48183611347565b81010312610349575f613f86565b503d613f9a565b60209350613fc6906112fb565b5f92613f24565b506001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001690821614613cda565b6001810191805f5260209183835260405f205c8015155f1461409c575f1990818101835c838082019182840361405f575b5050505050815c81810192818411611c03575f93815d835284832001015d5f52525f604081205d600190565b61406c61407c9388614625565b865f52885f2001015c9185614625565b835f52808383885f2001015d5f5285855260405f205d5f80808381614033565b50505050505f90565b909392935f9483156142c3578061428e575b156141f157506001600160a01b0390817f000000000000000000000000000000000000000000000000000000000000000016803b15610349576040517fae6393290000000000000000000000000000000000000000000000000000000081525f8160648183887f000000000000000000000000000000000000000000000000000000000000000016968760048401523060248401528a60448401525af1801561033e576141de575b508086913b156141da5781906024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083528960048401525af180156141cf576141b7575b50611a41939450166142cb565b6141c186916112fb565b6141cb57846141aa565b8480fd5b6040513d88823e3d90fd5b5080fd5b6141e99196506112fb565b5f945f61415f565b91909293506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b15610349576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03938416600482015293909216602484015260448301525f908290606490829084905af1801561033e576142855750565b611a41906112fb565b506001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016908216146140b7565b505050509050565b81471061431b575f8080936001600160a01b038294165af16142eb612a6c565b50156142f357565b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fcd786059000000000000000000000000000000000000000000000000000000005f523060045260245ffd5b9061435c57508051156142f357805190602001fd5b815115806143a2575b61436d575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15614365565b6001810190825f528160205260405f205c155f146143ee57805c815f52838160205f20015d60018101809111611c0357815d5c915f5260205260405f205d600190565b5050505f90565b905f5260205261440a60405f2091825c611bf6565b905d565b916044929391936001600160a01b03604094859282808551998a9586947fc9c1661b0000000000000000000000000000000000000000000000000000000086521660048501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa9384156144de575f935f956144a7575b50506144a461449d8594611bc5565b9485611886565b52565b809295508194503d83116144d7575b6144c08183611347565b810103126103495760208251920151925f8061448e565b503d6144b6565b83513d5f823e3d90fd5b6001600160a01b03908181116144fc571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f5260a060045260245260445ffd5b905f5260205261440a60405f2091825c6139a6565b6040519260208401907fa9059cbb0000000000000000000000000000000000000000000000000000000082526001600160a01b038094166024860152604485015260448452608084019084821067ffffffffffffffff8311176112b2576145c0935f9384936040521694519082865af16145b9612a6c565b9083614347565b8051908115159182614601575b50506145d65750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b81925090602091810103126103495760200151801590811503610349575f806145cd565b5c111561462e57565b7f0f4ae0e4000000000000000000000000000000000000000000000000000000005f5260045ffdfea2646970667358221220a10df0561337b3d11e6a31def8164df7ffaae37eb64d434e6ed8fcec7155b1c464736f6c634300081b0033","opcodes":"PUSH2 0x1C0 PUSH1 0x40 DUP2 DUP2 MSTORE CALLVALUE PUSH2 0x689 JUMPI PUSH1 0x60 DUP3 PUSH2 0x4E0A DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x21 DUP3 DUP6 PUSH2 0x6A8 JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x689 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP2 SWAP1 DUP4 DUP4 AND DUP4 SUB PUSH2 0x689 JUMPI PUSH1 0x20 SWAP3 DUP4 DUP3 ADD MLOAD SWAP2 DUP6 DUP4 AND DUP4 SUB PUSH2 0x689 JUMPI DUP4 ADD MLOAD SWAP5 DUP6 AND DUP6 SUB PUSH2 0x689 JUMPI DUP3 MLOAD SWAP1 PUSH2 0x6B DUP3 PUSH2 0x68D JUMP JUMPDEST PUSH1 0x13 DUP3 MSTORE PUSH32 0x4D6F636B204261746368526F7574657220763100000000000000000000000000 DUP6 DUP4 ADD MSTORE PUSH2 0xDC DUP5 MLOAD PUSH2 0xA2 DUP2 PUSH2 0x68D JUMP JUMPDEST PUSH1 0xB DUP2 MSTORE PUSH11 0x14D95B99195C91DD585C99 PUSH1 0xAA SHL DUP8 DUP3 ADD MSTORE DUP6 MLOAD SWAP1 PUSH2 0xC5 DUP3 PUSH2 0x68D JUMP JUMPDEST PUSH1 0x6 DUP3 MSTORE PUSH6 0x39B2B73232B9 PUSH1 0xD1 SHL DUP9 DUP4 ADD MSTORE PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x675 JUMPI PUSH0 SLOAD SWAP2 PUSH1 0x1 SWAP3 DUP4 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x66B JUMPI JUMPDEST DUP8 DUP3 LT EQ PUSH2 0x657 JUMPI PUSH1 0x1F DUP2 GT PUSH2 0x611 JUMPI JUMPDEST POP DUP6 SWAP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0x5B2 JUMPI SWAP3 DUP3 SWAP4 SWAP2 DUP4 SWAP3 PUSH0 SWAP5 PUSH2 0x5A7 JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE JUMPDEST DUP2 MLOAD SWAP1 PUSH2 0x14E DUP3 PUSH2 0x68D JUMP JUMPDEST PUSH1 0xC DUP3 MSTORE PUSH12 0x2937BABA32B921B7B6B6B7B7 PUSH1 0xA1 SHL DUP5 DUP4 ADD MSTORE PUSH2 0x198 DUP4 MLOAD PUSH2 0x174 DUP2 PUSH2 0x68D JUMP JUMPDEST PUSH1 0x11 SWAP4 DUP5 DUP3 MSTORE PUSH17 0x1A5CD4995D1D5C9B915D1A131BD8DAD959 PUSH1 0x7A SHL DUP8 DUP4 ADD MSTORE PUSH2 0x6CB JUMP JUMPDEST PUSH1 0xC0 MSTORE PUSH1 0xE0 MSTORE PUSH2 0x100 SWAP4 DUP5 MSTORE DUP2 MLOAD SWAP1 PUSH2 0x1B0 DUP3 PUSH2 0x68D JUMP JUMPDEST PUSH1 0x13 DUP3 MSTORE PUSH32 0x63757272656E7453776170546F6B656E73496E00000000000000000000000000 DUP5 DUP4 ADD MSTORE PUSH2 0x20B DUP4 MLOAD SWAP3 PUSH2 0x1E8 DUP5 PUSH2 0x68D JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH17 0x2130BA31B42937BABA32B921B7B6B6B7B7 PUSH1 0x79 SHL SWAP4 DUP5 DUP8 DUP3 ADD MSTORE PUSH2 0x6CB JUMP JUMPDEST SWAP4 PUSH2 0x120 SWAP5 DUP6 MSTORE PUSH2 0x362 PUSH2 0x264 DUP6 MLOAD PUSH2 0x223 DUP2 PUSH2 0x68D JUMP JUMPDEST PUSH1 0x14 DUP2 MSTORE PUSH32 0x63757272656E7453776170546F6B656E734F7574000000000000000000000000 DUP5 DUP3 ADD MSTORE DUP7 MLOAD PUSH2 0x257 DUP2 PUSH2 0x68D JUMP JUMPDEST DUP6 DUP2 MSTORE DUP7 DUP6 DUP3 ADD MSTORE PUSH2 0x6CB JUMP JUMPDEST SWAP2 PUSH2 0x140 SWAP3 DUP4 MSTORE PUSH2 0x2BA DUP7 MLOAD PUSH2 0x279 DUP2 PUSH2 0x68D JUMP JUMPDEST PUSH1 0x19 DUP2 MSTORE PUSH32 0x63757272656E7453776170546F6B656E496E416D6F756E747300000000000000 DUP4 DUP3 ADD MSTORE DUP8 MLOAD PUSH2 0x2AD DUP2 PUSH2 0x68D JUMP JUMPDEST DUP7 DUP2 MSTORE DUP8 DUP5 DUP3 ADD MSTORE PUSH2 0x6CB JUMP JUMPDEST SWAP4 PUSH2 0x160 SWAP5 DUP6 MSTORE PUSH2 0x310 DUP8 MLOAD PUSH2 0x2CF DUP2 PUSH2 0x68D JUMP JUMPDEST PUSH1 0x1A DUP2 MSTORE PUSH32 0x63757272656E7453776170546F6B656E4F7574416D6F756E7473000000000000 DUP5 DUP3 ADD MSTORE DUP9 MLOAD PUSH2 0x303 DUP2 PUSH2 0x68D JUMP JUMPDEST DUP4 DUP2 MSTORE DUP9 DUP6 DUP3 ADD MSTORE PUSH2 0x6CB JUMP JUMPDEST SWAP6 PUSH2 0x180 SWAP7 DUP8 MSTORE DUP8 MLOAD SWAP3 PUSH2 0x323 DUP5 PUSH2 0x68D JUMP JUMPDEST PUSH1 0x13 DUP5 MSTORE PUSH32 0x736574746C6564546F6B656E416D6F756E747300000000000000000000000000 DUP2 DUP6 ADD MSTORE DUP9 MLOAD SWAP3 PUSH2 0x358 DUP5 PUSH2 0x68D JUMP JUMPDEST DUP4 MSTORE DUP3 ADD MSTORE PUSH2 0x6CB JUMP JUMPDEST SWAP4 PUSH2 0x1A0 SWAP5 DUP6 MSTORE MLOAD SWAP5 PUSH2 0x468C SWAP7 DUP8 PUSH2 0x77E DUP9 CODECOPY PUSH1 0x80 MLOAD DUP8 DUP2 DUP2 PUSH2 0x2F7 ADD MSTORE DUP2 DUP2 PUSH2 0x630 ADD MSTORE DUP2 DUP2 PUSH2 0x1A14 ADD MSTORE PUSH2 0x2AB3 ADD MSTORE PUSH1 0xA0 MLOAD DUP8 DUP2 DUP2 PUSH2 0x293 ADD MSTORE DUP2 DUP2 PUSH2 0x1B71 ADD MSTORE DUP2 DUP2 PUSH2 0x1DD5 ADD MSTORE DUP2 DUP2 PUSH2 0x2017 ADD MSTORE DUP2 DUP2 PUSH2 0x226E ADD MSTORE DUP2 DUP2 PUSH2 0x2407 ADD MSTORE DUP2 DUP2 PUSH2 0x2518 ADD MSTORE DUP2 DUP2 PUSH2 0x25A6 ADD MSTORE DUP2 DUP2 PUSH2 0x2668 ADD MSTORE DUP2 DUP2 PUSH2 0x2CA2 ADD MSTORE DUP2 DUP2 PUSH2 0x2E81 ADD MSTORE DUP2 DUP2 PUSH2 0x2EC9 ADD MSTORE DUP2 DUP2 PUSH2 0x2F47 ADD MSTORE DUP2 DUP2 PUSH2 0x2FEE ADD MSTORE DUP2 DUP2 PUSH2 0x30FC ADD MSTORE DUP2 DUP2 PUSH2 0x3179 ADD MSTORE DUP2 DUP2 PUSH2 0x340E ADD MSTORE DUP2 DUP2 PUSH2 0x353D ADD MSTORE DUP2 DUP2 PUSH2 0x35DA ADD MSTORE DUP2 DUP2 PUSH2 0x36A0 ADD MSTORE DUP2 DUP2 PUSH2 0x3D61 ADD MSTORE DUP2 DUP2 PUSH2 0x3E86 ADD MSTORE DUP2 DUP2 PUSH2 0x40C9 ADD MSTORE DUP2 DUP2 PUSH2 0x4200 ADD MSTORE PUSH2 0x445C ADD MSTORE PUSH1 0xC0 MLOAD DUP8 DUP2 DUP2 PUSH2 0x199E ADD MSTORE PUSH2 0x38AF ADD MSTORE PUSH1 0xE0 MLOAD DUP8 DUP2 DUP2 PUSH1 0x22 ADD MSTORE DUP2 DUP2 PUSH2 0x1034 ADD MSTORE DUP2 DUP2 PUSH2 0x3CF3 ADD MSTORE DUP2 DUP2 PUSH2 0x3FD9 ADD MSTORE DUP2 DUP2 PUSH2 0x411F ADD MSTORE PUSH2 0x429A ADD MSTORE MLOAD DUP7 DUP2 DUP2 PUSH2 0x9A2 ADD MSTORE DUP2 DUP2 PUSH2 0xB68 ADD MSTORE DUP2 DUP2 PUSH2 0xC7C ADD MSTORE DUP2 DUP2 PUSH2 0x2163 ADD MSTORE DUP2 DUP2 PUSH2 0x21E9 ADD MSTORE DUP2 DUP2 PUSH2 0x326E ADD MSTORE PUSH2 0x3E62 ADD MSTORE MLOAD DUP6 DUP2 DUP2 PUSH2 0x59E ADD MSTORE DUP2 DUP2 PUSH2 0x275E ADD MSTORE DUP2 DUP2 PUSH2 0x2945 ADD MSTORE DUP2 DUP2 PUSH2 0x2B4F ADD MSTORE PUSH2 0x37CD ADD MSTORE MLOAD DUP5 DUP2 DUP2 PUSH2 0x3E2 ADD MSTORE DUP2 DUP2 PUSH2 0x1E38 ADD MSTORE DUP2 DUP2 PUSH2 0x2084 ADD MSTORE DUP2 DUP2 PUSH2 0x246A ADD MSTORE DUP2 DUP2 PUSH2 0x26CC ADD MSTORE DUP2 DUP2 PUSH2 0x27C3 ADD MSTORE DUP2 DUP2 PUSH2 0x2921 ADD MSTORE DUP2 DUP2 PUSH2 0x2D07 ADD MSTORE PUSH2 0x379D ADD MSTORE MLOAD DUP4 DUP2 DUP2 PUSH2 0x7DE ADD MSTORE DUP2 DUP2 PUSH2 0x1F38 ADD MSTORE DUP2 DUP2 PUSH2 0x278A ADD MSTORE DUP2 DUP2 PUSH2 0x2971 ADD MSTORE DUP2 DUP2 PUSH2 0x3483 ADD MSTORE DUP2 DUP2 PUSH2 0x36FE ADD MSTORE PUSH2 0x3820 ADD MSTORE MLOAD DUP3 DUP2 DUP2 PUSH2 0x106F ADD MSTORE DUP2 DUP2 PUSH2 0x1E61 ADD MSTORE DUP2 DUP2 PUSH2 0x20B5 ADD MSTORE DUP2 DUP2 PUSH2 0x26F6 ADD MSTORE DUP2 DUP2 PUSH2 0x2816 ADD MSTORE DUP2 DUP2 PUSH2 0x29A9 ADD MSTORE DUP2 DUP2 PUSH2 0x2D46 ADD MSTORE PUSH2 0x34C5 ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0x364 ADD MSTORE DUP2 DUP2 PUSH2 0x2494 ADD MSTORE DUP2 DUP2 PUSH2 0x27F4 ADD MSTORE DUP2 DUP2 PUSH2 0x2D77 ADD MSTORE DUP2 DUP2 PUSH2 0x304B ADD MSTORE PUSH2 0x37FE ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0x131 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT DUP4 AND SWAP2 PUSH0 DUP1 MSTORE DUP4 DUP9 PUSH0 KECCAK256 SWAP4 PUSH0 JUMPDEST DUP11 DUP9 DUP4 DUP4 LT PUSH2 0x5FA JUMPI POP POP POP LT PUSH2 0x5E2 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH2 0x142 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x5D5 JUMP JUMPDEST DUP7 DUP7 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP ADD PUSH2 0x5C3 JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP7 PUSH0 KECCAK256 PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD SWAP2 DUP9 DUP6 LT PUSH2 0x64D JUMPI JUMPDEST PUSH1 0x1F ADD PUSH1 0x5 SHR ADD SWAP1 DUP5 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x642 JUMPI POP POP PUSH2 0x116 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP5 SWAP1 PUSH2 0x634 JUMP JUMPDEST SWAP1 SWAP2 POP DUP2 SWAP1 PUSH2 0x629 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x105 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0x675 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x675 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH2 0x738 PUSH1 0x3A PUSH1 0x20 SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP2 DUP2 DUP1 DUP5 ADD SWAP8 PUSH32 0x62616C616E6365722D6C6162732E76332E73746F726167652E00000000000000 DUP10 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 ADD PUSH1 0x39 DUP7 ADD MCOPY DUP4 ADD SWAP1 PUSH1 0x17 PUSH1 0xF9 SHL PUSH1 0x39 DUP4 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 SWAP2 ADD DUP6 DUP4 ADD MCOPY ADD PUSH0 DUP4 DUP3 ADD MSTORE SUB PUSH1 0x1A DUP2 ADD DUP5 MSTORE ADD DUP3 PUSH2 0x6A8 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x769 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP3 MSTORE PUSH2 0x75E DUP3 PUSH2 0x68D JUMP JUMPDEST SWAP1 MLOAD SWAP1 KECCAK256 PUSH1 0xFF NOT AND SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x72 JUMPI JUMPDEST CALLDATASIZE ISZERO PUSH2 0x18 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x4A JUMPI STOP JUMPDEST PUSH32 0x540DDF600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8A465F6 EQ PUSH2 0x1092 JUMPI DUP1 PUSH4 0xF8FB1CC EQ PUSH2 0x1058 JUMPI DUP1 PUSH4 0x107C279F EQ PUSH2 0x1015 JUMPI DUP1 PUSH4 0x19C6989F EQ PUSH2 0x9C6 JUMPI DUP1 PUSH4 0x1BBF2E23 EQ PUSH2 0x983 JUMPI DUP1 PUSH4 0x286F580D EQ PUSH2 0x8EC JUMPI DUP1 PUSH4 0x2950286E EQ PUSH2 0x801 JUMPI DUP1 PUSH4 0x48BBD869 EQ PUSH2 0x7C7 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x68A JUMPI DUP1 PUSH4 0x5A3C3987 EQ PUSH2 0x661 JUMPI DUP1 PUSH4 0x5E01EB5A EQ PUSH2 0x61C JUMPI DUP1 PUSH4 0x8A12A08C EQ PUSH2 0x5C1 JUMPI DUP1 PUSH4 0x8C824CD9 EQ PUSH2 0x587 JUMPI DUP1 PUSH4 0x8EB1B65E EQ PUSH2 0x480 JUMPI DUP1 PUSH4 0x945ED33F EQ PUSH2 0x405 JUMPI DUP1 PUSH4 0x96123406 EQ PUSH2 0x3CB JUMPI DUP1 PUSH4 0xAC9650D8 EQ PUSH2 0x387 JUMPI DUP1 PUSH4 0xCD791CCC EQ PUSH2 0x34D JUMPI PUSH4 0xE3B5DFF4 SUB PUSH2 0xE JUMPI CALLVALUE PUSH2 0x349 JUMPI PUSH1 0x60 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x349 JUMPI PUSH2 0x17A SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x14B9 JUMP JUMPDEST PUSH2 0x182 PUSH2 0x1396 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP3 DUP4 GT PUSH2 0x349 JUMPI PUSH2 0x19D PUSH2 0x1A5 SWAP4 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x11C2 JUMP JUMPDEST SWAP4 SWAP1 SWAP2 PUSH2 0x2AAE JUMP JUMPDEST SWAP1 PUSH0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x1C9 JUMPI DUP1 PUSH0 DUP8 PUSH2 0x1C0 PUSH1 0x1 SWAP5 DUP9 PUSH2 0x1886 JUMP JUMPDEST MLOAD ADD MSTORE ADD PUSH2 0x1A8 JUMP JUMPDEST POP PUSH2 0x23D PUSH2 0x24B PUSH2 0x286 SWAP5 PUSH2 0x203 PUSH0 SWAP5 DUP9 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x1E7 DUP6 PUSH2 0x130F JUMP JUMPDEST ADDRESS DUP6 MSTORE PUSH1 0x20 DUP6 ADD MSTORE PUSH0 NOT PUSH1 0x40 DUP6 ADD MSTORE DUP7 PUSH1 0x60 DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x1576 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x8A12A08C00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x1633 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x1347 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP3 PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x11F0 JUMP JUMPDEST SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x33E JUMPI PUSH2 0x2F0 SWAP3 PUSH2 0x2DB SWAP2 PUSH0 SWAP2 PUSH2 0x31C JUMPI JUMPDEST POP PUSH1 0x20 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x17C9 JUMP JUMPDEST SWAP1 SWAP4 SWAP2 SWAP3 PUSH2 0x2F4 JUMPI JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x1124 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH0 PUSH32 0x0 TSTORE PUSH2 0x2E4 JUMP JUMPDEST PUSH2 0x338 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x330 DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1742 JUMP JUMPDEST DUP5 PUSH2 0x2CB JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x349 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x349 JUMPI PUSH2 0x3BF PUSH2 0x3B9 PUSH2 0x2F0 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1191 JUMP JUMPDEST SWAP1 PUSH2 0x1990 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x1215 JUMP JUMPDEST CALLVALUE PUSH2 0x349 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x349 JUMPI PUSH2 0x413 CALLDATASIZE PUSH2 0x10BF JUMP JUMPDEST PUSH2 0x41B PUSH2 0x1B3A JUMP JUMPDEST PUSH2 0x423 PUSH2 0x1B67 JUMP JUMPDEST PUSH2 0x451 PUSH2 0x2F0 PUSH2 0x432 DUP4 PUSH2 0x2AF0 JUMP JUMPDEST SWAP2 SWAP4 SWAP1 SWAP5 PUSH2 0x44B PUSH1 0x60 PUSH2 0x444 DUP4 PUSH2 0x1539 JUMP JUMPDEST SWAP3 ADD PUSH2 0x154D JUMP JUMPDEST SWAP1 PUSH2 0x291E JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x1124 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x349 JUMPI PUSH2 0x4AD SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x14B9 JUMP JUMPDEST SWAP1 PUSH2 0x4B6 PUSH2 0x13AC JUMP JUMPDEST SWAP1 PUSH1 0x64 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x349 JUMPI PUSH2 0x23D PUSH2 0x54C PUSH2 0x286 SWAP5 PUSH2 0x512 PUSH2 0x4DD PUSH0 SWAP6 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x11C2 JUMP JUMPDEST PUSH2 0x4E6 CALLER PUSH2 0x2AAE JUMP JUMPDEST SWAP8 PUSH1 0x40 MLOAD SWAP5 PUSH2 0x4F4 DUP7 PUSH2 0x130F JUMP JUMPDEST CALLER DUP7 MSTORE PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP7 ADD MSTORE ISZERO ISZERO PUSH1 0x60 DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x1576 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x945ED33F00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x18C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP3 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x11F0 JUMP JUMPDEST CALLVALUE PUSH2 0x349 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x349 JUMPI PUSH2 0x2F0 PUSH2 0x5EA PUSH2 0x5D5 CALLDATASIZE PUSH2 0x10BF JUMP JUMPDEST PUSH2 0x5DD PUSH2 0x1B3A JUMP JUMPDEST PUSH2 0x5E5 PUSH2 0x1B67 JUMP JUMPDEST PUSH2 0x1C30 JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SWAP5 SWAP3 SWAP5 TSTORE PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x1124 JUMP JUMPDEST CALLVALUE PUSH2 0x349 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH1 0x20 PUSH32 0x0 TLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x349 JUMPI PUSH2 0x2F0 PUSH2 0x5EA PUSH2 0x675 CALLDATASIZE PUSH2 0x10BF JUMP JUMPDEST PUSH2 0x67D PUSH2 0x1B3A JUMP JUMPDEST PUSH2 0x685 PUSH2 0x1B67 JUMP JUMPDEST PUSH2 0x2AF0 JUMP JUMPDEST CALLVALUE PUSH2 0x349 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH0 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0x7BD JUMPI JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP6 LT DUP5 EQ PUSH2 0x790 JUMPI DUP6 DUP8 SWAP5 DUP7 DUP7 MSTORE SWAP2 DUP3 PUSH0 EQ PUSH2 0x752 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x6F9 JUMPI JUMPDEST POP PUSH2 0x6E5 SWAP3 POP SUB DUP4 PUSH2 0x1347 JUMP JUMPDEST PUSH2 0x2F0 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x11F0 JUMP JUMPDEST PUSH0 DUP1 DUP1 MSTORE DUP6 SWAP3 POP SWAP1 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP6 DUP4 LT PUSH2 0x73A JUMPI POP POP PUSH2 0x6E5 SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x6D8 JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x723 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0x6E5 SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0x6D8 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0x6B4 JUMP JUMPDEST CALLVALUE PUSH2 0x349 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x349 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x349 JUMPI PUSH2 0x833 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x14B9 JUMP JUMPDEST SWAP1 PUSH2 0x83C PUSH2 0x1396 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x349 JUMPI PUSH2 0x857 PUSH2 0x85F SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x11C2 JUMP JUMPDEST SWAP3 SWAP1 SWAP2 PUSH2 0x2AAE JUMP JUMPDEST SWAP1 PUSH0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x894 JUMPI DUP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH2 0x88B PUSH1 0x1 SWAP5 DUP10 PUSH2 0x1886 JUMP JUMPDEST MLOAD ADD MSTORE ADD PUSH2 0x862 JUMP JUMPDEST POP PUSH2 0x23D PUSH2 0x24B DUP6 PUSH2 0x8B2 PUSH0 SWAP5 PUSH2 0x286 SWAP8 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x1E7 DUP6 PUSH2 0x130F JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x5A3C398700000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x18C7 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x349 JUMPI PUSH2 0x919 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x14B9 JUMP JUMPDEST SWAP1 PUSH2 0x922 PUSH2 0x13AC JUMP JUMPDEST SWAP1 PUSH1 0x64 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x349 JUMPI PUSH2 0x23D PUSH2 0x54C PUSH2 0x286 SWAP5 PUSH2 0x949 PUSH2 0x4DD PUSH0 SWAP6 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x11C2 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x8A465F600000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x1633 JUMP JUMPDEST CALLVALUE PUSH2 0x349 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD GT PUSH2 0x349 JUMPI CALLDATASIZE PUSH1 0x23 PUSH1 0x4 CALLDATALOAD ADD SLT ISZERO PUSH2 0x349 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD GT PUSH2 0x349 JUMPI CALLDATASIZE PUSH1 0x24 PUSH1 0xC0 PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD MUL PUSH1 0x4 CALLDATALOAD ADD ADD GT PUSH2 0x349 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x349 JUMPI PUSH2 0xA3C SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1191 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD GT PUSH2 0x349 JUMPI PUSH1 0x60 PUSH1 0x3 NOT PUSH1 0x44 CALLDATALOAD CALLDATASIZE SUB ADD SLT PUSH2 0x349 JUMPI PUSH1 0x64 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x349 JUMPI PUSH2 0xA7D SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x11C2 JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x349 JUMPI PUSH2 0xA9D SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1191 JUMP JUMPDEST SWAP5 SWAP1 SWAP4 PUSH2 0xAA8 PUSH2 0x1B3A JUMP JUMPDEST DUP1 PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD SUB PUSH2 0xFED JUMPI PUSH0 JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD DUP2 LT PUSH2 0xD4A JUMPI POP POP POP PUSH1 0x44 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD PUSH1 0x44 CALLDATALOAD CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x349 JUMPI DUP2 PUSH1 0x44 CALLDATALOAD ADD PUSH1 0x4 DUP2 ADD CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x349 JUMPI PUSH1 0x24 DUP3 PUSH1 0x7 SHL CALLDATASIZE SUB SWAP2 ADD SGT PUSH2 0x349 JUMPI PUSH2 0xB5B JUMPI JUMPDEST PUSH2 0x2F0 PUSH2 0x3BF DUP7 DUP7 PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH2 0x1990 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP3 SWAP5 PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x349 JUMPI PUSH1 0x40 MLOAD SWAP5 PUSH32 0x2A2D80D100000000000000000000000000000000000000000000000000000000 DUP7 MSTORE CALLER PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x60 PUSH1 0x24 DUP8 ADD MSTORE PUSH1 0xC4 DUP7 ADD SWAP3 PUSH1 0x44 CALLDATALOAD ADD PUSH1 0x24 DUP2 ADD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 DUP4 ADD CALLDATALOAD GT PUSH2 0x349 JUMPI PUSH1 0x4 DUP3 ADD CALLDATALOAD PUSH1 0x7 SHL CALLDATASIZE SUB DUP6 SGT PUSH2 0x349 JUMPI PUSH1 0x60 PUSH1 0x64 DUP10 ADD MSTORE PUSH1 0x4 DUP3 ADD CALLDATALOAD SWAP1 MSTORE SWAP2 SWAP3 DUP7 SWAP3 PUSH1 0xE4 DUP5 ADD SWAP3 SWAP2 SWAP1 PUSH0 SWAP1 JUMPDEST PUSH1 0x4 DUP2 ADD CALLDATALOAD DUP3 LT PUSH2 0xCCC JUMPI POP POP POP PUSH1 0x20 SWAP2 PUSH1 0x1F NOT PUSH1 0x1F DUP7 PUSH0 SWAP8 DUP8 SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xC40 PUSH1 0x24 PUSH1 0x44 CALLDATALOAD ADD PUSH2 0x1382 JUMP JUMPDEST AND PUSH1 0x84 DUP9 ADD MSTORE PUSH1 0x44 DUP1 CALLDATALOAD ADD CALLDATALOAD PUSH1 0xA4 DUP9 ADD MSTORE PUSH1 0x3 NOT DUP8 DUP8 SUB ADD PUSH1 0x44 DUP9 ADD MSTORE DUP2 DUP7 MSTORE DUP8 DUP7 ADD CALLDATACOPY DUP8 DUP7 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD SUB ADD DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x33E JUMPI PUSH2 0x2F0 SWAP4 PUSH2 0x3BF SWAP4 PUSH2 0xCBD JUMPI JUMPDEST DUP3 SWAP5 POP DUP2 SWAP4 POP PUSH2 0xB2B JUMP JUMPDEST PUSH2 0xCC6 SWAP1 PUSH2 0x12FB JUMP JUMPDEST DUP5 PUSH2 0xCB2 JUMP JUMPDEST SWAP2 SWAP6 SWAP5 POP SWAP2 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xCE3 DUP8 PUSH2 0x1382 JUMP JUMPDEST AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP8 ADD CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP1 SWAP4 SUB PUSH2 0x349 JUMPI PUSH1 0x4 SWAP3 PUSH1 0x1 SWAP3 DUP3 ADD MSTORE PUSH2 0xD13 PUSH1 0x40 DUP10 ADD PUSH2 0x2A9B JUMP JUMPDEST PUSH6 0xFFFFFFFFFFFF DUP1 SWAP2 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0xD2E PUSH1 0x60 DUP11 ADD PUSH2 0x2A9B JUMP JUMPDEST AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP1 SWAP2 ADD SWAP8 ADD SWAP4 ADD SWAP1 POP DUP9 SWAP5 SWAP6 SWAP4 SWAP3 SWAP2 PUSH2 0xC0F JUMP JUMPDEST PUSH2 0xD5F PUSH2 0xD58 DUP3 DUP5 DUP7 PUSH2 0x1B1F JUMP JUMPDEST CALLDATASIZE SWAP2 PUSH2 0x1576 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD6B DUP2 PUSH2 0x1296 JUMP JUMPDEST PUSH0 DUP2 MSTORE PUSH1 0x20 SWAP2 PUSH0 DUP4 DUP4 ADD MSTORE PUSH0 PUSH1 0x40 DUP4 ADD MSTORE DUP3 DUP2 ADD MLOAD SWAP1 PUSH1 0x60 PUSH1 0x40 DUP3 ADD MLOAD SWAP2 ADD MLOAD PUSH0 BYTE SWAP2 DUP4 MSTORE DUP4 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xC0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP2 DUP6 MUL PUSH1 0x4 CALLDATALOAD ADD CALLDATASIZE SUB ADD SLT PUSH2 0x349 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0xDD8 DUP3 PUSH2 0x12DF JUMP JUMPDEST PUSH2 0xDEB PUSH1 0x24 PUSH1 0xC0 DUP7 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x1382 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH2 0xE01 PUSH1 0x44 PUSH1 0xC0 DUP8 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x1382 JUMP JUMPDEST SWAP1 DUP2 DUP6 DUP6 ADD MSTORE PUSH2 0xE1A PUSH1 0x64 PUSH1 0xC0 DUP9 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x1382 JUMP JUMPDEST PUSH1 0x40 DUP6 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x4 CALLDATALOAD PUSH1 0xC0 DUP9 MUL ADD PUSH1 0x84 DUP2 ADD CALLDATALOAD PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0xA4 DUP2 ADD CALLDATALOAD PUSH1 0x80 DUP8 ADD MSTORE PUSH1 0xC4 ADD CALLDATALOAD PUSH1 0xA0 DUP7 ADD MSTORE DUP4 ADD MLOAD DUP4 MLOAD SWAP4 DUP7 ADD MLOAD PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EXTCODESIZE ISZERO PUSH2 0x349 JUMPI PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 PUSH1 0xE4 SWAP5 DUP12 SWAP9 DUP5 SWAP9 PUSH1 0xC4 PUSH1 0xC0 PUSH1 0x40 MLOAD SWAP13 DUP14 SWAP12 DUP13 SWAP11 PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP13 MSTORE AND PUSH1 0x4 DUP12 ADD MSTORE ADDRESS PUSH1 0x24 DUP12 ADD MSTORE PUSH1 0x84 DUP3 DUP3 MUL PUSH1 0x4 CALLDATALOAD ADD ADD CALLDATALOAD PUSH1 0x44 DUP12 ADD MSTORE MUL PUSH1 0x4 CALLDATALOAD ADD ADD CALLDATALOAD PUSH1 0x64 DUP9 ADD MSTORE PUSH1 0x84 DUP8 ADD MSTORE PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xC4 DUP6 ADD MSTORE AND GAS CALL SWAP1 DUP2 PUSH2 0xFDE JUMPI JUMPDEST POP PUSH2 0xFD4 JUMPI PUSH2 0xEF7 PUSH2 0x2A6C JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 MLOAD AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP4 ADD MLOAD AND PUSH1 0x44 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x33E JUMPI PUSH0 SWAP3 PUSH2 0xFA4 JUMPI JUMPDEST POP PUSH1 0x60 ADD MLOAD SUB PUSH2 0xF6F JUMPI POP POP PUSH1 0x1 SWAP1 JUMPDEST ADD PUSH2 0xAB7 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0xF7C JUMPI DUP1 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP DUP4 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0xFCD JUMPI JUMPDEST PUSH2 0xFBC DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x349 JUMPI MLOAD SWAP1 PUSH1 0x60 PUSH2 0xF59 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xFB2 JUMP JUMPDEST POP POP PUSH1 0x1 SWAP1 PUSH2 0xF69 JUMP JUMPDEST PUSH2 0xFE7 SWAP1 PUSH2 0x12FB JUMP JUMPDEST DUP11 PUSH2 0xEEA JUMP JUMPDEST PUSH32 0xAAAD13F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x349 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x349 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x349 JUMPI PUSH2 0x10A0 CALLDATASIZE PUSH2 0x10BF JUMP JUMPDEST PUSH2 0x10A8 PUSH2 0x1B3A JUMP JUMPDEST PUSH2 0x10B0 PUSH2 0x1B67 JUMP JUMPDEST PUSH2 0x451 PUSH2 0x2F0 PUSH2 0x432 DUP4 PUSH2 0x1C30 JUMP JUMPDEST PUSH1 0x3 NOT SWAP1 PUSH1 0x20 DUP3 DUP3 ADD SLT PUSH2 0x349 JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x349 JUMPI DUP3 PUSH1 0xA0 SWAP3 SUB ADD SLT PUSH2 0x349 JUMPI PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1110 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1102 JUMP JUMPDEST SWAP4 SWAP3 SWAP1 PUSH2 0x1139 SWAP1 PUSH1 0x60 DUP7 MSTORE PUSH1 0x60 DUP7 ADD SWAP1 PUSH2 0x10F1 JUMP JUMPDEST SWAP4 PUSH1 0x20 SWAP5 DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP1 DUP6 MLOAD SWAP3 DUP4 DUP2 MSTORE ADD SWAP5 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x1174 JUMPI POP POP POP PUSH2 0x1171 SWAP4 SWAP5 POP PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x10F1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 MSTORE SWAP5 DUP8 ADD SWAP5 SWAP2 DUP8 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1154 JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x349 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x349 JUMPI PUSH1 0x20 DUP1 DUP6 ADD SWAP5 DUP5 PUSH1 0x5 SHL ADD ADD GT PUSH2 0x349 JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x349 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x349 JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x349 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD SWAP1 PUSH1 0x20 DUP4 MSTORE DUP4 MLOAD DUP1 SWAP3 MSTORE PUSH1 0x40 DUP4 ADD SWAP3 PUSH1 0x20 PUSH1 0x40 DUP5 PUSH1 0x5 SHL DUP4 ADD ADD SWAP6 ADD SWAP4 PUSH0 SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x124A JUMPI POP POP POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 DUP5 DUP1 PUSH2 0x1286 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP7 PUSH1 0x1 SWAP7 SUB ADD DUP8 MSTORE DUP11 MLOAD PUSH2 0x11F0 JUMP JUMPDEST SWAP9 ADD SWAP4 ADD SWAP4 ADD SWAP2 SWAP5 SWAP4 SWAP3 SWAP1 PUSH2 0x123A JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x12B2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0xC0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x12B2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x12B2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x12B2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x12B2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x12B2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x12B2 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x349 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x349 JUMPI JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x349 JUMPI JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x80 DUP2 DUP5 SUB SLT PUSH2 0x349 JUMPI PUSH1 0x40 SWAP1 DUP2 MLOAD SWAP2 PUSH1 0x80 DUP4 ADD SWAP5 PUSH8 0xFFFFFFFFFFFFFFFF SWAP6 DUP5 DUP2 LT DUP8 DUP3 GT OR PUSH2 0x12B2 JUMPI DUP3 MSTORE DUP4 SWAP6 PUSH2 0x13F5 DUP5 PUSH2 0x1382 JUMP JUMPDEST DUP6 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP6 ADD CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x349 JUMPI DUP5 ADD DUP3 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x349 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH2 0x141E DUP3 PUSH2 0x136A JUMP JUMPDEST SWAP4 PUSH2 0x142B DUP7 MLOAD SWAP6 DUP7 PUSH2 0x1347 JUMP JUMPDEST DUP3 DUP6 MSTORE DUP4 DUP6 ADD SWAP1 DUP5 PUSH1 0x60 DUP1 SWAP6 MUL DUP5 ADD ADD SWAP3 DUP2 DUP5 GT PUSH2 0x349 JUMPI DUP6 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x1469 JUMPI POP POP POP POP POP DUP5 ADD MSTORE DUP2 DUP2 ADD CALLDATALOAD SWAP1 DUP4 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 ADD CALLDATALOAD SWAP2 ADD MSTORE JUMP JUMPDEST DUP5 DUP4 DUP4 SUB SLT PUSH2 0x349 JUMPI DUP8 MLOAD SWAP1 PUSH2 0x147E DUP3 PUSH2 0x1296 JUMP JUMPDEST PUSH2 0x1487 DUP5 PUSH2 0x1382 JUMP JUMPDEST DUP3 MSTORE PUSH2 0x1494 DUP8 DUP6 ADD PUSH2 0x1382 JUMP JUMPDEST DUP8 DUP4 ADD MSTORE DUP9 DUP5 ADD CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x349 JUMPI DUP3 DUP9 SWAP3 DUP12 DUP10 SWAP6 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x1447 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x349 JUMPI DUP1 CALLDATALOAD SWAP2 PUSH1 0x20 SWAP2 PUSH2 0x14D3 DUP5 PUSH2 0x136A JUMP JUMPDEST SWAP4 PUSH2 0x14E1 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1347 JUMP JUMPDEST DUP1 DUP6 MSTORE DUP4 DUP1 DUP7 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP3 DUP1 DUP5 GT PUSH2 0x349 JUMPI DUP5 DUP4 ADD SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x150C JUMPI POP POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x349 JUMPI DUP7 SWAP2 PUSH2 0x152E DUP5 DUP5 DUP1 SWAP5 DUP10 ADD ADD PUSH2 0x13BB JUMP JUMPDEST DUP2 MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x14FC JUMP JUMPDEST CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x349 JUMPI SWAP1 JUMP JUMPDEST CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x349 JUMPI SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x12B2 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH2 0x1582 DUP3 PUSH2 0x155A JUMP JUMPDEST SWAP2 PUSH2 0x1590 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x1347 JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0x349 JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x80 DUP2 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP4 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 ADD MLOAD SWAP5 PUSH1 0x80 DUP2 DUP7 ADD MSTORE DUP6 MLOAD DUP1 SWAP3 MSTORE DUP1 PUSH1 0xA0 DUP7 ADD SWAP7 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x1600 JUMPI POP POP POP POP POP PUSH1 0x60 DUP2 PUSH1 0x40 DUP3 SWAP4 ADD MLOAD PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST DUP5 MLOAD DUP1 MLOAD DUP3 AND DUP10 MSTORE DUP1 DUP5 ADD MLOAD DUP3 AND DUP10 DUP6 ADD MSTORE PUSH1 0x40 SWAP1 DUP2 ADD MLOAD ISZERO ISZERO SWAP1 DUP10 ADD MSTORE PUSH1 0x60 SWAP1 SWAP8 ADD SWAP7 SWAP4 DUP3 ADD SWAP4 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x15DE JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x20 SWAP1 DUP2 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 MLOAD AND DUP2 DUP4 ADD MSTORE DUP1 DUP6 ADD MLOAD SWAP3 PUSH1 0xA0 PUSH1 0x40 DUP5 ADD MSTORE DUP4 MLOAD DUP1 SWAP2 MSTORE PUSH1 0xE0 DUP4 ADD SWAP2 DUP1 PUSH1 0xE0 DUP4 PUSH1 0x5 SHL DUP7 ADD ADD SWAP6 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x16B2 JUMPI POP POP POP POP POP PUSH1 0x80 DUP5 PUSH1 0x40 PUSH2 0x1171 SWAP6 SWAP7 ADD MLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD ISZERO ISZERO DUP3 DUP5 ADD MSTORE ADD MLOAD SWAP1 PUSH1 0xA0 PUSH1 0x1F NOT DUP3 DUP6 SUB ADD SWAP2 ADD MSTORE PUSH2 0x11F0 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP6 DUP4 DUP1 PUSH2 0x16ED DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 DUP11 PUSH1 0x1 SWAP7 SUB ADD DUP7 MSTORE DUP11 MLOAD PUSH2 0x15AC JUMP JUMPDEST SWAP9 ADD SWAP3 ADD SWAP3 ADD SWAP1 SWAP4 SWAP3 SWAP2 PUSH2 0x1676 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x349 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x1713 DUP3 PUSH2 0x155A JUMP JUMPDEST SWAP3 PUSH2 0x1721 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1347 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x349 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x349 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x349 JUMPI PUSH2 0x1171 SWAP3 ADD PUSH2 0x16FC JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x349 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x1783 DUP2 PUSH2 0x136A JUMP JUMPDEST SWAP4 PUSH2 0x1791 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1347 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x349 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x17BA JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x17AC JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x60 DUP3 DUP5 SUB SLT PUSH2 0x349 JUMPI DUP2 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x349 JUMPI DUP5 PUSH2 0x17F5 SWAP2 DUP4 ADD PUSH2 0x1768 JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP1 DUP4 ADD MLOAD DUP6 DUP2 GT PUSH2 0x349 JUMPI DUP4 ADD SWAP1 DUP3 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x349 JUMPI DUP2 MLOAD SWAP2 PUSH2 0x181D DUP4 PUSH2 0x136A JUMP JUMPDEST SWAP3 PUSH2 0x182B PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1347 JUMP JUMPDEST DUP1 DUP5 MSTORE DUP3 DUP1 DUP6 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 DUP6 DUP4 GT PUSH2 0x349 JUMPI DUP4 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1867 JUMPI POP POP POP POP SWAP4 PUSH1 0x40 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x349 JUMPI PUSH2 0x1171 SWAP3 ADD PUSH2 0x1768 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x349 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1845 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x189A JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x20 SWAP1 DUP2 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 MLOAD AND DUP2 DUP4 ADD MSTORE DUP1 DUP6 ADD MLOAD SWAP3 PUSH1 0xA0 PUSH1 0x40 DUP5 ADD MSTORE DUP4 MLOAD DUP1 SWAP2 MSTORE PUSH1 0xE0 DUP4 ADD SWAP2 DUP1 PUSH1 0xE0 DUP4 PUSH1 0x5 SHL DUP7 ADD ADD SWAP6 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x1946 JUMPI POP POP POP POP POP PUSH1 0x80 DUP5 PUSH1 0x40 PUSH2 0x1171 SWAP6 SWAP7 ADD MLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD ISZERO ISZERO DUP3 DUP5 ADD MSTORE ADD MLOAD SWAP1 PUSH1 0xA0 PUSH1 0x1F NOT DUP3 DUP6 SUB ADD SWAP2 ADD MSTORE PUSH2 0x11F0 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP6 DUP4 DUP1 PUSH2 0x1981 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 DUP11 PUSH1 0x1 SWAP7 SUB ADD DUP7 MSTORE DUP11 MLOAD PUSH2 0x15AC JUMP JUMPDEST SWAP9 ADD SWAP3 ADD SWAP3 ADD SWAP1 SWAP4 SWAP3 SWAP2 PUSH2 0x190A JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x199B CALLER PUSH2 0x2AAE JUMP JUMPDEST SWAP1 PUSH32 0x0 SWAP4 DUP5 TLOAD PUSH2 0x1AA6 JUMPI PUSH1 0x1 SWAP1 PUSH1 0x1 DUP7 TSTORE PUSH2 0x19D4 DUP4 PUSH2 0x136A JUMP JUMPDEST SWAP3 PUSH2 0x19E2 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1347 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x1F NOT PUSH2 0x19F1 DUP3 PUSH2 0x136A JUMP JUMPDEST ADD PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x1A95 JUMPI POP POP PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x1A4C JUMPI POP POP POP POP SWAP1 PUSH0 PUSH2 0x1A41 SWAP3 SWAP5 TSTORE PUSH32 0x0 DUP1 TLOAD SWAP2 PUSH2 0x1A43 JUMPI JUMPDEST POP PUSH2 0x38A6 JUMP JUMPDEST JUMP JUMPDEST PUSH0 SWAP1 TSTORE PUSH0 PUSH2 0x1A3B JUMP JUMPDEST DUP1 PUSH2 0x1A79 PUSH0 DUP1 PUSH2 0x1A61 PUSH2 0xD58 DUP10 SWAP7 DUP9 DUP11 PUSH2 0x1B1F JUMP JUMPDEST PUSH1 0x20 DUP2 MLOAD SWAP2 ADD ADDRESS GAS DELEGATECALL PUSH2 0x1A72 PUSH2 0x2A6C JUMP JUMPDEST SWAP1 ADDRESS PUSH2 0x4347 JUMP JUMPDEST PUSH2 0x1A83 DUP3 DUP9 PUSH2 0x1886 JUMP JUMPDEST MSTORE PUSH2 0x1A8E DUP2 DUP8 PUSH2 0x1886 JUMP JUMPDEST POP ADD PUSH2 0x19FF JUMP JUMPDEST DUP1 PUSH1 0x60 PUSH1 0x20 DUP1 SWAP4 DUP10 ADD ADD MSTORE ADD PUSH2 0x19F4 JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP2 CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x349 JUMPI ADD DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x349 JUMPI PUSH1 0x20 ADD SWAP2 DUP2 CALLDATASIZE SUB DUP4 SGT PUSH2 0x349 JUMPI JUMP JUMPDEST SWAP1 DUP3 LT ISZERO PUSH2 0x189A JUMPI PUSH2 0x1B36 SWAP2 PUSH1 0x5 SHL DUP2 ADD SWAP1 PUSH2 0x1ACE JUMP JUMPDEST SWAP1 SWAP2 JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x1AA6 JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x1B99 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x1BCF DUP3 PUSH2 0x136A JUMP JUMPDEST PUSH2 0x1BDC PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x1347 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x1BEC DUP3 SWAP5 PUSH2 0x136A JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x1C03 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD CALLDATALOAD TIMESTAMP GT PUSH2 0x28B8 JUMPI SWAP1 PUSH2 0x1C53 PUSH2 0x1C4C PUSH1 0x20 DUP5 ADD DUP5 PUSH2 0x38E9 JUMP JUMPDEST SWAP1 POP PUSH2 0x1BC5 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST PUSH2 0x1C63 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x38E9 JUMP JUMPDEST SWAP1 POP DUP2 LT ISZERO PUSH2 0x27BC JUMPI PUSH2 0x1C8D DUP2 PUSH2 0x1C88 PUSH2 0x1C80 PUSH1 0x20 DUP7 ADD DUP7 PUSH2 0x38E9 JUMP JUMPDEST CALLDATASIZE SWAP4 SWAP2 PUSH2 0x393D JUMP JUMPDEST PUSH2 0x13BB JUMP JUMPDEST SWAP4 PUSH1 0x40 DUP6 ADD MLOAD SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 MLOAD AND SWAP1 PUSH1 0x20 DUP8 ADD MLOAD DUP1 MLOAD ISZERO PUSH2 0x189A JUMPI PUSH1 0x20 ADD MLOAD PUSH1 0x40 ADD MLOAD ISZERO ISZERO DUP1 PUSH2 0x27B3 JUMPI JUMPDEST ISZERO PUSH2 0x2758 JUMPI PUSH2 0x1CE1 PUSH2 0x1CCD DUP7 PUSH2 0x1539 JUMP JUMPDEST DUP8 DUP5 PUSH2 0x1CDB PUSH1 0x60 DUP11 ADD PUSH2 0x154D JUMP JUMPDEST SWAP3 PUSH2 0x3CD2 JUMP JUMPDEST PUSH0 JUMPDEST PUSH1 0x20 DUP9 ADD MLOAD MLOAD DUP2 LT ISZERO PUSH2 0x2748 JUMPI PUSH2 0x1CF8 PUSH2 0x397D JUMP JUMPDEST PUSH1 0x20 DUP10 ADD MLOAD MLOAD PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x1C03 JUMPI DUP3 EQ DUP1 PUSH1 0x20 DUP4 ADD MSTORE DUP3 ISZERO DUP3 MSTORE PUSH0 EQ PUSH2 0x2741 JUMPI PUSH1 0x60 DUP10 ADD MLOAD SWAP1 JUMPDEST PUSH2 0x1D30 DUP4 PUSH1 0x20 DUP13 ADD MLOAD PUSH2 0x1886 JUMP JUMPDEST MLOAD PUSH1 0x40 DUP2 ADD MLOAD SWAP1 SWAP2 SWAP1 ISZERO PUSH2 0x1EE3 JUMPI PUSH2 0x1DC8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 MLOAD AND SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP6 EQ PUSH0 EQ PUSH2 0x1EDC JUMPI PUSH1 0x1 SWAP5 JUMPDEST PUSH1 0x40 MLOAD SWAP6 PUSH2 0x1D70 DUP8 PUSH2 0x130F JUMP JUMPDEST PUSH0 DUP8 MSTORE PUSH2 0x1D7C DUP2 PUSH2 0x39B3 JUMP JUMPDEST PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x60 SWAP5 DUP6 SWAP2 DUP14 DUP4 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x43583BE500000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x3C17 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x33E JUMPI PUSH0 SWAP5 PUSH2 0x1EA5 JUMPI JUMPDEST POP POP PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x1E8B JUMPI DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH2 0x1E85 SWAP4 PUSH1 0x1 SWAP7 SWAP6 PUSH2 0x1E2D DUP13 DUP13 PUSH2 0x1886 JUMP JUMPDEST MSTORE ADD PUSH2 0x1E5C DUP3 DUP3 MLOAD AND PUSH32 0x0 PUSH2 0x43AB JUMP JUMPDEST POP MLOAD AND PUSH32 0x0 PUSH2 0x43F5 JUMP JUMPDEST ADD PUSH2 0x1CE3 JUMP JUMPDEST PUSH1 0x20 ADD MLOAD SWAP1 SWAP8 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 POP PUSH1 0x1 SWAP1 PUSH2 0x1E85 JUMP JUMPDEST PUSH1 0x20 SWAP3 SWAP5 POP SWAP1 DUP2 PUSH2 0x1ECA SWAP3 SWAP1 RETURNDATASIZE LT PUSH2 0x1ED5 JUMPI JUMPDEST PUSH2 0x1EC2 DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x39EA JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP1 PUSH0 PUSH2 0x1E05 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1EB8 JUMP JUMPDEST PUSH0 SWAP5 PUSH2 0x1D63 JUMP JUMPDEST DUP9 DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 SWAP6 SWAP5 MLOAD AND DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND EQ PUSH0 EQ PUSH2 0x2327 JUMPI POP POP DUP2 MLOAD ISZERO SWAP1 POP PUSH2 0x2263 JUMPI DUP9 DUP11 DUP1 ISZERO ISZERO DUP1 PUSH2 0x2248 JUMPI JUMPDEST PUSH2 0x2142 JUMPI JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP3 SWAP2 PUSH2 0x1FD2 DUP3 PUSH2 0x200A SWAP8 DUP12 PUSH0 SWAP6 DUP10 PUSH32 0x0 SWAP3 AND DUP1 DUP9 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP9 KECCAK256 TLOAD PUSH2 0x2131 JUMPI JUMPDEST POP POP POP JUMPDEST PUSH1 0x1 PUSH2 0x1F91 DUP10 DUP4 MLOAD AND PUSH1 0x20 DUP5 ADD SWAP10 DUP12 DUP12 MLOAD AND SWAP1 DUP1 ISZERO DUP11 EQ PUSH2 0x212B JUMPI POP DUP4 SWAP2 PUSH2 0x440E JUMP JUMPDEST SWAP10 SWAP1 SWAP3 MLOAD AND SWAP5 PUSH2 0x1FA6 PUSH1 0x80 SWAP2 DUP3 DUP2 ADD SWAP1 PUSH2 0x1ACE JUMP JUMPDEST SWAP4 SWAP1 SWAP5 PUSH1 0x40 MLOAD SWAP8 PUSH2 0x1FB6 DUP10 PUSH2 0x12DF JUMP JUMPDEST DUP9 MSTORE ADDRESS PUSH1 0x20 DUP10 ADD MSTORE PUSH1 0x40 DUP9 ADD MSTORE PUSH1 0x60 DUP8 ADD MSTORE DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x1576 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP7 DUP2 SWAP3 PUSH32 0x2145789700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x3BA6 JUMP JUMPDEST SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x33E JUMPI PUSH0 SWAP5 PUSH2 0x2101 JUMPI JUMPDEST POP PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x20DE JUMPI SWAP2 PUSH2 0x20B1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x1 SWAP7 SWAP6 PUSH2 0x206F PUSH2 0x20D9 SWAP7 DUP7 PUSH2 0x1886 JUMP JUMPDEST MLOAD PUSH2 0x207A DUP14 DUP14 PUSH2 0x1886 JUMP JUMPDEST MSTORE PUSH2 0x20A8 DUP3 DUP3 MLOAD AND PUSH32 0x0 PUSH2 0x43AB JUMP JUMPDEST POP MLOAD AND SWAP3 PUSH2 0x1886 JUMP JUMPDEST MLOAD SWAP1 PUSH32 0x0 PUSH2 0x43F5 JUMP JUMPDEST PUSH2 0x1E85 JUMP JUMPDEST SWAP9 POP PUSH1 0x1 SWAP3 SWAP5 POP PUSH2 0x20F7 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH2 0x1886 JUMP JUMPDEST MLOAD SWAP8 MLOAD AND SWAP3 PUSH2 0x1E85 JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP5 POP PUSH2 0x2121 SWAP1 RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2119 DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3B5E JUMP JUMPDEST POP SWAP5 SWAP2 SWAP1 POP PUSH2 0x2047 JUMP JUMPDEST SWAP2 PUSH2 0x440E JUMP JUMPDEST PUSH2 0x213A SWAP3 PUSH2 0x452C JUMP JUMPDEST PUSH0 DUP3 DUP2 PUSH2 0x1F6A JUMP JUMPDEST POP PUSH2 0x214F SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x1539 JUMP JUMPDEST SWAP2 PUSH2 0x2159 DUP12 PUSH2 0x44E8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x349 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP1 DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE SWAP3 DUP8 AND PUSH1 0x64 DUP5 ADD MSTORE PUSH0 DUP4 DUP1 PUSH1 0x84 DUP2 ADD SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x33E JUMPI DUP11 PUSH2 0x1FD2 DUP14 PUSH2 0x200A SWAP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP8 PUSH0 SWAP6 PUSH2 0x2239 JUMPI JUMPDEST POP SWAP8 POP SWAP3 POP POP SWAP2 SWAP3 SWAP4 POP PUSH2 0x1F1F JUMP JUMPDEST PUSH2 0x2242 SWAP1 PUSH2 0x12FB JUMP JUMPDEST PUSH0 PUSH2 0x222A JUMP JUMPDEST POP PUSH2 0x2252 DUP3 PUSH2 0x1539 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ ISZERO PUSH2 0x1F1A JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 MLOAD AND SWAP3 DUP1 EXTCODESIZE ISZERO PUSH2 0x349 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP1 SWAP5 AND PUSH1 0x4 DUP6 ADD MSTORE ADDRESS PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD DUP13 SWAP1 MSTORE PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x64 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL DUP1 ISZERO PUSH2 0x33E JUMPI DUP11 PUSH2 0x1FD2 DUP14 PUSH2 0x200A SWAP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP8 PUSH0 SWAP6 PUSH2 0x2318 JUMPI JUMPDEST POP PUSH2 0x1F6E JUMP JUMPDEST PUSH2 0x2321 SWAP1 PUSH2 0x12FB JUMP JUMPDEST PUSH0 PUSH2 0x2312 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP8 SWAP7 SWAP5 SWAP8 ADD MLOAD AND SWAP1 DUP10 DUP2 DUP4 EQ PUSH0 EQ PUSH2 0x25CC JUMPI PUSH2 0x23C2 SWAP3 POP PUSH2 0x23FA SWAP8 SWAP2 POP PUSH1 0x1 PUSH2 0x2368 PUSH0 SWAP7 SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 DUP12 MLOAD AND PUSH2 0x440E JUMP JUMPDEST POP SWAP3 DUP3 DUP10 MLOAD AND SWAP6 PUSH1 0x20 DUP10 ADD MLOAD ISZERO ISZERO DUP9 EQ PUSH2 0x25A3 JUMPI PUSH2 0x2385 DUP3 PUSH2 0x1539 JUMP JUMPDEST SWAP5 JUMPDEST PUSH2 0x2396 PUSH1 0x80 SWAP4 DUP5 DUP2 ADD SWAP1 PUSH2 0x1ACE JUMP JUMPDEST SWAP6 SWAP1 SWAP7 PUSH1 0x40 MLOAD SWAP10 PUSH2 0x23A6 DUP12 PUSH2 0x12DF JUMP JUMPDEST DUP11 MSTORE AND PUSH1 0x20 DUP10 ADD MSTORE PUSH1 0x40 DUP9 ADD MSTORE PUSH1 0x60 DUP8 ADD MSTORE DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x1576 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP3 PUSH32 0x4AF29EC400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x3AED JUMP JUMPDEST SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x33E JUMPI PUSH0 SWAP4 PUSH2 0x2579 JUMPI JUMPDEST POP PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x24B8 JUMPI DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH2 0x20D9 SWAP4 PUSH1 0x1 SWAP7 SWAP6 PUSH2 0x245E DUP13 DUP13 PUSH2 0x1886 JUMP JUMPDEST MSTORE PUSH2 0x248E DUP4 DUP4 DUP4 ADD MLOAD AND PUSH32 0x0 PUSH2 0x43AB JUMP JUMPDEST POP ADD MLOAD AND PUSH32 0x0 PUSH2 0x43F5 JUMP JUMPDEST PUSH1 0x20 DUP2 DUP2 ADD MLOAD SWAP2 MLOAD PUSH1 0x40 MLOAD PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP6 SWAP1 MSTORE SWAP4 SWAP11 POP SWAP1 SWAP2 AND SWAP5 POP DUP2 DUP1 PUSH1 0x44 DUP2 ADD SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x33E JUMPI PUSH2 0x254E JUMPI JUMPDEST POP PUSH1 0x1 SWAP1 PUSH2 0x1E85 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2572 JUMPI JUMPDEST PUSH2 0x2564 DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x349 JUMPI PUSH0 PUSH2 0x2545 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x255A JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP4 POP PUSH2 0x2599 SWAP1 RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2591 DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3A71 JUMP JUMPDEST POP SWAP4 SWAP2 SWAP1 POP PUSH2 0x2437 JUMP JUMPDEST DUP4 PUSH32 0x0 AND SWAP5 PUSH2 0x2387 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x265B SWAP6 PUSH2 0x2623 SWAP4 SWAP5 SWAP6 PUSH2 0x25ED PUSH1 0x80 SWAP12 DUP13 DUP2 ADD SWAP1 PUSH2 0x1ACE JUMP JUMPDEST SWAP4 SWAP1 SWAP5 PUSH1 0x40 MLOAD SWAP8 PUSH2 0x25FD DUP10 PUSH2 0x132B JUMP JUMPDEST PUSH0 DUP10 MSTORE PUSH1 0x20 DUP10 ADD MSTORE AND PUSH1 0x40 DUP8 ADD MSTORE PUSH1 0x60 SWAP11 DUP12 SWAP8 DUP9 DUP9 ADD MSTORE DUP7 ADD MSTORE PUSH1 0xA0 DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x1576 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x2BFB780C00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x3A05 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x33E JUMPI PUSH0 SWAP5 PUSH2 0x271A JUMPI JUMPDEST POP POP PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x1E8B JUMPI DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH2 0x20D9 SWAP4 PUSH1 0x1 SWAP7 SWAP6 PUSH2 0x26C0 DUP13 DUP13 PUSH2 0x1886 JUMP JUMPDEST MSTORE PUSH2 0x26F0 DUP4 DUP4 DUP4 ADD MLOAD AND PUSH32 0x0 PUSH2 0x43AB JUMP JUMPDEST POP ADD MLOAD AND PUSH32 0x0 PUSH2 0x43F5 JUMP JUMPDEST PUSH1 0x20 SWAP3 SWAP5 POP SWAP1 DUP2 PUSH2 0x2736 SWAP3 SWAP1 RETURNDATASIZE LT PUSH2 0x1ED5 JUMPI PUSH2 0x1EC2 DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP1 PUSH0 PUSH2 0x2698 JUMP JUMPDEST PUSH0 SWAP1 PUSH2 0x1D22 JUMP JUMPDEST POP SWAP2 SWAP6 POP SWAP1 SWAP4 POP POP PUSH1 0x1 ADD PUSH2 0x1C56 JUMP JUMPDEST PUSH2 0x2782 DUP3 PUSH32 0x0 PUSH2 0x43AB JUMP JUMPDEST POP PUSH2 0x27AE DUP7 DUP4 PUSH32 0x0 PUSH2 0x43F5 JUMP JUMPDEST PUSH2 0x1CE1 JUMP JUMPDEST POP ORIGIN ISZERO ISZERO PUSH2 0x1CBC JUMP JUMPDEST POP POP PUSH2 0x27E7 PUSH32 0x0 PUSH2 0x3C66 JUMP JUMPDEST SWAP2 PUSH2 0x27F2 DUP4 MLOAD PUSH2 0x1BC5 JUMP JUMPDEST PUSH32 0x0 SWAP2 PUSH32 0x0 SWAP2 SWAP1 PUSH0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x28AF JUMPI PUSH1 0x1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x2858 DUP4 DUP12 PUSH2 0x1886 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP6 PUSH1 0x20 MSTORE PUSH2 0x2886 PUSH1 0x40 PUSH0 KECCAK256 TLOAD DUP3 PUSH2 0x2873 DUP6 DUP14 PUSH2 0x1886 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP9 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP1 PUSH2 0x1BF6 JUMP JUMPDEST PUSH2 0x2890 DUP4 DUP8 PUSH2 0x1886 JUMP JUMPDEST MSTORE PUSH2 0x289B DUP3 DUP11 PUSH2 0x1886 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP6 PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 TSTORE ADD PUSH2 0x2839 JUMP JUMPDEST POP SWAP5 SWAP4 SWAP2 POP SWAP2 POP JUMP JUMPDEST PUSH32 0xE08B8AF000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH0 NOT DUP3 ADD SWAP2 DUP3 SGT PUSH1 0x1 AND PUSH2 0x1C03 JUMPI JUMP JUMPDEST PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x1C03 JUMPI PUSH0 NOT ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0x0 SWAP1 DUP2 TLOAD PUSH32 0x0 PUSH2 0x296E DUP2 TLOAD PUSH2 0x28E0 JUMP JUMPDEST SWAP1 PUSH32 0x0 SWAP2 JUMPDEST PUSH0 DUP2 SLT ISZERO PUSH2 0x2A2F JUMPI POP POP POP PUSH2 0x29A6 SWAP1 PUSH2 0x28E0 JUMP JUMPDEST SWAP2 PUSH32 0x0 SWAP3 JUMPDEST PUSH0 DUP2 SLT ISZERO PUSH2 0x29DF JUMPI POP POP POP POP PUSH2 0x1A41 SWAP1 PUSH2 0x38A6 JUMP JUMPDEST PUSH2 0x2A2A SWAP1 DUP3 PUSH0 MSTORE PUSH2 0x2A24 PUSH1 0x20 PUSH0 DUP4 DUP3 DUP3 KECCAK256 ADD TLOAD SWAP2 DUP3 DUP3 MSTORE DUP9 DUP2 MSTORE DUP9 PUSH1 0x40 SWAP2 PUSH2 0x2A17 DUP11 DUP14 DUP6 DUP8 KECCAK256 TLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP1 PUSH2 0x40A5 JUMP JUMPDEST DUP5 DUP5 MSTORE MSTORE DUP2 KECCAK256 TSTORE DUP5 PUSH2 0x4002 JUMP JUMPDEST POP PUSH2 0x28F1 JUMP JUMPDEST PUSH2 0x29CA JUMP JUMPDEST PUSH2 0x2A67 SWAP1 DUP3 PUSH0 MSTORE PUSH2 0x2A24 PUSH1 0x20 PUSH0 DUP11 DUP8 DUP6 DUP5 DUP5 KECCAK256 ADD TLOAD SWAP4 DUP5 DUP5 MSTORE DUP2 DUP2 MSTORE PUSH2 0x2A17 DUP13 PUSH1 0x40 SWAP5 DUP6 DUP8 KECCAK256 TLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP1 PUSH2 0x3CD2 JUMP JUMPDEST PUSH2 0x2992 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x2A96 JUMPI RETURNDATASIZE SWAP1 PUSH2 0x2A7D DUP3 PUSH2 0x155A JUMP JUMPDEST SWAP2 PUSH2 0x2A8B PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x1347 JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH6 0xFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x349 JUMPI JUMP JUMPDEST SWAP1 PUSH0 SWAP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 TLOAD AND ISZERO PUSH2 0x2AE6 JUMPI POP POP JUMP JUMPDEST SWAP1 SWAP2 SWAP3 POP TSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x40 DUP3 ADD CALLDATALOAD TIMESTAMP GT PUSH2 0x28B8 JUMPI PUSH2 0x2B0C PUSH2 0x1C4C PUSH1 0x20 DUP5 ADD DUP5 PUSH2 0x38E9 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST PUSH2 0x2B1C PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x38E9 JUMP JUMPDEST SWAP1 POP DUP2 LT ISZERO PUSH2 0x37C6 JUMPI PUSH2 0x2B39 DUP2 PUSH2 0x1C88 PUSH2 0x1C80 PUSH1 0x20 DUP7 ADD DUP7 PUSH2 0x38E9 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD SWAP1 PUSH2 0x2B73 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 MLOAD AND PUSH32 0x0 PUSH2 0x43AB JUMP JUMPDEST POP PUSH1 0x20 DUP2 ADD MLOAD MLOAD PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x1C03 JUMPI JUMPDEST PUSH0 DUP2 SLT ISZERO PUSH2 0x2B99 JUMPI POP POP POP PUSH1 0x1 ADD PUSH2 0x2B0F JUMP JUMPDEST PUSH2 0x2BA7 DUP2 PUSH1 0x20 DUP5 ADD MLOAD PUSH2 0x1886 JUMP JUMPDEST MLOAD PUSH2 0x2BB0 PUSH2 0x397D JUMP JUMPDEST SWAP1 DUP3 ISZERO PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP5 ADD MLOAD MLOAD DUP1 PUSH0 NOT DUP2 ADD GT PUSH2 0x1C03 JUMPI PUSH0 NOT ADD DUP4 EQ DUP1 DUP4 MSTORE PUSH2 0x3784 JUMPI JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD ISZERO PUSH2 0x3749 JUMPI PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 MLOAD AND SWAP2 JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD ISZERO PUSH2 0x2E12 JUMPI DUP4 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x60 SWAP3 PUSH1 0x20 PUSH2 0x2C95 SWAP8 ADD MLOAD ISZERO ISZERO DUP1 PUSH2 0x2E09 JUMPI JUMPDEST PUSH2 0x2DE2 JUMPI JUMPDEST MLOAD AND SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP3 SUB PUSH2 0x2DDB JUMPI PUSH1 0x1 SWAP2 JUMPDEST PUSH1 0x40 MLOAD SWAP3 PUSH2 0x2C41 DUP5 PUSH2 0x130F JUMP JUMPDEST PUSH1 0x1 DUP5 MSTORE PUSH2 0x2C4E DUP2 PUSH2 0x39B3 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE DUP9 DUP4 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP3 PUSH32 0x43583BE500000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x3C17 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x33E JUMPI DUP8 SWAP2 DUP12 SWAP2 PUSH0 SWAP6 PUSH2 0x2DB4 JUMPI JUMPDEST POP PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x2DA5 JUMPI PUSH2 0x2D9B SWAP3 DUP5 PUSH2 0x2CF7 PUSH2 0x2DA0 SWAP8 SWAP7 SWAP5 PUSH2 0x2D6A SWAP5 PUSH2 0x1886 JUMP JUMPDEST MSTORE PUSH2 0x2D2B PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH32 0x0 PUSH2 0x43AB JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2D42 DUP5 PUSH1 0x40 DUP11 ADD MLOAD PUSH2 0x39A6 JUMP JUMPDEST SWAP2 AND PUSH32 0x0 PUSH2 0x43F5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 MLOAD AND PUSH32 0x0 PUSH2 0x43F5 JUMP JUMPDEST PUSH2 0x28F1 JUMP JUMPDEST PUSH2 0x2B86 JUMP JUMPDEST POP POP POP PUSH2 0x2DA0 SWAP2 SWAP4 POP SWAP3 PUSH2 0x28F1 JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP6 POP PUSH2 0x2DD1 SWAP1 PUSH1 0x60 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x1ED5 JUMPI PUSH2 0x1EC2 DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST POP SWAP6 SWAP2 SWAP1 POP PUSH2 0x2CD6 JUMP JUMPDEST PUSH0 SWAP2 PUSH2 0x2C34 JUMP JUMPDEST PUSH2 0x2E04 PUSH2 0x2DEE DUP14 PUSH2 0x1539 JUMP JUMPDEST DUP14 DUP12 PUSH2 0x1CDB DUP9 PUSH1 0x40 DUP9 DUP5 MLOAD AND SWAP4 ADD MLOAD SWAP4 ADD PUSH2 0x154D JUMP JUMPDEST PUSH2 0x2C1D JUMP JUMPDEST POP ORIGIN ISZERO ISZERO PUSH2 0x2C18 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 MLOAD AND DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EQ PUSH0 EQ PUSH2 0x332C JUMPI POP PUSH1 0x20 DUP5 ADD MLOAD PUSH2 0x323E JUMPI POP PUSH1 0x40 MLOAD SWAP3 PUSH32 0x9678709200000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x20 DUP5 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x33E JUMPI PUSH0 SWAP5 PUSH2 0x320A JUMPI JUMPDEST POP DUP4 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 MLOAD AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x349 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH0 DUP6 DUP1 PUSH1 0x64 DUP2 ADD SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x33E JUMPI PUSH2 0x2FE1 SWAP6 PUSH0 SWAP3 PUSH2 0x31FB JUMPI JUMPDEST POP JUMPDEST PUSH2 0x1FD2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2F9D DUP12 DUP3 DUP6 MLOAD AND DUP4 PUSH1 0x20 DUP8 ADD MLOAD AND SWAP1 PUSH2 0x440E JUMP JUMPDEST POP SWAP3 MLOAD AND SWAP2 DUP13 PUSH1 0x2 PUSH2 0x2FB4 PUSH1 0x80 SWAP3 DUP4 DUP2 ADD SWAP1 PUSH2 0x1ACE JUMP JUMPDEST SWAP3 SWAP1 SWAP4 PUSH1 0x40 MLOAD SWAP7 PUSH2 0x2FC4 DUP9 PUSH2 0x12DF JUMP JUMPDEST DUP8 MSTORE ADDRESS PUSH1 0x20 DUP9 ADD MSTORE DUP10 PUSH1 0x40 DUP9 ADD MSTORE PUSH1 0x60 DUP8 ADD MSTORE DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x1576 JUMP JUMPDEST SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x33E JUMPI PUSH0 SWAP5 PUSH2 0x31D8 JUMPI JUMPDEST POP PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x30C4 JUMPI SWAP1 DUP3 SWAP2 PUSH2 0x2DA0 SWAP5 SWAP4 PUSH2 0x303A DUP10 DUP14 PUSH2 0x1886 JUMP JUMPDEST MSTORE PUSH2 0x306F DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH32 0x0 PUSH2 0x43F5 JUMP JUMPDEST DUP1 DUP4 LT DUP1 PUSH2 0x30A9 JUMPI JUMPDEST PUSH2 0x3085 JUMPI JUMPDEST POP POP POP PUSH2 0x28F1 JUMP JUMPDEST PUSH2 0x309B PUSH2 0x30A1 SWAP4 PUSH2 0x3095 DUP12 PUSH2 0x1539 JUMP JUMPDEST SWAP3 PUSH2 0x39A6 JUMP JUMPDEST SWAP2 PUSH2 0x4541 JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0x307D JUMP JUMPDEST POP ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x30BC DUP12 PUSH2 0x1539 JUMP JUMPDEST AND EQ ISZERO PUSH2 0x3078 JUMP JUMPDEST SWAP5 POP SWAP1 DUP1 SWAP5 DUP1 DUP3 LT PUSH2 0x30DD JUMPI JUMPDEST POP POP POP PUSH2 0x2DA0 SWAP1 PUSH2 0x28F1 JUMP JUMPDEST SWAP2 PUSH2 0x30ED PUSH1 0x20 SWAP3 PUSH2 0x316C SWAP5 PUSH2 0x39A6 JUMP JUMPDEST SWAP1 PUSH2 0x3122 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP4 PUSH2 0x4541 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP3 DUP4 SWAP3 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x33E JUMPI PUSH2 0x31AD JUMPI JUMPDEST DUP1 DUP1 PUSH2 0x30D1 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x31D1 JUMPI JUMPDEST PUSH2 0x31C3 DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x349 JUMPI PUSH0 PUSH2 0x31A6 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x31B9 JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP5 POP PUSH2 0x31F0 SWAP1 RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2119 DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST POP SWAP1 SWAP5 SWAP2 SWAP1 POP PUSH2 0x301E JUMP JUMPDEST PUSH2 0x3204 SWAP1 PUSH2 0x12FB JUMP JUMPDEST PUSH0 PUSH2 0x2F7B JUMP JUMPDEST SWAP1 SWAP4 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3236 JUMPI JUMPDEST DUP2 PUSH2 0x3226 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1347 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x349 JUMPI MLOAD SWAP3 PUSH0 PUSH2 0x2EB1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x3219 JUMP JUMPDEST SWAP1 SWAP3 PUSH2 0x3249 DUP10 PUSH2 0x1539 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB ADDRESS SWAP2 AND SUB PUSH2 0x3264 JUMPI JUMPDEST PUSH0 PUSH2 0x2FE1 SWAP5 PUSH2 0x2F7D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP4 PUSH2 0x3298 DUP11 PUSH2 0x1539 JUMP JUMPDEST PUSH2 0x32A1 DUP5 PUSH2 0x44E8 JUMP JUMPDEST SWAP1 DUP7 EXTCODESIZE ISZERO PUSH2 0x349 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP2 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE DUP6 AND PUSH1 0x64 DUP3 ADD MSTORE SWAP5 PUSH0 SWAP1 DUP7 SWAP1 PUSH1 0x84 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x33E JUMPI PUSH2 0x2FE1 SWAP6 PUSH0 SWAP3 PUSH2 0x331D JUMPI JUMPDEST POP SWAP5 POP POP PUSH2 0x325A JUMP JUMPDEST PUSH2 0x3326 SWAP1 PUSH2 0x12FB JUMP JUMPDEST PUSH0 PUSH2 0x3314 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP5 SWAP7 SWAP6 SWAP5 ADD MLOAD AND DUP11 DUP3 DUP3 EQ PUSH0 EQ PUSH2 0x3600 JUMPI POP POP POP PUSH2 0x3401 PUSH2 0x3363 PUSH0 SWAP3 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 MLOAD AND PUSH2 0x440E JUMP JUMPDEST SWAP3 SWAP1 PUSH2 0x33C9 DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP11 MLOAD AND SWAP4 DUP10 MLOAD ISZERO ISZERO DUP7 EQ PUSH2 0x35D4 JUMPI PUSH2 0x3398 PUSH2 0x338C DUP5 PUSH2 0x1539 JUMP JUMPDEST SWAP4 JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 PUSH2 0x1ACE JUMP JUMPDEST SWAP3 SWAP1 SWAP4 PUSH1 0x40 MLOAD SWAP7 PUSH2 0x33A8 DUP9 PUSH2 0x12DF JUMP JUMPDEST DUP8 MSTORE AND PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE DUP13 PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x2 PUSH1 0x80 DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x1576 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x4AF29EC400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x3AED JUMP JUMPDEST SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x33E JUMPI PUSH0 SWAP2 PUSH2 0x35B9 JUMPI JUMPDEST POP PUSH1 0x20 DUP5 ADD MLOAD DUP13 SWAP1 DUP11 SWAP1 ISZERO PUSH2 0x359F JUMPI DUP4 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 PUSH2 0x3478 PUSH2 0x347E SWAP5 PUSH2 0x3471 DUP16 SWAP13 SWAP12 SWAP11 SWAP9 SWAP10 PUSH2 0x34A7 SWAP11 PUSH2 0x1886 JUMP JUMPDEST MLOAD SWAP3 PUSH2 0x1886 JUMP JUMPDEST MSTORE PUSH2 0x1886 JUMP JUMPDEST MLOAD SWAP2 AND PUSH32 0x0 PUSH2 0x43F5 JUMP JUMPDEST MLOAD ISZERO PUSH2 0x34E9 JUMPI PUSH2 0x2DA0 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH2 0x2D9B SWAP4 ADD MLOAD AND PUSH32 0x0 PUSH2 0x452C JUMP JUMPDEST MLOAD PUSH1 0x40 MLOAD PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 DUP1 PUSH1 0x44 DUP2 ADD SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x33E JUMPI PUSH2 0x3574 JUMPI JUMPDEST POP PUSH2 0x2DA0 SWAP1 PUSH2 0x28F1 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3598 JUMPI JUMPDEST PUSH2 0x358A DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x349 JUMPI PUSH0 PUSH2 0x356A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3580 JUMP JUMPDEST POP POP SWAP1 SWAP2 POP PUSH2 0x35B0 SWAP3 SWAP4 SWAP7 POP PUSH2 0x1886 JUMP JUMPDEST MLOAD SWAP4 DUP5 SWAP2 PUSH2 0x34A7 JUMP JUMPDEST PUSH2 0x35CD SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2591 DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST SWAP1 POP PUSH2 0x343E JUMP JUMPDEST PUSH2 0x3398 DUP3 PUSH32 0x0 AND SWAP4 PUSH2 0x338E JUMP JUMPDEST PUSH2 0x3693 SWAP7 POP SWAP1 PUSH2 0x365B SWAP2 PUSH1 0x60 SWAP5 DUP12 PUSH2 0x3620 PUSH1 0x80 SWAP10 SWAP9 SWAP10 SWAP4 DUP5 DUP2 ADD SWAP1 PUSH2 0x1ACE JUMP JUMPDEST SWAP4 SWAP1 SWAP5 PUSH1 0x40 MLOAD SWAP8 PUSH2 0x3630 DUP10 PUSH2 0x132B JUMP JUMPDEST PUSH1 0x1 DUP10 MSTORE PUSH1 0x20 DUP10 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND PUSH1 0x40 DUP10 ADD MSTORE DUP9 DUP9 ADD MSTORE DUP7 ADD MSTORE PUSH1 0xA0 DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x1576 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP3 PUSH32 0x2BFB780C00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x3A05 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x33E JUMPI DUP8 SWAP2 DUP12 SWAP2 PUSH0 SWAP6 PUSH2 0x3722 JUMPI JUMPDEST POP PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x2DA5 JUMPI PUSH2 0x2D9B SWAP3 DUP5 PUSH2 0x36FA PUSH2 0x2DA0 SWAP8 SWAP7 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 PUSH2 0x1886 JUMP JUMPDEST MSTORE AND PUSH32 0x0 PUSH2 0x43F5 JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP6 POP PUSH2 0x373F SWAP1 PUSH1 0x60 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x1ED5 JUMPI PUSH2 0x1EC2 DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST POP SWAP6 SWAP2 SWAP1 POP PUSH2 0x36D4 JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH2 0x377A DUP2 DUP9 ADD MLOAD PUSH2 0x3774 DUP9 PUSH2 0x28E0 JUMP JUMPDEST SWAP1 PUSH2 0x1886 JUMP JUMPDEST MLOAD ADD MLOAD AND SWAP2 PUSH2 0x2BF1 JUMP JUMPDEST PUSH2 0x37C1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP5 ADD PUSH2 0x1E5C DUP3 DUP3 MLOAD AND PUSH32 0x0 PUSH2 0x43AB JUMP JUMPDEST PUSH2 0x2BD5 JUMP JUMPDEST POP POP PUSH2 0x37F1 PUSH32 0x0 PUSH2 0x3C66 JUMP JUMPDEST SWAP2 PUSH2 0x37FC DUP4 MLOAD PUSH2 0x1BC5 JUMP JUMPDEST PUSH32 0x0 SWAP2 PUSH32 0x0 SWAP2 SWAP1 PUSH0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x28AF JUMPI PUSH1 0x1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x3862 DUP4 DUP12 PUSH2 0x1886 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP6 PUSH1 0x20 MSTORE PUSH2 0x387D PUSH1 0x40 PUSH0 KECCAK256 TLOAD DUP3 PUSH2 0x2873 DUP6 DUP14 PUSH2 0x1886 JUMP JUMPDEST PUSH2 0x3887 DUP4 DUP8 PUSH2 0x1886 JUMP JUMPDEST MSTORE PUSH2 0x3892 DUP3 DUP11 PUSH2 0x1886 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP6 PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 TSTORE ADD PUSH2 0x3843 JUMP JUMPDEST SELFBALANCE DUP1 ISZERO PUSH2 0x38E5 JUMPI PUSH32 0x0 TLOAD PUSH2 0x38E5 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1A41 SWAP3 AND PUSH2 0x42CB JUMP JUMPDEST POP POP JUMP JUMPDEST SWAP1 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP2 CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x349 JUMPI ADD DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x349 JUMPI PUSH1 0x20 ADD SWAP2 DUP2 PUSH1 0x5 SHL CALLDATASIZE SUB DUP4 SGT PUSH2 0x349 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x189A JUMPI PUSH1 0x5 SHL DUP2 ADD CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 DUP2 CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x349 JUMPI ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0x40 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x12B2 JUMPI PUSH1 0x40 MSTORE PUSH0 PUSH1 0x20 DUP4 DUP3 DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x1C03 JUMPI JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x39BD JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x60 SWAP2 SUB SLT PUSH2 0x349 JUMPI DUP1 MLOAD SWAP2 PUSH1 0x40 PUSH1 0x20 DUP4 ADD MLOAD SWAP3 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x100 PUSH1 0xC0 PUSH2 0x1171 SWAP4 PUSH1 0x20 DUP5 MSTORE DUP1 MLOAD PUSH2 0x3A1D DUP2 PUSH2 0x39B3 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH1 0x40 DUP7 ADD MSTORE DUP1 PUSH1 0x40 DUP4 ADD MLOAD AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD DUP3 DUP6 ADD MSTORE ADD MLOAD SWAP2 PUSH1 0xE0 DUP1 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x11F0 JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x60 DUP3 DUP5 SUB SLT PUSH2 0x349 JUMPI DUP2 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x349 JUMPI DUP5 PUSH2 0x3A9D SWAP2 DUP4 ADD PUSH2 0x1768 JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP3 ADD MLOAD SWAP4 PUSH1 0x40 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x349 JUMPI PUSH2 0x1171 SWAP3 ADD PUSH2 0x16FC JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x3AD9 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x3ACB JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x3B26 PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0xC0 PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0xE0 DUP4 ADD SWAP1 PUSH2 0x3ABA JUMP JUMPDEST SWAP1 PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0x39BD JUMPI PUSH2 0x1171 SWAP4 PUSH1 0xA0 SWAP2 DUP3 DUP5 ADD MSTORE ADD MLOAD SWAP1 PUSH1 0xC0 PUSH1 0x1F NOT DUP3 DUP6 SUB ADD SWAP2 ADD MSTORE PUSH2 0x11F0 JUMP JUMPDEST SWAP2 PUSH1 0x60 DUP4 DUP4 SUB SLT PUSH2 0x349 JUMPI DUP3 MLOAD SWAP3 PUSH1 0x20 DUP2 ADD MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP2 GT PUSH2 0x349 JUMPI DUP2 PUSH2 0x3B8F SWAP2 DUP5 ADD PUSH2 0x1768 JUMP JUMPDEST SWAP4 PUSH1 0x40 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x349 JUMPI PUSH2 0x1171 SWAP3 ADD PUSH2 0x16FC JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x3BE9 PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xC0 PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xE0 DUP4 ADD SWAP1 PUSH2 0x3ABA JUMP JUMPDEST SWAP1 PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x39BD JUMPI PUSH2 0x1171 SWAP4 PUSH1 0xA0 SWAP2 DUP3 DUP5 ADD MSTORE ADD MLOAD SWAP1 PUSH1 0xC0 PUSH1 0x1F NOT DUP3 DUP6 SUB ADD SWAP2 ADD MSTORE PUSH2 0x11F0 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x80 DUP1 PUSH1 0xA0 DUP4 ADD SWAP5 DUP1 MLOAD PUSH2 0x3C2D DUP2 PUSH2 0x39B3 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x3C3D DUP2 PUSH2 0x39B3 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP6 ADD MSTORE ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 TLOAD PUSH2 0x3C72 DUP2 PUSH2 0x136A JUMP JUMPDEST PUSH2 0x3C7F PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x1347 JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH2 0x3C8B DUP3 PUSH2 0x136A JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x20 SWAP2 ADD CALLDATASIZE PUSH1 0x20 DUP5 ADD CALLDATACOPY DUP2 SWAP5 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x3CAA JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH0 MSTORE DUP1 DUP5 PUSH0 KECCAK256 ADD TLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x3CC8 DUP4 DUP9 PUSH2 0x1886 JUMP JUMPDEST SWAP2 AND SWAP1 MSTORE ADD PUSH2 0x3C9C JUMP JUMPDEST SWAP2 SWAP3 DUP1 PUSH2 0x3FCD JUMPI JUMPDEST ISZERO PUSH2 0x3E46 JUMPI POP POP DUP1 SELFBALANCE LT PUSH2 0x3E1E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP2 DUP3 EXTCODESIZE ISZERO PUSH2 0x349 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xD0E30DB000000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH0 SWAP2 PUSH0 DUP2 PUSH1 0x4 DUP2 DUP6 DUP10 GAS CALL DUP1 ISZERO PUSH2 0x33E JUMPI PUSH2 0x3E07 JUMPI JUMPDEST POP PUSH1 0x44 PUSH1 0x20 SWAP3 SWAP4 PUSH32 0x0 AND SWAP5 PUSH2 0x3D8D DUP4 DUP8 DUP4 PUSH2 0x4541 JUMP JUMPDEST DUP5 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP4 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x3DFB JUMPI POP PUSH2 0x3DD4 JUMPI POP JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3DF4 JUMPI JUMPDEST PUSH2 0x3DEA DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x349 JUMPI JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3DE0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x20 SWAP3 POP PUSH2 0x3E14 SWAP1 PUSH2 0x12FB JUMP JUMPDEST PUSH1 0x44 PUSH0 SWAP3 POP PUSH2 0x3D58 JUMP JUMPDEST PUSH32 0xA01A9DF600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 PUSH0 SWAP1 DUP1 PUSH2 0x3E56 JUMPI JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 PUSH32 0x0 AND SWAP5 DUP1 PUSH32 0x0 AND SWAP2 PUSH2 0x3EB0 DUP5 PUSH2 0x44E8 JUMP JUMPDEST SWAP7 DUP1 EXTCODESIZE ISZERO PUSH2 0x349 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP8 DUP3 AND PUSH1 0x44 DUP10 ADD MSTORE SWAP2 DUP7 AND AND PUSH1 0x64 DUP8 ADD MSTORE PUSH0 SWAP1 DUP7 SWAP1 PUSH1 0x84 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP5 DUP6 ISZERO PUSH2 0x33E JUMPI PUSH2 0x3F75 SWAP6 PUSH2 0x3FB9 JUMPI JUMPDEST POP DUP3 SWAP4 PUSH1 0x20 SWAP4 PUSH1 0x40 MLOAD DUP1 SWAP8 DUP2 SWAP6 DUP3 SWAP5 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x3DFB JUMPI POP PUSH2 0x3F8E JUMPI JUMPDEST DUP1 DUP1 DUP1 PUSH2 0x3E50 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3FB2 JUMPI JUMPDEST PUSH2 0x3FA4 DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x349 JUMPI PUSH0 PUSH2 0x3F86 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3F9A JUMP JUMPDEST PUSH1 0x20 SWAP4 POP PUSH2 0x3FC6 SWAP1 PUSH2 0x12FB JUMP JUMPDEST PUSH0 SWAP3 PUSH2 0x3F24 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP1 DUP3 AND EQ PUSH2 0x3CDA JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SWAP2 DUP1 PUSH0 MSTORE PUSH1 0x20 SWAP2 DUP4 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD DUP1 ISZERO ISZERO PUSH0 EQ PUSH2 0x409C JUMPI PUSH0 NOT SWAP1 DUP2 DUP2 ADD DUP4 TLOAD DUP4 DUP1 DUP3 ADD SWAP2 DUP3 DUP5 SUB PUSH2 0x405F JUMPI JUMPDEST POP POP POP POP POP DUP2 TLOAD DUP2 DUP2 ADD SWAP3 DUP2 DUP5 GT PUSH2 0x1C03 JUMPI PUSH0 SWAP4 DUP2 TSTORE DUP4 MSTORE DUP5 DUP4 KECCAK256 ADD ADD TSTORE PUSH0 MSTORE MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 TSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH2 0x406C PUSH2 0x407C SWAP4 DUP9 PUSH2 0x4625 JUMP JUMPDEST DUP7 PUSH0 MSTORE DUP9 PUSH0 KECCAK256 ADD ADD TLOAD SWAP2 DUP6 PUSH2 0x4625 JUMP JUMPDEST DUP4 PUSH0 MSTORE DUP1 DUP4 DUP4 DUP9 PUSH0 KECCAK256 ADD ADD TSTORE PUSH0 MSTORE DUP6 DUP6 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TSTORE PUSH0 DUP1 DUP1 DUP4 DUP2 PUSH2 0x4033 JUMP JUMPDEST POP POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SWAP1 SWAP4 SWAP3 SWAP4 PUSH0 SWAP5 DUP4 ISZERO PUSH2 0x42C3 JUMPI DUP1 PUSH2 0x428E JUMPI JUMPDEST ISZERO PUSH2 0x41F1 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH32 0x0 AND DUP1 EXTCODESIZE ISZERO PUSH2 0x349 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 DUP9 PUSH32 0x0 AND SWAP7 DUP8 PUSH1 0x4 DUP5 ADD MSTORE ADDRESS PUSH1 0x24 DUP5 ADD MSTORE DUP11 PUSH1 0x44 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x33E JUMPI PUSH2 0x41DE JUMPI JUMPDEST POP DUP1 DUP7 SWAP2 EXTCODESIZE ISZERO PUSH2 0x41DA JUMPI DUP2 SWAP1 PUSH1 0x24 PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x2E1A7D4D00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x41CF JUMPI PUSH2 0x41B7 JUMPI JUMPDEST POP PUSH2 0x1A41 SWAP4 SWAP5 POP AND PUSH2 0x42CB JUMP JUMPDEST PUSH2 0x41C1 DUP7 SWAP2 PUSH2 0x12FB JUMP JUMPDEST PUSH2 0x41CB JUMPI DUP5 PUSH2 0x41AA JUMP JUMPDEST DUP5 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP9 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST PUSH2 0x41E9 SWAP2 SWAP7 POP PUSH2 0x12FB JUMP JUMPDEST PUSH0 SWAP5 PUSH0 PUSH2 0x415F JUMP JUMPDEST SWAP2 SWAP1 SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP1 EXTCODESIZE ISZERO PUSH2 0x349 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP4 SWAP1 SWAP3 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE PUSH0 SWAP1 DUP3 SWAP1 PUSH1 0x64 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL DUP1 ISZERO PUSH2 0x33E JUMPI PUSH2 0x4285 JUMPI POP JUMP JUMPDEST PUSH2 0x1A41 SWAP1 PUSH2 0x12FB JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP1 DUP3 AND EQ PUSH2 0x40B7 JUMP JUMPDEST POP POP POP POP SWAP1 POP JUMP JUMPDEST DUP2 SELFBALANCE LT PUSH2 0x431B JUMPI PUSH0 DUP1 DUP1 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 SWAP5 AND GAS CALL PUSH2 0x42EB PUSH2 0x2A6C JUMP JUMPDEST POP ISZERO PUSH2 0x42F3 JUMPI JUMP JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0xCD78605900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE ADDRESS PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x435C JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x42F3 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x43A2 JUMPI JUMPDEST PUSH2 0x436D JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x4365 JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SWAP1 DUP3 PUSH0 MSTORE DUP2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD ISZERO PUSH0 EQ PUSH2 0x43EE JUMPI DUP1 TLOAD DUP2 PUSH0 MSTORE DUP4 DUP2 PUSH1 0x20 PUSH0 KECCAK256 ADD TSTORE PUSH1 0x1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x1C03 JUMPI DUP2 TSTORE TLOAD SWAP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x440A PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 TLOAD PUSH2 0x1BF6 JUMP JUMPDEST SWAP1 TSTORE JUMP JUMPDEST SWAP2 PUSH1 0x44 SWAP3 SWAP4 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 SWAP5 DUP6 SWAP3 DUP3 DUP1 DUP6 MLOAD SWAP10 DUP11 SWAP6 DUP7 SWAP5 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x4 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x44DE JUMPI PUSH0 SWAP4 PUSH0 SWAP6 PUSH2 0x44A7 JUMPI JUMPDEST POP POP PUSH2 0x44A4 PUSH2 0x449D DUP6 SWAP5 PUSH2 0x1BC5 JUMP JUMPDEST SWAP5 DUP6 PUSH2 0x1886 JUMP JUMPDEST MSTORE JUMP JUMPDEST DUP1 SWAP3 SWAP6 POP DUP2 SWAP5 POP RETURNDATASIZE DUP4 GT PUSH2 0x44D7 JUMPI JUMPDEST PUSH2 0x44C0 DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x349 JUMPI PUSH1 0x20 DUP3 MLOAD SWAP3 ADD MLOAD SWAP3 PUSH0 DUP1 PUSH2 0x448E JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x44B6 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP2 GT PUSH2 0x44FC JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0xA0 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x440A PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 TLOAD PUSH2 0x39A6 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 PUSH1 0x20 DUP5 ADD SWAP1 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 AND PUSH1 0x24 DUP7 ADD MSTORE PUSH1 0x44 DUP6 ADD MSTORE PUSH1 0x44 DUP5 MSTORE PUSH1 0x80 DUP5 ADD SWAP1 DUP5 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x12B2 JUMPI PUSH2 0x45C0 SWAP4 PUSH0 SWAP4 DUP5 SWAP4 PUSH1 0x40 MSTORE AND SWAP5 MLOAD SWAP1 DUP3 DUP7 GAS CALL PUSH2 0x45B9 PUSH2 0x2A6C JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x4347 JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x4601 JUMPI JUMPDEST POP POP PUSH2 0x45D6 JUMPI POP JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 SWAP3 POP SWAP1 PUSH1 0x20 SWAP2 DUP2 ADD SUB SLT PUSH2 0x349 JUMPI PUSH1 0x20 ADD MLOAD DUP1 ISZERO SWAP1 DUP2 ISZERO SUB PUSH2 0x349 JUMPI PUSH0 DUP1 PUSH2 0x45CD JUMP JUMPDEST TLOAD GT ISZERO PUSH2 0x462E JUMPI JUMP JUMPDEST PUSH32 0xF4AE0E400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG1 0xD CREATE JUMP SGT CALLDATACOPY 0xB3 0xD1 0x1E PUSH11 0x31DEF8164DF7FFAAE37EB6 0x4D NUMBER 0x4E PUSH15 0xD8FCEC7155B1C464736F6C63430008 SHL STOP CALLER ","sourceMap":"690:1294:83:-:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;690:1294:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;1487:71:66;690:1294:83;;;;;:::i;:::-;;;;-1:-1:-1;;;690:1294:83;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;690:1294:83;;;;1487:71:66;:::i;:::-;;;409:14:72;;690:1294:83;;-1:-1:-1;;;;;690:1294:83;;;;-1:-1:-1;690:1294:83;;;;;;;;;;;;;;-1:-1:-1;690:1294:83;;;;;;;;;;;-1:-1:-1;690:1294:83;;;;;;;;;;;;;;;;-1:-1:-1;690:1294:83;;;;;;;;;;;;;;;;;-1:-1:-1;690:1294:83;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;690:1294:83;;;;2796:83:65;690:1294:83;;;;;:::i;:::-;;;;;;-1:-1:-1;;;690:1294:83;;;;2796:83:65;:::i;:::-;;;3976:12;;3998:18;;;;690:1294:83;;;;;;:::i;:::-;;;;;;;;;4235:72:61;690:1294:83;;;;;;:::i;:::-;;;;-1:-1:-1;;;690:1294:83;;;;;;4235:72:61;:::i;:::-;1422:55;;;;;4235:72;;690:1294:83;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;4235:72:61;:::i;:::-;1540:56;;;;;4235:72;690:1294:83;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;4235:72:61;:::i;:::-;1674:61;;;;;4235:72;690:1294:83;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;4235:72:61;:::i;:::-;1814:62;;;;;690:1294:83;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;4235:72:61;:::i;:::-;1938:55;;;;;690:1294:83;;;;;;;;1487:71:66;690:1294:83;;;;;;;;;;;;;;;;;;;;409:14:72;690:1294:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2796:83:65;690:1294:83;;;;;;;;;;3976:12:65;690:1294:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;690:1294:83;;;;;;;;;;;-1:-1:-1;690:1294:83;;;;-1:-1:-1;690:1294:83;;-1:-1:-1;690:1294:83;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;690:1294:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;690:1294:83;;;;-1:-1:-1;690:1294:83;;;-1:-1:-1;690:1294:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;690:1294:83;;;;;;;;;;-1:-1:-1;690:1294:83;;;;;;;;-1:-1:-1;690:1294:83;;;;;-1:-1:-1;690:1294:83;;;;;;;;;;;;-1:-1:-1;690:1294:83;;;;;-1:-1:-1;690:1294:83;;-1:-1:-1;690:1294:83;;;;;;;;;-1:-1:-1;;;;;690:1294:83;;;;;;;:::o;:::-;;;;;-1:-1:-1;;690:1294:83;;;;-1:-1:-1;;;;;690:1294:83;;;;;;;;;;:::o;1276:306:47:-;;1461:67;690:1294:83;1461:67:47;1276:306;690:1294:83;;1461:67:47;;;;;;;690:1294:83;;;;;;;;;;;;;;;;;-1:-1:-1;;;690:1294:83;;;;;;;;;;;;;;;-1:-1:-1;690:1294:83;;;;1461:67:47;;;;;;;;;:::i;:::-;690:1294:83;1451:78:47;;-1:-1:-1;;690:1294:83;;;;;;;;;1432:103:47;1461:67;1432:103;;690:1294:83;;;1461:67:47;1432:103;;;;;:::i;:::-;690:1294:83;;1405:144:47;;-1:-1:-1;;1405:170:47;;1276:306::o;690:1294:83:-;;;;-1:-1:-1;690:1294:83;;;;;-1:-1:-1;690:1294:83"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":5014,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_array_bytes_calldata_dyn_calldata":{"entryPoint":4497,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_array_struct_SwapPathExactAmountIn_dyn":{"entryPoint":5305,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn_fromMemory":{"entryPoint":5992,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dynt_array_address_dynt_array_uint256_dyn_fromMemory":{"entryPoint":6089,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_array_uint256_dynt_uint256t_bytes_fromMemory":{"entryPoint":14961,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_available_length_bytes":{"entryPoint":5494,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_bool":{"entryPoint":5036,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bytes_calldata":{"entryPoint":4546,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bytes_fromMemory":{"entryPoint":5884,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bytes_memory_ptr_fromMemory":{"entryPoint":5954,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IERC20":{"entryPoint":4994,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_struct_SwapExactInHookParams_calldata":{"entryPoint":4287,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_struct_SwapPathExactAmountIn":{"entryPoint":5051,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint256t_array_uint256_dynt_bytes_fromMemory":{"entryPoint":15198,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_uint256t_uint256t_uint256_fromMemory":{"entryPoint":14826,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_uint48":{"entryPoint":10907,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address_address_uint160_address":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_array_bytes_dyn":{"entryPoint":4629,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":4337,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn_array_address_dyn_array_uint256_dyn":{"entryPoint":4388,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_array_uint256_dyn_memory_ptr":{"entryPoint":15034,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bytes":{"entryPoint":4592,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_contract_IERC20_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_contract_IERC20_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_struct_AddLiquidityParams":{"entryPoint":15085,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_BufferWrapOrUnwrapParams":{"entryPoint":15383,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_RemoveLiquidityParams":{"entryPoint":15270,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_SwapExactInHookParams":{"entryPoint":5683,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_SwapExactOutHookParams":{"entryPoint":6343,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_SwapPathExactAmountIn":{"entryPoint":5548,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_VaultSwapParams":{"entryPoint":14853,"id":null,"parameterSlots":2,"returnSlots":1},"access_calldata_tail_array_struct_SwapPathExactAmountIn_calldata_dyn_calldata":{"entryPoint":14569,"id":null,"parameterSlots":2,"returnSlots":2},"access_calldata_tail_bytes_calldata":{"entryPoint":6862,"id":null,"parameterSlots":2,"returnSlots":2},"allocate_and_zero_memory_array_array_uint256_dyn":{"entryPoint":7109,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_and_zero_memory_struct_struct_SwapStepLocals":{"entryPoint":14717,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_array_struct_SwapPathExactAmountIn_dyn":{"entryPoint":4970,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":5466,"id":null,"parameterSlots":1,"returnSlots":1},"calldata_array_index_access_bytes_calldata_dyn_calldata":{"entryPoint":6943,"id":null,"parameterSlots":3,"returnSlots":2},"calldata_array_index_access_struct_SwapPathExactAmountIn_calldata_dyn_calldata":{"entryPoint":14653,"id":null,"parameterSlots":3,"returnSlots":1},"checked_add_uint256":{"entryPoint":7158,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_int256":{"entryPoint":10464,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_uint256":{"entryPoint":14758,"id":null,"parameterSlots":2,"returnSlots":1},"decrement_int256":{"entryPoint":10481,"id":null,"parameterSlots":1,"returnSlots":1},"extract_returndata":{"entryPoint":10860,"id":null,"parameterSlots":0,"returnSlots":1},"finalize_allocation":{"entryPoint":4935,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_33646":{"entryPoint":4758,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_33647":{"entryPoint":4831,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_33648":{"entryPoint":4859,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_33652":{"entryPoint":4879,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_33708":{"entryPoint":4907,"id":null,"parameterSlots":1,"returnSlots":0},"fun_add":{"entryPoint":17323,"id":10357,"parameterSlots":2,"returnSlots":1},"fun_ensureIndexWithinBounds":{"entryPoint":17957,"id":7241,"parameterSlots":2,"returnSlots":0},"fun_ensureOnlyVault":{"entryPoint":7015,"id":28148,"parameterSlots":0,"returnSlots":0},"fun_getSingleInputArrayAndTokenIndex":{"entryPoint":17422,"id":19026,"parameterSlots":3,"returnSlots":2},"fun_nonReentrantBefore":{"entryPoint":6970,"id":9916,"parameterSlots":0,"returnSlots":0},"fun_remove":{"entryPoint":16386,"id":10455,"parameterSlots":2,"returnSlots":1},"fun_returnEth":{"entryPoint":14502,"id":18982,"parameterSlots":1,"returnSlots":0},"fun_safeTransfer":{"entryPoint":17729,"id":40221,"parameterSlots":3,"returnSlots":0},"fun_saveSender":{"entryPoint":10926,"id":19282,"parameterSlots":1,"returnSlots":1},"fun_sendTokenOut":{"entryPoint":16549,"id":19126,"parameterSlots":4,"returnSlots":0},"fun_sendValue":{"entryPoint":17099,"id":40518,"parameterSlots":2,"returnSlots":0},"fun_settlePaths":{"entryPoint":10526,"id":14206,"parameterSlots":2,"returnSlots":0},"fun_swapExactInHook":{"entryPoint":7216,"id":12399,"parameterSlots":1,"returnSlots":3},"fun_swapExactOutHook":{"entryPoint":10992,"id":13086,"parameterSlots":1,"returnSlots":3},"fun_tAdd":{"entryPoint":17397,"id":7103,"parameterSlots":3,"returnSlots":0},"fun_tSub":{"entryPoint":17708,"id":7133,"parameterSlots":3,"returnSlots":0},"fun_takeTokenIn":{"entryPoint":15570,"id":19083,"parameterSlots":4,"returnSlots":0},"fun_toUint160":{"entryPoint":17640,"id":43591,"parameterSlots":1,"returnSlots":1},"fun_values":{"entryPoint":15462,"id":10655,"parameterSlots":1,"returnSlots":1},"fun_verifyCallResultFromTarget":{"entryPoint":17223,"id":40673,"parameterSlots":3,"returnSlots":1},"memory_array_index_access_struct_SwapPathExactAmountOut_dyn":{"entryPoint":6278,"id":null,"parameterSlots":2,"returnSlots":1},"modifier_saveSenderAndManageEth":{"entryPoint":6544,"id":18636,"parameterSlots":2,"returnSlots":1},"read_from_calldatat_address":{"entryPoint":5433,"id":null,"parameterSlots":1,"returnSlots":1},"read_from_calldatat_bool":{"entryPoint":5453,"id":null,"parameterSlots":1,"returnSlots":1},"validator_assert_enum_SwapKind":{"entryPoint":14771,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"13947":[{"length":32,"start":1438},{"length":32,"start":10078},{"length":32,"start":10565},{"length":32,"start":11087},{"length":32,"start":14285}],"13952":[{"length":32,"start":994},{"length":32,"start":7736},{"length":32,"start":8324},{"length":32,"start":9322},{"length":32,"start":9932},{"length":32,"start":10179},{"length":32,"start":10529},{"length":32,"start":11527},{"length":32,"start":14237}],"13957":[{"length":32,"start":2014},{"length":32,"start":7992},{"length":32,"start":10122},{"length":32,"start":10609},{"length":32,"start":13443},{"length":32,"start":14078},{"length":32,"start":14368}],"13962":[{"length":32,"start":4207},{"length":32,"start":7777},{"length":32,"start":8373},{"length":32,"start":9974},{"length":32,"start":10262},{"length":32,"start":10665},{"length":32,"start":11590},{"length":32,"start":13509}],"13967":[{"length":32,"start":868},{"length":32,"start":9364},{"length":32,"start":10228},{"length":32,"start":11639},{"length":32,"start":12363},{"length":32,"start":14334}],"18582":[{"length":32,"start":6558},{"length":32,"start":14511}],"18585":[{"length":32,"start":34},{"length":32,"start":4148},{"length":32,"start":15603},{"length":32,"start":16345},{"length":32,"start":16671},{"length":32,"start":17050}],"18588":[{"length":32,"start":2466},{"length":32,"start":2920},{"length":32,"start":3196},{"length":32,"start":8547},{"length":32,"start":8681},{"length":32,"start":12910},{"length":32,"start":15970}],"19225":[{"length":32,"start":759},{"length":32,"start":1584},{"length":32,"start":6676},{"length":32,"start":10931}],"28110":[{"length":32,"start":659},{"length":32,"start":7025},{"length":32,"start":7637},{"length":32,"start":8215},{"length":32,"start":8814},{"length":32,"start":9223},{"length":32,"start":9496},{"length":32,"start":9638},{"length":32,"start":9832},{"length":32,"start":11426},{"length":32,"start":11905},{"length":32,"start":11977},{"length":32,"start":12103},{"length":32,"start":12270},{"length":32,"start":12540},{"length":32,"start":12665},{"length":32,"start":13326},{"length":32,"start":13629},{"length":32,"start":13786},{"length":32,"start":13984},{"length":32,"start":15713},{"length":32,"start":16006},{"length":32,"start":16585},{"length":32,"start":16896},{"length":32,"start":17500}]},"linkReferences":{},"object":"60806040526004361015610072575b3615610018575f80fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361004a57005b7f0540ddf6000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f3560e01c806308a465f6146110925780630f8fb1cc14611058578063107c279f1461101557806319c6989f146109c65780631bbf2e2314610983578063286f580d146108ec5780632950286e1461080157806348bbd869146107c757806354fd4d501461068a5780635a3c3987146106615780635e01eb5a1461061c5780638a12a08c146105c15780638c824cd9146105875780638eb1b65e14610480578063945ed33f1461040557806396123406146103cb578063ac9650d814610387578063cd791ccc1461034d5763e3b5dff40361000e5734610349576060806003193601126103495767ffffffffffffffff6004358181116103495761017a9036906004016114b9565b610182611396565b6044359283116103495761019d6101a59336906004016111c2565b939091612aae565b905f5b83518110156101c957805f876101c060019488611886565b510152016101a8565b5061023d61024b610286946102035f9488604051936101e78561130f565b30855260208501525f1960408501528660608501523691611576565b60808201526040519283917f8a12a08c00000000000000000000000000000000000000000000000000000000602084015260248301611633565b03601f198101835282611347565b604051809481927fedfa35680000000000000000000000000000000000000000000000000000000083526020600484015260248301906111f0565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af191821561033e576102f0926102db915f9161031c575b50602080825183010191016117c9565b909391926102f4575b60405193849384611124565b0390f35b5f7f00000000000000000000000000000000000000000000000000000000000000005d6102e4565b61033891503d805f833e6103308183611347565b810190611742565b846102cb565b6040513d5f823e3d90fd5b5f80fd5b34610349575f6003193601126103495760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b60206003193601126103495760043567ffffffffffffffff8111610349576103bf6103b96102f0923690600401611191565b90611990565b60405191829182611215565b34610349575f6003193601126103495760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b3461034957610413366110bf565b61041b611b3a565b610423611b67565b6104516102f061043283612af0565b9193909461044b606061044483611539565b920161154d565b9061291e565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d60405193849384611124565b60806003193601126103495767ffffffffffffffff600435818111610349576104ad9036906004016114b9565b906104b66113ac565b906064359081116103495761023d61054c610286946105126104dd5f9536906004016111c2565b6104e633612aae565b97604051946104f48661130f565b33865260208601526024356040860152151560608501523691611576565b60808201526040519283917f945ed33f000000000000000000000000000000000000000000000000000000006020840152602483016118c7565b604051809481927f48c894910000000000000000000000000000000000000000000000000000000083526020600484015260248301906111f0565b34610349575f6003193601126103495760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610349576102f06105ea6105d5366110bf565b6105dd611b3a565b6105e5611b67565b611c30565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f009492945d60405193849384611124565b34610349575f6003193601126103495760207f00000000000000000000000000000000000000000000000000000000000000005c6001600160a01b0360405191168152f35b34610349576102f06105ea610675366110bf565b61067d611b3a565b610685611b67565b612af0565b34610349575f600319360112610349576040515f5f549060018260011c91600184169182156107bd575b60209485851084146107905785879486865291825f146107525750506001146106f9575b506106e592500383611347565b6102f06040519282849384528301906111f0565b5f808052859250907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b85831061073a5750506106e59350820101856106d8565b80548389018501528794508693909201918101610723565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016858201526106e595151560051b85010192508791506106d89050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f16926106b4565b34610349575f6003193601126103495760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346103495760606003193601126103495767ffffffffffffffff600435818111610349576108339036906004016114b9565b9061083c611396565b6044359182116103495761085761085f9236906004016111c2565b929091612aae565b905f5b845181101561089457806fffffffffffffffffffffffffffffffff604061088b60019489611886565b51015201610862565b5061023d61024b856108b25f9461028697604051936101e78561130f565b60808201526040519283917f5a3c3987000000000000000000000000000000000000000000000000000000006020840152602483016118c7565b60806003193601126103495767ffffffffffffffff600435818111610349576109199036906004016114b9565b906109226113ac565b906064359081116103495761023d61054c610286946109496104dd5f9536906004016111c2565b60808201526040519283917f08a465f600000000000000000000000000000000000000000000000000000000602084015260248301611633565b34610349575f6003193601126103495760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b60a06003193601126103495767ffffffffffffffff60043511610349573660236004350112156103495767ffffffffffffffff60043560040135116103495736602460c060043560040135026004350101116103495760243567ffffffffffffffff811161034957610a3c903690600401611191565b67ffffffffffffffff60443511610349576060600319604435360301126103495760643567ffffffffffffffff811161034957610a7d9036906004016111c2565b60843567ffffffffffffffff811161034957610a9d903690600401611191565b949093610aa8611b3a565b806004356004013503610fed575f5b600435600401358110610d4a5750505060443560040135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd60443536030182121561034957816044350160048101359067ffffffffffffffff82116103495760248260071b360391011361034957610b5b575b6102f06103bf86865f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d611990565b6001600160a01b039492947f0000000000000000000000000000000000000000000000000000000000000000163b1561034957604051947f2a2d80d10000000000000000000000000000000000000000000000000000000086523360048701526060602487015260c486019260443501602481019367ffffffffffffffff60048301351161034957600482013560071b360385136103495760606064890152600482013590529192869260e484019291905f905b60048101358210610ccc57505050602091601f19601f865f9787956001600160a01b03610c40602460443501611382565b16608488015260448035013560a48801526003198787030160448801528186528786013787868286010152011601030181836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af191821561033e576102f0936103bf93610cbd575b829450819350610b2b565b610cc6906112fb565b84610cb2565b9195945091926001600160a01b03610ce387611382565b168152602080870135916001600160a01b03831680930361034957600492600192820152610d1360408901612a9b565b65ffffffffffff8091166040830152610d2e60608a01612a9b565b1660608201526080809101970193019050889495939291610c0f565b610d5f610d58828486611b1f565b3691611576565b604051610d6b81611296565b5f81526020915f838301525f60408301528281015190606060408201519101515f1a91835283830152604082015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc81850260043501360301126103495760405190610dd8826112df565b610deb602460c086026004350101611382565b808352610e01604460c087026004350101611382565b908185850152610e1a606460c088026004350101611382565b60408581019190915260043560c08802016084810135606087015260a4810135608087015260c4013560a086015283015183519386015160ff91909116926001600160a01b0383163b15610349575f6001600160a01b03809460e4948b98849860c460c06040519c8d9b8c9a7fd505accf000000000000000000000000000000000000000000000000000000008c521660048b01523060248b0152608482820260043501013560448b0152026004350101356064880152608487015260a486015260c4850152165af19081610fde575b50610fd457610ef7612a6c565b906001600160a01b0381511690836001600160a01b0381830151166044604051809581937fdd62ed3e00000000000000000000000000000000000000000000000000000000835260048301523060248301525afa91821561033e575f92610fa4575b506060015103610f6f5750506001905b01610ab7565b805115610f7c5780519101fd5b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b9091508381813d8311610fcd575b610fbc8183611347565b810103126103495751906060610f59565b503d610fb2565b5050600190610f69565b610fe7906112fb565b8a610eea565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610349575f6003193601126103495760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610349575f6003193601126103495760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610349576110a0366110bf565b6110a8611b3a565b6110b0611b67565b6104516102f061043283611c30565b60031990602082820112610349576004359167ffffffffffffffff8311610349578260a0920301126103495760040190565b9081518082526020808093019301915f5b828110611110575050505090565b835185529381019392810192600101611102565b939290611139906060865260608601906110f1565b936020948181036020830152602080855192838152019401905f5b8181106111745750505061117193945060408184039101526110f1565b90565b82516001600160a01b031686529487019491870191600101611154565b9181601f840112156103495782359167ffffffffffffffff8311610349576020808501948460051b01011161034957565b9181601f840112156103495782359167ffffffffffffffff8311610349576020838186019501011161034957565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b84831061124a5750505050505090565b9091929394958480611286837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528a516111f0565b980193019301919493929061123a565b6060810190811067ffffffffffffffff8211176112b257604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60c0810190811067ffffffffffffffff8211176112b257604052565b67ffffffffffffffff81116112b257604052565b60a0810190811067ffffffffffffffff8211176112b257604052565b60e0810190811067ffffffffffffffff8211176112b257604052565b90601f601f19910116810190811067ffffffffffffffff8211176112b257604052565b67ffffffffffffffff81116112b25760051b60200190565b35906001600160a01b038216820361034957565b602435906001600160a01b038216820361034957565b60443590811515820361034957565b91909160808184031261034957604090815191608083019467ffffffffffffffff95848110878211176112b257825283956113f584611382565b85526020908185013590811161034957840182601f820112156103495780359061141e8261136a565b9361142b86519586611347565b8285528385019084606080950284010192818411610349578501915b8383106114695750505050508401528181013590830152606090810135910152565b84838303126103495787519061147e82611296565b61148784611382565b8252611494878501611382565b8783015288840135908115158203610349578288928b89950152815201920191611447565b81601f82011215610349578035916020916114d38461136a565b936114e16040519586611347565b808552838086019160051b8301019280841161034957848301915b84831061150c5750505050505090565b823567ffffffffffffffff811161034957869161152e848480948901016113bb565b8152019201916114fc565b356001600160a01b03811681036103495790565b3580151581036103495790565b67ffffffffffffffff81116112b257601f01601f191660200190565b9291926115828261155a565b916115906040519384611347565b829481845281830111610349578281602093845f960137010152565b9060808101916001600160a01b03808251168352602093848301519460808186015285518092528060a086019601925f905b8382106116005750505050506060816040829301516040850152015191015290565b845180518216895280840151821689850152604090810151151590890152606090970196938201936001909101906115de565b91909160209081815260c08101916001600160a01b0385511681830152808501519260a06040840152835180915260e08301918060e08360051b8601019501925f905b8382106116b25750505050506080846040611171959601516060840152606081015115158284015201519060a0601f19828503019101526111f0565b909192939583806116ed837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff208a600196030186528a516115ac565b98019201920190939291611676565b81601f82011215610349578051906117138261155a565b926117216040519485611347565b8284526020838301011161034957815f9260208093018386015e8301015290565b9060208282031261034957815167ffffffffffffffff81116103495761117192016116fc565b9080601f83011215610349578151906020916117838161136a565b936117916040519586611347565b81855260208086019260051b82010192831161034957602001905b8282106117ba575050505090565b815181529083019083016117ac565b90916060828403126103495781519167ffffffffffffffff9283811161034957846117f5918301611768565b936020808301518581116103495783019082601f830112156103495781519161181d8361136a565b9261182b6040519485611347565b808452828085019160051b83010191858311610349578301905b8282106118675750505050936040830151908111610349576111719201611768565b81516001600160a01b0381168103610349578152908301908301611845565b805182101561189a5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b91909160209081815260c08101916001600160a01b0385511681830152808501519260a06040840152835180915260e08301918060e08360051b8601019501925f905b8382106119465750505050506080846040611171959601516060840152606081015115158284015201519060a0601f19828503019101526111f0565b90919293958380611981837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff208a600196030186528a516115ac565b9801920192019093929161190a565b919061199b33612aae565b907f000000000000000000000000000000000000000000000000000000000000000093845c611aa6576001906001865d6119d48361136a565b926119e26040519485611347565b808452601f196119f18261136a565b015f5b818110611a955750505f5b818110611a4c5750505050905f611a4192945d7f0000000000000000000000000000000000000000000000000000000000000000805c91611a43575b506138a6565b565b5f905d5f611a3b565b80611a795f80611a61610d588996888a611b1f565b602081519101305af4611a72612a6c565b9030614347565b611a838288611886565b52611a8e8187611886565b50016119ff565b8060606020809389010152016119f4565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610349570180359067ffffffffffffffff82116103495760200191813603831361034957565b9082101561189a57611b369160051b810190611ace565b9091565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c611aa6576001905d565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163303611b9957565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b90611bcf8261136a565b611bdc6040519182611347565b828152601f19611bec829461136a565b0190602036910137565b91908201809211611c0357565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b604081013542116128b85790611c53611c4c60208401846138e9565b9050611bc5565b915f5b611c6360208301836138e9565b90508110156127bc57611c8d81611c88611c8060208601866138e9565b36939161393d565b6113bb565b936040850151936001600160a01b0386511690602087015180511561189a5760200151604001511515806127b3575b1561275857611ce1611ccd86611539565b8784611cdb60608a0161154d565b92613cd2565b5f5b60208801515181101561274857611cf861397d565b6020890151515f198101908111611c03578214806020830152821582525f14612741576060890151905b611d308360208c0151611886565b51604081015190919015611ee357611dc86001600160a01b03835116936001600160a01b03881685145f14611edc576001945b60405195611d708761130f565b5f8752611d7c816139b3565b6020870152604086015260609485918d838301526080820152604051809381927f43583be500000000000000000000000000000000000000000000000000000000835260048301613c17565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af193841561033e575f94611ea5575b50506020015115611e8b57816001600160a01b036020611e859360019695611e2d8c8c611886565b5201611e5c828251167f00000000000000000000000000000000000000000000000000000000000000006143ab565b5051167f00000000000000000000000000000000000000000000000000000000000000006143f5565b01611ce3565b602001519097506001600160a01b03169250600190611e85565b60209294509081611eca92903d10611ed5575b611ec28183611347565b8101906139ea565b91505092905f611e05565b503d611eb8565b5f94611d63565b888a6001600160a01b038495945116806001600160a01b038a16145f14612327575050815115905061226357888a80151580612248575b612142575b6001600160a01b03939291611fd28261200a978b5f95897f0000000000000000000000000000000000000000000000000000000000000000921680885282602052604088205c612131575b5050505b6001611f918983511660208401998b8b51169080158a1461212b5750839161440e565b999092511694611fa660809182810190611ace565b93909460405197611fb6896112df565b8852306020890152604088015260608701528501523691611576565b60a0820152604051809681927f2145789700000000000000000000000000000000000000000000000000000000835260048301613ba6565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af193841561033e575f94612101575b5060200151156120de57916120b1826001600160a01b036001969561206f6120d99686611886565b5161207a8d8d611886565b526120a8828251167f00000000000000000000000000000000000000000000000000000000000000006143ab565b50511692611886565b51907f00000000000000000000000000000000000000000000000000000000000000006143f5565b611e85565b985060019294506120f7906001600160a01b0392611886565b5197511692611e85565b6020919450612121903d805f833e6121198183611347565b810190613b5e565b5094919050612047565b9161440e565b61213a9261452c565b5f8281611f6a565b5061214f90929192611539565b916121598b6144e8565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b15610349576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039485166004820152306024820152908416604482015292871660648401525f8380608481010381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561033e578a611fd28d61200a976001600160a01b03975f95612239575b50975092505091929350611f1f565b612242906112fb565b5f61222a565b5061225282611539565b6001600160a01b0316301415611f1a565b906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916001600160a01b0384511692803b15610349576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03949094166004850152306024850152604484018c90525f908490606490829084905af1801561033e578a611fd28d61200a976001600160a01b03975f95612318575b50611f6e565b612321906112fb565b5f612312565b6001600160a01b0360208796949701511690898183145f146125cc576123c292506123fa97915060016123685f96956001600160a01b0393848b511661440e565b509282895116956020890151151588146125a35761238582611539565b945b61239660809384810190611ace565b959096604051996123a68b6112df565b8a52166020890152604088015260608701528501523691611576565b60a0820152604051809581927f4af29ec400000000000000000000000000000000000000000000000000000000835260048301613aed565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af192831561033e575f93612579575b5060200151156124b857816001600160a01b0360206120d9936001969561245e8c8c611886565b5261248e8383830151167f00000000000000000000000000000000000000000000000000000000000000006143ab565b500151167f00000000000000000000000000000000000000000000000000000000000000006143f5565b60208181015191516040517f15afd4090000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015260248101859052939a50909116945081806044810103815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561033e5761254e575b50600190611e85565b602090813d8311612572575b6125648183611347565b81010312610349575f612545565b503d61255a565b6020919350612599903d805f833e6125918183611347565b810190613a71565b5093919050612437565b837f00000000000000000000000000000000000000000000000000000000000000001694612387565b6001600160a01b0361265b956126239394956125ed60809b8c810190611ace565b939094604051976125fd8961132b565b5f8952602089015216604087015260609a8b978888015286015260a08501523691611576565b60c0820152604051809381927f2bfb780c00000000000000000000000000000000000000000000000000000000835260048301613a05565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af193841561033e575f9461271a575b50506020015115611e8b57816001600160a01b0360206120d993600196956126c08c8c611886565b526126f08383830151167f00000000000000000000000000000000000000000000000000000000000000006143ab565b500151167f00000000000000000000000000000000000000000000000000000000000000006143f5565b6020929450908161273692903d10611ed557611ec28183611347565b91505092905f612698565b5f90611d22565b5091955090935050600101611c56565b612782827f00000000000000000000000000000000000000000000000000000000000000006143ab565b506127ae86837f00000000000000000000000000000000000000000000000000000000000000006143f5565b611ce1565b50321515611cbc565b50506127e77f0000000000000000000000000000000000000000000000000000000000000000613c66565b916127f28351611bc5565b7f0000000000000000000000000000000000000000000000000000000000000000917f000000000000000000000000000000000000000000000000000000000000000091905f5b86518110156128af576001906001600160a01b0380612858838b611886565b51165f528560205261288660405f205c82612873858d611886565b51165f528860205260405f205c90611bf6565b6128908387611886565b5261289b828a611886565b51165f52856020525f604081205d01612839565b50949391509150565b7fe08b8af0000000000000000000000000000000000000000000000000000000005f5260045ffd5b905f198201918213600116611c0357565b7f80000000000000000000000000000000000000000000000000000000000000008114611c03575f190190565b907f000000000000000000000000000000000000000000000000000000000000000090815c7f000000000000000000000000000000000000000000000000000000000000000061296e815c6128e0565b907f0000000000000000000000000000000000000000000000000000000000000000915b5f811215612a2f575050506129a6906128e0565b917f0000000000000000000000000000000000000000000000000000000000000000925b5f8112156129df5750505050611a41906138a6565b612a2a90825f52612a2460205f83828220015c9182825288815288604091612a178a8d8587205c906001600160a01b038916906140a5565b8484525281205d84614002565b506128f1565b6129ca565b612a6790825f52612a2460205f8a8785848420015c93848452818152612a178c6040948587205c906001600160a01b03891690613cd2565b612992565b3d15612a96573d90612a7d8261155a565b91612a8b6040519384611347565b82523d5f602084013e565b606090565b359065ffffffffffff8216820361034957565b905f917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03815c1615612ae6575050565b909192505d600190565b90604082013542116128b857612b0c611c4c60208401846138e9565b915f5b612b1c60208301836138e9565b90508110156137c657612b3981611c88611c8060208601866138e9565b606081015190612b736001600160a01b038251167f00000000000000000000000000000000000000000000000000000000000000006143ab565b506020810151515f198101908111611c03575b5f811215612b9957505050600101612b0f565b612ba7816020840151611886565b51612bb061397d565b9082156020830152602084015151805f19810111611c03575f19018314808352613784575b6020820151156137495760408401516001600160a01b03855116915b604081015115612e125783916001600160a01b036060926020612c95970151151580612e09575b612de2575b5116906001600160a01b0385168203612ddb576001915b60405192612c418461130f565b60018452612c4e816139b3565b6020840152604083015288838301526080820152604051809581927f43583be500000000000000000000000000000000000000000000000000000000835260048301613c17565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af192831561033e5787918b915f95612db4575b506020015115612da557612d9b9284612cf7612da0979694612d6a94611886565b52612d2b6001600160a01b0382167f00000000000000000000000000000000000000000000000000000000000000006143ab565b506001600160a01b03612d428460408a01516139a6565b91167f00000000000000000000000000000000000000000000000000000000000000006143f5565b6001600160a01b038551167f00000000000000000000000000000000000000000000000000000000000000006143f5565b6128f1565b612b86565b505050612da0919350926128f1565b6020919550612dd19060603d606011611ed557611ec28183611347565b5095919050612cd6565b5f91612c34565b612e04612dee8d611539565b8d8b611cdb88604088845116930151930161154d565b612c1d565b50321515612c18565b906001600160a01b03825116806001600160a01b038516145f1461332c5750602084015161323e5750604051927f967870920000000000000000000000000000000000000000000000000000000084526001600160a01b03831660048501526020846024816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa93841561033e575f9461320a575b5083916001600160a01b038151166001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b15610349576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03909116600482015230602482015260448101959095525f8580606481010381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af190811561033e57612fe1955f926131fb575b505b611fd26001600160a01b03612f9d8b82855116836020870151169061440e565b50925116918c6002612fb460809283810190611ace565b92909360405196612fc4886112df565b875230602088015289604088015260608701528501523691611576565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af193841561033e575f946131d8575b5060200151156130c457908291612da0949361303a898d611886565b5261306f836001600160a01b0384167f00000000000000000000000000000000000000000000000000000000000000006143f5565b808310806130a9575b613085575b5050506128f1565b61309b6130a1936130958b611539565b926139a6565b91614541565b5f808061307d565b50306001600160a01b036130bc8b611539565b161415613078565b94509080948082106130dd575b505050612da0906128f1565b916130ed60209261316c946139a6565b90613122826001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001683614541565b60405193849283927f15afd40900000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561033e576131ad575b80806130d1565b602090813d83116131d1575b6131c38183611347565b81010312610349575f6131a6565b503d6131b9565b60209194506131f0903d805f833e6121198183611347565b50909491905061301e565b613204906112fb565b5f612f7b565b9093506020813d602011613236575b8161322660209383611347565b810103126103495751925f612eb1565b3d9150613219565b909261324989611539565b6001600160a01b0330911603613264575b5f612fe194612f7d565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016936132988a611539565b6132a1846144e8565b90863b15610349576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152306024820152918116604483015285166064820152945f908690608490829084905af190811561033e57612fe1955f9261331d575b5094505061325a565b613326906112fb565b5f613314565b6001600160a01b036020849695940151168a8282145f14613600575050506134016133635f92846001600160a01b0388511661440e565b92906133c98c6001600160a01b03808a5116938951151586146135d45761339861338c84611539565b935b6080810190611ace565b929093604051966133a8886112df565b875216602086015260408501528c6060850152600260808501523691611576565b60a0820152604051809381927f4af29ec400000000000000000000000000000000000000000000000000000000835260048301613aed565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af190811561033e575f916135b9575b5060208401518c908a901561359f5783836001600160a01b039361347861347e946134718f9c9b9a98996134a79a611886565b5192611886565b52611886565b5191167f00000000000000000000000000000000000000000000000000000000000000006143f5565b51156134e957612da092916001600160a01b036020612d9b930151167f000000000000000000000000000000000000000000000000000000000000000061452c565b516040517f15afd4090000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201526024810191909152602081806044810103815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561033e57613574575b50612da0906128f1565b602090813d8311613598575b61358a8183611347565b81010312610349575f61356a565b503d613580565b50509091506135b092939650611886565b519384916134a7565b6135cd91503d805f833e6125918183611347565b905061343e565b613398827f0000000000000000000000000000000000000000000000000000000000000000169361338e565b61369396509061365b916060948b61362060809998999384810190611ace565b939094604051976136308961132b565b6001895260208901526001600160a01b038b1660408901528888015286015260a08501523691611576565b60c0820152604051809581927f2bfb780c00000000000000000000000000000000000000000000000000000000835260048301613a05565b03815f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af192831561033e5787918b915f95613722575b506020015115612da557612d9b92846136fa612da09796946001600160a01b0394611886565b52167f00000000000000000000000000000000000000000000000000000000000000006143f5565b602091955061373f9060603d606011611ed557611ec28183611347565b50959190506136d4565b6fffffffffffffffffffffffffffffffff6001600160a01b03602061377a81880151613774886128e0565b90611886565b5101511691612bf1565b6137c1856001600160a01b0360208401611e5c828251167f00000000000000000000000000000000000000000000000000000000000000006143ab565b612bd5565b50506137f17f0000000000000000000000000000000000000000000000000000000000000000613c66565b916137fc8351611bc5565b7f0000000000000000000000000000000000000000000000000000000000000000917f000000000000000000000000000000000000000000000000000000000000000091905f5b86518110156128af576001906001600160a01b0380613862838b611886565b51165f528560205261387d60405f205c82612873858d611886565b6138878387611886565b52613892828a611886565b51165f52856020525f604081205d01613843565b4780156138e5577f00000000000000000000000000000000000000000000000000000000000000005c6138e5576001600160a01b03611a4192166142cb565b5050565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610349570180359067ffffffffffffffff821161034957602001918160051b3603831361034957565b919081101561189a5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8181360301821215610349570190565b604051906040820182811067ffffffffffffffff8211176112b2576040525f6020838281520152565b91908203918211611c0357565b600211156139bd57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b90816060910312610349578051916040602083015192015190565b61010060c061117193602084528051613a1d816139b3565b602085015260208101516001600160a01b0380911660408601528060408301511660608601526060820151166080850152608081015160a085015260a08101518285015201519160e08082015201906111f0565b90916060828403126103495781519167ffffffffffffffff928381116103495784613a9d918301611768565b9360208201519360408301519081116103495761117192016116fc565b9081518082526020808093019301915f5b828110613ad9575050505090565b835185529381019392810192600101613acb565b602081526001600160a01b038083511660208301526020830151166040820152613b26604083015160c0606084015260e0830190613aba565b9060608301516080820152608083015160058110156139bd576111719360a0918284015201519060c0601f19828503019101526111f0565b916060838303126103495782519260208101519267ffffffffffffffff938481116103495781613b8f918401611768565b9360408301519081116103495761117192016116fc565b602081526001600160a01b03808351166020830152602083015116604082015260408201516060820152613be9606083015160c0608084015260e0830190613aba565b90608083015160048110156139bd576111719360a0918284015201519060c0601f19828503019101526111f0565b91909160808060a08301948051613c2d816139b3565b84526020810151613c3d816139b3565b60208501526001600160a01b036040820151166040850152606081015160608501520151910152565b90815c613c728161136a565b613c7f6040519182611347565b818152613c8b8261136a565b601f196020910136602084013781945f5b848110613caa575050505050565b600190825f5280845f20015c6001600160a01b03613cc88388611886565b9116905201613c9c565b919280613fcd575b15613e46575050804710613e1e576001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001691823b1561034957604051907fd0e30db00000000000000000000000000000000000000000000000000000000082525f915f8160048185895af1801561033e57613e07575b506044602092937f00000000000000000000000000000000000000000000000000000000000000001694613d8d838783614541565b8460405196879485937f15afd409000000000000000000000000000000000000000000000000000000008552600485015260248401525af1908115613dfb5750613dd45750565b602090813d8311613df4575b613dea8183611347565b8101031261034957565b503d613de0565b604051903d90823e3d90fd5b60209250613e14906112fb565b60445f9250613d58565b7fa01a9df6000000000000000000000000000000000000000000000000000000005f5260045ffd5b90915f9080613e56575b50505050565b6001600160a01b0393847f00000000000000000000000000000000000000000000000000000000000000001694807f00000000000000000000000000000000000000000000000000000000000000001691613eb0846144e8565b96803b15610349576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152848316602482015297821660448901529186161660648701525f908690608490829084905af194851561033e57613f7595613fb9575b5082936020936040518097819582947f15afd40900000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03925af1908115613dfb5750613f8e575b808080613e50565b602090813d8311613fb2575b613fa48183611347565b81010312610349575f613f86565b503d613f9a565b60209350613fc6906112fb565b5f92613f24565b506001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001690821614613cda565b6001810191805f5260209183835260405f205c8015155f1461409c575f1990818101835c838082019182840361405f575b5050505050815c81810192818411611c03575f93815d835284832001015d5f52525f604081205d600190565b61406c61407c9388614625565b865f52885f2001015c9185614625565b835f52808383885f2001015d5f5285855260405f205d5f80808381614033565b50505050505f90565b909392935f9483156142c3578061428e575b156141f157506001600160a01b0390817f000000000000000000000000000000000000000000000000000000000000000016803b15610349576040517fae6393290000000000000000000000000000000000000000000000000000000081525f8160648183887f000000000000000000000000000000000000000000000000000000000000000016968760048401523060248401528a60448401525af1801561033e576141de575b508086913b156141da5781906024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083528960048401525af180156141cf576141b7575b50611a41939450166142cb565b6141c186916112fb565b6141cb57846141aa565b8480fd5b6040513d88823e3d90fd5b5080fd5b6141e99196506112fb565b5f945f61415f565b91909293506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b15610349576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03938416600482015293909216602484015260448301525f908290606490829084905af1801561033e576142855750565b611a41906112fb565b506001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016908216146140b7565b505050509050565b81471061431b575f8080936001600160a01b038294165af16142eb612a6c565b50156142f357565b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fcd786059000000000000000000000000000000000000000000000000000000005f523060045260245ffd5b9061435c57508051156142f357805190602001fd5b815115806143a2575b61436d575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15614365565b6001810190825f528160205260405f205c155f146143ee57805c815f52838160205f20015d60018101809111611c0357815d5c915f5260205260405f205d600190565b5050505f90565b905f5260205261440a60405f2091825c611bf6565b905d565b916044929391936001600160a01b03604094859282808551998a9586947fc9c1661b0000000000000000000000000000000000000000000000000000000086521660048501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa9384156144de575f935f956144a7575b50506144a461449d8594611bc5565b9485611886565b52565b809295508194503d83116144d7575b6144c08183611347565b810103126103495760208251920151925f8061448e565b503d6144b6565b83513d5f823e3d90fd5b6001600160a01b03908181116144fc571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f5260a060045260245260445ffd5b905f5260205261440a60405f2091825c6139a6565b6040519260208401907fa9059cbb0000000000000000000000000000000000000000000000000000000082526001600160a01b038094166024860152604485015260448452608084019084821067ffffffffffffffff8311176112b2576145c0935f9384936040521694519082865af16145b9612a6c565b9083614347565b8051908115159182614601575b50506145d65750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b81925090602091810103126103495760200151801590811503610349575f806145cd565b5c111561462e57565b7f0f4ae0e4000000000000000000000000000000000000000000000000000000005f5260045ffdfea2646970667358221220a10df0561337b3d11e6a31def8164df7ffaae37eb64d434e6ed8fcec7155b1c464736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x72 JUMPI JUMPDEST CALLDATASIZE ISZERO PUSH2 0x18 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x4A JUMPI STOP JUMPDEST PUSH32 0x540DDF600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x8A465F6 EQ PUSH2 0x1092 JUMPI DUP1 PUSH4 0xF8FB1CC EQ PUSH2 0x1058 JUMPI DUP1 PUSH4 0x107C279F EQ PUSH2 0x1015 JUMPI DUP1 PUSH4 0x19C6989F EQ PUSH2 0x9C6 JUMPI DUP1 PUSH4 0x1BBF2E23 EQ PUSH2 0x983 JUMPI DUP1 PUSH4 0x286F580D EQ PUSH2 0x8EC JUMPI DUP1 PUSH4 0x2950286E EQ PUSH2 0x801 JUMPI DUP1 PUSH4 0x48BBD869 EQ PUSH2 0x7C7 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x68A JUMPI DUP1 PUSH4 0x5A3C3987 EQ PUSH2 0x661 JUMPI DUP1 PUSH4 0x5E01EB5A EQ PUSH2 0x61C JUMPI DUP1 PUSH4 0x8A12A08C EQ PUSH2 0x5C1 JUMPI DUP1 PUSH4 0x8C824CD9 EQ PUSH2 0x587 JUMPI DUP1 PUSH4 0x8EB1B65E EQ PUSH2 0x480 JUMPI DUP1 PUSH4 0x945ED33F EQ PUSH2 0x405 JUMPI DUP1 PUSH4 0x96123406 EQ PUSH2 0x3CB JUMPI DUP1 PUSH4 0xAC9650D8 EQ PUSH2 0x387 JUMPI DUP1 PUSH4 0xCD791CCC EQ PUSH2 0x34D JUMPI PUSH4 0xE3B5DFF4 SUB PUSH2 0xE JUMPI CALLVALUE PUSH2 0x349 JUMPI PUSH1 0x60 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x349 JUMPI PUSH2 0x17A SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x14B9 JUMP JUMPDEST PUSH2 0x182 PUSH2 0x1396 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP3 DUP4 GT PUSH2 0x349 JUMPI PUSH2 0x19D PUSH2 0x1A5 SWAP4 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x11C2 JUMP JUMPDEST SWAP4 SWAP1 SWAP2 PUSH2 0x2AAE JUMP JUMPDEST SWAP1 PUSH0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x1C9 JUMPI DUP1 PUSH0 DUP8 PUSH2 0x1C0 PUSH1 0x1 SWAP5 DUP9 PUSH2 0x1886 JUMP JUMPDEST MLOAD ADD MSTORE ADD PUSH2 0x1A8 JUMP JUMPDEST POP PUSH2 0x23D PUSH2 0x24B PUSH2 0x286 SWAP5 PUSH2 0x203 PUSH0 SWAP5 DUP9 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x1E7 DUP6 PUSH2 0x130F JUMP JUMPDEST ADDRESS DUP6 MSTORE PUSH1 0x20 DUP6 ADD MSTORE PUSH0 NOT PUSH1 0x40 DUP6 ADD MSTORE DUP7 PUSH1 0x60 DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x1576 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x8A12A08C00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x1633 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x1347 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP3 PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x11F0 JUMP JUMPDEST SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x33E JUMPI PUSH2 0x2F0 SWAP3 PUSH2 0x2DB SWAP2 PUSH0 SWAP2 PUSH2 0x31C JUMPI JUMPDEST POP PUSH1 0x20 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x17C9 JUMP JUMPDEST SWAP1 SWAP4 SWAP2 SWAP3 PUSH2 0x2F4 JUMPI JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x1124 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH0 PUSH32 0x0 TSTORE PUSH2 0x2E4 JUMP JUMPDEST PUSH2 0x338 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x330 DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1742 JUMP JUMPDEST DUP5 PUSH2 0x2CB JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x349 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x349 JUMPI PUSH2 0x3BF PUSH2 0x3B9 PUSH2 0x2F0 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1191 JUMP JUMPDEST SWAP1 PUSH2 0x1990 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x1215 JUMP JUMPDEST CALLVALUE PUSH2 0x349 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x349 JUMPI PUSH2 0x413 CALLDATASIZE PUSH2 0x10BF JUMP JUMPDEST PUSH2 0x41B PUSH2 0x1B3A JUMP JUMPDEST PUSH2 0x423 PUSH2 0x1B67 JUMP JUMPDEST PUSH2 0x451 PUSH2 0x2F0 PUSH2 0x432 DUP4 PUSH2 0x2AF0 JUMP JUMPDEST SWAP2 SWAP4 SWAP1 SWAP5 PUSH2 0x44B PUSH1 0x60 PUSH2 0x444 DUP4 PUSH2 0x1539 JUMP JUMPDEST SWAP3 ADD PUSH2 0x154D JUMP JUMPDEST SWAP1 PUSH2 0x291E JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x1124 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x349 JUMPI PUSH2 0x4AD SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x14B9 JUMP JUMPDEST SWAP1 PUSH2 0x4B6 PUSH2 0x13AC JUMP JUMPDEST SWAP1 PUSH1 0x64 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x349 JUMPI PUSH2 0x23D PUSH2 0x54C PUSH2 0x286 SWAP5 PUSH2 0x512 PUSH2 0x4DD PUSH0 SWAP6 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x11C2 JUMP JUMPDEST PUSH2 0x4E6 CALLER PUSH2 0x2AAE JUMP JUMPDEST SWAP8 PUSH1 0x40 MLOAD SWAP5 PUSH2 0x4F4 DUP7 PUSH2 0x130F JUMP JUMPDEST CALLER DUP7 MSTORE PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP7 ADD MSTORE ISZERO ISZERO PUSH1 0x60 DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x1576 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x945ED33F00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x18C7 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP3 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x11F0 JUMP JUMPDEST CALLVALUE PUSH2 0x349 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x349 JUMPI PUSH2 0x2F0 PUSH2 0x5EA PUSH2 0x5D5 CALLDATASIZE PUSH2 0x10BF JUMP JUMPDEST PUSH2 0x5DD PUSH2 0x1B3A JUMP JUMPDEST PUSH2 0x5E5 PUSH2 0x1B67 JUMP JUMPDEST PUSH2 0x1C30 JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 SWAP5 SWAP3 SWAP5 TSTORE PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x1124 JUMP JUMPDEST CALLVALUE PUSH2 0x349 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH1 0x20 PUSH32 0x0 TLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x349 JUMPI PUSH2 0x2F0 PUSH2 0x5EA PUSH2 0x675 CALLDATASIZE PUSH2 0x10BF JUMP JUMPDEST PUSH2 0x67D PUSH2 0x1B3A JUMP JUMPDEST PUSH2 0x685 PUSH2 0x1B67 JUMP JUMPDEST PUSH2 0x2AF0 JUMP JUMPDEST CALLVALUE PUSH2 0x349 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH0 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0x7BD JUMPI JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP6 LT DUP5 EQ PUSH2 0x790 JUMPI DUP6 DUP8 SWAP5 DUP7 DUP7 MSTORE SWAP2 DUP3 PUSH0 EQ PUSH2 0x752 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x6F9 JUMPI JUMPDEST POP PUSH2 0x6E5 SWAP3 POP SUB DUP4 PUSH2 0x1347 JUMP JUMPDEST PUSH2 0x2F0 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x11F0 JUMP JUMPDEST PUSH0 DUP1 DUP1 MSTORE DUP6 SWAP3 POP SWAP1 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP6 DUP4 LT PUSH2 0x73A JUMPI POP POP PUSH2 0x6E5 SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x6D8 JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x723 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0x6E5 SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0x6D8 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0x6B4 JUMP JUMPDEST CALLVALUE PUSH2 0x349 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x349 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x349 JUMPI PUSH2 0x833 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x14B9 JUMP JUMPDEST SWAP1 PUSH2 0x83C PUSH2 0x1396 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x349 JUMPI PUSH2 0x857 PUSH2 0x85F SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x11C2 JUMP JUMPDEST SWAP3 SWAP1 SWAP2 PUSH2 0x2AAE JUMP JUMPDEST SWAP1 PUSH0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x894 JUMPI DUP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH2 0x88B PUSH1 0x1 SWAP5 DUP10 PUSH2 0x1886 JUMP JUMPDEST MLOAD ADD MSTORE ADD PUSH2 0x862 JUMP JUMPDEST POP PUSH2 0x23D PUSH2 0x24B DUP6 PUSH2 0x8B2 PUSH0 SWAP5 PUSH2 0x286 SWAP8 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x1E7 DUP6 PUSH2 0x130F JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x5A3C398700000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x18C7 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x349 JUMPI PUSH2 0x919 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x14B9 JUMP JUMPDEST SWAP1 PUSH2 0x922 PUSH2 0x13AC JUMP JUMPDEST SWAP1 PUSH1 0x64 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x349 JUMPI PUSH2 0x23D PUSH2 0x54C PUSH2 0x286 SWAP5 PUSH2 0x949 PUSH2 0x4DD PUSH0 SWAP6 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x11C2 JUMP JUMPDEST PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x8A465F600000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x1633 JUMP JUMPDEST CALLVALUE PUSH2 0x349 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD GT PUSH2 0x349 JUMPI CALLDATASIZE PUSH1 0x23 PUSH1 0x4 CALLDATALOAD ADD SLT ISZERO PUSH2 0x349 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD GT PUSH2 0x349 JUMPI CALLDATASIZE PUSH1 0x24 PUSH1 0xC0 PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD MUL PUSH1 0x4 CALLDATALOAD ADD ADD GT PUSH2 0x349 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x349 JUMPI PUSH2 0xA3C SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1191 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD GT PUSH2 0x349 JUMPI PUSH1 0x60 PUSH1 0x3 NOT PUSH1 0x44 CALLDATALOAD CALLDATASIZE SUB ADD SLT PUSH2 0x349 JUMPI PUSH1 0x64 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x349 JUMPI PUSH2 0xA7D SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x11C2 JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x349 JUMPI PUSH2 0xA9D SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1191 JUMP JUMPDEST SWAP5 SWAP1 SWAP4 PUSH2 0xAA8 PUSH2 0x1B3A JUMP JUMPDEST DUP1 PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD SUB PUSH2 0xFED JUMPI PUSH0 JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD DUP2 LT PUSH2 0xD4A JUMPI POP POP POP PUSH1 0x44 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD PUSH1 0x44 CALLDATALOAD CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x349 JUMPI DUP2 PUSH1 0x44 CALLDATALOAD ADD PUSH1 0x4 DUP2 ADD CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x349 JUMPI PUSH1 0x24 DUP3 PUSH1 0x7 SHL CALLDATASIZE SUB SWAP2 ADD SGT PUSH2 0x349 JUMPI PUSH2 0xB5B JUMPI JUMPDEST PUSH2 0x2F0 PUSH2 0x3BF DUP7 DUP7 PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH2 0x1990 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP3 SWAP5 PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x349 JUMPI PUSH1 0x40 MLOAD SWAP5 PUSH32 0x2A2D80D100000000000000000000000000000000000000000000000000000000 DUP7 MSTORE CALLER PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x60 PUSH1 0x24 DUP8 ADD MSTORE PUSH1 0xC4 DUP7 ADD SWAP3 PUSH1 0x44 CALLDATALOAD ADD PUSH1 0x24 DUP2 ADD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 DUP4 ADD CALLDATALOAD GT PUSH2 0x349 JUMPI PUSH1 0x4 DUP3 ADD CALLDATALOAD PUSH1 0x7 SHL CALLDATASIZE SUB DUP6 SGT PUSH2 0x349 JUMPI PUSH1 0x60 PUSH1 0x64 DUP10 ADD MSTORE PUSH1 0x4 DUP3 ADD CALLDATALOAD SWAP1 MSTORE SWAP2 SWAP3 DUP7 SWAP3 PUSH1 0xE4 DUP5 ADD SWAP3 SWAP2 SWAP1 PUSH0 SWAP1 JUMPDEST PUSH1 0x4 DUP2 ADD CALLDATALOAD DUP3 LT PUSH2 0xCCC JUMPI POP POP POP PUSH1 0x20 SWAP2 PUSH1 0x1F NOT PUSH1 0x1F DUP7 PUSH0 SWAP8 DUP8 SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xC40 PUSH1 0x24 PUSH1 0x44 CALLDATALOAD ADD PUSH2 0x1382 JUMP JUMPDEST AND PUSH1 0x84 DUP9 ADD MSTORE PUSH1 0x44 DUP1 CALLDATALOAD ADD CALLDATALOAD PUSH1 0xA4 DUP9 ADD MSTORE PUSH1 0x3 NOT DUP8 DUP8 SUB ADD PUSH1 0x44 DUP9 ADD MSTORE DUP2 DUP7 MSTORE DUP8 DUP7 ADD CALLDATACOPY DUP8 DUP7 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD SUB ADD DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x33E JUMPI PUSH2 0x2F0 SWAP4 PUSH2 0x3BF SWAP4 PUSH2 0xCBD JUMPI JUMPDEST DUP3 SWAP5 POP DUP2 SWAP4 POP PUSH2 0xB2B JUMP JUMPDEST PUSH2 0xCC6 SWAP1 PUSH2 0x12FB JUMP JUMPDEST DUP5 PUSH2 0xCB2 JUMP JUMPDEST SWAP2 SWAP6 SWAP5 POP SWAP2 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xCE3 DUP8 PUSH2 0x1382 JUMP JUMPDEST AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP8 ADD CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP1 SWAP4 SUB PUSH2 0x349 JUMPI PUSH1 0x4 SWAP3 PUSH1 0x1 SWAP3 DUP3 ADD MSTORE PUSH2 0xD13 PUSH1 0x40 DUP10 ADD PUSH2 0x2A9B JUMP JUMPDEST PUSH6 0xFFFFFFFFFFFF DUP1 SWAP2 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0xD2E PUSH1 0x60 DUP11 ADD PUSH2 0x2A9B JUMP JUMPDEST AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP1 SWAP2 ADD SWAP8 ADD SWAP4 ADD SWAP1 POP DUP9 SWAP5 SWAP6 SWAP4 SWAP3 SWAP2 PUSH2 0xC0F JUMP JUMPDEST PUSH2 0xD5F PUSH2 0xD58 DUP3 DUP5 DUP7 PUSH2 0x1B1F JUMP JUMPDEST CALLDATASIZE SWAP2 PUSH2 0x1576 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xD6B DUP2 PUSH2 0x1296 JUMP JUMPDEST PUSH0 DUP2 MSTORE PUSH1 0x20 SWAP2 PUSH0 DUP4 DUP4 ADD MSTORE PUSH0 PUSH1 0x40 DUP4 ADD MSTORE DUP3 DUP2 ADD MLOAD SWAP1 PUSH1 0x60 PUSH1 0x40 DUP3 ADD MLOAD SWAP2 ADD MLOAD PUSH0 BYTE SWAP2 DUP4 MSTORE DUP4 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xC0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP2 DUP6 MUL PUSH1 0x4 CALLDATALOAD ADD CALLDATASIZE SUB ADD SLT PUSH2 0x349 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0xDD8 DUP3 PUSH2 0x12DF JUMP JUMPDEST PUSH2 0xDEB PUSH1 0x24 PUSH1 0xC0 DUP7 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x1382 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH2 0xE01 PUSH1 0x44 PUSH1 0xC0 DUP8 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x1382 JUMP JUMPDEST SWAP1 DUP2 DUP6 DUP6 ADD MSTORE PUSH2 0xE1A PUSH1 0x64 PUSH1 0xC0 DUP9 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x1382 JUMP JUMPDEST PUSH1 0x40 DUP6 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x4 CALLDATALOAD PUSH1 0xC0 DUP9 MUL ADD PUSH1 0x84 DUP2 ADD CALLDATALOAD PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0xA4 DUP2 ADD CALLDATALOAD PUSH1 0x80 DUP8 ADD MSTORE PUSH1 0xC4 ADD CALLDATALOAD PUSH1 0xA0 DUP7 ADD MSTORE DUP4 ADD MLOAD DUP4 MLOAD SWAP4 DUP7 ADD MLOAD PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EXTCODESIZE ISZERO PUSH2 0x349 JUMPI PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 PUSH1 0xE4 SWAP5 DUP12 SWAP9 DUP5 SWAP9 PUSH1 0xC4 PUSH1 0xC0 PUSH1 0x40 MLOAD SWAP13 DUP14 SWAP12 DUP13 SWAP11 PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP13 MSTORE AND PUSH1 0x4 DUP12 ADD MSTORE ADDRESS PUSH1 0x24 DUP12 ADD MSTORE PUSH1 0x84 DUP3 DUP3 MUL PUSH1 0x4 CALLDATALOAD ADD ADD CALLDATALOAD PUSH1 0x44 DUP12 ADD MSTORE MUL PUSH1 0x4 CALLDATALOAD ADD ADD CALLDATALOAD PUSH1 0x64 DUP9 ADD MSTORE PUSH1 0x84 DUP8 ADD MSTORE PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xC4 DUP6 ADD MSTORE AND GAS CALL SWAP1 DUP2 PUSH2 0xFDE JUMPI JUMPDEST POP PUSH2 0xFD4 JUMPI PUSH2 0xEF7 PUSH2 0x2A6C JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 MLOAD AND SWAP1 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP4 ADD MLOAD AND PUSH1 0x44 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x33E JUMPI PUSH0 SWAP3 PUSH2 0xFA4 JUMPI JUMPDEST POP PUSH1 0x60 ADD MLOAD SUB PUSH2 0xF6F JUMPI POP POP PUSH1 0x1 SWAP1 JUMPDEST ADD PUSH2 0xAB7 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0xF7C JUMPI DUP1 MLOAD SWAP2 ADD REVERT JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP DUP4 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0xFCD JUMPI JUMPDEST PUSH2 0xFBC DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x349 JUMPI MLOAD SWAP1 PUSH1 0x60 PUSH2 0xF59 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xFB2 JUMP JUMPDEST POP POP PUSH1 0x1 SWAP1 PUSH2 0xF69 JUMP JUMPDEST PUSH2 0xFE7 SWAP1 PUSH2 0x12FB JUMP JUMPDEST DUP11 PUSH2 0xEEA JUMP JUMPDEST PUSH32 0xAAAD13F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x349 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x349 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x349 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x349 JUMPI PUSH2 0x10A0 CALLDATASIZE PUSH2 0x10BF JUMP JUMPDEST PUSH2 0x10A8 PUSH2 0x1B3A JUMP JUMPDEST PUSH2 0x10B0 PUSH2 0x1B67 JUMP JUMPDEST PUSH2 0x451 PUSH2 0x2F0 PUSH2 0x432 DUP4 PUSH2 0x1C30 JUMP JUMPDEST PUSH1 0x3 NOT SWAP1 PUSH1 0x20 DUP3 DUP3 ADD SLT PUSH2 0x349 JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x349 JUMPI DUP3 PUSH1 0xA0 SWAP3 SUB ADD SLT PUSH2 0x349 JUMPI PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1110 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1102 JUMP JUMPDEST SWAP4 SWAP3 SWAP1 PUSH2 0x1139 SWAP1 PUSH1 0x60 DUP7 MSTORE PUSH1 0x60 DUP7 ADD SWAP1 PUSH2 0x10F1 JUMP JUMPDEST SWAP4 PUSH1 0x20 SWAP5 DUP2 DUP2 SUB PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP1 DUP6 MLOAD SWAP3 DUP4 DUP2 MSTORE ADD SWAP5 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x1174 JUMPI POP POP POP PUSH2 0x1171 SWAP4 SWAP5 POP PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x10F1 JUMP JUMPDEST SWAP1 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP7 MSTORE SWAP5 DUP8 ADD SWAP5 SWAP2 DUP8 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x1154 JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x349 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x349 JUMPI PUSH1 0x20 DUP1 DUP6 ADD SWAP5 DUP5 PUSH1 0x5 SHL ADD ADD GT PUSH2 0x349 JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x349 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x349 JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x349 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD SWAP1 PUSH1 0x20 DUP4 MSTORE DUP4 MLOAD DUP1 SWAP3 MSTORE PUSH1 0x40 DUP4 ADD SWAP3 PUSH1 0x20 PUSH1 0x40 DUP5 PUSH1 0x5 SHL DUP4 ADD ADD SWAP6 ADD SWAP4 PUSH0 SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x124A JUMPI POP POP POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 DUP5 DUP1 PUSH2 0x1286 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP7 PUSH1 0x1 SWAP7 SUB ADD DUP8 MSTORE DUP11 MLOAD PUSH2 0x11F0 JUMP JUMPDEST SWAP9 ADD SWAP4 ADD SWAP4 ADD SWAP2 SWAP5 SWAP4 SWAP3 SWAP1 PUSH2 0x123A JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x12B2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0xC0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x12B2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x12B2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x12B2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x12B2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x12B2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x12B2 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x349 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x349 JUMPI JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x349 JUMPI JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x80 DUP2 DUP5 SUB SLT PUSH2 0x349 JUMPI PUSH1 0x40 SWAP1 DUP2 MLOAD SWAP2 PUSH1 0x80 DUP4 ADD SWAP5 PUSH8 0xFFFFFFFFFFFFFFFF SWAP6 DUP5 DUP2 LT DUP8 DUP3 GT OR PUSH2 0x12B2 JUMPI DUP3 MSTORE DUP4 SWAP6 PUSH2 0x13F5 DUP5 PUSH2 0x1382 JUMP JUMPDEST DUP6 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP6 ADD CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x349 JUMPI DUP5 ADD DUP3 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x349 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH2 0x141E DUP3 PUSH2 0x136A JUMP JUMPDEST SWAP4 PUSH2 0x142B DUP7 MLOAD SWAP6 DUP7 PUSH2 0x1347 JUMP JUMPDEST DUP3 DUP6 MSTORE DUP4 DUP6 ADD SWAP1 DUP5 PUSH1 0x60 DUP1 SWAP6 MUL DUP5 ADD ADD SWAP3 DUP2 DUP5 GT PUSH2 0x349 JUMPI DUP6 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x1469 JUMPI POP POP POP POP POP DUP5 ADD MSTORE DUP2 DUP2 ADD CALLDATALOAD SWAP1 DUP4 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 ADD CALLDATALOAD SWAP2 ADD MSTORE JUMP JUMPDEST DUP5 DUP4 DUP4 SUB SLT PUSH2 0x349 JUMPI DUP8 MLOAD SWAP1 PUSH2 0x147E DUP3 PUSH2 0x1296 JUMP JUMPDEST PUSH2 0x1487 DUP5 PUSH2 0x1382 JUMP JUMPDEST DUP3 MSTORE PUSH2 0x1494 DUP8 DUP6 ADD PUSH2 0x1382 JUMP JUMPDEST DUP8 DUP4 ADD MSTORE DUP9 DUP5 ADD CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x349 JUMPI DUP3 DUP9 SWAP3 DUP12 DUP10 SWAP6 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x1447 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x349 JUMPI DUP1 CALLDATALOAD SWAP2 PUSH1 0x20 SWAP2 PUSH2 0x14D3 DUP5 PUSH2 0x136A JUMP JUMPDEST SWAP4 PUSH2 0x14E1 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1347 JUMP JUMPDEST DUP1 DUP6 MSTORE DUP4 DUP1 DUP7 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP3 DUP1 DUP5 GT PUSH2 0x349 JUMPI DUP5 DUP4 ADD SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x150C JUMPI POP POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP3 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x349 JUMPI DUP7 SWAP2 PUSH2 0x152E DUP5 DUP5 DUP1 SWAP5 DUP10 ADD ADD PUSH2 0x13BB JUMP JUMPDEST DUP2 MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x14FC JUMP JUMPDEST CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x349 JUMPI SWAP1 JUMP JUMPDEST CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x349 JUMPI SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x12B2 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH2 0x1582 DUP3 PUSH2 0x155A JUMP JUMPDEST SWAP2 PUSH2 0x1590 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x1347 JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0x349 JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x80 DUP2 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP4 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 ADD MLOAD SWAP5 PUSH1 0x80 DUP2 DUP7 ADD MSTORE DUP6 MLOAD DUP1 SWAP3 MSTORE DUP1 PUSH1 0xA0 DUP7 ADD SWAP7 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x1600 JUMPI POP POP POP POP POP PUSH1 0x60 DUP2 PUSH1 0x40 DUP3 SWAP4 ADD MLOAD PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD SWAP2 ADD MSTORE SWAP1 JUMP JUMPDEST DUP5 MLOAD DUP1 MLOAD DUP3 AND DUP10 MSTORE DUP1 DUP5 ADD MLOAD DUP3 AND DUP10 DUP6 ADD MSTORE PUSH1 0x40 SWAP1 DUP2 ADD MLOAD ISZERO ISZERO SWAP1 DUP10 ADD MSTORE PUSH1 0x60 SWAP1 SWAP8 ADD SWAP7 SWAP4 DUP3 ADD SWAP4 PUSH1 0x1 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x15DE JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x20 SWAP1 DUP2 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 MLOAD AND DUP2 DUP4 ADD MSTORE DUP1 DUP6 ADD MLOAD SWAP3 PUSH1 0xA0 PUSH1 0x40 DUP5 ADD MSTORE DUP4 MLOAD DUP1 SWAP2 MSTORE PUSH1 0xE0 DUP4 ADD SWAP2 DUP1 PUSH1 0xE0 DUP4 PUSH1 0x5 SHL DUP7 ADD ADD SWAP6 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x16B2 JUMPI POP POP POP POP POP PUSH1 0x80 DUP5 PUSH1 0x40 PUSH2 0x1171 SWAP6 SWAP7 ADD MLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD ISZERO ISZERO DUP3 DUP5 ADD MSTORE ADD MLOAD SWAP1 PUSH1 0xA0 PUSH1 0x1F NOT DUP3 DUP6 SUB ADD SWAP2 ADD MSTORE PUSH2 0x11F0 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP6 DUP4 DUP1 PUSH2 0x16ED DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 DUP11 PUSH1 0x1 SWAP7 SUB ADD DUP7 MSTORE DUP11 MLOAD PUSH2 0x15AC JUMP JUMPDEST SWAP9 ADD SWAP3 ADD SWAP3 ADD SWAP1 SWAP4 SWAP3 SWAP2 PUSH2 0x1676 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x349 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x1713 DUP3 PUSH2 0x155A JUMP JUMPDEST SWAP3 PUSH2 0x1721 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1347 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x349 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x349 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x349 JUMPI PUSH2 0x1171 SWAP3 ADD PUSH2 0x16FC JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x349 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x1783 DUP2 PUSH2 0x136A JUMP JUMPDEST SWAP4 PUSH2 0x1791 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1347 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x349 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x17BA JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x17AC JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x60 DUP3 DUP5 SUB SLT PUSH2 0x349 JUMPI DUP2 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x349 JUMPI DUP5 PUSH2 0x17F5 SWAP2 DUP4 ADD PUSH2 0x1768 JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP1 DUP4 ADD MLOAD DUP6 DUP2 GT PUSH2 0x349 JUMPI DUP4 ADD SWAP1 DUP3 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x349 JUMPI DUP2 MLOAD SWAP2 PUSH2 0x181D DUP4 PUSH2 0x136A JUMP JUMPDEST SWAP3 PUSH2 0x182B PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1347 JUMP JUMPDEST DUP1 DUP5 MSTORE DUP3 DUP1 DUP6 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 DUP6 DUP4 GT PUSH2 0x349 JUMPI DUP4 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1867 JUMPI POP POP POP POP SWAP4 PUSH1 0x40 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x349 JUMPI PUSH2 0x1171 SWAP3 ADD PUSH2 0x1768 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x349 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1845 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x189A JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x20 SWAP1 DUP2 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 MLOAD AND DUP2 DUP4 ADD MSTORE DUP1 DUP6 ADD MLOAD SWAP3 PUSH1 0xA0 PUSH1 0x40 DUP5 ADD MSTORE DUP4 MLOAD DUP1 SWAP2 MSTORE PUSH1 0xE0 DUP4 ADD SWAP2 DUP1 PUSH1 0xE0 DUP4 PUSH1 0x5 SHL DUP7 ADD ADD SWAP6 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x1946 JUMPI POP POP POP POP POP PUSH1 0x80 DUP5 PUSH1 0x40 PUSH2 0x1171 SWAP6 SWAP7 ADD MLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD ISZERO ISZERO DUP3 DUP5 ADD MSTORE ADD MLOAD SWAP1 PUSH1 0xA0 PUSH1 0x1F NOT DUP3 DUP6 SUB ADD SWAP2 ADD MSTORE PUSH2 0x11F0 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP6 DUP4 DUP1 PUSH2 0x1981 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20 DUP11 PUSH1 0x1 SWAP7 SUB ADD DUP7 MSTORE DUP11 MLOAD PUSH2 0x15AC JUMP JUMPDEST SWAP9 ADD SWAP3 ADD SWAP3 ADD SWAP1 SWAP4 SWAP3 SWAP2 PUSH2 0x190A JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x199B CALLER PUSH2 0x2AAE JUMP JUMPDEST SWAP1 PUSH32 0x0 SWAP4 DUP5 TLOAD PUSH2 0x1AA6 JUMPI PUSH1 0x1 SWAP1 PUSH1 0x1 DUP7 TSTORE PUSH2 0x19D4 DUP4 PUSH2 0x136A JUMP JUMPDEST SWAP3 PUSH2 0x19E2 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1347 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x1F NOT PUSH2 0x19F1 DUP3 PUSH2 0x136A JUMP JUMPDEST ADD PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x1A95 JUMPI POP POP PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x1A4C JUMPI POP POP POP POP SWAP1 PUSH0 PUSH2 0x1A41 SWAP3 SWAP5 TSTORE PUSH32 0x0 DUP1 TLOAD SWAP2 PUSH2 0x1A43 JUMPI JUMPDEST POP PUSH2 0x38A6 JUMP JUMPDEST JUMP JUMPDEST PUSH0 SWAP1 TSTORE PUSH0 PUSH2 0x1A3B JUMP JUMPDEST DUP1 PUSH2 0x1A79 PUSH0 DUP1 PUSH2 0x1A61 PUSH2 0xD58 DUP10 SWAP7 DUP9 DUP11 PUSH2 0x1B1F JUMP JUMPDEST PUSH1 0x20 DUP2 MLOAD SWAP2 ADD ADDRESS GAS DELEGATECALL PUSH2 0x1A72 PUSH2 0x2A6C JUMP JUMPDEST SWAP1 ADDRESS PUSH2 0x4347 JUMP JUMPDEST PUSH2 0x1A83 DUP3 DUP9 PUSH2 0x1886 JUMP JUMPDEST MSTORE PUSH2 0x1A8E DUP2 DUP8 PUSH2 0x1886 JUMP JUMPDEST POP ADD PUSH2 0x19FF JUMP JUMPDEST DUP1 PUSH1 0x60 PUSH1 0x20 DUP1 SWAP4 DUP10 ADD ADD MSTORE ADD PUSH2 0x19F4 JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP2 CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x349 JUMPI ADD DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x349 JUMPI PUSH1 0x20 ADD SWAP2 DUP2 CALLDATASIZE SUB DUP4 SGT PUSH2 0x349 JUMPI JUMP JUMPDEST SWAP1 DUP3 LT ISZERO PUSH2 0x189A JUMPI PUSH2 0x1B36 SWAP2 PUSH1 0x5 SHL DUP2 ADD SWAP1 PUSH2 0x1ACE JUMP JUMPDEST SWAP1 SWAP2 JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x1AA6 JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x1B99 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x1BCF DUP3 PUSH2 0x136A JUMP JUMPDEST PUSH2 0x1BDC PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x1347 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x1BEC DUP3 SWAP5 PUSH2 0x136A JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x1C03 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD CALLDATALOAD TIMESTAMP GT PUSH2 0x28B8 JUMPI SWAP1 PUSH2 0x1C53 PUSH2 0x1C4C PUSH1 0x20 DUP5 ADD DUP5 PUSH2 0x38E9 JUMP JUMPDEST SWAP1 POP PUSH2 0x1BC5 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST PUSH2 0x1C63 PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x38E9 JUMP JUMPDEST SWAP1 POP DUP2 LT ISZERO PUSH2 0x27BC JUMPI PUSH2 0x1C8D DUP2 PUSH2 0x1C88 PUSH2 0x1C80 PUSH1 0x20 DUP7 ADD DUP7 PUSH2 0x38E9 JUMP JUMPDEST CALLDATASIZE SWAP4 SWAP2 PUSH2 0x393D JUMP JUMPDEST PUSH2 0x13BB JUMP JUMPDEST SWAP4 PUSH1 0x40 DUP6 ADD MLOAD SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 MLOAD AND SWAP1 PUSH1 0x20 DUP8 ADD MLOAD DUP1 MLOAD ISZERO PUSH2 0x189A JUMPI PUSH1 0x20 ADD MLOAD PUSH1 0x40 ADD MLOAD ISZERO ISZERO DUP1 PUSH2 0x27B3 JUMPI JUMPDEST ISZERO PUSH2 0x2758 JUMPI PUSH2 0x1CE1 PUSH2 0x1CCD DUP7 PUSH2 0x1539 JUMP JUMPDEST DUP8 DUP5 PUSH2 0x1CDB PUSH1 0x60 DUP11 ADD PUSH2 0x154D JUMP JUMPDEST SWAP3 PUSH2 0x3CD2 JUMP JUMPDEST PUSH0 JUMPDEST PUSH1 0x20 DUP9 ADD MLOAD MLOAD DUP2 LT ISZERO PUSH2 0x2748 JUMPI PUSH2 0x1CF8 PUSH2 0x397D JUMP JUMPDEST PUSH1 0x20 DUP10 ADD MLOAD MLOAD PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x1C03 JUMPI DUP3 EQ DUP1 PUSH1 0x20 DUP4 ADD MSTORE DUP3 ISZERO DUP3 MSTORE PUSH0 EQ PUSH2 0x2741 JUMPI PUSH1 0x60 DUP10 ADD MLOAD SWAP1 JUMPDEST PUSH2 0x1D30 DUP4 PUSH1 0x20 DUP13 ADD MLOAD PUSH2 0x1886 JUMP JUMPDEST MLOAD PUSH1 0x40 DUP2 ADD MLOAD SWAP1 SWAP2 SWAP1 ISZERO PUSH2 0x1EE3 JUMPI PUSH2 0x1DC8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 MLOAD AND SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 AND DUP6 EQ PUSH0 EQ PUSH2 0x1EDC JUMPI PUSH1 0x1 SWAP5 JUMPDEST PUSH1 0x40 MLOAD SWAP6 PUSH2 0x1D70 DUP8 PUSH2 0x130F JUMP JUMPDEST PUSH0 DUP8 MSTORE PUSH2 0x1D7C DUP2 PUSH2 0x39B3 JUMP JUMPDEST PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x60 SWAP5 DUP6 SWAP2 DUP14 DUP4 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x43583BE500000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x3C17 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x33E JUMPI PUSH0 SWAP5 PUSH2 0x1EA5 JUMPI JUMPDEST POP POP PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x1E8B JUMPI DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH2 0x1E85 SWAP4 PUSH1 0x1 SWAP7 SWAP6 PUSH2 0x1E2D DUP13 DUP13 PUSH2 0x1886 JUMP JUMPDEST MSTORE ADD PUSH2 0x1E5C DUP3 DUP3 MLOAD AND PUSH32 0x0 PUSH2 0x43AB JUMP JUMPDEST POP MLOAD AND PUSH32 0x0 PUSH2 0x43F5 JUMP JUMPDEST ADD PUSH2 0x1CE3 JUMP JUMPDEST PUSH1 0x20 ADD MLOAD SWAP1 SWAP8 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP3 POP PUSH1 0x1 SWAP1 PUSH2 0x1E85 JUMP JUMPDEST PUSH1 0x20 SWAP3 SWAP5 POP SWAP1 DUP2 PUSH2 0x1ECA SWAP3 SWAP1 RETURNDATASIZE LT PUSH2 0x1ED5 JUMPI JUMPDEST PUSH2 0x1EC2 DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x39EA JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP1 PUSH0 PUSH2 0x1E05 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1EB8 JUMP JUMPDEST PUSH0 SWAP5 PUSH2 0x1D63 JUMP JUMPDEST DUP9 DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 SWAP6 SWAP5 MLOAD AND DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND EQ PUSH0 EQ PUSH2 0x2327 JUMPI POP POP DUP2 MLOAD ISZERO SWAP1 POP PUSH2 0x2263 JUMPI DUP9 DUP11 DUP1 ISZERO ISZERO DUP1 PUSH2 0x2248 JUMPI JUMPDEST PUSH2 0x2142 JUMPI JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP3 SWAP2 PUSH2 0x1FD2 DUP3 PUSH2 0x200A SWAP8 DUP12 PUSH0 SWAP6 DUP10 PUSH32 0x0 SWAP3 AND DUP1 DUP9 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP9 KECCAK256 TLOAD PUSH2 0x2131 JUMPI JUMPDEST POP POP POP JUMPDEST PUSH1 0x1 PUSH2 0x1F91 DUP10 DUP4 MLOAD AND PUSH1 0x20 DUP5 ADD SWAP10 DUP12 DUP12 MLOAD AND SWAP1 DUP1 ISZERO DUP11 EQ PUSH2 0x212B JUMPI POP DUP4 SWAP2 PUSH2 0x440E JUMP JUMPDEST SWAP10 SWAP1 SWAP3 MLOAD AND SWAP5 PUSH2 0x1FA6 PUSH1 0x80 SWAP2 DUP3 DUP2 ADD SWAP1 PUSH2 0x1ACE JUMP JUMPDEST SWAP4 SWAP1 SWAP5 PUSH1 0x40 MLOAD SWAP8 PUSH2 0x1FB6 DUP10 PUSH2 0x12DF JUMP JUMPDEST DUP9 MSTORE ADDRESS PUSH1 0x20 DUP10 ADD MSTORE PUSH1 0x40 DUP9 ADD MSTORE PUSH1 0x60 DUP8 ADD MSTORE DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x1576 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP7 DUP2 SWAP3 PUSH32 0x2145789700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x3BA6 JUMP JUMPDEST SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x33E JUMPI PUSH0 SWAP5 PUSH2 0x2101 JUMPI JUMPDEST POP PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x20DE JUMPI SWAP2 PUSH2 0x20B1 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x1 SWAP7 SWAP6 PUSH2 0x206F PUSH2 0x20D9 SWAP7 DUP7 PUSH2 0x1886 JUMP JUMPDEST MLOAD PUSH2 0x207A DUP14 DUP14 PUSH2 0x1886 JUMP JUMPDEST MSTORE PUSH2 0x20A8 DUP3 DUP3 MLOAD AND PUSH32 0x0 PUSH2 0x43AB JUMP JUMPDEST POP MLOAD AND SWAP3 PUSH2 0x1886 JUMP JUMPDEST MLOAD SWAP1 PUSH32 0x0 PUSH2 0x43F5 JUMP JUMPDEST PUSH2 0x1E85 JUMP JUMPDEST SWAP9 POP PUSH1 0x1 SWAP3 SWAP5 POP PUSH2 0x20F7 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH2 0x1886 JUMP JUMPDEST MLOAD SWAP8 MLOAD AND SWAP3 PUSH2 0x1E85 JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP5 POP PUSH2 0x2121 SWAP1 RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2119 DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3B5E JUMP JUMPDEST POP SWAP5 SWAP2 SWAP1 POP PUSH2 0x2047 JUMP JUMPDEST SWAP2 PUSH2 0x440E JUMP JUMPDEST PUSH2 0x213A SWAP3 PUSH2 0x452C JUMP JUMPDEST PUSH0 DUP3 DUP2 PUSH2 0x1F6A JUMP JUMPDEST POP PUSH2 0x214F SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x1539 JUMP JUMPDEST SWAP2 PUSH2 0x2159 DUP12 PUSH2 0x44E8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x349 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP1 DUP5 AND PUSH1 0x44 DUP3 ADD MSTORE SWAP3 DUP8 AND PUSH1 0x64 DUP5 ADD MSTORE PUSH0 DUP4 DUP1 PUSH1 0x84 DUP2 ADD SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x33E JUMPI DUP11 PUSH2 0x1FD2 DUP14 PUSH2 0x200A SWAP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP8 PUSH0 SWAP6 PUSH2 0x2239 JUMPI JUMPDEST POP SWAP8 POP SWAP3 POP POP SWAP2 SWAP3 SWAP4 POP PUSH2 0x1F1F JUMP JUMPDEST PUSH2 0x2242 SWAP1 PUSH2 0x12FB JUMP JUMPDEST PUSH0 PUSH2 0x222A JUMP JUMPDEST POP PUSH2 0x2252 DUP3 PUSH2 0x1539 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS EQ ISZERO PUSH2 0x1F1A JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 MLOAD AND SWAP3 DUP1 EXTCODESIZE ISZERO PUSH2 0x349 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP1 SWAP5 AND PUSH1 0x4 DUP6 ADD MSTORE ADDRESS PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD DUP13 SWAP1 MSTORE PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x64 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL DUP1 ISZERO PUSH2 0x33E JUMPI DUP11 PUSH2 0x1FD2 DUP14 PUSH2 0x200A SWAP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP8 PUSH0 SWAP6 PUSH2 0x2318 JUMPI JUMPDEST POP PUSH2 0x1F6E JUMP JUMPDEST PUSH2 0x2321 SWAP1 PUSH2 0x12FB JUMP JUMPDEST PUSH0 PUSH2 0x2312 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP8 SWAP7 SWAP5 SWAP8 ADD MLOAD AND SWAP1 DUP10 DUP2 DUP4 EQ PUSH0 EQ PUSH2 0x25CC JUMPI PUSH2 0x23C2 SWAP3 POP PUSH2 0x23FA SWAP8 SWAP2 POP PUSH1 0x1 PUSH2 0x2368 PUSH0 SWAP7 SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 DUP12 MLOAD AND PUSH2 0x440E JUMP JUMPDEST POP SWAP3 DUP3 DUP10 MLOAD AND SWAP6 PUSH1 0x20 DUP10 ADD MLOAD ISZERO ISZERO DUP9 EQ PUSH2 0x25A3 JUMPI PUSH2 0x2385 DUP3 PUSH2 0x1539 JUMP JUMPDEST SWAP5 JUMPDEST PUSH2 0x2396 PUSH1 0x80 SWAP4 DUP5 DUP2 ADD SWAP1 PUSH2 0x1ACE JUMP JUMPDEST SWAP6 SWAP1 SWAP7 PUSH1 0x40 MLOAD SWAP10 PUSH2 0x23A6 DUP12 PUSH2 0x12DF JUMP JUMPDEST DUP11 MSTORE AND PUSH1 0x20 DUP10 ADD MSTORE PUSH1 0x40 DUP9 ADD MSTORE PUSH1 0x60 DUP8 ADD MSTORE DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x1576 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP3 PUSH32 0x4AF29EC400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x3AED JUMP JUMPDEST SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x33E JUMPI PUSH0 SWAP4 PUSH2 0x2579 JUMPI JUMPDEST POP PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x24B8 JUMPI DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH2 0x20D9 SWAP4 PUSH1 0x1 SWAP7 SWAP6 PUSH2 0x245E DUP13 DUP13 PUSH2 0x1886 JUMP JUMPDEST MSTORE PUSH2 0x248E DUP4 DUP4 DUP4 ADD MLOAD AND PUSH32 0x0 PUSH2 0x43AB JUMP JUMPDEST POP ADD MLOAD AND PUSH32 0x0 PUSH2 0x43F5 JUMP JUMPDEST PUSH1 0x20 DUP2 DUP2 ADD MLOAD SWAP2 MLOAD PUSH1 0x40 MLOAD PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD DUP6 SWAP1 MSTORE SWAP4 SWAP11 POP SWAP1 SWAP2 AND SWAP5 POP DUP2 DUP1 PUSH1 0x44 DUP2 ADD SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x33E JUMPI PUSH2 0x254E JUMPI JUMPDEST POP PUSH1 0x1 SWAP1 PUSH2 0x1E85 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2572 JUMPI JUMPDEST PUSH2 0x2564 DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x349 JUMPI PUSH0 PUSH2 0x2545 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x255A JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP4 POP PUSH2 0x2599 SWAP1 RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2591 DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3A71 JUMP JUMPDEST POP SWAP4 SWAP2 SWAP1 POP PUSH2 0x2437 JUMP JUMPDEST DUP4 PUSH32 0x0 AND SWAP5 PUSH2 0x2387 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x265B SWAP6 PUSH2 0x2623 SWAP4 SWAP5 SWAP6 PUSH2 0x25ED PUSH1 0x80 SWAP12 DUP13 DUP2 ADD SWAP1 PUSH2 0x1ACE JUMP JUMPDEST SWAP4 SWAP1 SWAP5 PUSH1 0x40 MLOAD SWAP8 PUSH2 0x25FD DUP10 PUSH2 0x132B JUMP JUMPDEST PUSH0 DUP10 MSTORE PUSH1 0x20 DUP10 ADD MSTORE AND PUSH1 0x40 DUP8 ADD MSTORE PUSH1 0x60 SWAP11 DUP12 SWAP8 DUP9 DUP9 ADD MSTORE DUP7 ADD MSTORE PUSH1 0xA0 DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x1576 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x2BFB780C00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x3A05 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x33E JUMPI PUSH0 SWAP5 PUSH2 0x271A JUMPI JUMPDEST POP POP PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x1E8B JUMPI DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH2 0x20D9 SWAP4 PUSH1 0x1 SWAP7 SWAP6 PUSH2 0x26C0 DUP13 DUP13 PUSH2 0x1886 JUMP JUMPDEST MSTORE PUSH2 0x26F0 DUP4 DUP4 DUP4 ADD MLOAD AND PUSH32 0x0 PUSH2 0x43AB JUMP JUMPDEST POP ADD MLOAD AND PUSH32 0x0 PUSH2 0x43F5 JUMP JUMPDEST PUSH1 0x20 SWAP3 SWAP5 POP SWAP1 DUP2 PUSH2 0x2736 SWAP3 SWAP1 RETURNDATASIZE LT PUSH2 0x1ED5 JUMPI PUSH2 0x1EC2 DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST SWAP2 POP POP SWAP3 SWAP1 PUSH0 PUSH2 0x2698 JUMP JUMPDEST PUSH0 SWAP1 PUSH2 0x1D22 JUMP JUMPDEST POP SWAP2 SWAP6 POP SWAP1 SWAP4 POP POP PUSH1 0x1 ADD PUSH2 0x1C56 JUMP JUMPDEST PUSH2 0x2782 DUP3 PUSH32 0x0 PUSH2 0x43AB JUMP JUMPDEST POP PUSH2 0x27AE DUP7 DUP4 PUSH32 0x0 PUSH2 0x43F5 JUMP JUMPDEST PUSH2 0x1CE1 JUMP JUMPDEST POP ORIGIN ISZERO ISZERO PUSH2 0x1CBC JUMP JUMPDEST POP POP PUSH2 0x27E7 PUSH32 0x0 PUSH2 0x3C66 JUMP JUMPDEST SWAP2 PUSH2 0x27F2 DUP4 MLOAD PUSH2 0x1BC5 JUMP JUMPDEST PUSH32 0x0 SWAP2 PUSH32 0x0 SWAP2 SWAP1 PUSH0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x28AF JUMPI PUSH1 0x1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x2858 DUP4 DUP12 PUSH2 0x1886 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP6 PUSH1 0x20 MSTORE PUSH2 0x2886 PUSH1 0x40 PUSH0 KECCAK256 TLOAD DUP3 PUSH2 0x2873 DUP6 DUP14 PUSH2 0x1886 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP9 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP1 PUSH2 0x1BF6 JUMP JUMPDEST PUSH2 0x2890 DUP4 DUP8 PUSH2 0x1886 JUMP JUMPDEST MSTORE PUSH2 0x289B DUP3 DUP11 PUSH2 0x1886 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP6 PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 TSTORE ADD PUSH2 0x2839 JUMP JUMPDEST POP SWAP5 SWAP4 SWAP2 POP SWAP2 POP JUMP JUMPDEST PUSH32 0xE08B8AF000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH0 NOT DUP3 ADD SWAP2 DUP3 SGT PUSH1 0x1 AND PUSH2 0x1C03 JUMPI JUMP JUMPDEST PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP2 EQ PUSH2 0x1C03 JUMPI PUSH0 NOT ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0x0 SWAP1 DUP2 TLOAD PUSH32 0x0 PUSH2 0x296E DUP2 TLOAD PUSH2 0x28E0 JUMP JUMPDEST SWAP1 PUSH32 0x0 SWAP2 JUMPDEST PUSH0 DUP2 SLT ISZERO PUSH2 0x2A2F JUMPI POP POP POP PUSH2 0x29A6 SWAP1 PUSH2 0x28E0 JUMP JUMPDEST SWAP2 PUSH32 0x0 SWAP3 JUMPDEST PUSH0 DUP2 SLT ISZERO PUSH2 0x29DF JUMPI POP POP POP POP PUSH2 0x1A41 SWAP1 PUSH2 0x38A6 JUMP JUMPDEST PUSH2 0x2A2A SWAP1 DUP3 PUSH0 MSTORE PUSH2 0x2A24 PUSH1 0x20 PUSH0 DUP4 DUP3 DUP3 KECCAK256 ADD TLOAD SWAP2 DUP3 DUP3 MSTORE DUP9 DUP2 MSTORE DUP9 PUSH1 0x40 SWAP2 PUSH2 0x2A17 DUP11 DUP14 DUP6 DUP8 KECCAK256 TLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP1 PUSH2 0x40A5 JUMP JUMPDEST DUP5 DUP5 MSTORE MSTORE DUP2 KECCAK256 TSTORE DUP5 PUSH2 0x4002 JUMP JUMPDEST POP PUSH2 0x28F1 JUMP JUMPDEST PUSH2 0x29CA JUMP JUMPDEST PUSH2 0x2A67 SWAP1 DUP3 PUSH0 MSTORE PUSH2 0x2A24 PUSH1 0x20 PUSH0 DUP11 DUP8 DUP6 DUP5 DUP5 KECCAK256 ADD TLOAD SWAP4 DUP5 DUP5 MSTORE DUP2 DUP2 MSTORE PUSH2 0x2A17 DUP13 PUSH1 0x40 SWAP5 DUP6 DUP8 KECCAK256 TLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND SWAP1 PUSH2 0x3CD2 JUMP JUMPDEST PUSH2 0x2992 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x2A96 JUMPI RETURNDATASIZE SWAP1 PUSH2 0x2A7D DUP3 PUSH2 0x155A JUMP JUMPDEST SWAP2 PUSH2 0x2A8B PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x1347 JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH6 0xFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x349 JUMPI JUMP JUMPDEST SWAP1 PUSH0 SWAP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 TLOAD AND ISZERO PUSH2 0x2AE6 JUMPI POP POP JUMP JUMPDEST SWAP1 SWAP2 SWAP3 POP TSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x40 DUP3 ADD CALLDATALOAD TIMESTAMP GT PUSH2 0x28B8 JUMPI PUSH2 0x2B0C PUSH2 0x1C4C PUSH1 0x20 DUP5 ADD DUP5 PUSH2 0x38E9 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST PUSH2 0x2B1C PUSH1 0x20 DUP4 ADD DUP4 PUSH2 0x38E9 JUMP JUMPDEST SWAP1 POP DUP2 LT ISZERO PUSH2 0x37C6 JUMPI PUSH2 0x2B39 DUP2 PUSH2 0x1C88 PUSH2 0x1C80 PUSH1 0x20 DUP7 ADD DUP7 PUSH2 0x38E9 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD MLOAD SWAP1 PUSH2 0x2B73 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 MLOAD AND PUSH32 0x0 PUSH2 0x43AB JUMP JUMPDEST POP PUSH1 0x20 DUP2 ADD MLOAD MLOAD PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x1C03 JUMPI JUMPDEST PUSH0 DUP2 SLT ISZERO PUSH2 0x2B99 JUMPI POP POP POP PUSH1 0x1 ADD PUSH2 0x2B0F JUMP JUMPDEST PUSH2 0x2BA7 DUP2 PUSH1 0x20 DUP5 ADD MLOAD PUSH2 0x1886 JUMP JUMPDEST MLOAD PUSH2 0x2BB0 PUSH2 0x397D JUMP JUMPDEST SWAP1 DUP3 ISZERO PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP5 ADD MLOAD MLOAD DUP1 PUSH0 NOT DUP2 ADD GT PUSH2 0x1C03 JUMPI PUSH0 NOT ADD DUP4 EQ DUP1 DUP4 MSTORE PUSH2 0x3784 JUMPI JUMPDEST PUSH1 0x20 DUP3 ADD MLOAD ISZERO PUSH2 0x3749 JUMPI PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 MLOAD AND SWAP2 JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD ISZERO PUSH2 0x2E12 JUMPI DUP4 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x60 SWAP3 PUSH1 0x20 PUSH2 0x2C95 SWAP8 ADD MLOAD ISZERO ISZERO DUP1 PUSH2 0x2E09 JUMPI JUMPDEST PUSH2 0x2DE2 JUMPI JUMPDEST MLOAD AND SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP3 SUB PUSH2 0x2DDB JUMPI PUSH1 0x1 SWAP2 JUMPDEST PUSH1 0x40 MLOAD SWAP3 PUSH2 0x2C41 DUP5 PUSH2 0x130F JUMP JUMPDEST PUSH1 0x1 DUP5 MSTORE PUSH2 0x2C4E DUP2 PUSH2 0x39B3 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE DUP9 DUP4 DUP4 ADD MSTORE PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP3 PUSH32 0x43583BE500000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x3C17 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x33E JUMPI DUP8 SWAP2 DUP12 SWAP2 PUSH0 SWAP6 PUSH2 0x2DB4 JUMPI JUMPDEST POP PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x2DA5 JUMPI PUSH2 0x2D9B SWAP3 DUP5 PUSH2 0x2CF7 PUSH2 0x2DA0 SWAP8 SWAP7 SWAP5 PUSH2 0x2D6A SWAP5 PUSH2 0x1886 JUMP JUMPDEST MSTORE PUSH2 0x2D2B PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH32 0x0 PUSH2 0x43AB JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2D42 DUP5 PUSH1 0x40 DUP11 ADD MLOAD PUSH2 0x39A6 JUMP JUMPDEST SWAP2 AND PUSH32 0x0 PUSH2 0x43F5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 MLOAD AND PUSH32 0x0 PUSH2 0x43F5 JUMP JUMPDEST PUSH2 0x28F1 JUMP JUMPDEST PUSH2 0x2B86 JUMP JUMPDEST POP POP POP PUSH2 0x2DA0 SWAP2 SWAP4 POP SWAP3 PUSH2 0x28F1 JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP6 POP PUSH2 0x2DD1 SWAP1 PUSH1 0x60 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x1ED5 JUMPI PUSH2 0x1EC2 DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST POP SWAP6 SWAP2 SWAP1 POP PUSH2 0x2CD6 JUMP JUMPDEST PUSH0 SWAP2 PUSH2 0x2C34 JUMP JUMPDEST PUSH2 0x2E04 PUSH2 0x2DEE DUP14 PUSH2 0x1539 JUMP JUMPDEST DUP14 DUP12 PUSH2 0x1CDB DUP9 PUSH1 0x40 DUP9 DUP5 MLOAD AND SWAP4 ADD MLOAD SWAP4 ADD PUSH2 0x154D JUMP JUMPDEST PUSH2 0x2C1D JUMP JUMPDEST POP ORIGIN ISZERO ISZERO PUSH2 0x2C18 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 MLOAD AND DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND EQ PUSH0 EQ PUSH2 0x332C JUMPI POP PUSH1 0x20 DUP5 ADD MLOAD PUSH2 0x323E JUMPI POP PUSH1 0x40 MLOAD SWAP3 PUSH32 0x9678709200000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x20 DUP5 PUSH1 0x24 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x33E JUMPI PUSH0 SWAP5 PUSH2 0x320A JUMPI JUMPDEST POP DUP4 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 MLOAD AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x349 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH0 DUP6 DUP1 PUSH1 0x64 DUP2 ADD SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x33E JUMPI PUSH2 0x2FE1 SWAP6 PUSH0 SWAP3 PUSH2 0x31FB JUMPI JUMPDEST POP JUMPDEST PUSH2 0x1FD2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2F9D DUP12 DUP3 DUP6 MLOAD AND DUP4 PUSH1 0x20 DUP8 ADD MLOAD AND SWAP1 PUSH2 0x440E JUMP JUMPDEST POP SWAP3 MLOAD AND SWAP2 DUP13 PUSH1 0x2 PUSH2 0x2FB4 PUSH1 0x80 SWAP3 DUP4 DUP2 ADD SWAP1 PUSH2 0x1ACE JUMP JUMPDEST SWAP3 SWAP1 SWAP4 PUSH1 0x40 MLOAD SWAP7 PUSH2 0x2FC4 DUP9 PUSH2 0x12DF JUMP JUMPDEST DUP8 MSTORE ADDRESS PUSH1 0x20 DUP9 ADD MSTORE DUP10 PUSH1 0x40 DUP9 ADD MSTORE PUSH1 0x60 DUP8 ADD MSTORE DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x1576 JUMP JUMPDEST SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x33E JUMPI PUSH0 SWAP5 PUSH2 0x31D8 JUMPI JUMPDEST POP PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x30C4 JUMPI SWAP1 DUP3 SWAP2 PUSH2 0x2DA0 SWAP5 SWAP4 PUSH2 0x303A DUP10 DUP14 PUSH2 0x1886 JUMP JUMPDEST MSTORE PUSH2 0x306F DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH32 0x0 PUSH2 0x43F5 JUMP JUMPDEST DUP1 DUP4 LT DUP1 PUSH2 0x30A9 JUMPI JUMPDEST PUSH2 0x3085 JUMPI JUMPDEST POP POP POP PUSH2 0x28F1 JUMP JUMPDEST PUSH2 0x309B PUSH2 0x30A1 SWAP4 PUSH2 0x3095 DUP12 PUSH2 0x1539 JUMP JUMPDEST SWAP3 PUSH2 0x39A6 JUMP JUMPDEST SWAP2 PUSH2 0x4541 JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0x307D JUMP JUMPDEST POP ADDRESS PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x30BC DUP12 PUSH2 0x1539 JUMP JUMPDEST AND EQ ISZERO PUSH2 0x3078 JUMP JUMPDEST SWAP5 POP SWAP1 DUP1 SWAP5 DUP1 DUP3 LT PUSH2 0x30DD JUMPI JUMPDEST POP POP POP PUSH2 0x2DA0 SWAP1 PUSH2 0x28F1 JUMP JUMPDEST SWAP2 PUSH2 0x30ED PUSH1 0x20 SWAP3 PUSH2 0x316C SWAP5 PUSH2 0x39A6 JUMP JUMPDEST SWAP1 PUSH2 0x3122 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP4 PUSH2 0x4541 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP3 DUP4 SWAP3 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x33E JUMPI PUSH2 0x31AD JUMPI JUMPDEST DUP1 DUP1 PUSH2 0x30D1 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x31D1 JUMPI JUMPDEST PUSH2 0x31C3 DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x349 JUMPI PUSH0 PUSH2 0x31A6 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x31B9 JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP5 POP PUSH2 0x31F0 SWAP1 RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2119 DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST POP SWAP1 SWAP5 SWAP2 SWAP1 POP PUSH2 0x301E JUMP JUMPDEST PUSH2 0x3204 SWAP1 PUSH2 0x12FB JUMP JUMPDEST PUSH0 PUSH2 0x2F7B JUMP JUMPDEST SWAP1 SWAP4 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3236 JUMPI JUMPDEST DUP2 PUSH2 0x3226 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1347 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x349 JUMPI MLOAD SWAP3 PUSH0 PUSH2 0x2EB1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x3219 JUMP JUMPDEST SWAP1 SWAP3 PUSH2 0x3249 DUP10 PUSH2 0x1539 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB ADDRESS SWAP2 AND SUB PUSH2 0x3264 JUMPI JUMPDEST PUSH0 PUSH2 0x2FE1 SWAP5 PUSH2 0x2F7D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP4 PUSH2 0x3298 DUP11 PUSH2 0x1539 JUMP JUMPDEST PUSH2 0x32A1 DUP5 PUSH2 0x44E8 JUMP JUMPDEST SWAP1 DUP7 EXTCODESIZE ISZERO PUSH2 0x349 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP2 DUP2 AND PUSH1 0x44 DUP4 ADD MSTORE DUP6 AND PUSH1 0x64 DUP3 ADD MSTORE SWAP5 PUSH0 SWAP1 DUP7 SWAP1 PUSH1 0x84 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x33E JUMPI PUSH2 0x2FE1 SWAP6 PUSH0 SWAP3 PUSH2 0x331D JUMPI JUMPDEST POP SWAP5 POP POP PUSH2 0x325A JUMP JUMPDEST PUSH2 0x3326 SWAP1 PUSH2 0x12FB JUMP JUMPDEST PUSH0 PUSH2 0x3314 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP5 SWAP7 SWAP6 SWAP5 ADD MLOAD AND DUP11 DUP3 DUP3 EQ PUSH0 EQ PUSH2 0x3600 JUMPI POP POP POP PUSH2 0x3401 PUSH2 0x3363 PUSH0 SWAP3 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP9 MLOAD AND PUSH2 0x440E JUMP JUMPDEST SWAP3 SWAP1 PUSH2 0x33C9 DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP11 MLOAD AND SWAP4 DUP10 MLOAD ISZERO ISZERO DUP7 EQ PUSH2 0x35D4 JUMPI PUSH2 0x3398 PUSH2 0x338C DUP5 PUSH2 0x1539 JUMP JUMPDEST SWAP4 JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 PUSH2 0x1ACE JUMP JUMPDEST SWAP3 SWAP1 SWAP4 PUSH1 0x40 MLOAD SWAP7 PUSH2 0x33A8 DUP9 PUSH2 0x12DF JUMP JUMPDEST DUP8 MSTORE AND PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE DUP13 PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x2 PUSH1 0x80 DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x1576 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x4AF29EC400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x3AED JUMP JUMPDEST SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x33E JUMPI PUSH0 SWAP2 PUSH2 0x35B9 JUMPI JUMPDEST POP PUSH1 0x20 DUP5 ADD MLOAD DUP13 SWAP1 DUP11 SWAP1 ISZERO PUSH2 0x359F JUMPI DUP4 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 PUSH2 0x3478 PUSH2 0x347E SWAP5 PUSH2 0x3471 DUP16 SWAP13 SWAP12 SWAP11 SWAP9 SWAP10 PUSH2 0x34A7 SWAP11 PUSH2 0x1886 JUMP JUMPDEST MLOAD SWAP3 PUSH2 0x1886 JUMP JUMPDEST MSTORE PUSH2 0x1886 JUMP JUMPDEST MLOAD SWAP2 AND PUSH32 0x0 PUSH2 0x43F5 JUMP JUMPDEST MLOAD ISZERO PUSH2 0x34E9 JUMPI PUSH2 0x2DA0 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH2 0x2D9B SWAP4 ADD MLOAD AND PUSH32 0x0 PUSH2 0x452C JUMP JUMPDEST MLOAD PUSH1 0x40 MLOAD PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x24 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x20 DUP2 DUP1 PUSH1 0x44 DUP2 ADD SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x33E JUMPI PUSH2 0x3574 JUMPI JUMPDEST POP PUSH2 0x2DA0 SWAP1 PUSH2 0x28F1 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3598 JUMPI JUMPDEST PUSH2 0x358A DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x349 JUMPI PUSH0 PUSH2 0x356A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3580 JUMP JUMPDEST POP POP SWAP1 SWAP2 POP PUSH2 0x35B0 SWAP3 SWAP4 SWAP7 POP PUSH2 0x1886 JUMP JUMPDEST MLOAD SWAP4 DUP5 SWAP2 PUSH2 0x34A7 JUMP JUMPDEST PUSH2 0x35CD SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2591 DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST SWAP1 POP PUSH2 0x343E JUMP JUMPDEST PUSH2 0x3398 DUP3 PUSH32 0x0 AND SWAP4 PUSH2 0x338E JUMP JUMPDEST PUSH2 0x3693 SWAP7 POP SWAP1 PUSH2 0x365B SWAP2 PUSH1 0x60 SWAP5 DUP12 PUSH2 0x3620 PUSH1 0x80 SWAP10 SWAP9 SWAP10 SWAP4 DUP5 DUP2 ADD SWAP1 PUSH2 0x1ACE JUMP JUMPDEST SWAP4 SWAP1 SWAP5 PUSH1 0x40 MLOAD SWAP8 PUSH2 0x3630 DUP10 PUSH2 0x132B JUMP JUMPDEST PUSH1 0x1 DUP10 MSTORE PUSH1 0x20 DUP10 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP12 AND PUSH1 0x40 DUP10 ADD MSTORE DUP9 DUP9 ADD MSTORE DUP7 ADD MSTORE PUSH1 0xA0 DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x1576 JUMP JUMPDEST PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP3 PUSH32 0x2BFB780C00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x3A05 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x33E JUMPI DUP8 SWAP2 DUP12 SWAP2 PUSH0 SWAP6 PUSH2 0x3722 JUMPI JUMPDEST POP PUSH1 0x20 ADD MLOAD ISZERO PUSH2 0x2DA5 JUMPI PUSH2 0x2D9B SWAP3 DUP5 PUSH2 0x36FA PUSH2 0x2DA0 SWAP8 SWAP7 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 PUSH2 0x1886 JUMP JUMPDEST MSTORE AND PUSH32 0x0 PUSH2 0x43F5 JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP6 POP PUSH2 0x373F SWAP1 PUSH1 0x60 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x1ED5 JUMPI PUSH2 0x1EC2 DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST POP SWAP6 SWAP2 SWAP1 POP PUSH2 0x36D4 JUMP JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 PUSH2 0x377A DUP2 DUP9 ADD MLOAD PUSH2 0x3774 DUP9 PUSH2 0x28E0 JUMP JUMPDEST SWAP1 PUSH2 0x1886 JUMP JUMPDEST MLOAD ADD MLOAD AND SWAP2 PUSH2 0x2BF1 JUMP JUMPDEST PUSH2 0x37C1 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP5 ADD PUSH2 0x1E5C DUP3 DUP3 MLOAD AND PUSH32 0x0 PUSH2 0x43AB JUMP JUMPDEST PUSH2 0x2BD5 JUMP JUMPDEST POP POP PUSH2 0x37F1 PUSH32 0x0 PUSH2 0x3C66 JUMP JUMPDEST SWAP2 PUSH2 0x37FC DUP4 MLOAD PUSH2 0x1BC5 JUMP JUMPDEST PUSH32 0x0 SWAP2 PUSH32 0x0 SWAP2 SWAP1 PUSH0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x28AF JUMPI PUSH1 0x1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x3862 DUP4 DUP12 PUSH2 0x1886 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP6 PUSH1 0x20 MSTORE PUSH2 0x387D PUSH1 0x40 PUSH0 KECCAK256 TLOAD DUP3 PUSH2 0x2873 DUP6 DUP14 PUSH2 0x1886 JUMP JUMPDEST PUSH2 0x3887 DUP4 DUP8 PUSH2 0x1886 JUMP JUMPDEST MSTORE PUSH2 0x3892 DUP3 DUP11 PUSH2 0x1886 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP6 PUSH1 0x20 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 TSTORE ADD PUSH2 0x3843 JUMP JUMPDEST SELFBALANCE DUP1 ISZERO PUSH2 0x38E5 JUMPI PUSH32 0x0 TLOAD PUSH2 0x38E5 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1A41 SWAP3 AND PUSH2 0x42CB JUMP JUMPDEST POP POP JUMP JUMPDEST SWAP1 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP2 CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x349 JUMPI ADD DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x349 JUMPI PUSH1 0x20 ADD SWAP2 DUP2 PUSH1 0x5 SHL CALLDATASIZE SUB DUP4 SGT PUSH2 0x349 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x189A JUMPI PUSH1 0x5 SHL DUP2 ADD CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF81 DUP2 CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x349 JUMPI ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0x40 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x12B2 JUMPI PUSH1 0x40 MSTORE PUSH0 PUSH1 0x20 DUP4 DUP3 DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x1C03 JUMPI JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x39BD JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x60 SWAP2 SUB SLT PUSH2 0x349 JUMPI DUP1 MLOAD SWAP2 PUSH1 0x40 PUSH1 0x20 DUP4 ADD MLOAD SWAP3 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x100 PUSH1 0xC0 PUSH2 0x1171 SWAP4 PUSH1 0x20 DUP5 MSTORE DUP1 MLOAD PUSH2 0x3A1D DUP2 PUSH2 0x39B3 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH1 0x40 DUP7 ADD MSTORE DUP1 PUSH1 0x40 DUP4 ADD MLOAD AND PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD DUP3 DUP6 ADD MSTORE ADD MLOAD SWAP2 PUSH1 0xE0 DUP1 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x11F0 JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x60 DUP3 DUP5 SUB SLT PUSH2 0x349 JUMPI DUP2 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x349 JUMPI DUP5 PUSH2 0x3A9D SWAP2 DUP4 ADD PUSH2 0x1768 JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP3 ADD MLOAD SWAP4 PUSH1 0x40 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x349 JUMPI PUSH2 0x1171 SWAP3 ADD PUSH2 0x16FC JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x3AD9 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x3ACB JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x3B26 PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0xC0 PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0xE0 DUP4 ADD SWAP1 PUSH2 0x3ABA JUMP JUMPDEST SWAP1 PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x80 DUP3 ADD MSTORE PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x5 DUP2 LT ISZERO PUSH2 0x39BD JUMPI PUSH2 0x1171 SWAP4 PUSH1 0xA0 SWAP2 DUP3 DUP5 ADD MSTORE ADD MLOAD SWAP1 PUSH1 0xC0 PUSH1 0x1F NOT DUP3 DUP6 SUB ADD SWAP2 ADD MSTORE PUSH2 0x11F0 JUMP JUMPDEST SWAP2 PUSH1 0x60 DUP4 DUP4 SUB SLT PUSH2 0x349 JUMPI DUP3 MLOAD SWAP3 PUSH1 0x20 DUP2 ADD MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP2 GT PUSH2 0x349 JUMPI DUP2 PUSH2 0x3B8F SWAP2 DUP5 ADD PUSH2 0x1768 JUMP JUMPDEST SWAP4 PUSH1 0x40 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x349 JUMPI PUSH2 0x1171 SWAP3 ADD PUSH2 0x16FC JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH2 0x3BE9 PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0xC0 PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xE0 DUP4 ADD SWAP1 PUSH2 0x3ABA JUMP JUMPDEST SWAP1 PUSH1 0x80 DUP4 ADD MLOAD PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x39BD JUMPI PUSH2 0x1171 SWAP4 PUSH1 0xA0 SWAP2 DUP3 DUP5 ADD MSTORE ADD MLOAD SWAP1 PUSH1 0xC0 PUSH1 0x1F NOT DUP3 DUP6 SUB ADD SWAP2 ADD MSTORE PUSH2 0x11F0 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x80 DUP1 PUSH1 0xA0 DUP4 ADD SWAP5 DUP1 MLOAD PUSH2 0x3C2D DUP2 PUSH2 0x39B3 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x3C3D DUP2 PUSH2 0x39B3 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP6 ADD MSTORE ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 TLOAD PUSH2 0x3C72 DUP2 PUSH2 0x136A JUMP JUMPDEST PUSH2 0x3C7F PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x1347 JUMP JUMPDEST DUP2 DUP2 MSTORE PUSH2 0x3C8B DUP3 PUSH2 0x136A JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x20 SWAP2 ADD CALLDATASIZE PUSH1 0x20 DUP5 ADD CALLDATACOPY DUP2 SWAP5 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x3CAA JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH0 MSTORE DUP1 DUP5 PUSH0 KECCAK256 ADD TLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x3CC8 DUP4 DUP9 PUSH2 0x1886 JUMP JUMPDEST SWAP2 AND SWAP1 MSTORE ADD PUSH2 0x3C9C JUMP JUMPDEST SWAP2 SWAP3 DUP1 PUSH2 0x3FCD JUMPI JUMPDEST ISZERO PUSH2 0x3E46 JUMPI POP POP DUP1 SELFBALANCE LT PUSH2 0x3E1E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP2 DUP3 EXTCODESIZE ISZERO PUSH2 0x349 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xD0E30DB000000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH0 SWAP2 PUSH0 DUP2 PUSH1 0x4 DUP2 DUP6 DUP10 GAS CALL DUP1 ISZERO PUSH2 0x33E JUMPI PUSH2 0x3E07 JUMPI JUMPDEST POP PUSH1 0x44 PUSH1 0x20 SWAP3 SWAP4 PUSH32 0x0 AND SWAP5 PUSH2 0x3D8D DUP4 DUP8 DUP4 PUSH2 0x4541 JUMP JUMPDEST DUP5 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP4 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x3DFB JUMPI POP PUSH2 0x3DD4 JUMPI POP JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3DF4 JUMPI JUMPDEST PUSH2 0x3DEA DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x349 JUMPI JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3DE0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x20 SWAP3 POP PUSH2 0x3E14 SWAP1 PUSH2 0x12FB JUMP JUMPDEST PUSH1 0x44 PUSH0 SWAP3 POP PUSH2 0x3D58 JUMP JUMPDEST PUSH32 0xA01A9DF600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 PUSH0 SWAP1 DUP1 PUSH2 0x3E56 JUMPI JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 PUSH32 0x0 AND SWAP5 DUP1 PUSH32 0x0 AND SWAP2 PUSH2 0x3EB0 DUP5 PUSH2 0x44E8 JUMP JUMPDEST SWAP7 DUP1 EXTCODESIZE ISZERO PUSH2 0x349 JUMPI PUSH1 0x40 MLOAD PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP8 DUP3 AND PUSH1 0x44 DUP10 ADD MSTORE SWAP2 DUP7 AND AND PUSH1 0x64 DUP8 ADD MSTORE PUSH0 SWAP1 DUP7 SWAP1 PUSH1 0x84 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP5 DUP6 ISZERO PUSH2 0x33E JUMPI PUSH2 0x3F75 SWAP6 PUSH2 0x3FB9 JUMPI JUMPDEST POP DUP3 SWAP4 PUSH1 0x20 SWAP4 PUSH1 0x40 MLOAD DUP1 SWAP8 DUP2 SWAP6 DUP3 SWAP5 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x3DFB JUMPI POP PUSH2 0x3F8E JUMPI JUMPDEST DUP1 DUP1 DUP1 PUSH2 0x3E50 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3FB2 JUMPI JUMPDEST PUSH2 0x3FA4 DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x349 JUMPI PUSH0 PUSH2 0x3F86 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3F9A JUMP JUMPDEST PUSH1 0x20 SWAP4 POP PUSH2 0x3FC6 SWAP1 PUSH2 0x12FB JUMP JUMPDEST PUSH0 SWAP3 PUSH2 0x3F24 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP1 DUP3 AND EQ PUSH2 0x3CDA JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SWAP2 DUP1 PUSH0 MSTORE PUSH1 0x20 SWAP2 DUP4 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD DUP1 ISZERO ISZERO PUSH0 EQ PUSH2 0x409C JUMPI PUSH0 NOT SWAP1 DUP2 DUP2 ADD DUP4 TLOAD DUP4 DUP1 DUP3 ADD SWAP2 DUP3 DUP5 SUB PUSH2 0x405F JUMPI JUMPDEST POP POP POP POP POP DUP2 TLOAD DUP2 DUP2 ADD SWAP3 DUP2 DUP5 GT PUSH2 0x1C03 JUMPI PUSH0 SWAP4 DUP2 TSTORE DUP4 MSTORE DUP5 DUP4 KECCAK256 ADD ADD TSTORE PUSH0 MSTORE MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 TSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH2 0x406C PUSH2 0x407C SWAP4 DUP9 PUSH2 0x4625 JUMP JUMPDEST DUP7 PUSH0 MSTORE DUP9 PUSH0 KECCAK256 ADD ADD TLOAD SWAP2 DUP6 PUSH2 0x4625 JUMP JUMPDEST DUP4 PUSH0 MSTORE DUP1 DUP4 DUP4 DUP9 PUSH0 KECCAK256 ADD ADD TSTORE PUSH0 MSTORE DUP6 DUP6 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TSTORE PUSH0 DUP1 DUP1 DUP4 DUP2 PUSH2 0x4033 JUMP JUMPDEST POP POP POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SWAP1 SWAP4 SWAP3 SWAP4 PUSH0 SWAP5 DUP4 ISZERO PUSH2 0x42C3 JUMPI DUP1 PUSH2 0x428E JUMPI JUMPDEST ISZERO PUSH2 0x41F1 JUMPI POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH32 0x0 AND DUP1 EXTCODESIZE ISZERO PUSH2 0x349 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 DUP9 PUSH32 0x0 AND SWAP7 DUP8 PUSH1 0x4 DUP5 ADD MSTORE ADDRESS PUSH1 0x24 DUP5 ADD MSTORE DUP11 PUSH1 0x44 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x33E JUMPI PUSH2 0x41DE JUMPI JUMPDEST POP DUP1 DUP7 SWAP2 EXTCODESIZE ISZERO PUSH2 0x41DA JUMPI DUP2 SWAP1 PUSH1 0x24 PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x2E1A7D4D00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x41CF JUMPI PUSH2 0x41B7 JUMPI JUMPDEST POP PUSH2 0x1A41 SWAP4 SWAP5 POP AND PUSH2 0x42CB JUMP JUMPDEST PUSH2 0x41C1 DUP7 SWAP2 PUSH2 0x12FB JUMP JUMPDEST PUSH2 0x41CB JUMPI DUP5 PUSH2 0x41AA JUMP JUMPDEST DUP5 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP9 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST PUSH2 0x41E9 SWAP2 SWAP7 POP PUSH2 0x12FB JUMP JUMPDEST PUSH0 SWAP5 PUSH0 PUSH2 0x415F JUMP JUMPDEST SWAP2 SWAP1 SWAP3 SWAP4 POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP1 EXTCODESIZE ISZERO PUSH2 0x349 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP4 SWAP1 SWAP3 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE PUSH0 SWAP1 DUP3 SWAP1 PUSH1 0x64 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL DUP1 ISZERO PUSH2 0x33E JUMPI PUSH2 0x4285 JUMPI POP JUMP JUMPDEST PUSH2 0x1A41 SWAP1 PUSH2 0x12FB JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP1 DUP3 AND EQ PUSH2 0x40B7 JUMP JUMPDEST POP POP POP POP SWAP1 POP JUMP JUMPDEST DUP2 SELFBALANCE LT PUSH2 0x431B JUMPI PUSH0 DUP1 DUP1 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 SWAP5 AND GAS CALL PUSH2 0x42EB PUSH2 0x2A6C JUMP JUMPDEST POP ISZERO PUSH2 0x42F3 JUMPI JUMP JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0xCD78605900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE ADDRESS PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x435C JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x42F3 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x43A2 JUMPI JUMPDEST PUSH2 0x436D JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x4365 JUMP JUMPDEST PUSH1 0x1 DUP2 ADD SWAP1 DUP3 PUSH0 MSTORE DUP2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD ISZERO PUSH0 EQ PUSH2 0x43EE JUMPI DUP1 TLOAD DUP2 PUSH0 MSTORE DUP4 DUP2 PUSH1 0x20 PUSH0 KECCAK256 ADD TSTORE PUSH1 0x1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x1C03 JUMPI DUP2 TSTORE TLOAD SWAP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x440A PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 TLOAD PUSH2 0x1BF6 JUMP JUMPDEST SWAP1 TSTORE JUMP JUMPDEST SWAP2 PUSH1 0x44 SWAP3 SWAP4 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 SWAP5 DUP6 SWAP3 DUP3 DUP1 DUP6 MLOAD SWAP10 DUP11 SWAP6 DUP7 SWAP5 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x4 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x44DE JUMPI PUSH0 SWAP4 PUSH0 SWAP6 PUSH2 0x44A7 JUMPI JUMPDEST POP POP PUSH2 0x44A4 PUSH2 0x449D DUP6 SWAP5 PUSH2 0x1BC5 JUMP JUMPDEST SWAP5 DUP6 PUSH2 0x1886 JUMP JUMPDEST MSTORE JUMP JUMPDEST DUP1 SWAP3 SWAP6 POP DUP2 SWAP5 POP RETURNDATASIZE DUP4 GT PUSH2 0x44D7 JUMPI JUMPDEST PUSH2 0x44C0 DUP2 DUP4 PUSH2 0x1347 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x349 JUMPI PUSH1 0x20 DUP3 MLOAD SWAP3 ADD MLOAD SWAP3 PUSH0 DUP1 PUSH2 0x448E JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x44B6 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP2 GT PUSH2 0x44FC JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0xA0 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x440A PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 TLOAD PUSH2 0x39A6 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 PUSH1 0x20 DUP5 ADD SWAP1 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 AND PUSH1 0x24 DUP7 ADD MSTORE PUSH1 0x44 DUP6 ADD MSTORE PUSH1 0x44 DUP5 MSTORE PUSH1 0x80 DUP5 ADD SWAP1 DUP5 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x12B2 JUMPI PUSH2 0x45C0 SWAP4 PUSH0 SWAP4 DUP5 SWAP4 PUSH1 0x40 MSTORE AND SWAP5 MLOAD SWAP1 DUP3 DUP7 GAS CALL PUSH2 0x45B9 PUSH2 0x2A6C JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x4347 JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x4601 JUMPI JUMPDEST POP POP PUSH2 0x45D6 JUMPI POP JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 SWAP3 POP SWAP1 PUSH1 0x20 SWAP2 DUP2 ADD SUB SLT PUSH2 0x349 JUMPI PUSH1 0x20 ADD MLOAD DUP1 ISZERO SWAP1 DUP2 ISZERO SUB PUSH2 0x349 JUMPI PUSH0 DUP1 PUSH2 0x45CD JUMP JUMPDEST TLOAD GT ISZERO PUSH2 0x462E JUMPI JUMP JUMPDEST PUSH32 0xF4AE0E400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LOG1 0xD CREATE JUMP SGT CALLDATACOPY 0xB3 0xD1 0x1E PUSH11 0x31DEF8164DF7FFAAE37EB6 0x4D NUMBER 0x4E PUSH15 0xD8FCEC7155B1C464736F6C63430008 SHL STOP CALLER ","sourceMap":"690:1294:83:-:0;;;;;;;;;-1:-1:-1;690:1294:83;;;;;;;;-1:-1:-1;;;;;13086:5:65;690:1294:83;13064:10:65;:28;13060:79;;690:1294:83;13060:79:65;13115:13;;;690:1294:83;13115:13:65;;690:1294:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;690:1294:83;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;3599:19:66;690:1294:83;;;;;;:::i;:::-;3599:19:66;;;;:::i;:::-;31554:13:60;690:1294:83;31587:3:60;690:1294:83;;31569:16:60;;;;;31606:8;690:1294:83;31606:8:60;;690:1294:83;31606:8:60;;;:::i;:::-;;:21;690:1294:83;;31554:13:60;;31569:16;;31733:413;;690:1294:83;31569:16:60;690:1294:83;;31569:16:60;;690:1294:83;;;;;;:::i;:::-;31899:4:60;690:1294:83;;;31831:293:60;;690:1294:83;-1:-1:-1;;690:1294:83;31831:293:60;;690:1294:83;31831:293:60;690:1294:83;31831:293:60;;690:1294:83;;;;:::i;:::-;31831:293:60;;;690:1294:83;;;31733:413:60;;;;690:1294:83;31733:413:60;;;690:1294:83;31733:413:60;;;:::i;:::-;;-1:-1:-1;;31733:413:60;;;;;;:::i;:::-;690:1294:83;;31699:465:60;;;;690:1294:83;31699:465:60;;690:1294:83;;31699:465:60;;690:1294:83;;;;;;:::i;:::-;31699:465:60;:6;;-1:-1:-1;;;;;31699:6:60;690:1294:83;31699:465:60;;;;;;;690:1294:83;31699:465:60;31671:558;31699:465;690:1294:83;31699:465:60;;;31549:93;690:1294:83;;;;;31671:558:60;;;;;;:::i;:::-;4282:82:66;;;;;;31549:93:60;690:1294:83;;;;;;;:::i;:::-;;;;4282:82:66;690:1294:83;4704:12:66;3051:52:55;4282:82:66;;31699:465:60;;;;;;690:1294:83;31699:465:60;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;690:1294:83;;;;;;;;;;;;;;;;;;-1:-1:-1;;690:1294:83;;;;;;;;4084:27:61;690:1294:83;;;;;-1:-1:-1;;690:1294:83;;;;;;;;;;;;8105:22:65;690:1294:83;;;;;;;;:::i;:::-;8105:22:65;;:::i;:::-;690:1294:83;;;;;;;:::i;:::-;;;;;-1:-1:-1;;690:1294:83;;;;;;;;2875:28:61;690:1294:83;;;;;;;;;;:::i;:::-;1083:103:53;;:::i;:::-;436:67:72;;:::i;:::-;17491:16:60;690:1294:83;17427:25:60;;;:::i;:::-;17476:13;;;;17491:16;690:1294:83;17476:13:60;;;:::i;:::-;17491:16;;;:::i;:::-;;;:::i;:::-;690:1294:83;551:66:53;3051:52:55;690:1294:83;;;;;;;:::i;:::-;;-1:-1:-1;;690:1294:83;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;3911:402:60;;690:1294:83;;;;;;;;;;;:::i;:::-;3599:19:66;3699:10:60;3599:19:66;:::i;:::-;690:1294:83;;;;;;;:::i;:::-;3699:10:60;690:1294:83;;;4005:286:60;;690:1294:83;;;;4005:286:60;;690:1294:83;;;;4005:286:60;;690:1294:83;;;;:::i;:::-;;4005:286:60;;690:1294:83;;;3911:402:60;;;;690:1294:83;3911:402:60;;;690:1294:83;3911:402:60;;;:::i;:::-;690:1294:83;;3876:455:60;;;;690:1294:83;3876:455:60;;690:1294:83;;3876:455:60;;690:1294:83;;;;;;:::i;:::-;;;;;-1:-1:-1;;690:1294:83;;;;;;;;2613:27:61;690:1294:83;;;;;;;;33580:24:60;690:1294:83;;;:::i;:::-;1083:103:53;;:::i;:::-;436:67:72;;:::i;:::-;33580:24:60;:::i;:::-;690:1294:83;551:66:53;3051:52:55;;;;690:1294:83;;;;;;;:::i;:::-;;;;;-1:-1:-1;;690:1294:83;;;;;;4704:12:66;2295:53:55;-1:-1:-1;;;;;690:1294:83;;;;;;;;;;;;33915:25:60;690:1294:83;;;:::i;:::-;1083:103:53;;:::i;:::-;436:67:72;;:::i;:::-;33915:25:60;:::i;690:1294:83:-;;;;;-1:-1:-1;;690:1294:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;690:1294:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;690:1294:83;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;690:1294:83;;-1:-1:-1;690:1294:83;;-1:-1:-1;690:1294:83;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;690:1294:83;;;;;;;;3211:35:61;690:1294:83;;;;;;;;-1:-1:-1;;690:1294:83;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;3599:19:66;690:1294:83;;;;;;:::i;:::-;3599:19:66;;;;:::i;:::-;32579:13:60;690:1294:83;32612:3:60;690:1294:83;;32594:16:60;;;;;32631:8;690:1294:83;;32631:8:60;690:1294:83;32631:8:60;;;:::i;:::-;;:20;690:1294:83;;32579:13:60;;32594:16;;32767:415;;32594:16;690:1294:83;;32594:16:60;690:1294:83;32594:16:60;690:1294:83;;;;;;:::i;:::-;32866:294:60;;;690:1294:83;;;32767:415:60;;;;690:1294:83;32767:415:60;;;690:1294:83;32767:415:60;;;:::i;690:1294:83:-;;-1:-1:-1;;690:1294:83;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;2960:400:60;;690:1294:83;;;;;;;;;;;:::i;:::-;;3053:285:60;;690:1294:83;;;2960:400:60;;;;690:1294:83;2960:400:60;;;690:1294:83;2960:400:60;;;:::i;690:1294:83:-;;;;;-1:-1:-1;;690:1294:83;;;;;;;;-1:-1:-1;;;;;4253:8:65;690:1294:83;;;;;;-1:-1:-1;;690:1294:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;690:1294:83;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;1083:103:53;;;;;:::i;:::-;690:1294:83;;;;;;1500:6:43;1496:65;;690:1294:83;5670:22:65;690:1294:83;;;;;5670:22:65;;;;690:1294:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7088:860:65;;5650:1371;690:1294:83;8105:22:65;3051:52:55;;690:1294:83;551:66:53;3051:52:55;8105:22:65;:::i;7088:860::-;-1:-1:-1;;;;;7878:8:65;;;;690:1294:83;7878:59:65;;;;690:1294:83;;7878:59:65;690:1294:83;7878:59:65;;7894:10;690:1294:83;7878:59:65;;690:1294:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;690:1294:83;;;;;;-1:-1:-1;;;;;690:1294:83;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;690:1294:83;;;;;;;;;;;;;;;;;;;;;;;;;7878:59:65;;:8;;-1:-1:-1;;;;;7878:8:65;690:1294:83;7878:59:65;;;;;;;690:1294:83;7878:59:65;8105:22;7878:59;;;690:1294:83;7088:860:65;;;;;;;;7878:59;;;;:::i;:::-;;;;690:1294:83;;;;;;;-1:-1:-1;;;;;690:1294:83;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;690:1294:83;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;5694:3:65;690:1294:83;5738:19:65;;;;;:::i;:::-;690:1294:83;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;8585:180:65;;;;;690:1294:83;;8585:180:65;;;;;;690:1294:83;8585:180:65;690:1294:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;690:1294:83;;5942:338:65;;;;690:1294:83;-1:-1:-1;;;;;690:1294:83;;;;;;;;;;;;5942:338:65;;;;;690:1294:83;5942:338:65;;690:1294:83;;5942:338:65;;690:1294:83;6055:4:65;690:1294:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5942:338:65;;;;;;5694:3;-1:-1:-1;5922:1089:65;;6407:604;;:::i;:::-;690:1294:83;-1:-1:-1;;;;;690:1294:83;;;;;-1:-1:-1;;;;;690:1294:83;;;;;;;;6680:75:65;;;;690:1294:83;6680:75:65;;690:1294:83;6680:75:65;;690:1294:83;6055:4:65;690:1294:83;;;;6680:75:65;;;;;;;690:1294:83;6680:75:65;;;5922:1089;690:1294:83;;;;6680:100:65;6655:342;;5922:1089;;690:1294:83;5922:1089:65;;690:1294:83;5655:13:65;;6655:342;690:1294:83;;1881:21:45;:17;;2008:160;;;;;1877:362;2205:23;690:1294:83;2205:23:45;690:1294:83;;2205:23:45;6680:75:65;;;;;;;;;;;;;;;;;:::i;:::-;;;690:1294:83;;;;;;;6680:75:65;;;;;;;5922:1089;;;690:1294:83;5922:1089:65;;;5942:338;;;;:::i;:::-;;;;1496:65:43;1529:21;690:1294:83;1529:21:43;690:1294:83;;1529:21:43;690:1294:83;;;;;-1:-1:-1;;690:1294:83;;;;;;;;-1:-1:-1;;;;;4129:5:65;690:1294:83;;;;;;;;;-1:-1:-1;;690:1294:83;;;;;;;;3474:36:61;690:1294:83;;;;;;;;;;:::i;:::-;1083:103:53;;:::i;:::-;436:67:72;;:::i;:::-;4769:16:60;690:1294:83;4706:24:60;;;:::i;690:1294:83:-;-1:-1:-1;;690:1294:83;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;690:1294:83;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;-1:-1:-1;;;;;690:1294:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;;690:1294:83;;;;;;;;;;;;;;;;;-1:-1:-1;690:1294:83;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;690:1294:83;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;690:1294:83;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;690:1294:83;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;690:1294:83;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;690:1294:83;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;690:1294:83;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;690:1294:83;;;;;;:::o;:::-;;;;;;-1:-1:-1;;;;;690:1294:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;690:1294:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;690:1294:83;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;690:1294:83;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;690:1294:83;;;;;;;;;;;;;;;;1820:17:66;690:1294:83;;1820:17:66;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1820:17:66;;690:1294:83;1820:17:66;;;690:1294:83;1820:17:66;;;;;;;;;;690:1294:83;;;;;;;;1820:17:66;;690:1294:83;1820:17:66;;;;;;690:1294:83;;1820:17:66;;;;;;;;;;;;;;;;;;;;;;;;;690:1294:83;1820:17:66;;;;690:1294:83;;1820:17:66;;;690:1294:83;1820:17:66;;;;-1:-1:-1;;1820:17:66;;;;;;;;:::i;:::-;;;;;;;;690:1294:83;1820:17:66;;;;;;;;;;;690:1294:83;:::i;:::-;;;1820:17:66;;;;;;;;;;3191:591:65;;;3259:23;3271:10;3259:23;:::i;:::-;12307:26;;2806:53:55;;;3385:100:65;;3578:4;3051:52:55;3578:4:65;3051:52:55;;690:1294:83;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;;690:1294:83;;;:::i;:::-;;-1:-1:-1;690:1294:83;;;;;;8188:13:65;;-1:-1:-1;8203:15:65;;;;;;3593:1;;;;;-1:-1:-1;3768:6:65;3593:1;3051:52:55;;4704:12:66;2295:53:55;;4282:82:66;;;8183:132:65;3768:6;;:::i;:::-;3191:591::o;4282:82:66:-;-1:-1:-1;3051:52:55;;4282:82:66;;;8220:3:65;8296:7;4297:55:106;-1:-1:-1;8296:7:65;690:1294:83;8296:7:65;;;;;;:::i;690:1294:83:-;;4255:25:106;;;;8289:4:65;4255:25:106;;;;:::i;:::-;8289:4:65;;4297:55:106;:::i;:::-;8239:65:65;;;;:::i;:::-;;;;;;:::i;:::-;;690:1294:83;8188:13:65;;690:1294:83;;;;;;;;;;;;;3385:100:65;3444:30;-1:-1:-1;3444:30:65;;-1:-1:-1;3444:30:65;690:1294:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;:::o;1192:349:53:-;551:66;2295:53:55;;1316:93:53;;1529:4;3051:52:55;;1192:349:53:o;509:165:72:-;-1:-1:-1;;;;;586:6:72;690:1294:83;564:10:72;:29;560:108;;509:165::o;560:108::-;616:41;;;564:10;616:41;690:1294:83;;616:41:72;;690:1294:83;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;690:1294:83;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;4799:1054:60;5170:15;;;690:1294:83;5152:15:60;:33;5148:85;;6036:12;6022:34;6036:12;;;;;;:::i;:::-;6022:34;;;:::i;:::-;6072:13;-1:-1:-1;6112:3:60;6091:12;6036;;;6091;;:::i;:::-;6087:23;;;;;;;690:1294:83;6036:12:60;6167:15;:12;6036;;;6167;;:::i;:::-;690:1294:83;;;6167:15:60;:::i;:::-;690:1294:83;:::i;:::-;6429:18:60;5170:15;6429:18;;690:1294:83;;-1:-1:-1;;;;;690:1294:83;;;6513:10:60;6036:12;6513:10;;;690:1294:83;;1820:17:66;;;6036:12:60;1820:17:66;6513:13:60;5170:15;6513:22;690:1294:83;;;;6513:68:60;;6112:3;6509:776;;;6763:16;6716:13;;;:::i;:::-;6763:16;;;;;;;:::i;:::-;;;:::i;:::-;-1:-1:-1;7342:3:60;6036:12;6513:10;;7323;690:1294:83;7319:21:60;;;;;690:1294:83;;:::i;:::-;6036:12:60;6513:10;;7445;690:1294:83;-1:-1:-1;;690:1294:83;;;;;;;7440:26:60;;7415:21;6036:12;7415:21;;690:1294:83;7511:6:60;;690:1294:83;;7638:163:60;690:1294:83;;;7702:17:60;;;690:1294:83;7638:163:60;;7846:13;6513:10;6036:12;6513:10;;7846;:13;:::i;:::-;;5170:15;7882:13;;690:1294:83;7846:13:60;;7882;690:1294:83;5170:15:60;;7945:553;-1:-1:-1;;;;;690:1294:83;;;8122:149:60;-1:-1:-1;;;;;690:1294:83;;8122:33:60;;:149;690:1294:83;;;;8122:149:60;;5170:15;690:1294:83;;;;;:::i;:::-;-1:-1:-1;690:1294:83;;;;;:::i;:::-;6036:12:60;8003:473;;690:1294:83;5170:15:60;8003:473;;690:1294:83;8003:473:60;;;;;;;;690:1294:83;8003:473:60;;;690:1294:83;5170:15:60;690:1294:83;7945:553:60;;;;690:1294:83;7945:553:60;;;;;;:::i;:::-;;:6;-1:-1:-1;;;;;;7945:6:60;690:1294:83;7945:553:60;;;;;;;-1:-1:-1;7945:553:60;;;8122:149;-1:-1:-1;;6036:12:60;7415:21;690:1294:83;;6036:12:60;;8787:29;-1:-1:-1;;;;;6036:12:60;8978:9;8787:29;690:1294:83;8787:29:60;;;;;;:::i;:::-;690:1294:83;8878:13:60;8842:51;690:1294:83;;;;2875:28:61;8842:51:60;:::i;:::-;;690:1294:83;;3474:36:61;8978:9:60;:::i;:::-;690:1294:83;7304:13:60;;8521:801;6036:12;9286:13;690:1294:83;9121:29:60;;-1:-1:-1;;;;;;690:1294:83;;-1:-1:-1;690:1294:83;;8521:801:60;;7945:553;6036:12;7945:553;;;;;;;;;-1:-1:-1;7945:553:60;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;8122:149;-1:-1:-1;8122:149:60;;;7878:9220;690:1294:83;;-1:-1:-1;;;;;690:1294:83;;;;;;-1:-1:-1;;;;;690:1294:83;;9350:33:60;9346:7752;9350:33;;;-1:-1:-1;;690:1294:83;;;;-1:-1:-1;9803:22:60;;9857:21;;;;;:55;;;9799:1644;9853:914;;9799:1644;-1:-1:-1;;;;;3211:35:61;;;690:1294:83;3211:35:61;12242:463:60;3211:35:61;;-1:-1:-1;3211:35:61;;;690:1294:83;;2870:125:54;;;;6036:12:60;2870:125:54;5170:15:60;2870:125:54;;2295:53:55;10885:196:60;;9799:1644;;;;;690:1294:83;11690:191:60;690:1294:83;;;;6036:12:60;11784:13;;690:1294:83;;;;;11823:36:60;:17;;;;;;:36;;;11690:191;:::i;:::-;690:1294:83;;;;;12641:15:60;;;;;;;;;:::i;:::-;690:1294:83;;;5170:15:60;690:1294:83;;;;;:::i;:::-;;;12401:4:60;6036:12;12290:393;;690:1294:83;5170:15:60;12290:393;;690:1294:83;12290:393:60;;;690:1294:83;12290:393:60;;690:1294:83;;;;:::i;:::-;12290:393:60;;;690:1294:83;5170:15:60;690:1294:83;12242:463:60;;;;690:1294:83;12242:463:60;;690:1294:83;12242:463:60;;;:::i;:::-;;:6;;-1:-1:-1;;;;;12242:6:60;690:1294:83;12242:463:60;;;;;;;-1:-1:-1;;12242:463:60;;11823:36;-1:-1:-1;6036:12:60;7415:21;690:1294:83;;6036:12:60;;13014:22;13198;13014;-1:-1:-1;;;;;690:1294:83;13014:22:60;;;13198;13014;;;:::i;:::-;690:1294:83;12994:42:60;;;;:::i;:::-;690:1294:83;13062:51:60;690:1294:83;;;;2875:28:61;13062:51:60;:::i;:::-;;690:1294:83;;13198:22:60;;:::i;:::-;690:1294:83;3474:36:61;;13198:22:60;:::i;:::-;7878:9220;;12728:840;13374:22;;690:1294:83;13374:22:60;;;;;-1:-1:-1;;;;;13374:22:60;;:::i;:::-;690:1294:83;;;;12728:840:60;7878:9220;;12242:463;6036:12;12242:463;;;;;;;-1:-1:-1;12242:463:60;;;;;;:::i;:::-;;;;;:::i;:::-;-1:-1:-1;12242:463:60;;;-1:-1:-1;12242:463:60;;11823:36;;11690:191;:::i;10885:196::-;11036:17;;;:::i;:::-;10885:196;;;;;9853:914;10533:13;;;;;;;:::i;:::-;10627:29;;;;:::i;:::-;-1:-1:-1;;;;;10478:8:60;690:1294:83;10478:262:60;;;;5170:15;690:1294:83;;10478:262:60;;-1:-1:-1;;;;;690:1294:83;;;10478:262:60;;;690:1294:83;10588:4:60;690:1294:83;;;;;;;;;;;;;;;;;;-1:-1:-1;690:1294:83;;;;;10478:262:60;:8;;-1:-1:-1;;;;;10478:8:60;690:1294:83;10478:262:60;;;;;;;690:1294:83;10478:262:60;12242:463;10478:262;-1:-1:-1;;;;;10478:262:60;-1:-1:-1;10478:262:60;;;9853:914;;;;;;;;;;;;;10478:262;;;;:::i;:::-;;;;9857:55;9882:13;;;;:::i;:::-;-1:-1:-1;;;;;690:1294:83;9907:4:60;9882:30;;9857:55;;9799:1644;11354:6;-1:-1:-1;;;;;11354:6:60;690:1294:83;;-1:-1:-1;;;;;690:1294:83;;;11354:66:60;;;;;;5170:15;690:1294:83;;11354:66:60;;-1:-1:-1;;;;;690:1294:83;;;;11354:66:60;;;690:1294:83;11395:4:60;690:1294:83;;;;;;;;;;-1:-1:-1;;690:1294:83;;;;;;-1:-1:-1;;11354:66:60;;;;;;;690:1294:83;11354:66:60;12242:463;11354:66;-1:-1:-1;;;;;11354:66:60;-1:-1:-1;11354:66:60;;;9799:1644;;;;11354:66;;;;:::i;:::-;;;;9346:7752;-1:-1:-1;;;;;6036:12:60;13604:13;;;;;690:1294:83;;13596:35:60;;;;;13592:3506;13596:35;;;690:1294:83;;;14008:482:60;690:1294:83;;;;13786:170:60;-1:-1:-1;690:1294:83;;-1:-1:-1;;;;;690:1294:83;;;;;13786:170:60;:::i;:::-;690:1294:83;;;;;;7415:21:60;6036:12;7415:21;;690:1294:83;;;14151:55:60;;;;14175:13;;;:::i;:::-;14151:55;;14426:15;;;;;;;;:::i;:::-;690:1294:83;;;5170:15:60;690:1294:83;;;;;:::i;:::-;;;;6036:12:60;14053:415;;690:1294:83;5170:15:60;14053:415;;690:1294:83;14053:415:60;;;690:1294:83;14053:415:60;;690:1294:83;;;;:::i;:::-;14053:415:60;;;690:1294:83;5170:15:60;690:1294:83;14008:482:60;;;;690:1294:83;14008:482:60;;;;;;:::i;:::-;;:6;;-1:-1:-1;;;;;14008:6:60;690:1294:83;14008:482:60;;;;;;;-1:-1:-1;;14008:482:60;;14151:55;-1:-1:-1;6036:12:60;7415:21;690:1294:83;;6036:12:60;;14908:32;-1:-1:-1;;;;;6036:12:60;15095;14908:32;690:1294:83;14908:32:60;;;;;;:::i;:::-;690:1294:83;14966:51:60;13604:13;;;;690:1294:83;;2875:28:61;14966:51:60;:::i;:::-;;13604:13;690:1294:83;;4084:27:61;15095:12:60;:::i;14513:1118::-;6036:12;13604:13;;;690:1294:83;;;5170:15:60;690:1294:83;;15562:46:60;;-1:-1:-1;;;;;690:1294:83;;;14008:482:60;15562:46;;690:1294:83;;;;;;;;;-1:-1:-1;690:1294:83;;;;-1:-1:-1;690:1294:83;;;;;15562:46:60;14008:6;-1:-1:-1;;;;;;14008:6:60;690:1294:83;15562:46:60;;;;;;;;14513:1118;;690:1294:83;14513:1118:60;7878:9220;;15562:46;6036:12;15562:46;;;;;;;;;;;;:::i;:::-;;;690:1294:83;;;;15562:46:60;;;;;;;;14008:482;6036:12;14008:482;;;;;;;-1:-1:-1;14008:482:60;;;;;;:::i;:::-;;;;;:::i;:::-;-1:-1:-1;14008:482:60;;;-1:-1:-1;14008:482:60;;14151:55;14008:6;;690:1294:83;14151:55:60;;;13592:3506;-1:-1:-1;;;;;15783:473:60;16192:15;690:1294:83;16192:15:60;;;;;;;;;;;:::i;:::-;690:1294:83;;;5170:15:60;690:1294:83;;;;;:::i;:::-;-1:-1:-1;690:1294:83;;6036:12:60;15820:414;;690:1294:83;;5170:15:60;15820:414;;690:1294:83;15820:414:60;;;;;;;690:1294:83;15820:414:60;;690:1294:83;15820:414:60;;;690:1294:83;;;;:::i;:::-;15820:414:60;;;690:1294:83;5170:15:60;690:1294:83;15783:473:60;;;;690:1294:83;15783:473:60;;;;;;:::i;:::-;;:6;-1:-1:-1;;;;;;15783:6:60;690:1294:83;15783:473:60;;;;;;;-1:-1:-1;15783:473:60;;;13592:3506;-1:-1:-1;;6036:12:60;7415:21;690:1294:83;;6036:12:60;;16545:29;-1:-1:-1;;;;;6036:12:60;16736:9;16545:29;690:1294:83;16545:29:60;;;;;;:::i;:::-;690:1294:83;16600:51:60;13604:13;;;;690:1294:83;;2875:28:61;16600:51:60;:::i;:::-;;13604:13;690:1294:83;;3474:36:61;16736:9:60;:::i;15783:473::-;6036:12;15783:473;;;;;;;;;-1:-1:-1;15783:473:60;;;;;;:::i;:::-;;;;;;;;;7638:163;-1:-1:-1;7638:163:60;;;7319:21;-1:-1:-1;7319:21:60;;-1:-1:-1;7319:21:60;;-1:-1:-1;;690:1294:83;;6072:13:60;;6509:776;7130:48;2613:27:61;;7130:48:60;:::i;:::-;;7252:17;3211:35:61;;;7252:17:60;:::i;:::-;6509:776;;6513:68;859:9:41;;:23;690:1294:83;6513:68:60;;6087:23;;;5481:32;2875:28:61;5481:32:60;:::i;:::-;690:1294:83;5536:31:60;690:1294:83;;5536:31:60;:::i;:::-;4084:27:61;;3474:36;;5582:13:60;-1:-1:-1;5619:3:60;690:1294:83;;5597:20:60;;;;;690:1294:83;;-1:-1:-1;;;;;5705:12:60;;;;;:::i;:::-;690:1294:83;;-1:-1:-1;2870:125:54;;6036:12:60;2870:125:54;5670:108:60;5170:15;-1:-1:-1;2870:125:54;2295:53:55;5765:12:60;;;;;:::i;:::-;690:1294:83;;-1:-1:-1;2870:125:54;;6036:12:60;2870:125:54;5170:15:60;-1:-1:-1;2870:125:54;2295:53:55;5670:108:60;;:::i;:::-;5638:140;;;;:::i;:::-;690:1294:83;5820:12:60;;;;:::i;:::-;690:1294:83;;-1:-1:-1;2870:125:54;;6036:12:60;2870:125:54;-1:-1:-1;5170:15:60;2870:125:54;;3051:52:55;690:1294:83;5582:13:60;;5597:20;;;;;;;;4799:1054::o;5148:85::-;5208:14;-1:-1:-1;5208:14:60;;-1:-1:-1;5208:14:60;690:1294:83;;-1:-1:-1;;690:1294:83;;;;;5475:1:61;690:1294:83;;;:::o;:::-;;;;;;-1:-1:-1;;690:1294:83;;:::o;4643:1836:61:-;;2875:28;;2295:53:55;;2613:27:61;5461:15;2295:53:55;;5461:15:61;:::i;:::-;3211:35;;5438:470;5479:6;-1:-1:-1;5479:6:61;;;;;5941:16;;;;;;:::i;:::-;3474:36;;5918:481;5960:6;-1:-1:-1;5960:6:61;;;;;6465;;;;;;;:::i;5968:3::-;;690:1294:83;;-1:-1:-1;690:1294:83;6348:40:61;690:1294:83;-1:-1:-1;690:1294:83;;;;;2295:53:55;2870:125:54;;;;;;;;;;6154:9:61;2870:125:54;;;;;2295:53:55;690:1294:83;-1:-1:-1;;;;;690:1294:83;;6154:9:61;;:::i;:::-;2870:125:54;;;;;;3051:52:55;6348:40:61;;:::i;:::-;;5968:3;:::i;:::-;5923:35;;5487:3;;690:1294:83;;-1:-1:-1;690:1294:83;5859:38:61;690:1294:83;-1:-1:-1;690:1294:83;;;;;;;2295:53:55;2870:125:54;;;;;;;5667:9:61;2870:125:54;;;;;;2295:53:55;690:1294:83;-1:-1:-1;;;;;690:1294:83;;5667:9:61;;:::i;5487:3::-;5443:34;;690:1294:83;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;690:1294:83;;;;:::o;:::-;;;:::o;:::-;;;;;;;;;;:::o;3694:351:66:-;;690:1294:83;4704:12:66;;-1:-1:-1;;;;;2295:53:55;;690:1294:83;3919:25:66;3915:124;;3694:351;;:::o;3915:124::-;3051:52:55;;;;;4024:4:66;3915:124;3694:351::o;17521:1044:60:-;;17891:15;;;690:1294:83;17873:15:60;:33;17869:85;;18924:34;18938:12;;;;;;:::i;18924:34::-;18974:13;-1:-1:-1;19014:3:60;18993:12;18938;;;18993;;:::i;:::-;18989:23;;;;;;;690:1294:83;18938:12:60;19070:15;:12;18938;;;19070;;:::i;690:1294:83:-;19324:19:60;;;690:1294:83;;19859:49:60;-1:-1:-1;;;;;690:1294:83;;;2613:27:61;19859:49:60;:::i;:::-;;18938:12;20160:10;;;690:1294:83;-1:-1:-1;;690:1294:83;;;;;;;20184:6:60;-1:-1:-1;20184:6:60;;;;;19014:3;;;690:1294:83;;18974:13:60;;20192:3;20242:22;20160:10;18938:12;20160:10;;20242;:22;:::i;:::-;;690:1294:83;;:::i;:::-;20357:6:60;;;18938:12;20332:21;;690:1294:83;18938:12:60;20160:10;;20422;690:1294:83;;-1:-1:-1;;690:1294:83;;;;;-1:-1:-1;;690:1294:83;20408:35:60;;690:1294:83;;;20705:510:60;;20192:3;18938:12;20332:21;;690:1294:83;;18938:12:60;;17891:15;21474:16;;690:1294:83;-1:-1:-1;;;;;690:1294:83;;;21233:748:60;;17891:15;22003:13;;690:1294:83;;17891:15:60;;20332:21;;-1:-1:-1;;;;;19324:19:60;20332:21;18938:12;22398:558;20332:21;;690:1294:83;;;22044:67:60;;;21999:8973;22040:311;;21999:8973;690:1294:83;;;-1:-1:-1;;;;;690:1294:83;;22576:33:60;;690:1294:83;;;22576:149:60;;17891:15;690:1294:83;;;;;:::i;:::-;;;;;;;:::i;:::-;18938:12:60;22456:478;;690:1294:83;17891:15:60;22456:478;;690:1294:83;22456:478:60;;;;690:1294:83;22456:478:60;;;690:1294:83;17891:15:60;690:1294:83;22398:558:60;;;;690:1294:83;22398:558:60;;;;;;:::i;:::-;;:6;-1:-1:-1;;;;;;22398:6:60;690:1294:83;22398:558:60;;;;;;;;;;;-1:-1:-1;;22398:558:60;;22576:149;-1:-1:-1;18938:12:60;20332:21;690:1294:83;;18938:12:60;;23745:8;23032:27;;;20192:3;23032:27;;;23374;23032;;:::i;:::-;690:1294:83;23242:49:60;-1:-1:-1;;;;;690:1294:83;;2875:28:61;23242:49:60;:::i;:::-;;-1:-1:-1;;;;;23374:27:60;:16;17891:15;23374:16;;690:1294:83;23374:27:60;:::i;:::-;690:1294:83;;3474:36:61;23374:27:60;:::i;:::-;-1:-1:-1;;;;;690:1294:83;;;4084:27:61;23745:8:60;:::i;:::-;20192:3;:::i;:::-;20142:40;;22979:882;23809:29;;;20192:3;23809:29;;;22979:882;20192:3;:::i;22398:558::-;18938:12;22398:558;;;;;19324:19;22398:558;19324:19;22398:558;;;;;;;:::i;:::-;-1:-1:-1;22398:558:60;;;-1:-1:-1;22398:558:60;;22576:149;-1:-1:-1;22576:149:60;;;22040:311;22311:16;22264:13;;;:::i;:::-;690:1294:83;;22311:16:60;690:1294:83;17891:15:60;690:1294:83;;;;22293:16:60;;690:1294:83;22311:16:60;;;:::i;:::-;22040:311;;22044:67;859:9:41;;:23;690:1294:83;22044:67:60;;21999:8973;690:1294:83;-1:-1:-1;;;;;690:1294:83;;;;-1:-1:-1;;;;;690:1294:83;;23889:33:60;23885:7087;23889:33;;;-1:-1:-1;18938:12:60;20332:21;;690:1294:83;18938:12:60;;690:1294:83;17891:15:60;690:1294:83;24688:33:60;690:1294:83;24688:33:60;;-1:-1:-1;;;;;690:1294:83;;24688:33:60;;;690:1294:83;18938:12:60;24688:6;690:1294:83;24688:6:60;-1:-1:-1;;;;;24688:6:60;690:1294:83;24688:33:60;;;;;;;-1:-1:-1;24688:33:60;;;24608:1046;24670:51;;690:1294:83;-1:-1:-1;;;;;690:1294:83;;;-1:-1:-1;;;;;24688:6:60;690:1294:83;24747:64:60;;;;17891:15;690:1294:83;;24747:64:60;;-1:-1:-1;;;;;690:1294:83;;;24688:33:60;24747:64;;690:1294:83;24788:4:60;690:1294:83;;;;;;;;;;;-1:-1:-1;690:1294:83;;;;;24747:64:60;24688:6;;-1:-1:-1;;;;;24688:6:60;690:1294:83;24747:64:60;;;;;;;26143:467;24747:64;-1:-1:-1;24747:64:60;;;24608:1046;;;690:1294:83;-1:-1:-1;;;;;25715:173:60;690:1294:83;;;;;25809:13:60;18938:12;25809:13;;690:1294:83;;25715:173:60;;:::i;:::-;690:1294:83;;;;26546:15:60;;26464:42;26546:15;;;;;;;;:::i;:::-;690:1294:83;;;17891:15:60;690:1294:83;;;;;:::i;:::-;;;26302:4:60;18938:12;26191:397;;690:1294:83;26191:397:60;17891:15;26191:397;;690:1294:83;19324:19:60;26191:397;;690:1294:83;26191:397:60;;690:1294:83;;;;:::i;26143:467:60:-;;:6;;-1:-1:-1;;;;;26143:6:60;690:1294:83;26143:467:60;;;;;;;-1:-1:-1;;26143:467:60;;24608:1046;-1:-1:-1;18938:12:60;20332:21;690:1294:83;;18938:12:60;;26798:30;;;20192:3;26798:30;;;;;;:::i;:::-;690:1294:83;26904:11:60;690:1294:83;-1:-1:-1;;;;;690:1294:83;;4084:27:61;26904:11:60;:::i;:::-;27021:29;;;:63;;;26633:1183;27017:205;;26633:1183;;;;20192:3;:::i;27017:205::-;27165:29;;27149:13;;;;:::i;:::-;27165:29;;:::i;:::-;;;:::i;:::-;27017:205;;;;;27021:63;26302:4;;-1:-1:-1;;;;;27054:13:60;;;:::i;:::-;690:1294:83;27054:30:60;;27021:63;;26633:1183;27357:32;;;;27499:29;;;;27495:299;;26633:1183;;;;20192:3;26633:1183;20192:3;:::i;27495:299::-;27583:29;;18938:12;27583:29;27727:40;27583:29;;:::i;:::-;26143:6;27684:12;26143:6;-1:-1:-1;;;;;26143:6:60;690:1294:83;27684:12:60;;:::i;:::-;17891:15;690:1294:83;27727:40:60;;;;;690:1294:83;27727:40:60;;690:1294:83;27727:40:60;;690:1294:83;;;;;;-1:-1:-1;;;;;690:1294:83;;;;;;;;;;27727:40:60;;26143:6;-1:-1:-1;;;;;;26143:6:60;690:1294:83;27727:40:60;;;;;;;;27495:299;;;;;27727:40;18938:12;27727:40;;;;;;;;;;;;:::i;:::-;;;690:1294:83;;;;27727:40:60;;;;;;;;26143:467;18938:12;26143:467;;;;;;;-1:-1:-1;26143:467:60;;;;;;:::i;:::-;-1:-1:-1;26143:467:60;;;;-1:-1:-1;26143:467:60;;24747:64;;;;:::i;:::-;;;;24688:33;;;;18938:12;24688:33;;18938:12;24688:33;;;;;;18938:12;24688:33;;;:::i;:::-;;;690:1294:83;;;;;24688:33:60;;;;;;;-1:-1:-1;24688:33:60;;24608:1046;24844:13;;;;;:::i;:::-;-1:-1:-1;;;;;24869:4:60;690:1294:83;;24844:30:60;24840:814;;24608:1046;-1:-1:-1;26143:467:60;24608:1046;;;24840:814;-1:-1:-1;;;;;25391:8:60;690:1294:83;25442:13:60;;;;:::i;:::-;25528:27;;;:::i;:::-;25391:240;;;;;;17891:15;690:1294:83;;25391:240:60;;-1:-1:-1;;;;;690:1294:83;;;25391:240:60;;;690:1294:83;24869:4:60;690:1294:83;;;;;;;;;;;;;;;;;;-1:-1:-1;;690:1294:83;;;;;;-1:-1:-1;;25391:240:60;;;;;;;26143:467;25391:240;-1:-1:-1;25391:240:60;;;24840:814;;;;;;;25391:240;;;;:::i;:::-;;;;23885:7087;-1:-1:-1;;;;;18938:12:60;27852:13;;;;;690:1294:83;;27844:35:60;;;;27840:3132;27844:35;;;690:1294:83;;;28366:500:60;28039:168;-1:-1:-1;690:1294:83;;-1:-1:-1;;;;;690:1294:83;;;28039:168:60;:::i;:::-;690:1294:83;;;;-1:-1:-1;;;;;690:1294:83;;;;;;;;;28509:56:60;;;;28802:15;28534:13;;;:::i;:::-;28509:56;;28802:15;;;;;:::i;:::-;690:1294:83;;;17891:15:60;690:1294:83;;;;;:::i;:::-;;;;18938:12:60;28411:433;;690:1294:83;17891:15:60;28411:433;;690:1294:83;28411:433:60;19324:19;28411:433;;690:1294:83;28723:39:60;28802:15;28411:433;;690:1294:83;;;;:::i;:::-;28411:433:60;;;690:1294:83;17891:15:60;690:1294:83;28366:500:60;;;;690:1294:83;28366:500:60;;;;;;:::i;:::-;;:6;;-1:-1:-1;;;;;28366:6:60;690:1294:83;28366:500:60;;;;;;;-1:-1:-1;;28366:500:60;;28509:56;-1:-1:-1;18938:12:60;20332:21;;690:1294:83;20332:21:60;;;;690:1294:83;18938:12:60;;29074:25;;-1:-1:-1;;;;;29074:25:60;29055:44;29181:25;29074;;;;;;;;29181;29074;;:::i;:::-;690:1294:83;29055:44:60;;:::i;:::-;690:1294:83;29181:25:60;:::i;:::-;690:1294:83;;;3211:35:61;29181:25:60;:::i;:::-;690:1294:83;;29466:22:60;;20192:3;27852:13;;-1:-1:-1;;;;;18938:12:60;29765:18;27852:13;;690:1294:83;;3474:36:61;29765:18:60;:::i;29462:561::-;690:1294:83;17891:15:60;690:1294:83;;29948:52:60;;-1:-1:-1;;;;;690:1294:83;;;28366:500:60;29948:52;;690:1294:83;;;;;;;;18938:12:60;690:1294:83;;;;;29948:52:60;28366:6;-1:-1:-1;;;;;;28366:6:60;690:1294:83;29948:52:60;;;;;;;;29462:561;;20192:3;29462:561;20192:3;:::i;29948:52::-;18938:12;29948:52;;;;;;;;;;;;:::i;:::-;;;690:1294:83;;;;29948:52:60;;;;;;;;28889:442;29283:25;;;;;;;;;;;:::i;:::-;690:1294:83;28889:442:60;;;;;28366:500;;;;;;-1:-1:-1;28366:500:60;;;;;;:::i;:::-;;;;;28509:56;28802:15;28366:6;;690:1294:83;28509:56:60;;;27840:3132;30175:478;30589:15;;;690:1294:83;30589:15:60;19324:19;30589:15;;;;;;;;;;;;;:::i;:::-;690:1294:83;;;17891:15:60;690:1294:83;;;;;:::i;:::-;;;;18938:12:60;30212:419;;690:1294:83;-1:-1:-1;;;;;690:1294:83;;17891:15:60;30212:419;;690:1294:83;30212:419:60;;;690:1294:83;30212:419:60;;690:1294:83;30212:419:60;;;690:1294:83;;;;:::i;:::-;30212:419:60;;;690:1294:83;17891:15:60;690:1294:83;30175:478:60;;;;690:1294:83;30175:478:60;;;;;;:::i;:::-;;:6;-1:-1:-1;;;;;;30175:6:60;690:1294:83;30175:478:60;;;;;;;;;;;-1:-1:-1;;30175:478:60;;27840:3132;-1:-1:-1;18938:12:60;20332:21;690:1294:83;;18938:12:60;;30838:8;30729:27;;;20192:3;30729:27;;;-1:-1:-1;;;;;30729:27:60;;:::i;:::-;690:1294:83;;3211:35:61;30838:8:60;:::i;30175:478::-;18938:12;30175:478;;;;;19324:19;30175:478;19324:19;30175:478;;;;;;;:::i;:::-;-1:-1:-1;30175:478:60;;;-1:-1:-1;30175:478:60;;21233:748;690:1294:83;-1:-1:-1;;;;;18938:12:60;21927:26;20160:10;;;21927;21946:5;;;:::i;:::-;21927:26;;:::i;:::-;;:35;690:1294:83;;21233:748:60;;;20705:510;21177:18;21081:13;-1:-1:-1;;;;;18938:12:60;21081:13;;21045:51;690:1294:83;;;;2875:28:61;21045:51:60;:::i;21177:18::-;20705:510;;18989:23;;;18198:31;2613:27:61;18198:31:60;:::i;:::-;690:1294:83;18287:30:60;690:1294:83;;18287:30:60;:::i;:::-;4084:27:61;;3211:35;;18332:13:60;-1:-1:-1;18368:3:60;690:1294:83;;18347:19:60;;;;;690:1294:83;;-1:-1:-1;;;;;18436:11:60;;;;;:::i;:::-;690:1294:83;;-1:-1:-1;2870:125:54;;18938:12:60;2870:125:54;18402:89:60;17891:15;-1:-1:-1;2870:125:54;2295:53:55;18479:11:60;;;;;:::i;18402:89::-;18387:104;;;;:::i;:::-;690:1294:83;18533:11:60;;;;:::i;:::-;690:1294:83;;-1:-1:-1;2870:125:54;;18938:12:60;2870:125:54;-1:-1:-1;17891:15:60;2870:125:54;;3051:52:55;690:1294:83;18332:13:60;;9544:584:65;9780:21;9815:11;;9811:48;;12307:26;2295:53:55;10009:69:65;;-1:-1:-1;;;;;10114:6:65;690:1294:83;;10114:6:65;:::i;10009:69::-;10061:7;;:::o;690:1294:83:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;690:1294:83;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;-1:-1:-1;690:1294:83;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;690:1294:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;690:1294:83;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;690:1294:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;690:1294:83;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;690:1294:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;690:1294:83;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;690:1294:83;;;;;;;;;;;;;;;;;;;;;;:::o;7103:296:56:-;;2295:53:55;;690:1294:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;-1:-1:-1;;690:1294:83;;;;;;;;7250:30:56;7296:13;-1:-1:-1;7311:7:56;;;;;;7103:296;;;;;:::o;7320:3::-;690:1294:83;;;-1:-1:-1;690:1294:83;;;-1:-1:-1;690:1294:83;;2295:53:55;-1:-1:-1;;;;;7339:43:56;;;;:::i;:::-;690:1294:83;;;;;7296:13:56;;10829:553:65;;;11006:29;;;10829:553;11002:374;;;1074:21:78;;;;:38;1070:93;;-1:-1:-1;;;;;11051:5:65;;690:1294:83;1207:39:78;;;;;;690:1294:83;;1207:39:78;690:1294:83;1207:39:78;;;;;;;;;;;;;;;;;;11002:374:65;11074:6;690:1294:83;1382:34:78;11074:6:65;;;690:1294:83;1321:14:78;;;;;;:::i;:::-;690:1294:83;;;1382:34:78;;;;;690:1294:83;1382:34:78;;1207:39;1382:34;;690:1294:83;;;;;1382:34:78;;;;;;;;;;11002:374:65;10829:553::o;1382:34:78:-;;;;;;;;;;;;;;:::i;:::-;;;690:1294:83;;;;10829:553:65:o;1382:34:78:-;;;;;;690:1294:83;;;;;;;;;;1207:39:78;1382:34;1207:39;;;;;:::i;:::-;690:1294:83;1207:39:78;;;;;1070:93;1135:17;;;;;;11002:374:65;11137:1;;;11126:12;;11122:244;;11002:374;;;;;10829:553::o;11122:244::-;-1:-1:-1;;;;;11215:8:65;;;690:1294:83;11253:6:65;;;690:1294:83;11262:20:65;;;;:::i;:::-;11215:86;;;;;;690:1294:83;;;11215:86:65;;-1:-1:-1;;;;;690:1294:83;;;11215:86:65;;;690:1294:83;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;690:1294:83;;;;;;-1:-1:-1;;11215:86:65;;;;;;;11319:32;11215:86;;;11122:244;690:1294:83;;;11319:32:65;690:1294:83;;;11319:32:65;;;;;;690:1294:83;11319:32:65;;11215:86;11319:32;;690:1294:83;;;;;;-1:-1:-1;;;;;690:1294:83;;;;;;;;;;11319:32:65;;;;;;;;;;;;;11122:244;;;;;;11319:32;;;;;;;;;;;;;;:::i;:::-;;;690:1294:83;;;;11319:32:65;;;;;;;;11215:86;11319:32;11215:86;;;;;:::i;:::-;11137:1;11215:86;;;11006:29;690:1294:83;-1:-1:-1;;;;;11030:5:65;;690:1294:83;;;;11019:16:65;11006:29;;2887:1758:56;7863:13;;;2870:125:54;;690:1294:83;2870:125:54;;;;;;;690:1294:83;2870:125:54;2295:53:55;3138:15:56;;;3134:1505;3138:15;;;-1:-1:-1;;690:1294:83;;;;2295:53:55;;690:1294:83;;;;3802:26:56;;;;3798:415;;3134:1505;3831:53:55;;;;;;;690:1294:83;;;;;;;;;;3051:52:55;;;690:1294:83;;;;;;;3051:52:55;690:1294:83;2870:125:54;;690:1294:83;2870:125:54;;;3051:52:55;7863:13:56;4574:11;:::o;3798:415::-;4255:5:47;4493;4255;;;:::i;:::-;690:1294:83;;;;;;;;2295:53:55;4493:5:47;;;:::i;:::-;690:1294:83;;;;;;;;;;;3051:52:55;690:1294:83;2870:125:54;;;;;690:1294:83;2870:125:54;3051:52:55;3798:415:56;;;;;;;3134:1505;4616:12;;;;;690:1294:83;4616:12:56;:::o;11388:489:65:-;;;;;11515:1;11502:14;;;11498:51;;11632:30;;;11388:489;11628:243;;;690:1294:83;-1:-1:-1;;;;;11714:6:65;;;690:1294:83;1590:47:78;;;;;690:1294:83;;;1590:47:78;;11515:1:65;11678:5;690:1294:83;11678:5:65;;;;690:1294:83;1590:47:78;;;;;690:1294:83;1617:4:78;690:1294:83;;;;;;;;;1590:47:78;;;;;;;;11628:243:65;1680:27:78;;;;;;;;690:1294:83;;;;;1680:27:78;;;;690:1294:83;1680:27:78;;;1590:47;1680:27;;690:1294:83;1680:27:78;;;;;;;;11628:243:65;690:1294:83;1774:12:78;690:1294:83;;;;1774:12:78;:::i;1680:27::-;;;;;:::i;:::-;690:1294:83;;1680:27:78;;;690:1294:83;;;;1680:27:78;690:1294:83;;;;;;;;;1680:27:78;690:1294:83;;;1590:47:78;;;;;;:::i;:::-;11515:1:65;1590:47:78;;;;11628:243:65;11818:6;;;;;-1:-1:-1;;;;;11818:6:65;690:1294:83;11818:42:65;;;;;690:1294:83;;;11818:42:65;;-1:-1:-1;;;;;690:1294:83;;;11818:42:65;;;690:1294:83;;;;;;;;;;;;;-1:-1:-1;;690:1294:83;;;;;;-1:-1:-1;;11818:42:65;;;;;;;;11628:243;11388:489::o;11818:42::-;;;;:::i;11632:30::-;690:1294:83;-1:-1:-1;;;;;11657:5:65;;690:1294:83;;;;11645:17:65;11632:30;;11498:51;11532:7;;;;;;:::o;1531:331:106:-;1616:21;;:30;1612:109;;1750:33;690:1294:83;;;-1:-1:-1;;;;;690:1294:83;;;1750:33:106;;;;:::i;:::-;;1797:8;1793:63;;1531:331::o;1793:63::-;1828:17;1750:33;1828:17;;1750:33;1828:17;1612:109;1669:41;;;1624:4;1669:41;690:1294:83;;1669:41:106;;4625:582;;4797:8;;-1:-1:-1;690:1294:83;;5874:21:106;:17;;6046:142;;;;;;4793:408;690:1294:83;;5045:22:106;:49;;;4793:408;5041:119;;5173:17;;:::o;5041:119::-;-1:-1:-1;;;;;5121:24:106;;5066:1;5121:24;690:1294:83;5121:24:106;690:1294:83;;5066:1:106;5121:24;5045:49;5071:18;;;:23;5045:49;;2304:424:56;7863:13;;;2870:125:54;;690:1294:83;2870:125:54;;;;;690:1294:83;2870:125:54;2295:53:55;4814:30:56;2390:332;2870:125:54;;;3831:53:55;;690:1294:83;;;;;2870:125:54;690:1294:83;;;3051:52:55;7863:13:56;690:1294:83;;;;;;;3051:52:55;;2295:53;2870:125:54;690:1294:83;2870:125:54;;;;690:1294:83;2870:125:54;3051:52:55;7863:13:56;2657:11;:::o;2390:332::-;2699:12;;;690:1294:83;2699:12:56;:::o;3350:199:47:-;;-1:-1:-1;2870:125:54;;;3518:23:47;2870:125:54;-1:-1:-1;2870:125:54;2295:53:55;;;3518:23:47;:::i;:::-;3051:52:55;;3350:199:47:o;10408:415:65:-;;690:1294:83;10408:415:65;;;;-1:-1:-1;;;;;690:1294:83;;;;;;;;10667:52:65;;;;;690:1294:83;10667:52:65;;690:1294:83;10667:52:65;;;690:1294:83;;;;;;10667:6:65;690:1294:83;10667:52:65;;;;;;;-1:-1:-1;;;10667:52:65;;;10408:415;10641:78;;10778:38;10744:24;10641:78;10744:24;;:::i;:::-;10778:38;;;:::i;:::-;690:1294:83;10408:415:65:o;10667:52::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;690:1294:83;;;;;;;;;;10667:52:65;;;;;;;;;;;690:1294:83;;;-1:-1:-1;690:1294:83;;;;;7223:218:119;-1:-1:-1;;;;;7303:25:119;;;;7299:105;;690:1294:83;7223:218:119;:::o;7299:105::-;7351:42;;;7382:3;7351:42;690:1294:83;;;;7351:42:119;;3555:199:47;;-1:-1:-1;2870:125:54;;;3723:23:47;2870:125:54;-1:-1:-1;2870:125:54;2295:53:55;;;3723:23:47;:::i;1303:160:105:-;690:1294:83;;1412:43:105;;;;;690:1294:83;1412:43:105;;-1:-1:-1;;;;;690:1294:83;;;1412:43:105;;;690:1294:83;;;;;;1412:43:105;;690:1294:83;;;;;;;;;;;;;3510:55:106;690:1294:83;-1:-1:-1;690:1294:83;;;;;;3462:31:106;;;;;;;;;:::i;:::-;3510:55;;;:::i;:::-;690:1294:83;;4551:22:105;;;;:57;;;;1303:160;4547:135;;;;1303:160;:::o;4547:135::-;4631:40;-1:-1:-1;4631:40:105;;690:1294:83;1412:43:105;-1:-1:-1;4631:40:105;4551:57;4578:30;;;;1412:43;4578:30;;;690:1294:83;;;;1412:43:105;4578:30;690:1294:83;;;;;;;;;4551:57:105;;;;4609:265:47;3831:53:55;-1:-1:-1;4792:15:47;4788:80;;4609:265::o;4788:80::-;4830:27;-1:-1:-1;4830:27:47;;-1:-1:-1;4830:27:47"},"methodIdentifiers":{"getPermit2()":"1bbf2e23","getSender()":"5e01eb5a","getWeth()":"107c279f","manualGetCurrentSwapTokenInAmounts()":"48bbd869","manualGetCurrentSwapTokenOutAmounts()":"0f8fb1cc","manualGetCurrentSwapTokensInSlot()":"8c824cd9","manualGetCurrentSwapTokensOutSlot()":"96123406","manualGetSettledTokenAmounts()":"cd791ccc","multicall(bytes[])":"ac9650d8","permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])":"19c6989f","querySwapExactIn((address,(address,address,bool)[],uint256,uint256)[],address,bytes)":"e3b5dff4","querySwapExactInHook((address,(address,(address,address,bool)[],uint256,uint256)[],uint256,bool,bytes))":"8a12a08c","querySwapExactOut((address,(address,address,bool)[],uint256,uint256)[],address,bytes)":"2950286e","querySwapExactOutHook((address,(address,(address,address,bool)[],uint256,uint256)[],uint256,bool,bytes))":"5a3c3987","swapExactIn((address,(address,address,bool)[],uint256,uint256)[],uint256,bool,bytes)":"286f580d","swapExactInHook((address,(address,(address,address,bool)[],uint256,uint256)[],uint256,bool,bytes))":"08a465f6","swapExactOut((address,(address,address,bool)[],uint256,uint256)[],uint256,bool,bytes)":"8eb1b65e","swapExactOutHook((address,(address,(address,address,bool)[],uint256,uint256)[],uint256,bool,bytes))":"945ed33f","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IWETH\",\"name\":\"weth\",\"type\":\"address\"},{\"internalType\":\"contract IPermit2\",\"name\":\"permit2\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EthTransfer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransientIndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"getPermit2\",\"outputs\":[{\"internalType\":\"contract IPermit2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWeth\",\"outputs\":[{\"internalType\":\"contract IWETH\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualGetCurrentSwapTokenInAmounts\",\"outputs\":[{\"internalType\":\"AddressToUintMappingSlot\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualGetCurrentSwapTokenOutAmounts\",\"outputs\":[{\"internalType\":\"AddressToUintMappingSlot\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualGetCurrentSwapTokensInSlot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualGetCurrentSwapTokensOutSlot\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualGetSettledTokenAmounts\",\"outputs\":[{\"internalType\":\"AddressToUintMappingSlot\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"internalType\":\"struct IRouterCommon.PermitApproval[]\",\"name\":\"permitBatch\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"permitSignatures\",\"type\":\"bytes[]\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"internalType\":\"uint48\",\"name\":\"expiration\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"nonce\",\"type\":\"uint48\"}],\"internalType\":\"struct IAllowanceTransfer.PermitDetails[]\",\"name\":\"details\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sigDeadline\",\"type\":\"uint256\"}],\"internalType\":\"struct IAllowanceTransfer.PermitBatch\",\"name\":\"permit2Batch\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"permit2Signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes[]\",\"name\":\"multicallData\",\"type\":\"bytes[]\"}],\"name\":\"permitBatchAndCall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct IBatchRouter.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"internalType\":\"struct IBatchRouter.SwapPathExactAmountIn[]\",\"name\":\"paths\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"querySwapExactIn\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"pathAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"tokensOut\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct IBatchRouter.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"internalType\":\"struct IBatchRouter.SwapPathExactAmountIn[]\",\"name\":\"paths\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IBatchRouter.SwapExactInHookParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"querySwapExactInHook\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"pathAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"tokensOut\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct IBatchRouter.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"}],\"internalType\":\"struct IBatchRouter.SwapPathExactAmountOut[]\",\"name\":\"paths\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"querySwapExactOut\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"pathAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"tokensIn\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct IBatchRouter.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"}],\"internalType\":\"struct IBatchRouter.SwapPathExactAmountOut[]\",\"name\":\"paths\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IBatchRouter.SwapExactOutHookParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"querySwapExactOutHook\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"pathAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"tokensIn\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct IBatchRouter.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"internalType\":\"struct IBatchRouter.SwapPathExactAmountIn[]\",\"name\":\"paths\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"swapExactIn\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"pathAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"tokensOut\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct IBatchRouter.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"internalType\":\"struct IBatchRouter.SwapPathExactAmountIn[]\",\"name\":\"paths\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IBatchRouter.SwapExactInHookParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"swapExactInHook\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"pathAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"tokensOut\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct IBatchRouter.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"}],\"internalType\":\"struct IBatchRouter.SwapPathExactAmountOut[]\",\"name\":\"paths\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"swapExactOut\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"pathAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"tokensIn\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isBuffer\",\"type\":\"bool\"}],\"internalType\":\"struct IBatchRouter.SwapPathStep[]\",\"name\":\"steps\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"}],\"internalType\":\"struct IBatchRouter.SwapPathExactAmountOut[]\",\"name\":\"paths\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IBatchRouter.SwapExactOutHookParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"swapExactOutHook\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"pathAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"tokensIn\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}]},\"kind\":\"dev\",\"methods\":{\"getSender()\":{\"returns\":{\"_0\":\"The address of the sender\"}},\"multicall(bytes[])\":{\"params\":{\"data\":\"Encoded function calls to be executed in the batch.\"},\"returns\":{\"results\":\"Array of bytes arrays, each representing the return data from each function call executed.\"}},\"permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])\":{\"params\":{\"multicallData\":\"An array of bytes arrays, each representing an encoded function call on this contract\",\"permit2Batch\":\"A batch of permit2 approvals\",\"permit2Signature\":\"A permit2 signature for the batch approval\",\"permitBatch\":\"An array of `PermitApproval` structs, each representing an ERC20 permit request\",\"permitSignatures\":\"An array of bytes, corresponding to the permit request signature in `permitBatch`\"},\"returns\":{\"results\":\"Array of bytes arrays, each representing the return data from each function call executed\"}},\"querySwapExactIn((address,(address,address,bool)[],uint256,uint256)[],address,bytes)\":{\"details\":\"Min amounts out specified in the paths are ignored.\",\"params\":{\"paths\":\"Swap paths from token in to token out, specifying exact amounts in\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data required for the query\"},\"returns\":{\"amountsOut\":\"Calculated amounts of output tokens to be received, ordered by output token address\",\"pathAmountsOut\":\"Calculated amounts of output tokens corresponding to the last step of each given path\",\"tokensOut\":\"Output token addresses\"}},\"querySwapExactOut((address,(address,address,bool)[],uint256,uint256)[],address,bytes)\":{\"details\":\"Max amounts in specified in the paths are ignored.\",\"params\":{\"paths\":\"Swap paths from token in to token out, specifying exact amounts out\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data required for the query\"},\"returns\":{\"amountsIn\":\"Calculated amounts of input tokens to be received, ordered by input token address\",\"pathAmountsIn\":\"Calculated amounts of input tokens corresponding to the last step of each given path\",\"tokensIn\":\"Input token addresses\"}},\"swapExactIn((address,(address,address,bool)[],uint256,uint256)[],uint256,bool,bytes)\":{\"params\":{\"deadline\":\"Deadline for the swap, after which it will revert\",\"paths\":\"Swap paths from token in to token out, specifying exact amounts in\",\"userData\":\"Additional (optional) data required for the swap\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsOut\":\"Calculated amounts of output tokens, ordered by output token address\",\"pathAmountsOut\":\"Calculated amounts of output tokens corresponding to the last step of each given path\",\"tokensOut\":\"Output token addresses\"}},\"swapExactOut((address,(address,address,bool)[],uint256,uint256)[],uint256,bool,bytes)\":{\"params\":{\"deadline\":\"Deadline for the swap\",\"paths\":\"Swap paths from token in to token out, specifying exact amounts out\",\"userData\":\"Additional (optional) data required for the swap\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsIn\":\"Calculated amounts of input tokens, ordered by input token address\",\"pathAmountsIn\":\"Calculated amounts of input tokens corresponding to the first step of each given path\",\"tokensIn\":\"Input token addresses\"}},\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"ErrorSelectorNotFound()\":[{\"notice\":\"Handle the \\\"reverted without a reason\\\" case (i.e., no return data).\"}],\"EthTransfer()\":[{\"notice\":\"Incoming ETH transfer from an address that is not WETH.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"InsufficientEth()\":[{\"notice\":\"The amount of ETH paid is insufficient to complete this operation.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}],\"TransientIndexOutOfBounds()\":[{\"notice\":\"An index is out of bounds on an array operation (e.g., at).\"}]},\"kind\":\"user\",\"methods\":{\"getPermit2()\":{\"notice\":\"Returns Permit2 contract address.\"},\"getSender()\":{\"notice\":\"Get the first sender which initialized the call to Router.\"},\"getWeth()\":{\"notice\":\"Returns WETH contract address.\"},\"multicall(bytes[])\":{\"notice\":\"Executes a batch of function calls on this contract.\"},\"permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])\":{\"notice\":\"Permits multiple allowances and executes a batch of function calls on this contract.\"},\"querySwapExactIn((address,(address,address,bool)[],uint256,uint256)[],address,bytes)\":{\"notice\":\"Queries a swap operation involving multiple paths (steps), specifying exact input token amounts.\"},\"querySwapExactOut((address,(address,address,bool)[],uint256,uint256)[],address,bytes)\":{\"notice\":\"Queries a swap operation involving multiple paths (steps), specifying exact output token amounts.\"},\"swapExactIn((address,(address,address,bool)[],uint256,uint256)[],uint256,bool,bytes)\":{\"notice\":\"Executes a swap operation involving multiple paths (steps), specifying exact input token amounts.\"},\"swapExactOut((address,(address,address,bool)[],uint256,uint256)[],uint256,bool,bytes)\":{\"notice\":\"Executes a swap operation involving multiple paths (steps), specifying exact output token amounts.\"},\"version()\":{\"notice\":\"Getter for the version.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/test/BatchRouterMock.sol\":\"BatchRouterMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x75d5964b2f92dba9b9254e0052de28a9378e6759b1b28ccbb51db0bc80024176\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6ec9c862929ccff2be994d0296c0a4de3ddc19bb5a7aae3d4df0887dc7b29c8e\",\"dweb:/ipfs/QmSNr2fkNM2VyAo3B1DG1cuRh41t4A6mJZqeUu6vvYb97G\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBatchRouter.sol\":{\"keccak256\":\"0x700bec0606b05dd5e2799eeb01d5fc63149d84cddf349f75b43df241dd828798\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d18022dc7acd83fc7b37526f63bdd4d7cc11d9ab8cbe273a5a24e5e32c4df7db\",\"dweb:/ipfs/QmR9jWC8iY1nAXhhm9jj2UqvJdK9Coi7S3QVzGmayJcmpw\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouterCommon.sol\":{\"keccak256\":\"0x82d459426edf0ac20a33ad2065dae1f83544069b9887618248c0722e25a8b736\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c4566915a8c2b10f6232f92dad5e4409bb2aa46baf6a5d78dc0ac447facbfb37\",\"dweb:/ipfs/QmReRhA1BxRocwWsGgacaAcC2xRtWqJgN57bd2Yyy7A1gd\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISenderGuard.sol\":{\"keccak256\":\"0x2ec1ecf5c578aab7502f6985a03fbb79998218bdef819845d70d28a6994cff5b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a32637a45f19c29797db11eb25eb9bfda73302f280a64a9d9a4ab123db1b8e6f\",\"dweb:/ipfs/QmXGimviZ4Mr6kwgqkCwpHH5uGHVEjAcCRNvAwvoVYKi6f\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol\":{\"keccak256\":\"0x9dc4c8d6dd5dbc108dd377dab73a3e6c84e8c104713d2afb3cba8acc9ddf4c63\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2ef7c65fe356144f8cd720109b818e1ec6cc495ca35b55ca273ef9db45c6ae00\",\"dweb:/ipfs/QmREJgnfgoqemnYKvfYjTFJBAMsV9VAKA5AY5Woprpc1vs\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":{\"keccak256\":\"0xb4ee9e1543d36bdf9eeb4a9d5ab41170723239a1e27a2272f2e31de4765c019b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b70dd5e4fa496c2c1efb6bd20368587ba3c9c0d0afac9dc3631a29ff2628f99\",\"dweb:/ipfs/QmQigXUkpDuVK5VSX67RABrAC9bashPcHMasgPRNJb4k8Z\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":{\"keccak256\":\"0xb5f6b1d0ee3f295a717ce58329eaadccb1eefc2e1e02e2e7c438e377628475cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03c1b9bc73b7d14d9e1948a31c271a03a6ba4291f44d9aff17e60d300c111d0d\",\"dweb:/ipfs/QmNpW3iD3ST76N6xTncuVgYSuafSqFkXUmxNaK8uybr96G\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/TransientEnumerableSet.sol\":{\"keccak256\":\"0x1b77bbe902f863cb148ed28ae055841f77fc245b44f878932d0b8e3f2efba7f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1925829096d14d87eacbf2b7d42866128e2b43e1ff4249742a74f62e372ad247\",\"dweb:/ipfs/QmbFmGn45eoiHZHFGhXRqKSzg53j2Lz2XGQqaw6pkSjRxq\"]},\"@balancer-labs/v3-vault/contracts/BatchRouter.sol\":{\"keccak256\":\"0x1bfa17be2b1221e762f442d8d70ba20f47813c44feffb9ab1afa1ad13883abca\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32fc58bb361c2b084a4fbc594881a9f7a1a74de0a9a8a6ab1d6323bc68cb5bcb\",\"dweb:/ipfs/QmUEzgjg1H2HXrXyFyinsHR4WL1wBRHhAY7p7UfaEd3r4n\"]},\"@balancer-labs/v3-vault/contracts/BatchRouterCommon.sol\":{\"keccak256\":\"0x2e823b86db98c526a3ae859eeee2280dbd8db385e2f70fd41a32072dea0b2567\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://83e33ceaf6b9737c2bc83dc045c06aa67f4e563c106f5d7862f975c3493438fd\",\"dweb:/ipfs/QmQmYzzUCT8mmRenu6kGu81fk7GViYob4mhTuAi1zsYBnr\"]},\"@balancer-labs/v3-vault/contracts/RouterCommon.sol\":{\"keccak256\":\"0xb473ef641d1465f4d3c4f0372183e7c4c0baa77b2e2cf73dee947ab7ab722bac\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://61a166cdf1760c79790f921a8edee1f1977f07cef699db901bd15100ab30f96f\",\"dweb:/ipfs/QmdyhDm4PgNyzNC3s25k68yd52GtqM4PJt6QpfkmEmRtHW\"]},\"@balancer-labs/v3-vault/contracts/SenderGuard.sol\":{\"keccak256\":\"0x43fbf1ee03766ff75e6306520827db7d8f9cbc63f4609105a7062cbf6c6980a2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c015d974c3c8ae2f0677905a3216148611be430d4f3b8e64698ede996c8b4a46\",\"dweb:/ipfs/QmdrU9JE9NoksjQ6DUmGH1uKjgdyXVZXfD1RzdwFPnYtzr\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@balancer-labs/v3-vault/contracts/lib/RouterWethLib.sol\":{\"keccak256\":\"0xd66f21fa586085e10a1e322370c7015ebe472c44fc27472a6fdfe67ad6d9b188\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://88b4830e07a76a68dce1e3adba583f60259df5187087def2fd43d3c1f8b0e2ae\",\"dweb:/ipfs/QmbGNEfYtDUFpGrFYo9iJcSg9sJxiAVN9iaJApCaHobTDm\"]},\"@balancer-labs/v3-vault/contracts/test/BatchRouterMock.sol\":{\"keccak256\":\"0xaf99aea96a806f65978ba30010082dd6ca34b037fe107fc87df476f2bbf9e388\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://19b28029dcef4b4a455d71749cf1599dbc98835a018f99d3d3017fe4bfcdec7e\",\"dweb:/ipfs/QmZmdoBPYxEzX9Z3HJtWJ1wBzgp7U5c4PVYbXCQaJ8zwCT\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"permit2/src/interfaces/IAllowanceTransfer.sol\":{\"keccak256\":\"0x37f0ac203b6ef605c9533e1a739477e8e9dcea90710b40e645a367f8a21ace29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0104d72aeaec1cd66cc232e7de7b7ead08608efcc179491b8a66387614670b0\",\"dweb:/ipfs/QmfAZDyuNC9FXXbnJUwqHNwmAK6uRrXxtWEytLsxjskPsN\"]},\"permit2/src/interfaces/IEIP712.sol\":{\"keccak256\":\"0xfdccf2b9639070803cd0e4198427fb0df3cc452ca59bd3b8a0d957a9a4254138\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7c936ac42ce89e827db905a1544397f8bdf46db34cdb6aa1b90dea42fdb4c72\",\"dweb:/ipfs/QmVgurxo1N31qZqkPBirw9Z7S9tLYmv6jSwQp8R8ur2cBk\"]},\"permit2/src/interfaces/IPermit2.sol\":{\"keccak256\":\"0xaa631cc9f53e699301d94233007110a345e6779011def484e8dd97b8fe0af771\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc0502cf19c9c18f320a3001201e89e350393b75837f6b7971de18b2de06f30d\",\"dweb:/ipfs/QmT9SfhdJ7VJNNrf94g4H5usyi7ShqWGx7Cqsz9jZTjX96\"]},\"permit2/src/interfaces/ISignatureTransfer.sol\":{\"keccak256\":\"0xe6df9966f8841dc3958ee86169c89de97e7f614c81c28b9dc947b12d732df64e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3d4eafdee7f48c3be8350a94eb6edd0bfb2af2c105df65787a77174f356c0317\",\"dweb:/ipfs/QmY1j2adeeAhNpn6cUuthemxGCdLXHTfyMh9yTKsY4mZ2d\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/test/BufferRouterMock.sol":{"BufferRouterMock":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"contract IWETH","name":"weth","type":"address"},{"internalType":"contract IPermit2","name":"permit2","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"ErrorSelectorNotFound","type":"error"},{"inputs":[],"name":"EthTransfer","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[],"name":"InsufficientEth","type":"error"},{"inputs":[],"name":"MockErrorCode","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedIn","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingIn","type":"uint256"},{"internalType":"uint256","name":"amountWrappedIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedIn","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBufferHook","outputs":[{"internalType":"uint256","name":"amountUnderlyingIn","type":"uint256"},{"internalType":"uint256","name":"amountWrappedIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getPermit2","outputs":[{"internalType":"contract IPermit2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSender","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWeth","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"exactAmountUnderlyingIn","type":"uint256"},{"internalType":"uint256","name":"exactAmountWrappedIn","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"exactAmountUnderlyingIn","type":"uint256"},{"internalType":"uint256","name":"exactAmountWrappedIn","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBufferHook","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualReentrancyAddLiquidityToBufferHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualReentrancyInitializeBufferHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"internalType":"struct IRouterCommon.PermitApproval[]","name":"permitBatch","type":"tuple[]"},{"internalType":"bytes[]","name":"permitSignatures","type":"bytes[]"},{"components":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint160","name":"amount","type":"uint160"},{"internalType":"uint48","name":"expiration","type":"uint48"},{"internalType":"uint48","name":"nonce","type":"uint48"}],"internalType":"struct IAllowanceTransfer.PermitDetails[]","name":"details","type":"tuple[]"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"sigDeadline","type":"uint256"}],"internalType":"struct IAllowanceTransfer.PermitBatch","name":"permit2Batch","type":"tuple"},{"internalType":"bytes","name":"permit2Signature","type":"bytes"},{"internalType":"bytes[]","name":"multicallData","type":"bytes[]"}],"name":"permitBatchAndCall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"}],"name":"queryAddLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingIn","type":"uint256"},{"internalType":"uint256","name":"amountWrappedIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"}],"name":"queryAddLiquidityToBufferHook","outputs":[{"internalType":"uint256","name":"amountUnderlyingIn","type":"uint256"},{"internalType":"uint256","name":"amountWrappedIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"exactAmountUnderlyingIn","type":"uint256"},{"internalType":"uint256","name":"exactAmountWrappedIn","type":"uint256"}],"name":"queryInitializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"exactAmountUnderlyingIn","type":"uint256"},{"internalType":"uint256","name":"exactAmountWrappedIn","type":"uint256"}],"name":"queryInitializeBufferHook","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"exactSharesToRemove","type":"uint256"}],"name":"queryRemoveLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceOut","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"exactSharesToRemove","type":"uint256"}],"name":"queryRemoveLiquidityFromBufferHook","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceOut","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}],"evm":{"bytecode":{"functionDebugData":{"finalize_allocation":{"entryPoint":824,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_5225":{"entryPoint":797,"id":null,"parameterSlots":1,"returnSlots":0},"fun_calculateSlot":{"entryPoint":859,"id":6911,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"610120604090808252346103195760608161253680380380916100228285610338565b833981010312610319578051916001600160a01b0391828416840361031957602080820151918483168303610319578301519384168403610319578251946100698661031d565b600e86526d4d6f636b20526f7574657220763160901b828701526100cb84516100918161031d565b600b81526a14d95b99195c91dd585c9960aa1b848201528551906100b48261031d565b600682526539b2b73232b960d11b8583015261035b565b60805260a0528451946001600160401b038611610305575f54906001918281811c911680156102fb575b848210146102e757601f81116102a1575b508290601f881160011461023f579680928192610188969798995f94610234575b50501b915f199060031b1c1916175f555b83516101438161031d565b600c81526b2937baba32b921b7b6b6b7b760a11b82820152701a5cd4995d1d5c9b915d1a131bd8dad959607a1b85519261017c8461031d565b6011845283015261035b565b60c05260e05261010091825251612128918261040e8339608051828181610b430152611af8015260a051828181610235015281816103700152818161052201528181610765015281816108a201528181610ac201528181610dc801528181610f7d01528181611dca0152611e69015260c051828181611b380152611fd0015260e0518281816031015261180001525181818161100d015281816112040152818161132b0152611e460152f35b015192505f80610127565b9690601f198216905f8052845f20915f5b81811061028c575098836101889798999a10610274575b505050811b015f55610138565b01515f1960f88460031b161c191690555f8080610267565b8a830151845592850192918601918601610250565b5f8052835f20601f890160051c810191858a106102dd575b601f0160051c019083905b8281106102d2575050610106565b5f81550183906102c4565b90915081906102b9565b634e487b7160e01b5f52602260045260245ffd5b90607f16906100f5565b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b604081019081106001600160401b0382111761030557604052565b601f909101601f19168101906001600160401b0382119082101761030557604052565b906103c8603a60209260405193849181808401977f62616c616e6365722d6c6162732e76332e73746f726167652e000000000000008952805191829101603986015e830190601760f91b60398301528051928391018583015e015f8382015203601a810184520182610338565b5190205f1981019081116103f9576040519060208201908152602082526103ee8261031d565b9051902060ff191690565b634e487b7160e01b5f52601160045260245ffdfe6080806040526004361015610081575b50361561001a575f80fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361005957005b7f0540ddf6000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f3560e01c908163107c279f146117d65750806313f7bb4d1461175957806319c6989f146110315780631bbf2e2314610fe1578063400f230d14610edb5780634fe56ed614610d3e578063502383f414610cbe57806354fd4d5014610b815780635e01eb5a14610b2f578063662727cc146109f05780638afe5c3814610932578063a39026041461081b578063ac9650d8146107d3578063b365a3c214610682578063bc48e97f146105b6578063d96af07014610496578063d9f70869146102e55763e0fefe3514610153575f61000f565b3461028257610161366119c3565b73ffffffffffffffffffffffffffffffffffffffff9182604051947fa3902604000000000000000000000000000000000000000000000000000000006020870152166024850152604484015260648301526064825260a082019082821067ffffffffffffffff8311176102b857815f91816040527fedfa3568000000000000000000000000000000000000000000000000000000008252602060a486015281837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608761023060c4820182611899565b0301927f0000000000000000000000000000000000000000000000000000000000000000165af19182156102ad575f92610286575b505060208180518101031261028257602080910151604051908152f35b5f80fd5b6102a6925060a0903d90815f853e61029e8285611a0e565b010190611a4d565b5f80610265565b6040513d5f823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b34610282576102f33661193f565b9190610300949394611d86565b610308611db3565b6040517f653eb3b000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201879052604482018490526064820192909252838216608482015260209591937f00000000000000000000000000000000000000000000000000000000000000008516929091878160a4815f885af19687156102ad5788915f98610463575b50908692916024604051809581937f4afbaf5a00000000000000000000000000000000000000000000000000000000835216978860048301525afa9586156102ad5761040b96610406935f91610436575b501683611e1e565b611e1e565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051908152f35b61045691508a3d8c1161045c575b61044e8183611a0e565b810190611ac6565b8a6103fe565b503d610444565b828194939299503d831161048f575b61047c8183611a0e565b81010312610282579051958790866103ad565b503d610472565b3461028257604060031936011261028257608460406104b3611824565b6104bb611d86565b6104c3611db3565b73ffffffffffffffffffffffffffffffffffffffff9283915f845195869485937febc7955c00000000000000000000000000000000000000000000000000000000855216600484015260243560248401528160448401528160648401527f0000000000000000000000000000000000000000000000000000000000000000165af19081156102ad576040915f915f91610587575b505f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d82519182526020820152f35b90506105a99150823d84116105af575b6105a18183611a0e565b810190611ab0565b83610557565b503d610597565b34610282575f600319360112610282576105ce611d86565b6040517fd9f708690000000000000000000000000000000000000000000000000000000081526020818061062160048201905f608060a08401938281528260208201528260408201528260608201520152565b03815f305af180156102ad57610657575b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b602090813d831161067b575b61066d8183611a0e565b810103126102825780610632565b503d610663565b346102825761074b5f61070261071061069a36611988565b6040517fd9f7086900000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff90941660248501526044840192909252606483015260848201523360a482015291829060c4820190565b03601f198101835282611a0e565b604051809381927f48c89491000000000000000000000000000000000000000000000000000000008352602060048401526024830190611899565b03818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af19081156102ad575f916107b1575b5060208180518101031261028257602080910151604051908152f35b6107cd91503d805f833e6107c58183611a0e565b810190611a4d565b81610795565b60206003193601126102825760043567ffffffffffffffff81116102825761080b610805610817923690600401611868565b90611af2565b604051918291826118be565b0390f35b346102825760a4602061082d366119c3565b91610839949194611d86565b610841611db3565b5f73ffffffffffffffffffffffffffffffffffffffff809460405197889687957f653eb3b0000000000000000000000000000000000000000000000000000000008752166004860152602485015260448401528160648401523060848401527f0000000000000000000000000000000000000000000000000000000000000000165af180156102ad575f906108ff575b6020905f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051908152f35b506020813d60201161092a575b8161091960209383611a0e565b8101031261028257602090516108d1565b3d915061090c565b34610282575f6003193601126102825761094a611d86565b6040517f4fe56ed60000000000000000000000000000000000000000000000000000000081526040818061099d60048201905f608060a08401938281528260208201528260408201528260608201520152565b03815f305af180156102ad576109d2575f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b6109ea9060403d6040116105af576105a18183611a0e565b50610632565b3461028257604060031936011261028257610aa85f610702610a6d610a13611824565b6040517f400f230d00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091166024808301919091523560448201529182906064820190565b604051809381927fedfa3568000000000000000000000000000000000000000000000000000000008352602060048401526024830190611899565b03818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af19081156102ad57604091610b09915f91610b15575b5060208082518301019101611ab0565b82519182526020820152f35b610b2991503d805f833e6107c58183611a0e565b83610af9565b34610282575f6003193601126102825760207f00000000000000000000000000000000000000000000000000000000000000005c73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b34610282575f600319360112610282576040515f5f549060018260011c9160018416918215610cb4575b6020948585108414610c875785879486865291825f14610c49575050600114610bf0575b50610bdc92500383611a0e565b610817604051928284938452830190611899565b5f808052859250907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b858310610c31575050610bdc935082010185610bcf565b80548389018501528794508693909201918101610c1a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685820152610bdc95151560051b8501019250879150610bcf9050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f1692610bab565b3461028257610aa85f610702610710610cd636611988565b6040517f4fe56ed600000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff90941660248501526044840192909252606483015260848201523360a482015291829060c4820190565b3461028257610d4c3661193f565b93919092610d58611d86565b610d60611db3565b604080517fe2a92b1a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482019390935260448101939093526064830194909452848116608483015290927f00000000000000000000000000000000000000000000000000000000000000008216908460a4815f855af19283156102ad575f945f94610eae575b5090602083926024604051809681937f4afbaf5a00000000000000000000000000000000000000000000000000000000835216948560048301525afa9586156102ad57610406868694604099610e60975f91610e8f57501683611e1e565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d82519182526020820152f35b610ea8915060203d60201161045c5761044e8183611a0e565b8b6103fe565b602095508392919450610ecf9060403d6040116105af576105a18183611a0e565b95909594919250610e02565b346102825760406003193601126102825760a46040610ef8611824565b610f00611d86565b610f08611db3565b73ffffffffffffffffffffffffffffffffffffffff9283915f845195869485937fe2a92b1a0000000000000000000000000000000000000000000000000000000085521660048401526fffffffffffffffffffffffffffffffff806024850152604484015260243560648401523060848401527f0000000000000000000000000000000000000000000000000000000000000000165af19081156102ad576040915f915f9161058757505f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d82519182526020820152f35b34610282575f60031936011261028257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b60a06003193601126102825767ffffffffffffffff60043511610282573660236004350112156102825767ffffffffffffffff60043560040135116102825736602460c060043560040135026004350101116102825760243567ffffffffffffffff8111610282576110a7903690600401611868565b67ffffffffffffffff60443511610282576060600319604435360301126102825767ffffffffffffffff60643511610282573660236064350112156102825767ffffffffffffffff606435600401351161028257366024606435600401356064350101116102825760843567ffffffffffffffff81116102825761112f903690600401611868565b92909161113a611d86565b806004356004013503611731575f5b60043560040135811061142257505050604435600401357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd60443536030181121561028257806044350160048101359067ffffffffffffffff82116102825760248260071b3603910113610282576111ec575b61081761080b84845f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d611af2565b9173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b1561028257604051927f2a2d80d10000000000000000000000000000000000000000000000000000000084523360048501526060602485015260c484019060443501602481019167ffffffffffffffff60048301351161028257600482013560071b36038313610282576060606487015260048201359052849160e48301915f905b6004810135821061138e57505050906020815f9373ffffffffffffffffffffffffffffffffffffffff6112de602460443501611847565b1660848301526044803581013560a4840152600319838303019083015260643560048101358083529060240184830137600460643501358181018401869052601f01601f191601030181837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af19182156102ad576108179361080b9361137f575b509150916111bc565b611388906119fa565b84611376565b9193509173ffffffffffffffffffffffffffffffffffffffff6113b085611847565b1681526020808501359173ffffffffffffffffffffffffffffffffffffffff8316809303610282576004926001928201526113ed60408701611d73565b65ffffffffffff809116604083015261140860608801611d73565b1660608201526080809101950193019050869392916112a7565b611437611430828486611c6d565b3691611cfa565b6040519081606081011067ffffffffffffffff6060840111176102b857606082016040525f82525f60208301525f6040830152602081015190606060408201519101515f1a9183526020830152604082015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc818402600435013603011261028257604051908160c081011067ffffffffffffffff60c0840111176102b85760c082016040526114f2602460c085026004350101611847565b808352611508604460c086026004350101611847565b90816020850152611522606460c087026004350101611847565b60408581019190915260043560c08702016084810135606087015260a4810135608087015260c4013560a0860152830151835160209094015160ff919091169273ffffffffffffffffffffffffffffffffffffffff83163b15610282575f73ffffffffffffffffffffffffffffffffffffffff809460e4948a98849860c460c06040519c8d9b8c9a7fd505accf000000000000000000000000000000000000000000000000000000008c521660048b01523060248b0152608482820260043501013560448b0152026004350101356064880152608487015260a486015260c4850152165af19081611722575b506117195761161b611d44565b9073ffffffffffffffffffffffffffffffffffffffff81511690602073ffffffffffffffffffffffffffffffffffffffff81830151166044604051809581937fdd62ed3e00000000000000000000000000000000000000000000000000000000835260048301523060248301525afa9182156102ad575f926116e4575b5060600151036116ad57506001905b01611149565b8051156116bc57805190602001fd5b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b9091506020813d602011611711575b8161170060209383611a0e565b810103126102825751906060611698565b3d91506116f3565b506001906116a7565b61172b906119fa565b8761160e565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461028257604060031936011261028257610aa85f610702610a6d61177c611824565b6040517fd96af07000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091166024808301919091523560448201529182906064820190565b34610282575f6003193601126102825760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361028257565b359073ffffffffffffffffffffffffffffffffffffffff8216820361028257565b9181601f840112156102825782359167ffffffffffffffff8311610282576020808501948460051b01011161028257565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b8483106118f35750505050505090565b909192939495848061192f837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528a51611899565b98019301930191949392906118e3565b60031960a09101126102825773ffffffffffffffffffffffffffffffffffffffff6004358181168103610282579160243591604435916064359160843590811681036102825790565b60031960809101126102825760043573ffffffffffffffffffffffffffffffffffffffff811681036102825790602435906044359060643590565b60031960609101126102825760043573ffffffffffffffffffffffffffffffffffffffff8116810361028257906024359060443590565b67ffffffffffffffff81116102b857604052565b90601f601f19910116810190811067ffffffffffffffff8211176102b857604052565b67ffffffffffffffff81116102b857601f01601f191660200190565b6020818303126102825780519067ffffffffffffffff8211610282570181601f8201121561028257805190611a8182611a31565b92611a8f6040519485611a0e565b8284526020838301011161028257815f9260208093018386015e8301015290565b9190826040910312610282576020825192015190565b90816020910312610282575173ffffffffffffffffffffffffffffffffffffffff811681036102825790565b91905f907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff825c1615611c48575b7f000000000000000000000000000000000000000000000000000000000000000094855c611c20576001906001875d611b6e83611c55565b92611b7c6040519485611a0e565b808452601f19611b8b82611c55565b015f5b818110611c0f5750505f5b818110611bc65750505050905f611bbb9392955d805c91611bbd575b50611fc6565b565b5f905d5f611bb5565b80611bf35f80611bdb6114308996888a611c6d565b602081519101305af4611bec611d44565b9030612081565b611bfd8288611d30565b52611c088187611d30565b5001611b99565b806060602080938901015201611b8e565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b915033815d600191611b36565b67ffffffffffffffff81116102b85760051b60200190565b9190811015611ccd5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561028257019081359167ffffffffffffffff8311610282576020018236038113610282579190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b929192611d0682611a31565b91611d146040519384611a0e565b829481845281830111610282578281602093845f960137010152565b8051821015611ccd5760209160051b010190565b3d15611d6e573d90611d5582611a31565b91611d636040519384611a0e565b82523d5f602084013e565b606090565b359065ffffffffffff8216820361028257565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c611c20576001905d565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303611df257565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b90915f9080611e2e575b50505050565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016817f00000000000000000000000000000000000000000000000000000000000000001695828411611f9557821694813b1561028257608483915f809460405196879586947f36c785160000000000000000000000000000000000000000000000000000000086521660048501528b6024850152881660448401528960648401525af180156102ad57611f7e575b506044829360209360405196879485937f15afd409000000000000000000000000000000000000000000000000000000008552600485015260248401525af1908115611f725750611f47575b808080611e28565b602090813d8311611f6b575b611f5d8183611a0e565b81010312610282575f611f3f565b503d611f53565b604051903d90823e3d90fd5b60209250611f8b906119fa565b60445f9250611ef3565b837f6dfcc650000000000000000000000000000000000000000000000000000000005f5260a060045260245260445ffd5b4790811561207d577f00000000000000000000000000000000000000000000000000000000000000005c61207d57814710612051575f80809373ffffffffffffffffffffffffffffffffffffffff8294165af1612021611d44565b501561202957565b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fcd786059000000000000000000000000000000000000000000000000000000005f523060045260245ffd5b5050565b90612096575080511561202957805190602001fd5b815115806120e9575b6120a7575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561209f56fea2646970667358221220a75c1f83f7ed1ed03892451311281a8f745a558ca5d25cbdef5810ab11417fc364736f6c634300081b0033","opcodes":"PUSH2 0x120 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x319 JUMPI PUSH1 0x60 DUP2 PUSH2 0x2536 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x22 DUP3 DUP6 PUSH2 0x338 JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x319 JUMPI DUP1 MLOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP5 AND DUP5 SUB PUSH2 0x319 JUMPI PUSH1 0x20 DUP1 DUP3 ADD MLOAD SWAP2 DUP5 DUP4 AND DUP4 SUB PUSH2 0x319 JUMPI DUP4 ADD MLOAD SWAP4 DUP5 AND DUP5 SUB PUSH2 0x319 JUMPI DUP3 MLOAD SWAP5 PUSH2 0x69 DUP7 PUSH2 0x31D JUMP JUMPDEST PUSH1 0xE DUP7 MSTORE PUSH14 0x4D6F636B20526F75746572207631 PUSH1 0x90 SHL DUP3 DUP8 ADD MSTORE PUSH2 0xCB DUP5 MLOAD PUSH2 0x91 DUP2 PUSH2 0x31D JUMP JUMPDEST PUSH1 0xB DUP2 MSTORE PUSH11 0x14D95B99195C91DD585C99 PUSH1 0xAA SHL DUP5 DUP3 ADD MSTORE DUP6 MLOAD SWAP1 PUSH2 0xB4 DUP3 PUSH2 0x31D JUMP JUMPDEST PUSH1 0x6 DUP3 MSTORE PUSH6 0x39B2B73232B9 PUSH1 0xD1 SHL DUP6 DUP4 ADD MSTORE PUSH2 0x35B JUMP JUMPDEST PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE DUP5 MLOAD SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP7 GT PUSH2 0x305 JUMPI PUSH0 SLOAD SWAP1 PUSH1 0x1 SWAP2 DUP3 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x2FB JUMPI JUMPDEST DUP5 DUP3 LT EQ PUSH2 0x2E7 JUMPI PUSH1 0x1F DUP2 GT PUSH2 0x2A1 JUMPI JUMPDEST POP DUP3 SWAP1 PUSH1 0x1F DUP9 GT PUSH1 0x1 EQ PUSH2 0x23F JUMPI SWAP7 DUP1 SWAP3 DUP2 SWAP3 PUSH2 0x188 SWAP7 SWAP8 SWAP9 SWAP10 PUSH0 SWAP5 PUSH2 0x234 JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE JUMPDEST DUP4 MLOAD PUSH2 0x143 DUP2 PUSH2 0x31D JUMP JUMPDEST PUSH1 0xC DUP2 MSTORE PUSH12 0x2937BABA32B921B7B6B6B7B7 PUSH1 0xA1 SHL DUP3 DUP3 ADD MSTORE PUSH17 0x1A5CD4995D1D5C9B915D1A131BD8DAD959 PUSH1 0x7A SHL DUP6 MLOAD SWAP3 PUSH2 0x17C DUP5 PUSH2 0x31D JUMP JUMPDEST PUSH1 0x11 DUP5 MSTORE DUP4 ADD MSTORE PUSH2 0x35B JUMP JUMPDEST PUSH1 0xC0 MSTORE PUSH1 0xE0 MSTORE PUSH2 0x100 SWAP2 DUP3 MSTORE MLOAD PUSH2 0x2128 SWAP2 DUP3 PUSH2 0x40E DUP4 CODECOPY PUSH1 0x80 MLOAD DUP3 DUP2 DUP2 PUSH2 0xB43 ADD MSTORE PUSH2 0x1AF8 ADD MSTORE PUSH1 0xA0 MLOAD DUP3 DUP2 DUP2 PUSH2 0x235 ADD MSTORE DUP2 DUP2 PUSH2 0x370 ADD MSTORE DUP2 DUP2 PUSH2 0x522 ADD MSTORE DUP2 DUP2 PUSH2 0x765 ADD MSTORE DUP2 DUP2 PUSH2 0x8A2 ADD MSTORE DUP2 DUP2 PUSH2 0xAC2 ADD MSTORE DUP2 DUP2 PUSH2 0xDC8 ADD MSTORE DUP2 DUP2 PUSH2 0xF7D ADD MSTORE DUP2 DUP2 PUSH2 0x1DCA ADD MSTORE PUSH2 0x1E69 ADD MSTORE PUSH1 0xC0 MLOAD DUP3 DUP2 DUP2 PUSH2 0x1B38 ADD MSTORE PUSH2 0x1FD0 ADD MSTORE PUSH1 0xE0 MLOAD DUP3 DUP2 DUP2 PUSH1 0x31 ADD MSTORE PUSH2 0x1800 ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0x100D ADD MSTORE DUP2 DUP2 PUSH2 0x1204 ADD MSTORE DUP2 DUP2 PUSH2 0x132B ADD MSTORE PUSH2 0x1E46 ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0x127 JUMP JUMPDEST SWAP7 SWAP1 PUSH1 0x1F NOT DUP3 AND SWAP1 PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP2 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x28C JUMPI POP SWAP9 DUP4 PUSH2 0x188 SWAP8 SWAP9 SWAP10 SWAP11 LT PUSH2 0x274 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH2 0x138 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x267 JUMP JUMPDEST DUP11 DUP4 ADD MLOAD DUP5 SSTORE SWAP3 DUP6 ADD SWAP3 SWAP2 DUP7 ADD SWAP2 DUP7 ADD PUSH2 0x250 JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP4 PUSH0 KECCAK256 PUSH1 0x1F DUP10 ADD PUSH1 0x5 SHR DUP2 ADD SWAP2 DUP6 DUP11 LT PUSH2 0x2DD JUMPI JUMPDEST PUSH1 0x1F ADD PUSH1 0x5 SHR ADD SWAP1 DUP4 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x2D2 JUMPI POP POP PUSH2 0x106 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP4 SWAP1 PUSH2 0x2C4 JUMP JUMPDEST SWAP1 SWAP2 POP DUP2 SWAP1 PUSH2 0x2B9 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xF5 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0x305 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x305 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH2 0x3C8 PUSH1 0x3A PUSH1 0x20 SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP2 DUP2 DUP1 DUP5 ADD SWAP8 PUSH32 0x62616C616E6365722D6C6162732E76332E73746F726167652E00000000000000 DUP10 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 ADD PUSH1 0x39 DUP7 ADD MCOPY DUP4 ADD SWAP1 PUSH1 0x17 PUSH1 0xF9 SHL PUSH1 0x39 DUP4 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 SWAP2 ADD DUP6 DUP4 ADD MCOPY ADD PUSH0 DUP4 DUP3 ADD MSTORE SUB PUSH1 0x1A DUP2 ADD DUP5 MSTORE ADD DUP3 PUSH2 0x338 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x3F9 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP3 MSTORE PUSH2 0x3EE DUP3 PUSH2 0x31D JUMP JUMPDEST SWAP1 MLOAD SWAP1 KECCAK256 PUSH1 0xFF NOT AND SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x81 JUMPI JUMPDEST POP CALLDATASIZE ISZERO PUSH2 0x1A JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x59 JUMPI STOP JUMPDEST PUSH32 0x540DDF600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x107C279F EQ PUSH2 0x17D6 JUMPI POP DUP1 PUSH4 0x13F7BB4D EQ PUSH2 0x1759 JUMPI DUP1 PUSH4 0x19C6989F EQ PUSH2 0x1031 JUMPI DUP1 PUSH4 0x1BBF2E23 EQ PUSH2 0xFE1 JUMPI DUP1 PUSH4 0x400F230D EQ PUSH2 0xEDB JUMPI DUP1 PUSH4 0x4FE56ED6 EQ PUSH2 0xD3E JUMPI DUP1 PUSH4 0x502383F4 EQ PUSH2 0xCBE JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0xB81 JUMPI DUP1 PUSH4 0x5E01EB5A EQ PUSH2 0xB2F JUMPI DUP1 PUSH4 0x662727CC EQ PUSH2 0x9F0 JUMPI DUP1 PUSH4 0x8AFE5C38 EQ PUSH2 0x932 JUMPI DUP1 PUSH4 0xA3902604 EQ PUSH2 0x81B JUMPI DUP1 PUSH4 0xAC9650D8 EQ PUSH2 0x7D3 JUMPI DUP1 PUSH4 0xB365A3C2 EQ PUSH2 0x682 JUMPI DUP1 PUSH4 0xBC48E97F EQ PUSH2 0x5B6 JUMPI DUP1 PUSH4 0xD96AF070 EQ PUSH2 0x496 JUMPI DUP1 PUSH4 0xD9F70869 EQ PUSH2 0x2E5 JUMPI PUSH4 0xE0FEFE35 EQ PUSH2 0x153 JUMPI PUSH0 PUSH2 0xF JUMP JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH2 0x161 CALLDATASIZE PUSH2 0x19C3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 PUSH1 0x40 MLOAD SWAP5 PUSH32 0xA390260400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP8 ADD MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x64 DUP3 MSTORE PUSH1 0xA0 DUP3 ADD SWAP1 DUP3 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x2B8 JUMPI DUP2 PUSH0 SWAP2 DUP2 PUSH1 0x40 MSTORE PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 PUSH1 0xA4 DUP7 ADD MSTORE DUP2 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 DUP8 PUSH2 0x230 PUSH1 0xC4 DUP3 ADD DUP3 PUSH2 0x1899 JUMP JUMPDEST SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x2AD JUMPI PUSH0 SWAP3 PUSH2 0x286 JUMPI JUMPDEST POP POP PUSH1 0x20 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x282 JUMPI PUSH1 0x20 DUP1 SWAP2 ADD MLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x2A6 SWAP3 POP PUSH1 0xA0 SWAP1 RETURNDATASIZE SWAP1 DUP2 PUSH0 DUP6 RETURNDATACOPY PUSH2 0x29E DUP3 DUP6 PUSH2 0x1A0E JUMP JUMPDEST ADD ADD SWAP1 PUSH2 0x1A4D JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x265 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH2 0x2F3 CALLDATASIZE PUSH2 0x193F JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x300 SWAP5 SWAP4 SWAP5 PUSH2 0x1D86 JUMP JUMPDEST PUSH2 0x308 PUSH2 0x1DB3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x653EB3B000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP8 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x64 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP4 DUP3 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0x20 SWAP6 SWAP2 SWAP4 PUSH32 0x0 DUP6 AND SWAP3 SWAP1 SWAP2 DUP8 DUP2 PUSH1 0xA4 DUP2 PUSH0 DUP9 GAS CALL SWAP7 DUP8 ISZERO PUSH2 0x2AD JUMPI DUP9 SWAP2 PUSH0 SWAP9 PUSH2 0x463 JUMPI JUMPDEST POP SWAP1 DUP7 SWAP3 SWAP2 PUSH1 0x24 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH32 0x4AFBAF5A00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND SWAP8 DUP9 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP6 DUP7 ISZERO PUSH2 0x2AD JUMPI PUSH2 0x40B SWAP7 PUSH2 0x406 SWAP4 PUSH0 SWAP2 PUSH2 0x436 JUMPI JUMPDEST POP AND DUP4 PUSH2 0x1E1E JUMP JUMPDEST PUSH2 0x1E1E JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x456 SWAP2 POP DUP11 RETURNDATASIZE DUP13 GT PUSH2 0x45C JUMPI JUMPDEST PUSH2 0x44E DUP2 DUP4 PUSH2 0x1A0E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1AC6 JUMP JUMPDEST DUP11 PUSH2 0x3FE JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x444 JUMP JUMPDEST DUP3 DUP2 SWAP5 SWAP4 SWAP3 SWAP10 POP RETURNDATASIZE DUP4 GT PUSH2 0x48F JUMPI JUMPDEST PUSH2 0x47C DUP2 DUP4 PUSH2 0x1A0E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x282 JUMPI SWAP1 MLOAD SWAP6 DUP8 SWAP1 DUP7 PUSH2 0x3AD JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x472 JUMP JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x282 JUMPI PUSH1 0x84 PUSH1 0x40 PUSH2 0x4B3 PUSH2 0x1824 JUMP JUMPDEST PUSH2 0x4BB PUSH2 0x1D86 JUMP JUMPDEST PUSH2 0x4C3 PUSH2 0x1DB3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 SWAP2 PUSH0 DUP5 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xEBC7955C00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x24 DUP5 ADD MSTORE DUP2 PUSH1 0x44 DUP5 ADD MSTORE DUP2 PUSH1 0x64 DUP5 ADD MSTORE PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2AD JUMPI PUSH1 0x40 SWAP2 PUSH0 SWAP2 PUSH0 SWAP2 PUSH2 0x587 JUMPI JUMPDEST POP PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST SWAP1 POP PUSH2 0x5A9 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x5AF JUMPI JUMPDEST PUSH2 0x5A1 DUP2 DUP4 PUSH2 0x1A0E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1AB0 JUMP JUMPDEST DUP4 PUSH2 0x557 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x597 JUMP JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x282 JUMPI PUSH2 0x5CE PUSH2 0x1D86 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD9F7086900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 DUP1 PUSH2 0x621 PUSH1 0x4 DUP3 ADD SWAP1 PUSH0 PUSH1 0x80 PUSH1 0xA0 DUP5 ADD SWAP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB DUP2 PUSH0 ADDRESS GAS CALL DUP1 ISZERO PUSH2 0x2AD JUMPI PUSH2 0x657 JUMPI JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x67B JUMPI JUMPDEST PUSH2 0x66D DUP2 DUP4 PUSH2 0x1A0E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x282 JUMPI DUP1 PUSH2 0x632 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x663 JUMP JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH2 0x74B PUSH0 PUSH2 0x702 PUSH2 0x710 PUSH2 0x69A CALLDATASIZE PUSH2 0x1988 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD9F7086900000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP5 AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 ADD MSTORE CALLER PUSH1 0xA4 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 PUSH1 0xC4 DUP3 ADD SWAP1 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x1A0E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x1899 JUMP JUMPDEST SUB DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2AD JUMPI PUSH0 SWAP2 PUSH2 0x7B1 JUMPI JUMPDEST POP PUSH1 0x20 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x282 JUMPI PUSH1 0x20 DUP1 SWAP2 ADD MLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x7CD SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x7C5 DUP2 DUP4 PUSH2 0x1A0E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1A4D JUMP JUMPDEST DUP2 PUSH2 0x795 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x282 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x282 JUMPI PUSH2 0x80B PUSH2 0x805 PUSH2 0x817 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1868 JUMP JUMPDEST SWAP1 PUSH2 0x1AF2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x18BE JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH1 0xA4 PUSH1 0x20 PUSH2 0x82D CALLDATASIZE PUSH2 0x19C3 JUMP JUMPDEST SWAP2 PUSH2 0x839 SWAP5 SWAP2 SWAP5 PUSH2 0x1D86 JUMP JUMPDEST PUSH2 0x841 PUSH2 0x1DB3 JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP5 PUSH1 0x40 MLOAD SWAP8 DUP9 SWAP7 DUP8 SWAP6 PUSH32 0x653EB3B000000000000000000000000000000000000000000000000000000000 DUP8 MSTORE AND PUSH1 0x4 DUP7 ADD MSTORE PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE DUP2 PUSH1 0x64 DUP5 ADD MSTORE ADDRESS PUSH1 0x84 DUP5 ADD MSTORE PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x2AD JUMPI PUSH0 SWAP1 PUSH2 0x8FF JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x92A JUMPI JUMPDEST DUP2 PUSH2 0x919 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1A0E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x282 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH2 0x8D1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x90C JUMP JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x282 JUMPI PUSH2 0x94A PUSH2 0x1D86 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4FE56ED600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x40 DUP2 DUP1 PUSH2 0x99D PUSH1 0x4 DUP3 ADD SWAP1 PUSH0 PUSH1 0x80 PUSH1 0xA0 DUP5 ADD SWAP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB DUP2 PUSH0 ADDRESS GAS CALL DUP1 ISZERO PUSH2 0x2AD JUMPI PUSH2 0x9D2 JUMPI PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH2 0x9EA SWAP1 PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x5AF JUMPI PUSH2 0x5A1 DUP2 DUP4 PUSH2 0x1A0E JUMP JUMPDEST POP PUSH2 0x632 JUMP JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x282 JUMPI PUSH2 0xAA8 PUSH0 PUSH2 0x702 PUSH2 0xA6D PUSH2 0xA13 PUSH2 0x1824 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x400F230D00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x24 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLDATALOAD PUSH1 0x44 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x1899 JUMP JUMPDEST SUB DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2AD JUMPI PUSH1 0x40 SWAP2 PUSH2 0xB09 SWAP2 PUSH0 SWAP2 PUSH2 0xB15 JUMPI JUMPDEST POP PUSH1 0x20 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x1AB0 JUMP JUMPDEST DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH2 0xB29 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x7C5 DUP2 DUP4 PUSH2 0x1A0E JUMP JUMPDEST DUP4 PUSH2 0xAF9 JUMP JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x282 JUMPI PUSH1 0x20 PUSH32 0x0 TLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x282 JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH0 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0xCB4 JUMPI JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP6 LT DUP5 EQ PUSH2 0xC87 JUMPI DUP6 DUP8 SWAP5 DUP7 DUP7 MSTORE SWAP2 DUP3 PUSH0 EQ PUSH2 0xC49 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xBF0 JUMPI JUMPDEST POP PUSH2 0xBDC SWAP3 POP SUB DUP4 PUSH2 0x1A0E JUMP JUMPDEST PUSH2 0x817 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1899 JUMP JUMPDEST PUSH0 DUP1 DUP1 MSTORE DUP6 SWAP3 POP SWAP1 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP6 DUP4 LT PUSH2 0xC31 JUMPI POP POP PUSH2 0xBDC SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0xBCF JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0xC1A JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0xBDC SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0xBCF SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0xBAB JUMP JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH2 0xAA8 PUSH0 PUSH2 0x702 PUSH2 0x710 PUSH2 0xCD6 CALLDATASIZE PUSH2 0x1988 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4FE56ED600000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP5 AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 ADD MSTORE CALLER PUSH1 0xA4 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 PUSH1 0xC4 DUP3 ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH2 0xD4C CALLDATASIZE PUSH2 0x193F JUMP JUMPDEST SWAP4 SWAP2 SWAP1 SWAP3 PUSH2 0xD58 PUSH2 0x1D86 JUMP JUMPDEST PUSH2 0xD60 PUSH2 0x1DB3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xE2A92B1A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x44 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x64 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP5 DUP2 AND PUSH1 0x84 DUP4 ADD MSTORE SWAP1 SWAP3 PUSH32 0x0 DUP3 AND SWAP1 DUP5 PUSH1 0xA4 DUP2 PUSH0 DUP6 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x2AD JUMPI PUSH0 SWAP5 PUSH0 SWAP5 PUSH2 0xEAE JUMPI JUMPDEST POP SWAP1 PUSH1 0x20 DUP4 SWAP3 PUSH1 0x24 PUSH1 0x40 MLOAD DUP1 SWAP7 DUP2 SWAP4 PUSH32 0x4AFBAF5A00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND SWAP5 DUP6 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP6 DUP7 ISZERO PUSH2 0x2AD JUMPI PUSH2 0x406 DUP7 DUP7 SWAP5 PUSH1 0x40 SWAP10 PUSH2 0xE60 SWAP8 PUSH0 SWAP2 PUSH2 0xE8F JUMPI POP AND DUP4 PUSH2 0x1E1E JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH2 0xEA8 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x45C JUMPI PUSH2 0x44E DUP2 DUP4 PUSH2 0x1A0E JUMP JUMPDEST DUP12 PUSH2 0x3FE JUMP JUMPDEST PUSH1 0x20 SWAP6 POP DUP4 SWAP3 SWAP2 SWAP5 POP PUSH2 0xECF SWAP1 PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x5AF JUMPI PUSH2 0x5A1 DUP2 DUP4 PUSH2 0x1A0E JUMP JUMPDEST SWAP6 SWAP1 SWAP6 SWAP5 SWAP2 SWAP3 POP PUSH2 0xE02 JUMP JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x282 JUMPI PUSH1 0xA4 PUSH1 0x40 PUSH2 0xEF8 PUSH2 0x1824 JUMP JUMPDEST PUSH2 0xF00 PUSH2 0x1D86 JUMP JUMPDEST PUSH2 0xF08 PUSH2 0x1DB3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 SWAP2 PUSH0 DUP5 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xE2A92B1A00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x64 DUP5 ADD MSTORE ADDRESS PUSH1 0x84 DUP5 ADD MSTORE PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2AD JUMPI PUSH1 0x40 SWAP2 PUSH0 SWAP2 PUSH0 SWAP2 PUSH2 0x587 JUMPI POP PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x282 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x282 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD GT PUSH2 0x282 JUMPI CALLDATASIZE PUSH1 0x23 PUSH1 0x4 CALLDATALOAD ADD SLT ISZERO PUSH2 0x282 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD GT PUSH2 0x282 JUMPI CALLDATASIZE PUSH1 0x24 PUSH1 0xC0 PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD MUL PUSH1 0x4 CALLDATALOAD ADD ADD GT PUSH2 0x282 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x282 JUMPI PUSH2 0x10A7 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1868 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD GT PUSH2 0x282 JUMPI PUSH1 0x60 PUSH1 0x3 NOT PUSH1 0x44 CALLDATALOAD CALLDATASIZE SUB ADD SLT PUSH2 0x282 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD GT PUSH2 0x282 JUMPI CALLDATASIZE PUSH1 0x23 PUSH1 0x64 CALLDATALOAD ADD SLT ISZERO PUSH2 0x282 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD GT PUSH2 0x282 JUMPI CALLDATASIZE PUSH1 0x24 PUSH1 0x64 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD PUSH1 0x64 CALLDATALOAD ADD ADD GT PUSH2 0x282 JUMPI PUSH1 0x84 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x282 JUMPI PUSH2 0x112F SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1868 JUMP JUMPDEST SWAP3 SWAP1 SWAP2 PUSH2 0x113A PUSH2 0x1D86 JUMP JUMPDEST DUP1 PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD SUB PUSH2 0x1731 JUMPI PUSH0 JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD DUP2 LT PUSH2 0x1422 JUMPI POP POP POP PUSH1 0x44 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD PUSH1 0x44 CALLDATALOAD CALLDATASIZE SUB ADD DUP2 SLT ISZERO PUSH2 0x282 JUMPI DUP1 PUSH1 0x44 CALLDATALOAD ADD PUSH1 0x4 DUP2 ADD CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x282 JUMPI PUSH1 0x24 DUP3 PUSH1 0x7 SHL CALLDATASIZE SUB SWAP2 ADD SGT PUSH2 0x282 JUMPI PUSH2 0x11EC JUMPI JUMPDEST PUSH2 0x817 PUSH2 0x80B DUP5 DUP5 PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH2 0x1AF2 JUMP JUMPDEST SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x282 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH32 0x2A2D80D100000000000000000000000000000000000000000000000000000000 DUP5 MSTORE CALLER PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x60 PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0xC4 DUP5 ADD SWAP1 PUSH1 0x44 CALLDATALOAD ADD PUSH1 0x24 DUP2 ADD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 DUP4 ADD CALLDATALOAD GT PUSH2 0x282 JUMPI PUSH1 0x4 DUP3 ADD CALLDATALOAD PUSH1 0x7 SHL CALLDATASIZE SUB DUP4 SGT PUSH2 0x282 JUMPI PUSH1 0x60 PUSH1 0x64 DUP8 ADD MSTORE PUSH1 0x4 DUP3 ADD CALLDATALOAD SWAP1 MSTORE DUP5 SWAP2 PUSH1 0xE4 DUP4 ADD SWAP2 PUSH0 SWAP1 JUMPDEST PUSH1 0x4 DUP2 ADD CALLDATALOAD DUP3 LT PUSH2 0x138E JUMPI POP POP POP SWAP1 PUSH1 0x20 DUP2 PUSH0 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x12DE PUSH1 0x24 PUSH1 0x44 CALLDATALOAD ADD PUSH2 0x1847 JUMP JUMPDEST AND PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0x44 DUP1 CALLDATALOAD DUP2 ADD CALLDATALOAD PUSH1 0xA4 DUP5 ADD MSTORE PUSH1 0x3 NOT DUP4 DUP4 SUB ADD SWAP1 DUP4 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x4 DUP2 ADD CALLDATALOAD DUP1 DUP4 MSTORE SWAP1 PUSH1 0x24 ADD DUP5 DUP4 ADD CALLDATACOPY PUSH1 0x4 PUSH1 0x64 CALLDATALOAD ADD CALLDATALOAD DUP2 DUP2 ADD DUP5 ADD DUP7 SWAP1 MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND ADD SUB ADD DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x2AD JUMPI PUSH2 0x817 SWAP4 PUSH2 0x80B SWAP4 PUSH2 0x137F JUMPI JUMPDEST POP SWAP2 POP SWAP2 PUSH2 0x11BC JUMP JUMPDEST PUSH2 0x1388 SWAP1 PUSH2 0x19FA JUMP JUMPDEST DUP5 PUSH2 0x1376 JUMP JUMPDEST SWAP2 SWAP4 POP SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x13B0 DUP6 PUSH2 0x1847 JUMP JUMPDEST AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD CALLDATALOAD SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP1 SWAP4 SUB PUSH2 0x282 JUMPI PUSH1 0x4 SWAP3 PUSH1 0x1 SWAP3 DUP3 ADD MSTORE PUSH2 0x13ED PUSH1 0x40 DUP8 ADD PUSH2 0x1D73 JUMP JUMPDEST PUSH6 0xFFFFFFFFFFFF DUP1 SWAP2 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x1408 PUSH1 0x60 DUP9 ADD PUSH2 0x1D73 JUMP JUMPDEST AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP1 SWAP2 ADD SWAP6 ADD SWAP4 ADD SWAP1 POP DUP7 SWAP4 SWAP3 SWAP2 PUSH2 0x12A7 JUMP JUMPDEST PUSH2 0x1437 PUSH2 0x1430 DUP3 DUP5 DUP7 PUSH2 0x1C6D JUMP JUMPDEST CALLDATASIZE SWAP2 PUSH2 0x1CFA JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 PUSH1 0x60 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x60 DUP5 ADD GT OR PUSH2 0x2B8 JUMPI PUSH1 0x60 DUP3 ADD PUSH1 0x40 MSTORE PUSH0 DUP3 MSTORE PUSH0 PUSH1 0x20 DUP4 ADD MSTORE PUSH0 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD SWAP1 PUSH1 0x60 PUSH1 0x40 DUP3 ADD MLOAD SWAP2 ADD MLOAD PUSH0 BYTE SWAP2 DUP4 MSTORE PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xC0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP2 DUP5 MUL PUSH1 0x4 CALLDATALOAD ADD CALLDATASIZE SUB ADD SLT PUSH2 0x282 JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 PUSH1 0xC0 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xC0 DUP5 ADD GT OR PUSH2 0x2B8 JUMPI PUSH1 0xC0 DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x14F2 PUSH1 0x24 PUSH1 0xC0 DUP6 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x1847 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH2 0x1508 PUSH1 0x44 PUSH1 0xC0 DUP7 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x1847 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 DUP6 ADD MSTORE PUSH2 0x1522 PUSH1 0x64 PUSH1 0xC0 DUP8 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x1847 JUMP JUMPDEST PUSH1 0x40 DUP6 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x4 CALLDATALOAD PUSH1 0xC0 DUP8 MUL ADD PUSH1 0x84 DUP2 ADD CALLDATALOAD PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0xA4 DUP2 ADD CALLDATALOAD PUSH1 0x80 DUP8 ADD MSTORE PUSH1 0xC4 ADD CALLDATALOAD PUSH1 0xA0 DUP7 ADD MSTORE DUP4 ADD MLOAD DUP4 MLOAD PUSH1 0x20 SWAP1 SWAP5 ADD MLOAD PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND EXTCODESIZE ISZERO PUSH2 0x282 JUMPI PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP5 PUSH1 0xE4 SWAP5 DUP11 SWAP9 DUP5 SWAP9 PUSH1 0xC4 PUSH1 0xC0 PUSH1 0x40 MLOAD SWAP13 DUP14 SWAP12 DUP13 SWAP11 PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP13 MSTORE AND PUSH1 0x4 DUP12 ADD MSTORE ADDRESS PUSH1 0x24 DUP12 ADD MSTORE PUSH1 0x84 DUP3 DUP3 MUL PUSH1 0x4 CALLDATALOAD ADD ADD CALLDATALOAD PUSH1 0x44 DUP12 ADD MSTORE MUL PUSH1 0x4 CALLDATALOAD ADD ADD CALLDATALOAD PUSH1 0x64 DUP9 ADD MSTORE PUSH1 0x84 DUP8 ADD MSTORE PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xC4 DUP6 ADD MSTORE AND GAS CALL SWAP1 DUP2 PUSH2 0x1722 JUMPI JUMPDEST POP PUSH2 0x1719 JUMPI PUSH2 0x161B PUSH2 0x1D44 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD AND SWAP1 PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP4 ADD MLOAD AND PUSH1 0x44 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x2AD JUMPI PUSH0 SWAP3 PUSH2 0x16E4 JUMPI JUMPDEST POP PUSH1 0x60 ADD MLOAD SUB PUSH2 0x16AD JUMPI POP PUSH1 0x1 SWAP1 JUMPDEST ADD PUSH2 0x1149 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x16BC JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1711 JUMPI JUMPDEST DUP2 PUSH2 0x1700 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1A0E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x282 JUMPI MLOAD SWAP1 PUSH1 0x60 PUSH2 0x1698 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x16F3 JUMP JUMPDEST POP PUSH1 0x1 SWAP1 PUSH2 0x16A7 JUMP JUMPDEST PUSH2 0x172B SWAP1 PUSH2 0x19FA JUMP JUMPDEST DUP8 PUSH2 0x160E JUMP JUMPDEST PUSH32 0xAAAD13F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x282 JUMPI PUSH2 0xAA8 PUSH0 PUSH2 0x702 PUSH2 0xA6D PUSH2 0x177C PUSH2 0x1824 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD96AF07000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x24 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLDATALOAD PUSH1 0x44 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x282 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x282 JUMPI JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x282 JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x282 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x282 JUMPI PUSH1 0x20 DUP1 DUP6 ADD SWAP5 DUP5 PUSH1 0x5 SHL ADD ADD GT PUSH2 0x282 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD SWAP1 PUSH1 0x20 DUP4 MSTORE DUP4 MLOAD DUP1 SWAP3 MSTORE PUSH1 0x40 DUP4 ADD SWAP3 PUSH1 0x20 PUSH1 0x40 DUP5 PUSH1 0x5 SHL DUP4 ADD ADD SWAP6 ADD SWAP4 PUSH0 SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x18F3 JUMPI POP POP POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 DUP5 DUP1 PUSH2 0x192F DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP7 PUSH1 0x1 SWAP7 SUB ADD DUP8 MSTORE DUP11 MLOAD PUSH2 0x1899 JUMP JUMPDEST SWAP9 ADD SWAP4 ADD SWAP4 ADD SWAP2 SWAP5 SWAP4 SWAP3 SWAP1 PUSH2 0x18E3 JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0xA0 SWAP2 ADD SLT PUSH2 0x282 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x282 JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP2 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH1 0x64 CALLDATALOAD SWAP2 PUSH1 0x84 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x282 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x80 SWAP2 ADD SLT PUSH2 0x282 JUMPI PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x282 JUMPI SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x64 CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x282 JUMPI PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x282 JUMPI SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2B8 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2B8 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2B8 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 DUP4 SUB SLT PUSH2 0x282 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x282 JUMPI ADD DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x282 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x1A81 DUP3 PUSH2 0x1A31 JUMP JUMPDEST SWAP3 PUSH2 0x1A8F PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1A0E JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x282 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x282 JUMPI PUSH1 0x20 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x282 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x282 JUMPI SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH0 SWAP1 PUSH32 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 TLOAD AND ISZERO PUSH2 0x1C48 JUMPI JUMPDEST PUSH32 0x0 SWAP5 DUP6 TLOAD PUSH2 0x1C20 JUMPI PUSH1 0x1 SWAP1 PUSH1 0x1 DUP8 TSTORE PUSH2 0x1B6E DUP4 PUSH2 0x1C55 JUMP JUMPDEST SWAP3 PUSH2 0x1B7C PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1A0E JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x1F NOT PUSH2 0x1B8B DUP3 PUSH2 0x1C55 JUMP JUMPDEST ADD PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x1C0F JUMPI POP POP PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x1BC6 JUMPI POP POP POP POP SWAP1 PUSH0 PUSH2 0x1BBB SWAP4 SWAP3 SWAP6 TSTORE DUP1 TLOAD SWAP2 PUSH2 0x1BBD JUMPI JUMPDEST POP PUSH2 0x1FC6 JUMP JUMPDEST JUMP JUMPDEST PUSH0 SWAP1 TSTORE PUSH0 PUSH2 0x1BB5 JUMP JUMPDEST DUP1 PUSH2 0x1BF3 PUSH0 DUP1 PUSH2 0x1BDB PUSH2 0x1430 DUP10 SWAP7 DUP9 DUP11 PUSH2 0x1C6D JUMP JUMPDEST PUSH1 0x20 DUP2 MLOAD SWAP2 ADD ADDRESS GAS DELEGATECALL PUSH2 0x1BEC PUSH2 0x1D44 JUMP JUMPDEST SWAP1 ADDRESS PUSH2 0x2081 JUMP JUMPDEST PUSH2 0x1BFD DUP3 DUP9 PUSH2 0x1D30 JUMP JUMPDEST MSTORE PUSH2 0x1C08 DUP2 DUP8 PUSH2 0x1D30 JUMP JUMPDEST POP ADD PUSH2 0x1B99 JUMP JUMPDEST DUP1 PUSH1 0x60 PUSH1 0x20 DUP1 SWAP4 DUP10 ADD ADD MSTORE ADD PUSH2 0x1B8E JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 POP CALLER DUP2 TSTORE PUSH1 0x1 SWAP2 PUSH2 0x1B36 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2B8 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x1CCD JUMPI PUSH1 0x5 SHL DUP2 ADD CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP2 CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x282 JUMPI ADD SWAP1 DUP2 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x282 JUMPI PUSH1 0x20 ADD DUP3 CALLDATASIZE SUB DUP2 SGT PUSH2 0x282 JUMPI SWAP2 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 SWAP2 SWAP3 PUSH2 0x1D06 DUP3 PUSH2 0x1A31 JUMP JUMPDEST SWAP2 PUSH2 0x1D14 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x1A0E JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0x282 JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x1CCD JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x1D6E JUMPI RETURNDATASIZE SWAP1 PUSH2 0x1D55 DUP3 PUSH2 0x1A31 JUMP JUMPDEST SWAP2 PUSH2 0x1D63 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x1A0E JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH6 0xFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x282 JUMPI JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x1C20 JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x1DF2 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 PUSH0 SWAP1 DUP1 PUSH2 0x1E2E JUMPI JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND DUP2 PUSH32 0x0 AND SWAP6 DUP3 DUP5 GT PUSH2 0x1F95 JUMPI DUP3 AND SWAP5 DUP2 EXTCODESIZE ISZERO PUSH2 0x282 JUMPI PUSH1 0x84 DUP4 SWAP2 PUSH0 DUP1 SWAP5 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x4 DUP6 ADD MSTORE DUP12 PUSH1 0x24 DUP6 ADD MSTORE DUP9 AND PUSH1 0x44 DUP5 ADD MSTORE DUP10 PUSH1 0x64 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x2AD JUMPI PUSH2 0x1F7E JUMPI JUMPDEST POP PUSH1 0x44 DUP3 SWAP4 PUSH1 0x20 SWAP4 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP4 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x1F72 JUMPI POP PUSH2 0x1F47 JUMPI JUMPDEST DUP1 DUP1 DUP1 PUSH2 0x1E28 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1F6B JUMPI JUMPDEST PUSH2 0x1F5D DUP2 DUP4 PUSH2 0x1A0E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x282 JUMPI PUSH0 PUSH2 0x1F3F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1F53 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x20 SWAP3 POP PUSH2 0x1F8B SWAP1 PUSH2 0x19FA JUMP JUMPDEST PUSH1 0x44 PUSH0 SWAP3 POP PUSH2 0x1EF3 JUMP JUMPDEST DUP4 PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0xA0 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SELFBALANCE SWAP1 DUP2 ISZERO PUSH2 0x207D JUMPI PUSH32 0x0 TLOAD PUSH2 0x207D JUMPI DUP2 SELFBALANCE LT PUSH2 0x2051 JUMPI PUSH0 DUP1 DUP1 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 SWAP5 AND GAS CALL PUSH2 0x2021 PUSH2 0x1D44 JUMP JUMPDEST POP ISZERO PUSH2 0x2029 JUMPI JUMP JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0xCD78605900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE ADDRESS PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP POP JUMP JUMPDEST SWAP1 PUSH2 0x2096 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x2029 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x20E9 JUMPI JUMPDEST PUSH2 0x20A7 JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x209F JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA7 TLOAD 0x1F DUP4 0xF7 0xED 0x1E 0xD0 CODESIZE SWAP3 GASLIMIT SGT GT 0x28 BYTE DUP16 PUSH21 0x5A558CA5D25CBDEF5810AB11417FC364736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"507:667:84:-:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;507:667:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;507:667:84;;;;1487:71:66;507:667:84;;;;;:::i;:::-;;;;-1:-1:-1;;;507:667:84;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;507:667:84;;;;1487:71:66;:::i;:::-;;;409:14:72;;507:667:84;;;-1:-1:-1;;;;;507:667:84;;;;-1:-1:-1;507:667:84;;;;;;;;;;;;;;-1:-1:-1;507:667:84;;;;;;;;;;;-1:-1:-1;507:667:84;;;;;;;;;;;;;;;2796:83:65;507:667:84;;;;-1:-1:-1;507:667:84;;;;;;;;;;;;;;;;;-1:-1:-1;507:667:84;;;;;;;:::i;:::-;;;;-1:-1:-1;;;507:667:84;;;;-1:-1:-1;;;507:667:84;;;;;;:::i;:::-;;;;;;;2796:83:65;:::i;:::-;;;3976:12;;3998:18;;;;507:667:84;;;;;;;1487:71:66;507:667:84;;;;;;;;;;409:14:72;507:667:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2796:83:65;507:667:84;;;;;;;;;;3976:12:65;507:667:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;507:667:84;;;;;;;;;;;;-1:-1:-1;507:667:84;;;-1:-1:-1;507:667:84;;-1:-1:-1;507:667:84;;;;;;;;;2796:83:65;507:667:84;;;;;;;;;;;;;;-1:-1:-1;507:667:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;507:667:84;;;-1:-1:-1;507:667:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;507:667:84;;;;;;;;;;-1:-1:-1;507:667:84;;;;;;;;-1:-1:-1;507:667:84;;;;;-1:-1:-1;507:667:84;;;;;;;;;;;;-1:-1:-1;507:667:84;;;;;-1:-1:-1;507:667:84;;-1:-1:-1;507:667:84;;;;;;;;;-1:-1:-1;;;;;507:667:84;;;;;;;:::o;:::-;;;;;-1:-1:-1;;507:667:84;;;;-1:-1:-1;;;;;507:667:84;;;;;;;;;;:::o;1276:306:47:-;;1461:67;507:667:84;1461:67:47;1276:306;507:667:84;;1461:67:47;;;;;;;507:667:84;;;;;;;;;;;;;;;;;-1:-1:-1;;;507:667:84;;;;;;;;;;;;;;;-1:-1:-1;507:667:84;;;;1461:67:47;;;;;;;;;:::i;:::-;507:667:84;1451:78:47;;-1:-1:-1;;507:667:84;;;;;;;;;1432:103:47;1461:67;1432:103;;507:667:84;;;1461:67:47;1432:103;;;;;:::i;:::-;507:667:84;;1405:144:47;;-1:-1:-1;;1405:170:47;;1276:306::o;507:667:84:-;;;;-1:-1:-1;507:667:84;;;;;-1:-1:-1;507:667:84"},"deployedBytecode":{"functionDebugData":{"abi_decode_address_fromMemory":{"entryPoint":6854,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_bytes_calldata_dyn_calldata":{"entryPoint":6248,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_available_length_bytes":{"entryPoint":7418,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_bytes_fromMemory":{"entryPoint":6733,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IERC4626":{"entryPoint":6215,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_contract_IERC4626_20178":{"entryPoint":6180,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_contract_IERC4626t_uint256t_uint256":{"entryPoint":6595,"id":null,"parameterSlots":1,"returnSlots":3},"abi_decode_contract_IERC4626t_uint256t_uint256t_uint256":{"entryPoint":6536,"id":null,"parameterSlots":1,"returnSlots":4},"abi_decode_contract_IERC4626t_uint256t_uint256t_uint256t_address":{"entryPoint":6463,"id":null,"parameterSlots":1,"returnSlots":5},"abi_decode_uint256t_uint256_fromMemory":{"entryPoint":6832,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_uint48":{"entryPoint":7539,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_array_bytes_dyn":{"entryPoint":6334,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bytes":{"entryPoint":6297,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_contract_IERC4626_rational_by_rational_by_rational_by_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_contract_IERC4626_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_contract_IERC4626_uint256_uint256_uint256_address":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"array_allocation_size_array_bytes_dyn":{"entryPoint":7253,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":6705,"id":null,"parameterSlots":1,"returnSlots":1},"calldata_array_index_access_bytes_calldata_dyn_calldata":{"entryPoint":7277,"id":null,"parameterSlots":3,"returnSlots":2},"extract_returndata":{"entryPoint":7492,"id":null,"parameterSlots":0,"returnSlots":1},"finalize_allocation":{"entryPoint":6670,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_20181":{"entryPoint":6650,"id":null,"parameterSlots":1,"returnSlots":0},"fun_ensureOnlyVault":{"entryPoint":7603,"id":28148,"parameterSlots":0,"returnSlots":0},"fun_nonReentrantBefore":{"entryPoint":7558,"id":9916,"parameterSlots":0,"returnSlots":0},"fun_returnEth":{"entryPoint":8134,"id":18982,"parameterSlots":1,"returnSlots":0},"fun_takeTokenIn":{"entryPoint":7710,"id":19083,"parameterSlots":3,"returnSlots":0},"fun_verifyCallResultFromTarget":{"entryPoint":8321,"id":40673,"parameterSlots":3,"returnSlots":1},"memory_array_index_access_bytes_dyn":{"entryPoint":7472,"id":null,"parameterSlots":2,"returnSlots":1},"modifier_saveSenderAndManageEth":{"entryPoint":6898,"id":18636,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"18582":[{"length":32,"start":6968},{"length":32,"start":8144}],"18585":[{"length":32,"start":49},{"length":32,"start":6144}],"18588":[{"length":32,"start":4109},{"length":32,"start":4612},{"length":32,"start":4907},{"length":32,"start":7750}],"19225":[{"length":32,"start":2883},{"length":32,"start":6904}],"28110":[{"length":32,"start":565},{"length":32,"start":880},{"length":32,"start":1314},{"length":32,"start":1893},{"length":32,"start":2210},{"length":32,"start":2754},{"length":32,"start":3528},{"length":32,"start":3965},{"length":32,"start":7626},{"length":32,"start":7785}]},"linkReferences":{},"object":"6080806040526004361015610081575b50361561001a575f80fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361005957005b7f0540ddf6000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f3560e01c908163107c279f146117d65750806313f7bb4d1461175957806319c6989f146110315780631bbf2e2314610fe1578063400f230d14610edb5780634fe56ed614610d3e578063502383f414610cbe57806354fd4d5014610b815780635e01eb5a14610b2f578063662727cc146109f05780638afe5c3814610932578063a39026041461081b578063ac9650d8146107d3578063b365a3c214610682578063bc48e97f146105b6578063d96af07014610496578063d9f70869146102e55763e0fefe3514610153575f61000f565b3461028257610161366119c3565b73ffffffffffffffffffffffffffffffffffffffff9182604051947fa3902604000000000000000000000000000000000000000000000000000000006020870152166024850152604484015260648301526064825260a082019082821067ffffffffffffffff8311176102b857815f91816040527fedfa3568000000000000000000000000000000000000000000000000000000008252602060a486015281837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608761023060c4820182611899565b0301927f0000000000000000000000000000000000000000000000000000000000000000165af19182156102ad575f92610286575b505060208180518101031261028257602080910151604051908152f35b5f80fd5b6102a6925060a0903d90815f853e61029e8285611a0e565b010190611a4d565b5f80610265565b6040513d5f823e3d90fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b34610282576102f33661193f565b9190610300949394611d86565b610308611db3565b6040517f653eb3b000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260248201879052604482018490526064820192909252838216608482015260209591937f00000000000000000000000000000000000000000000000000000000000000008516929091878160a4815f885af19687156102ad5788915f98610463575b50908692916024604051809581937f4afbaf5a00000000000000000000000000000000000000000000000000000000835216978860048301525afa9586156102ad5761040b96610406935f91610436575b501683611e1e565b611e1e565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051908152f35b61045691508a3d8c1161045c575b61044e8183611a0e565b810190611ac6565b8a6103fe565b503d610444565b828194939299503d831161048f575b61047c8183611a0e565b81010312610282579051958790866103ad565b503d610472565b3461028257604060031936011261028257608460406104b3611824565b6104bb611d86565b6104c3611db3565b73ffffffffffffffffffffffffffffffffffffffff9283915f845195869485937febc7955c00000000000000000000000000000000000000000000000000000000855216600484015260243560248401528160448401528160648401527f0000000000000000000000000000000000000000000000000000000000000000165af19081156102ad576040915f915f91610587575b505f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d82519182526020820152f35b90506105a99150823d84116105af575b6105a18183611a0e565b810190611ab0565b83610557565b503d610597565b34610282575f600319360112610282576105ce611d86565b6040517fd9f708690000000000000000000000000000000000000000000000000000000081526020818061062160048201905f608060a08401938281528260208201528260408201528260608201520152565b03815f305af180156102ad57610657575b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b602090813d831161067b575b61066d8183611a0e565b810103126102825780610632565b503d610663565b346102825761074b5f61070261071061069a36611988565b6040517fd9f7086900000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff90941660248501526044840192909252606483015260848201523360a482015291829060c4820190565b03601f198101835282611a0e565b604051809381927f48c89491000000000000000000000000000000000000000000000000000000008352602060048401526024830190611899565b03818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af19081156102ad575f916107b1575b5060208180518101031261028257602080910151604051908152f35b6107cd91503d805f833e6107c58183611a0e565b810190611a4d565b81610795565b60206003193601126102825760043567ffffffffffffffff81116102825761080b610805610817923690600401611868565b90611af2565b604051918291826118be565b0390f35b346102825760a4602061082d366119c3565b91610839949194611d86565b610841611db3565b5f73ffffffffffffffffffffffffffffffffffffffff809460405197889687957f653eb3b0000000000000000000000000000000000000000000000000000000008752166004860152602485015260448401528160648401523060848401527f0000000000000000000000000000000000000000000000000000000000000000165af180156102ad575f906108ff575b6020905f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051908152f35b506020813d60201161092a575b8161091960209383611a0e565b8101031261028257602090516108d1565b3d915061090c565b34610282575f6003193601126102825761094a611d86565b6040517f4fe56ed60000000000000000000000000000000000000000000000000000000081526040818061099d60048201905f608060a08401938281528260208201528260408201528260608201520152565b03815f305af180156102ad576109d2575f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b6109ea9060403d6040116105af576105a18183611a0e565b50610632565b3461028257604060031936011261028257610aa85f610702610a6d610a13611824565b6040517f400f230d00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091166024808301919091523560448201529182906064820190565b604051809381927fedfa3568000000000000000000000000000000000000000000000000000000008352602060048401526024830190611899565b03818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af19081156102ad57604091610b09915f91610b15575b5060208082518301019101611ab0565b82519182526020820152f35b610b2991503d805f833e6107c58183611a0e565b83610af9565b34610282575f6003193601126102825760207f00000000000000000000000000000000000000000000000000000000000000005c73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b34610282575f600319360112610282576040515f5f549060018260011c9160018416918215610cb4575b6020948585108414610c875785879486865291825f14610c49575050600114610bf0575b50610bdc92500383611a0e565b610817604051928284938452830190611899565b5f808052859250907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b858310610c31575050610bdc935082010185610bcf565b80548389018501528794508693909201918101610c1a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685820152610bdc95151560051b8501019250879150610bcf9050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f1692610bab565b3461028257610aa85f610702610710610cd636611988565b6040517f4fe56ed600000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff90941660248501526044840192909252606483015260848201523360a482015291829060c4820190565b3461028257610d4c3661193f565b93919092610d58611d86565b610d60611db3565b604080517fe2a92b1a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482019390935260448101939093526064830194909452848116608483015290927f00000000000000000000000000000000000000000000000000000000000000008216908460a4815f855af19283156102ad575f945f94610eae575b5090602083926024604051809681937f4afbaf5a00000000000000000000000000000000000000000000000000000000835216948560048301525afa9586156102ad57610406868694604099610e60975f91610e8f57501683611e1e565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d82519182526020820152f35b610ea8915060203d60201161045c5761044e8183611a0e565b8b6103fe565b602095508392919450610ecf9060403d6040116105af576105a18183611a0e565b95909594919250610e02565b346102825760406003193601126102825760a46040610ef8611824565b610f00611d86565b610f08611db3565b73ffffffffffffffffffffffffffffffffffffffff9283915f845195869485937fe2a92b1a0000000000000000000000000000000000000000000000000000000085521660048401526fffffffffffffffffffffffffffffffff806024850152604484015260243560648401523060848401527f0000000000000000000000000000000000000000000000000000000000000000165af19081156102ad576040915f915f9161058757505f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d82519182526020820152f35b34610282575f60031936011261028257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b60a06003193601126102825767ffffffffffffffff60043511610282573660236004350112156102825767ffffffffffffffff60043560040135116102825736602460c060043560040135026004350101116102825760243567ffffffffffffffff8111610282576110a7903690600401611868565b67ffffffffffffffff60443511610282576060600319604435360301126102825767ffffffffffffffff60643511610282573660236064350112156102825767ffffffffffffffff606435600401351161028257366024606435600401356064350101116102825760843567ffffffffffffffff81116102825761112f903690600401611868565b92909161113a611d86565b806004356004013503611731575f5b60043560040135811061142257505050604435600401357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd60443536030181121561028257806044350160048101359067ffffffffffffffff82116102825760248260071b3603910113610282576111ec575b61081761080b84845f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d611af2565b9173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b1561028257604051927f2a2d80d10000000000000000000000000000000000000000000000000000000084523360048501526060602485015260c484019060443501602481019167ffffffffffffffff60048301351161028257600482013560071b36038313610282576060606487015260048201359052849160e48301915f905b6004810135821061138e57505050906020815f9373ffffffffffffffffffffffffffffffffffffffff6112de602460443501611847565b1660848301526044803581013560a4840152600319838303019083015260643560048101358083529060240184830137600460643501358181018401869052601f01601f191601030181837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165af19182156102ad576108179361080b9361137f575b509150916111bc565b611388906119fa565b84611376565b9193509173ffffffffffffffffffffffffffffffffffffffff6113b085611847565b1681526020808501359173ffffffffffffffffffffffffffffffffffffffff8316809303610282576004926001928201526113ed60408701611d73565b65ffffffffffff809116604083015261140860608801611d73565b1660608201526080809101950193019050869392916112a7565b611437611430828486611c6d565b3691611cfa565b6040519081606081011067ffffffffffffffff6060840111176102b857606082016040525f82525f60208301525f6040830152602081015190606060408201519101515f1a9183526020830152604082015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc818402600435013603011261028257604051908160c081011067ffffffffffffffff60c0840111176102b85760c082016040526114f2602460c085026004350101611847565b808352611508604460c086026004350101611847565b90816020850152611522606460c087026004350101611847565b60408581019190915260043560c08702016084810135606087015260a4810135608087015260c4013560a0860152830151835160209094015160ff919091169273ffffffffffffffffffffffffffffffffffffffff83163b15610282575f73ffffffffffffffffffffffffffffffffffffffff809460e4948a98849860c460c06040519c8d9b8c9a7fd505accf000000000000000000000000000000000000000000000000000000008c521660048b01523060248b0152608482820260043501013560448b0152026004350101356064880152608487015260a486015260c4850152165af19081611722575b506117195761161b611d44565b9073ffffffffffffffffffffffffffffffffffffffff81511690602073ffffffffffffffffffffffffffffffffffffffff81830151166044604051809581937fdd62ed3e00000000000000000000000000000000000000000000000000000000835260048301523060248301525afa9182156102ad575f926116e4575b5060600151036116ad57506001905b01611149565b8051156116bc57805190602001fd5b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b9091506020813d602011611711575b8161170060209383611a0e565b810103126102825751906060611698565b3d91506116f3565b506001906116a7565b61172b906119fa565b8761160e565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461028257604060031936011261028257610aa85f610702610a6d61177c611824565b6040517fd96af07000000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9091166024808301919091523560448201529182906064820190565b34610282575f6003193601126102825760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361028257565b359073ffffffffffffffffffffffffffffffffffffffff8216820361028257565b9181601f840112156102825782359167ffffffffffffffff8311610282576020808501948460051b01011161028257565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b8483106118f35750505050505090565b909192939495848061192f837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528a51611899565b98019301930191949392906118e3565b60031960a09101126102825773ffffffffffffffffffffffffffffffffffffffff6004358181168103610282579160243591604435916064359160843590811681036102825790565b60031960809101126102825760043573ffffffffffffffffffffffffffffffffffffffff811681036102825790602435906044359060643590565b60031960609101126102825760043573ffffffffffffffffffffffffffffffffffffffff8116810361028257906024359060443590565b67ffffffffffffffff81116102b857604052565b90601f601f19910116810190811067ffffffffffffffff8211176102b857604052565b67ffffffffffffffff81116102b857601f01601f191660200190565b6020818303126102825780519067ffffffffffffffff8211610282570181601f8201121561028257805190611a8182611a31565b92611a8f6040519485611a0e565b8284526020838301011161028257815f9260208093018386015e8301015290565b9190826040910312610282576020825192015190565b90816020910312610282575173ffffffffffffffffffffffffffffffffffffffff811681036102825790565b91905f907f00000000000000000000000000000000000000000000000000000000000000009073ffffffffffffffffffffffffffffffffffffffff825c1615611c48575b7f000000000000000000000000000000000000000000000000000000000000000094855c611c20576001906001875d611b6e83611c55565b92611b7c6040519485611a0e565b808452601f19611b8b82611c55565b015f5b818110611c0f5750505f5b818110611bc65750505050905f611bbb9392955d805c91611bbd575b50611fc6565b565b5f905d5f611bb5565b80611bf35f80611bdb6114308996888a611c6d565b602081519101305af4611bec611d44565b9030612081565b611bfd8288611d30565b52611c088187611d30565b5001611b99565b806060602080938901015201611b8e565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b915033815d600191611b36565b67ffffffffffffffff81116102b85760051b60200190565b9190811015611ccd5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561028257019081359167ffffffffffffffff8311610282576020018236038113610282579190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b929192611d0682611a31565b91611d146040519384611a0e565b829481845281830111610282578281602093845f960137010152565b8051821015611ccd5760209160051b010190565b3d15611d6e573d90611d5582611a31565b91611d636040519384611a0e565b82523d5f602084013e565b606090565b359065ffffffffffff8216820361028257565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c611c20576001905d565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163303611df257565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b90915f9080611e2e575b50505050565b73ffffffffffffffffffffffffffffffffffffffff807f000000000000000000000000000000000000000000000000000000000000000016817f00000000000000000000000000000000000000000000000000000000000000001695828411611f9557821694813b1561028257608483915f809460405196879586947f36c785160000000000000000000000000000000000000000000000000000000086521660048501528b6024850152881660448401528960648401525af180156102ad57611f7e575b506044829360209360405196879485937f15afd409000000000000000000000000000000000000000000000000000000008552600485015260248401525af1908115611f725750611f47575b808080611e28565b602090813d8311611f6b575b611f5d8183611a0e565b81010312610282575f611f3f565b503d611f53565b604051903d90823e3d90fd5b60209250611f8b906119fa565b60445f9250611ef3565b837f6dfcc650000000000000000000000000000000000000000000000000000000005f5260a060045260245260445ffd5b4790811561207d577f00000000000000000000000000000000000000000000000000000000000000005c61207d57814710612051575f80809373ffffffffffffffffffffffffffffffffffffffff8294165af1612021611d44565b501561202957565b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fcd786059000000000000000000000000000000000000000000000000000000005f523060045260245ffd5b5050565b90612096575080511561202957805190602001fd5b815115806120e9575b6120a7575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561209f56fea2646970667358221220a75c1f83f7ed1ed03892451311281a8f745a558ca5d25cbdef5810ab11417fc364736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x81 JUMPI JUMPDEST POP CALLDATASIZE ISZERO PUSH2 0x1A JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x59 JUMPI STOP JUMPDEST PUSH32 0x540DDF600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x107C279F EQ PUSH2 0x17D6 JUMPI POP DUP1 PUSH4 0x13F7BB4D EQ PUSH2 0x1759 JUMPI DUP1 PUSH4 0x19C6989F EQ PUSH2 0x1031 JUMPI DUP1 PUSH4 0x1BBF2E23 EQ PUSH2 0xFE1 JUMPI DUP1 PUSH4 0x400F230D EQ PUSH2 0xEDB JUMPI DUP1 PUSH4 0x4FE56ED6 EQ PUSH2 0xD3E JUMPI DUP1 PUSH4 0x502383F4 EQ PUSH2 0xCBE JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0xB81 JUMPI DUP1 PUSH4 0x5E01EB5A EQ PUSH2 0xB2F JUMPI DUP1 PUSH4 0x662727CC EQ PUSH2 0x9F0 JUMPI DUP1 PUSH4 0x8AFE5C38 EQ PUSH2 0x932 JUMPI DUP1 PUSH4 0xA3902604 EQ PUSH2 0x81B JUMPI DUP1 PUSH4 0xAC9650D8 EQ PUSH2 0x7D3 JUMPI DUP1 PUSH4 0xB365A3C2 EQ PUSH2 0x682 JUMPI DUP1 PUSH4 0xBC48E97F EQ PUSH2 0x5B6 JUMPI DUP1 PUSH4 0xD96AF070 EQ PUSH2 0x496 JUMPI DUP1 PUSH4 0xD9F70869 EQ PUSH2 0x2E5 JUMPI PUSH4 0xE0FEFE35 EQ PUSH2 0x153 JUMPI PUSH0 PUSH2 0xF JUMP JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH2 0x161 CALLDATASIZE PUSH2 0x19C3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 PUSH1 0x40 MLOAD SWAP5 PUSH32 0xA390260400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP8 ADD MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x64 DUP3 MSTORE PUSH1 0xA0 DUP3 ADD SWAP1 DUP3 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x2B8 JUMPI DUP2 PUSH0 SWAP2 DUP2 PUSH1 0x40 MSTORE PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 PUSH1 0xA4 DUP7 ADD MSTORE DUP2 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 DUP8 PUSH2 0x230 PUSH1 0xC4 DUP3 ADD DUP3 PUSH2 0x1899 JUMP JUMPDEST SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x2AD JUMPI PUSH0 SWAP3 PUSH2 0x286 JUMPI JUMPDEST POP POP PUSH1 0x20 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x282 JUMPI PUSH1 0x20 DUP1 SWAP2 ADD MLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x2A6 SWAP3 POP PUSH1 0xA0 SWAP1 RETURNDATASIZE SWAP1 DUP2 PUSH0 DUP6 RETURNDATACOPY PUSH2 0x29E DUP3 DUP6 PUSH2 0x1A0E JUMP JUMPDEST ADD ADD SWAP1 PUSH2 0x1A4D JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x265 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH2 0x2F3 CALLDATASIZE PUSH2 0x193F JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x300 SWAP5 SWAP4 SWAP5 PUSH2 0x1D86 JUMP JUMPDEST PUSH2 0x308 PUSH2 0x1DB3 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x653EB3B000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD DUP8 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD DUP5 SWAP1 MSTORE PUSH1 0x64 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE DUP4 DUP3 AND PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0x20 SWAP6 SWAP2 SWAP4 PUSH32 0x0 DUP6 AND SWAP3 SWAP1 SWAP2 DUP8 DUP2 PUSH1 0xA4 DUP2 PUSH0 DUP9 GAS CALL SWAP7 DUP8 ISZERO PUSH2 0x2AD JUMPI DUP9 SWAP2 PUSH0 SWAP9 PUSH2 0x463 JUMPI JUMPDEST POP SWAP1 DUP7 SWAP3 SWAP2 PUSH1 0x24 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH32 0x4AFBAF5A00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND SWAP8 DUP9 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP6 DUP7 ISZERO PUSH2 0x2AD JUMPI PUSH2 0x40B SWAP7 PUSH2 0x406 SWAP4 PUSH0 SWAP2 PUSH2 0x436 JUMPI JUMPDEST POP AND DUP4 PUSH2 0x1E1E JUMP JUMPDEST PUSH2 0x1E1E JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x456 SWAP2 POP DUP11 RETURNDATASIZE DUP13 GT PUSH2 0x45C JUMPI JUMPDEST PUSH2 0x44E DUP2 DUP4 PUSH2 0x1A0E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1AC6 JUMP JUMPDEST DUP11 PUSH2 0x3FE JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x444 JUMP JUMPDEST DUP3 DUP2 SWAP5 SWAP4 SWAP3 SWAP10 POP RETURNDATASIZE DUP4 GT PUSH2 0x48F JUMPI JUMPDEST PUSH2 0x47C DUP2 DUP4 PUSH2 0x1A0E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x282 JUMPI SWAP1 MLOAD SWAP6 DUP8 SWAP1 DUP7 PUSH2 0x3AD JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x472 JUMP JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x282 JUMPI PUSH1 0x84 PUSH1 0x40 PUSH2 0x4B3 PUSH2 0x1824 JUMP JUMPDEST PUSH2 0x4BB PUSH2 0x1D86 JUMP JUMPDEST PUSH2 0x4C3 PUSH2 0x1DB3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 SWAP2 PUSH0 DUP5 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xEBC7955C00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x24 DUP5 ADD MSTORE DUP2 PUSH1 0x44 DUP5 ADD MSTORE DUP2 PUSH1 0x64 DUP5 ADD MSTORE PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2AD JUMPI PUSH1 0x40 SWAP2 PUSH0 SWAP2 PUSH0 SWAP2 PUSH2 0x587 JUMPI JUMPDEST POP PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST SWAP1 POP PUSH2 0x5A9 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x5AF JUMPI JUMPDEST PUSH2 0x5A1 DUP2 DUP4 PUSH2 0x1A0E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1AB0 JUMP JUMPDEST DUP4 PUSH2 0x557 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x597 JUMP JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x282 JUMPI PUSH2 0x5CE PUSH2 0x1D86 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD9F7086900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 DUP1 PUSH2 0x621 PUSH1 0x4 DUP3 ADD SWAP1 PUSH0 PUSH1 0x80 PUSH1 0xA0 DUP5 ADD SWAP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB DUP2 PUSH0 ADDRESS GAS CALL DUP1 ISZERO PUSH2 0x2AD JUMPI PUSH2 0x657 JUMPI JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x67B JUMPI JUMPDEST PUSH2 0x66D DUP2 DUP4 PUSH2 0x1A0E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x282 JUMPI DUP1 PUSH2 0x632 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x663 JUMP JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH2 0x74B PUSH0 PUSH2 0x702 PUSH2 0x710 PUSH2 0x69A CALLDATASIZE PUSH2 0x1988 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD9F7086900000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP5 AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 ADD MSTORE CALLER PUSH1 0xA4 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 PUSH1 0xC4 DUP3 ADD SWAP1 JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x1A0E JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x1899 JUMP JUMPDEST SUB DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2AD JUMPI PUSH0 SWAP2 PUSH2 0x7B1 JUMPI JUMPDEST POP PUSH1 0x20 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x282 JUMPI PUSH1 0x20 DUP1 SWAP2 ADD MLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x7CD SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x7C5 DUP2 DUP4 PUSH2 0x1A0E JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x1A4D JUMP JUMPDEST DUP2 PUSH2 0x795 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x282 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x282 JUMPI PUSH2 0x80B PUSH2 0x805 PUSH2 0x817 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1868 JUMP JUMPDEST SWAP1 PUSH2 0x1AF2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x18BE JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH1 0xA4 PUSH1 0x20 PUSH2 0x82D CALLDATASIZE PUSH2 0x19C3 JUMP JUMPDEST SWAP2 PUSH2 0x839 SWAP5 SWAP2 SWAP5 PUSH2 0x1D86 JUMP JUMPDEST PUSH2 0x841 PUSH2 0x1DB3 JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP5 PUSH1 0x40 MLOAD SWAP8 DUP9 SWAP7 DUP8 SWAP6 PUSH32 0x653EB3B000000000000000000000000000000000000000000000000000000000 DUP8 MSTORE AND PUSH1 0x4 DUP7 ADD MSTORE PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE DUP2 PUSH1 0x64 DUP5 ADD MSTORE ADDRESS PUSH1 0x84 DUP5 ADD MSTORE PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x2AD JUMPI PUSH0 SWAP1 PUSH2 0x8FF JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x92A JUMPI JUMPDEST DUP2 PUSH2 0x919 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1A0E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x282 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH2 0x8D1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x90C JUMP JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x282 JUMPI PUSH2 0x94A PUSH2 0x1D86 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4FE56ED600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x40 DUP2 DUP1 PUSH2 0x99D PUSH1 0x4 DUP3 ADD SWAP1 PUSH0 PUSH1 0x80 PUSH1 0xA0 DUP5 ADD SWAP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB DUP2 PUSH0 ADDRESS GAS CALL DUP1 ISZERO PUSH2 0x2AD JUMPI PUSH2 0x9D2 JUMPI PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH2 0x9EA SWAP1 PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x5AF JUMPI PUSH2 0x5A1 DUP2 DUP4 PUSH2 0x1A0E JUMP JUMPDEST POP PUSH2 0x632 JUMP JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x282 JUMPI PUSH2 0xAA8 PUSH0 PUSH2 0x702 PUSH2 0xA6D PUSH2 0xA13 PUSH2 0x1824 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x400F230D00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x24 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLDATALOAD PUSH1 0x44 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x1899 JUMP JUMPDEST SUB DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2AD JUMPI PUSH1 0x40 SWAP2 PUSH2 0xB09 SWAP2 PUSH0 SWAP2 PUSH2 0xB15 JUMPI JUMPDEST POP PUSH1 0x20 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x1AB0 JUMP JUMPDEST DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH2 0xB29 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x7C5 DUP2 DUP4 PUSH2 0x1A0E JUMP JUMPDEST DUP4 PUSH2 0xAF9 JUMP JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x282 JUMPI PUSH1 0x20 PUSH32 0x0 TLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x282 JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH0 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0xCB4 JUMPI JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP6 LT DUP5 EQ PUSH2 0xC87 JUMPI DUP6 DUP8 SWAP5 DUP7 DUP7 MSTORE SWAP2 DUP3 PUSH0 EQ PUSH2 0xC49 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xBF0 JUMPI JUMPDEST POP PUSH2 0xBDC SWAP3 POP SUB DUP4 PUSH2 0x1A0E JUMP JUMPDEST PUSH2 0x817 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1899 JUMP JUMPDEST PUSH0 DUP1 DUP1 MSTORE DUP6 SWAP3 POP SWAP1 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP6 DUP4 LT PUSH2 0xC31 JUMPI POP POP PUSH2 0xBDC SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0xBCF JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0xC1A JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0xBDC SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0xBCF SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0xBAB JUMP JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH2 0xAA8 PUSH0 PUSH2 0x702 PUSH2 0x710 PUSH2 0xCD6 CALLDATASIZE PUSH2 0x1988 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x4FE56ED600000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP5 AND PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x84 DUP3 ADD MSTORE CALLER PUSH1 0xA4 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 PUSH1 0xC4 DUP3 ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH2 0xD4C CALLDATASIZE PUSH2 0x193F JUMP JUMPDEST SWAP4 SWAP2 SWAP1 SWAP3 PUSH2 0xD58 PUSH2 0x1D86 JUMP JUMPDEST PUSH2 0xD60 PUSH2 0x1DB3 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xE2A92B1A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x44 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH1 0x64 DUP4 ADD SWAP5 SWAP1 SWAP5 MSTORE DUP5 DUP2 AND PUSH1 0x84 DUP4 ADD MSTORE SWAP1 SWAP3 PUSH32 0x0 DUP3 AND SWAP1 DUP5 PUSH1 0xA4 DUP2 PUSH0 DUP6 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x2AD JUMPI PUSH0 SWAP5 PUSH0 SWAP5 PUSH2 0xEAE JUMPI JUMPDEST POP SWAP1 PUSH1 0x20 DUP4 SWAP3 PUSH1 0x24 PUSH1 0x40 MLOAD DUP1 SWAP7 DUP2 SWAP4 PUSH32 0x4AFBAF5A00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND SWAP5 DUP6 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP6 DUP7 ISZERO PUSH2 0x2AD JUMPI PUSH2 0x406 DUP7 DUP7 SWAP5 PUSH1 0x40 SWAP10 PUSH2 0xE60 SWAP8 PUSH0 SWAP2 PUSH2 0xE8F JUMPI POP AND DUP4 PUSH2 0x1E1E JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH2 0xEA8 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x45C JUMPI PUSH2 0x44E DUP2 DUP4 PUSH2 0x1A0E JUMP JUMPDEST DUP12 PUSH2 0x3FE JUMP JUMPDEST PUSH1 0x20 SWAP6 POP DUP4 SWAP3 SWAP2 SWAP5 POP PUSH2 0xECF SWAP1 PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x5AF JUMPI PUSH2 0x5A1 DUP2 DUP4 PUSH2 0x1A0E JUMP JUMPDEST SWAP6 SWAP1 SWAP6 SWAP5 SWAP2 SWAP3 POP PUSH2 0xE02 JUMP JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x282 JUMPI PUSH1 0xA4 PUSH1 0x40 PUSH2 0xEF8 PUSH2 0x1824 JUMP JUMPDEST PUSH2 0xF00 PUSH2 0x1D86 JUMP JUMPDEST PUSH2 0xF08 PUSH2 0x1DB3 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 SWAP2 PUSH0 DUP5 MLOAD SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xE2A92B1A00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x64 DUP5 ADD MSTORE ADDRESS PUSH1 0x84 DUP5 ADD MSTORE PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2AD JUMPI PUSH1 0x40 SWAP2 PUSH0 SWAP2 PUSH0 SWAP2 PUSH2 0x587 JUMPI POP PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x282 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x282 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD GT PUSH2 0x282 JUMPI CALLDATASIZE PUSH1 0x23 PUSH1 0x4 CALLDATALOAD ADD SLT ISZERO PUSH2 0x282 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD GT PUSH2 0x282 JUMPI CALLDATASIZE PUSH1 0x24 PUSH1 0xC0 PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD MUL PUSH1 0x4 CALLDATALOAD ADD ADD GT PUSH2 0x282 JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x282 JUMPI PUSH2 0x10A7 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1868 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD GT PUSH2 0x282 JUMPI PUSH1 0x60 PUSH1 0x3 NOT PUSH1 0x44 CALLDATALOAD CALLDATASIZE SUB ADD SLT PUSH2 0x282 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD GT PUSH2 0x282 JUMPI CALLDATASIZE PUSH1 0x23 PUSH1 0x64 CALLDATALOAD ADD SLT ISZERO PUSH2 0x282 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD GT PUSH2 0x282 JUMPI CALLDATASIZE PUSH1 0x24 PUSH1 0x64 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD PUSH1 0x64 CALLDATALOAD ADD ADD GT PUSH2 0x282 JUMPI PUSH1 0x84 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x282 JUMPI PUSH2 0x112F SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1868 JUMP JUMPDEST SWAP3 SWAP1 SWAP2 PUSH2 0x113A PUSH2 0x1D86 JUMP JUMPDEST DUP1 PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD SUB PUSH2 0x1731 JUMPI PUSH0 JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD DUP2 LT PUSH2 0x1422 JUMPI POP POP POP PUSH1 0x44 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD PUSH1 0x44 CALLDATALOAD CALLDATASIZE SUB ADD DUP2 SLT ISZERO PUSH2 0x282 JUMPI DUP1 PUSH1 0x44 CALLDATALOAD ADD PUSH1 0x4 DUP2 ADD CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x282 JUMPI PUSH1 0x24 DUP3 PUSH1 0x7 SHL CALLDATASIZE SUB SWAP2 ADD SGT PUSH2 0x282 JUMPI PUSH2 0x11EC JUMPI JUMPDEST PUSH2 0x817 PUSH2 0x80B DUP5 DUP5 PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH2 0x1AF2 JUMP JUMPDEST SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x282 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH32 0x2A2D80D100000000000000000000000000000000000000000000000000000000 DUP5 MSTORE CALLER PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x60 PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0xC4 DUP5 ADD SWAP1 PUSH1 0x44 CALLDATALOAD ADD PUSH1 0x24 DUP2 ADD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 DUP4 ADD CALLDATALOAD GT PUSH2 0x282 JUMPI PUSH1 0x4 DUP3 ADD CALLDATALOAD PUSH1 0x7 SHL CALLDATASIZE SUB DUP4 SGT PUSH2 0x282 JUMPI PUSH1 0x60 PUSH1 0x64 DUP8 ADD MSTORE PUSH1 0x4 DUP3 ADD CALLDATALOAD SWAP1 MSTORE DUP5 SWAP2 PUSH1 0xE4 DUP4 ADD SWAP2 PUSH0 SWAP1 JUMPDEST PUSH1 0x4 DUP2 ADD CALLDATALOAD DUP3 LT PUSH2 0x138E JUMPI POP POP POP SWAP1 PUSH1 0x20 DUP2 PUSH0 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x12DE PUSH1 0x24 PUSH1 0x44 CALLDATALOAD ADD PUSH2 0x1847 JUMP JUMPDEST AND PUSH1 0x84 DUP4 ADD MSTORE PUSH1 0x44 DUP1 CALLDATALOAD DUP2 ADD CALLDATALOAD PUSH1 0xA4 DUP5 ADD MSTORE PUSH1 0x3 NOT DUP4 DUP4 SUB ADD SWAP1 DUP4 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x4 DUP2 ADD CALLDATALOAD DUP1 DUP4 MSTORE SWAP1 PUSH1 0x24 ADD DUP5 DUP4 ADD CALLDATACOPY PUSH1 0x4 PUSH1 0x64 CALLDATALOAD ADD CALLDATALOAD DUP2 DUP2 ADD DUP5 ADD DUP7 SWAP1 MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND ADD SUB ADD DUP2 DUP4 PUSH32 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x2AD JUMPI PUSH2 0x817 SWAP4 PUSH2 0x80B SWAP4 PUSH2 0x137F JUMPI JUMPDEST POP SWAP2 POP SWAP2 PUSH2 0x11BC JUMP JUMPDEST PUSH2 0x1388 SWAP1 PUSH2 0x19FA JUMP JUMPDEST DUP5 PUSH2 0x1376 JUMP JUMPDEST SWAP2 SWAP4 POP SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x13B0 DUP6 PUSH2 0x1847 JUMP JUMPDEST AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP6 ADD CALLDATALOAD SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP1 SWAP4 SUB PUSH2 0x282 JUMPI PUSH1 0x4 SWAP3 PUSH1 0x1 SWAP3 DUP3 ADD MSTORE PUSH2 0x13ED PUSH1 0x40 DUP8 ADD PUSH2 0x1D73 JUMP JUMPDEST PUSH6 0xFFFFFFFFFFFF DUP1 SWAP2 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x1408 PUSH1 0x60 DUP9 ADD PUSH2 0x1D73 JUMP JUMPDEST AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP1 SWAP2 ADD SWAP6 ADD SWAP4 ADD SWAP1 POP DUP7 SWAP4 SWAP3 SWAP2 PUSH2 0x12A7 JUMP JUMPDEST PUSH2 0x1437 PUSH2 0x1430 DUP3 DUP5 DUP7 PUSH2 0x1C6D JUMP JUMPDEST CALLDATASIZE SWAP2 PUSH2 0x1CFA JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 PUSH1 0x60 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x60 DUP5 ADD GT OR PUSH2 0x2B8 JUMPI PUSH1 0x60 DUP3 ADD PUSH1 0x40 MSTORE PUSH0 DUP3 MSTORE PUSH0 PUSH1 0x20 DUP4 ADD MSTORE PUSH0 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD SWAP1 PUSH1 0x60 PUSH1 0x40 DUP3 ADD MLOAD SWAP2 ADD MLOAD PUSH0 BYTE SWAP2 DUP4 MSTORE PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xC0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP2 DUP5 MUL PUSH1 0x4 CALLDATALOAD ADD CALLDATASIZE SUB ADD SLT PUSH2 0x282 JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 PUSH1 0xC0 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xC0 DUP5 ADD GT OR PUSH2 0x2B8 JUMPI PUSH1 0xC0 DUP3 ADD PUSH1 0x40 MSTORE PUSH2 0x14F2 PUSH1 0x24 PUSH1 0xC0 DUP6 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x1847 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH2 0x1508 PUSH1 0x44 PUSH1 0xC0 DUP7 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x1847 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 DUP6 ADD MSTORE PUSH2 0x1522 PUSH1 0x64 PUSH1 0xC0 DUP8 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x1847 JUMP JUMPDEST PUSH1 0x40 DUP6 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x4 CALLDATALOAD PUSH1 0xC0 DUP8 MUL ADD PUSH1 0x84 DUP2 ADD CALLDATALOAD PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0xA4 DUP2 ADD CALLDATALOAD PUSH1 0x80 DUP8 ADD MSTORE PUSH1 0xC4 ADD CALLDATALOAD PUSH1 0xA0 DUP7 ADD MSTORE DUP4 ADD MLOAD DUP4 MLOAD PUSH1 0x20 SWAP1 SWAP5 ADD MLOAD PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND EXTCODESIZE ISZERO PUSH2 0x282 JUMPI PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP5 PUSH1 0xE4 SWAP5 DUP11 SWAP9 DUP5 SWAP9 PUSH1 0xC4 PUSH1 0xC0 PUSH1 0x40 MLOAD SWAP13 DUP14 SWAP12 DUP13 SWAP11 PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP13 MSTORE AND PUSH1 0x4 DUP12 ADD MSTORE ADDRESS PUSH1 0x24 DUP12 ADD MSTORE PUSH1 0x84 DUP3 DUP3 MUL PUSH1 0x4 CALLDATALOAD ADD ADD CALLDATALOAD PUSH1 0x44 DUP12 ADD MSTORE MUL PUSH1 0x4 CALLDATALOAD ADD ADD CALLDATALOAD PUSH1 0x64 DUP9 ADD MSTORE PUSH1 0x84 DUP8 ADD MSTORE PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xC4 DUP6 ADD MSTORE AND GAS CALL SWAP1 DUP2 PUSH2 0x1722 JUMPI JUMPDEST POP PUSH2 0x1719 JUMPI PUSH2 0x161B PUSH2 0x1D44 JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD AND SWAP1 PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 DUP4 ADD MLOAD AND PUSH1 0x44 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x2AD JUMPI PUSH0 SWAP3 PUSH2 0x16E4 JUMPI JUMPDEST POP PUSH1 0x60 ADD MLOAD SUB PUSH2 0x16AD JUMPI POP PUSH1 0x1 SWAP1 JUMPDEST ADD PUSH2 0x1149 JUMP JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x16BC JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1711 JUMPI JUMPDEST DUP2 PUSH2 0x1700 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1A0E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x282 JUMPI MLOAD SWAP1 PUSH1 0x60 PUSH2 0x1698 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x16F3 JUMP JUMPDEST POP PUSH1 0x1 SWAP1 PUSH2 0x16A7 JUMP JUMPDEST PUSH2 0x172B SWAP1 PUSH2 0x19FA JUMP JUMPDEST DUP8 PUSH2 0x160E JUMP JUMPDEST PUSH32 0xAAAD13F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x282 JUMPI PUSH2 0xAA8 PUSH0 PUSH2 0x702 PUSH2 0xA6D PUSH2 0x177C PUSH2 0x1824 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD96AF07000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x24 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLDATALOAD PUSH1 0x44 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x282 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x282 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x282 JUMPI JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x282 JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x282 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x282 JUMPI PUSH1 0x20 DUP1 DUP6 ADD SWAP5 DUP5 PUSH1 0x5 SHL ADD ADD GT PUSH2 0x282 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD SWAP1 PUSH1 0x20 DUP4 MSTORE DUP4 MLOAD DUP1 SWAP3 MSTORE PUSH1 0x40 DUP4 ADD SWAP3 PUSH1 0x20 PUSH1 0x40 DUP5 PUSH1 0x5 SHL DUP4 ADD ADD SWAP6 ADD SWAP4 PUSH0 SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x18F3 JUMPI POP POP POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 DUP5 DUP1 PUSH2 0x192F DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP7 PUSH1 0x1 SWAP7 SUB ADD DUP8 MSTORE DUP11 MLOAD PUSH2 0x1899 JUMP JUMPDEST SWAP9 ADD SWAP4 ADD SWAP4 ADD SWAP2 SWAP5 SWAP4 SWAP3 SWAP1 PUSH2 0x18E3 JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0xA0 SWAP2 ADD SLT PUSH2 0x282 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x282 JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP2 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH1 0x64 CALLDATALOAD SWAP2 PUSH1 0x84 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x282 JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x80 SWAP2 ADD SLT PUSH2 0x282 JUMPI PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x282 JUMPI SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x64 CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x282 JUMPI PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x282 JUMPI SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2B8 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2B8 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2B8 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP2 DUP4 SUB SLT PUSH2 0x282 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x282 JUMPI ADD DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x282 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x1A81 DUP3 PUSH2 0x1A31 JUMP JUMPDEST SWAP3 PUSH2 0x1A8F PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1A0E JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x282 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x282 JUMPI PUSH1 0x20 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x282 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x282 JUMPI SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH0 SWAP1 PUSH32 0x0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 TLOAD AND ISZERO PUSH2 0x1C48 JUMPI JUMPDEST PUSH32 0x0 SWAP5 DUP6 TLOAD PUSH2 0x1C20 JUMPI PUSH1 0x1 SWAP1 PUSH1 0x1 DUP8 TSTORE PUSH2 0x1B6E DUP4 PUSH2 0x1C55 JUMP JUMPDEST SWAP3 PUSH2 0x1B7C PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1A0E JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x1F NOT PUSH2 0x1B8B DUP3 PUSH2 0x1C55 JUMP JUMPDEST ADD PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x1C0F JUMPI POP POP PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x1BC6 JUMPI POP POP POP POP SWAP1 PUSH0 PUSH2 0x1BBB SWAP4 SWAP3 SWAP6 TSTORE DUP1 TLOAD SWAP2 PUSH2 0x1BBD JUMPI JUMPDEST POP PUSH2 0x1FC6 JUMP JUMPDEST JUMP JUMPDEST PUSH0 SWAP1 TSTORE PUSH0 PUSH2 0x1BB5 JUMP JUMPDEST DUP1 PUSH2 0x1BF3 PUSH0 DUP1 PUSH2 0x1BDB PUSH2 0x1430 DUP10 SWAP7 DUP9 DUP11 PUSH2 0x1C6D JUMP JUMPDEST PUSH1 0x20 DUP2 MLOAD SWAP2 ADD ADDRESS GAS DELEGATECALL PUSH2 0x1BEC PUSH2 0x1D44 JUMP JUMPDEST SWAP1 ADDRESS PUSH2 0x2081 JUMP JUMPDEST PUSH2 0x1BFD DUP3 DUP9 PUSH2 0x1D30 JUMP JUMPDEST MSTORE PUSH2 0x1C08 DUP2 DUP8 PUSH2 0x1D30 JUMP JUMPDEST POP ADD PUSH2 0x1B99 JUMP JUMPDEST DUP1 PUSH1 0x60 PUSH1 0x20 DUP1 SWAP4 DUP10 ADD ADD MSTORE ADD PUSH2 0x1B8E JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 POP CALLER DUP2 TSTORE PUSH1 0x1 SWAP2 PUSH2 0x1B36 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2B8 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x1CCD JUMPI PUSH1 0x5 SHL DUP2 ADD CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP2 CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x282 JUMPI ADD SWAP1 DUP2 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x282 JUMPI PUSH1 0x20 ADD DUP3 CALLDATASIZE SUB DUP2 SGT PUSH2 0x282 JUMPI SWAP2 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 SWAP2 SWAP3 PUSH2 0x1D06 DUP3 PUSH2 0x1A31 JUMP JUMPDEST SWAP2 PUSH2 0x1D14 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x1A0E JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0x282 JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x1CCD JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x1D6E JUMPI RETURNDATASIZE SWAP1 PUSH2 0x1D55 DUP3 PUSH2 0x1A31 JUMP JUMPDEST SWAP2 PUSH2 0x1D63 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x1A0E JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH6 0xFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x282 JUMPI JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x1C20 JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x1DF2 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 PUSH0 SWAP1 DUP1 PUSH2 0x1E2E JUMPI JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND DUP2 PUSH32 0x0 AND SWAP6 DUP3 DUP5 GT PUSH2 0x1F95 JUMPI DUP3 AND SWAP5 DUP2 EXTCODESIZE ISZERO PUSH2 0x282 JUMPI PUSH1 0x84 DUP4 SWAP2 PUSH0 DUP1 SWAP5 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x4 DUP6 ADD MSTORE DUP12 PUSH1 0x24 DUP6 ADD MSTORE DUP9 AND PUSH1 0x44 DUP5 ADD MSTORE DUP10 PUSH1 0x64 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x2AD JUMPI PUSH2 0x1F7E JUMPI JUMPDEST POP PUSH1 0x44 DUP3 SWAP4 PUSH1 0x20 SWAP4 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP4 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x1F72 JUMPI POP PUSH2 0x1F47 JUMPI JUMPDEST DUP1 DUP1 DUP1 PUSH2 0x1E28 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1F6B JUMPI JUMPDEST PUSH2 0x1F5D DUP2 DUP4 PUSH2 0x1A0E JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x282 JUMPI PUSH0 PUSH2 0x1F3F JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1F53 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x20 SWAP3 POP PUSH2 0x1F8B SWAP1 PUSH2 0x19FA JUMP JUMPDEST PUSH1 0x44 PUSH0 SWAP3 POP PUSH2 0x1EF3 JUMP JUMPDEST DUP4 PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0xA0 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SELFBALANCE SWAP1 DUP2 ISZERO PUSH2 0x207D JUMPI PUSH32 0x0 TLOAD PUSH2 0x207D JUMPI DUP2 SELFBALANCE LT PUSH2 0x2051 JUMPI PUSH0 DUP1 DUP1 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 SWAP5 AND GAS CALL PUSH2 0x2021 PUSH2 0x1D44 JUMP JUMPDEST POP ISZERO PUSH2 0x2029 JUMPI JUMP JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0xCD78605900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE ADDRESS PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP POP JUMP JUMPDEST SWAP1 PUSH2 0x2096 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x2029 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x20E9 JUMPI JUMPDEST PUSH2 0x20A7 JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x209F JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA7 TLOAD 0x1F DUP4 0xF7 0xED 0x1E 0xD0 CODESIZE SWAP3 GASLIMIT SGT GT 0x28 BYTE DUP16 PUSH21 0x5A558CA5D25CBDEF5810AB11417FC364736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"507:667:84:-:0;;;;;;;;;;-1:-1:-1;507:667:84;;;;;;;;;;13086:5:65;507:667:84;13064:10:65;:28;13060:79;;507:667:84;13060:79:65;13115:13;;;507:667:84;13115:13:65;;507:667:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7582:172:62;507:667:84;7582:172:62;;;507:667:84;;;;;2047:392:62;507:667:84;2047:392:62;;;507:667:84;;;;;;;;;;;3670:184:62;;;507:667:84;;;;;;;;;;:::i;:::-;;;;;;7084:187:62;;;;;;507:667:84;7084:187:62;;;507:667:84;;;;;;;;;;7084:187:62;;507:667:84;;;;;;;;;;;;;;;;;;;;7050:239:62;;7084:187;7050:239;;;507:667:84;;;7050:239:62;507:667:84;;;;;;;:::i;:::-;7050:239:62;;:6;;507:667:84;7050:239:62;;;;;;;507:667:84;7050:239:62;;;507:667:84;;;7084:187:62;507:667:84;;;7022:308:62;;507:667:84;;;;7084:187:62;7022:308;;;507:667:84;;;;;;;;;;;7050:239:62;;;;507:667:84;7050:239:62;;;;507:667:84;7050:239:62;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;507:667:84;;;;;;;;;;;;;;;;7084:187:62;507:667:84;;;;;;;;;:::i;:::-;1083:103:53;;;;;;;:::i;:::-;436:67:72;;:::i;:::-;507:667:84;;;3670:184:62;;507:667:84;;;;;3670:184:62;;507:667:84;;;;;;;;;;;;;;;;;;;;;;;;;;;3670:184:62;;507:667:84;;3670:6:62;507:667:84;;;;;3670:184:62;507:667:84;;;-1:-1:-1;507:667:84;3670:184:62;;;;;;;;;507:667:84;3670:184:62;;;507:667:84;;;;;;;;;3881:42:62;;;;507:667:84;3881:42:62;;507:667:84;3881:42:62;;507:667:84;3881:42:62;;507:667:84;3881:42:62;;;;;;;4094:5;3881:42;3999:5;3881:42;507:667:84;3881:42:62;;;507:667:84;;;3999:5:62;;:::i;:::-;4094;:::i;:::-;507:667:84;551:66:53;3051:52:55;507:667:84;;;;;;3881:42:62;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;3670:184;;;;;;;;;;;;;;;;;;:::i;:::-;;;507:667:84;;;;;;;;;;3670:184:62;;;;;;;507:667:84;;;;;-1:-1:-1;;507:667:84;;;;;;;;;:::i;:::-;1083:103:53;;:::i;:::-;436:67:72;;:::i;:::-;507:667:84;;;;;;;9455:73:62;;;;;507:667:84;9455:73:62;;507:667:84;;9455:73:62;;507:667:84;;;;;;;;;;;;;;;;;9455:6:62;507:667:84;9455:73:62;;;;;;;507:667:84;9455:73:62;507:667:84;;;9455:73:62;;;507:667:84;3051:52:55;507:667:84;551:66:53;3051:52:55;507:667:84;;;;;;;;;;9455:73:62;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;507:667:84;;;;;-1:-1:-1;;507:667:84;;;;;1083:103:53;;:::i;:::-;507:667:84;;;1074:91;;;;;;507:667;1074:91;;507:667;;;;;;;;;;;;;;;;;;;;;;;;;;;;1074:91;;1095:4;507:667;1095:4;1074:91;;;;;;;;507:667;;551:66:53;3051:52:55;507:667:84;1074:91;;;;;;;;;;;;;;:::i;:::-;;;507:667;;;;1074:91;;;;;;;;507:667;;;;;;2047:392:62;;507:667:84;;;:::i;:::-;;;2047:392:62;;;;;507:667:84;;;;2047:392:62;;;507:667:84;;;;;;;;;;;;;;;;2366:10:62;507:667:84;;;;;;;;;;;;2047:392:62;;-1:-1:-1;;2047:392:62;;;;;;:::i;:::-;507:667:84;;2012:445:62;;;;507:667:84;2012:445:62;;2047:392;507:667:84;2012:445:62;;507:667:84;2047:392:62;507:667:84;;;;:::i;:::-;2012:445:62;:6;;507:667:84;2012:6:62;507:667:84;2012:445:62;;;;;;;507:667:84;2012:445:62;;;507:667:84;;2047:392:62;507:667:84;;;1984:514:62;;507:667:84;;;;2047:392:62;1984:514;;;507:667:84;;;;;;;2012:445:62;;;;;;507:667:84;2012:445:62;;;;;;:::i;:::-;;;;;:::i;:::-;;;;507:667:84;;-1:-1:-1;;507:667:84;;;;;;;;;;;;8105:22:65;507:667:84;;;;;;;;:::i;:::-;8105:22:65;;:::i;:::-;507:667:84;;;;;;;:::i;:::-;;;;;;;;;7582:172:62;507:667:84;;;:::i;:::-;1083:103:53;;;;;;:::i;:::-;436:67:72;;:::i;:::-;507:667:84;;;;;;7582:172:62;;;;;507:667:84;7582:172:62;;507:667:84;;7582:172:62;;507:667:84;;;;;;;;;;;;;;7739:4:62;507:667:84;;;;7582:6:62;507:667:84;7582:172:62;;;;;;507:667:84;7582:172:62;;;507:667:84;7582:172:62;3051:52:55;507:667:84;551:66:53;3051:52:55;507:667:84;;;;;;7582:172:62;;;;;;;;;;;;;;;;:::i;:::-;;;507:667:84;;;;7582:172:62;507:667:84;;7582:172:62;;;;;-1:-1:-1;7582:172:62;;507:667:84;;;;;-1:-1:-1;;507:667:84;;;;;1083:103:53;;:::i;:::-;507:667:84;;;886:95;;507:667;886:95;;;507:667;886:95;;507:667;;;;;;;;;;;;;;;;;;;;;;;;;;;;886:95;;907:4;507:667;907:4;886:95;;;;;;;;507:667;551:66:53;3051:52:55;507:667:84;886:95;;;507:667;886:95;507:667;886:95;;;;;;;:::i;:::-;;;;507:667;;;;;-1:-1:-1;;507:667:84;;;;;;;8071:94:62;;507:667:84;;:::i;:::-;;;8071:94:62;507:667:84;8071:94:62;;;507:667:84;;;;;8071:94:62;;;507:667:84;;;;;;;;;;;;;;;;;8071:94:62;507:667:84;;8037:146:62;;;;507:667:84;8037:146:62;;507:667:84;;8037:146:62;;507:667:84;;;;;;:::i;:::-;8037:146:62;:6;;507:667:84;8037:6:62;507:667:84;8037:146:62;;;;;;;507:667:84;8037:146:62;8009:224;8037:146;507:667:84;8037:146:62;;;507:667:84;;;;;;8009:224:62;;;;;;:::i;:::-;507:667:84;;;;;;;;;;8037:146:62;;;;;;507:667:84;8037:146:62;;;;;;:::i;:::-;;;;507:667:84;;;;;-1:-1:-1;;507:667:84;;;;;;4704:12:66;2295:53:55;507:667:84;;;;;;;;;;;;;-1:-1:-1;;507:667:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;507:667:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;507:667:84;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;507:667:84;;-1:-1:-1;507:667:84;;-1:-1:-1;507:667:84;;;;;;;;;;;;;;;;;;;;;;;;4488:395:62;;507:667:84;;;:::i;:::-;;;4488:395:62;;;;;507:667:84;;;;4488:395:62;;;507:667:84;;;;;;;;;;;;;;;;4810:10:62;507:667:84;;;;;;;;;;;;;;;;;;;:::i;:::-;1083:103:53;;;;;;:::i;:::-;436:67:72;;:::i;:::-;507:667:84;;;;6336:187:62;;507:667:84;;;;;6336:187:62;;507:667:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6336:6:62;507:667:84;;;;;;-1:-1:-1;507:667:84;6336:187:62;;;;;;;507:667:84;;;6336:187:62;;;507:667:84;;;6550:42:62;507:667:84;;;;;6550:42:62;;;;507:667:84;6550:42:62;;507:667:84;6550:42:62;;507:667:84;6550:42:62;;507:667:84;6550:42:62;;;;;;;6663:5;6550:42;;;507:667:84;6550:42:62;6753:5;6550:42;507:667:84;6550:42:62;;;507:667:84;;6663:5:62;;:::i;6753:::-;507:667:84;551:66:53;3051:52:55;507:667:84;;;;;6550:42:62;507:667:84;;;;6550:42:62;;;;;;;;;;;;;;:::i;:::-;;;;6336:187;6550:42;6336:187;;;;;;;;;507:667:84;6336:187:62;507:667:84;6336:187:62;;;;;;;:::i;:::-;;;;;;;;;;507:667:84;;;;;-1:-1:-1;;507:667:84;;;;;;;;;:::i;:::-;1083:103:53;;:::i;:::-;436:67:72;;:::i;:::-;507:667:84;;;;;;;8502:184:62;;;;;507:667:84;8502:184:62;;507:667:84;;8502:184:62;;507:667:84;8569:17:62;507:667:84;;;;;;;;;;;;;;;8671:4:62;507:667:84;;;;8502:6:62;507:667:84;8502:184:62;;;;;;;507:667:84;8502:184:62;507:667:84;;;8502:184:62;;;3051:52:55;507:667:84;551:66:53;3051:52:55;507:667:84;;;;;;;;;;;;;;;-1:-1:-1;;507:667:84;;;;;;;;;4253:8:65;507:667:84;;;;;;-1:-1:-1;;507:667:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;507:667:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1083:103:53;;;;;:::i;:::-;507:667:84;;;;;;1500:6:43;1496:65;;507:667:84;5670:22:65;507:667:84;;;;;5670:22:65;;;;507:667:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7088:860:65;;5650:1371;507:667:84;8105:22:65;3051:52:55;;507:667:84;551:66:53;3051:52:55;8105:22:65;:::i;7088:860::-;7878:8;507:667:84;7878:8:65;507:667:84;7878:59:65;;;;507:667:84;;7878:59:65;507:667:84;7878:59:65;;7894:10;507:667:84;7878:59:65;;507:667:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;507:667:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;507:667:84;;7878:59:65;;:8;507:667:84;7878:8:65;507:667:84;;7878:59:65;;;;;;;507:667:84;7878:59:65;8105:22;7878:59;;;507:667:84;7088:860:65;;;;;;7878:59;;;;:::i;:::-;;;;507:667:84;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;5694:3:65;507:667:84;5738:19:65;;;;;:::i;:::-;507:667:84;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8585:180:65;;;;507:667:84;;8585:180:65;;;;;;507:667:84;8585:180:65;507:667:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5942:338:65;;;;507:667:84;;;;;;;;;;;;;;5942:338:65;;;;;507:667:84;5942:338:65;;507:667:84;;5942:338:65;;507:667:84;6055:4:65;507:667:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5942:338:65;;;;;;5694:3;-1:-1:-1;5922:1089:65;;6407:604;;:::i;:::-;507:667:84;;;;;;;;;;;;;;;;6680:75:65;;;;507:667:84;6680:75:65;;507:667:84;6680:75:65;;507:667:84;6055:4:65;507:667:84;;;;6680:75:65;;;;;;;507:667:84;6680:75:65;;;5922:1089;507:667:84;;;;6680:100:65;6655:342;;5922:1089;507:667:84;5922:1089:65;;507:667:84;5655:13:65;;6655:342;507:667:84;;1881:21:45;:17;;2008:160;;;507:667:84;2008:160:45;;1877:362;2205:23;507:667:84;2205:23:45;507:667:84;;2205:23:45;6680:75:65;;;;507:667:84;6680:75:65;;507:667:84;6680:75:65;;;;;;507:667:84;6680:75:65;;;:::i;:::-;;;507:667:84;;;;;;;6680:75:65;;;;;-1:-1:-1;6680:75:65;;5922:1089;;507:667:84;5922:1089:65;;;5942:338;;;;:::i;:::-;;;;1496:65:43;1529:21;507:667:84;1529:21:43;507:667:84;;1529:21:43;507:667:84;;;;;-1:-1:-1;;507:667:84;;;;;;;9027:100:62;;507:667:84;;:::i;:::-;;;9027:100:62;507:667:84;9027:100:62;;;507:667:84;;;;;9027:100:62;;;507:667:84;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;507:667:84;;;;;;4129:5:65;507:667:84;4129:5:65;507:667:84;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;;507:667:84;;;;;;;;;;;;;;;;;-1:-1:-1;507:667:84;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;507:667:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;507:667:84;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;507:667:84;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;-1:-1:-1;;507:667:84;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;507:667:84;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;507:667:84;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;3191:591:65:-;;;-1:-1:-1;4704:12:66;;2295:53:55;507:667:84;2295:53:55;;507:667:84;3919:25:66;3915:124;;3191:591:65;12307:26;2806:53:55;;;3385:100:65;;3578:4;3051:52:55;3578:4:65;3051:52:55;;507:667:84;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;;507:667:84;;;:::i;:::-;;-1:-1:-1;507:667:84;;;;;;8188:13:65;;-1:-1:-1;8203:15:65;;;;;;3593:1;;;;;-1:-1:-1;3768:6:65;3593:1;;3051:52:55;;2295:53;;4282:82:66;;;8183:132:65;3768:6;;:::i;:::-;3191:591::o;4282:82:66:-;-1:-1:-1;3051:52:55;;4282:82:66;;;8220:3:65;8296:7;4297:55:106;-1:-1:-1;8296:7:65;507:667:84;8296:7:65;;;;;;:::i;507:667:84:-;;4255:25:106;;;;8289:4:65;4255:25:106;;;;:::i;:::-;8289:4:65;;4297:55:106;:::i;:::-;8239:65:65;;;;:::i;:::-;;;;;;:::i;:::-;;507:667:84;8188:13:65;;507:667:84;;;;;;;;;;;;;3385:100:65;3444:30;-1:-1:-1;3444:30:65;;-1:-1:-1;3444:30:65;3915:124:66;3271:10:65;;;3051:52:55;;4024:4:66;3915:124;;;507:667:84;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;507:667:84;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;507:667:84;;;;:::o;:::-;;;:::o;:::-;;;;;;;;;;:::o;1192:349:53:-;551:66;2295:53:55;;1316:93:53;;1529:4;3051:52:55;;1192:349:53:o;509:165:72:-;507:667:84;586:6:72;507:667:84;564:10:72;:29;560:108;;509:165::o;560:108::-;616:41;;;564:10;616:41;507:667:84;;616:41:72;;10829:553:65;;;507:667:84;11126:12:65;;11122:244;;10829:553;;;;;:::o;11122:244::-;507:667:84;11215:8:65;;507:667:84;11253:6:65;;507:667:84;7303:25:119;;;;7299:105;;507:667:84;;11215:86:65;;;;;;507:667:84;;;;;;;;11215:86:65;;;;;507:667:84;11215:86:65;;507:667:84;11215:86:65;;;507:667:84;;;;;;;;;;;;;;;;;11215:86:65;;;;;;;;11122:244;507:667:84;;;;;;;;11319:32:65;;;;;507:667:84;11319:32:65;;11215:86;11319:32;;507:667:84;;;;;11319:32:65;;;;;;;;;;11122:244;;;;;;11319:32;507:667:84;11319:32:65;;;;;;;;;;;;:::i;:::-;;;507:667:84;;;;11319:32:65;;;;;;;;;507:667:84;;;;;;;;;;11215:86:65;507:667:84;11215:86:65;;;;;:::i;:::-;507:667:84;;11215:86:65;;;;7299:105:119;7351:42;;507:667:84;7351:42:119;7382:3;7351:42;507:667:84;;;;;7351:42:119;9544:584:65;9780:21;9815:11;;;9811:48;;12307:26;2295:53:55;10009:69:65;;1616:21:106;;:30;1612:109;;9825:1:65;507:667:84;;;;;;;1750:33:106;;;;:::i;:::-;;1797:8;1793:63;;9544:584:65:o;1793:63:106:-;1828:17;9825:1:65;1828:17:106;;9825:1:65;1828:17:106;1612:109;1669:41;9825:1:65;1669:41:106;9788:4:65;1669:41:106;507:667:84;;9825:1:65;1669:41:106;10009:69:65;10061:7;;:::o;4625:582:106:-;;4797:8;;-1:-1:-1;507:667:84;;5874:21:106;:17;;6046:142;;;;;;4793:408;507:667:84;;5045:22:106;:49;;;4793:408;5041:119;;5173:17;;:::o;5041:119::-;507:667:84;5121:24:106;;5066:1;5121:24;507:667:84;5121:24:106;507:667:84;;5066:1:106;5121:24;5045:49;5071:18;;;:23;5045:49;"},"methodIdentifiers":{"addLiquidityToBuffer(address,uint256,uint256,uint256)":"502383f4","addLiquidityToBufferHook(address,uint256,uint256,uint256,address)":"4fe56ed6","getPermit2()":"1bbf2e23","getSender()":"5e01eb5a","getWeth()":"107c279f","initializeBuffer(address,uint256,uint256,uint256)":"b365a3c2","initializeBufferHook(address,uint256,uint256,uint256,address)":"d9f70869","manualReentrancyAddLiquidityToBufferHook()":"8afe5c38","manualReentrancyInitializeBufferHook()":"bc48e97f","multicall(bytes[])":"ac9650d8","permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])":"19c6989f","queryAddLiquidityToBuffer(address,uint256)":"662727cc","queryAddLiquidityToBufferHook(address,uint256)":"400f230d","queryInitializeBuffer(address,uint256,uint256)":"e0fefe35","queryInitializeBufferHook(address,uint256,uint256)":"a3902604","queryRemoveLiquidityFromBuffer(address,uint256)":"13f7bb4d","queryRemoveLiquidityFromBufferHook(address,uint256)":"d96af070","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IWETH\",\"name\":\"weth\",\"type\":\"address\"},{\"internalType\":\"contract IPermit2\",\"name\":\"permit2\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EthTransfer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MockErrorCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBufferHook\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermit2\",\"outputs\":[{\"internalType\":\"contract IPermit2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWeth\",\"outputs\":[{\"internalType\":\"contract IWETH\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountUnderlyingIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountWrappedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountUnderlyingIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountWrappedIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBufferHook\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualReentrancyAddLiquidityToBufferHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualReentrancyInitializeBufferHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"internalType\":\"struct IRouterCommon.PermitApproval[]\",\"name\":\"permitBatch\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"permitSignatures\",\"type\":\"bytes[]\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"internalType\":\"uint48\",\"name\":\"expiration\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"nonce\",\"type\":\"uint48\"}],\"internalType\":\"struct IAllowanceTransfer.PermitDetails[]\",\"name\":\"details\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sigDeadline\",\"type\":\"uint256\"}],\"internalType\":\"struct IAllowanceTransfer.PermitBatch\",\"name\":\"permit2Batch\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"permit2Signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes[]\",\"name\":\"multicallData\",\"type\":\"bytes[]\"}],\"name\":\"permitBatchAndCall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"}],\"name\":\"queryAddLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"}],\"name\":\"queryAddLiquidityToBufferHook\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountUnderlyingIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountWrappedIn\",\"type\":\"uint256\"}],\"name\":\"queryInitializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountUnderlyingIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountWrappedIn\",\"type\":\"uint256\"}],\"name\":\"queryInitializeBufferHook\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToRemove\",\"type\":\"uint256\"}],\"name\":\"queryRemoveLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToRemove\",\"type\":\"uint256\"}],\"name\":\"queryRemoveLiquidityFromBufferHook\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}]},\"kind\":\"dev\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Requires the buffer to be initialized beforehand. Restricting adds to proportional simplifies the Vault code, avoiding rounding issues and minimum amount checks. It is possible to add unbalanced by interacting with the wrapper contract directly.\",\"params\":{\"exactSharesToIssue\":\"The amount of shares that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingIn\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedIn\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingIn\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedIn\":\"Amount of wrapped tokens deposited into the buffer\"}},\"addLiquidityToBufferHook(address,uint256,uint256,uint256,address)\":{\"details\":\"Can only be called by the Vault.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingIn\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedIn\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingIn\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedIn\":\"Amount of wrapped tokens deposited into the buffer\"}},\"getSender()\":{\"returns\":{\"_0\":\"The address of the sender\"}},\"initializeBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Calling this method binds the wrapped token to its underlying asset internally; the asset in the wrapper cannot change afterwards, or every other operation on that wrapper (add / remove / wrap / unwrap) will fail. To avoid unexpected behavior, always initialize buffers before creating or initializing any pools that contain the wrapped tokens to be used with them.\",\"params\":{\"exactAmountUnderlyingIn\":\"Amount of underlying tokens that will be deposited into the buffer\",\"exactAmountWrappedIn\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, denominated in underlying tokens (This is the BPT of the Vault's internal ERC4626 buffer.)\"}},\"initializeBufferHook(address,uint256,uint256,uint256,address)\":{\"details\":\"Can only be called by the Vault. Buffers must be initialized before use.\",\"params\":{\"exactAmountUnderlyingIn\":\"Amount of underlying tokens that will be deposited into the buffer\",\"exactAmountWrappedIn\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive, in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (This is the BPT of an internal ERC4626 buffer)\"}},\"multicall(bytes[])\":{\"params\":{\"data\":\"Encoded function calls to be executed in the batch.\"},\"returns\":{\"results\":\"Array of bytes arrays, each representing the return data from each function call executed.\"}},\"permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])\":{\"params\":{\"multicallData\":\"An array of bytes arrays, each representing an encoded function call on this contract\",\"permit2Batch\":\"A batch of permit2 approvals\",\"permit2Signature\":\"A permit2 signature for the batch approval\",\"permitBatch\":\"An array of `PermitApproval` structs, each representing an ERC20 permit request\",\"permitSignatures\":\"An array of bytes, corresponding to the permit request signature in `permitBatch`\"},\"returns\":{\"results\":\"Array of bytes arrays, each representing the return data from each function call executed\"}},\"queryAddLiquidityToBuffer(address,uint256)\":{\"params\":{\"exactSharesToIssue\":\"The amount of shares that would be minted, in underlying token decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingIn\":\"Amount of underlying tokens that would be deposited into the buffer\",\"amountWrappedIn\":\"Amount of wrapped tokens that would be deposited into the buffer\"}},\"queryInitializeBuffer(address,uint256,uint256)\":{\"params\":{\"exactAmountUnderlyingIn\":\"Amount of underlying tokens that the sender wishes to deposit into the buffer\",\"exactAmountWrappedIn\":\"Amount of wrapped tokens that the sender wishes to deposit into the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"The amount of shares that would be minted, in underlying token decimals\"}},\"queryRemoveLiquidityFromBuffer(address,uint256)\":{\"params\":{\"exactSharesToRemove\":\"The amount of shares that would be burned, in underlying token decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceOut\":\"Amount of underlying tokens that would be removed from the buffer\",\"removedWrappedBalanceOut\":\"Amount of wrapped tokens that would be removed from the buffer\"}},\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"ErrorSelectorNotFound()\":[{\"notice\":\"Handle the \\\"reverted without a reason\\\" case (i.e., no return data).\"}],\"EthTransfer()\":[{\"notice\":\"Incoming ETH transfer from an address that is not WETH.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"InsufficientEth()\":[{\"notice\":\"The amount of ETH paid is insufficient to complete this operation.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}]},\"kind\":\"user\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Adds liquidity proportionally to an internal ERC4626 buffer in the Vault.\"},\"addLiquidityToBufferHook(address,uint256,uint256,uint256,address)\":{\"notice\":\"Hook for adding liquidity to vault buffers. The Vault will enforce that the buffer is initialized.\"},\"getPermit2()\":{\"notice\":\"Returns Permit2 contract address.\"},\"getSender()\":{\"notice\":\"Get the first sender which initialized the call to Router.\"},\"getWeth()\":{\"notice\":\"Returns WETH contract address.\"},\"initializeBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Adds liquidity for the first time to an internal ERC4626 buffer in the Vault.\"},\"initializeBufferHook(address,uint256,uint256,uint256,address)\":{\"notice\":\"Hook for initializing a vault buffer.\"},\"multicall(bytes[])\":{\"notice\":\"Executes a batch of function calls on this contract.\"},\"permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])\":{\"notice\":\"Permits multiple allowances and executes a batch of function calls on this contract.\"},\"queryAddLiquidityToBuffer(address,uint256)\":{\"notice\":\"Queries an `addLiquidityToBuffer` operation without actually executing it.\"},\"queryInitializeBuffer(address,uint256,uint256)\":{\"notice\":\"Queries an `initializeBuffer` operation without actually executing it.\"},\"queryRemoveLiquidityFromBuffer(address,uint256)\":{\"notice\":\"Queries an `removeLiquidityFromBuffer` operation without actually executing it.\"},\"version()\":{\"notice\":\"Getter for the version.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/test/BufferRouterMock.sol\":\"BufferRouterMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x75d5964b2f92dba9b9254e0052de28a9378e6759b1b28ccbb51db0bc80024176\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6ec9c862929ccff2be994d0296c0a4de3ddc19bb5a7aae3d4df0887dc7b29c8e\",\"dweb:/ipfs/QmSNr2fkNM2VyAo3B1DG1cuRh41t4A6mJZqeUu6vvYb97G\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBufferRouter.sol\":{\"keccak256\":\"0xcef9acd5d8cf67d7e126da0961fef2f7dac4e9b24ae13385dfd17d2313536cd9\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8e1bf4ede1c5055ea3a57536a6804bd3ca984017a738be03a2a7673eaec0c5ed\",\"dweb:/ipfs/QmYyfLkUeTj17JuDnzzKfqtFK9kEjfbs3XWEsdh83kNt1Z\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouterCommon.sol\":{\"keccak256\":\"0x82d459426edf0ac20a33ad2065dae1f83544069b9887618248c0722e25a8b736\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c4566915a8c2b10f6232f92dad5e4409bb2aa46baf6a5d78dc0ac447facbfb37\",\"dweb:/ipfs/QmReRhA1BxRocwWsGgacaAcC2xRtWqJgN57bd2Yyy7A1gd\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISenderGuard.sol\":{\"keccak256\":\"0x2ec1ecf5c578aab7502f6985a03fbb79998218bdef819845d70d28a6994cff5b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a32637a45f19c29797db11eb25eb9bfda73302f280a64a9d9a4ab123db1b8e6f\",\"dweb:/ipfs/QmXGimviZ4Mr6kwgqkCwpHH5uGHVEjAcCRNvAwvoVYKi6f\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":{\"keccak256\":\"0xb4ee9e1543d36bdf9eeb4a9d5ab41170723239a1e27a2272f2e31de4765c019b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b70dd5e4fa496c2c1efb6bd20368587ba3c9c0d0afac9dc3631a29ff2628f99\",\"dweb:/ipfs/QmQigXUkpDuVK5VSX67RABrAC9bashPcHMasgPRNJb4k8Z\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":{\"keccak256\":\"0xb5f6b1d0ee3f295a717ce58329eaadccb1eefc2e1e02e2e7c438e377628475cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03c1b9bc73b7d14d9e1948a31c271a03a6ba4291f44d9aff17e60d300c111d0d\",\"dweb:/ipfs/QmNpW3iD3ST76N6xTncuVgYSuafSqFkXUmxNaK8uybr96G\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/BufferRouter.sol\":{\"keccak256\":\"0x86ed9d1f9e5a54d2f4213e88f070e25b6a746222c26653de4638b9f619111bd2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://78b8b3026d22679c0697dca993c35cab0de0dcfc6e47781f4b90e3455fb341e9\",\"dweb:/ipfs/QmaEQrJmeHQTA4kWJnaHYJmpe7nKL424henYhBQHrbe3sa\"]},\"@balancer-labs/v3-vault/contracts/RouterCommon.sol\":{\"keccak256\":\"0xb473ef641d1465f4d3c4f0372183e7c4c0baa77b2e2cf73dee947ab7ab722bac\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://61a166cdf1760c79790f921a8edee1f1977f07cef699db901bd15100ab30f96f\",\"dweb:/ipfs/QmdyhDm4PgNyzNC3s25k68yd52GtqM4PJt6QpfkmEmRtHW\"]},\"@balancer-labs/v3-vault/contracts/SenderGuard.sol\":{\"keccak256\":\"0x43fbf1ee03766ff75e6306520827db7d8f9cbc63f4609105a7062cbf6c6980a2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c015d974c3c8ae2f0677905a3216148611be430d4f3b8e64698ede996c8b4a46\",\"dweb:/ipfs/QmdrU9JE9NoksjQ6DUmGH1uKjgdyXVZXfD1RzdwFPnYtzr\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@balancer-labs/v3-vault/contracts/lib/RouterWethLib.sol\":{\"keccak256\":\"0xd66f21fa586085e10a1e322370c7015ebe472c44fc27472a6fdfe67ad6d9b188\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://88b4830e07a76a68dce1e3adba583f60259df5187087def2fd43d3c1f8b0e2ae\",\"dweb:/ipfs/QmbGNEfYtDUFpGrFYo9iJcSg9sJxiAVN9iaJApCaHobTDm\"]},\"@balancer-labs/v3-vault/contracts/test/BufferRouterMock.sol\":{\"keccak256\":\"0xfea36bacd089ddfbb0d2aa9435e56baa6c0ad97fa043577fb8bfa81767b87ebb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://278fb71abbd42e396207a1460958c557faef5837d1fa48fddc820ff2d2d7665b\",\"dweb:/ipfs/QmPguaMx1JsqwEaZr3CpVkMFW8vvUsDg8XKUk7roa6NBM5\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"permit2/src/interfaces/IAllowanceTransfer.sol\":{\"keccak256\":\"0x37f0ac203b6ef605c9533e1a739477e8e9dcea90710b40e645a367f8a21ace29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0104d72aeaec1cd66cc232e7de7b7ead08608efcc179491b8a66387614670b0\",\"dweb:/ipfs/QmfAZDyuNC9FXXbnJUwqHNwmAK6uRrXxtWEytLsxjskPsN\"]},\"permit2/src/interfaces/IEIP712.sol\":{\"keccak256\":\"0xfdccf2b9639070803cd0e4198427fb0df3cc452ca59bd3b8a0d957a9a4254138\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7c936ac42ce89e827db905a1544397f8bdf46db34cdb6aa1b90dea42fdb4c72\",\"dweb:/ipfs/QmVgurxo1N31qZqkPBirw9Z7S9tLYmv6jSwQp8R8ur2cBk\"]},\"permit2/src/interfaces/IPermit2.sol\":{\"keccak256\":\"0xaa631cc9f53e699301d94233007110a345e6779011def484e8dd97b8fe0af771\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc0502cf19c9c18f320a3001201e89e350393b75837f6b7971de18b2de06f30d\",\"dweb:/ipfs/QmT9SfhdJ7VJNNrf94g4H5usyi7ShqWGx7Cqsz9jZTjX96\"]},\"permit2/src/interfaces/ISignatureTransfer.sol\":{\"keccak256\":\"0xe6df9966f8841dc3958ee86169c89de97e7f614c81c28b9dc947b12d732df64e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3d4eafdee7f48c3be8350a94eb6edd0bfb2af2c105df65787a77174f356c0317\",\"dweb:/ipfs/QmY1j2adeeAhNpn6cUuthemxGCdLXHTfyMh9yTKsY4mZ2d\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/test/InputHelpersMock.sol":{"InputHelpersMock":{"abi":[{"inputs":[],"name":"TokensNotSorted","type":"error"},{"inputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"name":"ensureSortedTokens","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"}],"name":"sortTokenConfig","outputs":[{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"","type":"tuple[]"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"name":"sortTokens","outputs":[{"internalType":"contract IERC20[]","name":"","type":"address[]"}],"stateMutability":"pure","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60808060405234601557610822908161001a8239f35b5f80fdfe604060808152600480361015610013575f80fd5b5f3560e01c8063136deb1c146103b6578063a3aef0b81461039e5763bb4ad7d51461003c575f80fd5b3461036f57602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261036f5780359267ffffffffffffffff9081851161036f573660238601121561036f57848301356024956100a461009f836105fe565b61058d565b938685848152019088829460071b8401019236841161036f579497948901915b8383106102e657505050505f915b8351957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff968781019081116102bb5784101561020c575f5b6101158587516106d3565b8881019081116101e1578110156101d35773ffffffffffffffffffffffffffffffffffffffff80610146838961070d565b51511660018301918284116101a857908291610165600195948b61070d565b51511610610175575b500161010a565b61017f818961070d565b519061019661018e848b61070d565b51918a61070d565b526101a1828961070d565b525f61016e565b8b60118b7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b5095506001909201916100d2565b896011897f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b805182815285518184018190529092838301925f9089908c5b8584106102325787870388f35b909192939495885173ffffffffffffffffffffffffffffffffffffffff808251168352878201516002811015610290578884015284820151168483015260609081015115159082015297850197608001959493600101929190610225565b846021887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b886011887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b608098959890818436031261036f5786519182018281108482111761037357875261031084610616565b825289840135600281101561036f578a8301528684013573ffffffffffffffffffffffffffffffffffffffff8116810361036f57878301526060908185013592831515840361036f576080938c938201528152019201919794976100c4565b5f80fd5b8b60418b7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b3461036f576103b46103af36610637565b61074e565b005b50903461036f576103c636610637565b915f5b8351927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9384810190811161056157821015610506575f5b61040c8387516106d3565b8581019081116104da578110156104cf5773ffffffffffffffffffffffffffffffffffffffff8061043d838961070d565b511660018301908184116104a3579082916001949361045c838c61070d565b51161061046c575b505001610401565b6104908261047a838c61070d565b511692610487858c61070d565b5116918a61070d565b5261049b828961070d565b525f80610464565b6011877f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5092506001016103c9565b6011857f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b84908051918291602090602080850191818652845180935285019301915f5b82811061053457505050500390f35b835173ffffffffffffffffffffffffffffffffffffffff1685528695509381019392810192600101610525565b6011847f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f604051930116820182811067ffffffffffffffff8211176105d157604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116105d15760051b60200190565b359073ffffffffffffffffffffffffffffffffffffffff8216820361036f57565b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261036f576004359167ffffffffffffffff831161036f578060238401121561036f57826004013561069161009f826105fe565b936024602086848152019260051b82010192831161036f57602401905b8282106106bc575050505090565b8380916106c884610616565b8152019101906106ae565b919082039182116106e057565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80518210156107215760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8051600281106107e857156107215773ffffffffffffffffffffffffffffffffffffffff80602083015116600180936001915b61078d575b5050505050565b80518210156107e3578392836107a3848461070d565b511694859116116107bb578480949201919293610781565b7f6e8f1947000000000000000000000000000000000000000000000000000000005f5260045ffd5b610786565b505056fea2646970667358221220dbd88281ea252e338d8b2ad51d761148c738c6b36f19880627291d371b3bc04464736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x15 JUMPI PUSH2 0x822 SWAP1 DUP2 PUSH2 0x1A DUP3 CODECOPY RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x136DEB1C EQ PUSH2 0x3B6 JUMPI DUP1 PUSH4 0xA3AEF0B8 EQ PUSH2 0x39E JUMPI PUSH4 0xBB4AD7D5 EQ PUSH2 0x3C JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x36F JUMPI PUSH1 0x20 SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x36F JUMPI DUP1 CALLDATALOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP6 GT PUSH2 0x36F JUMPI CALLDATASIZE PUSH1 0x23 DUP7 ADD SLT ISZERO PUSH2 0x36F JUMPI DUP5 DUP4 ADD CALLDATALOAD PUSH1 0x24 SWAP6 PUSH2 0xA4 PUSH2 0x9F DUP4 PUSH2 0x5FE JUMP JUMPDEST PUSH2 0x58D JUMP JUMPDEST SWAP4 DUP7 DUP6 DUP5 DUP2 MSTORE ADD SWAP1 DUP9 DUP3 SWAP5 PUSH1 0x7 SHL DUP5 ADD ADD SWAP3 CALLDATASIZE DUP5 GT PUSH2 0x36F JUMPI SWAP5 SWAP8 SWAP5 DUP10 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x2E6 JUMPI POP POP POP POP PUSH0 SWAP2 JUMPDEST DUP4 MLOAD SWAP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP2 ADD SWAP1 DUP2 GT PUSH2 0x2BB JUMPI DUP5 LT ISZERO PUSH2 0x20C JUMPI PUSH0 JUMPDEST PUSH2 0x115 DUP6 DUP8 MLOAD PUSH2 0x6D3 JUMP JUMPDEST DUP9 DUP2 ADD SWAP1 DUP2 GT PUSH2 0x1E1 JUMPI DUP2 LT ISZERO PUSH2 0x1D3 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH2 0x146 DUP4 DUP10 PUSH2 0x70D JUMP JUMPDEST MLOAD MLOAD AND PUSH1 0x1 DUP4 ADD SWAP2 DUP3 DUP5 GT PUSH2 0x1A8 JUMPI SWAP1 DUP3 SWAP2 PUSH2 0x165 PUSH1 0x1 SWAP6 SWAP5 DUP12 PUSH2 0x70D JUMP JUMPDEST MLOAD MLOAD AND LT PUSH2 0x175 JUMPI JUMPDEST POP ADD PUSH2 0x10A JUMP JUMPDEST PUSH2 0x17F DUP2 DUP10 PUSH2 0x70D JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x196 PUSH2 0x18E DUP5 DUP12 PUSH2 0x70D JUMP JUMPDEST MLOAD SWAP2 DUP11 PUSH2 0x70D JUMP JUMPDEST MSTORE PUSH2 0x1A1 DUP3 DUP10 PUSH2 0x70D JUMP JUMPDEST MSTORE PUSH0 PUSH2 0x16E JUMP JUMPDEST DUP12 PUSH1 0x11 DUP12 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP SWAP6 POP PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0xD2 JUMP JUMPDEST DUP10 PUSH1 0x11 DUP10 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP1 MLOAD DUP3 DUP2 MSTORE DUP6 MLOAD DUP2 DUP5 ADD DUP2 SWAP1 MSTORE SWAP1 SWAP3 DUP4 DUP4 ADD SWAP3 PUSH0 SWAP1 DUP10 SWAP1 DUP13 JUMPDEST DUP6 DUP5 LT PUSH2 0x232 JUMPI DUP8 DUP8 SUB DUP9 RETURN JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 DUP9 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP8 DUP3 ADD MLOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x290 JUMPI DUP9 DUP5 ADD MSTORE DUP5 DUP3 ADD MLOAD AND DUP5 DUP4 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 ADD MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE SWAP8 DUP6 ADD SWAP8 PUSH1 0x80 ADD SWAP6 SWAP5 SWAP4 PUSH1 0x1 ADD SWAP3 SWAP2 SWAP1 PUSH2 0x225 JUMP JUMPDEST DUP5 PUSH1 0x21 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP9 PUSH1 0x11 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x80 SWAP9 SWAP6 SWAP9 SWAP1 DUP2 DUP5 CALLDATASIZE SUB SLT PUSH2 0x36F JUMPI DUP7 MLOAD SWAP2 DUP3 ADD DUP3 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x373 JUMPI DUP8 MSTORE PUSH2 0x310 DUP5 PUSH2 0x616 JUMP JUMPDEST DUP3 MSTORE DUP10 DUP5 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x36F JUMPI DUP11 DUP4 ADD MSTORE DUP7 DUP5 ADD CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x36F JUMPI DUP8 DUP4 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 DUP6 ADD CALLDATALOAD SWAP3 DUP4 ISZERO ISZERO DUP5 SUB PUSH2 0x36F JUMPI PUSH1 0x80 SWAP4 DUP13 SWAP4 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP2 SWAP8 SWAP5 SWAP8 PUSH2 0xC4 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP12 PUSH1 0x41 DUP12 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x36F JUMPI PUSH2 0x3B4 PUSH2 0x3AF CALLDATASIZE PUSH2 0x637 JUMP JUMPDEST PUSH2 0x74E JUMP JUMPDEST STOP JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x36F JUMPI PUSH2 0x3C6 CALLDATASIZE PUSH2 0x637 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP4 MLOAD SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP2 ADD SWAP1 DUP2 GT PUSH2 0x561 JUMPI DUP3 LT ISZERO PUSH2 0x506 JUMPI PUSH0 JUMPDEST PUSH2 0x40C DUP4 DUP8 MLOAD PUSH2 0x6D3 JUMP JUMPDEST DUP6 DUP2 ADD SWAP1 DUP2 GT PUSH2 0x4DA JUMPI DUP2 LT ISZERO PUSH2 0x4CF JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH2 0x43D DUP4 DUP10 PUSH2 0x70D JUMP JUMPDEST MLOAD AND PUSH1 0x1 DUP4 ADD SWAP1 DUP2 DUP5 GT PUSH2 0x4A3 JUMPI SWAP1 DUP3 SWAP2 PUSH1 0x1 SWAP5 SWAP4 PUSH2 0x45C DUP4 DUP13 PUSH2 0x70D JUMP JUMPDEST MLOAD AND LT PUSH2 0x46C JUMPI JUMPDEST POP POP ADD PUSH2 0x401 JUMP JUMPDEST PUSH2 0x490 DUP3 PUSH2 0x47A DUP4 DUP13 PUSH2 0x70D JUMP JUMPDEST MLOAD AND SWAP3 PUSH2 0x487 DUP6 DUP13 PUSH2 0x70D JUMP JUMPDEST MLOAD AND SWAP2 DUP11 PUSH2 0x70D JUMP JUMPDEST MSTORE PUSH2 0x49B DUP3 DUP10 PUSH2 0x70D JUMP JUMPDEST MSTORE PUSH0 DUP1 PUSH2 0x464 JUMP JUMPDEST PUSH1 0x11 DUP8 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP3 POP PUSH1 0x1 ADD PUSH2 0x3C9 JUMP JUMPDEST PUSH1 0x11 DUP6 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP5 SWAP1 DUP1 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x20 DUP1 DUP6 ADD SWAP2 DUP2 DUP7 MSTORE DUP5 MLOAD DUP1 SWAP4 MSTORE DUP6 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x534 JUMPI POP POP POP POP SUB SWAP1 RETURN JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE DUP7 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x525 JUMP JUMPDEST PUSH1 0x11 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x40 MLOAD SWAP4 ADD AND DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x5D1 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x5D1 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x36F JUMPI JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC DUP4 ADD SLT PUSH2 0x36F JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x36F JUMPI DUP1 PUSH1 0x23 DUP5 ADD SLT ISZERO PUSH2 0x36F JUMPI DUP3 PUSH1 0x4 ADD CALLDATALOAD PUSH2 0x691 PUSH2 0x9F DUP3 PUSH2 0x5FE JUMP JUMPDEST SWAP4 PUSH1 0x24 PUSH1 0x20 DUP7 DUP5 DUP2 MSTORE ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x36F JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x6BC JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 DUP1 SWAP2 PUSH2 0x6C8 DUP5 PUSH2 0x616 JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x6AE JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x6E0 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x721 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x2 DUP2 LT PUSH2 0x7E8 JUMPI ISZERO PUSH2 0x721 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x1 DUP1 SWAP4 PUSH1 0x1 SWAP2 JUMPDEST PUSH2 0x78D JUMPI JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x7E3 JUMPI DUP4 SWAP3 DUP4 PUSH2 0x7A3 DUP5 DUP5 PUSH2 0x70D JUMP JUMPDEST MLOAD AND SWAP5 DUP6 SWAP2 AND GT PUSH2 0x7BB JUMPI DUP5 DUP1 SWAP5 SWAP3 ADD SWAP2 SWAP3 SWAP4 PUSH2 0x781 JUMP JUMPDEST PUSH32 0x6E8F194700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x786 JUMP JUMPDEST POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDB 0xD8 DUP3 DUP2 0xEA 0x25 0x2E CALLER DUP14 DUP12 0x2A 0xD5 SAR PUSH23 0x1148C738C6B36F19880627291D371B3BC04464736F6C63 NUMBER STOP ADDMOD SHL STOP CALLER ","sourceMap":"339:842:85:-:0;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_array_contract_IERC20_dyn":{"entryPoint":1591,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_contract_IERC20":{"entryPoint":1558,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_memory":{"entryPoint":1421,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_contract_IERC20_dyn":{"entryPoint":1534,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_uint256":{"entryPoint":1747,"id":null,"parameterSlots":2,"returnSlots":1},"fun_ensureSortedTokens":{"entryPoint":1870,"id":6140,"parameterSlots":1,"returnSlots":0},"memory_array_index_access_struct_TokenConfig_dyn":{"entryPoint":1805,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"604060808152600480361015610013575f80fd5b5f3560e01c8063136deb1c146103b6578063a3aef0b81461039e5763bb4ad7d51461003c575f80fd5b3461036f57602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261036f5780359267ffffffffffffffff9081851161036f573660238601121561036f57848301356024956100a461009f836105fe565b61058d565b938685848152019088829460071b8401019236841161036f579497948901915b8383106102e657505050505f915b8351957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff968781019081116102bb5784101561020c575f5b6101158587516106d3565b8881019081116101e1578110156101d35773ffffffffffffffffffffffffffffffffffffffff80610146838961070d565b51511660018301918284116101a857908291610165600195948b61070d565b51511610610175575b500161010a565b61017f818961070d565b519061019661018e848b61070d565b51918a61070d565b526101a1828961070d565b525f61016e565b8b60118b7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b5095506001909201916100d2565b896011897f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b805182815285518184018190529092838301925f9089908c5b8584106102325787870388f35b909192939495885173ffffffffffffffffffffffffffffffffffffffff808251168352878201516002811015610290578884015284820151168483015260609081015115159082015297850197608001959493600101929190610225565b846021887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b886011887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b608098959890818436031261036f5786519182018281108482111761037357875261031084610616565b825289840135600281101561036f578a8301528684013573ffffffffffffffffffffffffffffffffffffffff8116810361036f57878301526060908185013592831515840361036f576080938c938201528152019201919794976100c4565b5f80fd5b8b60418b7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b3461036f576103b46103af36610637565b61074e565b005b50903461036f576103c636610637565b915f5b8351927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9384810190811161056157821015610506575f5b61040c8387516106d3565b8581019081116104da578110156104cf5773ffffffffffffffffffffffffffffffffffffffff8061043d838961070d565b511660018301908184116104a3579082916001949361045c838c61070d565b51161061046c575b505001610401565b6104908261047a838c61070d565b511692610487858c61070d565b5116918a61070d565b5261049b828961070d565b525f80610464565b6011877f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5092506001016103c9565b6011857f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b84908051918291602090602080850191818652845180935285019301915f5b82811061053457505050500390f35b835173ffffffffffffffffffffffffffffffffffffffff1685528695509381019392810192600101610525565b6011847f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f604051930116820182811067ffffffffffffffff8211176105d157604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116105d15760051b60200190565b359073ffffffffffffffffffffffffffffffffffffffff8216820361036f57565b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261036f576004359167ffffffffffffffff831161036f578060238401121561036f57826004013561069161009f826105fe565b936024602086848152019260051b82010192831161036f57602401905b8282106106bc575050505090565b8380916106c884610616565b8152019101906106ae565b919082039182116106e057565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80518210156107215760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8051600281106107e857156107215773ffffffffffffffffffffffffffffffffffffffff80602083015116600180936001915b61078d575b5050505050565b80518210156107e3578392836107a3848461070d565b511694859116116107bb578480949201919293610781565b7f6e8f1947000000000000000000000000000000000000000000000000000000005f5260045ffd5b610786565b505056fea2646970667358221220dbd88281ea252e338d8b2ad51d761148c738c6b36f19880627291d371b3bc04464736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x136DEB1C EQ PUSH2 0x3B6 JUMPI DUP1 PUSH4 0xA3AEF0B8 EQ PUSH2 0x39E JUMPI PUSH4 0xBB4AD7D5 EQ PUSH2 0x3C JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x36F JUMPI PUSH1 0x20 SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x36F JUMPI DUP1 CALLDATALOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP6 GT PUSH2 0x36F JUMPI CALLDATASIZE PUSH1 0x23 DUP7 ADD SLT ISZERO PUSH2 0x36F JUMPI DUP5 DUP4 ADD CALLDATALOAD PUSH1 0x24 SWAP6 PUSH2 0xA4 PUSH2 0x9F DUP4 PUSH2 0x5FE JUMP JUMPDEST PUSH2 0x58D JUMP JUMPDEST SWAP4 DUP7 DUP6 DUP5 DUP2 MSTORE ADD SWAP1 DUP9 DUP3 SWAP5 PUSH1 0x7 SHL DUP5 ADD ADD SWAP3 CALLDATASIZE DUP5 GT PUSH2 0x36F JUMPI SWAP5 SWAP8 SWAP5 DUP10 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x2E6 JUMPI POP POP POP POP PUSH0 SWAP2 JUMPDEST DUP4 MLOAD SWAP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP2 ADD SWAP1 DUP2 GT PUSH2 0x2BB JUMPI DUP5 LT ISZERO PUSH2 0x20C JUMPI PUSH0 JUMPDEST PUSH2 0x115 DUP6 DUP8 MLOAD PUSH2 0x6D3 JUMP JUMPDEST DUP9 DUP2 ADD SWAP1 DUP2 GT PUSH2 0x1E1 JUMPI DUP2 LT ISZERO PUSH2 0x1D3 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH2 0x146 DUP4 DUP10 PUSH2 0x70D JUMP JUMPDEST MLOAD MLOAD AND PUSH1 0x1 DUP4 ADD SWAP2 DUP3 DUP5 GT PUSH2 0x1A8 JUMPI SWAP1 DUP3 SWAP2 PUSH2 0x165 PUSH1 0x1 SWAP6 SWAP5 DUP12 PUSH2 0x70D JUMP JUMPDEST MLOAD MLOAD AND LT PUSH2 0x175 JUMPI JUMPDEST POP ADD PUSH2 0x10A JUMP JUMPDEST PUSH2 0x17F DUP2 DUP10 PUSH2 0x70D JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x196 PUSH2 0x18E DUP5 DUP12 PUSH2 0x70D JUMP JUMPDEST MLOAD SWAP2 DUP11 PUSH2 0x70D JUMP JUMPDEST MSTORE PUSH2 0x1A1 DUP3 DUP10 PUSH2 0x70D JUMP JUMPDEST MSTORE PUSH0 PUSH2 0x16E JUMP JUMPDEST DUP12 PUSH1 0x11 DUP12 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP SWAP6 POP PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0xD2 JUMP JUMPDEST DUP10 PUSH1 0x11 DUP10 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP1 MLOAD DUP3 DUP2 MSTORE DUP6 MLOAD DUP2 DUP5 ADD DUP2 SWAP1 MSTORE SWAP1 SWAP3 DUP4 DUP4 ADD SWAP3 PUSH0 SWAP1 DUP10 SWAP1 DUP13 JUMPDEST DUP6 DUP5 LT PUSH2 0x232 JUMPI DUP8 DUP8 SUB DUP9 RETURN JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 DUP9 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP8 DUP3 ADD MLOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x290 JUMPI DUP9 DUP5 ADD MSTORE DUP5 DUP3 ADD MLOAD AND DUP5 DUP4 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 ADD MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE SWAP8 DUP6 ADD SWAP8 PUSH1 0x80 ADD SWAP6 SWAP5 SWAP4 PUSH1 0x1 ADD SWAP3 SWAP2 SWAP1 PUSH2 0x225 JUMP JUMPDEST DUP5 PUSH1 0x21 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP9 PUSH1 0x11 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x80 SWAP9 SWAP6 SWAP9 SWAP1 DUP2 DUP5 CALLDATASIZE SUB SLT PUSH2 0x36F JUMPI DUP7 MLOAD SWAP2 DUP3 ADD DUP3 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x373 JUMPI DUP8 MSTORE PUSH2 0x310 DUP5 PUSH2 0x616 JUMP JUMPDEST DUP3 MSTORE DUP10 DUP5 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x36F JUMPI DUP11 DUP4 ADD MSTORE DUP7 DUP5 ADD CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x36F JUMPI DUP8 DUP4 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 DUP6 ADD CALLDATALOAD SWAP3 DUP4 ISZERO ISZERO DUP5 SUB PUSH2 0x36F JUMPI PUSH1 0x80 SWAP4 DUP13 SWAP4 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP2 SWAP8 SWAP5 SWAP8 PUSH2 0xC4 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP12 PUSH1 0x41 DUP12 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x36F JUMPI PUSH2 0x3B4 PUSH2 0x3AF CALLDATASIZE PUSH2 0x637 JUMP JUMPDEST PUSH2 0x74E JUMP JUMPDEST STOP JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x36F JUMPI PUSH2 0x3C6 CALLDATASIZE PUSH2 0x637 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP4 MLOAD SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP2 ADD SWAP1 DUP2 GT PUSH2 0x561 JUMPI DUP3 LT ISZERO PUSH2 0x506 JUMPI PUSH0 JUMPDEST PUSH2 0x40C DUP4 DUP8 MLOAD PUSH2 0x6D3 JUMP JUMPDEST DUP6 DUP2 ADD SWAP1 DUP2 GT PUSH2 0x4DA JUMPI DUP2 LT ISZERO PUSH2 0x4CF JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH2 0x43D DUP4 DUP10 PUSH2 0x70D JUMP JUMPDEST MLOAD AND PUSH1 0x1 DUP4 ADD SWAP1 DUP2 DUP5 GT PUSH2 0x4A3 JUMPI SWAP1 DUP3 SWAP2 PUSH1 0x1 SWAP5 SWAP4 PUSH2 0x45C DUP4 DUP13 PUSH2 0x70D JUMP JUMPDEST MLOAD AND LT PUSH2 0x46C JUMPI JUMPDEST POP POP ADD PUSH2 0x401 JUMP JUMPDEST PUSH2 0x490 DUP3 PUSH2 0x47A DUP4 DUP13 PUSH2 0x70D JUMP JUMPDEST MLOAD AND SWAP3 PUSH2 0x487 DUP6 DUP13 PUSH2 0x70D JUMP JUMPDEST MLOAD AND SWAP2 DUP11 PUSH2 0x70D JUMP JUMPDEST MSTORE PUSH2 0x49B DUP3 DUP10 PUSH2 0x70D JUMP JUMPDEST MSTORE PUSH0 DUP1 PUSH2 0x464 JUMP JUMPDEST PUSH1 0x11 DUP8 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP3 POP PUSH1 0x1 ADD PUSH2 0x3C9 JUMP JUMPDEST PUSH1 0x11 DUP6 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP5 SWAP1 DUP1 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x20 DUP1 DUP6 ADD SWAP2 DUP2 DUP7 MSTORE DUP5 MLOAD DUP1 SWAP4 MSTORE DUP6 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x534 JUMPI POP POP POP POP SUB SWAP1 RETURN JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE DUP7 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x525 JUMP JUMPDEST PUSH1 0x11 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x40 MLOAD SWAP4 ADD AND DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x5D1 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x5D1 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x36F JUMPI JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC DUP4 ADD SLT PUSH2 0x36F JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x36F JUMPI DUP1 PUSH1 0x23 DUP5 ADD SLT ISZERO PUSH2 0x36F JUMPI DUP3 PUSH1 0x4 ADD CALLDATALOAD PUSH2 0x691 PUSH2 0x9F DUP3 PUSH2 0x5FE JUMP JUMPDEST SWAP4 PUSH1 0x24 PUSH1 0x20 DUP7 DUP5 DUP2 MSTORE ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x36F JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x6BC JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 DUP1 SWAP2 PUSH2 0x6C8 DUP5 PUSH2 0x616 JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x6AE JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x6E0 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x721 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x2 DUP2 LT PUSH2 0x7E8 JUMPI ISZERO PUSH2 0x721 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x1 DUP1 SWAP4 PUSH1 0x1 SWAP2 JUMPDEST PUSH2 0x78D JUMPI JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x7E3 JUMPI DUP4 SWAP3 DUP4 PUSH2 0x7A3 DUP5 DUP5 PUSH2 0x70D JUMP JUMPDEST MLOAD AND SWAP5 DUP6 SWAP2 AND GT PUSH2 0x7BB JUMPI DUP5 DUP1 SWAP5 SWAP3 ADD SWAP2 SWAP3 SWAP4 PUSH2 0x781 JUMP JUMPDEST PUSH32 0x6E8F194700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x786 JUMP JUMPDEST POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDB 0xD8 DUP3 DUP2 0xEA 0x25 0x2E CALLER DUP14 DUP12 0x2A 0xD5 SAR PUSH23 0x1148C738C6B36F19880627291D371B3BC04464736F6C63 NUMBER STOP ADDMOD SHL STOP CALLER ","sourceMap":"339:842:85:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;761:13;;;;339:842;756:388;804:3;339:842;;;;;;;;;;;;;776:26;;;;;339:842;875:3;847:22;339:842;;;847:22;:::i;:::-;339:842;;;;;;;;843:30;;;;;339:842;902:14;;;;;:::i;:::-;;339:842;;801:1;339:842;;;;;;;;925:18;;;;801:1;925:18;;;;:::i;:::-;;339:842;;-1:-1:-1;898:222:85;;875:3;;339:842;828:13;;898:222;1066:18;;;;:::i;:::-;;1086:14;1026:75;1086:14;;;;:::i;:::-;;1026:75;;;:::i;:::-;;;;;;:::i;:::-;;898:222;;;339:842;;;;;;;;;;843:30;-1:-1:-1;843:30:85;-1:-1:-1;801:1:85;339:842;;;;761:13;;339:842;;;;;;;;;;776:26;339:842;;;;;;;;;;;;;;;;;;;;;776:26;;;339:842;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;801:1;339:842;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;624:6;339:842;;;:::i;:::-;624:6;:::i;:::-;339:842;;;;;;;;;;:::i;:::-;3153:13:43;339:842:85;3191:3:43;339:842:85;;;;;;;;;;;;;3168:21:43;;;;;339:842:85;3257:3:43;3234:17;339:842:85;;;3234:17:43;:::i;:::-;339:842:85;;;;;;;;3230:25:43;;;;;339:842:85;3284:9:43;;;;;:::i;:::-;339:842:85;;3188:1:43;339:842:85;;;;;;;;3296:13:43;;;3188:1;3296:13;;;;;;:::i;:::-;339:842:85;;-1:-1:-1;3280:180:43;;3257:3;;;339:842:85;3215:13:43;;3280:180;3386:55;3416:13;;;;;:::i;:::-;339:842:85;;3431:9:43;;;;;:::i;:::-;339:842:85;;3386:55:43;;;:::i;:::-;339:842:85;3386:55:43;;;;:::i;:::-;339:842:85;3280:180:43;;;;339:842:85;;;;;;;;;;3230:25:43;;;;3188:1;339:842:85;3153:13:43;;339:842:85;;;;;;;;;;3168:21:43;;;339:842:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;339:842:85;;;;;;;;3188:1:43;339:842:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;3620:407:43;339:842:85;;3716:1:43;3700:17;;3696:54;;339:842:85;;;;;;;;;;3815:1:43;3803:13;;3815:1;3798:223;3815:1;;;3798:223;3620:407;;;;;:::o;3837:3::-;339:842:85;;3818:17:43;;;;;3873:9;;;;;;;:::i;:::-;339:842:85;;;;;;3901:18:43;3897:81;;3992:18;;;3837:3;339:842:85;3803:13:43;;;;;3897:81;3946:17;-1:-1:-1;3946:17:43;;-1:-1:-1;3946:17:43;3818;;;3696:54;3733:7;;:::o"},"methodIdentifiers":{"ensureSortedTokens(address[])":"a3aef0b8","sortTokenConfig((address,uint8,address,bool)[])":"bb4ad7d5","sortTokens(address[])":"136deb1c"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"TokensNotSorted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"ensureSortedTokens\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"}],\"name\":\"sortTokenConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"sortTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"TokensNotSorted()\":[{\"details\":\"Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can predict the token order without having to query the Vault. (It is also legacy v2 behavior.)\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"TokensNotSorted()\":[{\"notice\":\"The tokens supplied to an array argument were not sorted in numerical order.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/test/InputHelpersMock.sol\":\"InputHelpersMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-vault/contracts/test/InputHelpersMock.sol\":{\"keccak256\":\"0xe3cff486fec0d86b1feed821a1ae1d9bd69bd5c5a0a9a61f6eb8ce238637241b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8f7338c0826abdde07c9de03ab44f2509582697b2a68062c66f20294bb9038ec\",\"dweb:/ipfs/QmNPZwFRhWqxbAGkZvp16r4qMLvignbgiDcZdUZtXC1MSm\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/test/PoolFactoryMock.sol":{"PoolFactoryMock":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"uint32","name":"pauseWindowDuration","type":"uint32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Disabled","type":"error"},{"inputs":[],"name":"IndexOutOfBounds","type":"error"},{"inputs":[],"name":"PoolPauseWindowDurationOverflow","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"anonymous":false,"inputs":[],"name":"FactoryDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreated","type":"event"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"name":"createPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"constructorArgs","type":"bytes"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"getDeploymentAddress","outputs":[{"internalType":"address","name":"deployAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNewPoolPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOriginalPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowDuration","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getPools","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"getPoolsInRange","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolFromFactory","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFee","type":"uint256"},{"internalType":"uint32","name":"pauseWindowDuration","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"}],"name":"registerGeneralTestPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint32","name":"timestamp","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPoolAtTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"address","name":"poolHooksContract","type":"address"}],"name":"registerPoolWithHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPoolWithSwapFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"}],"name":"registerTestPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"name":"registerTestPool","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6101203461012e57601f61493038819003918201601f19168301916001600160401b0383118484101761013257808492604094855283398101031261012e578051906001600160a01b038216820361012e576020015163ffffffff9081811680820361012e57306080528360a05242019081421161011a5782821161010b5760c0521660e0526101009081526040516147e991826101478339608051826118b5015260a0518281816105f6015281816107aa0152610f95015260c05182610a7f015260e051828181610324015261191d01525181818161019c01528181610466015281816106dc0152818161090e01528181610b2301528181610d180152818161116f015261129d0152f35b6368755a1160e01b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe604060808152600480361015610013575f80fd5b5f915f358060e01c9081630e0677ab1461119857848263206db1ef1461110c575081632f2770db14610f135750806344f6fec714610e1c57806353a72f7e14610e075780635ea81a3214610c8e5780636634b75314610c46578063673a2a1f1461076857838163675d605014610ac7575080636c57f5a914610aa357806378da80cb14610a625780637a0b2e8d1461081f578063851c1bb3146107ce5780638d928af81461077d5780638eec5d701461076857838163a7a4b7111461066957508063aaabadc5146105a2578063d396a66614610376578063db035ebc1461034c578063e9d56e19146103075763ed05beaf1461010d575f80fd5b3461030357610100600319360112610303576101276113da565b9060243567ffffffffffffffff81116102ff5761014790369085016114fd565b61014f611420565b9360807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c3601126102fb5761018261170b565b9473ffffffffffffffffffffffffffffffffffffffff91827f000000000000000000000000000000000000000000000000000000000000000016966101c561191b565b94883b156102f75761021963ffffffff9161026794878a519b7feeec802f000000000000000000000000000000000000000000000000000000008d5216908b01526101a060248b01526101a48a019061165c565b9560443560448a01521660648801525f608488015260a48701906040908173ffffffffffffffffffffffffffffffffffffffff91828151168552826020820151166020860152015116910152565b166101048401526084358015158091036102f35761012484015260a4358015158091036102f35761014484015260c4358015158091036102f35761016484015260e435908115158092036102f35785948486818094829661018483015203925af19081156102ea57506102d75750f35b6102e090611443565b6102e75780f35b80fd5b513d84823e3d90fd5b5f80fd5b8980fd5b8580fd5b8480fd5b8280fd5b8382346103485781600319360112610348576020905163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5080fd5b83823461034857816003193601126103485760209063ffffffff61036e61191b565b915191168152f35b503461030357610140600319360112610303576103916113da565b9060243567ffffffffffffffff81116102ff576103b190369085016114fd565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc3601126102f35781516103e6816114a0565b73ffffffffffffffffffffffffffffffffffffffff9160443583811681036102f357825260643583811681036102f357602083015260843583811681036102f3578483015260a435918383168093036102f35760807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c36011261059e57837f0000000000000000000000000000000000000000000000000000000000000000169661048f61191b565b94883b156102f75761052f9363ffffffff926104e39289519a7feeec802f000000000000000000000000000000000000000000000000000000008c5216908a01526101a060248a01526101a489019061165c565b945f60448901521660648701525f608487015260a48601906040908173ffffffffffffffffffffffffffffffffffffffff91828151168552826020820151166020860152015116910152565b61010490818501526101249060c4358015158091036102f3578286015260e4358015158091036102f357610144860152358015158091036102f35761016485015235908115158092036102f35785948486818094829661018483015203925af19081156102ea57506102d75750f35b8780fd5b503461030357826003193601126103035773ffffffffffffffffffffffffffffffffffffffff906020815180947faaabadc500000000000000000000000000000000000000000000000000000000825281857f0000000000000000000000000000000000000000000000000000000000000000165afa92831561065f5760209493610630575b505191168152f35b610651919350843d8611610658575b61064981836114bc565b8101906118ef565b915f610628565b503d61063f565b81513d86823e3d90fd5b80848434610764576080600319360112610764576106856113da565b60243567ffffffffffffffff81116102ff576106a490369085016114fd565b6106ac6113fd565b6106b4611420565b926106bd61170b565b9373ffffffffffffffffffffffffffffffffffffffff809116868601527f0000000000000000000000000000000000000000000000000000000000000000169161070561191b565b9661070e611976565b95843b156102f75789968793610751928a519b8c998a9889977feeec802f0000000000000000000000000000000000000000000000000000000089528801611729565b03925af19081156102ea57506102d75750f35b5050fd5b83346102e75780600319360112156117e95780fd5b8382346103485781600319360112610348576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5090346103035760206003193601126103035735917fffffffff00000000000000000000000000000000000000000000000000000000831683036102e7575061081860209261188a565b9051908152f35b50829034610348576101206003193601126103485761083c6113da565b9060243567ffffffffffffffff8111610a5e5761085c90369086016114fd565b916064359463ffffffff958681168091036102f357608435928315158094036102f35760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c3601126102f3578451976108b5896114a0565b73ffffffffffffffffffffffffffffffffffffffff9160a43583811681036102f3578a5260c43583811681036102f35760208b015260e43583811681036102f357878b0152610104998a35908482168092036102f357847f000000000000000000000000000000000000000000000000000000000000000016958442160191848311610a32578b9c610945611976565b92883b15610a2e578d9a8b978d519e8f9c8d9b8c9a7feeec802f000000000000000000000000000000000000000000000000000000008c5216908a0152602489016101a090526101a489016109999161165c565b9660443560448a0152166064880152608487015260a486016109e9916040908173ffffffffffffffffffffffffffffffffffffffff91828151168552826020820151166020860152015116910152565b840152805115156101248401526020810151151561014484015288810151151561016484015260600151151561018483015203925af19081156102ea57506102d75750f35b8d80fd5b60248c60118a7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b8380fd5b8382346103485781600319360112610348576020905163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b83823461034857816003193601126103485760209060ff6001541690519015158152f35b80848434610764578060031936011261076457610ae26113da565b60243567ffffffffffffffff81116102ff57610b0190369085016114fd565b92610b0a61170b565b9173ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691610b4c61191b565b90610b55611976565b91843b156102f75760608a9793610bff899563ffffffff610bb38d519e8f9c8d9b8c9a7feeec802f000000000000000000000000000000000000000000000000000000008c5216908a01526101a060248a01526101a489019061165c565b955f60448901521660648701525f608487015260a48601906040908173ffffffffffffffffffffffffffffffffffffffff91828151168552826020820151166020860152015116910152565b5f61010485015280511515610124850152602081015115156101448501528981015115156101648501520151151561018483015203925af19081156102ea57506102d75750f35b8382346103485760206003193601126103485760ff8160209373ffffffffffffffffffffffffffffffffffffffff610c7c6113da565b16815280855220541690519015158152f35b50903461030357816003193601126103035767ffffffffffffffff9080358281116102ff57610cc0903690830161163e565b916024358181116102fb57610cd8903690840161163e565b73ffffffffffffffffffffffffffffffffffffffff93855193612de7908186019486861090861117610ddb575091610d4b859492610d58946119cd8739877f0000000000000000000000000000000000000000000000000000000000000000168452606060208501526060840190611847565b9187818403910152611847565b039084f08015610dcf57917f83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc916020949316918291610d95611998565b82855284865280852060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055519380a28152f35b505051903d90823e3d90fd5b8860416024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b83823461034857600319360112156117e95780fd5b509034610303578160031936011261030357803567ffffffffffffffff8111610a5e5736602382011215610a5e57600b610e7673ffffffffffffffffffffffffffffffffffffffff938360246055953693013591016115da565b94612de795610ece60208098885194610e91838301876114bc565b818652828601916119cd8339828a51958693828501985180918a5e840190828201848152815193849201905e0190838201520380845201826114bc565b5190208451868101903382524687820152602435606082015260608152610ef481611484565b51902085519186830152868201523081520160ff815320915191168152f35b905034610a5e5783600319360112610a5e577fffffffff00000000000000000000000000000000000000000000000000000000610f50911661188a565b73ffffffffffffffffffffffffffffffffffffffff9082517faaabadc500000000000000000000000000000000000000000000000000000000815260209182828781877f0000000000000000000000000000000000000000000000000000000000000000165afa918215611102579083929188926110e0575b50606490865195869384927f9be2a8840000000000000000000000000000000000000000000000000000000084528a840152336024840152306044840152165afa9283156110d7575084926110a0575b50501561107a5750611029611998565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416176001557f432acbfd662dbb5d8b378384a67159b47ca9d0f1b79f97cf64cf8585fa362d508180a180f35b907f23dada53000000000000000000000000000000000000000000000000000000008152fd5b90809250813d83116110d0575b6110b781836114bc565b8101031261030357518015158103610303575f80611019565b503d6110ad565b513d86823e3d90fd5b60649192506110fb90843d86116106585761064981836114bc565b9190610fc9565b85513d89823e3d90fd5b80858534610764576060600319360112610764576111286113da565b60243567ffffffffffffffff81116102ff5761114790369085016114fd565b61114f6113fd565b61115761170b565b9273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169161070561191b565b5050346102f3576101606003193601126102f3576111b46113da565b9160243567ffffffffffffffff81116102f3576111d490369083016114fd565b906044359063ffffffff82168092036102f35760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c3601126102f35783519061121d826114a0565b73ffffffffffffffffffffffffffffffffffffffff9160643583811681036102f357815260843583811681036102f357602082015260a43583811681036102f3578682015260c435928084168094036102f35760807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c3601126102f357807f00000000000000000000000000000000000000000000000000000000000000001695863b156102f3576113569361130b9289519a7feeec802f000000000000000000000000000000000000000000000000000000008c5216908a01526101a060248a01526101a489019061165c565b935f604489015260648801525f608488015260a48701906040908173ffffffffffffffffffffffffffffffffffffffff91828151168552826020820151166020860152015116910152565b61010490818601526101249060e4358015158091036102f3578287015235908115158092036102f3576101449182870152358015158091036102f35761016486015235918215158093036102f357845f818094829661018483015203925af19081156113d157506113c5575080f35b6113cf9150611443565b005b513d5f823e3d90fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036102f357565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036102f357565b6064359073ffffffffffffffffffffffffffffffffffffffff821682036102f357565b67ffffffffffffffff811161145757604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6080810190811067ffffffffffffffff82111761145757604052565b6060810190811067ffffffffffffffff82111761145757604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761145757604052565b81601f820112156102f357803590602067ffffffffffffffff83116114575760409260405194611532838360051b01876114bc565b818652828087019260071b850101938185116102f3578301915b84831061155c5750505050505090565b6080838303126102f35785519061157282611484565b73ffffffffffffffffffffffffffffffffffffffff843581811681036102f35783528585013560028110156102f357868401528785013590811681036102f35787830152606090818501359283151584036102f357608093879382015281520192019161154c565b92919267ffffffffffffffff8211611457576040519161162260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846114bc565b8294818452818301116102f3578281602093845f960137010152565b9080601f830112156102f357816020611659933591016115da565b90565b9081518082526020808093019301915f5b82811061167b575050505090565b9091929384519073ffffffffffffffffffffffffffffffffffffffff90818351168152848301519060028210156116de5760019386936080938584015260409081830151169083015260608091015115159082015201950191019291909261166d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60405190611718826114a0565b5f6040838281528260208201520152565b946117b56101809563ffffffff61176a6060979b9a966101a073ffffffffffffffffffffffffffffffffffffffff8098168c528060208d01528b019061165c565b9a5f60408b015216868901525f608089015260a08801906040908173ffffffffffffffffffffffffffffffffffffffff91828151168552826020820151166020860152015116910152565b1661010085015280511515610120850152602081015115156101408501526040810151151561016085015201511515910152565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7420696d706c656d656e74656400000000000000000000000000000000006044820152fd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526118e9816114a0565b51902090565b908160209103126102f3575173ffffffffffffffffffffffffffffffffffffffff811681036102f35790565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff811642101561194d5790565b505f90565b6040519061195f82611484565b5f6060838281528260208201528260408201520152565b61197e611952565b50611987611952565b600160208201526001604082015290565b60ff600154166119a457565b7f75884cda000000000000000000000000000000000000000000000000000000005f5260045ffdfe61020060408181523461048a57612de7803803809161001e828661048e565b843982019060608383031261048a578251906001600160a01b038216820361048a5760208481015190946001600160401b039182811161048a57856100649183016104b1565b948382015183811161048a5761007a92016104b1565b93825195838701878110848211176103a1578452600180885281880193603160f81b85526100a784610506565b976101209889526100b78a610689565b956101409687528551858701209a8b60e052519020996101009a808c524660a052885190868201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f84528a83015260608201524660808201523060a082015260a0815260c08101818110858211176103a15789525190206080523060c052610160948886528051918383116103a1576003928354928684811c94168015610480575b8885101461046c578190601f9485811161041e575b5088908583116001146103c0575f926103b5575b50505f1982861b1c191690861b1783555b80519384116103a15760049586548681811c91168015610397575b8282101461038457838111610341575b50809285116001146102dc57509383949184925f956102d1575b50501b925f19911b1c19161790555b610180913383526101a0938585526101e0958652670de0b6b3a7640000600555519561262797886107c08939608051886121c7015260a05188612293015260c05188612198015260e051886122160152518761223c015251866110560152518561108001525184818161031101528181610554015281816107e201528181610d9301528181610f84015281816114b40152818161157d015281816117430152818161190c0152818161199c015261212d01525183610ff00152518250506101c051825050518181816106930152818161072a0152818161092a01528181610c6701526111920152f35b015193505f806101d9565b92919084601f198116885f52855f20955f905b89838310610327575050501061030e575b50505050811b0190556101e8565b01519060f8845f19921b161c191690555f808080610300565b8587015189559097019694850194889350908101906102ef565b875f52815f208480880160051c82019284891061037b575b0160051c019087905b8281106103705750506101bf565b5f8155018790610362565b92508192610359565b602288634e487b7160e01b5f525260245ffd5b90607f16906101af565b634e487b7160e01b5f52604160045260245ffd5b015190505f80610183565b90889350601f19831691875f528a5f20925f5b8c82821061040857505084116103f1575b505050811b018355610194565b01515f1983881b60f8161c191690555f80806103e4565b8385015186558c979095019493840193016103d3565b909150855f52885f208580850160051c8201928b8610610463575b918a91869594930160051c01915b82811061045557505061016f565b5f81558594508a9101610447565b92508192610439565b634e487b7160e01b5f52602260045260245ffd5b93607f169361015a565b5f80fd5b601f909101601f19168101906001600160401b038211908210176103a157604052565b81601f8201121561048a578051906001600160401b0382116103a157604051926104e5601f8401601f19166020018561048e565b8284526020838301011161048a57815f9260208093018386015e8301015290565b80516020908181101561057c5750601f82511161053e578082519201519080831061053057501790565b825f19910360031b1b161790565b60448260405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b906001600160401b0382116103a1575f54926001938481811c9116801561067f575b8382101461046c57601f811161064c575b5081601f84116001146105ea57509282939183925f946105df575b50501b915f199060031b1c1916175f5560ff90565b015192505f806105ca565b919083601f1981165f8052845f20945f905b88838310610632575050501061061a575b505050811b015f5560ff90565b01515f1960f88460031b161c191690555f808061060d565b8587015188559096019594850194879350908101906105fc565b5f805284601f845f20920160051c820191601f860160051c015b8281106106745750506105af565b5f8155018590610666565b90607f169061059e565b8051602090818110156106b35750601f82511161053e578082519201519080831061053057501790565b9192916001600160401b0381116103a15760019182548381811c911680156107b5575b8282101461046c57601f8111610782575b5080601f83116001146107225750819293945f92610717575b50505f19600383901b1c191690821b17905560ff90565b015190505f80610700565b90601f19831695845f52825f20925f905b88821061076b5750508385969710610753575b505050811b01905560ff90565b01515f1960f88460031b161c191690555f8080610746565b808785968294968601518155019501930190610733565b835f5283601f835f20920160051c820191601f850160051c015b8281106107aa5750506106e7565b5f815501849061079c565b90607f16906106d656fe6080604090808252600480361015610015575f80fd5b5f9160e05f35811c91826301ffc9a714611bd25750816306fdde0314611ae2578163095ea7b314611a6457816316a0b3e0146119d557816318160ddd1461194257816323b872dd1461189a57816323de665114611868578163273c1adf1461183d57816330adf81f14611803578163313ce567146117e8578163360c340f146116ea5781633644e515146116ce5781634cfe8d1a146116b65781635687f2b814611657578163627cdcb91461162e578163641579a614611616578163654cf15d146115f4578163679aefce1461151a57816370a082311461144657816372c981861461137c5781637ecebe001461133857816381fa807c1461113557816384b0196e1461103e578163851c1bb314610fa85781638d928af814610f5857816395d89b4114610e52578163984de9e814610e04578163a9059cbb14610cfb578163aa6ca80814610c0e578163ab68e28c14610b66578163abb1dc44146108cf578163b0e2e403146107b7578163b156aa0a146106d0578163b677fa56146106cb578163ce20ece7146106cb578163d335b0cf14610638578163d505accf1461038e57508063dd62ed3e146102955763e4c43663146101d0575f80fd5b3461028d5760a060031936011261028d576101e9611c7c565b5067ffffffffffffffff6024358181116102915761020a9036908401611d4b565b9260643582811161028d576102229036908501611d4b565b5060843591821161028a5750926102786102456102869361026396369101611e69565b916102508551612004565b8151968796608088526080880190611ded565b91604435602088015286830390870152611ded565b908382036060850152611c39565b0390f35b80fd5b5080fd5b8380fd5b50913461028d578060031936011261028d5760206102b1611c7c565b60646102bb611c9f565b9573ffffffffffffffffffffffffffffffffffffffff8080988751998a9687957f927da10500000000000000000000000000000000000000000000000000000000875230908701521660248501521660448301527f0000000000000000000000000000000000000000000000000000000000000000165afa918215610383579161034a575b6020925051908152f35b90506020823d60201161037b575b8161036560209383611cf2565b81010312610377576020915190610340565b5f80fd5b3d9150610358565b9051903d90823e3d90fd5b91939050346106345781600319360112610634576103aa611c7c565b916103b3611c9f565b90604435936064359160843560ff8116810361063057834211610605576104018373ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2080549060018201905590565b91865160208101917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9835273ffffffffffffffffffffffffffffffffffffffff9687871695868b850152888a1660608501528b608085015260a084015260c083015260c08252810181811067ffffffffffffffff8211176105f257926104de926104d59288958b52519020610494612181565b908a51917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015260c43591604260a43592206124ac565b90929192612546565b168181036105c5575050858495969761055060209651988996879586947fe1f21c67000000000000000000000000000000000000000000000000000000008652850160409194939294606082019573ffffffffffffffffffffffffffffffffffffffff80921683521660208201520152565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19081156105bc5750610586575080f35b6020813d6020116105b4575b8161059f60209383611cf2565b8101031261028d576105b090611f4d565b5080f35b3d9150610592565b513d84823e3d90fd5b7f4b800e460000000000000000000000000000000000000000000000000000000088528852602452604486fd5b60418c634e487b7160e01b5f525260245ffd5b602488858b7f6279130200000000000000000000000000000000000000000000000000000000835252fd5b8780fd5b8280fd5b5050913461028d578160031936011261028d578051927fb45090f9000000000000000000000000000000000000000000000000000000008452309084015260208360248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610383579161034a576020925051908152f35b611efb565b5050913461028d578160031936011261028d578051927f535cfd8a0000000000000000000000000000000000000000000000000000000084523090840152818360248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa91821561038357809261076f575b81516020808252819061028690820186611ded565b9091503d8082853e6107818185611cf2565b83019260208185031261028d5780519167ffffffffffffffff831161028a5750926107b0916102869401611fa3565b905f61075a565b505082346103775760206003193601126103775773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691815192813560208501526020845261081a84611cc2565b803b15610377576108895f9491859285519687809481937fc80882470000000000000000000000000000000000000000000000000000000083527f546573744576656e740000000000000000000000000000000000000000000000898401528960248401526044830190611c39565b03925af180156108c55761089b578380f35b9091925067ffffffffffffffff83116108b2575052005b604190634e487b7160e01b5f525260245ffd5b82513d5f823e3d90fd5b828534610377575f6003193601126103775780517f67e0e076000000000000000000000000000000000000000000000000000000008152308382015273ffffffffffffffffffffffffffffffffffffffff916024905f8383817f000000000000000000000000000000000000000000000000000000000000000088165afa938415610b5c575f955f945f945f97610a08575b5050509061098095949392918151968796608088526080880190611e20565b6020878203818901528080875193848152019601925f905b8382106109c457898803868b015289806102868b6109b68c8c611ded565b908382036060850152611ded565b91849899506060869798600193959783975180516109e181611edd565b83528685820151168584015201511515898201520198019201899897969594929391610998565b94509450945094503d805f853e610a1f8185611cf2565b8301926080818503126103775780519367ffffffffffffffff948581116103775781610a4c918401612085565b936020808401518781116103775784019083601f8301121561037757815192610a7484611d33565b99610a8188519b8c611cf2565b848b52828b019183606080970286010194878611610377579b9c9b8401925b858410610ae95750505050505050828201518581116103775781610ac5918401611fa3565b94606083015190811161037757610adc9201611fa3565b9194929193868080610961565b86849d9e9d890312610377578951908782018d811183821017610b4a578b528451906002821015610377578f91835286860151918216820361037757828792838b950152610b388d8801611f4d565b8d8201528152019301929c9b9c610aa0565b83604186634e487b7160e01b5f52525ffd5b50513d5f823e3d90fd5b8285346103775760a060031936011261037757610b81611c7c565b5067ffffffffffffffff60443581811161037757610ba29036908501611d4b565b9160643582811161037757610bba9036908601611d4b565b5060843591821161037757610278610bdb610c019561028694369101611e69565b91610be68551612004565b81519687966024358852608060208901526080880190611ded565b9186830390870152611ded565b828534610377575f600319360112610377578051917fca4f280300000000000000000000000000000000000000000000000000000000835230908301525f8260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610cf2575f91610cae575b610286925051918291602083526020830190611e20565b90503d805f843e610cbf8184611cf2565b8201916020818403126103775780519267ffffffffffffffff84116103775761028693610cec9201612085565b90610c97565b513d5f823e3d90fd5b8285346103775780600319360112610377576020610d7992610d1b611c7c565b83517fbeabacc80000000000000000000000000000000000000000000000000000000081523392810192835273ffffffffffffffffffffffffffffffffffffffff909116602083015260243560408301529384918291606090910190565b03815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610b5c57610dca575b6020905160018152f35b6020823d602011610dfc575b81610de360209383611cf2565b8101031261037757610df6602092611f4d565b50610dc0565b3d9150610dd6565b84833461037757816003193601126103775780359067ffffffffffffffff821161037757610e3491369101611d4b565b906002602435101561037757610e4b602092612053565b9051908152f35b848334610377575f60031936011261037757815191825f8354610e7481611f15565b90818452602095600191876001821691825f14610f13575050600114610eb7575b5050506102869291610ea8910385611cf2565b51928284938452830190611c39565b5f90815286935091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b828410610efb5750505082010181610ea8610286610e95565b8054848a018601528895508794909301928101610ee2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168782015293151560051b86019093019350849250610ea891506102869050610e95565b8434610377575f600319360112610377576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b8483346103775760206003193601126103775780357fffffffff00000000000000000000000000000000000000000000000000000000811680910361037757825160208101917f000000000000000000000000000000000000000000000000000000000000000083528482015260248152606081019281841067ffffffffffffffff8511176108b2575082602094525190208152f35b92505034610377575f6003193601126103775761107a7f00000000000000000000000000000000000000000000000000000000000000006122b9565b926110a47f00000000000000000000000000000000000000000000000000000000000000006123ee565b815192602084019084821067ffffffffffffffff8311176108b257509161111591610286949382525f845261110882519788977f0f0000000000000000000000000000000000000000000000000000000000000089528060208a0152880190611c39565b9186830390870152611c39565b904660608501523060808501525f60a085015283820360c0850152611ded565b92505034610377575f6003193601126103775782517ff29486a100000000000000000000000000000000000000000000000000000000815230828201526101a092838260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa93841561132e575f946111d9575b858560608282015191015182519182526020820152f35b909180939450813d8311611327575b6111f28183611cf2565b8101039281841261037757855194610140948587019167ffffffffffffffff918884108385111761131457608013610377576101c08801918211838310176108b25750875261124082611f4d565b815261124e60208301611f4d565b906101609182880152611262888401611f4d565b93610180948589015261127760608501611f4d565b9088015286526080820151602087015260a08201518787015260c082015160608701528382015164ffffffffff8116810361037757608087015261010090818301519063ffffffff8216820361037757611307956112fd9260a08a01526112f2610120986112e68a8801611f4d565b60c08c01528601611f4d565b908901528301611f4d565b9086015201611f4d565b908201525f8080806111c2565b604182634e487b7160e01b5f525260245ffd5b503d6111e8565b85513d5f823e3d90fd5b84346103775760206003193601126103775760209073ffffffffffffffffffffffffffffffffffffffff61136a611c7c565b165f5260028252805f20549051908152f35b84833461037757600319926020843601126103775781359367ffffffffffffffff851161037757843603011261037757828101356002811015610377576113c281611edd565b6113ec5750670de0b6b3a76400006113e36020936024600554910135612103565b04905b51908152f35b916024013560055490670de0b6b3a764000090818102918183041490151715611433578115611420576020935004906113e6565b601284634e487b7160e01b5f525260245ffd5b601184634e487b7160e01b5f525260245ffd5b84833461037757602091826003193601126103775782611464611c7c565b604473ffffffffffffffffffffffffffffffffffffffff9485855196879485937ff7888aec00000000000000000000000000000000000000000000000000000000855230908501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa918215610b5c575f926114eb575b5051908152f35b9091508281813d8311611513575b6115038183611cf2565b81010312610377575190836114e4565b503d6114f9565b828534610377575f60031936011261037757600654806115ea57508051917f4f037ee7000000000000000000000000000000000000000000000000000000008352309083015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610b5c575f906115b7575b602092509051908152f35b506020823d6020116115e2575b816115d160209383611cf2565b8101031261037757602091516115ac565b3d91506115c4565b60209250906113e6565b8434610377575f6003193601126103775760209051670de0b6b3a76400008152f35b82346103775760206003193601126103775735600555005b34610377575f60031936011261037757335f908152600260205260409020805460018101909155005b84346103775760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92561168936611dab565b939194611694612116565b5193845273ffffffffffffffffffffffffffffffffffffffff908116941692a3005b82346103775760206003193601126103775735600655005b8434610377575f60031936011261037757602090610e4b612181565b828534610377575f600319360112610377578051917f7e361bde00000000000000000000000000000000000000000000000000000000835230908301525f8260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610cf2575f9161178a575b610286925051918291602083526020830190611ded565b90503d805f843e61179b8184611cf2565b82019080838303126103775782519267ffffffffffffffff9384811161037757836117c7918301611fa3565b92602082015194851161037757610286946117e29201611fa3565b50611773565b8434610377575f600319360112610377576020905160128152f35b8434610377575f60031936011261037757602090517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b8434610377575f6003193601126103775760209051701d6329f1c35ca4bfabb9f56100000000008152f35b84346103775760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61168936611dab565b8285346103775760205f60846118af36611dab565b86517f15dacbea000000000000000000000000000000000000000000000000000000008152339881019890985273ffffffffffffffffffffffffffffffffffffffff928316602489015290821660448801526064870152859283917f0000000000000000000000000000000000000000000000000000000000000000165af18015610b5c57610dca576020905160018152f35b828534610377575f600319360112610377578051917fe4dc2aa4000000000000000000000000000000000000000000000000000000008352309083015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610cf2575f9161034a576020925051908152f35b82853461037757606060031936011261037757813567ffffffffffffffff811161037757611a069036908401611d4b565b90611a3d611a20611a1684612053565b9360243590611f5a565b51670de0b6b3a7640000611a3660443586612103565b0490611f82565b918203918211611a51576020925051908152f35b601183634e487b7160e01b5f525260245ffd5b8285346103775780600319360112610377576020610d7992611a84611c7c565b83517fe1f21c670000000000000000000000000000000000000000000000000000000081523392810192835273ffffffffffffffffffffffffffffffffffffffff909116602083015260243560408301529384918291606090910190565b8434610377575f6003193601126103775780516003549091825f611b0584611f15565b808352602094600190866001821691825f14611b92575050600114611b37575b50506102869291610ea8910385611cf2565b9085925060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f925b828410611b7a5750505082010181610ea8611b25565b8054848a018601528895508794909301928101611b64565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168682015292151560051b85019092019250839150610ea89050611b25565b83346103775760206003193601126103775735907fffffffff000000000000000000000000000000000000000000000000000000008216809203610377577f01ffc9a700000000000000000000000000000000000000000000000000000000602092148152f35b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361037757565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361037757565b6040810190811067ffffffffffffffff821117611cde57604052565b634e487b7160e01b5f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117611cde57604052565b67ffffffffffffffff8111611cde5760051b60200190565b9080601f83011215610377576020908235611d6581611d33565b93611d736040519586611cf2565b81855260208086019260051b82010192831161037757602001905b828210611d9c575050505090565b81358152908301908301611d8e565b60031960609101126103775773ffffffffffffffffffffffffffffffffffffffff90600435828116810361037757916024359081168103610377579060443590565b9081518082526020808093019301915f5b828110611e0c575050505090565b835185529381019392810192600101611dfe565b9081518082526020808093019301915f5b828110611e3f575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101611e31565b81601f820112156103775780359067ffffffffffffffff8211611cde5760405192611ebc60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160185611cf2565b8284526020838301011161037757815f926020809301838601378301015290565b60021115611ee757565b634e487b7160e01b5f52602160045260245ffd5b34610377575f6003193601126103775760206040515f8152f35b90600182811c92168015611f43575b6020831014611f2f57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611f24565b5190811515820361037757565b8051821015611f6e5760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b91908201809211611f8f57565b634e487b7160e01b5f52601160045260245ffd5b9080601f8301121561037757815190602091611fbe81611d33565b93611fcc6040519586611cf2565b81855260208086019260051b82010192831161037757602001905b828210611ff5575050505090565b81518152908301908301611fe7565b9061200e82611d33565b61201b6040519182611cf2565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06120498294611d33565b0190602036910137565b5f90815b815183101561207f576120776001916120708585611f5a565b5190611f82565b920191612057565b91505090565b9080601f83011215610377578151906020916120a081611d33565b936120ae6040519586611cf2565b81855260208086019260051b82010192831161037757602001905b8282106120d7575050505090565b815173ffffffffffffffffffffffffffffffffffffffff811681036103775781529083019083016120c9565b81810292918115918404141715611f8f57565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361215557565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016301480612290575b156121e9577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff821117611cde5760405251902090565b507f000000000000000000000000000000000000000000000000000000000000000046146121c0565b60ff811461230d5760ff811690601f82116122e557604051916122db83611cc2565b8252602082015290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040515f815f549161231f83611f15565b808352926020906001908181169081156123ab575060011461234d575b505061234a92500382611cf2565b90565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b828410612393575061234a9450505081016020015f8061233c565b85548785018301529485019486945092810192612378565b90506020935061234a9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f8061233c565b60ff81146124105760ff811690601f82116122e557604051916122db83611cc2565b506040515f8160019160015461242581611f15565b80845293602091600181169081156123ab575060011461244d57505061234a92500382611cf2565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b828410612494575061234a9450505081016020015f8061233c565b85548785018301529485019486945092810192612479565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161253b579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15612530575f5173ffffffffffffffffffffffffffffffffffffffff81161561252657905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b6004811015611ee75780612558575050565b60018103612588577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b600281036125bc57507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6003146125c65750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffdfea264697066735822122082700ffdbaf10ea7f58c363d8be9a2c4c004347fc566abc9496fcfeb9b56b86d64736f6c634300081b0033a2646970667358221220952580ad32db6c485e840c53347ae69ee697f8a373d5ef4f44d2ce17150f5d3a64736f6c634300081b0033","opcodes":"PUSH2 0x120 CALLVALUE PUSH2 0x12E JUMPI PUSH1 0x1F PUSH2 0x4930 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x132 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x12E JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x12E JUMPI PUSH1 0x20 ADD MLOAD PUSH4 0xFFFFFFFF SWAP1 DUP2 DUP2 AND DUP1 DUP3 SUB PUSH2 0x12E JUMPI ADDRESS PUSH1 0x80 MSTORE DUP4 PUSH1 0xA0 MSTORE TIMESTAMP ADD SWAP1 DUP2 TIMESTAMP GT PUSH2 0x11A JUMPI DUP3 DUP3 GT PUSH2 0x10B JUMPI PUSH1 0xC0 MSTORE AND PUSH1 0xE0 MSTORE PUSH2 0x100 SWAP1 DUP2 MSTORE PUSH1 0x40 MLOAD PUSH2 0x47E9 SWAP2 DUP3 PUSH2 0x147 DUP4 CODECOPY PUSH1 0x80 MLOAD DUP3 PUSH2 0x18B5 ADD MSTORE PUSH1 0xA0 MLOAD DUP3 DUP2 DUP2 PUSH2 0x5F6 ADD MSTORE DUP2 DUP2 PUSH2 0x7AA ADD MSTORE PUSH2 0xF95 ADD MSTORE PUSH1 0xC0 MLOAD DUP3 PUSH2 0xA7F ADD MSTORE PUSH1 0xE0 MLOAD DUP3 DUP2 DUP2 PUSH2 0x324 ADD MSTORE PUSH2 0x191D ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0x19C ADD MSTORE DUP2 DUP2 PUSH2 0x466 ADD MSTORE DUP2 DUP2 PUSH2 0x6DC ADD MSTORE DUP2 DUP2 PUSH2 0x90E ADD MSTORE DUP2 DUP2 PUSH2 0xB23 ADD MSTORE DUP2 DUP2 PUSH2 0xD18 ADD MSTORE DUP2 DUP2 PUSH2 0x116F ADD MSTORE PUSH2 0x129D ADD MSTORE RETURN JUMPDEST PUSH4 0x68755A11 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP2 PUSH0 CALLDATALOAD DUP1 PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0xE0677AB EQ PUSH2 0x1198 JUMPI DUP5 DUP3 PUSH4 0x206DB1EF EQ PUSH2 0x110C JUMPI POP DUP2 PUSH4 0x2F2770DB EQ PUSH2 0xF13 JUMPI POP DUP1 PUSH4 0x44F6FEC7 EQ PUSH2 0xE1C JUMPI DUP1 PUSH4 0x53A72F7E EQ PUSH2 0xE07 JUMPI DUP1 PUSH4 0x5EA81A32 EQ PUSH2 0xC8E JUMPI DUP1 PUSH4 0x6634B753 EQ PUSH2 0xC46 JUMPI DUP1 PUSH4 0x673A2A1F EQ PUSH2 0x768 JUMPI DUP4 DUP2 PUSH4 0x675D6050 EQ PUSH2 0xAC7 JUMPI POP DUP1 PUSH4 0x6C57F5A9 EQ PUSH2 0xAA3 JUMPI DUP1 PUSH4 0x78DA80CB EQ PUSH2 0xA62 JUMPI DUP1 PUSH4 0x7A0B2E8D EQ PUSH2 0x81F JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x7CE JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x77D JUMPI DUP1 PUSH4 0x8EEC5D70 EQ PUSH2 0x768 JUMPI DUP4 DUP2 PUSH4 0xA7A4B711 EQ PUSH2 0x669 JUMPI POP DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x5A2 JUMPI DUP1 PUSH4 0xD396A666 EQ PUSH2 0x376 JUMPI DUP1 PUSH4 0xDB035EBC EQ PUSH2 0x34C JUMPI DUP1 PUSH4 0xE9D56E19 EQ PUSH2 0x307 JUMPI PUSH4 0xED05BEAF EQ PUSH2 0x10D JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x303 JUMPI PUSH2 0x100 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x303 JUMPI PUSH2 0x127 PUSH2 0x13DA JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2FF JUMPI PUSH2 0x147 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x14FD JUMP JUMPDEST PUSH2 0x14F PUSH2 0x1420 JUMP JUMPDEST SWAP4 PUSH1 0x80 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C CALLDATASIZE ADD SLT PUSH2 0x2FB JUMPI PUSH2 0x182 PUSH2 0x170B JUMP JUMPDEST SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 PUSH32 0x0 AND SWAP7 PUSH2 0x1C5 PUSH2 0x191B JUMP JUMPDEST SWAP5 DUP9 EXTCODESIZE ISZERO PUSH2 0x2F7 JUMPI PUSH2 0x219 PUSH4 0xFFFFFFFF SWAP2 PUSH2 0x267 SWAP5 DUP8 DUP11 MLOAD SWAP12 PUSH32 0xEEEC802F00000000000000000000000000000000000000000000000000000000 DUP14 MSTORE AND SWAP1 DUP12 ADD MSTORE PUSH2 0x1A0 PUSH1 0x24 DUP12 ADD MSTORE PUSH2 0x1A4 DUP11 ADD SWAP1 PUSH2 0x165C JUMP JUMPDEST SWAP6 PUSH1 0x44 CALLDATALOAD PUSH1 0x44 DUP11 ADD MSTORE AND PUSH1 0x64 DUP9 ADD MSTORE PUSH0 PUSH1 0x84 DUP9 ADD MSTORE PUSH1 0xA4 DUP8 ADD SWAP1 PUSH1 0x40 SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST AND PUSH2 0x104 DUP5 ADD MSTORE PUSH1 0x84 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x2F3 JUMPI PUSH2 0x124 DUP5 ADD MSTORE PUSH1 0xA4 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x2F3 JUMPI PUSH2 0x144 DUP5 ADD MSTORE PUSH1 0xC4 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x2F3 JUMPI PUSH2 0x164 DUP5 ADD MSTORE PUSH1 0xE4 CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP1 SWAP3 SUB PUSH2 0x2F3 JUMPI DUP6 SWAP5 DUP5 DUP7 DUP2 DUP1 SWAP5 DUP3 SWAP7 PUSH2 0x184 DUP4 ADD MSTORE SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2EA JUMPI POP PUSH2 0x2D7 JUMPI POP RETURN JUMPDEST PUSH2 0x2E0 SWAP1 PUSH2 0x1443 JUMP JUMPDEST PUSH2 0x2E7 JUMPI DUP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP10 DUP1 REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP5 DUP1 REVERT JUMPDEST DUP3 DUP1 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x348 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x348 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP DUP1 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x348 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x348 JUMPI PUSH1 0x20 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x36E PUSH2 0x191B JUMP JUMPDEST SWAP2 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x303 JUMPI PUSH2 0x140 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x303 JUMPI PUSH2 0x391 PUSH2 0x13DA JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2FF JUMPI PUSH2 0x3B1 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x14FD JUMP JUMPDEST PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC CALLDATASIZE ADD SLT PUSH2 0x2F3 JUMPI DUP2 MLOAD PUSH2 0x3E6 DUP2 PUSH2 0x14A0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x44 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI DUP3 MSTORE PUSH1 0x64 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x84 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI DUP5 DUP4 ADD MSTORE PUSH1 0xA4 CALLDATALOAD SWAP2 DUP4 DUP4 AND DUP1 SWAP4 SUB PUSH2 0x2F3 JUMPI PUSH1 0x80 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C CALLDATASIZE ADD SLT PUSH2 0x59E JUMPI DUP4 PUSH32 0x0 AND SWAP7 PUSH2 0x48F PUSH2 0x191B JUMP JUMPDEST SWAP5 DUP9 EXTCODESIZE ISZERO PUSH2 0x2F7 JUMPI PUSH2 0x52F SWAP4 PUSH4 0xFFFFFFFF SWAP3 PUSH2 0x4E3 SWAP3 DUP10 MLOAD SWAP11 PUSH32 0xEEEC802F00000000000000000000000000000000000000000000000000000000 DUP13 MSTORE AND SWAP1 DUP11 ADD MSTORE PUSH2 0x1A0 PUSH1 0x24 DUP11 ADD MSTORE PUSH2 0x1A4 DUP10 ADD SWAP1 PUSH2 0x165C JUMP JUMPDEST SWAP5 PUSH0 PUSH1 0x44 DUP10 ADD MSTORE AND PUSH1 0x64 DUP8 ADD MSTORE PUSH0 PUSH1 0x84 DUP8 ADD MSTORE PUSH1 0xA4 DUP7 ADD SWAP1 PUSH1 0x40 SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH2 0x104 SWAP1 DUP2 DUP6 ADD MSTORE PUSH2 0x124 SWAP1 PUSH1 0xC4 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x2F3 JUMPI DUP3 DUP7 ADD MSTORE PUSH1 0xE4 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x2F3 JUMPI PUSH2 0x144 DUP7 ADD MSTORE CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x2F3 JUMPI PUSH2 0x164 DUP6 ADD MSTORE CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP1 SWAP3 SUB PUSH2 0x2F3 JUMPI DUP6 SWAP5 DUP5 DUP7 DUP2 DUP1 SWAP5 DUP3 SWAP7 PUSH2 0x184 DUP4 ADD MSTORE SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2EA JUMPI POP PUSH2 0x2D7 JUMPI POP RETURN JUMPDEST DUP8 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x303 JUMPI DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x303 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x20 DUP2 MLOAD DUP1 SWAP5 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x65F JUMPI PUSH1 0x20 SWAP5 SWAP4 PUSH2 0x630 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x651 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x658 JUMPI JUMPDEST PUSH2 0x649 DUP2 DUP4 PUSH2 0x14BC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x18EF JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x628 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x63F JUMP JUMPDEST DUP2 MLOAD RETURNDATASIZE DUP7 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP1 DUP5 DUP5 CALLVALUE PUSH2 0x764 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x764 JUMPI PUSH2 0x685 PUSH2 0x13DA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2FF JUMPI PUSH2 0x6A4 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x14FD JUMP JUMPDEST PUSH2 0x6AC PUSH2 0x13FD JUMP JUMPDEST PUSH2 0x6B4 PUSH2 0x1420 JUMP JUMPDEST SWAP3 PUSH2 0x6BD PUSH2 0x170B JUMP JUMPDEST SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP7 DUP7 ADD MSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x705 PUSH2 0x191B JUMP JUMPDEST SWAP7 PUSH2 0x70E PUSH2 0x1976 JUMP JUMPDEST SWAP6 DUP5 EXTCODESIZE ISZERO PUSH2 0x2F7 JUMPI DUP10 SWAP7 DUP8 SWAP4 PUSH2 0x751 SWAP3 DUP11 MLOAD SWAP12 DUP13 SWAP10 DUP11 SWAP9 DUP10 SWAP8 PUSH32 0xEEEC802F00000000000000000000000000000000000000000000000000000000 DUP10 MSTORE DUP9 ADD PUSH2 0x1729 JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2EA JUMPI POP PUSH2 0x2D7 JUMPI POP RETURN JUMPDEST POP POP REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x2E7 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT ISZERO PUSH2 0x17E9 JUMPI DUP1 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x348 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x348 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x303 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x303 JUMPI CALLDATALOAD SWAP2 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP4 AND DUP4 SUB PUSH2 0x2E7 JUMPI POP PUSH2 0x818 PUSH1 0x20 SWAP3 PUSH2 0x188A JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP DUP3 SWAP1 CALLVALUE PUSH2 0x348 JUMPI PUSH2 0x120 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x348 JUMPI PUSH2 0x83C PUSH2 0x13DA JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA5E JUMPI PUSH2 0x85C SWAP1 CALLDATASIZE SWAP1 DUP7 ADD PUSH2 0x14FD JUMP JUMPDEST SWAP2 PUSH1 0x64 CALLDATALOAD SWAP5 PUSH4 0xFFFFFFFF SWAP6 DUP7 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x2F3 JUMPI PUSH1 0x84 CALLDATALOAD SWAP3 DUP4 ISZERO ISZERO DUP1 SWAP5 SUB PUSH2 0x2F3 JUMPI PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C CALLDATASIZE ADD SLT PUSH2 0x2F3 JUMPI DUP5 MLOAD SWAP8 PUSH2 0x8B5 DUP10 PUSH2 0x14A0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH1 0xA4 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI DUP11 MSTORE PUSH1 0xC4 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI PUSH1 0x20 DUP12 ADD MSTORE PUSH1 0xE4 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI DUP8 DUP12 ADD MSTORE PUSH2 0x104 SWAP10 DUP11 CALLDATALOAD SWAP1 DUP5 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x2F3 JUMPI DUP5 PUSH32 0x0 AND SWAP6 DUP5 TIMESTAMP AND ADD SWAP2 DUP5 DUP4 GT PUSH2 0xA32 JUMPI DUP12 SWAP13 PUSH2 0x945 PUSH2 0x1976 JUMP JUMPDEST SWAP3 DUP9 EXTCODESIZE ISZERO PUSH2 0xA2E JUMPI DUP14 SWAP11 DUP12 SWAP8 DUP14 MLOAD SWAP15 DUP16 SWAP13 DUP14 SWAP12 DUP13 SWAP11 PUSH32 0xEEEC802F00000000000000000000000000000000000000000000000000000000 DUP13 MSTORE AND SWAP1 DUP11 ADD MSTORE PUSH1 0x24 DUP10 ADD PUSH2 0x1A0 SWAP1 MSTORE PUSH2 0x1A4 DUP10 ADD PUSH2 0x999 SWAP2 PUSH2 0x165C JUMP JUMPDEST SWAP7 PUSH1 0x44 CALLDATALOAD PUSH1 0x44 DUP11 ADD MSTORE AND PUSH1 0x64 DUP9 ADD MSTORE PUSH1 0x84 DUP8 ADD MSTORE PUSH1 0xA4 DUP7 ADD PUSH2 0x9E9 SWAP2 PUSH1 0x40 SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST DUP5 ADD MSTORE DUP1 MLOAD ISZERO ISZERO PUSH2 0x124 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x144 DUP5 ADD MSTORE DUP9 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x164 DUP5 ADD MSTORE PUSH1 0x60 ADD MLOAD ISZERO ISZERO PUSH2 0x184 DUP4 ADD MSTORE SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2EA JUMPI POP PUSH2 0x2D7 JUMPI POP RETURN JUMPDEST DUP14 DUP1 REVERT JUMPDEST PUSH1 0x24 DUP13 PUSH1 0x11 DUP11 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST DUP4 DUP1 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x348 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x348 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x348 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x348 JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST DUP1 DUP5 DUP5 CALLVALUE PUSH2 0x764 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x764 JUMPI PUSH2 0xAE2 PUSH2 0x13DA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2FF JUMPI PUSH2 0xB01 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x14FD JUMP JUMPDEST SWAP3 PUSH2 0xB0A PUSH2 0x170B JUMP JUMPDEST SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP2 PUSH2 0xB4C PUSH2 0x191B JUMP JUMPDEST SWAP1 PUSH2 0xB55 PUSH2 0x1976 JUMP JUMPDEST SWAP2 DUP5 EXTCODESIZE ISZERO PUSH2 0x2F7 JUMPI PUSH1 0x60 DUP11 SWAP8 SWAP4 PUSH2 0xBFF DUP10 SWAP6 PUSH4 0xFFFFFFFF PUSH2 0xBB3 DUP14 MLOAD SWAP15 DUP16 SWAP13 DUP14 SWAP12 DUP13 SWAP11 PUSH32 0xEEEC802F00000000000000000000000000000000000000000000000000000000 DUP13 MSTORE AND SWAP1 DUP11 ADD MSTORE PUSH2 0x1A0 PUSH1 0x24 DUP11 ADD MSTORE PUSH2 0x1A4 DUP10 ADD SWAP1 PUSH2 0x165C JUMP JUMPDEST SWAP6 PUSH0 PUSH1 0x44 DUP10 ADD MSTORE AND PUSH1 0x64 DUP8 ADD MSTORE PUSH0 PUSH1 0x84 DUP8 ADD MSTORE PUSH1 0xA4 DUP7 ADD SWAP1 PUSH1 0x40 SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH0 PUSH2 0x104 DUP6 ADD MSTORE DUP1 MLOAD ISZERO ISZERO PUSH2 0x124 DUP6 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x144 DUP6 ADD MSTORE DUP10 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x164 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH2 0x184 DUP4 ADD MSTORE SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2EA JUMPI POP PUSH2 0x2D7 JUMPI POP RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x348 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x348 JUMPI PUSH1 0xFF DUP2 PUSH1 0x20 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xC7C PUSH2 0x13DA JUMP JUMPDEST AND DUP2 MSTORE DUP1 DUP6 MSTORE KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x303 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x303 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP1 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x2FF JUMPI PUSH2 0xCC0 SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0x163E JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2FB JUMPI PUSH2 0xCD8 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x163E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP6 MLOAD SWAP4 PUSH2 0x2DE7 SWAP1 DUP2 DUP7 ADD SWAP5 DUP7 DUP7 LT SWAP1 DUP7 GT OR PUSH2 0xDDB JUMPI POP SWAP2 PUSH2 0xD4B DUP6 SWAP5 SWAP3 PUSH2 0xD58 SWAP5 PUSH2 0x19CD DUP8 CODECOPY DUP8 PUSH32 0x0 AND DUP5 MSTORE PUSH1 0x60 PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD SWAP1 PUSH2 0x1847 JUMP JUMPDEST SWAP2 DUP8 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x1847 JUMP JUMPDEST SUB SWAP1 DUP5 CREATE DUP1 ISZERO PUSH2 0xDCF JUMPI SWAP2 PUSH32 0x83A48FBCFC991335314E74D0496AAB6A1987E992DDC85DDDBCC4D6DD6EF2E9FC SWAP2 PUSH1 0x20 SWAP5 SWAP4 AND SWAP2 DUP3 SWAP2 PUSH2 0xD95 PUSH2 0x1998 JUMP JUMPDEST DUP3 DUP6 MSTORE DUP5 DUP7 MSTORE DUP1 DUP6 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE MLOAD SWAP4 DUP1 LOG2 DUP2 MSTORE RETURN JUMPDEST POP POP MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP9 PUSH1 0x41 PUSH1 0x24 SWAP3 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x348 JUMPI PUSH1 0x3 NOT CALLDATASIZE ADD SLT ISZERO PUSH2 0x17E9 JUMPI DUP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x303 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x303 JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA5E JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0xA5E JUMPI PUSH1 0xB PUSH2 0xE76 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP4 PUSH1 0x24 PUSH1 0x55 SWAP6 CALLDATASIZE SWAP4 ADD CALLDATALOAD SWAP2 ADD PUSH2 0x15DA JUMP JUMPDEST SWAP5 PUSH2 0x2DE7 SWAP6 PUSH2 0xECE PUSH1 0x20 DUP1 SWAP9 DUP9 MLOAD SWAP5 PUSH2 0xE91 DUP4 DUP4 ADD DUP8 PUSH2 0x14BC JUMP JUMPDEST DUP2 DUP7 MSTORE DUP3 DUP7 ADD SWAP2 PUSH2 0x19CD DUP4 CODECOPY DUP3 DUP11 MLOAD SWAP6 DUP7 SWAP4 DUP3 DUP6 ADD SWAP9 MLOAD DUP1 SWAP2 DUP11 MCOPY DUP5 ADD SWAP1 DUP3 DUP3 ADD DUP5 DUP2 MSTORE DUP2 MLOAD SWAP4 DUP5 SWAP3 ADD SWAP1 MCOPY ADD SWAP1 DUP4 DUP3 ADD MSTORE SUB DUP1 DUP5 MSTORE ADD DUP3 PUSH2 0x14BC JUMP JUMPDEST MLOAD SWAP1 KECCAK256 DUP5 MLOAD DUP7 DUP2 ADD SWAP1 CALLER DUP3 MSTORE CHAINID DUP8 DUP3 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x60 DUP2 MSTORE PUSH2 0xEF4 DUP2 PUSH2 0x1484 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 DUP6 MLOAD SWAP2 DUP7 DUP4 ADD MSTORE DUP7 DUP3 ADD MSTORE ADDRESS DUP2 MSTORE ADD PUSH1 0xFF DUP2 MSTORE8 KECCAK256 SWAP2 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xA5E JUMPI DUP4 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xA5E JUMPI PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0xF50 SWAP2 AND PUSH2 0x188A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP3 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 DUP3 DUP8 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x1102 JUMPI SWAP1 DUP4 SWAP3 SWAP2 DUP9 SWAP3 PUSH2 0x10E0 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 DUP7 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP11 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x10D7 JUMPI POP DUP5 SWAP3 PUSH2 0x10A0 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x107A JUMPI POP PUSH2 0x1029 PUSH2 0x1998 JUMP JUMPDEST PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND OR PUSH1 0x1 SSTORE PUSH32 0x432ACBFD662DBB5D8B378384A67159B47CA9D0F1B79F97CF64CF8585FA362D50 DUP2 DUP1 LOG1 DUP1 RETURN JUMPDEST SWAP1 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x10D0 JUMPI JUMPDEST PUSH2 0x10B7 DUP2 DUP4 PUSH2 0x14BC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x303 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x303 JUMPI PUSH0 DUP1 PUSH2 0x1019 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x10AD JUMP JUMPDEST MLOAD RETURNDATASIZE DUP7 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x10FB SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x658 JUMPI PUSH2 0x649 DUP2 DUP4 PUSH2 0x14BC JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0xFC9 JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE DUP10 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP1 DUP6 DUP6 CALLVALUE PUSH2 0x764 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x764 JUMPI PUSH2 0x1128 PUSH2 0x13DA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2FF JUMPI PUSH2 0x1147 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x14FD JUMP JUMPDEST PUSH2 0x114F PUSH2 0x13FD JUMP JUMPDEST PUSH2 0x1157 PUSH2 0x170B JUMP JUMPDEST SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH2 0x705 PUSH2 0x191B JUMP JUMPDEST POP POP CALLVALUE PUSH2 0x2F3 JUMPI PUSH2 0x160 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2F3 JUMPI PUSH2 0x11B4 PUSH2 0x13DA JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2F3 JUMPI PUSH2 0x11D4 SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0x14FD JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP1 SWAP3 SUB PUSH2 0x2F3 JUMPI PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C CALLDATASIZE ADD SLT PUSH2 0x2F3 JUMPI DUP4 MLOAD SWAP1 PUSH2 0x121D DUP3 PUSH2 0x14A0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x64 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI DUP2 MSTORE PUSH1 0x84 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xA4 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI DUP7 DUP3 ADD MSTORE PUSH1 0xC4 CALLDATALOAD SWAP3 DUP1 DUP5 AND DUP1 SWAP5 SUB PUSH2 0x2F3 JUMPI PUSH1 0x80 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C CALLDATASIZE ADD SLT PUSH2 0x2F3 JUMPI DUP1 PUSH32 0x0 AND SWAP6 DUP7 EXTCODESIZE ISZERO PUSH2 0x2F3 JUMPI PUSH2 0x1356 SWAP4 PUSH2 0x130B SWAP3 DUP10 MLOAD SWAP11 PUSH32 0xEEEC802F00000000000000000000000000000000000000000000000000000000 DUP13 MSTORE AND SWAP1 DUP11 ADD MSTORE PUSH2 0x1A0 PUSH1 0x24 DUP11 ADD MSTORE PUSH2 0x1A4 DUP10 ADD SWAP1 PUSH2 0x165C JUMP JUMPDEST SWAP4 PUSH0 PUSH1 0x44 DUP10 ADD MSTORE PUSH1 0x64 DUP9 ADD MSTORE PUSH0 PUSH1 0x84 DUP9 ADD MSTORE PUSH1 0xA4 DUP8 ADD SWAP1 PUSH1 0x40 SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH2 0x104 SWAP1 DUP2 DUP7 ADD MSTORE PUSH2 0x124 SWAP1 PUSH1 0xE4 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x2F3 JUMPI DUP3 DUP8 ADD MSTORE CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP1 SWAP3 SUB PUSH2 0x2F3 JUMPI PUSH2 0x144 SWAP2 DUP3 DUP8 ADD MSTORE CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x2F3 JUMPI PUSH2 0x164 DUP7 ADD MSTORE CALLDATALOAD SWAP2 DUP3 ISZERO ISZERO DUP1 SWAP4 SUB PUSH2 0x2F3 JUMPI DUP5 PUSH0 DUP2 DUP1 SWAP5 DUP3 SWAP7 PUSH2 0x184 DUP4 ADD MSTORE SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x13D1 JUMPI POP PUSH2 0x13C5 JUMPI POP DUP1 RETURN JUMPDEST PUSH2 0x13CF SWAP2 POP PUSH2 0x1443 JUMP JUMPDEST STOP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x2F3 JUMPI JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x2F3 JUMPI JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x2F3 JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1457 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1457 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1457 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1457 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x2F3 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x1457 JUMPI PUSH1 0x40 SWAP3 PUSH1 0x40 MLOAD SWAP5 PUSH2 0x1532 DUP4 DUP4 PUSH1 0x5 SHL ADD DUP8 PUSH2 0x14BC JUMP JUMPDEST DUP2 DUP7 MSTORE DUP3 DUP1 DUP8 ADD SWAP3 PUSH1 0x7 SHL DUP6 ADD ADD SWAP4 DUP2 DUP6 GT PUSH2 0x2F3 JUMPI DUP4 ADD SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x155C JUMPI POP POP POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP4 DUP4 SUB SLT PUSH2 0x2F3 JUMPI DUP6 MLOAD SWAP1 PUSH2 0x1572 DUP3 PUSH2 0x1484 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI DUP4 MSTORE DUP6 DUP6 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2F3 JUMPI DUP7 DUP5 ADD MSTORE DUP8 DUP6 ADD CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI DUP8 DUP4 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 DUP6 ADD CALLDATALOAD SWAP3 DUP4 ISZERO ISZERO DUP5 SUB PUSH2 0x2F3 JUMPI PUSH1 0x80 SWAP4 DUP8 SWAP4 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x154C JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1457 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1622 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD DUP5 PUSH2 0x14BC JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0x2F3 JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x2F3 JUMPI DUP2 PUSH1 0x20 PUSH2 0x1659 SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0x15DA JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x167B JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 DUP5 MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP4 MLOAD AND DUP2 MSTORE DUP5 DUP4 ADD MLOAD SWAP1 PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x16DE JUMPI PUSH1 0x1 SWAP4 DUP7 SWAP4 PUSH1 0x80 SWAP4 DUP6 DUP5 ADD MSTORE PUSH1 0x40 SWAP1 DUP2 DUP4 ADD MLOAD AND SWAP1 DUP4 ADD MSTORE PUSH1 0x60 DUP1 SWAP2 ADD MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE ADD SWAP6 ADD SWAP2 ADD SWAP3 SWAP2 SWAP1 SWAP3 PUSH2 0x166D JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1718 DUP3 PUSH2 0x14A0 JUMP JUMPDEST PUSH0 PUSH1 0x40 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP5 PUSH2 0x17B5 PUSH2 0x180 SWAP6 PUSH4 0xFFFFFFFF PUSH2 0x176A PUSH1 0x60 SWAP8 SWAP12 SWAP11 SWAP7 PUSH2 0x1A0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP9 AND DUP13 MSTORE DUP1 PUSH1 0x20 DUP14 ADD MSTORE DUP12 ADD SWAP1 PUSH2 0x165C JUMP JUMPDEST SWAP11 PUSH0 PUSH1 0x40 DUP12 ADD MSTORE AND DUP7 DUP10 ADD MSTORE PUSH0 PUSH1 0x80 DUP10 ADD MSTORE PUSH1 0xA0 DUP9 ADD SWAP1 PUSH1 0x40 SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST AND PUSH2 0x100 DUP6 ADD MSTORE DUP1 MLOAD ISZERO ISZERO PUSH2 0x120 DUP6 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x140 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x160 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F7420696D706C656D656E7465640000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x18E9 DUP2 PUSH2 0x14A0 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x2F3 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH4 0xFFFFFFFF DUP2 AND TIMESTAMP LT ISZERO PUSH2 0x194D JUMPI SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x195F DUP3 PUSH2 0x1484 JUMP JUMPDEST PUSH0 PUSH1 0x60 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST PUSH2 0x197E PUSH2 0x1952 JUMP JUMPDEST POP PUSH2 0x1987 PUSH2 0x1952 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x40 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x1 SLOAD AND PUSH2 0x19A4 JUMPI JUMP JUMPDEST PUSH32 0x75884CDA00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT INVALID PUSH2 0x200 PUSH1 0x40 DUP2 DUP2 MSTORE CALLVALUE PUSH2 0x48A JUMPI PUSH2 0x2DE7 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x1E DUP3 DUP7 PUSH2 0x48E JUMP JUMPDEST DUP5 CODECOPY DUP3 ADD SWAP1 PUSH1 0x60 DUP4 DUP4 SUB SLT PUSH2 0x48A JUMPI DUP3 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x48A JUMPI PUSH1 0x20 DUP5 DUP2 ADD MLOAD SWAP1 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP2 DUP3 DUP2 GT PUSH2 0x48A JUMPI DUP6 PUSH2 0x64 SWAP2 DUP4 ADD PUSH2 0x4B1 JUMP JUMPDEST SWAP5 DUP4 DUP3 ADD MLOAD DUP4 DUP2 GT PUSH2 0x48A JUMPI PUSH2 0x7A SWAP3 ADD PUSH2 0x4B1 JUMP JUMPDEST SWAP4 DUP3 MLOAD SWAP6 DUP4 DUP8 ADD DUP8 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x3A1 JUMPI DUP5 MSTORE PUSH1 0x1 DUP1 DUP9 MSTORE DUP2 DUP9 ADD SWAP4 PUSH1 0x31 PUSH1 0xF8 SHL DUP6 MSTORE PUSH2 0xA7 DUP5 PUSH2 0x506 JUMP JUMPDEST SWAP8 PUSH2 0x120 SWAP9 DUP10 MSTORE PUSH2 0xB7 DUP11 PUSH2 0x689 JUMP JUMPDEST SWAP6 PUSH2 0x140 SWAP7 DUP8 MSTORE DUP6 MLOAD DUP6 DUP8 ADD KECCAK256 SWAP11 DUP12 PUSH1 0xE0 MSTORE MLOAD SWAP1 KECCAK256 SWAP10 PUSH2 0x100 SWAP11 DUP1 DUP13 MSTORE CHAINID PUSH1 0xA0 MSTORE DUP9 MLOAD SWAP1 DUP7 DUP3 ADD SWAP3 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP5 MSTORE DUP11 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT DUP6 DUP3 GT OR PUSH2 0x3A1 JUMPI DUP10 MSTORE MLOAD SWAP1 KECCAK256 PUSH1 0x80 MSTORE ADDRESS PUSH1 0xC0 MSTORE PUSH2 0x160 SWAP5 DUP9 DUP7 MSTORE DUP1 MLOAD SWAP2 DUP4 DUP4 GT PUSH2 0x3A1 JUMPI PUSH1 0x3 SWAP3 DUP4 SLOAD SWAP3 DUP7 DUP5 DUP2 SHR SWAP5 AND DUP1 ISZERO PUSH2 0x480 JUMPI JUMPDEST DUP9 DUP6 LT EQ PUSH2 0x46C JUMPI DUP2 SWAP1 PUSH1 0x1F SWAP5 DUP6 DUP2 GT PUSH2 0x41E JUMPI JUMPDEST POP DUP9 SWAP1 DUP6 DUP4 GT PUSH1 0x1 EQ PUSH2 0x3C0 JUMPI PUSH0 SWAP3 PUSH2 0x3B5 JUMPI JUMPDEST POP POP PUSH0 NOT DUP3 DUP7 SHL SHR NOT AND SWAP1 DUP7 SHL OR DUP4 SSTORE JUMPDEST DUP1 MLOAD SWAP4 DUP5 GT PUSH2 0x3A1 JUMPI PUSH1 0x4 SWAP6 DUP7 SLOAD DUP7 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x397 JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x384 JUMPI DUP4 DUP2 GT PUSH2 0x341 JUMPI JUMPDEST POP DUP1 SWAP3 DUP6 GT PUSH1 0x1 EQ PUSH2 0x2DC JUMPI POP SWAP4 DUP4 SWAP5 SWAP2 DUP5 SWAP3 PUSH0 SWAP6 PUSH2 0x2D1 JUMPI JUMPDEST POP POP SHL SWAP3 PUSH0 NOT SWAP2 SHL SHR NOT AND OR SWAP1 SSTORE JUMPDEST PUSH2 0x180 SWAP2 CALLER DUP4 MSTORE PUSH2 0x1A0 SWAP4 DUP6 DUP6 MSTORE PUSH2 0x1E0 SWAP6 DUP7 MSTORE PUSH8 0xDE0B6B3A7640000 PUSH1 0x5 SSTORE MLOAD SWAP6 PUSH2 0x2627 SWAP8 DUP9 PUSH2 0x7C0 DUP10 CODECOPY PUSH1 0x80 MLOAD DUP9 PUSH2 0x21C7 ADD MSTORE PUSH1 0xA0 MLOAD DUP9 PUSH2 0x2293 ADD MSTORE PUSH1 0xC0 MLOAD DUP9 PUSH2 0x2198 ADD MSTORE PUSH1 0xE0 MLOAD DUP9 PUSH2 0x2216 ADD MSTORE MLOAD DUP8 PUSH2 0x223C ADD MSTORE MLOAD DUP7 PUSH2 0x1056 ADD MSTORE MLOAD DUP6 PUSH2 0x1080 ADD MSTORE MLOAD DUP5 DUP2 DUP2 PUSH2 0x311 ADD MSTORE DUP2 DUP2 PUSH2 0x554 ADD MSTORE DUP2 DUP2 PUSH2 0x7E2 ADD MSTORE DUP2 DUP2 PUSH2 0xD93 ADD MSTORE DUP2 DUP2 PUSH2 0xF84 ADD MSTORE DUP2 DUP2 PUSH2 0x14B4 ADD MSTORE DUP2 DUP2 PUSH2 0x157D ADD MSTORE DUP2 DUP2 PUSH2 0x1743 ADD MSTORE DUP2 DUP2 PUSH2 0x190C ADD MSTORE DUP2 DUP2 PUSH2 0x199C ADD MSTORE PUSH2 0x212D ADD MSTORE MLOAD DUP4 PUSH2 0xFF0 ADD MSTORE MLOAD DUP3 POP POP PUSH2 0x1C0 MLOAD DUP3 POP POP MLOAD DUP2 DUP2 DUP2 PUSH2 0x693 ADD MSTORE DUP2 DUP2 PUSH2 0x72A ADD MSTORE DUP2 DUP2 PUSH2 0x92A ADD MSTORE DUP2 DUP2 PUSH2 0xC67 ADD MSTORE PUSH2 0x1192 ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP4 POP PUSH0 DUP1 PUSH2 0x1D9 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 DUP5 PUSH1 0x1F NOT DUP2 AND DUP9 PUSH0 MSTORE DUP6 PUSH0 KECCAK256 SWAP6 PUSH0 SWAP1 JUMPDEST DUP10 DUP4 DUP4 LT PUSH2 0x327 JUMPI POP POP POP LT PUSH2 0x30E JUMPI JUMPDEST POP POP POP POP DUP2 SHL ADD SWAP1 SSTORE PUSH2 0x1E8 JUMP JUMPDEST ADD MLOAD SWAP1 PUSH1 0xF8 DUP5 PUSH0 NOT SWAP3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 DUP1 PUSH2 0x300 JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP10 SSTORE SWAP1 SWAP8 ADD SWAP7 SWAP5 DUP6 ADD SWAP5 DUP9 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x2EF JUMP JUMPDEST DUP8 PUSH0 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP1 DUP9 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP5 DUP10 LT PUSH2 0x37B JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP8 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x370 JUMPI POP POP PUSH2 0x1BF JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP8 SWAP1 PUSH2 0x362 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x359 JUMP JUMPDEST PUSH1 0x22 DUP9 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x1AF JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x183 JUMP JUMPDEST SWAP1 DUP9 SWAP4 POP PUSH1 0x1F NOT DUP4 AND SWAP2 DUP8 PUSH0 MSTORE DUP11 PUSH0 KECCAK256 SWAP3 PUSH0 JUMPDEST DUP13 DUP3 DUP3 LT PUSH2 0x408 JUMPI POP POP DUP5 GT PUSH2 0x3F1 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD DUP4 SSTORE PUSH2 0x194 JUMP JUMPDEST ADD MLOAD PUSH0 NOT DUP4 DUP9 SHL PUSH1 0xF8 AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x3E4 JUMP JUMPDEST DUP4 DUP6 ADD MLOAD DUP7 SSTORE DUP13 SWAP8 SWAP1 SWAP6 ADD SWAP5 SWAP4 DUP5 ADD SWAP4 ADD PUSH2 0x3D3 JUMP JUMPDEST SWAP1 SWAP2 POP DUP6 PUSH0 MSTORE DUP9 PUSH0 KECCAK256 DUP6 DUP1 DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP12 DUP7 LT PUSH2 0x463 JUMPI JUMPDEST SWAP2 DUP11 SWAP2 DUP7 SWAP6 SWAP5 SWAP4 ADD PUSH1 0x5 SHR ADD SWAP2 JUMPDEST DUP3 DUP2 LT PUSH2 0x455 JUMPI POP POP PUSH2 0x16F JUMP JUMPDEST PUSH0 DUP2 SSTORE DUP6 SWAP5 POP DUP11 SWAP2 ADD PUSH2 0x447 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x439 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP4 PUSH1 0x7F AND SWAP4 PUSH2 0x15A JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x3A1 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x48A JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x3A1 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x4E5 PUSH1 0x1F DUP5 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP6 PUSH2 0x48E JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x48A JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0x57C JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0x53E JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0x530 JUMPI POP OR SWAP1 JUMP JUMPDEST DUP3 PUSH0 NOT SWAP2 SUB PUSH1 0x3 SHL SHL AND OR SWAP1 JUMP JUMPDEST PUSH1 0x44 DUP3 PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH4 0x305A27A9 PUSH1 0xE0 SHL DUP4 MSTORE DUP2 PUSH1 0x4 DUP5 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH1 0x24 DUP7 ADD MSTORE ADD DUP5 DUP5 ADD MCOPY PUSH0 DUP3 DUP3 ADD DUP5 ADD MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP2 ADD SUB ADD SWAP1 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x3A1 JUMPI PUSH0 SLOAD SWAP3 PUSH1 0x1 SWAP4 DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x67F JUMPI JUMPDEST DUP4 DUP3 LT EQ PUSH2 0x46C JUMPI PUSH1 0x1F DUP2 GT PUSH2 0x64C JUMPI JUMPDEST POP DUP2 PUSH1 0x1F DUP5 GT PUSH1 0x1 EQ PUSH2 0x5EA JUMPI POP SWAP3 DUP3 SWAP4 SWAP2 DUP4 SWAP3 PUSH0 SWAP5 PUSH2 0x5DF JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0x5CA JUMP JUMPDEST SWAP2 SWAP1 DUP4 PUSH1 0x1F NOT DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0x632 JUMPI POP POP POP LT PUSH2 0x61A JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x60D JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x5FC JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP5 PUSH1 0x1F DUP5 PUSH0 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 PUSH1 0x1F DUP7 ADD PUSH1 0x5 SHR ADD JUMPDEST DUP3 DUP2 LT PUSH2 0x674 JUMPI POP POP PUSH2 0x5AF JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0x666 JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x59E JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0x6B3 JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0x53E JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0x530 JUMPI POP OR SWAP1 JUMP JUMPDEST SWAP2 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x3A1 JUMPI PUSH1 0x1 SWAP2 DUP3 SLOAD DUP4 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x7B5 JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x46C JUMPI PUSH1 0x1F DUP2 GT PUSH2 0x782 JUMPI JUMPDEST POP DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0x722 JUMPI POP DUP2 SWAP3 SWAP4 SWAP5 PUSH0 SWAP3 PUSH2 0x717 JUMPI JUMPDEST POP POP PUSH0 NOT PUSH1 0x3 DUP4 SWAP1 SHL SHR NOT AND SWAP1 DUP3 SHL OR SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x700 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT DUP4 AND SWAP6 DUP5 PUSH0 MSTORE DUP3 PUSH0 KECCAK256 SWAP3 PUSH0 SWAP1 JUMPDEST DUP9 DUP3 LT PUSH2 0x76B JUMPI POP POP DUP4 DUP6 SWAP7 SWAP8 LT PUSH2 0x753 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x746 JUMP JUMPDEST DUP1 DUP8 DUP6 SWAP7 DUP3 SWAP5 SWAP7 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP6 ADD SWAP4 ADD SWAP1 PUSH2 0x733 JUMP JUMPDEST DUP4 PUSH0 MSTORE DUP4 PUSH1 0x1F DUP4 PUSH0 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR ADD JUMPDEST DUP3 DUP2 LT PUSH2 0x7AA JUMPI POP POP PUSH2 0x6E7 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP5 SWAP1 PUSH2 0x79C JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x6D6 JUMP INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP2 PUSH1 0xE0 PUSH0 CALLDATALOAD DUP2 SHR SWAP2 DUP3 PUSH4 0x1FFC9A7 EQ PUSH2 0x1BD2 JUMPI POP DUP2 PUSH4 0x6FDDE03 EQ PUSH2 0x1AE2 JUMPI DUP2 PUSH4 0x95EA7B3 EQ PUSH2 0x1A64 JUMPI DUP2 PUSH4 0x16A0B3E0 EQ PUSH2 0x19D5 JUMPI DUP2 PUSH4 0x18160DDD EQ PUSH2 0x1942 JUMPI DUP2 PUSH4 0x23B872DD EQ PUSH2 0x189A JUMPI DUP2 PUSH4 0x23DE6651 EQ PUSH2 0x1868 JUMPI DUP2 PUSH4 0x273C1ADF EQ PUSH2 0x183D JUMPI DUP2 PUSH4 0x30ADF81F EQ PUSH2 0x1803 JUMPI DUP2 PUSH4 0x313CE567 EQ PUSH2 0x17E8 JUMPI DUP2 PUSH4 0x360C340F EQ PUSH2 0x16EA JUMPI DUP2 PUSH4 0x3644E515 EQ PUSH2 0x16CE JUMPI DUP2 PUSH4 0x4CFE8D1A EQ PUSH2 0x16B6 JUMPI DUP2 PUSH4 0x5687F2B8 EQ PUSH2 0x1657 JUMPI DUP2 PUSH4 0x627CDCB9 EQ PUSH2 0x162E JUMPI DUP2 PUSH4 0x641579A6 EQ PUSH2 0x1616 JUMPI DUP2 PUSH4 0x654CF15D EQ PUSH2 0x15F4 JUMPI DUP2 PUSH4 0x679AEFCE EQ PUSH2 0x151A JUMPI DUP2 PUSH4 0x70A08231 EQ PUSH2 0x1446 JUMPI DUP2 PUSH4 0x72C98186 EQ PUSH2 0x137C JUMPI DUP2 PUSH4 0x7ECEBE00 EQ PUSH2 0x1338 JUMPI DUP2 PUSH4 0x81FA807C EQ PUSH2 0x1135 JUMPI DUP2 PUSH4 0x84B0196E EQ PUSH2 0x103E JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0xFA8 JUMPI DUP2 PUSH4 0x8D928AF8 EQ PUSH2 0xF58 JUMPI DUP2 PUSH4 0x95D89B41 EQ PUSH2 0xE52 JUMPI DUP2 PUSH4 0x984DE9E8 EQ PUSH2 0xE04 JUMPI DUP2 PUSH4 0xA9059CBB EQ PUSH2 0xCFB JUMPI DUP2 PUSH4 0xAA6CA808 EQ PUSH2 0xC0E JUMPI DUP2 PUSH4 0xAB68E28C EQ PUSH2 0xB66 JUMPI DUP2 PUSH4 0xABB1DC44 EQ PUSH2 0x8CF JUMPI DUP2 PUSH4 0xB0E2E403 EQ PUSH2 0x7B7 JUMPI DUP2 PUSH4 0xB156AA0A EQ PUSH2 0x6D0 JUMPI DUP2 PUSH4 0xB677FA56 EQ PUSH2 0x6CB JUMPI DUP2 PUSH4 0xCE20ECE7 EQ PUSH2 0x6CB JUMPI DUP2 PUSH4 0xD335B0CF EQ PUSH2 0x638 JUMPI DUP2 PUSH4 0xD505ACCF EQ PUSH2 0x38E JUMPI POP DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x295 JUMPI PUSH4 0xE4C43663 EQ PUSH2 0x1D0 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x28D JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x28D JUMPI PUSH2 0x1E9 PUSH2 0x1C7C JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x291 JUMPI PUSH2 0x20A SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x1D4B JUMP JUMPDEST SWAP3 PUSH1 0x64 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x28D JUMPI PUSH2 0x222 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x1D4B JUMP JUMPDEST POP PUSH1 0x84 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x28A JUMPI POP SWAP3 PUSH2 0x278 PUSH2 0x245 PUSH2 0x286 SWAP4 PUSH2 0x263 SWAP7 CALLDATASIZE SWAP2 ADD PUSH2 0x1E69 JUMP JUMPDEST SWAP2 PUSH2 0x250 DUP6 MLOAD PUSH2 0x2004 JUMP JUMPDEST DUP2 MLOAD SWAP7 DUP8 SWAP7 PUSH1 0x80 DUP9 MSTORE PUSH1 0x80 DUP9 ADD SWAP1 PUSH2 0x1DED JUMP JUMPDEST SWAP2 PUSH1 0x44 CALLDATALOAD PUSH1 0x20 DUP9 ADD MSTORE DUP7 DUP4 SUB SWAP1 DUP8 ADD MSTORE PUSH2 0x1DED JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x1C39 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST DUP4 DUP1 REVERT JUMPDEST POP SWAP2 CALLVALUE PUSH2 0x28D JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x28D JUMPI PUSH1 0x20 PUSH2 0x2B1 PUSH2 0x1C7C JUMP JUMPDEST PUSH1 0x64 PUSH2 0x2BB PUSH2 0x1C9F JUMP JUMPDEST SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP1 SWAP9 DUP8 MLOAD SWAP10 DUP11 SWAP7 DUP8 SWAP6 PUSH32 0x927DA10500000000000000000000000000000000000000000000000000000000 DUP8 MSTORE ADDRESS SWAP1 DUP8 ADD MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE AND PUSH1 0x44 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x383 JUMPI SWAP2 PUSH2 0x34A JUMPI JUMPDEST PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x37B JUMPI JUMPDEST DUP2 PUSH2 0x365 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP2 MLOAD SWAP1 PUSH2 0x340 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x358 JUMP JUMPDEST SWAP1 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 POP CALLVALUE PUSH2 0x634 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x634 JUMPI PUSH2 0x3AA PUSH2 0x1C7C JUMP JUMPDEST SWAP2 PUSH2 0x3B3 PUSH2 0x1C9F JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP4 PUSH1 0x64 CALLDATALOAD SWAP2 PUSH1 0x84 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 SUB PUSH2 0x630 JUMPI DUP4 TIMESTAMP GT PUSH2 0x605 JUMPI PUSH2 0x401 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH1 0x1 DUP3 ADD SWAP1 SSTORE SWAP1 JUMP JUMPDEST SWAP2 DUP7 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP8 AND SWAP6 DUP7 DUP12 DUP6 ADD MSTORE DUP9 DUP11 AND PUSH1 0x60 DUP6 ADD MSTORE DUP12 PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 MSTORE DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x5F2 JUMPI SWAP3 PUSH2 0x4DE SWAP3 PUSH2 0x4D5 SWAP3 DUP9 SWAP6 DUP12 MSTORE MLOAD SWAP1 KECCAK256 PUSH2 0x494 PUSH2 0x2181 JUMP JUMPDEST SWAP1 DUP11 MLOAD SWAP2 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x2 DUP4 ADD MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0xC4 CALLDATALOAD SWAP2 PUSH1 0x42 PUSH1 0xA4 CALLDATALOAD SWAP3 KECCAK256 PUSH2 0x24AC JUMP JUMPDEST SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x2546 JUMP JUMPDEST AND DUP2 DUP2 SUB PUSH2 0x5C5 JUMPI POP POP DUP6 DUP5 SWAP6 SWAP7 SWAP8 PUSH2 0x550 PUSH1 0x20 SWAP7 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP7 MSTORE DUP6 ADD PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 SWAP5 PUSH1 0x60 DUP3 ADD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP4 MSTORE AND PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x5BC JUMPI POP PUSH2 0x586 JUMPI POP DUP1 RETURN JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x5B4 JUMPI JUMPDEST DUP2 PUSH2 0x59F PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x28D JUMPI PUSH2 0x5B0 SWAP1 PUSH2 0x1F4D JUMP JUMPDEST POP DUP1 RETURN JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x592 JUMP JUMPDEST MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0x4B800E4600000000000000000000000000000000000000000000000000000000 DUP9 MSTORE DUP9 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 DUP7 REVERT JUMPDEST PUSH1 0x41 DUP13 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x24 DUP9 DUP6 DUP12 PUSH32 0x6279130200000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST DUP8 DUP1 REVERT JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP POP SWAP2 CALLVALUE PUSH2 0x28D JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x28D JUMPI DUP1 MLOAD SWAP3 PUSH32 0xB45090F900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE ADDRESS SWAP1 DUP5 ADD MSTORE PUSH1 0x20 DUP4 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x383 JUMPI SWAP2 PUSH2 0x34A JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x1EFB JUMP JUMPDEST POP POP SWAP2 CALLVALUE PUSH2 0x28D JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x28D JUMPI DUP1 MLOAD SWAP3 PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE ADDRESS SWAP1 DUP5 ADD MSTORE DUP2 DUP4 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x383 JUMPI DUP1 SWAP3 PUSH2 0x76F JUMPI JUMPDEST DUP2 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 SWAP1 PUSH2 0x286 SWAP1 DUP3 ADD DUP7 PUSH2 0x1DED JUMP JUMPDEST SWAP1 SWAP2 POP RETURNDATASIZE DUP1 DUP3 DUP6 RETURNDATACOPY PUSH2 0x781 DUP2 DUP6 PUSH2 0x1CF2 JUMP JUMPDEST DUP4 ADD SWAP3 PUSH1 0x20 DUP2 DUP6 SUB SLT PUSH2 0x28D JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x28A JUMPI POP SWAP3 PUSH2 0x7B0 SWAP2 PUSH2 0x286 SWAP5 ADD PUSH2 0x1FA3 JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x75A JUMP JUMPDEST POP POP DUP3 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 DUP2 MLOAD SWAP3 DUP2 CALLDATALOAD PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x20 DUP5 MSTORE PUSH2 0x81A DUP5 PUSH2 0x1CC2 JUMP JUMPDEST DUP1 EXTCODESIZE ISZERO PUSH2 0x377 JUMPI PUSH2 0x889 PUSH0 SWAP5 SWAP2 DUP6 SWAP3 DUP6 MLOAD SWAP7 DUP8 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xC808824700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH32 0x546573744576656E740000000000000000000000000000000000000000000000 DUP10 DUP5 ADD MSTORE DUP10 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x1C39 JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x8C5 JUMPI PUSH2 0x89B JUMPI DUP4 DUP1 RETURN JUMPDEST SWAP1 SWAP2 SWAP3 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x8B2 JUMPI POP MSTORE STOP JUMPDEST PUSH1 0x41 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 MLOAD PUSH32 0x67E0E07600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x24 SWAP1 PUSH0 DUP4 DUP4 DUP2 PUSH32 0x0 DUP9 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0xB5C JUMPI PUSH0 SWAP6 PUSH0 SWAP5 PUSH0 SWAP5 PUSH0 SWAP8 PUSH2 0xA08 JUMPI JUMPDEST POP POP POP SWAP1 PUSH2 0x980 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP2 MLOAD SWAP7 DUP8 SWAP7 PUSH1 0x80 DUP9 MSTORE PUSH1 0x80 DUP9 ADD SWAP1 PUSH2 0x1E20 JUMP JUMPDEST PUSH1 0x20 DUP8 DUP3 SUB DUP2 DUP10 ADD MSTORE DUP1 DUP1 DUP8 MLOAD SWAP4 DUP5 DUP2 MSTORE ADD SWAP7 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x9C4 JUMPI DUP10 DUP9 SUB DUP7 DUP12 ADD MSTORE DUP10 DUP1 PUSH2 0x286 DUP12 PUSH2 0x9B6 DUP13 DUP13 PUSH2 0x1DED JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x1DED JUMP JUMPDEST SWAP2 DUP5 SWAP9 SWAP10 POP PUSH1 0x60 DUP7 SWAP8 SWAP9 PUSH1 0x1 SWAP4 SWAP6 SWAP8 DUP4 SWAP8 MLOAD DUP1 MLOAD PUSH2 0x9E1 DUP2 PUSH2 0x1EDD JUMP JUMPDEST DUP4 MSTORE DUP7 DUP6 DUP3 ADD MLOAD AND DUP6 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO DUP10 DUP3 ADD MSTORE ADD SWAP9 ADD SWAP3 ADD DUP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 PUSH2 0x998 JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP RETURNDATASIZE DUP1 PUSH0 DUP6 RETURNDATACOPY PUSH2 0xA1F DUP2 DUP6 PUSH2 0x1CF2 JUMP JUMPDEST DUP4 ADD SWAP3 PUSH1 0x80 DUP2 DUP6 SUB SLT PUSH2 0x377 JUMPI DUP1 MLOAD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP2 GT PUSH2 0x377 JUMPI DUP2 PUSH2 0xA4C SWAP2 DUP5 ADD PUSH2 0x2085 JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP1 DUP5 ADD MLOAD DUP8 DUP2 GT PUSH2 0x377 JUMPI DUP5 ADD SWAP1 DUP4 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x377 JUMPI DUP2 MLOAD SWAP3 PUSH2 0xA74 DUP5 PUSH2 0x1D33 JUMP JUMPDEST SWAP10 PUSH2 0xA81 DUP9 MLOAD SWAP12 DUP13 PUSH2 0x1CF2 JUMP JUMPDEST DUP5 DUP12 MSTORE DUP3 DUP12 ADD SWAP2 DUP4 PUSH1 0x60 DUP1 SWAP8 MUL DUP7 ADD ADD SWAP5 DUP8 DUP7 GT PUSH2 0x377 JUMPI SWAP12 SWAP13 SWAP12 DUP5 ADD SWAP3 JUMPDEST DUP6 DUP5 LT PUSH2 0xAE9 JUMPI POP POP POP POP POP POP POP DUP3 DUP3 ADD MLOAD DUP6 DUP2 GT PUSH2 0x377 JUMPI DUP2 PUSH2 0xAC5 SWAP2 DUP5 ADD PUSH2 0x1FA3 JUMP JUMPDEST SWAP5 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x377 JUMPI PUSH2 0xADC SWAP3 ADD PUSH2 0x1FA3 JUMP JUMPDEST SWAP2 SWAP5 SWAP3 SWAP2 SWAP4 DUP7 DUP1 DUP1 PUSH2 0x961 JUMP JUMPDEST DUP7 DUP5 SWAP14 SWAP15 SWAP14 DUP10 SUB SLT PUSH2 0x377 JUMPI DUP10 MLOAD SWAP1 DUP8 DUP3 ADD DUP14 DUP2 GT DUP4 DUP3 LT OR PUSH2 0xB4A JUMPI DUP12 MSTORE DUP5 MLOAD SWAP1 PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x377 JUMPI DUP16 SWAP2 DUP4 MSTORE DUP7 DUP7 ADD MLOAD SWAP2 DUP3 AND DUP3 SUB PUSH2 0x377 JUMPI DUP3 DUP8 SWAP3 DUP4 DUP12 SWAP6 ADD MSTORE PUSH2 0xB38 DUP14 DUP9 ADD PUSH2 0x1F4D JUMP JUMPDEST DUP14 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP4 ADD SWAP3 SWAP13 SWAP12 SWAP13 PUSH2 0xAA0 JUMP JUMPDEST DUP4 PUSH1 0x41 DUP7 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH2 0xB81 PUSH2 0x1C7C JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x377 JUMPI PUSH2 0xBA2 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x1D4B JUMP JUMPDEST SWAP2 PUSH1 0x64 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x377 JUMPI PUSH2 0xBBA SWAP1 CALLDATASIZE SWAP1 DUP7 ADD PUSH2 0x1D4B JUMP JUMPDEST POP PUSH1 0x84 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x377 JUMPI PUSH2 0x278 PUSH2 0xBDB PUSH2 0xC01 SWAP6 PUSH2 0x286 SWAP5 CALLDATASIZE SWAP2 ADD PUSH2 0x1E69 JUMP JUMPDEST SWAP2 PUSH2 0xBE6 DUP6 MLOAD PUSH2 0x2004 JUMP JUMPDEST DUP2 MLOAD SWAP7 DUP8 SWAP7 PUSH1 0x24 CALLDATALOAD DUP9 MSTORE PUSH1 0x80 PUSH1 0x20 DUP10 ADD MSTORE PUSH1 0x80 DUP9 ADD SWAP1 PUSH2 0x1DED JUMP JUMPDEST SWAP2 DUP7 DUP4 SUB SWAP1 DUP8 ADD MSTORE PUSH2 0x1DED JUMP JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 MLOAD SWAP2 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH0 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xCF2 JUMPI PUSH0 SWAP2 PUSH2 0xCAE JUMPI JUMPDEST PUSH2 0x286 SWAP3 POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1E20 JUMP JUMPDEST SWAP1 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0xCBF DUP2 DUP5 PUSH2 0x1CF2 JUMP JUMPDEST DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP5 SUB SLT PUSH2 0x377 JUMPI DUP1 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0x377 JUMPI PUSH2 0x286 SWAP4 PUSH2 0xCEC SWAP3 ADD PUSH2 0x2085 JUMP JUMPDEST SWAP1 PUSH2 0xC97 JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 PUSH2 0xD79 SWAP3 PUSH2 0xD1B PUSH2 0x1C7C JUMP JUMPDEST DUP4 MLOAD PUSH32 0xBEABACC800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xB5C JUMPI PUSH2 0xDCA JUMPI JUMPDEST PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xDFC JUMPI JUMPDEST DUP2 PUSH2 0xDE3 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x377 JUMPI PUSH2 0xDF6 PUSH1 0x20 SWAP3 PUSH2 0x1F4D JUMP JUMPDEST POP PUSH2 0xDC0 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xDD6 JUMP JUMPDEST DUP5 DUP4 CALLVALUE PUSH2 0x377 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x377 JUMPI PUSH2 0xE34 SWAP2 CALLDATASIZE SWAP2 ADD PUSH2 0x1D4B JUMP JUMPDEST SWAP1 PUSH1 0x2 PUSH1 0x24 CALLDATALOAD LT ISZERO PUSH2 0x377 JUMPI PUSH2 0xE4B PUSH1 0x20 SWAP3 PUSH2 0x2053 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP5 DUP4 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP2 MLOAD SWAP2 DUP3 PUSH0 DUP4 SLOAD PUSH2 0xE74 DUP2 PUSH2 0x1F15 JUMP JUMPDEST SWAP1 DUP2 DUP5 MSTORE PUSH1 0x20 SWAP6 PUSH1 0x1 SWAP2 DUP8 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0xF13 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xEB7 JUMPI JUMPDEST POP POP POP PUSH2 0x286 SWAP3 SWAP2 PUSH2 0xEA8 SWAP2 SUB DUP6 PUSH2 0x1CF2 JUMP JUMPDEST MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1C39 JUMP JUMPDEST PUSH0 SWAP1 DUP2 MSTORE DUP7 SWAP4 POP SWAP2 SWAP1 PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B JUMPDEST DUP3 DUP5 LT PUSH2 0xEFB JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0xEA8 PUSH2 0x286 PUSH2 0xE95 JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0xEE2 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 DUP3 ADD MSTORE SWAP4 ISZERO ISZERO PUSH1 0x5 SHL DUP7 ADD SWAP1 SWAP4 ADD SWAP4 POP DUP5 SWAP3 POP PUSH2 0xEA8 SWAP2 POP PUSH2 0x286 SWAP1 POP PUSH2 0xE95 JUMP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP5 DUP4 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x377 JUMPI DUP3 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 PUSH32 0x0 DUP4 MSTORE DUP5 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD SWAP3 DUP2 DUP5 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT OR PUSH2 0x8B2 JUMPI POP DUP3 PUSH1 0x20 SWAP5 MSTORE MLOAD SWAP1 KECCAK256 DUP2 MSTORE RETURN JUMPDEST SWAP3 POP POP CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH2 0x107A PUSH32 0x0 PUSH2 0x22B9 JUMP JUMPDEST SWAP3 PUSH2 0x10A4 PUSH32 0x0 PUSH2 0x23EE JUMP JUMPDEST DUP2 MLOAD SWAP3 PUSH1 0x20 DUP5 ADD SWAP1 DUP5 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x8B2 JUMPI POP SWAP2 PUSH2 0x1115 SWAP2 PUSH2 0x286 SWAP5 SWAP4 DUP3 MSTORE PUSH0 DUP5 MSTORE PUSH2 0x1108 DUP3 MLOAD SWAP8 DUP9 SWAP8 PUSH32 0xF00000000000000000000000000000000000000000000000000000000000000 DUP10 MSTORE DUP1 PUSH1 0x20 DUP11 ADD MSTORE DUP9 ADD SWAP1 PUSH2 0x1C39 JUMP JUMPDEST SWAP2 DUP7 DUP4 SUB SWAP1 DUP8 ADD MSTORE PUSH2 0x1C39 JUMP JUMPDEST SWAP1 CHAINID PUSH1 0x60 DUP6 ADD MSTORE ADDRESS PUSH1 0x80 DUP6 ADD MSTORE PUSH0 PUSH1 0xA0 DUP6 ADD MSTORE DUP4 DUP3 SUB PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x1DED JUMP JUMPDEST SWAP3 POP POP CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP3 MLOAD PUSH32 0xF29486A100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE PUSH2 0x1A0 SWAP3 DUP4 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x132E JUMPI PUSH0 SWAP5 PUSH2 0x11D9 JUMPI JUMPDEST DUP6 DUP6 PUSH1 0x60 DUP3 DUP3 ADD MLOAD SWAP2 ADD MLOAD DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST SWAP1 SWAP2 DUP1 SWAP4 SWAP5 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1327 JUMPI JUMPDEST PUSH2 0x11F2 DUP2 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SWAP3 DUP2 DUP5 SLT PUSH2 0x377 JUMPI DUP6 MLOAD SWAP5 PUSH2 0x140 SWAP5 DUP6 DUP8 ADD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP9 DUP5 LT DUP4 DUP6 GT OR PUSH2 0x1314 JUMPI PUSH1 0x80 SGT PUSH2 0x377 JUMPI PUSH2 0x1C0 DUP9 ADD SWAP2 DUP3 GT DUP4 DUP4 LT OR PUSH2 0x8B2 JUMPI POP DUP8 MSTORE PUSH2 0x1240 DUP3 PUSH2 0x1F4D JUMP JUMPDEST DUP2 MSTORE PUSH2 0x124E PUSH1 0x20 DUP4 ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP1 PUSH2 0x160 SWAP2 DUP3 DUP9 ADD MSTORE PUSH2 0x1262 DUP9 DUP5 ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP4 PUSH2 0x180 SWAP5 DUP6 DUP10 ADD MSTORE PUSH2 0x1277 PUSH1 0x60 DUP6 ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP1 DUP9 ADD MSTORE DUP7 MSTORE PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0xA0 DUP3 ADD MLOAD DUP8 DUP8 ADD MSTORE PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x60 DUP8 ADD MSTORE DUP4 DUP3 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x377 JUMPI PUSH1 0x80 DUP8 ADD MSTORE PUSH2 0x100 SWAP1 DUP2 DUP4 ADD MLOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x377 JUMPI PUSH2 0x1307 SWAP6 PUSH2 0x12FD SWAP3 PUSH1 0xA0 DUP11 ADD MSTORE PUSH2 0x12F2 PUSH2 0x120 SWAP9 PUSH2 0x12E6 DUP11 DUP9 ADD PUSH2 0x1F4D JUMP JUMPDEST PUSH1 0xC0 DUP13 ADD MSTORE DUP7 ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP1 DUP10 ADD MSTORE DUP4 ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP1 DUP7 ADD MSTORE ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH0 DUP1 DUP1 DUP1 PUSH2 0x11C2 JUMP JUMPDEST PUSH1 0x41 DUP3 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x11E8 JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x136A PUSH2 0x1C7C JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP5 DUP4 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x3 NOT SWAP3 PUSH1 0x20 DUP5 CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP2 CALLDATALOAD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT PUSH2 0x377 JUMPI DUP5 CALLDATASIZE SUB ADD SLT PUSH2 0x377 JUMPI DUP3 DUP2 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x377 JUMPI PUSH2 0x13C2 DUP2 PUSH2 0x1EDD JUMP JUMPDEST PUSH2 0x13EC JUMPI POP PUSH8 0xDE0B6B3A7640000 PUSH2 0x13E3 PUSH1 0x20 SWAP4 PUSH1 0x24 PUSH1 0x5 SLOAD SWAP2 ADD CALLDATALOAD PUSH2 0x2103 JUMP JUMPDEST DIV SWAP1 JUMPDEST MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP2 PUSH1 0x24 ADD CALLDATALOAD PUSH1 0x5 SLOAD SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x1433 JUMPI DUP2 ISZERO PUSH2 0x1420 JUMPI PUSH1 0x20 SWAP4 POP DIV SWAP1 PUSH2 0x13E6 JUMP JUMPDEST PUSH1 0x12 DUP5 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x11 DUP5 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP5 DUP4 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP3 PUSH2 0x1464 PUSH2 0x1C7C JUMP JUMPDEST PUSH1 0x44 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP6 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP4 PUSH32 0xF7888AEC00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS SWAP1 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xB5C JUMPI PUSH0 SWAP3 PUSH2 0x14EB JUMPI JUMPDEST POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP DUP3 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1513 JUMPI JUMPDEST PUSH2 0x1503 DUP2 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x377 JUMPI MLOAD SWAP1 DUP4 PUSH2 0x14E4 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x14F9 JUMP JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x6 SLOAD DUP1 PUSH2 0x15EA JUMPI POP DUP1 MLOAD SWAP2 PUSH32 0x4F037EE700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0xB5C JUMPI PUSH0 SWAP1 PUSH2 0x15B7 JUMPI JUMPDEST PUSH1 0x20 SWAP3 POP SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E2 JUMPI JUMPDEST DUP2 PUSH2 0x15D1 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP2 MLOAD PUSH2 0x15AC JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x15C4 JUMP JUMPDEST PUSH1 0x20 SWAP3 POP SWAP1 PUSH2 0x13E6 JUMP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH8 0xDE0B6B3A7640000 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI CALLDATALOAD PUSH1 0x5 SSTORE STOP JUMPDEST CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI CALLER PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD SWAP1 SWAP2 SSTORE STOP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH2 0x1689 CALLDATASIZE PUSH2 0x1DAB JUMP JUMPDEST SWAP4 SWAP2 SWAP5 PUSH2 0x1694 PUSH2 0x2116 JUMP JUMPDEST MLOAD SWAP4 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP5 AND SWAP3 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI CALLDATALOAD PUSH1 0x6 SSTORE STOP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 PUSH2 0xE4B PUSH2 0x2181 JUMP JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 MLOAD SWAP2 PUSH32 0x7E361BDE00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH0 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xCF2 JUMPI PUSH0 SWAP2 PUSH2 0x178A JUMPI JUMPDEST PUSH2 0x286 SWAP3 POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1DED JUMP JUMPDEST SWAP1 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x179B DUP2 DUP5 PUSH2 0x1CF2 JUMP JUMPDEST DUP3 ADD SWAP1 DUP1 DUP4 DUP4 SUB SLT PUSH2 0x377 JUMPI DUP3 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP2 GT PUSH2 0x377 JUMPI DUP4 PUSH2 0x17C7 SWAP2 DUP4 ADD PUSH2 0x1FA3 JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP3 ADD MLOAD SWAP5 DUP6 GT PUSH2 0x377 JUMPI PUSH2 0x286 SWAP5 PUSH2 0x17E2 SWAP3 ADD PUSH2 0x1FA3 JUMP JUMPDEST POP PUSH2 0x1773 JUMP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE RETURN JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH17 0x1D6329F1C35CA4BFABB9F5610000000000 DUP2 MSTORE RETURN JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH2 0x1689 CALLDATASIZE PUSH2 0x1DAB JUMP JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH0 PUSH1 0x84 PUSH2 0x18AF CALLDATASIZE PUSH2 0x1DAB JUMP JUMPDEST DUP7 MLOAD PUSH32 0x15DACBEA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP9 DUP2 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x24 DUP10 ADD MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP9 ADD MSTORE PUSH1 0x64 DUP8 ADD MSTORE DUP6 SWAP3 DUP4 SWAP2 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xB5C JUMPI PUSH2 0xDCA JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 MLOAD SWAP2 PUSH32 0xE4DC2AA400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xCF2 JUMPI PUSH0 SWAP2 PUSH2 0x34A JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x377 JUMPI PUSH2 0x1A06 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x1D4B JUMP JUMPDEST SWAP1 PUSH2 0x1A3D PUSH2 0x1A20 PUSH2 0x1A16 DUP5 PUSH2 0x2053 JUMP JUMPDEST SWAP4 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1F5A JUMP JUMPDEST MLOAD PUSH8 0xDE0B6B3A7640000 PUSH2 0x1A36 PUSH1 0x44 CALLDATALOAD DUP7 PUSH2 0x2103 JUMP JUMPDEST DIV SWAP1 PUSH2 0x1F82 JUMP JUMPDEST SWAP2 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x1A51 JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x11 DUP4 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 PUSH2 0xD79 SWAP3 PUSH2 0x1A84 PUSH2 0x1C7C JUMP JUMPDEST DUP4 MLOAD PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 MLOAD PUSH1 0x3 SLOAD SWAP1 SWAP2 DUP3 PUSH0 PUSH2 0x1B05 DUP5 PUSH2 0x1F15 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 SWAP5 PUSH1 0x1 SWAP1 DUP7 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x1B92 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1B37 JUMPI JUMPDEST POP POP PUSH2 0x286 SWAP3 SWAP2 PUSH2 0xEA8 SWAP2 SUB DUP6 PUSH2 0x1CF2 JUMP JUMPDEST SWAP1 DUP6 SWAP3 POP PUSH1 0x3 PUSH0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP2 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x1B7A JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0xEA8 PUSH2 0x1B25 JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x1B64 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 DUP3 ADD MSTORE SWAP3 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD SWAP1 SWAP3 ADD SWAP3 POP DUP4 SWAP2 POP PUSH2 0xEA8 SWAP1 POP PUSH2 0x1B25 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x377 JUMPI PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP3 EQ DUP2 MSTORE RETURN JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x377 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x377 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1CDE JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1CDE JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1CDE JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x1D65 DUP2 PUSH2 0x1D33 JUMP JUMPDEST SWAP4 PUSH2 0x1D73 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x377 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1D9C JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1D8E JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x377 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x377 JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x377 JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1E0C JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1DFE JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1E3F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1E31 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x377 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1CDE JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1EBC PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND ADD DUP6 PUSH2 0x1CF2 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x377 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x1EE7 JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x1F43 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x1F2F JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x1F24 JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x377 JUMPI JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x1F6E JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x1F8F JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x377 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x1FBE DUP2 PUSH2 0x1D33 JUMP JUMPDEST SWAP4 PUSH2 0x1FCC PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x377 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1FF5 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1FE7 JUMP JUMPDEST SWAP1 PUSH2 0x200E DUP3 PUSH2 0x1D33 JUMP JUMPDEST PUSH2 0x201B PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x1CF2 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x2049 DUP3 SWAP5 PUSH2 0x1D33 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST PUSH0 SWAP1 DUP2 JUMPDEST DUP2 MLOAD DUP4 LT ISZERO PUSH2 0x207F JUMPI PUSH2 0x2077 PUSH1 0x1 SWAP2 PUSH2 0x2070 DUP6 DUP6 PUSH2 0x1F5A JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x1F82 JUMP JUMPDEST SWAP3 ADD SWAP2 PUSH2 0x2057 JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x377 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x20A0 DUP2 PUSH2 0x1D33 JUMP JUMPDEST SWAP4 PUSH2 0x20AE PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x377 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x20D7 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x377 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x20C9 JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x1F8F JUMPI JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x2155 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND ADDRESS EQ DUP1 PUSH2 0x2290 JUMPI JUMPDEST ISZERO PUSH2 0x21E9 JUMPI PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP3 MSTORE PUSH32 0x0 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1CDE JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST POP PUSH32 0x0 CHAINID EQ PUSH2 0x21C0 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x230D JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x22E5 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x22DB DUP4 PUSH2 0x1CC2 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH32 0xB3512B0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH0 SLOAD SWAP2 PUSH2 0x231F DUP4 PUSH2 0x1F15 JUMP JUMPDEST DUP1 DUP4 MSTORE SWAP3 PUSH1 0x20 SWAP1 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x23AB JUMPI POP PUSH1 0x1 EQ PUSH2 0x234D JUMPI JUMPDEST POP POP PUSH2 0x234A SWAP3 POP SUB DUP3 PUSH2 0x1CF2 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x2393 JUMPI POP PUSH2 0x234A SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x233C JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x2378 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 SWAP4 POP PUSH2 0x234A SWAP6 SWAP3 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP2 POP AND DUP3 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x233C JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x2410 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x22E5 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x22DB DUP4 PUSH2 0x1CC2 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD PUSH2 0x2425 DUP2 PUSH2 0x1F15 JUMP JUMPDEST DUP1 DUP5 MSTORE SWAP4 PUSH1 0x20 SWAP2 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x23AB JUMPI POP PUSH1 0x1 EQ PUSH2 0x244D JUMPI POP POP PUSH2 0x234A SWAP3 POP SUB DUP3 PUSH2 0x1CF2 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x2494 JUMPI POP PUSH2 0x234A SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x233C JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x2479 JUMP JUMPDEST SWAP2 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP5 GT PUSH2 0x253B JUMPI SWAP2 PUSH1 0x20 SWAP4 PUSH1 0x80 SWAP3 PUSH1 0xFF PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND DUP7 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE DUP3 DUP1 MSTORE PUSH1 0x1 GAS STATICCALL ISZERO PUSH2 0x2530 JUMPI PUSH0 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x2526 JUMPI SWAP1 PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 PUSH1 0x1 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP POP POP PUSH0 SWAP2 PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x1EE7 JUMPI DUP1 PUSH2 0x2558 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x2588 JUMPI PUSH32 0xF645EEDF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x25BC JUMPI POP PUSH32 0xFCE698F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x3 EQ PUSH2 0x25C6 JUMPI POP JUMP JUMPDEST PUSH32 0xD78BCE0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP3 PUSH17 0xFFDBAF10EA7F58C363D8BE9A2C4C00434 PUSH32 0xC566ABC9496FCFEB9B56B86D64736F6C634300081B0033A26469706673582212 KECCAK256 SWAP6 0x25 DUP1 0xAD ORIGIN 0xDB PUSH13 0x485E840C53347AE69EE697F8A3 PUSH20 0xD5EF4F44D2CE17150F5D3A64736F6C634300081B STOP CALLER ","sourceMap":"636:6650:86:-:0;;;;;;;;;;;;;-1:-1:-1;;636:6650:86;;;;-1:-1:-1;;;;;636:6650:86;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;636:6650:86;;;;;;;;;;;;;;;;;;;971:4:67;1347:46:37;;923:14:40;;;1461:15:42;636:6650:86;1461:15:42;;;636:6650:86;;;1513:35:42;;;1509:106;;1625:42;;636:6650:86;1735:53:42;;1155:14:86;;;;636:6650;;;;;;;;1347:46:37;636:6650:86;;;;;923:14:40;636:6650:86;;;;;;;;;;;;;;;1625:42:42;636:6650:86;;;;;1735:53:42;636:6650:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1509:106:42;1571:33;;;-1:-1:-1;1571:33:42;;-1:-1:-1;1571:33:42;636:6650:86;;;;-1:-1:-1;636:6650:86;;;;;-1:-1:-1;636:6650:86;;-1:-1:-1;636:6650:86;;;;;;-1:-1:-1;636:6650:86;;;;;-1:-1:-1;636:6650:86"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":5082,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_8478":{"entryPoint":5117,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_8493":{"entryPoint":5152,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_array_struct_TokenConfig_dyn":{"entryPoint":5373,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_available_length_bytes":{"entryPoint":5594,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":6383,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_string":{"entryPoint":5694,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_address_array_struct_TokenConfig_dyn_uint256_uint32_bool_struct_PoolRoleAccounts_address_struct_LiquidityManagement":{"entryPoint":5929,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_array_struct_TokenConfig_dyn":{"entryPoint":5724,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string":{"entryPoint":6215,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_PoolRoleAccounts":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"allocate_and_zero_memory_struct_struct_LiquidityManagement":{"entryPoint":6482,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_and_zero_memory_struct_struct_PoolRoleAccounts":{"entryPoint":5899,"id":null,"parameterSlots":0,"returnSlots":1},"finalize_allocation":{"entryPoint":5308,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_8476":{"entryPoint":5187,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_8507":{"entryPoint":5252,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_8508":{"entryPoint":5280,"id":null,"parameterSlots":1,"returnSlots":0},"fun_ensureEnabled":{"entryPoint":6552,"id":32574,"parameterSlots":0,"returnSlots":0},"fun_getActionId":{"entryPoint":6282,"id":5487,"parameterSlots":1,"returnSlots":1},"fun_getDefaultLiquidityManagement":{"entryPoint":6518,"id":32425,"parameterSlots":0,"returnSlots":1},"fun_getNewPoolPauseWindowEndTime":{"entryPoint":6427,"id":5891,"parameterSlots":0,"returnSlots":1},"fun_getPoolsInRange":{"entryPoint":6121,"id":32474,"parameterSlots":0,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"5427":[{"length":32,"start":6325}],"5654":[{"length":32,"start":1526},{"length":32,"start":1962},{"length":32,"start":3989}],"5820":[{"length":32,"start":2687}],"5822":[{"length":32,"start":804},{"length":32,"start":6429}],"32094":[{"length":32,"start":412},{"length":32,"start":1126},{"length":32,"start":1756},{"length":32,"start":2318},{"length":32,"start":2851},{"length":32,"start":3352},{"length":32,"start":4463},{"length":32,"start":4765}]},"linkReferences":{},"object":"604060808152600480361015610013575f80fd5b5f915f358060e01c9081630e0677ab1461119857848263206db1ef1461110c575081632f2770db14610f135750806344f6fec714610e1c57806353a72f7e14610e075780635ea81a3214610c8e5780636634b75314610c46578063673a2a1f1461076857838163675d605014610ac7575080636c57f5a914610aa357806378da80cb14610a625780637a0b2e8d1461081f578063851c1bb3146107ce5780638d928af81461077d5780638eec5d701461076857838163a7a4b7111461066957508063aaabadc5146105a2578063d396a66614610376578063db035ebc1461034c578063e9d56e19146103075763ed05beaf1461010d575f80fd5b3461030357610100600319360112610303576101276113da565b9060243567ffffffffffffffff81116102ff5761014790369085016114fd565b61014f611420565b9360807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c3601126102fb5761018261170b565b9473ffffffffffffffffffffffffffffffffffffffff91827f000000000000000000000000000000000000000000000000000000000000000016966101c561191b565b94883b156102f75761021963ffffffff9161026794878a519b7feeec802f000000000000000000000000000000000000000000000000000000008d5216908b01526101a060248b01526101a48a019061165c565b9560443560448a01521660648801525f608488015260a48701906040908173ffffffffffffffffffffffffffffffffffffffff91828151168552826020820151166020860152015116910152565b166101048401526084358015158091036102f35761012484015260a4358015158091036102f35761014484015260c4358015158091036102f35761016484015260e435908115158092036102f35785948486818094829661018483015203925af19081156102ea57506102d75750f35b6102e090611443565b6102e75780f35b80fd5b513d84823e3d90fd5b5f80fd5b8980fd5b8580fd5b8480fd5b8280fd5b8382346103485781600319360112610348576020905163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5080fd5b83823461034857816003193601126103485760209063ffffffff61036e61191b565b915191168152f35b503461030357610140600319360112610303576103916113da565b9060243567ffffffffffffffff81116102ff576103b190369085016114fd565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc3601126102f35781516103e6816114a0565b73ffffffffffffffffffffffffffffffffffffffff9160443583811681036102f357825260643583811681036102f357602083015260843583811681036102f3578483015260a435918383168093036102f35760807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c36011261059e57837f0000000000000000000000000000000000000000000000000000000000000000169661048f61191b565b94883b156102f75761052f9363ffffffff926104e39289519a7feeec802f000000000000000000000000000000000000000000000000000000008c5216908a01526101a060248a01526101a489019061165c565b945f60448901521660648701525f608487015260a48601906040908173ffffffffffffffffffffffffffffffffffffffff91828151168552826020820151166020860152015116910152565b61010490818501526101249060c4358015158091036102f3578286015260e4358015158091036102f357610144860152358015158091036102f35761016485015235908115158092036102f35785948486818094829661018483015203925af19081156102ea57506102d75750f35b8780fd5b503461030357826003193601126103035773ffffffffffffffffffffffffffffffffffffffff906020815180947faaabadc500000000000000000000000000000000000000000000000000000000825281857f0000000000000000000000000000000000000000000000000000000000000000165afa92831561065f5760209493610630575b505191168152f35b610651919350843d8611610658575b61064981836114bc565b8101906118ef565b915f610628565b503d61063f565b81513d86823e3d90fd5b80848434610764576080600319360112610764576106856113da565b60243567ffffffffffffffff81116102ff576106a490369085016114fd565b6106ac6113fd565b6106b4611420565b926106bd61170b565b9373ffffffffffffffffffffffffffffffffffffffff809116868601527f0000000000000000000000000000000000000000000000000000000000000000169161070561191b565b9661070e611976565b95843b156102f75789968793610751928a519b8c998a9889977feeec802f0000000000000000000000000000000000000000000000000000000089528801611729565b03925af19081156102ea57506102d75750f35b5050fd5b83346102e75780600319360112156117e95780fd5b8382346103485781600319360112610348576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5090346103035760206003193601126103035735917fffffffff00000000000000000000000000000000000000000000000000000000831683036102e7575061081860209261188a565b9051908152f35b50829034610348576101206003193601126103485761083c6113da565b9060243567ffffffffffffffff8111610a5e5761085c90369086016114fd565b916064359463ffffffff958681168091036102f357608435928315158094036102f35760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c3601126102f3578451976108b5896114a0565b73ffffffffffffffffffffffffffffffffffffffff9160a43583811681036102f3578a5260c43583811681036102f35760208b015260e43583811681036102f357878b0152610104998a35908482168092036102f357847f000000000000000000000000000000000000000000000000000000000000000016958442160191848311610a32578b9c610945611976565b92883b15610a2e578d9a8b978d519e8f9c8d9b8c9a7feeec802f000000000000000000000000000000000000000000000000000000008c5216908a0152602489016101a090526101a489016109999161165c565b9660443560448a0152166064880152608487015260a486016109e9916040908173ffffffffffffffffffffffffffffffffffffffff91828151168552826020820151166020860152015116910152565b840152805115156101248401526020810151151561014484015288810151151561016484015260600151151561018483015203925af19081156102ea57506102d75750f35b8d80fd5b60248c60118a7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b8380fd5b8382346103485781600319360112610348576020905163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b83823461034857816003193601126103485760209060ff6001541690519015158152f35b80848434610764578060031936011261076457610ae26113da565b60243567ffffffffffffffff81116102ff57610b0190369085016114fd565b92610b0a61170b565b9173ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691610b4c61191b565b90610b55611976565b91843b156102f75760608a9793610bff899563ffffffff610bb38d519e8f9c8d9b8c9a7feeec802f000000000000000000000000000000000000000000000000000000008c5216908a01526101a060248a01526101a489019061165c565b955f60448901521660648701525f608487015260a48601906040908173ffffffffffffffffffffffffffffffffffffffff91828151168552826020820151166020860152015116910152565b5f61010485015280511515610124850152602081015115156101448501528981015115156101648501520151151561018483015203925af19081156102ea57506102d75750f35b8382346103485760206003193601126103485760ff8160209373ffffffffffffffffffffffffffffffffffffffff610c7c6113da565b16815280855220541690519015158152f35b50903461030357816003193601126103035767ffffffffffffffff9080358281116102ff57610cc0903690830161163e565b916024358181116102fb57610cd8903690840161163e565b73ffffffffffffffffffffffffffffffffffffffff93855193612de7908186019486861090861117610ddb575091610d4b859492610d58946119cd8739877f0000000000000000000000000000000000000000000000000000000000000000168452606060208501526060840190611847565b9187818403910152611847565b039084f08015610dcf57917f83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc916020949316918291610d95611998565b82855284865280852060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055519380a28152f35b505051903d90823e3d90fd5b8860416024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b83823461034857600319360112156117e95780fd5b509034610303578160031936011261030357803567ffffffffffffffff8111610a5e5736602382011215610a5e57600b610e7673ffffffffffffffffffffffffffffffffffffffff938360246055953693013591016115da565b94612de795610ece60208098885194610e91838301876114bc565b818652828601916119cd8339828a51958693828501985180918a5e840190828201848152815193849201905e0190838201520380845201826114bc565b5190208451868101903382524687820152602435606082015260608152610ef481611484565b51902085519186830152868201523081520160ff815320915191168152f35b905034610a5e5783600319360112610a5e577fffffffff00000000000000000000000000000000000000000000000000000000610f50911661188a565b73ffffffffffffffffffffffffffffffffffffffff9082517faaabadc500000000000000000000000000000000000000000000000000000000815260209182828781877f0000000000000000000000000000000000000000000000000000000000000000165afa918215611102579083929188926110e0575b50606490865195869384927f9be2a8840000000000000000000000000000000000000000000000000000000084528a840152336024840152306044840152165afa9283156110d7575084926110a0575b50501561107a5750611029611998565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416176001557f432acbfd662dbb5d8b378384a67159b47ca9d0f1b79f97cf64cf8585fa362d508180a180f35b907f23dada53000000000000000000000000000000000000000000000000000000008152fd5b90809250813d83116110d0575b6110b781836114bc565b8101031261030357518015158103610303575f80611019565b503d6110ad565b513d86823e3d90fd5b60649192506110fb90843d86116106585761064981836114bc565b9190610fc9565b85513d89823e3d90fd5b80858534610764576060600319360112610764576111286113da565b60243567ffffffffffffffff81116102ff5761114790369085016114fd565b61114f6113fd565b61115761170b565b9273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169161070561191b565b5050346102f3576101606003193601126102f3576111b46113da565b9160243567ffffffffffffffff81116102f3576111d490369083016114fd565b906044359063ffffffff82168092036102f35760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c3601126102f35783519061121d826114a0565b73ffffffffffffffffffffffffffffffffffffffff9160643583811681036102f357815260843583811681036102f357602082015260a43583811681036102f3578682015260c435928084168094036102f35760807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c3601126102f357807f00000000000000000000000000000000000000000000000000000000000000001695863b156102f3576113569361130b9289519a7feeec802f000000000000000000000000000000000000000000000000000000008c5216908a01526101a060248a01526101a489019061165c565b935f604489015260648801525f608488015260a48701906040908173ffffffffffffffffffffffffffffffffffffffff91828151168552826020820151166020860152015116910152565b61010490818601526101249060e4358015158091036102f3578287015235908115158092036102f3576101449182870152358015158091036102f35761016486015235918215158093036102f357845f818094829661018483015203925af19081156113d157506113c5575080f35b6113cf9150611443565b005b513d5f823e3d90fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036102f357565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036102f357565b6064359073ffffffffffffffffffffffffffffffffffffffff821682036102f357565b67ffffffffffffffff811161145757604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6080810190811067ffffffffffffffff82111761145757604052565b6060810190811067ffffffffffffffff82111761145757604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761145757604052565b81601f820112156102f357803590602067ffffffffffffffff83116114575760409260405194611532838360051b01876114bc565b818652828087019260071b850101938185116102f3578301915b84831061155c5750505050505090565b6080838303126102f35785519061157282611484565b73ffffffffffffffffffffffffffffffffffffffff843581811681036102f35783528585013560028110156102f357868401528785013590811681036102f35787830152606090818501359283151584036102f357608093879382015281520192019161154c565b92919267ffffffffffffffff8211611457576040519161162260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846114bc565b8294818452818301116102f3578281602093845f960137010152565b9080601f830112156102f357816020611659933591016115da565b90565b9081518082526020808093019301915f5b82811061167b575050505090565b9091929384519073ffffffffffffffffffffffffffffffffffffffff90818351168152848301519060028210156116de5760019386936080938584015260409081830151169083015260608091015115159082015201950191019291909261166d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60405190611718826114a0565b5f6040838281528260208201520152565b946117b56101809563ffffffff61176a6060979b9a966101a073ffffffffffffffffffffffffffffffffffffffff8098168c528060208d01528b019061165c565b9a5f60408b015216868901525f608089015260a08801906040908173ffffffffffffffffffffffffffffffffffffffff91828151168552826020820151166020860152015116910152565b1661010085015280511515610120850152602081015115156101408501526040810151151561016085015201511515910152565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7420696d706c656d656e74656400000000000000000000000000000000006044820152fd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526118e9816114a0565b51902090565b908160209103126102f3575173ffffffffffffffffffffffffffffffffffffffff811681036102f35790565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff811642101561194d5790565b505f90565b6040519061195f82611484565b5f6060838281528260208201528260408201520152565b61197e611952565b50611987611952565b600160208201526001604082015290565b60ff600154166119a457565b7f75884cda000000000000000000000000000000000000000000000000000000005f5260045ffdfe61020060408181523461048a57612de7803803809161001e828661048e565b843982019060608383031261048a578251906001600160a01b038216820361048a5760208481015190946001600160401b039182811161048a57856100649183016104b1565b948382015183811161048a5761007a92016104b1565b93825195838701878110848211176103a1578452600180885281880193603160f81b85526100a784610506565b976101209889526100b78a610689565b956101409687528551858701209a8b60e052519020996101009a808c524660a052885190868201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f84528a83015260608201524660808201523060a082015260a0815260c08101818110858211176103a15789525190206080523060c052610160948886528051918383116103a1576003928354928684811c94168015610480575b8885101461046c578190601f9485811161041e575b5088908583116001146103c0575f926103b5575b50505f1982861b1c191690861b1783555b80519384116103a15760049586548681811c91168015610397575b8282101461038457838111610341575b50809285116001146102dc57509383949184925f956102d1575b50501b925f19911b1c19161790555b610180913383526101a0938585526101e0958652670de0b6b3a7640000600555519561262797886107c08939608051886121c7015260a05188612293015260c05188612198015260e051886122160152518761223c015251866110560152518561108001525184818161031101528181610554015281816107e201528181610d9301528181610f84015281816114b40152818161157d015281816117430152818161190c0152818161199c015261212d01525183610ff00152518250506101c051825050518181816106930152818161072a0152818161092a01528181610c6701526111920152f35b015193505f806101d9565b92919084601f198116885f52855f20955f905b89838310610327575050501061030e575b50505050811b0190556101e8565b01519060f8845f19921b161c191690555f808080610300565b8587015189559097019694850194889350908101906102ef565b875f52815f208480880160051c82019284891061037b575b0160051c019087905b8281106103705750506101bf565b5f8155018790610362565b92508192610359565b602288634e487b7160e01b5f525260245ffd5b90607f16906101af565b634e487b7160e01b5f52604160045260245ffd5b015190505f80610183565b90889350601f19831691875f528a5f20925f5b8c82821061040857505084116103f1575b505050811b018355610194565b01515f1983881b60f8161c191690555f80806103e4565b8385015186558c979095019493840193016103d3565b909150855f52885f208580850160051c8201928b8610610463575b918a91869594930160051c01915b82811061045557505061016f565b5f81558594508a9101610447565b92508192610439565b634e487b7160e01b5f52602260045260245ffd5b93607f169361015a565b5f80fd5b601f909101601f19168101906001600160401b038211908210176103a157604052565b81601f8201121561048a578051906001600160401b0382116103a157604051926104e5601f8401601f19166020018561048e565b8284526020838301011161048a57815f9260208093018386015e8301015290565b80516020908181101561057c5750601f82511161053e578082519201519080831061053057501790565b825f19910360031b1b161790565b60448260405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b906001600160401b0382116103a1575f54926001938481811c9116801561067f575b8382101461046c57601f811161064c575b5081601f84116001146105ea57509282939183925f946105df575b50501b915f199060031b1c1916175f5560ff90565b015192505f806105ca565b919083601f1981165f8052845f20945f905b88838310610632575050501061061a575b505050811b015f5560ff90565b01515f1960f88460031b161c191690555f808061060d565b8587015188559096019594850194879350908101906105fc565b5f805284601f845f20920160051c820191601f860160051c015b8281106106745750506105af565b5f8155018590610666565b90607f169061059e565b8051602090818110156106b35750601f82511161053e578082519201519080831061053057501790565b9192916001600160401b0381116103a15760019182548381811c911680156107b5575b8282101461046c57601f8111610782575b5080601f83116001146107225750819293945f92610717575b50505f19600383901b1c191690821b17905560ff90565b015190505f80610700565b90601f19831695845f52825f20925f905b88821061076b5750508385969710610753575b505050811b01905560ff90565b01515f1960f88460031b161c191690555f8080610746565b808785968294968601518155019501930190610733565b835f5283601f835f20920160051c820191601f850160051c015b8281106107aa5750506106e7565b5f815501849061079c565b90607f16906106d656fe6080604090808252600480361015610015575f80fd5b5f9160e05f35811c91826301ffc9a714611bd25750816306fdde0314611ae2578163095ea7b314611a6457816316a0b3e0146119d557816318160ddd1461194257816323b872dd1461189a57816323de665114611868578163273c1adf1461183d57816330adf81f14611803578163313ce567146117e8578163360c340f146116ea5781633644e515146116ce5781634cfe8d1a146116b65781635687f2b814611657578163627cdcb91461162e578163641579a614611616578163654cf15d146115f4578163679aefce1461151a57816370a082311461144657816372c981861461137c5781637ecebe001461133857816381fa807c1461113557816384b0196e1461103e578163851c1bb314610fa85781638d928af814610f5857816395d89b4114610e52578163984de9e814610e04578163a9059cbb14610cfb578163aa6ca80814610c0e578163ab68e28c14610b66578163abb1dc44146108cf578163b0e2e403146107b7578163b156aa0a146106d0578163b677fa56146106cb578163ce20ece7146106cb578163d335b0cf14610638578163d505accf1461038e57508063dd62ed3e146102955763e4c43663146101d0575f80fd5b3461028d5760a060031936011261028d576101e9611c7c565b5067ffffffffffffffff6024358181116102915761020a9036908401611d4b565b9260643582811161028d576102229036908501611d4b565b5060843591821161028a5750926102786102456102869361026396369101611e69565b916102508551612004565b8151968796608088526080880190611ded565b91604435602088015286830390870152611ded565b908382036060850152611c39565b0390f35b80fd5b5080fd5b8380fd5b50913461028d578060031936011261028d5760206102b1611c7c565b60646102bb611c9f565b9573ffffffffffffffffffffffffffffffffffffffff8080988751998a9687957f927da10500000000000000000000000000000000000000000000000000000000875230908701521660248501521660448301527f0000000000000000000000000000000000000000000000000000000000000000165afa918215610383579161034a575b6020925051908152f35b90506020823d60201161037b575b8161036560209383611cf2565b81010312610377576020915190610340565b5f80fd5b3d9150610358565b9051903d90823e3d90fd5b91939050346106345781600319360112610634576103aa611c7c565b916103b3611c9f565b90604435936064359160843560ff8116810361063057834211610605576104018373ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2080549060018201905590565b91865160208101917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9835273ffffffffffffffffffffffffffffffffffffffff9687871695868b850152888a1660608501528b608085015260a084015260c083015260c08252810181811067ffffffffffffffff8211176105f257926104de926104d59288958b52519020610494612181565b908a51917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015260c43591604260a43592206124ac565b90929192612546565b168181036105c5575050858495969761055060209651988996879586947fe1f21c67000000000000000000000000000000000000000000000000000000008652850160409194939294606082019573ffffffffffffffffffffffffffffffffffffffff80921683521660208201520152565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19081156105bc5750610586575080f35b6020813d6020116105b4575b8161059f60209383611cf2565b8101031261028d576105b090611f4d565b5080f35b3d9150610592565b513d84823e3d90fd5b7f4b800e460000000000000000000000000000000000000000000000000000000088528852602452604486fd5b60418c634e487b7160e01b5f525260245ffd5b602488858b7f6279130200000000000000000000000000000000000000000000000000000000835252fd5b8780fd5b8280fd5b5050913461028d578160031936011261028d578051927fb45090f9000000000000000000000000000000000000000000000000000000008452309084015260208360248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610383579161034a576020925051908152f35b611efb565b5050913461028d578160031936011261028d578051927f535cfd8a0000000000000000000000000000000000000000000000000000000084523090840152818360248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa91821561038357809261076f575b81516020808252819061028690820186611ded565b9091503d8082853e6107818185611cf2565b83019260208185031261028d5780519167ffffffffffffffff831161028a5750926107b0916102869401611fa3565b905f61075a565b505082346103775760206003193601126103775773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691815192813560208501526020845261081a84611cc2565b803b15610377576108895f9491859285519687809481937fc80882470000000000000000000000000000000000000000000000000000000083527f546573744576656e740000000000000000000000000000000000000000000000898401528960248401526044830190611c39565b03925af180156108c55761089b578380f35b9091925067ffffffffffffffff83116108b2575052005b604190634e487b7160e01b5f525260245ffd5b82513d5f823e3d90fd5b828534610377575f6003193601126103775780517f67e0e076000000000000000000000000000000000000000000000000000000008152308382015273ffffffffffffffffffffffffffffffffffffffff916024905f8383817f000000000000000000000000000000000000000000000000000000000000000088165afa938415610b5c575f955f945f945f97610a08575b5050509061098095949392918151968796608088526080880190611e20565b6020878203818901528080875193848152019601925f905b8382106109c457898803868b015289806102868b6109b68c8c611ded565b908382036060850152611ded565b91849899506060869798600193959783975180516109e181611edd565b83528685820151168584015201511515898201520198019201899897969594929391610998565b94509450945094503d805f853e610a1f8185611cf2565b8301926080818503126103775780519367ffffffffffffffff948581116103775781610a4c918401612085565b936020808401518781116103775784019083601f8301121561037757815192610a7484611d33565b99610a8188519b8c611cf2565b848b52828b019183606080970286010194878611610377579b9c9b8401925b858410610ae95750505050505050828201518581116103775781610ac5918401611fa3565b94606083015190811161037757610adc9201611fa3565b9194929193868080610961565b86849d9e9d890312610377578951908782018d811183821017610b4a578b528451906002821015610377578f91835286860151918216820361037757828792838b950152610b388d8801611f4d565b8d8201528152019301929c9b9c610aa0565b83604186634e487b7160e01b5f52525ffd5b50513d5f823e3d90fd5b8285346103775760a060031936011261037757610b81611c7c565b5067ffffffffffffffff60443581811161037757610ba29036908501611d4b565b9160643582811161037757610bba9036908601611d4b565b5060843591821161037757610278610bdb610c019561028694369101611e69565b91610be68551612004565b81519687966024358852608060208901526080880190611ded565b9186830390870152611ded565b828534610377575f600319360112610377578051917fca4f280300000000000000000000000000000000000000000000000000000000835230908301525f8260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610cf2575f91610cae575b610286925051918291602083526020830190611e20565b90503d805f843e610cbf8184611cf2565b8201916020818403126103775780519267ffffffffffffffff84116103775761028693610cec9201612085565b90610c97565b513d5f823e3d90fd5b8285346103775780600319360112610377576020610d7992610d1b611c7c565b83517fbeabacc80000000000000000000000000000000000000000000000000000000081523392810192835273ffffffffffffffffffffffffffffffffffffffff909116602083015260243560408301529384918291606090910190565b03815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610b5c57610dca575b6020905160018152f35b6020823d602011610dfc575b81610de360209383611cf2565b8101031261037757610df6602092611f4d565b50610dc0565b3d9150610dd6565b84833461037757816003193601126103775780359067ffffffffffffffff821161037757610e3491369101611d4b565b906002602435101561037757610e4b602092612053565b9051908152f35b848334610377575f60031936011261037757815191825f8354610e7481611f15565b90818452602095600191876001821691825f14610f13575050600114610eb7575b5050506102869291610ea8910385611cf2565b51928284938452830190611c39565b5f90815286935091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b828410610efb5750505082010181610ea8610286610e95565b8054848a018601528895508794909301928101610ee2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168782015293151560051b86019093019350849250610ea891506102869050610e95565b8434610377575f600319360112610377576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b8483346103775760206003193601126103775780357fffffffff00000000000000000000000000000000000000000000000000000000811680910361037757825160208101917f000000000000000000000000000000000000000000000000000000000000000083528482015260248152606081019281841067ffffffffffffffff8511176108b2575082602094525190208152f35b92505034610377575f6003193601126103775761107a7f00000000000000000000000000000000000000000000000000000000000000006122b9565b926110a47f00000000000000000000000000000000000000000000000000000000000000006123ee565b815192602084019084821067ffffffffffffffff8311176108b257509161111591610286949382525f845261110882519788977f0f0000000000000000000000000000000000000000000000000000000000000089528060208a0152880190611c39565b9186830390870152611c39565b904660608501523060808501525f60a085015283820360c0850152611ded565b92505034610377575f6003193601126103775782517ff29486a100000000000000000000000000000000000000000000000000000000815230828201526101a092838260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa93841561132e575f946111d9575b858560608282015191015182519182526020820152f35b909180939450813d8311611327575b6111f28183611cf2565b8101039281841261037757855194610140948587019167ffffffffffffffff918884108385111761131457608013610377576101c08801918211838310176108b25750875261124082611f4d565b815261124e60208301611f4d565b906101609182880152611262888401611f4d565b93610180948589015261127760608501611f4d565b9088015286526080820151602087015260a08201518787015260c082015160608701528382015164ffffffffff8116810361037757608087015261010090818301519063ffffffff8216820361037757611307956112fd9260a08a01526112f2610120986112e68a8801611f4d565b60c08c01528601611f4d565b908901528301611f4d565b9086015201611f4d565b908201525f8080806111c2565b604182634e487b7160e01b5f525260245ffd5b503d6111e8565b85513d5f823e3d90fd5b84346103775760206003193601126103775760209073ffffffffffffffffffffffffffffffffffffffff61136a611c7c565b165f5260028252805f20549051908152f35b84833461037757600319926020843601126103775781359367ffffffffffffffff851161037757843603011261037757828101356002811015610377576113c281611edd565b6113ec5750670de0b6b3a76400006113e36020936024600554910135612103565b04905b51908152f35b916024013560055490670de0b6b3a764000090818102918183041490151715611433578115611420576020935004906113e6565b601284634e487b7160e01b5f525260245ffd5b601184634e487b7160e01b5f525260245ffd5b84833461037757602091826003193601126103775782611464611c7c565b604473ffffffffffffffffffffffffffffffffffffffff9485855196879485937ff7888aec00000000000000000000000000000000000000000000000000000000855230908501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa918215610b5c575f926114eb575b5051908152f35b9091508281813d8311611513575b6115038183611cf2565b81010312610377575190836114e4565b503d6114f9565b828534610377575f60031936011261037757600654806115ea57508051917f4f037ee7000000000000000000000000000000000000000000000000000000008352309083015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610b5c575f906115b7575b602092509051908152f35b506020823d6020116115e2575b816115d160209383611cf2565b8101031261037757602091516115ac565b3d91506115c4565b60209250906113e6565b8434610377575f6003193601126103775760209051670de0b6b3a76400008152f35b82346103775760206003193601126103775735600555005b34610377575f60031936011261037757335f908152600260205260409020805460018101909155005b84346103775760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92561168936611dab565b939194611694612116565b5193845273ffffffffffffffffffffffffffffffffffffffff908116941692a3005b82346103775760206003193601126103775735600655005b8434610377575f60031936011261037757602090610e4b612181565b828534610377575f600319360112610377578051917f7e361bde00000000000000000000000000000000000000000000000000000000835230908301525f8260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610cf2575f9161178a575b610286925051918291602083526020830190611ded565b90503d805f843e61179b8184611cf2565b82019080838303126103775782519267ffffffffffffffff9384811161037757836117c7918301611fa3565b92602082015194851161037757610286946117e29201611fa3565b50611773565b8434610377575f600319360112610377576020905160128152f35b8434610377575f60031936011261037757602090517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b8434610377575f6003193601126103775760209051701d6329f1c35ca4bfabb9f56100000000008152f35b84346103775760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61168936611dab565b8285346103775760205f60846118af36611dab565b86517f15dacbea000000000000000000000000000000000000000000000000000000008152339881019890985273ffffffffffffffffffffffffffffffffffffffff928316602489015290821660448801526064870152859283917f0000000000000000000000000000000000000000000000000000000000000000165af18015610b5c57610dca576020905160018152f35b828534610377575f600319360112610377578051917fe4dc2aa4000000000000000000000000000000000000000000000000000000008352309083015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610cf2575f9161034a576020925051908152f35b82853461037757606060031936011261037757813567ffffffffffffffff811161037757611a069036908401611d4b565b90611a3d611a20611a1684612053565b9360243590611f5a565b51670de0b6b3a7640000611a3660443586612103565b0490611f82565b918203918211611a51576020925051908152f35b601183634e487b7160e01b5f525260245ffd5b8285346103775780600319360112610377576020610d7992611a84611c7c565b83517fe1f21c670000000000000000000000000000000000000000000000000000000081523392810192835273ffffffffffffffffffffffffffffffffffffffff909116602083015260243560408301529384918291606090910190565b8434610377575f6003193601126103775780516003549091825f611b0584611f15565b808352602094600190866001821691825f14611b92575050600114611b37575b50506102869291610ea8910385611cf2565b9085925060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f925b828410611b7a5750505082010181610ea8611b25565b8054848a018601528895508794909301928101611b64565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168682015292151560051b85019092019250839150610ea89050611b25565b83346103775760206003193601126103775735907fffffffff000000000000000000000000000000000000000000000000000000008216809203610377577f01ffc9a700000000000000000000000000000000000000000000000000000000602092148152f35b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361037757565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361037757565b6040810190811067ffffffffffffffff821117611cde57604052565b634e487b7160e01b5f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117611cde57604052565b67ffffffffffffffff8111611cde5760051b60200190565b9080601f83011215610377576020908235611d6581611d33565b93611d736040519586611cf2565b81855260208086019260051b82010192831161037757602001905b828210611d9c575050505090565b81358152908301908301611d8e565b60031960609101126103775773ffffffffffffffffffffffffffffffffffffffff90600435828116810361037757916024359081168103610377579060443590565b9081518082526020808093019301915f5b828110611e0c575050505090565b835185529381019392810192600101611dfe565b9081518082526020808093019301915f5b828110611e3f575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101611e31565b81601f820112156103775780359067ffffffffffffffff8211611cde5760405192611ebc60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160185611cf2565b8284526020838301011161037757815f926020809301838601378301015290565b60021115611ee757565b634e487b7160e01b5f52602160045260245ffd5b34610377575f6003193601126103775760206040515f8152f35b90600182811c92168015611f43575b6020831014611f2f57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611f24565b5190811515820361037757565b8051821015611f6e5760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b91908201809211611f8f57565b634e487b7160e01b5f52601160045260245ffd5b9080601f8301121561037757815190602091611fbe81611d33565b93611fcc6040519586611cf2565b81855260208086019260051b82010192831161037757602001905b828210611ff5575050505090565b81518152908301908301611fe7565b9061200e82611d33565b61201b6040519182611cf2565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06120498294611d33565b0190602036910137565b5f90815b815183101561207f576120776001916120708585611f5a565b5190611f82565b920191612057565b91505090565b9080601f83011215610377578151906020916120a081611d33565b936120ae6040519586611cf2565b81855260208086019260051b82010192831161037757602001905b8282106120d7575050505090565b815173ffffffffffffffffffffffffffffffffffffffff811681036103775781529083019083016120c9565b81810292918115918404141715611f8f57565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361215557565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016301480612290575b156121e9577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff821117611cde5760405251902090565b507f000000000000000000000000000000000000000000000000000000000000000046146121c0565b60ff811461230d5760ff811690601f82116122e557604051916122db83611cc2565b8252602082015290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040515f815f549161231f83611f15565b808352926020906001908181169081156123ab575060011461234d575b505061234a92500382611cf2565b90565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b828410612393575061234a9450505081016020015f8061233c565b85548785018301529485019486945092810192612378565b90506020935061234a9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f8061233c565b60ff81146124105760ff811690601f82116122e557604051916122db83611cc2565b506040515f8160019160015461242581611f15565b80845293602091600181169081156123ab575060011461244d57505061234a92500382611cf2565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b828410612494575061234a9450505081016020015f8061233c565b85548785018301529485019486945092810192612479565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161253b579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15612530575f5173ffffffffffffffffffffffffffffffffffffffff81161561252657905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b6004811015611ee75780612558575050565b60018103612588577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b600281036125bc57507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6003146125c65750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffdfea264697066735822122082700ffdbaf10ea7f58c363d8be9a2c4c004347fc566abc9496fcfeb9b56b86d64736f6c634300081b0033a2646970667358221220952580ad32db6c485e840c53347ae69ee697f8a373d5ef4f44d2ce17150f5d3a64736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP2 PUSH0 CALLDATALOAD DUP1 PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0xE0677AB EQ PUSH2 0x1198 JUMPI DUP5 DUP3 PUSH4 0x206DB1EF EQ PUSH2 0x110C JUMPI POP DUP2 PUSH4 0x2F2770DB EQ PUSH2 0xF13 JUMPI POP DUP1 PUSH4 0x44F6FEC7 EQ PUSH2 0xE1C JUMPI DUP1 PUSH4 0x53A72F7E EQ PUSH2 0xE07 JUMPI DUP1 PUSH4 0x5EA81A32 EQ PUSH2 0xC8E JUMPI DUP1 PUSH4 0x6634B753 EQ PUSH2 0xC46 JUMPI DUP1 PUSH4 0x673A2A1F EQ PUSH2 0x768 JUMPI DUP4 DUP2 PUSH4 0x675D6050 EQ PUSH2 0xAC7 JUMPI POP DUP1 PUSH4 0x6C57F5A9 EQ PUSH2 0xAA3 JUMPI DUP1 PUSH4 0x78DA80CB EQ PUSH2 0xA62 JUMPI DUP1 PUSH4 0x7A0B2E8D EQ PUSH2 0x81F JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x7CE JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x77D JUMPI DUP1 PUSH4 0x8EEC5D70 EQ PUSH2 0x768 JUMPI DUP4 DUP2 PUSH4 0xA7A4B711 EQ PUSH2 0x669 JUMPI POP DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x5A2 JUMPI DUP1 PUSH4 0xD396A666 EQ PUSH2 0x376 JUMPI DUP1 PUSH4 0xDB035EBC EQ PUSH2 0x34C JUMPI DUP1 PUSH4 0xE9D56E19 EQ PUSH2 0x307 JUMPI PUSH4 0xED05BEAF EQ PUSH2 0x10D JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x303 JUMPI PUSH2 0x100 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x303 JUMPI PUSH2 0x127 PUSH2 0x13DA JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2FF JUMPI PUSH2 0x147 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x14FD JUMP JUMPDEST PUSH2 0x14F PUSH2 0x1420 JUMP JUMPDEST SWAP4 PUSH1 0x80 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C CALLDATASIZE ADD SLT PUSH2 0x2FB JUMPI PUSH2 0x182 PUSH2 0x170B JUMP JUMPDEST SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 PUSH32 0x0 AND SWAP7 PUSH2 0x1C5 PUSH2 0x191B JUMP JUMPDEST SWAP5 DUP9 EXTCODESIZE ISZERO PUSH2 0x2F7 JUMPI PUSH2 0x219 PUSH4 0xFFFFFFFF SWAP2 PUSH2 0x267 SWAP5 DUP8 DUP11 MLOAD SWAP12 PUSH32 0xEEEC802F00000000000000000000000000000000000000000000000000000000 DUP14 MSTORE AND SWAP1 DUP12 ADD MSTORE PUSH2 0x1A0 PUSH1 0x24 DUP12 ADD MSTORE PUSH2 0x1A4 DUP11 ADD SWAP1 PUSH2 0x165C JUMP JUMPDEST SWAP6 PUSH1 0x44 CALLDATALOAD PUSH1 0x44 DUP11 ADD MSTORE AND PUSH1 0x64 DUP9 ADD MSTORE PUSH0 PUSH1 0x84 DUP9 ADD MSTORE PUSH1 0xA4 DUP8 ADD SWAP1 PUSH1 0x40 SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST AND PUSH2 0x104 DUP5 ADD MSTORE PUSH1 0x84 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x2F3 JUMPI PUSH2 0x124 DUP5 ADD MSTORE PUSH1 0xA4 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x2F3 JUMPI PUSH2 0x144 DUP5 ADD MSTORE PUSH1 0xC4 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x2F3 JUMPI PUSH2 0x164 DUP5 ADD MSTORE PUSH1 0xE4 CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP1 SWAP3 SUB PUSH2 0x2F3 JUMPI DUP6 SWAP5 DUP5 DUP7 DUP2 DUP1 SWAP5 DUP3 SWAP7 PUSH2 0x184 DUP4 ADD MSTORE SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2EA JUMPI POP PUSH2 0x2D7 JUMPI POP RETURN JUMPDEST PUSH2 0x2E0 SWAP1 PUSH2 0x1443 JUMP JUMPDEST PUSH2 0x2E7 JUMPI DUP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP10 DUP1 REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP5 DUP1 REVERT JUMPDEST DUP3 DUP1 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x348 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x348 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP DUP1 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x348 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x348 JUMPI PUSH1 0x20 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x36E PUSH2 0x191B JUMP JUMPDEST SWAP2 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x303 JUMPI PUSH2 0x140 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x303 JUMPI PUSH2 0x391 PUSH2 0x13DA JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2FF JUMPI PUSH2 0x3B1 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x14FD JUMP JUMPDEST PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC CALLDATASIZE ADD SLT PUSH2 0x2F3 JUMPI DUP2 MLOAD PUSH2 0x3E6 DUP2 PUSH2 0x14A0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x44 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI DUP3 MSTORE PUSH1 0x64 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x84 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI DUP5 DUP4 ADD MSTORE PUSH1 0xA4 CALLDATALOAD SWAP2 DUP4 DUP4 AND DUP1 SWAP4 SUB PUSH2 0x2F3 JUMPI PUSH1 0x80 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C CALLDATASIZE ADD SLT PUSH2 0x59E JUMPI DUP4 PUSH32 0x0 AND SWAP7 PUSH2 0x48F PUSH2 0x191B JUMP JUMPDEST SWAP5 DUP9 EXTCODESIZE ISZERO PUSH2 0x2F7 JUMPI PUSH2 0x52F SWAP4 PUSH4 0xFFFFFFFF SWAP3 PUSH2 0x4E3 SWAP3 DUP10 MLOAD SWAP11 PUSH32 0xEEEC802F00000000000000000000000000000000000000000000000000000000 DUP13 MSTORE AND SWAP1 DUP11 ADD MSTORE PUSH2 0x1A0 PUSH1 0x24 DUP11 ADD MSTORE PUSH2 0x1A4 DUP10 ADD SWAP1 PUSH2 0x165C JUMP JUMPDEST SWAP5 PUSH0 PUSH1 0x44 DUP10 ADD MSTORE AND PUSH1 0x64 DUP8 ADD MSTORE PUSH0 PUSH1 0x84 DUP8 ADD MSTORE PUSH1 0xA4 DUP7 ADD SWAP1 PUSH1 0x40 SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH2 0x104 SWAP1 DUP2 DUP6 ADD MSTORE PUSH2 0x124 SWAP1 PUSH1 0xC4 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x2F3 JUMPI DUP3 DUP7 ADD MSTORE PUSH1 0xE4 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x2F3 JUMPI PUSH2 0x144 DUP7 ADD MSTORE CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x2F3 JUMPI PUSH2 0x164 DUP6 ADD MSTORE CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP1 SWAP3 SUB PUSH2 0x2F3 JUMPI DUP6 SWAP5 DUP5 DUP7 DUP2 DUP1 SWAP5 DUP3 SWAP7 PUSH2 0x184 DUP4 ADD MSTORE SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2EA JUMPI POP PUSH2 0x2D7 JUMPI POP RETURN JUMPDEST DUP8 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x303 JUMPI DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x303 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x20 DUP2 MLOAD DUP1 SWAP5 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x65F JUMPI PUSH1 0x20 SWAP5 SWAP4 PUSH2 0x630 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x651 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x658 JUMPI JUMPDEST PUSH2 0x649 DUP2 DUP4 PUSH2 0x14BC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x18EF JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x628 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x63F JUMP JUMPDEST DUP2 MLOAD RETURNDATASIZE DUP7 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP1 DUP5 DUP5 CALLVALUE PUSH2 0x764 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x764 JUMPI PUSH2 0x685 PUSH2 0x13DA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2FF JUMPI PUSH2 0x6A4 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x14FD JUMP JUMPDEST PUSH2 0x6AC PUSH2 0x13FD JUMP JUMPDEST PUSH2 0x6B4 PUSH2 0x1420 JUMP JUMPDEST SWAP3 PUSH2 0x6BD PUSH2 0x170B JUMP JUMPDEST SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP7 DUP7 ADD MSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x705 PUSH2 0x191B JUMP JUMPDEST SWAP7 PUSH2 0x70E PUSH2 0x1976 JUMP JUMPDEST SWAP6 DUP5 EXTCODESIZE ISZERO PUSH2 0x2F7 JUMPI DUP10 SWAP7 DUP8 SWAP4 PUSH2 0x751 SWAP3 DUP11 MLOAD SWAP12 DUP13 SWAP10 DUP11 SWAP9 DUP10 SWAP8 PUSH32 0xEEEC802F00000000000000000000000000000000000000000000000000000000 DUP10 MSTORE DUP9 ADD PUSH2 0x1729 JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2EA JUMPI POP PUSH2 0x2D7 JUMPI POP RETURN JUMPDEST POP POP REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x2E7 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT ISZERO PUSH2 0x17E9 JUMPI DUP1 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x348 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x348 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x303 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x303 JUMPI CALLDATALOAD SWAP2 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP4 AND DUP4 SUB PUSH2 0x2E7 JUMPI POP PUSH2 0x818 PUSH1 0x20 SWAP3 PUSH2 0x188A JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP DUP3 SWAP1 CALLVALUE PUSH2 0x348 JUMPI PUSH2 0x120 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x348 JUMPI PUSH2 0x83C PUSH2 0x13DA JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA5E JUMPI PUSH2 0x85C SWAP1 CALLDATASIZE SWAP1 DUP7 ADD PUSH2 0x14FD JUMP JUMPDEST SWAP2 PUSH1 0x64 CALLDATALOAD SWAP5 PUSH4 0xFFFFFFFF SWAP6 DUP7 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x2F3 JUMPI PUSH1 0x84 CALLDATALOAD SWAP3 DUP4 ISZERO ISZERO DUP1 SWAP5 SUB PUSH2 0x2F3 JUMPI PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C CALLDATASIZE ADD SLT PUSH2 0x2F3 JUMPI DUP5 MLOAD SWAP8 PUSH2 0x8B5 DUP10 PUSH2 0x14A0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH1 0xA4 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI DUP11 MSTORE PUSH1 0xC4 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI PUSH1 0x20 DUP12 ADD MSTORE PUSH1 0xE4 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI DUP8 DUP12 ADD MSTORE PUSH2 0x104 SWAP10 DUP11 CALLDATALOAD SWAP1 DUP5 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x2F3 JUMPI DUP5 PUSH32 0x0 AND SWAP6 DUP5 TIMESTAMP AND ADD SWAP2 DUP5 DUP4 GT PUSH2 0xA32 JUMPI DUP12 SWAP13 PUSH2 0x945 PUSH2 0x1976 JUMP JUMPDEST SWAP3 DUP9 EXTCODESIZE ISZERO PUSH2 0xA2E JUMPI DUP14 SWAP11 DUP12 SWAP8 DUP14 MLOAD SWAP15 DUP16 SWAP13 DUP14 SWAP12 DUP13 SWAP11 PUSH32 0xEEEC802F00000000000000000000000000000000000000000000000000000000 DUP13 MSTORE AND SWAP1 DUP11 ADD MSTORE PUSH1 0x24 DUP10 ADD PUSH2 0x1A0 SWAP1 MSTORE PUSH2 0x1A4 DUP10 ADD PUSH2 0x999 SWAP2 PUSH2 0x165C JUMP JUMPDEST SWAP7 PUSH1 0x44 CALLDATALOAD PUSH1 0x44 DUP11 ADD MSTORE AND PUSH1 0x64 DUP9 ADD MSTORE PUSH1 0x84 DUP8 ADD MSTORE PUSH1 0xA4 DUP7 ADD PUSH2 0x9E9 SWAP2 PUSH1 0x40 SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST DUP5 ADD MSTORE DUP1 MLOAD ISZERO ISZERO PUSH2 0x124 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x144 DUP5 ADD MSTORE DUP9 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x164 DUP5 ADD MSTORE PUSH1 0x60 ADD MLOAD ISZERO ISZERO PUSH2 0x184 DUP4 ADD MSTORE SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2EA JUMPI POP PUSH2 0x2D7 JUMPI POP RETURN JUMPDEST DUP14 DUP1 REVERT JUMPDEST PUSH1 0x24 DUP13 PUSH1 0x11 DUP11 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST DUP4 DUP1 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x348 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x348 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x348 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x348 JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST DUP1 DUP5 DUP5 CALLVALUE PUSH2 0x764 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x764 JUMPI PUSH2 0xAE2 PUSH2 0x13DA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2FF JUMPI PUSH2 0xB01 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x14FD JUMP JUMPDEST SWAP3 PUSH2 0xB0A PUSH2 0x170B JUMP JUMPDEST SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP2 PUSH2 0xB4C PUSH2 0x191B JUMP JUMPDEST SWAP1 PUSH2 0xB55 PUSH2 0x1976 JUMP JUMPDEST SWAP2 DUP5 EXTCODESIZE ISZERO PUSH2 0x2F7 JUMPI PUSH1 0x60 DUP11 SWAP8 SWAP4 PUSH2 0xBFF DUP10 SWAP6 PUSH4 0xFFFFFFFF PUSH2 0xBB3 DUP14 MLOAD SWAP15 DUP16 SWAP13 DUP14 SWAP12 DUP13 SWAP11 PUSH32 0xEEEC802F00000000000000000000000000000000000000000000000000000000 DUP13 MSTORE AND SWAP1 DUP11 ADD MSTORE PUSH2 0x1A0 PUSH1 0x24 DUP11 ADD MSTORE PUSH2 0x1A4 DUP10 ADD SWAP1 PUSH2 0x165C JUMP JUMPDEST SWAP6 PUSH0 PUSH1 0x44 DUP10 ADD MSTORE AND PUSH1 0x64 DUP8 ADD MSTORE PUSH0 PUSH1 0x84 DUP8 ADD MSTORE PUSH1 0xA4 DUP7 ADD SWAP1 PUSH1 0x40 SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH0 PUSH2 0x104 DUP6 ADD MSTORE DUP1 MLOAD ISZERO ISZERO PUSH2 0x124 DUP6 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x144 DUP6 ADD MSTORE DUP10 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x164 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH2 0x184 DUP4 ADD MSTORE SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2EA JUMPI POP PUSH2 0x2D7 JUMPI POP RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x348 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x348 JUMPI PUSH1 0xFF DUP2 PUSH1 0x20 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xC7C PUSH2 0x13DA JUMP JUMPDEST AND DUP2 MSTORE DUP1 DUP6 MSTORE KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x303 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x303 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP1 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x2FF JUMPI PUSH2 0xCC0 SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0x163E JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2FB JUMPI PUSH2 0xCD8 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x163E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP6 MLOAD SWAP4 PUSH2 0x2DE7 SWAP1 DUP2 DUP7 ADD SWAP5 DUP7 DUP7 LT SWAP1 DUP7 GT OR PUSH2 0xDDB JUMPI POP SWAP2 PUSH2 0xD4B DUP6 SWAP5 SWAP3 PUSH2 0xD58 SWAP5 PUSH2 0x19CD DUP8 CODECOPY DUP8 PUSH32 0x0 AND DUP5 MSTORE PUSH1 0x60 PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD SWAP1 PUSH2 0x1847 JUMP JUMPDEST SWAP2 DUP8 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x1847 JUMP JUMPDEST SUB SWAP1 DUP5 CREATE DUP1 ISZERO PUSH2 0xDCF JUMPI SWAP2 PUSH32 0x83A48FBCFC991335314E74D0496AAB6A1987E992DDC85DDDBCC4D6DD6EF2E9FC SWAP2 PUSH1 0x20 SWAP5 SWAP4 AND SWAP2 DUP3 SWAP2 PUSH2 0xD95 PUSH2 0x1998 JUMP JUMPDEST DUP3 DUP6 MSTORE DUP5 DUP7 MSTORE DUP1 DUP6 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE MLOAD SWAP4 DUP1 LOG2 DUP2 MSTORE RETURN JUMPDEST POP POP MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP9 PUSH1 0x41 PUSH1 0x24 SWAP3 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x348 JUMPI PUSH1 0x3 NOT CALLDATASIZE ADD SLT ISZERO PUSH2 0x17E9 JUMPI DUP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x303 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x303 JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA5E JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0xA5E JUMPI PUSH1 0xB PUSH2 0xE76 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP4 PUSH1 0x24 PUSH1 0x55 SWAP6 CALLDATASIZE SWAP4 ADD CALLDATALOAD SWAP2 ADD PUSH2 0x15DA JUMP JUMPDEST SWAP5 PUSH2 0x2DE7 SWAP6 PUSH2 0xECE PUSH1 0x20 DUP1 SWAP9 DUP9 MLOAD SWAP5 PUSH2 0xE91 DUP4 DUP4 ADD DUP8 PUSH2 0x14BC JUMP JUMPDEST DUP2 DUP7 MSTORE DUP3 DUP7 ADD SWAP2 PUSH2 0x19CD DUP4 CODECOPY DUP3 DUP11 MLOAD SWAP6 DUP7 SWAP4 DUP3 DUP6 ADD SWAP9 MLOAD DUP1 SWAP2 DUP11 MCOPY DUP5 ADD SWAP1 DUP3 DUP3 ADD DUP5 DUP2 MSTORE DUP2 MLOAD SWAP4 DUP5 SWAP3 ADD SWAP1 MCOPY ADD SWAP1 DUP4 DUP3 ADD MSTORE SUB DUP1 DUP5 MSTORE ADD DUP3 PUSH2 0x14BC JUMP JUMPDEST MLOAD SWAP1 KECCAK256 DUP5 MLOAD DUP7 DUP2 ADD SWAP1 CALLER DUP3 MSTORE CHAINID DUP8 DUP3 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x60 DUP2 MSTORE PUSH2 0xEF4 DUP2 PUSH2 0x1484 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 DUP6 MLOAD SWAP2 DUP7 DUP4 ADD MSTORE DUP7 DUP3 ADD MSTORE ADDRESS DUP2 MSTORE ADD PUSH1 0xFF DUP2 MSTORE8 KECCAK256 SWAP2 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xA5E JUMPI DUP4 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xA5E JUMPI PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0xF50 SWAP2 AND PUSH2 0x188A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP3 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 DUP3 DUP8 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x1102 JUMPI SWAP1 DUP4 SWAP3 SWAP2 DUP9 SWAP3 PUSH2 0x10E0 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 DUP7 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP11 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x10D7 JUMPI POP DUP5 SWAP3 PUSH2 0x10A0 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x107A JUMPI POP PUSH2 0x1029 PUSH2 0x1998 JUMP JUMPDEST PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND OR PUSH1 0x1 SSTORE PUSH32 0x432ACBFD662DBB5D8B378384A67159B47CA9D0F1B79F97CF64CF8585FA362D50 DUP2 DUP1 LOG1 DUP1 RETURN JUMPDEST SWAP1 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x10D0 JUMPI JUMPDEST PUSH2 0x10B7 DUP2 DUP4 PUSH2 0x14BC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x303 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x303 JUMPI PUSH0 DUP1 PUSH2 0x1019 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x10AD JUMP JUMPDEST MLOAD RETURNDATASIZE DUP7 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x10FB SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x658 JUMPI PUSH2 0x649 DUP2 DUP4 PUSH2 0x14BC JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0xFC9 JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE DUP10 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP1 DUP6 DUP6 CALLVALUE PUSH2 0x764 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x764 JUMPI PUSH2 0x1128 PUSH2 0x13DA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2FF JUMPI PUSH2 0x1147 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x14FD JUMP JUMPDEST PUSH2 0x114F PUSH2 0x13FD JUMP JUMPDEST PUSH2 0x1157 PUSH2 0x170B JUMP JUMPDEST SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH2 0x705 PUSH2 0x191B JUMP JUMPDEST POP POP CALLVALUE PUSH2 0x2F3 JUMPI PUSH2 0x160 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2F3 JUMPI PUSH2 0x11B4 PUSH2 0x13DA JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2F3 JUMPI PUSH2 0x11D4 SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0x14FD JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP1 SWAP3 SUB PUSH2 0x2F3 JUMPI PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C CALLDATASIZE ADD SLT PUSH2 0x2F3 JUMPI DUP4 MLOAD SWAP1 PUSH2 0x121D DUP3 PUSH2 0x14A0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x64 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI DUP2 MSTORE PUSH1 0x84 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xA4 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI DUP7 DUP3 ADD MSTORE PUSH1 0xC4 CALLDATALOAD SWAP3 DUP1 DUP5 AND DUP1 SWAP5 SUB PUSH2 0x2F3 JUMPI PUSH1 0x80 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C CALLDATASIZE ADD SLT PUSH2 0x2F3 JUMPI DUP1 PUSH32 0x0 AND SWAP6 DUP7 EXTCODESIZE ISZERO PUSH2 0x2F3 JUMPI PUSH2 0x1356 SWAP4 PUSH2 0x130B SWAP3 DUP10 MLOAD SWAP11 PUSH32 0xEEEC802F00000000000000000000000000000000000000000000000000000000 DUP13 MSTORE AND SWAP1 DUP11 ADD MSTORE PUSH2 0x1A0 PUSH1 0x24 DUP11 ADD MSTORE PUSH2 0x1A4 DUP10 ADD SWAP1 PUSH2 0x165C JUMP JUMPDEST SWAP4 PUSH0 PUSH1 0x44 DUP10 ADD MSTORE PUSH1 0x64 DUP9 ADD MSTORE PUSH0 PUSH1 0x84 DUP9 ADD MSTORE PUSH1 0xA4 DUP8 ADD SWAP1 PUSH1 0x40 SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH2 0x104 SWAP1 DUP2 DUP7 ADD MSTORE PUSH2 0x124 SWAP1 PUSH1 0xE4 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x2F3 JUMPI DUP3 DUP8 ADD MSTORE CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP1 SWAP3 SUB PUSH2 0x2F3 JUMPI PUSH2 0x144 SWAP2 DUP3 DUP8 ADD MSTORE CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x2F3 JUMPI PUSH2 0x164 DUP7 ADD MSTORE CALLDATALOAD SWAP2 DUP3 ISZERO ISZERO DUP1 SWAP4 SUB PUSH2 0x2F3 JUMPI DUP5 PUSH0 DUP2 DUP1 SWAP5 DUP3 SWAP7 PUSH2 0x184 DUP4 ADD MSTORE SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x13D1 JUMPI POP PUSH2 0x13C5 JUMPI POP DUP1 RETURN JUMPDEST PUSH2 0x13CF SWAP2 POP PUSH2 0x1443 JUMP JUMPDEST STOP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x2F3 JUMPI JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x2F3 JUMPI JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x2F3 JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1457 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1457 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1457 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1457 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x2F3 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x1457 JUMPI PUSH1 0x40 SWAP3 PUSH1 0x40 MLOAD SWAP5 PUSH2 0x1532 DUP4 DUP4 PUSH1 0x5 SHL ADD DUP8 PUSH2 0x14BC JUMP JUMPDEST DUP2 DUP7 MSTORE DUP3 DUP1 DUP8 ADD SWAP3 PUSH1 0x7 SHL DUP6 ADD ADD SWAP4 DUP2 DUP6 GT PUSH2 0x2F3 JUMPI DUP4 ADD SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x155C JUMPI POP POP POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP4 DUP4 SUB SLT PUSH2 0x2F3 JUMPI DUP6 MLOAD SWAP1 PUSH2 0x1572 DUP3 PUSH2 0x1484 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI DUP4 MSTORE DUP6 DUP6 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2F3 JUMPI DUP7 DUP5 ADD MSTORE DUP8 DUP6 ADD CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI DUP8 DUP4 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 DUP6 ADD CALLDATALOAD SWAP3 DUP4 ISZERO ISZERO DUP5 SUB PUSH2 0x2F3 JUMPI PUSH1 0x80 SWAP4 DUP8 SWAP4 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x154C JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1457 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1622 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD DUP5 PUSH2 0x14BC JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0x2F3 JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x2F3 JUMPI DUP2 PUSH1 0x20 PUSH2 0x1659 SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0x15DA JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x167B JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 DUP5 MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP4 MLOAD AND DUP2 MSTORE DUP5 DUP4 ADD MLOAD SWAP1 PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x16DE JUMPI PUSH1 0x1 SWAP4 DUP7 SWAP4 PUSH1 0x80 SWAP4 DUP6 DUP5 ADD MSTORE PUSH1 0x40 SWAP1 DUP2 DUP4 ADD MLOAD AND SWAP1 DUP4 ADD MSTORE PUSH1 0x60 DUP1 SWAP2 ADD MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE ADD SWAP6 ADD SWAP2 ADD SWAP3 SWAP2 SWAP1 SWAP3 PUSH2 0x166D JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1718 DUP3 PUSH2 0x14A0 JUMP JUMPDEST PUSH0 PUSH1 0x40 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP5 PUSH2 0x17B5 PUSH2 0x180 SWAP6 PUSH4 0xFFFFFFFF PUSH2 0x176A PUSH1 0x60 SWAP8 SWAP12 SWAP11 SWAP7 PUSH2 0x1A0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP9 AND DUP13 MSTORE DUP1 PUSH1 0x20 DUP14 ADD MSTORE DUP12 ADD SWAP1 PUSH2 0x165C JUMP JUMPDEST SWAP11 PUSH0 PUSH1 0x40 DUP12 ADD MSTORE AND DUP7 DUP10 ADD MSTORE PUSH0 PUSH1 0x80 DUP10 ADD MSTORE PUSH1 0xA0 DUP9 ADD SWAP1 PUSH1 0x40 SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST AND PUSH2 0x100 DUP6 ADD MSTORE DUP1 MLOAD ISZERO ISZERO PUSH2 0x120 DUP6 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x140 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x160 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F7420696D706C656D656E7465640000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x18E9 DUP2 PUSH2 0x14A0 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x2F3 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH4 0xFFFFFFFF DUP2 AND TIMESTAMP LT ISZERO PUSH2 0x194D JUMPI SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x195F DUP3 PUSH2 0x1484 JUMP JUMPDEST PUSH0 PUSH1 0x60 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST PUSH2 0x197E PUSH2 0x1952 JUMP JUMPDEST POP PUSH2 0x1987 PUSH2 0x1952 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x40 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x1 SLOAD AND PUSH2 0x19A4 JUMPI JUMP JUMPDEST PUSH32 0x75884CDA00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT INVALID PUSH2 0x200 PUSH1 0x40 DUP2 DUP2 MSTORE CALLVALUE PUSH2 0x48A JUMPI PUSH2 0x2DE7 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x1E DUP3 DUP7 PUSH2 0x48E JUMP JUMPDEST DUP5 CODECOPY DUP3 ADD SWAP1 PUSH1 0x60 DUP4 DUP4 SUB SLT PUSH2 0x48A JUMPI DUP3 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x48A JUMPI PUSH1 0x20 DUP5 DUP2 ADD MLOAD SWAP1 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP2 DUP3 DUP2 GT PUSH2 0x48A JUMPI DUP6 PUSH2 0x64 SWAP2 DUP4 ADD PUSH2 0x4B1 JUMP JUMPDEST SWAP5 DUP4 DUP3 ADD MLOAD DUP4 DUP2 GT PUSH2 0x48A JUMPI PUSH2 0x7A SWAP3 ADD PUSH2 0x4B1 JUMP JUMPDEST SWAP4 DUP3 MLOAD SWAP6 DUP4 DUP8 ADD DUP8 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x3A1 JUMPI DUP5 MSTORE PUSH1 0x1 DUP1 DUP9 MSTORE DUP2 DUP9 ADD SWAP4 PUSH1 0x31 PUSH1 0xF8 SHL DUP6 MSTORE PUSH2 0xA7 DUP5 PUSH2 0x506 JUMP JUMPDEST SWAP8 PUSH2 0x120 SWAP9 DUP10 MSTORE PUSH2 0xB7 DUP11 PUSH2 0x689 JUMP JUMPDEST SWAP6 PUSH2 0x140 SWAP7 DUP8 MSTORE DUP6 MLOAD DUP6 DUP8 ADD KECCAK256 SWAP11 DUP12 PUSH1 0xE0 MSTORE MLOAD SWAP1 KECCAK256 SWAP10 PUSH2 0x100 SWAP11 DUP1 DUP13 MSTORE CHAINID PUSH1 0xA0 MSTORE DUP9 MLOAD SWAP1 DUP7 DUP3 ADD SWAP3 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP5 MSTORE DUP11 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT DUP6 DUP3 GT OR PUSH2 0x3A1 JUMPI DUP10 MSTORE MLOAD SWAP1 KECCAK256 PUSH1 0x80 MSTORE ADDRESS PUSH1 0xC0 MSTORE PUSH2 0x160 SWAP5 DUP9 DUP7 MSTORE DUP1 MLOAD SWAP2 DUP4 DUP4 GT PUSH2 0x3A1 JUMPI PUSH1 0x3 SWAP3 DUP4 SLOAD SWAP3 DUP7 DUP5 DUP2 SHR SWAP5 AND DUP1 ISZERO PUSH2 0x480 JUMPI JUMPDEST DUP9 DUP6 LT EQ PUSH2 0x46C JUMPI DUP2 SWAP1 PUSH1 0x1F SWAP5 DUP6 DUP2 GT PUSH2 0x41E JUMPI JUMPDEST POP DUP9 SWAP1 DUP6 DUP4 GT PUSH1 0x1 EQ PUSH2 0x3C0 JUMPI PUSH0 SWAP3 PUSH2 0x3B5 JUMPI JUMPDEST POP POP PUSH0 NOT DUP3 DUP7 SHL SHR NOT AND SWAP1 DUP7 SHL OR DUP4 SSTORE JUMPDEST DUP1 MLOAD SWAP4 DUP5 GT PUSH2 0x3A1 JUMPI PUSH1 0x4 SWAP6 DUP7 SLOAD DUP7 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x397 JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x384 JUMPI DUP4 DUP2 GT PUSH2 0x341 JUMPI JUMPDEST POP DUP1 SWAP3 DUP6 GT PUSH1 0x1 EQ PUSH2 0x2DC JUMPI POP SWAP4 DUP4 SWAP5 SWAP2 DUP5 SWAP3 PUSH0 SWAP6 PUSH2 0x2D1 JUMPI JUMPDEST POP POP SHL SWAP3 PUSH0 NOT SWAP2 SHL SHR NOT AND OR SWAP1 SSTORE JUMPDEST PUSH2 0x180 SWAP2 CALLER DUP4 MSTORE PUSH2 0x1A0 SWAP4 DUP6 DUP6 MSTORE PUSH2 0x1E0 SWAP6 DUP7 MSTORE PUSH8 0xDE0B6B3A7640000 PUSH1 0x5 SSTORE MLOAD SWAP6 PUSH2 0x2627 SWAP8 DUP9 PUSH2 0x7C0 DUP10 CODECOPY PUSH1 0x80 MLOAD DUP9 PUSH2 0x21C7 ADD MSTORE PUSH1 0xA0 MLOAD DUP9 PUSH2 0x2293 ADD MSTORE PUSH1 0xC0 MLOAD DUP9 PUSH2 0x2198 ADD MSTORE PUSH1 0xE0 MLOAD DUP9 PUSH2 0x2216 ADD MSTORE MLOAD DUP8 PUSH2 0x223C ADD MSTORE MLOAD DUP7 PUSH2 0x1056 ADD MSTORE MLOAD DUP6 PUSH2 0x1080 ADD MSTORE MLOAD DUP5 DUP2 DUP2 PUSH2 0x311 ADD MSTORE DUP2 DUP2 PUSH2 0x554 ADD MSTORE DUP2 DUP2 PUSH2 0x7E2 ADD MSTORE DUP2 DUP2 PUSH2 0xD93 ADD MSTORE DUP2 DUP2 PUSH2 0xF84 ADD MSTORE DUP2 DUP2 PUSH2 0x14B4 ADD MSTORE DUP2 DUP2 PUSH2 0x157D ADD MSTORE DUP2 DUP2 PUSH2 0x1743 ADD MSTORE DUP2 DUP2 PUSH2 0x190C ADD MSTORE DUP2 DUP2 PUSH2 0x199C ADD MSTORE PUSH2 0x212D ADD MSTORE MLOAD DUP4 PUSH2 0xFF0 ADD MSTORE MLOAD DUP3 POP POP PUSH2 0x1C0 MLOAD DUP3 POP POP MLOAD DUP2 DUP2 DUP2 PUSH2 0x693 ADD MSTORE DUP2 DUP2 PUSH2 0x72A ADD MSTORE DUP2 DUP2 PUSH2 0x92A ADD MSTORE DUP2 DUP2 PUSH2 0xC67 ADD MSTORE PUSH2 0x1192 ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP4 POP PUSH0 DUP1 PUSH2 0x1D9 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 DUP5 PUSH1 0x1F NOT DUP2 AND DUP9 PUSH0 MSTORE DUP6 PUSH0 KECCAK256 SWAP6 PUSH0 SWAP1 JUMPDEST DUP10 DUP4 DUP4 LT PUSH2 0x327 JUMPI POP POP POP LT PUSH2 0x30E JUMPI JUMPDEST POP POP POP POP DUP2 SHL ADD SWAP1 SSTORE PUSH2 0x1E8 JUMP JUMPDEST ADD MLOAD SWAP1 PUSH1 0xF8 DUP5 PUSH0 NOT SWAP3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 DUP1 PUSH2 0x300 JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP10 SSTORE SWAP1 SWAP8 ADD SWAP7 SWAP5 DUP6 ADD SWAP5 DUP9 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x2EF JUMP JUMPDEST DUP8 PUSH0 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP1 DUP9 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP5 DUP10 LT PUSH2 0x37B JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP8 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x370 JUMPI POP POP PUSH2 0x1BF JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP8 SWAP1 PUSH2 0x362 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x359 JUMP JUMPDEST PUSH1 0x22 DUP9 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x1AF JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x183 JUMP JUMPDEST SWAP1 DUP9 SWAP4 POP PUSH1 0x1F NOT DUP4 AND SWAP2 DUP8 PUSH0 MSTORE DUP11 PUSH0 KECCAK256 SWAP3 PUSH0 JUMPDEST DUP13 DUP3 DUP3 LT PUSH2 0x408 JUMPI POP POP DUP5 GT PUSH2 0x3F1 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD DUP4 SSTORE PUSH2 0x194 JUMP JUMPDEST ADD MLOAD PUSH0 NOT DUP4 DUP9 SHL PUSH1 0xF8 AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x3E4 JUMP JUMPDEST DUP4 DUP6 ADD MLOAD DUP7 SSTORE DUP13 SWAP8 SWAP1 SWAP6 ADD SWAP5 SWAP4 DUP5 ADD SWAP4 ADD PUSH2 0x3D3 JUMP JUMPDEST SWAP1 SWAP2 POP DUP6 PUSH0 MSTORE DUP9 PUSH0 KECCAK256 DUP6 DUP1 DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP12 DUP7 LT PUSH2 0x463 JUMPI JUMPDEST SWAP2 DUP11 SWAP2 DUP7 SWAP6 SWAP5 SWAP4 ADD PUSH1 0x5 SHR ADD SWAP2 JUMPDEST DUP3 DUP2 LT PUSH2 0x455 JUMPI POP POP PUSH2 0x16F JUMP JUMPDEST PUSH0 DUP2 SSTORE DUP6 SWAP5 POP DUP11 SWAP2 ADD PUSH2 0x447 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x439 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP4 PUSH1 0x7F AND SWAP4 PUSH2 0x15A JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x3A1 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x48A JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x3A1 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x4E5 PUSH1 0x1F DUP5 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP6 PUSH2 0x48E JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x48A JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0x57C JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0x53E JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0x530 JUMPI POP OR SWAP1 JUMP JUMPDEST DUP3 PUSH0 NOT SWAP2 SUB PUSH1 0x3 SHL SHL AND OR SWAP1 JUMP JUMPDEST PUSH1 0x44 DUP3 PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH4 0x305A27A9 PUSH1 0xE0 SHL DUP4 MSTORE DUP2 PUSH1 0x4 DUP5 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH1 0x24 DUP7 ADD MSTORE ADD DUP5 DUP5 ADD MCOPY PUSH0 DUP3 DUP3 ADD DUP5 ADD MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP2 ADD SUB ADD SWAP1 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x3A1 JUMPI PUSH0 SLOAD SWAP3 PUSH1 0x1 SWAP4 DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x67F JUMPI JUMPDEST DUP4 DUP3 LT EQ PUSH2 0x46C JUMPI PUSH1 0x1F DUP2 GT PUSH2 0x64C JUMPI JUMPDEST POP DUP2 PUSH1 0x1F DUP5 GT PUSH1 0x1 EQ PUSH2 0x5EA JUMPI POP SWAP3 DUP3 SWAP4 SWAP2 DUP4 SWAP3 PUSH0 SWAP5 PUSH2 0x5DF JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0x5CA JUMP JUMPDEST SWAP2 SWAP1 DUP4 PUSH1 0x1F NOT DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0x632 JUMPI POP POP POP LT PUSH2 0x61A JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x60D JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x5FC JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP5 PUSH1 0x1F DUP5 PUSH0 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 PUSH1 0x1F DUP7 ADD PUSH1 0x5 SHR ADD JUMPDEST DUP3 DUP2 LT PUSH2 0x674 JUMPI POP POP PUSH2 0x5AF JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0x666 JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x59E JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0x6B3 JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0x53E JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0x530 JUMPI POP OR SWAP1 JUMP JUMPDEST SWAP2 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x3A1 JUMPI PUSH1 0x1 SWAP2 DUP3 SLOAD DUP4 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x7B5 JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x46C JUMPI PUSH1 0x1F DUP2 GT PUSH2 0x782 JUMPI JUMPDEST POP DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0x722 JUMPI POP DUP2 SWAP3 SWAP4 SWAP5 PUSH0 SWAP3 PUSH2 0x717 JUMPI JUMPDEST POP POP PUSH0 NOT PUSH1 0x3 DUP4 SWAP1 SHL SHR NOT AND SWAP1 DUP3 SHL OR SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x700 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT DUP4 AND SWAP6 DUP5 PUSH0 MSTORE DUP3 PUSH0 KECCAK256 SWAP3 PUSH0 SWAP1 JUMPDEST DUP9 DUP3 LT PUSH2 0x76B JUMPI POP POP DUP4 DUP6 SWAP7 SWAP8 LT PUSH2 0x753 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x746 JUMP JUMPDEST DUP1 DUP8 DUP6 SWAP7 DUP3 SWAP5 SWAP7 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP6 ADD SWAP4 ADD SWAP1 PUSH2 0x733 JUMP JUMPDEST DUP4 PUSH0 MSTORE DUP4 PUSH1 0x1F DUP4 PUSH0 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR ADD JUMPDEST DUP3 DUP2 LT PUSH2 0x7AA JUMPI POP POP PUSH2 0x6E7 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP5 SWAP1 PUSH2 0x79C JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x6D6 JUMP INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP2 PUSH1 0xE0 PUSH0 CALLDATALOAD DUP2 SHR SWAP2 DUP3 PUSH4 0x1FFC9A7 EQ PUSH2 0x1BD2 JUMPI POP DUP2 PUSH4 0x6FDDE03 EQ PUSH2 0x1AE2 JUMPI DUP2 PUSH4 0x95EA7B3 EQ PUSH2 0x1A64 JUMPI DUP2 PUSH4 0x16A0B3E0 EQ PUSH2 0x19D5 JUMPI DUP2 PUSH4 0x18160DDD EQ PUSH2 0x1942 JUMPI DUP2 PUSH4 0x23B872DD EQ PUSH2 0x189A JUMPI DUP2 PUSH4 0x23DE6651 EQ PUSH2 0x1868 JUMPI DUP2 PUSH4 0x273C1ADF EQ PUSH2 0x183D JUMPI DUP2 PUSH4 0x30ADF81F EQ PUSH2 0x1803 JUMPI DUP2 PUSH4 0x313CE567 EQ PUSH2 0x17E8 JUMPI DUP2 PUSH4 0x360C340F EQ PUSH2 0x16EA JUMPI DUP2 PUSH4 0x3644E515 EQ PUSH2 0x16CE JUMPI DUP2 PUSH4 0x4CFE8D1A EQ PUSH2 0x16B6 JUMPI DUP2 PUSH4 0x5687F2B8 EQ PUSH2 0x1657 JUMPI DUP2 PUSH4 0x627CDCB9 EQ PUSH2 0x162E JUMPI DUP2 PUSH4 0x641579A6 EQ PUSH2 0x1616 JUMPI DUP2 PUSH4 0x654CF15D EQ PUSH2 0x15F4 JUMPI DUP2 PUSH4 0x679AEFCE EQ PUSH2 0x151A JUMPI DUP2 PUSH4 0x70A08231 EQ PUSH2 0x1446 JUMPI DUP2 PUSH4 0x72C98186 EQ PUSH2 0x137C JUMPI DUP2 PUSH4 0x7ECEBE00 EQ PUSH2 0x1338 JUMPI DUP2 PUSH4 0x81FA807C EQ PUSH2 0x1135 JUMPI DUP2 PUSH4 0x84B0196E EQ PUSH2 0x103E JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0xFA8 JUMPI DUP2 PUSH4 0x8D928AF8 EQ PUSH2 0xF58 JUMPI DUP2 PUSH4 0x95D89B41 EQ PUSH2 0xE52 JUMPI DUP2 PUSH4 0x984DE9E8 EQ PUSH2 0xE04 JUMPI DUP2 PUSH4 0xA9059CBB EQ PUSH2 0xCFB JUMPI DUP2 PUSH4 0xAA6CA808 EQ PUSH2 0xC0E JUMPI DUP2 PUSH4 0xAB68E28C EQ PUSH2 0xB66 JUMPI DUP2 PUSH4 0xABB1DC44 EQ PUSH2 0x8CF JUMPI DUP2 PUSH4 0xB0E2E403 EQ PUSH2 0x7B7 JUMPI DUP2 PUSH4 0xB156AA0A EQ PUSH2 0x6D0 JUMPI DUP2 PUSH4 0xB677FA56 EQ PUSH2 0x6CB JUMPI DUP2 PUSH4 0xCE20ECE7 EQ PUSH2 0x6CB JUMPI DUP2 PUSH4 0xD335B0CF EQ PUSH2 0x638 JUMPI DUP2 PUSH4 0xD505ACCF EQ PUSH2 0x38E JUMPI POP DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x295 JUMPI PUSH4 0xE4C43663 EQ PUSH2 0x1D0 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x28D JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x28D JUMPI PUSH2 0x1E9 PUSH2 0x1C7C JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x291 JUMPI PUSH2 0x20A SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x1D4B JUMP JUMPDEST SWAP3 PUSH1 0x64 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x28D JUMPI PUSH2 0x222 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x1D4B JUMP JUMPDEST POP PUSH1 0x84 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x28A JUMPI POP SWAP3 PUSH2 0x278 PUSH2 0x245 PUSH2 0x286 SWAP4 PUSH2 0x263 SWAP7 CALLDATASIZE SWAP2 ADD PUSH2 0x1E69 JUMP JUMPDEST SWAP2 PUSH2 0x250 DUP6 MLOAD PUSH2 0x2004 JUMP JUMPDEST DUP2 MLOAD SWAP7 DUP8 SWAP7 PUSH1 0x80 DUP9 MSTORE PUSH1 0x80 DUP9 ADD SWAP1 PUSH2 0x1DED JUMP JUMPDEST SWAP2 PUSH1 0x44 CALLDATALOAD PUSH1 0x20 DUP9 ADD MSTORE DUP7 DUP4 SUB SWAP1 DUP8 ADD MSTORE PUSH2 0x1DED JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x1C39 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST DUP4 DUP1 REVERT JUMPDEST POP SWAP2 CALLVALUE PUSH2 0x28D JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x28D JUMPI PUSH1 0x20 PUSH2 0x2B1 PUSH2 0x1C7C JUMP JUMPDEST PUSH1 0x64 PUSH2 0x2BB PUSH2 0x1C9F JUMP JUMPDEST SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP1 SWAP9 DUP8 MLOAD SWAP10 DUP11 SWAP7 DUP8 SWAP6 PUSH32 0x927DA10500000000000000000000000000000000000000000000000000000000 DUP8 MSTORE ADDRESS SWAP1 DUP8 ADD MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE AND PUSH1 0x44 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x383 JUMPI SWAP2 PUSH2 0x34A JUMPI JUMPDEST PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x37B JUMPI JUMPDEST DUP2 PUSH2 0x365 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP2 MLOAD SWAP1 PUSH2 0x340 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x358 JUMP JUMPDEST SWAP1 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 POP CALLVALUE PUSH2 0x634 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x634 JUMPI PUSH2 0x3AA PUSH2 0x1C7C JUMP JUMPDEST SWAP2 PUSH2 0x3B3 PUSH2 0x1C9F JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP4 PUSH1 0x64 CALLDATALOAD SWAP2 PUSH1 0x84 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 SUB PUSH2 0x630 JUMPI DUP4 TIMESTAMP GT PUSH2 0x605 JUMPI PUSH2 0x401 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH1 0x1 DUP3 ADD SWAP1 SSTORE SWAP1 JUMP JUMPDEST SWAP2 DUP7 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP8 AND SWAP6 DUP7 DUP12 DUP6 ADD MSTORE DUP9 DUP11 AND PUSH1 0x60 DUP6 ADD MSTORE DUP12 PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 MSTORE DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x5F2 JUMPI SWAP3 PUSH2 0x4DE SWAP3 PUSH2 0x4D5 SWAP3 DUP9 SWAP6 DUP12 MSTORE MLOAD SWAP1 KECCAK256 PUSH2 0x494 PUSH2 0x2181 JUMP JUMPDEST SWAP1 DUP11 MLOAD SWAP2 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x2 DUP4 ADD MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0xC4 CALLDATALOAD SWAP2 PUSH1 0x42 PUSH1 0xA4 CALLDATALOAD SWAP3 KECCAK256 PUSH2 0x24AC JUMP JUMPDEST SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x2546 JUMP JUMPDEST AND DUP2 DUP2 SUB PUSH2 0x5C5 JUMPI POP POP DUP6 DUP5 SWAP6 SWAP7 SWAP8 PUSH2 0x550 PUSH1 0x20 SWAP7 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP7 MSTORE DUP6 ADD PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 SWAP5 PUSH1 0x60 DUP3 ADD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP4 MSTORE AND PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x5BC JUMPI POP PUSH2 0x586 JUMPI POP DUP1 RETURN JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x5B4 JUMPI JUMPDEST DUP2 PUSH2 0x59F PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x28D JUMPI PUSH2 0x5B0 SWAP1 PUSH2 0x1F4D JUMP JUMPDEST POP DUP1 RETURN JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x592 JUMP JUMPDEST MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0x4B800E4600000000000000000000000000000000000000000000000000000000 DUP9 MSTORE DUP9 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 DUP7 REVERT JUMPDEST PUSH1 0x41 DUP13 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x24 DUP9 DUP6 DUP12 PUSH32 0x6279130200000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST DUP8 DUP1 REVERT JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP POP SWAP2 CALLVALUE PUSH2 0x28D JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x28D JUMPI DUP1 MLOAD SWAP3 PUSH32 0xB45090F900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE ADDRESS SWAP1 DUP5 ADD MSTORE PUSH1 0x20 DUP4 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x383 JUMPI SWAP2 PUSH2 0x34A JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x1EFB JUMP JUMPDEST POP POP SWAP2 CALLVALUE PUSH2 0x28D JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x28D JUMPI DUP1 MLOAD SWAP3 PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE ADDRESS SWAP1 DUP5 ADD MSTORE DUP2 DUP4 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x383 JUMPI DUP1 SWAP3 PUSH2 0x76F JUMPI JUMPDEST DUP2 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 SWAP1 PUSH2 0x286 SWAP1 DUP3 ADD DUP7 PUSH2 0x1DED JUMP JUMPDEST SWAP1 SWAP2 POP RETURNDATASIZE DUP1 DUP3 DUP6 RETURNDATACOPY PUSH2 0x781 DUP2 DUP6 PUSH2 0x1CF2 JUMP JUMPDEST DUP4 ADD SWAP3 PUSH1 0x20 DUP2 DUP6 SUB SLT PUSH2 0x28D JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x28A JUMPI POP SWAP3 PUSH2 0x7B0 SWAP2 PUSH2 0x286 SWAP5 ADD PUSH2 0x1FA3 JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x75A JUMP JUMPDEST POP POP DUP3 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 DUP2 MLOAD SWAP3 DUP2 CALLDATALOAD PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x20 DUP5 MSTORE PUSH2 0x81A DUP5 PUSH2 0x1CC2 JUMP JUMPDEST DUP1 EXTCODESIZE ISZERO PUSH2 0x377 JUMPI PUSH2 0x889 PUSH0 SWAP5 SWAP2 DUP6 SWAP3 DUP6 MLOAD SWAP7 DUP8 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xC808824700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH32 0x546573744576656E740000000000000000000000000000000000000000000000 DUP10 DUP5 ADD MSTORE DUP10 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x1C39 JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x8C5 JUMPI PUSH2 0x89B JUMPI DUP4 DUP1 RETURN JUMPDEST SWAP1 SWAP2 SWAP3 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x8B2 JUMPI POP MSTORE STOP JUMPDEST PUSH1 0x41 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 MLOAD PUSH32 0x67E0E07600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x24 SWAP1 PUSH0 DUP4 DUP4 DUP2 PUSH32 0x0 DUP9 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0xB5C JUMPI PUSH0 SWAP6 PUSH0 SWAP5 PUSH0 SWAP5 PUSH0 SWAP8 PUSH2 0xA08 JUMPI JUMPDEST POP POP POP SWAP1 PUSH2 0x980 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP2 MLOAD SWAP7 DUP8 SWAP7 PUSH1 0x80 DUP9 MSTORE PUSH1 0x80 DUP9 ADD SWAP1 PUSH2 0x1E20 JUMP JUMPDEST PUSH1 0x20 DUP8 DUP3 SUB DUP2 DUP10 ADD MSTORE DUP1 DUP1 DUP8 MLOAD SWAP4 DUP5 DUP2 MSTORE ADD SWAP7 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x9C4 JUMPI DUP10 DUP9 SUB DUP7 DUP12 ADD MSTORE DUP10 DUP1 PUSH2 0x286 DUP12 PUSH2 0x9B6 DUP13 DUP13 PUSH2 0x1DED JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x1DED JUMP JUMPDEST SWAP2 DUP5 SWAP9 SWAP10 POP PUSH1 0x60 DUP7 SWAP8 SWAP9 PUSH1 0x1 SWAP4 SWAP6 SWAP8 DUP4 SWAP8 MLOAD DUP1 MLOAD PUSH2 0x9E1 DUP2 PUSH2 0x1EDD JUMP JUMPDEST DUP4 MSTORE DUP7 DUP6 DUP3 ADD MLOAD AND DUP6 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO DUP10 DUP3 ADD MSTORE ADD SWAP9 ADD SWAP3 ADD DUP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 PUSH2 0x998 JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP RETURNDATASIZE DUP1 PUSH0 DUP6 RETURNDATACOPY PUSH2 0xA1F DUP2 DUP6 PUSH2 0x1CF2 JUMP JUMPDEST DUP4 ADD SWAP3 PUSH1 0x80 DUP2 DUP6 SUB SLT PUSH2 0x377 JUMPI DUP1 MLOAD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP2 GT PUSH2 0x377 JUMPI DUP2 PUSH2 0xA4C SWAP2 DUP5 ADD PUSH2 0x2085 JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP1 DUP5 ADD MLOAD DUP8 DUP2 GT PUSH2 0x377 JUMPI DUP5 ADD SWAP1 DUP4 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x377 JUMPI DUP2 MLOAD SWAP3 PUSH2 0xA74 DUP5 PUSH2 0x1D33 JUMP JUMPDEST SWAP10 PUSH2 0xA81 DUP9 MLOAD SWAP12 DUP13 PUSH2 0x1CF2 JUMP JUMPDEST DUP5 DUP12 MSTORE DUP3 DUP12 ADD SWAP2 DUP4 PUSH1 0x60 DUP1 SWAP8 MUL DUP7 ADD ADD SWAP5 DUP8 DUP7 GT PUSH2 0x377 JUMPI SWAP12 SWAP13 SWAP12 DUP5 ADD SWAP3 JUMPDEST DUP6 DUP5 LT PUSH2 0xAE9 JUMPI POP POP POP POP POP POP POP DUP3 DUP3 ADD MLOAD DUP6 DUP2 GT PUSH2 0x377 JUMPI DUP2 PUSH2 0xAC5 SWAP2 DUP5 ADD PUSH2 0x1FA3 JUMP JUMPDEST SWAP5 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x377 JUMPI PUSH2 0xADC SWAP3 ADD PUSH2 0x1FA3 JUMP JUMPDEST SWAP2 SWAP5 SWAP3 SWAP2 SWAP4 DUP7 DUP1 DUP1 PUSH2 0x961 JUMP JUMPDEST DUP7 DUP5 SWAP14 SWAP15 SWAP14 DUP10 SUB SLT PUSH2 0x377 JUMPI DUP10 MLOAD SWAP1 DUP8 DUP3 ADD DUP14 DUP2 GT DUP4 DUP3 LT OR PUSH2 0xB4A JUMPI DUP12 MSTORE DUP5 MLOAD SWAP1 PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x377 JUMPI DUP16 SWAP2 DUP4 MSTORE DUP7 DUP7 ADD MLOAD SWAP2 DUP3 AND DUP3 SUB PUSH2 0x377 JUMPI DUP3 DUP8 SWAP3 DUP4 DUP12 SWAP6 ADD MSTORE PUSH2 0xB38 DUP14 DUP9 ADD PUSH2 0x1F4D JUMP JUMPDEST DUP14 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP4 ADD SWAP3 SWAP13 SWAP12 SWAP13 PUSH2 0xAA0 JUMP JUMPDEST DUP4 PUSH1 0x41 DUP7 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH2 0xB81 PUSH2 0x1C7C JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x377 JUMPI PUSH2 0xBA2 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x1D4B JUMP JUMPDEST SWAP2 PUSH1 0x64 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x377 JUMPI PUSH2 0xBBA SWAP1 CALLDATASIZE SWAP1 DUP7 ADD PUSH2 0x1D4B JUMP JUMPDEST POP PUSH1 0x84 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x377 JUMPI PUSH2 0x278 PUSH2 0xBDB PUSH2 0xC01 SWAP6 PUSH2 0x286 SWAP5 CALLDATASIZE SWAP2 ADD PUSH2 0x1E69 JUMP JUMPDEST SWAP2 PUSH2 0xBE6 DUP6 MLOAD PUSH2 0x2004 JUMP JUMPDEST DUP2 MLOAD SWAP7 DUP8 SWAP7 PUSH1 0x24 CALLDATALOAD DUP9 MSTORE PUSH1 0x80 PUSH1 0x20 DUP10 ADD MSTORE PUSH1 0x80 DUP9 ADD SWAP1 PUSH2 0x1DED JUMP JUMPDEST SWAP2 DUP7 DUP4 SUB SWAP1 DUP8 ADD MSTORE PUSH2 0x1DED JUMP JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 MLOAD SWAP2 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH0 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xCF2 JUMPI PUSH0 SWAP2 PUSH2 0xCAE JUMPI JUMPDEST PUSH2 0x286 SWAP3 POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1E20 JUMP JUMPDEST SWAP1 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0xCBF DUP2 DUP5 PUSH2 0x1CF2 JUMP JUMPDEST DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP5 SUB SLT PUSH2 0x377 JUMPI DUP1 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0x377 JUMPI PUSH2 0x286 SWAP4 PUSH2 0xCEC SWAP3 ADD PUSH2 0x2085 JUMP JUMPDEST SWAP1 PUSH2 0xC97 JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 PUSH2 0xD79 SWAP3 PUSH2 0xD1B PUSH2 0x1C7C JUMP JUMPDEST DUP4 MLOAD PUSH32 0xBEABACC800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xB5C JUMPI PUSH2 0xDCA JUMPI JUMPDEST PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xDFC JUMPI JUMPDEST DUP2 PUSH2 0xDE3 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x377 JUMPI PUSH2 0xDF6 PUSH1 0x20 SWAP3 PUSH2 0x1F4D JUMP JUMPDEST POP PUSH2 0xDC0 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xDD6 JUMP JUMPDEST DUP5 DUP4 CALLVALUE PUSH2 0x377 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x377 JUMPI PUSH2 0xE34 SWAP2 CALLDATASIZE SWAP2 ADD PUSH2 0x1D4B JUMP JUMPDEST SWAP1 PUSH1 0x2 PUSH1 0x24 CALLDATALOAD LT ISZERO PUSH2 0x377 JUMPI PUSH2 0xE4B PUSH1 0x20 SWAP3 PUSH2 0x2053 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP5 DUP4 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP2 MLOAD SWAP2 DUP3 PUSH0 DUP4 SLOAD PUSH2 0xE74 DUP2 PUSH2 0x1F15 JUMP JUMPDEST SWAP1 DUP2 DUP5 MSTORE PUSH1 0x20 SWAP6 PUSH1 0x1 SWAP2 DUP8 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0xF13 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xEB7 JUMPI JUMPDEST POP POP POP PUSH2 0x286 SWAP3 SWAP2 PUSH2 0xEA8 SWAP2 SUB DUP6 PUSH2 0x1CF2 JUMP JUMPDEST MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1C39 JUMP JUMPDEST PUSH0 SWAP1 DUP2 MSTORE DUP7 SWAP4 POP SWAP2 SWAP1 PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B JUMPDEST DUP3 DUP5 LT PUSH2 0xEFB JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0xEA8 PUSH2 0x286 PUSH2 0xE95 JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0xEE2 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 DUP3 ADD MSTORE SWAP4 ISZERO ISZERO PUSH1 0x5 SHL DUP7 ADD SWAP1 SWAP4 ADD SWAP4 POP DUP5 SWAP3 POP PUSH2 0xEA8 SWAP2 POP PUSH2 0x286 SWAP1 POP PUSH2 0xE95 JUMP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP5 DUP4 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x377 JUMPI DUP3 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 PUSH32 0x0 DUP4 MSTORE DUP5 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD SWAP3 DUP2 DUP5 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT OR PUSH2 0x8B2 JUMPI POP DUP3 PUSH1 0x20 SWAP5 MSTORE MLOAD SWAP1 KECCAK256 DUP2 MSTORE RETURN JUMPDEST SWAP3 POP POP CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH2 0x107A PUSH32 0x0 PUSH2 0x22B9 JUMP JUMPDEST SWAP3 PUSH2 0x10A4 PUSH32 0x0 PUSH2 0x23EE JUMP JUMPDEST DUP2 MLOAD SWAP3 PUSH1 0x20 DUP5 ADD SWAP1 DUP5 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x8B2 JUMPI POP SWAP2 PUSH2 0x1115 SWAP2 PUSH2 0x286 SWAP5 SWAP4 DUP3 MSTORE PUSH0 DUP5 MSTORE PUSH2 0x1108 DUP3 MLOAD SWAP8 DUP9 SWAP8 PUSH32 0xF00000000000000000000000000000000000000000000000000000000000000 DUP10 MSTORE DUP1 PUSH1 0x20 DUP11 ADD MSTORE DUP9 ADD SWAP1 PUSH2 0x1C39 JUMP JUMPDEST SWAP2 DUP7 DUP4 SUB SWAP1 DUP8 ADD MSTORE PUSH2 0x1C39 JUMP JUMPDEST SWAP1 CHAINID PUSH1 0x60 DUP6 ADD MSTORE ADDRESS PUSH1 0x80 DUP6 ADD MSTORE PUSH0 PUSH1 0xA0 DUP6 ADD MSTORE DUP4 DUP3 SUB PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x1DED JUMP JUMPDEST SWAP3 POP POP CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP3 MLOAD PUSH32 0xF29486A100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE PUSH2 0x1A0 SWAP3 DUP4 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x132E JUMPI PUSH0 SWAP5 PUSH2 0x11D9 JUMPI JUMPDEST DUP6 DUP6 PUSH1 0x60 DUP3 DUP3 ADD MLOAD SWAP2 ADD MLOAD DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST SWAP1 SWAP2 DUP1 SWAP4 SWAP5 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1327 JUMPI JUMPDEST PUSH2 0x11F2 DUP2 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SWAP3 DUP2 DUP5 SLT PUSH2 0x377 JUMPI DUP6 MLOAD SWAP5 PUSH2 0x140 SWAP5 DUP6 DUP8 ADD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP9 DUP5 LT DUP4 DUP6 GT OR PUSH2 0x1314 JUMPI PUSH1 0x80 SGT PUSH2 0x377 JUMPI PUSH2 0x1C0 DUP9 ADD SWAP2 DUP3 GT DUP4 DUP4 LT OR PUSH2 0x8B2 JUMPI POP DUP8 MSTORE PUSH2 0x1240 DUP3 PUSH2 0x1F4D JUMP JUMPDEST DUP2 MSTORE PUSH2 0x124E PUSH1 0x20 DUP4 ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP1 PUSH2 0x160 SWAP2 DUP3 DUP9 ADD MSTORE PUSH2 0x1262 DUP9 DUP5 ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP4 PUSH2 0x180 SWAP5 DUP6 DUP10 ADD MSTORE PUSH2 0x1277 PUSH1 0x60 DUP6 ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP1 DUP9 ADD MSTORE DUP7 MSTORE PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0xA0 DUP3 ADD MLOAD DUP8 DUP8 ADD MSTORE PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x60 DUP8 ADD MSTORE DUP4 DUP3 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x377 JUMPI PUSH1 0x80 DUP8 ADD MSTORE PUSH2 0x100 SWAP1 DUP2 DUP4 ADD MLOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x377 JUMPI PUSH2 0x1307 SWAP6 PUSH2 0x12FD SWAP3 PUSH1 0xA0 DUP11 ADD MSTORE PUSH2 0x12F2 PUSH2 0x120 SWAP9 PUSH2 0x12E6 DUP11 DUP9 ADD PUSH2 0x1F4D JUMP JUMPDEST PUSH1 0xC0 DUP13 ADD MSTORE DUP7 ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP1 DUP10 ADD MSTORE DUP4 ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP1 DUP7 ADD MSTORE ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH0 DUP1 DUP1 DUP1 PUSH2 0x11C2 JUMP JUMPDEST PUSH1 0x41 DUP3 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x11E8 JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x136A PUSH2 0x1C7C JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP5 DUP4 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x3 NOT SWAP3 PUSH1 0x20 DUP5 CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP2 CALLDATALOAD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT PUSH2 0x377 JUMPI DUP5 CALLDATASIZE SUB ADD SLT PUSH2 0x377 JUMPI DUP3 DUP2 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x377 JUMPI PUSH2 0x13C2 DUP2 PUSH2 0x1EDD JUMP JUMPDEST PUSH2 0x13EC JUMPI POP PUSH8 0xDE0B6B3A7640000 PUSH2 0x13E3 PUSH1 0x20 SWAP4 PUSH1 0x24 PUSH1 0x5 SLOAD SWAP2 ADD CALLDATALOAD PUSH2 0x2103 JUMP JUMPDEST DIV SWAP1 JUMPDEST MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP2 PUSH1 0x24 ADD CALLDATALOAD PUSH1 0x5 SLOAD SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x1433 JUMPI DUP2 ISZERO PUSH2 0x1420 JUMPI PUSH1 0x20 SWAP4 POP DIV SWAP1 PUSH2 0x13E6 JUMP JUMPDEST PUSH1 0x12 DUP5 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x11 DUP5 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP5 DUP4 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP3 PUSH2 0x1464 PUSH2 0x1C7C JUMP JUMPDEST PUSH1 0x44 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP6 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP4 PUSH32 0xF7888AEC00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS SWAP1 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xB5C JUMPI PUSH0 SWAP3 PUSH2 0x14EB JUMPI JUMPDEST POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP DUP3 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1513 JUMPI JUMPDEST PUSH2 0x1503 DUP2 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x377 JUMPI MLOAD SWAP1 DUP4 PUSH2 0x14E4 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x14F9 JUMP JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x6 SLOAD DUP1 PUSH2 0x15EA JUMPI POP DUP1 MLOAD SWAP2 PUSH32 0x4F037EE700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0xB5C JUMPI PUSH0 SWAP1 PUSH2 0x15B7 JUMPI JUMPDEST PUSH1 0x20 SWAP3 POP SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E2 JUMPI JUMPDEST DUP2 PUSH2 0x15D1 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP2 MLOAD PUSH2 0x15AC JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x15C4 JUMP JUMPDEST PUSH1 0x20 SWAP3 POP SWAP1 PUSH2 0x13E6 JUMP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH8 0xDE0B6B3A7640000 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI CALLDATALOAD PUSH1 0x5 SSTORE STOP JUMPDEST CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI CALLER PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD SWAP1 SWAP2 SSTORE STOP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH2 0x1689 CALLDATASIZE PUSH2 0x1DAB JUMP JUMPDEST SWAP4 SWAP2 SWAP5 PUSH2 0x1694 PUSH2 0x2116 JUMP JUMPDEST MLOAD SWAP4 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP5 AND SWAP3 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI CALLDATALOAD PUSH1 0x6 SSTORE STOP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 PUSH2 0xE4B PUSH2 0x2181 JUMP JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 MLOAD SWAP2 PUSH32 0x7E361BDE00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH0 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xCF2 JUMPI PUSH0 SWAP2 PUSH2 0x178A JUMPI JUMPDEST PUSH2 0x286 SWAP3 POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1DED JUMP JUMPDEST SWAP1 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x179B DUP2 DUP5 PUSH2 0x1CF2 JUMP JUMPDEST DUP3 ADD SWAP1 DUP1 DUP4 DUP4 SUB SLT PUSH2 0x377 JUMPI DUP3 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP2 GT PUSH2 0x377 JUMPI DUP4 PUSH2 0x17C7 SWAP2 DUP4 ADD PUSH2 0x1FA3 JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP3 ADD MLOAD SWAP5 DUP6 GT PUSH2 0x377 JUMPI PUSH2 0x286 SWAP5 PUSH2 0x17E2 SWAP3 ADD PUSH2 0x1FA3 JUMP JUMPDEST POP PUSH2 0x1773 JUMP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE RETURN JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH17 0x1D6329F1C35CA4BFABB9F5610000000000 DUP2 MSTORE RETURN JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH2 0x1689 CALLDATASIZE PUSH2 0x1DAB JUMP JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH0 PUSH1 0x84 PUSH2 0x18AF CALLDATASIZE PUSH2 0x1DAB JUMP JUMPDEST DUP7 MLOAD PUSH32 0x15DACBEA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP9 DUP2 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x24 DUP10 ADD MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP9 ADD MSTORE PUSH1 0x64 DUP8 ADD MSTORE DUP6 SWAP3 DUP4 SWAP2 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xB5C JUMPI PUSH2 0xDCA JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 MLOAD SWAP2 PUSH32 0xE4DC2AA400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xCF2 JUMPI PUSH0 SWAP2 PUSH2 0x34A JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x377 JUMPI PUSH2 0x1A06 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x1D4B JUMP JUMPDEST SWAP1 PUSH2 0x1A3D PUSH2 0x1A20 PUSH2 0x1A16 DUP5 PUSH2 0x2053 JUMP JUMPDEST SWAP4 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1F5A JUMP JUMPDEST MLOAD PUSH8 0xDE0B6B3A7640000 PUSH2 0x1A36 PUSH1 0x44 CALLDATALOAD DUP7 PUSH2 0x2103 JUMP JUMPDEST DIV SWAP1 PUSH2 0x1F82 JUMP JUMPDEST SWAP2 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x1A51 JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x11 DUP4 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 PUSH2 0xD79 SWAP3 PUSH2 0x1A84 PUSH2 0x1C7C JUMP JUMPDEST DUP4 MLOAD PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 MLOAD PUSH1 0x3 SLOAD SWAP1 SWAP2 DUP3 PUSH0 PUSH2 0x1B05 DUP5 PUSH2 0x1F15 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 SWAP5 PUSH1 0x1 SWAP1 DUP7 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x1B92 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1B37 JUMPI JUMPDEST POP POP PUSH2 0x286 SWAP3 SWAP2 PUSH2 0xEA8 SWAP2 SUB DUP6 PUSH2 0x1CF2 JUMP JUMPDEST SWAP1 DUP6 SWAP3 POP PUSH1 0x3 PUSH0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP2 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x1B7A JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0xEA8 PUSH2 0x1B25 JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x1B64 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 DUP3 ADD MSTORE SWAP3 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD SWAP1 SWAP3 ADD SWAP3 POP DUP4 SWAP2 POP PUSH2 0xEA8 SWAP1 POP PUSH2 0x1B25 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x377 JUMPI PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP3 EQ DUP2 MSTORE RETURN JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x377 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x377 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1CDE JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1CDE JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1CDE JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x1D65 DUP2 PUSH2 0x1D33 JUMP JUMPDEST SWAP4 PUSH2 0x1D73 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x377 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1D9C JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1D8E JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x377 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x377 JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x377 JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1E0C JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1DFE JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1E3F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1E31 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x377 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1CDE JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1EBC PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND ADD DUP6 PUSH2 0x1CF2 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x377 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x1EE7 JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x1F43 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x1F2F JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x1F24 JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x377 JUMPI JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x1F6E JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x1F8F JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x377 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x1FBE DUP2 PUSH2 0x1D33 JUMP JUMPDEST SWAP4 PUSH2 0x1FCC PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x377 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1FF5 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1FE7 JUMP JUMPDEST SWAP1 PUSH2 0x200E DUP3 PUSH2 0x1D33 JUMP JUMPDEST PUSH2 0x201B PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x1CF2 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x2049 DUP3 SWAP5 PUSH2 0x1D33 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST PUSH0 SWAP1 DUP2 JUMPDEST DUP2 MLOAD DUP4 LT ISZERO PUSH2 0x207F JUMPI PUSH2 0x2077 PUSH1 0x1 SWAP2 PUSH2 0x2070 DUP6 DUP6 PUSH2 0x1F5A JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x1F82 JUMP JUMPDEST SWAP3 ADD SWAP2 PUSH2 0x2057 JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x377 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x20A0 DUP2 PUSH2 0x1D33 JUMP JUMPDEST SWAP4 PUSH2 0x20AE PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x377 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x20D7 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x377 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x20C9 JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x1F8F JUMPI JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x2155 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND ADDRESS EQ DUP1 PUSH2 0x2290 JUMPI JUMPDEST ISZERO PUSH2 0x21E9 JUMPI PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP3 MSTORE PUSH32 0x0 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1CDE JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST POP PUSH32 0x0 CHAINID EQ PUSH2 0x21C0 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x230D JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x22E5 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x22DB DUP4 PUSH2 0x1CC2 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH32 0xB3512B0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH0 SLOAD SWAP2 PUSH2 0x231F DUP4 PUSH2 0x1F15 JUMP JUMPDEST DUP1 DUP4 MSTORE SWAP3 PUSH1 0x20 SWAP1 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x23AB JUMPI POP PUSH1 0x1 EQ PUSH2 0x234D JUMPI JUMPDEST POP POP PUSH2 0x234A SWAP3 POP SUB DUP3 PUSH2 0x1CF2 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x2393 JUMPI POP PUSH2 0x234A SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x233C JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x2378 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 SWAP4 POP PUSH2 0x234A SWAP6 SWAP3 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP2 POP AND DUP3 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x233C JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x2410 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x22E5 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x22DB DUP4 PUSH2 0x1CC2 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD PUSH2 0x2425 DUP2 PUSH2 0x1F15 JUMP JUMPDEST DUP1 DUP5 MSTORE SWAP4 PUSH1 0x20 SWAP2 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x23AB JUMPI POP PUSH1 0x1 EQ PUSH2 0x244D JUMPI POP POP PUSH2 0x234A SWAP3 POP SUB DUP3 PUSH2 0x1CF2 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x2494 JUMPI POP PUSH2 0x234A SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x233C JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x2479 JUMP JUMPDEST SWAP2 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP5 GT PUSH2 0x253B JUMPI SWAP2 PUSH1 0x20 SWAP4 PUSH1 0x80 SWAP3 PUSH1 0xFF PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND DUP7 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE DUP3 DUP1 MSTORE PUSH1 0x1 GAS STATICCALL ISZERO PUSH2 0x2530 JUMPI PUSH0 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x2526 JUMPI SWAP1 PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 PUSH1 0x1 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP POP POP PUSH0 SWAP2 PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x1EE7 JUMPI DUP1 PUSH2 0x2558 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x2588 JUMPI PUSH32 0xF645EEDF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x25BC JUMPI POP PUSH32 0xFCE698F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x3 EQ PUSH2 0x25C6 JUMPI POP JUMP JUMPDEST PUSH32 0xD78BCE0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP3 PUSH17 0xFFDBAF10EA7F58C363D8BE9A2C4C00434 PUSH32 0xC566ABC9496FCFEB9B56B86D64736F6C634300081B0033A26469706673582212 KECCAK256 SWAP6 0x25 DUP1 0xAD ORIGIN 0xDB PUSH13 0x485E840C53347AE69EE697F8A3 PUSH20 0xD5EF4F44D2CE17150F5D3A64736F6C634300081B STOP CALLER ","sourceMap":"636:6650:86:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1473:26:67;636:6650:86;1473:26:67;;;636:6650:86;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;636:6650:86;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;4300:6;;;636:6650;4407:30;;;:::i;:::-;4300:256;;;;;;780:1;636:6650;;780:1;636:6650;;;;4300:256;780:1;4300:256;;636:6650;4300:256;;;636:6650;780:1;636:6650;780:1;;;;;;;;:::i;:::-;636:6650;;;;780:1;;636:6650;;780:1;;;636:6650;;780:1;;;636:6650;780:1;;;;;;636:6650;;780:1;;;;636:6650;;;780:1;;;;;636:6650;780:1;;;636:6650;780:1;;636:6650;780:1;;636:6650;780:1;;636:6650;780:1;;;636:6650;780:1;636:6650;;;;;;;;;780:1;;;636:6650;780:1;636:6650;;;;;;;;;780:1;;;636:6650;780:1;636:6650;;;;;;;;;780:1;;;636:6650;780:1;636:6650;;;;;;;;;;780:1;;;;;;;;;;;;636:6650;4300:256;;;;;;;;;;;;636:6650;;4300:256;;;;:::i;:::-;636:6650;;4300:256;636:6650;;;;4300:256;636:6650;780:1;636:6650;;780:1;;;;636:6650;;;;4300:256;636:6650;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;636:6650:86;;;;;;;;;2369:24:42;636:6650:86;;;;;;;;;;;;;;;-1:-1:-1;;636:6650:86;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;636:6650:86;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3735:6;;636:6650;3841:30;;;:::i;:::-;3735:255;;;;;;780:1;636:6650;;;780:1;636:6650;;;3735:255;780:1;3735:255;;636:6650;3735:255;;;636:6650;780:1;636:6650;780:1;;;;;;;;:::i;:::-;;636:6650;;780:1;;636:6650;;;780:1;;636:6650;;;780:1;;636:6650;;780:1;;;;;636:6650;;780:1;;;;636:6650;;;780:1;;;;;636:6650;780:1;;;636:6650;780:1;;636:6650;780:1;;636:6650;780:1;;;;;;;636:6650;780:1;636:6650;;;;;;;;;;;780:1;;;636:6650;780:1;636:6650;;;;;;;;;780:1;;;636:6650;;;;;;;;;;780:1;;;636:6650;;;;;;;;;;;780:1;;;;;;;;;;;;636:6650;3735:255;;;;;;;;;;;;636:6650;;;;;;;;;;;;-1:-1:-1;;636:6650:86;;;;;;;1473:26:67;636:6650:86;;1473:26:67;;780:1:86;1473:26:67;;1019:6:40;;;636:6650:86;1473:26:67;;;;;;;;;;;;636:6650:86;;;;;;;;1473:26:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;636:6650:86;;780:1;636:6650;;780:1;;;;636:6650;;;;;;;;-1:-1:-1;;636:6650:86;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;:::i;:::-;;;;:::i;:::-;;;;;;2560:24;;;636:6650;2609:6;636:6650;2715:30;;;:::i;:::-;2835:32;;;:::i;:::-;2609:268;;;;;;636:6650;;;;2609:268;636:6650;;;2609:268;;;;;;;780:1;2609:268;;;;;:::i;:::-;;;;;;;;;;;;;636:6650;;;;;;;;;;;;-1:-1:-1;;636:6650:86;;;;;;;;;;;;;;;-1:-1:-1;;636:6650:86;;;;;;;;;1019:6:40;636:6650:86;;;;;;;;;;;-1:-1:-1;;636:6650:86;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;636:6650:86;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3186:6;;636:6650;3290:15;;;636:6650;;;;;;;;3430:32;;;;:::i;:::-;3186:286;;;;;;636:6650;;;;;;3186:286;;;;;;;780:1;3186:286;;636:6650;3186:286;;;636:6650;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;780:1;;636:6650;;780:1;;;;636:6650;;;780:1;;;;;636:6650;780:1;;;636:6650;780:1;;636:6650;780:1;;636:6650;780:1;636:6650;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3186:286;;;;;;;;;;;;636:6650;;3186:286;636:6650;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;636:6650:86;;;;;;;;;2073:20:42;636:6650:86;;;;;;;;;;;-1:-1:-1;;636:6650:86;;;;;;;;6099:9;636:6650;;;;;;;;;;;;;;;;;;-1:-1:-1;;636:6650:86;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;1589:6;;636:6650;1695:30;;;:::i;:::-;1828:32;;;:::i;:::-;1589:281;;;;;;636:6650;;;;;;;;;;;1589:281;;;;;;;780:1;1589:281;;636:6650;1589:281;;;636:6650;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;780:1;;636:6650;;780:1;;;;636:6650;;;780:1;;;;;636:6650;780:1;;;636:6650;780:1;;636:6650;780:1;;636:6650;780:1;636:6650;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1589:281;;;;;;;;;;;;636:6650;;;;;;;;;-1:-1:-1;;636:6650:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;636:6650:86;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;1300:51;;;;;;;;;;;;;;;;;;636:6650;1300:51;;;636:6650;1300:51;;;;1328:6;;636:6650;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;1300:51;;;;;;;;636:6650;6934:17;636:6650;;;;;6785:173;;;;;:::i;:::-;636:6650;;;;;;;;;6914:4;636:6650;;;;;;;;6934:17;;;636:6650;;;1300:51;636:6650;;;780:1;;;;;;;;1300:51;636:6650;;;;;;;;;;;;;;;-1:-1:-1;;636:6650:86;;;;;;;;;;;;;;;-1:-1:-1;;636:6650:86;;;;;;;;;;;;;;;;;;;;2766:1598:108;636:6650:86;;;;;2766:1598:108;636:6650:86;;;;;;;;:::i;:::-;6353:27;;636:6650;6336:62;636:6650;;;;;6353:27;636:6650;6353:27;;;636:6650;;:::i;:::-;6353:27;;;;;;;;;;636:6650;;;6336:62;;;;;;636:6650;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6336:62;;;;;;;:::i;:::-;636:6650;6435:23;;636:6650;;7233:43;;;7244:10;;636:6650;;7256:13;636:6650;;;;;;;;;;;7233:43;;;;;:::i;:::-;636:6650;7223:54;;2766:1598:108;;;;;;;;;;;6589:4:86;2766:1598:108;;;;;;;636:6650:86;;;;;;;;;;;;;;-1:-1:-1;;636:6650:86;;;;;1774:7:37;1762:20;1774:7;;1762:20;:::i;:::-;636:6650:86;;;;780:1;1231:22:40;;;:6;;;;;;;636:6650:86;1231:22:40;;;;;;;;;;;;;;;636:6650:86;;;;;;1231:64:40;;;;;780:1:86;1231:64:40;;;;;636:6650:86;1820:10:37;636:6650:86;;;;1289:4:40;636:6650:86;;;;;1231:64:40;;;;;;;;;;;;636:6650:86;1797:34:37;;;1793:90;;6645:134:86;;;:::i;:::-;6735:4;636:6650;;;;;6735:4;636:6650;6755:17;;;;636:6650;;1793:90:37;1854:18;;;;;1231:64:40;;;;;;;;;;;;;;;;:::i;:::-;;;636:6650:86;;;;;;;;;;;;1231:64:40;;;;;;;;;;636:6650:86;780:1;636:6650;;780:1;;;;1231:22:40;636:6650:86;1231:22:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;636:6650:86;;780:1;636:6650;;780:1;;;;636:6650;;;;;;;;-1:-1:-1;;636:6650:86;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;:::i;:::-;2054:6;636:6650;2054:6;636:6650;2160:30;;;:::i;636:6650::-;;;;;;;-1:-1:-1;;636:6650:86;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4921:6;;636:6650;4921:234;;;;;;780:1;636:6650;780:1;636:6650;;;4921:234;780:1;4921:234;;636:6650;4921:234;;;636:6650;780:1;636:6650;780:1;;;;;;;;:::i;:::-;;636:6650;;780:1;;636:6650;;780:1;;636:6650;;;780:1;;636:6650;;780:1;;;;;636:6650;;780:1;;;;636:6650;;;780:1;;;;;636:6650;780:1;;;636:6650;780:1;;636:6650;780:1;;636:6650;780:1;;;;;;;636:6650;780:1;636:6650;;;;;;;;;;;780:1;;;636:6650;;;;;;;;;;;780:1;;;;;636:6650;;;;;;;;;;780:1;;;636:6650;;;;;;;;;;;780:1;636:6650;780:1;;;;;;;;636:6650;4921:234;;;;;;;;;;;;636:6650;;;4921:234;;;;;:::i;:::-;636:6650;4921:234;636:6650;780:1;636:6650;780:1;;;;;636:6650;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;636:6650:86;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;780:1::-;;636:6650;;;;;;;;;;;;780:1;-1:-1:-1;780:1:86;;;;;;;;;;;:::o;:::-;;;;;;;636:6650;;780:1;;;;636:6650;;;780:1;;;;;;;;;;;;;;;;;;;;;;;;;;;636:6650;780:1;;;636:6650;780:1;;;;;636:6650;;780:1;;;636:6650;780:1;636:6650;;780:1;;;;;;;;;;-1:-1:-1;780:1:86;;;;;-1:-1:-1;780:1:86;636:6650;;;;;;;:::i;:::-;-1:-1:-1;636:6650:86;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;780:1;;636:6650;;780:1;;;;636:6650;;;780:1;;;;;636:6650;780:1;;;636:6650;780:1;;636:6650;780:1;;636:6650;780:1;636:6650;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5864:126::-;636:6650;;;5958:25;;;636:6650;5958:25;;;636:6650;;;;;;;;;;;5958:25;636:6650;;;;;;;;;;;;;;;;;;;;-1:-1:-1;636:6650:86;;;;;;;;;;;:::o;1931:430:37:-;636:6650:86;;;2303:50:37;;;2320:22;;636:6650:86;;;;;;;2303:50:37;;;;;;:::i;:::-;636:6650:86;2293:61:37;;1931:430;:::o;636:6650:86:-;;;;;;;;;;;;;;;;;;:::o;2922:332:42:-;3191:24;636:6650:86;;;3173:15:42;:42;636:6650:86;;;2922:332:42;:::o;3172:75::-;;-1:-1:-1;2922:332:42;:::o;636:6650:86:-;;;;;;;:::i;:::-;-1:-1:-1;636:6650:86;;;;;;;;;;;;;;;;;:::o;5168:316::-;636:6650;;:::i;:::-;;;;:::i;:::-;5373:4;5326:44;;;636:6650;5373:4;5387:47;;;636:6650;5168:316;:::o;7003:116::-;636:6650;6099:9;636:6650;;7053:60;;7003:116::o;7053:60::-;7092:10;-1:-1:-1;7092:10:86;;-1:-1:-1;7092:10:86"},"methodIdentifiers":{"createPool(string,string)":"5ea81a32","disable()":"2f2770db","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getDeploymentAddress(bytes,bytes32)":"44f6fec7","getNewPoolPauseWindowEndTime()":"db035ebc","getOriginalPauseWindowEndTime()":"e9d56e19","getPauseWindowDuration()":"78da80cb","getPoolCount()":"8eec5d70","getPools()":"673a2a1f","getPoolsInRange(uint256,uint256)":"53a72f7e","getVault()":"8d928af8","isDisabled()":"6c57f5a9","isPoolFromFactory(address)":"6634b753","registerGeneralTestPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address)":"7a0b2e8d","registerPool(address,(address,uint8,address,bool)[],(address,address,address),address,(bool,bool,bool,bool))":"d396a666","registerPoolAtTimestamp(address,(address,uint8,address,bool)[],uint32,(address,address,address),address,(bool,bool,bool,bool))":"0e0677ab","registerPoolWithHook(address,(address,uint8,address,bool)[],address)":"206db1ef","registerPoolWithSwapFee(address,(address,uint8,address,bool)[],uint256,address,(bool,bool,bool,bool))":"ed05beaf","registerTestPool(address,(address,uint8,address,bool)[])":"675d6050","registerTestPool(address,(address,uint8,address,bool)[],address,address)":"a7a4b711"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowDuration\",\"type\":\"uint32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"Disabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolPauseWindowDurationOverflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"FactoryDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"createPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"constructorArgs\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"getDeploymentAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"deployAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNewPoolPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOriginalPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPools\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"getPoolsInRange\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFee\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowDuration\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"}],\"name\":\"registerGeneralTestPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPoolAtTimestamp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"}],\"name\":\"registerPoolWithHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPoolWithSwapFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"}],\"name\":\"registerTestPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"name\":\"registerTestPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"PoolCreated(address)\":{\"params\":{\"pool\":\"The address of the new pool\"}}},\"kind\":\"dev\",\"methods\":{\"disable()\":{\"details\":\"Existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getDeploymentAddress(bytes,bytes32)\":{\"params\":{\"constructorArgs\":\"The arguments used to create the pool\",\"salt\":\"The salt used to deploy the pool\"},\"returns\":{\"deployAddress\":\"The predicted address of the pool, given the salt\"}},\"getNewPoolPauseWindowEndTime()\":{\"details\":\"We intend for all pools deployed by this factory to have the same pause window end time (i.e., after this date, all future pools will be unpausable). This function will return `_poolsPauseWindowEndTime` until it passes, after which it will return 0.\",\"returns\":{\"_0\":\"pauseWindowEndTime The resolved pause window end time (0 indicating it's no longer pausable)\"}},\"getOriginalPauseWindowEndTime()\":{\"returns\":{\"_0\":\"pauseWindowEndTime The end time as a timestamp\"}},\"getPauseWindowDuration()\":{\"returns\":{\"_0\":\"pauseWindowDuration The duration in seconds\"}},\"getPoolCount()\":{\"details\":\"This can then be used to \\\"paginate\\\" calls to `getPools` to control gas costs.\",\"returns\":{\"_0\":\"The number of pools deployed by this factory\"}},\"getPools()\":{\"returns\":{\"_0\":\"The list of pools deployed by this factory\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isDisabled()\":{\"returns\":{\"_0\":\"True if this factory was disabled\"}},\"isPoolFromFactory(address)\":{\"params\":{\"pool\":\"The pool to check\"},\"returns\":{\"_0\":\"True if `pool` was created by this factory\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"Disabled()\":[{\"notice\":\"Attempted pool creation after the factory was disabled.\"}],\"IndexOutOfBounds()\":[{\"notice\":\"A pool index is beyond the current bounds of the array.\"}],\"PoolPauseWindowDurationOverflow()\":[{\"notice\":\"The factory deployer gave a duration that would overflow the Unix timestamp.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"events\":{\"FactoryDisabled()\":{\"notice\":\"The factory was disabled by governance.\"},\"PoolCreated(address)\":{\"notice\":\"A pool was deployed.\"}},\"kind\":\"user\",\"methods\":{\"disable()\":{\"notice\":\"Disable the factory, preventing the creation of more pools.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getDeploymentAddress(bytes,bytes32)\":{\"notice\":\"Return the address where a new pool will be deployed, based on the factory address and salt.\"},\"getNewPoolPauseWindowEndTime()\":{\"notice\":\"Returns the current pauseWindowEndTime that will be applied to Pools created by this factory.\"},\"getOriginalPauseWindowEndTime()\":{\"notice\":\"Returns the original factory pauseWindowEndTime, regardless of the current time.\"},\"getPauseWindowDuration()\":{\"notice\":\"Return the pause window duration. This is the time pools will be pausable after factory deployment.\"},\"getPoolCount()\":{\"notice\":\"Return the total number of pools deployed by this factory.\"},\"getPools()\":{\"notice\":\"Return the complete list of pools deployed by this factory.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isDisabled()\":{\"notice\":\"Check whether this factory has been disabled by governance.\"},\"isPoolFromFactory(address)\":{\"notice\":\"Check whether a pool was deployed by this factory.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/test/PoolFactoryMock.sol\":\"PoolFactoryMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol\":{\"keccak256\":\"0xa7adbaf80bc9cfa44e41776f632b5d7cb2c02c562a124c0e4cb17f06c4a54db3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e4fdf59a7f3dc3b7d6bb6f466e4a0a6263b66c0fc12492baf06ec8c6fdcc2398\",\"dweb:/ipfs/QmWxLpicLjGdgGQ8GjuN9YfDyVapYWwzdgET86ucs9hmFa\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\":{\"keccak256\":\"0x6f8c558b0520faae0c4576f30225b5a97821a4cd210878a0ba10c102a2f753f3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b40aa7a5ee39fa2e297c684fd29ad45d866f1fc61cd997120a417b02a4d908aa\",\"dweb:/ipfs/QmYP5pQAF7SDLgy3aerqfnc4VwdmfQix2jcQUNL3o83BY9\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IPoolLiquidity.sol\":{\"keccak256\":\"0x0cdc0d3817887d0439c3c6f4c811bd37091ef75a855dd8b14c0e8f337e2799dd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4ffd05df90ccdf19a35177fd6c6f78edc61ca2a37df7d0934932a3ad5a96f1e6\",\"dweb:/ipfs/QmaCmKktnMy4XXZn2FaKTjwQBGUhuXKikbxCbPX6K5PPgi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-pool-utils/contracts/BasePoolAuthentication.sol\":{\"keccak256\":\"0x3ce8a430e284241e1b7f07994d0e1fd57bc16d0322cad658fea4519bd6b79ee3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70e91f80e4f484b2d7beb894e873f95092384784147d77437ca0f88a0e966b80\",\"dweb:/ipfs/QmQZDVcHJU2xceLdUJnxf7mXu7zXXYpnfMVppRxTcKPoTm\"]},\"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol\":{\"keccak256\":\"0xa97e2a0fd95d78dcecf67fd8c554ced63bbd6da372b6f8b12f16ad526b6ec608\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d98ad2022f9e3653fd63daca8c0725c7ccbd4f63d0d27c413e90669ce7284a96\",\"dweb:/ipfs/QmZ62RpJj3qSUrrdVD3H72qEszTUuvGkFLSBXAKMhBn5nX\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol\":{\"keccak256\":\"0x89bd8b60aa203c8aa72af6e88671af68f4407a26dd3e0541b0e4dc387fd0081e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://411eb9ee6df963198102de5ae597c1f1377b0a45be23f17d38463f2eeefa2b0a\",\"dweb:/ipfs/QmcEaMawADJEyLswG5hhvhQuTNV3XUxBVu3YZCbJzQkoJ7\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/FactoryWidePauseWindow.sol\":{\"keccak256\":\"0x9594d2dc75aa8c92bb39d30cd76d3bfbb203fe17c4ae35b6f8d882ed4ac868d4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a43d706d34c9f071bed27372100fedaeb12ec4c5c3529e150c8684444c4a619\",\"dweb:/ipfs/QmYUnJ2CtjJY2XktSzamExryTNbAYjesnymMpqTvQuXUka\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x79f2ec4f7314bd1c3555368ff02bb9d382489dc8bbd7efbbf306f9a5084f3bec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a57c155451c5b1c1c59a27770754ccd9ba1be9344db6ac45b8744eba5fa4fa2f\",\"dweb:/ipfs/QmarkRwGaS3egg1FaQH6LibqjT6NocVUbD1jMPWtFxFaQV\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x4910eb69dc3e3141803a36fb176349ae3d774f4a9811e4d486c44bf6a8e4e055\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://afec051b387a1dad075acfbe0093b443e9e5827e29f7b960af3c1b69645aa290\",\"dweb:/ipfs/QmdLcyhmHCiEyVbFsVByyjEdUn9pDTzVAPNyBpdH2YEs4Y\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@balancer-labs/v3-vault/contracts/test/PoolFactoryMock.sol\":{\"keccak256\":\"0x4c9ef43b6c38f849cf6d140a98aef2d67d34326651fd68775cd07d77f8dde76e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://02d90ecbdd7f18886e9273ba8be71627fb5fa0292910853ebd3d5d53bbfd96dd\",\"dweb:/ipfs/QmXhVBpM5L15DDiwxeRfJ8TFSmTtF1uH8JzQirpTCWA6Q8\"]},\"@balancer-labs/v3-vault/contracts/test/PoolMock.sol\":{\"keccak256\":\"0xcd2e8d9d618bfb81a9696acb2419a33d04f48f0b548402c0b32e16d2e8708c3d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://01e7508e239ab908574226d9c009a0f0af5759d941e59a3d7362735ddd859980\",\"dweb:/ipfs/QmQDAS3tugJ1kRFgUsnyKJbMhEtD7464jfTqjYWZc2tQz2\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/utils/Create2.sol\":{\"keccak256\":\"0x2b9807d194b92f1068d868e9587d27037264a9a067c778486f86ae21c61cbd5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://22d71f40aa38a20cf466d8647452a6e3f746353474f8c8af40f03aa8cae38420\",\"dweb:/ipfs/QmQ752Hz5av7YDK8pFojzb5qgeXQvfsdkdwkHVzaXoYAZR\"]},\"@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/test/PoolHooksMock.sol":{"PoolHooksMock":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"addLiquidityHookDiscountPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLiquidityHookFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"allowFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"changePoolBalancesOnBeforeAddLiquidityHook","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"changePoolBalancesOnBeforeRemoveLiquidityHook","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"changePoolBalancesOnBeforeSwapHook","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"changeTokenRateOnBeforeAddLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"changeTokenRateOnBeforeInitialize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"changeTokenRateOnBeforeRemoveLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"changeTokenRateOnBeforeSwapHook","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"denyFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableForcedHookAdjustedAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"hookAdjustedAmountsLiquidity","type":"uint256[]"}],"name":"enableForcedHookAdjustedAmountsLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"failOnAfterAddLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"failOnAfterInitialize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"failOnAfterRemoveLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"failOnAfterSwapHook","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"failOnBeforeAddLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"failOnBeforeInitialize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"failOnBeforeRemoveLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"failOnBeforeSwapHook","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"failOnComputeDynamicSwapFeeHook","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"forcedHookAdjustedAmountsLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHookFlags","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"}],"internalType":"struct HookFlags","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSavedSender","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hookSwapDiscountPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hookSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum AddLiquidityKind","name":"","type":"uint8"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsInRaw","type":"uint256[]"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onAfterAddLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256[]","name":"hookAdjustedAmountsInRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onAfterInitialize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsOutRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onAfterRemoveLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256[]","name":"hookAdjustedAmountsOutRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountInScaled18","type":"uint256"},{"internalType":"uint256","name":"amountOutScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenInBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenOutBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AfterSwapParams","name":"params","type":"tuple"}],"name":"onAfterSwap","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"enum AddLiquidityKind","name":"","type":"uint8"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onBeforeAddLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onBeforeInitialize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onBeforeRemoveLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"},{"internalType":"address","name":"","type":"address"}],"name":"onBeforeSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"onComputeDynamicSwapFeePercentage","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"address","name":"","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"","type":"tuple[]"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"","type":"tuple"}],"name":"onRegister","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLiquidityHookDiscountPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLiquidityHookFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"hookDiscountPercentage","type":"uint256"}],"name":"setAddLiquidityHookDiscountPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"hookFeePercentage","type":"uint256"}],"name":"setAddLiquidityHookFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"changeBalances","type":"bool"},{"internalType":"uint256[]","name":"newBalancesRaw","type":"uint256[]"}],"name":"setChangePoolBalancesOnBeforeAddLiquidityHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"changeBalances","type":"bool"},{"internalType":"uint256[]","name":"newBalancesRaw","type":"uint256[]"}],"name":"setChangePoolBalancesOnBeforeRemoveLiquidityHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"changeBalances","type":"bool"},{"internalType":"uint256[]","name":"newBalancesRaw","type":"uint256[]"}],"name":"setChangePoolBalancesOnBeforeSwapHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"changeRate","type":"bool"},{"internalType":"contract RateProviderMock","name":"rateProvider","type":"address"},{"internalType":"uint256","name":"newTokenRate","type":"uint256"}],"name":"setChangeTokenRateOnBeforeAddLiquidityHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"changeRate","type":"bool"},{"internalType":"contract RateProviderMock","name":"rateProvider","type":"address"},{"internalType":"uint256","name":"newTokenRate","type":"uint256"}],"name":"setChangeTokenRateOnBeforeInitializeHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"changeRate","type":"bool"},{"internalType":"contract RateProviderMock","name":"rateProvider","type":"address"},{"internalType":"uint256","name":"newTokenRate","type":"uint256"}],"name":"setChangeTokenRateOnBeforeRemoveLiquidityHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"changeRate","type":"bool"},{"internalType":"contract RateProviderMock","name":"rateProvider","type":"address"},{"internalType":"uint256","name":"newTokenRate","type":"uint256"}],"name":"setChangeTokenRateOnBeforeSwapHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"dynamicSwapFee","type":"uint256"}],"name":"setDynamicSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"fail","type":"bool"}],"name":"setFailOnAfterAddLiquidityHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"fail","type":"bool"}],"name":"setFailOnAfterInitializeHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"fail","type":"bool"}],"name":"setFailOnAfterRemoveLiquidityHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"fail","type":"bool"}],"name":"setFailOnAfterSwapHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"fail","type":"bool"}],"name":"setFailOnBeforeAddLiquidityHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"fail","type":"bool"}],"name":"setFailOnBeforeInitializeHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"fail","type":"bool"}],"name":"setFailOnBeforeRemoveLiquidityHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"fail","type":"bool"}],"name":"setFailOnBeforeSwapHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"fail","type":"bool"}],"name":"setFailOnComputeDynamicSwapFeeHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"}],"internalType":"struct HookFlags","name":"hookFlags","type":"tuple"}],"name":"setHookFlags","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"discountPercentage","type":"uint256"}],"name":"setHookSwapDiscountPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feePercentage","type":"uint256"}],"name":"setHookSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"setPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"hookDiscountPercentage","type":"uint256"}],"name":"setRemoveLiquidityHookDiscountPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"hookFeePercentage","type":"uint256"}],"name":"setRemoveLiquidityHookFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setShouldIgnoreSavedSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"shouldSettleDiscountFlag","type":"bool"}],"name":"setShouldSettleDiscount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"setSpecialSender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"hookContract","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"setSwapReentrancyHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapReentrancyHookActive","type":"bool"}],"name":"setSwapReentrancyHookActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shouldForceHookAdjustedAmounts","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"shouldIgnoreSavedSender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"shouldSettleDiscount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapReentrancyHookActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60a03461009a57601f613d9638819003918201601f19168301916001600160401b0383118484101761009e5780849260209460405283398101031261009a57516001600160a01b038116810361009a5760805267010000000000000067ff00000000000000196002541617600255604051613ce390816100b38239608051818181612928015281816131c30152818161360c0152613aac0152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe608060409080825260049182361015610016575f80fd5b60e05f35811c9283625b449c1461235d57508262d332fd146123375782630227346714612319578263039388ba146122c45782630b89f182146121365782630c54b1de146120295782631064dfdd14611fcd57826318b6eb5514611f725782631c149e2814611efb578263214ff4c514611ee3578263232b59f714611eaa5782632352c2ed14611e8d5782632754888d14611de85782632e55a84114611dd057826331378f4f14611dad578263335d412614611d225782633478db7314611ccb57826334a168ec14611cb357826334e3a8c314611bba57826335f7290e14611b9557826338be241d14611b3b5782633d05719a14611b1557826340dc21d414611af0578263423ef816146118d55782634392312a146118b75782634437152a1461185b57826345421ec7146116c45782634f036756146116a15782635211fa77146113445782635351b2301461131f5782635991de93146112955782635cd0074614611273578263677db20e1461124e57826368c6db6a146112205782636a9a0611146111e95782636e7d75e51461119557826371eff9d21461109c5782637b695d101461104a57826380c554c11461102457826382fb5d2114610fd157826387ac569114610f815782638f5fae6214610f3a57826393c4b28614610e16578263976907cc14610d635782639f94c52214610d3d578263a0e8f5ac14610c31578263a5098f1014610c0e578263a55e47be14610bbe578263a975dda014610b9b578263af72105d14610b75578263b127e38514610b49578263b298157b14610b26578263b3a763b914610ad5578263b445fbe714610abd578263ba5f9f401461090d578263bd825f6b146108ef578263c25dade814610888578263d3fca63714610839578263d4f83182146107e4578263d77153a71461069c57508163da09aacf14610684578163dc7776ca14610641578163dda1c15b14610629578163e326f03a14610605578163e4c593d7146105e2578163e5e3b67e146105b4578163e62eecdd14610528578163e908e85d1461050b578163e9f7c591146103c4578163eb499270146103a7578163f5279d9c14610383578163f8b5ef851461035f575063fc6e0f5914610344575f80fd5b3461035b57602060031936011261035b5780359055005b5f80fd5b3461035b575f60031936011261035b5760209060ff5f5460481c1690519015158152f35b3461035b575f60031936011261035b5760209060ff5f5460081c1690519015158152f35b3461035b575f60031936011261035b576020906007549051908152f35b3461035b5761014060031936011261035b576103e081516123d4565b6103e861237f565b9060243580151580910361035b5760443580151580910361035b5760643580151580910361035b5760843580151580910361035b5760a4359081151580920361035b5760c4359283151580940361035b5760e4359485151580960361035b57610104359687151580980361035b576101243580151580910361035b576013549060481b69ff000000000000000000169a151560ff16907fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000016179060081b61ff0016179060101b62ff000016179060181b63ff00000016179060201b64ff0000000016179060281b65ff000000000016179060301b66ff00000000000016179060381b67ff000000000000001617911b68ff00000000000000001617176013555f80f35b3461035b575f60031936011261035b576020906006549051908152f35b3461035b5773ffffffffffffffffffffffffffffffffffffffff61054b366125ae565b92917fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff63ff00000060025492151560181b16911617600255167fffffffffffffffffffffffff0000000000000000000000000000000000000000600b541617600b55600c555f80f35b3461035b57602060031936011261035b576105cd61237f565b151560ff60ff19600954169116176009555f80f35b3461035b575f60031936011261035b576002549051602091821c60ff1615158152f35b3461035b575f60031936011261035b5760209060ff5f5460101c1690519015158152f35b823461035b57602060031936011261035b5735600655005b3461035b57602060031936011261035b5773ffffffffffffffffffffffffffffffffffffffff61066f61238e565b165f908152601260205220805460ff19169055005b823461035b57602060031936011261035b5735600355005b903461035b575f60031936011261035b578051610140926106bc826123d4565b5f82525f60208301525f838301525f60608301525f60808301525f60a08301525f60c08301525f818301526101005f818401525f61012080940152835193610703856123d4565b6013549283809281838660ff9384841615159b8c8152602081019c8d878760081c1615159052868d84840193828960101c1615158552826060820197818b60181c161515895281608084019a818d60201c1615158c5260a085019c8d838260281c161515905260c086019e8f9160301c161515905284019d60381c1615158d5282019d871c1615158d52019c60481c1615158c52602083519e8f928352511515910152511515908c015251151560608b015251151560808a015251151560a089015251151560c0880152511515908601525115159084015251151590820152f35b3461035b57602060031936011261035b576107fd61237f565b15157fffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff67ff000000000000005f549260381b169116175f555f80f35b3461035b57602060031936011261035b5761085261237f565b15157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff61ff005f549260081b169116175f555f80f35b3461035b5773ffffffffffffffffffffffffffffffffffffffff6108ab366125ae565b929160ff60ff19600254169115151617600255167fffffffffffffffffffffffff0000000000000000000000000000000000000000600b541617600b55600c555f80f35b503461035b575f60031936011261035b576020906008549051908152f35b9091503461035b5760031936011261035b5761092761238e565b916109306123b1565b5080604435101561035b5767ffffffffffffffff60843581811161035b5761095b903690840161248b565b5060a43581811161035b57610973903690840161248b565b5060c43590811161035b5761098b9036908301612525565b506011549060ff8216156109e6575b50506020915060ff60025460181c166109d9575b60ff60025460301c166109cc575b60ff5f5460381c16159051908152f35b6109d4613a94565b6109bc565b6109e16139bd565b6109ae565b73ffffffffffffffffffffffffffffffffffffffff936020918451809681937f5e01eb5a000000000000000000000000000000000000000000000000000000008352165afa928315610ab35774ffffffffffffffffffffffffffffffffffffffff006020947fffffffffffffffffffffff0000000000000000000000000000000000000000ff925f91610a86575b5060081b169116176011555f8061099a565b610aa69150863d8811610aac575b610a9e8183612432565b8101906135b8565b5f610a74565b503d610a94565b82513d5f823e3d90fd5b833461035b57602060031936011261035b5735600755005b3461035b57602060031936011261035b57610aee61237f565b15157fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff63ff0000005f549260181b169116175f555f80f35b503461035b575f60031936011261035b5760209060ff6002541690519015158152f35b3461035b57602060031936011261035b57610b6261237f565b151560ff60ff195f54169116175f555f80f35b503461035b575f60031936011261035b5760209060ff60025460101c1690519015158152f35b503461035b575f60031936011261035b575f548151911c60ff1615158152602090f35b50823461035b57602060031936011261035b57359060015482101561035b5760209160015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601549051908152f35b503461035b575f60031936011261035b575f549051602091821c60ff1615158152f35b9091503461035b576003199060608236011261035b5783359167ffffffffffffffff831161035b57823603011261035b57610c6a6123b1565b50600d549273ffffffffffffffffffffffffffffffffffffffff9081600f54169283610cb2575b5f54855160109190911c60ff161581526020810187905280604081015b0390f35b82610cc160a460209301612680565b168551928380927f5e01eb5a0000000000000000000000000000000000000000000000000000000082525afa908115610d33575f91610d14575b501614610d0c575b5f808080610c91565b5f9150610d03565b610d2d915060203d602011610aac57610a9e8183612432565b5f610cfb565b84513d5f823e3d90fd5b503461035b575f60031936011261035b5760209060ff60025460181c1690519015158152f35b83823461035b5761010060031936011261035b57610d7f61238e565b50610d886123b1565b916005604435101561035b5767ffffffffffffffff9260643584811161035b57610db5903690840161248b565b5060843584811161035b57610dcd903690840161248b565b9060c43585811161035b57610de5903690850161248b565b5060e43594851161035b57610e03610e0993610cae96369101612525565b506135e4565b929091519283928361256b565b833461035b57610e25366125ee565b91907fffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff65ff000000000060025492151560281b1691161760025581519067ffffffffffffffff8211610f0e57680100000000000000008211610f0e575060105481601055808210610ed8575b50602080920160105f525f5b828110610ea657005b81517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae67282015590830190600101610e9d565b610f0890827f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae672918201910161266a565b82610e91565b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b503461035b57602060031936011261035b5773ffffffffffffffffffffffffffffffffffffffff610f6961238e565b165f908152601260205220805460ff19166001179055005b3461035b57602060031936011261035b57610f9a61237f565b15157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff62ff00005f549260101b169116175f555f80f35b3461035b57602060031936011261035b57610fea61237f565b15157fffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff65ff00000000005f549260281b169116175f555f80f35b503461035b575f60031936011261035b5760209060ff60025460381c1690519015158152f35b3461035b57602060031936011261035b5761106361237f565b15157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff64ff000000005f549260201b169116175f555f80f35b833461035b576110ab366125ee565b91907fffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff66ff00000000000060025492151560301b1691161760025581519067ffffffffffffffff8211610f0e57680100000000000000008211610f0e57506010548160105580821061115f575b50602080920160105f525f5b82811061112d57005b81517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae67282015590830190600101611124565b61118f90827f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae672918201910161266a565b82611118565b3461035b57602060031936011261035b576111ae61237f565b15157fffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff66ff0000000000005f549260301b169116175f555f80f35b503461035b575f60031936011261035b5760209073ffffffffffffffffffffffffffffffffffffffff60115460081c169051908152f35b3461035b57602060031936011261035b5761123961237f565b151560ff60ff19601154169116176011555f80f35b503461035b575f60031936011261035b5760209060ff5f5460381c1690519015158152f35b503461035b575f60031936011261035b5760209060ff5f541690519015158152f35b3461035b5773ffffffffffffffffffffffffffffffffffffffff6112b8366125ae565b92917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff61ff0060025492151560081b16911617600255167fffffffffffffffffffffffff0000000000000000000000000000000000000000600b541617600b55600c555f80f35b503461035b575f60031936011261035b5760209060ff5f5460181c1690519015158152f35b9091503461035b5760031990828236011261035b5783359167ffffffffffffffff831161035b57823603011261035b5761137c6123b1565b50826011549160ff8316156115cf575b50505060ff600254166115c2575b6002549160ff602093841c166115b5575b6009549060ff82166113ca575b505060ff5f5460181c16159051908152f35b73ffffffffffffffffffffffffffffffffffffffff8260081c1691821561155957600a54916113f883613567565b156114fd575060ff19809116600955835190855f9161141685613567565b90818552828501956001916001821691825f146114e457505060011461148f575b50505061147f93928261144e5f9485940382612432565b519082855af13d15611487573d91611465836124eb565b9261147286519485612432565b83523d5f8785013e613c14565b505f806113b8565b606091613c14565b600a5f9081529293507fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a85b8284106114d157505050820101858261144e611437565b80548685018601529284019281016114ba565b1687525050151560051b8301019050858261144e611437565b606490868651917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601660248201527f486f6f6b2063616c6c6461746120697320656d707479000000000000000000006044820152fd5b606482868651917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601560248201527f486f6f6b20636f6e7472616374206e6f742073657400000000000000000000006044820152fd5b6115bd613a94565b6113ab565b6115ca6139bd565b61139a565b73ffffffffffffffffffffffffffffffffffffffff6115f260a460209301612680565b168451928380927f5e01eb5a0000000000000000000000000000000000000000000000000000000082525afa908115611697577fffffffffffffffffffffff0000000000000000000000000000000000000000ff9174ffffffffffffffffffffffffffffffffffffffff00915f91611678575b5060081b169116176011555f828161138c565b611691915060203d602011610aac57610a9e8183612432565b5f611665565b83513d5f823e3d90fd5b503461035b575f60031936011261035b5760209060ff6011541690519015158152f35b9091503461035b5760031936011261035b576116de61238e565b916116e76123b1565b506005604435101561035b5767ffffffffffffffff60643581811161035b57611713903690840161248b565b5060a43581811161035b5761172b903690840161248b565b5060c43590811161035b576117439036908301612525565b506011549060ff82161561179e575b50506020915060ff60025460101c16611791575b60ff60025460281c16611784575b60ff5f5460281c16159051908152f35b61178c613a94565b611774565b6117996139bd565b611766565b73ffffffffffffffffffffffffffffffffffffffff936020918451809681937f5e01eb5a000000000000000000000000000000000000000000000000000000008352165afa928315610ab35774ffffffffffffffffffffffffffffffffffffffff006020947fffffffffffffffffffffff0000000000000000000000000000000000000000ff925f9161183e575b5060081b169116176011555f80611752565b6118559150863d8811610aac57610a9e8183612432565b5f61182c565b3461035b57602060031936011261035b5773ffffffffffffffffffffffffffffffffffffffff61188961238e565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000600e541617600e555f80f35b503461035b575f60031936011261035b576020906003549051908152f35b83823461035b5760031936011261035b576118ee61238e565b60249167ffffffffffffffff9183359183831161035b573660238401121561035b5782013592831161035b57366024848401011161035b577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff006009549260081b16911617600955611976600a54613567565b601f8111611a9b575b505f92601f83116001146119dc57509181925f926119ce575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c191617600a555f80f35b602492500101358280611998565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08316937fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8925f905b868210611a7f5750508360019510611a44575b505050811b01600a55005b01602401357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600384901b60f8161c19169055828080611a39565b9091936020600181928488880101358155019501920190611a26565b611ae0907fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8601f850160051c81019160208610611ae6575b601f0160051c019061266a565b8361197f565b9091508190611ad3565b503461035b575f60031936011261035b5760209060ff5f5460301c1690519015158152f35b503461035b575f60031936011261035b5760209060ff60025460081c1690519015158152f35b83823461035b57606060031936011261035b5767ffffffffffffffff823581811161035b57611b6d903690850161248b565b5060443590811161035b57602092611b8791369101612525565b5060ff5f5416159051908152f35b503461035b575f60031936011261035b5760209060ff5f5460281c1690519015158152f35b833461035b57611bc9366125ee565b6002929192547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff64ff00000000602095151560201b1691161760025580519167ffffffffffffffff8311610f0e57680100000000000000008311610f0e575060209060105483601055808410611c7d575b500160105f525f5b828110611c4b57005b81517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae67282015590830190600101611c42565b611cad90847f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae672918201910161266a565b84611c3a565b833461035b57602060031936011261035b5735600855005b3461035b57602060031936011261035b57611ce461237f565b15157fffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff67ff000000000000006002549260381b169116176002555f80f35b3461035b5773ffffffffffffffffffffffffffffffffffffffff611d45366125ae565b92917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff62ff000060025492151560101b16911617600255167fffffffffffffffffffffffff0000000000000000000000000000000000000000600b541617600b55600c555f80f35b503461035b575f60031936011261035b5760209060ff6009541690519015158152f35b833461035b57602060031936011261035b5735600555005b83823461035b5761010060031936011261035b57611e0461238e565b50611e0d6123b1565b9180604435101561035b5767ffffffffffffffff9260843584811161035b57611e39903690840161248b565b5060a43584811161035b57611e51903690840161248b565b9060c43585811161035b57611e69903690850161248b565b5060e43594851161035b57611e87610e0993610cae96369101612525565b5061319b565b83823461035b575f60031936011261035b57602091549051908152f35b3461035b575f60031936011261035b575f80547fffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff169055005b833461035b57602060031936011261035b5735600d55005b83823461035b578060031936011261035b5767ffffffffffffffff823581811161035b57611f2c903690850161248b565b5060243590811161035b57602092611f4691369101612525565b5060ff60025460081c16611f65575b60ff5f5460081c16159051908152f35b611f6d6139bd565b611f55565b83823461035b576003199160208336011261035b5780359267ffffffffffffffff841161035b5761018090843603011261035b57610cae92611fb4910161290d565b9151901515815260208101919091529081906040820190565b3461035b57602060031936011261035b5773ffffffffffffffffffffffffffffffffffffffff611ffb61238e565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000600f541617600f555f80f35b833461035b5760208060031936011261035b5767ffffffffffffffff90823582811161035b5761205c903690850161248b565b9269010000000000000000007fffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff5f5416175f558351928311610f0e57680100000000000000008311610f0e5750602060019360015484600155808510612100575b50019060015f525f5b8381106120cf57005b82517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf68201559181019184016120c6565b61213090857fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6918201910161266a565b856120bd565b9091503461035b5760031936011261035b5761215061238e565b6121586123b1565b5067ffffffffffffffff9260443584811161035b573660238201121561035b578082013560249561218882612473565b9661219587519889612432565b828852602460208099019360071b8501019336851161035b57602401925b8484106122135788888860807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c36011261035b5773ffffffffffffffffffffffffffffffffffffffff165f526012825260ff815f20541690519015158152f35b608090818536031261035b5788519182018281108582111761229957895273ffffffffffffffffffffffffffffffffffffffff8535818116810361035b5783528a860135600281101561035b578b84015289860135908116810361035b57898301526060908186013592831515840361035b576080938c938201528152019301926121b3565b836041897f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b503461035b57602060031936011261035b577fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff68ff000000000000000061230961237f565b15155f54931b169116175f555f80f35b503461035b575f60031936011261035b576020906005549051908152f35b503461035b575f60031936011261035b5760209060ff60025460301c1690519015158152f35b3461035b575f60031936011261035b5760209060ff60025460281c1615158152f35b60043590811515820361035b57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361035b57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361035b57565b610140810190811067ffffffffffffffff8211176123f157604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116123f157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176123f157604052565b67ffffffffffffffff81116123f15760051b60200190565b9080601f8301121561035b5760209082356124a581612473565b936124b36040519586612432565b81855260208086019260051b82010192831161035b57602001905b8282106124dc575050505090565b813581529083019083016124ce565b67ffffffffffffffff81116123f157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f8201121561035b5780359061253c826124eb565b9261254a6040519485612432565b8284526020838301011161035b57815f926020809301838601378301015290565b906040820190151582526020606081936040838201528551809452019301915f5b82811061259a575050505090565b83518552938101939281019260010161258c565b600319606091011261035b57600435801515810361035b579060243573ffffffffffffffffffffffffffffffffffffffff8116810361035b579060443590565b90604060031983011261035b57600435801515810361035b57916024359067ffffffffffffffff821161035b576126279160040161248b565b90565b8181029291811591840414171561263d57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818110612675575050565b5f815560010161266a565b3573ffffffffffffffffffffffffffffffffffffffff8116810361035b5790565b9080601f8301121561035b578151906020916126bc81612473565b936126ca6040519586612432565b81855260208086019260051b82010192831161035b57602001905b8282106126f3575050505090565b815173ffffffffffffffffffffffffffffffffffffffff8116810361035b5781529083019083016126e5565b5190811515820361035b57565b9080601f8301121561035b5781519060209161274781612473565b936127556040519586612432565b81855260208086019260051b82010192831161035b57602001905b82821061277e575050505090565b81518152908301908301612770565b9160808383031261035b5782519067ffffffffffffffff9182811161035b57836127b89186016126a1565b936020938482015184811161035b57820181601f8201121561035b5780516127df81612473565b916040976127ef89519485612432565b8284528084018160608095028401019286841161035b578201905b8382106128445750505050509482015184811161035b578161282d91840161272c565b93606083015190811161035b57612627920161272c565b848288031261035b578a51908582018281108c8211176123f1578c528251600281101561035b578252838301519073ffffffffffffffffffffffffffffffffffffffff8216820361035b5782859283899501528d6128a381870161271f565b9082015281520191019061280a565b80518210156128c65760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b9190820391821161263d57565b9190820180921161263d57565b905f9073ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000169261014085019061295882612680565b9060408051947f67e0e0760000000000000000000000000000000000000000000000000000000086528060049416848701525f866024818b5afa958615610ab3575f905f97613102575b506129ac86612680565b95828451977f535cfd8a00000000000000000000000000000000000000000000000000000000895216868801525f876024818d5afa968715610d33575f976130bc575b506129f990612680565b93828451957f7e361bde00000000000000000000000000000000000000000000000000000000875216868601525f856024818d5afa958615610d33575f955f9761305f575b505f5b8351811015612b4f578c85612a65602082612a5c868a6128b2565b51169301612680565b1603612ae65760a08d0135612a7a828b6128b2565b518103612ad057612aa190612a8f838a6128b2565b51612a9a848c6128b2565b5191613961565b612aab828c6128b2565b5103612abb576001905b01612a41565b505f9b61010001359a50505050505050505050565b505f9c61010001359b5050505050505050505050565b8c85612af78882612a5c868a6128b2565b1614612b06575b600190612ab5565b60c08d0135612b15828b6128b2565b518103612ad057612b2a90612a8f838a6128b2565b612b34828c6128b2565b5114612afe57505f9b61010001359a50505050505050505050565b509650979893505097945091506101008401359660035415155f14612d445750670de0b6b3a7640000612b846003548961262a565b049081612bb1575b5050505060e0905b013515159081612ba357509190565b60ff91505460201c16159190565b909192968435600281101561035b57612c8a5782612bce916128f3565b96612bda848601612680565b823b15612c865784517fae63932900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911691810191825230602083015260408201939093529192918591849182908490829060600103925af1908115612c7d5750908391612c65575b505060e0905b905f8080612b8c565b612c6e9061241e565b612c7957815f612c56565b5080fd5b513d85823e3d90fd5b8680fd5b82612c989198949398612900565b96612ca560208601612680565b91803b1561035b5783517fae63932900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909316948301948552306020860152604085019190915290925f91849182908490829060600103925af1908115612d3b5750612d27575b5060e090612c5c565b612d3291925061241e565b5f9060e0612d1e565b513d5f823e3d90fd5b909291825480612d5c575b505050505060e090612b94565b612d6f670de0b6b3a7640000918a61262a565b048015612d4f5790919293978535600281101561035b578290612f2a57612d9591612900565b9760ff60025460381c16612db7575b505050505060e0905b905f808080612d4f565b82860193612dc485612680565b1694835180967fa9059cbb0000000000000000000000000000000000000000000000000000000082526020978891815f81612e258a8a8a84016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af18015612f2057908794939291612ee1575b505f612e48612e9f97612680565b918651978895869485937f15afd40900000000000000000000000000000000000000000000000000000000855284016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af1908115612d3b5750612eb8575b808080612da4565b813d8311612eda575b612ecb8183612432565b8101031261035b575f80612eb0565b503d612ec1565b9384813d8311612f19575b612ef68183612432565b8101031261035b575f612e48612e9f97612f108a9761271f565b50975050612e3a565b503d612eec565b85513d5f823e3d90fd5b612f33916128f3565b9760ff60025460381c16612f4f575b505050505060e090612dad565b60209485870194612f5f86612680565b1686855180927fa9059cbb000000000000000000000000000000000000000000000000000000008252815f81612fbb8a8a8a84016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af18015612f2057908794939291613020575b505f612e48612fde97612680565b03925af1908115612d3b5750612ff7575b808080612f42565b813d8311613019575b61300a8183612432565b8101031261035b575f80612fef565b503d613000565b9384813d8311613058575b6130358183612432565b8101031261035b575f612e48612fde9761304f8a9761271f565b50975050612fd0565b503d61302b565b955095503d805f873e6130728187612432565b850194848187031261035b5780519567ffffffffffffffff9687811161035b578161309e91840161272c565b96602083015190811161035b576130b5920161272c565b955f612a3e565b9096503d805f833e6130ce8183612432565b81019060208183031261035b5780519167ffffffffffffffff831161035b576129f9926130fb920161272c565b96906129ef565b90506131219196503d805f833e6131198183612432565b81019061278d565b97929150966129a2565b60405190816001805490818352602090602084019260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6925f905b82821061318357505050505090613181910383612432565b565b84548652889650948501949383019390830190613169565b91909160ff5f5460481c1661355a5773ffffffffffffffffffffffffffffffffffffffff92837f0000000000000000000000000000000000000000000000000000000000000000169060409485517f67e0e076000000000000000000000000000000000000000000000000000000008152816004951660048201525f81602481875afa908115613550575f91613534575b50600780541561334a575f5b845181101561333457670de0b6b3a764000061326061325783886128b2565b5184549061262a565b049081613272575b6001915001613238565b6132868261328083896128b2565b516128f3565b61329082886128b2565b528461329c82866128b2565b5116873b1561035b578a517fae63932900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116818a019081523060208201526040810193909352915f90839081906060010381838b5af191821561332a5760019261331b575b50613268565b6133249061241e565b5f613315565b8a513d5f823e3d90fd5b5050505093905060ff91505b5f54901c16159190565b5091949395929060088054613369575b5050505060ff91929350613340565b5f9795975b875181101561351d5783670de0b6b3a764000061339761338e848c6128b2565b5185549061262a565b04846133a384896128b2565b5116816133b6575b50505060010161336e565b88517fa9059cbb0000000000000000000000000000000000000000000000000000000081528a818061341186602098899584016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03815f865af1801561332a57908492916134ea575b508b613446866134408661343a83866128b2565b51612900565b926128b2565b528a61349f8b5194859384937f15afd40900000000000000000000000000000000000000000000000000000000855284016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03815f8a5af180156134e0576134b7575b85916133ab565b813d83116134d9575b6134ca8183612432565b8101031261035b575f806134b0565b503d6134c0565b88513d5f823e3d90fd5b9182813d8311613516575b6134ff8183612432565b8101031261035b57613511849261271f565b613426565b503d6134f5565b505050505060ff91509291928392915f808061335a565b61354891503d805f833e6131198183612432565b91505061322c565b87513d5f823e3d90fd5b506001915061262761312b565b90600182811c921680156135ae575b602083101461358157565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691613576565b9081602091031261035b575173ffffffffffffffffffffffffffffffffffffffff8116810361035b5790565b91909160ff5f5460481c1661355a5773ffffffffffffffffffffffffffffffffffffffff92837f0000000000000000000000000000000000000000000000000000000000000000169060409485517f67e0e076000000000000000000000000000000000000000000000000000000008152816004951660048201525f81602481875afa908115613550575f91613945575b50600580541561377a575f5b845181101561376457670de0b6b3a76400006136a061325783886128b2565b0490816136b2575b6001915001613681565b6136c08261343a83896128b2565b6136ca82886128b2565b52846136d682866128b2565b5116873b1561035b578a517fae63932900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116818a019081523060208201526040810193909352915f90839081906060010381838b5af191821561332a57600192613755575b506136a8565b61375e9061241e565b5f61374f565b50505050935050505b60ff5f5460301c16159190565b509194959290600692600654613797575b5050505050509061376d565b5f5b87518110156139335783836137ae83856128b2565b5116670de0b6b3a76400006137cf6137c6858d6128b2565b5189549061262a565b0490816137e2575b505050600101613799565b88517fa9059cbb0000000000000000000000000000000000000000000000000000000081528a818061383d86602098899584016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03815f865af1801561332a5790849291613900575b508b613866866134408661328083866128b2565b528a6138bf8b5194859384937f15afd40900000000000000000000000000000000000000000000000000000000855284016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03815f8a5af180156134e0576138d7575b85916137d7565b813d83116138f9575b6138ea8183612432565b8101031261035b575f806138d0565b503d6138e0565b9182813d831161392c575b6139158183612432565b8101031261035b57613927849261271f565b613852565b503d61390b565b505050505050505f808080808061378b565b61395991503d805f833e6131198183612432565b915050613675565b9161396b9161262a565b90670de0b6b3a76400009081810291818304149015171561263d578115613990570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff600b5416600c54813b1561035b575f916024839260405194859384927fa1cfa04100000000000000000000000000000000000000000000000000000000845260048401525af18015613a2e57613a255750565b6131819061241e565b6040513d5f823e3d90fd5b6010549081815260208091019160105f527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae672915f905b828210613a7d575050505090565b835485529384019360019384019390910190613a6f565b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001681600e541691604051927fca4f28030000000000000000000000000000000000000000000000000000000084528060048501525f84602481865afa938415613a2e575f94613bd4575b50823b1561035b5790926040519384927fd8f4cf3c0000000000000000000000000000000000000000000000000000000084526084840190600485015260806024850152825180915260a48401926020809101925f905b838210613bb757505050505091815f81613ba68296613b976003199182858203016044860152613a39565b90838203016064840152613a39565b03925af18015613a2e57613a255750565b845181168652889650948201949382019360019190910190613b6c565b9093503d805f833e613be68183612432565b810160208282031261035b57815167ffffffffffffffff811161035b57613c0d92016126a1565b925f613b15565b90613c515750805115613c2957805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580613ca4575b613c62575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15613c5a56fea2646970667358221220968aa2520cfcce4714119156a5598b6d58c007d3b1a3f98fe2b4528a947503ad64736f6c634300081b0033","opcodes":"PUSH1 0xA0 CALLVALUE PUSH2 0x9A JUMPI PUSH1 0x1F PUSH2 0x3D96 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x9E JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x9A JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x9A JUMPI PUSH1 0x80 MSTORE PUSH8 0x100000000000000 PUSH8 0xFF00000000000000 NOT PUSH1 0x2 SLOAD AND OR PUSH1 0x2 SSTORE PUSH1 0x40 MLOAD PUSH2 0x3CE3 SWAP1 DUP2 PUSH2 0xB3 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 DUP2 DUP2 PUSH2 0x2928 ADD MSTORE DUP2 DUP2 PUSH2 0x31C3 ADD MSTORE DUP2 DUP2 PUSH2 0x360C ADD MSTORE PUSH2 0x3AAC ADD MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x16 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH1 0xE0 PUSH0 CALLDATALOAD DUP2 SHR SWAP3 DUP4 PUSH3 0x5B449C EQ PUSH2 0x235D JUMPI POP DUP3 PUSH3 0xD332FD EQ PUSH2 0x2337 JUMPI DUP3 PUSH4 0x2273467 EQ PUSH2 0x2319 JUMPI DUP3 PUSH4 0x39388BA EQ PUSH2 0x22C4 JUMPI DUP3 PUSH4 0xB89F182 EQ PUSH2 0x2136 JUMPI DUP3 PUSH4 0xC54B1DE EQ PUSH2 0x2029 JUMPI DUP3 PUSH4 0x1064DFDD EQ PUSH2 0x1FCD JUMPI DUP3 PUSH4 0x18B6EB55 EQ PUSH2 0x1F72 JUMPI DUP3 PUSH4 0x1C149E28 EQ PUSH2 0x1EFB JUMPI DUP3 PUSH4 0x214FF4C5 EQ PUSH2 0x1EE3 JUMPI DUP3 PUSH4 0x232B59F7 EQ PUSH2 0x1EAA JUMPI DUP3 PUSH4 0x2352C2ED EQ PUSH2 0x1E8D JUMPI DUP3 PUSH4 0x2754888D EQ PUSH2 0x1DE8 JUMPI DUP3 PUSH4 0x2E55A841 EQ PUSH2 0x1DD0 JUMPI DUP3 PUSH4 0x31378F4F EQ PUSH2 0x1DAD JUMPI DUP3 PUSH4 0x335D4126 EQ PUSH2 0x1D22 JUMPI DUP3 PUSH4 0x3478DB73 EQ PUSH2 0x1CCB JUMPI DUP3 PUSH4 0x34A168EC EQ PUSH2 0x1CB3 JUMPI DUP3 PUSH4 0x34E3A8C3 EQ PUSH2 0x1BBA JUMPI DUP3 PUSH4 0x35F7290E EQ PUSH2 0x1B95 JUMPI DUP3 PUSH4 0x38BE241D EQ PUSH2 0x1B3B JUMPI DUP3 PUSH4 0x3D05719A EQ PUSH2 0x1B15 JUMPI DUP3 PUSH4 0x40DC21D4 EQ PUSH2 0x1AF0 JUMPI DUP3 PUSH4 0x423EF816 EQ PUSH2 0x18D5 JUMPI DUP3 PUSH4 0x4392312A EQ PUSH2 0x18B7 JUMPI DUP3 PUSH4 0x4437152A EQ PUSH2 0x185B JUMPI DUP3 PUSH4 0x45421EC7 EQ PUSH2 0x16C4 JUMPI DUP3 PUSH4 0x4F036756 EQ PUSH2 0x16A1 JUMPI DUP3 PUSH4 0x5211FA77 EQ PUSH2 0x1344 JUMPI DUP3 PUSH4 0x5351B230 EQ PUSH2 0x131F JUMPI DUP3 PUSH4 0x5991DE93 EQ PUSH2 0x1295 JUMPI DUP3 PUSH4 0x5CD00746 EQ PUSH2 0x1273 JUMPI DUP3 PUSH4 0x677DB20E EQ PUSH2 0x124E JUMPI DUP3 PUSH4 0x68C6DB6A EQ PUSH2 0x1220 JUMPI DUP3 PUSH4 0x6A9A0611 EQ PUSH2 0x11E9 JUMPI DUP3 PUSH4 0x6E7D75E5 EQ PUSH2 0x1195 JUMPI DUP3 PUSH4 0x71EFF9D2 EQ PUSH2 0x109C JUMPI DUP3 PUSH4 0x7B695D10 EQ PUSH2 0x104A JUMPI DUP3 PUSH4 0x80C554C1 EQ PUSH2 0x1024 JUMPI DUP3 PUSH4 0x82FB5D21 EQ PUSH2 0xFD1 JUMPI DUP3 PUSH4 0x87AC5691 EQ PUSH2 0xF81 JUMPI DUP3 PUSH4 0x8F5FAE62 EQ PUSH2 0xF3A JUMPI DUP3 PUSH4 0x93C4B286 EQ PUSH2 0xE16 JUMPI DUP3 PUSH4 0x976907CC EQ PUSH2 0xD63 JUMPI DUP3 PUSH4 0x9F94C522 EQ PUSH2 0xD3D JUMPI DUP3 PUSH4 0xA0E8F5AC EQ PUSH2 0xC31 JUMPI DUP3 PUSH4 0xA5098F10 EQ PUSH2 0xC0E JUMPI DUP3 PUSH4 0xA55E47BE EQ PUSH2 0xBBE JUMPI DUP3 PUSH4 0xA975DDA0 EQ PUSH2 0xB9B JUMPI DUP3 PUSH4 0xAF72105D EQ PUSH2 0xB75 JUMPI DUP3 PUSH4 0xB127E385 EQ PUSH2 0xB49 JUMPI DUP3 PUSH4 0xB298157B EQ PUSH2 0xB26 JUMPI DUP3 PUSH4 0xB3A763B9 EQ PUSH2 0xAD5 JUMPI DUP3 PUSH4 0xB445FBE7 EQ PUSH2 0xABD JUMPI DUP3 PUSH4 0xBA5F9F40 EQ PUSH2 0x90D JUMPI DUP3 PUSH4 0xBD825F6B EQ PUSH2 0x8EF JUMPI DUP3 PUSH4 0xC25DADE8 EQ PUSH2 0x888 JUMPI DUP3 PUSH4 0xD3FCA637 EQ PUSH2 0x839 JUMPI DUP3 PUSH4 0xD4F83182 EQ PUSH2 0x7E4 JUMPI DUP3 PUSH4 0xD77153A7 EQ PUSH2 0x69C JUMPI POP DUP2 PUSH4 0xDA09AACF EQ PUSH2 0x684 JUMPI DUP2 PUSH4 0xDC7776CA EQ PUSH2 0x641 JUMPI DUP2 PUSH4 0xDDA1C15B EQ PUSH2 0x629 JUMPI DUP2 PUSH4 0xE326F03A EQ PUSH2 0x605 JUMPI DUP2 PUSH4 0xE4C593D7 EQ PUSH2 0x5E2 JUMPI DUP2 PUSH4 0xE5E3B67E EQ PUSH2 0x5B4 JUMPI DUP2 PUSH4 0xE62EECDD EQ PUSH2 0x528 JUMPI DUP2 PUSH4 0xE908E85D EQ PUSH2 0x50B JUMPI DUP2 PUSH4 0xE9F7C591 EQ PUSH2 0x3C4 JUMPI DUP2 PUSH4 0xEB499270 EQ PUSH2 0x3A7 JUMPI DUP2 PUSH4 0xF5279D9C EQ PUSH2 0x383 JUMPI DUP2 PUSH4 0xF8B5EF85 EQ PUSH2 0x35F JUMPI POP PUSH4 0xFC6E0F59 EQ PUSH2 0x344 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI DUP1 CALLDATALOAD SWAP1 SSTORE STOP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH0 SLOAD PUSH1 0x48 SHR AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH0 SLOAD PUSH1 0x8 SHR AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0x7 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH2 0x140 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0x3E0 DUP2 MLOAD PUSH2 0x23D4 JUMP JUMPDEST PUSH2 0x3E8 PUSH2 0x237F JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x35B JUMPI PUSH1 0x44 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x35B JUMPI PUSH1 0x64 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x35B JUMPI PUSH1 0x84 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x35B JUMPI PUSH1 0xA4 CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP1 SWAP3 SUB PUSH2 0x35B JUMPI PUSH1 0xC4 CALLDATALOAD SWAP3 DUP4 ISZERO ISZERO DUP1 SWAP5 SUB PUSH2 0x35B JUMPI PUSH1 0xE4 CALLDATALOAD SWAP5 DUP6 ISZERO ISZERO DUP1 SWAP7 SUB PUSH2 0x35B JUMPI PUSH2 0x104 CALLDATALOAD SWAP7 DUP8 ISZERO ISZERO DUP1 SWAP9 SUB PUSH2 0x35B JUMPI PUSH2 0x124 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x35B JUMPI PUSH1 0x13 SLOAD SWAP1 PUSH1 0x48 SHL PUSH10 0xFF000000000000000000 AND SWAP11 ISZERO ISZERO PUSH1 0xFF AND SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000 AND OR SWAP1 PUSH1 0x8 SHL PUSH2 0xFF00 AND OR SWAP1 PUSH1 0x10 SHL PUSH3 0xFF0000 AND OR SWAP1 PUSH1 0x18 SHL PUSH4 0xFF000000 AND OR SWAP1 PUSH1 0x20 SHL PUSH5 0xFF00000000 AND OR SWAP1 PUSH1 0x28 SHL PUSH6 0xFF0000000000 AND OR SWAP1 PUSH1 0x30 SHL PUSH7 0xFF000000000000 AND OR SWAP1 PUSH1 0x38 SHL PUSH8 0xFF00000000000000 AND OR SWAP2 SHL PUSH9 0xFF0000000000000000 AND OR OR PUSH1 0x13 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0x6 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x54B CALLDATASIZE PUSH2 0x25AE JUMP JUMPDEST SWAP3 SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF PUSH4 0xFF000000 PUSH1 0x2 SLOAD SWAP3 ISZERO ISZERO PUSH1 0x18 SHL AND SWAP2 AND OR PUSH1 0x2 SSTORE AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0xB SLOAD AND OR PUSH1 0xB SSTORE PUSH1 0xC SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0x5CD PUSH2 0x237F JUMP JUMPDEST ISZERO ISZERO PUSH1 0xFF PUSH1 0xFF NOT PUSH1 0x9 SLOAD AND SWAP2 AND OR PUSH1 0x9 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x2 SLOAD SWAP1 MLOAD PUSH1 0x20 SWAP2 DUP3 SHR PUSH1 0xFF AND ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH0 SLOAD PUSH1 0x10 SHR AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI CALLDATALOAD PUSH1 0x6 SSTORE STOP JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x66F PUSH2 0x238E JUMP JUMPDEST AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 MSTORE KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI CALLDATALOAD PUSH1 0x3 SSTORE STOP JUMPDEST SWAP1 CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI DUP1 MLOAD PUSH2 0x140 SWAP3 PUSH2 0x6BC DUP3 PUSH2 0x23D4 JUMP JUMPDEST PUSH0 DUP3 MSTORE PUSH0 PUSH1 0x20 DUP4 ADD MSTORE PUSH0 DUP4 DUP4 ADD MSTORE PUSH0 PUSH1 0x60 DUP4 ADD MSTORE PUSH0 PUSH1 0x80 DUP4 ADD MSTORE PUSH0 PUSH1 0xA0 DUP4 ADD MSTORE PUSH0 PUSH1 0xC0 DUP4 ADD MSTORE PUSH0 DUP2 DUP4 ADD MSTORE PUSH2 0x100 PUSH0 DUP2 DUP5 ADD MSTORE PUSH0 PUSH2 0x120 DUP1 SWAP5 ADD MSTORE DUP4 MLOAD SWAP4 PUSH2 0x703 DUP6 PUSH2 0x23D4 JUMP JUMPDEST PUSH1 0x13 SLOAD SWAP3 DUP4 DUP1 SWAP3 DUP2 DUP4 DUP7 PUSH1 0xFF SWAP4 DUP5 DUP5 AND ISZERO ISZERO SWAP12 DUP13 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP13 DUP14 DUP8 DUP8 PUSH1 0x8 SHR AND ISZERO ISZERO SWAP1 MSTORE DUP7 DUP14 DUP5 DUP5 ADD SWAP4 DUP3 DUP10 PUSH1 0x10 SHR AND ISZERO ISZERO DUP6 MSTORE DUP3 PUSH1 0x60 DUP3 ADD SWAP8 DUP2 DUP12 PUSH1 0x18 SHR AND ISZERO ISZERO DUP10 MSTORE DUP2 PUSH1 0x80 DUP5 ADD SWAP11 DUP2 DUP14 PUSH1 0x20 SHR AND ISZERO ISZERO DUP13 MSTORE PUSH1 0xA0 DUP6 ADD SWAP13 DUP14 DUP4 DUP3 PUSH1 0x28 SHR AND ISZERO ISZERO SWAP1 MSTORE PUSH1 0xC0 DUP7 ADD SWAP15 DUP16 SWAP2 PUSH1 0x30 SHR AND ISZERO ISZERO SWAP1 MSTORE DUP5 ADD SWAP14 PUSH1 0x38 SHR AND ISZERO ISZERO DUP14 MSTORE DUP3 ADD SWAP14 DUP8 SHR AND ISZERO ISZERO DUP14 MSTORE ADD SWAP13 PUSH1 0x48 SHR AND ISZERO ISZERO DUP13 MSTORE PUSH1 0x20 DUP4 MLOAD SWAP15 DUP16 SWAP3 DUP4 MSTORE MLOAD ISZERO ISZERO SWAP2 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP13 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x60 DUP12 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x80 DUP11 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xA0 DUP10 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xC0 DUP9 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP7 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP5 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0x7FD PUSH2 0x237F JUMP JUMPDEST ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF PUSH8 0xFF00000000000000 PUSH0 SLOAD SWAP3 PUSH1 0x38 SHL AND SWAP2 AND OR PUSH0 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0x852 PUSH2 0x237F JUMP JUMPDEST ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF PUSH2 0xFF00 PUSH0 SLOAD SWAP3 PUSH1 0x8 SHL AND SWAP2 AND OR PUSH0 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x8AB CALLDATASIZE PUSH2 0x25AE JUMP JUMPDEST SWAP3 SWAP2 PUSH1 0xFF PUSH1 0xFF NOT PUSH1 0x2 SLOAD AND SWAP2 ISZERO ISZERO AND OR PUSH1 0x2 SSTORE AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0xB SLOAD AND OR PUSH1 0xB SSTORE PUSH1 0xC SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0x8 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0x927 PUSH2 0x238E JUMP JUMPDEST SWAP2 PUSH2 0x930 PUSH2 0x23B1 JUMP JUMPDEST POP DUP1 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x35B JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x95B SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x248B JUMP JUMPDEST POP PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x973 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x248B JUMP JUMPDEST POP PUSH1 0xC4 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x98B SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0x2525 JUMP JUMPDEST POP PUSH1 0x11 SLOAD SWAP1 PUSH1 0xFF DUP3 AND ISZERO PUSH2 0x9E6 JUMPI JUMPDEST POP POP PUSH1 0x20 SWAP2 POP PUSH1 0xFF PUSH1 0x2 SLOAD PUSH1 0x18 SHR AND PUSH2 0x9D9 JUMPI JUMPDEST PUSH1 0xFF PUSH1 0x2 SLOAD PUSH1 0x30 SHR AND PUSH2 0x9CC JUMPI JUMPDEST PUSH1 0xFF PUSH0 SLOAD PUSH1 0x38 SHR AND ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x9D4 PUSH2 0x3A94 JUMP JUMPDEST PUSH2 0x9BC JUMP JUMPDEST PUSH2 0x9E1 PUSH2 0x39BD JUMP JUMPDEST PUSH2 0x9AE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 PUSH1 0x20 SWAP2 DUP5 MLOAD DUP1 SWAP7 DUP2 SWAP4 PUSH32 0x5E01EB5A00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xAB3 JUMPI PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x20 SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP3 PUSH0 SWAP2 PUSH2 0xA86 JUMPI JUMPDEST POP PUSH1 0x8 SHL AND SWAP2 AND OR PUSH1 0x11 SSTORE PUSH0 DUP1 PUSH2 0x99A JUMP JUMPDEST PUSH2 0xAA6 SWAP2 POP DUP7 RETURNDATASIZE DUP9 GT PUSH2 0xAAC JUMPI JUMPDEST PUSH2 0xA9E DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x35B8 JUMP JUMPDEST PUSH0 PUSH2 0xA74 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xA94 JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI CALLDATALOAD PUSH1 0x7 SSTORE STOP JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0xAEE PUSH2 0x237F JUMP JUMPDEST ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF PUSH4 0xFF000000 PUSH0 SLOAD SWAP3 PUSH1 0x18 SHL AND SWAP2 AND OR PUSH0 SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH1 0x2 SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0xB62 PUSH2 0x237F JUMP JUMPDEST ISZERO ISZERO PUSH1 0xFF PUSH1 0xFF NOT PUSH0 SLOAD AND SWAP2 AND OR PUSH0 SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH1 0x2 SLOAD PUSH1 0x10 SHR AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH0 SLOAD DUP2 MLOAD SWAP2 SHR PUSH1 0xFF AND ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 SWAP1 RETURN JUMPDEST POP DUP3 CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI CALLDATALOAD SWAP1 PUSH1 0x1 SLOAD DUP3 LT ISZERO PUSH2 0x35B JUMPI PUSH1 0x20 SWAP2 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 ADD SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH0 SLOAD SWAP1 MLOAD PUSH1 0x20 SWAP2 DUP3 SHR PUSH1 0xFF AND ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x3 NOT SWAP1 PUSH1 0x60 DUP3 CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI DUP4 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x35B JUMPI DUP3 CALLDATASIZE SUB ADD SLT PUSH2 0x35B JUMPI PUSH2 0xC6A PUSH2 0x23B1 JUMP JUMPDEST POP PUSH1 0xD SLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 PUSH1 0xF SLOAD AND SWAP3 DUP4 PUSH2 0xCB2 JUMPI JUMPDEST PUSH0 SLOAD DUP6 MLOAD PUSH1 0x10 SWAP2 SWAP1 SWAP2 SHR PUSH1 0xFF AND ISZERO DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE DUP1 PUSH1 0x40 DUP2 ADD JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP3 PUSH2 0xCC1 PUSH1 0xA4 PUSH1 0x20 SWAP4 ADD PUSH2 0x2680 JUMP JUMPDEST AND DUP6 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0x5E01EB5A00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xD33 JUMPI PUSH0 SWAP2 PUSH2 0xD14 JUMPI JUMPDEST POP AND EQ PUSH2 0xD0C JUMPI JUMPDEST PUSH0 DUP1 DUP1 DUP1 PUSH2 0xC91 JUMP JUMPDEST PUSH0 SWAP2 POP PUSH2 0xD03 JUMP JUMPDEST PUSH2 0xD2D SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xAAC JUMPI PUSH2 0xA9E DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST PUSH0 PUSH2 0xCFB JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH1 0x2 SLOAD PUSH1 0x18 SHR AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x35B JUMPI PUSH2 0x100 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0xD7F PUSH2 0x238E JUMP JUMPDEST POP PUSH2 0xD88 PUSH2 0x23B1 JUMP JUMPDEST SWAP2 PUSH1 0x5 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x35B JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 PUSH1 0x64 CALLDATALOAD DUP5 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0xDB5 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x248B JUMP JUMPDEST POP PUSH1 0x84 CALLDATALOAD DUP5 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0xDCD SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x248B JUMP JUMPDEST SWAP1 PUSH1 0xC4 CALLDATALOAD DUP6 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0xDE5 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x248B JUMP JUMPDEST POP PUSH1 0xE4 CALLDATALOAD SWAP5 DUP6 GT PUSH2 0x35B JUMPI PUSH2 0xE03 PUSH2 0xE09 SWAP4 PUSH2 0xCAE SWAP7 CALLDATASIZE SWAP2 ADD PUSH2 0x2525 JUMP JUMPDEST POP PUSH2 0x35E4 JUMP JUMPDEST SWAP3 SWAP1 SWAP2 MLOAD SWAP3 DUP4 SWAP3 DUP4 PUSH2 0x256B JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x35B JUMPI PUSH2 0xE25 CALLDATASIZE PUSH2 0x25EE JUMP JUMPDEST SWAP2 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF PUSH6 0xFF0000000000 PUSH1 0x2 SLOAD SWAP3 ISZERO ISZERO PUSH1 0x28 SHL AND SWAP2 AND OR PUSH1 0x2 SSTORE DUP2 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xF0E JUMPI PUSH9 0x10000000000000000 DUP3 GT PUSH2 0xF0E JUMPI POP PUSH1 0x10 SLOAD DUP2 PUSH1 0x10 SSTORE DUP1 DUP3 LT PUSH2 0xED8 JUMPI JUMPDEST POP PUSH1 0x20 DUP1 SWAP3 ADD PUSH1 0x10 PUSH0 MSTORE PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0xEA6 JUMPI STOP JUMPDEST DUP2 MLOAD PUSH32 0x1B6847DC741A1B0CD08D278845F9D819D87B734759AFB55FE2DE5CB82A9AE672 DUP3 ADD SSTORE SWAP1 DUP4 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xE9D JUMP JUMPDEST PUSH2 0xF08 SWAP1 DUP3 PUSH32 0x1B6847DC741A1B0CD08D278845F9D819D87B734759AFB55FE2DE5CB82A9AE672 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x266A JUMP JUMPDEST DUP3 PUSH2 0xE91 JUMP JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xF69 PUSH2 0x238E JUMP JUMPDEST AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 MSTORE KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE STOP JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0xF9A PUSH2 0x237F JUMP JUMPDEST ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF PUSH3 0xFF0000 PUSH0 SLOAD SWAP3 PUSH1 0x10 SHL AND SWAP2 AND OR PUSH0 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0xFEA PUSH2 0x237F JUMP JUMPDEST ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF PUSH6 0xFF0000000000 PUSH0 SLOAD SWAP3 PUSH1 0x28 SHL AND SWAP2 AND OR PUSH0 SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH1 0x2 SLOAD PUSH1 0x38 SHR AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0x1063 PUSH2 0x237F JUMP JUMPDEST ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF PUSH5 0xFF00000000 PUSH0 SLOAD SWAP3 PUSH1 0x20 SHL AND SWAP2 AND OR PUSH0 SSTORE PUSH0 DUP1 RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x35B JUMPI PUSH2 0x10AB CALLDATASIZE PUSH2 0x25EE JUMP JUMPDEST SWAP2 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF PUSH7 0xFF000000000000 PUSH1 0x2 SLOAD SWAP3 ISZERO ISZERO PUSH1 0x30 SHL AND SWAP2 AND OR PUSH1 0x2 SSTORE DUP2 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xF0E JUMPI PUSH9 0x10000000000000000 DUP3 GT PUSH2 0xF0E JUMPI POP PUSH1 0x10 SLOAD DUP2 PUSH1 0x10 SSTORE DUP1 DUP3 LT PUSH2 0x115F JUMPI JUMPDEST POP PUSH1 0x20 DUP1 SWAP3 ADD PUSH1 0x10 PUSH0 MSTORE PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x112D JUMPI STOP JUMPDEST DUP2 MLOAD PUSH32 0x1B6847DC741A1B0CD08D278845F9D819D87B734759AFB55FE2DE5CB82A9AE672 DUP3 ADD SSTORE SWAP1 DUP4 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1124 JUMP JUMPDEST PUSH2 0x118F SWAP1 DUP3 PUSH32 0x1B6847DC741A1B0CD08D278845F9D819D87B734759AFB55FE2DE5CB82A9AE672 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x266A JUMP JUMPDEST DUP3 PUSH2 0x1118 JUMP JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0x11AE PUSH2 0x237F JUMP JUMPDEST ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF PUSH7 0xFF000000000000 PUSH0 SLOAD SWAP3 PUSH1 0x30 SHL AND SWAP2 AND OR PUSH0 SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x11 SLOAD PUSH1 0x8 SHR AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0x1239 PUSH2 0x237F JUMP JUMPDEST ISZERO ISZERO PUSH1 0xFF PUSH1 0xFF NOT PUSH1 0x11 SLOAD AND SWAP2 AND OR PUSH1 0x11 SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH0 SLOAD PUSH1 0x38 SHR AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x12B8 CALLDATASIZE PUSH2 0x25AE JUMP JUMPDEST SWAP3 SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF PUSH2 0xFF00 PUSH1 0x2 SLOAD SWAP3 ISZERO ISZERO PUSH1 0x8 SHL AND SWAP2 AND OR PUSH1 0x2 SSTORE AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0xB SLOAD AND OR PUSH1 0xB SSTORE PUSH1 0xC SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH0 SLOAD PUSH1 0x18 SHR AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x3 NOT SWAP1 DUP3 DUP3 CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI DUP4 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x35B JUMPI DUP3 CALLDATASIZE SUB ADD SLT PUSH2 0x35B JUMPI PUSH2 0x137C PUSH2 0x23B1 JUMP JUMPDEST POP DUP3 PUSH1 0x11 SLOAD SWAP2 PUSH1 0xFF DUP4 AND ISZERO PUSH2 0x15CF JUMPI JUMPDEST POP POP POP PUSH1 0xFF PUSH1 0x2 SLOAD AND PUSH2 0x15C2 JUMPI JUMPDEST PUSH1 0x2 SLOAD SWAP2 PUSH1 0xFF PUSH1 0x20 SWAP4 DUP5 SHR AND PUSH2 0x15B5 JUMPI JUMPDEST PUSH1 0x9 SLOAD SWAP1 PUSH1 0xFF DUP3 AND PUSH2 0x13CA JUMPI JUMPDEST POP POP PUSH1 0xFF PUSH0 SLOAD PUSH1 0x18 SHR AND ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH1 0x8 SHR AND SWAP2 DUP3 ISZERO PUSH2 0x1559 JUMPI PUSH1 0xA SLOAD SWAP2 PUSH2 0x13F8 DUP4 PUSH2 0x3567 JUMP JUMPDEST ISZERO PUSH2 0x14FD JUMPI POP PUSH1 0xFF NOT DUP1 SWAP2 AND PUSH1 0x9 SSTORE DUP4 MLOAD SWAP1 DUP6 PUSH0 SWAP2 PUSH2 0x1416 DUP6 PUSH2 0x3567 JUMP JUMPDEST SWAP1 DUP2 DUP6 MSTORE DUP3 DUP6 ADD SWAP6 PUSH1 0x1 SWAP2 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x14E4 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x148F JUMPI JUMPDEST POP POP POP PUSH2 0x147F SWAP4 SWAP3 DUP3 PUSH2 0x144E PUSH0 SWAP5 DUP6 SWAP5 SUB DUP3 PUSH2 0x2432 JUMP JUMPDEST MLOAD SWAP1 DUP3 DUP6 GAS CALL RETURNDATASIZE ISZERO PUSH2 0x1487 JUMPI RETURNDATASIZE SWAP2 PUSH2 0x1465 DUP4 PUSH2 0x24EB JUMP JUMPDEST SWAP3 PUSH2 0x1472 DUP7 MLOAD SWAP5 DUP6 PUSH2 0x2432 JUMP JUMPDEST DUP4 MSTORE RETURNDATASIZE PUSH0 DUP8 DUP6 ADD RETURNDATACOPY PUSH2 0x3C14 JUMP JUMPDEST POP PUSH0 DUP1 PUSH2 0x13B8 JUMP JUMPDEST PUSH1 0x60 SWAP2 PUSH2 0x3C14 JUMP JUMPDEST PUSH1 0xA PUSH0 SWAP1 DUP2 MSTORE SWAP3 SWAP4 POP PUSH32 0xC65A7BB8D6351C1CF70C95A316CC6A92839C986682D98BC35F958F4883F9D2A8 JUMPDEST DUP3 DUP5 LT PUSH2 0x14D1 JUMPI POP POP POP DUP3 ADD ADD DUP6 DUP3 PUSH2 0x144E PUSH2 0x1437 JUMP JUMPDEST DUP1 SLOAD DUP7 DUP6 ADD DUP7 ADD MSTORE SWAP3 DUP5 ADD SWAP3 DUP2 ADD PUSH2 0x14BA JUMP JUMPDEST AND DUP8 MSTORE POP POP ISZERO ISZERO PUSH1 0x5 SHL DUP4 ADD ADD SWAP1 POP DUP6 DUP3 PUSH2 0x144E PUSH2 0x1437 JUMP JUMPDEST PUSH1 0x64 SWAP1 DUP7 DUP7 MLOAD SWAP2 PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x486F6F6B2063616C6C6461746120697320656D70747900000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x64 DUP3 DUP7 DUP7 MLOAD SWAP2 PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x486F6F6B20636F6E7472616374206E6F74207365740000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH2 0x15BD PUSH2 0x3A94 JUMP JUMPDEST PUSH2 0x13AB JUMP JUMPDEST PUSH2 0x15CA PUSH2 0x39BD JUMP JUMPDEST PUSH2 0x139A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x15F2 PUSH1 0xA4 PUSH1 0x20 SWAP4 ADD PUSH2 0x2680 JUMP JUMPDEST AND DUP5 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0x5E01EB5A00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1697 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP2 PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP2 PUSH0 SWAP2 PUSH2 0x1678 JUMPI JUMPDEST POP PUSH1 0x8 SHL AND SWAP2 AND OR PUSH1 0x11 SSTORE PUSH0 DUP3 DUP2 PUSH2 0x138C JUMP JUMPDEST PUSH2 0x1691 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xAAC JUMPI PUSH2 0xA9E DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST PUSH0 PUSH2 0x1665 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH1 0x11 SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0x16DE PUSH2 0x238E JUMP JUMPDEST SWAP2 PUSH2 0x16E7 PUSH2 0x23B1 JUMP JUMPDEST POP PUSH1 0x5 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x35B JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x1713 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x248B JUMP JUMPDEST POP PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x172B SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x248B JUMP JUMPDEST POP PUSH1 0xC4 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x1743 SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0x2525 JUMP JUMPDEST POP PUSH1 0x11 SLOAD SWAP1 PUSH1 0xFF DUP3 AND ISZERO PUSH2 0x179E JUMPI JUMPDEST POP POP PUSH1 0x20 SWAP2 POP PUSH1 0xFF PUSH1 0x2 SLOAD PUSH1 0x10 SHR AND PUSH2 0x1791 JUMPI JUMPDEST PUSH1 0xFF PUSH1 0x2 SLOAD PUSH1 0x28 SHR AND PUSH2 0x1784 JUMPI JUMPDEST PUSH1 0xFF PUSH0 SLOAD PUSH1 0x28 SHR AND ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x178C PUSH2 0x3A94 JUMP JUMPDEST PUSH2 0x1774 JUMP JUMPDEST PUSH2 0x1799 PUSH2 0x39BD JUMP JUMPDEST PUSH2 0x1766 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 PUSH1 0x20 SWAP2 DUP5 MLOAD DUP1 SWAP7 DUP2 SWAP4 PUSH32 0x5E01EB5A00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xAB3 JUMPI PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x20 SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP3 PUSH0 SWAP2 PUSH2 0x183E JUMPI JUMPDEST POP PUSH1 0x8 SHL AND SWAP2 AND OR PUSH1 0x11 SSTORE PUSH0 DUP1 PUSH2 0x1752 JUMP JUMPDEST PUSH2 0x1855 SWAP2 POP DUP7 RETURNDATASIZE DUP9 GT PUSH2 0xAAC JUMPI PUSH2 0xA9E DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST PUSH0 PUSH2 0x182C JUMP JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1889 PUSH2 0x238E JUMP JUMPDEST AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0xE SLOAD AND OR PUSH1 0xE SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0x3 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0x18EE PUSH2 0x238E JUMP JUMPDEST PUSH1 0x24 SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP4 CALLDATALOAD SWAP2 DUP4 DUP4 GT PUSH2 0x35B JUMPI CALLDATASIZE PUSH1 0x23 DUP5 ADD SLT ISZERO PUSH2 0x35B JUMPI DUP3 ADD CALLDATALOAD SWAP3 DUP4 GT PUSH2 0x35B JUMPI CALLDATASIZE PUSH1 0x24 DUP5 DUP5 ADD ADD GT PUSH2 0x35B JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x9 SLOAD SWAP3 PUSH1 0x8 SHL AND SWAP2 AND OR PUSH1 0x9 SSTORE PUSH2 0x1976 PUSH1 0xA SLOAD PUSH2 0x3567 JUMP JUMPDEST PUSH1 0x1F DUP2 GT PUSH2 0x1A9B JUMPI JUMPDEST POP PUSH0 SWAP3 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0x19DC JUMPI POP SWAP2 DUP2 SWAP3 PUSH0 SWAP3 PUSH2 0x19CE JUMPI JUMPDEST POP POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH1 0x1 SHL SWAP3 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0xA SSTORE PUSH0 DUP1 RETURN JUMPDEST PUSH1 0x24 SWAP3 POP ADD ADD CALLDATALOAD DUP3 DUP1 PUSH2 0x1998 JUMP JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP4 AND SWAP4 PUSH32 0xC65A7BB8D6351C1CF70C95A316CC6A92839C986682D98BC35F958F4883F9D2A8 SWAP3 PUSH0 SWAP1 JUMPDEST DUP7 DUP3 LT PUSH2 0x1A7F JUMPI POP POP DUP4 PUSH1 0x1 SWAP6 LT PUSH2 0x1A44 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0xA SSTORE STOP JUMPDEST ADD PUSH1 0x24 ADD CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x3 DUP5 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND SWAP1 SSTORE DUP3 DUP1 DUP1 PUSH2 0x1A39 JUMP JUMPDEST SWAP1 SWAP2 SWAP4 PUSH1 0x20 PUSH1 0x1 DUP2 SWAP3 DUP5 DUP9 DUP9 ADD ADD CALLDATALOAD DUP2 SSTORE ADD SWAP6 ADD SWAP3 ADD SWAP1 PUSH2 0x1A26 JUMP JUMPDEST PUSH2 0x1AE0 SWAP1 PUSH32 0xC65A7BB8D6351C1CF70C95A316CC6A92839C986682D98BC35F958F4883F9D2A8 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD SWAP2 PUSH1 0x20 DUP7 LT PUSH2 0x1AE6 JUMPI JUMPDEST PUSH1 0x1F ADD PUSH1 0x5 SHR ADD SWAP1 PUSH2 0x266A JUMP JUMPDEST DUP4 PUSH2 0x197F JUMP JUMPDEST SWAP1 SWAP2 POP DUP2 SWAP1 PUSH2 0x1AD3 JUMP JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH0 SLOAD PUSH1 0x30 SHR AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH1 0x2 SLOAD PUSH1 0x8 SHR AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH8 0xFFFFFFFFFFFFFFFF DUP3 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x1B6D SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x248B JUMP JUMPDEST POP PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP3 PUSH2 0x1B87 SWAP2 CALLDATASIZE SWAP2 ADD PUSH2 0x2525 JUMP JUMPDEST POP PUSH1 0xFF PUSH0 SLOAD AND ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH0 SLOAD PUSH1 0x28 SHR AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x35B JUMPI PUSH2 0x1BC9 CALLDATASIZE PUSH2 0x25EE JUMP JUMPDEST PUSH1 0x2 SWAP3 SWAP2 SWAP3 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF PUSH5 0xFF00000000 PUSH1 0x20 SWAP6 ISZERO ISZERO PUSH1 0x20 SHL AND SWAP2 AND OR PUSH1 0x2 SSTORE DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0xF0E JUMPI PUSH9 0x10000000000000000 DUP4 GT PUSH2 0xF0E JUMPI POP PUSH1 0x20 SWAP1 PUSH1 0x10 SLOAD DUP4 PUSH1 0x10 SSTORE DUP1 DUP5 LT PUSH2 0x1C7D JUMPI JUMPDEST POP ADD PUSH1 0x10 PUSH0 MSTORE PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1C4B JUMPI STOP JUMPDEST DUP2 MLOAD PUSH32 0x1B6847DC741A1B0CD08D278845F9D819D87B734759AFB55FE2DE5CB82A9AE672 DUP3 ADD SSTORE SWAP1 DUP4 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1C42 JUMP JUMPDEST PUSH2 0x1CAD SWAP1 DUP5 PUSH32 0x1B6847DC741A1B0CD08D278845F9D819D87B734759AFB55FE2DE5CB82A9AE672 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x266A JUMP JUMPDEST DUP5 PUSH2 0x1C3A JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI CALLDATALOAD PUSH1 0x8 SSTORE STOP JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0x1CE4 PUSH2 0x237F JUMP JUMPDEST ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF PUSH8 0xFF00000000000000 PUSH1 0x2 SLOAD SWAP3 PUSH1 0x38 SHL AND SWAP2 AND OR PUSH1 0x2 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1D45 CALLDATASIZE PUSH2 0x25AE JUMP JUMPDEST SWAP3 SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF PUSH3 0xFF0000 PUSH1 0x2 SLOAD SWAP3 ISZERO ISZERO PUSH1 0x10 SHL AND SWAP2 AND OR PUSH1 0x2 SSTORE AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0xB SLOAD AND OR PUSH1 0xB SSTORE PUSH1 0xC SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH1 0x9 SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI CALLDATALOAD PUSH1 0x5 SSTORE STOP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x35B JUMPI PUSH2 0x100 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0x1E04 PUSH2 0x238E JUMP JUMPDEST POP PUSH2 0x1E0D PUSH2 0x23B1 JUMP JUMPDEST SWAP2 DUP1 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x35B JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 PUSH1 0x84 CALLDATALOAD DUP5 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x1E39 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x248B JUMP JUMPDEST POP PUSH1 0xA4 CALLDATALOAD DUP5 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x1E51 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x248B JUMP JUMPDEST SWAP1 PUSH1 0xC4 CALLDATALOAD DUP6 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x1E69 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x248B JUMP JUMPDEST POP PUSH1 0xE4 CALLDATALOAD SWAP5 DUP6 GT PUSH2 0x35B JUMPI PUSH2 0x1E87 PUSH2 0xE09 SWAP4 PUSH2 0xCAE SWAP7 CALLDATASIZE SWAP2 ADD PUSH2 0x2525 JUMP JUMPDEST POP PUSH2 0x319B JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF AND SWAP1 SSTORE STOP JUMPDEST DUP4 CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI CALLDATALOAD PUSH1 0xD SSTORE STOP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x35B JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH8 0xFFFFFFFFFFFFFFFF DUP3 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x1F2C SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x248B JUMP JUMPDEST POP PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP3 PUSH2 0x1F46 SWAP2 CALLDATASIZE SWAP2 ADD PUSH2 0x2525 JUMP JUMPDEST POP PUSH1 0xFF PUSH1 0x2 SLOAD PUSH1 0x8 SHR AND PUSH2 0x1F65 JUMPI JUMPDEST PUSH1 0xFF PUSH0 SLOAD PUSH1 0x8 SHR AND ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x1F6D PUSH2 0x39BD JUMP JUMPDEST PUSH2 0x1F55 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x3 NOT SWAP2 PUSH1 0x20 DUP4 CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI DUP1 CALLDATALOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0x35B JUMPI PUSH2 0x180 SWAP1 DUP5 CALLDATASIZE SUB ADD SLT PUSH2 0x35B JUMPI PUSH2 0xCAE SWAP3 PUSH2 0x1FB4 SWAP2 ADD PUSH2 0x290D JUMP JUMPDEST SWAP2 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x40 DUP3 ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1FFB PUSH2 0x238E JUMP JUMPDEST AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0xF SLOAD AND OR PUSH1 0xF SSTORE PUSH0 DUP1 RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP3 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x205C SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x248B JUMP JUMPDEST SWAP3 PUSH10 0x1000000000000000000 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND OR PUSH0 SSTORE DUP4 MLOAD SWAP3 DUP4 GT PUSH2 0xF0E JUMPI PUSH9 0x10000000000000000 DUP4 GT PUSH2 0xF0E JUMPI POP PUSH1 0x20 PUSH1 0x1 SWAP4 PUSH1 0x1 SLOAD DUP5 PUSH1 0x1 SSTORE DUP1 DUP6 LT PUSH2 0x2100 JUMPI JUMPDEST POP ADD SWAP1 PUSH1 0x1 PUSH0 MSTORE PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0x20CF JUMPI STOP JUMPDEST DUP3 MLOAD PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 DUP3 ADD SSTORE SWAP2 DUP2 ADD SWAP2 DUP5 ADD PUSH2 0x20C6 JUMP JUMPDEST PUSH2 0x2130 SWAP1 DUP6 PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x266A JUMP JUMPDEST DUP6 PUSH2 0x20BD JUMP JUMPDEST SWAP1 SWAP2 POP CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0x2150 PUSH2 0x238E JUMP JUMPDEST PUSH2 0x2158 PUSH2 0x23B1 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 PUSH1 0x44 CALLDATALOAD DUP5 DUP2 GT PUSH2 0x35B JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x35B JUMPI DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x24 SWAP6 PUSH2 0x2188 DUP3 PUSH2 0x2473 JUMP JUMPDEST SWAP7 PUSH2 0x2195 DUP8 MLOAD SWAP9 DUP10 PUSH2 0x2432 JUMP JUMPDEST DUP3 DUP9 MSTORE PUSH1 0x24 PUSH1 0x20 DUP1 SWAP10 ADD SWAP4 PUSH1 0x7 SHL DUP6 ADD ADD SWAP4 CALLDATASIZE DUP6 GT PUSH2 0x35B JUMPI PUSH1 0x24 ADD SWAP3 JUMPDEST DUP5 DUP5 LT PUSH2 0x2213 JUMPI DUP9 DUP9 DUP9 PUSH1 0x80 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH1 0x12 DUP3 MSTORE PUSH1 0xFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x80 SWAP1 DUP2 DUP6 CALLDATASIZE SUB SLT PUSH2 0x35B JUMPI DUP9 MLOAD SWAP2 DUP3 ADD DUP3 DUP2 LT DUP6 DUP3 GT OR PUSH2 0x2299 JUMPI DUP10 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x35B JUMPI DUP4 MSTORE DUP11 DUP7 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x35B JUMPI DUP12 DUP5 ADD MSTORE DUP10 DUP7 ADD CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x35B JUMPI DUP10 DUP4 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 DUP7 ADD CALLDATALOAD SWAP3 DUP4 ISZERO ISZERO DUP5 SUB PUSH2 0x35B JUMPI PUSH1 0x80 SWAP4 DUP13 SWAP4 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP4 ADD SWAP3 PUSH2 0x21B3 JUMP JUMPDEST DUP4 PUSH1 0x41 DUP10 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF PUSH9 0xFF0000000000000000 PUSH2 0x2309 PUSH2 0x237F JUMP JUMPDEST ISZERO ISZERO PUSH0 SLOAD SWAP4 SHL AND SWAP2 AND OR PUSH0 SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0x5 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH1 0x2 SLOAD PUSH1 0x30 SHR AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH1 0x2 SLOAD PUSH1 0x28 SHR AND ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x35B JUMPI JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x35B JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x35B JUMPI JUMP JUMPDEST PUSH2 0x140 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x23F1 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x23F1 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x23F1 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x23F1 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x24A5 DUP2 PUSH2 0x2473 JUMP JUMPDEST SWAP4 PUSH2 0x24B3 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x2432 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x35B JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x24DC JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x24CE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x23F1 JUMPI PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x35B JUMPI DUP1 CALLDATALOAD SWAP1 PUSH2 0x253C DUP3 PUSH2 0x24EB JUMP JUMPDEST SWAP3 PUSH2 0x254A PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x2432 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x35B JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x40 DUP3 ADD SWAP1 ISZERO ISZERO DUP3 MSTORE PUSH1 0x20 PUSH1 0x60 DUP2 SWAP4 PUSH1 0x40 DUP4 DUP3 ADD MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x259A JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x258C JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x35B JUMPI PUSH1 0x4 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x35B JUMPI SWAP1 PUSH1 0x24 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x35B JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x35B JUMPI PUSH1 0x4 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x35B JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x35B JUMPI PUSH2 0x2627 SWAP2 PUSH1 0x4 ADD PUSH2 0x248B JUMP JUMPDEST SWAP1 JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x263D JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 DUP2 LT PUSH2 0x2675 JUMPI POP POP JUMP JUMPDEST PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x266A JUMP JUMPDEST CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x35B JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x35B JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x26BC DUP2 PUSH2 0x2473 JUMP JUMPDEST SWAP4 PUSH2 0x26CA PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x2432 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x35B JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x26F3 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x35B JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x26E5 JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x35B JUMPI JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x35B JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x2747 DUP2 PUSH2 0x2473 JUMP JUMPDEST SWAP4 PUSH2 0x2755 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x2432 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x35B JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x277E JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x2770 JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP4 DUP4 SUB SLT PUSH2 0x35B JUMPI DUP3 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP2 GT PUSH2 0x35B JUMPI DUP4 PUSH2 0x27B8 SWAP2 DUP7 ADD PUSH2 0x26A1 JUMP JUMPDEST SWAP4 PUSH1 0x20 SWAP4 DUP5 DUP3 ADD MLOAD DUP5 DUP2 GT PUSH2 0x35B JUMPI DUP3 ADD DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x35B JUMPI DUP1 MLOAD PUSH2 0x27DF DUP2 PUSH2 0x2473 JUMP JUMPDEST SWAP2 PUSH1 0x40 SWAP8 PUSH2 0x27EF DUP10 MLOAD SWAP5 DUP6 PUSH2 0x2432 JUMP JUMPDEST DUP3 DUP5 MSTORE DUP1 DUP5 ADD DUP2 PUSH1 0x60 DUP1 SWAP6 MUL DUP5 ADD ADD SWAP3 DUP7 DUP5 GT PUSH2 0x35B JUMPI DUP3 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x2844 JUMPI POP POP POP POP POP SWAP5 DUP3 ADD MLOAD DUP5 DUP2 GT PUSH2 0x35B JUMPI DUP2 PUSH2 0x282D SWAP2 DUP5 ADD PUSH2 0x272C JUMP JUMPDEST SWAP4 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x2627 SWAP3 ADD PUSH2 0x272C JUMP JUMPDEST DUP5 DUP3 DUP9 SUB SLT PUSH2 0x35B JUMPI DUP11 MLOAD SWAP1 DUP6 DUP3 ADD DUP3 DUP2 LT DUP13 DUP3 GT OR PUSH2 0x23F1 JUMPI DUP13 MSTORE DUP3 MLOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x35B JUMPI DUP3 MSTORE DUP4 DUP4 ADD MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x35B JUMPI DUP3 DUP6 SWAP3 DUP4 DUP10 SWAP6 ADD MSTORE DUP14 PUSH2 0x28A3 DUP2 DUP8 ADD PUSH2 0x271F JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x280A JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x28C6 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x263D JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x263D JUMPI JUMP JUMPDEST SWAP1 PUSH0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP3 PUSH2 0x140 DUP6 ADD SWAP1 PUSH2 0x2958 DUP3 PUSH2 0x2680 JUMP JUMPDEST SWAP1 PUSH1 0x40 DUP1 MLOAD SWAP5 PUSH32 0x67E0E07600000000000000000000000000000000000000000000000000000000 DUP7 MSTORE DUP1 PUSH1 0x4 SWAP5 AND DUP5 DUP8 ADD MSTORE PUSH0 DUP7 PUSH1 0x24 DUP2 DUP12 GAS STATICCALL SWAP6 DUP7 ISZERO PUSH2 0xAB3 JUMPI PUSH0 SWAP1 PUSH0 SWAP8 PUSH2 0x3102 JUMPI JUMPDEST POP PUSH2 0x29AC DUP7 PUSH2 0x2680 JUMP JUMPDEST SWAP6 DUP3 DUP5 MLOAD SWAP8 PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP10 MSTORE AND DUP7 DUP9 ADD MSTORE PUSH0 DUP8 PUSH1 0x24 DUP2 DUP14 GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0xD33 JUMPI PUSH0 SWAP8 PUSH2 0x30BC JUMPI JUMPDEST POP PUSH2 0x29F9 SWAP1 PUSH2 0x2680 JUMP JUMPDEST SWAP4 DUP3 DUP5 MLOAD SWAP6 PUSH32 0x7E361BDE00000000000000000000000000000000000000000000000000000000 DUP8 MSTORE AND DUP7 DUP7 ADD MSTORE PUSH0 DUP6 PUSH1 0x24 DUP2 DUP14 GAS STATICCALL SWAP6 DUP7 ISZERO PUSH2 0xD33 JUMPI PUSH0 SWAP6 PUSH0 SWAP8 PUSH2 0x305F JUMPI JUMPDEST POP PUSH0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x2B4F JUMPI DUP13 DUP6 PUSH2 0x2A65 PUSH1 0x20 DUP3 PUSH2 0x2A5C DUP7 DUP11 PUSH2 0x28B2 JUMP JUMPDEST MLOAD AND SWAP4 ADD PUSH2 0x2680 JUMP JUMPDEST AND SUB PUSH2 0x2AE6 JUMPI PUSH1 0xA0 DUP14 ADD CALLDATALOAD PUSH2 0x2A7A DUP3 DUP12 PUSH2 0x28B2 JUMP JUMPDEST MLOAD DUP2 SUB PUSH2 0x2AD0 JUMPI PUSH2 0x2AA1 SWAP1 PUSH2 0x2A8F DUP4 DUP11 PUSH2 0x28B2 JUMP JUMPDEST MLOAD PUSH2 0x2A9A DUP5 DUP13 PUSH2 0x28B2 JUMP JUMPDEST MLOAD SWAP2 PUSH2 0x3961 JUMP JUMPDEST PUSH2 0x2AAB DUP3 DUP13 PUSH2 0x28B2 JUMP JUMPDEST MLOAD SUB PUSH2 0x2ABB JUMPI PUSH1 0x1 SWAP1 JUMPDEST ADD PUSH2 0x2A41 JUMP JUMPDEST POP PUSH0 SWAP12 PUSH2 0x100 ADD CALLDATALOAD SWAP11 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST POP PUSH0 SWAP13 PUSH2 0x100 ADD CALLDATALOAD SWAP12 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP13 DUP6 PUSH2 0x2AF7 DUP9 DUP3 PUSH2 0x2A5C DUP7 DUP11 PUSH2 0x28B2 JUMP JUMPDEST AND EQ PUSH2 0x2B06 JUMPI JUMPDEST PUSH1 0x1 SWAP1 PUSH2 0x2AB5 JUMP JUMPDEST PUSH1 0xC0 DUP14 ADD CALLDATALOAD PUSH2 0x2B15 DUP3 DUP12 PUSH2 0x28B2 JUMP JUMPDEST MLOAD DUP2 SUB PUSH2 0x2AD0 JUMPI PUSH2 0x2B2A SWAP1 PUSH2 0x2A8F DUP4 DUP11 PUSH2 0x28B2 JUMP JUMPDEST PUSH2 0x2B34 DUP3 DUP13 PUSH2 0x28B2 JUMP JUMPDEST MLOAD EQ PUSH2 0x2AFE JUMPI POP PUSH0 SWAP12 PUSH2 0x100 ADD CALLDATALOAD SWAP11 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST POP SWAP7 POP SWAP8 SWAP9 SWAP4 POP POP SWAP8 SWAP5 POP SWAP2 POP PUSH2 0x100 DUP5 ADD CALLDATALOAD SWAP7 PUSH1 0x3 SLOAD ISZERO ISZERO PUSH0 EQ PUSH2 0x2D44 JUMPI POP PUSH8 0xDE0B6B3A7640000 PUSH2 0x2B84 PUSH1 0x3 SLOAD DUP10 PUSH2 0x262A JUMP JUMPDEST DIV SWAP1 DUP2 PUSH2 0x2BB1 JUMPI JUMPDEST POP POP POP POP PUSH1 0xE0 SWAP1 JUMPDEST ADD CALLDATALOAD ISZERO ISZERO SWAP1 DUP2 PUSH2 0x2BA3 JUMPI POP SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0xFF SWAP2 POP SLOAD PUSH1 0x20 SHR AND ISZERO SWAP2 SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP7 DUP5 CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x35B JUMPI PUSH2 0x2C8A JUMPI DUP3 PUSH2 0x2BCE SWAP2 PUSH2 0x28F3 JUMP JUMPDEST SWAP7 PUSH2 0x2BDA DUP5 DUP7 ADD PUSH2 0x2680 JUMP JUMPDEST DUP3 EXTCODESIZE ISZERO PUSH2 0x2C86 JUMPI DUP5 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 DUP2 ADD SWAP2 DUP3 MSTORE ADDRESS PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 SWAP3 SWAP2 DUP6 SWAP2 DUP5 SWAP2 DUP3 SWAP1 DUP5 SWAP1 DUP3 SWAP1 PUSH1 0x60 ADD SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2C7D JUMPI POP SWAP1 DUP4 SWAP2 PUSH2 0x2C65 JUMPI JUMPDEST POP POP PUSH1 0xE0 SWAP1 JUMPDEST SWAP1 PUSH0 DUP1 DUP1 PUSH2 0x2B8C JUMP JUMPDEST PUSH2 0x2C6E SWAP1 PUSH2 0x241E JUMP JUMPDEST PUSH2 0x2C79 JUMPI DUP2 PUSH0 PUSH2 0x2C56 JUMP JUMPDEST POP DUP1 REVERT JUMPDEST MLOAD RETURNDATASIZE DUP6 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP7 DUP1 REVERT JUMPDEST DUP3 PUSH2 0x2C98 SWAP2 SWAP9 SWAP5 SWAP4 SWAP9 PUSH2 0x2900 JUMP JUMPDEST SWAP7 PUSH2 0x2CA5 PUSH1 0x20 DUP7 ADD PUSH2 0x2680 JUMP JUMPDEST SWAP2 DUP1 EXTCODESIZE ISZERO PUSH2 0x35B JUMPI DUP4 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP5 DUP4 ADD SWAP5 DUP6 MSTORE ADDRESS PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP3 PUSH0 SWAP2 DUP5 SWAP2 DUP3 SWAP1 DUP5 SWAP1 DUP3 SWAP1 PUSH1 0x60 ADD SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2D3B JUMPI POP PUSH2 0x2D27 JUMPI JUMPDEST POP PUSH1 0xE0 SWAP1 PUSH2 0x2C5C JUMP JUMPDEST PUSH2 0x2D32 SWAP2 SWAP3 POP PUSH2 0x241E JUMP JUMPDEST PUSH0 SWAP1 PUSH1 0xE0 PUSH2 0x2D1E JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP3 SWAP2 DUP3 SLOAD DUP1 PUSH2 0x2D5C JUMPI JUMPDEST POP POP POP POP POP PUSH1 0xE0 SWAP1 PUSH2 0x2B94 JUMP JUMPDEST PUSH2 0x2D6F PUSH8 0xDE0B6B3A7640000 SWAP2 DUP11 PUSH2 0x262A JUMP JUMPDEST DIV DUP1 ISZERO PUSH2 0x2D4F JUMPI SWAP1 SWAP2 SWAP3 SWAP4 SWAP8 DUP6 CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x35B JUMPI DUP3 SWAP1 PUSH2 0x2F2A JUMPI PUSH2 0x2D95 SWAP2 PUSH2 0x2900 JUMP JUMPDEST SWAP8 PUSH1 0xFF PUSH1 0x2 SLOAD PUSH1 0x38 SHR AND PUSH2 0x2DB7 JUMPI JUMPDEST POP POP POP POP POP PUSH1 0xE0 SWAP1 JUMPDEST SWAP1 PUSH0 DUP1 DUP1 DUP1 PUSH2 0x2D4F JUMP JUMPDEST DUP3 DUP7 ADD SWAP4 PUSH2 0x2DC4 DUP6 PUSH2 0x2680 JUMP JUMPDEST AND SWAP5 DUP4 MLOAD DUP1 SWAP7 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP8 DUP9 SWAP2 DUP2 PUSH0 DUP2 PUSH2 0x2E25 DUP11 DUP11 DUP11 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x2F20 JUMPI SWAP1 DUP8 SWAP5 SWAP4 SWAP3 SWAP2 PUSH2 0x2EE1 JUMPI JUMPDEST POP PUSH0 PUSH2 0x2E48 PUSH2 0x2E9F SWAP8 PUSH2 0x2680 JUMP JUMPDEST SWAP2 DUP7 MLOAD SWAP8 DUP9 SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2D3B JUMPI POP PUSH2 0x2EB8 JUMPI JUMPDEST DUP1 DUP1 DUP1 PUSH2 0x2DA4 JUMP JUMPDEST DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2EDA JUMPI JUMPDEST PUSH2 0x2ECB DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x35B JUMPI PUSH0 DUP1 PUSH2 0x2EB0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2EC1 JUMP JUMPDEST SWAP4 DUP5 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2F19 JUMPI JUMPDEST PUSH2 0x2EF6 DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x35B JUMPI PUSH0 PUSH2 0x2E48 PUSH2 0x2E9F SWAP8 PUSH2 0x2F10 DUP11 SWAP8 PUSH2 0x271F JUMP JUMPDEST POP SWAP8 POP POP PUSH2 0x2E3A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2EEC JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x2F33 SWAP2 PUSH2 0x28F3 JUMP JUMPDEST SWAP8 PUSH1 0xFF PUSH1 0x2 SLOAD PUSH1 0x38 SHR AND PUSH2 0x2F4F JUMPI JUMPDEST POP POP POP POP POP PUSH1 0xE0 SWAP1 PUSH2 0x2DAD JUMP JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP8 ADD SWAP5 PUSH2 0x2F5F DUP7 PUSH2 0x2680 JUMP JUMPDEST AND DUP7 DUP6 MLOAD DUP1 SWAP3 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 PUSH0 DUP2 PUSH2 0x2FBB DUP11 DUP11 DUP11 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x2F20 JUMPI SWAP1 DUP8 SWAP5 SWAP4 SWAP3 SWAP2 PUSH2 0x3020 JUMPI JUMPDEST POP PUSH0 PUSH2 0x2E48 PUSH2 0x2FDE SWAP8 PUSH2 0x2680 JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2D3B JUMPI POP PUSH2 0x2FF7 JUMPI JUMPDEST DUP1 DUP1 DUP1 PUSH2 0x2F42 JUMP JUMPDEST DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3019 JUMPI JUMPDEST PUSH2 0x300A DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x35B JUMPI PUSH0 DUP1 PUSH2 0x2FEF JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3000 JUMP JUMPDEST SWAP4 DUP5 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3058 JUMPI JUMPDEST PUSH2 0x3035 DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x35B JUMPI PUSH0 PUSH2 0x2E48 PUSH2 0x2FDE SWAP8 PUSH2 0x304F DUP11 SWAP8 PUSH2 0x271F JUMP JUMPDEST POP SWAP8 POP POP PUSH2 0x2FD0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x302B JUMP JUMPDEST SWAP6 POP SWAP6 POP RETURNDATASIZE DUP1 PUSH0 DUP8 RETURNDATACOPY PUSH2 0x3072 DUP2 DUP8 PUSH2 0x2432 JUMP JUMPDEST DUP6 ADD SWAP5 DUP5 DUP2 DUP8 SUB SLT PUSH2 0x35B JUMPI DUP1 MLOAD SWAP6 PUSH8 0xFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP2 GT PUSH2 0x35B JUMPI DUP2 PUSH2 0x309E SWAP2 DUP5 ADD PUSH2 0x272C JUMP JUMPDEST SWAP7 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x30B5 SWAP3 ADD PUSH2 0x272C JUMP JUMPDEST SWAP6 PUSH0 PUSH2 0x2A3E JUMP JUMPDEST SWAP1 SWAP7 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x30CE DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 DUP4 SUB SLT PUSH2 0x35B JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x35B JUMPI PUSH2 0x29F9 SWAP3 PUSH2 0x30FB SWAP3 ADD PUSH2 0x272C JUMP JUMPDEST SWAP7 SWAP1 PUSH2 0x29EF JUMP JUMPDEST SWAP1 POP PUSH2 0x3121 SWAP2 SWAP7 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x3119 DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x278D JUMP JUMPDEST SWAP8 SWAP3 SWAP2 POP SWAP7 PUSH2 0x29A2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 PUSH1 0x1 DUP1 SLOAD SWAP1 DUP2 DUP4 MSTORE PUSH1 0x20 SWAP1 PUSH1 0x20 DUP5 ADD SWAP3 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP3 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x3183 JUMPI POP POP POP POP POP SWAP1 PUSH2 0x3181 SWAP2 SUB DUP4 PUSH2 0x2432 JUMP JUMPDEST JUMP JUMPDEST DUP5 SLOAD DUP7 MSTORE DUP9 SWAP7 POP SWAP5 DUP6 ADD SWAP5 SWAP4 DUP4 ADD SWAP4 SWAP1 DUP4 ADD SWAP1 PUSH2 0x3169 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0xFF PUSH0 SLOAD PUSH1 0x48 SHR AND PUSH2 0x355A JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 PUSH32 0x0 AND SWAP1 PUSH1 0x40 SWAP5 DUP6 MLOAD PUSH32 0x67E0E07600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 PUSH1 0x4 SWAP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x3550 JUMPI PUSH0 SWAP2 PUSH2 0x3534 JUMPI JUMPDEST POP PUSH1 0x7 DUP1 SLOAD ISZERO PUSH2 0x334A JUMPI PUSH0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x3334 JUMPI PUSH8 0xDE0B6B3A7640000 PUSH2 0x3260 PUSH2 0x3257 DUP4 DUP9 PUSH2 0x28B2 JUMP JUMPDEST MLOAD DUP5 SLOAD SWAP1 PUSH2 0x262A JUMP JUMPDEST DIV SWAP1 DUP2 PUSH2 0x3272 JUMPI JUMPDEST PUSH1 0x1 SWAP2 POP ADD PUSH2 0x3238 JUMP JUMPDEST PUSH2 0x3286 DUP3 PUSH2 0x3280 DUP4 DUP10 PUSH2 0x28B2 JUMP JUMPDEST MLOAD PUSH2 0x28F3 JUMP JUMPDEST PUSH2 0x3290 DUP3 DUP9 PUSH2 0x28B2 JUMP JUMPDEST MSTORE DUP5 PUSH2 0x329C DUP3 DUP7 PUSH2 0x28B2 JUMP JUMPDEST MLOAD AND DUP8 EXTCODESIZE ISZERO PUSH2 0x35B JUMPI DUP11 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 DUP11 ADD SWAP1 DUP2 MSTORE ADDRESS PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 DUP2 SWAP1 PUSH1 0x60 ADD SUB DUP2 DUP4 DUP12 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x332A JUMPI PUSH1 0x1 SWAP3 PUSH2 0x331B JUMPI JUMPDEST POP PUSH2 0x3268 JUMP JUMPDEST PUSH2 0x3324 SWAP1 PUSH2 0x241E JUMP JUMPDEST PUSH0 PUSH2 0x3315 JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP POP POP POP SWAP4 SWAP1 POP PUSH1 0xFF SWAP2 POP JUMPDEST PUSH0 SLOAD SWAP1 SHR AND ISZERO SWAP2 SWAP1 JUMP JUMPDEST POP SWAP2 SWAP5 SWAP4 SWAP6 SWAP3 SWAP1 PUSH1 0x8 DUP1 SLOAD PUSH2 0x3369 JUMPI JUMPDEST POP POP POP POP PUSH1 0xFF SWAP2 SWAP3 SWAP4 POP PUSH2 0x3340 JUMP JUMPDEST PUSH0 SWAP8 SWAP6 SWAP8 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x351D JUMPI DUP4 PUSH8 0xDE0B6B3A7640000 PUSH2 0x3397 PUSH2 0x338E DUP5 DUP13 PUSH2 0x28B2 JUMP JUMPDEST MLOAD DUP6 SLOAD SWAP1 PUSH2 0x262A JUMP JUMPDEST DIV DUP5 PUSH2 0x33A3 DUP5 DUP10 PUSH2 0x28B2 JUMP JUMPDEST MLOAD AND DUP2 PUSH2 0x33B6 JUMPI JUMPDEST POP POP POP PUSH1 0x1 ADD PUSH2 0x336E JUMP JUMPDEST DUP9 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP11 DUP2 DUP1 PUSH2 0x3411 DUP7 PUSH1 0x20 SWAP9 DUP10 SWAP6 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB DUP2 PUSH0 DUP7 GAS CALL DUP1 ISZERO PUSH2 0x332A JUMPI SWAP1 DUP5 SWAP3 SWAP2 PUSH2 0x34EA JUMPI JUMPDEST POP DUP12 PUSH2 0x3446 DUP7 PUSH2 0x3440 DUP7 PUSH2 0x343A DUP4 DUP7 PUSH2 0x28B2 JUMP JUMPDEST MLOAD PUSH2 0x2900 JUMP JUMPDEST SWAP3 PUSH2 0x28B2 JUMP JUMPDEST MSTORE DUP11 PUSH2 0x349F DUP12 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP4 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB DUP2 PUSH0 DUP11 GAS CALL DUP1 ISZERO PUSH2 0x34E0 JUMPI PUSH2 0x34B7 JUMPI JUMPDEST DUP6 SWAP2 PUSH2 0x33AB JUMP JUMPDEST DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x34D9 JUMPI JUMPDEST PUSH2 0x34CA DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x35B JUMPI PUSH0 DUP1 PUSH2 0x34B0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x34C0 JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP2 DUP3 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3516 JUMPI JUMPDEST PUSH2 0x34FF DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x35B JUMPI PUSH2 0x3511 DUP5 SWAP3 PUSH2 0x271F JUMP JUMPDEST PUSH2 0x3426 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x34F5 JUMP JUMPDEST POP POP POP POP POP PUSH1 0xFF SWAP2 POP SWAP3 SWAP2 SWAP3 DUP4 SWAP3 SWAP2 PUSH0 DUP1 DUP1 PUSH2 0x335A JUMP JUMPDEST PUSH2 0x3548 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x3119 DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x322C JUMP JUMPDEST DUP8 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP PUSH1 0x1 SWAP2 POP PUSH2 0x2627 PUSH2 0x312B JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x35AE JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x3581 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x3576 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x35B JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x35B JUMPI SWAP1 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0xFF PUSH0 SLOAD PUSH1 0x48 SHR AND PUSH2 0x355A JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 PUSH32 0x0 AND SWAP1 PUSH1 0x40 SWAP5 DUP6 MLOAD PUSH32 0x67E0E07600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 PUSH1 0x4 SWAP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x3550 JUMPI PUSH0 SWAP2 PUSH2 0x3945 JUMPI JUMPDEST POP PUSH1 0x5 DUP1 SLOAD ISZERO PUSH2 0x377A JUMPI PUSH0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x3764 JUMPI PUSH8 0xDE0B6B3A7640000 PUSH2 0x36A0 PUSH2 0x3257 DUP4 DUP9 PUSH2 0x28B2 JUMP JUMPDEST DIV SWAP1 DUP2 PUSH2 0x36B2 JUMPI JUMPDEST PUSH1 0x1 SWAP2 POP ADD PUSH2 0x3681 JUMP JUMPDEST PUSH2 0x36C0 DUP3 PUSH2 0x343A DUP4 DUP10 PUSH2 0x28B2 JUMP JUMPDEST PUSH2 0x36CA DUP3 DUP9 PUSH2 0x28B2 JUMP JUMPDEST MSTORE DUP5 PUSH2 0x36D6 DUP3 DUP7 PUSH2 0x28B2 JUMP JUMPDEST MLOAD AND DUP8 EXTCODESIZE ISZERO PUSH2 0x35B JUMPI DUP11 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 DUP11 ADD SWAP1 DUP2 MSTORE ADDRESS PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 DUP2 SWAP1 PUSH1 0x60 ADD SUB DUP2 DUP4 DUP12 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x332A JUMPI PUSH1 0x1 SWAP3 PUSH2 0x3755 JUMPI JUMPDEST POP PUSH2 0x36A8 JUMP JUMPDEST PUSH2 0x375E SWAP1 PUSH2 0x241E JUMP JUMPDEST PUSH0 PUSH2 0x374F JUMP JUMPDEST POP POP POP POP SWAP4 POP POP POP JUMPDEST PUSH1 0xFF PUSH0 SLOAD PUSH1 0x30 SHR AND ISZERO SWAP2 SWAP1 JUMP JUMPDEST POP SWAP2 SWAP5 SWAP6 SWAP3 SWAP1 PUSH1 0x6 SWAP3 PUSH1 0x6 SLOAD PUSH2 0x3797 JUMPI JUMPDEST POP POP POP POP POP POP SWAP1 PUSH2 0x376D JUMP JUMPDEST PUSH0 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x3933 JUMPI DUP4 DUP4 PUSH2 0x37AE DUP4 DUP6 PUSH2 0x28B2 JUMP JUMPDEST MLOAD AND PUSH8 0xDE0B6B3A7640000 PUSH2 0x37CF PUSH2 0x37C6 DUP6 DUP14 PUSH2 0x28B2 JUMP JUMPDEST MLOAD DUP10 SLOAD SWAP1 PUSH2 0x262A JUMP JUMPDEST DIV SWAP1 DUP2 PUSH2 0x37E2 JUMPI JUMPDEST POP POP POP PUSH1 0x1 ADD PUSH2 0x3799 JUMP JUMPDEST DUP9 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP11 DUP2 DUP1 PUSH2 0x383D DUP7 PUSH1 0x20 SWAP9 DUP10 SWAP6 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB DUP2 PUSH0 DUP7 GAS CALL DUP1 ISZERO PUSH2 0x332A JUMPI SWAP1 DUP5 SWAP3 SWAP2 PUSH2 0x3900 JUMPI JUMPDEST POP DUP12 PUSH2 0x3866 DUP7 PUSH2 0x3440 DUP7 PUSH2 0x3280 DUP4 DUP7 PUSH2 0x28B2 JUMP JUMPDEST MSTORE DUP11 PUSH2 0x38BF DUP12 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP4 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB DUP2 PUSH0 DUP11 GAS CALL DUP1 ISZERO PUSH2 0x34E0 JUMPI PUSH2 0x38D7 JUMPI JUMPDEST DUP6 SWAP2 PUSH2 0x37D7 JUMP JUMPDEST DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x38F9 JUMPI JUMPDEST PUSH2 0x38EA DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x35B JUMPI PUSH0 DUP1 PUSH2 0x38D0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x38E0 JUMP JUMPDEST SWAP2 DUP3 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x392C JUMPI JUMPDEST PUSH2 0x3915 DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x35B JUMPI PUSH2 0x3927 DUP5 SWAP3 PUSH2 0x271F JUMP JUMPDEST PUSH2 0x3852 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x390B JUMP JUMPDEST POP POP POP POP POP POP POP PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x378B JUMP JUMPDEST PUSH2 0x3959 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x3119 DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x3675 JUMP JUMPDEST SWAP2 PUSH2 0x396B SWAP2 PUSH2 0x262A JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x263D JUMPI DUP2 ISZERO PUSH2 0x3990 JUMPI DIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xB SLOAD AND PUSH1 0xC SLOAD DUP2 EXTCODESIZE ISZERO PUSH2 0x35B JUMPI PUSH0 SWAP2 PUSH1 0x24 DUP4 SWAP3 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0xA1CFA04100000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x3A2E JUMPI PUSH2 0x3A25 JUMPI POP JUMP JUMPDEST PUSH2 0x3181 SWAP1 PUSH2 0x241E JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x10 SLOAD SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 DUP1 SWAP2 ADD SWAP2 PUSH1 0x10 PUSH0 MSTORE PUSH32 0x1B6847DC741A1B0CD08D278845F9D819D87B734759AFB55FE2DE5CB82A9AE672 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x3A7D JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 SLOAD DUP6 MSTORE SWAP4 DUP5 ADD SWAP4 PUSH1 0x1 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x3A6F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND DUP2 PUSH1 0xE SLOAD AND SWAP2 PUSH1 0x40 MLOAD SWAP3 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP1 PUSH1 0x4 DUP6 ADD MSTORE PUSH0 DUP5 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x3A2E JUMPI PUSH0 SWAP5 PUSH2 0x3BD4 JUMPI JUMPDEST POP DUP3 EXTCODESIZE ISZERO PUSH2 0x35B JUMPI SWAP1 SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP3 PUSH32 0xD8F4CF3C00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x84 DUP5 ADD SWAP1 PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x80 PUSH1 0x24 DUP6 ADD MSTORE DUP3 MLOAD DUP1 SWAP2 MSTORE PUSH1 0xA4 DUP5 ADD SWAP3 PUSH1 0x20 DUP1 SWAP2 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x3BB7 JUMPI POP POP POP POP POP SWAP2 DUP2 PUSH0 DUP2 PUSH2 0x3BA6 DUP3 SWAP7 PUSH2 0x3B97 PUSH1 0x3 NOT SWAP2 DUP3 DUP6 DUP3 SUB ADD PUSH1 0x44 DUP7 ADD MSTORE PUSH2 0x3A39 JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB ADD PUSH1 0x64 DUP5 ADD MSTORE PUSH2 0x3A39 JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x3A2E JUMPI PUSH2 0x3A25 JUMPI POP JUMP JUMPDEST DUP5 MLOAD DUP2 AND DUP7 MSTORE DUP9 SWAP7 POP SWAP5 DUP3 ADD SWAP5 SWAP4 DUP3 ADD SWAP4 PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x3B6C JUMP JUMPDEST SWAP1 SWAP4 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x3BE6 DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST DUP2 ADD PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x35B JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x3C0D SWAP3 ADD PUSH2 0x26A1 JUMP JUMPDEST SWAP3 PUSH0 PUSH2 0x3B15 JUMP JUMPDEST SWAP1 PUSH2 0x3C51 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x3C29 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x3CA4 JUMPI JUMPDEST PUSH2 0x3C62 JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x3C5A JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP7 DUP11 LOG2 MSTORE 0xC 0xFC 0xCE SELFBALANCE EQ GT SWAP2 JUMP 0xA5 MSIZE DUP12 PUSH14 0x58C007D3B1A3F98FE2B4528A9475 SUB 0xAD PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"903:18481:87:-:0;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;-1:-1:-1;;;;;903:18481:87;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;903:18481:87;;;;;;409:14:72;;903:18481:87;;;2929:27;903:18481;;;2929:27;903:18481;;;;;;;;;409:14:72;903:18481:87;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;903:18481:87;;;;;;-1:-1:-1;903:18481:87;;;;;-1:-1:-1;903:18481:87"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":9102,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_25934":{"entryPoint":9137,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":13752,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_contract_IERC20_dyn_fromMemory":{"entryPoint":9889,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_contract_IERC20_dynt_array_struct_TokenInfo_dynt_array_uint256_dynt_array_uint256_dyn_fromMemory":{"entryPoint":10125,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_array_uint256_dyn":{"entryPoint":9355,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn_fromMemory":{"entryPoint":10028,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool":{"entryPoint":9087,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":10015,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_boolt_array_uint256_dyn":{"entryPoint":9710,"id":null,"parameterSlots":1,"returnSlots":2},"abi_decode_boolt_contract_RateProviderMockt_uint256":{"entryPoint":9646,"id":null,"parameterSlots":1,"returnSlots":3},"abi_decode_bytes":{"entryPoint":9509,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_array_uint256_dyn_storage":{"entryPoint":14905,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_bool_array_uint256_dyn":{"entryPoint":9579,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_bool_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_contract_IERC20_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"array_allocation_size_array_struct_TokenConfig_dyn":{"entryPoint":9331,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":9451,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_uint256":{"entryPoint":10496,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256":{"entryPoint":9770,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_uint256":{"entryPoint":10483,"id":null,"parameterSlots":2,"returnSlots":1},"clear_storage_range_uint256":{"entryPoint":9834,"id":null,"parameterSlots":2,"returnSlots":0},"copy_array_from_storage_to_memory_array_uint256_dyn":{"entryPoint":12587,"id":null,"parameterSlots":0,"returnSlots":1},"extract_byte_array_length":{"entryPoint":13671,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":9266,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_25975":{"entryPoint":9172,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_26081":{"entryPoint":9246,"id":null,"parameterSlots":1,"returnSlots":0},"fun_onAfterAddLiquidity":{"entryPoint":13796,"id":33513,"parameterSlots":2,"returnSlots":2},"fun_onAfterRemoveLiquidity":{"entryPoint":12699,"id":33682,"parameterSlots":2,"returnSlots":2},"fun_onAfterSwap":{"entryPoint":10509,"id":33240,"parameterSlots":1,"returnSlots":2},"fun_setBalancesInVault":{"entryPoint":14996,"id":34143,"parameterSlots":0,"returnSlots":0},"fun_toRawUndoRateRoundDown":{"entryPoint":14689,"id":6509,"parameterSlots":3,"returnSlots":1},"fun_updateTokenRate":{"entryPoint":14781,"id":34116,"parameterSlots":0,"returnSlots":0},"fun_verifyCallResultFromTarget":{"entryPoint":15380,"id":40673,"parameterSlots":3,"returnSlots":1},"memory_array_index_access_contract_IERC20_dyn":{"entryPoint":10418,"id":null,"parameterSlots":2,"returnSlots":1},"read_from_calldatat_address":{"entryPoint":9856,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"28110":[{"length":32,"start":10536},{"length":32,"start":12739},{"length":32,"start":13836},{"length":32,"start":15020}]},"linkReferences":{},"object":"608060409080825260049182361015610016575f80fd5b60e05f35811c9283625b449c1461235d57508262d332fd146123375782630227346714612319578263039388ba146122c45782630b89f182146121365782630c54b1de146120295782631064dfdd14611fcd57826318b6eb5514611f725782631c149e2814611efb578263214ff4c514611ee3578263232b59f714611eaa5782632352c2ed14611e8d5782632754888d14611de85782632e55a84114611dd057826331378f4f14611dad578263335d412614611d225782633478db7314611ccb57826334a168ec14611cb357826334e3a8c314611bba57826335f7290e14611b9557826338be241d14611b3b5782633d05719a14611b1557826340dc21d414611af0578263423ef816146118d55782634392312a146118b75782634437152a1461185b57826345421ec7146116c45782634f036756146116a15782635211fa77146113445782635351b2301461131f5782635991de93146112955782635cd0074614611273578263677db20e1461124e57826368c6db6a146112205782636a9a0611146111e95782636e7d75e51461119557826371eff9d21461109c5782637b695d101461104a57826380c554c11461102457826382fb5d2114610fd157826387ac569114610f815782638f5fae6214610f3a57826393c4b28614610e16578263976907cc14610d635782639f94c52214610d3d578263a0e8f5ac14610c31578263a5098f1014610c0e578263a55e47be14610bbe578263a975dda014610b9b578263af72105d14610b75578263b127e38514610b49578263b298157b14610b26578263b3a763b914610ad5578263b445fbe714610abd578263ba5f9f401461090d578263bd825f6b146108ef578263c25dade814610888578263d3fca63714610839578263d4f83182146107e4578263d77153a71461069c57508163da09aacf14610684578163dc7776ca14610641578163dda1c15b14610629578163e326f03a14610605578163e4c593d7146105e2578163e5e3b67e146105b4578163e62eecdd14610528578163e908e85d1461050b578163e9f7c591146103c4578163eb499270146103a7578163f5279d9c14610383578163f8b5ef851461035f575063fc6e0f5914610344575f80fd5b3461035b57602060031936011261035b5780359055005b5f80fd5b3461035b575f60031936011261035b5760209060ff5f5460481c1690519015158152f35b3461035b575f60031936011261035b5760209060ff5f5460081c1690519015158152f35b3461035b575f60031936011261035b576020906007549051908152f35b3461035b5761014060031936011261035b576103e081516123d4565b6103e861237f565b9060243580151580910361035b5760443580151580910361035b5760643580151580910361035b5760843580151580910361035b5760a4359081151580920361035b5760c4359283151580940361035b5760e4359485151580960361035b57610104359687151580980361035b576101243580151580910361035b576013549060481b69ff000000000000000000169a151560ff16907fffffffffffffffffffffffffffffffffffffffffffff0000000000000000000016179060081b61ff0016179060101b62ff000016179060181b63ff00000016179060201b64ff0000000016179060281b65ff000000000016179060301b66ff00000000000016179060381b67ff000000000000001617911b68ff00000000000000001617176013555f80f35b3461035b575f60031936011261035b576020906006549051908152f35b3461035b5773ffffffffffffffffffffffffffffffffffffffff61054b366125ae565b92917fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff63ff00000060025492151560181b16911617600255167fffffffffffffffffffffffff0000000000000000000000000000000000000000600b541617600b55600c555f80f35b3461035b57602060031936011261035b576105cd61237f565b151560ff60ff19600954169116176009555f80f35b3461035b575f60031936011261035b576002549051602091821c60ff1615158152f35b3461035b575f60031936011261035b5760209060ff5f5460101c1690519015158152f35b823461035b57602060031936011261035b5735600655005b3461035b57602060031936011261035b5773ffffffffffffffffffffffffffffffffffffffff61066f61238e565b165f908152601260205220805460ff19169055005b823461035b57602060031936011261035b5735600355005b903461035b575f60031936011261035b578051610140926106bc826123d4565b5f82525f60208301525f838301525f60608301525f60808301525f60a08301525f60c08301525f818301526101005f818401525f61012080940152835193610703856123d4565b6013549283809281838660ff9384841615159b8c8152602081019c8d878760081c1615159052868d84840193828960101c1615158552826060820197818b60181c161515895281608084019a818d60201c1615158c5260a085019c8d838260281c161515905260c086019e8f9160301c161515905284019d60381c1615158d5282019d871c1615158d52019c60481c1615158c52602083519e8f928352511515910152511515908c015251151560608b015251151560808a015251151560a089015251151560c0880152511515908601525115159084015251151590820152f35b3461035b57602060031936011261035b576107fd61237f565b15157fffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff67ff000000000000005f549260381b169116175f555f80f35b3461035b57602060031936011261035b5761085261237f565b15157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff61ff005f549260081b169116175f555f80f35b3461035b5773ffffffffffffffffffffffffffffffffffffffff6108ab366125ae565b929160ff60ff19600254169115151617600255167fffffffffffffffffffffffff0000000000000000000000000000000000000000600b541617600b55600c555f80f35b503461035b575f60031936011261035b576020906008549051908152f35b9091503461035b5760031936011261035b5761092761238e565b916109306123b1565b5080604435101561035b5767ffffffffffffffff60843581811161035b5761095b903690840161248b565b5060a43581811161035b57610973903690840161248b565b5060c43590811161035b5761098b9036908301612525565b506011549060ff8216156109e6575b50506020915060ff60025460181c166109d9575b60ff60025460301c166109cc575b60ff5f5460381c16159051908152f35b6109d4613a94565b6109bc565b6109e16139bd565b6109ae565b73ffffffffffffffffffffffffffffffffffffffff936020918451809681937f5e01eb5a000000000000000000000000000000000000000000000000000000008352165afa928315610ab35774ffffffffffffffffffffffffffffffffffffffff006020947fffffffffffffffffffffff0000000000000000000000000000000000000000ff925f91610a86575b5060081b169116176011555f8061099a565b610aa69150863d8811610aac575b610a9e8183612432565b8101906135b8565b5f610a74565b503d610a94565b82513d5f823e3d90fd5b833461035b57602060031936011261035b5735600755005b3461035b57602060031936011261035b57610aee61237f565b15157fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff63ff0000005f549260181b169116175f555f80f35b503461035b575f60031936011261035b5760209060ff6002541690519015158152f35b3461035b57602060031936011261035b57610b6261237f565b151560ff60ff195f54169116175f555f80f35b503461035b575f60031936011261035b5760209060ff60025460101c1690519015158152f35b503461035b575f60031936011261035b575f548151911c60ff1615158152602090f35b50823461035b57602060031936011261035b57359060015482101561035b5760209160015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601549051908152f35b503461035b575f60031936011261035b575f549051602091821c60ff1615158152f35b9091503461035b576003199060608236011261035b5783359167ffffffffffffffff831161035b57823603011261035b57610c6a6123b1565b50600d549273ffffffffffffffffffffffffffffffffffffffff9081600f54169283610cb2575b5f54855160109190911c60ff161581526020810187905280604081015b0390f35b82610cc160a460209301612680565b168551928380927f5e01eb5a0000000000000000000000000000000000000000000000000000000082525afa908115610d33575f91610d14575b501614610d0c575b5f808080610c91565b5f9150610d03565b610d2d915060203d602011610aac57610a9e8183612432565b5f610cfb565b84513d5f823e3d90fd5b503461035b575f60031936011261035b5760209060ff60025460181c1690519015158152f35b83823461035b5761010060031936011261035b57610d7f61238e565b50610d886123b1565b916005604435101561035b5767ffffffffffffffff9260643584811161035b57610db5903690840161248b565b5060843584811161035b57610dcd903690840161248b565b9060c43585811161035b57610de5903690850161248b565b5060e43594851161035b57610e03610e0993610cae96369101612525565b506135e4565b929091519283928361256b565b833461035b57610e25366125ee565b91907fffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff65ff000000000060025492151560281b1691161760025581519067ffffffffffffffff8211610f0e57680100000000000000008211610f0e575060105481601055808210610ed8575b50602080920160105f525f5b828110610ea657005b81517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae67282015590830190600101610e9d565b610f0890827f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae672918201910161266a565b82610e91565b6041907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b503461035b57602060031936011261035b5773ffffffffffffffffffffffffffffffffffffffff610f6961238e565b165f908152601260205220805460ff19166001179055005b3461035b57602060031936011261035b57610f9a61237f565b15157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff62ff00005f549260101b169116175f555f80f35b3461035b57602060031936011261035b57610fea61237f565b15157fffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffff65ff00000000005f549260281b169116175f555f80f35b503461035b575f60031936011261035b5760209060ff60025460381c1690519015158152f35b3461035b57602060031936011261035b5761106361237f565b15157fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff64ff000000005f549260201b169116175f555f80f35b833461035b576110ab366125ee565b91907fffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff66ff00000000000060025492151560301b1691161760025581519067ffffffffffffffff8211610f0e57680100000000000000008211610f0e57506010548160105580821061115f575b50602080920160105f525f5b82811061112d57005b81517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae67282015590830190600101611124565b61118f90827f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae672918201910161266a565b82611118565b3461035b57602060031936011261035b576111ae61237f565b15157fffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffff66ff0000000000005f549260301b169116175f555f80f35b503461035b575f60031936011261035b5760209073ffffffffffffffffffffffffffffffffffffffff60115460081c169051908152f35b3461035b57602060031936011261035b5761123961237f565b151560ff60ff19601154169116176011555f80f35b503461035b575f60031936011261035b5760209060ff5f5460381c1690519015158152f35b503461035b575f60031936011261035b5760209060ff5f541690519015158152f35b3461035b5773ffffffffffffffffffffffffffffffffffffffff6112b8366125ae565b92917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff61ff0060025492151560081b16911617600255167fffffffffffffffffffffffff0000000000000000000000000000000000000000600b541617600b55600c555f80f35b503461035b575f60031936011261035b5760209060ff5f5460181c1690519015158152f35b9091503461035b5760031990828236011261035b5783359167ffffffffffffffff831161035b57823603011261035b5761137c6123b1565b50826011549160ff8316156115cf575b50505060ff600254166115c2575b6002549160ff602093841c166115b5575b6009549060ff82166113ca575b505060ff5f5460181c16159051908152f35b73ffffffffffffffffffffffffffffffffffffffff8260081c1691821561155957600a54916113f883613567565b156114fd575060ff19809116600955835190855f9161141685613567565b90818552828501956001916001821691825f146114e457505060011461148f575b50505061147f93928261144e5f9485940382612432565b519082855af13d15611487573d91611465836124eb565b9261147286519485612432565b83523d5f8785013e613c14565b505f806113b8565b606091613c14565b600a5f9081529293507fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a85b8284106114d157505050820101858261144e611437565b80548685018601529284019281016114ba565b1687525050151560051b8301019050858261144e611437565b606490868651917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601660248201527f486f6f6b2063616c6c6461746120697320656d707479000000000000000000006044820152fd5b606482868651917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601560248201527f486f6f6b20636f6e7472616374206e6f742073657400000000000000000000006044820152fd5b6115bd613a94565b6113ab565b6115ca6139bd565b61139a565b73ffffffffffffffffffffffffffffffffffffffff6115f260a460209301612680565b168451928380927f5e01eb5a0000000000000000000000000000000000000000000000000000000082525afa908115611697577fffffffffffffffffffffff0000000000000000000000000000000000000000ff9174ffffffffffffffffffffffffffffffffffffffff00915f91611678575b5060081b169116176011555f828161138c565b611691915060203d602011610aac57610a9e8183612432565b5f611665565b83513d5f823e3d90fd5b503461035b575f60031936011261035b5760209060ff6011541690519015158152f35b9091503461035b5760031936011261035b576116de61238e565b916116e76123b1565b506005604435101561035b5767ffffffffffffffff60643581811161035b57611713903690840161248b565b5060a43581811161035b5761172b903690840161248b565b5060c43590811161035b576117439036908301612525565b506011549060ff82161561179e575b50506020915060ff60025460101c16611791575b60ff60025460281c16611784575b60ff5f5460281c16159051908152f35b61178c613a94565b611774565b6117996139bd565b611766565b73ffffffffffffffffffffffffffffffffffffffff936020918451809681937f5e01eb5a000000000000000000000000000000000000000000000000000000008352165afa928315610ab35774ffffffffffffffffffffffffffffffffffffffff006020947fffffffffffffffffffffff0000000000000000000000000000000000000000ff925f9161183e575b5060081b169116176011555f80611752565b6118559150863d8811610aac57610a9e8183612432565b5f61182c565b3461035b57602060031936011261035b5773ffffffffffffffffffffffffffffffffffffffff61188961238e565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000600e541617600e555f80f35b503461035b575f60031936011261035b576020906003549051908152f35b83823461035b5760031936011261035b576118ee61238e565b60249167ffffffffffffffff9183359183831161035b573660238401121561035b5782013592831161035b57366024848401011161035b577fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff006009549260081b16911617600955611976600a54613567565b601f8111611a9b575b505f92601f83116001146119dc57509181925f926119ce575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c191617600a555f80f35b602492500101358280611998565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08316937fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8925f905b868210611a7f5750508360019510611a44575b505050811b01600a55005b01602401357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600384901b60f8161c19169055828080611a39565b9091936020600181928488880101358155019501920190611a26565b611ae0907fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8601f850160051c81019160208610611ae6575b601f0160051c019061266a565b8361197f565b9091508190611ad3565b503461035b575f60031936011261035b5760209060ff5f5460301c1690519015158152f35b503461035b575f60031936011261035b5760209060ff60025460081c1690519015158152f35b83823461035b57606060031936011261035b5767ffffffffffffffff823581811161035b57611b6d903690850161248b565b5060443590811161035b57602092611b8791369101612525565b5060ff5f5416159051908152f35b503461035b575f60031936011261035b5760209060ff5f5460281c1690519015158152f35b833461035b57611bc9366125ee565b6002929192547fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff64ff00000000602095151560201b1691161760025580519167ffffffffffffffff8311610f0e57680100000000000000008311610f0e575060209060105483601055808410611c7d575b500160105f525f5b828110611c4b57005b81517f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae67282015590830190600101611c42565b611cad90847f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae672918201910161266a565b84611c3a565b833461035b57602060031936011261035b5735600855005b3461035b57602060031936011261035b57611ce461237f565b15157fffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffff67ff000000000000006002549260381b169116176002555f80f35b3461035b5773ffffffffffffffffffffffffffffffffffffffff611d45366125ae565b92917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff62ff000060025492151560101b16911617600255167fffffffffffffffffffffffff0000000000000000000000000000000000000000600b541617600b55600c555f80f35b503461035b575f60031936011261035b5760209060ff6009541690519015158152f35b833461035b57602060031936011261035b5735600555005b83823461035b5761010060031936011261035b57611e0461238e565b50611e0d6123b1565b9180604435101561035b5767ffffffffffffffff9260843584811161035b57611e39903690840161248b565b5060a43584811161035b57611e51903690840161248b565b9060c43585811161035b57611e69903690850161248b565b5060e43594851161035b57611e87610e0993610cae96369101612525565b5061319b565b83823461035b575f60031936011261035b57602091549051908152f35b3461035b575f60031936011261035b575f80547fffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff169055005b833461035b57602060031936011261035b5735600d55005b83823461035b578060031936011261035b5767ffffffffffffffff823581811161035b57611f2c903690850161248b565b5060243590811161035b57602092611f4691369101612525565b5060ff60025460081c16611f65575b60ff5f5460081c16159051908152f35b611f6d6139bd565b611f55565b83823461035b576003199160208336011261035b5780359267ffffffffffffffff841161035b5761018090843603011261035b57610cae92611fb4910161290d565b9151901515815260208101919091529081906040820190565b3461035b57602060031936011261035b5773ffffffffffffffffffffffffffffffffffffffff611ffb61238e565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000600f541617600f555f80f35b833461035b5760208060031936011261035b5767ffffffffffffffff90823582811161035b5761205c903690850161248b565b9269010000000000000000007fffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff5f5416175f558351928311610f0e57680100000000000000008311610f0e5750602060019360015484600155808510612100575b50019060015f525f5b8381106120cf57005b82517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf68201559181019184016120c6565b61213090857fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6918201910161266a565b856120bd565b9091503461035b5760031936011261035b5761215061238e565b6121586123b1565b5067ffffffffffffffff9260443584811161035b573660238201121561035b578082013560249561218882612473565b9661219587519889612432565b828852602460208099019360071b8501019336851161035b57602401925b8484106122135788888860807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c36011261035b5773ffffffffffffffffffffffffffffffffffffffff165f526012825260ff815f20541690519015158152f35b608090818536031261035b5788519182018281108582111761229957895273ffffffffffffffffffffffffffffffffffffffff8535818116810361035b5783528a860135600281101561035b578b84015289860135908116810361035b57898301526060908186013592831515840361035b576080938c938201528152019301926121b3565b836041897f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b503461035b57602060031936011261035b577fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff68ff000000000000000061230961237f565b15155f54931b169116175f555f80f35b503461035b575f60031936011261035b576020906005549051908152f35b503461035b575f60031936011261035b5760209060ff60025460301c1690519015158152f35b3461035b575f60031936011261035b5760209060ff60025460281c1615158152f35b60043590811515820361035b57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361035b57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361035b57565b610140810190811067ffffffffffffffff8211176123f157604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116123f157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176123f157604052565b67ffffffffffffffff81116123f15760051b60200190565b9080601f8301121561035b5760209082356124a581612473565b936124b36040519586612432565b81855260208086019260051b82010192831161035b57602001905b8282106124dc575050505090565b813581529083019083016124ce565b67ffffffffffffffff81116123f157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f8201121561035b5780359061253c826124eb565b9261254a6040519485612432565b8284526020838301011161035b57815f926020809301838601378301015290565b906040820190151582526020606081936040838201528551809452019301915f5b82811061259a575050505090565b83518552938101939281019260010161258c565b600319606091011261035b57600435801515810361035b579060243573ffffffffffffffffffffffffffffffffffffffff8116810361035b579060443590565b90604060031983011261035b57600435801515810361035b57916024359067ffffffffffffffff821161035b576126279160040161248b565b90565b8181029291811591840414171561263d57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818110612675575050565b5f815560010161266a565b3573ffffffffffffffffffffffffffffffffffffffff8116810361035b5790565b9080601f8301121561035b578151906020916126bc81612473565b936126ca6040519586612432565b81855260208086019260051b82010192831161035b57602001905b8282106126f3575050505090565b815173ffffffffffffffffffffffffffffffffffffffff8116810361035b5781529083019083016126e5565b5190811515820361035b57565b9080601f8301121561035b5781519060209161274781612473565b936127556040519586612432565b81855260208086019260051b82010192831161035b57602001905b82821061277e575050505090565b81518152908301908301612770565b9160808383031261035b5782519067ffffffffffffffff9182811161035b57836127b89186016126a1565b936020938482015184811161035b57820181601f8201121561035b5780516127df81612473565b916040976127ef89519485612432565b8284528084018160608095028401019286841161035b578201905b8382106128445750505050509482015184811161035b578161282d91840161272c565b93606083015190811161035b57612627920161272c565b848288031261035b578a51908582018281108c8211176123f1578c528251600281101561035b578252838301519073ffffffffffffffffffffffffffffffffffffffff8216820361035b5782859283899501528d6128a381870161271f565b9082015281520191019061280a565b80518210156128c65760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b9190820391821161263d57565b9190820180921161263d57565b905f9073ffffffffffffffffffffffffffffffffffffffff807f0000000000000000000000000000000000000000000000000000000000000000169261014085019061295882612680565b9060408051947f67e0e0760000000000000000000000000000000000000000000000000000000086528060049416848701525f866024818b5afa958615610ab3575f905f97613102575b506129ac86612680565b95828451977f535cfd8a00000000000000000000000000000000000000000000000000000000895216868801525f876024818d5afa968715610d33575f976130bc575b506129f990612680565b93828451957f7e361bde00000000000000000000000000000000000000000000000000000000875216868601525f856024818d5afa958615610d33575f955f9761305f575b505f5b8351811015612b4f578c85612a65602082612a5c868a6128b2565b51169301612680565b1603612ae65760a08d0135612a7a828b6128b2565b518103612ad057612aa190612a8f838a6128b2565b51612a9a848c6128b2565b5191613961565b612aab828c6128b2565b5103612abb576001905b01612a41565b505f9b61010001359a50505050505050505050565b505f9c61010001359b5050505050505050505050565b8c85612af78882612a5c868a6128b2565b1614612b06575b600190612ab5565b60c08d0135612b15828b6128b2565b518103612ad057612b2a90612a8f838a6128b2565b612b34828c6128b2565b5114612afe57505f9b61010001359a50505050505050505050565b509650979893505097945091506101008401359660035415155f14612d445750670de0b6b3a7640000612b846003548961262a565b049081612bb1575b5050505060e0905b013515159081612ba357509190565b60ff91505460201c16159190565b909192968435600281101561035b57612c8a5782612bce916128f3565b96612bda848601612680565b823b15612c865784517fae63932900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911691810191825230602083015260408201939093529192918591849182908490829060600103925af1908115612c7d5750908391612c65575b505060e0905b905f8080612b8c565b612c6e9061241e565b612c7957815f612c56565b5080fd5b513d85823e3d90fd5b8680fd5b82612c989198949398612900565b96612ca560208601612680565b91803b1561035b5783517fae63932900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909316948301948552306020860152604085019190915290925f91849182908490829060600103925af1908115612d3b5750612d27575b5060e090612c5c565b612d3291925061241e565b5f9060e0612d1e565b513d5f823e3d90fd5b909291825480612d5c575b505050505060e090612b94565b612d6f670de0b6b3a7640000918a61262a565b048015612d4f5790919293978535600281101561035b578290612f2a57612d9591612900565b9760ff60025460381c16612db7575b505050505060e0905b905f808080612d4f565b82860193612dc485612680565b1694835180967fa9059cbb0000000000000000000000000000000000000000000000000000000082526020978891815f81612e258a8a8a84016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af18015612f2057908794939291612ee1575b505f612e48612e9f97612680565b918651978895869485937f15afd40900000000000000000000000000000000000000000000000000000000855284016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af1908115612d3b5750612eb8575b808080612da4565b813d8311612eda575b612ecb8183612432565b8101031261035b575f80612eb0565b503d612ec1565b9384813d8311612f19575b612ef68183612432565b8101031261035b575f612e48612e9f97612f108a9761271f565b50975050612e3a565b503d612eec565b85513d5f823e3d90fd5b612f33916128f3565b9760ff60025460381c16612f4f575b505050505060e090612dad565b60209485870194612f5f86612680565b1686855180927fa9059cbb000000000000000000000000000000000000000000000000000000008252815f81612fbb8a8a8a84016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03925af18015612f2057908794939291613020575b505f612e48612fde97612680565b03925af1908115612d3b5750612ff7575b808080612f42565b813d8311613019575b61300a8183612432565b8101031261035b575f80612fef565b503d613000565b9384813d8311613058575b6130358183612432565b8101031261035b575f612e48612fde9761304f8a9761271f565b50975050612fd0565b503d61302b565b955095503d805f873e6130728187612432565b850194848187031261035b5780519567ffffffffffffffff9687811161035b578161309e91840161272c565b96602083015190811161035b576130b5920161272c565b955f612a3e565b9096503d805f833e6130ce8183612432565b81019060208183031261035b5780519167ffffffffffffffff831161035b576129f9926130fb920161272c565b96906129ef565b90506131219196503d805f833e6131198183612432565b81019061278d565b97929150966129a2565b60405190816001805490818352602090602084019260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6925f905b82821061318357505050505090613181910383612432565b565b84548652889650948501949383019390830190613169565b91909160ff5f5460481c1661355a5773ffffffffffffffffffffffffffffffffffffffff92837f0000000000000000000000000000000000000000000000000000000000000000169060409485517f67e0e076000000000000000000000000000000000000000000000000000000008152816004951660048201525f81602481875afa908115613550575f91613534575b50600780541561334a575f5b845181101561333457670de0b6b3a764000061326061325783886128b2565b5184549061262a565b049081613272575b6001915001613238565b6132868261328083896128b2565b516128f3565b61329082886128b2565b528461329c82866128b2565b5116873b1561035b578a517fae63932900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116818a019081523060208201526040810193909352915f90839081906060010381838b5af191821561332a5760019261331b575b50613268565b6133249061241e565b5f613315565b8a513d5f823e3d90fd5b5050505093905060ff91505b5f54901c16159190565b5091949395929060088054613369575b5050505060ff91929350613340565b5f9795975b875181101561351d5783670de0b6b3a764000061339761338e848c6128b2565b5185549061262a565b04846133a384896128b2565b5116816133b6575b50505060010161336e565b88517fa9059cbb0000000000000000000000000000000000000000000000000000000081528a818061341186602098899584016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03815f865af1801561332a57908492916134ea575b508b613446866134408661343a83866128b2565b51612900565b926128b2565b528a61349f8b5194859384937f15afd40900000000000000000000000000000000000000000000000000000000855284016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03815f8a5af180156134e0576134b7575b85916133ab565b813d83116134d9575b6134ca8183612432565b8101031261035b575f806134b0565b503d6134c0565b88513d5f823e3d90fd5b9182813d8311613516575b6134ff8183612432565b8101031261035b57613511849261271f565b613426565b503d6134f5565b505050505060ff91509291928392915f808061335a565b61354891503d805f833e6131198183612432565b91505061322c565b87513d5f823e3d90fd5b506001915061262761312b565b90600182811c921680156135ae575b602083101461358157565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691613576565b9081602091031261035b575173ffffffffffffffffffffffffffffffffffffffff8116810361035b5790565b91909160ff5f5460481c1661355a5773ffffffffffffffffffffffffffffffffffffffff92837f0000000000000000000000000000000000000000000000000000000000000000169060409485517f67e0e076000000000000000000000000000000000000000000000000000000008152816004951660048201525f81602481875afa908115613550575f91613945575b50600580541561377a575f5b845181101561376457670de0b6b3a76400006136a061325783886128b2565b0490816136b2575b6001915001613681565b6136c08261343a83896128b2565b6136ca82886128b2565b52846136d682866128b2565b5116873b1561035b578a517fae63932900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116818a019081523060208201526040810193909352915f90839081906060010381838b5af191821561332a57600192613755575b506136a8565b61375e9061241e565b5f61374f565b50505050935050505b60ff5f5460301c16159190565b509194959290600692600654613797575b5050505050509061376d565b5f5b87518110156139335783836137ae83856128b2565b5116670de0b6b3a76400006137cf6137c6858d6128b2565b5189549061262a565b0490816137e2575b505050600101613799565b88517fa9059cbb0000000000000000000000000000000000000000000000000000000081528a818061383d86602098899584016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03815f865af1801561332a5790849291613900575b508b613866866134408661328083866128b2565b528a6138bf8b5194859384937f15afd40900000000000000000000000000000000000000000000000000000000855284016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03815f8a5af180156134e0576138d7575b85916137d7565b813d83116138f9575b6138ea8183612432565b8101031261035b575f806138d0565b503d6138e0565b9182813d831161392c575b6139158183612432565b8101031261035b57613927849261271f565b613852565b503d61390b565b505050505050505f808080808061378b565b61395991503d805f833e6131198183612432565b915050613675565b9161396b9161262a565b90670de0b6b3a76400009081810291818304149015171561263d578115613990570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff600b5416600c54813b1561035b575f916024839260405194859384927fa1cfa04100000000000000000000000000000000000000000000000000000000845260048401525af18015613a2e57613a255750565b6131819061241e565b6040513d5f823e3d90fd5b6010549081815260208091019160105f527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae672915f905b828210613a7d575050505090565b835485529384019360019384019390910190613a6f565b73ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001681600e541691604051927fca4f28030000000000000000000000000000000000000000000000000000000084528060048501525f84602481865afa938415613a2e575f94613bd4575b50823b1561035b5790926040519384927fd8f4cf3c0000000000000000000000000000000000000000000000000000000084526084840190600485015260806024850152825180915260a48401926020809101925f905b838210613bb757505050505091815f81613ba68296613b976003199182858203016044860152613a39565b90838203016064840152613a39565b03925af18015613a2e57613a255750565b845181168652889650948201949382019360019190910190613b6c565b9093503d805f833e613be68183612432565b810160208282031261035b57815167ffffffffffffffff811161035b57613c0d92016126a1565b925f613b15565b90613c515750805115613c2957805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580613ca4575b613c62575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15613c5a56fea2646970667358221220968aa2520cfcce4714119156a5598b6d58c007d3b1a3f98fe2b4528a947503ad64736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 SWAP2 DUP3 CALLDATASIZE LT ISZERO PUSH2 0x16 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH1 0xE0 PUSH0 CALLDATALOAD DUP2 SHR SWAP3 DUP4 PUSH3 0x5B449C EQ PUSH2 0x235D JUMPI POP DUP3 PUSH3 0xD332FD EQ PUSH2 0x2337 JUMPI DUP3 PUSH4 0x2273467 EQ PUSH2 0x2319 JUMPI DUP3 PUSH4 0x39388BA EQ PUSH2 0x22C4 JUMPI DUP3 PUSH4 0xB89F182 EQ PUSH2 0x2136 JUMPI DUP3 PUSH4 0xC54B1DE EQ PUSH2 0x2029 JUMPI DUP3 PUSH4 0x1064DFDD EQ PUSH2 0x1FCD JUMPI DUP3 PUSH4 0x18B6EB55 EQ PUSH2 0x1F72 JUMPI DUP3 PUSH4 0x1C149E28 EQ PUSH2 0x1EFB JUMPI DUP3 PUSH4 0x214FF4C5 EQ PUSH2 0x1EE3 JUMPI DUP3 PUSH4 0x232B59F7 EQ PUSH2 0x1EAA JUMPI DUP3 PUSH4 0x2352C2ED EQ PUSH2 0x1E8D JUMPI DUP3 PUSH4 0x2754888D EQ PUSH2 0x1DE8 JUMPI DUP3 PUSH4 0x2E55A841 EQ PUSH2 0x1DD0 JUMPI DUP3 PUSH4 0x31378F4F EQ PUSH2 0x1DAD JUMPI DUP3 PUSH4 0x335D4126 EQ PUSH2 0x1D22 JUMPI DUP3 PUSH4 0x3478DB73 EQ PUSH2 0x1CCB JUMPI DUP3 PUSH4 0x34A168EC EQ PUSH2 0x1CB3 JUMPI DUP3 PUSH4 0x34E3A8C3 EQ PUSH2 0x1BBA JUMPI DUP3 PUSH4 0x35F7290E EQ PUSH2 0x1B95 JUMPI DUP3 PUSH4 0x38BE241D EQ PUSH2 0x1B3B JUMPI DUP3 PUSH4 0x3D05719A EQ PUSH2 0x1B15 JUMPI DUP3 PUSH4 0x40DC21D4 EQ PUSH2 0x1AF0 JUMPI DUP3 PUSH4 0x423EF816 EQ PUSH2 0x18D5 JUMPI DUP3 PUSH4 0x4392312A EQ PUSH2 0x18B7 JUMPI DUP3 PUSH4 0x4437152A EQ PUSH2 0x185B JUMPI DUP3 PUSH4 0x45421EC7 EQ PUSH2 0x16C4 JUMPI DUP3 PUSH4 0x4F036756 EQ PUSH2 0x16A1 JUMPI DUP3 PUSH4 0x5211FA77 EQ PUSH2 0x1344 JUMPI DUP3 PUSH4 0x5351B230 EQ PUSH2 0x131F JUMPI DUP3 PUSH4 0x5991DE93 EQ PUSH2 0x1295 JUMPI DUP3 PUSH4 0x5CD00746 EQ PUSH2 0x1273 JUMPI DUP3 PUSH4 0x677DB20E EQ PUSH2 0x124E JUMPI DUP3 PUSH4 0x68C6DB6A EQ PUSH2 0x1220 JUMPI DUP3 PUSH4 0x6A9A0611 EQ PUSH2 0x11E9 JUMPI DUP3 PUSH4 0x6E7D75E5 EQ PUSH2 0x1195 JUMPI DUP3 PUSH4 0x71EFF9D2 EQ PUSH2 0x109C JUMPI DUP3 PUSH4 0x7B695D10 EQ PUSH2 0x104A JUMPI DUP3 PUSH4 0x80C554C1 EQ PUSH2 0x1024 JUMPI DUP3 PUSH4 0x82FB5D21 EQ PUSH2 0xFD1 JUMPI DUP3 PUSH4 0x87AC5691 EQ PUSH2 0xF81 JUMPI DUP3 PUSH4 0x8F5FAE62 EQ PUSH2 0xF3A JUMPI DUP3 PUSH4 0x93C4B286 EQ PUSH2 0xE16 JUMPI DUP3 PUSH4 0x976907CC EQ PUSH2 0xD63 JUMPI DUP3 PUSH4 0x9F94C522 EQ PUSH2 0xD3D JUMPI DUP3 PUSH4 0xA0E8F5AC EQ PUSH2 0xC31 JUMPI DUP3 PUSH4 0xA5098F10 EQ PUSH2 0xC0E JUMPI DUP3 PUSH4 0xA55E47BE EQ PUSH2 0xBBE JUMPI DUP3 PUSH4 0xA975DDA0 EQ PUSH2 0xB9B JUMPI DUP3 PUSH4 0xAF72105D EQ PUSH2 0xB75 JUMPI DUP3 PUSH4 0xB127E385 EQ PUSH2 0xB49 JUMPI DUP3 PUSH4 0xB298157B EQ PUSH2 0xB26 JUMPI DUP3 PUSH4 0xB3A763B9 EQ PUSH2 0xAD5 JUMPI DUP3 PUSH4 0xB445FBE7 EQ PUSH2 0xABD JUMPI DUP3 PUSH4 0xBA5F9F40 EQ PUSH2 0x90D JUMPI DUP3 PUSH4 0xBD825F6B EQ PUSH2 0x8EF JUMPI DUP3 PUSH4 0xC25DADE8 EQ PUSH2 0x888 JUMPI DUP3 PUSH4 0xD3FCA637 EQ PUSH2 0x839 JUMPI DUP3 PUSH4 0xD4F83182 EQ PUSH2 0x7E4 JUMPI DUP3 PUSH4 0xD77153A7 EQ PUSH2 0x69C JUMPI POP DUP2 PUSH4 0xDA09AACF EQ PUSH2 0x684 JUMPI DUP2 PUSH4 0xDC7776CA EQ PUSH2 0x641 JUMPI DUP2 PUSH4 0xDDA1C15B EQ PUSH2 0x629 JUMPI DUP2 PUSH4 0xE326F03A EQ PUSH2 0x605 JUMPI DUP2 PUSH4 0xE4C593D7 EQ PUSH2 0x5E2 JUMPI DUP2 PUSH4 0xE5E3B67E EQ PUSH2 0x5B4 JUMPI DUP2 PUSH4 0xE62EECDD EQ PUSH2 0x528 JUMPI DUP2 PUSH4 0xE908E85D EQ PUSH2 0x50B JUMPI DUP2 PUSH4 0xE9F7C591 EQ PUSH2 0x3C4 JUMPI DUP2 PUSH4 0xEB499270 EQ PUSH2 0x3A7 JUMPI DUP2 PUSH4 0xF5279D9C EQ PUSH2 0x383 JUMPI DUP2 PUSH4 0xF8B5EF85 EQ PUSH2 0x35F JUMPI POP PUSH4 0xFC6E0F59 EQ PUSH2 0x344 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI DUP1 CALLDATALOAD SWAP1 SSTORE STOP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH0 SLOAD PUSH1 0x48 SHR AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH0 SLOAD PUSH1 0x8 SHR AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0x7 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH2 0x140 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0x3E0 DUP2 MLOAD PUSH2 0x23D4 JUMP JUMPDEST PUSH2 0x3E8 PUSH2 0x237F JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x35B JUMPI PUSH1 0x44 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x35B JUMPI PUSH1 0x64 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x35B JUMPI PUSH1 0x84 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x35B JUMPI PUSH1 0xA4 CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP1 SWAP3 SUB PUSH2 0x35B JUMPI PUSH1 0xC4 CALLDATALOAD SWAP3 DUP4 ISZERO ISZERO DUP1 SWAP5 SUB PUSH2 0x35B JUMPI PUSH1 0xE4 CALLDATALOAD SWAP5 DUP6 ISZERO ISZERO DUP1 SWAP7 SUB PUSH2 0x35B JUMPI PUSH2 0x104 CALLDATALOAD SWAP7 DUP8 ISZERO ISZERO DUP1 SWAP9 SUB PUSH2 0x35B JUMPI PUSH2 0x124 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x35B JUMPI PUSH1 0x13 SLOAD SWAP1 PUSH1 0x48 SHL PUSH10 0xFF000000000000000000 AND SWAP11 ISZERO ISZERO PUSH1 0xFF AND SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000 AND OR SWAP1 PUSH1 0x8 SHL PUSH2 0xFF00 AND OR SWAP1 PUSH1 0x10 SHL PUSH3 0xFF0000 AND OR SWAP1 PUSH1 0x18 SHL PUSH4 0xFF000000 AND OR SWAP1 PUSH1 0x20 SHL PUSH5 0xFF00000000 AND OR SWAP1 PUSH1 0x28 SHL PUSH6 0xFF0000000000 AND OR SWAP1 PUSH1 0x30 SHL PUSH7 0xFF000000000000 AND OR SWAP1 PUSH1 0x38 SHL PUSH8 0xFF00000000000000 AND OR SWAP2 SHL PUSH9 0xFF0000000000000000 AND OR OR PUSH1 0x13 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0x6 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x54B CALLDATASIZE PUSH2 0x25AE JUMP JUMPDEST SWAP3 SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF PUSH4 0xFF000000 PUSH1 0x2 SLOAD SWAP3 ISZERO ISZERO PUSH1 0x18 SHL AND SWAP2 AND OR PUSH1 0x2 SSTORE AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0xB SLOAD AND OR PUSH1 0xB SSTORE PUSH1 0xC SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0x5CD PUSH2 0x237F JUMP JUMPDEST ISZERO ISZERO PUSH1 0xFF PUSH1 0xFF NOT PUSH1 0x9 SLOAD AND SWAP2 AND OR PUSH1 0x9 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x2 SLOAD SWAP1 MLOAD PUSH1 0x20 SWAP2 DUP3 SHR PUSH1 0xFF AND ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH0 SLOAD PUSH1 0x10 SHR AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI CALLDATALOAD PUSH1 0x6 SSTORE STOP JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x66F PUSH2 0x238E JUMP JUMPDEST AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 MSTORE KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND SWAP1 SSTORE STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI CALLDATALOAD PUSH1 0x3 SSTORE STOP JUMPDEST SWAP1 CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI DUP1 MLOAD PUSH2 0x140 SWAP3 PUSH2 0x6BC DUP3 PUSH2 0x23D4 JUMP JUMPDEST PUSH0 DUP3 MSTORE PUSH0 PUSH1 0x20 DUP4 ADD MSTORE PUSH0 DUP4 DUP4 ADD MSTORE PUSH0 PUSH1 0x60 DUP4 ADD MSTORE PUSH0 PUSH1 0x80 DUP4 ADD MSTORE PUSH0 PUSH1 0xA0 DUP4 ADD MSTORE PUSH0 PUSH1 0xC0 DUP4 ADD MSTORE PUSH0 DUP2 DUP4 ADD MSTORE PUSH2 0x100 PUSH0 DUP2 DUP5 ADD MSTORE PUSH0 PUSH2 0x120 DUP1 SWAP5 ADD MSTORE DUP4 MLOAD SWAP4 PUSH2 0x703 DUP6 PUSH2 0x23D4 JUMP JUMPDEST PUSH1 0x13 SLOAD SWAP3 DUP4 DUP1 SWAP3 DUP2 DUP4 DUP7 PUSH1 0xFF SWAP4 DUP5 DUP5 AND ISZERO ISZERO SWAP12 DUP13 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP13 DUP14 DUP8 DUP8 PUSH1 0x8 SHR AND ISZERO ISZERO SWAP1 MSTORE DUP7 DUP14 DUP5 DUP5 ADD SWAP4 DUP3 DUP10 PUSH1 0x10 SHR AND ISZERO ISZERO DUP6 MSTORE DUP3 PUSH1 0x60 DUP3 ADD SWAP8 DUP2 DUP12 PUSH1 0x18 SHR AND ISZERO ISZERO DUP10 MSTORE DUP2 PUSH1 0x80 DUP5 ADD SWAP11 DUP2 DUP14 PUSH1 0x20 SHR AND ISZERO ISZERO DUP13 MSTORE PUSH1 0xA0 DUP6 ADD SWAP13 DUP14 DUP4 DUP3 PUSH1 0x28 SHR AND ISZERO ISZERO SWAP1 MSTORE PUSH1 0xC0 DUP7 ADD SWAP15 DUP16 SWAP2 PUSH1 0x30 SHR AND ISZERO ISZERO SWAP1 MSTORE DUP5 ADD SWAP14 PUSH1 0x38 SHR AND ISZERO ISZERO DUP14 MSTORE DUP3 ADD SWAP14 DUP8 SHR AND ISZERO ISZERO DUP14 MSTORE ADD SWAP13 PUSH1 0x48 SHR AND ISZERO ISZERO DUP13 MSTORE PUSH1 0x20 DUP4 MLOAD SWAP15 DUP16 SWAP3 DUP4 MSTORE MLOAD ISZERO ISZERO SWAP2 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP13 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x60 DUP12 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x80 DUP11 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xA0 DUP10 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xC0 DUP9 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP7 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP5 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0x7FD PUSH2 0x237F JUMP JUMPDEST ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF PUSH8 0xFF00000000000000 PUSH0 SLOAD SWAP3 PUSH1 0x38 SHL AND SWAP2 AND OR PUSH0 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0x852 PUSH2 0x237F JUMP JUMPDEST ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF PUSH2 0xFF00 PUSH0 SLOAD SWAP3 PUSH1 0x8 SHL AND SWAP2 AND OR PUSH0 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x8AB CALLDATASIZE PUSH2 0x25AE JUMP JUMPDEST SWAP3 SWAP2 PUSH1 0xFF PUSH1 0xFF NOT PUSH1 0x2 SLOAD AND SWAP2 ISZERO ISZERO AND OR PUSH1 0x2 SSTORE AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0xB SLOAD AND OR PUSH1 0xB SSTORE PUSH1 0xC SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0x8 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0x927 PUSH2 0x238E JUMP JUMPDEST SWAP2 PUSH2 0x930 PUSH2 0x23B1 JUMP JUMPDEST POP DUP1 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x35B JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x95B SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x248B JUMP JUMPDEST POP PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x973 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x248B JUMP JUMPDEST POP PUSH1 0xC4 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x98B SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0x2525 JUMP JUMPDEST POP PUSH1 0x11 SLOAD SWAP1 PUSH1 0xFF DUP3 AND ISZERO PUSH2 0x9E6 JUMPI JUMPDEST POP POP PUSH1 0x20 SWAP2 POP PUSH1 0xFF PUSH1 0x2 SLOAD PUSH1 0x18 SHR AND PUSH2 0x9D9 JUMPI JUMPDEST PUSH1 0xFF PUSH1 0x2 SLOAD PUSH1 0x30 SHR AND PUSH2 0x9CC JUMPI JUMPDEST PUSH1 0xFF PUSH0 SLOAD PUSH1 0x38 SHR AND ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x9D4 PUSH2 0x3A94 JUMP JUMPDEST PUSH2 0x9BC JUMP JUMPDEST PUSH2 0x9E1 PUSH2 0x39BD JUMP JUMPDEST PUSH2 0x9AE JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 PUSH1 0x20 SWAP2 DUP5 MLOAD DUP1 SWAP7 DUP2 SWAP4 PUSH32 0x5E01EB5A00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xAB3 JUMPI PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x20 SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP3 PUSH0 SWAP2 PUSH2 0xA86 JUMPI JUMPDEST POP PUSH1 0x8 SHL AND SWAP2 AND OR PUSH1 0x11 SSTORE PUSH0 DUP1 PUSH2 0x99A JUMP JUMPDEST PUSH2 0xAA6 SWAP2 POP DUP7 RETURNDATASIZE DUP9 GT PUSH2 0xAAC JUMPI JUMPDEST PUSH2 0xA9E DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x35B8 JUMP JUMPDEST PUSH0 PUSH2 0xA74 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xA94 JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI CALLDATALOAD PUSH1 0x7 SSTORE STOP JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0xAEE PUSH2 0x237F JUMP JUMPDEST ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFF PUSH4 0xFF000000 PUSH0 SLOAD SWAP3 PUSH1 0x18 SHL AND SWAP2 AND OR PUSH0 SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH1 0x2 SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0xB62 PUSH2 0x237F JUMP JUMPDEST ISZERO ISZERO PUSH1 0xFF PUSH1 0xFF NOT PUSH0 SLOAD AND SWAP2 AND OR PUSH0 SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH1 0x2 SLOAD PUSH1 0x10 SHR AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH0 SLOAD DUP2 MLOAD SWAP2 SHR PUSH1 0xFF AND ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 SWAP1 RETURN JUMPDEST POP DUP3 CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI CALLDATALOAD SWAP1 PUSH1 0x1 SLOAD DUP3 LT ISZERO PUSH2 0x35B JUMPI PUSH1 0x20 SWAP2 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 ADD SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH0 SLOAD SWAP1 MLOAD PUSH1 0x20 SWAP2 DUP3 SHR PUSH1 0xFF AND ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x3 NOT SWAP1 PUSH1 0x60 DUP3 CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI DUP4 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x35B JUMPI DUP3 CALLDATASIZE SUB ADD SLT PUSH2 0x35B JUMPI PUSH2 0xC6A PUSH2 0x23B1 JUMP JUMPDEST POP PUSH1 0xD SLOAD SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 PUSH1 0xF SLOAD AND SWAP3 DUP4 PUSH2 0xCB2 JUMPI JUMPDEST PUSH0 SLOAD DUP6 MLOAD PUSH1 0x10 SWAP2 SWAP1 SWAP2 SHR PUSH1 0xFF AND ISZERO DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP8 SWAP1 MSTORE DUP1 PUSH1 0x40 DUP2 ADD JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP3 PUSH2 0xCC1 PUSH1 0xA4 PUSH1 0x20 SWAP4 ADD PUSH2 0x2680 JUMP JUMPDEST AND DUP6 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0x5E01EB5A00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xD33 JUMPI PUSH0 SWAP2 PUSH2 0xD14 JUMPI JUMPDEST POP AND EQ PUSH2 0xD0C JUMPI JUMPDEST PUSH0 DUP1 DUP1 DUP1 PUSH2 0xC91 JUMP JUMPDEST PUSH0 SWAP2 POP PUSH2 0xD03 JUMP JUMPDEST PUSH2 0xD2D SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xAAC JUMPI PUSH2 0xA9E DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST PUSH0 PUSH2 0xCFB JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH1 0x2 SLOAD PUSH1 0x18 SHR AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x35B JUMPI PUSH2 0x100 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0xD7F PUSH2 0x238E JUMP JUMPDEST POP PUSH2 0xD88 PUSH2 0x23B1 JUMP JUMPDEST SWAP2 PUSH1 0x5 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x35B JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 PUSH1 0x64 CALLDATALOAD DUP5 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0xDB5 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x248B JUMP JUMPDEST POP PUSH1 0x84 CALLDATALOAD DUP5 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0xDCD SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x248B JUMP JUMPDEST SWAP1 PUSH1 0xC4 CALLDATALOAD DUP6 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0xDE5 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x248B JUMP JUMPDEST POP PUSH1 0xE4 CALLDATALOAD SWAP5 DUP6 GT PUSH2 0x35B JUMPI PUSH2 0xE03 PUSH2 0xE09 SWAP4 PUSH2 0xCAE SWAP7 CALLDATASIZE SWAP2 ADD PUSH2 0x2525 JUMP JUMPDEST POP PUSH2 0x35E4 JUMP JUMPDEST SWAP3 SWAP1 SWAP2 MLOAD SWAP3 DUP4 SWAP3 DUP4 PUSH2 0x256B JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x35B JUMPI PUSH2 0xE25 CALLDATASIZE PUSH2 0x25EE JUMP JUMPDEST SWAP2 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF PUSH6 0xFF0000000000 PUSH1 0x2 SLOAD SWAP3 ISZERO ISZERO PUSH1 0x28 SHL AND SWAP2 AND OR PUSH1 0x2 SSTORE DUP2 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xF0E JUMPI PUSH9 0x10000000000000000 DUP3 GT PUSH2 0xF0E JUMPI POP PUSH1 0x10 SLOAD DUP2 PUSH1 0x10 SSTORE DUP1 DUP3 LT PUSH2 0xED8 JUMPI JUMPDEST POP PUSH1 0x20 DUP1 SWAP3 ADD PUSH1 0x10 PUSH0 MSTORE PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0xEA6 JUMPI STOP JUMPDEST DUP2 MLOAD PUSH32 0x1B6847DC741A1B0CD08D278845F9D819D87B734759AFB55FE2DE5CB82A9AE672 DUP3 ADD SSTORE SWAP1 DUP4 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0xE9D JUMP JUMPDEST PUSH2 0xF08 SWAP1 DUP3 PUSH32 0x1B6847DC741A1B0CD08D278845F9D819D87B734759AFB55FE2DE5CB82A9AE672 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x266A JUMP JUMPDEST DUP3 PUSH2 0xE91 JUMP JUMPDEST PUSH1 0x41 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xF69 PUSH2 0x238E JUMP JUMPDEST AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x12 PUSH1 0x20 MSTORE KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE STOP JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0xF9A PUSH2 0x237F JUMP JUMPDEST ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF PUSH3 0xFF0000 PUSH0 SLOAD SWAP3 PUSH1 0x10 SHL AND SWAP2 AND OR PUSH0 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0xFEA PUSH2 0x237F JUMP JUMPDEST ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFF PUSH6 0xFF0000000000 PUSH0 SLOAD SWAP3 PUSH1 0x28 SHL AND SWAP2 AND OR PUSH0 SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH1 0x2 SLOAD PUSH1 0x38 SHR AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0x1063 PUSH2 0x237F JUMP JUMPDEST ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF PUSH5 0xFF00000000 PUSH0 SLOAD SWAP3 PUSH1 0x20 SHL AND SWAP2 AND OR PUSH0 SSTORE PUSH0 DUP1 RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x35B JUMPI PUSH2 0x10AB CALLDATASIZE PUSH2 0x25EE JUMP JUMPDEST SWAP2 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF PUSH7 0xFF000000000000 PUSH1 0x2 SLOAD SWAP3 ISZERO ISZERO PUSH1 0x30 SHL AND SWAP2 AND OR PUSH1 0x2 SSTORE DUP2 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xF0E JUMPI PUSH9 0x10000000000000000 DUP3 GT PUSH2 0xF0E JUMPI POP PUSH1 0x10 SLOAD DUP2 PUSH1 0x10 SSTORE DUP1 DUP3 LT PUSH2 0x115F JUMPI JUMPDEST POP PUSH1 0x20 DUP1 SWAP3 ADD PUSH1 0x10 PUSH0 MSTORE PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x112D JUMPI STOP JUMPDEST DUP2 MLOAD PUSH32 0x1B6847DC741A1B0CD08D278845F9D819D87B734759AFB55FE2DE5CB82A9AE672 DUP3 ADD SSTORE SWAP1 DUP4 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1124 JUMP JUMPDEST PUSH2 0x118F SWAP1 DUP3 PUSH32 0x1B6847DC741A1B0CD08D278845F9D819D87B734759AFB55FE2DE5CB82A9AE672 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x266A JUMP JUMPDEST DUP3 PUSH2 0x1118 JUMP JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0x11AE PUSH2 0x237F JUMP JUMPDEST ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFF PUSH7 0xFF000000000000 PUSH0 SLOAD SWAP3 PUSH1 0x30 SHL AND SWAP2 AND OR PUSH0 SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x11 SLOAD PUSH1 0x8 SHR AND SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0x1239 PUSH2 0x237F JUMP JUMPDEST ISZERO ISZERO PUSH1 0xFF PUSH1 0xFF NOT PUSH1 0x11 SLOAD AND SWAP2 AND OR PUSH1 0x11 SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH0 SLOAD PUSH1 0x38 SHR AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH0 SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x12B8 CALLDATASIZE PUSH2 0x25AE JUMP JUMPDEST SWAP3 SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF PUSH2 0xFF00 PUSH1 0x2 SLOAD SWAP3 ISZERO ISZERO PUSH1 0x8 SHL AND SWAP2 AND OR PUSH1 0x2 SSTORE AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0xB SLOAD AND OR PUSH1 0xB SSTORE PUSH1 0xC SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH0 SLOAD PUSH1 0x18 SHR AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x3 NOT SWAP1 DUP3 DUP3 CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI DUP4 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x35B JUMPI DUP3 CALLDATASIZE SUB ADD SLT PUSH2 0x35B JUMPI PUSH2 0x137C PUSH2 0x23B1 JUMP JUMPDEST POP DUP3 PUSH1 0x11 SLOAD SWAP2 PUSH1 0xFF DUP4 AND ISZERO PUSH2 0x15CF JUMPI JUMPDEST POP POP POP PUSH1 0xFF PUSH1 0x2 SLOAD AND PUSH2 0x15C2 JUMPI JUMPDEST PUSH1 0x2 SLOAD SWAP2 PUSH1 0xFF PUSH1 0x20 SWAP4 DUP5 SHR AND PUSH2 0x15B5 JUMPI JUMPDEST PUSH1 0x9 SLOAD SWAP1 PUSH1 0xFF DUP3 AND PUSH2 0x13CA JUMPI JUMPDEST POP POP PUSH1 0xFF PUSH0 SLOAD PUSH1 0x18 SHR AND ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH1 0x8 SHR AND SWAP2 DUP3 ISZERO PUSH2 0x1559 JUMPI PUSH1 0xA SLOAD SWAP2 PUSH2 0x13F8 DUP4 PUSH2 0x3567 JUMP JUMPDEST ISZERO PUSH2 0x14FD JUMPI POP PUSH1 0xFF NOT DUP1 SWAP2 AND PUSH1 0x9 SSTORE DUP4 MLOAD SWAP1 DUP6 PUSH0 SWAP2 PUSH2 0x1416 DUP6 PUSH2 0x3567 JUMP JUMPDEST SWAP1 DUP2 DUP6 MSTORE DUP3 DUP6 ADD SWAP6 PUSH1 0x1 SWAP2 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x14E4 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x148F JUMPI JUMPDEST POP POP POP PUSH2 0x147F SWAP4 SWAP3 DUP3 PUSH2 0x144E PUSH0 SWAP5 DUP6 SWAP5 SUB DUP3 PUSH2 0x2432 JUMP JUMPDEST MLOAD SWAP1 DUP3 DUP6 GAS CALL RETURNDATASIZE ISZERO PUSH2 0x1487 JUMPI RETURNDATASIZE SWAP2 PUSH2 0x1465 DUP4 PUSH2 0x24EB JUMP JUMPDEST SWAP3 PUSH2 0x1472 DUP7 MLOAD SWAP5 DUP6 PUSH2 0x2432 JUMP JUMPDEST DUP4 MSTORE RETURNDATASIZE PUSH0 DUP8 DUP6 ADD RETURNDATACOPY PUSH2 0x3C14 JUMP JUMPDEST POP PUSH0 DUP1 PUSH2 0x13B8 JUMP JUMPDEST PUSH1 0x60 SWAP2 PUSH2 0x3C14 JUMP JUMPDEST PUSH1 0xA PUSH0 SWAP1 DUP2 MSTORE SWAP3 SWAP4 POP PUSH32 0xC65A7BB8D6351C1CF70C95A316CC6A92839C986682D98BC35F958F4883F9D2A8 JUMPDEST DUP3 DUP5 LT PUSH2 0x14D1 JUMPI POP POP POP DUP3 ADD ADD DUP6 DUP3 PUSH2 0x144E PUSH2 0x1437 JUMP JUMPDEST DUP1 SLOAD DUP7 DUP6 ADD DUP7 ADD MSTORE SWAP3 DUP5 ADD SWAP3 DUP2 ADD PUSH2 0x14BA JUMP JUMPDEST AND DUP8 MSTORE POP POP ISZERO ISZERO PUSH1 0x5 SHL DUP4 ADD ADD SWAP1 POP DUP6 DUP3 PUSH2 0x144E PUSH2 0x1437 JUMP JUMPDEST PUSH1 0x64 SWAP1 DUP7 DUP7 MLOAD SWAP2 PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0x16 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x486F6F6B2063616C6C6461746120697320656D70747900000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x64 DUP3 DUP7 DUP7 MLOAD SWAP2 PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x486F6F6B20636F6E7472616374206E6F74207365740000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH2 0x15BD PUSH2 0x3A94 JUMP JUMPDEST PUSH2 0x13AB JUMP JUMPDEST PUSH2 0x15CA PUSH2 0x39BD JUMP JUMPDEST PUSH2 0x139A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x15F2 PUSH1 0xA4 PUSH1 0x20 SWAP4 ADD PUSH2 0x2680 JUMP JUMPDEST AND DUP5 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0x5E01EB5A00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1697 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP2 PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP2 PUSH0 SWAP2 PUSH2 0x1678 JUMPI JUMPDEST POP PUSH1 0x8 SHL AND SWAP2 AND OR PUSH1 0x11 SSTORE PUSH0 DUP3 DUP2 PUSH2 0x138C JUMP JUMPDEST PUSH2 0x1691 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xAAC JUMPI PUSH2 0xA9E DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST PUSH0 PUSH2 0x1665 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH1 0x11 SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0x16DE PUSH2 0x238E JUMP JUMPDEST SWAP2 PUSH2 0x16E7 PUSH2 0x23B1 JUMP JUMPDEST POP PUSH1 0x5 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x35B JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x1713 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x248B JUMP JUMPDEST POP PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x172B SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x248B JUMP JUMPDEST POP PUSH1 0xC4 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x1743 SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0x2525 JUMP JUMPDEST POP PUSH1 0x11 SLOAD SWAP1 PUSH1 0xFF DUP3 AND ISZERO PUSH2 0x179E JUMPI JUMPDEST POP POP PUSH1 0x20 SWAP2 POP PUSH1 0xFF PUSH1 0x2 SLOAD PUSH1 0x10 SHR AND PUSH2 0x1791 JUMPI JUMPDEST PUSH1 0xFF PUSH1 0x2 SLOAD PUSH1 0x28 SHR AND PUSH2 0x1784 JUMPI JUMPDEST PUSH1 0xFF PUSH0 SLOAD PUSH1 0x28 SHR AND ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x178C PUSH2 0x3A94 JUMP JUMPDEST PUSH2 0x1774 JUMP JUMPDEST PUSH2 0x1799 PUSH2 0x39BD JUMP JUMPDEST PUSH2 0x1766 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 PUSH1 0x20 SWAP2 DUP5 MLOAD DUP1 SWAP7 DUP2 SWAP4 PUSH32 0x5E01EB5A00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xAB3 JUMPI PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x20 SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF SWAP3 PUSH0 SWAP2 PUSH2 0x183E JUMPI JUMPDEST POP PUSH1 0x8 SHL AND SWAP2 AND OR PUSH1 0x11 SSTORE PUSH0 DUP1 PUSH2 0x1752 JUMP JUMPDEST PUSH2 0x1855 SWAP2 POP DUP7 RETURNDATASIZE DUP9 GT PUSH2 0xAAC JUMPI PUSH2 0xA9E DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST PUSH0 PUSH2 0x182C JUMP JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1889 PUSH2 0x238E JUMP JUMPDEST AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0xE SLOAD AND OR PUSH1 0xE SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0x3 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0x18EE PUSH2 0x238E JUMP JUMPDEST PUSH1 0x24 SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP4 CALLDATALOAD SWAP2 DUP4 DUP4 GT PUSH2 0x35B JUMPI CALLDATASIZE PUSH1 0x23 DUP5 ADD SLT ISZERO PUSH2 0x35B JUMPI DUP3 ADD CALLDATALOAD SWAP3 DUP4 GT PUSH2 0x35B JUMPI CALLDATASIZE PUSH1 0x24 DUP5 DUP5 ADD ADD GT PUSH2 0x35B JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x9 SLOAD SWAP3 PUSH1 0x8 SHL AND SWAP2 AND OR PUSH1 0x9 SSTORE PUSH2 0x1976 PUSH1 0xA SLOAD PUSH2 0x3567 JUMP JUMPDEST PUSH1 0x1F DUP2 GT PUSH2 0x1A9B JUMPI JUMPDEST POP PUSH0 SWAP3 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0x19DC JUMPI POP SWAP2 DUP2 SWAP3 PUSH0 SWAP3 PUSH2 0x19CE JUMPI JUMPDEST POP POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 PUSH1 0x1 SHL SWAP3 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0xA SSTORE PUSH0 DUP1 RETURN JUMPDEST PUSH1 0x24 SWAP3 POP ADD ADD CALLDATALOAD DUP3 DUP1 PUSH2 0x1998 JUMP JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 DUP4 AND SWAP4 PUSH32 0xC65A7BB8D6351C1CF70C95A316CC6A92839C986682D98BC35F958F4883F9D2A8 SWAP3 PUSH0 SWAP1 JUMPDEST DUP7 DUP3 LT PUSH2 0x1A7F JUMPI POP POP DUP4 PUSH1 0x1 SWAP6 LT PUSH2 0x1A44 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0xA SSTORE STOP JUMPDEST ADD PUSH1 0x24 ADD CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x3 DUP5 SWAP1 SHL PUSH1 0xF8 AND SHR NOT AND SWAP1 SSTORE DUP3 DUP1 DUP1 PUSH2 0x1A39 JUMP JUMPDEST SWAP1 SWAP2 SWAP4 PUSH1 0x20 PUSH1 0x1 DUP2 SWAP3 DUP5 DUP9 DUP9 ADD ADD CALLDATALOAD DUP2 SSTORE ADD SWAP6 ADD SWAP3 ADD SWAP1 PUSH2 0x1A26 JUMP JUMPDEST PUSH2 0x1AE0 SWAP1 PUSH32 0xC65A7BB8D6351C1CF70C95A316CC6A92839C986682D98BC35F958F4883F9D2A8 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD SWAP2 PUSH1 0x20 DUP7 LT PUSH2 0x1AE6 JUMPI JUMPDEST PUSH1 0x1F ADD PUSH1 0x5 SHR ADD SWAP1 PUSH2 0x266A JUMP JUMPDEST DUP4 PUSH2 0x197F JUMP JUMPDEST SWAP1 SWAP2 POP DUP2 SWAP1 PUSH2 0x1AD3 JUMP JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH0 SLOAD PUSH1 0x30 SHR AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH1 0x2 SLOAD PUSH1 0x8 SHR AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH8 0xFFFFFFFFFFFFFFFF DUP3 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x1B6D SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x248B JUMP JUMPDEST POP PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP3 PUSH2 0x1B87 SWAP2 CALLDATASIZE SWAP2 ADD PUSH2 0x2525 JUMP JUMPDEST POP PUSH1 0xFF PUSH0 SLOAD AND ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH0 SLOAD PUSH1 0x28 SHR AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x35B JUMPI PUSH2 0x1BC9 CALLDATASIZE PUSH2 0x25EE JUMP JUMPDEST PUSH1 0x2 SWAP3 SWAP2 SWAP3 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFF PUSH5 0xFF00000000 PUSH1 0x20 SWAP6 ISZERO ISZERO PUSH1 0x20 SHL AND SWAP2 AND OR PUSH1 0x2 SSTORE DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0xF0E JUMPI PUSH9 0x10000000000000000 DUP4 GT PUSH2 0xF0E JUMPI POP PUSH1 0x20 SWAP1 PUSH1 0x10 SLOAD DUP4 PUSH1 0x10 SSTORE DUP1 DUP5 LT PUSH2 0x1C7D JUMPI JUMPDEST POP ADD PUSH1 0x10 PUSH0 MSTORE PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1C4B JUMPI STOP JUMPDEST DUP2 MLOAD PUSH32 0x1B6847DC741A1B0CD08D278845F9D819D87B734759AFB55FE2DE5CB82A9AE672 DUP3 ADD SSTORE SWAP1 DUP4 ADD SWAP1 PUSH1 0x1 ADD PUSH2 0x1C42 JUMP JUMPDEST PUSH2 0x1CAD SWAP1 DUP5 PUSH32 0x1B6847DC741A1B0CD08D278845F9D819D87B734759AFB55FE2DE5CB82A9AE672 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x266A JUMP JUMPDEST DUP5 PUSH2 0x1C3A JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI CALLDATALOAD PUSH1 0x8 SSTORE STOP JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0x1CE4 PUSH2 0x237F JUMP JUMPDEST ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFF PUSH8 0xFF00000000000000 PUSH1 0x2 SLOAD SWAP3 PUSH1 0x38 SHL AND SWAP2 AND OR PUSH1 0x2 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1D45 CALLDATASIZE PUSH2 0x25AE JUMP JUMPDEST SWAP3 SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFF PUSH3 0xFF0000 PUSH1 0x2 SLOAD SWAP3 ISZERO ISZERO PUSH1 0x10 SHL AND SWAP2 AND OR PUSH1 0x2 SSTORE AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0xB SLOAD AND OR PUSH1 0xB SSTORE PUSH1 0xC SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH1 0x9 SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI CALLDATALOAD PUSH1 0x5 SSTORE STOP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x35B JUMPI PUSH2 0x100 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0x1E04 PUSH2 0x238E JUMP JUMPDEST POP PUSH2 0x1E0D PUSH2 0x23B1 JUMP JUMPDEST SWAP2 DUP1 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x35B JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 PUSH1 0x84 CALLDATALOAD DUP5 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x1E39 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x248B JUMP JUMPDEST POP PUSH1 0xA4 CALLDATALOAD DUP5 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x1E51 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x248B JUMP JUMPDEST SWAP1 PUSH1 0xC4 CALLDATALOAD DUP6 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x1E69 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x248B JUMP JUMPDEST POP PUSH1 0xE4 CALLDATALOAD SWAP5 DUP6 GT PUSH2 0x35B JUMPI PUSH2 0x1E87 PUSH2 0xE09 SWAP4 PUSH2 0xCAE SWAP7 CALLDATASIZE SWAP2 ADD PUSH2 0x2525 JUMP JUMPDEST POP PUSH2 0x319B JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP2 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF AND SWAP1 SSTORE STOP JUMPDEST DUP4 CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI CALLDATALOAD PUSH1 0xD SSTORE STOP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x35B JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH8 0xFFFFFFFFFFFFFFFF DUP3 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x1F2C SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x248B JUMP JUMPDEST POP PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP3 PUSH2 0x1F46 SWAP2 CALLDATASIZE SWAP2 ADD PUSH2 0x2525 JUMP JUMPDEST POP PUSH1 0xFF PUSH1 0x2 SLOAD PUSH1 0x8 SHR AND PUSH2 0x1F65 JUMPI JUMPDEST PUSH1 0xFF PUSH0 SLOAD PUSH1 0x8 SHR AND ISZERO SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x1F6D PUSH2 0x39BD JUMP JUMPDEST PUSH2 0x1F55 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x3 NOT SWAP2 PUSH1 0x20 DUP4 CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI DUP1 CALLDATALOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0x35B JUMPI PUSH2 0x180 SWAP1 DUP5 CALLDATASIZE SUB ADD SLT PUSH2 0x35B JUMPI PUSH2 0xCAE SWAP3 PUSH2 0x1FB4 SWAP2 ADD PUSH2 0x290D JUMP JUMPDEST SWAP2 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x40 DUP3 ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1FFB PUSH2 0x238E JUMP JUMPDEST AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0xF SLOAD AND OR PUSH1 0xF SSTORE PUSH0 DUP1 RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP3 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x205C SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x248B JUMP JUMPDEST SWAP3 PUSH10 0x1000000000000000000 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFF PUSH0 SLOAD AND OR PUSH0 SSTORE DUP4 MLOAD SWAP3 DUP4 GT PUSH2 0xF0E JUMPI PUSH9 0x10000000000000000 DUP4 GT PUSH2 0xF0E JUMPI POP PUSH1 0x20 PUSH1 0x1 SWAP4 PUSH1 0x1 SLOAD DUP5 PUSH1 0x1 SSTORE DUP1 DUP6 LT PUSH2 0x2100 JUMPI JUMPDEST POP ADD SWAP1 PUSH1 0x1 PUSH0 MSTORE PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0x20CF JUMPI STOP JUMPDEST DUP3 MLOAD PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 DUP3 ADD SSTORE SWAP2 DUP2 ADD SWAP2 DUP5 ADD PUSH2 0x20C6 JUMP JUMPDEST PUSH2 0x2130 SWAP1 DUP6 PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x266A JUMP JUMPDEST DUP6 PUSH2 0x20BD JUMP JUMPDEST SWAP1 SWAP2 POP CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH2 0x2150 PUSH2 0x238E JUMP JUMPDEST PUSH2 0x2158 PUSH2 0x23B1 JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 PUSH1 0x44 CALLDATALOAD DUP5 DUP2 GT PUSH2 0x35B JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x35B JUMPI DUP1 DUP3 ADD CALLDATALOAD PUSH1 0x24 SWAP6 PUSH2 0x2188 DUP3 PUSH2 0x2473 JUMP JUMPDEST SWAP7 PUSH2 0x2195 DUP8 MLOAD SWAP9 DUP10 PUSH2 0x2432 JUMP JUMPDEST DUP3 DUP9 MSTORE PUSH1 0x24 PUSH1 0x20 DUP1 SWAP10 ADD SWAP4 PUSH1 0x7 SHL DUP6 ADD ADD SWAP4 CALLDATASIZE DUP6 GT PUSH2 0x35B JUMPI PUSH1 0x24 ADD SWAP3 JUMPDEST DUP5 DUP5 LT PUSH2 0x2213 JUMPI DUP9 DUP9 DUP9 PUSH1 0x80 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH1 0x12 DUP3 MSTORE PUSH1 0xFF DUP2 PUSH0 KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x80 SWAP1 DUP2 DUP6 CALLDATASIZE SUB SLT PUSH2 0x35B JUMPI DUP9 MLOAD SWAP2 DUP3 ADD DUP3 DUP2 LT DUP6 DUP3 GT OR PUSH2 0x2299 JUMPI DUP10 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x35B JUMPI DUP4 MSTORE DUP11 DUP7 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x35B JUMPI DUP12 DUP5 ADD MSTORE DUP10 DUP7 ADD CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x35B JUMPI DUP10 DUP4 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 DUP7 ADD CALLDATALOAD SWAP3 DUP4 ISZERO ISZERO DUP5 SUB PUSH2 0x35B JUMPI PUSH1 0x80 SWAP4 DUP13 SWAP4 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP4 ADD SWAP3 PUSH2 0x21B3 JUMP JUMPDEST DUP4 PUSH1 0x41 DUP10 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFF PUSH9 0xFF0000000000000000 PUSH2 0x2309 PUSH2 0x237F JUMP JUMPDEST ISZERO ISZERO PUSH0 SLOAD SWAP4 SHL AND SWAP2 AND OR PUSH0 SSTORE PUSH0 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0x5 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH1 0x2 SLOAD PUSH1 0x30 SHR AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x35B JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH1 0x2 SLOAD PUSH1 0x28 SHR AND ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x35B JUMPI JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x35B JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x35B JUMPI JUMP JUMPDEST PUSH2 0x140 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x23F1 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x23F1 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x23F1 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x23F1 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x35B JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x24A5 DUP2 PUSH2 0x2473 JUMP JUMPDEST SWAP4 PUSH2 0x24B3 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x2432 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x35B JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x24DC JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x24CE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x23F1 JUMPI PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x35B JUMPI DUP1 CALLDATALOAD SWAP1 PUSH2 0x253C DUP3 PUSH2 0x24EB JUMP JUMPDEST SWAP3 PUSH2 0x254A PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x2432 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x35B JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x40 DUP3 ADD SWAP1 ISZERO ISZERO DUP3 MSTORE PUSH1 0x20 PUSH1 0x60 DUP2 SWAP4 PUSH1 0x40 DUP4 DUP3 ADD MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x259A JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x258C JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x35B JUMPI PUSH1 0x4 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x35B JUMPI SWAP1 PUSH1 0x24 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x35B JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x35B JUMPI PUSH1 0x4 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x35B JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x35B JUMPI PUSH2 0x2627 SWAP2 PUSH1 0x4 ADD PUSH2 0x248B JUMP JUMPDEST SWAP1 JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x263D JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 DUP2 LT PUSH2 0x2675 JUMPI POP POP JUMP JUMPDEST PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x266A JUMP JUMPDEST CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x35B JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x35B JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x26BC DUP2 PUSH2 0x2473 JUMP JUMPDEST SWAP4 PUSH2 0x26CA PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x2432 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x35B JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x26F3 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x35B JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x26E5 JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x35B JUMPI JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x35B JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x2747 DUP2 PUSH2 0x2473 JUMP JUMPDEST SWAP4 PUSH2 0x2755 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x2432 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x35B JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x277E JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x2770 JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP4 DUP4 SUB SLT PUSH2 0x35B JUMPI DUP3 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP2 GT PUSH2 0x35B JUMPI DUP4 PUSH2 0x27B8 SWAP2 DUP7 ADD PUSH2 0x26A1 JUMP JUMPDEST SWAP4 PUSH1 0x20 SWAP4 DUP5 DUP3 ADD MLOAD DUP5 DUP2 GT PUSH2 0x35B JUMPI DUP3 ADD DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x35B JUMPI DUP1 MLOAD PUSH2 0x27DF DUP2 PUSH2 0x2473 JUMP JUMPDEST SWAP2 PUSH1 0x40 SWAP8 PUSH2 0x27EF DUP10 MLOAD SWAP5 DUP6 PUSH2 0x2432 JUMP JUMPDEST DUP3 DUP5 MSTORE DUP1 DUP5 ADD DUP2 PUSH1 0x60 DUP1 SWAP6 MUL DUP5 ADD ADD SWAP3 DUP7 DUP5 GT PUSH2 0x35B JUMPI DUP3 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x2844 JUMPI POP POP POP POP POP SWAP5 DUP3 ADD MLOAD DUP5 DUP2 GT PUSH2 0x35B JUMPI DUP2 PUSH2 0x282D SWAP2 DUP5 ADD PUSH2 0x272C JUMP JUMPDEST SWAP4 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x2627 SWAP3 ADD PUSH2 0x272C JUMP JUMPDEST DUP5 DUP3 DUP9 SUB SLT PUSH2 0x35B JUMPI DUP11 MLOAD SWAP1 DUP6 DUP3 ADD DUP3 DUP2 LT DUP13 DUP3 GT OR PUSH2 0x23F1 JUMPI DUP13 MSTORE DUP3 MLOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x35B JUMPI DUP3 MSTORE DUP4 DUP4 ADD MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x35B JUMPI DUP3 DUP6 SWAP3 DUP4 DUP10 SWAP6 ADD MSTORE DUP14 PUSH2 0x28A3 DUP2 DUP8 ADD PUSH2 0x271F JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x280A JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x28C6 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x263D JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x263D JUMPI JUMP JUMPDEST SWAP1 PUSH0 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP3 PUSH2 0x140 DUP6 ADD SWAP1 PUSH2 0x2958 DUP3 PUSH2 0x2680 JUMP JUMPDEST SWAP1 PUSH1 0x40 DUP1 MLOAD SWAP5 PUSH32 0x67E0E07600000000000000000000000000000000000000000000000000000000 DUP7 MSTORE DUP1 PUSH1 0x4 SWAP5 AND DUP5 DUP8 ADD MSTORE PUSH0 DUP7 PUSH1 0x24 DUP2 DUP12 GAS STATICCALL SWAP6 DUP7 ISZERO PUSH2 0xAB3 JUMPI PUSH0 SWAP1 PUSH0 SWAP8 PUSH2 0x3102 JUMPI JUMPDEST POP PUSH2 0x29AC DUP7 PUSH2 0x2680 JUMP JUMPDEST SWAP6 DUP3 DUP5 MLOAD SWAP8 PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP10 MSTORE AND DUP7 DUP9 ADD MSTORE PUSH0 DUP8 PUSH1 0x24 DUP2 DUP14 GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0xD33 JUMPI PUSH0 SWAP8 PUSH2 0x30BC JUMPI JUMPDEST POP PUSH2 0x29F9 SWAP1 PUSH2 0x2680 JUMP JUMPDEST SWAP4 DUP3 DUP5 MLOAD SWAP6 PUSH32 0x7E361BDE00000000000000000000000000000000000000000000000000000000 DUP8 MSTORE AND DUP7 DUP7 ADD MSTORE PUSH0 DUP6 PUSH1 0x24 DUP2 DUP14 GAS STATICCALL SWAP6 DUP7 ISZERO PUSH2 0xD33 JUMPI PUSH0 SWAP6 PUSH0 SWAP8 PUSH2 0x305F JUMPI JUMPDEST POP PUSH0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x2B4F JUMPI DUP13 DUP6 PUSH2 0x2A65 PUSH1 0x20 DUP3 PUSH2 0x2A5C DUP7 DUP11 PUSH2 0x28B2 JUMP JUMPDEST MLOAD AND SWAP4 ADD PUSH2 0x2680 JUMP JUMPDEST AND SUB PUSH2 0x2AE6 JUMPI PUSH1 0xA0 DUP14 ADD CALLDATALOAD PUSH2 0x2A7A DUP3 DUP12 PUSH2 0x28B2 JUMP JUMPDEST MLOAD DUP2 SUB PUSH2 0x2AD0 JUMPI PUSH2 0x2AA1 SWAP1 PUSH2 0x2A8F DUP4 DUP11 PUSH2 0x28B2 JUMP JUMPDEST MLOAD PUSH2 0x2A9A DUP5 DUP13 PUSH2 0x28B2 JUMP JUMPDEST MLOAD SWAP2 PUSH2 0x3961 JUMP JUMPDEST PUSH2 0x2AAB DUP3 DUP13 PUSH2 0x28B2 JUMP JUMPDEST MLOAD SUB PUSH2 0x2ABB JUMPI PUSH1 0x1 SWAP1 JUMPDEST ADD PUSH2 0x2A41 JUMP JUMPDEST POP PUSH0 SWAP12 PUSH2 0x100 ADD CALLDATALOAD SWAP11 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST POP PUSH0 SWAP13 PUSH2 0x100 ADD CALLDATALOAD SWAP12 POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP13 DUP6 PUSH2 0x2AF7 DUP9 DUP3 PUSH2 0x2A5C DUP7 DUP11 PUSH2 0x28B2 JUMP JUMPDEST AND EQ PUSH2 0x2B06 JUMPI JUMPDEST PUSH1 0x1 SWAP1 PUSH2 0x2AB5 JUMP JUMPDEST PUSH1 0xC0 DUP14 ADD CALLDATALOAD PUSH2 0x2B15 DUP3 DUP12 PUSH2 0x28B2 JUMP JUMPDEST MLOAD DUP2 SUB PUSH2 0x2AD0 JUMPI PUSH2 0x2B2A SWAP1 PUSH2 0x2A8F DUP4 DUP11 PUSH2 0x28B2 JUMP JUMPDEST PUSH2 0x2B34 DUP3 DUP13 PUSH2 0x28B2 JUMP JUMPDEST MLOAD EQ PUSH2 0x2AFE JUMPI POP PUSH0 SWAP12 PUSH2 0x100 ADD CALLDATALOAD SWAP11 POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST POP SWAP7 POP SWAP8 SWAP9 SWAP4 POP POP SWAP8 SWAP5 POP SWAP2 POP PUSH2 0x100 DUP5 ADD CALLDATALOAD SWAP7 PUSH1 0x3 SLOAD ISZERO ISZERO PUSH0 EQ PUSH2 0x2D44 JUMPI POP PUSH8 0xDE0B6B3A7640000 PUSH2 0x2B84 PUSH1 0x3 SLOAD DUP10 PUSH2 0x262A JUMP JUMPDEST DIV SWAP1 DUP2 PUSH2 0x2BB1 JUMPI JUMPDEST POP POP POP POP PUSH1 0xE0 SWAP1 JUMPDEST ADD CALLDATALOAD ISZERO ISZERO SWAP1 DUP2 PUSH2 0x2BA3 JUMPI POP SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0xFF SWAP2 POP SLOAD PUSH1 0x20 SHR AND ISZERO SWAP2 SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP7 DUP5 CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x35B JUMPI PUSH2 0x2C8A JUMPI DUP3 PUSH2 0x2BCE SWAP2 PUSH2 0x28F3 JUMP JUMPDEST SWAP7 PUSH2 0x2BDA DUP5 DUP7 ADD PUSH2 0x2680 JUMP JUMPDEST DUP3 EXTCODESIZE ISZERO PUSH2 0x2C86 JUMPI DUP5 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND SWAP2 DUP2 ADD SWAP2 DUP3 MSTORE ADDRESS PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 SWAP3 SWAP2 DUP6 SWAP2 DUP5 SWAP2 DUP3 SWAP1 DUP5 SWAP1 DUP3 SWAP1 PUSH1 0x60 ADD SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2C7D JUMPI POP SWAP1 DUP4 SWAP2 PUSH2 0x2C65 JUMPI JUMPDEST POP POP PUSH1 0xE0 SWAP1 JUMPDEST SWAP1 PUSH0 DUP1 DUP1 PUSH2 0x2B8C JUMP JUMPDEST PUSH2 0x2C6E SWAP1 PUSH2 0x241E JUMP JUMPDEST PUSH2 0x2C79 JUMPI DUP2 PUSH0 PUSH2 0x2C56 JUMP JUMPDEST POP DUP1 REVERT JUMPDEST MLOAD RETURNDATASIZE DUP6 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP7 DUP1 REVERT JUMPDEST DUP3 PUSH2 0x2C98 SWAP2 SWAP9 SWAP5 SWAP4 SWAP9 PUSH2 0x2900 JUMP JUMPDEST SWAP7 PUSH2 0x2CA5 PUSH1 0x20 DUP7 ADD PUSH2 0x2680 JUMP JUMPDEST SWAP2 DUP1 EXTCODESIZE ISZERO PUSH2 0x35B JUMPI DUP4 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP4 AND SWAP5 DUP4 ADD SWAP5 DUP6 MSTORE ADDRESS PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 SWAP3 PUSH0 SWAP2 DUP5 SWAP2 DUP3 SWAP1 DUP5 SWAP1 DUP3 SWAP1 PUSH1 0x60 ADD SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2D3B JUMPI POP PUSH2 0x2D27 JUMPI JUMPDEST POP PUSH1 0xE0 SWAP1 PUSH2 0x2C5C JUMP JUMPDEST PUSH2 0x2D32 SWAP2 SWAP3 POP PUSH2 0x241E JUMP JUMPDEST PUSH0 SWAP1 PUSH1 0xE0 PUSH2 0x2D1E JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP3 SWAP2 DUP3 SLOAD DUP1 PUSH2 0x2D5C JUMPI JUMPDEST POP POP POP POP POP PUSH1 0xE0 SWAP1 PUSH2 0x2B94 JUMP JUMPDEST PUSH2 0x2D6F PUSH8 0xDE0B6B3A7640000 SWAP2 DUP11 PUSH2 0x262A JUMP JUMPDEST DIV DUP1 ISZERO PUSH2 0x2D4F JUMPI SWAP1 SWAP2 SWAP3 SWAP4 SWAP8 DUP6 CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x35B JUMPI DUP3 SWAP1 PUSH2 0x2F2A JUMPI PUSH2 0x2D95 SWAP2 PUSH2 0x2900 JUMP JUMPDEST SWAP8 PUSH1 0xFF PUSH1 0x2 SLOAD PUSH1 0x38 SHR AND PUSH2 0x2DB7 JUMPI JUMPDEST POP POP POP POP POP PUSH1 0xE0 SWAP1 JUMPDEST SWAP1 PUSH0 DUP1 DUP1 DUP1 PUSH2 0x2D4F JUMP JUMPDEST DUP3 DUP7 ADD SWAP4 PUSH2 0x2DC4 DUP6 PUSH2 0x2680 JUMP JUMPDEST AND SWAP5 DUP4 MLOAD DUP1 SWAP7 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x20 SWAP8 DUP9 SWAP2 DUP2 PUSH0 DUP2 PUSH2 0x2E25 DUP11 DUP11 DUP11 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x2F20 JUMPI SWAP1 DUP8 SWAP5 SWAP4 SWAP3 SWAP2 PUSH2 0x2EE1 JUMPI JUMPDEST POP PUSH0 PUSH2 0x2E48 PUSH2 0x2E9F SWAP8 PUSH2 0x2680 JUMP JUMPDEST SWAP2 DUP7 MLOAD SWAP8 DUP9 SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2D3B JUMPI POP PUSH2 0x2EB8 JUMPI JUMPDEST DUP1 DUP1 DUP1 PUSH2 0x2DA4 JUMP JUMPDEST DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2EDA JUMPI JUMPDEST PUSH2 0x2ECB DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x35B JUMPI PUSH0 DUP1 PUSH2 0x2EB0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2EC1 JUMP JUMPDEST SWAP4 DUP5 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2F19 JUMPI JUMPDEST PUSH2 0x2EF6 DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x35B JUMPI PUSH0 PUSH2 0x2E48 PUSH2 0x2E9F SWAP8 PUSH2 0x2F10 DUP11 SWAP8 PUSH2 0x271F JUMP JUMPDEST POP SWAP8 POP POP PUSH2 0x2E3A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2EEC JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x2F33 SWAP2 PUSH2 0x28F3 JUMP JUMPDEST SWAP8 PUSH1 0xFF PUSH1 0x2 SLOAD PUSH1 0x38 SHR AND PUSH2 0x2F4F JUMPI JUMPDEST POP POP POP POP POP PUSH1 0xE0 SWAP1 PUSH2 0x2DAD JUMP JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP8 ADD SWAP5 PUSH2 0x2F5F DUP7 PUSH2 0x2680 JUMP JUMPDEST AND DUP7 DUP6 MLOAD DUP1 SWAP3 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 PUSH0 DUP2 PUSH2 0x2FBB DUP11 DUP11 DUP11 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x2F20 JUMPI SWAP1 DUP8 SWAP5 SWAP4 SWAP3 SWAP2 PUSH2 0x3020 JUMPI JUMPDEST POP PUSH0 PUSH2 0x2E48 PUSH2 0x2FDE SWAP8 PUSH2 0x2680 JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2D3B JUMPI POP PUSH2 0x2FF7 JUMPI JUMPDEST DUP1 DUP1 DUP1 PUSH2 0x2F42 JUMP JUMPDEST DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3019 JUMPI JUMPDEST PUSH2 0x300A DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x35B JUMPI PUSH0 DUP1 PUSH2 0x2FEF JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3000 JUMP JUMPDEST SWAP4 DUP5 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3058 JUMPI JUMPDEST PUSH2 0x3035 DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x35B JUMPI PUSH0 PUSH2 0x2E48 PUSH2 0x2FDE SWAP8 PUSH2 0x304F DUP11 SWAP8 PUSH2 0x271F JUMP JUMPDEST POP SWAP8 POP POP PUSH2 0x2FD0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x302B JUMP JUMPDEST SWAP6 POP SWAP6 POP RETURNDATASIZE DUP1 PUSH0 DUP8 RETURNDATACOPY PUSH2 0x3072 DUP2 DUP8 PUSH2 0x2432 JUMP JUMPDEST DUP6 ADD SWAP5 DUP5 DUP2 DUP8 SUB SLT PUSH2 0x35B JUMPI DUP1 MLOAD SWAP6 PUSH8 0xFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP2 GT PUSH2 0x35B JUMPI DUP2 PUSH2 0x309E SWAP2 DUP5 ADD PUSH2 0x272C JUMP JUMPDEST SWAP7 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x30B5 SWAP3 ADD PUSH2 0x272C JUMP JUMPDEST SWAP6 PUSH0 PUSH2 0x2A3E JUMP JUMPDEST SWAP1 SWAP7 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x30CE DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x20 DUP2 DUP4 SUB SLT PUSH2 0x35B JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x35B JUMPI PUSH2 0x29F9 SWAP3 PUSH2 0x30FB SWAP3 ADD PUSH2 0x272C JUMP JUMPDEST SWAP7 SWAP1 PUSH2 0x29EF JUMP JUMPDEST SWAP1 POP PUSH2 0x3121 SWAP2 SWAP7 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x3119 DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x278D JUMP JUMPDEST SWAP8 SWAP3 SWAP2 POP SWAP7 PUSH2 0x29A2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 PUSH1 0x1 DUP1 SLOAD SWAP1 DUP2 DUP4 MSTORE PUSH1 0x20 SWAP1 PUSH1 0x20 DUP5 ADD SWAP3 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP3 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x3183 JUMPI POP POP POP POP POP SWAP1 PUSH2 0x3181 SWAP2 SUB DUP4 PUSH2 0x2432 JUMP JUMPDEST JUMP JUMPDEST DUP5 SLOAD DUP7 MSTORE DUP9 SWAP7 POP SWAP5 DUP6 ADD SWAP5 SWAP4 DUP4 ADD SWAP4 SWAP1 DUP4 ADD SWAP1 PUSH2 0x3169 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0xFF PUSH0 SLOAD PUSH1 0x48 SHR AND PUSH2 0x355A JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 PUSH32 0x0 AND SWAP1 PUSH1 0x40 SWAP5 DUP6 MLOAD PUSH32 0x67E0E07600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 PUSH1 0x4 SWAP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x3550 JUMPI PUSH0 SWAP2 PUSH2 0x3534 JUMPI JUMPDEST POP PUSH1 0x7 DUP1 SLOAD ISZERO PUSH2 0x334A JUMPI PUSH0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x3334 JUMPI PUSH8 0xDE0B6B3A7640000 PUSH2 0x3260 PUSH2 0x3257 DUP4 DUP9 PUSH2 0x28B2 JUMP JUMPDEST MLOAD DUP5 SLOAD SWAP1 PUSH2 0x262A JUMP JUMPDEST DIV SWAP1 DUP2 PUSH2 0x3272 JUMPI JUMPDEST PUSH1 0x1 SWAP2 POP ADD PUSH2 0x3238 JUMP JUMPDEST PUSH2 0x3286 DUP3 PUSH2 0x3280 DUP4 DUP10 PUSH2 0x28B2 JUMP JUMPDEST MLOAD PUSH2 0x28F3 JUMP JUMPDEST PUSH2 0x3290 DUP3 DUP9 PUSH2 0x28B2 JUMP JUMPDEST MSTORE DUP5 PUSH2 0x329C DUP3 DUP7 PUSH2 0x28B2 JUMP JUMPDEST MLOAD AND DUP8 EXTCODESIZE ISZERO PUSH2 0x35B JUMPI DUP11 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 DUP11 ADD SWAP1 DUP2 MSTORE ADDRESS PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 DUP2 SWAP1 PUSH1 0x60 ADD SUB DUP2 DUP4 DUP12 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x332A JUMPI PUSH1 0x1 SWAP3 PUSH2 0x331B JUMPI JUMPDEST POP PUSH2 0x3268 JUMP JUMPDEST PUSH2 0x3324 SWAP1 PUSH2 0x241E JUMP JUMPDEST PUSH0 PUSH2 0x3315 JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP POP POP POP SWAP4 SWAP1 POP PUSH1 0xFF SWAP2 POP JUMPDEST PUSH0 SLOAD SWAP1 SHR AND ISZERO SWAP2 SWAP1 JUMP JUMPDEST POP SWAP2 SWAP5 SWAP4 SWAP6 SWAP3 SWAP1 PUSH1 0x8 DUP1 SLOAD PUSH2 0x3369 JUMPI JUMPDEST POP POP POP POP PUSH1 0xFF SWAP2 SWAP3 SWAP4 POP PUSH2 0x3340 JUMP JUMPDEST PUSH0 SWAP8 SWAP6 SWAP8 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x351D JUMPI DUP4 PUSH8 0xDE0B6B3A7640000 PUSH2 0x3397 PUSH2 0x338E DUP5 DUP13 PUSH2 0x28B2 JUMP JUMPDEST MLOAD DUP6 SLOAD SWAP1 PUSH2 0x262A JUMP JUMPDEST DIV DUP5 PUSH2 0x33A3 DUP5 DUP10 PUSH2 0x28B2 JUMP JUMPDEST MLOAD AND DUP2 PUSH2 0x33B6 JUMPI JUMPDEST POP POP POP PUSH1 0x1 ADD PUSH2 0x336E JUMP JUMPDEST DUP9 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP11 DUP2 DUP1 PUSH2 0x3411 DUP7 PUSH1 0x20 SWAP9 DUP10 SWAP6 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB DUP2 PUSH0 DUP7 GAS CALL DUP1 ISZERO PUSH2 0x332A JUMPI SWAP1 DUP5 SWAP3 SWAP2 PUSH2 0x34EA JUMPI JUMPDEST POP DUP12 PUSH2 0x3446 DUP7 PUSH2 0x3440 DUP7 PUSH2 0x343A DUP4 DUP7 PUSH2 0x28B2 JUMP JUMPDEST MLOAD PUSH2 0x2900 JUMP JUMPDEST SWAP3 PUSH2 0x28B2 JUMP JUMPDEST MSTORE DUP11 PUSH2 0x349F DUP12 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP4 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB DUP2 PUSH0 DUP11 GAS CALL DUP1 ISZERO PUSH2 0x34E0 JUMPI PUSH2 0x34B7 JUMPI JUMPDEST DUP6 SWAP2 PUSH2 0x33AB JUMP JUMPDEST DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x34D9 JUMPI JUMPDEST PUSH2 0x34CA DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x35B JUMPI PUSH0 DUP1 PUSH2 0x34B0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x34C0 JUMP JUMPDEST DUP9 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP2 DUP3 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3516 JUMPI JUMPDEST PUSH2 0x34FF DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x35B JUMPI PUSH2 0x3511 DUP5 SWAP3 PUSH2 0x271F JUMP JUMPDEST PUSH2 0x3426 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x34F5 JUMP JUMPDEST POP POP POP POP POP PUSH1 0xFF SWAP2 POP SWAP3 SWAP2 SWAP3 DUP4 SWAP3 SWAP2 PUSH0 DUP1 DUP1 PUSH2 0x335A JUMP JUMPDEST PUSH2 0x3548 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x3119 DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x322C JUMP JUMPDEST DUP8 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP PUSH1 0x1 SWAP2 POP PUSH2 0x2627 PUSH2 0x312B JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x35AE JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x3581 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x3576 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x35B JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x35B JUMPI SWAP1 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0xFF PUSH0 SLOAD PUSH1 0x48 SHR AND PUSH2 0x355A JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 PUSH32 0x0 AND SWAP1 PUSH1 0x40 SWAP5 DUP6 MLOAD PUSH32 0x67E0E07600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 PUSH1 0x4 SWAP6 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x3550 JUMPI PUSH0 SWAP2 PUSH2 0x3945 JUMPI JUMPDEST POP PUSH1 0x5 DUP1 SLOAD ISZERO PUSH2 0x377A JUMPI PUSH0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x3764 JUMPI PUSH8 0xDE0B6B3A7640000 PUSH2 0x36A0 PUSH2 0x3257 DUP4 DUP9 PUSH2 0x28B2 JUMP JUMPDEST DIV SWAP1 DUP2 PUSH2 0x36B2 JUMPI JUMPDEST PUSH1 0x1 SWAP2 POP ADD PUSH2 0x3681 JUMP JUMPDEST PUSH2 0x36C0 DUP3 PUSH2 0x343A DUP4 DUP10 PUSH2 0x28B2 JUMP JUMPDEST PUSH2 0x36CA DUP3 DUP9 PUSH2 0x28B2 JUMP JUMPDEST MSTORE DUP5 PUSH2 0x36D6 DUP3 DUP7 PUSH2 0x28B2 JUMP JUMPDEST MLOAD AND DUP8 EXTCODESIZE ISZERO PUSH2 0x35B JUMPI DUP11 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 DUP11 ADD SWAP1 DUP2 MSTORE ADDRESS PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 DUP2 SWAP1 PUSH1 0x60 ADD SUB DUP2 DUP4 DUP12 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x332A JUMPI PUSH1 0x1 SWAP3 PUSH2 0x3755 JUMPI JUMPDEST POP PUSH2 0x36A8 JUMP JUMPDEST PUSH2 0x375E SWAP1 PUSH2 0x241E JUMP JUMPDEST PUSH0 PUSH2 0x374F JUMP JUMPDEST POP POP POP POP SWAP4 POP POP POP JUMPDEST PUSH1 0xFF PUSH0 SLOAD PUSH1 0x30 SHR AND ISZERO SWAP2 SWAP1 JUMP JUMPDEST POP SWAP2 SWAP5 SWAP6 SWAP3 SWAP1 PUSH1 0x6 SWAP3 PUSH1 0x6 SLOAD PUSH2 0x3797 JUMPI JUMPDEST POP POP POP POP POP POP SWAP1 PUSH2 0x376D JUMP JUMPDEST PUSH0 JUMPDEST DUP8 MLOAD DUP2 LT ISZERO PUSH2 0x3933 JUMPI DUP4 DUP4 PUSH2 0x37AE DUP4 DUP6 PUSH2 0x28B2 JUMP JUMPDEST MLOAD AND PUSH8 0xDE0B6B3A7640000 PUSH2 0x37CF PUSH2 0x37C6 DUP6 DUP14 PUSH2 0x28B2 JUMP JUMPDEST MLOAD DUP10 SLOAD SWAP1 PUSH2 0x262A JUMP JUMPDEST DIV SWAP1 DUP2 PUSH2 0x37E2 JUMPI JUMPDEST POP POP POP PUSH1 0x1 ADD PUSH2 0x3799 JUMP JUMPDEST DUP9 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP11 DUP2 DUP1 PUSH2 0x383D DUP7 PUSH1 0x20 SWAP9 DUP10 SWAP6 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB DUP2 PUSH0 DUP7 GAS CALL DUP1 ISZERO PUSH2 0x332A JUMPI SWAP1 DUP5 SWAP3 SWAP2 PUSH2 0x3900 JUMPI JUMPDEST POP DUP12 PUSH2 0x3866 DUP7 PUSH2 0x3440 DUP7 PUSH2 0x3280 DUP4 DUP7 PUSH2 0x28B2 JUMP JUMPDEST MSTORE DUP11 PUSH2 0x38BF DUP12 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP4 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB DUP2 PUSH0 DUP11 GAS CALL DUP1 ISZERO PUSH2 0x34E0 JUMPI PUSH2 0x38D7 JUMPI JUMPDEST DUP6 SWAP2 PUSH2 0x37D7 JUMP JUMPDEST DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x38F9 JUMPI JUMPDEST PUSH2 0x38EA DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x35B JUMPI PUSH0 DUP1 PUSH2 0x38D0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x38E0 JUMP JUMPDEST SWAP2 DUP3 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x392C JUMPI JUMPDEST PUSH2 0x3915 DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x35B JUMPI PUSH2 0x3927 DUP5 SWAP3 PUSH2 0x271F JUMP JUMPDEST PUSH2 0x3852 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x390B JUMP JUMPDEST POP POP POP POP POP POP POP PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x378B JUMP JUMPDEST PUSH2 0x3959 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x3119 DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST SWAP2 POP POP PUSH2 0x3675 JUMP JUMPDEST SWAP2 PUSH2 0x396B SWAP2 PUSH2 0x262A JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x263D JUMPI DUP2 ISZERO PUSH2 0x3990 JUMPI DIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xB SLOAD AND PUSH1 0xC SLOAD DUP2 EXTCODESIZE ISZERO PUSH2 0x35B JUMPI PUSH0 SWAP2 PUSH1 0x24 DUP4 SWAP3 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0xA1CFA04100000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x3A2E JUMPI PUSH2 0x3A25 JUMPI POP JUMP JUMPDEST PUSH2 0x3181 SWAP1 PUSH2 0x241E JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x10 SLOAD SWAP1 DUP2 DUP2 MSTORE PUSH1 0x20 DUP1 SWAP2 ADD SWAP2 PUSH1 0x10 PUSH0 MSTORE PUSH32 0x1B6847DC741A1B0CD08D278845F9D819D87B734759AFB55FE2DE5CB82A9AE672 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x3A7D JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 SLOAD DUP6 MSTORE SWAP4 DUP5 ADD SWAP4 PUSH1 0x1 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x3A6F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND DUP2 PUSH1 0xE SLOAD AND SWAP2 PUSH1 0x40 MLOAD SWAP3 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP1 PUSH1 0x4 DUP6 ADD MSTORE PUSH0 DUP5 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x3A2E JUMPI PUSH0 SWAP5 PUSH2 0x3BD4 JUMPI JUMPDEST POP DUP3 EXTCODESIZE ISZERO PUSH2 0x35B JUMPI SWAP1 SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP3 PUSH32 0xD8F4CF3C00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x84 DUP5 ADD SWAP1 PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x80 PUSH1 0x24 DUP6 ADD MSTORE DUP3 MLOAD DUP1 SWAP2 MSTORE PUSH1 0xA4 DUP5 ADD SWAP3 PUSH1 0x20 DUP1 SWAP2 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x3BB7 JUMPI POP POP POP POP POP SWAP2 DUP2 PUSH0 DUP2 PUSH2 0x3BA6 DUP3 SWAP7 PUSH2 0x3B97 PUSH1 0x3 NOT SWAP2 DUP3 DUP6 DUP3 SUB ADD PUSH1 0x44 DUP7 ADD MSTORE PUSH2 0x3A39 JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB ADD PUSH1 0x64 DUP5 ADD MSTORE PUSH2 0x3A39 JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x3A2E JUMPI PUSH2 0x3A25 JUMPI POP JUMP JUMPDEST DUP5 MLOAD DUP2 AND DUP7 MSTORE DUP9 SWAP7 POP SWAP5 DUP3 ADD SWAP5 SWAP4 DUP3 ADD SWAP4 PUSH1 0x1 SWAP2 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x3B6C JUMP JUMPDEST SWAP1 SWAP4 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x3BE6 DUP2 DUP4 PUSH2 0x2432 JUMP JUMPDEST DUP2 ADD PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x35B JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x35B JUMPI PUSH2 0x3C0D SWAP3 ADD PUSH2 0x26A1 JUMP JUMPDEST SWAP3 PUSH0 PUSH2 0x3B15 JUMP JUMPDEST SWAP1 PUSH2 0x3C51 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x3C29 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x3CA4 JUMPI JUMPDEST PUSH2 0x3C62 JUMPI POP SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x3C5A JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP7 DUP11 LOG2 MSTORE 0xC 0xFC 0xCE SELFBALANCE EQ GT SWAP2 JUMP 0xA5 MSIZE DUP12 PUSH14 0x58C007D3B1A3F98FE2B4528A9475 SUB 0xAD PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"903:18481:87:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;2130:47;903:18481;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3378:22;903:18481;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3378:22;903:18481;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;2075:49;903:18481;;;;;;;;;;;;;;;:::i;:::-;;;;;16193:51;903:18481;;;;;;;;;;16193:51;903:18481;;;16254:28;903:18481;;;16254:28;903:18481;16292:28;903:18481;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;:::i;:::-;;;;-1:-1:-1;;16421:52:87;903:18481;;;;;16421:52;903:18481;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;1722:46;903:18481;;;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;17614:59;903:18481;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;:::i;:::-;;;;;;18526:17;903:18481;;;;;-1:-1:-1;;903:18481:87;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;17174:37;903:18481;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3286:10;903:18481;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;15578:44:87;903:18481;;;;;;;15578:44;903:18481;;;15632:28;903:18481;;;15632:28;903:18481;15670:28;903:18481;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;2183:52;903:18481;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;9334:23;903:18481;;;;;;9330:110;;903:18481;;;;;;;9454:38;903:18481;;;;9450:87;;903:18481;;9454:38;903:18481;;;;9547:97;;903:18481;;;;;;;9661:28;903:18481;;;;;;9547:97;;;:::i;:::-;;;9450:87;;;:::i;:::-;;;9330:110;903:18481;;;;;;9397:32;;;;903:18481;9397:32;;903:18481;9397:32;;;;;;;903:18481;;9397:32;903:18481;9397:32;903:18481;9397:32;;;9330:110;903:18481;;;;;;;9334:23;903:18481;9330:110;;;;9397:32;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;903:18481;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;17775:52;903:18481;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;1512:43;903:18481;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;:::i;:::-;;;;-1:-1:-1;;903:18481:87;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;1612:47;903:18481;;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;;1454:51;;;;;903:18481;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4006:15;903:18481;;;;;4036:14;903:18481;;4036:28;;4032:242;;903:18481;;;;;;;;;;;;4292:32;903:18481;;;;;;;;;;;;;;;;4032:242;4144:13;;;903:18481;4144:13;;;:::i;:::-;903:18481;;;4131:39;;;;903:18481;4131:39;;;;;;;;;903:18481;4131:39;;;4032:242;903:18481;;4188:25;4184:80;;4032:242;;;;;;;4184:80;903:18481;;-1:-1:-1;4184:80:87;;4131:39;;;;903:18481;4131:39;903:18481;4131:39;;;;;;;:::i;:::-;;;;;903:18481;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;1665:50;903:18481;;;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9702:1619;903:18481;;;;;;;:::i;:::-;;9702:1619;:::i;:::-;903:18481;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;14727:59;903:18481;;;;;;;;;;14727:59;903:18481;;;;;;;;;;;;;;;14796:32;903:18481;;14796:32;903:18481;;;;;;;;;;;;14796:32;903:18481;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;:::i;:::-;;;;;;18423:17;903:18481;;;;;-1:-1:-1;;903:18481:87;18452:4;903:18481;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;1898:32;903:18481;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;14994:62;903:18481;;;;;;;;;;14994:62;903:18481;;;;;;;;;;;;;;;15066:32;903:18481;;15066:32;903:18481;;;;;;;;;;;;15066:32;903:18481;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;18759:12;903:18481;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;:::i;:::-;;;;-1:-1:-1;;18640:31:87;903:18481;;;;;18640:31;903:18481;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;15280:46;903:18481;;;;;;;;;;15280:46;903:18481;;;15336:28;903:18481;;;15336:28;903:18481;15374:28;903:18481;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;4460:23;903:18481;;;;;;4456:117;;903:18481;;;;;4587:31;903:18481;;4583:80;;903:18481;4587:31;903:18481;;;;;;;;4673:86;;903:18481;4773:24;903:18481;;;;;4769:316;;903:18481;;;;;;;;;5102:21;903:18481;;;;;;4769:316;903:18481;;;;;4821:31;;;903:18481;;4900:17;903:18481;;;;;:::i;:::-;4900:29;903:18481;;;-1:-1:-1;;903:18481:87;;;4773:24;903:18481;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3510:55:106;903:18481:87;;;;;;;;;;;:::i;:::-;3462:31:106;;;;;;903:18481:87;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;3510:55:106;:::i;:::-;;4769:316:87;;;;903:18481;;;3510:55:106;:::i;903:18481:87:-;4900:17;903:18481;;;;;;-1:-1:-1;903:18481:87;;;;;;;-1:-1:-1;;;903:18481:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;-1:-1:-1;903:18481:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4673:86;;;:::i;:::-;;;4583:80;;;:::i;:::-;;;4456:117;903:18481;4536:13;;903:18481;4536:13;;;:::i;:::-;903:18481;;;4523:39;;;;903:18481;4523:39;;;;;;;;;903:18481;4523:39;903:18481;4523:39;903:18481;4523:39;;;4456:117;903:18481;;;;;;;4460:23;903:18481;4456:117;;;;;4523:39;;;;903:18481;4523:39;903:18481;4523:39;;;;;;;:::i;:::-;;;;;903:18481;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;2688:35;903:18481;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;8730:23;903:18481;;;;;;8726:110;;903:18481;;;;;;;8850:35;903:18481;;;;8846:84;;903:18481;;8850:35;903:18481;;;;8940:94;;903:18481;;;;;;;9051:25;903:18481;;;;;;8940:94;;;:::i;:::-;;;8846:84;;;:::i;:::-;;;8726:110;903:18481;;;;;;8793:32;;;;903:18481;8793:32;;903:18481;8793:32;;;;;;;903:18481;;8793:32;903:18481;8793:32;903:18481;8793:32;;;8726:110;903:18481;;;;;;;8730:23;903:18481;8726:110;;;;8793:32;;;;;;;;;;;;;;:::i;:::-;;;;903:18481;;;;;-1:-1:-1;;903:18481:87;;;;;;;;:::i;:::-;;;16930:12;903:18481;;;16930:12;903:18481;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;1936:36;903:18481;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16579:32;903:18481;;;;;;;;16579:32;903:18481;;16621:24;903:18481;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16621:24;903:18481;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;903:18481:87;;;16621:24;903:18481;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;903:18481:87;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;1561:45;903:18481;;;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;3770:22;903:18481;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14471:51;903:18481;;;;;;;;;;;;;;;;14471:51;903:18481;;;;;;;;;;;;;;;;;14532:32;903:18481;;14532:32;903:18481;;;;;;;;;14532:32;903:18481;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;17939:62;903:18481;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;:::i;:::-;;;;;17038:47;903:18481;;;;;;;;17038:47;903:18481;;;;;;;;;;;;:::i;:::-;;;;;15882:48;903:18481;;;;;;;;;;15882:48;903:18481;;;15940:28;903:18481;;;15940:28;903:18481;15978:28;903:18481;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;2242:36;903:18481;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;17456:49;903:18481;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11327:1651;903:18481;;;;;;;:::i;:::-;;11327:1651;:::i;903:18481::-;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;16835:32;903:18481;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;3518:33;903:18481;;;;3514:82;;903:18481;;;;;;;3613:23;903:18481;;;;;;3514:82;;;:::i;:::-;;;903:18481;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;:::i;:::-;;;16719:23;903:18481;;;16719:23;903:18481;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;18161:4;903:18481;18161:4;903:18481;18161:4;903:18481;;18161:4;903:18481;;;;;;;;;;18161:4;903:18481;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;:::i;:::-;;;:::i;:::-;-1:-1:-1;903:18481:87;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3158:17;903:18481;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;2025:44;903:18481;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;1834:57;903:18481;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;1774:54;903:18481;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;903:18481:87;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;903:18481:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;903:18481:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;5136:3315::-;;903:18481;;;5351:6;;903:18481;5375:11;;;;;;;;:::i;:::-;903:18481;;;;5351:36;903:18481;5351:36;;;;903:18481;;5351:36;;;903:18481;;5351:36;903:18481;5351:36;;;;;;;;;903:18481;;;;5351:36;;5136:3315;5488:11;;;;:::i;:::-;903:18481;;;;5437:63;903:18481;5437:63;;903:18481;5437:63;;;903:18481;;5437:63;903:18481;5437:63;;;;;;;;;903:18481;5437:63;;;5136:3315;5596:11;;;;:::i;:::-;903:18481;;;;5571:37;903:18481;5571:37;;903:18481;5571:37;;;903:18481;;5571:37;903:18481;5571:37;;;;;;;;;903:18481;;;5571:37;;;5136:3315;5624:13;903:18481;5658:3;903:18481;;5639:17;;;;;5681:9;;5694:14;903:18481;5681:9;;;;;:::i;:::-;903:18481;;5694:14;;;:::i;:::-;903:18481;5681:27;903:18481;;5732:29;;;903:18481;5765:22;;;;:::i;:::-;903:18481;5732:55;;5728:144;;5925:139;5999:17;;;;;:::i;:::-;903:18481;6038:8;;;;:::i;:::-;903:18481;5925:139;;:::i;:::-;6115:14;;;;:::i;:::-;903:18481;6086:43;6082:132;;903:18481;5677:1113;;903:18481;5624:13;;6082:132;-1:-1:-1;903:18481:87;;6168:26;;903:18481;;-1:-1:-1;;;;;;;;;;6153:42:87:o;5728:144::-;-1:-1:-1;903:18481:87;;5826:26;;903:18481;;-1:-1:-1;;;;;;;;;;;5811:42:87:o;5677:1113::-;6238:9;;6251:15;6238:9;;;;;;:::i;6251:15::-;903:18481;6238:28;6234:556;;5677:1113;903:18481;5677:1113;;;6234:556;6290:30;;;903:18481;6324:22;;;;:::i;:::-;903:18481;6290:56;;6286:145;;6485:140;6560:17;;;;;:::i;6485:140::-;6677:14;;;;:::i;:::-;903:18481;6647:44;6234:556;6643:133;-1:-1:-1;903:18481:87;;6730:26;;903:18481;;-1:-1:-1;;;;;;;;;;6715:42:87:o;5639:17::-;;;;;;;;;;;;;;6852:26;;;903:18481;;6892:21;903:18481;6892:25;;6888:1445;6892:21;;;903:18481;465:4:50;838:5;6892:21:87;903:18481;838:5:50;;:::i;:::-;465:4;7031:11:87;;7027:410;;6888:1445;;;;;903:18481;6888:1445;;8351:31;903:18481;8351:35;;:59;;;;8343:101;;5136:3315;:::o;8351:59::-;903:18481;;;;;;;8390:20;8343:101;5136:3315;:::o;7027:410::-;903:18481;;;;;;;;;;;;7066:32;;7122:42;;;;:::i;:::-;7200:15;;;;;;:::i;:::-;7186:54;;;;;903:18481;;;7186:54;;903:18481;;;;7186:54;;;903:18481;;;7225:4;903:18481;;;;;;;;;;;;;;;;;;;;;;;;;;7186:54;;;;;;;;;;;;;;;7062:361;;;903:18481;7062:361;;7027:410;;;;;;7186:54;;;;:::i;:::-;903:18481;;7186:54;;;;903:18481;;;;7186:54;903:18481;;;;;;;;7186:54;903:18481;;;7062:361;7287:42;;;;;;;;:::i;:::-;7365:14;;903:18481;7365:14;;;:::i;:::-;7351:53;;;;;;903:18481;;;7351:53;;903:18481;;;;7351:53;;;903:18481;;;7389:4;903:18481;;;;;;;;;;;;;;;;;;;;;;;;;7351:53;;;;;;;;;;;;7062:361;;903:18481;7062:361;;;7351:53;;;;;;:::i;:::-;903:18481;;;7351:53;;;903:18481;;;;;;;;6888:1445;903:18481;;;;;7457:30;7453:880;;6888:1445;;;;;;903:18481;6888:1445;;;7453:880;838:5:50;465:4;838:5;;;:::i;:::-;465:4;7611:16:87;7607:716;7453:880;7607:716;903:18481;;;;;;;;;;;;;7651:32;;;;7707:47;;;:::i;:::-;903:18481;;;;;;;7777:200;;7647:662;;;;;;903:18481;7647:662;;7607:716;;;;;7453:880;;7777:200;7829:15;;;;;;;:::i;:::-;903:18481;;;;7829:55;;903:18481;7829:55;;903:18481;7829:55;;;;903:18481;7829:55;;;;;;;903:18481;;;;;;;;;;;;;;;;;7829:55;;;;;;;;;;;;;;;;;7777:200;7924:15;903:18481;7924:15;7910:44;7924:15;;:::i;:::-;903:18481;;;7910:44;;;;;;;903:18481;7910:44;;;;903:18481;;;;;;;;;;;;;;;;;7910:44;;;;;;;;;;;;;7777:200;;;;;;7910:44;;;;;;;;;;;;:::i;:::-;;;903:18481;;;;7910:44;;;;;;;;;7829:55;;;;;;;;;;;;;;:::i;:::-;;;903:18481;;;;;7924:15;7910:44;903:18481;;;;;:::i;:::-;7829:55;;;;;;;;;;;;903:18481;;;;;;;;;7647:662;8023:47;;;:::i;:::-;903:18481;;;;;;;8093:198;;7647:662;;;;;;903:18481;7647:662;;;8093:198;903:18481;8145:14;;;;;;;;:::i;:::-;903:18481;;;;8145:54;;903:18481;8145:54;;;903:18481;8145:54;;;;;;;903:18481;;;;;;;;;;;;;;;;;8145:54;;;;;;;;;;;;;;;;;8093:198;8239:14;903:18481;8239:14;8225:43;8239:14;;:::i;8225:43::-;;;;;;;;;;;;;8093:198;;;;;;8225:43;;;;;;;;;;;;:::i;:::-;;;903:18481;;;;8225:43;;;;;;;;;8145:54;;;;;;;;;;;;;;:::i;:::-;;;903:18481;;;;;8239:14;8225:43;903:18481;;;;;:::i;:::-;8145:54;;;;;;;;;;;5571:37;;;;;;;903:18481;5571:37;;;;;;:::i;:::-;;;903:18481;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;5571:37;;;;5437:63;;;;;;903:18481;5437:63;;;;;;:::i;:::-;;;903:18481;;;;;;;;;;;;;;;;5596:11;903:18481;;;;;:::i;:::-;5437:63;;;;5351:36;;;;;;;;;903:18481;5351:36;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;903:18481;;;;11765:4;;;903:18481;;;;;;;;;;;11765:4;-1:-1:-1;903:18481:87;;;-1:-1:-1;903:18481:87;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;-1:-1:-1;903:18481:87;;;;;;;;;;;;;;11327:1651;;;;903:18481;;;;;;11707:110;;903:18481;11860:6;;;903:18481;;;;;;;11860:29;;;;903:18481;;11860:29;;;903:18481;;11860:29;903:18481;11860:29;;;;;;;;;903:18481;;11860:29;;11327:1651;-1:-1:-1;11955:32:87;903:18481;;11955:36;:32;;903:18481;12053:3;903:18481;;12027:24;;;;;465:4:50;838:5;12094:16:87;;;;:::i;:::-;903:18481;;;838:5:50;;:::i;:::-;465:4;12174:11:87;;12170:167;;12053:3;903:18481;12053:3;;903:18481;12012:13;;12170:167;12209:39;;;;;;:::i;:::-;903:18481;12209:39;:::i;:::-;;;;;:::i;:::-;903:18481;12284:9;;;;;:::i;:::-;903:18481;;12270:48;;;;;903:18481;;;12270:48;;903:18481;;;;12270:48;;;903:18481;;;12303:4;903:18481;;;;;;;;;;;;;;;;;;;;12270:48;;;;;;;;;;;903:18481;12270:48;;;12170:167;;;;12270:48;;;;:::i;:::-;;;;;903:18481;;;;;;;;;12027:24;;;;;;;;903:18481;12027:24;;11951:947;903:18481;;;;;12916:27;12908:63;11327:1651;:::o;11951:947::-;12371:37;;;;;;;;;903:18481;12367:531;;11951:947;;;;;903:18481;11951:947;;;;;;12367:531;903:18481;12433:13;;;12474:3;903:18481;;12448:24;;;;;12520:16;465:4:50;838:5;12520:16:87;;;;:::i;:::-;903:18481;;;838:5:50;;:::i;:::-;465:4;12616:9:87;;;;;:::i;:::-;903:18481;;12648:16;12644:230;;12474:3;;;;903:18481;;12433:13;;12644:230;903:18481;;;12688:45;;903:18481;;;12688:45;903:18481;;12688:45;;;;;903:18481;;;;;;;;;;;;;;;;;12688:45;;;903:18481;12688:45;;;;;;;;;;;;;12644:230;12755:44;;;;;;;;;;:::i;:::-;903:18481;12755:44;:::i;:::-;;;:::i;:::-;903:18481;;12821:34;903:18481;;12821:34;;;;;903:18481;12821:34;;;;903:18481;;;;;;;;;;;;;;;;;12821:34;;;903:18481;12821:34;;;;;;;;;12644:230;;;;;12821:34;;;;;;;;;;;;:::i;:::-;;;903:18481;;;;12821:34;;;;;;;;;;903:18481;;;;;;;;;12688:45;;;;;;;;;;;;;;:::i;:::-;;;903:18481;;;;;;;;:::i;:::-;12688:45;;;;;;;12448:24;;;;;;903:18481;12448:24;;;;;12367:531;;;;;;;;11860:29;;;;;;903:18481;11860:29;;;;;;:::i;:::-;;;;;;;903:18481;;;;;;;;;11707:110;-1:-1:-1;11765:4:87;;-1:-1:-1;903:18481:87;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9702:1619::-;;;;903:18481;;;;;;10074:110;;903:18481;10227:6;;;903:18481;;;;;;;10227:29;;;;903:18481;;10227:29;;;903:18481;;10227:29;903:18481;10227:29;;;;;;;;;903:18481;;10227:29;;9702:1619;-1:-1:-1;10320:29:87;903:18481;;10320:33;:29;;903:18481;10414:3;903:18481;;10389:23;;;;;465:4:50;838:5;10455:15:87;;;;:::i;838:5:50:-;465:4;10531:11:87;;10527:166;;10414:3;903:18481;10414:3;;903:18481;10374:13;;10527:166;10566:38;;;;;;:::i;:::-;;;;;:::i;:::-;903:18481;10640:9;;;;;:::i;:::-;903:18481;;10626:48;;;;;903:18481;;;10626:48;;903:18481;;;;10626:48;;;903:18481;;;10659:4;903:18481;;;;;;;;;;;;;;;;;;;;10626:48;;;;;;;;;;;903:18481;10626:48;;;10527:166;;;;10626:48;;;;:::i;:::-;;;;10389:23;;;;;;;;;10316:929;903:18481;;;;;;11263:24;11255:59;9702:1619;:::o;10316:929::-;10727:34;;;;;;;903:18481;10727:34;903:18481;10723:522;;10316:929;;;;;;;;;;10723:522;903:18481;10826:3;903:18481;;10801:23;;;;;10864:9;;;;;;:::i;:::-;903:18481;;465:4:50;838:5;10915:15:87;;;;:::i;:::-;903:18481;;;838:5:50;;:::i;:::-;465:4;10996:16:87;;10992:229;;10826:3;;;;903:18481;;10786:13;;10992:229;903:18481;;;11036:45;;903:18481;;;11036:45;903:18481;;11036:45;;;;;903:18481;;;;;;;;;;;;;;;;;11036:45;;;903:18481;11036:45;;;;;;;;;;;;;10992:229;11103:43;;;;;;;;;;:::i;:::-;903:18481;;11168:34;903:18481;;11168:34;;;;;903:18481;11168:34;;;;903:18481;;;;;;;;;;;;;;;;;11168:34;;;903:18481;11168:34;;;;;;;;;10992:229;;;;;11168:34;;;;;;;;;;;;:::i;:::-;;;903:18481;;;;11168:34;;;;;;;;;11036:45;;;;;;;;;;;;;;:::i;:::-;;;903:18481;;;;;;;;:::i;:::-;11036:45;;;;;;;10801:23;;;;;;;;10723:522;;;;;;;;10227:29;;;;;;903:18481;10227:29;;;;;;:::i;:::-;;;;;;3280:418:46;;3665:25;3280:418;3665:25;:::i;:::-;465:4:50;;903:18481:87;;;;;;;;;;;;;;;465:4:50;;;;;3280:418:46;:::o;465:4:50:-;;-1:-1:-1;465:4:50;;;;;-1:-1:-1;465:4:50;18959:90:87;903:18481;19005:13;903:18481;;19028:13;903:18481;19005:37;;;;;-1:-1:-1;903:18481:87;;;;;;19005:37;;;;;903:18481;19005:37;;;;;903:18481;19005:37;;;;;;;;18959:90;:::o;19005:37::-;;;;:::i;:::-;903:18481;;;-1:-1:-1;903:18481:87;;;;;;19342:15;903:18481;;;;;;;;;;19342:15;-1:-1:-1;903:18481:87;;;-1:-1:-1;903:18481:87;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;19055:327;903:18481;19133:6;;903:18481;;19154:5;903:18481;;;;;19133:27;903:18481;19133:27;;;;;;903:18481;-1:-1:-1;19133:27:87;903:18481;19133:27;;;;;;;;;-1:-1:-1;19133:27:87;;;19055:327;19264:111;;;;;;903:18481;;;;19264:111;;;903:18481;19264:111;;903:18481;;;19264:111;19133:27;19264:111;;903:18481;;;;;;;;;;;;;;;;;;;;-1:-1:-1;903:18481:87;;;;;;;;;;;;;;-1:-1:-1;903:18481:87;;;;;-1:-1:-1;;903:18481:87;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;19264:111;;;;;;;;;;19055:327;:::o;903:18481::-;;;;;;;;;-1:-1:-1;903:18481:87;;;;;;;;;;;;;;;;19133:27;;;;;;-1:-1:-1;19133:27:87;;;;;;:::i;:::-;;;903:18481;;;;;;;;;;;;;;;;;;:::i;:::-;19133:27;;;;4625:582:106;;4797:8;;-1:-1:-1;903:18481:87;;5874:21:106;:17;;6046:142;;;;;;5870:383;6225:17;5894:1;6225:17;;5894:1;6225:17;4793:408;903:18481:87;;5045:22:106;:49;;;4793:408;5041:119;;5173:17;;:::o;5041:119::-;903:18481:87;5121:24:106;;5066:1;5121:24;903:18481:87;5121:24:106;903:18481:87;;5066:1:106;5121:24;5045:49;5071:18;;;:23;5045:49;"},"methodIdentifiers":{"addLiquidityHookDiscountPercentage()":"e908e85d","addLiquidityHookFeePercentage()":"02273467","allowFactory(address)":"8f5fae62","changePoolBalancesOnBeforeAddLiquidityHook()":"005b449c","changePoolBalancesOnBeforeRemoveLiquidityHook()":"00d332fd","changePoolBalancesOnBeforeSwapHook()":"e4c593d7","changeTokenRateOnBeforeAddLiquidity()":"af72105d","changeTokenRateOnBeforeInitialize()":"3d05719a","changeTokenRateOnBeforeRemoveLiquidity()":"9f94c522","changeTokenRateOnBeforeSwapHook()":"b298157b","denyFactory(address)":"dc7776ca","disableForcedHookAdjustedAmounts()":"232b59f7","enableForcedHookAdjustedAmountsLiquidity(uint256[])":"0c54b1de","failOnAfterAddLiquidity()":"40dc21d4","failOnAfterInitialize()":"5cd00746","failOnAfterRemoveLiquidity()":"a975dda0","failOnAfterSwapHook()":"a5098f10","failOnBeforeAddLiquidity()":"35f7290e","failOnBeforeInitialize()":"f5279d9c","failOnBeforeRemoveLiquidity()":"677db20e","failOnBeforeSwapHook()":"5351b230","failOnComputeDynamicSwapFeeHook()":"e326f03a","forcedHookAdjustedAmountsLiquidity(uint256)":"a55e47be","getHookFlags()":"d77153a7","getSavedSender()":"6a9a0611","hookSwapDiscountPercentage()":"2352c2ed","hookSwapFeePercentage()":"4392312a","onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)":"976907cc","onAfterInitialize(uint256[],uint256,bytes)":"38be241d","onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)":"2754888d","onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))":"18b6eb55","onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)":"45421ec7","onBeforeInitialize(uint256[],bytes)":"1c149e28","onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)":"ba5f9f40","onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)":"5211fa77","onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)":"a0e8f5ac","onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))":"0b89f182","removeLiquidityHookDiscountPercentage()":"bd825f6b","removeLiquidityHookFeePercentage()":"eb499270","setAddLiquidityHookDiscountPercentage(uint256)":"dda1c15b","setAddLiquidityHookFeePercentage(uint256)":"2e55a841","setChangePoolBalancesOnBeforeAddLiquidityHook(bool,uint256[])":"93c4b286","setChangePoolBalancesOnBeforeRemoveLiquidityHook(bool,uint256[])":"71eff9d2","setChangePoolBalancesOnBeforeSwapHook(bool,uint256[])":"34e3a8c3","setChangeTokenRateOnBeforeAddLiquidityHook(bool,address,uint256)":"335d4126","setChangeTokenRateOnBeforeInitializeHook(bool,address,uint256)":"5991de93","setChangeTokenRateOnBeforeRemoveLiquidityHook(bool,address,uint256)":"e62eecdd","setChangeTokenRateOnBeforeSwapHook(bool,address,uint256)":"c25dade8","setDynamicSwapFeePercentage(uint256)":"214ff4c5","setFailOnAfterAddLiquidityHook(bool)":"6e7d75e5","setFailOnAfterInitializeHook(bool)":"b127e385","setFailOnAfterRemoveLiquidityHook(bool)":"039388ba","setFailOnAfterSwapHook(bool)":"7b695d10","setFailOnBeforeAddLiquidityHook(bool)":"82fb5d21","setFailOnBeforeInitializeHook(bool)":"d3fca637","setFailOnBeforeRemoveLiquidityHook(bool)":"d4f83182","setFailOnBeforeSwapHook(bool)":"b3a763b9","setFailOnComputeDynamicSwapFeeHook(bool)":"87ac5691","setHookFlags((bool,bool,bool,bool,bool,bool,bool,bool,bool,bool))":"e9f7c591","setHookSwapDiscountPercentage(uint256)":"fc6e0f59","setHookSwapFeePercentage(uint256)":"da09aacf","setPool(address)":"4437152a","setRemoveLiquidityHookDiscountPercentage(uint256)":"34a168ec","setRemoveLiquidityHookFeePercentage(uint256)":"b445fbe7","setShouldIgnoreSavedSender(bool)":"68c6db6a","setShouldSettleDiscount(bool)":"3478db73","setSpecialSender(address)":"1064dfdd","setSwapReentrancyHook(address,bytes)":"423ef816","setSwapReentrancyHookActive(bool)":"e5e3b67e","shouldForceHookAdjustedAmounts()":"f8b5ef85","shouldIgnoreSavedSender()":"4f036756","shouldSettleDiscount()":"80c554c1","swapReentrancyHookActive()":"31378f4f"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"addLiquidityHookDiscountPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"addLiquidityHookFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"allowFactory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"changePoolBalancesOnBeforeAddLiquidityHook\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"changePoolBalancesOnBeforeRemoveLiquidityHook\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"changePoolBalancesOnBeforeSwapHook\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"changeTokenRateOnBeforeAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"changeTokenRateOnBeforeInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"changeTokenRateOnBeforeRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"changeTokenRateOnBeforeSwapHook\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"denyFactory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableForcedHookAdjustedAmounts\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsLiquidity\",\"type\":\"uint256[]\"}],\"name\":\"enableForcedHookAdjustedAmountsLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failOnAfterAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failOnAfterInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failOnAfterRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failOnAfterSwapHook\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failOnBeforeAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failOnBeforeInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failOnBeforeRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failOnBeforeSwapHook\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failOnComputeDynamicSwapFeeHook\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"forcedHookAdjustedAmountsLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getHookFlags\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"}],\"internalType\":\"struct HookFlags\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSavedSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hookSwapDiscountPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hookSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onAfterAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsInRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onAfterInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onAfterRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"hookAdjustedAmountsOutRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenInBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenOutBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AfterSwapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"onAfterSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onBeforeAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onBeforeInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onBeforeRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"onBeforeSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"onComputeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"onRegister\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"removeLiquidityHookDiscountPercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"removeLiquidityHookFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"hookDiscountPercentage\",\"type\":\"uint256\"}],\"name\":\"setAddLiquidityHookDiscountPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"hookFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setAddLiquidityHookFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"changeBalances\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"newBalancesRaw\",\"type\":\"uint256[]\"}],\"name\":\"setChangePoolBalancesOnBeforeAddLiquidityHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"changeBalances\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"newBalancesRaw\",\"type\":\"uint256[]\"}],\"name\":\"setChangePoolBalancesOnBeforeRemoveLiquidityHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"changeBalances\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"newBalancesRaw\",\"type\":\"uint256[]\"}],\"name\":\"setChangePoolBalancesOnBeforeSwapHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"changeRate\",\"type\":\"bool\"},{\"internalType\":\"contract RateProviderMock\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newTokenRate\",\"type\":\"uint256\"}],\"name\":\"setChangeTokenRateOnBeforeAddLiquidityHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"changeRate\",\"type\":\"bool\"},{\"internalType\":\"contract RateProviderMock\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newTokenRate\",\"type\":\"uint256\"}],\"name\":\"setChangeTokenRateOnBeforeInitializeHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"changeRate\",\"type\":\"bool\"},{\"internalType\":\"contract RateProviderMock\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newTokenRate\",\"type\":\"uint256\"}],\"name\":\"setChangeTokenRateOnBeforeRemoveLiquidityHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"changeRate\",\"type\":\"bool\"},{\"internalType\":\"contract RateProviderMock\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newTokenRate\",\"type\":\"uint256\"}],\"name\":\"setChangeTokenRateOnBeforeSwapHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFee\",\"type\":\"uint256\"}],\"name\":\"setDynamicSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"fail\",\"type\":\"bool\"}],\"name\":\"setFailOnAfterAddLiquidityHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"fail\",\"type\":\"bool\"}],\"name\":\"setFailOnAfterInitializeHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"fail\",\"type\":\"bool\"}],\"name\":\"setFailOnAfterRemoveLiquidityHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"fail\",\"type\":\"bool\"}],\"name\":\"setFailOnAfterSwapHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"fail\",\"type\":\"bool\"}],\"name\":\"setFailOnBeforeAddLiquidityHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"fail\",\"type\":\"bool\"}],\"name\":\"setFailOnBeforeInitializeHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"fail\",\"type\":\"bool\"}],\"name\":\"setFailOnBeforeRemoveLiquidityHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"fail\",\"type\":\"bool\"}],\"name\":\"setFailOnBeforeSwapHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"fail\",\"type\":\"bool\"}],\"name\":\"setFailOnComputeDynamicSwapFeeHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"}],\"internalType\":\"struct HookFlags\",\"name\":\"hookFlags\",\"type\":\"tuple\"}],\"name\":\"setHookFlags\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"discountPercentage\",\"type\":\"uint256\"}],\"name\":\"setHookSwapDiscountPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"feePercentage\",\"type\":\"uint256\"}],\"name\":\"setHookSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"setPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"hookDiscountPercentage\",\"type\":\"uint256\"}],\"name\":\"setRemoveLiquidityHookDiscountPercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"hookFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setRemoveLiquidityHookFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"value\",\"type\":\"bool\"}],\"name\":\"setShouldIgnoreSavedSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"shouldSettleDiscountFlag\",\"type\":\"bool\"}],\"name\":\"setShouldSettleDiscount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"setSpecialSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"hookContract\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"setSwapReentrancyHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_swapReentrancyHookActive\",\"type\":\"bool\"}],\"name\":\"setSwapReentrancyHookActive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"shouldForceHookAdjustedAmounts\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"shouldIgnoreSavedSender\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"shouldSettleDiscount\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"swapReentrancyHookActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}]},\"kind\":\"dev\",\"methods\":{\"getHookFlags()\":{\"details\":\"The Vault will only call hooks the pool says it supports, and of course only if a hooks contract is defined (i.e., the `poolHooksContract` in `PoolRegistrationParams` is non-zero). `onRegister` is the only \\\"mandatory\\\" hook.\",\"returns\":{\"_0\":\"Flags indicating which hooks the contract supports\"}},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"details\":\"Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"bptAmountOut\":\"Amount of pool tokens minted during initialization\",\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"_0\":\"True if the pool accepts the initialization results\"}},\"onBeforeInitialize(uint256[],bytes)\":{\"details\":\"Called if the `shouldCallBeforeInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with initialization\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getHookFlags()\":{\"notice\":\"Return the set of hooks implemented by the contract.\"},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"notice\":\"Hook to be executed after pool initialization.\"},\"onBeforeInitialize(uint256[],bytes)\":{\"notice\":\"Hook executed before pool initialization.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/test/PoolHooksMock.sol\":\"PoolHooksMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/test/IVaultAdminMock.sol\":{\"keccak256\":\"0x51d1502369f0bb1fec58b7aa848f20e6ea3ddcb4866471e2fdbe96f0f6783fb5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab9f73ec13f137f3103edf9caa8edc4752db585393cc7db6c62f85a1efdbfb5e\",\"dweb:/ipfs/QmXBoBF18c1f33NYqPmrJ3cqULMak55uznBvzfpf1bHpDd\"]},\"@balancer-labs/v3-interfaces/contracts/test/IVaultExtensionMock.sol\":{\"keccak256\":\"0x18c434c91bbcd260bd305f2cdc01684a3040bc633c1b185f95cb323a336ac76c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://270260ba29c81dc6d862a0830ccbbdcd81b4543bd9c9b54228493a92568532d4\",\"dweb:/ipfs/QmTHp7v5dGwLujPRaWkoEM22Loy3MuspodMGcm4syAPUvk\"]},\"@balancer-labs/v3-interfaces/contracts/test/IVaultMainMock.sol\":{\"keccak256\":\"0x63f1a4d7fbd2ed33fb622cc5a141a9ccc1d3f99f30ac5d72b75a2bb36965bd42\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de9db0a61bc99572d72030c73feff2e4337104fd43a3d764f181b857c621246c\",\"dweb:/ipfs/QmcxzP6SqNAkqg4APteqzsxRkxyxcZhMF21b3sCKiCymSP\"]},\"@balancer-labs/v3-interfaces/contracts/test/IVaultMock.sol\":{\"keccak256\":\"0x66a706de1a8eb2836d3a6f41ce8b05b244169c42ff5f947affd885b34c722bd3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://88e094f387cf6886b7f9764acaf37b3aa278a1a1fb2dc748d29a791b9fe742d9\",\"dweb:/ipfs/QmdaNH3JjqcpgjvNKG4XVbEbJC9wuhH6gwtv8nifGsBmi4\"]},\"@balancer-labs/v3-interfaces/contracts/test/IVaultStorageMock.sol\":{\"keccak256\":\"0xb59762a929624826418e57ef85207703bedfbab512eeb422fd16d40520ab05d9\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8f6363f3ac816ff34ac5b78a564ed0febc9772d1dc130674e73db0a63b29273d\",\"dweb:/ipfs/QmSbmTTFb4vGqHSGQu974CHu146pCfzJRGFMxyN8ujopf7\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISenderGuard.sol\":{\"keccak256\":\"0x2ec1ecf5c578aab7502f6985a03fbb79998218bdef819845d70d28a6994cff5b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a32637a45f19c29797db11eb25eb9bfda73302f280a64a9d9a4ab123db1b8e6f\",\"dweb:/ipfs/QmXGimviZ4Mr6kwgqkCwpHH5uGHVEjAcCRNvAwvoVYKi6f\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol\":{\"keccak256\":\"0xf98fec19a1516432d7540f0cde2e967b627afbc5a361835766d57be8ba10b4e2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://94b49929bff77d1fdaab8916350356fc9816317beef4f33c3af0e6a40493d01c\",\"dweb:/ipfs/QmPPhtmpPvgedbtQaJZz7JQCmiGKKTHmfh7EGhJS1yUCia\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":{\"keccak256\":\"0xb5f6b1d0ee3f295a717ce58329eaadccb1eefc2e1e02e2e7c438e377628475cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03c1b9bc73b7d14d9e1948a31c271a03a6ba4291f44d9aff17e60d300c111d0d\",\"dweb:/ipfs/QmNpW3iD3ST76N6xTncuVgYSuafSqFkXUmxNaK8uybr96G\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/BaseHooks.sol\":{\"keccak256\":\"0xe987f0806641ac62fc66a6f3b0c6b58a44832c01a1c95f349eb880b00529756a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f8fc15c0fc44dd7032aa5ece3f281d1d83076719ef9b6f6442be79a62e2c1848\",\"dweb:/ipfs/QmVAZSVhzg6fb3ChkCeAPtLLwqnwmxdkxrenvJaf83trNC\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@balancer-labs/v3-vault/contracts/test/PoolHooksMock.sol\":{\"keccak256\":\"0x189cbfb12b191f57803c7fdf916600636036a4bc901103d051e29b59453ec564\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4b5640ec6405c4a09c7c9e7c216326b58cd31d0dfe359760de95a296995af665\",\"dweb:/ipfs/QmadVYg2MHJxRLodubzGmpr23FXTYwmb57tDEqq3aBKZTT\"]},\"@balancer-labs/v3-vault/contracts/test/RateProviderMock.sol\":{\"keccak256\":\"0x15772ae4aae0383c40b50689c0bd27af685aaf858758400cf17aba4b87ebafc2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://910e0274c07b8a0fe96d60a2a31a5381dbe29a8d1643dfb7f7e143d070970055\",\"dweb:/ipfs/QmWnLEEdpxSjroaDj3YtD2wcrvMXpnVk2jV59yi4MmyLCK\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/test/PoolMock.sol":{"PoolMock":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ECDSAInvalidSignature","type":"error"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"name":"ECDSAInvalidSignatureLength","type":"error"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"ECDSAInvalidSignatureS","type":"error"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"ERC2612ExpiredSignature","type":"error"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC2612InvalidSigner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"currentNonce","type":"uint256"}],"name":"InvalidAccountNonce","type":"error"},{"inputs":[],"name":"InvalidShortString","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"name":"StringTooLong","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"EIP712DomainChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"balances","type":"uint256[]"},{"internalType":"uint256","name":"tokenInIndex","type":"uint256"},{"internalType":"uint256","name":"invariantRatio","type":"uint256"}],"name":"computeBalance","outputs":[{"internalType":"uint256","name":"newBalance","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"balances","type":"uint256[]"},{"internalType":"enum Rounding","name":"","type":"uint8"}],"name":"computeInvariant","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitApproval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAggregateFeePercentages","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDecimalScalingFactors","outputs":[{"internalType":"uint256[]","name":"scalingFactors","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumInvariantRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumInvariantRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incrementNonce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"testValue","type":"uint256"}],"name":"mockEventFunction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"maxAmountsInScaled18","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onAddLiquidityCustom","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"onRemoveLiquidityCustom","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"params","type":"tuple"}],"name":"onSwap","outputs":[{"internalType":"uint256","name":"amountCalculated","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mockRate","type":"uint256"}],"name":"setMockRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMultiplier","type":"uint256"}],"name":"setMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_string_fromMemory":{"entryPoint":1201,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":1166,"id":null,"parameterSlots":2,"returnSlots":0},"fun_toShortStringWithFallback":{"entryPoint":1286,"id":41065,"parameterSlots":1,"returnSlots":1},"fun_toShortStringWithFallback_8286":{"entryPoint":1673,"id":41065,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"61020060408181523461048a57612de7803803809161001e828661048e565b843982019060608383031261048a578251906001600160a01b038216820361048a5760208481015190946001600160401b039182811161048a57856100649183016104b1565b948382015183811161048a5761007a92016104b1565b93825195838701878110848211176103a1578452600180885281880193603160f81b85526100a784610506565b976101209889526100b78a610689565b956101409687528551858701209a8b60e052519020996101009a808c524660a052885190868201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f84528a83015260608201524660808201523060a082015260a0815260c08101818110858211176103a15789525190206080523060c052610160948886528051918383116103a1576003928354928684811c94168015610480575b8885101461046c578190601f9485811161041e575b5088908583116001146103c0575f926103b5575b50505f1982861b1c191690861b1783555b80519384116103a15760049586548681811c91168015610397575b8282101461038457838111610341575b50809285116001146102dc57509383949184925f956102d1575b50501b925f19911b1c19161790555b610180913383526101a0938585526101e0958652670de0b6b3a7640000600555519561262797886107c08939608051886121c7015260a05188612293015260c05188612198015260e051886122160152518761223c015251866110560152518561108001525184818161031101528181610554015281816107e201528181610d9301528181610f84015281816114b40152818161157d015281816117430152818161190c0152818161199c015261212d01525183610ff00152518250506101c051825050518181816106930152818161072a0152818161092a01528181610c6701526111920152f35b015193505f806101d9565b92919084601f198116885f52855f20955f905b89838310610327575050501061030e575b50505050811b0190556101e8565b01519060f8845f19921b161c191690555f808080610300565b8587015189559097019694850194889350908101906102ef565b875f52815f208480880160051c82019284891061037b575b0160051c019087905b8281106103705750506101bf565b5f8155018790610362565b92508192610359565b602288634e487b7160e01b5f525260245ffd5b90607f16906101af565b634e487b7160e01b5f52604160045260245ffd5b015190505f80610183565b90889350601f19831691875f528a5f20925f5b8c82821061040857505084116103f1575b505050811b018355610194565b01515f1983881b60f8161c191690555f80806103e4565b8385015186558c979095019493840193016103d3565b909150855f52885f208580850160051c8201928b8610610463575b918a91869594930160051c01915b82811061045557505061016f565b5f81558594508a9101610447565b92508192610439565b634e487b7160e01b5f52602260045260245ffd5b93607f169361015a565b5f80fd5b601f909101601f19168101906001600160401b038211908210176103a157604052565b81601f8201121561048a578051906001600160401b0382116103a157604051926104e5601f8401601f19166020018561048e565b8284526020838301011161048a57815f9260208093018386015e8301015290565b80516020908181101561057c5750601f82511161053e578082519201519080831061053057501790565b825f19910360031b1b161790565b60448260405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b906001600160401b0382116103a1575f54926001938481811c9116801561067f575b8382101461046c57601f811161064c575b5081601f84116001146105ea57509282939183925f946105df575b50501b915f199060031b1c1916175f5560ff90565b015192505f806105ca565b919083601f1981165f8052845f20945f905b88838310610632575050501061061a575b505050811b015f5560ff90565b01515f1960f88460031b161c191690555f808061060d565b8587015188559096019594850194879350908101906105fc565b5f805284601f845f20920160051c820191601f860160051c015b8281106106745750506105af565b5f8155018590610666565b90607f169061059e565b8051602090818110156106b35750601f82511161053e578082519201519080831061053057501790565b9192916001600160401b0381116103a15760019182548381811c911680156107b5575b8282101461046c57601f8111610782575b5080601f83116001146107225750819293945f92610717575b50505f19600383901b1c191690821b17905560ff90565b015190505f80610700565b90601f19831695845f52825f20925f905b88821061076b5750508385969710610753575b505050811b01905560ff90565b01515f1960f88460031b161c191690555f8080610746565b808785968294968601518155019501930190610733565b835f5283601f835f20920160051c820191601f850160051c015b8281106107aa5750506106e7565b5f815501849061079c565b90607f16906106d656fe6080604090808252600480361015610015575f80fd5b5f9160e05f35811c91826301ffc9a714611bd25750816306fdde0314611ae2578163095ea7b314611a6457816316a0b3e0146119d557816318160ddd1461194257816323b872dd1461189a57816323de665114611868578163273c1adf1461183d57816330adf81f14611803578163313ce567146117e8578163360c340f146116ea5781633644e515146116ce5781634cfe8d1a146116b65781635687f2b814611657578163627cdcb91461162e578163641579a614611616578163654cf15d146115f4578163679aefce1461151a57816370a082311461144657816372c981861461137c5781637ecebe001461133857816381fa807c1461113557816384b0196e1461103e578163851c1bb314610fa85781638d928af814610f5857816395d89b4114610e52578163984de9e814610e04578163a9059cbb14610cfb578163aa6ca80814610c0e578163ab68e28c14610b66578163abb1dc44146108cf578163b0e2e403146107b7578163b156aa0a146106d0578163b677fa56146106cb578163ce20ece7146106cb578163d335b0cf14610638578163d505accf1461038e57508063dd62ed3e146102955763e4c43663146101d0575f80fd5b3461028d5760a060031936011261028d576101e9611c7c565b5067ffffffffffffffff6024358181116102915761020a9036908401611d4b565b9260643582811161028d576102229036908501611d4b565b5060843591821161028a5750926102786102456102869361026396369101611e69565b916102508551612004565b8151968796608088526080880190611ded565b91604435602088015286830390870152611ded565b908382036060850152611c39565b0390f35b80fd5b5080fd5b8380fd5b50913461028d578060031936011261028d5760206102b1611c7c565b60646102bb611c9f565b9573ffffffffffffffffffffffffffffffffffffffff8080988751998a9687957f927da10500000000000000000000000000000000000000000000000000000000875230908701521660248501521660448301527f0000000000000000000000000000000000000000000000000000000000000000165afa918215610383579161034a575b6020925051908152f35b90506020823d60201161037b575b8161036560209383611cf2565b81010312610377576020915190610340565b5f80fd5b3d9150610358565b9051903d90823e3d90fd5b91939050346106345781600319360112610634576103aa611c7c565b916103b3611c9f565b90604435936064359160843560ff8116810361063057834211610605576104018373ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2080549060018201905590565b91865160208101917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9835273ffffffffffffffffffffffffffffffffffffffff9687871695868b850152888a1660608501528b608085015260a084015260c083015260c08252810181811067ffffffffffffffff8211176105f257926104de926104d59288958b52519020610494612181565b908a51917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015260c43591604260a43592206124ac565b90929192612546565b168181036105c5575050858495969761055060209651988996879586947fe1f21c67000000000000000000000000000000000000000000000000000000008652850160409194939294606082019573ffffffffffffffffffffffffffffffffffffffff80921683521660208201520152565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19081156105bc5750610586575080f35b6020813d6020116105b4575b8161059f60209383611cf2565b8101031261028d576105b090611f4d565b5080f35b3d9150610592565b513d84823e3d90fd5b7f4b800e460000000000000000000000000000000000000000000000000000000088528852602452604486fd5b60418c634e487b7160e01b5f525260245ffd5b602488858b7f6279130200000000000000000000000000000000000000000000000000000000835252fd5b8780fd5b8280fd5b5050913461028d578160031936011261028d578051927fb45090f9000000000000000000000000000000000000000000000000000000008452309084015260208360248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610383579161034a576020925051908152f35b611efb565b5050913461028d578160031936011261028d578051927f535cfd8a0000000000000000000000000000000000000000000000000000000084523090840152818360248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa91821561038357809261076f575b81516020808252819061028690820186611ded565b9091503d8082853e6107818185611cf2565b83019260208185031261028d5780519167ffffffffffffffff831161028a5750926107b0916102869401611fa3565b905f61075a565b505082346103775760206003193601126103775773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691815192813560208501526020845261081a84611cc2565b803b15610377576108895f9491859285519687809481937fc80882470000000000000000000000000000000000000000000000000000000083527f546573744576656e740000000000000000000000000000000000000000000000898401528960248401526044830190611c39565b03925af180156108c55761089b578380f35b9091925067ffffffffffffffff83116108b2575052005b604190634e487b7160e01b5f525260245ffd5b82513d5f823e3d90fd5b828534610377575f6003193601126103775780517f67e0e076000000000000000000000000000000000000000000000000000000008152308382015273ffffffffffffffffffffffffffffffffffffffff916024905f8383817f000000000000000000000000000000000000000000000000000000000000000088165afa938415610b5c575f955f945f945f97610a08575b5050509061098095949392918151968796608088526080880190611e20565b6020878203818901528080875193848152019601925f905b8382106109c457898803868b015289806102868b6109b68c8c611ded565b908382036060850152611ded565b91849899506060869798600193959783975180516109e181611edd565b83528685820151168584015201511515898201520198019201899897969594929391610998565b94509450945094503d805f853e610a1f8185611cf2565b8301926080818503126103775780519367ffffffffffffffff948581116103775781610a4c918401612085565b936020808401518781116103775784019083601f8301121561037757815192610a7484611d33565b99610a8188519b8c611cf2565b848b52828b019183606080970286010194878611610377579b9c9b8401925b858410610ae95750505050505050828201518581116103775781610ac5918401611fa3565b94606083015190811161037757610adc9201611fa3565b9194929193868080610961565b86849d9e9d890312610377578951908782018d811183821017610b4a578b528451906002821015610377578f91835286860151918216820361037757828792838b950152610b388d8801611f4d565b8d8201528152019301929c9b9c610aa0565b83604186634e487b7160e01b5f52525ffd5b50513d5f823e3d90fd5b8285346103775760a060031936011261037757610b81611c7c565b5067ffffffffffffffff60443581811161037757610ba29036908501611d4b565b9160643582811161037757610bba9036908601611d4b565b5060843591821161037757610278610bdb610c019561028694369101611e69565b91610be68551612004565b81519687966024358852608060208901526080880190611ded565b9186830390870152611ded565b828534610377575f600319360112610377578051917fca4f280300000000000000000000000000000000000000000000000000000000835230908301525f8260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610cf2575f91610cae575b610286925051918291602083526020830190611e20565b90503d805f843e610cbf8184611cf2565b8201916020818403126103775780519267ffffffffffffffff84116103775761028693610cec9201612085565b90610c97565b513d5f823e3d90fd5b8285346103775780600319360112610377576020610d7992610d1b611c7c565b83517fbeabacc80000000000000000000000000000000000000000000000000000000081523392810192835273ffffffffffffffffffffffffffffffffffffffff909116602083015260243560408301529384918291606090910190565b03815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610b5c57610dca575b6020905160018152f35b6020823d602011610dfc575b81610de360209383611cf2565b8101031261037757610df6602092611f4d565b50610dc0565b3d9150610dd6565b84833461037757816003193601126103775780359067ffffffffffffffff821161037757610e3491369101611d4b565b906002602435101561037757610e4b602092612053565b9051908152f35b848334610377575f60031936011261037757815191825f8354610e7481611f15565b90818452602095600191876001821691825f14610f13575050600114610eb7575b5050506102869291610ea8910385611cf2565b51928284938452830190611c39565b5f90815286935091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b828410610efb5750505082010181610ea8610286610e95565b8054848a018601528895508794909301928101610ee2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168782015293151560051b86019093019350849250610ea891506102869050610e95565b8434610377575f600319360112610377576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b8483346103775760206003193601126103775780357fffffffff00000000000000000000000000000000000000000000000000000000811680910361037757825160208101917f000000000000000000000000000000000000000000000000000000000000000083528482015260248152606081019281841067ffffffffffffffff8511176108b2575082602094525190208152f35b92505034610377575f6003193601126103775761107a7f00000000000000000000000000000000000000000000000000000000000000006122b9565b926110a47f00000000000000000000000000000000000000000000000000000000000000006123ee565b815192602084019084821067ffffffffffffffff8311176108b257509161111591610286949382525f845261110882519788977f0f0000000000000000000000000000000000000000000000000000000000000089528060208a0152880190611c39565b9186830390870152611c39565b904660608501523060808501525f60a085015283820360c0850152611ded565b92505034610377575f6003193601126103775782517ff29486a100000000000000000000000000000000000000000000000000000000815230828201526101a092838260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa93841561132e575f946111d9575b858560608282015191015182519182526020820152f35b909180939450813d8311611327575b6111f28183611cf2565b8101039281841261037757855194610140948587019167ffffffffffffffff918884108385111761131457608013610377576101c08801918211838310176108b25750875261124082611f4d565b815261124e60208301611f4d565b906101609182880152611262888401611f4d565b93610180948589015261127760608501611f4d565b9088015286526080820151602087015260a08201518787015260c082015160608701528382015164ffffffffff8116810361037757608087015261010090818301519063ffffffff8216820361037757611307956112fd9260a08a01526112f2610120986112e68a8801611f4d565b60c08c01528601611f4d565b908901528301611f4d565b9086015201611f4d565b908201525f8080806111c2565b604182634e487b7160e01b5f525260245ffd5b503d6111e8565b85513d5f823e3d90fd5b84346103775760206003193601126103775760209073ffffffffffffffffffffffffffffffffffffffff61136a611c7c565b165f5260028252805f20549051908152f35b84833461037757600319926020843601126103775781359367ffffffffffffffff851161037757843603011261037757828101356002811015610377576113c281611edd565b6113ec5750670de0b6b3a76400006113e36020936024600554910135612103565b04905b51908152f35b916024013560055490670de0b6b3a764000090818102918183041490151715611433578115611420576020935004906113e6565b601284634e487b7160e01b5f525260245ffd5b601184634e487b7160e01b5f525260245ffd5b84833461037757602091826003193601126103775782611464611c7c565b604473ffffffffffffffffffffffffffffffffffffffff9485855196879485937ff7888aec00000000000000000000000000000000000000000000000000000000855230908501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa918215610b5c575f926114eb575b5051908152f35b9091508281813d8311611513575b6115038183611cf2565b81010312610377575190836114e4565b503d6114f9565b828534610377575f60031936011261037757600654806115ea57508051917f4f037ee7000000000000000000000000000000000000000000000000000000008352309083015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610b5c575f906115b7575b602092509051908152f35b506020823d6020116115e2575b816115d160209383611cf2565b8101031261037757602091516115ac565b3d91506115c4565b60209250906113e6565b8434610377575f6003193601126103775760209051670de0b6b3a76400008152f35b82346103775760206003193601126103775735600555005b34610377575f60031936011261037757335f908152600260205260409020805460018101909155005b84346103775760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92561168936611dab565b939194611694612116565b5193845273ffffffffffffffffffffffffffffffffffffffff908116941692a3005b82346103775760206003193601126103775735600655005b8434610377575f60031936011261037757602090610e4b612181565b828534610377575f600319360112610377578051917f7e361bde00000000000000000000000000000000000000000000000000000000835230908301525f8260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610cf2575f9161178a575b610286925051918291602083526020830190611ded565b90503d805f843e61179b8184611cf2565b82019080838303126103775782519267ffffffffffffffff9384811161037757836117c7918301611fa3565b92602082015194851161037757610286946117e29201611fa3565b50611773565b8434610377575f600319360112610377576020905160128152f35b8434610377575f60031936011261037757602090517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b8434610377575f6003193601126103775760209051701d6329f1c35ca4bfabb9f56100000000008152f35b84346103775760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61168936611dab565b8285346103775760205f60846118af36611dab565b86517f15dacbea000000000000000000000000000000000000000000000000000000008152339881019890985273ffffffffffffffffffffffffffffffffffffffff928316602489015290821660448801526064870152859283917f0000000000000000000000000000000000000000000000000000000000000000165af18015610b5c57610dca576020905160018152f35b828534610377575f600319360112610377578051917fe4dc2aa4000000000000000000000000000000000000000000000000000000008352309083015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610cf2575f9161034a576020925051908152f35b82853461037757606060031936011261037757813567ffffffffffffffff811161037757611a069036908401611d4b565b90611a3d611a20611a1684612053565b9360243590611f5a565b51670de0b6b3a7640000611a3660443586612103565b0490611f82565b918203918211611a51576020925051908152f35b601183634e487b7160e01b5f525260245ffd5b8285346103775780600319360112610377576020610d7992611a84611c7c565b83517fe1f21c670000000000000000000000000000000000000000000000000000000081523392810192835273ffffffffffffffffffffffffffffffffffffffff909116602083015260243560408301529384918291606090910190565b8434610377575f6003193601126103775780516003549091825f611b0584611f15565b808352602094600190866001821691825f14611b92575050600114611b37575b50506102869291610ea8910385611cf2565b9085925060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f925b828410611b7a5750505082010181610ea8611b25565b8054848a018601528895508794909301928101611b64565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168682015292151560051b85019092019250839150610ea89050611b25565b83346103775760206003193601126103775735907fffffffff000000000000000000000000000000000000000000000000000000008216809203610377577f01ffc9a700000000000000000000000000000000000000000000000000000000602092148152f35b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361037757565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361037757565b6040810190811067ffffffffffffffff821117611cde57604052565b634e487b7160e01b5f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117611cde57604052565b67ffffffffffffffff8111611cde5760051b60200190565b9080601f83011215610377576020908235611d6581611d33565b93611d736040519586611cf2565b81855260208086019260051b82010192831161037757602001905b828210611d9c575050505090565b81358152908301908301611d8e565b60031960609101126103775773ffffffffffffffffffffffffffffffffffffffff90600435828116810361037757916024359081168103610377579060443590565b9081518082526020808093019301915f5b828110611e0c575050505090565b835185529381019392810192600101611dfe565b9081518082526020808093019301915f5b828110611e3f575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101611e31565b81601f820112156103775780359067ffffffffffffffff8211611cde5760405192611ebc60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160185611cf2565b8284526020838301011161037757815f926020809301838601378301015290565b60021115611ee757565b634e487b7160e01b5f52602160045260245ffd5b34610377575f6003193601126103775760206040515f8152f35b90600182811c92168015611f43575b6020831014611f2f57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611f24565b5190811515820361037757565b8051821015611f6e5760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b91908201809211611f8f57565b634e487b7160e01b5f52601160045260245ffd5b9080601f8301121561037757815190602091611fbe81611d33565b93611fcc6040519586611cf2565b81855260208086019260051b82010192831161037757602001905b828210611ff5575050505090565b81518152908301908301611fe7565b9061200e82611d33565b61201b6040519182611cf2565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06120498294611d33565b0190602036910137565b5f90815b815183101561207f576120776001916120708585611f5a565b5190611f82565b920191612057565b91505090565b9080601f83011215610377578151906020916120a081611d33565b936120ae6040519586611cf2565b81855260208086019260051b82010192831161037757602001905b8282106120d7575050505090565b815173ffffffffffffffffffffffffffffffffffffffff811681036103775781529083019083016120c9565b81810292918115918404141715611f8f57565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361215557565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016301480612290575b156121e9577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff821117611cde5760405251902090565b507f000000000000000000000000000000000000000000000000000000000000000046146121c0565b60ff811461230d5760ff811690601f82116122e557604051916122db83611cc2565b8252602082015290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040515f815f549161231f83611f15565b808352926020906001908181169081156123ab575060011461234d575b505061234a92500382611cf2565b90565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b828410612393575061234a9450505081016020015f8061233c565b85548785018301529485019486945092810192612378565b90506020935061234a9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f8061233c565b60ff81146124105760ff811690601f82116122e557604051916122db83611cc2565b506040515f8160019160015461242581611f15565b80845293602091600181169081156123ab575060011461244d57505061234a92500382611cf2565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b828410612494575061234a9450505081016020015f8061233c565b85548785018301529485019486945092810192612479565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161253b579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15612530575f5173ffffffffffffffffffffffffffffffffffffffff81161561252657905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b6004811015611ee75780612558575050565b60018103612588577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b600281036125bc57507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6003146125c65750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffdfea264697066735822122082700ffdbaf10ea7f58c363d8be9a2c4c004347fc566abc9496fcfeb9b56b86d64736f6c634300081b0033","opcodes":"PUSH2 0x200 PUSH1 0x40 DUP2 DUP2 MSTORE CALLVALUE PUSH2 0x48A JUMPI PUSH2 0x2DE7 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x1E DUP3 DUP7 PUSH2 0x48E JUMP JUMPDEST DUP5 CODECOPY DUP3 ADD SWAP1 PUSH1 0x60 DUP4 DUP4 SUB SLT PUSH2 0x48A JUMPI DUP3 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x48A JUMPI PUSH1 0x20 DUP5 DUP2 ADD MLOAD SWAP1 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP2 DUP3 DUP2 GT PUSH2 0x48A JUMPI DUP6 PUSH2 0x64 SWAP2 DUP4 ADD PUSH2 0x4B1 JUMP JUMPDEST SWAP5 DUP4 DUP3 ADD MLOAD DUP4 DUP2 GT PUSH2 0x48A JUMPI PUSH2 0x7A SWAP3 ADD PUSH2 0x4B1 JUMP JUMPDEST SWAP4 DUP3 MLOAD SWAP6 DUP4 DUP8 ADD DUP8 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x3A1 JUMPI DUP5 MSTORE PUSH1 0x1 DUP1 DUP9 MSTORE DUP2 DUP9 ADD SWAP4 PUSH1 0x31 PUSH1 0xF8 SHL DUP6 MSTORE PUSH2 0xA7 DUP5 PUSH2 0x506 JUMP JUMPDEST SWAP8 PUSH2 0x120 SWAP9 DUP10 MSTORE PUSH2 0xB7 DUP11 PUSH2 0x689 JUMP JUMPDEST SWAP6 PUSH2 0x140 SWAP7 DUP8 MSTORE DUP6 MLOAD DUP6 DUP8 ADD KECCAK256 SWAP11 DUP12 PUSH1 0xE0 MSTORE MLOAD SWAP1 KECCAK256 SWAP10 PUSH2 0x100 SWAP11 DUP1 DUP13 MSTORE CHAINID PUSH1 0xA0 MSTORE DUP9 MLOAD SWAP1 DUP7 DUP3 ADD SWAP3 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP5 MSTORE DUP11 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT DUP6 DUP3 GT OR PUSH2 0x3A1 JUMPI DUP10 MSTORE MLOAD SWAP1 KECCAK256 PUSH1 0x80 MSTORE ADDRESS PUSH1 0xC0 MSTORE PUSH2 0x160 SWAP5 DUP9 DUP7 MSTORE DUP1 MLOAD SWAP2 DUP4 DUP4 GT PUSH2 0x3A1 JUMPI PUSH1 0x3 SWAP3 DUP4 SLOAD SWAP3 DUP7 DUP5 DUP2 SHR SWAP5 AND DUP1 ISZERO PUSH2 0x480 JUMPI JUMPDEST DUP9 DUP6 LT EQ PUSH2 0x46C JUMPI DUP2 SWAP1 PUSH1 0x1F SWAP5 DUP6 DUP2 GT PUSH2 0x41E JUMPI JUMPDEST POP DUP9 SWAP1 DUP6 DUP4 GT PUSH1 0x1 EQ PUSH2 0x3C0 JUMPI PUSH0 SWAP3 PUSH2 0x3B5 JUMPI JUMPDEST POP POP PUSH0 NOT DUP3 DUP7 SHL SHR NOT AND SWAP1 DUP7 SHL OR DUP4 SSTORE JUMPDEST DUP1 MLOAD SWAP4 DUP5 GT PUSH2 0x3A1 JUMPI PUSH1 0x4 SWAP6 DUP7 SLOAD DUP7 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x397 JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x384 JUMPI DUP4 DUP2 GT PUSH2 0x341 JUMPI JUMPDEST POP DUP1 SWAP3 DUP6 GT PUSH1 0x1 EQ PUSH2 0x2DC JUMPI POP SWAP4 DUP4 SWAP5 SWAP2 DUP5 SWAP3 PUSH0 SWAP6 PUSH2 0x2D1 JUMPI JUMPDEST POP POP SHL SWAP3 PUSH0 NOT SWAP2 SHL SHR NOT AND OR SWAP1 SSTORE JUMPDEST PUSH2 0x180 SWAP2 CALLER DUP4 MSTORE PUSH2 0x1A0 SWAP4 DUP6 DUP6 MSTORE PUSH2 0x1E0 SWAP6 DUP7 MSTORE PUSH8 0xDE0B6B3A7640000 PUSH1 0x5 SSTORE MLOAD SWAP6 PUSH2 0x2627 SWAP8 DUP9 PUSH2 0x7C0 DUP10 CODECOPY PUSH1 0x80 MLOAD DUP9 PUSH2 0x21C7 ADD MSTORE PUSH1 0xA0 MLOAD DUP9 PUSH2 0x2293 ADD MSTORE PUSH1 0xC0 MLOAD DUP9 PUSH2 0x2198 ADD MSTORE PUSH1 0xE0 MLOAD DUP9 PUSH2 0x2216 ADD MSTORE MLOAD DUP8 PUSH2 0x223C ADD MSTORE MLOAD DUP7 PUSH2 0x1056 ADD MSTORE MLOAD DUP6 PUSH2 0x1080 ADD MSTORE MLOAD DUP5 DUP2 DUP2 PUSH2 0x311 ADD MSTORE DUP2 DUP2 PUSH2 0x554 ADD MSTORE DUP2 DUP2 PUSH2 0x7E2 ADD MSTORE DUP2 DUP2 PUSH2 0xD93 ADD MSTORE DUP2 DUP2 PUSH2 0xF84 ADD MSTORE DUP2 DUP2 PUSH2 0x14B4 ADD MSTORE DUP2 DUP2 PUSH2 0x157D ADD MSTORE DUP2 DUP2 PUSH2 0x1743 ADD MSTORE DUP2 DUP2 PUSH2 0x190C ADD MSTORE DUP2 DUP2 PUSH2 0x199C ADD MSTORE PUSH2 0x212D ADD MSTORE MLOAD DUP4 PUSH2 0xFF0 ADD MSTORE MLOAD DUP3 POP POP PUSH2 0x1C0 MLOAD DUP3 POP POP MLOAD DUP2 DUP2 DUP2 PUSH2 0x693 ADD MSTORE DUP2 DUP2 PUSH2 0x72A ADD MSTORE DUP2 DUP2 PUSH2 0x92A ADD MSTORE DUP2 DUP2 PUSH2 0xC67 ADD MSTORE PUSH2 0x1192 ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP4 POP PUSH0 DUP1 PUSH2 0x1D9 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 DUP5 PUSH1 0x1F NOT DUP2 AND DUP9 PUSH0 MSTORE DUP6 PUSH0 KECCAK256 SWAP6 PUSH0 SWAP1 JUMPDEST DUP10 DUP4 DUP4 LT PUSH2 0x327 JUMPI POP POP POP LT PUSH2 0x30E JUMPI JUMPDEST POP POP POP POP DUP2 SHL ADD SWAP1 SSTORE PUSH2 0x1E8 JUMP JUMPDEST ADD MLOAD SWAP1 PUSH1 0xF8 DUP5 PUSH0 NOT SWAP3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 DUP1 PUSH2 0x300 JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP10 SSTORE SWAP1 SWAP8 ADD SWAP7 SWAP5 DUP6 ADD SWAP5 DUP9 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x2EF JUMP JUMPDEST DUP8 PUSH0 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP1 DUP9 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP5 DUP10 LT PUSH2 0x37B JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP8 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x370 JUMPI POP POP PUSH2 0x1BF JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP8 SWAP1 PUSH2 0x362 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x359 JUMP JUMPDEST PUSH1 0x22 DUP9 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x1AF JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x183 JUMP JUMPDEST SWAP1 DUP9 SWAP4 POP PUSH1 0x1F NOT DUP4 AND SWAP2 DUP8 PUSH0 MSTORE DUP11 PUSH0 KECCAK256 SWAP3 PUSH0 JUMPDEST DUP13 DUP3 DUP3 LT PUSH2 0x408 JUMPI POP POP DUP5 GT PUSH2 0x3F1 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD DUP4 SSTORE PUSH2 0x194 JUMP JUMPDEST ADD MLOAD PUSH0 NOT DUP4 DUP9 SHL PUSH1 0xF8 AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x3E4 JUMP JUMPDEST DUP4 DUP6 ADD MLOAD DUP7 SSTORE DUP13 SWAP8 SWAP1 SWAP6 ADD SWAP5 SWAP4 DUP5 ADD SWAP4 ADD PUSH2 0x3D3 JUMP JUMPDEST SWAP1 SWAP2 POP DUP6 PUSH0 MSTORE DUP9 PUSH0 KECCAK256 DUP6 DUP1 DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP12 DUP7 LT PUSH2 0x463 JUMPI JUMPDEST SWAP2 DUP11 SWAP2 DUP7 SWAP6 SWAP5 SWAP4 ADD PUSH1 0x5 SHR ADD SWAP2 JUMPDEST DUP3 DUP2 LT PUSH2 0x455 JUMPI POP POP PUSH2 0x16F JUMP JUMPDEST PUSH0 DUP2 SSTORE DUP6 SWAP5 POP DUP11 SWAP2 ADD PUSH2 0x447 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x439 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP4 PUSH1 0x7F AND SWAP4 PUSH2 0x15A JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x3A1 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x48A JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x3A1 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x4E5 PUSH1 0x1F DUP5 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP6 PUSH2 0x48E JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x48A JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0x57C JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0x53E JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0x530 JUMPI POP OR SWAP1 JUMP JUMPDEST DUP3 PUSH0 NOT SWAP2 SUB PUSH1 0x3 SHL SHL AND OR SWAP1 JUMP JUMPDEST PUSH1 0x44 DUP3 PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH4 0x305A27A9 PUSH1 0xE0 SHL DUP4 MSTORE DUP2 PUSH1 0x4 DUP5 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH1 0x24 DUP7 ADD MSTORE ADD DUP5 DUP5 ADD MCOPY PUSH0 DUP3 DUP3 ADD DUP5 ADD MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP2 ADD SUB ADD SWAP1 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x3A1 JUMPI PUSH0 SLOAD SWAP3 PUSH1 0x1 SWAP4 DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x67F JUMPI JUMPDEST DUP4 DUP3 LT EQ PUSH2 0x46C JUMPI PUSH1 0x1F DUP2 GT PUSH2 0x64C JUMPI JUMPDEST POP DUP2 PUSH1 0x1F DUP5 GT PUSH1 0x1 EQ PUSH2 0x5EA JUMPI POP SWAP3 DUP3 SWAP4 SWAP2 DUP4 SWAP3 PUSH0 SWAP5 PUSH2 0x5DF JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0x5CA JUMP JUMPDEST SWAP2 SWAP1 DUP4 PUSH1 0x1F NOT DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0x632 JUMPI POP POP POP LT PUSH2 0x61A JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x60D JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x5FC JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP5 PUSH1 0x1F DUP5 PUSH0 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 PUSH1 0x1F DUP7 ADD PUSH1 0x5 SHR ADD JUMPDEST DUP3 DUP2 LT PUSH2 0x674 JUMPI POP POP PUSH2 0x5AF JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0x666 JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x59E JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0x6B3 JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0x53E JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0x530 JUMPI POP OR SWAP1 JUMP JUMPDEST SWAP2 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x3A1 JUMPI PUSH1 0x1 SWAP2 DUP3 SLOAD DUP4 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x7B5 JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x46C JUMPI PUSH1 0x1F DUP2 GT PUSH2 0x782 JUMPI JUMPDEST POP DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0x722 JUMPI POP DUP2 SWAP3 SWAP4 SWAP5 PUSH0 SWAP3 PUSH2 0x717 JUMPI JUMPDEST POP POP PUSH0 NOT PUSH1 0x3 DUP4 SWAP1 SHL SHR NOT AND SWAP1 DUP3 SHL OR SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x700 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT DUP4 AND SWAP6 DUP5 PUSH0 MSTORE DUP3 PUSH0 KECCAK256 SWAP3 PUSH0 SWAP1 JUMPDEST DUP9 DUP3 LT PUSH2 0x76B JUMPI POP POP DUP4 DUP6 SWAP7 SWAP8 LT PUSH2 0x753 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x746 JUMP JUMPDEST DUP1 DUP8 DUP6 SWAP7 DUP3 SWAP5 SWAP7 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP6 ADD SWAP4 ADD SWAP1 PUSH2 0x733 JUMP JUMPDEST DUP4 PUSH0 MSTORE DUP4 PUSH1 0x1F DUP4 PUSH0 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR ADD JUMPDEST DUP3 DUP2 LT PUSH2 0x7AA JUMPI POP POP PUSH2 0x6E7 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP5 SWAP1 PUSH2 0x79C JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x6D6 JUMP INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP2 PUSH1 0xE0 PUSH0 CALLDATALOAD DUP2 SHR SWAP2 DUP3 PUSH4 0x1FFC9A7 EQ PUSH2 0x1BD2 JUMPI POP DUP2 PUSH4 0x6FDDE03 EQ PUSH2 0x1AE2 JUMPI DUP2 PUSH4 0x95EA7B3 EQ PUSH2 0x1A64 JUMPI DUP2 PUSH4 0x16A0B3E0 EQ PUSH2 0x19D5 JUMPI DUP2 PUSH4 0x18160DDD EQ PUSH2 0x1942 JUMPI DUP2 PUSH4 0x23B872DD EQ PUSH2 0x189A JUMPI DUP2 PUSH4 0x23DE6651 EQ PUSH2 0x1868 JUMPI DUP2 PUSH4 0x273C1ADF EQ PUSH2 0x183D JUMPI DUP2 PUSH4 0x30ADF81F EQ PUSH2 0x1803 JUMPI DUP2 PUSH4 0x313CE567 EQ PUSH2 0x17E8 JUMPI DUP2 PUSH4 0x360C340F EQ PUSH2 0x16EA JUMPI DUP2 PUSH4 0x3644E515 EQ PUSH2 0x16CE JUMPI DUP2 PUSH4 0x4CFE8D1A EQ PUSH2 0x16B6 JUMPI DUP2 PUSH4 0x5687F2B8 EQ PUSH2 0x1657 JUMPI DUP2 PUSH4 0x627CDCB9 EQ PUSH2 0x162E JUMPI DUP2 PUSH4 0x641579A6 EQ PUSH2 0x1616 JUMPI DUP2 PUSH4 0x654CF15D EQ PUSH2 0x15F4 JUMPI DUP2 PUSH4 0x679AEFCE EQ PUSH2 0x151A JUMPI DUP2 PUSH4 0x70A08231 EQ PUSH2 0x1446 JUMPI DUP2 PUSH4 0x72C98186 EQ PUSH2 0x137C JUMPI DUP2 PUSH4 0x7ECEBE00 EQ PUSH2 0x1338 JUMPI DUP2 PUSH4 0x81FA807C EQ PUSH2 0x1135 JUMPI DUP2 PUSH4 0x84B0196E EQ PUSH2 0x103E JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0xFA8 JUMPI DUP2 PUSH4 0x8D928AF8 EQ PUSH2 0xF58 JUMPI DUP2 PUSH4 0x95D89B41 EQ PUSH2 0xE52 JUMPI DUP2 PUSH4 0x984DE9E8 EQ PUSH2 0xE04 JUMPI DUP2 PUSH4 0xA9059CBB EQ PUSH2 0xCFB JUMPI DUP2 PUSH4 0xAA6CA808 EQ PUSH2 0xC0E JUMPI DUP2 PUSH4 0xAB68E28C EQ PUSH2 0xB66 JUMPI DUP2 PUSH4 0xABB1DC44 EQ PUSH2 0x8CF JUMPI DUP2 PUSH4 0xB0E2E403 EQ PUSH2 0x7B7 JUMPI DUP2 PUSH4 0xB156AA0A EQ PUSH2 0x6D0 JUMPI DUP2 PUSH4 0xB677FA56 EQ PUSH2 0x6CB JUMPI DUP2 PUSH4 0xCE20ECE7 EQ PUSH2 0x6CB JUMPI DUP2 PUSH4 0xD335B0CF EQ PUSH2 0x638 JUMPI DUP2 PUSH4 0xD505ACCF EQ PUSH2 0x38E JUMPI POP DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x295 JUMPI PUSH4 0xE4C43663 EQ PUSH2 0x1D0 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x28D JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x28D JUMPI PUSH2 0x1E9 PUSH2 0x1C7C JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x291 JUMPI PUSH2 0x20A SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x1D4B JUMP JUMPDEST SWAP3 PUSH1 0x64 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x28D JUMPI PUSH2 0x222 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x1D4B JUMP JUMPDEST POP PUSH1 0x84 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x28A JUMPI POP SWAP3 PUSH2 0x278 PUSH2 0x245 PUSH2 0x286 SWAP4 PUSH2 0x263 SWAP7 CALLDATASIZE SWAP2 ADD PUSH2 0x1E69 JUMP JUMPDEST SWAP2 PUSH2 0x250 DUP6 MLOAD PUSH2 0x2004 JUMP JUMPDEST DUP2 MLOAD SWAP7 DUP8 SWAP7 PUSH1 0x80 DUP9 MSTORE PUSH1 0x80 DUP9 ADD SWAP1 PUSH2 0x1DED JUMP JUMPDEST SWAP2 PUSH1 0x44 CALLDATALOAD PUSH1 0x20 DUP9 ADD MSTORE DUP7 DUP4 SUB SWAP1 DUP8 ADD MSTORE PUSH2 0x1DED JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x1C39 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST DUP4 DUP1 REVERT JUMPDEST POP SWAP2 CALLVALUE PUSH2 0x28D JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x28D JUMPI PUSH1 0x20 PUSH2 0x2B1 PUSH2 0x1C7C JUMP JUMPDEST PUSH1 0x64 PUSH2 0x2BB PUSH2 0x1C9F JUMP JUMPDEST SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP1 SWAP9 DUP8 MLOAD SWAP10 DUP11 SWAP7 DUP8 SWAP6 PUSH32 0x927DA10500000000000000000000000000000000000000000000000000000000 DUP8 MSTORE ADDRESS SWAP1 DUP8 ADD MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE AND PUSH1 0x44 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x383 JUMPI SWAP2 PUSH2 0x34A JUMPI JUMPDEST PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x37B JUMPI JUMPDEST DUP2 PUSH2 0x365 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP2 MLOAD SWAP1 PUSH2 0x340 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x358 JUMP JUMPDEST SWAP1 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 POP CALLVALUE PUSH2 0x634 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x634 JUMPI PUSH2 0x3AA PUSH2 0x1C7C JUMP JUMPDEST SWAP2 PUSH2 0x3B3 PUSH2 0x1C9F JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP4 PUSH1 0x64 CALLDATALOAD SWAP2 PUSH1 0x84 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 SUB PUSH2 0x630 JUMPI DUP4 TIMESTAMP GT PUSH2 0x605 JUMPI PUSH2 0x401 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH1 0x1 DUP3 ADD SWAP1 SSTORE SWAP1 JUMP JUMPDEST SWAP2 DUP7 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP8 AND SWAP6 DUP7 DUP12 DUP6 ADD MSTORE DUP9 DUP11 AND PUSH1 0x60 DUP6 ADD MSTORE DUP12 PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 MSTORE DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x5F2 JUMPI SWAP3 PUSH2 0x4DE SWAP3 PUSH2 0x4D5 SWAP3 DUP9 SWAP6 DUP12 MSTORE MLOAD SWAP1 KECCAK256 PUSH2 0x494 PUSH2 0x2181 JUMP JUMPDEST SWAP1 DUP11 MLOAD SWAP2 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x2 DUP4 ADD MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0xC4 CALLDATALOAD SWAP2 PUSH1 0x42 PUSH1 0xA4 CALLDATALOAD SWAP3 KECCAK256 PUSH2 0x24AC JUMP JUMPDEST SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x2546 JUMP JUMPDEST AND DUP2 DUP2 SUB PUSH2 0x5C5 JUMPI POP POP DUP6 DUP5 SWAP6 SWAP7 SWAP8 PUSH2 0x550 PUSH1 0x20 SWAP7 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP7 MSTORE DUP6 ADD PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 SWAP5 PUSH1 0x60 DUP3 ADD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP4 MSTORE AND PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x5BC JUMPI POP PUSH2 0x586 JUMPI POP DUP1 RETURN JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x5B4 JUMPI JUMPDEST DUP2 PUSH2 0x59F PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x28D JUMPI PUSH2 0x5B0 SWAP1 PUSH2 0x1F4D JUMP JUMPDEST POP DUP1 RETURN JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x592 JUMP JUMPDEST MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0x4B800E4600000000000000000000000000000000000000000000000000000000 DUP9 MSTORE DUP9 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 DUP7 REVERT JUMPDEST PUSH1 0x41 DUP13 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x24 DUP9 DUP6 DUP12 PUSH32 0x6279130200000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST DUP8 DUP1 REVERT JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP POP SWAP2 CALLVALUE PUSH2 0x28D JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x28D JUMPI DUP1 MLOAD SWAP3 PUSH32 0xB45090F900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE ADDRESS SWAP1 DUP5 ADD MSTORE PUSH1 0x20 DUP4 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x383 JUMPI SWAP2 PUSH2 0x34A JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x1EFB JUMP JUMPDEST POP POP SWAP2 CALLVALUE PUSH2 0x28D JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x28D JUMPI DUP1 MLOAD SWAP3 PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE ADDRESS SWAP1 DUP5 ADD MSTORE DUP2 DUP4 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x383 JUMPI DUP1 SWAP3 PUSH2 0x76F JUMPI JUMPDEST DUP2 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 SWAP1 PUSH2 0x286 SWAP1 DUP3 ADD DUP7 PUSH2 0x1DED JUMP JUMPDEST SWAP1 SWAP2 POP RETURNDATASIZE DUP1 DUP3 DUP6 RETURNDATACOPY PUSH2 0x781 DUP2 DUP6 PUSH2 0x1CF2 JUMP JUMPDEST DUP4 ADD SWAP3 PUSH1 0x20 DUP2 DUP6 SUB SLT PUSH2 0x28D JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x28A JUMPI POP SWAP3 PUSH2 0x7B0 SWAP2 PUSH2 0x286 SWAP5 ADD PUSH2 0x1FA3 JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x75A JUMP JUMPDEST POP POP DUP3 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 DUP2 MLOAD SWAP3 DUP2 CALLDATALOAD PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x20 DUP5 MSTORE PUSH2 0x81A DUP5 PUSH2 0x1CC2 JUMP JUMPDEST DUP1 EXTCODESIZE ISZERO PUSH2 0x377 JUMPI PUSH2 0x889 PUSH0 SWAP5 SWAP2 DUP6 SWAP3 DUP6 MLOAD SWAP7 DUP8 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xC808824700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH32 0x546573744576656E740000000000000000000000000000000000000000000000 DUP10 DUP5 ADD MSTORE DUP10 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x1C39 JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x8C5 JUMPI PUSH2 0x89B JUMPI DUP4 DUP1 RETURN JUMPDEST SWAP1 SWAP2 SWAP3 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x8B2 JUMPI POP MSTORE STOP JUMPDEST PUSH1 0x41 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 MLOAD PUSH32 0x67E0E07600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x24 SWAP1 PUSH0 DUP4 DUP4 DUP2 PUSH32 0x0 DUP9 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0xB5C JUMPI PUSH0 SWAP6 PUSH0 SWAP5 PUSH0 SWAP5 PUSH0 SWAP8 PUSH2 0xA08 JUMPI JUMPDEST POP POP POP SWAP1 PUSH2 0x980 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP2 MLOAD SWAP7 DUP8 SWAP7 PUSH1 0x80 DUP9 MSTORE PUSH1 0x80 DUP9 ADD SWAP1 PUSH2 0x1E20 JUMP JUMPDEST PUSH1 0x20 DUP8 DUP3 SUB DUP2 DUP10 ADD MSTORE DUP1 DUP1 DUP8 MLOAD SWAP4 DUP5 DUP2 MSTORE ADD SWAP7 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x9C4 JUMPI DUP10 DUP9 SUB DUP7 DUP12 ADD MSTORE DUP10 DUP1 PUSH2 0x286 DUP12 PUSH2 0x9B6 DUP13 DUP13 PUSH2 0x1DED JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x1DED JUMP JUMPDEST SWAP2 DUP5 SWAP9 SWAP10 POP PUSH1 0x60 DUP7 SWAP8 SWAP9 PUSH1 0x1 SWAP4 SWAP6 SWAP8 DUP4 SWAP8 MLOAD DUP1 MLOAD PUSH2 0x9E1 DUP2 PUSH2 0x1EDD JUMP JUMPDEST DUP4 MSTORE DUP7 DUP6 DUP3 ADD MLOAD AND DUP6 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO DUP10 DUP3 ADD MSTORE ADD SWAP9 ADD SWAP3 ADD DUP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 PUSH2 0x998 JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP RETURNDATASIZE DUP1 PUSH0 DUP6 RETURNDATACOPY PUSH2 0xA1F DUP2 DUP6 PUSH2 0x1CF2 JUMP JUMPDEST DUP4 ADD SWAP3 PUSH1 0x80 DUP2 DUP6 SUB SLT PUSH2 0x377 JUMPI DUP1 MLOAD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP2 GT PUSH2 0x377 JUMPI DUP2 PUSH2 0xA4C SWAP2 DUP5 ADD PUSH2 0x2085 JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP1 DUP5 ADD MLOAD DUP8 DUP2 GT PUSH2 0x377 JUMPI DUP5 ADD SWAP1 DUP4 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x377 JUMPI DUP2 MLOAD SWAP3 PUSH2 0xA74 DUP5 PUSH2 0x1D33 JUMP JUMPDEST SWAP10 PUSH2 0xA81 DUP9 MLOAD SWAP12 DUP13 PUSH2 0x1CF2 JUMP JUMPDEST DUP5 DUP12 MSTORE DUP3 DUP12 ADD SWAP2 DUP4 PUSH1 0x60 DUP1 SWAP8 MUL DUP7 ADD ADD SWAP5 DUP8 DUP7 GT PUSH2 0x377 JUMPI SWAP12 SWAP13 SWAP12 DUP5 ADD SWAP3 JUMPDEST DUP6 DUP5 LT PUSH2 0xAE9 JUMPI POP POP POP POP POP POP POP DUP3 DUP3 ADD MLOAD DUP6 DUP2 GT PUSH2 0x377 JUMPI DUP2 PUSH2 0xAC5 SWAP2 DUP5 ADD PUSH2 0x1FA3 JUMP JUMPDEST SWAP5 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x377 JUMPI PUSH2 0xADC SWAP3 ADD PUSH2 0x1FA3 JUMP JUMPDEST SWAP2 SWAP5 SWAP3 SWAP2 SWAP4 DUP7 DUP1 DUP1 PUSH2 0x961 JUMP JUMPDEST DUP7 DUP5 SWAP14 SWAP15 SWAP14 DUP10 SUB SLT PUSH2 0x377 JUMPI DUP10 MLOAD SWAP1 DUP8 DUP3 ADD DUP14 DUP2 GT DUP4 DUP3 LT OR PUSH2 0xB4A JUMPI DUP12 MSTORE DUP5 MLOAD SWAP1 PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x377 JUMPI DUP16 SWAP2 DUP4 MSTORE DUP7 DUP7 ADD MLOAD SWAP2 DUP3 AND DUP3 SUB PUSH2 0x377 JUMPI DUP3 DUP8 SWAP3 DUP4 DUP12 SWAP6 ADD MSTORE PUSH2 0xB38 DUP14 DUP9 ADD PUSH2 0x1F4D JUMP JUMPDEST DUP14 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP4 ADD SWAP3 SWAP13 SWAP12 SWAP13 PUSH2 0xAA0 JUMP JUMPDEST DUP4 PUSH1 0x41 DUP7 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH2 0xB81 PUSH2 0x1C7C JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x377 JUMPI PUSH2 0xBA2 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x1D4B JUMP JUMPDEST SWAP2 PUSH1 0x64 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x377 JUMPI PUSH2 0xBBA SWAP1 CALLDATASIZE SWAP1 DUP7 ADD PUSH2 0x1D4B JUMP JUMPDEST POP PUSH1 0x84 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x377 JUMPI PUSH2 0x278 PUSH2 0xBDB PUSH2 0xC01 SWAP6 PUSH2 0x286 SWAP5 CALLDATASIZE SWAP2 ADD PUSH2 0x1E69 JUMP JUMPDEST SWAP2 PUSH2 0xBE6 DUP6 MLOAD PUSH2 0x2004 JUMP JUMPDEST DUP2 MLOAD SWAP7 DUP8 SWAP7 PUSH1 0x24 CALLDATALOAD DUP9 MSTORE PUSH1 0x80 PUSH1 0x20 DUP10 ADD MSTORE PUSH1 0x80 DUP9 ADD SWAP1 PUSH2 0x1DED JUMP JUMPDEST SWAP2 DUP7 DUP4 SUB SWAP1 DUP8 ADD MSTORE PUSH2 0x1DED JUMP JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 MLOAD SWAP2 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH0 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xCF2 JUMPI PUSH0 SWAP2 PUSH2 0xCAE JUMPI JUMPDEST PUSH2 0x286 SWAP3 POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1E20 JUMP JUMPDEST SWAP1 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0xCBF DUP2 DUP5 PUSH2 0x1CF2 JUMP JUMPDEST DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP5 SUB SLT PUSH2 0x377 JUMPI DUP1 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0x377 JUMPI PUSH2 0x286 SWAP4 PUSH2 0xCEC SWAP3 ADD PUSH2 0x2085 JUMP JUMPDEST SWAP1 PUSH2 0xC97 JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 PUSH2 0xD79 SWAP3 PUSH2 0xD1B PUSH2 0x1C7C JUMP JUMPDEST DUP4 MLOAD PUSH32 0xBEABACC800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xB5C JUMPI PUSH2 0xDCA JUMPI JUMPDEST PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xDFC JUMPI JUMPDEST DUP2 PUSH2 0xDE3 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x377 JUMPI PUSH2 0xDF6 PUSH1 0x20 SWAP3 PUSH2 0x1F4D JUMP JUMPDEST POP PUSH2 0xDC0 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xDD6 JUMP JUMPDEST DUP5 DUP4 CALLVALUE PUSH2 0x377 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x377 JUMPI PUSH2 0xE34 SWAP2 CALLDATASIZE SWAP2 ADD PUSH2 0x1D4B JUMP JUMPDEST SWAP1 PUSH1 0x2 PUSH1 0x24 CALLDATALOAD LT ISZERO PUSH2 0x377 JUMPI PUSH2 0xE4B PUSH1 0x20 SWAP3 PUSH2 0x2053 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP5 DUP4 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP2 MLOAD SWAP2 DUP3 PUSH0 DUP4 SLOAD PUSH2 0xE74 DUP2 PUSH2 0x1F15 JUMP JUMPDEST SWAP1 DUP2 DUP5 MSTORE PUSH1 0x20 SWAP6 PUSH1 0x1 SWAP2 DUP8 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0xF13 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xEB7 JUMPI JUMPDEST POP POP POP PUSH2 0x286 SWAP3 SWAP2 PUSH2 0xEA8 SWAP2 SUB DUP6 PUSH2 0x1CF2 JUMP JUMPDEST MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1C39 JUMP JUMPDEST PUSH0 SWAP1 DUP2 MSTORE DUP7 SWAP4 POP SWAP2 SWAP1 PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B JUMPDEST DUP3 DUP5 LT PUSH2 0xEFB JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0xEA8 PUSH2 0x286 PUSH2 0xE95 JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0xEE2 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 DUP3 ADD MSTORE SWAP4 ISZERO ISZERO PUSH1 0x5 SHL DUP7 ADD SWAP1 SWAP4 ADD SWAP4 POP DUP5 SWAP3 POP PUSH2 0xEA8 SWAP2 POP PUSH2 0x286 SWAP1 POP PUSH2 0xE95 JUMP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP5 DUP4 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x377 JUMPI DUP3 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 PUSH32 0x0 DUP4 MSTORE DUP5 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD SWAP3 DUP2 DUP5 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT OR PUSH2 0x8B2 JUMPI POP DUP3 PUSH1 0x20 SWAP5 MSTORE MLOAD SWAP1 KECCAK256 DUP2 MSTORE RETURN JUMPDEST SWAP3 POP POP CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH2 0x107A PUSH32 0x0 PUSH2 0x22B9 JUMP JUMPDEST SWAP3 PUSH2 0x10A4 PUSH32 0x0 PUSH2 0x23EE JUMP JUMPDEST DUP2 MLOAD SWAP3 PUSH1 0x20 DUP5 ADD SWAP1 DUP5 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x8B2 JUMPI POP SWAP2 PUSH2 0x1115 SWAP2 PUSH2 0x286 SWAP5 SWAP4 DUP3 MSTORE PUSH0 DUP5 MSTORE PUSH2 0x1108 DUP3 MLOAD SWAP8 DUP9 SWAP8 PUSH32 0xF00000000000000000000000000000000000000000000000000000000000000 DUP10 MSTORE DUP1 PUSH1 0x20 DUP11 ADD MSTORE DUP9 ADD SWAP1 PUSH2 0x1C39 JUMP JUMPDEST SWAP2 DUP7 DUP4 SUB SWAP1 DUP8 ADD MSTORE PUSH2 0x1C39 JUMP JUMPDEST SWAP1 CHAINID PUSH1 0x60 DUP6 ADD MSTORE ADDRESS PUSH1 0x80 DUP6 ADD MSTORE PUSH0 PUSH1 0xA0 DUP6 ADD MSTORE DUP4 DUP3 SUB PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x1DED JUMP JUMPDEST SWAP3 POP POP CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP3 MLOAD PUSH32 0xF29486A100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE PUSH2 0x1A0 SWAP3 DUP4 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x132E JUMPI PUSH0 SWAP5 PUSH2 0x11D9 JUMPI JUMPDEST DUP6 DUP6 PUSH1 0x60 DUP3 DUP3 ADD MLOAD SWAP2 ADD MLOAD DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST SWAP1 SWAP2 DUP1 SWAP4 SWAP5 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1327 JUMPI JUMPDEST PUSH2 0x11F2 DUP2 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SWAP3 DUP2 DUP5 SLT PUSH2 0x377 JUMPI DUP6 MLOAD SWAP5 PUSH2 0x140 SWAP5 DUP6 DUP8 ADD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP9 DUP5 LT DUP4 DUP6 GT OR PUSH2 0x1314 JUMPI PUSH1 0x80 SGT PUSH2 0x377 JUMPI PUSH2 0x1C0 DUP9 ADD SWAP2 DUP3 GT DUP4 DUP4 LT OR PUSH2 0x8B2 JUMPI POP DUP8 MSTORE PUSH2 0x1240 DUP3 PUSH2 0x1F4D JUMP JUMPDEST DUP2 MSTORE PUSH2 0x124E PUSH1 0x20 DUP4 ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP1 PUSH2 0x160 SWAP2 DUP3 DUP9 ADD MSTORE PUSH2 0x1262 DUP9 DUP5 ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP4 PUSH2 0x180 SWAP5 DUP6 DUP10 ADD MSTORE PUSH2 0x1277 PUSH1 0x60 DUP6 ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP1 DUP9 ADD MSTORE DUP7 MSTORE PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0xA0 DUP3 ADD MLOAD DUP8 DUP8 ADD MSTORE PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x60 DUP8 ADD MSTORE DUP4 DUP3 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x377 JUMPI PUSH1 0x80 DUP8 ADD MSTORE PUSH2 0x100 SWAP1 DUP2 DUP4 ADD MLOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x377 JUMPI PUSH2 0x1307 SWAP6 PUSH2 0x12FD SWAP3 PUSH1 0xA0 DUP11 ADD MSTORE PUSH2 0x12F2 PUSH2 0x120 SWAP9 PUSH2 0x12E6 DUP11 DUP9 ADD PUSH2 0x1F4D JUMP JUMPDEST PUSH1 0xC0 DUP13 ADD MSTORE DUP7 ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP1 DUP10 ADD MSTORE DUP4 ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP1 DUP7 ADD MSTORE ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH0 DUP1 DUP1 DUP1 PUSH2 0x11C2 JUMP JUMPDEST PUSH1 0x41 DUP3 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x11E8 JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x136A PUSH2 0x1C7C JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP5 DUP4 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x3 NOT SWAP3 PUSH1 0x20 DUP5 CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP2 CALLDATALOAD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT PUSH2 0x377 JUMPI DUP5 CALLDATASIZE SUB ADD SLT PUSH2 0x377 JUMPI DUP3 DUP2 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x377 JUMPI PUSH2 0x13C2 DUP2 PUSH2 0x1EDD JUMP JUMPDEST PUSH2 0x13EC JUMPI POP PUSH8 0xDE0B6B3A7640000 PUSH2 0x13E3 PUSH1 0x20 SWAP4 PUSH1 0x24 PUSH1 0x5 SLOAD SWAP2 ADD CALLDATALOAD PUSH2 0x2103 JUMP JUMPDEST DIV SWAP1 JUMPDEST MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP2 PUSH1 0x24 ADD CALLDATALOAD PUSH1 0x5 SLOAD SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x1433 JUMPI DUP2 ISZERO PUSH2 0x1420 JUMPI PUSH1 0x20 SWAP4 POP DIV SWAP1 PUSH2 0x13E6 JUMP JUMPDEST PUSH1 0x12 DUP5 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x11 DUP5 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP5 DUP4 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP3 PUSH2 0x1464 PUSH2 0x1C7C JUMP JUMPDEST PUSH1 0x44 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP6 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP4 PUSH32 0xF7888AEC00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS SWAP1 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xB5C JUMPI PUSH0 SWAP3 PUSH2 0x14EB JUMPI JUMPDEST POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP DUP3 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1513 JUMPI JUMPDEST PUSH2 0x1503 DUP2 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x377 JUMPI MLOAD SWAP1 DUP4 PUSH2 0x14E4 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x14F9 JUMP JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x6 SLOAD DUP1 PUSH2 0x15EA JUMPI POP DUP1 MLOAD SWAP2 PUSH32 0x4F037EE700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0xB5C JUMPI PUSH0 SWAP1 PUSH2 0x15B7 JUMPI JUMPDEST PUSH1 0x20 SWAP3 POP SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E2 JUMPI JUMPDEST DUP2 PUSH2 0x15D1 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP2 MLOAD PUSH2 0x15AC JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x15C4 JUMP JUMPDEST PUSH1 0x20 SWAP3 POP SWAP1 PUSH2 0x13E6 JUMP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH8 0xDE0B6B3A7640000 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI CALLDATALOAD PUSH1 0x5 SSTORE STOP JUMPDEST CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI CALLER PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD SWAP1 SWAP2 SSTORE STOP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH2 0x1689 CALLDATASIZE PUSH2 0x1DAB JUMP JUMPDEST SWAP4 SWAP2 SWAP5 PUSH2 0x1694 PUSH2 0x2116 JUMP JUMPDEST MLOAD SWAP4 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP5 AND SWAP3 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI CALLDATALOAD PUSH1 0x6 SSTORE STOP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 PUSH2 0xE4B PUSH2 0x2181 JUMP JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 MLOAD SWAP2 PUSH32 0x7E361BDE00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH0 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xCF2 JUMPI PUSH0 SWAP2 PUSH2 0x178A JUMPI JUMPDEST PUSH2 0x286 SWAP3 POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1DED JUMP JUMPDEST SWAP1 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x179B DUP2 DUP5 PUSH2 0x1CF2 JUMP JUMPDEST DUP3 ADD SWAP1 DUP1 DUP4 DUP4 SUB SLT PUSH2 0x377 JUMPI DUP3 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP2 GT PUSH2 0x377 JUMPI DUP4 PUSH2 0x17C7 SWAP2 DUP4 ADD PUSH2 0x1FA3 JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP3 ADD MLOAD SWAP5 DUP6 GT PUSH2 0x377 JUMPI PUSH2 0x286 SWAP5 PUSH2 0x17E2 SWAP3 ADD PUSH2 0x1FA3 JUMP JUMPDEST POP PUSH2 0x1773 JUMP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE RETURN JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH17 0x1D6329F1C35CA4BFABB9F5610000000000 DUP2 MSTORE RETURN JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH2 0x1689 CALLDATASIZE PUSH2 0x1DAB JUMP JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH0 PUSH1 0x84 PUSH2 0x18AF CALLDATASIZE PUSH2 0x1DAB JUMP JUMPDEST DUP7 MLOAD PUSH32 0x15DACBEA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP9 DUP2 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x24 DUP10 ADD MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP9 ADD MSTORE PUSH1 0x64 DUP8 ADD MSTORE DUP6 SWAP3 DUP4 SWAP2 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xB5C JUMPI PUSH2 0xDCA JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 MLOAD SWAP2 PUSH32 0xE4DC2AA400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xCF2 JUMPI PUSH0 SWAP2 PUSH2 0x34A JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x377 JUMPI PUSH2 0x1A06 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x1D4B JUMP JUMPDEST SWAP1 PUSH2 0x1A3D PUSH2 0x1A20 PUSH2 0x1A16 DUP5 PUSH2 0x2053 JUMP JUMPDEST SWAP4 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1F5A JUMP JUMPDEST MLOAD PUSH8 0xDE0B6B3A7640000 PUSH2 0x1A36 PUSH1 0x44 CALLDATALOAD DUP7 PUSH2 0x2103 JUMP JUMPDEST DIV SWAP1 PUSH2 0x1F82 JUMP JUMPDEST SWAP2 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x1A51 JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x11 DUP4 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 PUSH2 0xD79 SWAP3 PUSH2 0x1A84 PUSH2 0x1C7C JUMP JUMPDEST DUP4 MLOAD PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 MLOAD PUSH1 0x3 SLOAD SWAP1 SWAP2 DUP3 PUSH0 PUSH2 0x1B05 DUP5 PUSH2 0x1F15 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 SWAP5 PUSH1 0x1 SWAP1 DUP7 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x1B92 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1B37 JUMPI JUMPDEST POP POP PUSH2 0x286 SWAP3 SWAP2 PUSH2 0xEA8 SWAP2 SUB DUP6 PUSH2 0x1CF2 JUMP JUMPDEST SWAP1 DUP6 SWAP3 POP PUSH1 0x3 PUSH0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP2 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x1B7A JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0xEA8 PUSH2 0x1B25 JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x1B64 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 DUP3 ADD MSTORE SWAP3 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD SWAP1 SWAP3 ADD SWAP3 POP DUP4 SWAP2 POP PUSH2 0xEA8 SWAP1 POP PUSH2 0x1B25 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x377 JUMPI PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP3 EQ DUP2 MSTORE RETURN JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x377 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x377 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1CDE JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1CDE JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1CDE JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x1D65 DUP2 PUSH2 0x1D33 JUMP JUMPDEST SWAP4 PUSH2 0x1D73 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x377 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1D9C JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1D8E JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x377 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x377 JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x377 JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1E0C JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1DFE JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1E3F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1E31 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x377 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1CDE JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1EBC PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND ADD DUP6 PUSH2 0x1CF2 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x377 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x1EE7 JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x1F43 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x1F2F JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x1F24 JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x377 JUMPI JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x1F6E JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x1F8F JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x377 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x1FBE DUP2 PUSH2 0x1D33 JUMP JUMPDEST SWAP4 PUSH2 0x1FCC PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x377 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1FF5 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1FE7 JUMP JUMPDEST SWAP1 PUSH2 0x200E DUP3 PUSH2 0x1D33 JUMP JUMPDEST PUSH2 0x201B PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x1CF2 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x2049 DUP3 SWAP5 PUSH2 0x1D33 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST PUSH0 SWAP1 DUP2 JUMPDEST DUP2 MLOAD DUP4 LT ISZERO PUSH2 0x207F JUMPI PUSH2 0x2077 PUSH1 0x1 SWAP2 PUSH2 0x2070 DUP6 DUP6 PUSH2 0x1F5A JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x1F82 JUMP JUMPDEST SWAP3 ADD SWAP2 PUSH2 0x2057 JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x377 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x20A0 DUP2 PUSH2 0x1D33 JUMP JUMPDEST SWAP4 PUSH2 0x20AE PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x377 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x20D7 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x377 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x20C9 JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x1F8F JUMPI JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x2155 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND ADDRESS EQ DUP1 PUSH2 0x2290 JUMPI JUMPDEST ISZERO PUSH2 0x21E9 JUMPI PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP3 MSTORE PUSH32 0x0 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1CDE JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST POP PUSH32 0x0 CHAINID EQ PUSH2 0x21C0 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x230D JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x22E5 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x22DB DUP4 PUSH2 0x1CC2 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH32 0xB3512B0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH0 SLOAD SWAP2 PUSH2 0x231F DUP4 PUSH2 0x1F15 JUMP JUMPDEST DUP1 DUP4 MSTORE SWAP3 PUSH1 0x20 SWAP1 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x23AB JUMPI POP PUSH1 0x1 EQ PUSH2 0x234D JUMPI JUMPDEST POP POP PUSH2 0x234A SWAP3 POP SUB DUP3 PUSH2 0x1CF2 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x2393 JUMPI POP PUSH2 0x234A SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x233C JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x2378 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 SWAP4 POP PUSH2 0x234A SWAP6 SWAP3 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP2 POP AND DUP3 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x233C JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x2410 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x22E5 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x22DB DUP4 PUSH2 0x1CC2 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD PUSH2 0x2425 DUP2 PUSH2 0x1F15 JUMP JUMPDEST DUP1 DUP5 MSTORE SWAP4 PUSH1 0x20 SWAP2 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x23AB JUMPI POP PUSH1 0x1 EQ PUSH2 0x244D JUMPI POP POP PUSH2 0x234A SWAP3 POP SUB DUP3 PUSH2 0x1CF2 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x2494 JUMPI POP PUSH2 0x234A SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x233C JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x2479 JUMP JUMPDEST SWAP2 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP5 GT PUSH2 0x253B JUMPI SWAP2 PUSH1 0x20 SWAP4 PUSH1 0x80 SWAP3 PUSH1 0xFF PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND DUP7 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE DUP3 DUP1 MSTORE PUSH1 0x1 GAS STATICCALL ISZERO PUSH2 0x2530 JUMPI PUSH0 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x2526 JUMPI SWAP1 PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 PUSH1 0x1 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP POP POP PUSH0 SWAP2 PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x1EE7 JUMPI DUP1 PUSH2 0x2558 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x2588 JUMPI PUSH32 0xF645EEDF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x25BC JUMPI POP PUSH32 0xFCE698F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x3 EQ PUSH2 0x25C6 JUMPI POP JUMP JUMPDEST PUSH32 0xD78BCE0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP3 PUSH17 0xFFDBAF10EA7F58C363D8BE9A2C4C00434 PUSH32 0xC566ABC9496FCFEB9B56B86D64736F6C634300081B0033000000000000000000 ","sourceMap":"757:3716:88:-:0;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;757:3716:88;;;;;;;;;;;;;-1:-1:-1;;;;;757:3716:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;757:3716:88;;3401:45:114;;;:::i;:::-;3393:53;;;;;3467:51;;;:::i;:::-;3456:62;;;;;757:3716:88;;;;;3542:22:114;3528:36;;;;757:3716:88;3591:25:114;;3574:42;;;;;;3644:13;3627:30;;757:3716:88;;4204:80:114;;;;2079:95;;;;;;;;757:3716:88;2079:95:114;;;3644:13;2079:95;;;;4278:4;3627:30;2079:95;;;3627:30;4204:80;;2079:95;757:3716:88;;;;;;;;;;;;;;4194:91:114;;2079:95;3667:48;4278:4;2079:95;3725:27;409:14:72;;;;;757:3716:88;;;;;;;;2265:18:57;757:3716:88;;;;;;;;;;;;;;-1:-1:-1;757:3716:88;;;;;;;;;;;;;;;-1:-1:-1;757:3716:88;;;;;;;;;;-1:-1:-1;757:3716:88;;;;-1:-1:-1;;;;757:3716:88;;;;;;;;;;;;;;;;;;;;2293:22:57;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;757:3716:88;;;;;;;;;;;;;;;;;;;1347:46:37;1350:10:88;;1347:46:37;;923:14:40;;;;;750::36;;;;465:4:50;1011:14:88;465:4:50;757:3716:88;;;;;;;;2079:95:114;757:3716:88;;;;;3627:30:114;757:3716:88;;;;;2079:95:114;757:3716:88;;;;;3528:36:114;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;757:3716:88;;;;;4204:80:114;;;;;;757:3716:88;;;-1:-1:-1;757:3716:88;;-1:-1:-1;757:3716:88;;-1:-1:-1;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;757:3716:88;;;;;;;;-1:-1:-1;757:3716:88;;-1:-1:-1;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;757:3716:88;;;;;;;;;;;;;;;;;;;;-1:-1:-1;757:3716:88;;;-1:-1:-1;757:3716:88;;;;;;;;;;;;-1:-1:-1;757:3716:88;;2293:22:57;757:3716:88;;-1:-1:-1;757:3716:88;;;;;-1:-1:-1;757:3716:88;;;;;4204:80:114;;;;;;757:3716:88;;;;-1:-1:-1;757:3716:88;;-1:-1:-1;757:3716:88;;-1:-1:-1;757:3716:88;;;;;;;;;;-1:-1:-1;757:3716:88;;;;;;;;;;;;;;;;-1:-1:-1;;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;757:3716:88;;-1:-1:-1;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;757:3716:88;;;;-1:-1:-1;757:3716:88;;;;;;;;;;;;;;;;-1:-1:-1;757:3716:88;;;;;-1:-1:-1;757:3716:88;;;;;;;;;-1:-1:-1;757:3716:88;;;;;;;-1:-1:-1;;757:3716:88;;;;-1:-1:-1;;;;;757:3716:88;;;;;;;;;;:::o;:::-;;;;;;;;;;;;-1:-1:-1;;;;;757:3716:88;;;;;;;;4204:80:114;757:3716:88;;-1:-1:-1;;757:3716:88;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;757:3716:88;;;;;;;;;;;;;;:::o;2914:340:110:-;757:3716:88;;3059:2:110;;3037:24;;;3059:2;;;757:3716:88;1854:2:110;757:3716:88;;1840:16:110;1836:72;;757:3716:88;;;;;2079:95:114;757:3716:88;;;;;;1949:36:110;;3077:27;:::o;757:3716:88:-;;;;;;;;;;1949:36:110;3077:27;:::o;1836:72::-;757:3716:88;;;;1879:18:110;;;;;;;;;;;;757:3716:88;;;;;;;;;;;;;;;;3432:13:114;757:3716:88;;;;;;1854:2:110;757:3716:88;-1:-1:-1;;757:3716:88;;;1879:18:110;;;;3033:215;757:3716:88;-1:-1:-1;;;;;757:3716:88;;;;3432:13:114;757:3716:88;;;;;;;;;;;;;;3033:215:110;757:3716:88;;;;;;;;;;;3033:215:110;757:3716:88;;;;;;;;;;;;;;;;3432:13:114;757:3716:88;;;;;;;;;;;;;;;;;3432:13:114;757:3716:88;1390:66:110;3195:42;:::o;757:3716:88:-;;;;-1:-1:-1;757:3716:88;;;;;4204:80:114;;;;;757:3716:88;;3432:13:114;757:3716:88;;;3432:13:114;757:3716:88;;3432:13:114;757:3716:88;;;;;;;;;;;;;;;;;;;;;3432:13:114;757:3716:88;1390:66:110;3195:42;:::o;757:3716:88:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;757:3716:88;;;;;;;3432:13:114;757:3716:88;;;;;3432:13:114;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;;;3432:13:114;757:3716:88;;;;;;;;;;;;;;2914:340:110;757:3716:88;;3059:2:110;;3037:24;;;3059:2;;;757:3716:88;1854:2:110;757:3716:88;;1840:16:110;1836:72;;757:3716:88;;;;;2079:95:114;757:3716:88;;;;;;1949:36:110;;3077:27;:::o;3033:215::-;757:3716:88;;;-1:-1:-1;;;;;757:3716:88;;;;;;;;;;;;;;;;;;3033:215:110;757:3716:88;;;;;;;;;;;3033:215:110;757:3716:88;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;757:3716:88;;;;;;;;;;;;;1390:66:110;;3195:42::o;757:3716:88:-;;;;-1:-1:-1;757:3716:88;;;;;4204:80:114;;;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1390:66:110;3195:42;:::o;757:3716:88:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":7327,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_16454":{"entryPoint":7292,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_addresst_addresst_uint256":{"entryPoint":7595,"id":null,"parameterSlots":1,"returnSlots":3},"abi_decode_array_contract_IERC20_dyn_fromMemory":{"entryPoint":8325,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn":{"entryPoint":7499,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn_fromMemory":{"entryPoint":8099,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":8013,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes":{"entryPoint":7785,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_address_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_array_contract_IERC20_dyn":{"entryPoint":7712,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":7661,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string":{"entryPoint":7225,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_and_zero_memory_array_array_uint256_dyn":{"entryPoint":8196,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_uint256_dyn":{"entryPoint":7475,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_uint256":{"entryPoint":8066,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256":{"entryPoint":8451,"id":null,"parameterSlots":2,"returnSlots":1},"external_fun_getMinimumInvariantRatio":{"entryPoint":7931,"id":null,"parameterSlots":0,"returnSlots":0},"extract_byte_array_length":{"entryPoint":7957,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":7410,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_22995":{"entryPoint":7362,"id":null,"parameterSlots":1,"returnSlots":0},"fun_computeInvariant":{"entryPoint":8275,"id":34240,"parameterSlots":1,"returnSlots":1},"fun_domainSeparatorV4":{"entryPoint":8577,"id":41960,"parameterSlots":0,"returnSlots":1},"fun_ensureOnlyVault":{"entryPoint":8470,"id":28148,"parameterSlots":0,"returnSlots":0},"fun_throwError":{"entryPoint":9542,"id":41836,"parameterSlots":2,"returnSlots":0},"fun_toStringWithFallback":{"entryPoint":8889,"id":41092,"parameterSlots":1,"returnSlots":1},"fun_toStringWithFallback_16464":{"entryPoint":9198,"id":41092,"parameterSlots":1,"returnSlots":1},"fun_tryRecover":{"entryPoint":9388,"id":41751,"parameterSlots":4,"returnSlots":3},"fun_useNonce":{"entryPoint":null,"id":40881,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_uint256_dyn":{"entryPoint":8026,"id":null,"parameterSlots":2,"returnSlots":1},"validator_assert_enum_TokenType":{"entryPoint":7901,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"5300":[{"length":32,"start":1683},{"length":32,"start":1834},{"length":32,"start":2346},{"length":32,"start":3175},{"length":32,"start":4498}],"5427":[{"length":32,"start":4080}],"28110":[{"length":32,"start":785},{"length":32,"start":1364},{"length":32,"start":2018},{"length":32,"start":3475},{"length":32,"start":3972},{"length":32,"start":5300},{"length":32,"start":5501},{"length":32,"start":5955},{"length":32,"start":6412},{"length":32,"start":6556},{"length":32,"start":8493}],"41858":[{"length":32,"start":8647}],"41860":[{"length":32,"start":8851}],"41862":[{"length":32,"start":8600}],"41864":[{"length":32,"start":8726}],"41866":[{"length":32,"start":8764}],"41869":[{"length":32,"start":4182}],"41872":[{"length":32,"start":4224}]},"linkReferences":{},"object":"6080604090808252600480361015610015575f80fd5b5f9160e05f35811c91826301ffc9a714611bd25750816306fdde0314611ae2578163095ea7b314611a6457816316a0b3e0146119d557816318160ddd1461194257816323b872dd1461189a57816323de665114611868578163273c1adf1461183d57816330adf81f14611803578163313ce567146117e8578163360c340f146116ea5781633644e515146116ce5781634cfe8d1a146116b65781635687f2b814611657578163627cdcb91461162e578163641579a614611616578163654cf15d146115f4578163679aefce1461151a57816370a082311461144657816372c981861461137c5781637ecebe001461133857816381fa807c1461113557816384b0196e1461103e578163851c1bb314610fa85781638d928af814610f5857816395d89b4114610e52578163984de9e814610e04578163a9059cbb14610cfb578163aa6ca80814610c0e578163ab68e28c14610b66578163abb1dc44146108cf578163b0e2e403146107b7578163b156aa0a146106d0578163b677fa56146106cb578163ce20ece7146106cb578163d335b0cf14610638578163d505accf1461038e57508063dd62ed3e146102955763e4c43663146101d0575f80fd5b3461028d5760a060031936011261028d576101e9611c7c565b5067ffffffffffffffff6024358181116102915761020a9036908401611d4b565b9260643582811161028d576102229036908501611d4b565b5060843591821161028a5750926102786102456102869361026396369101611e69565b916102508551612004565b8151968796608088526080880190611ded565b91604435602088015286830390870152611ded565b908382036060850152611c39565b0390f35b80fd5b5080fd5b8380fd5b50913461028d578060031936011261028d5760206102b1611c7c565b60646102bb611c9f565b9573ffffffffffffffffffffffffffffffffffffffff8080988751998a9687957f927da10500000000000000000000000000000000000000000000000000000000875230908701521660248501521660448301527f0000000000000000000000000000000000000000000000000000000000000000165afa918215610383579161034a575b6020925051908152f35b90506020823d60201161037b575b8161036560209383611cf2565b81010312610377576020915190610340565b5f80fd5b3d9150610358565b9051903d90823e3d90fd5b91939050346106345781600319360112610634576103aa611c7c565b916103b3611c9f565b90604435936064359160843560ff8116810361063057834211610605576104018373ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2080549060018201905590565b91865160208101917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9835273ffffffffffffffffffffffffffffffffffffffff9687871695868b850152888a1660608501528b608085015260a084015260c083015260c08252810181811067ffffffffffffffff8211176105f257926104de926104d59288958b52519020610494612181565b908a51917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015260c43591604260a43592206124ac565b90929192612546565b168181036105c5575050858495969761055060209651988996879586947fe1f21c67000000000000000000000000000000000000000000000000000000008652850160409194939294606082019573ffffffffffffffffffffffffffffffffffffffff80921683521660208201520152565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19081156105bc5750610586575080f35b6020813d6020116105b4575b8161059f60209383611cf2565b8101031261028d576105b090611f4d565b5080f35b3d9150610592565b513d84823e3d90fd5b7f4b800e460000000000000000000000000000000000000000000000000000000088528852602452604486fd5b60418c634e487b7160e01b5f525260245ffd5b602488858b7f6279130200000000000000000000000000000000000000000000000000000000835252fd5b8780fd5b8280fd5b5050913461028d578160031936011261028d578051927fb45090f9000000000000000000000000000000000000000000000000000000008452309084015260208360248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610383579161034a576020925051908152f35b611efb565b5050913461028d578160031936011261028d578051927f535cfd8a0000000000000000000000000000000000000000000000000000000084523090840152818360248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa91821561038357809261076f575b81516020808252819061028690820186611ded565b9091503d8082853e6107818185611cf2565b83019260208185031261028d5780519167ffffffffffffffff831161028a5750926107b0916102869401611fa3565b905f61075a565b505082346103775760206003193601126103775773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691815192813560208501526020845261081a84611cc2565b803b15610377576108895f9491859285519687809481937fc80882470000000000000000000000000000000000000000000000000000000083527f546573744576656e740000000000000000000000000000000000000000000000898401528960248401526044830190611c39565b03925af180156108c55761089b578380f35b9091925067ffffffffffffffff83116108b2575052005b604190634e487b7160e01b5f525260245ffd5b82513d5f823e3d90fd5b828534610377575f6003193601126103775780517f67e0e076000000000000000000000000000000000000000000000000000000008152308382015273ffffffffffffffffffffffffffffffffffffffff916024905f8383817f000000000000000000000000000000000000000000000000000000000000000088165afa938415610b5c575f955f945f945f97610a08575b5050509061098095949392918151968796608088526080880190611e20565b6020878203818901528080875193848152019601925f905b8382106109c457898803868b015289806102868b6109b68c8c611ded565b908382036060850152611ded565b91849899506060869798600193959783975180516109e181611edd565b83528685820151168584015201511515898201520198019201899897969594929391610998565b94509450945094503d805f853e610a1f8185611cf2565b8301926080818503126103775780519367ffffffffffffffff948581116103775781610a4c918401612085565b936020808401518781116103775784019083601f8301121561037757815192610a7484611d33565b99610a8188519b8c611cf2565b848b52828b019183606080970286010194878611610377579b9c9b8401925b858410610ae95750505050505050828201518581116103775781610ac5918401611fa3565b94606083015190811161037757610adc9201611fa3565b9194929193868080610961565b86849d9e9d890312610377578951908782018d811183821017610b4a578b528451906002821015610377578f91835286860151918216820361037757828792838b950152610b388d8801611f4d565b8d8201528152019301929c9b9c610aa0565b83604186634e487b7160e01b5f52525ffd5b50513d5f823e3d90fd5b8285346103775760a060031936011261037757610b81611c7c565b5067ffffffffffffffff60443581811161037757610ba29036908501611d4b565b9160643582811161037757610bba9036908601611d4b565b5060843591821161037757610278610bdb610c019561028694369101611e69565b91610be68551612004565b81519687966024358852608060208901526080880190611ded565b9186830390870152611ded565b828534610377575f600319360112610377578051917fca4f280300000000000000000000000000000000000000000000000000000000835230908301525f8260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610cf2575f91610cae575b610286925051918291602083526020830190611e20565b90503d805f843e610cbf8184611cf2565b8201916020818403126103775780519267ffffffffffffffff84116103775761028693610cec9201612085565b90610c97565b513d5f823e3d90fd5b8285346103775780600319360112610377576020610d7992610d1b611c7c565b83517fbeabacc80000000000000000000000000000000000000000000000000000000081523392810192835273ffffffffffffffffffffffffffffffffffffffff909116602083015260243560408301529384918291606090910190565b03815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610b5c57610dca575b6020905160018152f35b6020823d602011610dfc575b81610de360209383611cf2565b8101031261037757610df6602092611f4d565b50610dc0565b3d9150610dd6565b84833461037757816003193601126103775780359067ffffffffffffffff821161037757610e3491369101611d4b565b906002602435101561037757610e4b602092612053565b9051908152f35b848334610377575f60031936011261037757815191825f8354610e7481611f15565b90818452602095600191876001821691825f14610f13575050600114610eb7575b5050506102869291610ea8910385611cf2565b51928284938452830190611c39565b5f90815286935091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b828410610efb5750505082010181610ea8610286610e95565b8054848a018601528895508794909301928101610ee2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168782015293151560051b86019093019350849250610ea891506102869050610e95565b8434610377575f600319360112610377576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b8483346103775760206003193601126103775780357fffffffff00000000000000000000000000000000000000000000000000000000811680910361037757825160208101917f000000000000000000000000000000000000000000000000000000000000000083528482015260248152606081019281841067ffffffffffffffff8511176108b2575082602094525190208152f35b92505034610377575f6003193601126103775761107a7f00000000000000000000000000000000000000000000000000000000000000006122b9565b926110a47f00000000000000000000000000000000000000000000000000000000000000006123ee565b815192602084019084821067ffffffffffffffff8311176108b257509161111591610286949382525f845261110882519788977f0f0000000000000000000000000000000000000000000000000000000000000089528060208a0152880190611c39565b9186830390870152611c39565b904660608501523060808501525f60a085015283820360c0850152611ded565b92505034610377575f6003193601126103775782517ff29486a100000000000000000000000000000000000000000000000000000000815230828201526101a092838260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa93841561132e575f946111d9575b858560608282015191015182519182526020820152f35b909180939450813d8311611327575b6111f28183611cf2565b8101039281841261037757855194610140948587019167ffffffffffffffff918884108385111761131457608013610377576101c08801918211838310176108b25750875261124082611f4d565b815261124e60208301611f4d565b906101609182880152611262888401611f4d565b93610180948589015261127760608501611f4d565b9088015286526080820151602087015260a08201518787015260c082015160608701528382015164ffffffffff8116810361037757608087015261010090818301519063ffffffff8216820361037757611307956112fd9260a08a01526112f2610120986112e68a8801611f4d565b60c08c01528601611f4d565b908901528301611f4d565b9086015201611f4d565b908201525f8080806111c2565b604182634e487b7160e01b5f525260245ffd5b503d6111e8565b85513d5f823e3d90fd5b84346103775760206003193601126103775760209073ffffffffffffffffffffffffffffffffffffffff61136a611c7c565b165f5260028252805f20549051908152f35b84833461037757600319926020843601126103775781359367ffffffffffffffff851161037757843603011261037757828101356002811015610377576113c281611edd565b6113ec5750670de0b6b3a76400006113e36020936024600554910135612103565b04905b51908152f35b916024013560055490670de0b6b3a764000090818102918183041490151715611433578115611420576020935004906113e6565b601284634e487b7160e01b5f525260245ffd5b601184634e487b7160e01b5f525260245ffd5b84833461037757602091826003193601126103775782611464611c7c565b604473ffffffffffffffffffffffffffffffffffffffff9485855196879485937ff7888aec00000000000000000000000000000000000000000000000000000000855230908501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa918215610b5c575f926114eb575b5051908152f35b9091508281813d8311611513575b6115038183611cf2565b81010312610377575190836114e4565b503d6114f9565b828534610377575f60031936011261037757600654806115ea57508051917f4f037ee7000000000000000000000000000000000000000000000000000000008352309083015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610b5c575f906115b7575b602092509051908152f35b506020823d6020116115e2575b816115d160209383611cf2565b8101031261037757602091516115ac565b3d91506115c4565b60209250906113e6565b8434610377575f6003193601126103775760209051670de0b6b3a76400008152f35b82346103775760206003193601126103775735600555005b34610377575f60031936011261037757335f908152600260205260409020805460018101909155005b84346103775760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92561168936611dab565b939194611694612116565b5193845273ffffffffffffffffffffffffffffffffffffffff908116941692a3005b82346103775760206003193601126103775735600655005b8434610377575f60031936011261037757602090610e4b612181565b828534610377575f600319360112610377578051917f7e361bde00000000000000000000000000000000000000000000000000000000835230908301525f8260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610cf2575f9161178a575b610286925051918291602083526020830190611ded565b90503d805f843e61179b8184611cf2565b82019080838303126103775782519267ffffffffffffffff9384811161037757836117c7918301611fa3565b92602082015194851161037757610286946117e29201611fa3565b50611773565b8434610377575f600319360112610377576020905160128152f35b8434610377575f60031936011261037757602090517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b8434610377575f6003193601126103775760209051701d6329f1c35ca4bfabb9f56100000000008152f35b84346103775760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61168936611dab565b8285346103775760205f60846118af36611dab565b86517f15dacbea000000000000000000000000000000000000000000000000000000008152339881019890985273ffffffffffffffffffffffffffffffffffffffff928316602489015290821660448801526064870152859283917f0000000000000000000000000000000000000000000000000000000000000000165af18015610b5c57610dca576020905160018152f35b828534610377575f600319360112610377578051917fe4dc2aa4000000000000000000000000000000000000000000000000000000008352309083015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610cf2575f9161034a576020925051908152f35b82853461037757606060031936011261037757813567ffffffffffffffff811161037757611a069036908401611d4b565b90611a3d611a20611a1684612053565b9360243590611f5a565b51670de0b6b3a7640000611a3660443586612103565b0490611f82565b918203918211611a51576020925051908152f35b601183634e487b7160e01b5f525260245ffd5b8285346103775780600319360112610377576020610d7992611a84611c7c565b83517fe1f21c670000000000000000000000000000000000000000000000000000000081523392810192835273ffffffffffffffffffffffffffffffffffffffff909116602083015260243560408301529384918291606090910190565b8434610377575f6003193601126103775780516003549091825f611b0584611f15565b808352602094600190866001821691825f14611b92575050600114611b37575b50506102869291610ea8910385611cf2565b9085925060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f925b828410611b7a5750505082010181610ea8611b25565b8054848a018601528895508794909301928101611b64565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168682015292151560051b85019092019250839150610ea89050611b25565b83346103775760206003193601126103775735907fffffffff000000000000000000000000000000000000000000000000000000008216809203610377577f01ffc9a700000000000000000000000000000000000000000000000000000000602092148152f35b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361037757565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361037757565b6040810190811067ffffffffffffffff821117611cde57604052565b634e487b7160e01b5f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117611cde57604052565b67ffffffffffffffff8111611cde5760051b60200190565b9080601f83011215610377576020908235611d6581611d33565b93611d736040519586611cf2565b81855260208086019260051b82010192831161037757602001905b828210611d9c575050505090565b81358152908301908301611d8e565b60031960609101126103775773ffffffffffffffffffffffffffffffffffffffff90600435828116810361037757916024359081168103610377579060443590565b9081518082526020808093019301915f5b828110611e0c575050505090565b835185529381019392810192600101611dfe565b9081518082526020808093019301915f5b828110611e3f575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101611e31565b81601f820112156103775780359067ffffffffffffffff8211611cde5760405192611ebc60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160185611cf2565b8284526020838301011161037757815f926020809301838601378301015290565b60021115611ee757565b634e487b7160e01b5f52602160045260245ffd5b34610377575f6003193601126103775760206040515f8152f35b90600182811c92168015611f43575b6020831014611f2f57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611f24565b5190811515820361037757565b8051821015611f6e5760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b91908201809211611f8f57565b634e487b7160e01b5f52601160045260245ffd5b9080601f8301121561037757815190602091611fbe81611d33565b93611fcc6040519586611cf2565b81855260208086019260051b82010192831161037757602001905b828210611ff5575050505090565b81518152908301908301611fe7565b9061200e82611d33565b61201b6040519182611cf2565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06120498294611d33565b0190602036910137565b5f90815b815183101561207f576120776001916120708585611f5a565b5190611f82565b920191612057565b91505090565b9080601f83011215610377578151906020916120a081611d33565b936120ae6040519586611cf2565b81855260208086019260051b82010192831161037757602001905b8282106120d7575050505090565b815173ffffffffffffffffffffffffffffffffffffffff811681036103775781529083019083016120c9565b81810292918115918404141715611f8f57565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361215557565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016301480612290575b156121e9577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff821117611cde5760405251902090565b507f000000000000000000000000000000000000000000000000000000000000000046146121c0565b60ff811461230d5760ff811690601f82116122e557604051916122db83611cc2565b8252602082015290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040515f815f549161231f83611f15565b808352926020906001908181169081156123ab575060011461234d575b505061234a92500382611cf2565b90565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b828410612393575061234a9450505081016020015f8061233c565b85548785018301529485019486945092810192612378565b90506020935061234a9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f8061233c565b60ff81146124105760ff811690601f82116122e557604051916122db83611cc2565b506040515f8160019160015461242581611f15565b80845293602091600181169081156123ab575060011461244d57505061234a92500382611cf2565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b828410612494575061234a9450505081016020015f8061233c565b85548785018301529485019486945092810192612479565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161253b579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15612530575f5173ffffffffffffffffffffffffffffffffffffffff81161561252657905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b6004811015611ee75780612558575050565b60018103612588577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b600281036125bc57507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6003146125c65750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffdfea264697066735822122082700ffdbaf10ea7f58c363d8be9a2c4c004347fc566abc9496fcfeb9b56b86d64736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP2 PUSH1 0xE0 PUSH0 CALLDATALOAD DUP2 SHR SWAP2 DUP3 PUSH4 0x1FFC9A7 EQ PUSH2 0x1BD2 JUMPI POP DUP2 PUSH4 0x6FDDE03 EQ PUSH2 0x1AE2 JUMPI DUP2 PUSH4 0x95EA7B3 EQ PUSH2 0x1A64 JUMPI DUP2 PUSH4 0x16A0B3E0 EQ PUSH2 0x19D5 JUMPI DUP2 PUSH4 0x18160DDD EQ PUSH2 0x1942 JUMPI DUP2 PUSH4 0x23B872DD EQ PUSH2 0x189A JUMPI DUP2 PUSH4 0x23DE6651 EQ PUSH2 0x1868 JUMPI DUP2 PUSH4 0x273C1ADF EQ PUSH2 0x183D JUMPI DUP2 PUSH4 0x30ADF81F EQ PUSH2 0x1803 JUMPI DUP2 PUSH4 0x313CE567 EQ PUSH2 0x17E8 JUMPI DUP2 PUSH4 0x360C340F EQ PUSH2 0x16EA JUMPI DUP2 PUSH4 0x3644E515 EQ PUSH2 0x16CE JUMPI DUP2 PUSH4 0x4CFE8D1A EQ PUSH2 0x16B6 JUMPI DUP2 PUSH4 0x5687F2B8 EQ PUSH2 0x1657 JUMPI DUP2 PUSH4 0x627CDCB9 EQ PUSH2 0x162E JUMPI DUP2 PUSH4 0x641579A6 EQ PUSH2 0x1616 JUMPI DUP2 PUSH4 0x654CF15D EQ PUSH2 0x15F4 JUMPI DUP2 PUSH4 0x679AEFCE EQ PUSH2 0x151A JUMPI DUP2 PUSH4 0x70A08231 EQ PUSH2 0x1446 JUMPI DUP2 PUSH4 0x72C98186 EQ PUSH2 0x137C JUMPI DUP2 PUSH4 0x7ECEBE00 EQ PUSH2 0x1338 JUMPI DUP2 PUSH4 0x81FA807C EQ PUSH2 0x1135 JUMPI DUP2 PUSH4 0x84B0196E EQ PUSH2 0x103E JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0xFA8 JUMPI DUP2 PUSH4 0x8D928AF8 EQ PUSH2 0xF58 JUMPI DUP2 PUSH4 0x95D89B41 EQ PUSH2 0xE52 JUMPI DUP2 PUSH4 0x984DE9E8 EQ PUSH2 0xE04 JUMPI DUP2 PUSH4 0xA9059CBB EQ PUSH2 0xCFB JUMPI DUP2 PUSH4 0xAA6CA808 EQ PUSH2 0xC0E JUMPI DUP2 PUSH4 0xAB68E28C EQ PUSH2 0xB66 JUMPI DUP2 PUSH4 0xABB1DC44 EQ PUSH2 0x8CF JUMPI DUP2 PUSH4 0xB0E2E403 EQ PUSH2 0x7B7 JUMPI DUP2 PUSH4 0xB156AA0A EQ PUSH2 0x6D0 JUMPI DUP2 PUSH4 0xB677FA56 EQ PUSH2 0x6CB JUMPI DUP2 PUSH4 0xCE20ECE7 EQ PUSH2 0x6CB JUMPI DUP2 PUSH4 0xD335B0CF EQ PUSH2 0x638 JUMPI DUP2 PUSH4 0xD505ACCF EQ PUSH2 0x38E JUMPI POP DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x295 JUMPI PUSH4 0xE4C43663 EQ PUSH2 0x1D0 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x28D JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x28D JUMPI PUSH2 0x1E9 PUSH2 0x1C7C JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x291 JUMPI PUSH2 0x20A SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x1D4B JUMP JUMPDEST SWAP3 PUSH1 0x64 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x28D JUMPI PUSH2 0x222 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x1D4B JUMP JUMPDEST POP PUSH1 0x84 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x28A JUMPI POP SWAP3 PUSH2 0x278 PUSH2 0x245 PUSH2 0x286 SWAP4 PUSH2 0x263 SWAP7 CALLDATASIZE SWAP2 ADD PUSH2 0x1E69 JUMP JUMPDEST SWAP2 PUSH2 0x250 DUP6 MLOAD PUSH2 0x2004 JUMP JUMPDEST DUP2 MLOAD SWAP7 DUP8 SWAP7 PUSH1 0x80 DUP9 MSTORE PUSH1 0x80 DUP9 ADD SWAP1 PUSH2 0x1DED JUMP JUMPDEST SWAP2 PUSH1 0x44 CALLDATALOAD PUSH1 0x20 DUP9 ADD MSTORE DUP7 DUP4 SUB SWAP1 DUP8 ADD MSTORE PUSH2 0x1DED JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x1C39 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST DUP4 DUP1 REVERT JUMPDEST POP SWAP2 CALLVALUE PUSH2 0x28D JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x28D JUMPI PUSH1 0x20 PUSH2 0x2B1 PUSH2 0x1C7C JUMP JUMPDEST PUSH1 0x64 PUSH2 0x2BB PUSH2 0x1C9F JUMP JUMPDEST SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP1 SWAP9 DUP8 MLOAD SWAP10 DUP11 SWAP7 DUP8 SWAP6 PUSH32 0x927DA10500000000000000000000000000000000000000000000000000000000 DUP8 MSTORE ADDRESS SWAP1 DUP8 ADD MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE AND PUSH1 0x44 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x383 JUMPI SWAP2 PUSH2 0x34A JUMPI JUMPDEST PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x37B JUMPI JUMPDEST DUP2 PUSH2 0x365 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP2 MLOAD SWAP1 PUSH2 0x340 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x358 JUMP JUMPDEST SWAP1 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 POP CALLVALUE PUSH2 0x634 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x634 JUMPI PUSH2 0x3AA PUSH2 0x1C7C JUMP JUMPDEST SWAP2 PUSH2 0x3B3 PUSH2 0x1C9F JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP4 PUSH1 0x64 CALLDATALOAD SWAP2 PUSH1 0x84 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 SUB PUSH2 0x630 JUMPI DUP4 TIMESTAMP GT PUSH2 0x605 JUMPI PUSH2 0x401 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH1 0x1 DUP3 ADD SWAP1 SSTORE SWAP1 JUMP JUMPDEST SWAP2 DUP7 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP8 AND SWAP6 DUP7 DUP12 DUP6 ADD MSTORE DUP9 DUP11 AND PUSH1 0x60 DUP6 ADD MSTORE DUP12 PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 MSTORE DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x5F2 JUMPI SWAP3 PUSH2 0x4DE SWAP3 PUSH2 0x4D5 SWAP3 DUP9 SWAP6 DUP12 MSTORE MLOAD SWAP1 KECCAK256 PUSH2 0x494 PUSH2 0x2181 JUMP JUMPDEST SWAP1 DUP11 MLOAD SWAP2 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x2 DUP4 ADD MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0xC4 CALLDATALOAD SWAP2 PUSH1 0x42 PUSH1 0xA4 CALLDATALOAD SWAP3 KECCAK256 PUSH2 0x24AC JUMP JUMPDEST SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x2546 JUMP JUMPDEST AND DUP2 DUP2 SUB PUSH2 0x5C5 JUMPI POP POP DUP6 DUP5 SWAP6 SWAP7 SWAP8 PUSH2 0x550 PUSH1 0x20 SWAP7 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP7 MSTORE DUP6 ADD PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 SWAP5 PUSH1 0x60 DUP3 ADD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP4 MSTORE AND PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x5BC JUMPI POP PUSH2 0x586 JUMPI POP DUP1 RETURN JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x5B4 JUMPI JUMPDEST DUP2 PUSH2 0x59F PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x28D JUMPI PUSH2 0x5B0 SWAP1 PUSH2 0x1F4D JUMP JUMPDEST POP DUP1 RETURN JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x592 JUMP JUMPDEST MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0x4B800E4600000000000000000000000000000000000000000000000000000000 DUP9 MSTORE DUP9 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 DUP7 REVERT JUMPDEST PUSH1 0x41 DUP13 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x24 DUP9 DUP6 DUP12 PUSH32 0x6279130200000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST DUP8 DUP1 REVERT JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP POP SWAP2 CALLVALUE PUSH2 0x28D JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x28D JUMPI DUP1 MLOAD SWAP3 PUSH32 0xB45090F900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE ADDRESS SWAP1 DUP5 ADD MSTORE PUSH1 0x20 DUP4 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x383 JUMPI SWAP2 PUSH2 0x34A JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x1EFB JUMP JUMPDEST POP POP SWAP2 CALLVALUE PUSH2 0x28D JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x28D JUMPI DUP1 MLOAD SWAP3 PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE ADDRESS SWAP1 DUP5 ADD MSTORE DUP2 DUP4 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x383 JUMPI DUP1 SWAP3 PUSH2 0x76F JUMPI JUMPDEST DUP2 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 SWAP1 PUSH2 0x286 SWAP1 DUP3 ADD DUP7 PUSH2 0x1DED JUMP JUMPDEST SWAP1 SWAP2 POP RETURNDATASIZE DUP1 DUP3 DUP6 RETURNDATACOPY PUSH2 0x781 DUP2 DUP6 PUSH2 0x1CF2 JUMP JUMPDEST DUP4 ADD SWAP3 PUSH1 0x20 DUP2 DUP6 SUB SLT PUSH2 0x28D JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x28A JUMPI POP SWAP3 PUSH2 0x7B0 SWAP2 PUSH2 0x286 SWAP5 ADD PUSH2 0x1FA3 JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x75A JUMP JUMPDEST POP POP DUP3 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 DUP2 MLOAD SWAP3 DUP2 CALLDATALOAD PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x20 DUP5 MSTORE PUSH2 0x81A DUP5 PUSH2 0x1CC2 JUMP JUMPDEST DUP1 EXTCODESIZE ISZERO PUSH2 0x377 JUMPI PUSH2 0x889 PUSH0 SWAP5 SWAP2 DUP6 SWAP3 DUP6 MLOAD SWAP7 DUP8 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xC808824700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH32 0x546573744576656E740000000000000000000000000000000000000000000000 DUP10 DUP5 ADD MSTORE DUP10 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x1C39 JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x8C5 JUMPI PUSH2 0x89B JUMPI DUP4 DUP1 RETURN JUMPDEST SWAP1 SWAP2 SWAP3 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x8B2 JUMPI POP MSTORE STOP JUMPDEST PUSH1 0x41 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 MLOAD PUSH32 0x67E0E07600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x24 SWAP1 PUSH0 DUP4 DUP4 DUP2 PUSH32 0x0 DUP9 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0xB5C JUMPI PUSH0 SWAP6 PUSH0 SWAP5 PUSH0 SWAP5 PUSH0 SWAP8 PUSH2 0xA08 JUMPI JUMPDEST POP POP POP SWAP1 PUSH2 0x980 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP2 MLOAD SWAP7 DUP8 SWAP7 PUSH1 0x80 DUP9 MSTORE PUSH1 0x80 DUP9 ADD SWAP1 PUSH2 0x1E20 JUMP JUMPDEST PUSH1 0x20 DUP8 DUP3 SUB DUP2 DUP10 ADD MSTORE DUP1 DUP1 DUP8 MLOAD SWAP4 DUP5 DUP2 MSTORE ADD SWAP7 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x9C4 JUMPI DUP10 DUP9 SUB DUP7 DUP12 ADD MSTORE DUP10 DUP1 PUSH2 0x286 DUP12 PUSH2 0x9B6 DUP13 DUP13 PUSH2 0x1DED JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x1DED JUMP JUMPDEST SWAP2 DUP5 SWAP9 SWAP10 POP PUSH1 0x60 DUP7 SWAP8 SWAP9 PUSH1 0x1 SWAP4 SWAP6 SWAP8 DUP4 SWAP8 MLOAD DUP1 MLOAD PUSH2 0x9E1 DUP2 PUSH2 0x1EDD JUMP JUMPDEST DUP4 MSTORE DUP7 DUP6 DUP3 ADD MLOAD AND DUP6 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO DUP10 DUP3 ADD MSTORE ADD SWAP9 ADD SWAP3 ADD DUP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 PUSH2 0x998 JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP RETURNDATASIZE DUP1 PUSH0 DUP6 RETURNDATACOPY PUSH2 0xA1F DUP2 DUP6 PUSH2 0x1CF2 JUMP JUMPDEST DUP4 ADD SWAP3 PUSH1 0x80 DUP2 DUP6 SUB SLT PUSH2 0x377 JUMPI DUP1 MLOAD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP2 GT PUSH2 0x377 JUMPI DUP2 PUSH2 0xA4C SWAP2 DUP5 ADD PUSH2 0x2085 JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP1 DUP5 ADD MLOAD DUP8 DUP2 GT PUSH2 0x377 JUMPI DUP5 ADD SWAP1 DUP4 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x377 JUMPI DUP2 MLOAD SWAP3 PUSH2 0xA74 DUP5 PUSH2 0x1D33 JUMP JUMPDEST SWAP10 PUSH2 0xA81 DUP9 MLOAD SWAP12 DUP13 PUSH2 0x1CF2 JUMP JUMPDEST DUP5 DUP12 MSTORE DUP3 DUP12 ADD SWAP2 DUP4 PUSH1 0x60 DUP1 SWAP8 MUL DUP7 ADD ADD SWAP5 DUP8 DUP7 GT PUSH2 0x377 JUMPI SWAP12 SWAP13 SWAP12 DUP5 ADD SWAP3 JUMPDEST DUP6 DUP5 LT PUSH2 0xAE9 JUMPI POP POP POP POP POP POP POP DUP3 DUP3 ADD MLOAD DUP6 DUP2 GT PUSH2 0x377 JUMPI DUP2 PUSH2 0xAC5 SWAP2 DUP5 ADD PUSH2 0x1FA3 JUMP JUMPDEST SWAP5 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x377 JUMPI PUSH2 0xADC SWAP3 ADD PUSH2 0x1FA3 JUMP JUMPDEST SWAP2 SWAP5 SWAP3 SWAP2 SWAP4 DUP7 DUP1 DUP1 PUSH2 0x961 JUMP JUMPDEST DUP7 DUP5 SWAP14 SWAP15 SWAP14 DUP10 SUB SLT PUSH2 0x377 JUMPI DUP10 MLOAD SWAP1 DUP8 DUP3 ADD DUP14 DUP2 GT DUP4 DUP3 LT OR PUSH2 0xB4A JUMPI DUP12 MSTORE DUP5 MLOAD SWAP1 PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x377 JUMPI DUP16 SWAP2 DUP4 MSTORE DUP7 DUP7 ADD MLOAD SWAP2 DUP3 AND DUP3 SUB PUSH2 0x377 JUMPI DUP3 DUP8 SWAP3 DUP4 DUP12 SWAP6 ADD MSTORE PUSH2 0xB38 DUP14 DUP9 ADD PUSH2 0x1F4D JUMP JUMPDEST DUP14 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP4 ADD SWAP3 SWAP13 SWAP12 SWAP13 PUSH2 0xAA0 JUMP JUMPDEST DUP4 PUSH1 0x41 DUP7 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH2 0xB81 PUSH2 0x1C7C JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x377 JUMPI PUSH2 0xBA2 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x1D4B JUMP JUMPDEST SWAP2 PUSH1 0x64 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x377 JUMPI PUSH2 0xBBA SWAP1 CALLDATASIZE SWAP1 DUP7 ADD PUSH2 0x1D4B JUMP JUMPDEST POP PUSH1 0x84 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x377 JUMPI PUSH2 0x278 PUSH2 0xBDB PUSH2 0xC01 SWAP6 PUSH2 0x286 SWAP5 CALLDATASIZE SWAP2 ADD PUSH2 0x1E69 JUMP JUMPDEST SWAP2 PUSH2 0xBE6 DUP6 MLOAD PUSH2 0x2004 JUMP JUMPDEST DUP2 MLOAD SWAP7 DUP8 SWAP7 PUSH1 0x24 CALLDATALOAD DUP9 MSTORE PUSH1 0x80 PUSH1 0x20 DUP10 ADD MSTORE PUSH1 0x80 DUP9 ADD SWAP1 PUSH2 0x1DED JUMP JUMPDEST SWAP2 DUP7 DUP4 SUB SWAP1 DUP8 ADD MSTORE PUSH2 0x1DED JUMP JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 MLOAD SWAP2 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH0 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xCF2 JUMPI PUSH0 SWAP2 PUSH2 0xCAE JUMPI JUMPDEST PUSH2 0x286 SWAP3 POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1E20 JUMP JUMPDEST SWAP1 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0xCBF DUP2 DUP5 PUSH2 0x1CF2 JUMP JUMPDEST DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP5 SUB SLT PUSH2 0x377 JUMPI DUP1 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0x377 JUMPI PUSH2 0x286 SWAP4 PUSH2 0xCEC SWAP3 ADD PUSH2 0x2085 JUMP JUMPDEST SWAP1 PUSH2 0xC97 JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 PUSH2 0xD79 SWAP3 PUSH2 0xD1B PUSH2 0x1C7C JUMP JUMPDEST DUP4 MLOAD PUSH32 0xBEABACC800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xB5C JUMPI PUSH2 0xDCA JUMPI JUMPDEST PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xDFC JUMPI JUMPDEST DUP2 PUSH2 0xDE3 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x377 JUMPI PUSH2 0xDF6 PUSH1 0x20 SWAP3 PUSH2 0x1F4D JUMP JUMPDEST POP PUSH2 0xDC0 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xDD6 JUMP JUMPDEST DUP5 DUP4 CALLVALUE PUSH2 0x377 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x377 JUMPI PUSH2 0xE34 SWAP2 CALLDATASIZE SWAP2 ADD PUSH2 0x1D4B JUMP JUMPDEST SWAP1 PUSH1 0x2 PUSH1 0x24 CALLDATALOAD LT ISZERO PUSH2 0x377 JUMPI PUSH2 0xE4B PUSH1 0x20 SWAP3 PUSH2 0x2053 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP5 DUP4 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP2 MLOAD SWAP2 DUP3 PUSH0 DUP4 SLOAD PUSH2 0xE74 DUP2 PUSH2 0x1F15 JUMP JUMPDEST SWAP1 DUP2 DUP5 MSTORE PUSH1 0x20 SWAP6 PUSH1 0x1 SWAP2 DUP8 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0xF13 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xEB7 JUMPI JUMPDEST POP POP POP PUSH2 0x286 SWAP3 SWAP2 PUSH2 0xEA8 SWAP2 SUB DUP6 PUSH2 0x1CF2 JUMP JUMPDEST MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1C39 JUMP JUMPDEST PUSH0 SWAP1 DUP2 MSTORE DUP7 SWAP4 POP SWAP2 SWAP1 PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B JUMPDEST DUP3 DUP5 LT PUSH2 0xEFB JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0xEA8 PUSH2 0x286 PUSH2 0xE95 JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0xEE2 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 DUP3 ADD MSTORE SWAP4 ISZERO ISZERO PUSH1 0x5 SHL DUP7 ADD SWAP1 SWAP4 ADD SWAP4 POP DUP5 SWAP3 POP PUSH2 0xEA8 SWAP2 POP PUSH2 0x286 SWAP1 POP PUSH2 0xE95 JUMP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP5 DUP4 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x377 JUMPI DUP3 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 PUSH32 0x0 DUP4 MSTORE DUP5 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD SWAP3 DUP2 DUP5 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT OR PUSH2 0x8B2 JUMPI POP DUP3 PUSH1 0x20 SWAP5 MSTORE MLOAD SWAP1 KECCAK256 DUP2 MSTORE RETURN JUMPDEST SWAP3 POP POP CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH2 0x107A PUSH32 0x0 PUSH2 0x22B9 JUMP JUMPDEST SWAP3 PUSH2 0x10A4 PUSH32 0x0 PUSH2 0x23EE JUMP JUMPDEST DUP2 MLOAD SWAP3 PUSH1 0x20 DUP5 ADD SWAP1 DUP5 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x8B2 JUMPI POP SWAP2 PUSH2 0x1115 SWAP2 PUSH2 0x286 SWAP5 SWAP4 DUP3 MSTORE PUSH0 DUP5 MSTORE PUSH2 0x1108 DUP3 MLOAD SWAP8 DUP9 SWAP8 PUSH32 0xF00000000000000000000000000000000000000000000000000000000000000 DUP10 MSTORE DUP1 PUSH1 0x20 DUP11 ADD MSTORE DUP9 ADD SWAP1 PUSH2 0x1C39 JUMP JUMPDEST SWAP2 DUP7 DUP4 SUB SWAP1 DUP8 ADD MSTORE PUSH2 0x1C39 JUMP JUMPDEST SWAP1 CHAINID PUSH1 0x60 DUP6 ADD MSTORE ADDRESS PUSH1 0x80 DUP6 ADD MSTORE PUSH0 PUSH1 0xA0 DUP6 ADD MSTORE DUP4 DUP3 SUB PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x1DED JUMP JUMPDEST SWAP3 POP POP CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP3 MLOAD PUSH32 0xF29486A100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE PUSH2 0x1A0 SWAP3 DUP4 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x132E JUMPI PUSH0 SWAP5 PUSH2 0x11D9 JUMPI JUMPDEST DUP6 DUP6 PUSH1 0x60 DUP3 DUP3 ADD MLOAD SWAP2 ADD MLOAD DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST SWAP1 SWAP2 DUP1 SWAP4 SWAP5 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1327 JUMPI JUMPDEST PUSH2 0x11F2 DUP2 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SWAP3 DUP2 DUP5 SLT PUSH2 0x377 JUMPI DUP6 MLOAD SWAP5 PUSH2 0x140 SWAP5 DUP6 DUP8 ADD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP9 DUP5 LT DUP4 DUP6 GT OR PUSH2 0x1314 JUMPI PUSH1 0x80 SGT PUSH2 0x377 JUMPI PUSH2 0x1C0 DUP9 ADD SWAP2 DUP3 GT DUP4 DUP4 LT OR PUSH2 0x8B2 JUMPI POP DUP8 MSTORE PUSH2 0x1240 DUP3 PUSH2 0x1F4D JUMP JUMPDEST DUP2 MSTORE PUSH2 0x124E PUSH1 0x20 DUP4 ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP1 PUSH2 0x160 SWAP2 DUP3 DUP9 ADD MSTORE PUSH2 0x1262 DUP9 DUP5 ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP4 PUSH2 0x180 SWAP5 DUP6 DUP10 ADD MSTORE PUSH2 0x1277 PUSH1 0x60 DUP6 ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP1 DUP9 ADD MSTORE DUP7 MSTORE PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0xA0 DUP3 ADD MLOAD DUP8 DUP8 ADD MSTORE PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x60 DUP8 ADD MSTORE DUP4 DUP3 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x377 JUMPI PUSH1 0x80 DUP8 ADD MSTORE PUSH2 0x100 SWAP1 DUP2 DUP4 ADD MLOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x377 JUMPI PUSH2 0x1307 SWAP6 PUSH2 0x12FD SWAP3 PUSH1 0xA0 DUP11 ADD MSTORE PUSH2 0x12F2 PUSH2 0x120 SWAP9 PUSH2 0x12E6 DUP11 DUP9 ADD PUSH2 0x1F4D JUMP JUMPDEST PUSH1 0xC0 DUP13 ADD MSTORE DUP7 ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP1 DUP10 ADD MSTORE DUP4 ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP1 DUP7 ADD MSTORE ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH0 DUP1 DUP1 DUP1 PUSH2 0x11C2 JUMP JUMPDEST PUSH1 0x41 DUP3 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x11E8 JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x136A PUSH2 0x1C7C JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP5 DUP4 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x3 NOT SWAP3 PUSH1 0x20 DUP5 CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP2 CALLDATALOAD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT PUSH2 0x377 JUMPI DUP5 CALLDATASIZE SUB ADD SLT PUSH2 0x377 JUMPI DUP3 DUP2 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x377 JUMPI PUSH2 0x13C2 DUP2 PUSH2 0x1EDD JUMP JUMPDEST PUSH2 0x13EC JUMPI POP PUSH8 0xDE0B6B3A7640000 PUSH2 0x13E3 PUSH1 0x20 SWAP4 PUSH1 0x24 PUSH1 0x5 SLOAD SWAP2 ADD CALLDATALOAD PUSH2 0x2103 JUMP JUMPDEST DIV SWAP1 JUMPDEST MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP2 PUSH1 0x24 ADD CALLDATALOAD PUSH1 0x5 SLOAD SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x1433 JUMPI DUP2 ISZERO PUSH2 0x1420 JUMPI PUSH1 0x20 SWAP4 POP DIV SWAP1 PUSH2 0x13E6 JUMP JUMPDEST PUSH1 0x12 DUP5 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x11 DUP5 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP5 DUP4 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP3 PUSH2 0x1464 PUSH2 0x1C7C JUMP JUMPDEST PUSH1 0x44 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP6 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP4 PUSH32 0xF7888AEC00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS SWAP1 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xB5C JUMPI PUSH0 SWAP3 PUSH2 0x14EB JUMPI JUMPDEST POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP DUP3 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1513 JUMPI JUMPDEST PUSH2 0x1503 DUP2 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x377 JUMPI MLOAD SWAP1 DUP4 PUSH2 0x14E4 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x14F9 JUMP JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x6 SLOAD DUP1 PUSH2 0x15EA JUMPI POP DUP1 MLOAD SWAP2 PUSH32 0x4F037EE700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0xB5C JUMPI PUSH0 SWAP1 PUSH2 0x15B7 JUMPI JUMPDEST PUSH1 0x20 SWAP3 POP SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E2 JUMPI JUMPDEST DUP2 PUSH2 0x15D1 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP2 MLOAD PUSH2 0x15AC JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x15C4 JUMP JUMPDEST PUSH1 0x20 SWAP3 POP SWAP1 PUSH2 0x13E6 JUMP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH8 0xDE0B6B3A7640000 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI CALLDATALOAD PUSH1 0x5 SSTORE STOP JUMPDEST CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI CALLER PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD SWAP1 SWAP2 SSTORE STOP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH2 0x1689 CALLDATASIZE PUSH2 0x1DAB JUMP JUMPDEST SWAP4 SWAP2 SWAP5 PUSH2 0x1694 PUSH2 0x2116 JUMP JUMPDEST MLOAD SWAP4 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP5 AND SWAP3 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI CALLDATALOAD PUSH1 0x6 SSTORE STOP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 PUSH2 0xE4B PUSH2 0x2181 JUMP JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 MLOAD SWAP2 PUSH32 0x7E361BDE00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH0 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xCF2 JUMPI PUSH0 SWAP2 PUSH2 0x178A JUMPI JUMPDEST PUSH2 0x286 SWAP3 POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1DED JUMP JUMPDEST SWAP1 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x179B DUP2 DUP5 PUSH2 0x1CF2 JUMP JUMPDEST DUP3 ADD SWAP1 DUP1 DUP4 DUP4 SUB SLT PUSH2 0x377 JUMPI DUP3 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP2 GT PUSH2 0x377 JUMPI DUP4 PUSH2 0x17C7 SWAP2 DUP4 ADD PUSH2 0x1FA3 JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP3 ADD MLOAD SWAP5 DUP6 GT PUSH2 0x377 JUMPI PUSH2 0x286 SWAP5 PUSH2 0x17E2 SWAP3 ADD PUSH2 0x1FA3 JUMP JUMPDEST POP PUSH2 0x1773 JUMP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE RETURN JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH17 0x1D6329F1C35CA4BFABB9F5610000000000 DUP2 MSTORE RETURN JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH2 0x1689 CALLDATASIZE PUSH2 0x1DAB JUMP JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH0 PUSH1 0x84 PUSH2 0x18AF CALLDATASIZE PUSH2 0x1DAB JUMP JUMPDEST DUP7 MLOAD PUSH32 0x15DACBEA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP9 DUP2 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x24 DUP10 ADD MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP9 ADD MSTORE PUSH1 0x64 DUP8 ADD MSTORE DUP6 SWAP3 DUP4 SWAP2 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xB5C JUMPI PUSH2 0xDCA JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 MLOAD SWAP2 PUSH32 0xE4DC2AA400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xCF2 JUMPI PUSH0 SWAP2 PUSH2 0x34A JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x377 JUMPI PUSH2 0x1A06 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x1D4B JUMP JUMPDEST SWAP1 PUSH2 0x1A3D PUSH2 0x1A20 PUSH2 0x1A16 DUP5 PUSH2 0x2053 JUMP JUMPDEST SWAP4 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1F5A JUMP JUMPDEST MLOAD PUSH8 0xDE0B6B3A7640000 PUSH2 0x1A36 PUSH1 0x44 CALLDATALOAD DUP7 PUSH2 0x2103 JUMP JUMPDEST DIV SWAP1 PUSH2 0x1F82 JUMP JUMPDEST SWAP2 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x1A51 JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x11 DUP4 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 PUSH2 0xD79 SWAP3 PUSH2 0x1A84 PUSH2 0x1C7C JUMP JUMPDEST DUP4 MLOAD PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 MLOAD PUSH1 0x3 SLOAD SWAP1 SWAP2 DUP3 PUSH0 PUSH2 0x1B05 DUP5 PUSH2 0x1F15 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 SWAP5 PUSH1 0x1 SWAP1 DUP7 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x1B92 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1B37 JUMPI JUMPDEST POP POP PUSH2 0x286 SWAP3 SWAP2 PUSH2 0xEA8 SWAP2 SUB DUP6 PUSH2 0x1CF2 JUMP JUMPDEST SWAP1 DUP6 SWAP3 POP PUSH1 0x3 PUSH0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP2 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x1B7A JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0xEA8 PUSH2 0x1B25 JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x1B64 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 DUP3 ADD MSTORE SWAP3 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD SWAP1 SWAP3 ADD SWAP3 POP DUP4 SWAP2 POP PUSH2 0xEA8 SWAP1 POP PUSH2 0x1B25 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x377 JUMPI PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP3 EQ DUP2 MSTORE RETURN JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x377 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x377 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1CDE JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1CDE JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1CDE JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x1D65 DUP2 PUSH2 0x1D33 JUMP JUMPDEST SWAP4 PUSH2 0x1D73 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x377 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1D9C JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1D8E JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x377 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x377 JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x377 JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1E0C JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1DFE JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1E3F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1E31 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x377 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1CDE JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1EBC PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND ADD DUP6 PUSH2 0x1CF2 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x377 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x1EE7 JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x1F43 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x1F2F JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x1F24 JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x377 JUMPI JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x1F6E JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x1F8F JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x377 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x1FBE DUP2 PUSH2 0x1D33 JUMP JUMPDEST SWAP4 PUSH2 0x1FCC PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x377 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1FF5 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1FE7 JUMP JUMPDEST SWAP1 PUSH2 0x200E DUP3 PUSH2 0x1D33 JUMP JUMPDEST PUSH2 0x201B PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x1CF2 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x2049 DUP3 SWAP5 PUSH2 0x1D33 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST PUSH0 SWAP1 DUP2 JUMPDEST DUP2 MLOAD DUP4 LT ISZERO PUSH2 0x207F JUMPI PUSH2 0x2077 PUSH1 0x1 SWAP2 PUSH2 0x2070 DUP6 DUP6 PUSH2 0x1F5A JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x1F82 JUMP JUMPDEST SWAP3 ADD SWAP2 PUSH2 0x2057 JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x377 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x20A0 DUP2 PUSH2 0x1D33 JUMP JUMPDEST SWAP4 PUSH2 0x20AE PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x377 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x20D7 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x377 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x20C9 JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x1F8F JUMPI JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x2155 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND ADDRESS EQ DUP1 PUSH2 0x2290 JUMPI JUMPDEST ISZERO PUSH2 0x21E9 JUMPI PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP3 MSTORE PUSH32 0x0 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1CDE JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST POP PUSH32 0x0 CHAINID EQ PUSH2 0x21C0 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x230D JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x22E5 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x22DB DUP4 PUSH2 0x1CC2 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH32 0xB3512B0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH0 SLOAD SWAP2 PUSH2 0x231F DUP4 PUSH2 0x1F15 JUMP JUMPDEST DUP1 DUP4 MSTORE SWAP3 PUSH1 0x20 SWAP1 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x23AB JUMPI POP PUSH1 0x1 EQ PUSH2 0x234D JUMPI JUMPDEST POP POP PUSH2 0x234A SWAP3 POP SUB DUP3 PUSH2 0x1CF2 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x2393 JUMPI POP PUSH2 0x234A SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x233C JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x2378 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 SWAP4 POP PUSH2 0x234A SWAP6 SWAP3 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP2 POP AND DUP3 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x233C JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x2410 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x22E5 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x22DB DUP4 PUSH2 0x1CC2 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD PUSH2 0x2425 DUP2 PUSH2 0x1F15 JUMP JUMPDEST DUP1 DUP5 MSTORE SWAP4 PUSH1 0x20 SWAP2 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x23AB JUMPI POP PUSH1 0x1 EQ PUSH2 0x244D JUMPI POP POP PUSH2 0x234A SWAP3 POP SUB DUP3 PUSH2 0x1CF2 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x2494 JUMPI POP PUSH2 0x234A SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x233C JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x2479 JUMP JUMPDEST SWAP2 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP5 GT PUSH2 0x253B JUMPI SWAP2 PUSH1 0x20 SWAP4 PUSH1 0x80 SWAP3 PUSH1 0xFF PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND DUP7 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE DUP3 DUP1 MSTORE PUSH1 0x1 GAS STATICCALL ISZERO PUSH2 0x2530 JUMPI PUSH0 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x2526 JUMPI SWAP1 PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 PUSH1 0x1 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP POP POP PUSH0 SWAP2 PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x1EE7 JUMPI DUP1 PUSH2 0x2558 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x2588 JUMPI PUSH32 0xF645EEDF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x25BC JUMPI POP PUSH32 0xFCE698F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x3 EQ PUSH2 0x25C6 JUMPI POP JUMP JUMPDEST PUSH32 0xD78BCE0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP3 PUSH17 0xFFDBAF10EA7F58C363D8BE9A2C4C00434 PUSH32 0xC566ABC9496FCFEB9B56B86D64736F6C634300081B0033000000000000000000 ","sourceMap":"757:3716:88:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2839:33:57;757:3716:88;2839:33:57;;;4124:49;757:3716:88;4124:49:57;;;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1615:50:36;757:3716:88;1615:50:36;;;757:3716:88;;;;;;;;;;;;;;;;;;-1:-1:-1;;757:3716:88;;;;;;;:::i;:::-;-1:-1:-1;757:3716:88;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2883:42;757:3716;;2883:42;:::i;:::-;757:3716;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;757:3716:88;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;3545:47:57;;;;;757:3716:88;3545:47:57;;3570:4;3545:47;;;757:3716:88;;;;;;;;;;;3545:6:57;757:3716:88;3545:47:57;;;;;;;;;;757:3716:88;;;;;;;;;3545:47:57;;;757:3716:88;3545:47:57;;757:3716:88;3545:47:57;;;;;;757:3716:88;3545:47:57;;;:::i;:::-;;;757:3716:88;;;;;;;3545:47:57;;;757:3716:88;;;;3545:47:57;;;-1:-1:-1;3545:47:57;;;757:3716:88;;;;;;;;;;;;;;;;;;;-1:-1:-1;;757:3716:88;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;5510:15:57;;:26;5506:97;;5696:16;;757:3716:88;;-1:-1:-1;757:3716:88;1121:7:109;757:3716:88;;;-1:-1:-1;757:3716:88;;;;;;;;;759:395:109;;5696:16:57;757:3716:88;;;;5644:79:57;;757:3716:88;1443:95:57;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5644:79:57;;757:3716:88;;;;;;;;;;;;7021:8:113;757:3716:88;6967:25:113;757:3716:88;;;;;;5634:90:57;;5053:20:114;;:::i;:::-;3515:233:115;;;;;;;;;;;;;;;757:3716:88;;;3515:233:115;757:3716:88;;3515:233:115;;6967:25:113;:::i;:::-;7021:8;;;;;:::i;:::-;757:3716:88;5848:15:57;;;5844:88;;757:3716:88;;;;;;;5942:38:57;757:3716:88;;;5942:38:57;;;;;;;757:3716:88;5942:38:57;;;;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;;5942:38:57;;:6;;757:3716:88;5942:38:57;;;;;;;;;;757:3716:88;;;5942:38:57;757:3716:88;5942:38:57;;757:3716:88;5942:38:57;;;;;;757:3716:88;5942:38:57;;;:::i;:::-;;;757:3716:88;;;;;;;:::i;:::-;;;;5942:38:57;;;-1:-1:-1;5942:38:57;;;757:3716:88;;;;;;;;5844:88:57;5886:35;;;757:3716:88;;;;;5886:35:57;;757:3716:88;;;-1:-1:-1;;;757:3716:88;;;;;;5506:97:57;757:3716:88;5559:33:57;;;;;;757:3716:88;5559:33:57;757:3716:88;;;;;;;;;;;;;;;;-1:-1:-1;;757:3716:88;;;;;;;1615:50:36;757:3716:88;1615:50:36;;1658:4;1615:50;;;757:3716:88;1615:50:36;:6;757:3716:88;1615:6:36;757:3716:88;1615:6:36;757:3716:88;1615:50:36;;;;;;;;;;;757:3716:88;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;757:3716:88;;;;;;;1441:44:36;757:3716:88;1441:44:36;;1479:4;1441:44;;;757:3716:88;1441:6:36;;757:3716:88;1441:6:36;757:3716:88;1441:6:36;757:3716:88;1441:44:36;;;;;;;;;;;757:3716:88;;;;;;;;;;;;;;;:::i;1441:44:36:-;;;;;;;;;;;;;:::i;:::-;;;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1441:44:36;;;;757:3716:88;;;;;;;;-1:-1:-1;;757:3716:88;;;;;;3398:6;757:3716;;;;;;;;3437:21;;757:3716;;3437:21;;;;;:::i;:::-;3398:61;;;;;757:3716;;;;;;;;3398:61;;;;;;757:3716;3398:61;;757:3716;3398:61;;;757:3716;;;;;;;;;;;:::i;:::-;3398:61;;;;;;;;;;757:3716;;;3398:61;757:3716;;;;;;;;;-1:-1:-1;757:3716:88;;;;;-1:-1:-1;;;757:3716:88;;;;;;3398:61;757:3716;;;;;;;;;;;;;;;;-1:-1:-1;;757:3716:88;;;;;;;;1247:38:36;;1279:4;1247:38;;;757:3716:88;;;;;;;;;1247:6:36;757:3716:88;;1247:38:36;;;;;;;757:3716:88;;;;;;;1247:38:36;;;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1247:38:36;;;;;;;;;;;757:3716:88;1247:38:36;;;;;;:::i;:::-;;;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;1247:38:36;;;;;;;;;;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;757:3716:88;;;;;1247:38:36;757:3716:88;;;;;;;;;;;;;;;;-1:-1:-1;;757:3716:88;;;;;;;:::i;:::-;-1:-1:-1;757:3716:88;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;3274:35;757:3716;;3274:35;:::i;:::-;757:3716;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;757:3716:88;;;;;;;892:35:36;757:3716:88;892:35:36;;921:4;892:35;;;757:3716:88;;892:6:36;757:3716:88;892:6:36;757:3716:88;892:6:36;757:3716:88;892:35:36;;;;;;;757:3716:88;892:35:36;;;757:3716:88;;;;;;;;;;;;;;;;:::i;892:35:36:-;;;;;757:3716:88;892:35:36;;;;;;:::i;:::-;;;757:3716:88;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;892:35:36;;;;757:3716:88;;;;;;;;;;;;;;;-1:-1:-1;;757:3716:88;;;;;;3345:39:57;757:3716:88;;;:::i;:::-;;;;3345:39:57;;3361:10;3345:39;;;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;3345:39:57;;:6;757:3716:88;;3345:6:57;757:3716:88;3345:39:57;;;;;;;;757:3716:88;;;;;;;;3345:39:57;757:3716:88;3345:39:57;;757:3716:88;3345:39:57;;;;;;757:3716:88;3345:39:57;;;:::i;:::-;;;757:3716:88;;;;;;;;:::i;:::-;3345:39:57;;;;;;-1:-1:-1;3345:39:57;;757:3716:88;;;;;;;-1:-1:-1;;757:3716:88;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;757:3716:88;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;757:3716:88;;;;;;;;;-1:-1:-1;;;757:3716:88;;;;;;;;;;;;;;;;;;;-1:-1:-1;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;757:3716:88;;-1:-1:-1;757:3716:88;;-1:-1:-1;757:3716:88;;-1:-1:-1;757:3716:88;;;;;;;;-1:-1:-1;;757:3716:88;;;;;;;;;2951:6:57;757:3716:88;;;;;;;;;;;-1:-1:-1;;757:3716:88;;;;;;;;;;;;;;;;;;2303:50:37;;2320:22;;757:3716:88;;;;;;2303:50:37;;;757:3716:88;;;;;;;;;;;;;;;;;;;2293:61:37;;757:3716:88;;;;;;;;;;;-1:-1:-1;;757:3716:88;;;;;6099:41:114;:5;:41;:::i;:::-;6554:8;:47;:8;:47;:::i;:::-;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;5590:13:114;;757:3716:88;;;;5625:4:114;757:3716:88;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;757:3716:88;;;;;;;;1911:35:36;;1940:4;1911:35;;;757:3716:88;1911:35:36;:6;;;757:3716:88;1911:6:36;757:3716:88;1911:6:36;757:3716:88;1911:35:36;;;;;;;757:3716:88;1911:35:36;;;757:3716:88;1986:37:36;;2063:38;1986:37;;;757:3716:88;2063:38:36;;757:3716:88;;;;;;;;;;;1911:35:36;;;;;;;;;;;;;;;;;;:::i;:::-;;;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;757:3716:88;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;1911:35:36;;;;;;757:3716:88;;;-1:-1:-1;;;757:3716:88;;;;;;1911:35:36;;;;;;757:3716:88;;;;;;;;;;;;;;;-1:-1:-1;;757:3716:88;;;;;;;;;;:::i;:::-;;;;624:7:109;757:3716:88;;;;;;;;;;;;;;;;;;-1:-1:-1;;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2368:32;;757:3716;465:4:50;838:5;757:3716:88;;2419:26;2454:11;757:3716;2419:26;;757:3716;838:5:50;:::i;:::-;757:3716:88;2368:164;;757:3716;;;;;2368:164;2485:26;;;757:3716;2520:11;757:3716;465:4:50;;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;2368:164;;;757:3716;;;-1:-1:-1;;;757:3716:88;;;2485:26;757:3716;;;;;-1:-1:-1;;;757:3716:88;;;2485:26;757:3716;;;;;;;;;;;-1:-1:-1;;757:3716:88;;;;;;;;:::i;:::-;;;;;;;3082:40:57;;;;;757:3716:88;3082:40:57;;3107:4;3082:40;;;757:3716:88;;;;;;3082:6:57;757:3716:88;3082:40:57;;;;;;;757:3716:88;3082:40:57;;;757:3716:88;;;;;;;3082:40:57;;;;;;;;;;;;;;;;;:::i;:::-;;;757:3716:88;;;;;3082:40:57;;;;;;;;;757:3716:88;;;;;;;-1:-1:-1;;757:3716:88;;;;;4420:9;757:3716;4420:14;;;757:3716;;;6973:36:57;757:3716:88;6973:36:57;;7003:4;6973:36;;;757:3716:88;6973:36:57;2951:6;757:3716:88;2951:6:57;757:3716:88;2951:6:57;757:3716:88;6973:36:57;;;;;;757:3716:88;6973:36:57;;;4420:44:88;757:3716;4420:44;;;757:3716;;;;;6973:36:57;;;;;;;;;;;;;;;;:::i;:::-;;;757:3716:88;;;;;;;6973:36:57;;;;;-1:-1:-1;6973:36:57;;4420:44:88;757:3716;4420:44;;;;;757:3716;;;;;;-1:-1:-1;;757:3716:88;;;;;;;;465:4:50;757:3716:88;;;;;;;;;-1:-1:-1;;757:3716:88;;;;;;2193:27;757:3716;;;;;;;-1:-1:-1;;757:3716:88;;;;;6339:10:57;-1:-1:-1;757:3716:88;;;1121:7:109;757:3716:88;;;;;;;;;;;;;;;;;;;;5175:32:57;757:3716:88;;;:::i;:::-;436:67:72;;;;;:::i;:::-;757:3716:88;;;;;;;;;;;5175:32:57;757:3716:88;;;;;;;-1:-1:-1;;757:3716:88;;;;;;4312:20;757:3716;;;;;;;;-1:-1:-1;;757:3716:88;;;;;;6533:20:57;;;:::i;757:3716:88:-;;;;;;;-1:-1:-1;;757:3716:88;;;;;;;3683:39;757:3716;3683:39;;3716:4;3683:39;;;757:3716;;3683:6;757:3716;3683:6;757:3716;3683:6;757:3716;3683:39;;;;;;;757:3716;;3683:39;;757:3716;;;;;;;;;;;;;;;;:::i;3683:39::-;;;;;757:3716;3683:39;;;;;;:::i;:::-;;;757:3716;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;3683:39;;;757:3716;;;;;;-1:-1:-1;;757:3716:88;;;;;;;;2727:2:57;757:3716:88;;;;;;;;;-1:-1:-1;;757:3716:88;;;;;;;;1443:95:57;757:3716:88;;;;;;;;;-1:-1:-1;;757:3716:88;;;;;;;;4188:4;757:3716;;;;;;;;;4942:26:57;757:3716:88;;;:::i;:::-;;;;;;4124:49:57;757:3716:88;;;;;:::i;:::-;;;;4124:49:57;;4144:10;4124:49;;;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;;;;;4124:6:57;757:3716:88;4124:49:57;;;;;;;;;757:3716:88;;4190:4:57;757:3716:88;;;;;;;;;;-1:-1:-1;;757:3716:88;;;;;;;2839:33:57;757:3716:88;2839:33:57;;2866:4;2839:33;;;757:3716:88;2839:33:57;:6;757:3716:88;2839:6:57;757:3716:88;2839:6:57;757:3716:88;2839:33:57;;;;;;;757:3716:88;2839:33:57;;;;757:3716:88;;;;;;;;;;;;;;-1:-1:-1;;757:3716:88;;;;;;;;;;;;;;;;;;;:::i;:::-;1979:47;2044:58;:22;1979:47;;;:::i;:::-;757:3716;;;2044:22;;:::i;:::-;757:3716;465:4:50;838:5;757:3716:88;;838:5:50;;:::i;:::-;757:3716:88;2044:58;;:::i;:::-;757:3716;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;757:3716:88;;;;;;;;;;;;;-1:-1:-1;;757:3716:88;;;;;;3819:43:57;757:3716:88;;;:::i;:::-;;;;3819:43:57;;3834:10;3819:43;;;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;757:3716:88;;;;;;;2434:8:57;757:3716:88;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;2434:8:57;757:3716:88;;;;;;;;;;;;-1:-1:-1;;;757:3716:88;;;;;;;;;;;;;;;;;;-1:-1:-1;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;757:3716:88;;-1:-1:-1;757:3716:88;;-1:-1:-1;757:3716:88;;;;;;;;-1:-1:-1;;757:3716:88;;;;;;;;;;;;;;;876:25:116;757:3716:88;861:40:116;;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;757:3716:88;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;-1:-1:-1;;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;757:3716:88;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;757:3716:88;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;757:3716:88;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;757:3716:88;;;:::o;:::-;-1:-1:-1;;;757:3716:88;;;;;;;;;;;;;-1:-1:-1;;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;757:3716:88;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;:::o;1440:280::-;757:3716;;;1634:3;757:3716;;1613:19;;;;;1653:24;757:3716;1666:11;;;;;:::i;:::-;757:3716;1653:24;;:::i;:::-;1634:3;757:3716;1598:13;;;1613:19;;;;1440:280;:::o;757:3716::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;509:165:72:-;757:3716:88;586:6:72;757:3716:88;564:10:72;:29;560:108;;509:165::o;560:108::-;616:41;;;564:10;616:41;757:3716:88;;616:41:72;;3845:262:114;757:3716:88;3938:11:114;757:3716:88;3929:4:114;3921:28;:63;;;3845:262;3917:184;;;4007:22;4000:29;:::o;3917:184::-;757:3716:88;;4204:80:114;;;757:3716:88;2079:95:114;757:3716:88;;4226:11:114;757:3716:88;2079:95:114;;757:3716:88;4239:14:114;2079:95;;;757:3716:88;4255:13:114;2079:95;;;757:3716:88;3929:4:114;2079:95;;;757:3716:88;2079:95:114;4204:80;;2079:95;757:3716:88;;;;;;;;;;;;;;4194:91:114;;4060:30;:::o;3921:63::-;3970:14;;3953:13;:31;3921:63;;3385:267:110;1390:66;3508:46;;1390:66;;;2652:40;;2706:11;2715:2;2706:11;;2702:69;;757:3716:88;;;;;;:::i;:::-;2367:90:110;;2311:2;757:3716:88;;2367:90:110;3570:22;:::o;2702:69::-;2740:20;757:3716:88;2740:20:110;;757:3716:88;2740:20:110;3504:142;757:3716:88;;;-1:-1:-1;757:3716:88;-1:-1:-1;757:3716:88;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1390:66:110;;;;;;;;:::i;:::-;3623:12;:::o;757:3716:88:-;;;;-1:-1:-1;757:3716:88;;;;-1:-1:-1;757:3716:88;;;;;;;-1:-1:-1;1390:66:110;;-1:-1:-1;;;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;757:3716:88;;;;;;;;;;;;1390:66:110;757:3716:88;;;;;;;;;;;;;;;;;;;;;;3385:267:110;1390:66;3508:46;;1390:66;;;2652:40;;2706:11;2715:2;2706:11;;2702:69;;757:3716:88;;;;;;:::i;3504:142:110:-;757:3716:88;;;-1:-1:-1;6584:16:114;;757:3716:88;6584:16:114;757:3716:88;;;;:::i;:::-;;;;;;;6584:16:114;757:3716:88;;;6584:16:114;;;;757:3716:88;;;;;1390:66:110;;;;;;;;:::i;757:3716:88:-;;;;6584:16:114;-1:-1:-1;757:3716:88;;;-1:-1:-1;757:3716:88;;;;;;;-1:-1:-1;1390:66:110;;-1:-1:-1;;;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;757:3716:88;;;;;;5140:1530:113;;;6199:66;6186:79;;6182:164;;757:3716:88;;;;;;;;;;;;;;;;;;;;;;;;;;6457:24:113;;;;;;;;;757:3716:88;6457:24:113;757:3716:88;;;6495:20:113;6491:113;;6614:49;757:3716:88;6614:49:113;757:3716:88;5140:1530:113;:::o;6491:113::-;6531:62;757:3716:88;6531:62:113;6457:24;6531:62;757:3716:88;6531:62:113;:::o;6457:24::-;757:3716:88;;;;;;;;;6182:164:113;6281:54;;;757:3716:88;6281:54:113;6301:30;6281:54;;:::o;7196:532::-;757:3716:88;;;;;;7282:29:113;;;7327:7;;:::o;7278:444::-;757:3716:88;7378:38:113;;757:3716:88;;7439:23:113;-1:-1:-1;7439:23:113;757:3716:88;-1:-1:-1;7439:23:113;7374:348;7492:35;7483:44;;7492:35;;7550:46;;-1:-1:-1;7550:46:113;757:3716:88;;;-1:-1:-1;7550:46:113;7479:243;7626:30;7617:39;7613:109;;7479:243;7196:532::o;7613:109::-;7679:32;-1:-1:-1;7679:32:113;757:3716:88;;;-1:-1:-1;7679:32:113"},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","PERMIT_TYPEHASH()":"30adf81f","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","computeBalance(uint256[],uint256,uint256)":"16a0b3e0","computeInvariant(uint256[],uint8)":"984de9e8","decimals()":"313ce567","eip712Domain()":"84b0196e","emitApproval(address,address,uint256)":"5687f2b8","emitTransfer(address,address,uint256)":"23de6651","getActionId(bytes4)":"851c1bb3","getAggregateFeePercentages()":"81fa807c","getCurrentLiveBalances()":"b156aa0a","getDecimalScalingFactors()":"360c340f","getMaximumInvariantRatio()":"273c1adf","getMaximumSwapFeePercentage()":"654cf15d","getMinimumInvariantRatio()":"b677fa56","getMinimumSwapFeePercentage()":"ce20ece7","getRate()":"679aefce","getStaticSwapFeePercentage()":"d335b0cf","getTokenInfo()":"abb1dc44","getTokens()":"aa6ca808","getVault()":"8d928af8","incrementNonce()":"627cdcb9","mockEventFunction(uint256)":"b0e2e403","name()":"06fdde03","nonces(address)":"7ecebe00","onAddLiquidityCustom(address,uint256[],uint256,uint256[],bytes)":"e4c43663","onRemoveLiquidityCustom(address,uint256,uint256[],uint256[],bytes)":"ab68e28c","onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))":"72c98186","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","setMockRate(uint256)":"4cfe8d1a","setMultiplier(uint256)":"641579a6","supportsInterface(bytes4)":"01ffc9a7","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"ERC2612ExpiredSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC2612InvalidSigner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"name\":\"InvalidAccountNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidShortString\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"StringTooLong\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"tokenInIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"invariantRatio\",\"type\":\"uint256\"}],\"name\":\"computeBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"enum Rounding\",\"name\":\"\",\"type\":\"uint8\"}],\"name\":\"computeInvariant\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"emitApproval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"emitTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAggregateFeePercentages\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDecimalScalingFactors\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"scalingFactors\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"incrementNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"testValue\",\"type\":\"uint256\"}],\"name\":\"mockEventFunction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onAddLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"onRemoveLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"onSwap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculated\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"mockRate\",\"type\":\"uint256\"}],\"name\":\"setMockRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newMultiplier\",\"type\":\"uint256\"}],\"name\":\"setMultiplier\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"ERC2612ExpiredSignature(uint256)\":[{\"params\":{\"deadline\":\"The permit deadline that expired\"}}],\"ERC2612InvalidSigner(address,address)\":[{\"params\":{\"owner\":\"The address of the owner (expected value of the signature provider)\",\"signer\":\"The address corresponding to the signature provider\"}}],\"InvalidAccountNonce(address,uint256)\":[{\"details\":\"The nonce used for an `account` is not the expected current nonce.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"computeBalance(uint256[],uint256,uint256)\":{\"details\":\"Similar to V2's `_getTokenBalanceGivenInvariantAndAllOtherBalances` in StableMath. The pool must round up for the Vault to round in the protocol's favor when calling this function.\",\"params\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\",\"invariantRatio\":\"The ratio of the new invariant (after an operation) to the old\",\"tokenInIndex\":\"The index of the token we're computing the balance for, sorted in token registration order\"},\"returns\":{\"newBalance\":\"The new balance of the selected token, after the operation\"}},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"emitApproval(address,address,uint256)\":{\"details\":\"Emit the Approval event. This function can only be called by the MultiToken.\"},\"emitTransfer(address,address,uint256)\":{\"details\":\"Emit the Transfer event. This function can only be called by the MultiToken.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAggregateFeePercentages()\":{\"details\":\"These are determined by the current protocol and pool creator fees, set in the `ProtocolFeeController`.\",\"returns\":{\"aggregateSwapFeePercentage\":\"The aggregate percentage fee applied to swaps\",\"aggregateYieldFeePercentage\":\"The aggregate percentage fee applied to yield\"}},\"getCurrentLiveBalances()\":{\"details\":\"Note that live balances will not necessarily be accurate if the pool is in Recovery Mode. Withdrawals in Recovery Mode do not make external calls (including those necessary for updating live balances), so if there are withdrawals, raw and live balances will be out of sync until Recovery Mode is disabled.\",\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getDecimalScalingFactors()\":{\"details\":\"Even though pools do not handle scaling, we still need this for the tests.\"},\"getMaximumInvariantRatio()\":{\"returns\":{\"_0\":\"The maximum invariant ratio for a pool during unbalanced add liquidity\"}},\"getMaximumSwapFeePercentage()\":{\"returns\":{\"_0\":\"The maximum swap fee percentage for a pool\"}},\"getMinimumInvariantRatio()\":{\"returns\":{\"_0\":\"The minimum invariant ratio for a pool during unbalanced remove liquidity\"}},\"getMinimumSwapFeePercentage()\":{\"returns\":{\"_0\":\"The minimum swap fee percentage for a pool\"}},\"getRate()\":{\"details\":\"The VaultExtension contract defines a default implementation (`getBptRate`) to calculate the rate of any given pool, which should be sufficient in nearly all cases.\",\"returns\":{\"_0\":\"rate Rate of the pool's BPT\"}},\"getStaticSwapFeePercentage()\":{\"returns\":{\"_0\":\"18-decimal FP value of the static swap fee percentage\"}},\"getTokenInfo()\":{\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"Pool tokens, sorted in token registration order\"}},\"getTokens()\":{\"returns\":{\"tokens\":\"List of tokens in the pool, sorted in registration order\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"amountCalculated\":\"Calculated amount for the swap operation\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"ERC2612ExpiredSignature(uint256)\":[{\"notice\":\"Operation failed due to an expired permit signature.\"}],\"ERC2612InvalidSigner(address,address)\":[{\"notice\":\"Operation failed due to a non-matching signature.\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}]},\"kind\":\"user\",\"methods\":{\"computeBalance(uint256[],uint256,uint256)\":{\"notice\":\"Computes a new token balance, given the invariant growth ratio and all other balances.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAggregateFeePercentages()\":{\"notice\":\"Gets the aggregate swap and yield fee percentages for a pool.\"},\"getCurrentLiveBalances()\":{\"notice\":\"Gets the current live balances of the pool as fixed point, 18-decimal numbers.\"},\"getRate()\":{\"notice\":\"Get the BPT rate, which is defined as: pool invariant/total supply.\"},\"getStaticSwapFeePercentage()\":{\"notice\":\"Fetches the static swap fee percentage for the pool.\"},\"getTokenInfo()\":{\"notice\":\"Gets the raw data for the pool: tokens, token info, raw balances, and last live balances.\"},\"getTokens()\":{\"notice\":\"Gets the tokens registered in the pool.\"},\"incrementNonce()\":{\"notice\":\"Increment the sender's nonce to revoke any currently granted (but not yet executed) `permit`.\"},\"onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Execute a swap in the pool.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/test/PoolMock.sol\":\"PoolMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol\":{\"keccak256\":\"0xa7adbaf80bc9cfa44e41776f632b5d7cb2c02c562a124c0e4cb17f06c4a54db3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e4fdf59a7f3dc3b7d6bb6f466e4a0a6263b66c0fc12492baf06ec8c6fdcc2398\",\"dweb:/ipfs/QmWxLpicLjGdgGQ8GjuN9YfDyVapYWwzdgET86ucs9hmFa\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IPoolLiquidity.sol\":{\"keccak256\":\"0x0cdc0d3817887d0439c3c6f4c811bd37091ef75a855dd8b14c0e8f337e2799dd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4ffd05df90ccdf19a35177fd6c6f78edc61ca2a37df7d0934932a3ad5a96f1e6\",\"dweb:/ipfs/QmaCmKktnMy4XXZn2FaKTjwQBGUhuXKikbxCbPX6K5PPgi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-pool-utils/contracts/BasePoolAuthentication.sol\":{\"keccak256\":\"0x3ce8a430e284241e1b7f07994d0e1fd57bc16d0322cad658fea4519bd6b79ee3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70e91f80e4f484b2d7beb894e873f95092384784147d77437ca0f88a0e966b80\",\"dweb:/ipfs/QmQZDVcHJU2xceLdUJnxf7mXu7zXXYpnfMVppRxTcKPoTm\"]},\"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol\":{\"keccak256\":\"0xa97e2a0fd95d78dcecf67fd8c554ced63bbd6da372b6f8b12f16ad526b6ec608\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d98ad2022f9e3653fd63daca8c0725c7ccbd4f63d0d27c413e90669ce7284a96\",\"dweb:/ipfs/QmZ62RpJj3qSUrrdVD3H72qEszTUuvGkFLSBXAKMhBn5nX\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol\":{\"keccak256\":\"0x89bd8b60aa203c8aa72af6e88671af68f4407a26dd3e0541b0e4dc387fd0081e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://411eb9ee6df963198102de5ae597c1f1377b0a45be23f17d38463f2eeefa2b0a\",\"dweb:/ipfs/QmcEaMawADJEyLswG5hhvhQuTNV3XUxBVu3YZCbJzQkoJ7\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x79f2ec4f7314bd1c3555368ff02bb9d382489dc8bbd7efbbf306f9a5084f3bec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a57c155451c5b1c1c59a27770754ccd9ba1be9344db6ac45b8744eba5fa4fa2f\",\"dweb:/ipfs/QmarkRwGaS3egg1FaQH6LibqjT6NocVUbD1jMPWtFxFaQV\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@balancer-labs/v3-vault/contracts/test/PoolMock.sol\":{\"keccak256\":\"0xcd2e8d9d618bfb81a9696acb2419a33d04f48f0b548402c0b32e16d2e8708c3d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://01e7508e239ab908574226d9c009a0f0af5759d941e59a3d7362735ddd859980\",\"dweb:/ipfs/QmQDAS3tugJ1kRFgUsnyKJbMhEtD7464jfTqjYWZc2tQz2\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/test/ProtocolFeeControllerMock.sol":{"ProtocolFeeControllerMock":{"abi":[{"inputs":[{"internalType":"contract IVaultMock","name":"vault_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"caller","type":"address"},{"internalType":"address","name":"pool","type":"address"}],"name":"CallerIsNotPoolCreator","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[],"name":"InvalidMigrationSource","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[],"name":"PoolCreatorFeePercentageTooHigh","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreatorNotRegistered","type":"error"},{"inputs":[],"name":"ProtocolSwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ProtocolYieldFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"ZeroDivision","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"GlobalProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"GlobalProtocolYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateSwapFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isProtocolFeeExempt","type":"bool"}],"name":"InitialPoolAggregateYieldFeePercentage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PoolCreatorFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"PoolCreatorSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"PoolCreatorYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"poolCreator","type":"address"},{"indexed":false,"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"PoolRegisteredWithFeeController","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolFeesWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolSwapFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"ProtocolSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolYieldFeeCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"yieldFeePercentage","type":"uint256"}],"name":"ProtocolYieldFeePercentageChanged","type":"event"},{"inputs":[],"name":"MAX_CREATOR_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFeesHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"protocolFeePercentage","type":"uint256"},{"internalType":"uint256","name":"poolCreatorFeePercentage","type":"uint256"}],"name":"computeAggregateFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGlobalProtocolYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorInfo","outputs":[{"internalType":"address","name":"poolCreator","type":"address"},{"internalType":"uint256","name":"creatorSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"creatorYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolCreatorYieldFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolSwapFeeInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolProtocolYieldFeeInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokensAndCount","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256","name":"numTokens","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getProtocolFeeAmounts","outputs":[{"internalType":"uint256[]","name":"feeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"manualSetPoolCreatorSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"migratePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"}],"name":"registerPool","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setGlobalProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setGlobalProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorSwapFeePercentage","type":"uint256"}],"name":"setPoolCreatorSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"poolCreatorYieldFeePercentage","type":"uint256"}],"name":"setPoolCreatorYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolSwapFeePercentage","type":"uint256"}],"name":"setProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newProtocolYieldFeePercentage","type":"uint256"}],"name":"setProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"updateProtocolYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawPoolCreatorFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"withdrawProtocolFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"withdrawProtocolFeesForToken","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60e03461011257601f61309638819003918201601f19168301916001600160401b038311848410176101165780849260209460405283398101031261011257516001600160a01b0381169081900361011257306080528060a05260c052604051612f6b908161012b823960805181612382015260a051818181611064015281816112e40152612a93015260c051818181610276015281816103960152818161042101528181610543015281816105b10152818161088d015281816108fb01528181610ce901528181610dfb01528181610f31015281816117e60152818161198b01528181611b2c01528181611c8601528181611df40152818161256001528181612816015281816129920152612bde0152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f905f3560e01c9081630252aab5146121b6575080630874327f14611da35780630b8e059b14611d6b5780630ddd60c614611d4a5780631377c16c14611c2b5780632772d15614611a485780632e1d388d14611c095780633af5271214611ad157806352f125f014611aa657806355fb76af14611a895780635c15a0b414611a4d5780635e32e4e814611a4857806371447ea8146118a357806371ecc8fb146116ff57806377ff76e71461146b5780637869ee181461144f5780637a2b97dc146113e4578063851c1bb3146113945780638a3c5c69146113085780638d928af8146112c55780638df44c541461123d5780638f4ab9ca1461121c5780639e95f3fd14611190578063a93df2a41461112b578063aa9fea87146110d1578063aaabadc51461101e578063abaa335614610e65578063b53a70b214610d7e578063b8abccd114610cb3578063c673bdaf14610c76578063cf7b287f14610c0c578063f29aaa5814610b9b578063f706144514610b64578063fa399f2a146103ba578063fbfa77cf146103765763fd267f39146101aa575f80fd5b34610373576040600319360112610373576101c36121ea565b602435906101cf612a2e565b6706f05b59d3b20000821161034b576101e7826129e6565b6101f08161249e565b6101f98261267f565b9160405161020681612273565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600260205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f000000000000000000000000000000000000000000000000000000000000000016916102a081612d45565b833b15610347576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af190811561033c577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e9260209261032d575b50604051908152a280f35b610336906122bc565b5f610322565b6040513d5f823e3d90fd5b5f80fd5b6004837f7e6eb7fb000000000000000000000000000000000000000000000000000000008152fd5b80fd5b503461037357806003193601126103735760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b5034610373576020600319360112610373576103d46121ea565b6103dc612988565b6040517f8f4ab9ca0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528281602481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610b595783908492610af4575b506001600160a01b0383165f52600260205267ffffffffffffffff60405f20541690600560205260405f2054905f928215159384610aea575b84610ada575b61049b87612b9f565b94905f5b86811061084b578a8a8a6001600160a01b0382165f52600360205267ffffffffffffffff60405f205416905f92600660205260405f2054925f8415159485610841575b8561082f575b6104f184612b9f565b96905f5b888110610500578a80f35b61050a8189612423565b51610518575b6001016104f5565b986001600160a01b0361052b8b84612423565b5116906105388b8a612423565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561082b57604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201528181606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156108205790829161080c575b506107df57505f99816105f4828b612423565b516040519081527fe505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e260206001600160a01b038c1692a383156107645761063a818a612423565b51861561073c5761064a906126d1565b6001670de0b6b3a764000061068b8a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848c8783010401901515026126ee565b928301040190151502916001600160a01b0389165f52600760205260405f20815f5260205260405f206106bf8482546126c4565b90556106cb828b612423565b5190818481031161070f57600193610705916001600160a01b038c165f52600860205260405f20905f5260205260405f20920382546126c4565b90555b9050610510565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b600191856107a957610776828b612423565b51906001600160a01b038a165f52600760205260405f20905f526020526107a260405f209182546126c4565b9055610708565b6107b3828b612423565b51906001600160a01b038a165f52600860205260405f20905f526020526107a260405f209182546126c4565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b610815906122bc565b61037357808d6105e1565b6040513d84823e3d90fd5b5080fd5b905061083b8183612701565b906104e8565b82151595506104e2565b6108558187612423565b51610863575b60010161049f565b6001600160a01b036108758284612423565b5116906108828188612423565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561034757604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201525f81606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561033c57610acb575b50818b7fae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f60206001600160a01b03610960868d612423565b51936040519485521692a38815610a505761097b8188612423565b51851561073c5761098b906126d1565b6001670de0b6b3a76400006109cc897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848b8783010401901515026126ee565b928301040190151502916001600160a01b038c165f52600760205260405f20815f5260205260405f20610a008482546126c4565b9055610a0c8289612423565b5190818481031161070f57600193610a46916001600160a01b038f165f52600860205260405f20905f5260205260405f20920382546126c4565b90555b905061085b565b60019184610a9557610a628289612423565b51906001600160a01b038d165f52600760205260405f20905f52602052610a8e60405f209182546126c4565b9055610a49565b610a9f8289612423565b51906001600160a01b038d165f52600860205260405f20905f52602052610a8e60405f209182546126c4565b610ad4906122bc565b5f610928565b50610ae58382612701565b610492565b811515945061048c565b9150503d8084833e610b0681836122ec565b810190604081830312610b555780519167ffffffffffffffff92838111610b515781610b3391840161261e565b926020830151908111610b5157610b4a920161261e565b905f610453565b8580fd5b8380fd5b6040513d85823e3d90fd5b503461037357604060031936011261037357610b98610b816121ea565b610b89612200565b90610b9381612742565b6128d1565b80f35b50346103735760208060031936011261082b57610bbe610bb96121ea565b612b9f565b926040519260408401906040855283518092526020606086019401925b828110610bef578580868960208301520390f35b83516001600160a01b031685529381019392810192600101610bdb565b503461037357604060031936011261037357610c266121ea565b610c2e612200565b90610c37612a2e565b610c4081612b9f565b9290845b848110610c4f578580f35b80610c706001600160a01b03610c6760019486612423565b51168587612cb3565b01610c44565b50346103735760206003193601126103735760ff60406020926001600160a01b03610c9f6121ea565b168152600484522054166040519015158152f35b503461034757604060031936011261034757610ccd6121ea565b6001600160a01b038082165f52600560205260243560405f20557f00000000000000000000000000000000000000000000000000000000000000001690610d1381612d45565b823b15610347576040517fa03b23ef0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152905f908290604490829084905af1801561033c57610d72575080f35b610d7c91506122bc565b005b3461034757606060031936011261034757610d976121ea565b610d9f612200565b604435906001600160a01b039283831680840361034757604090610dc1612a2e565b60448251809781937fc9c1661b000000000000000000000000000000000000000000000000000000008352818716600484015260248301527f0000000000000000000000000000000000000000000000000000000000000000165afa801561033c57610e32575b610d7c9350612cb3565b6040843d604011610e5d575b81610e4b604093836122ec565b8101031261034757610d7c9350610e28565b3d9150610e3e565b3461034757604060031936011261034757610e7e6121ea565b60243590610e8a612a2e565b6706f05b59d3b200008211610ff657610ea2826129e6565b610eab8161249e565b610eb48261267f565b91604051610ec181612273565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600360205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f00000000000000000000000000000000000000000000000000000000000000001691610f5b81612d77565b833b15610347576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af190811561033c577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd92602092610fe7575b50604051908152a2005b610ff0906122bc565b5f610fdd565b7fa7849e8e000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610347575f600319360112610347576040517faaabadc50000000000000000000000000000000000000000000000000000000081526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa90811561033c576020925f926110a2575b5060405191168152f35b6110c3919250833d85116110ca575b6110bb81836122ec565b8101906125ff565b9083611098565b503d6110b1565b346103475760206003193601126103475760606110ec6121ea565b6110f5816127d7565b906001600160a01b038091165f52600560205260405f2054600660205260405f2054916040519316835260208301526040820152f35b34610347576020600319360112610347576004356706f05b59d3b200008111610ff65760208161117b7f48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f6936129e6565b611183612a2e565b80600155604051908152a1005b3461034757602080600319360112610347576111aa6121ea565b906111b482612b9f565b906111be826123d4565b925f946001600160a01b03809116955b8481106111e757604051806111e38882612238565b0390f35b600190875f526008845260405f20836112008388612423565b51165f52845260405f20546112158289612423565b52016111ce565b3461034757602060031936011261034757610d7c6112386121ea565b61249e565b3461034757602080600319360112610347576112576121ea565b9061126182612b9f565b9061126b826123d4565b925f946001600160a01b03809116955b84811061129057604051806111e38882612238565b600190875f526007845260405f20836112a98388612423565b51165f52845260405f20546112be8289612423565b520161127b565b34610347575f6003193601126103475760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610347576020600319360112610347576004356706f05b59d3b20000811161136c576020816113587fbf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d936129e6565b611360612a2e565b805f55604051908152a1005b7f7e6eb7fb000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610347576020600319360112610347576004357fffffffff0000000000000000000000000000000000000000000000000000000081168103610347576113dc602091612357565b604051908152f35b34610347576020600319360112610347576001600160a01b036114056121ea565b165f526003602052602060405f206040519061142082612273565b5467ffffffffffffffff811680835260ff604092831c1615159390920183905280519182526020820192909252f35b34610347575f6003193601126103475760205f54604051908152f35b34610347576060600319360112610347576114846121ea565b61148c612200565b906044359182151590818403610347576114a4612988565b6001600160a01b0380931691825f52826020926004845260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055865f146116f457835f9687925b8915611679578483878c5f9b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611664967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb985b6115798461267f565b6040519061158682612273565b67ffffffffffffffff809116825260036115f6868401948686528b5f5260028852604084905f209551169480549651151560401b967fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000968768ff0000000000000000809a1692161717905561267f565b9560408390519761160689612273565b1687528087019586528a5f525260405f209451169184549351151560401b16921617179055604061164a905192839283909291602090604083019483521515910152565b0390a28d518c815290151560208201529081906040820190565b0390a289519586521693a38351928352820152f35b8483878c6001549b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611664967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb98611570565b835f549687926114f5565b3461034757602080600319360112610347576117196121ea565b6117228161249e565b6001600160a01b039182821692835f526002825260405f20906040519161174883612273565b549167ffffffffffffffff9060ff8285169485835260401c1615908582159101525f549381611898575b5061177957005b6117828361267f565b90806040519261179184612273565b168252848201905f8252875f526002865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169261181081612d45565b843b15610347576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af192831561033c577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e93610fe75750604051908152a2005b905083141587611772565b3461034757602080600319360112610347576118bd6121ea565b6118c68161249e565b6001600160a01b039182821692835f526003825260405f2090604051916118ec83612273565b549167ffffffffffffffff9060ff8285169485835260401c1615908582159101526001549381611a3d575b5061191e57005b6119278361267f565b90806040519261193684612273565b168252848201905f8252875f526003865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f000000000000000000000000000000000000000000000000000000000000000016926119b581612d77565b843b15610347576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af192831561033c577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd93610fe75750604051908152a2005b905083141587611917565b612216565b34610347576020600319360112610347576001600160a01b03611a6e6121ea565b165f526002602052602060405f206040519061142082612273565b34610347575f600319360112610347576020600154604051908152f35b3461034757602060031936011261034757610d7c611ac26121ea565b611acb816127d7565b906128d1565b3461034757604060031936011261034757611aea6121ea565b60243590611af781612742565b670de0ad9b58f160008211611be157611b0f8161249e565b6001600160a01b039182821692835f5260066020528160405f20557f00000000000000000000000000000000000000000000000000000000000000001691611b5681612d77565b833b15610347576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af190811561033c577f47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab3492602092610fe75750604051908152a2005b7f0370da74000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610347575f600319360112610347576020604051670de0ad9b58f160008152f35b3461034757604060031936011261034757611c446121ea565b60243590611c5181612742565b670de0ad9b58f160008211611be157611c698161249e565b6001600160a01b039182821692835f5260056020528160405f20557f00000000000000000000000000000000000000000000000000000000000000001691611cb081612d45565b833b15610347576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af190811561033c577fb7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c92602092611d3b5750604051908152a2005b611d44906122bc565b84610fdd565b346103475760406003193601126103475760206113dc602435600435612701565b34610347576020600319360112610347576001600160a01b03611d8c6121ea565b165f526005602052602060405f2054604051908152f35b346103475760208060031936011261034757611dbd6121ea565b906001600160a01b036040517f85f2dbd40000000000000000000000000000000000000000000000000000000081528281600481857f0000000000000000000000000000000000000000000000000000000000000000165afa801561033c5782915f9161217c575b501692308414612154571690815f526004815260ff60405f20541661212857815f526004815260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556040517f5c15a0b4000000000000000000000000000000000000000000000000000000008152826004820152604081602481875afa90811561033c575f905f92612104575b50611ec79061267f565b9060405190611ed582612273565b67ffffffffffffffff80931682528382019015158152845f52600284528260405f209251169180549151151560401b917fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000938468ff0000000000000000809516921617179055604051917f7a2b97dc0000000000000000000000000000000000000000000000000000000083528560048401526040836024818a5afa92831561033c575f905f946120d0575b50611f8b9061267f565b938060405195611f9a87612273565b1685528585019315158452865f526003865260405f209451169184549351151560401b169216171790556040517f0b8e059b0000000000000000000000000000000000000000000000000000000081528260048201528181602481875afa5f918161209e575b5093829160249561208c575b50604051948580927f0252aab50000000000000000000000000000000000000000000000000000000082528660048301525afa5f938161205d575b5061204e57005b6006915f525260405f20555f80f35b9093508181813d8311612085575b61207581836122ec565b8101031261034757519284612047565b503d61206b565b845f526005835260405f20558561200c565b9150938282813d83116120c9575b6120b681836122ec565b8101031261034757905190936024612000565b503d6120ac565b611f8b94506120f7915060403d6040116120fd575b6120ef81836122ec565b81019061233a565b93611f81565b503d6120e5565b611ec79250612122915060403d6040116120fd576120ef81836122ec565b91611ebd565b507fdb771c80000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fb82fd5bf000000000000000000000000000000000000000000000000000000005f5260045ffd5b809250848092503d83116121af575b61219581836122ec565b810103126103475751818116810361034757819085611e25565b503d61218b565b34610347576020600319360112610347576020906001600160a01b036121da6121ea565b165f526006825260405f20548152f35b600435906001600160a01b038216820361034757565b602435906001600160a01b038216820361034757565b34610347575f6003193601126103475760206040516706f05b59d3b200008152f35b60209060206040818301928281528551809452019301915f5b82811061225f575050505090565b835185529381019392810192600101612251565b6040810190811067ffffffffffffffff82111761228f57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161228f57604052565b6060810190811067ffffffffffffffff82111761228f57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761228f57604052565b5190811515820361034757565b91908260409103126103475761235460208351930161232d565b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526123b6816122d0565b51902090565b67ffffffffffffffff811161228f5760051b60200190565b906123de826123bc565b6123eb60405191826122ec565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061241982946123bc565b0190602036910137565b80518210156124375760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b67ffffffffffffffff811161228f57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0905f601f6001600160a01b036040519383604460209684888201947ffa399f2a00000000000000000000000000000000000000000000000000000000865216602482015260248152612510816122d0565b604051988996879586937f48c894910000000000000000000000000000000000000000000000000000000085528b60048601525180918160248701528686015e85858286010152011681010301927f0000000000000000000000000000000000000000000000000000000000000000165af1801561033c57612590575050565b3d805f843e61259f81846122ec565b82019181818403126103475780519067ffffffffffffffff821161034757019180601f84011215610347578251906125d682612464565b906125e460405192836122ec565b8282528383860101116103475781835f95018483015e010152565b9081602091031261034757516001600160a01b03811681036103475790565b9080601f8301121561034757815190602091612639816123bc565b9361264760405195866122ec565b81855260208086019260051b82010192831161034757602001905b828210612670575050505090565b81518152908301908301612662565b67ffffffffffffffff90818111612694571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b9190820180921161070f57565b90670de0b6b3a76400009182810292818404149015171561070f57565b8181029291811591840414171561070f57565b9061272e64174876e800928392612727670de0b6b3a764000091838303838510026126ee565b04906126c4565b0481810291818304149015171561070f5790565b6001600160a01b039081612755826127d7565b168015612796573303612766575050565b7ffbecdbf4000000000000000000000000000000000000000000000000000000005f52336004521660245260445ffd5b507f8bcbf353000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b51906001600160a01b038216820361034757565b604080517fe9ddeb260000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526060816024817f000000000000000000000000000000000000000000000000000000000000000087165afa9081156128c7575f9161284e575b5001511690565b90506060813d6060116128bf575b81612869606093836122ec565b81010312610347578151906060820182811067ffffffffffffffff82111761228f576128b5918491825261289c816127c3565b84526128aa602082016127c3565b6020850152016127c3565b828201525f612847565b3d915061285c565b82513d5f823e3d90fd5b906128db82612b9f565b92905f5b8481106128ed575050505050565b6001906001600160a01b03806129038386612423565b5116818616805f5260086020818152604094855f20855f528252855f20549586612935575b50505050505050016128df565b7f938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f993855f528352805f20865f5283525f81812055612974878d88612da9565b519586528a1694a45f808080808080612928565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036129ba57565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b64174876e80080820481810291818304149015171561070f5703612a0657565b7f833fb3ce000000000000000000000000000000000000000000000000000000005f5260045ffd5b612a5a7fffffffff000000000000000000000000000000000000000000000000000000005f3516612357565b6001600160a01b036040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa90811561033c5784925f92612b7d575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa91821561033c575f92612b47575b505015612b1f57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d8311612b76575b612b5e81836122ec565b8101031261034757612b6f9061232d565b5f80612b16565b503d612b54565b6064919250612b9890843d86116110ca576110bb81836122ec565b9190612ac5565b906001600160a01b0380604051937fca4f28030000000000000000000000000000000000000000000000000000000085521660048401525f83602481847f0000000000000000000000000000000000000000000000000000000000000000165afa92831561033c575f93612c15575b5050815190565b909192503d805f833e612c2881836122ec565b810160209182818303126103475780519067ffffffffffffffff821161034757019281601f85011215610347578351612c60816123bc565b94612c6e60405196876122ec565b818652848087019260051b820101938411610347578401905b838210612c9b575050505050905f80612c0e565b81518381168103610347578152908401908401612c87565b91906001600160a01b0380931690815f52600760205260405f209284811693845f5260205260405f20549485612cec575b505050505050565b82612d31877f1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b595602095885f526007875260405f208a5f5287525f6040812055612da9565b6040519687521694a45f8080808080612ce4565b6001600160a01b03165f52600260205261235467ffffffffffffffff60405f205416600560205260405f205490612701565b6001600160a01b03165f52600360205261235467ffffffffffffffff60405f205416600660205260405f205490612701565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082019081526001600160a01b03938416602483015260448083019590955293815292612e3d925f9283929190612e066064886122ec565b1694519082865af13d15612ea1573d90612e1f82612464565b91612e2d60405193846122ec565b82523d5f602084013e5b83612ea9565b8051908115159182612e7e575b5050612e535750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8192509060209181010312610347576020612e99910161232d565b155f80612e4a565b606090612e37565b90612ee65750805115612ebe57805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580612f2c575b612ef7575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15612eef56fea2646970667358221220ac6c0905fb049f35a293c7b6bae425a04248c1ced6373ccfc0b37dd9df6d131c64736f6c634300081b0033","opcodes":"PUSH1 0xE0 CALLVALUE PUSH2 0x112 JUMPI PUSH1 0x1F PUSH2 0x3096 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x116 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x20 SWAP5 PUSH1 0x40 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x112 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP1 DUP2 SWAP1 SUB PUSH2 0x112 JUMPI ADDRESS PUSH1 0x80 MSTORE DUP1 PUSH1 0xA0 MSTORE PUSH1 0xC0 MSTORE PUSH1 0x40 MLOAD PUSH2 0x2F6B SWAP1 DUP2 PUSH2 0x12B DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x2382 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x1064 ADD MSTORE DUP2 DUP2 PUSH2 0x12E4 ADD MSTORE PUSH2 0x2A93 ADD MSTORE PUSH1 0xC0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x276 ADD MSTORE DUP2 DUP2 PUSH2 0x396 ADD MSTORE DUP2 DUP2 PUSH2 0x421 ADD MSTORE DUP2 DUP2 PUSH2 0x543 ADD MSTORE DUP2 DUP2 PUSH2 0x5B1 ADD MSTORE DUP2 DUP2 PUSH2 0x88D ADD MSTORE DUP2 DUP2 PUSH2 0x8FB ADD MSTORE DUP2 DUP2 PUSH2 0xCE9 ADD MSTORE DUP2 DUP2 PUSH2 0xDFB ADD MSTORE DUP2 DUP2 PUSH2 0xF31 ADD MSTORE DUP2 DUP2 PUSH2 0x17E6 ADD MSTORE DUP2 DUP2 PUSH2 0x198B ADD MSTORE DUP2 DUP2 PUSH2 0x1B2C ADD MSTORE DUP2 DUP2 PUSH2 0x1C86 ADD MSTORE DUP2 DUP2 PUSH2 0x1DF4 ADD MSTORE DUP2 DUP2 PUSH2 0x2560 ADD MSTORE DUP2 DUP2 PUSH2 0x2816 ADD MSTORE DUP2 DUP2 PUSH2 0x2992 ADD MSTORE PUSH2 0x2BDE ADD MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP1 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x252AAB5 EQ PUSH2 0x21B6 JUMPI POP DUP1 PUSH4 0x874327F EQ PUSH2 0x1DA3 JUMPI DUP1 PUSH4 0xB8E059B EQ PUSH2 0x1D6B JUMPI DUP1 PUSH4 0xDDD60C6 EQ PUSH2 0x1D4A JUMPI DUP1 PUSH4 0x1377C16C EQ PUSH2 0x1C2B JUMPI DUP1 PUSH4 0x2772D156 EQ PUSH2 0x1A48 JUMPI DUP1 PUSH4 0x2E1D388D EQ PUSH2 0x1C09 JUMPI DUP1 PUSH4 0x3AF52712 EQ PUSH2 0x1AD1 JUMPI DUP1 PUSH4 0x52F125F0 EQ PUSH2 0x1AA6 JUMPI DUP1 PUSH4 0x55FB76AF EQ PUSH2 0x1A89 JUMPI DUP1 PUSH4 0x5C15A0B4 EQ PUSH2 0x1A4D JUMPI DUP1 PUSH4 0x5E32E4E8 EQ PUSH2 0x1A48 JUMPI DUP1 PUSH4 0x71447EA8 EQ PUSH2 0x18A3 JUMPI DUP1 PUSH4 0x71ECC8FB EQ PUSH2 0x16FF JUMPI DUP1 PUSH4 0x77FF76E7 EQ PUSH2 0x146B JUMPI DUP1 PUSH4 0x7869EE18 EQ PUSH2 0x144F JUMPI DUP1 PUSH4 0x7A2B97DC EQ PUSH2 0x13E4 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x1394 JUMPI DUP1 PUSH4 0x8A3C5C69 EQ PUSH2 0x1308 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x12C5 JUMPI DUP1 PUSH4 0x8DF44C54 EQ PUSH2 0x123D JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0x121C JUMPI DUP1 PUSH4 0x9E95F3FD EQ PUSH2 0x1190 JUMPI DUP1 PUSH4 0xA93DF2A4 EQ PUSH2 0x112B JUMPI DUP1 PUSH4 0xAA9FEA87 EQ PUSH2 0x10D1 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x101E JUMPI DUP1 PUSH4 0xABAA3356 EQ PUSH2 0xE65 JUMPI DUP1 PUSH4 0xB53A70B2 EQ PUSH2 0xD7E JUMPI DUP1 PUSH4 0xB8ABCCD1 EQ PUSH2 0xCB3 JUMPI DUP1 PUSH4 0xC673BDAF EQ PUSH2 0xC76 JUMPI DUP1 PUSH4 0xCF7B287F EQ PUSH2 0xC0C JUMPI DUP1 PUSH4 0xF29AAA58 EQ PUSH2 0xB9B JUMPI DUP1 PUSH4 0xF7061445 EQ PUSH2 0xB64 JUMPI DUP1 PUSH4 0xFA399F2A EQ PUSH2 0x3BA JUMPI DUP1 PUSH4 0xFBFA77CF EQ PUSH2 0x376 JUMPI PUSH4 0xFD267F39 EQ PUSH2 0x1AA JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x373 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x373 JUMPI PUSH2 0x1C3 PUSH2 0x21EA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1CF PUSH2 0x2A2E JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0x34B JUMPI PUSH2 0x1E7 DUP3 PUSH2 0x29E6 JUMP JUMPDEST PUSH2 0x1F0 DUP2 PUSH2 0x249E JUMP JUMPDEST PUSH2 0x1F9 DUP3 PUSH2 0x267F JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0x206 DUP2 PUSH2 0x2273 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x2A0 DUP2 PUSH2 0x2D45 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x347 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x33C JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x32D JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 DUP1 RETURN JUMPDEST PUSH2 0x336 SWAP1 PUSH2 0x22BC JUMP JUMPDEST PUSH0 PUSH2 0x322 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP4 PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x373 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x373 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x373 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x373 JUMPI PUSH2 0x3D4 PUSH2 0x21EA JUMP JUMPDEST PUSH2 0x3DC PUSH2 0x2988 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE DUP3 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xB59 JUMPI DUP4 SWAP1 DUP5 SWAP3 PUSH2 0xAF4 JUMPI JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH0 SWAP3 DUP3 ISZERO ISZERO SWAP4 DUP5 PUSH2 0xAEA JUMPI JUMPDEST DUP5 PUSH2 0xADA JUMPI JUMPDEST PUSH2 0x49B DUP8 PUSH2 0x2B9F JUMP JUMPDEST SWAP5 SWAP1 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x84B JUMPI DUP11 DUP11 DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH0 SWAP3 PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 PUSH0 DUP5 ISZERO ISZERO SWAP5 DUP6 PUSH2 0x841 JUMPI JUMPDEST DUP6 PUSH2 0x82F JUMPI JUMPDEST PUSH2 0x4F1 DUP5 PUSH2 0x2B9F JUMP JUMPDEST SWAP7 SWAP1 PUSH0 JUMPDEST DUP9 DUP2 LT PUSH2 0x500 JUMPI DUP11 DUP1 RETURN JUMPDEST PUSH2 0x50A DUP2 DUP10 PUSH2 0x2423 JUMP JUMPDEST MLOAD PUSH2 0x518 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x4F5 JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x52B DUP12 DUP5 PUSH2 0x2423 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x538 DUP12 DUP11 PUSH2 0x2423 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x82B JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x820 JUMPI SWAP1 DUP3 SWAP2 PUSH2 0x80C JUMPI JUMPDEST POP PUSH2 0x7DF JUMPI POP PUSH0 SWAP10 DUP2 PUSH2 0x5F4 DUP3 DUP12 PUSH2 0x2423 JUMP JUMPDEST MLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xE505E41B0D437B47350A9990142CCF38ACB11FFA0E5AF8F973B9E172F3D5D5E2 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP3 LOG3 DUP4 ISZERO PUSH2 0x764 JUMPI PUSH2 0x63A DUP2 DUP11 PUSH2 0x2423 JUMP JUMPDEST MLOAD DUP7 ISZERO PUSH2 0x73C JUMPI PUSH2 0x64A SWAP1 PUSH2 0x26D1 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x68B DUP11 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP13 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x26EE JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x6BF DUP5 DUP3 SLOAD PUSH2 0x26C4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x6CB DUP3 DUP12 PUSH2 0x2423 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x70F JUMPI PUSH1 0x1 SWAP4 PUSH2 0x705 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x26C4 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x510 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 SWAP2 DUP6 PUSH2 0x7A9 JUMPI PUSH2 0x776 DUP3 DUP12 PUSH2 0x2423 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x7A2 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x26C4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x708 JUMP JUMPDEST PUSH2 0x7B3 DUP3 DUP12 PUSH2 0x2423 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x7A2 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x26C4 JUMP JUMPDEST DUP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x24 SWAP3 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH2 0x815 SWAP1 PUSH2 0x22BC JUMP JUMPDEST PUSH2 0x373 JUMPI DUP1 DUP14 PUSH2 0x5E1 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST SWAP1 POP PUSH2 0x83B DUP2 DUP4 PUSH2 0x2701 JUMP JUMPDEST SWAP1 PUSH2 0x4E8 JUMP JUMPDEST DUP3 ISZERO ISZERO SWAP6 POP PUSH2 0x4E2 JUMP JUMPDEST PUSH2 0x855 DUP2 DUP8 PUSH2 0x2423 JUMP JUMPDEST MLOAD PUSH2 0x863 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x49F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x875 DUP3 DUP5 PUSH2 0x2423 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x882 DUP2 DUP9 PUSH2 0x2423 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x347 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x33C JUMPI PUSH2 0xACB JUMPI JUMPDEST POP DUP2 DUP12 PUSH32 0xAE7EBAD9FC3D1D17965F063FA520D393595E2EF6C8E22AE8413B60900444E19F PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x960 DUP7 DUP14 PUSH2 0x2423 JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 DUP9 ISZERO PUSH2 0xA50 JUMPI PUSH2 0x97B DUP2 DUP9 PUSH2 0x2423 JUMP JUMPDEST MLOAD DUP6 ISZERO PUSH2 0x73C JUMPI PUSH2 0x98B SWAP1 PUSH2 0x26D1 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x9CC DUP10 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP12 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x26EE JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0xA00 DUP5 DUP3 SLOAD PUSH2 0x26C4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0xA0C DUP3 DUP10 PUSH2 0x2423 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x70F JUMPI PUSH1 0x1 SWAP4 PUSH2 0xA46 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x26C4 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x85B JUMP JUMPDEST PUSH1 0x1 SWAP2 DUP5 PUSH2 0xA95 JUMPI PUSH2 0xA62 DUP3 DUP10 PUSH2 0x2423 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA8E PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x26C4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0xA49 JUMP JUMPDEST PUSH2 0xA9F DUP3 DUP10 PUSH2 0x2423 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA8E PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x26C4 JUMP JUMPDEST PUSH2 0xAD4 SWAP1 PUSH2 0x22BC JUMP JUMPDEST PUSH0 PUSH2 0x928 JUMP JUMPDEST POP PUSH2 0xAE5 DUP4 DUP3 PUSH2 0x2701 JUMP JUMPDEST PUSH2 0x492 JUMP JUMPDEST DUP2 ISZERO ISZERO SWAP5 POP PUSH2 0x48C JUMP JUMPDEST SWAP2 POP POP RETURNDATASIZE DUP1 DUP5 DUP4 RETURNDATACOPY PUSH2 0xB06 DUP2 DUP4 PUSH2 0x22EC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x40 DUP2 DUP4 SUB SLT PUSH2 0xB55 JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0xB51 JUMPI DUP2 PUSH2 0xB33 SWAP2 DUP5 ADD PUSH2 0x261E JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0xB51 JUMPI PUSH2 0xB4A SWAP3 ADD PUSH2 0x261E JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x453 JUMP JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP4 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP6 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x373 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x373 JUMPI PUSH2 0xB98 PUSH2 0xB81 PUSH2 0x21EA JUMP JUMPDEST PUSH2 0xB89 PUSH2 0x2200 JUMP JUMPDEST SWAP1 PUSH2 0xB93 DUP2 PUSH2 0x2742 JUMP JUMPDEST PUSH2 0x28D1 JUMP JUMPDEST DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x373 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x82B JUMPI PUSH2 0xBBE PUSH2 0xBB9 PUSH2 0x21EA JUMP JUMPDEST PUSH2 0x2B9F JUMP JUMPDEST SWAP3 PUSH1 0x40 MLOAD SWAP3 PUSH1 0x40 DUP5 ADD SWAP1 PUSH1 0x40 DUP6 MSTORE DUP4 MLOAD DUP1 SWAP3 MSTORE PUSH1 0x20 PUSH1 0x60 DUP7 ADD SWAP5 ADD SWAP3 JUMPDEST DUP3 DUP2 LT PUSH2 0xBEF JUMPI DUP6 DUP1 DUP7 DUP10 PUSH1 0x20 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0xBDB JUMP JUMPDEST POP CALLVALUE PUSH2 0x373 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x373 JUMPI PUSH2 0xC26 PUSH2 0x21EA JUMP JUMPDEST PUSH2 0xC2E PUSH2 0x2200 JUMP JUMPDEST SWAP1 PUSH2 0xC37 PUSH2 0x2A2E JUMP JUMPDEST PUSH2 0xC40 DUP2 PUSH2 0x2B9F JUMP JUMPDEST SWAP3 SWAP1 DUP5 JUMPDEST DUP5 DUP2 LT PUSH2 0xC4F JUMPI DUP6 DUP1 RETURN JUMPDEST DUP1 PUSH2 0xC70 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xC67 PUSH1 0x1 SWAP5 DUP7 PUSH2 0x2423 JUMP JUMPDEST MLOAD AND DUP6 DUP8 PUSH2 0x2CB3 JUMP JUMPDEST ADD PUSH2 0xC44 JUMP JUMPDEST POP CALLVALUE PUSH2 0x373 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x373 JUMPI PUSH1 0xFF PUSH1 0x40 PUSH1 0x20 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xC9F PUSH2 0x21EA JUMP JUMPDEST AND DUP2 MSTORE PUSH1 0x4 DUP5 MSTORE KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH2 0xCCD PUSH2 0x21EA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP1 PUSH2 0xD13 DUP2 PUSH2 0x2D45 JUMP JUMPDEST DUP3 EXTCODESIZE ISZERO PUSH2 0x347 JUMPI PUSH1 0x40 MLOAD PUSH32 0xA03B23EF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP1 PUSH0 SWAP1 DUP3 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL DUP1 ISZERO PUSH2 0x33C JUMPI PUSH2 0xD72 JUMPI POP DUP1 RETURN JUMPDEST PUSH2 0xD7C SWAP2 POP PUSH2 0x22BC JUMP JUMPDEST STOP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH2 0xD97 PUSH2 0x21EA JUMP JUMPDEST PUSH2 0xD9F PUSH2 0x2200 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP4 AND DUP1 DUP5 SUB PUSH2 0x347 JUMPI PUSH1 0x40 SWAP1 PUSH2 0xDC1 PUSH2 0x2A2E JUMP JUMPDEST PUSH1 0x44 DUP3 MLOAD DUP1 SWAP8 DUP2 SWAP4 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP2 DUP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x33C JUMPI PUSH2 0xE32 JUMPI JUMPDEST PUSH2 0xD7C SWAP4 POP PUSH2 0x2CB3 JUMP JUMPDEST PUSH1 0x40 DUP5 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0xE5D JUMPI JUMPDEST DUP2 PUSH2 0xE4B PUSH1 0x40 SWAP4 DUP4 PUSH2 0x22EC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x347 JUMPI PUSH2 0xD7C SWAP4 POP PUSH2 0xE28 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xE3E JUMP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH2 0xE7E PUSH2 0x21EA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xE8A PUSH2 0x2A2E JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0xFF6 JUMPI PUSH2 0xEA2 DUP3 PUSH2 0x29E6 JUMP JUMPDEST PUSH2 0xEAB DUP2 PUSH2 0x249E JUMP JUMPDEST PUSH2 0xEB4 DUP3 PUSH2 0x267F JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0xEC1 DUP2 PUSH2 0x2273 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0xF5B DUP2 PUSH2 0x2D77 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x347 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x33C JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP3 PUSH1 0x20 SWAP3 PUSH2 0xFE7 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0xFF0 SWAP1 PUSH2 0x22BC JUMP JUMPDEST PUSH0 PUSH2 0xFDD JUMP JUMPDEST PUSH32 0xA7849E8E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x33C JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0x10A2 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x10C3 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x10CA JUMPI JUMPDEST PUSH2 0x10BB DUP2 DUP4 PUSH2 0x22EC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x25FF JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x1098 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x10B1 JUMP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x60 PUSH2 0x10EC PUSH2 0x21EA JUMP JUMPDEST PUSH2 0x10F5 DUP2 PUSH2 0x27D7 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP2 PUSH1 0x40 MLOAD SWAP4 AND DUP4 MSTORE PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0xFF6 JUMPI PUSH1 0x20 DUP2 PUSH2 0x117B PUSH32 0x48C5C3CCEC54C4E0EA08D83D838FA9BB725EB0B52C591CB00BD6E63BCA8C44F6 SWAP4 PUSH2 0x29E6 JUMP JUMPDEST PUSH2 0x1183 PUSH2 0x2A2E JUMP JUMPDEST DUP1 PUSH1 0x1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH2 0x11AA PUSH2 0x21EA JUMP JUMPDEST SWAP1 PUSH2 0x11B4 DUP3 PUSH2 0x2B9F JUMP JUMPDEST SWAP1 PUSH2 0x11BE DUP3 PUSH2 0x23D4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0x11E7 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0x11E3 DUP9 DUP3 PUSH2 0x2238 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x8 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x1200 DUP4 DUP9 PUSH2 0x2423 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x1215 DUP3 DUP10 PUSH2 0x2423 JUMP JUMPDEST MSTORE ADD PUSH2 0x11CE JUMP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH2 0xD7C PUSH2 0x1238 PUSH2 0x21EA JUMP JUMPDEST PUSH2 0x249E JUMP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH2 0x1257 PUSH2 0x21EA JUMP JUMPDEST SWAP1 PUSH2 0x1261 DUP3 PUSH2 0x2B9F JUMP JUMPDEST SWAP1 PUSH2 0x126B DUP3 PUSH2 0x23D4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0x1290 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0x11E3 DUP9 DUP3 PUSH2 0x2238 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x7 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x12A9 DUP4 DUP9 PUSH2 0x2423 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x12BE DUP3 DUP10 PUSH2 0x2423 JUMP JUMPDEST MSTORE ADD PUSH2 0x127B JUMP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0x136C JUMPI PUSH1 0x20 DUP2 PUSH2 0x1358 PUSH32 0xBF5AC0FC89BBF8819BE79F280146B65EA2AF2A9705CD9CFE0C9D93F6E87F307D SWAP4 PUSH2 0x29E6 JUMP JUMPDEST PUSH2 0x1360 PUSH2 0x2A2E JUMP JUMPDEST DUP1 PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x347 JUMPI PUSH2 0x13DC PUSH1 0x20 SWAP2 PUSH2 0x2357 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1405 PUSH2 0x21EA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1420 DUP3 PUSH2 0x2273 JUMP JUMPDEST SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP1 DUP4 MSTORE PUSH1 0xFF PUSH1 0x40 SWAP3 DUP4 SHR AND ISZERO ISZERO SWAP4 SWAP1 SWAP3 ADD DUP4 SWAP1 MSTORE DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x20 PUSH0 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH2 0x1484 PUSH2 0x21EA JUMP JUMPDEST PUSH2 0x148C PUSH2 0x2200 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 ISZERO ISZERO SWAP1 DUP2 DUP5 SUB PUSH2 0x347 JUMPI PUSH2 0x14A4 PUSH2 0x2988 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP2 DUP3 PUSH0 MSTORE DUP3 PUSH1 0x20 SWAP3 PUSH1 0x4 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE DUP7 PUSH0 EQ PUSH2 0x16F4 JUMPI DUP4 PUSH0 SWAP7 DUP8 SWAP3 JUMPDEST DUP10 ISZERO PUSH2 0x1679 JUMPI DUP5 DUP4 DUP8 DUP13 PUSH0 SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1664 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 JUMPDEST PUSH2 0x1579 DUP5 PUSH2 0x267F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1586 DUP3 PUSH2 0x2273 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP3 MSTORE PUSH1 0x3 PUSH2 0x15F6 DUP7 DUP5 ADD SWAP5 DUP7 DUP7 MSTORE DUP12 PUSH0 MSTORE PUSH1 0x2 DUP9 MSTORE PUSH1 0x40 DUP5 SWAP1 PUSH0 KECCAK256 SWAP6 MLOAD AND SWAP5 DUP1 SLOAD SWAP7 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP7 DUP8 PUSH9 0xFF0000000000000000 DUP1 SWAP11 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH2 0x267F JUMP JUMPDEST SWAP6 PUSH1 0x40 DUP4 SWAP1 MLOAD SWAP8 PUSH2 0x1606 DUP10 PUSH2 0x2273 JUMP JUMPDEST AND DUP8 MSTORE DUP1 DUP8 ADD SWAP6 DUP7 MSTORE DUP11 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 PUSH2 0x164A SWAP1 MLOAD SWAP3 DUP4 SWAP3 DUP4 SWAP1 SWAP3 SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x40 DUP4 ADD SWAP5 DUP4 MSTORE ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 DUP14 MLOAD DUP13 DUP2 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x40 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 DUP10 MLOAD SWAP6 DUP7 MSTORE AND SWAP4 LOG3 DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE RETURN JUMPDEST DUP5 DUP4 DUP8 DUP13 PUSH1 0x1 SLOAD SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1664 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 PUSH2 0x1570 JUMP JUMPDEST DUP4 PUSH0 SLOAD SWAP7 DUP8 SWAP3 PUSH2 0x14F5 JUMP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH2 0x1719 PUSH2 0x21EA JUMP JUMPDEST PUSH2 0x1722 DUP2 PUSH2 0x249E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1748 DUP4 PUSH2 0x2273 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH0 SLOAD SWAP4 DUP2 PUSH2 0x1898 JUMPI JUMPDEST POP PUSH2 0x1779 JUMPI STOP JUMPDEST PUSH2 0x1782 DUP4 PUSH2 0x267F JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1791 DUP5 PUSH2 0x2273 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x2 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x1810 DUP2 PUSH2 0x2D45 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x347 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x33C JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP4 PUSH2 0xFE7 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1772 JUMP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH2 0x18BD PUSH2 0x21EA JUMP JUMPDEST PUSH2 0x18C6 DUP2 PUSH2 0x249E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x18EC DUP4 PUSH2 0x2273 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH1 0x1 SLOAD SWAP4 DUP2 PUSH2 0x1A3D JUMPI JUMPDEST POP PUSH2 0x191E JUMPI STOP JUMPDEST PUSH2 0x1927 DUP4 PUSH2 0x267F JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1936 DUP5 PUSH2 0x2273 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x19B5 DUP2 PUSH2 0x2D77 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x347 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x33C JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP4 PUSH2 0xFE7 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1917 JUMP JUMPDEST PUSH2 0x2216 JUMP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1A6E PUSH2 0x21EA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1420 DUP3 PUSH2 0x2273 JUMP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH2 0xD7C PUSH2 0x1AC2 PUSH2 0x21EA JUMP JUMPDEST PUSH2 0x1ACB DUP2 PUSH2 0x27D7 JUMP JUMPDEST SWAP1 PUSH2 0x28D1 JUMP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH2 0x1AEA PUSH2 0x21EA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1AF7 DUP2 PUSH2 0x2742 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x1BE1 JUMPI PUSH2 0x1B0F DUP2 PUSH2 0x249E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1B56 DUP2 PUSH2 0x2D77 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x347 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x33C JUMPI PUSH32 0x47F70DDBC624C299CEF7841AAEA0A86B677C800203E953104E958C9EC9BDAB34 SWAP3 PUSH1 0x20 SWAP3 PUSH2 0xFE7 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0x370DA7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0xDE0AD9B58F16000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH2 0x1C44 PUSH2 0x21EA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1C51 DUP2 PUSH2 0x2742 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x1BE1 JUMPI PUSH2 0x1C69 DUP2 PUSH2 0x249E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1CB0 DUP2 PUSH2 0x2D45 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x347 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x33C JUMPI PUSH32 0xB7CF36369623C01ED7B2EAFC4025224E924A2836D5FB49428A0F65417586BF5C SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x1D3B JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x1D44 SWAP1 PUSH2 0x22BC JUMP JUMPDEST DUP5 PUSH2 0xFDD JUMP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x20 PUSH2 0x13DC PUSH1 0x24 CALLDATALOAD PUSH1 0x4 CALLDATALOAD PUSH2 0x2701 JUMP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1D8C PUSH2 0x21EA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH2 0x1DBD PUSH2 0x21EA JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x33C JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0x217C JUMPI JUMPDEST POP AND SWAP3 ADDRESS DUP5 EQ PUSH2 0x2154 JUMPI AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH2 0x2128 JUMPI DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x5C15A0B400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x40 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x33C JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0x2104 JUMPI JUMPDEST POP PUSH2 0x1EC7 SWAP1 PUSH2 0x267F JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1ED5 DUP3 PUSH2 0x2273 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP4 AND DUP3 MSTORE DUP4 DUP3 ADD SWAP1 ISZERO ISZERO DUP2 MSTORE DUP5 PUSH0 MSTORE PUSH1 0x2 DUP5 MSTORE DUP3 PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND SWAP2 DUP1 SLOAD SWAP2 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP4 DUP5 PUSH9 0xFF0000000000000000 DUP1 SWAP6 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP2 PUSH32 0x7A2B97DC00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP6 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 DUP4 PUSH1 0x24 DUP2 DUP11 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x33C JUMPI PUSH0 SWAP1 PUSH0 SWAP5 PUSH2 0x20D0 JUMPI JUMPDEST POP PUSH2 0x1F8B SWAP1 PUSH2 0x267F JUMP JUMPDEST SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x1F9A DUP8 PUSH2 0x2273 JUMP JUMPDEST AND DUP6 MSTORE DUP6 DUP6 ADD SWAP4 ISZERO ISZERO DUP5 MSTORE DUP7 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xB8E059B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL PUSH0 SWAP2 DUP2 PUSH2 0x209E JUMPI JUMPDEST POP SWAP4 DUP3 SWAP2 PUSH1 0x24 SWAP6 PUSH2 0x208C JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x252AAB500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL PUSH0 SWAP4 DUP2 PUSH2 0x205D JUMPI JUMPDEST POP PUSH2 0x204E JUMPI STOP JUMPDEST PUSH1 0x6 SWAP2 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP1 SWAP4 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2085 JUMPI JUMPDEST PUSH2 0x2075 DUP2 DUP4 PUSH2 0x22EC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x347 JUMPI MLOAD SWAP3 DUP5 PUSH2 0x2047 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x206B JUMP JUMPDEST DUP5 PUSH0 MSTORE PUSH1 0x5 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE DUP6 PUSH2 0x200C JUMP JUMPDEST SWAP2 POP SWAP4 DUP3 DUP3 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x20C9 JUMPI JUMPDEST PUSH2 0x20B6 DUP2 DUP4 PUSH2 0x22EC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x347 JUMPI SWAP1 MLOAD SWAP1 SWAP4 PUSH1 0x24 PUSH2 0x2000 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x20AC JUMP JUMPDEST PUSH2 0x1F8B SWAP5 POP PUSH2 0x20F7 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x20FD JUMPI JUMPDEST PUSH2 0x20EF DUP2 DUP4 PUSH2 0x22EC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x233A JUMP JUMPDEST SWAP4 PUSH2 0x1F81 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x20E5 JUMP JUMPDEST PUSH2 0x1EC7 SWAP3 POP PUSH2 0x2122 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x20FD JUMPI PUSH2 0x20EF DUP2 DUP4 PUSH2 0x22EC JUMP JUMPDEST SWAP2 PUSH2 0x1EBD JUMP JUMPDEST POP PUSH32 0xDB771C8000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xB82FD5BF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 SWAP3 POP DUP5 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x21AF JUMPI JUMPDEST PUSH2 0x2195 DUP2 DUP4 PUSH2 0x22EC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x347 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x347 JUMPI DUP2 SWAP1 DUP6 PUSH2 0x1E25 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x218B JUMP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x21DA PUSH2 0x21EA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x6 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x347 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x347 JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x6F05B59D3B20000 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x225F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2251 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x228F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x228F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x228F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x228F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x347 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x347 JUMPI PUSH2 0x2354 PUSH1 0x20 DUP4 MLOAD SWAP4 ADD PUSH2 0x232D JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x23B6 DUP2 PUSH2 0x22D0 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x228F JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x23DE DUP3 PUSH2 0x23BC JUMP JUMPDEST PUSH2 0x23EB PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x22EC JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x2419 DUP3 SWAP5 PUSH2 0x23BC JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x2437 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x228F JUMPI PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 PUSH0 PUSH1 0x1F PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP4 DUP4 PUSH1 0x44 PUSH1 0x20 SWAP7 DUP5 DUP9 DUP3 ADD SWAP5 PUSH32 0xFA399F2A00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x2510 DUP2 PUSH2 0x22D0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP12 PUSH1 0x4 DUP7 ADD MSTORE MLOAD DUP1 SWAP2 DUP2 PUSH1 0x24 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY DUP6 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x33C JUMPI PUSH2 0x2590 JUMPI POP POP JUMP JUMPDEST RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x259F DUP2 DUP5 PUSH2 0x22EC JUMP JUMPDEST DUP3 ADD SWAP2 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x347 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x347 JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x347 JUMPI DUP3 MLOAD SWAP1 PUSH2 0x25D6 DUP3 PUSH2 0x2464 JUMP JUMPDEST SWAP1 PUSH2 0x25E4 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x22EC JUMP JUMPDEST DUP3 DUP3 MSTORE DUP4 DUP4 DUP7 ADD ADD GT PUSH2 0x347 JUMPI DUP2 DUP4 PUSH0 SWAP6 ADD DUP5 DUP4 ADD MCOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x347 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x347 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x347 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x2639 DUP2 PUSH2 0x23BC JUMP JUMPDEST SWAP4 PUSH2 0x2647 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x22EC JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x347 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x2670 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x2662 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x2694 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x70F JUMPI JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x70F JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x70F JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x272E PUSH5 0x174876E800 SWAP3 DUP4 SWAP3 PUSH2 0x2727 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP4 DUP4 SUB DUP4 DUP6 LT MUL PUSH2 0x26EE JUMP JUMPDEST DIV SWAP1 PUSH2 0x26C4 JUMP JUMPDEST DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x70F JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH2 0x2755 DUP3 PUSH2 0x27D7 JUMP JUMPDEST AND DUP1 ISZERO PUSH2 0x2796 JUMPI CALLER SUB PUSH2 0x2766 JUMPI POP POP JUMP JUMPDEST PUSH32 0xFBECDBF400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP PUSH32 0x8BCBF35300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x347 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x60 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 DUP8 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x28C7 JUMPI PUSH0 SWAP2 PUSH2 0x284E JUMPI JUMPDEST POP ADD MLOAD AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x28BF JUMPI JUMPDEST DUP2 PUSH2 0x2869 PUSH1 0x60 SWAP4 DUP4 PUSH2 0x22EC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x347 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x60 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x228F JUMPI PUSH2 0x28B5 SWAP2 DUP5 SWAP2 DUP3 MSTORE PUSH2 0x289C DUP2 PUSH2 0x27C3 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x28AA PUSH1 0x20 DUP3 ADD PUSH2 0x27C3 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE ADD PUSH2 0x27C3 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE PUSH0 PUSH2 0x2847 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x285C JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH2 0x28DB DUP3 PUSH2 0x2B9F JUMP JUMPDEST SWAP3 SWAP1 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x28ED JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x2903 DUP4 DUP7 PUSH2 0x2423 JUMP JUMPDEST MLOAD AND DUP2 DUP7 AND DUP1 PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP5 DUP6 PUSH0 KECCAK256 DUP6 PUSH0 MSTORE DUP3 MSTORE DUP6 PUSH0 KECCAK256 SLOAD SWAP6 DUP7 PUSH2 0x2935 JUMPI JUMPDEST POP POP POP POP POP POP POP ADD PUSH2 0x28DF JUMP JUMPDEST PUSH32 0x938F3A3A03EE425CCC0F8010B0468938CBAFD3750FA43BBDF09C6F75E97E51F9 SWAP4 DUP6 PUSH0 MSTORE DUP4 MSTORE DUP1 PUSH0 KECCAK256 DUP7 PUSH0 MSTORE DUP4 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE PUSH2 0x2974 DUP8 DUP14 DUP9 PUSH2 0x2DA9 JUMP JUMPDEST MLOAD SWAP6 DUP7 MSTORE DUP11 AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2928 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x29BA JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x70F JUMPI SUB PUSH2 0x2A06 JUMPI JUMP JUMPDEST PUSH32 0x833FB3CE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x2A5A PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x2357 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x33C JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x2B7D JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x33C JUMPI PUSH0 SWAP3 PUSH2 0x2B47 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x2B1F JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2B76 JUMPI JUMPDEST PUSH2 0x2B5E DUP2 DUP4 PUSH2 0x22EC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x347 JUMPI PUSH2 0x2B6F SWAP1 PUSH2 0x232D JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x2B16 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2B54 JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x2B98 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x10CA JUMPI PUSH2 0x10BB DUP2 DUP4 PUSH2 0x22EC JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x2AC5 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x33C JUMPI PUSH0 SWAP4 PUSH2 0x2C15 JUMPI JUMPDEST POP POP DUP2 MLOAD SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2C28 DUP2 DUP4 PUSH2 0x22EC JUMP JUMPDEST DUP2 ADD PUSH1 0x20 SWAP2 DUP3 DUP2 DUP4 SUB SLT PUSH2 0x347 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x347 JUMPI ADD SWAP3 DUP2 PUSH1 0x1F DUP6 ADD SLT ISZERO PUSH2 0x347 JUMPI DUP4 MLOAD PUSH2 0x2C60 DUP2 PUSH2 0x23BC JUMP JUMPDEST SWAP5 PUSH2 0x2C6E PUSH1 0x40 MLOAD SWAP7 DUP8 PUSH2 0x22EC JUMP JUMPDEST DUP2 DUP7 MSTORE DUP5 DUP1 DUP8 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP4 DUP5 GT PUSH2 0x347 JUMPI DUP5 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x2C9B JUMPI POP POP POP POP POP SWAP1 PUSH0 DUP1 PUSH2 0x2C0E JUMP JUMPDEST DUP2 MLOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x347 JUMPI DUP2 MSTORE SWAP1 DUP5 ADD SWAP1 DUP5 ADD PUSH2 0x2C87 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 DUP5 DUP2 AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP5 DUP6 PUSH2 0x2CEC JUMPI JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 PUSH2 0x2D31 DUP8 PUSH32 0x1C2887FCB98F75E66BB9A36311F2D3D22FB204E6362106F30E9DF7EAF63131B5 SWAP6 PUSH1 0x20 SWAP6 DUP9 PUSH0 MSTORE PUSH1 0x7 DUP8 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP11 PUSH0 MSTORE DUP8 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH2 0x2DA9 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2CE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH2 0x2354 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x2701 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH2 0x2354 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x2701 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP2 MSTORE SWAP3 PUSH2 0x2E3D SWAP3 PUSH0 SWAP3 DUP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2E06 PUSH1 0x64 DUP9 PUSH2 0x22EC JUMP JUMPDEST AND SWAP5 MLOAD SWAP1 DUP3 DUP7 GAS CALL RETURNDATASIZE ISZERO PUSH2 0x2EA1 JUMPI RETURNDATASIZE SWAP1 PUSH2 0x2E1F DUP3 PUSH2 0x2464 JUMP JUMPDEST SWAP2 PUSH2 0x2E2D PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x22EC JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMPDEST DUP4 PUSH2 0x2EA9 JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x2E7E JUMPI JUMPDEST POP POP PUSH2 0x2E53 JUMPI POP JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 SWAP3 POP SWAP1 PUSH1 0x20 SWAP2 DUP2 ADD SUB SLT PUSH2 0x347 JUMPI PUSH1 0x20 PUSH2 0x2E99 SWAP2 ADD PUSH2 0x232D JUMP JUMPDEST ISZERO PUSH0 DUP1 PUSH2 0x2E4A JUMP JUMPDEST PUSH1 0x60 SWAP1 PUSH2 0x2E37 JUMP JUMPDEST SWAP1 PUSH2 0x2EE6 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x2EBE JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x2F2C JUMPI JUMPDEST PUSH2 0x2EF7 JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x2EEF JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAC PUSH13 0x905FB049F35A293C7B6BAE425 LOG0 TIMESTAMP BASEFEE 0xC1 0xCE 0xD6 CALLDATACOPY EXTCODECOPY 0xCF 0xC0 0xB3 PUSH30 0xD9DF6D131C64736F6C634300081B00330000000000000000000000000000 ","sourceMap":"307:1106:89:-:0;;;;;;;;;;;;;-1:-1:-1;;307:1106:89;;;;-1:-1:-1;;;;;307:1106:89;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;307:1106:89;;;;;;;;971:4:67;1347:46:37;;923:14:40;;;409::72;;307:1106:89;;;;;;;;1347:46:37;307:1106:89;;;;;923:14:40;307:1106:89;;;;;;;;;;;;;;;409:14:72;307:1106:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;307:1106:89;;;;;;-1:-1:-1;307:1106:89;;;;;-1:-1:-1;307:1106:89"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":8704,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_19788":{"entryPoint":8682,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":10179,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_array_uint256_dyn_fromMemory":{"entryPoint":9758,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":9005,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":9727,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint256t_bool_fromMemory":{"entryPoint":9018,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":8760,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_uint256_bool":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"allocate_and_zero_memory_array_array_uint256_dyn":{"entryPoint":9172,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_uint256_dyn":{"entryPoint":9148,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":9316,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_uint256":{"entryPoint":9924,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256":{"entryPoint":9966,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256_19950":{"entryPoint":9937,"id":null,"parameterSlots":1,"returnSlots":1},"external_fun_MAX_PROTOCOL_SWAP_FEE_PERCENTAGE":{"entryPoint":8726,"id":null,"parameterSlots":0,"returnSlots":0},"finalize_allocation":{"entryPoint":8940,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_19790":{"entryPoint":8819,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_19822":{"entryPoint":8892,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_45442":{"entryPoint":8912,"id":null,"parameterSlots":1,"returnSlots":0},"fun_authenticateCaller":{"entryPoint":10798,"id":5469,"parameterSlots":0,"returnSlots":0},"fun_collectAggregateFees":{"entryPoint":9374,"id":14883,"parameterSlots":1,"returnSlots":0},"fun_computeAggregateFeePercentage":{"entryPoint":9985,"id":15530,"parameterSlots":2,"returnSlots":1},"fun_ensureCallerIsPoolCreator":{"entryPoint":10050,"id":15566,"parameterSlots":1,"returnSlots":0},"fun_ensureOnlyVault":{"entryPoint":10632,"id":28148,"parameterSlots":0,"returnSlots":0},"fun_ensureValidPrecision":{"entryPoint":10726,"id":16324,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":9047,"id":5487,"parameterSlots":1,"returnSlots":1},"fun_getAggregateFeePercentage":{"entryPoint":11639,"id":15500,"parameterSlots":1,"returnSlots":1},"fun_getAggregateFeePercentage_19821":{"entryPoint":11589,"id":15500,"parameterSlots":1,"returnSlots":1},"fun_getPoolCreator":{"entryPoint":10199,"id":15609,"parameterSlots":1,"returnSlots":1},"fun_getPoolTokensAndCount":{"entryPoint":11167,"id":15590,"parameterSlots":1,"returnSlots":2},"fun_safeTransfer":{"entryPoint":11689,"id":40221,"parameterSlots":3,"returnSlots":0},"fun_toUint64":{"entryPoint":9855,"id":43927,"parameterSlots":1,"returnSlots":1},"fun_verifyCallResultFromTarget":{"entryPoint":11945,"id":40673,"parameterSlots":3,"returnSlots":1},"fun_withdrawPoolCreatorFees":{"entryPoint":10449,"id":16227,"parameterSlots":2,"returnSlots":0},"fun_withdrawProtocolFees":{"entryPoint":11443,"id":16123,"parameterSlots":3,"returnSlots":0},"memory_array_index_access_contract_IERC20_dyn":{"entryPoint":9251,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"5427":[{"length":32,"start":9090}],"5654":[{"length":32,"start":4196},{"length":32,"start":4836},{"length":32,"start":10899}],"28110":[{"length":32,"start":630},{"length":32,"start":918},{"length":32,"start":1057},{"length":32,"start":1347},{"length":32,"start":1457},{"length":32,"start":2189},{"length":32,"start":2299},{"length":32,"start":3305},{"length":32,"start":3579},{"length":32,"start":3889},{"length":32,"start":6118},{"length":32,"start":6539},{"length":32,"start":6956},{"length":32,"start":7302},{"length":32,"start":7668},{"length":32,"start":9568},{"length":32,"start":10262},{"length":32,"start":10642},{"length":32,"start":11230}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f905f3560e01c9081630252aab5146121b6575080630874327f14611da35780630b8e059b14611d6b5780630ddd60c614611d4a5780631377c16c14611c2b5780632772d15614611a485780632e1d388d14611c095780633af5271214611ad157806352f125f014611aa657806355fb76af14611a895780635c15a0b414611a4d5780635e32e4e814611a4857806371447ea8146118a357806371ecc8fb146116ff57806377ff76e71461146b5780637869ee181461144f5780637a2b97dc146113e4578063851c1bb3146113945780638a3c5c69146113085780638d928af8146112c55780638df44c541461123d5780638f4ab9ca1461121c5780639e95f3fd14611190578063a93df2a41461112b578063aa9fea87146110d1578063aaabadc51461101e578063abaa335614610e65578063b53a70b214610d7e578063b8abccd114610cb3578063c673bdaf14610c76578063cf7b287f14610c0c578063f29aaa5814610b9b578063f706144514610b64578063fa399f2a146103ba578063fbfa77cf146103765763fd267f39146101aa575f80fd5b34610373576040600319360112610373576101c36121ea565b602435906101cf612a2e565b6706f05b59d3b20000821161034b576101e7826129e6565b6101f08161249e565b6101f98261267f565b9160405161020681612273565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600260205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f000000000000000000000000000000000000000000000000000000000000000016916102a081612d45565b833b15610347576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af190811561033c577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e9260209261032d575b50604051908152a280f35b610336906122bc565b5f610322565b6040513d5f823e3d90fd5b5f80fd5b6004837f7e6eb7fb000000000000000000000000000000000000000000000000000000008152fd5b80fd5b503461037357806003193601126103735760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b5034610373576020600319360112610373576103d46121ea565b6103dc612988565b6040517f8f4ab9ca0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201528281602481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1908115610b595783908492610af4575b506001600160a01b0383165f52600260205267ffffffffffffffff60405f20541690600560205260405f2054905f928215159384610aea575b84610ada575b61049b87612b9f565b94905f5b86811061084b578a8a8a6001600160a01b0382165f52600360205267ffffffffffffffff60405f205416905f92600660205260405f2054925f8415159485610841575b8561082f575b6104f184612b9f565b96905f5b888110610500578a80f35b61050a8189612423565b51610518575b6001016104f5565b986001600160a01b0361052b8b84612423565b5116906105388b8a612423565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561082b57604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201528181606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156108205790829161080c575b506107df57505f99816105f4828b612423565b516040519081527fe505e41b0d437b47350a9990142ccf38acb11ffa0e5af8f973b9e172f3d5d5e260206001600160a01b038c1692a383156107645761063a818a612423565b51861561073c5761064a906126d1565b6001670de0b6b3a764000061068b8a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848c8783010401901515026126ee565b928301040190151502916001600160a01b0389165f52600760205260405f20815f5260205260405f206106bf8482546126c4565b90556106cb828b612423565b5190818481031161070f57600193610705916001600160a01b038c165f52600860205260405f20905f5260205260405f20920382546126c4565b90555b9050610510565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b600191856107a957610776828b612423565b51906001600160a01b038a165f52600760205260405f20905f526020526107a260405f209182546126c4565b9055610708565b6107b3828b612423565b51906001600160a01b038a165f52600860205260405f20905f526020526107a260405f209182546126c4565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b610815906122bc565b61037357808d6105e1565b6040513d84823e3d90fd5b5080fd5b905061083b8183612701565b906104e8565b82151595506104e2565b6108558187612423565b51610863575b60010161049f565b6001600160a01b036108758284612423565b5116906108828188612423565b516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b1561034757604051907fae63932900000000000000000000000000000000000000000000000000000000825283600483015230602483015260448201525f81606481836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561033c57610acb575b50818b7fae7ebad9fc3d1d17965f063fa520d393595e2ef6c8e22ae8413b60900444e19f60206001600160a01b03610960868d612423565b51936040519485521692a38815610a505761097b8188612423565b51851561073c5761098b906126d1565b6001670de0b6b3a76400006109cc897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94848b8783010401901515026126ee565b928301040190151502916001600160a01b038c165f52600760205260405f20815f5260205260405f20610a008482546126c4565b9055610a0c8289612423565b5190818481031161070f57600193610a46916001600160a01b038f165f52600860205260405f20905f5260205260405f20920382546126c4565b90555b905061085b565b60019184610a9557610a628289612423565b51906001600160a01b038d165f52600760205260405f20905f52602052610a8e60405f209182546126c4565b9055610a49565b610a9f8289612423565b51906001600160a01b038d165f52600860205260405f20905f52602052610a8e60405f209182546126c4565b610ad4906122bc565b5f610928565b50610ae58382612701565b610492565b811515945061048c565b9150503d8084833e610b0681836122ec565b810190604081830312610b555780519167ffffffffffffffff92838111610b515781610b3391840161261e565b926020830151908111610b5157610b4a920161261e565b905f610453565b8580fd5b8380fd5b6040513d85823e3d90fd5b503461037357604060031936011261037357610b98610b816121ea565b610b89612200565b90610b9381612742565b6128d1565b80f35b50346103735760208060031936011261082b57610bbe610bb96121ea565b612b9f565b926040519260408401906040855283518092526020606086019401925b828110610bef578580868960208301520390f35b83516001600160a01b031685529381019392810192600101610bdb565b503461037357604060031936011261037357610c266121ea565b610c2e612200565b90610c37612a2e565b610c4081612b9f565b9290845b848110610c4f578580f35b80610c706001600160a01b03610c6760019486612423565b51168587612cb3565b01610c44565b50346103735760206003193601126103735760ff60406020926001600160a01b03610c9f6121ea565b168152600484522054166040519015158152f35b503461034757604060031936011261034757610ccd6121ea565b6001600160a01b038082165f52600560205260243560405f20557f00000000000000000000000000000000000000000000000000000000000000001690610d1381612d45565b823b15610347576040517fa03b23ef0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152905f908290604490829084905af1801561033c57610d72575080f35b610d7c91506122bc565b005b3461034757606060031936011261034757610d976121ea565b610d9f612200565b604435906001600160a01b039283831680840361034757604090610dc1612a2e565b60448251809781937fc9c1661b000000000000000000000000000000000000000000000000000000008352818716600484015260248301527f0000000000000000000000000000000000000000000000000000000000000000165afa801561033c57610e32575b610d7c9350612cb3565b6040843d604011610e5d575b81610e4b604093836122ec565b8101031261034757610d7c9350610e28565b3d9150610e3e565b3461034757604060031936011261034757610e7e6121ea565b60243590610e8a612a2e565b6706f05b59d3b200008211610ff657610ea2826129e6565b610eab8161249e565b610eb48261267f565b91604051610ec181612273565b67ffffffffffffffff80941681526020810190600182526001600160a01b039182851695865f52600360205260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f00000000000000000000000000000000000000000000000000000000000000001691610f5b81612d77565b833b15610347576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af190811561033c577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd92602092610fe7575b50604051908152a2005b610ff0906122bc565b5f610fdd565b7fa7849e8e000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610347575f600319360112610347576040517faaabadc50000000000000000000000000000000000000000000000000000000081526001600160a01b036020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa90811561033c576020925f926110a2575b5060405191168152f35b6110c3919250833d85116110ca575b6110bb81836122ec565b8101906125ff565b9083611098565b503d6110b1565b346103475760206003193601126103475760606110ec6121ea565b6110f5816127d7565b906001600160a01b038091165f52600560205260405f2054600660205260405f2054916040519316835260208301526040820152f35b34610347576020600319360112610347576004356706f05b59d3b200008111610ff65760208161117b7f48c5c3ccec54c4e0ea08d83d838fa9bb725eb0b52c591cb00bd6e63bca8c44f6936129e6565b611183612a2e565b80600155604051908152a1005b3461034757602080600319360112610347576111aa6121ea565b906111b482612b9f565b906111be826123d4565b925f946001600160a01b03809116955b8481106111e757604051806111e38882612238565b0390f35b600190875f526008845260405f20836112008388612423565b51165f52845260405f20546112158289612423565b52016111ce565b3461034757602060031936011261034757610d7c6112386121ea565b61249e565b3461034757602080600319360112610347576112576121ea565b9061126182612b9f565b9061126b826123d4565b925f946001600160a01b03809116955b84811061129057604051806111e38882612238565b600190875f526007845260405f20836112a98388612423565b51165f52845260405f20546112be8289612423565b520161127b565b34610347575f6003193601126103475760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610347576020600319360112610347576004356706f05b59d3b20000811161136c576020816113587fbf5ac0fc89bbf8819be79f280146b65ea2af2a9705cd9cfe0c9d93f6e87f307d936129e6565b611360612a2e565b805f55604051908152a1005b7f7e6eb7fb000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610347576020600319360112610347576004357fffffffff0000000000000000000000000000000000000000000000000000000081168103610347576113dc602091612357565b604051908152f35b34610347576020600319360112610347576001600160a01b036114056121ea565b165f526003602052602060405f206040519061142082612273565b5467ffffffffffffffff811680835260ff604092831c1615159390920183905280519182526020820192909252f35b34610347575f6003193601126103475760205f54604051908152f35b34610347576060600319360112610347576114846121ea565b61148c612200565b906044359182151590818403610347576114a4612988565b6001600160a01b0380931691825f52826020926004845260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055865f146116f457835f9687925b8915611679578483878c5f9b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611664967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb985b6115798461267f565b6040519061158682612273565b67ffffffffffffffff809116825260036115f6868401948686528b5f5260028852604084905f209551169480549651151560401b967fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000968768ff0000000000000000809a1692161717905561267f565b9560408390519761160689612273565b1687528087019586528a5f525260405f209451169184549351151560401b16921617179055604061164a905192839283909291602090604083019483521515910152565b0390a28d518c815290151560208201529081906040820190565b0390a289519586521693a38351928352820152f35b8483878c6001549b7fa34ad86562f9716c2f1e723934cc63f44a9b4695cb8535c30dd8308d03a7856460409f7fd9725c347996d9a5d6001b5f7c2a2515d365258012fceff4f49e84310ed079129a8f96611664967fce1d009285405b74cf77294916c17664de2c84eef81225c71f265f823b358bcb98611570565b835f549687926114f5565b3461034757602080600319360112610347576117196121ea565b6117228161249e565b6001600160a01b039182821692835f526002825260405f20906040519161174883612273565b549167ffffffffffffffff9060ff8285169485835260401c1615908582159101525f549381611898575b5061177957005b6117828361267f565b90806040519261179184612273565b168252848201905f8252875f526002865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f0000000000000000000000000000000000000000000000000000000000000000169261181081612d45565b843b15610347576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af192831561033c577f97cff4b6e6d80e307faab8b730d9f69264e860f2e0e10cfb8cdaf8a2f44e839e93610fe75750604051908152a2005b905083141587611772565b3461034757602080600319360112610347576118bd6121ea565b6118c68161249e565b6001600160a01b039182821692835f526003825260405f2090604051916118ec83612273565b549167ffffffffffffffff9060ff8285169485835260401c1615908582159101526001549381611a3d575b5061191e57005b6119278361267f565b90806040519261193684612273565b168252848201905f8252875f526003865260405f209251167fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000068ff000000000000000084549351151560401b169216171790557f000000000000000000000000000000000000000000000000000000000000000016926119b581612d77565b843b15610347576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152925f908490604490829084905af192831561033c577faf47449d1c3597ccc9f5ec3acad03cef57aa90a719000441b320687087948efd93610fe75750604051908152a2005b905083141587611917565b612216565b34610347576020600319360112610347576001600160a01b03611a6e6121ea565b165f526002602052602060405f206040519061142082612273565b34610347575f600319360112610347576020600154604051908152f35b3461034757602060031936011261034757610d7c611ac26121ea565b611acb816127d7565b906128d1565b3461034757604060031936011261034757611aea6121ea565b60243590611af781612742565b670de0ad9b58f160008211611be157611b0f8161249e565b6001600160a01b039182821692835f5260066020528160405f20557f00000000000000000000000000000000000000000000000000000000000000001691611b5681612d77565b833b15610347576040517fe253670a0000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af190811561033c577f47f70ddbc624c299cef7841aaea0a86b677c800203e953104e958c9ec9bdab3492602092610fe75750604051908152a2005b7f0370da74000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610347575f600319360112610347576020604051670de0ad9b58f160008152f35b3461034757604060031936011261034757611c446121ea565b60243590611c5181612742565b670de0ad9b58f160008211611be157611c698161249e565b6001600160a01b039182821692835f5260056020528160405f20557f00000000000000000000000000000000000000000000000000000000000000001691611cb081612d45565b833b15610347576040517f5e0b06f40000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152915f908390604490829084905af190811561033c577fb7cf36369623c01ed7b2eafc4025224e924a2836d5fb49428a0f65417586bf5c92602092611d3b5750604051908152a2005b611d44906122bc565b84610fdd565b346103475760406003193601126103475760206113dc602435600435612701565b34610347576020600319360112610347576001600160a01b03611d8c6121ea565b165f526005602052602060405f2054604051908152f35b346103475760208060031936011261034757611dbd6121ea565b906001600160a01b036040517f85f2dbd40000000000000000000000000000000000000000000000000000000081528281600481857f0000000000000000000000000000000000000000000000000000000000000000165afa801561033c5782915f9161217c575b501692308414612154571690815f526004815260ff60405f20541661212857815f526004815260405f2060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556040517f5c15a0b4000000000000000000000000000000000000000000000000000000008152826004820152604081602481875afa90811561033c575f905f92612104575b50611ec79061267f565b9060405190611ed582612273565b67ffffffffffffffff80931682528382019015158152845f52600284528260405f209251169180549151151560401b917fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000938468ff0000000000000000809516921617179055604051917f7a2b97dc0000000000000000000000000000000000000000000000000000000083528560048401526040836024818a5afa92831561033c575f905f946120d0575b50611f8b9061267f565b938060405195611f9a87612273565b1685528585019315158452865f526003865260405f209451169184549351151560401b169216171790556040517f0b8e059b0000000000000000000000000000000000000000000000000000000081528260048201528181602481875afa5f918161209e575b5093829160249561208c575b50604051948580927f0252aab50000000000000000000000000000000000000000000000000000000082528660048301525afa5f938161205d575b5061204e57005b6006915f525260405f20555f80f35b9093508181813d8311612085575b61207581836122ec565b8101031261034757519284612047565b503d61206b565b845f526005835260405f20558561200c565b9150938282813d83116120c9575b6120b681836122ec565b8101031261034757905190936024612000565b503d6120ac565b611f8b94506120f7915060403d6040116120fd575b6120ef81836122ec565b81019061233a565b93611f81565b503d6120e5565b611ec79250612122915060403d6040116120fd576120ef81836122ec565b91611ebd565b507fdb771c80000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7fb82fd5bf000000000000000000000000000000000000000000000000000000005f5260045ffd5b809250848092503d83116121af575b61219581836122ec565b810103126103475751818116810361034757819085611e25565b503d61218b565b34610347576020600319360112610347576020906001600160a01b036121da6121ea565b165f526006825260405f20548152f35b600435906001600160a01b038216820361034757565b602435906001600160a01b038216820361034757565b34610347575f6003193601126103475760206040516706f05b59d3b200008152f35b60209060206040818301928281528551809452019301915f5b82811061225f575050505090565b835185529381019392810192600101612251565b6040810190811067ffffffffffffffff82111761228f57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161228f57604052565b6060810190811067ffffffffffffffff82111761228f57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761228f57604052565b5190811515820361034757565b91908260409103126103475761235460208351930161232d565b90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526123b6816122d0565b51902090565b67ffffffffffffffff811161228f5760051b60200190565b906123de826123bc565b6123eb60405191826122ec565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061241982946123bc565b0190602036910137565b80518210156124375760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b67ffffffffffffffff811161228f57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0905f601f6001600160a01b036040519383604460209684888201947ffa399f2a00000000000000000000000000000000000000000000000000000000865216602482015260248152612510816122d0565b604051988996879586937f48c894910000000000000000000000000000000000000000000000000000000085528b60048601525180918160248701528686015e85858286010152011681010301927f0000000000000000000000000000000000000000000000000000000000000000165af1801561033c57612590575050565b3d805f843e61259f81846122ec565b82019181818403126103475780519067ffffffffffffffff821161034757019180601f84011215610347578251906125d682612464565b906125e460405192836122ec565b8282528383860101116103475781835f95018483015e010152565b9081602091031261034757516001600160a01b03811681036103475790565b9080601f8301121561034757815190602091612639816123bc565b9361264760405195866122ec565b81855260208086019260051b82010192831161034757602001905b828210612670575050505090565b81518152908301908301612662565b67ffffffffffffffff90818111612694571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f52604060045260245260445ffd5b9190820180921161070f57565b90670de0b6b3a76400009182810292818404149015171561070f57565b8181029291811591840414171561070f57565b9061272e64174876e800928392612727670de0b6b3a764000091838303838510026126ee565b04906126c4565b0481810291818304149015171561070f5790565b6001600160a01b039081612755826127d7565b168015612796573303612766575050565b7ffbecdbf4000000000000000000000000000000000000000000000000000000005f52336004521660245260445ffd5b507f8bcbf353000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b51906001600160a01b038216820361034757565b604080517fe9ddeb260000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201526060816024817f000000000000000000000000000000000000000000000000000000000000000087165afa9081156128c7575f9161284e575b5001511690565b90506060813d6060116128bf575b81612869606093836122ec565b81010312610347578151906060820182811067ffffffffffffffff82111761228f576128b5918491825261289c816127c3565b84526128aa602082016127c3565b6020850152016127c3565b828201525f612847565b3d915061285c565b82513d5f823e3d90fd5b906128db82612b9f565b92905f5b8481106128ed575050505050565b6001906001600160a01b03806129038386612423565b5116818616805f5260086020818152604094855f20855f528252855f20549586612935575b50505050505050016128df565b7f938f3a3a03ee425ccc0f8010b0468938cbafd3750fa43bbdf09c6f75e97e51f993855f528352805f20865f5283525f81812055612974878d88612da9565b519586528a1694a45f808080808080612928565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036129ba57565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b64174876e80080820481810291818304149015171561070f5703612a0657565b7f833fb3ce000000000000000000000000000000000000000000000000000000005f5260045ffd5b612a5a7fffffffff000000000000000000000000000000000000000000000000000000005f3516612357565b6001600160a01b036040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa90811561033c5784925f92612b7d575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa91821561033c575f92612b47575b505015612b1f57565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d8311612b76575b612b5e81836122ec565b8101031261034757612b6f9061232d565b5f80612b16565b503d612b54565b6064919250612b9890843d86116110ca576110bb81836122ec565b9190612ac5565b906001600160a01b0380604051937fca4f28030000000000000000000000000000000000000000000000000000000085521660048401525f83602481847f0000000000000000000000000000000000000000000000000000000000000000165afa92831561033c575f93612c15575b5050815190565b909192503d805f833e612c2881836122ec565b810160209182818303126103475780519067ffffffffffffffff821161034757019281601f85011215610347578351612c60816123bc565b94612c6e60405196876122ec565b818652848087019260051b820101938411610347578401905b838210612c9b575050505050905f80612c0e565b81518381168103610347578152908401908401612c87565b91906001600160a01b0380931690815f52600760205260405f209284811693845f5260205260405f20549485612cec575b505050505050565b82612d31877f1c2887fcb98f75e66bb9a36311f2d3d22fb204e6362106f30e9df7eaf63131b595602095885f526007875260405f208a5f5287525f6040812055612da9565b6040519687521694a45f8080808080612ce4565b6001600160a01b03165f52600260205261235467ffffffffffffffff60405f205416600560205260405f205490612701565b6001600160a01b03165f52600360205261235467ffffffffffffffff60405f205416600660205260405f205490612701565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082019081526001600160a01b03938416602483015260448083019590955293815292612e3d925f9283929190612e066064886122ec565b1694519082865af13d15612ea1573d90612e1f82612464565b91612e2d60405193846122ec565b82523d5f602084013e5b83612ea9565b8051908115159182612e7e575b5050612e535750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8192509060209181010312610347576020612e99910161232d565b155f80612e4a565b606090612e37565b90612ee65750805115612ebe57805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580612f2c575b612ef7575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15612eef56fea2646970667358221220ac6c0905fb049f35a293c7b6bae425a04248c1ced6373ccfc0b37dd9df6d131c64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP1 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x252AAB5 EQ PUSH2 0x21B6 JUMPI POP DUP1 PUSH4 0x874327F EQ PUSH2 0x1DA3 JUMPI DUP1 PUSH4 0xB8E059B EQ PUSH2 0x1D6B JUMPI DUP1 PUSH4 0xDDD60C6 EQ PUSH2 0x1D4A JUMPI DUP1 PUSH4 0x1377C16C EQ PUSH2 0x1C2B JUMPI DUP1 PUSH4 0x2772D156 EQ PUSH2 0x1A48 JUMPI DUP1 PUSH4 0x2E1D388D EQ PUSH2 0x1C09 JUMPI DUP1 PUSH4 0x3AF52712 EQ PUSH2 0x1AD1 JUMPI DUP1 PUSH4 0x52F125F0 EQ PUSH2 0x1AA6 JUMPI DUP1 PUSH4 0x55FB76AF EQ PUSH2 0x1A89 JUMPI DUP1 PUSH4 0x5C15A0B4 EQ PUSH2 0x1A4D JUMPI DUP1 PUSH4 0x5E32E4E8 EQ PUSH2 0x1A48 JUMPI DUP1 PUSH4 0x71447EA8 EQ PUSH2 0x18A3 JUMPI DUP1 PUSH4 0x71ECC8FB EQ PUSH2 0x16FF JUMPI DUP1 PUSH4 0x77FF76E7 EQ PUSH2 0x146B JUMPI DUP1 PUSH4 0x7869EE18 EQ PUSH2 0x144F JUMPI DUP1 PUSH4 0x7A2B97DC EQ PUSH2 0x13E4 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x1394 JUMPI DUP1 PUSH4 0x8A3C5C69 EQ PUSH2 0x1308 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x12C5 JUMPI DUP1 PUSH4 0x8DF44C54 EQ PUSH2 0x123D JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0x121C JUMPI DUP1 PUSH4 0x9E95F3FD EQ PUSH2 0x1190 JUMPI DUP1 PUSH4 0xA93DF2A4 EQ PUSH2 0x112B JUMPI DUP1 PUSH4 0xAA9FEA87 EQ PUSH2 0x10D1 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x101E JUMPI DUP1 PUSH4 0xABAA3356 EQ PUSH2 0xE65 JUMPI DUP1 PUSH4 0xB53A70B2 EQ PUSH2 0xD7E JUMPI DUP1 PUSH4 0xB8ABCCD1 EQ PUSH2 0xCB3 JUMPI DUP1 PUSH4 0xC673BDAF EQ PUSH2 0xC76 JUMPI DUP1 PUSH4 0xCF7B287F EQ PUSH2 0xC0C JUMPI DUP1 PUSH4 0xF29AAA58 EQ PUSH2 0xB9B JUMPI DUP1 PUSH4 0xF7061445 EQ PUSH2 0xB64 JUMPI DUP1 PUSH4 0xFA399F2A EQ PUSH2 0x3BA JUMPI DUP1 PUSH4 0xFBFA77CF EQ PUSH2 0x376 JUMPI PUSH4 0xFD267F39 EQ PUSH2 0x1AA JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x373 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x373 JUMPI PUSH2 0x1C3 PUSH2 0x21EA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1CF PUSH2 0x2A2E JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0x34B JUMPI PUSH2 0x1E7 DUP3 PUSH2 0x29E6 JUMP JUMPDEST PUSH2 0x1F0 DUP2 PUSH2 0x249E JUMP JUMPDEST PUSH2 0x1F9 DUP3 PUSH2 0x267F JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0x206 DUP2 PUSH2 0x2273 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x2A0 DUP2 PUSH2 0x2D45 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x347 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x33C JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x32D JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 DUP1 RETURN JUMPDEST PUSH2 0x336 SWAP1 PUSH2 0x22BC JUMP JUMPDEST PUSH0 PUSH2 0x322 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x4 DUP4 PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x373 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x373 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x373 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x373 JUMPI PUSH2 0x3D4 PUSH2 0x21EA JUMP JUMPDEST PUSH2 0x3DC PUSH2 0x2988 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8F4AB9CA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE DUP3 DUP2 PUSH1 0x24 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xB59 JUMPI DUP4 SWAP1 DUP5 SWAP3 PUSH2 0xAF4 JUMPI JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH0 SWAP3 DUP3 ISZERO ISZERO SWAP4 DUP5 PUSH2 0xAEA JUMPI JUMPDEST DUP5 PUSH2 0xADA JUMPI JUMPDEST PUSH2 0x49B DUP8 PUSH2 0x2B9F JUMP JUMPDEST SWAP5 SWAP1 PUSH0 JUMPDEST DUP7 DUP2 LT PUSH2 0x84B JUMPI DUP11 DUP11 DUP11 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH0 SWAP3 PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 PUSH0 DUP5 ISZERO ISZERO SWAP5 DUP6 PUSH2 0x841 JUMPI JUMPDEST DUP6 PUSH2 0x82F JUMPI JUMPDEST PUSH2 0x4F1 DUP5 PUSH2 0x2B9F JUMP JUMPDEST SWAP7 SWAP1 PUSH0 JUMPDEST DUP9 DUP2 LT PUSH2 0x500 JUMPI DUP11 DUP1 RETURN JUMPDEST PUSH2 0x50A DUP2 DUP10 PUSH2 0x2423 JUMP JUMPDEST MLOAD PUSH2 0x518 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x4F5 JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x52B DUP12 DUP5 PUSH2 0x2423 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x538 DUP12 DUP11 PUSH2 0x2423 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x82B JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x820 JUMPI SWAP1 DUP3 SWAP2 PUSH2 0x80C JUMPI JUMPDEST POP PUSH2 0x7DF JUMPI POP PUSH0 SWAP10 DUP2 PUSH2 0x5F4 DUP3 DUP12 PUSH2 0x2423 JUMP JUMPDEST MLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH32 0xE505E41B0D437B47350A9990142CCF38ACB11FFA0E5AF8F973B9E172F3D5D5E2 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND SWAP3 LOG3 DUP4 ISZERO PUSH2 0x764 JUMPI PUSH2 0x63A DUP2 DUP11 PUSH2 0x2423 JUMP JUMPDEST MLOAD DUP7 ISZERO PUSH2 0x73C JUMPI PUSH2 0x64A SWAP1 PUSH2 0x26D1 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x68B DUP11 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP13 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x26EE JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x6BF DUP5 DUP3 SLOAD PUSH2 0x26C4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x6CB DUP3 DUP12 PUSH2 0x2423 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x70F JUMPI PUSH1 0x1 SWAP4 PUSH2 0x705 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x26C4 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x510 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 SWAP2 DUP6 PUSH2 0x7A9 JUMPI PUSH2 0x776 DUP3 DUP12 PUSH2 0x2423 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x7A2 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x26C4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0x708 JUMP JUMPDEST PUSH2 0x7B3 DUP3 DUP12 PUSH2 0x2423 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0x7A2 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x26C4 JUMP JUMPDEST DUP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x24 SWAP3 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH2 0x815 SWAP1 PUSH2 0x22BC JUMP JUMPDEST PUSH2 0x373 JUMPI DUP1 DUP14 PUSH2 0x5E1 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST SWAP1 POP PUSH2 0x83B DUP2 DUP4 PUSH2 0x2701 JUMP JUMPDEST SWAP1 PUSH2 0x4E8 JUMP JUMPDEST DUP3 ISZERO ISZERO SWAP6 POP PUSH2 0x4E2 JUMP JUMPDEST PUSH2 0x855 DUP2 DUP8 PUSH2 0x2423 JUMP JUMPDEST MLOAD PUSH2 0x863 JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0x49F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x875 DUP3 DUP5 PUSH2 0x2423 JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x882 DUP2 DUP9 PUSH2 0x2423 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x347 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP4 PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x33C JUMPI PUSH2 0xACB JUMPI JUMPDEST POP DUP2 DUP12 PUSH32 0xAE7EBAD9FC3D1D17965F063FA520D393595E2EF6C8E22AE8413B60900444E19F PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x960 DUP7 DUP14 PUSH2 0x2423 JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND SWAP3 LOG3 DUP9 ISZERO PUSH2 0xA50 JUMPI PUSH2 0x97B DUP2 DUP9 PUSH2 0x2423 JUMP JUMPDEST MLOAD DUP6 ISZERO PUSH2 0x73C JUMPI PUSH2 0x98B SWAP1 PUSH2 0x26D1 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x9CC DUP10 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP5 DUP12 DUP8 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x26EE JUMP JUMPDEST SWAP3 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0xA00 DUP5 DUP3 SLOAD PUSH2 0x26C4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0xA0C DUP3 DUP10 PUSH2 0x2423 JUMP JUMPDEST MLOAD SWAP1 DUP2 DUP5 DUP2 SUB GT PUSH2 0x70F JUMPI PUSH1 0x1 SWAP4 PUSH2 0xA46 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 SUB DUP3 SLOAD PUSH2 0x26C4 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST SWAP1 POP PUSH2 0x85B JUMP JUMPDEST PUSH1 0x1 SWAP2 DUP5 PUSH2 0xA95 JUMPI PUSH2 0xA62 DUP3 DUP10 PUSH2 0x2423 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA8E PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x26C4 JUMP JUMPDEST SWAP1 SSTORE PUSH2 0xA49 JUMP JUMPDEST PUSH2 0xA9F DUP3 DUP10 PUSH2 0x2423 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH2 0xA8E PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x26C4 JUMP JUMPDEST PUSH2 0xAD4 SWAP1 PUSH2 0x22BC JUMP JUMPDEST PUSH0 PUSH2 0x928 JUMP JUMPDEST POP PUSH2 0xAE5 DUP4 DUP3 PUSH2 0x2701 JUMP JUMPDEST PUSH2 0x492 JUMP JUMPDEST DUP2 ISZERO ISZERO SWAP5 POP PUSH2 0x48C JUMP JUMPDEST SWAP2 POP POP RETURNDATASIZE DUP1 DUP5 DUP4 RETURNDATACOPY PUSH2 0xB06 DUP2 DUP4 PUSH2 0x22EC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x40 DUP2 DUP4 SUB SLT PUSH2 0xB55 JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0xB51 JUMPI DUP2 PUSH2 0xB33 SWAP2 DUP5 ADD PUSH2 0x261E JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0xB51 JUMPI PUSH2 0xB4A SWAP3 ADD PUSH2 0x261E JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x453 JUMP JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP4 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP6 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x373 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x373 JUMPI PUSH2 0xB98 PUSH2 0xB81 PUSH2 0x21EA JUMP JUMPDEST PUSH2 0xB89 PUSH2 0x2200 JUMP JUMPDEST SWAP1 PUSH2 0xB93 DUP2 PUSH2 0x2742 JUMP JUMPDEST PUSH2 0x28D1 JUMP JUMPDEST DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x373 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x82B JUMPI PUSH2 0xBBE PUSH2 0xBB9 PUSH2 0x21EA JUMP JUMPDEST PUSH2 0x2B9F JUMP JUMPDEST SWAP3 PUSH1 0x40 MLOAD SWAP3 PUSH1 0x40 DUP5 ADD SWAP1 PUSH1 0x40 DUP6 MSTORE DUP4 MLOAD DUP1 SWAP3 MSTORE PUSH1 0x20 PUSH1 0x60 DUP7 ADD SWAP5 ADD SWAP3 JUMPDEST DUP3 DUP2 LT PUSH2 0xBEF JUMPI DUP6 DUP1 DUP7 DUP10 PUSH1 0x20 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0xBDB JUMP JUMPDEST POP CALLVALUE PUSH2 0x373 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x373 JUMPI PUSH2 0xC26 PUSH2 0x21EA JUMP JUMPDEST PUSH2 0xC2E PUSH2 0x2200 JUMP JUMPDEST SWAP1 PUSH2 0xC37 PUSH2 0x2A2E JUMP JUMPDEST PUSH2 0xC40 DUP2 PUSH2 0x2B9F JUMP JUMPDEST SWAP3 SWAP1 DUP5 JUMPDEST DUP5 DUP2 LT PUSH2 0xC4F JUMPI DUP6 DUP1 RETURN JUMPDEST DUP1 PUSH2 0xC70 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xC67 PUSH1 0x1 SWAP5 DUP7 PUSH2 0x2423 JUMP JUMPDEST MLOAD AND DUP6 DUP8 PUSH2 0x2CB3 JUMP JUMPDEST ADD PUSH2 0xC44 JUMP JUMPDEST POP CALLVALUE PUSH2 0x373 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x373 JUMPI PUSH1 0xFF PUSH1 0x40 PUSH1 0x20 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xC9F PUSH2 0x21EA JUMP JUMPDEST AND DUP2 MSTORE PUSH1 0x4 DUP5 MSTORE KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH2 0xCCD PUSH2 0x21EA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP1 PUSH2 0xD13 DUP2 PUSH2 0x2D45 JUMP JUMPDEST DUP3 EXTCODESIZE ISZERO PUSH2 0x347 JUMPI PUSH1 0x40 MLOAD PUSH32 0xA03B23EF00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP1 PUSH0 SWAP1 DUP3 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL DUP1 ISZERO PUSH2 0x33C JUMPI PUSH2 0xD72 JUMPI POP DUP1 RETURN JUMPDEST PUSH2 0xD7C SWAP2 POP PUSH2 0x22BC JUMP JUMPDEST STOP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH2 0xD97 PUSH2 0x21EA JUMP JUMPDEST PUSH2 0xD9F PUSH2 0x2200 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP4 AND DUP1 DUP5 SUB PUSH2 0x347 JUMPI PUSH1 0x40 SWAP1 PUSH2 0xDC1 PUSH2 0x2A2E JUMP JUMPDEST PUSH1 0x44 DUP3 MLOAD DUP1 SWAP8 DUP2 SWAP4 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP2 DUP8 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x33C JUMPI PUSH2 0xE32 JUMPI JUMPDEST PUSH2 0xD7C SWAP4 POP PUSH2 0x2CB3 JUMP JUMPDEST PUSH1 0x40 DUP5 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0xE5D JUMPI JUMPDEST DUP2 PUSH2 0xE4B PUSH1 0x40 SWAP4 DUP4 PUSH2 0x22EC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x347 JUMPI PUSH2 0xD7C SWAP4 POP PUSH2 0xE28 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xE3E JUMP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH2 0xE7E PUSH2 0x21EA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xE8A PUSH2 0x2A2E JUMP JUMPDEST PUSH8 0x6F05B59D3B20000 DUP3 GT PUSH2 0xFF6 JUMPI PUSH2 0xEA2 DUP3 PUSH2 0x29E6 JUMP JUMPDEST PUSH2 0xEAB DUP2 PUSH2 0x249E JUMP JUMPDEST PUSH2 0xEB4 DUP3 PUSH2 0x267F JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD PUSH2 0xEC1 DUP2 PUSH2 0x2273 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP5 AND DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x1 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP6 AND SWAP6 DUP7 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0xF5B DUP2 PUSH2 0x2D77 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x347 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x33C JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP3 PUSH1 0x20 SWAP3 PUSH2 0xFE7 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0xFF0 SWAP1 PUSH2 0x22BC JUMP JUMPDEST PUSH0 PUSH2 0xFDD JUMP JUMPDEST PUSH32 0xA7849E8E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x33C JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0x10A2 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x10C3 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x10CA JUMPI JUMPDEST PUSH2 0x10BB DUP2 DUP4 PUSH2 0x22EC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x25FF JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x1098 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x10B1 JUMP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x60 PUSH2 0x10EC PUSH2 0x21EA JUMP JUMPDEST PUSH2 0x10F5 DUP2 PUSH2 0x27D7 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP2 PUSH1 0x40 MLOAD SWAP4 AND DUP4 MSTORE PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0xFF6 JUMPI PUSH1 0x20 DUP2 PUSH2 0x117B PUSH32 0x48C5C3CCEC54C4E0EA08D83D838FA9BB725EB0B52C591CB00BD6E63BCA8C44F6 SWAP4 PUSH2 0x29E6 JUMP JUMPDEST PUSH2 0x1183 PUSH2 0x2A2E JUMP JUMPDEST DUP1 PUSH1 0x1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH2 0x11AA PUSH2 0x21EA JUMP JUMPDEST SWAP1 PUSH2 0x11B4 DUP3 PUSH2 0x2B9F JUMP JUMPDEST SWAP1 PUSH2 0x11BE DUP3 PUSH2 0x23D4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0x11E7 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0x11E3 DUP9 DUP3 PUSH2 0x2238 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x8 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x1200 DUP4 DUP9 PUSH2 0x2423 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x1215 DUP3 DUP10 PUSH2 0x2423 JUMP JUMPDEST MSTORE ADD PUSH2 0x11CE JUMP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH2 0xD7C PUSH2 0x1238 PUSH2 0x21EA JUMP JUMPDEST PUSH2 0x249E JUMP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH2 0x1257 PUSH2 0x21EA JUMP JUMPDEST SWAP1 PUSH2 0x1261 DUP3 PUSH2 0x2B9F JUMP JUMPDEST SWAP1 PUSH2 0x126B DUP3 PUSH2 0x23D4 JUMP JUMPDEST SWAP3 PUSH0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP6 JUMPDEST DUP5 DUP2 LT PUSH2 0x1290 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0x11E3 DUP9 DUP3 PUSH2 0x2238 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP8 PUSH0 MSTORE PUSH1 0x7 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP4 PUSH2 0x12A9 DUP4 DUP9 PUSH2 0x2423 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x12BE DUP3 DUP10 PUSH2 0x2423 JUMP JUMPDEST MSTORE ADD PUSH2 0x127B JUMP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0x6F05B59D3B20000 DUP2 GT PUSH2 0x136C JUMPI PUSH1 0x20 DUP2 PUSH2 0x1358 PUSH32 0xBF5AC0FC89BBF8819BE79F280146B65EA2AF2A9705CD9CFE0C9D93F6E87F307D SWAP4 PUSH2 0x29E6 JUMP JUMPDEST PUSH2 0x1360 PUSH2 0x2A2E JUMP JUMPDEST DUP1 PUSH0 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 STOP JUMPDEST PUSH32 0x7E6EB7FB00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x347 JUMPI PUSH2 0x13DC PUSH1 0x20 SWAP2 PUSH2 0x2357 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1405 PUSH2 0x21EA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1420 DUP3 PUSH2 0x2273 JUMP JUMPDEST SLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 AND DUP1 DUP4 MSTORE PUSH1 0xFF PUSH1 0x40 SWAP3 DUP4 SHR AND ISZERO ISZERO SWAP4 SWAP1 SWAP3 ADD DUP4 SWAP1 MSTORE DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x20 PUSH0 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH2 0x1484 PUSH2 0x21EA JUMP JUMPDEST PUSH2 0x148C PUSH2 0x2200 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 ISZERO ISZERO SWAP1 DUP2 DUP5 SUB PUSH2 0x347 JUMPI PUSH2 0x14A4 PUSH2 0x2988 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP2 DUP3 PUSH0 MSTORE DUP3 PUSH1 0x20 SWAP3 PUSH1 0x4 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE DUP7 PUSH0 EQ PUSH2 0x16F4 JUMPI DUP4 PUSH0 SWAP7 DUP8 SWAP3 JUMPDEST DUP10 ISZERO PUSH2 0x1679 JUMPI DUP5 DUP4 DUP8 DUP13 PUSH0 SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1664 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 JUMPDEST PUSH2 0x1579 DUP5 PUSH2 0x267F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1586 DUP3 PUSH2 0x2273 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP3 MSTORE PUSH1 0x3 PUSH2 0x15F6 DUP7 DUP5 ADD SWAP5 DUP7 DUP7 MSTORE DUP12 PUSH0 MSTORE PUSH1 0x2 DUP9 MSTORE PUSH1 0x40 DUP5 SWAP1 PUSH0 KECCAK256 SWAP6 MLOAD AND SWAP5 DUP1 SLOAD SWAP7 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP7 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP7 DUP8 PUSH9 0xFF0000000000000000 DUP1 SWAP11 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH2 0x267F JUMP JUMPDEST SWAP6 PUSH1 0x40 DUP4 SWAP1 MLOAD SWAP8 PUSH2 0x1606 DUP10 PUSH2 0x2273 JUMP JUMPDEST AND DUP8 MSTORE DUP1 DUP8 ADD SWAP6 DUP7 MSTORE DUP11 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 PUSH2 0x164A SWAP1 MLOAD SWAP3 DUP4 SWAP3 DUP4 SWAP1 SWAP3 SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x40 DUP4 ADD SWAP5 DUP4 MSTORE ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 DUP14 MLOAD DUP13 DUP2 MSTORE SWAP1 ISZERO ISZERO PUSH1 0x20 DUP3 ADD MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x40 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 DUP10 MLOAD SWAP6 DUP7 MSTORE AND SWAP4 LOG3 DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE RETURN JUMPDEST DUP5 DUP4 DUP8 DUP13 PUSH1 0x1 SLOAD SWAP12 PUSH32 0xA34AD86562F9716C2F1E723934CC63F44A9B4695CB8535C30DD8308D03A78564 PUSH1 0x40 SWAP16 PUSH32 0xD9725C347996D9A5D6001B5F7C2A2515D365258012FCEFF4F49E84310ED07912 SWAP11 DUP16 SWAP7 PUSH2 0x1664 SWAP7 PUSH32 0xCE1D009285405B74CF77294916C17664DE2C84EEF81225C71F265F823B358BCB SWAP9 PUSH2 0x1570 JUMP JUMPDEST DUP4 PUSH0 SLOAD SWAP7 DUP8 SWAP3 PUSH2 0x14F5 JUMP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH2 0x1719 PUSH2 0x21EA JUMP JUMPDEST PUSH2 0x1722 DUP2 PUSH2 0x249E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1748 DUP4 PUSH2 0x2273 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH0 SLOAD SWAP4 DUP2 PUSH2 0x1898 JUMPI JUMPDEST POP PUSH2 0x1779 JUMPI STOP JUMPDEST PUSH2 0x1782 DUP4 PUSH2 0x267F JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1791 DUP5 PUSH2 0x2273 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x2 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x1810 DUP2 PUSH2 0x2D45 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x347 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x33C JUMPI PUSH32 0x97CFF4B6E6D80E307FAAB8B730D9F69264E860F2E0E10CFB8CDAF8A2F44E839E SWAP4 PUSH2 0xFE7 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1772 JUMP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH2 0x18BD PUSH2 0x21EA JUMP JUMPDEST PUSH2 0x18C6 DUP2 PUSH2 0x249E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x3 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x18EC DUP4 PUSH2 0x2273 JUMP JUMPDEST SLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0xFF DUP3 DUP6 AND SWAP5 DUP6 DUP4 MSTORE PUSH1 0x40 SHR AND ISZERO SWAP1 DUP6 DUP3 ISZERO SWAP2 ADD MSTORE PUSH1 0x1 SLOAD SWAP4 DUP2 PUSH2 0x1A3D JUMPI JUMPDEST POP PUSH2 0x191E JUMPI STOP JUMPDEST PUSH2 0x1927 DUP4 PUSH2 0x267F JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1936 DUP5 PUSH2 0x2273 JUMP JUMPDEST AND DUP3 MSTORE DUP5 DUP3 ADD SWAP1 PUSH0 DUP3 MSTORE DUP8 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 PUSH9 0xFF0000000000000000 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH32 0x0 AND SWAP3 PUSH2 0x19B5 DUP2 PUSH2 0x2D77 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x347 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x33C JUMPI PUSH32 0xAF47449D1C3597CCC9F5EC3ACAD03CEF57AA90A719000441B320687087948EFD SWAP4 PUSH2 0xFE7 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST SWAP1 POP DUP4 EQ ISZERO DUP8 PUSH2 0x1917 JUMP JUMPDEST PUSH2 0x2216 JUMP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1A6E PUSH2 0x21EA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1420 DUP3 PUSH2 0x2273 JUMP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH2 0xD7C PUSH2 0x1AC2 PUSH2 0x21EA JUMP JUMPDEST PUSH2 0x1ACB DUP2 PUSH2 0x27D7 JUMP JUMPDEST SWAP1 PUSH2 0x28D1 JUMP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH2 0x1AEA PUSH2 0x21EA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1AF7 DUP2 PUSH2 0x2742 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x1BE1 JUMPI PUSH2 0x1B0F DUP2 PUSH2 0x249E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1B56 DUP2 PUSH2 0x2D77 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x347 JUMPI PUSH1 0x40 MLOAD PUSH32 0xE253670A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x33C JUMPI PUSH32 0x47F70DDBC624C299CEF7841AAEA0A86B677C800203E953104E958C9EC9BDAB34 SWAP3 PUSH1 0x20 SWAP3 PUSH2 0xFE7 JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH32 0x370DA7400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0xDE0AD9B58F16000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH2 0x1C44 PUSH2 0x21EA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1C51 DUP2 PUSH2 0x2742 JUMP JUMPDEST PUSH8 0xDE0AD9B58F16000 DUP3 GT PUSH2 0x1BE1 JUMPI PUSH2 0x1C69 DUP2 PUSH2 0x249E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP3 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE DUP2 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x1CB0 DUP2 PUSH2 0x2D45 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x347 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E0B06F400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD MSTORE SWAP2 PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x33C JUMPI PUSH32 0xB7CF36369623C01ED7B2EAFC4025224E924A2836D5FB49428A0F65417586BF5C SWAP3 PUSH1 0x20 SWAP3 PUSH2 0x1D3B JUMPI POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 STOP JUMPDEST PUSH2 0x1D44 SWAP1 PUSH2 0x22BC JUMP JUMPDEST DUP5 PUSH2 0xFDD JUMP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x20 PUSH2 0x13DC PUSH1 0x24 CALLDATALOAD PUSH1 0x4 CALLDATALOAD PUSH2 0x2701 JUMP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1D8C PUSH2 0x21EA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH2 0x1DBD PUSH2 0x21EA JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0x85F2DBD400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 DUP2 PUSH1 0x4 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x33C JUMPI DUP3 SWAP2 PUSH0 SWAP2 PUSH2 0x217C JUMPI JUMPDEST POP AND SWAP3 ADDRESS DUP5 EQ PUSH2 0x2154 JUMPI AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH2 0x2128 JUMPI DUP2 PUSH0 MSTORE PUSH1 0x4 DUP2 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x5C15A0B400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x40 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x33C JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0x2104 JUMPI JUMPDEST POP PUSH2 0x1EC7 SWAP1 PUSH2 0x267F JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1ED5 DUP3 PUSH2 0x2273 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP1 SWAP4 AND DUP3 MSTORE DUP4 DUP3 ADD SWAP1 ISZERO ISZERO DUP2 MSTORE DUP5 PUSH0 MSTORE PUSH1 0x2 DUP5 MSTORE DUP3 PUSH1 0x40 PUSH0 KECCAK256 SWAP3 MLOAD AND SWAP2 DUP1 SLOAD SWAP2 MLOAD ISZERO ISZERO PUSH1 0x40 SHL SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000 SWAP4 DUP5 PUSH9 0xFF0000000000000000 DUP1 SWAP6 AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP2 PUSH32 0x7A2B97DC00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP6 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x40 DUP4 PUSH1 0x24 DUP2 DUP11 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x33C JUMPI PUSH0 SWAP1 PUSH0 SWAP5 PUSH2 0x20D0 JUMPI JUMPDEST POP PUSH2 0x1F8B SWAP1 PUSH2 0x267F JUMP JUMPDEST SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x1F9A DUP8 PUSH2 0x2273 JUMP JUMPDEST AND DUP6 MSTORE DUP6 DUP6 ADD SWAP4 ISZERO ISZERO DUP5 MSTORE DUP7 PUSH0 MSTORE PUSH1 0x3 DUP7 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP5 MLOAD AND SWAP2 DUP5 SLOAD SWAP4 MLOAD ISZERO ISZERO PUSH1 0x40 SHL AND SWAP3 AND OR OR SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xB8E059B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP3 PUSH1 0x4 DUP3 ADD MSTORE DUP2 DUP2 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL PUSH0 SWAP2 DUP2 PUSH2 0x209E JUMPI JUMPDEST POP SWAP4 DUP3 SWAP2 PUSH1 0x24 SWAP6 PUSH2 0x208C JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH32 0x252AAB500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL PUSH0 SWAP4 DUP2 PUSH2 0x205D JUMPI JUMPDEST POP PUSH2 0x204E JUMPI STOP JUMPDEST PUSH1 0x6 SWAP2 PUSH0 MSTORE MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST SWAP1 SWAP4 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2085 JUMPI JUMPDEST PUSH2 0x2075 DUP2 DUP4 PUSH2 0x22EC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x347 JUMPI MLOAD SWAP3 DUP5 PUSH2 0x2047 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x206B JUMP JUMPDEST DUP5 PUSH0 MSTORE PUSH1 0x5 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE DUP6 PUSH2 0x200C JUMP JUMPDEST SWAP2 POP SWAP4 DUP3 DUP3 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x20C9 JUMPI JUMPDEST PUSH2 0x20B6 DUP2 DUP4 PUSH2 0x22EC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x347 JUMPI SWAP1 MLOAD SWAP1 SWAP4 PUSH1 0x24 PUSH2 0x2000 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x20AC JUMP JUMPDEST PUSH2 0x1F8B SWAP5 POP PUSH2 0x20F7 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x20FD JUMPI JUMPDEST PUSH2 0x20EF DUP2 DUP4 PUSH2 0x22EC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x233A JUMP JUMPDEST SWAP4 PUSH2 0x1F81 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x20E5 JUMP JUMPDEST PUSH2 0x1EC7 SWAP3 POP PUSH2 0x2122 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x20FD JUMPI PUSH2 0x20EF DUP2 DUP4 PUSH2 0x22EC JUMP JUMPDEST SWAP2 PUSH2 0x1EBD JUMP JUMPDEST POP PUSH32 0xDB771C8000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xB82FD5BF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 SWAP3 POP DUP5 DUP1 SWAP3 POP RETURNDATASIZE DUP4 GT PUSH2 0x21AF JUMPI JUMPDEST PUSH2 0x2195 DUP2 DUP4 PUSH2 0x22EC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x347 JUMPI MLOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x347 JUMPI DUP2 SWAP1 DUP6 PUSH2 0x1E25 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x218B JUMP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x21DA PUSH2 0x21EA JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x6 DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x347 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x347 JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x347 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x347 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x6F05B59D3B20000 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x225F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2251 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x228F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x228F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x228F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x228F JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x347 JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x347 JUMPI PUSH2 0x2354 PUSH1 0x20 DUP4 MLOAD SWAP4 ADD PUSH2 0x232D JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x23B6 DUP2 PUSH2 0x22D0 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x228F JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x23DE DUP3 PUSH2 0x23BC JUMP JUMPDEST PUSH2 0x23EB PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x22EC JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x2419 DUP3 SWAP5 PUSH2 0x23BC JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x2437 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x228F JUMPI PUSH1 0x1F ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP1 PUSH0 PUSH1 0x1F PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP4 DUP4 PUSH1 0x44 PUSH1 0x20 SWAP7 DUP5 DUP9 DUP3 ADD SWAP5 PUSH32 0xFA399F2A00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x2510 DUP2 PUSH2 0x22D0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP6 MSTORE DUP12 PUSH1 0x4 DUP7 ADD MSTORE MLOAD DUP1 SWAP2 DUP2 PUSH1 0x24 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY DUP6 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x33C JUMPI PUSH2 0x2590 JUMPI POP POP JUMP JUMPDEST RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x259F DUP2 DUP5 PUSH2 0x22EC JUMP JUMPDEST DUP3 ADD SWAP2 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x347 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x347 JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x347 JUMPI DUP3 MLOAD SWAP1 PUSH2 0x25D6 DUP3 PUSH2 0x2464 JUMP JUMPDEST SWAP1 PUSH2 0x25E4 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x22EC JUMP JUMPDEST DUP3 DUP3 MSTORE DUP4 DUP4 DUP7 ADD ADD GT PUSH2 0x347 JUMPI DUP2 DUP4 PUSH0 SWAP6 ADD DUP5 DUP4 ADD MCOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x347 JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x347 JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x347 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x2639 DUP2 PUSH2 0x23BC JUMP JUMPDEST SWAP4 PUSH2 0x2647 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x22EC JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x347 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x2670 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x2662 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x2694 JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x40 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x70F JUMPI JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x70F JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x70F JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x272E PUSH5 0x174876E800 SWAP3 DUP4 SWAP3 PUSH2 0x2727 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP4 DUP4 SUB DUP4 DUP6 LT MUL PUSH2 0x26EE JUMP JUMPDEST DIV SWAP1 PUSH2 0x26C4 JUMP JUMPDEST DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x70F JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH2 0x2755 DUP3 PUSH2 0x27D7 JUMP JUMPDEST AND DUP1 ISZERO PUSH2 0x2796 JUMPI CALLER SUB PUSH2 0x2766 JUMPI POP POP JUMP JUMPDEST PUSH32 0xFBECDBF400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP PUSH32 0x8BCBF35300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x347 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH32 0xE9DDEB2600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x60 DUP2 PUSH1 0x24 DUP2 PUSH32 0x0 DUP8 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x28C7 JUMPI PUSH0 SWAP2 PUSH2 0x284E JUMPI JUMPDEST POP ADD MLOAD AND SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x60 DUP2 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x28BF JUMPI JUMPDEST DUP2 PUSH2 0x2869 PUSH1 0x60 SWAP4 DUP4 PUSH2 0x22EC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x347 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x60 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x228F JUMPI PUSH2 0x28B5 SWAP2 DUP5 SWAP2 DUP3 MSTORE PUSH2 0x289C DUP2 PUSH2 0x27C3 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x28AA PUSH1 0x20 DUP3 ADD PUSH2 0x27C3 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE ADD PUSH2 0x27C3 JUMP JUMPDEST DUP3 DUP3 ADD MSTORE PUSH0 PUSH2 0x2847 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x285C JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH2 0x28DB DUP3 PUSH2 0x2B9F JUMP JUMPDEST SWAP3 SWAP1 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x28ED JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x2903 DUP4 DUP7 PUSH2 0x2423 JUMP JUMPDEST MLOAD AND DUP2 DUP7 AND DUP1 PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 SWAP5 DUP6 PUSH0 KECCAK256 DUP6 PUSH0 MSTORE DUP3 MSTORE DUP6 PUSH0 KECCAK256 SLOAD SWAP6 DUP7 PUSH2 0x2935 JUMPI JUMPDEST POP POP POP POP POP POP POP ADD PUSH2 0x28DF JUMP JUMPDEST PUSH32 0x938F3A3A03EE425CCC0F8010B0468938CBAFD3750FA43BBDF09C6F75E97E51F9 SWAP4 DUP6 PUSH0 MSTORE DUP4 MSTORE DUP1 PUSH0 KECCAK256 DUP7 PUSH0 MSTORE DUP4 MSTORE PUSH0 DUP2 DUP2 KECCAK256 SSTORE PUSH2 0x2974 DUP8 DUP14 DUP9 PUSH2 0x2DA9 JUMP JUMPDEST MLOAD SWAP6 DUP7 MSTORE DUP11 AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2928 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x29BA JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH5 0x174876E800 DUP1 DUP3 DIV DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x70F JUMPI SUB PUSH2 0x2A06 JUMPI JUMP JUMPDEST PUSH32 0x833FB3CE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x2A5A PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x2357 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x33C JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x2B7D JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x33C JUMPI PUSH0 SWAP3 PUSH2 0x2B47 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x2B1F JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2B76 JUMPI JUMPDEST PUSH2 0x2B5E DUP2 DUP4 PUSH2 0x22EC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x347 JUMPI PUSH2 0x2B6F SWAP1 PUSH2 0x232D JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x2B16 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2B54 JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x2B98 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x10CA JUMPI PUSH2 0x10BB DUP2 DUP4 PUSH2 0x22EC JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x2AC5 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x33C JUMPI PUSH0 SWAP4 PUSH2 0x2C15 JUMPI JUMPDEST POP POP DUP2 MLOAD SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2C28 DUP2 DUP4 PUSH2 0x22EC JUMP JUMPDEST DUP2 ADD PUSH1 0x20 SWAP2 DUP3 DUP2 DUP4 SUB SLT PUSH2 0x347 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x347 JUMPI ADD SWAP3 DUP2 PUSH1 0x1F DUP6 ADD SLT ISZERO PUSH2 0x347 JUMPI DUP4 MLOAD PUSH2 0x2C60 DUP2 PUSH2 0x23BC JUMP JUMPDEST SWAP5 PUSH2 0x2C6E PUSH1 0x40 MLOAD SWAP7 DUP8 PUSH2 0x22EC JUMP JUMPDEST DUP2 DUP7 MSTORE DUP5 DUP1 DUP8 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP4 DUP5 GT PUSH2 0x347 JUMPI DUP5 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x2C9B JUMPI POP POP POP POP POP SWAP1 PUSH0 DUP1 PUSH2 0x2C0E JUMP JUMPDEST DUP2 MLOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x347 JUMPI DUP2 MSTORE SWAP1 DUP5 ADD SWAP1 DUP5 ADD PUSH2 0x2C87 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0x7 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP3 DUP5 DUP2 AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP5 DUP6 PUSH2 0x2CEC JUMPI JUMPDEST POP POP POP POP POP POP JUMP JUMPDEST DUP3 PUSH2 0x2D31 DUP8 PUSH32 0x1C2887FCB98F75E66BB9A36311F2D3D22FB204E6362106F30E9DF7EAF63131B5 SWAP6 PUSH1 0x20 SWAP6 DUP9 PUSH0 MSTORE PUSH1 0x7 DUP8 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP11 PUSH0 MSTORE DUP8 MSTORE PUSH0 PUSH1 0x40 DUP2 KECCAK256 SSTORE PUSH2 0x2DA9 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP7 DUP8 MSTORE AND SWAP5 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 DUP1 PUSH2 0x2CE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH2 0x2354 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x2701 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH2 0x2354 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH2 0x2701 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP1 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 DUP2 MSTORE SWAP3 PUSH2 0x2E3D SWAP3 PUSH0 SWAP3 DUP4 SWAP3 SWAP2 SWAP1 PUSH2 0x2E06 PUSH1 0x64 DUP9 PUSH2 0x22EC JUMP JUMPDEST AND SWAP5 MLOAD SWAP1 DUP3 DUP7 GAS CALL RETURNDATASIZE ISZERO PUSH2 0x2EA1 JUMPI RETURNDATASIZE SWAP1 PUSH2 0x2E1F DUP3 PUSH2 0x2464 JUMP JUMPDEST SWAP2 PUSH2 0x2E2D PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x22EC JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMPDEST DUP4 PUSH2 0x2EA9 JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x2E7E JUMPI JUMPDEST POP POP PUSH2 0x2E53 JUMPI POP JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 SWAP3 POP SWAP1 PUSH1 0x20 SWAP2 DUP2 ADD SUB SLT PUSH2 0x347 JUMPI PUSH1 0x20 PUSH2 0x2E99 SWAP2 ADD PUSH2 0x232D JUMP JUMPDEST ISZERO PUSH0 DUP1 PUSH2 0x2E4A JUMP JUMPDEST PUSH1 0x60 SWAP1 PUSH2 0x2E37 JUMP JUMPDEST SWAP1 PUSH2 0x2EE6 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x2EBE JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x2F2C JUMPI JUMPDEST PUSH2 0x2EF7 JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x2EEF JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xAC PUSH13 0x905FB049F35A293C7B6BAE425 LOG0 TIMESTAMP BASEFEE 0xC1 0xCE 0xD6 CALLDATACOPY EXTCODECOPY 0xCF 0xC0 0xB3 PUSH30 0xD9DF6D131C64736F6C634300081B00330000000000000000000000000000 ","sourceMap":"307:1106:89:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1473:26:67;307:1106:89;1473:26:67;;;307:1106:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;307:1106:89;;;;;;;:::i;:::-;;;1525:73:37;;;:::i;:::-;4720:5:63;7248:55;;7244:127;;7402:20;;;:::i;:::-;8176:4;;;:::i;:::-;31036:39;;;:::i;:::-;307:1106:89;;;;;;:::i;:::-;;;;;;;30993:129:63;;;307:1106:89;26060:4:63;307:1106:89;;-1:-1:-1;;;;;307:1106:89;;;;;;;;30953:31:63;30993:129;307:1106:89;;;;;;;;;;;;;;;;;;;;;;;;31217:6:63;307:1106:89;31263:54:63;;;;:::i;:::-;31217:101;;;;;307:1106:89;;;31217:101:63;;-1:-1:-1;;;;;307:1106:89;;;;;31217:101:63;;307:1106:89;;;;;;-1:-1:-1;;307:1106:89;;;;;;-1:-1:-1;;31217:101:63;;;;;;;31334:68;31217:101;30993:129;31217:101;;;307:1106:89;;;;;;;31334:68:63;307:1106:89;;31217:101:63;;;;:::i;:::-;307:1106:89;31217:101:63;;;307:1106:89;;;;;;;;;31217:101:63;307:1106:89;;;7244:127:63;307:1106:89;7326:34:63;;;;;307:1106:89;;;;;;;;;-1:-1:-1;;307:1106:89;;;;;;;;-1:-1:-1;;;;;8461:6:63;307:1106:89;;;;;;;;;;-1:-1:-1;;307:1106:89;;;;;;;:::i;:::-;436:67:72;;:::i;:::-;307:1106:89;;;9135:33:63;;-1:-1:-1;;;;;307:1106:89;;;9135:33:63;;307:1106:89;9135:6:63;;307:1106:89;9135:6:63;;-1:-1:-1;;;;;9135:6:63;307:1106:89;9135:33:63;;;;;;;;;;;;;307:1106:89;;-1:-1:-1;;;;;307:1106:89;;;;;;;;;;;;;;11126:30:63;307:1106:89;;;;;;11225:30:63;307:1106:89;11289:28:63;;;;:57;;;;307:1106:89;11356:199:63;;;307:1106:89;11615:28:63;;;:::i;:::-;11658:13;;307:1106:89;11673:13:63;;;;;;10881:20;;;-1:-1:-1;;;;;307:1106:89;;;;10982:32:63;307:1106:89;;;;;;;;11080:134:63;307:1106:89;;11177:31:63;307:1106:89;;;;;;11225:30:63;307:1106:89;11289:28:63;;;:57;;;;11653:1939;11356:199;;;11653:1939;11615:28;;;:::i;:::-;11658:13;;307:1106:89;11673:13:63;;;;;;307:1106:89;;;11688:3:63;11711:13;;;;:::i;:::-;307:1106:89;11707:1875:63;;11688:3;307:1106:89;;11658:13:63;;11707:1875;11763:13;-1:-1:-1;;;;;11763:13:63;;;;:::i;:::-;307:1106:89;;11831:13:63;;;;;:::i;:::-;307:1106:89;-1:-1:-1;;;;;9135:6:63;307:1106:89;11795:50:63;;;;307:1106:89;;11795:50:63;307:1106:89;11795:50:63;;;307:1106:89;11795:50:63;;307:1106:89;11824:4:63;307:1106:89;;;;;;;;9135:6:63;;307:1106:89;9135:6:63;;-1:-1:-1;;;;;9135:6:63;307:1106:89;11795:50:63;;;;;;;;;;;11707:1875;307:1106:89;;;12020:240:63;307:1106:89;12227:13:63;;;;;;:::i;:::-;307:1106:89;;;;;;12188:53:63;307:1106:89;-1:-1:-1;;;;;307:1106:89;;12188:53:63;;12278:1290;;;;12884:13;;;;:::i;:::-;307:1106:89;2004:6:50;;2000:58;;2153:5;;;:::i;:::-;307:1106:89;465:4:50;1068:5;2560:120;;;;;;;;;;;;;;1068:5;:::i;:::-;1186:122;;;;;;;;;307:1106:89;-1:-1:-1;;;;;307:1106:89;;;;13044:19:63;307:1106:89;;;;;;;;;;;;;13044:51:63;307:1106:89;;;13044:51:63;:::i;:::-;307:1106:89;;13156:13:63;;;;:::i;:::-;307:1106:89;;;;;;;;;;;13117:70:63;307:1106:89;-1:-1:-1;;;;;307:1106:89;;;;13117:22:63;307:1106:89;;;;;;;;;;;;;;;;;13117:70:63;:::i;:::-;307:1106:89;;12278:1290:63;11707:1875;;;;307:1106:89;;;;;;;;;;2000:58:50;2033:14;307:1106:89;2033:14:50;307:1106:89;;2033:14:50;12278:1290:63;307:1106:89;;11289:28:63;;;13407:13;;;;:::i;:::-;307:1106:89;;-1:-1:-1;;;;;307:1106:89;;;;13371:19:63;307:1106:89;;;;;;;;;;13371:49:63;307:1106:89;;;;;;13371:49:63;:::i;:::-;307:1106:89;;12278:1290:63;;13310:240;13514:13;;;;:::i;:::-;307:1106:89;;-1:-1:-1;;;;;307:1106:89;;;;13475:22:63;307:1106:89;;;;;;;;;;13475:52:63;307:1106:89;;;;;;13475:52:63;:::i;307:1106:89:-;;;;;;;;;;11795:50:63;;;;:::i;:::-;307:1106:89;;11795:50:63;;;;;307:1106:89;;;;;;;;;11795:50:63;307:1106:89;;;11356:199:63;11465:79;;;;;;:::i;:::-;11356:199;;;11289:57;11321:25;;;;-1:-1:-1;11289:57:63;;11688:3;11711:13;;;;:::i;:::-;307:1106:89;11707:1875:63;;11688:3;307:1106:89;;11658:13:63;;11707:1875;-1:-1:-1;;;;;11763:13:63;;;;:::i;:::-;307:1106:89;;11831:13:63;;;;;:::i;:::-;307:1106:89;-1:-1:-1;;;;;9135:6:63;307:1106:89;11795:50:63;;;;307:1106:89;;11795:50:63;307:1106:89;11795:50:63;;;307:1106:89;11795:50:63;;307:1106:89;11824:4:63;307:1106:89;;;;;;;;;9135:6:63;307:1106:89;9135:6:63;;-1:-1:-1;;;;;9135:6:63;307:1106:89;11795:50:63;;;;;;;;11707:1875;12122:13;;;12084:52;307:1106:89;-1:-1:-1;;;;;12122:13:63;;;;:::i;:::-;307:1106:89;;;;;;;;12084:52:63;;12278:1290;;;;12884:13;;;;:::i;:::-;307:1106:89;2004:6:50;;2000:58;;2153:5;;;:::i;:::-;307:1106:89;465:4:50;1068:5;2560:120;;;;;;;;;;;;;;1068:5;:::i;:::-;1186:122;;;;;;;;;307:1106:89;-1:-1:-1;;;;;307:1106:89;;;;13044:19:63;307:1106:89;;;;;;;;;;;;;13044:51:63;307:1106:89;;;13044:51:63;:::i;:::-;307:1106:89;;13156:13:63;;;;:::i;:::-;307:1106:89;;;;;;;;;;;13117:70:63;307:1106:89;-1:-1:-1;;;;;307:1106:89;;;;13117:22:63;307:1106:89;;;;;;;;;;;;;;;;;13117:70:63;:::i;:::-;307:1106:89;;12278:1290:63;11707:1875;;;;12278:1290;307:1106:89;;11289:28:63;;;13407:13;;;;:::i;:::-;307:1106:89;;-1:-1:-1;;;;;307:1106:89;;;;13371:19:63;307:1106:89;;;;;;;;;;13371:49:63;307:1106:89;;;;;;13371:49:63;:::i;:::-;307:1106:89;;12278:1290:63;;13310:240;13514:13;;;;:::i;:::-;307:1106:89;;-1:-1:-1;;;;;307:1106:89;;;;13475:22:63;307:1106:89;;;;;;;;;;13475:52:63;307:1106:89;;;;;;13475:52:63;:::i;11795:50::-;;;;:::i;:::-;;;;11356:199;11465:79;;;;;:::i;:::-;11356:199;;11289:57;11321:25;;;;-1:-1:-1;11289:57:63;;9135:33;;;;;;;;;;;;;:::i;:::-;;;307:1106:89;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;9135:33:63;;;;307:1106:89;;;;;;;;9135:33:63;307:1106:89;;;;;;;;;;;;;;;-1:-1:-1;;307:1106:89;;;;;29584:9:63;307:1106:89;;:::i;:::-;;;:::i;:::-;7088:4:63;;;;:::i;:::-;29584:9;:::i;:::-;307:1106:89;;;;;;;;;-1:-1:-1;;307:1106:89;;;;;632:28;307:1106;;:::i;:::-;632:28;:::i;:::-;307:1106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;307:1106:89;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;307:1106:89;;;;;;;:::i;:::-;;;:::i;:::-;1525:73:37;;;:::i;:::-;28417:28:63;;;:::i;:::-;28461:13;;;28476;;;;;;307:1106:89;;;28491:3:63;28525:13;28592:5;-1:-1:-1;;;;;28525:13:63;307:1106:89;28525:13:63;;;:::i;:::-;307:1106:89;;28592:5:63;;;:::i;:::-;307:1106:89;28461:13:63;;307:1106:89;;;;;;-1:-1:-1;;307:1106:89;;;;;;;;;-1:-1:-1;;;;;307:1106:89;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;307:1106:89;;;;;;;:::i;:::-;-1:-1:-1;;;;;307:1106:89;;;;;1165:30;307:1106;;;;;;;;1261:6;307:1106;1340:54;;;;:::i;:::-;1242:162;;;;;307:1106;;;1242:162;;-1:-1:-1;;;;;307:1106:89;;;;;1242:162;;307:1106;;;;;;-1:-1:-1;;307:1106:89;;;;;;-1:-1:-1;;1242:162:89;;;;;;;;307:1106;;;1242:162;;;;;:::i;:::-;307:1106;;;;;;-1:-1:-1;;307:1106:89;;;;;;;:::i;:::-;;;:::i;:::-;;;;-1:-1:-1;;;;;307:1106:89;;;;;;;;;;1525:73:37;;;:::i;:::-;307:1106:89;;;28874:52:63;;;;307:1106:89;28874:52:63;;307:1106:89;;;;28874:52:63;;307:1106:89;;;;;28874:6:63;307:1106:89;28874:52:63;;;;;;;;307:1106:89;28975:5:63;;;;:::i;28874:52::-;307:1106:89;28874:52:63;;307:1106:89;28874:52:63;;;;;;307:1106:89;28874:52:63;;;:::i;:::-;;;307:1106:89;;;;28975:5:63;;-1:-1:-1;28874:52:63;;;;;-1:-1:-1;28874:52:63;;307:1106:89;;;;;-1:-1:-1;;307:1106:89;;;;;;;:::i;:::-;;;1525:73:37;;;:::i;:::-;4720:5:63;7581:57;;7577:130;;7738:21;;;:::i;:::-;8176:4;;;:::i;:::-;32069:40;;;:::i;:::-;307:1106:89;;;;;;:::i;:::-;;;;;;;32026:130:63;;;307:1106:89;26404:4:63;307:1106:89;;-1:-1:-1;;;;;307:1106:89;;;;;;;;31985:32:63;32026:130;307:1106:89;;;;;;;;;;;;;;;;;;;;;;;;32252:6:63;307:1106:89;32299:55:63;;;;:::i;:::-;32252:103;;;;;307:1106:89;;;32252:103:63;;-1:-1:-1;;;;;307:1106:89;;;;;32252:103:63;;307:1106:89;;;;;;-1:-1:-1;;307:1106:89;;;;;;-1:-1:-1;;32252:103:63;;;;;;;32371:70;32252:103;32026:130;32252:103;;;307:1106:89;;;;;;;32371:70:63;307:1106:89;32252:103:63;;;;:::i;:::-;307:1106:89;32252:103:63;;7577:130;7661:35;307:1106:89;7661:35:63;307:1106:89;;7661:35:63;307:1106:89;;;;;-1:-1:-1;;307:1106:89;;;;;;;;1473:26:67;;-1:-1:-1;;;;;1473:26:67;307:1106:89;;;1019:6:40;307:1106:89;;1473:26:67;;;;;;;;;307:1106:89;1473:26:67;;;307:1106:89;;;;;;;;;1473:26:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;307:1106:89;;;;;-1:-1:-1;;307:1106:89;;;;;;;;:::i;:::-;860:21;;;:::i;:::-;307:1106;-1:-1:-1;;;;;307:1106:89;;;;;883:30;307:1106;;;;;;921:31;307:1106;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;307:1106:89;;;;;;;4720:5:63;7581:57;;7577:130;;307:1106:89;7738:21:63;;25657:70;7738:21;;:::i;:::-;1525:73:37;;:::i;:::-;307:1106:89;;;;;;;;25657:70:63;307:1106:89;;;;;;;-1:-1:-1;;307:1106:89;;;;;;;:::i;:::-;15714:28:63;;;;:::i;:::-;15766:24;;;;:::i;:::-;15805:13;307:1106:89;;-1:-1:-1;;;;;307:1106:89;;;15800:124:63;15820:13;;;;;;307:1106:89;;;;;;;:::i;:::-;;;;15835:3:63;307:1106:89;;;;;15870:22:63;307:1106:89;;;;;15899:13:63;;;;;:::i;:::-;307:1106:89;;;;;;;;;;15854:59:63;;;;:::i;:::-;307:1106:89;;15805:13:63;;307:1106:89;;;;;-1:-1:-1;;307:1106:89;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;-1:-1:-1;;307:1106:89;;;;;;;:::i;:::-;15292:28:63;;;;:::i;:::-;15344:24;;;;:::i;:::-;15383:13;307:1106:89;;-1:-1:-1;;;;;307:1106:89;;;15378:121:63;15398:13;;;;;;307:1106:89;;;;;;;:::i;15413:3:63:-;307:1106:89;;;;;15448:19:63;307:1106:89;;;;;15474:13:63;;;;;:::i;:::-;307:1106:89;;;;;;;;;;15432:56:63;;;;:::i;:::-;307:1106:89;;15383:13:63;;307:1106:89;;;;;-1:-1:-1;;307:1106:89;;;;;;;;-1:-1:-1;;;;;1019:6:40;307:1106:89;;;;;;;;;-1:-1:-1;;307:1106:89;;;;;;;4720:5:63;7248:55;;7244:127;;307:1106:89;7402:20:63;;25273:68;7402:20;;:::i;:::-;1525:73:37;;:::i;:::-;307:1106:89;;;;;;;;25273:68:63;307:1106:89;7244:127:63;7326:34;307:1106:89;7326:34:63;307:1106:89;;7326:34:63;307:1106:89;;;;;-1:-1:-1;;307:1106:89;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;307:1106:89;;;;;-1:-1:-1;;;;;307:1106:89;;:::i;:::-;;;;14588:32:63;307:1106:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;307:1106:89;;;;;;;;;;;;;;;;;;;-1:-1:-1;;307:1106:89;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;436:67:72;;:::i;:::-;-1:-1:-1;;;;;307:1106:89;;;;;;;;;;;;;;;;23465:4:63;307:1106:89;;;;;;;23598:56:63;;;;;;307:1106:89;23598:56:63;;;;23694:57;;;;;;;;307:1106:89;23694:57:63;24681:90;307:1106:89;23694:57:63;24894:69;23694:57;;;24786:92;23694:57;24786:92;23694:57;;24282:37;;;:::i;:::-;307:1106:89;;;;;;:::i;:::-;;;;;;;24383:32:63;24467:38;24239:134;;;307:1106:89;;;;;;;24199:31:63;307:1106:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24467:38:63;:::i;:::-;307:1106:89;;;;;;;;;:::i;:::-;;;;24424:135:63;;;307:1106:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24681:90:63;307:1106:89;;24681:90:63;;;;307:1106:89;;;;;;;;;;;;;;;;;24681:90:63;;;;307:1106:89;;;;;;;;;;;;;;;;;;;;24786:92:63;;;;307:1106:89;;;;;;24894:69:63;;307:1106:89;;;;;;;;;23694:57:63;307:1106:89;;;;23465:4:63;307:1106:89;23694:57:63;24681:90;307:1106:89;23694:57:63;24894:69;23694:57;;;24786:92;23694:57;24786:92;23694:57;;;23598:56;307:1106:89;;;23598:56:63;;;;;307:1106:89;;;;;;-1:-1:-1;;307:1106:89;;;;;;;:::i;:::-;8176:4:63;;;:::i;:::-;-1:-1:-1;;;;;307:1106:89;;;;;;;;16417:31:63;307:1106:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;16543:81:63;;;;307:1106:89;16539:176:63;;;307:1106:89;16539:176:63;31036:39;;;:::i;:::-;307:1106:89;;;;;;;;:::i;:::-;;;;30993:129:63;;;307:1106:89;;;;;;;16417:31:63;307:1106:89;;;;;;;;;;;;;;;;;;;;;;;;;31217:6:63;307:1106:89;31263:54:63;;;;:::i;:::-;31217:101;;;;;307:1106:89;;;31217:101:63;;-1:-1:-1;;;;;307:1106:89;;;;;31217:101:63;;307:1106:89;;;;;;-1:-1:-1;;307:1106:89;;;;;;-1:-1:-1;;31217:101:63;;;;;;;31334:68;31217:101;;;307:1106:89;;;;;;31334:68:63;307:1106:89;16543:81:63;16576:48;;;;;16543:81;;;307:1106:89;;;;;;-1:-1:-1;;307:1106:89;;;;;;;:::i;:::-;8176:4:63;;;:::i;:::-;-1:-1:-1;;;;;307:1106:89;;;;;;;;16899:32:63;307:1106:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;16980:33:63;307:1106:89;17028:82:63;;;;307:1106:89;17024:179:63;;;307:1106:89;17024:179:63;32069:40;;;:::i;:::-;307:1106:89;;;;;;;;:::i;:::-;;;;32026:130:63;;;307:1106:89;;;;;;;16899:32:63;307:1106:89;;;;;;;;;;;;;;;;;;;;;;;;;32252:6:63;307:1106:89;32299:55:63;;;;:::i;:::-;32252:103;;;;;307:1106:89;;;32252:103:63;;-1:-1:-1;;;;;307:1106:89;;;;;32252:103:63;;307:1106:89;;;;;;-1:-1:-1;;307:1106:89;;;;;;-1:-1:-1;;32252:103:63;;;;;;;32371:70;32252:103;;;307:1106:89;;;;;;32371:70:63;307:1106:89;17028:82:63;17061:49;;;;;17028:82;;;307:1106:89;;:::i;:::-;;;;;-1:-1:-1;;307:1106:89;;;;;-1:-1:-1;;;;;307:1106:89;;:::i;:::-;;;;14307:31:63;307:1106:89;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;307:1106:89;;;;;;13926:33:63;307:1106:89;;;;;;;;;;;;-1:-1:-1;;307:1106:89;;;;;29747:21:63;307:1106:89;;:::i;:::-;29747:21:63;;;:::i;:::-;;;:::i;307:1106:89:-;;;;;-1:-1:-1;;307:1106:89;;;;;;;:::i;:::-;;;7088:4:63;;;;:::i;:::-;4975:9;7868:56;;7864:127;;8176:4;;;:::i;:::-;-1:-1:-1;;;;;307:1106:89;;;;;;;;27849:31:63;307:1106:89;;;;;;;28015:6:63;307:1106:89;28062:55:63;;;;:::i;:::-;28015:103;;;;;307:1106:89;;;28015:103:63;;-1:-1:-1;;;;;307:1106:89;;;;;28015:103:63;;307:1106:89;;;;;;-1:-1:-1;;307:1106:89;;;;;;-1:-1:-1;;28015:103:63;;;;;;;28138:68;28015:103;307:1106:89;28015:103:63;;;307:1106:89;;;;;;28138:68:63;307:1106:89;7864:127:63;7947:33;307:1106:89;7947:33:63;307:1106:89;;7947:33:63;307:1106:89;;;;;-1:-1:-1;;307:1106:89;;;;;;;;4975:9:63;307:1106:89;;;;;;;;-1:-1:-1;;307:1106:89;;;;;;;:::i;:::-;;;7088:4:63;;;;:::i;:::-;4975:9;7868:56;;7864:127;;8176:4;;;:::i;:::-;-1:-1:-1;;;;;307:1106:89;;;;;;;;27466:30:63;307:1106:89;;;;;;;27630:6:63;307:1106:89;27676:54:63;;;;:::i;:::-;27630:101;;;;;307:1106:89;;;27630:101:63;;-1:-1:-1;;;;;307:1106:89;;;;;27630:101:63;;307:1106:89;;;;;;-1:-1:-1;;307:1106:89;;;;;;-1:-1:-1;;27630:101:63;;;;;;;27751:67;27630:101;307:1106:89;27630:101:63;;;307:1106:89;;;;;;27751:67:63;307:1106:89;27630:101:63;;;;:::i;:::-;;;;307:1106:89;;;;;-1:-1:-1;;307:1106:89;;;;;;16154:79:63;307:1106:89;;;;16154:79:63;:::i;307:1106:89:-;;;;;-1:-1:-1;;307:1106:89;;;;;-1:-1:-1;;;;;307:1106:89;;:::i;:::-;;;;14845:30:63;307:1106:89;;;;;;;;;;;;;;;;;;;-1:-1:-1;;307:1106:89;;;;;;;:::i;:::-;;-1:-1:-1;;;;;307:1106:89;;;21067:33:63;;:6;;307:1106:89;21067:6:63;;;307:1106:89;21067:33:63;;;;;;;;307:1106:89;21067:33:63;;;307:1106:89;;;21152:4:63;;21115:42;;21111:104;;307:1106:89;;;;;;;;;;;;;;21225:87:63;;307:1106:89;;;;;;;;;21347:4:63;307:1106:89;;;;;;;;;;21424:49:63;;;307:1106:89;21424:49:63;;307:1106:89;;21424:49:63;307:1106:89;21424:49:63;;;;;;;;;307:1106:89;;;21424:49:63;;;307:1106:89;21566:36:63;;;;:::i;:::-;307:1106:89;;;;;;;:::i;:::-;;;;;;;21523:133:63;;;307:1106:89;;;;;;;;21483:31:63;307:1106:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21731:72:63;307:1106:89;21731:72:63;;;307:1106:89;21731:72:63;;307:1106:89;;21731:72:63;307:1106:89;21731:72:63;;;;;;;;;307:1106:89;;;21731:72:63;;;307:1106:89;21897:37:63;;;;:::i;:::-;307:1106:89;;;;;;;;:::i;:::-;;;;21854:135:63;;;307:1106:89;;;;;;;;21813:32:63;307:1106:89;;;;;;;;;;;;;;;;;;;;;;;;;;;22521:54:63;;;307:1106:89;22521:54:63;;307:1106:89;22521:54:63;;307:1106:89;22521:54:63;;;;307:1106:89;;22521:54:63;;;307:1106:89;22517:207:63;;;;307:1106:89;22517:207:63;;;307:1106:89;;;;22738:55:63;;;;307:1106:89;22738:55:63;;;307:1106:89;22738:55:63;;307:1106:89;22738:55:63;;307:1106:89;;22738:55:63;;;307:1106:89;22734:211:63;;;307:1106:89;22734:211:63;22856:31;307:1106:89;;;;;;;;;;;22738:55:63;;;;;;;;;;;;;;;;;:::i;:::-;;;307:1106:89;;;;;22738:55:63;;;;;;;;;22517:207;307:1106:89;;;22637:30:63;307:1106:89;;;;;;22517:207:63;;;22521:54;;;;;;;;;;;;;;;;;:::i;:::-;;;307:1106:89;;;;;;22521:54:63;;307:1106:89;22521:54:63;;;;;;;21731:72;21897:37;21731:72;;;;;307:1106:89;21731:72:63;307:1106:89;21731:72:63;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;21424:49;21566:36;21424:49;;;;;307:1106:89;21424:49:63;307:1106:89;21424:49:63;;;;;;;:::i;:::-;;;;21225:87;21274:27;;307:1106:89;21274:27:63;307:1106:89;;;;21274:27:63;21111:104;21180:24;307:1106:89;21180:24:63;307:1106:89;;21180:24:63;21067:33;;;;;;;;;;;;;;;;;;:::i;:::-;;;307:1106:89;;;;;;;;;;;;21067:33:63;;;;;;;;;;307:1106:89;;;;;-1:-1:-1;;307:1106:89;;;;;;;-1:-1:-1;;;;;307:1106:89;;:::i;:::-;;;;15042:31:63;307:1106:89;;;;;;;;;;;;;-1:-1:-1;;;;;307:1106:89;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;307:1106:89;;;;;;:::o;:::-;;;;;-1:-1:-1;;307:1106:89;;;;;;;;4720:5:63;307:1106:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;1931:430:37:-;307:1106:89;;;2303:50:37;;;2320:22;;307:1106:89;;;;;;;2303:50:37;;;;;;:::i;:::-;307:1106:89;2293:61:37;;1931:430;:::o;307:1106:89:-;;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;8523:151:63:-;8598:68;8523:151;-1:-1:-1;307:1106:89;-1:-1:-1;;;;;307:1106:89;;8598:68:63;;307:1106:89;8598:68:63;;;;;;;;;;307:1106:89;8598:68:63;;;307:1106:89;8598:68:63;;;;;;:::i;:::-;307:1106:89;;8584:83:63;;;;;;;307:1106:89;8584:83:63;;;8598:68;8584:83;;307:1106:89;;;;;8598:68:63;307:1106:89;;;;;;;;;;;;;;;;;;8584:83:63;;:6;;307:1106:89;8584:83:63;;;;;;;;8523:151;;:::o;8584:83::-;;;-1:-1:-1;8584:83:63;;;;;;:::i;:::-;;;307:1106:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;307:1106:89;;;;;;;;;8523:151:63:o;307:1106:89:-;;;;;;;;;;-1:-1:-1;;;;;307:1106:89;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;13291:213:119;307:1106:89;13369:24:119;;;;13365:103;;307:1106:89;13291:213:119;:::o;13365:103::-;13416:41;;;13447:2;13416:41;307:1106:89;;;;13416:41:119;;307:1106:89;;;;;;;;;;:::o;19669:4:33:-;;465::50;19669::33;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;17922:1064:63:-;;18151:104;19669:4:33;5832:87:50;;;838:5;5832:87;;;;;;;;;838:5;:::i;:::-;19669:4:33;18151:104:63;;:::i;:::-;19669:4:33;;;;;;;;;;;;;;;17922:1064:63;:::o;18992:340::-;-1:-1:-1;;;;;19088:21:63;;;;;:::i;:::-;307:1106:89;19124:25:63;;19120:93;;19242:10;19227:25;19223:103;;18992:340;;:::o;19223:103::-;19275:40;19147:1;19275:40;19242:10;19275:40;307:1106:89;;;;;19147:1:63;19275:40;19120:93;19172:30;;19147:1;19172:30;307:1106:89;19172:30:63;307:1106:89;;19147:1:63;19172:30;307:1106:89;;;-1:-1:-1;;;;;307:1106:89;;;;;;:::o;19603:201:63:-;307:1106:89;;;;19723:32:63;;-1:-1:-1;;;;;307:1106:89;;;19723:32:63;;;307:1106:89;19723:32:63;307:1106:89;;;19723:6:63;307:1106:89;;19723:32:63;;;;;;;-1:-1:-1;19723:32:63;;;19603:201;19773:24;;307:1106:89;;19603:201:63;:::o;19723:32::-;;;;;;;;;;;;;;;;;:::i;:::-;;;307:1106:89;;;;;;;19723:32:63;307:1106:89;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;19723:32:63;;;;;;-1:-1:-1;19723:32:63;;;307:1106:89;;;-1:-1:-1;307:1106:89;;;;;29782:616:63;;29917:28;;;:::i;:::-;29961:13;;29973:1;29976:13;;;;;;29782:616;;;;;:::o;29991:3::-;307:1106:89;;-1:-1:-1;;;;;30025:13:63;;;;;:::i;:::-;307:1106:89;;;;;;29973:1:63;307:1106:89;30080:22:63;307:1106:89;;;;;;;29973:1:63;307:1106:89;;29973:1:63;307:1106:89;;;;29973:1:63;307:1106:89;;30133:20:63;;30129:253;;29991:3;;;;;;;;307:1106:89;29961:13:63;;30129:253;30301:66;307:1106:89;;29973:1:63;307:1106:89;;;;29973:1:63;307:1106:89;;29973:1:63;307:1106:89;;;29973:1:63;307:1106:89;;;;30260:16:63;;;;;:::i;:::-;307:1106:89;;;;;;30301:66:63;;30129:253;;;;;;;;;509:165:72;-1:-1:-1;;;;;586:6:72;307:1106:89;564:10:72;:29;560:108;;509:165::o;560:108::-;616:41;;;564:10;616:41;307:1106:89;;616:41:72;;32454:749:63;19669:4:33;;;;;;;;;;;;;;;;;;33055:74:63;33051:146;;32454:749::o;33051:146::-;33152:34;-1:-1:-1;33152:34:63;;-1:-1:-1;33152:34:63;1688:201:37;1762:20;1774:7;;;;1762:20;:::i;:::-;-1:-1:-1;;;;;307:1106:89;;;1231:22:40;;;:6;;;:22;:6;;;307:1106:89;1231:22:40;;;;;;;;;1774:7:37;1231:22:40;;;1688:201:37;307:1106:89;;;;;1231:64:40;;;;;307:1106:89;1231:64:40;;:22;:64;;307:1106:89;1820:10:37;307:1106:89;;;;1289:4:40;307:1106:89;;;;;1231:64:40;;;;;;;1774:7:37;1231:64:40;;;1688:201:37;1797:34;;;1793:90;;1688:201::o;1793:90::-;1854:18;1774:7;1854:18;1231:22:40;1774:7:37;1854:18;1231:64:40;;;;;;;;;;;;;;;;:::i;:::-;;;307:1106:89;;;;;;;:::i;:::-;1231:64:40;;;;;;;;;:22;307:1106:89;1231:22:40;;;;;;;;;;;;;;;:::i;:::-;;;;;19338:199:63;;-1:-1:-1;;;;;307:1106:89;;;19469:26:63;307:1106:89;19469:26:63;;307:1106:89;19469:26:63;;;307:1106:89;19469:26:63;:6;307:1106:89;19469:6:63;;;307:1106:89;19469:26:63;;;;;;;;;;;19338:199;19460:35;;;307:1106:89;19338:199:63;:::o;19469:26::-;;;;;;;;;;;;;;:::i;:::-;;;307:1106:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;19469:26:63;;;;;;;;;;307:1106:89;;;;;;;;;;;;;;;;;;;;28994:403:63;;;-1:-1:-1;;;;;307:1106:89;;;;;-1:-1:-1;307:1106:89;29118:19:63;307:1106:89;;;-1:-1:-1;307:1106:89;;;;;;;-1:-1:-1;307:1106:89;;;;-1:-1:-1;307:1106:89;;29164:20:63;;29160:231;;28994:403;;;;;;;:::o;29160:231::-;307:1106:89;29280:16:63;307:1106:89;29317:63:63;307:1106:89;;;;-1:-1:-1;307:1106:89;29118:19:63;307:1106:89;;;-1:-1:-1;307:1106:89;;-1:-1:-1;307:1106:89;;;-1:-1:-1;307:1106:89;;;;29280:16:63;:::i;:::-;307:1106:89;;;;;;29317:63:63;;29160:231;;;;;;;;17215:701;-1:-1:-1;;;;;307:1106:89;-1:-1:-1;307:1106:89;;;;17830:79:63;307:1106:89;;-1:-1:-1;307:1106:89;;;17581:30:63;307:1106:89;;;-1:-1:-1;307:1106:89;;17830:79:63;;:::i;17215:701::-;-1:-1:-1;;;;;307:1106:89;17414:399:63;307:1106:89;17672:32:63;307:1106:89;;17830:79:63;307:1106:89;;17414:399:63;307:1106:89;;;17765:31:63;307:1106:89;;;17414:399:63;307:1106:89;;17830:79:63;;:::i;1303:160:105:-;307:1106:89;;;1412:43:105;;;;;;-1:-1:-1;;;;;307:1106:89;;;1412:43:105;;;307:1106:89;;;;;;;;;1412:43:105;;;307:1106:89;3510:55:106;;-1:-1:-1;;;;1412:43:105;307:1106:89;1412:43:105;307:1106:89;;1412:43:105;:::i;:::-;307:1106:89;3462:31:106;;;;;;;307:1106:89;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;2847:1:106;1412:43:105;307:1106:89;;;;3510:55:106;;:::i;:::-;307:1106:89;;4551:22:105;;;;:57;;;;307:1106:89;4547:135:105;;;;1303:160;:::o;4547:135::-;4631:40;2847:1:106;4631:40:105;;307:1106:89;1412:43:105;2847:1:106;4631:40:105;4551:57;4578:30;;;;1412:43;4578:30;;;307:1106:89;;;;1412:43:105;307:1106:89;4578:30:105;;307:1106:89;:::i;:::-;4577:31:105;4551:57;;;;307:1106:89;;;;;4625:582:106;;4797:8;;-1:-1:-1;307:1106:89;;5874:21:106;:17;;6046:142;;;;;;5870:383;6225:17;5894:1;6225:17;;5894:1;6225:17;4793:408;307:1106:89;;5045:22:106;:49;;;4793:408;5041:119;;5173:17;;:::o;5041:119::-;-1:-1:-1;;;;;5121:24:106;;5066:1;5121:24;307:1106:89;5121:24:106;307:1106:89;;5066:1:106;5121:24;5045:49;5071:18;;;:23;5045:49;"},"methodIdentifiers":{"MAX_CREATOR_FEE_PERCENTAGE()":"2e1d388d","MAX_PROTOCOL_SWAP_FEE_PERCENTAGE()":"2772d156","MAX_PROTOCOL_YIELD_FEE_PERCENTAGE()":"5e32e4e8","collectAggregateFees(address)":"8f4ab9ca","collectAggregateFeesHook(address)":"fa399f2a","computeAggregateFeePercentage(uint256,uint256)":"0ddd60c6","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getGlobalProtocolSwapFeePercentage()":"7869ee18","getGlobalProtocolYieldFeePercentage()":"55fb76af","getPoolCreatorFeeAmounts(address)":"9e95f3fd","getPoolCreatorInfo(address)":"aa9fea87","getPoolCreatorSwapFeePercentage(address)":"0b8e059b","getPoolCreatorYieldFeePercentage(address)":"0252aab5","getPoolProtocolSwapFeeInfo(address)":"5c15a0b4","getPoolProtocolYieldFeeInfo(address)":"7a2b97dc","getPoolTokensAndCount(address)":"f29aaa58","getProtocolFeeAmounts(address)":"8df44c54","getVault()":"8d928af8","isPoolRegistered(address)":"c673bdaf","manualSetPoolCreatorSwapFeePercentage(address,uint256)":"b8abccd1","migratePool(address)":"0874327f","registerPool(address,address,bool)":"77ff76e7","setGlobalProtocolSwapFeePercentage(uint256)":"8a3c5c69","setGlobalProtocolYieldFeePercentage(uint256)":"a93df2a4","setPoolCreatorSwapFeePercentage(address,uint256)":"1377c16c","setPoolCreatorYieldFeePercentage(address,uint256)":"3af52712","setProtocolSwapFeePercentage(address,uint256)":"fd267f39","setProtocolYieldFeePercentage(address,uint256)":"abaa3356","updateProtocolSwapFeePercentage(address)":"71ecc8fb","updateProtocolYieldFeePercentage(address)":"71447ea8","vault()":"fbfa77cf","withdrawPoolCreatorFees(address)":"52f125f0","withdrawPoolCreatorFees(address,address)":"f7061445","withdrawProtocolFees(address,address)":"cf7b287f","withdrawProtocolFeesForToken(address,address,address)":"b53a70b2"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVaultMock\",\"name\":\"vault_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"CallerIsNotPoolCreator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidMigrationSource\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolCreatorFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolSwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolYieldFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"GlobalProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateSwapFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isProtocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"InitialPoolAggregateYieldFeePercentage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"PoolCreatorYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"PoolRegisteredWithFeeController\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolFeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeeCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"yieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"ProtocolYieldFeePercentageChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"MAX_CREATOR_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_PROTOCOL_SWAP_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_PROTOCOL_YIELD_FEE_PERCENTAGE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFeesHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"protocolFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeAggregateFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGlobalProtocolYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorInfo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"creatorSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"creatorYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolCreatorYieldFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolSwapFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolProtocolYieldFeeInfo\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokensAndCount\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"numTokens\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getProtocolFeeAmounts\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"feeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"manualSetPoolCreatorSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"migratePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"}],\"name\":\"registerPool\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setGlobalProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"poolCreatorYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setPoolCreatorYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newProtocolYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"updateProtocolYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawPoolCreatorFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"withdrawProtocolFeesForToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"CallerIsNotPoolCreator(address,address)\":[{\"params\":{\"caller\":\"The account attempting to withdraw pool creator fees\",\"pool\":\"The pool the caller tried to withdraw from\"}}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"PoolAlreadyRegistered(address)\":[{\"details\":\"This can happen if there is an error in the migration, or if governance somehow grants permission to `migratePool`, which should never happen.\",\"params\":{\"pool\":\"The pool\"}}],\"PoolCreatorNotRegistered(address)\":[{\"params\":{\"pool\":\"The pool with no creator\"}}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol swap fee percentages.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"details\":\"Note that this is checked for both the global and pool-specific protocol yield fee percentages.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"params\":{\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"params\":{\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global swap fee percentage.\",\"params\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"details\":\"If the pool is registered as protocol fee exempt, this will be zero (until changed). Otherwise, it will equal the current global yield fee percentage.\",\"params\":{\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\",\"isProtocolFeeExempt\":\"True if the pool is exempt from taking protocol fees initially\",\"pool\":\"The pool being registered\"}},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which pool creator fees are being withdrawn\",\"recipient\":\"The recipient of the funds (the pool creator if permissionless, or another account)\",\"token\":\"The token being withdrawn\"}},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator swap fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage for the pool\"}},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose pool creator yield fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage for the pool\"}},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"details\":\"The `PoolRegistered` event includes the `roleAccounts` field, which also records the pool creator, but this simpler event is also provided for convenience. Though `InitialPoolAggregateSwapFeePercentage` and its yield fee counterpart also include the protocol fee exemption flag, we might as well include it here as well.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (non-zero, or the event would not be emitted)\",\"protocolFeeExempt\":\"True if the pool is initially exempt from protocol fees\"}},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"params\":{\"amount\":\"The amount of the fee token that was withdrawn\",\"pool\":\"The pool from which protocol fees are being withdrawn\",\"recipient\":\"The recipient of the funds\",\"token\":\"The token being withdrawn\"}},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the swap fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the swap fee was charged\",\"token\":\"The token in which the swap fee was charged\"}},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol swap fee will be changed\",\"swapFeePercentage\":\"The updated protocol swap fee percentage\"}},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"details\":\"Note that since charging protocol fees (i.e., distributing tokens between pool and fee balances) occurs in the Vault, but fee collection happens in the ProtocolFeeController, the yield fees reported here may encompass multiple operations.\",\"params\":{\"amount\":\"The amount of the token collected in fees\",\"pool\":\"The pool on which the yield fee was charged\",\"token\":\"The token in which the yield fee was charged\"}},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"params\":{\"pool\":\"The pool whose protocol yield fee will be changed\",\"yieldFeePercentage\":\"The updated protocol yield fee percentage\"}}},\"kind\":\"dev\",\"methods\":{\"collectAggregateFees(address)\":{\"params\":{\"pool\":\"The pool with aggregate fees\"}},\"collectAggregateFeesHook(address)\":{\"details\":\"Copy and zero out the `aggregateFeeAmounts` collected in the Vault accounting, supplying credit for each token. Then have the Vault transfer tokens to this contract, debiting each token for the amount transferred so that the transaction settles when the hook returns.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"details\":\"Not tied to any particular pool; this just performs the low-level \\\"additive fee\\\" calculation. Note that pool creator fees are calculated based on creatorAndLpFees, and not in totalFees. Since aggregate fees are stored in the Vault with 24-bit precision, this will truncate any values that require greater precision. It is expected that pool creators will negotiate with the DAO and agree on reasonable values for these fee components, but the truncation ensures it will not revert for any valid set of fee percentages. See example below: tokenOutAmount = 10000; poolSwapFeePct = 10%; protocolFeePct = 40%; creatorFeePct = 60% totalFees = tokenOutAmount * poolSwapFeePct = 10000 * 10% = 1000 protocolFees = totalFees * protocolFeePct = 1000 * 40% = 400 creatorAndLpFees = totalFees - protocolFees = 1000 - 400 = 600 creatorFees = creatorAndLpFees * creatorFeePct = 600 * 60% = 360 lpFees (will stay in the pool) = creatorAndLpFees - creatorFees = 600 - 360 = 240\",\"params\":{\"poolCreatorFeePercentage\":\"The pool creator portion of the aggregate fee percentage\",\"protocolFeePercentage\":\"The protocol portion of the aggregate fee percentage\"},\"returns\":{\"_0\":\"The computed aggregate percentage\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getGlobalProtocolSwapFeePercentage()\":{\"returns\":{\"_0\":\"The global protocol swap fee percentage\"}},\"getGlobalProtocolYieldFeePercentage()\":{\"returns\":{\"_0\":\"The global protocol yield fee percentage\"}},\"getPoolCreatorFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getPoolCreatorSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator swap fee component of the aggregate swap fee\"}},\"getPoolCreatorYieldFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"poolCreatorSwapFeePercentage The pool creator yield fee component of the aggregate yield fee\"}},\"getPoolProtocolSwapFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"The protocol swap fee percentage for the given pool\",\"_1\":\"True if the protocol fee has been overridden\"}},\"getPoolProtocolYieldFeeInfo(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"The protocol yield fee percentage for the given pool\",\"_1\":\"True if the protocol fee has been overridden\"}},\"getProtocolFeeAmounts(address)\":{\"details\":\"Includes both swap and yield fees.\",\"params\":{\"pool\":\"The address of the pool on which fees were collected\"},\"returns\":{\"feeAmounts\":\"The total amounts of each token available for withdrawal, sorted in token registration order\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"isRegistered True if the pool configuration has been set (e.g., through `registerPool`)\"}},\"manualSetPoolCreatorSwapFeePercentage(address,uint256)\":{\"details\":\"Set pool creator swap fee percentage without any constraints.\"},\"migratePool(address)\":{\"details\":\"Permission should NEVER be granted to this function outside of a migration contract. It is necessary to permit migration of the `ProtocolFeeController` with all state (in particular, protocol fee overrides and pool creator fees) that cannot be written outside of the `registerPool` function called by the Vault during pool deployment. Even if governance were to grant permission to call this function, the `_registeredPools` latch keeps it safe, guaranteeing that it is impossible to use this function to change anything after registration. A pool can only be registered / configured once - either copied to a new controller in the migration context, or added normally through the Vault calling `registerPool`.\",\"params\":{\"pool\":\"The address of the pool to be migrated\"}},\"registerPool(address,address,bool)\":{\"details\":\"This must be called from the Vault during pool registration. It will initialize the pool to the global protocol fee percentage values (or 0, if the `protocolFeeExempt` flags is set), and return the initial aggregate fee percentages, based on an initial pool creator fee of 0.\",\"params\":{\"pool\":\"The address of the pool being registered\",\"poolCreator\":\"The address of the pool creator (or 0 if there won't be a pool creator fee)\",\"protocolFeeExempt\":\"If true, the pool is initially exempt from protocol fees\"},\"returns\":{\"aggregateSwapFeePercentage\":\"The initial aggregate swap fee percentage\",\"aggregateYieldFeePercentage\":\"The initial aggregate yield fee percentage\"}},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage\"}},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage\"}},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorSwapFeePercentage\":\"The new pool creator swap fee percentage to apply to the pool\"}},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"details\":\"Fees are divided between the protocol, pool creator, and LPs. The pool creator percentage is applied to the \\\"net\\\" amount after protocol fees, and divides the remainder between the pool creator and LPs. If the pool creator fee is near 100%, almost none of the fee amount remains in the pool for LPs.\",\"params\":{\"pool\":\"The address of the pool for which the pool creator fee will be changed\",\"poolCreatorYieldFeePercentage\":\"The new pool creator yield fee percentage to apply to the pool\"}},\"setProtocolSwapFeePercentage(address,uint256)\":{\"params\":{\"newProtocolSwapFeePercentage\":\"The new protocol swap fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol swap fee\"}},\"setProtocolYieldFeePercentage(address,uint256)\":{\"params\":{\"newProtocolYieldFeePercentage\":\"The new protocol yield fee percentage for the pool\",\"pool\":\"The address of the pool for which we are setting the protocol yield fee\"}},\"updateProtocolSwapFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol swap fee\"}},\"updateProtocolYieldFeePercentage(address)\":{\"details\":\"This is a permissionless call, and will set the pool's fee to the current global fee, if it is different from the current value, and the fee is not controlled by governance (i.e., has never been overridden).\",\"params\":{\"pool\":\"The pool for which we are setting the protocol yield fee\"}},\"vault()\":{\"returns\":{\"_0\":\"vault The Vault address\"}},\"withdrawPoolCreatorFees(address)\":{\"details\":\"Sends swap and yield pool creator fees to the registered poolCreator. Since this is a known and immutable value, this function is permissionless.\",\"params\":{\"pool\":\"The pool on which fees were collected\"}},\"withdrawPoolCreatorFees(address,address)\":{\"details\":\"Sends swap and yield pool creator fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFees(address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\"}},\"withdrawProtocolFeesForToken(address,address,address)\":{\"details\":\"Sends swap and yield protocol fees to the recipient.\",\"params\":{\"pool\":\"The pool on which fees were collected\",\"recipient\":\"Address to send the tokens\",\"token\":\"Token to withdraw\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"CallerIsNotPoolCreator(address,address)\":[{\"notice\":\"Error raised if the wrong account attempts to withdraw pool creator fees.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"InvalidMigrationSource()\":[{\"notice\":\"Migration source cannot be this contract.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"Prevent pool data from being registered more than once.\"}],\"PoolCreatorFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the pool creator swap or yield fee percentage exceeds the maximum allowed value.\"}],\"PoolCreatorNotRegistered(address)\":[{\"notice\":\"Error raised if there is no pool creator on a withdrawal attempt from the given pool.\"}],\"ProtocolSwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol swap fee percentage exceeds the maximum allowed value.\"}],\"ProtocolYieldFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the protocol yield fee percentage exceeds the maximum allowed value.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"events\":{\"GlobalProtocolSwapFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated.\"},\"GlobalProtocolYieldFeePercentageChanged(uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated.\"},\"InitialPoolAggregateSwapFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate swap fee percentage, for off-chain processes.\"},\"InitialPoolAggregateYieldFeePercentage(address,uint256,bool)\":{\"notice\":\"Emitted on pool registration with the initial aggregate yield fee percentage, for off-chain processes.\"},\"PoolCreatorFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of pool creator fees in a specific token and amount.\"},\"PoolCreatorSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator swap fee percentage of a pool is updated.\"},\"PoolCreatorYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the pool creator yield fee percentage of a pool is updated.\"},\"PoolRegisteredWithFeeController(address,address,bool)\":{\"notice\":\"Emitted as a convenience during pool registration, more focused than the Vault's `PoolRegistered` event.\"},\"ProtocolFeesWithdrawn(address,address,address,uint256)\":{\"notice\":\"Logs the withdrawal of protocol fees in a specific token and amount.\"},\"ProtocolSwapFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol swap fees in a specific token and amount.\"},\"ProtocolSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol swap fee percentage is updated for a specific pool.\"},\"ProtocolYieldFeeCollected(address,address,uint256)\":{\"notice\":\"Logs the collection of protocol yield fees in a specific token and amount.\"},\"ProtocolYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the protocol yield fee percentage is updated for a specific pool.\"}},\"kind\":\"user\",\"methods\":{\"collectAggregateFees(address)\":{\"notice\":\"Collects aggregate fees from the Vault for a given pool.\"},\"computeAggregateFeePercentage(uint256,uint256)\":{\"notice\":\"Returns a calculated aggregate percentage from protocol and pool creator fee percentages.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getGlobalProtocolSwapFeePercentage()\":{\"notice\":\"Getter for the current global protocol swap fee.\"},\"getGlobalProtocolYieldFeePercentage()\":{\"notice\":\"Getter for the current global protocol yield fee.\"},\"getPoolCreatorFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the pool creator for withdrawal.\"},\"getPoolCreatorSwapFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator swap fee percentage for a given pool.\"},\"getPoolCreatorYieldFeePercentage(address)\":{\"notice\":\"Getter for the current pool creator yield fee percentage for a given pool.\"},\"getPoolProtocolSwapFeeInfo(address)\":{\"notice\":\"Getter for the current protocol swap fee for a given pool.\"},\"getPoolProtocolYieldFeeInfo(address)\":{\"notice\":\"Getter for the current protocol yield fee for a given pool.\"},\"getProtocolFeeAmounts(address)\":{\"notice\":\"Returns the amount of each pool token allocated to the protocol for withdrawal.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isPoolRegistered(address)\":{\"notice\":\"Getter for pool registration flag.\"},\"migratePool(address)\":{\"notice\":\"Not exposed in the interface, this enables migration of hidden pool state.\"},\"registerPool(address,address,bool)\":{\"notice\":\"Add pool-specific entries to the protocol swap and yield percentages.\"},\"setGlobalProtocolSwapFeePercentage(uint256)\":{\"notice\":\"Set the global protocol swap fee percentage, used by standard pools.\"},\"setGlobalProtocolYieldFeePercentage(uint256)\":{\"notice\":\"Set the global protocol yield fee percentage, used by standard pools.\"},\"setPoolCreatorSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator swap fee percentage to the specified pool.\"},\"setPoolCreatorYieldFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new pool creator yield fee percentage to the specified pool.\"},\"setProtocolSwapFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"setProtocolYieldFeePercentage(address,uint256)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"updateProtocolSwapFeePercentage(address)\":{\"notice\":\"Override the protocol swap fee percentage for a specific pool.\"},\"updateProtocolYieldFeePercentage(address)\":{\"notice\":\"Override the protocol yield fee percentage for a specific pool.\"},\"vault()\":{\"notice\":\"Get the address of the main Vault contract.\"},\"withdrawPoolCreatorFees(address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool.\"},\"withdrawPoolCreatorFees(address,address)\":{\"notice\":\"Withdraw collected pool creator fees for a given pool. This is a permissioned function.\"},\"withdrawProtocolFees(address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool (all tokens). This is a permissioned function.\"},\"withdrawProtocolFeesForToken(address,address,address)\":{\"notice\":\"Withdraw collected protocol fees for a given pool and a given token. This is a permissioned function.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/test/ProtocolFeeControllerMock.sol\":\"ProtocolFeeControllerMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/test/IVaultAdminMock.sol\":{\"keccak256\":\"0x51d1502369f0bb1fec58b7aa848f20e6ea3ddcb4866471e2fdbe96f0f6783fb5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab9f73ec13f137f3103edf9caa8edc4752db585393cc7db6c62f85a1efdbfb5e\",\"dweb:/ipfs/QmXBoBF18c1f33NYqPmrJ3cqULMak55uznBvzfpf1bHpDd\"]},\"@balancer-labs/v3-interfaces/contracts/test/IVaultExtensionMock.sol\":{\"keccak256\":\"0x18c434c91bbcd260bd305f2cdc01684a3040bc633c1b185f95cb323a336ac76c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://270260ba29c81dc6d862a0830ccbbdcd81b4543bd9c9b54228493a92568532d4\",\"dweb:/ipfs/QmTHp7v5dGwLujPRaWkoEM22Loy3MuspodMGcm4syAPUvk\"]},\"@balancer-labs/v3-interfaces/contracts/test/IVaultMainMock.sol\":{\"keccak256\":\"0x63f1a4d7fbd2ed33fb622cc5a141a9ccc1d3f99f30ac5d72b75a2bb36965bd42\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de9db0a61bc99572d72030c73feff2e4337104fd43a3d764f181b857c621246c\",\"dweb:/ipfs/QmcxzP6SqNAkqg4APteqzsxRkxyxcZhMF21b3sCKiCymSP\"]},\"@balancer-labs/v3-interfaces/contracts/test/IVaultMock.sol\":{\"keccak256\":\"0x66a706de1a8eb2836d3a6f41ce8b05b244169c42ff5f947affd885b34c722bd3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://88e094f387cf6886b7f9764acaf37b3aa278a1a1fb2dc748d29a791b9fe742d9\",\"dweb:/ipfs/QmdaNH3JjqcpgjvNKG4XVbEbJC9wuhH6gwtv8nifGsBmi4\"]},\"@balancer-labs/v3-interfaces/contracts/test/IVaultStorageMock.sol\":{\"keccak256\":\"0xb59762a929624826418e57ef85207703bedfbab512eeb422fd16d40520ab05d9\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8f6363f3ac816ff34ac5b78a564ed0febc9772d1dc130674e73db0a63b29273d\",\"dweb:/ipfs/QmSbmTTFb4vGqHSGQu974CHu146pCfzJRGFMxyN8ujopf7\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol\":{\"keccak256\":\"0x89bd8b60aa203c8aa72af6e88671af68f4407a26dd3e0541b0e4dc387fd0081e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://411eb9ee6df963198102de5ae597c1f1377b0a45be23f17d38463f2eeefa2b0a\",\"dweb:/ipfs/QmcEaMawADJEyLswG5hhvhQuTNV3XUxBVu3YZCbJzQkoJ7\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":{\"keccak256\":\"0xb5f6b1d0ee3f295a717ce58329eaadccb1eefc2e1e02e2e7c438e377628475cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03c1b9bc73b7d14d9e1948a31c271a03a6ba4291f44d9aff17e60d300c111d0d\",\"dweb:/ipfs/QmNpW3iD3ST76N6xTncuVgYSuafSqFkXUmxNaK8uybr96G\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/ProtocolFeeController.sol\":{\"keccak256\":\"0x11b6e6c5d818d4f7c2ad5afbbd226230deb0f1c42b5cac2159dd66a8d0c9a1b6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://25e64898f2101a3c2492bdf08837b049859306df52fdfc925588cbcd39c01b02\",\"dweb:/ipfs/QmVC7Qs2X7XLwdswtp7Tzu5bYvGQyGfpL3YkYr6tJBHaEn\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x4910eb69dc3e3141803a36fb176349ae3d774f4a9811e4d486c44bf6a8e4e055\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://afec051b387a1dad075acfbe0093b443e9e5827e29f7b960af3c1b69645aa290\",\"dweb:/ipfs/QmdLcyhmHCiEyVbFsVByyjEdUn9pDTzVAPNyBpdH2YEs4Y\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@balancer-labs/v3-vault/contracts/test/ProtocolFeeControllerMock.sol\":{\"keccak256\":\"0x522a55b78381a573e7e56a18ec540e2155ef855026919d18c18590669237ca15\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://38aa682ed5ed6589255bfe2ae0b94f1248f9f5ba13e72c4bcbfaa06a6dd209d7\",\"dweb:/ipfs/QmPrhTBWtmKKYxNBTcpvpFtVdiwvvHu3abM2ANwyy6sunG\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/test/RateProviderMock.sol":{"RateProviderMock":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRate","type":"uint256"}],"name":"mockRate","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60808060405234601e57670de0b6b3a76400005f5560d2908160238239f35b5f80fdfe60808060405260043610156011575f80fd5b5f3560e01c908163679aefce146067575063a1cfa04114602f575f80fd5b3460635760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126063576004355f55005b5f80fd5b346063575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126063576020905f548152f3fea2646970667358221220a5fdf4bed29a77c2c9a874354e0bfe7de6298b2f788a6e43becdf2457dc6385c64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x1E JUMPI PUSH8 0xDE0B6B3A7640000 PUSH0 SSTORE PUSH1 0xD2 SWAP1 DUP2 PUSH1 0x23 DUP3 CODECOPY RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH1 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x679AEFCE EQ PUSH1 0x67 JUMPI POP PUSH4 0xA1CFA041 EQ PUSH1 0x2F JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH1 0x63 JUMPI PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH1 0x63 JUMPI PUSH1 0x4 CALLDATALOAD PUSH0 SSTORE STOP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH1 0x63 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH1 0x63 JUMPI PUSH1 0x20 SWAP1 PUSH0 SLOAD DUP2 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA5 REVERT DELEGATECALL 0xBE 0xD2 SWAP11 PUSH24 0xC2C9A874354E0BFE7DE6298B2F788A6E43BECDF2457DC638 TLOAD PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"280:344:90:-:0;;;;;;;465:4:50;382:22:90;465:4:50;280:344:90;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"60808060405260043610156011575f80fd5b5f3560e01c908163679aefce146067575063a1cfa04114602f575f80fd5b3460635760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126063576004355f55005b5f80fd5b346063575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126063576020905f548152f3fea2646970667358221220a5fdf4bed29a77c2c9a874354e0bfe7de6298b2f788a6e43becdf2457dc6385c64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH1 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x679AEFCE EQ PUSH1 0x67 JUMPI POP PUSH4 0xA1CFA041 EQ PUSH1 0x2F JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH1 0x63 JUMPI PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH1 0x63 JUMPI PUSH1 0x4 CALLDATALOAD PUSH0 SSTORE STOP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH1 0x63 JUMPI PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH1 0x63 JUMPI PUSH1 0x20 SWAP1 PUSH0 SLOAD DUP2 MSTORE RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xA5 REVERT DELEGATECALL 0xBE 0xD2 SWAP11 PUSH24 0xC2C9A874354E0BFE7DE6298B2F788A6E43BECDF2457DC638 TLOAD PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"280:344:90:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"methodIdentifiers":{"getRate()":"679aefce","mockRate(uint256)":"a1cfa041"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"getRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newRate\",\"type\":\"uint256\"}],\"name\":\"mockRate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"getRate()\":{\"details\":\"The meaning of this rate depends on the context. Note that there may be an error associated with a token rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface does not take a rounding direction or return an error, so great care must be taken when interpreting and using rates in downstream computations.\",\"returns\":{\"_0\":\"The current token rate\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"getRate()\":{\"notice\":\"An 18 decimal fixed point number representing the exchange rate of one token to another related token.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/test/RateProviderMock.sol\":\"RateProviderMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-vault/contracts/test/RateProviderMock.sol\":{\"keccak256\":\"0x15772ae4aae0383c40b50689c0bd27af685aaf858758400cf17aba4b87ebafc2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://910e0274c07b8a0fe96d60a2a31a5381dbe29a8d1643dfb7f7e143d070970055\",\"dweb:/ipfs/QmWnLEEdpxSjroaDj3YtD2wcrvMXpnVk2jV59yi4MmyLCK\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/test/RouterMock.sol":{"RouterMock":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"contract IWETH","name":"weth","type":"address"},{"internalType":"contract IPermit2","name":"permit2","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"ErrorSelectorNotFound","type":"error"},{"inputs":[],"name":"EthTransfer","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[],"name":"InsufficientEth","type":"error"},{"inputs":[],"name":"MockErrorCode","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"name":"Result","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SwapDeadline","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"addLiquidityCustom","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct IRouterCommon.AddLiquidityHookParams","name":"params","type":"tuple"}],"name":"addLiquidityHook","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"addLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"addLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"addLiquidityUnbalanced","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"donate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getPermit2","outputs":[{"internalType":"contract IPermit2","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSender","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountGiven","type":"uint256"}],"name":"getSingleInputArrayAndTokenIndex","outputs":[{"internalType":"uint256[]","name":"amountsGiven","type":"uint256[]"},{"internalType":"uint256","name":"tokenIndex","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWeth","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct IRouter.InitializeHookParams","name":"params","type":"tuple"}],"name":"initializeHook","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"}],"internalType":"struct RouterMock.ManualAddRemoveLiquidityParams","name":"params","type":"tuple"}],"name":"manualAddAndRemoveLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"}],"internalType":"struct RouterMock.ManualAddRemoveLiquidityParams","name":"params","type":"tuple"}],"name":"manualAddAndRemoveLiquidityHook","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualReentrancyAddLiquidityHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualReentrancyInitializeHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualReentrancyQuerySwapHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualReentrancyRemoveLiquidityHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualReentrancyRemoveLiquidityRecoveryHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualReentrancySwapSingleTokenHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"internalType":"struct IRouterCommon.PermitApproval[]","name":"permitBatch","type":"tuple[]"},{"internalType":"bytes[]","name":"permitSignatures","type":"bytes[]"},{"components":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint160","name":"amount","type":"uint160"},{"internalType":"uint48","name":"expiration","type":"uint48"},{"internalType":"uint48","name":"nonce","type":"uint48"}],"internalType":"struct IAllowanceTransfer.PermitDetails[]","name":"details","type":"tuple[]"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"sigDeadline","type":"uint256"}],"internalType":"struct IAllowanceTransfer.PermitBatch","name":"permit2Batch","type":"tuple"},{"internalType":"bytes","name":"permit2Signature","type":"bytes"},{"internalType":"bytes[]","name":"multicallData","type":"bytes[]"}],"name":"permitBatchAndCall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquidityCustom","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct IRouterCommon.AddLiquidityHookParams","name":"params","type":"tuple"}],"name":"queryAddLiquidityHook","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryAddLiquidityUnbalanced","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquidityCustom","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct IRouterCommon.RemoveLiquidityHookParams","name":"params","type":"tuple"}],"name":"queryRemoveLiquidityHook","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"}],"name":"queryRemoveLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"}],"name":"queryRemoveLiquidityRecoveryHook","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquiditySingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"queryRemoveLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"queryRevertErrorCode","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"queryRevertErrorCodeHook","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"queryRevertLegacy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"queryRevertLegacyHook","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"queryRevertNoReason","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"queryRevertNoReasonHook","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"queryRevertPanic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"queryRevertPanicHook","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"querySpoof","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"querySpoofHook","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGiven","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct IRouter.SwapSingleTokenHookParams","name":"params","type":"tuple"}],"name":"querySwapHook","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"querySwapSingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountCalculated","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"querySwapSingleTokenExactInAndRevert","outputs":[{"internalType":"uint256","name":"amountCalculated","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"querySwapSingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountCalculated","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"removeLiquidityCustom","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct IRouterCommon.RemoveLiquidityHookParams","name":"params","type":"tuple"}],"name":"removeLiquidityHook","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"removeLiquidityProportional","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecoveryHook","outputs":[{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"removeLiquiditySingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"removeLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountIn","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"swapSingleTokenExactIn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"swapSingleTokenExactOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGiven","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"wethIsEth","type":"bool"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct IRouter.SwapSingleTokenHookParams","name":"params","type":"tuple"}],"name":"swapSingleTokenHook","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}],"evm":{"bytecode":{"functionDebugData":{"finalize_allocation":{"entryPoint":1181,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_5225":{"entryPoint":1154,"id":null,"parameterSlots":1,"returnSlots":0},"fun_calculateSlot":{"entryPoint":1216,"id":6911,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6101206040908082523461047e576060816170d58038038091610022828561049d565b83398101031261047e578051916001600160a01b0391828416840361047e5760208082015191848316830361047e57830151938416840361047e5782519461006986610482565b600e86526d4d6f636b20526f7574657220763160901b828701526100cb845161009181610482565b600b81526a14d95b99195c91dd585c9960aa1b848201528551906100b482610482565b600682526539b2b73232b960d11b858301526104c0565b60805260a0528451946001600160401b03861161046a575f54906001918281811c91168015610460575b8482101461044c57601f8111610406575b508290601f88116001146103a4579680928192610188969798995f94610399575b50501b915f199060031b1c1916175f555b835161014381610482565b600c81526b2937baba32b921b7b6b6b7b760a11b82820152701a5cd4995d1d5c9b915d1a131bd8dad959607a1b85519261017c84610482565b601184528301526104c0565b60c05260e05261010091825251616b62918261057383396080518281816105c901528181610bbe01528181610df20152818161154b015281816122910152818161277c0152818161312b01528181615fba015261616e015260a0518281816103f101528181610568015281816106f6015281816108d401528181610b5e01528181610dbb015281816110dc0152818161122e015281816113d9015281816116e1015281816117d901528181611ab801528181611f3401528181612074015281816121f80152818161233a015281816124590152818161265a015281816127d501528181612e98015281816130cb0152818161327a015281816133040152818161389801528181613ad1015281816143eb015281816147070152818161478301528181614c9a01528181615b8101528181615d9b01528181615e4501528181615ea501528181615f05015281816160a7015281816161e201528181616514015281816167700152818161682d015261687d015260c051828181615f440152616479015260e051828181602201528181611c5001528181611d000152818161235b015281816123af015281816125a40152818161297b01528181612af7015281816143a90152818161490c01528181614a8b0152818161684e0152616917015251818181612435015281816129a90152818161343301528181613c6201528181613e2801528181613f2a01526149390152f35b015192505f80610127565b9690601f198216905f8052845f20915f5b8181106103f1575098836101889798999a106103d9575b505050811b015f55610138565b01515f1960f88460031b161c191690555f80806103cc565b8a8301518455928501929186019186016103b5565b5f8052835f20601f890160051c810191858a10610442575b601f0160051c019083905b828110610437575050610106565b5f8155018390610429565b909150819061041e565b634e487b7160e01b5f52602260045260245ffd5b90607f16906100f5565b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b604081019081106001600160401b0382111761046a57604052565b601f909101601f19168101906001600160401b0382119082101761046a57604052565b9061052d603a60209260405193849181808401977f62616c616e6365722d6c6162732e76332e73746f726167652e000000000000008952805191829101603986015e830190601760f91b60398301528051928391018583015e015f8382015203601a81018452018261049d565b5190205f19810190811161055e5760405190602082019081526020825261055382610482565b9051902060ff191690565b634e487b7160e01b5f52601160045260245ffdfe60806040526004361015610072575b3615610018575f80fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361004a57005b7f0540ddf6000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f3560e01c8063026b3d9514614b57578063086fad661461476357806308c04793146146455780630c3b846f146145a65780630ca078ec1461450e5780630f710888146143cd578063107c279f1461438a578063175d4408146142ab57806319c6989f14613c865780631bbf2e2314613c435780631d56798d14613aa857806322717db214613a3a57806323b3924114613838578063339f38381461381e5780633a1b05de146132e75780633ebc54e51461316a578063452db95214612fe657806345d132fe14612fae5780634aeecca914612f945780634b59d17c14612f105780635168275014612dfd57806353d0bb9814612d4857806354fd4d5014612c0b57806358307e4414612ba25780635b343791146127ad5780635e01eb5a146127685780635f9815ff1461262557806364c90707146125cd57806368a24fe0146122d257806368d5e16a146120b5578063724dba3314611f9c57806372657d1714611e51578063750283bc14611dd45780637ae3096014611dba5780637b03c7ba14611a8a57806382bf2b24146119b657806382cd54fb1461177657806390aa9f761461175c57806394e86ef8146115d15780639de90518146113b2578063aaf51ea314611398578063ac9650d814611354578063ad6d59f3146112ae578063b037ed361461114a578063b24bd57114611000578063b29a62a714610fa4578063b3b0a7a714610f9b578063be5ae84114610f46578063beb91feb14610e2e578063bf6ee3fd14610c95578063c08bc85114610bfd578063c330c7be14610a36578063c3ec0efc1461097d578063d3a5152a14610940578063da001f7d146107af578063e178073e14610761578063e7326def14610610578063ecb2182c146104725763efd85f140361000e573461046e5761030d36614f2d565b6103156161d8565b6001600160a01b039061032a6020820161559f565b6103338261559f565b9261034160408401846155b3565b9093608081013593600585101561046e57836103ac6103ed966060856103975f9c9b61038799878f9e61037a60c06103b39d0187615607565b9a909b6040519e8f614db6565b168d521660208c01523691614e45565b604089015201356060870152608086016158eb565b3691614edc565b60a08201526040519485809481937f4af29ec400000000000000000000000000000000000000000000000000000000835260048301615ca0565b03927f0000000000000000000000000000000000000000000000000000000000000000165af18015610463575f905f925f91610439575b506104359060405193849384615021565b0390f35b9050610435925061045c91503d805f833e6104548183614e0a565b8101906157eb565b9092610424565b6040513d5f823e3d90fd5b5f80fd5b6105286104a15f61051a81610564610489366153ea565b97939a929990949161049a33616169565b9a836164c6565b9790946001600160a01b039b8c96604051946104bc86614d69565b33865260209e8f9116908601526040850152606084015260016080840152151560a083015260c08201526040519283917f7b03c7ba000000000000000000000000000000000000000000000000000000008c840152602483016159cb565b03601f198101835282614e0a565b6040519586809481937f48c894910000000000000000000000000000000000000000000000000000000083528b60048401526024830190614ffc565b03927f0000000000000000000000000000000000000000000000000000000000000000165af1918215610463576105b7926105af915f916105ee575b50858082518301019101615a29565b509050615b0f565b51906105c6575b604051908152f35b5f7f00000000000000000000000000000000000000000000000000000000000000005d6105be565b61060a91503d805f833e6106028183614e0a565b810190615579565b866105a0565b61051a6106b65f806106f2610641610627366153ea565b9161063a9b959b9a949691939a33616169565b9a8c6164c6565b50916001600160a01b03956040519361065985614d69565b3385528760209d168d8601526040850152606084015260026080840152151560a083015260c08201526040519283917f7b03c7ba000000000000000000000000000000000000000000000000000000008b840152602483016159cb565b6040519485809481937f48c894910000000000000000000000000000000000000000000000000000000083528a60048401526024830190614ffc565b03927f0000000000000000000000000000000000000000000000000000000000000000165af1801561046357610738915f91610747575b50838082518301019101615a29565b5050906105c657604051908152f35b61075b91503d805f833e6106028183614e0a565b84610729565b3461046e57606060031936011261046e576107a5610791610780614cfd565b610788614d29565b604435916164c6565b604051928392604084526040840190614f5f565b9060208301520390f35b3461046e57608060031936011261046e576107c8614cfd565b67ffffffffffffffff60243581811161046e576107e9903690600401614e93565b906107f2614d3f565b60643591821161046e576108d05f929161051a61089461082061081a87963690600401614f12565b93616169565b966001600160a01b03936040519161083783614d69565b3083528560209b168b8401526040830152866060830152600160808301528660a083015260c08201526040519283917fefd85f14000000000000000000000000000000000000000000000000000000008b8401526024830161586e565b6040519485809481937fedfa35680000000000000000000000000000000000000000000000000000000083528a60048401526024830190614ffc565b03927f0000000000000000000000000000000000000000000000000000000000000000165af1801561046357610916915f91610926575b508380825183010191016157eb565b509190506105c657604051908152f35b61093a91503d805f833e6106028183614e0a565b84610907565b3461046e575f60031936011261046e577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b3461046e575f60031936011261046e576109956161ab565b6109d560206109a2615dcc565b604051809381927f68a24fe000000000000000000000000000000000000000000000000000000000835260048301615a7e565b03815f305af1801561046357610a0b575b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b602090813d8311610a2f575b610a218183614e0a565b8101031261046e57806109e6565b503d610a17565b3461046e5760a060031936011261046e57610a4f614cfd565b67ffffffffffffffff60443581811161046e57610a70903690600401614e93565b91610a79614d13565b9160843590811161046e575f9361051a610b1d8694610aa8610aa2610b5a963690600401614f12565b97616169565b966001600160a01b03948560405193610ac085614d69565b30855216602084015260408301526024356060830152600360808301528660a083015260c08201526040519283917fb24bd571000000000000000000000000000000000000000000000000000000006020840152602483016159cb565b6040519586809481937fedfa3568000000000000000000000000000000000000000000000000000000008352602060048401526024830190614ffc565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19182156104635761043592610ba6915f91610be3575b5060208082518301019101615a29565b90939192610bbb575b604051938493846153bf565b5f7f00000000000000000000000000000000000000000000000000000000000000005d610baf565b610bf791503d805f833e6106028183614e0a565b84610b96565b61051a6106b65f806108d0610c1136614f92565b610c219993919892949933616169565b986001600160a01b039560405193610c3885614d69565b3385528760209d168d8601526040850152606084015260016080840152151560a083015260c08201526040519283917f5b343791000000000000000000000000000000000000000000000000000000008b8401526024830161586e565b608060031936011261046e57610ca9614cfd565b67ffffffffffffffff9060243582811161046e57610ccb903690600401614e93565b906044359283151580940361046e5760643590811161046e575f9261051a610d7a8594610cff610db7953690600401614f12565b610d0833616169565b986001600160a01b03958660405194610d2086614d69565b33865216602085015260408401528760608401526003608084015260a083015260c08201526040519283917f5b3437910000000000000000000000000000000000000000000000000000000060208401526024830161586e565b6040519485809481937f48c89491000000000000000000000000000000000000000000000000000000008352602060048401526024830190614ffc565b03927f0000000000000000000000000000000000000000000000000000000000000000165af1801561046357610e14575b50610def57005b5f7f00000000000000000000000000000000000000000000000000000000000000005d005b610e27903d805f833e6106028183614e0a565b5081610de8565b3461046e575f60031936011261046e57610e466161ab565b6040516060810181811067ffffffffffffffff821117610f1957610ec2915f91604052600281526040366020830137604051809381927f82cd54fb000000000000000000000000000000000000000000000000000000008352846004840152846024840152846044840152608060648401526084830190614f5f565b038183305af1801561046357610ef7575f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b610f12903d805f833e610f0a8183614e0a565b81019061578f565b50806109e6565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b3461046e576020610f6e610f5936615313565b610f616161ab565b610f696161d8565b61663c565b50505f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051908152f35b3461046e575f80fd5b3461046e5760a060031936011261046e57610fbd614cfd565b610fc5614d29565b610fcd614d3f565b6084359167ffffffffffffffff831161046e57602093610ff46105be943690600401615139565b9390926064359261608b565b3461046e5761100e36614f2d565b6110166161d8565b6001600160a01b0361102a6020830161559f565b6110338361559f565b9161104160408501856155b3565b9490608082013593600485101561046e57836103ac6110d89661109061109e955f9b606089878f9e61037a60c06110799e0184615607565b168d521660208c0152013560408a01523691614e45565b6060870152608086016159b2565b60a08201526040519485809481937f2145789700000000000000000000000000000000000000000000000000000000835260048301615d10565b03927f0000000000000000000000000000000000000000000000000000000000000000165af18015610463575f905f925f91611120575b5061043590604051938493846153bf565b9050610435925061114391503d805f833e61113b8183614e0a565b810190615a29565b909261110f565b3461046e57604060031936011261046e57611163614cfd565b6001600160a01b0360405190806020937f5f9815ff000000000000000000000000000000000000000000000000000000008585015216602483015230604483015260243560648301526064825260a082019082821067ffffffffffffffff831117610f1957815f91816040527fedfa35680000000000000000000000000000000000000000000000000000000082528560a486015281837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608761122960c4820182614ffc565b0301927f0000000000000000000000000000000000000000000000000000000000000000165af190811561046357611272925f92611287575b505082808251830101910161578f565b90610435604051928284938452830190614f5f565b6112a7925060a0903d90815f853e61129f8285614e0a565b010190615579565b8380611262565b3461046e575f60031936011261046e576112c66161ab565b6113055f6112d26157b5565b604051809381927f7b03c7ba000000000000000000000000000000000000000000000000000000008352600483016159cb565b038183305af180156104635761133a575f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b61134d903d805f833e61113b8183614e0a565b50506109e6565b602060031936011261046e5760043567ffffffffffffffff811161046e5761138c611386610435923690600401615108565b90615f36565b60405191829182615167565b3461046e575f60031936011261046e5760206105be615ed6565b3461046e576113cc6113c33661504a565b92919390616169565b916001600160a01b0390817f00000000000000000000000000000000000000000000000000000000000000001691604051937fca4f280300000000000000000000000000000000000000000000000000000000855216928360048201525f81602481865afa908115610463575f916115af575b50519461144b86615981565b955f5b81811061158a5750505f9261051a6114cc888695611508956040519261147384614d69565b30845260209a8b850152604084015260608301528660808301528660a083015260c08201526040519283917fefd85f14000000000000000000000000000000000000000000000000000000008a8401526024830161586e565b6040519485809481937fedfa35680000000000000000000000000000000000000000000000000000000083528960048401526024830190614ffc565b03925af180156104635761152c915f91611570575b508280825183010191016157eb565b505091611548575b610435604051928284938452830190614f5f565b5f7f00000000000000000000000000000000000000000000000000000000000000005d611534565b61158491503d805f833e6106028183614e0a565b8461151d565b806fffffffffffffffffffffffffffffffff6115a86001938b615b0f565b520161144e565b6115cb91503d805f833e6115c38183614e0a565b8101906158f7565b8661143f565b6115da36615346565b949095939193336115ea90616169565b97604051996115f88b614d99565b338b5260208b01600190526001600160a01b031660408b01526001600160a01b031660608a01526001600160a01b0316608089015260a088015260c087015260e08601521515610100850152369061164f92614edc565b6101208301526040517f68a24fe000000000000000000000000000000000000000000000000000000000602082015291829061168e9060248301615a7e565b03601f19810183526116a09083614e0a565b60405180927f48c894910000000000000000000000000000000000000000000000000000000082526004820160209052602482016116dd91614ffc565b03827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691815a5f948591f1918215610463575f92611740575b5060208280518101031261046e57602080920151906105c657604051908152f35b6117559192503d805f833e6106028183614e0a565b908261171f565b3461046e575f60031936011261046e5760206105be615e76565b3461046e57608060031936011261046e5761178f614cfd565b611797614d29565b906064359067ffffffffffffffff821161046e576117bc611832923690600401614e93565b906117c56161ab565b6117cd6161d8565b6001600160a01b035f817f00000000000000000000000000000000000000000000000000000000000000001693604051809681927fa07d60400000000000000000000000000000000000000000000000000000000083526044358a88600486016156ff565b038183875af1938415610463575f9461199a575b5080604051927fca4f28030000000000000000000000000000000000000000000000000000000084521660048301525f82602481865afa918215610463575f9261197e575b505f5b825181101561193a576118a18186615b0f565b5190816118b3575b600191500161188e565b826118be8286615b0f565b5116853b1561046e576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152908816602482015260448101929092525f8260648183895af19182156104635760019261192b575b506118a9565b61193490614d85565b87611925565b6104358561194788616470565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051918291602083526020830190614f5f565b6119939192503d805f833e6115c38183614e0a565b908561188b565b6119af9194503d805f833e610f0a8183614e0a565b9285611846565b5f61051a81610b5a611a4d6119ca366152aa565b906119da98949295939833616169565b986001600160a01b039687604051956119f287614d69565b3387521660208601526040850152606084015260036080840152151560a083015260c08201526040519283917f7b03c7ba000000000000000000000000000000000000000000000000000000006020840152602483016159cb565b6040519586809481937f48c89491000000000000000000000000000000000000000000000000000000008352602060048401526024830190614ffc565b3461046e57611a9836614f2d565b611aa06161ab565b611aa86161d8565b6001600160a01b039060208101907f000000000000000000000000000000000000000000000000000000000000000090838216611ae48461559f565b94611aee8361559f565b611afb60408501856155b3565b979091608086013590600482101561046e57846103ac611b57936110905f97611b8f9e611b2c8d60c0810190615607565b969097816040519b611b3d8d614db6565b168b521660208a015260608d013560408a01523691614e45565b60a0820152604051809881927f2145789700000000000000000000000000000000000000000000000000000000835260048301615d10565b038183865af1908115610463575f955f975f93611d91575b50611bb19061559f565b9681604051987fca4f2803000000000000000000000000000000000000000000000000000000008a521660048901525f88602481875afa978815610463575f98611d75575b50919560a0850192905f5b8951811015611d3057611c148184615b0f565b51908115611d275784611c27828d615b0f565b5116611c32876156f2565b80611cfc575b15611c7a5750611c74600192611c4d8a61559f565b8b7f0000000000000000000000000000000000000000000000000000000000000000616946565b01611c01565b611c838961559f565b883b1561046e576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529116602482015260448101929092525f82606481838b5af191821561046357600192611ced575b50611c74565b611cf690614d85565b8b611ce7565b50857f0000000000000000000000000000000000000000000000000000000000000000168114611c38565b60019150611c74565b5061043588611d46611d418961559f565b616470565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051938493846153bf565b611d8a9198503d805f833e6115c38183614e0a565b9688611bf6565b909250611dae919750611bb196503d805f833e61113b8183614e0a565b97919690979290611ba7565b3461046e575f60031936011261046e5760206105be615e16565b611ddd36615346565b94909593919333611ded90616169565b9760405199611dfb8b614d99565b338b5260208b015f90526001600160a01b031660408b01526001600160a01b031660608a01526001600160a01b0316608089015260a088015260c087015260e08601521515610100850152369061164f92614edc565b60c060031936011261046e57611e65614cfd565b611e6d614d29565b611e75614eb1565b60a4359067ffffffffffffffff821161046e575f611f30611e9b82943690600401614f12565b9261051a610528611eb9611eae33616169565b98604435908b6164c6565b966001600160a01b039460405192611ed084614d69565b3384528660209d168d8501526040840152606435606084015260026080840152151560a083015260c08201526040519283917f5b343791000000000000000000000000000000000000000000000000000000008c8401526024830161586e565b03927f0000000000000000000000000000000000000000000000000000000000000000165af1918215610463576105b792611f7b915f91611f82575b508580825183010191016157eb565b5050615b0f565b611f9691503d805f833e6106028183614e0a565b86611f6c565b61051a6120345f80612070611fb036614f92565b611fc1999391999892949833616169565b996001600160a01b039560405193611fd885614d69565b3385528760209c168c86015260408501526060840152876080840152151560a083015260c08201526040519283917f5b343791000000000000000000000000000000000000000000000000000000008a8401526024830161586e565b6040519485809481937f48c894910000000000000000000000000000000000000000000000000000000083528960048401526024830190614ffc565b03927f0000000000000000000000000000000000000000000000000000000000000000165af180156104635761152c915f9161157057508280825183010191016157eb565b3461046e576120c336615247565b6120cc33616169565b6001600160a01b0390604051906020937f3a1b05de00000000000000000000000000000000000000000000000000000000858401528460248401528361211182614d55565b16604484015283612123868301614d55565b16606484015260408101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561046e5781019085823592019467ffffffffffffffff9485841161046e578360051b3603871361046e576121b8816121f49460606121a25f9b8c996080608487015260c4860191615658565b91013560a483015203601f198101835282614e0a565b6040519687809481937f48c894910000000000000000000000000000000000000000000000000000000083528b60048401526024830190614ffc565b03927f0000000000000000000000000000000000000000000000000000000000000000165af1928315610463575f936122b6575b50825183019360808482870196031261046e578084015183811161046e5785826122549287010161572e565b93604081015195606082015192608083015195861161046e576104359561227c93010161572e565b9161228e575b60405194859485615279565b5f7f00000000000000000000000000000000000000000000000000000000000000005d612282565b6122cb9193503d805f833e6106028183614e0a565b9184612228565b3461046e576122e036615313565b6122e86161ab565b6122f06161d8565b6122f98161663c565b61230760608593950161559f565b906123118361559f565b94610100840195612321876156f2565b80612598575b156124155750946123a49161237f6020977f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061627a565b6123888561559f565b9161239e6123986080880161559f565b916156f2565b92616814565b6001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016911614612403575b505f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051908152f35b611d4161240f9161559f565b826123d7565b81612429575b50506020946123a49161237f565b6001600160a01b0390817f00000000000000000000000000000000000000000000000000000000000000001691807f0000000000000000000000000000000000000000000000000000000000000000169161248385616236565b93803b1561046e576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152848316602482015294821660448601529187161660648401525f908390608490829084905af1908115610463575f9360209361254993612589575b506040519485809481937f15afd4090000000000000000000000000000000000000000000000000000000083528a60048401602090939291936001600160a01b0360408201951681520152565b03925af180156104635761255e575b8061241b565b602090813d8311612582575b6125748183614e0a565b8101031261046e5785612558565b503d61256a565b61259290614d85565b8a6124fc565b506001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001690851614612327565b3461046e575f60031936011261046e576125e56161ab565b6109d560206125f2615dcc565b604051809381927fbe5ae84100000000000000000000000000000000000000000000000000000000835260048301615a7e565b3461046e57606060031936011261046e5761263e614cfd565b612646614d29565b61264e6161d8565b6001600160a01b0390817f000000000000000000000000000000000000000000000000000000000000000016604051927fca4f2803000000000000000000000000000000000000000000000000000000008452841660048401525f83602481845afa938415610463575f6126cf61270a968296839161274e575b5051615981565b93604051968795869485937fa07d604000000000000000000000000000000000000000000000000000000000855260443591600486016156ff565b03925af1801561046357610435915f91612734575b50604051918291602083526020830190614f5f565b61274891503d805f833e610f0a8183614e0a565b8261271f565b61276291503d8085833e6115c38183614e0a565b886126c8565b3461046e575f60031936011261046e5760207f00000000000000000000000000000000000000000000000000000000000000005c6001600160a01b0360405191168152f35b3461046e576127bb36614f2d565b6127c36161ab565b6127cb6161d8565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081811692602090818101906128088261559f565b956128128261559f565b9661282060408401846155b3565b919098608085013591600583101561046e57896103ac612864946128736128c39e5f988d8661288b996128578f60c0810190615607565b99909a6040519d8e614db6565b168c5216908a01523691614e45565b604087015260608901356060870152608086016158eb565b60a0820152604051809981927f4af29ec400000000000000000000000000000000000000000000000000000000835260048301615ca0565b038183855af1958615610463575f935f985f98612b79575b506128e59061559f565b81604051917fca4f28030000000000000000000000000000000000000000000000000000000083521660048201525f81602481865afa908115610463575f91612b5f575b50969760a0840197905f5b8251811015612b1e57836129488285615b0f565b51166129548289615b0f565b51908115612ab1576129658c6156f2565b80612af3575b156129a557509061299f6001928b7f000000000000000000000000000000000000000000000000000000000000000061627a565b01612934565b90857f000000000000000000000000000000000000000000000000000000000000000016906129d38961559f565b6129dc82616236565b833b1561046e576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201528a831660248201529082166044820152908416606482015292915f908490608490829084905af191821561046357612a9d938c93612ae4575b5060405193849283927f15afd40900000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03815f8a5af1908115610463578991612abb575b505060019061299f565b813d8311612add575b612ace8183614e0a565b8101031261046e57878c612ab1565b503d612ac4565b612aed90614d85565b8f612a52565b50857f000000000000000000000000000000000000000000000000000000000000000016811461296b565b50856104358b612b30611d418961559f565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d60405193849384615021565b612b7391503d805f833e6115c38183614e0a565b89612929565b909750612b969198506128e594503d805f833e6104548183614e0a565b989194909897906128db565b3461046e575f60031936011261046e57612c076040516104d2602082015260208152612bcd81614dee565b6040519182917f5ab64fb8000000000000000000000000000000000000000000000000000000008352602060048401526024830190614ffc565b0390fd5b3461046e575f60031936011261046e576040515f5f549060018260011c9160018416918215612d3e575b6020948585108414612d115785879486865291825f14612cd3575050600114612c7a575b50612c6692500383614e0a565b610435604051928284938452830190614ffc565b5f808052859250907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b858310612cbb575050612c66935082010185612c59565b80548389018501528794508693909201918101612ca4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685820152612c6695151560051b8501019250879150612c599050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f1692612c35565b3461046e57612d79612d725f806106f261089461051a612d67366151e8565b95939a929990616169565b988a6164c6565b506001600160a01b039360405191612d9083614d69565b3083528560209b168b84015260408301526fffffffffffffffffffffffffffffffff6060830152600260808301528660a083015260c08201526040519283917fb24bd571000000000000000000000000000000000000000000000000000000008b840152602483016159cb565b61051a6120345f80612e94612e11366152aa565b612e219993949892919933616169565b996001600160a01b039560405193612e3885614d69565b3385528760209c168c86015260408501526060840152876080840152151560a083015260c08201526040519283917f7b03c7ba000000000000000000000000000000000000000000000000000000008a840152602483016159cb565b03927f0000000000000000000000000000000000000000000000000000000000000000165af1801561046357612eda915f91612ef6575b50828082518301019101615a29565b5092905061154857610435604051928284938452830190614f5f565b612f0a91503d805f833e6106028183614e0a565b84612ecb565b3461046e575f60031936011261046e57612f286161ab565b6109d56020604051612f3981614d69565b5f81525f82820152606060408201526060808201525f60808201525f60a0820152606060c0820152604051809381927f086fad6600000000000000000000000000000000000000000000000000000000835260048301615480565b3461046e575f60031936011261046e5760206105be615d6c565b3461046e575f60031936011261046e577ff5ab33e5000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461046e5760a060031936011261046e57612fff614cfd565b67ffffffffffffffff60243581811161046e57613020903690600401614e93565b91613029614d13565b9160843590811161046e575f9361051a610b1d8694613052610aa26130c7963690600401614f12565b966001600160a01b0394856040519361306a85614d69565b30855216602084015260408301526044356060830152600460808301528660a083015260c08201526040519283917fefd85f140000000000000000000000000000000000000000000000000000000060208401526024830161586e565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19182156104635761043592613113915f91613150575b50602080825183010191016157eb565b90939192613128575b60405193849384615021565b5f7f00000000000000000000000000000000000000000000000000000000000000005d61311c565b61316491503d805f833e6106028183614e0a565b84613103565b3461046e576131783661509c565b906131869094939294616169565b936001600160a01b038093816040519661319f88614d99565b3388528160209a8b8a015f905216604089015216606087015216608085015260a084015260c083015f905260e083016fffffffffffffffffffffffffffffffff905261010083015f905261012083015260405180928582017fbe5ae841000000000000000000000000000000000000000000000000000000009052602482019061322891615a7e565b03601f198101835261323a9083614e0a565b6040518080937fedfa35680000000000000000000000000000000000000000000000000000000082528660048301526024820161327691614ffc565b03917f00000000000000000000000000000000000000000000000000000000000000001691815a5f948591f1908115610463575f916132cd575b50828180518101031261046e57820151906105c657604051908152f35b6132e191503d805f833e6106028183614e0a565b836132b0565b3461046e576132f536615247565b6001600160a01b03906133ca827f0000000000000000000000000000000000000000000000000000000000000000169161332e8161559f565b6020935f8584019261333f8461559f565b61337d61334f60408801886155b3565b8b6040519461335d86614dd2565b878652816040519761336e89614db6565b168752168b8601523691614e45565b60408301526060860135606083015282608083015260a0820152604051809681927f4af29ec400000000000000000000000000000000000000000000000000000000835260048301615ca0565b038183855af1958615610463575f945f976137fc575b506133ea8461559f565b81604051917fca4f28030000000000000000000000000000000000000000000000000000000083521660048201525f81602481865afa908115610463575f916137e2575b5093967f0000000000000000000000000000000000000000000000000000000000000000821694905f5b82518110156135b1578361346c8285615b0f565b5116613478828a615b0f565b5180156135a7576134888861559f565b9061349281616236565b918a3b1561046e576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015289821660248201529281166044840152831660648301529091905f83608481838e5af19182156104635761354f938d93613598575060405193849283927f15afd40900000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03815f8a5af1908115610463578a9161356f575b50506001905b01613458565b813d8311613591575b6135828183614e0a565b8101031261046e57888b613563565b503d613578565b6135a190614d85565b8e612a52565b5050600190613569565b509193945091966135c18161559f565b90846135d56135cf8861559f565b9261559f565b16888660246135e38a61559f565b60405194859384927f70a082310000000000000000000000000000000000000000000000000000000084521660048301525afa908115610463575f916137ad575b50906136a7985f93926136378751615981565b91886040519461364686614dd2565b878652816040519761365789614db6565b16875216908501526040840152606083015282608083015260a0820152604051809881927f2145789700000000000000000000000000000000000000000000000000000000835260048301615d10565b0381838b5af1948515610463575f965f9661378b575b505f5b835181101561377957846136d48286615b0f565b5116906136e18189615b0f565b51801561376f576136f18861559f565b908b3b1561046e576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03948516600482015291909316602482015260448101929092525f82606481838e5af191821561046357600192613760575b505b016136c0565b61376990614d85565b8a613758565b506001915061375a565b50610435868860405194859485615279565b9096506137a39195503d805f833e61113b8183614e0a565b95919690956136bd565b929190508883813d83116137db575b6137c68183614e0a565b8101031261046e5791519091906136a7613624565b503d6137bc565b6137f691503d805f833e6115c38183614e0a565b8861342e565b9094506138149196503d805f833e6104548183614e0a565b96919490966133e0565b3461046e575f60031936011261046e5760206105be615b52565b3461046e5760a060031936011261046e57613851614cfd565b613859614d3f565b90613862614d13565b60843567ffffffffffffffff811161046e5761388561388b913690600401614f12565b91616169565b916001600160a01b0391827f0000000000000000000000000000000000000000000000000000000000000000169280604051937fc9c1661b0000000000000000000000000000000000000000000000000000000085521695866004850152166024830152604082604481865afa918215610463575f905f936139fb575b505f9361051a613997869461391f6139d395615981565b90600161392c8984615b0f565b526040519161393a83614d69565b30835260209b8c84015260408301526024356060830152600160808301528660a083015260c08201526040519283917fb24bd571000000000000000000000000000000000000000000000000000000008c840152602483016159cb565b6040519586809481937fedfa35680000000000000000000000000000000000000000000000000000000083528b60048401526024830190614ffc565b03925af1918215610463576105b7926105af915f916105ee5750858082518301019101615a29565b925050916040823d604011613a32575b81613a1860409383614e0a565b8101031261046e578151602090920151909290915f613908565b3d9150613a0b565b3461046e575f60031936011261046e5760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4c65676163792072657665727420726561736f6e0000000000000000000000006044820152fd5b3461046e57613ac4613ab9366151e8565b929490939193616169565b926001600160a01b0392837f0000000000000000000000000000000000000000000000000000000000000000169380604051947fc9c1661b0000000000000000000000000000000000000000000000000000000086521696876004860152166024840152604083604481875afa928315610463575f905f94613c06575b509361051a6139975f9694613bde94613b5a8997615981565b916fffffffffffffffffffffffffffffffff613b768a85615b0f565b5260405192613b8484614d69565b30845260209c8d85015260408401526060830152600260808301528660a083015260c08201526040519283917fefd85f14000000000000000000000000000000000000000000000000000000008c8401526024830161586e565b03925af1918215610463576105b792611f7b915f91611f8257508580825183010191016157eb565b9350506040833d604011613c3b575b81613c2260409383614e0a565b8101031261046e5782516020909301519261051a613b41565b3d9150613c15565b3461046e575f60031936011261046e5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b60a060031936011261046e5767ffffffffffffffff6004351161046e5736602360043501121561046e5767ffffffffffffffff600435600401351161046e5736602460c0600435600401350260043501011161046e5760243567ffffffffffffffff811161046e57613cfc903690600401615108565b67ffffffffffffffff6044351161046e5760606003196044353603011261046e5760643567ffffffffffffffff811161046e57613d3d903690600401615139565b60843567ffffffffffffffff811161046e57613d5d903690600401615108565b949093613d686161ab565b806004356004013503614283575f5b600435600401358110613ff85750505060443560040135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd60443536030182121561046e57816044350160048101359067ffffffffffffffff821161046e5760248260071b360391011361046e57613e1b575b61043561138c86865f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d615f36565b6001600160a01b039492947f0000000000000000000000000000000000000000000000000000000000000000163b1561046e57604051947f2a2d80d10000000000000000000000000000000000000000000000000000000086523360048701526060602487015260c486019260443501602481019367ffffffffffffffff60048301351161046e57600482013560071b3603851361046e5760606064890152600482013590529192869260e484019291905f905b60048101358210613f7a5750505082915f94613f1d926001600160a01b03613efb602460443501614d55565b16608486015260448035013560a4860152600319858403016044860152615695565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1918215610463576104359361138c93613f6b575b829450819350613deb565b613f7490614d85565b84613f60565b9195945091926001600160a01b03613f9187614d55565b168152602080870135916001600160a01b03831680930361046e57600492600192820152613fc1604089016164b3565b65ffffffffffff8091166040830152613fdc60608a016164b3565b1660608201526080809101970193019050889495939291613ecf565b6140066103ac828486616074565b6040519081606081011067ffffffffffffffff606084011117610f1957606082016040525f82525f60208301525f6040830152602081015190606060408201519101515f1a9183526020830152604082015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc818402600435013603011261046e576040519061409782614db6565b6140aa602460c085026004350101614d55565b8083526140c0604460c086026004350101614d55565b908160208501526140da606460c087026004350101614d55565b60408581019190915260043560c08702016084810135606087015260a4810135608087015260c4013560a0860152830151835160209094015160ff91909116926001600160a01b0383163b1561046e575f6001600160a01b03809460e4948a98849860c460c06040519c8d9b8c9a7fd505accf000000000000000000000000000000000000000000000000000000008c521660048b01523060248b0152608482820260043501013560448b0152026004350101356064880152608487015260a486015260c4850152165af19081614274575b5061426b576141b9615b23565b906001600160a01b038151169060206001600160a01b0381830151166044604051809581937fdd62ed3e00000000000000000000000000000000000000000000000000000000835260048301523060248301525afa918215610463575f92614236575b50606001510361423157506001905b01613d77565b616ab9565b9091506020813d602011614263575b8161425260209383614e0a565b8101031261046e575190606061421c565b3d9150614245565b5060019061422b565b61427d90614d85565b896141ac565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461046e576142b93661509c565b906142c79094939294616169565b936001600160a01b03809381604051966142e088614d99565b3388528160209a8b8a016001905216604089015216606087015216608085015260a084015260c083016fffffffffffffffffffffffffffffffff905260e083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905261010083015f905261012083015260405180928582017fbe5ae841000000000000000000000000000000000000000000000000000000009052602482019061322891615a7e565b3461046e575f60031936011261046e5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461046e576143de6113c33661504a565b926001600160a01b0392837f00000000000000000000000000000000000000000000000000000000000000001693604051937fca4f280300000000000000000000000000000000000000000000000000000000855216938460048501525f84602481845afa938415610463576114cc5f95946144d19461446a889761051a9589916144f4575051615981565b916040519261447884614d69565b30845260209a8b850152604084015260608301528660808301528660a083015260c08201526040519283917fb24bd571000000000000000000000000000000000000000000000000000000008a840152602483016159cb565b03925af1801561046357612eda915f91612ef65750828082518301019101615a29565b61450891503d808b833e6115c38183614e0a565b8c6126c8565b5f61051a816130c7611a4d61452236614f92565b906145339894929895939533616169565b986001600160a01b0396876040519561454b87614d69565b3387521660208601526040850152606084015260046080840152151560a083015260c08201526040519283917f5b3437910000000000000000000000000000000000000000000000000000000060208401526024830161586e565b3461046e575f60031936011261046e576145be6161ab565b6145fd5f6145ca6157b5565b604051809381927f5b3437910000000000000000000000000000000000000000000000000000000083526004830161586e565b038183305af1801561046357614632575f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b61134d903d805f833e6104548183614e0a565b606060031936011261046e57614659614cfd565b60443567ffffffffffffffff811161046e575f61051a6146c06146836146fa943690600401614e93565b6040519283916020977f82cd54fb0000000000000000000000000000000000000000000000000000000089850152602435903390602486016156ff565b604051809381927f48c894910000000000000000000000000000000000000000000000000000000083528660048401526024830190614ffc565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561046357611272915f91614749575b5082808251830101910161578f565b61475d91503d805f833e6106028183614e0a565b8361473a565b3461046e5761477136614f2d565b6147796161ab565b6147816161d8565b7f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b03806147b86020840161559f565b926147c28161559f565b9360408201946147d286846155b3565b90926147e160608601866155b3565b836147f260c0899894980189615607565b9590946040519b8c987fba8a2be0000000000000000000000000000000000000000000000000000000008a528160c48b01931660048b015216602489015260c060448901525260e4860192905f5b818110614b2c57505050926148849261486b60209793879660031995868984030160648a0152615658565b92608089013560848701528584030160a4860152615695565b03815f868a165af1928315610463575f93614af8575b50919260a0830192905f5b6148af82846155b3565b9050811015614abe576148d46148cf826148c985876155b3565b906156b5565b61559f565b6148e5826148c960608701876155b3565b35908115614ab4576148f6876156f2565b80614a87575b15614936575090614930600192897f000000000000000000000000000000000000000000000000000000000000000061627a565b016148a5565b857f000000000000000000000000000000000000000000000000000000000000000016916149638661559f565b61496c82616236565b843b1561046e576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152898d168316602482015290821660448201528389169091166064820152925f908490608490829084905af191821561046357614a3193602093614a78575060405193849283927f15afd40900000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03815f898d165af1801561046357614a4d575b50600190614930565b602090813d8311614a71575b614a638183614e0a565b8101031261046e5787614a44565b503d614a59565b614a8190614d85565b8b612a52565b50857f000000000000000000000000000000000000000000000000000000000000000016868216146148fc565b5050600190614930565b602086614acd611d418661559f565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051908152f35b9092506020813d602011614b24575b81614b1460209383614e0a565b8101031261046e5751918561489a565b3d9150614b07565b919495965091926020806001928c614b4389614d55565b1681520195019101918a9695949392614840565b60c060031936011261046e57614b6b614cfd565b6024359067ffffffffffffffff80831161046e573660238401121561046e57826004013590614b9982614e2d565b91614ba76040519384614e0a565b80835260209460248685019260051b8201019136831161046e576024879201905b838210614ce6575050505060443581811161046e57614beb903690600401614e93565b92614bf4614eb1565b9260a43592831161046e5761051a6106b6614c96935f96614c1a88973690600401614f12565b90614c2433616169565b996001600160a01b03968760405195614c3c87614d69565b338752168d860152604085015260608401526064356080840152151560a083015260c08201526040519283917f086fad66000000000000000000000000000000000000000000000000000000008b84015260248301615480565b03927f0000000000000000000000000000000000000000000000000000000000000000165af1908115610463575f916132cd5750828180518101031261046e57820151906105c657604051908152f35b828091614cf284614d55565b815201910190614bc8565b600435906001600160a01b038216820361046e57565b606435906001600160a01b038216820361046e57565b602435906001600160a01b038216820361046e57565b604435906001600160a01b038216820361046e57565b35906001600160a01b038216820361046e57565b60e0810190811067ffffffffffffffff821117610f1957604052565b67ffffffffffffffff8111610f1957604052565b610140810190811067ffffffffffffffff821117610f1957604052565b60c0810190811067ffffffffffffffff821117610f1957604052565b6020810190811067ffffffffffffffff821117610f1957604052565b6040810190811067ffffffffffffffff821117610f1957604052565b90601f601f19910116810190811067ffffffffffffffff821117610f1957604052565b67ffffffffffffffff8111610f195760051b60200190565b9291614e5082614e2d565b91614e5e6040519384614e0a565b829481845260208094019160051b810192831161046e57905b828210614e845750505050565b81358152908301908301614e77565b9080601f8301121561046e57816020614eae93359101614e45565b90565b60843590811515820361046e57565b67ffffffffffffffff8111610f1957601f01601f191660200190565b929192614ee882614ec0565b91614ef66040519384614e0a565b82948184528183011161046e578281602093845f960137010152565b9080601f8301121561046e57816020614eae93359101614edc565b6003199060208282011261046e576004359167ffffffffffffffff831161046e578260e09203011261046e5760040190565b9081518082526020808093019301915f5b828110614f7e575050505090565b835185529381019392810192600101614f70565b9060a060031983011261046e576004356001600160a01b038116810361046e579167ffffffffffffffff9060243582811161046e5781614fd491600401614e93565b9260443592606435801515810361046e579260843591821161046e57614eae91600401614f12565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b615037614eae9492606083526060830190614f5f565b9260208201526040818403910152614ffc565b608060031982011261046e576001600160a01b0390600435828116810361046e579260243592604435908116810361046e57916064359067ffffffffffffffff821161046e57614eae91600401614f12565b60c060031982011261046e576001600160a01b0391600435838116810361046e5792602435818116810361046e5792604435828116810361046e579260643592608435908116810361046e579160a4359067ffffffffffffffff821161046e57614eae91600401614f12565b9181601f8401121561046e5782359167ffffffffffffffff831161046e576020808501948460051b01011161046e57565b9181601f8401121561046e5782359167ffffffffffffffff831161046e576020838186019501011161046e57565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b84831061519c5750505050505090565b90919293949584806151d8837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528a51614ffc565b980193019301919493929061518c565b9060a060031983011261046e576001600160a01b03600435818116810361046e5792602435828116810361046e579260443592606435908116810361046e57916084359067ffffffffffffffff821161046e57614eae91600401614f12565b6003199060208282011261046e576004359167ffffffffffffffff831161046e578260809203011261046e5760040190565b9092615292614eae959394608084526080840190614f5f565b93602083015260408201526060818403910152614f5f565b60a060031982011261046e576004356001600160a01b038116810361046e57916024359167ffffffffffffffff9160443583811161046e57826152ef91600401614e93565b92606435801515810361046e579260843591821161046e57614eae91600401614f12565b6003199060208282011261046e576004359167ffffffffffffffff831161046e57826101409203011261046e5760040190565b61010060031982011261046e576001600160a01b0390600435828116810361046e5792602435838116810361046e5792604435908116810361046e5791606435916084359160a4359160c435801515810361046e579160e4359067ffffffffffffffff821161046e576153bb91600401615139565b9091565b916153dc90614eae94928452606060208501526060840190614f5f565b916040818403910152614ffc565b60c060031982011261046e576001600160a01b0390600435828116810361046e579260243592604435908116810361046e579160643591608435801515810361046e579160a4359067ffffffffffffffff821161046e57614eae91600401614f12565b9081518082526020808093019301915f5b82811061546c575050505090565b83518552938101939281019260010161545e565b91906020928381526101008101906001600160a01b03948584511681830152858185015116604083015260408401519260e0606084015283518091528161012084019401915f5b82811061551d5750505050614eae93945060e060c06154f8606086015194601f19958686830301608087015261544d565b94608081015160a085015260a081015115158285015201519282850301910152614ffc565b83518916865294810194928101926001016154c7565b81601f8201121561046e5780519061554a82614ec0565b926155586040519485614e0a565b8284526020838301011161046e57815f9260208093018386015e8301015290565b9060208282031261046e57815167ffffffffffffffff811161046e57614eae9201615533565b356001600160a01b038116810361046e5790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561046e570180359067ffffffffffffffff821161046e57602001918160051b3603831361046e57565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561046e570180359067ffffffffffffffff821161046e5760200191813603831361046e57565b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831161046e5760209260051b809284830137010190565b601f8260209493601f1993818652868601375f8582860101520116010190565b91908110156156c55760051b0190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b35801515810361046e5790565b9092614eae94936080936001600160a01b03809216845216602083015260408201528160608201520190614f5f565b9080601f8301121561046e5781519060209161574981614e2d565b936157576040519586614e0a565b81855260208086019260051b82010192831161046e57602001905b828210615780575050505090565b81518152908301908301615772565b9060208282031261046e57815167ffffffffffffffff811161046e57614eae920161572e565b604051906157c282614d69565b606060c0835f81525f60208201528260408201525f838201525f60808201525f60a08201520152565b909160608284031261046e5781519167ffffffffffffffff9283811161046e578461581791830161572e565b93602082015193604083015190811161046e57614eae9201615533565b9060058210156158415752565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b90614eae91602081526001600160a01b03808351166020830152602083015116604082015260c06158af604084015160e0606085015261010084019061544d565b92606081015160808401526158cc608082015160a0850190615834565b60a081015115158284015201519060e0601f1982850301910152614ffc565b60058210156158415752565b602090818184031261046e5780519067ffffffffffffffff821161046e57019180601f8401121561046e57825161592d81614e2d565b9361593b6040519586614e0a565b818552838086019260051b82010192831161046e578301905b828210615962575050505090565b81516001600160a01b038116810361046e578152908301908301615954565b9061598b82614e2d565b6159986040519182614e0a565b828152601f196159a88294614e2d565b0190602036910137565b60048210156158415752565b9060048210156158415752565b90614eae91602081526001600160a01b03808351166020830152602083015116604082015260c0615a0c604084015160e0606085015261010084019061544d565b92606081015160808401526158cc608082015160a08501906159be565b9160608383031261046e5782519260208101519267ffffffffffffffff9384811161046e5781615a5a91840161572e565b93604083015190811161046e57614eae9201615533565b9060028210156158415752565b610160614eae92602083526001600160a01b03808251166020850152615aac60208301516040860190615a71565b80604083015116606085015280606083015116608085015260808201511660a084015260a081015160c084015260c081015160e084015260e081015161010090818501528101519061012091151582850152015191610140808201520190614ffc565b80518210156156c55760209160051b010190565b3d15615b4d573d90615b3482614ec0565b91615b426040519384614e0a565b82523d5f602084013e565b606090565b6040517f22717db2000000000000000000000000000000000000000000000000000000006020820152600481527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316615bb282614dee565b803b1561046e57615bfe5f929183926040519485809481937f757d64b3000000000000000000000000000000000000000000000000000000008352602060048401526024830190614ffc565b03925af19081615c91575b50615c3257615c1e615c19615b23565b6165a0565b60208180518101031261046e576020015190565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e6578706563746564207375636365737300000000000000000000000000006044820152606490fd5b615c9a90614d85565b5f615c09565b90614eae91602081526001600160a01b03808351166020830152602083015116604082015260a0615ce0604084015160c0606085015260e084019061544d565b9260608101516080840152615cfc608082015183850190615834565b01519060c0601f1982850301910152614ffc565b90614eae91602081526001600160a01b0380835116602083015260208301511660408201526040820151606082015260a0615d5a606084015160c0608085015260e084019061544d565b92615cfc6080820151838501906159be565b6040517f58307e44000000000000000000000000000000000000000000000000000000006020820152600481527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316615bb282614dee565b60405190615dd982614d99565b6060610120835f81525f60208201525f60408201525f838201525f60808201525f60a08201525f60c08201525f60e08201525f6101008201520152565b6040517f45d132fe000000000000000000000000000000000000000000000000000000006020820152600481527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316615bb282614dee565b6040517fb3b0a7a7000000000000000000000000000000000000000000000000000000006020820152600481527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316615bb282614dee565b6040517fd3a5152a000000000000000000000000000000000000000000000000000000006020820152600481527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316615bb282614dee565b9190615f4133616169565b907f000000000000000000000000000000000000000000000000000000000000000093845c61604c576001906001865d615f7a83614e2d565b92615f886040519485614e0a565b808452601f19615f9782614e2d565b015f5b81811061603b5750505f5b818110615ff25750505050905f615fe792945d7f0000000000000000000000000000000000000000000000000000000000000000805c91615fe9575b50616470565b565b5f905d5f615fe1565b8061601f5f806160076103ac8996888a616074565b602081519101305af4616018615b23565b9030616ac8565b6160298288615b0f565b526160348187615b0f565b5001615fa5565b806060602080938901015201615f9a565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b908210156156c5576153bb9160051b810190615607565b919361615b95615bb29461612093966001600160a01b039081807f0000000000000000000000000000000000000000000000000000000000000000169981604051996160d68b614d99565b338b525f60208c01521660408a015216606088015216608086015260a08501525f60c08501526fffffffffffffffffffffffffffffffff60e08501525f6101008501523691614edc565b6101208201526040519384917fbe5ae84100000000000000000000000000000000000000000000000000000000602084015260248301615a7e565b03601f198101845283614e0a565b905f917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03815c16156161a1575050565b909192505d600190565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c61604c576001905d565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361620a57565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b6001600160a01b039081811161624a571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f5260a060045260245260445ffd5b919091814710616448576001600160a01b0380911692833b1561046e576040918251917fd0e30db00000000000000000000000000000000000000000000000000000000083525f925f81600481898b5af1801561643e5761642b575b501692825194602095868101907fa9059cbb000000000000000000000000000000000000000000000000000000008252866024820152836044820152604481526080810181811067ffffffffffffffff821117610f195786525161634b918591829182865af1616344615b23565b9083616ac8565b8051878115159182616406575b505090506163db57906044869284865197889485937f15afd409000000000000000000000000000000000000000000000000000000008552600485015260248401525af19182156163d15750506163ad575050565b813d83116163ca575b6163c08183614e0a565b8101031261046e57565b503d6163b6565b51903d90823e3d90fd5b7f5274afe7000000000000000000000000000000000000000000000000000000008352600452602482fd5b8380929350010312616427578601518015908115036164275780875f616358565b8380fd5b616436919350614d85565b5f915f6162d6565b85513d5f823e3d90fd5b7fa01a9df6000000000000000000000000000000000000000000000000000000005f5260045ffd5b4780156164af577f00000000000000000000000000000000000000000000000000000000000000005c6164af576001600160a01b03615fe79216616a3d565b5050565b359065ffffffffffff8216820361046e57565b916044929391936001600160a01b03604094859282808551998a9586947fc9c1661b0000000000000000000000000000000000000000000000000000000086521660048501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa938415616596575f935f9561655f575b505061655c6165558594615981565b9485615b0f565b52565b809295508194503d831161658f575b6165788183614e0a565b8101031261046e5760208251920151925f80616546565b503d61656e565b83513d5f823e3d90fd5b6004815110616614577f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000060208301511603614231578060246020614eae9351600319810160048501528301019101615579565b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b60e081013542116167ec576001600160a01b03602082013591600283101561046e5760409261666c82850161559f565b9280606094859384860161667f9061559f565b9561668c6080820161559f565b908461669c610120830183615607565b91908c51956166aa87614d69565b8652816020870197168752818d87019b168b52818a870195168552608086019260a0850135845260a087019460c00135855236906166e792614edc565b9360c08601948552818d519b8c9a8b998a997f2bfb780c000000000000000000000000000000000000000000000000000000008b5260048b016020905260248b0190519061673491615a71565b5116604489015251166064870152511660848501525160a48401525160c48301525160e4820160e09052610104820161676c91614ffc565b03917f0000000000000000000000000000000000000000000000000000000000000000165a905f91f1908115616596575f935f935f936167af575b505050909192565b92509250809350813d83116167e5575b6167c98183614e0a565b8101031261046e578151602083015191909201515f80806167a7565b503d6167bf565b7fe08b8af0000000000000000000000000000000000000000000000000000000005f5260045ffd5b928215616940578061690b575b156168725750615fe7917f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000616946565b906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b1561046e576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03938416600482015293909216602484015260448301525f908290606490829084905af18015610463576169025750565b615fe790614d85565b506001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001690821614616821565b50505050565b9392916001600160a01b03809216803b1561046e576040517fae6393290000000000000000000000000000000000000000000000000000000081525f816064818388819c16968760048401523060248401528a60448401525af1801561046357616a2a575b508086913b15616a265781906024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083528960048401525af18015616a1b57616a03575b50615fe793945016616a3d565b616a0d8691614d85565b616a1757846169f6565b8480fd5b6040513d88823e3d90fd5b5080fd5b616a35919650614d85565b5f945f6169ab565b814710616a8d575f8080936001600160a01b038294165af1616a5d615b23565b5015616a6557565b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fcd786059000000000000000000000000000000000000000000000000000000005f523060045260245ffd5b80511561661457805190602001fd5b90616add5750805115616a6557805190602001fd5b81511580616b23575b616aee575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15616ae656fea26469706673582212204fe24a79fbaf5da03fedc54a46df276f44033a70bbbe19d61ddfaec46bd6061764736f6c634300081b0033","opcodes":"PUSH2 0x120 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x47E JUMPI PUSH1 0x60 DUP2 PUSH2 0x70D5 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x22 DUP3 DUP6 PUSH2 0x49D JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x47E JUMPI DUP1 MLOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP5 AND DUP5 SUB PUSH2 0x47E JUMPI PUSH1 0x20 DUP1 DUP3 ADD MLOAD SWAP2 DUP5 DUP4 AND DUP4 SUB PUSH2 0x47E JUMPI DUP4 ADD MLOAD SWAP4 DUP5 AND DUP5 SUB PUSH2 0x47E JUMPI DUP3 MLOAD SWAP5 PUSH2 0x69 DUP7 PUSH2 0x482 JUMP JUMPDEST PUSH1 0xE DUP7 MSTORE PUSH14 0x4D6F636B20526F75746572207631 PUSH1 0x90 SHL DUP3 DUP8 ADD MSTORE PUSH2 0xCB DUP5 MLOAD PUSH2 0x91 DUP2 PUSH2 0x482 JUMP JUMPDEST PUSH1 0xB DUP2 MSTORE PUSH11 0x14D95B99195C91DD585C99 PUSH1 0xAA SHL DUP5 DUP3 ADD MSTORE DUP6 MLOAD SWAP1 PUSH2 0xB4 DUP3 PUSH2 0x482 JUMP JUMPDEST PUSH1 0x6 DUP3 MSTORE PUSH6 0x39B2B73232B9 PUSH1 0xD1 SHL DUP6 DUP4 ADD MSTORE PUSH2 0x4C0 JUMP JUMPDEST PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE DUP5 MLOAD SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP7 GT PUSH2 0x46A JUMPI PUSH0 SLOAD SWAP1 PUSH1 0x1 SWAP2 DUP3 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x460 JUMPI JUMPDEST DUP5 DUP3 LT EQ PUSH2 0x44C JUMPI PUSH1 0x1F DUP2 GT PUSH2 0x406 JUMPI JUMPDEST POP DUP3 SWAP1 PUSH1 0x1F DUP9 GT PUSH1 0x1 EQ PUSH2 0x3A4 JUMPI SWAP7 DUP1 SWAP3 DUP2 SWAP3 PUSH2 0x188 SWAP7 SWAP8 SWAP9 SWAP10 PUSH0 SWAP5 PUSH2 0x399 JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE JUMPDEST DUP4 MLOAD PUSH2 0x143 DUP2 PUSH2 0x482 JUMP JUMPDEST PUSH1 0xC DUP2 MSTORE PUSH12 0x2937BABA32B921B7B6B6B7B7 PUSH1 0xA1 SHL DUP3 DUP3 ADD MSTORE PUSH17 0x1A5CD4995D1D5C9B915D1A131BD8DAD959 PUSH1 0x7A SHL DUP6 MLOAD SWAP3 PUSH2 0x17C DUP5 PUSH2 0x482 JUMP JUMPDEST PUSH1 0x11 DUP5 MSTORE DUP4 ADD MSTORE PUSH2 0x4C0 JUMP JUMPDEST PUSH1 0xC0 MSTORE PUSH1 0xE0 MSTORE PUSH2 0x100 SWAP2 DUP3 MSTORE MLOAD PUSH2 0x6B62 SWAP2 DUP3 PUSH2 0x573 DUP4 CODECOPY PUSH1 0x80 MLOAD DUP3 DUP2 DUP2 PUSH2 0x5C9 ADD MSTORE DUP2 DUP2 PUSH2 0xBBE ADD MSTORE DUP2 DUP2 PUSH2 0xDF2 ADD MSTORE DUP2 DUP2 PUSH2 0x154B ADD MSTORE DUP2 DUP2 PUSH2 0x2291 ADD MSTORE DUP2 DUP2 PUSH2 0x277C ADD MSTORE DUP2 DUP2 PUSH2 0x312B ADD MSTORE DUP2 DUP2 PUSH2 0x5FBA ADD MSTORE PUSH2 0x616E ADD MSTORE PUSH1 0xA0 MLOAD DUP3 DUP2 DUP2 PUSH2 0x3F1 ADD MSTORE DUP2 DUP2 PUSH2 0x568 ADD MSTORE DUP2 DUP2 PUSH2 0x6F6 ADD MSTORE DUP2 DUP2 PUSH2 0x8D4 ADD MSTORE DUP2 DUP2 PUSH2 0xB5E ADD MSTORE DUP2 DUP2 PUSH2 0xDBB ADD MSTORE DUP2 DUP2 PUSH2 0x10DC ADD MSTORE DUP2 DUP2 PUSH2 0x122E ADD MSTORE DUP2 DUP2 PUSH2 0x13D9 ADD MSTORE DUP2 DUP2 PUSH2 0x16E1 ADD MSTORE DUP2 DUP2 PUSH2 0x17D9 ADD MSTORE DUP2 DUP2 PUSH2 0x1AB8 ADD MSTORE DUP2 DUP2 PUSH2 0x1F34 ADD MSTORE DUP2 DUP2 PUSH2 0x2074 ADD MSTORE DUP2 DUP2 PUSH2 0x21F8 ADD MSTORE DUP2 DUP2 PUSH2 0x233A ADD MSTORE DUP2 DUP2 PUSH2 0x2459 ADD MSTORE DUP2 DUP2 PUSH2 0x265A ADD MSTORE DUP2 DUP2 PUSH2 0x27D5 ADD MSTORE DUP2 DUP2 PUSH2 0x2E98 ADD MSTORE DUP2 DUP2 PUSH2 0x30CB ADD MSTORE DUP2 DUP2 PUSH2 0x327A ADD MSTORE DUP2 DUP2 PUSH2 0x3304 ADD MSTORE DUP2 DUP2 PUSH2 0x3898 ADD MSTORE DUP2 DUP2 PUSH2 0x3AD1 ADD MSTORE DUP2 DUP2 PUSH2 0x43EB ADD MSTORE DUP2 DUP2 PUSH2 0x4707 ADD MSTORE DUP2 DUP2 PUSH2 0x4783 ADD MSTORE DUP2 DUP2 PUSH2 0x4C9A ADD MSTORE DUP2 DUP2 PUSH2 0x5B81 ADD MSTORE DUP2 DUP2 PUSH2 0x5D9B ADD MSTORE DUP2 DUP2 PUSH2 0x5E45 ADD MSTORE DUP2 DUP2 PUSH2 0x5EA5 ADD MSTORE DUP2 DUP2 PUSH2 0x5F05 ADD MSTORE DUP2 DUP2 PUSH2 0x60A7 ADD MSTORE DUP2 DUP2 PUSH2 0x61E2 ADD MSTORE DUP2 DUP2 PUSH2 0x6514 ADD MSTORE DUP2 DUP2 PUSH2 0x6770 ADD MSTORE DUP2 DUP2 PUSH2 0x682D ADD MSTORE PUSH2 0x687D ADD MSTORE PUSH1 0xC0 MLOAD DUP3 DUP2 DUP2 PUSH2 0x5F44 ADD MSTORE PUSH2 0x6479 ADD MSTORE PUSH1 0xE0 MLOAD DUP3 DUP2 DUP2 PUSH1 0x22 ADD MSTORE DUP2 DUP2 PUSH2 0x1C50 ADD MSTORE DUP2 DUP2 PUSH2 0x1D00 ADD MSTORE DUP2 DUP2 PUSH2 0x235B ADD MSTORE DUP2 DUP2 PUSH2 0x23AF ADD MSTORE DUP2 DUP2 PUSH2 0x25A4 ADD MSTORE DUP2 DUP2 PUSH2 0x297B ADD MSTORE DUP2 DUP2 PUSH2 0x2AF7 ADD MSTORE DUP2 DUP2 PUSH2 0x43A9 ADD MSTORE DUP2 DUP2 PUSH2 0x490C ADD MSTORE DUP2 DUP2 PUSH2 0x4A8B ADD MSTORE DUP2 DUP2 PUSH2 0x684E ADD MSTORE PUSH2 0x6917 ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0x2435 ADD MSTORE DUP2 DUP2 PUSH2 0x29A9 ADD MSTORE DUP2 DUP2 PUSH2 0x3433 ADD MSTORE DUP2 DUP2 PUSH2 0x3C62 ADD MSTORE DUP2 DUP2 PUSH2 0x3E28 ADD MSTORE DUP2 DUP2 PUSH2 0x3F2A ADD MSTORE PUSH2 0x4939 ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0x127 JUMP JUMPDEST SWAP7 SWAP1 PUSH1 0x1F NOT DUP3 AND SWAP1 PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP2 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x3F1 JUMPI POP SWAP9 DUP4 PUSH2 0x188 SWAP8 SWAP9 SWAP10 SWAP11 LT PUSH2 0x3D9 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH2 0x138 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x3CC JUMP JUMPDEST DUP11 DUP4 ADD MLOAD DUP5 SSTORE SWAP3 DUP6 ADD SWAP3 SWAP2 DUP7 ADD SWAP2 DUP7 ADD PUSH2 0x3B5 JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP4 PUSH0 KECCAK256 PUSH1 0x1F DUP10 ADD PUSH1 0x5 SHR DUP2 ADD SWAP2 DUP6 DUP11 LT PUSH2 0x442 JUMPI JUMPDEST PUSH1 0x1F ADD PUSH1 0x5 SHR ADD SWAP1 DUP4 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x437 JUMPI POP POP PUSH2 0x106 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP4 SWAP1 PUSH2 0x429 JUMP JUMPDEST SWAP1 SWAP2 POP DUP2 SWAP1 PUSH2 0x41E JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xF5 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0x46A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x46A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH2 0x52D PUSH1 0x3A PUSH1 0x20 SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP2 DUP2 DUP1 DUP5 ADD SWAP8 PUSH32 0x62616C616E6365722D6C6162732E76332E73746F726167652E00000000000000 DUP10 MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 ADD PUSH1 0x39 DUP7 ADD MCOPY DUP4 ADD SWAP1 PUSH1 0x17 PUSH1 0xF9 SHL PUSH1 0x39 DUP4 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 SWAP2 ADD DUP6 DUP4 ADD MCOPY ADD PUSH0 DUP4 DUP3 ADD MSTORE SUB PUSH1 0x1A DUP2 ADD DUP5 MSTORE ADD DUP3 PUSH2 0x49D JUMP JUMPDEST MLOAD SWAP1 KECCAK256 PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x55E JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP3 MSTORE PUSH2 0x553 DUP3 PUSH2 0x482 JUMP JUMPDEST SWAP1 MLOAD SWAP1 KECCAK256 PUSH1 0xFF NOT AND SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x72 JUMPI JUMPDEST CALLDATASIZE ISZERO PUSH2 0x18 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x4A JUMPI STOP JUMPDEST PUSH32 0x540DDF600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x26B3D95 EQ PUSH2 0x4B57 JUMPI DUP1 PUSH4 0x86FAD66 EQ PUSH2 0x4763 JUMPI DUP1 PUSH4 0x8C04793 EQ PUSH2 0x4645 JUMPI DUP1 PUSH4 0xC3B846F EQ PUSH2 0x45A6 JUMPI DUP1 PUSH4 0xCA078EC EQ PUSH2 0x450E JUMPI DUP1 PUSH4 0xF710888 EQ PUSH2 0x43CD JUMPI DUP1 PUSH4 0x107C279F EQ PUSH2 0x438A JUMPI DUP1 PUSH4 0x175D4408 EQ PUSH2 0x42AB JUMPI DUP1 PUSH4 0x19C6989F EQ PUSH2 0x3C86 JUMPI DUP1 PUSH4 0x1BBF2E23 EQ PUSH2 0x3C43 JUMPI DUP1 PUSH4 0x1D56798D EQ PUSH2 0x3AA8 JUMPI DUP1 PUSH4 0x22717DB2 EQ PUSH2 0x3A3A JUMPI DUP1 PUSH4 0x23B39241 EQ PUSH2 0x3838 JUMPI DUP1 PUSH4 0x339F3838 EQ PUSH2 0x381E JUMPI DUP1 PUSH4 0x3A1B05DE EQ PUSH2 0x32E7 JUMPI DUP1 PUSH4 0x3EBC54E5 EQ PUSH2 0x316A JUMPI DUP1 PUSH4 0x452DB952 EQ PUSH2 0x2FE6 JUMPI DUP1 PUSH4 0x45D132FE EQ PUSH2 0x2FAE JUMPI DUP1 PUSH4 0x4AEECCA9 EQ PUSH2 0x2F94 JUMPI DUP1 PUSH4 0x4B59D17C EQ PUSH2 0x2F10 JUMPI DUP1 PUSH4 0x51682750 EQ PUSH2 0x2DFD JUMPI DUP1 PUSH4 0x53D0BB98 EQ PUSH2 0x2D48 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x2C0B JUMPI DUP1 PUSH4 0x58307E44 EQ PUSH2 0x2BA2 JUMPI DUP1 PUSH4 0x5B343791 EQ PUSH2 0x27AD JUMPI DUP1 PUSH4 0x5E01EB5A EQ PUSH2 0x2768 JUMPI DUP1 PUSH4 0x5F9815FF EQ PUSH2 0x2625 JUMPI DUP1 PUSH4 0x64C90707 EQ PUSH2 0x25CD JUMPI DUP1 PUSH4 0x68A24FE0 EQ PUSH2 0x22D2 JUMPI DUP1 PUSH4 0x68D5E16A EQ PUSH2 0x20B5 JUMPI DUP1 PUSH4 0x724DBA33 EQ PUSH2 0x1F9C JUMPI DUP1 PUSH4 0x72657D17 EQ PUSH2 0x1E51 JUMPI DUP1 PUSH4 0x750283BC EQ PUSH2 0x1DD4 JUMPI DUP1 PUSH4 0x7AE30960 EQ PUSH2 0x1DBA JUMPI DUP1 PUSH4 0x7B03C7BA EQ PUSH2 0x1A8A JUMPI DUP1 PUSH4 0x82BF2B24 EQ PUSH2 0x19B6 JUMPI DUP1 PUSH4 0x82CD54FB EQ PUSH2 0x1776 JUMPI DUP1 PUSH4 0x90AA9F76 EQ PUSH2 0x175C JUMPI DUP1 PUSH4 0x94E86EF8 EQ PUSH2 0x15D1 JUMPI DUP1 PUSH4 0x9DE90518 EQ PUSH2 0x13B2 JUMPI DUP1 PUSH4 0xAAF51EA3 EQ PUSH2 0x1398 JUMPI DUP1 PUSH4 0xAC9650D8 EQ PUSH2 0x1354 JUMPI DUP1 PUSH4 0xAD6D59F3 EQ PUSH2 0x12AE JUMPI DUP1 PUSH4 0xB037ED36 EQ PUSH2 0x114A JUMPI DUP1 PUSH4 0xB24BD571 EQ PUSH2 0x1000 JUMPI DUP1 PUSH4 0xB29A62A7 EQ PUSH2 0xFA4 JUMPI DUP1 PUSH4 0xB3B0A7A7 EQ PUSH2 0xF9B JUMPI DUP1 PUSH4 0xBE5AE841 EQ PUSH2 0xF46 JUMPI DUP1 PUSH4 0xBEB91FEB EQ PUSH2 0xE2E JUMPI DUP1 PUSH4 0xBF6EE3FD EQ PUSH2 0xC95 JUMPI DUP1 PUSH4 0xC08BC851 EQ PUSH2 0xBFD JUMPI DUP1 PUSH4 0xC330C7BE EQ PUSH2 0xA36 JUMPI DUP1 PUSH4 0xC3EC0EFC EQ PUSH2 0x97D JUMPI DUP1 PUSH4 0xD3A5152A EQ PUSH2 0x940 JUMPI DUP1 PUSH4 0xDA001F7D EQ PUSH2 0x7AF JUMPI DUP1 PUSH4 0xE178073E EQ PUSH2 0x761 JUMPI DUP1 PUSH4 0xE7326DEF EQ PUSH2 0x610 JUMPI DUP1 PUSH4 0xECB2182C EQ PUSH2 0x472 JUMPI PUSH4 0xEFD85F14 SUB PUSH2 0xE JUMPI CALLVALUE PUSH2 0x46E JUMPI PUSH2 0x30D CALLDATASIZE PUSH2 0x4F2D JUMP JUMPDEST PUSH2 0x315 PUSH2 0x61D8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH2 0x32A PUSH1 0x20 DUP3 ADD PUSH2 0x559F JUMP JUMPDEST PUSH2 0x333 DUP3 PUSH2 0x559F JUMP JUMPDEST SWAP3 PUSH2 0x341 PUSH1 0x40 DUP5 ADD DUP5 PUSH2 0x55B3 JUMP JUMPDEST SWAP1 SWAP4 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP4 PUSH1 0x5 DUP6 LT ISZERO PUSH2 0x46E JUMPI DUP4 PUSH2 0x3AC PUSH2 0x3ED SWAP7 PUSH1 0x60 DUP6 PUSH2 0x397 PUSH0 SWAP13 SWAP12 PUSH2 0x387 SWAP10 DUP8 DUP16 SWAP15 PUSH2 0x37A PUSH1 0xC0 PUSH2 0x3B3 SWAP14 ADD DUP8 PUSH2 0x5607 JUMP JUMPDEST SWAP11 SWAP1 SWAP12 PUSH1 0x40 MLOAD SWAP15 DUP16 PUSH2 0x4DB6 JUMP JUMPDEST AND DUP14 MSTORE AND PUSH1 0x20 DUP13 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x4E45 JUMP JUMPDEST PUSH1 0x40 DUP10 ADD MSTORE ADD CALLDATALOAD PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0x80 DUP7 ADD PUSH2 0x58EB JUMP JUMPDEST CALLDATASIZE SWAP2 PUSH2 0x4EDC JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x4AF29EC400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x5CA0 JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH0 SWAP2 PUSH2 0x439 JUMPI JUMPDEST POP PUSH2 0x435 SWAP1 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x5021 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST SWAP1 POP PUSH2 0x435 SWAP3 POP PUSH2 0x45C SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x454 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x57EB JUMP JUMPDEST SWAP1 SWAP3 PUSH2 0x424 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x528 PUSH2 0x4A1 PUSH0 PUSH2 0x51A DUP2 PUSH2 0x564 PUSH2 0x489 CALLDATASIZE PUSH2 0x53EA JUMP JUMPDEST SWAP8 SWAP4 SWAP11 SWAP3 SWAP10 SWAP1 SWAP5 SWAP2 PUSH2 0x49A CALLER PUSH2 0x6169 JUMP JUMPDEST SWAP11 DUP4 PUSH2 0x64C6 JUMP JUMPDEST SWAP8 SWAP1 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP12 DUP13 SWAP7 PUSH1 0x40 MLOAD SWAP5 PUSH2 0x4BC DUP7 PUSH2 0x4D69 JUMP JUMPDEST CALLER DUP7 MSTORE PUSH1 0x20 SWAP15 DUP16 SWAP2 AND SWAP1 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x7B03C7BA00000000000000000000000000000000000000000000000000000000 DUP13 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x59CB JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x4E0A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP12 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH2 0x5B7 SWAP3 PUSH2 0x5AF SWAP2 PUSH0 SWAP2 PUSH2 0x5EE JUMPI JUMPDEST POP DUP6 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x5A29 JUMP JUMPDEST POP SWAP1 POP PUSH2 0x5B0F JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x5C6 JUMPI JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH0 PUSH32 0x0 TSTORE PUSH2 0x5BE JUMP JUMPDEST PUSH2 0x60A SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x602 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x5579 JUMP JUMPDEST DUP7 PUSH2 0x5A0 JUMP JUMPDEST PUSH2 0x51A PUSH2 0x6B6 PUSH0 DUP1 PUSH2 0x6F2 PUSH2 0x641 PUSH2 0x627 CALLDATASIZE PUSH2 0x53EA JUMP JUMPDEST SWAP2 PUSH2 0x63A SWAP12 SWAP6 SWAP12 SWAP11 SWAP5 SWAP7 SWAP2 SWAP4 SWAP11 CALLER PUSH2 0x6169 JUMP JUMPDEST SWAP11 DUP13 PUSH2 0x64C6 JUMP JUMPDEST POP SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x659 DUP6 PUSH2 0x4D69 JUMP JUMPDEST CALLER DUP6 MSTORE DUP8 PUSH1 0x20 SWAP14 AND DUP14 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x2 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x7B03C7BA00000000000000000000000000000000000000000000000000000000 DUP12 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x59CB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP11 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0x738 SWAP2 PUSH0 SWAP2 PUSH2 0x747 JUMPI JUMPDEST POP DUP4 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x5A29 JUMP JUMPDEST POP POP SWAP1 PUSH2 0x5C6 JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x75B SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x602 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP5 PUSH2 0x729 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x7A5 PUSH2 0x791 PUSH2 0x780 PUSH2 0x4CFD JUMP JUMPDEST PUSH2 0x788 PUSH2 0x4D29 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x64C6 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP3 PUSH1 0x40 DUP5 MSTORE PUSH1 0x40 DUP5 ADD SWAP1 PUSH2 0x4F5F JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x7C8 PUSH2 0x4CFD JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x46E JUMPI PUSH2 0x7E9 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4E93 JUMP JUMPDEST SWAP1 PUSH2 0x7F2 PUSH2 0x4D3F JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x46E JUMPI PUSH2 0x8D0 PUSH0 SWAP3 SWAP2 PUSH2 0x51A PUSH2 0x894 PUSH2 0x820 PUSH2 0x81A DUP8 SWAP7 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4F12 JUMP JUMPDEST SWAP4 PUSH2 0x6169 JUMP JUMPDEST SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x837 DUP4 PUSH2 0x4D69 JUMP JUMPDEST ADDRESS DUP4 MSTORE DUP6 PUSH1 0x20 SWAP12 AND DUP12 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE DUP7 PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xEFD85F1400000000000000000000000000000000000000000000000000000000 DUP12 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x586E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP11 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0x916 SWAP2 PUSH0 SWAP2 PUSH2 0x926 JUMPI JUMPDEST POP DUP4 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x57EB JUMP JUMPDEST POP SWAP2 SWAP1 POP PUSH2 0x5C6 JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x93A SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x602 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP5 PUSH2 0x907 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x995 PUSH2 0x61AB JUMP JUMPDEST PUSH2 0x9D5 PUSH1 0x20 PUSH2 0x9A2 PUSH2 0x5DCC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x68A24FE000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x5A7E JUMP JUMPDEST SUB DUP2 PUSH0 ADDRESS GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0xA0B JUMPI JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0xA2F JUMPI JUMPDEST PUSH2 0xA21 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x46E JUMPI DUP1 PUSH2 0x9E6 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xA17 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0xA4F PUSH2 0x4CFD JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x46E JUMPI PUSH2 0xA70 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4E93 JUMP JUMPDEST SWAP2 PUSH2 0xA79 PUSH2 0x4D13 JUMP JUMPDEST SWAP2 PUSH1 0x84 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x46E JUMPI PUSH0 SWAP4 PUSH2 0x51A PUSH2 0xB1D DUP7 SWAP5 PUSH2 0xAA8 PUSH2 0xAA2 PUSH2 0xB5A SWAP7 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4F12 JUMP JUMPDEST SWAP8 PUSH2 0x6169 JUMP JUMPDEST SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 PUSH1 0x40 MLOAD SWAP4 PUSH2 0xAC0 DUP6 PUSH2 0x4D69 JUMP JUMPDEST ADDRESS DUP6 MSTORE AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x3 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xB24BD57100000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x59CB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH2 0x435 SWAP3 PUSH2 0xBA6 SWAP2 PUSH0 SWAP2 PUSH2 0xBE3 JUMPI JUMPDEST POP PUSH1 0x20 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x5A29 JUMP JUMPDEST SWAP1 SWAP4 SWAP2 SWAP3 PUSH2 0xBBB JUMPI JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x53BF JUMP JUMPDEST PUSH0 PUSH32 0x0 TSTORE PUSH2 0xBAF JUMP JUMPDEST PUSH2 0xBF7 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x602 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP5 PUSH2 0xB96 JUMP JUMPDEST PUSH2 0x51A PUSH2 0x6B6 PUSH0 DUP1 PUSH2 0x8D0 PUSH2 0xC11 CALLDATASIZE PUSH2 0x4F92 JUMP JUMPDEST PUSH2 0xC21 SWAP10 SWAP4 SWAP2 SWAP9 SWAP3 SWAP5 SWAP10 CALLER PUSH2 0x6169 JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 PUSH1 0x40 MLOAD SWAP4 PUSH2 0xC38 DUP6 PUSH2 0x4D69 JUMP JUMPDEST CALLER DUP6 MSTORE DUP8 PUSH1 0x20 SWAP14 AND DUP14 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x5B34379100000000000000000000000000000000000000000000000000000000 DUP12 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x586E JUMP JUMPDEST PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0xCA9 PUSH2 0x4CFD JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x24 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x46E JUMPI PUSH2 0xCCB SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4E93 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP3 DUP4 ISZERO ISZERO DUP1 SWAP5 SUB PUSH2 0x46E JUMPI PUSH1 0x64 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x46E JUMPI PUSH0 SWAP3 PUSH2 0x51A PUSH2 0xD7A DUP6 SWAP5 PUSH2 0xCFF PUSH2 0xDB7 SWAP6 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4F12 JUMP JUMPDEST PUSH2 0xD08 CALLER PUSH2 0x6169 JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 PUSH1 0x40 MLOAD SWAP5 PUSH2 0xD20 DUP7 PUSH2 0x4D69 JUMP JUMPDEST CALLER DUP7 MSTORE AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD MSTORE DUP8 PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x3 PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x5B34379100000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x586E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0xE14 JUMPI JUMPDEST POP PUSH2 0xDEF JUMPI STOP JUMPDEST PUSH0 PUSH32 0x0 TSTORE STOP JUMPDEST PUSH2 0xE27 SWAP1 RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x602 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST POP DUP2 PUSH2 0xDE8 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0xE46 PUSH2 0x61AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF19 JUMPI PUSH2 0xEC2 SWAP2 PUSH0 SWAP2 PUSH1 0x40 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x82CD54FB00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP5 PUSH1 0x4 DUP5 ADD MSTORE DUP5 PUSH1 0x24 DUP5 ADD MSTORE DUP5 PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x80 PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x84 DUP4 ADD SWAP1 PUSH2 0x4F5F JUMP JUMPDEST SUB DUP2 DUP4 ADDRESS GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0xEF7 JUMPI PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH2 0xF12 SWAP1 RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xF0A DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x578F JUMP JUMPDEST POP DUP1 PUSH2 0x9E6 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH1 0x20 PUSH2 0xF6E PUSH2 0xF59 CALLDATASIZE PUSH2 0x5313 JUMP JUMPDEST PUSH2 0xF61 PUSH2 0x61AB JUMP JUMPDEST PUSH2 0xF69 PUSH2 0x61D8 JUMP JUMPDEST PUSH2 0x663C JUMP JUMPDEST POP POP PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0xFBD PUSH2 0x4CFD JUMP JUMPDEST PUSH2 0xFC5 PUSH2 0x4D29 JUMP JUMPDEST PUSH2 0xFCD PUSH2 0x4D3F JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x46E JUMPI PUSH1 0x20 SWAP4 PUSH2 0xFF4 PUSH2 0x5BE SWAP5 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x5139 JUMP JUMPDEST SWAP4 SWAP1 SWAP3 PUSH1 0x64 CALLDATALOAD SWAP3 PUSH2 0x608B JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH2 0x100E CALLDATASIZE PUSH2 0x4F2D JUMP JUMPDEST PUSH2 0x1016 PUSH2 0x61D8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x102A PUSH1 0x20 DUP4 ADD PUSH2 0x559F JUMP JUMPDEST PUSH2 0x1033 DUP4 PUSH2 0x559F JUMP JUMPDEST SWAP2 PUSH2 0x1041 PUSH1 0x40 DUP6 ADD DUP6 PUSH2 0x55B3 JUMP JUMPDEST SWAP5 SWAP1 PUSH1 0x80 DUP3 ADD CALLDATALOAD SWAP4 PUSH1 0x4 DUP6 LT ISZERO PUSH2 0x46E JUMPI DUP4 PUSH2 0x3AC PUSH2 0x10D8 SWAP7 PUSH2 0x1090 PUSH2 0x109E SWAP6 PUSH0 SWAP12 PUSH1 0x60 DUP10 DUP8 DUP16 SWAP15 PUSH2 0x37A PUSH1 0xC0 PUSH2 0x1079 SWAP15 ADD DUP5 PUSH2 0x5607 JUMP JUMPDEST AND DUP14 MSTORE AND PUSH1 0x20 DUP13 ADD MSTORE ADD CALLDATALOAD PUSH1 0x40 DUP11 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x4E45 JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0x80 DUP7 ADD PUSH2 0x59B2 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x2145789700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x5D10 JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH0 SWAP2 PUSH2 0x1120 JUMPI JUMPDEST POP PUSH2 0x435 SWAP1 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x53BF JUMP JUMPDEST SWAP1 POP PUSH2 0x435 SWAP3 POP PUSH2 0x1143 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x113B DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x5A29 JUMP JUMPDEST SWAP1 SWAP3 PUSH2 0x110F JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x1163 PUSH2 0x4CFD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP1 DUP1 PUSH1 0x20 SWAP4 PUSH32 0x5F9815FF00000000000000000000000000000000000000000000000000000000 DUP6 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x64 DUP3 MSTORE PUSH1 0xA0 DUP3 ADD SWAP1 DUP3 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0xF19 JUMPI DUP2 PUSH0 SWAP2 DUP2 PUSH1 0x40 MSTORE PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP6 PUSH1 0xA4 DUP7 ADD MSTORE DUP2 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 DUP8 PUSH2 0x1229 PUSH1 0xC4 DUP3 ADD DUP3 PUSH2 0x4FFC JUMP JUMPDEST SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x463 JUMPI PUSH2 0x1272 SWAP3 PUSH0 SWAP3 PUSH2 0x1287 JUMPI JUMPDEST POP POP DUP3 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x578F JUMP JUMPDEST SWAP1 PUSH2 0x435 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x4F5F JUMP JUMPDEST PUSH2 0x12A7 SWAP3 POP PUSH1 0xA0 SWAP1 RETURNDATASIZE SWAP1 DUP2 PUSH0 DUP6 RETURNDATACOPY PUSH2 0x129F DUP3 DUP6 PUSH2 0x4E0A JUMP JUMPDEST ADD ADD SWAP1 PUSH2 0x5579 JUMP JUMPDEST DUP4 DUP1 PUSH2 0x1262 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x12C6 PUSH2 0x61AB JUMP JUMPDEST PUSH2 0x1305 PUSH0 PUSH2 0x12D2 PUSH2 0x57B5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x7B03C7BA00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x59CB JUMP JUMPDEST SUB DUP2 DUP4 ADDRESS GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0x133A JUMPI PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH2 0x134D SWAP1 RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x113B DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST POP POP PUSH2 0x9E6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x46E JUMPI PUSH2 0x138C PUSH2 0x1386 PUSH2 0x435 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x5108 JUMP JUMPDEST SWAP1 PUSH2 0x5F36 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x5167 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH1 0x20 PUSH2 0x5BE PUSH2 0x5ED6 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH2 0x13CC PUSH2 0x13C3 CALLDATASIZE PUSH2 0x504A JUMP JUMPDEST SWAP3 SWAP2 SWAP4 SWAP1 PUSH2 0x6169 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH32 0x0 AND SWAP2 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND SWAP3 DUP4 PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP2 PUSH2 0x15AF JUMPI JUMPDEST POP MLOAD SWAP5 PUSH2 0x144B DUP7 PUSH2 0x5981 JUMP JUMPDEST SWAP6 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x158A JUMPI POP POP PUSH0 SWAP3 PUSH2 0x51A PUSH2 0x14CC DUP9 DUP7 SWAP6 PUSH2 0x1508 SWAP6 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1473 DUP5 PUSH2 0x4D69 JUMP JUMPDEST ADDRESS DUP5 MSTORE PUSH1 0x20 SWAP11 DUP12 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE DUP7 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xEFD85F1400000000000000000000000000000000000000000000000000000000 DUP11 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x586E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0x152C SWAP2 PUSH0 SWAP2 PUSH2 0x1570 JUMPI JUMPDEST POP DUP3 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x57EB JUMP JUMPDEST POP POP SWAP2 PUSH2 0x1548 JUMPI JUMPDEST PUSH2 0x435 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x4F5F JUMP JUMPDEST PUSH0 PUSH32 0x0 TSTORE PUSH2 0x1534 JUMP JUMPDEST PUSH2 0x1584 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x602 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP5 PUSH2 0x151D JUMP JUMPDEST DUP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x15A8 PUSH1 0x1 SWAP4 DUP12 PUSH2 0x5B0F JUMP JUMPDEST MSTORE ADD PUSH2 0x144E JUMP JUMPDEST PUSH2 0x15CB SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x15C3 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x58F7 JUMP JUMPDEST DUP7 PUSH2 0x143F JUMP JUMPDEST PUSH2 0x15DA CALLDATASIZE PUSH2 0x5346 JUMP JUMPDEST SWAP5 SWAP1 SWAP6 SWAP4 SWAP2 SWAP4 CALLER PUSH2 0x15EA SWAP1 PUSH2 0x6169 JUMP JUMPDEST SWAP8 PUSH1 0x40 MLOAD SWAP10 PUSH2 0x15F8 DUP12 PUSH2 0x4D99 JUMP JUMPDEST CALLER DUP12 MSTORE PUSH1 0x20 DUP12 ADD PUSH1 0x1 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x40 DUP12 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 DUP11 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP10 ADD MSTORE PUSH1 0xA0 DUP9 ADD MSTORE PUSH1 0xC0 DUP8 ADD MSTORE PUSH1 0xE0 DUP7 ADD MSTORE ISZERO ISZERO PUSH2 0x100 DUP6 ADD MSTORE CALLDATASIZE SWAP1 PUSH2 0x164F SWAP3 PUSH2 0x4EDC JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE PUSH1 0x40 MLOAD PUSH32 0x68A24FE000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 PUSH2 0x168E SWAP1 PUSH1 0x24 DUP4 ADD PUSH2 0x5A7E JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE PUSH2 0x16A0 SWAP1 DUP4 PUSH2 0x4E0A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP3 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD PUSH1 0x20 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD PUSH2 0x16DD SWAP2 PUSH2 0x4FFC JUMP JUMPDEST SUB DUP3 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 DUP2 GAS PUSH0 SWAP5 DUP6 SWAP2 CALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP3 PUSH2 0x1740 JUMPI JUMPDEST POP PUSH1 0x20 DUP3 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x46E JUMPI PUSH1 0x20 DUP1 SWAP3 ADD MLOAD SWAP1 PUSH2 0x5C6 JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x1755 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x602 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST SWAP1 DUP3 PUSH2 0x171F JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH1 0x20 PUSH2 0x5BE PUSH2 0x5E76 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x178F PUSH2 0x4CFD JUMP JUMPDEST PUSH2 0x1797 PUSH2 0x4D29 JUMP JUMPDEST SWAP1 PUSH1 0x64 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x46E JUMPI PUSH2 0x17BC PUSH2 0x1832 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4E93 JUMP JUMPDEST SWAP1 PUSH2 0x17C5 PUSH2 0x61AB JUMP JUMPDEST PUSH2 0x17CD PUSH2 0x61D8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 DUP2 PUSH32 0x0 AND SWAP4 PUSH1 0x40 MLOAD DUP1 SWAP7 DUP2 SWAP3 PUSH32 0xA07D604000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x44 CALLDATALOAD DUP11 DUP9 PUSH1 0x4 DUP7 ADD PUSH2 0x56FF JUMP JUMPDEST SUB DUP2 DUP4 DUP8 GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP5 PUSH2 0x199A JUMPI JUMPDEST POP DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP5 MSTORE AND PUSH1 0x4 DUP4 ADD MSTORE PUSH0 DUP3 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP3 PUSH2 0x197E JUMPI JUMPDEST POP PUSH0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x193A JUMPI PUSH2 0x18A1 DUP2 DUP7 PUSH2 0x5B0F JUMP JUMPDEST MLOAD SWAP1 DUP2 PUSH2 0x18B3 JUMPI JUMPDEST PUSH1 0x1 SWAP2 POP ADD PUSH2 0x188E JUMP JUMPDEST DUP3 PUSH2 0x18BE DUP3 DUP7 PUSH2 0x5B0F JUMP JUMPDEST MLOAD AND DUP6 EXTCODESIZE ISZERO PUSH2 0x46E JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP9 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH0 DUP3 PUSH1 0x64 DUP2 DUP4 DUP10 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH1 0x1 SWAP3 PUSH2 0x192B JUMPI JUMPDEST POP PUSH2 0x18A9 JUMP JUMPDEST PUSH2 0x1934 SWAP1 PUSH2 0x4D85 JUMP JUMPDEST DUP8 PUSH2 0x1925 JUMP JUMPDEST PUSH2 0x435 DUP6 PUSH2 0x1947 DUP9 PUSH2 0x6470 JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x4F5F JUMP JUMPDEST PUSH2 0x1993 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x15C3 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST SWAP1 DUP6 PUSH2 0x188B JUMP JUMPDEST PUSH2 0x19AF SWAP2 SWAP5 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xF0A DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST SWAP3 DUP6 PUSH2 0x1846 JUMP JUMPDEST PUSH0 PUSH2 0x51A DUP2 PUSH2 0xB5A PUSH2 0x1A4D PUSH2 0x19CA CALLDATASIZE PUSH2 0x52AA JUMP JUMPDEST SWAP1 PUSH2 0x19DA SWAP9 SWAP5 SWAP3 SWAP6 SWAP4 SWAP9 CALLER PUSH2 0x6169 JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x19F2 DUP8 PUSH2 0x4D69 JUMP JUMPDEST CALLER DUP8 MSTORE AND PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x3 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x7B03C7BA00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x59CB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH2 0x1A98 CALLDATASIZE PUSH2 0x4F2D JUMP JUMPDEST PUSH2 0x1AA0 PUSH2 0x61AB JUMP JUMPDEST PUSH2 0x1AA8 PUSH2 0x61D8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x0 SWAP1 DUP4 DUP3 AND PUSH2 0x1AE4 DUP5 PUSH2 0x559F JUMP JUMPDEST SWAP5 PUSH2 0x1AEE DUP4 PUSH2 0x559F JUMP JUMPDEST PUSH2 0x1AFB PUSH1 0x40 DUP6 ADD DUP6 PUSH2 0x55B3 JUMP JUMPDEST SWAP8 SWAP1 SWAP2 PUSH1 0x80 DUP7 ADD CALLDATALOAD SWAP1 PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x46E JUMPI DUP5 PUSH2 0x3AC PUSH2 0x1B57 SWAP4 PUSH2 0x1090 PUSH0 SWAP8 PUSH2 0x1B8F SWAP15 PUSH2 0x1B2C DUP14 PUSH1 0xC0 DUP2 ADD SWAP1 PUSH2 0x5607 JUMP JUMPDEST SWAP7 SWAP1 SWAP8 DUP2 PUSH1 0x40 MLOAD SWAP12 PUSH2 0x1B3D DUP14 PUSH2 0x4DB6 JUMP JUMPDEST AND DUP12 MSTORE AND PUSH1 0x20 DUP11 ADD MSTORE PUSH1 0x60 DUP14 ADD CALLDATALOAD PUSH1 0x40 DUP11 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x4E45 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP9 DUP2 SWAP3 PUSH32 0x2145789700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x5D10 JUMP JUMPDEST SUB DUP2 DUP4 DUP7 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP6 PUSH0 SWAP8 PUSH0 SWAP4 PUSH2 0x1D91 JUMPI JUMPDEST POP PUSH2 0x1BB1 SWAP1 PUSH2 0x559F JUMP JUMPDEST SWAP7 DUP2 PUSH1 0x40 MLOAD SWAP9 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP11 MSTORE AND PUSH1 0x4 DUP10 ADD MSTORE PUSH0 DUP9 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL SWAP8 DUP9 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP9 PUSH2 0x1D75 JUMPI JUMPDEST POP SWAP2 SWAP6 PUSH1 0xA0 DUP6 ADD SWAP3 SWAP1 PUSH0 JUMPDEST DUP10 MLOAD DUP2 LT ISZERO PUSH2 0x1D30 JUMPI PUSH2 0x1C14 DUP2 DUP5 PUSH2 0x5B0F JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO PUSH2 0x1D27 JUMPI DUP5 PUSH2 0x1C27 DUP3 DUP14 PUSH2 0x5B0F JUMP JUMPDEST MLOAD AND PUSH2 0x1C32 DUP8 PUSH2 0x56F2 JUMP JUMPDEST DUP1 PUSH2 0x1CFC JUMPI JUMPDEST ISZERO PUSH2 0x1C7A JUMPI POP PUSH2 0x1C74 PUSH1 0x1 SWAP3 PUSH2 0x1C4D DUP11 PUSH2 0x559F JUMP JUMPDEST DUP12 PUSH32 0x0 PUSH2 0x6946 JUMP JUMPDEST ADD PUSH2 0x1C01 JUMP JUMPDEST PUSH2 0x1C83 DUP10 PUSH2 0x559F JUMP JUMPDEST DUP9 EXTCODESIZE ISZERO PUSH2 0x46E JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH0 DUP3 PUSH1 0x64 DUP2 DUP4 DUP12 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH1 0x1 SWAP3 PUSH2 0x1CED JUMPI JUMPDEST POP PUSH2 0x1C74 JUMP JUMPDEST PUSH2 0x1CF6 SWAP1 PUSH2 0x4D85 JUMP JUMPDEST DUP12 PUSH2 0x1CE7 JUMP JUMPDEST POP DUP6 PUSH32 0x0 AND DUP2 EQ PUSH2 0x1C38 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x1C74 JUMP JUMPDEST POP PUSH2 0x435 DUP9 PUSH2 0x1D46 PUSH2 0x1D41 DUP10 PUSH2 0x559F JUMP JUMPDEST PUSH2 0x6470 JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x53BF JUMP JUMPDEST PUSH2 0x1D8A SWAP2 SWAP9 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x15C3 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST SWAP7 DUP9 PUSH2 0x1BF6 JUMP JUMPDEST SWAP1 SWAP3 POP PUSH2 0x1DAE SWAP2 SWAP8 POP PUSH2 0x1BB1 SWAP7 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x113B DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST SWAP8 SWAP2 SWAP7 SWAP1 SWAP8 SWAP3 SWAP1 PUSH2 0x1BA7 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH1 0x20 PUSH2 0x5BE PUSH2 0x5E16 JUMP JUMPDEST PUSH2 0x1DDD CALLDATASIZE PUSH2 0x5346 JUMP JUMPDEST SWAP5 SWAP1 SWAP6 SWAP4 SWAP2 SWAP4 CALLER PUSH2 0x1DED SWAP1 PUSH2 0x6169 JUMP JUMPDEST SWAP8 PUSH1 0x40 MLOAD SWAP10 PUSH2 0x1DFB DUP12 PUSH2 0x4D99 JUMP JUMPDEST CALLER DUP12 MSTORE PUSH1 0x20 DUP12 ADD PUSH0 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x40 DUP12 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 DUP11 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP10 ADD MSTORE PUSH1 0xA0 DUP9 ADD MSTORE PUSH1 0xC0 DUP8 ADD MSTORE PUSH1 0xE0 DUP7 ADD MSTORE ISZERO ISZERO PUSH2 0x100 DUP6 ADD MSTORE CALLDATASIZE SWAP1 PUSH2 0x164F SWAP3 PUSH2 0x4EDC JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x1E65 PUSH2 0x4CFD JUMP JUMPDEST PUSH2 0x1E6D PUSH2 0x4D29 JUMP JUMPDEST PUSH2 0x1E75 PUSH2 0x4EB1 JUMP JUMPDEST PUSH1 0xA4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x46E JUMPI PUSH0 PUSH2 0x1F30 PUSH2 0x1E9B DUP3 SWAP5 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4F12 JUMP JUMPDEST SWAP3 PUSH2 0x51A PUSH2 0x528 PUSH2 0x1EB9 PUSH2 0x1EAE CALLER PUSH2 0x6169 JUMP JUMPDEST SWAP9 PUSH1 0x44 CALLDATALOAD SWAP1 DUP12 PUSH2 0x64C6 JUMP JUMPDEST SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1ED0 DUP5 PUSH2 0x4D69 JUMP JUMPDEST CALLER DUP5 MSTORE DUP7 PUSH1 0x20 SWAP14 AND DUP14 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x2 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x5B34379100000000000000000000000000000000000000000000000000000000 DUP13 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x586E JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH2 0x5B7 SWAP3 PUSH2 0x1F7B SWAP2 PUSH0 SWAP2 PUSH2 0x1F82 JUMPI JUMPDEST POP DUP6 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x57EB JUMP JUMPDEST POP POP PUSH2 0x5B0F JUMP JUMPDEST PUSH2 0x1F96 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x602 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP7 PUSH2 0x1F6C JUMP JUMPDEST PUSH2 0x51A PUSH2 0x2034 PUSH0 DUP1 PUSH2 0x2070 PUSH2 0x1FB0 CALLDATASIZE PUSH2 0x4F92 JUMP JUMPDEST PUSH2 0x1FC1 SWAP10 SWAP4 SWAP2 SWAP10 SWAP9 SWAP3 SWAP5 SWAP9 CALLER PUSH2 0x6169 JUMP JUMPDEST SWAP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x1FD8 DUP6 PUSH2 0x4D69 JUMP JUMPDEST CALLER DUP6 MSTORE DUP8 PUSH1 0x20 SWAP13 AND DUP13 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE DUP8 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x5B34379100000000000000000000000000000000000000000000000000000000 DUP11 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x586E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0x152C SWAP2 PUSH0 SWAP2 PUSH2 0x1570 JUMPI POP DUP3 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x57EB JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH2 0x20C3 CALLDATASIZE PUSH2 0x5247 JUMP JUMPDEST PUSH2 0x20CC CALLER PUSH2 0x6169 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 SWAP4 PUSH32 0x3A1B05DE00000000000000000000000000000000000000000000000000000000 DUP6 DUP5 ADD MSTORE DUP5 PUSH1 0x24 DUP5 ADD MSTORE DUP4 PUSH2 0x2111 DUP3 PUSH2 0x4D55 JUMP JUMPDEST AND PUSH1 0x44 DUP5 ADD MSTORE DUP4 PUSH2 0x2123 DUP7 DUP4 ADD PUSH2 0x4D55 JUMP JUMPDEST AND PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x40 DUP2 ADD CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP3 CALLDATASIZE SUB ADD DUP2 SLT ISZERO PUSH2 0x46E JUMPI DUP2 ADD SWAP1 DUP6 DUP3 CALLDATALOAD SWAP3 ADD SWAP5 PUSH8 0xFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP5 GT PUSH2 0x46E JUMPI DUP4 PUSH1 0x5 SHL CALLDATASIZE SUB DUP8 SGT PUSH2 0x46E JUMPI PUSH2 0x21B8 DUP2 PUSH2 0x21F4 SWAP5 PUSH1 0x60 PUSH2 0x21A2 PUSH0 SWAP12 DUP13 SWAP10 PUSH1 0x80 PUSH1 0x84 DUP8 ADD MSTORE PUSH1 0xC4 DUP7 ADD SWAP2 PUSH2 0x5658 JUMP JUMPDEST SWAP2 ADD CALLDATALOAD PUSH1 0xA4 DUP4 ADD MSTORE SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x4E0A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP7 DUP8 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP12 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP4 PUSH2 0x22B6 JUMPI JUMPDEST POP DUP3 MLOAD DUP4 ADD SWAP4 PUSH1 0x80 DUP5 DUP3 DUP8 ADD SWAP7 SUB SLT PUSH2 0x46E JUMPI DUP1 DUP5 ADD MLOAD DUP4 DUP2 GT PUSH2 0x46E JUMPI DUP6 DUP3 PUSH2 0x2254 SWAP3 DUP8 ADD ADD PUSH2 0x572E JUMP JUMPDEST SWAP4 PUSH1 0x40 DUP2 ADD MLOAD SWAP6 PUSH1 0x60 DUP3 ADD MLOAD SWAP3 PUSH1 0x80 DUP4 ADD MLOAD SWAP6 DUP7 GT PUSH2 0x46E JUMPI PUSH2 0x435 SWAP6 PUSH2 0x227C SWAP4 ADD ADD PUSH2 0x572E JUMP JUMPDEST SWAP2 PUSH2 0x228E JUMPI JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP5 DUP6 PUSH2 0x5279 JUMP JUMPDEST PUSH0 PUSH32 0x0 TSTORE PUSH2 0x2282 JUMP JUMPDEST PUSH2 0x22CB SWAP2 SWAP4 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x602 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST SWAP2 DUP5 PUSH2 0x2228 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH2 0x22E0 CALLDATASIZE PUSH2 0x5313 JUMP JUMPDEST PUSH2 0x22E8 PUSH2 0x61AB JUMP JUMPDEST PUSH2 0x22F0 PUSH2 0x61D8 JUMP JUMPDEST PUSH2 0x22F9 DUP2 PUSH2 0x663C JUMP JUMPDEST PUSH2 0x2307 PUSH1 0x60 DUP6 SWAP4 SWAP6 ADD PUSH2 0x559F JUMP JUMPDEST SWAP1 PUSH2 0x2311 DUP4 PUSH2 0x559F JUMP JUMPDEST SWAP5 PUSH2 0x100 DUP5 ADD SWAP6 PUSH2 0x2321 DUP8 PUSH2 0x56F2 JUMP JUMPDEST DUP1 PUSH2 0x2598 JUMPI JUMPDEST ISZERO PUSH2 0x2415 JUMPI POP SWAP5 PUSH2 0x23A4 SWAP2 PUSH2 0x237F PUSH1 0x20 SWAP8 PUSH32 0x0 PUSH32 0x0 PUSH2 0x627A JUMP JUMPDEST PUSH2 0x2388 DUP6 PUSH2 0x559F JUMP JUMPDEST SWAP2 PUSH2 0x239E PUSH2 0x2398 PUSH1 0x80 DUP9 ADD PUSH2 0x559F JUMP JUMPDEST SWAP2 PUSH2 0x56F2 JUMP JUMPDEST SWAP3 PUSH2 0x6814 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP2 AND EQ PUSH2 0x2403 JUMPI JUMPDEST POP PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x1D41 PUSH2 0x240F SWAP2 PUSH2 0x559F JUMP JUMPDEST DUP3 PUSH2 0x23D7 JUMP JUMPDEST DUP2 PUSH2 0x2429 JUMPI JUMPDEST POP POP PUSH1 0x20 SWAP5 PUSH2 0x23A4 SWAP2 PUSH2 0x237F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH32 0x0 AND SWAP2 DUP1 PUSH32 0x0 AND SWAP2 PUSH2 0x2483 DUP6 PUSH2 0x6236 JUMP JUMPDEST SWAP4 DUP1 EXTCODESIZE ISZERO PUSH2 0x46E JUMPI PUSH1 0x40 MLOAD PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP5 DUP3 AND PUSH1 0x44 DUP7 ADD MSTORE SWAP2 DUP8 AND AND PUSH1 0x64 DUP5 ADD MSTORE PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x84 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP4 PUSH1 0x20 SWAP4 PUSH2 0x2549 SWAP4 PUSH2 0x2589 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP11 PUSH1 0x4 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0x255E JUMPI JUMPDEST DUP1 PUSH2 0x241B JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2582 JUMPI JUMPDEST PUSH2 0x2574 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x46E JUMPI DUP6 PUSH2 0x2558 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x256A JUMP JUMPDEST PUSH2 0x2592 SWAP1 PUSH2 0x4D85 JUMP JUMPDEST DUP11 PUSH2 0x24FC JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP1 DUP6 AND EQ PUSH2 0x2327 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x25E5 PUSH2 0x61AB JUMP JUMPDEST PUSH2 0x9D5 PUSH1 0x20 PUSH2 0x25F2 PUSH2 0x5DCC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xBE5AE84100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x5A7E JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x263E PUSH2 0x4CFD JUMP JUMPDEST PUSH2 0x2646 PUSH2 0x4D29 JUMP JUMPDEST PUSH2 0x264E PUSH2 0x61D8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH32 0x0 AND PUSH1 0x40 MLOAD SWAP3 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP5 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 DUP5 GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x463 JUMPI PUSH0 PUSH2 0x26CF PUSH2 0x270A SWAP7 DUP3 SWAP7 DUP4 SWAP2 PUSH2 0x274E JUMPI JUMPDEST POP MLOAD PUSH2 0x5981 JUMP JUMPDEST SWAP4 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xA07D604000000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x44 CALLDATALOAD SWAP2 PUSH1 0x4 DUP7 ADD PUSH2 0x56FF JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0x435 SWAP2 PUSH0 SWAP2 PUSH2 0x2734 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x4F5F JUMP JUMPDEST PUSH2 0x2748 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xF0A DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP3 PUSH2 0x271F JUMP JUMPDEST PUSH2 0x2762 SWAP2 POP RETURNDATASIZE DUP1 DUP6 DUP4 RETURNDATACOPY PUSH2 0x15C3 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP9 PUSH2 0x26C8 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH1 0x20 PUSH32 0x0 TLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH2 0x27BB CALLDATASIZE PUSH2 0x4F2D JUMP JUMPDEST PUSH2 0x27C3 PUSH2 0x61AB JUMP JUMPDEST PUSH2 0x27CB PUSH2 0x61D8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 DUP2 AND SWAP3 PUSH1 0x20 SWAP1 DUP2 DUP2 ADD SWAP1 PUSH2 0x2808 DUP3 PUSH2 0x559F JUMP JUMPDEST SWAP6 PUSH2 0x2812 DUP3 PUSH2 0x559F JUMP JUMPDEST SWAP7 PUSH2 0x2820 PUSH1 0x40 DUP5 ADD DUP5 PUSH2 0x55B3 JUMP JUMPDEST SWAP2 SWAP1 SWAP9 PUSH1 0x80 DUP6 ADD CALLDATALOAD SWAP2 PUSH1 0x5 DUP4 LT ISZERO PUSH2 0x46E JUMPI DUP10 PUSH2 0x3AC PUSH2 0x2864 SWAP5 PUSH2 0x2873 PUSH2 0x28C3 SWAP15 PUSH0 SWAP9 DUP14 DUP7 PUSH2 0x288B SWAP10 PUSH2 0x2857 DUP16 PUSH1 0xC0 DUP2 ADD SWAP1 PUSH2 0x5607 JUMP JUMPDEST SWAP10 SWAP1 SWAP11 PUSH1 0x40 MLOAD SWAP14 DUP15 PUSH2 0x4DB6 JUMP JUMPDEST AND DUP13 MSTORE AND SWAP1 DUP11 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x4E45 JUMP JUMPDEST PUSH1 0x40 DUP8 ADD MSTORE PUSH1 0x60 DUP10 ADD CALLDATALOAD PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0x80 DUP7 ADD PUSH2 0x58EB JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP10 DUP2 SWAP3 PUSH32 0x4AF29EC400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x5CA0 JUMP JUMPDEST SUB DUP2 DUP4 DUP6 GAS CALL SWAP6 DUP7 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP4 PUSH0 SWAP9 PUSH0 SWAP9 PUSH2 0x2B79 JUMPI JUMPDEST POP PUSH2 0x28E5 SWAP1 PUSH2 0x559F JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD SWAP2 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP2 PUSH2 0x2B5F JUMPI JUMPDEST POP SWAP7 SWAP8 PUSH1 0xA0 DUP5 ADD SWAP8 SWAP1 PUSH0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x2B1E JUMPI DUP4 PUSH2 0x2948 DUP3 DUP6 PUSH2 0x5B0F JUMP JUMPDEST MLOAD AND PUSH2 0x2954 DUP3 DUP10 PUSH2 0x5B0F JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO PUSH2 0x2AB1 JUMPI PUSH2 0x2965 DUP13 PUSH2 0x56F2 JUMP JUMPDEST DUP1 PUSH2 0x2AF3 JUMPI JUMPDEST ISZERO PUSH2 0x29A5 JUMPI POP SWAP1 PUSH2 0x299F PUSH1 0x1 SWAP3 DUP12 PUSH32 0x0 PUSH2 0x627A JUMP JUMPDEST ADD PUSH2 0x2934 JUMP JUMPDEST SWAP1 DUP6 PUSH32 0x0 AND SWAP1 PUSH2 0x29D3 DUP10 PUSH2 0x559F JUMP JUMPDEST PUSH2 0x29DC DUP3 PUSH2 0x6236 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x46E JUMPI PUSH1 0x40 MLOAD PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE DUP11 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE SWAP1 DUP5 AND PUSH1 0x64 DUP3 ADD MSTORE SWAP3 SWAP2 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x84 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH2 0x2A9D SWAP4 DUP13 SWAP4 PUSH2 0x2AE4 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP3 DUP4 SWAP3 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB DUP2 PUSH0 DUP11 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x463 JUMPI DUP10 SWAP2 PUSH2 0x2ABB JUMPI JUMPDEST POP POP PUSH1 0x1 SWAP1 PUSH2 0x299F JUMP JUMPDEST DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2ADD JUMPI JUMPDEST PUSH2 0x2ACE DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x46E JUMPI DUP8 DUP13 PUSH2 0x2AB1 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2AC4 JUMP JUMPDEST PUSH2 0x2AED SWAP1 PUSH2 0x4D85 JUMP JUMPDEST DUP16 PUSH2 0x2A52 JUMP JUMPDEST POP DUP6 PUSH32 0x0 AND DUP2 EQ PUSH2 0x296B JUMP JUMPDEST POP DUP6 PUSH2 0x435 DUP12 PUSH2 0x2B30 PUSH2 0x1D41 DUP10 PUSH2 0x559F JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x5021 JUMP JUMPDEST PUSH2 0x2B73 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x15C3 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP10 PUSH2 0x2929 JUMP JUMPDEST SWAP1 SWAP8 POP PUSH2 0x2B96 SWAP2 SWAP9 POP PUSH2 0x28E5 SWAP5 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x454 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST SWAP9 SWAP2 SWAP5 SWAP1 SWAP9 SWAP8 SWAP1 PUSH2 0x28DB JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x2C07 PUSH1 0x40 MLOAD PUSH2 0x4D2 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x20 DUP2 MSTORE PUSH2 0x2BCD DUP2 PUSH2 0x4DEE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH0 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0x2D3E JUMPI JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP6 LT DUP5 EQ PUSH2 0x2D11 JUMPI DUP6 DUP8 SWAP5 DUP7 DUP7 MSTORE SWAP2 DUP3 PUSH0 EQ PUSH2 0x2CD3 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x2C7A JUMPI JUMPDEST POP PUSH2 0x2C66 SWAP3 POP SUB DUP4 PUSH2 0x4E0A JUMP JUMPDEST PUSH2 0x435 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST PUSH0 DUP1 DUP1 MSTORE DUP6 SWAP3 POP SWAP1 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP6 DUP4 LT PUSH2 0x2CBB JUMPI POP POP PUSH2 0x2C66 SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x2C59 JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x2CA4 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0x2C66 SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0x2C59 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0x2C35 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH2 0x2D79 PUSH2 0x2D72 PUSH0 DUP1 PUSH2 0x6F2 PUSH2 0x894 PUSH2 0x51A PUSH2 0x2D67 CALLDATASIZE PUSH2 0x51E8 JUMP JUMPDEST SWAP6 SWAP4 SWAP11 SWAP3 SWAP10 SWAP1 PUSH2 0x6169 JUMP JUMPDEST SWAP9 DUP11 PUSH2 0x64C6 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x2D90 DUP4 PUSH2 0x4D69 JUMP JUMPDEST ADDRESS DUP4 MSTORE DUP6 PUSH1 0x20 SWAP12 AND DUP12 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x2 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xB24BD57100000000000000000000000000000000000000000000000000000000 DUP12 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x59CB JUMP JUMPDEST PUSH2 0x51A PUSH2 0x2034 PUSH0 DUP1 PUSH2 0x2E94 PUSH2 0x2E11 CALLDATASIZE PUSH2 0x52AA JUMP JUMPDEST PUSH2 0x2E21 SWAP10 SWAP4 SWAP5 SWAP9 SWAP3 SWAP2 SWAP10 CALLER PUSH2 0x6169 JUMP JUMPDEST SWAP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x2E38 DUP6 PUSH2 0x4D69 JUMP JUMPDEST CALLER DUP6 MSTORE DUP8 PUSH1 0x20 SWAP13 AND DUP13 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE DUP8 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x7B03C7BA00000000000000000000000000000000000000000000000000000000 DUP11 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x59CB JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0x2EDA SWAP2 PUSH0 SWAP2 PUSH2 0x2EF6 JUMPI JUMPDEST POP DUP3 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x5A29 JUMP JUMPDEST POP SWAP3 SWAP1 POP PUSH2 0x1548 JUMPI PUSH2 0x435 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x4F5F JUMP JUMPDEST PUSH2 0x2F0A SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x602 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP5 PUSH2 0x2ECB JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x2F28 PUSH2 0x61AB JUMP JUMPDEST PUSH2 0x9D5 PUSH1 0x20 PUSH1 0x40 MLOAD PUSH2 0x2F39 DUP2 PUSH2 0x4D69 JUMP JUMPDEST PUSH0 DUP2 MSTORE PUSH0 DUP3 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE PUSH0 PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x86FAD6600000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x5480 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH1 0x20 PUSH2 0x5BE PUSH2 0x5D6C JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH32 0xF5AB33E500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x2FFF PUSH2 0x4CFD JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x46E JUMPI PUSH2 0x3020 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4E93 JUMP JUMPDEST SWAP2 PUSH2 0x3029 PUSH2 0x4D13 JUMP JUMPDEST SWAP2 PUSH1 0x84 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x46E JUMPI PUSH0 SWAP4 PUSH2 0x51A PUSH2 0xB1D DUP7 SWAP5 PUSH2 0x3052 PUSH2 0xAA2 PUSH2 0x30C7 SWAP7 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4F12 JUMP JUMPDEST SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x306A DUP6 PUSH2 0x4D69 JUMP JUMPDEST ADDRESS DUP6 MSTORE AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x4 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xEFD85F1400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x586E JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH2 0x435 SWAP3 PUSH2 0x3113 SWAP2 PUSH0 SWAP2 PUSH2 0x3150 JUMPI JUMPDEST POP PUSH1 0x20 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x57EB JUMP JUMPDEST SWAP1 SWAP4 SWAP2 SWAP3 PUSH2 0x3128 JUMPI JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x5021 JUMP JUMPDEST PUSH0 PUSH32 0x0 TSTORE PUSH2 0x311C JUMP JUMPDEST PUSH2 0x3164 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x602 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP5 PUSH2 0x3103 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH2 0x3178 CALLDATASIZE PUSH2 0x509C JUMP JUMPDEST SWAP1 PUSH2 0x3186 SWAP1 SWAP5 SWAP4 SWAP3 SWAP5 PUSH2 0x6169 JUMP JUMPDEST SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 DUP2 PUSH1 0x40 MLOAD SWAP7 PUSH2 0x319F DUP9 PUSH2 0x4D99 JUMP JUMPDEST CALLER DUP9 MSTORE DUP2 PUSH1 0x20 SWAP11 DUP12 DUP11 ADD PUSH0 SWAP1 MSTORE AND PUSH1 0x40 DUP10 ADD MSTORE AND PUSH1 0x60 DUP8 ADD MSTORE AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP4 ADD PUSH0 SWAP1 MSTORE PUSH1 0xE0 DUP4 ADD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 MSTORE PUSH2 0x100 DUP4 ADD PUSH0 SWAP1 MSTORE PUSH2 0x120 DUP4 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP3 DUP6 DUP3 ADD PUSH32 0xBE5AE84100000000000000000000000000000000000000000000000000000000 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD SWAP1 PUSH2 0x3228 SWAP2 PUSH2 0x5A7E JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE PUSH2 0x323A SWAP1 DUP4 PUSH2 0x4E0A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 SWAP4 PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD PUSH2 0x3276 SWAP2 PUSH2 0x4FFC JUMP JUMPDEST SUB SWAP2 PUSH32 0x0 AND SWAP2 DUP2 GAS PUSH0 SWAP5 DUP6 SWAP2 CALL SWAP1 DUP2 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP2 PUSH2 0x32CD JUMPI JUMPDEST POP DUP3 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x46E JUMPI DUP3 ADD MLOAD SWAP1 PUSH2 0x5C6 JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x32E1 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x602 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP4 PUSH2 0x32B0 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH2 0x32F5 CALLDATASIZE PUSH2 0x5247 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH2 0x33CA DUP3 PUSH32 0x0 AND SWAP2 PUSH2 0x332E DUP2 PUSH2 0x559F JUMP JUMPDEST PUSH1 0x20 SWAP4 PUSH0 DUP6 DUP5 ADD SWAP3 PUSH2 0x333F DUP5 PUSH2 0x559F JUMP JUMPDEST PUSH2 0x337D PUSH2 0x334F PUSH1 0x40 DUP9 ADD DUP9 PUSH2 0x55B3 JUMP JUMPDEST DUP12 PUSH1 0x40 MLOAD SWAP5 PUSH2 0x335D DUP7 PUSH2 0x4DD2 JUMP JUMPDEST DUP8 DUP7 MSTORE DUP2 PUSH1 0x40 MLOAD SWAP8 PUSH2 0x336E DUP10 PUSH2 0x4DB6 JUMP JUMPDEST AND DUP8 MSTORE AND DUP12 DUP7 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x4E45 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE DUP3 PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP7 DUP2 SWAP3 PUSH32 0x4AF29EC400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x5CA0 JUMP JUMPDEST SUB DUP2 DUP4 DUP6 GAS CALL SWAP6 DUP7 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP5 PUSH0 SWAP8 PUSH2 0x37FC JUMPI JUMPDEST POP PUSH2 0x33EA DUP5 PUSH2 0x559F JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD SWAP2 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP2 PUSH2 0x37E2 JUMPI JUMPDEST POP SWAP4 SWAP7 PUSH32 0x0 DUP3 AND SWAP5 SWAP1 PUSH0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x35B1 JUMPI DUP4 PUSH2 0x346C DUP3 DUP6 PUSH2 0x5B0F JUMP JUMPDEST MLOAD AND PUSH2 0x3478 DUP3 DUP11 PUSH2 0x5B0F JUMP JUMPDEST MLOAD DUP1 ISZERO PUSH2 0x35A7 JUMPI PUSH2 0x3488 DUP9 PUSH2 0x559F JUMP JUMPDEST SWAP1 PUSH2 0x3492 DUP2 PUSH2 0x6236 JUMP JUMPDEST SWAP2 DUP11 EXTCODESIZE ISZERO PUSH2 0x46E JUMPI PUSH1 0x40 MLOAD PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE DUP10 DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP3 DUP2 AND PUSH1 0x44 DUP5 ADD MSTORE DUP4 AND PUSH1 0x64 DUP4 ADD MSTORE SWAP1 SWAP2 SWAP1 PUSH0 DUP4 PUSH1 0x84 DUP2 DUP4 DUP15 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH2 0x354F SWAP4 DUP14 SWAP4 PUSH2 0x3598 JUMPI POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP3 DUP4 SWAP3 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB DUP2 PUSH0 DUP11 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x463 JUMPI DUP11 SWAP2 PUSH2 0x356F JUMPI JUMPDEST POP POP PUSH1 0x1 SWAP1 JUMPDEST ADD PUSH2 0x3458 JUMP JUMPDEST DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3591 JUMPI JUMPDEST PUSH2 0x3582 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x46E JUMPI DUP9 DUP12 PUSH2 0x3563 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3578 JUMP JUMPDEST PUSH2 0x35A1 SWAP1 PUSH2 0x4D85 JUMP JUMPDEST DUP15 PUSH2 0x2A52 JUMP JUMPDEST POP POP PUSH1 0x1 SWAP1 PUSH2 0x3569 JUMP JUMPDEST POP SWAP2 SWAP4 SWAP5 POP SWAP2 SWAP7 PUSH2 0x35C1 DUP2 PUSH2 0x559F JUMP JUMPDEST SWAP1 DUP5 PUSH2 0x35D5 PUSH2 0x35CF DUP9 PUSH2 0x559F JUMP JUMPDEST SWAP3 PUSH2 0x559F JUMP JUMPDEST AND DUP9 DUP7 PUSH1 0x24 PUSH2 0x35E3 DUP11 PUSH2 0x559F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP5 MSTORE AND PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP2 PUSH2 0x37AD JUMPI JUMPDEST POP SWAP1 PUSH2 0x36A7 SWAP9 PUSH0 SWAP4 SWAP3 PUSH2 0x3637 DUP8 MLOAD PUSH2 0x5981 JUMP JUMPDEST SWAP2 DUP9 PUSH1 0x40 MLOAD SWAP5 PUSH2 0x3646 DUP7 PUSH2 0x4DD2 JUMP JUMPDEST DUP8 DUP7 MSTORE DUP2 PUSH1 0x40 MLOAD SWAP8 PUSH2 0x3657 DUP10 PUSH2 0x4DB6 JUMP JUMPDEST AND DUP8 MSTORE AND SWAP1 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE DUP3 PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP9 DUP2 SWAP3 PUSH32 0x2145789700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x5D10 JUMP JUMPDEST SUB DUP2 DUP4 DUP12 GAS CALL SWAP5 DUP6 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP7 PUSH0 SWAP7 PUSH2 0x378B JUMPI JUMPDEST POP PUSH0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x3779 JUMPI DUP5 PUSH2 0x36D4 DUP3 DUP7 PUSH2 0x5B0F JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x36E1 DUP2 DUP10 PUSH2 0x5B0F JUMP JUMPDEST MLOAD DUP1 ISZERO PUSH2 0x376F JUMPI PUSH2 0x36F1 DUP9 PUSH2 0x559F JUMP JUMPDEST SWAP1 DUP12 EXTCODESIZE ISZERO PUSH2 0x46E JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP1 SWAP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH0 DUP3 PUSH1 0x64 DUP2 DUP4 DUP15 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH1 0x1 SWAP3 PUSH2 0x3760 JUMPI JUMPDEST POP JUMPDEST ADD PUSH2 0x36C0 JUMP JUMPDEST PUSH2 0x3769 SWAP1 PUSH2 0x4D85 JUMP JUMPDEST DUP11 PUSH2 0x3758 JUMP JUMPDEST POP PUSH1 0x1 SWAP2 POP PUSH2 0x375A JUMP JUMPDEST POP PUSH2 0x435 DUP7 DUP9 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP5 DUP6 PUSH2 0x5279 JUMP JUMPDEST SWAP1 SWAP7 POP PUSH2 0x37A3 SWAP2 SWAP6 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x113B DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST SWAP6 SWAP2 SWAP7 SWAP1 SWAP6 PUSH2 0x36BD JUMP JUMPDEST SWAP3 SWAP2 SWAP1 POP DUP9 DUP4 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x37DB JUMPI JUMPDEST PUSH2 0x37C6 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x46E JUMPI SWAP2 MLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x36A7 PUSH2 0x3624 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x37BC JUMP JUMPDEST PUSH2 0x37F6 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x15C3 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP9 PUSH2 0x342E JUMP JUMPDEST SWAP1 SWAP5 POP PUSH2 0x3814 SWAP2 SWAP7 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x454 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST SWAP7 SWAP2 SWAP5 SWAP1 SWAP7 PUSH2 0x33E0 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH1 0x20 PUSH2 0x5BE PUSH2 0x5B52 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x3851 PUSH2 0x4CFD JUMP JUMPDEST PUSH2 0x3859 PUSH2 0x4D3F JUMP JUMPDEST SWAP1 PUSH2 0x3862 PUSH2 0x4D13 JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x46E JUMPI PUSH2 0x3885 PUSH2 0x388B SWAP2 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4F12 JUMP JUMPDEST SWAP2 PUSH2 0x6169 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 PUSH32 0x0 AND SWAP3 DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND SWAP6 DUP7 PUSH1 0x4 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x40 DUP3 PUSH1 0x44 DUP2 DUP7 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP1 PUSH0 SWAP4 PUSH2 0x39FB JUMPI JUMPDEST POP PUSH0 SWAP4 PUSH2 0x51A PUSH2 0x3997 DUP7 SWAP5 PUSH2 0x391F PUSH2 0x39D3 SWAP6 PUSH2 0x5981 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH2 0x392C DUP10 DUP5 PUSH2 0x5B0F JUMP JUMPDEST MSTORE PUSH1 0x40 MLOAD SWAP2 PUSH2 0x393A DUP4 PUSH2 0x4D69 JUMP JUMPDEST ADDRESS DUP4 MSTORE PUSH1 0x20 SWAP12 DUP13 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xB24BD57100000000000000000000000000000000000000000000000000000000 DUP13 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x59CB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP12 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH2 0x5B7 SWAP3 PUSH2 0x5AF SWAP2 PUSH0 SWAP2 PUSH2 0x5EE JUMPI POP DUP6 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x5A29 JUMP JUMPDEST SWAP3 POP POP SWAP2 PUSH1 0x40 DUP3 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x3A32 JUMPI JUMPDEST DUP2 PUSH2 0x3A18 PUSH1 0x40 SWAP4 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x46E JUMPI DUP2 MLOAD PUSH1 0x20 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 PUSH0 PUSH2 0x3908 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x3A0B JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C65676163792072657665727420726561736F6E000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH2 0x3AC4 PUSH2 0x3AB9 CALLDATASIZE PUSH2 0x51E8 JUMP JUMPDEST SWAP3 SWAP5 SWAP1 SWAP4 SWAP2 SWAP4 PUSH2 0x6169 JUMP JUMPDEST SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 PUSH32 0x0 AND SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP5 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND SWAP7 DUP8 PUSH1 0x4 DUP7 ADD MSTORE AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x40 DUP4 PUSH1 0x44 DUP2 DUP8 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP1 PUSH0 SWAP5 PUSH2 0x3C06 JUMPI JUMPDEST POP SWAP4 PUSH2 0x51A PUSH2 0x3997 PUSH0 SWAP7 SWAP5 PUSH2 0x3BDE SWAP5 PUSH2 0x3B5A DUP10 SWAP8 PUSH2 0x5981 JUMP JUMPDEST SWAP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x3B76 DUP11 DUP6 PUSH2 0x5B0F JUMP JUMPDEST MSTORE PUSH1 0x40 MLOAD SWAP3 PUSH2 0x3B84 DUP5 PUSH2 0x4D69 JUMP JUMPDEST ADDRESS DUP5 MSTORE PUSH1 0x20 SWAP13 DUP14 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x2 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xEFD85F1400000000000000000000000000000000000000000000000000000000 DUP13 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x586E JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH2 0x5B7 SWAP3 PUSH2 0x1F7B SWAP2 PUSH0 SWAP2 PUSH2 0x1F82 JUMPI POP DUP6 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x57EB JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP4 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x3C3B JUMPI JUMPDEST DUP2 PUSH2 0x3C22 PUSH1 0x40 SWAP4 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x46E JUMPI DUP3 MLOAD PUSH1 0x20 SWAP1 SWAP4 ADD MLOAD SWAP3 PUSH2 0x51A PUSH2 0x3B41 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x3C15 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD GT PUSH2 0x46E JUMPI CALLDATASIZE PUSH1 0x23 PUSH1 0x4 CALLDATALOAD ADD SLT ISZERO PUSH2 0x46E JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD GT PUSH2 0x46E JUMPI CALLDATASIZE PUSH1 0x24 PUSH1 0xC0 PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD MUL PUSH1 0x4 CALLDATALOAD ADD ADD GT PUSH2 0x46E JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x46E JUMPI PUSH2 0x3CFC SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x5108 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD GT PUSH2 0x46E JUMPI PUSH1 0x60 PUSH1 0x3 NOT PUSH1 0x44 CALLDATALOAD CALLDATASIZE SUB ADD SLT PUSH2 0x46E JUMPI PUSH1 0x64 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x46E JUMPI PUSH2 0x3D3D SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x5139 JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x46E JUMPI PUSH2 0x3D5D SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x5108 JUMP JUMPDEST SWAP5 SWAP1 SWAP4 PUSH2 0x3D68 PUSH2 0x61AB JUMP JUMPDEST DUP1 PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD SUB PUSH2 0x4283 JUMPI PUSH0 JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD DUP2 LT PUSH2 0x3FF8 JUMPI POP POP POP PUSH1 0x44 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD PUSH1 0x44 CALLDATALOAD CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x46E JUMPI DUP2 PUSH1 0x44 CALLDATALOAD ADD PUSH1 0x4 DUP2 ADD CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x46E JUMPI PUSH1 0x24 DUP3 PUSH1 0x7 SHL CALLDATASIZE SUB SWAP2 ADD SGT PUSH2 0x46E JUMPI PUSH2 0x3E1B JUMPI JUMPDEST PUSH2 0x435 PUSH2 0x138C DUP7 DUP7 PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH2 0x5F36 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP3 SWAP5 PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x46E JUMPI PUSH1 0x40 MLOAD SWAP5 PUSH32 0x2A2D80D100000000000000000000000000000000000000000000000000000000 DUP7 MSTORE CALLER PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x60 PUSH1 0x24 DUP8 ADD MSTORE PUSH1 0xC4 DUP7 ADD SWAP3 PUSH1 0x44 CALLDATALOAD ADD PUSH1 0x24 DUP2 ADD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 DUP4 ADD CALLDATALOAD GT PUSH2 0x46E JUMPI PUSH1 0x4 DUP3 ADD CALLDATALOAD PUSH1 0x7 SHL CALLDATASIZE SUB DUP6 SGT PUSH2 0x46E JUMPI PUSH1 0x60 PUSH1 0x64 DUP10 ADD MSTORE PUSH1 0x4 DUP3 ADD CALLDATALOAD SWAP1 MSTORE SWAP2 SWAP3 DUP7 SWAP3 PUSH1 0xE4 DUP5 ADD SWAP3 SWAP2 SWAP1 PUSH0 SWAP1 JUMPDEST PUSH1 0x4 DUP2 ADD CALLDATALOAD DUP3 LT PUSH2 0x3F7A JUMPI POP POP POP DUP3 SWAP2 PUSH0 SWAP5 PUSH2 0x3F1D SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x3EFB PUSH1 0x24 PUSH1 0x44 CALLDATALOAD ADD PUSH2 0x4D55 JUMP JUMPDEST AND PUSH1 0x84 DUP7 ADD MSTORE PUSH1 0x44 DUP1 CALLDATALOAD ADD CALLDATALOAD PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0x3 NOT DUP6 DUP5 SUB ADD PUSH1 0x44 DUP7 ADD MSTORE PUSH2 0x5695 JUMP JUMPDEST SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH2 0x435 SWAP4 PUSH2 0x138C SWAP4 PUSH2 0x3F6B JUMPI JUMPDEST DUP3 SWAP5 POP DUP2 SWAP4 POP PUSH2 0x3DEB JUMP JUMPDEST PUSH2 0x3F74 SWAP1 PUSH2 0x4D85 JUMP JUMPDEST DUP5 PUSH2 0x3F60 JUMP JUMPDEST SWAP2 SWAP6 SWAP5 POP SWAP2 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x3F91 DUP8 PUSH2 0x4D55 JUMP JUMPDEST AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP8 ADD CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP1 SWAP4 SUB PUSH2 0x46E JUMPI PUSH1 0x4 SWAP3 PUSH1 0x1 SWAP3 DUP3 ADD MSTORE PUSH2 0x3FC1 PUSH1 0x40 DUP10 ADD PUSH2 0x64B3 JUMP JUMPDEST PUSH6 0xFFFFFFFFFFFF DUP1 SWAP2 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x3FDC PUSH1 0x60 DUP11 ADD PUSH2 0x64B3 JUMP JUMPDEST AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP1 SWAP2 ADD SWAP8 ADD SWAP4 ADD SWAP1 POP DUP9 SWAP5 SWAP6 SWAP4 SWAP3 SWAP2 PUSH2 0x3ECF JUMP JUMPDEST PUSH2 0x4006 PUSH2 0x3AC DUP3 DUP5 DUP7 PUSH2 0x6074 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 PUSH1 0x60 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x60 DUP5 ADD GT OR PUSH2 0xF19 JUMPI PUSH1 0x60 DUP3 ADD PUSH1 0x40 MSTORE PUSH0 DUP3 MSTORE PUSH0 PUSH1 0x20 DUP4 ADD MSTORE PUSH0 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD SWAP1 PUSH1 0x60 PUSH1 0x40 DUP3 ADD MLOAD SWAP2 ADD MLOAD PUSH0 BYTE SWAP2 DUP4 MSTORE PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xC0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP2 DUP5 MUL PUSH1 0x4 CALLDATALOAD ADD CALLDATASIZE SUB ADD SLT PUSH2 0x46E JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0x4097 DUP3 PUSH2 0x4DB6 JUMP JUMPDEST PUSH2 0x40AA PUSH1 0x24 PUSH1 0xC0 DUP6 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x4D55 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH2 0x40C0 PUSH1 0x44 PUSH1 0xC0 DUP7 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x4D55 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 DUP6 ADD MSTORE PUSH2 0x40DA PUSH1 0x64 PUSH1 0xC0 DUP8 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x4D55 JUMP JUMPDEST PUSH1 0x40 DUP6 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x4 CALLDATALOAD PUSH1 0xC0 DUP8 MUL ADD PUSH1 0x84 DUP2 ADD CALLDATALOAD PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0xA4 DUP2 ADD CALLDATALOAD PUSH1 0x80 DUP8 ADD MSTORE PUSH1 0xC4 ADD CALLDATALOAD PUSH1 0xA0 DUP7 ADD MSTORE DUP4 ADD MLOAD DUP4 MLOAD PUSH1 0x20 SWAP1 SWAP5 ADD MLOAD PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EXTCODESIZE ISZERO PUSH2 0x46E JUMPI PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 PUSH1 0xE4 SWAP5 DUP11 SWAP9 DUP5 SWAP9 PUSH1 0xC4 PUSH1 0xC0 PUSH1 0x40 MLOAD SWAP13 DUP14 SWAP12 DUP13 SWAP11 PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP13 MSTORE AND PUSH1 0x4 DUP12 ADD MSTORE ADDRESS PUSH1 0x24 DUP12 ADD MSTORE PUSH1 0x84 DUP3 DUP3 MUL PUSH1 0x4 CALLDATALOAD ADD ADD CALLDATALOAD PUSH1 0x44 DUP12 ADD MSTORE MUL PUSH1 0x4 CALLDATALOAD ADD ADD CALLDATALOAD PUSH1 0x64 DUP9 ADD MSTORE PUSH1 0x84 DUP8 ADD MSTORE PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xC4 DUP6 ADD MSTORE AND GAS CALL SWAP1 DUP2 PUSH2 0x4274 JUMPI JUMPDEST POP PUSH2 0x426B JUMPI PUSH2 0x41B9 PUSH2 0x5B23 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 MLOAD AND SWAP1 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP4 ADD MLOAD AND PUSH1 0x44 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP3 PUSH2 0x4236 JUMPI JUMPDEST POP PUSH1 0x60 ADD MLOAD SUB PUSH2 0x4231 JUMPI POP PUSH1 0x1 SWAP1 JUMPDEST ADD PUSH2 0x3D77 JUMP JUMPDEST PUSH2 0x6AB9 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x4263 JUMPI JUMPDEST DUP2 PUSH2 0x4252 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x46E JUMPI MLOAD SWAP1 PUSH1 0x60 PUSH2 0x421C JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x4245 JUMP JUMPDEST POP PUSH1 0x1 SWAP1 PUSH2 0x422B JUMP JUMPDEST PUSH2 0x427D SWAP1 PUSH2 0x4D85 JUMP JUMPDEST DUP10 PUSH2 0x41AC JUMP JUMPDEST PUSH32 0xAAAD13F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH2 0x42B9 CALLDATASIZE PUSH2 0x509C JUMP JUMPDEST SWAP1 PUSH2 0x42C7 SWAP1 SWAP5 SWAP4 SWAP3 SWAP5 PUSH2 0x6169 JUMP JUMPDEST SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 DUP2 PUSH1 0x40 MLOAD SWAP7 PUSH2 0x42E0 DUP9 PUSH2 0x4D99 JUMP JUMPDEST CALLER DUP9 MSTORE DUP2 PUSH1 0x20 SWAP11 DUP12 DUP11 ADD PUSH1 0x1 SWAP1 MSTORE AND PUSH1 0x40 DUP10 ADD MSTORE AND PUSH1 0x60 DUP8 ADD MSTORE AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP4 ADD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 MSTORE PUSH1 0xE0 DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 MSTORE PUSH2 0x100 DUP4 ADD PUSH0 SWAP1 MSTORE PUSH2 0x120 DUP4 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP3 DUP6 DUP3 ADD PUSH32 0xBE5AE84100000000000000000000000000000000000000000000000000000000 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD SWAP1 PUSH2 0x3228 SWAP2 PUSH2 0x5A7E JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH2 0x43DE PUSH2 0x13C3 CALLDATASIZE PUSH2 0x504A JUMP JUMPDEST SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 PUSH32 0x0 AND SWAP4 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND SWAP4 DUP5 PUSH1 0x4 DUP6 ADD MSTORE PUSH0 DUP5 PUSH1 0x24 DUP2 DUP5 GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x463 JUMPI PUSH2 0x14CC PUSH0 SWAP6 SWAP5 PUSH2 0x44D1 SWAP5 PUSH2 0x446A DUP9 SWAP8 PUSH2 0x51A SWAP6 DUP10 SWAP2 PUSH2 0x44F4 JUMPI POP MLOAD PUSH2 0x5981 JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x4478 DUP5 PUSH2 0x4D69 JUMP JUMPDEST ADDRESS DUP5 MSTORE PUSH1 0x20 SWAP11 DUP12 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE DUP7 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xB24BD57100000000000000000000000000000000000000000000000000000000 DUP11 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x59CB JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0x2EDA SWAP2 PUSH0 SWAP2 PUSH2 0x2EF6 JUMPI POP DUP3 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x5A29 JUMP JUMPDEST PUSH2 0x4508 SWAP2 POP RETURNDATASIZE DUP1 DUP12 DUP4 RETURNDATACOPY PUSH2 0x15C3 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP13 PUSH2 0x26C8 JUMP JUMPDEST PUSH0 PUSH2 0x51A DUP2 PUSH2 0x30C7 PUSH2 0x1A4D PUSH2 0x4522 CALLDATASIZE PUSH2 0x4F92 JUMP JUMPDEST SWAP1 PUSH2 0x4533 SWAP9 SWAP5 SWAP3 SWAP9 SWAP6 SWAP4 SWAP6 CALLER PUSH2 0x6169 JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x454B DUP8 PUSH2 0x4D69 JUMP JUMPDEST CALLER DUP8 MSTORE AND PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x4 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x5B34379100000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x586E JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x45BE PUSH2 0x61AB JUMP JUMPDEST PUSH2 0x45FD PUSH0 PUSH2 0x45CA PUSH2 0x57B5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x5B34379100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x586E JUMP JUMPDEST SUB DUP2 DUP4 ADDRESS GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0x4632 JUMPI PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH2 0x134D SWAP1 RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x454 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x4659 PUSH2 0x4CFD JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x46E JUMPI PUSH0 PUSH2 0x51A PUSH2 0x46C0 PUSH2 0x4683 PUSH2 0x46FA SWAP5 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4E93 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH1 0x20 SWAP8 PUSH32 0x82CD54FB00000000000000000000000000000000000000000000000000000000 DUP10 DUP6 ADD MSTORE PUSH1 0x24 CALLDATALOAD SWAP1 CALLER SWAP1 PUSH1 0x24 DUP7 ADD PUSH2 0x56FF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP7 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0x1272 SWAP2 PUSH0 SWAP2 PUSH2 0x4749 JUMPI JUMPDEST POP DUP3 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x578F JUMP JUMPDEST PUSH2 0x475D SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x602 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP4 PUSH2 0x473A JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH2 0x4771 CALLDATASIZE PUSH2 0x4F2D JUMP JUMPDEST PUSH2 0x4779 PUSH2 0x61AB JUMP JUMPDEST PUSH2 0x4781 PUSH2 0x61D8 JUMP JUMPDEST PUSH32 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x47B8 PUSH1 0x20 DUP5 ADD PUSH2 0x559F JUMP JUMPDEST SWAP3 PUSH2 0x47C2 DUP2 PUSH2 0x559F JUMP JUMPDEST SWAP4 PUSH1 0x40 DUP3 ADD SWAP5 PUSH2 0x47D2 DUP7 DUP5 PUSH2 0x55B3 JUMP JUMPDEST SWAP1 SWAP3 PUSH2 0x47E1 PUSH1 0x60 DUP7 ADD DUP7 PUSH2 0x55B3 JUMP JUMPDEST DUP4 PUSH2 0x47F2 PUSH1 0xC0 DUP10 SWAP9 SWAP5 SWAP9 ADD DUP10 PUSH2 0x5607 JUMP JUMPDEST SWAP6 SWAP1 SWAP5 PUSH1 0x40 MLOAD SWAP12 DUP13 SWAP9 PUSH32 0xBA8A2BE000000000000000000000000000000000000000000000000000000000 DUP11 MSTORE DUP2 PUSH1 0xC4 DUP12 ADD SWAP4 AND PUSH1 0x4 DUP12 ADD MSTORE AND PUSH1 0x24 DUP10 ADD MSTORE PUSH1 0xC0 PUSH1 0x44 DUP10 ADD MSTORE MSTORE PUSH1 0xE4 DUP7 ADD SWAP3 SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x4B2C JUMPI POP POP POP SWAP3 PUSH2 0x4884 SWAP3 PUSH2 0x486B PUSH1 0x20 SWAP8 SWAP4 DUP8 SWAP7 PUSH1 0x3 NOT SWAP6 DUP7 DUP10 DUP5 SUB ADD PUSH1 0x64 DUP11 ADD MSTORE PUSH2 0x5658 JUMP JUMPDEST SWAP3 PUSH1 0x80 DUP10 ADD CALLDATALOAD PUSH1 0x84 DUP8 ADD MSTORE DUP6 DUP5 SUB ADD PUSH1 0xA4 DUP7 ADD MSTORE PUSH2 0x5695 JUMP JUMPDEST SUB DUP2 PUSH0 DUP7 DUP11 AND GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP4 PUSH2 0x4AF8 JUMPI JUMPDEST POP SWAP2 SWAP3 PUSH1 0xA0 DUP4 ADD SWAP3 SWAP1 PUSH0 JUMPDEST PUSH2 0x48AF DUP3 DUP5 PUSH2 0x55B3 JUMP JUMPDEST SWAP1 POP DUP2 LT ISZERO PUSH2 0x4ABE JUMPI PUSH2 0x48D4 PUSH2 0x48CF DUP3 PUSH2 0x48C9 DUP6 DUP8 PUSH2 0x55B3 JUMP JUMPDEST SWAP1 PUSH2 0x56B5 JUMP JUMPDEST PUSH2 0x559F JUMP JUMPDEST PUSH2 0x48E5 DUP3 PUSH2 0x48C9 PUSH1 0x60 DUP8 ADD DUP8 PUSH2 0x55B3 JUMP JUMPDEST CALLDATALOAD SWAP1 DUP2 ISZERO PUSH2 0x4AB4 JUMPI PUSH2 0x48F6 DUP8 PUSH2 0x56F2 JUMP JUMPDEST DUP1 PUSH2 0x4A87 JUMPI JUMPDEST ISZERO PUSH2 0x4936 JUMPI POP SWAP1 PUSH2 0x4930 PUSH1 0x1 SWAP3 DUP10 PUSH32 0x0 PUSH2 0x627A JUMP JUMPDEST ADD PUSH2 0x48A5 JUMP JUMPDEST DUP6 PUSH32 0x0 AND SWAP2 PUSH2 0x4963 DUP7 PUSH2 0x559F JUMP JUMPDEST PUSH2 0x496C DUP3 PUSH2 0x6236 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x46E JUMPI PUSH1 0x40 MLOAD PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE DUP10 DUP14 AND DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE DUP4 DUP10 AND SWAP1 SWAP2 AND PUSH1 0x64 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x84 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH2 0x4A31 SWAP4 PUSH1 0x20 SWAP4 PUSH2 0x4A78 JUMPI POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP3 DUP4 SWAP3 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB DUP2 PUSH0 DUP10 DUP14 AND GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0x4A4D JUMPI JUMPDEST POP PUSH1 0x1 SWAP1 PUSH2 0x4930 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x4A71 JUMPI JUMPDEST PUSH2 0x4A63 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x46E JUMPI DUP8 PUSH2 0x4A44 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x4A59 JUMP JUMPDEST PUSH2 0x4A81 SWAP1 PUSH2 0x4D85 JUMP JUMPDEST DUP12 PUSH2 0x2A52 JUMP JUMPDEST POP DUP6 PUSH32 0x0 AND DUP7 DUP3 AND EQ PUSH2 0x48FC JUMP JUMPDEST POP POP PUSH1 0x1 SWAP1 PUSH2 0x4930 JUMP JUMPDEST PUSH1 0x20 DUP7 PUSH2 0x4ACD PUSH2 0x1D41 DUP7 PUSH2 0x559F JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP3 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x4B24 JUMPI JUMPDEST DUP2 PUSH2 0x4B14 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x46E JUMPI MLOAD SWAP2 DUP6 PUSH2 0x489A JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x4B07 JUMP JUMPDEST SWAP2 SWAP5 SWAP6 SWAP7 POP SWAP2 SWAP3 PUSH1 0x20 DUP1 PUSH1 0x1 SWAP3 DUP13 PUSH2 0x4B43 DUP10 PUSH2 0x4D55 JUMP JUMPDEST AND DUP2 MSTORE ADD SWAP6 ADD SWAP2 ADD SWAP2 DUP11 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 PUSH2 0x4840 JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x4B6B PUSH2 0x4CFD JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP4 GT PUSH2 0x46E JUMPI CALLDATASIZE PUSH1 0x23 DUP5 ADD SLT ISZERO PUSH2 0x46E JUMPI DUP3 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH2 0x4B99 DUP3 PUSH2 0x4E2D JUMP JUMPDEST SWAP2 PUSH2 0x4BA7 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x4E0A JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 SWAP5 PUSH1 0x24 DUP7 DUP6 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x46E JUMPI PUSH1 0x24 DUP8 SWAP3 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x4CE6 JUMPI POP POP POP POP PUSH1 0x44 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x46E JUMPI PUSH2 0x4BEB SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4E93 JUMP JUMPDEST SWAP3 PUSH2 0x4BF4 PUSH2 0x4EB1 JUMP JUMPDEST SWAP3 PUSH1 0xA4 CALLDATALOAD SWAP3 DUP4 GT PUSH2 0x46E JUMPI PUSH2 0x51A PUSH2 0x6B6 PUSH2 0x4C96 SWAP4 PUSH0 SWAP7 PUSH2 0x4C1A DUP9 SWAP8 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4F12 JUMP JUMPDEST SWAP1 PUSH2 0x4C24 CALLER PUSH2 0x6169 JUMP JUMPDEST SWAP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x4C3C DUP8 PUSH2 0x4D69 JUMP JUMPDEST CALLER DUP8 MSTORE AND DUP14 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x86FAD6600000000000000000000000000000000000000000000000000000000 DUP12 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x5480 JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP2 PUSH2 0x32CD JUMPI POP DUP3 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x46E JUMPI DUP3 ADD MLOAD SWAP1 PUSH2 0x5C6 JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP1 SWAP2 PUSH2 0x4CF2 DUP5 PUSH2 0x4D55 JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x4BC8 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x46E JUMPI JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x46E JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x46E JUMPI JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x46E JUMPI JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x46E JUMPI JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF19 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xF19 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH2 0x140 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF19 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF19 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x20 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF19 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF19 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF19 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xF19 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 SWAP2 PUSH2 0x4E50 DUP3 PUSH2 0x4E2D JUMP JUMPDEST SWAP2 PUSH2 0x4E5E PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x4E0A JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE PUSH1 0x20 DUP1 SWAP5 ADD SWAP2 PUSH1 0x5 SHL DUP2 ADD SWAP3 DUP4 GT PUSH2 0x46E JUMPI SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x4E84 JUMPI POP POP POP POP JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x4E77 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x46E JUMPI DUP2 PUSH1 0x20 PUSH2 0x4EAE SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0x4E45 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x46E JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xF19 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH2 0x4EE8 DUP3 PUSH2 0x4EC0 JUMP JUMPDEST SWAP2 PUSH2 0x4EF6 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x4E0A JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0x46E JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x46E JUMPI DUP2 PUSH1 0x20 PUSH2 0x4EAE SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0x4EDC JUMP JUMPDEST PUSH1 0x3 NOT SWAP1 PUSH1 0x20 DUP3 DUP3 ADD SLT PUSH2 0x46E JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x46E JUMPI DUP3 PUSH1 0xE0 SWAP3 SUB ADD SLT PUSH2 0x46E JUMPI PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x4F7E JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x4F70 JUMP JUMPDEST SWAP1 PUSH1 0xA0 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x46E JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x24 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x46E JUMPI DUP2 PUSH2 0x4FD4 SWAP2 PUSH1 0x4 ADD PUSH2 0x4E93 JUMP JUMPDEST SWAP3 PUSH1 0x44 CALLDATALOAD SWAP3 PUSH1 0x64 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x46E JUMPI SWAP3 PUSH1 0x84 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x46E JUMPI PUSH2 0x4EAE SWAP2 PUSH1 0x4 ADD PUSH2 0x4F12 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH2 0x5037 PUSH2 0x4EAE SWAP5 SWAP3 PUSH1 0x60 DUP4 MSTORE PUSH1 0x60 DUP4 ADD SWAP1 PUSH2 0x4F5F JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x4FFC JUMP JUMPDEST PUSH1 0x80 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x46E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP3 PUSH1 0x24 CALLDATALOAD SWAP3 PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP2 PUSH1 0x64 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x46E JUMPI PUSH2 0x4EAE SWAP2 PUSH1 0x4 ADD PUSH2 0x4F12 JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x46E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 PUSH1 0x4 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP3 PUSH1 0x24 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP3 PUSH1 0x44 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP3 PUSH1 0x64 CALLDATALOAD SWAP3 PUSH1 0x84 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP2 PUSH1 0xA4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x46E JUMPI PUSH2 0x4EAE SWAP2 PUSH1 0x4 ADD PUSH2 0x4F12 JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x46E JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x46E JUMPI PUSH1 0x20 DUP1 DUP6 ADD SWAP5 DUP5 PUSH1 0x5 SHL ADD ADD GT PUSH2 0x46E JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x46E JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x46E JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x46E JUMPI JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD SWAP1 PUSH1 0x20 DUP4 MSTORE DUP4 MLOAD DUP1 SWAP3 MSTORE PUSH1 0x40 DUP4 ADD SWAP3 PUSH1 0x20 PUSH1 0x40 DUP5 PUSH1 0x5 SHL DUP4 ADD ADD SWAP6 ADD SWAP4 PUSH0 SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x519C JUMPI POP POP POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 DUP5 DUP1 PUSH2 0x51D8 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP7 PUSH1 0x1 SWAP7 SUB ADD DUP8 MSTORE DUP11 MLOAD PUSH2 0x4FFC JUMP JUMPDEST SWAP9 ADD SWAP4 ADD SWAP4 ADD SWAP2 SWAP5 SWAP4 SWAP3 SWAP1 PUSH2 0x518C JUMP JUMPDEST SWAP1 PUSH1 0xA0 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x46E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP3 PUSH1 0x24 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP3 PUSH1 0x44 CALLDATALOAD SWAP3 PUSH1 0x64 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP2 PUSH1 0x84 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x46E JUMPI PUSH2 0x4EAE SWAP2 PUSH1 0x4 ADD PUSH2 0x4F12 JUMP JUMPDEST PUSH1 0x3 NOT SWAP1 PUSH1 0x20 DUP3 DUP3 ADD SLT PUSH2 0x46E JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x46E JUMPI DUP3 PUSH1 0x80 SWAP3 SUB ADD SLT PUSH2 0x46E JUMPI PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST SWAP1 SWAP3 PUSH2 0x5292 PUSH2 0x4EAE SWAP6 SWAP4 SWAP5 PUSH1 0x80 DUP5 MSTORE PUSH1 0x80 DUP5 ADD SWAP1 PUSH2 0x4F5F JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x4F5F JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x46E JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x44 CALLDATALOAD DUP4 DUP2 GT PUSH2 0x46E JUMPI DUP3 PUSH2 0x52EF SWAP2 PUSH1 0x4 ADD PUSH2 0x4E93 JUMP JUMPDEST SWAP3 PUSH1 0x64 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x46E JUMPI SWAP3 PUSH1 0x84 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x46E JUMPI PUSH2 0x4EAE SWAP2 PUSH1 0x4 ADD PUSH2 0x4F12 JUMP JUMPDEST PUSH1 0x3 NOT SWAP1 PUSH1 0x20 DUP3 DUP3 ADD SLT PUSH2 0x46E JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x46E JUMPI DUP3 PUSH2 0x140 SWAP3 SUB ADD SLT PUSH2 0x46E JUMPI PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST PUSH2 0x100 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x46E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP3 PUSH1 0x24 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP3 PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP2 PUSH1 0x64 CALLDATALOAD SWAP2 PUSH1 0x84 CALLDATALOAD SWAP2 PUSH1 0xA4 CALLDATALOAD SWAP2 PUSH1 0xC4 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x46E JUMPI SWAP2 PUSH1 0xE4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x46E JUMPI PUSH2 0x53BB SWAP2 PUSH1 0x4 ADD PUSH2 0x5139 JUMP JUMPDEST SWAP1 SWAP2 JUMP JUMPDEST SWAP2 PUSH2 0x53DC SWAP1 PUSH2 0x4EAE SWAP5 SWAP3 DUP5 MSTORE PUSH1 0x60 PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD SWAP1 PUSH2 0x4F5F JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x4FFC JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x46E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP3 PUSH1 0x24 CALLDATALOAD SWAP3 PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP2 PUSH1 0x64 CALLDATALOAD SWAP2 PUSH1 0x84 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x46E JUMPI SWAP2 PUSH1 0xA4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x46E JUMPI PUSH2 0x4EAE SWAP2 PUSH1 0x4 ADD PUSH2 0x4F12 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x546C JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x545E JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x20 SWAP3 DUP4 DUP2 MSTORE PUSH2 0x100 DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 DUP5 MLOAD AND DUP2 DUP4 ADD MSTORE DUP6 DUP2 DUP6 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD SWAP3 PUSH1 0xE0 PUSH1 0x60 DUP5 ADD MSTORE DUP4 MLOAD DUP1 SWAP2 MSTORE DUP2 PUSH2 0x120 DUP5 ADD SWAP5 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x551D JUMPI POP POP POP POP PUSH2 0x4EAE SWAP4 SWAP5 POP PUSH1 0xE0 PUSH1 0xC0 PUSH2 0x54F8 PUSH1 0x60 DUP7 ADD MLOAD SWAP5 PUSH1 0x1F NOT SWAP6 DUP7 DUP7 DUP4 SUB ADD PUSH1 0x80 DUP8 ADD MSTORE PUSH2 0x544D JUMP JUMPDEST SWAP5 PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD ISZERO ISZERO DUP3 DUP6 ADD MSTORE ADD MLOAD SWAP3 DUP3 DUP6 SUB ADD SWAP2 ADD MSTORE PUSH2 0x4FFC JUMP JUMPDEST DUP4 MLOAD DUP10 AND DUP7 MSTORE SWAP5 DUP2 ADD SWAP5 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x54C7 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x46E JUMPI DUP1 MLOAD SWAP1 PUSH2 0x554A DUP3 PUSH2 0x4EC0 JUMP JUMPDEST SWAP3 PUSH2 0x5558 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x4E0A JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x46E JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x46E JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x46E JUMPI PUSH2 0x4EAE SWAP3 ADD PUSH2 0x5533 JUMP JUMPDEST CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP1 JUMP JUMPDEST SWAP1 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP2 CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x46E JUMPI ADD DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x46E JUMPI PUSH1 0x20 ADD SWAP2 DUP2 PUSH1 0x5 SHL CALLDATASIZE SUB DUP4 SGT PUSH2 0x46E JUMPI JUMP JUMPDEST SWAP1 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP2 CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x46E JUMPI ADD DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x46E JUMPI PUSH1 0x20 ADD SWAP2 DUP2 CALLDATASIZE SUB DUP4 SGT PUSH2 0x46E JUMPI JUMP JUMPDEST SWAP1 SWAP2 DUP3 DUP2 MSTORE PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x46E JUMPI PUSH1 0x20 SWAP3 PUSH1 0x5 SHL DUP1 SWAP3 DUP5 DUP4 ADD CALLDATACOPY ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x1F DUP3 PUSH1 0x20 SWAP5 SWAP4 PUSH1 0x1F NOT SWAP4 DUP2 DUP7 MSTORE DUP7 DUP7 ADD CALLDATACOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x56C5 JUMPI PUSH1 0x5 SHL ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x46E JUMPI SWAP1 JUMP JUMPDEST SWAP1 SWAP3 PUSH2 0x4EAE SWAP5 SWAP4 PUSH1 0x80 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP5 MSTORE AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE DUP2 PUSH1 0x60 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x4F5F JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x46E JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x5749 DUP2 PUSH2 0x4E2D JUMP JUMPDEST SWAP4 PUSH2 0x5757 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x4E0A JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x46E JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x5780 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x5772 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x46E JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x46E JUMPI PUSH2 0x4EAE SWAP3 ADD PUSH2 0x572E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x57C2 DUP3 PUSH2 0x4D69 JUMP JUMPDEST PUSH1 0x60 PUSH1 0xC0 DUP4 PUSH0 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE PUSH0 DUP4 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE PUSH0 PUSH1 0xA0 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x60 DUP3 DUP5 SUB SLT PUSH2 0x46E JUMPI DUP2 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x46E JUMPI DUP5 PUSH2 0x5817 SWAP2 DUP4 ADD PUSH2 0x572E JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP3 ADD MLOAD SWAP4 PUSH1 0x40 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x46E JUMPI PUSH2 0x4EAE SWAP3 ADD PUSH2 0x5533 JUMP JUMPDEST SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x5841 JUMPI MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x4EAE SWAP2 PUSH1 0x20 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xC0 PUSH2 0x58AF PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0xE0 PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x100 DUP5 ADD SWAP1 PUSH2 0x544D JUMP JUMPDEST SWAP3 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x58CC PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0xA0 DUP6 ADD SWAP1 PUSH2 0x5834 JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD MLOAD ISZERO ISZERO DUP3 DUP5 ADD MSTORE ADD MLOAD SWAP1 PUSH1 0xE0 PUSH1 0x1F NOT DUP3 DUP6 SUB ADD SWAP2 ADD MSTORE PUSH2 0x4FFC JUMP JUMPDEST PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x5841 JUMPI MSTORE JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x46E JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x46E JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x46E JUMPI DUP3 MLOAD PUSH2 0x592D DUP2 PUSH2 0x4E2D JUMP JUMPDEST SWAP4 PUSH2 0x593B PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x4E0A JUMP JUMPDEST DUP2 DUP6 MSTORE DUP4 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x46E JUMPI DUP4 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x5962 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x5954 JUMP JUMPDEST SWAP1 PUSH2 0x598B DUP3 PUSH2 0x4E2D JUMP JUMPDEST PUSH2 0x5998 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x4E0A JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x59A8 DUP3 SWAP5 PUSH2 0x4E2D JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x5841 JUMPI MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x5841 JUMPI MSTORE JUMP JUMPDEST SWAP1 PUSH2 0x4EAE SWAP2 PUSH1 0x20 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xC0 PUSH2 0x5A0C PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0xE0 PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x100 DUP5 ADD SWAP1 PUSH2 0x544D JUMP JUMPDEST SWAP3 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x58CC PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0xA0 DUP6 ADD SWAP1 PUSH2 0x59BE JUMP JUMPDEST SWAP2 PUSH1 0x60 DUP4 DUP4 SUB SLT PUSH2 0x46E JUMPI DUP3 MLOAD SWAP3 PUSH1 0x20 DUP2 ADD MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP2 GT PUSH2 0x46E JUMPI DUP2 PUSH2 0x5A5A SWAP2 DUP5 ADD PUSH2 0x572E JUMP JUMPDEST SWAP4 PUSH1 0x40 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x46E JUMPI PUSH2 0x4EAE SWAP3 ADD PUSH2 0x5533 JUMP JUMPDEST SWAP1 PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x5841 JUMPI MSTORE JUMP JUMPDEST PUSH2 0x160 PUSH2 0x4EAE SWAP3 PUSH1 0x20 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND PUSH1 0x20 DUP6 ADD MSTORE PUSH2 0x5AAC PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP7 ADD SWAP1 PUSH2 0x5A71 JUMP JUMPDEST DUP1 PUSH1 0x40 DUP4 ADD MLOAD AND PUSH1 0x60 DUP6 ADD MSTORE DUP1 PUSH1 0x60 DUP4 ADD MLOAD AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH2 0x100 SWAP1 DUP2 DUP6 ADD MSTORE DUP2 ADD MLOAD SWAP1 PUSH2 0x120 SWAP2 ISZERO ISZERO DUP3 DUP6 ADD MSTORE ADD MLOAD SWAP2 PUSH2 0x140 DUP1 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x56C5 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x5B4D JUMPI RETURNDATASIZE SWAP1 PUSH2 0x5B34 DUP3 PUSH2 0x4EC0 JUMP JUMPDEST SWAP2 PUSH2 0x5B42 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x4E0A JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x22717DB200000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x4 DUP2 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x5BB2 DUP3 PUSH2 0x4DEE JUMP JUMPDEST DUP1 EXTCODESIZE ISZERO PUSH2 0x46E JUMPI PUSH2 0x5BFE PUSH0 SWAP3 SWAP2 DUP4 SWAP3 PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x757D64B300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 PUSH2 0x5C91 JUMPI JUMPDEST POP PUSH2 0x5C32 JUMPI PUSH2 0x5C1E PUSH2 0x5C19 PUSH2 0x5B23 JUMP JUMPDEST PUSH2 0x65A0 JUMP JUMPDEST PUSH1 0x20 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x46E JUMPI PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E657870656374656420737563636573730000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH2 0x5C9A SWAP1 PUSH2 0x4D85 JUMP JUMPDEST PUSH0 PUSH2 0x5C09 JUMP JUMPDEST SWAP1 PUSH2 0x4EAE SWAP2 PUSH1 0x20 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xA0 PUSH2 0x5CE0 PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0xC0 PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0xE0 DUP5 ADD SWAP1 PUSH2 0x544D JUMP JUMPDEST SWAP3 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x5CFC PUSH1 0x80 DUP3 ADD MLOAD DUP4 DUP6 ADD SWAP1 PUSH2 0x5834 JUMP JUMPDEST ADD MLOAD SWAP1 PUSH1 0xC0 PUSH1 0x1F NOT DUP3 DUP6 SUB ADD SWAP2 ADD MSTORE PUSH2 0x4FFC JUMP JUMPDEST SWAP1 PUSH2 0x4EAE SWAP2 PUSH1 0x20 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA0 PUSH2 0x5D5A PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0xC0 PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xE0 DUP5 ADD SWAP1 PUSH2 0x544D JUMP JUMPDEST SWAP3 PUSH2 0x5CFC PUSH1 0x80 DUP3 ADD MLOAD DUP4 DUP6 ADD SWAP1 PUSH2 0x59BE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x58307E4400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x4 DUP2 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x5BB2 DUP3 PUSH2 0x4DEE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x5DD9 DUP3 PUSH2 0x4D99 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x120 DUP4 PUSH0 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD MSTORE PUSH0 PUSH1 0x40 DUP3 ADD MSTORE PUSH0 DUP4 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE PUSH0 PUSH1 0xA0 DUP3 ADD MSTORE PUSH0 PUSH1 0xC0 DUP3 ADD MSTORE PUSH0 PUSH1 0xE0 DUP3 ADD MSTORE PUSH0 PUSH2 0x100 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x45D132FE00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x4 DUP2 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x5BB2 DUP3 PUSH2 0x4DEE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB3B0A7A700000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x4 DUP2 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x5BB2 DUP3 PUSH2 0x4DEE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD3A5152A00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x4 DUP2 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x5BB2 DUP3 PUSH2 0x4DEE JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x5F41 CALLER PUSH2 0x6169 JUMP JUMPDEST SWAP1 PUSH32 0x0 SWAP4 DUP5 TLOAD PUSH2 0x604C JUMPI PUSH1 0x1 SWAP1 PUSH1 0x1 DUP7 TSTORE PUSH2 0x5F7A DUP4 PUSH2 0x4E2D JUMP JUMPDEST SWAP3 PUSH2 0x5F88 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x4E0A JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x1F NOT PUSH2 0x5F97 DUP3 PUSH2 0x4E2D JUMP JUMPDEST ADD PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x603B JUMPI POP POP PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x5FF2 JUMPI POP POP POP POP SWAP1 PUSH0 PUSH2 0x5FE7 SWAP3 SWAP5 TSTORE PUSH32 0x0 DUP1 TLOAD SWAP2 PUSH2 0x5FE9 JUMPI JUMPDEST POP PUSH2 0x6470 JUMP JUMPDEST JUMP JUMPDEST PUSH0 SWAP1 TSTORE PUSH0 PUSH2 0x5FE1 JUMP JUMPDEST DUP1 PUSH2 0x601F PUSH0 DUP1 PUSH2 0x6007 PUSH2 0x3AC DUP10 SWAP7 DUP9 DUP11 PUSH2 0x6074 JUMP JUMPDEST PUSH1 0x20 DUP2 MLOAD SWAP2 ADD ADDRESS GAS DELEGATECALL PUSH2 0x6018 PUSH2 0x5B23 JUMP JUMPDEST SWAP1 ADDRESS PUSH2 0x6AC8 JUMP JUMPDEST PUSH2 0x6029 DUP3 DUP9 PUSH2 0x5B0F JUMP JUMPDEST MSTORE PUSH2 0x6034 DUP2 DUP8 PUSH2 0x5B0F JUMP JUMPDEST POP ADD PUSH2 0x5FA5 JUMP JUMPDEST DUP1 PUSH1 0x60 PUSH1 0x20 DUP1 SWAP4 DUP10 ADD ADD MSTORE ADD PUSH2 0x5F9A JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP3 LT ISZERO PUSH2 0x56C5 JUMPI PUSH2 0x53BB SWAP2 PUSH1 0x5 SHL DUP2 ADD SWAP1 PUSH2 0x5607 JUMP JUMPDEST SWAP2 SWAP4 PUSH2 0x615B SWAP6 PUSH2 0x5BB2 SWAP5 PUSH2 0x6120 SWAP4 SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP1 PUSH32 0x0 AND SWAP10 DUP2 PUSH1 0x40 MLOAD SWAP10 PUSH2 0x60D6 DUP12 PUSH2 0x4D99 JUMP JUMPDEST CALLER DUP12 MSTORE PUSH0 PUSH1 0x20 DUP13 ADD MSTORE AND PUSH1 0x40 DUP11 ADD MSTORE AND PUSH1 0x60 DUP9 ADD MSTORE AND PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0xA0 DUP6 ADD MSTORE PUSH0 PUSH1 0xC0 DUP6 ADD MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xE0 DUP6 ADD MSTORE PUSH0 PUSH2 0x100 DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x4EDC JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP2 PUSH32 0xBE5AE84100000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x5A7E JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP5 MSTORE DUP4 PUSH2 0x4E0A JUMP JUMPDEST SWAP1 PUSH0 SWAP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 TLOAD AND ISZERO PUSH2 0x61A1 JUMPI POP POP JUMP JUMPDEST SWAP1 SWAP2 SWAP3 POP TSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x604C JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x620A JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP2 GT PUSH2 0x624A JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0xA0 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 DUP2 SELFBALANCE LT PUSH2 0x6448 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x46E JUMPI PUSH1 0x40 SWAP2 DUP3 MLOAD SWAP2 PUSH32 0xD0E30DB000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH0 SWAP3 PUSH0 DUP2 PUSH1 0x4 DUP2 DUP10 DUP12 GAS CALL DUP1 ISZERO PUSH2 0x643E JUMPI PUSH2 0x642B JUMPI JUMPDEST POP AND SWAP3 DUP3 MLOAD SWAP5 PUSH1 0x20 SWAP6 DUP7 DUP2 ADD SWAP1 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH1 0x24 DUP3 ADD MSTORE DUP4 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH1 0x80 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF19 JUMPI DUP7 MSTORE MLOAD PUSH2 0x634B SWAP2 DUP6 SWAP2 DUP3 SWAP2 DUP3 DUP7 GAS CALL PUSH2 0x6344 PUSH2 0x5B23 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x6AC8 JUMP JUMPDEST DUP1 MLOAD DUP8 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x6406 JUMPI JUMPDEST POP POP SWAP1 POP PUSH2 0x63DB JUMPI SWAP1 PUSH1 0x44 DUP7 SWAP3 DUP5 DUP7 MLOAD SWAP8 DUP9 SWAP5 DUP6 SWAP4 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x63D1 JUMPI POP POP PUSH2 0x63AD JUMPI POP POP JUMP JUMPDEST DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x63CA JUMPI JUMPDEST PUSH2 0x63C0 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x46E JUMPI JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x63B6 JUMP JUMPDEST MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 DUP3 REVERT JUMPDEST DUP4 DUP1 SWAP3 SWAP4 POP ADD SUB SLT PUSH2 0x6427 JUMPI DUP7 ADD MLOAD DUP1 ISZERO SWAP1 DUP2 ISZERO SUB PUSH2 0x6427 JUMPI DUP1 DUP8 PUSH0 PUSH2 0x6358 JUMP JUMPDEST DUP4 DUP1 REVERT JUMPDEST PUSH2 0x6436 SWAP2 SWAP4 POP PUSH2 0x4D85 JUMP JUMPDEST PUSH0 SWAP2 PUSH0 PUSH2 0x62D6 JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0xA01A9DF600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SELFBALANCE DUP1 ISZERO PUSH2 0x64AF JUMPI PUSH32 0x0 TLOAD PUSH2 0x64AF JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x5FE7 SWAP3 AND PUSH2 0x6A3D JUMP JUMPDEST POP POP JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH6 0xFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x46E JUMPI JUMP JUMPDEST SWAP2 PUSH1 0x44 SWAP3 SWAP4 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 SWAP5 DUP6 SWAP3 DUP3 DUP1 DUP6 MLOAD SWAP10 DUP11 SWAP6 DUP7 SWAP5 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x4 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x6596 JUMPI PUSH0 SWAP4 PUSH0 SWAP6 PUSH2 0x655F JUMPI JUMPDEST POP POP PUSH2 0x655C PUSH2 0x6555 DUP6 SWAP5 PUSH2 0x5981 JUMP JUMPDEST SWAP5 DUP6 PUSH2 0x5B0F JUMP JUMPDEST MSTORE JUMP JUMPDEST DUP1 SWAP3 SWAP6 POP DUP2 SWAP5 POP RETURNDATASIZE DUP4 GT PUSH2 0x658F JUMPI JUMPDEST PUSH2 0x6578 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x46E JUMPI PUSH1 0x20 DUP3 MLOAD SWAP3 ADD MLOAD SWAP3 PUSH0 DUP1 PUSH2 0x6546 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x656E JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 MLOAD LT PUSH2 0x6614 JUMPI PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP4 ADD MLOAD AND SUB PUSH2 0x4231 JUMPI DUP1 PUSH1 0x24 PUSH1 0x20 PUSH2 0x4EAE SWAP4 MLOAD PUSH1 0x3 NOT DUP2 ADD PUSH1 0x4 DUP6 ADD MSTORE DUP4 ADD ADD SWAP2 ADD PUSH2 0x5579 JUMP JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0xE0 DUP2 ADD CALLDATALOAD TIMESTAMP GT PUSH2 0x67EC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x2 DUP4 LT ISZERO PUSH2 0x46E JUMPI PUSH1 0x40 SWAP3 PUSH2 0x666C DUP3 DUP6 ADD PUSH2 0x559F JUMP JUMPDEST SWAP3 DUP1 PUSH1 0x60 SWAP5 DUP6 SWAP4 DUP5 DUP7 ADD PUSH2 0x667F SWAP1 PUSH2 0x559F JUMP JUMPDEST SWAP6 PUSH2 0x668C PUSH1 0x80 DUP3 ADD PUSH2 0x559F JUMP JUMPDEST SWAP1 DUP5 PUSH2 0x669C PUSH2 0x120 DUP4 ADD DUP4 PUSH2 0x5607 JUMP JUMPDEST SWAP2 SWAP1 DUP13 MLOAD SWAP6 PUSH2 0x66AA DUP8 PUSH2 0x4D69 JUMP JUMPDEST DUP7 MSTORE DUP2 PUSH1 0x20 DUP8 ADD SWAP8 AND DUP8 MSTORE DUP2 DUP14 DUP8 ADD SWAP12 AND DUP12 MSTORE DUP2 DUP11 DUP8 ADD SWAP6 AND DUP6 MSTORE PUSH1 0x80 DUP7 ADD SWAP3 PUSH1 0xA0 DUP6 ADD CALLDATALOAD DUP5 MSTORE PUSH1 0xA0 DUP8 ADD SWAP5 PUSH1 0xC0 ADD CALLDATALOAD DUP6 MSTORE CALLDATASIZE SWAP1 PUSH2 0x66E7 SWAP3 PUSH2 0x4EDC JUMP JUMPDEST SWAP4 PUSH1 0xC0 DUP7 ADD SWAP5 DUP6 MSTORE DUP2 DUP14 MLOAD SWAP12 DUP13 SWAP11 DUP12 SWAP10 DUP11 SWAP10 PUSH32 0x2BFB780C00000000000000000000000000000000000000000000000000000000 DUP12 MSTORE PUSH1 0x4 DUP12 ADD PUSH1 0x20 SWAP1 MSTORE PUSH1 0x24 DUP12 ADD SWAP1 MLOAD SWAP1 PUSH2 0x6734 SWAP2 PUSH2 0x5A71 JUMP JUMPDEST MLOAD AND PUSH1 0x44 DUP10 ADD MSTORE MLOAD AND PUSH1 0x64 DUP8 ADD MSTORE MLOAD AND PUSH1 0x84 DUP6 ADD MSTORE MLOAD PUSH1 0xA4 DUP5 ADD MSTORE MLOAD PUSH1 0xC4 DUP4 ADD MSTORE MLOAD PUSH1 0xE4 DUP3 ADD PUSH1 0xE0 SWAP1 MSTORE PUSH2 0x104 DUP3 ADD PUSH2 0x676C SWAP2 PUSH2 0x4FFC JUMP JUMPDEST SUB SWAP2 PUSH32 0x0 AND GAS SWAP1 PUSH0 SWAP2 CALL SWAP1 DUP2 ISZERO PUSH2 0x6596 JUMPI PUSH0 SWAP4 PUSH0 SWAP4 PUSH0 SWAP4 PUSH2 0x67AF JUMPI JUMPDEST POP POP POP SWAP1 SWAP2 SWAP3 JUMP JUMPDEST SWAP3 POP SWAP3 POP DUP1 SWAP4 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x67E5 JUMPI JUMPDEST PUSH2 0x67C9 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x46E JUMPI DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD SWAP2 SWAP1 SWAP3 ADD MLOAD PUSH0 DUP1 DUP1 PUSH2 0x67A7 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x67BF JUMP JUMPDEST PUSH32 0xE08B8AF000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP3 DUP3 ISZERO PUSH2 0x6940 JUMPI DUP1 PUSH2 0x690B JUMPI JUMPDEST ISZERO PUSH2 0x6872 JUMPI POP PUSH2 0x5FE7 SWAP2 PUSH32 0x0 PUSH32 0x0 PUSH2 0x6946 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP1 EXTCODESIZE ISZERO PUSH2 0x46E JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP4 SWAP1 SWAP3 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE PUSH0 SWAP1 DUP3 SWAP1 PUSH1 0x64 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0x6902 JUMPI POP JUMP JUMPDEST PUSH2 0x5FE7 SWAP1 PUSH2 0x4D85 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP1 DUP3 AND EQ PUSH2 0x6821 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST SWAP4 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP1 EXTCODESIZE ISZERO PUSH2 0x46E JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 DUP9 DUP2 SWAP13 AND SWAP7 DUP8 PUSH1 0x4 DUP5 ADD MSTORE ADDRESS PUSH1 0x24 DUP5 ADD MSTORE DUP11 PUSH1 0x44 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0x6A2A JUMPI JUMPDEST POP DUP1 DUP7 SWAP2 EXTCODESIZE ISZERO PUSH2 0x6A26 JUMPI DUP2 SWAP1 PUSH1 0x24 PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x2E1A7D4D00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x6A1B JUMPI PUSH2 0x6A03 JUMPI JUMPDEST POP PUSH2 0x5FE7 SWAP4 SWAP5 POP AND PUSH2 0x6A3D JUMP JUMPDEST PUSH2 0x6A0D DUP7 SWAP2 PUSH2 0x4D85 JUMP JUMPDEST PUSH2 0x6A17 JUMPI DUP5 PUSH2 0x69F6 JUMP JUMPDEST DUP5 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP9 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST PUSH2 0x6A35 SWAP2 SWAP7 POP PUSH2 0x4D85 JUMP JUMPDEST PUSH0 SWAP5 PUSH0 PUSH2 0x69AB JUMP JUMPDEST DUP2 SELFBALANCE LT PUSH2 0x6A8D JUMPI PUSH0 DUP1 DUP1 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 SWAP5 AND GAS CALL PUSH2 0x6A5D PUSH2 0x5B23 JUMP JUMPDEST POP ISZERO PUSH2 0x6A65 JUMPI JUMP JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0xCD78605900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE ADDRESS PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x6614 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST SWAP1 PUSH2 0x6ADD JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x6A65 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x6B23 JUMPI JUMPDEST PUSH2 0x6AEE JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x6AE6 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4F 0xE2 BLOBBASEFEE PUSH26 0xFBAF5DA03FEDC54A46DF276F44033A70BBBE19D61DDFAEC46BD6 MOD OR PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"978:7807:91:-:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;978:7807:91;;;;1487:71:66;978:7807:91;;;;;:::i;:::-;;;;-1:-1:-1;;;978:7807:91;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;978:7807:91;;;;1487:71:66;:::i;:::-;;;409:14:72;;978:7807:91;;;-1:-1:-1;;;;;978:7807:91;;;;-1:-1:-1;978:7807:91;;;;;;;;;;;;;;-1:-1:-1;978:7807:91;;;;;;;;;;;-1:-1:-1;978:7807:91;;;;;;;;;;;;;;;2796:83:65;978:7807:91;;;;-1:-1:-1;978:7807:91;;;;;;;;;;;;;;;;;-1:-1:-1;978:7807:91;;;;;;;:::i;:::-;;;;-1:-1:-1;;;978:7807:91;;;;-1:-1:-1;;;978:7807:91;;;;;;:::i;:::-;;;;;;;2796:83:65;:::i;:::-;;;3976:12;;3998:18;;;;978:7807:91;;;;;;;1487:71:66;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;409:14:72;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2796:83:65;978:7807:91;;;;;;;;;;3976:12:65;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;978:7807:91;;;;;;;;;;;;-1:-1:-1;978:7807:91;;;-1:-1:-1;978:7807:91;;-1:-1:-1;978:7807:91;;;;;;;;;2796:83:65;978:7807:91;;;;;;;;;;;;;;-1:-1:-1;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;978:7807:91;;;-1:-1:-1;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;978:7807:91;;;;;;;;;;-1:-1:-1;978:7807:91;;;;;;;;-1:-1:-1;978:7807:91;;;;;-1:-1:-1;978:7807:91;;;;;;;;;;;;-1:-1:-1;978:7807:91;;;;;-1:-1:-1;978:7807:91;;-1:-1:-1;978:7807:91;;;;;;;;;-1:-1:-1;;;;;978:7807:91;;;;;;;:::o;:::-;;;;;-1:-1:-1;;978:7807:91;;;;-1:-1:-1;;;;;978:7807:91;;;;;;;;;;:::o;1276:306:47:-;;1461:67;978:7807:91;1461:67:47;1276:306;978:7807:91;;1461:67:47;;;;;;;978:7807:91;;;;;;;;;;;;;;;;;-1:-1:-1;;;978:7807:91;;;;;;;;;;;;;;;-1:-1:-1;978:7807:91;;;;1461:67:47;;;;;;;;;:::i;:::-;978:7807:91;1451:78:47;;-1:-1:-1;;978:7807:91;;;;;;;;;1432:103:47;1461:67;1432:103;;978:7807:91;;;1461:67:47;1432:103;;;;;:::i;:::-;978:7807:91;;1405:144:47;;-1:-1:-1;;1405:170:47;;1276:306::o;978:7807:91:-;;;;-1:-1:-1;978:7807:91;;;;;-1:-1:-1;978:7807:91"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":19797,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_address_61386":{"entryPoint":19709,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_61408":{"entryPoint":19731,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_61432":{"entryPoint":19753,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_61475":{"entryPoint":19775,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_addresst_array_uint256_dynt_uint256t_boolt_bytes":{"entryPoint":20370,"id":null,"parameterSlots":1,"returnSlots":5},"abi_decode_addresst_contract_IERC20t_contract_IERC20t_uint256t_addresst_bytes":{"entryPoint":20636,"id":null,"parameterSlots":1,"returnSlots":6},"abi_decode_addresst_contract_IERC20t_contract_IERC20t_uint256t_uint256t_uint256t_boolt_bytes_calldata":{"entryPoint":21318,"id":null,"parameterSlots":1,"returnSlots":9},"abi_decode_addresst_contract_IERC20t_uint256t_addresst_bytes":{"entryPoint":20968,"id":null,"parameterSlots":1,"returnSlots":5},"abi_decode_addresst_uint256t_addresst_bytes":{"entryPoint":20554,"id":null,"parameterSlots":1,"returnSlots":4},"abi_decode_addresst_uint256t_array_uint256_dynt_boolt_bytes":{"entryPoint":21162,"id":null,"parameterSlots":1,"returnSlots":5},"abi_decode_addresst_uint256t_contract_IERC20t_uint256t_boolt_bytes":{"entryPoint":21482,"id":null,"parameterSlots":1,"returnSlots":6},"abi_decode_array_bytes_calldata_dyn_calldata":{"entryPoint":20744,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_array_contract_IERC20_dyn_fromMemory":{"entryPoint":22775,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn":{"entryPoint":20115,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn_fromMemory":{"entryPoint":22415,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn_memory_ptr_fromMemory":{"entryPoint":22318,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dynt_uint256t_bytes_fromMemory":{"entryPoint":22507,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_available_length_array_uint256_dyn":{"entryPoint":20037,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_available_length_bytes":{"entryPoint":20188,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_bool":{"entryPoint":20145,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bytes":{"entryPoint":20242,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bytes_calldata":{"entryPoint":20793,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bytes_fromMemory":{"entryPoint":21811,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bytes_memory_ptr_fromMemory":{"entryPoint":21881,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_InitializeHookParams_calldata":{"entryPoint":20269,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_struct_ManualAddRemoveLiquidityParams_calldata":{"entryPoint":21063,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_struct_SwapSingleTokenHookParams_calldata":{"entryPoint":21267,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint256t_array_uint256_dynt_bytes_fromMemory":{"entryPoint":23081,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_uint48":{"entryPoint":25779,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address_address_uint160_address":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_address_address_uint256_array_uint256_dyn":{"entryPoint":22271,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_array_bytes_dyn":{"entryPoint":20839,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":20319,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn_calldata":{"entryPoint":22104,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_array_uint256_dyn_to_array_uint256_dyn":{"entryPoint":21581,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn_uint256_bytes":{"entryPoint":20513,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_array_uint256_dyn_uint256_uint256_array_uint256_dyn":{"entryPoint":21113,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_bytes":{"entryPoint":20476,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bytes_calldata":{"entryPoint":22165,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_contract_IERC20_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_contract_IERC20_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_enum_AddLiquidityKind":{"entryPoint":22580,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_enum_RemoveLiquidityKind":{"entryPoint":22974,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_enum_SwapKind":{"entryPoint":23153,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_stringliteral_52cc":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_struct_AddLiquidityHookParams":{"entryPoint":22638,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_AddLiquidityParams":{"entryPoint":23712,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_InitializeHookParams":{"entryPoint":21632,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_RemoveLiquidityHookParams":{"entryPoint":22987,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_RemoveLiquidityParams":{"entryPoint":23824,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_SwapSingleTokenHookParams":{"entryPoint":23166,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_uint256_array_uint256_dyn_bytes":{"entryPoint":21439,"id":null,"parameterSlots":4,"returnSlots":1},"access_calldata_tail_array_contract_IERC20_dyn_calldata":{"entryPoint":21939,"id":null,"parameterSlots":2,"returnSlots":2},"access_calldata_tail_bytes_calldata":{"entryPoint":22023,"id":null,"parameterSlots":2,"returnSlots":2},"allocate_and_zero_memory_array_array_uint256_dyn":{"entryPoint":22913,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_and_zero_memory_struct_struct_AddLiquidityHookParams":{"entryPoint":22453,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_and_zero_memory_struct_struct_SwapSingleTokenHookParams":{"entryPoint":24012,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_array_contract_IERC20_dyn":{"entryPoint":20013,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":20160,"id":null,"parameterSlots":1,"returnSlots":1},"calldata_array_index_access_bytes_calldata_dyn_calldata":{"entryPoint":24692,"id":null,"parameterSlots":3,"returnSlots":2},"calldata_array_index_access_contract_IERC20_dyn_calldata":{"entryPoint":22197,"id":null,"parameterSlots":3,"returnSlots":1},"extract_returndata":{"entryPoint":23331,"id":null,"parameterSlots":0,"returnSlots":1},"finalize_allocation":{"entryPoint":19978,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_61388":{"entryPoint":19817,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_61390":{"entryPoint":19845,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_61397":{"entryPoint":19865,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_61399":{"entryPoint":19894,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_83788":{"entryPoint":19922,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_83790":{"entryPoint":19950,"id":null,"parameterSlots":1,"returnSlots":0},"fun_bubbleUpRevert":{"entryPoint":27321,"id":6433,"parameterSlots":1,"returnSlots":0},"fun_catchEncodedResult":{"entryPoint":26016,"id":6396,"parameterSlots":1,"returnSlots":1},"fun_ensureOnlyVault":{"entryPoint":25048,"id":28148,"parameterSlots":0,"returnSlots":0},"fun_getSingleInputArrayAndTokenIndex":{"entryPoint":25798,"id":19026,"parameterSlots":3,"returnSlots":2},"fun_nonReentrantBefore":{"entryPoint":25003,"id":9916,"parameterSlots":0,"returnSlots":0},"fun_queryRevertErrorCode":{"entryPoint":24086,"id":34979,"parameterSlots":0,"returnSlots":1},"fun_queryRevertLegacy":{"entryPoint":23378,"id":35024,"parameterSlots":0,"returnSlots":1},"fun_queryRevertNoReason":{"entryPoint":24182,"id":35126,"parameterSlots":0,"returnSlots":1},"fun_queryRevertPanic":{"entryPoint":24278,"id":35070,"parameterSlots":0,"returnSlots":1},"fun_querySpoof":{"entryPoint":23916,"id":34925,"parameterSlots":0,"returnSlots":1},"fun_querySwapSingleTokenExactInAndRevert":{"entryPoint":24715,"id":34887,"parameterSlots":6,"returnSlots":1},"fun_returnEth":{"entryPoint":25712,"id":18982,"parameterSlots":1,"returnSlots":0},"fun_saveSender":{"entryPoint":24937,"id":19282,"parameterSlots":1,"returnSlots":1},"fun_sendTokenOut":{"entryPoint":26644,"id":19126,"parameterSlots":4,"returnSlots":0},"fun_sendValue":{"entryPoint":27197,"id":40518,"parameterSlots":2,"returnSlots":0},"fun_swapHook":{"entryPoint":26172,"id":17706,"parameterSlots":1,"returnSlots":3},"fun_toUint160":{"entryPoint":25142,"id":43591,"parameterSlots":1,"returnSlots":1},"fun_unwrapWethAndTransferToSender":{"entryPoint":26950,"id":31146,"parameterSlots":4,"returnSlots":0},"fun_verifyCallResultFromTarget":{"entryPoint":27336,"id":40673,"parameterSlots":3,"returnSlots":1},"fun_wrapEthAndSettle":{"entryPoint":25210,"id":31107,"parameterSlots":3,"returnSlots":0},"memory_array_index_access_uint256_dyn":{"entryPoint":23311,"id":null,"parameterSlots":2,"returnSlots":1},"modifier_saveSenderAndManageEth":{"entryPoint":24374,"id":18636,"parameterSlots":2,"returnSlots":1},"read_from_calldatat_address":{"entryPoint":21919,"id":null,"parameterSlots":1,"returnSlots":1},"read_from_calldatat_bool":{"entryPoint":22258,"id":null,"parameterSlots":1,"returnSlots":1},"write_to_memory_enum_AddLiquidityKind":{"entryPoint":22763,"id":null,"parameterSlots":2,"returnSlots":0},"write_to_memory_enum_RemoveLiquidityKind":{"entryPoint":22962,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"18582":[{"length":32,"start":24388},{"length":32,"start":25721}],"18585":[{"length":32,"start":34},{"length":32,"start":7248},{"length":32,"start":7424},{"length":32,"start":9051},{"length":32,"start":9135},{"length":32,"start":9636},{"length":32,"start":10619},{"length":32,"start":10999},{"length":32,"start":17321},{"length":32,"start":18700},{"length":32,"start":19083},{"length":32,"start":26702},{"length":32,"start":26903}],"18588":[{"length":32,"start":9269},{"length":32,"start":10665},{"length":32,"start":13363},{"length":32,"start":15458},{"length":32,"start":15912},{"length":32,"start":16170},{"length":32,"start":18745}],"19225":[{"length":32,"start":1481},{"length":32,"start":3006},{"length":32,"start":3570},{"length":32,"start":5451},{"length":32,"start":8849},{"length":32,"start":10108},{"length":32,"start":12587},{"length":32,"start":24506},{"length":32,"start":24942}],"28110":[{"length":32,"start":1009},{"length":32,"start":1384},{"length":32,"start":1782},{"length":32,"start":2260},{"length":32,"start":2910},{"length":32,"start":3515},{"length":32,"start":4316},{"length":32,"start":4654},{"length":32,"start":5081},{"length":32,"start":5857},{"length":32,"start":6105},{"length":32,"start":6840},{"length":32,"start":7988},{"length":32,"start":8308},{"length":32,"start":8696},{"length":32,"start":9018},{"length":32,"start":9305},{"length":32,"start":9818},{"length":32,"start":10197},{"length":32,"start":11928},{"length":32,"start":12491},{"length":32,"start":12922},{"length":32,"start":13060},{"length":32,"start":14488},{"length":32,"start":15057},{"length":32,"start":17387},{"length":32,"start":18183},{"length":32,"start":18307},{"length":32,"start":19610},{"length":32,"start":23425},{"length":32,"start":23963},{"length":32,"start":24133},{"length":32,"start":24229},{"length":32,"start":24325},{"length":32,"start":24743},{"length":32,"start":25058},{"length":32,"start":25876},{"length":32,"start":26480},{"length":32,"start":26669},{"length":32,"start":26749}]},"linkReferences":{},"object":"60806040526004361015610072575b3615610018575f80fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361004a57005b7f0540ddf6000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f3560e01c8063026b3d9514614b57578063086fad661461476357806308c04793146146455780630c3b846f146145a65780630ca078ec1461450e5780630f710888146143cd578063107c279f1461438a578063175d4408146142ab57806319c6989f14613c865780631bbf2e2314613c435780631d56798d14613aa857806322717db214613a3a57806323b3924114613838578063339f38381461381e5780633a1b05de146132e75780633ebc54e51461316a578063452db95214612fe657806345d132fe14612fae5780634aeecca914612f945780634b59d17c14612f105780635168275014612dfd57806353d0bb9814612d4857806354fd4d5014612c0b57806358307e4414612ba25780635b343791146127ad5780635e01eb5a146127685780635f9815ff1461262557806364c90707146125cd57806368a24fe0146122d257806368d5e16a146120b5578063724dba3314611f9c57806372657d1714611e51578063750283bc14611dd45780637ae3096014611dba5780637b03c7ba14611a8a57806382bf2b24146119b657806382cd54fb1461177657806390aa9f761461175c57806394e86ef8146115d15780639de90518146113b2578063aaf51ea314611398578063ac9650d814611354578063ad6d59f3146112ae578063b037ed361461114a578063b24bd57114611000578063b29a62a714610fa4578063b3b0a7a714610f9b578063be5ae84114610f46578063beb91feb14610e2e578063bf6ee3fd14610c95578063c08bc85114610bfd578063c330c7be14610a36578063c3ec0efc1461097d578063d3a5152a14610940578063da001f7d146107af578063e178073e14610761578063e7326def14610610578063ecb2182c146104725763efd85f140361000e573461046e5761030d36614f2d565b6103156161d8565b6001600160a01b039061032a6020820161559f565b6103338261559f565b9261034160408401846155b3565b9093608081013593600585101561046e57836103ac6103ed966060856103975f9c9b61038799878f9e61037a60c06103b39d0187615607565b9a909b6040519e8f614db6565b168d521660208c01523691614e45565b604089015201356060870152608086016158eb565b3691614edc565b60a08201526040519485809481937f4af29ec400000000000000000000000000000000000000000000000000000000835260048301615ca0565b03927f0000000000000000000000000000000000000000000000000000000000000000165af18015610463575f905f925f91610439575b506104359060405193849384615021565b0390f35b9050610435925061045c91503d805f833e6104548183614e0a565b8101906157eb565b9092610424565b6040513d5f823e3d90fd5b5f80fd5b6105286104a15f61051a81610564610489366153ea565b97939a929990949161049a33616169565b9a836164c6565b9790946001600160a01b039b8c96604051946104bc86614d69565b33865260209e8f9116908601526040850152606084015260016080840152151560a083015260c08201526040519283917f7b03c7ba000000000000000000000000000000000000000000000000000000008c840152602483016159cb565b03601f198101835282614e0a565b6040519586809481937f48c894910000000000000000000000000000000000000000000000000000000083528b60048401526024830190614ffc565b03927f0000000000000000000000000000000000000000000000000000000000000000165af1918215610463576105b7926105af915f916105ee575b50858082518301019101615a29565b509050615b0f565b51906105c6575b604051908152f35b5f7f00000000000000000000000000000000000000000000000000000000000000005d6105be565b61060a91503d805f833e6106028183614e0a565b810190615579565b866105a0565b61051a6106b65f806106f2610641610627366153ea565b9161063a9b959b9a949691939a33616169565b9a8c6164c6565b50916001600160a01b03956040519361065985614d69565b3385528760209d168d8601526040850152606084015260026080840152151560a083015260c08201526040519283917f7b03c7ba000000000000000000000000000000000000000000000000000000008b840152602483016159cb565b6040519485809481937f48c894910000000000000000000000000000000000000000000000000000000083528a60048401526024830190614ffc565b03927f0000000000000000000000000000000000000000000000000000000000000000165af1801561046357610738915f91610747575b50838082518301019101615a29565b5050906105c657604051908152f35b61075b91503d805f833e6106028183614e0a565b84610729565b3461046e57606060031936011261046e576107a5610791610780614cfd565b610788614d29565b604435916164c6565b604051928392604084526040840190614f5f565b9060208301520390f35b3461046e57608060031936011261046e576107c8614cfd565b67ffffffffffffffff60243581811161046e576107e9903690600401614e93565b906107f2614d3f565b60643591821161046e576108d05f929161051a61089461082061081a87963690600401614f12565b93616169565b966001600160a01b03936040519161083783614d69565b3083528560209b168b8401526040830152866060830152600160808301528660a083015260c08201526040519283917fefd85f14000000000000000000000000000000000000000000000000000000008b8401526024830161586e565b6040519485809481937fedfa35680000000000000000000000000000000000000000000000000000000083528a60048401526024830190614ffc565b03927f0000000000000000000000000000000000000000000000000000000000000000165af1801561046357610916915f91610926575b508380825183010191016157eb565b509190506105c657604051908152f35b61093a91503d805f833e6106028183614e0a565b84610907565b3461046e575f60031936011261046e577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b3461046e575f60031936011261046e576109956161ab565b6109d560206109a2615dcc565b604051809381927f68a24fe000000000000000000000000000000000000000000000000000000000835260048301615a7e565b03815f305af1801561046357610a0b575b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b602090813d8311610a2f575b610a218183614e0a565b8101031261046e57806109e6565b503d610a17565b3461046e5760a060031936011261046e57610a4f614cfd565b67ffffffffffffffff60443581811161046e57610a70903690600401614e93565b91610a79614d13565b9160843590811161046e575f9361051a610b1d8694610aa8610aa2610b5a963690600401614f12565b97616169565b966001600160a01b03948560405193610ac085614d69565b30855216602084015260408301526024356060830152600360808301528660a083015260c08201526040519283917fb24bd571000000000000000000000000000000000000000000000000000000006020840152602483016159cb565b6040519586809481937fedfa3568000000000000000000000000000000000000000000000000000000008352602060048401526024830190614ffc565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19182156104635761043592610ba6915f91610be3575b5060208082518301019101615a29565b90939192610bbb575b604051938493846153bf565b5f7f00000000000000000000000000000000000000000000000000000000000000005d610baf565b610bf791503d805f833e6106028183614e0a565b84610b96565b61051a6106b65f806108d0610c1136614f92565b610c219993919892949933616169565b986001600160a01b039560405193610c3885614d69565b3385528760209d168d8601526040850152606084015260016080840152151560a083015260c08201526040519283917f5b343791000000000000000000000000000000000000000000000000000000008b8401526024830161586e565b608060031936011261046e57610ca9614cfd565b67ffffffffffffffff9060243582811161046e57610ccb903690600401614e93565b906044359283151580940361046e5760643590811161046e575f9261051a610d7a8594610cff610db7953690600401614f12565b610d0833616169565b986001600160a01b03958660405194610d2086614d69565b33865216602085015260408401528760608401526003608084015260a083015260c08201526040519283917f5b3437910000000000000000000000000000000000000000000000000000000060208401526024830161586e565b6040519485809481937f48c89491000000000000000000000000000000000000000000000000000000008352602060048401526024830190614ffc565b03927f0000000000000000000000000000000000000000000000000000000000000000165af1801561046357610e14575b50610def57005b5f7f00000000000000000000000000000000000000000000000000000000000000005d005b610e27903d805f833e6106028183614e0a565b5081610de8565b3461046e575f60031936011261046e57610e466161ab565b6040516060810181811067ffffffffffffffff821117610f1957610ec2915f91604052600281526040366020830137604051809381927f82cd54fb000000000000000000000000000000000000000000000000000000008352846004840152846024840152846044840152608060648401526084830190614f5f565b038183305af1801561046357610ef7575f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b610f12903d805f833e610f0a8183614e0a565b81019061578f565b50806109e6565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b3461046e576020610f6e610f5936615313565b610f616161ab565b610f696161d8565b61663c565b50505f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051908152f35b3461046e575f80fd5b3461046e5760a060031936011261046e57610fbd614cfd565b610fc5614d29565b610fcd614d3f565b6084359167ffffffffffffffff831161046e57602093610ff46105be943690600401615139565b9390926064359261608b565b3461046e5761100e36614f2d565b6110166161d8565b6001600160a01b0361102a6020830161559f565b6110338361559f565b9161104160408501856155b3565b9490608082013593600485101561046e57836103ac6110d89661109061109e955f9b606089878f9e61037a60c06110799e0184615607565b168d521660208c0152013560408a01523691614e45565b6060870152608086016159b2565b60a08201526040519485809481937f2145789700000000000000000000000000000000000000000000000000000000835260048301615d10565b03927f0000000000000000000000000000000000000000000000000000000000000000165af18015610463575f905f925f91611120575b5061043590604051938493846153bf565b9050610435925061114391503d805f833e61113b8183614e0a565b810190615a29565b909261110f565b3461046e57604060031936011261046e57611163614cfd565b6001600160a01b0360405190806020937f5f9815ff000000000000000000000000000000000000000000000000000000008585015216602483015230604483015260243560648301526064825260a082019082821067ffffffffffffffff831117610f1957815f91816040527fedfa35680000000000000000000000000000000000000000000000000000000082528560a486015281837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff608761122960c4820182614ffc565b0301927f0000000000000000000000000000000000000000000000000000000000000000165af190811561046357611272925f92611287575b505082808251830101910161578f565b90610435604051928284938452830190614f5f565b6112a7925060a0903d90815f853e61129f8285614e0a565b010190615579565b8380611262565b3461046e575f60031936011261046e576112c66161ab565b6113055f6112d26157b5565b604051809381927f7b03c7ba000000000000000000000000000000000000000000000000000000008352600483016159cb565b038183305af180156104635761133a575f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b61134d903d805f833e61113b8183614e0a565b50506109e6565b602060031936011261046e5760043567ffffffffffffffff811161046e5761138c611386610435923690600401615108565b90615f36565b60405191829182615167565b3461046e575f60031936011261046e5760206105be615ed6565b3461046e576113cc6113c33661504a565b92919390616169565b916001600160a01b0390817f00000000000000000000000000000000000000000000000000000000000000001691604051937fca4f280300000000000000000000000000000000000000000000000000000000855216928360048201525f81602481865afa908115610463575f916115af575b50519461144b86615981565b955f5b81811061158a5750505f9261051a6114cc888695611508956040519261147384614d69565b30845260209a8b850152604084015260608301528660808301528660a083015260c08201526040519283917fefd85f14000000000000000000000000000000000000000000000000000000008a8401526024830161586e565b6040519485809481937fedfa35680000000000000000000000000000000000000000000000000000000083528960048401526024830190614ffc565b03925af180156104635761152c915f91611570575b508280825183010191016157eb565b505091611548575b610435604051928284938452830190614f5f565b5f7f00000000000000000000000000000000000000000000000000000000000000005d611534565b61158491503d805f833e6106028183614e0a565b8461151d565b806fffffffffffffffffffffffffffffffff6115a86001938b615b0f565b520161144e565b6115cb91503d805f833e6115c38183614e0a565b8101906158f7565b8661143f565b6115da36615346565b949095939193336115ea90616169565b97604051996115f88b614d99565b338b5260208b01600190526001600160a01b031660408b01526001600160a01b031660608a01526001600160a01b0316608089015260a088015260c087015260e08601521515610100850152369061164f92614edc565b6101208301526040517f68a24fe000000000000000000000000000000000000000000000000000000000602082015291829061168e9060248301615a7e565b03601f19810183526116a09083614e0a565b60405180927f48c894910000000000000000000000000000000000000000000000000000000082526004820160209052602482016116dd91614ffc565b03827f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691815a5f948591f1918215610463575f92611740575b5060208280518101031261046e57602080920151906105c657604051908152f35b6117559192503d805f833e6106028183614e0a565b908261171f565b3461046e575f60031936011261046e5760206105be615e76565b3461046e57608060031936011261046e5761178f614cfd565b611797614d29565b906064359067ffffffffffffffff821161046e576117bc611832923690600401614e93565b906117c56161ab565b6117cd6161d8565b6001600160a01b035f817f00000000000000000000000000000000000000000000000000000000000000001693604051809681927fa07d60400000000000000000000000000000000000000000000000000000000083526044358a88600486016156ff565b038183875af1938415610463575f9461199a575b5080604051927fca4f28030000000000000000000000000000000000000000000000000000000084521660048301525f82602481865afa918215610463575f9261197e575b505f5b825181101561193a576118a18186615b0f565b5190816118b3575b600191500161188e565b826118be8286615b0f565b5116853b1561046e576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b039182166004820152908816602482015260448101929092525f8260648183895af19182156104635760019261192b575b506118a9565b61193490614d85565b87611925565b6104358561194788616470565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051918291602083526020830190614f5f565b6119939192503d805f833e6115c38183614e0a565b908561188b565b6119af9194503d805f833e610f0a8183614e0a565b9285611846565b5f61051a81610b5a611a4d6119ca366152aa565b906119da98949295939833616169565b986001600160a01b039687604051956119f287614d69565b3387521660208601526040850152606084015260036080840152151560a083015260c08201526040519283917f7b03c7ba000000000000000000000000000000000000000000000000000000006020840152602483016159cb565b6040519586809481937f48c89491000000000000000000000000000000000000000000000000000000008352602060048401526024830190614ffc565b3461046e57611a9836614f2d565b611aa06161ab565b611aa86161d8565b6001600160a01b039060208101907f000000000000000000000000000000000000000000000000000000000000000090838216611ae48461559f565b94611aee8361559f565b611afb60408501856155b3565b979091608086013590600482101561046e57846103ac611b57936110905f97611b8f9e611b2c8d60c0810190615607565b969097816040519b611b3d8d614db6565b168b521660208a015260608d013560408a01523691614e45565b60a0820152604051809881927f2145789700000000000000000000000000000000000000000000000000000000835260048301615d10565b038183865af1908115610463575f955f975f93611d91575b50611bb19061559f565b9681604051987fca4f2803000000000000000000000000000000000000000000000000000000008a521660048901525f88602481875afa978815610463575f98611d75575b50919560a0850192905f5b8951811015611d3057611c148184615b0f565b51908115611d275784611c27828d615b0f565b5116611c32876156f2565b80611cfc575b15611c7a5750611c74600192611c4d8a61559f565b8b7f0000000000000000000000000000000000000000000000000000000000000000616946565b01611c01565b611c838961559f565b883b1561046e576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529116602482015260448101929092525f82606481838b5af191821561046357600192611ced575b50611c74565b611cf690614d85565b8b611ce7565b50857f0000000000000000000000000000000000000000000000000000000000000000168114611c38565b60019150611c74565b5061043588611d46611d418961559f565b616470565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051938493846153bf565b611d8a9198503d805f833e6115c38183614e0a565b9688611bf6565b909250611dae919750611bb196503d805f833e61113b8183614e0a565b97919690979290611ba7565b3461046e575f60031936011261046e5760206105be615e16565b611ddd36615346565b94909593919333611ded90616169565b9760405199611dfb8b614d99565b338b5260208b015f90526001600160a01b031660408b01526001600160a01b031660608a01526001600160a01b0316608089015260a088015260c087015260e08601521515610100850152369061164f92614edc565b60c060031936011261046e57611e65614cfd565b611e6d614d29565b611e75614eb1565b60a4359067ffffffffffffffff821161046e575f611f30611e9b82943690600401614f12565b9261051a610528611eb9611eae33616169565b98604435908b6164c6565b966001600160a01b039460405192611ed084614d69565b3384528660209d168d8501526040840152606435606084015260026080840152151560a083015260c08201526040519283917f5b343791000000000000000000000000000000000000000000000000000000008c8401526024830161586e565b03927f0000000000000000000000000000000000000000000000000000000000000000165af1918215610463576105b792611f7b915f91611f82575b508580825183010191016157eb565b5050615b0f565b611f9691503d805f833e6106028183614e0a565b86611f6c565b61051a6120345f80612070611fb036614f92565b611fc1999391999892949833616169565b996001600160a01b039560405193611fd885614d69565b3385528760209c168c86015260408501526060840152876080840152151560a083015260c08201526040519283917f5b343791000000000000000000000000000000000000000000000000000000008a8401526024830161586e565b6040519485809481937f48c894910000000000000000000000000000000000000000000000000000000083528960048401526024830190614ffc565b03927f0000000000000000000000000000000000000000000000000000000000000000165af180156104635761152c915f9161157057508280825183010191016157eb565b3461046e576120c336615247565b6120cc33616169565b6001600160a01b0390604051906020937f3a1b05de00000000000000000000000000000000000000000000000000000000858401528460248401528361211182614d55565b16604484015283612123868301614d55565b16606484015260408101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561046e5781019085823592019467ffffffffffffffff9485841161046e578360051b3603871361046e576121b8816121f49460606121a25f9b8c996080608487015260c4860191615658565b91013560a483015203601f198101835282614e0a565b6040519687809481937f48c894910000000000000000000000000000000000000000000000000000000083528b60048401526024830190614ffc565b03927f0000000000000000000000000000000000000000000000000000000000000000165af1928315610463575f936122b6575b50825183019360808482870196031261046e578084015183811161046e5785826122549287010161572e565b93604081015195606082015192608083015195861161046e576104359561227c93010161572e565b9161228e575b60405194859485615279565b5f7f00000000000000000000000000000000000000000000000000000000000000005d612282565b6122cb9193503d805f833e6106028183614e0a565b9184612228565b3461046e576122e036615313565b6122e86161ab565b6122f06161d8565b6122f98161663c565b61230760608593950161559f565b906123118361559f565b94610100840195612321876156f2565b80612598575b156124155750946123a49161237f6020977f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061627a565b6123888561559f565b9161239e6123986080880161559f565b916156f2565b92616814565b6001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016911614612403575b505f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051908152f35b611d4161240f9161559f565b826123d7565b81612429575b50506020946123a49161237f565b6001600160a01b0390817f00000000000000000000000000000000000000000000000000000000000000001691807f0000000000000000000000000000000000000000000000000000000000000000169161248385616236565b93803b1561046e576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152848316602482015294821660448601529187161660648401525f908390608490829084905af1908115610463575f9360209361254993612589575b506040519485809481937f15afd4090000000000000000000000000000000000000000000000000000000083528a60048401602090939291936001600160a01b0360408201951681520152565b03925af180156104635761255e575b8061241b565b602090813d8311612582575b6125748183614e0a565b8101031261046e5785612558565b503d61256a565b61259290614d85565b8a6124fc565b506001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001690851614612327565b3461046e575f60031936011261046e576125e56161ab565b6109d560206125f2615dcc565b604051809381927fbe5ae84100000000000000000000000000000000000000000000000000000000835260048301615a7e565b3461046e57606060031936011261046e5761263e614cfd565b612646614d29565b61264e6161d8565b6001600160a01b0390817f000000000000000000000000000000000000000000000000000000000000000016604051927fca4f2803000000000000000000000000000000000000000000000000000000008452841660048401525f83602481845afa938415610463575f6126cf61270a968296839161274e575b5051615981565b93604051968795869485937fa07d604000000000000000000000000000000000000000000000000000000000855260443591600486016156ff565b03925af1801561046357610435915f91612734575b50604051918291602083526020830190614f5f565b61274891503d805f833e610f0a8183614e0a565b8261271f565b61276291503d8085833e6115c38183614e0a565b886126c8565b3461046e575f60031936011261046e5760207f00000000000000000000000000000000000000000000000000000000000000005c6001600160a01b0360405191168152f35b3461046e576127bb36614f2d565b6127c36161ab565b6127cb6161d8565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081811692602090818101906128088261559f565b956128128261559f565b9661282060408401846155b3565b919098608085013591600583101561046e57896103ac612864946128736128c39e5f988d8661288b996128578f60c0810190615607565b99909a6040519d8e614db6565b168c5216908a01523691614e45565b604087015260608901356060870152608086016158eb565b60a0820152604051809981927f4af29ec400000000000000000000000000000000000000000000000000000000835260048301615ca0565b038183855af1958615610463575f935f985f98612b79575b506128e59061559f565b81604051917fca4f28030000000000000000000000000000000000000000000000000000000083521660048201525f81602481865afa908115610463575f91612b5f575b50969760a0840197905f5b8251811015612b1e57836129488285615b0f565b51166129548289615b0f565b51908115612ab1576129658c6156f2565b80612af3575b156129a557509061299f6001928b7f000000000000000000000000000000000000000000000000000000000000000061627a565b01612934565b90857f000000000000000000000000000000000000000000000000000000000000000016906129d38961559f565b6129dc82616236565b833b1561046e576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201528a831660248201529082166044820152908416606482015292915f908490608490829084905af191821561046357612a9d938c93612ae4575b5060405193849283927f15afd40900000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03815f8a5af1908115610463578991612abb575b505060019061299f565b813d8311612add575b612ace8183614e0a565b8101031261046e57878c612ab1565b503d612ac4565b612aed90614d85565b8f612a52565b50857f000000000000000000000000000000000000000000000000000000000000000016811461296b565b50856104358b612b30611d418961559f565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d60405193849384615021565b612b7391503d805f833e6115c38183614e0a565b89612929565b909750612b969198506128e594503d805f833e6104548183614e0a565b989194909897906128db565b3461046e575f60031936011261046e57612c076040516104d2602082015260208152612bcd81614dee565b6040519182917f5ab64fb8000000000000000000000000000000000000000000000000000000008352602060048401526024830190614ffc565b0390fd5b3461046e575f60031936011261046e576040515f5f549060018260011c9160018416918215612d3e575b6020948585108414612d115785879486865291825f14612cd3575050600114612c7a575b50612c6692500383614e0a565b610435604051928284938452830190614ffc565b5f808052859250907f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5635b858310612cbb575050612c66935082010185612c59565b80548389018501528794508693909201918101612ca4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685820152612c6695151560051b8501019250879150612c599050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f1692612c35565b3461046e57612d79612d725f806106f261089461051a612d67366151e8565b95939a929990616169565b988a6164c6565b506001600160a01b039360405191612d9083614d69565b3083528560209b168b84015260408301526fffffffffffffffffffffffffffffffff6060830152600260808301528660a083015260c08201526040519283917fb24bd571000000000000000000000000000000000000000000000000000000008b840152602483016159cb565b61051a6120345f80612e94612e11366152aa565b612e219993949892919933616169565b996001600160a01b039560405193612e3885614d69565b3385528760209c168c86015260408501526060840152876080840152151560a083015260c08201526040519283917f7b03c7ba000000000000000000000000000000000000000000000000000000008a840152602483016159cb565b03927f0000000000000000000000000000000000000000000000000000000000000000165af1801561046357612eda915f91612ef6575b50828082518301019101615a29565b5092905061154857610435604051928284938452830190614f5f565b612f0a91503d805f833e6106028183614e0a565b84612ecb565b3461046e575f60031936011261046e57612f286161ab565b6109d56020604051612f3981614d69565b5f81525f82820152606060408201526060808201525f60808201525f60a0820152606060c0820152604051809381927f086fad6600000000000000000000000000000000000000000000000000000000835260048301615480565b3461046e575f60031936011261046e5760206105be615d6c565b3461046e575f60031936011261046e577ff5ab33e5000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461046e5760a060031936011261046e57612fff614cfd565b67ffffffffffffffff60243581811161046e57613020903690600401614e93565b91613029614d13565b9160843590811161046e575f9361051a610b1d8694613052610aa26130c7963690600401614f12565b966001600160a01b0394856040519361306a85614d69565b30855216602084015260408301526044356060830152600460808301528660a083015260c08201526040519283917fefd85f140000000000000000000000000000000000000000000000000000000060208401526024830161586e565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19182156104635761043592613113915f91613150575b50602080825183010191016157eb565b90939192613128575b60405193849384615021565b5f7f00000000000000000000000000000000000000000000000000000000000000005d61311c565b61316491503d805f833e6106028183614e0a565b84613103565b3461046e576131783661509c565b906131869094939294616169565b936001600160a01b038093816040519661319f88614d99565b3388528160209a8b8a015f905216604089015216606087015216608085015260a084015260c083015f905260e083016fffffffffffffffffffffffffffffffff905261010083015f905261012083015260405180928582017fbe5ae841000000000000000000000000000000000000000000000000000000009052602482019061322891615a7e565b03601f198101835261323a9083614e0a565b6040518080937fedfa35680000000000000000000000000000000000000000000000000000000082528660048301526024820161327691614ffc565b03917f00000000000000000000000000000000000000000000000000000000000000001691815a5f948591f1908115610463575f916132cd575b50828180518101031261046e57820151906105c657604051908152f35b6132e191503d805f833e6106028183614e0a565b836132b0565b3461046e576132f536615247565b6001600160a01b03906133ca827f0000000000000000000000000000000000000000000000000000000000000000169161332e8161559f565b6020935f8584019261333f8461559f565b61337d61334f60408801886155b3565b8b6040519461335d86614dd2565b878652816040519761336e89614db6565b168752168b8601523691614e45565b60408301526060860135606083015282608083015260a0820152604051809681927f4af29ec400000000000000000000000000000000000000000000000000000000835260048301615ca0565b038183855af1958615610463575f945f976137fc575b506133ea8461559f565b81604051917fca4f28030000000000000000000000000000000000000000000000000000000083521660048201525f81602481865afa908115610463575f916137e2575b5093967f0000000000000000000000000000000000000000000000000000000000000000821694905f5b82518110156135b1578361346c8285615b0f565b5116613478828a615b0f565b5180156135a7576134888861559f565b9061349281616236565b918a3b1561046e576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015289821660248201529281166044840152831660648301529091905f83608481838e5af19182156104635761354f938d93613598575060405193849283927f15afd40900000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03815f8a5af1908115610463578a9161356f575b50506001905b01613458565b813d8311613591575b6135828183614e0a565b8101031261046e57888b613563565b503d613578565b6135a190614d85565b8e612a52565b5050600190613569565b509193945091966135c18161559f565b90846135d56135cf8861559f565b9261559f565b16888660246135e38a61559f565b60405194859384927f70a082310000000000000000000000000000000000000000000000000000000084521660048301525afa908115610463575f916137ad575b50906136a7985f93926136378751615981565b91886040519461364686614dd2565b878652816040519761365789614db6565b16875216908501526040840152606083015282608083015260a0820152604051809881927f2145789700000000000000000000000000000000000000000000000000000000835260048301615d10565b0381838b5af1948515610463575f965f9661378b575b505f5b835181101561377957846136d48286615b0f565b5116906136e18189615b0f565b51801561376f576136f18861559f565b908b3b1561046e576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03948516600482015291909316602482015260448101929092525f82606481838e5af191821561046357600192613760575b505b016136c0565b61376990614d85565b8a613758565b506001915061375a565b50610435868860405194859485615279565b9096506137a39195503d805f833e61113b8183614e0a565b95919690956136bd565b929190508883813d83116137db575b6137c68183614e0a565b8101031261046e5791519091906136a7613624565b503d6137bc565b6137f691503d805f833e6115c38183614e0a565b8861342e565b9094506138149196503d805f833e6104548183614e0a565b96919490966133e0565b3461046e575f60031936011261046e5760206105be615b52565b3461046e5760a060031936011261046e57613851614cfd565b613859614d3f565b90613862614d13565b60843567ffffffffffffffff811161046e5761388561388b913690600401614f12565b91616169565b916001600160a01b0391827f0000000000000000000000000000000000000000000000000000000000000000169280604051937fc9c1661b0000000000000000000000000000000000000000000000000000000085521695866004850152166024830152604082604481865afa918215610463575f905f936139fb575b505f9361051a613997869461391f6139d395615981565b90600161392c8984615b0f565b526040519161393a83614d69565b30835260209b8c84015260408301526024356060830152600160808301528660a083015260c08201526040519283917fb24bd571000000000000000000000000000000000000000000000000000000008c840152602483016159cb565b6040519586809481937fedfa35680000000000000000000000000000000000000000000000000000000083528b60048401526024830190614ffc565b03925af1918215610463576105b7926105af915f916105ee5750858082518301019101615a29565b925050916040823d604011613a32575b81613a1860409383614e0a565b8101031261046e578151602090920151909290915f613908565b3d9150613a0b565b3461046e575f60031936011261046e5760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4c65676163792072657665727420726561736f6e0000000000000000000000006044820152fd5b3461046e57613ac4613ab9366151e8565b929490939193616169565b926001600160a01b0392837f0000000000000000000000000000000000000000000000000000000000000000169380604051947fc9c1661b0000000000000000000000000000000000000000000000000000000086521696876004860152166024840152604083604481875afa928315610463575f905f94613c06575b509361051a6139975f9694613bde94613b5a8997615981565b916fffffffffffffffffffffffffffffffff613b768a85615b0f565b5260405192613b8484614d69565b30845260209c8d85015260408401526060830152600260808301528660a083015260c08201526040519283917fefd85f14000000000000000000000000000000000000000000000000000000008c8401526024830161586e565b03925af1918215610463576105b792611f7b915f91611f8257508580825183010191016157eb565b9350506040833d604011613c3b575b81613c2260409383614e0a565b8101031261046e5782516020909301519261051a613b41565b3d9150613c15565b3461046e575f60031936011261046e5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b60a060031936011261046e5767ffffffffffffffff6004351161046e5736602360043501121561046e5767ffffffffffffffff600435600401351161046e5736602460c0600435600401350260043501011161046e5760243567ffffffffffffffff811161046e57613cfc903690600401615108565b67ffffffffffffffff6044351161046e5760606003196044353603011261046e5760643567ffffffffffffffff811161046e57613d3d903690600401615139565b60843567ffffffffffffffff811161046e57613d5d903690600401615108565b949093613d686161ab565b806004356004013503614283575f5b600435600401358110613ff85750505060443560040135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd60443536030182121561046e57816044350160048101359067ffffffffffffffff821161046e5760248260071b360391011361046e57613e1b575b61043561138c86865f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d615f36565b6001600160a01b039492947f0000000000000000000000000000000000000000000000000000000000000000163b1561046e57604051947f2a2d80d10000000000000000000000000000000000000000000000000000000086523360048701526060602487015260c486019260443501602481019367ffffffffffffffff60048301351161046e57600482013560071b3603851361046e5760606064890152600482013590529192869260e484019291905f905b60048101358210613f7a5750505082915f94613f1d926001600160a01b03613efb602460443501614d55565b16608486015260448035013560a4860152600319858403016044860152615695565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1918215610463576104359361138c93613f6b575b829450819350613deb565b613f7490614d85565b84613f60565b9195945091926001600160a01b03613f9187614d55565b168152602080870135916001600160a01b03831680930361046e57600492600192820152613fc1604089016164b3565b65ffffffffffff8091166040830152613fdc60608a016164b3565b1660608201526080809101970193019050889495939291613ecf565b6140066103ac828486616074565b6040519081606081011067ffffffffffffffff606084011117610f1957606082016040525f82525f60208301525f6040830152602081015190606060408201519101515f1a9183526020830152604082015260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc818402600435013603011261046e576040519061409782614db6565b6140aa602460c085026004350101614d55565b8083526140c0604460c086026004350101614d55565b908160208501526140da606460c087026004350101614d55565b60408581019190915260043560c08702016084810135606087015260a4810135608087015260c4013560a0860152830151835160209094015160ff91909116926001600160a01b0383163b1561046e575f6001600160a01b03809460e4948a98849860c460c06040519c8d9b8c9a7fd505accf000000000000000000000000000000000000000000000000000000008c521660048b01523060248b0152608482820260043501013560448b0152026004350101356064880152608487015260a486015260c4850152165af19081614274575b5061426b576141b9615b23565b906001600160a01b038151169060206001600160a01b0381830151166044604051809581937fdd62ed3e00000000000000000000000000000000000000000000000000000000835260048301523060248301525afa918215610463575f92614236575b50606001510361423157506001905b01613d77565b616ab9565b9091506020813d602011614263575b8161425260209383614e0a565b8101031261046e575190606061421c565b3d9150614245565b5060019061422b565b61427d90614d85565b896141ac565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b3461046e576142b93661509c565b906142c79094939294616169565b936001600160a01b03809381604051966142e088614d99565b3388528160209a8b8a016001905216604089015216606087015216608085015260a084015260c083016fffffffffffffffffffffffffffffffff905260e083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905261010083015f905261012083015260405180928582017fbe5ae841000000000000000000000000000000000000000000000000000000009052602482019061322891615a7e565b3461046e575f60031936011261046e5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461046e576143de6113c33661504a565b926001600160a01b0392837f00000000000000000000000000000000000000000000000000000000000000001693604051937fca4f280300000000000000000000000000000000000000000000000000000000855216938460048501525f84602481845afa938415610463576114cc5f95946144d19461446a889761051a9589916144f4575051615981565b916040519261447884614d69565b30845260209a8b850152604084015260608301528660808301528660a083015260c08201526040519283917fb24bd571000000000000000000000000000000000000000000000000000000008a840152602483016159cb565b03925af1801561046357612eda915f91612ef65750828082518301019101615a29565b61450891503d808b833e6115c38183614e0a565b8c6126c8565b5f61051a816130c7611a4d61452236614f92565b906145339894929895939533616169565b986001600160a01b0396876040519561454b87614d69565b3387521660208601526040850152606084015260046080840152151560a083015260c08201526040519283917f5b3437910000000000000000000000000000000000000000000000000000000060208401526024830161586e565b3461046e575f60031936011261046e576145be6161ab565b6145fd5f6145ca6157b5565b604051809381927f5b3437910000000000000000000000000000000000000000000000000000000083526004830161586e565b038183305af1801561046357614632575f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b61134d903d805f833e6104548183614e0a565b606060031936011261046e57614659614cfd565b60443567ffffffffffffffff811161046e575f61051a6146c06146836146fa943690600401614e93565b6040519283916020977f82cd54fb0000000000000000000000000000000000000000000000000000000089850152602435903390602486016156ff565b604051809381927f48c894910000000000000000000000000000000000000000000000000000000083528660048401526024830190614ffc565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af1801561046357611272915f91614749575b5082808251830101910161578f565b61475d91503d805f833e6106028183614e0a565b8361473a565b3461046e5761477136614f2d565b6147796161ab565b6147816161d8565b7f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b03806147b86020840161559f565b926147c28161559f565b9360408201946147d286846155b3565b90926147e160608601866155b3565b836147f260c0899894980189615607565b9590946040519b8c987fba8a2be0000000000000000000000000000000000000000000000000000000008a528160c48b01931660048b015216602489015260c060448901525260e4860192905f5b818110614b2c57505050926148849261486b60209793879660031995868984030160648a0152615658565b92608089013560848701528584030160a4860152615695565b03815f868a165af1928315610463575f93614af8575b50919260a0830192905f5b6148af82846155b3565b9050811015614abe576148d46148cf826148c985876155b3565b906156b5565b61559f565b6148e5826148c960608701876155b3565b35908115614ab4576148f6876156f2565b80614a87575b15614936575090614930600192897f000000000000000000000000000000000000000000000000000000000000000061627a565b016148a5565b857f000000000000000000000000000000000000000000000000000000000000000016916149638661559f565b61496c82616236565b843b1561046e576040517f36c785160000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152898d168316602482015290821660448201528389169091166064820152925f908490608490829084905af191821561046357614a3193602093614a78575060405193849283927f15afd40900000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b03815f898d165af1801561046357614a4d575b50600190614930565b602090813d8311614a71575b614a638183614e0a565b8101031261046e5787614a44565b503d614a59565b614a8190614d85565b8b612a52565b50857f000000000000000000000000000000000000000000000000000000000000000016868216146148fc565b5050600190614930565b602086614acd611d418661559f565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051908152f35b9092506020813d602011614b24575b81614b1460209383614e0a565b8101031261046e5751918561489a565b3d9150614b07565b919495965091926020806001928c614b4389614d55565b1681520195019101918a9695949392614840565b60c060031936011261046e57614b6b614cfd565b6024359067ffffffffffffffff80831161046e573660238401121561046e57826004013590614b9982614e2d565b91614ba76040519384614e0a565b80835260209460248685019260051b8201019136831161046e576024879201905b838210614ce6575050505060443581811161046e57614beb903690600401614e93565b92614bf4614eb1565b9260a43592831161046e5761051a6106b6614c96935f96614c1a88973690600401614f12565b90614c2433616169565b996001600160a01b03968760405195614c3c87614d69565b338752168d860152604085015260608401526064356080840152151560a083015260c08201526040519283917f086fad66000000000000000000000000000000000000000000000000000000008b84015260248301615480565b03927f0000000000000000000000000000000000000000000000000000000000000000165af1908115610463575f916132cd5750828180518101031261046e57820151906105c657604051908152f35b828091614cf284614d55565b815201910190614bc8565b600435906001600160a01b038216820361046e57565b606435906001600160a01b038216820361046e57565b602435906001600160a01b038216820361046e57565b604435906001600160a01b038216820361046e57565b35906001600160a01b038216820361046e57565b60e0810190811067ffffffffffffffff821117610f1957604052565b67ffffffffffffffff8111610f1957604052565b610140810190811067ffffffffffffffff821117610f1957604052565b60c0810190811067ffffffffffffffff821117610f1957604052565b6020810190811067ffffffffffffffff821117610f1957604052565b6040810190811067ffffffffffffffff821117610f1957604052565b90601f601f19910116810190811067ffffffffffffffff821117610f1957604052565b67ffffffffffffffff8111610f195760051b60200190565b9291614e5082614e2d565b91614e5e6040519384614e0a565b829481845260208094019160051b810192831161046e57905b828210614e845750505050565b81358152908301908301614e77565b9080601f8301121561046e57816020614eae93359101614e45565b90565b60843590811515820361046e57565b67ffffffffffffffff8111610f1957601f01601f191660200190565b929192614ee882614ec0565b91614ef66040519384614e0a565b82948184528183011161046e578281602093845f960137010152565b9080601f8301121561046e57816020614eae93359101614edc565b6003199060208282011261046e576004359167ffffffffffffffff831161046e578260e09203011261046e5760040190565b9081518082526020808093019301915f5b828110614f7e575050505090565b835185529381019392810192600101614f70565b9060a060031983011261046e576004356001600160a01b038116810361046e579167ffffffffffffffff9060243582811161046e5781614fd491600401614e93565b9260443592606435801515810361046e579260843591821161046e57614eae91600401614f12565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b615037614eae9492606083526060830190614f5f565b9260208201526040818403910152614ffc565b608060031982011261046e576001600160a01b0390600435828116810361046e579260243592604435908116810361046e57916064359067ffffffffffffffff821161046e57614eae91600401614f12565b60c060031982011261046e576001600160a01b0391600435838116810361046e5792602435818116810361046e5792604435828116810361046e579260643592608435908116810361046e579160a4359067ffffffffffffffff821161046e57614eae91600401614f12565b9181601f8401121561046e5782359167ffffffffffffffff831161046e576020808501948460051b01011161046e57565b9181601f8401121561046e5782359167ffffffffffffffff831161046e576020838186019501011161046e57565b6020808201906020835283518092526040830192602060408460051b8301019501935f915b84831061519c5750505050505090565b90919293949584806151d8837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc086600196030187528a51614ffc565b980193019301919493929061518c565b9060a060031983011261046e576001600160a01b03600435818116810361046e5792602435828116810361046e579260443592606435908116810361046e57916084359067ffffffffffffffff821161046e57614eae91600401614f12565b6003199060208282011261046e576004359167ffffffffffffffff831161046e578260809203011261046e5760040190565b9092615292614eae959394608084526080840190614f5f565b93602083015260408201526060818403910152614f5f565b60a060031982011261046e576004356001600160a01b038116810361046e57916024359167ffffffffffffffff9160443583811161046e57826152ef91600401614e93565b92606435801515810361046e579260843591821161046e57614eae91600401614f12565b6003199060208282011261046e576004359167ffffffffffffffff831161046e57826101409203011261046e5760040190565b61010060031982011261046e576001600160a01b0390600435828116810361046e5792602435838116810361046e5792604435908116810361046e5791606435916084359160a4359160c435801515810361046e579160e4359067ffffffffffffffff821161046e576153bb91600401615139565b9091565b916153dc90614eae94928452606060208501526060840190614f5f565b916040818403910152614ffc565b60c060031982011261046e576001600160a01b0390600435828116810361046e579260243592604435908116810361046e579160643591608435801515810361046e579160a4359067ffffffffffffffff821161046e57614eae91600401614f12565b9081518082526020808093019301915f5b82811061546c575050505090565b83518552938101939281019260010161545e565b91906020928381526101008101906001600160a01b03948584511681830152858185015116604083015260408401519260e0606084015283518091528161012084019401915f5b82811061551d5750505050614eae93945060e060c06154f8606086015194601f19958686830301608087015261544d565b94608081015160a085015260a081015115158285015201519282850301910152614ffc565b83518916865294810194928101926001016154c7565b81601f8201121561046e5780519061554a82614ec0565b926155586040519485614e0a565b8284526020838301011161046e57815f9260208093018386015e8301015290565b9060208282031261046e57815167ffffffffffffffff811161046e57614eae9201615533565b356001600160a01b038116810361046e5790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561046e570180359067ffffffffffffffff821161046e57602001918160051b3603831361046e57565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561046e570180359067ffffffffffffffff821161046e5760200191813603831361046e57565b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831161046e5760209260051b809284830137010190565b601f8260209493601f1993818652868601375f8582860101520116010190565b91908110156156c55760051b0190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b35801515810361046e5790565b9092614eae94936080936001600160a01b03809216845216602083015260408201528160608201520190614f5f565b9080601f8301121561046e5781519060209161574981614e2d565b936157576040519586614e0a565b81855260208086019260051b82010192831161046e57602001905b828210615780575050505090565b81518152908301908301615772565b9060208282031261046e57815167ffffffffffffffff811161046e57614eae920161572e565b604051906157c282614d69565b606060c0835f81525f60208201528260408201525f838201525f60808201525f60a08201520152565b909160608284031261046e5781519167ffffffffffffffff9283811161046e578461581791830161572e565b93602082015193604083015190811161046e57614eae9201615533565b9060058210156158415752565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b90614eae91602081526001600160a01b03808351166020830152602083015116604082015260c06158af604084015160e0606085015261010084019061544d565b92606081015160808401526158cc608082015160a0850190615834565b60a081015115158284015201519060e0601f1982850301910152614ffc565b60058210156158415752565b602090818184031261046e5780519067ffffffffffffffff821161046e57019180601f8401121561046e57825161592d81614e2d565b9361593b6040519586614e0a565b818552838086019260051b82010192831161046e578301905b828210615962575050505090565b81516001600160a01b038116810361046e578152908301908301615954565b9061598b82614e2d565b6159986040519182614e0a565b828152601f196159a88294614e2d565b0190602036910137565b60048210156158415752565b9060048210156158415752565b90614eae91602081526001600160a01b03808351166020830152602083015116604082015260c0615a0c604084015160e0606085015261010084019061544d565b92606081015160808401526158cc608082015160a08501906159be565b9160608383031261046e5782519260208101519267ffffffffffffffff9384811161046e5781615a5a91840161572e565b93604083015190811161046e57614eae9201615533565b9060028210156158415752565b610160614eae92602083526001600160a01b03808251166020850152615aac60208301516040860190615a71565b80604083015116606085015280606083015116608085015260808201511660a084015260a081015160c084015260c081015160e084015260e081015161010090818501528101519061012091151582850152015191610140808201520190614ffc565b80518210156156c55760209160051b010190565b3d15615b4d573d90615b3482614ec0565b91615b426040519384614e0a565b82523d5f602084013e565b606090565b6040517f22717db2000000000000000000000000000000000000000000000000000000006020820152600481527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316615bb282614dee565b803b1561046e57615bfe5f929183926040519485809481937f757d64b3000000000000000000000000000000000000000000000000000000008352602060048401526024830190614ffc565b03925af19081615c91575b50615c3257615c1e615c19615b23565b6165a0565b60208180518101031261046e576020015190565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f556e6578706563746564207375636365737300000000000000000000000000006044820152606490fd5b615c9a90614d85565b5f615c09565b90614eae91602081526001600160a01b03808351166020830152602083015116604082015260a0615ce0604084015160c0606085015260e084019061544d565b9260608101516080840152615cfc608082015183850190615834565b01519060c0601f1982850301910152614ffc565b90614eae91602081526001600160a01b0380835116602083015260208301511660408201526040820151606082015260a0615d5a606084015160c0608085015260e084019061544d565b92615cfc6080820151838501906159be565b6040517f58307e44000000000000000000000000000000000000000000000000000000006020820152600481527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316615bb282614dee565b60405190615dd982614d99565b6060610120835f81525f60208201525f60408201525f838201525f60808201525f60a08201525f60c08201525f60e08201525f6101008201520152565b6040517f45d132fe000000000000000000000000000000000000000000000000000000006020820152600481527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316615bb282614dee565b6040517fb3b0a7a7000000000000000000000000000000000000000000000000000000006020820152600481527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316615bb282614dee565b6040517fd3a5152a000000000000000000000000000000000000000000000000000000006020820152600481527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316615bb282614dee565b9190615f4133616169565b907f000000000000000000000000000000000000000000000000000000000000000093845c61604c576001906001865d615f7a83614e2d565b92615f886040519485614e0a565b808452601f19615f9782614e2d565b015f5b81811061603b5750505f5b818110615ff25750505050905f615fe792945d7f0000000000000000000000000000000000000000000000000000000000000000805c91615fe9575b50616470565b565b5f905d5f615fe1565b8061601f5f806160076103ac8996888a616074565b602081519101305af4616018615b23565b9030616ac8565b6160298288615b0f565b526160348187615b0f565b5001615fa5565b806060602080938901015201615f9a565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b908210156156c5576153bb9160051b810190615607565b919361615b95615bb29461612093966001600160a01b039081807f0000000000000000000000000000000000000000000000000000000000000000169981604051996160d68b614d99565b338b525f60208c01521660408a015216606088015216608086015260a08501525f60c08501526fffffffffffffffffffffffffffffffff60e08501525f6101008501523691614edc565b6101208201526040519384917fbe5ae84100000000000000000000000000000000000000000000000000000000602084015260248301615a7e565b03601f198101845283614e0a565b905f917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03815c16156161a1575050565b909192505d600190565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c61604c576001905d565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016330361620a57565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b6001600160a01b039081811161624a571690565b7f6dfcc650000000000000000000000000000000000000000000000000000000005f5260a060045260245260445ffd5b919091814710616448576001600160a01b0380911692833b1561046e576040918251917fd0e30db00000000000000000000000000000000000000000000000000000000083525f925f81600481898b5af1801561643e5761642b575b501692825194602095868101907fa9059cbb000000000000000000000000000000000000000000000000000000008252866024820152836044820152604481526080810181811067ffffffffffffffff821117610f195786525161634b918591829182865af1616344615b23565b9083616ac8565b8051878115159182616406575b505090506163db57906044869284865197889485937f15afd409000000000000000000000000000000000000000000000000000000008552600485015260248401525af19182156163d15750506163ad575050565b813d83116163ca575b6163c08183614e0a565b8101031261046e57565b503d6163b6565b51903d90823e3d90fd5b7f5274afe7000000000000000000000000000000000000000000000000000000008352600452602482fd5b8380929350010312616427578601518015908115036164275780875f616358565b8380fd5b616436919350614d85565b5f915f6162d6565b85513d5f823e3d90fd5b7fa01a9df6000000000000000000000000000000000000000000000000000000005f5260045ffd5b4780156164af577f00000000000000000000000000000000000000000000000000000000000000005c6164af576001600160a01b03615fe79216616a3d565b5050565b359065ffffffffffff8216820361046e57565b916044929391936001600160a01b03604094859282808551998a9586947fc9c1661b0000000000000000000000000000000000000000000000000000000086521660048501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa938415616596575f935f9561655f575b505061655c6165558594615981565b9485615b0f565b52565b809295508194503d831161658f575b6165788183614e0a565b8101031261046e5760208251920151925f80616546565b503d61656e565b83513d5f823e3d90fd5b6004815110616614577f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000060208301511603614231578060246020614eae9351600319810160048501528301019101615579565b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b60e081013542116167ec576001600160a01b03602082013591600283101561046e5760409261666c82850161559f565b9280606094859384860161667f9061559f565b9561668c6080820161559f565b908461669c610120830183615607565b91908c51956166aa87614d69565b8652816020870197168752818d87019b168b52818a870195168552608086019260a0850135845260a087019460c00135855236906166e792614edc565b9360c08601948552818d519b8c9a8b998a997f2bfb780c000000000000000000000000000000000000000000000000000000008b5260048b016020905260248b0190519061673491615a71565b5116604489015251166064870152511660848501525160a48401525160c48301525160e4820160e09052610104820161676c91614ffc565b03917f0000000000000000000000000000000000000000000000000000000000000000165a905f91f1908115616596575f935f935f936167af575b505050909192565b92509250809350813d83116167e5575b6167c98183614e0a565b8101031261046e578151602083015191909201515f80806167a7565b503d6167bf565b7fe08b8af0000000000000000000000000000000000000000000000000000000005f5260045ffd5b928215616940578061690b575b156168725750615fe7917f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000616946565b906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b1561046e576040517fae6393290000000000000000000000000000000000000000000000000000000081526001600160a01b03938416600482015293909216602484015260448301525f908290606490829084905af18015610463576169025750565b615fe790614d85565b506001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001690821614616821565b50505050565b9392916001600160a01b03809216803b1561046e576040517fae6393290000000000000000000000000000000000000000000000000000000081525f816064818388819c16968760048401523060248401528a60448401525af1801561046357616a2a575b508086913b15616a265781906024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083528960048401525af18015616a1b57616a03575b50615fe793945016616a3d565b616a0d8691614d85565b616a1757846169f6565b8480fd5b6040513d88823e3d90fd5b5080fd5b616a35919650614d85565b5f945f6169ab565b814710616a8d575f8080936001600160a01b038294165af1616a5d615b23565b5015616a6557565b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fcd786059000000000000000000000000000000000000000000000000000000005f523060045260245ffd5b80511561661457805190602001fd5b90616add5750805115616a6557805190602001fd5b81511580616b23575b616aee575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15616ae656fea26469706673582212204fe24a79fbaf5da03fedc54a46df276f44033a70bbbe19d61ddfaec46bd6061764736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x72 JUMPI JUMPDEST CALLDATASIZE ISZERO PUSH2 0x18 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x4A JUMPI STOP JUMPDEST PUSH32 0x540DDF600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x26B3D95 EQ PUSH2 0x4B57 JUMPI DUP1 PUSH4 0x86FAD66 EQ PUSH2 0x4763 JUMPI DUP1 PUSH4 0x8C04793 EQ PUSH2 0x4645 JUMPI DUP1 PUSH4 0xC3B846F EQ PUSH2 0x45A6 JUMPI DUP1 PUSH4 0xCA078EC EQ PUSH2 0x450E JUMPI DUP1 PUSH4 0xF710888 EQ PUSH2 0x43CD JUMPI DUP1 PUSH4 0x107C279F EQ PUSH2 0x438A JUMPI DUP1 PUSH4 0x175D4408 EQ PUSH2 0x42AB JUMPI DUP1 PUSH4 0x19C6989F EQ PUSH2 0x3C86 JUMPI DUP1 PUSH4 0x1BBF2E23 EQ PUSH2 0x3C43 JUMPI DUP1 PUSH4 0x1D56798D EQ PUSH2 0x3AA8 JUMPI DUP1 PUSH4 0x22717DB2 EQ PUSH2 0x3A3A JUMPI DUP1 PUSH4 0x23B39241 EQ PUSH2 0x3838 JUMPI DUP1 PUSH4 0x339F3838 EQ PUSH2 0x381E JUMPI DUP1 PUSH4 0x3A1B05DE EQ PUSH2 0x32E7 JUMPI DUP1 PUSH4 0x3EBC54E5 EQ PUSH2 0x316A JUMPI DUP1 PUSH4 0x452DB952 EQ PUSH2 0x2FE6 JUMPI DUP1 PUSH4 0x45D132FE EQ PUSH2 0x2FAE JUMPI DUP1 PUSH4 0x4AEECCA9 EQ PUSH2 0x2F94 JUMPI DUP1 PUSH4 0x4B59D17C EQ PUSH2 0x2F10 JUMPI DUP1 PUSH4 0x51682750 EQ PUSH2 0x2DFD JUMPI DUP1 PUSH4 0x53D0BB98 EQ PUSH2 0x2D48 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x2C0B JUMPI DUP1 PUSH4 0x58307E44 EQ PUSH2 0x2BA2 JUMPI DUP1 PUSH4 0x5B343791 EQ PUSH2 0x27AD JUMPI DUP1 PUSH4 0x5E01EB5A EQ PUSH2 0x2768 JUMPI DUP1 PUSH4 0x5F9815FF EQ PUSH2 0x2625 JUMPI DUP1 PUSH4 0x64C90707 EQ PUSH2 0x25CD JUMPI DUP1 PUSH4 0x68A24FE0 EQ PUSH2 0x22D2 JUMPI DUP1 PUSH4 0x68D5E16A EQ PUSH2 0x20B5 JUMPI DUP1 PUSH4 0x724DBA33 EQ PUSH2 0x1F9C JUMPI DUP1 PUSH4 0x72657D17 EQ PUSH2 0x1E51 JUMPI DUP1 PUSH4 0x750283BC EQ PUSH2 0x1DD4 JUMPI DUP1 PUSH4 0x7AE30960 EQ PUSH2 0x1DBA JUMPI DUP1 PUSH4 0x7B03C7BA EQ PUSH2 0x1A8A JUMPI DUP1 PUSH4 0x82BF2B24 EQ PUSH2 0x19B6 JUMPI DUP1 PUSH4 0x82CD54FB EQ PUSH2 0x1776 JUMPI DUP1 PUSH4 0x90AA9F76 EQ PUSH2 0x175C JUMPI DUP1 PUSH4 0x94E86EF8 EQ PUSH2 0x15D1 JUMPI DUP1 PUSH4 0x9DE90518 EQ PUSH2 0x13B2 JUMPI DUP1 PUSH4 0xAAF51EA3 EQ PUSH2 0x1398 JUMPI DUP1 PUSH4 0xAC9650D8 EQ PUSH2 0x1354 JUMPI DUP1 PUSH4 0xAD6D59F3 EQ PUSH2 0x12AE JUMPI DUP1 PUSH4 0xB037ED36 EQ PUSH2 0x114A JUMPI DUP1 PUSH4 0xB24BD571 EQ PUSH2 0x1000 JUMPI DUP1 PUSH4 0xB29A62A7 EQ PUSH2 0xFA4 JUMPI DUP1 PUSH4 0xB3B0A7A7 EQ PUSH2 0xF9B JUMPI DUP1 PUSH4 0xBE5AE841 EQ PUSH2 0xF46 JUMPI DUP1 PUSH4 0xBEB91FEB EQ PUSH2 0xE2E JUMPI DUP1 PUSH4 0xBF6EE3FD EQ PUSH2 0xC95 JUMPI DUP1 PUSH4 0xC08BC851 EQ PUSH2 0xBFD JUMPI DUP1 PUSH4 0xC330C7BE EQ PUSH2 0xA36 JUMPI DUP1 PUSH4 0xC3EC0EFC EQ PUSH2 0x97D JUMPI DUP1 PUSH4 0xD3A5152A EQ PUSH2 0x940 JUMPI DUP1 PUSH4 0xDA001F7D EQ PUSH2 0x7AF JUMPI DUP1 PUSH4 0xE178073E EQ PUSH2 0x761 JUMPI DUP1 PUSH4 0xE7326DEF EQ PUSH2 0x610 JUMPI DUP1 PUSH4 0xECB2182C EQ PUSH2 0x472 JUMPI PUSH4 0xEFD85F14 SUB PUSH2 0xE JUMPI CALLVALUE PUSH2 0x46E JUMPI PUSH2 0x30D CALLDATASIZE PUSH2 0x4F2D JUMP JUMPDEST PUSH2 0x315 PUSH2 0x61D8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH2 0x32A PUSH1 0x20 DUP3 ADD PUSH2 0x559F JUMP JUMPDEST PUSH2 0x333 DUP3 PUSH2 0x559F JUMP JUMPDEST SWAP3 PUSH2 0x341 PUSH1 0x40 DUP5 ADD DUP5 PUSH2 0x55B3 JUMP JUMPDEST SWAP1 SWAP4 PUSH1 0x80 DUP2 ADD CALLDATALOAD SWAP4 PUSH1 0x5 DUP6 LT ISZERO PUSH2 0x46E JUMPI DUP4 PUSH2 0x3AC PUSH2 0x3ED SWAP7 PUSH1 0x60 DUP6 PUSH2 0x397 PUSH0 SWAP13 SWAP12 PUSH2 0x387 SWAP10 DUP8 DUP16 SWAP15 PUSH2 0x37A PUSH1 0xC0 PUSH2 0x3B3 SWAP14 ADD DUP8 PUSH2 0x5607 JUMP JUMPDEST SWAP11 SWAP1 SWAP12 PUSH1 0x40 MLOAD SWAP15 DUP16 PUSH2 0x4DB6 JUMP JUMPDEST AND DUP14 MSTORE AND PUSH1 0x20 DUP13 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x4E45 JUMP JUMPDEST PUSH1 0x40 DUP10 ADD MSTORE ADD CALLDATALOAD PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0x80 DUP7 ADD PUSH2 0x58EB JUMP JUMPDEST CALLDATASIZE SWAP2 PUSH2 0x4EDC JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x4AF29EC400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x5CA0 JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH0 SWAP2 PUSH2 0x439 JUMPI JUMPDEST POP PUSH2 0x435 SWAP1 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x5021 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST SWAP1 POP PUSH2 0x435 SWAP3 POP PUSH2 0x45C SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x454 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x57EB JUMP JUMPDEST SWAP1 SWAP3 PUSH2 0x424 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x528 PUSH2 0x4A1 PUSH0 PUSH2 0x51A DUP2 PUSH2 0x564 PUSH2 0x489 CALLDATASIZE PUSH2 0x53EA JUMP JUMPDEST SWAP8 SWAP4 SWAP11 SWAP3 SWAP10 SWAP1 SWAP5 SWAP2 PUSH2 0x49A CALLER PUSH2 0x6169 JUMP JUMPDEST SWAP11 DUP4 PUSH2 0x64C6 JUMP JUMPDEST SWAP8 SWAP1 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP12 DUP13 SWAP7 PUSH1 0x40 MLOAD SWAP5 PUSH2 0x4BC DUP7 PUSH2 0x4D69 JUMP JUMPDEST CALLER DUP7 MSTORE PUSH1 0x20 SWAP15 DUP16 SWAP2 AND SWAP1 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x7B03C7BA00000000000000000000000000000000000000000000000000000000 DUP13 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x59CB JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x4E0A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP12 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH2 0x5B7 SWAP3 PUSH2 0x5AF SWAP2 PUSH0 SWAP2 PUSH2 0x5EE JUMPI JUMPDEST POP DUP6 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x5A29 JUMP JUMPDEST POP SWAP1 POP PUSH2 0x5B0F JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x5C6 JUMPI JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH0 PUSH32 0x0 TSTORE PUSH2 0x5BE JUMP JUMPDEST PUSH2 0x60A SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x602 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x5579 JUMP JUMPDEST DUP7 PUSH2 0x5A0 JUMP JUMPDEST PUSH2 0x51A PUSH2 0x6B6 PUSH0 DUP1 PUSH2 0x6F2 PUSH2 0x641 PUSH2 0x627 CALLDATASIZE PUSH2 0x53EA JUMP JUMPDEST SWAP2 PUSH2 0x63A SWAP12 SWAP6 SWAP12 SWAP11 SWAP5 SWAP7 SWAP2 SWAP4 SWAP11 CALLER PUSH2 0x6169 JUMP JUMPDEST SWAP11 DUP13 PUSH2 0x64C6 JUMP JUMPDEST POP SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x659 DUP6 PUSH2 0x4D69 JUMP JUMPDEST CALLER DUP6 MSTORE DUP8 PUSH1 0x20 SWAP14 AND DUP14 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x2 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x7B03C7BA00000000000000000000000000000000000000000000000000000000 DUP12 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x59CB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP11 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0x738 SWAP2 PUSH0 SWAP2 PUSH2 0x747 JUMPI JUMPDEST POP DUP4 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x5A29 JUMP JUMPDEST POP POP SWAP1 PUSH2 0x5C6 JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x75B SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x602 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP5 PUSH2 0x729 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x7A5 PUSH2 0x791 PUSH2 0x780 PUSH2 0x4CFD JUMP JUMPDEST PUSH2 0x788 PUSH2 0x4D29 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x64C6 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP3 PUSH1 0x40 DUP5 MSTORE PUSH1 0x40 DUP5 ADD SWAP1 PUSH2 0x4F5F JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x7C8 PUSH2 0x4CFD JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x46E JUMPI PUSH2 0x7E9 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4E93 JUMP JUMPDEST SWAP1 PUSH2 0x7F2 PUSH2 0x4D3F JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x46E JUMPI PUSH2 0x8D0 PUSH0 SWAP3 SWAP2 PUSH2 0x51A PUSH2 0x894 PUSH2 0x820 PUSH2 0x81A DUP8 SWAP7 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4F12 JUMP JUMPDEST SWAP4 PUSH2 0x6169 JUMP JUMPDEST SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x837 DUP4 PUSH2 0x4D69 JUMP JUMPDEST ADDRESS DUP4 MSTORE DUP6 PUSH1 0x20 SWAP12 AND DUP12 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE DUP7 PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xEFD85F1400000000000000000000000000000000000000000000000000000000 DUP12 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x586E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP11 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0x916 SWAP2 PUSH0 SWAP2 PUSH2 0x926 JUMPI JUMPDEST POP DUP4 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x57EB JUMP JUMPDEST POP SWAP2 SWAP1 POP PUSH2 0x5C6 JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x93A SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x602 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP5 PUSH2 0x907 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x995 PUSH2 0x61AB JUMP JUMPDEST PUSH2 0x9D5 PUSH1 0x20 PUSH2 0x9A2 PUSH2 0x5DCC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x68A24FE000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x5A7E JUMP JUMPDEST SUB DUP2 PUSH0 ADDRESS GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0xA0B JUMPI JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0xA2F JUMPI JUMPDEST PUSH2 0xA21 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x46E JUMPI DUP1 PUSH2 0x9E6 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xA17 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0xA4F PUSH2 0x4CFD JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x46E JUMPI PUSH2 0xA70 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4E93 JUMP JUMPDEST SWAP2 PUSH2 0xA79 PUSH2 0x4D13 JUMP JUMPDEST SWAP2 PUSH1 0x84 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x46E JUMPI PUSH0 SWAP4 PUSH2 0x51A PUSH2 0xB1D DUP7 SWAP5 PUSH2 0xAA8 PUSH2 0xAA2 PUSH2 0xB5A SWAP7 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4F12 JUMP JUMPDEST SWAP8 PUSH2 0x6169 JUMP JUMPDEST SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 PUSH1 0x40 MLOAD SWAP4 PUSH2 0xAC0 DUP6 PUSH2 0x4D69 JUMP JUMPDEST ADDRESS DUP6 MSTORE AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x3 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xB24BD57100000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x59CB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH2 0x435 SWAP3 PUSH2 0xBA6 SWAP2 PUSH0 SWAP2 PUSH2 0xBE3 JUMPI JUMPDEST POP PUSH1 0x20 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x5A29 JUMP JUMPDEST SWAP1 SWAP4 SWAP2 SWAP3 PUSH2 0xBBB JUMPI JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x53BF JUMP JUMPDEST PUSH0 PUSH32 0x0 TSTORE PUSH2 0xBAF JUMP JUMPDEST PUSH2 0xBF7 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x602 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP5 PUSH2 0xB96 JUMP JUMPDEST PUSH2 0x51A PUSH2 0x6B6 PUSH0 DUP1 PUSH2 0x8D0 PUSH2 0xC11 CALLDATASIZE PUSH2 0x4F92 JUMP JUMPDEST PUSH2 0xC21 SWAP10 SWAP4 SWAP2 SWAP9 SWAP3 SWAP5 SWAP10 CALLER PUSH2 0x6169 JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 PUSH1 0x40 MLOAD SWAP4 PUSH2 0xC38 DUP6 PUSH2 0x4D69 JUMP JUMPDEST CALLER DUP6 MSTORE DUP8 PUSH1 0x20 SWAP14 AND DUP14 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x5B34379100000000000000000000000000000000000000000000000000000000 DUP12 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x586E JUMP JUMPDEST PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0xCA9 PUSH2 0x4CFD JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x24 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x46E JUMPI PUSH2 0xCCB SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4E93 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP3 DUP4 ISZERO ISZERO DUP1 SWAP5 SUB PUSH2 0x46E JUMPI PUSH1 0x64 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x46E JUMPI PUSH0 SWAP3 PUSH2 0x51A PUSH2 0xD7A DUP6 SWAP5 PUSH2 0xCFF PUSH2 0xDB7 SWAP6 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4F12 JUMP JUMPDEST PUSH2 0xD08 CALLER PUSH2 0x6169 JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 PUSH1 0x40 MLOAD SWAP5 PUSH2 0xD20 DUP7 PUSH2 0x4D69 JUMP JUMPDEST CALLER DUP7 MSTORE AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD MSTORE DUP8 PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x3 PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x5B34379100000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x586E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0xE14 JUMPI JUMPDEST POP PUSH2 0xDEF JUMPI STOP JUMPDEST PUSH0 PUSH32 0x0 TSTORE STOP JUMPDEST PUSH2 0xE27 SWAP1 RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x602 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST POP DUP2 PUSH2 0xDE8 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0xE46 PUSH2 0x61AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF19 JUMPI PUSH2 0xEC2 SWAP2 PUSH0 SWAP2 PUSH1 0x40 MSTORE PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x82CD54FB00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP5 PUSH1 0x4 DUP5 ADD MSTORE DUP5 PUSH1 0x24 DUP5 ADD MSTORE DUP5 PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x80 PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x84 DUP4 ADD SWAP1 PUSH2 0x4F5F JUMP JUMPDEST SUB DUP2 DUP4 ADDRESS GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0xEF7 JUMPI PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH2 0xF12 SWAP1 RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xF0A DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x578F JUMP JUMPDEST POP DUP1 PUSH2 0x9E6 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH1 0x20 PUSH2 0xF6E PUSH2 0xF59 CALLDATASIZE PUSH2 0x5313 JUMP JUMPDEST PUSH2 0xF61 PUSH2 0x61AB JUMP JUMPDEST PUSH2 0xF69 PUSH2 0x61D8 JUMP JUMPDEST PUSH2 0x663C JUMP JUMPDEST POP POP PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0xFBD PUSH2 0x4CFD JUMP JUMPDEST PUSH2 0xFC5 PUSH2 0x4D29 JUMP JUMPDEST PUSH2 0xFCD PUSH2 0x4D3F JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x46E JUMPI PUSH1 0x20 SWAP4 PUSH2 0xFF4 PUSH2 0x5BE SWAP5 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x5139 JUMP JUMPDEST SWAP4 SWAP1 SWAP3 PUSH1 0x64 CALLDATALOAD SWAP3 PUSH2 0x608B JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH2 0x100E CALLDATASIZE PUSH2 0x4F2D JUMP JUMPDEST PUSH2 0x1016 PUSH2 0x61D8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x102A PUSH1 0x20 DUP4 ADD PUSH2 0x559F JUMP JUMPDEST PUSH2 0x1033 DUP4 PUSH2 0x559F JUMP JUMPDEST SWAP2 PUSH2 0x1041 PUSH1 0x40 DUP6 ADD DUP6 PUSH2 0x55B3 JUMP JUMPDEST SWAP5 SWAP1 PUSH1 0x80 DUP3 ADD CALLDATALOAD SWAP4 PUSH1 0x4 DUP6 LT ISZERO PUSH2 0x46E JUMPI DUP4 PUSH2 0x3AC PUSH2 0x10D8 SWAP7 PUSH2 0x1090 PUSH2 0x109E SWAP6 PUSH0 SWAP12 PUSH1 0x60 DUP10 DUP8 DUP16 SWAP15 PUSH2 0x37A PUSH1 0xC0 PUSH2 0x1079 SWAP15 ADD DUP5 PUSH2 0x5607 JUMP JUMPDEST AND DUP14 MSTORE AND PUSH1 0x20 DUP13 ADD MSTORE ADD CALLDATALOAD PUSH1 0x40 DUP11 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x4E45 JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0x80 DUP7 ADD PUSH2 0x59B2 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x2145789700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x5D10 JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH0 SWAP2 PUSH2 0x1120 JUMPI JUMPDEST POP PUSH2 0x435 SWAP1 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x53BF JUMP JUMPDEST SWAP1 POP PUSH2 0x435 SWAP3 POP PUSH2 0x1143 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x113B DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x5A29 JUMP JUMPDEST SWAP1 SWAP3 PUSH2 0x110F JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x1163 PUSH2 0x4CFD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP1 DUP1 PUSH1 0x20 SWAP4 PUSH32 0x5F9815FF00000000000000000000000000000000000000000000000000000000 DUP6 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x64 DUP4 ADD MSTORE PUSH1 0x64 DUP3 MSTORE PUSH1 0xA0 DUP3 ADD SWAP1 DUP3 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0xF19 JUMPI DUP2 PUSH0 SWAP2 DUP2 PUSH1 0x40 MSTORE PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP6 PUSH1 0xA4 DUP7 ADD MSTORE DUP2 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60 DUP8 PUSH2 0x1229 PUSH1 0xC4 DUP3 ADD DUP3 PUSH2 0x4FFC JUMP JUMPDEST SUB ADD SWAP3 PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x463 JUMPI PUSH2 0x1272 SWAP3 PUSH0 SWAP3 PUSH2 0x1287 JUMPI JUMPDEST POP POP DUP3 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x578F JUMP JUMPDEST SWAP1 PUSH2 0x435 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x4F5F JUMP JUMPDEST PUSH2 0x12A7 SWAP3 POP PUSH1 0xA0 SWAP1 RETURNDATASIZE SWAP1 DUP2 PUSH0 DUP6 RETURNDATACOPY PUSH2 0x129F DUP3 DUP6 PUSH2 0x4E0A JUMP JUMPDEST ADD ADD SWAP1 PUSH2 0x5579 JUMP JUMPDEST DUP4 DUP1 PUSH2 0x1262 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x12C6 PUSH2 0x61AB JUMP JUMPDEST PUSH2 0x1305 PUSH0 PUSH2 0x12D2 PUSH2 0x57B5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x7B03C7BA00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x59CB JUMP JUMPDEST SUB DUP2 DUP4 ADDRESS GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0x133A JUMPI PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH2 0x134D SWAP1 RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x113B DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST POP POP PUSH2 0x9E6 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x46E JUMPI PUSH2 0x138C PUSH2 0x1386 PUSH2 0x435 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x5108 JUMP JUMPDEST SWAP1 PUSH2 0x5F36 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x5167 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH1 0x20 PUSH2 0x5BE PUSH2 0x5ED6 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH2 0x13CC PUSH2 0x13C3 CALLDATASIZE PUSH2 0x504A JUMP JUMPDEST SWAP3 SWAP2 SWAP4 SWAP1 PUSH2 0x6169 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH32 0x0 AND SWAP2 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND SWAP3 DUP4 PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP2 PUSH2 0x15AF JUMPI JUMPDEST POP MLOAD SWAP5 PUSH2 0x144B DUP7 PUSH2 0x5981 JUMP JUMPDEST SWAP6 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x158A JUMPI POP POP PUSH0 SWAP3 PUSH2 0x51A PUSH2 0x14CC DUP9 DUP7 SWAP6 PUSH2 0x1508 SWAP6 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1473 DUP5 PUSH2 0x4D69 JUMP JUMPDEST ADDRESS DUP5 MSTORE PUSH1 0x20 SWAP11 DUP12 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE DUP7 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xEFD85F1400000000000000000000000000000000000000000000000000000000 DUP11 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x586E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0x152C SWAP2 PUSH0 SWAP2 PUSH2 0x1570 JUMPI JUMPDEST POP DUP3 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x57EB JUMP JUMPDEST POP POP SWAP2 PUSH2 0x1548 JUMPI JUMPDEST PUSH2 0x435 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x4F5F JUMP JUMPDEST PUSH0 PUSH32 0x0 TSTORE PUSH2 0x1534 JUMP JUMPDEST PUSH2 0x1584 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x602 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP5 PUSH2 0x151D JUMP JUMPDEST DUP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x15A8 PUSH1 0x1 SWAP4 DUP12 PUSH2 0x5B0F JUMP JUMPDEST MSTORE ADD PUSH2 0x144E JUMP JUMPDEST PUSH2 0x15CB SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x15C3 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x58F7 JUMP JUMPDEST DUP7 PUSH2 0x143F JUMP JUMPDEST PUSH2 0x15DA CALLDATASIZE PUSH2 0x5346 JUMP JUMPDEST SWAP5 SWAP1 SWAP6 SWAP4 SWAP2 SWAP4 CALLER PUSH2 0x15EA SWAP1 PUSH2 0x6169 JUMP JUMPDEST SWAP8 PUSH1 0x40 MLOAD SWAP10 PUSH2 0x15F8 DUP12 PUSH2 0x4D99 JUMP JUMPDEST CALLER DUP12 MSTORE PUSH1 0x20 DUP12 ADD PUSH1 0x1 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x40 DUP12 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 DUP11 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP10 ADD MSTORE PUSH1 0xA0 DUP9 ADD MSTORE PUSH1 0xC0 DUP8 ADD MSTORE PUSH1 0xE0 DUP7 ADD MSTORE ISZERO ISZERO PUSH2 0x100 DUP6 ADD MSTORE CALLDATASIZE SWAP1 PUSH2 0x164F SWAP3 PUSH2 0x4EDC JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE PUSH1 0x40 MLOAD PUSH32 0x68A24FE000000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 PUSH2 0x168E SWAP1 PUSH1 0x24 DUP4 ADD PUSH2 0x5A7E JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE PUSH2 0x16A0 SWAP1 DUP4 PUSH2 0x4E0A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP3 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD PUSH1 0x20 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD PUSH2 0x16DD SWAP2 PUSH2 0x4FFC JUMP JUMPDEST SUB DUP3 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 DUP2 GAS PUSH0 SWAP5 DUP6 SWAP2 CALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP3 PUSH2 0x1740 JUMPI JUMPDEST POP PUSH1 0x20 DUP3 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x46E JUMPI PUSH1 0x20 DUP1 SWAP3 ADD MLOAD SWAP1 PUSH2 0x5C6 JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x1755 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x602 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST SWAP1 DUP3 PUSH2 0x171F JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH1 0x20 PUSH2 0x5BE PUSH2 0x5E76 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x178F PUSH2 0x4CFD JUMP JUMPDEST PUSH2 0x1797 PUSH2 0x4D29 JUMP JUMPDEST SWAP1 PUSH1 0x64 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x46E JUMPI PUSH2 0x17BC PUSH2 0x1832 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4E93 JUMP JUMPDEST SWAP1 PUSH2 0x17C5 PUSH2 0x61AB JUMP JUMPDEST PUSH2 0x17CD PUSH2 0x61D8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 DUP2 PUSH32 0x0 AND SWAP4 PUSH1 0x40 MLOAD DUP1 SWAP7 DUP2 SWAP3 PUSH32 0xA07D604000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x44 CALLDATALOAD DUP11 DUP9 PUSH1 0x4 DUP7 ADD PUSH2 0x56FF JUMP JUMPDEST SUB DUP2 DUP4 DUP8 GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP5 PUSH2 0x199A JUMPI JUMPDEST POP DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP5 MSTORE AND PUSH1 0x4 DUP4 ADD MSTORE PUSH0 DUP3 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP3 PUSH2 0x197E JUMPI JUMPDEST POP PUSH0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x193A JUMPI PUSH2 0x18A1 DUP2 DUP7 PUSH2 0x5B0F JUMP JUMPDEST MLOAD SWAP1 DUP2 PUSH2 0x18B3 JUMPI JUMPDEST PUSH1 0x1 SWAP2 POP ADD PUSH2 0x188E JUMP JUMPDEST DUP3 PUSH2 0x18BE DUP3 DUP7 PUSH2 0x5B0F JUMP JUMPDEST MLOAD AND DUP6 EXTCODESIZE ISZERO PUSH2 0x46E JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP1 DUP9 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH0 DUP3 PUSH1 0x64 DUP2 DUP4 DUP10 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH1 0x1 SWAP3 PUSH2 0x192B JUMPI JUMPDEST POP PUSH2 0x18A9 JUMP JUMPDEST PUSH2 0x1934 SWAP1 PUSH2 0x4D85 JUMP JUMPDEST DUP8 PUSH2 0x1925 JUMP JUMPDEST PUSH2 0x435 DUP6 PUSH2 0x1947 DUP9 PUSH2 0x6470 JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x4F5F JUMP JUMPDEST PUSH2 0x1993 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x15C3 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST SWAP1 DUP6 PUSH2 0x188B JUMP JUMPDEST PUSH2 0x19AF SWAP2 SWAP5 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xF0A DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST SWAP3 DUP6 PUSH2 0x1846 JUMP JUMPDEST PUSH0 PUSH2 0x51A DUP2 PUSH2 0xB5A PUSH2 0x1A4D PUSH2 0x19CA CALLDATASIZE PUSH2 0x52AA JUMP JUMPDEST SWAP1 PUSH2 0x19DA SWAP9 SWAP5 SWAP3 SWAP6 SWAP4 SWAP9 CALLER PUSH2 0x6169 JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x19F2 DUP8 PUSH2 0x4D69 JUMP JUMPDEST CALLER DUP8 MSTORE AND PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x3 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x7B03C7BA00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x59CB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH2 0x1A98 CALLDATASIZE PUSH2 0x4F2D JUMP JUMPDEST PUSH2 0x1AA0 PUSH2 0x61AB JUMP JUMPDEST PUSH2 0x1AA8 PUSH2 0x61D8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x0 SWAP1 DUP4 DUP3 AND PUSH2 0x1AE4 DUP5 PUSH2 0x559F JUMP JUMPDEST SWAP5 PUSH2 0x1AEE DUP4 PUSH2 0x559F JUMP JUMPDEST PUSH2 0x1AFB PUSH1 0x40 DUP6 ADD DUP6 PUSH2 0x55B3 JUMP JUMPDEST SWAP8 SWAP1 SWAP2 PUSH1 0x80 DUP7 ADD CALLDATALOAD SWAP1 PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x46E JUMPI DUP5 PUSH2 0x3AC PUSH2 0x1B57 SWAP4 PUSH2 0x1090 PUSH0 SWAP8 PUSH2 0x1B8F SWAP15 PUSH2 0x1B2C DUP14 PUSH1 0xC0 DUP2 ADD SWAP1 PUSH2 0x5607 JUMP JUMPDEST SWAP7 SWAP1 SWAP8 DUP2 PUSH1 0x40 MLOAD SWAP12 PUSH2 0x1B3D DUP14 PUSH2 0x4DB6 JUMP JUMPDEST AND DUP12 MSTORE AND PUSH1 0x20 DUP11 ADD MSTORE PUSH1 0x60 DUP14 ADD CALLDATALOAD PUSH1 0x40 DUP11 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x4E45 JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP9 DUP2 SWAP3 PUSH32 0x2145789700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x5D10 JUMP JUMPDEST SUB DUP2 DUP4 DUP7 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP6 PUSH0 SWAP8 PUSH0 SWAP4 PUSH2 0x1D91 JUMPI JUMPDEST POP PUSH2 0x1BB1 SWAP1 PUSH2 0x559F JUMP JUMPDEST SWAP7 DUP2 PUSH1 0x40 MLOAD SWAP9 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP11 MSTORE AND PUSH1 0x4 DUP10 ADD MSTORE PUSH0 DUP9 PUSH1 0x24 DUP2 DUP8 GAS STATICCALL SWAP8 DUP9 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP9 PUSH2 0x1D75 JUMPI JUMPDEST POP SWAP2 SWAP6 PUSH1 0xA0 DUP6 ADD SWAP3 SWAP1 PUSH0 JUMPDEST DUP10 MLOAD DUP2 LT ISZERO PUSH2 0x1D30 JUMPI PUSH2 0x1C14 DUP2 DUP5 PUSH2 0x5B0F JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO PUSH2 0x1D27 JUMPI DUP5 PUSH2 0x1C27 DUP3 DUP14 PUSH2 0x5B0F JUMP JUMPDEST MLOAD AND PUSH2 0x1C32 DUP8 PUSH2 0x56F2 JUMP JUMPDEST DUP1 PUSH2 0x1CFC JUMPI JUMPDEST ISZERO PUSH2 0x1C7A JUMPI POP PUSH2 0x1C74 PUSH1 0x1 SWAP3 PUSH2 0x1C4D DUP11 PUSH2 0x559F JUMP JUMPDEST DUP12 PUSH32 0x0 PUSH2 0x6946 JUMP JUMPDEST ADD PUSH2 0x1C01 JUMP JUMPDEST PUSH2 0x1C83 DUP10 PUSH2 0x559F JUMP JUMPDEST DUP9 EXTCODESIZE ISZERO PUSH2 0x46E JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH0 DUP3 PUSH1 0x64 DUP2 DUP4 DUP12 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH1 0x1 SWAP3 PUSH2 0x1CED JUMPI JUMPDEST POP PUSH2 0x1C74 JUMP JUMPDEST PUSH2 0x1CF6 SWAP1 PUSH2 0x4D85 JUMP JUMPDEST DUP12 PUSH2 0x1CE7 JUMP JUMPDEST POP DUP6 PUSH32 0x0 AND DUP2 EQ PUSH2 0x1C38 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP PUSH2 0x1C74 JUMP JUMPDEST POP PUSH2 0x435 DUP9 PUSH2 0x1D46 PUSH2 0x1D41 DUP10 PUSH2 0x559F JUMP JUMPDEST PUSH2 0x6470 JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x53BF JUMP JUMPDEST PUSH2 0x1D8A SWAP2 SWAP9 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x15C3 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST SWAP7 DUP9 PUSH2 0x1BF6 JUMP JUMPDEST SWAP1 SWAP3 POP PUSH2 0x1DAE SWAP2 SWAP8 POP PUSH2 0x1BB1 SWAP7 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x113B DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST SWAP8 SWAP2 SWAP7 SWAP1 SWAP8 SWAP3 SWAP1 PUSH2 0x1BA7 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH1 0x20 PUSH2 0x5BE PUSH2 0x5E16 JUMP JUMPDEST PUSH2 0x1DDD CALLDATASIZE PUSH2 0x5346 JUMP JUMPDEST SWAP5 SWAP1 SWAP6 SWAP4 SWAP2 SWAP4 CALLER PUSH2 0x1DED SWAP1 PUSH2 0x6169 JUMP JUMPDEST SWAP8 PUSH1 0x40 MLOAD SWAP10 PUSH2 0x1DFB DUP12 PUSH2 0x4D99 JUMP JUMPDEST CALLER DUP12 MSTORE PUSH1 0x20 DUP12 ADD PUSH0 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x40 DUP12 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 DUP11 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x80 DUP10 ADD MSTORE PUSH1 0xA0 DUP9 ADD MSTORE PUSH1 0xC0 DUP8 ADD MSTORE PUSH1 0xE0 DUP7 ADD MSTORE ISZERO ISZERO PUSH2 0x100 DUP6 ADD MSTORE CALLDATASIZE SWAP1 PUSH2 0x164F SWAP3 PUSH2 0x4EDC JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x1E65 PUSH2 0x4CFD JUMP JUMPDEST PUSH2 0x1E6D PUSH2 0x4D29 JUMP JUMPDEST PUSH2 0x1E75 PUSH2 0x4EB1 JUMP JUMPDEST PUSH1 0xA4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x46E JUMPI PUSH0 PUSH2 0x1F30 PUSH2 0x1E9B DUP3 SWAP5 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4F12 JUMP JUMPDEST SWAP3 PUSH2 0x51A PUSH2 0x528 PUSH2 0x1EB9 PUSH2 0x1EAE CALLER PUSH2 0x6169 JUMP JUMPDEST SWAP9 PUSH1 0x44 CALLDATALOAD SWAP1 DUP12 PUSH2 0x64C6 JUMP JUMPDEST SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1ED0 DUP5 PUSH2 0x4D69 JUMP JUMPDEST CALLER DUP5 MSTORE DUP7 PUSH1 0x20 SWAP14 AND DUP14 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x2 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x5B34379100000000000000000000000000000000000000000000000000000000 DUP13 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x586E JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH2 0x5B7 SWAP3 PUSH2 0x1F7B SWAP2 PUSH0 SWAP2 PUSH2 0x1F82 JUMPI JUMPDEST POP DUP6 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x57EB JUMP JUMPDEST POP POP PUSH2 0x5B0F JUMP JUMPDEST PUSH2 0x1F96 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x602 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP7 PUSH2 0x1F6C JUMP JUMPDEST PUSH2 0x51A PUSH2 0x2034 PUSH0 DUP1 PUSH2 0x2070 PUSH2 0x1FB0 CALLDATASIZE PUSH2 0x4F92 JUMP JUMPDEST PUSH2 0x1FC1 SWAP10 SWAP4 SWAP2 SWAP10 SWAP9 SWAP3 SWAP5 SWAP9 CALLER PUSH2 0x6169 JUMP JUMPDEST SWAP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x1FD8 DUP6 PUSH2 0x4D69 JUMP JUMPDEST CALLER DUP6 MSTORE DUP8 PUSH1 0x20 SWAP13 AND DUP13 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE DUP8 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x5B34379100000000000000000000000000000000000000000000000000000000 DUP11 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x586E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0x152C SWAP2 PUSH0 SWAP2 PUSH2 0x1570 JUMPI POP DUP3 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x57EB JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH2 0x20C3 CALLDATASIZE PUSH2 0x5247 JUMP JUMPDEST PUSH2 0x20CC CALLER PUSH2 0x6169 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 SWAP4 PUSH32 0x3A1B05DE00000000000000000000000000000000000000000000000000000000 DUP6 DUP5 ADD MSTORE DUP5 PUSH1 0x24 DUP5 ADD MSTORE DUP4 PUSH2 0x2111 DUP3 PUSH2 0x4D55 JUMP JUMPDEST AND PUSH1 0x44 DUP5 ADD MSTORE DUP4 PUSH2 0x2123 DUP7 DUP4 ADD PUSH2 0x4D55 JUMP JUMPDEST AND PUSH1 0x64 DUP5 ADD MSTORE PUSH1 0x40 DUP2 ADD CALLDATALOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP3 CALLDATASIZE SUB ADD DUP2 SLT ISZERO PUSH2 0x46E JUMPI DUP2 ADD SWAP1 DUP6 DUP3 CALLDATALOAD SWAP3 ADD SWAP5 PUSH8 0xFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP5 GT PUSH2 0x46E JUMPI DUP4 PUSH1 0x5 SHL CALLDATASIZE SUB DUP8 SGT PUSH2 0x46E JUMPI PUSH2 0x21B8 DUP2 PUSH2 0x21F4 SWAP5 PUSH1 0x60 PUSH2 0x21A2 PUSH0 SWAP12 DUP13 SWAP10 PUSH1 0x80 PUSH1 0x84 DUP8 ADD MSTORE PUSH1 0xC4 DUP7 ADD SWAP2 PUSH2 0x5658 JUMP JUMPDEST SWAP2 ADD CALLDATALOAD PUSH1 0xA4 DUP4 ADD MSTORE SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x4E0A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP7 DUP8 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP12 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP4 PUSH2 0x22B6 JUMPI JUMPDEST POP DUP3 MLOAD DUP4 ADD SWAP4 PUSH1 0x80 DUP5 DUP3 DUP8 ADD SWAP7 SUB SLT PUSH2 0x46E JUMPI DUP1 DUP5 ADD MLOAD DUP4 DUP2 GT PUSH2 0x46E JUMPI DUP6 DUP3 PUSH2 0x2254 SWAP3 DUP8 ADD ADD PUSH2 0x572E JUMP JUMPDEST SWAP4 PUSH1 0x40 DUP2 ADD MLOAD SWAP6 PUSH1 0x60 DUP3 ADD MLOAD SWAP3 PUSH1 0x80 DUP4 ADD MLOAD SWAP6 DUP7 GT PUSH2 0x46E JUMPI PUSH2 0x435 SWAP6 PUSH2 0x227C SWAP4 ADD ADD PUSH2 0x572E JUMP JUMPDEST SWAP2 PUSH2 0x228E JUMPI JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP5 DUP6 PUSH2 0x5279 JUMP JUMPDEST PUSH0 PUSH32 0x0 TSTORE PUSH2 0x2282 JUMP JUMPDEST PUSH2 0x22CB SWAP2 SWAP4 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x602 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST SWAP2 DUP5 PUSH2 0x2228 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH2 0x22E0 CALLDATASIZE PUSH2 0x5313 JUMP JUMPDEST PUSH2 0x22E8 PUSH2 0x61AB JUMP JUMPDEST PUSH2 0x22F0 PUSH2 0x61D8 JUMP JUMPDEST PUSH2 0x22F9 DUP2 PUSH2 0x663C JUMP JUMPDEST PUSH2 0x2307 PUSH1 0x60 DUP6 SWAP4 SWAP6 ADD PUSH2 0x559F JUMP JUMPDEST SWAP1 PUSH2 0x2311 DUP4 PUSH2 0x559F JUMP JUMPDEST SWAP5 PUSH2 0x100 DUP5 ADD SWAP6 PUSH2 0x2321 DUP8 PUSH2 0x56F2 JUMP JUMPDEST DUP1 PUSH2 0x2598 JUMPI JUMPDEST ISZERO PUSH2 0x2415 JUMPI POP SWAP5 PUSH2 0x23A4 SWAP2 PUSH2 0x237F PUSH1 0x20 SWAP8 PUSH32 0x0 PUSH32 0x0 PUSH2 0x627A JUMP JUMPDEST PUSH2 0x2388 DUP6 PUSH2 0x559F JUMP JUMPDEST SWAP2 PUSH2 0x239E PUSH2 0x2398 PUSH1 0x80 DUP9 ADD PUSH2 0x559F JUMP JUMPDEST SWAP2 PUSH2 0x56F2 JUMP JUMPDEST SWAP3 PUSH2 0x6814 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP2 AND EQ PUSH2 0x2403 JUMPI JUMPDEST POP PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x1D41 PUSH2 0x240F SWAP2 PUSH2 0x559F JUMP JUMPDEST DUP3 PUSH2 0x23D7 JUMP JUMPDEST DUP2 PUSH2 0x2429 JUMPI JUMPDEST POP POP PUSH1 0x20 SWAP5 PUSH2 0x23A4 SWAP2 PUSH2 0x237F JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH32 0x0 AND SWAP2 DUP1 PUSH32 0x0 AND SWAP2 PUSH2 0x2483 DUP6 PUSH2 0x6236 JUMP JUMPDEST SWAP4 DUP1 EXTCODESIZE ISZERO PUSH2 0x46E JUMPI PUSH1 0x40 MLOAD PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE DUP5 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP5 DUP3 AND PUSH1 0x44 DUP7 ADD MSTORE SWAP2 DUP8 AND AND PUSH1 0x64 DUP5 ADD MSTORE PUSH0 SWAP1 DUP4 SWAP1 PUSH1 0x84 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP4 PUSH1 0x20 SWAP4 PUSH2 0x2549 SWAP4 PUSH2 0x2589 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP11 PUSH1 0x4 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0x255E JUMPI JUMPDEST DUP1 PUSH2 0x241B JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2582 JUMPI JUMPDEST PUSH2 0x2574 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x46E JUMPI DUP6 PUSH2 0x2558 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x256A JUMP JUMPDEST PUSH2 0x2592 SWAP1 PUSH2 0x4D85 JUMP JUMPDEST DUP11 PUSH2 0x24FC JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP1 DUP6 AND EQ PUSH2 0x2327 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x25E5 PUSH2 0x61AB JUMP JUMPDEST PUSH2 0x9D5 PUSH1 0x20 PUSH2 0x25F2 PUSH2 0x5DCC JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xBE5AE84100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x5A7E JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x263E PUSH2 0x4CFD JUMP JUMPDEST PUSH2 0x2646 PUSH2 0x4D29 JUMP JUMPDEST PUSH2 0x264E PUSH2 0x61D8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH32 0x0 AND PUSH1 0x40 MLOAD SWAP3 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP5 AND PUSH1 0x4 DUP5 ADD MSTORE PUSH0 DUP4 PUSH1 0x24 DUP2 DUP5 GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x463 JUMPI PUSH0 PUSH2 0x26CF PUSH2 0x270A SWAP7 DUP3 SWAP7 DUP4 SWAP2 PUSH2 0x274E JUMPI JUMPDEST POP MLOAD PUSH2 0x5981 JUMP JUMPDEST SWAP4 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xA07D604000000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x44 CALLDATALOAD SWAP2 PUSH1 0x4 DUP7 ADD PUSH2 0x56FF JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0x435 SWAP2 PUSH0 SWAP2 PUSH2 0x2734 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x4F5F JUMP JUMPDEST PUSH2 0x2748 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xF0A DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP3 PUSH2 0x271F JUMP JUMPDEST PUSH2 0x2762 SWAP2 POP RETURNDATASIZE DUP1 DUP6 DUP4 RETURNDATACOPY PUSH2 0x15C3 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP9 PUSH2 0x26C8 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH1 0x20 PUSH32 0x0 TLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH2 0x27BB CALLDATASIZE PUSH2 0x4F2D JUMP JUMPDEST PUSH2 0x27C3 PUSH2 0x61AB JUMP JUMPDEST PUSH2 0x27CB PUSH2 0x61D8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 DUP2 DUP2 AND SWAP3 PUSH1 0x20 SWAP1 DUP2 DUP2 ADD SWAP1 PUSH2 0x2808 DUP3 PUSH2 0x559F JUMP JUMPDEST SWAP6 PUSH2 0x2812 DUP3 PUSH2 0x559F JUMP JUMPDEST SWAP7 PUSH2 0x2820 PUSH1 0x40 DUP5 ADD DUP5 PUSH2 0x55B3 JUMP JUMPDEST SWAP2 SWAP1 SWAP9 PUSH1 0x80 DUP6 ADD CALLDATALOAD SWAP2 PUSH1 0x5 DUP4 LT ISZERO PUSH2 0x46E JUMPI DUP10 PUSH2 0x3AC PUSH2 0x2864 SWAP5 PUSH2 0x2873 PUSH2 0x28C3 SWAP15 PUSH0 SWAP9 DUP14 DUP7 PUSH2 0x288B SWAP10 PUSH2 0x2857 DUP16 PUSH1 0xC0 DUP2 ADD SWAP1 PUSH2 0x5607 JUMP JUMPDEST SWAP10 SWAP1 SWAP11 PUSH1 0x40 MLOAD SWAP14 DUP15 PUSH2 0x4DB6 JUMP JUMPDEST AND DUP13 MSTORE AND SWAP1 DUP11 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x4E45 JUMP JUMPDEST PUSH1 0x40 DUP8 ADD MSTORE PUSH1 0x60 DUP10 ADD CALLDATALOAD PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0x80 DUP7 ADD PUSH2 0x58EB JUMP JUMPDEST PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP10 DUP2 SWAP3 PUSH32 0x4AF29EC400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x5CA0 JUMP JUMPDEST SUB DUP2 DUP4 DUP6 GAS CALL SWAP6 DUP7 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP4 PUSH0 SWAP9 PUSH0 SWAP9 PUSH2 0x2B79 JUMPI JUMPDEST POP PUSH2 0x28E5 SWAP1 PUSH2 0x559F JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD SWAP2 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP2 PUSH2 0x2B5F JUMPI JUMPDEST POP SWAP7 SWAP8 PUSH1 0xA0 DUP5 ADD SWAP8 SWAP1 PUSH0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x2B1E JUMPI DUP4 PUSH2 0x2948 DUP3 DUP6 PUSH2 0x5B0F JUMP JUMPDEST MLOAD AND PUSH2 0x2954 DUP3 DUP10 PUSH2 0x5B0F JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO PUSH2 0x2AB1 JUMPI PUSH2 0x2965 DUP13 PUSH2 0x56F2 JUMP JUMPDEST DUP1 PUSH2 0x2AF3 JUMPI JUMPDEST ISZERO PUSH2 0x29A5 JUMPI POP SWAP1 PUSH2 0x299F PUSH1 0x1 SWAP3 DUP12 PUSH32 0x0 PUSH2 0x627A JUMP JUMPDEST ADD PUSH2 0x2934 JUMP JUMPDEST SWAP1 DUP6 PUSH32 0x0 AND SWAP1 PUSH2 0x29D3 DUP10 PUSH2 0x559F JUMP JUMPDEST PUSH2 0x29DC DUP3 PUSH2 0x6236 JUMP JUMPDEST DUP4 EXTCODESIZE ISZERO PUSH2 0x46E JUMPI PUSH1 0x40 MLOAD PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE DUP11 DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE SWAP1 DUP5 AND PUSH1 0x64 DUP3 ADD MSTORE SWAP3 SWAP2 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x84 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH2 0x2A9D SWAP4 DUP13 SWAP4 PUSH2 0x2AE4 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP3 DUP4 SWAP3 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB DUP2 PUSH0 DUP11 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x463 JUMPI DUP10 SWAP2 PUSH2 0x2ABB JUMPI JUMPDEST POP POP PUSH1 0x1 SWAP1 PUSH2 0x299F JUMP JUMPDEST DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2ADD JUMPI JUMPDEST PUSH2 0x2ACE DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x46E JUMPI DUP8 DUP13 PUSH2 0x2AB1 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2AC4 JUMP JUMPDEST PUSH2 0x2AED SWAP1 PUSH2 0x4D85 JUMP JUMPDEST DUP16 PUSH2 0x2A52 JUMP JUMPDEST POP DUP6 PUSH32 0x0 AND DUP2 EQ PUSH2 0x296B JUMP JUMPDEST POP DUP6 PUSH2 0x435 DUP12 PUSH2 0x2B30 PUSH2 0x1D41 DUP10 PUSH2 0x559F JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x5021 JUMP JUMPDEST PUSH2 0x2B73 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x15C3 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP10 PUSH2 0x2929 JUMP JUMPDEST SWAP1 SWAP8 POP PUSH2 0x2B96 SWAP2 SWAP9 POP PUSH2 0x28E5 SWAP5 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x454 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST SWAP9 SWAP2 SWAP5 SWAP1 SWAP9 SWAP8 SWAP1 PUSH2 0x28DB JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x2C07 PUSH1 0x40 MLOAD PUSH2 0x4D2 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x20 DUP2 MSTORE PUSH2 0x2BCD DUP2 PUSH2 0x4DEE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH1 0x40 MLOAD PUSH0 PUSH0 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x1 SHR SWAP2 PUSH1 0x1 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0x2D3E JUMPI JUMPDEST PUSH1 0x20 SWAP5 DUP6 DUP6 LT DUP5 EQ PUSH2 0x2D11 JUMPI DUP6 DUP8 SWAP5 DUP7 DUP7 MSTORE SWAP2 DUP3 PUSH0 EQ PUSH2 0x2CD3 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x2C7A JUMPI JUMPDEST POP PUSH2 0x2C66 SWAP3 POP SUB DUP4 PUSH2 0x4E0A JUMP JUMPDEST PUSH2 0x435 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST PUSH0 DUP1 DUP1 MSTORE DUP6 SWAP3 POP SWAP1 PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 JUMPDEST DUP6 DUP4 LT PUSH2 0x2CBB JUMPI POP POP PUSH2 0x2C66 SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x2C59 JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x2CA4 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0x2C66 SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0x2C59 SWAP1 POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP3 PUSH1 0x7F AND SWAP3 PUSH2 0x2C35 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH2 0x2D79 PUSH2 0x2D72 PUSH0 DUP1 PUSH2 0x6F2 PUSH2 0x894 PUSH2 0x51A PUSH2 0x2D67 CALLDATASIZE PUSH2 0x51E8 JUMP JUMPDEST SWAP6 SWAP4 SWAP11 SWAP3 SWAP10 SWAP1 PUSH2 0x6169 JUMP JUMPDEST SWAP9 DUP11 PUSH2 0x64C6 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x2D90 DUP4 PUSH2 0x4D69 JUMP JUMPDEST ADDRESS DUP4 MSTORE DUP6 PUSH1 0x20 SWAP12 AND DUP12 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x2 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xB24BD57100000000000000000000000000000000000000000000000000000000 DUP12 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x59CB JUMP JUMPDEST PUSH2 0x51A PUSH2 0x2034 PUSH0 DUP1 PUSH2 0x2E94 PUSH2 0x2E11 CALLDATASIZE PUSH2 0x52AA JUMP JUMPDEST PUSH2 0x2E21 SWAP10 SWAP4 SWAP5 SWAP9 SWAP3 SWAP2 SWAP10 CALLER PUSH2 0x6169 JUMP JUMPDEST SWAP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x2E38 DUP6 PUSH2 0x4D69 JUMP JUMPDEST CALLER DUP6 MSTORE DUP8 PUSH1 0x20 SWAP13 AND DUP13 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE DUP8 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x7B03C7BA00000000000000000000000000000000000000000000000000000000 DUP11 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x59CB JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0x2EDA SWAP2 PUSH0 SWAP2 PUSH2 0x2EF6 JUMPI JUMPDEST POP DUP3 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x5A29 JUMP JUMPDEST POP SWAP3 SWAP1 POP PUSH2 0x1548 JUMPI PUSH2 0x435 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x4F5F JUMP JUMPDEST PUSH2 0x2F0A SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x602 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP5 PUSH2 0x2ECB JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x2F28 PUSH2 0x61AB JUMP JUMPDEST PUSH2 0x9D5 PUSH1 0x20 PUSH1 0x40 MLOAD PUSH2 0x2F39 DUP2 PUSH2 0x4D69 JUMP JUMPDEST PUSH0 DUP2 MSTORE PUSH0 DUP3 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE PUSH0 PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x86FAD6600000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x5480 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH1 0x20 PUSH2 0x5BE PUSH2 0x5D6C JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH32 0xF5AB33E500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x2FFF PUSH2 0x4CFD JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x46E JUMPI PUSH2 0x3020 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4E93 JUMP JUMPDEST SWAP2 PUSH2 0x3029 PUSH2 0x4D13 JUMP JUMPDEST SWAP2 PUSH1 0x84 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x46E JUMPI PUSH0 SWAP4 PUSH2 0x51A PUSH2 0xB1D DUP7 SWAP5 PUSH2 0x3052 PUSH2 0xAA2 PUSH2 0x30C7 SWAP7 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4F12 JUMP JUMPDEST SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x306A DUP6 PUSH2 0x4D69 JUMP JUMPDEST ADDRESS DUP6 MSTORE AND PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x4 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xEFD85F1400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x586E JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH2 0x435 SWAP3 PUSH2 0x3113 SWAP2 PUSH0 SWAP2 PUSH2 0x3150 JUMPI JUMPDEST POP PUSH1 0x20 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x57EB JUMP JUMPDEST SWAP1 SWAP4 SWAP2 SWAP3 PUSH2 0x3128 JUMPI JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x5021 JUMP JUMPDEST PUSH0 PUSH32 0x0 TSTORE PUSH2 0x311C JUMP JUMPDEST PUSH2 0x3164 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x602 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP5 PUSH2 0x3103 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH2 0x3178 CALLDATASIZE PUSH2 0x509C JUMP JUMPDEST SWAP1 PUSH2 0x3186 SWAP1 SWAP5 SWAP4 SWAP3 SWAP5 PUSH2 0x6169 JUMP JUMPDEST SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 DUP2 PUSH1 0x40 MLOAD SWAP7 PUSH2 0x319F DUP9 PUSH2 0x4D99 JUMP JUMPDEST CALLER DUP9 MSTORE DUP2 PUSH1 0x20 SWAP11 DUP12 DUP11 ADD PUSH0 SWAP1 MSTORE AND PUSH1 0x40 DUP10 ADD MSTORE AND PUSH1 0x60 DUP8 ADD MSTORE AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP4 ADD PUSH0 SWAP1 MSTORE PUSH1 0xE0 DUP4 ADD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 MSTORE PUSH2 0x100 DUP4 ADD PUSH0 SWAP1 MSTORE PUSH2 0x120 DUP4 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP3 DUP6 DUP3 ADD PUSH32 0xBE5AE84100000000000000000000000000000000000000000000000000000000 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD SWAP1 PUSH2 0x3228 SWAP2 PUSH2 0x5A7E JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE PUSH2 0x323A SWAP1 DUP4 PUSH2 0x4E0A JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 DUP1 SWAP4 PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x24 DUP3 ADD PUSH2 0x3276 SWAP2 PUSH2 0x4FFC JUMP JUMPDEST SUB SWAP2 PUSH32 0x0 AND SWAP2 DUP2 GAS PUSH0 SWAP5 DUP6 SWAP2 CALL SWAP1 DUP2 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP2 PUSH2 0x32CD JUMPI JUMPDEST POP DUP3 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x46E JUMPI DUP3 ADD MLOAD SWAP1 PUSH2 0x5C6 JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x32E1 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x602 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP4 PUSH2 0x32B0 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH2 0x32F5 CALLDATASIZE PUSH2 0x5247 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH2 0x33CA DUP3 PUSH32 0x0 AND SWAP2 PUSH2 0x332E DUP2 PUSH2 0x559F JUMP JUMPDEST PUSH1 0x20 SWAP4 PUSH0 DUP6 DUP5 ADD SWAP3 PUSH2 0x333F DUP5 PUSH2 0x559F JUMP JUMPDEST PUSH2 0x337D PUSH2 0x334F PUSH1 0x40 DUP9 ADD DUP9 PUSH2 0x55B3 JUMP JUMPDEST DUP12 PUSH1 0x40 MLOAD SWAP5 PUSH2 0x335D DUP7 PUSH2 0x4DD2 JUMP JUMPDEST DUP8 DUP7 MSTORE DUP2 PUSH1 0x40 MLOAD SWAP8 PUSH2 0x336E DUP10 PUSH2 0x4DB6 JUMP JUMPDEST AND DUP8 MSTORE AND DUP12 DUP7 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x4E45 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP7 ADD CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE DUP3 PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP7 DUP2 SWAP3 PUSH32 0x4AF29EC400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x5CA0 JUMP JUMPDEST SUB DUP2 DUP4 DUP6 GAS CALL SWAP6 DUP7 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP5 PUSH0 SWAP8 PUSH2 0x37FC JUMPI JUMPDEST POP PUSH2 0x33EA DUP5 PUSH2 0x559F JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD SWAP2 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP2 PUSH2 0x37E2 JUMPI JUMPDEST POP SWAP4 SWAP7 PUSH32 0x0 DUP3 AND SWAP5 SWAP1 PUSH0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x35B1 JUMPI DUP4 PUSH2 0x346C DUP3 DUP6 PUSH2 0x5B0F JUMP JUMPDEST MLOAD AND PUSH2 0x3478 DUP3 DUP11 PUSH2 0x5B0F JUMP JUMPDEST MLOAD DUP1 ISZERO PUSH2 0x35A7 JUMPI PUSH2 0x3488 DUP9 PUSH2 0x559F JUMP JUMPDEST SWAP1 PUSH2 0x3492 DUP2 PUSH2 0x6236 JUMP JUMPDEST SWAP2 DUP11 EXTCODESIZE ISZERO PUSH2 0x46E JUMPI PUSH1 0x40 MLOAD PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x4 DUP3 ADD MSTORE DUP10 DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP3 DUP2 AND PUSH1 0x44 DUP5 ADD MSTORE DUP4 AND PUSH1 0x64 DUP4 ADD MSTORE SWAP1 SWAP2 SWAP1 PUSH0 DUP4 PUSH1 0x84 DUP2 DUP4 DUP15 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH2 0x354F SWAP4 DUP14 SWAP4 PUSH2 0x3598 JUMPI POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP3 DUP4 SWAP3 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB DUP2 PUSH0 DUP11 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x463 JUMPI DUP11 SWAP2 PUSH2 0x356F JUMPI JUMPDEST POP POP PUSH1 0x1 SWAP1 JUMPDEST ADD PUSH2 0x3458 JUMP JUMPDEST DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3591 JUMPI JUMPDEST PUSH2 0x3582 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x46E JUMPI DUP9 DUP12 PUSH2 0x3563 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3578 JUMP JUMPDEST PUSH2 0x35A1 SWAP1 PUSH2 0x4D85 JUMP JUMPDEST DUP15 PUSH2 0x2A52 JUMP JUMPDEST POP POP PUSH1 0x1 SWAP1 PUSH2 0x3569 JUMP JUMPDEST POP SWAP2 SWAP4 SWAP5 POP SWAP2 SWAP7 PUSH2 0x35C1 DUP2 PUSH2 0x559F JUMP JUMPDEST SWAP1 DUP5 PUSH2 0x35D5 PUSH2 0x35CF DUP9 PUSH2 0x559F JUMP JUMPDEST SWAP3 PUSH2 0x559F JUMP JUMPDEST AND DUP9 DUP7 PUSH1 0x24 PUSH2 0x35E3 DUP11 PUSH2 0x559F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP5 MSTORE AND PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP2 PUSH2 0x37AD JUMPI JUMPDEST POP SWAP1 PUSH2 0x36A7 SWAP9 PUSH0 SWAP4 SWAP3 PUSH2 0x3637 DUP8 MLOAD PUSH2 0x5981 JUMP JUMPDEST SWAP2 DUP9 PUSH1 0x40 MLOAD SWAP5 PUSH2 0x3646 DUP7 PUSH2 0x4DD2 JUMP JUMPDEST DUP8 DUP7 MSTORE DUP2 PUSH1 0x40 MLOAD SWAP8 PUSH2 0x3657 DUP10 PUSH2 0x4DB6 JUMP JUMPDEST AND DUP8 MSTORE AND SWAP1 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE DUP3 PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP9 DUP2 SWAP3 PUSH32 0x2145789700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x5D10 JUMP JUMPDEST SUB DUP2 DUP4 DUP12 GAS CALL SWAP5 DUP6 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP7 PUSH0 SWAP7 PUSH2 0x378B JUMPI JUMPDEST POP PUSH0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x3779 JUMPI DUP5 PUSH2 0x36D4 DUP3 DUP7 PUSH2 0x5B0F JUMP JUMPDEST MLOAD AND SWAP1 PUSH2 0x36E1 DUP2 DUP10 PUSH2 0x5B0F JUMP JUMPDEST MLOAD DUP1 ISZERO PUSH2 0x376F JUMPI PUSH2 0x36F1 DUP9 PUSH2 0x559F JUMP JUMPDEST SWAP1 DUP12 EXTCODESIZE ISZERO PUSH2 0x46E JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP1 SWAP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH0 DUP3 PUSH1 0x64 DUP2 DUP4 DUP15 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH1 0x1 SWAP3 PUSH2 0x3760 JUMPI JUMPDEST POP JUMPDEST ADD PUSH2 0x36C0 JUMP JUMPDEST PUSH2 0x3769 SWAP1 PUSH2 0x4D85 JUMP JUMPDEST DUP11 PUSH2 0x3758 JUMP JUMPDEST POP PUSH1 0x1 SWAP2 POP PUSH2 0x375A JUMP JUMPDEST POP PUSH2 0x435 DUP7 DUP9 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP5 DUP6 PUSH2 0x5279 JUMP JUMPDEST SWAP1 SWAP7 POP PUSH2 0x37A3 SWAP2 SWAP6 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x113B DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST SWAP6 SWAP2 SWAP7 SWAP1 SWAP6 PUSH2 0x36BD JUMP JUMPDEST SWAP3 SWAP2 SWAP1 POP DUP9 DUP4 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x37DB JUMPI JUMPDEST PUSH2 0x37C6 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x46E JUMPI SWAP2 MLOAD SWAP1 SWAP2 SWAP1 PUSH2 0x36A7 PUSH2 0x3624 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x37BC JUMP JUMPDEST PUSH2 0x37F6 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x15C3 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP9 PUSH2 0x342E JUMP JUMPDEST SWAP1 SWAP5 POP PUSH2 0x3814 SWAP2 SWAP7 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x454 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST SWAP7 SWAP2 SWAP5 SWAP1 SWAP7 PUSH2 0x33E0 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH1 0x20 PUSH2 0x5BE PUSH2 0x5B52 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x3851 PUSH2 0x4CFD JUMP JUMPDEST PUSH2 0x3859 PUSH2 0x4D3F JUMP JUMPDEST SWAP1 PUSH2 0x3862 PUSH2 0x4D13 JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x46E JUMPI PUSH2 0x3885 PUSH2 0x388B SWAP2 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4F12 JUMP JUMPDEST SWAP2 PUSH2 0x6169 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 PUSH32 0x0 AND SWAP3 DUP1 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND SWAP6 DUP7 PUSH1 0x4 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x40 DUP3 PUSH1 0x44 DUP2 DUP7 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP1 PUSH0 SWAP4 PUSH2 0x39FB JUMPI JUMPDEST POP PUSH0 SWAP4 PUSH2 0x51A PUSH2 0x3997 DUP7 SWAP5 PUSH2 0x391F PUSH2 0x39D3 SWAP6 PUSH2 0x5981 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH2 0x392C DUP10 DUP5 PUSH2 0x5B0F JUMP JUMPDEST MSTORE PUSH1 0x40 MLOAD SWAP2 PUSH2 0x393A DUP4 PUSH2 0x4D69 JUMP JUMPDEST ADDRESS DUP4 MSTORE PUSH1 0x20 SWAP12 DUP13 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xB24BD57100000000000000000000000000000000000000000000000000000000 DUP13 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x59CB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xEDFA356800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP12 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH2 0x5B7 SWAP3 PUSH2 0x5AF SWAP2 PUSH0 SWAP2 PUSH2 0x5EE JUMPI POP DUP6 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x5A29 JUMP JUMPDEST SWAP3 POP POP SWAP2 PUSH1 0x40 DUP3 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x3A32 JUMPI JUMPDEST DUP2 PUSH2 0x3A18 PUSH1 0x40 SWAP4 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x46E JUMPI DUP2 MLOAD PUSH1 0x20 SWAP1 SWAP3 ADD MLOAD SWAP1 SWAP3 SWAP1 SWAP2 PUSH0 PUSH2 0x3908 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x3A0B JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x14 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4C65676163792072657665727420726561736F6E000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH2 0x3AC4 PUSH2 0x3AB9 CALLDATASIZE PUSH2 0x51E8 JUMP JUMPDEST SWAP3 SWAP5 SWAP1 SWAP4 SWAP2 SWAP4 PUSH2 0x6169 JUMP JUMPDEST SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 PUSH32 0x0 AND SWAP4 DUP1 PUSH1 0x40 MLOAD SWAP5 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND SWAP7 DUP8 PUSH1 0x4 DUP7 ADD MSTORE AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x40 DUP4 PUSH1 0x44 DUP2 DUP8 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP1 PUSH0 SWAP5 PUSH2 0x3C06 JUMPI JUMPDEST POP SWAP4 PUSH2 0x51A PUSH2 0x3997 PUSH0 SWAP7 SWAP5 PUSH2 0x3BDE SWAP5 PUSH2 0x3B5A DUP10 SWAP8 PUSH2 0x5981 JUMP JUMPDEST SWAP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x3B76 DUP11 DUP6 PUSH2 0x5B0F JUMP JUMPDEST MSTORE PUSH1 0x40 MLOAD SWAP3 PUSH2 0x3B84 DUP5 PUSH2 0x4D69 JUMP JUMPDEST ADDRESS DUP5 MSTORE PUSH1 0x20 SWAP13 DUP14 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x2 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xEFD85F1400000000000000000000000000000000000000000000000000000000 DUP13 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x586E JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH2 0x5B7 SWAP3 PUSH2 0x1F7B SWAP2 PUSH0 SWAP2 PUSH2 0x1F82 JUMPI POP DUP6 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x57EB JUMP JUMPDEST SWAP4 POP POP PUSH1 0x40 DUP4 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x3C3B JUMPI JUMPDEST DUP2 PUSH2 0x3C22 PUSH1 0x40 SWAP4 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x46E JUMPI DUP3 MLOAD PUSH1 0x20 SWAP1 SWAP4 ADD MLOAD SWAP3 PUSH2 0x51A PUSH2 0x3B41 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x3C15 JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD GT PUSH2 0x46E JUMPI CALLDATASIZE PUSH1 0x23 PUSH1 0x4 CALLDATALOAD ADD SLT ISZERO PUSH2 0x46E JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD GT PUSH2 0x46E JUMPI CALLDATASIZE PUSH1 0x24 PUSH1 0xC0 PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD MUL PUSH1 0x4 CALLDATALOAD ADD ADD GT PUSH2 0x46E JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x46E JUMPI PUSH2 0x3CFC SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x5108 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD GT PUSH2 0x46E JUMPI PUSH1 0x60 PUSH1 0x3 NOT PUSH1 0x44 CALLDATALOAD CALLDATASIZE SUB ADD SLT PUSH2 0x46E JUMPI PUSH1 0x64 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x46E JUMPI PUSH2 0x3D3D SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x5139 JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x46E JUMPI PUSH2 0x3D5D SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x5108 JUMP JUMPDEST SWAP5 SWAP1 SWAP4 PUSH2 0x3D68 PUSH2 0x61AB JUMP JUMPDEST DUP1 PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD SUB PUSH2 0x4283 JUMPI PUSH0 JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD DUP2 LT PUSH2 0x3FF8 JUMPI POP POP POP PUSH1 0x44 CALLDATALOAD PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD PUSH1 0x44 CALLDATALOAD CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x46E JUMPI DUP2 PUSH1 0x44 CALLDATALOAD ADD PUSH1 0x4 DUP2 ADD CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x46E JUMPI PUSH1 0x24 DUP3 PUSH1 0x7 SHL CALLDATASIZE SUB SWAP2 ADD SGT PUSH2 0x46E JUMPI PUSH2 0x3E1B JUMPI JUMPDEST PUSH2 0x435 PUSH2 0x138C DUP7 DUP7 PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH2 0x5F36 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 SWAP3 SWAP5 PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x46E JUMPI PUSH1 0x40 MLOAD SWAP5 PUSH32 0x2A2D80D100000000000000000000000000000000000000000000000000000000 DUP7 MSTORE CALLER PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x60 PUSH1 0x24 DUP8 ADD MSTORE PUSH1 0xC4 DUP7 ADD SWAP3 PUSH1 0x44 CALLDATALOAD ADD PUSH1 0x24 DUP2 ADD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 DUP4 ADD CALLDATALOAD GT PUSH2 0x46E JUMPI PUSH1 0x4 DUP3 ADD CALLDATALOAD PUSH1 0x7 SHL CALLDATASIZE SUB DUP6 SGT PUSH2 0x46E JUMPI PUSH1 0x60 PUSH1 0x64 DUP10 ADD MSTORE PUSH1 0x4 DUP3 ADD CALLDATALOAD SWAP1 MSTORE SWAP2 SWAP3 DUP7 SWAP3 PUSH1 0xE4 DUP5 ADD SWAP3 SWAP2 SWAP1 PUSH0 SWAP1 JUMPDEST PUSH1 0x4 DUP2 ADD CALLDATALOAD DUP3 LT PUSH2 0x3F7A JUMPI POP POP POP DUP3 SWAP2 PUSH0 SWAP5 PUSH2 0x3F1D SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x3EFB PUSH1 0x24 PUSH1 0x44 CALLDATALOAD ADD PUSH2 0x4D55 JUMP JUMPDEST AND PUSH1 0x84 DUP7 ADD MSTORE PUSH1 0x44 DUP1 CALLDATALOAD ADD CALLDATALOAD PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0x3 NOT DUP6 DUP5 SUB ADD PUSH1 0x44 DUP7 ADD MSTORE PUSH2 0x5695 JUMP JUMPDEST SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH2 0x435 SWAP4 PUSH2 0x138C SWAP4 PUSH2 0x3F6B JUMPI JUMPDEST DUP3 SWAP5 POP DUP2 SWAP4 POP PUSH2 0x3DEB JUMP JUMPDEST PUSH2 0x3F74 SWAP1 PUSH2 0x4D85 JUMP JUMPDEST DUP5 PUSH2 0x3F60 JUMP JUMPDEST SWAP2 SWAP6 SWAP5 POP SWAP2 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x3F91 DUP8 PUSH2 0x4D55 JUMP JUMPDEST AND DUP2 MSTORE PUSH1 0x20 DUP1 DUP8 ADD CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP1 SWAP4 SUB PUSH2 0x46E JUMPI PUSH1 0x4 SWAP3 PUSH1 0x1 SWAP3 DUP3 ADD MSTORE PUSH2 0x3FC1 PUSH1 0x40 DUP10 ADD PUSH2 0x64B3 JUMP JUMPDEST PUSH6 0xFFFFFFFFFFFF DUP1 SWAP2 AND PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x3FDC PUSH1 0x60 DUP11 ADD PUSH2 0x64B3 JUMP JUMPDEST AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 DUP1 SWAP2 ADD SWAP8 ADD SWAP4 ADD SWAP1 POP DUP9 SWAP5 SWAP6 SWAP4 SWAP3 SWAP2 PUSH2 0x3ECF JUMP JUMPDEST PUSH2 0x4006 PUSH2 0x3AC DUP3 DUP5 DUP7 PUSH2 0x6074 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 PUSH1 0x60 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x60 DUP5 ADD GT OR PUSH2 0xF19 JUMPI PUSH1 0x60 DUP3 ADD PUSH1 0x40 MSTORE PUSH0 DUP3 MSTORE PUSH0 PUSH1 0x20 DUP4 ADD MSTORE PUSH0 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD SWAP1 PUSH1 0x60 PUSH1 0x40 DUP3 ADD MLOAD SWAP2 ADD MLOAD PUSH0 BYTE SWAP2 DUP4 MSTORE PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xC0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP2 DUP5 MUL PUSH1 0x4 CALLDATALOAD ADD CALLDATASIZE SUB ADD SLT PUSH2 0x46E JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0x4097 DUP3 PUSH2 0x4DB6 JUMP JUMPDEST PUSH2 0x40AA PUSH1 0x24 PUSH1 0xC0 DUP6 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x4D55 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH2 0x40C0 PUSH1 0x44 PUSH1 0xC0 DUP7 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x4D55 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 DUP6 ADD MSTORE PUSH2 0x40DA PUSH1 0x64 PUSH1 0xC0 DUP8 MUL PUSH1 0x4 CALLDATALOAD ADD ADD PUSH2 0x4D55 JUMP JUMPDEST PUSH1 0x40 DUP6 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x4 CALLDATALOAD PUSH1 0xC0 DUP8 MUL ADD PUSH1 0x84 DUP2 ADD CALLDATALOAD PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0xA4 DUP2 ADD CALLDATALOAD PUSH1 0x80 DUP8 ADD MSTORE PUSH1 0xC4 ADD CALLDATALOAD PUSH1 0xA0 DUP7 ADD MSTORE DUP4 ADD MLOAD DUP4 MLOAD PUSH1 0x20 SWAP1 SWAP5 ADD MLOAD PUSH1 0xFF SWAP2 SWAP1 SWAP2 AND SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND EXTCODESIZE ISZERO PUSH2 0x46E JUMPI PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 PUSH1 0xE4 SWAP5 DUP11 SWAP9 DUP5 SWAP9 PUSH1 0xC4 PUSH1 0xC0 PUSH1 0x40 MLOAD SWAP13 DUP14 SWAP12 DUP13 SWAP11 PUSH32 0xD505ACCF00000000000000000000000000000000000000000000000000000000 DUP13 MSTORE AND PUSH1 0x4 DUP12 ADD MSTORE ADDRESS PUSH1 0x24 DUP12 ADD MSTORE PUSH1 0x84 DUP3 DUP3 MUL PUSH1 0x4 CALLDATALOAD ADD ADD CALLDATALOAD PUSH1 0x44 DUP12 ADD MSTORE MUL PUSH1 0x4 CALLDATALOAD ADD ADD CALLDATALOAD PUSH1 0x64 DUP9 ADD MSTORE PUSH1 0x84 DUP8 ADD MSTORE PUSH1 0xA4 DUP7 ADD MSTORE PUSH1 0xC4 DUP6 ADD MSTORE AND GAS CALL SWAP1 DUP2 PUSH2 0x4274 JUMPI JUMPDEST POP PUSH2 0x426B JUMPI PUSH2 0x41B9 PUSH2 0x5B23 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 MLOAD AND SWAP1 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP4 ADD MLOAD AND PUSH1 0x44 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH32 0xDD62ED3E00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD MSTORE ADDRESS PUSH1 0x24 DUP4 ADD MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP3 PUSH2 0x4236 JUMPI JUMPDEST POP PUSH1 0x60 ADD MLOAD SUB PUSH2 0x4231 JUMPI POP PUSH1 0x1 SWAP1 JUMPDEST ADD PUSH2 0x3D77 JUMP JUMPDEST PUSH2 0x6AB9 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x4263 JUMPI JUMPDEST DUP2 PUSH2 0x4252 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x46E JUMPI MLOAD SWAP1 PUSH1 0x60 PUSH2 0x421C JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x4245 JUMP JUMPDEST POP PUSH1 0x1 SWAP1 PUSH2 0x422B JUMP JUMPDEST PUSH2 0x427D SWAP1 PUSH2 0x4D85 JUMP JUMPDEST DUP10 PUSH2 0x41AC JUMP JUMPDEST PUSH32 0xAAAD13F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH2 0x42B9 CALLDATASIZE PUSH2 0x509C JUMP JUMPDEST SWAP1 PUSH2 0x42C7 SWAP1 SWAP5 SWAP4 SWAP3 SWAP5 PUSH2 0x6169 JUMP JUMPDEST SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 DUP2 PUSH1 0x40 MLOAD SWAP7 PUSH2 0x42E0 DUP9 PUSH2 0x4D99 JUMP JUMPDEST CALLER DUP9 MSTORE DUP2 PUSH1 0x20 SWAP11 DUP12 DUP11 ADD PUSH1 0x1 SWAP1 MSTORE AND PUSH1 0x40 DUP10 ADD MSTORE AND PUSH1 0x60 DUP8 ADD MSTORE AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP4 ADD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 MSTORE PUSH1 0xE0 DUP4 ADD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 MSTORE PUSH2 0x100 DUP4 ADD PUSH0 SWAP1 MSTORE PUSH2 0x120 DUP4 ADD MSTORE PUSH1 0x40 MLOAD DUP1 SWAP3 DUP6 DUP3 ADD PUSH32 0xBE5AE84100000000000000000000000000000000000000000000000000000000 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD SWAP1 PUSH2 0x3228 SWAP2 PUSH2 0x5A7E JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH2 0x43DE PUSH2 0x13C3 CALLDATASIZE PUSH2 0x504A JUMP JUMPDEST SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 PUSH32 0x0 AND SWAP4 PUSH1 0x40 MLOAD SWAP4 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND SWAP4 DUP5 PUSH1 0x4 DUP6 ADD MSTORE PUSH0 DUP5 PUSH1 0x24 DUP2 DUP5 GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x463 JUMPI PUSH2 0x14CC PUSH0 SWAP6 SWAP5 PUSH2 0x44D1 SWAP5 PUSH2 0x446A DUP9 SWAP8 PUSH2 0x51A SWAP6 DUP10 SWAP2 PUSH2 0x44F4 JUMPI POP MLOAD PUSH2 0x5981 JUMP JUMPDEST SWAP2 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x4478 DUP5 PUSH2 0x4D69 JUMP JUMPDEST ADDRESS DUP5 MSTORE PUSH1 0x20 SWAP11 DUP12 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x60 DUP4 ADD MSTORE DUP7 PUSH1 0x80 DUP4 ADD MSTORE DUP7 PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0xB24BD57100000000000000000000000000000000000000000000000000000000 DUP11 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x59CB JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0x2EDA SWAP2 PUSH0 SWAP2 PUSH2 0x2EF6 JUMPI POP DUP3 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x5A29 JUMP JUMPDEST PUSH2 0x4508 SWAP2 POP RETURNDATASIZE DUP1 DUP12 DUP4 RETURNDATACOPY PUSH2 0x15C3 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP13 PUSH2 0x26C8 JUMP JUMPDEST PUSH0 PUSH2 0x51A DUP2 PUSH2 0x30C7 PUSH2 0x1A4D PUSH2 0x4522 CALLDATASIZE PUSH2 0x4F92 JUMP JUMPDEST SWAP1 PUSH2 0x4533 SWAP9 SWAP5 SWAP3 SWAP9 SWAP6 SWAP4 SWAP6 CALLER PUSH2 0x6169 JUMP JUMPDEST SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x454B DUP8 PUSH2 0x4D69 JUMP JUMPDEST CALLER DUP8 MSTORE AND PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x4 PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x5B34379100000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x586E JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x45BE PUSH2 0x61AB JUMP JUMPDEST PUSH2 0x45FD PUSH0 PUSH2 0x45CA PUSH2 0x57B5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x5B34379100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x586E JUMP JUMPDEST SUB DUP2 DUP4 ADDRESS GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0x4632 JUMPI PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH2 0x134D SWAP1 RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x454 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x4659 PUSH2 0x4CFD JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x46E JUMPI PUSH0 PUSH2 0x51A PUSH2 0x46C0 PUSH2 0x4683 PUSH2 0x46FA SWAP5 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4E93 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH1 0x20 SWAP8 PUSH32 0x82CD54FB00000000000000000000000000000000000000000000000000000000 DUP10 DUP6 ADD MSTORE PUSH1 0x24 CALLDATALOAD SWAP1 CALLER SWAP1 PUSH1 0x24 DUP7 ADD PUSH2 0x56FF JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP7 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST SUB DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0x1272 SWAP2 PUSH0 SWAP2 PUSH2 0x4749 JUMPI JUMPDEST POP DUP3 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x578F JUMP JUMPDEST PUSH2 0x475D SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x602 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP4 PUSH2 0x473A JUMP JUMPDEST CALLVALUE PUSH2 0x46E JUMPI PUSH2 0x4771 CALLDATASIZE PUSH2 0x4F2D JUMP JUMPDEST PUSH2 0x4779 PUSH2 0x61AB JUMP JUMPDEST PUSH2 0x4781 PUSH2 0x61D8 JUMP JUMPDEST PUSH32 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0x47B8 PUSH1 0x20 DUP5 ADD PUSH2 0x559F JUMP JUMPDEST SWAP3 PUSH2 0x47C2 DUP2 PUSH2 0x559F JUMP JUMPDEST SWAP4 PUSH1 0x40 DUP3 ADD SWAP5 PUSH2 0x47D2 DUP7 DUP5 PUSH2 0x55B3 JUMP JUMPDEST SWAP1 SWAP3 PUSH2 0x47E1 PUSH1 0x60 DUP7 ADD DUP7 PUSH2 0x55B3 JUMP JUMPDEST DUP4 PUSH2 0x47F2 PUSH1 0xC0 DUP10 SWAP9 SWAP5 SWAP9 ADD DUP10 PUSH2 0x5607 JUMP JUMPDEST SWAP6 SWAP1 SWAP5 PUSH1 0x40 MLOAD SWAP12 DUP13 SWAP9 PUSH32 0xBA8A2BE000000000000000000000000000000000000000000000000000000000 DUP11 MSTORE DUP2 PUSH1 0xC4 DUP12 ADD SWAP4 AND PUSH1 0x4 DUP12 ADD MSTORE AND PUSH1 0x24 DUP10 ADD MSTORE PUSH1 0xC0 PUSH1 0x44 DUP10 ADD MSTORE MSTORE PUSH1 0xE4 DUP7 ADD SWAP3 SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x4B2C JUMPI POP POP POP SWAP3 PUSH2 0x4884 SWAP3 PUSH2 0x486B PUSH1 0x20 SWAP8 SWAP4 DUP8 SWAP7 PUSH1 0x3 NOT SWAP6 DUP7 DUP10 DUP5 SUB ADD PUSH1 0x64 DUP11 ADD MSTORE PUSH2 0x5658 JUMP JUMPDEST SWAP3 PUSH1 0x80 DUP10 ADD CALLDATALOAD PUSH1 0x84 DUP8 ADD MSTORE DUP6 DUP5 SUB ADD PUSH1 0xA4 DUP7 ADD MSTORE PUSH2 0x5695 JUMP JUMPDEST SUB DUP2 PUSH0 DUP7 DUP11 AND GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP4 PUSH2 0x4AF8 JUMPI JUMPDEST POP SWAP2 SWAP3 PUSH1 0xA0 DUP4 ADD SWAP3 SWAP1 PUSH0 JUMPDEST PUSH2 0x48AF DUP3 DUP5 PUSH2 0x55B3 JUMP JUMPDEST SWAP1 POP DUP2 LT ISZERO PUSH2 0x4ABE JUMPI PUSH2 0x48D4 PUSH2 0x48CF DUP3 PUSH2 0x48C9 DUP6 DUP8 PUSH2 0x55B3 JUMP JUMPDEST SWAP1 PUSH2 0x56B5 JUMP JUMPDEST PUSH2 0x559F JUMP JUMPDEST PUSH2 0x48E5 DUP3 PUSH2 0x48C9 PUSH1 0x60 DUP8 ADD DUP8 PUSH2 0x55B3 JUMP JUMPDEST CALLDATALOAD SWAP1 DUP2 ISZERO PUSH2 0x4AB4 JUMPI PUSH2 0x48F6 DUP8 PUSH2 0x56F2 JUMP JUMPDEST DUP1 PUSH2 0x4A87 JUMPI JUMPDEST ISZERO PUSH2 0x4936 JUMPI POP SWAP1 PUSH2 0x4930 PUSH1 0x1 SWAP3 DUP10 PUSH32 0x0 PUSH2 0x627A JUMP JUMPDEST ADD PUSH2 0x48A5 JUMP JUMPDEST DUP6 PUSH32 0x0 AND SWAP2 PUSH2 0x4963 DUP7 PUSH2 0x559F JUMP JUMPDEST PUSH2 0x496C DUP3 PUSH2 0x6236 JUMP JUMPDEST DUP5 EXTCODESIZE ISZERO PUSH2 0x46E JUMPI PUSH1 0x40 MLOAD PUSH32 0x36C7851600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE DUP10 DUP14 AND DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP3 ADD MSTORE DUP4 DUP10 AND SWAP1 SWAP2 AND PUSH1 0x64 DUP3 ADD MSTORE SWAP3 PUSH0 SWAP1 DUP5 SWAP1 PUSH1 0x84 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x463 JUMPI PUSH2 0x4A31 SWAP4 PUSH1 0x20 SWAP4 PUSH2 0x4A78 JUMPI POP PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP3 DUP4 SWAP3 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB DUP2 PUSH0 DUP10 DUP14 AND GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0x4A4D JUMPI JUMPDEST POP PUSH1 0x1 SWAP1 PUSH2 0x4930 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x4A71 JUMPI JUMPDEST PUSH2 0x4A63 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x46E JUMPI DUP8 PUSH2 0x4A44 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x4A59 JUMP JUMPDEST PUSH2 0x4A81 SWAP1 PUSH2 0x4D85 JUMP JUMPDEST DUP12 PUSH2 0x2A52 JUMP JUMPDEST POP DUP6 PUSH32 0x0 AND DUP7 DUP3 AND EQ PUSH2 0x48FC JUMP JUMPDEST POP POP PUSH1 0x1 SWAP1 PUSH2 0x4930 JUMP JUMPDEST PUSH1 0x20 DUP7 PUSH2 0x4ACD PUSH2 0x1D41 DUP7 PUSH2 0x559F JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP3 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x4B24 JUMPI JUMPDEST DUP2 PUSH2 0x4B14 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x46E JUMPI MLOAD SWAP2 DUP6 PUSH2 0x489A JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x4B07 JUMP JUMPDEST SWAP2 SWAP5 SWAP6 SWAP7 POP SWAP2 SWAP3 PUSH1 0x20 DUP1 PUSH1 0x1 SWAP3 DUP13 PUSH2 0x4B43 DUP10 PUSH2 0x4D55 JUMP JUMPDEST AND DUP2 MSTORE ADD SWAP6 ADD SWAP2 ADD SWAP2 DUP11 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 PUSH2 0x4840 JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x46E JUMPI PUSH2 0x4B6B PUSH2 0x4CFD JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP1 DUP4 GT PUSH2 0x46E JUMPI CALLDATASIZE PUSH1 0x23 DUP5 ADD SLT ISZERO PUSH2 0x46E JUMPI DUP3 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH2 0x4B99 DUP3 PUSH2 0x4E2D JUMP JUMPDEST SWAP2 PUSH2 0x4BA7 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x4E0A JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 SWAP5 PUSH1 0x24 DUP7 DUP6 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x46E JUMPI PUSH1 0x24 DUP8 SWAP3 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x4CE6 JUMPI POP POP POP POP PUSH1 0x44 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x46E JUMPI PUSH2 0x4BEB SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4E93 JUMP JUMPDEST SWAP3 PUSH2 0x4BF4 PUSH2 0x4EB1 JUMP JUMPDEST SWAP3 PUSH1 0xA4 CALLDATALOAD SWAP3 DUP4 GT PUSH2 0x46E JUMPI PUSH2 0x51A PUSH2 0x6B6 PUSH2 0x4C96 SWAP4 PUSH0 SWAP7 PUSH2 0x4C1A DUP9 SWAP8 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x4F12 JUMP JUMPDEST SWAP1 PUSH2 0x4C24 CALLER PUSH2 0x6169 JUMP JUMPDEST SWAP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 DUP8 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x4C3C DUP8 PUSH2 0x4D69 JUMP JUMPDEST CALLER DUP8 MSTORE AND DUP14 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x80 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH32 0x86FAD6600000000000000000000000000000000000000000000000000000000 DUP12 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x5480 JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x463 JUMPI PUSH0 SWAP2 PUSH2 0x32CD JUMPI POP DUP3 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x46E JUMPI DUP3 ADD MLOAD SWAP1 PUSH2 0x5C6 JUMPI PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP1 SWAP2 PUSH2 0x4CF2 DUP5 PUSH2 0x4D55 JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x4BC8 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x46E JUMPI JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x46E JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x46E JUMPI JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x46E JUMPI JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x46E JUMPI JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF19 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xF19 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH2 0x140 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF19 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0xC0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF19 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x20 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF19 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF19 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF19 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xF19 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 SWAP2 PUSH2 0x4E50 DUP3 PUSH2 0x4E2D JUMP JUMPDEST SWAP2 PUSH2 0x4E5E PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x4E0A JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE PUSH1 0x20 DUP1 SWAP5 ADD SWAP2 PUSH1 0x5 SHL DUP2 ADD SWAP3 DUP4 GT PUSH2 0x46E JUMPI SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x4E84 JUMPI POP POP POP POP JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x4E77 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x46E JUMPI DUP2 PUSH1 0x20 PUSH2 0x4EAE SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0x4E45 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x46E JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xF19 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH2 0x4EE8 DUP3 PUSH2 0x4EC0 JUMP JUMPDEST SWAP2 PUSH2 0x4EF6 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x4E0A JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0x46E JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x46E JUMPI DUP2 PUSH1 0x20 PUSH2 0x4EAE SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0x4EDC JUMP JUMPDEST PUSH1 0x3 NOT SWAP1 PUSH1 0x20 DUP3 DUP3 ADD SLT PUSH2 0x46E JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x46E JUMPI DUP3 PUSH1 0xE0 SWAP3 SUB ADD SLT PUSH2 0x46E JUMPI PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x4F7E JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x4F70 JUMP JUMPDEST SWAP1 PUSH1 0xA0 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x46E JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x24 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x46E JUMPI DUP2 PUSH2 0x4FD4 SWAP2 PUSH1 0x4 ADD PUSH2 0x4E93 JUMP JUMPDEST SWAP3 PUSH1 0x44 CALLDATALOAD SWAP3 PUSH1 0x64 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x46E JUMPI SWAP3 PUSH1 0x84 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x46E JUMPI PUSH2 0x4EAE SWAP2 PUSH1 0x4 ADD PUSH2 0x4F12 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH2 0x5037 PUSH2 0x4EAE SWAP5 SWAP3 PUSH1 0x60 DUP4 MSTORE PUSH1 0x60 DUP4 ADD SWAP1 PUSH2 0x4F5F JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x4FFC JUMP JUMPDEST PUSH1 0x80 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x46E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP3 PUSH1 0x24 CALLDATALOAD SWAP3 PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP2 PUSH1 0x64 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x46E JUMPI PUSH2 0x4EAE SWAP2 PUSH1 0x4 ADD PUSH2 0x4F12 JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x46E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 PUSH1 0x4 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP3 PUSH1 0x24 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP3 PUSH1 0x44 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP3 PUSH1 0x64 CALLDATALOAD SWAP3 PUSH1 0x84 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP2 PUSH1 0xA4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x46E JUMPI PUSH2 0x4EAE SWAP2 PUSH1 0x4 ADD PUSH2 0x4F12 JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x46E JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x46E JUMPI PUSH1 0x20 DUP1 DUP6 ADD SWAP5 DUP5 PUSH1 0x5 SHL ADD ADD GT PUSH2 0x46E JUMPI JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x46E JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x46E JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x46E JUMPI JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD SWAP1 PUSH1 0x20 DUP4 MSTORE DUP4 MLOAD DUP1 SWAP3 MSTORE PUSH1 0x40 DUP4 ADD SWAP3 PUSH1 0x20 PUSH1 0x40 DUP5 PUSH1 0x5 SHL DUP4 ADD ADD SWAP6 ADD SWAP4 PUSH0 SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x519C JUMPI POP POP POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 DUP5 DUP1 PUSH2 0x51D8 DUP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0 DUP7 PUSH1 0x1 SWAP7 SUB ADD DUP8 MSTORE DUP11 MLOAD PUSH2 0x4FFC JUMP JUMPDEST SWAP9 ADD SWAP4 ADD SWAP4 ADD SWAP2 SWAP5 SWAP4 SWAP3 SWAP1 PUSH2 0x518C JUMP JUMPDEST SWAP1 PUSH1 0xA0 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x46E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP3 PUSH1 0x24 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP3 PUSH1 0x44 CALLDATALOAD SWAP3 PUSH1 0x64 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP2 PUSH1 0x84 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x46E JUMPI PUSH2 0x4EAE SWAP2 PUSH1 0x4 ADD PUSH2 0x4F12 JUMP JUMPDEST PUSH1 0x3 NOT SWAP1 PUSH1 0x20 DUP3 DUP3 ADD SLT PUSH2 0x46E JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x46E JUMPI DUP3 PUSH1 0x80 SWAP3 SUB ADD SLT PUSH2 0x46E JUMPI PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST SWAP1 SWAP3 PUSH2 0x5292 PUSH2 0x4EAE SWAP6 SWAP4 SWAP5 PUSH1 0x80 DUP5 MSTORE PUSH1 0x80 DUP5 ADD SWAP1 PUSH2 0x4F5F JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x4F5F JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x46E JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x44 CALLDATALOAD DUP4 DUP2 GT PUSH2 0x46E JUMPI DUP3 PUSH2 0x52EF SWAP2 PUSH1 0x4 ADD PUSH2 0x4E93 JUMP JUMPDEST SWAP3 PUSH1 0x64 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x46E JUMPI SWAP3 PUSH1 0x84 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x46E JUMPI PUSH2 0x4EAE SWAP2 PUSH1 0x4 ADD PUSH2 0x4F12 JUMP JUMPDEST PUSH1 0x3 NOT SWAP1 PUSH1 0x20 DUP3 DUP3 ADD SLT PUSH2 0x46E JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x46E JUMPI DUP3 PUSH2 0x140 SWAP3 SUB ADD SLT PUSH2 0x46E JUMPI PUSH1 0x4 ADD SWAP1 JUMP JUMPDEST PUSH2 0x100 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x46E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP3 PUSH1 0x24 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP3 PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP2 PUSH1 0x64 CALLDATALOAD SWAP2 PUSH1 0x84 CALLDATALOAD SWAP2 PUSH1 0xA4 CALLDATALOAD SWAP2 PUSH1 0xC4 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x46E JUMPI SWAP2 PUSH1 0xE4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x46E JUMPI PUSH2 0x53BB SWAP2 PUSH1 0x4 ADD PUSH2 0x5139 JUMP JUMPDEST SWAP1 SWAP2 JUMP JUMPDEST SWAP2 PUSH2 0x53DC SWAP1 PUSH2 0x4EAE SWAP5 SWAP3 DUP5 MSTORE PUSH1 0x60 PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD SWAP1 PUSH2 0x4F5F JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x4FFC JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x46E JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP3 PUSH1 0x24 CALLDATALOAD SWAP3 PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP2 PUSH1 0x64 CALLDATALOAD SWAP2 PUSH1 0x84 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x46E JUMPI SWAP2 PUSH1 0xA4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x46E JUMPI PUSH2 0x4EAE SWAP2 PUSH1 0x4 ADD PUSH2 0x4F12 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x546C JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x545E JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x20 SWAP3 DUP4 DUP2 MSTORE PUSH2 0x100 DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 DUP6 DUP5 MLOAD AND DUP2 DUP4 ADD MSTORE DUP6 DUP2 DUP6 ADD MLOAD AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x40 DUP5 ADD MLOAD SWAP3 PUSH1 0xE0 PUSH1 0x60 DUP5 ADD MSTORE DUP4 MLOAD DUP1 SWAP2 MSTORE DUP2 PUSH2 0x120 DUP5 ADD SWAP5 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x551D JUMPI POP POP POP POP PUSH2 0x4EAE SWAP4 SWAP5 POP PUSH1 0xE0 PUSH1 0xC0 PUSH2 0x54F8 PUSH1 0x60 DUP7 ADD MLOAD SWAP5 PUSH1 0x1F NOT SWAP6 DUP7 DUP7 DUP4 SUB ADD PUSH1 0x80 DUP8 ADD MSTORE PUSH2 0x544D JUMP JUMPDEST SWAP5 PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD ISZERO ISZERO DUP3 DUP6 ADD MSTORE ADD MLOAD SWAP3 DUP3 DUP6 SUB ADD SWAP2 ADD MSTORE PUSH2 0x4FFC JUMP JUMPDEST DUP4 MLOAD DUP10 AND DUP7 MSTORE SWAP5 DUP2 ADD SWAP5 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x54C7 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x46E JUMPI DUP1 MLOAD SWAP1 PUSH2 0x554A DUP3 PUSH2 0x4EC0 JUMP JUMPDEST SWAP3 PUSH2 0x5558 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x4E0A JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x46E JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x46E JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x46E JUMPI PUSH2 0x4EAE SWAP3 ADD PUSH2 0x5533 JUMP JUMPDEST CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI SWAP1 JUMP JUMPDEST SWAP1 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP2 CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x46E JUMPI ADD DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x46E JUMPI PUSH1 0x20 ADD SWAP2 DUP2 PUSH1 0x5 SHL CALLDATASIZE SUB DUP4 SGT PUSH2 0x46E JUMPI JUMP JUMPDEST SWAP1 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE1 DUP2 CALLDATASIZE SUB ADD DUP3 SLT ISZERO PUSH2 0x46E JUMPI ADD DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x46E JUMPI PUSH1 0x20 ADD SWAP2 DUP2 CALLDATASIZE SUB DUP4 SGT PUSH2 0x46E JUMPI JUMP JUMPDEST SWAP1 SWAP2 DUP3 DUP2 MSTORE PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x46E JUMPI PUSH1 0x20 SWAP3 PUSH1 0x5 SHL DUP1 SWAP3 DUP5 DUP4 ADD CALLDATACOPY ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x1F DUP3 PUSH1 0x20 SWAP5 SWAP4 PUSH1 0x1F NOT SWAP4 DUP2 DUP7 MSTORE DUP7 DUP7 ADD CALLDATACOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP2 LT ISZERO PUSH2 0x56C5 JUMPI PUSH1 0x5 SHL ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x46E JUMPI SWAP1 JUMP JUMPDEST SWAP1 SWAP3 PUSH2 0x4EAE SWAP5 SWAP4 PUSH1 0x80 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP5 MSTORE AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x40 DUP3 ADD MSTORE DUP2 PUSH1 0x60 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x4F5F JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x46E JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x5749 DUP2 PUSH2 0x4E2D JUMP JUMPDEST SWAP4 PUSH2 0x5757 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x4E0A JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x46E JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x5780 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x5772 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x46E JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x46E JUMPI PUSH2 0x4EAE SWAP3 ADD PUSH2 0x572E JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x57C2 DUP3 PUSH2 0x4D69 JUMP JUMPDEST PUSH1 0x60 PUSH1 0xC0 DUP4 PUSH0 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE PUSH0 DUP4 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE PUSH0 PUSH1 0xA0 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x60 DUP3 DUP5 SUB SLT PUSH2 0x46E JUMPI DUP2 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x46E JUMPI DUP5 PUSH2 0x5817 SWAP2 DUP4 ADD PUSH2 0x572E JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP3 ADD MLOAD SWAP4 PUSH1 0x40 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x46E JUMPI PUSH2 0x4EAE SWAP3 ADD PUSH2 0x5533 JUMP JUMPDEST SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x5841 JUMPI MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x4EAE SWAP2 PUSH1 0x20 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xC0 PUSH2 0x58AF PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0xE0 PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x100 DUP5 ADD SWAP1 PUSH2 0x544D JUMP JUMPDEST SWAP3 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x58CC PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0xA0 DUP6 ADD SWAP1 PUSH2 0x5834 JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD MLOAD ISZERO ISZERO DUP3 DUP5 ADD MSTORE ADD MLOAD SWAP1 PUSH1 0xE0 PUSH1 0x1F NOT DUP3 DUP6 SUB ADD SWAP2 ADD MSTORE PUSH2 0x4FFC JUMP JUMPDEST PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x5841 JUMPI MSTORE JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP2 DUP2 DUP5 SUB SLT PUSH2 0x46E JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x46E JUMPI ADD SWAP2 DUP1 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x46E JUMPI DUP3 MLOAD PUSH2 0x592D DUP2 PUSH2 0x4E2D JUMP JUMPDEST SWAP4 PUSH2 0x593B PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x4E0A JUMP JUMPDEST DUP2 DUP6 MSTORE DUP4 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x46E JUMPI DUP4 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x5962 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x46E JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x5954 JUMP JUMPDEST SWAP1 PUSH2 0x598B DUP3 PUSH2 0x4E2D JUMP JUMPDEST PUSH2 0x5998 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x4E0A JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x59A8 DUP3 SWAP5 PUSH2 0x4E2D JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x5841 JUMPI MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x5841 JUMPI MSTORE JUMP JUMPDEST SWAP1 PUSH2 0x4EAE SWAP2 PUSH1 0x20 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xC0 PUSH2 0x5A0C PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0xE0 PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x100 DUP5 ADD SWAP1 PUSH2 0x544D JUMP JUMPDEST SWAP3 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x58CC PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0xA0 DUP6 ADD SWAP1 PUSH2 0x59BE JUMP JUMPDEST SWAP2 PUSH1 0x60 DUP4 DUP4 SUB SLT PUSH2 0x46E JUMPI DUP3 MLOAD SWAP3 PUSH1 0x20 DUP2 ADD MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP2 GT PUSH2 0x46E JUMPI DUP2 PUSH2 0x5A5A SWAP2 DUP5 ADD PUSH2 0x572E JUMP JUMPDEST SWAP4 PUSH1 0x40 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x46E JUMPI PUSH2 0x4EAE SWAP3 ADD PUSH2 0x5533 JUMP JUMPDEST SWAP1 PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x5841 JUMPI MSTORE JUMP JUMPDEST PUSH2 0x160 PUSH2 0x4EAE SWAP3 PUSH1 0x20 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND PUSH1 0x20 DUP6 ADD MSTORE PUSH2 0x5AAC PUSH1 0x20 DUP4 ADD MLOAD PUSH1 0x40 DUP7 ADD SWAP1 PUSH2 0x5A71 JUMP JUMPDEST DUP1 PUSH1 0x40 DUP4 ADD MLOAD AND PUSH1 0x60 DUP6 ADD MSTORE DUP1 PUSH1 0x60 DUP4 ADD MLOAD AND PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0x80 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH2 0x100 SWAP1 DUP2 DUP6 ADD MSTORE DUP2 ADD MLOAD SWAP1 PUSH2 0x120 SWAP2 ISZERO ISZERO DUP3 DUP6 ADD MSTORE ADD MLOAD SWAP2 PUSH2 0x140 DUP1 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x56C5 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x5B4D JUMPI RETURNDATASIZE SWAP1 PUSH2 0x5B34 DUP3 PUSH2 0x4EC0 JUMP JUMPDEST SWAP2 PUSH2 0x5B42 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x4E0A JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x22717DB200000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x4 DUP2 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x5BB2 DUP3 PUSH2 0x4DEE JUMP JUMPDEST DUP1 EXTCODESIZE ISZERO PUSH2 0x46E JUMPI PUSH2 0x5BFE PUSH0 SWAP3 SWAP2 DUP4 SWAP3 PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x757D64B300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x20 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD SWAP1 PUSH2 0x4FFC JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 PUSH2 0x5C91 JUMPI JUMPDEST POP PUSH2 0x5C32 JUMPI PUSH2 0x5C1E PUSH2 0x5C19 PUSH2 0x5B23 JUMP JUMPDEST PUSH2 0x65A0 JUMP JUMPDEST PUSH1 0x20 DUP2 DUP1 MLOAD DUP2 ADD SUB SLT PUSH2 0x46E JUMPI PUSH1 0x20 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x12 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x556E657870656374656420737563636573730000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST PUSH2 0x5C9A SWAP1 PUSH2 0x4D85 JUMP JUMPDEST PUSH0 PUSH2 0x5C09 JUMP JUMPDEST SWAP1 PUSH2 0x4EAE SWAP2 PUSH1 0x20 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xA0 PUSH2 0x5CE0 PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0xC0 PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0xE0 DUP5 ADD SWAP1 PUSH2 0x544D JUMP JUMPDEST SWAP3 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x5CFC PUSH1 0x80 DUP3 ADD MLOAD DUP4 DUP6 ADD SWAP1 PUSH2 0x5834 JUMP JUMPDEST ADD MLOAD SWAP1 PUSH1 0xC0 PUSH1 0x1F NOT DUP3 DUP6 SUB ADD SWAP2 ADD MSTORE PUSH2 0x4FFC JUMP JUMPDEST SWAP1 PUSH2 0x4EAE SWAP2 PUSH1 0x20 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA0 PUSH2 0x5D5A PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0xC0 PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xE0 DUP5 ADD SWAP1 PUSH2 0x544D JUMP JUMPDEST SWAP3 PUSH2 0x5CFC PUSH1 0x80 DUP3 ADD MLOAD DUP4 DUP6 ADD SWAP1 PUSH2 0x59BE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x58307E4400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x4 DUP2 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x5BB2 DUP3 PUSH2 0x4DEE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x5DD9 DUP3 PUSH2 0x4D99 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x120 DUP4 PUSH0 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD MSTORE PUSH0 PUSH1 0x40 DUP3 ADD MSTORE PUSH0 DUP4 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE PUSH0 PUSH1 0xA0 DUP3 ADD MSTORE PUSH0 PUSH1 0xC0 DUP3 ADD MSTORE PUSH0 PUSH1 0xE0 DUP3 ADD MSTORE PUSH0 PUSH2 0x100 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x45D132FE00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x4 DUP2 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x5BB2 DUP3 PUSH2 0x4DEE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB3B0A7A700000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x4 DUP2 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x5BB2 DUP3 PUSH2 0x4DEE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xD3A5152A00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x4 DUP2 MSTORE PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x5BB2 DUP3 PUSH2 0x4DEE JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x5F41 CALLER PUSH2 0x6169 JUMP JUMPDEST SWAP1 PUSH32 0x0 SWAP4 DUP5 TLOAD PUSH2 0x604C JUMPI PUSH1 0x1 SWAP1 PUSH1 0x1 DUP7 TSTORE PUSH2 0x5F7A DUP4 PUSH2 0x4E2D JUMP JUMPDEST SWAP3 PUSH2 0x5F88 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x4E0A JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x1F NOT PUSH2 0x5F97 DUP3 PUSH2 0x4E2D JUMP JUMPDEST ADD PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x603B JUMPI POP POP PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x5FF2 JUMPI POP POP POP POP SWAP1 PUSH0 PUSH2 0x5FE7 SWAP3 SWAP5 TSTORE PUSH32 0x0 DUP1 TLOAD SWAP2 PUSH2 0x5FE9 JUMPI JUMPDEST POP PUSH2 0x6470 JUMP JUMPDEST JUMP JUMPDEST PUSH0 SWAP1 TSTORE PUSH0 PUSH2 0x5FE1 JUMP JUMPDEST DUP1 PUSH2 0x601F PUSH0 DUP1 PUSH2 0x6007 PUSH2 0x3AC DUP10 SWAP7 DUP9 DUP11 PUSH2 0x6074 JUMP JUMPDEST PUSH1 0x20 DUP2 MLOAD SWAP2 ADD ADDRESS GAS DELEGATECALL PUSH2 0x6018 PUSH2 0x5B23 JUMP JUMPDEST SWAP1 ADDRESS PUSH2 0x6AC8 JUMP JUMPDEST PUSH2 0x6029 DUP3 DUP9 PUSH2 0x5B0F JUMP JUMPDEST MSTORE PUSH2 0x6034 DUP2 DUP8 PUSH2 0x5B0F JUMP JUMPDEST POP ADD PUSH2 0x5FA5 JUMP JUMPDEST DUP1 PUSH1 0x60 PUSH1 0x20 DUP1 SWAP4 DUP10 ADD ADD MSTORE ADD PUSH2 0x5F9A JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP3 LT ISZERO PUSH2 0x56C5 JUMPI PUSH2 0x53BB SWAP2 PUSH1 0x5 SHL DUP2 ADD SWAP1 PUSH2 0x5607 JUMP JUMPDEST SWAP2 SWAP4 PUSH2 0x615B SWAP6 PUSH2 0x5BB2 SWAP5 PUSH2 0x6120 SWAP4 SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP1 PUSH32 0x0 AND SWAP10 DUP2 PUSH1 0x40 MLOAD SWAP10 PUSH2 0x60D6 DUP12 PUSH2 0x4D99 JUMP JUMPDEST CALLER DUP12 MSTORE PUSH0 PUSH1 0x20 DUP13 ADD MSTORE AND PUSH1 0x40 DUP11 ADD MSTORE AND PUSH1 0x60 DUP9 ADD MSTORE AND PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0xA0 DUP6 ADD MSTORE PUSH0 PUSH1 0xC0 DUP6 ADD MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0xE0 DUP6 ADD MSTORE PUSH0 PUSH2 0x100 DUP6 ADD MSTORE CALLDATASIZE SWAP2 PUSH2 0x4EDC JUMP JUMPDEST PUSH2 0x120 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP2 PUSH32 0xBE5AE84100000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x24 DUP4 ADD PUSH2 0x5A7E JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP5 MSTORE DUP4 PUSH2 0x4E0A JUMP JUMPDEST SWAP1 PUSH0 SWAP2 PUSH32 0x0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 TLOAD AND ISZERO PUSH2 0x61A1 JUMPI POP POP JUMP JUMPDEST SWAP1 SWAP2 SWAP3 POP TSTORE PUSH1 0x1 SWAP1 JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x604C JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND CALLER SUB PUSH2 0x620A JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP2 GT PUSH2 0x624A JUMPI AND SWAP1 JUMP JUMPDEST PUSH32 0x6DFCC65000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0xA0 PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 DUP2 SELFBALANCE LT PUSH2 0x6448 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x46E JUMPI PUSH1 0x40 SWAP2 DUP3 MLOAD SWAP2 PUSH32 0xD0E30DB000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH0 SWAP3 PUSH0 DUP2 PUSH1 0x4 DUP2 DUP10 DUP12 GAS CALL DUP1 ISZERO PUSH2 0x643E JUMPI PUSH2 0x642B JUMPI JUMPDEST POP AND SWAP3 DUP3 MLOAD SWAP5 PUSH1 0x20 SWAP6 DUP7 DUP2 ADD SWAP1 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP7 PUSH1 0x24 DUP3 ADD MSTORE DUP4 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x44 DUP2 MSTORE PUSH1 0x80 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xF19 JUMPI DUP7 MSTORE MLOAD PUSH2 0x634B SWAP2 DUP6 SWAP2 DUP3 SWAP2 DUP3 DUP7 GAS CALL PUSH2 0x6344 PUSH2 0x5B23 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x6AC8 JUMP JUMPDEST DUP1 MLOAD DUP8 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0x6406 JUMPI JUMPDEST POP POP SWAP1 POP PUSH2 0x63DB JUMPI SWAP1 PUSH1 0x44 DUP7 SWAP3 DUP5 DUP7 MLOAD SWAP8 DUP9 SWAP5 DUP6 SWAP4 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD MSTORE PUSH1 0x24 DUP5 ADD MSTORE GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x63D1 JUMPI POP POP PUSH2 0x63AD JUMPI POP POP JUMP JUMPDEST DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x63CA JUMPI JUMPDEST PUSH2 0x63C0 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x46E JUMPI JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x63B6 JUMP JUMPDEST MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 DUP3 REVERT JUMPDEST DUP4 DUP1 SWAP3 SWAP4 POP ADD SUB SLT PUSH2 0x6427 JUMPI DUP7 ADD MLOAD DUP1 ISZERO SWAP1 DUP2 ISZERO SUB PUSH2 0x6427 JUMPI DUP1 DUP8 PUSH0 PUSH2 0x6358 JUMP JUMPDEST DUP4 DUP1 REVERT JUMPDEST PUSH2 0x6436 SWAP2 SWAP4 POP PUSH2 0x4D85 JUMP JUMPDEST PUSH0 SWAP2 PUSH0 PUSH2 0x62D6 JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0xA01A9DF600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SELFBALANCE DUP1 ISZERO PUSH2 0x64AF JUMPI PUSH32 0x0 TLOAD PUSH2 0x64AF JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x5FE7 SWAP3 AND PUSH2 0x6A3D JUMP JUMPDEST POP POP JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH6 0xFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x46E JUMPI JUMP JUMPDEST SWAP2 PUSH1 0x44 SWAP3 SWAP4 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 SWAP5 DUP6 SWAP3 DUP3 DUP1 DUP6 MLOAD SWAP10 DUP11 SWAP6 DUP7 SWAP5 PUSH32 0xC9C1661B00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE AND PUSH1 0x4 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x6596 JUMPI PUSH0 SWAP4 PUSH0 SWAP6 PUSH2 0x655F JUMPI JUMPDEST POP POP PUSH2 0x655C PUSH2 0x6555 DUP6 SWAP5 PUSH2 0x5981 JUMP JUMPDEST SWAP5 DUP6 PUSH2 0x5B0F JUMP JUMPDEST MSTORE JUMP JUMPDEST DUP1 SWAP3 SWAP6 POP DUP2 SWAP5 POP RETURNDATASIZE DUP4 GT PUSH2 0x658F JUMPI JUMPDEST PUSH2 0x6578 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x46E JUMPI PUSH1 0x20 DUP3 MLOAD SWAP3 ADD MLOAD SWAP3 PUSH0 DUP1 PUSH2 0x6546 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x656E JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP2 MLOAD LT PUSH2 0x6614 JUMPI PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP4 ADD MLOAD AND SUB PUSH2 0x4231 JUMPI DUP1 PUSH1 0x24 PUSH1 0x20 PUSH2 0x4EAE SWAP4 MLOAD PUSH1 0x3 NOT DUP2 ADD PUSH1 0x4 DUP6 ADD MSTORE DUP4 ADD ADD SWAP2 ADD PUSH2 0x5579 JUMP JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0xE0 DUP2 ADD CALLDATALOAD TIMESTAMP GT PUSH2 0x67EC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 ADD CALLDATALOAD SWAP2 PUSH1 0x2 DUP4 LT ISZERO PUSH2 0x46E JUMPI PUSH1 0x40 SWAP3 PUSH2 0x666C DUP3 DUP6 ADD PUSH2 0x559F JUMP JUMPDEST SWAP3 DUP1 PUSH1 0x60 SWAP5 DUP6 SWAP4 DUP5 DUP7 ADD PUSH2 0x667F SWAP1 PUSH2 0x559F JUMP JUMPDEST SWAP6 PUSH2 0x668C PUSH1 0x80 DUP3 ADD PUSH2 0x559F JUMP JUMPDEST SWAP1 DUP5 PUSH2 0x669C PUSH2 0x120 DUP4 ADD DUP4 PUSH2 0x5607 JUMP JUMPDEST SWAP2 SWAP1 DUP13 MLOAD SWAP6 PUSH2 0x66AA DUP8 PUSH2 0x4D69 JUMP JUMPDEST DUP7 MSTORE DUP2 PUSH1 0x20 DUP8 ADD SWAP8 AND DUP8 MSTORE DUP2 DUP14 DUP8 ADD SWAP12 AND DUP12 MSTORE DUP2 DUP11 DUP8 ADD SWAP6 AND DUP6 MSTORE PUSH1 0x80 DUP7 ADD SWAP3 PUSH1 0xA0 DUP6 ADD CALLDATALOAD DUP5 MSTORE PUSH1 0xA0 DUP8 ADD SWAP5 PUSH1 0xC0 ADD CALLDATALOAD DUP6 MSTORE CALLDATASIZE SWAP1 PUSH2 0x66E7 SWAP3 PUSH2 0x4EDC JUMP JUMPDEST SWAP4 PUSH1 0xC0 DUP7 ADD SWAP5 DUP6 MSTORE DUP2 DUP14 MLOAD SWAP12 DUP13 SWAP11 DUP12 SWAP10 DUP11 SWAP10 PUSH32 0x2BFB780C00000000000000000000000000000000000000000000000000000000 DUP12 MSTORE PUSH1 0x4 DUP12 ADD PUSH1 0x20 SWAP1 MSTORE PUSH1 0x24 DUP12 ADD SWAP1 MLOAD SWAP1 PUSH2 0x6734 SWAP2 PUSH2 0x5A71 JUMP JUMPDEST MLOAD AND PUSH1 0x44 DUP10 ADD MSTORE MLOAD AND PUSH1 0x64 DUP8 ADD MSTORE MLOAD AND PUSH1 0x84 DUP6 ADD MSTORE MLOAD PUSH1 0xA4 DUP5 ADD MSTORE MLOAD PUSH1 0xC4 DUP4 ADD MSTORE MLOAD PUSH1 0xE4 DUP3 ADD PUSH1 0xE0 SWAP1 MSTORE PUSH2 0x104 DUP3 ADD PUSH2 0x676C SWAP2 PUSH2 0x4FFC JUMP JUMPDEST SUB SWAP2 PUSH32 0x0 AND GAS SWAP1 PUSH0 SWAP2 CALL SWAP1 DUP2 ISZERO PUSH2 0x6596 JUMPI PUSH0 SWAP4 PUSH0 SWAP4 PUSH0 SWAP4 PUSH2 0x67AF JUMPI JUMPDEST POP POP POP SWAP1 SWAP2 SWAP3 JUMP JUMPDEST SWAP3 POP SWAP3 POP DUP1 SWAP4 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x67E5 JUMPI JUMPDEST PUSH2 0x67C9 DUP2 DUP4 PUSH2 0x4E0A JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x46E JUMPI DUP2 MLOAD PUSH1 0x20 DUP4 ADD MLOAD SWAP2 SWAP1 SWAP3 ADD MLOAD PUSH0 DUP1 DUP1 PUSH2 0x67A7 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x67BF JUMP JUMPDEST PUSH32 0xE08B8AF000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP3 DUP3 ISZERO PUSH2 0x6940 JUMPI DUP1 PUSH2 0x690B JUMPI JUMPDEST ISZERO PUSH2 0x6872 JUMPI POP PUSH2 0x5FE7 SWAP2 PUSH32 0x0 PUSH32 0x0 PUSH2 0x6946 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP1 EXTCODESIZE ISZERO PUSH2 0x46E JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP4 SWAP1 SWAP3 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE PUSH0 SWAP1 DUP3 SWAP1 PUSH1 0x64 SWAP1 DUP3 SWAP1 DUP5 SWAP1 GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0x6902 JUMPI POP JUMP JUMPDEST PUSH2 0x5FE7 SWAP1 PUSH2 0x4D85 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH32 0x0 AND SWAP1 DUP3 AND EQ PUSH2 0x6821 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST SWAP4 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP1 EXTCODESIZE ISZERO PUSH2 0x46E JUMPI PUSH1 0x40 MLOAD PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 DUP9 DUP2 SWAP13 AND SWAP7 DUP8 PUSH1 0x4 DUP5 ADD MSTORE ADDRESS PUSH1 0x24 DUP5 ADD MSTORE DUP11 PUSH1 0x44 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x463 JUMPI PUSH2 0x6A2A JUMPI JUMPDEST POP DUP1 DUP7 SWAP2 EXTCODESIZE ISZERO PUSH2 0x6A26 JUMPI DUP2 SWAP1 PUSH1 0x24 PUSH1 0x40 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x2E1A7D4D00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP10 PUSH1 0x4 DUP5 ADD MSTORE GAS CALL DUP1 ISZERO PUSH2 0x6A1B JUMPI PUSH2 0x6A03 JUMPI JUMPDEST POP PUSH2 0x5FE7 SWAP4 SWAP5 POP AND PUSH2 0x6A3D JUMP JUMPDEST PUSH2 0x6A0D DUP7 SWAP2 PUSH2 0x4D85 JUMP JUMPDEST PUSH2 0x6A17 JUMPI DUP5 PUSH2 0x69F6 JUMP JUMPDEST DUP5 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP9 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST PUSH2 0x6A35 SWAP2 SWAP7 POP PUSH2 0x4D85 JUMP JUMPDEST PUSH0 SWAP5 PUSH0 PUSH2 0x69AB JUMP JUMPDEST DUP2 SELFBALANCE LT PUSH2 0x6A8D JUMPI PUSH0 DUP1 DUP1 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 SWAP5 AND GAS CALL PUSH2 0x6A5D PUSH2 0x5B23 JUMP JUMPDEST POP ISZERO PUSH2 0x6A65 JUMPI JUMP JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0xCD78605900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE ADDRESS PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x6614 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST SWAP1 PUSH2 0x6ADD JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x6A65 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x6B23 JUMPI JUMPDEST PUSH2 0x6AEE JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x6AE6 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x4F 0xE2 BLOBBASEFEE PUSH26 0xFBAF5DA03FEDC54A46DF276F44033A70BBBE19D61DDFAEC46BD6 MOD OR PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"978:7807:91:-:0;;;;;;;;;-1:-1:-1;978:7807:91;;;;;;;;-1:-1:-1;;;;;13086:5:65;978:7807:91;13064:10:65;:28;13060:79;;978:7807:91;13060:79:65;13115:13;;;978:7807:91;13115:13:65;;978:7807:91;;;;;;;;;;;;;;;3233:11:64;978:7807:91;3233:11:64;;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;38694:545:64;978:7807:91;38694:545:64;;;978:7807:91;;;;;;;;;;26883:571:64;978:7807:91;26883:571:64;;;978:7807:91;;;;;;;;;;;;;;;;;;;;37603:527:64;978:7807:91;37603:527:64;;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;32938:574:64;978:7807:91;32938:574:64;;;978:7807:91;;;;;4143:45;978:7807;4143:45;;;978:7807;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20370:539:64;978:7807:91;20370:539:64;;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;21527:540:64;978:7807:91;21527:540:64;;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5971:387:64;978:7807:91;5971:387:64;;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;14435:403:64;978:7807:91;14435:403:64;;;978:7807:91;13299:404:64;978:7807:91;13299:404:64;978:7807:91;;;;;;:::i;:::-;436:67:72;;:::i;:::-;-1:-1:-1;;;;;29532:11:64;;;;;;:::i;:::-;29565:13;;;:::i;:::-;29610:19;;978:7807:91;29610:19:64;;;;:::i;:::-;29710:11;;;;;978:7807:91;;;;;;;;29749:15:64;29489:290;29456:333;29749:15;978:7807:91;29749:15:64;978:7807:91;;29749:15:64;;978:7807:91;29749:15:64;;;;;;978:7807:91;29749:15:64;;;;:::i;:::-;978:7807:91;;;;;;;;:::i;:::-;;;;;29532:11:64;29489:290;;978:7807:91;;;;:::i;:::-;;29489:290:64;;978:7807:91;29664:22:64;978:7807:91;;29489:290:64;;978:7807:91;29710:11:64;29489:290;;;:::i;:::-;978:7807:91;;;:::i;:::-;29489:290:64;;;978:7807:91;;;29456:333:64;;;;;;978:7807:91;29456:333:64;;978:7807:91;29456:333:64;;;:::i;:::-;;:6;;978:7807:91;29456:333:64;;;;;;978:7807:91;;;;;29456:333:64;;;978:7807:91;;;;;;;;;;;:::i;:::-;;;;29456:333:64;;;978:7807:91;29456:333:64;;;;;;;978:7807:91;29456:333:64;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;978:7807:91;;;;;;;;;;;;;;13215:506:64;13004:109;978:7807:91;13215:506:64;978:7807:91;;;;;:::i;:::-;12899:10:64;;;;;;;;3599:19:66;12899:10:64;3599:19:66;:::i;:::-;13004:109:64;;;:::i;:::-;978:7807:91;;;-1:-1:-1;;;;;978:7807:91;;;;;;;;;:::i;:::-;12899:10:64;978:7807:91;;13299:404:64;978:7807:91;;;;13299:404:64;;;978:7807:91;;13299:404:64;;978:7807:91;13299:404:64;;;978:7807:91;13549:41:64;13299:404;;;978:7807:91;;;13299:404:64;;;978:7807:91;13299:404:64;;;978:7807:91;;;13215:506:64;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;13215:506:64;;;;;;:::i;:::-;978:7807:91;;13184:551:64;;;;;;978:7807:91;13184:551:64;;;978:7807:91;13184:551:64;;978:7807:91;13215:506:64;978:7807:91;;;;:::i;:::-;13184:551:64;:6;;978:7807:91;13184:551:64;;;;;;;13804:22;13184:551;13160:626;13184:551;978:7807:91;13184:551:64;;;978:7807:91;;;;;;13160:626:64;;;;;;:::i;:::-;13804:22;;;;:::i;:::-;978:7807:91;4282:82:66;;;978:7807:91;;;;;;;4282:82:66;978:7807:91;4704:12:66;3051:52:55;4282:82:66;;13184:551:64;;;;;;978:7807:91;13184:551:64;;;;;;:::i;:::-;;;;;:::i;:::-;;;;978:7807:91;14351:505:64;;978:7807:91;;;14200:65:64;978:7807:91;;;:::i;:::-;14111:10:64;3599:19:66;14111:10:64;;;;;;;;;;3599:19:66;:::i;:::-;14200:65:64;;;:::i;:::-;978:7807:91;;-1:-1:-1;;;;;978:7807:91;;;;;;;:::i;:::-;14111:10:64;978:7807:91;;14435:403:64;;978:7807:91;;14435:403:64;;;978:7807:91;;14435:403:64;;978:7807:91;14435:403:64;;;978:7807:91;14683:42:64;14435:403;;;978:7807:91;;;14435:403:64;;;978:7807:91;14435:403:64;;;978:7807:91;;;14351:505:64;;;;;;;;;;;;:::i;:::-;978:7807:91;;14320:550:64;;;;;;978:7807:91;14320:550:64;;;978:7807:91;14320:550:64;;978:7807:91;14351:505:64;978:7807:91;;;;:::i;:::-;14320:550:64;:6;;978:7807:91;14320:550:64;;;;;;14296:625;14320:550;978:7807:91;14320:550:64;;;978:7807:91;;;;;;14296:625:64;;;;;;:::i;:::-;4282:82:66;;;;;978:7807:91;;;;;;14320:550:64;;;;;;978:7807:91;14320:550:64;;;;;;:::i;:::-;;;;978:7807:91;;;;;-1:-1:-1;;978:7807:91;;;;;;2597:59;978:7807;;:::i;:::-;;;:::i;:::-;;;2597:59;;:::i;:::-;978:7807;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;978:7807:91;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;25528:649:64;;3599:19:66;978:7807:91;;;;;;;;:::i;:::-;3599:19:66;;:::i;:::-;978:7807:91;-1:-1:-1;;;;;978:7807:91;;;;;;;:::i;:::-;25852:4:64;978:7807:91;;;;;;25614:545:64;;;978:7807:91;;25614:545:64;;978:7807:91;25614:545:64;978:7807:91;25614:545:64;;978:7807:91;26023:27:64;978:7807:91;25614:545:64;;978:7807:91;25614:545:64;;;;978:7807:91;25614:545:64;;;978:7807:91;;;25528:649:64;;;;;;;;978:7807:91;25528:649:64;;;:::i;:::-;978:7807:91;;25498:693:64;;;;;;978:7807:91;25498:693:64;;;978:7807:91;25498:693:64;;978:7807:91;;;;;;:::i;:::-;25498:693:64;:6;;978:7807:91;25498:693:64;;;;;;25474:768;25498:693;978:7807:91;25498:693:64;;;978:7807:91;;;;;;25474:768:64;;;;;;:::i;:::-;4282:82:66;;;;;;978:7807:91;;;;;;25498:693:64;;;;;;978:7807:91;25498:693:64;;;;;;:::i;:::-;;;;978:7807:91;;;;;-1:-1:-1;;978:7807:91;;;;;;;;;;;;;;;;;;;-1:-1:-1;;978:7807:91;;;;;1083:103:53;;:::i;:::-;2137:49:91;;978:7807;;:::i;:::-;;;2137:49;;;;978:7807;2137:49;;978:7807;2137:49;;;:::i;:::-;;2152:4;978:7807;2152:4;2137:49;;;;;;;;978:7807;;551:66:53;3051:52:55;978:7807:91;2137:49;;;;;;;;;;;;;;:::i;:::-;;;978:7807;;;;2137:49;;;;;;;;978:7807;;;;;-1:-1:-1;;978:7807:91;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;34059:720:64;;978:7807:91;;3599:19:66;978:7807:91;;;;;;;;:::i;:::-;3599:19:66;;:::i;:::-;978:7807:91;-1:-1:-1;;;;;978:7807:91;;;;;;;;:::i;:::-;34411:4:64;978:7807:91;;;;34156:601:64;;978:7807:91;;34156:601:64;;978:7807:91;;;;34156:601:64;;978:7807:91;34610:26:64;978:7807:91;34156:601:64;;978:7807:91;34156:601:64;978:7807:91;34156:601:64;;978:7807:91;34156:601:64;;;978:7807:91;;;34059:720:64;;;;978:7807:91;34059:720:64;;;978:7807:91;34059:720:64;;;:::i;:::-;978:7807:91;;34025:772:64;;;;;;978:7807:91;34025:772:64;;978:7807:91;;34025:772:64;;978:7807:91;;;;;;:::i;:::-;34025:772:64;:6;;978:7807:91;34025:772:64;;;;;;;978:7807:91;34025:772:64;33997:859;34025:772;978:7807:91;34025:772:64;;;978:7807:91;;;;;;33997:859:64;;;;;;:::i;:::-;4282:82:66;;;;;;978:7807:91;;;;;;;;:::i;4282:82:66:-;978:7807:91;4704:12:66;3051:52:55;4282:82:66;;34025:772:64;;;;;;978:7807:91;34025:772:64;;;;;;:::i;:::-;;;;978:7807:91;5890:486:64;;978:7807:91;;;;;;:::i;:::-;3599:19:66;5761:10:64;;;;;;;;3599:19:66;:::i;:::-;978:7807:91;-1:-1:-1;;;;;978:7807:91;;;;;;;:::i;:::-;5761:10:64;978:7807:91;;5971:387:64;;978:7807:91;;5971:387:64;;;978:7807:91;;5971:387:64;;978:7807:91;5971:387:64;;;978:7807:91;6218:27:64;5971:387;;;978:7807:91;;;5971:387:64;;;978:7807:91;5971:387:64;;;978:7807:91;;;5890:486:64;;;;;;;;;;;;:::i;978:7807:91:-;;-1:-1:-1;;978:7807:91;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;7888:421:64;;978:7807:91;;;;;;;;;;:::i;:::-;3599:19:66;7839:10:64;3599:19:66;:::i;:::-;978:7807:91;-1:-1:-1;;;;;978:7807:91;;;;;;;;:::i;:::-;7839:10:64;978:7807:91;;;;7961:334:64;;978:7807:91;;7961:334:64;;978:7807:91;7961:334:64;978:7807:91;7961:334:64;;978:7807:91;8169:25:64;978:7807:91;7961:334:64;;978:7807:91;7961:334:64;;;978:7807:91;7961:334:64;;;978:7807:91;;;7888:421:64;;;;978:7807:91;7888:421:64;;;978:7807:91;7888:421:64;;;:::i;:::-;978:7807:91;;7861:458:64;;;;;;978:7807:91;7861:458:64;;978:7807:91;;7861:458:64;;978:7807:91;;;;;;:::i;:::-;7861:458:64;:6;;978:7807:91;7861:458:64;;;;;;;;978:7807:91;4282:82:66;;;978:7807:91;4282:82:66;978:7807:91;4704:12:66;3051:52:55;978:7807:91;7861:458:64;;;;;978:7807:91;7861:458:64;;;;;;:::i;:::-;;;;;978:7807:91;;;;;-1:-1:-1;;978:7807:91;;;;;1083:103:53;;:::i;:::-;978:7807:91;;;;;;;;;;;;;;;;;;;;1985:1;978:7807;;;;;;;;;;1894:94;;;;978:7807;1894:94;;;978:7807;1894:94;;978:7807;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1894:94;1909:4;;;1894:94;;;;;;;;978:7807;551:66:53;3051:52:55;978:7807:91;1894:94;;;;;978:7807;1894:94;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;978:7807;;;;;;;;;;;;;;;39815:17:64;978:7807:91;;;:::i;:::-;1083:103:53;;:::i;:::-;436:67:72;;:::i;:::-;39815:17:64;:::i;:::-;3051:52:55;;978:7807:91;551:66:53;3051:52:55;978:7807:91;;;;;;;;;;;;;;;;;;-1:-1:-1;;978:7807:91;;;;;;;:::i;:::-;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;436:67:72;;:::i;:::-;-1:-1:-1;;;;;36066:11:64;;;;;:::i;:::-;36105:13;;;:::i;:::-;36214:20;;978:7807:91;36214:20:64;;;;:::i;:::-;36262:11;;;;;978:7807:91;;;;;;;;36305:15:64;36016:323;35976:377;36305:15;978:7807:91;;36305:15:64;978:7807:91;36305:15:64;978:7807:91;36305:15:64;;;;;;978:7807:91;36305:15:64;;;;:::i;978:7807:91:-;;;;;36066:11:64;36016:323;;978:7807:91;36156:21:64;978:7807:91;;36016:323:64;;978:7807:91;;;;:::i;:::-;;36016:323:64;;978:7807:91;36262:11:64;36016:323;;;:::i;978:7807:91:-;36016:323:64;;;978:7807:91;;;35976:377:64;;;;;;978:7807:91;35976:377:64;;978:7807:91;35976:377:64;;;:::i;:::-;;:6;;978:7807:91;35976:377:64;;;;;;978:7807:91;;;;;35976:377:64;;;978:7807:91;;;;;;;;;;;:::i;35976:377:64:-;;;978:7807:91;35976:377:64;;;;;;;978:7807:91;35976:377:64;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;978:7807:91;;;;;-1:-1:-1;;978:7807:91;;;;;;;:::i;:::-;-1:-1:-1;;;;;978:7807:91;;;;;35135:96:64;;;;;;978:7807:91;;35135:96:64;;978:7807:91;35206:4:64;978:7807:91;;;;;;;;;;;35135:96:64;;978:7807:91;;;;;;;;;;;;;;;;;;;;35101:148:64;;;;;;978:7807:91;;;35101:148:64;978:7807:91;;;;;;;:::i;:::-;35101:148:64;;:6;;978:7807:91;35101:148:64;;;;;;;35073:219;35101:148;978:7807:91;35101:148:64;;;978:7807:91;;;;;;;35073:219:64;;;;;;:::i;:::-;978:7807:91;;;;;;;;;;;;;;:::i;35101:148:64:-;;;;978:7807:91;35101:148:64;;;;978:7807:91;35101:148:64;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;978:7807:91;;;;;-1:-1:-1;;978:7807:91;;;;;1083:103:53;;:::i;:::-;1745:49:91;978:7807;;;:::i;:::-;;;1745:49;;;;978:7807;1745:49;;978:7807;1745:49;;;:::i;:::-;;1760:4;;;1745:49;;;;;;;;978:7807;551:66:53;3051:52:55;978:7807:91;1745:49;;;;;978:7807;1745:49;;;;;;:::i;:::-;;;;;978:7807;;-1:-1:-1;;978:7807:91;;;;;;;;;;;;8105:22:65;978:7807:91;;;;;;;;:::i;:::-;8105:22:65;;:::i;:::-;978:7807:91;;;;;;;:::i;:::-;;;;;-1:-1:-1;;978:7807:91;;;;;;;;:::i;:::-;;;;3599:19:66;978:7807:91;;;:::i;:::-;3599:19:66;;;;;:::i;:::-;978:7807:91;-1:-1:-1;;;;;24413:6:64;;;978:7807:91;;;;12003:26:65;978:7807:91;12003:26:65;;978:7807:91;12003:26:65;;978:7807:91;12003:26:65;;978:7807:91;;12003:26:65;978:7807:91;12003:26:65;;;;;;;;;978:7807:91;12003:26:65;;;978:7807:91;;;12058:24:65;;;;:::i;:::-;12097:13;978:7807:91;12112:13:65;;;;;;978:7807:91;;;;24443:674:64;;978:7807:91;;;;;;;;;;;:::i;:::-;24767:4:64;978:7807:91;;;24529:570:64;;;;978:7807:91;;24529:570:64;;978:7807:91;;24529:570:64;;978:7807:91;24529:570:64;;;;978:7807:91;24529:570:64;;;;978:7807:91;24529:570:64;;;978:7807:91;;;24443:674:64;;;;;;;;978:7807:91;24443:674:64;;;:::i;:::-;978:7807:91;;24413:718:64;;;;;;978:7807:91;24413:718:64;;;978:7807:91;24413:718:64;;978:7807:91;;;;;;:::i;:::-;24413:718:64;;;;;;;;24389:793;24413:718;978:7807:91;24413:718:64;;;12092:91:65;978:7807:91;;;;;24389:793:64;;;;;;:::i;:::-;4282:82:66;;;;;12092:91:65;978:7807:91;;;;;;;;;;;;;:::i;4282:82:66:-;978:7807:91;4704:12:66;3051:52:55;4282:82:66;;24413:718:64;;;;;;978:7807:91;24413:718:64;;;;;;:::i;:::-;;;;12127:3:65;12146:26;978:7807:91;12146:26:65;978:7807:91;12146:26:65;;;:::i;:::-;978:7807:91;;12097:13:65;;12003:26;;;;;;978:7807:91;12003:26:65;;;;;;:::i;:::-;;;;;:::i;:::-;;;;978:7807:91;;;;:::i;:::-;21313:10:64;;;;;;;3599:19:66;;;:::i;:::-;978:7807:91;;;;;;;:::i;:::-;21313:10:64;978:7807:91;;21527:540:64;;;21637:18;1820:17:66;;-1:-1:-1;;;;;978:7807:91;;21527:540:64;;978:7807:91;-1:-1:-1;;;;;978:7807:91;21527:540:64;;;978:7807:91;-1:-1:-1;;;;;978:7807:91;21527:540:64;;;978:7807:91;21527:540:64;;;978:7807:91;21527:540:64;;;978:7807:91;;21527:540:64;;978:7807:91;;;21527:540:64;;;978:7807:91;;;;;;:::i;:::-;21527:540:64;;;978:7807:91;;;21435:654:64;21527:540;21435:654;;;978:7807:91;;;21435:654:64;;;;;;:::i;:::-;;-1:-1:-1;;21435:654:64;;;;;;;;:::i;:::-;978:7807:91;;21400:707:64;;978:7807:91;21400:707:64;;978:7807:91;21400:707:64;;21527:540;978:7807:91;;21435:654:64;978:7807:91;;;;;:::i;:::-;21400:707:64;:6;;-1:-1:-1;;;;;978:7807:91;21400:707:64;;;978:7807:91;21400:707:64;;;;;;;;;978:7807:91;21400:707:64;;;978:7807:91;;21527:540:64;978:7807:91;;;21372:776:64;;978:7807:91;;;;21527:540:64;21372:776;;;978:7807:91;4282:82:66;;;978:7807:91;;;;;;21400:707:64;;;;;;;978:7807:91;21400:707:64;;;;;;:::i;:::-;;;;;978:7807:91;;;;;-1:-1:-1;;978:7807:91;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;978:7807:91;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;19173:77:64;978:7807:91;;;;;;:::i;:::-;1083:103:53;;;:::i;:::-;436:67:72;;:::i;:::-;-1:-1:-1;;;;;978:7807:91;19173:6:64;;978:7807:91;;;;19173:77:64;;;;978:7807:91;19173:77:64;;978:7807:91;;19173:77:64;;978:7807:91;19173:77:64;;;:::i;:::-;;;;;;;;;;;;978:7807:91;19173:77:64;;;978:7807:91;;;;;19286:26:64;978:7807:91;19286:26:64;;978:7807:91;;19286:26:64;;978:7807:91;;19286:26:64;978:7807:91;19286:26:64;;;;;;;;;978:7807:91;19286:26:64;;;978:7807:91;19328:13:64;978:7807:91;19362:3:64;978:7807:91;;19343:17:64;;;;;19401:13;;;;:::i;:::-;978:7807:91;19432:13:64;;19428:160;;19362:3;978:7807:91;19362:3:64;;978:7807:91;19328:13:64;;19428:160;19544:9;;;;;:::i;:::-;978:7807:91;;19530:43:64;;;;;978:7807:91;;;19530:43:64;;-1:-1:-1;;;;;978:7807:91;;;;19530:43:64;;978:7807:91;;;;;;;;;;;;;;;-1:-1:-1;978:7807:91;;;-1:-1:-1;19530:43:64;;;;;;;;978:7807:91;19530:43:64;;;19428:160;;;;19530:43;;;;:::i;:::-;;;;19343:17;978:7807:91;19343:17:64;19619:6;19343:17;19619:6;:::i;:::-;978:7807:91;551:66:53;3051:52:55;978:7807:91;;;;;;;;;;;;;:::i;19286:26:64:-;;;;;;;978:7807:91;19286:26:64;;;;;;:::i;:::-;;;;;19173:77;;;;;;;978:7807:91;19173:77:64;;;;;;:::i;:::-;;;;;978:7807:91;;15429:533:64;978:7807:91;;15429:533:64;978:7807:91;;;:::i;:::-;15229:10:64;3599:19:66;15229:10:64;;;;;;;3599:19:66;:::i;:::-;978:7807:91;-1:-1:-1;;;;;978:7807:91;;;;;;;;:::i;:::-;15229:10:64;978:7807:91;;;15521:419:64;;;978:7807:91;;15521:419:64;;978:7807:91;;15521:419:64;;978:7807:91;15789:26:64;15521:419;;;978:7807:91;;;15521:419:64;;;978:7807:91;15521:419:64;;;978:7807:91;;;15429:533:64;;;;15521:419;15429:533;;;;;;;:::i;:::-;978:7807:91;;15394:586:64;;;;;;978:7807:91;15394:586:64;;15521:419;978:7807:91;15394:586:64;;978:7807:91;15429:533:64;978:7807:91;;;;:::i;:::-;;;;;;;:::i;:::-;1083:103:53;;:::i;:::-;436:67:72;;:::i;:::-;-1:-1:-1;;;;;978:7807:91;17314:11:64;;;;17232:6;;978:7807:91;;;17314:11:64;;;:::i;:::-;17349:13;;;;:::i;:::-;17450:20;978:7807:91;17450:20:64;;;;:::i;:::-;17494:11;;;;;;978:7807:91;;;;;;;;17533:15:64;17268:295;978:7807:91;17533:15:64;978:7807:91;;17533:15:64;17232:341;17533:15;;;;;;;;:::i;:::-;978:7807:91;;;;;;;;;;:::i;:::-;;;;;17314:11:64;17268:295;;978:7807:91;;17396:21:64;;978:7807:91;;17268:295:64;;978:7807:91;;;;:::i;:::-;17268:295:64;;;978:7807:91;;;17232:341:64;;;;978:7807:91;17232:341:64;;978:7807:91;17232:341:64;;;:::i;:::-;;;;;;;;;;;;978:7807:91;;;;;17232:341:64;;;978:7807:91;17709:11:64;;;;:::i;:::-;978:7807:91;;;;17688:33:64;978:7807:91;17688:33:64;;978:7807:91;;17688:33:64;;978:7807:91;;17688:33:64;978:7807:91;17688:33:64;;;;;;;;;978:7807:91;17688:33:64;;;978:7807:91;-1:-1:-1;17737:13:64;;17268:295;18016:16;;;-1:-1:-1;978:7807:91;17771:3:64;978:7807:91;;17752:17:64;;;;;17810:13;;;;:::i;:::-;978:7807:91;17841:14:64;;;17837:61;;17927:9;;;;;:::i;:::-;978:7807:91;;18016:16:64;;;:::i;:::-;:52;;;17771:3;18012:310;;;18132:13;18147:9;978:7807:91;18132:13:64;;;;:::i;:::-;18088:5;;18147:9;:::i;:::-;978:7807:91;17737:13:64;;18012:310;18282:13;;;:::i;:::-;18261:46;;;;;978:7807:91;;;18261:46:64;;-1:-1:-1;;;;;978:7807:91;;;;18261:46:64;;978:7807:91;;;;;;;;;;;;;;-1:-1:-1;978:7807:91;;;-1:-1:-1;18261:46:64;;;;;;;;978:7807:91;18261:46:64;;;18012:310;;;;18261:46;;;;:::i;:::-;;;;18016:52;18062:5;;;978:7807:91;18036:32:64;;18016:52;;17837:61;978:7807:91;17875:8:64;;;;17752:17;;978:7807:91;17752:17:64;18353:13;;17752:17;18353:13;:::i;:::-;;:::i;:::-;978:7807:91;551:66:53;3051:52:55;978:7807:91;;;;;;;:::i;17688:33:64:-;;;;;;;978:7807:91;17688:33:64;;;;;;:::i;:::-;;;;;17232:341;;;;;;;;17709:11;17232:341;;;;978:7807:91;17232:341:64;;;;;;:::i;:::-;;;;;;;;;;978:7807:91;;;;;-1:-1:-1;;978:7807:91;;;;;;;;:::i;:::-;;;;:::i;:::-;20156:10:64;;;;;;;3599:19:66;;;:::i;:::-;978:7807:91;;;;;;;:::i;:::-;20156:10:64;978:7807:91;;20370:539:64;;;978:7807:91;1820:17:66;;-1:-1:-1;;;;;978:7807:91;;20370:539:64;;978:7807:91;-1:-1:-1;;;;;978:7807:91;20370:539:64;;;978:7807:91;-1:-1:-1;;;;;978:7807:91;20370:539:64;;;978:7807:91;20370:539:64;;;978:7807:91;20370:539:64;;;978:7807:91;;20370:539:64;;978:7807:91;;;20370:539:64;;;978:7807:91;;;;;;:::i;:::-;;-1:-1:-1;;978:7807:91;;;;;;;:::i;:::-;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;6722:10:64;7033:498;;6825:107;3599:19:66;6722:10:64;3599:19:66;:::i;:::-;978:7807:91;;;6825:107:64;;;:::i;:::-;978:7807:91;-1:-1:-1;;;;;978:7807:91;;;;;;;:::i;:::-;6722:10:64;978:7807:91;;;;;;7114:399:64;;;978:7807:91;;7114:399:64;;978:7807:91;;;;7114:399:64;;978:7807:91;7361:39:64;978:7807:91;7114:399:64;;978:7807:91;;;;7114:399:64;;978:7807:91;;7114:399:64;;978:7807:91;;;7033:498:64;;;;;;;;978:7807:91;7033:498:64;;;:::i;978:7807:91:-;7002:543:64;:6;;978:7807:91;7002:543:64;;;;;;;7614:21;7002:543;6978:618;7002:543;978:7807:91;7002:543:64;;;978:7807:91;;;;;;6978:618:64;;;;;;:::i;:::-;7614:21;;;:::i;7002:543::-;;;;;;978:7807:91;7002:543:64;;;;;;:::i;:::-;;;;978:7807:91;4950:488:64;;978:7807:91;;;;;;:::i;:::-;3599:19:66;4818:10:64;;;;;;;;;3599:19:66;:::i;:::-;978:7807:91;-1:-1:-1;;;;;978:7807:91;;;;;;;:::i;:::-;4818:10:64;978:7807:91;;5031:389:64;;978:7807:91;;5031:389:64;;;978:7807:91;;5031:389:64;;978:7807:91;;5031:389:64;;978:7807:91;5031:389:64;;;;978:7807:91;;;5031:389:64;;;978:7807:91;5031:389:64;;;978:7807:91;;;4950:488:64;;;;;;;;;;;;:::i;:::-;978:7807:91;;4919:533:64;;;;;;978:7807:91;4919:533:64;;;978:7807:91;4919:533:64;;978:7807:91;4950:488:64;978:7807:91;;;;:::i;:::-;4919:533:64;:6;;978:7807:91;4919:533:64;;;;;;4895:608;4919:533;978:7807:91;4919:533:64;;;978:7807:91;;;;;4895:608:64;;;;;;:::i;978:7807:91:-;;;;;;;:::i;:::-;3599:19:66;6329:10:91;3599:19:66;:::i;:::-;-1:-1:-1;;;;;978:7807:91;;;6533:66;;;;;;;;;;;;978:7807;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6533:66;978:7807;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;6533:66;-1:-1:-1;;6533:66:91;;;;;;:::i;:::-;978:7807;;6519:81;;;;;;978:7807;6519:81;;;978:7807;6519:81;;978:7807;6533:66;978:7807;;;;:::i;:::-;6519:81;:6;;978:7807;6519:81;;;;;;;978:7807;6519:81;;;978:7807;;;;6491:181;;;978:7807;6491:181;;;;978:7807;;;;;6491:181;;;978:7807;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4282:82:66;;;978:7807:91;;;;;;;;:::i;4282:82:66:-;978:7807:91;4704:12:66;3051:52:55;4282:82:66;;6519:81:91;;;;;;;978:7807;6519:81;;;;;;:::i;:::-;;;;;978:7807;;;;;;;:::i;:::-;1083:103:53;;:::i;:::-;436:67:72;;:::i;:::-;22675:17:64;;;:::i;:::-;22720:14;;;;;;;:::i;:::-;22758:13;;;;:::i;:::-;22792:16;;;;;;;;:::i;:::-;11006:29:65;;;978:7807:91;11002:374:65;;;11074:6;;22876:16:64;11074:6:65;11082:8;978:7807:91;11074:6:65;;11051:5;11082:8;:::i;:::-;22833:13:64;;;:::i;:::-;22848:15;22876:16;22848:15;;;;;:::i;:::-;22876:16;;:::i;:::-;;;:::i;:::-;-1:-1:-1;;;;;22919:5:64;;978:7807:91;;;22908:16:64;22904:120;;11002:374:65;3051:52:55;978:7807:91;551:66:53;3051:52:55;978:7807:91;;;;;;22904:120:64;22999:13;;;;:::i;:::-;22904:120;;;11002:374:65;11126:12;11122:244;;11002:374;;;978:7807:91;11002:374:65;22876:16:64;11002:374:65;;;11122:244;-1:-1:-1;;;;;11215:8:65;;;978:7807:91;11253:6:65;;;978:7807:91;11262:20:65;;;;:::i;:::-;11215:86;;;;;;978:7807:91;;;11215:86:65;;-1:-1:-1;;;;;978:7807:91;;;;11215:86:65;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;978:7807:91;;;;;;-1:-1:-1;;11215:86:65;;;;;;;978:7807:91;11215:86:65;11319:32;11215:86;11319:32;11215:86;;;11122:244;978:7807:91;;;11319:32:65;;;;;;978:7807:91;11319:32:65;;;978:7807:91;11319:32:65;;978:7807:91;;;;;;-1:-1:-1;;;;;978:7807:91;;;;;;;;;;11319:32:65;;;;;;;;;;;11122:244;;;;11319:32;;;;;;;;;;;;;;:::i;:::-;;;978:7807:91;;;;11319:32:65;;;;;;;;11215:86;;;;:::i;:::-;;;;11006:29;978:7807:91;-1:-1:-1;;;;;11030:5:65;;978:7807:91;;;;11019:16:65;11006:29;;978:7807:91;;;;;-1:-1:-1;;978:7807:91;;;;;1083:103:53;;:::i;:::-;2329:43:91;;978:7807;;:::i;:::-;;;2329:43;;;;978:7807;2329:43;;978:7807;2329:43;;;:::i;978:7807::-;;;;;-1:-1:-1;;978:7807:91;;;;;;;:::i;:::-;;;:::i;:::-;436:67:72;;:::i;:::-;-1:-1:-1;;;;;36994:6:64;;;978:7807:91;;;36994:26:64;978:7807:91;36994:26:64;;978:7807:91;;;36994:26:64;;978:7807:91;;36994:26:64;978:7807:91;36994:26:64;;;;;;;;;978:7807:91;36980:48:64;37045:77;36994:26;;;;;;;978:7807:91;;;36980:48:64;:::i;:::-;978:7807:91;;;37045:77:64;;;;;;;978:7807:91;37045:77:64;;978:7807:91;;37045:77:64;978:7807:91;37045:77:64;;;:::i;:::-;;;;;;;;;978:7807:91;37045:77:64;978:7807:91;37045:77:64;;;978:7807:91;;;;;;;;;;;;;;;:::i;37045:77:64:-;;;;;;978:7807:91;37045:77:64;;;;;;:::i;:::-;;;;36994:26;;;;;;;;;;;;;:::i;:::-;;;;978:7807:91;;;;;-1:-1:-1;;978:7807:91;;;;;;4704:12:66;2295:53:55;-1:-1:-1;;;;;978:7807:91;;;;;;;;;;;;;;:::i;:::-;1083:103:53;;:::i;:::-;436:67:72;;:::i;:::-;-1:-1:-1;;;;;10097:6:64;978:7807:91;;;;10173:11:64;;;;;;;;;:::i;:::-;10206:13;;;;:::i;:::-;10251:19;;978:7807:91;10251:19:64;;;;:::i;:::-;10351:11;;;;;;978:7807:91;;;;;;;;10390:15:64;10130:290;978:7807:91;10390:15:64;978:7807:91;10097:333:64;10390:15;978:7807:91;10390:15:64;;;978:7807:91;10390:15:64;;;;;;;;:::i;:::-;978:7807:91;;;;;;;;:::i;:::-;;;;;10130:290:64;;;978:7807:91;;;;:::i;:::-;;10130:290:64;;978:7807:91;;10305:22:64;;978:7807:91;;10130:290:64;;978:7807:91;10351:11:64;10130:290;;;:::i;978:7807:91:-;10130:290:64;;;978:7807:91;;;10097:333:64;;;;978:7807:91;10097:333:64;;978:7807:91;10097:333:64;;;:::i;:::-;;;;;;;;;;;;978:7807:91;;;;;10097:333:64;;;978:7807:91;10565:11:64;;;;:::i;:::-;978:7807:91;;;10544:33:64;978:7807:91;10544:33:64;;978:7807:91;;10544:33:64;;978:7807:91;;10544:33:64;978:7807:91;10544:33:64;;;;;;;;;978:7807:91;10544:33:64;;;978:7807:91;-1:-1:-1;10593:13:64;;10130:290;10869:16;;;-1:-1:-1;978:7807:91;10627:3:64;978:7807:91;;10608:17:64;;;;;10661:9;;;;;:::i;:::-;978:7807:91;;10703:12:64;;;;:::i;:::-;978:7807:91;10734:13:64;;;10730:60;;10869:16;;;:::i;:::-;:52;;;10627:3;10865:490;;;10941:5;;10972:8;978:7807:91;10941:5:64;;;10972:8;:::i;:::-;978:7807:91;10593:13:64;;10865:490;11201:8;;;978:7807:91;11223:13:64;;;;:::i;:::-;11255:20;;;:::i;:::-;11201:91;;;;;978:7807:91;;;11201:91:64;;-1:-1:-1;;;;;978:7807:91;;;;11201:91:64;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;978:7807:91;;;;;;-1:-1:-1;;11201:91:64;;;;;;;11310:30;11201:91;;;;;10865:490;978:7807:91;;;11310:30:64;;;;;978:7807:91;11310:30:64;;978:7807:91;11310:30:64;;978:7807:91;;;;;;-1:-1:-1;;;;;978:7807:91;;;;;;;;;;11310:30:64;;;978:7807:91;11310:30:64;;;;;;;;;;;;10865:490;;;978:7807:91;10865:490:64;;;11310:30;;;;;;;;;;;;:::i;:::-;;;978:7807:91;;;;11310:30:64;;;;;;;;;11201:91;;;;:::i;:::-;;;;10869:52;10915:5;;;978:7807:91;10889:32:64;;10869:52;;10608:17;;;978:7807:91;10608:17:64;11429:13;;10608:17;11429:13;:::i;:::-;978:7807:91;551:66:53;3051:52:55;978:7807:91;;;;;;;:::i;10544:33:64:-;;;;;;978:7807:91;10544:33:64;;;;;;:::i;:::-;;;;10097:333;;;;;;;;10565:11;10097:333;;;;978:7807:91;10097:333:64;;;;;;:::i;:::-;;;;;;;;;;978:7807:91;;;;;-1:-1:-1;;978:7807:91;;;;;;;;4181:4;4162:25;;;978:7807;4162:25;;;;;;:::i;:::-;978:7807;;4143:45;;;;;;4162:25;978:7807;4143:45;;978:7807;;;;;;:::i;:::-;4143:45;;;978:7807;;;;;-1:-1:-1;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;978:7807:91;;-1:-1:-1;978:7807:91;;-1:-1:-1;978:7807:91;;;;;;;;;;;;;;;;;;;;;;32699:65:64;3599:19:66;978:7807:91;;;32849:681:64;;978:7807:91;;;:::i;:::-;3599:19:66;;;;;;;:::i;:::-;32699:65:64;;;:::i;:::-;978:7807:91;-1:-1:-1;;;;;978:7807:91;;;;;;;:::i;:::-;33181:4:64;978:7807:91;;32938:574:64;;978:7807:91;;32938:574:64;;;978:7807:91;;32938:574:64;;978:7807:91;;32938:574:64;;;978:7807:91;33361:42:64;32938:574;;;978:7807:91;32938:574:64;;;;978:7807:91;32938:574:64;;;978:7807:91;;;32849:681:64;;;;;;;;;;;;:::i;978:7807:91:-;12053:497:64;;978:7807:91;;;;;;:::i;:::-;3599:19:66;11919:10:64;;;;;;;;3599:19:66;:::i;:::-;978:7807:91;-1:-1:-1;;;;;978:7807:91;;;;;;;:::i;:::-;11919:10:64;978:7807:91;;12137:395:64;;978:7807:91;;12137:395:64;;;978:7807:91;;12137:395:64;;978:7807:91;;12137:395:64;;978:7807:91;12137:395:64;;;;978:7807:91;;;12137:395:64;;;978:7807:91;12137:395:64;;;978:7807:91;;;12053:497:64;;;;;;;;;;;;:::i;978:7807:91:-;12022:542:64;:6;;978:7807:91;12022:542:64;;;;;;11998:617;12022:542;978:7807:91;12022:542:64;;;978:7807:91;;;;;;11998:617:64;;;;;;:::i;:::-;4282:82:66;;;;;;978:7807:91;;;;;;;;;;;;;:::i;12022:542:64:-;;;;;;978:7807:91;12022:542:64;;;;;;:::i;:::-;;;;978:7807:91;;;;;-1:-1:-1;;978:7807:91;;;;;1083:103:53;;:::i;:::-;1375:48:91;978:7807;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1375:48;;;;978:7807;1375:48;;978:7807;1375:48;;;:::i;978:7807::-;;;;;-1:-1:-1;;978:7807:91;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;978:7807:91;;;;;4620:15;978:7807;4620:15;978:7807;;4620:15;978:7807;;;;;-1:-1:-1;;978:7807:91;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;28008:709:64;;978:7807:91;;3599:19:66;978:7807:91;;;;;;;;:::i;3599:19:66:-;978:7807:91;-1:-1:-1;;;;;978:7807:91;;;;;;;;:::i;:::-;28352:4:64;978:7807:91;;;;28102:593:64;;978:7807:91;;28102:593:64;;978:7807:91;;;;28102:593:64;;978:7807:91;;;28102:593:64;;978:7807:91;28102:593:64;978:7807:91;28102:593:64;;978:7807:91;28102:593:64;;;978:7807:91;;;28008:709:64;;;;978:7807:91;28008:709:64;;;978:7807:91;28008:709:64;;;:::i;978:7807:91:-;27974:761:64;:6;;978:7807:91;27974:761:64;;;;;;;978:7807:91;27974:761:64;27946:848;27974:761;978:7807:91;27974:761:64;;;978:7807:91;;;;;;27946:848:64;;;;;;:::i;:::-;4282:82:66;;;;;;978:7807:91;;;;;;;;:::i;4282:82:66:-;978:7807:91;4704:12:66;3051:52:55;4282:82:66;;27974:761:64;;;;;;978:7807:91;27974:761:64;;;;;;:::i;:::-;;;;978:7807:91;;;;;;;:::i;:::-;3599:19:66;;;;;;;;:::i;:::-;978:7807:91;-1:-1:-1;;;;;978:7807:91;;;;;;;;;:::i;:::-;37667:10:64;978:7807:91;;37603:527:64;;;;;;978:7807:91;1820:17:66;;978:7807:91;;37603:527:64;;978:7807:91;;37603:527:64;;;978:7807:91;;37603:527:64;;;978:7807:91;37603:527:64;;;978:7807:91;37603:527:64;;;978:7807:91;;;;37603:527:64;;978:7807:91;;;37603:527:64;;;978:7807:91;;;37603:527:64;;;978:7807:91;;;37517:635:64;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;37517:635:64;;;;;;;;:::i;:::-;978:7807:91;;37483:687:64;;;978:7807:91;37483:687:64;;;978:7807:91;37483:687:64;;978:7807:91;37517:635:64;978:7807:91;;;;;:::i;:::-;37483:687:64;:6;;978:7807:91;37483:687:64;;;978:7807:91;37483:687:64;;;;;;;;;978:7807:91;37483:687:64;;;978:7807:91;;;;;;37455:756:64;;978:7807:91;;;;37455:756:64;;978:7807:91;4282:82:66;;;978:7807:91;;;;;;37483:687:64;;;;;;978:7807:91;37483:687:64;;;;;;:::i;:::-;;;;978:7807:91;;;;;;;:::i;:::-;-1:-1:-1;;;;;6966:6:91;:345;:6;;978:7807;7042:11;;;;:::i;:::-;7075:13;;978:7807;7075:13;;;;;;;:::i;:::-;978:7807;7120:19;978:7807;7120:19;;;;:::i;:::-;978:7807;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;6999:302;;;978:7807;;;;:::i;:::-;;6999:302;;978:7807;7174:22;;;978:7807;7174:22;6999:302;;978:7807;6999:302;;;;978:7807;6999:302;;;978:7807;;;6966:345;;;;978:7807;6966:345;;978:7807;6966:345;;;:::i;:::-;;;;;;;;;;;;978:7807;;;;6966:345;;978:7807;7446:11;;;;:::i;:::-;978:7807;;;7425:33;978:7807;7425:33;;978:7807;;7425:33;;978:7807;;7425:33;978:7807;7425:33;;;;;;;;;978:7807;7425:33;;;978:7807;-1:-1:-1;7474:13:91;;7857:8;978:7807;;;-1:-1:-1;978:7807:91;7508:3;978:7807;;7489:17;;;;;7542:9;;;;;:::i;:::-;978:7807;;7584:12;;;;:::i;:::-;978:7807;7614:13;;7610:60;;7879:13;;;:::i;:::-;7911:20;;;;:::i;:::-;7857:91;;;;;;978:7807;;;7857:91;;-1:-1:-1;;;;;978:7807:91;;;;7857:91;;978:7807;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;978:7807:91;;;-1:-1:-1;978:7807:91;7857:91;;;;;;;7962:30;7857:91;;;;;978:7807;;;7962:30;;;;;978:7807;7962:30;;978:7807;7962:30;;978:7807;;;;;;-1:-1:-1;;;;;978:7807:91;;;;;;;;;;7962:30;;;978:7807;7962:30;;;;;;;;;;;;7508:3;;;978:7807;7508:3;7474:13;978:7807;7474:13;;7962:30;;;;;;;;;;;;:::i;:::-;;;978:7807;;;;7962:30;;;;;;;;;7857:91;;;;:::i;:::-;;;;7610:60;7647:8;;978:7807;7647:8;;;7489:17;;;;;;;;8125:11;;;:::i;:::-;8160:13;;8214:11;8160:13;;;:::i;:::-;8214:11;;:::i;:::-;978:7807;8237:13;;978:7807;8237:13;;;:::i;:::-;978:7807;;8207:44;;;;;978:7807;8207:44;;978:7807;;8207:44;;978:7807;8207:44;;;;;;;978:7807;8207:44;;;7469:534;978:7807;;8043:387;978:7807;;;;8284:28;978:7807;;8284:28;:::i;:::-;978:7807;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;8079:341;;;978:7807;;8079:341;;978:7807;7174:22;8079:341;;978:7807;8079:341;6999:302;8079:341;;978:7807;6999:302;8079:341;;978:7807;;;8043:387;;;;978:7807;8043:387;;978:7807;8043:387;;;:::i;:::-;;;;;;;;;;;;978:7807;;;;8043:387;;7469:534;8446:13;978:7807;8480:3;978:7807;;8461:17;;;;;8514:9;;;;;:::i;:::-;978:7807;;8557:13;;;;;:::i;:::-;978:7807;8588:14;;8584:61;;8741:13;;;:::i;:::-;8720:46;;;;;;978:7807;;;8720:46;;-1:-1:-1;;;;;978:7807:91;;;;8720:46;;978:7807;;;;;;;;;;;;;;;;-1:-1:-1;978:7807:91;;;-1:-1:-1;978:7807:91;8720:46;;;;;;;978:7807;8720:46;;;8480:3;;8446:13;978:7807;8446:13;;8720:46;;;;:::i;:::-;;;;8584:61;8622:8;978:7807;8622:8;;;;8461:17;;978:7807;8461:17;;978:7807;;;;;;;:::i;8043:387::-;;;;;;;;;;978:7807;8043:387;;;;;;:::i;:::-;;;;;;;;8207:44;;;;;;;;;;;;;;;;;;:::i;:::-;;;978:7807;;;;;;8207:44;;;8043:387;8207:44;;;;;;;7425:33;;;;;;978:7807;7425:33;;;;;;:::i;:::-;;;;6966:345;;;;;;;;;;978:7807;6966:345;;;;;;:::i;:::-;;;;;;;;978:7807;;;;;-1:-1:-1;;978:7807:91;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;978:7807:91;;;;;;;:::i;:::-;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;3599:19:66;978:7807:91;;;;;;:::i;:::-;3599:19:66;;:::i;:::-;978:7807:91;-1:-1:-1;;;;;10667:6:65;;;978:7807:91;;;;;10667:52:65;978:7807:91;10667:52:65;;978:7807:91;10667:52:65;;978:7807:91;10667:52:65;;978:7807:91;;;;;;;10667:52:65;978:7807:91;10667:52:65;;;;;;;;;978:7807:91;;;10667:52:65;;;978:7807:91;10744:24:65;978:7807:91;10744:24:65;31574:685:64;;10744:24:65;;;978:7807:91;10744:24:65;;:::i;:::-;10778:38;31471:1:64;10778:38:65;;;;:::i;:::-;978:7807:91;;;;;;;:::i;:::-;31906:4:64;978:7807:91;;;31663:578:64;;;;978:7807:91;;31663:578:64;;978:7807:91;;;;31663:578:64;;978:7807:91;31471:1:64;978:7807:91;31663:578:64;;978:7807:91;31663:578:64;978:7807:91;31663:578:64;;978:7807:91;31663:578:64;;;978:7807:91;;;31574:685:64;;;;;;;;978:7807:91;31574:685:64;;;:::i;:::-;978:7807:91;;31544:729:64;;;;;;978:7807:91;31544:729:64;;;978:7807:91;31544:729:64;;978:7807:91;;;;;;:::i;:::-;31544:729:64;;;;;;;;;32342:22;31544:729;31520:804;31544:729;978:7807:91;31544:729:64;;;978:7807:91;;;;;31520:804:64;;;;;;:::i;10667:52:65:-;;;;;978:7807:91;10667:52:65;;978:7807:91;10667:52:65;;;;;;978:7807:91;10667:52:65;;;:::i;:::-;;;978:7807:91;;;;;;;;;;;;;;;;10667:52:65;;;;;-1:-1:-1;10667:52:65;;978:7807:91;;;;;-1:-1:-1;;978:7807:91;;;;;;;;5051:30;;;978:7807;;5051:30;;978:7807;;;;;;;;;;;5051:30;978:7807;;;;3599:19:66;978:7807:91;;;:::i;:::-;3599:19:66;;;;;;;:::i;:::-;978:7807:91;-1:-1:-1;;;;;10667:6:65;;;978:7807:91;;;;;10667:52:65;978:7807:91;10667:52:65;;978:7807:91;10667:52:65;;978:7807:91;10667:52:65;;978:7807:91;;;;;;;10667:52:65;978:7807:91;10667:52:65;;;;;;;;;978:7807:91;;;10667:52:65;;;978:7807:91;10744:24:65;;26797:675:64;;978:7807:91;10744:24:65;;978:7807:91;10744:24:65;;;;;:::i;:::-;10778:38;978:7807:91;10778:38:65;;;;:::i;:::-;978:7807:91;;;;;;;:::i;:::-;27121:4:64;978:7807:91;;26883:571:64;;;;;978:7807:91;;26883:571:64;;978:7807:91;26883:571:64;;;978:7807:91;27306:39:64;26883:571;;;978:7807:91;26883:571:64;;;;978:7807:91;26883:571:64;;;978:7807:91;;;26797:675:64;;;;;;;;978:7807:91;26797:675:64;;;:::i;978:7807:91:-;26767:719:64;;;;;;;;;27555:21;26767:719;26743:794;26767:719;978:7807:91;26767:719:64;;;978:7807:91;;;;;26743:794:64;;;;;;:::i;10667:52:65:-;;;;978:7807:91;10667:52:65;;978:7807:91;10667:52:65;;;;;;978:7807:91;10667:52:65;;;:::i;:::-;;;978:7807:91;;;;;;;;;;;;26797:675:64;10667:52:65;;;;;-1:-1:-1;10667:52:65;;978:7807:91;;;;;-1:-1:-1;;978:7807:91;;;;;;;;-1:-1:-1;;;;;4253:8:65;978:7807:91;;;;;;-1:-1:-1;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;1083:103:53;;;;;:::i;:::-;978:7807:91;;;;;;1500:6:43;1496:65;;978:7807:91;5670:22:65;978:7807:91;;;;;5670:22:65;;;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7088:860:65;;5650:1371;978:7807:91;8105:22:65;3051:52:55;;978:7807:91;551:66:53;3051:52:55;8105:22:65;:::i;7088:860::-;-1:-1:-1;;;;;7878:8:65;;;;978:7807:91;7878:59:65;;;;978:7807:91;;7878:59:65;978:7807:91;7878:59:65;;7894:10;978:7807:91;7878:59:65;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;978:7807:91;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;978:7807:91;;;;;;;;;:::i;:::-;7878:59:65;:8;;-1:-1:-1;;;;;7878:8:65;978:7807:91;7878:59:65;;;;;;;978:7807:91;7878:59:65;8105:22;7878:59;;;978:7807:91;7088:860:65;;;;;;;;7878:59;;;;:::i;:::-;;;;978:7807:91;;;;;;;-1:-1:-1;;;;;978:7807:91;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;978:7807:91;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;5694:3:65;978:7807:91;5738:19:65;;;;;:::i;978:7807:91:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8585:180:65;;;;978:7807:91;;8585:180:65;;;;;;978:7807:91;8585:180:65;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;978:7807:91;;5942:338:65;;;;978:7807:91;-1:-1:-1;;;;;978:7807:91;;;;;;;;;;;;5942:338:65;;;;;978:7807:91;5942:338:65;;978:7807:91;;5942:338:65;;978:7807:91;6055:4:65;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5942:338:65;;;;;;5694:3;-1:-1:-1;5922:1089:65;;6407:604;;:::i;:::-;978:7807:91;-1:-1:-1;;;;;978:7807:91;;;;;-1:-1:-1;;;;;978:7807:91;;;;;;;;6680:75:65;;;;978:7807:91;6680:75:65;;978:7807:91;6680:75:65;;978:7807:91;6055:4:65;978:7807:91;;;;6680:75:65;;;;;;;978:7807:91;6680:75:65;;;5922:1089;978:7807:91;;;;6680:100:65;6655:342;;5922:1089;978:7807:91;5922:1089:65;;978:7807:91;5655:13:65;;6655:342;6967:10;:::i;6680:75::-;;;;978:7807:91;6680:75:65;;978:7807:91;6680:75:65;;;;;;978:7807:91;6680:75:65;;;:::i;:::-;;;978:7807:91;;;;;;;6680:75:65;;;;;-1:-1:-1;6680:75:65;;5922:1089;;978:7807:91;5922:1089:65;;;5942:338;;;;:::i;:::-;;;;1496:65:43;1529:21;978:7807:91;1529:21:43;978:7807:91;;1529:21:43;978:7807:91;;;;;;;:::i;:::-;3599:19:66;;;;;;;;:::i;:::-;978:7807:91;-1:-1:-1;;;;;978:7807:91;;;;;;;;;:::i;:::-;38758:10:64;978:7807:91;;38694:545:64;;;;;;38804:18;1820:17:66;;978:7807:91;;38694:545:64;;978:7807:91;;38694:545:64;;;978:7807:91;;38694:545:64;;;978:7807:91;38694:545:64;;;978:7807:91;38694:545:64;;;978:7807:91;;;;38694:545:64;;39101:17;978:7807:91;;38694:545:64;;;978:7807:91;;;38694:545:64;;;978:7807:91;;;38608:653:64;;;;;;;;;;;;;;;:::i;978:7807:91:-;;;;;-1:-1:-1;;978:7807:91;;;;;;;;-1:-1:-1;;;;;4129:5:65;978:7807:91;;;;;;;;3599:19:66;978:7807:91;;;:::i;3599:19:66:-;978:7807:91;-1:-1:-1;;;;;30112:6:64;;;978:7807:91;;;;30112:26:64;978:7807:91;30112:26:64;;978:7807:91;30112:26:64;;978:7807:91;30112:26:64;;978:7807:91;;30112:26:64;978:7807:91;30112:26:64;;;;;;;;;30229:676;978:7807:91;30112:26:64;;978:7807:91;30112:26:64;30098:48;30112:26;;30229:676;30112:26;;;;;978:7807:91;;30098:48:64;:::i;:::-;978:7807:91;;;;;;;:::i;:::-;30561:4:64;978:7807:91;;;30318:569:64;;;;978:7807:91;;30318:569:64;;978:7807:91;;30318:569:64;;978:7807:91;30318:569:64;;;;978:7807:91;30318:569:64;;;;978:7807:91;30318:569:64;;;978:7807:91;;;30229:676:64;;;;;;;;978:7807:91;30229:676:64;;;:::i;978:7807:91:-;30199:720:64;;;;;;;;30175:795;30199:720;978:7807:91;30199:720:64;;;978:7807:91;;;;;30175:795:64;;;;;;:::i;30112:26::-;;;;;;;;;;;;;:::i;:::-;;;;978:7807:91;;8795:524:64;978:7807:91;;8795:524:64;978:7807:91;;;:::i;:::-;8595:10:64;3599:19:66;8595:10:64;;;;;;;;3599:19:66;:::i;:::-;978:7807:91;-1:-1:-1;;;;;978:7807:91;;;;;;;;:::i;:::-;8595:10:64;978:7807:91;;;8884:413:64;;;978:7807:91;;8884:413:64;;978:7807:91;;8884:413:64;;978:7807:91;;8884:413:64;;;978:7807:91;;;8884:413:64;;;978:7807:91;8884:413:64;;;978:7807:91;;;8795:524:64;;;;8884:413;8795:524;;;;;;;:::i;978:7807:91:-;;;;;-1:-1:-1;;978:7807:91;;;;;1083:103:53;;:::i;:::-;1558:46:91;978:7807;;;:::i;:::-;;;1558:46;;;;978:7807;1558:46;;978:7807;1558:46;;;:::i;:::-;;1573:4;;;1558:46;;;;;;;;978:7807;551:66:53;3051:52:55;978:7807:91;1558:46;;;;;978:7807;1558:46;;;;;;:::i;978:7807::-;;-1:-1:-1;;978:7807:91;;;;;;;:::i;:::-;;;;;;;;;16348:103:64;;978:7807:91;;;;;;;;:::i;:::-;;;;;;;16348:103:64;;;;;;978:7807:91;;16406:10:64;;16348:103;978:7807:91;16348:103:64;;;:::i;:::-;978:7807:91;;16317:148:64;;;;978:7807:91;16317:148:64;;;978:7807:91;16317:148:64;;978:7807:91;;;;;;:::i;:::-;16317:148:64;:6;;-1:-1:-1;;;;;16317:6:64;978:7807:91;16317:148:64;;;;;;16293:207;16317:148;978:7807:91;16317:148:64;;;978:7807:91;;;;;;16293:207:64;;;;;;:::i;16317:148::-;;;;;;978:7807:91;16317:148:64;;;;;;:::i;:::-;;;;978:7807:91;;;;;;;:::i;:::-;1083:103:53;;:::i;:::-;436:67:72;;:::i;:::-;3202:6:64;978:7807:91;-1:-1:-1;;;;;3233:11:64;;;;;;:::i;:::-;3258:13;;;;:::i;:::-;3285;978:7807:91;3285:13:64;;;;;;;:::i;:::-;3312:21;;;;;;;;:::i;:::-;3383:15;;;;;;;;;;:::i;:::-;978:7807:91;;;;;3202:206:64;;;978:7807:91;3202:206:64;;978:7807:91;;;;;;;3202:206:64;;978:7807:91;;;;;;3383:15:64;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;3233:11:64;978:7807:91;;;;-1:-1:-1;;978:7807:91;;;;;;;;;;;:::i;:::-;3347:22:64;;;;978:7807:91;;;;;;;;;;;;;;:::i;:::-;3202:206:64;978:7807:91;;;;;3202:206:64;;;;;;;978:7807:91;3202:206:64;;;978:7807:91;-1:-1:-1;3424:13:64;;978:7807:91;3726:16:64;;;;978:7807:91;3465:3:64;3443:13;;;;:::i;:::-;3439:24;;;;;;;3499:16;;:13;;;;;:::i;:::-;:16;;:::i;:::-;;:::i;:::-;3548:24;3312:21;3548;3312;;;3548;;:::i;:24::-;978:7807:91;3591:13:64;;;3587:60;;3726:16;;;:::i;:::-;:52;;;3465:3;3722:551;;;3798:5;;3829:8;978:7807:91;3798:5:64;;;3829:8;:::i;:::-;978:7807:91;3424:13:64;;3722:551;4119:8;;978:7807:91;4141:13:64;;;;:::i;:::-;4173:20;;;:::i;:::-;4119:91;;;;;978:7807:91;;;4119:91:64;;-1:-1:-1;;;;;978:7807:91;;;;4119:91:64;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;978:7807:91;;;;;;-1:-1:-1;;4119:91:64;;;;;;;4228:30;4119:91;3233:11;4119:91;;;978:7807:91;;;4228:30:64;;;;;978:7807:91;4228:30:64;;978:7807:91;4228:30:64;;978:7807:91;;;;;;-1:-1:-1;;;;;978:7807:91;;;;;;;;;;4228:30:64;;978:7807:91;;;;;4228:30:64;;;;;;;;3722:551;;978:7807:91;3722:551:64;;;4228:30;3233:11;4228:30;;;;;;;;;;;;:::i;:::-;;;978:7807:91;;;;4228:30:64;;;;;;;;4119:91;;;;:::i;:::-;;;;3726:52;3772:5;;;978:7807:91;;;;3746:32:64;3726:52;;3587:60;3624:8;;978:7807:91;3624:8:64;;;3439:24;3233:11;3439:24;4332:13;;3439:24;4332:13;:::i;:::-;978:7807:91;551:66:53;3051:52:55;978:7807:91;;;;;;3202:206:64;;;;3233:11;3202:206;;3233:11;3202:206;;;;;;3233:11;3202:206;;;:::i;:::-;;;978:7807:91;;;;;3202:206:64;;;;;;;-1:-1:-1;3202:206:64;;978:7807:91;;;;;;;;3233:11:64;978:7807:91;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;978:7807:91;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;2194:509:64;;978:7807:91;;;;;;;;;;;;:::i;:::-;2059:10:64;3599:19:66;2059:10:64;3599:19:66;:::i;:::-;978:7807:91;-1:-1:-1;;;;;978:7807:91;;;;;;;;:::i;:::-;2059:10:64;978:7807:91;;;2281:400:64;;;978:7807:91;;2281:400:64;;978:7807:91;;2281:400:64;;978:7807:91;;;;2281:400:64;;978:7807:91;;;;2281:400:64;;978:7807:91;;2281:400:64;;978:7807:91;;;2194:509:64;;;;;;;;978:7807:91;2194:509:64;;;:::i;978:7807:91:-;2159:562:64;:6;;978:7807:91;2159:562:64;;;;;;;978:7807:91;2159:562:64;;;978:7807:91;;;;;2131:631:64;;978:7807:91;;;;2131:631:64;;978:7807:91;4282:82:66;;;978:7807:91;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;978:7807:91;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;978:7807:91;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;978:7807:91;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;978:7807:91;;;;;;:::o;:::-;;;-1:-1:-1;;;;;978:7807:91;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;1820:17:66;978:7807:91;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;7075:13;978:7807;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;978:7807:91;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;978:7807:91;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;978:7807:91;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;978:7807:91;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;978:7807:91;;;;;;;-1:-1:-1;;;;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;978:7807:91;;;;;;;;;;;;;;;;;-1:-1:-1;978:7807:91;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;978:7807:91;;;;;-1:-1:-1;;;;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;978:7807:91;;;;;-1:-1:-1;;;;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;978:7807:91;;;;;-1:-1:-1;;;;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;978:7807:91;;;;;;;-1:-1:-1;;;;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;;978:7807:91;;;;;-1:-1:-1;;;;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;-1:-1:-1;;978:7807:91;;;;;-1:-1:-1;;;;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;978:7807:91;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;978:7807:91;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;978:7807:91;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;978:7807:91;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;-1:-1:-1;;978:7807:91;;;;;;;;-1:-1:-1;978:7807:91;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;;;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;978:7807:91;;-1:-1:-1;978:7807:91;;;;;;;;;-1:-1:-1;978:7807:91;;;;-1:-1:-1;978:7807:91;;;;-1:-1:-1;978:7807:91;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;-1:-1:-1;978:7807:91;;;;;-1:-1:-1;978:7807:91;;;;;;;;-1:-1:-1;;;;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;978:7807:91;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;978:7807:91;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;978:7807:91;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;1820:17:66:-;;;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;1820:17:66;;;978:7807:91;1820:17:66;;;978:7807:91;1820:17:66;;;;;;;;;;:::i;:::-;;;;;;978:7807:91;1820:17:66;;;978:7807:91;1820:17:66;;;;;978:7807:91;1820:17:66;;;978:7807:91;1820:17:66;;;;978:7807:91;1820:17:66;;;978:7807:91;1820:17:66;;;;;;;978:7807:91;1820:17:66;;;;;;;978:7807:91;1820:17:66;;;;;;;;;978:7807:91;1820:17:66;;;;;978:7807:91;;;1820:17:66;;;978:7807:91;1820:17:66;;;;;;;;;;;:::i;978:7807:91:-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;978:7807:91;;;;:::o;:::-;;;:::o;4648:340::-;978:7807;;4763:41;4740:65;;;;;;;4718:6;-1:-1:-1;;;;;978:7807:91;4740:65;978:7807;4740:65;:::i;:::-;4718:88;;;;;978:7807;4740:65;978:7807;;;;;;4718:88;;;;;;978:7807;4718:88;;4740:65;;4718:88;;978:7807;4740:65;978:7807;;;;:::i;:::-;4718:88;;;;;;;;4648:340;-1:-1:-1;4714:268:91;;4921:38;4861:121;;:::i;:::-;4921:38;:::i;:::-;4740:65;978:7807;;;4910:61;;978:7807;;;;4740:65;4910:61;978:7807;4903:68;:::o;4714:268::-;978:7807;;4821:28;;;978:7807;4740:65;4821:28;;978:7807;;;;;;;;;;;;;4143:45;4718:88;;;;:::i;:::-;4740:65;4718:88;;978:7807;;;;;;;-1:-1:-1;;;;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;978:7807:91;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;978:7807:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;3754:326::-;978:7807;;3862:34;3839:58;;;;;;;3817:6;-1:-1:-1;;;;;978:7807:91;3839:58;978:7807;3839:58;:::i;978:7807::-;;;;;;;:::i;:::-;;;;-1:-1:-1;978:7807:91;;-1:-1:-1;978:7807:91;;;;-1:-1:-1;978:7807:91;;;;-1:-1:-1;978:7807:91;;;;-1:-1:-1;978:7807:91;;;;-1:-1:-1;978:7807:91;;;;-1:-1:-1;978:7807:91;;;;-1:-1:-1;978:7807:91;;;;-1:-1:-1;978:7807:91;;;;;;:::o;4201:346::-;978:7807;;4319:44;4296:68;;;;;;;4274:6;-1:-1:-1;;;;;978:7807:91;4296:68;978:7807;4296:68;:::i;5584:344::-;978:7807;;5701:43;5678:67;;;;;;;5656:6;-1:-1:-1;;;;;978:7807:91;5678:67;978:7807;5678:67;:::i;5094:338::-;978:7807;;5208:40;5185:64;;;;;;;5163:6;-1:-1:-1;;;;;978:7807:91;5185:64;978:7807;5185:64;:::i;3191:591:65:-;;;3259:23;3271:10;3259:23;:::i;:::-;12307:26;;2806:53:55;;;3385:100:65;;3578:4;3051:52:55;3578:4:65;3051:52:55;;978:7807:91;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;;978:7807:91;;;:::i;:::-;;-1:-1:-1;978:7807:91;;;;;;8188:13:65;;-1:-1:-1;8203:15:65;;;;;;3593:1;;;;;-1:-1:-1;3768:6:65;3593:1;3051:52:55;;4704:12:66;2295:53:55;;4282:82:66;;;8183:132:65;3768:6;;:::i;:::-;3191:591::o;4282:82:66:-;-1:-1:-1;3051:52:55;;4282:82:66;;;8220:3:65;8296:7;4297:55:106;-1:-1:-1;8296:7:65;978:7807:91;8296:7:65;;;;;;:::i;978:7807:91:-;;4255:25:106;;;;8289:4:65;4255:25:106;;;;:::i;:::-;8289:4:65;;4297:55:106;:::i;:::-;8239:65:65;;;;:::i;:::-;;;;;;:::i;:::-;;978:7807:91;8188:13:65;;978:7807:91;;;;;;;;;;;;;3385:100:65;3444:30;-1:-1:-1;3444:30:65;;-1:-1:-1;3444:30:65;978:7807:91;;;;;;;;;;;;;;;:::i;2669:1079::-;;;2965:579;2669:1079;2965:579;2669:1079;978:7807;2669:1079;;-1:-1:-1;;;;;2926:6:91;;;;978:7807;1820:17:66;978:7807:91;;;;;;;:::i;:::-;3103:10;978:7807;;-1:-1:-1;3043:483:91;;;1820:17:66;978:7807:91;;3043:483;;978:7807;;3043:483;;;978:7807;;3043:483;;;978:7807;3043:483;;;978:7807;-1:-1:-1;3043:483:91;;;978:7807;;3043:483;;;978:7807;-1:-1:-1;3043:483:91;;;978:7807;;;;:::i;:::-;3043:483;;;978:7807;;;2965:579;;;;3043:483;2965:579;;;;;;;:::i;:::-;;-1:-1:-1;;2965:579:91;;;;;;:::i;3694:351:66:-;;978:7807:91;4704:12:66;;-1:-1:-1;;;;;2295:53:55;;978:7807:91;3919:25:66;3915:124;;3694:351;;:::o;3915:124::-;3051:52:55;;;;;4024:4:66;3915:124;3694:351::o;1192:349:53:-;551:66;2295:53:55;;1316:93:53;;1529:4;3051:52:55;;1192:349:53:o;509:165:72:-;-1:-1:-1;;;;;586:6:72;978:7807:91;564:10:72;:29;560:108;;509:165::o;560:108::-;616:41;;;564:10;616:41;978:7807:91;;616:41:72;;7223:218:119;-1:-1:-1;;;;;7303:25:119;;;;7299:105;;978:7807:91;7223:218:119;:::o;7299:105::-;7351:42;;;7382:3;7351:42;978:7807:91;;;;7351:42:119;;975:448:78;;;;1074:21;;:38;1070:93;;-1:-1:-1;;;;;978:7807:91;;;1207:39:78;;;;;;978:7807:91;;;;1207:39:78;978:7807:91;1207:39:78;;;;;;;;;;;;;;;;;;975:448;978:7807:91;;;;;1412:43:105;;;;;;;978:7807:91;1412:43:105;;;;;;978:7807:91;;;;;;;1412:43:105;;978:7807:91;;;;;;;;;;;;;;3462:31:106;3510:55;;978:7807:91;;;;;3462:31:106;;;;;:::i;:::-;3510:55;;;:::i;:::-;978:7807:91;;4551:22:105;;;;:57;;;;975:448:78;4547:135:105;;;;;;978:7807:91;;;;;;;1382:34:78;;;;;978:7807:91;1382:34:78;;1207:39;1382:34;;978:7807:91;1412:43:105;978:7807:91;;;1382:34:78;;;;;;;;;;;975:448;;:::o;1382:34::-;;;;;;;;;;;;:::i;:::-;;;978:7807:91;;;;975:448:78:o;1382:34::-;;;;;;978:7807:91;;;;;;;;;4547:135:105;4631:40;;;1207:39:78;978:7807:91;1412:43:105;4631:40;;4551:57;4578:30;;;;;;978:7807:91;;;;4578:30:105;;978:7807:91;;;;;;;;;4551:57:105;;;;;978:7807:91;;;;1207:39:78;;;;;;:::i;:::-;;;;;;;978:7807:91;;;1207:39:78;978:7807:91;;;;;1070:93:78;1135:17;;;;;;9544:584:65;9780:21;9815:11;;9811:48;;12307:26;2295:53:55;10009:69:65;;-1:-1:-1;;;;;10114:6:65;978:7807:91;;10114:6:65;:::i;10009:69::-;10061:7;;:::o;978:7807:91:-;;;;;;;;;;:::o;10408:415:65:-;;978:7807:91;10408:415:65;;;;-1:-1:-1;;;;;978:7807:91;;;;;;;;10667:52:65;;;;;978:7807:91;10667:52:65;;978:7807:91;10667:52:65;;;978:7807:91;;;;;;10667:6:65;978:7807:91;10667:52:65;;;;;;;-1:-1:-1;;;10667:52:65;;;10408:415;10641:78;;10778:38;10744:24;10641:78;10744:24;;:::i;:::-;10778:38;;;:::i;:::-;978:7807:91;10408:415:65:o;10667:52::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;978:7807:91;;;;;;;;;;10667:52:65;;;;;;;;;;;978:7807:91;;;-1:-1:-1;978:7807:91;;;;;598:648:45;1463:1;978:7807:91;;1443:21:45;1439:82;;787:15;978:7807:91;1530:151:45;;;;978:7807:91;770:32:45;766:185;;978:7807:91;1209:30:45;1530:151;1209:30;978:7807:91;;-1:-1:-1;;1013:179:45;;1463:1;1013:179;;;1209:30;;;;;;:::i;1439:82::-;1487:23;-1:-1:-1;1487:23:45;1463:1;-1:-1:-1;1487:23:45;23070:818:64;23411:15;;;978:7807:91;23393:15:64;:33;23389:85;;-1:-1:-1;;;;;23591:11:64;;;978:7807:91;;;;;;;;23626:11:64;;;;;;;:::i;:::-;23664:14;;;;;;;;;;;;:::i;:::-;23706:15;;;;;;:::i;:::-;23841;;;;;;;;:::i;:::-;978:7807:91;;;;;;;;:::i;:::-;1820:17:66;;23551:320:64;23591:11;23551:320;;978:7807:91;;;;23551:320:64;;;;978:7807:91;;;;23551:320:64;;;;978:7807:91;;;;23706:15:64;23551:320;;23755:18;;;;978:7807:91;;;23755:18:64;23551:320;;23801:12;;;978:7807:91;;;;;;;;:::i;:::-;23551:320:64;23801:12;23551:320;;978:7807:91;;;;;;23526:355:64;;;;;;;978:7807:91;23526:355:64;;;;;23591:11;978:7807:91;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23411:15:64;978:7807:91;;;;;;;;:::i;:::-;23526:355:64;:6;;978:7807:91;23526:355:64;;-1:-1:-1;23526:355:64;;;;;;;-1:-1:-1;;;;;23526:355:64;;;23070:818;23484:397;;;;;23070:818;:::o;23526:355::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;978:7807:91;;;;;;23591:11:64;978:7807:91;;;;;;;;23526:355:64;;;;;;;;;;23389:85;23449:14;-1:-1:-1;23449:14:64;;-1:-1:-1;23449:14:64;11388:489:65;;11502:14;;11498:51;;11632:30;;;11388:489;11628:243;;;11714:6;11730:9;11714:6;;11678:5;11730:9;:::i;11628:243::-;11818:6;-1:-1:-1;;;;;11818:6:65;978:7807:91;11818:42:65;;;;;978:7807:91;;;11818:42:65;;-1:-1:-1;;;;;978:7807:91;;;11818:42:65;;;978:7807:91;;;;;;;;;;;;;-1:-1:-1;;978:7807:91;;;;;;-1:-1:-1;;11818:42:65;;;;;;;;11628:243;11388:489::o;11818:42::-;;;;:::i;11632:30::-;978:7807:91;-1:-1:-1;;;;;11657:5:65;;978:7807:91;;;;11645:17:65;11632:30;;11498:51;11532:7;;;;:::o;1429:365:78:-;;;;-1:-1:-1;;;;;978:7807:91;;;1590:47:78;;;;;978:7807:91;;;1590:47:78;;;;978:7807:91;1590:47:78;;;;978:7807:91;;1590:47:78;;;;;978:7807:91;1617:4:78;978:7807:91;;;;;;;;;1590:47:78;;;;;;;;1429:365;1680:27;;;;;;;;978:7807:91;;;;;1680:27:78;;;;978:7807:91;1680:27:78;;;1590:47;1680:27;;978:7807:91;1680:27:78;;;;;;;;1429:365;978:7807:91;1774:12:78;978:7807:91;;;;1774:12:78;:::i;1680:27::-;;;;;:::i;:::-;978:7807:91;;1680:27:78;;;978:7807:91;;;;1680:27:78;978:7807:91;;;;;;;;;1680:27:78;978:7807:91;;;1590:47:78;;;;;;:::i;:::-;;;;;;1531:331:106;1616:21;;:30;1612:109;;1750:33;978:7807:91;;;-1:-1:-1;;;;;978:7807:91;;;1750:33:106;;;;:::i;:::-;;1797:8;1793:63;;1531:331::o;1793:63::-;1828:17;1750:33;1828:17;;1750:33;1828:17;1612:109;1669:41;;;1624:4;1669:41;978:7807:91;;1669:41:106;;1741:504:45;978:7807:91;;1881:21:45;:17;;2008:160;;;;;;4625:582:106;;4797:8;;-1:-1:-1;978:7807:91;;5874:21:106;:17;;6046:142;;;;;;4793:408;978:7807:91;;5045:22:106;:49;;;4793:408;5041:119;;5173:17;;:::o;5041:119::-;-1:-1:-1;;;;;5121:24:106;;5066:1;5121:24;978:7807:91;5121:24:106;978:7807:91;;5066:1:106;5121:24;5045:49;5071:18;;;:23;5045:49;"},"methodIdentifiers":{"addLiquidityCustom(address,uint256[],uint256,bool,bytes)":"0ca078ec","addLiquidityHook((address,address,uint256[],uint256,uint8,bool,bytes))":"5b343791","addLiquidityProportional(address,uint256[],uint256,bool,bytes)":"724dba33","addLiquiditySingleTokenExactOut(address,address,uint256,uint256,bool,bytes)":"72657d17","addLiquidityUnbalanced(address,uint256[],uint256,bool,bytes)":"c08bc851","donate(address,uint256[],bool,bytes)":"bf6ee3fd","getPermit2()":"1bbf2e23","getSender()":"5e01eb5a","getSingleInputArrayAndTokenIndex(address,address,uint256)":"e178073e","getWeth()":"107c279f","initialize(address,address[],uint256[],uint256,bool,bytes)":"026b3d95","initializeHook((address,address,address[],uint256[],uint256,bool,bytes))":"086fad66","manualAddAndRemoveLiquidity((address,address,uint256[],uint256))":"68d5e16a","manualAddAndRemoveLiquidityHook((address,address,uint256[],uint256))":"3a1b05de","manualReentrancyAddLiquidityHook()":"0c3b846f","manualReentrancyInitializeHook()":"4b59d17c","manualReentrancyQuerySwapHook()":"64c90707","manualReentrancyRemoveLiquidityHook()":"ad6d59f3","manualReentrancyRemoveLiquidityRecoveryHook()":"beb91feb","manualReentrancySwapSingleTokenHook()":"c3ec0efc","multicall(bytes[])":"ac9650d8","permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])":"19c6989f","queryAddLiquidityCustom(address,uint256[],uint256,address,bytes)":"452db952","queryAddLiquidityHook((address,address,uint256[],uint256,uint8,bool,bytes))":"efd85f14","queryAddLiquidityProportional(address,uint256,address,bytes)":"9de90518","queryAddLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)":"1d56798d","queryAddLiquidityUnbalanced(address,uint256[],address,bytes)":"da001f7d","queryRemoveLiquidityCustom(address,uint256,uint256[],address,bytes)":"c330c7be","queryRemoveLiquidityHook((address,address,uint256[],uint256,uint8,bool,bytes))":"b24bd571","queryRemoveLiquidityProportional(address,uint256,address,bytes)":"0f710888","queryRemoveLiquidityRecovery(address,uint256)":"b037ed36","queryRemoveLiquidityRecoveryHook(address,address,uint256)":"5f9815ff","queryRemoveLiquiditySingleTokenExactIn(address,uint256,address,address,bytes)":"23b39241","queryRemoveLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)":"53d0bb98","queryRevertErrorCode()":"7ae30960","queryRevertErrorCodeHook()":"45d132fe","queryRevertLegacy()":"339f3838","queryRevertLegacyHook()":"22717db2","queryRevertNoReason()":"90aa9f76","queryRevertNoReasonHook()":"b3b0a7a7","queryRevertPanic()":"aaf51ea3","queryRevertPanicHook()":"d3a5152a","querySpoof()":"4aeecca9","querySpoofHook()":"58307e44","querySwapHook((address,uint8,address,address,address,uint256,uint256,uint256,bool,bytes))":"be5ae841","querySwapSingleTokenExactIn(address,address,address,uint256,address,bytes)":"3ebc54e5","querySwapSingleTokenExactInAndRevert(address,address,address,uint256,bytes)":"b29a62a7","querySwapSingleTokenExactOut(address,address,address,uint256,address,bytes)":"175d4408","removeLiquidityCustom(address,uint256,uint256[],bool,bytes)":"82bf2b24","removeLiquidityHook((address,address,uint256[],uint256,uint8,bool,bytes))":"7b03c7ba","removeLiquidityProportional(address,uint256,uint256[],bool,bytes)":"51682750","removeLiquidityRecovery(address,uint256,uint256[])":"08c04793","removeLiquidityRecoveryHook(address,address,uint256,uint256[])":"82cd54fb","removeLiquiditySingleTokenExactIn(address,uint256,address,uint256,bool,bytes)":"ecb2182c","removeLiquiditySingleTokenExactOut(address,uint256,address,uint256,bool,bytes)":"e7326def","swapSingleTokenExactIn(address,address,address,uint256,uint256,uint256,bool,bytes)":"750283bc","swapSingleTokenExactOut(address,address,address,uint256,uint256,uint256,bool,bytes)":"94e86ef8","swapSingleTokenHook((address,uint8,address,address,address,uint256,uint256,uint256,bool,bytes))":"68a24fe0","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IWETH\",\"name\":\"weth\",\"type\":\"address\"},{\"internalType\":\"contract IPermit2\",\"name\":\"permit2\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EthTransfer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MockErrorCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"Result\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapDeadline\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"addLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IRouterCommon.AddLiquidityHookParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidityHook\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"addLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"addLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"addLiquidityUnbalanced\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"donate\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPermit2\",\"outputs\":[{\"internalType\":\"contract IPermit2\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGiven\",\"type\":\"uint256\"}],\"name\":\"getSingleInputArrayAndTokenIndex\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsGiven\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWeth\",\"outputs\":[{\"internalType\":\"contract IWETH\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IRouter.InitializeHookParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"initializeHook\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"}],\"internalType\":\"struct RouterMock.ManualAddRemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"manualAddAndRemoveLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"}],\"internalType\":\"struct RouterMock.ManualAddRemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"manualAddAndRemoveLiquidityHook\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualReentrancyAddLiquidityHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualReentrancyInitializeHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualReentrancyQuerySwapHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualReentrancyRemoveLiquidityHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualReentrancyRemoveLiquidityRecoveryHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualReentrancySwapSingleTokenHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"internalType\":\"struct IRouterCommon.PermitApproval[]\",\"name\":\"permitBatch\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[]\",\"name\":\"permitSignatures\",\"type\":\"bytes[]\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"internalType\":\"uint48\",\"name\":\"expiration\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"nonce\",\"type\":\"uint48\"}],\"internalType\":\"struct IAllowanceTransfer.PermitDetails[]\",\"name\":\"details\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sigDeadline\",\"type\":\"uint256\"}],\"internalType\":\"struct IAllowanceTransfer.PermitBatch\",\"name\":\"permit2Batch\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"permit2Signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes[]\",\"name\":\"multicallData\",\"type\":\"bytes[]\"}],\"name\":\"permitBatchAndCall\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"results\",\"type\":\"bytes[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IRouterCommon.AddLiquidityHookParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"queryAddLiquidityHook\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryAddLiquidityUnbalanced\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IRouterCommon.RemoveLiquidityHookParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"queryRemoveLiquidityHook\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"}],\"name\":\"queryRemoveLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"}],\"name\":\"queryRemoveLiquidityRecoveryHook\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquiditySingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"queryRemoveLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"queryRevertErrorCode\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"queryRevertErrorCodeHook\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"queryRevertLegacy\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"queryRevertLegacyHook\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"queryRevertNoReason\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"queryRevertNoReasonHook\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"queryRevertPanic\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"queryRevertPanicHook\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"querySpoof\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"querySpoofHook\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGiven\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IRouter.SwapSingleTokenHookParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"querySwapHook\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"querySwapSingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculated\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"querySwapSingleTokenExactInAndRevert\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculated\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"querySwapSingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculated\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"removeLiquidityCustom\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IRouterCommon.RemoveLiquidityHookParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidityHook\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"removeLiquidityProportional\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecoveryHook\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"removeLiquiditySingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"removeLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"swapSingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"swapSingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGiven\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"wethIsEth\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct IRouter.SwapSingleTokenHookParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"swapSingleTokenHook\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"Result(bytes)\":[{\"params\":{\"result\":\"The result of the query operation\"}}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}]},\"kind\":\"dev\",\"methods\":{\"addLiquidityCustom(address,uint256[],uint256,bool,bytes)\":{\"details\":\"The given maximum and minimum amounts given may be interpreted as exact depending on the pool type. In any case the caller can expect them to be hard boundaries for the request.\",\"params\":{\"maxAmountsIn\":\"Maximum amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Minimum amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to add liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsIn\":\"Actual amounts of tokens added, sorted in token registration order\",\"bptAmountOut\":\"Actual amount of pool tokens received\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"addLiquidityHook((address,address,uint256[],uint256,uint8,bool,bytes))\":{\"details\":\"Can only be called by the Vault.\",\"params\":{\"params\":\"Add liquidity parameters (see IRouter for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts in required for the join\",\"bptAmountOut\":\"BPT amount minted in exchange for the input tokens\",\"returnData\":\"Arbitrary data with encoded response from the pool\"}},\"addLiquidityProportional(address,uint256[],uint256,bool,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Exact amount of pool tokens to be received\",\"maxAmountsIn\":\"Maximum amounts of tokens to be added, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to add liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsIn\":\"Actual amounts of tokens added, sorted in token registration order\"}},\"addLiquiditySingleTokenExactOut(address,address,uint256,uint256,bool,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Exact amount of pool tokens to be received\",\"maxAmountIn\":\"Maximum amount of tokens to be added\",\"pool\":\"Address of the liquidity pool\",\"tokenIn\":\"Token used to add liquidity\",\"userData\":\"Additional (optional) data sent with the request to add liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountIn\":\"Actual amount of tokens added\"}},\"addLiquidityUnbalanced(address,uint256[],uint256,bool,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Minimum amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to add liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"bptAmountOut\":\"Actual amount of pool tokens received\"}},\"donate(address,uint256[],bool,bytes)\":{\"details\":\"To support donation, the pool config `enableDonation` flag must be set to true.\",\"params\":{\"amountsIn\":\"Amounts of tokens to be donated, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to donate liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"}},\"getSender()\":{\"returns\":{\"_0\":\"The address of the sender\"}},\"initialize(address,address[],uint256[],uint256,bool,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Minimum amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"tokens\":\"Pool tokens, in token registration order\",\"userData\":\"Additional (optional) data sent with the request to add initial liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"bptAmountOut\":\"Actual amount of pool tokens minted in exchange for initial liquidity\"}},\"initializeHook((address,address,address[],uint256[],uint256,bool,bytes))\":{\"details\":\"Can only be called by the Vault.\",\"params\":{\"params\":\"Initialization parameters (see IRouter for struct definition)\"},\"returns\":{\"bptAmountOut\":\"BPT amount minted in exchange for the input tokens\"}},\"multicall(bytes[])\":{\"params\":{\"data\":\"Encoded function calls to be executed in the batch.\"},\"returns\":{\"results\":\"Array of bytes arrays, each representing the return data from each function call executed.\"}},\"permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])\":{\"params\":{\"multicallData\":\"An array of bytes arrays, each representing an encoded function call on this contract\",\"permit2Batch\":\"A batch of permit2 approvals\",\"permit2Signature\":\"A permit2 signature for the batch approval\",\"permitBatch\":\"An array of `PermitApproval` structs, each representing an ERC20 permit request\",\"permitSignatures\":\"An array of bytes, corresponding to the permit request signature in `permitBatch`\"},\"returns\":{\"results\":\"Array of bytes arrays, each representing the return data from each function call executed\"}},\"queryAddLiquidityCustom(address,uint256[],uint256,address,bytes)\":{\"params\":{\"maxAmountsIn\":\"Maximum amounts of tokens to be added, sorted in token registration order\",\"minBptAmountOut\":\"Expected minimum amount of pool tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsIn\":\"Expected amounts of tokens to add, sorted in token registration order\",\"bptAmountOut\":\"Expected amount of pool tokens to receive\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"queryAddLiquidityHook((address,address,uint256[],uint256,uint8,bool,bytes))\":{\"details\":\"Can only be called by the Vault.\",\"params\":{\"params\":\"Add liquidity parameters (see IRouter for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual token amounts in required as inputs\",\"bptAmountOut\":\"Expected pool tokens to be minted\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"queryAddLiquidityProportional(address,uint256,address,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Exact amount of pool tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsIn\":\"Expected amounts of tokens to add, sorted in token registration order\"}},\"queryAddLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"params\":{\"exactBptAmountOut\":\"Expected exact amount of pool tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenIn\":\"Token used to add liquidity\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountIn\":\"Expected amount of tokens to add\"}},\"queryAddLiquidityUnbalanced(address,uint256[],address,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of tokens to be added, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"bptAmountOut\":\"Expected amount of pool tokens to receive\"}},\"queryRemoveLiquidityCustom(address,uint256,uint256[],address,bytes)\":{\"params\":{\"maxBptAmountIn\":\"Maximum amount of pool tokens provided\",\"minAmountsOut\":\"Expected minimum amounts of tokens to receive, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsOut\":\"Expected amounts of tokens to receive, sorted in token registration order\",\"bptAmountIn\":\"Expected amount of pool tokens to burn\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"queryRemoveLiquidityHook((address,address,uint256[],uint256,uint8,bool,bytes))\":{\"details\":\"Can only be called by the Vault.\",\"params\":{\"params\":\"Remove liquidity parameters (see IRouter for struct definition)\"},\"returns\":{\"amountsOut\":\"Expected token amounts to be transferred to the sender\",\"bptAmountIn\":\"Pool token amount to be burned for the output tokens\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"queryRemoveLiquidityProportional(address,uint256,address,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided for the query\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountsOut\":\"Expected amounts of tokens to receive, sorted in token registration order\"}},\"queryRemoveLiquidityRecovery(address,uint256)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided for the query\",\"pool\":\"Address of the liquidity pool\"},\"returns\":{\"amountsOut\":\"Expected amounts of tokens to receive, sorted in token registration order\"}},\"queryRemoveLiquidityRecoveryHook(address,address,uint256)\":{\"details\":\"Can only be called by the Vault.\",\"params\":{\"exactBptAmountIn\":\"Pool token amount to be burned for the output tokens\",\"pool\":\"The liquidity pool\",\"sender\":\"Account originating the remove liquidity operation\"},\"returns\":{\"amountsOut\":\"Expected token amounts to be transferred to the sender\"}},\"queryRemoveLiquiditySingleTokenExactIn(address,uint256,address,address,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided for the query\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountOut\":\"Expected amount of tokens to receive\"}},\"queryRemoveLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"params\":{\"exactAmountOut\":\"Expected exact amount of tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"bptAmountIn\":\"Expected amount of pool tokens to burn\"}},\"querySwapHook((address,uint8,address,address,address,uint256,uint256,uint256,bool,bytes))\":{\"details\":\"Can only be called by the Vault. Also handles native ETH.\",\"params\":{\"params\":\"Swap parameters (see IRouter for struct definition)\"},\"returns\":{\"_0\":\"amountCalculated Token amount calculated by the pool math (e.g., amountOut for an exact in swap)\"}},\"querySwapSingleTokenExactIn(address,address,address,uint256,address,bytes)\":{\"params\":{\"exactAmountIn\":\"Exact amounts of input tokens to send\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountCalculated\":\"Calculated amount of output tokens to be received in exchange for the given input tokens\"}},\"querySwapSingleTokenExactOut(address,address,address,uint256,address,bytes)\":{\"params\":{\"exactAmountOut\":\"Exact amounts of input tokens to receive\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"The sender passed to the operation. It can influence results (e.g., with user-dependent hooks)\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the query request\"},\"returns\":{\"amountCalculated\":\"Calculated amount of input tokens to be sent in exchange for the requested output tokens\"}},\"removeLiquidityCustom(address,uint256,uint256[],bool,bytes)\":{\"details\":\"The given maximum and minimum amounts given may be interpreted as exact depending on the pool type. In any case the caller can expect them to be hard boundaries for the request.\",\"params\":{\"maxBptAmountIn\":\"Maximum amount of pool tokens provided\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to remove liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsOut\":\"Actual amounts of tokens received, sorted in token registration order\",\"bptAmountIn\":\"Actual amount of pool tokens burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"removeLiquidityHook((address,address,uint256[],uint256,uint8,bool,bytes))\":{\"details\":\"Can only be called by the Vault.\",\"params\":{\"params\":\"Remove liquidity parameters (see IRouter for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual token amounts transferred in exchange for the BPT\",\"bptAmountIn\":\"BPT amount burned for the output tokens\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"removeLiquidityProportional(address,uint256,uint256[],bool,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"userData\":\"Additional (optional) data sent with the request to remove liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountsOut\":\"Actual amounts of tokens received, sorted in token registration order\"}},\"removeLiquidityRecovery(address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\"},\"returns\":{\"amountsOut\":\"Actual amounts of tokens received, sorted in token registration order\"}},\"removeLiquidityRecoveryHook(address,address,uint256,uint256[])\":{\"details\":\"Can only be called by the Vault, when the pool is in Recovery Mode.\",\"params\":{\"exactBptAmountIn\":\"BPT amount burned for the output tokens\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the liquidity pool\",\"sender\":\"Account originating the remove liquidity operation\"},\"returns\":{\"amountsOut\":\"Actual token amounts transferred in exchange for the BPT\"}},\"removeLiquiditySingleTokenExactIn(address,uint256,address,uint256,bool,bytes)\":{\"params\":{\"exactBptAmountIn\":\"Exact amount of pool tokens provided\",\"minAmountOut\":\"Minimum amount of tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the request to remove liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"amountOut\":\"Actual amount of tokens received\"}},\"removeLiquiditySingleTokenExactOut(address,uint256,address,uint256,bool,bytes)\":{\"params\":{\"exactAmountOut\":\"Exact amount of tokens to be received\",\"maxBptAmountIn\":\"Maximum amount of pool tokens provided\",\"pool\":\"Address of the liquidity pool\",\"tokenOut\":\"Token used to remove liquidity\",\"userData\":\"Additional (optional) data sent with the request to remove liquidity\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"bptAmountIn\":\"Actual amount of pool tokens burned\"}},\"swapSingleTokenExactIn(address,address,address,uint256,uint256,uint256,bool,bytes)\":{\"params\":{\"deadline\":\"Deadline for the swap, after which it will revert\",\"exactAmountIn\":\"Exact amounts of input tokens to send\",\"minAmountOut\":\"Minimum amount of tokens to be received\",\"pool\":\"Address of the liquidity pool\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the swap request\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"_0\":\"Calculated amount of output tokens to be received in exchange for the given input tokens\"}},\"swapSingleTokenExactOut(address,address,address,uint256,uint256,uint256,bool,bytes)\":{\"params\":{\"deadline\":\"Deadline for the swap, after which it will revert\",\"exactAmountOut\":\"Exact amounts of input tokens to receive\",\"maxAmountIn\":\"Maximum amount of tokens to be sent\",\"pool\":\"Address of the liquidity pool\",\"tokenIn\":\"Token to be swapped from\",\"tokenOut\":\"Token to be swapped to\",\"userData\":\"Additional (optional) data sent with the swap request\",\"wethIsEth\":\"If true, incoming ETH will be wrapped to WETH and outgoing WETH will be unwrapped to ETH\"},\"returns\":{\"_0\":\"Calculated amount of input tokens to be sent in exchange for the requested output tokens\"}},\"swapSingleTokenHook((address,uint8,address,address,address,uint256,uint256,uint256,bool,bytes))\":{\"details\":\"Can only be called by the Vault. Also handles native ETH.\",\"params\":{\"params\":\"Swap parameters (see IRouter for struct definition)\"},\"returns\":{\"_0\":\"amountCalculated Token amount calculated by the pool math (e.g., amountOut for an exact in swap)\"}},\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"ErrorSelectorNotFound()\":[{\"notice\":\"Handle the \\\"reverted without a reason\\\" case (i.e., no return data).\"}],\"EthTransfer()\":[{\"notice\":\"Incoming ETH transfer from an address that is not WETH.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"InsufficientEth()\":[{\"notice\":\"The amount of ETH paid is insufficient to complete this operation.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"Result(bytes)\":[{\"notice\":\"On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SwapDeadline()\":[{\"notice\":\"The swap transaction was not validated before the specified deadline timestamp.\"}]},\"kind\":\"user\",\"methods\":{\"addLiquidityCustom(address,uint256[],uint256,bool,bytes)\":{\"notice\":\"Adds liquidity to a pool with a custom request.\"},\"addLiquidityHook((address,address,uint256[],uint256,uint8,bool,bytes))\":{\"notice\":\"Hook for adding liquidity.\"},\"addLiquidityProportional(address,uint256[],uint256,bool,bytes)\":{\"notice\":\"Adds liquidity to a pool with proportional token amounts, receiving an exact amount of pool tokens.\"},\"addLiquiditySingleTokenExactOut(address,address,uint256,uint256,bool,bytes)\":{\"notice\":\"Adds liquidity to a pool in a single token, receiving an exact amount of pool tokens.\"},\"addLiquidityUnbalanced(address,uint256[],uint256,bool,bytes)\":{\"notice\":\"Adds liquidity to a pool with arbitrary token amounts.\"},\"donate(address,uint256[],bool,bytes)\":{\"notice\":\"Adds liquidity to a pool by donating the amounts in (no BPT out).\"},\"getPermit2()\":{\"notice\":\"Returns Permit2 contract address.\"},\"getSender()\":{\"notice\":\"Get the first sender which initialized the call to Router.\"},\"getWeth()\":{\"notice\":\"Returns WETH contract address.\"},\"initialize(address,address[],uint256[],uint256,bool,bytes)\":{\"notice\":\"Initialize a liquidity pool.\"},\"initializeHook((address,address,address[],uint256[],uint256,bool,bytes))\":{\"notice\":\"Hook for initialization.\"},\"multicall(bytes[])\":{\"notice\":\"Executes a batch of function calls on this contract.\"},\"permitBatchAndCall((address,address,address,uint256,uint256,uint256)[],bytes[],((address,uint160,uint48,uint48)[],address,uint256),bytes,bytes[])\":{\"notice\":\"Permits multiple allowances and executes a batch of function calls on this contract.\"},\"queryAddLiquidityCustom(address,uint256[],uint256,address,bytes)\":{\"notice\":\"Queries an `addLiquidityCustom` operation without actually executing it.\"},\"queryAddLiquidityHook((address,address,uint256[],uint256,uint8,bool,bytes))\":{\"notice\":\"Hook for add liquidity queries.\"},\"queryAddLiquidityProportional(address,uint256,address,bytes)\":{\"notice\":\"Queries an `addLiquidityProportional` operation without actually executing it.\"},\"queryAddLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"notice\":\"Queries an `addLiquiditySingleTokenExactOut` operation without actually executing it.\"},\"queryAddLiquidityUnbalanced(address,uint256[],address,bytes)\":{\"notice\":\"Queries an `addLiquidityUnbalanced` operation without actually executing it.\"},\"queryRemoveLiquidityCustom(address,uint256,uint256[],address,bytes)\":{\"notice\":\"Queries a `removeLiquidityCustom` operation without actually executing it.\"},\"queryRemoveLiquidityHook((address,address,uint256[],uint256,uint8,bool,bytes))\":{\"notice\":\"Hook for remove liquidity queries.\"},\"queryRemoveLiquidityProportional(address,uint256,address,bytes)\":{\"notice\":\"Queries a `removeLiquidityProportional` operation without actually executing it.\"},\"queryRemoveLiquidityRecovery(address,uint256)\":{\"notice\":\"Queries a `removeLiquidityRecovery` operation without actually executing it.\"},\"queryRemoveLiquidityRecoveryHook(address,address,uint256)\":{\"notice\":\"Hook for remove liquidity queries.\"},\"queryRemoveLiquiditySingleTokenExactIn(address,uint256,address,address,bytes)\":{\"notice\":\"Queries a `removeLiquiditySingleTokenExactIn` operation without actually executing it.\"},\"queryRemoveLiquiditySingleTokenExactOut(address,address,uint256,address,bytes)\":{\"notice\":\"Queries a `removeLiquiditySingleTokenExactOut` operation without actually executing it.\"},\"querySwapHook((address,uint8,address,address,address,uint256,uint256,uint256,bool,bytes))\":{\"notice\":\"Hook for swap queries.\"},\"querySwapSingleTokenExactIn(address,address,address,uint256,address,bytes)\":{\"notice\":\"Queries a swap operation specifying an exact input token amount without actually executing it.\"},\"querySwapSingleTokenExactOut(address,address,address,uint256,address,bytes)\":{\"notice\":\"Queries a swap operation specifying an exact output token amount without actually executing it.\"},\"removeLiquidityCustom(address,uint256,uint256[],bool,bytes)\":{\"notice\":\"Removes liquidity from a pool with a custom request.\"},\"removeLiquidityHook((address,address,uint256[],uint256,uint8,bool,bytes))\":{\"notice\":\"Hook for removing liquidity.\"},\"removeLiquidityProportional(address,uint256,uint256[],bool,bytes)\":{\"notice\":\"Removes liquidity with proportional token amounts from a pool, burning an exact pool token amount.\"},\"removeLiquidityRecovery(address,uint256,uint256[])\":{\"notice\":\"Removes liquidity proportionally, burning an exact pool token amount. Only available in Recovery Mode.\"},\"removeLiquidityRecoveryHook(address,address,uint256,uint256[])\":{\"notice\":\"Hook for removing liquidity in Recovery Mode.\"},\"removeLiquiditySingleTokenExactIn(address,uint256,address,uint256,bool,bytes)\":{\"notice\":\"Removes liquidity from a pool via a single token, burning an exact pool token amount.\"},\"removeLiquiditySingleTokenExactOut(address,uint256,address,uint256,bool,bytes)\":{\"notice\":\"Removes liquidity from a pool via a single token, specifying the exact amount of tokens to receive.\"},\"swapSingleTokenExactIn(address,address,address,uint256,uint256,uint256,bool,bytes)\":{\"notice\":\"Executes a swap operation specifying an exact input token amount.\"},\"swapSingleTokenExactOut(address,address,address,uint256,uint256,uint256,bool,bytes)\":{\"notice\":\"Executes a swap operation specifying an exact output token amount.\"},\"swapSingleTokenHook((address,uint8,address,address,address,uint256,uint256,uint256,bool,bytes))\":{\"notice\":\"Hook for swaps.\"},\"version()\":{\"notice\":\"Getter for the version.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/test/RouterMock.sol\":\"RouterMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/misc/IWETH.sol\":{\"keccak256\":\"0x75d5964b2f92dba9b9254e0052de28a9378e6759b1b28ccbb51db0bc80024176\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6ec9c862929ccff2be994d0296c0a4de3ddc19bb5a7aae3d4df0887dc7b29c8e\",\"dweb:/ipfs/QmSNr2fkNM2VyAo3B1DG1cuRh41t4A6mJZqeUu6vvYb97G\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouter.sol\":{\"keccak256\":\"0x39a5cd3ee5c0bab644f068ad8ba617a0cf71a91610693b1c93c9536464151ee3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6a5f61af5cda44d8ef95e610c0b418f2cfb984e9c47a58fb1fa8c8bc949def75\",\"dweb:/ipfs/Qmby1D2D5Ym44jgBTTM8eTGnmNGCCKrb8ujpkhVPE6C6Cr\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IRouterCommon.sol\":{\"keccak256\":\"0x82d459426edf0ac20a33ad2065dae1f83544069b9887618248c0722e25a8b736\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c4566915a8c2b10f6232f92dad5e4409bb2aa46baf6a5d78dc0ac447facbfb37\",\"dweb:/ipfs/QmReRhA1BxRocwWsGgacaAcC2xRtWqJgN57bd2Yyy7A1gd\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISenderGuard.sol\":{\"keccak256\":\"0x2ec1ecf5c578aab7502f6985a03fbb79998218bdef819845d70d28a6994cff5b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a32637a45f19c29797db11eb25eb9bfda73302f280a64a9d9a4ab123db1b8e6f\",\"dweb:/ipfs/QmXGimviZ4Mr6kwgqkCwpHH5uGHVEjAcCRNvAwvoVYKi6f\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":{\"keccak256\":\"0xb4ee9e1543d36bdf9eeb4a9d5ab41170723239a1e27a2272f2e31de4765c019b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b70dd5e4fa496c2c1efb6bd20368587ba3c9c0d0afac9dc3631a29ff2628f99\",\"dweb:/ipfs/QmQigXUkpDuVK5VSX67RABrAC9bashPcHMasgPRNJb4k8Z\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":{\"keccak256\":\"0xb5f6b1d0ee3f295a717ce58329eaadccb1eefc2e1e02e2e7c438e377628475cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03c1b9bc73b7d14d9e1948a31c271a03a6ba4291f44d9aff17e60d300c111d0d\",\"dweb:/ipfs/QmNpW3iD3ST76N6xTncuVgYSuafSqFkXUmxNaK8uybr96G\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/Router.sol\":{\"keccak256\":\"0x89aa26654c62facc3a34dd8126e5ec36c0950c324632e5bd2f91ee7b9586f703\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://48307d0a004912eb66564d4f31748042a719a7ea11385d967a9af2f0898dec17\",\"dweb:/ipfs/QmPucqFg1WNzqPPBtwV5DFLmcdK7RkrctmX4VL1c39Tjro\"]},\"@balancer-labs/v3-vault/contracts/RouterCommon.sol\":{\"keccak256\":\"0xb473ef641d1465f4d3c4f0372183e7c4c0baa77b2e2cf73dee947ab7ab722bac\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://61a166cdf1760c79790f921a8edee1f1977f07cef699db901bd15100ab30f96f\",\"dweb:/ipfs/QmdyhDm4PgNyzNC3s25k68yd52GtqM4PJt6QpfkmEmRtHW\"]},\"@balancer-labs/v3-vault/contracts/SenderGuard.sol\":{\"keccak256\":\"0x43fbf1ee03766ff75e6306520827db7d8f9cbc63f4609105a7062cbf6c6980a2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c015d974c3c8ae2f0677905a3216148611be430d4f3b8e64698ede996c8b4a46\",\"dweb:/ipfs/QmdrU9JE9NoksjQ6DUmGH1uKjgdyXVZXfD1RzdwFPnYtzr\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@balancer-labs/v3-vault/contracts/lib/RouterWethLib.sol\":{\"keccak256\":\"0xd66f21fa586085e10a1e322370c7015ebe472c44fc27472a6fdfe67ad6d9b188\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://88b4830e07a76a68dce1e3adba583f60259df5187087def2fd43d3c1f8b0e2ae\",\"dweb:/ipfs/QmbGNEfYtDUFpGrFYo9iJcSg9sJxiAVN9iaJApCaHobTDm\"]},\"@balancer-labs/v3-vault/contracts/test/RouterMock.sol\":{\"keccak256\":\"0xe00906d83a5b5cdee1e8da4bbeb80d632179f9ae70eed1a4f927d126f117e206\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://16f02931798e5974c3bc766cfd7fde340019826a9f12443e1192b0e75ceadb5f\",\"dweb:/ipfs/QmUDd7D7JbGfnmrCRfnSqWqMU7JaZycWP3iTpRB1xNx99y\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"permit2/src/interfaces/IAllowanceTransfer.sol\":{\"keccak256\":\"0x37f0ac203b6ef605c9533e1a739477e8e9dcea90710b40e645a367f8a21ace29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0104d72aeaec1cd66cc232e7de7b7ead08608efcc179491b8a66387614670b0\",\"dweb:/ipfs/QmfAZDyuNC9FXXbnJUwqHNwmAK6uRrXxtWEytLsxjskPsN\"]},\"permit2/src/interfaces/IEIP712.sol\":{\"keccak256\":\"0xfdccf2b9639070803cd0e4198427fb0df3cc452ca59bd3b8a0d957a9a4254138\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7c936ac42ce89e827db905a1544397f8bdf46db34cdb6aa1b90dea42fdb4c72\",\"dweb:/ipfs/QmVgurxo1N31qZqkPBirw9Z7S9tLYmv6jSwQp8R8ur2cBk\"]},\"permit2/src/interfaces/IPermit2.sol\":{\"keccak256\":\"0xaa631cc9f53e699301d94233007110a345e6779011def484e8dd97b8fe0af771\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc0502cf19c9c18f320a3001201e89e350393b75837f6b7971de18b2de06f30d\",\"dweb:/ipfs/QmT9SfhdJ7VJNNrf94g4H5usyi7ShqWGx7Cqsz9jZTjX96\"]},\"permit2/src/interfaces/ISignatureTransfer.sol\":{\"keccak256\":\"0xe6df9966f8841dc3958ee86169c89de97e7f614c81c28b9dc947b12d732df64e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3d4eafdee7f48c3be8350a94eb6edd0bfb2af2c105df65787a77174f356c0317\",\"dweb:/ipfs/QmY1j2adeeAhNpn6cUuthemxGCdLXHTfyMh9yTKsY4mZ2d\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/test/VaultAdminMock.sol":{"VaultAdminMock":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"mainVault","type":"address"},{"internalType":"uint32","name":"pauseWindowDuration","type":"uint32"},{"internalType":"uint32","name":"bufferPeriodDuration","type":"uint32"},{"internalType":"uint256","name":"minTradeAmount","type":"uint256"},{"internalType":"uint256","name":"minWrapAmount","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BalanceOverflow","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"CodecOverflow","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotStaticCall","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"OutOfBounds","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"PoolTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintToInt","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"},{"inputs":[],"name":"ZeroDivision","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"addLiquidityToBuffer","outputs":[{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"underlyingAmount","type":"uint256"},{"internalType":"uint256","name":"wrappedAmount","type":"uint256"}],"name":"addLiquidityToBufferUnbalancedForTests","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areBuffersPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"collectAggregateFees","outputs":[{"internalType":"uint256[]","name":"totalSwapFees","type":"uint256[]"},{"internalType":"uint256[]","name":"totalYieldFees","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableQueryPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"disableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableQuery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"enableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferAsset","outputs":[{"internalType":"address","name":"underlyingToken","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"token","type":"address"}],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"token","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"getBufferOwnerShares","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodDuration","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferPeriodEndTime","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"token","type":"address"}],"name":"getBufferTotalShares","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumPoolTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumPoolTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumTradeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinimumWrapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolMinimumTotalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getVaultPausedState","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlyingRaw","type":"uint256"},{"internalType":"uint256","name":"amountWrappedRaw","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"initializeBuffer","outputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isVaultPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualBurnBufferShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"manualDisableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"manualEnableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualMintBufferShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"manualMintMinimumBufferSupplyReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"manualPausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualPauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"maxAmountUnderlyingInRaw","type":"uint256"},{"internalType":"uint256","name":"maxAmountWrappedInRaw","type":"uint256"},{"internalType":"uint256","name":"exactSharesToIssue","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"manualReentrancyAddLiquidityToBuffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"manualReentrancyDisableRecoveryMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"manualReentrancyInitializeBuffer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOut","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOut","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"manualReentrancyRemoveLiquidityFromBufferHook","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"manualUnpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualUnpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"mockEnsurePoolNotInRecoveryMode","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"mockWithValidPercentage","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"pausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reentrancyGuardEntered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"}],"name":"removeLiquidityFromBuffer","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"sharesToRemove","type":"uint256"},{"internalType":"uint256","name":"minAmountUnderlyingOutRaw","type":"uint256"},{"internalType":"uint256","name":"minAmountWrappedOutRaw","type":"uint256"},{"internalType":"address","name":"sharesOwner","type":"address"}],"name":"removeLiquidityFromBufferHook","outputs":[{"internalType":"uint256","name":"removedUnderlyingBalanceRaw","type":"uint256"},{"internalType":"uint256","name":"removedWrappedBalanceRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"setAuthorizer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"setProtocolFeeController","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"setStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"unpausePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseVaultBuffers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"updateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateYieldFeePercentage","type":"uint256"}],"name":"updateAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_uint32_fromMemory":{"entryPoint":961,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":926,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_4982":{"entryPoint":879,"id":null,"parameterSlots":1,"returnSlots":0},"fun_calculateVaultStorageSlot":{"entryPoint":978,"id":28383,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6102006040908082523461036b5760a0816149318038038091610022828561039e565b83398101031261036b5780516001600160a01b03811680820361036b57602061004c8185016103c1565b6100578686016103c1565b91608060608701519601519561008c88516100718161036f565b600a8152691a5cd55b9b1bd8dad95960b21b848201526103d2565b60c0526100bf885161009d8161036f565b60118152701b9bdb96995c9bd1195b1d1850dbdd5b9d607a1b848201526103d2565b60e0526100ec88516100d08161036f565b600b81526a746f6b656e44656c74617360a81b848201526103d2565b9761010098895261012481516101018161036f565b6012815271185919131a5c5d5a591a5d1e50d85b1b195960721b858201526103d2565b9761012098895261015382516101398161036f565b60098152681cd95cdcda5bdb925960ba1b868201526103d2565b926101409384526101c09788526101e098895263ffffffff80961694630784ce00861161035c578688169562ed4e00871161034d5742019081421161032457878211610338575086166101608181526101a098895295019586116103245761018095865260805260a052519661449f98896104928a396080518961069a015260a05189612414015260c05189613d76015260e0518981816141fc015261425c015251886141b101525187505051865050518581816118fb015281816119c101526137d80152518481816111dc015281816119e80152613910015251838181610d3a015281816110ea0152818161266001528181613abc0152613bd50152518261358001525181818161033101528181610384015281816103db01528181610430015281816106d60152818161099301528181610ae201528181610ba501528181610c4001528181610c9401528181610e0101528181611322015281816113720152818161150901528181611575015281816116560152818161198301528181611a7701528181611b2401528181611e6401528181611f1e0152818161236f015281816123ca015281816124c10152818161255801528181612b2601528181612b6f01528181612bea0152612ca10152f35b634e487b7160e01b5f52601160045260245ffd5b6306dfcc6560e41b5f5260045260245260445ffd5b634f5277f760e11b5f5260045ffd5b63cc0e8fe560e01b5f5260045ffd5b5f80fd5b604081019081106001600160401b0382111761038a57604052565b634e487b7160e01b5f52604160045260245ffd5b601f909101601f19168101906001600160401b0382119082101761038a57604052565b519063ffffffff8216820361036b57565b604051906103df8261036f565b600c8252610460603a602084016b5661756c7453746f7261676560a01b81526020604051948592828401977f62616c616e6365722d6c6162732e76332e73746f726167652e000000000000008952518091603986015e830190601760f91b60398301528051928391018583015e015f8382015203601a81018452018261039e565b5190205f198101908111610324576040519060208201908152602082526104868261036f565b9051902060ff19169056fe6080604052600436101561009f575b361561007757346100775760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7420696d706c656d656e74656400000000000000000000000000000000006044820152fd5b7ff2238896000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f5f3560e01c80630387587d14612c81578063058a628f14612bbf578063071d8a0214612ba7578063098401f514612b5a5780630b7562be14612b115780630b9df1f614612af05780631558356e14612a9057806316df26cb146129dc5780631f568ea31461268457806320c1fb7a1461264357806326a8a9911461262657806327521d0c146126005780632d7713891461252d5780632e42f4d5146125115780634021fe0f1461249657806352b9e33d1461243757806353956aa2146123fc57806355aca1ec146123a857806355cba7fe146123595780635dcacd6414611f075780635e0b06f414611e41578063653eb3b014611b0b5780636b23029114611af35780637578abb914611ad6578063821440f214611a61578063851c1bb314611a0f57806385c8c0151461196d57806388e5101a1461191f5780638a8d123a146118de5780638f4ab9ca146116385780639260d920146115b75780639385e39a1461153d5780639e0879c2146114f3578063a8175b27146114d7578063b61398cd146113f3578063b9212b491461135c578063bffb78b214611300578063c7b3b3a914611219578063cc671ff714611200578063cd51c12f146111bf578063d0965a6b146111a1578063d15126ba14610ddf578063d2c725e014610da0578063dc3f574e14610c74578063de1a36a614610c2a578063e085c5a814610b8f578063e0d5560514610acc578063e253670a14610970578063e2a92b1a146106bd578063e2cb0ba014610682578063e83388941461066a578063e99ac9a314610648578063ebc7955c14610410578063f21c38cd146103b9578063f2784e07146103585763fbfa77cf14610312575061000e565b3461035557806003193601126103555760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b80fd5b50346103555760206003193601126103555760406020916001600160a01b0361037f612ce4565b6103a87f0000000000000000000000000000000000000000000000000000000000000000613678565b168152600d83522054604051908152f35b50346103555760206003193601126103555761040d6103d6612ce4565b6103ff7f0000000000000000000000000000000000000000000000000000000000000000613678565b61040881613d29565b613aef565b80f35b503461035557608060031936011261035557601f9061042d612ce4565b907f00000000000000000000000000000000000000000000000000000000000000009161045983613678565b6040517f5dcacd640000000000000000000000000000000000000000000000000000000060208083019182526001600160a01b039390931660248084019190915235604480840191909152356064808401919091523560848301523360a480840191909152825291937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09284929091906104f460c482612dfb565b836001600160a01b03604489886040519c8d98899788947f48c8949100000000000000000000000000000000000000000000000000000000865260048601525180918160248701528686015e8685828601015201168101030193165af193841561063d578294610580575b60408461057487828082518301019101613662565b90918351928352820152f35b909193503d8085833e6105938183612dfb565b8101838282031261060457815167ffffffffffffffff9283821161063957019080601f83011215610635578151928311610608576105db8560405195601f8601160185612dfb565b82845284838301011161060457938382610574949382604098018386015e83010152925f61055f565b8480fd5b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8580fd5b8680fd5b6040513d84823e3d90fd5b50346103555760206003193601126103555761040d610665612ce4565b613f74565b50346103555761040d61067c36612d36565b91613e52565b503461035557806003193601126103555760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b5034610355576106cc36612cfa565b6106fa95919294957f0000000000000000000000000000000000000000000000000000000000000000613678565b610702613d74565b61070a613f06565b61071386613dc5565b61071b613c08565b6001600160a01b0392838716916040517f38d52e0f0000000000000000000000000000000000000000000000000000000081526020958682600481885afa918215610965578692610936575b50848652600e875280604087205416911680910361090657838552600b8652604085205497600d87526040862054916fffffffffffffffffffffffffffffffff8a16916107c46107b88588866140c9565b9b60801c9487866140c9565b99808c116108d25750808a1161089e57509361086f9361083f60409c946108398c6108338f6108519861082e8e6108257f75c4dc5f23640eeba7d404d9165f515fc3d9e23a5c8b6e2d09b4b9da56ff00a99f61081f8661414c565b906141a1565b61081f8661414c565b612eae565b92612eae565b90613c5d565b93878952600b8a52848d8a2055613fcf565b8851918291888a846040919493926060820195825260208201520152565b0390a27f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d8351928352820152f35b876064918b897f8eda85e4000000000000000000000000000000000000000000000000000000008452600452602452604452fd5b886064918d857f8eda85e4000000000000000000000000000000000000000000000000000000008452600452602452604452fd5b84604491857f36b18d09000000000000000000000000000000000000000000000000000000008352600452602452fd5b610957919250873d891161095e575b61094f8183612dfb565b810190612e3c565b905f610767565b503d610945565b6040513d88823e3d90fd5b50346103555760406003193601126103555761098a612ce4565b602435906109b77f0000000000000000000000000000000000000000000000000000000000000000613678565b6109c081613d29565b670de0b6b3a76400008211610aa4576001600160a01b039081600a54163303610a7c571690818352826020526040832054670de0b5cad2bef0008211610a54577f606eb97d83164bd6b200d638cd49c14c65d94d4f2c674cfd85e24e0e202c3ca591610a3f602092610a30604290565b9064174876e8008404906142d5565b8486528583526040862055604051908152a280f35b6004847f746e5940000000000000000000000000000000000000000000000000000000008152fd5b6004847f23dada53000000000000000000000000000000000000000000000000000000008152fd5b6004837f4c69ac5d000000000000000000000000000000000000000000000000000000008152fd5b5034610355578060031936011261035557610b067f0000000000000000000000000000000000000000000000000000000000000000613678565b610b0e6136b1565b60ff60095416610b67577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe600754166007557f91d7478835f2b5adc315f5aad920f4a7f0a02f7fddf3042d17b2c80168ea17f58180a180f35b807f069f8cbc0000000000000000000000000000000000000000000000000000000060049252fd5b5034610355578060031936011261035557610bc97f0000000000000000000000000000000000000000000000000000000000000000613678565b610bd16136b1565b60047ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb60075416176007557f300c7ca619eb846386aa0a6e5916ac2a41406448b0a2e99ba9ccafeb899015a5602060405160018152a180f35b5034610355578060031936011261035557610c647f0000000000000000000000000000000000000000000000000000000000000000613678565b610c6c6136b1565b61040d614078565b503461035557602060031936011261035557610c8e612ce4565b90610cb87f0000000000000000000000000000000000000000000000000000000000000000613678565b610cc182613d29565b610cca82613947565b6001600160a01b03821681528060205260408120549160018360021c1663ffffffff8094610cfe610cf9605a90565b612e73565b1c1681610d35575b5061040d9293501580610d26575b15613cbf57610d216136b1565b613cbf565b50610d2f613909565b15610d14565b9050837f0000000000000000000000000000000000000000000000000000000000000000160192808411610d735761040d9293164211158392610d06565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b503461035557806003193601126103555760207f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6040519015158152f35b503461035557604060031936011261035557610df9612ce4565b602435610e257f0000000000000000000000000000000000000000000000000000000000000000613678565b610e2e82613d29565b6001600160a01b0380831692838552602091600183526001604087200154169081155f1461117257610e60915061431c565b610e68613909565b61114a57828452838152604084205460018160021c169063ffffffff8091610e91610cf9605a90565b1c16826110e4575b50506110b8576040517fce20ece70000000000000000000000000000000000000000000000000000000081528181600481875afa90811561105857859161108b575b508210611063576040517f654cf15d0000000000000000000000000000000000000000000000000000000081528181600481875afa908115611058578591611027575b508211610fff57828452838152604084205491670de0b5cad2bef0008111610fd75764174876e8008104928360181c610faf577ffffffffffffffffffffffffffffffffffffffffffffffffffffffc000003ffff7f89d41522342fabac1471ca6073a5623e5caf367b03ca6e9a001478d0cf8be4a19486885287855260121b9116176040862055604051908152a280f35b7fe4337c05000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004857f746e5940000000000000000000000000000000000000000000000000000000008152fd5b6004847f7f47834b000000000000000000000000000000000000000000000000000000008152fd5b90508181813d8311611051575b61103e8183612dfb565b8101031261104d57515f610f1e565b5f80fd5b503d611034565b6040513d87823e3d90fd5b6004847fbfb20688000000000000000000000000000000000000000000000000000000008152fd5b90508181813d83116110b1575b6110a28183612dfb565b8101031261104d57515f610edb565b503d611098565b602484847fd971f597000000000000000000000000000000000000000000000000000000008252600452fd5b908092507f0000000000000000000000000000000000000000000000000000000000000000160181811161111d57164211155f80610e99565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6004847fda9f8b34000000000000000000000000000000000000000000000000000000008152fd5b503314610e60576004847f23dada53000000000000000000000000000000000000000000000000000000008152fd5b50346103555780600319360112610355576020604051620f42408152f35b5034610355578060031936011261035557602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461035557806003193601126103555761040d61387f565b50346103555761129a604061122d36612cfa565b9061123c969296949394613c08565b855196879586957f5dcacd640000000000000000000000000000000000000000000000000000000087526004870193608093969591929660a08601976001600160a01b03809516875260208701526040860152606085015216910152565b038185305af1801561063d576112d2575b50807f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d80f35b6112f39060403d6040116112f9575b6112eb8183612dfb565b810190613662565b506112ab565b503d6112e1565b50346103555760206003193601126103555761040d61131d612ce4565b6113467f0000000000000000000000000000000000000000000000000000000000000000613678565b61134f81613d29565b6113576136b1565b612f12565b50346103555780600319360112610355576113967f0000000000000000000000000000000000000000000000000000000000000000613678565b61139e6136b1565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb600754166007557f300c7ca619eb846386aa0a6e5916ac2a41406448b0a2e99ba9ccafeb899015a560206040515f8152a180f35b503461035557611475602061140736612cfa565b90611416969296949394613c08565b60405196879586957f653eb3b00000000000000000000000000000000000000000000000000000000087526004870193608093969591929660a08601976001600160a01b03809516875260208701526040860152606085015216910152565b038185305af1801561063d576114ac5750807f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d80f35b602090813d83116114d0575b6114c28183612dfb565b8101031261104d575f6112ab565b503d6114b8565b5034610355578060031936011261035557602060405160028152f35b503461035557806003193601126103555761152d7f0000000000000000000000000000000000000000000000000000000000000000613678565b6115356136b1565b61040d61379c565b503461035557604060031936011261035557611557612ce4565b602435916001600160a01b0380841680940361104d576040926115997f0000000000000000000000000000000000000000000000000000000000000000613678565b168152600c60205220905f52602052602060405f2054604051908152f35b50346103555761129a60406115cb36612cfa565b906115da969296949394613c08565b855196879586957fe2a92b1a0000000000000000000000000000000000000000000000000000000087526004870193608093969591929660a08601976001600160a01b03809516875260208701526040860152606085015216910152565b5034610355576020806003193601126118da57611653612ce4565b907f000000000000000000000000000000000000000000000000000000000000000061167e81613678565b611686613d74565b6001600160a01b039283600a541633036118b2579380846024876116aa8399613d29565b60405197889384927fca4f28030000000000000000000000000000000000000000000000000000000084521696876004840152165afa9384156118a5578194611809575b508351926117046116fe856135d2565b946135d2565b90825b86518110156117db57808861171e6001938a613621565b511686865260069081855260408720815f5285526fffffffffffffffffffffffffffffffff60405f20548060801c611756868a613621565b5216611762848b613621565b5261176d838a613621565b51158015906117c8575b611784575b505001611707565b6117c191888852855260408720815f5285528660405f20556117bb6117a9848b613621565b516117b48589613621565b5190612eae565b90613e12565b5f8061177c565b506117d38387613621565b511515611777565b6117f8866118058486604051948594604086526040860190612d6b565b9184830390850152612d6b565b0390f35b9093503d8085833e61181b8183612dfb565b81019083818303126106045780519067ffffffffffffffff821161063557019080601f83011215610604578151611851816135ba565b9261185f6040519485612dfb565b818452858085019260051b820101928311610639578501905b82821061188957505050925f6116ee565b815188811681036118a1578152908501908501611878565b8780fd5b50604051903d90823e3d90fd5b6004857f23dada53000000000000000000000000000000000000000000000000000000008152fd5b5080fd5b5034610355578060031936011261035557602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461035557602060031936011261035557670de0b6b3a7640000600435116119455780f35b807f4c69ac5d0000000000000000000000000000000000000000000000000000000060049252fd5b50346103555780600319360112610355576119a77f0000000000000000000000000000000000000000000000000000000000000000613678565b60606119b1613909565b604051901515815263ffffffff807f00000000000000000000000000000000000000000000000000000000000000001660208301527f0000000000000000000000000000000000000000000000000000000000000000166040820152f35b503461035557602060031936011261035557600435907fffffffff0000000000000000000000000000000000000000000000000000000082168203610355576020611a5983613555565b604051908152f35b5034610355578060031936011261035557611a9b7f0000000000000000000000000000000000000000000000000000000000000000613678565b611aa36136b1565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00600954161760095561040d614078565b50346103555760206003193601126103555761040d611357612ce4565b50346103555761040d611b0536612d36565b91613fcf565b503461035557611b1a36612cfa565b9492611b489291927f0000000000000000000000000000000000000000000000000000000000000000613678565b611b50613d74565b611b58613f06565b611b60613c08565b6001600160a01b039586861693848652602097600e895280604088205416611e15576040517f38d52e0f00000000000000000000000000000000000000000000000000000000815289816004818a5afa908115611dc1578891611df8575b50168015611dcc57611c0690868852600e8a5260408820817fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905561081f8561414c565b611c18611c128561414c565b866141a1565b611c228484613c5d565b91858752600b89528260408820556040517f4cdad50600000000000000000000000000000000000000000000000000000000815285600482015289816024818a5afa8015611dc15785908990611d90575b611c7d9250612eae565b97611c8789613f3d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8f08901988911611d6357611cc59181611cc08b93613f74565b613fcf565b808710611d335750604080519283526020830193909352918101919091527f75c4dc5f23640eeba7d404d9165f515fc3d9e23a5c8b6e2d09b4b9da56ff00a990606090a27f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051908152f35b85604491887fda0cb07e000000000000000000000000000000000000000000000000000000008352600452602452fd5b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b50508981813d8311611dba575b611da78183612dfb565b8101031261104d5784611c7d9151611c73565b503d611d9d565b6040513d8a823e3d90fd5b602487877fd407f9c5000000000000000000000000000000000000000000000000000000008252600452fd5b611e0f91508a3d8c1161095e5761094f8183612dfb565b5f611bbe565b602487877f1690fa40000000000000000000000000000000000000000000000000000000008252600452fd5b503461035557604060031936011261035557611e5b612ce4565b60243590611e887f0000000000000000000000000000000000000000000000000000000000000000613678565b611e9181613d29565b670de0b6b3a76400008211610aa4576001600160a01b039081600a54163303610a7c571690818352826020526040832054670de0b5cad2bef0008211610a545781610a3f60209264174876e8007fe4d371097beea42453a37406e2aef4c04f3c548f84ac50e72578662c0dcd7354950490614293565b503461035557611f1636612cfa565b9490929193947f0000000000000000000000000000000000000000000000000000000000000000611f4681613678565b6001600160a01b038116330361232d57611f5e613d74565b611f6787613dc5565b32158080612320575b6122b8575b506001600160a01b0387168352600c602052604083206001600160a01b0383165f5260205260405f20548411612290576001600160a01b0387168352600b602052604083205495600d602052604084205496611ffd611fef89611fea896fffffffffffffffffffffffffffffffff8616612ebb565b612ece565b98611fea888460801c612ebb565b966001600160a01b038a168652600e6020526001600160a01b0360408720541692808a1061225c575080881061221f575061207b61209a9161203f8a85613e12565b612052896001600160a01b038d16613e12565b610839896120728c6fffffffffffffffffffffffffffffffff8516612f05565b9260801c612f05565b956001600160a01b038a168652600b602052866040872055848a613e52565b86612185575b50846120fc575b5050604080518581526020810185905280820193909352946001600160a01b0316917f44d97b36e99b590b3d2875aad3b167b1d7fb1e063f3f1325a1eeac76caee51139150606090a282519182526020820152f35b6001600160a01b0381163b15612181576001600160a01b03606488858381958160405198899788967fae6393290000000000000000000000000000000000000000000000000000000088521660048701521660248501528a6044850152165af1801561063d5761216d575b806120a7565b6121778291612d9e565b6103555780612167565b8280fd5b6001600160a01b0382163b1561221b57604051907fae63932900000000000000000000000000000000000000000000000000000000825260048201526001600160a01b03831660248201528660448201528381606481836001600160a01b0387165af18015612210579084916121fc575b506120a0565b61220590612d9e565b61218157825f6121f6565b6040513d86823e3d90fd5b8380fd5b85606491896001600160a01b038d7f8eda85e400000000000000000000000000000000000000000000000000000000855216600452602452604452fd5b866064918b867f8eda85e4000000000000000000000000000000000000000000000000000000008452600452602452604452fd5b6004837f98c5dbd6000000000000000000000000000000000000000000000000000000008152fd5b156122f8576001600160a01b0387168352600c602052604083206001600160a01b0383165f5260205260405f206122f0858254612eae565b90555f611f75565b6004837f67f84ab2000000000000000000000000000000000000000000000000000000008152fd5b5060016007541615611f70565b6024837f089676d500000000000000000000000000000000000000000000000000000000815233600452fd5b50346103555780600319360112610355576123937f0000000000000000000000000000000000000000000000000000000000000000613678565b6020600160075460021c166040519015158152f35b50346103555760206003193601126103555761040d6123c5612ce4565b6123ee7f0000000000000000000000000000000000000000000000000000000000000000613678565b6123f781613d29565b613994565b503461035557806003193601126103555760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b50346103555760206003193601126103555761040d612454612ce4565b6001600160a01b0381168352600160205260408320337fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055613aef565b503461035557602060031936011261035557604080916001600160a01b036124bc612ce4565b6124e57f0000000000000000000000000000000000000000000000000000000000000000613678565b168152600b60205220548151906fffffffffffffffffffffffffffffffff8116825260801c6020820152f35b5034610355578060031936011261035557602060405160088152f35b5034610355576020600319360112610355576004356001600160a01b0381168091036118da5761257c7f0000000000000000000000000000000000000000000000000000000000000000613678565b6125846136b1565b61258c613c08565b807fffffffffffffffffffffffff0000000000000000000000000000000000000000600a541617600a557f280a60b1e63c1774d397d35cce80eb80e51408ead755fb446e6f744ce98e5df08280a2807f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d80f35b50346103555760206003193601126103555761040d61261d612ce4565b610d2181613947565b503461035557806003193601126103555760206040516127108152f35b5034610355578060031936011261035557602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103555760606003193601126103555761269e612ce4565b602435604435906001600160a01b0380931692838552602091600b835260408620549181612872575b5083612709575b90610839600b946126f46126fd946fffffffffffffffffffffffffffffffff8516612eae565b9260801c612eae565b92845252604082205580f35b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810185905283816064818a8a5af1801561283a57612845575b50848652600883526040862061276d858254612eae565b90556040517f4cdad5060000000000000000000000000000000000000000000000000000000081528460048201528381602481895afa90811561283a578791612806575b50600b946126f46126fd949361083993898b52600d885260408b206127d7828254612eae565b9055898b52600c885260408b20335f5288526127f860405f20918254612eae565b9055939450509450506126ce565b929190508383813d8311612833575b61281f8183612dfb565b8101031261104d579151909190600b6127b1565b503d612815565b6040513d89823e3d90fd5b61286490843d861161286b575b61285c8183612dfb565b810190612e5b565b505f612756565b503d612852565b6040517f38d52e0f000000000000000000000000000000000000000000000000000000009081815285816004818b5afa9081156129b45789916129bf575b506040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101859052908690829060649082908d9088165af180156129b457612997575b5060405190815284816004818a5afa908115611dc157889161297a575b501686526008835260408620612939828254612eae565b9055848652600d835260408620612951828254612eae565b9055848652600c835260408620335f52835260405f20612972828254612eae565b90555f6126c7565b6129919150853d871161095e5761094f8183612dfb565b5f612922565b6129ad90863d881161286b5761285c8183612dfb565b505f612905565b6040513d8b823e3d90fd5b6129d69150863d881161095e5761094f8183612dfb565b5f6128b0565b503461104d57602060031936011261104d576129f6612ce4565b6129fe613c08565b303b1561104d576001600160a01b03604051917fbffb78b20000000000000000000000000000000000000000000000000000000083521660048201525f8160248183305af18015612a8557612a745750807f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d80f35b612a7e9150612d9e565b5f5f6112ab565b6040513d5f823e3d90fd5b3461104d57602060031936011261104d57612aee612aac612ce4565b6001600160a01b0381165f52600160205260405f20337fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055613994565b005b3461104d57602060031936011261104d57612aee612b0c612ce4565b613947565b3461104d575f60031936011261104d57612b4a7f0000000000000000000000000000000000000000000000000000000000000000613678565b612b526136b1565b612aee61387f565b3461104d575f60031936011261104d57612b937f0000000000000000000000000000000000000000000000000000000000000000613678565b6020612b9d613909565b6040519015158152f35b3461104d575f60031936011261104d57612aee61379c565b3461104d57602060031936011261104d576004356001600160a01b0381169081810361104d57612c0e7f0000000000000000000000000000000000000000000000000000000000000000613678565b612c166136b1565b7fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff006009549260081b169116176009557f94b979b6831a51293e2641426f97747feed46f17779fed9cd18d1ecefcfe92ef5f80a2005b3461104d57602060031936011261104d576020612c9c612ce4565b612cc57f0000000000000000000000000000000000000000000000000000000000000000613678565b6001600160a01b038091165f52600e825260405f205416604051908152f35b600435906001600160a01b038216820361104d57565b60031960a091011261104d576001600160a01b03600435818116810361104d5791602435916044359160643591608435908116810361104d5790565b600319606091011261104d576001600160a01b0390600435828116810361104d5791602435908116810361104d579060443590565b9081518082526020808093019301915f5b828110612d8a575050505090565b835185529381019392810192600101612d7c565b67ffffffffffffffff8111612db257604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6060810190811067ffffffffffffffff821117612db257604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117612db257604052565b9081602091031261104d57516001600160a01b038116810361104d5790565b9081602091031261104d5751801515810361104d5790565b9060288201809211612e8157565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b91908201809211612e8157565b81810292918115918404141715612e8157565b8115612ed8570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b91908203918211612e8157565b906001600160a01b0382165f525f602052600160405f205460031c161561352057612f3b613c08565b6040519160e0830183811067ffffffffffffffff821117612db2576040525f8352606060208401526060604084015260608084015260606080840152606060a0840152606060c08401526001600160a01b0381165f52600560205260405f205f60205260405f205490600460205260405f2090600360205260405f2080549387526040519060208286815201905f528160205f20915f5b8781106134fd5750612fe692500382612dfb565b6020870152612ff4836135ba565b6130016040519182612dfb565b8381527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061302e856135ba565b015f5b8181106134d45750506040870152613048836135d2565b6060870152613056836135d2565b6080870152855164ffffffffff61306c856135d2565b91605a1c165f5b85811061349857505060c087015261308a836135d2565b60a0870152855191600183811c169283613484575b5082613474575b5f5b8481106131a15750505050506001600160a01b0381165f52600560205260405f20905f5b6060850151805182101561311257906131006130ea82600194613621565b516130f98360808a0151613621565b5190613c5d565b815f528460205260405f2055016130cc565b5050919250505f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d6001600160a01b03165f8181526020818152604080832080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7169055519182527fc2354cc2f78ea57777e55ddd43a7f22b112ce98868596880edaeb22b4f9c73a991a2565b6001600160a01b036131b78260208b0151613621565b51165f528160205260405f2090604051916131d183612ddf565b5460ff908181166131e1816143b3565b84526001600160a01b038160081c16602085015260a81c1615156040830152805f528360205260405f2054916132278260408c0151836132218383613621565b52613621565b508051613233816143b3565b61323c816143b3565b806133b85750670de0b6b3a76400005b61325a8360a08d0151613621565b526132786fffffffffffffffffffffffffffffffff8416838c61440d565b85156133ae57604081015115159081613390575b5061329d575b600191505b016130a8565b886132a881516143ea565b6132b6836060840151613621565b519360801c6132ca8460805f950151613621565b51818111613301575b505050600192816132e6575b5050613292565b6132fa916132f391612f05565b828b61440d565b5f806132df565b61330c935003612ebb565b91670de0b6b3a7640000926001847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830104019015150261336b8b6133648560a061335b8260c0860151613621565b51930151613621565b5190612ebb565b8185810204851482151715612e81576001946133879202612ece565b90925f806132d3565b600191505161339e816143b3565b6133a7816143b3565b145f61328c565b5060019150613297565b806133c46001926143b3565b0361344c57600460206001600160a01b038184015116604051928380927f679aefce0000000000000000000000000000000000000000000000000000000082525afa908115612a85575f9161341a575b5061324c565b90506020813d602011613444575b8161343560209383612dfb565b8101031261104d57515f613414565b3d9150613428565b7fdf450632000000000000000000000000000000000000000000000000000000005f5260045ffd5b865160031c6001161592506130a6565b61348f9193506143ea565b1515915f61309f565b600581029080820460051481151715612e8157604d601f84841c1611612e8157601f836001931c16600a0a6134cd8286613621565b5201613073565b6020906040516134e381612ddf565b5f81525f838201525f604082015282828601015201613031565b91506001602081926001600160a01b038654168152019301910191839192612fd2565b6001600160a01b03827fef029adf000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526135b481612ddf565b51902090565b67ffffffffffffffff8111612db25760051b60200190565b906135dc826135ba565b6135e96040519182612dfb565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061361782946135ba565b0190602036910137565b80518210156136355760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b919082604091031261104d576020825192015190565b6001600160a01b0316300361368957565b7f9fd25b36000000000000000000000000000000000000000000000000000000005f5260045ffd5b61373b60206136e27fffffffff000000000000000000000000000000000000000000000000000000005f3516613555565b6009546040517f9be2a88400000000000000000000000000000000000000000000000000000000815260048101929092523360248301523060448301529092839160081c6001600160a01b031690829081906064820190565b03915afa908115612a85575f9161377d575b501561375557565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b613796915060203d60201161286b5761285c8183612dfb565b5f61374d565b6137a4613909565b156137d1577fda9f8b34000000000000000000000000000000000000000000000000000000005f5260045ffd5b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000164210156138575760027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60075416176007557fe0629fe656e45ad7fd63a24b899da368690024c07043b88e57aee5095b1d3d02602060405160018152a1565b7f0e4460b7000000000000000000000000000000000000000000000000000000005f5260045ffd5b613887613909565b156138e1577fe0629fe656e45ad7fd63a24b899da368690024c07043b88e57aee5095b1d3d0260205f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60075416600755604051908152a1565b7ff7ff4dca000000000000000000000000000000000000000000000000000000005f5260045ffd5b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000164211158061393b5790565b506001600754811c1690565b6001600160a01b0316805f525f602052600160405f205460031c166139695750565b7f346d7607000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6139b86001600160a01b039182811692835f52600160205260405f20541690614130565b805f525f60205260405f205460018160021c1663ffffffff9081836139de610cf9605a90565b1c1681613ab7575b5015613a1857827fd971f597000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b81613a23605a612e73565b1c16421015613a8b577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb600491835f525f602052161760405f20557f57e20448028297190122571be7cb6c1b1ef85730c673f7c72f533c8662419aa7602060405160018152a2565b507feb5a1217000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9050817f00000000000000000000000000000000000000000000000000000000000000001601818111612e815781164211155f6139e6565b613b136001600160a01b039182811692835f52600160205260405f20541690614130565b805f525f60205260405f205460018160021c1663ffffffff8083613b38610cf9605a90565b1c1682613bcf575b505015613ba35760207f57e20448028297190122571be7cb6c1b1ef85730c673f7c72f533c8662419aa7917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb5f91858352828452166040822055604051908152a2565b507ffdcd6894000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b908092507f00000000000000000000000000000000000000000000000000000000000000001601818111612e8157164211155f80613b40565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c613c35576001905d565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b6fffffffffffffffffffffffffffffffff808211908115613cb5575b50613c8d57613c8a9160801b612eae565b90565b7f89560ca1000000000000000000000000000000000000000000000000000000005f5260045ffd5b905082115f613c79565b6001600160a01b0316805f525f60205260405f2060087ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff78254161790557fc2354cc2f78ea57777e55ddd43a7f22b112ce98868596880edaeb22b4f9c73a9602060405160018152a2565b6001600160a01b0316805f525f602052600160405f20541615613d495750565b7f9e51bd5c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f00000000000000000000000000000000000000000000000000000000000000005c15613d9d57565b7fc09ba736000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160a01b0380911690815f52600e60205260405f20541615613de75750565b7f85f41299000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90613e1c9061414c565b907f80000000000000000000000000000000000000000000000000000000000000008214612e8157613e50915f03906141a1565b565b91906001600160a01b03809116928315613ede577f4e09f7f7fc37ce2897800e2c2a9099565edb0a133d19d84a6871b3530af8846b916020911692835f52600d8252613ea28160405f2054612f05565b613eab81613f3d565b845f52600d835260405f2055600c825260405f20855f52825260405f20613ed3828254612f05565b9055604051908152a3565b7f586d06df000000000000000000000000000000000000000000000000000000005f5260045ffd5b600160075460021c16613f1557565b7f0f27df09000000000000000000000000000000000000000000000000000000005f5260045ffd5b6127108110613f495750565b7f34bdbfaa000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6001600160a01b035f9116808252600d6020527fd66f031d33381c6408f0b32c884461e5de3df8808399b6f3a3d86b1368f8ec346020612710806040862055600c8252604085208580528252806040862055604051908152a3565b91906001600160a01b03809116928315614050577fd66f031d33381c6408f0b32c884461e5de3df8808399b6f3a3d86b1368f8ec34916020911692835f52600d825261401f8160405f2054612eae565b61402881613f3d565b845f52600d835260405f2055600c825260405f20855f52825260405f20613ed3828254612eae565b7fdbe6b10e000000000000000000000000000000000000000000000000000000005f5260045ffd5b60017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60075416176007557fbd204090fd387f08e3076528bf09b4fc99d8100d749eace96c06002d3fedc6255f80a1565b8215614108576001916140db91612ebb565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830104019015150290565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b906001600160a01b0316331461414957613e509061431c565b50565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116141765790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b811561428f576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000009116805f528160205260405f205c8381019384125f8212908015821691151617612e81578361425657507f0000000000000000000000000000000000000000000000000000000000000000805c907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211612e81575d5b5f5260205260405f205d565b61424a577f0000000000000000000000000000000000000000000000000000000000000000805c9060018201809211612e81575d61424a565b5050565b908060181c610faf57602a1b9062ffffff602a1b19161790565b7fb4120f14000000000000000000000000000000000000000000000000000000005f5260045ffd5b90610100808410156142ad57838103908111612e81578060ff105f14614317575060ff5b6018116142ad578060181c610faf5762ffffff90831b921b19161790565b6142f9565b602061373b9161434e7fffffffff000000000000000000000000000000000000000000000000000000005f3516613555565b6001600160a01b0360095460081c16906040518095819482937f9be2a884000000000000000000000000000000000000000000000000000000008452339060048501916040919493606084019584526001600160a01b03809216602085015216910152565b600211156143bd57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b62ffffff9060421c1664174876e80090818102918183041490151715612e815790565b91906080670de0b6b3a764000061445d61446694806144308660608a0151613621565b526144586144428660c08a0151613621565b516144518760a08b0151613621565b5192612ebb565b612ebb565b04930151613621565b5256fea26469706673582212206e728428bc4d867277ca071b601ad67c283dec56f632dd209129f14cc8746a6264736f6c634300081b0033","opcodes":"PUSH2 0x200 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x36B JUMPI PUSH1 0xA0 DUP2 PUSH2 0x4931 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x22 DUP3 DUP6 PUSH2 0x39E JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x36B JUMPI DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP1 DUP3 SUB PUSH2 0x36B JUMPI PUSH1 0x20 PUSH2 0x4C DUP2 DUP6 ADD PUSH2 0x3C1 JUMP JUMPDEST PUSH2 0x57 DUP7 DUP7 ADD PUSH2 0x3C1 JUMP JUMPDEST SWAP2 PUSH1 0x80 PUSH1 0x60 DUP8 ADD MLOAD SWAP7 ADD MLOAD SWAP6 PUSH2 0x8C DUP9 MLOAD PUSH2 0x71 DUP2 PUSH2 0x36F JUMP JUMPDEST PUSH1 0xA DUP2 MSTORE PUSH10 0x1A5CD55B9B1BD8DAD959 PUSH1 0xB2 SHL DUP5 DUP3 ADD MSTORE PUSH2 0x3D2 JUMP JUMPDEST PUSH1 0xC0 MSTORE PUSH2 0xBF DUP9 MLOAD PUSH2 0x9D DUP2 PUSH2 0x36F JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH17 0x1B9BDB96995C9BD1195B1D1850DBDD5B9D PUSH1 0x7A SHL DUP5 DUP3 ADD MSTORE PUSH2 0x3D2 JUMP JUMPDEST PUSH1 0xE0 MSTORE PUSH2 0xEC DUP9 MLOAD PUSH2 0xD0 DUP2 PUSH2 0x36F JUMP JUMPDEST PUSH1 0xB DUP2 MSTORE PUSH11 0x746F6B656E44656C746173 PUSH1 0xA8 SHL DUP5 DUP3 ADD MSTORE PUSH2 0x3D2 JUMP JUMPDEST SWAP8 PUSH2 0x100 SWAP9 DUP10 MSTORE PUSH2 0x124 DUP2 MLOAD PUSH2 0x101 DUP2 PUSH2 0x36F JUMP JUMPDEST PUSH1 0x12 DUP2 MSTORE PUSH18 0x185919131A5C5D5A591A5D1E50D85B1B1959 PUSH1 0x72 SHL DUP6 DUP3 ADD MSTORE PUSH2 0x3D2 JUMP JUMPDEST SWAP8 PUSH2 0x120 SWAP9 DUP10 MSTORE PUSH2 0x153 DUP3 MLOAD PUSH2 0x139 DUP2 PUSH2 0x36F JUMP JUMPDEST PUSH1 0x9 DUP2 MSTORE PUSH9 0x1CD95CDCDA5BDB9259 PUSH1 0xBA SHL DUP7 DUP3 ADD MSTORE PUSH2 0x3D2 JUMP JUMPDEST SWAP3 PUSH2 0x140 SWAP4 DUP5 MSTORE PUSH2 0x1C0 SWAP8 DUP9 MSTORE PUSH2 0x1E0 SWAP9 DUP10 MSTORE PUSH4 0xFFFFFFFF DUP1 SWAP7 AND SWAP5 PUSH4 0x784CE00 DUP7 GT PUSH2 0x35C JUMPI DUP7 DUP9 AND SWAP6 PUSH3 0xED4E00 DUP8 GT PUSH2 0x34D JUMPI TIMESTAMP ADD SWAP1 DUP2 TIMESTAMP GT PUSH2 0x324 JUMPI DUP8 DUP3 GT PUSH2 0x338 JUMPI POP DUP7 AND PUSH2 0x160 DUP2 DUP2 MSTORE PUSH2 0x1A0 SWAP9 DUP10 MSTORE SWAP6 ADD SWAP6 DUP7 GT PUSH2 0x324 JUMPI PUSH2 0x180 SWAP6 DUP7 MSTORE PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE MLOAD SWAP7 PUSH2 0x449F SWAP9 DUP10 PUSH2 0x492 DUP11 CODECOPY PUSH1 0x80 MLOAD DUP10 PUSH2 0x69A ADD MSTORE PUSH1 0xA0 MLOAD DUP10 PUSH2 0x2414 ADD MSTORE PUSH1 0xC0 MLOAD DUP10 PUSH2 0x3D76 ADD MSTORE PUSH1 0xE0 MLOAD DUP10 DUP2 DUP2 PUSH2 0x41FC ADD MSTORE PUSH2 0x425C ADD MSTORE MLOAD DUP9 PUSH2 0x41B1 ADD MSTORE MLOAD DUP8 POP POP MLOAD DUP7 POP POP MLOAD DUP6 DUP2 DUP2 PUSH2 0x18FB ADD MSTORE DUP2 DUP2 PUSH2 0x19C1 ADD MSTORE PUSH2 0x37D8 ADD MSTORE MLOAD DUP5 DUP2 DUP2 PUSH2 0x11DC ADD MSTORE DUP2 DUP2 PUSH2 0x19E8 ADD MSTORE PUSH2 0x3910 ADD MSTORE MLOAD DUP4 DUP2 DUP2 PUSH2 0xD3A ADD MSTORE DUP2 DUP2 PUSH2 0x10EA ADD MSTORE DUP2 DUP2 PUSH2 0x2660 ADD MSTORE DUP2 DUP2 PUSH2 0x3ABC ADD MSTORE PUSH2 0x3BD5 ADD MSTORE MLOAD DUP3 PUSH2 0x3580 ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0x331 ADD MSTORE DUP2 DUP2 PUSH2 0x384 ADD MSTORE DUP2 DUP2 PUSH2 0x3DB ADD MSTORE DUP2 DUP2 PUSH2 0x430 ADD MSTORE DUP2 DUP2 PUSH2 0x6D6 ADD MSTORE DUP2 DUP2 PUSH2 0x993 ADD MSTORE DUP2 DUP2 PUSH2 0xAE2 ADD MSTORE DUP2 DUP2 PUSH2 0xBA5 ADD MSTORE DUP2 DUP2 PUSH2 0xC40 ADD MSTORE DUP2 DUP2 PUSH2 0xC94 ADD MSTORE DUP2 DUP2 PUSH2 0xE01 ADD MSTORE DUP2 DUP2 PUSH2 0x1322 ADD MSTORE DUP2 DUP2 PUSH2 0x1372 ADD MSTORE DUP2 DUP2 PUSH2 0x1509 ADD MSTORE DUP2 DUP2 PUSH2 0x1575 ADD MSTORE DUP2 DUP2 PUSH2 0x1656 ADD MSTORE DUP2 DUP2 PUSH2 0x1983 ADD MSTORE DUP2 DUP2 PUSH2 0x1A77 ADD MSTORE DUP2 DUP2 PUSH2 0x1B24 ADD MSTORE DUP2 DUP2 PUSH2 0x1E64 ADD MSTORE DUP2 DUP2 PUSH2 0x1F1E ADD MSTORE DUP2 DUP2 PUSH2 0x236F ADD MSTORE DUP2 DUP2 PUSH2 0x23CA ADD MSTORE DUP2 DUP2 PUSH2 0x24C1 ADD MSTORE DUP2 DUP2 PUSH2 0x2558 ADD MSTORE DUP2 DUP2 PUSH2 0x2B26 ADD MSTORE DUP2 DUP2 PUSH2 0x2B6F ADD MSTORE DUP2 DUP2 PUSH2 0x2BEA ADD MSTORE PUSH2 0x2CA1 ADD MSTORE RETURN JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x6DFCC65 PUSH1 0xE4 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH4 0x4F5277F7 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0xCC0E8FE5 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0x38A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x38A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x36B JUMPI JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x3DF DUP3 PUSH2 0x36F JUMP JUMPDEST PUSH1 0xC DUP3 MSTORE PUSH2 0x460 PUSH1 0x3A PUSH1 0x20 DUP5 ADD PUSH12 0x5661756C7453746F72616765 PUSH1 0xA0 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP3 DUP3 DUP5 ADD SWAP8 PUSH32 0x62616C616E6365722D6C6162732E76332E73746F726167652E00000000000000 DUP10 MSTORE MLOAD DUP1 SWAP2 PUSH1 0x39 DUP7 ADD MCOPY DUP4 ADD SWAP1 PUSH1 0x17 PUSH1 0xF9 SHL PUSH1 0x39 DUP4 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 SWAP2 ADD DUP6 DUP4 ADD MCOPY ADD PUSH0 DUP4 DUP3 ADD MSTORE SUB PUSH1 0x1A DUP2 ADD DUP5 MSTORE ADD DUP3 PUSH2 0x39E JUMP JUMPDEST MLOAD SWAP1 KECCAK256 PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x324 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP3 MSTORE PUSH2 0x486 DUP3 PUSH2 0x36F JUMP JUMPDEST SWAP1 MLOAD SWAP1 KECCAK256 PUSH1 0xFF NOT AND SWAP1 JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x9F JUMPI JUMPDEST CALLDATASIZE ISZERO PUSH2 0x77 JUMPI CALLVALUE PUSH2 0x77 JUMPI PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F7420696D706C656D656E7465640000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH32 0xF223889600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x387587D EQ PUSH2 0x2C81 JUMPI DUP1 PUSH4 0x58A628F EQ PUSH2 0x2BBF JUMPI DUP1 PUSH4 0x71D8A02 EQ PUSH2 0x2BA7 JUMPI DUP1 PUSH4 0x98401F5 EQ PUSH2 0x2B5A JUMPI DUP1 PUSH4 0xB7562BE EQ PUSH2 0x2B11 JUMPI DUP1 PUSH4 0xB9DF1F6 EQ PUSH2 0x2AF0 JUMPI DUP1 PUSH4 0x1558356E EQ PUSH2 0x2A90 JUMPI DUP1 PUSH4 0x16DF26CB EQ PUSH2 0x29DC JUMPI DUP1 PUSH4 0x1F568EA3 EQ PUSH2 0x2684 JUMPI DUP1 PUSH4 0x20C1FB7A EQ PUSH2 0x2643 JUMPI DUP1 PUSH4 0x26A8A991 EQ PUSH2 0x2626 JUMPI DUP1 PUSH4 0x27521D0C EQ PUSH2 0x2600 JUMPI DUP1 PUSH4 0x2D771389 EQ PUSH2 0x252D JUMPI DUP1 PUSH4 0x2E42F4D5 EQ PUSH2 0x2511 JUMPI DUP1 PUSH4 0x4021FE0F EQ PUSH2 0x2496 JUMPI DUP1 PUSH4 0x52B9E33D EQ PUSH2 0x2437 JUMPI DUP1 PUSH4 0x53956AA2 EQ PUSH2 0x23FC JUMPI DUP1 PUSH4 0x55ACA1EC EQ PUSH2 0x23A8 JUMPI DUP1 PUSH4 0x55CBA7FE EQ PUSH2 0x2359 JUMPI DUP1 PUSH4 0x5DCACD64 EQ PUSH2 0x1F07 JUMPI DUP1 PUSH4 0x5E0B06F4 EQ PUSH2 0x1E41 JUMPI DUP1 PUSH4 0x653EB3B0 EQ PUSH2 0x1B0B JUMPI DUP1 PUSH4 0x6B230291 EQ PUSH2 0x1AF3 JUMPI DUP1 PUSH4 0x7578ABB9 EQ PUSH2 0x1AD6 JUMPI DUP1 PUSH4 0x821440F2 EQ PUSH2 0x1A61 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x1A0F JUMPI DUP1 PUSH4 0x85C8C015 EQ PUSH2 0x196D JUMPI DUP1 PUSH4 0x88E5101A EQ PUSH2 0x191F JUMPI DUP1 PUSH4 0x8A8D123A EQ PUSH2 0x18DE JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0x1638 JUMPI DUP1 PUSH4 0x9260D920 EQ PUSH2 0x15B7 JUMPI DUP1 PUSH4 0x9385E39A EQ PUSH2 0x153D JUMPI DUP1 PUSH4 0x9E0879C2 EQ PUSH2 0x14F3 JUMPI DUP1 PUSH4 0xA8175B27 EQ PUSH2 0x14D7 JUMPI DUP1 PUSH4 0xB61398CD EQ PUSH2 0x13F3 JUMPI DUP1 PUSH4 0xB9212B49 EQ PUSH2 0x135C JUMPI DUP1 PUSH4 0xBFFB78B2 EQ PUSH2 0x1300 JUMPI DUP1 PUSH4 0xC7B3B3A9 EQ PUSH2 0x1219 JUMPI DUP1 PUSH4 0xCC671FF7 EQ PUSH2 0x1200 JUMPI DUP1 PUSH4 0xCD51C12F EQ PUSH2 0x11BF JUMPI DUP1 PUSH4 0xD0965A6B EQ PUSH2 0x11A1 JUMPI DUP1 PUSH4 0xD15126BA EQ PUSH2 0xDDF JUMPI DUP1 PUSH4 0xD2C725E0 EQ PUSH2 0xDA0 JUMPI DUP1 PUSH4 0xDC3F574E EQ PUSH2 0xC74 JUMPI DUP1 PUSH4 0xDE1A36A6 EQ PUSH2 0xC2A JUMPI DUP1 PUSH4 0xE085C5A8 EQ PUSH2 0xB8F JUMPI DUP1 PUSH4 0xE0D55605 EQ PUSH2 0xACC JUMPI DUP1 PUSH4 0xE253670A EQ PUSH2 0x970 JUMPI DUP1 PUSH4 0xE2A92B1A EQ PUSH2 0x6BD JUMPI DUP1 PUSH4 0xE2CB0BA0 EQ PUSH2 0x682 JUMPI DUP1 PUSH4 0xE8338894 EQ PUSH2 0x66A JUMPI DUP1 PUSH4 0xE99AC9A3 EQ PUSH2 0x648 JUMPI DUP1 PUSH4 0xEBC7955C EQ PUSH2 0x410 JUMPI DUP1 PUSH4 0xF21C38CD EQ PUSH2 0x3B9 JUMPI DUP1 PUSH4 0xF2784E07 EQ PUSH2 0x358 JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x312 JUMPI POP PUSH2 0xE JUMP JUMPDEST CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x40 PUSH1 0x20 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x37F PUSH2 0x2CE4 JUMP JUMPDEST PUSH2 0x3A8 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST AND DUP2 MSTORE PUSH1 0xD DUP4 MSTORE KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x40D PUSH2 0x3D6 PUSH2 0x2CE4 JUMP JUMPDEST PUSH2 0x3FF PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0x408 DUP2 PUSH2 0x3D29 JUMP JUMPDEST PUSH2 0x3AEF JUMP JUMPDEST DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x1F SWAP1 PUSH2 0x42D PUSH2 0x2CE4 JUMP JUMPDEST SWAP1 PUSH32 0x0 SWAP2 PUSH2 0x459 DUP4 PUSH2 0x3678 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x5DCACD6400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND PUSH1 0x24 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLDATALOAD PUSH1 0x44 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLDATALOAD PUSH1 0x64 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLDATALOAD PUSH1 0x84 DUP4 ADD MSTORE CALLER PUSH1 0xA4 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MSTORE SWAP2 SWAP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP3 DUP5 SWAP3 SWAP1 SWAP2 SWAP1 PUSH2 0x4F4 PUSH1 0xC4 DUP3 PUSH2 0x2DFB JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x44 DUP10 DUP9 PUSH1 0x40 MLOAD SWAP13 DUP14 SWAP9 DUP10 SWAP8 DUP9 SWAP5 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP7 MSTORE PUSH1 0x4 DUP7 ADD MSTORE MLOAD DUP1 SWAP2 DUP2 PUSH1 0x24 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY DUP7 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP4 AND GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x63D JUMPI DUP3 SWAP5 PUSH2 0x580 JUMPI JUMPDEST PUSH1 0x40 DUP5 PUSH2 0x574 DUP8 DUP3 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x3662 JUMP JUMPDEST SWAP1 SWAP2 DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE RETURN JUMPDEST SWAP1 SWAP2 SWAP4 POP RETURNDATASIZE DUP1 DUP6 DUP4 RETURNDATACOPY PUSH2 0x593 DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST DUP2 ADD DUP4 DUP3 DUP3 SUB SLT PUSH2 0x604 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP3 GT PUSH2 0x639 JUMPI ADD SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x635 JUMPI DUP2 MLOAD SWAP3 DUP4 GT PUSH2 0x608 JUMPI PUSH2 0x5DB DUP6 PUSH1 0x40 MLOAD SWAP6 PUSH1 0x1F DUP7 ADD AND ADD DUP6 PUSH2 0x2DFB JUMP JUMPDEST DUP3 DUP5 MSTORE DUP5 DUP4 DUP4 ADD ADD GT PUSH2 0x604 JUMPI SWAP4 DUP4 DUP3 PUSH2 0x574 SWAP5 SWAP4 DUP3 PUSH1 0x40 SWAP9 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP3 PUSH0 PUSH2 0x55F JUMP JUMPDEST DUP5 DUP1 REVERT JUMPDEST PUSH1 0x24 DUP7 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP7 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x40D PUSH2 0x665 PUSH2 0x2CE4 JUMP JUMPDEST PUSH2 0x3F74 JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH2 0x40D PUSH2 0x67C CALLDATASIZE PUSH2 0x2D36 JUMP JUMPDEST SWAP2 PUSH2 0x3E52 JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH2 0x6CC CALLDATASIZE PUSH2 0x2CFA JUMP JUMPDEST PUSH2 0x6FA SWAP6 SWAP2 SWAP3 SWAP5 SWAP6 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0x702 PUSH2 0x3D74 JUMP JUMPDEST PUSH2 0x70A PUSH2 0x3F06 JUMP JUMPDEST PUSH2 0x713 DUP7 PUSH2 0x3DC5 JUMP JUMPDEST PUSH2 0x71B PUSH2 0x3C08 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP8 AND SWAP2 PUSH1 0x40 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP6 DUP7 DUP3 PUSH1 0x4 DUP2 DUP9 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x965 JUMPI DUP7 SWAP3 PUSH2 0x936 JUMPI JUMPDEST POP DUP5 DUP7 MSTORE PUSH1 0xE DUP8 MSTORE DUP1 PUSH1 0x40 DUP8 KECCAK256 SLOAD AND SWAP2 AND DUP1 SWAP2 SUB PUSH2 0x906 JUMPI DUP4 DUP6 MSTORE PUSH1 0xB DUP7 MSTORE PUSH1 0x40 DUP6 KECCAK256 SLOAD SWAP8 PUSH1 0xD DUP8 MSTORE PUSH1 0x40 DUP7 KECCAK256 SLOAD SWAP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP2 PUSH2 0x7C4 PUSH2 0x7B8 DUP6 DUP9 DUP7 PUSH2 0x40C9 JUMP JUMPDEST SWAP12 PUSH1 0x80 SHR SWAP5 DUP8 DUP7 PUSH2 0x40C9 JUMP JUMPDEST SWAP10 DUP1 DUP13 GT PUSH2 0x8D2 JUMPI POP DUP1 DUP11 GT PUSH2 0x89E JUMPI POP SWAP4 PUSH2 0x86F SWAP4 PUSH2 0x83F PUSH1 0x40 SWAP13 SWAP5 PUSH2 0x839 DUP13 PUSH2 0x833 DUP16 PUSH2 0x851 SWAP9 PUSH2 0x82E DUP15 PUSH2 0x825 PUSH32 0x75C4DC5F23640EEBA7D404D9165F515FC3D9E23A5C8B6E2D09B4B9DA56FF00A9 SWAP16 PUSH2 0x81F DUP7 PUSH2 0x414C JUMP JUMPDEST SWAP1 PUSH2 0x41A1 JUMP JUMPDEST PUSH2 0x81F DUP7 PUSH2 0x414C JUMP JUMPDEST PUSH2 0x2EAE JUMP JUMPDEST SWAP3 PUSH2 0x2EAE JUMP JUMPDEST SWAP1 PUSH2 0x3C5D JUMP JUMPDEST SWAP4 DUP8 DUP10 MSTORE PUSH1 0xB DUP11 MSTORE DUP5 DUP14 DUP11 KECCAK256 SSTORE PUSH2 0x3FCF JUMP JUMPDEST DUP9 MLOAD SWAP2 DUP3 SWAP2 DUP9 DUP11 DUP5 PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 PUSH1 0x60 DUP3 ADD SWAP6 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE RETURN JUMPDEST DUP8 PUSH1 0x64 SWAP2 DUP12 DUP10 PUSH32 0x8EDA85E400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE REVERT JUMPDEST DUP9 PUSH1 0x64 SWAP2 DUP14 DUP6 PUSH32 0x8EDA85E400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE REVERT JUMPDEST DUP5 PUSH1 0x44 SWAP2 DUP6 PUSH32 0x36B18D0900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE REVERT JUMPDEST PUSH2 0x957 SWAP2 SWAP3 POP DUP8 RETURNDATASIZE DUP10 GT PUSH2 0x95E JUMPI JUMPDEST PUSH2 0x94F DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2E3C JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x767 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x945 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP9 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x98A PUSH2 0x2CE4 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x9B7 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0x9C0 DUP2 PUSH2 0x3D29 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP3 GT PUSH2 0xAA4 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH1 0xA SLOAD AND CALLER SUB PUSH2 0xA7C JUMPI AND SWAP1 DUP2 DUP4 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP4 KECCAK256 SLOAD PUSH8 0xDE0B5CAD2BEF000 DUP3 GT PUSH2 0xA54 JUMPI PUSH32 0x606EB97D83164BD6B200D638CD49C14C65D94D4F2C674CFD85E24E0E202C3CA5 SWAP2 PUSH2 0xA3F PUSH1 0x20 SWAP3 PUSH2 0xA30 PUSH1 0x42 SWAP1 JUMP JUMPDEST SWAP1 PUSH5 0x174876E800 DUP5 DIV SWAP1 PUSH2 0x42D5 JUMP JUMPDEST DUP5 DUP7 MSTORE DUP6 DUP4 MSTORE PUSH1 0x40 DUP7 KECCAK256 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 DUP1 RETURN JUMPDEST PUSH1 0x4 DUP5 PUSH32 0x746E594000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP5 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP4 PUSH32 0x4C69AC5D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0xB06 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0xB0E PUSH2 0x36B1 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x9 SLOAD AND PUSH2 0xB67 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE PUSH1 0x7 SLOAD AND PUSH1 0x7 SSTORE PUSH32 0x91D7478835F2B5ADC315F5AAD920F4A7F0A02F7FDDF3042D17B2C80168EA17F5 DUP2 DUP1 LOG1 DUP1 RETURN JUMPDEST DUP1 PUSH32 0x69F8CBC00000000000000000000000000000000000000000000000000000000 PUSH1 0x4 SWAP3 MSTORE REVERT JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0xBC9 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0xBD1 PUSH2 0x36B1 JUMP JUMPDEST PUSH1 0x4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB PUSH1 0x7 SLOAD AND OR PUSH1 0x7 SSTORE PUSH32 0x300C7CA619EB846386AA0A6E5916AC2A41406448B0A2E99BA9CCAFEB899015A5 PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE LOG1 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0xC64 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0xC6C PUSH2 0x36B1 JUMP JUMPDEST PUSH2 0x40D PUSH2 0x4078 JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0xC8E PUSH2 0x2CE4 JUMP JUMPDEST SWAP1 PUSH2 0xCB8 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0xCC1 DUP3 PUSH2 0x3D29 JUMP JUMPDEST PUSH2 0xCCA DUP3 PUSH2 0x3947 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP2 MSTORE DUP1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 PUSH1 0x1 DUP4 PUSH1 0x2 SHR AND PUSH4 0xFFFFFFFF DUP1 SWAP5 PUSH2 0xCFE PUSH2 0xCF9 PUSH1 0x5A SWAP1 JUMP JUMPDEST PUSH2 0x2E73 JUMP JUMPDEST SHR AND DUP2 PUSH2 0xD35 JUMPI JUMPDEST POP PUSH2 0x40D SWAP3 SWAP4 POP ISZERO DUP1 PUSH2 0xD26 JUMPI JUMPDEST ISZERO PUSH2 0x3CBF JUMPI PUSH2 0xD21 PUSH2 0x36B1 JUMP JUMPDEST PUSH2 0x3CBF JUMP JUMPDEST POP PUSH2 0xD2F PUSH2 0x3909 JUMP JUMPDEST ISZERO PUSH2 0xD14 JUMP JUMPDEST SWAP1 POP DUP4 PUSH32 0x0 AND ADD SWAP3 DUP1 DUP5 GT PUSH2 0xD73 JUMPI PUSH2 0x40D SWAP3 SWAP4 AND TIMESTAMP GT ISZERO DUP4 SWAP3 PUSH2 0xD06 JUMP JUMPDEST PUSH1 0x24 DUP4 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE REVERT JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x20 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0xDF9 PUSH2 0x2CE4 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0xE25 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0xE2E DUP3 PUSH2 0x3D29 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP3 DUP4 DUP6 MSTORE PUSH1 0x20 SWAP2 PUSH1 0x1 DUP4 MSTORE PUSH1 0x1 PUSH1 0x40 DUP8 KECCAK256 ADD SLOAD AND SWAP1 DUP2 ISZERO PUSH0 EQ PUSH2 0x1172 JUMPI PUSH2 0xE60 SWAP2 POP PUSH2 0x431C JUMP JUMPDEST PUSH2 0xE68 PUSH2 0x3909 JUMP JUMPDEST PUSH2 0x114A JUMPI DUP3 DUP5 MSTORE DUP4 DUP2 MSTORE PUSH1 0x40 DUP5 KECCAK256 SLOAD PUSH1 0x1 DUP2 PUSH1 0x2 SHR AND SWAP1 PUSH4 0xFFFFFFFF DUP1 SWAP2 PUSH2 0xE91 PUSH2 0xCF9 PUSH1 0x5A SWAP1 JUMP JUMPDEST SHR AND DUP3 PUSH2 0x10E4 JUMPI JUMPDEST POP POP PUSH2 0x10B8 JUMPI PUSH1 0x40 MLOAD PUSH32 0xCE20ECE700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP2 PUSH1 0x4 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1058 JUMPI DUP6 SWAP2 PUSH2 0x108B JUMPI JUMPDEST POP DUP3 LT PUSH2 0x1063 JUMPI PUSH1 0x40 MLOAD PUSH32 0x654CF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP2 PUSH1 0x4 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1058 JUMPI DUP6 SWAP2 PUSH2 0x1027 JUMPI JUMPDEST POP DUP3 GT PUSH2 0xFFF JUMPI DUP3 DUP5 MSTORE DUP4 DUP2 MSTORE PUSH1 0x40 DUP5 KECCAK256 SLOAD SWAP2 PUSH8 0xDE0B5CAD2BEF000 DUP2 GT PUSH2 0xFD7 JUMPI PUSH5 0x174876E800 DUP2 DIV SWAP3 DUP4 PUSH1 0x18 SHR PUSH2 0xFAF JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC000003FFFF PUSH32 0x89D41522342FABAC1471CA6073A5623E5CAF367B03CA6E9A001478D0CF8BE4A1 SWAP5 DUP7 DUP9 MSTORE DUP8 DUP6 MSTORE PUSH1 0x12 SHL SWAP2 AND OR PUSH1 0x40 DUP7 KECCAK256 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 DUP1 RETURN JUMPDEST PUSH32 0xE4337C0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x4 DUP6 PUSH32 0x746E594000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP5 PUSH32 0x7F47834B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST SWAP1 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1051 JUMPI JUMPDEST PUSH2 0x103E DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x104D JUMPI MLOAD PUSH0 PUSH2 0xF1E JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x1034 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP8 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP5 PUSH32 0xBFB2068800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST SWAP1 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x10B1 JUMPI JUMPDEST PUSH2 0x10A2 DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x104D JUMPI MLOAD PUSH0 PUSH2 0xEDB JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1098 JUMP JUMPDEST PUSH1 0x24 DUP5 DUP5 PUSH32 0xD971F59700000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 MSTORE REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP PUSH32 0x0 AND ADD DUP2 DUP2 GT PUSH2 0x111D JUMPI AND TIMESTAMP GT ISZERO PUSH0 DUP1 PUSH2 0xE99 JUMP JUMPDEST PUSH1 0x24 DUP7 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP5 PUSH32 0xDA9F8B3400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP CALLER EQ PUSH2 0xE60 JUMPI PUSH1 0x4 DUP5 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH3 0xF4240 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x40D PUSH2 0x387F JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH2 0x129A PUSH1 0x40 PUSH2 0x122D CALLDATASIZE PUSH2 0x2CFA JUMP JUMPDEST SWAP1 PUSH2 0x123C SWAP7 SWAP3 SWAP7 SWAP5 SWAP4 SWAP5 PUSH2 0x3C08 JUMP JUMPDEST DUP6 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP6 PUSH32 0x5DCACD6400000000000000000000000000000000000000000000000000000000 DUP8 MSTORE PUSH1 0x4 DUP8 ADD SWAP4 PUSH1 0x80 SWAP4 SWAP7 SWAP6 SWAP2 SWAP3 SWAP7 PUSH1 0xA0 DUP7 ADD SWAP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP6 AND DUP8 MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x60 DUP6 ADD MSTORE AND SWAP2 ADD MSTORE JUMP JUMPDEST SUB DUP2 DUP6 ADDRESS GAS CALL DUP1 ISZERO PUSH2 0x63D JUMPI PUSH2 0x12D2 JUMPI JUMPDEST POP DUP1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP1 RETURN JUMPDEST PUSH2 0x12F3 SWAP1 PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x12F9 JUMPI JUMPDEST PUSH2 0x12EB DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3662 JUMP JUMPDEST POP PUSH2 0x12AB JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x12E1 JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x40D PUSH2 0x131D PUSH2 0x2CE4 JUMP JUMPDEST PUSH2 0x1346 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0x134F DUP2 PUSH2 0x3D29 JUMP JUMPDEST PUSH2 0x1357 PUSH2 0x36B1 JUMP JUMPDEST PUSH2 0x2F12 JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x1396 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0x139E PUSH2 0x36B1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB PUSH1 0x7 SLOAD AND PUSH1 0x7 SSTORE PUSH32 0x300C7CA619EB846386AA0A6E5916AC2A41406448B0A2E99BA9CCAFEB899015A5 PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE LOG1 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH2 0x1475 PUSH1 0x20 PUSH2 0x1407 CALLDATASIZE PUSH2 0x2CFA JUMP JUMPDEST SWAP1 PUSH2 0x1416 SWAP7 SWAP3 SWAP7 SWAP5 SWAP4 SWAP5 PUSH2 0x3C08 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP6 PUSH32 0x653EB3B000000000000000000000000000000000000000000000000000000000 DUP8 MSTORE PUSH1 0x4 DUP8 ADD SWAP4 PUSH1 0x80 SWAP4 SWAP7 SWAP6 SWAP2 SWAP3 SWAP7 PUSH1 0xA0 DUP7 ADD SWAP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP6 AND DUP8 MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x60 DUP6 ADD MSTORE AND SWAP2 ADD MSTORE JUMP JUMPDEST SUB DUP2 DUP6 ADDRESS GAS CALL DUP1 ISZERO PUSH2 0x63D JUMPI PUSH2 0x14AC JUMPI POP DUP1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP1 RETURN JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x14D0 JUMPI JUMPDEST PUSH2 0x14C2 DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x104D JUMPI PUSH0 PUSH2 0x12AB JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x14B8 JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x2 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x152D PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0x1535 PUSH2 0x36B1 JUMP JUMPDEST PUSH2 0x40D PUSH2 0x379C JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x1557 PUSH2 0x2CE4 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND DUP1 SWAP5 SUB PUSH2 0x104D JUMPI PUSH1 0x40 SWAP3 PUSH2 0x1599 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST AND DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH2 0x129A PUSH1 0x40 PUSH2 0x15CB CALLDATASIZE PUSH2 0x2CFA JUMP JUMPDEST SWAP1 PUSH2 0x15DA SWAP7 SWAP3 SWAP7 SWAP5 SWAP4 SWAP5 PUSH2 0x3C08 JUMP JUMPDEST DUP6 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP6 PUSH32 0xE2A92B1A00000000000000000000000000000000000000000000000000000000 DUP8 MSTORE PUSH1 0x4 DUP8 ADD SWAP4 PUSH1 0x80 SWAP4 SWAP7 SWAP6 SWAP2 SWAP3 SWAP7 PUSH1 0xA0 DUP7 ADD SWAP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP6 AND DUP8 MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x60 DUP6 ADD MSTORE AND SWAP2 ADD MSTORE JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x18DA JUMPI PUSH2 0x1653 PUSH2 0x2CE4 JUMP JUMPDEST SWAP1 PUSH32 0x0 PUSH2 0x167E DUP2 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0x1686 PUSH2 0x3D74 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 PUSH1 0xA SLOAD AND CALLER SUB PUSH2 0x18B2 JUMPI SWAP4 DUP1 DUP5 PUSH1 0x24 DUP8 PUSH2 0x16AA DUP4 SWAP10 PUSH2 0x3D29 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP8 DUP9 SWAP4 DUP5 SWAP3 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP5 MSTORE AND SWAP7 DUP8 PUSH1 0x4 DUP5 ADD MSTORE AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x18A5 JUMPI DUP2 SWAP5 PUSH2 0x1809 JUMPI JUMPDEST POP DUP4 MLOAD SWAP3 PUSH2 0x1704 PUSH2 0x16FE DUP6 PUSH2 0x35D2 JUMP JUMPDEST SWAP5 PUSH2 0x35D2 JUMP JUMPDEST SWAP1 DUP3 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x17DB JUMPI DUP1 DUP9 PUSH2 0x171E PUSH1 0x1 SWAP4 DUP11 PUSH2 0x3621 JUMP JUMPDEST MLOAD AND DUP7 DUP7 MSTORE PUSH1 0x6 SWAP1 DUP2 DUP6 MSTORE PUSH1 0x40 DUP8 KECCAK256 DUP2 PUSH0 MSTORE DUP6 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP1 PUSH1 0x80 SHR PUSH2 0x1756 DUP7 DUP11 PUSH2 0x3621 JUMP JUMPDEST MSTORE AND PUSH2 0x1762 DUP5 DUP12 PUSH2 0x3621 JUMP JUMPDEST MSTORE PUSH2 0x176D DUP4 DUP11 PUSH2 0x3621 JUMP JUMPDEST MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x17C8 JUMPI JUMPDEST PUSH2 0x1784 JUMPI JUMPDEST POP POP ADD PUSH2 0x1707 JUMP JUMPDEST PUSH2 0x17C1 SWAP2 DUP9 DUP9 MSTORE DUP6 MSTORE PUSH1 0x40 DUP8 KECCAK256 DUP2 PUSH0 MSTORE DUP6 MSTORE DUP7 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH2 0x17BB PUSH2 0x17A9 DUP5 DUP12 PUSH2 0x3621 JUMP JUMPDEST MLOAD PUSH2 0x17B4 DUP6 DUP10 PUSH2 0x3621 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x2EAE JUMP JUMPDEST SWAP1 PUSH2 0x3E12 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x177C JUMP JUMPDEST POP PUSH2 0x17D3 DUP4 DUP8 PUSH2 0x3621 JUMP JUMPDEST MLOAD ISZERO ISZERO PUSH2 0x1777 JUMP JUMPDEST PUSH2 0x17F8 DUP7 PUSH2 0x1805 DUP5 DUP7 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP5 PUSH1 0x40 DUP7 MSTORE PUSH1 0x40 DUP7 ADD SWAP1 PUSH2 0x2D6B JUMP JUMPDEST SWAP2 DUP5 DUP4 SUB SWAP1 DUP6 ADD MSTORE PUSH2 0x2D6B JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST SWAP1 SWAP4 POP RETURNDATASIZE DUP1 DUP6 DUP4 RETURNDATACOPY PUSH2 0x181B DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST DUP2 ADD SWAP1 DUP4 DUP2 DUP4 SUB SLT PUSH2 0x604 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x635 JUMPI ADD SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x604 JUMPI DUP2 MLOAD PUSH2 0x1851 DUP2 PUSH2 0x35BA JUMP JUMPDEST SWAP3 PUSH2 0x185F PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x2DFB JUMP JUMPDEST DUP2 DUP5 MSTORE DUP6 DUP1 DUP6 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x639 JUMPI DUP6 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1889 JUMPI POP POP POP SWAP3 PUSH0 PUSH2 0x16EE JUMP JUMPDEST DUP2 MLOAD DUP9 DUP2 AND DUP2 SUB PUSH2 0x18A1 JUMPI DUP2 MSTORE SWAP1 DUP6 ADD SWAP1 DUP6 ADD PUSH2 0x1878 JUMP JUMPDEST DUP8 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP6 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH8 0xDE0B6B3A7640000 PUSH1 0x4 CALLDATALOAD GT PUSH2 0x1945 JUMPI DUP1 RETURN JUMPDEST DUP1 PUSH32 0x4C69AC5D00000000000000000000000000000000000000000000000000000000 PUSH1 0x4 SWAP3 MSTORE REVERT JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x19A7 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x19B1 PUSH2 0x3909 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH4 0xFFFFFFFF DUP1 PUSH32 0x0 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x0 AND PUSH1 0x40 DUP3 ADD MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x355 JUMPI PUSH1 0x20 PUSH2 0x1A59 DUP4 PUSH2 0x3555 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x1A9B PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0x1AA3 PUSH2 0x36B1 JUMP JUMPDEST PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x9 SLOAD AND OR PUSH1 0x9 SSTORE PUSH2 0x40D PUSH2 0x4078 JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x40D PUSH2 0x1357 PUSH2 0x2CE4 JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH2 0x40D PUSH2 0x1B05 CALLDATASIZE PUSH2 0x2D36 JUMP JUMPDEST SWAP2 PUSH2 0x3FCF JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH2 0x1B1A CALLDATASIZE PUSH2 0x2CFA JUMP JUMPDEST SWAP5 SWAP3 PUSH2 0x1B48 SWAP3 SWAP2 SWAP3 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0x1B50 PUSH2 0x3D74 JUMP JUMPDEST PUSH2 0x1B58 PUSH2 0x3F06 JUMP JUMPDEST PUSH2 0x1B60 PUSH2 0x3C08 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 DUP7 AND SWAP4 DUP5 DUP7 MSTORE PUSH1 0x20 SWAP8 PUSH1 0xE DUP10 MSTORE DUP1 PUSH1 0x40 DUP9 KECCAK256 SLOAD AND PUSH2 0x1E15 JUMPI PUSH1 0x40 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP10 DUP2 PUSH1 0x4 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1DC1 JUMPI DUP9 SWAP2 PUSH2 0x1DF8 JUMPI JUMPDEST POP AND DUP1 ISZERO PUSH2 0x1DCC JUMPI PUSH2 0x1C06 SWAP1 DUP7 DUP9 MSTORE PUSH1 0xE DUP11 MSTORE PUSH1 0x40 DUP9 KECCAK256 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH2 0x81F DUP6 PUSH2 0x414C JUMP JUMPDEST PUSH2 0x1C18 PUSH2 0x1C12 DUP6 PUSH2 0x414C JUMP JUMPDEST DUP7 PUSH2 0x41A1 JUMP JUMPDEST PUSH2 0x1C22 DUP5 DUP5 PUSH2 0x3C5D JUMP JUMPDEST SWAP2 DUP6 DUP8 MSTORE PUSH1 0xB DUP10 MSTORE DUP3 PUSH1 0x40 DUP9 KECCAK256 SSTORE PUSH1 0x40 MLOAD PUSH32 0x4CDAD50600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP6 PUSH1 0x4 DUP3 ADD MSTORE DUP10 DUP2 PUSH1 0x24 DUP2 DUP11 GAS STATICCALL DUP1 ISZERO PUSH2 0x1DC1 JUMPI DUP6 SWAP1 DUP10 SWAP1 PUSH2 0x1D90 JUMPI JUMPDEST PUSH2 0x1C7D SWAP3 POP PUSH2 0x2EAE JUMP JUMPDEST SWAP8 PUSH2 0x1C87 DUP10 PUSH2 0x3F3D JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8F0 DUP10 ADD SWAP9 DUP10 GT PUSH2 0x1D63 JUMPI PUSH2 0x1CC5 SWAP2 DUP2 PUSH2 0x1CC0 DUP12 SWAP4 PUSH2 0x3F74 JUMP JUMPDEST PUSH2 0x3FCF JUMP JUMPDEST DUP1 DUP8 LT PUSH2 0x1D33 JUMPI POP PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x75C4DC5F23640EEBA7D404D9165F515FC3D9E23A5C8B6E2D09B4B9DA56FF00A9 SWAP1 PUSH1 0x60 SWAP1 LOG2 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP6 PUSH1 0x44 SWAP2 DUP9 PUSH32 0xDA0CB07E00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE REVERT JUMPDEST PUSH1 0x24 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE REVERT JUMPDEST POP POP DUP10 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1DBA JUMPI JUMPDEST PUSH2 0x1DA7 DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x104D JUMPI DUP5 PUSH2 0x1C7D SWAP2 MLOAD PUSH2 0x1C73 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1D9D JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP11 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x24 DUP8 DUP8 PUSH32 0xD407F9C500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH2 0x1E0F SWAP2 POP DUP11 RETURNDATASIZE DUP13 GT PUSH2 0x95E JUMPI PUSH2 0x94F DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST PUSH0 PUSH2 0x1BBE JUMP JUMPDEST PUSH1 0x24 DUP8 DUP8 PUSH32 0x1690FA4000000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 MSTORE REVERT JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x1E5B PUSH2 0x2CE4 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1E88 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0x1E91 DUP2 PUSH2 0x3D29 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP3 GT PUSH2 0xAA4 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH1 0xA SLOAD AND CALLER SUB PUSH2 0xA7C JUMPI AND SWAP1 DUP2 DUP4 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP4 KECCAK256 SLOAD PUSH8 0xDE0B5CAD2BEF000 DUP3 GT PUSH2 0xA54 JUMPI DUP2 PUSH2 0xA3F PUSH1 0x20 SWAP3 PUSH5 0x174876E800 PUSH32 0xE4D371097BEEA42453A37406E2AEF4C04F3C548F84AC50E72578662C0DCD7354 SWAP6 DIV SWAP1 PUSH2 0x4293 JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH2 0x1F16 CALLDATASIZE PUSH2 0x2CFA JUMP JUMPDEST SWAP5 SWAP1 SWAP3 SWAP2 SWAP4 SWAP5 PUSH32 0x0 PUSH2 0x1F46 DUP2 PUSH2 0x3678 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND CALLER SUB PUSH2 0x232D JUMPI PUSH2 0x1F5E PUSH2 0x3D74 JUMP JUMPDEST PUSH2 0x1F67 DUP8 PUSH2 0x3DC5 JUMP JUMPDEST ORIGIN ISZERO DUP1 DUP1 PUSH2 0x2320 JUMPI JUMPDEST PUSH2 0x22B8 JUMPI JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP4 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP5 GT PUSH2 0x2290 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP4 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP4 KECCAK256 SLOAD SWAP6 PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP5 KECCAK256 SLOAD SWAP7 PUSH2 0x1FFD PUSH2 0x1FEF DUP10 PUSH2 0x1FEA DUP10 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH2 0x2EBB JUMP JUMPDEST PUSH2 0x2ECE JUMP JUMPDEST SWAP9 PUSH2 0x1FEA DUP9 DUP5 PUSH1 0x80 SHR PUSH2 0x2EBB JUMP JUMPDEST SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND DUP7 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP8 KECCAK256 SLOAD AND SWAP3 DUP1 DUP11 LT PUSH2 0x225C JUMPI POP DUP1 DUP9 LT PUSH2 0x221F JUMPI POP PUSH2 0x207B PUSH2 0x209A SWAP2 PUSH2 0x203F DUP11 DUP6 PUSH2 0x3E12 JUMP JUMPDEST PUSH2 0x2052 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH2 0x3E12 JUMP JUMPDEST PUSH2 0x839 DUP10 PUSH2 0x2072 DUP13 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH2 0x2F05 JUMP JUMPDEST SWAP3 PUSH1 0x80 SHR PUSH2 0x2F05 JUMP JUMPDEST SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND DUP7 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE DUP7 PUSH1 0x40 DUP8 KECCAK256 SSTORE DUP5 DUP11 PUSH2 0x3E52 JUMP JUMPDEST DUP7 PUSH2 0x2185 JUMPI JUMPDEST POP DUP5 PUSH2 0x20FC JUMPI JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH32 0x44D97B36E99B590B3D2875AAD3B167B1D7FB1E063F3F1325A1EEAC76CAEE5113 SWAP2 POP PUSH1 0x60 SWAP1 LOG2 DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE ISZERO PUSH2 0x2181 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x64 DUP9 DUP6 DUP4 DUP2 SWAP6 DUP2 PUSH1 0x40 MLOAD SWAP9 DUP10 SWAP8 DUP9 SWAP7 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP9 MSTORE AND PUSH1 0x4 DUP8 ADD MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE DUP11 PUSH1 0x44 DUP6 ADD MSTORE AND GAS CALL DUP1 ISZERO PUSH2 0x63D JUMPI PUSH2 0x216D JUMPI JUMPDEST DUP1 PUSH2 0x20A7 JUMP JUMPDEST PUSH2 0x2177 DUP3 SWAP2 PUSH2 0x2D9E JUMP JUMPDEST PUSH2 0x355 JUMPI DUP1 PUSH2 0x2167 JUMP JUMPDEST DUP3 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EXTCODESIZE ISZERO PUSH2 0x221B JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE DUP7 PUSH1 0x44 DUP3 ADD MSTORE DUP4 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND GAS CALL DUP1 ISZERO PUSH2 0x2210 JUMPI SWAP1 DUP5 SWAP2 PUSH2 0x21FC JUMPI JUMPDEST POP PUSH2 0x20A0 JUMP JUMPDEST PUSH2 0x2205 SWAP1 PUSH2 0x2D9E JUMP JUMPDEST PUSH2 0x2181 JUMPI DUP3 PUSH0 PUSH2 0x21F6 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP7 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 DUP1 REVERT JUMPDEST DUP6 PUSH1 0x64 SWAP2 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 PUSH32 0x8EDA85E400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE REVERT JUMPDEST DUP7 PUSH1 0x64 SWAP2 DUP12 DUP7 PUSH32 0x8EDA85E400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP4 PUSH32 0x98C5DBD600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST ISZERO PUSH2 0x22F8 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP4 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x22F0 DUP6 DUP3 SLOAD PUSH2 0x2EAE JUMP JUMPDEST SWAP1 SSTORE PUSH0 PUSH2 0x1F75 JUMP JUMPDEST PUSH1 0x4 DUP4 PUSH32 0x67F84AB200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x7 SLOAD AND ISZERO PUSH2 0x1F70 JUMP JUMPDEST PUSH1 0x24 DUP4 PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 MSTORE REVERT JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x2393 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1 PUSH1 0x7 SLOAD PUSH1 0x2 SHR AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x40D PUSH2 0x23C5 PUSH2 0x2CE4 JUMP JUMPDEST PUSH2 0x23EE PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0x23F7 DUP2 PUSH2 0x3D29 JUMP JUMPDEST PUSH2 0x3994 JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x40D PUSH2 0x2454 PUSH2 0x2CE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP4 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP4 KECCAK256 CALLER PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH2 0x3AEF JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x40 DUP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x24BC PUSH2 0x2CE4 JUMP JUMPDEST PUSH2 0x24E5 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST AND DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE KECCAK256 SLOAD DUP2 MLOAD SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP3 MSTORE PUSH1 0x80 SHR PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x8 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP1 SWAP2 SUB PUSH2 0x18DA JUMPI PUSH2 0x257C PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0x2584 PUSH2 0x36B1 JUMP JUMPDEST PUSH2 0x258C PUSH2 0x3C08 JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0xA SLOAD AND OR PUSH1 0xA SSTORE PUSH32 0x280A60B1E63C1774D397D35CCE80EB80E51408EAD755FB446E6F744CE98E5DF0 DUP3 DUP1 LOG2 DUP1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x40D PUSH2 0x261D PUSH2 0x2CE4 JUMP JUMPDEST PUSH2 0xD21 DUP2 PUSH2 0x3947 JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH2 0x2710 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x269E PUSH2 0x2CE4 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP3 DUP4 DUP6 MSTORE PUSH1 0x20 SWAP2 PUSH1 0xB DUP4 MSTORE PUSH1 0x40 DUP7 KECCAK256 SLOAD SWAP2 DUP2 PUSH2 0x2872 JUMPI JUMPDEST POP DUP4 PUSH2 0x2709 JUMPI JUMPDEST SWAP1 PUSH2 0x839 PUSH1 0xB SWAP5 PUSH2 0x26F4 PUSH2 0x26FD SWAP5 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH2 0x2EAE JUMP JUMPDEST SWAP3 PUSH1 0x80 SHR PUSH2 0x2EAE JUMP JUMPDEST SWAP3 DUP5 MSTORE MSTORE PUSH1 0x40 DUP3 KECCAK256 SSTORE DUP1 RETURN JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP6 SWAP1 MSTORE DUP4 DUP2 PUSH1 0x64 DUP2 DUP11 DUP11 GAS CALL DUP1 ISZERO PUSH2 0x283A JUMPI PUSH2 0x2845 JUMPI JUMPDEST POP DUP5 DUP7 MSTORE PUSH1 0x8 DUP4 MSTORE PUSH1 0x40 DUP7 KECCAK256 PUSH2 0x276D DUP6 DUP3 SLOAD PUSH2 0x2EAE JUMP JUMPDEST SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x4CDAD50600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP5 PUSH1 0x4 DUP3 ADD MSTORE DUP4 DUP2 PUSH1 0x24 DUP2 DUP10 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x283A JUMPI DUP8 SWAP2 PUSH2 0x2806 JUMPI JUMPDEST POP PUSH1 0xB SWAP5 PUSH2 0x26F4 PUSH2 0x26FD SWAP5 SWAP4 PUSH2 0x839 SWAP4 DUP10 DUP12 MSTORE PUSH1 0xD DUP9 MSTORE PUSH1 0x40 DUP12 KECCAK256 PUSH2 0x27D7 DUP3 DUP3 SLOAD PUSH2 0x2EAE JUMP JUMPDEST SWAP1 SSTORE DUP10 DUP12 MSTORE PUSH1 0xC DUP9 MSTORE PUSH1 0x40 DUP12 KECCAK256 CALLER PUSH0 MSTORE DUP9 MSTORE PUSH2 0x27F8 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2EAE JUMP JUMPDEST SWAP1 SSTORE SWAP4 SWAP5 POP POP SWAP5 POP POP PUSH2 0x26CE JUMP JUMPDEST SWAP3 SWAP2 SWAP1 POP DUP4 DUP4 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2833 JUMPI JUMPDEST PUSH2 0x281F DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x104D JUMPI SWAP2 MLOAD SWAP1 SWAP2 SWAP1 PUSH1 0xB PUSH2 0x27B1 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2815 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP10 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x2864 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x286B JUMPI JUMPDEST PUSH2 0x285C DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2E5B JUMP JUMPDEST POP PUSH0 PUSH2 0x2756 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2852 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 DUP2 MSTORE DUP6 DUP2 PUSH1 0x4 DUP2 DUP12 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x29B4 JUMPI DUP10 SWAP2 PUSH2 0x29BF JUMPI JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 DUP7 SWAP1 DUP3 SWAP1 PUSH1 0x64 SWAP1 DUP3 SWAP1 DUP14 SWAP1 DUP9 AND GAS CALL DUP1 ISZERO PUSH2 0x29B4 JUMPI PUSH2 0x2997 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE DUP5 DUP2 PUSH1 0x4 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1DC1 JUMPI DUP9 SWAP2 PUSH2 0x297A JUMPI JUMPDEST POP AND DUP7 MSTORE PUSH1 0x8 DUP4 MSTORE PUSH1 0x40 DUP7 KECCAK256 PUSH2 0x2939 DUP3 DUP3 SLOAD PUSH2 0x2EAE JUMP JUMPDEST SWAP1 SSTORE DUP5 DUP7 MSTORE PUSH1 0xD DUP4 MSTORE PUSH1 0x40 DUP7 KECCAK256 PUSH2 0x2951 DUP3 DUP3 SLOAD PUSH2 0x2EAE JUMP JUMPDEST SWAP1 SSTORE DUP5 DUP7 MSTORE PUSH1 0xC DUP4 MSTORE PUSH1 0x40 DUP7 KECCAK256 CALLER PUSH0 MSTORE DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x2972 DUP3 DUP3 SLOAD PUSH2 0x2EAE JUMP JUMPDEST SWAP1 SSTORE PUSH0 PUSH2 0x26C7 JUMP JUMPDEST PUSH2 0x2991 SWAP2 POP DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x95E JUMPI PUSH2 0x94F DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST PUSH0 PUSH2 0x2922 JUMP JUMPDEST PUSH2 0x29AD SWAP1 DUP7 RETURNDATASIZE DUP9 GT PUSH2 0x286B JUMPI PUSH2 0x285C DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST POP PUSH0 PUSH2 0x2905 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP12 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x29D6 SWAP2 POP DUP7 RETURNDATASIZE DUP9 GT PUSH2 0x95E JUMPI PUSH2 0x94F DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST PUSH0 PUSH2 0x28B0 JUMP JUMPDEST POP CALLVALUE PUSH2 0x104D JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x104D JUMPI PUSH2 0x29F6 PUSH2 0x2CE4 JUMP JUMPDEST PUSH2 0x29FE PUSH2 0x3C08 JUMP JUMPDEST ADDRESS EXTCODESIZE ISZERO PUSH2 0x104D JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP2 PUSH32 0xBFFB78B200000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP4 ADDRESS GAS CALL DUP1 ISZERO PUSH2 0x2A85 JUMPI PUSH2 0x2A74 JUMPI POP DUP1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP1 RETURN JUMPDEST PUSH2 0x2A7E SWAP2 POP PUSH2 0x2D9E JUMP JUMPDEST PUSH0 PUSH0 PUSH2 0x12AB JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x104D JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x104D JUMPI PUSH2 0x2AEE PUSH2 0x2AAC PUSH2 0x2CE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 CALLER PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH2 0x3994 JUMP JUMPDEST STOP JUMPDEST CALLVALUE PUSH2 0x104D JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x104D JUMPI PUSH2 0x2AEE PUSH2 0x2B0C PUSH2 0x2CE4 JUMP JUMPDEST PUSH2 0x3947 JUMP JUMPDEST CALLVALUE PUSH2 0x104D JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x104D JUMPI PUSH2 0x2B4A PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0x2B52 PUSH2 0x36B1 JUMP JUMPDEST PUSH2 0x2AEE PUSH2 0x387F JUMP JUMPDEST CALLVALUE PUSH2 0x104D JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x104D JUMPI PUSH2 0x2B93 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH1 0x20 PUSH2 0x2B9D PUSH2 0x3909 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x104D JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x104D JUMPI PUSH2 0x2AEE PUSH2 0x379C JUMP JUMPDEST CALLVALUE PUSH2 0x104D JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x104D JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP1 DUP2 DUP2 SUB PUSH2 0x104D JUMPI PUSH2 0x2C0E PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0x2C16 PUSH2 0x36B1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x9 SLOAD SWAP3 PUSH1 0x8 SHL AND SWAP2 AND OR PUSH1 0x9 SSTORE PUSH32 0x94B979B6831A51293E2641426F97747FEED46F17779FED9CD18D1ECEFCFE92EF PUSH0 DUP1 LOG2 STOP JUMPDEST CALLVALUE PUSH2 0x104D JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x104D JUMPI PUSH1 0x20 PUSH2 0x2C9C PUSH2 0x2CE4 JUMP JUMPDEST PUSH2 0x2CC5 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0xE DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x104D JUMPI JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0xA0 SWAP2 ADD SLT PUSH2 0x104D JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x104D JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP2 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH1 0x64 CALLDATALOAD SWAP2 PUSH1 0x84 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x104D JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x104D JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x104D JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x104D JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x2D8A JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2D7C JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2DB2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2DB2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2DB2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x104D JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x104D JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x104D JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x104D JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x28 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x2E81 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x2E81 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x2E81 JUMPI JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2ED8 JUMPI DIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x2E81 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x3 SHR AND ISZERO PUSH2 0x3520 JUMPI PUSH2 0x2F3B PUSH2 0x3C08 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH1 0xE0 DUP4 ADD DUP4 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2DB2 JUMPI PUSH1 0x40 MSTORE PUSH0 DUP4 MSTORE PUSH1 0x60 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x60 DUP1 DUP5 ADD MSTORE PUSH1 0x60 PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x60 PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x60 PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP4 DUP8 MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 DUP7 DUP2 MSTORE ADD SWAP1 PUSH0 MSTORE DUP2 PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 JUMPDEST DUP8 DUP2 LT PUSH2 0x34FD JUMPI POP PUSH2 0x2FE6 SWAP3 POP SUB DUP3 PUSH2 0x2DFB JUMP JUMPDEST PUSH1 0x20 DUP8 ADD MSTORE PUSH2 0x2FF4 DUP4 PUSH2 0x35BA JUMP JUMPDEST PUSH2 0x3001 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x2DFB JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x302E DUP6 PUSH2 0x35BA JUMP JUMPDEST ADD PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x34D4 JUMPI POP POP PUSH1 0x40 DUP8 ADD MSTORE PUSH2 0x3048 DUP4 PUSH2 0x35D2 JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MSTORE PUSH2 0x3056 DUP4 PUSH2 0x35D2 JUMP JUMPDEST PUSH1 0x80 DUP8 ADD MSTORE DUP6 MLOAD PUSH5 0xFFFFFFFFFF PUSH2 0x306C DUP6 PUSH2 0x35D2 JUMP JUMPDEST SWAP2 PUSH1 0x5A SHR AND PUSH0 JUMPDEST DUP6 DUP2 LT PUSH2 0x3498 JUMPI POP POP PUSH1 0xC0 DUP8 ADD MSTORE PUSH2 0x308A DUP4 PUSH2 0x35D2 JUMP JUMPDEST PUSH1 0xA0 DUP8 ADD MSTORE DUP6 MLOAD SWAP2 PUSH1 0x1 DUP4 DUP2 SHR AND SWAP3 DUP4 PUSH2 0x3484 JUMPI JUMPDEST POP DUP3 PUSH2 0x3474 JUMPI JUMPDEST PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x31A1 JUMPI POP POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 JUMPDEST PUSH1 0x60 DUP6 ADD MLOAD DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x3112 JUMPI SWAP1 PUSH2 0x3100 PUSH2 0x30EA DUP3 PUSH1 0x1 SWAP5 PUSH2 0x3621 JUMP JUMPDEST MLOAD PUSH2 0x30F9 DUP4 PUSH1 0x80 DUP11 ADD MLOAD PUSH2 0x3621 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x3C5D JUMP JUMPDEST DUP2 PUSH0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE ADD PUSH2 0x30CC JUMP JUMPDEST POP POP SWAP2 SWAP3 POP POP PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 AND SWAP1 SSTORE MLOAD SWAP2 DUP3 MSTORE PUSH32 0xC2354CC2F78EA57777E55DDD43A7F22B112CE98868596880EDAEB22B4F9C73A9 SWAP2 LOG2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x31B7 DUP3 PUSH1 0x20 DUP12 ADD MLOAD PUSH2 0x3621 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x31D1 DUP4 PUSH2 0x2DDF JUMP JUMPDEST SLOAD PUSH1 0xFF SWAP1 DUP2 DUP2 AND PUSH2 0x31E1 DUP2 PUSH2 0x43B3 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 PUSH1 0x8 SHR AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0xA8 SHR AND ISZERO ISZERO PUSH1 0x40 DUP4 ADD MSTORE DUP1 PUSH0 MSTORE DUP4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP2 PUSH2 0x3227 DUP3 PUSH1 0x40 DUP13 ADD MLOAD DUP4 PUSH2 0x3221 DUP4 DUP4 PUSH2 0x3621 JUMP JUMPDEST MSTORE PUSH2 0x3621 JUMP JUMPDEST POP DUP1 MLOAD PUSH2 0x3233 DUP2 PUSH2 0x43B3 JUMP JUMPDEST PUSH2 0x323C DUP2 PUSH2 0x43B3 JUMP JUMPDEST DUP1 PUSH2 0x33B8 JUMPI POP PUSH8 0xDE0B6B3A7640000 JUMPDEST PUSH2 0x325A DUP4 PUSH1 0xA0 DUP14 ADD MLOAD PUSH2 0x3621 JUMP JUMPDEST MSTORE PUSH2 0x3278 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP4 DUP13 PUSH2 0x440D JUMP JUMPDEST DUP6 ISZERO PUSH2 0x33AE JUMPI PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO SWAP1 DUP2 PUSH2 0x3390 JUMPI JUMPDEST POP PUSH2 0x329D JUMPI JUMPDEST PUSH1 0x1 SWAP2 POP JUMPDEST ADD PUSH2 0x30A8 JUMP JUMPDEST DUP9 PUSH2 0x32A8 DUP2 MLOAD PUSH2 0x43EA JUMP JUMPDEST PUSH2 0x32B6 DUP4 PUSH1 0x60 DUP5 ADD MLOAD PUSH2 0x3621 JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x80 SHR PUSH2 0x32CA DUP5 PUSH1 0x80 PUSH0 SWAP6 ADD MLOAD PUSH2 0x3621 JUMP JUMPDEST MLOAD DUP2 DUP2 GT PUSH2 0x3301 JUMPI JUMPDEST POP POP POP PUSH1 0x1 SWAP3 DUP2 PUSH2 0x32E6 JUMPI JUMPDEST POP POP PUSH2 0x3292 JUMP JUMPDEST PUSH2 0x32FA SWAP2 PUSH2 0x32F3 SWAP2 PUSH2 0x2F05 JUMP JUMPDEST DUP3 DUP12 PUSH2 0x440D JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x32DF JUMP JUMPDEST PUSH2 0x330C SWAP4 POP SUB PUSH2 0x2EBB JUMP JUMPDEST SWAP2 PUSH8 0xDE0B6B3A7640000 SWAP3 PUSH1 0x1 DUP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x336B DUP12 PUSH2 0x3364 DUP6 PUSH1 0xA0 PUSH2 0x335B DUP3 PUSH1 0xC0 DUP7 ADD MLOAD PUSH2 0x3621 JUMP JUMPDEST MLOAD SWAP4 ADD MLOAD PUSH2 0x3621 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x2EBB JUMP JUMPDEST DUP2 DUP6 DUP2 MUL DIV DUP6 EQ DUP3 ISZERO OR ISZERO PUSH2 0x2E81 JUMPI PUSH1 0x1 SWAP5 PUSH2 0x3387 SWAP3 MUL PUSH2 0x2ECE JUMP JUMPDEST SWAP1 SWAP3 PUSH0 DUP1 PUSH2 0x32D3 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP MLOAD PUSH2 0x339E DUP2 PUSH2 0x43B3 JUMP JUMPDEST PUSH2 0x33A7 DUP2 PUSH2 0x43B3 JUMP JUMPDEST EQ PUSH0 PUSH2 0x328C JUMP JUMPDEST POP PUSH1 0x1 SWAP2 POP PUSH2 0x3297 JUMP JUMPDEST DUP1 PUSH2 0x33C4 PUSH1 0x1 SWAP3 PUSH2 0x43B3 JUMP JUMPDEST SUB PUSH2 0x344C JUMPI PUSH1 0x4 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP5 ADD MLOAD AND PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0x679AEFCE00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2A85 JUMPI PUSH0 SWAP2 PUSH2 0x341A JUMPI JUMPDEST POP PUSH2 0x324C JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3444 JUMPI JUMPDEST DUP2 PUSH2 0x3435 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x2DFB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x104D JUMPI MLOAD PUSH0 PUSH2 0x3414 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x3428 JUMP JUMPDEST PUSH32 0xDF45063200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP7 MLOAD PUSH1 0x3 SHR PUSH1 0x1 AND ISZERO SWAP3 POP PUSH2 0x30A6 JUMP JUMPDEST PUSH2 0x348F SWAP2 SWAP4 POP PUSH2 0x43EA JUMP JUMPDEST ISZERO ISZERO SWAP2 PUSH0 PUSH2 0x309F JUMP JUMPDEST PUSH1 0x5 DUP2 MUL SWAP1 DUP1 DUP3 DIV PUSH1 0x5 EQ DUP2 ISZERO OR ISZERO PUSH2 0x2E81 JUMPI PUSH1 0x4D PUSH1 0x1F DUP5 DUP5 SHR AND GT PUSH2 0x2E81 JUMPI PUSH1 0x1F DUP4 PUSH1 0x1 SWAP4 SHR AND PUSH1 0xA EXP PUSH2 0x34CD DUP3 DUP7 PUSH2 0x3621 JUMP JUMPDEST MSTORE ADD PUSH2 0x3073 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD PUSH2 0x34E3 DUP2 PUSH2 0x2DDF JUMP JUMPDEST PUSH0 DUP2 MSTORE PUSH0 DUP4 DUP3 ADD MSTORE PUSH0 PUSH1 0x40 DUP3 ADD MSTORE DUP3 DUP3 DUP7 ADD ADD MSTORE ADD PUSH2 0x3031 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 PUSH1 0x20 DUP2 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 SLOAD AND DUP2 MSTORE ADD SWAP4 ADD SWAP2 ADD SWAP2 DUP4 SWAP2 SWAP3 PUSH2 0x2FD2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 PUSH32 0xEF029ADF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x35B4 DUP2 PUSH2 0x2DDF JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2DB2 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x35DC DUP3 PUSH2 0x35BA JUMP JUMPDEST PUSH2 0x35E9 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x2DFB JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x3617 DUP3 SWAP5 PUSH2 0x35BA JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x3635 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x104D JUMPI PUSH1 0x20 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS SUB PUSH2 0x3689 JUMPI JUMP JUMPDEST PUSH32 0x9FD25B3600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x373B PUSH1 0x20 PUSH2 0x36E2 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x3555 JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x40 MLOAD PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE CALLER PUSH1 0x24 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE SWAP1 SWAP3 DUP4 SWAP2 PUSH1 0x8 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP2 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2A85 JUMPI PUSH0 SWAP2 PUSH2 0x377D JUMPI JUMPDEST POP ISZERO PUSH2 0x3755 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x3796 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x286B JUMPI PUSH2 0x285C DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST PUSH0 PUSH2 0x374D JUMP JUMPDEST PUSH2 0x37A4 PUSH2 0x3909 JUMP JUMPDEST ISZERO PUSH2 0x37D1 JUMPI PUSH32 0xDA9F8B3400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0xFFFFFFFF PUSH32 0x0 AND TIMESTAMP LT ISZERO PUSH2 0x3857 JUMPI PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD PUSH1 0x7 SLOAD AND OR PUSH1 0x7 SSTORE PUSH32 0xE0629FE656E45AD7FD63A24B899DA368690024C07043B88E57AEE5095B1D3D02 PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE LOG1 JUMP JUMPDEST PUSH32 0xE4460B700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x3887 PUSH2 0x3909 JUMP JUMPDEST ISZERO PUSH2 0x38E1 JUMPI PUSH32 0xE0629FE656E45AD7FD63A24B899DA368690024C07043B88E57AEE5095B1D3D02 PUSH1 0x20 PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD PUSH1 0x7 SLOAD AND PUSH1 0x7 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 JUMP JUMPDEST PUSH32 0xF7FF4DCA00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0xFFFFFFFF PUSH32 0x0 AND TIMESTAMP GT ISZERO DUP1 PUSH2 0x393B JUMPI SWAP1 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x7 SLOAD DUP2 SHR AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x3 SHR AND PUSH2 0x3969 JUMPI POP JUMP JUMPDEST PUSH32 0x346D760700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x39B8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP2 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH2 0x4130 JUMP JUMPDEST DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x1 DUP2 PUSH1 0x2 SHR AND PUSH4 0xFFFFFFFF SWAP1 DUP2 DUP4 PUSH2 0x39DE PUSH2 0xCF9 PUSH1 0x5A SWAP1 JUMP JUMPDEST SHR AND DUP2 PUSH2 0x3AB7 JUMPI JUMPDEST POP ISZERO PUSH2 0x3A18 JUMPI DUP3 PUSH32 0xD971F59700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 PUSH2 0x3A23 PUSH1 0x5A PUSH2 0x2E73 JUMP JUMPDEST SHR AND TIMESTAMP LT ISZERO PUSH2 0x3A8B JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB PUSH1 0x4 SWAP2 DUP4 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE AND OR PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x57E20448028297190122571BE7CB6C1B1EF85730C673F7C72F533C8662419AA7 PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE LOG2 JUMP JUMPDEST POP PUSH32 0xEB5A121700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP2 PUSH32 0x0 AND ADD DUP2 DUP2 GT PUSH2 0x2E81 JUMPI DUP2 AND TIMESTAMP GT ISZERO PUSH0 PUSH2 0x39E6 JUMP JUMPDEST PUSH2 0x3B13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP2 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH2 0x4130 JUMP JUMPDEST DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x1 DUP2 PUSH1 0x2 SHR AND PUSH4 0xFFFFFFFF DUP1 DUP4 PUSH2 0x3B38 PUSH2 0xCF9 PUSH1 0x5A SWAP1 JUMP JUMPDEST SHR AND DUP3 PUSH2 0x3BCF JUMPI JUMPDEST POP POP ISZERO PUSH2 0x3BA3 JUMPI PUSH1 0x20 PUSH32 0x57E20448028297190122571BE7CB6C1B1EF85730C673F7C72F533C8662419AA7 SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB PUSH0 SWAP2 DUP6 DUP4 MSTORE DUP3 DUP5 MSTORE AND PUSH1 0x40 DUP3 KECCAK256 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 JUMP JUMPDEST POP PUSH32 0xFDCD689400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP PUSH32 0x0 AND ADD DUP2 DUP2 GT PUSH2 0x2E81 JUMPI AND TIMESTAMP GT ISZERO PUSH0 DUP1 PUSH2 0x3B40 JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x3C35 JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 GT SWAP1 DUP2 ISZERO PUSH2 0x3CB5 JUMPI JUMPDEST POP PUSH2 0x3C8D JUMPI PUSH2 0x3C8A SWAP2 PUSH1 0x80 SHL PUSH2 0x2EAE JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH32 0x89560CA100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP DUP3 GT PUSH0 PUSH2 0x3C79 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x8 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH32 0xC2354CC2F78EA57777E55DDD43A7F22B112CE98868596880EDAEB22B4F9C73A9 PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE LOG2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x3D49 JUMPI POP JUMP JUMPDEST PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x0 TLOAD ISZERO PUSH2 0x3D9D JUMPI JUMP JUMPDEST PUSH32 0xC09BA73600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x3DE7 JUMPI POP JUMP JUMPDEST PUSH32 0x85F4129900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x3E1C SWAP1 PUSH2 0x414C JUMP JUMPDEST SWAP1 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP3 EQ PUSH2 0x2E81 JUMPI PUSH2 0x3E50 SWAP2 PUSH0 SUB SWAP1 PUSH2 0x41A1 JUMP JUMPDEST JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP3 DUP4 ISZERO PUSH2 0x3EDE JUMPI PUSH32 0x4E09F7F7FC37CE2897800E2C2A9099565EDB0A133D19D84A6871B3530AF8846B SWAP2 PUSH1 0x20 SWAP2 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0xD DUP3 MSTORE PUSH2 0x3EA2 DUP2 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x2F05 JUMP JUMPDEST PUSH2 0x3EAB DUP2 PUSH2 0x3F3D JUMP JUMPDEST DUP5 PUSH0 MSTORE PUSH1 0xD DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0xC DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP6 PUSH0 MSTORE DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x3ED3 DUP3 DUP3 SLOAD PUSH2 0x2F05 JUMP JUMPDEST SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG3 JUMP JUMPDEST PUSH32 0x586D06DF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x7 SLOAD PUSH1 0x2 SHR AND PUSH2 0x3F15 JUMPI JUMP JUMPDEST PUSH32 0xF27DF0900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x2710 DUP2 LT PUSH2 0x3F49 JUMPI POP JUMP JUMPDEST PUSH32 0x34BDBFAA00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SWAP2 AND DUP1 DUP3 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH32 0xD66F031D33381C6408F0B32C884461E5DE3DF8808399B6F3A3D86B1368F8EC34 PUSH1 0x20 PUSH2 0x2710 DUP1 PUSH1 0x40 DUP7 KECCAK256 SSTORE PUSH1 0xC DUP3 MSTORE PUSH1 0x40 DUP6 KECCAK256 DUP6 DUP1 MSTORE DUP3 MSTORE DUP1 PUSH1 0x40 DUP7 KECCAK256 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG3 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP3 DUP4 ISZERO PUSH2 0x4050 JUMPI PUSH32 0xD66F031D33381C6408F0B32C884461E5DE3DF8808399B6F3A3D86B1368F8EC34 SWAP2 PUSH1 0x20 SWAP2 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0xD DUP3 MSTORE PUSH2 0x401F DUP2 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x2EAE JUMP JUMPDEST PUSH2 0x4028 DUP2 PUSH2 0x3F3D JUMP JUMPDEST DUP5 PUSH0 MSTORE PUSH1 0xD DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0xC DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP6 PUSH0 MSTORE DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x3ED3 DUP3 DUP3 SLOAD PUSH2 0x2EAE JUMP JUMPDEST PUSH32 0xDBE6B10E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE PUSH1 0x7 SLOAD AND OR PUSH1 0x7 SSTORE PUSH32 0xBD204090FD387F08E3076528BF09B4FC99D8100D749EACE96C06002D3FEDC625 PUSH0 DUP1 LOG1 JUMP JUMPDEST DUP3 ISZERO PUSH2 0x4108 JUMPI PUSH1 0x1 SWAP2 PUSH2 0x40DB SWAP2 PUSH2 0x2EBB JUMP JUMPDEST SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4149 JUMPI PUSH2 0x3E50 SWAP1 PUSH2 0x431C JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x4176 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 ISZERO PUSH2 0x428F JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 SWAP2 AND DUP1 PUSH0 MSTORE DUP2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD DUP4 DUP2 ADD SWAP4 DUP5 SLT PUSH0 DUP3 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x2E81 JUMPI DUP4 PUSH2 0x4256 JUMPI POP PUSH32 0x0 DUP1 TLOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 ADD SWAP2 DUP3 GT PUSH2 0x2E81 JUMPI TSTORE JUMPDEST PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TSTORE JUMP JUMPDEST PUSH2 0x424A JUMPI PUSH32 0x0 DUP1 TLOAD SWAP1 PUSH1 0x1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x2E81 JUMPI TSTORE PUSH2 0x424A JUMP JUMPDEST POP POP JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x18 SHR PUSH2 0xFAF JUMPI PUSH1 0x2A SHL SWAP1 PUSH3 0xFFFFFF PUSH1 0x2A SHL NOT AND OR SWAP1 JUMP JUMPDEST PUSH32 0xB4120F1400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x100 DUP1 DUP5 LT ISZERO PUSH2 0x42AD JUMPI DUP4 DUP2 SUB SWAP1 DUP2 GT PUSH2 0x2E81 JUMPI DUP1 PUSH1 0xFF LT PUSH0 EQ PUSH2 0x4317 JUMPI POP PUSH1 0xFF JUMPDEST PUSH1 0x18 GT PUSH2 0x42AD JUMPI DUP1 PUSH1 0x18 SHR PUSH2 0xFAF JUMPI PUSH3 0xFFFFFF SWAP1 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST PUSH2 0x42F9 JUMP JUMPDEST PUSH1 0x20 PUSH2 0x373B SWAP2 PUSH2 0x434E PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x3555 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x9 SLOAD PUSH1 0x8 SHR AND SWAP1 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP5 DUP3 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE CALLER SWAP1 PUSH1 0x4 DUP6 ADD SWAP2 PUSH1 0x40 SWAP2 SWAP5 SWAP4 PUSH1 0x60 DUP5 ADD SWAP6 DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND PUSH1 0x20 DUP6 ADD MSTORE AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x43BD JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH3 0xFFFFFF SWAP1 PUSH1 0x42 SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2E81 JUMPI SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x80 PUSH8 0xDE0B6B3A7640000 PUSH2 0x445D PUSH2 0x4466 SWAP5 DUP1 PUSH2 0x4430 DUP7 PUSH1 0x60 DUP11 ADD MLOAD PUSH2 0x3621 JUMP JUMPDEST MSTORE PUSH2 0x4458 PUSH2 0x4442 DUP7 PUSH1 0xC0 DUP11 ADD MLOAD PUSH2 0x3621 JUMP JUMPDEST MLOAD PUSH2 0x4451 DUP8 PUSH1 0xA0 DUP12 ADD MLOAD PUSH2 0x3621 JUMP JUMPDEST MLOAD SWAP3 PUSH2 0x2EBB JUMP JUMPDEST PUSH2 0x2EBB JUMP JUMPDEST DIV SWAP4 ADD MLOAD PUSH2 0x3621 JUMP JUMPDEST MSTORE JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH15 0x728428BC4D867277CA071B601AD67C 0x28 RETURNDATASIZE 0xEC JUMP 0xF6 ORIGIN 0xDD KECCAK256 SWAP2 0x29 CALL 0x4C 0xC8 PUSH21 0x6A6264736F6C634300081B00330000000000000000 ","sourceMap":"566:4899:92:-:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;566:4899:92;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;3400:40:73;566:4899:92;;;;;:::i;:::-;;;;-1:-1:-1;;;566:4899:92;;;;3400:40:73;:::i;:::-;;;3501:47;566:4899:92;;;;;:::i;:::-;;;;-1:-1:-1;;;566:4899:92;;;;3501:47:73;:::i;:::-;;;3601:41;566:4899:92;;;;;:::i;:::-;;;;-1:-1:-1;;;566:4899:92;;;;3601:41:73;:::i;:::-;;;;;;3703:48;566:4899:92;;;;;:::i;:::-;;;;-1:-1:-1;;;566:4899:92;;;;3703:48:73;:::i;:::-;;;;;;3802:39;566:4899:92;;;;;:::i;:::-;;;;-1:-1:-1;;;566:4899:92;;;;3802:39:73;:::i;:::-;;;;;;1347:46:37;;;;409:14:72;;;;566:4899:92;;;;3503:48:69;2194:12:73;3503:48:69;;3499:120;;566:4899:92;;;3632:50:69;2268:8:73;3632:50:69;;3628:123;;3844:15;2268:8:73;3844:15:69;;;2268:8:73;;;15369:24:119;;;15365:103;;-1:-1:-1;566:4899:92;;3904:45:69;;;;3959:49;;;;2268:8:73;;;;;;;4018:69:69;;;;566:4899:92;4098:38:69;566:4899:92;4146:36:69;566:4899:92;;;;;;;;;;;;;;;;;;;;3400:40:73;566:4899:92;;;;;3501:47:73;566:4899:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2268:8:73;;;;-1:-1:-1;2268:8:73;566:4899:92;2268:8:73;;;-1:-1:-1;2268:8:73;15365:103:119;15416:41;;;-1:-1:-1;15416:41:119;;566:4899:92;;;;-1:-1:-1;15416:41:119;3628:123:69;3705:35;;;-1:-1:-1;3705:35:69;;-1:-1:-1;3705:35:69;3499:120;3574:34;;;-1:-1:-1;3574:34:69;;-1:-1:-1;3574:34:69;566:4899:92;-1:-1:-1;566:4899:92;;;;;;;;;-1:-1:-1;;;;;566:4899:92;;;;;;;:::o;:::-;2268:8:73;;;566:4899:92;;;;;;;;;;;;;-1:-1:-1;;566:4899:92;;;;-1:-1:-1;;;;;566:4899:92;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;9892:177:73:-;566:4899:92;;;;;;:::i;:::-;;;;1461:67:47;566:4899:92;;;;-1:-1:-1;;;566:4899:92;;;;;1461:67:47;;;;;;566:4899:92;;;;;;;;;;;;;;-1:-1:-1;;;566:4899:92;;;;;;;;;;;;;;;-1:-1:-1;566:4899:92;;;;1461:67:47;;;;;;;;;:::i;:::-;566:4899:92;1451:78:47;;-1:-1:-1;;566:4899:92;;;;;;;;;1432:103:47;566:4899:92;1432:103:47;;566:4899:92;;;;1432:103:47;;;;;:::i;:::-;566:4899:92;;1405:144:47;;-1:-1:-1;;1405:170:47;;9892:177:73:o"},"deployedBytecode":{"functionDebugData":{"abi_decode_address_fromMemory":{"entryPoint":11836,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":11867,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IERC4626":{"entryPoint":11492,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_contract_IERC4626t_addresst_uint256":{"entryPoint":11574,"id":null,"parameterSlots":1,"returnSlots":3},"abi_decode_contract_IERC4626t_uint256t_uint256t_uint256t_address":{"entryPoint":11514,"id":null,"parameterSlots":1,"returnSlots":5},"abi_decode_uint256t_uint256_fromMemory":{"entryPoint":13922,"id":null,"parameterSlots":2,"returnSlots":2},"abi_encode_address_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":11627,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bytes32_address_address":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_contract_IERC4626_uint256_uint256_uint256_address":{"entryPoint":null,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_uint256_uint256_bytes32":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"allocate_and_zero_memory_array_array_uint256_dyn":{"entryPoint":13778,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_contract_IERC20_dyn":{"entryPoint":13754,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_uint256":{"entryPoint":11950,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_uint256_51362":{"entryPoint":11891,"id":null,"parameterSlots":1,"returnSlots":1},"checked_div_uint256":{"entryPoint":11982,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256":{"entryPoint":11963,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_uint256":{"entryPoint":12037,"id":null,"parameterSlots":2,"returnSlots":1},"constant_AGGREGATE_YIELD_FEE_OFFSET":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"constant_DECIMAL_SCALING_FACTORS_OFFSET":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"finalize_allocation":{"entryPoint":11771,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_51053":{"entryPoint":11678,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_51208":{"entryPoint":11743,"id":null,"parameterSlots":1,"returnSlots":0},"fun__setVaultPaused":{"entryPoint":14463,"id":23199,"parameterSlots":0,"returnSlots":0},"fun_accountDelta":{"entryPoint":16801,"id":24964,"parameterSlots":2,"returnSlots":0},"fun_authenticateCaller":{"entryPoint":14001,"id":5469,"parameterSlots":0,"returnSlots":0},"fun_burnBufferShares":{"entryPoint":15954,"id":24481,"parameterSlots":3,"returnSlots":0},"fun_disableQuery":{"entryPoint":16504,"id":23725,"parameterSlots":0,"returnSlots":0},"fun_ensureAuthenticated":{"entryPoint":17180,"id":24703,"parameterSlots":1,"returnSlots":0},"fun_ensureAuthenticatedByRole":{"entryPoint":16688,"id":24646,"parameterSlots":2,"returnSlots":0},"fun_ensureBufferInitialized":{"entryPoint":15813,"id":25235,"parameterSlots":1,"returnSlots":0},"fun_ensureBufferMinimumTotalSupply":{"entryPoint":16189,"id":24606,"parameterSlots":1,"returnSlots":0},"fun_ensurePoolNotInRecoveryMode":{"entryPoint":14663,"id":23622,"parameterSlots":1,"returnSlots":0},"fun_ensureRegisteredPool":{"entryPoint":15657,"id":25147,"parameterSlots":1,"returnSlots":0},"fun_ensureUnlocked":{"entryPoint":15732,"id":24863,"parameterSlots":0,"returnSlots":0},"fun_ensureVaultBuffersAreNotPaused":{"entryPoint":16134,"id":25109,"parameterSlots":0,"returnSlots":0},"fun_ensureVaultDelegateCall":{"entryPoint":13944,"id":31177,"parameterSlots":1,"returnSlots":0},"fun_getActionId":{"entryPoint":13653,"id":5487,"parameterSlots":1,"returnSlots":1},"fun_getAggregateYieldFeePercentage":{"entryPoint":17386,"id":30183,"parameterSlots":1,"returnSlots":1},"fun_insertUint":{"entryPoint":17043,"id":7523,"parameterSlots":2,"returnSlots":1},"fun_insertUint_51066":{"entryPoint":17109,"id":7523,"parameterSlots":3,"returnSlots":1},"fun_isVaultPaused":{"entryPoint":14601,"id":25014,"parameterSlots":0,"returnSlots":1},"fun_manualDisableRecoveryMode":{"entryPoint":12050,"id":35502,"parameterSlots":1,"returnSlots":0},"fun_mintBufferShares":{"entryPoint":16335,"id":24192,"parameterSlots":3,"returnSlots":0},"fun_mintMinimumBufferSupplyReserve":{"entryPoint":16244,"id":24138,"parameterSlots":1,"returnSlots":0},"fun_mulDivUp":{"entryPoint":16585,"id":8034,"parameterSlots":3,"returnSlots":1},"fun_nonReentrantBefore":{"entryPoint":15368,"id":9916,"parameterSlots":0,"returnSlots":0},"fun_setPoolPaused":{"entryPoint":15087,"id":23303,"parameterSlots":1,"returnSlots":0},"fun_setPoolPaused_51051":{"entryPoint":14740,"id":23303,"parameterSlots":1,"returnSlots":0},"fun_setPoolRecoveryMode":{"entryPoint":15551,"id":23656,"parameterSlots":1,"returnSlots":0},"fun_setVaultPaused":{"entryPoint":14236,"id":23199,"parameterSlots":0,"returnSlots":0},"fun_supplyCredit":{"entryPoint":15890,"id":24891,"parameterSlots":2,"returnSlots":0},"fun_toInt256":{"entryPoint":16716,"id":44982,"parameterSlots":1,"returnSlots":1},"fun_toPackedBalance":{"entryPoint":15453,"id":6303,"parameterSlots":2,"returnSlots":1},"fun_updateRawAndLiveBalance":{"entryPoint":17421,"id":30978,"parameterSlots":3,"returnSlots":0},"memory_array_index_access_contract_IERC20_dyn":{"entryPoint":13857,"id":null,"parameterSlots":2,"returnSlots":1},"validator_assert_enum_TokenType":{"entryPoint":17331,"id":null,"parameterSlots":1,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"5427":[{"length":32,"start":13696}],"28110":[{"length":32,"start":817},{"length":32,"start":900},{"length":32,"start":987},{"length":32,"start":1072},{"length":32,"start":1750},{"length":32,"start":2451},{"length":32,"start":2786},{"length":32,"start":2981},{"length":32,"start":3136},{"length":32,"start":3220},{"length":32,"start":3585},{"length":32,"start":4898},{"length":32,"start":4978},{"length":32,"start":5385},{"length":32,"start":5493},{"length":32,"start":5718},{"length":32,"start":6531},{"length":32,"start":6775},{"length":32,"start":6948},{"length":32,"start":7780},{"length":32,"start":7966},{"length":32,"start":9071},{"length":32,"start":9162},{"length":32,"start":9409},{"length":32,"start":9560},{"length":32,"start":11046},{"length":32,"start":11119},{"length":32,"start":11242},{"length":32,"start":11425}],"28194":[{"length":32,"start":1690}],"28196":[{"length":32,"start":9236}],"28201":[{"length":32,"start":15734}],"28206":[{"length":32,"start":16892},{"length":32,"start":16988}],"28211":[{"length":32,"start":16817}],"28265":[{"length":32,"start":6395},{"length":32,"start":6593},{"length":32,"start":14296}],"28267":[{"length":32,"start":4572},{"length":32,"start":6632},{"length":32,"start":14608}],"28269":[{"length":32,"start":3386},{"length":32,"start":4330},{"length":32,"start":9824},{"length":32,"start":15036},{"length":32,"start":15317}]},"linkReferences":{},"object":"6080604052600436101561009f575b361561007757346100775760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7420696d706c656d656e74656400000000000000000000000000000000006044820152fd5b7ff2238896000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f5f3560e01c80630387587d14612c81578063058a628f14612bbf578063071d8a0214612ba7578063098401f514612b5a5780630b7562be14612b115780630b9df1f614612af05780631558356e14612a9057806316df26cb146129dc5780631f568ea31461268457806320c1fb7a1461264357806326a8a9911461262657806327521d0c146126005780632d7713891461252d5780632e42f4d5146125115780634021fe0f1461249657806352b9e33d1461243757806353956aa2146123fc57806355aca1ec146123a857806355cba7fe146123595780635dcacd6414611f075780635e0b06f414611e41578063653eb3b014611b0b5780636b23029114611af35780637578abb914611ad6578063821440f214611a61578063851c1bb314611a0f57806385c8c0151461196d57806388e5101a1461191f5780638a8d123a146118de5780638f4ab9ca146116385780639260d920146115b75780639385e39a1461153d5780639e0879c2146114f3578063a8175b27146114d7578063b61398cd146113f3578063b9212b491461135c578063bffb78b214611300578063c7b3b3a914611219578063cc671ff714611200578063cd51c12f146111bf578063d0965a6b146111a1578063d15126ba14610ddf578063d2c725e014610da0578063dc3f574e14610c74578063de1a36a614610c2a578063e085c5a814610b8f578063e0d5560514610acc578063e253670a14610970578063e2a92b1a146106bd578063e2cb0ba014610682578063e83388941461066a578063e99ac9a314610648578063ebc7955c14610410578063f21c38cd146103b9578063f2784e07146103585763fbfa77cf14610312575061000e565b3461035557806003193601126103555760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b80fd5b50346103555760206003193601126103555760406020916001600160a01b0361037f612ce4565b6103a87f0000000000000000000000000000000000000000000000000000000000000000613678565b168152600d83522054604051908152f35b50346103555760206003193601126103555761040d6103d6612ce4565b6103ff7f0000000000000000000000000000000000000000000000000000000000000000613678565b61040881613d29565b613aef565b80f35b503461035557608060031936011261035557601f9061042d612ce4565b907f00000000000000000000000000000000000000000000000000000000000000009161045983613678565b6040517f5dcacd640000000000000000000000000000000000000000000000000000000060208083019182526001600160a01b039390931660248084019190915235604480840191909152356064808401919091523560848301523360a480840191909152825291937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09284929091906104f460c482612dfb565b836001600160a01b03604489886040519c8d98899788947f48c8949100000000000000000000000000000000000000000000000000000000865260048601525180918160248701528686015e8685828601015201168101030193165af193841561063d578294610580575b60408461057487828082518301019101613662565b90918351928352820152f35b909193503d8085833e6105938183612dfb565b8101838282031261060457815167ffffffffffffffff9283821161063957019080601f83011215610635578151928311610608576105db8560405195601f8601160185612dfb565b82845284838301011161060457938382610574949382604098018386015e83010152925f61055f565b8480fd5b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8580fd5b8680fd5b6040513d84823e3d90fd5b50346103555760206003193601126103555761040d610665612ce4565b613f74565b50346103555761040d61067c36612d36565b91613e52565b503461035557806003193601126103555760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b5034610355576106cc36612cfa565b6106fa95919294957f0000000000000000000000000000000000000000000000000000000000000000613678565b610702613d74565b61070a613f06565b61071386613dc5565b61071b613c08565b6001600160a01b0392838716916040517f38d52e0f0000000000000000000000000000000000000000000000000000000081526020958682600481885afa918215610965578692610936575b50848652600e875280604087205416911680910361090657838552600b8652604085205497600d87526040862054916fffffffffffffffffffffffffffffffff8a16916107c46107b88588866140c9565b9b60801c9487866140c9565b99808c116108d25750808a1161089e57509361086f9361083f60409c946108398c6108338f6108519861082e8e6108257f75c4dc5f23640eeba7d404d9165f515fc3d9e23a5c8b6e2d09b4b9da56ff00a99f61081f8661414c565b906141a1565b61081f8661414c565b612eae565b92612eae565b90613c5d565b93878952600b8a52848d8a2055613fcf565b8851918291888a846040919493926060820195825260208201520152565b0390a27f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d8351928352820152f35b876064918b897f8eda85e4000000000000000000000000000000000000000000000000000000008452600452602452604452fd5b886064918d857f8eda85e4000000000000000000000000000000000000000000000000000000008452600452602452604452fd5b84604491857f36b18d09000000000000000000000000000000000000000000000000000000008352600452602452fd5b610957919250873d891161095e575b61094f8183612dfb565b810190612e3c565b905f610767565b503d610945565b6040513d88823e3d90fd5b50346103555760406003193601126103555761098a612ce4565b602435906109b77f0000000000000000000000000000000000000000000000000000000000000000613678565b6109c081613d29565b670de0b6b3a76400008211610aa4576001600160a01b039081600a54163303610a7c571690818352826020526040832054670de0b5cad2bef0008211610a54577f606eb97d83164bd6b200d638cd49c14c65d94d4f2c674cfd85e24e0e202c3ca591610a3f602092610a30604290565b9064174876e8008404906142d5565b8486528583526040862055604051908152a280f35b6004847f746e5940000000000000000000000000000000000000000000000000000000008152fd5b6004847f23dada53000000000000000000000000000000000000000000000000000000008152fd5b6004837f4c69ac5d000000000000000000000000000000000000000000000000000000008152fd5b5034610355578060031936011261035557610b067f0000000000000000000000000000000000000000000000000000000000000000613678565b610b0e6136b1565b60ff60095416610b67577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe600754166007557f91d7478835f2b5adc315f5aad920f4a7f0a02f7fddf3042d17b2c80168ea17f58180a180f35b807f069f8cbc0000000000000000000000000000000000000000000000000000000060049252fd5b5034610355578060031936011261035557610bc97f0000000000000000000000000000000000000000000000000000000000000000613678565b610bd16136b1565b60047ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb60075416176007557f300c7ca619eb846386aa0a6e5916ac2a41406448b0a2e99ba9ccafeb899015a5602060405160018152a180f35b5034610355578060031936011261035557610c647f0000000000000000000000000000000000000000000000000000000000000000613678565b610c6c6136b1565b61040d614078565b503461035557602060031936011261035557610c8e612ce4565b90610cb87f0000000000000000000000000000000000000000000000000000000000000000613678565b610cc182613d29565b610cca82613947565b6001600160a01b03821681528060205260408120549160018360021c1663ffffffff8094610cfe610cf9605a90565b612e73565b1c1681610d35575b5061040d9293501580610d26575b15613cbf57610d216136b1565b613cbf565b50610d2f613909565b15610d14565b9050837f0000000000000000000000000000000000000000000000000000000000000000160192808411610d735761040d9293164211158392610d06565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b503461035557806003193601126103555760207f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6040519015158152f35b503461035557604060031936011261035557610df9612ce4565b602435610e257f0000000000000000000000000000000000000000000000000000000000000000613678565b610e2e82613d29565b6001600160a01b0380831692838552602091600183526001604087200154169081155f1461117257610e60915061431c565b610e68613909565b61114a57828452838152604084205460018160021c169063ffffffff8091610e91610cf9605a90565b1c16826110e4575b50506110b8576040517fce20ece70000000000000000000000000000000000000000000000000000000081528181600481875afa90811561105857859161108b575b508210611063576040517f654cf15d0000000000000000000000000000000000000000000000000000000081528181600481875afa908115611058578591611027575b508211610fff57828452838152604084205491670de0b5cad2bef0008111610fd75764174876e8008104928360181c610faf577ffffffffffffffffffffffffffffffffffffffffffffffffffffffc000003ffff7f89d41522342fabac1471ca6073a5623e5caf367b03ca6e9a001478d0cf8be4a19486885287855260121b9116176040862055604051908152a280f35b7fe4337c05000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004857f746e5940000000000000000000000000000000000000000000000000000000008152fd5b6004847f7f47834b000000000000000000000000000000000000000000000000000000008152fd5b90508181813d8311611051575b61103e8183612dfb565b8101031261104d57515f610f1e565b5f80fd5b503d611034565b6040513d87823e3d90fd5b6004847fbfb20688000000000000000000000000000000000000000000000000000000008152fd5b90508181813d83116110b1575b6110a28183612dfb565b8101031261104d57515f610edb565b503d611098565b602484847fd971f597000000000000000000000000000000000000000000000000000000008252600452fd5b908092507f0000000000000000000000000000000000000000000000000000000000000000160181811161111d57164211155f80610e99565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6004847fda9f8b34000000000000000000000000000000000000000000000000000000008152fd5b503314610e60576004847f23dada53000000000000000000000000000000000000000000000000000000008152fd5b50346103555780600319360112610355576020604051620f42408152f35b5034610355578060031936011261035557602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461035557806003193601126103555761040d61387f565b50346103555761129a604061122d36612cfa565b9061123c969296949394613c08565b855196879586957f5dcacd640000000000000000000000000000000000000000000000000000000087526004870193608093969591929660a08601976001600160a01b03809516875260208701526040860152606085015216910152565b038185305af1801561063d576112d2575b50807f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d80f35b6112f39060403d6040116112f9575b6112eb8183612dfb565b810190613662565b506112ab565b503d6112e1565b50346103555760206003193601126103555761040d61131d612ce4565b6113467f0000000000000000000000000000000000000000000000000000000000000000613678565b61134f81613d29565b6113576136b1565b612f12565b50346103555780600319360112610355576113967f0000000000000000000000000000000000000000000000000000000000000000613678565b61139e6136b1565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb600754166007557f300c7ca619eb846386aa0a6e5916ac2a41406448b0a2e99ba9ccafeb899015a560206040515f8152a180f35b503461035557611475602061140736612cfa565b90611416969296949394613c08565b60405196879586957f653eb3b00000000000000000000000000000000000000000000000000000000087526004870193608093969591929660a08601976001600160a01b03809516875260208701526040860152606085015216910152565b038185305af1801561063d576114ac5750807f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d80f35b602090813d83116114d0575b6114c28183612dfb565b8101031261104d575f6112ab565b503d6114b8565b5034610355578060031936011261035557602060405160028152f35b503461035557806003193601126103555761152d7f0000000000000000000000000000000000000000000000000000000000000000613678565b6115356136b1565b61040d61379c565b503461035557604060031936011261035557611557612ce4565b602435916001600160a01b0380841680940361104d576040926115997f0000000000000000000000000000000000000000000000000000000000000000613678565b168152600c60205220905f52602052602060405f2054604051908152f35b50346103555761129a60406115cb36612cfa565b906115da969296949394613c08565b855196879586957fe2a92b1a0000000000000000000000000000000000000000000000000000000087526004870193608093969591929660a08601976001600160a01b03809516875260208701526040860152606085015216910152565b5034610355576020806003193601126118da57611653612ce4565b907f000000000000000000000000000000000000000000000000000000000000000061167e81613678565b611686613d74565b6001600160a01b039283600a541633036118b2579380846024876116aa8399613d29565b60405197889384927fca4f28030000000000000000000000000000000000000000000000000000000084521696876004840152165afa9384156118a5578194611809575b508351926117046116fe856135d2565b946135d2565b90825b86518110156117db57808861171e6001938a613621565b511686865260069081855260408720815f5285526fffffffffffffffffffffffffffffffff60405f20548060801c611756868a613621565b5216611762848b613621565b5261176d838a613621565b51158015906117c8575b611784575b505001611707565b6117c191888852855260408720815f5285528660405f20556117bb6117a9848b613621565b516117b48589613621565b5190612eae565b90613e12565b5f8061177c565b506117d38387613621565b511515611777565b6117f8866118058486604051948594604086526040860190612d6b565b9184830390850152612d6b565b0390f35b9093503d8085833e61181b8183612dfb565b81019083818303126106045780519067ffffffffffffffff821161063557019080601f83011215610604578151611851816135ba565b9261185f6040519485612dfb565b818452858085019260051b820101928311610639578501905b82821061188957505050925f6116ee565b815188811681036118a1578152908501908501611878565b8780fd5b50604051903d90823e3d90fd5b6004857f23dada53000000000000000000000000000000000000000000000000000000008152fd5b5080fd5b5034610355578060031936011261035557602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461035557602060031936011261035557670de0b6b3a7640000600435116119455780f35b807f4c69ac5d0000000000000000000000000000000000000000000000000000000060049252fd5b50346103555780600319360112610355576119a77f0000000000000000000000000000000000000000000000000000000000000000613678565b60606119b1613909565b604051901515815263ffffffff807f00000000000000000000000000000000000000000000000000000000000000001660208301527f0000000000000000000000000000000000000000000000000000000000000000166040820152f35b503461035557602060031936011261035557600435907fffffffff0000000000000000000000000000000000000000000000000000000082168203610355576020611a5983613555565b604051908152f35b5034610355578060031936011261035557611a9b7f0000000000000000000000000000000000000000000000000000000000000000613678565b611aa36136b1565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00600954161760095561040d614078565b50346103555760206003193601126103555761040d611357612ce4565b50346103555761040d611b0536612d36565b91613fcf565b503461035557611b1a36612cfa565b9492611b489291927f0000000000000000000000000000000000000000000000000000000000000000613678565b611b50613d74565b611b58613f06565b611b60613c08565b6001600160a01b039586861693848652602097600e895280604088205416611e15576040517f38d52e0f00000000000000000000000000000000000000000000000000000000815289816004818a5afa908115611dc1578891611df8575b50168015611dcc57611c0690868852600e8a5260408820817fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905561081f8561414c565b611c18611c128561414c565b866141a1565b611c228484613c5d565b91858752600b89528260408820556040517f4cdad50600000000000000000000000000000000000000000000000000000000815285600482015289816024818a5afa8015611dc15785908990611d90575b611c7d9250612eae565b97611c8789613f3d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8f08901988911611d6357611cc59181611cc08b93613f74565b613fcf565b808710611d335750604080519283526020830193909352918101919091527f75c4dc5f23640eeba7d404d9165f515fc3d9e23a5c8b6e2d09b4b9da56ff00a990606090a27f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051908152f35b85604491887fda0cb07e000000000000000000000000000000000000000000000000000000008352600452602452fd5b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b50508981813d8311611dba575b611da78183612dfb565b8101031261104d5784611c7d9151611c73565b503d611d9d565b6040513d8a823e3d90fd5b602487877fd407f9c5000000000000000000000000000000000000000000000000000000008252600452fd5b611e0f91508a3d8c1161095e5761094f8183612dfb565b5f611bbe565b602487877f1690fa40000000000000000000000000000000000000000000000000000000008252600452fd5b503461035557604060031936011261035557611e5b612ce4565b60243590611e887f0000000000000000000000000000000000000000000000000000000000000000613678565b611e9181613d29565b670de0b6b3a76400008211610aa4576001600160a01b039081600a54163303610a7c571690818352826020526040832054670de0b5cad2bef0008211610a545781610a3f60209264174876e8007fe4d371097beea42453a37406e2aef4c04f3c548f84ac50e72578662c0dcd7354950490614293565b503461035557611f1636612cfa565b9490929193947f0000000000000000000000000000000000000000000000000000000000000000611f4681613678565b6001600160a01b038116330361232d57611f5e613d74565b611f6787613dc5565b32158080612320575b6122b8575b506001600160a01b0387168352600c602052604083206001600160a01b0383165f5260205260405f20548411612290576001600160a01b0387168352600b602052604083205495600d602052604084205496611ffd611fef89611fea896fffffffffffffffffffffffffffffffff8616612ebb565b612ece565b98611fea888460801c612ebb565b966001600160a01b038a168652600e6020526001600160a01b0360408720541692808a1061225c575080881061221f575061207b61209a9161203f8a85613e12565b612052896001600160a01b038d16613e12565b610839896120728c6fffffffffffffffffffffffffffffffff8516612f05565b9260801c612f05565b956001600160a01b038a168652600b602052866040872055848a613e52565b86612185575b50846120fc575b5050604080518581526020810185905280820193909352946001600160a01b0316917f44d97b36e99b590b3d2875aad3b167b1d7fb1e063f3f1325a1eeac76caee51139150606090a282519182526020820152f35b6001600160a01b0381163b15612181576001600160a01b03606488858381958160405198899788967fae6393290000000000000000000000000000000000000000000000000000000088521660048701521660248501528a6044850152165af1801561063d5761216d575b806120a7565b6121778291612d9e565b6103555780612167565b8280fd5b6001600160a01b0382163b1561221b57604051907fae63932900000000000000000000000000000000000000000000000000000000825260048201526001600160a01b03831660248201528660448201528381606481836001600160a01b0387165af18015612210579084916121fc575b506120a0565b61220590612d9e565b61218157825f6121f6565b6040513d86823e3d90fd5b8380fd5b85606491896001600160a01b038d7f8eda85e400000000000000000000000000000000000000000000000000000000855216600452602452604452fd5b866064918b867f8eda85e4000000000000000000000000000000000000000000000000000000008452600452602452604452fd5b6004837f98c5dbd6000000000000000000000000000000000000000000000000000000008152fd5b156122f8576001600160a01b0387168352600c602052604083206001600160a01b0383165f5260205260405f206122f0858254612eae565b90555f611f75565b6004837f67f84ab2000000000000000000000000000000000000000000000000000000008152fd5b5060016007541615611f70565b6024837f089676d500000000000000000000000000000000000000000000000000000000815233600452fd5b50346103555780600319360112610355576123937f0000000000000000000000000000000000000000000000000000000000000000613678565b6020600160075460021c166040519015158152f35b50346103555760206003193601126103555761040d6123c5612ce4565b6123ee7f0000000000000000000000000000000000000000000000000000000000000000613678565b6123f781613d29565b613994565b503461035557806003193601126103555760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b50346103555760206003193601126103555761040d612454612ce4565b6001600160a01b0381168352600160205260408320337fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055613aef565b503461035557602060031936011261035557604080916001600160a01b036124bc612ce4565b6124e57f0000000000000000000000000000000000000000000000000000000000000000613678565b168152600b60205220548151906fffffffffffffffffffffffffffffffff8116825260801c6020820152f35b5034610355578060031936011261035557602060405160088152f35b5034610355576020600319360112610355576004356001600160a01b0381168091036118da5761257c7f0000000000000000000000000000000000000000000000000000000000000000613678565b6125846136b1565b61258c613c08565b807fffffffffffffffffffffffff0000000000000000000000000000000000000000600a541617600a557f280a60b1e63c1774d397d35cce80eb80e51408ead755fb446e6f744ce98e5df08280a2807f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d80f35b50346103555760206003193601126103555761040d61261d612ce4565b610d2181613947565b503461035557806003193601126103555760206040516127108152f35b5034610355578060031936011261035557602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346103555760606003193601126103555761269e612ce4565b602435604435906001600160a01b0380931692838552602091600b835260408620549181612872575b5083612709575b90610839600b946126f46126fd946fffffffffffffffffffffffffffffffff8516612eae565b9260801c612eae565b92845252604082205580f35b6040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810185905283816064818a8a5af1801561283a57612845575b50848652600883526040862061276d858254612eae565b90556040517f4cdad5060000000000000000000000000000000000000000000000000000000081528460048201528381602481895afa90811561283a578791612806575b50600b946126f46126fd949361083993898b52600d885260408b206127d7828254612eae565b9055898b52600c885260408b20335f5288526127f860405f20918254612eae565b9055939450509450506126ce565b929190508383813d8311612833575b61281f8183612dfb565b8101031261104d579151909190600b6127b1565b503d612815565b6040513d89823e3d90fd5b61286490843d861161286b575b61285c8183612dfb565b810190612e5b565b505f612756565b503d612852565b6040517f38d52e0f000000000000000000000000000000000000000000000000000000009081815285816004818b5afa9081156129b45789916129bf575b506040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101859052908690829060649082908d9088165af180156129b457612997575b5060405190815284816004818a5afa908115611dc157889161297a575b501686526008835260408620612939828254612eae565b9055848652600d835260408620612951828254612eae565b9055848652600c835260408620335f52835260405f20612972828254612eae565b90555f6126c7565b6129919150853d871161095e5761094f8183612dfb565b5f612922565b6129ad90863d881161286b5761285c8183612dfb565b505f612905565b6040513d8b823e3d90fd5b6129d69150863d881161095e5761094f8183612dfb565b5f6128b0565b503461104d57602060031936011261104d576129f6612ce4565b6129fe613c08565b303b1561104d576001600160a01b03604051917fbffb78b20000000000000000000000000000000000000000000000000000000083521660048201525f8160248183305af18015612a8557612a745750807f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d80f35b612a7e9150612d9e565b5f5f6112ab565b6040513d5f823e3d90fd5b3461104d57602060031936011261104d57612aee612aac612ce4565b6001600160a01b0381165f52600160205260405f20337fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055613994565b005b3461104d57602060031936011261104d57612aee612b0c612ce4565b613947565b3461104d575f60031936011261104d57612b4a7f0000000000000000000000000000000000000000000000000000000000000000613678565b612b526136b1565b612aee61387f565b3461104d575f60031936011261104d57612b937f0000000000000000000000000000000000000000000000000000000000000000613678565b6020612b9d613909565b6040519015158152f35b3461104d575f60031936011261104d57612aee61379c565b3461104d57602060031936011261104d576004356001600160a01b0381169081810361104d57612c0e7f0000000000000000000000000000000000000000000000000000000000000000613678565b612c166136b1565b7fffffffffffffffffffffff0000000000000000000000000000000000000000ff74ffffffffffffffffffffffffffffffffffffffff006009549260081b169116176009557f94b979b6831a51293e2641426f97747feed46f17779fed9cd18d1ecefcfe92ef5f80a2005b3461104d57602060031936011261104d576020612c9c612ce4565b612cc57f0000000000000000000000000000000000000000000000000000000000000000613678565b6001600160a01b038091165f52600e825260405f205416604051908152f35b600435906001600160a01b038216820361104d57565b60031960a091011261104d576001600160a01b03600435818116810361104d5791602435916044359160643591608435908116810361104d5790565b600319606091011261104d576001600160a01b0390600435828116810361104d5791602435908116810361104d579060443590565b9081518082526020808093019301915f5b828110612d8a575050505090565b835185529381019392810192600101612d7c565b67ffffffffffffffff8111612db257604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6060810190811067ffffffffffffffff821117612db257604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117612db257604052565b9081602091031261104d57516001600160a01b038116810361104d5790565b9081602091031261104d5751801515810361104d5790565b9060288201809211612e8157565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b91908201809211612e8157565b81810292918115918404141715612e8157565b8115612ed8570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b91908203918211612e8157565b906001600160a01b0382165f525f602052600160405f205460031c161561352057612f3b613c08565b6040519160e0830183811067ffffffffffffffff821117612db2576040525f8352606060208401526060604084015260608084015260606080840152606060a0840152606060c08401526001600160a01b0381165f52600560205260405f205f60205260405f205490600460205260405f2090600360205260405f2080549387526040519060208286815201905f528160205f20915f5b8781106134fd5750612fe692500382612dfb565b6020870152612ff4836135ba565b6130016040519182612dfb565b8381527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061302e856135ba565b015f5b8181106134d45750506040870152613048836135d2565b6060870152613056836135d2565b6080870152855164ffffffffff61306c856135d2565b91605a1c165f5b85811061349857505060c087015261308a836135d2565b60a0870152855191600183811c169283613484575b5082613474575b5f5b8481106131a15750505050506001600160a01b0381165f52600560205260405f20905f5b6060850151805182101561311257906131006130ea82600194613621565b516130f98360808a0151613621565b5190613c5d565b815f528460205260405f2055016130cc565b5050919250505f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d6001600160a01b03165f8181526020818152604080832080547ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7169055519182527fc2354cc2f78ea57777e55ddd43a7f22b112ce98868596880edaeb22b4f9c73a991a2565b6001600160a01b036131b78260208b0151613621565b51165f528160205260405f2090604051916131d183612ddf565b5460ff908181166131e1816143b3565b84526001600160a01b038160081c16602085015260a81c1615156040830152805f528360205260405f2054916132278260408c0151836132218383613621565b52613621565b508051613233816143b3565b61323c816143b3565b806133b85750670de0b6b3a76400005b61325a8360a08d0151613621565b526132786fffffffffffffffffffffffffffffffff8416838c61440d565b85156133ae57604081015115159081613390575b5061329d575b600191505b016130a8565b886132a881516143ea565b6132b6836060840151613621565b519360801c6132ca8460805f950151613621565b51818111613301575b505050600192816132e6575b5050613292565b6132fa916132f391612f05565b828b61440d565b5f806132df565b61330c935003612ebb565b91670de0b6b3a7640000926001847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830104019015150261336b8b6133648560a061335b8260c0860151613621565b51930151613621565b5190612ebb565b8185810204851482151715612e81576001946133879202612ece565b90925f806132d3565b600191505161339e816143b3565b6133a7816143b3565b145f61328c565b5060019150613297565b806133c46001926143b3565b0361344c57600460206001600160a01b038184015116604051928380927f679aefce0000000000000000000000000000000000000000000000000000000082525afa908115612a85575f9161341a575b5061324c565b90506020813d602011613444575b8161343560209383612dfb565b8101031261104d57515f613414565b3d9150613428565b7fdf450632000000000000000000000000000000000000000000000000000000005f5260045ffd5b865160031c6001161592506130a6565b61348f9193506143ea565b1515915f61309f565b600581029080820460051481151715612e8157604d601f84841c1611612e8157601f836001931c16600a0a6134cd8286613621565b5201613073565b6020906040516134e381612ddf565b5f81525f838201525f604082015282828601015201613031565b91506001602081926001600160a01b038654168152019301910191839192612fd2565b6001600160a01b03827fef029adf000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526135b481612ddf565b51902090565b67ffffffffffffffff8111612db25760051b60200190565b906135dc826135ba565b6135e96040519182612dfb565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061361782946135ba565b0190602036910137565b80518210156136355760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b919082604091031261104d576020825192015190565b6001600160a01b0316300361368957565b7f9fd25b36000000000000000000000000000000000000000000000000000000005f5260045ffd5b61373b60206136e27fffffffff000000000000000000000000000000000000000000000000000000005f3516613555565b6009546040517f9be2a88400000000000000000000000000000000000000000000000000000000815260048101929092523360248301523060448301529092839160081c6001600160a01b031690829081906064820190565b03915afa908115612a85575f9161377d575b501561375557565b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b613796915060203d60201161286b5761285c8183612dfb565b5f61374d565b6137a4613909565b156137d1577fda9f8b34000000000000000000000000000000000000000000000000000000005f5260045ffd5b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000164210156138575760027ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60075416176007557fe0629fe656e45ad7fd63a24b899da368690024c07043b88e57aee5095b1d3d02602060405160018152a1565b7f0e4460b7000000000000000000000000000000000000000000000000000000005f5260045ffd5b613887613909565b156138e1577fe0629fe656e45ad7fd63a24b899da368690024c07043b88e57aee5095b1d3d0260205f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd60075416600755604051908152a1565b7ff7ff4dca000000000000000000000000000000000000000000000000000000005f5260045ffd5b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000164211158061393b5790565b506001600754811c1690565b6001600160a01b0316805f525f602052600160405f205460031c166139695750565b7f346d7607000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6139b86001600160a01b039182811692835f52600160205260405f20541690614130565b805f525f60205260405f205460018160021c1663ffffffff9081836139de610cf9605a90565b1c1681613ab7575b5015613a1857827fd971f597000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b81613a23605a612e73565b1c16421015613a8b577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb600491835f525f602052161760405f20557f57e20448028297190122571be7cb6c1b1ef85730c673f7c72f533c8662419aa7602060405160018152a2565b507feb5a1217000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9050817f00000000000000000000000000000000000000000000000000000000000000001601818111612e815781164211155f6139e6565b613b136001600160a01b039182811692835f52600160205260405f20541690614130565b805f525f60205260405f205460018160021c1663ffffffff8083613b38610cf9605a90565b1c1682613bcf575b505015613ba35760207f57e20448028297190122571be7cb6c1b1ef85730c673f7c72f533c8662419aa7917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb5f91858352828452166040822055604051908152a2565b507ffdcd6894000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b908092507f00000000000000000000000000000000000000000000000000000000000000001601818111612e8157164211155f80613b40565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c613c35576001905d565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b6fffffffffffffffffffffffffffffffff808211908115613cb5575b50613c8d57613c8a9160801b612eae565b90565b7f89560ca1000000000000000000000000000000000000000000000000000000005f5260045ffd5b905082115f613c79565b6001600160a01b0316805f525f60205260405f2060087ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff78254161790557fc2354cc2f78ea57777e55ddd43a7f22b112ce98868596880edaeb22b4f9c73a9602060405160018152a2565b6001600160a01b0316805f525f602052600160405f20541615613d495750565b7f9e51bd5c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f00000000000000000000000000000000000000000000000000000000000000005c15613d9d57565b7fc09ba736000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160a01b0380911690815f52600e60205260405f20541615613de75750565b7f85f41299000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90613e1c9061414c565b907f80000000000000000000000000000000000000000000000000000000000000008214612e8157613e50915f03906141a1565b565b91906001600160a01b03809116928315613ede577f4e09f7f7fc37ce2897800e2c2a9099565edb0a133d19d84a6871b3530af8846b916020911692835f52600d8252613ea28160405f2054612f05565b613eab81613f3d565b845f52600d835260405f2055600c825260405f20855f52825260405f20613ed3828254612f05565b9055604051908152a3565b7f586d06df000000000000000000000000000000000000000000000000000000005f5260045ffd5b600160075460021c16613f1557565b7f0f27df09000000000000000000000000000000000000000000000000000000005f5260045ffd5b6127108110613f495750565b7f34bdbfaa000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6001600160a01b035f9116808252600d6020527fd66f031d33381c6408f0b32c884461e5de3df8808399b6f3a3d86b1368f8ec346020612710806040862055600c8252604085208580528252806040862055604051908152a3565b91906001600160a01b03809116928315614050577fd66f031d33381c6408f0b32c884461e5de3df8808399b6f3a3d86b1368f8ec34916020911692835f52600d825261401f8160405f2054612eae565b61402881613f3d565b845f52600d835260405f2055600c825260405f20855f52825260405f20613ed3828254612eae565b7fdbe6b10e000000000000000000000000000000000000000000000000000000005f5260045ffd5b60017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60075416176007557fbd204090fd387f08e3076528bf09b4fc99d8100d749eace96c06002d3fedc6255f80a1565b8215614108576001916140db91612ebb565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff830104019015150290565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b906001600160a01b0316331461414957613e509061431c565b50565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116141765790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b811561428f576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000009116805f528160205260405f205c8381019384125f8212908015821691151617612e81578361425657507f0000000000000000000000000000000000000000000000000000000000000000805c907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8201918211612e81575d5b5f5260205260405f205d565b61424a577f0000000000000000000000000000000000000000000000000000000000000000805c9060018201809211612e81575d61424a565b5050565b908060181c610faf57602a1b9062ffffff602a1b19161790565b7fb4120f14000000000000000000000000000000000000000000000000000000005f5260045ffd5b90610100808410156142ad57838103908111612e81578060ff105f14614317575060ff5b6018116142ad578060181c610faf5762ffffff90831b921b19161790565b6142f9565b602061373b9161434e7fffffffff000000000000000000000000000000000000000000000000000000005f3516613555565b6001600160a01b0360095460081c16906040518095819482937f9be2a884000000000000000000000000000000000000000000000000000000008452339060048501916040919493606084019584526001600160a01b03809216602085015216910152565b600211156143bd57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b62ffffff9060421c1664174876e80090818102918183041490151715612e815790565b91906080670de0b6b3a764000061445d61446694806144308660608a0151613621565b526144586144428660c08a0151613621565b516144518760a08b0151613621565b5192612ebb565b612ebb565b04930151613621565b5256fea26469706673582212206e728428bc4d867277ca071b601ad67c283dec56f632dd209129f14cc8746a6264736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x9F JUMPI JUMPDEST CALLDATASIZE ISZERO PUSH2 0x77 JUMPI CALLVALUE PUSH2 0x77 JUMPI PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F7420696D706C656D656E7465640000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST PUSH32 0xF223889600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x387587D EQ PUSH2 0x2C81 JUMPI DUP1 PUSH4 0x58A628F EQ PUSH2 0x2BBF JUMPI DUP1 PUSH4 0x71D8A02 EQ PUSH2 0x2BA7 JUMPI DUP1 PUSH4 0x98401F5 EQ PUSH2 0x2B5A JUMPI DUP1 PUSH4 0xB7562BE EQ PUSH2 0x2B11 JUMPI DUP1 PUSH4 0xB9DF1F6 EQ PUSH2 0x2AF0 JUMPI DUP1 PUSH4 0x1558356E EQ PUSH2 0x2A90 JUMPI DUP1 PUSH4 0x16DF26CB EQ PUSH2 0x29DC JUMPI DUP1 PUSH4 0x1F568EA3 EQ PUSH2 0x2684 JUMPI DUP1 PUSH4 0x20C1FB7A EQ PUSH2 0x2643 JUMPI DUP1 PUSH4 0x26A8A991 EQ PUSH2 0x2626 JUMPI DUP1 PUSH4 0x27521D0C EQ PUSH2 0x2600 JUMPI DUP1 PUSH4 0x2D771389 EQ PUSH2 0x252D JUMPI DUP1 PUSH4 0x2E42F4D5 EQ PUSH2 0x2511 JUMPI DUP1 PUSH4 0x4021FE0F EQ PUSH2 0x2496 JUMPI DUP1 PUSH4 0x52B9E33D EQ PUSH2 0x2437 JUMPI DUP1 PUSH4 0x53956AA2 EQ PUSH2 0x23FC JUMPI DUP1 PUSH4 0x55ACA1EC EQ PUSH2 0x23A8 JUMPI DUP1 PUSH4 0x55CBA7FE EQ PUSH2 0x2359 JUMPI DUP1 PUSH4 0x5DCACD64 EQ PUSH2 0x1F07 JUMPI DUP1 PUSH4 0x5E0B06F4 EQ PUSH2 0x1E41 JUMPI DUP1 PUSH4 0x653EB3B0 EQ PUSH2 0x1B0B JUMPI DUP1 PUSH4 0x6B230291 EQ PUSH2 0x1AF3 JUMPI DUP1 PUSH4 0x7578ABB9 EQ PUSH2 0x1AD6 JUMPI DUP1 PUSH4 0x821440F2 EQ PUSH2 0x1A61 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x1A0F JUMPI DUP1 PUSH4 0x85C8C015 EQ PUSH2 0x196D JUMPI DUP1 PUSH4 0x88E5101A EQ PUSH2 0x191F JUMPI DUP1 PUSH4 0x8A8D123A EQ PUSH2 0x18DE JUMPI DUP1 PUSH4 0x8F4AB9CA EQ PUSH2 0x1638 JUMPI DUP1 PUSH4 0x9260D920 EQ PUSH2 0x15B7 JUMPI DUP1 PUSH4 0x9385E39A EQ PUSH2 0x153D JUMPI DUP1 PUSH4 0x9E0879C2 EQ PUSH2 0x14F3 JUMPI DUP1 PUSH4 0xA8175B27 EQ PUSH2 0x14D7 JUMPI DUP1 PUSH4 0xB61398CD EQ PUSH2 0x13F3 JUMPI DUP1 PUSH4 0xB9212B49 EQ PUSH2 0x135C JUMPI DUP1 PUSH4 0xBFFB78B2 EQ PUSH2 0x1300 JUMPI DUP1 PUSH4 0xC7B3B3A9 EQ PUSH2 0x1219 JUMPI DUP1 PUSH4 0xCC671FF7 EQ PUSH2 0x1200 JUMPI DUP1 PUSH4 0xCD51C12F EQ PUSH2 0x11BF JUMPI DUP1 PUSH4 0xD0965A6B EQ PUSH2 0x11A1 JUMPI DUP1 PUSH4 0xD15126BA EQ PUSH2 0xDDF JUMPI DUP1 PUSH4 0xD2C725E0 EQ PUSH2 0xDA0 JUMPI DUP1 PUSH4 0xDC3F574E EQ PUSH2 0xC74 JUMPI DUP1 PUSH4 0xDE1A36A6 EQ PUSH2 0xC2A JUMPI DUP1 PUSH4 0xE085C5A8 EQ PUSH2 0xB8F JUMPI DUP1 PUSH4 0xE0D55605 EQ PUSH2 0xACC JUMPI DUP1 PUSH4 0xE253670A EQ PUSH2 0x970 JUMPI DUP1 PUSH4 0xE2A92B1A EQ PUSH2 0x6BD JUMPI DUP1 PUSH4 0xE2CB0BA0 EQ PUSH2 0x682 JUMPI DUP1 PUSH4 0xE8338894 EQ PUSH2 0x66A JUMPI DUP1 PUSH4 0xE99AC9A3 EQ PUSH2 0x648 JUMPI DUP1 PUSH4 0xEBC7955C EQ PUSH2 0x410 JUMPI DUP1 PUSH4 0xF21C38CD EQ PUSH2 0x3B9 JUMPI DUP1 PUSH4 0xF2784E07 EQ PUSH2 0x358 JUMPI PUSH4 0xFBFA77CF EQ PUSH2 0x312 JUMPI POP PUSH2 0xE JUMP JUMPDEST CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x40 PUSH1 0x20 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x37F PUSH2 0x2CE4 JUMP JUMPDEST PUSH2 0x3A8 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST AND DUP2 MSTORE PUSH1 0xD DUP4 MSTORE KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x40D PUSH2 0x3D6 PUSH2 0x2CE4 JUMP JUMPDEST PUSH2 0x3FF PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0x408 DUP2 PUSH2 0x3D29 JUMP JUMPDEST PUSH2 0x3AEF JUMP JUMPDEST DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x1F SWAP1 PUSH2 0x42D PUSH2 0x2CE4 JUMP JUMPDEST SWAP1 PUSH32 0x0 SWAP2 PUSH2 0x459 DUP4 PUSH2 0x3678 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x5DCACD6400000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP1 DUP4 ADD SWAP2 DUP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SWAP1 SWAP4 AND PUSH1 0x24 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLDATALOAD PUSH1 0x44 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLDATALOAD PUSH1 0x64 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLDATALOAD PUSH1 0x84 DUP4 ADD MSTORE CALLER PUSH1 0xA4 DUP1 DUP5 ADD SWAP2 SWAP1 SWAP2 MSTORE DUP3 MSTORE SWAP2 SWAP4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP3 DUP5 SWAP3 SWAP1 SWAP2 SWAP1 PUSH2 0x4F4 PUSH1 0xC4 DUP3 PUSH2 0x2DFB JUMP JUMPDEST DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x44 DUP10 DUP9 PUSH1 0x40 MLOAD SWAP13 DUP14 SWAP9 DUP10 SWAP8 DUP9 SWAP5 PUSH32 0x48C8949100000000000000000000000000000000000000000000000000000000 DUP7 MSTORE PUSH1 0x4 DUP7 ADD MSTORE MLOAD DUP1 SWAP2 DUP2 PUSH1 0x24 DUP8 ADD MSTORE DUP7 DUP7 ADD MCOPY DUP7 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND DUP2 ADD SUB ADD SWAP4 AND GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x63D JUMPI DUP3 SWAP5 PUSH2 0x580 JUMPI JUMPDEST PUSH1 0x40 DUP5 PUSH2 0x574 DUP8 DUP3 DUP1 DUP3 MLOAD DUP4 ADD ADD SWAP2 ADD PUSH2 0x3662 JUMP JUMPDEST SWAP1 SWAP2 DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE RETURN JUMPDEST SWAP1 SWAP2 SWAP4 POP RETURNDATASIZE DUP1 DUP6 DUP4 RETURNDATACOPY PUSH2 0x593 DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST DUP2 ADD DUP4 DUP3 DUP3 SUB SLT PUSH2 0x604 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP3 GT PUSH2 0x639 JUMPI ADD SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x635 JUMPI DUP2 MLOAD SWAP3 DUP4 GT PUSH2 0x608 JUMPI PUSH2 0x5DB DUP6 PUSH1 0x40 MLOAD SWAP6 PUSH1 0x1F DUP7 ADD AND ADD DUP6 PUSH2 0x2DFB JUMP JUMPDEST DUP3 DUP5 MSTORE DUP5 DUP4 DUP4 ADD ADD GT PUSH2 0x604 JUMPI SWAP4 DUP4 DUP3 PUSH2 0x574 SWAP5 SWAP4 DUP3 PUSH1 0x40 SWAP9 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP3 PUSH0 PUSH2 0x55F JUMP JUMPDEST DUP5 DUP1 REVERT JUMPDEST PUSH1 0x24 DUP7 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP7 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x40D PUSH2 0x665 PUSH2 0x2CE4 JUMP JUMPDEST PUSH2 0x3F74 JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH2 0x40D PUSH2 0x67C CALLDATASIZE PUSH2 0x2D36 JUMP JUMPDEST SWAP2 PUSH2 0x3E52 JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH2 0x6CC CALLDATASIZE PUSH2 0x2CFA JUMP JUMPDEST PUSH2 0x6FA SWAP6 SWAP2 SWAP3 SWAP5 SWAP6 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0x702 PUSH2 0x3D74 JUMP JUMPDEST PUSH2 0x70A PUSH2 0x3F06 JUMP JUMPDEST PUSH2 0x713 DUP7 PUSH2 0x3DC5 JUMP JUMPDEST PUSH2 0x71B PUSH2 0x3C08 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP8 AND SWAP2 PUSH1 0x40 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP6 DUP7 DUP3 PUSH1 0x4 DUP2 DUP9 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x965 JUMPI DUP7 SWAP3 PUSH2 0x936 JUMPI JUMPDEST POP DUP5 DUP7 MSTORE PUSH1 0xE DUP8 MSTORE DUP1 PUSH1 0x40 DUP8 KECCAK256 SLOAD AND SWAP2 AND DUP1 SWAP2 SUB PUSH2 0x906 JUMPI DUP4 DUP6 MSTORE PUSH1 0xB DUP7 MSTORE PUSH1 0x40 DUP6 KECCAK256 SLOAD SWAP8 PUSH1 0xD DUP8 MSTORE PUSH1 0x40 DUP7 KECCAK256 SLOAD SWAP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND SWAP2 PUSH2 0x7C4 PUSH2 0x7B8 DUP6 DUP9 DUP7 PUSH2 0x40C9 JUMP JUMPDEST SWAP12 PUSH1 0x80 SHR SWAP5 DUP8 DUP7 PUSH2 0x40C9 JUMP JUMPDEST SWAP10 DUP1 DUP13 GT PUSH2 0x8D2 JUMPI POP DUP1 DUP11 GT PUSH2 0x89E JUMPI POP SWAP4 PUSH2 0x86F SWAP4 PUSH2 0x83F PUSH1 0x40 SWAP13 SWAP5 PUSH2 0x839 DUP13 PUSH2 0x833 DUP16 PUSH2 0x851 SWAP9 PUSH2 0x82E DUP15 PUSH2 0x825 PUSH32 0x75C4DC5F23640EEBA7D404D9165F515FC3D9E23A5C8B6E2D09B4B9DA56FF00A9 SWAP16 PUSH2 0x81F DUP7 PUSH2 0x414C JUMP JUMPDEST SWAP1 PUSH2 0x41A1 JUMP JUMPDEST PUSH2 0x81F DUP7 PUSH2 0x414C JUMP JUMPDEST PUSH2 0x2EAE JUMP JUMPDEST SWAP3 PUSH2 0x2EAE JUMP JUMPDEST SWAP1 PUSH2 0x3C5D JUMP JUMPDEST SWAP4 DUP8 DUP10 MSTORE PUSH1 0xB DUP11 MSTORE DUP5 DUP14 DUP11 KECCAK256 SSTORE PUSH2 0x3FCF JUMP JUMPDEST DUP9 MLOAD SWAP2 DUP3 SWAP2 DUP9 DUP11 DUP5 PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 PUSH1 0x60 DUP3 ADD SWAP6 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP4 MLOAD SWAP3 DUP4 MSTORE DUP3 ADD MSTORE RETURN JUMPDEST DUP8 PUSH1 0x64 SWAP2 DUP12 DUP10 PUSH32 0x8EDA85E400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE REVERT JUMPDEST DUP9 PUSH1 0x64 SWAP2 DUP14 DUP6 PUSH32 0x8EDA85E400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE REVERT JUMPDEST DUP5 PUSH1 0x44 SWAP2 DUP6 PUSH32 0x36B18D0900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE REVERT JUMPDEST PUSH2 0x957 SWAP2 SWAP3 POP DUP8 RETURNDATASIZE DUP10 GT PUSH2 0x95E JUMPI JUMPDEST PUSH2 0x94F DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2E3C JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x767 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x945 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP9 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x98A PUSH2 0x2CE4 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x9B7 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0x9C0 DUP2 PUSH2 0x3D29 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP3 GT PUSH2 0xAA4 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH1 0xA SLOAD AND CALLER SUB PUSH2 0xA7C JUMPI AND SWAP1 DUP2 DUP4 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP4 KECCAK256 SLOAD PUSH8 0xDE0B5CAD2BEF000 DUP3 GT PUSH2 0xA54 JUMPI PUSH32 0x606EB97D83164BD6B200D638CD49C14C65D94D4F2C674CFD85E24E0E202C3CA5 SWAP2 PUSH2 0xA3F PUSH1 0x20 SWAP3 PUSH2 0xA30 PUSH1 0x42 SWAP1 JUMP JUMPDEST SWAP1 PUSH5 0x174876E800 DUP5 DIV SWAP1 PUSH2 0x42D5 JUMP JUMPDEST DUP5 DUP7 MSTORE DUP6 DUP4 MSTORE PUSH1 0x40 DUP7 KECCAK256 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 DUP1 RETURN JUMPDEST PUSH1 0x4 DUP5 PUSH32 0x746E594000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP5 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP4 PUSH32 0x4C69AC5D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0xB06 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0xB0E PUSH2 0x36B1 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x9 SLOAD AND PUSH2 0xB67 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE PUSH1 0x7 SLOAD AND PUSH1 0x7 SSTORE PUSH32 0x91D7478835F2B5ADC315F5AAD920F4A7F0A02F7FDDF3042D17B2C80168EA17F5 DUP2 DUP1 LOG1 DUP1 RETURN JUMPDEST DUP1 PUSH32 0x69F8CBC00000000000000000000000000000000000000000000000000000000 PUSH1 0x4 SWAP3 MSTORE REVERT JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0xBC9 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0xBD1 PUSH2 0x36B1 JUMP JUMPDEST PUSH1 0x4 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB PUSH1 0x7 SLOAD AND OR PUSH1 0x7 SSTORE PUSH32 0x300C7CA619EB846386AA0A6E5916AC2A41406448B0A2E99BA9CCAFEB899015A5 PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE LOG1 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0xC64 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0xC6C PUSH2 0x36B1 JUMP JUMPDEST PUSH2 0x40D PUSH2 0x4078 JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0xC8E PUSH2 0x2CE4 JUMP JUMPDEST SWAP1 PUSH2 0xCB8 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0xCC1 DUP3 PUSH2 0x3D29 JUMP JUMPDEST PUSH2 0xCCA DUP3 PUSH2 0x3947 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP2 MSTORE DUP1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP2 KECCAK256 SLOAD SWAP2 PUSH1 0x1 DUP4 PUSH1 0x2 SHR AND PUSH4 0xFFFFFFFF DUP1 SWAP5 PUSH2 0xCFE PUSH2 0xCF9 PUSH1 0x5A SWAP1 JUMP JUMPDEST PUSH2 0x2E73 JUMP JUMPDEST SHR AND DUP2 PUSH2 0xD35 JUMPI JUMPDEST POP PUSH2 0x40D SWAP3 SWAP4 POP ISZERO DUP1 PUSH2 0xD26 JUMPI JUMPDEST ISZERO PUSH2 0x3CBF JUMPI PUSH2 0xD21 PUSH2 0x36B1 JUMP JUMPDEST PUSH2 0x3CBF JUMP JUMPDEST POP PUSH2 0xD2F PUSH2 0x3909 JUMP JUMPDEST ISZERO PUSH2 0xD14 JUMP JUMPDEST SWAP1 POP DUP4 PUSH32 0x0 AND ADD SWAP3 DUP1 DUP5 GT PUSH2 0xD73 JUMPI PUSH2 0x40D SWAP3 SWAP4 AND TIMESTAMP GT ISZERO DUP4 SWAP3 PUSH2 0xD06 JUMP JUMPDEST PUSH1 0x24 DUP4 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE REVERT JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x20 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0xDF9 PUSH2 0x2CE4 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0xE25 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0xE2E DUP3 PUSH2 0x3D29 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP3 DUP4 DUP6 MSTORE PUSH1 0x20 SWAP2 PUSH1 0x1 DUP4 MSTORE PUSH1 0x1 PUSH1 0x40 DUP8 KECCAK256 ADD SLOAD AND SWAP1 DUP2 ISZERO PUSH0 EQ PUSH2 0x1172 JUMPI PUSH2 0xE60 SWAP2 POP PUSH2 0x431C JUMP JUMPDEST PUSH2 0xE68 PUSH2 0x3909 JUMP JUMPDEST PUSH2 0x114A JUMPI DUP3 DUP5 MSTORE DUP4 DUP2 MSTORE PUSH1 0x40 DUP5 KECCAK256 SLOAD PUSH1 0x1 DUP2 PUSH1 0x2 SHR AND SWAP1 PUSH4 0xFFFFFFFF DUP1 SWAP2 PUSH2 0xE91 PUSH2 0xCF9 PUSH1 0x5A SWAP1 JUMP JUMPDEST SHR AND DUP3 PUSH2 0x10E4 JUMPI JUMPDEST POP POP PUSH2 0x10B8 JUMPI PUSH1 0x40 MLOAD PUSH32 0xCE20ECE700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP2 PUSH1 0x4 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1058 JUMPI DUP6 SWAP2 PUSH2 0x108B JUMPI JUMPDEST POP DUP3 LT PUSH2 0x1063 JUMPI PUSH1 0x40 MLOAD PUSH32 0x654CF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP2 PUSH1 0x4 DUP2 DUP8 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1058 JUMPI DUP6 SWAP2 PUSH2 0x1027 JUMPI JUMPDEST POP DUP3 GT PUSH2 0xFFF JUMPI DUP3 DUP5 MSTORE DUP4 DUP2 MSTORE PUSH1 0x40 DUP5 KECCAK256 SLOAD SWAP2 PUSH8 0xDE0B5CAD2BEF000 DUP2 GT PUSH2 0xFD7 JUMPI PUSH5 0x174876E800 DUP2 DIV SWAP3 DUP4 PUSH1 0x18 SHR PUSH2 0xFAF JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC000003FFFF PUSH32 0x89D41522342FABAC1471CA6073A5623E5CAF367B03CA6E9A001478D0CF8BE4A1 SWAP5 DUP7 DUP9 MSTORE DUP8 DUP6 MSTORE PUSH1 0x12 SHL SWAP2 AND OR PUSH1 0x40 DUP7 KECCAK256 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 DUP1 RETURN JUMPDEST PUSH32 0xE4337C0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x4 DUP6 PUSH32 0x746E594000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP5 PUSH32 0x7F47834B00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST SWAP1 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1051 JUMPI JUMPDEST PUSH2 0x103E DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x104D JUMPI MLOAD PUSH0 PUSH2 0xF1E JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x1034 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP8 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP5 PUSH32 0xBFB2068800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST SWAP1 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x10B1 JUMPI JUMPDEST PUSH2 0x10A2 DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x104D JUMPI MLOAD PUSH0 PUSH2 0xEDB JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1098 JUMP JUMPDEST PUSH1 0x24 DUP5 DUP5 PUSH32 0xD971F59700000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 MSTORE REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP PUSH32 0x0 AND ADD DUP2 DUP2 GT PUSH2 0x111D JUMPI AND TIMESTAMP GT ISZERO PUSH0 DUP1 PUSH2 0xE99 JUMP JUMPDEST PUSH1 0x24 DUP7 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP5 PUSH32 0xDA9F8B3400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP CALLER EQ PUSH2 0xE60 JUMPI PUSH1 0x4 DUP5 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH3 0xF4240 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x40D PUSH2 0x387F JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH2 0x129A PUSH1 0x40 PUSH2 0x122D CALLDATASIZE PUSH2 0x2CFA JUMP JUMPDEST SWAP1 PUSH2 0x123C SWAP7 SWAP3 SWAP7 SWAP5 SWAP4 SWAP5 PUSH2 0x3C08 JUMP JUMPDEST DUP6 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP6 PUSH32 0x5DCACD6400000000000000000000000000000000000000000000000000000000 DUP8 MSTORE PUSH1 0x4 DUP8 ADD SWAP4 PUSH1 0x80 SWAP4 SWAP7 SWAP6 SWAP2 SWAP3 SWAP7 PUSH1 0xA0 DUP7 ADD SWAP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP6 AND DUP8 MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x60 DUP6 ADD MSTORE AND SWAP2 ADD MSTORE JUMP JUMPDEST SUB DUP2 DUP6 ADDRESS GAS CALL DUP1 ISZERO PUSH2 0x63D JUMPI PUSH2 0x12D2 JUMPI JUMPDEST POP DUP1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP1 RETURN JUMPDEST PUSH2 0x12F3 SWAP1 PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x12F9 JUMPI JUMPDEST PUSH2 0x12EB DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3662 JUMP JUMPDEST POP PUSH2 0x12AB JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x12E1 JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x40D PUSH2 0x131D PUSH2 0x2CE4 JUMP JUMPDEST PUSH2 0x1346 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0x134F DUP2 PUSH2 0x3D29 JUMP JUMPDEST PUSH2 0x1357 PUSH2 0x36B1 JUMP JUMPDEST PUSH2 0x2F12 JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x1396 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0x139E PUSH2 0x36B1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB PUSH1 0x7 SLOAD AND PUSH1 0x7 SSTORE PUSH32 0x300C7CA619EB846386AA0A6E5916AC2A41406448B0A2E99BA9CCAFEB899015A5 PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE LOG1 DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH2 0x1475 PUSH1 0x20 PUSH2 0x1407 CALLDATASIZE PUSH2 0x2CFA JUMP JUMPDEST SWAP1 PUSH2 0x1416 SWAP7 SWAP3 SWAP7 SWAP5 SWAP4 SWAP5 PUSH2 0x3C08 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP6 PUSH32 0x653EB3B000000000000000000000000000000000000000000000000000000000 DUP8 MSTORE PUSH1 0x4 DUP8 ADD SWAP4 PUSH1 0x80 SWAP4 SWAP7 SWAP6 SWAP2 SWAP3 SWAP7 PUSH1 0xA0 DUP7 ADD SWAP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP6 AND DUP8 MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x60 DUP6 ADD MSTORE AND SWAP2 ADD MSTORE JUMP JUMPDEST SUB DUP2 DUP6 ADDRESS GAS CALL DUP1 ISZERO PUSH2 0x63D JUMPI PUSH2 0x14AC JUMPI POP DUP1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP1 RETURN JUMPDEST PUSH1 0x20 SWAP1 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x14D0 JUMPI JUMPDEST PUSH2 0x14C2 DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x104D JUMPI PUSH0 PUSH2 0x12AB JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x14B8 JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x2 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x152D PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0x1535 PUSH2 0x36B1 JUMP JUMPDEST PUSH2 0x40D PUSH2 0x379C JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x1557 PUSH2 0x2CE4 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND DUP1 SWAP5 SUB PUSH2 0x104D JUMPI PUSH1 0x40 SWAP3 PUSH2 0x1599 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST AND DUP2 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH2 0x129A PUSH1 0x40 PUSH2 0x15CB CALLDATASIZE PUSH2 0x2CFA JUMP JUMPDEST SWAP1 PUSH2 0x15DA SWAP7 SWAP3 SWAP7 SWAP5 SWAP4 SWAP5 PUSH2 0x3C08 JUMP JUMPDEST DUP6 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP6 PUSH32 0xE2A92B1A00000000000000000000000000000000000000000000000000000000 DUP8 MSTORE PUSH1 0x4 DUP8 ADD SWAP4 PUSH1 0x80 SWAP4 SWAP7 SWAP6 SWAP2 SWAP3 SWAP7 PUSH1 0xA0 DUP7 ADD SWAP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP6 AND DUP8 MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x60 DUP6 ADD MSTORE AND SWAP2 ADD MSTORE JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x18DA JUMPI PUSH2 0x1653 PUSH2 0x2CE4 JUMP JUMPDEST SWAP1 PUSH32 0x0 PUSH2 0x167E DUP2 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0x1686 PUSH2 0x3D74 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 PUSH1 0xA SLOAD AND CALLER SUB PUSH2 0x18B2 JUMPI SWAP4 DUP1 DUP5 PUSH1 0x24 DUP8 PUSH2 0x16AA DUP4 SWAP10 PUSH2 0x3D29 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP8 DUP9 SWAP4 DUP5 SWAP3 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP5 MSTORE AND SWAP7 DUP8 PUSH1 0x4 DUP5 ADD MSTORE AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x18A5 JUMPI DUP2 SWAP5 PUSH2 0x1809 JUMPI JUMPDEST POP DUP4 MLOAD SWAP3 PUSH2 0x1704 PUSH2 0x16FE DUP6 PUSH2 0x35D2 JUMP JUMPDEST SWAP5 PUSH2 0x35D2 JUMP JUMPDEST SWAP1 DUP3 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x17DB JUMPI DUP1 DUP9 PUSH2 0x171E PUSH1 0x1 SWAP4 DUP11 PUSH2 0x3621 JUMP JUMPDEST MLOAD AND DUP7 DUP7 MSTORE PUSH1 0x6 SWAP1 DUP2 DUP6 MSTORE PUSH1 0x40 DUP8 KECCAK256 DUP2 PUSH0 MSTORE DUP6 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP1 PUSH1 0x80 SHR PUSH2 0x1756 DUP7 DUP11 PUSH2 0x3621 JUMP JUMPDEST MSTORE AND PUSH2 0x1762 DUP5 DUP12 PUSH2 0x3621 JUMP JUMPDEST MSTORE PUSH2 0x176D DUP4 DUP11 PUSH2 0x3621 JUMP JUMPDEST MLOAD ISZERO DUP1 ISZERO SWAP1 PUSH2 0x17C8 JUMPI JUMPDEST PUSH2 0x1784 JUMPI JUMPDEST POP POP ADD PUSH2 0x1707 JUMP JUMPDEST PUSH2 0x17C1 SWAP2 DUP9 DUP9 MSTORE DUP6 MSTORE PUSH1 0x40 DUP8 KECCAK256 DUP2 PUSH0 MSTORE DUP6 MSTORE DUP7 PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH2 0x17BB PUSH2 0x17A9 DUP5 DUP12 PUSH2 0x3621 JUMP JUMPDEST MLOAD PUSH2 0x17B4 DUP6 DUP10 PUSH2 0x3621 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x2EAE JUMP JUMPDEST SWAP1 PUSH2 0x3E12 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x177C JUMP JUMPDEST POP PUSH2 0x17D3 DUP4 DUP8 PUSH2 0x3621 JUMP JUMPDEST MLOAD ISZERO ISZERO PUSH2 0x1777 JUMP JUMPDEST PUSH2 0x17F8 DUP7 PUSH2 0x1805 DUP5 DUP7 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP5 PUSH1 0x40 DUP7 MSTORE PUSH1 0x40 DUP7 ADD SWAP1 PUSH2 0x2D6B JUMP JUMPDEST SWAP2 DUP5 DUP4 SUB SWAP1 DUP6 ADD MSTORE PUSH2 0x2D6B JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST SWAP1 SWAP4 POP RETURNDATASIZE DUP1 DUP6 DUP4 RETURNDATACOPY PUSH2 0x181B DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST DUP2 ADD SWAP1 DUP4 DUP2 DUP4 SUB SLT PUSH2 0x604 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x635 JUMPI ADD SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x604 JUMPI DUP2 MLOAD PUSH2 0x1851 DUP2 PUSH2 0x35BA JUMP JUMPDEST SWAP3 PUSH2 0x185F PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x2DFB JUMP JUMPDEST DUP2 DUP5 MSTORE DUP6 DUP1 DUP6 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x639 JUMPI DUP6 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1889 JUMPI POP POP POP SWAP3 PUSH0 PUSH2 0x16EE JUMP JUMPDEST DUP2 MLOAD DUP9 DUP2 AND DUP2 SUB PUSH2 0x18A1 JUMPI DUP2 MSTORE SWAP1 DUP6 ADD SWAP1 DUP6 ADD PUSH2 0x1878 JUMP JUMPDEST DUP8 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x4 DUP6 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH8 0xDE0B6B3A7640000 PUSH1 0x4 CALLDATALOAD GT PUSH2 0x1945 JUMPI DUP1 RETURN JUMPDEST DUP1 PUSH32 0x4C69AC5D00000000000000000000000000000000000000000000000000000000 PUSH1 0x4 SWAP3 MSTORE REVERT JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x19A7 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x19B1 PUSH2 0x3909 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH4 0xFFFFFFFF DUP1 PUSH32 0x0 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH32 0x0 AND PUSH1 0x40 DUP3 ADD MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x355 JUMPI PUSH1 0x20 PUSH2 0x1A59 DUP4 PUSH2 0x3555 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x1A9B PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0x1AA3 PUSH2 0x36B1 JUMP JUMPDEST PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x9 SLOAD AND OR PUSH1 0x9 SSTORE PUSH2 0x40D PUSH2 0x4078 JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x40D PUSH2 0x1357 PUSH2 0x2CE4 JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH2 0x40D PUSH2 0x1B05 CALLDATASIZE PUSH2 0x2D36 JUMP JUMPDEST SWAP2 PUSH2 0x3FCF JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH2 0x1B1A CALLDATASIZE PUSH2 0x2CFA JUMP JUMPDEST SWAP5 SWAP3 PUSH2 0x1B48 SWAP3 SWAP2 SWAP3 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0x1B50 PUSH2 0x3D74 JUMP JUMPDEST PUSH2 0x1B58 PUSH2 0x3F06 JUMP JUMPDEST PUSH2 0x1B60 PUSH2 0x3C08 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP7 DUP7 AND SWAP4 DUP5 DUP7 MSTORE PUSH1 0x20 SWAP8 PUSH1 0xE DUP10 MSTORE DUP1 PUSH1 0x40 DUP9 KECCAK256 SLOAD AND PUSH2 0x1E15 JUMPI PUSH1 0x40 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP10 DUP2 PUSH1 0x4 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1DC1 JUMPI DUP9 SWAP2 PUSH2 0x1DF8 JUMPI JUMPDEST POP AND DUP1 ISZERO PUSH2 0x1DCC JUMPI PUSH2 0x1C06 SWAP1 DUP7 DUP9 MSTORE PUSH1 0xE DUP11 MSTORE PUSH1 0x40 DUP9 KECCAK256 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH2 0x81F DUP6 PUSH2 0x414C JUMP JUMPDEST PUSH2 0x1C18 PUSH2 0x1C12 DUP6 PUSH2 0x414C JUMP JUMPDEST DUP7 PUSH2 0x41A1 JUMP JUMPDEST PUSH2 0x1C22 DUP5 DUP5 PUSH2 0x3C5D JUMP JUMPDEST SWAP2 DUP6 DUP8 MSTORE PUSH1 0xB DUP10 MSTORE DUP3 PUSH1 0x40 DUP9 KECCAK256 SSTORE PUSH1 0x40 MLOAD PUSH32 0x4CDAD50600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP6 PUSH1 0x4 DUP3 ADD MSTORE DUP10 DUP2 PUSH1 0x24 DUP2 DUP11 GAS STATICCALL DUP1 ISZERO PUSH2 0x1DC1 JUMPI DUP6 SWAP1 DUP10 SWAP1 PUSH2 0x1D90 JUMPI JUMPDEST PUSH2 0x1C7D SWAP3 POP PUSH2 0x2EAE JUMP JUMPDEST SWAP8 PUSH2 0x1C87 DUP10 PUSH2 0x3F3D JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD8F0 DUP10 ADD SWAP9 DUP10 GT PUSH2 0x1D63 JUMPI PUSH2 0x1CC5 SWAP2 DUP2 PUSH2 0x1CC0 DUP12 SWAP4 PUSH2 0x3F74 JUMP JUMPDEST PUSH2 0x3FCF JUMP JUMPDEST DUP1 DUP8 LT PUSH2 0x1D33 JUMPI POP PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP2 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE PUSH32 0x75C4DC5F23640EEBA7D404D9165F515FC3D9E23A5C8B6E2D09B4B9DA56FF00A9 SWAP1 PUSH1 0x60 SWAP1 LOG2 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP6 PUSH1 0x44 SWAP2 DUP9 PUSH32 0xDA0CB07E00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE REVERT JUMPDEST PUSH1 0x24 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE REVERT JUMPDEST POP POP DUP10 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1DBA JUMPI JUMPDEST PUSH2 0x1DA7 DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x104D JUMPI DUP5 PUSH2 0x1C7D SWAP2 MLOAD PUSH2 0x1C73 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1D9D JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP11 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x24 DUP8 DUP8 PUSH32 0xD407F9C500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH2 0x1E0F SWAP2 POP DUP11 RETURNDATASIZE DUP13 GT PUSH2 0x95E JUMPI PUSH2 0x94F DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST PUSH0 PUSH2 0x1BBE JUMP JUMPDEST PUSH1 0x24 DUP8 DUP8 PUSH32 0x1690FA4000000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 MSTORE REVERT JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x1E5B PUSH2 0x2CE4 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1E88 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0x1E91 DUP2 PUSH2 0x3D29 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP3 GT PUSH2 0xAA4 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 PUSH1 0xA SLOAD AND CALLER SUB PUSH2 0xA7C JUMPI AND SWAP1 DUP2 DUP4 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH1 0x40 DUP4 KECCAK256 SLOAD PUSH8 0xDE0B5CAD2BEF000 DUP3 GT PUSH2 0xA54 JUMPI DUP2 PUSH2 0xA3F PUSH1 0x20 SWAP3 PUSH5 0x174876E800 PUSH32 0xE4D371097BEEA42453A37406E2AEF4C04F3C548F84AC50E72578662C0DCD7354 SWAP6 DIV SWAP1 PUSH2 0x4293 JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH2 0x1F16 CALLDATASIZE PUSH2 0x2CFA JUMP JUMPDEST SWAP5 SWAP1 SWAP3 SWAP2 SWAP4 SWAP5 PUSH32 0x0 PUSH2 0x1F46 DUP2 PUSH2 0x3678 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND CALLER SUB PUSH2 0x232D JUMPI PUSH2 0x1F5E PUSH2 0x3D74 JUMP JUMPDEST PUSH2 0x1F67 DUP8 PUSH2 0x3DC5 JUMP JUMPDEST ORIGIN ISZERO DUP1 DUP1 PUSH2 0x2320 JUMPI JUMPDEST PUSH2 0x22B8 JUMPI JUMPDEST POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP4 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP5 GT PUSH2 0x2290 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP4 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 DUP4 KECCAK256 SLOAD SWAP6 PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x40 DUP5 KECCAK256 SLOAD SWAP7 PUSH2 0x1FFD PUSH2 0x1FEF DUP10 PUSH2 0x1FEA DUP10 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND PUSH2 0x2EBB JUMP JUMPDEST PUSH2 0x2ECE JUMP JUMPDEST SWAP9 PUSH2 0x1FEA DUP9 DUP5 PUSH1 0x80 SHR PUSH2 0x2EBB JUMP JUMPDEST SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND DUP7 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP8 KECCAK256 SLOAD AND SWAP3 DUP1 DUP11 LT PUSH2 0x225C JUMPI POP DUP1 DUP9 LT PUSH2 0x221F JUMPI POP PUSH2 0x207B PUSH2 0x209A SWAP2 PUSH2 0x203F DUP11 DUP6 PUSH2 0x3E12 JUMP JUMPDEST PUSH2 0x2052 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 AND PUSH2 0x3E12 JUMP JUMPDEST PUSH2 0x839 DUP10 PUSH2 0x2072 DUP13 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH2 0x2F05 JUMP JUMPDEST SWAP3 PUSH1 0x80 SHR PUSH2 0x2F05 JUMP JUMPDEST SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP11 AND DUP7 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE DUP7 PUSH1 0x40 DUP8 KECCAK256 SSTORE DUP5 DUP11 PUSH2 0x3E52 JUMP JUMPDEST DUP7 PUSH2 0x2185 JUMPI JUMPDEST POP DUP5 PUSH2 0x20FC JUMPI JUMPDEST POP POP PUSH1 0x40 DUP1 MLOAD DUP6 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP6 SWAP1 MSTORE DUP1 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 PUSH32 0x44D97B36E99B590B3D2875AAD3B167B1D7FB1E063F3F1325A1EEAC76CAEE5113 SWAP2 POP PUSH1 0x60 SWAP1 LOG2 DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND EXTCODESIZE ISZERO PUSH2 0x2181 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x64 DUP9 DUP6 DUP4 DUP2 SWAP6 DUP2 PUSH1 0x40 MLOAD SWAP9 DUP10 SWAP8 DUP9 SWAP7 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP9 MSTORE AND PUSH1 0x4 DUP8 ADD MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE DUP11 PUSH1 0x44 DUP6 ADD MSTORE AND GAS CALL DUP1 ISZERO PUSH2 0x63D JUMPI PUSH2 0x216D JUMPI JUMPDEST DUP1 PUSH2 0x20A7 JUMP JUMPDEST PUSH2 0x2177 DUP3 SWAP2 PUSH2 0x2D9E JUMP JUMPDEST PUSH2 0x355 JUMPI DUP1 PUSH2 0x2167 JUMP JUMPDEST DUP3 DUP1 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND EXTCODESIZE ISZERO PUSH2 0x221B JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH1 0x24 DUP3 ADD MSTORE DUP7 PUSH1 0x44 DUP3 ADD MSTORE DUP4 DUP2 PUSH1 0x64 DUP2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND GAS CALL DUP1 ISZERO PUSH2 0x2210 JUMPI SWAP1 DUP5 SWAP2 PUSH2 0x21FC JUMPI JUMPDEST POP PUSH2 0x20A0 JUMP JUMPDEST PUSH2 0x2205 SWAP1 PUSH2 0x2D9E JUMP JUMPDEST PUSH2 0x2181 JUMPI DUP3 PUSH0 PUSH2 0x21F6 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP7 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 DUP1 REVERT JUMPDEST DUP6 PUSH1 0x64 SWAP2 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP14 PUSH32 0x8EDA85E400000000000000000000000000000000000000000000000000000000 DUP6 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE REVERT JUMPDEST DUP7 PUSH1 0x64 SWAP2 DUP12 DUP7 PUSH32 0x8EDA85E400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP4 PUSH32 0x98C5DBD600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST ISZERO PUSH2 0x22F8 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND DUP4 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH1 0x40 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x22F0 DUP6 DUP3 SLOAD PUSH2 0x2EAE JUMP JUMPDEST SWAP1 SSTORE PUSH0 PUSH2 0x1F75 JUMP JUMPDEST PUSH1 0x4 DUP4 PUSH32 0x67F84AB200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x7 SLOAD AND ISZERO PUSH2 0x1F70 JUMP JUMPDEST PUSH1 0x24 DUP4 PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 MSTORE REVERT JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x2393 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1 PUSH1 0x7 SLOAD PUSH1 0x2 SHR AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x40D PUSH2 0x23C5 PUSH2 0x2CE4 JUMP JUMPDEST PUSH2 0x23EE PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0x23F7 DUP2 PUSH2 0x3D29 JUMP JUMPDEST PUSH2 0x3994 JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x40D PUSH2 0x2454 PUSH2 0x2CE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP4 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 DUP4 KECCAK256 CALLER PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH2 0x3AEF JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x40 DUP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x24BC PUSH2 0x2CE4 JUMP JUMPDEST PUSH2 0x24E5 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST AND DUP2 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE KECCAK256 SLOAD DUP2 MLOAD SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP3 MSTORE PUSH1 0x80 SHR PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x8 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP1 SWAP2 SUB PUSH2 0x18DA JUMPI PUSH2 0x257C PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0x2584 PUSH2 0x36B1 JUMP JUMPDEST PUSH2 0x258C PUSH2 0x3C08 JUMP JUMPDEST DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0xA SLOAD AND OR PUSH1 0xA SSTORE PUSH32 0x280A60B1E63C1774D397D35CCE80EB80E51408EAD755FB446E6F744CE98E5DF0 DUP3 DUP1 LOG2 DUP1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP1 RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x40D PUSH2 0x261D PUSH2 0x2CE4 JUMP JUMPDEST PUSH2 0xD21 DUP2 PUSH2 0x3947 JUMP JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH2 0x2710 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x355 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x355 JUMPI PUSH2 0x269E PUSH2 0x2CE4 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP3 DUP4 DUP6 MSTORE PUSH1 0x20 SWAP2 PUSH1 0xB DUP4 MSTORE PUSH1 0x40 DUP7 KECCAK256 SLOAD SWAP2 DUP2 PUSH2 0x2872 JUMPI JUMPDEST POP DUP4 PUSH2 0x2709 JUMPI JUMPDEST SWAP1 PUSH2 0x839 PUSH1 0xB SWAP5 PUSH2 0x26F4 PUSH2 0x26FD SWAP5 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND PUSH2 0x2EAE JUMP JUMPDEST SWAP3 PUSH1 0x80 SHR PUSH2 0x2EAE JUMP JUMPDEST SWAP3 DUP5 MSTORE MSTORE PUSH1 0x40 DUP3 KECCAK256 SSTORE DUP1 RETURN JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP6 SWAP1 MSTORE DUP4 DUP2 PUSH1 0x64 DUP2 DUP11 DUP11 GAS CALL DUP1 ISZERO PUSH2 0x283A JUMPI PUSH2 0x2845 JUMPI JUMPDEST POP DUP5 DUP7 MSTORE PUSH1 0x8 DUP4 MSTORE PUSH1 0x40 DUP7 KECCAK256 PUSH2 0x276D DUP6 DUP3 SLOAD PUSH2 0x2EAE JUMP JUMPDEST SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0x4CDAD50600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP5 PUSH1 0x4 DUP3 ADD MSTORE DUP4 DUP2 PUSH1 0x24 DUP2 DUP10 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x283A JUMPI DUP8 SWAP2 PUSH2 0x2806 JUMPI JUMPDEST POP PUSH1 0xB SWAP5 PUSH2 0x26F4 PUSH2 0x26FD SWAP5 SWAP4 PUSH2 0x839 SWAP4 DUP10 DUP12 MSTORE PUSH1 0xD DUP9 MSTORE PUSH1 0x40 DUP12 KECCAK256 PUSH2 0x27D7 DUP3 DUP3 SLOAD PUSH2 0x2EAE JUMP JUMPDEST SWAP1 SSTORE DUP10 DUP12 MSTORE PUSH1 0xC DUP9 MSTORE PUSH1 0x40 DUP12 KECCAK256 CALLER PUSH0 MSTORE DUP9 MSTORE PUSH2 0x27F8 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 DUP3 SLOAD PUSH2 0x2EAE JUMP JUMPDEST SWAP1 SSTORE SWAP4 SWAP5 POP POP SWAP5 POP POP PUSH2 0x26CE JUMP JUMPDEST SWAP3 SWAP2 SWAP1 POP DUP4 DUP4 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2833 JUMPI JUMPDEST PUSH2 0x281F DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x104D JUMPI SWAP2 MLOAD SWAP1 SWAP2 SWAP1 PUSH1 0xB PUSH2 0x27B1 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2815 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP10 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x2864 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x286B JUMPI JUMPDEST PUSH2 0x285C DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2E5B JUMP JUMPDEST POP PUSH0 PUSH2 0x2756 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2852 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 SWAP1 DUP2 DUP2 MSTORE DUP6 DUP2 PUSH1 0x4 DUP2 DUP12 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x29B4 JUMPI DUP10 SWAP2 PUSH2 0x29BF JUMPI JUMPDEST POP PUSH1 0x40 MLOAD PUSH32 0x23B872DD00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP6 SWAP1 MSTORE SWAP1 DUP7 SWAP1 DUP3 SWAP1 PUSH1 0x64 SWAP1 DUP3 SWAP1 DUP14 SWAP1 DUP9 AND GAS CALL DUP1 ISZERO PUSH2 0x29B4 JUMPI PUSH2 0x2997 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE DUP5 DUP2 PUSH1 0x4 DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1DC1 JUMPI DUP9 SWAP2 PUSH2 0x297A JUMPI JUMPDEST POP AND DUP7 MSTORE PUSH1 0x8 DUP4 MSTORE PUSH1 0x40 DUP7 KECCAK256 PUSH2 0x2939 DUP3 DUP3 SLOAD PUSH2 0x2EAE JUMP JUMPDEST SWAP1 SSTORE DUP5 DUP7 MSTORE PUSH1 0xD DUP4 MSTORE PUSH1 0x40 DUP7 KECCAK256 PUSH2 0x2951 DUP3 DUP3 SLOAD PUSH2 0x2EAE JUMP JUMPDEST SWAP1 SSTORE DUP5 DUP7 MSTORE PUSH1 0xC DUP4 MSTORE PUSH1 0x40 DUP7 KECCAK256 CALLER PUSH0 MSTORE DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x2972 DUP3 DUP3 SLOAD PUSH2 0x2EAE JUMP JUMPDEST SWAP1 SSTORE PUSH0 PUSH2 0x26C7 JUMP JUMPDEST PUSH2 0x2991 SWAP2 POP DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x95E JUMPI PUSH2 0x94F DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST PUSH0 PUSH2 0x2922 JUMP JUMPDEST PUSH2 0x29AD SWAP1 DUP7 RETURNDATASIZE DUP9 GT PUSH2 0x286B JUMPI PUSH2 0x285C DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST POP PUSH0 PUSH2 0x2905 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP12 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x29D6 SWAP2 POP DUP7 RETURNDATASIZE DUP9 GT PUSH2 0x95E JUMPI PUSH2 0x94F DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST PUSH0 PUSH2 0x28B0 JUMP JUMPDEST POP CALLVALUE PUSH2 0x104D JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x104D JUMPI PUSH2 0x29F6 PUSH2 0x2CE4 JUMP JUMPDEST PUSH2 0x29FE PUSH2 0x3C08 JUMP JUMPDEST ADDRESS EXTCODESIZE ISZERO PUSH2 0x104D JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP2 PUSH32 0xBFFB78B200000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP4 ADDRESS GAS CALL DUP1 ISZERO PUSH2 0x2A85 JUMPI PUSH2 0x2A74 JUMPI POP DUP1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE DUP1 RETURN JUMPDEST PUSH2 0x2A7E SWAP2 POP PUSH2 0x2D9E JUMP JUMPDEST PUSH0 PUSH0 PUSH2 0x12AB JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST CALLVALUE PUSH2 0x104D JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x104D JUMPI PUSH2 0x2AEE PUSH2 0x2AAC PUSH2 0x2CE4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 CALLER PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH2 0x3994 JUMP JUMPDEST STOP JUMPDEST CALLVALUE PUSH2 0x104D JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x104D JUMPI PUSH2 0x2AEE PUSH2 0x2B0C PUSH2 0x2CE4 JUMP JUMPDEST PUSH2 0x3947 JUMP JUMPDEST CALLVALUE PUSH2 0x104D JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x104D JUMPI PUSH2 0x2B4A PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0x2B52 PUSH2 0x36B1 JUMP JUMPDEST PUSH2 0x2AEE PUSH2 0x387F JUMP JUMPDEST CALLVALUE PUSH2 0x104D JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x104D JUMPI PUSH2 0x2B93 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH1 0x20 PUSH2 0x2B9D PUSH2 0x3909 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x104D JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x104D JUMPI PUSH2 0x2AEE PUSH2 0x379C JUMP JUMPDEST CALLVALUE PUSH2 0x104D JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x104D JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP1 DUP2 DUP2 SUB PUSH2 0x104D JUMPI PUSH2 0x2C0E PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH2 0x2C16 PUSH2 0x36B1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000FF PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 PUSH1 0x9 SLOAD SWAP3 PUSH1 0x8 SHL AND SWAP2 AND OR PUSH1 0x9 SSTORE PUSH32 0x94B979B6831A51293E2641426F97747FEED46F17779FED9CD18D1ECEFCFE92EF PUSH0 DUP1 LOG2 STOP JUMPDEST CALLVALUE PUSH2 0x104D JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x104D JUMPI PUSH1 0x20 PUSH2 0x2C9C PUSH2 0x2CE4 JUMP JUMPDEST PUSH2 0x2CC5 PUSH32 0x0 PUSH2 0x3678 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0xE DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x104D JUMPI JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0xA0 SWAP2 ADD SLT PUSH2 0x104D JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x104D JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP2 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH1 0x64 CALLDATALOAD SWAP2 PUSH1 0x84 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x104D JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x104D JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x104D JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x104D JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x2D8A JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2D7C JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2DB2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2DB2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2DB2 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x104D JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x104D JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x104D JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x104D JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x28 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x2E81 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x2E81 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x2E81 JUMPI JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2ED8 JUMPI DIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x2E81 JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x3 SHR AND ISZERO PUSH2 0x3520 JUMPI PUSH2 0x2F3B PUSH2 0x3C08 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH1 0xE0 DUP4 ADD DUP4 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2DB2 JUMPI PUSH1 0x40 MSTORE PUSH0 DUP4 MSTORE PUSH1 0x60 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x60 DUP1 DUP5 ADD MSTORE PUSH1 0x60 PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x60 PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x60 PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP4 DUP8 MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 DUP7 DUP2 MSTORE ADD SWAP1 PUSH0 MSTORE DUP2 PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 JUMPDEST DUP8 DUP2 LT PUSH2 0x34FD JUMPI POP PUSH2 0x2FE6 SWAP3 POP SUB DUP3 PUSH2 0x2DFB JUMP JUMPDEST PUSH1 0x20 DUP8 ADD MSTORE PUSH2 0x2FF4 DUP4 PUSH2 0x35BA JUMP JUMPDEST PUSH2 0x3001 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x2DFB JUMP JUMPDEST DUP4 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x302E DUP6 PUSH2 0x35BA JUMP JUMPDEST ADD PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x34D4 JUMPI POP POP PUSH1 0x40 DUP8 ADD MSTORE PUSH2 0x3048 DUP4 PUSH2 0x35D2 JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MSTORE PUSH2 0x3056 DUP4 PUSH2 0x35D2 JUMP JUMPDEST PUSH1 0x80 DUP8 ADD MSTORE DUP6 MLOAD PUSH5 0xFFFFFFFFFF PUSH2 0x306C DUP6 PUSH2 0x35D2 JUMP JUMPDEST SWAP2 PUSH1 0x5A SHR AND PUSH0 JUMPDEST DUP6 DUP2 LT PUSH2 0x3498 JUMPI POP POP PUSH1 0xC0 DUP8 ADD MSTORE PUSH2 0x308A DUP4 PUSH2 0x35D2 JUMP JUMPDEST PUSH1 0xA0 DUP8 ADD MSTORE DUP6 MLOAD SWAP2 PUSH1 0x1 DUP4 DUP2 SHR AND SWAP3 DUP4 PUSH2 0x3484 JUMPI JUMPDEST POP DUP3 PUSH2 0x3474 JUMPI JUMPDEST PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x31A1 JUMPI POP POP POP POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 JUMPDEST PUSH1 0x60 DUP6 ADD MLOAD DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x3112 JUMPI SWAP1 PUSH2 0x3100 PUSH2 0x30EA DUP3 PUSH1 0x1 SWAP5 PUSH2 0x3621 JUMP JUMPDEST MLOAD PUSH2 0x30F9 DUP4 PUSH1 0x80 DUP11 ADD MLOAD PUSH2 0x3621 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x3C5D JUMP JUMPDEST DUP2 PUSH0 MSTORE DUP5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE ADD PUSH2 0x30CC JUMP JUMPDEST POP POP SWAP2 SWAP3 POP POP PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 DUP2 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 AND SWAP1 SSTORE MLOAD SWAP2 DUP3 MSTORE PUSH32 0xC2354CC2F78EA57777E55DDD43A7F22B112CE98868596880EDAEB22B4F9C73A9 SWAP2 LOG2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x31B7 DUP3 PUSH1 0x20 DUP12 ADD MLOAD PUSH2 0x3621 JUMP JUMPDEST MLOAD AND PUSH0 MSTORE DUP2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x31D1 DUP4 PUSH2 0x2DDF JUMP JUMPDEST SLOAD PUSH1 0xFF SWAP1 DUP2 DUP2 AND PUSH2 0x31E1 DUP2 PUSH2 0x43B3 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 PUSH1 0x8 SHR AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0xA8 SHR AND ISZERO ISZERO PUSH1 0x40 DUP4 ADD MSTORE DUP1 PUSH0 MSTORE DUP4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP2 PUSH2 0x3227 DUP3 PUSH1 0x40 DUP13 ADD MLOAD DUP4 PUSH2 0x3221 DUP4 DUP4 PUSH2 0x3621 JUMP JUMPDEST MSTORE PUSH2 0x3621 JUMP JUMPDEST POP DUP1 MLOAD PUSH2 0x3233 DUP2 PUSH2 0x43B3 JUMP JUMPDEST PUSH2 0x323C DUP2 PUSH2 0x43B3 JUMP JUMPDEST DUP1 PUSH2 0x33B8 JUMPI POP PUSH8 0xDE0B6B3A7640000 JUMPDEST PUSH2 0x325A DUP4 PUSH1 0xA0 DUP14 ADD MLOAD PUSH2 0x3621 JUMP JUMPDEST MSTORE PUSH2 0x3278 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP4 DUP13 PUSH2 0x440D JUMP JUMPDEST DUP6 ISZERO PUSH2 0x33AE JUMPI PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO SWAP1 DUP2 PUSH2 0x3390 JUMPI JUMPDEST POP PUSH2 0x329D JUMPI JUMPDEST PUSH1 0x1 SWAP2 POP JUMPDEST ADD PUSH2 0x30A8 JUMP JUMPDEST DUP9 PUSH2 0x32A8 DUP2 MLOAD PUSH2 0x43EA JUMP JUMPDEST PUSH2 0x32B6 DUP4 PUSH1 0x60 DUP5 ADD MLOAD PUSH2 0x3621 JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x80 SHR PUSH2 0x32CA DUP5 PUSH1 0x80 PUSH0 SWAP6 ADD MLOAD PUSH2 0x3621 JUMP JUMPDEST MLOAD DUP2 DUP2 GT PUSH2 0x3301 JUMPI JUMPDEST POP POP POP PUSH1 0x1 SWAP3 DUP2 PUSH2 0x32E6 JUMPI JUMPDEST POP POP PUSH2 0x3292 JUMP JUMPDEST PUSH2 0x32FA SWAP2 PUSH2 0x32F3 SWAP2 PUSH2 0x2F05 JUMP JUMPDEST DUP3 DUP12 PUSH2 0x440D JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x32DF JUMP JUMPDEST PUSH2 0x330C SWAP4 POP SUB PUSH2 0x2EBB JUMP JUMPDEST SWAP2 PUSH8 0xDE0B6B3A7640000 SWAP3 PUSH1 0x1 DUP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH2 0x336B DUP12 PUSH2 0x3364 DUP6 PUSH1 0xA0 PUSH2 0x335B DUP3 PUSH1 0xC0 DUP7 ADD MLOAD PUSH2 0x3621 JUMP JUMPDEST MLOAD SWAP4 ADD MLOAD PUSH2 0x3621 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x2EBB JUMP JUMPDEST DUP2 DUP6 DUP2 MUL DIV DUP6 EQ DUP3 ISZERO OR ISZERO PUSH2 0x2E81 JUMPI PUSH1 0x1 SWAP5 PUSH2 0x3387 SWAP3 MUL PUSH2 0x2ECE JUMP JUMPDEST SWAP1 SWAP3 PUSH0 DUP1 PUSH2 0x32D3 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP MLOAD PUSH2 0x339E DUP2 PUSH2 0x43B3 JUMP JUMPDEST PUSH2 0x33A7 DUP2 PUSH2 0x43B3 JUMP JUMPDEST EQ PUSH0 PUSH2 0x328C JUMP JUMPDEST POP PUSH1 0x1 SWAP2 POP PUSH2 0x3297 JUMP JUMPDEST DUP1 PUSH2 0x33C4 PUSH1 0x1 SWAP3 PUSH2 0x43B3 JUMP JUMPDEST SUB PUSH2 0x344C JUMPI PUSH1 0x4 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 DUP5 ADD MLOAD AND PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0x679AEFCE00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2A85 JUMPI PUSH0 SWAP2 PUSH2 0x341A JUMPI JUMPDEST POP PUSH2 0x324C JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3444 JUMPI JUMPDEST DUP2 PUSH2 0x3435 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x2DFB JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x104D JUMPI MLOAD PUSH0 PUSH2 0x3414 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x3428 JUMP JUMPDEST PUSH32 0xDF45063200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP7 MLOAD PUSH1 0x3 SHR PUSH1 0x1 AND ISZERO SWAP3 POP PUSH2 0x30A6 JUMP JUMPDEST PUSH2 0x348F SWAP2 SWAP4 POP PUSH2 0x43EA JUMP JUMPDEST ISZERO ISZERO SWAP2 PUSH0 PUSH2 0x309F JUMP JUMPDEST PUSH1 0x5 DUP2 MUL SWAP1 DUP1 DUP3 DIV PUSH1 0x5 EQ DUP2 ISZERO OR ISZERO PUSH2 0x2E81 JUMPI PUSH1 0x4D PUSH1 0x1F DUP5 DUP5 SHR AND GT PUSH2 0x2E81 JUMPI PUSH1 0x1F DUP4 PUSH1 0x1 SWAP4 SHR AND PUSH1 0xA EXP PUSH2 0x34CD DUP3 DUP7 PUSH2 0x3621 JUMP JUMPDEST MSTORE ADD PUSH2 0x3073 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD PUSH2 0x34E3 DUP2 PUSH2 0x2DDF JUMP JUMPDEST PUSH0 DUP2 MSTORE PUSH0 DUP4 DUP3 ADD MSTORE PUSH0 PUSH1 0x40 DUP3 ADD MSTORE DUP3 DUP3 DUP7 ADD ADD MSTORE ADD PUSH2 0x3031 JUMP JUMPDEST SWAP2 POP PUSH1 0x1 PUSH1 0x20 DUP2 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 SLOAD AND DUP2 MSTORE ADD SWAP4 ADD SWAP2 ADD SWAP2 DUP4 SWAP2 SWAP3 PUSH2 0x2FD2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 PUSH32 0xEF029ADF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x35B4 DUP2 PUSH2 0x2DDF JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2DB2 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x35DC DUP3 PUSH2 0x35BA JUMP JUMPDEST PUSH2 0x35E9 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x2DFB JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x3617 DUP3 SWAP5 PUSH2 0x35BA JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x3635 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x104D JUMPI PUSH1 0x20 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ADDRESS SUB PUSH2 0x3689 JUMPI JUMP JUMPDEST PUSH32 0x9FD25B3600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x373B PUSH1 0x20 PUSH2 0x36E2 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x3555 JUMP JUMPDEST PUSH1 0x9 SLOAD PUSH1 0x40 MLOAD PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE CALLER PUSH1 0x24 DUP4 ADD MSTORE ADDRESS PUSH1 0x44 DUP4 ADD MSTORE SWAP1 SWAP3 DUP4 SWAP2 PUSH1 0x8 SHR PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP2 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2A85 JUMPI PUSH0 SWAP2 PUSH2 0x377D JUMPI JUMPDEST POP ISZERO PUSH2 0x3755 JUMPI JUMP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x3796 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x286B JUMPI PUSH2 0x285C DUP2 DUP4 PUSH2 0x2DFB JUMP JUMPDEST PUSH0 PUSH2 0x374D JUMP JUMPDEST PUSH2 0x37A4 PUSH2 0x3909 JUMP JUMPDEST ISZERO PUSH2 0x37D1 JUMPI PUSH32 0xDA9F8B3400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0xFFFFFFFF PUSH32 0x0 AND TIMESTAMP LT ISZERO PUSH2 0x3857 JUMPI PUSH1 0x2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD PUSH1 0x7 SLOAD AND OR PUSH1 0x7 SSTORE PUSH32 0xE0629FE656E45AD7FD63A24B899DA368690024C07043B88E57AEE5095B1D3D02 PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE LOG1 JUMP JUMPDEST PUSH32 0xE4460B700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x3887 PUSH2 0x3909 JUMP JUMPDEST ISZERO PUSH2 0x38E1 JUMPI PUSH32 0xE0629FE656E45AD7FD63A24B899DA368690024C07043B88E57AEE5095B1D3D02 PUSH1 0x20 PUSH0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD PUSH1 0x7 SLOAD AND PUSH1 0x7 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG1 JUMP JUMPDEST PUSH32 0xF7FF4DCA00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0xFFFFFFFF PUSH32 0x0 AND TIMESTAMP GT ISZERO DUP1 PUSH2 0x393B JUMPI SWAP1 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x7 SLOAD DUP2 SHR AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x3 SHR AND PUSH2 0x3969 JUMPI POP JUMP JUMPDEST PUSH32 0x346D760700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x39B8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP2 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH2 0x4130 JUMP JUMPDEST DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x1 DUP2 PUSH1 0x2 SHR AND PUSH4 0xFFFFFFFF SWAP1 DUP2 DUP4 PUSH2 0x39DE PUSH2 0xCF9 PUSH1 0x5A SWAP1 JUMP JUMPDEST SHR AND DUP2 PUSH2 0x3AB7 JUMPI JUMPDEST POP ISZERO PUSH2 0x3A18 JUMPI DUP3 PUSH32 0xD971F59700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 PUSH2 0x3A23 PUSH1 0x5A PUSH2 0x2E73 JUMP JUMPDEST SHR AND TIMESTAMP LT ISZERO PUSH2 0x3A8B JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB PUSH1 0x4 SWAP2 DUP4 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE AND OR PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH32 0x57E20448028297190122571BE7CB6C1B1EF85730C673F7C72F533C8662419AA7 PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE LOG2 JUMP JUMPDEST POP PUSH32 0xEB5A121700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP DUP2 PUSH32 0x0 AND ADD DUP2 DUP2 GT PUSH2 0x2E81 JUMPI DUP2 AND TIMESTAMP GT ISZERO PUSH0 PUSH2 0x39E6 JUMP JUMPDEST PUSH2 0x3B13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP2 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH2 0x4130 JUMP JUMPDEST DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x1 DUP2 PUSH1 0x2 SHR AND PUSH4 0xFFFFFFFF DUP1 DUP4 PUSH2 0x3B38 PUSH2 0xCF9 PUSH1 0x5A SWAP1 JUMP JUMPDEST SHR AND DUP3 PUSH2 0x3BCF JUMPI JUMPDEST POP POP ISZERO PUSH2 0x3BA3 JUMPI PUSH1 0x20 PUSH32 0x57E20448028297190122571BE7CB6C1B1EF85730C673F7C72F533C8662419AA7 SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB PUSH0 SWAP2 DUP6 DUP4 MSTORE DUP3 DUP5 MSTORE AND PUSH1 0x40 DUP3 KECCAK256 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG2 JUMP JUMPDEST POP PUSH32 0xFDCD689400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP PUSH32 0x0 AND ADD DUP2 DUP2 GT PUSH2 0x2E81 JUMPI AND TIMESTAMP GT ISZERO PUSH0 DUP1 PUSH2 0x3B40 JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x3C35 JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 GT SWAP1 DUP2 ISZERO PUSH2 0x3CB5 JUMPI JUMPDEST POP PUSH2 0x3C8D JUMPI PUSH2 0x3C8A SWAP2 PUSH1 0x80 SHL PUSH2 0x2EAE JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH32 0x89560CA100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP DUP3 GT PUSH0 PUSH2 0x3C79 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x8 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 DUP3 SLOAD AND OR SWAP1 SSTORE PUSH32 0xC2354CC2F78EA57777E55DDD43A7F22B112CE98868596880EDAEB22B4F9C73A9 PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE LOG2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x3D49 JUMPI POP JUMP JUMPDEST PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x0 TLOAD ISZERO PUSH2 0x3D9D JUMPI JUMP JUMPDEST PUSH32 0xC09BA73600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x3DE7 JUMPI POP JUMP JUMPDEST PUSH32 0x85F4129900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x3E1C SWAP1 PUSH2 0x414C JUMP JUMPDEST SWAP1 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP3 EQ PUSH2 0x2E81 JUMPI PUSH2 0x3E50 SWAP2 PUSH0 SUB SWAP1 PUSH2 0x41A1 JUMP JUMPDEST JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP3 DUP4 ISZERO PUSH2 0x3EDE JUMPI PUSH32 0x4E09F7F7FC37CE2897800E2C2A9099565EDB0A133D19D84A6871B3530AF8846B SWAP2 PUSH1 0x20 SWAP2 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0xD DUP3 MSTORE PUSH2 0x3EA2 DUP2 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x2F05 JUMP JUMPDEST PUSH2 0x3EAB DUP2 PUSH2 0x3F3D JUMP JUMPDEST DUP5 PUSH0 MSTORE PUSH1 0xD DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0xC DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP6 PUSH0 MSTORE DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x3ED3 DUP3 DUP3 SLOAD PUSH2 0x2F05 JUMP JUMPDEST SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG3 JUMP JUMPDEST PUSH32 0x586D06DF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x7 SLOAD PUSH1 0x2 SHR AND PUSH2 0x3F15 JUMPI JUMP JUMPDEST PUSH32 0xF27DF0900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x2710 DUP2 LT PUSH2 0x3F49 JUMPI POP JUMP JUMPDEST PUSH32 0x34BDBFAA00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH0 SWAP2 AND DUP1 DUP3 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH32 0xD66F031D33381C6408F0B32C884461E5DE3DF8808399B6F3A3D86B1368F8EC34 PUSH1 0x20 PUSH2 0x2710 DUP1 PUSH1 0x40 DUP7 KECCAK256 SSTORE PUSH1 0xC DUP3 MSTORE PUSH1 0x40 DUP6 KECCAK256 DUP6 DUP1 MSTORE DUP3 MSTORE DUP1 PUSH1 0x40 DUP7 KECCAK256 SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE LOG3 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP3 DUP4 ISZERO PUSH2 0x4050 JUMPI PUSH32 0xD66F031D33381C6408F0B32C884461E5DE3DF8808399B6F3A3D86B1368F8EC34 SWAP2 PUSH1 0x20 SWAP2 AND SWAP3 DUP4 PUSH0 MSTORE PUSH1 0xD DUP3 MSTORE PUSH2 0x401F DUP2 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x2EAE JUMP JUMPDEST PUSH2 0x4028 DUP2 PUSH2 0x3F3D JUMP JUMPDEST DUP5 PUSH0 MSTORE PUSH1 0xD DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH1 0xC DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP6 PUSH0 MSTORE DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x3ED3 DUP3 DUP3 SLOAD PUSH2 0x2EAE JUMP JUMPDEST PUSH32 0xDBE6B10E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE PUSH1 0x7 SLOAD AND OR PUSH1 0x7 SSTORE PUSH32 0xBD204090FD387F08E3076528BF09B4FC99D8100D749EACE96C06002D3FEDC625 PUSH0 DUP1 LOG1 JUMP JUMPDEST DUP3 ISZERO PUSH2 0x4108 JUMPI PUSH1 0x1 SWAP2 PUSH2 0x40DB SWAP2 PUSH2 0x2EBB JUMP JUMPDEST SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND CALLER EQ PUSH2 0x4149 JUMPI PUSH2 0x3E50 SWAP1 PUSH2 0x431C JUMP JUMPDEST POP JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x4176 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 ISZERO PUSH2 0x428F JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 SWAP2 AND DUP1 PUSH0 MSTORE DUP2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD DUP4 DUP2 ADD SWAP4 DUP5 SLT PUSH0 DUP3 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x2E81 JUMPI DUP4 PUSH2 0x4256 JUMPI POP PUSH32 0x0 DUP1 TLOAD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 ADD SWAP2 DUP3 GT PUSH2 0x2E81 JUMPI TSTORE JUMPDEST PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TSTORE JUMP JUMPDEST PUSH2 0x424A JUMPI PUSH32 0x0 DUP1 TLOAD SWAP1 PUSH1 0x1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x2E81 JUMPI TSTORE PUSH2 0x424A JUMP JUMPDEST POP POP JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x18 SHR PUSH2 0xFAF JUMPI PUSH1 0x2A SHL SWAP1 PUSH3 0xFFFFFF PUSH1 0x2A SHL NOT AND OR SWAP1 JUMP JUMPDEST PUSH32 0xB4120F1400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x100 DUP1 DUP5 LT ISZERO PUSH2 0x42AD JUMPI DUP4 DUP2 SUB SWAP1 DUP2 GT PUSH2 0x2E81 JUMPI DUP1 PUSH1 0xFF LT PUSH0 EQ PUSH2 0x4317 JUMPI POP PUSH1 0xFF JUMPDEST PUSH1 0x18 GT PUSH2 0x42AD JUMPI DUP1 PUSH1 0x18 SHR PUSH2 0xFAF JUMPI PUSH3 0xFFFFFF SWAP1 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST PUSH2 0x42F9 JUMP JUMPDEST PUSH1 0x20 PUSH2 0x373B SWAP2 PUSH2 0x434E PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH0 CALLDATALOAD AND PUSH2 0x3555 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x9 SLOAD PUSH1 0x8 SHR AND SWAP1 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP5 DUP3 SWAP4 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE CALLER SWAP1 PUSH1 0x4 DUP6 ADD SWAP2 PUSH1 0x40 SWAP2 SWAP5 SWAP4 PUSH1 0x60 DUP5 ADD SWAP6 DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND PUSH1 0x20 DUP6 ADD MSTORE AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x43BD JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH3 0xFFFFFF SWAP1 PUSH1 0x42 SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2E81 JUMPI SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x80 PUSH8 0xDE0B6B3A7640000 PUSH2 0x445D PUSH2 0x4466 SWAP5 DUP1 PUSH2 0x4430 DUP7 PUSH1 0x60 DUP11 ADD MLOAD PUSH2 0x3621 JUMP JUMPDEST MSTORE PUSH2 0x4458 PUSH2 0x4442 DUP7 PUSH1 0xC0 DUP11 ADD MLOAD PUSH2 0x3621 JUMP JUMPDEST MLOAD PUSH2 0x4451 DUP8 PUSH1 0xA0 DUP12 ADD MLOAD PUSH2 0x3621 JUMP JUMPDEST MLOAD SWAP3 PUSH2 0x2EBB JUMP JUMPDEST PUSH2 0x2EBB JUMP JUMPDEST DIV SWAP4 ADD MLOAD PUSH2 0x3621 JUMP JUMPDEST MSTORE JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH15 0x728428BC4D867277CA071B601AD67C 0x28 RETURNDATASIZE 0xEC JUMP 0xF6 ORIGIN 0xDD KECCAK256 SWAP2 0x29 CALL 0x4C 0xC8 PUSH21 0x6A6264736F6C634300081B00330000000000000000 ","sourceMap":"566:4899:92:-:0;;;;;;;;;-1:-1:-1;566:4899:92;;;;34059:9:69;34055:69;;566:4899:92;;;34134:25:69;;;566:4899:92;;34134:25:69;;566:4899:92;;;;;;;;;;;34134:25:69;34055:69;34095:18;34071:1;34095:18;566:4899:92;34071:1:69;34095:18;566:4899:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;566:4899:92;;;;;;;;-1:-1:-1;;;;;4519:6:69;566:4899:92;;;;;;;;;;;;;-1:-1:-1;;566:4899:92;;;;;;;;-1:-1:-1;;;;;566:4899:92;;:::i;:::-;2666:30:69;:6;:30;:::i;:::-;566:4899:92;;;31121:18:69;566:4899:92;;;;;;;;;;;;;;;;-1:-1:-1;;566:4899:92;;;;;8636:5:69;566:4899:92;;:::i;:::-;2666:30:69;:6;:30;:::i;:::-;8718:4:70;;;:::i;:::-;8636:5:69;:::i;:::-;566:4899:92;;;;;;;;-1:-1:-1;;566:4899:92;;;;;;;;;:::i;:::-;2666:6:69;;:30;;;;:::i;:::-;566:4899:92;;24572:221:69;566:4899:92;24572:221:69;;;;;;-1:-1:-1;;;;;566:4899:92;;;;;24572:221:69;;;566:4899:92;;;;;;;;;;;;;;;;;;;;;;;;;;;24760:10:69;566:4899:92;;;;;;;;24572:221:69;;566:4899:92;;-1:-1:-1;;566:4899:92;;24572:221:69;;566:4899:92;24572:221:69;566:4899:92;;24572:221:69;:::i;:::-;566:4899:92;-1:-1:-1;;;;;566:4899:92;;;;;24537:274:69;;;;;;;566:4899:92;24537:274:69;;566:4899:92;24537:274:69;;566:4899:92;;;;;;;;;;;;;;;;;;;;;;;;24537:274:69;;566:4899:92;;24537:274:69;;;;;;;;;;;566:4899:92;;;24509:352:69;566:4899:92;;;;;24509:352:69;;;;;;:::i;:::-;566:4899:92;;;;;;;;;;;24537:274:69;;;;;;;;;;;;;;:::i;:::-;;;566:4899:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;24509:352:69;566:4899:92;;;;;;;;;;;;;;24537:274:69;;;;566:4899:92;;;;;;;;;;;;;;;;;;;;;;24537:274:69;566:4899:92;;;;;;;;;;;;;;;-1:-1:-1;;566:4899:92;;;;;5443:12;566:4899;;:::i;:::-;5443:12;:::i;566:4899::-;;;;;5303:6;566:4899;;;:::i;:::-;5303:6;;:::i;566:4899::-;;;;;;-1:-1:-1;;566:4899:92;;;;;;;;5700:21:69;566:4899:92;;;;;;;;;;;:::i;:::-;2666:30:69;:6;;;;;;:30;:::i;:::-;2707:73:70;;:::i;:::-;8020:101;;:::i;:::-;10002:12;;;:::i;:::-;1083:103:53;;:::i;:::-;-1:-1:-1;;;;;566:4899:92;;;;;;;;20895:20:69;;;;;;566:4899:92;20895:20:69;;;;;;;;;;;;;566:4899:92;;;;;10575:13:70;566:4899:92;;;;;;;;;;10575:46:70;;;10571:202;;566:4899:92;;;21017:20:69;566:4899:92;;;;;;;21632:18:69;566:4899:92;;;;;;1460:31:44;1237:14;1460:31;;21696:72:69;21797:76;21696:72;;;;;:::i;:::-;566:4899:92;1616:3:44;566:4899:92;21797:76:69;;;;:::i;:::-;21888:46;;;;21884:172;;22070:40;;;;22066:157;;3891:15:70;;22878:91:69;3891:15:70;22508:177:69;566:4899:92;3891:15:70;;22622:53:69;3891:15:70;22556:52:69;3891:15:70;22843:18:69;3891:15:70;;;;22878:91:69;3891:15:70;;;;:::i;:::-;;;:::i;:::-;;;;:::i;:::-;22556:52:69;:::i;:::-;22622:53;;:::i;:::-;22508:177;;:::i;:::-;566:4899:92;;;;21017:20:69;566:4899:92;;;;;;;22843:18:69;:::i;:::-;566:4899:92;;22878:91:69;;;;;;566:4899:92;;;;;;;;;;;;;;;;;;22878:91:69;;;;551:66:53;3051:52:55;566:4899:92;;;;;;;;;22066:157:69;22133:79;566:4899:92;22133:79:69;;;;;;566:4899:92;;;;;;22133:79:69;21884:172;21957:88;566:4899:92;21957:88:69;;;;;;566:4899:92;;;;;;21957:88:69;10571:202:70;10711:51;566:4899:92;10711:51:70;;;;;566:4899:92;;;;10711:51:70;20895:20:69;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;566:4899:92;;;;;;;;;;;;;;;-1:-1:-1;;566:4899:92;;;;;;;:::i;:::-;;;2666:6:69;:30;:6;:30;:::i;:::-;8718:4:70;;;:::i;:::-;465::50;3098:36:69;;3094:108;;-1:-1:-1;;;;;566:4899:92;;2877:22:69;566:4899:92;;2855:10:69;:45;2851:101;;566:4899:92;;;;;;;;;;;;19917:10:33;8864:26:76;;8860:97;;12581:72:69;9149:42:76;9060:184;566:4899:92;9149:42:76;;566:4899:92;2690:94:75;;9149:42:76;566:4899:92;19669:4:33;566:4899:92;;9060:184:76;;:::i;:::-;566:4899:92;;;;;;;;;;;;;;;12581:72:69;566:4899:92;;8860:97:76;566:4899:92;8913:33:76;;;;;2851:101:69;566:4899:92;2923:18:69;;;;;3094:108;566:4899:92;3157:34:69;;;;;566:4899:92;;;;;;-1:-1:-1;;566:4899:92;;;;;2666:30:69;:6;:30;:::i;:::-;1525:73:37;;:::i;:::-;566:4899:92;16609:27:69;566:4899:92;;16605:93:69;;8470:156:49;16736:15:69;566:4899:92;8470:156:49;16736:15:69;566:4899:92;16862:21:69;;;;566:4899:92;;16605:93:69;16659:28;;566:4899:92;16659:28:69;;;566:4899:92;;;;;;-1:-1:-1;;566:4899:92;;;;;2666:30:69;:6;:30;:::i;:::-;1525:73:37;;:::i;:::-;566:4899:92;8470:156:49;17707:15:69;566:4899:92;8470:156:49;;17707:15:69;566:4899:92;17834:38:69;566:4899:92;;;17433:4:69;566:4899:92;;17834:38:69;566:4899:92;;;;;;;;-1:-1:-1;;566:4899:92;;;;;2666:30:69;:6;:30;:::i;:::-;1525:73:37;;:::i;:::-;15965:100:69;;:::i;566:4899:92:-;;;;;;-1:-1:-1;;566:4899:92;;;;;;;:::i;:::-;2666:6:69;:30;:6;:30;:::i;:::-;8718:4:70;;;:::i;:::-;13384::69;;;:::i;:::-;-1:-1:-1;;;;;566:4899:92;;;;;;;;;;;7916:84:49;;;958:1:75;7916:84:49;;566:4899:92;2958:30:75;;:62;:30;566:4899:92;2790:99:75;;2958:30;:62;:::i;:::-;6019:108:49;;7592:82:70;;;566:4899:92;;13711:4:69;566:4899:92;;;;13501:57:69;;;566:4899:92;13497:177:69;13711:4;13497:177;;;:::i;:::-;13711:4;:::i;13501:57::-;13533:16;;;:::i;:::-;566:4899:92;13501:57:69;;7592:82:70;7648:26;;;;566:4899:92;;;;;;;;13711:4:69;566:4899:92;;;7608:15:70;:66;;7592:82;;;;566:4899:92;;;;;;;;;;;;;;;;-1:-1:-1;;566:4899:92;;;;;;551:66:53;2806:53:55;566:4899:92;;;;;;;;;;;;;;-1:-1:-1;;566:4899:92;;;;;;;:::i;:::-;;;2666:30:69;:6;:30;:::i;:::-;8718:4:70;;;:::i;:::-;-1:-1:-1;;;;;566:4899:92;;;;;;;;;;;;;;;;10398:38:69;566:4899:92;;32650:25:69;;;32646:225;32650:25;;;32768:4;;;;:::i;:::-;5755:16:70;;:::i;:::-;5751:67;;566:4899:92;;;;;;;;;;;7916:84:49;958:1:75;7916:84:49;;566:4899:92;;2958:30:75;;:62;:30;566:4899:92;2790:99:75;;2958:62;6019:108:49;;7592:82:70;;;32646:225:69;6800:73:70;;;;566:4899:92;;;15152:60:70;;;;566:4899:92;15152:60:70;;;;;;;;;;;;;32646:225:69;15132:80:70;;;15128:143;;566:4899:92;;;15305:60:70;;;;566:4899:92;15305:60:70;;;;;;;;;;;;;32646:225:69;15285:80:70;;;15281:144;;566:4899:92;;;;;;;;;;7292:26:76;19917:10:33;7292:26:76;;7288:97;;19669:4:33;566:4899:92;;;;19627:2:33;566:4899:92;9400:76:49;;2539:209;15647:49:70;566:4899:92;;;;;;;;2539:209:49;;;;566:4899:92;;;;;;;;;15647:49:70;566:4899:92;;9400:76:49;9450:15;566:4899:92;9450:15:49;566:4899:92;;9450:15:49;7288:97:76;566:4899:92;7341:33:76;;;;;15281:144:70;566:4899:92;15388:26:70;;;;;15305:60;;;;;;;;;;;;;;;;:::i;:::-;;;566:4899:92;;;;;15305:60:70;;;566:4899:92;;;;15305:60:70;;;;;;566:4899:92;;;;;;;;;15128:143:70;566:4899:92;15235:25:70;;;;;15152:60;;;;;;;;;;;;;;;;:::i;:::-;;;566:4899:92;;;;;15152:60:70;;;;;;;;6800:73;566:4899:92;6846:16:70;;;;;566:4899:92;;6846:16:70;7592:82;7648:26;;;;;566:4899:92;;;;;;;;7608:15:70;:66;;7592:82;;;;566:4899:92;;;;;;;;;;5751:67:70;566:4899:92;5794:13:70;;;;;32646:225:69;-1:-1:-1;32794:10:69;32790:81;32646:225;32790:81;566:4899:92;32842:18:69;;;;;566:4899:92;;;;;;-1:-1:-1;;566:4899:92;;;;;;;;928:3:95;566:4899:92;;;;;;;;;-1:-1:-1;;566:4899:92;;;;;;;;;4956:25:69;566:4899:92;;;;;;;;;;-1:-1:-1;;566:4899:92;;;;;6754:5:69;;:::i;566:4899:92:-;;;;;4369:192;566:4899;;;;:::i;:::-;1083:103:53;;;;;;;;;:::i;:::-;566:4899:92;;4369:192;;;;;566:4899;4369:192;;566:4899;4369:192;;566:4899;;;;;;;;;;;;-1:-1:-1;;;;;566:4899:92;;;;;;;;;;;;;;;;;;;;;;4369:192;;:4;;;:192;;;;;;;;566:4899;3051:52:55;;551:66:53;3051:52:55;566:4899:92;;4369:192;;;566:4899;4369:192;566:4899;4369:192;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;566:4899;;;;;;-1:-1:-1;;566:4899:92;;;;;1590:1:37;566:4899:92;;:::i;:::-;2666:30:69;:6;:30;:::i;:::-;8718:4:70;;;:::i;:::-;1525:73:37;;:::i;:::-;1590:1;:::i;566:4899:92:-;;;;;;-1:-1:-1;;566:4899:92;;;;;2666:30:69;:6;:30;:::i;:::-;1525:73:37;;:::i;:::-;8470:156:49;17707:15:69;566:4899:92;8470:156:49;17707:15:69;566:4899:92;17834:38:69;566:4899:92;;;;;;17834:38:69;566:4899:92;;;;;;;1983:185;;566:4899;;;:::i;:::-;1083:103:53;;;;;;;;;:::i;:::-;566:4899:92;;1983:185;;;;;566:4899;1983:185;;566:4899;1983:185;;566:4899;;;;;;;;;;;;-1:-1:-1;;;;;566:4899:92;;;;;;;;;;;;;;;;;;;;;;1983:185;;1998:4;;;1983:185;;;;;;;;3051:52:55;;551:66:53;3051:52:55;566:4899:92;;1983:185;;;;;;;;;;;;;;:::i;:::-;;;566:4899;;;;1983:185;;;;;;;;566:4899;;;;;;-1:-1:-1;;566:4899:92;;;;;;;;1746:1:73;566:4899:92;;;;;;;;;-1:-1:-1;;566:4899:92;;;;;2666:30:69;:6;:30;:::i;:::-;1525:73:37;;:::i;:::-;1017:4:92;;:::i;566:4899::-;;;;;;-1:-1:-1;;566:4899:92;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;566:4899:92;;;;;;;;;2666:6:69;:30;:6;:30;:::i;:::-;566:4899:92;;;30924:15:69;566:4899:92;;;;;;;;;;;;;;;;;;;;;;;;3886:208;566:4899;;;;:::i;:::-;1083:103:53;;;;;;;;;:::i;:::-;566:4899:92;;3886:208;;;;;566:4899;3886:208;;566:4899;3886:208;;566:4899;;;;;;;;;;;;-1:-1:-1;;;;;566:4899:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;566:4899:92;;;;;;;:::i;:::-;2666:6:69;;:30;;;:::i;:::-;2707:73:70;;:::i;:::-;-1:-1:-1;;;;;566:4899:92;;2877:22:69;566:4899:92;;2855:10:69;:45;2851:101;;8718:4:70;;;566:4899:92;8718:4:70;;;;;:::i;:::-;566:4899:92;;10896:26:69;;;;;566:4899:92;10896:26:69;;566:4899:92;10896:26:69;;566:4899:92;10896:26:69;;566:4899:92;;10896:26:69;;;;;;;;;;;566:4899:92;;;;10996:24:69;11047;10996;;;:::i;:::-;11047;;:::i;:::-;11087:13;;11125:3;566:4899:92;;11102:21:69;;;;;11159:13;;;566:4899:92;11159:13:69;;;:::i;:::-;566:4899:92;;;;;11227:20:69;566:4899:92;;;;;;;;;;;;1237:14:44;566:4899:92;;;;;1616:3:44;566:4899:92;11187:93:69;;;;:::i;:::-;566:4899:92;1460:31:44;11187:93:69;;;;:::i;:::-;566:4899:92;11299:16:69;;;;:::i;:::-;566:4899:92;11299:20:69;;;:45;;;11125:3;11295:260;;11125:3;;;566:4899:92;11087:13:69;;11295:260;11503:36;566:4899:92;;;;;;;;;;;;;;;;;;;11503:36:69;:16;;;;:::i;:::-;566:4899:92;11522:17:69;;;;:::i;:::-;566:4899:92;11503:36:69;;:::i;:::-;;;:::i;:::-;11295:260;;;;11299:45;11323:17;;;;;:::i;:::-;566:4899:92;11323:21:69;;11299:45;;11102:21;566:4899:92;11102:21:69;566:4899:92;11102:21:69;;566:4899:92;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;10896:26:69;;;;;;;;;;;;;:::i;:::-;;;566:4899:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;10896:26:69;;;;;;;566:4899:92;;;;;;;;;;;;;;;;;;;;;;;;10896:26:69;566:4899:92;;;;;;;;;;;2851:101:69;566:4899:92;2923:18:69;;;;;566:4899:92;;;;;;;;;;-1:-1:-1;;566:4899:92;;;;;;;;;4651:24:69;566:4899:92;;;;;;;;;;-1:-1:-1;;566:4899:92;;;;;465:4:50;566:4899:92;;3098:36:69;3094:108;;566:4899:92;;3094:108:69;3157:34;;566:4899:92;3157:34:69;;;566:4899:92;;;;;;-1:-1:-1;;566:4899:92;;;;;2666:30:69;:6;:30;:::i;:::-;566:4899:92;6403:16:69;;:::i;:::-;566:4899:92;;;;;;;;6421:24:69;;566:4899:92;;;;;6447:25:69;566:4899:92;;;;;;;;;;;;-1:-1:-1;;566:4899:92;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;566:4899:92;;;;;2666:30:69;:6;:30;:::i;:::-;1525:73:37;;:::i;:::-;16222:4:69;566:4899:92;16192:34:69;566:4899:92;;;16192:34:69;566:4899:92;16192:34:69;;:::i;566:4899:92:-;;;;;;-1:-1:-1;;566:4899:92;;;;;;;;:::i;:::-;;;;;5141:6;566:4899;;;:::i;:::-;5141:6;;:::i;566:4899::-;;;;;;;;:::i;:::-;2666:6:69;;:30;:6;;;;:30;:::i;:::-;2707:73:70;;:::i;:::-;8020:101;;:::i;:::-;1083:103:53;;:::i;:::-;-1:-1:-1;;;;;566:4899:92;;;;;;;;;;18298:13:69;566:4899:92;;;;;;;;18294:117:69;;566:4899:92;;;18447:20:69;;;;566:4899:92;18447:20:69;;;;;;;;;;;;;566:4899:92;;;18482:29:69;;18478:272;;3891:15:70;566:4899:92;;;;18298:13:69;566:4899:92;;;;;;;;;;;;;3891:15:70;;;:::i;:::-;;;;;:::i;:::-;;;:::i;:::-;19100:73:69;;;;:::i;:::-;566:4899:92;;;;19183:20:69;566:4899:92;;;;;;;;;;19570:44:69;;;566:4899:92;19570:44:69;;566:4899:92;19570:44:69;;566:4899:92;19570:44:69;;;;;;;;;;;;;;566:4899:92;19570:66:69;;;;:::i;:::-;19678:12;;;;:::i;:::-;566:4899:92;;;;;;;;20054:12:69;19986;;;;;;:::i;:::-;20054;:::i;:::-;20082:30;;;20078:119;;-1:-1:-1;566:4899:92;;;;;;;;;;;;;;;;;;;;20212:91:69;;566:4899:92;;20212:91:69;551:66:53;3051:52:55;566:4899:92;;;;;;20078:119:69;20135:51;566:4899:92;20135:51:69;;;;;566:4899:92;;;;20135:51:69;566:4899:92;;;;;;;;;;19570:44:69;;;;;;;;;;;;;;;;:::i;:::-;;;566:4899:92;;;;;19570:66:69;566:4899:92;;19570:44:69;;;;;;;;566:4899:92;;;;;;;;;18478:272:69;566:4899:92;18703:36:69;;;;;566:4899:92;;18703:36:69;18447:20;;;;;;;;;;;;;;:::i;:::-;;;;18294:117;566:4899:92;18362:38:69;;;;;566:4899:92;;18362:38:69;566:4899:92;;;;;;-1:-1:-1;;566:4899:92;;;;;;;:::i;:::-;;;2666:6:69;:30;:6;:30;:::i;:::-;8718:4:70;;;:::i;:::-;465::50;3098:36:69;;3094:108;;-1:-1:-1;;;;;566:4899:92;;2877:22:69;566:4899:92;;2855:10:69;:45;2851:101;;566:4899:92;;;;;;;;;;;;19917:10:33;8036:26:76;;8032:97;;566:4899:92;8232:183:76;566:4899:92;;19669:4:33;12035:70:69;566:4899:92;;8232:183:76;;:::i;566:4899:92:-;;;;;;;;:::i;:::-;2666:6:69;;;;;;;:30;;;:::i;:::-;-1:-1:-1;;;;;566:4899:92;;564:10:72;:29;560:108;;2707:73:70;;:::i;:::-;10002:12;;;:::i;:::-;859:9:41;:23;;;17174:79:70;;566:4899:92;26600:241:69;;566:4899:92;;-1:-1:-1;;;;;566:4899:92;;;;26872:15:69;566:4899:92;;;;;-1:-1:-1;;;;;566:4899:92;;;;;;;;;;26855:59:69;;26851:120;;-1:-1:-1;;;;;566:4899:92;;;;27006:20:69;566:4899:92;;;;;;;27072:18:69;566:4899:92;;;;;;1460:31:44;27245:67:69;27145:63;1460:31:44;27146:47:69;1460:31:44;1237:14;1460:31;;27146:47:69;:::i;:::-;27145:63;:::i;:::-;566:4899:92;27246:51:69;566:4899:92;;1616:3:44;566:4899:92;27246:51:69;:::i;27245:67::-;566:4899:92;-1:-1:-1;;;;;566:4899:92;;;;27776:13:69;566:4899:92;;-1:-1:-1;;;;;566:4899:92;;;;;27819:55:69;;;;27815:190;;28019:49;;;;28015:175;;28231:27;28350:193;28725:14;28231:27;;;;;:::i;:::-;28269:53;566:4899:92;-1:-1:-1;;;;;566:4899:92;;28269:53:69;:::i;:::-;28472:61;1460:31:44;28398:60:69;1460:31:44;1237:14;1460:31;;28398:60:69;:::i;:::-;566:4899:92;1616:3:44;566:4899:92;28472:61:69;:::i;28350:193::-;566:4899:92;-1:-1:-1;;;;;566:4899:92;;;;27006:20:69;566:4899:92;;;;;;;28725:14:69;;;:::i;:::-;28930:31;28926:134;;566:4899:92;29073:28:69;;29069:125;;566:4899:92;-1:-1:-1;;566:4899:92;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;566:4899:92;;29209:169:69;;-1:-1:-1;566:4899:92;;29209:169:69;566:4899:92;;;;;;;;;;29069:125:69;-1:-1:-1;;;;;566:4899:92;;29117:66:69;;;;-1:-1:-1;;;;;566:4899:92;;;;;;;;;29117:66:69;;;;;566:4899:92;29117:66:69;;566:4899:92;;29117:66:69;;566:4899:92;;;;;;;;;;;;29117:66:69;;;;;;;;29069:125;;;;29117:66;;;;;:::i;:::-;566:4899:92;;29117:66:69;;;;566:4899:92;;;28926:134:69;-1:-1:-1;;;;;566:4899:92;;28977:72:69;;;;566:4899:92;;28977:72:69;566:4899:92;28977:72:69;;566:4899:92;28977:72:69;;566:4899:92;-1:-1:-1;;;;;566:4899:92;;;;;;;;;;;;;;;;-1:-1:-1;;;;;566:4899:92;;28977:72:69;;;;;;;;;;;28926:134;;;;28977:72;;;;:::i;:::-;566:4899:92;;28977:72:69;;;;;566:4899:92;;;;;;;;;28977:72:69;566:4899:92;;;28015:175:69;28091:88;566:4899:92;28091:88:69;;-1:-1:-1;;;;;28091:88:69;;;;566:4899:92;;;;;;;28091:88:69;27815:190;27897:97;566:4899:92;27897:97:69;;;;;;566:4899:92;;;;;;27897:97:69;26851:120;566:4899:92;26937:23:69;;;;;26600:241;566:4899:92;30248:114:69;;-1:-1:-1;;;;;566:4899:92;;;;30456:15:69;566:4899:92;;;;;-1:-1:-1;;;;;566:4899:92;;;;;;;;;30456:43:69;566:4899:92;;;30456:43:69;:::i;:::-;566:4899:92;;26600:241:69;;;30248:114;566:4899:92;30317:34:69;;;;;17174:79:70;566:4899:92;7916:84:49;17211:15:70;566:4899:92;7916:84:49;566:4899:92;17174:79:70;;560:108:72;566:4899:92;616:41:72;;;;564:10;566:4899:92;;616:41:72;566:4899:92;;;;;;-1:-1:-1;;566:4899:92;;;;;2666:30:69;:6;:30;:::i;:::-;566:4899:92;7916:84:49;17245:15:69;566:4899:92;;7916:84:49;;566:4899:92;;;;;;;;;;;;;;-1:-1:-1;;566:4899:92;;;;;8464:4:69;566:4899:92;;:::i;:::-;2666:30:69;:6;:30;:::i;:::-;8718:4:70;;;:::i;:::-;8464::69;:::i;566:4899:92:-;;;;;;-1:-1:-1;;566:4899:92;;;;;;;;5847:20:69;566:4899:92;;;;;;;;;-1:-1:-1;;566:4899:92;;;;;1415:5;566:4899;;:::i;:::-;-1:-1:-1;;;;;566:4899:92;;;;1335:17;566:4899;;;;;1374:10;566:4899;;;;;;;1415:5;:::i;566:4899::-;;;;;;-1:-1:-1;;566:4899:92;;;;;;;;-1:-1:-1;;;;;566:4899:92;;:::i;:::-;2666:30:69;:6;:30;:::i;:::-;566:4899:92;;;31391:20:69;566:4899:92;;;;;;1460:31:44;1237:14;1460:31;;566:4899:92;;1616:3:44;566:4899:92;;;;;;;;;;;;-1:-1:-1;;566:4899:92;;;;;;;;1913:1:73;566:4899:92;;;;;;;;;-1:-1:-1;;566:4899:92;;;;;;;-1:-1:-1;;;;;566:4899:92;;;;;;;2666:30:69;:6;:30;:::i;:::-;1525:73:37;;:::i;:::-;1083:103:53;;:::i;:::-;566:4899:92;;12862:49:69;566:4899:92;;;12862:49:69;566:4899:92;12927:54:69;;;;3051:52:55;551:66:53;3051:52:55;566:4899:92;;;;;;;;-1:-1:-1;;566:4899:92;;;;;1572:4;566:4899;;:::i;:::-;1530:4;;;:::i;566:4899::-;;;;;;-1:-1:-1;;566:4899:92;;;;;;;;2529:3:69;566:4899:92;;;;;;;;;-1:-1:-1;;566:4899:92;;;;;;;;;4803:26:69;566:4899:92;;;;;;;;;;-1:-1:-1;;566:4899:92;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;566:4899:92;;;;;;;;;2455:20;566:4899;;;;;;2504:20;;2500:410;;566:4899;2923:17;;2919:434;;566:4899;1460:31:44;3491:50:92;2455:20;1460:31:44;3428:49:92;3380:171;1460:31:44;1237:14;1460:31;;3428:49:92;:::i;:::-;566:4899;1616:3:44;566:4899:92;3491:50;:::i;3380:171::-;566:4899;;;;;;;;;;2919:434;566:4899;;;2956:84;;2999:10;566:4899;2956:84;;566:4899;3019:4;566:4899;;;;;;;;;;3019:4;566:4899;;;2956:84;;;;;;;;;;2919:434;566:4899;;;;3054:11;566:4899;;;;;3054:59;566:4899;;;3054:59;:::i;:::-;566:4899;;;;;3156:41;;;566:4899;3156:41;;566:4899;3156:41;;566:4899;3156:41;;;;;;;;;;;;;2919:434;566:4899;2455:20;566:4899;3428:49;3380:171;566:4899;;3491:50;566:4899;;;;3211:18;566:4899;;;;;3211:54;566:4899;;;3211:54;:::i;:::-;566:4899;;;;;3279:15;566:4899;;;;;2999:10;566:4899;;;;3279:63;566:4899;;;;;;3279:63;:::i;:::-;566:4899;;2919:434;;;;;;;;;3156:41;;;;;;;;;;;;;;;;;;:::i;:::-;;;566:4899;;;;;;3156:41;;566:4899;2455:20;3156:41;;;;;;;;566:4899;;;;;;;;;2956:84;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;2500:410;566:4899;;;2547:20;;;;;;566:4899;2547:20;;;;;;;;;;;;;2500:410;-1:-1:-1;566:4899:92;;;2540:86;;2582:10;566:4899;2540:86;;566:4899;2602:4;566:4899;;;;;;;;;;;;;;;;;;;2602:4;;566:4899;;2540:86;;;;;;;;2500:410;566:4899;;;2659:20;;;;;566:4899;2659:20;;;;;;;;;;;;;2500:410;566:4899;;;;2640:11;566:4899;;;;;2640:61;566:4899;;;2640:61;:::i;:::-;566:4899;;;;;2772:18;566:4899;;;;;2772:52;566:4899;;;2772:52;:::i;:::-;566:4899;;;;;2838:15;566:4899;;;;;2582:10;566:4899;;;;;;;2838:61;566:4899;;;2838:61;:::i;:::-;566:4899;;2500:410;;;2659:20;;;;;;;;;;;;;;:::i;:::-;;;;2540:86;;;;;;;;;;;;;:::i;:::-;;;;;;566:4899;;;;;;;;;2547:20;;;;;;;;;;;;;;:::i;:::-;;;;566:4899;;;;;;-1:-1:-1;;566:4899:92;;;;;;;:::i;:::-;1083:103:53;;:::i;:::-;4665:4:92;:30;;;;-1:-1:-1;;;;;566:4899:92;;4665:30;566:4899;4665:30;;566:4899;;4665:30;;566:4899;;4665:4;566:4899;4665:4;;;:30;;;;;;;;3051:52:55;;551:66:53;3051:52:55;566:4899:92;;4665:30;;;;;:::i;:::-;566:4899;4665:30;;;;566:4899;;;;;;;;;;;;;;-1:-1:-1;;566:4899:92;;;;;1257:4;566:4899;;:::i;:::-;-1:-1:-1;;;;;566:4899:92;;;;1177:17;566:4899;;;;;1216:10;566:4899;;;;;;;1257:4;:::i;:::-;566:4899;;;;;;-1:-1:-1;;566:4899:92;;;;;4985:4;566:4899;;:::i;:::-;4985:4;:::i;566:4899::-;;;;;-1:-1:-1;;566:4899:92;;;;;2666:30:69;:6;:30;:::i;:::-;1525:73:37;;:::i;:::-;6754:5:69;;:::i;566:4899:92:-;;;;;-1:-1:-1;;566:4899:92;;;;;2666:30:69;:6;:30;:::i;:::-;566:4899:92;6226:16:69;;:::i;:::-;566:4899:92;;;;;;;;;;;;;-1:-1:-1;;566:4899:92;;;;;1017:4;;:::i;566:4899::-;;;;;-1:-1:-1;;566:4899:92;;;;;;;-1:-1:-1;;;;;566:4899:92;;;;;;;;2666:30:69;:6;:30;:::i;:::-;1525:73:37;;:::i;:::-;566:4899:92;;32073:27:69;566:4899:92;;;;;;;;32073:27:69;566:4899:92;32116:32:69;566:4899:92;32116:32:69;;566:4899:92;;;;;;-1:-1:-1;;566:4899:92;;;;;;;;:::i;:::-;2666:30:69;:6;:30;:::i;:::-;-1:-1:-1;;;;;566:4899:92;;;;;30692:13:69;566:4899:92;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;566:4899:92;;;;;;:::o;:::-;-1:-1:-1;;566:4899:92;;;;;;-1:-1:-1;;;;;566:4899:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;566:4899:92;;;;;;-1:-1:-1;;;;;566:4899:92;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;566:4899:92;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;;;;;566:4899:92;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::o;1590:149::-;;-1:-1:-1;;;;;566:4899:92;;17044:15:70;566:4899:92;17044:15:70;566:4899:92;;1192:1:75;566:4899:92;17044:15:70;566:4899:92;;958:1:75;7916:84:49;;16646:28:70;16642:93;;1083:103:53;;:::i;:::-;566:4899:92;;;;;;;;;;;;;;;;;17044:15:70;566:4899:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;566:4899:92;;17044:15:70;566:4899:92;12587:18:70;566:4899:92;;;17044:15:70;566:4899:92;17044:15:70;566:4899:92;;;17044:15:70;566:4899:92;;;12660:14:70;566:4899:92;;;17044:15:70;566:4899:92;;958:1:75;566:4899:92;;;17044:15:70;566:4899:92;;;;;;;;;;;;;;;;17044:15:70;566:4899:92;;;17044:15:70;566:4899:92;;17044:15:70;566:4899:92;;;;;;;;;;;;;:::i;:::-;;;;1947:24:77;566:4899:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;17044:15:70;566:4899:92;;;;;;;;;;;1981:47:77;2061:24;;;:::i;:::-;566:4899:92;;;2038:47:77;2127:24;;;:::i;:::-;566:4899:92;;;2095:56:77;566:4899:92;;;9811:24:76;;;:::i;:::-;9470:46;566:4899:92;6019:108:49;;17044:15:70;9952:13:76;;;;;;566:4899:92;;;;;2161:107:77;2300:24;;;:::i;:::-;566:4899:92;;;2278:46:77;566:4899:92;;7916:84:49;1192:1:75;7916:84:49;;;;2365:119:77;;;;9932:464:76;2365:190:77;;;;9932:464:76;17044:15:70;2586:13:77;;;;;;566:4899:92;;;;;-1:-1:-1;;;;;566:4899:92;;17044:15:70;566:4899:92;12587:18:70;566:4899:92;;;17044:15:70;566:4899:92;11419:13:70;17044:15;11467:3;566:4899:92;;;11438:20:70;566:4899:92;;11434:31:70;;;;;11619:23;11567:139;11619:23;;1192:1:75;11619:23:70;;:::i;:::-;566:4899:92;11660:32:70;566:4899:92;;;;11660:29:70;:32;:::i;:::-;566:4899:92;11567:139:70;;:::i;:::-;566:4899:92;17044:15:70;566:4899:92;;;;;17044:15:70;566:4899:92;;;11419:13:70;;11434:31;;;;;;;17044:15;551:66:53;3051:52:55;-1:-1:-1;;;;;566:4899:92;17044:15:70;566:4899:92;;;;;;;;;;;;;8470:156:49;;566:4899:92;;;;;;15164:48:69;;;1590:149:92:o;2601:3:77:-;-1:-1:-1;;;;;2663:18:77;566:4899:92;;;;2663:15:77;:18;:::i;:::-;566:4899:92;;17044:15:70;566:4899:92;;;;;17044:15:70;566:4899:92;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;566:4899:92;;;;;;;;;;;;;;;;;;17044:15:70;566:4899:92;;;;;17044:15:70;566:4899:92;;;2755:33:77;566:4899:92;;;;2755:18:77;:33;;;;;:::i;:::-;;;:::i;:::-;;566:4899:92;;;;;:::i;:::-;;;;:::i;:::-;7589:31:77;;;7636:21;465:4:50;7585:269:77;2802:48;566:4899:92;;;;2802:19:77;:48;:::i;:::-;566:4899:92;2932:17:77;1237:14:44;1460:31;;2932:17:77;;;:::i;:::-;566:4899:92;;3059:78:77;;566:4899:92;;;;;;3800:69:77;;;;7585:269;3977:660;;;7585:269;1192:1:75;2601:3:77;;2571:13;566:4899:92;2571:13:77;;3977:660;566:4899:92;4062:56:77;566:4899:92;;4062:56:77;:::i;:::-;4157:23;566:4899:92;;;;4157:20:77;:23;:::i;:::-;566:4899:92;;;;8915:41:77;4236:195;566:4899:92;17044:15:70;566:4899:92;;8915:29:77;:41;:::i;:::-;566:4899:92;9458:36:77;;;9454:804;;3977:660;4454:30;;;1192:1:75;4454:30:77;;4450:173;;3977:660;;;;;4450:173;4586:17;4545:39;;;;:::i;:::-;4586:17;;;:::i;:::-;4450:173;;;;9454:804;1068:5:50;566:4899:92;;;1068:5:50;:::i;:::-;1186:122;;;1192:1:75;1186:122:50;;;;;;;;;;3665:25:46;566:4899:92;10184:31:77;566:4899:92;;10120:42:77;566:4899:92;;;;10120:30:77;:42;:::i;:::-;566:4899:92;;;10184:19:77;:31;:::i;:::-;566:4899:92;3665:25:46;;:::i;:::-;566:4899:92;;;;;;;;;;;;;1192:1:75;566:4899:92;1625:13:50;566:4899:92;;1625:13:50;:::i;:::-;9454:804:77;;;;;;3800:69;1192:1:75;566:4899:92;;;;;;:::i;:::-;;;;:::i;:::-;3827:42:77;3800:69;;;3059:78;3114:8;1192:1:75;3114:8:77;;;;7585:269;566:4899:92;;1192:1:75;566:4899:92;;:::i;:::-;7678:32:77;1192:1:75;;12660:14:70;566:4899:92;-1:-1:-1;;;;;566:4899:92;;;;;;;7733:32:77;;;;566:4899:92;7733:32:77;;;;;;;;;17044:15:70;7733:32:77;;;7674:180;7726:39;7585:269;;7733:32;;;566:4899:92;7733:32:77;;566:4899:92;7733:32:77;;;;;;566:4899:92;7733:32:77;;;:::i;:::-;;;566:4899:92;;;;;7733:32:77;;;;;;-1:-1:-1;7733:32:77;;7674:180;7803:40;17044:15:70;7803:40:77;12660:14:70;17044:15;7803:40:77;2365:190;566:4899:92;;958:1:75;7916:84:49;1192:1:75;7916:84:49;566:4899:92;;-1:-1:-1;2365:190:77;;:119;2424:56;;;;;:::i;:::-;:60;;2365:119;;;;9967:3:76;12587:18:70;566:4899:92;;;;;;12587:18:70;566:4899:92;;;;;;;3267:1:75;6019:108:49;;;;;3267:1:75;;;6019:108:49;;1192:1:75;6019:108:49;;;3267:1:75;;10348:37:76;;;;:::i;:::-;566:4899:92;;9937:13:76;;566:4899:92;;;;;;;;:::i;:::-;17044:15:70;566:4899:92;;17044:15:70;566:4899:92;;;;17044:15:70;566:4899:92;;;;;;;;;;;;;;;;1192:1:75;566:4899:92;;;-1:-1:-1;;;;;566:4899:92;;;;;;;;;;;;;;;;16642:93:70;-1:-1:-1;;;;;16697:27:70;;17044:15;16697:27;566:4899:92;16697:27:70;566:4899:92;;17044:15:70;16697:27;1931:430:37;566:4899:92;;;2303:50:37;;;2320:22;;566:4899:92;;;;;;;2303:50:37;;;;;;:::i;:::-;566:4899:92;2293:61:37;;1931:430;:::o;566:4899:92:-;;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;930:316:79:-;-1:-1:-1;;;;;566:4899:92;1148:4:79;1140:31;1136:104;;930:316::o;1136:104::-;1194:35;;;;;;1688:201:37;33336:53:69;;1762:20:37;1774:7;;;;1762:20;:::i;:::-;33336:11:69;566:4899:92;;;;33336:53:69;;;;;566:4899:92;;;;1820:10:37;566:4899:92;;;;33383:4:69;566:4899:92;;;;;;;;;;-1:-1:-1;;;;;566:4899:92;;;;;;;;;;;33336:53:69;;;;;;;;;;1774:7:37;33336:53:69;;;1688:201:37;1797:34;;1793:90;;1688:201::o;1793:90::-;1854:18;1774:7;1854:18;33336:53:69;1774:7:37;1854:18;33336:53:69;;;;;;;;;;;;;;:::i;:::-;;;;6924:1161;6986:16;;:::i;:::-;;;;7127:13;;;;;;6982:900;566:4899:92;7634:24:69;566:4899:92;7615:15:69;:43;;7611:122;;8470:156:49;;7920:15:69;566:4899:92;8470:156:49;;7920:15:69;566:4899:92;8046:32:69;566:4899:92;;;1017:4;566:4899;;8046:32:69;6924:1161::o;7611:122::-;7689:25;;;;;;6924:1161;6986:16;;:::i;:::-;;;;8046:32;566:4899:92;;8470:156:49;7920:15:69;566:4899:92;8470:156:49;7920:15:69;566:4899:92;;;;;;8046:32:69;6924:1161::o;6982:900::-;7841:16;566:4899:92;7841:16:69;;566:4899:92;7841:16:69;6249:212:70;566:4899:92;6394:25:70;566:4899:92;6375:15:70;:44;;:79;;;6249:212;:::o;6375:79::-;566:4899:92;7916:84:49;6423:15:70;566:4899:92;7916:84:49;;;6249:212:70;:::o;14067:171:69:-;-1:-1:-1;;;;;566:4899:92;;17044:15:70;566:4899:92;17044:15:70;566:4899:92;;1192:1:75;566:4899:92;17044:15:70;566:4899:92;;958:1:75;7916:84:49;;14143:89:69;;14067:171;:::o;14143:89::-;14197:24;17044:15:70;14197:24:69;;566:4899:92;;17044:15:70;14197:24:69;8655:1281;8759:36;-1:-1:-1;;;;;566:4899:92;;;;;;-1:-1:-1;566:4899:92;1177:17;566:4899;;;-1:-1:-1;566:4899:92;;;8759:36:69;;:::i;:::-;566:4899:92;-1:-1:-1;566:4899:92;-1:-1:-1;566:4899:92;;;-1:-1:-1;566:4899:92;;1177:17;7916:84:49;958:1:75;7916:84:49;;566:4899:92;2958:30:75;;;:62;:30;566:4899:92;2790:99:75;;2958:62;6019:108:49;;7592:82:70;;;8655:1281:69;-1:-1:-1;8867:19:69;;;9011:16;;-1:-1:-1;9011:16:69;;566:4899:92;;-1:-1:-1;9011:16:69;8863:916;2958:30:75;:62;566:4899:92;2958:62:75;:::i;:::-;6019:108:49;;9500:15:69;:49;;9496:131;;8470:156:49;;8863:916:69;566:4899:92;-1:-1:-1;566:4899:92;-1:-1:-1;566:4899:92;;8470:156:49;;566:4899:92;-1:-1:-1;566:4899:92;;9892:37:69;566:4899:92;;;1177:17;566:4899;;9892:37:69;8655:1281::o;9496:131::-;9580:28;;-1:-1:-1;9580:28:69;;566:4899:92;;-1:-1:-1;9580:28:69;7592:82:70;7648:26;;;;566:4899:92;;;;;;;;;7608:15:70;:66;;7592:82;;;8655:1281:69;8759:36;-1:-1:-1;;;;;566:4899:92;;;;;;;;8759:17:69;566:4899:92;;;;;;;8759:36:69;;:::i;:::-;566:4899:92;;;;;;;;;;8759:17:69;7916:84:49;958:1:75;7916:84:49;;566:4899:92;2958:30:75;;:62;:30;566:4899:92;2790:99:75;;2958:62;6019:108:49;;7592:82:70;;;8655:1281:69;-1:-1:-1;;8867:19:69;;;566:4899:92;9892:37:69;8902:140;8470:156:49;566:4899:92;8863:916:69;566:4899:92;;;;;;8470:156:49;566:4899:92;;;;;;;;;9892:37:69;8655:1281::o;8863:916::-;9735:19;;566:4899:92;9735:19:69;;566:4899:92;;;9735:19:69;7592:82:70;7648:26;;;;;566:4899:92;;;;;;;;7608:15:70;:66;;7592:82;;;;1192:349:53;551:66;2806:53:55;;1316:93:53;;1529:4;3051:52:55;;1192:349:53:o;1316:93::-;1368:30;-1:-1:-1;1368:30:53;;-1:-1:-1;1368:30:53;2311:281:44;1237:14;2426:25;;;:58;;;;;2311:281;2422:113;;;3060:43;566:4899:92;3080:3:44;566:4899:92;3060:43:44;:::i;:::-;2311:281;:::o;2422:113::-;2507:17;;;;;;2426:58;2455:29;;;;2426:58;;;14536:683:69;-1:-1:-1;;;;;566:4899:92;;14638:5:69;566:4899:92;14638:5:69;566:4899:92;;;14638:5:69;566:4899:92;8470:156:49;;566:4899:92;;8470:156:49;;566:4899:92;;15164:48:69;566:4899:92;;;1572:4;566:4899;;15164:48:69;14536:683::o;8911:160:70:-;-1:-1:-1;;;;;566:4899:92;;9217:15:70;566:4899:92;9217:15:70;566:4899:92;;7916:84:49;566:4899:92;9217:15:70;566:4899:92;;7916:84:49;8984:24:70;8980:85;;8911:160;:::o;8980:85::-;9031:23;9217:15;9031:23;;566:4899:92;;9217:15:70;9031:23;2786:145;9187:17:73;2806:53:55;566:4899:92;2837:88:70;;2786:145::o;2837:88::-;2894:20;-1:-1:-1;2894:20:70;;-1:-1:-1;2894:20:70;10039:200;-1:-1:-1;;;;;566:4899:92;;;;;-1:-1:-1;566:4899:92;10124:13:70;566:4899:92;;;-1:-1:-1;566:4899:92;;;10124:41:70;10120:113;;10039:200;:::o;10120:113::-;10188:34;-1:-1:-1;10188:34:70;;566:4899:92;;-1:-1:-1;10188:34:70;3450:119;;3544:17;3450:119;3544:17;:::i;:::-;566:4899:92;;;;;;3543:18:70;566:4899:92;-1:-1:-1;566:4899:92;3543:18:70;;:::i;:::-;3450:119::o;29391:586:69:-;;;-1:-1:-1;;;;;566:4899:92;;;29494:18:69;;;29490:82;;29924:46;566:4899:92;;;;;;29510:1:69;566:4899:92;29607:18:69;566:4899:92;;29607:41:69;566:4899:92;;29510:1:69;566:4899:92;;29607:41:69;:::i;:::-;29778:14;;;:::i;:::-;566:4899:92;29510:1:69;566:4899:92;29607:18:69;566:4899:92;;;29510:1:69;566:4899:92;;29863:15:69;566:4899:92;;;29510:1:69;566:4899:92;;29510:1:69;566:4899:92;;;;29510:1:69;566:4899:92;29863:45:69;566:4899:92;;;29863:45:69;:::i;:::-;566:4899:92;;;;;;;29924:46:69;29391:586::o;29490:82::-;29535:26;29510:1;29535:26;;29510:1;29535:26;8177:168:70;7916:84:49;8248:15:70;566:4899:92;;7916:84:49;;8244:95:70;;8177:168::o;8244:95::-;8305:23;-1:-1:-1;8305:23:70;;-1:-1:-1;8305:23:70;31497:216:69;2529:3;31589:45;;31585:122;;31497:216;:::o;31585:122::-;31657:39;;;;566:4899:92;;31657:39:69;;22982:325;-1:-1:-1;;;;;;22982:325:69;566:4899:92;;;;23065:18:69;566:4899:92;;23226:74:69;566:4899:92;2529:3:69;566:4899:92;;;;;23138:15:69;566:4899:92;;;;;;;;;;;;;;;;;;;;23226:74:69;22982:325::o;23313:831::-;;;-1:-1:-1;;;;;566:4899:92;;;23414:16:69;;;23410:83;;24093:44;566:4899:92;;;;;;23428:1:69;566:4899:92;23528:18:69;566:4899:92;;23528:41:69;566:4899:92;;23428:1:69;566:4899:92;;23528:41:69;:::i;:::-;23949:14;;;:::i;:::-;566:4899:92;23428:1:69;566:4899:92;23528:18:69;566:4899:92;;;23428:1:69;566:4899:92;;24034:15:69;566:4899:92;;;23428:1:69;566:4899:92;;23428:1:69;566:4899:92;;;;23428:1:69;566:4899:92;24034:43:69;566:4899:92;;;24034:43:69;:::i;23410:83::-;23453:29;23428:1;23453:29;;23428:1;23453:29;16264:226;16402:4;8470:156:49;16336:15:69;566:4899:92;8470:156:49;;16336:15:69;566:4899:92;16461:22:69;-1:-1:-1;16461:22:69;;16264:226::o;1822:864:50:-;2004:6;;2000:58;;2560:120;2153:5;;;;:::i;:::-;2560:120;;;;;;;;;;1822:864;:::o;2000:58::-;2033:14;2009:1;2033:14;;2009:1;2033:14;32241:199:69;;-1:-1:-1;;;;;566:4899:92;32339:10:69;:25;32335:62;;32428:4;;;:::i;32335:62::-;32380:7;:::o;34375:314:119:-;34568:16;34552:33;;34548:105;;34375:314;:::o;34548:105::-;34608:34;;;;566:4899:92;;34608:34:119;;4346:904:70;4485:10;;4481:23;;-1:-1:-1;;;;;9520:18:73;566:4899:92;;;4494:1:70;566:4899:92;;;;;4494:1:70;566:4899:92;2806:53:55;566:4899:92;;;;;;4494:1:70;566:4899:92;;;;;;;;;;;;;4738:9:70;;;9342:26:73;;3831:53:55;;566:4899:92;;;;;;;;;3051:52:55;4734:423:70;4494:1;566:4899:92;;;;4494:1:70;566:4899:92;3051:52:55;4346:904:70:o;4734:423::-;;4940:217;9342:26:73;3831:53:55;;566:4899:92;6806:1:47;566:4899:92;;;;;;;3051:52:55;4734:423:70;;4481:23;4497:7;;:::o;2097:657:49:-;;566:4899:92;19627:2:33;566:4899:92;9400:76:49;;566:4899:92;2539:209:49;;;566:4899:92;2539:209:49;;;;2097:657;:::o;9180:112::-;9268:13;9186:14;9268:13;;9186:14;9268:13;2097:657;;8966:3;8956:13;;;;8952:64;;566:4899:92;;;;;;;;2641:5:118;9226:3:49;2641:5:118;:13;:5;;;:13;9226:3:49;2641:13:118;19627:2:33;9204:40:49;9180:112;;566:4899:92;19627:2:33;566:4899:92;9400:76:49;;2539:209;;;;;;;;;2097:657;:::o;2641:13:118:-;;;32935:227:69;33615:45;;32935:227;33021:20;33033:7;;;;33021:20;:::i;:::-;-1:-1:-1;;;;;33615:11:69;566:4899:92;;;;;;;33615:45:69;;;;;;566:4899:92;33615:45:69;;33078:10;33615:45;;;;566:4899:92;;;;;;;;;;;-1:-1:-1;;;;;566:4899:92;;;;;;;;;;;;;;-1:-1:-1;566:4899:92;;;:::o;:::-;;;;;;;;;;8442:263:76;6019:108:49;;566:4899:92;6019:108:49;;19669:4:33;566:4899:92;;;;;;;;;;;;;;;8442:263:76;:::o;7866:704:77:-;;;8372:29;465:4:50;838:5;8372:191:77;7866:704;8058:20;:48;:20;;;;;:48;:::i;:::-;566:4899:92;1946:22:46;8466:42:77;:30;;;;;:42;:::i;:::-;566:4899:92;8522:31:77;:19;;;;;:31;:::i;:::-;566:4899:92;1946:22:46;;:::i;:::-;838:5:50;:::i;:::-;566:4899:92;8372:29:77;;;:191;:::i;:::-;566:4899:92;7866:704:77:o"},"methodIdentifiers":{"addLiquidityToBuffer(address,uint256,uint256,uint256,address)":"e2a92b1a","addLiquidityToBufferUnbalancedForTests(address,uint256,uint256)":"1f568ea3","areBuffersPaused()":"55cba7fe","collectAggregateFees(address)":"8f4ab9ca","disableQuery()":"de1a36a6","disableQueryPermanently()":"821440f2","disableRecoveryMode(address)":"bffb78b2","enableQuery()":"e0d55605","enableRecoveryMode(address)":"dc3f574e","getActionId(bytes4)":"851c1bb3","getBufferAsset(address)":"0387587d","getBufferBalance(address)":"4021fe0f","getBufferMinimumTotalSupply()":"26a8a991","getBufferOwnerShares(address,address)":"9385e39a","getBufferPeriodDuration()":"20c1fb7a","getBufferPeriodEndTime()":"cd51c12f","getBufferTotalShares(address)":"f2784e07","getMaximumPoolTokens()":"2e42f4d5","getMinimumPoolTokens()":"a8175b27","getMinimumTradeAmount()":"e2cb0ba0","getMinimumWrapAmount()":"53956aa2","getPauseWindowEndTime()":"8a8d123a","getPoolMinimumTotalSupply()":"d0965a6b","getVaultPausedState()":"85c8c015","initializeBuffer(address,uint256,uint256,uint256,address)":"653eb3b0","isVaultPaused()":"098401f5","manualBurnBufferShares(address,address,uint256)":"e8338894","manualDisableRecoveryMode(address)":"7578abb9","manualEnableRecoveryMode(address)":"27521d0c","manualMintBufferShares(address,address,uint256)":"6b230291","manualMintMinimumBufferSupplyReserve(address)":"e99ac9a3","manualPausePool(address)":"1558356e","manualPauseVault()":"071d8a02","manualReentrancyAddLiquidityToBuffer(address,uint256,uint256,uint256,address)":"9260d920","manualReentrancyDisableRecoveryMode(address)":"16df26cb","manualReentrancyInitializeBuffer(address,uint256,uint256,uint256,address)":"b61398cd","manualReentrancyRemoveLiquidityFromBufferHook(address,uint256,uint256,uint256,address)":"c7b3b3a9","manualUnpausePool(address)":"52b9e33d","manualUnpauseVault()":"cc671ff7","mockEnsurePoolNotInRecoveryMode(address)":"0b9df1f6","mockWithValidPercentage(uint256)":"88e5101a","pausePool(address)":"55aca1ec","pauseVault()":"9e0879c2","pauseVaultBuffers()":"e085c5a8","reentrancyGuardEntered()":"d2c725e0","removeLiquidityFromBuffer(address,uint256,uint256,uint256)":"ebc7955c","removeLiquidityFromBufferHook(address,uint256,uint256,uint256,address)":"5dcacd64","setAuthorizer(address)":"058a628f","setProtocolFeeController(address)":"2d771389","setStaticSwapFeePercentage(address,uint256)":"d15126ba","unpausePool(address)":"f21c38cd","unpauseVault()":"0b7562be","unpauseVaultBuffers()":"b9212b49","updateAggregateSwapFeePercentage(address,uint256)":"5e0b06f4","updateAggregateYieldFeePercentage(address,uint256)":"e253670a","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"mainVault\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"bufferPeriodDuration\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"minTradeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minWrapAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceOverflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CodecOverflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotStaticCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"PoolTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"addLiquidityToBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"underlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedAmount\",\"type\":\"uint256\"}],\"name\":\"addLiquidityToBufferUnbalancedForTests\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"areBuffersPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"collectAggregateFees\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"totalSwapFees\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"totalYieldFees\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disableQueryPermanently\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"disableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"enableQuery\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"enableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getBufferBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getBufferOwnerShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getBufferPeriodEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getBufferTotalShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumPoolTokens\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumTradeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumWrapAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolMinimumTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlyingRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrappedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"initializeBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isVaultPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"manualBurnBufferShares\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"manualDisableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"manualEnableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"manualMintBufferShares\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"manualMintMinimumBufferSupplyReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"manualPausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualPauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountUnderlyingInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountWrappedInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactSharesToIssue\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"manualReentrancyAddLiquidityToBuffer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"manualReentrancyDisableRecoveryMode\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"manualReentrancyInitializeBuffer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"manualReentrancyRemoveLiquidityFromBufferHook\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"manualUnpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualUnpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"mockEnsurePoolNotInRecoveryMode\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"percentage\",\"type\":\"uint256\"}],\"name\":\"mockWithValidPercentage\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"pausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reentrancyGuardEntered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"}],\"name\":\"removeLiquidityFromBuffer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sharesToRemove\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountUnderlyingOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountWrappedOutRaw\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sharesOwner\",\"type\":\"address\"}],\"name\":\"removeLiquidityFromBufferHook\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"removedUnderlyingBalanceRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"removedWrappedBalanceRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"setAuthorizer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"setProtocolFeeController\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"setStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"unpausePool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVault\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpauseVaultBuffers\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"updateAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"PoolTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"Approval(address,address,address,uint256)\":{\"params\":{\"owner\":\"The token holder\",\"pool\":\"The pool token receiving the allowance\",\"spender\":\"The account being authorized to spend a given amount of the token\",\"value\":\"The number of tokens spender is authorized to transfer from owner\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Transfer(address,address,address,uint256)\":{\"params\":{\"from\":\"The token source\",\"pool\":\"The pool token being transferred\",\"to\":\"The token destination\",\"value\":\"The number of tokens\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"details\":\"The buffer needs to be initialized beforehand.\",\"params\":{\"exactSharesToIssue\":\"The value in underlying tokens that `sharesOwner` wants to add to the buffer, in underlying token decimals\",\"maxAmountUnderlyingInRaw\":\"Maximum amount of underlying tokens to add to the buffer. It is expressed in underlying token native decimals\",\"maxAmountWrappedInRaw\":\"Maximum amount of wrapped tokens to add to the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens deposited into the buffer\"}},\"addLiquidityToBufferUnbalancedForTests(address,uint256,uint256)\":{\"details\":\"Adds liquidity to buffer unbalanced, so it can unbalance the buffer.\"},\"areBuffersPaused()\":{\"details\":\"When buffers are paused, all buffer operations (i.e., calls on the Router with `isBuffer` true) will revert. Pausing buffers is reversible. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `isVaultPaused` to check the pause state of the Vault.\",\"returns\":{\"_0\":\"True if the Vault buffers are paused\"}},\"collectAggregateFees(address)\":{\"details\":\"Fees are sent to the ProtocolFeeController address.\",\"params\":{\"pool\":\"The pool on which all aggregate fees should be collected\"},\"returns\":{\"totalSwapFees\":\"An array with the total swap fees collected, sorted in token registration order\",\"totalYieldFees\":\"An array with the total yield fees collected, sorted in token registration order\"}},\"disableQuery()\":{\"details\":\"The query functions rely on a specific EVM feature to detect static calls. Query operations are exempt from settlement constraints, so it's critical that no state changes can occur. We retain the ability to disable queries in the unlikely event that EVM changes violate its assumptions (perhaps on an L2). This function can be acted upon as an emergency measure in ambiguous contexts where it's not 100% clear whether disabling queries is completely necessary; queries can still be re-enabled after this call.\"},\"disableQueryPermanently()\":{\"details\":\"Shall only be used when there is no doubt that queries pose a fundamental threat to the system.\"},\"disableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It re-syncs live balances (which could not be updated during Recovery Mode), forfeiting any yield fees that accrued while enabled. It makes external calls, and could potentially fail if there is an issue with any associated Rate Providers.\",\"params\":{\"pool\":\"The address of the pool\"}},\"enableQuery()\":{\"details\":\"Only works if queries are not permanently disabled.\"},\"enableRecoveryMode(address)\":{\"details\":\"This is a permissioned function. It enables a safe proportional withdrawal, with no external calls. Since there are no external calls, ensuring that entering Recovery Mode cannot fail, we cannot compute and so must forfeit any yield fees between the last operation and enabling Recovery Mode. For the same reason, live balances cannot be updated while in Recovery Mode, as doing so might cause withdrawals to fail.\",\"params\":{\"pool\":\"The address of the pool\"}},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getBufferAsset(address)\":{\"details\":\"The asset can never change after buffer initialization.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"underlyingToken\":\"Address of the underlying token registered for the wrapper; `address(0)` if the buffer has not been initialized.\"}},\"getBufferBalance(address)\":{\"details\":\"All values are in native token decimals of the wrapped or underlying tokens.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"_0\":\"Amount of underlying tokens deposited into the buffer, in native token decimals\",\"_1\":\"Amount of wrapped tokens deposited into the buffer, in native token decimals\"}},\"getBufferMinimumTotalSupply()\":{\"details\":\"This prevents buffers from being completely drained. When the buffer is initialized, this minimum number of shares is added to the shares resulting from the initial deposit. Buffer total supply accounting is internal to the Vault, as buffers are not tokenized.\",\"returns\":{\"_0\":\"The minimum total supply a buffer can have after initialization\"}},\"getBufferOwnerShares(address,address)\":{\"params\":{\"liquidityOwner\":\"Address of the user that owns liquidity in the wrapped token's buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"shares\":\"Amount of shares allocated to the liquidity owner, in native underlying token decimals\"}},\"getBufferPeriodDuration()\":{\"details\":\"This value is immutable. It represents the period during which, if paused, the Vault will remain paused. This ensures there is time available to address whatever issue caused the Vault to be paused. Balancer timestamps are 32 bits.\",\"returns\":{\"_0\":\"The length of the buffer period in seconds\"}},\"getBufferPeriodEndTime()\":{\"details\":\"This value is immutable. If already paused, the Vault can be unpaused until this timestamp. Balancer timestamps are 32 bits.\",\"returns\":{\"_0\":\"The timestamp after which the Vault remains permanently unpaused\"}},\"getBufferTotalShares(address)\":{\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"shares\":\"Amount of supply shares of the buffer, in native underlying token decimals\"}},\"getMaximumPoolTokens()\":{\"returns\":{\"_0\":\"The maximum token count of a pool\"}},\"getMinimumPoolTokens()\":{\"details\":\"We expect the vast majority of pools to be 2-token.\",\"returns\":{\"_0\":\"The minimum token count of a pool\"}},\"getMinimumTradeAmount()\":{\"details\":\"This limit is applied to the 18-decimal \\\"upscaled\\\" amount in any operation (swap, add/remove liquidity).\",\"returns\":{\"_0\":\"The minimum trade amount as an 18-decimal floating point number\"}},\"getMinimumWrapAmount()\":{\"details\":\"This limit is applied to the wrap operation amount, in native underlying token decimals.\",\"returns\":{\"_0\":\"The minimum wrap amount in native underlying token decimals\"}},\"getPauseWindowEndTime()\":{\"details\":\"This value is immutable, and represents the timestamp after which the Vault can no longer be paused by governance. Balancer timestamps are 32 bits.\",\"returns\":{\"_0\":\"The timestamp when the Vault's pause window ends\"}},\"getPoolMinimumTotalSupply()\":{\"details\":\"This prevents pools from being completely drained. When the pool is initialized, this minimum amount of BPT is minted to the zero address. This is an 18-decimal floating point number; BPT are always 18 decimals.\",\"returns\":{\"_0\":\"The minimum total supply a pool can have after initialization\"}},\"getVaultPausedState()\":{\"details\":\"Balancer timestamps are 32 bits.\",\"returns\":{\"_0\":\"True if the Vault is paused\",\"_1\":\"The timestamp of the end of the Vault's pause window\",\"_2\":\"The timestamp of the end of the Vault's buffer period\"}},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"params\":{\"amountUnderlyingRaw\":\"Amount of underlying tokens that will be deposited into the buffer\",\"amountWrappedRaw\":\"Amount of wrapped tokens that will be deposited into the buffer\",\"minIssuedShares\":\"Minimum amount of shares to receive from the buffer, expressed in underlying token native decimals\",\"sharesOwner\":\"Address that will own the deposited liquidity. Only this address will be able to remove liquidity from the buffer\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"issuedShares\":\"the amount of tokens sharesOwner has in the buffer, expressed in underlying token amounts. (it is the BPT of an internal ERC4626 buffer). It is expressed in underlying token native decimals.\"}},\"isVaultPaused()\":{\"details\":\"If the Vault is paused, all non-Recovery Mode state-changing operations on pools will revert. Note that ERC4626 buffers and the Vault have separate and independent pausing mechanisms. Pausing the Vault does not also pause buffers (though we anticipate they would likely be paused and unpaused together). Call `areBuffersPaused` to check the pause state of the buffers.\",\"returns\":{\"_0\":\"True if the Vault is paused\"}},\"pausePool(address)\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during pool factory deployment.\",\"params\":{\"pool\":\"The pool being paused\"}},\"pauseVault()\":{\"details\":\"This is a permissioned function that will only work during the Pause Window set during deployment. Note that ERC4626 buffer operations have an independent pause mechanism, which is not affected by pausing the Vault. Custom routers could still wrap/unwrap using buffers while the Vault is paused, unless buffers are also paused (with `pauseVaultBuffers`).\"},\"pauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. Currently it's not possible to pause vault buffers individually. This is a permissioned call, and is reversible (see `unpauseVaultBuffers`). Note that the Vault has a separate and independent pausing mechanism. It is possible to pause the Vault (i.e. pool operations), without affecting buffers, and vice versa.\"},\"reentrancyGuardEntered()\":{\"returns\":{\"_0\":\"True if the Vault is currently executing a nonReentrant function\"}},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"details\":\"Only proportional exits are supported, and the sender has to be the owner of the shares. This function unlocks the Vault just for this operation; it does not work with a Router as an entrypoint. Pre-conditions: - The buffer needs to be initialized. - sharesOwner is the original msg.sender, it needs to be checked in the Router. That's why this call is authenticated; only routers approved by the DAO can remove the liquidity of a buffer. - The buffer needs to have some liquidity and have its asset registered in `_bufferAssets` storage.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares. It is expressed in underlying token native decimals\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"removeLiquidityFromBufferHook(address,uint256,uint256,uint256,address)\":{\"details\":\"Internal hook for `removeLiquidityFromBuffer`. Can only be called by the Vault itself via `removeLiquidityFromBuffer`, which correctly forwards the real sender as the `sharesOwner`. This function must be reentrant because it calls the nonReentrant function `sendTo`. However, since `sendTo` is the only function that makes external calls, `removeLiquidityFromBufferHook` cannot reenter the Vault.\",\"params\":{\"minAmountUnderlyingOutRaw\":\"Minimum amount of underlying tokens to receive from the buffer. It is expressed in underlying token native decimals\",\"minAmountWrappedOutRaw\":\"Minimum amount of wrapped tokens to receive from the buffer. It is expressed in wrapped token native decimals\",\"sharesOwner\":\"Owner of the shares (`msg.sender` for `removeLiquidityFromBuffer` entrypoint)\",\"sharesToRemove\":\"Amount of shares to remove from the buffer. Cannot be greater than sharesOwner's total shares\",\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"removedUnderlyingBalanceRaw\":\"Amount of underlying tokens returned to the user\",\"removedWrappedBalanceRaw\":\"Amount of wrapped tokens returned to the user\"}},\"setAuthorizer(address)\":{\"details\":\"This is a permissioned call. Emits an `AuthorizerChanged` event.\",\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"setProtocolFeeController(address)\":{\"details\":\"This is a permissioned call. Emits a `ProtocolFeeControllerChanged` event.\",\"params\":{\"newProtocolFeeController\":\"The address of the new Protocol Fee Controller\"}},\"setStaticSwapFeePercentage(address,uint256)\":{\"details\":\"This is a permissioned function, disabled if the pool is paused. The swap fee percentage must be within the bounds specified by the pool's implementation of `ISwapFeePercentageBounds`. Emits the SwapFeePercentageChanged event.\",\"params\":{\"pool\":\"The address of the pool for which the static swap fee will be changed\",\"swapFeePercentage\":\"The new swap fee percentage to apply to the pool\"}},\"unpausePool(address)\":{\"details\":\"This is a permissioned function that will only work on a paused Pool within the Buffer Period set during deployment. Note that the Pool will automatically unpause after the Buffer Period expires.\",\"params\":{\"pool\":\"The pool being unpaused\"}},\"unpauseVault()\":{\"details\":\"This is a permissioned function that will only work on a paused Vault within the Buffer Period set during deployment. Note that the Vault will automatically unpause after the Buffer Period expires. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing the Vault does not reverse `pauseVaultBuffers`. If buffers were also paused, they will remain in that state until explicitly unpaused.\"},\"unpauseVaultBuffers()\":{\"details\":\"When buffers are paused, it's not possible to add liquidity or wrap/unwrap tokens using the Vault's `erc4626BufferWrapOrUnwrap` primitive. However, it's still possible to remove liquidity. As noted above, ERC4626 buffers and Vault operations on pools are independent. Unpausing buffers does not reverse `pauseVault`. If the Vault was also paused, it will remain in that state until explicitly unpaused. This is a permissioned call.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateSwapFeePercentageChanged` event.\",\"params\":{\"newAggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose swap fee percentage will be updated\"}},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"details\":\"Can only be called by the current protocol fee controller. Called when governance overrides a protocol fee for a specific pool, or to permissionlessly update a pool to a changed global protocol fee value (if the pool's fee has not previously been set by governance). Ensures the aggregate percentage <= FixedPoint.ONE, and also that the final value does not lose precision when stored in 24 bits (see `FEE_BITLENGTH` in VaultTypes.sol). Emits an `AggregateYieldFeePercentageChanged` event.\",\"params\":{\"newAggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose yield fee percentage will be updated\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BalanceOverflow()\":[{\"notice\":\"One of the balances is above the maximum value that can be stored.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"CodecOverflow()\":[{\"notice\":\"Function called with an invalid value.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotStaticCall()\":[{\"notice\":\"A state-changing transaction was initiated in a context that only allows static calls.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"OutOfBounds()\":[{\"notice\":\"Function called with an invalid bitLength or offset.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"PoolTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a pool token can't be lower than the absolute minimum.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}],\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"Approval(address,address,address,uint256)\":{\"notice\":\"The allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Transfer(address,address,address,uint256)\":{\"notice\":\"Pool tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{\"addLiquidityToBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Adds liquidity to an internal ERC4626 buffer in the Vault, proportionally.\"},\"areBuffersPaused()\":{\"notice\":\"Indicates whether the Vault buffers are paused.\"},\"collectAggregateFees(address)\":{\"notice\":\"Collects accumulated aggregate swap and yield fees for the specified pool.\"},\"disableQuery()\":{\"notice\":\"Disables query functionality on the Vault. Can only be called by governance.\"},\"disableQueryPermanently()\":{\"notice\":\"Disables query functionality permanently on the Vault. Can only be called by governance.\"},\"disableRecoveryMode(address)\":{\"notice\":\"Disable recovery mode for a pool.\"},\"enableQuery()\":{\"notice\":\"Enables query functionality on the Vault. Can only be called by governance.\"},\"enableRecoveryMode(address)\":{\"notice\":\"Enable recovery mode for a pool.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getBufferAsset(address)\":{\"notice\":\"Returns the asset registered for a given wrapped token.\"},\"getBufferBalance(address)\":{\"notice\":\"Returns the amount of underlying and wrapped tokens deposited in the internal buffer of the Vault.\"},\"getBufferMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of an ERC4626 wrapped token buffer in the Vault.\"},\"getBufferOwnerShares(address,address)\":{\"notice\":\"Returns the shares (internal buffer BPT) of a liquidity owner: a user that deposited assets in the buffer.\"},\"getBufferPeriodDuration()\":{\"notice\":\"Returns the Vault's buffer period duration.\"},\"getBufferPeriodEndTime()\":{\"notice\":\"Returns the Vault's buffer period end time.\"},\"getBufferTotalShares(address)\":{\"notice\":\"Returns the supply shares (internal buffer BPT) of the ERC4626 buffer.\"},\"getMaximumPoolTokens()\":{\"notice\":\"Get the maximum number of tokens in a pool.\"},\"getMinimumPoolTokens()\":{\"notice\":\"Get the minimum number of tokens in a pool.\"},\"getMinimumTradeAmount()\":{\"notice\":\"Get the minimum trade amount in a pool operation.\"},\"getMinimumWrapAmount()\":{\"notice\":\"Get the minimum wrap amount in a buffer operation.\"},\"getPauseWindowEndTime()\":{\"notice\":\"Returns the Vault's pause window end time.\"},\"getPoolMinimumTotalSupply()\":{\"notice\":\"Get the minimum total supply of pool tokens (BPT) for an initialized pool.\"},\"getVaultPausedState()\":{\"notice\":\"Returns the paused status, and end times of the Vault's pause window and buffer period.\"},\"initializeBuffer(address,uint256,uint256,uint256,address)\":{\"notice\":\"Initializes buffer for the given wrapped token.\"},\"isVaultPaused()\":{\"notice\":\"Indicates whether the Vault is paused.\"},\"pausePool(address)\":{\"notice\":\"Pause the Pool: an emergency action which disables all pool functions.\"},\"pauseVault()\":{\"notice\":\"Pause the Vault: an emergency action which disables all operational state-changing functions on pools.\"},\"pauseVaultBuffers()\":{\"notice\":\"Pauses native vault buffers globally.\"},\"reentrancyGuardEntered()\":{\"notice\":\"Expose the state of the Vault's reentrancy guard.\"},\"removeLiquidityFromBuffer(address,uint256,uint256,uint256)\":{\"notice\":\"Removes liquidity from an internal ERC4626 buffer in the Vault.\"},\"setAuthorizer(address)\":{\"notice\":\"Sets a new Authorizer for the Vault.\"},\"setProtocolFeeController(address)\":{\"notice\":\"Sets a new Protocol Fee Controller for the Vault.\"},\"setStaticSwapFeePercentage(address,uint256)\":{\"notice\":\"Assigns a new static swap fee percentage to the specified pool.\"},\"unpausePool(address)\":{\"notice\":\"Reverse a `pause` operation, and restore the Pool to normal functionality.\"},\"unpauseVault()\":{\"notice\":\"Reverse a `pause` operation, and restore Vault pool operations to normal functionality.\"},\"unpauseVaultBuffers()\":{\"notice\":\"Unpauses native vault buffers globally.\"},\"updateAggregateSwapFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate swap fee percentage.\"},\"updateAggregateYieldFeePercentage(address,uint256)\":{\"notice\":\"Update an aggregate yield fee percentage.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/test/VaultAdminMock.sol\":\"VaultAdminMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/test/IVaultAdminMock.sol\":{\"keccak256\":\"0x51d1502369f0bb1fec58b7aa848f20e6ea3ddcb4866471e2fdbe96f0f6783fb5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ab9f73ec13f137f3103edf9caa8edc4752db585393cc7db6c62f85a1efdbfb5e\",\"dweb:/ipfs/QmXBoBF18c1f33NYqPmrJ3cqULMak55uznBvzfpf1bHpDd\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IERC20MultiTokenErrors.sol\":{\"keccak256\":\"0x4994bc0f8e5905640876a9411dadb73221ea2b7b1168d22cf5fe44ee1ca16960\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://69a0a6ab9c2622426ccfcb7263deb5615e589e98b3b31ea9fcd21595bb42a13d\",\"dweb:/ipfs/QmVW6GVXGTHnVo8MGk7zdLMASR8uN7khPsrEMXwgy4NBrQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol\":{\"keccak256\":\"0x9dc4c8d6dd5dbc108dd377dab73a3e6c84e8c104713d2afb3cba8acc9ddf4c63\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2ef7c65fe356144f8cd720109b818e1ec6cc495ca35b55ca273ef9db45c6ae00\",\"dweb:/ipfs/QmREJgnfgoqemnYKvfYjTFJBAMsV9VAKA5AY5Woprpc1vs\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\":{\"keccak256\":\"0xa1014b8d96cdfd149f502cda06f25e51885a6456b41061ed213086fcc1c496b4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8a96e7e176f73762c6de904de39472fe970f12f6d3631097227bc664bd0780c1\",\"dweb:/ipfs/QmXcu5bk8tJTqR6UwkdKNtsodzqYGpJsPdfjQmdJFyKZjR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol\":{\"keccak256\":\"0xf98fec19a1516432d7540f0cde2e967b627afbc5a361835766d57be8ba10b4e2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://94b49929bff77d1fdaab8916350356fc9816317beef4f33c3af0e6a40493d01c\",\"dweb:/ipfs/QmPPhtmpPvgedbtQaJZz7JQCmiGKKTHmfh7EGhJS1yUCia\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":{\"keccak256\":\"0xb5f6b1d0ee3f295a717ce58329eaadccb1eefc2e1e02e2e7c438e377628475cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03c1b9bc73b7d14d9e1948a31c271a03a6ba4291f44d9aff17e60d300c111d0d\",\"dweb:/ipfs/QmNpW3iD3ST76N6xTncuVgYSuafSqFkXUmxNaK8uybr96G\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0xeb183354089582d4a3fc8ded6cc410a2937f2eac2aa47b3ab13b0f5e6ede10e5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ecef18f7f0f57d749d5b0e11ab887299be15e1b6971a4bb9104d06e45705231b\",\"dweb:/ipfs/QmeYRDD5UtVKu2YFJm3SmHFriK6LUa2Tzg7EdZrneEfzNR\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x79f2ec4f7314bd1c3555368ff02bb9d382489dc8bbd7efbbf306f9a5084f3bec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a57c155451c5b1c1c59a27770754ccd9ba1be9344db6ac45b8744eba5fa4fa2f\",\"dweb:/ipfs/QmarkRwGaS3egg1FaQH6LibqjT6NocVUbD1jMPWtFxFaQV\"]},\"@balancer-labs/v3-vault/contracts/VaultAdmin.sol\":{\"keccak256\":\"0x4867fd0bb2efe3fd6de41c7ba17e31fa2b8f8a9fdc085c03f45c5504c3a95d3c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8cb23e3dda5ef46a0f11861ac8a1a0e787c33df7241899208291d6fef1fec7fe\",\"dweb:/ipfs/QmVLLgjmomkgg6t2mB3PjDLhkAZ9x9gLSqU6kH22J3gwRu\"]},\"@balancer-labs/v3-vault/contracts/VaultCommon.sol\":{\"keccak256\":\"0xad949728097754fb91dd82f46a4f3430f0caf092fe719f04c030325e623c59cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b6ba4635b64181a08098f2b4bde9bc6ceb8580d24654ec39c3d38ac2c8082317\",\"dweb:/ipfs/QmbthXemuT8Qvs2jdTADdyzbcPuZaKWfZjRn7j8dWuwffs\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@balancer-labs/v3-vault/contracts/VaultStorage.sol\":{\"keccak256\":\"0x283153cc86b04e7b5ded7b317a7773cd52912661922d477bccc7e3ef9c4fd332\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://30e03b35be9f4aebba5ea1f6fd1f72fb37990c916a22ef1dd4a01af809f89146\",\"dweb:/ipfs/QmNri89FgxWKFPkN67tvzAGf6kSyMuYvZd62ZW9a5MJBJH\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolConfigConst.sol\":{\"keccak256\":\"0xcec5acd992ba3d85194d2a66de785676e5fbd76c7ef4bd75f581582c637e9191\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03feaba5c47de6cfa364a9f78f3d1cbc48c6e59e89348a56e773631ce3d52c4d\",\"dweb:/ipfs/QmWZmpFLKk6qEsTtbPaiKBWvTnSuYzQdbNJZX4Bng16c3F\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolConfigLib.sol\":{\"keccak256\":\"0x0df4ac214754751acdaa044f697ef2a45823689689aac22a6a102c8e543d97c7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13c1c708ac1a1f5523282a7430d7f5300120ac17b3c77a0bd103d2afe7aff979\",\"dweb:/ipfs/QmPstE7ZquJ4zMaCEXix8iCXc6hTSyNQaR9Z4aWBMTa9ys\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolDataLib.sol\":{\"keccak256\":\"0x0f004ef9c126426c1391516247f90cbb699982f3c545c821c2bdc3796c93f781\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://93d7b94cb4e0c9eee127258fb69e390d34c391444f337b6cc5cbe5beb702f4e7\",\"dweb:/ipfs/QmbswDz4DrsXaEh9RSvpmWKX5JCLoTavyAX2511eKr5rQd\"]},\"@balancer-labs/v3-vault/contracts/lib/VaultExtensionsLib.sol\":{\"keccak256\":\"0xf17a6fb82ff8eac940260544aa041e2cf8b826c0f7e205b4d52a4c5394a7ee38\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c88893eba6593f2f7ef05e3ffeb61416b6cc630eaad2efa90e77262f3282ab81\",\"dweb:/ipfs/QmX9XhQix9yKT7buiT77igy8Bf1jvwwYGxpmTr4e5mWnQD\"]},\"@balancer-labs/v3-vault/contracts/lib/VaultStateLib.sol\":{\"keccak256\":\"0xc40f34646f76afe536a326173d3c8cd663a655375531f65f3e6f7c63cecddeeb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a97b6d2363d70869b9cf66104a6c6bdfc84d351085c94b23b0104f2608e52ff4\",\"dweb:/ipfs/QmVPVR8F6nSxxhxTpFp5cgH9n1dE2E5UXD6cPauumtpS3e\"]},\"@balancer-labs/v3-vault/contracts/test/VaultAdminMock.sol\":{\"keccak256\":\"0x498564ebac09c742fa0cda4321317f01a87b874f28123cf83eca91db4e955708\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f9b73a9366ec68b8dc5b9e9c947151c8a28fe452127187bdf2b0eaeb1f05b0ed\",\"dweb:/ipfs/QmSLjY6DuDRgXXCJAQ8xDgouN3Z2EpP41xZLAynQ4358J6\"]},\"@balancer-labs/v3-vault/contracts/token/ERC20MultiToken.sol\":{\"keccak256\":\"0x49578c053271957fa9661c6a3e3ce6310a3f0690be6deca9eeb28f4e129bcfd3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e3bbd6d7baa790f6e259dfcab0ae2b0db96c08b21739dca829217af6fdbea15d\",\"dweb:/ipfs/QmVgirrgRbkHVdfthMKTJi98QeHmx9DHTT1WBNQRYogpBn\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/test/VaultExtensionMock.sol":{"VaultExtensionMock":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"contract IVaultAdmin","name":"vaultAdmin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BalanceOverflow","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"CodecOverflow","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"ErrorSelectorNotFound","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotStaticCall","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"OutOfBounds","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"PoolTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"name":"Result","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintToInt","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TokensNotSorted","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"swapParams","type":"tuple"}],"name":"computeDynamicSwapFeePercentage","outputs":[{"internalType":"uint256","name":"dynamicSwapFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"emitAuxiliaryEvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getAddLiquidityCalledFlag","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getBptRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getERC4626BufferAsset","outputs":[{"internalType":"address","name":"asset","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getHooksConfig","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNonzeroDeltaCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolConfig","outputs":[{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolPausedState","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"uint32","name":"","type":"uint32"},{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolRoleAccounts","outputs":[{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokenRates","outputs":[{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getPoolTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProtocolFeeController","outputs":[{"internalType":"contract IProtocolFeeController","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getReservesOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getTokenDelta","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"initialize","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"isERC4626BufferInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInRecoveryMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolRegistered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isQueryDisabledPermanently","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"exactAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"name":"manualInitializePoolReentrancy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"manualRegisterPoolReentrancy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newSwapFee","type":"uint256"}],"name":"manuallySetSwapFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"input","type":"bytes"}],"name":"mockExtensionHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quote","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"quoteAndRevert","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reentrancyGuardEntered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"protocolFeeExempt","type":"bool"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"registerPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"}],"name":"removeLiquidityRecovery","outputs":[{"internalType":"uint256[]","name":"amountsOutRaw","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_contract_IVault_fromMemory":{"entryPoint":981,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint32_fromMemory":{"entryPoint":1001,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":946,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_4756":{"entryPoint":899,"id":null,"parameterSlots":1,"returnSlots":0},"fun_calculateVaultStorageSlot":{"entryPoint":1029,"id":28383,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6102006040908082523461036e5781816160c3803803809161002182856103b2565b83398101031261036e57610034816103d5565b6020918201516001600160a01b03929091908383169081840361036e5761007a865161005f81610383565b600a8152691a5cd55b9b1bd8dad95960b21b83820152610405565b60c0526100ad865161008b81610383565b60118152701b9bdb96995c9bd1195b1d1850dbdd5b9d607a1b83820152610405565b60e0526100da86516100be81610383565b600b81526a746f6b656e44656c74617360a81b83820152610405565b9561010096875261011281516100ef81610383565b6012815271185919131a5c5d5a591a5d1e50d85b1b195960721b84820152610405565b95610120968752610141825161012781610383565b60098152681cd95cdcda5bdb925960ba1b85820152610405565b610140908152825163fbfa77cf60e01b815290918482600481895afa918215610379575f9261033e575b5080871691160361032f578151634546891d60e11b8152918383600481885afa928315610325575f93610306575b506101609283528051631060fdbd60e11b8152948486600481845afa9586156102d8575f966102e2575b50846004916101a097885283519283809263cd51c12f60e01b82525afa9485156102d8575f956102a9575b50506101809384526101c09586526101e09687525196615bea98896104d98a3960805189505060a05189505060c05189818161136f0152818161348801526137a1015260e051898181612011015281816154f4015261553c0152518881816114f1015261549a0152518781816116d70152611a610152518681816116b50152611a3f01525185505051846143b801525183818161061d015261324001525182818161278b0152612f0201525181818161069d0152612ec50152f35b6102c9929550803d106102d1575b6102c181836103b2565b8101906103e9565b925f806101ee565b503d6102b7565b82513d5f823e3d90fd5b60049196506102fe8691823d84116102d1576102c181836103b2565b9691506101c3565b61031e919350843d86116102d1576102c181836103b2565b915f610199565b50513d5f823e3d90fd5b634166145b60e11b5f5260045ffd5b9091508481813d8311610372575b61035681836103b2565b8101031261036e57610367906103d5565b905f61016b565b5f80fd5b503d61034c565b84513d5f823e3d90fd5b604081019081106001600160401b0382111761039e57604052565b634e487b7160e01b5f52604160045260245ffd5b601f909101601f19168101906001600160401b0382119082101761039e57604052565b51906001600160a01b038216820361036e57565b9081602091031261036e575163ffffffff8116810361036e5790565b6040519061041282610383565b600c8252610493603a602084016b5661756c7453746f7261676560a01b81526020604051948592828401977f62616c616e6365722d6c6162732e76332e73746f726167652e000000000000008952518091603986015e830190601760f91b60398301528051928391018583015e015f8382015203601a8101845201826103b2565b5190205f1981019081116104c4576040519060208201908152602082526104b982610383565b9051902060ff191690565b634e487b7160e01b5f52601160045260245ffdfe60806040526004361015610018575b36612eae57612e86565b5f3560e01c8062fdfa13146102f657806313d21cdf146102f157806313ef8a5d146102ec57806315e32046146102e75780631ba0ae45146102e25780634afbaf5a146102dd5780634d472bdd146102d85780634f037ee7146102d3578063532cec7c146102ce578063535cfd8a146102c9578063590e8145146102c457806367e0e076146102bf5780636844846b146102ba5780636c9bc732146102b557806370600089146102b0578063757d64b3146102ab5780637e361bde146102a6578063809846d1146102a15780638380edb71461029c57806385e0b9991461029757806385f2dbd414610292578063927da1051461028d57806396787092146102885780639e825ff514610283578063a07d60401461027e578063aaabadc514610279578063ace9b89b14610274578063b45090f91461026f578063b4aef0ab1461026a578063ba8a2be014610265578063be7d628a14610260578063c673bdaf1461025b578063c808824714610256578063ca4f280314610251578063ce8630d41461024c578063d2c725e014610247578063db81718714610242578063e1f21c671461023d578063e4dc2aa414610238578063e68010c614610233578063e9ddeb261461022e578063edfa356814610229578063eeec802f14610224578063f29486a11461021f578063f7888aec1461021a5763fbfa77cf0361000e5761276c565b612703565b612669565b6124cc565b612476565b6123ba565b61226a565b612082565b612039565b611ff5565b611fb7565b611ebf565b611e11565b611d69565b611d21565b611ccd565b611b18565b611aee565b611aa2565b611a13565b6119e2565b611527565b6114c5565b611481565b611431565b611403565b611399565b611353565b61127a565b611082565b610f2c565b610edf565b610e9c565b610e54565b610cfe565b610c21565b610b78565b610b14565b610a12565b610930565b6106c1565b61067e565b6105dc565b6105b2565b6104c3565b610353565b6001600160a01b0381160361030c57565b5f80fd5b610104359061031e826102fb565b565b359061031e826102fb565b600319604091011261030c57600435610343816102fb565b90602435610350816102fb565b90565b3461030c5760206103a26001600160a01b0361036e3661032b565b9190610378612ef8565b61038181612f52565b165f526006835260405f20906001600160a01b03165f5260205260405f2090565b5460801c604051908152f35b9081518082526020808093019301915f5b8281106103cd575050505090565b83516001600160a01b0316855293810193928101926001016103bf565b600211156103f457565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b9060406060928051610432816103ea565b83526001600160a01b0360208201511660208401520151151560408201520190565b9081518082526020808093019301915f5b828110610473575050505090565b90919293826104856001928751610421565b950193929101610465565b9081518082526020808093019301915f5b8281106104af575050505090565b8351855293810193928101926001016104a1565b3461030c57602060031936011261030c576105a46105056004356104e6816102fb565b6104ee6127af565b506104f7612ef8565b61050081612f9d565b612fea565b6040519182916020835280516020840152610530602082015160e060408601526101008501906103ae565b60c061059261057f61056b610557604087015195601f1996878b83030160608c0152610454565b6060870151868a83030160808b0152610490565b6080860151858983030160a08a0152610490565b60a0850151848883030184890152610490565b920151908483030160e0850152610490565b0390f35b5f91031261030c57565b3461030c575f60031936011261030c576105ca612ef8565b602060ff600954166040519015158152f35b3461030c57602060031936011261030c5760806004356105fb816102fb565b610603612ef8565b61060c81612f52565b61061581613201565b6106429291927f000000000000000000000000000000000000000000000000000000000000000082612813565b916001600160a01b038091165f52600160205260405f20541691604051931515845263ffffffff80921660208501521660408301526060820152f35b3461030c575f60031936011261030c5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461030c57602060031936011261030c5760206004356106e0816102fb565b6106e8612ef8565b6001600160a01b038091165f52600e825260405f205416604051908152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6080810190811067ffffffffffffffff82111761075057604052565b610707565b67ffffffffffffffff811161075057604052565b6060810190811067ffffffffffffffff82111761075057604052565b60e0810190811067ffffffffffffffff82111761075057604052565b610140810190811067ffffffffffffffff82111761075057604052565b90601f601f19910116810190811067ffffffffffffffff82111761075057604052565b6040519061031e82610785565b6040519061031e82610734565b6040519061031e826107a1565b60405190610160820182811067ffffffffffffffff82111761075057604052565b6040519061031e82610769565b6002111561030c57565b359061031e82610836565b67ffffffffffffffff81116107505760051b60200190565b9080601f8301121561030c57602090823561087d8161084b565b9361088b60405195866107be565b81855260208086019260051b82010192831161030c57602001905b8282106108b4575050505090565b813581529083019083016108a6565b67ffffffffffffffff811161075057601f01601f191660200190565b9291926108eb826108c3565b916108f960405193846107be565b82948184528183011161030c578281602093845f960137010152565b9080601f8301121561030c57816020610350933591016108df565b3461030c5760031960408136011261030c5760043561094e816102fb565b6024359067ffffffffffffffff9283831161030c5760e090833603011261030c576109776107e1565b9061098483600401610840565b825260248301356020830152604483013584811161030c576109ac9060043691860101610863565b604083015260648301356060830152608483013560808301526109d160a48401610320565b60a083015260c483013593841161030c576109f8610a029360046105a49636920101610915565b60c0830152612830565b6040519081529081906020820190565b3461030c57602060031936011261030c57600435610a2f816102fb565b610a37612ef8565b610a4081612f9d565b610a8d60206080610a5084612fea565b0151604051809381927f984de9e8000000000000000000000000000000000000000000000000000000008352604060048401526044830190610490565b6001602483015203816001600160a01b0386165afa8015610b0f576105a492610a02925f92610ada575b50610ad3906001600160a01b03165f52601160205260405f2090565b54906133de565b610ad3919250610b019060203d602011610b08575b610af981836107be565b81019061295c565b9190610ab7565b503d610aef565b612988565b3461030c57602060031936011261030c576001600160a01b03600435610b39816102fb565b610b41612ef8565b610b4a81612f52565b165f525f6020526020600160405f2054811c166040519015158152f35b906020610350928181520190610490565b3461030c57602060031936011261030c576105a46080610bae600435610b9d816102fb565b610ba5612ef8565b61050081612f52565b0151604051918291602083526020830190610490565b9181601f8401121561030c5782359167ffffffffffffffff831161030c576020838186019501011161030c57565b602060031982011261030c576004359067ffffffffffffffff821161030c57610c1d91600401610bc4565b9091565b6020610c36610c2f36610bf2565b36916108df565b818151910120604051908152f35b9081518082526020808093019301915f5b828110610c63575050505090565b83516001600160a01b031685529381019392810192600101610c55565b9290610c989095949295608085526080850190610c44565b6020908481036020860152602080885192838152019701915f5b828110610ce1575050505084610cd391846103509697036040860152610490565b916060818403910152610490565b9091929782610cf36001928b51610421565b990193929101610cb2565b3461030c57602060031936011261030c57600435610d1b816102fb565b610d23612ef8565b610d2c81612f52565b6001600160a01b0381165f52600560205260405f20610d64610d5f836001600160a01b03165f52600360205260405f2090565b612993565b90815192610d7184612a08565b93610d7b81612a56565b91610d8582612a56565b935f5b838110610da057604051806105a488888c8c85610c80565b80610db560019284905f5260205260405f2090565b54610e0c610e078a610df2610de586610ddf8b6001600160a01b03165f52600460205260405f2090565b93612ab4565b516001600160a01b031690565b6001600160a01b03165f5260205260405f2090565b612ad9565b610e16838c612ab4565b52610e21828b612ab4565b506fffffffffffffffffffffffffffffffff8116610e3f8389612ab4565b5260801c610e4d8289612ab4565b5201610d88565b3461030c57602060031936011261030c576020600435610e73816102fb565b610e7b612ef8565b6001600160a01b038091165f52600e825260405f2054161515604051908152f35b3461030c57602060031936011261030c576020610ed4600435610ebe816102fb565b610ec6612ef8565b610ecf81612f52565b613201565b506040519015158152f35b3461030c57604060031936011261030c576001600160a01b03600435610f04816102fb565b16805f525f602052610f1c60243560405f2054613402565b905f525f60205260405f20555f80f35b3461030c575f80610f3c36610bf2565b90610f45613475565b610f4d612ef8565b8160405192839283378101838152039082335af1610f69612b18565b908015610fb65790610f7f81610fb29333613509565b506040519182917f5ab64fb800000000000000000000000000000000000000000000000000000000835260048301612465565b0390fd5b506004815110611035577f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000602083015116036134fa577f28f95541000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b909161107461035093604084526040840190610490565b916020818403910152610490565b3461030c57602060031936011261030c5760043561109f816102fb565b6110a7612ef8565b6110b081612f52565b6001600160a01b038082165f525f60205260405f2054600360205260405f209160405180938491602082549182815201915f5260205f20935f905b82821061117a57505050611101925003836107be565b61110d82518092613595565b9161111782612a56565b935f5b83811061113057604051806105a488888361105d565b600190611169611164610e07611157866001600160a01b03165f52600460205260405f2090565b610df2610de5868a612ab4565b6135e7565b6111738289612ab4565b520161111a565b85546001600160a01b03908216168452600195860195889550602090940193909101906110eb565b60c060031982011261030c576004356111ba816102fb565b916024356111c7816102fb565b9167ffffffffffffffff9060443582811161030c578160238201121561030c5780600401356111f58161084b565b9161120360405193846107be565b8183526020916024602085019160051b8301019185831161030c57602401905b82821061126157505050509260643583811161030c578261124691600401610863565b926084359260a43591821161030c5761035091600401610915565b838091833561126f816102fb565b815201910190611223565b3461030c57611319602061128d366111a2565b909161129a9793976136c3565b6113056112f2604051998a9889987fba8a2be0000000000000000000000000000000000000000000000000000000008a526001600160a01b0380921660048b015216602489015260c0604489015260c4880190610c44565b6003199283888303016064890152610490565b9260848601528483030160a4850152612440565b03815f305af18015610b0f57611334575b611332613718565b005b61134c9060203d602011610b0857610af981836107be565b505f61132a565b3461030c575f60031936011261030c5761136b612ef8565b60207f00000000000000000000000000000000000000000000000000000000000000005c6040519015158152f35b3461030c5760206fffffffffffffffffffffffffffffffff6113f96001600160a01b036113c53661032b565b91906113cf612ef8565b6113d881612f52565b165f526006845260405f20906001600160a01b03165f5260205260405f2090565b5416604051908152f35b3461030c575f60031936011261030c5761141b612ef8565b60206001600160a01b03600a5416604051908152f35b3461030c57606060031936011261030c576020611479600435611453816102fb565b60243561145f816102fb565b6044359161146c836102fb565b611474612ef8565b61373d565b604051908152f35b3461030c57602060031936011261030c576001600160a01b036004356114a6816102fb565b6114ae612ef8565b165f526008602052602060405f2054604051908152f35b3461030c57602060031936011261030c5760206114796004356114e7816102fb565b6114ef612ef8565b7f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b03165f5260205260405f205c90565b3461030c57608060031936011261030c57600435611544816102fb565b602435611550816102fb565b6044359060643567ffffffffffffffff811161030c57611574903690600401610863565b61157c612ef8565b61158461379f565b61158c6136c3565b61159584612f9d565b6001600160a01b039384811691825f526020905f6020526115be60405f205460019060031c1690565b156119b6576115de836001600160a01b03165f52600560205260405f2090565b966115e7612b47565b92611606610d5f866001600160a01b03165f52600360205260405f2090565b808552519661161b6040860198808a52612a56565b97608086019889525f5b815181101561166e578061165c6116466001938f905f5260205260405f2090565b546fffffffffffffffffffffffffffffffff1690565b611667828d51612ab4565b5201611625565b50899896979861169c8189516116958c6001600160a01b03165f52601160205260405f2090565b54906137f0565b996116a78351612a56565b956060890196875261170e8b7f00000000000000000000000000000000000000000000000000000000000000005c7f0000000000000000000000000000000000000000000000000000000000000000905f5260205260405f20905f5260205260405f205c90565b151560a08a018181529590611989575b5f5b855181101561186e5761174a818f8a8e838e61173c8e51151590565b61181e575b50505050612ab4565b51611755828c612ab4565b51116117b557808c8f826117a88f826117ae9461178f61177e610de560019b6117949651612ab4565b6117888484612ab4565b5190613861565b612ab4565b519351936117a28386612ab4565b51612bb7565b92612ab4565b5201611720565b8d8a6117de836117d78f956117d1610de58261181b9951612ab4565b95612ab4565b5192612ab4565b517f2f785e46000000000000000000000000000000000000000000000000000000005f526001600160a01b03909216600452602452604452606490565b5ffd5b61183d61184f9361185a956118338589612ab4565b519101519061383f565b611848838351612ab4565b5251612ab4565b516117a28484612ab4565b6118648383612ab4565b528a8e838e611741565b508a95509187918d938d611893816001600160a01b03165f52600560205260405f2090565b965f5b89518110156118e457806118cb8c6118c4836118bc6001968f905f5260205260405f2090565b549251612ab4565b519061389f565b6118dd828c905f5260205260405f2090565b5501611896565b6105a4885f89897ffbe5b0d79fb94f1e81c0a92bf86ae9d3a19e9d1bf6202c0d3e75120f65d5d8a58a8a6119626119508c6119398d611925813388866138ad565b61192d613929565b611979575b858361398e565b6001600160a01b03165f52601160205260405f2090565b54955188604051948594169784612bc4565b0390a461196d613718565b60405191829182610b67565b61198481878561394b565b611932565b6119ac6119a68d6001600160a01b03165f525f60205260405f2090565b546132a8565b60208b015261171e565b837fef029adf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b3461030c575f60031936011261030c576119fa612ef8565b60206001600160a01b0360095460081c16604051908152f35b3461030c57602060031936011261030c576020611a98600435611a35816102fb565b611a3d612ef8565b7f00000000000000000000000000000000000000000000000000000000000000005c7f0000000000000000000000000000000000000000000000000000000000000000905f5260205260405f20905f5260205260405f205c90565b6040519015158152f35b3461030c57602060031936011261030c576001600160a01b03600435611ac7816102fb565b611acf612ef8565b611ad881612f52565b165f525f602052602061147960405f20546132a8565b3461030c575f60031936011261030c57611b06612ef8565b60206001600754166040519015158152f35b3461030c57611b26366111a2565b9291611b30612ef8565b611b3861379f565b611b4186612f52565b611b496136c3565b611b5286613b59565b611b5b86612fea565b92611b6a8451600190811c1690565b611c98579183916105a4979593611b8c6020611bdb9997015151835190613ba7565b60c08401958651611ba460a087019182519086613bd6565b9789611bb5885160019060081c1690565b611c27575b8994925087915092611bcd969593613dbf565b94859151600190600a1c1690565b611bea575b8590610a02613718565b611c18611c0b611c1e956001600160a01b03165f52600260205260405f2090565b546001600160a01b031690565b92614077565b5f808083611be0565b91611c8b91611c5d899b8b611c57611c0b611bcd9c9b999a986001600160a01b03165f52600260205260405f2090565b91613c7c565b611c81611c7b8d6001600160a01b03165f52600560205260405f2090565b8a613d52565b5190519084613bd6565b9781939294955089611bba565b7f218e3747000000000000000000000000000000000000000000000000000000005f526001600160a01b03871660045260245ffd5b3461030c57602060031936011261030c576001600160a01b03600435611cf2816102fb565b611cfa612ef8565b611d0381612f52565b165f525f6020526020600160405f205460031c166040519015158152f35b3461030c57602060031936011261030c576001600160a01b03600435611d46816102fb565b611d4e612ef8565b165f525f6020526020600160405f2054166040519015158152f35b3461030c57604060031936011261030c5760243567ffffffffffffffff811161030c57611d9a903690600401610bc4565b611da2612ef8565b611dab33612f52565b80604051926020845281602085015260408401375f604082840101527f4bc4412e210115456903c65b5277d299a505e79f2eb852b92b1ca52d8585642860043592604081601f19601f339601168101030190a3005b906020610350928181520190610c44565b3461030c57602060031936011261030c57600435611e2e816102fb565b611e36612ef8565b611e3f81612f52565b6001600160a01b038091165f52600360205260405f20906040519081602084549182815201935f5260205f20915f905b828210611e92576105a485611e86818903826107be565b60405191829182611e00565b909192946001611eb4819284895416906001600160a01b036020921681520190565b960193920190611e6f565b3461030c57602060031936011261030c57610160611f24600435611ee2816102fb565b611eea612bef565b50611ef3612ef8565b611efc81612f52565b6001600160a01b038091165f525f60205260405f205490600260205260405f20541690614143565b611fb5604051809280511515825260208082015115159083015260408082015115159083015260608082015115159083015260808082015115159083015260a08082015115159083015260c08082015115159083015260e0808201511515908301526101008082015115159083015261012080820151151590830152610140908101516001600160a01b0316910152565bf35b3461030c575f60031936011261030c5760207f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6040519015158152f35b3461030c575f60031936011261030c5761200d612ef8565b60207f00000000000000000000000000000000000000000000000000000000000000005c604051908152f35b3461030c57606060031936011261030c57612077600435612059816102fb565b602435612065816102fb565b61206d612ef8565b6044359133614281565b602060405160018152f35b3461030c57602060031936011261030c576001600160a01b036004356120a7816102fb565b6120af612ef8565b165f526011602052602060405f2054604051908152f35b8015150361030c57565b6084359061031e826120c6565b6064359063ffffffff8216820361030c57565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c606091011261030c5760a490565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedc608091011261030c5761012490565b906101a060031983011261030c57600435612169816102fb565b9160243567ffffffffffffffff811161030c578160238201121561030c5780600401356121958161084b565b916040916121a660405194856107be565b8084526020906024602086019160071b8401019286841161030c57602401905b83821061220457505050505091604435916121df6120dd565b916121e86120d0565b916121f2816120f0565b916103506121fe610310565b9261211f565b60808288031261030c5782608091865161221d81610734565b8435612228816102fb565b81528285013561223781610836565b8382015287850135612248816102fb565b888201526060808601359061225c826120c6565b8201528152019101906121c6565b3461030c576122783661214f565b90969594926122856136c3565b303b1561030c576122ef975f9760406123569561234b9463ffffffff6101a49a84519e8f9d8e9d8e7feeec802f0000000000000000000000000000000000000000000000000000000081526001600160a01b03809a1660048201526101a060248201520190612c52565b9a60448d01521660648b0152151560848a015282813561230e816102fb565b1660a48a0152826020820135612323816102fb565b1660c48a01520135612334816102fb565b1660e48701526001600160a01b0316610104860152565b610124840190612cc1565b038183305af18015610b0f5761236e57611332613718565b8061237b61238192610755565b806105a8565b5f61132a565b61031e909291926060810193604090816001600160a01b0391828151168552826020820151166020860152015116910152565b3461030c57602060031936011261030c576105a46004356123da816102fb565b6123e26129ea565b506123eb612ef8565b6123f481612f52565b6001600160a01b038091165f52600160205260405f209060026040519261241a84610769565b828154168452826001820154166020850152015416604082015260405191829182612387565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b906020610350928181520190612440565b3461030c576105a46124b85f8061249f61248f36610bf2565b612497613475565b610c2f612ef8565b60208151910182335af16124b1612b18565b9033613509565b604051918291602083526020830190612440565b3461030c5763ffffffff6124df3661214f565b9390946124f0989298979697612ef8565b6124f86136c3565b6125006143b1565b6040519761250d89610785565b885260208801521660408601521515606085015260608536031261030c576125896125909261132a96604080519161254483610769565b803561254f816102fb565b8352602081013561255f816102fb565b6020840152013561256f816102fb565b604082015260808701526001600160a01b031660a0860152565b3690612d10565b60c083015261482e565b61031e909291926101806101a08201946125db8382516060809180511515845260208101511515602085015260408101511515604085015201511515910152565b60208101516080840152604081015160a0840152606081015160c0840152612611608082015160e085019064ffffffffff169052565b60a08101519061262c610100928386019063ffffffff169052565b61266060c082015192612646610120948588019015159052565b60e083015115156101408701528201511515610160860152565b01511515910152565b3461030c57602060031936011261030c576105a46126f760043561268c816102fb565b5f61012060405161269c816107a1565b6040516126a881610734565b83815283602082015283604082015283606082015281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201520152612d70565b6040519182918261259a565b3461030c57604060031936011261030c576020612763600435612725816102fb565b6001600160a01b036024359161273a836102fb565b612742612ef8565b165f52600f835260405f20906001600160a01b03165f5260205260405f2090565b54604051908152f35b3461030c575f60031936011261030c5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b604051906127bc82610785565b815f815260c060609182602082015282604082015282808201528260808201528260a08201520152565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b91909163ffffffff8080941691160191821161282b57565b6127e6565b6128ad9161283c612ef8565b61284582612f9d565b6001600160a01b039081831690815f525f602052604093849361286a855f20546132a8565b935f526002602052845f205416918451968794859384937fa0e8f5ac000000000000000000000000000000000000000000000000000000008552600485016132f5565b03915afa918215610b0f575f915f9361292a575b50501561290257670de0b5cad2bef00081116128da5790565b7f746e5940000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f53f976d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b61294d935080919250903d10612955575b61294581836107be565b8101906132d6565b905f806128c1565b503d61293b565b9081602091031261030c575190565b91906020612983600192604086526040860190610490565b930152565b6040513d5f823e3d90fd5b90604051918281549182825260209260208301915f5260205f20935f905b8282106129c75750505061031e925003836107be565b85546001600160a01b0316845260019586019588955093810193909101906129b1565b604051906129f782610769565b5f6040838281528260208201520152565b90612a128261084b565b612a1f60405191826107be565b828152601f19612a2f829461084b565b01905f5b828110612a3f57505050565b602090612a4a6129ea565b82828501015201612a33565b90612a608261084b565b612a6d60405191826107be565b828152601f19612a7d829461084b565b0190602036910137565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8051821015612ac85760209160051b010190565b612a87565b612ad6826103ea565b52565b90604051612ae681610769565b604060ff829454818116612af9816103ea565b84526001600160a01b038160081c16602085015260a81c161515910152565b3d15612b42573d90612b29826108c3565b91612b3760405193846107be565b82523d5f602084013e565b606090565b6040519060c0820182811067ffffffffffffffff821117610750576040525f60a08360608152826020820152826040820152606080820152606060808201520152565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0bdc0820191821161282b57565b9190820391821161282b57565b91612be19061035094928452606060208501526060840190610490565b916040818403910152610490565b60405190610160820182811067ffffffffffffffff821117610750576040525f610140838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e082015282610100820152826101208201520152565b9081518082526020808093019301915f5b828110612c71575050505090565b9091929382608060019287516001600160a01b0380825116835284820151612c98816103ea565b838601526040828101519091169083015260609081015115159082015201950193929101612c63565b606080918035612cd0816120c6565b151584526020810135612ce2816120c6565b151560208501526040810135612cf7816120c6565b151560408501520135612d09816120c6565b1515910152565b919082608091031261030c57604051612d2881610734565b60608082948035612d38816120c6565b84526020810135612d48816120c6565b60208501526040810135612d5b816120c6565b6040850152013591612d6c836120c6565b0152565b612d9b90612d7c612ef8565b612d8581612f52565b6001600160a01b03165f525f60205260405f2090565b546103506001612daa836132a8565b92612e53612db782615316565b612e46612dc384615339565b64ffffffffff85605a1c169063ffffffff86612ddd608290565b1c1693612de86107ee565b600488901c89161515815299600588901c8916151560208c0152600688901c8916151560408c0152600788901c8916151560608c0152612e266107fb565b9a8b5260208b015260408a0152606089015264ffffffffff166080880152565b63ffffffff1660a0860152565b808216151560c085015280821c8216151560e0850152600281901c8216151561010085015260031c161515610120830152565b7ff2238896000000000000000000000000000000000000000000000000000000005f5260045ffd5b34612e8657365f80375f8036816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af43d5f803e15612ef4573d5ff35b3d5ffd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003612f2a57565b7f9fd25b36000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160a01b0316805f525f602052600160405f20541615612f725750565b7f9e51bd5c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6001600160a01b0316805f525f602052600160405f2054811c1615612fbf5750565b7f4bdace13000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b906001600160a01b03612ffb6127af565b92165f5260056020526040805f205f602052815f2054906004602052825f20906003602052835f20938454938752613036602088019561535c565b855261304184612a08565b9181880192835261305185612a56565b916060890192835261306286612a56565b9460809560808b0152613076878b51613595565b60c08b015261308487612a56565b60a08b019081528a5191600199600184811c1693846131ed575b50836131db575b8c5f5b8b81106130be5750505050505050505050505050565b8a8d92828c8c8c613105846130f1816130e3610e078f8f610de585610df29251612ab4565b94905f5260205260405f2090565b549451836130ff8383612ab4565b52612ab4565b5061310f816135e7565b61311a858d51612ab4565b526131386fffffffffffffffffffffffffffffffff84168587615615565b878d8d156131ce57820151151591826131b0575b5050613161575b50505050505b018d906130a8565b826131849261317b826131748851615339565b9451612ab4565b51961c85615b30565b9283613194575b8e93508c613153565b6131a7936131a191612bb7565b91615615565b5f8f828261318b565b909150516131bd816103ea565b6131c6816103ea565b14875f61314c565b5050505050505050613159565b8c5190935060031c60011615926130a5565b6131f8919450615339565b1515925f61309e565b6001600160a01b03165f525f60205260405f20549060018260021c1663ffffffff809361322c608290565b1c16928161323957509190565b90506132657f000000000000000000000000000000000000000000000000000000000000000084612813565b164211159190565b60ff60019116019060ff821161282b57565b9060058202918083046005149015171561282b57565b8181029291811591840414171561282b57565b62ffffff9060121c1664174876e8009081810291818304149015171561282b5790565b519061031e826120c6565b919082604091031261030c57602082516132ef816120c6565b92015190565b612d6c61339560409396959496606084528051613311816103ea565b60608501526020810151608085015260c061333b8683015160e060a0880152610140870190610490565b91606081015182870152608081015160e08701526001600160a01b0360a08201511661010087015201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa085830301610120860152612440565b6001600160a01b039096166020830152565b81156133b1570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b90670de0b6b3a76400009182810292818404149015171561282b57610350916133a7565b90670de0b5cad2bef00081116128da5764174876e80090048060181c61344d577ffffffffffffffffffffffffffffffffffffffffffffffffffffffc000003ffff9060121b91161790565b7fe4337c05000000000000000000000000000000000000000000000000000000005f5260045ffd5b326134d2576001600754166134aa5760017f00000000000000000000000000000000000000000000000000000000000000005d565b7f7a198886000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f67f84ab2000000000000000000000000000000000000000000000000000000005f5260045ffd5b80511561103557805190602001fd5b90613546575080511561351e57805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b8151158061358c575b613557575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561354f565b9064ffffffffff6135a582612a56565b92605a1c165f5b8281106135b95750505090565b601f826135c58361327f565b1c1690604d821161282b57600191600a0a6135e08287612ab4565b52016135ac565b80516135f2816103ea565b6135fb816103ea565b8061360e575050670de0b6b3a764000090565b8061361a6001926103ea565b0361369b5760206136456136398260049401516001600160a01b031690565b6001600160a01b031690565b604051928380927f679aefce0000000000000000000000000000000000000000000000000000000082525afa908115610b0f575f91613682575090565b610350915060203d602011610b0857610af981836107be565b7fdf450632000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c6136f0576001905d565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d565b6001600160a01b0392918381168484160361375b57505050505f1990565b61379b9361378592165f52601060205260405f20906001600160a01b03165f5260205260405f2090565b906001600160a01b03165f5260205260405f2090565b5490565b7f00000000000000000000000000000000000000000000000000000000000000005c156137c857565b7fc09ba736000000000000000000000000000000000000000000000000000000005f5260045ffd5b92916137fc8451612a56565b935f5b81518110156138395780613828856138238661381d60019688612ab4565b51613295565b6133a7565b6138328289612ab4565b52016137ff565b50505050565b9061384991613295565b6001670de0b6b3a76400005f19830104019015150290565b9061386b9061543c565b907f8000000000000000000000000000000000000000000000000000000000000000821461282b5761031e915f0390615491565b906103509160801c90615579565b91909392936138bd82828561373d565b5f1981036138ce575b505050509050565b8086116138ec57946138e294950392614281565b805f8080806138c6565b85906001600160a01b03847ffb8f41b2000000000000000000000000000000000000000000000000000000005f521660045260245260445260645ffd5b3215806139335790565b506001600754161590565b9190820180921161282b57565b90326134d2576001600160a01b0361397f92165f52600f60205260405f20906001600160a01b03165f5260205260405f2090565b805491820180921161282b5755565b90916001600160a01b03808416928315613b24576139c185613785836001600160a01b03165f52600f60205260405f2090565b54808411613ae7578390036139eb86613785846001600160a01b03165f52600f60205260405f2090565b55613a1183613a0b836001600160a01b03165f52601160205260405f2090565b54612bb7565b613a1a816155dd565b613a35826001600160a01b03165f52601160205260405f2090565b551690813b1561030c576040517f23de66510000000000000000000000000000000000000000000000000000000081526001600160a01b0390941660048501525f6024850181905260448501829052937fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f91613acf91868180606481015b038183895af1613ad4575b506040519081529081906020820190565b0390a4565b8061237b613ae192610755565b5f613abe565b7fe450d38c000000000000000000000000000000000000000000000000000000005f526001600160a01b038616600452602452604483905260645ffd5b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f526001600160a01b03851660045260245ffd5b613b616143b1565b613b6a81613201565b50613b725750565b6001600160a01b03907fd971f597000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b03613bae57565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b91908251918151815181851491821592613c5c575b5050613bae57613bfa83612a56565b935f5b848110613c0c57505050505090565b80670de0b6b3a7640000613c4a613c2560019486612ab4565b51613c45613c33858a612ab4565b51613c3e868a612ab4565b5192613295565b613295565b04613c558289612ab4565b5201613bfd565b141590505f80613beb565b9081602091031261030c5751610350816120c6565b90613ce092613cce5f6001600160a01b03602095604051978896879586937f1c149e28000000000000000000000000000000000000000000000000000000008552604060048601526044850190610490565b90600319848303016024850152612440565b0393165af1908115610b0f575f91613d23575b5015613cfb57565b7f60612925000000000000000000000000000000000000000000000000000000005f5260045ffd5b613d45915060203d602011613d4b575b613d3d81836107be565b810190613c67565b5f613cf3565b503d613d33565b60208082015151925f5b848110613d6a575050505050565b600190613db96fffffffffffffffffffffffffffffffff6040613d99613d9385838b0151612ab4565b516135e7565b613da78560a08b0151612ab4565b52835f528587525f2054168287615615565b01613d5c565b929195969496613de0846001600160a01b03165f52600560205260405f2090565b955f5b60208901518051821015613ebe57610de582613dfe92612ab4565b613e0e613639610de58489612ab4565b6001600160a01b038216908103613e6a575090613e38600192613e31838b612ab4565b5190615662565b613e518b613e4a836117d7818d612ab4565b5190615579565b613e63828b905f5260205260405f2090565b5501613de3565b61181b9088613e7f613639610de5878c612ab4565b7fffe261a1000000000000000000000000000000000000000000000000000000005f526001600160a01b03918216600452811660245216604452606490565b50509694919250969450613ef684517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd600291161790565b808552613f13846001600160a01b03165f525f60205260405f2090565b556001600160a01b0392613f59602085831697604051809381927f984de9e80000000000000000000000000000000000000000000000000000000083526004830161296b565b03818a5afa8015610b0f57613f7e915f91614058575b50613f79816155dd565b612b8a565b97613f8882615674565b613f93898584615784565b8089106140285750928592613fff7fa26a52d8d53702bba7f137907b8e1f99ff87f6d450144270ca25e72481cca87193613ff06020613fe660019a996001600160a01b03165f52601160205260405f2090565b5498015151612a56565b90604051948594169784612bc4565b0390a47fcad8c9d32507393b6508ca4a888b81979919b477510585bde8488f153072d6f35f80a2565b7f8d261d5d000000000000000000000000000000000000000000000000000000005f52600489905260245260445ffd5b614071915060203d602011610b0857610af981836107be565b5f613f6f565b926140ca5f6001600160a01b0360209594966140e1604051988997889687947f38be241d000000000000000000000000000000000000000000000000000000008652606060048701526064860190610490565b916024850152600319848303016044850152612440565b0393165af1908115610b0f575f91614124575b50156140fc57565b7f0f23dbc6000000000000000000000000000000000000000000000000000000005f5260045ffd5b61413d915060203d602011613d4b57613d3d81836107be565b5f6140f4565b9061414c612bef565b5060ff600180848361415e600c61326d565b6141679061326d565b161c16818584614177600c61326d565b6141809061326d565b6141899061326d565b161c169082868561419a600c61326d565b6141a39061326d565b6141ac9061326d565b6141b59061326d565b161c16928087866141c6600c61326d565b6141cf9061326d565b6141d89061326d565b6141e19061326d565b6141ea9061326d565b161c16948188818184600c161c1692600c6142049061326d565b161c1691614210610808565b60098a901c82161515815298600881901c8216151560208b0152600a81901c8216151560408b0152600b1c161515606089015215156080880152151560a0870152151560c0860152151560e0850152151561010084015215156101208301526001600160a01b031661014082015290565b9290916001600160a01b039283811693841561437c5780831695861561434757846142c58561378586613785866001600160a01b03165f52601060205260405f2090565b551692833b1561030c576040517f5687f2b80000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152919092166024820152604481018290527fa0175360a15bca328baf7ea85c7b784d58b222a50d0ce760b10dba336d226a6191613acf915f818060648101613ab3565b7f94280d62000000000000000000000000000000000000000000000000000000005f526001600160a01b03841660045260245ffd5b7fe602df05000000000000000000000000000000000000000000000000000000005f526001600160a01b03821660045260245ffd5b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000164211158061440f575b6143e757565b7fda9f8b34000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001600754811c166143e1565b9080519061442a826103ea565b614433826103ea565b82546020820151604092909201517fffffffffffffffffffff0000000000000000000000000000000000000000000090911660ff939093169290921760089190911b74ffffffffffffffffffffffffffffffffffffffff00161790151560a81b75ff00000000000000000000000000000000000000000016179055565b9081602091031261030c575160ff8116810361030c5790565b8054680100000000000000008110156107505760018101808355811015612ac8576001600160a01b03915f5260205f200191167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b815181547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0391821617825561031e92600291906040906145a58360208301511660018701906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b0151169101906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b919082604091031261030c576020825192015190565b94939161031e93606092614625926001600160a01b03809216895216602088015260e0604088015260e0870190612c52565b9401906060809180511515845260208101511515602085015260408101511515604085015201511515910152565b908161014091031261030c576146676107fb565b90614671816132cb565b825261467f602082016132cb565b6020830152614690604082016132cb565b60408301526146a1606082016132cb565b60608301526146b2608082016132cb565b60808301526146c360a082016132cb565b60a08301526146d460c082016132cb565b60c08301526146e560e082016132cb565b60e08301526101006146f88183016132cb565b9083015261470a6101208092016132cb565b9082015290565b919695939461477361031e9663ffffffff6102209661473b614801966102a0808a52890190612c52565b9b60208801521660408601526060850190604090816001600160a01b0391828151168552826020820151166020860152015116910152565b60c083019080511515825260208082015115159083015260408082015115159083015260608082015115159083015260808082015115159083015260a08082015115159083015260c08082015115159083015260e0808201511515908301526101008082015115159083015261012080820151151590830152610140908101516001600160a01b0316910152565b01906060809180511515845260208101511515602085015260408101511515604085015201511515910152565b9061485361484c836001600160a01b03165f525f60205260405f2090565b5460011690565b6152e157805151600281106152b957600881116152915792919061487684612a56565b5f945f5b818110614f845750506149469293945060808201916148b483516148af876001600160a01b03165f52600160205260405f2090565b614525565b6148c9613639600a546001600160a01b031690565b604080916148e2828751016001600160a01b0390511690565b906148f06060860151151590565b83517f77ff76e70000000000000000000000000000000000000000000000000000000081526001600160a01b03808c166004830152909316602484015215156044830152909687919082905f9082906064820190565b03925af18015610b0f575f955f91614f51575b50614a7260c0840191614a6d614a3c845197614a25614a1f6149818b51151560041b60011790565b9a60606149ef6149be60209e8f85015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf9060051b91161790565b8c84015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf9060061b91161790565b91015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f9060071b91161790565b916158d2565b90605a9164ffffffffff908116831b921b19161790565b98614a688688019a614a528c5163ffffffff1690565b9060829163ffffffff908116831b921b19161790565b615952565b615972565b9360a08401906001600160a01b03958987614a9485516001600160a01b031690565b1680614b95575b5090614ab98193926001600160a01b03165f525f60205260405f2090565b5582516001600160a01b03166001600160a01b0316614ae98b6001600160a01b03165f52600260205260405f2090565b90614b2191906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b8501948551614b30908b615996565b519451975163ffffffff16965191516001600160a01b03166001600160a01b0316614b5a91614143565b9151925195869533991697614b6f9587614711565b037fbc1561eeab9f40962e2fb827a7ff9c7cdb47a9d7c84caeefa4ed90e043842dad91a3565b614bd791849189515f8951938b51968795869485937f0b89f18200000000000000000000000000000000000000000000000000000000855233600486016145f3565b03925af1908115610b0f575f91614f34575b5015614f1f57614c0661363961363985516001600160a01b031690565b90855180927fd77153a70000000000000000000000000000000000000000000000000000000082528160046101409586935afa928315610b0f575f93614ef0575b50508151151580614ed6575b614e835790614e51610120614cbd614e1e614dec614dba614d88614d56614d248e614cf9614cf08c8f614e7c9f90614cbd614cc592614c928551151590565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdff9060091b91161790565b920151151590565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff9060081b91161790565b918c0151151590565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbff90600a1b91161790565b60608a015115157ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff90600b1b91161790565b608089015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff90600c1b91161790565b60a088015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfff90600d1b91161790565b60c087015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfff90600e1b91161790565b60e086015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fff90600f1b91161790565b61010085015115157ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff9060101b91161790565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff9060111b91161790565b895f614a9b565b61181b8b614e9886516001600160a01b031690565b7ffa93d814000000000000000000000000000000000000000000000000000000005f526001600160a01b039081166004521660245233604452606490565b50614eea614ee5865151151590565b151590565b15614c53565b614f10929350803d10614f18575b614f0881836107be565b810190614653565b905f80614c47565b503d614efe565b61181b8a614e9885516001600160a01b031690565b614f4b9150833d8511613d4b57613d3d81836107be565b5f614be9565b905081614f749296503d8711614f7d575b614f6c81836107be565b8101906145dd565b9490945f614959565b503d614f62565b614f8f818551612ab4565b5196614fa288516001600160a01b031690565b906001600160a01b038083169182158015615286575b61525e571680821061523657811461520157604090818a01998a51614fe3906001600160a01b031690565b6001600160a01b0316159060209b8c8201908d825191615002836103ea565b516001600160a01b03169360600193845161501c90151590565b91615025610829565b936150309085612acd565b6001600160a01b0390911690830152151581870152866150618d6001600160a01b03165f52600460205260405f2090565b9061507c91906001600160a01b03165f5260205260405f2090565b906150869161441d565b8051615091816103ea565b61509a816103ea565b6151b257508115916151a7575b5061369b5789915b51998a80927f313ce56700000000000000000000000000000000000000000000000000000000825260049c8d915afa918215610b0f575f9261517a575b505060129060ff9180838316115f14615126578a7f686d3607000000000000000000000000000000000000000000000000000000005f525ffd5b60019495969798999a509061514a929103166151428588612ab4565b9060ff169052565b61516e81615169896001600160a01b03165f52600360205260405f2090565b6144c9565b9695949392910161487a565b6151999250803d106151a0575b61519181836107be565b8101906144b0565b5f806150ec565b503d615187565b51151590505f6150a7565b60019150516151c0816103ea565b6151c9816103ea565b036151d95761369b5789916150af565b7fa1e9dd9d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4f4b634e000000000000000000000000000000000000000000000000000000005f526001600160a01b03821660045260245ffd5b7f6e8f1947000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fc1ab6dc1000000000000000000000000000000000000000000000000000000005f5260045ffd5b508189168314614fb8565b7f707bdf58000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f5ed4ba8f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fdb771c80000000000000000000000000000000000000000000000000000000005f526001600160a01b03821660045260245ffd5b62ffffff90602a1c1664174876e8009081810291818304149015171561282b5790565b62ffffff9060421c1664174876e8009081810291818304149015171561282b5790565b90604051918281549182825260209260208301915f5260205f20935f905b8282106153905750505061031e925003836107be565b85546001600160a01b03168452600195860195889550938101939091019061537a565b908060181c61344d57602a1b9062ffffff602a1b19161790565b7fb4120f14000000000000000000000000000000000000000000000000000000005f5260045ffd5b90610100808410156153cd5783810390811161282b578060ff105f14615437575060ff5b6018116153cd578060181c61344d5762ffffff90831b921b19161790565b615419565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116154665790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b908015615575577f0000000000000000000000000000000000000000000000000000000000000000916154d68184906001600160a01b03165f5260205260405f205c90565b8281019283125f821290801582169115161761282b578261552b57507f000000000000000000000000000000000000000000000000000000000000000092835c5f19810190811161282b5761031e945d615b9e565b1561553a575b61031e92615b9e565b7f000000000000000000000000000000000000000000000000000000000000000092835c6001810180911161282b5761031e945d9250615531565b5050565b906fffffffffffffffffffffffffffffffff8083119081156155d3575b506155ab5760801b90810180911161282b5790565b7f89560ca1000000000000000000000000000000000000000000000000000000005f5260045ffd5b905081115f615596565b620f424081106155ea5750565b7fd38d20fc000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b91906080670de0b6b3a7640000615659612ad694806156388660608a0151612ab4565b52613c4561564a8660c08a0151612ab4565b51613c3e8760a08b0151612ab4565b04930151612ab4565b61566e61031e9261543c565b90615491565b61568f816001600160a01b03165f52601160205260405f2090565b908154620f42409081810180911161282b576001600160a01b0393556156c6826001600160a01b03165f52600f60205260405f2090565b5f805260205260405f20908154019055165f80827fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f604051806157108190620f4240602083019252565b0390a4803b1561030c575f60405180927f23de66510000000000000000000000000000000000000000000000000000000082528183816157666004820190620f4240604060608401935f81525f60208201520152565b03925af18015610b0f576157775750565b8061237b61031e92610755565b916001600160a01b0380831693841561589d576157bc836157b6836001600160a01b03165f52601160205260405f2090565b5461393e565b6157db85613785846001600160a01b03165f52600f60205260405f2090565b8481540190556157ea816155dd565b615805826001600160a01b03165f52601160205260405f2090565b5516925f847fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f6040518061583e87829190602083019252565b0390a4823b1561030c576040517f23de66510000000000000000000000000000000000000000000000000000000081525f600482018190526001600160a01b039093166024820152604481019190915291829081838160648101615766565b7fec442f05000000000000000000000000000000000000000000000000000000005f526001600160a01b03841660045260245ffd5b5f9190825b8151841015615946576158ea8483612ab4565b5160ff916158f78661327f565b91610100808410156153cd5783810390811161282b57808510156159415750835b60059081116153cd57816007911c1661344d57600193601f9116831b921b1916179301926158d7565b615918565b64ffffffffff16925050565b670de0b5cad2bef00082116128da5764174876e8006103509204906153b3565b90670de0b5cad2bef00081116128da576103509164174876e80060429204906153f5565b906001600160a01b038216916040517fce20ece70000000000000000000000000000000000000000000000000000000081526020908181600481885afa908115610b0f575f91615b13575b508310615aeb576040517f654cf15d0000000000000000000000000000000000000000000000000000000081528181600481885afa918215610b0f575f92615ace575b50508211615aa6578181615a90615a797f89d41522342fabac1471ca6073a5623e5caf367b03ca6e9a001478d0cf8be4a195615a73615aa1966001600160a01b03165f525f60205260405f2090565b54613402565b916001600160a01b03165f525f60205260405f2090565b556040519081529081906020820190565b0390a2565b7f7f47834b000000000000000000000000000000000000000000000000000000005f5260045ffd5b615ae49250803d10610b0857610af981836107be565b5f80615a24565b7fbfb20688000000000000000000000000000000000000000000000000000000005f5260045ffd5b615b2a9150823d8411610b0857610af981836107be565b5f6159e1565b9093925f94615b43846080850151612ab4565b51818111615b53575b5050505050565b615b93959650615b8d9392615b8692615b6c920361383f565b9360a0615b7d8260c0860151612ab4565b51930151612ab4565b5190613295565b906133de565b905f80808080615b4c565b906001600160a01b03165f5260205260405f205d56fea26469706673582212209b6d070b93b07f2f918eb2ee3b475895292846f165f7b9c88bc2972914aecaac64736f6c634300081b0033","opcodes":"PUSH2 0x200 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE CALLVALUE PUSH2 0x36E JUMPI DUP2 DUP2 PUSH2 0x60C3 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x21 DUP3 DUP6 PUSH2 0x3B2 JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x36E JUMPI PUSH2 0x34 DUP2 PUSH2 0x3D5 JUMP JUMPDEST PUSH1 0x20 SWAP2 DUP3 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP2 SWAP1 DUP4 DUP4 AND SWAP1 DUP2 DUP5 SUB PUSH2 0x36E JUMPI PUSH2 0x7A DUP7 MLOAD PUSH2 0x5F DUP2 PUSH2 0x383 JUMP JUMPDEST PUSH1 0xA DUP2 MSTORE PUSH10 0x1A5CD55B9B1BD8DAD959 PUSH1 0xB2 SHL DUP4 DUP3 ADD MSTORE PUSH2 0x405 JUMP JUMPDEST PUSH1 0xC0 MSTORE PUSH2 0xAD DUP7 MLOAD PUSH2 0x8B DUP2 PUSH2 0x383 JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH17 0x1B9BDB96995C9BD1195B1D1850DBDD5B9D PUSH1 0x7A SHL DUP4 DUP3 ADD MSTORE PUSH2 0x405 JUMP JUMPDEST PUSH1 0xE0 MSTORE PUSH2 0xDA DUP7 MLOAD PUSH2 0xBE DUP2 PUSH2 0x383 JUMP JUMPDEST PUSH1 0xB DUP2 MSTORE PUSH11 0x746F6B656E44656C746173 PUSH1 0xA8 SHL DUP4 DUP3 ADD MSTORE PUSH2 0x405 JUMP JUMPDEST SWAP6 PUSH2 0x100 SWAP7 DUP8 MSTORE PUSH2 0x112 DUP2 MLOAD PUSH2 0xEF DUP2 PUSH2 0x383 JUMP JUMPDEST PUSH1 0x12 DUP2 MSTORE PUSH18 0x185919131A5C5D5A591A5D1E50D85B1B1959 PUSH1 0x72 SHL DUP5 DUP3 ADD MSTORE PUSH2 0x405 JUMP JUMPDEST SWAP6 PUSH2 0x120 SWAP7 DUP8 MSTORE PUSH2 0x141 DUP3 MLOAD PUSH2 0x127 DUP2 PUSH2 0x383 JUMP JUMPDEST PUSH1 0x9 DUP2 MSTORE PUSH9 0x1CD95CDCDA5BDB9259 PUSH1 0xBA SHL DUP6 DUP3 ADD MSTORE PUSH2 0x405 JUMP JUMPDEST PUSH2 0x140 SWAP1 DUP2 MSTORE DUP3 MLOAD PUSH4 0xFBFA77CF PUSH1 0xE0 SHL DUP2 MSTORE SWAP1 SWAP2 DUP5 DUP3 PUSH1 0x4 DUP2 DUP10 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x379 JUMPI PUSH0 SWAP3 PUSH2 0x33E JUMPI JUMPDEST POP DUP1 DUP8 AND SWAP2 AND SUB PUSH2 0x32F JUMPI DUP2 MLOAD PUSH4 0x4546891D PUSH1 0xE1 SHL DUP2 MSTORE SWAP2 DUP4 DUP4 PUSH1 0x4 DUP2 DUP9 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x325 JUMPI PUSH0 SWAP4 PUSH2 0x306 JUMPI JUMPDEST POP PUSH2 0x160 SWAP3 DUP4 MSTORE DUP1 MLOAD PUSH4 0x1060FDBD PUSH1 0xE1 SHL DUP2 MSTORE SWAP5 DUP5 DUP7 PUSH1 0x4 DUP2 DUP5 GAS STATICCALL SWAP6 DUP7 ISZERO PUSH2 0x2D8 JUMPI PUSH0 SWAP7 PUSH2 0x2E2 JUMPI JUMPDEST POP DUP5 PUSH1 0x4 SWAP2 PUSH2 0x1A0 SWAP8 DUP9 MSTORE DUP4 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH4 0xCD51C12F PUSH1 0xE0 SHL DUP3 MSTORE GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x2D8 JUMPI PUSH0 SWAP6 PUSH2 0x2A9 JUMPI JUMPDEST POP POP PUSH2 0x180 SWAP4 DUP5 MSTORE PUSH2 0x1C0 SWAP6 DUP7 MSTORE PUSH2 0x1E0 SWAP7 DUP8 MSTORE MLOAD SWAP7 PUSH2 0x5BEA SWAP9 DUP10 PUSH2 0x4D9 DUP11 CODECOPY PUSH1 0x80 MLOAD DUP10 POP POP PUSH1 0xA0 MLOAD DUP10 POP POP PUSH1 0xC0 MLOAD DUP10 DUP2 DUP2 PUSH2 0x136F ADD MSTORE DUP2 DUP2 PUSH2 0x3488 ADD MSTORE PUSH2 0x37A1 ADD MSTORE PUSH1 0xE0 MLOAD DUP10 DUP2 DUP2 PUSH2 0x2011 ADD MSTORE DUP2 DUP2 PUSH2 0x54F4 ADD MSTORE PUSH2 0x553C ADD MSTORE MLOAD DUP9 DUP2 DUP2 PUSH2 0x14F1 ADD MSTORE PUSH2 0x549A ADD MSTORE MLOAD DUP8 DUP2 DUP2 PUSH2 0x16D7 ADD MSTORE PUSH2 0x1A61 ADD MSTORE MLOAD DUP7 DUP2 DUP2 PUSH2 0x16B5 ADD MSTORE PUSH2 0x1A3F ADD MSTORE MLOAD DUP6 POP POP MLOAD DUP5 PUSH2 0x43B8 ADD MSTORE MLOAD DUP4 DUP2 DUP2 PUSH2 0x61D ADD MSTORE PUSH2 0x3240 ADD MSTORE MLOAD DUP3 DUP2 DUP2 PUSH2 0x278B ADD MSTORE PUSH2 0x2F02 ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0x69D ADD MSTORE PUSH2 0x2EC5 ADD MSTORE RETURN JUMPDEST PUSH2 0x2C9 SWAP3 SWAP6 POP DUP1 RETURNDATASIZE LT PUSH2 0x2D1 JUMPI JUMPDEST PUSH2 0x2C1 DUP2 DUP4 PUSH2 0x3B2 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3E9 JUMP JUMPDEST SWAP3 PUSH0 DUP1 PUSH2 0x1EE JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2B7 JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x4 SWAP2 SWAP7 POP PUSH2 0x2FE DUP7 SWAP2 DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x2D1 JUMPI PUSH2 0x2C1 DUP2 DUP4 PUSH2 0x3B2 JUMP JUMPDEST SWAP7 SWAP2 POP PUSH2 0x1C3 JUMP JUMPDEST PUSH2 0x31E SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x2D1 JUMPI PUSH2 0x2C1 DUP2 DUP4 PUSH2 0x3B2 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x199 JUMP JUMPDEST POP MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH4 0x4166145B PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP DUP5 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x372 JUMPI JUMPDEST PUSH2 0x356 DUP2 DUP4 PUSH2 0x3B2 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x36E JUMPI PUSH2 0x367 SWAP1 PUSH2 0x3D5 JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x16B JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x34C JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0x39E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x39E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x36E JUMPI JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x36E JUMPI MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x36E JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x412 DUP3 PUSH2 0x383 JUMP JUMPDEST PUSH1 0xC DUP3 MSTORE PUSH2 0x493 PUSH1 0x3A PUSH1 0x20 DUP5 ADD PUSH12 0x5661756C7453746F72616765 PUSH1 0xA0 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP3 DUP3 DUP5 ADD SWAP8 PUSH32 0x62616C616E6365722D6C6162732E76332E73746F726167652E00000000000000 DUP10 MSTORE MLOAD DUP1 SWAP2 PUSH1 0x39 DUP7 ADD MCOPY DUP4 ADD SWAP1 PUSH1 0x17 PUSH1 0xF9 SHL PUSH1 0x39 DUP4 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 SWAP2 ADD DUP6 DUP4 ADD MCOPY ADD PUSH0 DUP4 DUP3 ADD MSTORE SUB PUSH1 0x1A DUP2 ADD DUP5 MSTORE ADD DUP3 PUSH2 0x3B2 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x4C4 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP3 MSTORE PUSH2 0x4B9 DUP3 PUSH2 0x383 JUMP JUMPDEST SWAP1 MLOAD SWAP1 KECCAK256 PUSH1 0xFF NOT AND SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x18 JUMPI JUMPDEST CALLDATASIZE PUSH2 0x2EAE JUMPI PUSH2 0x2E86 JUMP JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH3 0xFDFA13 EQ PUSH2 0x2F6 JUMPI DUP1 PUSH4 0x13D21CDF EQ PUSH2 0x2F1 JUMPI DUP1 PUSH4 0x13EF8A5D EQ PUSH2 0x2EC JUMPI DUP1 PUSH4 0x15E32046 EQ PUSH2 0x2E7 JUMPI DUP1 PUSH4 0x1BA0AE45 EQ PUSH2 0x2E2 JUMPI DUP1 PUSH4 0x4AFBAF5A EQ PUSH2 0x2DD JUMPI DUP1 PUSH4 0x4D472BDD EQ PUSH2 0x2D8 JUMPI DUP1 PUSH4 0x4F037EE7 EQ PUSH2 0x2D3 JUMPI DUP1 PUSH4 0x532CEC7C EQ PUSH2 0x2CE JUMPI DUP1 PUSH4 0x535CFD8A EQ PUSH2 0x2C9 JUMPI DUP1 PUSH4 0x590E8145 EQ PUSH2 0x2C4 JUMPI DUP1 PUSH4 0x67E0E076 EQ PUSH2 0x2BF JUMPI DUP1 PUSH4 0x6844846B EQ PUSH2 0x2BA JUMPI DUP1 PUSH4 0x6C9BC732 EQ PUSH2 0x2B5 JUMPI DUP1 PUSH4 0x70600089 EQ PUSH2 0x2B0 JUMPI DUP1 PUSH4 0x757D64B3 EQ PUSH2 0x2AB JUMPI DUP1 PUSH4 0x7E361BDE EQ PUSH2 0x2A6 JUMPI DUP1 PUSH4 0x809846D1 EQ PUSH2 0x2A1 JUMPI DUP1 PUSH4 0x8380EDB7 EQ PUSH2 0x29C JUMPI DUP1 PUSH4 0x85E0B999 EQ PUSH2 0x297 JUMPI DUP1 PUSH4 0x85F2DBD4 EQ PUSH2 0x292 JUMPI DUP1 PUSH4 0x927DA105 EQ PUSH2 0x28D JUMPI DUP1 PUSH4 0x96787092 EQ PUSH2 0x288 JUMPI DUP1 PUSH4 0x9E825FF5 EQ PUSH2 0x283 JUMPI DUP1 PUSH4 0xA07D6040 EQ PUSH2 0x27E JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x279 JUMPI DUP1 PUSH4 0xACE9B89B EQ PUSH2 0x274 JUMPI DUP1 PUSH4 0xB45090F9 EQ PUSH2 0x26F JUMPI DUP1 PUSH4 0xB4AEF0AB EQ PUSH2 0x26A JUMPI DUP1 PUSH4 0xBA8A2BE0 EQ PUSH2 0x265 JUMPI DUP1 PUSH4 0xBE7D628A EQ PUSH2 0x260 JUMPI DUP1 PUSH4 0xC673BDAF EQ PUSH2 0x25B JUMPI DUP1 PUSH4 0xC8088247 EQ PUSH2 0x256 JUMPI DUP1 PUSH4 0xCA4F2803 EQ PUSH2 0x251 JUMPI DUP1 PUSH4 0xCE8630D4 EQ PUSH2 0x24C JUMPI DUP1 PUSH4 0xD2C725E0 EQ PUSH2 0x247 JUMPI DUP1 PUSH4 0xDB817187 EQ PUSH2 0x242 JUMPI DUP1 PUSH4 0xE1F21C67 EQ PUSH2 0x23D JUMPI DUP1 PUSH4 0xE4DC2AA4 EQ PUSH2 0x238 JUMPI DUP1 PUSH4 0xE68010C6 EQ PUSH2 0x233 JUMPI DUP1 PUSH4 0xE9DDEB26 EQ PUSH2 0x22E JUMPI DUP1 PUSH4 0xEDFA3568 EQ PUSH2 0x229 JUMPI DUP1 PUSH4 0xEEEC802F EQ PUSH2 0x224 JUMPI DUP1 PUSH4 0xF29486A1 EQ PUSH2 0x21F JUMPI DUP1 PUSH4 0xF7888AEC EQ PUSH2 0x21A JUMPI PUSH4 0xFBFA77CF SUB PUSH2 0xE JUMPI PUSH2 0x276C JUMP JUMPDEST PUSH2 0x2703 JUMP JUMPDEST PUSH2 0x2669 JUMP JUMPDEST PUSH2 0x24CC JUMP JUMPDEST PUSH2 0x2476 JUMP JUMPDEST PUSH2 0x23BA JUMP JUMPDEST PUSH2 0x226A JUMP JUMPDEST PUSH2 0x2082 JUMP JUMPDEST PUSH2 0x2039 JUMP JUMPDEST PUSH2 0x1FF5 JUMP JUMPDEST PUSH2 0x1FB7 JUMP JUMPDEST PUSH2 0x1EBF JUMP JUMPDEST PUSH2 0x1E11 JUMP JUMPDEST PUSH2 0x1D69 JUMP JUMPDEST PUSH2 0x1D21 JUMP JUMPDEST PUSH2 0x1CCD JUMP JUMPDEST PUSH2 0x1B18 JUMP JUMPDEST PUSH2 0x1AEE JUMP JUMPDEST PUSH2 0x1AA2 JUMP JUMPDEST PUSH2 0x1A13 JUMP JUMPDEST PUSH2 0x19E2 JUMP JUMPDEST PUSH2 0x1527 JUMP JUMPDEST PUSH2 0x14C5 JUMP JUMPDEST PUSH2 0x1481 JUMP JUMPDEST PUSH2 0x1431 JUMP JUMPDEST PUSH2 0x1403 JUMP JUMPDEST PUSH2 0x1399 JUMP JUMPDEST PUSH2 0x1353 JUMP JUMPDEST PUSH2 0x127A JUMP JUMPDEST PUSH2 0x1082 JUMP JUMPDEST PUSH2 0xF2C JUMP JUMPDEST PUSH2 0xEDF JUMP JUMPDEST PUSH2 0xE9C JUMP JUMPDEST PUSH2 0xE54 JUMP JUMPDEST PUSH2 0xCFE JUMP JUMPDEST PUSH2 0xC21 JUMP JUMPDEST PUSH2 0xB78 JUMP JUMPDEST PUSH2 0xB14 JUMP JUMPDEST PUSH2 0xA12 JUMP JUMPDEST PUSH2 0x930 JUMP JUMPDEST PUSH2 0x6C1 JUMP JUMPDEST PUSH2 0x67E JUMP JUMPDEST PUSH2 0x5DC JUMP JUMPDEST PUSH2 0x5B2 JUMP JUMPDEST PUSH2 0x4C3 JUMP JUMPDEST PUSH2 0x353 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SUB PUSH2 0x30C JUMPI JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x104 CALLDATALOAD SWAP1 PUSH2 0x31E DUP3 PUSH2 0x2FB JUMP JUMPDEST JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH2 0x31E DUP3 PUSH2 0x2FB JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x40 SWAP2 ADD SLT PUSH2 0x30C JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x343 DUP2 PUSH2 0x2FB JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD PUSH2 0x350 DUP2 PUSH2 0x2FB JUMP JUMPDEST SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH2 0x3A2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x36E CALLDATASIZE PUSH2 0x32B JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x378 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x381 DUP2 PUSH2 0x2F52 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x6 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x80 SHR PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x3CD JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x3BF JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x3F4 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x60 SWAP3 DUP1 MLOAD PUSH2 0x432 DUP2 PUSH2 0x3EA JUMP JUMPDEST DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x473 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 DUP3 PUSH2 0x485 PUSH1 0x1 SWAP3 DUP8 MLOAD PUSH2 0x421 JUMP JUMPDEST SWAP6 ADD SWAP4 SWAP3 SWAP2 ADD PUSH2 0x465 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x4AF JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x4A1 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH2 0x5A4 PUSH2 0x505 PUSH1 0x4 CALLDATALOAD PUSH2 0x4E6 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x4EE PUSH2 0x27AF JUMP JUMPDEST POP PUSH2 0x4F7 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x500 DUP2 PUSH2 0x2F9D JUMP JUMPDEST PUSH2 0x2FEA JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE DUP1 MLOAD PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x530 PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0xE0 PUSH1 0x40 DUP7 ADD MSTORE PUSH2 0x100 DUP6 ADD SWAP1 PUSH2 0x3AE JUMP JUMPDEST PUSH1 0xC0 PUSH2 0x592 PUSH2 0x57F PUSH2 0x56B PUSH2 0x557 PUSH1 0x40 DUP8 ADD MLOAD SWAP6 PUSH1 0x1F NOT SWAP7 DUP8 DUP12 DUP4 SUB ADD PUSH1 0x60 DUP13 ADD MSTORE PUSH2 0x454 JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MLOAD DUP7 DUP11 DUP4 SUB ADD PUSH1 0x80 DUP12 ADD MSTORE PUSH2 0x490 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD DUP6 DUP10 DUP4 SUB ADD PUSH1 0xA0 DUP11 ADD MSTORE PUSH2 0x490 JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD DUP5 DUP9 DUP4 SUB ADD DUP5 DUP10 ADD MSTORE PUSH2 0x490 JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 DUP5 DUP4 SUB ADD PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x490 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH0 SWAP2 SUB SLT PUSH2 0x30C JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH2 0x5CA PUSH2 0x2EF8 JUMP JUMPDEST PUSH1 0x20 PUSH1 0xFF PUSH1 0x9 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x80 PUSH1 0x4 CALLDATALOAD PUSH2 0x5FB DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x603 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x60C DUP2 PUSH2 0x2F52 JUMP JUMPDEST PUSH2 0x615 DUP2 PUSH2 0x3201 JUMP JUMPDEST PUSH2 0x642 SWAP3 SWAP2 SWAP3 PUSH32 0x0 DUP3 PUSH2 0x2813 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP2 PUSH1 0x40 MLOAD SWAP4 ISZERO ISZERO DUP5 MSTORE PUSH4 0xFFFFFFFF DUP1 SWAP3 AND PUSH1 0x20 DUP6 ADD MSTORE AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x4 CALLDATALOAD PUSH2 0x6E0 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x6E8 PUSH2 0x2EF8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0xE DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x750 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH2 0x707 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x750 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x750 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x750 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH2 0x140 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x750 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x750 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x31E DUP3 PUSH2 0x785 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x31E DUP3 PUSH2 0x734 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x31E DUP3 PUSH2 0x7A1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x160 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x750 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x31E DUP3 PUSH2 0x769 JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x30C JUMPI JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH2 0x31E DUP3 PUSH2 0x836 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x750 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x30C JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x87D DUP2 PUSH2 0x84B JUMP JUMPDEST SWAP4 PUSH2 0x88B PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x7BE JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x30C JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x8B4 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x8A6 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x750 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH2 0x8EB DUP3 PUSH2 0x8C3 JUMP JUMPDEST SWAP2 PUSH2 0x8F9 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x7BE JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0x30C JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x30C JUMPI DUP2 PUSH1 0x20 PUSH2 0x350 SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0x8DF JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x3 NOT PUSH1 0x40 DUP2 CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x94E DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP4 GT PUSH2 0x30C JUMPI PUSH1 0xE0 SWAP1 DUP4 CALLDATASIZE SUB ADD SLT PUSH2 0x30C JUMPI PUSH2 0x977 PUSH2 0x7E1 JUMP JUMPDEST SWAP1 PUSH2 0x984 DUP4 PUSH1 0x4 ADD PUSH2 0x840 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x24 DUP4 ADD CALLDATALOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x44 DUP4 ADD CALLDATALOAD DUP5 DUP2 GT PUSH2 0x30C JUMPI PUSH2 0x9AC SWAP1 PUSH1 0x4 CALLDATASIZE SWAP2 DUP7 ADD ADD PUSH2 0x863 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x64 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x84 DUP4 ADD CALLDATALOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x9D1 PUSH1 0xA4 DUP5 ADD PUSH2 0x320 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC4 DUP4 ADD CALLDATALOAD SWAP4 DUP5 GT PUSH2 0x30C JUMPI PUSH2 0x9F8 PUSH2 0xA02 SWAP4 PUSH1 0x4 PUSH2 0x5A4 SWAP7 CALLDATASIZE SWAP3 ADD ADD PUSH2 0x915 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x2830 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0xA2F DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0xA37 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0xA40 DUP2 PUSH2 0x2F9D JUMP JUMPDEST PUSH2 0xA8D PUSH1 0x20 PUSH1 0x80 PUSH2 0xA50 DUP5 PUSH2 0x2FEA JUMP JUMPDEST ADD MLOAD PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x984DE9E800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x40 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x490 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x24 DUP4 ADD MSTORE SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND GAS STATICCALL DUP1 ISZERO PUSH2 0xB0F JUMPI PUSH2 0x5A4 SWAP3 PUSH2 0xA02 SWAP3 PUSH0 SWAP3 PUSH2 0xADA JUMPI JUMPDEST POP PUSH2 0xAD3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP1 PUSH2 0x33DE JUMP JUMPDEST PUSH2 0xAD3 SWAP2 SWAP3 POP PUSH2 0xB01 SWAP1 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xB08 JUMPI JUMPDEST PUSH2 0xAF9 DUP2 DUP4 PUSH2 0x7BE JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x295C JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0xAB7 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xAEF JUMP JUMPDEST PUSH2 0x2988 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0xB39 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0xB41 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0xB4A DUP2 PUSH2 0x2F52 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 SHR AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0x350 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x490 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH2 0x5A4 PUSH1 0x80 PUSH2 0xBAE PUSH1 0x4 CALLDATALOAD PUSH2 0xB9D DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0xBA5 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x500 DUP2 PUSH2 0x2F52 JUMP JUMPDEST ADD MLOAD PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x490 JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x30C JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x30C JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x30C JUMPI JUMP JUMPDEST PUSH1 0x20 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x30C JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x30C JUMPI PUSH2 0xC1D SWAP2 PUSH1 0x4 ADD PUSH2 0xBC4 JUMP JUMPDEST SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x20 PUSH2 0xC36 PUSH2 0xC2F CALLDATASIZE PUSH2 0xBF2 JUMP JUMPDEST CALLDATASIZE SWAP2 PUSH2 0x8DF JUMP JUMPDEST DUP2 DUP2 MLOAD SWAP2 ADD KECCAK256 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0xC63 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0xC55 JUMP JUMPDEST SWAP3 SWAP1 PUSH2 0xC98 SWAP1 SWAP6 SWAP5 SWAP3 SWAP6 PUSH1 0x80 DUP6 MSTORE PUSH1 0x80 DUP6 ADD SWAP1 PUSH2 0xC44 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP5 DUP2 SUB PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x20 DUP1 DUP9 MLOAD SWAP3 DUP4 DUP2 MSTORE ADD SWAP8 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0xCE1 JUMPI POP POP POP POP DUP5 PUSH2 0xCD3 SWAP2 DUP5 PUSH2 0x350 SWAP7 SWAP8 SUB PUSH1 0x40 DUP7 ADD MSTORE PUSH2 0x490 JUMP JUMPDEST SWAP2 PUSH1 0x60 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x490 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP8 DUP3 PUSH2 0xCF3 PUSH1 0x1 SWAP3 DUP12 MLOAD PUSH2 0x421 JUMP JUMPDEST SWAP10 ADD SWAP4 SWAP3 SWAP2 ADD PUSH2 0xCB2 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0xD1B DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0xD23 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0xD2C DUP2 PUSH2 0x2F52 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0xD64 PUSH2 0xD5F DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0x2993 JUMP JUMPDEST SWAP1 DUP2 MLOAD SWAP3 PUSH2 0xD71 DUP5 PUSH2 0x2A08 JUMP JUMPDEST SWAP4 PUSH2 0xD7B DUP2 PUSH2 0x2A56 JUMP JUMPDEST SWAP2 PUSH2 0xD85 DUP3 PUSH2 0x2A56 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0xDA0 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0x5A4 DUP9 DUP9 DUP13 DUP13 DUP6 PUSH2 0xC80 JUMP JUMPDEST DUP1 PUSH2 0xDB5 PUSH1 0x1 SWAP3 DUP5 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0xE0C PUSH2 0xE07 DUP11 PUSH2 0xDF2 PUSH2 0xDE5 DUP7 PUSH2 0xDDF DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP4 PUSH2 0x2AB4 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0x2AD9 JUMP JUMPDEST PUSH2 0xE16 DUP4 DUP13 PUSH2 0x2AB4 JUMP JUMPDEST MSTORE PUSH2 0xE21 DUP3 DUP12 PUSH2 0x2AB4 JUMP JUMPDEST POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0xE3F DUP4 DUP10 PUSH2 0x2AB4 JUMP JUMPDEST MSTORE PUSH1 0x80 SHR PUSH2 0xE4D DUP3 DUP10 PUSH2 0x2AB4 JUMP JUMPDEST MSTORE ADD PUSH2 0xD88 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x4 CALLDATALOAD PUSH2 0xE73 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0xE7B PUSH2 0x2EF8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0xE DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x20 PUSH2 0xED4 PUSH1 0x4 CALLDATALOAD PUSH2 0xEBE DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0xEC6 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0xECF DUP2 PUSH2 0x2F52 JUMP JUMPDEST PUSH2 0x3201 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0xF04 DUP2 PUSH2 0x2FB JUMP JUMPDEST AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH2 0xF1C PUSH1 0x24 CALLDATALOAD PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x3402 JUMP JUMPDEST SWAP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH0 DUP1 PUSH2 0xF3C CALLDATASIZE PUSH2 0xBF2 JUMP JUMPDEST SWAP1 PUSH2 0xF45 PUSH2 0x3475 JUMP JUMPDEST PUSH2 0xF4D PUSH2 0x2EF8 JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP3 DUP4 CALLDATACOPY DUP2 ADD DUP4 DUP2 MSTORE SUB SWAP1 DUP3 CALLER GAS CALL PUSH2 0xF69 PUSH2 0x2B18 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0xFB6 JUMPI SWAP1 PUSH2 0xF7F DUP2 PUSH2 0xFB2 SWAP4 CALLER PUSH2 0x3509 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x2465 JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x4 DUP2 MLOAD LT PUSH2 0x1035 JUMPI PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP4 ADD MLOAD AND SUB PUSH2 0x34FA JUMPI PUSH32 0x28F9554100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 PUSH2 0x1074 PUSH2 0x350 SWAP4 PUSH1 0x40 DUP5 MSTORE PUSH1 0x40 DUP5 ADD SWAP1 PUSH2 0x490 JUMP JUMPDEST SWAP2 PUSH1 0x20 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x490 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x109F DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x10A7 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x10B0 DUP2 PUSH2 0x2F52 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP2 PUSH1 0x40 MLOAD DUP1 SWAP4 DUP5 SWAP2 PUSH1 0x20 DUP3 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP4 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x117A JUMPI POP POP POP PUSH2 0x1101 SWAP3 POP SUB DUP4 PUSH2 0x7BE JUMP JUMPDEST PUSH2 0x110D DUP3 MLOAD DUP1 SWAP3 PUSH2 0x3595 JUMP JUMPDEST SWAP2 PUSH2 0x1117 DUP3 PUSH2 0x2A56 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0x1130 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0x5A4 DUP9 DUP9 DUP4 PUSH2 0x105D JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH2 0x1169 PUSH2 0x1164 PUSH2 0xE07 PUSH2 0x1157 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0xDF2 PUSH2 0xDE5 DUP7 DUP11 PUSH2 0x2AB4 JUMP JUMPDEST PUSH2 0x35E7 JUMP JUMPDEST PUSH2 0x1173 DUP3 DUP10 PUSH2 0x2AB4 JUMP JUMPDEST MSTORE ADD PUSH2 0x111A JUMP JUMPDEST DUP6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP3 AND AND DUP5 MSTORE PUSH1 0x1 SWAP6 DUP7 ADD SWAP6 DUP9 SWAP6 POP PUSH1 0x20 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x10EB JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x30C JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x11BA DUP2 PUSH2 0x2FB JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD PUSH2 0x11C7 DUP2 PUSH2 0x2FB JUMP JUMPDEST SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x44 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x30C JUMPI DUP2 PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x30C JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD PUSH2 0x11F5 DUP2 PUSH2 0x84B JUMP JUMPDEST SWAP2 PUSH2 0x1203 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x7BE JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x20 SWAP2 PUSH1 0x24 PUSH1 0x20 DUP6 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 DUP6 DUP4 GT PUSH2 0x30C JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1261 JUMPI POP POP POP POP SWAP3 PUSH1 0x64 CALLDATALOAD DUP4 DUP2 GT PUSH2 0x30C JUMPI DUP3 PUSH2 0x1246 SWAP2 PUSH1 0x4 ADD PUSH2 0x863 JUMP JUMPDEST SWAP3 PUSH1 0x84 CALLDATALOAD SWAP3 PUSH1 0xA4 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x30C JUMPI PUSH2 0x350 SWAP2 PUSH1 0x4 ADD PUSH2 0x915 JUMP JUMPDEST DUP4 DUP1 SWAP2 DUP4 CALLDATALOAD PUSH2 0x126F DUP2 PUSH2 0x2FB JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x1223 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH2 0x1319 PUSH1 0x20 PUSH2 0x128D CALLDATASIZE PUSH2 0x11A2 JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x129A SWAP8 SWAP4 SWAP8 PUSH2 0x36C3 JUMP JUMPDEST PUSH2 0x1305 PUSH2 0x12F2 PUSH1 0x40 MLOAD SWAP10 DUP11 SWAP9 DUP10 SWAP9 PUSH32 0xBA8A2BE000000000000000000000000000000000000000000000000000000000 DUP11 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND PUSH1 0x4 DUP12 ADD MSTORE AND PUSH1 0x24 DUP10 ADD MSTORE PUSH1 0xC0 PUSH1 0x44 DUP10 ADD MSTORE PUSH1 0xC4 DUP9 ADD SWAP1 PUSH2 0xC44 JUMP JUMPDEST PUSH1 0x3 NOT SWAP3 DUP4 DUP9 DUP4 SUB ADD PUSH1 0x64 DUP10 ADD MSTORE PUSH2 0x490 JUMP JUMPDEST SWAP3 PUSH1 0x84 DUP7 ADD MSTORE DUP5 DUP4 SUB ADD PUSH1 0xA4 DUP6 ADD MSTORE PUSH2 0x2440 JUMP JUMPDEST SUB DUP2 PUSH0 ADDRESS GAS CALL DUP1 ISZERO PUSH2 0xB0F JUMPI PUSH2 0x1334 JUMPI JUMPDEST PUSH2 0x1332 PUSH2 0x3718 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x134C SWAP1 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xB08 JUMPI PUSH2 0xAF9 DUP2 DUP4 PUSH2 0x7BE JUMP JUMPDEST POP PUSH0 PUSH2 0x132A JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH2 0x136B PUSH2 0x2EF8 JUMP JUMPDEST PUSH1 0x20 PUSH32 0x0 TLOAD PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x13F9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x13C5 CALLDATASIZE PUSH2 0x32B JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x13CF PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x13D8 DUP2 PUSH2 0x2F52 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x6 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH2 0x141B PUSH2 0x2EF8 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xA SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x20 PUSH2 0x1479 PUSH1 0x4 CALLDATALOAD PUSH2 0x1453 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x145F DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x146C DUP4 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x1474 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x373D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x14A6 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x14AE PUSH2 0x2EF8 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x20 PUSH2 0x1479 PUSH1 0x4 CALLDATALOAD PUSH2 0x14E7 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x14EF PUSH2 0x2EF8 JUMP JUMPDEST PUSH32 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x1544 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x1550 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x64 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x30C JUMPI PUSH2 0x1574 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x863 JUMP JUMPDEST PUSH2 0x157C PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x1584 PUSH2 0x379F JUMP JUMPDEST PUSH2 0x158C PUSH2 0x36C3 JUMP JUMPDEST PUSH2 0x1595 DUP5 PUSH2 0x2F9D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 DUP2 AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x20 SWAP1 PUSH0 PUSH1 0x20 MSTORE PUSH2 0x15BE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x1 SWAP1 PUSH1 0x3 SHR AND SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x19B6 JUMPI PUSH2 0x15DE DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP7 PUSH2 0x15E7 PUSH2 0x2B47 JUMP JUMPDEST SWAP3 PUSH2 0x1606 PUSH2 0xD5F DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP1 DUP6 MSTORE MLOAD SWAP7 PUSH2 0x161B PUSH1 0x40 DUP7 ADD SWAP9 DUP1 DUP11 MSTORE PUSH2 0x2A56 JUMP JUMPDEST SWAP8 PUSH1 0x80 DUP7 ADD SWAP9 DUP10 MSTORE PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x166E JUMPI DUP1 PUSH2 0x165C PUSH2 0x1646 PUSH1 0x1 SWAP4 DUP16 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x1667 DUP3 DUP14 MLOAD PUSH2 0x2AB4 JUMP JUMPDEST MSTORE ADD PUSH2 0x1625 JUMP JUMPDEST POP DUP10 SWAP9 SWAP7 SWAP8 SWAP9 PUSH2 0x169C DUP2 DUP10 MLOAD PUSH2 0x1695 DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP1 PUSH2 0x37F0 JUMP JUMPDEST SWAP10 PUSH2 0x16A7 DUP4 MLOAD PUSH2 0x2A56 JUMP JUMPDEST SWAP6 PUSH1 0x60 DUP10 ADD SWAP7 DUP8 MSTORE PUSH2 0x170E DUP12 PUSH32 0x0 TLOAD PUSH32 0x0 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP1 JUMP JUMPDEST ISZERO ISZERO PUSH1 0xA0 DUP11 ADD DUP2 DUP2 MSTORE SWAP6 SWAP1 PUSH2 0x1989 JUMPI JUMPDEST PUSH0 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x186E JUMPI PUSH2 0x174A DUP2 DUP16 DUP11 DUP15 DUP4 DUP15 PUSH2 0x173C DUP15 MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x181E JUMPI JUMPDEST POP POP POP POP PUSH2 0x2AB4 JUMP JUMPDEST MLOAD PUSH2 0x1755 DUP3 DUP13 PUSH2 0x2AB4 JUMP JUMPDEST MLOAD GT PUSH2 0x17B5 JUMPI DUP1 DUP13 DUP16 DUP3 PUSH2 0x17A8 DUP16 DUP3 PUSH2 0x17AE SWAP5 PUSH2 0x178F PUSH2 0x177E PUSH2 0xDE5 PUSH1 0x1 SWAP12 PUSH2 0x1794 SWAP7 MLOAD PUSH2 0x2AB4 JUMP JUMPDEST PUSH2 0x1788 DUP5 DUP5 PUSH2 0x2AB4 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x3861 JUMP JUMPDEST PUSH2 0x2AB4 JUMP JUMPDEST MLOAD SWAP4 MLOAD SWAP4 PUSH2 0x17A2 DUP4 DUP7 PUSH2 0x2AB4 JUMP JUMPDEST MLOAD PUSH2 0x2BB7 JUMP JUMPDEST SWAP3 PUSH2 0x2AB4 JUMP JUMPDEST MSTORE ADD PUSH2 0x1720 JUMP JUMPDEST DUP14 DUP11 PUSH2 0x17DE DUP4 PUSH2 0x17D7 DUP16 SWAP6 PUSH2 0x17D1 PUSH2 0xDE5 DUP3 PUSH2 0x181B SWAP10 MLOAD PUSH2 0x2AB4 JUMP JUMPDEST SWAP6 PUSH2 0x2AB4 JUMP JUMPDEST MLOAD SWAP3 PUSH2 0x2AB4 JUMP JUMPDEST MLOAD PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST PUSH0 REVERT JUMPDEST PUSH2 0x183D PUSH2 0x184F SWAP4 PUSH2 0x185A SWAP6 PUSH2 0x1833 DUP6 DUP10 PUSH2 0x2AB4 JUMP JUMPDEST MLOAD SWAP2 ADD MLOAD SWAP1 PUSH2 0x383F JUMP JUMPDEST PUSH2 0x1848 DUP4 DUP4 MLOAD PUSH2 0x2AB4 JUMP JUMPDEST MSTORE MLOAD PUSH2 0x2AB4 JUMP JUMPDEST MLOAD PUSH2 0x17A2 DUP5 DUP5 PUSH2 0x2AB4 JUMP JUMPDEST PUSH2 0x1864 DUP4 DUP4 PUSH2 0x2AB4 JUMP JUMPDEST MSTORE DUP11 DUP15 DUP4 DUP15 PUSH2 0x1741 JUMP JUMPDEST POP DUP11 SWAP6 POP SWAP2 DUP8 SWAP2 DUP14 SWAP4 DUP14 PUSH2 0x1893 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP7 PUSH0 JUMPDEST DUP10 MLOAD DUP2 LT ISZERO PUSH2 0x18E4 JUMPI DUP1 PUSH2 0x18CB DUP13 PUSH2 0x18C4 DUP4 PUSH2 0x18BC PUSH1 0x1 SWAP7 DUP16 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP3 MLOAD PUSH2 0x2AB4 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x389F JUMP JUMPDEST PUSH2 0x18DD DUP3 DUP13 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE ADD PUSH2 0x1896 JUMP JUMPDEST PUSH2 0x5A4 DUP9 PUSH0 DUP10 DUP10 PUSH32 0xFBE5B0D79FB94F1E81C0A92BF86AE9D3A19E9D1BF6202C0D3E75120F65D5D8A5 DUP11 DUP11 PUSH2 0x1962 PUSH2 0x1950 DUP13 PUSH2 0x1939 DUP14 PUSH2 0x1925 DUP2 CALLER DUP9 DUP7 PUSH2 0x38AD JUMP JUMPDEST PUSH2 0x192D PUSH2 0x3929 JUMP JUMPDEST PUSH2 0x1979 JUMPI JUMPDEST DUP6 DUP4 PUSH2 0x398E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP6 MLOAD DUP9 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP5 AND SWAP8 DUP5 PUSH2 0x2BC4 JUMP JUMPDEST SUB SWAP1 LOG4 PUSH2 0x196D PUSH2 0x3718 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0xB67 JUMP JUMPDEST PUSH2 0x1984 DUP2 DUP8 DUP6 PUSH2 0x394B JUMP JUMPDEST PUSH2 0x1932 JUMP JUMPDEST PUSH2 0x19AC PUSH2 0x19A6 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x32A8 JUMP JUMPDEST PUSH1 0x20 DUP12 ADD MSTORE PUSH2 0x171E JUMP JUMPDEST DUP4 PUSH32 0xEF029ADF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH2 0x19FA PUSH2 0x2EF8 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x9 SLOAD PUSH1 0x8 SHR AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x20 PUSH2 0x1A98 PUSH1 0x4 CALLDATALOAD PUSH2 0x1A35 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x1A3D PUSH2 0x2EF8 JUMP JUMPDEST PUSH32 0x0 TLOAD PUSH32 0x0 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x1AC7 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x1ACF PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x1AD8 DUP2 PUSH2 0x2F52 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH2 0x1479 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x32A8 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH2 0x1B06 PUSH2 0x2EF8 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1 PUSH1 0x7 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH2 0x1B26 CALLDATASIZE PUSH2 0x11A2 JUMP JUMPDEST SWAP3 SWAP2 PUSH2 0x1B30 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x1B38 PUSH2 0x379F JUMP JUMPDEST PUSH2 0x1B41 DUP7 PUSH2 0x2F52 JUMP JUMPDEST PUSH2 0x1B49 PUSH2 0x36C3 JUMP JUMPDEST PUSH2 0x1B52 DUP7 PUSH2 0x3B59 JUMP JUMPDEST PUSH2 0x1B5B DUP7 PUSH2 0x2FEA JUMP JUMPDEST SWAP3 PUSH2 0x1B6A DUP5 MLOAD PUSH1 0x1 SWAP1 DUP2 SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x1C98 JUMPI SWAP2 DUP4 SWAP2 PUSH2 0x5A4 SWAP8 SWAP6 SWAP4 PUSH2 0x1B8C PUSH1 0x20 PUSH2 0x1BDB SWAP10 SWAP8 ADD MLOAD MLOAD DUP4 MLOAD SWAP1 PUSH2 0x3BA7 JUMP JUMPDEST PUSH1 0xC0 DUP5 ADD SWAP6 DUP7 MLOAD PUSH2 0x1BA4 PUSH1 0xA0 DUP8 ADD SWAP2 DUP3 MLOAD SWAP1 DUP7 PUSH2 0x3BD6 JUMP JUMPDEST SWAP8 DUP10 PUSH2 0x1BB5 DUP9 MLOAD PUSH1 0x1 SWAP1 PUSH1 0x8 SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x1C27 JUMPI JUMPDEST DUP10 SWAP5 SWAP3 POP DUP8 SWAP2 POP SWAP3 PUSH2 0x1BCD SWAP7 SWAP6 SWAP4 PUSH2 0x3DBF JUMP JUMPDEST SWAP5 DUP6 SWAP2 MLOAD PUSH1 0x1 SWAP1 PUSH1 0xA SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x1BEA JUMPI JUMPDEST DUP6 SWAP1 PUSH2 0xA02 PUSH2 0x3718 JUMP JUMPDEST PUSH2 0x1C18 PUSH2 0x1C0B PUSH2 0x1C1E SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 PUSH2 0x4077 JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP4 PUSH2 0x1BE0 JUMP JUMPDEST SWAP2 PUSH2 0x1C8B SWAP2 PUSH2 0x1C5D DUP10 SWAP12 DUP12 PUSH2 0x1C57 PUSH2 0x1C0B PUSH2 0x1BCD SWAP13 SWAP12 SWAP10 SWAP11 SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x3C7C JUMP JUMPDEST PUSH2 0x1C81 PUSH2 0x1C7B DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP11 PUSH2 0x3D52 JUMP JUMPDEST MLOAD SWAP1 MLOAD SWAP1 DUP5 PUSH2 0x3BD6 JUMP JUMPDEST SWAP8 DUP2 SWAP4 SWAP3 SWAP5 SWAP6 POP DUP10 PUSH2 0x1BBA JUMP JUMPDEST PUSH32 0x218E374700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x1CF2 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x1CFA PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x1D03 DUP2 PUSH2 0x2F52 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x3 SHR AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x1D46 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x1D4E PUSH2 0x2EF8 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x30C JUMPI PUSH2 0x1D9A SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xBC4 JUMP JUMPDEST PUSH2 0x1DA2 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x1DAB CALLER PUSH2 0x2F52 JUMP JUMPDEST DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH1 0x20 DUP5 MSTORE DUP2 PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD CALLDATACOPY PUSH0 PUSH1 0x40 DUP3 DUP5 ADD ADD MSTORE PUSH32 0x4BC4412E210115456903C65B5277D299A505E79F2EB852B92B1CA52D85856428 PUSH1 0x4 CALLDATALOAD SWAP3 PUSH1 0x40 DUP2 PUSH1 0x1F NOT PUSH1 0x1F CALLER SWAP7 ADD AND DUP2 ADD SUB ADD SWAP1 LOG3 STOP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0x350 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0xC44 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x1E2E DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x1E36 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x1E3F DUP2 PUSH2 0x2F52 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 PUSH1 0x20 DUP5 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP4 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1E92 JUMPI PUSH2 0x5A4 DUP6 PUSH2 0x1E86 DUP2 DUP10 SUB DUP3 PUSH2 0x7BE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x1E00 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP5 PUSH1 0x1 PUSH2 0x1EB4 DUP2 SWAP3 DUP5 DUP10 SLOAD AND SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 SWAP3 AND DUP2 MSTORE ADD SWAP1 JUMP JUMPDEST SWAP7 ADD SWAP4 SWAP3 ADD SWAP1 PUSH2 0x1E6F JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH2 0x160 PUSH2 0x1F24 PUSH1 0x4 CALLDATALOAD PUSH2 0x1EE2 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x1EEA PUSH2 0x2BEF JUMP JUMPDEST POP PUSH2 0x1EF3 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x1EFC DUP2 PUSH2 0x2F52 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH2 0x4143 JUMP JUMPDEST PUSH2 0x1FB5 PUSH1 0x40 MLOAD DUP1 SWAP3 DUP1 MLOAD ISZERO ISZERO DUP3 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0x40 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0x60 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0x80 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0xA0 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0xC0 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0xE0 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 SWAP1 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 ADD MSTORE JUMP JUMPDEST RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x20 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH2 0x200D PUSH2 0x2EF8 JUMP JUMPDEST PUSH1 0x20 PUSH32 0x0 TLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH2 0x2077 PUSH1 0x4 CALLDATALOAD PUSH2 0x2059 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x2065 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x206D PUSH2 0x2EF8 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 CALLER PUSH2 0x4281 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x20A7 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x20AF PUSH2 0x2EF8 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP1 ISZERO ISZERO SUB PUSH2 0x30C JUMPI JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD SWAP1 PUSH2 0x31E DUP3 PUSH2 0x20C6 JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x30C JUMPI JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x30C JUMPI PUSH1 0xA4 SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDC PUSH1 0x80 SWAP2 ADD SLT PUSH2 0x30C JUMPI PUSH2 0x124 SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x1A0 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x30C JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x2169 DUP2 PUSH2 0x2FB JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x30C JUMPI DUP2 PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x30C JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD PUSH2 0x2195 DUP2 PUSH2 0x84B JUMP JUMPDEST SWAP2 PUSH1 0x40 SWAP2 PUSH2 0x21A6 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x7BE JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 SWAP1 PUSH1 0x24 PUSH1 0x20 DUP7 ADD SWAP2 PUSH1 0x7 SHL DUP5 ADD ADD SWAP3 DUP7 DUP5 GT PUSH2 0x30C JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x2204 JUMPI POP POP POP POP POP SWAP2 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x21DF PUSH2 0x20DD JUMP JUMPDEST SWAP2 PUSH2 0x21E8 PUSH2 0x20D0 JUMP JUMPDEST SWAP2 PUSH2 0x21F2 DUP2 PUSH2 0x20F0 JUMP JUMPDEST SWAP2 PUSH2 0x350 PUSH2 0x21FE PUSH2 0x310 JUMP JUMPDEST SWAP3 PUSH2 0x211F JUMP JUMPDEST PUSH1 0x80 DUP3 DUP9 SUB SLT PUSH2 0x30C JUMPI DUP3 PUSH1 0x80 SWAP2 DUP7 MLOAD PUSH2 0x221D DUP2 PUSH2 0x734 JUMP JUMPDEST DUP5 CALLDATALOAD PUSH2 0x2228 DUP2 PUSH2 0x2FB JUMP JUMPDEST DUP2 MSTORE DUP3 DUP6 ADD CALLDATALOAD PUSH2 0x2237 DUP2 PUSH2 0x836 JUMP JUMPDEST DUP4 DUP3 ADD MSTORE DUP8 DUP6 ADD CALLDATALOAD PUSH2 0x2248 DUP2 PUSH2 0x2FB JUMP JUMPDEST DUP9 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP7 ADD CALLDATALOAD SWAP1 PUSH2 0x225C DUP3 PUSH2 0x20C6 JUMP JUMPDEST DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x21C6 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH2 0x2278 CALLDATASIZE PUSH2 0x214F JUMP JUMPDEST SWAP1 SWAP7 SWAP6 SWAP5 SWAP3 PUSH2 0x2285 PUSH2 0x36C3 JUMP JUMPDEST ADDRESS EXTCODESIZE ISZERO PUSH2 0x30C JUMPI PUSH2 0x22EF SWAP8 PUSH0 SWAP8 PUSH1 0x40 PUSH2 0x2356 SWAP6 PUSH2 0x234B SWAP5 PUSH4 0xFFFFFFFF PUSH2 0x1A4 SWAP11 DUP5 MLOAD SWAP15 DUP16 SWAP14 DUP15 SWAP14 DUP15 PUSH32 0xEEEC802F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP11 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH1 0x24 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x2C52 JUMP JUMPDEST SWAP11 PUSH1 0x44 DUP14 ADD MSTORE AND PUSH1 0x64 DUP12 ADD MSTORE ISZERO ISZERO PUSH1 0x84 DUP11 ADD MSTORE DUP3 DUP2 CALLDATALOAD PUSH2 0x230E DUP2 PUSH2 0x2FB JUMP JUMPDEST AND PUSH1 0xA4 DUP11 ADD MSTORE DUP3 PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH2 0x2323 DUP2 PUSH2 0x2FB JUMP JUMPDEST AND PUSH1 0xC4 DUP11 ADD MSTORE ADD CALLDATALOAD PUSH2 0x2334 DUP2 PUSH2 0x2FB JUMP JUMPDEST AND PUSH1 0xE4 DUP8 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x104 DUP7 ADD MSTORE JUMP JUMPDEST PUSH2 0x124 DUP5 ADD SWAP1 PUSH2 0x2CC1 JUMP JUMPDEST SUB DUP2 DUP4 ADDRESS GAS CALL DUP1 ISZERO PUSH2 0xB0F JUMPI PUSH2 0x236E JUMPI PUSH2 0x1332 PUSH2 0x3718 JUMP JUMPDEST DUP1 PUSH2 0x237B PUSH2 0x2381 SWAP3 PUSH2 0x755 JUMP JUMPDEST DUP1 PUSH2 0x5A8 JUMP JUMPDEST PUSH0 PUSH2 0x132A JUMP JUMPDEST PUSH2 0x31E SWAP1 SWAP3 SWAP2 SWAP3 PUSH1 0x60 DUP2 ADD SWAP4 PUSH1 0x40 SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH2 0x5A4 PUSH1 0x4 CALLDATALOAD PUSH2 0x23DA DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x23E2 PUSH2 0x29EA JUMP JUMPDEST POP PUSH2 0x23EB PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x23F4 DUP2 PUSH2 0x2F52 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x2 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x241A DUP5 PUSH2 0x769 JUMP JUMPDEST DUP3 DUP2 SLOAD AND DUP5 MSTORE DUP3 PUSH1 0x1 DUP3 ADD SLOAD AND PUSH1 0x20 DUP6 ADD MSTORE ADD SLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x2387 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0x350 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x2440 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH2 0x5A4 PUSH2 0x24B8 PUSH0 DUP1 PUSH2 0x249F PUSH2 0x248F CALLDATASIZE PUSH2 0xBF2 JUMP JUMPDEST PUSH2 0x2497 PUSH2 0x3475 JUMP JUMPDEST PUSH2 0xC2F PUSH2 0x2EF8 JUMP JUMPDEST PUSH1 0x20 DUP2 MLOAD SWAP2 ADD DUP3 CALLER GAS CALL PUSH2 0x24B1 PUSH2 0x2B18 JUMP JUMPDEST SWAP1 CALLER PUSH2 0x3509 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x2440 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH4 0xFFFFFFFF PUSH2 0x24DF CALLDATASIZE PUSH2 0x214F JUMP JUMPDEST SWAP4 SWAP1 SWAP5 PUSH2 0x24F0 SWAP9 SWAP3 SWAP9 SWAP8 SWAP7 SWAP8 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x24F8 PUSH2 0x36C3 JUMP JUMPDEST PUSH2 0x2500 PUSH2 0x43B1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP8 PUSH2 0x250D DUP10 PUSH2 0x785 JUMP JUMPDEST DUP9 MSTORE PUSH1 0x20 DUP9 ADD MSTORE AND PUSH1 0x40 DUP7 ADD MSTORE ISZERO ISZERO PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x60 DUP6 CALLDATASIZE SUB SLT PUSH2 0x30C JUMPI PUSH2 0x2589 PUSH2 0x2590 SWAP3 PUSH2 0x132A SWAP7 PUSH1 0x40 DUP1 MLOAD SWAP2 PUSH2 0x2544 DUP4 PUSH2 0x769 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x254F DUP2 PUSH2 0x2FB JUMP JUMPDEST DUP4 MSTORE PUSH1 0x20 DUP2 ADD CALLDATALOAD PUSH2 0x255F DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MSTORE ADD CALLDATALOAD PUSH2 0x256F DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 DUP8 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 DUP7 ADD MSTORE JUMP JUMPDEST CALLDATASIZE SWAP1 PUSH2 0x2D10 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x482E JUMP JUMPDEST PUSH2 0x31E SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x180 PUSH2 0x1A0 DUP3 ADD SWAP5 PUSH2 0x25DB DUP4 DUP3 MLOAD PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x2611 PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0xE0 DUP6 ADD SWAP1 PUSH5 0xFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD MLOAD SWAP1 PUSH2 0x262C PUSH2 0x100 SWAP3 DUP4 DUP7 ADD SWAP1 PUSH4 0xFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x2660 PUSH1 0xC0 DUP3 ADD MLOAD SWAP3 PUSH2 0x2646 PUSH2 0x120 SWAP5 DUP6 DUP9 ADD SWAP1 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MLOAD ISZERO ISZERO PUSH2 0x140 DUP8 ADD MSTORE DUP3 ADD MLOAD ISZERO ISZERO PUSH2 0x160 DUP7 ADD MSTORE JUMP JUMPDEST ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH2 0x5A4 PUSH2 0x26F7 PUSH1 0x4 CALLDATALOAD PUSH2 0x268C DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH0 PUSH2 0x120 PUSH1 0x40 MLOAD PUSH2 0x269C DUP2 PUSH2 0x7A1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x26A8 DUP2 PUSH2 0x734 JUMP JUMPDEST DUP4 DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP4 PUSH1 0x40 DUP3 ADD MSTORE DUP4 PUSH1 0x60 DUP3 ADD MSTORE DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE DUP3 PUSH1 0xC0 DUP3 ADD MSTORE DUP3 PUSH1 0xE0 DUP3 ADD MSTORE DUP3 PUSH2 0x100 DUP3 ADD MSTORE ADD MSTORE PUSH2 0x2D70 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x259A JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x20 PUSH2 0x2763 PUSH1 0x4 CALLDATALOAD PUSH2 0x2725 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x24 CALLDATALOAD SWAP2 PUSH2 0x273A DUP4 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x2742 PUSH2 0x2EF8 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0xF DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x27BC DUP3 PUSH2 0x785 JUMP JUMPDEST DUP2 PUSH0 DUP2 MSTORE PUSH1 0xC0 PUSH1 0x60 SWAP2 DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 DUP1 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 PUSH4 0xFFFFFFFF DUP1 DUP1 SWAP5 AND SWAP2 AND ADD SWAP2 DUP3 GT PUSH2 0x282B JUMPI JUMP JUMPDEST PUSH2 0x27E6 JUMP JUMPDEST PUSH2 0x28AD SWAP2 PUSH2 0x283C PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x2845 DUP3 PUSH2 0x2F9D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP4 AND SWAP1 DUP2 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP4 DUP5 SWAP4 PUSH2 0x286A DUP6 PUSH0 KECCAK256 SLOAD PUSH2 0x32A8 JUMP JUMPDEST SWAP4 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE DUP5 PUSH0 KECCAK256 SLOAD AND SWAP2 DUP5 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP4 DUP5 SWAP4 PUSH32 0xA0E8F5AC00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD PUSH2 0x32F5 JUMP JUMPDEST SUB SWAP2 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xB0F JUMPI PUSH0 SWAP2 PUSH0 SWAP4 PUSH2 0x292A JUMPI JUMPDEST POP POP ISZERO PUSH2 0x2902 JUMPI PUSH8 0xDE0B5CAD2BEF000 DUP2 GT PUSH2 0x28DA JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x746E594000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x53F976D400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x294D SWAP4 POP DUP1 SWAP2 SWAP3 POP SWAP1 RETURNDATASIZE LT PUSH2 0x2955 JUMPI JUMPDEST PUSH2 0x2945 DUP2 DUP4 PUSH2 0x7BE JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x32D6 JUMP JUMPDEST SWAP1 PUSH0 DUP1 PUSH2 0x28C1 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x293B JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x30C JUMPI MLOAD SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x20 PUSH2 0x2983 PUSH1 0x1 SWAP3 PUSH1 0x40 DUP7 MSTORE PUSH1 0x40 DUP7 ADD SWAP1 PUSH2 0x490 JUMP JUMPDEST SWAP4 ADD MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP2 DUP3 DUP2 SLOAD SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP3 PUSH1 0x20 DUP4 ADD SWAP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP4 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x29C7 JUMPI POP POP POP PUSH2 0x31E SWAP3 POP SUB DUP4 PUSH2 0x7BE JUMP JUMPDEST DUP6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 MSTORE PUSH1 0x1 SWAP6 DUP7 ADD SWAP6 DUP9 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x29B1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x29F7 DUP3 PUSH2 0x769 JUMP JUMPDEST PUSH0 PUSH1 0x40 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 PUSH2 0x2A12 DUP3 PUSH2 0x84B JUMP JUMPDEST PUSH2 0x2A1F PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x7BE JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x2A2F DUP3 SWAP5 PUSH2 0x84B JUMP JUMPDEST ADD SWAP1 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x2A3F JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH2 0x2A4A PUSH2 0x29EA JUMP JUMPDEST DUP3 DUP3 DUP6 ADD ADD MSTORE ADD PUSH2 0x2A33 JUMP JUMPDEST SWAP1 PUSH2 0x2A60 DUP3 PUSH2 0x84B JUMP JUMPDEST PUSH2 0x2A6D PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x7BE JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x2A7D DUP3 SWAP5 PUSH2 0x84B JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x2AC8 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH2 0x2A87 JUMP JUMPDEST PUSH2 0x2AD6 DUP3 PUSH2 0x3EA JUMP JUMPDEST MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD PUSH2 0x2AE6 DUP2 PUSH2 0x769 JUMP JUMPDEST PUSH1 0x40 PUSH1 0xFF DUP3 SWAP5 SLOAD DUP2 DUP2 AND PUSH2 0x2AF9 DUP2 PUSH2 0x3EA JUMP JUMPDEST DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 PUSH1 0x8 SHR AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0xA8 SHR AND ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x2B42 JUMPI RETURNDATASIZE SWAP1 PUSH2 0x2B29 DUP3 PUSH2 0x8C3 JUMP JUMPDEST SWAP2 PUSH2 0x2B37 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x7BE JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0xC0 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x750 JUMPI PUSH1 0x40 MSTORE PUSH0 PUSH1 0xA0 DUP4 PUSH1 0x60 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x80 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BDC0 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x282B JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x282B JUMPI JUMP JUMPDEST SWAP2 PUSH2 0x2BE1 SWAP1 PUSH2 0x350 SWAP5 SWAP3 DUP5 MSTORE PUSH1 0x60 PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD SWAP1 PUSH2 0x490 JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x490 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x160 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x750 JUMPI PUSH1 0x40 MSTORE PUSH0 PUSH2 0x140 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE DUP3 PUSH1 0xC0 DUP3 ADD MSTORE DUP3 PUSH1 0xE0 DUP3 ADD MSTORE DUP3 PUSH2 0x100 DUP3 ADD MSTORE DUP3 PUSH2 0x120 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x2C71 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 DUP3 PUSH1 0x80 PUSH1 0x1 SWAP3 DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP5 DUP3 ADD MLOAD PUSH2 0x2C98 DUP2 PUSH2 0x3EA JUMP JUMPDEST DUP4 DUP7 ADD MSTORE PUSH1 0x40 DUP3 DUP2 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP4 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 ADD MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE ADD SWAP6 ADD SWAP4 SWAP3 SWAP2 ADD PUSH2 0x2C63 JUMP JUMPDEST PUSH1 0x60 DUP1 SWAP2 DUP1 CALLDATALOAD PUSH2 0x2CD0 DUP2 PUSH2 0x20C6 JUMP JUMPDEST ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD CALLDATALOAD PUSH2 0x2CE2 DUP2 PUSH2 0x20C6 JUMP JUMPDEST ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD CALLDATALOAD PUSH2 0x2CF7 DUP2 PUSH2 0x20C6 JUMP JUMPDEST ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD CALLDATALOAD PUSH2 0x2D09 DUP2 PUSH2 0x20C6 JUMP JUMPDEST ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x80 SWAP2 SUB SLT PUSH2 0x30C JUMPI PUSH1 0x40 MLOAD PUSH2 0x2D28 DUP2 PUSH2 0x734 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 SWAP5 DUP1 CALLDATALOAD PUSH2 0x2D38 DUP2 PUSH2 0x20C6 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP2 ADD CALLDATALOAD PUSH2 0x2D48 DUP2 PUSH2 0x20C6 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD CALLDATALOAD PUSH2 0x2D5B DUP2 PUSH2 0x20C6 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MSTORE ADD CALLDATALOAD SWAP2 PUSH2 0x2D6C DUP4 PUSH2 0x20C6 JUMP JUMPDEST ADD MSTORE JUMP JUMPDEST PUSH2 0x2D9B SWAP1 PUSH2 0x2D7C PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x2D85 DUP2 PUSH2 0x2F52 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x350 PUSH1 0x1 PUSH2 0x2DAA DUP4 PUSH2 0x32A8 JUMP JUMPDEST SWAP3 PUSH2 0x2E53 PUSH2 0x2DB7 DUP3 PUSH2 0x5316 JUMP JUMPDEST PUSH2 0x2E46 PUSH2 0x2DC3 DUP5 PUSH2 0x5339 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF DUP6 PUSH1 0x5A SHR AND SWAP1 PUSH4 0xFFFFFFFF DUP7 PUSH2 0x2DDD PUSH1 0x82 SWAP1 JUMP JUMPDEST SHR AND SWAP4 PUSH2 0x2DE8 PUSH2 0x7EE JUMP JUMPDEST PUSH1 0x4 DUP9 SWAP1 SHR DUP10 AND ISZERO ISZERO DUP2 MSTORE SWAP10 PUSH1 0x5 DUP9 SWAP1 SHR DUP10 AND ISZERO ISZERO PUSH1 0x20 DUP13 ADD MSTORE PUSH1 0x6 DUP9 SWAP1 SHR DUP10 AND ISZERO ISZERO PUSH1 0x40 DUP13 ADD MSTORE PUSH1 0x7 DUP9 SWAP1 SHR DUP10 AND ISZERO ISZERO PUSH1 0x60 DUP13 ADD MSTORE PUSH2 0x2E26 PUSH2 0x7FB JUMP JUMPDEST SWAP11 DUP12 MSTORE PUSH1 0x20 DUP12 ADD MSTORE PUSH1 0x40 DUP11 ADD MSTORE PUSH1 0x60 DUP10 ADD MSTORE PUSH5 0xFFFFFFFFFF AND PUSH1 0x80 DUP9 ADD MSTORE JUMP JUMPDEST PUSH4 0xFFFFFFFF AND PUSH1 0xA0 DUP7 ADD MSTORE JUMP JUMPDEST DUP1 DUP3 AND ISZERO ISZERO PUSH1 0xC0 DUP6 ADD MSTORE DUP1 DUP3 SHR DUP3 AND ISZERO ISZERO PUSH1 0xE0 DUP6 ADD MSTORE PUSH1 0x2 DUP2 SWAP1 SHR DUP3 AND ISZERO ISZERO PUSH2 0x100 DUP6 ADD MSTORE PUSH1 0x3 SHR AND ISZERO ISZERO PUSH2 0x120 DUP4 ADD MSTORE JUMP JUMPDEST PUSH32 0xF223889600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2E86 JUMPI CALLDATASIZE PUSH0 DUP1 CALLDATACOPY PUSH0 DUP1 CALLDATASIZE DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS DELEGATECALL RETURNDATASIZE PUSH0 DUP1 RETURNDATACOPY ISZERO PUSH2 0x2EF4 JUMPI RETURNDATASIZE PUSH0 RETURN JUMPDEST RETURNDATASIZE PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND ADDRESS SUB PUSH2 0x2F2A JUMPI JUMP JUMPDEST PUSH32 0x9FD25B3600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x2F72 JUMPI POP JUMP JUMPDEST PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 SHR AND ISZERO PUSH2 0x2FBF JUMPI POP JUMP JUMPDEST PUSH32 0x4BDACE1300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2FFB PUSH2 0x27AF JUMP JUMPDEST SWAP3 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH0 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SLOAD SWAP1 PUSH1 0x4 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SWAP1 PUSH1 0x3 PUSH1 0x20 MSTORE DUP4 PUSH0 KECCAK256 SWAP4 DUP5 SLOAD SWAP4 DUP8 MSTORE PUSH2 0x3036 PUSH1 0x20 DUP9 ADD SWAP6 PUSH2 0x535C JUMP JUMPDEST DUP6 MSTORE PUSH2 0x3041 DUP5 PUSH2 0x2A08 JUMP JUMPDEST SWAP2 DUP2 DUP9 ADD SWAP3 DUP4 MSTORE PUSH2 0x3051 DUP6 PUSH2 0x2A56 JUMP JUMPDEST SWAP2 PUSH1 0x60 DUP10 ADD SWAP3 DUP4 MSTORE PUSH2 0x3062 DUP7 PUSH2 0x2A56 JUMP JUMPDEST SWAP5 PUSH1 0x80 SWAP6 PUSH1 0x80 DUP12 ADD MSTORE PUSH2 0x3076 DUP8 DUP12 MLOAD PUSH2 0x3595 JUMP JUMPDEST PUSH1 0xC0 DUP12 ADD MSTORE PUSH2 0x3084 DUP8 PUSH2 0x2A56 JUMP JUMPDEST PUSH1 0xA0 DUP12 ADD SWAP1 DUP2 MSTORE DUP11 MLOAD SWAP2 PUSH1 0x1 SWAP10 PUSH1 0x1 DUP5 DUP2 SHR AND SWAP4 DUP5 PUSH2 0x31ED JUMPI JUMPDEST POP DUP4 PUSH2 0x31DB JUMPI JUMPDEST DUP13 PUSH0 JUMPDEST DUP12 DUP2 LT PUSH2 0x30BE JUMPI POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP11 DUP14 SWAP3 DUP3 DUP13 DUP13 DUP13 PUSH2 0x3105 DUP5 PUSH2 0x30F1 DUP2 PUSH2 0x30E3 PUSH2 0xE07 DUP16 DUP16 PUSH2 0xDE5 DUP6 PUSH2 0xDF2 SWAP3 MLOAD PUSH2 0x2AB4 JUMP JUMPDEST SWAP5 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP5 MLOAD DUP4 PUSH2 0x30FF DUP4 DUP4 PUSH2 0x2AB4 JUMP JUMPDEST MSTORE PUSH2 0x2AB4 JUMP JUMPDEST POP PUSH2 0x310F DUP2 PUSH2 0x35E7 JUMP JUMPDEST PUSH2 0x311A DUP6 DUP14 MLOAD PUSH2 0x2AB4 JUMP JUMPDEST MSTORE PUSH2 0x3138 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP6 DUP8 PUSH2 0x5615 JUMP JUMPDEST DUP8 DUP14 DUP14 ISZERO PUSH2 0x31CE JUMPI DUP3 ADD MLOAD ISZERO ISZERO SWAP2 DUP3 PUSH2 0x31B0 JUMPI JUMPDEST POP POP PUSH2 0x3161 JUMPI JUMPDEST POP POP POP POP POP JUMPDEST ADD DUP14 SWAP1 PUSH2 0x30A8 JUMP JUMPDEST DUP3 PUSH2 0x3184 SWAP3 PUSH2 0x317B DUP3 PUSH2 0x3174 DUP9 MLOAD PUSH2 0x5339 JUMP JUMPDEST SWAP5 MLOAD PUSH2 0x2AB4 JUMP JUMPDEST MLOAD SWAP7 SHR DUP6 PUSH2 0x5B30 JUMP JUMPDEST SWAP3 DUP4 PUSH2 0x3194 JUMPI JUMPDEST DUP15 SWAP4 POP DUP13 PUSH2 0x3153 JUMP JUMPDEST PUSH2 0x31A7 SWAP4 PUSH2 0x31A1 SWAP2 PUSH2 0x2BB7 JUMP JUMPDEST SWAP2 PUSH2 0x5615 JUMP JUMPDEST PUSH0 DUP16 DUP3 DUP3 PUSH2 0x318B JUMP JUMPDEST SWAP1 SWAP2 POP MLOAD PUSH2 0x31BD DUP2 PUSH2 0x3EA JUMP JUMPDEST PUSH2 0x31C6 DUP2 PUSH2 0x3EA JUMP JUMPDEST EQ DUP8 PUSH0 PUSH2 0x314C JUMP JUMPDEST POP POP POP POP POP POP POP POP PUSH2 0x3159 JUMP JUMPDEST DUP13 MLOAD SWAP1 SWAP4 POP PUSH1 0x3 SHR PUSH1 0x1 AND ISZERO SWAP3 PUSH2 0x30A5 JUMP JUMPDEST PUSH2 0x31F8 SWAP2 SWAP5 POP PUSH2 0x5339 JUMP JUMPDEST ISZERO ISZERO SWAP3 PUSH0 PUSH2 0x309E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x2 SHR AND PUSH4 0xFFFFFFFF DUP1 SWAP4 PUSH2 0x322C PUSH1 0x82 SWAP1 JUMP JUMPDEST SHR AND SWAP3 DUP2 PUSH2 0x3239 JUMPI POP SWAP2 SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x3265 PUSH32 0x0 DUP5 PUSH2 0x2813 JUMP JUMPDEST AND TIMESTAMP GT ISZERO SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x1 SWAP2 AND ADD SWAP1 PUSH1 0xFF DUP3 GT PUSH2 0x282B JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x5 DUP3 MUL SWAP2 DUP1 DUP4 DIV PUSH1 0x5 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x282B JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x282B JUMPI JUMP JUMPDEST PUSH3 0xFFFFFF SWAP1 PUSH1 0x12 SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x282B JUMPI SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x31E DUP3 PUSH2 0x20C6 JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x30C JUMPI PUSH1 0x20 DUP3 MLOAD PUSH2 0x32EF DUP2 PUSH2 0x20C6 JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2D6C PUSH2 0x3395 PUSH1 0x40 SWAP4 SWAP7 SWAP6 SWAP5 SWAP7 PUSH1 0x60 DUP5 MSTORE DUP1 MLOAD PUSH2 0x3311 DUP2 PUSH2 0x3EA JUMP JUMPDEST PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xC0 PUSH2 0x333B DUP7 DUP4 ADD MLOAD PUSH1 0xE0 PUSH1 0xA0 DUP9 ADD MSTORE PUSH2 0x140 DUP8 ADD SWAP1 PUSH2 0x490 JUMP JUMPDEST SWAP2 PUSH1 0x60 DUP2 ADD MLOAD DUP3 DUP8 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xE0 DUP8 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH2 0x100 DUP8 ADD MSTORE ADD MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 DUP6 DUP4 SUB ADD PUSH2 0x120 DUP7 ADD MSTORE PUSH2 0x2440 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP7 AND PUSH1 0x20 DUP4 ADD MSTORE JUMP JUMPDEST DUP2 ISZERO PUSH2 0x33B1 JUMPI DIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x282B JUMPI PUSH2 0x350 SWAP2 PUSH2 0x33A7 JUMP JUMPDEST SWAP1 PUSH8 0xDE0B5CAD2BEF000 DUP2 GT PUSH2 0x28DA JUMPI PUSH5 0x174876E800 SWAP1 DIV DUP1 PUSH1 0x18 SHR PUSH2 0x344D JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC000003FFFF SWAP1 PUSH1 0x12 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH32 0xE4337C0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST ORIGIN PUSH2 0x34D2 JUMPI PUSH1 0x1 PUSH1 0x7 SLOAD AND PUSH2 0x34AA JUMPI PUSH1 0x1 PUSH32 0x0 TSTORE JUMP JUMPDEST PUSH32 0x7A19888600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x67F84AB200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x1035 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST SWAP1 PUSH2 0x3546 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x351E JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x358C JUMPI JUMPDEST PUSH2 0x3557 JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x354F JUMP JUMPDEST SWAP1 PUSH5 0xFFFFFFFFFF PUSH2 0x35A5 DUP3 PUSH2 0x2A56 JUMP JUMPDEST SWAP3 PUSH1 0x5A SHR AND PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x35B9 JUMPI POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x1F DUP3 PUSH2 0x35C5 DUP4 PUSH2 0x327F JUMP JUMPDEST SHR AND SWAP1 PUSH1 0x4D DUP3 GT PUSH2 0x282B JUMPI PUSH1 0x1 SWAP2 PUSH1 0xA EXP PUSH2 0x35E0 DUP3 DUP8 PUSH2 0x2AB4 JUMP JUMPDEST MSTORE ADD PUSH2 0x35AC JUMP JUMPDEST DUP1 MLOAD PUSH2 0x35F2 DUP2 PUSH2 0x3EA JUMP JUMPDEST PUSH2 0x35FB DUP2 PUSH2 0x3EA JUMP JUMPDEST DUP1 PUSH2 0x360E JUMPI POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x361A PUSH1 0x1 SWAP3 PUSH2 0x3EA JUMP JUMPDEST SUB PUSH2 0x369B JUMPI PUSH1 0x20 PUSH2 0x3645 PUSH2 0x3639 DUP3 PUSH1 0x4 SWAP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0x679AEFCE00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xB0F JUMPI PUSH0 SWAP2 PUSH2 0x3682 JUMPI POP SWAP1 JUMP JUMPDEST PUSH2 0x350 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xB08 JUMPI PUSH2 0xAF9 DUP2 DUP4 PUSH2 0x7BE JUMP JUMPDEST PUSH32 0xDF45063200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x36F0 JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP2 DUP4 DUP2 AND DUP5 DUP5 AND SUB PUSH2 0x375B JUMPI POP POP POP POP PUSH0 NOT SWAP1 JUMP JUMPDEST PUSH2 0x379B SWAP4 PUSH2 0x3785 SWAP3 AND PUSH0 MSTORE PUSH1 0x10 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST PUSH32 0x0 TLOAD ISZERO PUSH2 0x37C8 JUMPI JUMP JUMPDEST PUSH32 0xC09BA73600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP3 SWAP2 PUSH2 0x37FC DUP5 MLOAD PUSH2 0x2A56 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x3839 JUMPI DUP1 PUSH2 0x3828 DUP6 PUSH2 0x3823 DUP7 PUSH2 0x381D PUSH1 0x1 SWAP7 DUP9 PUSH2 0x2AB4 JUMP JUMPDEST MLOAD PUSH2 0x3295 JUMP JUMPDEST PUSH2 0x33A7 JUMP JUMPDEST PUSH2 0x3832 DUP3 DUP10 PUSH2 0x2AB4 JUMP JUMPDEST MSTORE ADD PUSH2 0x37FF JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST SWAP1 PUSH2 0x3849 SWAP2 PUSH2 0x3295 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x386B SWAP1 PUSH2 0x543C JUMP JUMPDEST SWAP1 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP3 EQ PUSH2 0x282B JUMPI PUSH2 0x31E SWAP2 PUSH0 SUB SWAP1 PUSH2 0x5491 JUMP JUMPDEST SWAP1 PUSH2 0x350 SWAP2 PUSH1 0x80 SHR SWAP1 PUSH2 0x5579 JUMP JUMPDEST SWAP2 SWAP1 SWAP4 SWAP3 SWAP4 PUSH2 0x38BD DUP3 DUP3 DUP6 PUSH2 0x373D JUMP JUMPDEST PUSH0 NOT DUP2 SUB PUSH2 0x38CE JUMPI JUMPDEST POP POP POP POP SWAP1 POP JUMP JUMPDEST DUP1 DUP7 GT PUSH2 0x38EC JUMPI SWAP5 PUSH2 0x38E2 SWAP5 SWAP6 SUB SWAP3 PUSH2 0x4281 JUMP JUMPDEST DUP1 PUSH0 DUP1 DUP1 DUP1 PUSH2 0x38C6 JUMP JUMPDEST DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 PUSH32 0xFB8F41B200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST ORIGIN ISZERO DUP1 PUSH2 0x3933 JUMPI SWAP1 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x7 SLOAD AND ISZERO SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x282B JUMPI JUMP JUMPDEST SWAP1 ORIGIN PUSH2 0x34D2 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x397F SWAP3 AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP1 SLOAD SWAP2 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x282B JUMPI SSTORE JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 DUP4 ISZERO PUSH2 0x3B24 JUMPI PUSH2 0x39C1 DUP6 PUSH2 0x3785 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD DUP1 DUP5 GT PUSH2 0x3AE7 JUMPI DUP4 SWAP1 SUB PUSH2 0x39EB DUP7 PUSH2 0x3785 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0x3A11 DUP4 PUSH2 0x3A0B DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x2BB7 JUMP JUMPDEST PUSH2 0x3A1A DUP2 PUSH2 0x55DD JUMP JUMPDEST PUSH2 0x3A35 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP1 DUP2 EXTCODESIZE ISZERO PUSH2 0x30C JUMPI PUSH1 0x40 MLOAD PUSH32 0x23DE665100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP5 AND PUSH1 0x4 DUP6 ADD MSTORE PUSH0 PUSH1 0x24 DUP6 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP6 ADD DUP3 SWAP1 MSTORE SWAP4 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F SWAP2 PUSH2 0x3ACF SWAP2 DUP7 DUP2 DUP1 PUSH1 0x64 DUP2 ADD JUMPDEST SUB DUP2 DUP4 DUP10 GAS CALL PUSH2 0x3AD4 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG4 JUMP JUMPDEST DUP1 PUSH2 0x237B PUSH2 0x3AE1 SWAP3 PUSH2 0x755 JUMP JUMPDEST PUSH0 PUSH2 0x3ABE JUMP JUMPDEST PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 DUP4 SWAP1 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH32 0x96C6FD1E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x3B61 PUSH2 0x43B1 JUMP JUMPDEST PUSH2 0x3B6A DUP2 PUSH2 0x3201 JUMP JUMPDEST POP PUSH2 0x3B72 JUMPI POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0xD971F59700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SUB PUSH2 0x3BAE JUMPI JUMP JUMPDEST PUSH32 0xAAAD13F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 MLOAD SWAP2 DUP2 MLOAD DUP2 MLOAD DUP2 DUP6 EQ SWAP2 DUP3 ISZERO SWAP3 PUSH2 0x3C5C JUMPI JUMPDEST POP POP PUSH2 0x3BAE JUMPI PUSH2 0x3BFA DUP4 PUSH2 0x2A56 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x3C0C JUMPI POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x3C4A PUSH2 0x3C25 PUSH1 0x1 SWAP5 DUP7 PUSH2 0x2AB4 JUMP JUMPDEST MLOAD PUSH2 0x3C45 PUSH2 0x3C33 DUP6 DUP11 PUSH2 0x2AB4 JUMP JUMPDEST MLOAD PUSH2 0x3C3E DUP7 DUP11 PUSH2 0x2AB4 JUMP JUMPDEST MLOAD SWAP3 PUSH2 0x3295 JUMP JUMPDEST PUSH2 0x3295 JUMP JUMPDEST DIV PUSH2 0x3C55 DUP3 DUP10 PUSH2 0x2AB4 JUMP JUMPDEST MSTORE ADD PUSH2 0x3BFD JUMP JUMPDEST EQ ISZERO SWAP1 POP PUSH0 DUP1 PUSH2 0x3BEB JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x30C JUMPI MLOAD PUSH2 0x350 DUP2 PUSH2 0x20C6 JUMP JUMPDEST SWAP1 PUSH2 0x3CE0 SWAP3 PUSH2 0x3CCE PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 SWAP6 PUSH1 0x40 MLOAD SWAP8 DUP9 SWAP7 DUP8 SWAP6 DUP7 SWAP4 PUSH32 0x1C149E2800000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x40 PUSH1 0x4 DUP7 ADD MSTORE PUSH1 0x44 DUP6 ADD SWAP1 PUSH2 0x490 JUMP JUMPDEST SWAP1 PUSH1 0x3 NOT DUP5 DUP4 SUB ADD PUSH1 0x24 DUP6 ADD MSTORE PUSH2 0x2440 JUMP JUMPDEST SUB SWAP4 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xB0F JUMPI PUSH0 SWAP2 PUSH2 0x3D23 JUMPI JUMPDEST POP ISZERO PUSH2 0x3CFB JUMPI JUMP JUMPDEST PUSH32 0x6061292500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x3D45 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3D4B JUMPI JUMPDEST PUSH2 0x3D3D DUP2 DUP4 PUSH2 0x7BE JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3C67 JUMP JUMPDEST PUSH0 PUSH2 0x3CF3 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3D33 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD MLOAD MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x3D6A JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH2 0x3DB9 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH2 0x3D99 PUSH2 0x3D93 DUP6 DUP4 DUP12 ADD MLOAD PUSH2 0x2AB4 JUMP JUMPDEST MLOAD PUSH2 0x35E7 JUMP JUMPDEST PUSH2 0x3DA7 DUP6 PUSH1 0xA0 DUP12 ADD MLOAD PUSH2 0x2AB4 JUMP JUMPDEST MSTORE DUP4 PUSH0 MSTORE DUP6 DUP8 MSTORE PUSH0 KECCAK256 SLOAD AND DUP3 DUP8 PUSH2 0x5615 JUMP JUMPDEST ADD PUSH2 0x3D5C JUMP JUMPDEST SWAP3 SWAP2 SWAP6 SWAP7 SWAP5 SWAP7 PUSH2 0x3DE0 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP6 PUSH0 JUMPDEST PUSH1 0x20 DUP10 ADD MLOAD DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x3EBE JUMPI PUSH2 0xDE5 DUP3 PUSH2 0x3DFE SWAP3 PUSH2 0x2AB4 JUMP JUMPDEST PUSH2 0x3E0E PUSH2 0x3639 PUSH2 0xDE5 DUP5 DUP10 PUSH2 0x2AB4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 DUP2 SUB PUSH2 0x3E6A JUMPI POP SWAP1 PUSH2 0x3E38 PUSH1 0x1 SWAP3 PUSH2 0x3E31 DUP4 DUP12 PUSH2 0x2AB4 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x5662 JUMP JUMPDEST PUSH2 0x3E51 DUP12 PUSH2 0x3E4A DUP4 PUSH2 0x17D7 DUP2 DUP14 PUSH2 0x2AB4 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x5579 JUMP JUMPDEST PUSH2 0x3E63 DUP3 DUP12 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE ADD PUSH2 0x3DE3 JUMP JUMPDEST PUSH2 0x181B SWAP1 DUP9 PUSH2 0x3E7F PUSH2 0x3639 PUSH2 0xDE5 DUP8 DUP13 PUSH2 0x2AB4 JUMP JUMPDEST PUSH32 0xFFE261A100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x4 MSTORE DUP2 AND PUSH1 0x24 MSTORE AND PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST POP POP SWAP7 SWAP5 SWAP2 SWAP3 POP SWAP7 SWAP5 POP PUSH2 0x3EF6 DUP5 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD PUSH1 0x2 SWAP2 AND OR SWAP1 JUMP JUMPDEST DUP1 DUP6 MSTORE PUSH2 0x3F13 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH2 0x3F59 PUSH1 0x20 DUP6 DUP4 AND SWAP8 PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x984DE9E800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x296B JUMP JUMPDEST SUB DUP2 DUP11 GAS STATICCALL DUP1 ISZERO PUSH2 0xB0F JUMPI PUSH2 0x3F7E SWAP2 PUSH0 SWAP2 PUSH2 0x4058 JUMPI JUMPDEST POP PUSH2 0x3F79 DUP2 PUSH2 0x55DD JUMP JUMPDEST PUSH2 0x2B8A JUMP JUMPDEST SWAP8 PUSH2 0x3F88 DUP3 PUSH2 0x5674 JUMP JUMPDEST PUSH2 0x3F93 DUP10 DUP6 DUP5 PUSH2 0x5784 JUMP JUMPDEST DUP1 DUP10 LT PUSH2 0x4028 JUMPI POP SWAP3 DUP6 SWAP3 PUSH2 0x3FFF PUSH32 0xA26A52D8D53702BBA7F137907B8E1F99FF87F6D450144270CA25E72481CCA871 SWAP4 PUSH2 0x3FF0 PUSH1 0x20 PUSH2 0x3FE6 PUSH1 0x1 SWAP11 SWAP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP9 ADD MLOAD MLOAD PUSH2 0x2A56 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP5 AND SWAP8 DUP5 PUSH2 0x2BC4 JUMP JUMPDEST SUB SWAP1 LOG4 PUSH32 0xCAD8C9D32507393B6508CA4A888B81979919B477510585BDE8488F153072D6F3 PUSH0 DUP1 LOG2 JUMP JUMPDEST PUSH32 0x8D261D5D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 DUP10 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x4071 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xB08 JUMPI PUSH2 0xAF9 DUP2 DUP4 PUSH2 0x7BE JUMP JUMPDEST PUSH0 PUSH2 0x3F6F JUMP JUMPDEST SWAP3 PUSH2 0x40CA PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 SWAP6 SWAP5 SWAP7 PUSH2 0x40E1 PUSH1 0x40 MLOAD SWAP9 DUP10 SWAP8 DUP9 SWAP7 DUP8 SWAP5 PUSH32 0x38BE241D00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE PUSH1 0x60 PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x64 DUP7 ADD SWAP1 PUSH2 0x490 JUMP JUMPDEST SWAP2 PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x3 NOT DUP5 DUP4 SUB ADD PUSH1 0x44 DUP6 ADD MSTORE PUSH2 0x2440 JUMP JUMPDEST SUB SWAP4 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xB0F JUMPI PUSH0 SWAP2 PUSH2 0x4124 JUMPI JUMPDEST POP ISZERO PUSH2 0x40FC JUMPI JUMP JUMPDEST PUSH32 0xF23DBC600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x413D SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3D4B JUMPI PUSH2 0x3D3D DUP2 DUP4 PUSH2 0x7BE JUMP JUMPDEST PUSH0 PUSH2 0x40F4 JUMP JUMPDEST SWAP1 PUSH2 0x414C PUSH2 0x2BEF JUMP JUMPDEST POP PUSH1 0xFF PUSH1 0x1 DUP1 DUP5 DUP4 PUSH2 0x415E PUSH1 0xC PUSH2 0x326D JUMP JUMPDEST PUSH2 0x4167 SWAP1 PUSH2 0x326D JUMP JUMPDEST AND SHR AND DUP2 DUP6 DUP5 PUSH2 0x4177 PUSH1 0xC PUSH2 0x326D JUMP JUMPDEST PUSH2 0x4180 SWAP1 PUSH2 0x326D JUMP JUMPDEST PUSH2 0x4189 SWAP1 PUSH2 0x326D JUMP JUMPDEST AND SHR AND SWAP1 DUP3 DUP7 DUP6 PUSH2 0x419A PUSH1 0xC PUSH2 0x326D JUMP JUMPDEST PUSH2 0x41A3 SWAP1 PUSH2 0x326D JUMP JUMPDEST PUSH2 0x41AC SWAP1 PUSH2 0x326D JUMP JUMPDEST PUSH2 0x41B5 SWAP1 PUSH2 0x326D JUMP JUMPDEST AND SHR AND SWAP3 DUP1 DUP8 DUP7 PUSH2 0x41C6 PUSH1 0xC PUSH2 0x326D JUMP JUMPDEST PUSH2 0x41CF SWAP1 PUSH2 0x326D JUMP JUMPDEST PUSH2 0x41D8 SWAP1 PUSH2 0x326D JUMP JUMPDEST PUSH2 0x41E1 SWAP1 PUSH2 0x326D JUMP JUMPDEST PUSH2 0x41EA SWAP1 PUSH2 0x326D JUMP JUMPDEST AND SHR AND SWAP5 DUP2 DUP9 DUP2 DUP2 DUP5 PUSH1 0xC AND SHR AND SWAP3 PUSH1 0xC PUSH2 0x4204 SWAP1 PUSH2 0x326D JUMP JUMPDEST AND SHR AND SWAP2 PUSH2 0x4210 PUSH2 0x808 JUMP JUMPDEST PUSH1 0x9 DUP11 SWAP1 SHR DUP3 AND ISZERO ISZERO DUP2 MSTORE SWAP9 PUSH1 0x8 DUP2 SWAP1 SHR DUP3 AND ISZERO ISZERO PUSH1 0x20 DUP12 ADD MSTORE PUSH1 0xA DUP2 SWAP1 SHR DUP3 AND ISZERO ISZERO PUSH1 0x40 DUP12 ADD MSTORE PUSH1 0xB SHR AND ISZERO ISZERO PUSH1 0x60 DUP10 ADD MSTORE ISZERO ISZERO PUSH1 0x80 DUP9 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP8 ADD MSTORE ISZERO ISZERO PUSH1 0xC0 DUP7 ADD MSTORE ISZERO ISZERO PUSH1 0xE0 DUP6 ADD MSTORE ISZERO ISZERO PUSH2 0x100 DUP5 ADD MSTORE ISZERO ISZERO PUSH2 0x120 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x140 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP3 SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP2 AND SWAP4 DUP5 ISZERO PUSH2 0x437C JUMPI DUP1 DUP4 AND SWAP6 DUP7 ISZERO PUSH2 0x4347 JUMPI DUP5 PUSH2 0x42C5 DUP6 PUSH2 0x3785 DUP7 PUSH2 0x3785 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x10 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x30C JUMPI PUSH1 0x40 MLOAD PUSH32 0x5687F2B800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH32 0xA0175360A15BCA328BAF7EA85C7B784D58B222A50D0CE760B10DBA336D226A61 SWAP2 PUSH2 0x3ACF SWAP2 PUSH0 DUP2 DUP1 PUSH1 0x64 DUP2 ADD PUSH2 0x3AB3 JUMP JUMPDEST PUSH32 0x94280D6200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xE602DF0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0xFFFFFFFF PUSH32 0x0 AND TIMESTAMP GT ISZERO DUP1 PUSH2 0x440F JUMPI JUMPDEST PUSH2 0x43E7 JUMPI JUMP JUMPDEST PUSH32 0xDA9F8B3400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x7 SLOAD DUP2 SHR AND PUSH2 0x43E1 JUMP JUMPDEST SWAP1 DUP1 MLOAD SWAP1 PUSH2 0x442A DUP3 PUSH2 0x3EA JUMP JUMPDEST PUSH2 0x4433 DUP3 PUSH2 0x3EA JUMP JUMPDEST DUP3 SLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 SWAP3 SWAP1 SWAP3 ADD MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000 SWAP1 SWAP2 AND PUSH1 0xFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR PUSH1 0x8 SWAP2 SWAP1 SWAP2 SHL PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND OR SWAP1 ISZERO ISZERO PUSH1 0xA8 SHL PUSH22 0xFF000000000000000000000000000000000000000000 AND OR SWAP1 SSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x30C JUMPI MLOAD PUSH1 0xFF DUP2 AND DUP2 SUB PUSH2 0x30C JUMPI SWAP1 JUMP JUMPDEST DUP1 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x750 JUMPI PUSH1 0x1 DUP2 ADD DUP1 DUP4 SSTORE DUP2 LT ISZERO PUSH2 0x2AC8 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE JUMP JUMPDEST DUP2 MLOAD DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND OR DUP3 SSTORE PUSH2 0x31E SWAP3 PUSH1 0x2 SWAP2 SWAP1 PUSH1 0x40 SWAP1 PUSH2 0x45A5 DUP4 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x1 DUP8 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE JUMP JUMPDEST ADD MLOAD AND SWAP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x30C JUMPI PUSH1 0x20 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 JUMP JUMPDEST SWAP5 SWAP4 SWAP2 PUSH2 0x31E SWAP4 PUSH1 0x60 SWAP3 PUSH2 0x4625 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP10 MSTORE AND PUSH1 0x20 DUP9 ADD MSTORE PUSH1 0xE0 PUSH1 0x40 DUP9 ADD MSTORE PUSH1 0xE0 DUP8 ADD SWAP1 PUSH2 0x2C52 JUMP JUMPDEST SWAP5 ADD SWAP1 PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH2 0x140 SWAP2 SUB SLT PUSH2 0x30C JUMPI PUSH2 0x4667 PUSH2 0x7FB JUMP JUMPDEST SWAP1 PUSH2 0x4671 DUP2 PUSH2 0x32CB JUMP JUMPDEST DUP3 MSTORE PUSH2 0x467F PUSH1 0x20 DUP3 ADD PUSH2 0x32CB JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x4690 PUSH1 0x40 DUP3 ADD PUSH2 0x32CB JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x46A1 PUSH1 0x60 DUP3 ADD PUSH2 0x32CB JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x46B2 PUSH1 0x80 DUP3 ADD PUSH2 0x32CB JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x46C3 PUSH1 0xA0 DUP3 ADD PUSH2 0x32CB JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0x46D4 PUSH1 0xC0 DUP3 ADD PUSH2 0x32CB JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x46E5 PUSH1 0xE0 DUP3 ADD PUSH2 0x32CB JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 PUSH2 0x46F8 DUP2 DUP4 ADD PUSH2 0x32CB JUMP JUMPDEST SWAP1 DUP4 ADD MSTORE PUSH2 0x470A PUSH2 0x120 DUP1 SWAP3 ADD PUSH2 0x32CB JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP2 SWAP7 SWAP6 SWAP4 SWAP5 PUSH2 0x4773 PUSH2 0x31E SWAP7 PUSH4 0xFFFFFFFF PUSH2 0x220 SWAP7 PUSH2 0x473B PUSH2 0x4801 SWAP7 PUSH2 0x2A0 DUP1 DUP11 MSTORE DUP10 ADD SWAP1 PUSH2 0x2C52 JUMP JUMPDEST SWAP12 PUSH1 0x20 DUP9 ADD MSTORE AND PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x60 DUP6 ADD SWAP1 PUSH1 0x40 SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD SWAP1 DUP1 MLOAD ISZERO ISZERO DUP3 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0x40 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0x60 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0x80 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0xA0 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0xC0 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0xE0 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 SWAP1 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 ADD MSTORE JUMP JUMPDEST ADD SWAP1 PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SWAP1 PUSH2 0x4853 PUSH2 0x484C DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x1 AND SWAP1 JUMP JUMPDEST PUSH2 0x52E1 JUMPI DUP1 MLOAD MLOAD PUSH1 0x2 DUP2 LT PUSH2 0x52B9 JUMPI PUSH1 0x8 DUP2 GT PUSH2 0x5291 JUMPI SWAP3 SWAP2 SWAP1 PUSH2 0x4876 DUP5 PUSH2 0x2A56 JUMP JUMPDEST PUSH0 SWAP5 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x4F84 JUMPI POP POP PUSH2 0x4946 SWAP3 SWAP4 SWAP5 POP PUSH1 0x80 DUP3 ADD SWAP2 PUSH2 0x48B4 DUP4 MLOAD PUSH2 0x48AF DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0x4525 JUMP JUMPDEST PUSH2 0x48C9 PUSH2 0x3639 PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 SWAP2 PUSH2 0x48E2 DUP3 DUP8 MLOAD ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 MLOAD AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x48F0 PUSH1 0x60 DUP7 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH32 0x77FF76E700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP13 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP4 AND PUSH1 0x24 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x44 DUP4 ADD MSTORE SWAP1 SWAP7 DUP8 SWAP2 SWAP1 DUP3 SWAP1 PUSH0 SWAP1 DUP3 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0xB0F JUMPI PUSH0 SWAP6 PUSH0 SWAP2 PUSH2 0x4F51 JUMPI JUMPDEST POP PUSH2 0x4A72 PUSH1 0xC0 DUP5 ADD SWAP2 PUSH2 0x4A6D PUSH2 0x4A3C DUP5 MLOAD SWAP8 PUSH2 0x4A25 PUSH2 0x4A1F PUSH2 0x4981 DUP12 MLOAD ISZERO ISZERO PUSH1 0x4 SHL PUSH1 0x1 OR SWAP1 JUMP JUMPDEST SWAP11 PUSH1 0x60 PUSH2 0x49EF PUSH2 0x49BE PUSH1 0x20 SWAP15 DUP16 DUP6 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF SWAP1 PUSH1 0x5 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST DUP13 DUP5 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF SWAP1 PUSH1 0x6 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST SWAP2 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F SWAP1 PUSH1 0x7 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x58D2 JUMP JUMPDEST SWAP1 PUSH1 0x5A SWAP2 PUSH5 0xFFFFFFFFFF SWAP1 DUP2 AND DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP9 PUSH2 0x4A68 DUP7 DUP9 ADD SWAP11 PUSH2 0x4A52 DUP13 MLOAD PUSH4 0xFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x82 SWAP2 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST PUSH2 0x5952 JUMP JUMPDEST PUSH2 0x5972 JUMP JUMPDEST SWAP4 PUSH1 0xA0 DUP5 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP10 DUP8 PUSH2 0x4A94 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST AND DUP1 PUSH2 0x4B95 JUMPI JUMPDEST POP SWAP1 PUSH2 0x4AB9 DUP2 SWAP4 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4AE9 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x4B21 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE JUMP JUMPDEST DUP6 ADD SWAP5 DUP6 MLOAD PUSH2 0x4B30 SWAP1 DUP12 PUSH2 0x5996 JUMP JUMPDEST MLOAD SWAP5 MLOAD SWAP8 MLOAD PUSH4 0xFFFFFFFF AND SWAP7 MLOAD SWAP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4B5A SWAP2 PUSH2 0x4143 JUMP JUMPDEST SWAP2 MLOAD SWAP3 MLOAD SWAP6 DUP7 SWAP6 CALLER SWAP10 AND SWAP8 PUSH2 0x4B6F SWAP6 DUP8 PUSH2 0x4711 JUMP JUMPDEST SUB PUSH32 0xBC1561EEAB9F40962E2FB827A7FF9C7CDB47A9D7C84CAEEFA4ED90E043842DAD SWAP2 LOG3 JUMP JUMPDEST PUSH2 0x4BD7 SWAP2 DUP5 SWAP2 DUP10 MLOAD PUSH0 DUP10 MLOAD SWAP4 DUP12 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xB89F18200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE CALLER PUSH1 0x4 DUP7 ADD PUSH2 0x45F3 JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xB0F JUMPI PUSH0 SWAP2 PUSH2 0x4F34 JUMPI JUMPDEST POP ISZERO PUSH2 0x4F1F JUMPI PUSH2 0x4C06 PUSH2 0x3639 PUSH2 0x3639 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 DUP6 MLOAD DUP1 SWAP3 PUSH32 0xD77153A700000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 PUSH1 0x4 PUSH2 0x140 SWAP6 DUP7 SWAP4 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xB0F JUMPI PUSH0 SWAP4 PUSH2 0x4EF0 JUMPI JUMPDEST POP POP DUP2 MLOAD ISZERO ISZERO DUP1 PUSH2 0x4ED6 JUMPI JUMPDEST PUSH2 0x4E83 JUMPI SWAP1 PUSH2 0x4E51 PUSH2 0x120 PUSH2 0x4CBD PUSH2 0x4E1E PUSH2 0x4DEC PUSH2 0x4DBA PUSH2 0x4D88 PUSH2 0x4D56 PUSH2 0x4D24 DUP15 PUSH2 0x4CF9 PUSH2 0x4CF0 DUP13 DUP16 PUSH2 0x4E7C SWAP16 SWAP1 PUSH2 0x4CBD PUSH2 0x4CC5 SWAP3 PUSH2 0x4C92 DUP6 MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFF SWAP1 PUSH1 0x9 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST SWAP3 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFF SWAP1 PUSH1 0x8 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST SWAP2 DUP13 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFF SWAP1 PUSH1 0xA SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP11 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FF SWAP1 PUSH1 0xB SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP10 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF SWAP1 PUSH1 0xC SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0xA0 DUP9 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFF SWAP1 PUSH1 0xD SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0xC0 DUP8 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFF SWAP1 PUSH1 0xE SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0xE0 DUP7 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFF SWAP1 PUSH1 0xF SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH2 0x100 DUP6 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFF SWAP1 PUSH1 0x10 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF SWAP1 PUSH1 0x11 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST DUP10 PUSH0 PUSH2 0x4A9B JUMP JUMPDEST PUSH2 0x181B DUP12 PUSH2 0x4E98 DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH32 0xFA93D81400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE CALLER PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST POP PUSH2 0x4EEA PUSH2 0x4EE5 DUP7 MLOAD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x4C53 JUMP JUMPDEST PUSH2 0x4F10 SWAP3 SWAP4 POP DUP1 RETURNDATASIZE LT PUSH2 0x4F18 JUMPI JUMPDEST PUSH2 0x4F08 DUP2 DUP4 PUSH2 0x7BE JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x4653 JUMP JUMPDEST SWAP1 PUSH0 DUP1 PUSH2 0x4C47 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x4EFE JUMP JUMPDEST PUSH2 0x181B DUP11 PUSH2 0x4E98 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x4F4B SWAP2 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x3D4B JUMPI PUSH2 0x3D3D DUP2 DUP4 PUSH2 0x7BE JUMP JUMPDEST PUSH0 PUSH2 0x4BE9 JUMP JUMPDEST SWAP1 POP DUP2 PUSH2 0x4F74 SWAP3 SWAP7 POP RETURNDATASIZE DUP8 GT PUSH2 0x4F7D JUMPI JUMPDEST PUSH2 0x4F6C DUP2 DUP4 PUSH2 0x7BE JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x45DD JUMP JUMPDEST SWAP5 SWAP1 SWAP5 PUSH0 PUSH2 0x4959 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x4F62 JUMP JUMPDEST PUSH2 0x4F8F DUP2 DUP6 MLOAD PUSH2 0x2AB4 JUMP JUMPDEST MLOAD SWAP7 PUSH2 0x4FA2 DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 DUP3 ISZERO DUP1 ISZERO PUSH2 0x5286 JUMPI JUMPDEST PUSH2 0x525E JUMPI AND DUP1 DUP3 LT PUSH2 0x5236 JUMPI DUP2 EQ PUSH2 0x5201 JUMPI PUSH1 0x40 SWAP1 DUP2 DUP11 ADD SWAP10 DUP11 MLOAD PUSH2 0x4FE3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO SWAP1 PUSH1 0x20 SWAP12 DUP13 DUP3 ADD SWAP1 DUP14 DUP3 MLOAD SWAP2 PUSH2 0x5002 DUP4 PUSH2 0x3EA JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP4 PUSH1 0x60 ADD SWAP4 DUP5 MLOAD PUSH2 0x501C SWAP1 ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x5025 PUSH2 0x829 JUMP JUMPDEST SWAP4 PUSH2 0x5030 SWAP1 DUP6 PUSH2 0x2ACD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP4 ADD MSTORE ISZERO ISZERO DUP2 DUP8 ADD MSTORE DUP7 PUSH2 0x5061 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x507C SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x5086 SWAP2 PUSH2 0x441D JUMP JUMPDEST DUP1 MLOAD PUSH2 0x5091 DUP2 PUSH2 0x3EA JUMP JUMPDEST PUSH2 0x509A DUP2 PUSH2 0x3EA JUMP JUMPDEST PUSH2 0x51B2 JUMPI POP DUP2 ISZERO SWAP2 PUSH2 0x51A7 JUMPI JUMPDEST POP PUSH2 0x369B JUMPI DUP10 SWAP2 JUMPDEST MLOAD SWAP10 DUP11 DUP1 SWAP3 PUSH32 0x313CE56700000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 SWAP13 DUP14 SWAP2 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xB0F JUMPI PUSH0 SWAP3 PUSH2 0x517A JUMPI JUMPDEST POP POP PUSH1 0x12 SWAP1 PUSH1 0xFF SWAP2 DUP1 DUP4 DUP4 AND GT PUSH0 EQ PUSH2 0x5126 JUMPI DUP11 PUSH32 0x686D360700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x1 SWAP5 SWAP6 SWAP7 SWAP8 SWAP9 SWAP10 SWAP11 POP SWAP1 PUSH2 0x514A SWAP3 SWAP2 SUB AND PUSH2 0x5142 DUP6 DUP9 PUSH2 0x2AB4 JUMP JUMPDEST SWAP1 PUSH1 0xFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x516E DUP2 PUSH2 0x5169 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0x44C9 JUMP JUMPDEST SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 ADD PUSH2 0x487A JUMP JUMPDEST PUSH2 0x5199 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x51A0 JUMPI JUMPDEST PUSH2 0x5191 DUP2 DUP4 PUSH2 0x7BE JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x44B0 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x50EC JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x5187 JUMP JUMPDEST MLOAD ISZERO ISZERO SWAP1 POP PUSH0 PUSH2 0x50A7 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP MLOAD PUSH2 0x51C0 DUP2 PUSH2 0x3EA JUMP JUMPDEST PUSH2 0x51C9 DUP2 PUSH2 0x3EA JUMP JUMPDEST SUB PUSH2 0x51D9 JUMPI PUSH2 0x369B JUMPI DUP10 SWAP2 PUSH2 0x50AF JUMP JUMPDEST PUSH32 0xA1E9DD9D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x4F4B634E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x6E8F194700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0xC1AB6DC100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP DUP2 DUP10 AND DUP4 EQ PUSH2 0x4FB8 JUMP JUMPDEST PUSH32 0x707BDF5800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x5ED4BA8F00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0xDB771C8000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH3 0xFFFFFF SWAP1 PUSH1 0x2A SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x282B JUMPI SWAP1 JUMP JUMPDEST PUSH3 0xFFFFFF SWAP1 PUSH1 0x42 SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x282B JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP2 DUP3 DUP2 SLOAD SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP3 PUSH1 0x20 DUP4 ADD SWAP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP4 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x5390 JUMPI POP POP POP PUSH2 0x31E SWAP3 POP SUB DUP4 PUSH2 0x7BE JUMP JUMPDEST DUP6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 MSTORE PUSH1 0x1 SWAP6 DUP7 ADD SWAP6 DUP9 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x537A JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x18 SHR PUSH2 0x344D JUMPI PUSH1 0x2A SHL SWAP1 PUSH3 0xFFFFFF PUSH1 0x2A SHL NOT AND OR SWAP1 JUMP JUMPDEST PUSH32 0xB4120F1400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x100 DUP1 DUP5 LT ISZERO PUSH2 0x53CD JUMPI DUP4 DUP2 SUB SWAP1 DUP2 GT PUSH2 0x282B JUMPI DUP1 PUSH1 0xFF LT PUSH0 EQ PUSH2 0x5437 JUMPI POP PUSH1 0xFF JUMPDEST PUSH1 0x18 GT PUSH2 0x53CD JUMPI DUP1 PUSH1 0x18 SHR PUSH2 0x344D JUMPI PUSH3 0xFFFFFF SWAP1 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST PUSH2 0x5419 JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x5466 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x5575 JUMPI PUSH32 0x0 SWAP2 PUSH2 0x54D6 DUP2 DUP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP1 JUMP JUMPDEST DUP3 DUP2 ADD SWAP3 DUP4 SLT PUSH0 DUP3 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x282B JUMPI DUP3 PUSH2 0x552B JUMPI POP PUSH32 0x0 SWAP3 DUP4 TLOAD PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x282B JUMPI PUSH2 0x31E SWAP5 TSTORE PUSH2 0x5B9E JUMP JUMPDEST ISZERO PUSH2 0x553A JUMPI JUMPDEST PUSH2 0x31E SWAP3 PUSH2 0x5B9E JUMP JUMPDEST PUSH32 0x0 SWAP3 DUP4 TLOAD PUSH1 0x1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x282B JUMPI PUSH2 0x31E SWAP5 TSTORE SWAP3 POP PUSH2 0x5531 JUMP JUMPDEST POP POP JUMP JUMPDEST SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 GT SWAP1 DUP2 ISZERO PUSH2 0x55D3 JUMPI JUMPDEST POP PUSH2 0x55AB JUMPI PUSH1 0x80 SHL SWAP1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x282B JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x89560CA100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP DUP2 GT PUSH0 PUSH2 0x5596 JUMP JUMPDEST PUSH3 0xF4240 DUP2 LT PUSH2 0x55EA JUMPI POP JUMP JUMPDEST PUSH32 0xD38D20FC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 PUSH1 0x80 PUSH8 0xDE0B6B3A7640000 PUSH2 0x5659 PUSH2 0x2AD6 SWAP5 DUP1 PUSH2 0x5638 DUP7 PUSH1 0x60 DUP11 ADD MLOAD PUSH2 0x2AB4 JUMP JUMPDEST MSTORE PUSH2 0x3C45 PUSH2 0x564A DUP7 PUSH1 0xC0 DUP11 ADD MLOAD PUSH2 0x2AB4 JUMP JUMPDEST MLOAD PUSH2 0x3C3E DUP8 PUSH1 0xA0 DUP12 ADD MLOAD PUSH2 0x2AB4 JUMP JUMPDEST DIV SWAP4 ADD MLOAD PUSH2 0x2AB4 JUMP JUMPDEST PUSH2 0x566E PUSH2 0x31E SWAP3 PUSH2 0x543C JUMP JUMPDEST SWAP1 PUSH2 0x5491 JUMP JUMPDEST PUSH2 0x568F DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 SLOAD PUSH3 0xF4240 SWAP1 DUP2 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x282B JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SSTORE PUSH2 0x56C6 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH0 DUP1 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 DUP2 SLOAD ADD SWAP1 SSTORE AND PUSH0 DUP1 DUP3 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F PUSH1 0x40 MLOAD DUP1 PUSH2 0x5710 DUP2 SWAP1 PUSH3 0xF4240 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB SWAP1 LOG4 DUP1 EXTCODESIZE ISZERO PUSH2 0x30C JUMPI PUSH0 PUSH1 0x40 MLOAD DUP1 SWAP3 PUSH32 0x23DE665100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP4 DUP2 PUSH2 0x5766 PUSH1 0x4 DUP3 ADD SWAP1 PUSH3 0xF4240 PUSH1 0x40 PUSH1 0x60 DUP5 ADD SWAP4 PUSH0 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0xB0F JUMPI PUSH2 0x5777 JUMPI POP JUMP JUMPDEST DUP1 PUSH2 0x237B PUSH2 0x31E SWAP3 PUSH2 0x755 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP4 DUP5 ISZERO PUSH2 0x589D JUMPI PUSH2 0x57BC DUP4 PUSH2 0x57B6 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x393E JUMP JUMPDEST PUSH2 0x57DB DUP6 PUSH2 0x3785 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP5 DUP2 SLOAD ADD SWAP1 SSTORE PUSH2 0x57EA DUP2 PUSH2 0x55DD JUMP JUMPDEST PUSH2 0x5805 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP3 PUSH0 DUP5 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F PUSH1 0x40 MLOAD DUP1 PUSH2 0x583E DUP8 DUP3 SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB SWAP1 LOG4 DUP3 EXTCODESIZE ISZERO PUSH2 0x30C JUMPI PUSH1 0x40 MLOAD PUSH32 0x23DE665100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 DUP3 SWAP1 DUP2 DUP4 DUP2 PUSH1 0x64 DUP2 ADD PUSH2 0x5766 JUMP JUMPDEST PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 SWAP2 SWAP1 DUP3 JUMPDEST DUP2 MLOAD DUP5 LT ISZERO PUSH2 0x5946 JUMPI PUSH2 0x58EA DUP5 DUP4 PUSH2 0x2AB4 JUMP JUMPDEST MLOAD PUSH1 0xFF SWAP2 PUSH2 0x58F7 DUP7 PUSH2 0x327F JUMP JUMPDEST SWAP2 PUSH2 0x100 DUP1 DUP5 LT ISZERO PUSH2 0x53CD JUMPI DUP4 DUP2 SUB SWAP1 DUP2 GT PUSH2 0x282B JUMPI DUP1 DUP6 LT ISZERO PUSH2 0x5941 JUMPI POP DUP4 JUMPDEST PUSH1 0x5 SWAP1 DUP2 GT PUSH2 0x53CD JUMPI DUP2 PUSH1 0x7 SWAP2 SHR AND PUSH2 0x344D JUMPI PUSH1 0x1 SWAP4 PUSH1 0x1F SWAP2 AND DUP4 SHL SWAP3 SHL NOT AND OR SWAP4 ADD SWAP3 PUSH2 0x58D7 JUMP JUMPDEST PUSH2 0x5918 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND SWAP3 POP POP JUMP JUMPDEST PUSH8 0xDE0B5CAD2BEF000 DUP3 GT PUSH2 0x28DA JUMPI PUSH5 0x174876E800 PUSH2 0x350 SWAP3 DIV SWAP1 PUSH2 0x53B3 JUMP JUMPDEST SWAP1 PUSH8 0xDE0B5CAD2BEF000 DUP2 GT PUSH2 0x28DA JUMPI PUSH2 0x350 SWAP2 PUSH5 0x174876E800 PUSH1 0x42 SWAP3 DIV SWAP1 PUSH2 0x53F5 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP2 PUSH1 0x40 MLOAD PUSH32 0xCE20ECE700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 PUSH1 0x4 DUP2 DUP9 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xB0F JUMPI PUSH0 SWAP2 PUSH2 0x5B13 JUMPI JUMPDEST POP DUP4 LT PUSH2 0x5AEB JUMPI PUSH1 0x40 MLOAD PUSH32 0x654CF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP2 PUSH1 0x4 DUP2 DUP9 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xB0F JUMPI PUSH0 SWAP3 PUSH2 0x5ACE JUMPI JUMPDEST POP POP DUP3 GT PUSH2 0x5AA6 JUMPI DUP2 DUP2 PUSH2 0x5A90 PUSH2 0x5A79 PUSH32 0x89D41522342FABAC1471CA6073A5623E5CAF367B03CA6E9A001478D0CF8BE4A1 SWAP6 PUSH2 0x5A73 PUSH2 0x5AA1 SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x3402 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 JUMP JUMPDEST PUSH32 0x7F47834B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x5AE4 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0xB08 JUMPI PUSH2 0xAF9 DUP2 DUP4 PUSH2 0x7BE JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x5A24 JUMP JUMPDEST PUSH32 0xBFB2068800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x5B2A SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0xB08 JUMPI PUSH2 0xAF9 DUP2 DUP4 PUSH2 0x7BE JUMP JUMPDEST PUSH0 PUSH2 0x59E1 JUMP JUMPDEST SWAP1 SWAP4 SWAP3 PUSH0 SWAP5 PUSH2 0x5B43 DUP5 PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x2AB4 JUMP JUMPDEST MLOAD DUP2 DUP2 GT PUSH2 0x5B53 JUMPI JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x5B93 SWAP6 SWAP7 POP PUSH2 0x5B8D SWAP4 SWAP3 PUSH2 0x5B86 SWAP3 PUSH2 0x5B6C SWAP3 SUB PUSH2 0x383F JUMP JUMPDEST SWAP4 PUSH1 0xA0 PUSH2 0x5B7D DUP3 PUSH1 0xC0 DUP7 ADD MLOAD PUSH2 0x2AB4 JUMP JUMPDEST MLOAD SWAP4 ADD MLOAD PUSH2 0x2AB4 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x3295 JUMP JUMPDEST SWAP1 PUSH2 0x33DE JUMP JUMPDEST SWAP1 PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x5B4C JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TSTORE JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP12 PUSH14 0x70B93B07F2F918EB2EE3B475895 0x29 0x28 CHAINID CALL PUSH6 0xF7B9C88BC297 0x29 EQ 0xAE 0xCA 0xAC PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"701:1544:93:-:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;;;;3400:40:73;701:1544:93;;;;;:::i;:::-;;;;-1:-1:-1;;;701:1544:93;;;;3400:40:73;:::i;:::-;;;3501:47;701:1544:93;;;;;:::i;:::-;;;;-1:-1:-1;;;701:1544:93;;;;3501:47:73;:::i;:::-;;;3601:41;701:1544:93;;;;;:::i;:::-;;;;-1:-1:-1;;;701:1544:93;;;;3601:41:73;:::i;:::-;;;;;;3703:48;701:1544:93;;;;;:::i;:::-;;;;-1:-1:-1;;;701:1544:93;;;;3703:48:73;:::i;:::-;;;;;;3802:39;701:1544:93;;;;;:::i;:::-;;;;-1:-1:-1;;;701:1544:93;;;;3802:39:73;:::i;:::-;;;;;701:1544:93;;-1:-1:-1;;;4174:18:71;;3802:39:73;;4174:18:71;701:1544:93;4174:18:71;701:1544:93;4174:18:71;;;;;;;;-1:-1:-1;4174:18:71;;;-1:-1:-1;701:1544:93;;;;;;4174:31:71;4170:96;;701:1544:93;;-1:-1:-1;;;4303:34:71;;701:1544:93;4303:34:71;701:1544:93;4174:18:71;701:1544:93;4303:34:71;;;;;;;;-1:-1:-1;4303:34:71;;;-1:-1:-1;;4276:61:71;;;;701:1544:93;;-1:-1:-1;;;4376:36:71;;701:1544:93;4376:36:71;701:1544:93;4174:18:71;701:1544:93;;4376:36:71;;;;;;;-1:-1:-1;4376:36:71;;;-1:-1:-1;4347:65:71;;4174:18;4347:65;;;;;701:1544:93;;;;;;;;;4450:35:71;;;;;;;;;-1:-1:-1;4450:35:71;;;-1:-1:-1;4422:63:71;;;;;;4496:18;;;;4524:24;;;;701:1544:93;;;;;;;;;;;;;;;;;;3400:40:73;701:1544:93;;;;;;;;;;;;;;;3501:47:73;701:1544:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4450:35:71;;;;;;;-1:-1:-1;4450:35:71;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;701:1544:93;;;-1:-1:-1;701:1544:93;;;;;4376:36:71;4174:18;4376:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;4303:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;701:1544:93;;;-1:-1:-1;701:1544:93;;;;;4170:96:71;4228:27;;;-1:-1:-1;4228:27:71;4174:18;-1:-1:-1;4228:27:71;4174:18;;;;;;;;;;;;;;;;;:::i;:::-;;;701:1544:93;;;;;;;:::i;:::-;4174:18:71;;;;701:1544:93;-1:-1:-1;701:1544:93;;4174:18:71;;;;;;701:1544:93;;;-1:-1:-1;701:1544:93;;;;;;;;;;;;-1:-1:-1;;;;;701:1544:93;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;701:1544:93;;;;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;701:1544:93;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;9892:177:73:-;701:1544:93;;;;;;:::i;:::-;;;;1461:67:47;701:1544:93;;;;-1:-1:-1;;;701:1544:93;;;;;1461:67:47;;;;;;701:1544:93;;;;;;;;;;;;;;-1:-1:-1;;;701:1544:93;;;;;;;;;;;;;;;-1:-1:-1;701:1544:93;;;;1461:67:47;;;;;;;;;:::i;:::-;701:1544:93;1451:78:47;;-1:-1:-1;;701:1544:93;;;;;;;;;1432:103:47;701:1544:93;1432:103:47;;701:1544:93;;;;1432:103:47;;;;;:::i;:::-;701:1544:93;;1405:144:47;;-1:-1:-1;;1405:170:47;;9892:177:73:o;701:1544:93:-;;;;-1:-1:-1;701:1544:93;;;;;-1:-1:-1;701:1544:93"},"deployedBytecode":{"functionDebugData":{"abi_decode":{"entryPoint":1448,"id":null,"parameterSlots":2,"returnSlots":0},"abi_decode_address":{"entryPoint":800,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_address_59013":{"entryPoint":784,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_addresst_addresst_array_contract_IERC20_dynt_array_uint256_dynt_uint256t_bytes":{"entryPoint":4514,"id":null,"parameterSlots":1,"returnSlots":6},"abi_decode_addresst_array_struct_TokenConfig_dynt_uint256t_uint32t_boolt_struct_PoolRoleAccounts_calldatat_addresst_struct_LiquidityManagement_calldata":{"entryPoint":8527,"id":null,"parameterSlots":1,"returnSlots":8},"abi_decode_addresst_contract_IERC20":{"entryPoint":811,"id":null,"parameterSlots":1,"returnSlots":2},"abi_decode_array_uint256_dyn":{"entryPoint":2147,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_available_length_bytes":{"entryPoint":2271,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_bool":{"entryPoint":8400,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":15463,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_boolt_uint256_fromMemory":{"entryPoint":13014,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bytes":{"entryPoint":2325,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bytes_calldata":{"entryPoint":3012,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bytes_calldata_35422":{"entryPoint":3058,"id":null,"parameterSlots":1,"returnSlots":2},"abi_decode_enum_SwapKind":{"entryPoint":2112,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_struct_HookFlags_fromMemory":{"entryPoint":18003,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_LiquidityManagement":{"entryPoint":11536,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_LiquidityManagement_calldata":{"entryPoint":8479,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_struct_PoolRoleAccounts_calldata":{"entryPoint":8432,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_t_bool_fromMemory":{"entryPoint":13003,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_uint256_fromMemory":{"entryPoint":10588,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint256t_uint256_fromMemory":{"entryPoint":17885,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_uint32":{"entryPoint":8413,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_uint8_fromMemory":{"entryPoint":17584,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encodeUpdatedPos_contract_IERC20":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encodeUpdatedPos_struct_TokenInfo":{"entryPoint":1057,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_address_address_address":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_address_address_array_struct_TokenConfig_dyn_struct_LiquidityManagement":{"entryPoint":17907,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_address_address_bool":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_address_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_address_address_uint256_35653":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_address_address_uint256_35697":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address_address_uint256_35703":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_array_contract_IERC20_dyn":{"entryPoint":7680,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_contract_IERC20_dyn_array_struct_TokenInfo_dyn_array_uint256_dyn_array_uint256_dyn":{"entryPoint":3200,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_array_contract_IERC20_dyn_memory_ptr":{"entryPoint":942,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_contract_IERC20_dyn_to_array_address_dyn":{"entryPoint":3140,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_struct_TokenConfig_dyn":{"entryPoint":11346,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_struct_TokenConfig_dyn_uint256_uint32_struct_PoolRoleAccounts_struct_HooksConfig_struct_LiquidityManagement":{"entryPoint":18193,"id":null,"parameterSlots":7,"returnSlots":1},"abi_encode_array_struct_TokenInfo_dyn":{"entryPoint":1108,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":2919,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn_array_uint256_dyn":{"entryPoint":4189,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_array_uint256_dyn_enum_Rounding":{"entryPoint":10603,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn_to_array_uint256_dyn":{"entryPoint":1168,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bool":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_bytes":{"entryPoint":9317,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bytes_memory_ptr":{"entryPoint":9280,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_contract_IERC20_uint256_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_struct_HooksConfig":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_struct_LiquidityManagement":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_struct_LiquidityManagement_calldata":{"entryPoint":11457,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_struct_PoolConfig":{"entryPoint":9626,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_PoolRoleAccounts":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_struct_PoolRoleAccounts_memory_ptr":{"entryPoint":9095,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_PoolSwapParams_address_uint256":{"entryPoint":13045,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_uint256":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_uint256_35696":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_uint256_array_uint256_dyn_array_uint256_dyn":{"entryPoint":11204,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_uint256_uint256":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_uint32":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_uint40":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"allocate_and_zero_memory_array_array_struct_TokenInfo_dyn":{"entryPoint":10760,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_and_zero_memory_array_array_uint256_dyn":{"entryPoint":10838,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_and_zero_memory_struct_struct_HooksConfig":{"entryPoint":11247,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_and_zero_memory_struct_struct_PoolData":{"entryPoint":10159,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_and_zero_memory_struct_struct_RecoveryLocals":{"entryPoint":11079,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_and_zero_memory_struct_struct_TokenInfo":{"entryPoint":10730,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory":{"entryPoint":2089,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_35416":{"entryPoint":2017,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_35605":{"entryPoint":2030,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_35606":{"entryPoint":2043,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_35665":{"entryPoint":2056,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_array_uint256_dyn":{"entryPoint":2123,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":2243,"id":null,"parameterSlots":1,"returnSlots":1},"array_push_from_contract_IERC20_to_array_contract_IERC20_dyn_storage_ptr":{"entryPoint":17609,"id":null,"parameterSlots":2,"returnSlots":0},"checked_add_uint256":{"entryPoint":14654,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_uint32":{"entryPoint":10259,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_uint8":{"entryPoint":12909,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_uint8_135159":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_uint8_135160":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_uint8_135161":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_uint8_135162":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_uint8_135163":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"checked_add_uint8_135164":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"checked_div_uint256":{"entryPoint":13223,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256":{"entryPoint":12949,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256_35644":{"entryPoint":12927,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_uint256":{"entryPoint":11191,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_uint256_35661":{"entryPoint":11146,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_bool":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_uint32":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"constant_AGGREGATE_YIELD_FEE_OFFSET":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"constant_DECIMAL_SCALING_FACTORS_OFFSET":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"constant_PAUSE_WINDOW_END_TIME_OFFSET":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"copy_array_from_storage_to_memory_array_contract_IERC20_dyn":{"entryPoint":10643,"id":null,"parameterSlots":1,"returnSlots":1},"copy_array_from_storage_to_memory_array_contract_IERC20_dyn_ptr":{"entryPoint":21340,"id":null,"parameterSlots":1,"returnSlots":1},"copy_struct_to_storage_from_struct_PoolRoleAccounts_to_struct_PoolRoleAccounts":{"entryPoint":17701,"id":null,"parameterSlots":2,"returnSlots":0},"copy_struct_to_storage_from_struct_TokenInfo_to_struct_TokenInfo":{"entryPoint":17437,"id":null,"parameterSlots":2,"returnSlots":0},"external_fun_allowance":{"entryPoint":5169,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_approve":{"entryPoint":8249,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_balanceOf":{"entryPoint":9987,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_computeDynamicSwapFeePercentage":{"entryPoint":2352,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_emitAuxiliaryEvent":{"entryPoint":7529,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getAddLiquidityCalledFlag":{"entryPoint":6675,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getAggregateSwapFeeAmount":{"entryPoint":5017,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getAggregateYieldFeeAmount":{"entryPoint":851,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getAuthorizer":{"entryPoint":6626,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getBptRate":{"entryPoint":2578,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getCurrentLiveBalances":{"entryPoint":2936,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getERC4626BufferAsset":{"entryPoint":1729,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getHooksConfig":{"entryPoint":7871,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getNonzeroDeltaCount":{"entryPoint":8181,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getPoolConfig":{"entryPoint":9833,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getPoolData":{"entryPoint":1219,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getPoolPausedState":{"entryPoint":1500,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getPoolRoleAccounts":{"entryPoint":9146,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getPoolTokenInfo":{"entryPoint":3326,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getPoolTokenRates":{"entryPoint":4226,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getPoolTokens":{"entryPoint":7697,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getProtocolFeeController":{"entryPoint":5123,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getReservesOf":{"entryPoint":5249,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getStaticSwapFeePercentage":{"entryPoint":6818,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getTokenDelta":{"entryPoint":5317,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getVaultAdmin":{"entryPoint":1662,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_initialize":{"entryPoint":6936,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_isERC4626BufferInitialized":{"entryPoint":3668,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_isPoolInRecoveryMode":{"entryPoint":7373,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_isPoolInitialized":{"entryPoint":2836,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_isPoolPaused":{"entryPoint":3740,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_isPoolRegistered":{"entryPoint":7457,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_isQueryDisabled":{"entryPoint":6894,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_isQueryDisabledPermanently":{"entryPoint":1458,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_isUnlocked":{"entryPoint":4947,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualInitializePoolReentrancy":{"entryPoint":4730,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualRegisterPoolReentrancy":{"entryPoint":8810,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manuallySetSwapFee":{"entryPoint":3807,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_mockExtensionHash":{"entryPoint":3105,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_quote":{"entryPoint":9334,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_quoteAndRevert":{"entryPoint":3884,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_reentrancyGuardEntered":{"entryPoint":8119,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_registerPool":{"entryPoint":9420,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_removeLiquidityRecovery":{"entryPoint":5415,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_totalSupply":{"entryPoint":8322,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_vault":{"entryPoint":10092,"id":null,"parameterSlots":0,"returnSlots":0},"extract_returndata":{"entryPoint":11032,"id":null,"parameterSlots":0,"returnSlots":1},"finalize_allocation":{"entryPoint":1982,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_35450":{"entryPoint":1844,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_35452":{"entryPoint":1877,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_35453":{"entryPoint":1897,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_35456":{"entryPoint":1925,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_35458":{"entryPoint":1953,"id":null,"parameterSlots":1,"returnSlots":0},"fun":{"entryPoint":11910,"id":28081,"parameterSlots":0,"returnSlots":0},"fun_28099":{"entryPoint":11950,"id":28099,"parameterSlots":0,"returnSlots":0},"fun_accountDelta":{"entryPoint":21649,"id":24964,"parameterSlots":2,"returnSlots":0},"fun_allowance":{"entryPoint":14141,"id":38954,"parameterSlots":3,"returnSlots":1},"fun_approve":{"entryPoint":17025,"id":39378,"parameterSlots":4,"returnSlots":0},"fun_bubbleUpRevert":{"entryPoint":13562,"id":6433,"parameterSlots":1,"returnSlots":0},"fun_burn":{"entryPoint":14734,"id":39222,"parameterSlots":3,"returnSlots":0},"fun_callAfterInitializeHook":{"entryPoint":16503,"id":29473,"parameterSlots":4,"returnSlots":0},"fun_callBeforeInitializeHook":{"entryPoint":15484,"id":29443,"parameterSlots":3,"returnSlots":0},"fun_computeProportionalAmountsOut":{"entryPoint":14320,"id":11473,"parameterSlots":3,"returnSlots":1},"fun_computeYieldFeesDue":{"entryPoint":23344,"id":31030,"parameterSlots":4,"returnSlots":1},"fun_copyToScaled18ApplyRateRoundDownArray":{"entryPoint":15318,"id":6684,"parameterSlots":3,"returnSlots":1},"fun_divDown":{"entryPoint":13278,"id":7990,"parameterSlots":2,"returnSlots":1},"fun_ensureInitializedPool":{"entryPoint":12189,"id":25183,"parameterSlots":1,"returnSlots":0},"fun_ensureInputLengthMatch":{"entryPoint":15271,"id":5926,"parameterSlots":2,"returnSlots":0},"fun_ensurePoolMinimumTotalSupply":{"entryPoint":21981,"id":39074,"parameterSlots":1,"returnSlots":0},"fun_ensureRegisteredPool":{"entryPoint":12114,"id":25147,"parameterSlots":1,"returnSlots":0},"fun_ensureUnlocked":{"entryPoint":14239,"id":24863,"parameterSlots":0,"returnSlots":0},"fun_ensureUnpaused":{"entryPoint":15193,"id":24998,"parameterSlots":1,"returnSlots":0},"fun_ensureVaultDelegateCall":{"entryPoint":12024,"id":25740,"parameterSlots":0,"returnSlots":0},"fun_ensureVaultNotPaused":{"entryPoint":17329,"id":24984,"parameterSlots":0,"returnSlots":0},"fun_getAggregateSwapFeePercentage":{"entryPoint":21270,"id":30122,"parameterSlots":1,"returnSlots":1},"fun_getAggregateYieldFeePercentage":{"entryPoint":21305,"id":30183,"parameterSlots":1,"returnSlots":1},"fun_getBalanceRaw":{"entryPoint":null,"id":6222,"parameterSlots":1,"returnSlots":1},"fun_getDecimalScalingFactors":{"entryPoint":13717,"id":30315,"parameterSlots":2,"returnSlots":1},"fun_getPoolPausedState":{"entryPoint":12801,"id":25088,"parameterSlots":1,"returnSlots":2},"fun_getStaticSwapFeePercentage":{"entryPoint":12968,"id":30061,"parameterSlots":1,"returnSlots":1},"fun_getTokenRate":{"entryPoint":13799,"id":30916,"parameterSlots":1,"returnSlots":1},"fun_initialize":{"entryPoint":15807,"id":26810,"parameterSlots":7,"returnSlots":1},"fun_insertBool":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_106363":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_113687":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_113688":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_120928":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_120929":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_76060":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_83788":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_83789":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_91432":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_91433":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_98951":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_98952":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertUint":{"entryPoint":21493,"id":7523,"parameterSlots":3,"returnSlots":1},"fun_insertUint_135165":{"entryPoint":21427,"id":7523,"parameterSlots":2,"returnSlots":1},"fun_isPoolInRecoveryMode":{"entryPoint":null,"id":29766,"parameterSlots":1,"returnSlots":1},"fun_isPoolInitialized":{"entryPoint":null,"id":29680,"parameterSlots":1,"returnSlots":1},"fun_isPoolRegistered":{"entryPoint":null,"id":29637,"parameterSlots":1,"returnSlots":1},"fun_isQueryContext":{"entryPoint":14633,"id":25605,"parameterSlots":0,"returnSlots":1},"fun_loadPoolData":{"entryPoint":12266,"id":25336,"parameterSlots":1,"returnSlots":1},"fun_mint":{"entryPoint":22404,"id":39059,"parameterSlots":3,"returnSlots":0},"fun_mintMinimumSupplyReserve":{"entryPoint":22132,"id":39126,"parameterSlots":1,"returnSlots":0},"fun_mulUp":{"entryPoint":14399,"id":7970,"parameterSlots":2,"returnSlots":1},"fun_nonReentrantAfter":{"entryPoint":14104,"id":9928,"parameterSlots":0,"returnSlots":0},"fun_nonReentrantBefore":{"entryPoint":14019,"id":9916,"parameterSlots":0,"returnSlots":0},"fun_queryModeBalanceIncrease":{"entryPoint":14667,"id":38988,"parameterSlots":3,"returnSlots":0},"fun_registerPool":{"entryPoint":18478,"id":26463,"parameterSlots":2,"returnSlots":0},"fun_reloadBalancesAndRates":{"entryPoint":15698,"id":30871,"parameterSlots":2,"returnSlots":0},"fun_setAggregateSwapFeePercentage":{"entryPoint":22866,"id":30162,"parameterSlots":2,"returnSlots":1},"fun_setAggregateYieldFeePercentage":{"entryPoint":22898,"id":30223,"parameterSlots":2,"returnSlots":1},"fun_setBalanceRaw":{"entryPoint":14495,"id":6257,"parameterSlots":2,"returnSlots":1},"fun_setDisableUnbalancedLiquidity":{"entryPoint":null,"id":29854,"parameterSlots":1,"returnSlots":1},"fun_setPauseWindowEndTime":{"entryPoint":null,"id":30392,"parameterSlots":2,"returnSlots":1},"fun_setPoolInitialized":{"entryPoint":null,"id":29705,"parameterSlots":1,"returnSlots":1},"fun_setStaticSwapFeePercentage":{"entryPoint":22934,"id":25506,"parameterSlots":2,"returnSlots":0},"fun_setStaticSwapFeePercentage_30101":{"entryPoint":13314,"id":30101,"parameterSlots":2,"returnSlots":1},"fun_setTokenDecimalDiffs":{"entryPoint":null,"id":30342,"parameterSlots":2,"returnSlots":1},"fun_setupQuery":{"entryPoint":13429,"id":27919,"parameterSlots":0,"returnSlots":0},"fun_shouldCallAfterInitialize":{"entryPoint":null,"id":28507,"parameterSlots":1,"returnSlots":1},"fun_shouldCallBeforeInitialize":{"entryPoint":null,"id":28464,"parameterSlots":1,"returnSlots":1},"fun_spendAllowance":{"entryPoint":14509,"id":39428,"parameterSlots":4,"returnSlots":0},"fun_supplyCredit":{"entryPoint":14433,"id":24891,"parameterSlots":2,"returnSlots":0},"fun_tGet":{"entryPoint":null,"id":6938,"parameterSlots":2,"returnSlots":1},"fun_tGet_7043":{"entryPoint":null,"id":7043,"parameterSlots":3,"returnSlots":1},"fun_tSet":{"entryPoint":23454,"id":6967,"parameterSlots":3,"returnSlots":0},"fun_takeDebt":{"entryPoint":22114,"id":24908,"parameterSlots":2,"returnSlots":0},"fun_toHooksConfig":{"entryPoint":16707,"id":28883,"parameterSlots":2,"returnSlots":1},"fun_toInt256":{"entryPoint":21564,"id":44982,"parameterSlots":1,"returnSlots":1},"fun_toPackedBalance":{"entryPoint":21881,"id":6303,"parameterSlots":2,"returnSlots":1},"fun_toTokenDecimalDiffs":{"entryPoint":22738,"id":30440,"parameterSlots":1,"returnSlots":1},"fun_updateRawAndLiveBalance":{"entryPoint":22037,"id":30978,"parameterSlots":3,"returnSlots":0},"fun_verifyCallResultFromTarget":{"entryPoint":13577,"id":40673,"parameterSlots":3,"returnSlots":1},"mapping_index_access_mapping_address_mapping_contract_IERC20_bytes32_of_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"mapping_index_access_mapping_address_mapping_contract_IERC20_bytes32_of_address_35420":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_address_mapping_contract_IERC20_bytes32_of_address_35423":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_address_mapping_contract_IERC20_bytes32_of_address_35424":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_address_mapping_contract_IERC20_bytes32_of_address_35431":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_address_mapping_contract_IERC20_bytes32_of_address_35434":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_address_mapping_contract_IERC20_bytes32_of_address_35442":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_address_mapping_contract_IERC20_bytes32_of_address_35648":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_address_mapping_contract_IERC20_bytes32_of_address_35668":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_address_mapping_contract_IERC20_bytes32_of_address_35680":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_uint256_bytes32_of_uint256":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"memory_array_index_access_contract_IERC20_dyn":{"entryPoint":10932,"id":null,"parameterSlots":2,"returnSlots":1},"modifier_onlyVaultDelegateCall":{"entryPoint":10288,"id":25731,"parameterSlots":2,"returnSlots":1},"modifier_onlyVaultDelegateCall_27100":{"entryPoint":11632,"id":25731,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":10214,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":10887,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":1799,"id":null,"parameterSlots":0,"returnSlots":0},"read_from_memoryt_bool":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"read_from_memoryt_contract_IERC20":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"read_from_storage_reference_type_struct_TokenInfo":{"entryPoint":10969,"id":null,"parameterSlots":1,"returnSlots":1},"read_from_storage_split_offset_contract_IHooks":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"revert_forward":{"entryPoint":10632,"id":null,"parameterSlots":0,"returnSlots":0},"update_storage_value_offsett_address_to_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"validator_assert_enum_TokenType":{"entryPoint":1002,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_address":{"entryPoint":763,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_bool":{"entryPoint":8390,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_enum_SwapKind":{"entryPoint":2102,"id":null,"parameterSlots":1,"returnSlots":0},"write_to_memory_bool":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"write_to_memory_contract_IRateProvider":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"write_to_memory_enum_TokenType":{"entryPoint":10957,"id":null,"parameterSlots":2,"returnSlots":0},"write_to_memory_uint32":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"write_to_memory_uint40":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"write_to_memory_uint8":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"25720":[{"length":32,"start":10123},{"length":32,"start":12034}],"25723":[{"length":32,"start":1693},{"length":32,"start":11973}],"28201":[{"length":32,"start":4975},{"length":32,"start":13448},{"length":32,"start":14241}],"28206":[{"length":32,"start":8209},{"length":32,"start":21748},{"length":32,"start":21820}],"28211":[{"length":32,"start":5361},{"length":32,"start":21658}],"28216":[{"length":32,"start":5847},{"length":32,"start":6753}],"28221":[{"length":32,"start":5813},{"length":32,"start":6719}],"28267":[{"length":32,"start":17336}],"28269":[{"length":32,"start":1565},{"length":32,"start":12864}]},"linkReferences":{},"object":"60806040526004361015610018575b36612eae57612e86565b5f3560e01c8062fdfa13146102f657806313d21cdf146102f157806313ef8a5d146102ec57806315e32046146102e75780631ba0ae45146102e25780634afbaf5a146102dd5780634d472bdd146102d85780634f037ee7146102d3578063532cec7c146102ce578063535cfd8a146102c9578063590e8145146102c457806367e0e076146102bf5780636844846b146102ba5780636c9bc732146102b557806370600089146102b0578063757d64b3146102ab5780637e361bde146102a6578063809846d1146102a15780638380edb71461029c57806385e0b9991461029757806385f2dbd414610292578063927da1051461028d57806396787092146102885780639e825ff514610283578063a07d60401461027e578063aaabadc514610279578063ace9b89b14610274578063b45090f91461026f578063b4aef0ab1461026a578063ba8a2be014610265578063be7d628a14610260578063c673bdaf1461025b578063c808824714610256578063ca4f280314610251578063ce8630d41461024c578063d2c725e014610247578063db81718714610242578063e1f21c671461023d578063e4dc2aa414610238578063e68010c614610233578063e9ddeb261461022e578063edfa356814610229578063eeec802f14610224578063f29486a11461021f578063f7888aec1461021a5763fbfa77cf0361000e5761276c565b612703565b612669565b6124cc565b612476565b6123ba565b61226a565b612082565b612039565b611ff5565b611fb7565b611ebf565b611e11565b611d69565b611d21565b611ccd565b611b18565b611aee565b611aa2565b611a13565b6119e2565b611527565b6114c5565b611481565b611431565b611403565b611399565b611353565b61127a565b611082565b610f2c565b610edf565b610e9c565b610e54565b610cfe565b610c21565b610b78565b610b14565b610a12565b610930565b6106c1565b61067e565b6105dc565b6105b2565b6104c3565b610353565b6001600160a01b0381160361030c57565b5f80fd5b610104359061031e826102fb565b565b359061031e826102fb565b600319604091011261030c57600435610343816102fb565b90602435610350816102fb565b90565b3461030c5760206103a26001600160a01b0361036e3661032b565b9190610378612ef8565b61038181612f52565b165f526006835260405f20906001600160a01b03165f5260205260405f2090565b5460801c604051908152f35b9081518082526020808093019301915f5b8281106103cd575050505090565b83516001600160a01b0316855293810193928101926001016103bf565b600211156103f457565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b9060406060928051610432816103ea565b83526001600160a01b0360208201511660208401520151151560408201520190565b9081518082526020808093019301915f5b828110610473575050505090565b90919293826104856001928751610421565b950193929101610465565b9081518082526020808093019301915f5b8281106104af575050505090565b8351855293810193928101926001016104a1565b3461030c57602060031936011261030c576105a46105056004356104e6816102fb565b6104ee6127af565b506104f7612ef8565b61050081612f9d565b612fea565b6040519182916020835280516020840152610530602082015160e060408601526101008501906103ae565b60c061059261057f61056b610557604087015195601f1996878b83030160608c0152610454565b6060870151868a83030160808b0152610490565b6080860151858983030160a08a0152610490565b60a0850151848883030184890152610490565b920151908483030160e0850152610490565b0390f35b5f91031261030c57565b3461030c575f60031936011261030c576105ca612ef8565b602060ff600954166040519015158152f35b3461030c57602060031936011261030c5760806004356105fb816102fb565b610603612ef8565b61060c81612f52565b61061581613201565b6106429291927f000000000000000000000000000000000000000000000000000000000000000082612813565b916001600160a01b038091165f52600160205260405f20541691604051931515845263ffffffff80921660208501521660408301526060820152f35b3461030c575f60031936011261030c5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461030c57602060031936011261030c5760206004356106e0816102fb565b6106e8612ef8565b6001600160a01b038091165f52600e825260405f205416604051908152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6080810190811067ffffffffffffffff82111761075057604052565b610707565b67ffffffffffffffff811161075057604052565b6060810190811067ffffffffffffffff82111761075057604052565b60e0810190811067ffffffffffffffff82111761075057604052565b610140810190811067ffffffffffffffff82111761075057604052565b90601f601f19910116810190811067ffffffffffffffff82111761075057604052565b6040519061031e82610785565b6040519061031e82610734565b6040519061031e826107a1565b60405190610160820182811067ffffffffffffffff82111761075057604052565b6040519061031e82610769565b6002111561030c57565b359061031e82610836565b67ffffffffffffffff81116107505760051b60200190565b9080601f8301121561030c57602090823561087d8161084b565b9361088b60405195866107be565b81855260208086019260051b82010192831161030c57602001905b8282106108b4575050505090565b813581529083019083016108a6565b67ffffffffffffffff811161075057601f01601f191660200190565b9291926108eb826108c3565b916108f960405193846107be565b82948184528183011161030c578281602093845f960137010152565b9080601f8301121561030c57816020610350933591016108df565b3461030c5760031960408136011261030c5760043561094e816102fb565b6024359067ffffffffffffffff9283831161030c5760e090833603011261030c576109776107e1565b9061098483600401610840565b825260248301356020830152604483013584811161030c576109ac9060043691860101610863565b604083015260648301356060830152608483013560808301526109d160a48401610320565b60a083015260c483013593841161030c576109f8610a029360046105a49636920101610915565b60c0830152612830565b6040519081529081906020820190565b3461030c57602060031936011261030c57600435610a2f816102fb565b610a37612ef8565b610a4081612f9d565b610a8d60206080610a5084612fea565b0151604051809381927f984de9e8000000000000000000000000000000000000000000000000000000008352604060048401526044830190610490565b6001602483015203816001600160a01b0386165afa8015610b0f576105a492610a02925f92610ada575b50610ad3906001600160a01b03165f52601160205260405f2090565b54906133de565b610ad3919250610b019060203d602011610b08575b610af981836107be565b81019061295c565b9190610ab7565b503d610aef565b612988565b3461030c57602060031936011261030c576001600160a01b03600435610b39816102fb565b610b41612ef8565b610b4a81612f52565b165f525f6020526020600160405f2054811c166040519015158152f35b906020610350928181520190610490565b3461030c57602060031936011261030c576105a46080610bae600435610b9d816102fb565b610ba5612ef8565b61050081612f52565b0151604051918291602083526020830190610490565b9181601f8401121561030c5782359167ffffffffffffffff831161030c576020838186019501011161030c57565b602060031982011261030c576004359067ffffffffffffffff821161030c57610c1d91600401610bc4565b9091565b6020610c36610c2f36610bf2565b36916108df565b818151910120604051908152f35b9081518082526020808093019301915f5b828110610c63575050505090565b83516001600160a01b031685529381019392810192600101610c55565b9290610c989095949295608085526080850190610c44565b6020908481036020860152602080885192838152019701915f5b828110610ce1575050505084610cd391846103509697036040860152610490565b916060818403910152610490565b9091929782610cf36001928b51610421565b990193929101610cb2565b3461030c57602060031936011261030c57600435610d1b816102fb565b610d23612ef8565b610d2c81612f52565b6001600160a01b0381165f52600560205260405f20610d64610d5f836001600160a01b03165f52600360205260405f2090565b612993565b90815192610d7184612a08565b93610d7b81612a56565b91610d8582612a56565b935f5b838110610da057604051806105a488888c8c85610c80565b80610db560019284905f5260205260405f2090565b54610e0c610e078a610df2610de586610ddf8b6001600160a01b03165f52600460205260405f2090565b93612ab4565b516001600160a01b031690565b6001600160a01b03165f5260205260405f2090565b612ad9565b610e16838c612ab4565b52610e21828b612ab4565b506fffffffffffffffffffffffffffffffff8116610e3f8389612ab4565b5260801c610e4d8289612ab4565b5201610d88565b3461030c57602060031936011261030c576020600435610e73816102fb565b610e7b612ef8565b6001600160a01b038091165f52600e825260405f2054161515604051908152f35b3461030c57602060031936011261030c576020610ed4600435610ebe816102fb565b610ec6612ef8565b610ecf81612f52565b613201565b506040519015158152f35b3461030c57604060031936011261030c576001600160a01b03600435610f04816102fb565b16805f525f602052610f1c60243560405f2054613402565b905f525f60205260405f20555f80f35b3461030c575f80610f3c36610bf2565b90610f45613475565b610f4d612ef8565b8160405192839283378101838152039082335af1610f69612b18565b908015610fb65790610f7f81610fb29333613509565b506040519182917f5ab64fb800000000000000000000000000000000000000000000000000000000835260048301612465565b0390fd5b506004815110611035577f5ab64fb8000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000602083015116036134fa577f28f95541000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fa7285689000000000000000000000000000000000000000000000000000000005f5260045ffd5b909161107461035093604084526040840190610490565b916020818403910152610490565b3461030c57602060031936011261030c5760043561109f816102fb565b6110a7612ef8565b6110b081612f52565b6001600160a01b038082165f525f60205260405f2054600360205260405f209160405180938491602082549182815201915f5260205f20935f905b82821061117a57505050611101925003836107be565b61110d82518092613595565b9161111782612a56565b935f5b83811061113057604051806105a488888361105d565b600190611169611164610e07611157866001600160a01b03165f52600460205260405f2090565b610df2610de5868a612ab4565b6135e7565b6111738289612ab4565b520161111a565b85546001600160a01b03908216168452600195860195889550602090940193909101906110eb565b60c060031982011261030c576004356111ba816102fb565b916024356111c7816102fb565b9167ffffffffffffffff9060443582811161030c578160238201121561030c5780600401356111f58161084b565b9161120360405193846107be565b8183526020916024602085019160051b8301019185831161030c57602401905b82821061126157505050509260643583811161030c578261124691600401610863565b926084359260a43591821161030c5761035091600401610915565b838091833561126f816102fb565b815201910190611223565b3461030c57611319602061128d366111a2565b909161129a9793976136c3565b6113056112f2604051998a9889987fba8a2be0000000000000000000000000000000000000000000000000000000008a526001600160a01b0380921660048b015216602489015260c0604489015260c4880190610c44565b6003199283888303016064890152610490565b9260848601528483030160a4850152612440565b03815f305af18015610b0f57611334575b611332613718565b005b61134c9060203d602011610b0857610af981836107be565b505f61132a565b3461030c575f60031936011261030c5761136b612ef8565b60207f00000000000000000000000000000000000000000000000000000000000000005c6040519015158152f35b3461030c5760206fffffffffffffffffffffffffffffffff6113f96001600160a01b036113c53661032b565b91906113cf612ef8565b6113d881612f52565b165f526006845260405f20906001600160a01b03165f5260205260405f2090565b5416604051908152f35b3461030c575f60031936011261030c5761141b612ef8565b60206001600160a01b03600a5416604051908152f35b3461030c57606060031936011261030c576020611479600435611453816102fb565b60243561145f816102fb565b6044359161146c836102fb565b611474612ef8565b61373d565b604051908152f35b3461030c57602060031936011261030c576001600160a01b036004356114a6816102fb565b6114ae612ef8565b165f526008602052602060405f2054604051908152f35b3461030c57602060031936011261030c5760206114796004356114e7816102fb565b6114ef612ef8565b7f0000000000000000000000000000000000000000000000000000000000000000906001600160a01b03165f5260205260405f205c90565b3461030c57608060031936011261030c57600435611544816102fb565b602435611550816102fb565b6044359060643567ffffffffffffffff811161030c57611574903690600401610863565b61157c612ef8565b61158461379f565b61158c6136c3565b61159584612f9d565b6001600160a01b039384811691825f526020905f6020526115be60405f205460019060031c1690565b156119b6576115de836001600160a01b03165f52600560205260405f2090565b966115e7612b47565b92611606610d5f866001600160a01b03165f52600360205260405f2090565b808552519661161b6040860198808a52612a56565b97608086019889525f5b815181101561166e578061165c6116466001938f905f5260205260405f2090565b546fffffffffffffffffffffffffffffffff1690565b611667828d51612ab4565b5201611625565b50899896979861169c8189516116958c6001600160a01b03165f52601160205260405f2090565b54906137f0565b996116a78351612a56565b956060890196875261170e8b7f00000000000000000000000000000000000000000000000000000000000000005c7f0000000000000000000000000000000000000000000000000000000000000000905f5260205260405f20905f5260205260405f205c90565b151560a08a018181529590611989575b5f5b855181101561186e5761174a818f8a8e838e61173c8e51151590565b61181e575b50505050612ab4565b51611755828c612ab4565b51116117b557808c8f826117a88f826117ae9461178f61177e610de560019b6117949651612ab4565b6117888484612ab4565b5190613861565b612ab4565b519351936117a28386612ab4565b51612bb7565b92612ab4565b5201611720565b8d8a6117de836117d78f956117d1610de58261181b9951612ab4565b95612ab4565b5192612ab4565b517f2f785e46000000000000000000000000000000000000000000000000000000005f526001600160a01b03909216600452602452604452606490565b5ffd5b61183d61184f9361185a956118338589612ab4565b519101519061383f565b611848838351612ab4565b5251612ab4565b516117a28484612ab4565b6118648383612ab4565b528a8e838e611741565b508a95509187918d938d611893816001600160a01b03165f52600560205260405f2090565b965f5b89518110156118e457806118cb8c6118c4836118bc6001968f905f5260205260405f2090565b549251612ab4565b519061389f565b6118dd828c905f5260205260405f2090565b5501611896565b6105a4885f89897ffbe5b0d79fb94f1e81c0a92bf86ae9d3a19e9d1bf6202c0d3e75120f65d5d8a58a8a6119626119508c6119398d611925813388866138ad565b61192d613929565b611979575b858361398e565b6001600160a01b03165f52601160205260405f2090565b54955188604051948594169784612bc4565b0390a461196d613718565b60405191829182610b67565b61198481878561394b565b611932565b6119ac6119a68d6001600160a01b03165f525f60205260405f2090565b546132a8565b60208b015261171e565b837fef029adf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b3461030c575f60031936011261030c576119fa612ef8565b60206001600160a01b0360095460081c16604051908152f35b3461030c57602060031936011261030c576020611a98600435611a35816102fb565b611a3d612ef8565b7f00000000000000000000000000000000000000000000000000000000000000005c7f0000000000000000000000000000000000000000000000000000000000000000905f5260205260405f20905f5260205260405f205c90565b6040519015158152f35b3461030c57602060031936011261030c576001600160a01b03600435611ac7816102fb565b611acf612ef8565b611ad881612f52565b165f525f602052602061147960405f20546132a8565b3461030c575f60031936011261030c57611b06612ef8565b60206001600754166040519015158152f35b3461030c57611b26366111a2565b9291611b30612ef8565b611b3861379f565b611b4186612f52565b611b496136c3565b611b5286613b59565b611b5b86612fea565b92611b6a8451600190811c1690565b611c98579183916105a4979593611b8c6020611bdb9997015151835190613ba7565b60c08401958651611ba460a087019182519086613bd6565b9789611bb5885160019060081c1690565b611c27575b8994925087915092611bcd969593613dbf565b94859151600190600a1c1690565b611bea575b8590610a02613718565b611c18611c0b611c1e956001600160a01b03165f52600260205260405f2090565b546001600160a01b031690565b92614077565b5f808083611be0565b91611c8b91611c5d899b8b611c57611c0b611bcd9c9b999a986001600160a01b03165f52600260205260405f2090565b91613c7c565b611c81611c7b8d6001600160a01b03165f52600560205260405f2090565b8a613d52565b5190519084613bd6565b9781939294955089611bba565b7f218e3747000000000000000000000000000000000000000000000000000000005f526001600160a01b03871660045260245ffd5b3461030c57602060031936011261030c576001600160a01b03600435611cf2816102fb565b611cfa612ef8565b611d0381612f52565b165f525f6020526020600160405f205460031c166040519015158152f35b3461030c57602060031936011261030c576001600160a01b03600435611d46816102fb565b611d4e612ef8565b165f525f6020526020600160405f2054166040519015158152f35b3461030c57604060031936011261030c5760243567ffffffffffffffff811161030c57611d9a903690600401610bc4565b611da2612ef8565b611dab33612f52565b80604051926020845281602085015260408401375f604082840101527f4bc4412e210115456903c65b5277d299a505e79f2eb852b92b1ca52d8585642860043592604081601f19601f339601168101030190a3005b906020610350928181520190610c44565b3461030c57602060031936011261030c57600435611e2e816102fb565b611e36612ef8565b611e3f81612f52565b6001600160a01b038091165f52600360205260405f20906040519081602084549182815201935f5260205f20915f905b828210611e92576105a485611e86818903826107be565b60405191829182611e00565b909192946001611eb4819284895416906001600160a01b036020921681520190565b960193920190611e6f565b3461030c57602060031936011261030c57610160611f24600435611ee2816102fb565b611eea612bef565b50611ef3612ef8565b611efc81612f52565b6001600160a01b038091165f525f60205260405f205490600260205260405f20541690614143565b611fb5604051809280511515825260208082015115159083015260408082015115159083015260608082015115159083015260808082015115159083015260a08082015115159083015260c08082015115159083015260e0808201511515908301526101008082015115159083015261012080820151151590830152610140908101516001600160a01b0316910152565bf35b3461030c575f60031936011261030c5760207f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6040519015158152f35b3461030c575f60031936011261030c5761200d612ef8565b60207f00000000000000000000000000000000000000000000000000000000000000005c604051908152f35b3461030c57606060031936011261030c57612077600435612059816102fb565b602435612065816102fb565b61206d612ef8565b6044359133614281565b602060405160018152f35b3461030c57602060031936011261030c576001600160a01b036004356120a7816102fb565b6120af612ef8565b165f526011602052602060405f2054604051908152f35b8015150361030c57565b6084359061031e826120c6565b6064359063ffffffff8216820361030c57565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c606091011261030c5760a490565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedc608091011261030c5761012490565b906101a060031983011261030c57600435612169816102fb565b9160243567ffffffffffffffff811161030c578160238201121561030c5780600401356121958161084b565b916040916121a660405194856107be565b8084526020906024602086019160071b8401019286841161030c57602401905b83821061220457505050505091604435916121df6120dd565b916121e86120d0565b916121f2816120f0565b916103506121fe610310565b9261211f565b60808288031261030c5782608091865161221d81610734565b8435612228816102fb565b81528285013561223781610836565b8382015287850135612248816102fb565b888201526060808601359061225c826120c6565b8201528152019101906121c6565b3461030c576122783661214f565b90969594926122856136c3565b303b1561030c576122ef975f9760406123569561234b9463ffffffff6101a49a84519e8f9d8e9d8e7feeec802f0000000000000000000000000000000000000000000000000000000081526001600160a01b03809a1660048201526101a060248201520190612c52565b9a60448d01521660648b0152151560848a015282813561230e816102fb565b1660a48a0152826020820135612323816102fb565b1660c48a01520135612334816102fb565b1660e48701526001600160a01b0316610104860152565b610124840190612cc1565b038183305af18015610b0f5761236e57611332613718565b8061237b61238192610755565b806105a8565b5f61132a565b61031e909291926060810193604090816001600160a01b0391828151168552826020820151166020860152015116910152565b3461030c57602060031936011261030c576105a46004356123da816102fb565b6123e26129ea565b506123eb612ef8565b6123f481612f52565b6001600160a01b038091165f52600160205260405f209060026040519261241a84610769565b828154168452826001820154166020850152015416604082015260405191829182612387565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b906020610350928181520190612440565b3461030c576105a46124b85f8061249f61248f36610bf2565b612497613475565b610c2f612ef8565b60208151910182335af16124b1612b18565b9033613509565b604051918291602083526020830190612440565b3461030c5763ffffffff6124df3661214f565b9390946124f0989298979697612ef8565b6124f86136c3565b6125006143b1565b6040519761250d89610785565b885260208801521660408601521515606085015260608536031261030c576125896125909261132a96604080519161254483610769565b803561254f816102fb565b8352602081013561255f816102fb565b6020840152013561256f816102fb565b604082015260808701526001600160a01b031660a0860152565b3690612d10565b60c083015261482e565b61031e909291926101806101a08201946125db8382516060809180511515845260208101511515602085015260408101511515604085015201511515910152565b60208101516080840152604081015160a0840152606081015160c0840152612611608082015160e085019064ffffffffff169052565b60a08101519061262c610100928386019063ffffffff169052565b61266060c082015192612646610120948588019015159052565b60e083015115156101408701528201511515610160860152565b01511515910152565b3461030c57602060031936011261030c576105a46126f760043561268c816102fb565b5f61012060405161269c816107a1565b6040516126a881610734565b83815283602082015283604082015283606082015281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e0820152826101008201520152612d70565b6040519182918261259a565b3461030c57604060031936011261030c576020612763600435612725816102fb565b6001600160a01b036024359161273a836102fb565b612742612ef8565b165f52600f835260405f20906001600160a01b03165f5260205260405f2090565b54604051908152f35b3461030c575f60031936011261030c5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b604051906127bc82610785565b815f815260c060609182602082015282604082015282808201528260808201528260a08201520152565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b91909163ffffffff8080941691160191821161282b57565b6127e6565b6128ad9161283c612ef8565b61284582612f9d565b6001600160a01b039081831690815f525f602052604093849361286a855f20546132a8565b935f526002602052845f205416918451968794859384937fa0e8f5ac000000000000000000000000000000000000000000000000000000008552600485016132f5565b03915afa918215610b0f575f915f9361292a575b50501561290257670de0b5cad2bef00081116128da5790565b7f746e5940000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f53f976d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b61294d935080919250903d10612955575b61294581836107be565b8101906132d6565b905f806128c1565b503d61293b565b9081602091031261030c575190565b91906020612983600192604086526040860190610490565b930152565b6040513d5f823e3d90fd5b90604051918281549182825260209260208301915f5260205f20935f905b8282106129c75750505061031e925003836107be565b85546001600160a01b0316845260019586019588955093810193909101906129b1565b604051906129f782610769565b5f6040838281528260208201520152565b90612a128261084b565b612a1f60405191826107be565b828152601f19612a2f829461084b565b01905f5b828110612a3f57505050565b602090612a4a6129ea565b82828501015201612a33565b90612a608261084b565b612a6d60405191826107be565b828152601f19612a7d829461084b565b0190602036910137565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8051821015612ac85760209160051b010190565b612a87565b612ad6826103ea565b52565b90604051612ae681610769565b604060ff829454818116612af9816103ea565b84526001600160a01b038160081c16602085015260a81c161515910152565b3d15612b42573d90612b29826108c3565b91612b3760405193846107be565b82523d5f602084013e565b606090565b6040519060c0820182811067ffffffffffffffff821117610750576040525f60a08360608152826020820152826040820152606080820152606060808201520152565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0bdc0820191821161282b57565b9190820391821161282b57565b91612be19061035094928452606060208501526060840190610490565b916040818403910152610490565b60405190610160820182811067ffffffffffffffff821117610750576040525f610140838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e082015282610100820152826101208201520152565b9081518082526020808093019301915f5b828110612c71575050505090565b9091929382608060019287516001600160a01b0380825116835284820151612c98816103ea565b838601526040828101519091169083015260609081015115159082015201950193929101612c63565b606080918035612cd0816120c6565b151584526020810135612ce2816120c6565b151560208501526040810135612cf7816120c6565b151560408501520135612d09816120c6565b1515910152565b919082608091031261030c57604051612d2881610734565b60608082948035612d38816120c6565b84526020810135612d48816120c6565b60208501526040810135612d5b816120c6565b6040850152013591612d6c836120c6565b0152565b612d9b90612d7c612ef8565b612d8581612f52565b6001600160a01b03165f525f60205260405f2090565b546103506001612daa836132a8565b92612e53612db782615316565b612e46612dc384615339565b64ffffffffff85605a1c169063ffffffff86612ddd608290565b1c1693612de86107ee565b600488901c89161515815299600588901c8916151560208c0152600688901c8916151560408c0152600788901c8916151560608c0152612e266107fb565b9a8b5260208b015260408a0152606089015264ffffffffff166080880152565b63ffffffff1660a0860152565b808216151560c085015280821c8216151560e0850152600281901c8216151561010085015260031c161515610120830152565b7ff2238896000000000000000000000000000000000000000000000000000000005f5260045ffd5b34612e8657365f80375f8036816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af43d5f803e15612ef4573d5ff35b3d5ffd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003612f2a57565b7f9fd25b36000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001600160a01b0316805f525f602052600160405f20541615612f725750565b7f9e51bd5c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6001600160a01b0316805f525f602052600160405f2054811c1615612fbf5750565b7f4bdace13000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b906001600160a01b03612ffb6127af565b92165f5260056020526040805f205f602052815f2054906004602052825f20906003602052835f20938454938752613036602088019561535c565b855261304184612a08565b9181880192835261305185612a56565b916060890192835261306286612a56565b9460809560808b0152613076878b51613595565b60c08b015261308487612a56565b60a08b019081528a5191600199600184811c1693846131ed575b50836131db575b8c5f5b8b81106130be5750505050505050505050505050565b8a8d92828c8c8c613105846130f1816130e3610e078f8f610de585610df29251612ab4565b94905f5260205260405f2090565b549451836130ff8383612ab4565b52612ab4565b5061310f816135e7565b61311a858d51612ab4565b526131386fffffffffffffffffffffffffffffffff84168587615615565b878d8d156131ce57820151151591826131b0575b5050613161575b50505050505b018d906130a8565b826131849261317b826131748851615339565b9451612ab4565b51961c85615b30565b9283613194575b8e93508c613153565b6131a7936131a191612bb7565b91615615565b5f8f828261318b565b909150516131bd816103ea565b6131c6816103ea565b14875f61314c565b5050505050505050613159565b8c5190935060031c60011615926130a5565b6131f8919450615339565b1515925f61309e565b6001600160a01b03165f525f60205260405f20549060018260021c1663ffffffff809361322c608290565b1c16928161323957509190565b90506132657f000000000000000000000000000000000000000000000000000000000000000084612813565b164211159190565b60ff60019116019060ff821161282b57565b9060058202918083046005149015171561282b57565b8181029291811591840414171561282b57565b62ffffff9060121c1664174876e8009081810291818304149015171561282b5790565b519061031e826120c6565b919082604091031261030c57602082516132ef816120c6565b92015190565b612d6c61339560409396959496606084528051613311816103ea565b60608501526020810151608085015260c061333b8683015160e060a0880152610140870190610490565b91606081015182870152608081015160e08701526001600160a01b0360a08201511661010087015201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa085830301610120860152612440565b6001600160a01b039096166020830152565b81156133b1570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b90670de0b6b3a76400009182810292818404149015171561282b57610350916133a7565b90670de0b5cad2bef00081116128da5764174876e80090048060181c61344d577ffffffffffffffffffffffffffffffffffffffffffffffffffffffc000003ffff9060121b91161790565b7fe4337c05000000000000000000000000000000000000000000000000000000005f5260045ffd5b326134d2576001600754166134aa5760017f00000000000000000000000000000000000000000000000000000000000000005d565b7f7a198886000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f67f84ab2000000000000000000000000000000000000000000000000000000005f5260045ffd5b80511561103557805190602001fd5b90613546575080511561351e57805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b8151158061358c575b613557575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561354f565b9064ffffffffff6135a582612a56565b92605a1c165f5b8281106135b95750505090565b601f826135c58361327f565b1c1690604d821161282b57600191600a0a6135e08287612ab4565b52016135ac565b80516135f2816103ea565b6135fb816103ea565b8061360e575050670de0b6b3a764000090565b8061361a6001926103ea565b0361369b5760206136456136398260049401516001600160a01b031690565b6001600160a01b031690565b604051928380927f679aefce0000000000000000000000000000000000000000000000000000000082525afa908115610b0f575f91613682575090565b610350915060203d602011610b0857610af981836107be565b7fdf450632000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c6136f0576001905d565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d565b6001600160a01b0392918381168484160361375b57505050505f1990565b61379b9361378592165f52601060205260405f20906001600160a01b03165f5260205260405f2090565b906001600160a01b03165f5260205260405f2090565b5490565b7f00000000000000000000000000000000000000000000000000000000000000005c156137c857565b7fc09ba736000000000000000000000000000000000000000000000000000000005f5260045ffd5b92916137fc8451612a56565b935f5b81518110156138395780613828856138238661381d60019688612ab4565b51613295565b6133a7565b6138328289612ab4565b52016137ff565b50505050565b9061384991613295565b6001670de0b6b3a76400005f19830104019015150290565b9061386b9061543c565b907f8000000000000000000000000000000000000000000000000000000000000000821461282b5761031e915f0390615491565b906103509160801c90615579565b91909392936138bd82828561373d565b5f1981036138ce575b505050509050565b8086116138ec57946138e294950392614281565b805f8080806138c6565b85906001600160a01b03847ffb8f41b2000000000000000000000000000000000000000000000000000000005f521660045260245260445260645ffd5b3215806139335790565b506001600754161590565b9190820180921161282b57565b90326134d2576001600160a01b0361397f92165f52600f60205260405f20906001600160a01b03165f5260205260405f2090565b805491820180921161282b5755565b90916001600160a01b03808416928315613b24576139c185613785836001600160a01b03165f52600f60205260405f2090565b54808411613ae7578390036139eb86613785846001600160a01b03165f52600f60205260405f2090565b55613a1183613a0b836001600160a01b03165f52601160205260405f2090565b54612bb7565b613a1a816155dd565b613a35826001600160a01b03165f52601160205260405f2090565b551690813b1561030c576040517f23de66510000000000000000000000000000000000000000000000000000000081526001600160a01b0390941660048501525f6024850181905260448501829052937fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f91613acf91868180606481015b038183895af1613ad4575b506040519081529081906020820190565b0390a4565b8061237b613ae192610755565b5f613abe565b7fe450d38c000000000000000000000000000000000000000000000000000000005f526001600160a01b038616600452602452604483905260645ffd5b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f526001600160a01b03851660045260245ffd5b613b616143b1565b613b6a81613201565b50613b725750565b6001600160a01b03907fd971f597000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b03613bae57565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b91908251918151815181851491821592613c5c575b5050613bae57613bfa83612a56565b935f5b848110613c0c57505050505090565b80670de0b6b3a7640000613c4a613c2560019486612ab4565b51613c45613c33858a612ab4565b51613c3e868a612ab4565b5192613295565b613295565b04613c558289612ab4565b5201613bfd565b141590505f80613beb565b9081602091031261030c5751610350816120c6565b90613ce092613cce5f6001600160a01b03602095604051978896879586937f1c149e28000000000000000000000000000000000000000000000000000000008552604060048601526044850190610490565b90600319848303016024850152612440565b0393165af1908115610b0f575f91613d23575b5015613cfb57565b7f60612925000000000000000000000000000000000000000000000000000000005f5260045ffd5b613d45915060203d602011613d4b575b613d3d81836107be565b810190613c67565b5f613cf3565b503d613d33565b60208082015151925f5b848110613d6a575050505050565b600190613db96fffffffffffffffffffffffffffffffff6040613d99613d9385838b0151612ab4565b516135e7565b613da78560a08b0151612ab4565b52835f528587525f2054168287615615565b01613d5c565b929195969496613de0846001600160a01b03165f52600560205260405f2090565b955f5b60208901518051821015613ebe57610de582613dfe92612ab4565b613e0e613639610de58489612ab4565b6001600160a01b038216908103613e6a575090613e38600192613e31838b612ab4565b5190615662565b613e518b613e4a836117d7818d612ab4565b5190615579565b613e63828b905f5260205260405f2090565b5501613de3565b61181b9088613e7f613639610de5878c612ab4565b7fffe261a1000000000000000000000000000000000000000000000000000000005f526001600160a01b03918216600452811660245216604452606490565b50509694919250969450613ef684517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd600291161790565b808552613f13846001600160a01b03165f525f60205260405f2090565b556001600160a01b0392613f59602085831697604051809381927f984de9e80000000000000000000000000000000000000000000000000000000083526004830161296b565b03818a5afa8015610b0f57613f7e915f91614058575b50613f79816155dd565b612b8a565b97613f8882615674565b613f93898584615784565b8089106140285750928592613fff7fa26a52d8d53702bba7f137907b8e1f99ff87f6d450144270ca25e72481cca87193613ff06020613fe660019a996001600160a01b03165f52601160205260405f2090565b5498015151612a56565b90604051948594169784612bc4565b0390a47fcad8c9d32507393b6508ca4a888b81979919b477510585bde8488f153072d6f35f80a2565b7f8d261d5d000000000000000000000000000000000000000000000000000000005f52600489905260245260445ffd5b614071915060203d602011610b0857610af981836107be565b5f613f6f565b926140ca5f6001600160a01b0360209594966140e1604051988997889687947f38be241d000000000000000000000000000000000000000000000000000000008652606060048701526064860190610490565b916024850152600319848303016044850152612440565b0393165af1908115610b0f575f91614124575b50156140fc57565b7f0f23dbc6000000000000000000000000000000000000000000000000000000005f5260045ffd5b61413d915060203d602011613d4b57613d3d81836107be565b5f6140f4565b9061414c612bef565b5060ff600180848361415e600c61326d565b6141679061326d565b161c16818584614177600c61326d565b6141809061326d565b6141899061326d565b161c169082868561419a600c61326d565b6141a39061326d565b6141ac9061326d565b6141b59061326d565b161c16928087866141c6600c61326d565b6141cf9061326d565b6141d89061326d565b6141e19061326d565b6141ea9061326d565b161c16948188818184600c161c1692600c6142049061326d565b161c1691614210610808565b60098a901c82161515815298600881901c8216151560208b0152600a81901c8216151560408b0152600b1c161515606089015215156080880152151560a0870152151560c0860152151560e0850152151561010084015215156101208301526001600160a01b031661014082015290565b9290916001600160a01b039283811693841561437c5780831695861561434757846142c58561378586613785866001600160a01b03165f52601060205260405f2090565b551692833b1561030c576040517f5687f2b80000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152919092166024820152604481018290527fa0175360a15bca328baf7ea85c7b784d58b222a50d0ce760b10dba336d226a6191613acf915f818060648101613ab3565b7f94280d62000000000000000000000000000000000000000000000000000000005f526001600160a01b03841660045260245ffd5b7fe602df05000000000000000000000000000000000000000000000000000000005f526001600160a01b03821660045260245ffd5b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000164211158061440f575b6143e757565b7fda9f8b34000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001600754811c166143e1565b9080519061442a826103ea565b614433826103ea565b82546020820151604092909201517fffffffffffffffffffff0000000000000000000000000000000000000000000090911660ff939093169290921760089190911b74ffffffffffffffffffffffffffffffffffffffff00161790151560a81b75ff00000000000000000000000000000000000000000016179055565b9081602091031261030c575160ff8116810361030c5790565b8054680100000000000000008110156107505760018101808355811015612ac8576001600160a01b03915f5260205f200191167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b815181547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0391821617825561031e92600291906040906145a58360208301511660018701906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b0151169101906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b919082604091031261030c576020825192015190565b94939161031e93606092614625926001600160a01b03809216895216602088015260e0604088015260e0870190612c52565b9401906060809180511515845260208101511515602085015260408101511515604085015201511515910152565b908161014091031261030c576146676107fb565b90614671816132cb565b825261467f602082016132cb565b6020830152614690604082016132cb565b60408301526146a1606082016132cb565b60608301526146b2608082016132cb565b60808301526146c360a082016132cb565b60a08301526146d460c082016132cb565b60c08301526146e560e082016132cb565b60e08301526101006146f88183016132cb565b9083015261470a6101208092016132cb565b9082015290565b919695939461477361031e9663ffffffff6102209661473b614801966102a0808a52890190612c52565b9b60208801521660408601526060850190604090816001600160a01b0391828151168552826020820151166020860152015116910152565b60c083019080511515825260208082015115159083015260408082015115159083015260608082015115159083015260808082015115159083015260a08082015115159083015260c08082015115159083015260e0808201511515908301526101008082015115159083015261012080820151151590830152610140908101516001600160a01b0316910152565b01906060809180511515845260208101511515602085015260408101511515604085015201511515910152565b9061485361484c836001600160a01b03165f525f60205260405f2090565b5460011690565b6152e157805151600281106152b957600881116152915792919061487684612a56565b5f945f5b818110614f845750506149469293945060808201916148b483516148af876001600160a01b03165f52600160205260405f2090565b614525565b6148c9613639600a546001600160a01b031690565b604080916148e2828751016001600160a01b0390511690565b906148f06060860151151590565b83517f77ff76e70000000000000000000000000000000000000000000000000000000081526001600160a01b03808c166004830152909316602484015215156044830152909687919082905f9082906064820190565b03925af18015610b0f575f955f91614f51575b50614a7260c0840191614a6d614a3c845197614a25614a1f6149818b51151560041b60011790565b9a60606149ef6149be60209e8f85015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf9060051b91161790565b8c84015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf9060061b91161790565b91015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f9060071b91161790565b916158d2565b90605a9164ffffffffff908116831b921b19161790565b98614a688688019a614a528c5163ffffffff1690565b9060829163ffffffff908116831b921b19161790565b615952565b615972565b9360a08401906001600160a01b03958987614a9485516001600160a01b031690565b1680614b95575b5090614ab98193926001600160a01b03165f525f60205260405f2090565b5582516001600160a01b03166001600160a01b0316614ae98b6001600160a01b03165f52600260205260405f2090565b90614b2191906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b8501948551614b30908b615996565b519451975163ffffffff16965191516001600160a01b03166001600160a01b0316614b5a91614143565b9151925195869533991697614b6f9587614711565b037fbc1561eeab9f40962e2fb827a7ff9c7cdb47a9d7c84caeefa4ed90e043842dad91a3565b614bd791849189515f8951938b51968795869485937f0b89f18200000000000000000000000000000000000000000000000000000000855233600486016145f3565b03925af1908115610b0f575f91614f34575b5015614f1f57614c0661363961363985516001600160a01b031690565b90855180927fd77153a70000000000000000000000000000000000000000000000000000000082528160046101409586935afa928315610b0f575f93614ef0575b50508151151580614ed6575b614e835790614e51610120614cbd614e1e614dec614dba614d88614d56614d248e614cf9614cf08c8f614e7c9f90614cbd614cc592614c928551151590565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdff9060091b91161790565b920151151590565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff9060081b91161790565b918c0151151590565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbff90600a1b91161790565b60608a015115157ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff90600b1b91161790565b608089015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff90600c1b91161790565b60a088015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfff90600d1b91161790565b60c087015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfff90600e1b91161790565b60e086015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fff90600f1b91161790565b61010085015115157ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff9060101b91161790565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff9060111b91161790565b895f614a9b565b61181b8b614e9886516001600160a01b031690565b7ffa93d814000000000000000000000000000000000000000000000000000000005f526001600160a01b039081166004521660245233604452606490565b50614eea614ee5865151151590565b151590565b15614c53565b614f10929350803d10614f18575b614f0881836107be565b810190614653565b905f80614c47565b503d614efe565b61181b8a614e9885516001600160a01b031690565b614f4b9150833d8511613d4b57613d3d81836107be565b5f614be9565b905081614f749296503d8711614f7d575b614f6c81836107be565b8101906145dd565b9490945f614959565b503d614f62565b614f8f818551612ab4565b5196614fa288516001600160a01b031690565b906001600160a01b038083169182158015615286575b61525e571680821061523657811461520157604090818a01998a51614fe3906001600160a01b031690565b6001600160a01b0316159060209b8c8201908d825191615002836103ea565b516001600160a01b03169360600193845161501c90151590565b91615025610829565b936150309085612acd565b6001600160a01b0390911690830152151581870152866150618d6001600160a01b03165f52600460205260405f2090565b9061507c91906001600160a01b03165f5260205260405f2090565b906150869161441d565b8051615091816103ea565b61509a816103ea565b6151b257508115916151a7575b5061369b5789915b51998a80927f313ce56700000000000000000000000000000000000000000000000000000000825260049c8d915afa918215610b0f575f9261517a575b505060129060ff9180838316115f14615126578a7f686d3607000000000000000000000000000000000000000000000000000000005f525ffd5b60019495969798999a509061514a929103166151428588612ab4565b9060ff169052565b61516e81615169896001600160a01b03165f52600360205260405f2090565b6144c9565b9695949392910161487a565b6151999250803d106151a0575b61519181836107be565b8101906144b0565b5f806150ec565b503d615187565b51151590505f6150a7565b60019150516151c0816103ea565b6151c9816103ea565b036151d95761369b5789916150af565b7fa1e9dd9d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4f4b634e000000000000000000000000000000000000000000000000000000005f526001600160a01b03821660045260245ffd5b7f6e8f1947000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fc1ab6dc1000000000000000000000000000000000000000000000000000000005f5260045ffd5b508189168314614fb8565b7f707bdf58000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f5ed4ba8f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fdb771c80000000000000000000000000000000000000000000000000000000005f526001600160a01b03821660045260245ffd5b62ffffff90602a1c1664174876e8009081810291818304149015171561282b5790565b62ffffff9060421c1664174876e8009081810291818304149015171561282b5790565b90604051918281549182825260209260208301915f5260205f20935f905b8282106153905750505061031e925003836107be565b85546001600160a01b03168452600195860195889550938101939091019061537a565b908060181c61344d57602a1b9062ffffff602a1b19161790565b7fb4120f14000000000000000000000000000000000000000000000000000000005f5260045ffd5b90610100808410156153cd5783810390811161282b578060ff105f14615437575060ff5b6018116153cd578060181c61344d5762ffffff90831b921b19161790565b615419565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81116154665790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b908015615575577f0000000000000000000000000000000000000000000000000000000000000000916154d68184906001600160a01b03165f5260205260405f205c90565b8281019283125f821290801582169115161761282b578261552b57507f000000000000000000000000000000000000000000000000000000000000000092835c5f19810190811161282b5761031e945d615b9e565b1561553a575b61031e92615b9e565b7f000000000000000000000000000000000000000000000000000000000000000092835c6001810180911161282b5761031e945d9250615531565b5050565b906fffffffffffffffffffffffffffffffff8083119081156155d3575b506155ab5760801b90810180911161282b5790565b7f89560ca1000000000000000000000000000000000000000000000000000000005f5260045ffd5b905081115f615596565b620f424081106155ea5750565b7fd38d20fc000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b91906080670de0b6b3a7640000615659612ad694806156388660608a0151612ab4565b52613c4561564a8660c08a0151612ab4565b51613c3e8760a08b0151612ab4565b04930151612ab4565b61566e61031e9261543c565b90615491565b61568f816001600160a01b03165f52601160205260405f2090565b908154620f42409081810180911161282b576001600160a01b0393556156c6826001600160a01b03165f52600f60205260405f2090565b5f805260205260405f20908154019055165f80827fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f604051806157108190620f4240602083019252565b0390a4803b1561030c575f60405180927f23de66510000000000000000000000000000000000000000000000000000000082528183816157666004820190620f4240604060608401935f81525f60208201520152565b03925af18015610b0f576157775750565b8061237b61031e92610755565b916001600160a01b0380831693841561589d576157bc836157b6836001600160a01b03165f52601160205260405f2090565b5461393e565b6157db85613785846001600160a01b03165f52600f60205260405f2090565b8481540190556157ea816155dd565b615805826001600160a01b03165f52601160205260405f2090565b5516925f847fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f6040518061583e87829190602083019252565b0390a4823b1561030c576040517f23de66510000000000000000000000000000000000000000000000000000000081525f600482018190526001600160a01b039093166024820152604481019190915291829081838160648101615766565b7fec442f05000000000000000000000000000000000000000000000000000000005f526001600160a01b03841660045260245ffd5b5f9190825b8151841015615946576158ea8483612ab4565b5160ff916158f78661327f565b91610100808410156153cd5783810390811161282b57808510156159415750835b60059081116153cd57816007911c1661344d57600193601f9116831b921b1916179301926158d7565b615918565b64ffffffffff16925050565b670de0b5cad2bef00082116128da5764174876e8006103509204906153b3565b90670de0b5cad2bef00081116128da576103509164174876e80060429204906153f5565b906001600160a01b038216916040517fce20ece70000000000000000000000000000000000000000000000000000000081526020908181600481885afa908115610b0f575f91615b13575b508310615aeb576040517f654cf15d0000000000000000000000000000000000000000000000000000000081528181600481885afa918215610b0f575f92615ace575b50508211615aa6578181615a90615a797f89d41522342fabac1471ca6073a5623e5caf367b03ca6e9a001478d0cf8be4a195615a73615aa1966001600160a01b03165f525f60205260405f2090565b54613402565b916001600160a01b03165f525f60205260405f2090565b556040519081529081906020820190565b0390a2565b7f7f47834b000000000000000000000000000000000000000000000000000000005f5260045ffd5b615ae49250803d10610b0857610af981836107be565b5f80615a24565b7fbfb20688000000000000000000000000000000000000000000000000000000005f5260045ffd5b615b2a9150823d8411610b0857610af981836107be565b5f6159e1565b9093925f94615b43846080850151612ab4565b51818111615b53575b5050505050565b615b93959650615b8d9392615b8692615b6c920361383f565b9360a0615b7d8260c0860151612ab4565b51930151612ab4565b5190613295565b906133de565b905f80808080615b4c565b906001600160a01b03165f5260205260405f205d56fea26469706673582212209b6d070b93b07f2f918eb2ee3b475895292846f165f7b9c88bc2972914aecaac64736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x18 JUMPI JUMPDEST CALLDATASIZE PUSH2 0x2EAE JUMPI PUSH2 0x2E86 JUMP JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH3 0xFDFA13 EQ PUSH2 0x2F6 JUMPI DUP1 PUSH4 0x13D21CDF EQ PUSH2 0x2F1 JUMPI DUP1 PUSH4 0x13EF8A5D EQ PUSH2 0x2EC JUMPI DUP1 PUSH4 0x15E32046 EQ PUSH2 0x2E7 JUMPI DUP1 PUSH4 0x1BA0AE45 EQ PUSH2 0x2E2 JUMPI DUP1 PUSH4 0x4AFBAF5A EQ PUSH2 0x2DD JUMPI DUP1 PUSH4 0x4D472BDD EQ PUSH2 0x2D8 JUMPI DUP1 PUSH4 0x4F037EE7 EQ PUSH2 0x2D3 JUMPI DUP1 PUSH4 0x532CEC7C EQ PUSH2 0x2CE JUMPI DUP1 PUSH4 0x535CFD8A EQ PUSH2 0x2C9 JUMPI DUP1 PUSH4 0x590E8145 EQ PUSH2 0x2C4 JUMPI DUP1 PUSH4 0x67E0E076 EQ PUSH2 0x2BF JUMPI DUP1 PUSH4 0x6844846B EQ PUSH2 0x2BA JUMPI DUP1 PUSH4 0x6C9BC732 EQ PUSH2 0x2B5 JUMPI DUP1 PUSH4 0x70600089 EQ PUSH2 0x2B0 JUMPI DUP1 PUSH4 0x757D64B3 EQ PUSH2 0x2AB JUMPI DUP1 PUSH4 0x7E361BDE EQ PUSH2 0x2A6 JUMPI DUP1 PUSH4 0x809846D1 EQ PUSH2 0x2A1 JUMPI DUP1 PUSH4 0x8380EDB7 EQ PUSH2 0x29C JUMPI DUP1 PUSH4 0x85E0B999 EQ PUSH2 0x297 JUMPI DUP1 PUSH4 0x85F2DBD4 EQ PUSH2 0x292 JUMPI DUP1 PUSH4 0x927DA105 EQ PUSH2 0x28D JUMPI DUP1 PUSH4 0x96787092 EQ PUSH2 0x288 JUMPI DUP1 PUSH4 0x9E825FF5 EQ PUSH2 0x283 JUMPI DUP1 PUSH4 0xA07D6040 EQ PUSH2 0x27E JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x279 JUMPI DUP1 PUSH4 0xACE9B89B EQ PUSH2 0x274 JUMPI DUP1 PUSH4 0xB45090F9 EQ PUSH2 0x26F JUMPI DUP1 PUSH4 0xB4AEF0AB EQ PUSH2 0x26A JUMPI DUP1 PUSH4 0xBA8A2BE0 EQ PUSH2 0x265 JUMPI DUP1 PUSH4 0xBE7D628A EQ PUSH2 0x260 JUMPI DUP1 PUSH4 0xC673BDAF EQ PUSH2 0x25B JUMPI DUP1 PUSH4 0xC8088247 EQ PUSH2 0x256 JUMPI DUP1 PUSH4 0xCA4F2803 EQ PUSH2 0x251 JUMPI DUP1 PUSH4 0xCE8630D4 EQ PUSH2 0x24C JUMPI DUP1 PUSH4 0xD2C725E0 EQ PUSH2 0x247 JUMPI DUP1 PUSH4 0xDB817187 EQ PUSH2 0x242 JUMPI DUP1 PUSH4 0xE1F21C67 EQ PUSH2 0x23D JUMPI DUP1 PUSH4 0xE4DC2AA4 EQ PUSH2 0x238 JUMPI DUP1 PUSH4 0xE68010C6 EQ PUSH2 0x233 JUMPI DUP1 PUSH4 0xE9DDEB26 EQ PUSH2 0x22E JUMPI DUP1 PUSH4 0xEDFA3568 EQ PUSH2 0x229 JUMPI DUP1 PUSH4 0xEEEC802F EQ PUSH2 0x224 JUMPI DUP1 PUSH4 0xF29486A1 EQ PUSH2 0x21F JUMPI DUP1 PUSH4 0xF7888AEC EQ PUSH2 0x21A JUMPI PUSH4 0xFBFA77CF SUB PUSH2 0xE JUMPI PUSH2 0x276C JUMP JUMPDEST PUSH2 0x2703 JUMP JUMPDEST PUSH2 0x2669 JUMP JUMPDEST PUSH2 0x24CC JUMP JUMPDEST PUSH2 0x2476 JUMP JUMPDEST PUSH2 0x23BA JUMP JUMPDEST PUSH2 0x226A JUMP JUMPDEST PUSH2 0x2082 JUMP JUMPDEST PUSH2 0x2039 JUMP JUMPDEST PUSH2 0x1FF5 JUMP JUMPDEST PUSH2 0x1FB7 JUMP JUMPDEST PUSH2 0x1EBF JUMP JUMPDEST PUSH2 0x1E11 JUMP JUMPDEST PUSH2 0x1D69 JUMP JUMPDEST PUSH2 0x1D21 JUMP JUMPDEST PUSH2 0x1CCD JUMP JUMPDEST PUSH2 0x1B18 JUMP JUMPDEST PUSH2 0x1AEE JUMP JUMPDEST PUSH2 0x1AA2 JUMP JUMPDEST PUSH2 0x1A13 JUMP JUMPDEST PUSH2 0x19E2 JUMP JUMPDEST PUSH2 0x1527 JUMP JUMPDEST PUSH2 0x14C5 JUMP JUMPDEST PUSH2 0x1481 JUMP JUMPDEST PUSH2 0x1431 JUMP JUMPDEST PUSH2 0x1403 JUMP JUMPDEST PUSH2 0x1399 JUMP JUMPDEST PUSH2 0x1353 JUMP JUMPDEST PUSH2 0x127A JUMP JUMPDEST PUSH2 0x1082 JUMP JUMPDEST PUSH2 0xF2C JUMP JUMPDEST PUSH2 0xEDF JUMP JUMPDEST PUSH2 0xE9C JUMP JUMPDEST PUSH2 0xE54 JUMP JUMPDEST PUSH2 0xCFE JUMP JUMPDEST PUSH2 0xC21 JUMP JUMPDEST PUSH2 0xB78 JUMP JUMPDEST PUSH2 0xB14 JUMP JUMPDEST PUSH2 0xA12 JUMP JUMPDEST PUSH2 0x930 JUMP JUMPDEST PUSH2 0x6C1 JUMP JUMPDEST PUSH2 0x67E JUMP JUMPDEST PUSH2 0x5DC JUMP JUMPDEST PUSH2 0x5B2 JUMP JUMPDEST PUSH2 0x4C3 JUMP JUMPDEST PUSH2 0x353 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SUB PUSH2 0x30C JUMPI JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH2 0x104 CALLDATALOAD SWAP1 PUSH2 0x31E DUP3 PUSH2 0x2FB JUMP JUMPDEST JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH2 0x31E DUP3 PUSH2 0x2FB JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x40 SWAP2 ADD SLT PUSH2 0x30C JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x343 DUP2 PUSH2 0x2FB JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD PUSH2 0x350 DUP2 PUSH2 0x2FB JUMP JUMPDEST SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH2 0x3A2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x36E CALLDATASIZE PUSH2 0x32B JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x378 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x381 DUP2 PUSH2 0x2F52 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x6 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x80 SHR PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x3CD JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x3BF JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x3F4 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x60 SWAP3 DUP1 MLOAD PUSH2 0x432 DUP2 PUSH2 0x3EA JUMP JUMPDEST DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x473 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 DUP3 PUSH2 0x485 PUSH1 0x1 SWAP3 DUP8 MLOAD PUSH2 0x421 JUMP JUMPDEST SWAP6 ADD SWAP4 SWAP3 SWAP2 ADD PUSH2 0x465 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x4AF JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x4A1 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH2 0x5A4 PUSH2 0x505 PUSH1 0x4 CALLDATALOAD PUSH2 0x4E6 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x4EE PUSH2 0x27AF JUMP JUMPDEST POP PUSH2 0x4F7 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x500 DUP2 PUSH2 0x2F9D JUMP JUMPDEST PUSH2 0x2FEA JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE DUP1 MLOAD PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x530 PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0xE0 PUSH1 0x40 DUP7 ADD MSTORE PUSH2 0x100 DUP6 ADD SWAP1 PUSH2 0x3AE JUMP JUMPDEST PUSH1 0xC0 PUSH2 0x592 PUSH2 0x57F PUSH2 0x56B PUSH2 0x557 PUSH1 0x40 DUP8 ADD MLOAD SWAP6 PUSH1 0x1F NOT SWAP7 DUP8 DUP12 DUP4 SUB ADD PUSH1 0x60 DUP13 ADD MSTORE PUSH2 0x454 JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MLOAD DUP7 DUP11 DUP4 SUB ADD PUSH1 0x80 DUP12 ADD MSTORE PUSH2 0x490 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD DUP6 DUP10 DUP4 SUB ADD PUSH1 0xA0 DUP11 ADD MSTORE PUSH2 0x490 JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD DUP5 DUP9 DUP4 SUB ADD DUP5 DUP10 ADD MSTORE PUSH2 0x490 JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 DUP5 DUP4 SUB ADD PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x490 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH0 SWAP2 SUB SLT PUSH2 0x30C JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH2 0x5CA PUSH2 0x2EF8 JUMP JUMPDEST PUSH1 0x20 PUSH1 0xFF PUSH1 0x9 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x80 PUSH1 0x4 CALLDATALOAD PUSH2 0x5FB DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x603 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x60C DUP2 PUSH2 0x2F52 JUMP JUMPDEST PUSH2 0x615 DUP2 PUSH2 0x3201 JUMP JUMPDEST PUSH2 0x642 SWAP3 SWAP2 SWAP3 PUSH32 0x0 DUP3 PUSH2 0x2813 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP2 PUSH1 0x40 MLOAD SWAP4 ISZERO ISZERO DUP5 MSTORE PUSH4 0xFFFFFFFF DUP1 SWAP3 AND PUSH1 0x20 DUP6 ADD MSTORE AND PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x4 CALLDATALOAD PUSH2 0x6E0 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x6E8 PUSH2 0x2EF8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0xE DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x750 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH2 0x707 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x750 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x750 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x750 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH2 0x140 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x750 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x750 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x31E DUP3 PUSH2 0x785 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x31E DUP3 PUSH2 0x734 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x31E DUP3 PUSH2 0x7A1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x160 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x750 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x31E DUP3 PUSH2 0x769 JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x30C JUMPI JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH2 0x31E DUP3 PUSH2 0x836 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x750 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x30C JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x87D DUP2 PUSH2 0x84B JUMP JUMPDEST SWAP4 PUSH2 0x88B PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x7BE JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x30C JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x8B4 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x8A6 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x750 JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH2 0x8EB DUP3 PUSH2 0x8C3 JUMP JUMPDEST SWAP2 PUSH2 0x8F9 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x7BE JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0x30C JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x30C JUMPI DUP2 PUSH1 0x20 PUSH2 0x350 SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0x8DF JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x3 NOT PUSH1 0x40 DUP2 CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x94E DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP4 GT PUSH2 0x30C JUMPI PUSH1 0xE0 SWAP1 DUP4 CALLDATASIZE SUB ADD SLT PUSH2 0x30C JUMPI PUSH2 0x977 PUSH2 0x7E1 JUMP JUMPDEST SWAP1 PUSH2 0x984 DUP4 PUSH1 0x4 ADD PUSH2 0x840 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x24 DUP4 ADD CALLDATALOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x44 DUP4 ADD CALLDATALOAD DUP5 DUP2 GT PUSH2 0x30C JUMPI PUSH2 0x9AC SWAP1 PUSH1 0x4 CALLDATASIZE SWAP2 DUP7 ADD ADD PUSH2 0x863 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x64 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x84 DUP4 ADD CALLDATALOAD PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x9D1 PUSH1 0xA4 DUP5 ADD PUSH2 0x320 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC4 DUP4 ADD CALLDATALOAD SWAP4 DUP5 GT PUSH2 0x30C JUMPI PUSH2 0x9F8 PUSH2 0xA02 SWAP4 PUSH1 0x4 PUSH2 0x5A4 SWAP7 CALLDATASIZE SWAP3 ADD ADD PUSH2 0x915 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x2830 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0xA2F DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0xA37 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0xA40 DUP2 PUSH2 0x2F9D JUMP JUMPDEST PUSH2 0xA8D PUSH1 0x20 PUSH1 0x80 PUSH2 0xA50 DUP5 PUSH2 0x2FEA JUMP JUMPDEST ADD MLOAD PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x984DE9E800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x40 PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x490 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x24 DUP4 ADD MSTORE SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND GAS STATICCALL DUP1 ISZERO PUSH2 0xB0F JUMPI PUSH2 0x5A4 SWAP3 PUSH2 0xA02 SWAP3 PUSH0 SWAP3 PUSH2 0xADA JUMPI JUMPDEST POP PUSH2 0xAD3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP1 PUSH2 0x33DE JUMP JUMPDEST PUSH2 0xAD3 SWAP2 SWAP3 POP PUSH2 0xB01 SWAP1 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xB08 JUMPI JUMPDEST PUSH2 0xAF9 DUP2 DUP4 PUSH2 0x7BE JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x295C JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0xAB7 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xAEF JUMP JUMPDEST PUSH2 0x2988 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0xB39 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0xB41 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0xB4A DUP2 PUSH2 0x2F52 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 SHR AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0x350 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x490 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH2 0x5A4 PUSH1 0x80 PUSH2 0xBAE PUSH1 0x4 CALLDATALOAD PUSH2 0xB9D DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0xBA5 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x500 DUP2 PUSH2 0x2F52 JUMP JUMPDEST ADD MLOAD PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x490 JUMP JUMPDEST SWAP2 DUP2 PUSH1 0x1F DUP5 ADD SLT ISZERO PUSH2 0x30C JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x30C JUMPI PUSH1 0x20 DUP4 DUP2 DUP7 ADD SWAP6 ADD ADD GT PUSH2 0x30C JUMPI JUMP JUMPDEST PUSH1 0x20 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x30C JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x30C JUMPI PUSH2 0xC1D SWAP2 PUSH1 0x4 ADD PUSH2 0xBC4 JUMP JUMPDEST SWAP1 SWAP2 JUMP JUMPDEST PUSH1 0x20 PUSH2 0xC36 PUSH2 0xC2F CALLDATASIZE PUSH2 0xBF2 JUMP JUMPDEST CALLDATASIZE SWAP2 PUSH2 0x8DF JUMP JUMPDEST DUP2 DUP2 MLOAD SWAP2 ADD KECCAK256 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0xC63 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0xC55 JUMP JUMPDEST SWAP3 SWAP1 PUSH2 0xC98 SWAP1 SWAP6 SWAP5 SWAP3 SWAP6 PUSH1 0x80 DUP6 MSTORE PUSH1 0x80 DUP6 ADD SWAP1 PUSH2 0xC44 JUMP JUMPDEST PUSH1 0x20 SWAP1 DUP5 DUP2 SUB PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x20 DUP1 DUP9 MLOAD SWAP3 DUP4 DUP2 MSTORE ADD SWAP8 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0xCE1 JUMPI POP POP POP POP DUP5 PUSH2 0xCD3 SWAP2 DUP5 PUSH2 0x350 SWAP7 SWAP8 SUB PUSH1 0x40 DUP7 ADD MSTORE PUSH2 0x490 JUMP JUMPDEST SWAP2 PUSH1 0x60 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x490 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP8 DUP3 PUSH2 0xCF3 PUSH1 0x1 SWAP3 DUP12 MLOAD PUSH2 0x421 JUMP JUMPDEST SWAP10 ADD SWAP4 SWAP3 SWAP2 ADD PUSH2 0xCB2 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0xD1B DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0xD23 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0xD2C DUP2 PUSH2 0x2F52 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0xD64 PUSH2 0xD5F DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0x2993 JUMP JUMPDEST SWAP1 DUP2 MLOAD SWAP3 PUSH2 0xD71 DUP5 PUSH2 0x2A08 JUMP JUMPDEST SWAP4 PUSH2 0xD7B DUP2 PUSH2 0x2A56 JUMP JUMPDEST SWAP2 PUSH2 0xD85 DUP3 PUSH2 0x2A56 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0xDA0 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0x5A4 DUP9 DUP9 DUP13 DUP13 DUP6 PUSH2 0xC80 JUMP JUMPDEST DUP1 PUSH2 0xDB5 PUSH1 0x1 SWAP3 DUP5 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0xE0C PUSH2 0xE07 DUP11 PUSH2 0xDF2 PUSH2 0xDE5 DUP7 PUSH2 0xDDF DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP4 PUSH2 0x2AB4 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0x2AD9 JUMP JUMPDEST PUSH2 0xE16 DUP4 DUP13 PUSH2 0x2AB4 JUMP JUMPDEST MSTORE PUSH2 0xE21 DUP3 DUP12 PUSH2 0x2AB4 JUMP JUMPDEST POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0xE3F DUP4 DUP10 PUSH2 0x2AB4 JUMP JUMPDEST MSTORE PUSH1 0x80 SHR PUSH2 0xE4D DUP3 DUP10 PUSH2 0x2AB4 JUMP JUMPDEST MSTORE ADD PUSH2 0xD88 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x4 CALLDATALOAD PUSH2 0xE73 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0xE7B PUSH2 0x2EF8 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0xE DUP3 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO ISZERO PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x20 PUSH2 0xED4 PUSH1 0x4 CALLDATALOAD PUSH2 0xEBE DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0xEC6 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0xECF DUP2 PUSH2 0x2F52 JUMP JUMPDEST PUSH2 0x3201 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0xF04 DUP2 PUSH2 0x2FB JUMP JUMPDEST AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH2 0xF1C PUSH1 0x24 CALLDATALOAD PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x3402 JUMP JUMPDEST SWAP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH0 DUP1 PUSH2 0xF3C CALLDATASIZE PUSH2 0xBF2 JUMP JUMPDEST SWAP1 PUSH2 0xF45 PUSH2 0x3475 JUMP JUMPDEST PUSH2 0xF4D PUSH2 0x2EF8 JUMP JUMPDEST DUP2 PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP3 DUP4 CALLDATACOPY DUP2 ADD DUP4 DUP2 MSTORE SUB SWAP1 DUP3 CALLER GAS CALL PUSH2 0xF69 PUSH2 0x2B18 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0xFB6 JUMPI SWAP1 PUSH2 0xF7F DUP2 PUSH2 0xFB2 SWAP4 CALLER PUSH2 0x3509 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x2465 JUMP JUMPDEST SUB SWAP1 REVERT JUMPDEST POP PUSH1 0x4 DUP2 MLOAD LT PUSH2 0x1035 JUMPI PUSH32 0x5AB64FB800000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP4 ADD MLOAD AND SUB PUSH2 0x34FA JUMPI PUSH32 0x28F9554100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0xA728568900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 PUSH2 0x1074 PUSH2 0x350 SWAP4 PUSH1 0x40 DUP5 MSTORE PUSH1 0x40 DUP5 ADD SWAP1 PUSH2 0x490 JUMP JUMPDEST SWAP2 PUSH1 0x20 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x490 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x109F DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x10A7 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x10B0 DUP2 PUSH2 0x2F52 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP2 PUSH1 0x40 MLOAD DUP1 SWAP4 DUP5 SWAP2 PUSH1 0x20 DUP3 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP4 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x117A JUMPI POP POP POP PUSH2 0x1101 SWAP3 POP SUB DUP4 PUSH2 0x7BE JUMP JUMPDEST PUSH2 0x110D DUP3 MLOAD DUP1 SWAP3 PUSH2 0x3595 JUMP JUMPDEST SWAP2 PUSH2 0x1117 DUP3 PUSH2 0x2A56 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0x1130 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0x5A4 DUP9 DUP9 DUP4 PUSH2 0x105D JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH2 0x1169 PUSH2 0x1164 PUSH2 0xE07 PUSH2 0x1157 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0xDF2 PUSH2 0xDE5 DUP7 DUP11 PUSH2 0x2AB4 JUMP JUMPDEST PUSH2 0x35E7 JUMP JUMPDEST PUSH2 0x1173 DUP3 DUP10 PUSH2 0x2AB4 JUMP JUMPDEST MSTORE ADD PUSH2 0x111A JUMP JUMPDEST DUP6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP3 AND AND DUP5 MSTORE PUSH1 0x1 SWAP6 DUP7 ADD SWAP6 DUP9 SWAP6 POP PUSH1 0x20 SWAP1 SWAP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x10EB JUMP JUMPDEST PUSH1 0xC0 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x30C JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x11BA DUP2 PUSH2 0x2FB JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD PUSH2 0x11C7 DUP2 PUSH2 0x2FB JUMP JUMPDEST SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x44 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x30C JUMPI DUP2 PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x30C JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD PUSH2 0x11F5 DUP2 PUSH2 0x84B JUMP JUMPDEST SWAP2 PUSH2 0x1203 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x7BE JUMP JUMPDEST DUP2 DUP4 MSTORE PUSH1 0x20 SWAP2 PUSH1 0x24 PUSH1 0x20 DUP6 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 DUP6 DUP4 GT PUSH2 0x30C JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1261 JUMPI POP POP POP POP SWAP3 PUSH1 0x64 CALLDATALOAD DUP4 DUP2 GT PUSH2 0x30C JUMPI DUP3 PUSH2 0x1246 SWAP2 PUSH1 0x4 ADD PUSH2 0x863 JUMP JUMPDEST SWAP3 PUSH1 0x84 CALLDATALOAD SWAP3 PUSH1 0xA4 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x30C JUMPI PUSH2 0x350 SWAP2 PUSH1 0x4 ADD PUSH2 0x915 JUMP JUMPDEST DUP4 DUP1 SWAP2 DUP4 CALLDATALOAD PUSH2 0x126F DUP2 PUSH2 0x2FB JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x1223 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH2 0x1319 PUSH1 0x20 PUSH2 0x128D CALLDATASIZE PUSH2 0x11A2 JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x129A SWAP8 SWAP4 SWAP8 PUSH2 0x36C3 JUMP JUMPDEST PUSH2 0x1305 PUSH2 0x12F2 PUSH1 0x40 MLOAD SWAP10 DUP11 SWAP9 DUP10 SWAP9 PUSH32 0xBA8A2BE000000000000000000000000000000000000000000000000000000000 DUP11 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND PUSH1 0x4 DUP12 ADD MSTORE AND PUSH1 0x24 DUP10 ADD MSTORE PUSH1 0xC0 PUSH1 0x44 DUP10 ADD MSTORE PUSH1 0xC4 DUP9 ADD SWAP1 PUSH2 0xC44 JUMP JUMPDEST PUSH1 0x3 NOT SWAP3 DUP4 DUP9 DUP4 SUB ADD PUSH1 0x64 DUP10 ADD MSTORE PUSH2 0x490 JUMP JUMPDEST SWAP3 PUSH1 0x84 DUP7 ADD MSTORE DUP5 DUP4 SUB ADD PUSH1 0xA4 DUP6 ADD MSTORE PUSH2 0x2440 JUMP JUMPDEST SUB DUP2 PUSH0 ADDRESS GAS CALL DUP1 ISZERO PUSH2 0xB0F JUMPI PUSH2 0x1334 JUMPI JUMPDEST PUSH2 0x1332 PUSH2 0x3718 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x134C SWAP1 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xB08 JUMPI PUSH2 0xAF9 DUP2 DUP4 PUSH2 0x7BE JUMP JUMPDEST POP PUSH0 PUSH2 0x132A JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH2 0x136B PUSH2 0x2EF8 JUMP JUMPDEST PUSH1 0x20 PUSH32 0x0 TLOAD PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x13F9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x13C5 CALLDATASIZE PUSH2 0x32B JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x13CF PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x13D8 DUP2 PUSH2 0x2F52 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x6 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH2 0x141B PUSH2 0x2EF8 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xA SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x20 PUSH2 0x1479 PUSH1 0x4 CALLDATALOAD PUSH2 0x1453 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x145F DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x146C DUP4 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x1474 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x373D JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x14A6 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x14AE PUSH2 0x2EF8 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x20 PUSH2 0x1479 PUSH1 0x4 CALLDATALOAD PUSH2 0x14E7 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x14EF PUSH2 0x2EF8 JUMP JUMPDEST PUSH32 0x0 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x1544 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x1550 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x64 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x30C JUMPI PUSH2 0x1574 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x863 JUMP JUMPDEST PUSH2 0x157C PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x1584 PUSH2 0x379F JUMP JUMPDEST PUSH2 0x158C PUSH2 0x36C3 JUMP JUMPDEST PUSH2 0x1595 DUP5 PUSH2 0x2F9D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 DUP2 AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x20 SWAP1 PUSH0 PUSH1 0x20 MSTORE PUSH2 0x15BE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x1 SWAP1 PUSH1 0x3 SHR AND SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x19B6 JUMPI PUSH2 0x15DE DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP7 PUSH2 0x15E7 PUSH2 0x2B47 JUMP JUMPDEST SWAP3 PUSH2 0x1606 PUSH2 0xD5F DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP1 DUP6 MSTORE MLOAD SWAP7 PUSH2 0x161B PUSH1 0x40 DUP7 ADD SWAP9 DUP1 DUP11 MSTORE PUSH2 0x2A56 JUMP JUMPDEST SWAP8 PUSH1 0x80 DUP7 ADD SWAP9 DUP10 MSTORE PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x166E JUMPI DUP1 PUSH2 0x165C PUSH2 0x1646 PUSH1 0x1 SWAP4 DUP16 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0x1667 DUP3 DUP14 MLOAD PUSH2 0x2AB4 JUMP JUMPDEST MSTORE ADD PUSH2 0x1625 JUMP JUMPDEST POP DUP10 SWAP9 SWAP7 SWAP8 SWAP9 PUSH2 0x169C DUP2 DUP10 MLOAD PUSH2 0x1695 DUP13 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP1 PUSH2 0x37F0 JUMP JUMPDEST SWAP10 PUSH2 0x16A7 DUP4 MLOAD PUSH2 0x2A56 JUMP JUMPDEST SWAP6 PUSH1 0x60 DUP10 ADD SWAP7 DUP8 MSTORE PUSH2 0x170E DUP12 PUSH32 0x0 TLOAD PUSH32 0x0 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP1 JUMP JUMPDEST ISZERO ISZERO PUSH1 0xA0 DUP11 ADD DUP2 DUP2 MSTORE SWAP6 SWAP1 PUSH2 0x1989 JUMPI JUMPDEST PUSH0 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x186E JUMPI PUSH2 0x174A DUP2 DUP16 DUP11 DUP15 DUP4 DUP15 PUSH2 0x173C DUP15 MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH2 0x181E JUMPI JUMPDEST POP POP POP POP PUSH2 0x2AB4 JUMP JUMPDEST MLOAD PUSH2 0x1755 DUP3 DUP13 PUSH2 0x2AB4 JUMP JUMPDEST MLOAD GT PUSH2 0x17B5 JUMPI DUP1 DUP13 DUP16 DUP3 PUSH2 0x17A8 DUP16 DUP3 PUSH2 0x17AE SWAP5 PUSH2 0x178F PUSH2 0x177E PUSH2 0xDE5 PUSH1 0x1 SWAP12 PUSH2 0x1794 SWAP7 MLOAD PUSH2 0x2AB4 JUMP JUMPDEST PUSH2 0x1788 DUP5 DUP5 PUSH2 0x2AB4 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x3861 JUMP JUMPDEST PUSH2 0x2AB4 JUMP JUMPDEST MLOAD SWAP4 MLOAD SWAP4 PUSH2 0x17A2 DUP4 DUP7 PUSH2 0x2AB4 JUMP JUMPDEST MLOAD PUSH2 0x2BB7 JUMP JUMPDEST SWAP3 PUSH2 0x2AB4 JUMP JUMPDEST MSTORE ADD PUSH2 0x1720 JUMP JUMPDEST DUP14 DUP11 PUSH2 0x17DE DUP4 PUSH2 0x17D7 DUP16 SWAP6 PUSH2 0x17D1 PUSH2 0xDE5 DUP3 PUSH2 0x181B SWAP10 MLOAD PUSH2 0x2AB4 JUMP JUMPDEST SWAP6 PUSH2 0x2AB4 JUMP JUMPDEST MLOAD SWAP3 PUSH2 0x2AB4 JUMP JUMPDEST MLOAD PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST PUSH0 REVERT JUMPDEST PUSH2 0x183D PUSH2 0x184F SWAP4 PUSH2 0x185A SWAP6 PUSH2 0x1833 DUP6 DUP10 PUSH2 0x2AB4 JUMP JUMPDEST MLOAD SWAP2 ADD MLOAD SWAP1 PUSH2 0x383F JUMP JUMPDEST PUSH2 0x1848 DUP4 DUP4 MLOAD PUSH2 0x2AB4 JUMP JUMPDEST MSTORE MLOAD PUSH2 0x2AB4 JUMP JUMPDEST MLOAD PUSH2 0x17A2 DUP5 DUP5 PUSH2 0x2AB4 JUMP JUMPDEST PUSH2 0x1864 DUP4 DUP4 PUSH2 0x2AB4 JUMP JUMPDEST MSTORE DUP11 DUP15 DUP4 DUP15 PUSH2 0x1741 JUMP JUMPDEST POP DUP11 SWAP6 POP SWAP2 DUP8 SWAP2 DUP14 SWAP4 DUP14 PUSH2 0x1893 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP7 PUSH0 JUMPDEST DUP10 MLOAD DUP2 LT ISZERO PUSH2 0x18E4 JUMPI DUP1 PUSH2 0x18CB DUP13 PUSH2 0x18C4 DUP4 PUSH2 0x18BC PUSH1 0x1 SWAP7 DUP16 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP3 MLOAD PUSH2 0x2AB4 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x389F JUMP JUMPDEST PUSH2 0x18DD DUP3 DUP13 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE ADD PUSH2 0x1896 JUMP JUMPDEST PUSH2 0x5A4 DUP9 PUSH0 DUP10 DUP10 PUSH32 0xFBE5B0D79FB94F1E81C0A92BF86AE9D3A19E9D1BF6202C0D3E75120F65D5D8A5 DUP11 DUP11 PUSH2 0x1962 PUSH2 0x1950 DUP13 PUSH2 0x1939 DUP14 PUSH2 0x1925 DUP2 CALLER DUP9 DUP7 PUSH2 0x38AD JUMP JUMPDEST PUSH2 0x192D PUSH2 0x3929 JUMP JUMPDEST PUSH2 0x1979 JUMPI JUMPDEST DUP6 DUP4 PUSH2 0x398E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP6 MLOAD DUP9 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP5 AND SWAP8 DUP5 PUSH2 0x2BC4 JUMP JUMPDEST SUB SWAP1 LOG4 PUSH2 0x196D PUSH2 0x3718 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0xB67 JUMP JUMPDEST PUSH2 0x1984 DUP2 DUP8 DUP6 PUSH2 0x394B JUMP JUMPDEST PUSH2 0x1932 JUMP JUMPDEST PUSH2 0x19AC PUSH2 0x19A6 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x32A8 JUMP JUMPDEST PUSH1 0x20 DUP12 ADD MSTORE PUSH2 0x171E JUMP JUMPDEST DUP4 PUSH32 0xEF029ADF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH2 0x19FA PUSH2 0x2EF8 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x9 SLOAD PUSH1 0x8 SHR AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x20 PUSH2 0x1A98 PUSH1 0x4 CALLDATALOAD PUSH2 0x1A35 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x1A3D PUSH2 0x2EF8 JUMP JUMPDEST PUSH32 0x0 TLOAD PUSH32 0x0 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x1AC7 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x1ACF PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x1AD8 DUP2 PUSH2 0x2F52 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH2 0x1479 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x32A8 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH2 0x1B06 PUSH2 0x2EF8 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x1 PUSH1 0x7 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH2 0x1B26 CALLDATASIZE PUSH2 0x11A2 JUMP JUMPDEST SWAP3 SWAP2 PUSH2 0x1B30 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x1B38 PUSH2 0x379F JUMP JUMPDEST PUSH2 0x1B41 DUP7 PUSH2 0x2F52 JUMP JUMPDEST PUSH2 0x1B49 PUSH2 0x36C3 JUMP JUMPDEST PUSH2 0x1B52 DUP7 PUSH2 0x3B59 JUMP JUMPDEST PUSH2 0x1B5B DUP7 PUSH2 0x2FEA JUMP JUMPDEST SWAP3 PUSH2 0x1B6A DUP5 MLOAD PUSH1 0x1 SWAP1 DUP2 SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x1C98 JUMPI SWAP2 DUP4 SWAP2 PUSH2 0x5A4 SWAP8 SWAP6 SWAP4 PUSH2 0x1B8C PUSH1 0x20 PUSH2 0x1BDB SWAP10 SWAP8 ADD MLOAD MLOAD DUP4 MLOAD SWAP1 PUSH2 0x3BA7 JUMP JUMPDEST PUSH1 0xC0 DUP5 ADD SWAP6 DUP7 MLOAD PUSH2 0x1BA4 PUSH1 0xA0 DUP8 ADD SWAP2 DUP3 MLOAD SWAP1 DUP7 PUSH2 0x3BD6 JUMP JUMPDEST SWAP8 DUP10 PUSH2 0x1BB5 DUP9 MLOAD PUSH1 0x1 SWAP1 PUSH1 0x8 SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x1C27 JUMPI JUMPDEST DUP10 SWAP5 SWAP3 POP DUP8 SWAP2 POP SWAP3 PUSH2 0x1BCD SWAP7 SWAP6 SWAP4 PUSH2 0x3DBF JUMP JUMPDEST SWAP5 DUP6 SWAP2 MLOAD PUSH1 0x1 SWAP1 PUSH1 0xA SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x1BEA JUMPI JUMPDEST DUP6 SWAP1 PUSH2 0xA02 PUSH2 0x3718 JUMP JUMPDEST PUSH2 0x1C18 PUSH2 0x1C0B PUSH2 0x1C1E SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 PUSH2 0x4077 JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP4 PUSH2 0x1BE0 JUMP JUMPDEST SWAP2 PUSH2 0x1C8B SWAP2 PUSH2 0x1C5D DUP10 SWAP12 DUP12 PUSH2 0x1C57 PUSH2 0x1C0B PUSH2 0x1BCD SWAP13 SWAP12 SWAP10 SWAP11 SWAP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x3C7C JUMP JUMPDEST PUSH2 0x1C81 PUSH2 0x1C7B DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP11 PUSH2 0x3D52 JUMP JUMPDEST MLOAD SWAP1 MLOAD SWAP1 DUP5 PUSH2 0x3BD6 JUMP JUMPDEST SWAP8 DUP2 SWAP4 SWAP3 SWAP5 SWAP6 POP DUP10 PUSH2 0x1BBA JUMP JUMPDEST PUSH32 0x218E374700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x1CF2 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x1CFA PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x1D03 DUP2 PUSH2 0x2F52 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x3 SHR AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x1D46 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x1D4E PUSH2 0x2EF8 JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x30C JUMPI PUSH2 0x1D9A SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xBC4 JUMP JUMPDEST PUSH2 0x1DA2 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x1DAB CALLER PUSH2 0x2F52 JUMP JUMPDEST DUP1 PUSH1 0x40 MLOAD SWAP3 PUSH1 0x20 DUP5 MSTORE DUP2 PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP5 ADD CALLDATACOPY PUSH0 PUSH1 0x40 DUP3 DUP5 ADD ADD MSTORE PUSH32 0x4BC4412E210115456903C65B5277D299A505E79F2EB852B92B1CA52D85856428 PUSH1 0x4 CALLDATALOAD SWAP3 PUSH1 0x40 DUP2 PUSH1 0x1F NOT PUSH1 0x1F CALLER SWAP7 ADD AND DUP2 ADD SUB ADD SWAP1 LOG3 STOP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0x350 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0xC44 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x1E2E DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x1E36 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x1E3F DUP2 PUSH2 0x2F52 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 PUSH1 0x20 DUP5 SLOAD SWAP2 DUP3 DUP2 MSTORE ADD SWAP4 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1E92 JUMPI PUSH2 0x5A4 DUP6 PUSH2 0x1E86 DUP2 DUP10 SUB DUP3 PUSH2 0x7BE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x1E00 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP5 PUSH1 0x1 PUSH2 0x1EB4 DUP2 SWAP3 DUP5 DUP10 SLOAD AND SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 SWAP3 AND DUP2 MSTORE ADD SWAP1 JUMP JUMPDEST SWAP7 ADD SWAP4 SWAP3 ADD SWAP1 PUSH2 0x1E6F JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH2 0x160 PUSH2 0x1F24 PUSH1 0x4 CALLDATALOAD PUSH2 0x1EE2 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x1EEA PUSH2 0x2BEF JUMP JUMPDEST POP PUSH2 0x1EF3 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x1EFC DUP2 PUSH2 0x2F52 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP1 PUSH2 0x4143 JUMP JUMPDEST PUSH2 0x1FB5 PUSH1 0x40 MLOAD DUP1 SWAP3 DUP1 MLOAD ISZERO ISZERO DUP3 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0x40 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0x60 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0x80 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0xA0 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0xC0 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0xE0 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 SWAP1 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 ADD MSTORE JUMP JUMPDEST RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x20 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH2 0x200D PUSH2 0x2EF8 JUMP JUMPDEST PUSH1 0x20 PUSH32 0x0 TLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH2 0x2077 PUSH1 0x4 CALLDATALOAD PUSH2 0x2059 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x2065 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x206D PUSH2 0x2EF8 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 CALLER PUSH2 0x4281 JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x20A7 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x20AF PUSH2 0x2EF8 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP1 ISZERO ISZERO SUB PUSH2 0x30C JUMPI JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD SWAP1 PUSH2 0x31E DUP3 PUSH2 0x20C6 JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x30C JUMPI JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x30C JUMPI PUSH1 0xA4 SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEDC PUSH1 0x80 SWAP2 ADD SLT PUSH2 0x30C JUMPI PUSH2 0x124 SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x1A0 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x30C JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x2169 DUP2 PUSH2 0x2FB JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x30C JUMPI DUP2 PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x30C JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD PUSH2 0x2195 DUP2 PUSH2 0x84B JUMP JUMPDEST SWAP2 PUSH1 0x40 SWAP2 PUSH2 0x21A6 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x7BE JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 SWAP1 PUSH1 0x24 PUSH1 0x20 DUP7 ADD SWAP2 PUSH1 0x7 SHL DUP5 ADD ADD SWAP3 DUP7 DUP5 GT PUSH2 0x30C JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x2204 JUMPI POP POP POP POP POP SWAP2 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x21DF PUSH2 0x20DD JUMP JUMPDEST SWAP2 PUSH2 0x21E8 PUSH2 0x20D0 JUMP JUMPDEST SWAP2 PUSH2 0x21F2 DUP2 PUSH2 0x20F0 JUMP JUMPDEST SWAP2 PUSH2 0x350 PUSH2 0x21FE PUSH2 0x310 JUMP JUMPDEST SWAP3 PUSH2 0x211F JUMP JUMPDEST PUSH1 0x80 DUP3 DUP9 SUB SLT PUSH2 0x30C JUMPI DUP3 PUSH1 0x80 SWAP2 DUP7 MLOAD PUSH2 0x221D DUP2 PUSH2 0x734 JUMP JUMPDEST DUP5 CALLDATALOAD PUSH2 0x2228 DUP2 PUSH2 0x2FB JUMP JUMPDEST DUP2 MSTORE DUP3 DUP6 ADD CALLDATALOAD PUSH2 0x2237 DUP2 PUSH2 0x836 JUMP JUMPDEST DUP4 DUP3 ADD MSTORE DUP8 DUP6 ADD CALLDATALOAD PUSH2 0x2248 DUP2 PUSH2 0x2FB JUMP JUMPDEST DUP9 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP7 ADD CALLDATALOAD SWAP1 PUSH2 0x225C DUP3 PUSH2 0x20C6 JUMP JUMPDEST DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x21C6 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH2 0x2278 CALLDATASIZE PUSH2 0x214F JUMP JUMPDEST SWAP1 SWAP7 SWAP6 SWAP5 SWAP3 PUSH2 0x2285 PUSH2 0x36C3 JUMP JUMPDEST ADDRESS EXTCODESIZE ISZERO PUSH2 0x30C JUMPI PUSH2 0x22EF SWAP8 PUSH0 SWAP8 PUSH1 0x40 PUSH2 0x2356 SWAP6 PUSH2 0x234B SWAP5 PUSH4 0xFFFFFFFF PUSH2 0x1A4 SWAP11 DUP5 MLOAD SWAP15 DUP16 SWAP14 DUP15 SWAP14 DUP15 PUSH32 0xEEEC802F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP11 AND PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x1A0 PUSH1 0x24 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x2C52 JUMP JUMPDEST SWAP11 PUSH1 0x44 DUP14 ADD MSTORE AND PUSH1 0x64 DUP12 ADD MSTORE ISZERO ISZERO PUSH1 0x84 DUP11 ADD MSTORE DUP3 DUP2 CALLDATALOAD PUSH2 0x230E DUP2 PUSH2 0x2FB JUMP JUMPDEST AND PUSH1 0xA4 DUP11 ADD MSTORE DUP3 PUSH1 0x20 DUP3 ADD CALLDATALOAD PUSH2 0x2323 DUP2 PUSH2 0x2FB JUMP JUMPDEST AND PUSH1 0xC4 DUP11 ADD MSTORE ADD CALLDATALOAD PUSH2 0x2334 DUP2 PUSH2 0x2FB JUMP JUMPDEST AND PUSH1 0xE4 DUP8 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x104 DUP7 ADD MSTORE JUMP JUMPDEST PUSH2 0x124 DUP5 ADD SWAP1 PUSH2 0x2CC1 JUMP JUMPDEST SUB DUP2 DUP4 ADDRESS GAS CALL DUP1 ISZERO PUSH2 0xB0F JUMPI PUSH2 0x236E JUMPI PUSH2 0x1332 PUSH2 0x3718 JUMP JUMPDEST DUP1 PUSH2 0x237B PUSH2 0x2381 SWAP3 PUSH2 0x755 JUMP JUMPDEST DUP1 PUSH2 0x5A8 JUMP JUMPDEST PUSH0 PUSH2 0x132A JUMP JUMPDEST PUSH2 0x31E SWAP1 SWAP3 SWAP2 SWAP3 PUSH1 0x60 DUP2 ADD SWAP4 PUSH1 0x40 SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH2 0x5A4 PUSH1 0x4 CALLDATALOAD PUSH2 0x23DA DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x23E2 PUSH2 0x29EA JUMP JUMPDEST POP PUSH2 0x23EB PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x23F4 DUP2 PUSH2 0x2F52 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x2 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x241A DUP5 PUSH2 0x769 JUMP JUMPDEST DUP3 DUP2 SLOAD AND DUP5 MSTORE DUP3 PUSH1 0x1 DUP3 ADD SLOAD AND PUSH1 0x20 DUP6 ADD MSTORE ADD SLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x2387 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0x350 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x2440 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH2 0x5A4 PUSH2 0x24B8 PUSH0 DUP1 PUSH2 0x249F PUSH2 0x248F CALLDATASIZE PUSH2 0xBF2 JUMP JUMPDEST PUSH2 0x2497 PUSH2 0x3475 JUMP JUMPDEST PUSH2 0xC2F PUSH2 0x2EF8 JUMP JUMPDEST PUSH1 0x20 DUP2 MLOAD SWAP2 ADD DUP3 CALLER GAS CALL PUSH2 0x24B1 PUSH2 0x2B18 JUMP JUMPDEST SWAP1 CALLER PUSH2 0x3509 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x2440 JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH4 0xFFFFFFFF PUSH2 0x24DF CALLDATASIZE PUSH2 0x214F JUMP JUMPDEST SWAP4 SWAP1 SWAP5 PUSH2 0x24F0 SWAP9 SWAP3 SWAP9 SWAP8 SWAP7 SWAP8 PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x24F8 PUSH2 0x36C3 JUMP JUMPDEST PUSH2 0x2500 PUSH2 0x43B1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP8 PUSH2 0x250D DUP10 PUSH2 0x785 JUMP JUMPDEST DUP9 MSTORE PUSH1 0x20 DUP9 ADD MSTORE AND PUSH1 0x40 DUP7 ADD MSTORE ISZERO ISZERO PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x60 DUP6 CALLDATASIZE SUB SLT PUSH2 0x30C JUMPI PUSH2 0x2589 PUSH2 0x2590 SWAP3 PUSH2 0x132A SWAP7 PUSH1 0x40 DUP1 MLOAD SWAP2 PUSH2 0x2544 DUP4 PUSH2 0x769 JUMP JUMPDEST DUP1 CALLDATALOAD PUSH2 0x254F DUP2 PUSH2 0x2FB JUMP JUMPDEST DUP4 MSTORE PUSH1 0x20 DUP2 ADD CALLDATALOAD PUSH2 0x255F DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MSTORE ADD CALLDATALOAD PUSH2 0x256F DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x80 DUP8 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0xA0 DUP7 ADD MSTORE JUMP JUMPDEST CALLDATASIZE SWAP1 PUSH2 0x2D10 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x482E JUMP JUMPDEST PUSH2 0x31E SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x180 PUSH2 0x1A0 DUP3 ADD SWAP5 PUSH2 0x25DB DUP4 DUP3 MLOAD PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x2611 PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0xE0 DUP6 ADD SWAP1 PUSH5 0xFFFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xA0 DUP2 ADD MLOAD SWAP1 PUSH2 0x262C PUSH2 0x100 SWAP3 DUP4 DUP7 ADD SWAP1 PUSH4 0xFFFFFFFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x2660 PUSH1 0xC0 DUP3 ADD MLOAD SWAP3 PUSH2 0x2646 PUSH2 0x120 SWAP5 DUP6 DUP9 ADD SWAP1 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MLOAD ISZERO ISZERO PUSH2 0x140 DUP8 ADD MSTORE DUP3 ADD MLOAD ISZERO ISZERO PUSH2 0x160 DUP7 ADD MSTORE JUMP JUMPDEST ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH2 0x5A4 PUSH2 0x26F7 PUSH1 0x4 CALLDATALOAD PUSH2 0x268C DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH0 PUSH2 0x120 PUSH1 0x40 MLOAD PUSH2 0x269C DUP2 PUSH2 0x7A1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x26A8 DUP2 PUSH2 0x734 JUMP JUMPDEST DUP4 DUP2 MSTORE DUP4 PUSH1 0x20 DUP3 ADD MSTORE DUP4 PUSH1 0x40 DUP3 ADD MSTORE DUP4 PUSH1 0x60 DUP3 ADD MSTORE DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE DUP3 PUSH1 0xC0 DUP3 ADD MSTORE DUP3 PUSH1 0xE0 DUP3 ADD MSTORE DUP3 PUSH2 0x100 DUP3 ADD MSTORE ADD MSTORE PUSH2 0x2D70 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x259A JUMP JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x20 PUSH2 0x2763 PUSH1 0x4 CALLDATALOAD PUSH2 0x2725 DUP2 PUSH2 0x2FB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x24 CALLDATALOAD SWAP2 PUSH2 0x273A DUP4 PUSH2 0x2FB JUMP JUMPDEST PUSH2 0x2742 PUSH2 0x2EF8 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0xF DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x30C JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x30C JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x27BC DUP3 PUSH2 0x785 JUMP JUMPDEST DUP2 PUSH0 DUP2 MSTORE PUSH1 0xC0 PUSH1 0x60 SWAP2 DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 DUP1 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 PUSH4 0xFFFFFFFF DUP1 DUP1 SWAP5 AND SWAP2 AND ADD SWAP2 DUP3 GT PUSH2 0x282B JUMPI JUMP JUMPDEST PUSH2 0x27E6 JUMP JUMPDEST PUSH2 0x28AD SWAP2 PUSH2 0x283C PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x2845 DUP3 PUSH2 0x2F9D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP4 AND SWAP1 DUP2 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP4 DUP5 SWAP4 PUSH2 0x286A DUP6 PUSH0 KECCAK256 SLOAD PUSH2 0x32A8 JUMP JUMPDEST SWAP4 PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE DUP5 PUSH0 KECCAK256 SLOAD AND SWAP2 DUP5 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP4 DUP5 SWAP4 PUSH32 0xA0E8F5AC00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x4 DUP6 ADD PUSH2 0x32F5 JUMP JUMPDEST SUB SWAP2 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xB0F JUMPI PUSH0 SWAP2 PUSH0 SWAP4 PUSH2 0x292A JUMPI JUMPDEST POP POP ISZERO PUSH2 0x2902 JUMPI PUSH8 0xDE0B5CAD2BEF000 DUP2 GT PUSH2 0x28DA JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x746E594000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x53F976D400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x294D SWAP4 POP DUP1 SWAP2 SWAP3 POP SWAP1 RETURNDATASIZE LT PUSH2 0x2955 JUMPI JUMPDEST PUSH2 0x2945 DUP2 DUP4 PUSH2 0x7BE JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x32D6 JUMP JUMPDEST SWAP1 PUSH0 DUP1 PUSH2 0x28C1 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x293B JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x30C JUMPI MLOAD SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x20 PUSH2 0x2983 PUSH1 0x1 SWAP3 PUSH1 0x40 DUP7 MSTORE PUSH1 0x40 DUP7 ADD SWAP1 PUSH2 0x490 JUMP JUMPDEST SWAP4 ADD MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP2 DUP3 DUP2 SLOAD SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP3 PUSH1 0x20 DUP4 ADD SWAP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP4 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x29C7 JUMPI POP POP POP PUSH2 0x31E SWAP3 POP SUB DUP4 PUSH2 0x7BE JUMP JUMPDEST DUP6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 MSTORE PUSH1 0x1 SWAP6 DUP7 ADD SWAP6 DUP9 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x29B1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x29F7 DUP3 PUSH2 0x769 JUMP JUMPDEST PUSH0 PUSH1 0x40 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 PUSH2 0x2A12 DUP3 PUSH2 0x84B JUMP JUMPDEST PUSH2 0x2A1F PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x7BE JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x2A2F DUP3 SWAP5 PUSH2 0x84B JUMP JUMPDEST ADD SWAP1 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x2A3F JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH2 0x2A4A PUSH2 0x29EA JUMP JUMPDEST DUP3 DUP3 DUP6 ADD ADD MSTORE ADD PUSH2 0x2A33 JUMP JUMPDEST SWAP1 PUSH2 0x2A60 DUP3 PUSH2 0x84B JUMP JUMPDEST PUSH2 0x2A6D PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x7BE JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x2A7D DUP3 SWAP5 PUSH2 0x84B JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x2AC8 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH2 0x2A87 JUMP JUMPDEST PUSH2 0x2AD6 DUP3 PUSH2 0x3EA JUMP JUMPDEST MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD PUSH2 0x2AE6 DUP2 PUSH2 0x769 JUMP JUMPDEST PUSH1 0x40 PUSH1 0xFF DUP3 SWAP5 SLOAD DUP2 DUP2 AND PUSH2 0x2AF9 DUP2 PUSH2 0x3EA JUMP JUMPDEST DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 PUSH1 0x8 SHR AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0xA8 SHR AND ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0x2B42 JUMPI RETURNDATASIZE SWAP1 PUSH2 0x2B29 DUP3 PUSH2 0x8C3 JUMP JUMPDEST SWAP2 PUSH2 0x2B37 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x7BE JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0xC0 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x750 JUMPI PUSH1 0x40 MSTORE PUSH0 PUSH1 0xA0 DUP4 PUSH1 0x60 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x80 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0BDC0 DUP3 ADD SWAP2 DUP3 GT PUSH2 0x282B JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x282B JUMPI JUMP JUMPDEST SWAP2 PUSH2 0x2BE1 SWAP1 PUSH2 0x350 SWAP5 SWAP3 DUP5 MSTORE PUSH1 0x60 PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD SWAP1 PUSH2 0x490 JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x490 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x160 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x750 JUMPI PUSH1 0x40 MSTORE PUSH0 PUSH2 0x140 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE DUP3 PUSH1 0xC0 DUP3 ADD MSTORE DUP3 PUSH1 0xE0 DUP3 ADD MSTORE DUP3 PUSH2 0x100 DUP3 ADD MSTORE DUP3 PUSH2 0x120 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x2C71 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 DUP3 PUSH1 0x80 PUSH1 0x1 SWAP3 DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP5 DUP3 ADD MLOAD PUSH2 0x2C98 DUP2 PUSH2 0x3EA JUMP JUMPDEST DUP4 DUP7 ADD MSTORE PUSH1 0x40 DUP3 DUP2 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP4 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 ADD MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE ADD SWAP6 ADD SWAP4 SWAP3 SWAP2 ADD PUSH2 0x2C63 JUMP JUMPDEST PUSH1 0x60 DUP1 SWAP2 DUP1 CALLDATALOAD PUSH2 0x2CD0 DUP2 PUSH2 0x20C6 JUMP JUMPDEST ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD CALLDATALOAD PUSH2 0x2CE2 DUP2 PUSH2 0x20C6 JUMP JUMPDEST ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD CALLDATALOAD PUSH2 0x2CF7 DUP2 PUSH2 0x20C6 JUMP JUMPDEST ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD CALLDATALOAD PUSH2 0x2D09 DUP2 PUSH2 0x20C6 JUMP JUMPDEST ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x80 SWAP2 SUB SLT PUSH2 0x30C JUMPI PUSH1 0x40 MLOAD PUSH2 0x2D28 DUP2 PUSH2 0x734 JUMP JUMPDEST PUSH1 0x60 DUP1 DUP3 SWAP5 DUP1 CALLDATALOAD PUSH2 0x2D38 DUP2 PUSH2 0x20C6 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x20 DUP2 ADD CALLDATALOAD PUSH2 0x2D48 DUP2 PUSH2 0x20C6 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD CALLDATALOAD PUSH2 0x2D5B DUP2 PUSH2 0x20C6 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MSTORE ADD CALLDATALOAD SWAP2 PUSH2 0x2D6C DUP4 PUSH2 0x20C6 JUMP JUMPDEST ADD MSTORE JUMP JUMPDEST PUSH2 0x2D9B SWAP1 PUSH2 0x2D7C PUSH2 0x2EF8 JUMP JUMPDEST PUSH2 0x2D85 DUP2 PUSH2 0x2F52 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x350 PUSH1 0x1 PUSH2 0x2DAA DUP4 PUSH2 0x32A8 JUMP JUMPDEST SWAP3 PUSH2 0x2E53 PUSH2 0x2DB7 DUP3 PUSH2 0x5316 JUMP JUMPDEST PUSH2 0x2E46 PUSH2 0x2DC3 DUP5 PUSH2 0x5339 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF DUP6 PUSH1 0x5A SHR AND SWAP1 PUSH4 0xFFFFFFFF DUP7 PUSH2 0x2DDD PUSH1 0x82 SWAP1 JUMP JUMPDEST SHR AND SWAP4 PUSH2 0x2DE8 PUSH2 0x7EE JUMP JUMPDEST PUSH1 0x4 DUP9 SWAP1 SHR DUP10 AND ISZERO ISZERO DUP2 MSTORE SWAP10 PUSH1 0x5 DUP9 SWAP1 SHR DUP10 AND ISZERO ISZERO PUSH1 0x20 DUP13 ADD MSTORE PUSH1 0x6 DUP9 SWAP1 SHR DUP10 AND ISZERO ISZERO PUSH1 0x40 DUP13 ADD MSTORE PUSH1 0x7 DUP9 SWAP1 SHR DUP10 AND ISZERO ISZERO PUSH1 0x60 DUP13 ADD MSTORE PUSH2 0x2E26 PUSH2 0x7FB JUMP JUMPDEST SWAP11 DUP12 MSTORE PUSH1 0x20 DUP12 ADD MSTORE PUSH1 0x40 DUP11 ADD MSTORE PUSH1 0x60 DUP10 ADD MSTORE PUSH5 0xFFFFFFFFFF AND PUSH1 0x80 DUP9 ADD MSTORE JUMP JUMPDEST PUSH4 0xFFFFFFFF AND PUSH1 0xA0 DUP7 ADD MSTORE JUMP JUMPDEST DUP1 DUP3 AND ISZERO ISZERO PUSH1 0xC0 DUP6 ADD MSTORE DUP1 DUP3 SHR DUP3 AND ISZERO ISZERO PUSH1 0xE0 DUP6 ADD MSTORE PUSH1 0x2 DUP2 SWAP1 SHR DUP3 AND ISZERO ISZERO PUSH2 0x100 DUP6 ADD MSTORE PUSH1 0x3 SHR AND ISZERO ISZERO PUSH2 0x120 DUP4 ADD MSTORE JUMP JUMPDEST PUSH32 0xF223889600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2E86 JUMPI CALLDATASIZE PUSH0 DUP1 CALLDATACOPY PUSH0 DUP1 CALLDATASIZE DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS DELEGATECALL RETURNDATASIZE PUSH0 DUP1 RETURNDATACOPY ISZERO PUSH2 0x2EF4 JUMPI RETURNDATASIZE PUSH0 RETURN JUMPDEST RETURNDATASIZE PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND ADDRESS SUB PUSH2 0x2F2A JUMPI JUMP JUMPDEST PUSH32 0x9FD25B3600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x2F72 JUMPI POP JUMP JUMPDEST PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 SHR AND ISZERO PUSH2 0x2FBF JUMPI POP JUMP JUMPDEST PUSH32 0x4BDACE1300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2FFB PUSH2 0x27AF JUMP JUMPDEST SWAP3 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH0 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SLOAD SWAP1 PUSH1 0x4 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SWAP1 PUSH1 0x3 PUSH1 0x20 MSTORE DUP4 PUSH0 KECCAK256 SWAP4 DUP5 SLOAD SWAP4 DUP8 MSTORE PUSH2 0x3036 PUSH1 0x20 DUP9 ADD SWAP6 PUSH2 0x535C JUMP JUMPDEST DUP6 MSTORE PUSH2 0x3041 DUP5 PUSH2 0x2A08 JUMP JUMPDEST SWAP2 DUP2 DUP9 ADD SWAP3 DUP4 MSTORE PUSH2 0x3051 DUP6 PUSH2 0x2A56 JUMP JUMPDEST SWAP2 PUSH1 0x60 DUP10 ADD SWAP3 DUP4 MSTORE PUSH2 0x3062 DUP7 PUSH2 0x2A56 JUMP JUMPDEST SWAP5 PUSH1 0x80 SWAP6 PUSH1 0x80 DUP12 ADD MSTORE PUSH2 0x3076 DUP8 DUP12 MLOAD PUSH2 0x3595 JUMP JUMPDEST PUSH1 0xC0 DUP12 ADD MSTORE PUSH2 0x3084 DUP8 PUSH2 0x2A56 JUMP JUMPDEST PUSH1 0xA0 DUP12 ADD SWAP1 DUP2 MSTORE DUP11 MLOAD SWAP2 PUSH1 0x1 SWAP10 PUSH1 0x1 DUP5 DUP2 SHR AND SWAP4 DUP5 PUSH2 0x31ED JUMPI JUMPDEST POP DUP4 PUSH2 0x31DB JUMPI JUMPDEST DUP13 PUSH0 JUMPDEST DUP12 DUP2 LT PUSH2 0x30BE JUMPI POP POP POP POP POP POP POP POP POP POP POP POP POP JUMP JUMPDEST DUP11 DUP14 SWAP3 DUP3 DUP13 DUP13 DUP13 PUSH2 0x3105 DUP5 PUSH2 0x30F1 DUP2 PUSH2 0x30E3 PUSH2 0xE07 DUP16 DUP16 PUSH2 0xDE5 DUP6 PUSH2 0xDF2 SWAP3 MLOAD PUSH2 0x2AB4 JUMP JUMPDEST SWAP5 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP5 MLOAD DUP4 PUSH2 0x30FF DUP4 DUP4 PUSH2 0x2AB4 JUMP JUMPDEST MSTORE PUSH2 0x2AB4 JUMP JUMPDEST POP PUSH2 0x310F DUP2 PUSH2 0x35E7 JUMP JUMPDEST PUSH2 0x311A DUP6 DUP14 MLOAD PUSH2 0x2AB4 JUMP JUMPDEST MSTORE PUSH2 0x3138 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP6 DUP8 PUSH2 0x5615 JUMP JUMPDEST DUP8 DUP14 DUP14 ISZERO PUSH2 0x31CE JUMPI DUP3 ADD MLOAD ISZERO ISZERO SWAP2 DUP3 PUSH2 0x31B0 JUMPI JUMPDEST POP POP PUSH2 0x3161 JUMPI JUMPDEST POP POP POP POP POP JUMPDEST ADD DUP14 SWAP1 PUSH2 0x30A8 JUMP JUMPDEST DUP3 PUSH2 0x3184 SWAP3 PUSH2 0x317B DUP3 PUSH2 0x3174 DUP9 MLOAD PUSH2 0x5339 JUMP JUMPDEST SWAP5 MLOAD PUSH2 0x2AB4 JUMP JUMPDEST MLOAD SWAP7 SHR DUP6 PUSH2 0x5B30 JUMP JUMPDEST SWAP3 DUP4 PUSH2 0x3194 JUMPI JUMPDEST DUP15 SWAP4 POP DUP13 PUSH2 0x3153 JUMP JUMPDEST PUSH2 0x31A7 SWAP4 PUSH2 0x31A1 SWAP2 PUSH2 0x2BB7 JUMP JUMPDEST SWAP2 PUSH2 0x5615 JUMP JUMPDEST PUSH0 DUP16 DUP3 DUP3 PUSH2 0x318B JUMP JUMPDEST SWAP1 SWAP2 POP MLOAD PUSH2 0x31BD DUP2 PUSH2 0x3EA JUMP JUMPDEST PUSH2 0x31C6 DUP2 PUSH2 0x3EA JUMP JUMPDEST EQ DUP8 PUSH0 PUSH2 0x314C JUMP JUMPDEST POP POP POP POP POP POP POP POP PUSH2 0x3159 JUMP JUMPDEST DUP13 MLOAD SWAP1 SWAP4 POP PUSH1 0x3 SHR PUSH1 0x1 AND ISZERO SWAP3 PUSH2 0x30A5 JUMP JUMPDEST PUSH2 0x31F8 SWAP2 SWAP5 POP PUSH2 0x5339 JUMP JUMPDEST ISZERO ISZERO SWAP3 PUSH0 PUSH2 0x309E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 PUSH1 0x1 DUP3 PUSH1 0x2 SHR AND PUSH4 0xFFFFFFFF DUP1 SWAP4 PUSH2 0x322C PUSH1 0x82 SWAP1 JUMP JUMPDEST SHR AND SWAP3 DUP2 PUSH2 0x3239 JUMPI POP SWAP2 SWAP1 JUMP JUMPDEST SWAP1 POP PUSH2 0x3265 PUSH32 0x0 DUP5 PUSH2 0x2813 JUMP JUMPDEST AND TIMESTAMP GT ISZERO SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x1 SWAP2 AND ADD SWAP1 PUSH1 0xFF DUP3 GT PUSH2 0x282B JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x5 DUP3 MUL SWAP2 DUP1 DUP4 DIV PUSH1 0x5 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x282B JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x282B JUMPI JUMP JUMPDEST PUSH3 0xFFFFFF SWAP1 PUSH1 0x12 SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x282B JUMPI SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x31E DUP3 PUSH2 0x20C6 JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x30C JUMPI PUSH1 0x20 DUP3 MLOAD PUSH2 0x32EF DUP2 PUSH2 0x20C6 JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 JUMP JUMPDEST PUSH2 0x2D6C PUSH2 0x3395 PUSH1 0x40 SWAP4 SWAP7 SWAP6 SWAP5 SWAP7 PUSH1 0x60 DUP5 MSTORE DUP1 MLOAD PUSH2 0x3311 DUP2 PUSH2 0x3EA JUMP JUMPDEST PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xC0 PUSH2 0x333B DUP7 DUP4 ADD MLOAD PUSH1 0xE0 PUSH1 0xA0 DUP9 ADD MSTORE PUSH2 0x140 DUP8 ADD SWAP1 PUSH2 0x490 JUMP JUMPDEST SWAP2 PUSH1 0x60 DUP2 ADD MLOAD DUP3 DUP8 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xE0 DUP8 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH2 0x100 DUP8 ADD MSTORE ADD MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 DUP6 DUP4 SUB ADD PUSH2 0x120 DUP7 ADD MSTORE PUSH2 0x2440 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP7 AND PUSH1 0x20 DUP4 ADD MSTORE JUMP JUMPDEST DUP2 ISZERO PUSH2 0x33B1 JUMPI DIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x282B JUMPI PUSH2 0x350 SWAP2 PUSH2 0x33A7 JUMP JUMPDEST SWAP1 PUSH8 0xDE0B5CAD2BEF000 DUP2 GT PUSH2 0x28DA JUMPI PUSH5 0x174876E800 SWAP1 DIV DUP1 PUSH1 0x18 SHR PUSH2 0x344D JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC000003FFFF SWAP1 PUSH1 0x12 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH32 0xE4337C0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST ORIGIN PUSH2 0x34D2 JUMPI PUSH1 0x1 PUSH1 0x7 SLOAD AND PUSH2 0x34AA JUMPI PUSH1 0x1 PUSH32 0x0 TSTORE JUMP JUMPDEST PUSH32 0x7A19888600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x67F84AB200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 MLOAD ISZERO PUSH2 0x1035 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST SWAP1 PUSH2 0x3546 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0x351E JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0x358C JUMPI JUMPDEST PUSH2 0x3557 JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0x354F JUMP JUMPDEST SWAP1 PUSH5 0xFFFFFFFFFF PUSH2 0x35A5 DUP3 PUSH2 0x2A56 JUMP JUMPDEST SWAP3 PUSH1 0x5A SHR AND PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x35B9 JUMPI POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x1F DUP3 PUSH2 0x35C5 DUP4 PUSH2 0x327F JUMP JUMPDEST SHR AND SWAP1 PUSH1 0x4D DUP3 GT PUSH2 0x282B JUMPI PUSH1 0x1 SWAP2 PUSH1 0xA EXP PUSH2 0x35E0 DUP3 DUP8 PUSH2 0x2AB4 JUMP JUMPDEST MSTORE ADD PUSH2 0x35AC JUMP JUMPDEST DUP1 MLOAD PUSH2 0x35F2 DUP2 PUSH2 0x3EA JUMP JUMPDEST PUSH2 0x35FB DUP2 PUSH2 0x3EA JUMP JUMPDEST DUP1 PUSH2 0x360E JUMPI POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x361A PUSH1 0x1 SWAP3 PUSH2 0x3EA JUMP JUMPDEST SUB PUSH2 0x369B JUMPI PUSH1 0x20 PUSH2 0x3645 PUSH2 0x3639 DUP3 PUSH1 0x4 SWAP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0x679AEFCE00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xB0F JUMPI PUSH0 SWAP2 PUSH2 0x3682 JUMPI POP SWAP1 JUMP JUMPDEST PUSH2 0x350 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xB08 JUMPI PUSH2 0xAF9 DUP2 DUP4 PUSH2 0x7BE JUMP JUMPDEST PUSH32 0xDF45063200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x36F0 JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP2 DUP4 DUP2 AND DUP5 DUP5 AND SUB PUSH2 0x375B JUMPI POP POP POP POP PUSH0 NOT SWAP1 JUMP JUMPDEST PUSH2 0x379B SWAP4 PUSH2 0x3785 SWAP3 AND PUSH0 MSTORE PUSH1 0x10 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST PUSH32 0x0 TLOAD ISZERO PUSH2 0x37C8 JUMPI JUMP JUMPDEST PUSH32 0xC09BA73600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP3 SWAP2 PUSH2 0x37FC DUP5 MLOAD PUSH2 0x2A56 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x3839 JUMPI DUP1 PUSH2 0x3828 DUP6 PUSH2 0x3823 DUP7 PUSH2 0x381D PUSH1 0x1 SWAP7 DUP9 PUSH2 0x2AB4 JUMP JUMPDEST MLOAD PUSH2 0x3295 JUMP JUMPDEST PUSH2 0x33A7 JUMP JUMPDEST PUSH2 0x3832 DUP3 DUP10 PUSH2 0x2AB4 JUMP JUMPDEST MSTORE ADD PUSH2 0x37FF JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST SWAP1 PUSH2 0x3849 SWAP2 PUSH2 0x3295 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x386B SWAP1 PUSH2 0x543C JUMP JUMPDEST SWAP1 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP3 EQ PUSH2 0x282B JUMPI PUSH2 0x31E SWAP2 PUSH0 SUB SWAP1 PUSH2 0x5491 JUMP JUMPDEST SWAP1 PUSH2 0x350 SWAP2 PUSH1 0x80 SHR SWAP1 PUSH2 0x5579 JUMP JUMPDEST SWAP2 SWAP1 SWAP4 SWAP3 SWAP4 PUSH2 0x38BD DUP3 DUP3 DUP6 PUSH2 0x373D JUMP JUMPDEST PUSH0 NOT DUP2 SUB PUSH2 0x38CE JUMPI JUMPDEST POP POP POP POP SWAP1 POP JUMP JUMPDEST DUP1 DUP7 GT PUSH2 0x38EC JUMPI SWAP5 PUSH2 0x38E2 SWAP5 SWAP6 SUB SWAP3 PUSH2 0x4281 JUMP JUMPDEST DUP1 PUSH0 DUP1 DUP1 DUP1 PUSH2 0x38C6 JUMP JUMPDEST DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 PUSH32 0xFB8F41B200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST ORIGIN ISZERO DUP1 PUSH2 0x3933 JUMPI SWAP1 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x7 SLOAD AND ISZERO SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x282B JUMPI JUMP JUMPDEST SWAP1 ORIGIN PUSH2 0x34D2 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x397F SWAP3 AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP1 SLOAD SWAP2 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x282B JUMPI SSTORE JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 DUP4 ISZERO PUSH2 0x3B24 JUMPI PUSH2 0x39C1 DUP6 PUSH2 0x3785 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD DUP1 DUP5 GT PUSH2 0x3AE7 JUMPI DUP4 SWAP1 SUB PUSH2 0x39EB DUP7 PUSH2 0x3785 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0x3A11 DUP4 PUSH2 0x3A0B DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x2BB7 JUMP JUMPDEST PUSH2 0x3A1A DUP2 PUSH2 0x55DD JUMP JUMPDEST PUSH2 0x3A35 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP1 DUP2 EXTCODESIZE ISZERO PUSH2 0x30C JUMPI PUSH1 0x40 MLOAD PUSH32 0x23DE665100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP5 AND PUSH1 0x4 DUP6 ADD MSTORE PUSH0 PUSH1 0x24 DUP6 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP6 ADD DUP3 SWAP1 MSTORE SWAP4 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F SWAP2 PUSH2 0x3ACF SWAP2 DUP7 DUP2 DUP1 PUSH1 0x64 DUP2 ADD JUMPDEST SUB DUP2 DUP4 DUP10 GAS CALL PUSH2 0x3AD4 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG4 JUMP JUMPDEST DUP1 PUSH2 0x237B PUSH2 0x3AE1 SWAP3 PUSH2 0x755 JUMP JUMPDEST PUSH0 PUSH2 0x3ABE JUMP JUMPDEST PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 DUP4 SWAP1 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH32 0x96C6FD1E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x3B61 PUSH2 0x43B1 JUMP JUMPDEST PUSH2 0x3B6A DUP2 PUSH2 0x3201 JUMP JUMPDEST POP PUSH2 0x3B72 JUMPI POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0xD971F59700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SUB PUSH2 0x3BAE JUMPI JUMP JUMPDEST PUSH32 0xAAAD13F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 MLOAD SWAP2 DUP2 MLOAD DUP2 MLOAD DUP2 DUP6 EQ SWAP2 DUP3 ISZERO SWAP3 PUSH2 0x3C5C JUMPI JUMPDEST POP POP PUSH2 0x3BAE JUMPI PUSH2 0x3BFA DUP4 PUSH2 0x2A56 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x3C0C JUMPI POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP1 PUSH8 0xDE0B6B3A7640000 PUSH2 0x3C4A PUSH2 0x3C25 PUSH1 0x1 SWAP5 DUP7 PUSH2 0x2AB4 JUMP JUMPDEST MLOAD PUSH2 0x3C45 PUSH2 0x3C33 DUP6 DUP11 PUSH2 0x2AB4 JUMP JUMPDEST MLOAD PUSH2 0x3C3E DUP7 DUP11 PUSH2 0x2AB4 JUMP JUMPDEST MLOAD SWAP3 PUSH2 0x3295 JUMP JUMPDEST PUSH2 0x3295 JUMP JUMPDEST DIV PUSH2 0x3C55 DUP3 DUP10 PUSH2 0x2AB4 JUMP JUMPDEST MSTORE ADD PUSH2 0x3BFD JUMP JUMPDEST EQ ISZERO SWAP1 POP PUSH0 DUP1 PUSH2 0x3BEB JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x30C JUMPI MLOAD PUSH2 0x350 DUP2 PUSH2 0x20C6 JUMP JUMPDEST SWAP1 PUSH2 0x3CE0 SWAP3 PUSH2 0x3CCE PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 SWAP6 PUSH1 0x40 MLOAD SWAP8 DUP9 SWAP7 DUP8 SWAP6 DUP7 SWAP4 PUSH32 0x1C149E2800000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x40 PUSH1 0x4 DUP7 ADD MSTORE PUSH1 0x44 DUP6 ADD SWAP1 PUSH2 0x490 JUMP JUMPDEST SWAP1 PUSH1 0x3 NOT DUP5 DUP4 SUB ADD PUSH1 0x24 DUP6 ADD MSTORE PUSH2 0x2440 JUMP JUMPDEST SUB SWAP4 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xB0F JUMPI PUSH0 SWAP2 PUSH2 0x3D23 JUMPI JUMPDEST POP ISZERO PUSH2 0x3CFB JUMPI JUMP JUMPDEST PUSH32 0x6061292500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x3D45 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3D4B JUMPI JUMPDEST PUSH2 0x3D3D DUP2 DUP4 PUSH2 0x7BE JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3C67 JUMP JUMPDEST PUSH0 PUSH2 0x3CF3 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3D33 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD MLOAD MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x3D6A JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH2 0x3DB9 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 PUSH2 0x3D99 PUSH2 0x3D93 DUP6 DUP4 DUP12 ADD MLOAD PUSH2 0x2AB4 JUMP JUMPDEST MLOAD PUSH2 0x35E7 JUMP JUMPDEST PUSH2 0x3DA7 DUP6 PUSH1 0xA0 DUP12 ADD MLOAD PUSH2 0x2AB4 JUMP JUMPDEST MSTORE DUP4 PUSH0 MSTORE DUP6 DUP8 MSTORE PUSH0 KECCAK256 SLOAD AND DUP3 DUP8 PUSH2 0x5615 JUMP JUMPDEST ADD PUSH2 0x3D5C JUMP JUMPDEST SWAP3 SWAP2 SWAP6 SWAP7 SWAP5 SWAP7 PUSH2 0x3DE0 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP6 PUSH0 JUMPDEST PUSH1 0x20 DUP10 ADD MLOAD DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x3EBE JUMPI PUSH2 0xDE5 DUP3 PUSH2 0x3DFE SWAP3 PUSH2 0x2AB4 JUMP JUMPDEST PUSH2 0x3E0E PUSH2 0x3639 PUSH2 0xDE5 DUP5 DUP10 PUSH2 0x2AB4 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP1 DUP2 SUB PUSH2 0x3E6A JUMPI POP SWAP1 PUSH2 0x3E38 PUSH1 0x1 SWAP3 PUSH2 0x3E31 DUP4 DUP12 PUSH2 0x2AB4 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x5662 JUMP JUMPDEST PUSH2 0x3E51 DUP12 PUSH2 0x3E4A DUP4 PUSH2 0x17D7 DUP2 DUP14 PUSH2 0x2AB4 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x5579 JUMP JUMPDEST PUSH2 0x3E63 DUP3 DUP12 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE ADD PUSH2 0x3DE3 JUMP JUMPDEST PUSH2 0x181B SWAP1 DUP9 PUSH2 0x3E7F PUSH2 0x3639 PUSH2 0xDE5 DUP8 DUP13 PUSH2 0x2AB4 JUMP JUMPDEST PUSH32 0xFFE261A100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND PUSH1 0x4 MSTORE DUP2 AND PUSH1 0x24 MSTORE AND PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST POP POP SWAP7 SWAP5 SWAP2 SWAP3 POP SWAP7 SWAP5 POP PUSH2 0x3EF6 DUP5 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD PUSH1 0x2 SWAP2 AND OR SWAP1 JUMP JUMPDEST DUP1 DUP6 MSTORE PUSH2 0x3F13 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH2 0x3F59 PUSH1 0x20 DUP6 DUP4 AND SWAP8 PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x984DE9E800000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x296B JUMP JUMPDEST SUB DUP2 DUP11 GAS STATICCALL DUP1 ISZERO PUSH2 0xB0F JUMPI PUSH2 0x3F7E SWAP2 PUSH0 SWAP2 PUSH2 0x4058 JUMPI JUMPDEST POP PUSH2 0x3F79 DUP2 PUSH2 0x55DD JUMP JUMPDEST PUSH2 0x2B8A JUMP JUMPDEST SWAP8 PUSH2 0x3F88 DUP3 PUSH2 0x5674 JUMP JUMPDEST PUSH2 0x3F93 DUP10 DUP6 DUP5 PUSH2 0x5784 JUMP JUMPDEST DUP1 DUP10 LT PUSH2 0x4028 JUMPI POP SWAP3 DUP6 SWAP3 PUSH2 0x3FFF PUSH32 0xA26A52D8D53702BBA7F137907B8E1F99FF87F6D450144270CA25E72481CCA871 SWAP4 PUSH2 0x3FF0 PUSH1 0x20 PUSH2 0x3FE6 PUSH1 0x1 SWAP11 SWAP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP9 ADD MLOAD MLOAD PUSH2 0x2A56 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP5 AND SWAP8 DUP5 PUSH2 0x2BC4 JUMP JUMPDEST SUB SWAP1 LOG4 PUSH32 0xCAD8C9D32507393B6508CA4A888B81979919B477510585BDE8488F153072D6F3 PUSH0 DUP1 LOG2 JUMP JUMPDEST PUSH32 0x8D261D5D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 DUP10 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x4071 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xB08 JUMPI PUSH2 0xAF9 DUP2 DUP4 PUSH2 0x7BE JUMP JUMPDEST PUSH0 PUSH2 0x3F6F JUMP JUMPDEST SWAP3 PUSH2 0x40CA PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 SWAP6 SWAP5 SWAP7 PUSH2 0x40E1 PUSH1 0x40 MLOAD SWAP9 DUP10 SWAP8 DUP9 SWAP7 DUP8 SWAP5 PUSH32 0x38BE241D00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE PUSH1 0x60 PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x64 DUP7 ADD SWAP1 PUSH2 0x490 JUMP JUMPDEST SWAP2 PUSH1 0x24 DUP6 ADD MSTORE PUSH1 0x3 NOT DUP5 DUP4 SUB ADD PUSH1 0x44 DUP6 ADD MSTORE PUSH2 0x2440 JUMP JUMPDEST SUB SWAP4 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xB0F JUMPI PUSH0 SWAP2 PUSH2 0x4124 JUMPI JUMPDEST POP ISZERO PUSH2 0x40FC JUMPI JUMP JUMPDEST PUSH32 0xF23DBC600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x413D SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3D4B JUMPI PUSH2 0x3D3D DUP2 DUP4 PUSH2 0x7BE JUMP JUMPDEST PUSH0 PUSH2 0x40F4 JUMP JUMPDEST SWAP1 PUSH2 0x414C PUSH2 0x2BEF JUMP JUMPDEST POP PUSH1 0xFF PUSH1 0x1 DUP1 DUP5 DUP4 PUSH2 0x415E PUSH1 0xC PUSH2 0x326D JUMP JUMPDEST PUSH2 0x4167 SWAP1 PUSH2 0x326D JUMP JUMPDEST AND SHR AND DUP2 DUP6 DUP5 PUSH2 0x4177 PUSH1 0xC PUSH2 0x326D JUMP JUMPDEST PUSH2 0x4180 SWAP1 PUSH2 0x326D JUMP JUMPDEST PUSH2 0x4189 SWAP1 PUSH2 0x326D JUMP JUMPDEST AND SHR AND SWAP1 DUP3 DUP7 DUP6 PUSH2 0x419A PUSH1 0xC PUSH2 0x326D JUMP JUMPDEST PUSH2 0x41A3 SWAP1 PUSH2 0x326D JUMP JUMPDEST PUSH2 0x41AC SWAP1 PUSH2 0x326D JUMP JUMPDEST PUSH2 0x41B5 SWAP1 PUSH2 0x326D JUMP JUMPDEST AND SHR AND SWAP3 DUP1 DUP8 DUP7 PUSH2 0x41C6 PUSH1 0xC PUSH2 0x326D JUMP JUMPDEST PUSH2 0x41CF SWAP1 PUSH2 0x326D JUMP JUMPDEST PUSH2 0x41D8 SWAP1 PUSH2 0x326D JUMP JUMPDEST PUSH2 0x41E1 SWAP1 PUSH2 0x326D JUMP JUMPDEST PUSH2 0x41EA SWAP1 PUSH2 0x326D JUMP JUMPDEST AND SHR AND SWAP5 DUP2 DUP9 DUP2 DUP2 DUP5 PUSH1 0xC AND SHR AND SWAP3 PUSH1 0xC PUSH2 0x4204 SWAP1 PUSH2 0x326D JUMP JUMPDEST AND SHR AND SWAP2 PUSH2 0x4210 PUSH2 0x808 JUMP JUMPDEST PUSH1 0x9 DUP11 SWAP1 SHR DUP3 AND ISZERO ISZERO DUP2 MSTORE SWAP9 PUSH1 0x8 DUP2 SWAP1 SHR DUP3 AND ISZERO ISZERO PUSH1 0x20 DUP12 ADD MSTORE PUSH1 0xA DUP2 SWAP1 SHR DUP3 AND ISZERO ISZERO PUSH1 0x40 DUP12 ADD MSTORE PUSH1 0xB SHR AND ISZERO ISZERO PUSH1 0x60 DUP10 ADD MSTORE ISZERO ISZERO PUSH1 0x80 DUP9 ADD MSTORE ISZERO ISZERO PUSH1 0xA0 DUP8 ADD MSTORE ISZERO ISZERO PUSH1 0xC0 DUP7 ADD MSTORE ISZERO ISZERO PUSH1 0xE0 DUP6 ADD MSTORE ISZERO ISZERO PUSH2 0x100 DUP5 ADD MSTORE ISZERO ISZERO PUSH2 0x120 DUP4 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x140 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP3 SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP2 AND SWAP4 DUP5 ISZERO PUSH2 0x437C JUMPI DUP1 DUP4 AND SWAP6 DUP7 ISZERO PUSH2 0x4347 JUMPI DUP5 PUSH2 0x42C5 DUP6 PUSH2 0x3785 DUP7 PUSH2 0x3785 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x10 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x30C JUMPI PUSH1 0x40 MLOAD PUSH32 0x5687F2B800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH32 0xA0175360A15BCA328BAF7EA85C7B784D58B222A50D0CE760B10DBA336D226A61 SWAP2 PUSH2 0x3ACF SWAP2 PUSH0 DUP2 DUP1 PUSH1 0x64 DUP2 ADD PUSH2 0x3AB3 JUMP JUMPDEST PUSH32 0x94280D6200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xE602DF0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0xFFFFFFFF PUSH32 0x0 AND TIMESTAMP GT ISZERO DUP1 PUSH2 0x440F JUMPI JUMPDEST PUSH2 0x43E7 JUMPI JUMP JUMPDEST PUSH32 0xDA9F8B3400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x7 SLOAD DUP2 SHR AND PUSH2 0x43E1 JUMP JUMPDEST SWAP1 DUP1 MLOAD SWAP1 PUSH2 0x442A DUP3 PUSH2 0x3EA JUMP JUMPDEST PUSH2 0x4433 DUP3 PUSH2 0x3EA JUMP JUMPDEST DUP3 SLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 SWAP3 SWAP1 SWAP3 ADD MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000 SWAP1 SWAP2 AND PUSH1 0xFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR PUSH1 0x8 SWAP2 SWAP1 SWAP2 SHL PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND OR SWAP1 ISZERO ISZERO PUSH1 0xA8 SHL PUSH22 0xFF000000000000000000000000000000000000000000 AND OR SWAP1 SSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x30C JUMPI MLOAD PUSH1 0xFF DUP2 AND DUP2 SUB PUSH2 0x30C JUMPI SWAP1 JUMP JUMPDEST DUP1 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x750 JUMPI PUSH1 0x1 DUP2 ADD DUP1 DUP4 SSTORE DUP2 LT ISZERO PUSH2 0x2AC8 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 ADD SWAP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE JUMP JUMPDEST DUP2 MLOAD DUP2 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND OR DUP3 SSTORE PUSH2 0x31E SWAP3 PUSH1 0x2 SWAP2 SWAP1 PUSH1 0x40 SWAP1 PUSH2 0x45A5 DUP4 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x1 DUP8 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE JUMP JUMPDEST ADD MLOAD AND SWAP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x30C JUMPI PUSH1 0x20 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 JUMP JUMPDEST SWAP5 SWAP4 SWAP2 PUSH2 0x31E SWAP4 PUSH1 0x60 SWAP3 PUSH2 0x4625 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP10 MSTORE AND PUSH1 0x20 DUP9 ADD MSTORE PUSH1 0xE0 PUSH1 0x40 DUP9 ADD MSTORE PUSH1 0xE0 DUP8 ADD SWAP1 PUSH2 0x2C52 JUMP JUMPDEST SWAP5 ADD SWAP1 PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH2 0x140 SWAP2 SUB SLT PUSH2 0x30C JUMPI PUSH2 0x4667 PUSH2 0x7FB JUMP JUMPDEST SWAP1 PUSH2 0x4671 DUP2 PUSH2 0x32CB JUMP JUMPDEST DUP3 MSTORE PUSH2 0x467F PUSH1 0x20 DUP3 ADD PUSH2 0x32CB JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x4690 PUSH1 0x40 DUP3 ADD PUSH2 0x32CB JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x46A1 PUSH1 0x60 DUP3 ADD PUSH2 0x32CB JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x46B2 PUSH1 0x80 DUP3 ADD PUSH2 0x32CB JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x46C3 PUSH1 0xA0 DUP3 ADD PUSH2 0x32CB JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0x46D4 PUSH1 0xC0 DUP3 ADD PUSH2 0x32CB JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x46E5 PUSH1 0xE0 DUP3 ADD PUSH2 0x32CB JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x100 PUSH2 0x46F8 DUP2 DUP4 ADD PUSH2 0x32CB JUMP JUMPDEST SWAP1 DUP4 ADD MSTORE PUSH2 0x470A PUSH2 0x120 DUP1 SWAP3 ADD PUSH2 0x32CB JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP2 SWAP7 SWAP6 SWAP4 SWAP5 PUSH2 0x4773 PUSH2 0x31E SWAP7 PUSH4 0xFFFFFFFF PUSH2 0x220 SWAP7 PUSH2 0x473B PUSH2 0x4801 SWAP7 PUSH2 0x2A0 DUP1 DUP11 MSTORE DUP10 ADD SWAP1 PUSH2 0x2C52 JUMP JUMPDEST SWAP12 PUSH1 0x20 DUP9 ADD MSTORE AND PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x60 DUP6 ADD SWAP1 PUSH1 0x40 SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD SWAP1 DUP1 MLOAD ISZERO ISZERO DUP3 MSTORE PUSH1 0x20 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0x40 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0x60 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0x80 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0xA0 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0xC0 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH1 0xE0 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x120 DUP1 DUP3 ADD MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE PUSH2 0x140 SWAP1 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 ADD MSTORE JUMP JUMPDEST ADD SWAP1 PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SWAP1 PUSH2 0x4853 PUSH2 0x484C DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x1 AND SWAP1 JUMP JUMPDEST PUSH2 0x52E1 JUMPI DUP1 MLOAD MLOAD PUSH1 0x2 DUP2 LT PUSH2 0x52B9 JUMPI PUSH1 0x8 DUP2 GT PUSH2 0x5291 JUMPI SWAP3 SWAP2 SWAP1 PUSH2 0x4876 DUP5 PUSH2 0x2A56 JUMP JUMPDEST PUSH0 SWAP5 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x4F84 JUMPI POP POP PUSH2 0x4946 SWAP3 SWAP4 SWAP5 POP PUSH1 0x80 DUP3 ADD SWAP2 PUSH2 0x48B4 DUP4 MLOAD PUSH2 0x48AF DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0x4525 JUMP JUMPDEST PUSH2 0x48C9 PUSH2 0x3639 PUSH1 0xA SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP1 SWAP2 PUSH2 0x48E2 DUP3 DUP8 MLOAD ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 MLOAD AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x48F0 PUSH1 0x60 DUP7 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH32 0x77FF76E700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP13 AND PUSH1 0x4 DUP4 ADD MSTORE SWAP1 SWAP4 AND PUSH1 0x24 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x44 DUP4 ADD MSTORE SWAP1 SWAP7 DUP8 SWAP2 SWAP1 DUP3 SWAP1 PUSH0 SWAP1 DUP3 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0xB0F JUMPI PUSH0 SWAP6 PUSH0 SWAP2 PUSH2 0x4F51 JUMPI JUMPDEST POP PUSH2 0x4A72 PUSH1 0xC0 DUP5 ADD SWAP2 PUSH2 0x4A6D PUSH2 0x4A3C DUP5 MLOAD SWAP8 PUSH2 0x4A25 PUSH2 0x4A1F PUSH2 0x4981 DUP12 MLOAD ISZERO ISZERO PUSH1 0x4 SHL PUSH1 0x1 OR SWAP1 JUMP JUMPDEST SWAP11 PUSH1 0x60 PUSH2 0x49EF PUSH2 0x49BE PUSH1 0x20 SWAP15 DUP16 DUP6 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF SWAP1 PUSH1 0x5 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST DUP13 DUP5 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF SWAP1 PUSH1 0x6 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST SWAP2 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F SWAP1 PUSH1 0x7 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x58D2 JUMP JUMPDEST SWAP1 PUSH1 0x5A SWAP2 PUSH5 0xFFFFFFFFFF SWAP1 DUP2 AND DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP9 PUSH2 0x4A68 DUP7 DUP9 ADD SWAP11 PUSH2 0x4A52 DUP13 MLOAD PUSH4 0xFFFFFFFF AND SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x82 SWAP2 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST PUSH2 0x5952 JUMP JUMPDEST PUSH2 0x5972 JUMP JUMPDEST SWAP4 PUSH1 0xA0 DUP5 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP6 DUP10 DUP8 PUSH2 0x4A94 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST AND DUP1 PUSH2 0x4B95 JUMPI JUMPDEST POP SWAP1 PUSH2 0x4AB9 DUP2 SWAP4 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4AE9 DUP12 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x4B21 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE JUMP JUMPDEST DUP6 ADD SWAP5 DUP6 MLOAD PUSH2 0x4B30 SWAP1 DUP12 PUSH2 0x5996 JUMP JUMPDEST MLOAD SWAP5 MLOAD SWAP8 MLOAD PUSH4 0xFFFFFFFF AND SWAP7 MLOAD SWAP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x4B5A SWAP2 PUSH2 0x4143 JUMP JUMPDEST SWAP2 MLOAD SWAP3 MLOAD SWAP6 DUP7 SWAP6 CALLER SWAP10 AND SWAP8 PUSH2 0x4B6F SWAP6 DUP8 PUSH2 0x4711 JUMP JUMPDEST SUB PUSH32 0xBC1561EEAB9F40962E2FB827A7FF9C7CDB47A9D7C84CAEEFA4ED90E043842DAD SWAP2 LOG3 JUMP JUMPDEST PUSH2 0x4BD7 SWAP2 DUP5 SWAP2 DUP10 MLOAD PUSH0 DUP10 MLOAD SWAP4 DUP12 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 DUP6 SWAP4 PUSH32 0xB89F18200000000000000000000000000000000000000000000000000000000 DUP6 MSTORE CALLER PUSH1 0x4 DUP7 ADD PUSH2 0x45F3 JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0xB0F JUMPI PUSH0 SWAP2 PUSH2 0x4F34 JUMPI JUMPDEST POP ISZERO PUSH2 0x4F1F JUMPI PUSH2 0x4C06 PUSH2 0x3639 PUSH2 0x3639 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 DUP6 MLOAD DUP1 SWAP3 PUSH32 0xD77153A700000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 PUSH1 0x4 PUSH2 0x140 SWAP6 DUP7 SWAP4 GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0xB0F JUMPI PUSH0 SWAP4 PUSH2 0x4EF0 JUMPI JUMPDEST POP POP DUP2 MLOAD ISZERO ISZERO DUP1 PUSH2 0x4ED6 JUMPI JUMPDEST PUSH2 0x4E83 JUMPI SWAP1 PUSH2 0x4E51 PUSH2 0x120 PUSH2 0x4CBD PUSH2 0x4E1E PUSH2 0x4DEC PUSH2 0x4DBA PUSH2 0x4D88 PUSH2 0x4D56 PUSH2 0x4D24 DUP15 PUSH2 0x4CF9 PUSH2 0x4CF0 DUP13 DUP16 PUSH2 0x4E7C SWAP16 SWAP1 PUSH2 0x4CBD PUSH2 0x4CC5 SWAP3 PUSH2 0x4C92 DUP6 MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFF SWAP1 PUSH1 0x9 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST SWAP3 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFF SWAP1 PUSH1 0x8 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST SWAP2 DUP13 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFF SWAP1 PUSH1 0xA SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP11 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FF SWAP1 PUSH1 0xB SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP10 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF SWAP1 PUSH1 0xC SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0xA0 DUP9 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFF SWAP1 PUSH1 0xD SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0xC0 DUP8 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFF SWAP1 PUSH1 0xE SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0xE0 DUP7 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFF SWAP1 PUSH1 0xF SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH2 0x100 DUP6 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFF SWAP1 PUSH1 0x10 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF SWAP1 PUSH1 0x11 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST DUP10 PUSH0 PUSH2 0x4A9B JUMP JUMPDEST PUSH2 0x181B DUP12 PUSH2 0x4E98 DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH32 0xFA93D81400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x4 MSTORE AND PUSH1 0x24 MSTORE CALLER PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST POP PUSH2 0x4EEA PUSH2 0x4EE5 DUP7 MLOAD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO ISZERO SWAP1 JUMP JUMPDEST ISZERO PUSH2 0x4C53 JUMP JUMPDEST PUSH2 0x4F10 SWAP3 SWAP4 POP DUP1 RETURNDATASIZE LT PUSH2 0x4F18 JUMPI JUMPDEST PUSH2 0x4F08 DUP2 DUP4 PUSH2 0x7BE JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x4653 JUMP JUMPDEST SWAP1 PUSH0 DUP1 PUSH2 0x4C47 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x4EFE JUMP JUMPDEST PUSH2 0x181B DUP11 PUSH2 0x4E98 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x4F4B SWAP2 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x3D4B JUMPI PUSH2 0x3D3D DUP2 DUP4 PUSH2 0x7BE JUMP JUMPDEST PUSH0 PUSH2 0x4BE9 JUMP JUMPDEST SWAP1 POP DUP2 PUSH2 0x4F74 SWAP3 SWAP7 POP RETURNDATASIZE DUP8 GT PUSH2 0x4F7D JUMPI JUMPDEST PUSH2 0x4F6C DUP2 DUP4 PUSH2 0x7BE JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x45DD JUMP JUMPDEST SWAP5 SWAP1 SWAP5 PUSH0 PUSH2 0x4959 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x4F62 JUMP JUMPDEST PUSH2 0x4F8F DUP2 DUP6 MLOAD PUSH2 0x2AB4 JUMP JUMPDEST MLOAD SWAP7 PUSH2 0x4FA2 DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP2 DUP3 ISZERO DUP1 ISZERO PUSH2 0x5286 JUMPI JUMPDEST PUSH2 0x525E JUMPI AND DUP1 DUP3 LT PUSH2 0x5236 JUMPI DUP2 EQ PUSH2 0x5201 JUMPI PUSH1 0x40 SWAP1 DUP2 DUP11 ADD SWAP10 DUP11 MLOAD PUSH2 0x4FE3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND ISZERO SWAP1 PUSH1 0x20 SWAP12 DUP13 DUP3 ADD SWAP1 DUP14 DUP3 MLOAD SWAP2 PUSH2 0x5002 DUP4 PUSH2 0x3EA JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP4 PUSH1 0x60 ADD SWAP4 DUP5 MLOAD PUSH2 0x501C SWAP1 ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x5025 PUSH2 0x829 JUMP JUMPDEST SWAP4 PUSH2 0x5030 SWAP1 DUP6 PUSH2 0x2ACD JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP2 AND SWAP1 DUP4 ADD MSTORE ISZERO ISZERO DUP2 DUP8 ADD MSTORE DUP7 PUSH2 0x5061 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x507C SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x5086 SWAP2 PUSH2 0x441D JUMP JUMPDEST DUP1 MLOAD PUSH2 0x5091 DUP2 PUSH2 0x3EA JUMP JUMPDEST PUSH2 0x509A DUP2 PUSH2 0x3EA JUMP JUMPDEST PUSH2 0x51B2 JUMPI POP DUP2 ISZERO SWAP2 PUSH2 0x51A7 JUMPI JUMPDEST POP PUSH2 0x369B JUMPI DUP10 SWAP2 JUMPDEST MLOAD SWAP10 DUP11 DUP1 SWAP3 PUSH32 0x313CE56700000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 SWAP13 DUP14 SWAP2 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xB0F JUMPI PUSH0 SWAP3 PUSH2 0x517A JUMPI JUMPDEST POP POP PUSH1 0x12 SWAP1 PUSH1 0xFF SWAP2 DUP1 DUP4 DUP4 AND GT PUSH0 EQ PUSH2 0x5126 JUMPI DUP11 PUSH32 0x686D360700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x1 SWAP5 SWAP6 SWAP7 SWAP8 SWAP9 SWAP10 SWAP11 POP SWAP1 PUSH2 0x514A SWAP3 SWAP2 SUB AND PUSH2 0x5142 DUP6 DUP9 PUSH2 0x2AB4 JUMP JUMPDEST SWAP1 PUSH1 0xFF AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x516E DUP2 PUSH2 0x5169 DUP10 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0x44C9 JUMP JUMPDEST SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 ADD PUSH2 0x487A JUMP JUMPDEST PUSH2 0x5199 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x51A0 JUMPI JUMPDEST PUSH2 0x5191 DUP2 DUP4 PUSH2 0x7BE JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x44B0 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x50EC JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x5187 JUMP JUMPDEST MLOAD ISZERO ISZERO SWAP1 POP PUSH0 PUSH2 0x50A7 JUMP JUMPDEST PUSH1 0x1 SWAP2 POP MLOAD PUSH2 0x51C0 DUP2 PUSH2 0x3EA JUMP JUMPDEST PUSH2 0x51C9 DUP2 PUSH2 0x3EA JUMP JUMPDEST SUB PUSH2 0x51D9 JUMPI PUSH2 0x369B JUMPI DUP10 SWAP2 PUSH2 0x50AF JUMP JUMPDEST PUSH32 0xA1E9DD9D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x4F4B634E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x6E8F194700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0xC1AB6DC100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP DUP2 DUP10 AND DUP4 EQ PUSH2 0x4FB8 JUMP JUMPDEST PUSH32 0x707BDF5800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x5ED4BA8F00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0xDB771C8000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH3 0xFFFFFF SWAP1 PUSH1 0x2A SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x282B JUMPI SWAP1 JUMP JUMPDEST PUSH3 0xFFFFFF SWAP1 PUSH1 0x42 SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x282B JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP2 DUP3 DUP2 SLOAD SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP3 PUSH1 0x20 DUP4 ADD SWAP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP4 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x5390 JUMPI POP POP POP PUSH2 0x31E SWAP3 POP SUB DUP4 PUSH2 0x7BE JUMP JUMPDEST DUP6 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 MSTORE PUSH1 0x1 SWAP6 DUP7 ADD SWAP6 DUP9 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x537A JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x18 SHR PUSH2 0x344D JUMPI PUSH1 0x2A SHL SWAP1 PUSH3 0xFFFFFF PUSH1 0x2A SHL NOT AND OR SWAP1 JUMP JUMPDEST PUSH32 0xB4120F1400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x100 DUP1 DUP5 LT ISZERO PUSH2 0x53CD JUMPI DUP4 DUP2 SUB SWAP1 DUP2 GT PUSH2 0x282B JUMPI DUP1 PUSH1 0xFF LT PUSH0 EQ PUSH2 0x5437 JUMPI POP PUSH1 0xFF JUMPDEST PUSH1 0x18 GT PUSH2 0x53CD JUMPI DUP1 PUSH1 0x18 SHR PUSH2 0x344D JUMPI PUSH3 0xFFFFFF SWAP1 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST PUSH2 0x5419 JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x5466 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x5575 JUMPI PUSH32 0x0 SWAP2 PUSH2 0x54D6 DUP2 DUP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP1 JUMP JUMPDEST DUP3 DUP2 ADD SWAP3 DUP4 SLT PUSH0 DUP3 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x282B JUMPI DUP3 PUSH2 0x552B JUMPI POP PUSH32 0x0 SWAP3 DUP4 TLOAD PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x282B JUMPI PUSH2 0x31E SWAP5 TSTORE PUSH2 0x5B9E JUMP JUMPDEST ISZERO PUSH2 0x553A JUMPI JUMPDEST PUSH2 0x31E SWAP3 PUSH2 0x5B9E JUMP JUMPDEST PUSH32 0x0 SWAP3 DUP4 TLOAD PUSH1 0x1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x282B JUMPI PUSH2 0x31E SWAP5 TSTORE SWAP3 POP PUSH2 0x5531 JUMP JUMPDEST POP POP JUMP JUMPDEST SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 GT SWAP1 DUP2 ISZERO PUSH2 0x55D3 JUMPI JUMPDEST POP PUSH2 0x55AB JUMPI PUSH1 0x80 SHL SWAP1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x282B JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x89560CA100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP DUP2 GT PUSH0 PUSH2 0x5596 JUMP JUMPDEST PUSH3 0xF4240 DUP2 LT PUSH2 0x55EA JUMPI POP JUMP JUMPDEST PUSH32 0xD38D20FC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 PUSH1 0x80 PUSH8 0xDE0B6B3A7640000 PUSH2 0x5659 PUSH2 0x2AD6 SWAP5 DUP1 PUSH2 0x5638 DUP7 PUSH1 0x60 DUP11 ADD MLOAD PUSH2 0x2AB4 JUMP JUMPDEST MSTORE PUSH2 0x3C45 PUSH2 0x564A DUP7 PUSH1 0xC0 DUP11 ADD MLOAD PUSH2 0x2AB4 JUMP JUMPDEST MLOAD PUSH2 0x3C3E DUP8 PUSH1 0xA0 DUP12 ADD MLOAD PUSH2 0x2AB4 JUMP JUMPDEST DIV SWAP4 ADD MLOAD PUSH2 0x2AB4 JUMP JUMPDEST PUSH2 0x566E PUSH2 0x31E SWAP3 PUSH2 0x543C JUMP JUMPDEST SWAP1 PUSH2 0x5491 JUMP JUMPDEST PUSH2 0x568F DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 SLOAD PUSH3 0xF4240 SWAP1 DUP2 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x282B JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 SSTORE PUSH2 0x56C6 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH0 DUP1 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 DUP2 SLOAD ADD SWAP1 SSTORE AND PUSH0 DUP1 DUP3 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F PUSH1 0x40 MLOAD DUP1 PUSH2 0x5710 DUP2 SWAP1 PUSH3 0xF4240 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB SWAP1 LOG4 DUP1 EXTCODESIZE ISZERO PUSH2 0x30C JUMPI PUSH0 PUSH1 0x40 MLOAD DUP1 SWAP3 PUSH32 0x23DE665100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP4 DUP2 PUSH2 0x5766 PUSH1 0x4 DUP3 ADD SWAP1 PUSH3 0xF4240 PUSH1 0x40 PUSH1 0x60 DUP5 ADD SWAP4 PUSH0 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0xB0F JUMPI PUSH2 0x5777 JUMPI POP JUMP JUMPDEST DUP1 PUSH2 0x237B PUSH2 0x31E SWAP3 PUSH2 0x755 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP4 DUP5 ISZERO PUSH2 0x589D JUMPI PUSH2 0x57BC DUP4 PUSH2 0x57B6 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x393E JUMP JUMPDEST PUSH2 0x57DB DUP6 PUSH2 0x3785 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP5 DUP2 SLOAD ADD SWAP1 SSTORE PUSH2 0x57EA DUP2 PUSH2 0x55DD JUMP JUMPDEST PUSH2 0x5805 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP3 PUSH0 DUP5 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F PUSH1 0x40 MLOAD DUP1 PUSH2 0x583E DUP8 DUP3 SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB SWAP1 LOG4 DUP3 EXTCODESIZE ISZERO PUSH2 0x30C JUMPI PUSH1 0x40 MLOAD PUSH32 0x23DE665100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 DUP3 SWAP1 DUP2 DUP4 DUP2 PUSH1 0x64 DUP2 ADD PUSH2 0x5766 JUMP JUMPDEST PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 SWAP2 SWAP1 DUP3 JUMPDEST DUP2 MLOAD DUP5 LT ISZERO PUSH2 0x5946 JUMPI PUSH2 0x58EA DUP5 DUP4 PUSH2 0x2AB4 JUMP JUMPDEST MLOAD PUSH1 0xFF SWAP2 PUSH2 0x58F7 DUP7 PUSH2 0x327F JUMP JUMPDEST SWAP2 PUSH2 0x100 DUP1 DUP5 LT ISZERO PUSH2 0x53CD JUMPI DUP4 DUP2 SUB SWAP1 DUP2 GT PUSH2 0x282B JUMPI DUP1 DUP6 LT ISZERO PUSH2 0x5941 JUMPI POP DUP4 JUMPDEST PUSH1 0x5 SWAP1 DUP2 GT PUSH2 0x53CD JUMPI DUP2 PUSH1 0x7 SWAP2 SHR AND PUSH2 0x344D JUMPI PUSH1 0x1 SWAP4 PUSH1 0x1F SWAP2 AND DUP4 SHL SWAP3 SHL NOT AND OR SWAP4 ADD SWAP3 PUSH2 0x58D7 JUMP JUMPDEST PUSH2 0x5918 JUMP JUMPDEST PUSH5 0xFFFFFFFFFF AND SWAP3 POP POP JUMP JUMPDEST PUSH8 0xDE0B5CAD2BEF000 DUP3 GT PUSH2 0x28DA JUMPI PUSH5 0x174876E800 PUSH2 0x350 SWAP3 DIV SWAP1 PUSH2 0x53B3 JUMP JUMPDEST SWAP1 PUSH8 0xDE0B5CAD2BEF000 DUP2 GT PUSH2 0x28DA JUMPI PUSH2 0x350 SWAP2 PUSH5 0x174876E800 PUSH1 0x42 SWAP3 DIV SWAP1 PUSH2 0x53F5 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP2 PUSH1 0x40 MLOAD PUSH32 0xCE20ECE700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 PUSH1 0x4 DUP2 DUP9 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xB0F JUMPI PUSH0 SWAP2 PUSH2 0x5B13 JUMPI JUMPDEST POP DUP4 LT PUSH2 0x5AEB JUMPI PUSH1 0x40 MLOAD PUSH32 0x654CF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP2 PUSH1 0x4 DUP2 DUP9 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xB0F JUMPI PUSH0 SWAP3 PUSH2 0x5ACE JUMPI JUMPDEST POP POP DUP3 GT PUSH2 0x5AA6 JUMPI DUP2 DUP2 PUSH2 0x5A90 PUSH2 0x5A79 PUSH32 0x89D41522342FABAC1471CA6073A5623E5CAF367B03CA6E9A001478D0CF8BE4A1 SWAP6 PUSH2 0x5A73 PUSH2 0x5AA1 SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x3402 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 JUMP JUMPDEST PUSH32 0x7F47834B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x5AE4 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0xB08 JUMPI PUSH2 0xAF9 DUP2 DUP4 PUSH2 0x7BE JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x5A24 JUMP JUMPDEST PUSH32 0xBFB2068800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x5B2A SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0xB08 JUMPI PUSH2 0xAF9 DUP2 DUP4 PUSH2 0x7BE JUMP JUMPDEST PUSH0 PUSH2 0x59E1 JUMP JUMPDEST SWAP1 SWAP4 SWAP3 PUSH0 SWAP5 PUSH2 0x5B43 DUP5 PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x2AB4 JUMP JUMPDEST MLOAD DUP2 DUP2 GT PUSH2 0x5B53 JUMPI JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x5B93 SWAP6 SWAP7 POP PUSH2 0x5B8D SWAP4 SWAP3 PUSH2 0x5B86 SWAP3 PUSH2 0x5B6C SWAP3 SUB PUSH2 0x383F JUMP JUMPDEST SWAP4 PUSH1 0xA0 PUSH2 0x5B7D DUP3 PUSH1 0xC0 DUP7 ADD MLOAD PUSH2 0x2AB4 JUMP JUMPDEST MLOAD SWAP4 ADD MLOAD PUSH2 0x2AB4 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x3295 JUMP JUMPDEST SWAP1 PUSH2 0x33DE JUMP JUMPDEST SWAP1 PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x5B4C JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TSTORE JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP12 PUSH14 0x70B93B07F2F918EB2EE3B475895 0x29 0x28 CHAINID CALL PUSH6 0xF7B9C88BC297 0x29 EQ 0xAE 0xCA 0xAC PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"701:1544:93:-:0;;;;;;;;;-1:-1:-1;701:1544:93;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;-1:-1:-1;;;;;701:1544:93;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;:::o;:::-;;;;;;:::i;:::-;-1:-1:-1;;701:1544:93;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;:::o;:::-;;;;;29973:33:71;-1:-1:-1;;;;;701:1544:93;;;:::i;:::-;3908:87:71;;;;:::i;:::-;8718:4:70;;;:::i;:::-;701:1544:93;-1:-1:-1;701:1544:93;29973:20:71;701:1544:93;;;-1:-1:-1;701:1544:93;;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;29973:33:71;701:1544:93;1616:3:44;701:1544:93;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;701:1544:93;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;;;;;;;;-1:-1:-1;701:1544:93;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;701:1544:93;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;701:1544:93;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;701:1544:93;;;;;;22690:40:71;701:1544:93;;;;;:::i;:::-;;;:::i;:::-;;3908:87:71;;:::i;:::-;8882:4:70;;;:::i;:::-;22690:40:71;:::i;:::-;701:1544:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;701:1544:93;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;-1:-1:-1;;701:1544:93;;;;;3908:87:71;;:::i;:::-;701:1544:93;;38573:27:71;701:1544:93;;;;;;;;;;;;;;;-1:-1:-1;;701:1544:93;;;;;;;;;;;:::i;:::-;3908:87:71;;:::i;:::-;8718:4:70;;;:::i;:::-;28077:25:71;;;:::i;:::-;28186:47;28207:26;;;;28186:47;;:::i;:::-;701:1544:93;-1:-1:-1;;;;;701:1544:93;;;-1:-1:-1;701:1544:93;28247:17:71;701:1544:93;;;-1:-1:-1;701:1544:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;701:1544:93;;;;;;;;-1:-1:-1;;;;;39438:11:71;701:1544:93;;;;;;;;;-1:-1:-1;;701:1544:93;;;;;;;;;;;:::i;:::-;3908:87:71;;:::i;:::-;-1:-1:-1;;;;;701:1544:93;;;-1:-1:-1;701:1544:93;28912:13:71;701:1544:93;;;-1:-1:-1;701:1544:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;701:1544:93;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;-1:-1:-1;701:1544:93;;;:::o;:::-;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;701:1544:93;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;701:1544:93;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;701:1544:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;30797:32:71;701:1544:93;;;;;;;;;:::i;:::-;;;;;30797:32:71;:::i;:::-;701:1544:93;;;;;;;;;;;;;;;;;;-1:-1:-1;;701:1544:93;;;;;;;;;;:::i;:::-;3908:87:71;;:::i;:::-;8882:4:70;;;:::i;:::-;701:1544:93;;26213:29:71;26110:40;;;:::i;:::-;26213:29;;701:1544:93;;26180:84:71;;;;701:1544:93;26180:84:71;;701:1544:93;;26180:84:71;;701:1544:93;;;;;;:::i;:::-;26130:19:71;701:1544:93;;;;26180:84:71;701:1544:93;-1:-1:-1;;;;;701:1544:93;;26180:84:71;;;;;;701:1544:93;26180:84:71;26282:37;26180:84;-1:-1:-1;26180:84:71;;;701:1544:93;2487:20:95;;;-1:-1:-1;;;;;701:1544:93;;;2487:14:95;701:1544:93;;;;;;;2487:20:95;701:1544:93;26282:37:71;;:::i;26180:84::-;2487:20:95;26180:84:71;;;;;701:1544:93;26180:84:71;701:1544:93;26180:84:71;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;:::i;701:1544:93:-;;;;;-1:-1:-1;;701:1544:93;;;;;-1:-1:-1;;;;;701:1544:93;;;;;:::i;:::-;3908:87:71;;:::i;:::-;8718:4:70;;;:::i;:::-;701:1544:93;-1:-1:-1;701:1544:93;-1:-1:-1;701:1544:93;;;1038:1:75;701:1544:93;-1:-1:-1;701:1544:93;;7916:84:49;;;701:1544:93;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;701:1544:93;;;;;;24124:61:71;:40;701:1544:93;;;;;:::i;:::-;3908:87:71;;:::i;:::-;8718:4:70;;;:::i;24124:40:71:-;:61;;701:1544:93;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;;701:1544:93;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;1012:16;701:1544;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;701:1544:93;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;701:1544:93;;;;;;;;;;:::i;:::-;3908:87:71;;:::i;:::-;8718:4:70;;;:::i;:::-;-1:-1:-1;;;;;701:1544:93;;-1:-1:-1;701:1544:93;23313:18:71;701:1544:93;;;-1:-1:-1;701:1544:93;;23356:17:71;;-1:-1:-1;;;;;701:1544:93;;;23356:11:71;701:1544:93;;;;;;;23356:17:71;701:1544:93;:::i;:::-;;;;23438:26:71;;;;:::i;:::-;23488:24;;;;:::i;:::-;23549;;;;:::i;:::-;23589:13;-1:-1:-1;23604:13:71;;;;;;701:1544:93;;;;;;;;;;:::i;23619:3:71:-;23662:20;;701:1544:93;23662:20:71;;701:1544:93;;;;;;;;;;23662:20:71;701:1544:93;;23711:31:71;:20;23732:9;;23711:20;;;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;;23711:20:71;23732:9;;:::i;:::-;701:1544:93;-1:-1:-1;;;;;701:1544:93;;;23732:9:71;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;23711:31:71;701:1544:93;:::i;:::-;23696:46:71;;;;:::i;:::-;;;;;;:::i;:::-;;1237:14:44;1460:31;;23756:46:71;;;;:::i;:::-;701:1544:93;1616:3:44;701:1544:93;23816:63:71;;;;:::i;:::-;701:1544:93;;23589:13:71;;701:1544:93;;;;;-1:-1:-1;;701:1544:93;;;;;;;;;;;:::i;:::-;3908:87:71;;:::i;:::-;-1:-1:-1;;;;;701:1544:93;;;-1:-1:-1;701:1544:93;28691:13:71;701:1544:93;;;-1:-1:-1;701:1544:93;;;28691:41:71;;701:1544:93;;;;;;;;;;;-1:-1:-1;;701:1544:93;;;;;;7067:25:70;701:1544:93;;;;;:::i;:::-;3908:87:71;;:::i;:::-;8718:4:70;;;:::i;:::-;7067:25;:::i;:::-;701:1544:93;;;;;;;;;;;;;;-1:-1:-1;;701:1544:93;;;;;-1:-1:-1;;;;;701:1544:93;;;;;:::i;:::-;;;-1:-1:-1;701:1544:93;-1:-1:-1;701:1544:93;;1146:60;701:1544;;;-1:-1:-1;701:1544:93;;1146:60;:::i;:::-;701:1544;-1:-1:-1;701:1544:93;-1:-1:-1;701:1544:93;;;-1:-1:-1;701:1544:93;;-1:-1:-1;701:1544:93;;;;;;37491:23:71;701:1544:93;;;;:::i;:::-;36425:58:71;;;:::i;:::-;3908:87;;:::i;:::-;701:1544:93;;;;;;;;;;;;;37491:23:71;37492:10;;;37491:23;;;;:::i;:::-;37524:718;;;;;37492:10;37639:63;37492:10;37768:26;37492:10;;37639:63;:::i;:::-;;701:1544:93;;37768:26:71;;;;;;701:1544:93;37768:26:71;;;:::i;:::-;;;;37524:718;701:1544:93;;;;1443:21:45;1439:82;;38028:27:71;701:1544:93;1530:151:45;;;;701:1544:93;38011:44:71;38224:6;38007:110;38082:20;37491:23;38082:20;701:1544:93;37491:23:71;38082:20;1439:82:45;1487:23;37491::71;1487::45;701:1544:93;37491:23:71;1487::45;701:1544:93;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;701:1544:93;;;;;;;;;;:::i;:::-;3908:87:71;;:::i;:::-;8718:4:70;;;:::i;:::-;-1:-1:-1;;;;;701:1544:93;;;-1:-1:-1;701:1544:93;-1:-1:-1;701:1544:93;;;-1:-1:-1;701:1544:93;;22085:11:71;701:1544:93;;;-1:-1:-1;701:1544:93;;;;;;;;;;;;;;;;;-1:-1:-1;701:1544:93;;-1:-1:-1;701:1544:93;;-1:-1:-1;701:1544:93;;;;;;;;;;;;;;;;:::i;:::-;22179:61:71;701:1544:93;;22179:61:71;;;:::i;:::-;22263:24;;;;:::i;:::-;22303:13;-1:-1:-1;22318:13:71;;;;;;701:1544:93;;;;;;;;:::i;22333:3:71:-;701:1544:93;22381:20:71;22442:35;701:1544:93;22381:31:71;:20;;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;;22381:20:71;22402:9;;;;;:::i;701:1544:93:-;22442:35:71;:::i;:::-;22426:51;;;;:::i;:::-;701:1544:93;;22303:13:71;;701:1544:93;;;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;;;;-1:-1:-1;701:1544:93;;;;;;;;;;;;;-1:-1:-1;;701:1544:93;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;2143:93;701:1544;;;:::i;:::-;1083:103:53;;;;;;;:::i;:::-;701:1544:93;;;;2143:93;;;;;701:1544;2143:93;;-1:-1:-1;;;;;701:1544:93;;;;2143:93;;701:1544;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;701:1544:93;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;2143:93;2158:4;-1:-1:-1;2158:4:93;2143:93;;;;;;;;701:1544;1148:1:53;;:::i;:::-;701:1544:93;2143:93;;;;;;;;;;;;;:::i;:::-;;;;;701:1544;;;;;-1:-1:-1;;701:1544:93;;;;;3908:87:71;;:::i;:::-;701:1544:93;9187:17:73;2806:53:55;701:1544:93;;;;;;;;;;;;;1237:14:44;29693:33:71;-1:-1:-1;;;;;701:1544:93;;;:::i;:::-;3908:87:71;;;;:::i;:::-;8718:4:70;;;:::i;:::-;701:1544:93;-1:-1:-1;701:1544:93;29693:20:71;701:1544:93;;;-1:-1:-1;701:1544:93;;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;29693:33:71;701:1544:93;1460:31:44;701:1544:93;;;;;;;;;;;-1:-1:-1;;701:1544:93;;;;;3908:87:71;;:::i;:::-;701:1544:93;-1:-1:-1;;;;;31246:22:71;701:1544:93;;;;;;;;;;;;;-1:-1:-1;;701:1544:93;;;;;;27132:33:71;701:1544:93;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;:::i;:::-;3908:87:71;;:::i;:::-;27132:33;:::i;:::-;701:1544:93;;;;;;;;;;;-1:-1:-1;;701:1544:93;;;;;-1:-1:-1;;;;;701:1544:93;;;;;:::i;:::-;3908:87:71;;:::i;:::-;701:1544:93;-1:-1:-1;701:1544:93;5935:11:71;701:1544:93;;;;-1:-1:-1;701:1544:93;;;;;;;;;;;;;-1:-1:-1;;701:1544:93;;;;;;5752:26:71;701:1544:93;;;;;:::i;:::-;3908:87:71;;:::i;:::-;9520:18:73;1796:196:47;-1:-1:-1;;;;;701:1544:93;-1:-1:-1;701:1544:93;;;;-1:-1:-1;701:1544:93;2806:53:55;1796:196:47;;701:1544:93;;;;;-1:-1:-1;;701:1544:93;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;3908:87:71;;:::i;:::-;2707:73:70;;:::i;:::-;1083:103:53;;:::i;:::-;8882:4:70;;;:::i;:::-;-1:-1:-1;;;;;701:1544:93;;;;;;-1:-1:-1;701:1544:93;;;-1:-1:-1;701:1544:93;;17044:44:70;701:1544:93;-1:-1:-1;701:1544:93;;1192:1:75;2788:189:76;958:1:75;7916:84:49;;2788:189:76;;17044:44:70;16646:28;16642:93;;32579:24:71;;-1:-1:-1;;;;;701:1544:93;;;32579:18:71;701:1544:93;;;;;;;32579:24:71;701:1544:93;;;:::i;:::-;32769:17:71;701:1544:93;32769:17:71;;-1:-1:-1;;;;;701:1544:93;;;23356:11:71;701:1544:93;;;;;;;;32753:33:71;;;701:1544:93;32796:16:71;32867:31;701:1544:93;32796:16:71;;701:1544:93;;;;32867:31:71;:::i;:::-;32846:18;701:1544:93;32846:18:71;;:52;;;-1:-1:-1;32983:3:71;701:1544:93;;32961:20:71;;;;;33026;:36;:20;701:1544:93;33026:20:71;;701:1544:93;;;;;;;;;;33026:20:71;701:1544:93;1237:14:44;1460:31;1371:127;;33026:36:71;33002:60;:18;;;:60;:::i;:::-;701:1544:93;;32946:13:71;;32961:20;;;;;;;33099:146;33155:18;;;2487:20:95;;-1:-1:-1;;;;;701:1544:93;;;2487:14:95;701:1544:93;;;;;;;2487:20:95;701:1544:93;33099:146:71;;:::i;:::-;701:1544:93;33658:31:71;701:1544:93;;33658:31:71;:::i;:::-;33631:24;701:1544:93;33631:24:71;;:58;;;33727;9851:16:73;;2806:53:55;9702:26:73;2574:386:47;-1:-1:-1;701:1544:93;;;;-1:-1:-1;701:1544:93;;-1:-1:-1;701:1544:93;;;;-1:-1:-1;701:1544:93;2806:53:55;2574:386:47;;33727:58:71;701:1544:93;;33699:25:71;;;701:1544:93;;;33699:25:71;;33866:133;;32941:132;-1:-1:-1;34051:3:71;701:1544:93;;34029:20:71;;;;;34295:16;701:1544:93;;;;;;;;;;;;;;34070:207:71;;34051:3;34295:16;;;;;:::i;:::-;701:1544:93;34314:16:71;;;;:::i;:::-;701:1544:93;-1:-1:-1;34291:152:71;;34517:13;;;;34702:41;34517:13;;34702:41;34517:13;34535:16;34517;;701:1544:93;34517:13:71;34727:16;34517:13;;:16;:::i;:::-;34535;;;;:::i;:::-;701:1544:93;34535:16:71;;:::i;:::-;34727;:::i;:::-;701:1544:93;34702:18:71;;:41;;;;;:::i;:::-;701:1544:93;34702:41:71;:::i;:::-;;;:::i;:::-;701:1544:93;;34014:13:71;;34291:152;34375:13;;34411:16;34375:13;34393:16;34375:13;;:16;;:13;34357:71;34375:13;;:16;:::i;:::-;34393;;:::i;:::-;701:1544:93;34411:16:71;;:::i;:::-;701:1544:93;34357:71:71;-1:-1:-1;34357:71:71;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;;;34357:71:71;-1:-1:-1;34357:71:71;34070:207;34149:48;34235:27;34149:16;34215:47;34149:16;;;;;:::i;:::-;701:1544:93;34172:24:71;;701:1544:93;34149:48:71;;:::i;:::-;34119:78;:24;;;:78;:::i;:::-;701:1544:93;34235:24:71;:27;:::i;:::-;701:1544:93;34215:47:71;;;;:::i;:::-;;;;;:::i;:::-;701:1544:93;34070:207:71;;;;;;34029:20;;;;;;;;;;;35092:24;;-1:-1:-1;;;;;701:1544:93;;;32579:18:71;701:1544:93;;;;;;;35092:24:71;35132:13;-1:-1:-1;35169:3:71;701:1544:93;;35147:20:71;;;;;35205:15;35252:51;35205:15;35281:21;35205:15;;701:1544:93;35205:15:71;;701:1544:93;;;;;;;;;;35205:15:71;701:1544:93;35281:18:71;;:21;:::i;:::-;701:1544:93;35252:51:71;;:::i;:::-;35234:15;;;701:1544:93;;;;;;;;;;35234:15:71;701:1544:93;;35132:13:71;;35147:20;701:1544:93;35147:20:71;-1:-1:-1;35147:20:71;;35899:205;35147:20;;35899:205;2487:20:95;35147::71;35866:16;35147:20;35364:16;35352:10;;35364:16;;;:::i;:::-;35396:17;;:::i;:::-;35392:180;;35127:187;35866:16;;;:::i;:::-;-1:-1:-1;;;;;701:1544:93;;;2487:14:95;701:1544:93;;;;;;;2487:20:95;701:1544:93;36070:24:71;;701:1544:93;;;;;;;35899:205:71;;;:::i;:::-;;;;1148:1:53;;:::i;:::-;701:1544:93;;;;;;;:::i;35392:180:71:-;35544:16;;;;;:::i;:::-;35392:180;;33866:133;33938:50;:21;;-1:-1:-1;;;;;701:1544:93;-1:-1:-1;701:1544:93;-1:-1:-1;701:1544:93;;;-1:-1:-1;701:1544:93;;;33938:21:71;701:1544:93;33938:50:71;:::i;:::-;701:1544:93;33911:24:71;;701:1544:93;33866:133:71;;16642:93:70;16697:27;;-1:-1:-1;16697:27:70;701:1544:93;;;-1:-1:-1;16697:27:70;701:1544:93;;;;;-1:-1:-1;;701:1544:93;;;;;3908:87:71;;:::i;:::-;701:1544:93;-1:-1:-1;;;;;38971:11:71;701:1544:93;;;;;;;;;;;;;;;-1:-1:-1;;701:1544:93;;;;;;6119:58:71;701:1544:93;;;;;:::i;:::-;3908:87:71;;:::i;:::-;9851:16:73;2806:53:55;9702:26:73;2574:386:47;-1:-1:-1;701:1544:93;;;;-1:-1:-1;701:1544:93;;-1:-1:-1;701:1544:93;;;;-1:-1:-1;701:1544:93;2806:53:55;2574:386:47;;6119:58:71;701:1544:93;;;;;;;;;;;;;-1:-1:-1;;701:1544:93;;;;;-1:-1:-1;;;;;701:1544:93;;;;;:::i;:::-;3908:87:71;;:::i;:::-;8718:4:70;;;:::i;:::-;701:1544:93;-1:-1:-1;701:1544:93;-1:-1:-1;701:1544:93;;;30290:35:71;701:1544:93;-1:-1:-1;701:1544:93;;30290:35:71;:::i;701:1544:93:-;;;;;-1:-1:-1;;701:1544:93;;;;;3908:87:71;;:::i;:::-;701:1544:93;7916:84:49;38385:15:71;701:1544:93;7916:84:49;701:1544:93;;;;;;;;;;;;;;;:::i;:::-;3908:87:71;;;;:::i;:::-;2707:73:70;;:::i;:::-;8718:4;;;:::i;:::-;1083:103:53;;:::i;:::-;16436:4:71;;;:::i;:::-;16596:40;;;:::i;:::-;701:1544:93;16651:43:71;701:1544:93;;1038:1:75;1904:184:76;7916:84:49;;;1904:184:76;;16651:43:71;16647:109;;16785:15;;;701:1544:93;16785:15:71;;;16865:21;16785:15;18155:51;16785:15;;;;701:1544:93;;;16865:21:71;;:::i;:::-;17146:30;;;;;;17080:139;17190:19;;;;;;17080:139;;;:::i;:::-;701:1544:93;;17234:52:71;701:1544:93;;7916:84:49;2495:194:74;958:1:75;7916:84:49;;2495:194:74;;17234:52:71;17230:789;;701:1544:93;18044:96:71;;;;;;;;;;;;;:::i;:::-;701:1544:93;;;;7916:84:49;2990:192:74;958:1:75;7916:84:49;;2990:192:74;;18155:51:71;18151:303;;701:1544:93;1148:1:53;;;;:::i;18151:303:71:-;18306:21;;18429:13;18306:21;-1:-1:-1;;;;;701:1544:93;;;17376:15:71;701:1544:93;;;;;;;18306:21:71;701:1544:93;-1:-1:-1;;;;;701:1544:93;;;18306:21:71;18429:13;;:::i;:::-;18151:303;;;;;;17230:789;17376:21;17857:151;17376:21;;;;;;;18044:96;17376:21;;;;;-1:-1:-1;;;;;701:1544:93;;;17376:15:71;701:1544:93;;;;;;;17376:21:71;;;:::i;:::-;17706:19;17680:24;;-1:-1:-1;;;;;701:1544:93;;;32579:18:71;701:1544:93;;;;;;;17680:24:71;17706:19;;:::i;:::-;17927:30;17975:19;;17857:151;;;:::i;:::-;17230:789;;;;;;;;;;16647:109;16717:28;-1:-1:-1;16717:28:71;-1:-1:-1;;;;;701:1544:93;;;;;-1:-1:-1;34357:71:71;701:1544:93;;;;;-1:-1:-1;;701:1544:93;;;;;-1:-1:-1;;;;;701:1544:93;;;;;:::i;:::-;3908:87:71;;:::i;:::-;8718:4:70;;;:::i;:::-;701:1544:93;-1:-1:-1;701:1544:93;-1:-1:-1;701:1544:93;;;1192:1:75;701:1544:93;-1:-1:-1;701:1544:93;;958:1:75;7916:84:49;;701:1544:93;;;;;;;;;;;;;-1:-1:-1;;701:1544:93;;;;;-1:-1:-1;;;;;701:1544:93;;;;;:::i;:::-;3908:87:71;;:::i;:::-;701:1544:93;-1:-1:-1;701:1544:93;-1:-1:-1;701:1544:93;;;7916:84:49;701:1544:93;-1:-1:-1;701:1544:93;;7916:84:49;701:1544:93;;;;;;;;;;;;;-1:-1:-1;;701:1544:93;;;;;;;;;;;;;;;;;;;:::i;:::-;3908:87:71;;:::i;:::-;8718:4:70;39643:10:71;8718:4:70;:::i;:::-;701:1544:93;;;;;;;;;;;;;;;;-1:-1:-1;701:1544:93;;;;;;39670:47:71;701:1544:93;;39643:10:71;701:1544:93;39643:10:71;-1:-1:-1;;701:1544:93;39643:10:71;701:1544:93;;;;;39670:47:71;;;;701:1544:93;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;701:1544:93;;;;;;;;;;:::i;:::-;3908:87:71;;:::i;:::-;8718:4:70;;;:::i;:::-;-1:-1:-1;;;;;701:1544:93;;;-1:-1:-1;701:1544:93;21601:11:71;701:1544:93;;;-1:-1:-1;701:1544:93;;;;;;;;;;;;;;;-1:-1:-1;701:1544:93;;-1:-1:-1;701:1544:93;;-1:-1:-1;701:1544:93;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;701:1544:93;;;;;;25833:58:71;701:1544:93;;;;;:::i;:::-;;;:::i;:::-;;3908:87:71;;:::i;:::-;8718:4:70;;;:::i;:::-;-1:-1:-1;;;;;701:1544:93;;;-1:-1:-1;701:1544:93;-1:-1:-1;701:1544:93;;;-1:-1:-1;701:1544:93;;;25869:15:71;701:1544:93;;;-1:-1:-1;701:1544:93;;;25833:58:71;;:::i;:::-;701:1544:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;;;-1:-1:-1;;701:1544:93;;;;;;551:66:53;2806:53:55;701:1544:93;;;;;;;;;;;;;-1:-1:-1;;701:1544:93;;;;;3908:87:71;;:::i;:::-;701:1544:93;9342:26:73;2806:53:55;701:1544:93;;;;;;;;;;;-1:-1:-1;;701:1544:93;;;;;27372:6:71;701:1544:93;;;;;:::i;:::-;;;;;;:::i;:::-;3908:87:71;;:::i;:::-;701:1544:93;;27344:10:71;;27372:6;:::i;:::-;701:1544:93;;;27396:4:71;701:1544:93;;;;;;;;-1:-1:-1;;701:1544:93;;;;;-1:-1:-1;;;;;701:1544:93;;;;;:::i;:::-;3908:87:71;;:::i;:::-;701:1544:93;-1:-1:-1;701:1544:93;2487:14:95;701:1544:93;;;;-1:-1:-1;701:1544:93;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;701:1544:93;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;:::i;:::-;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;1083:103:53;;;;;;;:::i;:::-;1617:4:93;1602:271;;;;701:1544;;1602:271;701:1544;;;;;;;;;;;1602:271;;;;;;701:1544;1602:271;;-1:-1:-1;;;;;701:1544:93;;;;1602:271;;701:1544;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;;;:::i;:::-;1602:271;1617:4;;;1602:271;;;;;;;;1148:1:53;;:::i;1602:271:93:-;;;;;;:::i;:::-;;;:::i;:::-;;;;701:1544;;;;;;;;;;;;;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;701:1544:93;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;3908:87:71;;:::i;:::-;8718:4:70;;;:::i;:::-;-1:-1:-1;;;;;701:1544:93;;;-1:-1:-1;701:1544:93;30543:17:71;701:1544:93;;;-1:-1:-1;701:1544:93;;;;;;;;;:::i;:::-;;;;;;;;30543:17:71;701:1544:93;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;701:1544:93;;;;;;;;;;;;;;;;;-1:-1:-1;701:1544:93;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::i;:::-;;;;;3510:55:106;-1:-1:-1;701:1544:93;;;;;:::i;:::-;36425:58:71;;:::i;:::-;3908:87;;:::i;701:1544:93:-;3462:31:106;;;;;37142:10:71;;3462:31:106;;;;:::i;:::-;37142:10:71;;3510:55:106;:::i;:::-;701:1544:93;;;;;3462:31:106;701:1544:93;;3462:31:106;701:1544:93;;;;:::i;:::-;;;;;;;;:::i;:::-;3908:87:71;;;;;;;;;;;:::i;:::-;1083:103:53;;:::i;:::-;5562:81:70;;:::i;:::-;701:1544:93;;;;;;:::i;:::-;;;7207:400:71;;;701:1544:93;;;7207:400:71;;701:1544:93;;;7207:400:71;;;701:1544:93;7207:400:71;701:1544:93;;;;;;7207:400:71;701:1544:93;;7207:400:71;701:1544:93;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;7207:400:71;701:1544:93;;;;;;:::i;:::-;7207:400:71;701:1544:93;;;;;;;;:::i;:::-;;;;;7207:400:71;;;701:1544:93;-1:-1:-1;;;;;701:1544:93;7207:400:71;;;701:1544:93;;7207:400:71;701:1544:93;;;:::i;:::-;7207:400:71;;;701:1544:93;7207:400:71;:::i;701:1544:93:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;701:1544:93;;;;;;24355:17:71;701:1544:93;;;;;:::i;:::-;-1:-1:-1;701:1544:93;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24355:17:71;:::i;:::-;701:1544:93;;;;;;;:::i;:::-;;;;;-1:-1:-1;;701:1544:93;;;;;;2620:24:95;701:1544:93;;;;;:::i;:::-;-1:-1:-1;;;;;701:1544:93;;;;;;:::i;:::-;3908:87:71;;:::i;:::-;701:1544:93;-1:-1:-1;701:1544:93;2620:9:95;701:1544:93;;;-1:-1:-1;701:1544:93;;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;2620:24:95;701:1544:93;;;;;;;;;;;;-1:-1:-1;;701:1544:93;;;;;;;;-1:-1:-1;;;;;4888:6:71;701:1544:93;;;;;;;;;;;:::i;:::-;;-1:-1:-1;701:1544:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;3908:87:71:-;8709:136:74;3908:87:71;;;:::i;:::-;8882:4:70;;;:::i;:::-;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;;;;;;30972:50:71;701:1544:93;;;;30972:50:71;:::i;:::-;701:1544:93;;;31040:15:71;701:1544:93;;;;;;;;;;8709:136:74;;;;;;;701:1544:93;8709:136:74;;;;;;:::i;:::-;;;;;;;;;;701:1544:93;;;8709:136:74;;;3908:87:71;701:1544:93;;;8856:93:74;;19917:10:33;9153:38:74;;9149:109;;3908:87:71;:::o;9149:109:74:-;9214:33;701:1544:93;9214:33:74;8709:136;701:1544:93;9214:33:74;8856:93;8899:39;701:1544:93;8899:39:74;8709:136;701:1544:93;8899:39:74;8709:136;;;;;;;;;;-1:-1:-1;8709:136:74;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;701:1544:93;;;;;;;;;;;:::o;:::-;;;;;19596:4:71;701:1544:93;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;701:1544:93;;-1:-1:-1;701:1544:93;;-1:-1:-1;701:1544:93;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;-1:-1:-1;701:1544:93;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;701:1544:93;;;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;701:1544:93;;;;:::i;:::-;;;-1:-1:-1;701:1544:93;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;701:1544:93;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;:::i;:::-;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;701:1544:93;;;;:::o;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;701:1544:93;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;701:1544:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;701:1544:93;;;;;;;;;;;:::o;:::-;;;;;;;;;;;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;:::o;3908:87:71:-;24408:21;3908:87;;;:::i;:::-;8718:4:70;;;:::i;:::-;-1:-1:-1;;;;;701:1544:93;-1:-1:-1;701:1544:93;-1:-1:-1;701:1544:93;;;-1:-1:-1;701:1544:93;;;24408:21:71;701:1544:93;24459:1166:71;7916:84:49;24759:35:71;;;:::i;:::-;24840:38;24459:1166;24840:38;;;:::i;:::-;24459:1166;24925:39;;;:::i;:::-;701:1544:93;9470:46:76;701:1544:93;6019:108:49;;11059:44:76;701:1544:93;11059:44:76;;701:1544:93;2895:125:75;;11059:44:76;6019:108:49;;701:1544:93;;;:::i;:::-;958:1:75;7916:84:49;;;;;3567:86:76;25319:37:71;701:1544:93;;7916:84:49;958:1:75;7916:84:49;;;;;701:1544:93;;25137:473:71;;;701:1544:93;958:1:75;7916:84:49;;;;;701:1544:93;;25137:473:71;;;701:1544:93;958:1:75;7916:84:49;;;;;701:1544:93;;25137:473:71;;;701:1544:93;;;:::i;:::-;;;;25137:473:71;24459:1166;;701:1544:93;25137:473:71;24459:1166;;701:1544:93;25137:473:71;24459:1166;;701:1544:93;;;;24459:1166:71;;701:1544:93;;24459:1166:71;701:1544:93;;24459:1166:71;;;701:1544:93;;24459:1166:71;7916:84:49;;;701:1544:93;;24459:1166:71;;;701:1544:93;7916:84:49;;;;;701:1544:93;;24459:1166:71;;;701:1544:93;958:1:75;7916:84:49;;;;;701:1544:93;;24459:1166:71;;;701:1544:93;958:1:75;7916:84:49;;701:1544:93;;24459:1166:71;;;701:1544:93;;39955:69:71;39999:18;;;;;;40301:144;40352:9;40348:69;;1019:819:101;40364:1:71;1019:819:101;;40364:1:71;1019:819:101;;39438:11:71;-1:-1:-1;;;;;39438:11:71;701:1544:93;1019:819:101;;;40364:1:71;1019:819:101;;;;;;40364:1:71;1019:819:101;;;40364:1:71;1019:819:101;4001:99:71;-1:-1:-1;;;;;4061:6:71;701:1544:93;1148:4:79;1140:31;1136:104;;4001:99:71:o;1136:104:79:-;1194:35;;;;;;8911:160:70;-1:-1:-1;;;;;701:1544:93;;9217:15:70;701:1544:93;9217:15:70;701:1544:93;;7916:84:49;701:1544:93;9217:15:70;701:1544:93;;7916:84:49;8984:24:70;8980:85;;8911:160;:::o;8980:85::-;9031:23;9217:15;9031:23;;701:1544:93;;9217:15:70;9031:23;9293:163;-1:-1:-1;;;;;701:1544:93;;9604:15:70;701:1544:93;9604:15:70;701:1544:93;;1038:1:75;701:1544:93;9604:15:70;701:1544:93;;7916:84:49;;;9367:25:70;9363:87;;9293:163;:::o;9363:87::-;9415:24;9604:15;9415:24;;701:1544:93;;9604:15:70;9415:24;12436:323;;-1:-1:-1;;;;;701:1544:93;;:::i;:::-;;;-1:-1:-1;701:1544:93;12587:18:70;701:1544:93;;;;-1:-1:-1;701:1544:93;-1:-1:-1;701:1544:93;;;-1:-1:-1;701:1544:93;;;12660:14:70;701:1544:93;;;-1:-1:-1;701:1544:93;;12694:11:70;701:1544:93;;;-1:-1:-1;701:1544:93;;;;;;;;;1947:15:77;;701:1544:93;;:::i;:::-;1947:24:77;;2002:26;;;:::i;:::-;1981:18;;;;:47;;;2061:24;;;:::i;:::-;2038:20;;;;:47;;;2127:24;;;:::i;:::-;2095:29;;;;;;:56;2194:74;701:1544:93;;;2194:74:77;:::i;:::-;2161:30;;;:107;2300:24;;;:::i;:::-;2278:19;;;:46;;;701:1544:93;;1038:1:75;;7916:84:49;1038:1:75;7916:84:49;;;;2365:119:77;;;;12436:323:70;2365:190:77;;;;12436:323:70;2571:13:77;-1:-1:-1;2586:13:77;;;;;;12436:323:70;;;;;;;;;;;;;:::o;2601:3:77:-;2663:15;;;;;;;2755:33;2663:15;2720:20;2663:15;701:1544:93;2649:33:77;2663:15;;:18;:15;:18;:15;;:18;:::i;701:1544:93:-;2720:20:77;701:1544:93;;;;;;;;;;2720:20:77;701:1544:93;2755:18:77;;:33;;;;;:::i;:::-;;;:::i;:::-;;2827:23;;;:::i;:::-;2802:48;:19;;;:48;:::i;:::-;701:1544:93;2932:17:77;1237:14:44;1460:31;;2932:17:77;;;:::i;:::-;701:1544:93;;;;3059:78:77;;3800:23;;701:1544:93;;;3800:69:77;;;;2601:3;3977:660;;;;2601:3;;;;;;2571:13;701:1544:93;2571:13:77;;;;3977:660;701:1544:93;4236:195:77;701:1544:93;4157:23:77;701:1544:93;4062:56:77;701:1544:93;;4062:56:77;:::i;:::-;4157:20;;:23;:::i;:::-;701:1544:93;;;4236:195:77;;:::i;:::-;4454:30;;4450:173;;3977:660;;;;;;;4450:173;4586:17;4545:39;;;;:::i;:::-;4586:17;;:::i;:::-;4450:173;;;;;;3800:69;701:1544:93;;;;;;;:::i;:::-;;;;:::i;:::-;3827:42:77;3800:69;;;;3059:78;3114:8;;;;;;;;;;2365:190;701:1544:93;;;;-1:-1:-1;958:1:75;7916:84:49;1192:1:75;7916:84:49;701:1544:93;2365:190:77;;;:119;2424:56;;;;;:::i;:::-;:60;;2365:119;;;;7222:480:70;-1:-1:-1;;;;;701:1544:93;7336:15:70;701:1544:93;7336:15:70;701:1544:93;;;7336:15:70;701:1544:93;;7916:84:49;;;958:1:75;7916:84:49;;701:1544:93;11059:44:76;;;701:1544:93;2895:125:75;;11059:44:76;6019:108:49;;7592:82:70;;;;7584:111;;7222:480;:::o;7592:82::-;7648:26;;7627:47;7648:26;7627:47;;:::i;:::-;701:1544:93;7608:15:70;:66;;7584:111;7222:480;:::o;958:1:75:-;701:1544:93;;958:1:75;701:1544:93;958:1:75;;701:1544:93;958:1:75;;;;:::o;19669:4:33:-;;701:1544:93;19669:4:33;;;;;;701:1544:93;19669:4:33;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;6731:255:76:-;6019:108:49;6731:255:76;958:1:75;6019:108:49;;19669:4:33;;;;;;;;;;;;;;;;6731:255:76;:::o;701:1544:93:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;701:1544:93;;;;;;;;465:4:50;;;;;;;:::o;:::-;;;;;;;;;;1320:325;;465:4;19669::33;;;;;;;;;;;;;;;1625:13:50;;;:::i;6992:619:76:-;;19917:10:33;7292:26:76;;7288:97;;19669:4:33;465::50;;701:1544:93;19627:2:33;701:1544:93;9400:76:49;;2539:209;;701:1544:93;2539:209:49;;;;6992:619:76;:::o;9400:76:49:-;9450:15;-1:-1:-1;9450:15:49;;-1:-1:-1;9450:15:49;36489:409:71;859:9:41;36531:114:71;;701:1544:93;36679:15:71;701:1544:93;7916:84:49;36722:71:71;;701:1544:93;9187:17:73;3051:52:55;36489:409:71:o;36722:71::-;36765:17;36572:5;36765:17;;36572:5;36765:17;36531:114;36600:34;36572:5;36600:34;;36572:5;36600:34;1741:504:45;701:1544:93;;1881:21:45;:17;;2008:160;;;;;;4625:582:106;;4797:8;;-1:-1:-1;701:1544:93;;5874:21:106;:17;;6046:142;;;;;;5870:383;6225:17;5894:1;6225:17;;5894:1;6225:17;4793:408;701:1544:93;;5045:22:106;:49;;;4793:408;5041:119;;5173:17;;:::o;5041:119::-;-1:-1:-1;;;;;5121:24:106;;5066:1;5121:24;701:1544:93;5121:24:106;701:1544:93;;5066:1:106;5121:24;5045:49;5071:18;;;:23;5045:49;;9628:806:76;;701:1544:93;9811:24:76;;;:::i;:::-;9470:46;701:1544:93;6019:108:49;;-1:-1:-1;9952:13:76;;;;;;10406:21;;;9628:806;:::o;9967:3::-;6019:108:49;10054:42:76;;;;:::i;:::-;6019:108:49;;3267:1:75;;;;;;701:1544:93;3267:1:75;;;10348:37:76;;;;:::i;:::-;701:1544:93;;9937:13:76;;7436:424:77;701:1544:93;;;;;:::i;:::-;;;;:::i;:::-;7589:31:77;;;7636:21;;465:4:50;7585:269:77;7436:424::o;7585:269::-;701:1544:93;;7691:19:77;701:1544:93;;:::i;:::-;7678:32:77;7691:19;;7733:22;:30;701:1544:93;7733:22:77;:32;:22;;701:1544:93;-1:-1:-1;;;;;701:1544:93;;;;-1:-1:-1;;;;;701:1544:93;;;7733:30:77;701:1544:93;;7733:32:77;;;;701:1544:93;7733:32:77;;;;;;;;;701:1544:93;7733:32:77;;;7726:39;7674:180;7436:424::o;7733:32::-;;;;:22;:32;:22;:32;;;;;;;:::i;7674:180::-;7803:40;701:1544:93;7803:40:77;;701:1544:93;7803:40:77;1192:349:53;551:66;2806:53:55;;1316:93:53;;1529:4;3051:52:55;;1192:349:53:o;1316:93::-;1368:30;-1:-1:-1;1368:30:53;;-1:-1:-1;1368:30:53;1547:106;1640:5;551:66;3051:52:55;1547:106:53:o;2657:309:95:-;-1:-1:-1;;;;;701:1544:93;2657:309:95;701:1544:93;;;;;;2822:16:95;701:1544:93;;2854:24:95;;;;-1:-1:-1;;2854:24:95;:::o;2818:142::-;2916:33;701:1544:93;2916:24:95;701:1544:93;;;;2916:11:95;701:1544:93;;;;;;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;2916:24:95;701:1544:93;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;2916:33:95;701:1544:93;2909:40:95;:::o;2786:145:70:-;9187:17:73;2806:53:55;701:1544:93;2837:88:70;;2786:145::o;2837:88::-;2894:20;-1:-1:-1;2894:20:70;;-1:-1:-1;2894:20:70;4619:1444:59;;;5749:30;701:1544:93;;5749:30:59;:::i;:::-;5794:13;5806:1;5830:3;701:1544:93;;5809:19:59;;;;;6003:11;6002:44;6003:11;:25;:11;;701:1544:93;6003:11:59;;;:::i;:::-;701:1544:93;6003:25:59;:::i;:::-;6002:44;:::i;:::-;5986:60;;;;:::i;:::-;701:1544:93;;5794:13:59;;5809:19;;;;;4619:1444::o;887:427:50:-;;1068:5;887:427;1068:5;:::i;:::-;1186:122;;-1:-1:-1;;1186:122:50;;;;;;;;887:427;:::o;3450:119:70:-;;3544:17;3450:119;3544:17;:::i;:::-;701:1544:93;;;;;;3543:18:70;701:1544:93;-1:-1:-1;701:1544:93;3543:18:70;;:::i;1736:177:44:-;;1848:58;1736:177;1616:3;701:1544:93;1848:58:44;;:::i;8289:494:95:-;;;;;;8422:32;;;;;:::i;:::-;-1:-1:-1;;8468:37:95;;8464:313;;8289:494;;;;;;;:::o;8464:313::-;8525:25;;;8521:132;;701:1544:93;8726:25:95;701:1544:93;;;8726:25:95;;:::i;:::-;8464:313;;;;;;;8521:132;8577:61;;-1:-1:-1;;;;;8577:61:95;;;;701:1544:93;8577:61:95;701:1544:93;;;;;;8577:61:95;;17101:159:70;859:9:41;:23;17174:79:70;;;17101:159;:::o;17174:79::-;701:1544:93;7916:84:49;17211:15:70;701:1544:93;7916:84:49;701:1544:93;17101:159:70;:::o;701:1544:93:-;;;;;;;;;;:::o;3162:428:95:-;;859:9:41;3337:114:95;;-1:-1:-1;;;;;3545:28:95;701:1544:93;;3378:5:95;701:1544:93;3545:9:95;701:1544:93;;;3378:5:95;701:1544:93;;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;3545:28:95;701:1544:93;;;;;;;;;;;3162:428:95:o;5216:1180::-;;;-1:-1:-1;;;;;701:1544:93;;;5298:18:95;;;5294:80;;5409:21;:15;;;-1:-1:-1;;;;;701:1544:93;;;5409:9:95;701:1544:93;;;;;;;5409:21:95;701:1544:93;5444:23:95;;;5440:115;;701:1544:93;;;5589:21:95;:15;;;-1:-1:-1;;;;;701:1544:93;;;5409:9:95;701:1544:93;;;;;;;5589:21:95;701:1544:93;5681:29:95;:20;;;-1:-1:-1;;;;;701:1544:93;;;2487:14:95;701:1544:93;;;;;;;5681:20:95;701:1544:93;5681:29:95;:::i;:::-;5751:14;;;:::i;:::-;5777:20;;-1:-1:-1;;;;;701:1544:93;;;2487:14:95;701:1544:93;;;;;;;5777:20:95;701:1544:93;;6113:62:95;;;;;;701:1544:93;;;6113:62:95;;-1:-1:-1;;;;;701:1544:93;;;6113:62:95;;;701:1544:93;5314:1:95;701:1544:93;;;;;;;;;;;;5314:1:95;6349:40;;;;5314:1;701:1544:93;;;;;6113:62:95;;;;;;;;;5216:1180;-1:-1:-1;701:1544:93;;;;;;;;;;;;;6349:40:95;;;;5216:1180::o;6113:62::-;;;;;;:::i;:::-;;;;5440:115;5490:54;5314:1;5490:54;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;;-1:-1:-1;34357:71:71;5294:80:95;5339:24;5314:1;5339:24;-1:-1:-1;;;;;701:1544:93;;;;;-1:-1:-1;34357:71:71;5894:129:70;;;:::i;:::-;7067:25;;;:::i;:::-;6800:73;;;5894:129;:::o;6800:73::-;-1:-1:-1;;;;;6846:16:70;;-1:-1:-1;6846:16:70;701:1544:93;6846:16:70;701:1544:93;;-1:-1:-1;6846:16:70;1418:149:43;1500:6;1496:65;;1418:149::o;1496:65::-;1529:21;;;;;;6714:614:46;;;701:1544:93;;;;;;;1666:6:43;;;;;;:16;;;6714:614:46;1662:75:43;;;;7101:21:46;;;:::i;:::-;7138:13;7150:1;7153:10;;;;;;7299:22;;;;;6714:614;:::o;7165:3::-;7205:10;465:4:50;838:5;7205:10:46;701:1544:93;7205:10:46;;;:::i;:::-;701:1544:93;1946:22:46;7245:17;;;;:::i;:::-;701:1544:93;7264:13:46;;;;:::i;:::-;701:1544:93;1946:22:46;;:::i;:::-;838:5:50;:::i;:::-;465:4;7184:94:46;;;;:::i;:::-;701:1544:93;;7138:13:46;;1666:16:43;1676:6;;;-1:-1:-1;1666:16:43;;;;701:1544:93;;;;;;;;;;;;;:::i;20684:329:74:-;;701:1544:93;20684:329:74;701:1544:93;-1:-1:-1;;;;;;20857:66:74;20684:329;701:1544:93;;20857:66:74;;;;;;;701:1544:93;20857:66:74;;701:1544:93;20857:66:74;;;701:1544:93;;;;;;:::i;:::-;;-1:-1:-1;;701:1544:93;;;;;;;;;:::i;:::-;20857:66:74;701:1544:93;;20857:66:74;;;;;;;-1:-1:-1;20857:66:74;;;20684:329;701:1544:93;;20853:154:74;;20684:329::o;20853:154::-;20955:41;-1:-1:-1;20955:41:74;20857:66;-1:-1:-1;20955:41:74;20857:66;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;6574:856:77;6819:15;;;;;701:1544:93;7033:13:77;-1:-1:-1;7048:13:77;;;;;;6574:856;;;;;:::o;7063:3::-;16616:19:71;7120:18:77;7395:17;1237:14:44;7120:18:77;7107:35;7120:21;:18;;;;;:21;:::i;:::-;;7107:35;:::i;:::-;7082:60;:19;;;;;:60;:::i;:::-;701:1544:93;;-1:-1:-1;701:1544:93;;;;-1:-1:-1;701:1544:93;;1460:31:44;7395:17:77;;;:::i;:::-;701:1544:93;7033:13:77;;18466:2486:71;;;;;;;18855:24;;-1:-1:-1;;;;;701:1544:93;;;32579:18:71;701:1544:93;;;;;;;18855:24:71;18895:13;18907:1;18938:3;18914:15;;;;701:1544:93;;18910:26:71;;;;;18978:18;;;;;:::i;:::-;19089:24;19104:9;;;;;:::i;19089:24::-;-1:-1:-1;;;;;701:1544:93;;19089:24:71;;;19085:132;;19298:17;;;701:1544:93;19298:17:71;;;;;:::i;:::-;701:1544:93;19298:17:71;;:::i;:::-;19426:80;19461:17;19480:25;19461:17;;;;;:::i;19480:25::-;701:1544:93;19426:80:71;;:::i;:::-;19408:15;;;701:1544:93;;;;;;;;;;19408:15:71;701:1544:93;;18895:13:71;;19085:132;19140:62;19169:9;;19161:18;19169:9;;;;;:::i;19161:18::-;19140:62;18907:1;19140:62;-1:-1:-1;;;;;701:1544:93;;;19140:62:71;701:1544:93;;;;;;;;;;;18910:26:71;;;;;;;;;;;19553:48;701:1544:93;;8470:156:49;;2094:277:76;8470:156:49;;2094:277:76;;19553:48:71;701:1544:93;;;19670:21:71;;-1:-1:-1;;;;;701:1544:93;-1:-1:-1;701:1544:93;-1:-1:-1;701:1544:93;;;-1:-1:-1;701:1544:93;;;19670:21:71;701:1544:93;-1:-1:-1;;;;;701:1544:93;19788:77:71;18914:15;701:1544:93;;;;;;19788:77:71;;;;701:1544:93;19788:77:71;;;;;;:::i;:::-;;;;;;;;;;20037:42;19788:77;18907:1;19788:77;;;18890:627;19906:12;;;;:::i;:::-;20037:42;:::i;:::-;20374:13;;;;:::i;:::-;20423:12;;;;;:::i;:::-;20511:30;;;20507:119;;2487:20:95;;;;20641:210:71;;2487:20:95;20804:37:71;18914:15;2487:20:95;701:1544:93;2487:20:95;;-1:-1:-1;;;;;701:1544:93;;;2487:14:95;701:1544:93;;;;;;;2487:20:95;701:1544:93;20818:15:71;;;701:1544:93;20804:37:71;:::i;:::-;701:1544:93;;;;;;;20641:210:71;;;:::i;:::-;;;;20924:21;18907:1;20924:21;;18466:2486::o;20507:119::-;20564:51;18907:1;20564:51;19788:77;701:1544:93;;;928:3:95;701:1544:93;928:3:95;-1:-1:-1;34357:71:71;19788:77;;;;18914:15;19788:77;18914:15;19788:77;;;;;;;:::i;:::-;;;;21457:370:74;;701:1544:93;-1:-1:-1;;;;;;21659:79:74;21457:370;;;701:1544:93;;;21659:79:74;;;;;;;701:1544:93;21659:79:74;;701:1544:93;21659:79:74;;;701:1544:93;;;;;;:::i;:::-;;;;;;-1:-1:-1;;701:1544:93;;;;;;;;;:::i;:::-;21659:79:74;701:1544:93;;21659:79:74;;;;;;;-1:-1:-1;21659:79:74;;;21457:370;701:1544:93;;21655:166:74;;21457:370::o;21655:166::-;21770:40;-1:-1:-1;21770:40:74;21659:79;-1:-1:-1;21770:40:74;21659:79;;;;;;;;;;;;;;:::i;:::-;;;;6940:1043;;701:1544:93;;:::i;:::-;-1:-1:-1;701:1544:93;1792:1:75;;2016:27;701:1544:93;2091:22:75;958:1;2091:22;:::i;:::-;2171:21;;;:::i;:::-;701:1544:93;7916:84:49;;2016:27:75;;;2091:22;958:1;2091:22;:::i;:::-;2171:21;;;:::i;:::-;2249:31;;;:::i;:::-;701:1544:93;7916:84:49;;;2016:27:75;;;2091:22;958:1;2091:22;:::i;:::-;2171:21;;;:::i;:::-;2249:31;;;:::i;:::-;2341:30;;;:::i;:::-;701:1544:93;7916:84:49;;;;2016:27:75;;2091:22;958:1;2091:22;:::i;:::-;2171:21;;;:::i;:::-;2249:31;;;:::i;:::-;2341:30;;;:::i;:::-;2431:34;;;:::i;:::-;701:1544:93;7916:84:49;;;2016:27:75;;;;;958:1;701:1544:93;7916:84:49;;;958:1:75;2091:22;;;:::i;:::-;701:1544:93;7916:84:49;;701:1544:93;;;:::i;:::-;958:1:75;7916:84:49;;;;;701:1544:93;;;;7916:84:49;958:1:75;7916:84:49;;;;;701:1544:93;;7080:896:74;;;701:1544:93;958:1:75;7916:84:49;;;;;701:1544:93;;7080:896:74;;;701:1544:93;958:1:75;7916:84:49;;701:1544:93;;7080:896:74;;;701:1544:93;;;7080:896:74;;;701:1544:93;;;7080:896:74;;;701:1544:93;;;7080:896:74;;;701:1544:93;;;7080:896:74;;;701:1544:93;;;7080:896:74;;;701:1544:93;;;7080:896:74;;;701:1544:93;-1:-1:-1;;;;;701:1544:93;7080:896:74;;;701:1544:93;;:::o;7374:909:95:-;;;;-1:-1:-1;;;;;701:1544:93;;;;7477:19:95;;;7473:84;;701:1544:93;;;7571:21:95;;;7567:87;;7664:17;:33;:17;:24;:17;;;-1:-1:-1;;;;;701:1544:93;;;7664:11:95;701:1544:93;;;;;;;7664:33:95;701:1544:93;;8004:60:95;;;;;;701:1544:93;;;8004:60:95;;-1:-1:-1;;;;;701:1544:93;;;8004:60:95;;;701:1544:93;;;;;;;;;;;;;;;8238:38:95;;;;7494:1;701:1544:93;;;;;8004:60:95;701:1544:93;7567:87:95;7615:28;7494:1;7615:28;-1:-1:-1;;;;;701:1544:93;;;;;-1:-1:-1;34357:71:71;7473:84:95;7519:27;7494:1;7519:27;-1:-1:-1;;;;;701:1544:93;;;;;-1:-1:-1;34357:71:71;5694:130:70;701:1544:93;6394:25:70;701:1544:93;6375:15:70;:44;;:79;;;5694:130;5751:67;;5694:130::o;5751:67::-;5794:13;-1:-1:-1;5794:13:70;;-1:-1:-1;5794:13:70;6375:79;701:1544:93;568:1:80;6423:15:70;701:1544:93;7916:84:49;;;6375:79:70;;1913:1:73;;701:1544:93;;;;;;:::i;:::-;;;;:::i;:::-;1913:1:73;;;;;701:1544:93;1913:1:73;;;;;701:1544:93;1913:1:73;;;;;;;;;;;;;;;;;;;;;701:1544:93;;;1913:1:73;;;;;;;:::o;:::-;;;;;;;;;;701:1544:93;;;1913:1:73;;;;;:::o;2080:2::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;701:1544:93;-1:-1:-1;701:1544:93;;-1:-1:-1;701:1544:93;2080:2:73;701:1544:93;;2080:2:73;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;701:1544:93;;;2080:2:73;;;;;;;701:1544:93;2080:2:73;;;;;;;;701:1544:93;2080:2:73;;;;-1:-1:-1;;;;;701:1544:93;2080:2:73;;;;;;;;;;;701:1544:93;2080:2:73;;;-1:-1:-1;;;;;701:1544:93;2080:2:73;;;;;;;;;;;;;;;;;;;701:1544:93;;2080:2:73;;701:1544:93;2080:2:73;:::o;:::-;;;;;;;;;;-1:-1:-1;;;;;701:1544:93;;;;;;2080:2:73;;;701:1544:93;2080:2:73;;;;;;;;;;:::i;:::-;;;;701:1544:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2080:2:73;;;;;;;;;;;:::i;:::-;701:1544:93;;;;:::i;:::-;2080:2:73;;701:1544:93;2080:2:73;;;701:1544:93;:::i;:::-;2080:2:73;;;;701:1544:93;2080:2:73;;;701:1544:93;:::i;:::-;2080:2:73;;;;701:1544:93;2080:2:73;;;701:1544:93;:::i;:::-;2080:2:73;;;;701:1544:93;2080:2:73;;;701:1544:93;:::i;:::-;2080:2:73;;;;701:1544:93;2080:2:73;;;701:1544:93;:::i;:::-;2080:2:73;;;;701:1544:93;2080:2:73;;;701:1544:93;:::i;:::-;2080:2:73;;;;701:1544:93;2080:2:73;;;701:1544:93;:::i;:::-;2080:2:73;;;;;701:1544:93;2080:2:73;;;701:1544:93;:::i;:::-;2080:2:73;;;;701:1544:93;2080:2:73;;;;701:1544:93;:::i;:::-;2080:2:73;;;;;:::o;:::-;;;;;;;;;701:1544:93;2080:2:73;;;;;;;;;;;;;:::i;:::-;;;;;701:1544:93;;2080:2:73;;;701:1544:93;2080:2:73;;;;701:1544:93;;;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;;;;;;;;;;;;;;;2080:2:73;;;;;701:1544:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;701:1544:93;;;;;2080:2:73;;;701:1544:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7951:7863:71;;9255:25:70;9217:21;;-1:-1:-1;;;;;701:1544:93;-1:-1:-1;701:1544:93;-1:-1:-1;701:1544:93;;;-1:-1:-1;701:1544:93;;;9217:21:70;701:1544:93;7916:84:49;;1435:182:76;;9255:25:70;8098:88:71;;8216:18;;701:1544:93;1746:1:73;8255:23:71;;8251:72;;1913:1:73;8336:23:71;;8332:72;;8449:22;;;;;;:::i;:::-;9217:15:70;8517:13:71;9217:15:70;8532:13:71;;;;;;10645:19;;10970:117;10645:19;;;;;;;;2080:2:73;10645:19:71;;10619:23;;-1:-1:-1;;;;;701:1544:93;;;10619:17:71;701:1544:93;;;;;;;10619:23:71;2080:2:73;:::i;:::-;10970:52:71;701:1544:93;10970:22:71;701:1544:93;-1:-1:-1;;;;;701:1544:93;;;10970:52:71;9210:22;11029:19;;:31;:19;;;:31;-1:-1:-1;;;;;701:1544:93;;;;;11029:31:71;11062:24;701:1544:93;9451:23:71;11062:24;;701:1544:93;;;;;;;;;10970:117:71;;-1:-1:-1;;;;;701:1544:93;;;9276:14:71;10970:117;;701:1544:93;;;;2080:2:73;;;701:1544:93;;;2080:2:73;;;701:1544:93;;;;;-1:-1:-1;701:1544:93;;9217:15:70;;701:1544:93;;2080:2:73;;;;;10970:117:71;;;;;;;;;9217:15:70;;;10970:117:71;;;8512:2038;11250:26;12041:74;11250:26;;;;11938:72;11724:89;11250:26;;701:1544:93;11760:52:71;6379:89:76;11188:129:71;701:1544:93;;;;958:1:75;8470:156:49;10619:17:71;8470:156:49;3899:414:76;;11188:129:71;9345:19;9451:23;5826:175:76;4964:169;9345:19:71;11385:51;;;;701:1544:93;;;8470:156:49;8160:472;701:1544:93;8470:156:49;;;;8160:472;;4964:169:76;11525:54:71;;;701:1544:93;;;8470:156:49;8160:472;701:1544:93;8470:156:49;;;;8160:472;;5826:175:76;11651:41:71;;701:1544:93;;;8470:156:49;8160:472;701:1544:93;8470:156:49;;;;8160:472;;6379:89:76;11760:52:71;;:::i;:::-;11724:89;701:1544:93;;;;;;2539:209:49;;;;;;;10440:413:76;;11724:89:71;11881:25;11844:63;11881:25;;;2080:2:73;;;;701:1544:93;;;;2080:2:73;11844:63:71;701:1544:93;;;;;;2539:209:49;;;;;;;11205:402:76;;11844:63:71;11938:72;:::i;:::-;12041:74;:::i;:::-;12134:24;;;;701:1544:93;-1:-1:-1;;;;;2080:2:73;;;;;;-1:-1:-1;;;;;701:1544:93;;;2080:2:73;701:1544:93;12134:38:71;12130:2933;;8512:2038;15077:21;;;;;;-1:-1:-1;;;;;701:1544:93;-1:-1:-1;701:1544:93;-1:-1:-1;701:1544:93;;;-1:-1:-1;701:1544:93;;;15077:21:71;701:1544:93;2080:2:73;;-1:-1:-1;;;;;701:1544:93;-1:-1:-1;;;;;701:1544:93;15129:21:71;;-1:-1:-1;;;;;701:1544:93;;;17376:15:71;701:1544:93;;;;;;;15129:21:71;:56;;;2080:2:73;-1:-1:-1;;;;;701:1544:93;2080:2:73;;;;;;;;15129:56:71;15345:24;;701:1544:93;;;15345:24:71;;;;:::i;:::-;15553:18;701:1544:93;;2080:2:73;;701:1544:93;;15662:19:71;;2080:2:73;;-1:-1:-1;;;;;701:1544:93;-1:-1:-1;;;;;701:1544:93;15695:62:71;;;:::i;:::-;15771:26;;701:1544:93;;15529:10:71;;;;701:1544:93;;15483:324:71;;;;;:::i;:::-;;;;;7951:7863::o;12130:2933::-;12311:227;12446:18;;;;;9217:15:70;12490:26:71;;701:1544:93;;;12311:227:71;;;;;;;701:1544:93;12311:227:71;;12380:10;9276:14;12311:227;;;:::i;:::-;;;;;;;;;;9217:15:70;12311:227:71;;;12130:2933;701:1544:93;;12286:394:71;;12904:45;:32;2080:2:73;;;-1:-1:-1;;;;;701:1544:93;;;12904:45:71;701:1544:93;;;12904:47:71;;701:1544:93;12904:47:71;;;9276:14;12904:47;;;;;;;;;;;9217:15:70;12904:47:71;;;12130:2933;-1:-1:-1;;701:1544:93;;;;13512:121:71;;;12130:2933;13487:279;;701:1544:93;;14990:40:71;6283:95:74;5748:91;5246:92;4764:82;4338:83;3891:88;3366;701:1544:93;;2874:89:74;701:1544:93;;6819:94:74;701:1544:93;;2368:100:74;701:1544:93;;;;;;;;;;8470:156:49;8160:472;701:1544:93;8470:156:49;;;;8160:472;;2368:100:74;13955:36:71;;701:1544:93;;;;;;8470:156:49;8160:472;701:1544:93;8470:156:49;;;;8160:472;;2874:89:74;14071:35:71;;;701:1544:93;;;;;;8470:156:49;8160:472;701:1544:93;8470:156:49;;;;8160:472;;3366:88:74;9451:23:71;14213:41;;701:1544:93;;;8470:156:49;8160:472;701:1544:93;8470:156:49;;;;8160:472;;3891:88:74;10645:19:71;14346:30;;701:1544:93;;;8470:156:49;8160:472;701:1544:93;8470:156:49;;;;8160:472;;4338:83:74;12134:24:71;14450:29;;701:1544:93;;;8470:156:49;8160:472;701:1544:93;8470:156:49;;;;8160:472;;4764:82:74;11250:26:71;14562:38;;701:1544:93;;;8470:156:49;8160:472;701:1544:93;8470:156:49;;;;8160:472;;5246:92:74;701:1544:93;14682:37:71;;701:1544:93;;;8470:156:49;8160:472;701:1544:93;8470:156:49;;;;8160:472;;5748:91:74;14826:41:71;;;701:1544:93;;;8470:156:49;8160:472;701:1544:93;8470:156:49;;;;8160:472;;701:1544:93;8470:156:49;8160:472;701:1544:93;8470:156:49;;;;8160:472;;6819:94:74;12130:2933:71;;;;13487:279;13681:66;2080:2:73;;;;-1:-1:-1;;;;;701:1544:93;;;2080:2:73;13681:66:71;9217:15:70;13681:66:71;-1:-1:-1;;;;;701:1544:93;;;19140:62:71;701:1544:93;;;;12380:10:71;701:1544:93;;;;;13512:121:71;13571:26;:62;:53;:26;;701:1544:93;;;;;13571:53:71;701:1544:93;;;;13571:62:71;;13512:121;;12904:47;;;;;;;-1:-1:-1;12904:47:71;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;12286:394;12595:66;2080:2:73;;;;-1:-1:-1;;;;;701:1544:93;;;12311:227:71;;;;;;;;;;;;;;:::i;:::-;;;;10970:117;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;8547:3;8597:21;:18;;;:21;:::i;:::-;;701:1544:93;;;;-1:-1:-1;;;;;701:1544:93;;;;;-1:-1:-1;;;;;701:1544:93;;;8736:28:71;;;:54;;;;8547:3;8732:114;;701:1544:93;8969:21:71;;;8965:97;;9080:22;;9076:97;;9210:22;;;;;701:1544:93;;;;;-1:-1:-1;;;;;701:1544:93;;;;-1:-1:-1;;;;;701:1544:93;9210:51:71;9345:19;;;;;;701:1544:93;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;701:1544:93;9451:23:71;;;701:1544:93;;;;;;;;;;;;;:::i;:::-;9306:183:71;;;;;:::i;:::-;-1:-1:-1;;;;;701:1544:93;;;9306:183:71;;;701:1544:93;;;9306:183:71;;;701:1544:93;9276:20:71;;;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;;9276:20:71;:27;;;701:1544:93;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;9276:27:71;1913:1:73;;;;:::i;:::-;701:1544:93;;;;;:::i;:::-;;;;:::i;:::-;9508:41:71;;9210:51;;;9573:42;;;9504:457;9569:123;;;9504:457;;;701:1544:93;10099:41:71;;;;701:1544:93;10099:41:71;;9276:14;10099:41;;;;;;;;;;9217:15:70;10099:41:71;;;9504:457;2080:2:73;;;701:1544:93;;;;;;;10159:35:71;10155:250;2080:2:73;;;10221:22:71;;9217:15:70;10221:22:71;9217:15:70;10221:22:71;10155:250;701:1544:93;2080:2:73;;;;;;;;;10314:58:71;2080:2:73;;;701:1544:93;10314:58:71;;;;:::i;:::-;2080:2:73;701:1544:93;;2080:2:73;;;10314:58:71;10475:29;:17;;;-1:-1:-1;;;;;701:1544:93;;;23356:11:71;701:1544:93;;;;;;;10475:17:71;:29;:::i;:::-;8547:3;8517:13;;;;;701:1544:93;8517:13:71;;10099:41;;;;;;-1:-1:-1;10099:41:71;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;9573:42;701:1544:93;;;;-1:-1:-1;9573:42:71;;;9504:457;701:1544:93;;;;;;;:::i;:::-;;;;:::i;:::-;9716:42:71;701:1544:93;;9778:105:71;;9712:249;;9504:457;;9712:249;9928:18;9217:15:70;9928:18:71;9276:14;9217:15:70;9928:18:71;9076:97;9129:29;9217:15:70;9129:29:71;-1:-1:-1;;;;;701:1544:93;;;;;-1:-1:-1;34357:71:71;8965:97;9017:30;9217:15:70;9017:30:71;9276:14;9217:15:70;9017:30:71;8732:114;8817:14;9217:15:70;8817:14:71;9276;9217:15:70;8817:14:71;8736:54;701:1544:93;;;;8768:22:71;;8736:54;;8332:72;8382:11;9217:15:70;8382:11:71;;9217:15:70;8382:11:71;8251:72;8301:11;9217:15:70;8301:11:71;;9217:15:70;8301:11:71;8098:88;8148:27;9217:15:70;8148:27:71;-1:-1:-1;;;;;701:1544:93;;;;;-1:-1:-1;34357:71:71;7617:261:76;6019:108:49;7617:261:76;701:1544:93;6019:108:49;;19669:4:33;;;;;;;;;;;;;;;;7617:261:76;:::o;8442:263::-;6019:108:49;;701:1544:93;6019:108:49;;19669:4:33;;;;;;;;;;;;;;;;8442:263:76;:::o;701:1544:93:-;;;;;;;;;;;;;;;;;;-1:-1:-1;701:1544:93;;-1:-1:-1;701:1544:93;;-1:-1:-1;701:1544:93;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;-1:-1:-1;701:1544:93;;;;;;;;;;2097:657:49;;701:1544:93;19627:2:33;701:1544:93;9400:76:49;;701:1544:93;2539:209:49;;;701:1544:93;2539:209:49;;;;2097:657;:::o;9180:112::-;9268:13;9186:14;9268:13;;9186:14;9268:13;2097:657;;8966:3;8956:13;;;;8952:64;;701:1544:93;;;;;;;;2641:5:118;9226:3:49;2641:5:118;:13;:5;;;:13;9226:3:49;2641:13:118;19627:2:33;9204:40:49;9180:112;;701:1544:93;19627:2:33;701:1544:93;9400:76:49;;2539:209;;;;;;;;;2097:657;:::o;2641:13:118:-;;;34375:314:119;34568:16;34552:33;;34548:105;;34375:314;:::o;34548:105::-;34608:34;;;;701:1544:93;;34608:34:119;;4346:904:70;;4485:10;;4481:23;;9520:18:73;4589:26:70;;;;1796:196:47;-1:-1:-1;;;;;701:1544:93;-1:-1:-1;701:1544:93;;;;-1:-1:-1;701:1544:93;2806:53:55;1796:196:47;;4589:26:70;701:1544:93;;;;;;4494:1:70;701:1544:93;;;;;;;;;;;;;4738:9:70;;;9342:26:73;;3831:53:55;;;-1:-1:-1;;701:1544:93;;;;;;;5238:4:70;3051:52:55;;5238:4:70;:::i;4734:423::-;4944:12;4940:217;;4734:423;5238:4;4734:423;5238:4;:::i;4940:217::-;9342:26:73;3831:53:55;;;6806:1:47;701:1544:93;;;;;;;5238:4:70;3051:52:55;;4940:217:70;;;;4481:23;4497:7;;:::o;2311:281:44:-;;1237:14;2426:25;;;:58;;;;;2311:281;2422:113;;;3080:3;2080:2:73;701:1544:93;;;;;;;;2311:281:44;:::o;2422:113::-;2507:17;;;;;;2426:58;2455:29;;;;2426:58;;;4358:211:95;928:3;4449:43;;4445:118;;4358:211;:::o;4445:118::-;4515:37;;;;701:1544:93;;4515:37:95;;7866:704:77;;;8372:29;465:4:50;838:5;8372:191:77;7866:704;8058:20;:48;:20;;;;;:48;:::i;:::-;701:1544:93;1946:22:46;8466:42:77;:30;;;;;:42;:::i;:::-;701:1544:93;8522:31:77;:19;;;;;:31;:::i;838:5:50:-;465:4;8372:29:77;;;:191;:::i;3804:110:70:-;3891:15;;3804:110;3891:15;:::i;:::-;;;:::i;4575:635:95:-;4643:20;;-1:-1:-1;;;;;701:1544:93;;;2487:14:95;701:1544:93;;;;;;;4643:20:95;701:1544:93;;;928:3:95;701:1544:93;;;;;;;;;-1:-1:-1;;;;;701:1544:93;;4842:15:95;;-1:-1:-1;;;;;701:1544:93;;;5409:9:95;701:1544:93;;;;;;;4842:15:95;-1:-1:-1;701:1544:93;;;;;-1:-1:-1;701:1544:93;;;;;;;;-1:-1:-1;701:1544:93;;4924:66:95;701:1544:93;;4924:66:95;;;701:1544:93;928:3:95;701:1544:93;;;;;;4924:66:95;;;;5115:88;;;;;-1:-1:-1;701:1544:93;;5115:88:95;;701:1544:93;5115:88:95;;;;;;;;;701:1544:93;928:3:95;701:1544:93;;;;;;;;;;;;;;;;5115:88:95;;;;;;;;;;;4575:635;:::o;5115:88::-;;;;;;:::i;3596:756::-;;-1:-1:-1;;;;;701:1544:93;;;3676:16:95;;;3672:78;;3785:29;:20;;;-1:-1:-1;;;;;701:1544:93;;;2487:14:95;701:1544:93;;;;;;;3785:20:95;701:1544:93;3785:29:95;:::i;:::-;3963:19;:15;;;-1:-1:-1;;;;;701:1544:93;;;5409:9:95;701:1544:93;;;;;;;3963:19:95;701:1544:93;;;;;;4043:14:95;;;:::i;:::-;4069:20;;-1:-1:-1;;;;;701:1544:93;;;2487:14:95;701:1544:93;;;;;;;4069:20:95;701:1544:93;;;3690:1:95;701:1544:93;4122:38:95;701:1544:93;;4122:38:95;;;;701:1544:93;;;;;;;;4122:38:95;;;;4285:60;;;;;701:1544:93;;;4285:60:95;;3690:1;4285:60;;;701:1544:93;;;-1:-1:-1;;;;;701:1544:93;;;;;;;;;;;;;;;;;;3690:1:95;701:1544:93;;;;4285:60:95;701:1544:93;3672:78:95;3715:24;3690:1;3715:24;-1:-1:-1;;;;;701:1544:93;;;;;-1:-1:-1;34357:71:71;11721:446:76;701:1544:93;;11721:446:76;701:1544:93;11899:3:76;701:1544:93;;11869:28:76;;;;;11960:20;;;;:::i;:::-;701:1544:93;;11998:42:76;;;;:::i;:::-;8966:3:49;;8956:13;;;;8952:64;;701:1544:93;;;;;;;;2641:5:118;;;;;;:13;;;701:1544:93;9204:40:49;;;9180:112;;701:1544:93;;;;;9400:76:49;;701:1544:93;;2539:209:49;701:1544:93;;2539:209:49;;;;;;;11899:3:76;701:1544:93;11854:13:76;;;2641::118;;;11869:28:76;701:1544:93;;;-1:-1:-1;;11721:446:76:o;7884:552::-;19917:10:33;8036:26:76;;8032:97;;19669:4:33;8232:183:76;465:4:50;;8232:183:76;;:::i;8711:554::-;;19917:10:33;8864:26:76;;8860:97;;9060:184;;19669:4:33;701:1544:93;465:4:50;;9060:184:76;;:::i;14924:779:70:-;;-1:-1:-1;;;;;701:1544:93;;;;;;15152:60:70;;;;;;;;;;;;;;;;;;;;14924:779;15132:80;;;15128:143;;701:1544:93;;;15305:60:70;;;;15152;15305;;;;;;;;;15152;15305;;;14924:779;15285:80;;;;15281:144;;15564:21;;15540;15564:67;15647:49;15564:21;;15647:49;15564:21;-1:-1:-1;;;;;701:1544:93;-1:-1:-1;701:1544:93;-1:-1:-1;701:1544:93;;;-1:-1:-1;701:1544:93;;;15564:21:70;701:1544:93;15564:67:70;:::i;:::-;15540:21;-1:-1:-1;;;;;701:1544:93;-1:-1:-1;701:1544:93;-1:-1:-1;701:1544:93;;;-1:-1:-1;701:1544:93;;;15540:21:70;701:1544:93;;;;;;;;;;;;;;15647:49:70;;;;14924:779::o;15281:144::-;15388:26;15152:60;15388:26;15152:60;;15388:26;15305:60;;;;;;-1:-1:-1;15305:60:70;;;;;;:::i;:::-;;;;;15128:143;15235:25;15152:60;15235:25;15152:60;;15235:25;15152:60;;;;;;;;;;;;;;:::i;:::-;;;;8641:1623:77;;;;701:1544:93;8915:29:77;:41;:29;;;;;:41;:::i;:::-;701:1544:93;9458:36:77;;;9454:804;;8641:1623;;;;;;:::o;9454:804::-;3638:53:46;701:1544:93;;;3665:25:46;701:1544:93;;10184:31:77;701:1544:93;9669:111:77;701:1544:93;;9669:111:77;:::i;:::-;10120:30;10184:19;10120:42;:30;;;;;:42;:::i;:::-;701:1544:93;10184:19:77;;;:31;:::i;:::-;701:1544:93;3665:25:46;;:::i;:::-;3638:53;;:::i;:::-;9454:804:77;;;;;;;;1998:187:47;;-1:-1:-1;;;;;701:1544:93;-1:-1:-1;701:1544:93;;;;-1:-1:-1;701:1544:93;3051:52:55;1998:187:47:o"},"methodIdentifiers":{"allowance(address,address,address)":"927da105","approve(address,address,uint256)":"e1f21c67","balanceOf(address,address)":"f7888aec","computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))":"4d472bdd","emitAuxiliaryEvent(bytes32,bytes)":"c8088247","getAddLiquidityCalledFlag(address)":"ace9b89b","getAggregateSwapFeeAmount(address,address)":"85e0b999","getAggregateYieldFeeAmount(address,address)":"00fdfa13","getAuthorizer()":"aaabadc5","getBptRate(address)":"4f037ee7","getCurrentLiveBalances(address)":"535cfd8a","getERC4626BufferAsset(address)":"4afbaf5a","getHooksConfig(address)":"ce8630d4","getNonzeroDeltaCount()":"db817187","getPoolConfig(address)":"f29486a1","getPoolData(address)":"13d21cdf","getPoolPausedState(address)":"15e32046","getPoolRoleAccounts(address)":"e9ddeb26","getPoolTokenInfo(address)":"67e0e076","getPoolTokenRates(address)":"7e361bde","getPoolTokens(address)":"ca4f2803","getProtocolFeeController()":"85f2dbd4","getReservesOf(address)":"96787092","getStaticSwapFeePercentage(address)":"b45090f9","getTokenDelta(address)":"9e825ff5","getVaultAdmin()":"1ba0ae45","initialize(address,address,address[],uint256[],uint256,bytes)":"ba8a2be0","isERC4626BufferInitialized(address)":"6844846b","isPoolInRecoveryMode(address)":"be7d628a","isPoolInitialized(address)":"532cec7c","isPoolPaused(address)":"6c9bc732","isPoolRegistered(address)":"c673bdaf","isQueryDisabled()":"b4aef0ab","isQueryDisabledPermanently()":"13ef8a5d","isUnlocked()":"8380edb7","manualInitializePoolReentrancy(address,address,address[],uint256[],uint256,bytes)":"809846d1","manualRegisterPoolReentrancy(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"e68010c6","manuallySetSwapFee(address,uint256)":"70600089","mockExtensionHash(bytes)":"590e8145","quote(bytes)":"edfa3568","quoteAndRevert(bytes)":"757d64b3","reentrancyGuardEntered()":"d2c725e0","registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))":"eeec802f","removeLiquidityRecovery(address,address,uint256,uint256[])":"a07d6040","totalSupply(address)":"e4dc2aa4","vault()":"fbfa77cf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"contract IVaultAdmin\",\"name\":\"vaultAdmin\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceOverflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CodecOverflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ErrorSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotStaticCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"PoolTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"name\":\"Result\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokensNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"swapParams\",\"type\":\"tuple\"}],\"name\":\"computeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"dynamicSwapFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"emitAuxiliaryEvent\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getAddLiquidityCalledFlag\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getBptRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"rate\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getERC4626BufferAsset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getHooksConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolPausedState\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolRoleAccounts\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokenRates\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getPoolTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProtocolFeeController\",\"outputs\":[{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getReservesOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenDelta\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"isERC4626BufferInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInRecoveryMode\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolInitialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolPaused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isQueryDisabledPermanently\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isUnlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"name\":\"manualInitializePoolReentrancy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"manualRegisterPoolReentrancy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newSwapFee\",\"type\":\"uint256\"}],\"name\":\"manuallySetSwapFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"input\",\"type\":\"bytes\"}],\"name\":\"mockExtensionHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quote\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"quoteAndRevert\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reentrancyGuardEntered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"protocolFeeExempt\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"registerPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidityRecovery\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsOutRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"PoolTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"Result(bytes)\":[{\"params\":{\"result\":\"The result of the query operation\"}}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"TokensNotSorted()\":[{\"details\":\"Tokens are not sorted by address on registration. This is an optimization so that off-chain processes can predict the token order without having to query the Vault. (It is also legacy v2 behavior.)\"}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"Approval(address,address,address,uint256)\":{\"params\":{\"owner\":\"The token holder\",\"pool\":\"The pool token receiving the allowance\",\"spender\":\"The account being authorized to spend a given amount of the token\",\"value\":\"The number of tokens spender is authorized to transfer from owner\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Transfer(address,address,address,uint256)\":{\"params\":{\"from\":\"The token source\",\"pool\":\"The pool token being transferred\",\"to\":\"The token destination\",\"value\":\"The number of tokens\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address,address)\":{\"params\":{\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\",\"token\":\"Address of the token\"},\"returns\":{\"_0\":\"Amount of tokens the spender is allowed to spend\"}},\"approve(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to approve\",\"owner\":\"Address of the owner\",\"spender\":\"Address of the spender\"},\"returns\":{\"_0\":\"True if successful, false otherwise\"}},\"balanceOf(address,address)\":{\"params\":{\"account\":\"Address of the account\",\"token\":\"Address of the token\"},\"returns\":{\"_0\":\"Token balance of the account\"}},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"details\":\"Reverts if the hook doesn't return the success flag set to `true`.\",\"params\":{\"pool\":\"The pool\",\"swapParams\":\"The swap parameters used to compute the fee\"},\"returns\":{\"dynamicSwapFeePercentage\":\"The dynamic swap fee percentage\"}},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\"}},\"getAddLiquidityCalledFlag(address)\":{\"details\":\"Taxing remove liquidity proportional whenever liquidity was added in the same `unlock` call adds an extra layer of security, discouraging operations that try to undo others for profit. Remove liquidity proportional is the only standard way to exit a position without fees, and this flag is used to enable fees in that case. It also discourages indirect swaps via unbalanced add and remove proportional, as they are expected to be worse than a simple swap for every pool type.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"_0\":\"True if liquidity has been added to this pool in the current transaction Note that there is no `sessionId` argument; it always returns the value for the current (i.e., latest) session.\"}},\"getAggregateSwapFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"_0\":\"The total amount of fees accumulated in the specified token\"}},\"getAggregateYieldFeeAmount(address,address)\":{\"params\":{\"pool\":\"The address of the pool for which aggregate fees have been collected\",\"token\":\"The address of the token in which fees have been accumulated\"},\"returns\":{\"_0\":\"The total amount of fees accumulated in the specified token\"}},\"getAuthorizer()\":{\"details\":\"The authorizer holds the permissions granted by governance. It is set on Vault deployment, and can be changed through a permissioned call.\",\"returns\":{\"_0\":\"Address of the authorizer contract\"}},\"getBptRate(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"rate\":\"BPT rate\"}},\"getCurrentLiveBalances(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getERC4626BufferAsset(address)\":{\"details\":\"To avoid malicious wrappers (e.g., that might potentially change their asset after deployment), routers should never call `wrapper.asset()` directly, at least without checking it against the asset registered with the Vault on initialization.\",\"params\":{\"wrappedToken\":\"The wrapped token specifying the buffer\"},\"returns\":{\"asset\":\"The underlying asset of the wrapped token\"}},\"getHooksConfig(address)\":{\"details\":\"The `HooksConfig` contains flags indicating which pool hooks are implemented.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"_0\":\"The hooks configuration as a `HooksConfig` struct\"}},\"getNonzeroDeltaCount()\":{\"returns\":{\"_0\":\"The current value of `_nonzeroDeltaCount`\"}},\"getPoolConfig(address)\":{\"details\":\"The `PoolConfig` contains liquidity management and other state flags, fee percentages, the pause window.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"_0\":\"The pool configuration as a `PoolConfig` struct\"}},\"getPoolData(address)\":{\"details\":\"This contains the pool configuration (flags), tokens and token types, rates, scaling factors, and balances.\",\"params\":{\"pool\":\"The address of the pool\"},\"returns\":{\"_0\":\"The `PoolData` result\"}},\"getPoolPausedState(address)\":{\"details\":\"Note that even when set to a paused state, the pool will automatically unpause at the end of the buffer period. Balancer timestamps are 32 bits.\",\"params\":{\"pool\":\"The pool whose data is requested\"},\"returns\":{\"_0\":\"True if the Pool is paused\",\"_1\":\"The timestamp of the end of the Pool's pause window\",\"_2\":\"The timestamp after which the Pool unpauses itself (if paused)\",\"_3\":\"The pause manager, or the zero address\"}},\"getPoolRoleAccounts(address)\":{\"params\":{\"pool\":\"The address of the pool whose roles are being queried\"},\"returns\":{\"_0\":\"A struct containing the role accounts for the pool (or 0 if unassigned)\"}},\"getPoolTokenInfo(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"The pool tokens, sorted in registration order\"}},\"getPoolTokenRates(address)\":{\"details\":\"This function performs external calls if tokens are yield-bearing. All returned arrays are in token registration order.\",\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"decimalScalingFactors\":\"Conversion factor used to adjust for token decimals for uniform precision in calculations. FP(1) for 18-decimal tokens\",\"tokenRates\":\"18-decimal FP values for rate tokens (e.g., yield-bearing), or FP(1) for standard tokens\"}},\"getPoolTokens(address)\":{\"params\":{\"pool\":\"Address of the pool\"},\"returns\":{\"tokens\":\"List of tokens in the pool\"}},\"getProtocolFeeController()\":{\"returns\":{\"_0\":\"Address of the ProtocolFeeController\"}},\"getReservesOf(address)\":{\"params\":{\"token\":\"The token for which to retrieve the reserve\"},\"returns\":{\"_0\":\"The amount of reserves for the given token\"}},\"getStaticSwapFeePercentage(address)\":{\"params\":{\"pool\":\"The address of the pool whose static swap fee percentage is being queried\"},\"returns\":{\"_0\":\"The current static swap fee percentage for the specified pool\"}},\"getTokenDelta(address)\":{\"details\":\"This function allows reading the value from the `_tokenDeltas` mapping.\",\"params\":{\"token\":\"The token for which the delta is being fetched\"},\"returns\":{\"_0\":\"The delta of the specified token\"}},\"getVaultAdmin()\":{\"details\":\"The VaultAdmin contract mostly implements permissioned functions.\",\"returns\":{\"_0\":\"The address of the Vault admin\"}},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"params\":{\"exactAmountsIn\":\"Exact amounts of input tokens\",\"minBptAmountOut\":\"Minimum amount of output pool tokens\",\"pool\":\"Address of the pool to initialize\",\"to\":\"Address that will receive the output BPT\",\"tokens\":\"Tokens used to seed the pool (must match the registered tokens)\",\"userData\":\"Additional (optional) data required for adding initial liquidity\"},\"returns\":{\"bptAmountOut\":\"Output pool token amount\"}},\"isERC4626BufferInitialized(address)\":{\"details\":\"An initialized buffer should have an asset registered in the Vault.\",\"params\":{\"wrappedToken\":\"Address of the wrapped token that implements IERC4626\"},\"returns\":{\"_0\":\"True if the ERC4626 buffer is initialized\"}},\"isPoolInRecoveryMode(address)\":{\"details\":\"Recovery Mode enables a safe proportional withdrawal path, with no external calls.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"_0\":\"True if the pool is in Recovery Mode, false otherwise\"}},\"isPoolInitialized(address)\":{\"details\":\"An initialized pool can be considered registered as well.\",\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"_0\":\"True if the pool is initialized, false otherwise\"}},\"isPoolPaused(address)\":{\"details\":\"If a pool is paused, all non-Recovery Mode state-changing operations will revert.\",\"params\":{\"pool\":\"The pool to be checked\"},\"returns\":{\"_0\":\"True if the pool is paused\"}},\"isPoolRegistered(address)\":{\"params\":{\"pool\":\"Address of the pool to check\"},\"returns\":{\"_0\":\"True if the pool is registered, false otherwise\"}},\"isQueryDisabled()\":{\"details\":\"If true, queries might either be disabled temporarily or permanently.\",\"returns\":{\"_0\":\"True if query functionality is reversibly disabled\"}},\"isQueryDisabledPermanently()\":{\"details\":\"This is a one-way switch. Once queries are disabled permanently, they can never be re-enabled.\",\"returns\":{\"_0\":\"True if query functionality is permanently disabled\"}},\"isUnlocked()\":{\"details\":\"The Vault must be unlocked to perform state-changing liquidity operations.\",\"returns\":{\"_0\":\"True if the Vault is unlocked, false otherwise\"}},\"quote(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}},\"quoteAndRevert(bytes)\":{\"details\":\"Used to query a set of operations on the Vault. Only off-chain eth_call are allowed, anything else will revert. Allows querying any operation on the Vault that has the `onlyWhenUnlocked` modifier. Allows the external calling of a function via the Vault contract to access Vault's functions guarded by `onlyWhenUnlocked`. `transient` modifier ensuring balances changes within the Vault are settled. This call always reverts, returning the result in the revert reason.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"}},\"reentrancyGuardEntered()\":{\"returns\":{\"_0\":\"True if the Vault is currently executing a nonReentrant function\"}},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"details\":\"A pool can opt-out of pausing by providing a zero value for the pause window, or allow pausing indefinitely by providing a large value. (Pool pause windows are not limited by the Vault maximums.) The vault defines an additional buffer period during which a paused pool will stay paused. After the buffer period passes, a paused pool will automatically unpause. Balancer timestamps are 32 bits. A pool can opt out of Balancer governance pausing by providing a custom `pauseManager`. This might be a multi-sig contract or an arbitrary smart contract with its own access controls, that forwards calls to the Vault. If the zero address is provided for the `pauseManager`, permissions for pausing the pool will default to the authorizer.\",\"params\":{\"liquidityManagement\":\"Liquidity management flags with implemented methods\",\"pauseWindowEndTime\":\"The timestamp after which it is no longer possible to pause the pool\",\"pool\":\"The address of the pool being registered\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"protocolFeeExempt\":\"If true, the pool's initial aggregate fees will be set to 0\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The initial static swap fee percentage of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"params\":{\"exactBptAmountIn\":\"Input pool token amount\",\"from\":\"Address of user to burn pool tokens from\",\"minAmountsOut\":\"Minimum amounts of tokens to be received, sorted in token registration order\",\"pool\":\"Address of the pool\"},\"returns\":{\"amountsOutRaw\":\"Actual calculated amounts of output tokens, sorted in token registration order\"}},\"totalSupply(address)\":{\"params\":{\"token\":\"The token address\"},\"returns\":{\"_0\":\"Total supply of the token\"}},\"vault()\":{\"details\":\"The main Vault contains the entrypoint and main liquidity operation implementations.\",\"returns\":{\"_0\":\"vault The address of the main Vault\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BalanceOverflow()\":[{\"notice\":\"One of the balances is above the maximum value that can be stored.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"CodecOverflow()\":[{\"notice\":\"Function called with an invalid value.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"ErrorSelectorNotFound()\":[{\"notice\":\"Handle the \\\"reverted without a reason\\\" case (i.e., no return data).\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotStaticCall()\":[{\"notice\":\"A state-changing transaction was initiated in a context that only allows static calls.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"OutOfBounds()\":[{\"notice\":\"Function called with an invalid bitLength or offset.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"PoolTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a pool token can't be lower than the absolute minimum.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"Result(bytes)\":[{\"notice\":\"On success of the primary operation in a `quoteAndRevert`, this error is thrown with the return data.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TokensNotSorted()\":[{\"notice\":\"The tokens supplied to an array argument were not sorted in numerical order.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"Approval(address,address,address,uint256)\":{\"notice\":\"The allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Transfer(address,address,address,uint256)\":{\"notice\":\"Pool tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{\"allowance(address,address,address)\":{\"notice\":\"Gets the allowance of a spender for a given ERC20 token and owner.\"},\"approve(address,address,uint256)\":{\"notice\":\"Approves a spender to spend pool tokens on behalf of sender.\"},\"balanceOf(address,address)\":{\"notice\":\"Gets the balance of an account for a given ERC20 token.\"},\"computeDynamicSwapFeePercentage(address,(uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Query the current dynamic swap fee percentage of a pool, given a set of swap parameters.\"},\"emitAuxiliaryEvent(bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"getAddLiquidityCalledFlag(address)\":{\"notice\":\"This flag is used to detect and tax \\\"round-trip\\\" interactions (adding and removing liquidity in the same pool).\"},\"getAggregateSwapFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated swap fees (including aggregate fees) in `token` collected by the pool.\"},\"getAggregateYieldFeeAmount(address,address)\":{\"notice\":\"Returns the accumulated yield fees (including aggregate fees) in `token` collected by the pool.\"},\"getAuthorizer()\":{\"notice\":\"Returns the Authorizer address.\"},\"getBptRate(address)\":{\"notice\":\"The current rate of a pool token (BPT) = invariant / totalSupply.\"},\"getCurrentLiveBalances(address)\":{\"notice\":\"Gets current live balances of a given pool (fixed-point, 18 decimals), corresponding to its tokens in registration order.\"},\"getERC4626BufferAsset(address)\":{\"notice\":\"Gets the registered asset for a given buffer.\"},\"getHooksConfig(address)\":{\"notice\":\"Gets the hooks configuration parameters of a pool.\"},\"getNonzeroDeltaCount()\":{\"notice\":\"Returns the count of non-zero deltas.\"},\"getPoolConfig(address)\":{\"notice\":\"Gets the configuration parameters of a pool.\"},\"getPoolData(address)\":{\"notice\":\"Returns comprehensive pool data for the given pool.\"},\"getPoolPausedState(address)\":{\"notice\":\"Returns the paused status, and end times of the Pool's pause window and buffer period.\"},\"getPoolRoleAccounts(address)\":{\"notice\":\"Fetches the role accounts for a given pool (pause manager, swap manager, pool creator)\"},\"getPoolTokenInfo(address)\":{\"notice\":\"Gets the raw data for a pool: tokens, raw balances, scaling factors.\"},\"getPoolTokenRates(address)\":{\"notice\":\"Gets pool token rates.\"},\"getPoolTokens(address)\":{\"notice\":\"Gets the tokens registered to a pool.\"},\"getProtocolFeeController()\":{\"notice\":\"Returns the Protocol Fee Controller address.\"},\"getReservesOf(address)\":{\"notice\":\"Retrieves the reserve (i.e., total Vault balance) of a given token.\"},\"getStaticSwapFeePercentage(address)\":{\"notice\":\"Fetches the static swap fee percentage for a given pool.\"},\"getTokenDelta(address)\":{\"notice\":\"Retrieves the token delta for a specific token.\"},\"getVaultAdmin()\":{\"notice\":\"Returns the VaultAdmin contract address.\"},\"initialize(address,address,address[],uint256[],uint256,bytes)\":{\"notice\":\"Initializes a registered pool by adding liquidity; mints BPT tokens for the first time in exchange.\"},\"isERC4626BufferInitialized(address)\":{\"notice\":\"Checks if the wrapped token has an initialized buffer in the Vault.\"},\"isPoolInRecoveryMode(address)\":{\"notice\":\"Checks whether a pool is in Recovery Mode.\"},\"isPoolInitialized(address)\":{\"notice\":\"Checks whether a pool is initialized.\"},\"isPoolPaused(address)\":{\"notice\":\"Indicates whether a pool is paused.\"},\"isPoolRegistered(address)\":{\"notice\":\"Checks whether a pool is registered.\"},\"isQueryDisabled()\":{\"notice\":\"Returns true if queries are disabled on the Vault.\"},\"isQueryDisabledPermanently()\":{\"notice\":\"Returns true if queries are disabled permanently; false if they are enabled.\"},\"isUnlocked()\":{\"notice\":\"Returns whether the Vault is unlocked (i.e., executing an operation).\"},\"quote(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"quoteAndRevert(bytes)\":{\"notice\":\"Performs a callback on msg.sender with arguments provided in `data`.\"},\"reentrancyGuardEntered()\":{\"notice\":\"Expose the state of the Vault's reentrancy guard.\"},\"registerPool(address,(address,uint8,address,bool)[],uint256,uint32,bool,(address,address,address),address,(bool,bool,bool,bool))\":{\"notice\":\"Registers a pool, associating it with its factory and the tokens it manages.\"},\"removeLiquidityRecovery(address,address,uint256,uint256[])\":{\"notice\":\"Remove liquidity from a pool specifying exact pool tokens in, with proportional token amounts out. The request is implemented by the Vault without any interaction with the pool, ensuring that it works the same for all pools, and cannot be disabled by a new pool type.\"},\"totalSupply(address)\":{\"notice\":\"Gets the total supply of a given ERC20 token.\"},\"vault()\":{\"notice\":\"Returns the main Vault address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/test/VaultExtensionMock.sol\":\"VaultExtensionMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/test/IVaultExtensionMock.sol\":{\"keccak256\":\"0x18c434c91bbcd260bd305f2cdc01684a3040bc633c1b185f95cb323a336ac76c\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://270260ba29c81dc6d862a0830ccbbdcd81b4543bd9c9b54228493a92568532d4\",\"dweb:/ipfs/QmTHp7v5dGwLujPRaWkoEM22Loy3MuspodMGcm4syAPUvk\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IERC20MultiTokenErrors.sol\":{\"keccak256\":\"0x4994bc0f8e5905640876a9411dadb73221ea2b7b1168d22cf5fe44ee1ca16960\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://69a0a6ab9c2622426ccfcb7263deb5615e589e98b3b31ea9fcd21595bb42a13d\",\"dweb:/ipfs/QmVW6GVXGTHnVo8MGk7zdLMASR8uN7khPsrEMXwgy4NBrQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol\":{\"keccak256\":\"0x9dc4c8d6dd5dbc108dd377dab73a3e6c84e8c104713d2afb3cba8acc9ddf4c63\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2ef7c65fe356144f8cd720109b818e1ec6cc495ca35b55ca273ef9db45c6ae00\",\"dweb:/ipfs/QmREJgnfgoqemnYKvfYjTFJBAMsV9VAKA5AY5Woprpc1vs\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\":{\"keccak256\":\"0xa1014b8d96cdfd149f502cda06f25e51885a6456b41061ed213086fcc1c496b4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8a96e7e176f73762c6de904de39472fe970f12f6d3631097227bc664bd0780c1\",\"dweb:/ipfs/QmXcu5bk8tJTqR6UwkdKNtsodzqYGpJsPdfjQmdJFyKZjR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":{\"keccak256\":\"0xb4ee9e1543d36bdf9eeb4a9d5ab41170723239a1e27a2272f2e31de4765c019b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b70dd5e4fa496c2c1efb6bd20368587ba3c9c0d0afac9dc3631a29ff2628f99\",\"dweb:/ipfs/QmQigXUkpDuVK5VSX67RABrAC9bashPcHMasgPRNJb4k8Z\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol\":{\"keccak256\":\"0xf98fec19a1516432d7540f0cde2e967b627afbc5a361835766d57be8ba10b4e2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://94b49929bff77d1fdaab8916350356fc9816317beef4f33c3af0e6a40493d01c\",\"dweb:/ipfs/QmPPhtmpPvgedbtQaJZz7JQCmiGKKTHmfh7EGhJS1yUCia\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":{\"keccak256\":\"0xb5f6b1d0ee3f295a717ce58329eaadccb1eefc2e1e02e2e7c438e377628475cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03c1b9bc73b7d14d9e1948a31c271a03a6ba4291f44d9aff17e60d300c111d0d\",\"dweb:/ipfs/QmNpW3iD3ST76N6xTncuVgYSuafSqFkXUmxNaK8uybr96G\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0xeb183354089582d4a3fc8ded6cc410a2937f2eac2aa47b3ab13b0f5e6ede10e5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ecef18f7f0f57d749d5b0e11ab887299be15e1b6971a4bb9104d06e45705231b\",\"dweb:/ipfs/QmeYRDD5UtVKu2YFJm3SmHFriK6LUa2Tzg7EdZrneEfzNR\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x79f2ec4f7314bd1c3555368ff02bb9d382489dc8bbd7efbbf306f9a5084f3bec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a57c155451c5b1c1c59a27770754ccd9ba1be9344db6ac45b8744eba5fa4fa2f\",\"dweb:/ipfs/QmarkRwGaS3egg1FaQH6LibqjT6NocVUbD1jMPWtFxFaQV\"]},\"@balancer-labs/v3-vault/contracts/BasePoolMath.sol\":{\"keccak256\":\"0x28078c6fa4d55418c25505d4683642cb51fe55b2155ef7418db6c70631a30d6a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://864b91fdc2b69725bcc07f06d9adebe87117561582fa58f1e4410d8928cd205c\",\"dweb:/ipfs/QmWCDsbTxtmEMLhorqfGF1LDMHMqqVnV9sk9mUTPR7eog8\"]},\"@balancer-labs/v3-vault/contracts/VaultCommon.sol\":{\"keccak256\":\"0xad949728097754fb91dd82f46a4f3430f0caf092fe719f04c030325e623c59cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b6ba4635b64181a08098f2b4bde9bc6ceb8580d24654ec39c3d38ac2c8082317\",\"dweb:/ipfs/QmbthXemuT8Qvs2jdTADdyzbcPuZaKWfZjRn7j8dWuwffs\"]},\"@balancer-labs/v3-vault/contracts/VaultExtension.sol\":{\"keccak256\":\"0x40490c1c492b44a3fbc04a9642abb41c86b124a0e510aedbee2886040058a5a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7b7d969f2f08bb32524e3678ef1b9cbdd3d9630b0cee495527a42a0ca640cd94\",\"dweb:/ipfs/QmSpqFru9X2V1SD3cE63jcdNiHLZdTvXXGw6suCbzHnqxM\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@balancer-labs/v3-vault/contracts/VaultStorage.sol\":{\"keccak256\":\"0x283153cc86b04e7b5ded7b317a7773cd52912661922d477bccc7e3ef9c4fd332\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://30e03b35be9f4aebba5ea1f6fd1f72fb37990c916a22ef1dd4a01af809f89146\",\"dweb:/ipfs/QmNri89FgxWKFPkN67tvzAGf6kSyMuYvZd62ZW9a5MJBJH\"]},\"@balancer-labs/v3-vault/contracts/lib/HooksConfigLib.sol\":{\"keccak256\":\"0xaf3a7b4bbc1427ffb36b89cab5e485494afbddaff7195e0533f9c29a88c217b3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c653115b697d1c2a340a485e37a1d1a7b18bd3da4304ef12480bf9dcb8f61dc8\",\"dweb:/ipfs/QmfPNVqSeuG6gJr2x4y41czE5ivBz8vLpZ3R97VVnbK1uT\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolConfigConst.sol\":{\"keccak256\":\"0xcec5acd992ba3d85194d2a66de785676e5fbd76c7ef4bd75f581582c637e9191\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03feaba5c47de6cfa364a9f78f3d1cbc48c6e59e89348a56e773631ce3d52c4d\",\"dweb:/ipfs/QmWZmpFLKk6qEsTtbPaiKBWvTnSuYzQdbNJZX4Bng16c3F\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolConfigLib.sol\":{\"keccak256\":\"0x0df4ac214754751acdaa044f697ef2a45823689689aac22a6a102c8e543d97c7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13c1c708ac1a1f5523282a7430d7f5300120ac17b3c77a0bd103d2afe7aff979\",\"dweb:/ipfs/QmPstE7ZquJ4zMaCEXix8iCXc6hTSyNQaR9Z4aWBMTa9ys\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolDataLib.sol\":{\"keccak256\":\"0x0f004ef9c126426c1391516247f90cbb699982f3c545c821c2bdc3796c93f781\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://93d7b94cb4e0c9eee127258fb69e390d34c391444f337b6cc5cbe5beb702f4e7\",\"dweb:/ipfs/QmbswDz4DrsXaEh9RSvpmWKX5JCLoTavyAX2511eKr5rQd\"]},\"@balancer-labs/v3-vault/contracts/lib/VaultExtensionsLib.sol\":{\"keccak256\":\"0xf17a6fb82ff8eac940260544aa041e2cf8b826c0f7e205b4d52a4c5394a7ee38\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c88893eba6593f2f7ef05e3ffeb61416b6cc630eaad2efa90e77262f3282ab81\",\"dweb:/ipfs/QmX9XhQix9yKT7buiT77igy8Bf1jvwwYGxpmTr4e5mWnQD\"]},\"@balancer-labs/v3-vault/contracts/lib/VaultStateLib.sol\":{\"keccak256\":\"0xc40f34646f76afe536a326173d3c8cd663a655375531f65f3e6f7c63cecddeeb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a97b6d2363d70869b9cf66104a6c6bdfc84d351085c94b23b0104f2608e52ff4\",\"dweb:/ipfs/QmVPVR8F6nSxxhxTpFp5cgH9n1dE2E5UXD6cPauumtpS3e\"]},\"@balancer-labs/v3-vault/contracts/test/VaultExtensionMock.sol\":{\"keccak256\":\"0x69c5ff432827489da6bfc986184ad2dd74cbad083f923c6ec8a8f18caf78ffec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6f2dfca43dd921000fa2bc4d49a59e6c154250ee723ab5ccc7883939e65f8a71\",\"dweb:/ipfs/QmSjTTmY7brYWCyqHzjHULcfqBxLtKSAEPGwfKrHoRGqwn\"]},\"@balancer-labs/v3-vault/contracts/token/ERC20MultiToken.sol\":{\"keccak256\":\"0x49578c053271957fa9661c6a3e3ce6310a3f0690be6deca9eeb28f4e129bcfd3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e3bbd6d7baa790f6e259dfcab0ae2b0db96c08b21739dca829217af6fdbea15d\",\"dweb:/ipfs/QmVgirrgRbkHVdfthMKTJi98QeHmx9DHTT1WBNQRYogpBn\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/test/VaultMock.sol":{"VaultMock":{"abi":[{"inputs":[{"internalType":"contract IVaultExtension","name":"vaultExtension","type":"address"},{"internalType":"contract IAuthorizer","name":"authorizer","type":"address"},{"internalType":"contract IProtocolFeeController","name":"protocolFeeController","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"AfterAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterInitializeHookFailed","type":"error"},{"inputs":[],"name":"AfterRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"AfterSwapHookFailed","type":"error"},{"inputs":[],"name":"AllZeroInputs","type":"error"},{"inputs":[],"name":"AmountGivenZero","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"AmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"AmountOutBelowMin","type":"error"},{"inputs":[],"name":"BalanceNotSettled","type":"error"},{"inputs":[],"name":"BalanceOverflow","type":"error"},{"inputs":[],"name":"BeforeAddLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeInitializeHookFailed","type":"error"},{"inputs":[],"name":"BeforeRemoveLiquidityHookFailed","type":"error"},{"inputs":[],"name":"BeforeSwapHookFailed","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"BptAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"BptAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"BufferNotInitialized","type":"error"},{"inputs":[],"name":"BufferSharesInvalidOwner","type":"error"},{"inputs":[],"name":"BufferSharesInvalidReceiver","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"BufferTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"CannotReceiveEth","type":"error"},{"inputs":[],"name":"CannotSwapSameToken","type":"error"},{"inputs":[],"name":"CodecOverflow","type":"error"},{"inputs":[],"name":"DoesNotSupportAddLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportDonation","type":"error"},{"inputs":[],"name":"DoesNotSupportRemoveLiquidityCustom","type":"error"},{"inputs":[],"name":"DoesNotSupportUnbalancedLiquidity","type":"error"},{"inputs":[],"name":"DynamicSwapFeeHookFailed","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"FeePrecisionTooHigh","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"maxAmountIn","type":"uint256"}],"name":"HookAdjustedAmountInAboveMax","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"minAmountOut","type":"uint256"}],"name":"HookAdjustedAmountOutBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"HookAdjustedSwapLimit","type":"error"},{"inputs":[{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"poolFactory","type":"address"}],"name":"HookRegistrationFailed","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[],"name":"InvalidAddLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidRemoveLiquidityKind","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"InvalidTokenDecimals","type":"error"},{"inputs":[],"name":"InvalidTokenType","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"InvalidUnderlyingToken","type":"error"},{"inputs":[{"internalType":"uint256","name":"invariantRatio","type":"uint256"},{"internalType":"uint256","name":"maxInvariantRatio","type":"uint256"}],"name":"InvariantRatioAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"invariantRatio","type":"uint256"},{"internalType":"uint256","name":"minInvariantRatio","type":"uint256"}],"name":"InvariantRatioBelowMin","type":"error"},{"inputs":[{"internalType":"uint256","name":"issuedShares","type":"uint256"},{"internalType":"uint256","name":"minIssuedShares","type":"uint256"}],"name":"IssuedSharesBelowMin","type":"error"},{"inputs":[],"name":"MaxTokens","type":"error"},{"inputs":[],"name":"MinTokens","type":"error"},{"inputs":[],"name":"MultipleNonZeroInputs","type":"error"},{"inputs":[],"name":"NotEnoughBufferShares","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedUnderlyingAmount","type":"uint256"},{"internalType":"uint256","name":"actualUnderlyingAmount","type":"uint256"}],"name":"NotEnoughUnderlying","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"expectedWrappedAmount","type":"uint256"},{"internalType":"uint256","name":"actualWrappedAmount","type":"uint256"}],"name":"NotEnoughWrapped","type":"error"},{"inputs":[],"name":"NotStaticCall","type":"error"},{"inputs":[],"name":"NotVaultDelegateCall","type":"error"},{"inputs":[],"name":"OutOfBounds","type":"error"},{"inputs":[],"name":"PauseBufferPeriodDurationTooLarge","type":"error"},{"inputs":[],"name":"PercentageAboveMax","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInRecoveryMode","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotInitialized","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotPaused","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPauseWindowExpired","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"PoolPaused","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"PoolTotalSupplyTooLow","type":"error"},{"inputs":[],"name":"ProtocolFeesExceedTotalCollected","type":"error"},{"inputs":[],"name":"QueriesDisabled","type":"error"},{"inputs":[],"name":"QueriesDisabledPermanently","type":"error"},{"inputs":[],"name":"QuoteResultSpoofed","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"RouterNotTrusted","type":"error"},{"inputs":[{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntToUint","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintToInt","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooHigh","type":"error"},{"inputs":[],"name":"SwapFeePercentageTooLow","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"SwapLimit","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenAlreadyRegistered","type":"error"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"TokenNotRegistered","type":"error"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"expectedToken","type":"address"},{"internalType":"address","name":"actualToken","type":"address"}],"name":"TokensMismatch","type":"error"},{"inputs":[],"name":"TradeAmountTooSmall","type":"error"},{"inputs":[],"name":"VaultBuffersArePaused","type":"error"},{"inputs":[],"name":"VaultIsNotUnlocked","type":"error"},{"inputs":[],"name":"VaultNotPaused","type":"error"},{"inputs":[],"name":"VaultPauseWindowDurationTooLarge","type":"error"},{"inputs":[],"name":"VaultPauseWindowExpired","type":"error"},{"inputs":[],"name":"VaultPaused","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"WrapAmountTooSmall","type":"error"},{"inputs":[],"name":"WrongProtocolFeeControllerDeployment","type":"error"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"WrongUnderlyingToken","type":"error"},{"inputs":[],"name":"WrongVaultAdminDeployment","type":"error"},{"inputs":[],"name":"WrongVaultExtensionDeployment","type":"error"},{"inputs":[],"name":"ZeroDivision","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"}],"name":"AggregateSwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"AggregateYieldFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IAuthorizer","name":"newAuthorizer","type":"address"}],"name":"AuthorizerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"}],"name":"BufferSharesBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"issuedShares","type":"uint256"}],"name":"BufferSharesMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsAddedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityAddedToBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"liquidityProvider","type":"address"},{"indexed":true,"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"amountsRemovedRaw","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"swapFeeAmountsRaw","type":"uint256[]"}],"name":"LiquidityRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountWrapped","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"LiquidityRemovedFromBuffer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"PoolPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"bool","name":"recoveryMode","type":"bool"}],"name":"PoolRecoveryModeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"indexed":false,"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"indexed":false,"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"indexed":false,"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"indexed":false,"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"name":"PoolRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IProtocolFeeController","name":"newProtocolFeeController","type":"address"}],"name":"ProtocolFeeControllerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOut","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"swapFeeAmount","type":"uint256"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"SwapFeePercentageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnedShares","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"withdrawnUnderlying","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Unwrap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"bytes32","name":"eventKey","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"eventData","type":"bytes"}],"name":"VaultAuxiliary","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultBuffersPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"paused","type":"bool"}],"name":"VaultPausedStateChanged","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"VaultQueriesEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"depositedUnderlying","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mintedShares","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"bufferBalances","type":"bytes32"}],"name":"Wrap","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"int256","name":"delta","type":"int256"}],"name":"accountDelta","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"}],"name":"addLiquidity","outputs":[{"internalType":"uint256[]","name":"amountsIn","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"name":"buildTokenConfig","outputs":[{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"contract IRateProvider[]","name":"rateProviders","type":"address[]"}],"name":"buildTokenConfig","outputs":[{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"enum TokenType[]","name":"tokenTypes","type":"uint8[]"},{"internalType":"contract IRateProvider[]","name":"rateProviders","type":"address[]"},{"internalType":"bool[]","name":"yieldFeeFlags","type":"bool[]"}],"name":"buildTokenConfig","outputs":[{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"contract IRateProvider[]","name":"rateProviders","type":"address[]"},{"internalType":"bool[]","name":"yieldFeeFlags","type":"bool[]"}],"name":"buildTokenConfig","outputs":[{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"},{"internalType":"uint256","name":"lastLiveBalance","type":"uint256"},{"internalType":"uint256","name":"tokenIndex","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"name":"computeYieldFeesDue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"ensurePoolNotPaused","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"ensureUnpausedAndGetVaultState","outputs":[{"components":[{"internalType":"bool","name":"isQueryDisabled","type":"bool"},{"internalType":"bool","name":"isVaultPaused","type":"bool"},{"internalType":"bool","name":"areBuffersPaused","type":"bool"}],"internalType":"struct VaultState","name":"vaultState","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tradeAmount","type":"uint256"}],"name":"ensureValidSwapAmount","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tradeAmount","type":"uint256"}],"name":"ensureValidTradeAmount","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"erc4626BufferWrapOrUnwrap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceUnlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"getBufferTokenBalancesBytes","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getLastLiveBalances","outputs":[{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolFactoryMock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"getPoolTokenCountAndIndexOfToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"getRawBalances","outputs":[{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVaultExtension","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"guardedCheckEntered","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"internalGetBufferUnderlyingImbalance","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"}],"name":"internalGetBufferWrappedImbalance","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum Rounding","name":"roundingDirection","type":"uint8"}],"name":"loadPoolDataUpdatingBalancesAndYieldFees","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"enum Rounding","name":"roundingDirection","type":"uint8"}],"name":"loadPoolDataUpdatingBalancesAndYieldFeesReentrancy","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"},{"internalType":"uint256[]","name":"maxAmountsInScaled18","type":"uint256[]"}],"name":"manualAddLiquidity","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"updatedPoolData","type":"tuple"},{"internalType":"uint256[]","name":"amountsInRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsInScaled18","type":"uint256[]"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"},{"components":[{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"internalType":"struct SwapState","name":"state","type":"tuple"},{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"name":"manualBuildPoolSwapParams","outputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"},{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"},{"components":[{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"internalType":"struct SwapState","name":"swapState","type":"tuple"}],"name":"manualComputeAmountGivenScaled18","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"},{"internalType":"uint256","name":"totalSwapFeeAmountScaled18","type":"uint256"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"manualComputeAndChargeAggregateSwapFees","outputs":[{"internalType":"uint256","name":"totalSwapFeeAmountRaw","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeeAmountRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"enum WrappingDirection","name":"direction","type":"uint8"},{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"}],"internalType":"struct BufferWrapOrUnwrapParams","name":"params","type":"tuple"}],"name":"manualErc4626BufferWrapOrUnwrapReentrancy","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountInRaw","type":"uint256"},{"internalType":"uint256","name":"amountOutRaw","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"manualFindTokenIndex","outputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"sessionId","type":"uint256"}],"name":"manualGetAddLiquidityCalledFlagBySession","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"manualGetAggregateSwapFeeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"manualGetAggregateYieldFeeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualGetCurrentUnlockSessionId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualGetIsUnlocked","outputs":[{"internalType":"StorageSlotExtension.BooleanSlotType","name":"slot","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualGetNonzeroDeltaCount","outputs":[{"internalType":"StorageSlotExtension.Uint256SlotType","name":"slot","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"manualGetPoolConfigBits","outputs":[{"internalType":"PoolConfigBits","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualGetTokenDeltas","outputs":[{"internalType":"TokenDeltaMappingSlotType","name":"slot","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"},{"components":[{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"internalType":"struct SwapState","name":"state","type":"tuple"},{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"name":"manualInternalSwap","outputs":[{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"","type":"tuple"},{"components":[{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"internalType":"struct SwapState","name":"","type":"tuple"},{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"},{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"name":"manualLoadSwapState","outputs":[{"components":[{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"internalType":"struct SwapState","name":"swapState","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"maxAmountsIn","type":"uint256[]"},{"internalType":"uint256","name":"minBptAmountOut","type":"uint256"},{"internalType":"enum AddLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AddLiquidityParams","name":"params","type":"tuple"},{"internalType":"uint256[]","name":"maxAmountsInScaled18","type":"uint256[]"}],"name":"manualReentrancyAddLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"},{"internalType":"uint256[]","name":"minAmountsOutScaled18","type":"uint256[]"}],"name":"manualReentrancyRemoveLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"},{"components":[{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"internalType":"struct SwapState","name":"state","type":"tuple"},{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"name":"manualReentrancySwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"name":"manualRegisterPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint32","name":"timestamp","type":"uint32"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"}],"name":"manualRegisterPoolAtTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"name":"manualRegisterPoolPassThruTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"manualRegisterPoolWithSwapFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"},{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"},{"internalType":"uint256[]","name":"minAmountsOutScaled18","type":"uint256[]"}],"name":"manualRemoveLiquidity","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"updatedPoolData","type":"tuple"},{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOutRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsOutScaled18","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualSendToReentrancy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"int256","name":"delta","type":"int256"}],"name":"manualSetAccountDelta","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"manualSetAddLiquidityCalledFlag","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"manualSetAggregateSwapFeeAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"manualSetAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"manualSetAggregateYieldFeeAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"manualSetAggregateYieldFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"}],"name":"manualSetBufferAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"underlyingAmount","type":"uint256"},{"internalType":"uint256","name":"wrappedAmount","type":"uint256"}],"name":"manualSetBufferBalances","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"manualSetBufferOwnerShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"manualSetBufferTotalShares","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"},{"internalType":"address","name":"hooksContract","type":"address"}],"internalType":"struct HooksConfig","name":"hooksConfig","type":"tuple"}],"name":"manualSetHooksConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"}],"name":"manualSetInitializedPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"deltaCount","type":"uint256"}],"name":"manualSetNonZeroDeltaCount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256[]","name":"tokenBalanceRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenBalanceLiveScaled18","type":"uint256[]"}],"name":"manualSetPoolBalances","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"},{"internalType":"uint40","name":"tokenDecimalDiffs","type":"uint40"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"},{"internalType":"bool","name":"isPoolRegistered","type":"bool"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct PoolConfig","name":"config","type":"tuple"}],"name":"manualSetPoolConfig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"PoolConfigBits","name":"config","type":"bytes32"}],"name":"manualSetPoolConfigBits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"newPoolCreator","type":"address"}],"name":"manualSetPoolCreator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint32","name":"pauseWindowEndTime","type":"uint32"}],"name":"manualSetPoolPauseWindowEndTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"bool","name":"isPoolPaused","type":"bool"}],"name":"manualSetPoolPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manualSetPoolRegistered","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"}],"name":"manualSetPoolTokenInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"}],"name":"manualSetPoolTokenInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"name":"manualSetPoolTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"tokenBalanceRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenBalanceLiveScaled18","type":"uint256[]"}],"name":"manualSetPoolTokensAndBalances","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"reserves","type":"uint256"}],"name":"manualSetReservesOf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"manualSetStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isVaultPaused","type":"bool"}],"name":"manualSetVaultPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isVaultPaused","type":"bool"},{"internalType":"bool","name":"isQueryDisabled","type":"bool"}],"name":"manualSetVaultState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"manualSettleReentrancy","outputs":[{"internalType":"uint256","name":"paid","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"underlyingToken","type":"address"},{"internalType":"contract IERC20","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"underlyingHint","type":"uint256"},{"internalType":"uint256","name":"wrappedHint","type":"uint256"}],"name":"manualSettleUnwrap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"underlyingToken","type":"address"},{"internalType":"contract IERC20","name":"wrappedToken","type":"address"},{"internalType":"uint256","name":"underlyingHint","type":"uint256"},{"internalType":"uint256","name":"wrappedHint","type":"uint256"}],"name":"manualSettleWrap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"manualUnsafeSetStaticSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"newAggregateSwapFeePercentage","type":"uint256"}],"name":"manualUpdateAggregateSwapFeePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"},{"internalType":"enum Rounding","name":"roundingDirection","type":"uint8"}],"name":"manualUpdatePoolDataLiveBalancesAndRates","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"}],"name":"manualWritePoolBalancesToStorage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mockIsUnlocked","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"mockWithInitializedPool","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrapper","type":"address"},{"internalType":"uint256","name":"amountInUnderlying","type":"uint256"}],"name":"previewDeposit","outputs":[{"internalType":"uint256","name":"amountOutWrapped","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrapper","type":"address"},{"internalType":"uint256","name":"amountOutWrapped","type":"uint256"}],"name":"previewMint","outputs":[{"internalType":"uint256","name":"amountInUnderlying","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrapper","type":"address"},{"internalType":"uint256","name":"amountInWrapped","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"amountOutUnderlying","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC4626","name":"wrapper","type":"address"},{"internalType":"uint256","name":"amountOutUnderlying","type":"uint256"}],"name":"previewWithdraw","outputs":[{"internalType":"uint256","name":"amountInWrapped","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"recoveryModeExit","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reentrancyGuardEntered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"maxBptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"minAmountsOut","type":"uint256[]"},{"internalType":"enum RemoveLiquidityKind","name":"kind","type":"uint8"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct RemoveLiquidityParams","name":"params","type":"tuple"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"amountsOut","type":"uint256[]"},{"internalType":"bytes","name":"returnData","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountHint","type":"uint256"}],"name":"settle","outputs":[{"internalType":"uint256","name":"credit","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"credit","type":"uint256"}],"name":"supplyCredit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountGivenRaw","type":"uint256"},{"internalType":"uint256","name":"limitRaw","type":"uint256"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct VaultSwapParams","name":"vaultSwapParams","type":"tuple"}],"name":"swap","outputs":[{"internalType":"uint256","name":"amountCalculated","type":"uint256"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"debt","type":"uint256"}],"name":"takeDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unguardedCheckNotEntered","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"data","type":"bytes"}],"name":"unlock","outputs":[{"internalType":"bytes","name":"result","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"poolData","type":"tuple"},{"internalType":"uint256","name":"newRawBalance","type":"uint256"},{"internalType":"enum Rounding","name":"roundingDirection","type":"uint8"},{"internalType":"uint256","name":"tokenIndex","type":"uint256"}],"name":"updateLiveTokenBalanceInPoolData","outputs":[{"components":[{"internalType":"PoolConfigBits","name":"poolConfigBits","type":"bytes32"},{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"}],"internalType":"struct PoolData","name":"","type":"tuple"}],"stateMutability":"pure","type":"function"},{"stateMutability":"payable","type":"receive"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_contract_IVault_fromMemory":{"entryPoint":1800,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint32_fromMemory":{"entryPoint":1772,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":1737,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_6597":{"entryPoint":1690,"id":null,"parameterSlots":1,"returnSlots":0},"fun_calculateVaultStorageSlot":{"entryPoint":1831,"id":28383,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"61022060408181523461056a57606082620120ea803803809161002282856106c9565b83398101031261056a5781516001600160a01b0391908281169081810361056a576020948581015190858216820361056a578401519480861680960361056a5761008b85516100708161069a565b600a8152691a5cd55b9b1bd8dad95960b21b89820152610727565b60c0526100be855161009c8161069a565b60118152701b9bdb96995c9bd1195b1d1850dbdd5b9d607a1b89820152610727565b60e0526100eb85516100cf8161069a565b600b81526a746f6b656e44656c74617360a81b89820152610727565b9661010097885261012386516101008161069a565b6012815271185919131a5c5d5a591a5d1e50d85b1b195960721b83820152610727565b9661012097885261015287516101388161069a565b60098152681cd95cdcda5bdb925960ba1b84820152610727565b9061014091825287519363fbfa77cf60e01b90818652600495858188818d5afa90811561053a575f9161067d575b50813091160361066f57895191825284828781865afa918215610511575f92610640575b5030911603610632576101c0958652600a80546001600160a01b0319169190911790558651634546891d60e11b808252909290818486818b5afa938415610628575f94610609575b506101609384528851631060fdbd60e11b8082529096838888818d5afa97881561053a575f986105e2575b506101a09788528a5163cd51c12f60e01b81529693929190838886818e5afa9788156105d8578c8c915f9a6105b3575b50610180998a5251630716585d60e51b81529085908290889082905afa908115610575578c8e889388935f9161057f575b50608052516329cab55160e11b815292839182905afa908115610575575f91610544575b5060a05260098054610100600160a81b03191660089290921b610100600160a81b03169190911790558a51918252828285818d5afa91821561053a579083915f9361051b575b50848c51809c819382525afa988915610511575f996104e2575b5063ffffffff80809a169116038881116104cf57895191614930998a84019260018060401b039b8585108d8611176104bc57918593918e95936200cf7e863930845216908201520301905ff09687156104b2576101e097885288519161083c90818401928484109084111761049f5750908291620118ae833903905ff096871561049657610200978852519761c783998a620007fb8b396080518a61af54015260a0518a61982a015260c0518a8181613add01528181613b74015281816146a201528181615c250152617a72015260e0518a81816114a9015281816136f001528181615c660152818161ae06015261ae4b015251898181611b2901528181614ce0015261adbe015251888181612dbd015281816133a40152818161513d015261852501525187818161337001528181613c510152818161511901528181615c9201526184f101525186505051856169de015251846169a401525183818161475d0152616903015251828181611bae015281816129f801528181613d6101528181613e7b015261551d0152518181816138990152615af80152f35b513d5f823e3d90fd5b604190634e487b7160e01b5f525260245ffd5b88513d5f823e3d90fd5b604187634e487b7160e01b5f525260245ffd5b601183634e487b7160e01b5f525260245ffd5b610503919950823d841161050a575b6104fb81836106c9565b8101906106ec565b975f6102fc565b503d6104f1565b8a513d5f823e3d90fd5b610533919350823d841161050a576104fb81836106c9565b915f6102e2565b8b513d5f823e3d90fd5b90508481813d831161056e575b61055b81836106c9565b8101031261056a57515f61029c565b5f80fd5b503d610551565b8d513d5f823e3d90fd5b945050505081813d83116105ac575b61059881836106c9565b8101031261056a57848c8e8893515f610278565b503d61058e565b86919a50916105cf8893833d851161050a576104fb81836106c9565b9a915091610247565b8c513d5f823e3d90fd5b8493929198506105ff9088953d861161050a576104fb81836106c9565b9790919293610217565b610621919450823d841161050a576104fb81836106c9565b925f6101ec565b89513d5f823e3d90fd5b83631bbe95c760e01b5f525ffd5b610661919250853d8711610668575b61065981836106c9565b810190610708565b905f6101a4565b503d61064f565b856301ab9d9d60e41b5f525ffd5b6106949150863d88116106685761065981836106c9565b5f610180565b604081019081106001600160401b038211176106b557604052565b634e487b7160e01b5f52604160045260245ffd5b601f909101601f19168101906001600160401b038211908210176106b557604052565b9081602091031261056a575163ffffffff8116810361056a5790565b9081602091031261056a57516001600160a01b038116810361056a5790565b604051906107348261069a565b600c82526107b5603a602084016b5661756c7453746f7261676560a01b81526020604051948592828401977f62616c616e6365722d6c6162732e76332e73746f726167652e000000000000008952518091603986015e830190601760f91b60398301528051928391018583015e015f8382015203601a8101845201826106c9565b5190205f1981019081116107e6576040519060208201908152602082526107db8261069a565b9051902060ff191690565b634e487b7160e01b5f52601160045260245ffdfe60806040526004361015610018575b366168ec576168c4565b5f3560e01c8062d7aadb146106c657806302e1a4aa146106c15780630362a513146106bc57806306bf83b1146106b75780630790de46146106b257806308bade29146106ad5780630c87409b146106a85780630ee4cdd8146106a35780630f6196551461069e5780630f682ba01461069957806310c1dc4114610694578063155075e61461068f57806315afd4091461068a57806315dacbea1461068557806316a573c214610680578063195aaef91461067b57806319a24bcb146106765780631c4e1e23146106715780631d27af681461066c5780631f4475c5146106675780631f495f7914610662578063214578971461065d57806324e7176b1461065857806325b6a844146106535780632606a4de1461064e57806328121e27146106495780632b766278146106445780632bfb780c1461063f5780632cbbf1981461063a5780632d1c3beb1461063557806332333ce614610630578063352339ee1461062b57806336918d6e14610626578063370bc8da146106215780633cb5b2af1461061c5780633cce2585146106175780633e262ba314610612578063420f4a451461060d57806343583be51461060857806344ea8763146106035780634594871a146105fe57806347c07e88146105f957806348c89491146105f45780634af29ec4146105ef578063557dba68146105ea5780635c1c1c81146105e55780635e3e00fa146105e05780635eeae6eb146105db5780635f70f542146105d6578063608256f7146105d157806362691e5f146105cc578063692407ae146105c75780636d4908c4146105c25780637004b0f1146105bd5780637965c967146105b857806379a2c0ac146105b357806380047e26146105ae57806381e4b7e9146105a957806382ea1749146105a4578063851c65a31461059f57806387a530f81461059a57806387a76c59146105955780638f5aeb4b14610590578063920af0661461058b57806396e74a2714610586578063a03b23ef14610581578063a408f3121461057c578063a40f959214610577578063aa01edb314610572578063ab62c2b61461056d578063ac00485514610568578063ae63932914610563578063b1740c2d1461055e578063b246949914610559578063b4eb0bf914610554578063b6f680f41461054f578063b8caceee1461054a578063b8f82b2614610545578063b9a8effa14610540578063bb14e4661461053b578063bbc6f1dc14610536578063be6b4d2a14610531578063beabacc81461052c578063c1fdcd6214610527578063c9c1661b14610522578063cbde2b681461051d578063cbe52ae314610518578063cecc95a714610513578063cfcc22091461050e578063d01a326914610509578063d0643b8c14610504578063d1f810a5146104ff578063d2c725e0146104fa578063d64bc25d146104f5578063d86c3fef146104f0578063d8f4cf3c146104eb578063dab50579146104e6578063dc4402ed146104e1578063df138458146104dc578063e2ddce11146104d7578063e460a8a9146104d2578063e5948689146104cd578063e5b08ffb146104c8578063ebfeb0a1146104c3578063eeda9991146104be578063f1320097146104b95763ff44deab0361000e57615488565b6153dd565b6153be565b615376565b61533a565b6151f1565b615170565b615108565b6150d0565b61506b565b614f7b565b614e89565b614da6565b614d6d565b614d2f565b614d04565b614ccc565b614c24565b614ba5565b614b6d565b614b42565b614af0565b614a55565b61496b565b614953565b6148e7565b6148bc565b614781565b61473e565b614713565b6146fb565b6146e1565b6146c5565b61468b565b614662565b614587565b61456d565b6144c9565b6143e7565b6143ab565b614366565b614321565b613f25565b613ee8565b613e9f565b613e5c565b613df2565b613d34565b613c79565b613c3d565b613c2c565b613b96565b613b60565b613aff565b613aca565b613a7c565b613a57565b613965565b61377c565b6136da565b613688565b6135ba565b6134ef565b61330b565b61327f565b613257565b6131ca565b613152565b612dfe565b612d96565b612d65565b612cde565b612ca5565b612bc0565b612afc565b612a89565b61297e565b6128a2565b61287e565b6125e8565b6125ab565b612563565b6124e2565b612082565b611f65565b611d35565b611b4c565b611b12565b611afb565b6119fb565b61196b565b6117a1565b61176a565b6115ed565b6114cc565b611492565b611429565b6113ea565b61136d565b611328565b6112bb565b611274565b61119c565b610e3d565b6109eb565b6107d0565b610727565b6001600160a01b038116036106dc57565b5f80fd5b35906106eb826106cb565b565b61016435906106eb826106cb565b60031960609101126106dc57600435610713816106cb565b90602435610720816106cb565b9060443590565b346106dc57610790602061073a366106fb565b91905f6001600160a01b036040518097819682957fa9059cbb00000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b0393165af180156107cb576107a157005b6107c29060203d6020116107c4575b6107ba818361088f565b8101906154e3565b005b503d6107b0565b6154f8565b346106dc5760206003193601126106dc576107c26004356107f0816106cb565b616936565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6060810190811067ffffffffffffffff82111761083e57604052565b6107f5565b6080810190811067ffffffffffffffff82111761083e57604052565b67ffffffffffffffff811161083e57604052565b60e0810190811067ffffffffffffffff82111761083e57604052565b90601f601f19910116810190811067ffffffffffffffff82111761083e57604052565b604051906106eb82610873565b6040519060c0820182811067ffffffffffffffff82111761083e57604052565b60405190610140820182811067ffffffffffffffff82111761083e57604052565b60405190610160820182811067ffffffffffffffff82111761083e57604052565b60405190610180820182811067ffffffffffffffff82111761083e57604052565b67ffffffffffffffff811161083e5760051b60200190565b9080601f830112156106dc57602090823561097481610942565b93610982604051958661088f565b81855260208086019260051b8201019283116106dc57602001905b8282106109ab575050505090565b83809183356109b9816106cb565b81520191019061099d565b6044359063ffffffff821682036106dc57565b610124359063ffffffff821682036106dc57565b346106dc5760c06003193601126106dc57600435610a08816106cb565b60243567ffffffffffffffff81116106dc57610a2890369060040161095a565b90610a316109c4565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c3601126106dc576107c29260405192610a6c84610822565b606435610a78816106cb565b8452608435610a86816106cb565b602085015260a435610a97816106cb565b6040850152615503565b600211156106dc57565b35906106eb82610aa1565b67ffffffffffffffff811161083e57601f01601f191660200190565b929192610ade82610ab6565b91610aec604051938461088f565b8294818452818301116106dc578281602093845f960137010152565b9080601f830112156106dc57816020610b2393359101610ad2565b90565b91909160e0818403126106dc57610b3b6108b2565b92610b4582610aab565b8452610b53602083016106e0565b6020850152610b64604083016106e0565b6040850152610b75606083016106e0565b60608501526080820135608085015260a082013560a085015260c082013567ffffffffffffffff81116106dc57610bac9201610b08565b60c0830152565b801515036106dc57565b61014435906106eb82610bb3565b61016435906106eb82610bb3565b61018435906106eb82610bb3565b6101a435906106eb82610bb3565b602435906106eb82610bb3565b604435906106eb82610bb3565b606435906106eb82610bb3565b608435906106eb82610bb3565b60a435906106eb82610bb3565b60c435906106eb82610bb3565b60e435906106eb82610bb3565b61010435906106eb82610bb3565b61012435906106eb82610bb3565b81601f820112156106dc578035906020610c8583610942565b936040610c95604051968761088f565b84865282860191836060809702860101948186116106dc578401925b858410610cc2575050505050505090565b86848303126106dc578487918451610cd981610822565b8635610ce481610aa1565b815282870135610cf3816106cb565b8382015285870135610d0481610bb3565b86820152815201930192610cb1565b9080601f830112156106dc576020908235610d2d81610942565b93610d3b604051958661088f565b81855260208086019260051b8201019283116106dc57602001905b828210610d64575050505090565b81358152908301908301610d56565b91909160e0818403126106dc57610d886108b2565b813581529267ffffffffffffffff60208301358181116106dc5782610dae91850161095a565b602086015260408301358181116106dc5782610dcb918501610c6c565b604086015260608301358181116106dc5782610de8918501610d13565b606086015260808301358181116106dc5782610e05918501610d13565b608086015260a08301358181116106dc5782610e22918501610d13565b60a086015260c08301359081116106dc57610bac9201610d13565b346106dc5760c06003193601126106dc5767ffffffffffffffff6004358181116106dc57610e6f903690600401610b26565b906024359081116106dc57610e88903690600401610d73565b60807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc3601126106dc57602091610ee79160405191610ec683610843565b604435835260643585840152608435604084015260a4356060840152616a65565b604051908152f35b359060058210156106dc57565b91909160c0818403126106dc57610f116108bf565b92610f1b826106e0565b8452610f29602083016106e0565b602085015267ffffffffffffffff60408301358181116106dc5782610f4f918501610d13565b604086015260608301356060860152610f6a60808401610eef565b608086015260a08301359081116106dc57610f859201610b08565b60a0830152565b60606003198201126106dc5767ffffffffffffffff916004358381116106dc5782610fb991600401610d73565b926024358181116106dc5783610fd191600401610efc565b926044359182116106dc57610b2391600401610d13565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6002111561101f57565b610fe8565b9081518082526020808093019301915f5b828110611043575050505090565b909192938260606001928751805161105a81611015565b8252808401516001600160a01b03168483015260409081015115159082015201950193929101611035565b9081518082526020808093019301915f5b8281106110a4575050505090565b835185529381019392810192600101611096565b91909160e0830192815181526020808301519460e060208401528551809152602061010084019601915f5b82811061115a575050505060c0611149611137611125611113610b23979860408801518782036040890152611024565b60608701518682036060880152611085565b60808601518582036080870152611085565b60a085015184820360a0860152611085565b9201519060c0818403910152611085565b83516001600160a01b0316885296810196928101926001016110e3565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b346106dc5761124161125d61127061122d6111b636610f8c565b929194906111c2615637565b5061124f604051946111fb60208701876111dc8683615685565b03976111f0601f19998a810183528261088f565b51902091848a616ca2565b979293919590986112246040519182611218602082019586615685565b0390810183528261088f565b519020146156f5565b60405198899860a08a5260a08a01906110b8565b9088820360208a0152611085565b908682036040880152611085565b9160608501528382036080850152611177565b0390f35b346106dc5760806003193601126106dc5760043567ffffffffffffffff81116106dc57610ee76112aa6020923690600401610d73565b606435906044359060243590617212565b346106dc5760406003193601126106dc576004356112d8816106cb565b6024359063ffffffff821682036106dc576001600160a01b03611318911691825f525f60205260405f205460829163ffffffff908116831b921b19161790565b905f525f60205260405f20555f80f35b346106dc5760606003193601126106dc57600435611345816106cb565b6001600160a01b0361135b604435602435617295565b91165f52600b60205260405f20555f80f35b346106dc5760406003193601126106dc5760043561138a816106cb565b6024359067ffffffffffffffff82116106dc576113ae6107c2923690600401610d73565b906172f9565b60031960409101126106dc576004356113cc816106cb565b90602435610b2381610aa1565b906020610b239281815201906110b8565b346106dc576112706114156113fe366113b4565b90611407615637565b50611410615637565b61735c565b6040519182916020835260208301906110b8565b346106dc576003196040813601126106dc5760043561144781610bb3565b6024359161145483610bb3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6007549260011b16911617176007555f80f35b5f9103126106dc57565b346106dc575f6003193601126106dc5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346106dc5760406003193601126106dc576004356114e9816106cb565b6024356114f46179f6565b6114fc617a70565b6001600160a01b0382165f818152600860209081526040918290205491517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152919492829060249082905afa9384156107cb5761127094611588925f916115be575b5080611582856001600160a01b03165f52600860205260405f2090565b556157a4565b918083116115b4575b508161159c91617ac1565b6115a4617a4b565b6040519081529081906020820190565b915061159c611591565b6115e0915060203d6020116115e6575b6115d8818361088f565b81019061575a565b5f611565565b503d6115ce565b346106dc5760806003193601126106dc5761163b60043561160d816106cb565b602435611619816106cb565b60443590611626826106cb565b61163560643580948333617aff565b33617cdc565b602060405160018152f35b60c06003198201126106dc5767ffffffffffffffff916004358381116106dc578261167391600401610b26565b9260807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8401126106dc576040516116aa81610843565b60243581526044356020820152606435604082015260843560608201529260a4359182116106dc57610b2391600401610d73565b906116e882611015565b52565b610b239181516116fa81611015565b81526020820151602082015260c0611721604084015160e0604085015260e0840190611085565b9260608101516060840152608081015160808401526001600160a01b0360a08201511660a084015201519060c0818403910152611177565b906020610b239281815201906116eb565b346106dc5761127061178d61177e36611646565b916117876157b1565b50617ea8565b6040519182916020835260208301906116eb565b346106dc5760406003193601126106dc576004356117be816106cb565b6024356001600160a01b038216916040517fce20ece70000000000000000000000000000000000000000000000000000000081526020908181600481885afa9081156107cb575f9161193d575b508310611915576040517f654cf15d0000000000000000000000000000000000000000000000000000000081528181600481885afa9182156107cb575f926118f8575b505082116118d05781816118ba6118a37f89d41522342fabac1471ca6073a5623e5caf367b03ca6e9a001478d0cf8be4a19561189d6118cb966001600160a01b03165f525f60205260405f2090565b546191e1565b916001600160a01b03165f525f60205260405f2090565b556040519081529081906020820190565b0390a2005b7f7f47834b000000000000000000000000000000000000000000000000000000005f5260045ffd5b61190e9250803d106115e6576115d8818361088f565b5f8061184e565b7fbfb20688000000000000000000000000000000000000000000000000000000005f5260045ffd5b6119549150823d84116115e6576115d8818361088f565b5f61180b565b906020610b23928181520190611085565b346106dc576020806003193601126106dc576001600160a01b03600435611991816106cb565b165f5260056020526040805f2090600360205260405f2054916119b3836157e7565b935f5b8481106119cb5760405180611270888261195a565b806001915f528383526fffffffffffffffffffffffffffffffff855f2054166119f48289615818565b52016119b6565b346106dc5760606003193601126106dc57600435611a18816106cb565b67ffffffffffffffff6024358181116106dc57611a39903690600401610d13565b6044359182116106dc57611ab4611a57611a7c933690600401610d13565b936001600160a01b0381165f526003602052611a8360405f2060405195868092615859565b038561088f565b611a90845184511461589d565b611a9d845186511461589d565b6001600160a01b03165f52600560205260405f2090565b905f5b83518110156107c25780611ae2611ad060019385615818565b51611adb8389615818565b5190617295565b611af48286905f5260205260405f2090565b5501611ab7565b346106dc576107c2611b0c366106fb565b91617f11565b346106dc575f6003193601126106dc5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346106dc5760606003193601126106dc57600435611b69816106cb565b60243567ffffffffffffffff81116106dc57611b8990369060040161095a565b90611b926169d7565b611b9a616a43565b91600183526001600160a01b0390611bd4827f00000000000000000000000000000000000000000000000000000000000000001691615a72565b91813b156106dc575f8094611c2c96611c6b604051988997889687957fed05beaf0000000000000000000000000000000000000000000000000000000087521660048601526101006024860152610104850190611ee5565b91604435604485015284606485015260848401906060809180511515845260208101511515602085015260408101511515604085015201511515910152565b03925af180156107cb57611c7b57005b80611c886107c29261085f565b80611488565b359060048210156106dc57565b91909160c0818403126106dc57611cb06108bf565b92611cba826106e0565b8452611cc8602083016106e0565b602085015260408201356040850152606082013567ffffffffffffffff908181116106dc5782611cf9918501610d13565b6060860152610f6a60808401611c8e565b91611d2790610b2394928452606060208501526060840190611085565b916040818403910152611177565b346106dc5760206003193601126106dc5760043567ffffffffffffffff81116106dc57611d66903690600401611c9b565b611d6e617a70565b611d816001600160a01b0382511661807c565b611d9a611d9582516001600160a01b031690565b6180c9565b611db3611dae82516001600160a01b031690565b6175be565b611e06602082015151611dcd6060850191825151906180d5565b805160c0840190611de782519160a0870192835191618104565b92611df7865160019060101c1690565b611e8d575b5050508383618470565b929390919485611e1b835160019060111c1690565b611e30575b60405180611270878a8a84611d0a565b6112709496509085611e83949392611e79611e6c611e5585516001600160a01b031690565b6001600160a01b03165f52600260205260405f2090565b546001600160a01b031690565b9484513390618b52565b92905f8080611e20565b611eb5611edd948789611ead611e6c611e5583516001600160a01b031690565b9233906181cf565b611ed2611ecc611a9d89516001600160a01b031690565b876182a9565b519151905191618104565b5f8080611dfc565b9081518082526020808093019301915f5b828110611f04575050505090565b9091929382608060019287516001600160a01b0380825116835284820151611f2b81611015565b838601526040828101519091169083015260609081015115159082015201950193929101611ef6565b906020610b23928181520190611ee5565b346106dc5760206003193601126106dc5760043567ffffffffffffffff81116106dc57611fa1611f9c61127092369060040161095a565b615a72565b604051918291602083526020830190611ee5565b939460c091610b2398966120749561204b95610140938952602089015260408801526060870152806080870152815190611fee82611015565b86015260208101516001600160a01b03908116610160870152604082015181166101808701526060820151166101a086015260808101516101c086015260a08101516101e0860152015160e0610200850152610220840190611177565b845160a0840152602085015160c0840152604085015160e0840152606090940151610100830152565b6101208184039101526110b8565b346106dc5760c05f61209336611646565b9060409283516120a281610873565b8581526020908682820152868682015260609781888a809401528860808201528860a082015201526120d2615928565b506120db615637565b506120e7848484617ea8565b946120f06179f6565b6120f8615b3f565b91835161210481611015565b61210d81611015565b156124bc575b808701612120815161af52565b816121808187019961214b61213f61213f8d516001600160a01b031690565b6001600160a01b031690565b9086519c8d809481937f72c9818600000000000000000000000000000000000000000000000000000000835260048301611759565b03925af19889156107cb575f9961249d575b508861219d8161af52565b85516121a881611015565b6121b181611015565b61242357508286015190526121f560c08701516121ee6121e86121d9858a0193845190615818565b519260a08b0151905190615818565b5161b187565b908a61b846565b9660808501519388949a60a0870151808b106123f257509085915b8c86890194818651612228906001600160a01b031690565b90612232916197c5565b828a0196858851612249906001600160a01b031690565b9061225391617ac1565b8b8d86518451612269906001600160a01b031690565b8a516001600160a01b0316845191612281938561afe7565b93908c828a019901948552885282518783019487828751906122a291615818565b51906122ad91616c6a565b90516122b8916157a4565b6122c2918461b742565b820192835189818351906122d591615818565b51906122e0916157a4565b6122ea918461b742565b84516001600160a01b03165f908152600560205260409020928151815161231091615818565b5192608001928351825161232391615818565b5161232d91617295565b90516123419085905f5260205260405f2090565b5551835161234e91615818565b519051835161235c91615818565b5161236691617295565b915161237991905f5260205260405f2090565b555194519551918a0151925187519182526020820194909452604081019290925260608201929092526001600160a01b039182169382169291909116907f0874b2d545cb271cdbda4e093020c452328b24af12382ed62c4d00f5c26709db90608090a46123e4617a4b565b519687966112709688611fb5565b7fe2ea151b000000000000000000000000000000000000000000000000000000005f5260048b905260245260445b5ffd5b90506124529198506124498a870151670de0b6b3a764000081810390821002908361c061565b90818552616c6a565b9661247f61246660c0880151875190615818565b5161247760a0890151885190615818565b51908a61b72e565b96608085015193889a60a0870151808b116123f25750908591612210565b6124b5919950823d84116115e6576115d8818361088f565b975f612192565b8087016124db6124d182518c8901519061b824565b80865282516157a4565b9052612113565b346106dc5760206003193601126106dc576020610ee7600435612504816106cb565b6001600160a01b0381165f52600b835260405f205461910f565b60606003198201126106dc5767ffffffffffffffff916004358381116106dc578261254b91600401610d73565b926024358181116106dc5783610fd191600401611c9b565b346106dc576125826125743661251e565b9161257d6179f6565b618470565b505050505f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b346106dc5760406003193601126106dc576001600160a01b036004356125d0816106cb565b16805f525f60205261131860243560405f20546191e1565b346106dc5760206003193601126106dc5760043567ffffffffffffffff81116106dc57612619903690600401610b26565b612621617a70565b602081016001600160a01b036126398183511661807c565b61264d611d9583516001600160a01b031690565b6080830151156128565760408301516001600160a01b03169061267d61213f60608601516001600160a01b031690565b91161461282e57612698611dae82516001600160a01b031690565b916126a38382619254565b906126af848383617ea8565b8451600c1c6001166127b3575b84516126d69190600b1c600116612772575b858484618d04565b96919694909683966126ed8451600190600d1c1690565b61273d575b50505050505161270181611015565b61270a81611015565b6127315750611270815b604051938493846040919493926060820195825260208201520152565b91506112708192612714565b8597509061275c611e6c611e556127679894516001600160a01b031690565b94845191339261953c565b915f808080806126f2565b84516001600160a01b03166127ac606086019182516127a5611e6c836001600160a01b03165f52600260205260405f2090565b9185619391565b90526126ce565b6127ec906127c885516001600160a01b031690565b6127e6611e6c826001600160a01b03165f52600260205260405f2090565b916192b9565b612809612803611a9d85516001600160a01b031690565b856182a9565b612814828583616a65565b60408301526126d6612827858484617ea8565b90506126bc565b7fa54b181d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f57a456b7000000000000000000000000000000000000000000000000000000005f5260045ffd5b346106dc5760206003193601126106dc576004358061289957005b6107c29061af52565b346106dc5760206003193601126106dc576004356128bf816106cb565b6128c76179f6565b6001600160a01b03604051917f15afd4090000000000000000000000000000000000000000000000000000000083521660048201525f60248201526020816044815f305af180156107cb57611270915f91612926575b506115a4617a4b565b61293f915060203d6020116115e6576115d8818361088f565b5f61291d565b9060406003198301126106dc5760043561295e816106cb565b916024359067ffffffffffffffff82116106dc57610b239160040161095a565b346106dc5761298c36612945565b90612997825161594c565b916129a0615b3f565b915f5b82518110156129eb57806129e56129cc6129bf60019487615818565b516001600160a01b031690565b6129d68389615818565b51906001600160a01b03169052565b016129a3565b8482856001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016612a20616a43565b93813b156106dc575f8094611c6b604051978896879586947fd396a66600000000000000000000000000000000000000000000000000000000865260048601615b5d565b60031960409101126106dc57600435612a7c816106cb565b90602435610b2381610bb3565b346106dc576001600160a01b03612a9f36612a64565b91165f525f60205260405f20907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8254161790555f80f35b60031960409101126106dc57600435612aef816106cb565b90602435610b23816106cb565b346106dc5760206fffffffffffffffffffffffffffffffff612b4a6001600160a01b03612b2836612ad7565b91165f526006845260405f20906001600160a01b03165f5260205260405f2090565b5416604051908152f35b60031960a09101126106dc5760405160a0810181811067ffffffffffffffff82111761083e57604052600435612b8981610aa1565b8152602435612b9781610aa1565b6020820152604435612ba8816106cb565b60408201526064356060820152608435608082015290565b346106dc57612bce36612b54565b612bd66179f6565b6080604051917f43583be50000000000000000000000000000000000000000000000000000000083528051612c0a81611015565b60048401526020810151612c1d81611015565b60248401526001600160a01b036040820151166044840152606081015160648401520151608482015260608160a4815f305af180156107cb575f905f925f91612c6e575b5061127090612714617a4b565b90506112709250612c97915060603d606011612c9e575b612c8f818361088f565b810190615bea565b9092612c61565b503d612c85565b346106dc5760406003193601126106dc576001600160a01b03600435612cca816106cb565b165f52600d60205260243560405f20555f80f35b346106dc576020806003193601126106dc576001600160a01b03600435612d04816106cb565b165f5260056020526040805f2090600360205260405f205491612d26836157e7565b935f5b848110612d3e5760405180611270888261195a565b806001915f52838352612d54855f205460801c90565b612d5e8289615818565b5201612d29565b346106dc5760406003193601126106dc576107c2600435612d85816106cb565b612d9060243561ba85565b9061adb5565b346106dc5760406003193601126106dc576020612df4600435612db8816106cb565b6024357f0000000000000000000000000000000000000000000000000000000000000000905f5260205260405f20905f5260205260405f205c90565b6040519015158152f35b346106dc57612e0c36612b54565b612e14617a70565b60075460021c60011661312a57604090818101916001600160a01b03928381511693845f52600e60205280835f205416156130fe5760049450612e556179f6565b6020612e6b61213f84516001600160a01b031690565b8451968780927f38d52e0f0000000000000000000000000000000000000000000000000000000082525afa80156107cb576080955f916130cf575b5016612ec281612ebd84516001600160a01b031690565b6197d1565b81516001600160a01b031690612ede6060860192835190619827565b60016020860151612eee81611015565b612ef781611015565b0361306457612f1f91855191612f0c83611015565b84516001600160a01b031691519261a512565b7feeb740c90bf2b18c9532eb7d473137767036d893dff3e009f32718f821b2a4c08296929793979688612f7c612f5f61213f89516001600160a01b031690565b948951938493846040919493926060820195825260208201520152565b0390a25b8051612f8b81611015565b612f9481611015565b613015570151808410612fe5575051611270918391612fc29083906001600160a01b0316619827565b619827565b612fca617a4b565b51938493846040919493926060820195825260208201520152565b7fe2ea151b000000000000000000000000000000000000000000000000000000005f52600484905260245260445ffd5b015180851161303457509161127091612fc2612fbd94869586916129bf565b7fe2ea151b000000000000000000000000000000000000000000000000000000005f52600485905260245260445ffd5b6130879185519161307483611015565b84516001600160a01b0316915192619d6e565b7f3771d13c67011e31e12031c54bb59b0bf544a80b81d280a3711e172aa8b7f47b82969297939796886130c7612f5f61213f89516001600160a01b031690565b0390a2612f80565b6130f1915060203d6020116130f7575b6130e9818361088f565b810190615c05565b5f612ea6565b503d6130df565b847f85f41299000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f0f27df09000000000000000000000000000000000000000000000000000000005f5260045ffd5b346106dc576131a56131c76001600160a01b0361316e366106fb565b94919290921693845f52600660205261319b8360405f20906001600160a01b03165f5260205260405f2090565b5460801c90617295565b925f52600660205260405f20906001600160a01b03165f5260205260405f2090565b55005b346106dc5760406003193601126106dc5767ffffffffffffffff6004358181116106dc576131fc903690600401610b26565b906024359081116106dc5760809161321b61322a923690600401610d73565b90613224615928565b50619254565b6132556040518092606080918051845260208101516020850152604081015160408501520151910152565bf35b346106dc576107c2613268366106fb565b9161a837565b906020610b23928181520190611177565b346106dc5760206003193601126106dc5767ffffffffffffffff6004358181116106dc57366023820112156106dc5780600401359182116106dc5736602483830101116106dc576112709160246132d69201615c1a565b6040519182918261326e565b6132f8610b239492606083526060830190611085565b9260208201526040818403910152611177565b346106dc5760206003193601126106dc5760043567ffffffffffffffff81116106dc5761333c903690600401610efc565b613344617a70565b6133576001600160a01b0382511661807c565b61336b611d9582516001600160a01b031690565b6133c87f00000000000000000000000000000000000000000000000000000000000000005c6133a183516001600160a01b031690565b907f000000000000000000000000000000000000000000000000000000000000000061a996565b6133e16133dc82516001600160a01b031690565b6177ea565b6134346020820151516133fb6040850191825151906180d5565b805160c084019061341582519160a087019283519161a9af565b926134258651600190600e1c1690565b613498575b5050508383616ca2565b919094929384938661344b8351600190600f1c1690565b613461575b8561127086604051938493846132e2565b611270955061348c9496613482611e6c611e5585516001600160a01b031690565b948451339061abbb565b9050815f808086613450565b6134bf6134e79487896134b8611e6c611e5583516001600160a01b031690565b923361aa76565b6134dc6134d6611a9d89516001600160a01b031690565b8761834d565b51915190519161a9af565b5f808061342a565b346106dc5760206003193601126106dc576001600160a01b03600435613514816106cb565b165f525f602052602060405f2054604051908152f35b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc60809101126106dc576040519061356182610843565b8160243561356e81610bb3565b815260443561357c81610bb3565b602082015260643561358d81610bb3565b60408201526060608435916135a183610bb3565b0152565b610104359064ffffffffff821682036106dc57565b346106dc576101c06003193601126106dc576004356135d8816106cb565b6101a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126106dc576107c29061360f6108df565b906136193661352a565b825260a435602083015260c435604083015260e435606083015261363b6135a5565b60808301526136486109d7565b60a0830152613655610bbd565b60c0830152613662610bcb565b60e083015261366f610bd9565b61010083015261367d610be7565b610120830152615ce7565b346106dc576001600160a01b0361369e36612a64565b91165f525f60205260405f20907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8254169060011b1790555f80f35b346106dc5760206003193601126106dc576004357f00000000000000000000000000000000000000000000000000000000000000005d005b9080601f830112156106dc57602090823561372c81610942565b9361373a604051958661088f565b81855260208086019260051b8201019283116106dc57602001905b828210613763575050505090565b8380918335613771816106cb565b815201910190613755565b346106dc576040806003193601126106dc5767ffffffffffffffff6004358181116106dc576137af90369060040161095a565b906024359081116106dc576137c8903690600401613712565b6137d2825161594c565b925f5b835181101561385757806137f16129cc6129bf60019488615818565b61381c6138016129bf8387615818565b8461380c848a615818565b5101906001600160a01b03169052565b61382c61213f6129bf8387615818565b61384e576138485f5b6020613841848a615818565b5101615f73565b016137d5565b61384882613835565b6040517fbb4ad7d50000000000000000000000000000000000000000000000000000000081525f818061388d8960048301611f54565b03816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa80156107cb57611270915f916138d9575b5060405191829182611f54565b6138f591503d805f833e6138ed818361088f565b81019061599a565b826138cc565b9080601f830112156106dc57602090823561391581610942565b93613923604051958661088f565b81855260208086019260051b8201019283116106dc57602001905b82821061394c575050505090565b838091833561395a81610bb3565b81520191019061393e565b346106dc5760806003193601126106dc5767ffffffffffffffff6004358181116106dc5761399790369060040161095a565b90602435918183116106dc57366023840112156106dc5782600401356139bc81610942565b936139ca604051958661088f565b8185526020916024602087019160051b830101913683116106dc57602401905b828210613a3e57505050506044358281116106dc57613a0d903690600401613712565b6064359283116106dc5761127093613a2c613a329436906004016138fb565b92615f86565b60405191829182611f54565b8380918335613a4c81610aa1565b8152019101906139ea565b346106dc5760206003193601126106dc576107c2600435613a77816106cb565b61807c565b346106dc5760206003193601126106dc57600435613a9981610bb3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd600754169060011b176007555f80f35b346106dc575f6003193601126106dc575f7f00000000000000000000000000000000000000000000000000000000000000005d005b346106dc576131a56131c76001600160a01b03613b1b366106fb565b94919290921693845f5260066020526fffffffffffffffffffffffffffffffff613b598460405f20906001600160a01b03165f5260205260405f2090565b5416617295565b346106dc575f6003193601126106dc5760017f00000000000000000000000000000000000000000000000000000000000000005d005b346106dc5760406003193601126106dc576107c2600435613bb6816106cb565b6001600160a01b0360243591613bcb836106cb565b165f526001602052600260405f2001906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b60031960409101126106dc57600435613c25816106cb565b9060243590565b346106dc576107c2612d9036613c0d565b346106dc575f6003193601126106dc5760207f00000000000000000000000000000000000000000000000000000000000000005c604051908152f35b346106dc576001600160a01b03613c8f36612945565b91165f52602090600360205260405f2081519167ffffffffffffffff831161083e5768010000000000000000831161083e578154838355808410613d0e575b506020613ce09101915f5260205f2090565b925f5b838110613cec57005b60019082613d0185516001600160a01b031690565b9401938187015501613ce3565b825f528360205f2091820191015b818110613d295750613cce565b5f8155600101613d1c565b346106dc57613d4236612945565b90613d4b6169d7565b613d53615b3f565b90613d876001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693615a72565b915f93613d92616a43565b93813b156106dc575f8094613dd6604051978896879586947fd396a66600000000000000000000000000000000000000000000000000000000865260048601615b5d565b03925af180156107cb57613de8575080f35b6107c2915061085f565b346106dc5760206003193601126106dc576001600160a01b03600435613e17816106cb565b16805f525f602052600160405f205460031c1615613e3157005b7fef029adf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b346106dc575f6003193601126106dc5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346106dc576020613edc6001600160a01b03613eba36612ad7565b91165f526006835260405f20906001600160a01b03165f5260205260405f2090565b5460801c604051908152f35b346106dc5760406003193601126106dc576001600160a01b03600435613f0d816106cb565b16805f525f60205261131860243560405f205461ad75565b346106dc57613f3336611646565b613f3e9291926179f6565b613f49818484617ea8565b92613f526179f6565b613f5a615b3f565b908351613f6681611015565b613f6f81611015565b156142f9575b6020945f868201613f86815161af52565b87613fdb81890194613fa561213f61213f88516001600160a01b031690565b906040519586809481937f72c9818600000000000000000000000000000000000000000000000000000000835260048301611759565b03925af19182156107cb575f926142da575b50613ff78261af52565b865161400281611015565b61400b81611015565b614266579061404a916040850151905260c08601516140446121e86140358b880193845190615818565b519260a08a0151905190615818565b9161b846565b9060808601519482959260a0880151908181106142385750505b604087019683885161407c906001600160a01b031690565b90614086916197c5565b6060019786895161409d906001600160a01b031690565b906140a791617ac1565b855183516001600160a01b031689516001600160a01b03168751916140cc938661afe7565b91908188019760400192835287528551606084019286828551906140ef91615818565b51906140fa91616c6a565b9051614105916157a4565b61410f918561b742565b8501918251888184519061412291615818565b519061412d916157a4565b614137918361b742565b83516001600160a01b03165f908152600560205260409020918051875161415d91615818565b5191608001918251885161417091615818565b5161417a91617295565b875161418e9085905f5260205260405f2090565b5551835161419b91615818565b51905183516141a991615818565b516141b391617295565b91516141c691905f5260205260405f2090565b555194519551606092830151935160408051938452602084019690965294820193909352908101929092526001600160a01b039081169381169216907f0874b2d545cb271cdbda4e093020c452328b24af12382ed62c4d00f5c26709db90608090a4614230617a4b565b6107c2617a4b565b7fe2ea151b000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b506142966142be9161428d6060860151670de0b6b3a764000081810390821002908361c061565b90818752616c6a565b6142a660c0870151855190615818565b516142b760a0880151865190615818565b519161b72e565b906080860151948260a088015190818111614238575050614064565b6142f2919250883d8a116115e6576115d8818361088f565b905f613fed565b6020850161431a614310825160608501519061b824565b80855282516157a4565b9052613f75565b346106dc5760406003193601126106dc576001600160a01b03600435614346816106cb565b16805f525f60205261131860405f205464174876e800602435049061b875565b346106dc575f6003193601126106dc5761437e6179f6565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c156106dc575f905d005b346106dc5760206003193601126106dc576020610ee76004356143cd816106cb565b6001600160a01b0381165f52600b835260405f205461ae78565b346106dc5760806003193601126106dc5760043567ffffffffffffffff81116106dc5761441b611270913690600401610d73565b6144b460243560443561442d81610aa1565b60643590614439615637565b5082614449836060880151615818565b5261445381611015565b6144c1576002915b6144ad60c08601926144a581614472818751615818565b519561449060a08b0197614487848a51615818565b5190888b61c6e9565b61449e8360808d0151615818565b5251615818565b519351615818565b519261c6e9565b50604051918291826113d9565b60019161445b565b346106dc5760406003193601126106dc576107c26004356144e9816106cb565b6001600160a01b03602435916144fe836106cb565b165f52600e60205260405f20906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b60031960809101126106dc57600435614555816106cb565b90602435614562816106cb565b906044359060643590565b346106dc576107c261457e3661453d565b9291909161af0d565b346106dc57614595366106fb565b909161459f6179f6565b6145a7617a70565b6145b96145b38361ba85565b8261adb5565b6001600160a01b0381165f52600860205260405f2080549383850394851161465d579390556040517fa9059cbb0000000000000000000000000000000000000000000000000000000060208201526001600160a01b039093166024840152604480840192909252908252614638919061463360648361088f565b61c3ee565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b615769565b346106dc5760406003193601126106dc576107c2600435614682816106cb565b60243590617ac1565b346106dc575f6003193601126106dc5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346106dc5760206003193601126106dc576107c260043561af52565b346106dc576107c26146f23661453d565b9291909161afa2565b346106dc575f6003193601126106dc576107c2617a70565b346106dc5760406003193601126106dc576020610ee7600435614735816106cb565b60243590616111565b346106dc575f6003193601126106dc5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346106dc5760606003193601126106dc576004803561479f816106cb565b67ffffffffffffffff916024358381116106dc576147c190369060040161095a565b926044359081116106dc576147da903690600401610c6c565b916001600160a01b039081165f5b85518110156107c257806147fe60019287615818565b51835f526020908682526040906148348a8861481d87865f2093615818565b51166001600160a01b03165f5260205260405f2090565b927fffffffffffffffffffff0000000000000000000000000000000000000000000060ff75ff00000000000000000000000000000000000000000084519561487b87611015565b61488487611015565b74ffffffffffffffffffffffffffffffffffffffff0088549587015160081b16950151151560a81b16941691161717179055016147e8565b346106dc5760406003193601126106dc576020610ee76004356148de816106cb565b602435906162b8565b346106dc5760a06003193601126106dc5760043567ffffffffffffffff81116106dc5761491b614941913690600401610d73565b604435614927816106cb565b60643590614934826106cb565b608435926024359061afe7565b60408051928352602083019190915290f35b346106dc5761163b614964366106fb565b9133617cdc565b346106dc576101806003193601126106dc57600435614989816106cb565b6101607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126106dc576107c2906149c0610900565b906149c9610bf5565b82526149d3610c02565b60208301526149e0610c0f565b60408301526149ed610c1c565b60608301526149fa610c29565b6080830152614a07610c36565b60a0830152614a14610c43565b60c0830152614a21610c50565b60e0830152614a2e610c5e565b610100830152614a3c610bbd565b610120830152614a4a6106ed565b610140830152616335565b346106dc576001600160a01b03614a6b36612ad7565b911690815f525f602052600160405f20541615614ac457614ab190614aa4925f526003602052614aab60405f2060405194858092615859565b038461088f565b8261b10b565b9051604080519182526020820192909252f35b507f9e51bd5c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b346106dc576001600160a01b03614b0636612a64565b91165f525f60205260405f20907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb8254169060021b1790555f80f35b346106dc5760406003193601126106dc576020610ee7600435614b64816106cb565b602435906165e6565b346106dc575f6003193601126106dc577f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6106dc57005b346106dc5760406003193601126106dc57600435614bc2816106cb565b6001600160a01b03602435911690815f525f60205260405f2054670de0b5cad2bef0008211614bfc5764174876e80061131892049061b875565b7f746e5940000000000000000000000000000000000000000000000000000000005f5260045ffd5b346106dc57614c32366106fb565b9091614c3c6179f6565b303b156106dc57604051927fae6393290000000000000000000000000000000000000000000000000000000084526001600160a01b03809216600485015216602483015260448201525f8160648183305af180156107cb57614cbd575f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b614cc69061085f565b5f614638565b346106dc576107c2614cdd36613c0d565b907f000000000000000000000000000000000000000000000000000000000000000061b171565b346106dc5760406003193601126106dc576020610ee7600435614d26816106cb565b602435906166ee565b346106dc575f6003193601126106dc5760207f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6040519015158152f35b346106dc5760406003193601126106dc576001600160a01b03600435614d92816106cb565b165f52600860205260243560405f20555f80f35b346106dc5760606003193601126106dc57600435614dc3816106cb565b60243567ffffffffffffffff81116106dc57614de3903690600401610d73565b906001600160a01b0360443591614df983610aa1565b614e01615637565b50165f5260209060056020526040805f20602085015151935f6040870160a08801915b878110614e3957604051806112708b826113d9565b80614e50614e4a6001938551615818565b5161bb7d565b614e5b828651615818565b52805f52858552614e83886fffffffffffffffffffffffffffffffff895f205416838d61b7d2565b01614e24565b346106dc5760806003193601126106dc57600435614ea6816106cb565b67ffffffffffffffff6024358181116106dc57614ec790369060040161095a565b6044358281116106dc57614edf903690600401610d13565b916064359081116106dc57614f006001600160a01b03913690600401610d13565b93614f0e835185511461589d565b614f1b835186511461589d565b1691825f52602091600560205260409160405f20915f5b8151811015614f665780614f56614f4b60019386615818565b51611adb838c615818565b815f52858852865f205501614f32565b6107c282885f52600360205260405f20616076565b346106dc576040806003193601126106dc57600435614f99816106cb565b6024359067ffffffffffffffff82116106dc57366023830112156106dc57816004013591614fc683610942565b92614fd4604051948561088f565b8084526020906024602086019160071b840101923684116106dc57602401905b838210615005576107c28686616766565b6080823603126106dc5782608091885161501e81610843565b8435615029816106cb565b81528285013561503881610aa1565b8382015289850135615049816106cb565b8a8201526060808601359061505d82610bb3565b820152815201910190614ff4565b346106dc5761127061509961507f366113b4565b90615088615637565b506150916179f6565b611410615637565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d6040519182916020835260208301906110b8565b346106dc5760406003193601126106dc576001600160a01b036004356150f5816106cb565b165f525f60205260243560405f20555f80f35b346106dc5761511636612a64565b907f00000000000000000000000000000000000000000000000000000000000000005c5f527f000000000000000000000000000000000000000000000000000000000000000060205260405f20905f5260205260405f205d005b346106dc5760206003193601126106dc576151a1600435615190816106cb565b615198615b3f565b506107f06169d7565b6060600754604051906151b382610822565b600181161515918281526001604060208301928285811c1615158452019260021c161515825260405192835251151560208301525115156040820152f35b346106dc576060806003193601126106dc5767ffffffffffffffff906004358281116106dc5761522590369060040161095a565b906024358381116106dc5761523e903690600401613712565b926044359081116106dc576152579036906004016138fb565b615261835161594c565b935f5b8451811015615304578061528a6152806129bf60019489615818565b6129d6838a615818565b6152a661529a6129bf8386615818565b604061380c848b615818565b6152b661213f6129bf8386615818565b6152fb576152cb5f5b6020613841848b615818565b6152f56152e16152db8387615818565b51151590565b866152ec848b615818565b51019015159052565b01615264565b6152cb826152bf565b6040517fbb4ad7d50000000000000000000000000000000000000000000000000000000081525f818061388d8a60048301611f54565b346106dc5760206003193601126106dc576001600160a01b0360043561535f816106cb565b165f52600b602052602060405f2054604051908152f35b346106dc5760406003193601126106dc5760043567ffffffffffffffff81116106dc57610ee76153ac602092369060040161095a565b602435906153b9826106cb565b61b10b565b346106dc576125826153cf36610f8c565b916153d86179f6565b616ca2565b346106dc5761545961546c61127061122d61547a6153fa3661251e565b61540696919296615637565b506040519261543c602085018561541d8483616868565b0395615431601f199788810183528261088f565b51902092828a618470565b989294919390966112246040519182611218602082019586616868565b9160208901528782036040890152611085565b908582036060870152611085565b908382036080850152611177565b346106dc5760606003193601126106dc576004356154a5816106cb565b6001600160a01b03602435916154ba836106cb565b165f52600c6020526131c76044359160405f20906001600160a01b03165f5260205260405f2090565b908160209103126106dc5751610b2381610bb3565b6040513d5f823e3d90fd5b9092919261550f6169d7565b6001600160a01b03615543817f00000000000000000000000000000000000000000000000000000000000000001692615a72565b9261554c616a43565b90833b156106dc576155ae966156195f97936155e1899563ffffffff6040519c8d9b8c9a8b997f0e0677ab000000000000000000000000000000000000000000000000000000008b521660048a015261016060248a0152610164890190611ee5565b9516604487015280516001600160a01b0390811660648801526020820151811660848801526040909101511660a4860152565b60c484018590528051151560e48501526020810151151561010485015260408101511515610124850152606001511515610144840152565b03925af180156107cb5761562a5750565b80611c886106eb9261085f565b6040519061564482610873565b815f815260c060609182602082015282604082015282808201528260808201528260a08201520152565b6005111561101f57565b90600582101561101f5752565b90610b2391602081526001600160a01b03808351166020830152602083015116604082015260a06156c5604084015160c0606085015260e0840190611085565b92606081015160808401526156e1608082015183850190615678565b01519060c0601f1982850301910152611177565b156156fc57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f496e70757420706172616d65746572732068617665206368616e6765640000006044820152fd5b908160209103126106dc575190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b905f19820191821161465d57565b9190820391821161465d57565b604051906157be82610873565b606060c0835f81525f60208201528260408201525f838201525f60808201525f60a08201520152565b906157f182610942565b6157fe604051918261088f565b828152601f1961580e8294610942565b0190602036910137565b805182101561582c5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b9081548082526020809201925f5260205f20915f905b82821061587d575050505090565b83546001600160a01b03168552938401936001938401939091019061586f565b156158a457565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5661756c744d6f636b3a20544f4b454e535f4c454e4754485f4d49534d41544360448201527f48000000000000000000000000000000000000000000000000000000000000006064820152fd5b6040519061593582610843565b5f6060838281528260208201528260408201520152565b9061595682610942565b615963604051918261088f565b828152601f196159738294610942565b01905f5b82811061598357505050565b60209061598e615928565b82828501015201615977565b9060209182818303126106dc5780519067ffffffffffffffff82116106dc570181601f820112156106dc578051926159d184610942565b936040936159e2604051968761088f565b818652828087019260071b850101938185116106dc578301915b848310615a0c5750505050505090565b6080838303126106dc57836080918751615a2581610843565b8551615a30816106cb565b815282860151615a3f81610aa1565b8382015288860151615a50816106cb565b8982015260608087015190615a6482610bb3565b8201528152019201916159fc565b615a7c815161594c565b905f5b8151811015615ab25780615aac6001600160a01b03615aa060019486615818565b51166129d68387615818565b01615a7f565b50505f615aec91604051809381927fbb4ad7d500000000000000000000000000000000000000000000000000000000835260048301611f54565b03816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156107cb575f91615b2b575090565b610b2391503d805f833e6138ed818361088f565b60405190615b4c82610822565b5f6040838281528260208201520152565b615bb7615b8a6106eb9597969460c0946001600160a01b0361014091168552806020860152840190611ee5565b966040830190604090816001600160a01b0391828151168552826020820151166020860152015116910152565b5f60a082015201906060809180511515845260208101511515602085015260408101511515604085015201511515910152565b908160609103126106dc578051916040602083015192015190565b908160209103126106dc5751610b23816106cb565b919091615c5c615c567f000000000000000000000000000000000000000000000000000000000000000092835c159586615cde575b3691610ad2565b3361c24c565b92615c645750565b7f00000000000000000000000000000000000000000000000000000000000000005c615cb6575f905d6106eb7f000000000000000000000000000000000000000000000000000000000000000061a985565b7f20f1d86d000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001855d615c4f565b906118a3816060615f40615f0e615edc615eaa615e62615e1e615e14615e09615dfe615dcb615f709d8f610120615d98615d66615d37615da0946001600160a01b03165f525f60205260405f2090565b5460c08601511515907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe161790565b60e085015115157ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9060011b91161790565b920151151590565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff79060031b91161790565b6101008c015115157ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb9060021b91161790565b60208b0151906191e1565b60408a01519061ad64565b878901519061ad75565b6080880151605a1b7003fffffffffc0000000000000000000000167ffffffffffffffffffffffffffffffffc0000000003ffffffffffffffffffffff919091161790565b60a087015160821b7403fffffffc00000000000000000000000000000000167ffffffffffffffffffffffffc00000003ffffffffffffffffffffffffffffffff919091161790565b945194855115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef9060041b91161790565b602085015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf9060051b91161790565b604084015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf9060061b91161790565b91015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f9060071b91161790565b55565b6116e882611015565b51610b2381611015565b9190939293615f95835161594c565b925f5b81518110156160075780615fb46129cc6129bf60019486615818565b615fc9613835615fc48387615818565b615f7c565b615fe5615fd96129bf8388615818565b604061380c848a615818565b616001615ff56152db838b615818565b60606152ec848a615818565b01615f98565b50505050615aec9192505f90604051809381927fbb4ad7d500000000000000000000000000000000000000000000000000000000835260048301611f54565b90670de0b6b3a76400009182810292818404149015171561465d57565b8181029291811591840414171561465d57565b81519167ffffffffffffffff831161083e5768010000000000000000831161083e5781548383558084106160eb575b506160b86020809201925f5260205f2090565b905f5b8481106160c9575050505050565b600190826160de86516001600160a01b031690565b95019481850155016160bb565b825f528360205f2091820191015b81811061610657506160a5565b5f81556001016160f9565b908015801561619c575b616196576040517f38d52e0f000000000000000000000000000000000000000000000000000000008152916001600160a01b036020846004818585165afa80156107cb57616171945f91616177575b50166198a1565b50905090565b616190915060203d6020116130f7576130e9818361088f565b5f61616a565b50505f90565b506161e360206161ab83615796565b604051809381927fef8b30f7000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03816001600160a01b0387165afa9081156107cb575f91616206575b501561611b565b61621f915060203d6020116115e6576115d8818361088f565b5f6161ff565b9080519061623282611015565b61623b82611015565b82546020820151604092909201517fffffffffffffffffffff0000000000000000000000000000000000000000000090911660ff939093169290921760089190911b74ffffffffffffffffffffffffffffffffffffffff00161790151560a81b75ff00000000000000000000000000000000000000000016179055565b908015616196576040517f38d52e0f000000000000000000000000000000000000000000000000000000008152916001600160a01b036020846004818585165afa80156107cb57616311945f91616316575b501661a150565b505090565b61632f915060203d6020116130f7576130e9818361088f565b5f61630a565b6165b361659b61213f6101406106eb9561657261653f61650c6164da6164a86164766164446164126163e06163ae8f61637e906001600160a01b03165f525f60205260405f2090565b548b5115157ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdff9060091b91161790565b60208b015115157ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff9060081b91161790565b60408a015115157ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbff90600a1b91161790565b606089015115157ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff90600b1b91161790565b608088015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff90600c1b91161790565b60a087015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfff90600d1b91161790565b60c086015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfff90600e1b91161790565b60e085015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fff90600f1b91161790565b61010084015115157ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff9060101b91161790565b61012083015115157ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff9060111b91161790565b61658c876001600160a01b03165f525f60205260405f2090565b5501516001600160a01b031690565b916001600160a01b03165f52600260205260405f2090565b906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b9080158015616665575b616196576040517f38d52e0f000000000000000000000000000000000000000000000000000000008152916001600160a01b036020846004818585165afa80156107cb57616171945f91616646575b501661a358565b61665f915060203d6020116130f7576130e9818361088f565b5f61663f565b506166ac602061667483615796565b604051809381927f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03816001600160a01b0387165afa9081156107cb575f916166cf575b50156165f0565b6166e8915060203d6020116115e6576115d8818361088f565b5f6166c8565b908015616196576040517f38d52e0f000000000000000000000000000000000000000000000000000000008152916001600160a01b036020846004818585165afa80156107cb57616311945f91616747575b5016619b0b565b616760915060203d6020116130f7576130e9818361088f565b5f616740565b91905f5b815181101561684b5760019061684560206167f2816167898588615818565b5101519161679683611015565b60406167e96001600160a01b03826167ae898c615818565b5101511660606167be898c615818565b5101511515936167d98451976167d389610822565b88615f73565b8601906001600160a01b03169052565b83019015159052565b616840616810886001600160a01b03165f52600460205260405f2090565b61682b61681d8689615818565b51516001600160a01b031690565b6001600160a01b03165f5260205260405f2090565b616225565b0161676a565b50509050565b6004111561101f57565b90600482101561101f5752565b90610b2391602081526001600160a01b0380835116602083015260208301511660408201526040820151606082015260a06168b2606084015160c0608085015260e0840190611085565b926156e160808201518385019061685b565b7ff2238896000000000000000000000000000000000000000000000000000000005f5260045ffd5b346168c457365f80375f8036816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af43d5f803e15616932573d5ff35b3d5ffd5b6001600160a01b0316805f525f60205260405f205460018160021c169063ffffffff8091616962608290565b1c168261699e575b50506169735750565b7fd971f597000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b908092507f0000000000000000000000000000000000000000000000000000000000000000160181811161465d57164211155f8061696a565b63ffffffff7f00000000000000000000000000000000000000000000000000000000000000001642111580616a35575b616a0d57565b7fda9f8b34000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001600754811c16616a07565b616a4b615928565b50616a54615928565b600160208201526001604082015290565b9190918051616a7381611015565b616a7c81611015565b616ac85790616abf670de0b6b3a764000093616ab86080616ac49501519360a0616aac60c0850151835190615818565b51930151905190615818565b5192616063565b616063565b0490565b610b2392616afe6121e86080616b049401519460a0616af2602060c0870151930192835190615818565b51940151905190615818565b92616063565b61b824565b9080601f830112156106dc57815190602091616b2481610942565b93616b32604051958661088f565b81855260208086019260051b8201019283116106dc57602001905b828210616b5b575050505090565b81518152908301908301616b4d565b81601f820112156106dc57805190616b8182610ab6565b92616b8f604051948561088f565b828452602083830101116106dc57815f9260208093018386015e8301015290565b916080838303126106dc5782519067ffffffffffffffff918281116106dc5783616bdb918601616b09565b9360208101519360408201518481116106dc5781616bfa918401616b09565b9360608301519081116106dc57610b239201616b6a565b93616c3b616c4e936001600160a01b03610b2398969416875260a0602088015260a0870190611085565b9160408601528482036060860152611085565b916080818403910152611177565b906001820180921161465d57565b9190820180921161465d57565b91616c9490610b2394928452606060208501526060840190611085565b916040818403910152611085565b9190616cac6179f6565b6060616cb6615b3f565b9160208501616cc98151518086526157e7565b60808301958651616cd98161566e565b616ce28161566e565b616fc257506060830151616cf686516157e7565b94616d328260808b0151616d2c616d1489516001600160a01b031690565b6001600160a01b03165f52601160205260405f205490565b9061b6e7565b995b6060860151808410616f925750616d4d839998996197b4565b60208901975f5b8c8b51821015616ead5781616d6891615818565b51616d72816197b4565b616d7c8288615818565b51616e9c57616da3908d6142b78460a0616d9a8260c0860151615818565b51930151615818565b80616dae8389615818565b525b616dbe6129bf838a51615818565b60408a01616dcd848251615818565b518311616e5057508d83616e448e616e3c8f968f97616e2786616e1f818b60019e9d616dfc88616e4a9f6197c5565b616e18616e098489615818565b5191516001600160a01b031690565b908d61afe7565b875292615818565b52616e36856060880151615818565b51616c6a565b9051906157a4565b9161b742565b01616d54565b91616e5f846124209451615818565b517f8eda85e4000000000000000000000000000000000000000000000000000000005f526001600160a01b03909216600452602452604452606490565b50616ea78187615818565b51616db0565b5050939694509650965096616ed290616ecd85516001600160a01b031690565b6172f9565b7fa26a52d8d53702bba7f137907b8e1f99ff87f6d450144270ca25e72481cca871616f0484516001600160a01b031690565b92616f25896020870195616f1f87516001600160a01b031690565b9061a837565b616f59616d14616f4d616f3f88516001600160a01b031690565b96516001600160a01b031690565b9451966129bf8861566e565b92616f816001600160a01b0392616f6f8861566e565b88846040519586951698169684616c77565b0390a4616f8c617a4b565b93929190565b7f8d261d5d000000000000000000000000000000000000000000000000000000005f52600484905260245260445ffd5b60038751616fcf8161566e565b616fd88161566e565b03616ffa57616fe7885161b6b2565b616ff181516157e7565b945f9199616d34565b97600187516170088161566e565b6170118161566e565b0361707957617020885161b1e0565b6170718961703284604088015161b413565b60808a01519061704c616d1488516001600160a01b031690565b6170568c5161b2a3565b9161706b61213f8a516001600160a01b031690565b9361b462565b959091616d34565b9793600287516170888161566e565b6170918161566e565b03617112579787986170a3895161b1e0565b6060850151916170b28761b214565b61710c61710260408b0192808452898b9f886080820151936170fc61213f6170ee6170e7616d1488516001600160a01b031690565b955161b2a3565b95516001600160a01b031690565b9461b2e8565b9092519099615818565b52616d34565b50600486516171208161566e565b6171298161566e565b036171ea57617138875161b1ab565b5f61715061213f61213f86516001600160a01b031690565b60608501519060808a0151918360a08801519861719d6040519a8b96879586947fe4c436630000000000000000000000000000000000000000000000000000000086523360048701616c11565b03925af19384156107cb575f905f955f915f916171bf575b5090959199616d34565b925050506171e09194503d805f833e6171d8818361088f565b810190616bb0565b919592915f6171b5565b7f6c02b395000000000000000000000000000000000000000000000000000000005f5260045ffd5b9093925f94617225846080850151615818565b51818111617235575b5050505050565b6172629596509161724a9161725b930361b824565b9260a0616d9a8260c0860151615818565b519161b846565b905f8080808061722e565b7fb4120f14000000000000000000000000000000000000000000000000000000005f5260045ffd5b906fffffffffffffffffffffffffffffffff8083119081156172ef575b506172c75760801b90810180911161465d5790565b7f89560ca1000000000000000000000000000000000000000000000000000000005f5260045ffd5b905081115f6172b2565b6001600160a01b0390929192165f52602060056020526040805f205f5b60608601518051821015617353579061734361733482600194615818565b51611adb8360808b0151615818565b815f52838652845f205501617316565b50505050509050565b916173656179f6565b6001600160a01b0382165f526005602052604090815f20915f602052805f2054916004602052815f206003602052825f209485549488526173a9602089019661b8d6565b86526173b48561b8f1565b938089019485526173c4866157e7565b9260608a019384526173d5876157e7565b60808b01526173e5878b5161c515565b60c08b01526173f3876157e7565b60a08b019081528a5191600199600184811c1693846175aa575b5083617598575b5f5b8d8b821061747557505050505050505050505050508061746561744d61746c936001600160a01b03165f52600560205260405f2090565b916001600160a01b03165f52600660205260405f2090565b908361b97e565b906106eb617a4b565b908a8a8e938a6174c0856174ac8161749e6174998d61682b6129bf8f869051615818565b61b93f565b94905f5260205260405f2090565b549551836174ba8383615818565b52615818565b506174ca8161bb7d565b6174d5868b51615818565b526174f4836fffffffffffffffffffffffffffffffff8616878561b7d2565b891561758f57856175078c830151151590565b9182617571575b505061751f575b5050505b01617416565b836175458d8261753a81617533875161c571565b9351615818565b519660801c85617212565b9384617553575b5050617515565b61756694617560916157a4565b9161b7d2565b5f8f8b90838361754c565b9091505161757e81611015565b61758781611015565b14855f61750e565b50505050617519565b8c5190935060031c6001161592617414565b6175b591945061c571565b1515925f61740d565b6175c6615637565b906175cf6179f6565b6001600160a01b0381165f5260056020526040805f205f602052815f2054906004602052825f20906003602052835f20938454938752617612602088019561b8d6565b855261761d8461b8f1565b9181880192835261762d856157e7565b916060890192835261763e866157e7565b9460809560808b0152617652878b5161c515565b60c08b0152617660876157e7565b60a08b019081528a5191600199600184811c1693846177d6575b50836177c4575b5f5b8d8b82106176c257505050505050505050505050508061746561744d6176ba936001600160a01b03165f52600560205260405f2090565b610b23617a4b565b908a8d92828c8c8c6176f6846176e88161749e6174998f8f6129bf8561682b9251615818565b549451836174ba8383615818565b506177008161bb7d565b61770b858d51615818565b526177296fffffffffffffffffffffffffffffffff8416858761b742565b878d8d156177b75782015115159182617799575b5050617750575b50505050505b01617683565b826177739261776a82617763885161c571565b9451615818565b51961c85617212565b9283617783575b8e93508c617744565b61779093616e44916157a4565b5f8f828261777a565b909150516177a681611015565b6177af81611015565b14875f61773d565b505050505050505061774a565b8c5190935060031c6001161592617681565b6177e191945061c571565b1515925f61767a565b6177f2615637565b906177fb6179f6565b6001600160a01b0381165f5260056020526040805f205f602052815f2054906004602052825f20906003602052835f2093845493875261783e602088019561b8d6565b85526178498461b8f1565b91818801928352617859856157e7565b916060890192835261786a866157e7565b9460809560808b015261787e878b5161c515565b60c08b015261788c876157e7565b60a08b019081528a5191600199600184811c1693846179e2575b50836179d0575b5f5b8d8b82106178e657505050505050505050505050508061746561744d6176ba936001600160a01b03165f52600560205260405f2090565b908a8d92828c8c8c61790c846176e88161749e6174998f8f6129bf8561682b9251615818565b506179168161bb7d565b617921858d51615818565b5261793f6fffffffffffffffffffffffffffffffff8416858761b78f565b878d8d156179c357820151151591826179a5575b5050617966575b50505050505b016178af565b826179799261776a82617763885161c571565b9283617989575b8e93508c61795a565b61799c93617996916157a4565b9161b78f565b5f8f8282617980565b909150516179b281611015565b6179bb81611015565b14875f617953565b5050505050505050617960565b8c5190935060031c60011615926178ad565b6179ed91945061c571565b1515925f6178a6565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c617a23576001905d565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d565b7f00000000000000000000000000000000000000000000000000000000000000005c15617a9957565b7fc09ba736000000000000000000000000000000000000000000000000000000005f5260045ffd5b90617acb9061ba85565b907f8000000000000000000000000000000000000000000000000000000000000000821461465d576106eb915f039061adb5565b92919091617b0e82848661bada565b5f198103617b1d575050505050565b808211617ca15703906001600160a01b0392838116938415617c6c57808316958615617c375784617b7d85617b6786617b67866001600160a01b03165f52601060205260405f2090565b906001600160a01b03165f5260205260405f2090565b551692833b156106dc576040517f5687f2b80000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152919092166024820152604481018290527fa0175360a15bca328baf7ea85c7b784d58b222a50d0ce760b10dba336d226a6191617c17915f8180606481015b038183895af1617c24575b506040519081529081906020820190565b0390a45f8080808061722e565b80611c88617c319261085f565b5f617c06565b7f94280d62000000000000000000000000000000000000000000000000000000005f526001600160a01b03841660045260245ffd5b7fe602df05000000000000000000000000000000000000000000000000000000005f526001600160a01b03821660045260245ffd5b6001600160a01b03837ffb8f41b2000000000000000000000000000000000000000000000000000000005f521660045260245260445260645ffd5b929091926001600160a01b0390818416918215617e7357808616918215617e3e57617d1c86617b67836001600160a01b03165f52600f60205260405f2090565b54808611617e0157859003617d4687617b67846001600160a01b03165f52600f60205260405f2090565b55617d6687617b67836001600160a01b03165f52600f60205260405f2090565b8581540190551691827fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f60405180617da388829190602083019252565b0390a4803b156106dc576040517f23de66510000000000000000000000000000000000000000000000000000000081526001600160a01b03938416600482015293909216602484015260448301525f90829081838160648101615619565b7fe450d38c000000000000000000000000000000000000000000000000000000005f526001600160a01b038716600452602452604485905260645ffd5b7fec442f05000000000000000000000000000000000000000000000000000000005f526001600160a01b03871660045260245ffd5b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f526001600160a01b03851660045260245ffd5b919091617eb36157b1565b50805192617ec084611015565b6080604082015193015160c0602083519301519301519360405195617ee487610873565b617eed81611015565b865260208601526040850152606084015260808301523360a083015260c082015290565b90916001600160a01b03808416928315617e7357617f4485617b67836001600160a01b03165f52600f60205260405f2090565b5480841161803f57839003617f6e86617b67846001600160a01b03165f52600f60205260405f2090565b55617f9483617f8e836001600160a01b03165f52601160205260405f2090565b546157a4565b617f9d8161bb26565b617fb8826001600160a01b03165f52601160205260405f2090565b551690813b156106dc576040517f23de66510000000000000000000000000000000000000000000000000000000081526001600160a01b0390941660048501525f6024850181905260448501829052937fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f9161803a9186818060648101617bfb565b0390a4565b7fe450d38c000000000000000000000000000000000000000000000000000000005f526001600160a01b038616600452602452604483905260645ffd5b6001600160a01b0316805f525f602052600160405f2054811c161561809e5750565b7f4bdace13000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6106eb906107f06169d7565b036180dc57565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b919082519161811782518251908561bb5e565b618120836157e7565b935f5b84811061813257505050505090565b8061815b61814260019385615818565b51616b046181508489615818565b51616ab88589615818565b6181658289615818565b5201618123565b95929361819d6181c195610b239997936181b3956001600160a01b038092168b521660208a0152604089019061685b565b606087015260e0608087015260e0860190611085565b9084820360a0860152611085565b9160c0818403910152611177565b5f6001600160a01b0360209596936182476181f187516001600160a01b031690565b9460808801519761820189616851565b60a0608060408301519c0151910151916040519b8c9a8b998a977fba5f9f400000000000000000000000000000000000000000000000000000000089526004890161816c565b0393165af19081156107cb575f9161828a575b501561826257565b7f2aaf8866000000000000000000000000000000000000000000000000000000005f5260045ffd5b6182a3915060203d6020116107c4576107ba818361088f565b5f61825a565b60208082015151925f5b8481106182c1575050505050565b60019061833860406fffffffffffffffffffffffffffffffff6182ea614e4a85848b0151615818565b9160a08901926182fb868551615818565b52845f528688525f20541690816183168560608b0151615818565b52618331846183298160c08c0151615818565b519251615818565b519161c6c4565b618346826080880151615818565b52016182b3565b60208082015151925f5b848110618365575050505050565b6001906183d460406fffffffffffffffffffffffffffffffff61838e614e4a85848b0151615818565b9160a089019261839f868551615818565b52845f528688525f20541690816183ba8560608b0151615818565b526183cd846183298160c08c0151615818565b519161c6db565b6183e2826080880151615818565b5201618357565b6080818303126106dc5780519260208201519167ffffffffffffffff928381116106dc5784618419918301616b09565b9360408201518481116106dc5781616bfa918401616b09565b9390610b239593616c4e936001600160a01b0361846293168752602087015260a0604087015260a0860190611085565b908482036060860152611085565b926184796179f6565b606091618484615b3f565b9260208601906184988251518087526157e7565b90608084019687516184a981616851565b6184b281616851565b61887057506040840151906184c787516157e7565b956184eb8360808c01516184e5616d148a516001600160a01b031690565b9061bf37565b9261855c7f00000000000000000000000000000000000000000000000000000000000000005c61852289516001600160a01b031690565b907f0000000000000000000000000000000000000000000000000000000000000000905f5260205260405f20905f5260205260405f205c90565b6187f3575b60408701518082116187c2575061857a819a999a6197b4565b60208a01985f5b8b518110156186a1578c6185958288615818565b5161859f816197b4565b6185a9838a615818565b5161868f578161725b8460a0616d9a8260c06185c6980151615818565b806185d1838a615818565b525b6185e16129bf838b51615818565b60608b016185f0848251615818565b51831061864357508e83616e448f8f8f966186379161861f86616e1f818b60019e9d616dfc8861863d9f617ac1565b5261862e856060880151615818565b51925190616c6a565b906157a4565b01618581565b91618652846124209451615818565b517f2f785e46000000000000000000000000000000000000000000000000000000005f526001600160a01b03909216600452602452604452606490565b505061869b8188615818565b516185d3565b509399509594509592986186c2919750616ecd85516001600160a01b031690565b7ffbe5b0d79fb94f1e81c0a92bf86ae9d3a19e9d1bf6202c0d3e75120f65d5d8a56186f484516001600160a01b031690565b9261871686602087019561870f87516001600160a01b031690565b3391617aff565b61871e61bf88565b618797575b6187498661873887516001600160a01b031690565b86516001600160a01b031690617f11565b61876f616d14618763616f3f88516001600160a01b031690565b9451966129bf88616851565b92616f816001600160a01b039261878588616851565b8c846040519586951698169684616c77565b6187bd866187ac87516001600160a01b031690565b86516001600160a01b03169061bf9d565b618723565b7f31d38e0b000000000000000000000000000000000000000000000000000000005f5260049190915260245260445ffd5b9894916188068b97949995929b5161b2a3565b9a5f5b865181101561886057808b6188598f936188536188428f8390618838600199618832848a615818565b5161b824565b6174ba8383615818565b5161884d8386615818565b516157a4565b92615818565b5201618809565b5091949893969a50919498618561565b94906001885161887f81616851565b61888881616851565b036188f757618897895161b1e0565b60408501519186928a6188f16188e78b8a60406188b7606083015161b214565b920194828652866080820151936188e161213f6170ee6170e7616d1488516001600160a01b031690565b9461be8a565b909251909a615818565b52618561565b6002889692965161890781616851565b61891081616851565b036189a35761891f895161b1e0565b61899c826060870190618943618935835161b214565b60408c019381855251615818565b5161894f835188615818565b528b618962608082015193518093615818565b5161898161897a616d148c516001600160a01b031690565b925161b2a3565b9261899661213f8c516001600160a01b031690565b9461bc82565b9690618561565b5093600387516189b281616851565b6189bb81616851565b03618a7c576189ca885161bc4d565b5f6189e261213f61213f87516001600160a01b031690565b9560408601519660808b0151918360a089015199618a306040519b8c96879586947fab68e28c0000000000000000000000000000000000000000000000000000000086523360048701618432565b03925af19485156107cb575f915f965f925f91618a51575b50919692618561565b9250509550618a7291503d805f833e618a6a818361088f565b8101906183e9565b919690915f618a48565b7f137a9a39000000000000000000000000000000000000000000000000000000005f5260045ffd5b9190916040818403126106dc578051618abc81610bb3565b92602082015167ffffffffffffffff81116106dc57610b239201616b09565b969394610b23989692618b4496618b15618b3696618b2895610100948d6001600160a01b0380931690521660208d015260408c019061685b565b60608a01528060808a0152880190611085565b9086820360a0880152611085565b9084820360c0860152611085565b9160e0818403910152611177565b949395929691908451618b6b906001600160a01b031690565b90608086015192618b7b84616851565b60808601518a60a0890151926040519b8c9788977f2754888d0000000000000000000000000000000000000000000000000000000089526004890197618bc098618adb565b03916001600160a01b031691815a5f948591f19384156107cb575f905f95618cdd575b50158015618cd1575b618ca9576001809360091c1615618c0a5792935090915f835b618c11575b5050505090565b8451811015618ca457618c248186615818565b516060840190618c35838351615818565b5111618c445750830183618c05565b618c678261832981618c616129bf8b9760206124209a0151615818565b95615818565b517ffbd8a724000000000000000000000000000000000000000000000000000000005f526001600160a01b03909216600452602452604452606490565b618c0a565b7f1d3391d8000000000000000000000000000000000000000000000000000000005f5260045ffd5b50835185511415618bec565b9050618cfc9194503d805f833e618cf4818361088f565b810190618aa4565b93905f618be3565b5f9491939293618d126179f6565b618d1a615b3f565b918051618d2681611015565b618d2f81611015565b156190ac575b602091828601618d45815161af52565b83618d9a81850198618d6461213f61213f8c516001600160a01b031690565b906040519c8d809481937f72c9818600000000000000000000000000000000000000000000000000000000835260048301611759565b03925af19889156107cb575f9961908d575b5088618db78161af52565b8351618dc281611015565b618dcb81611015565b61901d575060408201519052618e0360c08801516121ee6121e8618df487860193845190615818565b519260a08c0151905190615818565b9360808301519685979860a0850151808810618fed57505b60408501948a8651618e33906001600160a01b031690565b90618e3d916197c5565b60600195898751618e54906001600160a01b031690565b90618e5e91617ac1565b835183516001600160a01b031687516001600160a01b0316875191618e83938661afe7565b9190818601956040019283528552855160608401928d82855190618ea691615818565b5190618eb191616c6a565b9051618ebc916157a4565b618ec6918561b742565b85019182518b81845190618ed991615818565b5190618ee4916157a4565b618eee918361b742565b83516001600160a01b03165f9081526005602052604090209180518751618f1491615818565b51916080019182518851618f2791615818565b51618f3191617295565b8751618f459085905f5260205260405f2090565b55518351618f5291615818565b5190518351618f6091615818565b51618f6a91617295565b9151618f7d91905f5260205260405f2090565b5551925193516060928301519151604080518b8152602081018b905290810193909352928201929092526001600160a01b039182169382169291909116907f0874b2d545cb271cdbda4e093020c452328b24af12382ed62c4d00f5c26709db90608090a4939291906106eb617a4b565b7fe2ea151b000000000000000000000000000000000000000000000000000000005f52600488905260245260445ffd5b9050819850619044606061904d930151670de0b6b3a764000081810390821002908361c061565b90818652616c6a565b9661907261906160c0890151835190615818565b5161247760a08a0151845190615818565b93608083015196859860a0850151808811618fed5750618e1b565b6190a5919950843d86116115e6576115d8818361088f565b975f618dac565b602085016190c36124d1825160608601519061b824565b9052618d35565b81810392915f13801582851316918412161761465d57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b9061912b6fffffffffffffffffffffffffffffffff831661ba85565b905f9260801c80619149575b5050600291619145916190ca565b0590565b6001600160a01b03935090602460209260405195869384927fb3d7f6b90000000000000000000000000000000000000000000000000000000084526004840152165afa9081156107cb576191aa619145926002945f916191b3575b5061ba85565b92819250619137565b6191cc915060203d6020116115e6576115d8818361088f565b5f6191a4565b81156191dc570490565b6190e2565b90670de0b5cad2bef0008111614bfc5764174876e80090048060181c61922c577ffffffffffffffffffffffffffffffffffffffffffffffffffffffc000003ffff9060121b91161790565b7fe4337c05000000000000000000000000000000000000000000000000000000005f5260045ffd5b816192a76192b292949394619267615928565b95869161929d6020830180519061928d6001600160a01b0392836040870151169061b10b565b865251906060840151169061b10b565b6020840152616a65565b60408501525161b2a3565b6060830152565b602091926193095f6001600160a01b038094604051978896879586937f5211fa770000000000000000000000000000000000000000000000000000000085526040600486015260448501906116eb565b911660248301520393165af19081156107cb575f91619353575b501561932b57565b7fe91e17e7000000000000000000000000000000000000000000000000000000005f5260045ffd5b61936c915060203d6020116107c4576107ba818361088f565b5f619323565b91908260409103126106dc576020825161938b81610bb3565b92015190565b90926193e2604093946001600160a01b039384918651978896879586947fa0e8f5ac0000000000000000000000000000000000000000000000000000000086526060600487015260648601906116eb565b9216602484015260448301520392165afa9081156107cb575f905f92619443575b501561941b57670de0b5cad2bef0008111614bfc5790565b7f53f976d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050619467915060403d60401161946e575b61945f818361088f565b810190619372565b905f619403565b503d619455565b6101a0610b23926020835261948e6020840182516116de565b60208101516001600160a01b0316604084015260408101516001600160a01b0316606084015260608101516080840152608081015160a084015260a081015160c084015260c081015160e084015260e08101516101009081850152810151610120908185015281015161950f61014091828601906001600160a01b03169052565b8101519061952b61016092838601906001600160a01b03169052565b015191610180808201520190611177565b939590919492865161954d81611015565b61955681611015565b6197a55786604085015191845b82519461956f86611015565b604097889788860151619588906001600160a01b031690565b96606087015161959e906001600160a01b031690565b9360800192835181516195b091615818565b51935190602001516195c191615818565b519360208801516195d8906001600160a01b031690565b9760c00151986195e6610921565b9a6195f1908c615f73565b6001600160a01b031660208b01526001600160a01b0316898b01526060890152608088015260a087015260c086015260e085015261010084018890526001600160a01b03166101208401526001600160a01b0316610140830152610160820152815196878080937f18b6eb55000000000000000000000000000000000000000000000000000000008252600482019061968991619475565b03916001600160a01b03165a905f91f19485156107cb575f915f96619781575b5050156197595760091c60011615619753575080516196c781611015565b6196d081611015565b1580619746575b801561971b575b6196e6575090565b60a001517fcc0e4a99000000000000000000000000000000000000000000000000000000005f5260049190915260245260445ffd5b506001815161972981611015565b61973281611015565b1480156196de575060a081015182116196de565b5060a081015182106196d7565b91505090565b7f15a29dec000000000000000000000000000000000000000000000000000000005f5260045ffd5b61979c93965080919250903d1061946e5761945f818361088f565b93905f806196a9565b86604085015191849294619563565b806197bc5750565b6106eb9061af52565b612d906106eb9261ba85565b6001600160a01b0380911690815f52600e6020528060405f20541692168092036197f9575050565b7f36b18d09000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b907f0000000000000000000000000000000000000000000000000000000000000000116198515750565b6001600160a01b03907f18fe7385000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b9190915f838201938412911290801582169115161761465d57565b926198f6936001600160a01b038316926198ba85615796565b604051907fef8b30f700000000000000000000000000000000000000000000000000000000825281806020998a93600483019190602083019252565b0381885afa80156107cb57619912915f91619aee575b50615796565b948096619930836001600160a01b03165f52600b60205260405f2090565b549161993a61bf88565b619ae457509181889388959360801c90868210155f146199b4575050926199a996926199af9261998f8661998a856fffffffffffffffffffffffffffffffff8b6106eb9c9b60801c039316616c6a565b617295565b9889916001600160a01b03165f52600b60205260405f2090565b556197c5565b617ac1565b91929450969294506199df6199da6199cc868561910f565b6199d58c61ba85565b619886565b61c081565b946199eb86858361c1ce565b6040517f6e553f65000000000000000000000000000000000000000000000000000000008152600481018790523060248201529482866044815f895af180156107cb576199a999619a998c619a8e8f9761998f956106eb9d8a6199af9c869f8f95908d915f96619a9f575b5050619a8e9291619a8886868985619a83619a939b9c6fffffffffffffffffffffffffffffffff9861c0b6565b61af0d565b16616c6a565b6157a4565b94616c6a565b90617295565b619a9396506fffffffffffffffffffffffffffffffff9286619ad6619a8e97969484619a8895903d106115e6576115d8818361088f565b985050925081939450619a56565b9750909450505050565b619b059150883d8a116115e6576115d8818361088f565b5f61990c565b92619b6292936001600160a01b03831692619b2586616c5c565b6040517fb3d7f6b9000000000000000000000000000000000000000000000000000000009182825281806020998a93600483019190602083019252565b0381895afa80156107cb57619b7e915f91619d51575b50616c5c565b9087968298619b9e856001600160a01b03165f52600b60205260405f2090565b5493619ba861bf88565b619d44575050918893918895938260801c91878310155f14619bfb57505050926199a996926199af9261998f8661998a856fffffffffffffffffffffffffffffffff8b6106eb9c9b60801c039316616c6a565b9295509295509692619c216199da619c13888861ae78565b619c1c8c61ba85565b6190ca565b60405192835260048301819052918381602481885afa80156107cb57619c50915f91619d27575b50858361c1ce565b6040517f94bf804d000000000000000000000000000000000000000000000000000000008152600481018390523060248201529583876044815f895af19586156107cb576199a999619a998c619a8e8f97619a938b849d6106eb9f61998f99856199af9f8f938f915f96619ce8575b50506fffffffffffffffffffffffffffffffff9291858783619a83619a8e999a619a889661c0b6565b619a8e965091619d1b6fffffffffffffffffffffffffffffffff95949284619a8895903d106115e6576115d8818361088f565b96509181939450619cbf565b619d3e9150853d87116115e6576115d8818361088f565b5f619c48565b9950975091955050505050565b619d689150883d8a116115e6576115d8818361088f565b5f619b78565b939091619d7a85611015565b8415801561a0c757619d9060206161ab87615796565b03816001600160a01b0387165afa80156107cb57619db4915f9161a0ae5750615796565b94955b619dd2836001600160a01b03165f52600b60205260405f2090565b5491619ddc61bf88565b61a0a657869288929091608083901c91858310619e4f5750505092619e4982619e2c8661998a6001600160a01b03966fffffffffffffffffffffffffffffffff896106eb9b60801c039316616c6a565b97886199a9856001600160a01b03165f52600b60205260405f2090565b16617ac1565b90929350619e5e919450611015565b15619f5357619e7c6199da619e73858461910f565b6199d58a61ba85565b926001600160a01b03811693619e9381868961c1ce565b6040517f6e553f650000000000000000000000000000000000000000000000000000000081526004810182905230602482015294602090869060449082905f905af180156107cb57619e2c8995619a9987619a8e6001600160a01b038f96888f896106eb9f859e619a888f619e499f619a8e96619a93996fffffffffffffffffffffffffffffffff965f91619f34575b509a8b935b1690619a83828261c0b6565b619f4d915060203d6020116115e6576115d8818361088f565b5f619f23565b9091619f6e6199da619f65838561ae78565b619c1c8961ba85565b6040517fb3d7f6b9000000000000000000000000000000000000000000000000000000008152600481018290526001600160a01b038316936020939290918481602481895afa80156107cb57619fcd915f9161a089575b50868a61c1ce565b6040517f94bf804d00000000000000000000000000000000000000000000000000000000815260048101829052306024820152948490869060449082905f905af19182156107cb576106eb96619a998b619a8e858f966001600160a01b038f896fffffffffffffffffffffffffffffffff879f9a849f8f96619e499f97619a8e96619e2c9f99619a939a619a88955f9261a06c575b5050988992619f28565b61a0829250803d106115e6576115d8818361088f565b5f8061a062565b61a0a09150863d88116115e6576115d8818361088f565b5f619fc5565b509093505050565b619b05915060203d6020116115e6576115d8818361088f565b61a10d602061a0d587616c5c565b604051809381927fb3d7f6b9000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03816001600160a01b0387165afa80156107cb5761a131915f9161a1375750616c5c565b95619db7565b619d68915060203d6020116115e6576115d8818361088f565b909261a1a792936001600160a01b0381169061a16b86616c5c565b604051907f0a28a47700000000000000000000000000000000000000000000000000000000825281806020988993600483019190602083019252565b0381865afa80156107cb5761a1c2915f9161a3415750616c5c565b8695819761a1e1846001600160a01b03165f52600b60205260405f2090565b549261a1eb61bf88565b61a3355750509186939188936fffffffffffffffffffffffffffffffff9081831690878210155f1461a242575050926199af9261998f83886199a99b9761a23a8a6106eb9c9b9860801c616c6a565b921603617295565b929894965094505061a2636199da61a25a848a61910f565b619c1c8b61ba85565b6040517fb460af9400000000000000000000000000000000000000000000000000000000815260048101829052306024820181905260448201529095909282846064815f865af19384156107cb576199a999619a99846199af978f8f6106eb9d819d8d61998f99859d5f9761a2fc575b505091619a8e9161a2ee8783619a8e999a61a2f3989761afa2565b616c6a565b9460801c616c6a565b619a8e9750849261a2f3969561a326619a8e96948461a2ee95903d106115e6576115d8818361088f565b9950509294955081935061a2d3565b98509650909450505050565b619d689150873d89116115e6576115d8818361088f565b9261a3af939291926001600160a01b03841661a37384615796565b604051907f4cdad50600000000000000000000000000000000000000000000000000000000825281806020998a93600483019190602083019252565b0381855afa80156107cb5761a3ca915f91619aee5750615796565b94849661a3e8826001600160a01b03165f52600b60205260405f2090565b549561a3f261bf88565b61a50a5750869392889290916fffffffffffffffffffffffffffffffff9088821687811061a43d57505091839161998f89886199af9661a23a6106eb9b9a996199a99e60801c616c6a565b929650929493505061a4556199da6199cc878a61ae78565b6040517fba08765200000000000000000000000000000000000000000000000000000000815260048101829052306024820181905260448201529590949083876064815f865af19283156107cb576199a999619a9988619a8e8f8f9b8c619a8e6106eb9f9b61998f998f946199af9f879f968f919761a2f3985f9661a4e3575b505061a2ee9291859161afa2565b61a2ee94939650908161a50192903d106115e6576115d8818361088f565b9491925f61a4d5565b975050505050565b939061a51d85611015565b841594851561a7b95761a534602061667487615796565b03816001600160a01b0389165afa80156107cb5761a558915f9161a0ae5750615796565b94955b61a576856001600160a01b03165f52600b60205260405f2090565b549161a58061bf88565b61a0a65787938793909290916fffffffffffffffffffffffffffffffff918284169186831061a5f357505050936001600160a01b0361a5ce83866106eb9861a23a866199af9860801c616c6a565b978861a5eb826001600160a01b03165f52600b60205260405f2090565b555b166197c5565b91965092945061a6039150611015565b1561a6f35761a6186199da619e73878561ae78565b6040517fba087652000000000000000000000000000000000000000000000000000000008152600481018290523060248201819052604482015293906020856064815f6001600160a01b038c165af180156107cb5761a6b18995619a9984619a8e8e61a2f38b8f6001600160a01b036106eb9f9c61a2ee8f9d6199af9f94889f859f619a8e975f9161a6d4575b509586925b169061afa2565b978861a6ce826001600160a01b03165f52600b60205260405f2090565b5561a5ed565b61a6ed915060203d6020116115e6576115d8818361088f565b5f61a6a5565b61a7036199da619f65878561910f565b6040517fb460af940000000000000000000000000000000000000000000000000000000081526004810182905230602482018190526044820152906020826064815f6001600160a01b038c165af19182156107cb5761a6b18995619a996001600160a01b03619a8e8e61a2f38b8f8a6106eb9f61a2ee8f936199af9f9e889f958b9f96619a8e975f9161a79a575b509b8c9361a6aa565b61a7b3915060203d6020116115e6576115d8818361088f565b5f61a791565b61a7ff602061a7c787616c5c565b604051809381927f0a28a477000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03816001600160a01b0389165afa80156107cb5761a823915f9161a1375750616c5c565b9561a55b565b90610b239160801c90617295565b916001600160a01b0380831693841561a9505761a86f8361a869836001600160a01b03165f52601160205260405f2090565b54616c6a565b61a88e85617b67846001600160a01b03165f52600f60205260405f2090565b84815401905561a89d8161bb26565b61a8b8826001600160a01b03165f52601160205260405f2090565b5516925f847fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f6040518061a8f187829190602083019252565b0390a4823b156106dc576040517f23de66510000000000000000000000000000000000000000000000000000000081525f600482018190526001600160a01b039093166024820152604481019190915291829081838160648101615619565b7fec442f05000000000000000000000000000000000000000000000000000000005f526001600160a01b03841660045260245ffd5b805c906001820180921161465d575d565b905f5260205260405f20905f52602052600160405f205d565b919082519161a9c282518251908561bb5e565b61a9cb836157e7565b935f5b84811061a9dd57505050505090565b80670de0b6b3a764000061aa0f61a9f660019486615818565b51616abf61aa04858a615818565b51616ab8868a615818565b0461aa1a8289615818565b520161a9ce565b95919361aa52610b2398969461aa63936181c1976001600160a01b038092168b521660208a01526040890190615678565b60e0606088015260e0870190611085565b91608086015284820360a0860152611085565b925f6001600160a01b0360209596939661aaf061aa9a87516001600160a01b031690565b9460808801519761aaaa8961566e565b60a060806060830151930151910151916040519b8c9a8b998a977f45421ec70000000000000000000000000000000000000000000000000000000089526004890161aa21565b0393165af19081156107cb575f9161ab33575b501561ab0b57565b7f0b2eb652000000000000000000000000000000000000000000000000000000005f5260045ffd5b61ab4c915060203d6020116107c4576107ba818361088f565b5f61ab03565b9692610b2398969461aba89361ab8c61ab9a93618b449995610100938d6001600160a01b0380931690521660208d015260408c0190615678565b8060608b0152890190611085565b908782036080890152611085565b9160a086015284820360c0860152611085565b94939195929690845161abd4906001600160a01b031690565b60808601519161abe38361566e565b608086015160a0880151906040968c6040519c8d9788977f976907cc000000000000000000000000000000000000000000000000000000008952600489019761ac2b9861ab52565b03916001600160a01b031691815a5f948591f19485156107cb575f905f9661ad45575b5015801561ad39575b61ad11576001809460091c161561ac7757909192809495505f905b61ac7f575b505050505090565b855181101561ad0c5761ac928187615818565b518285019061aca2838351615818565b511061acb1575084018461ac72565b869061accf8361832981618c616129bf6124209860208c0151615818565b517fcefa3afa000000000000000000000000000000000000000000000000000000005f526001600160a01b03909216600452602452604452606490565b61ac77565b7fe1249165000000000000000000000000000000000000000000000000000000005f5260045ffd5b5084518651141561ac57565b905061ad5c9195503d805f833e618cf4818361088f565b94905f61ac4e565b64174876e800610b2392049061b875565b90670de0b5cad2bef0008111614bfc57610b239164174876e800604292049061b88f565b906fffffffffffffffffffffffffffffffff610b239216617295565b90801561ae74577f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0381165f528260205261adfd60405f205c9283619886565b918261ae3d57507f000000000000000000000000000000000000000000000000000000000000000092835c5f19810190811161465d576106eb945d61b171565b926106eb9361b1715761ae6f7f000000000000000000000000000000000000000000000000000000000000000061a985565b61b171565b5050565b9061ae858260801c61ba85565b906fffffffffffffffffffffffffffffffff5f93168061aead575050600291619145916190ca565b6001600160a01b03935090602460209260405195869384927f0a28a4770000000000000000000000000000000000000000000000000000000084526004840152165afa9081156107cb576191aa619145926002945f916191b3575061ba85565b9291906001600160a01b038085165f52600860205260405f205492830392831161465d5781165f52600860205260405f205492830180931161465d576106eb9361c26a565b7f00000000000000000000000000000000000000000000000000000000000000001161af7a57565b7f1ed4d118000000000000000000000000000000000000000000000000000000005f5260045ffd5b9291906001600160a01b038085165f52600860205260405f205492830180931161465d5781165f52600860205260405f205492830392831161465d576106eb9361c26a565b91949290945f955f958161affc575050505050565b84975061725b61b0158260c061b0219697980151615818565b519160a08a0151615818565b945160018160031c161561b037575b808061722e565b62ffffff91929450602a1c1664174876e8009081810291818304149015171561465d5761b06d670de0b6b3a76400009186616063565b049284841161b0e35780617b6761b0c261b09f61b0da94617b67876001600160a01b03165f52600660205260405f2090565b5461b0bc886fffffffffffffffffffffffffffffffff8316616c6a565b9061a829565b936001600160a01b03165f52600660205260405f2090565b555f808061b030565b7f4c69ac5d000000000000000000000000000000000000000000000000000000005f5260045ffd5b905f5b825181101561b13c576001600160a01b038061b12a8386615818565b5116908316146197535760010161b10e565b6001600160a01b03827fddef98d7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b906001600160a01b03165f5260205260405f205d565b670de0b6b3a764000080820402810361b19d5790565b6001810180911161465d5790565b60051c6001161561b1b857565b7f4876c0bc000000000000000000000000000000000000000000000000000000005f5260045ffd5b60041c60011661b1ec57565b7fd4f5779c000000000000000000000000000000000000000000000000000000005f5260045ffd5b80519081905f5b82811061b25657505081101561b22e5790565b7f7e46bddc000000000000000000000000000000000000000000000000000000005f5260045ffd5b61b2608183615818565b5161b26e575b60010161b21b565b92820361b27b578261b266565b7f6b8c3be5000000000000000000000000000000000000000000000000000000005f5260045ffd5b62ffffff9060121c1664174876e8009081810291818304149015171561465d5790565b61b2de60409295949395606083526060830190611085565b9460208201520152565b909491602061b34e61b302866001600160a01b0394616c6a565b9461b30d878761c008565b61b317818361c471565b6040519485809481937f16a0b3e00000000000000000000000000000000000000000000000000000000083528d8a6004850161b2c6565b0392165afa80156107cb5761b3d995619a8e61b3ad8561b3c39461b3cc998c998a61b3d3995f9461b3dc575b509061b3a161b39a61b39361b3a8946186379798615818565b51876157a4565b9c8c615818565b5190616063565b6191d2565b91670de0b6b3a76400008181039110028261c008565b938492516157e7565b9586615818565b52616c6a565b91565b618637945061b39a61b39361b3a8949361b40761b3a19460203d6020116115e6576115d8818361088f565b9750939450505061b37a565b90602080835161b4248451826180d5565b60051b930191015e565b9190602061b4455f92604086526040860190611085565b930152565b9190602061b445600192604086526040860190611085565b92919093835161b471816157e7565b9161b47b826157e7565b965f5b83811061b6775750506001600160a01b03811691604051957f984de9e8000000000000000000000000000000000000000000000000000000009283885260209889898061b4ce846004830161b42e565b0381895afa9889156107cb575f9961b658575b506040518581528a818061b4f88b6004830161b44a565b03818a5afa9081156107cb578a61b3a861b5339361b52c938f5f9261b63b575b9b999d9c9a98979695949392919050616046565b809361c471565b5f5b89811061b5a2575050505061b559955060405180968194829383526004830161b44a565b03915afa9182156107cb578361b3a89361b57f9261b3d9975f9261b585575b50506157a4565b90616063565b61b59b9250803d106115e6576115d8818361088f565b5f8061b578565b869899959750838d83949596988361b5c661b5bf82600198615818565b518961c45e565b8061b5d18385615818565b511161b5ed575b505050505001908a969498979593929161b535565b818361b60e61b6269761b6189461b6078561b61f99615818565b510361b824565b6174ba8388615818565b5192615818565b51906157a4565b61b630828b615818565b52848d8a835f61b5d8565b61b6519250803d106115e6576115d8818361088f565b5f8f61b518565b61b6709199508a3d8c116115e6576115d8818361088f565b975f61b4e1565b8061b6a161b69c61b68a6001948c615818565b5161b6958487615818565b5190616c6a565b615796565b61b6ab8288615818565b520161b47e565b60071c6001161561b6bf57565b7fefe0265d000000000000000000000000000000000000000000000000000000005f5260045ffd5b929161b6f384516157e7565b935f5b815181101561b728578061b717858561b71160019587615818565b5161c061565b61b7218289615818565b520161b6f6565b50505050565b90610b239261b73c91616063565b9061c008565b91906080670de0b6b3a764000061b7866116e8948061b7658660608a0151615818565b52616abf61b7778660c08a0151615818565b51616ab88760a08b0151615818565b04930151615818565b9190608061b7ca6116e8938061b7a9856060890151615818565b52616b0461b7bb8560c0890151615818565b51616ab88660a08a0151615818565b930151615818565b9261b7ca6116e8936080928161b7ec8660608a0151615818565b5261b7f681611015565b61b81c576002905b61b80c8560c0890151615818565b51906144ad8660a08a0151615818565b60019061b7fe565b9061b82e91616063565b6001670de0b6b3a76400005f19830104019015150290565b9161b85091616063565b90670de0b6b3a76400009081810291818304149015171561465d5781156191dc570490565b908060181c61922c57602a1b9062ffffff602a1b19161790565b906101008084101561726d5783810390811161465d578060ff105f1461b8d1575060ff5b60181161726d578060181c61922c5762ffffff90831b921b19161790565b61b8b3565b906106eb61b8ea9260405193848092615859565b038361088f565b9061b8fb82610942565b61b908604051918261088f565b828152601f1961b9188294610942565b01905f5b82811061b92857505050565b60209061b933615b3f565b8282850101520161b91c565b9060405161b94c81610822565b604060ff82945481811661b95f81611015565b84526001600160a01b038160081c16602085015260a81c161515910152565b60608101805151935f5b85811061b99757505050505050565b8061b9ab6129bf6001936020880151615818565b61b9d661b9c08389905f5260205260405f2090565b546fffffffffffffffffffffffffffffffff1690565b61b9e1838751615818565b51811161ba21575b505061ba0861b9f9828651615818565b51611adb836080890151615818565b61ba1a8288905f5260205260405f2090565b550161b988565b61ba6561ba7d9161ba5f61ba5661ba49868a906001600160a01b03165f5260205260405f2090565b549261b61f888c51615818565b8260801c616c6a565b9061ad99565b9185906001600160a01b03165f5260205260405f2090565b555f8061b9e9565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161baaf5790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6001600160a01b0392918381168484160361baf857505050505f1990565b61bb2293617b6792165f52601060205260405f20906001600160a01b03165f5260205260405f2090565b5490565b620f4240811061bb335750565b7fd38d20fc000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8114801592919061bb72575b50506180dc57565b141590505f8061bb6a565b805161bb8881611015565b61bb9181611015565b8061bba4575050670de0b6b3a764000090565b8061bbb0600192611015565b0361bc2557602061bbcf61213f8260049401516001600160a01b031690565b604051928380927f679aefce0000000000000000000000000000000000000000000000000000000082525afa9081156107cb575f9161bc0c575090565b610b23915060203d6020116115e6576115d8818361088f565b7fdf450632000000000000000000000000000000000000000000000000000000005f5260045ffd5b60061c6001161561bc5a57565b7fcf0a95c0000000000000000000000000000000000000000000000000000000005f5260045ffd5b909492919281519461bc93866157e7565b945f5b87811061be63575061bcac9061884d8988615818565b61bcb68887615818565b52604051947f984de9e800000000000000000000000000000000000000000000000000000000928387526020878061bcf1886004830161b42e565b03816001600160a01b0385165afa9687156107cb575f9761be42575b50604051948486526020868061bd26866004830161b42e565b03816001600160a01b0386165afa9384156107cb57619a8e61b3ad8c61b61f61bd8161bd889661bd7a8f61bd6a61bdbe9f9160209e88935f9161be23575b5061c008565b9261bd75848d61c594565b615818565b519061b824565b9188615818565b9361bd978561884d8c86615818565b61bda18b85615818565b526001600160a01b0360405180978195829483526004830161b44a565b0392165afa9081156107cb5761b3d99561bdf4935f9361bdfa575b5061bde661bded916157e7565b9788615818565b52836157a4565b9061c061565b61bded91935061be1b61bde69160203d6020116115e6576115d8818361088f565b93915061bdd9565b602061be3c92503d6020116115e6576115d8818361088f565b5f61bd64565b61be5c91975060203d6020116115e6576115d8818361088f565b955f61bd0d565b8061be7961be7360019388615818565b51615796565b61be83828a615818565b520161bc96565b90949183039183831161465d57602061beb96001600160a01b039261beaf878761c008565b61b317818361c594565b0392165afa80156107cb5761b3d995616b048861b3c39361b3cc9861bf04965f9261bf0a575b5061bef28261884d619a8e94958b615818565b9861befd8d8a615818565b519061c061565b526157a4565b619a8e925061884d9361bf2e61bef29260203d6020116115e6576115d8818361088f565b9350935061bedf565b90929161bf4482516157e7565b915f5b815181101561bf815761bf648361bf5e8385615818565b51616063565b9086156191dc57866001920461bf7a8287615818565b520161bf47565b5050509150565b32158061bf925790565b506001600754161590565b903261bfe0576001600160a01b0361bfd192165f52600f60205260405f20906001600160a01b03165f5260205260405f2090565b805491820180921161465d5755565b7f67f84ab2000000000000000000000000000000000000000000000000000000005f5260045ffd5b90801561c03957670de0b6b3a76400009182810292818404149015171561465d576001905f19830104019015150290565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b821561c0395760019161c07391616063565b915f19830104019015150290565b5f811261c08b5790565b7fa8ce4432000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6040517f095ea7b300000000000000000000000000000000000000000000000000000000602082018181526001600160a01b03851660248401525f6044840152909391929183606481015b039161c115601f199384810187528661088f565b5f806001600160a01b0386169287519082855af19061c13261c21d565b8261c19c575b508161c191575b501561c14c575050505050565b60405160208101959095526001600160a01b031660248501525f604485015261c187936146339161c181908260648101611218565b8261c3ee565b5f8080808061722e565b90503b15155f61c13f565b8051919250811591821561c1b4575b5050905f61c138565b61c1c792506020809183010191016154e3565b5f8061c1ab565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000602082018181526001600160a01b03851660248401526044830195909552939092836064810161c101565b3d1561c247573d9061c22e82610ab6565b9161c23c604051938461088f565b82523d5f602084013e565b606090565b5f80610b239360208151910182855af161c26461c21d565b9161c638565b6040517f70a0823100000000000000000000000000000000000000000000000000000000808252306004830152602095939490926001600160a01b03929187836024818786165afa9283156107cb575f9361c3cf575b5080831061c38a575061c2e4906001600160a01b03165f52600860205260405f2090565b556040519182523060048301528316908481602481855afa9485156107cb575f9561c36b575b505081841061c330575050615f70906001600160a01b03165f52600860205260405f2090565b7f1149424d000000000000000000000000000000000000000000000000000000005f526001600160a01b03166004526024525060445260645ffd5b61c382929550803d106115e6576115d8818361088f565b925f8061c30a565b905061242092867f1c6a5375000000000000000000000000000000000000000000000000000000005f52169291906001600160a01b0360649416600452602452604452565b61c3e7919350883d8a116115e6576115d8818361088f565b915f61c2c0565b6001600160a01b0361c4029116918261c24c565b805190811515918261c443575b505061c4185750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b61c45692506020809183010191016154e3565b155f8061c40f565b670de0b6b3a764000091616ac491616063565b9060206001600160a01b03926004604051809581937f273c1adf000000000000000000000000000000000000000000000000000000008352165afa9182156107cb575f9261c4f4575b5081811161c4c6575050565b7f3e8960dc000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b61c50e91925060203d6020116115e6576115d8818361088f565b905f61c4ba565b9064ffffffffff61c525826157e7565b92605a1c165f5b82811061c5395750505090565b600580820290828204148215171561465d5782601f911c1690604d821161465d57600191600a0a61c56a8287615818565b520161c52c565b62ffffff9060421c1664174876e8009081810291818304149015171561465d5790565b9060206001600160a01b03926004604051809581937fb677fa56000000000000000000000000000000000000000000000000000000008352165afa9182156107cb575f9261c617575b5081811061c5e9575050565b7fe31c95be000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b61c63191925060203d6020116115e6576115d8818361088f565b905f61c5dd565b9061c675575080511561c64d57805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b8151158061c6bb575b61c686575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561c67e565b91616abf616ac492670de0b6b3a764000094616063565b610b239291616b0491616063565b9291928060011461c7355760021461c728577f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffd5b610b2392616b0491616063565b5090616abf670de0b6b3a764000093616ac49361606356fea26469706673582212202db1f9d522d1a4486107ee5c2e2bda7110cdf105c8780ae3fdbe21fffdfd906664736f6c634300081b00336101203461012e57601f61493038819003918201601f19168301916001600160401b0383118484101761013257808492604094855283398101031261012e578051906001600160a01b038216820361012e576020015163ffffffff9081811680820361012e57306080528360a05242019081421161011a5782821161010b5760c0521660e0526101009081526040516147e991826101478339608051826118b5015260a0518281816105f6015281816107aa0152610f95015260c05182610a7f015260e051828181610324015261191d01525181818161019c01528181610466015281816106dc0152818161090e01528181610b2301528181610d180152818161116f015261129d0152f35b6368755a1160e01b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe604060808152600480361015610013575f80fd5b5f915f358060e01c9081630e0677ab1461119857848263206db1ef1461110c575081632f2770db14610f135750806344f6fec714610e1c57806353a72f7e14610e075780635ea81a3214610c8e5780636634b75314610c46578063673a2a1f1461076857838163675d605014610ac7575080636c57f5a914610aa357806378da80cb14610a625780637a0b2e8d1461081f578063851c1bb3146107ce5780638d928af81461077d5780638eec5d701461076857838163a7a4b7111461066957508063aaabadc5146105a2578063d396a66614610376578063db035ebc1461034c578063e9d56e19146103075763ed05beaf1461010d575f80fd5b3461030357610100600319360112610303576101276113da565b9060243567ffffffffffffffff81116102ff5761014790369085016114fd565b61014f611420565b9360807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c3601126102fb5761018261170b565b9473ffffffffffffffffffffffffffffffffffffffff91827f000000000000000000000000000000000000000000000000000000000000000016966101c561191b565b94883b156102f75761021963ffffffff9161026794878a519b7feeec802f000000000000000000000000000000000000000000000000000000008d5216908b01526101a060248b01526101a48a019061165c565b9560443560448a01521660648801525f608488015260a48701906040908173ffffffffffffffffffffffffffffffffffffffff91828151168552826020820151166020860152015116910152565b166101048401526084358015158091036102f35761012484015260a4358015158091036102f35761014484015260c4358015158091036102f35761016484015260e435908115158092036102f35785948486818094829661018483015203925af19081156102ea57506102d75750f35b6102e090611443565b6102e75780f35b80fd5b513d84823e3d90fd5b5f80fd5b8980fd5b8580fd5b8480fd5b8280fd5b8382346103485781600319360112610348576020905163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5080fd5b83823461034857816003193601126103485760209063ffffffff61036e61191b565b915191168152f35b503461030357610140600319360112610303576103916113da565b9060243567ffffffffffffffff81116102ff576103b190369085016114fd565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc3601126102f35781516103e6816114a0565b73ffffffffffffffffffffffffffffffffffffffff9160443583811681036102f357825260643583811681036102f357602083015260843583811681036102f3578483015260a435918383168093036102f35760807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3c36011261059e57837f0000000000000000000000000000000000000000000000000000000000000000169661048f61191b565b94883b156102f75761052f9363ffffffff926104e39289519a7feeec802f000000000000000000000000000000000000000000000000000000008c5216908a01526101a060248a01526101a489019061165c565b945f60448901521660648701525f608487015260a48601906040908173ffffffffffffffffffffffffffffffffffffffff91828151168552826020820151166020860152015116910152565b61010490818501526101249060c4358015158091036102f3578286015260e4358015158091036102f357610144860152358015158091036102f35761016485015235908115158092036102f35785948486818094829661018483015203925af19081156102ea57506102d75750f35b8780fd5b503461030357826003193601126103035773ffffffffffffffffffffffffffffffffffffffff906020815180947faaabadc500000000000000000000000000000000000000000000000000000000825281857f0000000000000000000000000000000000000000000000000000000000000000165afa92831561065f5760209493610630575b505191168152f35b610651919350843d8611610658575b61064981836114bc565b8101906118ef565b915f610628565b503d61063f565b81513d86823e3d90fd5b80848434610764576080600319360112610764576106856113da565b60243567ffffffffffffffff81116102ff576106a490369085016114fd565b6106ac6113fd565b6106b4611420565b926106bd61170b565b9373ffffffffffffffffffffffffffffffffffffffff809116868601527f0000000000000000000000000000000000000000000000000000000000000000169161070561191b565b9661070e611976565b95843b156102f75789968793610751928a519b8c998a9889977feeec802f0000000000000000000000000000000000000000000000000000000089528801611729565b03925af19081156102ea57506102d75750f35b5050fd5b83346102e75780600319360112156117e95780fd5b8382346103485781600319360112610348576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5090346103035760206003193601126103035735917fffffffff00000000000000000000000000000000000000000000000000000000831683036102e7575061081860209261188a565b9051908152f35b50829034610348576101206003193601126103485761083c6113da565b9060243567ffffffffffffffff8111610a5e5761085c90369086016114fd565b916064359463ffffffff958681168091036102f357608435928315158094036102f35760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c3601126102f3578451976108b5896114a0565b73ffffffffffffffffffffffffffffffffffffffff9160a43583811681036102f3578a5260c43583811681036102f35760208b015260e43583811681036102f357878b0152610104998a35908482168092036102f357847f000000000000000000000000000000000000000000000000000000000000000016958442160191848311610a32578b9c610945611976565b92883b15610a2e578d9a8b978d519e8f9c8d9b8c9a7feeec802f000000000000000000000000000000000000000000000000000000008c5216908a0152602489016101a090526101a489016109999161165c565b9660443560448a0152166064880152608487015260a486016109e9916040908173ffffffffffffffffffffffffffffffffffffffff91828151168552826020820151166020860152015116910152565b840152805115156101248401526020810151151561014484015288810151151561016484015260600151151561018483015203925af19081156102ea57506102d75750f35b8d80fd5b60248c60118a7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b8380fd5b8382346103485781600319360112610348576020905163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b83823461034857816003193601126103485760209060ff6001541690519015158152f35b80848434610764578060031936011261076457610ae26113da565b60243567ffffffffffffffff81116102ff57610b0190369085016114fd565b92610b0a61170b565b9173ffffffffffffffffffffffffffffffffffffffff807f00000000000000000000000000000000000000000000000000000000000000001691610b4c61191b565b90610b55611976565b91843b156102f75760608a9793610bff899563ffffffff610bb38d519e8f9c8d9b8c9a7feeec802f000000000000000000000000000000000000000000000000000000008c5216908a01526101a060248a01526101a489019061165c565b955f60448901521660648701525f608487015260a48601906040908173ffffffffffffffffffffffffffffffffffffffff91828151168552826020820151166020860152015116910152565b5f61010485015280511515610124850152602081015115156101448501528981015115156101648501520151151561018483015203925af19081156102ea57506102d75750f35b8382346103485760206003193601126103485760ff8160209373ffffffffffffffffffffffffffffffffffffffff610c7c6113da565b16815280855220541690519015158152f35b50903461030357816003193601126103035767ffffffffffffffff9080358281116102ff57610cc0903690830161163e565b916024358181116102fb57610cd8903690840161163e565b73ffffffffffffffffffffffffffffffffffffffff93855193612de7908186019486861090861117610ddb575091610d4b859492610d58946119cd8739877f0000000000000000000000000000000000000000000000000000000000000000168452606060208501526060840190611847565b9187818403910152611847565b039084f08015610dcf57917f83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc916020949316918291610d95611998565b82855284865280852060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055519380a28152f35b505051903d90823e3d90fd5b8860416024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b83823461034857600319360112156117e95780fd5b509034610303578160031936011261030357803567ffffffffffffffff8111610a5e5736602382011215610a5e57600b610e7673ffffffffffffffffffffffffffffffffffffffff938360246055953693013591016115da565b94612de795610ece60208098885194610e91838301876114bc565b818652828601916119cd8339828a51958693828501985180918a5e840190828201848152815193849201905e0190838201520380845201826114bc565b5190208451868101903382524687820152602435606082015260608152610ef481611484565b51902085519186830152868201523081520160ff815320915191168152f35b905034610a5e5783600319360112610a5e577fffffffff00000000000000000000000000000000000000000000000000000000610f50911661188a565b73ffffffffffffffffffffffffffffffffffffffff9082517faaabadc500000000000000000000000000000000000000000000000000000000815260209182828781877f0000000000000000000000000000000000000000000000000000000000000000165afa918215611102579083929188926110e0575b50606490865195869384927f9be2a8840000000000000000000000000000000000000000000000000000000084528a840152336024840152306044840152165afa9283156110d7575084926110a0575b50501561107a5750611029611998565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00815416176001557f432acbfd662dbb5d8b378384a67159b47ca9d0f1b79f97cf64cf8585fa362d508180a180f35b907f23dada53000000000000000000000000000000000000000000000000000000008152fd5b90809250813d83116110d0575b6110b781836114bc565b8101031261030357518015158103610303575f80611019565b503d6110ad565b513d86823e3d90fd5b60649192506110fb90843d86116106585761064981836114bc565b9190610fc9565b85513d89823e3d90fd5b80858534610764576060600319360112610764576111286113da565b60243567ffffffffffffffff81116102ff5761114790369085016114fd565b61114f6113fd565b61115761170b565b9273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169161070561191b565b5050346102f3576101606003193601126102f3576111b46113da565b9160243567ffffffffffffffff81116102f3576111d490369083016114fd565b906044359063ffffffff82168092036102f35760607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c3601126102f35783519061121d826114a0565b73ffffffffffffffffffffffffffffffffffffffff9160643583811681036102f357815260843583811681036102f357602082015260a43583811681036102f3578682015260c435928084168094036102f35760807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c3601126102f357807f00000000000000000000000000000000000000000000000000000000000000001695863b156102f3576113569361130b9289519a7feeec802f000000000000000000000000000000000000000000000000000000008c5216908a01526101a060248a01526101a489019061165c565b935f604489015260648801525f608488015260a48701906040908173ffffffffffffffffffffffffffffffffffffffff91828151168552826020820151166020860152015116910152565b61010490818601526101249060e4358015158091036102f3578287015235908115158092036102f3576101449182870152358015158091036102f35761016486015235918215158093036102f357845f818094829661018483015203925af19081156113d157506113c5575080f35b6113cf9150611443565b005b513d5f823e3d90fd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036102f357565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036102f357565b6064359073ffffffffffffffffffffffffffffffffffffffff821682036102f357565b67ffffffffffffffff811161145757604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6080810190811067ffffffffffffffff82111761145757604052565b6060810190811067ffffffffffffffff82111761145757604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761145757604052565b81601f820112156102f357803590602067ffffffffffffffff83116114575760409260405194611532838360051b01876114bc565b818652828087019260071b850101938185116102f3578301915b84831061155c5750505050505090565b6080838303126102f35785519061157282611484565b73ffffffffffffffffffffffffffffffffffffffff843581811681036102f35783528585013560028110156102f357868401528785013590811681036102f35787830152606090818501359283151584036102f357608093879382015281520192019161154c565b92919267ffffffffffffffff8211611457576040519161162260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601846114bc565b8294818452818301116102f3578281602093845f960137010152565b9080601f830112156102f357816020611659933591016115da565b90565b9081518082526020808093019301915f5b82811061167b575050505090565b9091929384519073ffffffffffffffffffffffffffffffffffffffff90818351168152848301519060028210156116de5760019386936080938584015260409081830151169083015260608091015115159082015201950191019291909261166d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60405190611718826114a0565b5f6040838281528260208201520152565b946117b56101809563ffffffff61176a6060979b9a966101a073ffffffffffffffffffffffffffffffffffffffff8098168c528060208d01528b019061165c565b9a5f60408b015216868901525f608089015260a08801906040908173ffffffffffffffffffffffffffffffffffffffff91828151168552826020820151166020860152015116910152565b1661010085015280511515610120850152602081015115156101408501526040810151151561016085015201511515910152565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4e6f7420696d706c656d656e74656400000000000000000000000000000000006044820152fd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526118e9816114a0565b51902090565b908160209103126102f3575173ffffffffffffffffffffffffffffffffffffffff811681036102f35790565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff811642101561194d5790565b505f90565b6040519061195f82611484565b5f6060838281528260208201528260408201520152565b61197e611952565b50611987611952565b600160208201526001604082015290565b60ff600154166119a457565b7f75884cda000000000000000000000000000000000000000000000000000000005f5260045ffdfe61020060408181523461048a57612de7803803809161001e828661048e565b843982019060608383031261048a578251906001600160a01b038216820361048a5760208481015190946001600160401b039182811161048a57856100649183016104b1565b948382015183811161048a5761007a92016104b1565b93825195838701878110848211176103a1578452600180885281880193603160f81b85526100a784610506565b976101209889526100b78a610689565b956101409687528551858701209a8b60e052519020996101009a808c524660a052885190868201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f84528a83015260608201524660808201523060a082015260a0815260c08101818110858211176103a15789525190206080523060c052610160948886528051918383116103a1576003928354928684811c94168015610480575b8885101461046c578190601f9485811161041e575b5088908583116001146103c0575f926103b5575b50505f1982861b1c191690861b1783555b80519384116103a15760049586548681811c91168015610397575b8282101461038457838111610341575b50809285116001146102dc57509383949184925f956102d1575b50501b925f19911b1c19161790555b610180913383526101a0938585526101e0958652670de0b6b3a7640000600555519561262797886107c08939608051886121c7015260a05188612293015260c05188612198015260e051886122160152518761223c015251866110560152518561108001525184818161031101528181610554015281816107e201528181610d9301528181610f84015281816114b40152818161157d015281816117430152818161190c0152818161199c015261212d01525183610ff00152518250506101c051825050518181816106930152818161072a0152818161092a01528181610c6701526111920152f35b015193505f806101d9565b92919084601f198116885f52855f20955f905b89838310610327575050501061030e575b50505050811b0190556101e8565b01519060f8845f19921b161c191690555f808080610300565b8587015189559097019694850194889350908101906102ef565b875f52815f208480880160051c82019284891061037b575b0160051c019087905b8281106103705750506101bf565b5f8155018790610362565b92508192610359565b602288634e487b7160e01b5f525260245ffd5b90607f16906101af565b634e487b7160e01b5f52604160045260245ffd5b015190505f80610183565b90889350601f19831691875f528a5f20925f5b8c82821061040857505084116103f1575b505050811b018355610194565b01515f1983881b60f8161c191690555f80806103e4565b8385015186558c979095019493840193016103d3565b909150855f52885f208580850160051c8201928b8610610463575b918a91869594930160051c01915b82811061045557505061016f565b5f81558594508a9101610447565b92508192610439565b634e487b7160e01b5f52602260045260245ffd5b93607f169361015a565b5f80fd5b601f909101601f19168101906001600160401b038211908210176103a157604052565b81601f8201121561048a578051906001600160401b0382116103a157604051926104e5601f8401601f19166020018561048e565b8284526020838301011161048a57815f9260208093018386015e8301015290565b80516020908181101561057c5750601f82511161053e578082519201519080831061053057501790565b825f19910360031b1b161790565b60448260405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b906001600160401b0382116103a1575f54926001938481811c9116801561067f575b8382101461046c57601f811161064c575b5081601f84116001146105ea57509282939183925f946105df575b50501b915f199060031b1c1916175f5560ff90565b015192505f806105ca565b919083601f1981165f8052845f20945f905b88838310610632575050501061061a575b505050811b015f5560ff90565b01515f1960f88460031b161c191690555f808061060d565b8587015188559096019594850194879350908101906105fc565b5f805284601f845f20920160051c820191601f860160051c015b8281106106745750506105af565b5f8155018590610666565b90607f169061059e565b8051602090818110156106b35750601f82511161053e578082519201519080831061053057501790565b9192916001600160401b0381116103a15760019182548381811c911680156107b5575b8282101461046c57601f8111610782575b5080601f83116001146107225750819293945f92610717575b50505f19600383901b1c191690821b17905560ff90565b015190505f80610700565b90601f19831695845f52825f20925f905b88821061076b5750508385969710610753575b505050811b01905560ff90565b01515f1960f88460031b161c191690555f8080610746565b808785968294968601518155019501930190610733565b835f5283601f835f20920160051c820191601f850160051c015b8281106107aa5750506106e7565b5f815501849061079c565b90607f16906106d656fe6080604090808252600480361015610015575f80fd5b5f9160e05f35811c91826301ffc9a714611bd25750816306fdde0314611ae2578163095ea7b314611a6457816316a0b3e0146119d557816318160ddd1461194257816323b872dd1461189a57816323de665114611868578163273c1adf1461183d57816330adf81f14611803578163313ce567146117e8578163360c340f146116ea5781633644e515146116ce5781634cfe8d1a146116b65781635687f2b814611657578163627cdcb91461162e578163641579a614611616578163654cf15d146115f4578163679aefce1461151a57816370a082311461144657816372c981861461137c5781637ecebe001461133857816381fa807c1461113557816384b0196e1461103e578163851c1bb314610fa85781638d928af814610f5857816395d89b4114610e52578163984de9e814610e04578163a9059cbb14610cfb578163aa6ca80814610c0e578163ab68e28c14610b66578163abb1dc44146108cf578163b0e2e403146107b7578163b156aa0a146106d0578163b677fa56146106cb578163ce20ece7146106cb578163d335b0cf14610638578163d505accf1461038e57508063dd62ed3e146102955763e4c43663146101d0575f80fd5b3461028d5760a060031936011261028d576101e9611c7c565b5067ffffffffffffffff6024358181116102915761020a9036908401611d4b565b9260643582811161028d576102229036908501611d4b565b5060843591821161028a5750926102786102456102869361026396369101611e69565b916102508551612004565b8151968796608088526080880190611ded565b91604435602088015286830390870152611ded565b908382036060850152611c39565b0390f35b80fd5b5080fd5b8380fd5b50913461028d578060031936011261028d5760206102b1611c7c565b60646102bb611c9f565b9573ffffffffffffffffffffffffffffffffffffffff8080988751998a9687957f927da10500000000000000000000000000000000000000000000000000000000875230908701521660248501521660448301527f0000000000000000000000000000000000000000000000000000000000000000165afa918215610383579161034a575b6020925051908152f35b90506020823d60201161037b575b8161036560209383611cf2565b81010312610377576020915190610340565b5f80fd5b3d9150610358565b9051903d90823e3d90fd5b91939050346106345781600319360112610634576103aa611c7c565b916103b3611c9f565b90604435936064359160843560ff8116810361063057834211610605576104018373ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2080549060018201905590565b91865160208101917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9835273ffffffffffffffffffffffffffffffffffffffff9687871695868b850152888a1660608501528b608085015260a084015260c083015260c08252810181811067ffffffffffffffff8211176105f257926104de926104d59288958b52519020610494612181565b908a51917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015260c43591604260a43592206124ac565b90929192612546565b168181036105c5575050858495969761055060209651988996879586947fe1f21c67000000000000000000000000000000000000000000000000000000008652850160409194939294606082019573ffffffffffffffffffffffffffffffffffffffff80921683521660208201520152565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19081156105bc5750610586575080f35b6020813d6020116105b4575b8161059f60209383611cf2565b8101031261028d576105b090611f4d565b5080f35b3d9150610592565b513d84823e3d90fd5b7f4b800e460000000000000000000000000000000000000000000000000000000088528852602452604486fd5b60418c634e487b7160e01b5f525260245ffd5b602488858b7f6279130200000000000000000000000000000000000000000000000000000000835252fd5b8780fd5b8280fd5b5050913461028d578160031936011261028d578051927fb45090f9000000000000000000000000000000000000000000000000000000008452309084015260208360248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610383579161034a576020925051908152f35b611efb565b5050913461028d578160031936011261028d578051927f535cfd8a0000000000000000000000000000000000000000000000000000000084523090840152818360248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa91821561038357809261076f575b81516020808252819061028690820186611ded565b9091503d8082853e6107818185611cf2565b83019260208185031261028d5780519167ffffffffffffffff831161028a5750926107b0916102869401611fa3565b905f61075a565b505082346103775760206003193601126103775773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691815192813560208501526020845261081a84611cc2565b803b15610377576108895f9491859285519687809481937fc80882470000000000000000000000000000000000000000000000000000000083527f546573744576656e740000000000000000000000000000000000000000000000898401528960248401526044830190611c39565b03925af180156108c55761089b578380f35b9091925067ffffffffffffffff83116108b2575052005b604190634e487b7160e01b5f525260245ffd5b82513d5f823e3d90fd5b828534610377575f6003193601126103775780517f67e0e076000000000000000000000000000000000000000000000000000000008152308382015273ffffffffffffffffffffffffffffffffffffffff916024905f8383817f000000000000000000000000000000000000000000000000000000000000000088165afa938415610b5c575f955f945f945f97610a08575b5050509061098095949392918151968796608088526080880190611e20565b6020878203818901528080875193848152019601925f905b8382106109c457898803868b015289806102868b6109b68c8c611ded565b908382036060850152611ded565b91849899506060869798600193959783975180516109e181611edd565b83528685820151168584015201511515898201520198019201899897969594929391610998565b94509450945094503d805f853e610a1f8185611cf2565b8301926080818503126103775780519367ffffffffffffffff948581116103775781610a4c918401612085565b936020808401518781116103775784019083601f8301121561037757815192610a7484611d33565b99610a8188519b8c611cf2565b848b52828b019183606080970286010194878611610377579b9c9b8401925b858410610ae95750505050505050828201518581116103775781610ac5918401611fa3565b94606083015190811161037757610adc9201611fa3565b9194929193868080610961565b86849d9e9d890312610377578951908782018d811183821017610b4a578b528451906002821015610377578f91835286860151918216820361037757828792838b950152610b388d8801611f4d565b8d8201528152019301929c9b9c610aa0565b83604186634e487b7160e01b5f52525ffd5b50513d5f823e3d90fd5b8285346103775760a060031936011261037757610b81611c7c565b5067ffffffffffffffff60443581811161037757610ba29036908501611d4b565b9160643582811161037757610bba9036908601611d4b565b5060843591821161037757610278610bdb610c019561028694369101611e69565b91610be68551612004565b81519687966024358852608060208901526080880190611ded565b9186830390870152611ded565b828534610377575f600319360112610377578051917fca4f280300000000000000000000000000000000000000000000000000000000835230908301525f8260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610cf2575f91610cae575b610286925051918291602083526020830190611e20565b90503d805f843e610cbf8184611cf2565b8201916020818403126103775780519267ffffffffffffffff84116103775761028693610cec9201612085565b90610c97565b513d5f823e3d90fd5b8285346103775780600319360112610377576020610d7992610d1b611c7c565b83517fbeabacc80000000000000000000000000000000000000000000000000000000081523392810192835273ffffffffffffffffffffffffffffffffffffffff909116602083015260243560408301529384918291606090910190565b03815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610b5c57610dca575b6020905160018152f35b6020823d602011610dfc575b81610de360209383611cf2565b8101031261037757610df6602092611f4d565b50610dc0565b3d9150610dd6565b84833461037757816003193601126103775780359067ffffffffffffffff821161037757610e3491369101611d4b565b906002602435101561037757610e4b602092612053565b9051908152f35b848334610377575f60031936011261037757815191825f8354610e7481611f15565b90818452602095600191876001821691825f14610f13575050600114610eb7575b5050506102869291610ea8910385611cf2565b51928284938452830190611c39565b5f90815286935091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b828410610efb5750505082010181610ea8610286610e95565b8054848a018601528895508794909301928101610ee2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168782015293151560051b86019093019350849250610ea891506102869050610e95565b8434610377575f600319360112610377576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b8483346103775760206003193601126103775780357fffffffff00000000000000000000000000000000000000000000000000000000811680910361037757825160208101917f000000000000000000000000000000000000000000000000000000000000000083528482015260248152606081019281841067ffffffffffffffff8511176108b2575082602094525190208152f35b92505034610377575f6003193601126103775761107a7f00000000000000000000000000000000000000000000000000000000000000006122b9565b926110a47f00000000000000000000000000000000000000000000000000000000000000006123ee565b815192602084019084821067ffffffffffffffff8311176108b257509161111591610286949382525f845261110882519788977f0f0000000000000000000000000000000000000000000000000000000000000089528060208a0152880190611c39565b9186830390870152611c39565b904660608501523060808501525f60a085015283820360c0850152611ded565b92505034610377575f6003193601126103775782517ff29486a100000000000000000000000000000000000000000000000000000000815230828201526101a092838260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa93841561132e575f946111d9575b858560608282015191015182519182526020820152f35b909180939450813d8311611327575b6111f28183611cf2565b8101039281841261037757855194610140948587019167ffffffffffffffff918884108385111761131457608013610377576101c08801918211838310176108b25750875261124082611f4d565b815261124e60208301611f4d565b906101609182880152611262888401611f4d565b93610180948589015261127760608501611f4d565b9088015286526080820151602087015260a08201518787015260c082015160608701528382015164ffffffffff8116810361037757608087015261010090818301519063ffffffff8216820361037757611307956112fd9260a08a01526112f2610120986112e68a8801611f4d565b60c08c01528601611f4d565b908901528301611f4d565b9086015201611f4d565b908201525f8080806111c2565b604182634e487b7160e01b5f525260245ffd5b503d6111e8565b85513d5f823e3d90fd5b84346103775760206003193601126103775760209073ffffffffffffffffffffffffffffffffffffffff61136a611c7c565b165f5260028252805f20549051908152f35b84833461037757600319926020843601126103775781359367ffffffffffffffff851161037757843603011261037757828101356002811015610377576113c281611edd565b6113ec5750670de0b6b3a76400006113e36020936024600554910135612103565b04905b51908152f35b916024013560055490670de0b6b3a764000090818102918183041490151715611433578115611420576020935004906113e6565b601284634e487b7160e01b5f525260245ffd5b601184634e487b7160e01b5f525260245ffd5b84833461037757602091826003193601126103775782611464611c7c565b604473ffffffffffffffffffffffffffffffffffffffff9485855196879485937ff7888aec00000000000000000000000000000000000000000000000000000000855230908501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa918215610b5c575f926114eb575b5051908152f35b9091508281813d8311611513575b6115038183611cf2565b81010312610377575190836114e4565b503d6114f9565b828534610377575f60031936011261037757600654806115ea57508051917f4f037ee7000000000000000000000000000000000000000000000000000000008352309083015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa8015610b5c575f906115b7575b602092509051908152f35b506020823d6020116115e2575b816115d160209383611cf2565b8101031261037757602091516115ac565b3d91506115c4565b60209250906113e6565b8434610377575f6003193601126103775760209051670de0b6b3a76400008152f35b82346103775760206003193601126103775735600555005b34610377575f60031936011261037757335f908152600260205260409020805460018101909155005b84346103775760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92561168936611dab565b939194611694612116565b5193845273ffffffffffffffffffffffffffffffffffffffff908116941692a3005b82346103775760206003193601126103775735600655005b8434610377575f60031936011261037757602090610e4b612181565b828534610377575f600319360112610377578051917f7e361bde00000000000000000000000000000000000000000000000000000000835230908301525f8260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610cf2575f9161178a575b610286925051918291602083526020830190611ded565b90503d805f843e61179b8184611cf2565b82019080838303126103775782519267ffffffffffffffff9384811161037757836117c7918301611fa3565b92602082015194851161037757610286946117e29201611fa3565b50611773565b8434610377575f600319360112610377576020905160128152f35b8434610377575f60031936011261037757602090517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b8434610377575f6003193601126103775760209051701d6329f1c35ca4bfabb9f56100000000008152f35b84346103775760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef61168936611dab565b8285346103775760205f60846118af36611dab565b86517f15dacbea000000000000000000000000000000000000000000000000000000008152339881019890985273ffffffffffffffffffffffffffffffffffffffff928316602489015290821660448801526064870152859283917f0000000000000000000000000000000000000000000000000000000000000000165af18015610b5c57610dca576020905160018152f35b828534610377575f600319360112610377578051917fe4dc2aa4000000000000000000000000000000000000000000000000000000008352309083015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610cf2575f9161034a576020925051908152f35b82853461037757606060031936011261037757813567ffffffffffffffff811161037757611a069036908401611d4b565b90611a3d611a20611a1684612053565b9360243590611f5a565b51670de0b6b3a7640000611a3660443586612103565b0490611f82565b918203918211611a51576020925051908152f35b601183634e487b7160e01b5f525260245ffd5b8285346103775780600319360112610377576020610d7992611a84611c7c565b83517fe1f21c670000000000000000000000000000000000000000000000000000000081523392810192835273ffffffffffffffffffffffffffffffffffffffff909116602083015260243560408301529384918291606090910190565b8434610377575f6003193601126103775780516003549091825f611b0584611f15565b808352602094600190866001821691825f14611b92575050600114611b37575b50506102869291610ea8910385611cf2565b9085925060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f925b828410611b7a5750505082010181610ea8611b25565b8054848a018601528895508794909301928101611b64565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168682015292151560051b85019092019250839150610ea89050611b25565b83346103775760206003193601126103775735907fffffffff000000000000000000000000000000000000000000000000000000008216809203610377577f01ffc9a700000000000000000000000000000000000000000000000000000000602092148152f35b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361037757565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361037757565b6040810190811067ffffffffffffffff821117611cde57604052565b634e487b7160e01b5f52604160045260245ffd5b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117611cde57604052565b67ffffffffffffffff8111611cde5760051b60200190565b9080601f83011215610377576020908235611d6581611d33565b93611d736040519586611cf2565b81855260208086019260051b82010192831161037757602001905b828210611d9c575050505090565b81358152908301908301611d8e565b60031960609101126103775773ffffffffffffffffffffffffffffffffffffffff90600435828116810361037757916024359081168103610377579060443590565b9081518082526020808093019301915f5b828110611e0c575050505090565b835185529381019392810192600101611dfe565b9081518082526020808093019301915f5b828110611e3f575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101611e31565b81601f820112156103775780359067ffffffffffffffff8211611cde5760405192611ebc60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601160185611cf2565b8284526020838301011161037757815f926020809301838601378301015290565b60021115611ee757565b634e487b7160e01b5f52602160045260245ffd5b34610377575f6003193601126103775760206040515f8152f35b90600182811c92168015611f43575b6020831014611f2f57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611f24565b5190811515820361037757565b8051821015611f6e5760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b91908201809211611f8f57565b634e487b7160e01b5f52601160045260245ffd5b9080601f8301121561037757815190602091611fbe81611d33565b93611fcc6040519586611cf2565b81855260208086019260051b82010192831161037757602001905b828210611ff5575050505090565b81518152908301908301611fe7565b9061200e82611d33565b61201b6040519182611cf2565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06120498294611d33565b0190602036910137565b5f90815b815183101561207f576120776001916120708585611f5a565b5190611f82565b920191612057565b91505090565b9080601f83011215610377578151906020916120a081611d33565b936120ae6040519586611cf2565b81855260208086019260051b82010192831161037757602001905b8282106120d7575050505090565b815173ffffffffffffffffffffffffffffffffffffffff811681036103775781529083019083016120c9565b81810292918115918404141715611f8f57565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361215557565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016301480612290575b156121e9577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff821117611cde5760405251902090565b507f000000000000000000000000000000000000000000000000000000000000000046146121c0565b60ff811461230d5760ff811690601f82116122e557604051916122db83611cc2565b8252602082015290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040515f815f549161231f83611f15565b808352926020906001908181169081156123ab575060011461234d575b505061234a92500382611cf2565b90565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b828410612393575061234a9450505081016020015f8061233c565b85548785018301529485019486945092810192612378565b90506020935061234a9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f8061233c565b60ff81146124105760ff811690601f82116122e557604051916122db83611cc2565b506040515f8160019160015461242581611f15565b80845293602091600181169081156123ab575060011461244d57505061234a92500382611cf2565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b828410612494575061234a9450505081016020015f8061233c565b85548785018301529485019486945092810192612479565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841161253b579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15612530575f5173ffffffffffffffffffffffffffffffffffffffff81161561252657905f905f90565b505f906001905f90565b6040513d5f823e3d90fd5b5050505f9160039190565b6004811015611ee75780612558575050565b60018103612588577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b600281036125bc57507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6003146125c65750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffdfea264697066735822122082700ffdbaf10ea7f58c363d8be9a2c4c004347fc566abc9496fcfeb9b56b86d64736f6c634300081b0033a2646970667358221220952580ad32db6c485e840c53347ae69ee697f8a373d5ef4f44d2ce17150f5d3a64736f6c634300081b003360808060405234601557610822908161001a8239f35b5f80fdfe604060808152600480361015610013575f80fd5b5f3560e01c8063136deb1c146103b6578063a3aef0b81461039e5763bb4ad7d51461003c575f80fd5b3461036f57602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261036f5780359267ffffffffffffffff9081851161036f573660238601121561036f57848301356024956100a461009f836105fe565b61058d565b938685848152019088829460071b8401019236841161036f579497948901915b8383106102e657505050505f915b8351957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff968781019081116102bb5784101561020c575f5b6101158587516106d3565b8881019081116101e1578110156101d35773ffffffffffffffffffffffffffffffffffffffff80610146838961070d565b51511660018301918284116101a857908291610165600195948b61070d565b51511610610175575b500161010a565b61017f818961070d565b519061019661018e848b61070d565b51918a61070d565b526101a1828961070d565b525f61016e565b8b60118b7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b5095506001909201916100d2565b896011897f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b805182815285518184018190529092838301925f9089908c5b8584106102325787870388f35b909192939495885173ffffffffffffffffffffffffffffffffffffffff808251168352878201516002811015610290578884015284820151168483015260609081015115159082015297850197608001959493600101929190610225565b846021887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b886011887f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b608098959890818436031261036f5786519182018281108482111761037357875261031084610616565b825289840135600281101561036f578a8301528684013573ffffffffffffffffffffffffffffffffffffffff8116810361036f57878301526060908185013592831515840361036f576080938c938201528152019201919794976100c4565b5f80fd5b8b60418b7f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b3461036f576103b46103af36610637565b61074e565b005b50903461036f576103c636610637565b915f5b8351927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9384810190811161056157821015610506575f5b61040c8387516106d3565b8581019081116104da578110156104cf5773ffffffffffffffffffffffffffffffffffffffff8061043d838961070d565b511660018301908184116104a3579082916001949361045c838c61070d565b51161061046c575b505001610401565b6104908261047a838c61070d565b511692610487858c61070d565b5116918a61070d565b5261049b828961070d565b525f80610464565b6011877f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b5092506001016103c9565b6011857f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b84908051918291602090602080850191818652845180935285019301915f5b82811061053457505050500390f35b835173ffffffffffffffffffffffffffffffffffffffff1685528695509381019392810192600101610525565b6011847f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f604051930116820182811067ffffffffffffffff8211176105d157604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116105d15760051b60200190565b359073ffffffffffffffffffffffffffffffffffffffff8216820361036f57565b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261036f576004359167ffffffffffffffff831161036f578060238401121561036f57826004013561069161009f826105fe565b936024602086848152019260051b82010192831161036f57602401905b8282106106bc575050505090565b8380916106c884610616565b8152019101906106ae565b919082039182116106e057565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80518210156107215760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8051600281106107e857156107215773ffffffffffffffffffffffffffffffffffffffff80602083015116600180936001915b61078d575b5050505050565b80518210156107e3578392836107a3848461070d565b511694859116116107bb578480949201919293610781565b7f6e8f1947000000000000000000000000000000000000000000000000000000005f5260045ffd5b610786565b505056fea2646970667358221220dbd88281ea252e338d8b2ad51d761148c738c6b36f19880627291d371b3bc04464736f6c634300081b0033","opcodes":"PUSH2 0x220 PUSH1 0x40 DUP2 DUP2 MSTORE CALLVALUE PUSH2 0x56A JUMPI PUSH1 0x60 DUP3 PUSH3 0x120EA DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x22 DUP3 DUP6 PUSH2 0x6C9 JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x56A JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 DUP3 DUP2 AND SWAP1 DUP2 DUP2 SUB PUSH2 0x56A JUMPI PUSH1 0x20 SWAP5 DUP6 DUP2 ADD MLOAD SWAP1 DUP6 DUP3 AND DUP3 SUB PUSH2 0x56A JUMPI DUP5 ADD MLOAD SWAP5 DUP1 DUP7 AND DUP1 SWAP7 SUB PUSH2 0x56A JUMPI PUSH2 0x8B DUP6 MLOAD PUSH2 0x70 DUP2 PUSH2 0x69A JUMP JUMPDEST PUSH1 0xA DUP2 MSTORE PUSH10 0x1A5CD55B9B1BD8DAD959 PUSH1 0xB2 SHL DUP10 DUP3 ADD MSTORE PUSH2 0x727 JUMP JUMPDEST PUSH1 0xC0 MSTORE PUSH2 0xBE DUP6 MLOAD PUSH2 0x9C DUP2 PUSH2 0x69A JUMP JUMPDEST PUSH1 0x11 DUP2 MSTORE PUSH17 0x1B9BDB96995C9BD1195B1D1850DBDD5B9D PUSH1 0x7A SHL DUP10 DUP3 ADD MSTORE PUSH2 0x727 JUMP JUMPDEST PUSH1 0xE0 MSTORE PUSH2 0xEB DUP6 MLOAD PUSH2 0xCF DUP2 PUSH2 0x69A JUMP JUMPDEST PUSH1 0xB DUP2 MSTORE PUSH11 0x746F6B656E44656C746173 PUSH1 0xA8 SHL DUP10 DUP3 ADD MSTORE PUSH2 0x727 JUMP JUMPDEST SWAP7 PUSH2 0x100 SWAP8 DUP9 MSTORE PUSH2 0x123 DUP7 MLOAD PUSH2 0x100 DUP2 PUSH2 0x69A JUMP JUMPDEST PUSH1 0x12 DUP2 MSTORE PUSH18 0x185919131A5C5D5A591A5D1E50D85B1B1959 PUSH1 0x72 SHL DUP4 DUP3 ADD MSTORE PUSH2 0x727 JUMP JUMPDEST SWAP7 PUSH2 0x120 SWAP8 DUP9 MSTORE PUSH2 0x152 DUP8 MLOAD PUSH2 0x138 DUP2 PUSH2 0x69A JUMP JUMPDEST PUSH1 0x9 DUP2 MSTORE PUSH9 0x1CD95CDCDA5BDB9259 PUSH1 0xBA SHL DUP5 DUP3 ADD MSTORE PUSH2 0x727 JUMP JUMPDEST SWAP1 PUSH2 0x140 SWAP2 DUP3 MSTORE DUP8 MLOAD SWAP4 PUSH4 0xFBFA77CF PUSH1 0xE0 SHL SWAP1 DUP2 DUP7 MSTORE PUSH1 0x4 SWAP6 DUP6 DUP2 DUP9 DUP2 DUP14 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x53A JUMPI PUSH0 SWAP2 PUSH2 0x67D JUMPI JUMPDEST POP DUP2 ADDRESS SWAP2 AND SUB PUSH2 0x66F JUMPI DUP10 MLOAD SWAP2 DUP3 MSTORE DUP5 DUP3 DUP8 DUP2 DUP7 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x511 JUMPI PUSH0 SWAP3 PUSH2 0x640 JUMPI JUMPDEST POP ADDRESS SWAP2 AND SUB PUSH2 0x632 JUMPI PUSH2 0x1C0 SWAP6 DUP7 MSTORE PUSH1 0xA DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP7 MLOAD PUSH4 0x4546891D PUSH1 0xE1 SHL DUP1 DUP3 MSTORE SWAP1 SWAP3 SWAP1 DUP2 DUP5 DUP7 DUP2 DUP12 GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x628 JUMPI PUSH0 SWAP5 PUSH2 0x609 JUMPI JUMPDEST POP PUSH2 0x160 SWAP4 DUP5 MSTORE DUP9 MLOAD PUSH4 0x1060FDBD PUSH1 0xE1 SHL DUP1 DUP3 MSTORE SWAP1 SWAP7 DUP4 DUP9 DUP9 DUP2 DUP14 GAS STATICCALL SWAP8 DUP9 ISZERO PUSH2 0x53A JUMPI PUSH0 SWAP9 PUSH2 0x5E2 JUMPI JUMPDEST POP PUSH2 0x1A0 SWAP8 DUP9 MSTORE DUP11 MLOAD PUSH4 0xCD51C12F PUSH1 0xE0 SHL DUP2 MSTORE SWAP7 SWAP4 SWAP3 SWAP2 SWAP1 DUP4 DUP9 DUP7 DUP2 DUP15 GAS STATICCALL SWAP8 DUP9 ISZERO PUSH2 0x5D8 JUMPI DUP13 DUP13 SWAP2 PUSH0 SWAP11 PUSH2 0x5B3 JUMPI JUMPDEST POP PUSH2 0x180 SWAP10 DUP11 MSTORE MLOAD PUSH4 0x716585D PUSH1 0xE5 SHL DUP2 MSTORE SWAP1 DUP6 SWAP1 DUP3 SWAP1 DUP9 SWAP1 DUP3 SWAP1 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x575 JUMPI DUP13 DUP15 DUP9 SWAP4 DUP9 SWAP4 PUSH0 SWAP2 PUSH2 0x57F JUMPI JUMPDEST POP PUSH1 0x80 MSTORE MLOAD PUSH4 0x29CAB551 PUSH1 0xE1 SHL DUP2 MSTORE SWAP3 DUP4 SWAP2 DUP3 SWAP1 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x575 JUMPI PUSH0 SWAP2 PUSH2 0x544 JUMPI JUMPDEST POP PUSH1 0xA0 MSTORE PUSH1 0x9 DUP1 SLOAD PUSH2 0x100 PUSH1 0x1 PUSH1 0xA8 SHL SUB NOT AND PUSH1 0x8 SWAP3 SWAP1 SWAP3 SHL PUSH2 0x100 PUSH1 0x1 PUSH1 0xA8 SHL SUB AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE DUP11 MLOAD SWAP2 DUP3 MSTORE DUP3 DUP3 DUP6 DUP2 DUP14 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x53A JUMPI SWAP1 DUP4 SWAP2 PUSH0 SWAP4 PUSH2 0x51B JUMPI JUMPDEST POP DUP5 DUP13 MLOAD DUP1 SWAP13 DUP2 SWAP4 DUP3 MSTORE GAS STATICCALL SWAP9 DUP10 ISZERO PUSH2 0x511 JUMPI PUSH0 SWAP10 PUSH2 0x4E2 JUMPI JUMPDEST POP PUSH4 0xFFFFFFFF DUP1 DUP1 SWAP11 AND SWAP2 AND SUB DUP9 DUP2 GT PUSH2 0x4CF JUMPI DUP10 MLOAD SWAP2 PUSH2 0x4930 SWAP10 DUP11 DUP5 ADD SWAP3 PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB SWAP12 DUP6 DUP6 LT DUP14 DUP7 GT OR PUSH2 0x4BC JUMPI SWAP2 DUP6 SWAP4 SWAP2 DUP15 SWAP6 SWAP4 PUSH3 0xCF7E DUP7 CODECOPY ADDRESS DUP5 MSTORE AND SWAP1 DUP3 ADD MSTORE SUB ADD SWAP1 PUSH0 CREATE SWAP7 DUP8 ISZERO PUSH2 0x4B2 JUMPI PUSH2 0x1E0 SWAP8 DUP9 MSTORE DUP9 MLOAD SWAP2 PUSH2 0x83C SWAP1 DUP2 DUP5 ADD SWAP3 DUP5 DUP5 LT SWAP1 DUP5 GT OR PUSH2 0x49F JUMPI POP SWAP1 DUP3 SWAP2 PUSH3 0x118AE DUP4 CODECOPY SUB SWAP1 PUSH0 CREATE SWAP7 DUP8 ISZERO PUSH2 0x496 JUMPI PUSH2 0x200 SWAP8 DUP9 MSTORE MLOAD SWAP8 PUSH2 0xC783 SWAP10 DUP11 PUSH3 0x7FB DUP12 CODECOPY PUSH1 0x80 MLOAD DUP11 PUSH2 0xAF54 ADD MSTORE PUSH1 0xA0 MLOAD DUP11 PUSH2 0x982A ADD MSTORE PUSH1 0xC0 MLOAD DUP11 DUP2 DUP2 PUSH2 0x3ADD ADD MSTORE DUP2 DUP2 PUSH2 0x3B74 ADD MSTORE DUP2 DUP2 PUSH2 0x46A2 ADD MSTORE DUP2 DUP2 PUSH2 0x5C25 ADD MSTORE PUSH2 0x7A72 ADD MSTORE PUSH1 0xE0 MLOAD DUP11 DUP2 DUP2 PUSH2 0x14A9 ADD MSTORE DUP2 DUP2 PUSH2 0x36F0 ADD MSTORE DUP2 DUP2 PUSH2 0x5C66 ADD MSTORE DUP2 DUP2 PUSH2 0xAE06 ADD MSTORE PUSH2 0xAE4B ADD MSTORE MLOAD DUP10 DUP2 DUP2 PUSH2 0x1B29 ADD MSTORE DUP2 DUP2 PUSH2 0x4CE0 ADD MSTORE PUSH2 0xADBE ADD MSTORE MLOAD DUP9 DUP2 DUP2 PUSH2 0x2DBD ADD MSTORE DUP2 DUP2 PUSH2 0x33A4 ADD MSTORE DUP2 DUP2 PUSH2 0x513D ADD MSTORE PUSH2 0x8525 ADD MSTORE MLOAD DUP8 DUP2 DUP2 PUSH2 0x3370 ADD MSTORE DUP2 DUP2 PUSH2 0x3C51 ADD MSTORE DUP2 DUP2 PUSH2 0x5119 ADD MSTORE DUP2 DUP2 PUSH2 0x5C92 ADD MSTORE PUSH2 0x84F1 ADD MSTORE MLOAD DUP7 POP POP MLOAD DUP6 PUSH2 0x69DE ADD MSTORE MLOAD DUP5 PUSH2 0x69A4 ADD MSTORE MLOAD DUP4 DUP2 DUP2 PUSH2 0x475D ADD MSTORE PUSH2 0x6903 ADD MSTORE MLOAD DUP3 DUP2 DUP2 PUSH2 0x1BAE ADD MSTORE DUP2 DUP2 PUSH2 0x29F8 ADD MSTORE DUP2 DUP2 PUSH2 0x3D61 ADD MSTORE DUP2 DUP2 PUSH2 0x3E7B ADD MSTORE PUSH2 0x551D ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0x3899 ADD MSTORE PUSH2 0x5AF8 ADD MSTORE RETURN JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x41 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP9 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x41 DUP8 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x11 DUP4 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x503 SWAP2 SWAP10 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x50A JUMPI JUMPDEST PUSH2 0x4FB DUP2 DUP4 PUSH2 0x6C9 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x6EC JUMP JUMPDEST SWAP8 PUSH0 PUSH2 0x2FC JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x4F1 JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x533 SWAP2 SWAP4 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x50A JUMPI PUSH2 0x4FB DUP2 DUP4 PUSH2 0x6C9 JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x2E2 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 POP DUP5 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x56E JUMPI JUMPDEST PUSH2 0x55B DUP2 DUP4 PUSH2 0x6C9 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x56A JUMPI MLOAD PUSH0 PUSH2 0x29C JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x551 JUMP JUMPDEST DUP14 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP5 POP POP POP POP DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x5AC JUMPI JUMPDEST PUSH2 0x598 DUP2 DUP4 PUSH2 0x6C9 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x56A JUMPI DUP5 DUP13 DUP15 DUP9 SWAP4 MLOAD PUSH0 PUSH2 0x278 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x58E JUMP JUMPDEST DUP7 SWAP2 SWAP11 POP SWAP2 PUSH2 0x5CF DUP9 SWAP4 DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x50A JUMPI PUSH2 0x4FB DUP2 DUP4 PUSH2 0x6C9 JUMP JUMPDEST SWAP11 SWAP2 POP SWAP2 PUSH2 0x247 JUMP JUMPDEST DUP13 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 SWAP4 SWAP3 SWAP2 SWAP9 POP PUSH2 0x5FF SWAP1 DUP9 SWAP6 RETURNDATASIZE DUP7 GT PUSH2 0x50A JUMPI PUSH2 0x4FB DUP2 DUP4 PUSH2 0x6C9 JUMP JUMPDEST SWAP8 SWAP1 SWAP2 SWAP3 SWAP4 PUSH2 0x217 JUMP JUMPDEST PUSH2 0x621 SWAP2 SWAP5 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x50A JUMPI PUSH2 0x4FB DUP2 DUP4 PUSH2 0x6C9 JUMP JUMPDEST SWAP3 PUSH0 PUSH2 0x1EC JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 PUSH4 0x1BBE95C7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x661 SWAP2 SWAP3 POP DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x668 JUMPI JUMPDEST PUSH2 0x659 DUP2 DUP4 PUSH2 0x6C9 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x708 JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x1A4 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x64F JUMP JUMPDEST DUP6 PUSH4 0x1AB9D9D PUSH1 0xE4 SHL PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH2 0x694 SWAP2 POP DUP7 RETURNDATASIZE DUP9 GT PUSH2 0x668 JUMPI PUSH2 0x659 DUP2 DUP4 PUSH2 0x6C9 JUMP JUMPDEST PUSH0 PUSH2 0x180 JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0x6B5 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x6B5 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x56A JUMPI MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x56A JUMPI SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x56A JUMPI MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x56A JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x734 DUP3 PUSH2 0x69A JUMP JUMPDEST PUSH1 0xC DUP3 MSTORE PUSH2 0x7B5 PUSH1 0x3A PUSH1 0x20 DUP5 ADD PUSH12 0x5661756C7453746F72616765 PUSH1 0xA0 SHL DUP2 MSTORE PUSH1 0x20 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP3 DUP3 DUP5 ADD SWAP8 PUSH32 0x62616C616E6365722D6C6162732E76332E73746F726167652E00000000000000 DUP10 MSTORE MLOAD DUP1 SWAP2 PUSH1 0x39 DUP7 ADD MCOPY DUP4 ADD SWAP1 PUSH1 0x17 PUSH1 0xF9 SHL PUSH1 0x39 DUP4 ADD MSTORE DUP1 MLOAD SWAP3 DUP4 SWAP2 ADD DUP6 DUP4 ADD MCOPY ADD PUSH0 DUP4 DUP3 ADD MSTORE SUB PUSH1 0x1A DUP2 ADD DUP5 MSTORE ADD DUP3 PUSH2 0x6C9 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x7E6 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 DUP2 MSTORE PUSH1 0x20 DUP3 MSTORE PUSH2 0x7DB DUP3 PUSH2 0x69A JUMP JUMPDEST SWAP1 MLOAD SWAP1 KECCAK256 PUSH1 0xFF NOT AND SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x18 JUMPI JUMPDEST CALLDATASIZE PUSH2 0x68EC JUMPI PUSH2 0x68C4 JUMP JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH3 0xD7AADB EQ PUSH2 0x6C6 JUMPI DUP1 PUSH4 0x2E1A4AA EQ PUSH2 0x6C1 JUMPI DUP1 PUSH4 0x362A513 EQ PUSH2 0x6BC JUMPI DUP1 PUSH4 0x6BF83B1 EQ PUSH2 0x6B7 JUMPI DUP1 PUSH4 0x790DE46 EQ PUSH2 0x6B2 JUMPI DUP1 PUSH4 0x8BADE29 EQ PUSH2 0x6AD JUMPI DUP1 PUSH4 0xC87409B EQ PUSH2 0x6A8 JUMPI DUP1 PUSH4 0xEE4CDD8 EQ PUSH2 0x6A3 JUMPI DUP1 PUSH4 0xF619655 EQ PUSH2 0x69E JUMPI DUP1 PUSH4 0xF682BA0 EQ PUSH2 0x699 JUMPI DUP1 PUSH4 0x10C1DC41 EQ PUSH2 0x694 JUMPI DUP1 PUSH4 0x155075E6 EQ PUSH2 0x68F JUMPI DUP1 PUSH4 0x15AFD409 EQ PUSH2 0x68A JUMPI DUP1 PUSH4 0x15DACBEA EQ PUSH2 0x685 JUMPI DUP1 PUSH4 0x16A573C2 EQ PUSH2 0x680 JUMPI DUP1 PUSH4 0x195AAEF9 EQ PUSH2 0x67B JUMPI DUP1 PUSH4 0x19A24BCB EQ PUSH2 0x676 JUMPI DUP1 PUSH4 0x1C4E1E23 EQ PUSH2 0x671 JUMPI DUP1 PUSH4 0x1D27AF68 EQ PUSH2 0x66C JUMPI DUP1 PUSH4 0x1F4475C5 EQ PUSH2 0x667 JUMPI DUP1 PUSH4 0x1F495F79 EQ PUSH2 0x662 JUMPI DUP1 PUSH4 0x21457897 EQ PUSH2 0x65D JUMPI DUP1 PUSH4 0x24E7176B EQ PUSH2 0x658 JUMPI DUP1 PUSH4 0x25B6A844 EQ PUSH2 0x653 JUMPI DUP1 PUSH4 0x2606A4DE EQ PUSH2 0x64E JUMPI DUP1 PUSH4 0x28121E27 EQ PUSH2 0x649 JUMPI DUP1 PUSH4 0x2B766278 EQ PUSH2 0x644 JUMPI DUP1 PUSH4 0x2BFB780C EQ PUSH2 0x63F JUMPI DUP1 PUSH4 0x2CBBF198 EQ PUSH2 0x63A JUMPI DUP1 PUSH4 0x2D1C3BEB EQ PUSH2 0x635 JUMPI DUP1 PUSH4 0x32333CE6 EQ PUSH2 0x630 JUMPI DUP1 PUSH4 0x352339EE EQ PUSH2 0x62B JUMPI DUP1 PUSH4 0x36918D6E EQ PUSH2 0x626 JUMPI DUP1 PUSH4 0x370BC8DA EQ PUSH2 0x621 JUMPI DUP1 PUSH4 0x3CB5B2AF EQ PUSH2 0x61C JUMPI DUP1 PUSH4 0x3CCE2585 EQ PUSH2 0x617 JUMPI DUP1 PUSH4 0x3E262BA3 EQ PUSH2 0x612 JUMPI DUP1 PUSH4 0x420F4A45 EQ PUSH2 0x60D JUMPI DUP1 PUSH4 0x43583BE5 EQ PUSH2 0x608 JUMPI DUP1 PUSH4 0x44EA8763 EQ PUSH2 0x603 JUMPI DUP1 PUSH4 0x4594871A EQ PUSH2 0x5FE JUMPI DUP1 PUSH4 0x47C07E88 EQ PUSH2 0x5F9 JUMPI DUP1 PUSH4 0x48C89491 EQ PUSH2 0x5F4 JUMPI DUP1 PUSH4 0x4AF29EC4 EQ PUSH2 0x5EF JUMPI DUP1 PUSH4 0x557DBA68 EQ PUSH2 0x5EA JUMPI DUP1 PUSH4 0x5C1C1C81 EQ PUSH2 0x5E5 JUMPI DUP1 PUSH4 0x5E3E00FA EQ PUSH2 0x5E0 JUMPI DUP1 PUSH4 0x5EEAE6EB EQ PUSH2 0x5DB JUMPI DUP1 PUSH4 0x5F70F542 EQ PUSH2 0x5D6 JUMPI DUP1 PUSH4 0x608256F7 EQ PUSH2 0x5D1 JUMPI DUP1 PUSH4 0x62691E5F EQ PUSH2 0x5CC JUMPI DUP1 PUSH4 0x692407AE EQ PUSH2 0x5C7 JUMPI DUP1 PUSH4 0x6D4908C4 EQ PUSH2 0x5C2 JUMPI DUP1 PUSH4 0x7004B0F1 EQ PUSH2 0x5BD JUMPI DUP1 PUSH4 0x7965C967 EQ PUSH2 0x5B8 JUMPI DUP1 PUSH4 0x79A2C0AC EQ PUSH2 0x5B3 JUMPI DUP1 PUSH4 0x80047E26 EQ PUSH2 0x5AE JUMPI DUP1 PUSH4 0x81E4B7E9 EQ PUSH2 0x5A9 JUMPI DUP1 PUSH4 0x82EA1749 EQ PUSH2 0x5A4 JUMPI DUP1 PUSH4 0x851C65A3 EQ PUSH2 0x59F JUMPI DUP1 PUSH4 0x87A530F8 EQ PUSH2 0x59A JUMPI DUP1 PUSH4 0x87A76C59 EQ PUSH2 0x595 JUMPI DUP1 PUSH4 0x8F5AEB4B EQ PUSH2 0x590 JUMPI DUP1 PUSH4 0x920AF066 EQ PUSH2 0x58B JUMPI DUP1 PUSH4 0x96E74A27 EQ PUSH2 0x586 JUMPI DUP1 PUSH4 0xA03B23EF EQ PUSH2 0x581 JUMPI DUP1 PUSH4 0xA408F312 EQ PUSH2 0x57C JUMPI DUP1 PUSH4 0xA40F9592 EQ PUSH2 0x577 JUMPI DUP1 PUSH4 0xAA01EDB3 EQ PUSH2 0x572 JUMPI DUP1 PUSH4 0xAB62C2B6 EQ PUSH2 0x56D JUMPI DUP1 PUSH4 0xAC004855 EQ PUSH2 0x568 JUMPI DUP1 PUSH4 0xAE639329 EQ PUSH2 0x563 JUMPI DUP1 PUSH4 0xB1740C2D EQ PUSH2 0x55E JUMPI DUP1 PUSH4 0xB2469499 EQ PUSH2 0x559 JUMPI DUP1 PUSH4 0xB4EB0BF9 EQ PUSH2 0x554 JUMPI DUP1 PUSH4 0xB6F680F4 EQ PUSH2 0x54F JUMPI DUP1 PUSH4 0xB8CACEEE EQ PUSH2 0x54A JUMPI DUP1 PUSH4 0xB8F82B26 EQ PUSH2 0x545 JUMPI DUP1 PUSH4 0xB9A8EFFA EQ PUSH2 0x540 JUMPI DUP1 PUSH4 0xBB14E466 EQ PUSH2 0x53B JUMPI DUP1 PUSH4 0xBBC6F1DC EQ PUSH2 0x536 JUMPI DUP1 PUSH4 0xBE6B4D2A EQ PUSH2 0x531 JUMPI DUP1 PUSH4 0xBEABACC8 EQ PUSH2 0x52C JUMPI DUP1 PUSH4 0xC1FDCD62 EQ PUSH2 0x527 JUMPI DUP1 PUSH4 0xC9C1661B EQ PUSH2 0x522 JUMPI DUP1 PUSH4 0xCBDE2B68 EQ PUSH2 0x51D JUMPI DUP1 PUSH4 0xCBE52AE3 EQ PUSH2 0x518 JUMPI DUP1 PUSH4 0xCECC95A7 EQ PUSH2 0x513 JUMPI DUP1 PUSH4 0xCFCC2209 EQ PUSH2 0x50E JUMPI DUP1 PUSH4 0xD01A3269 EQ PUSH2 0x509 JUMPI DUP1 PUSH4 0xD0643B8C EQ PUSH2 0x504 JUMPI DUP1 PUSH4 0xD1F810A5 EQ PUSH2 0x4FF JUMPI DUP1 PUSH4 0xD2C725E0 EQ PUSH2 0x4FA JUMPI DUP1 PUSH4 0xD64BC25D EQ PUSH2 0x4F5 JUMPI DUP1 PUSH4 0xD86C3FEF EQ PUSH2 0x4F0 JUMPI DUP1 PUSH4 0xD8F4CF3C EQ PUSH2 0x4EB JUMPI DUP1 PUSH4 0xDAB50579 EQ PUSH2 0x4E6 JUMPI DUP1 PUSH4 0xDC4402ED EQ PUSH2 0x4E1 JUMPI DUP1 PUSH4 0xDF138458 EQ PUSH2 0x4DC JUMPI DUP1 PUSH4 0xE2DDCE11 EQ PUSH2 0x4D7 JUMPI DUP1 PUSH4 0xE460A8A9 EQ PUSH2 0x4D2 JUMPI DUP1 PUSH4 0xE5948689 EQ PUSH2 0x4CD JUMPI DUP1 PUSH4 0xE5B08FFB EQ PUSH2 0x4C8 JUMPI DUP1 PUSH4 0xEBFEB0A1 EQ PUSH2 0x4C3 JUMPI DUP1 PUSH4 0xEEDA9991 EQ PUSH2 0x4BE JUMPI DUP1 PUSH4 0xF1320097 EQ PUSH2 0x4B9 JUMPI PUSH4 0xFF44DEAB SUB PUSH2 0xE JUMPI PUSH2 0x5488 JUMP JUMPDEST PUSH2 0x53DD JUMP JUMPDEST PUSH2 0x53BE JUMP JUMPDEST PUSH2 0x5376 JUMP JUMPDEST PUSH2 0x533A JUMP JUMPDEST PUSH2 0x51F1 JUMP JUMPDEST PUSH2 0x5170 JUMP JUMPDEST PUSH2 0x5108 JUMP JUMPDEST PUSH2 0x50D0 JUMP JUMPDEST PUSH2 0x506B JUMP JUMPDEST PUSH2 0x4F7B JUMP JUMPDEST PUSH2 0x4E89 JUMP JUMPDEST PUSH2 0x4DA6 JUMP JUMPDEST PUSH2 0x4D6D JUMP JUMPDEST PUSH2 0x4D2F JUMP JUMPDEST PUSH2 0x4D04 JUMP JUMPDEST PUSH2 0x4CCC JUMP JUMPDEST PUSH2 0x4C24 JUMP JUMPDEST PUSH2 0x4BA5 JUMP JUMPDEST PUSH2 0x4B6D JUMP JUMPDEST PUSH2 0x4B42 JUMP JUMPDEST PUSH2 0x4AF0 JUMP JUMPDEST PUSH2 0x4A55 JUMP JUMPDEST PUSH2 0x496B JUMP JUMPDEST PUSH2 0x4953 JUMP JUMPDEST PUSH2 0x48E7 JUMP JUMPDEST PUSH2 0x48BC JUMP JUMPDEST PUSH2 0x4781 JUMP JUMPDEST PUSH2 0x473E JUMP JUMPDEST PUSH2 0x4713 JUMP JUMPDEST PUSH2 0x46FB JUMP JUMPDEST PUSH2 0x46E1 JUMP JUMPDEST PUSH2 0x46C5 JUMP JUMPDEST PUSH2 0x468B JUMP JUMPDEST PUSH2 0x4662 JUMP JUMPDEST PUSH2 0x4587 JUMP JUMPDEST PUSH2 0x456D JUMP JUMPDEST PUSH2 0x44C9 JUMP JUMPDEST PUSH2 0x43E7 JUMP JUMPDEST PUSH2 0x43AB JUMP JUMPDEST PUSH2 0x4366 JUMP JUMPDEST PUSH2 0x4321 JUMP JUMPDEST PUSH2 0x3F25 JUMP JUMPDEST PUSH2 0x3EE8 JUMP JUMPDEST PUSH2 0x3E9F JUMP JUMPDEST PUSH2 0x3E5C JUMP JUMPDEST PUSH2 0x3DF2 JUMP JUMPDEST PUSH2 0x3D34 JUMP JUMPDEST PUSH2 0x3C79 JUMP JUMPDEST PUSH2 0x3C3D JUMP JUMPDEST PUSH2 0x3C2C JUMP JUMPDEST PUSH2 0x3B96 JUMP JUMPDEST PUSH2 0x3B60 JUMP JUMPDEST PUSH2 0x3AFF JUMP JUMPDEST PUSH2 0x3ACA JUMP JUMPDEST PUSH2 0x3A7C JUMP JUMPDEST PUSH2 0x3A57 JUMP JUMPDEST PUSH2 0x3965 JUMP JUMPDEST PUSH2 0x377C JUMP JUMPDEST PUSH2 0x36DA JUMP JUMPDEST PUSH2 0x3688 JUMP JUMPDEST PUSH2 0x35BA JUMP JUMPDEST PUSH2 0x34EF JUMP JUMPDEST PUSH2 0x330B JUMP JUMPDEST PUSH2 0x327F JUMP JUMPDEST PUSH2 0x3257 JUMP JUMPDEST PUSH2 0x31CA JUMP JUMPDEST PUSH2 0x3152 JUMP JUMPDEST PUSH2 0x2DFE JUMP JUMPDEST PUSH2 0x2D96 JUMP JUMPDEST PUSH2 0x2D65 JUMP JUMPDEST PUSH2 0x2CDE JUMP JUMPDEST PUSH2 0x2CA5 JUMP JUMPDEST PUSH2 0x2BC0 JUMP JUMPDEST PUSH2 0x2AFC JUMP JUMPDEST PUSH2 0x2A89 JUMP JUMPDEST PUSH2 0x297E JUMP JUMPDEST PUSH2 0x28A2 JUMP JUMPDEST PUSH2 0x287E JUMP JUMPDEST PUSH2 0x25E8 JUMP JUMPDEST PUSH2 0x25AB JUMP JUMPDEST PUSH2 0x2563 JUMP JUMPDEST PUSH2 0x24E2 JUMP JUMPDEST PUSH2 0x2082 JUMP JUMPDEST PUSH2 0x1F65 JUMP JUMPDEST PUSH2 0x1D35 JUMP JUMPDEST PUSH2 0x1B4C JUMP JUMPDEST PUSH2 0x1B12 JUMP JUMPDEST PUSH2 0x1AFB JUMP JUMPDEST PUSH2 0x19FB JUMP JUMPDEST PUSH2 0x196B JUMP JUMPDEST PUSH2 0x17A1 JUMP JUMPDEST PUSH2 0x176A JUMP JUMPDEST PUSH2 0x15ED JUMP JUMPDEST PUSH2 0x14CC JUMP JUMPDEST PUSH2 0x1492 JUMP JUMPDEST PUSH2 0x1429 JUMP JUMPDEST PUSH2 0x13EA JUMP JUMPDEST PUSH2 0x136D JUMP JUMPDEST PUSH2 0x1328 JUMP JUMPDEST PUSH2 0x12BB JUMP JUMPDEST PUSH2 0x1274 JUMP JUMPDEST PUSH2 0x119C JUMP JUMPDEST PUSH2 0xE3D JUMP JUMPDEST PUSH2 0x9EB JUMP JUMPDEST PUSH2 0x7D0 JUMP JUMPDEST PUSH2 0x727 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SUB PUSH2 0x6DC JUMPI JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0x6CB JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x164 CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x713 DUP2 PUSH2 0x6CB JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD PUSH2 0x720 DUP2 PUSH2 0x6CB JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x790 PUSH1 0x20 PUSH2 0x73A CALLDATASIZE PUSH2 0x6FB JUMP JUMPDEST SWAP2 SWAP1 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD DUP1 SWAP8 DUP2 SWAP7 DUP3 SWAP6 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP4 AND GAS CALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x7A1 JUMPI STOP JUMPDEST PUSH2 0x7C2 SWAP1 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x7C4 JUMPI JUMPDEST PUSH2 0x7BA DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x54E3 JUMP JUMPDEST STOP JUMPDEST POP RETURNDATASIZE PUSH2 0x7B0 JUMP JUMPDEST PUSH2 0x54F8 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH2 0x7C2 PUSH1 0x4 CALLDATALOAD PUSH2 0x7F0 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH2 0x6936 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x83E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH2 0x7F5 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x83E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x83E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x83E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x83E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0x873 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0xC0 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x83E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x140 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x83E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x160 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x83E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x180 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x83E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x83E JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x6DC JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x974 DUP2 PUSH2 0x942 JUMP JUMPDEST SWAP4 PUSH2 0x982 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x88F JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x6DC JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x9AB JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 DUP1 SWAP2 DUP4 CALLDATALOAD PUSH2 0x9B9 DUP2 PUSH2 0x6CB JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x99D JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x6DC JUMPI JUMP JUMPDEST PUSH2 0x124 CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x6DC JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0xC0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0xA08 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0xA28 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x95A JUMP JUMPDEST SWAP1 PUSH2 0xA31 PUSH2 0x9C4 JUMP JUMPDEST PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH2 0x7C2 SWAP3 PUSH1 0x40 MLOAD SWAP3 PUSH2 0xA6C DUP5 PUSH2 0x822 JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD PUSH2 0xA78 DUP2 PUSH2 0x6CB JUMP JUMPDEST DUP5 MSTORE PUSH1 0x84 CALLDATALOAD PUSH2 0xA86 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0xA4 CALLDATALOAD PUSH2 0xA97 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MSTORE PUSH2 0x5503 JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x6DC JUMPI JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0xAA1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x83E JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH2 0xADE DUP3 PUSH2 0xAB6 JUMP JUMPDEST SWAP2 PUSH2 0xAEC PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x88F JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0x6DC JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x6DC JUMPI DUP2 PUSH1 0x20 PUSH2 0xB23 SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0xAD2 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0xE0 DUP2 DUP5 SUB SLT PUSH2 0x6DC JUMPI PUSH2 0xB3B PUSH2 0x8B2 JUMP JUMPDEST SWAP3 PUSH2 0xB45 DUP3 PUSH2 0xAAB JUMP JUMPDEST DUP5 MSTORE PUSH2 0xB53 PUSH1 0x20 DUP4 ADD PUSH2 0x6E0 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE PUSH2 0xB64 PUSH1 0x40 DUP4 ADD PUSH2 0x6E0 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MSTORE PUSH2 0xB75 PUSH1 0x60 DUP4 ADD PUSH2 0x6E0 JUMP JUMPDEST PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP3 ADD CALLDATALOAD PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xC0 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0xBAC SWAP3 ADD PUSH2 0xB08 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE JUMP JUMPDEST DUP1 ISZERO ISZERO SUB PUSH2 0x6DC JUMPI JUMP JUMPDEST PUSH2 0x144 CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0xBB3 JUMP JUMPDEST PUSH2 0x164 CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0xBB3 JUMP JUMPDEST PUSH2 0x184 CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0xBB3 JUMP JUMPDEST PUSH2 0x1A4 CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0xBB3 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0xBB3 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0xBB3 JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0xBB3 JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0xBB3 JUMP JUMPDEST PUSH1 0xA4 CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0xBB3 JUMP JUMPDEST PUSH1 0xC4 CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0xBB3 JUMP JUMPDEST PUSH1 0xE4 CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0xBB3 JUMP JUMPDEST PUSH2 0x104 CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0xBB3 JUMP JUMPDEST PUSH2 0x124 CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0xBB3 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x6DC JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 PUSH2 0xC85 DUP4 PUSH2 0x942 JUMP JUMPDEST SWAP4 PUSH1 0x40 PUSH2 0xC95 PUSH1 0x40 MLOAD SWAP7 DUP8 PUSH2 0x88F JUMP JUMPDEST DUP5 DUP7 MSTORE DUP3 DUP7 ADD SWAP2 DUP4 PUSH1 0x60 DUP1 SWAP8 MUL DUP7 ADD ADD SWAP5 DUP2 DUP7 GT PUSH2 0x6DC JUMPI DUP5 ADD SWAP3 JUMPDEST DUP6 DUP5 LT PUSH2 0xCC2 JUMPI POP POP POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP7 DUP5 DUP4 SUB SLT PUSH2 0x6DC JUMPI DUP5 DUP8 SWAP2 DUP5 MLOAD PUSH2 0xCD9 DUP2 PUSH2 0x822 JUMP JUMPDEST DUP7 CALLDATALOAD PUSH2 0xCE4 DUP2 PUSH2 0xAA1 JUMP JUMPDEST DUP2 MSTORE DUP3 DUP8 ADD CALLDATALOAD PUSH2 0xCF3 DUP2 PUSH2 0x6CB JUMP JUMPDEST DUP4 DUP3 ADD MSTORE DUP6 DUP8 ADD CALLDATALOAD PUSH2 0xD04 DUP2 PUSH2 0xBB3 JUMP JUMPDEST DUP7 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP4 ADD SWAP3 PUSH2 0xCB1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x6DC JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0xD2D DUP2 PUSH2 0x942 JUMP JUMPDEST SWAP4 PUSH2 0xD3B PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x88F JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x6DC JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xD64 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xD56 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0xE0 DUP2 DUP5 SUB SLT PUSH2 0x6DC JUMPI PUSH2 0xD88 PUSH2 0x8B2 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 ADD CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI DUP3 PUSH2 0xDAE SWAP2 DUP6 ADD PUSH2 0x95A JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI DUP3 PUSH2 0xDCB SWAP2 DUP6 ADD PUSH2 0xC6C JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI DUP3 PUSH2 0xDE8 SWAP2 DUP6 ADD PUSH2 0xD13 JUMP JUMPDEST PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI DUP3 PUSH2 0xE05 SWAP2 DUP6 ADD PUSH2 0xD13 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI DUP3 PUSH2 0xE22 SWAP2 DUP6 ADD PUSH2 0xD13 JUMP JUMPDEST PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0xC0 DUP4 ADD CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0xBAC SWAP3 ADD PUSH2 0xD13 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0xC0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0xE6F SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xB26 JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0xE88 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xD73 JUMP JUMPDEST PUSH1 0x80 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 SWAP2 PUSH2 0xEE7 SWAP2 PUSH1 0x40 MLOAD SWAP2 PUSH2 0xEC6 DUP4 PUSH2 0x843 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD DUP4 MSTORE PUSH1 0x64 CALLDATALOAD DUP6 DUP5 ADD MSTORE PUSH1 0x84 CALLDATALOAD PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0xA4 CALLDATALOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x6A65 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLDATALOAD SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x6DC JUMPI JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0xC0 DUP2 DUP5 SUB SLT PUSH2 0x6DC JUMPI PUSH2 0xF11 PUSH2 0x8BF JUMP JUMPDEST SWAP3 PUSH2 0xF1B DUP3 PUSH2 0x6E0 JUMP JUMPDEST DUP5 MSTORE PUSH2 0xF29 PUSH1 0x20 DUP4 ADD PUSH2 0x6E0 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 DUP4 ADD CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI DUP3 PUSH2 0xF4F SWAP2 DUP6 ADD PUSH2 0xD13 JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0xF6A PUSH1 0x80 DUP5 ADD PUSH2 0xEEF JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0xF85 SWAP3 ADD PUSH2 0xB08 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x6DC JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x4 CALLDATALOAD DUP4 DUP2 GT PUSH2 0x6DC JUMPI DUP3 PUSH2 0xFB9 SWAP2 PUSH1 0x4 ADD PUSH2 0xD73 JUMP JUMPDEST SWAP3 PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI DUP4 PUSH2 0xFD1 SWAP2 PUSH1 0x4 ADD PUSH2 0xEFC JUMP JUMPDEST SWAP3 PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x6DC JUMPI PUSH2 0xB23 SWAP2 PUSH1 0x4 ADD PUSH2 0xD13 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x101F JUMPI JUMP JUMPDEST PUSH2 0xFE8 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1043 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 DUP3 PUSH1 0x60 PUSH1 0x1 SWAP3 DUP8 MLOAD DUP1 MLOAD PUSH2 0x105A DUP2 PUSH2 0x1015 JUMP JUMPDEST DUP3 MSTORE DUP1 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 DUP4 ADD MSTORE PUSH1 0x40 SWAP1 DUP2 ADD MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE ADD SWAP6 ADD SWAP4 SWAP3 SWAP2 ADD PUSH2 0x1035 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x10A4 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1096 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0xE0 DUP4 ADD SWAP3 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP5 PUSH1 0xE0 PUSH1 0x20 DUP5 ADD MSTORE DUP6 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH2 0x100 DUP5 ADD SWAP7 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x115A JUMPI POP POP POP POP PUSH1 0xC0 PUSH2 0x1149 PUSH2 0x1137 PUSH2 0x1125 PUSH2 0x1113 PUSH2 0xB23 SWAP8 SWAP9 PUSH1 0x40 DUP9 ADD MLOAD DUP8 DUP3 SUB PUSH1 0x40 DUP10 ADD MSTORE PUSH2 0x1024 JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MLOAD DUP7 DUP3 SUB PUSH1 0x60 DUP9 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD DUP6 DUP3 SUB PUSH1 0x80 DUP8 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD DUP5 DUP3 SUB PUSH1 0xA0 DUP7 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 PUSH1 0xC0 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP9 MSTORE SWAP7 DUP2 ADD SWAP7 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x10E3 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x1241 PUSH2 0x125D PUSH2 0x1270 PUSH2 0x122D PUSH2 0x11B6 CALLDATASIZE PUSH2 0xF8C JUMP JUMPDEST SWAP3 SWAP2 SWAP5 SWAP1 PUSH2 0x11C2 PUSH2 0x5637 JUMP JUMPDEST POP PUSH2 0x124F PUSH1 0x40 MLOAD SWAP5 PUSH2 0x11FB PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x11DC DUP7 DUP4 PUSH2 0x5685 JUMP JUMPDEST SUB SWAP8 PUSH2 0x11F0 PUSH1 0x1F NOT SWAP10 DUP11 DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x88F JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP2 DUP5 DUP11 PUSH2 0x6CA2 JUMP JUMPDEST SWAP8 SWAP3 SWAP4 SWAP2 SWAP6 SWAP1 SWAP9 PUSH2 0x1224 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x1218 PUSH1 0x20 DUP3 ADD SWAP6 DUP7 PUSH2 0x5685 JUMP JUMPDEST SUB SWAP1 DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x88F JUMP JUMPDEST MLOAD SWAP1 KECCAK256 EQ PUSH2 0x56F5 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP9 DUP10 SWAP9 PUSH1 0xA0 DUP11 MSTORE PUSH1 0xA0 DUP11 ADD SWAP1 PUSH2 0x10B8 JUMP JUMPDEST SWAP1 DUP9 DUP3 SUB PUSH1 0x20 DUP11 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST SWAP1 DUP7 DUP3 SUB PUSH1 0x40 DUP9 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST SWAP2 PUSH1 0x60 DUP6 ADD MSTORE DUP4 DUP3 SUB PUSH1 0x80 DUP6 ADD MSTORE PUSH2 0x1177 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0xEE7 PUSH2 0x12AA PUSH1 0x20 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xD73 JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x7212 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x12D8 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1318 SWAP2 AND SWAP2 DUP3 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x82 SWAP2 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x1345 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x135B PUSH1 0x44 CALLDATALOAD PUSH1 0x24 CALLDATALOAD PUSH2 0x7295 JUMP JUMPDEST SWAP2 AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x138A DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x6DC JUMPI PUSH2 0x13AE PUSH2 0x7C2 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xD73 JUMP JUMPDEST SWAP1 PUSH2 0x72F9 JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x40 SWAP2 ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x13CC DUP2 PUSH2 0x6CB JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD PUSH2 0xB23 DUP2 PUSH2 0xAA1 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0xB23 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x10B8 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x1270 PUSH2 0x1415 PUSH2 0x13FE CALLDATASIZE PUSH2 0x13B4 JUMP JUMPDEST SWAP1 PUSH2 0x1407 PUSH2 0x5637 JUMP JUMPDEST POP PUSH2 0x1410 PUSH2 0x5637 JUMP JUMPDEST PUSH2 0x735C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x10B8 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x3 NOT PUSH1 0x40 DUP2 CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x1447 DUP2 PUSH2 0xBB3 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP2 PUSH2 0x1454 DUP4 PUSH2 0xBB3 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE PUSH1 0x7 SLOAD SWAP3 PUSH1 0x1 SHL AND SWAP2 AND OR OR PUSH1 0x7 SSTORE PUSH0 DUP1 RETURN JUMPDEST PUSH0 SWAP2 SUB SLT PUSH2 0x6DC JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x14E9 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x14F4 PUSH2 0x79F6 JUMP JUMPDEST PUSH2 0x14FC PUSH2 0x7A70 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD SWAP2 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP5 SWAP3 DUP3 SWAP1 PUSH1 0x24 SWAP1 DUP3 SWAP1 GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x1270 SWAP5 PUSH2 0x1588 SWAP3 PUSH0 SWAP2 PUSH2 0x15BE JUMPI JUMPDEST POP DUP1 PUSH2 0x1582 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0x57A4 JUMP JUMPDEST SWAP2 DUP1 DUP4 GT PUSH2 0x15B4 JUMPI JUMPDEST POP DUP2 PUSH2 0x159C SWAP2 PUSH2 0x7AC1 JUMP JUMPDEST PUSH2 0x15A4 PUSH2 0x7A4B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 JUMP JUMPDEST SWAP2 POP PUSH2 0x159C PUSH2 0x1591 JUMP JUMPDEST PUSH2 0x15E0 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI JUMPDEST PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x575A JUMP JUMPDEST PUSH0 PUSH2 0x1565 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x15CE JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH2 0x163B PUSH1 0x4 CALLDATALOAD PUSH2 0x160D DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x1619 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH2 0x1626 DUP3 PUSH2 0x6CB JUMP JUMPDEST PUSH2 0x1635 PUSH1 0x64 CALLDATALOAD DUP1 SWAP5 DUP4 CALLER PUSH2 0x7AFF JUMP JUMPDEST CALLER PUSH2 0x7CDC JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0xC0 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x6DC JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x4 CALLDATALOAD DUP4 DUP2 GT PUSH2 0x6DC JUMPI DUP3 PUSH2 0x1673 SWAP2 PUSH1 0x4 ADD PUSH2 0xB26 JUMP JUMPDEST SWAP3 PUSH1 0x80 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP5 ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x40 MLOAD PUSH2 0x16AA DUP2 PUSH2 0x843 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD DUP2 MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x84 CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE SWAP3 PUSH1 0xA4 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x6DC JUMPI PUSH2 0xB23 SWAP2 PUSH1 0x4 ADD PUSH2 0xD73 JUMP JUMPDEST SWAP1 PUSH2 0x16E8 DUP3 PUSH2 0x1015 JUMP JUMPDEST MSTORE JUMP JUMPDEST PUSH2 0xB23 SWAP2 DUP2 MLOAD PUSH2 0x16FA DUP2 PUSH2 0x1015 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xC0 PUSH2 0x1721 PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0xE0 PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0xE0 DUP5 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP3 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE ADD MLOAD SWAP1 PUSH1 0xC0 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x1177 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0xB23 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x16EB JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x1270 PUSH2 0x178D PUSH2 0x177E CALLDATASIZE PUSH2 0x1646 JUMP JUMPDEST SWAP2 PUSH2 0x1787 PUSH2 0x57B1 JUMP JUMPDEST POP PUSH2 0x7EA8 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x16EB JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x17BE DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP2 PUSH1 0x40 MLOAD PUSH32 0xCE20ECE700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 PUSH1 0x4 DUP2 DUP9 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP2 PUSH2 0x193D JUMPI JUMPDEST POP DUP4 LT PUSH2 0x1915 JUMPI PUSH1 0x40 MLOAD PUSH32 0x654CF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP2 PUSH1 0x4 DUP2 DUP9 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP3 PUSH2 0x18F8 JUMPI JUMPDEST POP POP DUP3 GT PUSH2 0x18D0 JUMPI DUP2 DUP2 PUSH2 0x18BA PUSH2 0x18A3 PUSH32 0x89D41522342FABAC1471CA6073A5623E5CAF367B03CA6E9A001478D0CF8BE4A1 SWAP6 PUSH2 0x189D PUSH2 0x18CB SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x91E1 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 STOP JUMPDEST PUSH32 0x7F47834B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x190E SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x184E JUMP JUMPDEST PUSH32 0xBFB2068800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x1954 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x180B JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0xB23 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x1991 DUP2 PUSH2 0x6CB JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 SWAP1 PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP2 PUSH2 0x19B3 DUP4 PUSH2 0x57E7 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x19CB JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0x1270 DUP9 DUP3 PUSH2 0x195A JUMP JUMPDEST DUP1 PUSH1 0x1 SWAP2 PUSH0 MSTORE DUP4 DUP4 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 PUSH0 KECCAK256 SLOAD AND PUSH2 0x19F4 DUP3 DUP10 PUSH2 0x5818 JUMP JUMPDEST MSTORE ADD PUSH2 0x19B6 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x1A18 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x1A39 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xD13 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x6DC JUMPI PUSH2 0x1AB4 PUSH2 0x1A57 PUSH2 0x1A7C SWAP4 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xD13 JUMP JUMPDEST SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH2 0x1A83 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP3 PUSH2 0x5859 JUMP JUMPDEST SUB DUP6 PUSH2 0x88F JUMP JUMPDEST PUSH2 0x1A90 DUP5 MLOAD DUP5 MLOAD EQ PUSH2 0x589D JUMP JUMPDEST PUSH2 0x1A9D DUP5 MLOAD DUP7 MLOAD EQ PUSH2 0x589D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x7C2 JUMPI DUP1 PUSH2 0x1AE2 PUSH2 0x1AD0 PUSH1 0x1 SWAP4 DUP6 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x1ADB DUP4 DUP10 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x7295 JUMP JUMPDEST PUSH2 0x1AF4 DUP3 DUP7 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE ADD PUSH2 0x1AB7 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x7C2 PUSH2 0x1B0C CALLDATASIZE PUSH2 0x6FB JUMP JUMPDEST SWAP2 PUSH2 0x7F11 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x1B69 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x1B89 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x95A JUMP JUMPDEST SWAP1 PUSH2 0x1B92 PUSH2 0x69D7 JUMP JUMPDEST PUSH2 0x1B9A PUSH2 0x6A43 JUMP JUMPDEST SWAP2 PUSH1 0x1 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH2 0x1BD4 DUP3 PUSH32 0x0 AND SWAP2 PUSH2 0x5A72 JUMP JUMPDEST SWAP2 DUP2 EXTCODESIZE ISZERO PUSH2 0x6DC JUMPI PUSH0 DUP1 SWAP5 PUSH2 0x1C2C SWAP7 PUSH2 0x1C6B PUSH1 0x40 MLOAD SWAP9 DUP10 SWAP8 DUP9 SWAP7 DUP8 SWAP6 PUSH32 0xED05BEAF00000000000000000000000000000000000000000000000000000000 DUP8 MSTORE AND PUSH1 0x4 DUP7 ADD MSTORE PUSH2 0x100 PUSH1 0x24 DUP7 ADD MSTORE PUSH2 0x104 DUP6 ADD SWAP1 PUSH2 0x1EE5 JUMP JUMPDEST SWAP2 PUSH1 0x44 CALLDATALOAD PUSH1 0x44 DUP6 ADD MSTORE DUP5 PUSH1 0x64 DUP6 ADD MSTORE PUSH1 0x84 DUP5 ADD SWAP1 PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x1C7B JUMPI STOP JUMPDEST DUP1 PUSH2 0x1C88 PUSH2 0x7C2 SWAP3 PUSH2 0x85F JUMP JUMPDEST DUP1 PUSH2 0x1488 JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x6DC JUMPI JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0xC0 DUP2 DUP5 SUB SLT PUSH2 0x6DC JUMPI PUSH2 0x1CB0 PUSH2 0x8BF JUMP JUMPDEST SWAP3 PUSH2 0x1CBA DUP3 PUSH2 0x6E0 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x1CC8 PUSH1 0x20 DUP4 ADD PUSH2 0x6E0 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP3 ADD CALLDATALOAD PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x6DC JUMPI DUP3 PUSH2 0x1CF9 SWAP2 DUP6 ADD PUSH2 0xD13 JUMP JUMPDEST PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0xF6A PUSH1 0x80 DUP5 ADD PUSH2 0x1C8E JUMP JUMPDEST SWAP2 PUSH2 0x1D27 SWAP1 PUSH2 0xB23 SWAP5 SWAP3 DUP5 MSTORE PUSH1 0x60 PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x1177 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x1D66 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1C9B JUMP JUMPDEST PUSH2 0x1D6E PUSH2 0x7A70 JUMP JUMPDEST PUSH2 0x1D81 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 MLOAD AND PUSH2 0x807C JUMP JUMPDEST PUSH2 0x1D9A PUSH2 0x1D95 DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x80C9 JUMP JUMPDEST PUSH2 0x1DB3 PUSH2 0x1DAE DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x75BE JUMP JUMPDEST PUSH2 0x1E06 PUSH1 0x20 DUP3 ADD MLOAD MLOAD PUSH2 0x1DCD PUSH1 0x60 DUP6 ADD SWAP2 DUP3 MLOAD MLOAD SWAP1 PUSH2 0x80D5 JUMP JUMPDEST DUP1 MLOAD PUSH1 0xC0 DUP5 ADD SWAP1 PUSH2 0x1DE7 DUP3 MLOAD SWAP2 PUSH1 0xA0 DUP8 ADD SWAP3 DUP4 MLOAD SWAP2 PUSH2 0x8104 JUMP JUMPDEST SWAP3 PUSH2 0x1DF7 DUP7 MLOAD PUSH1 0x1 SWAP1 PUSH1 0x10 SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x1E8D JUMPI JUMPDEST POP POP POP DUP4 DUP4 PUSH2 0x8470 JUMP JUMPDEST SWAP3 SWAP4 SWAP1 SWAP2 SWAP5 DUP6 PUSH2 0x1E1B DUP4 MLOAD PUSH1 0x1 SWAP1 PUSH1 0x11 SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x1E30 JUMPI JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x1270 DUP8 DUP11 DUP11 DUP5 PUSH2 0x1D0A JUMP JUMPDEST PUSH2 0x1270 SWAP5 SWAP7 POP SWAP1 DUP6 PUSH2 0x1E83 SWAP5 SWAP4 SWAP3 PUSH2 0x1E79 PUSH2 0x1E6C PUSH2 0x1E55 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 DUP5 MLOAD CALLER SWAP1 PUSH2 0x8B52 JUMP JUMPDEST SWAP3 SWAP1 PUSH0 DUP1 DUP1 PUSH2 0x1E20 JUMP JUMPDEST PUSH2 0x1EB5 PUSH2 0x1EDD SWAP5 DUP8 DUP10 PUSH2 0x1EAD PUSH2 0x1E6C PUSH2 0x1E55 DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 CALLER SWAP1 PUSH2 0x81CF JUMP JUMPDEST PUSH2 0x1ED2 PUSH2 0x1ECC PUSH2 0x1A9D DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP8 PUSH2 0x82A9 JUMP JUMPDEST MLOAD SWAP2 MLOAD SWAP1 MLOAD SWAP2 PUSH2 0x8104 JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0x1DFC JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1F04 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 DUP3 PUSH1 0x80 PUSH1 0x1 SWAP3 DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP5 DUP3 ADD MLOAD PUSH2 0x1F2B DUP2 PUSH2 0x1015 JUMP JUMPDEST DUP4 DUP7 ADD MSTORE PUSH1 0x40 DUP3 DUP2 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP4 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 ADD MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE ADD SWAP6 ADD SWAP4 SWAP3 SWAP2 ADD PUSH2 0x1EF6 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0xB23 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x1EE5 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x1FA1 PUSH2 0x1F9C PUSH2 0x1270 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x95A JUMP JUMPDEST PUSH2 0x5A72 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1EE5 JUMP JUMPDEST SWAP4 SWAP5 PUSH1 0xC0 SWAP2 PUSH2 0xB23 SWAP9 SWAP7 PUSH2 0x2074 SWAP6 PUSH2 0x204B SWAP6 PUSH2 0x140 SWAP4 DUP10 MSTORE PUSH1 0x20 DUP10 ADD MSTORE PUSH1 0x40 DUP9 ADD MSTORE PUSH1 0x60 DUP8 ADD MSTORE DUP1 PUSH1 0x80 DUP8 ADD MSTORE DUP2 MLOAD SWAP1 PUSH2 0x1FEE DUP3 PUSH2 0x1015 JUMP JUMPDEST DUP7 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH2 0x160 DUP8 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD DUP2 AND PUSH2 0x180 DUP8 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD AND PUSH2 0x1A0 DUP7 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH2 0x1C0 DUP7 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH2 0x1E0 DUP7 ADD MSTORE ADD MLOAD PUSH1 0xE0 PUSH2 0x200 DUP6 ADD MSTORE PUSH2 0x220 DUP5 ADD SWAP1 PUSH2 0x1177 JUMP JUMPDEST DUP5 MLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x60 SWAP1 SWAP5 ADD MLOAD PUSH2 0x100 DUP4 ADD MSTORE JUMP JUMPDEST PUSH2 0x120 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x10B8 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0xC0 PUSH0 PUSH2 0x2093 CALLDATASIZE PUSH2 0x1646 JUMP JUMPDEST SWAP1 PUSH1 0x40 SWAP3 DUP4 MLOAD PUSH2 0x20A2 DUP2 PUSH2 0x873 JUMP JUMPDEST DUP6 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP7 DUP3 DUP3 ADD MSTORE DUP7 DUP7 DUP3 ADD MSTORE PUSH1 0x60 SWAP8 DUP2 DUP9 DUP11 DUP1 SWAP5 ADD MSTORE DUP9 PUSH1 0x80 DUP3 ADD MSTORE DUP9 PUSH1 0xA0 DUP3 ADD MSTORE ADD MSTORE PUSH2 0x20D2 PUSH2 0x5928 JUMP JUMPDEST POP PUSH2 0x20DB PUSH2 0x5637 JUMP JUMPDEST POP PUSH2 0x20E7 DUP5 DUP5 DUP5 PUSH2 0x7EA8 JUMP JUMPDEST SWAP5 PUSH2 0x20F0 PUSH2 0x79F6 JUMP JUMPDEST PUSH2 0x20F8 PUSH2 0x5B3F JUMP JUMPDEST SWAP2 DUP4 MLOAD PUSH2 0x2104 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x210D DUP2 PUSH2 0x1015 JUMP JUMPDEST ISZERO PUSH2 0x24BC JUMPI JUMPDEST DUP1 DUP8 ADD PUSH2 0x2120 DUP2 MLOAD PUSH2 0xAF52 JUMP JUMPDEST DUP2 PUSH2 0x2180 DUP2 DUP8 ADD SWAP10 PUSH2 0x214B PUSH2 0x213F PUSH2 0x213F DUP14 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 DUP7 MLOAD SWAP13 DUP14 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x72C9818600000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x1759 JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP9 DUP10 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP10 PUSH2 0x249D JUMPI JUMPDEST POP DUP9 PUSH2 0x219D DUP2 PUSH2 0xAF52 JUMP JUMPDEST DUP6 MLOAD PUSH2 0x21A8 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x21B1 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x2423 JUMPI POP DUP3 DUP7 ADD MLOAD SWAP1 MSTORE PUSH2 0x21F5 PUSH1 0xC0 DUP8 ADD MLOAD PUSH2 0x21EE PUSH2 0x21E8 PUSH2 0x21D9 DUP6 DUP11 ADD SWAP4 DUP5 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP3 PUSH1 0xA0 DUP12 ADD MLOAD SWAP1 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0xB187 JUMP JUMPDEST SWAP1 DUP11 PUSH2 0xB846 JUMP JUMPDEST SWAP7 PUSH1 0x80 DUP6 ADD MLOAD SWAP4 DUP9 SWAP5 SWAP11 PUSH1 0xA0 DUP8 ADD MLOAD DUP1 DUP12 LT PUSH2 0x23F2 JUMPI POP SWAP1 DUP6 SWAP2 JUMPDEST DUP13 DUP7 DUP10 ADD SWAP5 DUP2 DUP7 MLOAD PUSH2 0x2228 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x2232 SWAP2 PUSH2 0x97C5 JUMP JUMPDEST DUP3 DUP11 ADD SWAP7 DUP6 DUP9 MLOAD PUSH2 0x2249 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x2253 SWAP2 PUSH2 0x7AC1 JUMP JUMPDEST DUP12 DUP14 DUP7 MLOAD DUP5 MLOAD PUSH2 0x2269 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP11 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 MLOAD SWAP2 PUSH2 0x2281 SWAP4 DUP6 PUSH2 0xAFE7 JUMP JUMPDEST SWAP4 SWAP1 DUP13 DUP3 DUP11 ADD SWAP10 ADD SWAP5 DUP6 MSTORE DUP9 MSTORE DUP3 MLOAD DUP8 DUP4 ADD SWAP5 DUP8 DUP3 DUP8 MLOAD SWAP1 PUSH2 0x22A2 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x22AD SWAP2 PUSH2 0x6C6A JUMP JUMPDEST SWAP1 MLOAD PUSH2 0x22B8 SWAP2 PUSH2 0x57A4 JUMP JUMPDEST PUSH2 0x22C2 SWAP2 DUP5 PUSH2 0xB742 JUMP JUMPDEST DUP3 ADD SWAP3 DUP4 MLOAD DUP10 DUP2 DUP4 MLOAD SWAP1 PUSH2 0x22D5 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x22E0 SWAP2 PUSH2 0x57A4 JUMP JUMPDEST PUSH2 0x22EA SWAP2 DUP5 PUSH2 0xB742 JUMP JUMPDEST DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP3 DUP2 MLOAD DUP2 MLOAD PUSH2 0x2310 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP3 PUSH1 0x80 ADD SWAP3 DUP4 MLOAD DUP3 MLOAD PUSH2 0x2323 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x232D SWAP2 PUSH2 0x7295 JUMP JUMPDEST SWAP1 MLOAD PUSH2 0x2341 SWAP1 DUP6 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE MLOAD DUP4 MLOAD PUSH2 0x234E SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 MLOAD DUP4 MLOAD PUSH2 0x235C SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x2366 SWAP2 PUSH2 0x7295 JUMP JUMPDEST SWAP2 MLOAD PUSH2 0x2379 SWAP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE MLOAD SWAP5 MLOAD SWAP6 MLOAD SWAP2 DUP11 ADD MLOAD SWAP3 MLOAD DUP8 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x40 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP4 DUP3 AND SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH32 0x874B2D545CB271CDBDA4E093020C452328B24AF12382ED62C4D00F5C26709DB SWAP1 PUSH1 0x80 SWAP1 LOG4 PUSH2 0x23E4 PUSH2 0x7A4B JUMP JUMPDEST MLOAD SWAP7 DUP8 SWAP7 PUSH2 0x1270 SWAP7 DUP9 PUSH2 0x1FB5 JUMP JUMPDEST PUSH32 0xE2EA151B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 DUP12 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 JUMPDEST PUSH0 REVERT JUMPDEST SWAP1 POP PUSH2 0x2452 SWAP2 SWAP9 POP PUSH2 0x2449 DUP11 DUP8 ADD MLOAD PUSH8 0xDE0B6B3A7640000 DUP2 DUP2 SUB SWAP1 DUP3 LT MUL SWAP1 DUP4 PUSH2 0xC061 JUMP JUMPDEST SWAP1 DUP2 DUP6 MSTORE PUSH2 0x6C6A JUMP JUMPDEST SWAP7 PUSH2 0x247F PUSH2 0x2466 PUSH1 0xC0 DUP9 ADD MLOAD DUP8 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x2477 PUSH1 0xA0 DUP10 ADD MLOAD DUP9 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 DUP11 PUSH2 0xB72E JUMP JUMPDEST SWAP7 PUSH1 0x80 DUP6 ADD MLOAD SWAP4 DUP9 SWAP11 PUSH1 0xA0 DUP8 ADD MLOAD DUP1 DUP12 GT PUSH2 0x23F2 JUMPI POP SWAP1 DUP6 SWAP2 PUSH2 0x2210 JUMP JUMPDEST PUSH2 0x24B5 SWAP2 SWAP10 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP8 PUSH0 PUSH2 0x2192 JUMP JUMPDEST DUP1 DUP8 ADD PUSH2 0x24DB PUSH2 0x24D1 DUP3 MLOAD DUP13 DUP10 ADD MLOAD SWAP1 PUSH2 0xB824 JUMP JUMPDEST DUP1 DUP7 MSTORE DUP3 MLOAD PUSH2 0x57A4 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x2113 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH2 0xEE7 PUSH1 0x4 CALLDATALOAD PUSH2 0x2504 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0xB DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x910F JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x6DC JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x4 CALLDATALOAD DUP4 DUP2 GT PUSH2 0x6DC JUMPI DUP3 PUSH2 0x254B SWAP2 PUSH1 0x4 ADD PUSH2 0xD73 JUMP JUMPDEST SWAP3 PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI DUP4 PUSH2 0xFD1 SWAP2 PUSH1 0x4 ADD PUSH2 0x1C9B JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x2582 PUSH2 0x2574 CALLDATASIZE PUSH2 0x251E JUMP JUMPDEST SWAP2 PUSH2 0x257D PUSH2 0x79F6 JUMP JUMPDEST PUSH2 0x8470 JUMP JUMPDEST POP POP POP POP PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x25D0 DUP2 PUSH2 0x6CB JUMP JUMPDEST AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH2 0x1318 PUSH1 0x24 CALLDATALOAD PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x91E1 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x2619 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xB26 JUMP JUMPDEST PUSH2 0x2621 PUSH2 0x7A70 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2639 DUP2 DUP4 MLOAD AND PUSH2 0x807C JUMP JUMPDEST PUSH2 0x264D PUSH2 0x1D95 DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MLOAD ISZERO PUSH2 0x2856 JUMPI PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x267D PUSH2 0x213F PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP2 AND EQ PUSH2 0x282E JUMPI PUSH2 0x2698 PUSH2 0x1DAE DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x26A3 DUP4 DUP3 PUSH2 0x9254 JUMP JUMPDEST SWAP1 PUSH2 0x26AF DUP5 DUP4 DUP4 PUSH2 0x7EA8 JUMP JUMPDEST DUP5 MLOAD PUSH1 0xC SHR PUSH1 0x1 AND PUSH2 0x27B3 JUMPI JUMPDEST DUP5 MLOAD PUSH2 0x26D6 SWAP2 SWAP1 PUSH1 0xB SHR PUSH1 0x1 AND PUSH2 0x2772 JUMPI JUMPDEST DUP6 DUP5 DUP5 PUSH2 0x8D04 JUMP JUMPDEST SWAP7 SWAP2 SWAP7 SWAP5 SWAP1 SWAP7 DUP4 SWAP7 PUSH2 0x26ED DUP5 MLOAD PUSH1 0x1 SWAP1 PUSH1 0xD SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x273D JUMPI JUMPDEST POP POP POP POP POP MLOAD PUSH2 0x2701 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x270A DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x2731 JUMPI POP PUSH2 0x1270 DUP2 JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 PUSH1 0x60 DUP3 ADD SWAP6 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP2 POP PUSH2 0x1270 DUP2 SWAP3 PUSH2 0x2714 JUMP JUMPDEST DUP6 SWAP8 POP SWAP1 PUSH2 0x275C PUSH2 0x1E6C PUSH2 0x1E55 PUSH2 0x2767 SWAP9 SWAP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 DUP5 MLOAD SWAP2 CALLER SWAP3 PUSH2 0x953C JUMP JUMPDEST SWAP2 PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x26F2 JUMP JUMPDEST DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x27AC PUSH1 0x60 DUP7 ADD SWAP2 DUP3 MLOAD PUSH2 0x27A5 PUSH2 0x1E6C DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 DUP6 PUSH2 0x9391 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x26CE JUMP JUMPDEST PUSH2 0x27EC SWAP1 PUSH2 0x27C8 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x27E6 PUSH2 0x1E6C DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x92B9 JUMP JUMPDEST PUSH2 0x2809 PUSH2 0x2803 PUSH2 0x1A9D DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP6 PUSH2 0x82A9 JUMP JUMPDEST PUSH2 0x2814 DUP3 DUP6 DUP4 PUSH2 0x6A65 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x26D6 PUSH2 0x2827 DUP6 DUP5 DUP5 PUSH2 0x7EA8 JUMP JUMPDEST SWAP1 POP PUSH2 0x26BC JUMP JUMPDEST PUSH32 0xA54B181D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x57A456B700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD DUP1 PUSH2 0x2899 JUMPI STOP JUMPDEST PUSH2 0x7C2 SWAP1 PUSH2 0xAF52 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x28BF DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH2 0x28C7 PUSH2 0x79F6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP2 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x44 DUP2 PUSH0 ADDRESS GAS CALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x1270 SWAP2 PUSH0 SWAP2 PUSH2 0x2926 JUMPI JUMPDEST POP PUSH2 0x15A4 PUSH2 0x7A4B JUMP JUMPDEST PUSH2 0x293F SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x291D JUMP JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x295E DUP2 PUSH2 0x6CB JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x6DC JUMPI PUSH2 0xB23 SWAP2 PUSH1 0x4 ADD PUSH2 0x95A JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x298C CALLDATASIZE PUSH2 0x2945 JUMP JUMPDEST SWAP1 PUSH2 0x2997 DUP3 MLOAD PUSH2 0x594C JUMP JUMPDEST SWAP2 PUSH2 0x29A0 PUSH2 0x5B3F JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x29EB JUMPI DUP1 PUSH2 0x29E5 PUSH2 0x29CC PUSH2 0x29BF PUSH1 0x1 SWAP5 DUP8 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x29D6 DUP4 DUP10 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST ADD PUSH2 0x29A3 JUMP JUMPDEST DUP5 DUP3 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND PUSH2 0x2A20 PUSH2 0x6A43 JUMP JUMPDEST SWAP4 DUP2 EXTCODESIZE ISZERO PUSH2 0x6DC JUMPI PUSH0 DUP1 SWAP5 PUSH2 0x1C6B PUSH1 0x40 MLOAD SWAP8 DUP9 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xD396A66600000000000000000000000000000000000000000000000000000000 DUP7 MSTORE PUSH1 0x4 DUP7 ADD PUSH2 0x5B5D JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x40 SWAP2 ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x2A7C DUP2 PUSH2 0x6CB JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD PUSH2 0xB23 DUP2 PUSH2 0xBB3 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2A9F CALLDATASIZE PUSH2 0x2A64 JUMP JUMPDEST SWAP2 AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE DUP3 SLOAD AND OR SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST PUSH1 0x3 NOT PUSH1 0x40 SWAP2 ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x2AEF DUP2 PUSH2 0x6CB JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD PUSH2 0xB23 DUP2 PUSH2 0x6CB JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x2B4A PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2B28 CALLDATASIZE PUSH2 0x2AD7 JUMP JUMPDEST SWAP2 AND PUSH0 MSTORE PUSH1 0x6 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x3 NOT PUSH1 0xA0 SWAP2 ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x83E JUMPI PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATALOAD PUSH2 0x2B89 DUP2 PUSH2 0xAA1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x24 CALLDATALOAD PUSH2 0x2B97 DUP2 PUSH2 0xAA1 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH2 0x2BA8 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x84 CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x2BCE CALLDATASIZE PUSH2 0x2B54 JUMP JUMPDEST PUSH2 0x2BD6 PUSH2 0x79F6 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD SWAP2 PUSH32 0x43583BE500000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP1 MLOAD PUSH2 0x2C0A DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x2C1D DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x64 DUP5 ADD MSTORE ADD MLOAD PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0x60 DUP2 PUSH1 0xA4 DUP2 PUSH0 ADDRESS GAS CALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH0 SWAP2 PUSH2 0x2C6E JUMPI JUMPDEST POP PUSH2 0x1270 SWAP1 PUSH2 0x2714 PUSH2 0x7A4B JUMP JUMPDEST SWAP1 POP PUSH2 0x1270 SWAP3 POP PUSH2 0x2C97 SWAP2 POP PUSH1 0x60 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x2C9E JUMPI JUMPDEST PUSH2 0x2C8F DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x5BEA JUMP JUMPDEST SWAP1 SWAP3 PUSH2 0x2C61 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2C85 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x2CCA DUP2 PUSH2 0x6CB JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x2D04 DUP2 PUSH2 0x6CB JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 SWAP1 PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP2 PUSH2 0x2D26 DUP4 PUSH2 0x57E7 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x2D3E JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0x1270 DUP9 DUP3 PUSH2 0x195A JUMP JUMPDEST DUP1 PUSH1 0x1 SWAP2 PUSH0 MSTORE DUP4 DUP4 MSTORE PUSH2 0x2D54 DUP6 PUSH0 KECCAK256 SLOAD PUSH1 0x80 SHR SWAP1 JUMP JUMPDEST PUSH2 0x2D5E DUP3 DUP10 PUSH2 0x5818 JUMP JUMPDEST MSTORE ADD PUSH2 0x2D29 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH2 0x7C2 PUSH1 0x4 CALLDATALOAD PUSH2 0x2D85 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH2 0x2D90 PUSH1 0x24 CALLDATALOAD PUSH2 0xBA85 JUMP JUMPDEST SWAP1 PUSH2 0xADB5 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH2 0x2DF4 PUSH1 0x4 CALLDATALOAD PUSH2 0x2DB8 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH32 0x0 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x2E0C CALLDATASIZE PUSH2 0x2B54 JUMP JUMPDEST PUSH2 0x2E14 PUSH2 0x7A70 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x2 SHR PUSH1 0x1 AND PUSH2 0x312A JUMPI PUSH1 0x40 SWAP1 DUP2 DUP2 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP2 MLOAD AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE DUP1 DUP4 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x30FE JUMPI PUSH1 0x4 SWAP5 POP PUSH2 0x2E55 PUSH2 0x79F6 JUMP JUMPDEST PUSH1 0x20 PUSH2 0x2E6B PUSH2 0x213F DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP5 MLOAD SWAP7 DUP8 DUP1 SWAP3 PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH1 0x80 SWAP6 PUSH0 SWAP2 PUSH2 0x30CF JUMPI JUMPDEST POP AND PUSH2 0x2EC2 DUP2 PUSH2 0x2EBD DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x97D1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x2EDE PUSH1 0x60 DUP7 ADD SWAP3 DUP4 MLOAD SWAP1 PUSH2 0x9827 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0x2EEE DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x2EF7 DUP2 PUSH2 0x1015 JUMP JUMPDEST SUB PUSH2 0x3064 JUMPI PUSH2 0x2F1F SWAP2 DUP6 MLOAD SWAP2 PUSH2 0x2F0C DUP4 PUSH2 0x1015 JUMP JUMPDEST DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 MLOAD SWAP3 PUSH2 0xA512 JUMP JUMPDEST PUSH32 0xEEB740C90BF2B18C9532EB7D473137767036D893DFF3E009F32718F821B2A4C0 DUP3 SWAP7 SWAP3 SWAP8 SWAP4 SWAP8 SWAP7 DUP9 PUSH2 0x2F7C PUSH2 0x2F5F PUSH2 0x213F DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 DUP10 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 PUSH1 0x60 DUP3 ADD SWAP6 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 JUMPDEST DUP1 MLOAD PUSH2 0x2F8B DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x2F94 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x3015 JUMPI ADD MLOAD DUP1 DUP5 LT PUSH2 0x2FE5 JUMPI POP MLOAD PUSH2 0x1270 SWAP2 DUP4 SWAP2 PUSH2 0x2FC2 SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x9827 JUMP JUMPDEST PUSH2 0x9827 JUMP JUMPDEST PUSH2 0x2FCA PUSH2 0x7A4B JUMP JUMPDEST MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 PUSH1 0x60 DUP3 ADD SWAP6 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST PUSH32 0xE2EA151B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 DUP5 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST ADD MLOAD DUP1 DUP6 GT PUSH2 0x3034 JUMPI POP SWAP2 PUSH2 0x1270 SWAP2 PUSH2 0x2FC2 PUSH2 0x2FBD SWAP5 DUP7 SWAP6 DUP7 SWAP2 PUSH2 0x29BF JUMP JUMPDEST PUSH32 0xE2EA151B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 DUP6 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x3087 SWAP2 DUP6 MLOAD SWAP2 PUSH2 0x3074 DUP4 PUSH2 0x1015 JUMP JUMPDEST DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 MLOAD SWAP3 PUSH2 0x9D6E JUMP JUMPDEST PUSH32 0x3771D13C67011E31E12031C54BB59B0BF544A80B81D280A3711E172AA8B7F47B DUP3 SWAP7 SWAP3 SWAP8 SWAP4 SWAP8 SWAP7 DUP9 PUSH2 0x30C7 PUSH2 0x2F5F PUSH2 0x213F DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 PUSH2 0x2F80 JUMP JUMPDEST PUSH2 0x30F1 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x30F7 JUMPI JUMPDEST PUSH2 0x30E9 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x5C05 JUMP JUMPDEST PUSH0 PUSH2 0x2EA6 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x30DF JUMP JUMPDEST DUP5 PUSH32 0x85F4129900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xF27DF0900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x31A5 PUSH2 0x31C7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x316E CALLDATASIZE PUSH2 0x6FB JUMP JUMPDEST SWAP5 SWAP2 SWAP3 SWAP1 SWAP3 AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH2 0x319B DUP4 PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x80 SHR SWAP1 PUSH2 0x7295 JUMP JUMPDEST SWAP3 PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE STOP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x31FC SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xB26 JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x6DC JUMPI PUSH1 0x80 SWAP2 PUSH2 0x321B PUSH2 0x322A SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xD73 JUMP JUMPDEST SWAP1 PUSH2 0x3224 PUSH2 0x5928 JUMP JUMPDEST POP PUSH2 0x9254 JUMP JUMPDEST PUSH2 0x3255 PUSH1 0x40 MLOAD DUP1 SWAP3 PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x7C2 PUSH2 0x3268 CALLDATASIZE PUSH2 0x6FB JUMP JUMPDEST SWAP2 PUSH2 0xA837 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0xB23 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x1177 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x6DC JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x6DC JUMPI CALLDATASIZE PUSH1 0x24 DUP4 DUP4 ADD ADD GT PUSH2 0x6DC JUMPI PUSH2 0x1270 SWAP2 PUSH1 0x24 PUSH2 0x32D6 SWAP3 ADD PUSH2 0x5C1A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x326E JUMP JUMPDEST PUSH2 0x32F8 PUSH2 0xB23 SWAP5 SWAP3 PUSH1 0x60 DUP4 MSTORE PUSH1 0x60 DUP4 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x1177 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x333C SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xEFC JUMP JUMPDEST PUSH2 0x3344 PUSH2 0x7A70 JUMP JUMPDEST PUSH2 0x3357 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 MLOAD AND PUSH2 0x807C JUMP JUMPDEST PUSH2 0x336B PUSH2 0x1D95 DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x33C8 PUSH32 0x0 TLOAD PUSH2 0x33A1 DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0x0 PUSH2 0xA996 JUMP JUMPDEST PUSH2 0x33E1 PUSH2 0x33DC DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x77EA JUMP JUMPDEST PUSH2 0x3434 PUSH1 0x20 DUP3 ADD MLOAD MLOAD PUSH2 0x33FB PUSH1 0x40 DUP6 ADD SWAP2 DUP3 MLOAD MLOAD SWAP1 PUSH2 0x80D5 JUMP JUMPDEST DUP1 MLOAD PUSH1 0xC0 DUP5 ADD SWAP1 PUSH2 0x3415 DUP3 MLOAD SWAP2 PUSH1 0xA0 DUP8 ADD SWAP3 DUP4 MLOAD SWAP2 PUSH2 0xA9AF JUMP JUMPDEST SWAP3 PUSH2 0x3425 DUP7 MLOAD PUSH1 0x1 SWAP1 PUSH1 0xE SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x3498 JUMPI JUMPDEST POP POP POP DUP4 DUP4 PUSH2 0x6CA2 JUMP JUMPDEST SWAP2 SWAP1 SWAP5 SWAP3 SWAP4 DUP5 SWAP4 DUP7 PUSH2 0x344B DUP4 MLOAD PUSH1 0x1 SWAP1 PUSH1 0xF SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x3461 JUMPI JUMPDEST DUP6 PUSH2 0x1270 DUP7 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x32E2 JUMP JUMPDEST PUSH2 0x1270 SWAP6 POP PUSH2 0x348C SWAP5 SWAP7 PUSH2 0x3482 PUSH2 0x1E6C PUSH2 0x1E55 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 DUP5 MLOAD CALLER SWAP1 PUSH2 0xABBB JUMP JUMPDEST SWAP1 POP DUP2 PUSH0 DUP1 DUP1 DUP7 PUSH2 0x3450 JUMP JUMPDEST PUSH2 0x34BF PUSH2 0x34E7 SWAP5 DUP8 DUP10 PUSH2 0x34B8 PUSH2 0x1E6C PUSH2 0x1E55 DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 CALLER PUSH2 0xAA76 JUMP JUMPDEST PUSH2 0x34DC PUSH2 0x34D6 PUSH2 0x1A9D DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP8 PUSH2 0x834D JUMP JUMPDEST MLOAD SWAP2 MLOAD SWAP1 MLOAD SWAP2 PUSH2 0xA9AF JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0x342A JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x3514 DUP2 PUSH2 0x6CB JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC PUSH1 0x80 SWAP2 ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0x3561 DUP3 PUSH2 0x843 JUMP JUMPDEST DUP2 PUSH1 0x24 CALLDATALOAD PUSH2 0x356E DUP2 PUSH2 0xBB3 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x44 CALLDATALOAD PUSH2 0x357C DUP2 PUSH2 0xBB3 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH2 0x358D DUP2 PUSH2 0xBB3 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x84 CALLDATALOAD SWAP2 PUSH2 0x35A1 DUP4 PUSH2 0xBB3 JUMP JUMPDEST ADD MSTORE JUMP JUMPDEST PUSH2 0x104 CALLDATALOAD SWAP1 PUSH5 0xFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x6DC JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x1C0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x35D8 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH2 0x1A0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH2 0x7C2 SWAP1 PUSH2 0x360F PUSH2 0x8DF JUMP JUMPDEST SWAP1 PUSH2 0x3619 CALLDATASIZE PUSH2 0x352A JUMP JUMPDEST DUP3 MSTORE PUSH1 0xA4 CALLDATALOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0xC4 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xE4 CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x363B PUSH2 0x35A5 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x3648 PUSH2 0x9D7 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0x3655 PUSH2 0xBBD JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x3662 PUSH2 0xBCB JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x366F PUSH2 0xBD9 JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE PUSH2 0x367D PUSH2 0xBE7 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE PUSH2 0x5CE7 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x369E CALLDATASIZE PUSH2 0x2A64 JUMP JUMPDEST SWAP2 AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD DUP3 SLOAD AND SWAP1 PUSH1 0x1 SHL OR SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0x0 TSTORE STOP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x6DC JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x372C DUP2 PUSH2 0x942 JUMP JUMPDEST SWAP4 PUSH2 0x373A PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x88F JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x6DC JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x3763 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 DUP1 SWAP2 DUP4 CALLDATALOAD PUSH2 0x3771 DUP2 PUSH2 0x6CB JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x3755 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x37AF SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x95A JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x37C8 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3712 JUMP JUMPDEST PUSH2 0x37D2 DUP3 MLOAD PUSH2 0x594C JUMP JUMPDEST SWAP3 PUSH0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x3857 JUMPI DUP1 PUSH2 0x37F1 PUSH2 0x29CC PUSH2 0x29BF PUSH1 0x1 SWAP5 DUP9 PUSH2 0x5818 JUMP JUMPDEST PUSH2 0x381C PUSH2 0x3801 PUSH2 0x29BF DUP4 DUP8 PUSH2 0x5818 JUMP JUMPDEST DUP5 PUSH2 0x380C DUP5 DUP11 PUSH2 0x5818 JUMP JUMPDEST MLOAD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x382C PUSH2 0x213F PUSH2 0x29BF DUP4 DUP8 PUSH2 0x5818 JUMP JUMPDEST PUSH2 0x384E JUMPI PUSH2 0x3848 PUSH0 JUMPDEST PUSH1 0x20 PUSH2 0x3841 DUP5 DUP11 PUSH2 0x5818 JUMP JUMPDEST MLOAD ADD PUSH2 0x5F73 JUMP JUMPDEST ADD PUSH2 0x37D5 JUMP JUMPDEST PUSH2 0x3848 DUP3 PUSH2 0x3835 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xBB4AD7D500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH0 DUP2 DUP1 PUSH2 0x388D DUP10 PUSH1 0x4 DUP4 ADD PUSH2 0x1F54 JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x1270 SWAP2 PUSH0 SWAP2 PUSH2 0x38D9 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x1F54 JUMP JUMPDEST PUSH2 0x38F5 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x38ED DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x599A JUMP JUMPDEST DUP3 PUSH2 0x38CC JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x6DC JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x3915 DUP2 PUSH2 0x942 JUMP JUMPDEST SWAP4 PUSH2 0x3923 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x88F JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x6DC JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x394C JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 DUP1 SWAP2 DUP4 CALLDATALOAD PUSH2 0x395A DUP2 PUSH2 0xBB3 JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x393E JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x3997 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x95A JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD SWAP2 DUP2 DUP4 GT PUSH2 0x6DC JUMPI CALLDATASIZE PUSH1 0x23 DUP5 ADD SLT ISZERO PUSH2 0x6DC JUMPI DUP3 PUSH1 0x4 ADD CALLDATALOAD PUSH2 0x39BC DUP2 PUSH2 0x942 JUMP JUMPDEST SWAP4 PUSH2 0x39CA PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x88F JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 SWAP2 PUSH1 0x24 PUSH1 0x20 DUP8 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x6DC JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x3A3E JUMPI POP POP POP POP PUSH1 0x44 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x3A0D SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3712 JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP3 DUP4 GT PUSH2 0x6DC JUMPI PUSH2 0x1270 SWAP4 PUSH2 0x3A2C PUSH2 0x3A32 SWAP5 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x38FB JUMP JUMPDEST SWAP3 PUSH2 0x5F86 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x1F54 JUMP JUMPDEST DUP4 DUP1 SWAP2 DUP4 CALLDATALOAD PUSH2 0x3A4C DUP2 PUSH2 0xAA1 JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x39EA JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH2 0x7C2 PUSH1 0x4 CALLDATALOAD PUSH2 0x3A77 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH2 0x807C JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x3A99 DUP2 PUSH2 0xBB3 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD PUSH1 0x7 SLOAD AND SWAP1 PUSH1 0x1 SHL OR PUSH1 0x7 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH0 PUSH32 0x0 TSTORE STOP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x31A5 PUSH2 0x31C7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x3B1B CALLDATASIZE PUSH2 0x6FB JUMP JUMPDEST SWAP5 SWAP2 SWAP3 SWAP1 SWAP3 AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x3B59 DUP5 PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD AND PUSH2 0x7295 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH32 0x0 TSTORE STOP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH2 0x7C2 PUSH1 0x4 CALLDATALOAD PUSH2 0x3BB6 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x24 CALLDATALOAD SWAP2 PUSH2 0x3BCB DUP4 PUSH2 0x6CB JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x2 PUSH1 0x40 PUSH0 KECCAK256 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x40 SWAP2 ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x3C25 DUP2 PUSH2 0x6CB JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x7C2 PUSH2 0x2D90 CALLDATASIZE PUSH2 0x3C0D JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH32 0x0 TLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x3C8F CALLDATASIZE PUSH2 0x2945 JUMP JUMPDEST SWAP2 AND PUSH0 MSTORE PUSH1 0x20 SWAP1 PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x83E JUMPI PUSH9 0x10000000000000000 DUP4 GT PUSH2 0x83E JUMPI DUP2 SLOAD DUP4 DUP4 SSTORE DUP1 DUP5 LT PUSH2 0x3D0E JUMPI JUMPDEST POP PUSH1 0x20 PUSH2 0x3CE0 SWAP2 ADD SWAP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP3 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0x3CEC JUMPI STOP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH2 0x3D01 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 ADD SWAP4 DUP2 DUP8 ADD SSTORE ADD PUSH2 0x3CE3 JUMP JUMPDEST DUP3 PUSH0 MSTORE DUP4 PUSH1 0x20 PUSH0 KECCAK256 SWAP2 DUP3 ADD SWAP2 ADD JUMPDEST DUP2 DUP2 LT PUSH2 0x3D29 JUMPI POP PUSH2 0x3CCE JUMP JUMPDEST PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x3D1C JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x3D42 CALLDATASIZE PUSH2 0x2945 JUMP JUMPDEST SWAP1 PUSH2 0x3D4B PUSH2 0x69D7 JUMP JUMPDEST PUSH2 0x3D53 PUSH2 0x5B3F JUMP JUMPDEST SWAP1 PUSH2 0x3D87 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP4 PUSH2 0x5A72 JUMP JUMPDEST SWAP2 PUSH0 SWAP4 PUSH2 0x3D92 PUSH2 0x6A43 JUMP JUMPDEST SWAP4 DUP2 EXTCODESIZE ISZERO PUSH2 0x6DC JUMPI PUSH0 DUP1 SWAP5 PUSH2 0x3DD6 PUSH1 0x40 MLOAD SWAP8 DUP9 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xD396A66600000000000000000000000000000000000000000000000000000000 DUP7 MSTORE PUSH1 0x4 DUP7 ADD PUSH2 0x5B5D JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x3DE8 JUMPI POP DUP1 RETURN JUMPDEST PUSH2 0x7C2 SWAP2 POP PUSH2 0x85F JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x3E17 DUP2 PUSH2 0x6CB JUMP JUMPDEST AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x3 SHR AND ISZERO PUSH2 0x3E31 JUMPI STOP JUMPDEST PUSH32 0xEF029ADF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH2 0x3EDC PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x3EBA CALLDATASIZE PUSH2 0x2AD7 JUMP JUMPDEST SWAP2 AND PUSH0 MSTORE PUSH1 0x6 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x80 SHR PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x3F0D DUP2 PUSH2 0x6CB JUMP JUMPDEST AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH2 0x1318 PUSH1 0x24 CALLDATALOAD PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0xAD75 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x3F33 CALLDATASIZE PUSH2 0x1646 JUMP JUMPDEST PUSH2 0x3F3E SWAP3 SWAP2 SWAP3 PUSH2 0x79F6 JUMP JUMPDEST PUSH2 0x3F49 DUP2 DUP5 DUP5 PUSH2 0x7EA8 JUMP JUMPDEST SWAP3 PUSH2 0x3F52 PUSH2 0x79F6 JUMP JUMPDEST PUSH2 0x3F5A PUSH2 0x5B3F JUMP JUMPDEST SWAP1 DUP4 MLOAD PUSH2 0x3F66 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x3F6F DUP2 PUSH2 0x1015 JUMP JUMPDEST ISZERO PUSH2 0x42F9 JUMPI JUMPDEST PUSH1 0x20 SWAP5 PUSH0 DUP7 DUP3 ADD PUSH2 0x3F86 DUP2 MLOAD PUSH2 0xAF52 JUMP JUMPDEST DUP8 PUSH2 0x3FDB DUP2 DUP10 ADD SWAP5 PUSH2 0x3FA5 PUSH2 0x213F PUSH2 0x213F DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x72C9818600000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x1759 JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP3 PUSH2 0x42DA JUMPI JUMPDEST POP PUSH2 0x3FF7 DUP3 PUSH2 0xAF52 JUMP JUMPDEST DUP7 MLOAD PUSH2 0x4002 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x400B DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x4266 JUMPI SWAP1 PUSH2 0x404A SWAP2 PUSH1 0x40 DUP6 ADD MLOAD SWAP1 MSTORE PUSH1 0xC0 DUP7 ADD MLOAD PUSH2 0x4044 PUSH2 0x21E8 PUSH2 0x4035 DUP12 DUP9 ADD SWAP4 DUP5 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP3 PUSH1 0xA0 DUP11 ADD MLOAD SWAP1 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST SWAP2 PUSH2 0xB846 JUMP JUMPDEST SWAP1 PUSH1 0x80 DUP7 ADD MLOAD SWAP5 DUP3 SWAP6 SWAP3 PUSH1 0xA0 DUP9 ADD MLOAD SWAP1 DUP2 DUP2 LT PUSH2 0x4238 JUMPI POP POP JUMPDEST PUSH1 0x40 DUP8 ADD SWAP7 DUP4 DUP9 MLOAD PUSH2 0x407C SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x4086 SWAP2 PUSH2 0x97C5 JUMP JUMPDEST PUSH1 0x60 ADD SWAP8 DUP7 DUP10 MLOAD PUSH2 0x409D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x40A7 SWAP2 PUSH2 0x7AC1 JUMP JUMPDEST DUP6 MLOAD DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MLOAD SWAP2 PUSH2 0x40CC SWAP4 DUP7 PUSH2 0xAFE7 JUMP JUMPDEST SWAP2 SWAP1 DUP2 DUP9 ADD SWAP8 PUSH1 0x40 ADD SWAP3 DUP4 MSTORE DUP8 MSTORE DUP6 MLOAD PUSH1 0x60 DUP5 ADD SWAP3 DUP7 DUP3 DUP6 MLOAD SWAP1 PUSH2 0x40EF SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x40FA SWAP2 PUSH2 0x6C6A JUMP JUMPDEST SWAP1 MLOAD PUSH2 0x4105 SWAP2 PUSH2 0x57A4 JUMP JUMPDEST PUSH2 0x410F SWAP2 DUP6 PUSH2 0xB742 JUMP JUMPDEST DUP6 ADD SWAP2 DUP3 MLOAD DUP9 DUP2 DUP5 MLOAD SWAP1 PUSH2 0x4122 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x412D SWAP2 PUSH2 0x57A4 JUMP JUMPDEST PUSH2 0x4137 SWAP2 DUP4 PUSH2 0xB742 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 DUP1 MLOAD DUP8 MLOAD PUSH2 0x415D SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP2 PUSH1 0x80 ADD SWAP2 DUP3 MLOAD DUP9 MLOAD PUSH2 0x4170 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x417A SWAP2 PUSH2 0x7295 JUMP JUMPDEST DUP8 MLOAD PUSH2 0x418E SWAP1 DUP6 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE MLOAD DUP4 MLOAD PUSH2 0x419B SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 MLOAD DUP4 MLOAD PUSH2 0x41A9 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x41B3 SWAP2 PUSH2 0x7295 JUMP JUMPDEST SWAP2 MLOAD PUSH2 0x41C6 SWAP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE MLOAD SWAP5 MLOAD SWAP6 MLOAD PUSH1 0x60 SWAP3 DUP4 ADD MLOAD SWAP4 MLOAD PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP5 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 DUP2 AND SWAP3 AND SWAP1 PUSH32 0x874B2D545CB271CDBDA4E093020C452328B24AF12382ED62C4D00F5C26709DB SWAP1 PUSH1 0x80 SWAP1 LOG4 PUSH2 0x4230 PUSH2 0x7A4B JUMP JUMPDEST PUSH2 0x7C2 PUSH2 0x7A4B JUMP JUMPDEST PUSH32 0xE2EA151B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP PUSH2 0x4296 PUSH2 0x42BE SWAP2 PUSH2 0x428D PUSH1 0x60 DUP7 ADD MLOAD PUSH8 0xDE0B6B3A7640000 DUP2 DUP2 SUB SWAP1 DUP3 LT MUL SWAP1 DUP4 PUSH2 0xC061 JUMP JUMPDEST SWAP1 DUP2 DUP8 MSTORE PUSH2 0x6C6A JUMP JUMPDEST PUSH2 0x42A6 PUSH1 0xC0 DUP8 ADD MLOAD DUP6 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x42B7 PUSH1 0xA0 DUP9 ADD MLOAD DUP7 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP2 PUSH2 0xB72E JUMP JUMPDEST SWAP1 PUSH1 0x80 DUP7 ADD MLOAD SWAP5 DUP3 PUSH1 0xA0 DUP9 ADD MLOAD SWAP1 DUP2 DUP2 GT PUSH2 0x4238 JUMPI POP POP PUSH2 0x4064 JUMP JUMPDEST PUSH2 0x42F2 SWAP2 SWAP3 POP DUP9 RETURNDATASIZE DUP11 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x3FED JUMP JUMPDEST PUSH1 0x20 DUP6 ADD PUSH2 0x431A PUSH2 0x4310 DUP3 MLOAD PUSH1 0x60 DUP6 ADD MLOAD SWAP1 PUSH2 0xB824 JUMP JUMPDEST DUP1 DUP6 MSTORE DUP3 MLOAD PUSH2 0x57A4 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x3F75 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x4346 DUP2 PUSH2 0x6CB JUMP JUMPDEST AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH2 0x1318 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH5 0x174876E800 PUSH1 0x24 CALLDATALOAD DIV SWAP1 PUSH2 0xB875 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH2 0x437E PUSH2 0x79F6 JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD ISZERO PUSH2 0x6DC JUMPI PUSH0 SWAP1 TSTORE STOP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH2 0xEE7 PUSH1 0x4 CALLDATALOAD PUSH2 0x43CD DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0xB DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0xAE78 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x441B PUSH2 0x1270 SWAP2 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xD73 JUMP JUMPDEST PUSH2 0x44B4 PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD PUSH2 0x442D DUP2 PUSH2 0xAA1 JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP1 PUSH2 0x4439 PUSH2 0x5637 JUMP JUMPDEST POP DUP3 PUSH2 0x4449 DUP4 PUSH1 0x60 DUP9 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH2 0x4453 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x44C1 JUMPI PUSH1 0x2 SWAP2 JUMPDEST PUSH2 0x44AD PUSH1 0xC0 DUP7 ADD SWAP3 PUSH2 0x44A5 DUP2 PUSH2 0x4472 DUP2 DUP8 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP6 PUSH2 0x4490 PUSH1 0xA0 DUP12 ADD SWAP8 PUSH2 0x4487 DUP5 DUP11 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 DUP9 DUP12 PUSH2 0xC6E9 JUMP JUMPDEST PUSH2 0x449E DUP4 PUSH1 0x80 DUP14 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP4 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP3 PUSH2 0xC6E9 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x13D9 JUMP JUMPDEST PUSH1 0x1 SWAP2 PUSH2 0x445B JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH2 0x7C2 PUSH1 0x4 CALLDATALOAD PUSH2 0x44E9 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x24 CALLDATALOAD SWAP2 PUSH2 0x44FE DUP4 PUSH2 0x6CB JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x80 SWAP2 ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x4555 DUP2 PUSH2 0x6CB JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD PUSH2 0x4562 DUP2 PUSH2 0x6CB JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x64 CALLDATALOAD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x7C2 PUSH2 0x457E CALLDATASIZE PUSH2 0x453D JUMP JUMPDEST SWAP3 SWAP2 SWAP1 SWAP2 PUSH2 0xAF0D JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x4595 CALLDATASIZE PUSH2 0x6FB JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x459F PUSH2 0x79F6 JUMP JUMPDEST PUSH2 0x45A7 PUSH2 0x7A70 JUMP JUMPDEST PUSH2 0x45B9 PUSH2 0x45B3 DUP4 PUSH2 0xBA85 JUMP JUMPDEST DUP3 PUSH2 0xADB5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP4 DUP4 DUP6 SUB SWAP5 DUP6 GT PUSH2 0x465D JUMPI SWAP4 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP1 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 MSTORE PUSH2 0x4638 SWAP2 SWAP1 PUSH2 0x4633 PUSH1 0x64 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH2 0xC3EE JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH2 0x5769 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH2 0x7C2 PUSH1 0x4 CALLDATALOAD PUSH2 0x4682 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x7AC1 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH2 0x7C2 PUSH1 0x4 CALLDATALOAD PUSH2 0xAF52 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x7C2 PUSH2 0x46F2 CALLDATASIZE PUSH2 0x453D JUMP JUMPDEST SWAP3 SWAP2 SWAP1 SWAP2 PUSH2 0xAFA2 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH2 0x7C2 PUSH2 0x7A70 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH2 0xEE7 PUSH1 0x4 CALLDATALOAD PUSH2 0x4735 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x6111 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 DUP1 CALLDATALOAD PUSH2 0x479F DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x24 CALLDATALOAD DUP4 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x47C1 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x95A JUMP JUMPDEST SWAP3 PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x47DA SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC6C JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH0 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x7C2 JUMPI DUP1 PUSH2 0x47FE PUSH1 0x1 SWAP3 DUP8 PUSH2 0x5818 JUMP JUMPDEST MLOAD DUP4 PUSH0 MSTORE PUSH1 0x20 SWAP1 DUP7 DUP3 MSTORE PUSH1 0x40 SWAP1 PUSH2 0x4834 DUP11 DUP9 PUSH2 0x481D DUP8 DUP7 PUSH0 KECCAK256 SWAP4 PUSH2 0x5818 JUMP JUMPDEST MLOAD AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000 PUSH1 0xFF PUSH22 0xFF000000000000000000000000000000000000000000 DUP5 MLOAD SWAP6 PUSH2 0x487B DUP8 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x4884 DUP8 PUSH2 0x1015 JUMP JUMPDEST PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP9 SLOAD SWAP6 DUP8 ADD MLOAD PUSH1 0x8 SHL AND SWAP6 ADD MLOAD ISZERO ISZERO PUSH1 0xA8 SHL AND SWAP5 AND SWAP2 AND OR OR OR SWAP1 SSTORE ADD PUSH2 0x47E8 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH2 0xEE7 PUSH1 0x4 CALLDATALOAD PUSH2 0x48DE DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x62B8 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x491B PUSH2 0x4941 SWAP2 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xD73 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD PUSH2 0x4927 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP1 PUSH2 0x4934 DUP3 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD SWAP3 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xAFE7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x163B PUSH2 0x4964 CALLDATASIZE PUSH2 0x6FB JUMP JUMPDEST SWAP2 CALLER PUSH2 0x7CDC JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x180 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x4989 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH2 0x160 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH2 0x7C2 SWAP1 PUSH2 0x49C0 PUSH2 0x900 JUMP JUMPDEST SWAP1 PUSH2 0x49C9 PUSH2 0xBF5 JUMP JUMPDEST DUP3 MSTORE PUSH2 0x49D3 PUSH2 0xC02 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x49E0 PUSH2 0xC0F JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x49ED PUSH2 0xC1C JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x49FA PUSH2 0xC29 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x4A07 PUSH2 0xC36 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0x4A14 PUSH2 0xC43 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x4A21 PUSH2 0xC50 JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x4A2E PUSH2 0xC5E JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE PUSH2 0x4A3C PUSH2 0xBBD JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE PUSH2 0x4A4A PUSH2 0x6ED JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE PUSH2 0x6335 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x4A6B CALLDATASIZE PUSH2 0x2AD7 JUMP JUMPDEST SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x4AC4 JUMPI PUSH2 0x4AB1 SWAP1 PUSH2 0x4AA4 SWAP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH2 0x4AAB PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH2 0x5859 JUMP JUMPDEST SUB DUP5 PUSH2 0x88F JUMP JUMPDEST DUP3 PUSH2 0xB10B JUMP JUMPDEST SWAP1 MLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE RETURN JUMPDEST POP PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x4B06 CALLDATASIZE PUSH2 0x2A64 JUMP JUMPDEST SWAP2 AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB DUP3 SLOAD AND SWAP1 PUSH1 0x2 SHL OR SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH2 0xEE7 PUSH1 0x4 CALLDATALOAD PUSH2 0x4B64 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x65E6 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH2 0x6DC JUMPI STOP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x4BC2 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x24 CALLDATALOAD SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH8 0xDE0B5CAD2BEF000 DUP3 GT PUSH2 0x4BFC JUMPI PUSH5 0x174876E800 PUSH2 0x1318 SWAP3 DIV SWAP1 PUSH2 0xB875 JUMP JUMPDEST PUSH32 0x746E594000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x4C32 CALLDATASIZE PUSH2 0x6FB JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x4C3C PUSH2 0x79F6 JUMP JUMPDEST ADDRESS EXTCODESIZE ISZERO PUSH2 0x6DC JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND PUSH1 0x4 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 ADDRESS GAS CALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x4CBD JUMPI PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH2 0x4CC6 SWAP1 PUSH2 0x85F JUMP JUMPDEST PUSH0 PUSH2 0x4638 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x7C2 PUSH2 0x4CDD CALLDATASIZE PUSH2 0x3C0D JUMP JUMPDEST SWAP1 PUSH32 0x0 PUSH2 0xB171 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH2 0xEE7 PUSH1 0x4 CALLDATALOAD PUSH2 0x4D26 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x66EE JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x4D92 DUP2 PUSH2 0x6CB JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x4DC3 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x4DE3 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xD73 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x4DF9 DUP4 PUSH2 0xAA1 JUMP JUMPDEST PUSH2 0x4E01 PUSH2 0x5637 JUMP JUMPDEST POP AND PUSH0 MSTORE PUSH1 0x20 SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH1 0x20 DUP6 ADD MLOAD MLOAD SWAP4 PUSH0 PUSH1 0x40 DUP8 ADD PUSH1 0xA0 DUP9 ADD SWAP2 JUMPDEST DUP8 DUP2 LT PUSH2 0x4E39 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0x1270 DUP12 DUP3 PUSH2 0x13D9 JUMP JUMPDEST DUP1 PUSH2 0x4E50 PUSH2 0x4E4A PUSH1 0x1 SWAP4 DUP6 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0xBB7D JUMP JUMPDEST PUSH2 0x4E5B DUP3 DUP7 MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE DUP1 PUSH0 MSTORE DUP6 DUP6 MSTORE PUSH2 0x4E83 DUP9 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 PUSH0 KECCAK256 SLOAD AND DUP4 DUP14 PUSH2 0xB7D2 JUMP JUMPDEST ADD PUSH2 0x4E24 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x4EA6 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x4EC7 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x95A JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x4EDF SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xD13 JUMP JUMPDEST SWAP2 PUSH1 0x64 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x4F00 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xD13 JUMP JUMPDEST SWAP4 PUSH2 0x4F0E DUP4 MLOAD DUP6 MLOAD EQ PUSH2 0x589D JUMP JUMPDEST PUSH2 0x4F1B DUP4 MLOAD DUP7 MLOAD EQ PUSH2 0x589D JUMP JUMPDEST AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x20 SWAP2 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP2 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x4F66 JUMPI DUP1 PUSH2 0x4F56 PUSH2 0x4F4B PUSH1 0x1 SWAP4 DUP7 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x1ADB DUP4 DUP13 PUSH2 0x5818 JUMP JUMPDEST DUP2 PUSH0 MSTORE DUP6 DUP9 MSTORE DUP7 PUSH0 KECCAK256 SSTORE ADD PUSH2 0x4F32 JUMP JUMPDEST PUSH2 0x7C2 DUP3 DUP9 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x6076 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x4F99 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x6DC JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0x6DC JUMPI DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP2 PUSH2 0x4FC6 DUP4 PUSH2 0x942 JUMP JUMPDEST SWAP3 PUSH2 0x4FD4 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x88F JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 SWAP1 PUSH1 0x24 PUSH1 0x20 DUP7 ADD SWAP2 PUSH1 0x7 SHL DUP5 ADD ADD SWAP3 CALLDATASIZE DUP5 GT PUSH2 0x6DC JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x5005 JUMPI PUSH2 0x7C2 DUP7 DUP7 PUSH2 0x6766 JUMP JUMPDEST PUSH1 0x80 DUP3 CALLDATASIZE SUB SLT PUSH2 0x6DC JUMPI DUP3 PUSH1 0x80 SWAP2 DUP9 MLOAD PUSH2 0x501E DUP2 PUSH2 0x843 JUMP JUMPDEST DUP5 CALLDATALOAD PUSH2 0x5029 DUP2 PUSH2 0x6CB JUMP JUMPDEST DUP2 MSTORE DUP3 DUP6 ADD CALLDATALOAD PUSH2 0x5038 DUP2 PUSH2 0xAA1 JUMP JUMPDEST DUP4 DUP3 ADD MSTORE DUP10 DUP6 ADD CALLDATALOAD PUSH2 0x5049 DUP2 PUSH2 0x6CB JUMP JUMPDEST DUP11 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP7 ADD CALLDATALOAD SWAP1 PUSH2 0x505D DUP3 PUSH2 0xBB3 JUMP JUMPDEST DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x4FF4 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x1270 PUSH2 0x5099 PUSH2 0x507F CALLDATASIZE PUSH2 0x13B4 JUMP JUMPDEST SWAP1 PUSH2 0x5088 PUSH2 0x5637 JUMP JUMPDEST POP PUSH2 0x5091 PUSH2 0x79F6 JUMP JUMPDEST PUSH2 0x1410 PUSH2 0x5637 JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x10B8 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x50F5 DUP2 PUSH2 0x6CB JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x5116 CALLDATASIZE PUSH2 0x2A64 JUMP JUMPDEST SWAP1 PUSH32 0x0 TLOAD PUSH0 MSTORE PUSH32 0x0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TSTORE STOP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH2 0x51A1 PUSH1 0x4 CALLDATALOAD PUSH2 0x5190 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH2 0x5198 PUSH2 0x5B3F JUMP JUMPDEST POP PUSH2 0x7F0 PUSH2 0x69D7 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD SWAP1 PUSH2 0x51B3 DUP3 PUSH2 0x822 JUMP JUMPDEST PUSH1 0x1 DUP2 AND ISZERO ISZERO SWAP2 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x20 DUP4 ADD SWAP3 DUP3 DUP6 DUP2 SHR AND ISZERO ISZERO DUP5 MSTORE ADD SWAP3 PUSH1 0x2 SHR AND ISZERO ISZERO DUP3 MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 MSTORE MLOAD ISZERO ISZERO PUSH1 0x20 DUP4 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x60 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x5225 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x95A JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD DUP4 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x523E SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3712 JUMP JUMPDEST SWAP3 PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x5257 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x38FB JUMP JUMPDEST PUSH2 0x5261 DUP4 MLOAD PUSH2 0x594C JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x5304 JUMPI DUP1 PUSH2 0x528A PUSH2 0x5280 PUSH2 0x29BF PUSH1 0x1 SWAP5 DUP10 PUSH2 0x5818 JUMP JUMPDEST PUSH2 0x29D6 DUP4 DUP11 PUSH2 0x5818 JUMP JUMPDEST PUSH2 0x52A6 PUSH2 0x529A PUSH2 0x29BF DUP4 DUP7 PUSH2 0x5818 JUMP JUMPDEST PUSH1 0x40 PUSH2 0x380C DUP5 DUP12 PUSH2 0x5818 JUMP JUMPDEST PUSH2 0x52B6 PUSH2 0x213F PUSH2 0x29BF DUP4 DUP7 PUSH2 0x5818 JUMP JUMPDEST PUSH2 0x52FB JUMPI PUSH2 0x52CB PUSH0 JUMPDEST PUSH1 0x20 PUSH2 0x3841 DUP5 DUP12 PUSH2 0x5818 JUMP JUMPDEST PUSH2 0x52F5 PUSH2 0x52E1 PUSH2 0x52DB DUP4 DUP8 PUSH2 0x5818 JUMP JUMPDEST MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST DUP7 PUSH2 0x52EC DUP5 DUP12 PUSH2 0x5818 JUMP JUMPDEST MLOAD ADD SWAP1 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST ADD PUSH2 0x5264 JUMP JUMPDEST PUSH2 0x52CB DUP3 PUSH2 0x52BF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xBB4AD7D500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH0 DUP2 DUP1 PUSH2 0x388D DUP11 PUSH1 0x4 DUP4 ADD PUSH2 0x1F54 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x535F DUP2 PUSH2 0x6CB JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0xEE7 PUSH2 0x53AC PUSH1 0x20 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x95A JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x53B9 DUP3 PUSH2 0x6CB JUMP JUMPDEST PUSH2 0xB10B JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x2582 PUSH2 0x53CF CALLDATASIZE PUSH2 0xF8C JUMP JUMPDEST SWAP2 PUSH2 0x53D8 PUSH2 0x79F6 JUMP JUMPDEST PUSH2 0x6CA2 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x5459 PUSH2 0x546C PUSH2 0x1270 PUSH2 0x122D PUSH2 0x547A PUSH2 0x53FA CALLDATASIZE PUSH2 0x251E JUMP JUMPDEST PUSH2 0x5406 SWAP7 SWAP2 SWAP3 SWAP7 PUSH2 0x5637 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP3 PUSH2 0x543C PUSH1 0x20 DUP6 ADD DUP6 PUSH2 0x541D DUP5 DUP4 PUSH2 0x6868 JUMP JUMPDEST SUB SWAP6 PUSH2 0x5431 PUSH1 0x1F NOT SWAP8 DUP9 DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x88F JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP3 DUP3 DUP11 PUSH2 0x8470 JUMP JUMPDEST SWAP9 SWAP3 SWAP5 SWAP2 SWAP4 SWAP1 SWAP7 PUSH2 0x1224 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x1218 PUSH1 0x20 DUP3 ADD SWAP6 DUP7 PUSH2 0x6868 JUMP JUMPDEST SWAP2 PUSH1 0x20 DUP10 ADD MSTORE DUP8 DUP3 SUB PUSH1 0x40 DUP10 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST SWAP1 DUP6 DUP3 SUB PUSH1 0x60 DUP8 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x80 DUP6 ADD MSTORE PUSH2 0x1177 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x54A5 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x24 CALLDATALOAD SWAP2 PUSH2 0x54BA DUP4 PUSH2 0x6CB JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH2 0x31C7 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x6DC JUMPI MLOAD PUSH2 0xB23 DUP2 PUSH2 0xBB3 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x550F PUSH2 0x69D7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x5543 DUP2 PUSH32 0x0 AND SWAP3 PUSH2 0x5A72 JUMP JUMPDEST SWAP3 PUSH2 0x554C PUSH2 0x6A43 JUMP JUMPDEST SWAP1 DUP4 EXTCODESIZE ISZERO PUSH2 0x6DC JUMPI PUSH2 0x55AE SWAP7 PUSH2 0x5619 PUSH0 SWAP8 SWAP4 PUSH2 0x55E1 DUP10 SWAP6 PUSH4 0xFFFFFFFF PUSH1 0x40 MLOAD SWAP13 DUP14 SWAP12 DUP13 SWAP11 DUP12 SWAP10 PUSH32 0xE0677AB00000000000000000000000000000000000000000000000000000000 DUP12 MSTORE AND PUSH1 0x4 DUP11 ADD MSTORE PUSH2 0x160 PUSH1 0x24 DUP11 ADD MSTORE PUSH2 0x164 DUP10 ADD SWAP1 PUSH2 0x1EE5 JUMP JUMPDEST SWAP6 AND PUSH1 0x44 DUP8 ADD MSTORE DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x64 DUP9 ADD MSTORE PUSH1 0x20 DUP3 ADD MLOAD DUP2 AND PUSH1 0x84 DUP9 ADD MSTORE PUSH1 0x40 SWAP1 SWAP2 ADD MLOAD AND PUSH1 0xA4 DUP7 ADD MSTORE JUMP JUMPDEST PUSH1 0xC4 DUP5 ADD DUP6 SWAP1 MSTORE DUP1 MLOAD ISZERO ISZERO PUSH1 0xE4 DUP6 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x104 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x124 DUP6 ADD MSTORE PUSH1 0x60 ADD MLOAD ISZERO ISZERO PUSH2 0x144 DUP5 ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x562A JUMPI POP JUMP JUMPDEST DUP1 PUSH2 0x1C88 PUSH2 0x6EB SWAP3 PUSH2 0x85F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x5644 DUP3 PUSH2 0x873 JUMP JUMPDEST DUP2 PUSH0 DUP2 MSTORE PUSH1 0xC0 PUSH1 0x60 SWAP2 DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 DUP1 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST PUSH1 0x5 GT ISZERO PUSH2 0x101F JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x101F JUMPI MSTORE JUMP JUMPDEST SWAP1 PUSH2 0xB23 SWAP2 PUSH1 0x20 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xA0 PUSH2 0x56C5 PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0xC0 PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0xE0 DUP5 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP3 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x56E1 PUSH1 0x80 DUP3 ADD MLOAD DUP4 DUP6 ADD SWAP1 PUSH2 0x5678 JUMP JUMPDEST ADD MLOAD SWAP1 PUSH1 0xC0 PUSH1 0x1F NOT DUP3 DUP6 SUB ADD SWAP2 ADD MSTORE PUSH2 0x1177 JUMP JUMPDEST ISZERO PUSH2 0x56FC JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E70757420706172616D65746572732068617665206368616E676564000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x6DC JUMPI MLOAD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH0 NOT DUP3 ADD SWAP2 DUP3 GT PUSH2 0x465D JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x465D JUMPI JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x57BE DUP3 PUSH2 0x873 JUMP JUMPDEST PUSH1 0x60 PUSH1 0xC0 DUP4 PUSH0 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE PUSH0 DUP4 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE PUSH0 PUSH1 0xA0 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 PUSH2 0x57F1 DUP3 PUSH2 0x942 JUMP JUMPDEST PUSH2 0x57FE PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x88F JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x580E DUP3 SWAP5 PUSH2 0x942 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x582C JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 SLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 SWAP3 ADD SWAP3 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x587D JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE SWAP4 DUP5 ADD SWAP4 PUSH1 0x1 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x586F JUMP JUMPDEST ISZERO PUSH2 0x58A4 JUMPI JUMP JUMPDEST PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5661756C744D6F636B3A20544F4B454E535F4C454E4754485F4D49534D415443 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x4800000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x5935 DUP3 PUSH2 0x843 JUMP JUMPDEST PUSH0 PUSH1 0x60 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 PUSH2 0x5956 DUP3 PUSH2 0x942 JUMP JUMPDEST PUSH2 0x5963 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x88F JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x5973 DUP3 SWAP5 PUSH2 0x942 JUMP JUMPDEST ADD SWAP1 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x5983 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH2 0x598E PUSH2 0x5928 JUMP JUMPDEST DUP3 DUP3 DUP6 ADD ADD MSTORE ADD PUSH2 0x5977 JUMP JUMPDEST SWAP1 PUSH1 0x20 SWAP2 DUP3 DUP2 DUP4 SUB SLT PUSH2 0x6DC JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x6DC JUMPI ADD DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x6DC JUMPI DUP1 MLOAD SWAP3 PUSH2 0x59D1 DUP5 PUSH2 0x942 JUMP JUMPDEST SWAP4 PUSH1 0x40 SWAP4 PUSH2 0x59E2 PUSH1 0x40 MLOAD SWAP7 DUP8 PUSH2 0x88F JUMP JUMPDEST DUP2 DUP7 MSTORE DUP3 DUP1 DUP8 ADD SWAP3 PUSH1 0x7 SHL DUP6 ADD ADD SWAP4 DUP2 DUP6 GT PUSH2 0x6DC JUMPI DUP4 ADD SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x5A0C JUMPI POP POP POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP4 DUP4 SUB SLT PUSH2 0x6DC JUMPI DUP4 PUSH1 0x80 SWAP2 DUP8 MLOAD PUSH2 0x5A25 DUP2 PUSH2 0x843 JUMP JUMPDEST DUP6 MLOAD PUSH2 0x5A30 DUP2 PUSH2 0x6CB JUMP JUMPDEST DUP2 MSTORE DUP3 DUP7 ADD MLOAD PUSH2 0x5A3F DUP2 PUSH2 0xAA1 JUMP JUMPDEST DUP4 DUP3 ADD MSTORE DUP9 DUP7 ADD MLOAD PUSH2 0x5A50 DUP2 PUSH2 0x6CB JUMP JUMPDEST DUP10 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP8 ADD MLOAD SWAP1 PUSH2 0x5A64 DUP3 PUSH2 0xBB3 JUMP JUMPDEST DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x59FC JUMP JUMPDEST PUSH2 0x5A7C DUP2 MLOAD PUSH2 0x594C JUMP JUMPDEST SWAP1 PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x5AB2 JUMPI DUP1 PUSH2 0x5AAC PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x5AA0 PUSH1 0x1 SWAP5 DUP7 PUSH2 0x5818 JUMP JUMPDEST MLOAD AND PUSH2 0x29D6 DUP4 DUP8 PUSH2 0x5818 JUMP JUMPDEST ADD PUSH2 0x5A7F JUMP JUMPDEST POP POP PUSH0 PUSH2 0x5AEC SWAP2 PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xBB4AD7D500000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x1F54 JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP2 PUSH2 0x5B2B JUMPI POP SWAP1 JUMP JUMPDEST PUSH2 0xB23 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x38ED DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x5B4C DUP3 PUSH2 0x822 JUMP JUMPDEST PUSH0 PUSH1 0x40 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST PUSH2 0x5BB7 PUSH2 0x5B8A PUSH2 0x6EB SWAP6 SWAP8 SWAP7 SWAP5 PUSH1 0xC0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x140 SWAP2 AND DUP6 MSTORE DUP1 PUSH1 0x20 DUP7 ADD MSTORE DUP5 ADD SWAP1 PUSH2 0x1EE5 JUMP JUMPDEST SWAP7 PUSH1 0x40 DUP4 ADD SWAP1 PUSH1 0x40 SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH0 PUSH1 0xA0 DUP3 ADD MSTORE ADD SWAP1 PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x60 SWAP2 SUB SLT PUSH2 0x6DC JUMPI DUP1 MLOAD SWAP2 PUSH1 0x40 PUSH1 0x20 DUP4 ADD MLOAD SWAP3 ADD MLOAD SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x6DC JUMPI MLOAD PUSH2 0xB23 DUP2 PUSH2 0x6CB JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH2 0x5C5C PUSH2 0x5C56 PUSH32 0x0 SWAP3 DUP4 TLOAD ISZERO SWAP6 DUP7 PUSH2 0x5CDE JUMPI JUMPDEST CALLDATASIZE SWAP2 PUSH2 0xAD2 JUMP JUMPDEST CALLER PUSH2 0xC24C JUMP JUMPDEST SWAP3 PUSH2 0x5C64 JUMPI POP JUMP JUMPDEST PUSH32 0x0 TLOAD PUSH2 0x5CB6 JUMPI PUSH0 SWAP1 TSTORE PUSH2 0x6EB PUSH32 0x0 PUSH2 0xA985 JUMP JUMPDEST PUSH32 0x20F1D86D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 DUP6 TSTORE PUSH2 0x5C4F JUMP JUMPDEST SWAP1 PUSH2 0x18A3 DUP2 PUSH1 0x60 PUSH2 0x5F40 PUSH2 0x5F0E PUSH2 0x5EDC PUSH2 0x5EAA PUSH2 0x5E62 PUSH2 0x5E1E PUSH2 0x5E14 PUSH2 0x5E09 PUSH2 0x5DFE PUSH2 0x5DCB PUSH2 0x5F70 SWAP14 DUP16 PUSH2 0x120 PUSH2 0x5D98 PUSH2 0x5D66 PUSH2 0x5D37 PUSH2 0x5DA0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0xC0 DUP7 ADD MLOAD ISZERO ISZERO SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE AND OR SWAP1 JUMP JUMPDEST PUSH1 0xE0 DUP6 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD SWAP1 PUSH1 0x1 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST SWAP3 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 SWAP1 PUSH1 0x3 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH2 0x100 DUP13 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB SWAP1 PUSH1 0x2 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP12 ADD MLOAD SWAP1 PUSH2 0x91E1 JUMP JUMPDEST PUSH1 0x40 DUP11 ADD MLOAD SWAP1 PUSH2 0xAD64 JUMP JUMPDEST DUP8 DUP10 ADD MLOAD SWAP1 PUSH2 0xAD75 JUMP JUMPDEST PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0x5A SHL PUSH17 0x3FFFFFFFFFC0000000000000000000000 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0000000003FFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0xA0 DUP8 ADD MLOAD PUSH1 0x82 SHL PUSH21 0x3FFFFFFFC00000000000000000000000000000000 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFC00000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND OR SWAP1 JUMP JUMPDEST SWAP5 MLOAD SWAP5 DUP6 MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF SWAP1 PUSH1 0x4 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF SWAP1 PUSH1 0x5 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF SWAP1 PUSH1 0x6 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST SWAP2 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F SWAP1 PUSH1 0x7 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST SSTORE JUMP JUMPDEST PUSH2 0x16E8 DUP3 PUSH2 0x1015 JUMP JUMPDEST MLOAD PUSH2 0xB23 DUP2 PUSH2 0x1015 JUMP JUMPDEST SWAP2 SWAP1 SWAP4 SWAP3 SWAP4 PUSH2 0x5F95 DUP4 MLOAD PUSH2 0x594C JUMP JUMPDEST SWAP3 PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x6007 JUMPI DUP1 PUSH2 0x5FB4 PUSH2 0x29CC PUSH2 0x29BF PUSH1 0x1 SWAP5 DUP7 PUSH2 0x5818 JUMP JUMPDEST PUSH2 0x5FC9 PUSH2 0x3835 PUSH2 0x5FC4 DUP4 DUP8 PUSH2 0x5818 JUMP JUMPDEST PUSH2 0x5F7C JUMP JUMPDEST PUSH2 0x5FE5 PUSH2 0x5FD9 PUSH2 0x29BF DUP4 DUP9 PUSH2 0x5818 JUMP JUMPDEST PUSH1 0x40 PUSH2 0x380C DUP5 DUP11 PUSH2 0x5818 JUMP JUMPDEST PUSH2 0x6001 PUSH2 0x5FF5 PUSH2 0x52DB DUP4 DUP12 PUSH2 0x5818 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x52EC DUP5 DUP11 PUSH2 0x5818 JUMP JUMPDEST ADD PUSH2 0x5F98 JUMP JUMPDEST POP POP POP POP PUSH2 0x5AEC SWAP2 SWAP3 POP PUSH0 SWAP1 PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xBB4AD7D500000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x1F54 JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x465D JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x465D JUMPI JUMP JUMPDEST DUP2 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x83E JUMPI PUSH9 0x10000000000000000 DUP4 GT PUSH2 0x83E JUMPI DUP2 SLOAD DUP4 DUP4 SSTORE DUP1 DUP5 LT PUSH2 0x60EB JUMPI JUMPDEST POP PUSH2 0x60B8 PUSH1 0x20 DUP1 SWAP3 ADD SWAP3 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x60C9 JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH2 0x60DE DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP6 ADD SWAP5 DUP2 DUP6 ADD SSTORE ADD PUSH2 0x60BB JUMP JUMPDEST DUP3 PUSH0 MSTORE DUP4 PUSH1 0x20 PUSH0 KECCAK256 SWAP2 DUP3 ADD SWAP2 ADD JUMPDEST DUP2 DUP2 LT PUSH2 0x6106 JUMPI POP PUSH2 0x60A5 JUMP JUMPDEST PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x60F9 JUMP JUMPDEST SWAP1 DUP1 ISZERO DUP1 ISZERO PUSH2 0x619C JUMPI JUMPDEST PUSH2 0x6196 JUMPI PUSH1 0x40 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP5 PUSH1 0x4 DUP2 DUP6 DUP6 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x6171 SWAP5 PUSH0 SWAP2 PUSH2 0x6177 JUMPI JUMPDEST POP AND PUSH2 0x98A1 JUMP JUMPDEST POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x6190 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x30F7 JUMPI PUSH2 0x30E9 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x616A JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST POP PUSH2 0x61E3 PUSH1 0x20 PUSH2 0x61AB DUP4 PUSH2 0x5796 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xEF8B30F700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP2 PUSH2 0x6206 JUMPI JUMPDEST POP ISZERO PUSH2 0x611B JUMP JUMPDEST PUSH2 0x621F SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x61FF JUMP JUMPDEST SWAP1 DUP1 MLOAD SWAP1 PUSH2 0x6232 DUP3 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x623B DUP3 PUSH2 0x1015 JUMP JUMPDEST DUP3 SLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 SWAP3 SWAP1 SWAP3 ADD MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000 SWAP1 SWAP2 AND PUSH1 0xFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR PUSH1 0x8 SWAP2 SWAP1 SWAP2 SHL PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND OR SWAP1 ISZERO ISZERO PUSH1 0xA8 SHL PUSH22 0xFF000000000000000000000000000000000000000000 AND OR SWAP1 SSTORE JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x6196 JUMPI PUSH1 0x40 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP5 PUSH1 0x4 DUP2 DUP6 DUP6 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x6311 SWAP5 PUSH0 SWAP2 PUSH2 0x6316 JUMPI JUMPDEST POP AND PUSH2 0xA150 JUMP JUMPDEST POP POP SWAP1 JUMP JUMPDEST PUSH2 0x632F SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x30F7 JUMPI PUSH2 0x30E9 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x630A JUMP JUMPDEST PUSH2 0x65B3 PUSH2 0x659B PUSH2 0x213F PUSH2 0x140 PUSH2 0x6EB SWAP6 PUSH2 0x6572 PUSH2 0x653F PUSH2 0x650C PUSH2 0x64DA PUSH2 0x64A8 PUSH2 0x6476 PUSH2 0x6444 PUSH2 0x6412 PUSH2 0x63E0 PUSH2 0x63AE DUP16 PUSH2 0x637E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD DUP12 MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFF SWAP1 PUSH1 0x9 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP12 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFF SWAP1 PUSH1 0x8 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP11 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFF SWAP1 PUSH1 0xA SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP10 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FF SWAP1 PUSH1 0xB SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP9 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF SWAP1 PUSH1 0xC SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0xA0 DUP8 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFF SWAP1 PUSH1 0xD SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0xC0 DUP7 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFF SWAP1 PUSH1 0xE SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0xE0 DUP6 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFF SWAP1 PUSH1 0xF SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH2 0x100 DUP5 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFF SWAP1 PUSH1 0x10 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF SWAP1 PUSH1 0x11 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH2 0x658C DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE JUMP JUMPDEST SWAP1 DUP1 ISZERO DUP1 ISZERO PUSH2 0x6665 JUMPI JUMPDEST PUSH2 0x6196 JUMPI PUSH1 0x40 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP5 PUSH1 0x4 DUP2 DUP6 DUP6 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x6171 SWAP5 PUSH0 SWAP2 PUSH2 0x6646 JUMPI JUMPDEST POP AND PUSH2 0xA358 JUMP JUMPDEST PUSH2 0x665F SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x30F7 JUMPI PUSH2 0x30E9 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x663F JUMP JUMPDEST POP PUSH2 0x66AC PUSH1 0x20 PUSH2 0x6674 DUP4 PUSH2 0x5796 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x4CDAD50600000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP2 PUSH2 0x66CF JUMPI JUMPDEST POP ISZERO PUSH2 0x65F0 JUMP JUMPDEST PUSH2 0x66E8 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x66C8 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x6196 JUMPI PUSH1 0x40 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP5 PUSH1 0x4 DUP2 DUP6 DUP6 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x6311 SWAP5 PUSH0 SWAP2 PUSH2 0x6747 JUMPI JUMPDEST POP AND PUSH2 0x9B0B JUMP JUMPDEST PUSH2 0x6760 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x30F7 JUMPI PUSH2 0x30E9 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x6740 JUMP JUMPDEST SWAP2 SWAP1 PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x684B JUMPI PUSH1 0x1 SWAP1 PUSH2 0x6845 PUSH1 0x20 PUSH2 0x67F2 DUP2 PUSH2 0x6789 DUP6 DUP9 PUSH2 0x5818 JUMP JUMPDEST MLOAD ADD MLOAD SWAP2 PUSH2 0x6796 DUP4 PUSH2 0x1015 JUMP JUMPDEST PUSH1 0x40 PUSH2 0x67E9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 PUSH2 0x67AE DUP10 DUP13 PUSH2 0x5818 JUMP JUMPDEST MLOAD ADD MLOAD AND PUSH1 0x60 PUSH2 0x67BE DUP10 DUP13 PUSH2 0x5818 JUMP JUMPDEST MLOAD ADD MLOAD ISZERO ISZERO SWAP4 PUSH2 0x67D9 DUP5 MLOAD SWAP8 PUSH2 0x67D3 DUP10 PUSH2 0x822 JUMP JUMPDEST DUP9 PUSH2 0x5F73 JUMP JUMPDEST DUP7 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST DUP4 ADD SWAP1 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x6840 PUSH2 0x6810 DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0x682B PUSH2 0x681D DUP7 DUP10 PUSH2 0x5818 JUMP JUMPDEST MLOAD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0x6225 JUMP JUMPDEST ADD PUSH2 0x676A JUMP JUMPDEST POP POP SWAP1 POP JUMP JUMPDEST PUSH1 0x4 GT ISZERO PUSH2 0x101F JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x101F JUMPI MSTORE JUMP JUMPDEST SWAP1 PUSH2 0xB23 SWAP2 PUSH1 0x20 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA0 PUSH2 0x68B2 PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0xC0 PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xE0 DUP5 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP3 PUSH2 0x56E1 PUSH1 0x80 DUP3 ADD MLOAD DUP4 DUP6 ADD SWAP1 PUSH2 0x685B JUMP JUMPDEST PUSH32 0xF223889600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x68C4 JUMPI CALLDATASIZE PUSH0 DUP1 CALLDATACOPY PUSH0 DUP1 CALLDATASIZE DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS DELEGATECALL RETURNDATASIZE PUSH0 DUP1 RETURNDATACOPY ISZERO PUSH2 0x6932 JUMPI RETURNDATASIZE PUSH0 RETURN JUMPDEST RETURNDATASIZE PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x1 DUP2 PUSH1 0x2 SHR AND SWAP1 PUSH4 0xFFFFFFFF DUP1 SWAP2 PUSH2 0x6962 PUSH1 0x82 SWAP1 JUMP JUMPDEST SHR AND DUP3 PUSH2 0x699E JUMPI JUMPDEST POP POP PUSH2 0x6973 JUMPI POP JUMP JUMPDEST PUSH32 0xD971F59700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP PUSH32 0x0 AND ADD DUP2 DUP2 GT PUSH2 0x465D JUMPI AND TIMESTAMP GT ISZERO PUSH0 DUP1 PUSH2 0x696A JUMP JUMPDEST PUSH4 0xFFFFFFFF PUSH32 0x0 AND TIMESTAMP GT ISZERO DUP1 PUSH2 0x6A35 JUMPI JUMPDEST PUSH2 0x6A0D JUMPI JUMP JUMPDEST PUSH32 0xDA9F8B3400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x7 SLOAD DUP2 SHR AND PUSH2 0x6A07 JUMP JUMPDEST PUSH2 0x6A4B PUSH2 0x5928 JUMP JUMPDEST POP PUSH2 0x6A54 PUSH2 0x5928 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x40 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 DUP1 MLOAD PUSH2 0x6A73 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x6A7C DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x6AC8 JUMPI SWAP1 PUSH2 0x6ABF PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH2 0x6AB8 PUSH1 0x80 PUSH2 0x6AC4 SWAP6 ADD MLOAD SWAP4 PUSH1 0xA0 PUSH2 0x6AAC PUSH1 0xC0 DUP6 ADD MLOAD DUP4 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP4 ADD MLOAD SWAP1 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP3 PUSH2 0x6063 JUMP JUMPDEST PUSH2 0x6063 JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST PUSH2 0xB23 SWAP3 PUSH2 0x6AFE PUSH2 0x21E8 PUSH1 0x80 PUSH2 0x6B04 SWAP5 ADD MLOAD SWAP5 PUSH1 0xA0 PUSH2 0x6AF2 PUSH1 0x20 PUSH1 0xC0 DUP8 ADD MLOAD SWAP4 ADD SWAP3 DUP4 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP5 ADD MLOAD SWAP1 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST SWAP3 PUSH2 0x6063 JUMP JUMPDEST PUSH2 0xB824 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x6DC JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x6B24 DUP2 PUSH2 0x942 JUMP JUMPDEST SWAP4 PUSH2 0x6B32 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x88F JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x6DC JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x6B5B JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x6B4D JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x6DC JUMPI DUP1 MLOAD SWAP1 PUSH2 0x6B81 DUP3 PUSH2 0xAB6 JUMP JUMPDEST SWAP3 PUSH2 0x6B8F PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x88F JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x6DC JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP4 DUP4 SUB SLT PUSH2 0x6DC JUMPI DUP3 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP2 GT PUSH2 0x6DC JUMPI DUP4 PUSH2 0x6BDB SWAP2 DUP7 ADD PUSH2 0x6B09 JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP2 ADD MLOAD SWAP4 PUSH1 0x40 DUP3 ADD MLOAD DUP5 DUP2 GT PUSH2 0x6DC JUMPI DUP2 PUSH2 0x6BFA SWAP2 DUP5 ADD PUSH2 0x6B09 JUMP JUMPDEST SWAP4 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0xB23 SWAP3 ADD PUSH2 0x6B6A JUMP JUMPDEST SWAP4 PUSH2 0x6C3B PUSH2 0x6C4E SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xB23 SWAP9 SWAP7 SWAP5 AND DUP8 MSTORE PUSH1 0xA0 PUSH1 0x20 DUP9 ADD MSTORE PUSH1 0xA0 DUP8 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP7 ADD MSTORE DUP5 DUP3 SUB PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x1177 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x465D JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x465D JUMPI JUMP JUMPDEST SWAP2 PUSH2 0x6C94 SWAP1 PUSH2 0xB23 SWAP5 SWAP3 DUP5 MSTORE PUSH1 0x60 PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x6CAC PUSH2 0x79F6 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x6CB6 PUSH2 0x5B3F JUMP JUMPDEST SWAP2 PUSH1 0x20 DUP6 ADD PUSH2 0x6CC9 DUP2 MLOAD MLOAD DUP1 DUP7 MSTORE PUSH2 0x57E7 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD SWAP6 DUP7 MLOAD PUSH2 0x6CD9 DUP2 PUSH2 0x566E JUMP JUMPDEST PUSH2 0x6CE2 DUP2 PUSH2 0x566E JUMP JUMPDEST PUSH2 0x6FC2 JUMPI POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x6CF6 DUP7 MLOAD PUSH2 0x57E7 JUMP JUMPDEST SWAP5 PUSH2 0x6D32 DUP3 PUSH1 0x80 DUP12 ADD MLOAD PUSH2 0x6D2C PUSH2 0x6D14 DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0xB6E7 JUMP JUMPDEST SWAP10 JUMPDEST PUSH1 0x60 DUP7 ADD MLOAD DUP1 DUP5 LT PUSH2 0x6F92 JUMPI POP PUSH2 0x6D4D DUP4 SWAP10 SWAP9 SWAP10 PUSH2 0x97B4 JUMP JUMPDEST PUSH1 0x20 DUP10 ADD SWAP8 PUSH0 JUMPDEST DUP13 DUP12 MLOAD DUP3 LT ISZERO PUSH2 0x6EAD JUMPI DUP2 PUSH2 0x6D68 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x6D72 DUP2 PUSH2 0x97B4 JUMP JUMPDEST PUSH2 0x6D7C DUP3 DUP9 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x6E9C JUMPI PUSH2 0x6DA3 SWAP1 DUP14 PUSH2 0x42B7 DUP5 PUSH1 0xA0 PUSH2 0x6D9A DUP3 PUSH1 0xC0 DUP7 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP4 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST DUP1 PUSH2 0x6DAE DUP4 DUP10 PUSH2 0x5818 JUMP JUMPDEST MSTORE JUMPDEST PUSH2 0x6DBE PUSH2 0x29BF DUP4 DUP11 MLOAD PUSH2 0x5818 JUMP JUMPDEST PUSH1 0x40 DUP11 ADD PUSH2 0x6DCD DUP5 DUP3 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD DUP4 GT PUSH2 0x6E50 JUMPI POP DUP14 DUP4 PUSH2 0x6E44 DUP15 PUSH2 0x6E3C DUP16 SWAP7 DUP16 SWAP8 PUSH2 0x6E27 DUP7 PUSH2 0x6E1F DUP2 DUP12 PUSH1 0x1 SWAP15 SWAP14 PUSH2 0x6DFC DUP9 PUSH2 0x6E4A SWAP16 PUSH2 0x97C5 JUMP JUMPDEST PUSH2 0x6E18 PUSH2 0x6E09 DUP5 DUP10 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 DUP14 PUSH2 0xAFE7 JUMP JUMPDEST DUP8 MSTORE SWAP3 PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH2 0x6E36 DUP6 PUSH1 0x60 DUP9 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x6C6A JUMP JUMPDEST SWAP1 MLOAD SWAP1 PUSH2 0x57A4 JUMP JUMPDEST SWAP2 PUSH2 0xB742 JUMP JUMPDEST ADD PUSH2 0x6D54 JUMP JUMPDEST SWAP2 PUSH2 0x6E5F DUP5 PUSH2 0x2420 SWAP5 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH32 0x8EDA85E400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST POP PUSH2 0x6EA7 DUP2 DUP8 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x6DB0 JUMP JUMPDEST POP POP SWAP4 SWAP7 SWAP5 POP SWAP7 POP SWAP7 POP SWAP7 PUSH2 0x6ED2 SWAP1 PUSH2 0x6ECD DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x72F9 JUMP JUMPDEST PUSH32 0xA26A52D8D53702BBA7F137907B8E1F99FF87F6D450144270CA25E72481CCA871 PUSH2 0x6F04 DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 PUSH2 0x6F25 DUP10 PUSH1 0x20 DUP8 ADD SWAP6 PUSH2 0x6F1F DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0xA837 JUMP JUMPDEST PUSH2 0x6F59 PUSH2 0x6D14 PUSH2 0x6F4D PUSH2 0x6F3F DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 MLOAD SWAP7 PUSH2 0x29BF DUP9 PUSH2 0x566E JUMP JUMPDEST SWAP3 PUSH2 0x6F81 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH2 0x6F6F DUP9 PUSH2 0x566E JUMP JUMPDEST DUP9 DUP5 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP6 AND SWAP9 AND SWAP7 DUP5 PUSH2 0x6C77 JUMP JUMPDEST SUB SWAP1 LOG4 PUSH2 0x6F8C PUSH2 0x7A4B JUMP JUMPDEST SWAP4 SWAP3 SWAP2 SWAP1 JUMP JUMPDEST PUSH32 0x8D261D5D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 DUP5 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH1 0x3 DUP8 MLOAD PUSH2 0x6FCF DUP2 PUSH2 0x566E JUMP JUMPDEST PUSH2 0x6FD8 DUP2 PUSH2 0x566E JUMP JUMPDEST SUB PUSH2 0x6FFA JUMPI PUSH2 0x6FE7 DUP9 MLOAD PUSH2 0xB6B2 JUMP JUMPDEST PUSH2 0x6FF1 DUP2 MLOAD PUSH2 0x57E7 JUMP JUMPDEST SWAP5 PUSH0 SWAP2 SWAP10 PUSH2 0x6D34 JUMP JUMPDEST SWAP8 PUSH1 0x1 DUP8 MLOAD PUSH2 0x7008 DUP2 PUSH2 0x566E JUMP JUMPDEST PUSH2 0x7011 DUP2 PUSH2 0x566E JUMP JUMPDEST SUB PUSH2 0x7079 JUMPI PUSH2 0x7020 DUP9 MLOAD PUSH2 0xB1E0 JUMP JUMPDEST PUSH2 0x7071 DUP10 PUSH2 0x7032 DUP5 PUSH1 0x40 DUP9 ADD MLOAD PUSH2 0xB413 JUMP JUMPDEST PUSH1 0x80 DUP11 ADD MLOAD SWAP1 PUSH2 0x704C PUSH2 0x6D14 DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x7056 DUP13 MLOAD PUSH2 0xB2A3 JUMP JUMPDEST SWAP2 PUSH2 0x706B PUSH2 0x213F DUP11 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP4 PUSH2 0xB462 JUMP JUMPDEST SWAP6 SWAP1 SWAP2 PUSH2 0x6D34 JUMP JUMPDEST SWAP8 SWAP4 PUSH1 0x2 DUP8 MLOAD PUSH2 0x7088 DUP2 PUSH2 0x566E JUMP JUMPDEST PUSH2 0x7091 DUP2 PUSH2 0x566E JUMP JUMPDEST SUB PUSH2 0x7112 JUMPI SWAP8 DUP8 SWAP9 PUSH2 0x70A3 DUP10 MLOAD PUSH2 0xB1E0 JUMP JUMPDEST PUSH1 0x60 DUP6 ADD MLOAD SWAP2 PUSH2 0x70B2 DUP8 PUSH2 0xB214 JUMP JUMPDEST PUSH2 0x710C PUSH2 0x7102 PUSH1 0x40 DUP12 ADD SWAP3 DUP1 DUP5 MSTORE DUP10 DUP12 SWAP16 DUP9 PUSH1 0x80 DUP3 ADD MLOAD SWAP4 PUSH2 0x70FC PUSH2 0x213F PUSH2 0x70EE PUSH2 0x70E7 PUSH2 0x6D14 DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP6 MLOAD PUSH2 0xB2A3 JUMP JUMPDEST SWAP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH2 0xB2E8 JUMP JUMPDEST SWAP1 SWAP3 MLOAD SWAP1 SWAP10 PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH2 0x6D34 JUMP JUMPDEST POP PUSH1 0x4 DUP7 MLOAD PUSH2 0x7120 DUP2 PUSH2 0x566E JUMP JUMPDEST PUSH2 0x7129 DUP2 PUSH2 0x566E JUMP JUMPDEST SUB PUSH2 0x71EA JUMPI PUSH2 0x7138 DUP8 MLOAD PUSH2 0xB1AB JUMP JUMPDEST PUSH0 PUSH2 0x7150 PUSH2 0x213F PUSH2 0x213F DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP6 ADD MLOAD SWAP1 PUSH1 0x80 DUP11 ADD MLOAD SWAP2 DUP4 PUSH1 0xA0 DUP9 ADD MLOAD SWAP9 PUSH2 0x719D PUSH1 0x40 MLOAD SWAP11 DUP12 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xE4C4366300000000000000000000000000000000000000000000000000000000 DUP7 MSTORE CALLER PUSH1 0x4 DUP8 ADD PUSH2 0x6C11 JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP1 PUSH0 SWAP6 PUSH0 SWAP2 PUSH0 SWAP2 PUSH2 0x71BF JUMPI JUMPDEST POP SWAP1 SWAP6 SWAP2 SWAP10 PUSH2 0x6D34 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x71E0 SWAP2 SWAP5 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x71D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x6BB0 JUMP JUMPDEST SWAP2 SWAP6 SWAP3 SWAP2 PUSH0 PUSH2 0x71B5 JUMP JUMPDEST PUSH32 0x6C02B39500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP4 SWAP3 PUSH0 SWAP5 PUSH2 0x7225 DUP5 PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD DUP2 DUP2 GT PUSH2 0x7235 JUMPI JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x7262 SWAP6 SWAP7 POP SWAP2 PUSH2 0x724A SWAP2 PUSH2 0x725B SWAP4 SUB PUSH2 0xB824 JUMP JUMPDEST SWAP3 PUSH1 0xA0 PUSH2 0x6D9A DUP3 PUSH1 0xC0 DUP7 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP2 PUSH2 0xB846 JUMP JUMPDEST SWAP1 PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x722E JUMP JUMPDEST PUSH32 0xB4120F1400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 GT SWAP1 DUP2 ISZERO PUSH2 0x72EF JUMPI JUMPDEST POP PUSH2 0x72C7 JUMPI PUSH1 0x80 SHL SWAP1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x465D JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x89560CA100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP DUP2 GT PUSH0 PUSH2 0x72B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 SWAP2 SWAP3 AND PUSH0 MSTORE PUSH1 0x20 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH0 JUMPDEST PUSH1 0x60 DUP7 ADD MLOAD DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x7353 JUMPI SWAP1 PUSH2 0x7343 PUSH2 0x7334 DUP3 PUSH1 0x1 SWAP5 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x1ADB DUP4 PUSH1 0x80 DUP12 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST DUP2 PUSH0 MSTORE DUP4 DUP7 MSTORE DUP5 PUSH0 KECCAK256 SSTORE ADD PUSH2 0x7316 JUMP JUMPDEST POP POP POP POP POP SWAP1 POP JUMP JUMPDEST SWAP2 PUSH2 0x7365 PUSH2 0x79F6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 PUSH0 KECCAK256 SWAP2 PUSH0 PUSH1 0x20 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP2 PUSH1 0x4 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 PUSH1 0x3 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SWAP5 DUP6 SLOAD SWAP5 DUP9 MSTORE PUSH2 0x73A9 PUSH1 0x20 DUP10 ADD SWAP7 PUSH2 0xB8D6 JUMP JUMPDEST DUP7 MSTORE PUSH2 0x73B4 DUP6 PUSH2 0xB8F1 JUMP JUMPDEST SWAP4 DUP1 DUP10 ADD SWAP5 DUP6 MSTORE PUSH2 0x73C4 DUP7 PUSH2 0x57E7 JUMP JUMPDEST SWAP3 PUSH1 0x60 DUP11 ADD SWAP4 DUP5 MSTORE PUSH2 0x73D5 DUP8 PUSH2 0x57E7 JUMP JUMPDEST PUSH1 0x80 DUP12 ADD MSTORE PUSH2 0x73E5 DUP8 DUP12 MLOAD PUSH2 0xC515 JUMP JUMPDEST PUSH1 0xC0 DUP12 ADD MSTORE PUSH2 0x73F3 DUP8 PUSH2 0x57E7 JUMP JUMPDEST PUSH1 0xA0 DUP12 ADD SWAP1 DUP2 MSTORE DUP11 MLOAD SWAP2 PUSH1 0x1 SWAP10 PUSH1 0x1 DUP5 DUP2 SHR AND SWAP4 DUP5 PUSH2 0x75AA JUMPI JUMPDEST POP DUP4 PUSH2 0x7598 JUMPI JUMPDEST PUSH0 JUMPDEST DUP14 DUP12 DUP3 LT PUSH2 0x7475 JUMPI POP POP POP POP POP POP POP POP POP POP POP POP POP DUP1 PUSH2 0x7465 PUSH2 0x744D PUSH2 0x746C SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0xB97E JUMP JUMPDEST SWAP1 PUSH2 0x6EB PUSH2 0x7A4B JUMP JUMPDEST SWAP1 DUP11 DUP11 DUP15 SWAP4 DUP11 PUSH2 0x74C0 DUP6 PUSH2 0x74AC DUP2 PUSH2 0x749E PUSH2 0x7499 DUP14 PUSH2 0x682B PUSH2 0x29BF DUP16 DUP7 SWAP1 MLOAD PUSH2 0x5818 JUMP JUMPDEST PUSH2 0xB93F JUMP JUMPDEST SWAP5 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP6 MLOAD DUP4 PUSH2 0x74BA DUP4 DUP4 PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH2 0x5818 JUMP JUMPDEST POP PUSH2 0x74CA DUP2 PUSH2 0xBB7D JUMP JUMPDEST PUSH2 0x74D5 DUP7 DUP12 MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH2 0x74F4 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND DUP8 DUP6 PUSH2 0xB7D2 JUMP JUMPDEST DUP10 ISZERO PUSH2 0x758F JUMPI DUP6 PUSH2 0x7507 DUP13 DUP4 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP2 DUP3 PUSH2 0x7571 JUMPI JUMPDEST POP POP PUSH2 0x751F JUMPI JUMPDEST POP POP POP JUMPDEST ADD PUSH2 0x7416 JUMP JUMPDEST DUP4 PUSH2 0x7545 DUP14 DUP3 PUSH2 0x753A DUP2 PUSH2 0x7533 DUP8 MLOAD PUSH2 0xC571 JUMP JUMPDEST SWAP4 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP7 PUSH1 0x80 SHR DUP6 PUSH2 0x7212 JUMP JUMPDEST SWAP4 DUP5 PUSH2 0x7553 JUMPI JUMPDEST POP POP PUSH2 0x7515 JUMP JUMPDEST PUSH2 0x7566 SWAP5 PUSH2 0x7560 SWAP2 PUSH2 0x57A4 JUMP JUMPDEST SWAP2 PUSH2 0xB7D2 JUMP JUMPDEST PUSH0 DUP16 DUP12 SWAP1 DUP4 DUP4 PUSH2 0x754C JUMP JUMPDEST SWAP1 SWAP2 POP MLOAD PUSH2 0x757E DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x7587 DUP2 PUSH2 0x1015 JUMP JUMPDEST EQ DUP6 PUSH0 PUSH2 0x750E JUMP JUMPDEST POP POP POP POP PUSH2 0x7519 JUMP JUMPDEST DUP13 MLOAD SWAP1 SWAP4 POP PUSH1 0x3 SHR PUSH1 0x1 AND ISZERO SWAP3 PUSH2 0x7414 JUMP JUMPDEST PUSH2 0x75B5 SWAP2 SWAP5 POP PUSH2 0xC571 JUMP JUMPDEST ISZERO ISZERO SWAP3 PUSH0 PUSH2 0x740D JUMP JUMPDEST PUSH2 0x75C6 PUSH2 0x5637 JUMP JUMPDEST SWAP1 PUSH2 0x75CF PUSH2 0x79F6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH0 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SLOAD SWAP1 PUSH1 0x4 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SWAP1 PUSH1 0x3 PUSH1 0x20 MSTORE DUP4 PUSH0 KECCAK256 SWAP4 DUP5 SLOAD SWAP4 DUP8 MSTORE PUSH2 0x7612 PUSH1 0x20 DUP9 ADD SWAP6 PUSH2 0xB8D6 JUMP JUMPDEST DUP6 MSTORE PUSH2 0x761D DUP5 PUSH2 0xB8F1 JUMP JUMPDEST SWAP2 DUP2 DUP9 ADD SWAP3 DUP4 MSTORE PUSH2 0x762D DUP6 PUSH2 0x57E7 JUMP JUMPDEST SWAP2 PUSH1 0x60 DUP10 ADD SWAP3 DUP4 MSTORE PUSH2 0x763E DUP7 PUSH2 0x57E7 JUMP JUMPDEST SWAP5 PUSH1 0x80 SWAP6 PUSH1 0x80 DUP12 ADD MSTORE PUSH2 0x7652 DUP8 DUP12 MLOAD PUSH2 0xC515 JUMP JUMPDEST PUSH1 0xC0 DUP12 ADD MSTORE PUSH2 0x7660 DUP8 PUSH2 0x57E7 JUMP JUMPDEST PUSH1 0xA0 DUP12 ADD SWAP1 DUP2 MSTORE DUP11 MLOAD SWAP2 PUSH1 0x1 SWAP10 PUSH1 0x1 DUP5 DUP2 SHR AND SWAP4 DUP5 PUSH2 0x77D6 JUMPI JUMPDEST POP DUP4 PUSH2 0x77C4 JUMPI JUMPDEST PUSH0 JUMPDEST DUP14 DUP12 DUP3 LT PUSH2 0x76C2 JUMPI POP POP POP POP POP POP POP POP POP POP POP POP POP DUP1 PUSH2 0x7465 PUSH2 0x744D PUSH2 0x76BA SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0xB23 PUSH2 0x7A4B JUMP JUMPDEST SWAP1 DUP11 DUP14 SWAP3 DUP3 DUP13 DUP13 DUP13 PUSH2 0x76F6 DUP5 PUSH2 0x76E8 DUP2 PUSH2 0x749E PUSH2 0x7499 DUP16 DUP16 PUSH2 0x29BF DUP6 PUSH2 0x682B SWAP3 MLOAD PUSH2 0x5818 JUMP JUMPDEST SLOAD SWAP5 MLOAD DUP4 PUSH2 0x74BA DUP4 DUP4 PUSH2 0x5818 JUMP JUMPDEST POP PUSH2 0x7700 DUP2 PUSH2 0xBB7D JUMP JUMPDEST PUSH2 0x770B DUP6 DUP14 MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH2 0x7729 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP6 DUP8 PUSH2 0xB742 JUMP JUMPDEST DUP8 DUP14 DUP14 ISZERO PUSH2 0x77B7 JUMPI DUP3 ADD MLOAD ISZERO ISZERO SWAP2 DUP3 PUSH2 0x7799 JUMPI JUMPDEST POP POP PUSH2 0x7750 JUMPI JUMPDEST POP POP POP POP POP JUMPDEST ADD PUSH2 0x7683 JUMP JUMPDEST DUP3 PUSH2 0x7773 SWAP3 PUSH2 0x776A DUP3 PUSH2 0x7763 DUP9 MLOAD PUSH2 0xC571 JUMP JUMPDEST SWAP5 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP7 SHR DUP6 PUSH2 0x7212 JUMP JUMPDEST SWAP3 DUP4 PUSH2 0x7783 JUMPI JUMPDEST DUP15 SWAP4 POP DUP13 PUSH2 0x7744 JUMP JUMPDEST PUSH2 0x7790 SWAP4 PUSH2 0x6E44 SWAP2 PUSH2 0x57A4 JUMP JUMPDEST PUSH0 DUP16 DUP3 DUP3 PUSH2 0x777A JUMP JUMPDEST SWAP1 SWAP2 POP MLOAD PUSH2 0x77A6 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x77AF DUP2 PUSH2 0x1015 JUMP JUMPDEST EQ DUP8 PUSH0 PUSH2 0x773D JUMP JUMPDEST POP POP POP POP POP POP POP POP PUSH2 0x774A JUMP JUMPDEST DUP13 MLOAD SWAP1 SWAP4 POP PUSH1 0x3 SHR PUSH1 0x1 AND ISZERO SWAP3 PUSH2 0x7681 JUMP JUMPDEST PUSH2 0x77E1 SWAP2 SWAP5 POP PUSH2 0xC571 JUMP JUMPDEST ISZERO ISZERO SWAP3 PUSH0 PUSH2 0x767A JUMP JUMPDEST PUSH2 0x77F2 PUSH2 0x5637 JUMP JUMPDEST SWAP1 PUSH2 0x77FB PUSH2 0x79F6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH0 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SLOAD SWAP1 PUSH1 0x4 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SWAP1 PUSH1 0x3 PUSH1 0x20 MSTORE DUP4 PUSH0 KECCAK256 SWAP4 DUP5 SLOAD SWAP4 DUP8 MSTORE PUSH2 0x783E PUSH1 0x20 DUP9 ADD SWAP6 PUSH2 0xB8D6 JUMP JUMPDEST DUP6 MSTORE PUSH2 0x7849 DUP5 PUSH2 0xB8F1 JUMP JUMPDEST SWAP2 DUP2 DUP9 ADD SWAP3 DUP4 MSTORE PUSH2 0x7859 DUP6 PUSH2 0x57E7 JUMP JUMPDEST SWAP2 PUSH1 0x60 DUP10 ADD SWAP3 DUP4 MSTORE PUSH2 0x786A DUP7 PUSH2 0x57E7 JUMP JUMPDEST SWAP5 PUSH1 0x80 SWAP6 PUSH1 0x80 DUP12 ADD MSTORE PUSH2 0x787E DUP8 DUP12 MLOAD PUSH2 0xC515 JUMP JUMPDEST PUSH1 0xC0 DUP12 ADD MSTORE PUSH2 0x788C DUP8 PUSH2 0x57E7 JUMP JUMPDEST PUSH1 0xA0 DUP12 ADD SWAP1 DUP2 MSTORE DUP11 MLOAD SWAP2 PUSH1 0x1 SWAP10 PUSH1 0x1 DUP5 DUP2 SHR AND SWAP4 DUP5 PUSH2 0x79E2 JUMPI JUMPDEST POP DUP4 PUSH2 0x79D0 JUMPI JUMPDEST PUSH0 JUMPDEST DUP14 DUP12 DUP3 LT PUSH2 0x78E6 JUMPI POP POP POP POP POP POP POP POP POP POP POP POP POP DUP1 PUSH2 0x7465 PUSH2 0x744D PUSH2 0x76BA SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP11 DUP14 SWAP3 DUP3 DUP13 DUP13 DUP13 PUSH2 0x790C DUP5 PUSH2 0x76E8 DUP2 PUSH2 0x749E PUSH2 0x7499 DUP16 DUP16 PUSH2 0x29BF DUP6 PUSH2 0x682B SWAP3 MLOAD PUSH2 0x5818 JUMP JUMPDEST POP PUSH2 0x7916 DUP2 PUSH2 0xBB7D JUMP JUMPDEST PUSH2 0x7921 DUP6 DUP14 MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH2 0x793F PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP6 DUP8 PUSH2 0xB78F JUMP JUMPDEST DUP8 DUP14 DUP14 ISZERO PUSH2 0x79C3 JUMPI DUP3 ADD MLOAD ISZERO ISZERO SWAP2 DUP3 PUSH2 0x79A5 JUMPI JUMPDEST POP POP PUSH2 0x7966 JUMPI JUMPDEST POP POP POP POP POP JUMPDEST ADD PUSH2 0x78AF JUMP JUMPDEST DUP3 PUSH2 0x7979 SWAP3 PUSH2 0x776A DUP3 PUSH2 0x7763 DUP9 MLOAD PUSH2 0xC571 JUMP JUMPDEST SWAP3 DUP4 PUSH2 0x7989 JUMPI JUMPDEST DUP15 SWAP4 POP DUP13 PUSH2 0x795A JUMP JUMPDEST PUSH2 0x799C SWAP4 PUSH2 0x7996 SWAP2 PUSH2 0x57A4 JUMP JUMPDEST SWAP2 PUSH2 0xB78F JUMP JUMPDEST PUSH0 DUP16 DUP3 DUP3 PUSH2 0x7980 JUMP JUMPDEST SWAP1 SWAP2 POP MLOAD PUSH2 0x79B2 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x79BB DUP2 PUSH2 0x1015 JUMP JUMPDEST EQ DUP8 PUSH0 PUSH2 0x7953 JUMP JUMPDEST POP POP POP POP POP POP POP POP PUSH2 0x7960 JUMP JUMPDEST DUP13 MLOAD SWAP1 SWAP4 POP PUSH1 0x3 SHR PUSH1 0x1 AND ISZERO SWAP3 PUSH2 0x78AD JUMP JUMPDEST PUSH2 0x79ED SWAP2 SWAP5 POP PUSH2 0xC571 JUMP JUMPDEST ISZERO ISZERO SWAP3 PUSH0 PUSH2 0x78A6 JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x7A23 JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE JUMP JUMPDEST PUSH32 0x0 TLOAD ISZERO PUSH2 0x7A99 JUMPI JUMP JUMPDEST PUSH32 0xC09BA73600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x7ACB SWAP1 PUSH2 0xBA85 JUMP JUMPDEST SWAP1 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP3 EQ PUSH2 0x465D JUMPI PUSH2 0x6EB SWAP2 PUSH0 SUB SWAP1 PUSH2 0xADB5 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 SWAP2 PUSH2 0x7B0E DUP3 DUP5 DUP7 PUSH2 0xBADA JUMP JUMPDEST PUSH0 NOT DUP2 SUB PUSH2 0x7B1D JUMPI POP POP POP POP POP JUMP JUMPDEST DUP1 DUP3 GT PUSH2 0x7CA1 JUMPI SUB SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP2 AND SWAP4 DUP5 ISZERO PUSH2 0x7C6C JUMPI DUP1 DUP4 AND SWAP6 DUP7 ISZERO PUSH2 0x7C37 JUMPI DUP5 PUSH2 0x7B7D DUP6 PUSH2 0x7B67 DUP7 PUSH2 0x7B67 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x10 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x6DC JUMPI PUSH1 0x40 MLOAD PUSH32 0x5687F2B800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH32 0xA0175360A15BCA328BAF7EA85C7B784D58B222A50D0CE760B10DBA336D226A61 SWAP2 PUSH2 0x7C17 SWAP2 PUSH0 DUP2 DUP1 PUSH1 0x64 DUP2 ADD JUMPDEST SUB DUP2 DUP4 DUP10 GAS CALL PUSH2 0x7C24 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x722E JUMP JUMPDEST DUP1 PUSH2 0x1C88 PUSH2 0x7C31 SWAP3 PUSH2 0x85F JUMP JUMPDEST PUSH0 PUSH2 0x7C06 JUMP JUMPDEST PUSH32 0x94280D6200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xE602DF0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 PUSH32 0xFB8F41B200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST SWAP3 SWAP1 SWAP2 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0x7E73 JUMPI DUP1 DUP7 AND SWAP2 DUP3 ISZERO PUSH2 0x7E3E JUMPI PUSH2 0x7D1C DUP7 PUSH2 0x7B67 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD DUP1 DUP7 GT PUSH2 0x7E01 JUMPI DUP6 SWAP1 SUB PUSH2 0x7D46 DUP8 PUSH2 0x7B67 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0x7D66 DUP8 PUSH2 0x7B67 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP6 DUP2 SLOAD ADD SWAP1 SSTORE AND SWAP2 DUP3 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F PUSH1 0x40 MLOAD DUP1 PUSH2 0x7DA3 DUP9 DUP3 SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB SWAP1 LOG4 DUP1 EXTCODESIZE ISZERO PUSH2 0x6DC JUMPI PUSH1 0x40 MLOAD PUSH32 0x23DE665100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP4 SWAP1 SWAP3 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE PUSH0 SWAP1 DUP3 SWAP1 DUP2 DUP4 DUP2 PUSH1 0x64 DUP2 ADD PUSH2 0x5619 JUMP JUMPDEST PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 DUP6 SWAP1 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x96C6FD1E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 PUSH2 0x7EB3 PUSH2 0x57B1 JUMP JUMPDEST POP DUP1 MLOAD SWAP3 PUSH2 0x7EC0 DUP5 PUSH2 0x1015 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 DUP3 ADD MLOAD SWAP4 ADD MLOAD PUSH1 0xC0 PUSH1 0x20 DUP4 MLOAD SWAP4 ADD MLOAD SWAP4 ADD MLOAD SWAP4 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x7EE4 DUP8 PUSH2 0x873 JUMP JUMPDEST PUSH2 0x7EED DUP2 PUSH2 0x1015 JUMP JUMPDEST DUP7 MSTORE PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE CALLER PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 DUP4 ISZERO PUSH2 0x7E73 JUMPI PUSH2 0x7F44 DUP6 PUSH2 0x7B67 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD DUP1 DUP5 GT PUSH2 0x803F JUMPI DUP4 SWAP1 SUB PUSH2 0x7F6E DUP7 PUSH2 0x7B67 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0x7F94 DUP4 PUSH2 0x7F8E DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x57A4 JUMP JUMPDEST PUSH2 0x7F9D DUP2 PUSH2 0xBB26 JUMP JUMPDEST PUSH2 0x7FB8 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP1 DUP2 EXTCODESIZE ISZERO PUSH2 0x6DC JUMPI PUSH1 0x40 MLOAD PUSH32 0x23DE665100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP5 AND PUSH1 0x4 DUP6 ADD MSTORE PUSH0 PUSH1 0x24 DUP6 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP6 ADD DUP3 SWAP1 MSTORE SWAP4 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F SWAP2 PUSH2 0x803A SWAP2 DUP7 DUP2 DUP1 PUSH1 0x64 DUP2 ADD PUSH2 0x7BFB JUMP JUMPDEST SUB SWAP1 LOG4 JUMP JUMPDEST PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 DUP4 SWAP1 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 SHR AND ISZERO PUSH2 0x809E JUMPI POP JUMP JUMPDEST PUSH32 0x4BDACE1300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x6EB SWAP1 PUSH2 0x7F0 PUSH2 0x69D7 JUMP JUMPDEST SUB PUSH2 0x80DC JUMPI JUMP JUMPDEST PUSH32 0xAAAD13F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 MLOAD SWAP2 PUSH2 0x8117 DUP3 MLOAD DUP3 MLOAD SWAP1 DUP6 PUSH2 0xBB5E JUMP JUMPDEST PUSH2 0x8120 DUP4 PUSH2 0x57E7 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x8132 JUMPI POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x815B PUSH2 0x8142 PUSH1 0x1 SWAP4 DUP6 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x6B04 PUSH2 0x8150 DUP5 DUP10 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x6AB8 DUP6 DUP10 PUSH2 0x5818 JUMP JUMPDEST PUSH2 0x8165 DUP3 DUP10 PUSH2 0x5818 JUMP JUMPDEST MSTORE ADD PUSH2 0x8123 JUMP JUMPDEST SWAP6 SWAP3 SWAP4 PUSH2 0x819D PUSH2 0x81C1 SWAP6 PUSH2 0xB23 SWAP10 SWAP8 SWAP4 PUSH2 0x81B3 SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP12 MSTORE AND PUSH1 0x20 DUP11 ADD MSTORE PUSH1 0x40 DUP10 ADD SWAP1 PUSH2 0x685B JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0xE0 PUSH1 0x80 DUP8 ADD MSTORE PUSH1 0xE0 DUP7 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP1 DUP5 DUP3 SUB PUSH1 0xA0 DUP7 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST SWAP2 PUSH1 0xC0 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x1177 JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 SWAP6 SWAP7 SWAP4 PUSH2 0x8247 PUSH2 0x81F1 DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH1 0x80 DUP9 ADD MLOAD SWAP8 PUSH2 0x8201 DUP10 PUSH2 0x6851 JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x80 PUSH1 0x40 DUP4 ADD MLOAD SWAP13 ADD MLOAD SWAP2 ADD MLOAD SWAP2 PUSH1 0x40 MLOAD SWAP12 DUP13 SWAP11 DUP12 SWAP10 DUP11 SWAP8 PUSH32 0xBA5F9F4000000000000000000000000000000000000000000000000000000000 DUP10 MSTORE PUSH1 0x4 DUP10 ADD PUSH2 0x816C JUMP JUMPDEST SUB SWAP4 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP2 PUSH2 0x828A JUMPI JUMPDEST POP ISZERO PUSH2 0x8262 JUMPI JUMP JUMPDEST PUSH32 0x2AAF886600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x82A3 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x7C4 JUMPI PUSH2 0x7BA DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x825A JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD MLOAD MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x82C1 JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH2 0x8338 PUSH1 0x40 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x82EA PUSH2 0x4E4A DUP6 DUP5 DUP12 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST SWAP2 PUSH1 0xA0 DUP10 ADD SWAP3 PUSH2 0x82FB DUP7 DUP6 MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE DUP5 PUSH0 MSTORE DUP7 DUP9 MSTORE PUSH0 KECCAK256 SLOAD AND SWAP1 DUP2 PUSH2 0x8316 DUP6 PUSH1 0x60 DUP12 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH2 0x8331 DUP5 PUSH2 0x8329 DUP2 PUSH1 0xC0 DUP13 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP3 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP2 PUSH2 0xC6C4 JUMP JUMPDEST PUSH2 0x8346 DUP3 PUSH1 0x80 DUP9 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE ADD PUSH2 0x82B3 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD MLOAD MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x8365 JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH2 0x83D4 PUSH1 0x40 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x838E PUSH2 0x4E4A DUP6 DUP5 DUP12 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST SWAP2 PUSH1 0xA0 DUP10 ADD SWAP3 PUSH2 0x839F DUP7 DUP6 MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE DUP5 PUSH0 MSTORE DUP7 DUP9 MSTORE PUSH0 KECCAK256 SLOAD AND SWAP1 DUP2 PUSH2 0x83BA DUP6 PUSH1 0x60 DUP12 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH2 0x83CD DUP5 PUSH2 0x8329 DUP2 PUSH1 0xC0 DUP13 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP2 PUSH2 0xC6DB JUMP JUMPDEST PUSH2 0x83E2 DUP3 PUSH1 0x80 DUP9 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE ADD PUSH2 0x8357 JUMP JUMPDEST PUSH1 0x80 DUP2 DUP4 SUB SLT PUSH2 0x6DC JUMPI DUP1 MLOAD SWAP3 PUSH1 0x20 DUP3 ADD MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x6DC JUMPI DUP5 PUSH2 0x8419 SWAP2 DUP4 ADD PUSH2 0x6B09 JUMP JUMPDEST SWAP4 PUSH1 0x40 DUP3 ADD MLOAD DUP5 DUP2 GT PUSH2 0x6DC JUMPI DUP2 PUSH2 0x6BFA SWAP2 DUP5 ADD PUSH2 0x6B09 JUMP JUMPDEST SWAP4 SWAP1 PUSH2 0xB23 SWAP6 SWAP4 PUSH2 0x6C4E SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x8462 SWAP4 AND DUP8 MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP8 ADD MSTORE PUSH1 0xA0 DUP7 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP1 DUP5 DUP3 SUB PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST SWAP3 PUSH2 0x8479 PUSH2 0x79F6 JUMP JUMPDEST PUSH1 0x60 SWAP2 PUSH2 0x8484 PUSH2 0x5B3F JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP7 ADD SWAP1 PUSH2 0x8498 DUP3 MLOAD MLOAD DUP1 DUP8 MSTORE PUSH2 0x57E7 JUMP JUMPDEST SWAP1 PUSH1 0x80 DUP5 ADD SWAP7 DUP8 MLOAD PUSH2 0x84A9 DUP2 PUSH2 0x6851 JUMP JUMPDEST PUSH2 0x84B2 DUP2 PUSH2 0x6851 JUMP JUMPDEST PUSH2 0x8870 JUMPI POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 PUSH2 0x84C7 DUP8 MLOAD PUSH2 0x57E7 JUMP JUMPDEST SWAP6 PUSH2 0x84EB DUP4 PUSH1 0x80 DUP13 ADD MLOAD PUSH2 0x84E5 PUSH2 0x6D14 DUP11 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0xBF37 JUMP JUMPDEST SWAP3 PUSH2 0x855C PUSH32 0x0 TLOAD PUSH2 0x8522 DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0x0 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP1 JUMP JUMPDEST PUSH2 0x87F3 JUMPI JUMPDEST PUSH1 0x40 DUP8 ADD MLOAD DUP1 DUP3 GT PUSH2 0x87C2 JUMPI POP PUSH2 0x857A DUP2 SWAP11 SWAP10 SWAP11 PUSH2 0x97B4 JUMP JUMPDEST PUSH1 0x20 DUP11 ADD SWAP9 PUSH0 JUMPDEST DUP12 MLOAD DUP2 LT ISZERO PUSH2 0x86A1 JUMPI DUP13 PUSH2 0x8595 DUP3 DUP9 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x859F DUP2 PUSH2 0x97B4 JUMP JUMPDEST PUSH2 0x85A9 DUP4 DUP11 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x868F JUMPI DUP2 PUSH2 0x725B DUP5 PUSH1 0xA0 PUSH2 0x6D9A DUP3 PUSH1 0xC0 PUSH2 0x85C6 SWAP9 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST DUP1 PUSH2 0x85D1 DUP4 DUP11 PUSH2 0x5818 JUMP JUMPDEST MSTORE JUMPDEST PUSH2 0x85E1 PUSH2 0x29BF DUP4 DUP12 MLOAD PUSH2 0x5818 JUMP JUMPDEST PUSH1 0x60 DUP12 ADD PUSH2 0x85F0 DUP5 DUP3 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD DUP4 LT PUSH2 0x8643 JUMPI POP DUP15 DUP4 PUSH2 0x6E44 DUP16 DUP16 DUP16 SWAP7 PUSH2 0x8637 SWAP2 PUSH2 0x861F DUP7 PUSH2 0x6E1F DUP2 DUP12 PUSH1 0x1 SWAP15 SWAP14 PUSH2 0x6DFC DUP9 PUSH2 0x863D SWAP16 PUSH2 0x7AC1 JUMP JUMPDEST MSTORE PUSH2 0x862E DUP6 PUSH1 0x60 DUP9 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP3 MLOAD SWAP1 PUSH2 0x6C6A JUMP JUMPDEST SWAP1 PUSH2 0x57A4 JUMP JUMPDEST ADD PUSH2 0x8581 JUMP JUMPDEST SWAP2 PUSH2 0x8652 DUP5 PUSH2 0x2420 SWAP5 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST POP POP PUSH2 0x869B DUP2 DUP9 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x85D3 JUMP JUMPDEST POP SWAP4 SWAP10 POP SWAP6 SWAP5 POP SWAP6 SWAP3 SWAP9 PUSH2 0x86C2 SWAP2 SWAP8 POP PUSH2 0x6ECD DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH32 0xFBE5B0D79FB94F1E81C0A92BF86AE9D3A19E9D1BF6202C0D3E75120F65D5D8A5 PUSH2 0x86F4 DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 PUSH2 0x8716 DUP7 PUSH1 0x20 DUP8 ADD SWAP6 PUSH2 0x870F DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST CALLER SWAP2 PUSH2 0x7AFF JUMP JUMPDEST PUSH2 0x871E PUSH2 0xBF88 JUMP JUMPDEST PUSH2 0x8797 JUMPI JUMPDEST PUSH2 0x8749 DUP7 PUSH2 0x8738 DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x7F11 JUMP JUMPDEST PUSH2 0x876F PUSH2 0x6D14 PUSH2 0x8763 PUSH2 0x6F3F DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 MLOAD SWAP7 PUSH2 0x29BF DUP9 PUSH2 0x6851 JUMP JUMPDEST SWAP3 PUSH2 0x6F81 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH2 0x8785 DUP9 PUSH2 0x6851 JUMP JUMPDEST DUP13 DUP5 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP6 AND SWAP9 AND SWAP7 DUP5 PUSH2 0x6C77 JUMP JUMPDEST PUSH2 0x87BD DUP7 PUSH2 0x87AC DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0xBF9D JUMP JUMPDEST PUSH2 0x8723 JUMP JUMPDEST PUSH32 0x31D38E0B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP9 SWAP5 SWAP2 PUSH2 0x8806 DUP12 SWAP8 SWAP5 SWAP10 SWAP6 SWAP3 SWAP12 MLOAD PUSH2 0xB2A3 JUMP JUMPDEST SWAP11 PUSH0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x8860 JUMPI DUP1 DUP12 PUSH2 0x8859 DUP16 SWAP4 PUSH2 0x8853 PUSH2 0x8842 DUP16 DUP4 SWAP1 PUSH2 0x8838 PUSH1 0x1 SWAP10 PUSH2 0x8832 DUP5 DUP11 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0xB824 JUMP JUMPDEST PUSH2 0x74BA DUP4 DUP4 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x884D DUP4 DUP7 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x57A4 JUMP JUMPDEST SWAP3 PUSH2 0x5818 JUMP JUMPDEST MSTORE ADD PUSH2 0x8809 JUMP JUMPDEST POP SWAP2 SWAP5 SWAP9 SWAP4 SWAP7 SWAP11 POP SWAP2 SWAP5 SWAP9 PUSH2 0x8561 JUMP JUMPDEST SWAP5 SWAP1 PUSH1 0x1 DUP9 MLOAD PUSH2 0x887F DUP2 PUSH2 0x6851 JUMP JUMPDEST PUSH2 0x8888 DUP2 PUSH2 0x6851 JUMP JUMPDEST SUB PUSH2 0x88F7 JUMPI PUSH2 0x8897 DUP10 MLOAD PUSH2 0xB1E0 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP2 DUP7 SWAP3 DUP11 PUSH2 0x88F1 PUSH2 0x88E7 DUP12 DUP11 PUSH1 0x40 PUSH2 0x88B7 PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0xB214 JUMP JUMPDEST SWAP3 ADD SWAP5 DUP3 DUP7 MSTORE DUP7 PUSH1 0x80 DUP3 ADD MLOAD SWAP4 PUSH2 0x88E1 PUSH2 0x213F PUSH2 0x70EE PUSH2 0x70E7 PUSH2 0x6D14 DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH2 0xBE8A JUMP JUMPDEST SWAP1 SWAP3 MLOAD SWAP1 SWAP11 PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH2 0x8561 JUMP JUMPDEST PUSH1 0x2 DUP9 SWAP7 SWAP3 SWAP7 MLOAD PUSH2 0x8907 DUP2 PUSH2 0x6851 JUMP JUMPDEST PUSH2 0x8910 DUP2 PUSH2 0x6851 JUMP JUMPDEST SUB PUSH2 0x89A3 JUMPI PUSH2 0x891F DUP10 MLOAD PUSH2 0xB1E0 JUMP JUMPDEST PUSH2 0x899C DUP3 PUSH1 0x60 DUP8 ADD SWAP1 PUSH2 0x8943 PUSH2 0x8935 DUP4 MLOAD PUSH2 0xB214 JUMP JUMPDEST PUSH1 0x40 DUP13 ADD SWAP4 DUP2 DUP6 MSTORE MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x894F DUP4 MLOAD DUP9 PUSH2 0x5818 JUMP JUMPDEST MSTORE DUP12 PUSH2 0x8962 PUSH1 0x80 DUP3 ADD MLOAD SWAP4 MLOAD DUP1 SWAP4 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x8981 PUSH2 0x897A PUSH2 0x6D14 DUP13 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 MLOAD PUSH2 0xB2A3 JUMP JUMPDEST SWAP3 PUSH2 0x8996 PUSH2 0x213F DUP13 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH2 0xBC82 JUMP JUMPDEST SWAP7 SWAP1 PUSH2 0x8561 JUMP JUMPDEST POP SWAP4 PUSH1 0x3 DUP8 MLOAD PUSH2 0x89B2 DUP2 PUSH2 0x6851 JUMP JUMPDEST PUSH2 0x89BB DUP2 PUSH2 0x6851 JUMP JUMPDEST SUB PUSH2 0x8A7C JUMPI PUSH2 0x89CA DUP9 MLOAD PUSH2 0xBC4D JUMP JUMPDEST PUSH0 PUSH2 0x89E2 PUSH2 0x213F PUSH2 0x213F DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP6 PUSH1 0x40 DUP7 ADD MLOAD SWAP7 PUSH1 0x80 DUP12 ADD MLOAD SWAP2 DUP4 PUSH1 0xA0 DUP10 ADD MLOAD SWAP10 PUSH2 0x8A30 PUSH1 0x40 MLOAD SWAP12 DUP13 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xAB68E28C00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE CALLER PUSH1 0x4 DUP8 ADD PUSH2 0x8432 JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP5 DUP6 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP2 PUSH0 SWAP7 PUSH0 SWAP3 PUSH0 SWAP2 PUSH2 0x8A51 JUMPI JUMPDEST POP SWAP2 SWAP7 SWAP3 PUSH2 0x8561 JUMP JUMPDEST SWAP3 POP POP SWAP6 POP PUSH2 0x8A72 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x8A6A DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x83E9 JUMP JUMPDEST SWAP2 SWAP7 SWAP1 SWAP2 PUSH0 PUSH2 0x8A48 JUMP JUMPDEST PUSH32 0x137A9A3900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SLT PUSH2 0x6DC JUMPI DUP1 MLOAD PUSH2 0x8ABC DUP2 PUSH2 0xBB3 JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP3 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0xB23 SWAP3 ADD PUSH2 0x6B09 JUMP JUMPDEST SWAP7 SWAP4 SWAP5 PUSH2 0xB23 SWAP9 SWAP7 SWAP3 PUSH2 0x8B44 SWAP7 PUSH2 0x8B15 PUSH2 0x8B36 SWAP7 PUSH2 0x8B28 SWAP6 PUSH2 0x100 SWAP5 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 MSTORE AND PUSH1 0x20 DUP14 ADD MSTORE PUSH1 0x40 DUP13 ADD SWAP1 PUSH2 0x685B JUMP JUMPDEST PUSH1 0x60 DUP11 ADD MSTORE DUP1 PUSH1 0x80 DUP11 ADD MSTORE DUP9 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP1 DUP7 DUP3 SUB PUSH1 0xA0 DUP9 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST SWAP1 DUP5 DUP3 SUB PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST SWAP2 PUSH1 0xE0 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x1177 JUMP JUMPDEST SWAP5 SWAP4 SWAP6 SWAP3 SWAP7 SWAP2 SWAP1 DUP5 MLOAD PUSH2 0x8B6B SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x80 DUP7 ADD MLOAD SWAP3 PUSH2 0x8B7B DUP5 PUSH2 0x6851 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD DUP11 PUSH1 0xA0 DUP10 ADD MLOAD SWAP3 PUSH1 0x40 MLOAD SWAP12 DUP13 SWAP8 DUP9 SWAP8 PUSH32 0x2754888D00000000000000000000000000000000000000000000000000000000 DUP10 MSTORE PUSH1 0x4 DUP10 ADD SWAP8 PUSH2 0x8BC0 SWAP9 PUSH2 0x8ADB JUMP JUMPDEST SUB SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 DUP2 GAS PUSH0 SWAP5 DUP6 SWAP2 CALL SWAP4 DUP5 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP1 PUSH0 SWAP6 PUSH2 0x8CDD JUMPI JUMPDEST POP ISZERO DUP1 ISZERO PUSH2 0x8CD1 JUMPI JUMPDEST PUSH2 0x8CA9 JUMPI PUSH1 0x1 DUP1 SWAP4 PUSH1 0x9 SHR AND ISZERO PUSH2 0x8C0A JUMPI SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH0 DUP4 JUMPDEST PUSH2 0x8C11 JUMPI JUMPDEST POP POP POP POP SWAP1 JUMP JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x8CA4 JUMPI PUSH2 0x8C24 DUP2 DUP7 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH1 0x60 DUP5 ADD SWAP1 PUSH2 0x8C35 DUP4 DUP4 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD GT PUSH2 0x8C44 JUMPI POP DUP4 ADD DUP4 PUSH2 0x8C05 JUMP JUMPDEST PUSH2 0x8C67 DUP3 PUSH2 0x8329 DUP2 PUSH2 0x8C61 PUSH2 0x29BF DUP12 SWAP8 PUSH1 0x20 PUSH2 0x2420 SWAP11 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST SWAP6 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH32 0xFBD8A72400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST PUSH2 0x8C0A JUMP JUMPDEST PUSH32 0x1D3391D800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP DUP4 MLOAD DUP6 MLOAD EQ ISZERO PUSH2 0x8BEC JUMP JUMPDEST SWAP1 POP PUSH2 0x8CFC SWAP2 SWAP5 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x8CF4 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x8AA4 JUMP JUMPDEST SWAP4 SWAP1 PUSH0 PUSH2 0x8BE3 JUMP JUMPDEST PUSH0 SWAP5 SWAP2 SWAP4 SWAP3 SWAP4 PUSH2 0x8D12 PUSH2 0x79F6 JUMP JUMPDEST PUSH2 0x8D1A PUSH2 0x5B3F JUMP JUMPDEST SWAP2 DUP1 MLOAD PUSH2 0x8D26 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x8D2F DUP2 PUSH2 0x1015 JUMP JUMPDEST ISZERO PUSH2 0x90AC JUMPI JUMPDEST PUSH1 0x20 SWAP2 DUP3 DUP7 ADD PUSH2 0x8D45 DUP2 MLOAD PUSH2 0xAF52 JUMP JUMPDEST DUP4 PUSH2 0x8D9A DUP2 DUP6 ADD SWAP9 PUSH2 0x8D64 PUSH2 0x213F PUSH2 0x213F DUP13 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP13 DUP14 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x72C9818600000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x1759 JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP9 DUP10 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP10 PUSH2 0x908D JUMPI JUMPDEST POP DUP9 PUSH2 0x8DB7 DUP2 PUSH2 0xAF52 JUMP JUMPDEST DUP4 MLOAD PUSH2 0x8DC2 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x8DCB DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x901D JUMPI POP PUSH1 0x40 DUP3 ADD MLOAD SWAP1 MSTORE PUSH2 0x8E03 PUSH1 0xC0 DUP9 ADD MLOAD PUSH2 0x21EE PUSH2 0x21E8 PUSH2 0x8DF4 DUP8 DUP7 ADD SWAP4 DUP5 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP3 PUSH1 0xA0 DUP13 ADD MLOAD SWAP1 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST SWAP4 PUSH1 0x80 DUP4 ADD MLOAD SWAP7 DUP6 SWAP8 SWAP9 PUSH1 0xA0 DUP6 ADD MLOAD DUP1 DUP9 LT PUSH2 0x8FED JUMPI POP JUMPDEST PUSH1 0x40 DUP6 ADD SWAP5 DUP11 DUP7 MLOAD PUSH2 0x8E33 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x8E3D SWAP2 PUSH2 0x97C5 JUMP JUMPDEST PUSH1 0x60 ADD SWAP6 DUP10 DUP8 MLOAD PUSH2 0x8E54 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x8E5E SWAP2 PUSH2 0x7AC1 JUMP JUMPDEST DUP4 MLOAD DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MLOAD SWAP2 PUSH2 0x8E83 SWAP4 DUP7 PUSH2 0xAFE7 JUMP JUMPDEST SWAP2 SWAP1 DUP2 DUP7 ADD SWAP6 PUSH1 0x40 ADD SWAP3 DUP4 MSTORE DUP6 MSTORE DUP6 MLOAD PUSH1 0x60 DUP5 ADD SWAP3 DUP14 DUP3 DUP6 MLOAD SWAP1 PUSH2 0x8EA6 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x8EB1 SWAP2 PUSH2 0x6C6A JUMP JUMPDEST SWAP1 MLOAD PUSH2 0x8EBC SWAP2 PUSH2 0x57A4 JUMP JUMPDEST PUSH2 0x8EC6 SWAP2 DUP6 PUSH2 0xB742 JUMP JUMPDEST DUP6 ADD SWAP2 DUP3 MLOAD DUP12 DUP2 DUP5 MLOAD SWAP1 PUSH2 0x8ED9 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x8EE4 SWAP2 PUSH2 0x57A4 JUMP JUMPDEST PUSH2 0x8EEE SWAP2 DUP4 PUSH2 0xB742 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 DUP1 MLOAD DUP8 MLOAD PUSH2 0x8F14 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP2 PUSH1 0x80 ADD SWAP2 DUP3 MLOAD DUP9 MLOAD PUSH2 0x8F27 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x8F31 SWAP2 PUSH2 0x7295 JUMP JUMPDEST DUP8 MLOAD PUSH2 0x8F45 SWAP1 DUP6 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE MLOAD DUP4 MLOAD PUSH2 0x8F52 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 MLOAD DUP4 MLOAD PUSH2 0x8F60 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x8F6A SWAP2 PUSH2 0x7295 JUMP JUMPDEST SWAP2 MLOAD PUSH2 0x8F7D SWAP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE MLOAD SWAP3 MLOAD SWAP4 MLOAD PUSH1 0x60 SWAP3 DUP4 ADD MLOAD SWAP2 MLOAD PUSH1 0x40 DUP1 MLOAD DUP12 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP12 SWAP1 MSTORE SWAP1 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP4 DUP3 AND SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH32 0x874B2D545CB271CDBDA4E093020C452328B24AF12382ED62C4D00F5C26709DB SWAP1 PUSH1 0x80 SWAP1 LOG4 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x6EB PUSH2 0x7A4B JUMP JUMPDEST PUSH32 0xE2EA151B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 DUP9 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 POP DUP2 SWAP9 POP PUSH2 0x9044 PUSH1 0x60 PUSH2 0x904D SWAP4 ADD MLOAD PUSH8 0xDE0B6B3A7640000 DUP2 DUP2 SUB SWAP1 DUP3 LT MUL SWAP1 DUP4 PUSH2 0xC061 JUMP JUMPDEST SWAP1 DUP2 DUP7 MSTORE PUSH2 0x6C6A JUMP JUMPDEST SWAP7 PUSH2 0x9072 PUSH2 0x9061 PUSH1 0xC0 DUP10 ADD MLOAD DUP4 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x2477 PUSH1 0xA0 DUP11 ADD MLOAD DUP5 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST SWAP4 PUSH1 0x80 DUP4 ADD MLOAD SWAP7 DUP6 SWAP9 PUSH1 0xA0 DUP6 ADD MLOAD DUP1 DUP9 GT PUSH2 0x8FED JUMPI POP PUSH2 0x8E1B JUMP JUMPDEST PUSH2 0x90A5 SWAP2 SWAP10 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP8 PUSH0 PUSH2 0x8DAC JUMP JUMPDEST PUSH1 0x20 DUP6 ADD PUSH2 0x90C3 PUSH2 0x24D1 DUP3 MLOAD PUSH1 0x60 DUP7 ADD MLOAD SWAP1 PUSH2 0xB824 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x8D35 JUMP JUMPDEST DUP2 DUP2 SUB SWAP3 SWAP2 PUSH0 SGT DUP1 ISZERO DUP3 DUP6 SGT AND SWAP2 DUP5 SLT AND OR PUSH2 0x465D JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x912B PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0xBA85 JUMP JUMPDEST SWAP1 PUSH0 SWAP3 PUSH1 0x80 SHR DUP1 PUSH2 0x9149 JUMPI JUMPDEST POP POP PUSH1 0x2 SWAP2 PUSH2 0x9145 SWAP2 PUSH2 0x90CA JUMP JUMPDEST SDIV SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 POP SWAP1 PUSH1 0x24 PUSH1 0x20 SWAP3 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH32 0xB3D7F6B900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x91AA PUSH2 0x9145 SWAP3 PUSH1 0x2 SWAP5 PUSH0 SWAP2 PUSH2 0x91B3 JUMPI JUMPDEST POP PUSH2 0xBA85 JUMP JUMPDEST SWAP3 DUP2 SWAP3 POP PUSH2 0x9137 JUMP JUMPDEST PUSH2 0x91CC SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x91A4 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x91DC JUMPI DIV SWAP1 JUMP JUMPDEST PUSH2 0x90E2 JUMP JUMPDEST SWAP1 PUSH8 0xDE0B5CAD2BEF000 DUP2 GT PUSH2 0x4BFC JUMPI PUSH5 0x174876E800 SWAP1 DIV DUP1 PUSH1 0x18 SHR PUSH2 0x922C JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC000003FFFF SWAP1 PUSH1 0x12 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH32 0xE4337C0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 PUSH2 0x92A7 PUSH2 0x92B2 SWAP3 SWAP5 SWAP4 SWAP5 PUSH2 0x9267 PUSH2 0x5928 JUMP JUMPDEST SWAP6 DUP7 SWAP2 PUSH2 0x929D PUSH1 0x20 DUP4 ADD DUP1 MLOAD SWAP1 PUSH2 0x928D PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 PUSH1 0x40 DUP8 ADD MLOAD AND SWAP1 PUSH2 0xB10B JUMP JUMPDEST DUP7 MSTORE MLOAD SWAP1 PUSH1 0x60 DUP5 ADD MLOAD AND SWAP1 PUSH2 0xB10B JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x6A65 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MSTORE MLOAD PUSH2 0xB2A3 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP3 PUSH2 0x9309 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 PUSH1 0x40 MLOAD SWAP8 DUP9 SWAP7 DUP8 SWAP6 DUP7 SWAP4 PUSH32 0x5211FA7700000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x40 PUSH1 0x4 DUP7 ADD MSTORE PUSH1 0x44 DUP6 ADD SWAP1 PUSH2 0x16EB JUMP JUMPDEST SWAP2 AND PUSH1 0x24 DUP4 ADD MSTORE SUB SWAP4 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP2 PUSH2 0x9353 JUMPI JUMPDEST POP ISZERO PUSH2 0x932B JUMPI JUMP JUMPDEST PUSH32 0xE91E17E700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x936C SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x7C4 JUMPI PUSH2 0x7BA DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x9323 JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x6DC JUMPI PUSH1 0x20 DUP3 MLOAD PUSH2 0x938B DUP2 PUSH2 0xBB3 JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 JUMP JUMPDEST SWAP1 SWAP3 PUSH2 0x93E2 PUSH1 0x40 SWAP4 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 SWAP2 DUP7 MLOAD SWAP8 DUP9 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xA0E8F5AC00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE PUSH1 0x60 PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x64 DUP7 ADD SWAP1 PUSH2 0x16EB JUMP JUMPDEST SWAP3 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE SUB SWAP3 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0x9443 JUMPI JUMPDEST POP ISZERO PUSH2 0x941B JUMPI PUSH8 0xDE0B5CAD2BEF000 DUP2 GT PUSH2 0x4BFC JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x53F976D400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH2 0x9467 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x946E JUMPI JUMPDEST PUSH2 0x945F DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x9372 JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x9403 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x9455 JUMP JUMPDEST PUSH2 0x1A0 PUSH2 0xB23 SWAP3 PUSH1 0x20 DUP4 MSTORE PUSH2 0x948E PUSH1 0x20 DUP5 ADD DUP3 MLOAD PUSH2 0x16DE JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH2 0x100 SWAP1 DUP2 DUP6 ADD MSTORE DUP2 ADD MLOAD PUSH2 0x120 SWAP1 DUP2 DUP6 ADD MSTORE DUP2 ADD MLOAD PUSH2 0x950F PUSH2 0x140 SWAP2 DUP3 DUP7 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST DUP2 ADD MLOAD SWAP1 PUSH2 0x952B PUSH2 0x160 SWAP3 DUP4 DUP7 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST ADD MLOAD SWAP2 PUSH2 0x180 DUP1 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x1177 JUMP JUMPDEST SWAP4 SWAP6 SWAP1 SWAP2 SWAP5 SWAP3 DUP7 MLOAD PUSH2 0x954D DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x9556 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x97A5 JUMPI DUP7 PUSH1 0x40 DUP6 ADD MLOAD SWAP2 DUP5 JUMPDEST DUP3 MLOAD SWAP5 PUSH2 0x956F DUP7 PUSH2 0x1015 JUMP JUMPDEST PUSH1 0x40 SWAP8 DUP9 SWAP8 DUP9 DUP7 ADD MLOAD PUSH2 0x9588 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP7 PUSH1 0x60 DUP8 ADD MLOAD PUSH2 0x959E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP4 PUSH1 0x80 ADD SWAP3 DUP4 MLOAD DUP2 MLOAD PUSH2 0x95B0 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP4 MLOAD SWAP1 PUSH1 0x20 ADD MLOAD PUSH2 0x95C1 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x20 DUP9 ADD MLOAD PUSH2 0x95D8 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP8 PUSH1 0xC0 ADD MLOAD SWAP9 PUSH2 0x95E6 PUSH2 0x921 JUMP JUMPDEST SWAP11 PUSH2 0x95F1 SWAP1 DUP13 PUSH2 0x5F73 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x20 DUP12 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 DUP12 ADD MSTORE PUSH1 0x60 DUP10 ADD MSTORE PUSH1 0x80 DUP9 ADD MSTORE PUSH1 0xA0 DUP8 ADD MSTORE PUSH1 0xC0 DUP7 ADD MSTORE PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 DUP5 ADD DUP9 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x120 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x140 DUP4 ADD MSTORE PUSH2 0x160 DUP3 ADD MSTORE DUP2 MLOAD SWAP7 DUP8 DUP1 DUP1 SWAP4 PUSH32 0x18B6EB5500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD SWAP1 PUSH2 0x9689 SWAP2 PUSH2 0x9475 JUMP JUMPDEST SUB SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS SWAP1 PUSH0 SWAP2 CALL SWAP5 DUP6 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP2 PUSH0 SWAP7 PUSH2 0x9781 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x9759 JUMPI PUSH1 0x9 SHR PUSH1 0x1 AND ISZERO PUSH2 0x9753 JUMPI POP DUP1 MLOAD PUSH2 0x96C7 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x96D0 DUP2 PUSH2 0x1015 JUMP JUMPDEST ISZERO DUP1 PUSH2 0x9746 JUMPI JUMPDEST DUP1 ISZERO PUSH2 0x971B JUMPI JUMPDEST PUSH2 0x96E6 JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0xA0 ADD MLOAD PUSH32 0xCC0E4A9900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP PUSH1 0x1 DUP2 MLOAD PUSH2 0x9729 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x9732 DUP2 PUSH2 0x1015 JUMP JUMPDEST EQ DUP1 ISZERO PUSH2 0x96DE JUMPI POP PUSH1 0xA0 DUP2 ADD MLOAD DUP3 GT PUSH2 0x96DE JUMP JUMPDEST POP PUSH1 0xA0 DUP2 ADD MLOAD DUP3 LT PUSH2 0x96D7 JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH32 0x15A29DEC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x979C SWAP4 SWAP7 POP DUP1 SWAP2 SWAP3 POP SWAP1 RETURNDATASIZE LT PUSH2 0x946E JUMPI PUSH2 0x945F DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP4 SWAP1 PUSH0 DUP1 PUSH2 0x96A9 JUMP JUMPDEST DUP7 PUSH1 0x40 DUP6 ADD MLOAD SWAP2 DUP5 SWAP3 SWAP5 PUSH2 0x9563 JUMP JUMPDEST DUP1 PUSH2 0x97BC JUMPI POP JUMP JUMPDEST PUSH2 0x6EB SWAP1 PUSH2 0xAF52 JUMP JUMPDEST PUSH2 0x2D90 PUSH2 0x6EB SWAP3 PUSH2 0xBA85 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP3 AND DUP1 SWAP3 SUB PUSH2 0x97F9 JUMPI POP POP JUMP JUMPDEST PUSH32 0x36B18D0900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 PUSH32 0x0 GT PUSH2 0x9851 JUMPI POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x18FE738500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 PUSH0 DUP4 DUP3 ADD SWAP4 DUP5 SLT SWAP2 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x465D JUMPI JUMP JUMPDEST SWAP3 PUSH2 0x98F6 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP3 PUSH2 0x98BA DUP6 PUSH2 0x5796 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH32 0xEF8B30F700000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP1 PUSH1 0x20 SWAP10 DUP11 SWAP4 PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 DUP9 GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x9912 SWAP2 PUSH0 SWAP2 PUSH2 0x9AEE JUMPI JUMPDEST POP PUSH2 0x5796 JUMP JUMPDEST SWAP5 DUP1 SWAP7 PUSH2 0x9930 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP2 PUSH2 0x993A PUSH2 0xBF88 JUMP JUMPDEST PUSH2 0x9AE4 JUMPI POP SWAP2 DUP2 DUP9 SWAP4 DUP9 SWAP6 SWAP4 PUSH1 0x80 SHR SWAP1 DUP7 DUP3 LT ISZERO PUSH0 EQ PUSH2 0x99B4 JUMPI POP POP SWAP3 PUSH2 0x99A9 SWAP7 SWAP3 PUSH2 0x99AF SWAP3 PUSH2 0x998F DUP7 PUSH2 0x998A DUP6 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 PUSH2 0x6EB SWAP13 SWAP12 PUSH1 0x80 SHR SUB SWAP4 AND PUSH2 0x6C6A JUMP JUMPDEST PUSH2 0x7295 JUMP JUMPDEST SWAP9 DUP10 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0x97C5 JUMP JUMPDEST PUSH2 0x7AC1 JUMP JUMPDEST SWAP2 SWAP3 SWAP5 POP SWAP7 SWAP3 SWAP5 POP PUSH2 0x99DF PUSH2 0x99DA PUSH2 0x99CC DUP7 DUP6 PUSH2 0x910F JUMP JUMPDEST PUSH2 0x99D5 DUP13 PUSH2 0xBA85 JUMP JUMPDEST PUSH2 0x9886 JUMP JUMPDEST PUSH2 0xC081 JUMP JUMPDEST SWAP5 PUSH2 0x99EB DUP7 DUP6 DUP4 PUSH2 0xC1CE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x6E553F6500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP8 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP5 DUP3 DUP7 PUSH1 0x44 DUP2 PUSH0 DUP10 GAS CALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x99A9 SWAP10 PUSH2 0x9A99 DUP13 PUSH2 0x9A8E DUP16 SWAP8 PUSH2 0x998F SWAP6 PUSH2 0x6EB SWAP14 DUP11 PUSH2 0x99AF SWAP13 DUP7 SWAP16 DUP16 SWAP6 SWAP1 DUP14 SWAP2 PUSH0 SWAP7 PUSH2 0x9A9F JUMPI JUMPDEST POP POP PUSH2 0x9A8E SWAP3 SWAP2 PUSH2 0x9A88 DUP7 DUP7 DUP10 DUP6 PUSH2 0x9A83 PUSH2 0x9A93 SWAP12 SWAP13 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP9 PUSH2 0xC0B6 JUMP JUMPDEST PUSH2 0xAF0D JUMP JUMPDEST AND PUSH2 0x6C6A JUMP JUMPDEST PUSH2 0x57A4 JUMP JUMPDEST SWAP5 PUSH2 0x6C6A JUMP JUMPDEST SWAP1 PUSH2 0x7295 JUMP JUMPDEST PUSH2 0x9A93 SWAP7 POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP7 PUSH2 0x9AD6 PUSH2 0x9A8E SWAP8 SWAP7 SWAP5 DUP5 PUSH2 0x9A88 SWAP6 SWAP1 RETURNDATASIZE LT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP9 POP POP SWAP3 POP DUP2 SWAP4 SWAP5 POP PUSH2 0x9A56 JUMP JUMPDEST SWAP8 POP SWAP1 SWAP5 POP POP POP POP JUMP JUMPDEST PUSH2 0x9B05 SWAP2 POP DUP9 RETURNDATASIZE DUP11 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x990C JUMP JUMPDEST SWAP3 PUSH2 0x9B62 SWAP3 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP3 PUSH2 0x9B25 DUP7 PUSH2 0x6C5C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB3D7F6B900000000000000000000000000000000000000000000000000000000 SWAP2 DUP3 DUP3 MSTORE DUP2 DUP1 PUSH1 0x20 SWAP10 DUP11 SWAP4 PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 DUP10 GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x9B7E SWAP2 PUSH0 SWAP2 PUSH2 0x9D51 JUMPI JUMPDEST POP PUSH2 0x6C5C JUMP JUMPDEST SWAP1 DUP8 SWAP7 DUP3 SWAP9 PUSH2 0x9B9E DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP4 PUSH2 0x9BA8 PUSH2 0xBF88 JUMP JUMPDEST PUSH2 0x9D44 JUMPI POP POP SWAP2 DUP9 SWAP4 SWAP2 DUP9 SWAP6 SWAP4 DUP3 PUSH1 0x80 SHR SWAP2 DUP8 DUP4 LT ISZERO PUSH0 EQ PUSH2 0x9BFB JUMPI POP POP POP SWAP3 PUSH2 0x99A9 SWAP7 SWAP3 PUSH2 0x99AF SWAP3 PUSH2 0x998F DUP7 PUSH2 0x998A DUP6 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 PUSH2 0x6EB SWAP13 SWAP12 PUSH1 0x80 SHR SUB SWAP4 AND PUSH2 0x6C6A JUMP JUMPDEST SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP7 SWAP3 PUSH2 0x9C21 PUSH2 0x99DA PUSH2 0x9C13 DUP9 DUP9 PUSH2 0xAE78 JUMP JUMPDEST PUSH2 0x9C1C DUP13 PUSH2 0xBA85 JUMP JUMPDEST PUSH2 0x90CA JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x4 DUP4 ADD DUP2 SWAP1 MSTORE SWAP2 DUP4 DUP2 PUSH1 0x24 DUP2 DUP9 GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x9C50 SWAP2 PUSH0 SWAP2 PUSH2 0x9D27 JUMPI JUMPDEST POP DUP6 DUP4 PUSH2 0xC1CE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x94BF804D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP6 DUP4 DUP8 PUSH1 0x44 DUP2 PUSH0 DUP10 GAS CALL SWAP6 DUP7 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x99A9 SWAP10 PUSH2 0x9A99 DUP13 PUSH2 0x9A8E DUP16 SWAP8 PUSH2 0x9A93 DUP12 DUP5 SWAP14 PUSH2 0x6EB SWAP16 PUSH2 0x998F SWAP10 DUP6 PUSH2 0x99AF SWAP16 DUP16 SWAP4 DUP16 SWAP2 PUSH0 SWAP7 PUSH2 0x9CE8 JUMPI JUMPDEST POP POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP2 DUP6 DUP8 DUP4 PUSH2 0x9A83 PUSH2 0x9A8E SWAP10 SWAP11 PUSH2 0x9A88 SWAP7 PUSH2 0xC0B6 JUMP JUMPDEST PUSH2 0x9A8E SWAP7 POP SWAP2 PUSH2 0x9D1B PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 SWAP5 SWAP3 DUP5 PUSH2 0x9A88 SWAP6 SWAP1 RETURNDATASIZE LT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP7 POP SWAP2 DUP2 SWAP4 SWAP5 POP PUSH2 0x9CBF JUMP JUMPDEST PUSH2 0x9D3E SWAP2 POP DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x9C48 JUMP JUMPDEST SWAP10 POP SWAP8 POP SWAP2 SWAP6 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x9D68 SWAP2 POP DUP9 RETURNDATASIZE DUP11 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x9B78 JUMP JUMPDEST SWAP4 SWAP1 SWAP2 PUSH2 0x9D7A DUP6 PUSH2 0x1015 JUMP JUMPDEST DUP5 ISZERO DUP1 ISZERO PUSH2 0xA0C7 JUMPI PUSH2 0x9D90 PUSH1 0x20 PUSH2 0x61AB DUP8 PUSH2 0x5796 JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x9DB4 SWAP2 PUSH0 SWAP2 PUSH2 0xA0AE JUMPI POP PUSH2 0x5796 JUMP JUMPDEST SWAP5 SWAP6 JUMPDEST PUSH2 0x9DD2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP2 PUSH2 0x9DDC PUSH2 0xBF88 JUMP JUMPDEST PUSH2 0xA0A6 JUMPI DUP7 SWAP3 DUP9 SWAP3 SWAP1 SWAP2 PUSH1 0x80 DUP4 SWAP1 SHR SWAP2 DUP6 DUP4 LT PUSH2 0x9E4F JUMPI POP POP POP SWAP3 PUSH2 0x9E49 DUP3 PUSH2 0x9E2C DUP7 PUSH2 0x998A PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 PUSH2 0x6EB SWAP12 PUSH1 0x80 SHR SUB SWAP4 AND PUSH2 0x6C6A JUMP JUMPDEST SWAP8 DUP9 PUSH2 0x99A9 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST AND PUSH2 0x7AC1 JUMP JUMPDEST SWAP1 SWAP3 SWAP4 POP PUSH2 0x9E5E SWAP2 SWAP5 POP PUSH2 0x1015 JUMP JUMPDEST ISZERO PUSH2 0x9F53 JUMPI PUSH2 0x9E7C PUSH2 0x99DA PUSH2 0x9E73 DUP6 DUP5 PUSH2 0x910F JUMP JUMPDEST PUSH2 0x99D5 DUP11 PUSH2 0xBA85 JUMP JUMPDEST SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP4 PUSH2 0x9E93 DUP2 DUP7 DUP10 PUSH2 0xC1CE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x6E553F6500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP5 PUSH1 0x20 SWAP1 DUP7 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 PUSH0 SWAP1 GAS CALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x9E2C DUP10 SWAP6 PUSH2 0x9A99 DUP8 PUSH2 0x9A8E PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 SWAP7 DUP9 DUP16 DUP10 PUSH2 0x6EB SWAP16 DUP6 SWAP15 PUSH2 0x9A88 DUP16 PUSH2 0x9E49 SWAP16 PUSH2 0x9A8E SWAP7 PUSH2 0x9A93 SWAP10 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 PUSH0 SWAP2 PUSH2 0x9F34 JUMPI JUMPDEST POP SWAP11 DUP12 SWAP4 JUMPDEST AND SWAP1 PUSH2 0x9A83 DUP3 DUP3 PUSH2 0xC0B6 JUMP JUMPDEST PUSH2 0x9F4D SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x9F23 JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x9F6E PUSH2 0x99DA PUSH2 0x9F65 DUP4 DUP6 PUSH2 0xAE78 JUMP JUMPDEST PUSH2 0x9C1C DUP10 PUSH2 0xBA85 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB3D7F6B900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP4 PUSH1 0x20 SWAP4 SWAP3 SWAP1 SWAP2 DUP5 DUP2 PUSH1 0x24 DUP2 DUP10 GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x9FCD SWAP2 PUSH0 SWAP2 PUSH2 0xA089 JUMPI JUMPDEST POP DUP7 DUP11 PUSH2 0xC1CE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x94BF804D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP5 DUP5 SWAP1 DUP7 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 PUSH0 SWAP1 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x6EB SWAP7 PUSH2 0x9A99 DUP12 PUSH2 0x9A8E DUP6 DUP16 SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 DUP10 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 SWAP16 SWAP11 DUP5 SWAP16 DUP16 SWAP7 PUSH2 0x9E49 SWAP16 SWAP8 PUSH2 0x9A8E SWAP7 PUSH2 0x9E2C SWAP16 SWAP10 PUSH2 0x9A93 SWAP11 PUSH2 0x9A88 SWAP6 PUSH0 SWAP3 PUSH2 0xA06C JUMPI JUMPDEST POP POP SWAP9 DUP10 SWAP3 PUSH2 0x9F28 JUMP JUMPDEST PUSH2 0xA082 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 DUP1 PUSH2 0xA062 JUMP JUMPDEST PUSH2 0xA0A0 SWAP2 POP DUP7 RETURNDATASIZE DUP9 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x9FC5 JUMP JUMPDEST POP SWAP1 SWAP4 POP POP POP JUMP JUMPDEST PUSH2 0x9B05 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH2 0xA10D PUSH1 0x20 PUSH2 0xA0D5 DUP8 PUSH2 0x6C5C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xB3D7F6B900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0xA131 SWAP2 PUSH0 SWAP2 PUSH2 0xA137 JUMPI POP PUSH2 0x6C5C JUMP JUMPDEST SWAP6 PUSH2 0x9DB7 JUMP JUMPDEST PUSH2 0x9D68 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP1 SWAP3 PUSH2 0xA1A7 SWAP3 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP1 PUSH2 0xA16B DUP7 PUSH2 0x6C5C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH32 0xA28A47700000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP1 PUSH1 0x20 SWAP9 DUP10 SWAP4 PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 DUP7 GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0xA1C2 SWAP2 PUSH0 SWAP2 PUSH2 0xA341 JUMPI POP PUSH2 0x6C5C JUMP JUMPDEST DUP7 SWAP6 DUP2 SWAP8 PUSH2 0xA1E1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP3 PUSH2 0xA1EB PUSH2 0xBF88 JUMP JUMPDEST PUSH2 0xA335 JUMPI POP POP SWAP2 DUP7 SWAP4 SWAP2 DUP9 SWAP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP4 AND SWAP1 DUP8 DUP3 LT ISZERO PUSH0 EQ PUSH2 0xA242 JUMPI POP POP SWAP3 PUSH2 0x99AF SWAP3 PUSH2 0x998F DUP4 DUP9 PUSH2 0x99A9 SWAP12 SWAP8 PUSH2 0xA23A DUP11 PUSH2 0x6EB SWAP13 SWAP12 SWAP9 PUSH1 0x80 SHR PUSH2 0x6C6A JUMP JUMPDEST SWAP3 AND SUB PUSH2 0x7295 JUMP JUMPDEST SWAP3 SWAP9 SWAP5 SWAP7 POP SWAP5 POP POP PUSH2 0xA263 PUSH2 0x99DA PUSH2 0xA25A DUP5 DUP11 PUSH2 0x910F JUMP JUMPDEST PUSH2 0x9C1C DUP12 PUSH2 0xBA85 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB460AF9400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 SWAP6 SWAP1 SWAP3 DUP3 DUP5 PUSH1 0x64 DUP2 PUSH0 DUP7 GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x99A9 SWAP10 PUSH2 0x9A99 DUP5 PUSH2 0x99AF SWAP8 DUP16 DUP16 PUSH2 0x6EB SWAP14 DUP2 SWAP14 DUP14 PUSH2 0x998F SWAP10 DUP6 SWAP14 PUSH0 SWAP8 PUSH2 0xA2FC JUMPI JUMPDEST POP POP SWAP2 PUSH2 0x9A8E SWAP2 PUSH2 0xA2EE DUP8 DUP4 PUSH2 0x9A8E SWAP10 SWAP11 PUSH2 0xA2F3 SWAP9 SWAP8 PUSH2 0xAFA2 JUMP JUMPDEST PUSH2 0x6C6A JUMP JUMPDEST SWAP5 PUSH1 0x80 SHR PUSH2 0x6C6A JUMP JUMPDEST PUSH2 0x9A8E SWAP8 POP DUP5 SWAP3 PUSH2 0xA2F3 SWAP7 SWAP6 PUSH2 0xA326 PUSH2 0x9A8E SWAP7 SWAP5 DUP5 PUSH2 0xA2EE SWAP6 SWAP1 RETURNDATASIZE LT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP10 POP POP SWAP3 SWAP5 SWAP6 POP DUP2 SWAP4 POP PUSH2 0xA2D3 JUMP JUMPDEST SWAP9 POP SWAP7 POP SWAP1 SWAP5 POP POP POP POP JUMP JUMPDEST PUSH2 0x9D68 SWAP2 POP DUP8 RETURNDATASIZE DUP10 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP3 PUSH2 0xA3AF SWAP4 SWAP3 SWAP2 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0xA373 DUP5 PUSH2 0x5796 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH32 0x4CDAD50600000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP1 PUSH1 0x20 SWAP10 DUP11 SWAP4 PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 DUP6 GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0xA3CA SWAP2 PUSH0 SWAP2 PUSH2 0x9AEE JUMPI POP PUSH2 0x5796 JUMP JUMPDEST SWAP5 DUP5 SWAP7 PUSH2 0xA3E8 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP6 PUSH2 0xA3F2 PUSH2 0xBF88 JUMP JUMPDEST PUSH2 0xA50A JUMPI POP DUP7 SWAP4 SWAP3 DUP9 SWAP3 SWAP1 SWAP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP9 DUP3 AND DUP8 DUP2 LT PUSH2 0xA43D JUMPI POP POP SWAP2 DUP4 SWAP2 PUSH2 0x998F DUP10 DUP9 PUSH2 0x99AF SWAP7 PUSH2 0xA23A PUSH2 0x6EB SWAP12 SWAP11 SWAP10 PUSH2 0x99A9 SWAP15 PUSH1 0x80 SHR PUSH2 0x6C6A JUMP JUMPDEST SWAP3 SWAP7 POP SWAP3 SWAP5 SWAP4 POP POP PUSH2 0xA455 PUSH2 0x99DA PUSH2 0x99CC DUP8 DUP11 PUSH2 0xAE78 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP6 SWAP1 SWAP5 SWAP1 DUP4 DUP8 PUSH1 0x64 DUP2 PUSH0 DUP7 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x99A9 SWAP10 PUSH2 0x9A99 DUP9 PUSH2 0x9A8E DUP16 DUP16 SWAP12 DUP13 PUSH2 0x9A8E PUSH2 0x6EB SWAP16 SWAP12 PUSH2 0x998F SWAP10 DUP16 SWAP5 PUSH2 0x99AF SWAP16 DUP8 SWAP16 SWAP7 DUP16 SWAP2 SWAP8 PUSH2 0xA2F3 SWAP9 PUSH0 SWAP7 PUSH2 0xA4E3 JUMPI JUMPDEST POP POP PUSH2 0xA2EE SWAP3 SWAP2 DUP6 SWAP2 PUSH2 0xAFA2 JUMP JUMPDEST PUSH2 0xA2EE SWAP5 SWAP4 SWAP7 POP SWAP1 DUP2 PUSH2 0xA501 SWAP3 SWAP1 RETURNDATASIZE LT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP5 SWAP2 SWAP3 PUSH0 PUSH2 0xA4D5 JUMP JUMPDEST SWAP8 POP POP POP POP POP JUMP JUMPDEST SWAP4 SWAP1 PUSH2 0xA51D DUP6 PUSH2 0x1015 JUMP JUMPDEST DUP5 ISZERO SWAP5 DUP6 ISZERO PUSH2 0xA7B9 JUMPI PUSH2 0xA534 PUSH1 0x20 PUSH2 0x6674 DUP8 PUSH2 0x5796 JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0xA558 SWAP2 PUSH0 SWAP2 PUSH2 0xA0AE JUMPI POP PUSH2 0x5796 JUMP JUMPDEST SWAP5 SWAP6 JUMPDEST PUSH2 0xA576 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP2 PUSH2 0xA580 PUSH2 0xBF88 JUMP JUMPDEST PUSH2 0xA0A6 JUMPI DUP8 SWAP4 DUP8 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP5 AND SWAP2 DUP7 DUP4 LT PUSH2 0xA5F3 JUMPI POP POP POP SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xA5CE DUP4 DUP7 PUSH2 0x6EB SWAP9 PUSH2 0xA23A DUP7 PUSH2 0x99AF SWAP9 PUSH1 0x80 SHR PUSH2 0x6C6A JUMP JUMPDEST SWAP8 DUP9 PUSH2 0xA5EB DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE JUMPDEST AND PUSH2 0x97C5 JUMP JUMPDEST SWAP2 SWAP7 POP SWAP3 SWAP5 POP PUSH2 0xA603 SWAP2 POP PUSH2 0x1015 JUMP JUMPDEST ISZERO PUSH2 0xA6F3 JUMPI PUSH2 0xA618 PUSH2 0x99DA PUSH2 0x9E73 DUP8 DUP6 PUSH2 0xAE78 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP4 SWAP1 PUSH1 0x20 DUP6 PUSH1 0x64 DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND GAS CALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0xA6B1 DUP10 SWAP6 PUSH2 0x9A99 DUP5 PUSH2 0x9A8E DUP15 PUSH2 0xA2F3 DUP12 DUP16 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x6EB SWAP16 SWAP13 PUSH2 0xA2EE DUP16 SWAP14 PUSH2 0x99AF SWAP16 SWAP5 DUP9 SWAP16 DUP6 SWAP16 PUSH2 0x9A8E SWAP8 PUSH0 SWAP2 PUSH2 0xA6D4 JUMPI JUMPDEST POP SWAP6 DUP7 SWAP3 JUMPDEST AND SWAP1 PUSH2 0xAFA2 JUMP JUMPDEST SWAP8 DUP9 PUSH2 0xA6CE DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0xA5ED JUMP JUMPDEST PUSH2 0xA6ED SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0xA6A5 JUMP JUMPDEST PUSH2 0xA703 PUSH2 0x99DA PUSH2 0x9F65 DUP8 DUP6 PUSH2 0x910F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB460AF9400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 PUSH1 0x20 DUP3 PUSH1 0x64 DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x7CB JUMPI PUSH2 0xA6B1 DUP10 SWAP6 PUSH2 0x9A99 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x9A8E DUP15 PUSH2 0xA2F3 DUP12 DUP16 DUP11 PUSH2 0x6EB SWAP16 PUSH2 0xA2EE DUP16 SWAP4 PUSH2 0x99AF SWAP16 SWAP15 DUP9 SWAP16 SWAP6 DUP12 SWAP16 SWAP7 PUSH2 0x9A8E SWAP8 PUSH0 SWAP2 PUSH2 0xA79A JUMPI JUMPDEST POP SWAP12 DUP13 SWAP4 PUSH2 0xA6AA JUMP JUMPDEST PUSH2 0xA7B3 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0xA791 JUMP JUMPDEST PUSH2 0xA7FF PUSH1 0x20 PUSH2 0xA7C7 DUP8 PUSH2 0x6C5C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xA28A47700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0xA823 SWAP2 PUSH0 SWAP2 PUSH2 0xA137 JUMPI POP PUSH2 0x6C5C JUMP JUMPDEST SWAP6 PUSH2 0xA55B JUMP JUMPDEST SWAP1 PUSH2 0xB23 SWAP2 PUSH1 0x80 SHR SWAP1 PUSH2 0x7295 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP4 DUP5 ISZERO PUSH2 0xA950 JUMPI PUSH2 0xA86F DUP4 PUSH2 0xA869 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x6C6A JUMP JUMPDEST PUSH2 0xA88E DUP6 PUSH2 0x7B67 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP5 DUP2 SLOAD ADD SWAP1 SSTORE PUSH2 0xA89D DUP2 PUSH2 0xBB26 JUMP JUMPDEST PUSH2 0xA8B8 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP3 PUSH0 DUP5 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F PUSH1 0x40 MLOAD DUP1 PUSH2 0xA8F1 DUP8 DUP3 SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB SWAP1 LOG4 DUP3 EXTCODESIZE ISZERO PUSH2 0x6DC JUMPI PUSH1 0x40 MLOAD PUSH32 0x23DE665100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 DUP3 SWAP1 DUP2 DUP4 DUP2 PUSH1 0x64 DUP2 ADD PUSH2 0x5619 JUMP JUMPDEST PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 TLOAD SWAP1 PUSH1 0x1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x465D JUMPI TSTORE JUMP JUMPDEST SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 TSTORE JUMP JUMPDEST SWAP2 SWAP1 DUP3 MLOAD SWAP2 PUSH2 0xA9C2 DUP3 MLOAD DUP3 MLOAD SWAP1 DUP6 PUSH2 0xBB5E JUMP JUMPDEST PUSH2 0xA9CB DUP4 PUSH2 0x57E7 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0xA9DD JUMPI POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP1 PUSH8 0xDE0B6B3A7640000 PUSH2 0xAA0F PUSH2 0xA9F6 PUSH1 0x1 SWAP5 DUP7 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x6ABF PUSH2 0xAA04 DUP6 DUP11 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x6AB8 DUP7 DUP11 PUSH2 0x5818 JUMP JUMPDEST DIV PUSH2 0xAA1A DUP3 DUP10 PUSH2 0x5818 JUMP JUMPDEST MSTORE ADD PUSH2 0xA9CE JUMP JUMPDEST SWAP6 SWAP2 SWAP4 PUSH2 0xAA52 PUSH2 0xB23 SWAP9 SWAP7 SWAP5 PUSH2 0xAA63 SWAP4 PUSH2 0x81C1 SWAP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP12 MSTORE AND PUSH1 0x20 DUP11 ADD MSTORE PUSH1 0x40 DUP10 ADD SWAP1 PUSH2 0x5678 JUMP JUMPDEST PUSH1 0xE0 PUSH1 0x60 DUP9 ADD MSTORE PUSH1 0xE0 DUP8 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP7 ADD MSTORE DUP5 DUP3 SUB PUSH1 0xA0 DUP7 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST SWAP3 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 SWAP6 SWAP7 SWAP4 SWAP7 PUSH2 0xAAF0 PUSH2 0xAA9A DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH1 0x80 DUP9 ADD MLOAD SWAP8 PUSH2 0xAAAA DUP10 PUSH2 0x566E JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x80 PUSH1 0x60 DUP4 ADD MLOAD SWAP4 ADD MLOAD SWAP2 ADD MLOAD SWAP2 PUSH1 0x40 MLOAD SWAP12 DUP13 SWAP11 DUP12 SWAP10 DUP11 SWAP8 PUSH32 0x45421EC700000000000000000000000000000000000000000000000000000000 DUP10 MSTORE PUSH1 0x4 DUP10 ADD PUSH2 0xAA21 JUMP JUMPDEST SUB SWAP4 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP2 PUSH2 0xAB33 JUMPI JUMPDEST POP ISZERO PUSH2 0xAB0B JUMPI JUMP JUMPDEST PUSH32 0xB2EB65200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0xAB4C SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x7C4 JUMPI PUSH2 0x7BA DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0xAB03 JUMP JUMPDEST SWAP7 SWAP3 PUSH2 0xB23 SWAP9 SWAP7 SWAP5 PUSH2 0xABA8 SWAP4 PUSH2 0xAB8C PUSH2 0xAB9A SWAP4 PUSH2 0x8B44 SWAP10 SWAP6 PUSH2 0x100 SWAP4 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 MSTORE AND PUSH1 0x20 DUP14 ADD MSTORE PUSH1 0x40 DUP13 ADD SWAP1 PUSH2 0x5678 JUMP JUMPDEST DUP1 PUSH1 0x60 DUP12 ADD MSTORE DUP10 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP1 DUP8 DUP3 SUB PUSH1 0x80 DUP10 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST SWAP2 PUSH1 0xA0 DUP7 ADD MSTORE DUP5 DUP3 SUB PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST SWAP5 SWAP4 SWAP2 SWAP6 SWAP3 SWAP7 SWAP1 DUP5 MLOAD PUSH2 0xABD4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD SWAP2 PUSH2 0xABE3 DUP4 PUSH2 0x566E JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD PUSH1 0xA0 DUP9 ADD MLOAD SWAP1 PUSH1 0x40 SWAP7 DUP13 PUSH1 0x40 MLOAD SWAP13 DUP14 SWAP8 DUP9 SWAP8 PUSH32 0x976907CC00000000000000000000000000000000000000000000000000000000 DUP10 MSTORE PUSH1 0x4 DUP10 ADD SWAP8 PUSH2 0xAC2B SWAP9 PUSH2 0xAB52 JUMP JUMPDEST SUB SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 DUP2 GAS PUSH0 SWAP5 DUP6 SWAP2 CALL SWAP5 DUP6 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP1 PUSH0 SWAP7 PUSH2 0xAD45 JUMPI JUMPDEST POP ISZERO DUP1 ISZERO PUSH2 0xAD39 JUMPI JUMPDEST PUSH2 0xAD11 JUMPI PUSH1 0x1 DUP1 SWAP5 PUSH1 0x9 SHR AND ISZERO PUSH2 0xAC77 JUMPI SWAP1 SWAP2 SWAP3 DUP1 SWAP5 SWAP6 POP PUSH0 SWAP1 JUMPDEST PUSH2 0xAC7F JUMPI JUMPDEST POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0xAD0C JUMPI PUSH2 0xAC92 DUP2 DUP8 PUSH2 0x5818 JUMP JUMPDEST MLOAD DUP3 DUP6 ADD SWAP1 PUSH2 0xACA2 DUP4 DUP4 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD LT PUSH2 0xACB1 JUMPI POP DUP5 ADD DUP5 PUSH2 0xAC72 JUMP JUMPDEST DUP7 SWAP1 PUSH2 0xACCF DUP4 PUSH2 0x8329 DUP2 PUSH2 0x8C61 PUSH2 0x29BF PUSH2 0x2420 SWAP9 PUSH1 0x20 DUP13 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH32 0xCEFA3AFA00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST PUSH2 0xAC77 JUMP JUMPDEST PUSH32 0xE124916500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP DUP5 MLOAD DUP7 MLOAD EQ ISZERO PUSH2 0xAC57 JUMP JUMPDEST SWAP1 POP PUSH2 0xAD5C SWAP2 SWAP6 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x8CF4 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP5 SWAP1 PUSH0 PUSH2 0xAC4E JUMP JUMPDEST PUSH5 0x174876E800 PUSH2 0xB23 SWAP3 DIV SWAP1 PUSH2 0xB875 JUMP JUMPDEST SWAP1 PUSH8 0xDE0B5CAD2BEF000 DUP2 GT PUSH2 0x4BFC JUMPI PUSH2 0xB23 SWAP2 PUSH5 0x174876E800 PUSH1 0x42 SWAP3 DIV SWAP1 PUSH2 0xB88F JUMP JUMPDEST SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xB23 SWAP3 AND PUSH2 0x7295 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0xAE74 JUMPI PUSH32 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH2 0xADFD PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP3 DUP4 PUSH2 0x9886 JUMP JUMPDEST SWAP2 DUP3 PUSH2 0xAE3D JUMPI POP PUSH32 0x0 SWAP3 DUP4 TLOAD PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x465D JUMPI PUSH2 0x6EB SWAP5 TSTORE PUSH2 0xB171 JUMP JUMPDEST SWAP3 PUSH2 0x6EB SWAP4 PUSH2 0xB171 JUMPI PUSH2 0xAE6F PUSH32 0x0 PUSH2 0xA985 JUMP JUMPDEST PUSH2 0xB171 JUMP JUMPDEST POP POP JUMP JUMPDEST SWAP1 PUSH2 0xAE85 DUP3 PUSH1 0x80 SHR PUSH2 0xBA85 JUMP JUMPDEST SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SWAP4 AND DUP1 PUSH2 0xAEAD JUMPI POP POP PUSH1 0x2 SWAP2 PUSH2 0x9145 SWAP2 PUSH2 0x90CA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 POP SWAP1 PUSH1 0x24 PUSH1 0x20 SWAP3 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH32 0xA28A47700000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x91AA PUSH2 0x9145 SWAP3 PUSH1 0x2 SWAP5 PUSH0 SWAP2 PUSH2 0x91B3 JUMPI POP PUSH2 0xBA85 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 DUP4 SUB SWAP3 DUP4 GT PUSH2 0x465D JUMPI DUP2 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 DUP4 ADD DUP1 SWAP4 GT PUSH2 0x465D JUMPI PUSH2 0x6EB SWAP4 PUSH2 0xC26A JUMP JUMPDEST PUSH32 0x0 GT PUSH2 0xAF7A JUMPI JUMP JUMPDEST PUSH32 0x1ED4D11800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 DUP4 ADD DUP1 SWAP4 GT PUSH2 0x465D JUMPI DUP2 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 DUP4 SUB SWAP3 DUP4 GT PUSH2 0x465D JUMPI PUSH2 0x6EB SWAP4 PUSH2 0xC26A JUMP JUMPDEST SWAP2 SWAP5 SWAP3 SWAP1 SWAP5 PUSH0 SWAP6 PUSH0 SWAP6 DUP2 PUSH2 0xAFFC JUMPI POP POP POP POP POP JUMP JUMPDEST DUP5 SWAP8 POP PUSH2 0x725B PUSH2 0xB015 DUP3 PUSH1 0xC0 PUSH2 0xB021 SWAP7 SWAP8 SWAP9 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP2 PUSH1 0xA0 DUP11 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST SWAP5 MLOAD PUSH1 0x1 DUP2 PUSH1 0x3 SHR AND ISZERO PUSH2 0xB037 JUMPI JUMPDEST DUP1 DUP1 PUSH2 0x722E JUMP JUMPDEST PUSH3 0xFFFFFF SWAP2 SWAP3 SWAP5 POP PUSH1 0x2A SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x465D JUMPI PUSH2 0xB06D PUSH8 0xDE0B6B3A7640000 SWAP2 DUP7 PUSH2 0x6063 JUMP JUMPDEST DIV SWAP3 DUP5 DUP5 GT PUSH2 0xB0E3 JUMPI DUP1 PUSH2 0x7B67 PUSH2 0xB0C2 PUSH2 0xB09F PUSH2 0xB0DA SWAP5 PUSH2 0x7B67 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0xB0BC DUP9 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x6C6A JUMP JUMPDEST SWAP1 PUSH2 0xA829 JUMP JUMPDEST SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH0 DUP1 DUP1 PUSH2 0xB030 JUMP JUMPDEST PUSH32 0x4C69AC5D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0xB13C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0xB12A DUP4 DUP7 PUSH2 0x5818 JUMP JUMPDEST MLOAD AND SWAP1 DUP4 AND EQ PUSH2 0x9753 JUMPI PUSH1 0x1 ADD PUSH2 0xB10E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 PUSH32 0xDDEF98D700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TSTORE JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP1 DUP3 DIV MUL DUP2 SUB PUSH2 0xB19D JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x465D JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x5 SHR PUSH1 0x1 AND ISZERO PUSH2 0xB1B8 JUMPI JUMP JUMPDEST PUSH32 0x4876C0BC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x4 SHR PUSH1 0x1 AND PUSH2 0xB1EC JUMPI JUMP JUMPDEST PUSH32 0xD4F5779C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 MLOAD SWAP1 DUP2 SWAP1 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0xB256 JUMPI POP POP DUP2 LT ISZERO PUSH2 0xB22E JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x7E46BDDC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0xB260 DUP2 DUP4 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0xB26E JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0xB21B JUMP JUMPDEST SWAP3 DUP3 SUB PUSH2 0xB27B JUMPI DUP3 PUSH2 0xB266 JUMP JUMPDEST PUSH32 0x6B8C3BE500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH3 0xFFFFFF SWAP1 PUSH1 0x12 SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x465D JUMPI SWAP1 JUMP JUMPDEST PUSH2 0xB2DE PUSH1 0x40 SWAP3 SWAP6 SWAP5 SWAP4 SWAP6 PUSH1 0x60 DUP4 MSTORE PUSH1 0x60 DUP4 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP5 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 SWAP5 SWAP2 PUSH1 0x20 PUSH2 0xB34E PUSH2 0xB302 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 PUSH2 0x6C6A JUMP JUMPDEST SWAP5 PUSH2 0xB30D DUP8 DUP8 PUSH2 0xC008 JUMP JUMPDEST PUSH2 0xB317 DUP2 DUP4 PUSH2 0xC471 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x16A0B3E000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP14 DUP11 PUSH1 0x4 DUP6 ADD PUSH2 0xB2C6 JUMP JUMPDEST SUB SWAP3 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0xB3D9 SWAP6 PUSH2 0x9A8E PUSH2 0xB3AD DUP6 PUSH2 0xB3C3 SWAP5 PUSH2 0xB3CC SWAP10 DUP13 SWAP10 DUP11 PUSH2 0xB3D3 SWAP10 PUSH0 SWAP5 PUSH2 0xB3DC JUMPI JUMPDEST POP SWAP1 PUSH2 0xB3A1 PUSH2 0xB39A PUSH2 0xB393 PUSH2 0xB3A8 SWAP5 PUSH2 0x8637 SWAP8 SWAP9 PUSH2 0x5818 JUMP JUMPDEST MLOAD DUP8 PUSH2 0x57A4 JUMP JUMPDEST SWAP13 DUP13 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x6063 JUMP JUMPDEST PUSH2 0x91D2 JUMP JUMPDEST SWAP2 PUSH8 0xDE0B6B3A7640000 DUP2 DUP2 SUB SWAP2 LT MUL DUP3 PUSH2 0xC008 JUMP JUMPDEST SWAP4 DUP5 SWAP3 MLOAD PUSH2 0x57E7 JUMP JUMPDEST SWAP6 DUP7 PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH2 0x6C6A JUMP JUMPDEST SWAP2 JUMP JUMPDEST PUSH2 0x8637 SWAP5 POP PUSH2 0xB39A PUSH2 0xB393 PUSH2 0xB3A8 SWAP5 SWAP4 PUSH2 0xB407 PUSH2 0xB3A1 SWAP5 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP8 POP SWAP4 SWAP5 POP POP POP PUSH2 0xB37A JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP1 DUP4 MLOAD PUSH2 0xB424 DUP5 MLOAD DUP3 PUSH2 0x80D5 JUMP JUMPDEST PUSH1 0x5 SHL SWAP4 ADD SWAP2 ADD MCOPY JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x20 PUSH2 0xB445 PUSH0 SWAP3 PUSH1 0x40 DUP7 MSTORE PUSH1 0x40 DUP7 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP4 ADD MSTORE JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x20 PUSH2 0xB445 PUSH1 0x1 SWAP3 PUSH1 0x40 DUP7 MSTORE PUSH1 0x40 DUP7 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 SWAP4 DUP4 MLOAD PUSH2 0xB471 DUP2 PUSH2 0x57E7 JUMP JUMPDEST SWAP2 PUSH2 0xB47B DUP3 PUSH2 0x57E7 JUMP JUMPDEST SWAP7 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0xB677 JUMPI POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP2 PUSH1 0x40 MLOAD SWAP6 PUSH32 0x984DE9E800000000000000000000000000000000000000000000000000000000 SWAP3 DUP4 DUP9 MSTORE PUSH1 0x20 SWAP9 DUP10 DUP10 DUP1 PUSH2 0xB4CE DUP5 PUSH1 0x4 DUP4 ADD PUSH2 0xB42E JUMP JUMPDEST SUB DUP2 DUP10 GAS STATICCALL SWAP9 DUP10 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP10 PUSH2 0xB658 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD DUP6 DUP2 MSTORE DUP11 DUP2 DUP1 PUSH2 0xB4F8 DUP12 PUSH1 0x4 DUP4 ADD PUSH2 0xB44A JUMP JUMPDEST SUB DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x7CB JUMPI DUP11 PUSH2 0xB3A8 PUSH2 0xB533 SWAP4 PUSH2 0xB52C SWAP4 DUP16 PUSH0 SWAP3 PUSH2 0xB63B JUMPI JUMPDEST SWAP12 SWAP10 SWAP14 SWAP13 SWAP11 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 POP PUSH2 0x6046 JUMP JUMPDEST DUP1 SWAP4 PUSH2 0xC471 JUMP JUMPDEST PUSH0 JUMPDEST DUP10 DUP2 LT PUSH2 0xB5A2 JUMPI POP POP POP POP PUSH2 0xB559 SWAP6 POP PUSH1 0x40 MLOAD DUP1 SWAP7 DUP2 SWAP5 DUP3 SWAP4 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0xB44A JUMP JUMPDEST SUB SWAP2 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x7CB JUMPI DUP4 PUSH2 0xB3A8 SWAP4 PUSH2 0xB57F SWAP3 PUSH2 0xB3D9 SWAP8 PUSH0 SWAP3 PUSH2 0xB585 JUMPI JUMPDEST POP POP PUSH2 0x57A4 JUMP JUMPDEST SWAP1 PUSH2 0x6063 JUMP JUMPDEST PUSH2 0xB59B SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 DUP1 PUSH2 0xB578 JUMP JUMPDEST DUP7 SWAP9 SWAP10 SWAP6 SWAP8 POP DUP4 DUP14 DUP4 SWAP5 SWAP6 SWAP7 SWAP9 DUP4 PUSH2 0xB5C6 PUSH2 0xB5BF DUP3 PUSH1 0x1 SWAP9 PUSH2 0x5818 JUMP JUMPDEST MLOAD DUP10 PUSH2 0xC45E JUMP JUMPDEST DUP1 PUSH2 0xB5D1 DUP4 DUP6 PUSH2 0x5818 JUMP JUMPDEST MLOAD GT PUSH2 0xB5ED JUMPI JUMPDEST POP POP POP POP POP ADD SWAP1 DUP11 SWAP7 SWAP5 SWAP9 SWAP8 SWAP6 SWAP4 SWAP3 SWAP2 PUSH2 0xB535 JUMP JUMPDEST DUP2 DUP4 PUSH2 0xB60E PUSH2 0xB626 SWAP8 PUSH2 0xB618 SWAP5 PUSH2 0xB607 DUP6 PUSH2 0xB61F SWAP10 PUSH2 0x5818 JUMP JUMPDEST MLOAD SUB PUSH2 0xB824 JUMP JUMPDEST PUSH2 0x74BA DUP4 DUP9 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP3 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x57A4 JUMP JUMPDEST PUSH2 0xB630 DUP3 DUP12 PUSH2 0x5818 JUMP JUMPDEST MSTORE DUP5 DUP14 DUP11 DUP4 PUSH0 PUSH2 0xB5D8 JUMP JUMPDEST PUSH2 0xB651 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 DUP16 PUSH2 0xB518 JUMP JUMPDEST PUSH2 0xB670 SWAP2 SWAP10 POP DUP11 RETURNDATASIZE DUP13 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP8 PUSH0 PUSH2 0xB4E1 JUMP JUMPDEST DUP1 PUSH2 0xB6A1 PUSH2 0xB69C PUSH2 0xB68A PUSH1 0x1 SWAP5 DUP13 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0xB695 DUP5 DUP8 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x6C6A JUMP JUMPDEST PUSH2 0x5796 JUMP JUMPDEST PUSH2 0xB6AB DUP3 DUP9 PUSH2 0x5818 JUMP JUMPDEST MSTORE ADD PUSH2 0xB47E JUMP JUMPDEST PUSH1 0x7 SHR PUSH1 0x1 AND ISZERO PUSH2 0xB6BF JUMPI JUMP JUMPDEST PUSH32 0xEFE0265D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP3 SWAP2 PUSH2 0xB6F3 DUP5 MLOAD PUSH2 0x57E7 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0xB728 JUMPI DUP1 PUSH2 0xB717 DUP6 DUP6 PUSH2 0xB711 PUSH1 0x1 SWAP6 DUP8 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0xC061 JUMP JUMPDEST PUSH2 0xB721 DUP3 DUP10 PUSH2 0x5818 JUMP JUMPDEST MSTORE ADD PUSH2 0xB6F6 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST SWAP1 PUSH2 0xB23 SWAP3 PUSH2 0xB73C SWAP2 PUSH2 0x6063 JUMP JUMPDEST SWAP1 PUSH2 0xC008 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x80 PUSH8 0xDE0B6B3A7640000 PUSH2 0xB786 PUSH2 0x16E8 SWAP5 DUP1 PUSH2 0xB765 DUP7 PUSH1 0x60 DUP11 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH2 0x6ABF PUSH2 0xB777 DUP7 PUSH1 0xC0 DUP11 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x6AB8 DUP8 PUSH1 0xA0 DUP12 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST DIV SWAP4 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x80 PUSH2 0xB7CA PUSH2 0x16E8 SWAP4 DUP1 PUSH2 0xB7A9 DUP6 PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH2 0x6B04 PUSH2 0xB7BB DUP6 PUSH1 0xC0 DUP10 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x6AB8 DUP7 PUSH1 0xA0 DUP11 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST SWAP4 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST SWAP3 PUSH2 0xB7CA PUSH2 0x16E8 SWAP4 PUSH1 0x80 SWAP3 DUP2 PUSH2 0xB7EC DUP7 PUSH1 0x60 DUP11 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH2 0xB7F6 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0xB81C JUMPI PUSH1 0x2 SWAP1 JUMPDEST PUSH2 0xB80C DUP6 PUSH1 0xC0 DUP10 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x44AD DUP7 PUSH1 0xA0 DUP11 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH2 0xB7FE JUMP JUMPDEST SWAP1 PUSH2 0xB82E SWAP2 PUSH2 0x6063 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0xB850 SWAP2 PUSH2 0x6063 JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x465D JUMPI DUP2 ISZERO PUSH2 0x91DC JUMPI DIV SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x18 SHR PUSH2 0x922C JUMPI PUSH1 0x2A SHL SWAP1 PUSH3 0xFFFFFF PUSH1 0x2A SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x100 DUP1 DUP5 LT ISZERO PUSH2 0x726D JUMPI DUP4 DUP2 SUB SWAP1 DUP2 GT PUSH2 0x465D JUMPI DUP1 PUSH1 0xFF LT PUSH0 EQ PUSH2 0xB8D1 JUMPI POP PUSH1 0xFF JUMPDEST PUSH1 0x18 GT PUSH2 0x726D JUMPI DUP1 PUSH1 0x18 SHR PUSH2 0x922C JUMPI PUSH3 0xFFFFFF SWAP1 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST PUSH2 0xB8B3 JUMP JUMPDEST SWAP1 PUSH2 0x6EB PUSH2 0xB8EA SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH2 0x5859 JUMP JUMPDEST SUB DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP1 PUSH2 0xB8FB DUP3 PUSH2 0x942 JUMP JUMPDEST PUSH2 0xB908 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x88F JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0xB918 DUP3 SWAP5 PUSH2 0x942 JUMP JUMPDEST ADD SWAP1 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0xB928 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH2 0xB933 PUSH2 0x5B3F JUMP JUMPDEST DUP3 DUP3 DUP6 ADD ADD MSTORE ADD PUSH2 0xB91C JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD PUSH2 0xB94C DUP2 PUSH2 0x822 JUMP JUMPDEST PUSH1 0x40 PUSH1 0xFF DUP3 SWAP5 SLOAD DUP2 DUP2 AND PUSH2 0xB95F DUP2 PUSH2 0x1015 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 PUSH1 0x8 SHR AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0xA8 SHR AND ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD DUP1 MLOAD MLOAD SWAP4 PUSH0 JUMPDEST DUP6 DUP2 LT PUSH2 0xB997 JUMPI POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0xB9AB PUSH2 0x29BF PUSH1 0x1 SWAP4 PUSH1 0x20 DUP9 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST PUSH2 0xB9D6 PUSH2 0xB9C0 DUP4 DUP10 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0xB9E1 DUP4 DUP8 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD DUP2 GT PUSH2 0xBA21 JUMPI JUMPDEST POP POP PUSH2 0xBA08 PUSH2 0xB9F9 DUP3 DUP7 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x1ADB DUP4 PUSH1 0x80 DUP10 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST PUSH2 0xBA1A DUP3 DUP9 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE ADD PUSH2 0xB988 JUMP JUMPDEST PUSH2 0xBA65 PUSH2 0xBA7D SWAP2 PUSH2 0xBA5F PUSH2 0xBA56 PUSH2 0xBA49 DUP7 DUP11 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP3 PUSH2 0xB61F DUP9 DUP13 MLOAD PUSH2 0x5818 JUMP JUMPDEST DUP3 PUSH1 0x80 SHR PUSH2 0x6C6A JUMP JUMPDEST SWAP1 PUSH2 0xAD99 JUMP JUMPDEST SWAP2 DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH0 DUP1 PUSH2 0xB9E9 JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xBAAF JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP2 DUP4 DUP2 AND DUP5 DUP5 AND SUB PUSH2 0xBAF8 JUMPI POP POP POP POP PUSH0 NOT SWAP1 JUMP JUMPDEST PUSH2 0xBB22 SWAP4 PUSH2 0x7B67 SWAP3 AND PUSH0 MSTORE PUSH1 0x10 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST PUSH3 0xF4240 DUP2 LT PUSH2 0xBB33 JUMPI POP JUMP JUMPDEST PUSH32 0xD38D20FC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 EQ DUP1 ISZERO SWAP3 SWAP2 SWAP1 PUSH2 0xBB72 JUMPI JUMPDEST POP POP PUSH2 0x80DC JUMPI JUMP JUMPDEST EQ ISZERO SWAP1 POP PUSH0 DUP1 PUSH2 0xBB6A JUMP JUMPDEST DUP1 MLOAD PUSH2 0xBB88 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0xBB91 DUP2 PUSH2 0x1015 JUMP JUMPDEST DUP1 PUSH2 0xBBA4 JUMPI POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP JUMPDEST DUP1 PUSH2 0xBBB0 PUSH1 0x1 SWAP3 PUSH2 0x1015 JUMP JUMPDEST SUB PUSH2 0xBC25 JUMPI PUSH1 0x20 PUSH2 0xBBCF PUSH2 0x213F DUP3 PUSH1 0x4 SWAP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0x679AEFCE00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP2 PUSH2 0xBC0C JUMPI POP SWAP1 JUMP JUMPDEST PUSH2 0xB23 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH32 0xDF45063200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x6 SHR PUSH1 0x1 AND ISZERO PUSH2 0xBC5A JUMPI JUMP JUMPDEST PUSH32 0xCF0A95C000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP5 SWAP3 SWAP2 SWAP3 DUP2 MLOAD SWAP5 PUSH2 0xBC93 DUP7 PUSH2 0x57E7 JUMP JUMPDEST SWAP5 PUSH0 JUMPDEST DUP8 DUP2 LT PUSH2 0xBE63 JUMPI POP PUSH2 0xBCAC SWAP1 PUSH2 0x884D DUP10 DUP9 PUSH2 0x5818 JUMP JUMPDEST PUSH2 0xBCB6 DUP9 DUP8 PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH1 0x40 MLOAD SWAP5 PUSH32 0x984DE9E800000000000000000000000000000000000000000000000000000000 SWAP3 DUP4 DUP8 MSTORE PUSH1 0x20 DUP8 DUP1 PUSH2 0xBCF1 DUP9 PUSH1 0x4 DUP4 ADD PUSH2 0xB42E JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP8 PUSH2 0xBE42 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP5 DUP5 DUP7 MSTORE PUSH1 0x20 DUP7 DUP1 PUSH2 0xBD26 DUP7 PUSH1 0x4 DUP4 ADD PUSH2 0xB42E JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x9A8E PUSH2 0xB3AD DUP13 PUSH2 0xB61F PUSH2 0xBD81 PUSH2 0xBD88 SWAP7 PUSH2 0xBD7A DUP16 PUSH2 0xBD6A PUSH2 0xBDBE SWAP16 SWAP2 PUSH1 0x20 SWAP15 DUP9 SWAP4 PUSH0 SWAP2 PUSH2 0xBE23 JUMPI JUMPDEST POP PUSH2 0xC008 JUMP JUMPDEST SWAP3 PUSH2 0xBD75 DUP5 DUP14 PUSH2 0xC594 JUMP JUMPDEST PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0xB824 JUMP JUMPDEST SWAP2 DUP9 PUSH2 0x5818 JUMP JUMPDEST SWAP4 PUSH2 0xBD97 DUP6 PUSH2 0x884D DUP13 DUP7 PUSH2 0x5818 JUMP JUMPDEST PUSH2 0xBDA1 DUP12 DUP6 PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD DUP1 SWAP8 DUP2 SWAP6 DUP3 SWAP5 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0xB44A JUMP JUMPDEST SUB SWAP3 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x7CB JUMPI PUSH2 0xB3D9 SWAP6 PUSH2 0xBDF4 SWAP4 PUSH0 SWAP4 PUSH2 0xBDFA JUMPI JUMPDEST POP PUSH2 0xBDE6 PUSH2 0xBDED SWAP2 PUSH2 0x57E7 JUMP JUMPDEST SWAP8 DUP9 PUSH2 0x5818 JUMP JUMPDEST MSTORE DUP4 PUSH2 0x57A4 JUMP JUMPDEST SWAP1 PUSH2 0xC061 JUMP JUMPDEST PUSH2 0xBDED SWAP2 SWAP4 POP PUSH2 0xBE1B PUSH2 0xBDE6 SWAP2 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP4 SWAP2 POP PUSH2 0xBDD9 JUMP JUMPDEST PUSH1 0x20 PUSH2 0xBE3C SWAP3 POP RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0xBD64 JUMP JUMPDEST PUSH2 0xBE5C SWAP2 SWAP8 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP6 PUSH0 PUSH2 0xBD0D JUMP JUMPDEST DUP1 PUSH2 0xBE79 PUSH2 0xBE73 PUSH1 0x1 SWAP4 DUP9 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x5796 JUMP JUMPDEST PUSH2 0xBE83 DUP3 DUP11 PUSH2 0x5818 JUMP JUMPDEST MSTORE ADD PUSH2 0xBC96 JUMP JUMPDEST SWAP1 SWAP5 SWAP2 DUP4 SUB SWAP2 DUP4 DUP4 GT PUSH2 0x465D JUMPI PUSH1 0x20 PUSH2 0xBEB9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH2 0xBEAF DUP8 DUP8 PUSH2 0xC008 JUMP JUMPDEST PUSH2 0xB317 DUP2 DUP4 PUSH2 0xC594 JUMP JUMPDEST SUB SWAP3 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0xB3D9 SWAP6 PUSH2 0x6B04 DUP9 PUSH2 0xB3C3 SWAP4 PUSH2 0xB3CC SWAP9 PUSH2 0xBF04 SWAP7 PUSH0 SWAP3 PUSH2 0xBF0A JUMPI JUMPDEST POP PUSH2 0xBEF2 DUP3 PUSH2 0x884D PUSH2 0x9A8E SWAP5 SWAP6 DUP12 PUSH2 0x5818 JUMP JUMPDEST SWAP9 PUSH2 0xBEFD DUP14 DUP11 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0xC061 JUMP JUMPDEST MSTORE PUSH2 0x57A4 JUMP JUMPDEST PUSH2 0x9A8E SWAP3 POP PUSH2 0x884D SWAP4 PUSH2 0xBF2E PUSH2 0xBEF2 SWAP3 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP4 POP SWAP4 POP PUSH2 0xBEDF JUMP JUMPDEST SWAP1 SWAP3 SWAP2 PUSH2 0xBF44 DUP3 MLOAD PUSH2 0x57E7 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0xBF81 JUMPI PUSH2 0xBF64 DUP4 PUSH2 0xBF5E DUP4 DUP6 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x6063 JUMP JUMPDEST SWAP1 DUP7 ISZERO PUSH2 0x91DC JUMPI DUP7 PUSH1 0x1 SWAP3 DIV PUSH2 0xBF7A DUP3 DUP8 PUSH2 0x5818 JUMP JUMPDEST MSTORE ADD PUSH2 0xBF47 JUMP JUMPDEST POP POP POP SWAP2 POP JUMP JUMPDEST ORIGIN ISZERO DUP1 PUSH2 0xBF92 JUMPI SWAP1 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x7 SLOAD AND ISZERO SWAP1 JUMP JUMPDEST SWAP1 ORIGIN PUSH2 0xBFE0 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBFD1 SWAP3 AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP1 SLOAD SWAP2 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x465D JUMPI SSTORE JUMP JUMPDEST PUSH32 0x67F84AB200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0xC039 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x465D JUMPI PUSH1 0x1 SWAP1 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP3 ISZERO PUSH2 0xC039 JUMPI PUSH1 0x1 SWAP2 PUSH2 0xC073 SWAP2 PUSH2 0x6063 JUMP JUMPDEST SWAP2 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH0 DUP2 SLT PUSH2 0xC08B JUMPI SWAP1 JUMP JUMPDEST PUSH32 0xA8CE443200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH0 PUSH1 0x44 DUP5 ADD MSTORE SWAP1 SWAP4 SWAP2 SWAP3 SWAP2 DUP4 PUSH1 0x64 DUP2 ADD JUMPDEST SUB SWAP2 PUSH2 0xC115 PUSH1 0x1F NOT SWAP4 DUP5 DUP2 ADD DUP8 MSTORE DUP7 PUSH2 0x88F JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP3 DUP8 MLOAD SWAP1 DUP3 DUP6 GAS CALL SWAP1 PUSH2 0xC132 PUSH2 0xC21D JUMP JUMPDEST DUP3 PUSH2 0xC19C JUMPI JUMPDEST POP DUP2 PUSH2 0xC191 JUMPI JUMPDEST POP ISZERO PUSH2 0xC14C JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x24 DUP6 ADD MSTORE PUSH0 PUSH1 0x44 DUP6 ADD MSTORE PUSH2 0xC187 SWAP4 PUSH2 0x4633 SWAP2 PUSH2 0xC181 SWAP1 DUP3 PUSH1 0x64 DUP2 ADD PUSH2 0x1218 JUMP JUMPDEST DUP3 PUSH2 0xC3EE JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x722E JUMP JUMPDEST SWAP1 POP EXTCODESIZE ISZERO ISZERO PUSH0 PUSH2 0xC13F JUMP JUMPDEST DUP1 MLOAD SWAP2 SWAP3 POP DUP2 ISZERO SWAP2 DUP3 ISZERO PUSH2 0xC1B4 JUMPI JUMPDEST POP POP SWAP1 PUSH0 PUSH2 0xC138 JUMP JUMPDEST PUSH2 0xC1C7 SWAP3 POP PUSH1 0x20 DUP1 SWAP2 DUP4 ADD ADD SWAP2 ADD PUSH2 0x54E3 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0xC1AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 SWAP1 SWAP3 DUP4 PUSH1 0x64 DUP2 ADD PUSH2 0xC101 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0xC247 JUMPI RETURNDATASIZE SWAP1 PUSH2 0xC22E DUP3 PUSH2 0xAB6 JUMP JUMPDEST SWAP2 PUSH2 0xC23C PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x88F JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0xB23 SWAP4 PUSH1 0x20 DUP2 MLOAD SWAP2 ADD DUP3 DUP6 GAS CALL PUSH2 0xC264 PUSH2 0xC21D JUMP JUMPDEST SWAP2 PUSH2 0xC638 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x20 SWAP6 SWAP4 SWAP5 SWAP1 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP2 DUP8 DUP4 PUSH1 0x24 DUP2 DUP8 DUP7 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP4 PUSH2 0xC3CF JUMPI JUMPDEST POP DUP1 DUP4 LT PUSH2 0xC38A JUMPI POP PUSH2 0xC2E4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH1 0x40 MLOAD SWAP2 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 DUP5 DUP2 PUSH1 0x24 DUP2 DUP6 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP6 PUSH2 0xC36B JUMPI JUMPDEST POP POP DUP2 DUP5 LT PUSH2 0xC330 JUMPI POP POP PUSH2 0x5F70 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH32 0x1149424D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE POP PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH2 0xC382 SWAP3 SWAP6 POP DUP1 RETURNDATASIZE LT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP3 PUSH0 DUP1 PUSH2 0xC30A JUMP JUMPDEST SWAP1 POP PUSH2 0x2420 SWAP3 DUP7 PUSH32 0x1C6A537500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND SWAP3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x64 SWAP5 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE JUMP JUMPDEST PUSH2 0xC3E7 SWAP2 SWAP4 POP DUP9 RETURNDATASIZE DUP11 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0xC2C0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xC402 SWAP2 AND SWAP2 DUP3 PUSH2 0xC24C JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0xC443 JUMPI JUMPDEST POP POP PUSH2 0xC418 JUMPI POP JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0xC456 SWAP3 POP PUSH1 0x20 DUP1 SWAP2 DUP4 ADD ADD SWAP2 ADD PUSH2 0x54E3 JUMP JUMPDEST ISZERO PUSH0 DUP1 PUSH2 0xC40F JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH2 0x6AC4 SWAP2 PUSH2 0x6063 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x4 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH32 0x273C1ADF00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP3 PUSH2 0xC4F4 JUMPI JUMPDEST POP DUP2 DUP2 GT PUSH2 0xC4C6 JUMPI POP POP JUMP JUMPDEST PUSH32 0x3E8960DC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0xC50E SWAP2 SWAP3 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0xC4BA JUMP JUMPDEST SWAP1 PUSH5 0xFFFFFFFFFF PUSH2 0xC525 DUP3 PUSH2 0x57E7 JUMP JUMPDEST SWAP3 PUSH1 0x5A SHR AND PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0xC539 JUMPI POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x5 DUP1 DUP3 MUL SWAP1 DUP3 DUP3 DIV EQ DUP3 ISZERO OR ISZERO PUSH2 0x465D JUMPI DUP3 PUSH1 0x1F SWAP2 SHR AND SWAP1 PUSH1 0x4D DUP3 GT PUSH2 0x465D JUMPI PUSH1 0x1 SWAP2 PUSH1 0xA EXP PUSH2 0xC56A DUP3 DUP8 PUSH2 0x5818 JUMP JUMPDEST MSTORE ADD PUSH2 0xC52C JUMP JUMPDEST PUSH3 0xFFFFFF SWAP1 PUSH1 0x42 SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x465D JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x4 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH32 0xB677FA5600000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP3 PUSH2 0xC617 JUMPI JUMPDEST POP DUP2 DUP2 LT PUSH2 0xC5E9 JUMPI POP POP JUMP JUMPDEST PUSH32 0xE31C95BE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0xC631 SWAP2 SWAP3 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0xC5DD JUMP JUMPDEST SWAP1 PUSH2 0xC675 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0xC64D JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0xC6BB JUMPI JUMPDEST PUSH2 0xC686 JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0xC67E JUMP JUMPDEST SWAP2 PUSH2 0x6ABF PUSH2 0x6AC4 SWAP3 PUSH8 0xDE0B6B3A7640000 SWAP5 PUSH2 0x6063 JUMP JUMPDEST PUSH2 0xB23 SWAP3 SWAP2 PUSH2 0x6B04 SWAP2 PUSH2 0x6063 JUMP JUMPDEST SWAP3 SWAP2 SWAP3 DUP1 PUSH1 0x1 EQ PUSH2 0xC735 JUMPI PUSH1 0x2 EQ PUSH2 0xC728 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x51 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0xB23 SWAP3 PUSH2 0x6B04 SWAP2 PUSH2 0x6063 JUMP JUMPDEST POP SWAP1 PUSH2 0x6ABF PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH2 0x6AC4 SWAP4 PUSH2 0x6063 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2D 0xB1 0xF9 0xD5 0x22 0xD1 LOG4 BASEFEE PUSH2 0x7EE TLOAD 0x2E 0x2B 0xDA PUSH18 0x10CDF105C8780AE3FDBE21FFFDFD90666473 PUSH16 0x6C634300081B00336101203461012E57 PUSH1 0x1F PUSH2 0x4930 CODESIZE DUP2 SWAP1 SUB SWAP2 DUP3 ADD PUSH1 0x1F NOT AND DUP4 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT DUP5 DUP5 LT OR PUSH2 0x132 JUMPI DUP1 DUP5 SWAP3 PUSH1 0x40 SWAP5 DUP6 MSTORE DUP4 CODECOPY DUP2 ADD SUB SLT PUSH2 0x12E JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x12E JUMPI PUSH1 0x20 ADD MLOAD PUSH4 0xFFFFFFFF SWAP1 DUP2 DUP2 AND DUP1 DUP3 SUB PUSH2 0x12E JUMPI ADDRESS PUSH1 0x80 MSTORE DUP4 PUSH1 0xA0 MSTORE TIMESTAMP ADD SWAP1 DUP2 TIMESTAMP GT PUSH2 0x11A JUMPI DUP3 DUP3 GT PUSH2 0x10B JUMPI PUSH1 0xC0 MSTORE AND PUSH1 0xE0 MSTORE PUSH2 0x100 SWAP1 DUP2 MSTORE PUSH1 0x40 MLOAD PUSH2 0x47E9 SWAP2 DUP3 PUSH2 0x147 DUP4 CODECOPY PUSH1 0x80 MLOAD DUP3 PUSH2 0x18B5 ADD MSTORE PUSH1 0xA0 MLOAD DUP3 DUP2 DUP2 PUSH2 0x5F6 ADD MSTORE DUP2 DUP2 PUSH2 0x7AA ADD MSTORE PUSH2 0xF95 ADD MSTORE PUSH1 0xC0 MLOAD DUP3 PUSH2 0xA7F ADD MSTORE PUSH1 0xE0 MLOAD DUP3 DUP2 DUP2 PUSH2 0x324 ADD MSTORE PUSH2 0x191D ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0x19C ADD MSTORE DUP2 DUP2 PUSH2 0x466 ADD MSTORE DUP2 DUP2 PUSH2 0x6DC ADD MSTORE DUP2 DUP2 PUSH2 0x90E ADD MSTORE DUP2 DUP2 PUSH2 0xB23 ADD MSTORE DUP2 DUP2 PUSH2 0xD18 ADD MSTORE DUP2 DUP2 PUSH2 0x116F ADD MSTORE PUSH2 0x129D ADD MSTORE RETURN JUMPDEST PUSH4 0x68755A11 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP2 PUSH0 CALLDATALOAD DUP1 PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0xE0677AB EQ PUSH2 0x1198 JUMPI DUP5 DUP3 PUSH4 0x206DB1EF EQ PUSH2 0x110C JUMPI POP DUP2 PUSH4 0x2F2770DB EQ PUSH2 0xF13 JUMPI POP DUP1 PUSH4 0x44F6FEC7 EQ PUSH2 0xE1C JUMPI DUP1 PUSH4 0x53A72F7E EQ PUSH2 0xE07 JUMPI DUP1 PUSH4 0x5EA81A32 EQ PUSH2 0xC8E JUMPI DUP1 PUSH4 0x6634B753 EQ PUSH2 0xC46 JUMPI DUP1 PUSH4 0x673A2A1F EQ PUSH2 0x768 JUMPI DUP4 DUP2 PUSH4 0x675D6050 EQ PUSH2 0xAC7 JUMPI POP DUP1 PUSH4 0x6C57F5A9 EQ PUSH2 0xAA3 JUMPI DUP1 PUSH4 0x78DA80CB EQ PUSH2 0xA62 JUMPI DUP1 PUSH4 0x7A0B2E8D EQ PUSH2 0x81F JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x7CE JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x77D JUMPI DUP1 PUSH4 0x8EEC5D70 EQ PUSH2 0x768 JUMPI DUP4 DUP2 PUSH4 0xA7A4B711 EQ PUSH2 0x669 JUMPI POP DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x5A2 JUMPI DUP1 PUSH4 0xD396A666 EQ PUSH2 0x376 JUMPI DUP1 PUSH4 0xDB035EBC EQ PUSH2 0x34C JUMPI DUP1 PUSH4 0xE9D56E19 EQ PUSH2 0x307 JUMPI PUSH4 0xED05BEAF EQ PUSH2 0x10D JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x303 JUMPI PUSH2 0x100 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x303 JUMPI PUSH2 0x127 PUSH2 0x13DA JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2FF JUMPI PUSH2 0x147 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x14FD JUMP JUMPDEST PUSH2 0x14F PUSH2 0x1420 JUMP JUMPDEST SWAP4 PUSH1 0x80 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C CALLDATASIZE ADD SLT PUSH2 0x2FB JUMPI PUSH2 0x182 PUSH2 0x170B JUMP JUMPDEST SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 PUSH32 0x0 AND SWAP7 PUSH2 0x1C5 PUSH2 0x191B JUMP JUMPDEST SWAP5 DUP9 EXTCODESIZE ISZERO PUSH2 0x2F7 JUMPI PUSH2 0x219 PUSH4 0xFFFFFFFF SWAP2 PUSH2 0x267 SWAP5 DUP8 DUP11 MLOAD SWAP12 PUSH32 0xEEEC802F00000000000000000000000000000000000000000000000000000000 DUP14 MSTORE AND SWAP1 DUP12 ADD MSTORE PUSH2 0x1A0 PUSH1 0x24 DUP12 ADD MSTORE PUSH2 0x1A4 DUP11 ADD SWAP1 PUSH2 0x165C JUMP JUMPDEST SWAP6 PUSH1 0x44 CALLDATALOAD PUSH1 0x44 DUP11 ADD MSTORE AND PUSH1 0x64 DUP9 ADD MSTORE PUSH0 PUSH1 0x84 DUP9 ADD MSTORE PUSH1 0xA4 DUP8 ADD SWAP1 PUSH1 0x40 SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST AND PUSH2 0x104 DUP5 ADD MSTORE PUSH1 0x84 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x2F3 JUMPI PUSH2 0x124 DUP5 ADD MSTORE PUSH1 0xA4 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x2F3 JUMPI PUSH2 0x144 DUP5 ADD MSTORE PUSH1 0xC4 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x2F3 JUMPI PUSH2 0x164 DUP5 ADD MSTORE PUSH1 0xE4 CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP1 SWAP3 SUB PUSH2 0x2F3 JUMPI DUP6 SWAP5 DUP5 DUP7 DUP2 DUP1 SWAP5 DUP3 SWAP7 PUSH2 0x184 DUP4 ADD MSTORE SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2EA JUMPI POP PUSH2 0x2D7 JUMPI POP RETURN JUMPDEST PUSH2 0x2E0 SWAP1 PUSH2 0x1443 JUMP JUMPDEST PUSH2 0x2E7 JUMPI DUP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP10 DUP1 REVERT JUMPDEST DUP6 DUP1 REVERT JUMPDEST DUP5 DUP1 REVERT JUMPDEST DUP3 DUP1 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x348 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x348 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP DUP1 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x348 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x348 JUMPI PUSH1 0x20 SWAP1 PUSH4 0xFFFFFFFF PUSH2 0x36E PUSH2 0x191B JUMP JUMPDEST SWAP2 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x303 JUMPI PUSH2 0x140 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x303 JUMPI PUSH2 0x391 PUSH2 0x13DA JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2FF JUMPI PUSH2 0x3B1 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x14FD JUMP JUMPDEST PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC CALLDATASIZE ADD SLT PUSH2 0x2F3 JUMPI DUP2 MLOAD PUSH2 0x3E6 DUP2 PUSH2 0x14A0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x44 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI DUP3 MSTORE PUSH1 0x64 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x84 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI DUP5 DUP4 ADD MSTORE PUSH1 0xA4 CALLDATALOAD SWAP2 DUP4 DUP4 AND DUP1 SWAP4 SUB PUSH2 0x2F3 JUMPI PUSH1 0x80 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3C CALLDATASIZE ADD SLT PUSH2 0x59E JUMPI DUP4 PUSH32 0x0 AND SWAP7 PUSH2 0x48F PUSH2 0x191B JUMP JUMPDEST SWAP5 DUP9 EXTCODESIZE ISZERO PUSH2 0x2F7 JUMPI PUSH2 0x52F SWAP4 PUSH4 0xFFFFFFFF SWAP3 PUSH2 0x4E3 SWAP3 DUP10 MLOAD SWAP11 PUSH32 0xEEEC802F00000000000000000000000000000000000000000000000000000000 DUP13 MSTORE AND SWAP1 DUP11 ADD MSTORE PUSH2 0x1A0 PUSH1 0x24 DUP11 ADD MSTORE PUSH2 0x1A4 DUP10 ADD SWAP1 PUSH2 0x165C JUMP JUMPDEST SWAP5 PUSH0 PUSH1 0x44 DUP10 ADD MSTORE AND PUSH1 0x64 DUP8 ADD MSTORE PUSH0 PUSH1 0x84 DUP8 ADD MSTORE PUSH1 0xA4 DUP7 ADD SWAP1 PUSH1 0x40 SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH2 0x104 SWAP1 DUP2 DUP6 ADD MSTORE PUSH2 0x124 SWAP1 PUSH1 0xC4 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x2F3 JUMPI DUP3 DUP7 ADD MSTORE PUSH1 0xE4 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x2F3 JUMPI PUSH2 0x144 DUP7 ADD MSTORE CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x2F3 JUMPI PUSH2 0x164 DUP6 ADD MSTORE CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP1 SWAP3 SUB PUSH2 0x2F3 JUMPI DUP6 SWAP5 DUP5 DUP7 DUP2 DUP1 SWAP5 DUP3 SWAP7 PUSH2 0x184 DUP4 ADD MSTORE SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2EA JUMPI POP PUSH2 0x2D7 JUMPI POP RETURN JUMPDEST DUP8 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x303 JUMPI DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x303 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x20 DUP2 MLOAD DUP1 SWAP5 PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x65F JUMPI PUSH1 0x20 SWAP5 SWAP4 PUSH2 0x630 JUMPI JUMPDEST POP MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x651 SWAP2 SWAP4 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x658 JUMPI JUMPDEST PUSH2 0x649 DUP2 DUP4 PUSH2 0x14BC JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x18EF JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0x628 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x63F JUMP JUMPDEST DUP2 MLOAD RETURNDATASIZE DUP7 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP1 DUP5 DUP5 CALLVALUE PUSH2 0x764 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x764 JUMPI PUSH2 0x685 PUSH2 0x13DA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2FF JUMPI PUSH2 0x6A4 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x14FD JUMP JUMPDEST PUSH2 0x6AC PUSH2 0x13FD JUMP JUMPDEST PUSH2 0x6B4 PUSH2 0x1420 JUMP JUMPDEST SWAP3 PUSH2 0x6BD PUSH2 0x170B JUMP JUMPDEST SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND DUP7 DUP7 ADD MSTORE PUSH32 0x0 AND SWAP2 PUSH2 0x705 PUSH2 0x191B JUMP JUMPDEST SWAP7 PUSH2 0x70E PUSH2 0x1976 JUMP JUMPDEST SWAP6 DUP5 EXTCODESIZE ISZERO PUSH2 0x2F7 JUMPI DUP10 SWAP7 DUP8 SWAP4 PUSH2 0x751 SWAP3 DUP11 MLOAD SWAP12 DUP13 SWAP10 DUP11 SWAP9 DUP10 SWAP8 PUSH32 0xEEEC802F00000000000000000000000000000000000000000000000000000000 DUP10 MSTORE DUP9 ADD PUSH2 0x1729 JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2EA JUMPI POP PUSH2 0x2D7 JUMPI POP RETURN JUMPDEST POP POP REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x2E7 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT ISZERO PUSH2 0x17E9 JUMPI DUP1 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x348 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x348 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x303 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x303 JUMPI CALLDATALOAD SWAP2 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP4 AND DUP4 SUB PUSH2 0x2E7 JUMPI POP PUSH2 0x818 PUSH1 0x20 SWAP3 PUSH2 0x188A JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP DUP3 SWAP1 CALLVALUE PUSH2 0x348 JUMPI PUSH2 0x120 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x348 JUMPI PUSH2 0x83C PUSH2 0x13DA JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA5E JUMPI PUSH2 0x85C SWAP1 CALLDATASIZE SWAP1 DUP7 ADD PUSH2 0x14FD JUMP JUMPDEST SWAP2 PUSH1 0x64 CALLDATALOAD SWAP5 PUSH4 0xFFFFFFFF SWAP6 DUP7 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x2F3 JUMPI PUSH1 0x84 CALLDATALOAD SWAP3 DUP4 ISZERO ISZERO DUP1 SWAP5 SUB PUSH2 0x2F3 JUMPI PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5C CALLDATASIZE ADD SLT PUSH2 0x2F3 JUMPI DUP5 MLOAD SWAP8 PUSH2 0x8B5 DUP10 PUSH2 0x14A0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH1 0xA4 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI DUP11 MSTORE PUSH1 0xC4 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI PUSH1 0x20 DUP12 ADD MSTORE PUSH1 0xE4 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI DUP8 DUP12 ADD MSTORE PUSH2 0x104 SWAP10 DUP11 CALLDATALOAD SWAP1 DUP5 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x2F3 JUMPI DUP5 PUSH32 0x0 AND SWAP6 DUP5 TIMESTAMP AND ADD SWAP2 DUP5 DUP4 GT PUSH2 0xA32 JUMPI DUP12 SWAP13 PUSH2 0x945 PUSH2 0x1976 JUMP JUMPDEST SWAP3 DUP9 EXTCODESIZE ISZERO PUSH2 0xA2E JUMPI DUP14 SWAP11 DUP12 SWAP8 DUP14 MLOAD SWAP15 DUP16 SWAP13 DUP14 SWAP12 DUP13 SWAP11 PUSH32 0xEEEC802F00000000000000000000000000000000000000000000000000000000 DUP13 MSTORE AND SWAP1 DUP11 ADD MSTORE PUSH1 0x24 DUP10 ADD PUSH2 0x1A0 SWAP1 MSTORE PUSH2 0x1A4 DUP10 ADD PUSH2 0x999 SWAP2 PUSH2 0x165C JUMP JUMPDEST SWAP7 PUSH1 0x44 CALLDATALOAD PUSH1 0x44 DUP11 ADD MSTORE AND PUSH1 0x64 DUP9 ADD MSTORE PUSH1 0x84 DUP8 ADD MSTORE PUSH1 0xA4 DUP7 ADD PUSH2 0x9E9 SWAP2 PUSH1 0x40 SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST DUP5 ADD MSTORE DUP1 MLOAD ISZERO ISZERO PUSH2 0x124 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x144 DUP5 ADD MSTORE DUP9 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x164 DUP5 ADD MSTORE PUSH1 0x60 ADD MLOAD ISZERO ISZERO PUSH2 0x184 DUP4 ADD MSTORE SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2EA JUMPI POP PUSH2 0x2D7 JUMPI POP RETURN JUMPDEST DUP14 DUP1 REVERT JUMPDEST PUSH1 0x24 DUP13 PUSH1 0x11 DUP11 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST DUP4 DUP1 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x348 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x348 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x348 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x348 JUMPI PUSH1 0x20 SWAP1 PUSH1 0xFF PUSH1 0x1 SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST DUP1 DUP5 DUP5 CALLVALUE PUSH2 0x764 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x764 JUMPI PUSH2 0xAE2 PUSH2 0x13DA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2FF JUMPI PUSH2 0xB01 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x14FD JUMP JUMPDEST SWAP3 PUSH2 0xB0A PUSH2 0x170B JUMP JUMPDEST SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH32 0x0 AND SWAP2 PUSH2 0xB4C PUSH2 0x191B JUMP JUMPDEST SWAP1 PUSH2 0xB55 PUSH2 0x1976 JUMP JUMPDEST SWAP2 DUP5 EXTCODESIZE ISZERO PUSH2 0x2F7 JUMPI PUSH1 0x60 DUP11 SWAP8 SWAP4 PUSH2 0xBFF DUP10 SWAP6 PUSH4 0xFFFFFFFF PUSH2 0xBB3 DUP14 MLOAD SWAP15 DUP16 SWAP13 DUP14 SWAP12 DUP13 SWAP11 PUSH32 0xEEEC802F00000000000000000000000000000000000000000000000000000000 DUP13 MSTORE AND SWAP1 DUP11 ADD MSTORE PUSH2 0x1A0 PUSH1 0x24 DUP11 ADD MSTORE PUSH2 0x1A4 DUP10 ADD SWAP1 PUSH2 0x165C JUMP JUMPDEST SWAP6 PUSH0 PUSH1 0x44 DUP10 ADD MSTORE AND PUSH1 0x64 DUP8 ADD MSTORE PUSH0 PUSH1 0x84 DUP8 ADD MSTORE PUSH1 0xA4 DUP7 ADD SWAP1 PUSH1 0x40 SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH0 PUSH2 0x104 DUP6 ADD MSTORE DUP1 MLOAD ISZERO ISZERO PUSH2 0x124 DUP6 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x144 DUP6 ADD MSTORE DUP10 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x164 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH2 0x184 DUP4 ADD MSTORE SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2EA JUMPI POP PUSH2 0x2D7 JUMPI POP RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x348 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x348 JUMPI PUSH1 0xFF DUP2 PUSH1 0x20 SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xC7C PUSH2 0x13DA JUMP JUMPDEST AND DUP2 MSTORE DUP1 DUP6 MSTORE KECCAK256 SLOAD AND SWAP1 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x303 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x303 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP1 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x2FF JUMPI PUSH2 0xCC0 SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0x163E JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2FB JUMPI PUSH2 0xCD8 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x163E JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP6 MLOAD SWAP4 PUSH2 0x2DE7 SWAP1 DUP2 DUP7 ADD SWAP5 DUP7 DUP7 LT SWAP1 DUP7 GT OR PUSH2 0xDDB JUMPI POP SWAP2 PUSH2 0xD4B DUP6 SWAP5 SWAP3 PUSH2 0xD58 SWAP5 PUSH2 0x19CD DUP8 CODECOPY DUP8 PUSH32 0x0 AND DUP5 MSTORE PUSH1 0x60 PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD SWAP1 PUSH2 0x1847 JUMP JUMPDEST SWAP2 DUP8 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x1847 JUMP JUMPDEST SUB SWAP1 DUP5 CREATE DUP1 ISZERO PUSH2 0xDCF JUMPI SWAP2 PUSH32 0x83A48FBCFC991335314E74D0496AAB6A1987E992DDC85DDDBCC4D6DD6EF2E9FC SWAP2 PUSH1 0x20 SWAP5 SWAP4 AND SWAP2 DUP3 SWAP2 PUSH2 0xD95 PUSH2 0x1998 JUMP JUMPDEST DUP3 DUP6 MSTORE DUP5 DUP7 MSTORE DUP1 DUP6 KECCAK256 PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP3 SLOAD AND OR SWAP1 SSTORE MLOAD SWAP4 DUP1 LOG2 DUP2 MSTORE RETURN JUMPDEST POP POP MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP9 PUSH1 0x41 PUSH1 0x24 SWAP3 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x348 JUMPI PUSH1 0x3 NOT CALLDATASIZE ADD SLT ISZERO PUSH2 0x17E9 JUMPI DUP1 REVERT JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x303 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x303 JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xA5E JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0xA5E JUMPI PUSH1 0xB PUSH2 0xE76 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP4 PUSH1 0x24 PUSH1 0x55 SWAP6 CALLDATASIZE SWAP4 ADD CALLDATALOAD SWAP2 ADD PUSH2 0x15DA JUMP JUMPDEST SWAP5 PUSH2 0x2DE7 SWAP6 PUSH2 0xECE PUSH1 0x20 DUP1 SWAP9 DUP9 MLOAD SWAP5 PUSH2 0xE91 DUP4 DUP4 ADD DUP8 PUSH2 0x14BC JUMP JUMPDEST DUP2 DUP7 MSTORE DUP3 DUP7 ADD SWAP2 PUSH2 0x19CD DUP4 CODECOPY DUP3 DUP11 MLOAD SWAP6 DUP7 SWAP4 DUP3 DUP6 ADD SWAP9 MLOAD DUP1 SWAP2 DUP11 MCOPY DUP5 ADD SWAP1 DUP3 DUP3 ADD DUP5 DUP2 MSTORE DUP2 MLOAD SWAP4 DUP5 SWAP3 ADD SWAP1 MCOPY ADD SWAP1 DUP4 DUP3 ADD MSTORE SUB DUP1 DUP5 MSTORE ADD DUP3 PUSH2 0x14BC JUMP JUMPDEST MLOAD SWAP1 KECCAK256 DUP5 MLOAD DUP7 DUP2 ADD SWAP1 CALLER DUP3 MSTORE CHAINID DUP8 DUP3 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x60 DUP2 MSTORE PUSH2 0xEF4 DUP2 PUSH2 0x1484 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 DUP6 MLOAD SWAP2 DUP7 DUP4 ADD MSTORE DUP7 DUP3 ADD MSTORE ADDRESS DUP2 MSTORE ADD PUSH1 0xFF DUP2 MSTORE8 KECCAK256 SWAP2 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0xA5E JUMPI DUP4 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xA5E JUMPI PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0xF50 SWAP2 AND PUSH2 0x188A JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP3 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 DUP3 DUP8 DUP2 DUP8 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x1102 JUMPI SWAP1 DUP4 SWAP3 SWAP2 DUP9 SWAP3 PUSH2 0x10E0 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 DUP7 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE DUP11 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x10D7 JUMPI POP DUP5 SWAP3 PUSH2 0x10A0 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x107A JUMPI POP PUSH2 0x1029 PUSH2 0x1998 JUMP JUMPDEST PUSH1 0x1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP2 SLOAD AND OR PUSH1 0x1 SSTORE PUSH32 0x432ACBFD662DBB5D8B378384A67159B47CA9D0F1B79F97CF64CF8585FA362D50 DUP2 DUP1 LOG1 DUP1 RETURN JUMPDEST SWAP1 PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x10D0 JUMPI JUMPDEST PUSH2 0x10B7 DUP2 DUP4 PUSH2 0x14BC JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x303 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x303 JUMPI PUSH0 DUP1 PUSH2 0x1019 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x10AD JUMP JUMPDEST MLOAD RETURNDATASIZE DUP7 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x10FB SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x658 JUMPI PUSH2 0x649 DUP2 DUP4 PUSH2 0x14BC JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0xFC9 JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE DUP10 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP1 DUP6 DUP6 CALLVALUE PUSH2 0x764 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x764 JUMPI PUSH2 0x1128 PUSH2 0x13DA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2FF JUMPI PUSH2 0x1147 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x14FD JUMP JUMPDEST PUSH2 0x114F PUSH2 0x13FD JUMP JUMPDEST PUSH2 0x1157 PUSH2 0x170B JUMP JUMPDEST SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 PUSH2 0x705 PUSH2 0x191B JUMP JUMPDEST POP POP CALLVALUE PUSH2 0x2F3 JUMPI PUSH2 0x160 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2F3 JUMPI PUSH2 0x11B4 PUSH2 0x13DA JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2F3 JUMPI PUSH2 0x11D4 SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0x14FD JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP1 SWAP3 SUB PUSH2 0x2F3 JUMPI PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C CALLDATASIZE ADD SLT PUSH2 0x2F3 JUMPI DUP4 MLOAD SWAP1 PUSH2 0x121D DUP3 PUSH2 0x14A0 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x64 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI DUP2 MSTORE PUSH1 0x84 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xA4 CALLDATALOAD DUP4 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI DUP7 DUP3 ADD MSTORE PUSH1 0xC4 CALLDATALOAD SWAP3 DUP1 DUP5 AND DUP1 SWAP5 SUB PUSH2 0x2F3 JUMPI PUSH1 0x80 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1C CALLDATASIZE ADD SLT PUSH2 0x2F3 JUMPI DUP1 PUSH32 0x0 AND SWAP6 DUP7 EXTCODESIZE ISZERO PUSH2 0x2F3 JUMPI PUSH2 0x1356 SWAP4 PUSH2 0x130B SWAP3 DUP10 MLOAD SWAP11 PUSH32 0xEEEC802F00000000000000000000000000000000000000000000000000000000 DUP13 MSTORE AND SWAP1 DUP11 ADD MSTORE PUSH2 0x1A0 PUSH1 0x24 DUP11 ADD MSTORE PUSH2 0x1A4 DUP10 ADD SWAP1 PUSH2 0x165C JUMP JUMPDEST SWAP4 PUSH0 PUSH1 0x44 DUP10 ADD MSTORE PUSH1 0x64 DUP9 ADD MSTORE PUSH0 PUSH1 0x84 DUP9 ADD MSTORE PUSH1 0xA4 DUP8 ADD SWAP1 PUSH1 0x40 SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH2 0x104 SWAP1 DUP2 DUP7 ADD MSTORE PUSH2 0x124 SWAP1 PUSH1 0xE4 CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x2F3 JUMPI DUP3 DUP8 ADD MSTORE CALLDATALOAD SWAP1 DUP2 ISZERO ISZERO DUP1 SWAP3 SUB PUSH2 0x2F3 JUMPI PUSH2 0x144 SWAP2 DUP3 DUP8 ADD MSTORE CALLDATALOAD DUP1 ISZERO ISZERO DUP1 SWAP2 SUB PUSH2 0x2F3 JUMPI PUSH2 0x164 DUP7 ADD MSTORE CALLDATALOAD SWAP2 DUP3 ISZERO ISZERO DUP1 SWAP4 SUB PUSH2 0x2F3 JUMPI DUP5 PUSH0 DUP2 DUP1 SWAP5 DUP3 SWAP7 PUSH2 0x184 DUP4 ADD MSTORE SUB SWAP3 GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x13D1 JUMPI POP PUSH2 0x13C5 JUMPI POP DUP1 RETURN JUMPDEST PUSH2 0x13CF SWAP2 POP PUSH2 0x1443 JUMP JUMPDEST STOP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x2F3 JUMPI JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x2F3 JUMPI JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x2F3 JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1457 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1457 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1457 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1457 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x2F3 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x1457 JUMPI PUSH1 0x40 SWAP3 PUSH1 0x40 MLOAD SWAP5 PUSH2 0x1532 DUP4 DUP4 PUSH1 0x5 SHL ADD DUP8 PUSH2 0x14BC JUMP JUMPDEST DUP2 DUP7 MSTORE DUP3 DUP1 DUP8 ADD SWAP3 PUSH1 0x7 SHL DUP6 ADD ADD SWAP4 DUP2 DUP6 GT PUSH2 0x2F3 JUMPI DUP4 ADD SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x155C JUMPI POP POP POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP4 DUP4 SUB SLT PUSH2 0x2F3 JUMPI DUP6 MLOAD SWAP1 PUSH2 0x1572 DUP3 PUSH2 0x1484 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI DUP4 MSTORE DUP6 DUP6 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2F3 JUMPI DUP7 DUP5 ADD MSTORE DUP8 DUP6 ADD CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI DUP8 DUP4 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 DUP6 ADD CALLDATALOAD SWAP3 DUP4 ISZERO ISZERO DUP5 SUB PUSH2 0x2F3 JUMPI PUSH1 0x80 SWAP4 DUP8 SWAP4 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x154C JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1457 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1622 PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP5 ADD AND ADD DUP5 PUSH2 0x14BC JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0x2F3 JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x2F3 JUMPI DUP2 PUSH1 0x20 PUSH2 0x1659 SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0x15DA JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x167B JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 DUP5 MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP4 MLOAD AND DUP2 MSTORE DUP5 DUP4 ADD MLOAD SWAP1 PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x16DE JUMPI PUSH1 0x1 SWAP4 DUP7 SWAP4 PUSH1 0x80 SWAP4 DUP6 DUP5 ADD MSTORE PUSH1 0x40 SWAP1 DUP2 DUP4 ADD MLOAD AND SWAP1 DUP4 ADD MSTORE PUSH1 0x60 DUP1 SWAP2 ADD MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE ADD SWAP6 ADD SWAP2 ADD SWAP3 SWAP2 SWAP1 SWAP3 PUSH2 0x166D JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x1718 DUP3 PUSH2 0x14A0 JUMP JUMPDEST PUSH0 PUSH1 0x40 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP5 PUSH2 0x17B5 PUSH2 0x180 SWAP6 PUSH4 0xFFFFFFFF PUSH2 0x176A PUSH1 0x60 SWAP8 SWAP12 SWAP11 SWAP7 PUSH2 0x1A0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP9 AND DUP13 MSTORE DUP1 PUSH1 0x20 DUP14 ADD MSTORE DUP12 ADD SWAP1 PUSH2 0x165C JUMP JUMPDEST SWAP11 PUSH0 PUSH1 0x40 DUP12 ADD MSTORE AND DUP7 DUP10 ADD MSTORE PUSH0 PUSH1 0x80 DUP10 ADD MSTORE PUSH1 0xA0 DUP9 ADD SWAP1 PUSH1 0x40 SWAP1 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST AND PUSH2 0x100 DUP6 ADD MSTORE DUP1 MLOAD ISZERO ISZERO PUSH2 0x120 DUP6 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x140 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x160 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F7420696D706C656D656E7465640000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x18E9 DUP2 PUSH2 0x14A0 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x2F3 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x2F3 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH4 0xFFFFFFFF DUP2 AND TIMESTAMP LT ISZERO PUSH2 0x194D JUMPI SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x195F DUP3 PUSH2 0x1484 JUMP JUMPDEST PUSH0 PUSH1 0x60 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST PUSH2 0x197E PUSH2 0x1952 JUMP JUMPDEST POP PUSH2 0x1987 PUSH2 0x1952 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x40 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x1 SLOAD AND PUSH2 0x19A4 JUMPI JUMP JUMPDEST PUSH32 0x75884CDA00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT INVALID PUSH2 0x200 PUSH1 0x40 DUP2 DUP2 MSTORE CALLVALUE PUSH2 0x48A JUMPI PUSH2 0x2DE7 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x1E DUP3 DUP7 PUSH2 0x48E JUMP JUMPDEST DUP5 CODECOPY DUP3 ADD SWAP1 PUSH1 0x60 DUP4 DUP4 SUB SLT PUSH2 0x48A JUMPI DUP3 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0x48A JUMPI PUSH1 0x20 DUP5 DUP2 ADD MLOAD SWAP1 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP2 DUP3 DUP2 GT PUSH2 0x48A JUMPI DUP6 PUSH2 0x64 SWAP2 DUP4 ADD PUSH2 0x4B1 JUMP JUMPDEST SWAP5 DUP4 DUP3 ADD MLOAD DUP4 DUP2 GT PUSH2 0x48A JUMPI PUSH2 0x7A SWAP3 ADD PUSH2 0x4B1 JUMP JUMPDEST SWAP4 DUP3 MLOAD SWAP6 DUP4 DUP8 ADD DUP8 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x3A1 JUMPI DUP5 MSTORE PUSH1 0x1 DUP1 DUP9 MSTORE DUP2 DUP9 ADD SWAP4 PUSH1 0x31 PUSH1 0xF8 SHL DUP6 MSTORE PUSH2 0xA7 DUP5 PUSH2 0x506 JUMP JUMPDEST SWAP8 PUSH2 0x120 SWAP9 DUP10 MSTORE PUSH2 0xB7 DUP11 PUSH2 0x689 JUMP JUMPDEST SWAP6 PUSH2 0x140 SWAP7 DUP8 MSTORE DUP6 MLOAD DUP6 DUP8 ADD KECCAK256 SWAP11 DUP12 PUSH1 0xE0 MSTORE MLOAD SWAP1 KECCAK256 SWAP10 PUSH2 0x100 SWAP11 DUP1 DUP13 MSTORE CHAINID PUSH1 0xA0 MSTORE DUP9 MLOAD SWAP1 DUP7 DUP3 ADD SWAP3 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP5 MSTORE DUP11 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT DUP6 DUP3 GT OR PUSH2 0x3A1 JUMPI DUP10 MSTORE MLOAD SWAP1 KECCAK256 PUSH1 0x80 MSTORE ADDRESS PUSH1 0xC0 MSTORE PUSH2 0x160 SWAP5 DUP9 DUP7 MSTORE DUP1 MLOAD SWAP2 DUP4 DUP4 GT PUSH2 0x3A1 JUMPI PUSH1 0x3 SWAP3 DUP4 SLOAD SWAP3 DUP7 DUP5 DUP2 SHR SWAP5 AND DUP1 ISZERO PUSH2 0x480 JUMPI JUMPDEST DUP9 DUP6 LT EQ PUSH2 0x46C JUMPI DUP2 SWAP1 PUSH1 0x1F SWAP5 DUP6 DUP2 GT PUSH2 0x41E JUMPI JUMPDEST POP DUP9 SWAP1 DUP6 DUP4 GT PUSH1 0x1 EQ PUSH2 0x3C0 JUMPI PUSH0 SWAP3 PUSH2 0x3B5 JUMPI JUMPDEST POP POP PUSH0 NOT DUP3 DUP7 SHL SHR NOT AND SWAP1 DUP7 SHL OR DUP4 SSTORE JUMPDEST DUP1 MLOAD SWAP4 DUP5 GT PUSH2 0x3A1 JUMPI PUSH1 0x4 SWAP6 DUP7 SLOAD DUP7 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x397 JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x384 JUMPI DUP4 DUP2 GT PUSH2 0x341 JUMPI JUMPDEST POP DUP1 SWAP3 DUP6 GT PUSH1 0x1 EQ PUSH2 0x2DC JUMPI POP SWAP4 DUP4 SWAP5 SWAP2 DUP5 SWAP3 PUSH0 SWAP6 PUSH2 0x2D1 JUMPI JUMPDEST POP POP SHL SWAP3 PUSH0 NOT SWAP2 SHL SHR NOT AND OR SWAP1 SSTORE JUMPDEST PUSH2 0x180 SWAP2 CALLER DUP4 MSTORE PUSH2 0x1A0 SWAP4 DUP6 DUP6 MSTORE PUSH2 0x1E0 SWAP6 DUP7 MSTORE PUSH8 0xDE0B6B3A7640000 PUSH1 0x5 SSTORE MLOAD SWAP6 PUSH2 0x2627 SWAP8 DUP9 PUSH2 0x7C0 DUP10 CODECOPY PUSH1 0x80 MLOAD DUP9 PUSH2 0x21C7 ADD MSTORE PUSH1 0xA0 MLOAD DUP9 PUSH2 0x2293 ADD MSTORE PUSH1 0xC0 MLOAD DUP9 PUSH2 0x2198 ADD MSTORE PUSH1 0xE0 MLOAD DUP9 PUSH2 0x2216 ADD MSTORE MLOAD DUP8 PUSH2 0x223C ADD MSTORE MLOAD DUP7 PUSH2 0x1056 ADD MSTORE MLOAD DUP6 PUSH2 0x1080 ADD MSTORE MLOAD DUP5 DUP2 DUP2 PUSH2 0x311 ADD MSTORE DUP2 DUP2 PUSH2 0x554 ADD MSTORE DUP2 DUP2 PUSH2 0x7E2 ADD MSTORE DUP2 DUP2 PUSH2 0xD93 ADD MSTORE DUP2 DUP2 PUSH2 0xF84 ADD MSTORE DUP2 DUP2 PUSH2 0x14B4 ADD MSTORE DUP2 DUP2 PUSH2 0x157D ADD MSTORE DUP2 DUP2 PUSH2 0x1743 ADD MSTORE DUP2 DUP2 PUSH2 0x190C ADD MSTORE DUP2 DUP2 PUSH2 0x199C ADD MSTORE PUSH2 0x212D ADD MSTORE MLOAD DUP4 PUSH2 0xFF0 ADD MSTORE MLOAD DUP3 POP POP PUSH2 0x1C0 MLOAD DUP3 POP POP MLOAD DUP2 DUP2 DUP2 PUSH2 0x693 ADD MSTORE DUP2 DUP2 PUSH2 0x72A ADD MSTORE DUP2 DUP2 PUSH2 0x92A ADD MSTORE DUP2 DUP2 PUSH2 0xC67 ADD MSTORE PUSH2 0x1192 ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP4 POP PUSH0 DUP1 PUSH2 0x1D9 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 DUP5 PUSH1 0x1F NOT DUP2 AND DUP9 PUSH0 MSTORE DUP6 PUSH0 KECCAK256 SWAP6 PUSH0 SWAP1 JUMPDEST DUP10 DUP4 DUP4 LT PUSH2 0x327 JUMPI POP POP POP LT PUSH2 0x30E JUMPI JUMPDEST POP POP POP POP DUP2 SHL ADD SWAP1 SSTORE PUSH2 0x1E8 JUMP JUMPDEST ADD MLOAD SWAP1 PUSH1 0xF8 DUP5 PUSH0 NOT SWAP3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 DUP1 PUSH2 0x300 JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP10 SSTORE SWAP1 SWAP8 ADD SWAP7 SWAP5 DUP6 ADD SWAP5 DUP9 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x2EF JUMP JUMPDEST DUP8 PUSH0 MSTORE DUP2 PUSH0 KECCAK256 DUP5 DUP1 DUP9 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP5 DUP10 LT PUSH2 0x37B JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 DUP8 SWAP1 JUMPDEST DUP3 DUP2 LT PUSH2 0x370 JUMPI POP POP PUSH2 0x1BF JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP8 SWAP1 PUSH2 0x362 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x359 JUMP JUMPDEST PUSH1 0x22 DUP9 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x1AF JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x183 JUMP JUMPDEST SWAP1 DUP9 SWAP4 POP PUSH1 0x1F NOT DUP4 AND SWAP2 DUP8 PUSH0 MSTORE DUP11 PUSH0 KECCAK256 SWAP3 PUSH0 JUMPDEST DUP13 DUP3 DUP3 LT PUSH2 0x408 JUMPI POP POP DUP5 GT PUSH2 0x3F1 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD DUP4 SSTORE PUSH2 0x194 JUMP JUMPDEST ADD MLOAD PUSH0 NOT DUP4 DUP9 SHL PUSH1 0xF8 AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x3E4 JUMP JUMPDEST DUP4 DUP6 ADD MLOAD DUP7 SSTORE DUP13 SWAP8 SWAP1 SWAP6 ADD SWAP5 SWAP4 DUP5 ADD SWAP4 ADD PUSH2 0x3D3 JUMP JUMPDEST SWAP1 SWAP2 POP DUP6 PUSH0 MSTORE DUP9 PUSH0 KECCAK256 DUP6 DUP1 DUP6 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP12 DUP7 LT PUSH2 0x463 JUMPI JUMPDEST SWAP2 DUP11 SWAP2 DUP7 SWAP6 SWAP5 SWAP4 ADD PUSH1 0x5 SHR ADD SWAP2 JUMPDEST DUP3 DUP2 LT PUSH2 0x455 JUMPI POP POP PUSH2 0x16F JUMP JUMPDEST PUSH0 DUP2 SSTORE DUP6 SWAP5 POP DUP11 SWAP2 ADD PUSH2 0x447 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x439 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP4 PUSH1 0x7F AND SWAP4 PUSH2 0x15A JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x3A1 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x48A JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x3A1 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x4E5 PUSH1 0x1F DUP5 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP6 PUSH2 0x48E JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x48A JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0x57C JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0x53E JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0x530 JUMPI POP OR SWAP1 JUMP JUMPDEST DUP3 PUSH0 NOT SWAP2 SUB PUSH1 0x3 SHL SHL AND OR SWAP1 JUMP JUMPDEST PUSH1 0x44 DUP3 PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH4 0x305A27A9 PUSH1 0xE0 SHL DUP4 MSTORE DUP2 PUSH1 0x4 DUP5 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH1 0x24 DUP7 ADD MSTORE ADD DUP5 DUP5 ADD MCOPY PUSH0 DUP3 DUP3 ADD DUP5 ADD MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP2 ADD SUB ADD SWAP1 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x3A1 JUMPI PUSH0 SLOAD SWAP3 PUSH1 0x1 SWAP4 DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x67F JUMPI JUMPDEST DUP4 DUP3 LT EQ PUSH2 0x46C JUMPI PUSH1 0x1F DUP2 GT PUSH2 0x64C JUMPI JUMPDEST POP DUP2 PUSH1 0x1F DUP5 GT PUSH1 0x1 EQ PUSH2 0x5EA JUMPI POP SWAP3 DUP3 SWAP4 SWAP2 DUP4 SWAP3 PUSH0 SWAP5 PUSH2 0x5DF JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0x5CA JUMP JUMPDEST SWAP2 SWAP1 DUP4 PUSH1 0x1F NOT DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0x632 JUMPI POP POP POP LT PUSH2 0x61A JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x60D JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0x5FC JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP5 PUSH1 0x1F DUP5 PUSH0 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 PUSH1 0x1F DUP7 ADD PUSH1 0x5 SHR ADD JUMPDEST DUP3 DUP2 LT PUSH2 0x674 JUMPI POP POP PUSH2 0x5AF JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0x666 JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x59E JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0x6B3 JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0x53E JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0x530 JUMPI POP OR SWAP1 JUMP JUMPDEST SWAP2 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x3A1 JUMPI PUSH1 0x1 SWAP2 DUP3 SLOAD DUP4 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x7B5 JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x46C JUMPI PUSH1 0x1F DUP2 GT PUSH2 0x782 JUMPI JUMPDEST POP DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0x722 JUMPI POP DUP2 SWAP3 SWAP4 SWAP5 PUSH0 SWAP3 PUSH2 0x717 JUMPI JUMPDEST POP POP PUSH0 NOT PUSH1 0x3 DUP4 SWAP1 SHL SHR NOT AND SWAP1 DUP3 SHL OR SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x700 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT DUP4 AND SWAP6 DUP5 PUSH0 MSTORE DUP3 PUSH0 KECCAK256 SWAP3 PUSH0 SWAP1 JUMPDEST DUP9 DUP3 LT PUSH2 0x76B JUMPI POP POP DUP4 DUP6 SWAP7 SWAP8 LT PUSH2 0x753 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x746 JUMP JUMPDEST DUP1 DUP8 DUP6 SWAP7 DUP3 SWAP5 SWAP7 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP6 ADD SWAP4 ADD SWAP1 PUSH2 0x733 JUMP JUMPDEST DUP4 PUSH0 MSTORE DUP4 PUSH1 0x1F DUP4 PUSH0 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR ADD JUMPDEST DUP3 DUP2 LT PUSH2 0x7AA JUMPI POP POP PUSH2 0x6E7 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP5 SWAP1 PUSH2 0x79C JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x6D6 JUMP INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 SWAP2 PUSH1 0xE0 PUSH0 CALLDATALOAD DUP2 SHR SWAP2 DUP3 PUSH4 0x1FFC9A7 EQ PUSH2 0x1BD2 JUMPI POP DUP2 PUSH4 0x6FDDE03 EQ PUSH2 0x1AE2 JUMPI DUP2 PUSH4 0x95EA7B3 EQ PUSH2 0x1A64 JUMPI DUP2 PUSH4 0x16A0B3E0 EQ PUSH2 0x19D5 JUMPI DUP2 PUSH4 0x18160DDD EQ PUSH2 0x1942 JUMPI DUP2 PUSH4 0x23B872DD EQ PUSH2 0x189A JUMPI DUP2 PUSH4 0x23DE6651 EQ PUSH2 0x1868 JUMPI DUP2 PUSH4 0x273C1ADF EQ PUSH2 0x183D JUMPI DUP2 PUSH4 0x30ADF81F EQ PUSH2 0x1803 JUMPI DUP2 PUSH4 0x313CE567 EQ PUSH2 0x17E8 JUMPI DUP2 PUSH4 0x360C340F EQ PUSH2 0x16EA JUMPI DUP2 PUSH4 0x3644E515 EQ PUSH2 0x16CE JUMPI DUP2 PUSH4 0x4CFE8D1A EQ PUSH2 0x16B6 JUMPI DUP2 PUSH4 0x5687F2B8 EQ PUSH2 0x1657 JUMPI DUP2 PUSH4 0x627CDCB9 EQ PUSH2 0x162E JUMPI DUP2 PUSH4 0x641579A6 EQ PUSH2 0x1616 JUMPI DUP2 PUSH4 0x654CF15D EQ PUSH2 0x15F4 JUMPI DUP2 PUSH4 0x679AEFCE EQ PUSH2 0x151A JUMPI DUP2 PUSH4 0x70A08231 EQ PUSH2 0x1446 JUMPI DUP2 PUSH4 0x72C98186 EQ PUSH2 0x137C JUMPI DUP2 PUSH4 0x7ECEBE00 EQ PUSH2 0x1338 JUMPI DUP2 PUSH4 0x81FA807C EQ PUSH2 0x1135 JUMPI DUP2 PUSH4 0x84B0196E EQ PUSH2 0x103E JUMPI DUP2 PUSH4 0x851C1BB3 EQ PUSH2 0xFA8 JUMPI DUP2 PUSH4 0x8D928AF8 EQ PUSH2 0xF58 JUMPI DUP2 PUSH4 0x95D89B41 EQ PUSH2 0xE52 JUMPI DUP2 PUSH4 0x984DE9E8 EQ PUSH2 0xE04 JUMPI DUP2 PUSH4 0xA9059CBB EQ PUSH2 0xCFB JUMPI DUP2 PUSH4 0xAA6CA808 EQ PUSH2 0xC0E JUMPI DUP2 PUSH4 0xAB68E28C EQ PUSH2 0xB66 JUMPI DUP2 PUSH4 0xABB1DC44 EQ PUSH2 0x8CF JUMPI DUP2 PUSH4 0xB0E2E403 EQ PUSH2 0x7B7 JUMPI DUP2 PUSH4 0xB156AA0A EQ PUSH2 0x6D0 JUMPI DUP2 PUSH4 0xB677FA56 EQ PUSH2 0x6CB JUMPI DUP2 PUSH4 0xCE20ECE7 EQ PUSH2 0x6CB JUMPI DUP2 PUSH4 0xD335B0CF EQ PUSH2 0x638 JUMPI DUP2 PUSH4 0xD505ACCF EQ PUSH2 0x38E JUMPI POP DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x295 JUMPI PUSH4 0xE4C43663 EQ PUSH2 0x1D0 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x28D JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x28D JUMPI PUSH2 0x1E9 PUSH2 0x1C7C JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x291 JUMPI PUSH2 0x20A SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x1D4B JUMP JUMPDEST SWAP3 PUSH1 0x64 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x28D JUMPI PUSH2 0x222 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x1D4B JUMP JUMPDEST POP PUSH1 0x84 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x28A JUMPI POP SWAP3 PUSH2 0x278 PUSH2 0x245 PUSH2 0x286 SWAP4 PUSH2 0x263 SWAP7 CALLDATASIZE SWAP2 ADD PUSH2 0x1E69 JUMP JUMPDEST SWAP2 PUSH2 0x250 DUP6 MLOAD PUSH2 0x2004 JUMP JUMPDEST DUP2 MLOAD SWAP7 DUP8 SWAP7 PUSH1 0x80 DUP9 MSTORE PUSH1 0x80 DUP9 ADD SWAP1 PUSH2 0x1DED JUMP JUMPDEST SWAP2 PUSH1 0x44 CALLDATALOAD PUSH1 0x20 DUP9 ADD MSTORE DUP7 DUP4 SUB SWAP1 DUP8 ADD MSTORE PUSH2 0x1DED JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x1C39 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP1 REVERT JUMPDEST POP DUP1 REVERT JUMPDEST DUP4 DUP1 REVERT JUMPDEST POP SWAP2 CALLVALUE PUSH2 0x28D JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x28D JUMPI PUSH1 0x20 PUSH2 0x2B1 PUSH2 0x1C7C JUMP JUMPDEST PUSH1 0x64 PUSH2 0x2BB PUSH2 0x1C9F JUMP JUMPDEST SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP1 SWAP9 DUP8 MLOAD SWAP10 DUP11 SWAP7 DUP8 SWAP6 PUSH32 0x927DA10500000000000000000000000000000000000000000000000000000000 DUP8 MSTORE ADDRESS SWAP1 DUP8 ADD MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE AND PUSH1 0x44 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x383 JUMPI SWAP2 PUSH2 0x34A JUMPI JUMPDEST PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x37B JUMPI JUMPDEST DUP2 PUSH2 0x365 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP2 MLOAD SWAP1 PUSH2 0x340 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x358 JUMP JUMPDEST SWAP1 MLOAD SWAP1 RETURNDATASIZE SWAP1 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP2 SWAP4 SWAP1 POP CALLVALUE PUSH2 0x634 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x634 JUMPI PUSH2 0x3AA PUSH2 0x1C7C JUMP JUMPDEST SWAP2 PUSH2 0x3B3 PUSH2 0x1C9F JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP4 PUSH1 0x64 CALLDATALOAD SWAP2 PUSH1 0x84 CALLDATALOAD PUSH1 0xFF DUP2 AND DUP2 SUB PUSH2 0x630 JUMPI DUP4 TIMESTAMP GT PUSH2 0x605 JUMPI PUSH2 0x401 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH1 0x1 DUP3 ADD SWAP1 SSTORE SWAP1 JUMP JUMPDEST SWAP2 DUP7 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP8 AND SWAP6 DUP7 DUP12 DUP6 ADD MSTORE DUP9 DUP11 AND PUSH1 0x60 DUP6 ADD MSTORE DUP12 PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 MSTORE DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x5F2 JUMPI SWAP3 PUSH2 0x4DE SWAP3 PUSH2 0x4D5 SWAP3 DUP9 SWAP6 DUP12 MSTORE MLOAD SWAP1 KECCAK256 PUSH2 0x494 PUSH2 0x2181 JUMP JUMPDEST SWAP1 DUP11 MLOAD SWAP2 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x2 DUP4 ADD MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0xC4 CALLDATALOAD SWAP2 PUSH1 0x42 PUSH1 0xA4 CALLDATALOAD SWAP3 KECCAK256 PUSH2 0x24AC JUMP JUMPDEST SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x2546 JUMP JUMPDEST AND DUP2 DUP2 SUB PUSH2 0x5C5 JUMPI POP POP DUP6 DUP5 SWAP6 SWAP7 SWAP8 PUSH2 0x550 PUSH1 0x20 SWAP7 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP7 MSTORE DUP6 ADD PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 SWAP5 PUSH1 0x60 DUP3 ADD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP4 MSTORE AND PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x5BC JUMPI POP PUSH2 0x586 JUMPI POP DUP1 RETURN JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x5B4 JUMPI JUMPDEST DUP2 PUSH2 0x59F PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x28D JUMPI PUSH2 0x5B0 SWAP1 PUSH2 0x1F4D JUMP JUMPDEST POP DUP1 RETURN JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x592 JUMP JUMPDEST MLOAD RETURNDATASIZE DUP5 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH32 0x4B800E4600000000000000000000000000000000000000000000000000000000 DUP9 MSTORE DUP9 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 DUP7 REVERT JUMPDEST PUSH1 0x41 DUP13 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x24 DUP9 DUP6 DUP12 PUSH32 0x6279130200000000000000000000000000000000000000000000000000000000 DUP4 MSTORE MSTORE REVERT JUMPDEST DUP8 DUP1 REVERT JUMPDEST DUP3 DUP1 REVERT JUMPDEST POP POP SWAP2 CALLVALUE PUSH2 0x28D JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x28D JUMPI DUP1 MLOAD SWAP3 PUSH32 0xB45090F900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE ADDRESS SWAP1 DUP5 ADD MSTORE PUSH1 0x20 DUP4 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x383 JUMPI SWAP2 PUSH2 0x34A JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x1EFB JUMP JUMPDEST POP POP SWAP2 CALLVALUE PUSH2 0x28D JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x28D JUMPI DUP1 MLOAD SWAP3 PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE ADDRESS SWAP1 DUP5 ADD MSTORE DUP2 DUP4 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x383 JUMPI DUP1 SWAP3 PUSH2 0x76F JUMPI JUMPDEST DUP2 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 SWAP1 PUSH2 0x286 SWAP1 DUP3 ADD DUP7 PUSH2 0x1DED JUMP JUMPDEST SWAP1 SWAP2 POP RETURNDATASIZE DUP1 DUP3 DUP6 RETURNDATACOPY PUSH2 0x781 DUP2 DUP6 PUSH2 0x1CF2 JUMP JUMPDEST DUP4 ADD SWAP3 PUSH1 0x20 DUP2 DUP6 SUB SLT PUSH2 0x28D JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x28A JUMPI POP SWAP3 PUSH2 0x7B0 SWAP2 PUSH2 0x286 SWAP5 ADD PUSH2 0x1FA3 JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x75A JUMP JUMPDEST POP POP DUP3 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP2 DUP2 MLOAD SWAP3 DUP2 CALLDATALOAD PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x20 DUP5 MSTORE PUSH2 0x81A DUP5 PUSH2 0x1CC2 JUMP JUMPDEST DUP1 EXTCODESIZE ISZERO PUSH2 0x377 JUMPI PUSH2 0x889 PUSH0 SWAP5 SWAP2 DUP6 SWAP3 DUP6 MLOAD SWAP7 DUP8 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0xC808824700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH32 0x546573744576656E740000000000000000000000000000000000000000000000 DUP10 DUP5 ADD MSTORE DUP10 PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP1 PUSH2 0x1C39 JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x8C5 JUMPI PUSH2 0x89B JUMPI DUP4 DUP1 RETURN JUMPDEST SWAP1 SWAP2 SWAP3 POP PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x8B2 JUMPI POP MSTORE STOP JUMPDEST PUSH1 0x41 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 MLOAD PUSH32 0x67E0E07600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x24 SWAP1 PUSH0 DUP4 DUP4 DUP2 PUSH32 0x0 DUP9 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0xB5C JUMPI PUSH0 SWAP6 PUSH0 SWAP5 PUSH0 SWAP5 PUSH0 SWAP8 PUSH2 0xA08 JUMPI JUMPDEST POP POP POP SWAP1 PUSH2 0x980 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP2 MLOAD SWAP7 DUP8 SWAP7 PUSH1 0x80 DUP9 MSTORE PUSH1 0x80 DUP9 ADD SWAP1 PUSH2 0x1E20 JUMP JUMPDEST PUSH1 0x20 DUP8 DUP3 SUB DUP2 DUP10 ADD MSTORE DUP1 DUP1 DUP8 MLOAD SWAP4 DUP5 DUP2 MSTORE ADD SWAP7 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x9C4 JUMPI DUP10 DUP9 SUB DUP7 DUP12 ADD MSTORE DUP10 DUP1 PUSH2 0x286 DUP12 PUSH2 0x9B6 DUP13 DUP13 PUSH2 0x1DED JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x1DED JUMP JUMPDEST SWAP2 DUP5 SWAP9 SWAP10 POP PUSH1 0x60 DUP7 SWAP8 SWAP9 PUSH1 0x1 SWAP4 SWAP6 SWAP8 DUP4 SWAP8 MLOAD DUP1 MLOAD PUSH2 0x9E1 DUP2 PUSH2 0x1EDD JUMP JUMPDEST DUP4 MSTORE DUP7 DUP6 DUP3 ADD MLOAD AND DUP6 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO DUP10 DUP3 ADD MSTORE ADD SWAP9 ADD SWAP3 ADD DUP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 PUSH2 0x998 JUMP JUMPDEST SWAP5 POP SWAP5 POP SWAP5 POP SWAP5 POP RETURNDATASIZE DUP1 PUSH0 DUP6 RETURNDATACOPY PUSH2 0xA1F DUP2 DUP6 PUSH2 0x1CF2 JUMP JUMPDEST DUP4 ADD SWAP3 PUSH1 0x80 DUP2 DUP6 SUB SLT PUSH2 0x377 JUMPI DUP1 MLOAD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP2 GT PUSH2 0x377 JUMPI DUP2 PUSH2 0xA4C SWAP2 DUP5 ADD PUSH2 0x2085 JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP1 DUP5 ADD MLOAD DUP8 DUP2 GT PUSH2 0x377 JUMPI DUP5 ADD SWAP1 DUP4 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x377 JUMPI DUP2 MLOAD SWAP3 PUSH2 0xA74 DUP5 PUSH2 0x1D33 JUMP JUMPDEST SWAP10 PUSH2 0xA81 DUP9 MLOAD SWAP12 DUP13 PUSH2 0x1CF2 JUMP JUMPDEST DUP5 DUP12 MSTORE DUP3 DUP12 ADD SWAP2 DUP4 PUSH1 0x60 DUP1 SWAP8 MUL DUP7 ADD ADD SWAP5 DUP8 DUP7 GT PUSH2 0x377 JUMPI SWAP12 SWAP13 SWAP12 DUP5 ADD SWAP3 JUMPDEST DUP6 DUP5 LT PUSH2 0xAE9 JUMPI POP POP POP POP POP POP POP DUP3 DUP3 ADD MLOAD DUP6 DUP2 GT PUSH2 0x377 JUMPI DUP2 PUSH2 0xAC5 SWAP2 DUP5 ADD PUSH2 0x1FA3 JUMP JUMPDEST SWAP5 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x377 JUMPI PUSH2 0xADC SWAP3 ADD PUSH2 0x1FA3 JUMP JUMPDEST SWAP2 SWAP5 SWAP3 SWAP2 SWAP4 DUP7 DUP1 DUP1 PUSH2 0x961 JUMP JUMPDEST DUP7 DUP5 SWAP14 SWAP15 SWAP14 DUP10 SUB SLT PUSH2 0x377 JUMPI DUP10 MLOAD SWAP1 DUP8 DUP3 ADD DUP14 DUP2 GT DUP4 DUP3 LT OR PUSH2 0xB4A JUMPI DUP12 MSTORE DUP5 MLOAD SWAP1 PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x377 JUMPI DUP16 SWAP2 DUP4 MSTORE DUP7 DUP7 ADD MLOAD SWAP2 DUP3 AND DUP3 SUB PUSH2 0x377 JUMPI DUP3 DUP8 SWAP3 DUP4 DUP12 SWAP6 ADD MSTORE PUSH2 0xB38 DUP14 DUP9 ADD PUSH2 0x1F4D JUMP JUMPDEST DUP14 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP4 ADD SWAP3 SWAP13 SWAP12 SWAP13 PUSH2 0xAA0 JUMP JUMPDEST DUP4 PUSH1 0x41 DUP7 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH2 0xB81 PUSH2 0x1C7C JUMP JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x44 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x377 JUMPI PUSH2 0xBA2 SWAP1 CALLDATASIZE SWAP1 DUP6 ADD PUSH2 0x1D4B JUMP JUMPDEST SWAP2 PUSH1 0x64 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x377 JUMPI PUSH2 0xBBA SWAP1 CALLDATASIZE SWAP1 DUP7 ADD PUSH2 0x1D4B JUMP JUMPDEST POP PUSH1 0x84 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x377 JUMPI PUSH2 0x278 PUSH2 0xBDB PUSH2 0xC01 SWAP6 PUSH2 0x286 SWAP5 CALLDATASIZE SWAP2 ADD PUSH2 0x1E69 JUMP JUMPDEST SWAP2 PUSH2 0xBE6 DUP6 MLOAD PUSH2 0x2004 JUMP JUMPDEST DUP2 MLOAD SWAP7 DUP8 SWAP7 PUSH1 0x24 CALLDATALOAD DUP9 MSTORE PUSH1 0x80 PUSH1 0x20 DUP10 ADD MSTORE PUSH1 0x80 DUP9 ADD SWAP1 PUSH2 0x1DED JUMP JUMPDEST SWAP2 DUP7 DUP4 SUB SWAP1 DUP8 ADD MSTORE PUSH2 0x1DED JUMP JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 MLOAD SWAP2 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH0 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xCF2 JUMPI PUSH0 SWAP2 PUSH2 0xCAE JUMPI JUMPDEST PUSH2 0x286 SWAP3 POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1E20 JUMP JUMPDEST SWAP1 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0xCBF DUP2 DUP5 PUSH2 0x1CF2 JUMP JUMPDEST DUP3 ADD SWAP2 PUSH1 0x20 DUP2 DUP5 SUB SLT PUSH2 0x377 JUMPI DUP1 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP5 GT PUSH2 0x377 JUMPI PUSH2 0x286 SWAP4 PUSH2 0xCEC SWAP3 ADD PUSH2 0x2085 JUMP JUMPDEST SWAP1 PUSH2 0xC97 JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 PUSH2 0xD79 SWAP3 PUSH2 0xD1B PUSH2 0x1C7C JUMP JUMPDEST DUP4 MLOAD PUSH32 0xBEABACC800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xB5C JUMPI PUSH2 0xDCA JUMPI JUMPDEST PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xDFC JUMPI JUMPDEST DUP2 PUSH2 0xDE3 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x377 JUMPI PUSH2 0xDF6 PUSH1 0x20 SWAP3 PUSH2 0x1F4D JUMP JUMPDEST POP PUSH2 0xDC0 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xDD6 JUMP JUMPDEST DUP5 DUP4 CALLVALUE PUSH2 0x377 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x377 JUMPI PUSH2 0xE34 SWAP2 CALLDATASIZE SWAP2 ADD PUSH2 0x1D4B JUMP JUMPDEST SWAP1 PUSH1 0x2 PUSH1 0x24 CALLDATALOAD LT ISZERO PUSH2 0x377 JUMPI PUSH2 0xE4B PUSH1 0x20 SWAP3 PUSH2 0x2053 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP5 DUP4 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP2 MLOAD SWAP2 DUP3 PUSH0 DUP4 SLOAD PUSH2 0xE74 DUP2 PUSH2 0x1F15 JUMP JUMPDEST SWAP1 DUP2 DUP5 MSTORE PUSH1 0x20 SWAP6 PUSH1 0x1 SWAP2 DUP8 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0xF13 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xEB7 JUMPI JUMPDEST POP POP POP PUSH2 0x286 SWAP3 SWAP2 PUSH2 0xEA8 SWAP2 SUB DUP6 PUSH2 0x1CF2 JUMP JUMPDEST MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1C39 JUMP JUMPDEST PUSH0 SWAP1 DUP2 MSTORE DUP7 SWAP4 POP SWAP2 SWAP1 PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B JUMPDEST DUP3 DUP5 LT PUSH2 0xEFB JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0xEA8 PUSH2 0x286 PUSH2 0xE95 JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0xEE2 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 DUP3 ADD MSTORE SWAP4 ISZERO ISZERO PUSH1 0x5 SHL DUP7 ADD SWAP1 SWAP4 ADD SWAP4 POP DUP5 SWAP3 POP PUSH2 0xEA8 SWAP2 POP PUSH2 0x286 SWAP1 POP PUSH2 0xE95 JUMP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST DUP5 DUP4 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP1 SWAP2 SUB PUSH2 0x377 JUMPI DUP3 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 PUSH32 0x0 DUP4 MSTORE DUP5 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD SWAP3 DUP2 DUP5 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT OR PUSH2 0x8B2 JUMPI POP DUP3 PUSH1 0x20 SWAP5 MSTORE MLOAD SWAP1 KECCAK256 DUP2 MSTORE RETURN JUMPDEST SWAP3 POP POP CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH2 0x107A PUSH32 0x0 PUSH2 0x22B9 JUMP JUMPDEST SWAP3 PUSH2 0x10A4 PUSH32 0x0 PUSH2 0x23EE JUMP JUMPDEST DUP2 MLOAD SWAP3 PUSH1 0x20 DUP5 ADD SWAP1 DUP5 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x8B2 JUMPI POP SWAP2 PUSH2 0x1115 SWAP2 PUSH2 0x286 SWAP5 SWAP4 DUP3 MSTORE PUSH0 DUP5 MSTORE PUSH2 0x1108 DUP3 MLOAD SWAP8 DUP9 SWAP8 PUSH32 0xF00000000000000000000000000000000000000000000000000000000000000 DUP10 MSTORE DUP1 PUSH1 0x20 DUP11 ADD MSTORE DUP9 ADD SWAP1 PUSH2 0x1C39 JUMP JUMPDEST SWAP2 DUP7 DUP4 SUB SWAP1 DUP8 ADD MSTORE PUSH2 0x1C39 JUMP JUMPDEST SWAP1 CHAINID PUSH1 0x60 DUP6 ADD MSTORE ADDRESS PUSH1 0x80 DUP6 ADD MSTORE PUSH0 PUSH1 0xA0 DUP6 ADD MSTORE DUP4 DUP3 SUB PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x1DED JUMP JUMPDEST SWAP3 POP POP CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP3 MLOAD PUSH32 0xF29486A100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE PUSH2 0x1A0 SWAP3 DUP4 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x132E JUMPI PUSH0 SWAP5 PUSH2 0x11D9 JUMPI JUMPDEST DUP6 DUP6 PUSH1 0x60 DUP3 DUP3 ADD MLOAD SWAP2 ADD MLOAD DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST SWAP1 SWAP2 DUP1 SWAP4 SWAP5 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1327 JUMPI JUMPDEST PUSH2 0x11F2 DUP2 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SWAP3 DUP2 DUP5 SLT PUSH2 0x377 JUMPI DUP6 MLOAD SWAP5 PUSH2 0x140 SWAP5 DUP6 DUP8 ADD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP9 DUP5 LT DUP4 DUP6 GT OR PUSH2 0x1314 JUMPI PUSH1 0x80 SGT PUSH2 0x377 JUMPI PUSH2 0x1C0 DUP9 ADD SWAP2 DUP3 GT DUP4 DUP4 LT OR PUSH2 0x8B2 JUMPI POP DUP8 MSTORE PUSH2 0x1240 DUP3 PUSH2 0x1F4D JUMP JUMPDEST DUP2 MSTORE PUSH2 0x124E PUSH1 0x20 DUP4 ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP1 PUSH2 0x160 SWAP2 DUP3 DUP9 ADD MSTORE PUSH2 0x1262 DUP9 DUP5 ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP4 PUSH2 0x180 SWAP5 DUP6 DUP10 ADD MSTORE PUSH2 0x1277 PUSH1 0x60 DUP6 ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP1 DUP9 ADD MSTORE DUP7 MSTORE PUSH1 0x80 DUP3 ADD MLOAD PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0xA0 DUP3 ADD MLOAD DUP8 DUP8 ADD MSTORE PUSH1 0xC0 DUP3 ADD MLOAD PUSH1 0x60 DUP8 ADD MSTORE DUP4 DUP3 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x377 JUMPI PUSH1 0x80 DUP8 ADD MSTORE PUSH2 0x100 SWAP1 DUP2 DUP4 ADD MLOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x377 JUMPI PUSH2 0x1307 SWAP6 PUSH2 0x12FD SWAP3 PUSH1 0xA0 DUP11 ADD MSTORE PUSH2 0x12F2 PUSH2 0x120 SWAP9 PUSH2 0x12E6 DUP11 DUP9 ADD PUSH2 0x1F4D JUMP JUMPDEST PUSH1 0xC0 DUP13 ADD MSTORE DUP7 ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP1 DUP10 ADD MSTORE DUP4 ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP1 DUP7 ADD MSTORE ADD PUSH2 0x1F4D JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE PUSH0 DUP1 DUP1 DUP1 PUSH2 0x11C2 JUMP JUMPDEST PUSH1 0x41 DUP3 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP RETURNDATASIZE PUSH2 0x11E8 JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x136A PUSH2 0x1C7C JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP5 DUP4 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x3 NOT SWAP3 PUSH1 0x20 DUP5 CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP2 CALLDATALOAD SWAP4 PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT PUSH2 0x377 JUMPI DUP5 CALLDATASIZE SUB ADD SLT PUSH2 0x377 JUMPI DUP3 DUP2 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x377 JUMPI PUSH2 0x13C2 DUP2 PUSH2 0x1EDD JUMP JUMPDEST PUSH2 0x13EC JUMPI POP PUSH8 0xDE0B6B3A7640000 PUSH2 0x13E3 PUSH1 0x20 SWAP4 PUSH1 0x24 PUSH1 0x5 SLOAD SWAP2 ADD CALLDATALOAD PUSH2 0x2103 JUMP JUMPDEST DIV SWAP1 JUMPDEST MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP2 PUSH1 0x24 ADD CALLDATALOAD PUSH1 0x5 SLOAD SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x1433 JUMPI DUP2 ISZERO PUSH2 0x1420 JUMPI PUSH1 0x20 SWAP4 POP DIV SWAP1 PUSH2 0x13E6 JUMP JUMPDEST PUSH1 0x12 DUP5 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x11 DUP5 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP5 DUP4 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP3 PUSH2 0x1464 PUSH2 0x1C7C JUMP JUMPDEST PUSH1 0x44 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP6 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP4 PUSH32 0xF7888AEC00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS SWAP1 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xB5C JUMPI PUSH0 SWAP3 PUSH2 0x14EB JUMPI JUMPDEST POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP DUP3 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1513 JUMPI JUMPDEST PUSH2 0x1503 DUP2 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x377 JUMPI MLOAD SWAP1 DUP4 PUSH2 0x14E4 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x14F9 JUMP JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x6 SLOAD DUP1 PUSH2 0x15EA JUMPI POP DUP1 MLOAD SWAP2 PUSH32 0x4F037EE700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0xB5C JUMPI PUSH0 SWAP1 PUSH2 0x15B7 JUMPI JUMPDEST PUSH1 0x20 SWAP3 POP SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E2 JUMPI JUMPDEST DUP2 PUSH2 0x15D1 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP2 MLOAD PUSH2 0x15AC JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x15C4 JUMP JUMPDEST PUSH1 0x20 SWAP3 POP SWAP1 PUSH2 0x13E6 JUMP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH8 0xDE0B6B3A7640000 DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI CALLDATALOAD PUSH1 0x5 SSTORE STOP JUMPDEST CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI CALLER PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD SWAP1 SWAP2 SSTORE STOP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH2 0x1689 CALLDATASIZE PUSH2 0x1DAB JUMP JUMPDEST SWAP4 SWAP2 SWAP5 PUSH2 0x1694 PUSH2 0x2116 JUMP JUMPDEST MLOAD SWAP4 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP5 AND SWAP3 LOG3 STOP JUMPDEST DUP3 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI CALLDATALOAD PUSH1 0x6 SSTORE STOP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 PUSH2 0xE4B PUSH2 0x2181 JUMP JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 MLOAD SWAP2 PUSH32 0x7E361BDE00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH0 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xCF2 JUMPI PUSH0 SWAP2 PUSH2 0x178A JUMPI JUMPDEST PUSH2 0x286 SWAP3 POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1DED JUMP JUMPDEST SWAP1 POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0x179B DUP2 DUP5 PUSH2 0x1CF2 JUMP JUMPDEST DUP3 ADD SWAP1 DUP1 DUP4 DUP4 SUB SLT PUSH2 0x377 JUMPI DUP3 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP2 GT PUSH2 0x377 JUMPI DUP4 PUSH2 0x17C7 SWAP2 DUP4 ADD PUSH2 0x1FA3 JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP3 ADD MLOAD SWAP5 DUP6 GT PUSH2 0x377 JUMPI PUSH2 0x286 SWAP5 PUSH2 0x17E2 SWAP3 ADD PUSH2 0x1FA3 JUMP JUMPDEST POP PUSH2 0x1773 JUMP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE RETURN JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH17 0x1D6329F1C35CA4BFABB9F5610000000000 DUP2 MSTORE RETURN JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH2 0x1689 CALLDATASIZE PUSH2 0x1DAB JUMP JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH0 PUSH1 0x84 PUSH2 0x18AF CALLDATASIZE PUSH2 0x1DAB JUMP JUMPDEST DUP7 MLOAD PUSH32 0x15DACBEA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP9 DUP2 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x24 DUP10 ADD MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP9 ADD MSTORE PUSH1 0x64 DUP8 ADD MSTORE DUP6 SWAP3 DUP4 SWAP2 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xB5C JUMPI PUSH2 0xDCA JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 MLOAD SWAP2 PUSH32 0xE4DC2AA400000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xCF2 JUMPI PUSH0 SWAP2 PUSH2 0x34A JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x377 JUMPI PUSH2 0x1A06 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x1D4B JUMP JUMPDEST SWAP1 PUSH2 0x1A3D PUSH2 0x1A20 PUSH2 0x1A16 DUP5 PUSH2 0x2053 JUMP JUMPDEST SWAP4 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1F5A JUMP JUMPDEST MLOAD PUSH8 0xDE0B6B3A7640000 PUSH2 0x1A36 PUSH1 0x44 CALLDATALOAD DUP7 PUSH2 0x2103 JUMP JUMPDEST DIV SWAP1 PUSH2 0x1F82 JUMP JUMPDEST SWAP2 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x1A51 JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x11 DUP4 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP3 DUP6 CALLVALUE PUSH2 0x377 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 PUSH2 0xD79 SWAP3 PUSH2 0x1A84 PUSH2 0x1C7C JUMP JUMPDEST DUP4 MLOAD PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST DUP5 CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI DUP1 MLOAD PUSH1 0x3 SLOAD SWAP1 SWAP2 DUP3 PUSH0 PUSH2 0x1B05 DUP5 PUSH2 0x1F15 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 SWAP5 PUSH1 0x1 SWAP1 DUP7 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x1B92 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1B37 JUMPI JUMPDEST POP POP PUSH2 0x286 SWAP3 SWAP2 PUSH2 0xEA8 SWAP2 SUB DUP6 PUSH2 0x1CF2 JUMP JUMPDEST SWAP1 DUP6 SWAP3 POP PUSH1 0x3 PUSH0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP2 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x1B7A JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0xEA8 PUSH2 0x1B25 JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x1B64 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 DUP3 ADD MSTORE SWAP3 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD SWAP1 SWAP3 ADD SWAP3 POP DUP4 SWAP2 POP PUSH2 0xEA8 SWAP1 POP PUSH2 0x1B25 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x377 JUMPI PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP3 EQ DUP2 MSTORE RETURN JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x377 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x377 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1CDE JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1CDE JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1CDE JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x377 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x1D65 DUP2 PUSH2 0x1D33 JUMP JUMPDEST SWAP4 PUSH2 0x1D73 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x377 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1D9C JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1D8E JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x377 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x377 JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x377 JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1E0C JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1DFE JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1E3F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1E31 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x377 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x1CDE JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x1EBC PUSH1 0x20 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F DUP7 ADD AND ADD DUP6 PUSH2 0x1CF2 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x377 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x1EE7 JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x377 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x377 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x1F43 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x1F2F JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x1F24 JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x377 JUMPI JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x1F6E JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x1F8F JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x377 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x1FBE DUP2 PUSH2 0x1D33 JUMP JUMPDEST SWAP4 PUSH2 0x1FCC PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x377 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1FF5 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1FE7 JUMP JUMPDEST SWAP1 PUSH2 0x200E DUP3 PUSH2 0x1D33 JUMP JUMPDEST PUSH2 0x201B PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x1CF2 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x2049 DUP3 SWAP5 PUSH2 0x1D33 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST PUSH0 SWAP1 DUP2 JUMPDEST DUP2 MLOAD DUP4 LT ISZERO PUSH2 0x207F JUMPI PUSH2 0x2077 PUSH1 0x1 SWAP2 PUSH2 0x2070 DUP6 DUP6 PUSH2 0x1F5A JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x1F82 JUMP JUMPDEST SWAP3 ADD SWAP2 PUSH2 0x2057 JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x377 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x20A0 DUP2 PUSH2 0x1D33 JUMP JUMPDEST SWAP4 PUSH2 0x20AE PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1CF2 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x377 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x20D7 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x377 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x20C9 JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x1F8F JUMPI JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x2155 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND ADDRESS EQ DUP1 PUSH2 0x2290 JUMPI JUMPDEST ISZERO PUSH2 0x21E9 JUMPI PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP3 MSTORE PUSH32 0x0 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1CDE JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST POP PUSH32 0x0 CHAINID EQ PUSH2 0x21C0 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x230D JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x22E5 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x22DB DUP4 PUSH2 0x1CC2 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH32 0xB3512B0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH0 SLOAD SWAP2 PUSH2 0x231F DUP4 PUSH2 0x1F15 JUMP JUMPDEST DUP1 DUP4 MSTORE SWAP3 PUSH1 0x20 SWAP1 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x23AB JUMPI POP PUSH1 0x1 EQ PUSH2 0x234D JUMPI JUMPDEST POP POP PUSH2 0x234A SWAP3 POP SUB DUP3 PUSH2 0x1CF2 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x2393 JUMPI POP PUSH2 0x234A SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x233C JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x2378 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 SWAP4 POP PUSH2 0x234A SWAP6 SWAP3 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP2 POP AND DUP3 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x233C JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x2410 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x22E5 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x22DB DUP4 PUSH2 0x1CC2 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD PUSH2 0x2425 DUP2 PUSH2 0x1F15 JUMP JUMPDEST DUP1 DUP5 MSTORE SWAP4 PUSH1 0x20 SWAP2 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x23AB JUMPI POP PUSH1 0x1 EQ PUSH2 0x244D JUMPI POP POP PUSH2 0x234A SWAP3 POP SUB DUP3 PUSH2 0x1CF2 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x2494 JUMPI POP PUSH2 0x234A SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x233C JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x2479 JUMP JUMPDEST SWAP2 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP5 GT PUSH2 0x253B JUMPI SWAP2 PUSH1 0x20 SWAP4 PUSH1 0x80 SWAP3 PUSH1 0xFF PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND DUP7 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE DUP3 DUP1 MSTORE PUSH1 0x1 GAS STATICCALL ISZERO PUSH2 0x2530 JUMPI PUSH0 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x2526 JUMPI SWAP1 PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 PUSH1 0x1 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP POP POP PUSH0 SWAP2 PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x1EE7 JUMPI DUP1 PUSH2 0x2558 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x2588 JUMPI PUSH32 0xF645EEDF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x25BC JUMPI POP PUSH32 0xFCE698F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x3 EQ PUSH2 0x25C6 JUMPI POP JUMP JUMPDEST PUSH32 0xD78BCE0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP3 PUSH17 0xFFDBAF10EA7F58C363D8BE9A2C4C00434 PUSH32 0xC566ABC9496FCFEB9B56B86D64736F6C634300081B0033A26469706673582212 KECCAK256 SWAP6 0x25 DUP1 0xAD ORIGIN 0xDB PUSH13 0x485E840C53347AE69EE697F8A3 PUSH20 0xD5EF4F44D2CE17150F5D3A64736F6C634300081B STOP CALLER PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x15 JUMPI PUSH2 0x822 SWAP1 DUP2 PUSH2 0x1A DUP3 CODECOPY RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x136DEB1C EQ PUSH2 0x3B6 JUMPI DUP1 PUSH4 0xA3AEF0B8 EQ PUSH2 0x39E JUMPI PUSH4 0xBB4AD7D5 EQ PUSH2 0x3C JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x36F JUMPI PUSH1 0x20 SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x36F JUMPI DUP1 CALLDATALOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP6 GT PUSH2 0x36F JUMPI CALLDATASIZE PUSH1 0x23 DUP7 ADD SLT ISZERO PUSH2 0x36F JUMPI DUP5 DUP4 ADD CALLDATALOAD PUSH1 0x24 SWAP6 PUSH2 0xA4 PUSH2 0x9F DUP4 PUSH2 0x5FE JUMP JUMPDEST PUSH2 0x58D JUMP JUMPDEST SWAP4 DUP7 DUP6 DUP5 DUP2 MSTORE ADD SWAP1 DUP9 DUP3 SWAP5 PUSH1 0x7 SHL DUP5 ADD ADD SWAP3 CALLDATASIZE DUP5 GT PUSH2 0x36F JUMPI SWAP5 SWAP8 SWAP5 DUP10 ADD SWAP2 JUMPDEST DUP4 DUP4 LT PUSH2 0x2E6 JUMPI POP POP POP POP PUSH0 SWAP2 JUMPDEST DUP4 MLOAD SWAP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 DUP8 DUP2 ADD SWAP1 DUP2 GT PUSH2 0x2BB JUMPI DUP5 LT ISZERO PUSH2 0x20C JUMPI PUSH0 JUMPDEST PUSH2 0x115 DUP6 DUP8 MLOAD PUSH2 0x6D3 JUMP JUMPDEST DUP9 DUP2 ADD SWAP1 DUP2 GT PUSH2 0x1E1 JUMPI DUP2 LT ISZERO PUSH2 0x1D3 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH2 0x146 DUP4 DUP10 PUSH2 0x70D JUMP JUMPDEST MLOAD MLOAD AND PUSH1 0x1 DUP4 ADD SWAP2 DUP3 DUP5 GT PUSH2 0x1A8 JUMPI SWAP1 DUP3 SWAP2 PUSH2 0x165 PUSH1 0x1 SWAP6 SWAP5 DUP12 PUSH2 0x70D JUMP JUMPDEST MLOAD MLOAD AND LT PUSH2 0x175 JUMPI JUMPDEST POP ADD PUSH2 0x10A JUMP JUMPDEST PUSH2 0x17F DUP2 DUP10 PUSH2 0x70D JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x196 PUSH2 0x18E DUP5 DUP12 PUSH2 0x70D JUMP JUMPDEST MLOAD SWAP2 DUP11 PUSH2 0x70D JUMP JUMPDEST MSTORE PUSH2 0x1A1 DUP3 DUP10 PUSH2 0x70D JUMP JUMPDEST MSTORE PUSH0 PUSH2 0x16E JUMP JUMPDEST DUP12 PUSH1 0x11 DUP12 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST POP SWAP6 POP PUSH1 0x1 SWAP1 SWAP3 ADD SWAP2 PUSH2 0xD2 JUMP JUMPDEST DUP10 PUSH1 0x11 DUP10 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP1 MLOAD DUP3 DUP2 MSTORE DUP6 MLOAD DUP2 DUP5 ADD DUP2 SWAP1 MSTORE SWAP1 SWAP3 DUP4 DUP4 ADD SWAP3 PUSH0 SWAP1 DUP10 SWAP1 DUP13 JUMPDEST DUP6 DUP5 LT PUSH2 0x232 JUMPI DUP8 DUP8 SUB DUP9 RETURN JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP5 SWAP6 DUP9 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP8 DUP3 ADD MLOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x290 JUMPI DUP9 DUP5 ADD MSTORE DUP5 DUP3 ADD MLOAD AND DUP5 DUP4 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 ADD MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE SWAP8 DUP6 ADD SWAP8 PUSH1 0x80 ADD SWAP6 SWAP5 SWAP4 PUSH1 0x1 ADD SWAP3 SWAP2 SWAP1 PUSH2 0x225 JUMP JUMPDEST DUP5 PUSH1 0x21 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST DUP9 PUSH1 0x11 DUP9 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH1 0x80 SWAP9 SWAP6 SWAP9 SWAP1 DUP2 DUP5 CALLDATASIZE SUB SLT PUSH2 0x36F JUMPI DUP7 MLOAD SWAP2 DUP3 ADD DUP3 DUP2 LT DUP5 DUP3 GT OR PUSH2 0x373 JUMPI DUP8 MSTORE PUSH2 0x310 DUP5 PUSH2 0x616 JUMP JUMPDEST DUP3 MSTORE DUP10 DUP5 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x36F JUMPI DUP11 DUP4 ADD MSTORE DUP7 DUP5 ADD CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x36F JUMPI DUP8 DUP4 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 DUP6 ADD CALLDATALOAD SWAP3 DUP4 ISZERO ISZERO DUP5 SUB PUSH2 0x36F JUMPI PUSH1 0x80 SWAP4 DUP13 SWAP4 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP2 SWAP8 SWAP5 SWAP8 PUSH2 0xC4 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP12 PUSH1 0x41 DUP12 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x36F JUMPI PUSH2 0x3B4 PUSH2 0x3AF CALLDATASIZE PUSH2 0x637 JUMP JUMPDEST PUSH2 0x74E JUMP JUMPDEST STOP JUMPDEST POP SWAP1 CALLVALUE PUSH2 0x36F JUMPI PUSH2 0x3C6 CALLDATASIZE PUSH2 0x637 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP4 MLOAD SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP2 ADD SWAP1 DUP2 GT PUSH2 0x561 JUMPI DUP3 LT ISZERO PUSH2 0x506 JUMPI PUSH0 JUMPDEST PUSH2 0x40C DUP4 DUP8 MLOAD PUSH2 0x6D3 JUMP JUMPDEST DUP6 DUP2 ADD SWAP1 DUP2 GT PUSH2 0x4DA JUMPI DUP2 LT ISZERO PUSH2 0x4CF JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH2 0x43D DUP4 DUP10 PUSH2 0x70D JUMP JUMPDEST MLOAD AND PUSH1 0x1 DUP4 ADD SWAP1 DUP2 DUP5 GT PUSH2 0x4A3 JUMPI SWAP1 DUP3 SWAP2 PUSH1 0x1 SWAP5 SWAP4 PUSH2 0x45C DUP4 DUP13 PUSH2 0x70D JUMP JUMPDEST MLOAD AND LT PUSH2 0x46C JUMPI JUMPDEST POP POP ADD PUSH2 0x401 JUMP JUMPDEST PUSH2 0x490 DUP3 PUSH2 0x47A DUP4 DUP13 PUSH2 0x70D JUMP JUMPDEST MLOAD AND SWAP3 PUSH2 0x487 DUP6 DUP13 PUSH2 0x70D JUMP JUMPDEST MLOAD AND SWAP2 DUP11 PUSH2 0x70D JUMP JUMPDEST MSTORE PUSH2 0x49B DUP3 DUP10 PUSH2 0x70D JUMP JUMPDEST MSTORE PUSH0 DUP1 PUSH2 0x464 JUMP JUMPDEST PUSH1 0x11 DUP8 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP3 POP PUSH1 0x1 ADD PUSH2 0x3C9 JUMP JUMPDEST PUSH1 0x11 DUP6 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP5 SWAP1 DUP1 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x20 DUP1 DUP6 ADD SWAP2 DUP2 DUP7 MSTORE DUP5 MLOAD DUP1 SWAP4 MSTORE DUP6 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x534 JUMPI POP POP POP POP SUB SWAP1 RETURN JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE DUP7 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x525 JUMP JUMPDEST PUSH1 0x11 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x1F PUSH1 0x40 MLOAD SWAP4 ADD AND DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x5D1 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x5D1 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x36F JUMPI JUMP JUMPDEST PUSH1 0x20 DUP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC DUP4 ADD SLT PUSH2 0x36F JUMPI PUSH1 0x4 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x36F JUMPI DUP1 PUSH1 0x23 DUP5 ADD SLT ISZERO PUSH2 0x36F JUMPI DUP3 PUSH1 0x4 ADD CALLDATALOAD PUSH2 0x691 PUSH2 0x9F DUP3 PUSH2 0x5FE JUMP JUMPDEST SWAP4 PUSH1 0x24 PUSH1 0x20 DUP7 DUP5 DUP2 MSTORE ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x36F JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x6BC JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 DUP1 SWAP2 PUSH2 0x6C8 DUP5 PUSH2 0x616 JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x6AE JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x6E0 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x721 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD PUSH1 0x2 DUP2 LT PUSH2 0x7E8 JUMPI ISZERO PUSH2 0x721 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x1 DUP1 SWAP4 PUSH1 0x1 SWAP2 JUMPDEST PUSH2 0x78D JUMPI JUMPDEST POP POP POP POP POP JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x7E3 JUMPI DUP4 SWAP3 DUP4 PUSH2 0x7A3 DUP5 DUP5 PUSH2 0x70D JUMP JUMPDEST MLOAD AND SWAP5 DUP6 SWAP2 AND GT PUSH2 0x7BB JUMPI DUP5 DUP1 SWAP5 SWAP3 ADD SWAP2 SWAP3 SWAP4 PUSH2 0x781 JUMP JUMPDEST PUSH32 0x6E8F194700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x786 JUMP JUMPDEST POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDB 0xD8 DUP3 DUP2 0xEA 0x25 0x2E CALLER DUP14 DUP12 0x2A 0xD5 SAR PUSH23 0x1148C738C6B36F19880627291D371B3BC04464736F6C63 NUMBER STOP ADDMOD SHL STOP CALLER ","sourceMap":"2335:29970:94:-:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3400:40:73;2335:29970:94;;;;;:::i;:::-;;;;-1:-1:-1;;;2335:29970:94;;;;3400:40:73;:::i;:::-;;;3501:47;2335:29970:94;;;;;:::i;:::-;;;;-1:-1:-1;;;2335:29970:94;;;;3501:47:73;:::i;:::-;;;3601:41;2335:29970:94;;;;;:::i;:::-;;;;-1:-1:-1;;;2335:29970:94;;;;3601:41:73;:::i;:::-;;;;;;3703:48;2335:29970:94;;;;;:::i;:::-;;;;-1:-1:-1;;;2335:29970:94;;;;3703:48:73;:::i;:::-;;;;;;3802:39;2335:29970:94;;;;;:::i;:::-;;;;-1:-1:-1;;;2335:29970:94;;;;3802:39:73;:::i;:::-;;;;;;2335:29970:94;;;;;;3414:22:68;;;;;;;;;;;;;;;;;;-1:-1:-1;3414:22:68;;;-1:-1:-1;3449:4:68;;;2335:29970:94;;3406:48:68;3402:117;;2335:29970:94;;3541:29:68;;;;;;;;;;;;;;;-1:-1:-1;3541:29:68;;;-1:-1:-1;3449:4:68;;2335:29970:94;;3533:55:68;3529:131;;3670:32;;;;2335:29970:94;;;-1:-1:-1;;;;;;2335:29970:94;;;;;;;;;-1:-1:-1;;;3796:60:68;;;2335:29970:94;;;;;3796:60:68;2335:29970:94;3796:60:68;;;;;;;;-1:-1:-1;3796:60:68;;;-1:-1:-1;;3769:87:68;;;;2335:29970:94;;-1:-1:-1;;;3895:62:68;;;2335:29970:94;;3895:62:68;2335:29970:94;3895:62:68;2335:29970:94;3895:62:68;;;;;;;;-1:-1:-1;3895:62:68;;;-1:-1:-1;;3866:91:68;;;;2335:29970:94;;-1:-1:-1;;;3995:61:68;;2335:29970:94;3866:91:68;;;;;2335:29970:94;3866:91:68;2335:29970:94;;3995:61:68;;;;;;;;;;-1:-1:-1;3995:61:68;;;-1:-1:-1;;3967:89:68;;;;2335:29970:94;-1:-1:-1;;;4091:60:68;;2335:29970:94;3967:89:68;;2335:29970:94;;3967:89:68;;2335:29970:94;;4091:60:68;;;;;;;;;;;;;-1:-1:-1;4091:60:68;;;-1:-1:-1;;4067:84:68;;2335:29970:94;-1:-1:-1;;;4184:59:68;;2335:29970:94;;;;;4184:59:68;;;;;;;-1:-1:-1;4184:59:68;;;-1:-1:-1;;4161:82:68;;2335:29970:94;;;-1:-1:-1;;;;;;2335:29970:94;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;3100:60;;;;2335:29970;3100:60;2335:29970;3100:60;;;;;;;;;;;-1:-1:-1;3100:60:94;;;-1:-1:-1;2335:29970:94;;;;3200:62;;;;;;;;;;;;;-1:-1:-1;3200:62:94;;;-1:-1:-1;2335:29970:94;;;;;;;;;;;;;;;;3291:85;;;;;;;2335:29970;3291:85;;;;;;;;;;;;;;;;;;;;;;;;3449:4:68;2335:29970:94;;;;;;;3291:85;;;-1:-1:-1;3291:85:94;;;;;;3272:104;;;;2335:29970;;3406:22;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3406:22:94;;;;;;3386:42;;;;2335:29970;;;;;;;;4067:84:68;2335:29970:94;;;;;4161:82:68;2335:29970:94;;;;;3400:40:73;2335:29970:94;;;;;;;;;;;;;;;;;;;;;;;;;3501:47:73;2335:29970:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3406:22;2335:29970;;-1:-1:-1;2335:29970:94;;;;;3406:22;2335:29970;;;;;-1:-1:-1;2335:29970:94;;;-1:-1:-1;2335:29970:94;3291:85;2335:29970;;;-1:-1:-1;2335:29970:94;;;;;3291:85;2335:29970;;;;;-1:-1:-1;2335:29970:94;;;-1:-1:-1;2335:29970:94;;;;;;;-1:-1:-1;2335:29970:94;;;-1:-1:-1;2335:29970:94;3200:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;2335:29970;;;-1:-1:-1;2335:29970:94;;;;;3100:60;;;;;;;;;;;;;;;:::i;:::-;;;;;;2335:29970;;;-1:-1:-1;2335:29970:94;;;;;4184:59:68;;;;;;;;;;;;;;;;:::i;:::-;;;2335:29970:94;;;;;4184:59:68;;;2335:29970:94;-1:-1:-1;2335:29970:94;;4184:59:68;;;;;;2335:29970:94;;;-1:-1:-1;2335:29970:94;;;;;4091:60:68;;;;;;;;;;;;;;;;;;:::i;:::-;;;2335:29970:94;;;;;;;;;;4091:60:68;;;;;;;;3995:61;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;2335:29970:94;;;-1:-1:-1;2335:29970:94;;;;;3895:62:68;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;3796:60;;;;;;;;;;;;;;;:::i;:::-;;;;;;2335:29970:94;;;-1:-1:-1;2335:29970:94;;;;;3529:131:68;3611:38;;;;-1:-1:-1;3611:38:68;-1:-1:-1;3611:38:68;3541:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;3402:117;3477:31;;;;-1:-1:-1;3477:31:68;-1:-1:-1;3477:31:68;3414:22;;;;;;;;;;;;;;:::i;:::-;;;;2335:29970:94;;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;2335:29970:94;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;:::o;9892:177:73:-;2335:29970:94;;;;;;:::i;:::-;;;;1461:67:47;2335:29970:94;;;;-1:-1:-1;;;2335:29970:94;;;;;1461:67:47;;;;;;2335:29970:94;;;;;;;;;;;;;;-1:-1:-1;;;2335:29970:94;;;;;;;;;;;;;;;-1:-1:-1;2335:29970:94;;;;1461:67:47;;;;;;;;;:::i;:::-;2335:29970:94;1451:78:47;;-1:-1:-1;;2335:29970:94;;;;;;;;;1432:103:47;2335:29970:94;1432:103:47;;2335:29970:94;;;;1432:103:47;;;;;:::i;:::-;2335:29970:94;;1405:144:47;;-1:-1:-1;;1405:170:47;;9892:177:73:o;2335:29970:94:-;;;;-1:-1:-1;2335:29970:94;;;;;-1:-1:-1;2335:29970:94"},"deployedBytecode":{"functionDebugData":{"abi_decode":{"entryPoint":5256,"id":null,"parameterSlots":2,"returnSlots":0},"abi_decode_address":{"entryPoint":1773,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":23557,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_addresst_array_contract_IERC20_dyn":{"entryPoint":10565,"id":null,"parameterSlots":1,"returnSlots":2},"abi_decode_addresst_bool":{"entryPoint":10852,"id":null,"parameterSlots":1,"returnSlots":2},"abi_decode_addresst_contract_IERC20":{"entryPoint":10967,"id":null,"parameterSlots":1,"returnSlots":2},"abi_decode_addresst_enum_Rounding":{"entryPoint":5044,"id":null,"parameterSlots":1,"returnSlots":2},"abi_decode_array_bool_dyn":{"entryPoint":14587,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_contract_IERC20_dyn":{"entryPoint":2394,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_contract_IRateProvider_dyn":{"entryPoint":14098,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_struct_TokenConfig_dyn_fromMemory":{"entryPoint":22938,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_struct_TokenInfo_dyn":{"entryPoint":3180,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn":{"entryPoint":3347,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn_fromMemory":{"entryPoint":27401,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dynt_uint256t_array_uint256_dynt_bytes_fromMemory":{"entryPoint":27568,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_available_length_bytes":{"entryPoint":2770,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_bool":{"entryPoint":3152,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bool_65800":{"entryPoint":3005,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bool_65801":{"entryPoint":3019,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bool_65802":{"entryPoint":3033,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bool_65803":{"entryPoint":3047,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bool_65839":{"entryPoint":3061,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bool_65840":{"entryPoint":3074,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bool_65841":{"entryPoint":3087,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bool_65842":{"entryPoint":3100,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bool_65843":{"entryPoint":3113,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bool_65844":{"entryPoint":3126,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bool_65845":{"entryPoint":3139,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":21731,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_boolt_array_uint256_dyn_fromMemory":{"entryPoint":35492,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_boolt_uint256_fromMemory":{"entryPoint":37746,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bytes":{"entryPoint":2824,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bytes_fromMemory":{"entryPoint":27498,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IERC20":{"entryPoint":1760,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_contract_IERC20t_addresst_uint256":{"entryPoint":1787,"id":null,"parameterSlots":1,"returnSlots":3},"abi_decode_contract_IERC20t_contract_IERC20t_uint256t_uint256":{"entryPoint":17725,"id":null,"parameterSlots":1,"returnSlots":4},"abi_decode_contract_IERC20t_int256":{"entryPoint":15373,"id":null,"parameterSlots":1,"returnSlots":2},"abi_decode_enum_AddLiquidityKind":{"entryPoint":3823,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_enum_RemoveLiquidityKind":{"entryPoint":7310,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_enum_SwapKind":{"entryPoint":2731,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_struct_AddLiquidityParams":{"entryPoint":3836,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_BufferWrapOrUnwrapParams":{"entryPoint":11092,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_struct_LiquidityManagement":{"entryPoint":13610,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_struct_PoolData":{"entryPoint":3443,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_PoolDatat_struct_AddLiquidityParamst_array_uint256_dyn":{"entryPoint":3980,"id":null,"parameterSlots":1,"returnSlots":3},"abi_decode_struct_PoolDatat_struct_RemoveLiquidityParamst_array_uint256_dyn":{"entryPoint":9502,"id":null,"parameterSlots":1,"returnSlots":3},"abi_decode_struct_RemoveLiquidityParams":{"entryPoint":7323,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_VaultSwapParams":{"entryPoint":2854,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_VaultSwapParamst_struct_SwapStatet_struct_PoolData":{"entryPoint":5702,"id":null,"parameterSlots":1,"returnSlots":3},"abi_decode_t_bool":{"entryPoint":3166,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_uint256_fromMemory":{"entryPoint":22362,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint256t_array_uint256_dynt_array_uint256_dynt_bytes_fromMemory":{"entryPoint":33769,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_uint256t_uint256t_uint256_fromMemory":{"entryPoint":23530,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_uint32":{"entryPoint":2519,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_uint32_65708":{"entryPoint":2500,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_uint40":{"entryPoint":13733,"id":null,"parameterSlots":0,"returnSlots":1},"abi_encode_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_address_66075":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_address_address_enum_AddLiquidityKind_array_uint256_dyn_array_uint256_dyn_uint256_array_uint256_dyn_bytes":{"entryPoint":43858,"id":null,"parameterSlots":9,"returnSlots":1},"abi_encode_address_address_enum_AddLiquidityKind_array_uint256_dyn_uint256_array_uint256_dyn_bytes":{"entryPoint":43553,"id":null,"parameterSlots":8,"returnSlots":1},"abi_encode_address_address_enum_RemoveLiquidityKind_uint256_array_uint256_dyn_array_uint256_dyn_array_uint256_dyn_bytes":{"entryPoint":35547,"id":null,"parameterSlots":9,"returnSlots":1},"abi_encode_address_address_enum_RemoveLiquidityKind_uint256_array_uint256_dyn_array_uint256_dyn_bytes":{"entryPoint":33132,"id":null,"parameterSlots":8,"returnSlots":1},"abi_encode_address_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_address_address_uint256_66165":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_address_address_uint256_66259":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_address_array_struct_TokenConfig_dyn_struct_PoolRoleAccounts_address_struct_LiquidityManagement":{"entryPoint":23389,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_address_array_uint256_dyn_uint256_array_uint256_dyn_bytes":{"entryPoint":27665,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_address_uint256_107575":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_address_uint256_array_uint256_dyn_array_uint256_dyn_bytes":{"entryPoint":33842,"id":null,"parameterSlots":6,"returnSlots":1},"abi_encode_array_contract_IERC20_dyn_storage":{"entryPoint":22617,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_struct_TokenConfig_dyn":{"entryPoint":7909,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_struct_TokenConfig_memory_ptr_dyn_memory_ptr":{"entryPoint":8020,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_struct_TokenInfo_dyn":{"entryPoint":4132,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":6490,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn_enum_Rounding":{"entryPoint":46154,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn_enum_Rounding_66285":{"entryPoint":46126,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn_to_array_uint256_dyn":{"entryPoint":4229,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn_uint256_bytes":{"entryPoint":13026,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_array_uint256_dyn_uint256_uint256":{"entryPoint":45766,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_bytes":{"entryPoint":12910,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bytes_memory_ptr":{"entryPoint":4471,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_contract_IERC20":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_contract_IERC20_uint256_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_enum_AddLiquidityKind":{"entryPoint":22136,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_enum_RemoveLiquidityKind":{"entryPoint":26715,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_enum_SwapKind":{"entryPoint":5854,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_struct_AddLiquidityParams":{"entryPoint":22149,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_AfterSwapParams":{"entryPoint":38005,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_LiquidityManagement":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_struct_PoolData":{"entryPoint":5081,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_PoolData_memory_ptr":{"entryPoint":4280,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_PoolRoleAccounts":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_struct_PoolSwapParams":{"entryPoint":5867,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_PoolSwapParams_memory_ptr":{"entryPoint":5977,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_RemoveLiquidityParams":{"entryPoint":26728,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_SwapState":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"abi_encode_uint256":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_uint256_address":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_uint256_address_address":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_uint256_array_uint256_dyn_array_uint256_dyn":{"entryPoint":27767,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_uint256_array_uint256_dyn_bytes":{"entryPoint":7434,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_uint256_uint256":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_uint256_uint256_65748":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_uint256_uint256_uint256":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_uint256_uint256_uint256_uint256":{"entryPoint":null,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_uint256_uint256_uint256_uint256_struct_VaultSwapParams_struct_SwapState_struct_PoolData":{"entryPoint":8117,"id":null,"parameterSlots":8,"returnSlots":1},"allocate_and_zero_memory_array_array_struct_TokenConfig_dyn":{"entryPoint":22860,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_and_zero_memory_array_array_struct_TokenInfo_dyn":{"entryPoint":47345,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_and_zero_memory_array_array_uint256_dyn":{"entryPoint":22503,"id":null,"parameterSlots":1,"returnSlots":1},"allocate_and_zero_memory_struct_struct_PoolData":{"entryPoint":22071,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_and_zero_memory_struct_struct_PoolRoleAccounts":{"entryPoint":23359,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_and_zero_memory_struct_struct_PoolSwapParams":{"entryPoint":22449,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_and_zero_memory_struct_struct_TokenConfig":{"entryPoint":22824,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory":{"entryPoint":2337,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_65710":{"entryPoint":2226,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_65717":{"entryPoint":2239,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_65793":{"entryPoint":2271,"id":null,"parameterSlots":0,"returnSlots":1},"allocate_memory_65838":{"entryPoint":2304,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_array_contract_IERC20_dyn":{"entryPoint":2370,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":2742,"id":null,"parameterSlots":1,"returnSlots":1},"array_dataslot_array_contract_IERC20_dyn_storage":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_int256":{"entryPoint":39046,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_uint256":{"entryPoint":27754,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_uint256_66237":{"entryPoint":27740,"id":null,"parameterSlots":1,"returnSlots":1},"checked_div_uint256":{"entryPoint":37330,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256":{"entryPoint":24675,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256_66287":{"entryPoint":24646,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_int256":{"entryPoint":37066,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_uint256":{"entryPoint":22436,"id":null,"parameterSlots":2,"returnSlots":1},"checked_sub_uint256_66057":{"entryPoint":22422,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_address":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_bool":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_uint32":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"cleanup_uint40":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"constant_AGGREGATE_YIELD_FEE_OFFSET":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"constant_DECIMAL_SCALING_FACTORS_OFFSET":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"constant_PAUSE_WINDOW_END_TIME_OFFSET":{"entryPoint":null,"id":null,"parameterSlots":0,"returnSlots":1},"copy_array_from_storage_to_memory_array_contract_IERC20_dyn_ptr":{"entryPoint":47318,"id":null,"parameterSlots":1,"returnSlots":1},"copy_array_to_storage_from_array_contract_IERC20_dyn_to_array_contract_IERC20_dyn":{"entryPoint":24694,"id":null,"parameterSlots":2,"returnSlots":0},"copy_struct_to_storage_from_struct_TokenInfo_to_struct_TokenInfo":{"entryPoint":25125,"id":null,"parameterSlots":2,"returnSlots":0},"dispatch_internal_in_out":{"entryPoint":50921,"id":null,"parameterSlots":4,"returnSlots":1},"dispatch_internal_in_out_126392":{"entryPoint":50884,"id":null,"parameterSlots":3,"returnSlots":1},"dispatch_internal_in_out_126393":{"entryPoint":50907,"id":null,"parameterSlots":3,"returnSlots":1},"external_fun_accountDelta":{"entryPoint":15404,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_addLiquidity":{"entryPoint":13067,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_buildTokenConfig":{"entryPoint":14693,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_buildTokenConfig_37097":{"entryPoint":8037,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_buildTokenConfig_37182":{"entryPoint":14204,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_buildTokenConfig_37279":{"entryPoint":20977,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_burnERC20":{"entryPoint":6907,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_computeYieldFeesDue":{"entryPoint":4724,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_ensurePoolNotPaused":{"entryPoint":2000,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_ensureUnpausedAndGetVaultState":{"entryPoint":20848,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_ensureValidSwapAmount":{"entryPoint":18117,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_ensureValidTradeAmount":{"entryPoint":10366,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_erc4626BufferWrapOrUnwrap":{"entryPoint":11774,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_forceLock":{"entryPoint":15050,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_forceUnlock":{"entryPoint":15200,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getBufferTokenBalancesBytes":{"entryPoint":21306,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getLastLiveBalances":{"entryPoint":11486,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getPoolFactoryMock":{"entryPoint":15964,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getPoolTokenCountAndIndexOfToken":{"entryPoint":19029,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getRawBalances":{"entryPoint":6507,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_getVaultExtension":{"entryPoint":18238,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_guardedCheckEntered":{"entryPoint":17254,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_internalGetBufferUnderlyingImbalance":{"entryPoint":9442,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_internalGetBufferWrappedImbalance":{"entryPoint":17323,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_loadPoolDataUpdatingBalancesAndYieldFees":{"entryPoint":5098,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_loadPoolDataUpdatingBalancesAndYieldFeesReentrancy":{"entryPoint":20587,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualAddLiquidity":{"entryPoint":4508,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualBuildPoolSwapParams":{"entryPoint":5994,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualComputeAmountGivenScaled18":{"entryPoint":3645,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualComputeAndChargeAggregateSwapFees":{"entryPoint":18663,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualErc4626BufferWrapOrUnwrapReentrancy":{"entryPoint":11200,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualFindTokenIndex":{"entryPoint":21366,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualGetAddLiquidityCalledFlagBySession":{"entryPoint":11670,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualGetAggregateSwapFeeAmount":{"entryPoint":11004,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualGetAggregateYieldFeeAmount":{"entryPoint":16031,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualGetCurrentUnlockSessionId":{"entryPoint":15421,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualGetIsUnlocked":{"entryPoint":18059,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualGetNonzeroDeltaCount":{"entryPoint":5266,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualGetPoolConfigBits":{"entryPoint":13551,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualGetTokenDeltas":{"entryPoint":6930,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualInternalSwap":{"entryPoint":8322,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualLoadSwapState":{"entryPoint":12746,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualReentrancyAddLiquidity":{"entryPoint":21438,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualReentrancyRemoveLiquidity":{"entryPoint":9571,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualReentrancySwap":{"entryPoint":16165,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualRegisterPool":{"entryPoint":15668,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualRegisterPoolAtTimestamp":{"entryPoint":2539,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualRegisterPoolPassThruTokens":{"entryPoint":10622,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualRegisterPoolWithSwapFee":{"entryPoint":6988,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualRemoveLiquidity":{"entryPoint":21469,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSendToReentrancy":{"entryPoint":19492,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSetAccountDelta":{"entryPoint":19660,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSetAddLiquidityCalledFlag":{"entryPoint":20744,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSetAggregateSwapFeeAmount":{"entryPoint":12626,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSetAggregateSwapFeePercentage":{"entryPoint":19365,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSetAggregateYieldFeeAmount":{"entryPoint":15103,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSetAggregateYieldFeePercentage":{"entryPoint":16104,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSetBufferAsset":{"entryPoint":17609,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSetBufferBalances":{"entryPoint":4904,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSetBufferOwnerShares":{"entryPoint":21640,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSetBufferTotalShares":{"entryPoint":11429,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSetHooksConfig":{"entryPoint":18795,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSetInitializedPool":{"entryPoint":13960,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSetNonZeroDeltaCount":{"entryPoint":14042,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSetPoolBalances":{"entryPoint":6651,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSetPoolConfig":{"entryPoint":13754,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSetPoolConfigBits":{"entryPoint":20688,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSetPoolCreator":{"entryPoint":15254,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSetPoolPauseWindowEndTime":{"entryPoint":4795,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSetPoolPaused":{"entryPoint":19184,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSetPoolRegistered":{"entryPoint":10889,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSetPoolTokenInfo":{"entryPoint":18305,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSetPoolTokenInfo_36785":{"entryPoint":20347,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSetPoolTokens":{"entryPoint":15481,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSetPoolTokensAndBalances":{"entryPoint":20105,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSetReservesOf":{"entryPoint":19821,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSetStaticSwapFeePercentage":{"entryPoint":6049,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSetVaultPaused":{"entryPoint":14972,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSetVaultState":{"entryPoint":5161,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSettleReentrancy":{"entryPoint":10402,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSettleUnwrap":{"entryPoint":18145,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualSettleWrap":{"entryPoint":17773,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualTransfer":{"entryPoint":1831,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualUnsafeSetStaticSwapFeePercentage":{"entryPoint":9643,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualUpdateAggregateSwapFeePercentage":{"entryPoint":17185,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualUpdatePoolDataLiveBalancesAndRates":{"entryPoint":19878,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_manualWritePoolBalancesToStorage":{"entryPoint":4973,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_mintERC20":{"entryPoint":12887,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_mockIsUnlocked":{"entryPoint":18171,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_mockWithInitializedPool":{"entryPoint":14935,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_previewDeposit":{"entryPoint":18195,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_previewMint":{"entryPoint":19716,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_previewRedeem":{"entryPoint":19266,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_previewWithdraw":{"entryPoint":18620,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_recoveryModeExit":{"entryPoint":15858,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_reentrancyGuardEntered":{"entryPoint":19759,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_removeLiquidity":{"entryPoint":7477,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_sendTo":{"entryPoint":17799,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_settle":{"entryPoint":5324,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_supplyCredit":{"entryPoint":18018,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_swap":{"entryPoint":9704,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_takeDebt":{"entryPoint":11621,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_transfer":{"entryPoint":18771,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_transferFrom":{"entryPoint":5613,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_unguardedCheckNotEntered":{"entryPoint":19309,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_unlock":{"entryPoint":12927,"id":null,"parameterSlots":0,"returnSlots":0},"external_fun_updateLiveTokenBalanceInPoolData":{"entryPoint":17383,"id":null,"parameterSlots":0,"returnSlots":0},"extract_returndata":{"entryPoint":49693,"id":null,"parameterSlots":0,"returnSlots":1},"finalize_allocation":{"entryPoint":2191,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_65709":{"entryPoint":2082,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_65715":{"entryPoint":2115,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_65737":{"entryPoint":2143,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_65745":{"entryPoint":2163,"id":null,"parameterSlots":1,"returnSlots":0},"fun_":{"entryPoint":26820,"id":22778,"parameterSlots":0,"returnSlots":0},"fun_22796":{"entryPoint":26860,"id":22796,"parameterSlots":0,"returnSlots":0},"fun__loadPoolDataUpdatingBalancesAndYieldFees":{"entryPoint":30142,"id":25381,"parameterSlots":1,"returnSlots":1},"fun_accountDelta":{"entryPoint":44469,"id":24964,"parameterSlots":2,"returnSlots":0},"fun_addLiquidity":{"entryPoint":27810,"id":21046,"parameterSlots":3,"returnSlots":4},"fun_allowance":{"entryPoint":47834,"id":38954,"parameterSlots":3,"returnSlots":1},"fun_areBuffersPaused":{"entryPoint":null,"id":31300,"parameterSlots":1,"returnSlots":1},"fun_buildPoolSwapParams":{"entryPoint":32424,"id":20062,"parameterSlots":3,"returnSlots":1},"fun_buildTokenConfig":{"entryPoint":23154,"id":37097,"parameterSlots":1,"returnSlots":1},"fun_buildTokenConfig_37368":{"entryPoint":24454,"id":37368,"parameterSlots":4,"returnSlots":1},"fun_burn":{"entryPoint":32529,"id":39222,"parameterSlots":3,"returnSlots":0},"fun_callAfterAddLiquidityHook":{"entryPoint":43963,"id":29256,"parameterSlots":8,"returnSlots":1},"fun_callAfterRemoveLiquidityHook":{"entryPoint":35666,"id":29416,"parameterSlots":8,"returnSlots":1},"fun_callAfterSwapHook":{"entryPoint":38204,"id":29096,"parameterSlots":8,"returnSlots":1},"fun_callBeforeAddLiquidityHook":{"entryPoint":43638,"id":29139,"parameterSlots":5,"returnSlots":0},"fun_callBeforeRemoveLiquidityHook":{"entryPoint":33231,"id":29299,"parameterSlots":5,"returnSlots":0},"fun_callBeforeSwapHook":{"entryPoint":37561,"id":28960,"parameterSlots":3,"returnSlots":0},"fun_callComputeDynamicSwapFeeHook":{"entryPoint":37777,"id":28933,"parameterSlots":4,"returnSlots":1},"fun_callOptionalReturn":{"entryPoint":50158,"id":40411,"parameterSlots":2,"returnSlots":0},"fun_computeAddLiquiditySingleTokenExactOut":{"entryPoint":45800,"id":11762,"parameterSlots":6,"returnSlots":2},"fun_computeAddLiquidityUnbalanced":{"entryPoint":46178,"id":11654,"parameterSlots":5,"returnSlots":2},"fun_computeAmountGivenScaled18":{"entryPoint":27237,"id":20115,"parameterSlots":3,"returnSlots":1},"fun_computeAndChargeAggregateSwapFees":{"entryPoint":45031,"id":21795,"parameterSlots":5,"returnSlots":2},"fun_computeProportionalAmountsIn":{"entryPoint":46823,"id":11423,"parameterSlots":3,"returnSlots":1},"fun_computeProportionalAmountsOut":{"entryPoint":48951,"id":11473,"parameterSlots":3,"returnSlots":1},"fun_computeRateRoundUp":{"entryPoint":45447,"id":6847,"parameterSlots":1,"returnSlots":1},"fun_computeRemoveLiquiditySingleTokenExactIn":{"entryPoint":48778,"id":12030,"parameterSlots":6,"returnSlots":2},"fun_computeRemoveLiquiditySingleTokenExactOut":{"entryPoint":48258,"id":11927,"parameterSlots":6,"returnSlots":2},"fun_computeYieldFeesDue":{"entryPoint":29202,"id":31030,"parameterSlots":4,"returnSlots":1},"fun_copyToArray":{"entryPoint":46099,"id":6554,"parameterSlots":2,"returnSlots":0},"fun_copyToScaled18ApplyRateRoundDownArray":{"entryPoint":43439,"id":6684,"parameterSlots":3,"returnSlots":1},"fun_copyToScaled18ApplyRateRoundUpArray":{"entryPoint":33028,"id":6814,"parameterSlots":3,"returnSlots":1},"fun_ensureCorrectBufferAsset":{"entryPoint":38865,"id":25257,"parameterSlots":2,"returnSlots":0},"fun_ensureInitializedPool":{"entryPoint":32892,"id":25183,"parameterSlots":1,"returnSlots":0},"fun_ensureInputLengthMatch":{"entryPoint":47966,"id":5948,"parameterSlots":3,"returnSlots":0},"fun_ensureInputLengthMatch_5926":{"entryPoint":32981,"id":5926,"parameterSlots":2,"returnSlots":0},"fun_ensureInvariantRatioAboveMinimumBound":{"entryPoint":50580,"id":12082,"parameterSlots":2,"returnSlots":0},"fun_ensureInvariantRatioBelowMaximumBound":{"entryPoint":50289,"id":12056,"parameterSlots":2,"returnSlots":0},"fun_ensurePoolMinimumTotalSupply":{"entryPoint":47910,"id":39074,"parameterSlots":1,"returnSlots":0},"fun_ensurePoolNotPaused":{"entryPoint":26934,"id":25030,"parameterSlots":1,"returnSlots":0},"fun_ensureUnlocked":{"entryPoint":31344,"id":24863,"parameterSlots":0,"returnSlots":0},"fun_ensureUnpaused":{"entryPoint":32969,"id":24998,"parameterSlots":1,"returnSlots":0},"fun_ensureValidSwapAmount":{"entryPoint":44882,"id":22748,"parameterSlots":1,"returnSlots":0},"fun_ensureValidTradeAmount":{"entryPoint":38836,"id":22734,"parameterSlots":1,"returnSlots":0},"fun_ensureValidWrapAmount":{"entryPoint":38951,"id":22063,"parameterSlots":2,"returnSlots":0},"fun_ensureVaultNotPaused":{"entryPoint":27095,"id":24984,"parameterSlots":0,"returnSlots":0},"fun_findTokenIndex":{"entryPoint":45323,"id":25546,"parameterSlots":2,"returnSlots":1},"fun_forceApprove":{"entryPoint":49614,"id":40369,"parameterSlots":3,"returnSlots":0},"fun_forceApprove_66243":{"entryPoint":49334,"id":40369,"parameterSlots":2,"returnSlots":0},"fun_functionCallWithValue":{"entryPoint":49740,"id":40581,"parameterSlots":2,"returnSlots":1},"fun_getAggregateYieldFeePercentage":{"entryPoint":50545,"id":30183,"parameterSlots":1,"returnSlots":1},"fun_getBalanceDerived":{"entryPoint":null,"id":6239,"parameterSlots":1,"returnSlots":1},"fun_getBalanceRaw":{"entryPoint":null,"id":6222,"parameterSlots":1,"returnSlots":1},"fun_getBufferUnderlyingImbalance":{"entryPoint":37135,"id":5560,"parameterSlots":2,"returnSlots":1},"fun_getBufferWrappedImbalance":{"entryPoint":44664,"id":5609,"parameterSlots":2,"returnSlots":1},"fun_getDecimalScalingFactors":{"entryPoint":50453,"id":30315,"parameterSlots":2,"returnSlots":1},"fun_getDefaultLiquidityManagement":{"entryPoint":27203,"id":38601,"parameterSlots":0,"returnSlots":1},"fun_getSingleInputIndex":{"entryPoint":45588,"id":6007,"parameterSlots":1,"returnSlots":1},"fun_getStaticSwapFeePercentage":{"entryPoint":45731,"id":30061,"parameterSlots":1,"returnSlots":1},"fun_getTokenRate":{"entryPoint":47997,"id":30916,"parameterSlots":1,"returnSlots":1},"fun_insertBool":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_126381":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_126404":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_143887":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_143888":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_160746":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_160747":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_177318":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_177319":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_193779":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_193780":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_210119":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_210120":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_226332":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_226333":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_242426":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertBool_242427":{"entryPoint":null,"id":7785,"parameterSlots":2,"returnSlots":1},"fun_insertUint":{"entryPoint":47247,"id":7523,"parameterSlots":3,"returnSlots":1},"fun_insertUint_274243":{"entryPoint":47221,"id":7523,"parameterSlots":2,"returnSlots":1},"fun_insertUint_274244":{"entryPoint":null,"id":7523,"parameterSlots":2,"returnSlots":1},"fun_insertUint_274245":{"entryPoint":null,"id":7523,"parameterSlots":2,"returnSlots":1},"fun_isPoolInRecoveryMode":{"entryPoint":null,"id":29766,"parameterSlots":1,"returnSlots":1},"fun_isQueryContext":{"entryPoint":49032,"id":25605,"parameterSlots":0,"returnSlots":1},"fun_loadPoolDataUpdatingBalancesAndYieldFees":{"entryPoint":30698,"id":25381,"parameterSlots":1,"returnSlots":1},"fun_loadSwapState":{"entryPoint":37460,"id":20029,"parameterSlots":2,"returnSlots":1},"fun_manualSetAggregateSwapFeePercentage":{"entryPoint":44388,"id":38685,"parameterSlots":2,"returnSlots":1},"fun_manualSetHooksConfig":{"entryPoint":25397,"id":36723,"parameterSlots":2,"returnSlots":0},"fun_manualSetPoolConfig":{"entryPoint":23783,"id":36580,"parameterSlots":2,"returnSlots":0},"fun_manualSetPoolTokenInfo":{"entryPoint":26470,"id":36785,"parameterSlots":2,"returnSlots":0},"fun_mint":{"entryPoint":43063,"id":39059,"parameterSlots":3,"returnSlots":0},"fun_mulDivUp":{"entryPoint":49249,"id":8034,"parameterSlots":3,"returnSlots":1},"fun_mulDivUp_66282":{"entryPoint":49160,"id":8034,"parameterSlots":2,"returnSlots":1},"fun_mulDown":{"entryPoint":50270,"id":7953,"parameterSlots":2,"returnSlots":1},"fun_mulUp":{"entryPoint":47140,"id":7970,"parameterSlots":2,"returnSlots":1},"fun_nonReentrantAfter":{"entryPoint":31307,"id":9928,"parameterSlots":0,"returnSlots":0},"fun_nonReentrantBefore":{"entryPoint":31222,"id":9916,"parameterSlots":0,"returnSlots":0},"fun_previewDeposit":{"entryPoint":24849,"id":38727,"parameterSlots":2,"returnSlots":1},"fun_previewMint":{"entryPoint":26350,"id":38760,"parameterSlots":2,"returnSlots":1},"fun_previewRedeem":{"entryPoint":26086,"id":38802,"parameterSlots":2,"returnSlots":1},"fun_previewWithdraw":{"entryPoint":25272,"id":38835,"parameterSlots":2,"returnSlots":1},"fun_queryModeBalanceIncrease":{"entryPoint":49053,"id":38988,"parameterSlots":3,"returnSlots":0},"fun_reloadBalancesAndRates":{"entryPoint":33449,"id":30871,"parameterSlots":2,"returnSlots":0},"fun_reloadBalancesAndRates_65788":{"entryPoint":33613,"id":30871,"parameterSlots":2,"returnSlots":0},"fun_removeLiquidity":{"entryPoint":33904,"id":21702,"parameterSlots":3,"returnSlots":4},"fun_requireAddLiquidityCustomEnabled":{"entryPoint":45483,"id":29891,"parameterSlots":1,"returnSlots":0},"fun_requireDonationEnabled":{"entryPoint":46770,"id":30040,"parameterSlots":1,"returnSlots":0},"fun_requireRemoveLiquidityCustomEnabled":{"entryPoint":48205,"id":29953,"parameterSlots":1,"returnSlots":0},"fun_requireUnbalancedLiquidityEnabled":{"entryPoint":45536,"id":29829,"parameterSlots":1,"returnSlots":0},"fun_setAggregateYieldFeePercentage":{"entryPoint":44405,"id":30223,"parameterSlots":2,"returnSlots":1},"fun_setBalanceDerived":{"entryPoint":44441,"id":6275,"parameterSlots":2,"returnSlots":1},"fun_setBalanceRaw":{"entryPoint":43049,"id":6257,"parameterSlots":2,"returnSlots":1},"fun_setPauseWindowEndTime":{"entryPoint":null,"id":30392,"parameterSlots":2,"returnSlots":1},"fun_setPoolRegistered":{"entryPoint":null,"id":29662,"parameterSlots":2,"returnSlots":1},"fun_setStaticSwapFeePercentage":{"entryPoint":37345,"id":30101,"parameterSlots":2,"returnSlots":1},"fun_setTokenDecimalDiffs":{"entryPoint":null,"id":30342,"parameterSlots":2,"returnSlots":1},"fun_settleUnwrap":{"entryPoint":44962,"id":22640,"parameterSlots":4,"returnSlots":0},"fun_settleWrap":{"entryPoint":44813,"id":22602,"parameterSlots":4,"returnSlots":0},"fun_settleWrapUnwrap":{"entryPoint":49770,"id":22719,"parameterSlots":4,"returnSlots":0},"fun_shouldCallAfterAddLiquidity":{"entryPoint":null,"id":28722,"parameterSlots":1,"returnSlots":1},"fun_shouldCallAfterRemoveLiquidity":{"entryPoint":null,"id":28808,"parameterSlots":1,"returnSlots":1},"fun_shouldCallAfterSwap":{"entryPoint":null,"id":28636,"parameterSlots":1,"returnSlots":1},"fun_shouldCallBeforeAddLiquidity":{"entryPoint":null,"id":28679,"parameterSlots":1,"returnSlots":1},"fun_shouldCallBeforeRemoveLiquidity":{"entryPoint":null,"id":28765,"parameterSlots":1,"returnSlots":1},"fun_shouldCallBeforeSwap":{"entryPoint":null,"id":28593,"parameterSlots":1,"returnSlots":1},"fun_shouldCallComputeDynamicSwapFee":{"entryPoint":null,"id":28550,"parameterSlots":1,"returnSlots":1},"fun_spendAllowance":{"entryPoint":31487,"id":39428,"parameterSlots":4,"returnSlots":0},"fun_supplyCredit":{"entryPoint":31425,"id":24891,"parameterSlots":2,"returnSlots":0},"fun_syncPoolBalancesAndFees":{"entryPoint":47486,"id":30807,"parameterSlots":3,"returnSlots":0},"fun_tGet":{"entryPoint":null,"id":7043,"parameterSlots":3,"returnSlots":1},"fun_tIncrement":{"entryPoint":43397,"id":7424,"parameterSlots":1,"returnSlots":0},"fun_tSet":{"entryPoint":45425,"id":6967,"parameterSlots":3,"returnSlots":0},"fun_tSet_65784":{"entryPoint":43414,"id":7073,"parameterSlots":3,"returnSlots":0},"fun_takeDebt":{"entryPoint":38853,"id":24908,"parameterSlots":2,"returnSlots":0},"fun_toInt256":{"entryPoint":47749,"id":44982,"parameterSlots":1,"returnSlots":1},"fun_toPackedBalance":{"entryPoint":29333,"id":6303,"parameterSlots":2,"returnSlots":1},"fun_toRawUndoRateRoundDown":{"entryPoint":47174,"id":6509,"parameterSlots":3,"returnSlots":1},"fun_toRawUndoRateRoundUp":{"entryPoint":46894,"id":6530,"parameterSlots":3,"returnSlots":1},"fun_toUint256":{"entryPoint":49281,"id":44146,"parameterSlots":1,"returnSlots":1},"fun_totalSupply":{"entryPoint":null,"id":38906,"parameterSlots":1,"returnSlots":1},"fun_transfer":{"entryPoint":31964,"id":39312,"parameterSlots":4,"returnSlots":0},"fun_unwrapWithBuffer":{"entryPoint":42258,"id":22564,"parameterSlots":4,"returnSlots":3},"fun_unwrapWithBuffer_66059":{"entryPoint":41296,"id":22564,"parameterSlots":3,"returnSlots":3},"fun_unwrapWithBuffer_66064":{"entryPoint":41816,"id":22564,"parameterSlots":3,"returnSlots":3},"fun_updateRawAndLiveBalance":{"entryPoint":47058,"id":30978,"parameterSlots":4,"returnSlots":0},"fun_updateRawAndLiveBalance_126389":{"entryPoint":46991,"id":30978,"parameterSlots":3,"returnSlots":0},"fun_updateRawAndLiveBalance_65750":{"entryPoint":46914,"id":30978,"parameterSlots":3,"returnSlots":0},"fun_verifyCallResultFromTarget":{"entryPoint":50744,"id":40673,"parameterSlots":3,"returnSlots":1},"fun_wrapWithBuffer":{"entryPoint":40302,"id":22328,"parameterSlots":4,"returnSlots":3},"fun_wrapWithBuffer_66058":{"entryPoint":39073,"id":22328,"parameterSlots":3,"returnSlots":3},"fun_wrapWithBuffer_66069":{"entryPoint":39691,"id":22328,"parameterSlots":3,"returnSlots":3},"fun_writePoolBalancesToStorage":{"entryPoint":29433,"id":25305,"parameterSlots":2,"returnSlots":0},"mapping_index_access_mapping_address_userDefinedValueType_PoolConfigBits_of_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"mapping_index_access_mapping_address_userDefinedValueType_PoolConfigBits_of_address_65728":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_address_userDefinedValueType_PoolConfigBits_of_address_65732":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_address_userDefinedValueType_PoolConfigBits_of_address_65734":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_address_userDefinedValueType_PoolConfigBits_of_address_65740":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_address_userDefinedValueType_PoolConfigBits_of_address_66072":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_address_userDefinedValueType_PoolConfigBits_of_address_66141":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_address_userDefinedValueType_PoolConfigBits_of_address_66147":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_address_userDefinedValueType_PoolConfigBits_of_address_66151":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_address_userDefinedValueType_PoolConfigBits_of_address_66163":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_address_userDefinedValueType_PoolConfigBits_of_address_66241":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"mapping_index_access_mapping_uint256_bytes32_of_uint256":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"memory_array_index_access_uint256_dyn":{"entryPoint":22552,"id":null,"parameterSlots":2,"returnSlots":1},"modifier_nonReentrant":{"entryPoint":29532,"id":9897,"parameterSlots":3,"returnSlots":1},"modifier_nonReentrant_65760":{"entryPoint":36100,"id":9897,"parameterSlots":4,"returnSlots":4},"modifier_transient":{"entryPoint":23578,"id":19663,"parameterSlots":2,"returnSlots":1},"modifier_whenVaultNotPaused":{"entryPoint":21763,"id":24972,"parameterSlots":4,"returnSlots":0},"panic_error_0x11":{"entryPoint":22377,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x12":{"entryPoint":37090,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x21":{"entryPoint":4072,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":2037,"id":null,"parameterSlots":0,"returnSlots":0},"read_from_memoryt_bool":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"read_from_memoryt_contract_IERC20":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"read_from_memoryt_enum_TokenType":{"entryPoint":24444,"id":null,"parameterSlots":1,"returnSlots":1},"read_from_storage_reference_type_struct_TokenInfo":{"entryPoint":47423,"id":null,"parameterSlots":1,"returnSlots":1},"read_from_storage_split_offset_contract_IHooks":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"require_helper_stringliteral_14ed":{"entryPoint":22261,"id":null,"parameterSlots":1,"returnSlots":0},"require_helper_stringliteral_555b":{"entryPoint":22685,"id":null,"parameterSlots":1,"returnSlots":0},"revert_forward":{"entryPoint":21752,"id":null,"parameterSlots":0,"returnSlots":0},"update_storage_value_offsett_address_to_address":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"validator_assert_enum_AddLiquidityKind":{"entryPoint":22126,"id":null,"parameterSlots":1,"returnSlots":0},"validator_assert_enum_RemoveLiquidityKind":{"entryPoint":26705,"id":null,"parameterSlots":1,"returnSlots":0},"validator_assert_enum_TokenType":{"entryPoint":4117,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_bool":{"entryPoint":2995,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_contract_IERC20":{"entryPoint":1739,"id":null,"parameterSlots":1,"returnSlots":0},"validator_revert_enum_SwapKind":{"entryPoint":2721,"id":null,"parameterSlots":1,"returnSlots":0},"write_to_memory_bool":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"write_to_memory_contract_IERC20":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"write_to_memory_enum_TokenType":{"entryPoint":24435,"id":null,"parameterSlots":2,"returnSlots":0}},"generatedSources":[],"immutableReferences":{"19501":[{"length":32,"start":18269},{"length":32,"start":26883}],"28194":[{"length":32,"start":44884}],"28196":[{"length":32,"start":38954}],"28201":[{"length":32,"start":15069},{"length":32,"start":15220},{"length":32,"start":18082},{"length":32,"start":23589},{"length":32,"start":31346}],"28206":[{"length":32,"start":5289},{"length":32,"start":14064},{"length":32,"start":23654},{"length":32,"start":44550},{"length":32,"start":44619}],"28211":[{"length":32,"start":6953},{"length":32,"start":19680},{"length":32,"start":44478}],"28216":[{"length":32,"start":11709},{"length":32,"start":13220},{"length":32,"start":20797},{"length":32,"start":34085}],"28221":[{"length":32,"start":13168},{"length":32,"start":15441},{"length":32,"start":20761},{"length":32,"start":23698},{"length":32,"start":34033}],"28267":[{"length":32,"start":27102}],"28269":[{"length":32,"start":27044}],"36064":[{"length":32,"start":7086},{"length":32,"start":10744},{"length":32,"start":15713},{"length":32,"start":15995},{"length":32,"start":21789}],"36067":[{"length":32,"start":14489},{"length":32,"start":23288}]},"linkReferences":{},"object":"60806040526004361015610018575b366168ec576168c4565b5f3560e01c8062d7aadb146106c657806302e1a4aa146106c15780630362a513146106bc57806306bf83b1146106b75780630790de46146106b257806308bade29146106ad5780630c87409b146106a85780630ee4cdd8146106a35780630f6196551461069e5780630f682ba01461069957806310c1dc4114610694578063155075e61461068f57806315afd4091461068a57806315dacbea1461068557806316a573c214610680578063195aaef91461067b57806319a24bcb146106765780631c4e1e23146106715780631d27af681461066c5780631f4475c5146106675780631f495f7914610662578063214578971461065d57806324e7176b1461065857806325b6a844146106535780632606a4de1461064e57806328121e27146106495780632b766278146106445780632bfb780c1461063f5780632cbbf1981461063a5780632d1c3beb1461063557806332333ce614610630578063352339ee1461062b57806336918d6e14610626578063370bc8da146106215780633cb5b2af1461061c5780633cce2585146106175780633e262ba314610612578063420f4a451461060d57806343583be51461060857806344ea8763146106035780634594871a146105fe57806347c07e88146105f957806348c89491146105f45780634af29ec4146105ef578063557dba68146105ea5780635c1c1c81146105e55780635e3e00fa146105e05780635eeae6eb146105db5780635f70f542146105d6578063608256f7146105d157806362691e5f146105cc578063692407ae146105c75780636d4908c4146105c25780637004b0f1146105bd5780637965c967146105b857806379a2c0ac146105b357806380047e26146105ae57806381e4b7e9146105a957806382ea1749146105a4578063851c65a31461059f57806387a530f81461059a57806387a76c59146105955780638f5aeb4b14610590578063920af0661461058b57806396e74a2714610586578063a03b23ef14610581578063a408f3121461057c578063a40f959214610577578063aa01edb314610572578063ab62c2b61461056d578063ac00485514610568578063ae63932914610563578063b1740c2d1461055e578063b246949914610559578063b4eb0bf914610554578063b6f680f41461054f578063b8caceee1461054a578063b8f82b2614610545578063b9a8effa14610540578063bb14e4661461053b578063bbc6f1dc14610536578063be6b4d2a14610531578063beabacc81461052c578063c1fdcd6214610527578063c9c1661b14610522578063cbde2b681461051d578063cbe52ae314610518578063cecc95a714610513578063cfcc22091461050e578063d01a326914610509578063d0643b8c14610504578063d1f810a5146104ff578063d2c725e0146104fa578063d64bc25d146104f5578063d86c3fef146104f0578063d8f4cf3c146104eb578063dab50579146104e6578063dc4402ed146104e1578063df138458146104dc578063e2ddce11146104d7578063e460a8a9146104d2578063e5948689146104cd578063e5b08ffb146104c8578063ebfeb0a1146104c3578063eeda9991146104be578063f1320097146104b95763ff44deab0361000e57615488565b6153dd565b6153be565b615376565b61533a565b6151f1565b615170565b615108565b6150d0565b61506b565b614f7b565b614e89565b614da6565b614d6d565b614d2f565b614d04565b614ccc565b614c24565b614ba5565b614b6d565b614b42565b614af0565b614a55565b61496b565b614953565b6148e7565b6148bc565b614781565b61473e565b614713565b6146fb565b6146e1565b6146c5565b61468b565b614662565b614587565b61456d565b6144c9565b6143e7565b6143ab565b614366565b614321565b613f25565b613ee8565b613e9f565b613e5c565b613df2565b613d34565b613c79565b613c3d565b613c2c565b613b96565b613b60565b613aff565b613aca565b613a7c565b613a57565b613965565b61377c565b6136da565b613688565b6135ba565b6134ef565b61330b565b61327f565b613257565b6131ca565b613152565b612dfe565b612d96565b612d65565b612cde565b612ca5565b612bc0565b612afc565b612a89565b61297e565b6128a2565b61287e565b6125e8565b6125ab565b612563565b6124e2565b612082565b611f65565b611d35565b611b4c565b611b12565b611afb565b6119fb565b61196b565b6117a1565b61176a565b6115ed565b6114cc565b611492565b611429565b6113ea565b61136d565b611328565b6112bb565b611274565b61119c565b610e3d565b6109eb565b6107d0565b610727565b6001600160a01b038116036106dc57565b5f80fd5b35906106eb826106cb565b565b61016435906106eb826106cb565b60031960609101126106dc57600435610713816106cb565b90602435610720816106cb565b9060443590565b346106dc57610790602061073a366106fb565b91905f6001600160a01b036040518097819682957fa9059cbb00000000000000000000000000000000000000000000000000000000845260048401602090939291936001600160a01b0360408201951681520152565b0393165af180156107cb576107a157005b6107c29060203d6020116107c4575b6107ba818361088f565b8101906154e3565b005b503d6107b0565b6154f8565b346106dc5760206003193601126106dc576107c26004356107f0816106cb565b616936565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6060810190811067ffffffffffffffff82111761083e57604052565b6107f5565b6080810190811067ffffffffffffffff82111761083e57604052565b67ffffffffffffffff811161083e57604052565b60e0810190811067ffffffffffffffff82111761083e57604052565b90601f601f19910116810190811067ffffffffffffffff82111761083e57604052565b604051906106eb82610873565b6040519060c0820182811067ffffffffffffffff82111761083e57604052565b60405190610140820182811067ffffffffffffffff82111761083e57604052565b60405190610160820182811067ffffffffffffffff82111761083e57604052565b60405190610180820182811067ffffffffffffffff82111761083e57604052565b67ffffffffffffffff811161083e5760051b60200190565b9080601f830112156106dc57602090823561097481610942565b93610982604051958661088f565b81855260208086019260051b8201019283116106dc57602001905b8282106109ab575050505090565b83809183356109b9816106cb565b81520191019061099d565b6044359063ffffffff821682036106dc57565b610124359063ffffffff821682036106dc57565b346106dc5760c06003193601126106dc57600435610a08816106cb565b60243567ffffffffffffffff81116106dc57610a2890369060040161095a565b90610a316109c4565b60607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c3601126106dc576107c29260405192610a6c84610822565b606435610a78816106cb565b8452608435610a86816106cb565b602085015260a435610a97816106cb565b6040850152615503565b600211156106dc57565b35906106eb82610aa1565b67ffffffffffffffff811161083e57601f01601f191660200190565b929192610ade82610ab6565b91610aec604051938461088f565b8294818452818301116106dc578281602093845f960137010152565b9080601f830112156106dc57816020610b2393359101610ad2565b90565b91909160e0818403126106dc57610b3b6108b2565b92610b4582610aab565b8452610b53602083016106e0565b6020850152610b64604083016106e0565b6040850152610b75606083016106e0565b60608501526080820135608085015260a082013560a085015260c082013567ffffffffffffffff81116106dc57610bac9201610b08565b60c0830152565b801515036106dc57565b61014435906106eb82610bb3565b61016435906106eb82610bb3565b61018435906106eb82610bb3565b6101a435906106eb82610bb3565b602435906106eb82610bb3565b604435906106eb82610bb3565b606435906106eb82610bb3565b608435906106eb82610bb3565b60a435906106eb82610bb3565b60c435906106eb82610bb3565b60e435906106eb82610bb3565b61010435906106eb82610bb3565b61012435906106eb82610bb3565b81601f820112156106dc578035906020610c8583610942565b936040610c95604051968761088f565b84865282860191836060809702860101948186116106dc578401925b858410610cc2575050505050505090565b86848303126106dc578487918451610cd981610822565b8635610ce481610aa1565b815282870135610cf3816106cb565b8382015285870135610d0481610bb3565b86820152815201930192610cb1565b9080601f830112156106dc576020908235610d2d81610942565b93610d3b604051958661088f565b81855260208086019260051b8201019283116106dc57602001905b828210610d64575050505090565b81358152908301908301610d56565b91909160e0818403126106dc57610d886108b2565b813581529267ffffffffffffffff60208301358181116106dc5782610dae91850161095a565b602086015260408301358181116106dc5782610dcb918501610c6c565b604086015260608301358181116106dc5782610de8918501610d13565b606086015260808301358181116106dc5782610e05918501610d13565b608086015260a08301358181116106dc5782610e22918501610d13565b60a086015260c08301359081116106dc57610bac9201610d13565b346106dc5760c06003193601126106dc5767ffffffffffffffff6004358181116106dc57610e6f903690600401610b26565b906024359081116106dc57610e88903690600401610d73565b60807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc3601126106dc57602091610ee79160405191610ec683610843565b604435835260643585840152608435604084015260a4356060840152616a65565b604051908152f35b359060058210156106dc57565b91909160c0818403126106dc57610f116108bf565b92610f1b826106e0565b8452610f29602083016106e0565b602085015267ffffffffffffffff60408301358181116106dc5782610f4f918501610d13565b604086015260608301356060860152610f6a60808401610eef565b608086015260a08301359081116106dc57610f859201610b08565b60a0830152565b60606003198201126106dc5767ffffffffffffffff916004358381116106dc5782610fb991600401610d73565b926024358181116106dc5783610fd191600401610efc565b926044359182116106dc57610b2391600401610d13565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6002111561101f57565b610fe8565b9081518082526020808093019301915f5b828110611043575050505090565b909192938260606001928751805161105a81611015565b8252808401516001600160a01b03168483015260409081015115159082015201950193929101611035565b9081518082526020808093019301915f5b8281106110a4575050505090565b835185529381019392810192600101611096565b91909160e0830192815181526020808301519460e060208401528551809152602061010084019601915f5b82811061115a575050505060c0611149611137611125611113610b23979860408801518782036040890152611024565b60608701518682036060880152611085565b60808601518582036080870152611085565b60a085015184820360a0860152611085565b9201519060c0818403910152611085565b83516001600160a01b0316885296810196928101926001016110e3565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b346106dc5761124161125d61127061122d6111b636610f8c565b929194906111c2615637565b5061124f604051946111fb60208701876111dc8683615685565b03976111f0601f19998a810183528261088f565b51902091848a616ca2565b979293919590986112246040519182611218602082019586615685565b0390810183528261088f565b519020146156f5565b60405198899860a08a5260a08a01906110b8565b9088820360208a0152611085565b908682036040880152611085565b9160608501528382036080850152611177565b0390f35b346106dc5760806003193601126106dc5760043567ffffffffffffffff81116106dc57610ee76112aa6020923690600401610d73565b606435906044359060243590617212565b346106dc5760406003193601126106dc576004356112d8816106cb565b6024359063ffffffff821682036106dc576001600160a01b03611318911691825f525f60205260405f205460829163ffffffff908116831b921b19161790565b905f525f60205260405f20555f80f35b346106dc5760606003193601126106dc57600435611345816106cb565b6001600160a01b0361135b604435602435617295565b91165f52600b60205260405f20555f80f35b346106dc5760406003193601126106dc5760043561138a816106cb565b6024359067ffffffffffffffff82116106dc576113ae6107c2923690600401610d73565b906172f9565b60031960409101126106dc576004356113cc816106cb565b90602435610b2381610aa1565b906020610b239281815201906110b8565b346106dc576112706114156113fe366113b4565b90611407615637565b50611410615637565b61735c565b6040519182916020835260208301906110b8565b346106dc576003196040813601126106dc5760043561144781610bb3565b6024359161145483610bb3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6007549260011b16911617176007555f80f35b5f9103126106dc57565b346106dc575f6003193601126106dc5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346106dc5760406003193601126106dc576004356114e9816106cb565b6024356114f46179f6565b6114fc617a70565b6001600160a01b0382165f818152600860209081526040918290205491517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152919492829060249082905afa9384156107cb5761127094611588925f916115be575b5080611582856001600160a01b03165f52600860205260405f2090565b556157a4565b918083116115b4575b508161159c91617ac1565b6115a4617a4b565b6040519081529081906020820190565b915061159c611591565b6115e0915060203d6020116115e6575b6115d8818361088f565b81019061575a565b5f611565565b503d6115ce565b346106dc5760806003193601126106dc5761163b60043561160d816106cb565b602435611619816106cb565b60443590611626826106cb565b61163560643580948333617aff565b33617cdc565b602060405160018152f35b60c06003198201126106dc5767ffffffffffffffff916004358381116106dc578261167391600401610b26565b9260807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8401126106dc576040516116aa81610843565b60243581526044356020820152606435604082015260843560608201529260a4359182116106dc57610b2391600401610d73565b906116e882611015565b52565b610b239181516116fa81611015565b81526020820151602082015260c0611721604084015160e0604085015260e0840190611085565b9260608101516060840152608081015160808401526001600160a01b0360a08201511660a084015201519060c0818403910152611177565b906020610b239281815201906116eb565b346106dc5761127061178d61177e36611646565b916117876157b1565b50617ea8565b6040519182916020835260208301906116eb565b346106dc5760406003193601126106dc576004356117be816106cb565b6024356001600160a01b038216916040517fce20ece70000000000000000000000000000000000000000000000000000000081526020908181600481885afa9081156107cb575f9161193d575b508310611915576040517f654cf15d0000000000000000000000000000000000000000000000000000000081528181600481885afa9182156107cb575f926118f8575b505082116118d05781816118ba6118a37f89d41522342fabac1471ca6073a5623e5caf367b03ca6e9a001478d0cf8be4a19561189d6118cb966001600160a01b03165f525f60205260405f2090565b546191e1565b916001600160a01b03165f525f60205260405f2090565b556040519081529081906020820190565b0390a2005b7f7f47834b000000000000000000000000000000000000000000000000000000005f5260045ffd5b61190e9250803d106115e6576115d8818361088f565b5f8061184e565b7fbfb20688000000000000000000000000000000000000000000000000000000005f5260045ffd5b6119549150823d84116115e6576115d8818361088f565b5f61180b565b906020610b23928181520190611085565b346106dc576020806003193601126106dc576001600160a01b03600435611991816106cb565b165f5260056020526040805f2090600360205260405f2054916119b3836157e7565b935f5b8481106119cb5760405180611270888261195a565b806001915f528383526fffffffffffffffffffffffffffffffff855f2054166119f48289615818565b52016119b6565b346106dc5760606003193601126106dc57600435611a18816106cb565b67ffffffffffffffff6024358181116106dc57611a39903690600401610d13565b6044359182116106dc57611ab4611a57611a7c933690600401610d13565b936001600160a01b0381165f526003602052611a8360405f2060405195868092615859565b038561088f565b611a90845184511461589d565b611a9d845186511461589d565b6001600160a01b03165f52600560205260405f2090565b905f5b83518110156107c25780611ae2611ad060019385615818565b51611adb8389615818565b5190617295565b611af48286905f5260205260405f2090565b5501611ab7565b346106dc576107c2611b0c366106fb565b91617f11565b346106dc575f6003193601126106dc5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346106dc5760606003193601126106dc57600435611b69816106cb565b60243567ffffffffffffffff81116106dc57611b8990369060040161095a565b90611b926169d7565b611b9a616a43565b91600183526001600160a01b0390611bd4827f00000000000000000000000000000000000000000000000000000000000000001691615a72565b91813b156106dc575f8094611c2c96611c6b604051988997889687957fed05beaf0000000000000000000000000000000000000000000000000000000087521660048601526101006024860152610104850190611ee5565b91604435604485015284606485015260848401906060809180511515845260208101511515602085015260408101511515604085015201511515910152565b03925af180156107cb57611c7b57005b80611c886107c29261085f565b80611488565b359060048210156106dc57565b91909160c0818403126106dc57611cb06108bf565b92611cba826106e0565b8452611cc8602083016106e0565b602085015260408201356040850152606082013567ffffffffffffffff908181116106dc5782611cf9918501610d13565b6060860152610f6a60808401611c8e565b91611d2790610b2394928452606060208501526060840190611085565b916040818403910152611177565b346106dc5760206003193601126106dc5760043567ffffffffffffffff81116106dc57611d66903690600401611c9b565b611d6e617a70565b611d816001600160a01b0382511661807c565b611d9a611d9582516001600160a01b031690565b6180c9565b611db3611dae82516001600160a01b031690565b6175be565b611e06602082015151611dcd6060850191825151906180d5565b805160c0840190611de782519160a0870192835191618104565b92611df7865160019060101c1690565b611e8d575b5050508383618470565b929390919485611e1b835160019060111c1690565b611e30575b60405180611270878a8a84611d0a565b6112709496509085611e83949392611e79611e6c611e5585516001600160a01b031690565b6001600160a01b03165f52600260205260405f2090565b546001600160a01b031690565b9484513390618b52565b92905f8080611e20565b611eb5611edd948789611ead611e6c611e5583516001600160a01b031690565b9233906181cf565b611ed2611ecc611a9d89516001600160a01b031690565b876182a9565b519151905191618104565b5f8080611dfc565b9081518082526020808093019301915f5b828110611f04575050505090565b9091929382608060019287516001600160a01b0380825116835284820151611f2b81611015565b838601526040828101519091169083015260609081015115159082015201950193929101611ef6565b906020610b23928181520190611ee5565b346106dc5760206003193601126106dc5760043567ffffffffffffffff81116106dc57611fa1611f9c61127092369060040161095a565b615a72565b604051918291602083526020830190611ee5565b939460c091610b2398966120749561204b95610140938952602089015260408801526060870152806080870152815190611fee82611015565b86015260208101516001600160a01b03908116610160870152604082015181166101808701526060820151166101a086015260808101516101c086015260a08101516101e0860152015160e0610200850152610220840190611177565b845160a0840152602085015160c0840152604085015160e0840152606090940151610100830152565b6101208184039101526110b8565b346106dc5760c05f61209336611646565b9060409283516120a281610873565b8581526020908682820152868682015260609781888a809401528860808201528860a082015201526120d2615928565b506120db615637565b506120e7848484617ea8565b946120f06179f6565b6120f8615b3f565b91835161210481611015565b61210d81611015565b156124bc575b808701612120815161af52565b816121808187019961214b61213f61213f8d516001600160a01b031690565b6001600160a01b031690565b9086519c8d809481937f72c9818600000000000000000000000000000000000000000000000000000000835260048301611759565b03925af19889156107cb575f9961249d575b508861219d8161af52565b85516121a881611015565b6121b181611015565b61242357508286015190526121f560c08701516121ee6121e86121d9858a0193845190615818565b519260a08b0151905190615818565b5161b187565b908a61b846565b9660808501519388949a60a0870151808b106123f257509085915b8c86890194818651612228906001600160a01b031690565b90612232916197c5565b828a0196858851612249906001600160a01b031690565b9061225391617ac1565b8b8d86518451612269906001600160a01b031690565b8a516001600160a01b0316845191612281938561afe7565b93908c828a019901948552885282518783019487828751906122a291615818565b51906122ad91616c6a565b90516122b8916157a4565b6122c2918461b742565b820192835189818351906122d591615818565b51906122e0916157a4565b6122ea918461b742565b84516001600160a01b03165f908152600560205260409020928151815161231091615818565b5192608001928351825161232391615818565b5161232d91617295565b90516123419085905f5260205260405f2090565b5551835161234e91615818565b519051835161235c91615818565b5161236691617295565b915161237991905f5260205260405f2090565b555194519551918a0151925187519182526020820194909452604081019290925260608201929092526001600160a01b039182169382169291909116907f0874b2d545cb271cdbda4e093020c452328b24af12382ed62c4d00f5c26709db90608090a46123e4617a4b565b519687966112709688611fb5565b7fe2ea151b000000000000000000000000000000000000000000000000000000005f5260048b905260245260445b5ffd5b90506124529198506124498a870151670de0b6b3a764000081810390821002908361c061565b90818552616c6a565b9661247f61246660c0880151875190615818565b5161247760a0890151885190615818565b51908a61b72e565b96608085015193889a60a0870151808b116123f25750908591612210565b6124b5919950823d84116115e6576115d8818361088f565b975f612192565b8087016124db6124d182518c8901519061b824565b80865282516157a4565b9052612113565b346106dc5760206003193601126106dc576020610ee7600435612504816106cb565b6001600160a01b0381165f52600b835260405f205461910f565b60606003198201126106dc5767ffffffffffffffff916004358381116106dc578261254b91600401610d73565b926024358181116106dc5783610fd191600401611c9b565b346106dc576125826125743661251e565b9161257d6179f6565b618470565b505050505f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b346106dc5760406003193601126106dc576001600160a01b036004356125d0816106cb565b16805f525f60205261131860243560405f20546191e1565b346106dc5760206003193601126106dc5760043567ffffffffffffffff81116106dc57612619903690600401610b26565b612621617a70565b602081016001600160a01b036126398183511661807c565b61264d611d9583516001600160a01b031690565b6080830151156128565760408301516001600160a01b03169061267d61213f60608601516001600160a01b031690565b91161461282e57612698611dae82516001600160a01b031690565b916126a38382619254565b906126af848383617ea8565b8451600c1c6001166127b3575b84516126d69190600b1c600116612772575b858484618d04565b96919694909683966126ed8451600190600d1c1690565b61273d575b50505050505161270181611015565b61270a81611015565b6127315750611270815b604051938493846040919493926060820195825260208201520152565b91506112708192612714565b8597509061275c611e6c611e556127679894516001600160a01b031690565b94845191339261953c565b915f808080806126f2565b84516001600160a01b03166127ac606086019182516127a5611e6c836001600160a01b03165f52600260205260405f2090565b9185619391565b90526126ce565b6127ec906127c885516001600160a01b031690565b6127e6611e6c826001600160a01b03165f52600260205260405f2090565b916192b9565b612809612803611a9d85516001600160a01b031690565b856182a9565b612814828583616a65565b60408301526126d6612827858484617ea8565b90506126bc565b7fa54b181d000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f57a456b7000000000000000000000000000000000000000000000000000000005f5260045ffd5b346106dc5760206003193601126106dc576004358061289957005b6107c29061af52565b346106dc5760206003193601126106dc576004356128bf816106cb565b6128c76179f6565b6001600160a01b03604051917f15afd4090000000000000000000000000000000000000000000000000000000083521660048201525f60248201526020816044815f305af180156107cb57611270915f91612926575b506115a4617a4b565b61293f915060203d6020116115e6576115d8818361088f565b5f61291d565b9060406003198301126106dc5760043561295e816106cb565b916024359067ffffffffffffffff82116106dc57610b239160040161095a565b346106dc5761298c36612945565b90612997825161594c565b916129a0615b3f565b915f5b82518110156129eb57806129e56129cc6129bf60019487615818565b516001600160a01b031690565b6129d68389615818565b51906001600160a01b03169052565b016129a3565b8482856001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016612a20616a43565b93813b156106dc575f8094611c6b604051978896879586947fd396a66600000000000000000000000000000000000000000000000000000000865260048601615b5d565b60031960409101126106dc57600435612a7c816106cb565b90602435610b2381610bb3565b346106dc576001600160a01b03612a9f36612a64565b91165f525f60205260405f20907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8254161790555f80f35b60031960409101126106dc57600435612aef816106cb565b90602435610b23816106cb565b346106dc5760206fffffffffffffffffffffffffffffffff612b4a6001600160a01b03612b2836612ad7565b91165f526006845260405f20906001600160a01b03165f5260205260405f2090565b5416604051908152f35b60031960a09101126106dc5760405160a0810181811067ffffffffffffffff82111761083e57604052600435612b8981610aa1565b8152602435612b9781610aa1565b6020820152604435612ba8816106cb565b60408201526064356060820152608435608082015290565b346106dc57612bce36612b54565b612bd66179f6565b6080604051917f43583be50000000000000000000000000000000000000000000000000000000083528051612c0a81611015565b60048401526020810151612c1d81611015565b60248401526001600160a01b036040820151166044840152606081015160648401520151608482015260608160a4815f305af180156107cb575f905f925f91612c6e575b5061127090612714617a4b565b90506112709250612c97915060603d606011612c9e575b612c8f818361088f565b810190615bea565b9092612c61565b503d612c85565b346106dc5760406003193601126106dc576001600160a01b03600435612cca816106cb565b165f52600d60205260243560405f20555f80f35b346106dc576020806003193601126106dc576001600160a01b03600435612d04816106cb565b165f5260056020526040805f2090600360205260405f205491612d26836157e7565b935f5b848110612d3e5760405180611270888261195a565b806001915f52838352612d54855f205460801c90565b612d5e8289615818565b5201612d29565b346106dc5760406003193601126106dc576107c2600435612d85816106cb565b612d9060243561ba85565b9061adb5565b346106dc5760406003193601126106dc576020612df4600435612db8816106cb565b6024357f0000000000000000000000000000000000000000000000000000000000000000905f5260205260405f20905f5260205260405f205c90565b6040519015158152f35b346106dc57612e0c36612b54565b612e14617a70565b60075460021c60011661312a57604090818101916001600160a01b03928381511693845f52600e60205280835f205416156130fe5760049450612e556179f6565b6020612e6b61213f84516001600160a01b031690565b8451968780927f38d52e0f0000000000000000000000000000000000000000000000000000000082525afa80156107cb576080955f916130cf575b5016612ec281612ebd84516001600160a01b031690565b6197d1565b81516001600160a01b031690612ede6060860192835190619827565b60016020860151612eee81611015565b612ef781611015565b0361306457612f1f91855191612f0c83611015565b84516001600160a01b031691519261a512565b7feeb740c90bf2b18c9532eb7d473137767036d893dff3e009f32718f821b2a4c08296929793979688612f7c612f5f61213f89516001600160a01b031690565b948951938493846040919493926060820195825260208201520152565b0390a25b8051612f8b81611015565b612f9481611015565b613015570151808410612fe5575051611270918391612fc29083906001600160a01b0316619827565b619827565b612fca617a4b565b51938493846040919493926060820195825260208201520152565b7fe2ea151b000000000000000000000000000000000000000000000000000000005f52600484905260245260445ffd5b015180851161303457509161127091612fc2612fbd94869586916129bf565b7fe2ea151b000000000000000000000000000000000000000000000000000000005f52600485905260245260445ffd5b6130879185519161307483611015565b84516001600160a01b0316915192619d6e565b7f3771d13c67011e31e12031c54bb59b0bf544a80b81d280a3711e172aa8b7f47b82969297939796886130c7612f5f61213f89516001600160a01b031690565b0390a2612f80565b6130f1915060203d6020116130f7575b6130e9818361088f565b810190615c05565b5f612ea6565b503d6130df565b847f85f41299000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f0f27df09000000000000000000000000000000000000000000000000000000005f5260045ffd5b346106dc576131a56131c76001600160a01b0361316e366106fb565b94919290921693845f52600660205261319b8360405f20906001600160a01b03165f5260205260405f2090565b5460801c90617295565b925f52600660205260405f20906001600160a01b03165f5260205260405f2090565b55005b346106dc5760406003193601126106dc5767ffffffffffffffff6004358181116106dc576131fc903690600401610b26565b906024359081116106dc5760809161321b61322a923690600401610d73565b90613224615928565b50619254565b6132556040518092606080918051845260208101516020850152604081015160408501520151910152565bf35b346106dc576107c2613268366106fb565b9161a837565b906020610b23928181520190611177565b346106dc5760206003193601126106dc5767ffffffffffffffff6004358181116106dc57366023820112156106dc5780600401359182116106dc5736602483830101116106dc576112709160246132d69201615c1a565b6040519182918261326e565b6132f8610b239492606083526060830190611085565b9260208201526040818403910152611177565b346106dc5760206003193601126106dc5760043567ffffffffffffffff81116106dc5761333c903690600401610efc565b613344617a70565b6133576001600160a01b0382511661807c565b61336b611d9582516001600160a01b031690565b6133c87f00000000000000000000000000000000000000000000000000000000000000005c6133a183516001600160a01b031690565b907f000000000000000000000000000000000000000000000000000000000000000061a996565b6133e16133dc82516001600160a01b031690565b6177ea565b6134346020820151516133fb6040850191825151906180d5565b805160c084019061341582519160a087019283519161a9af565b926134258651600190600e1c1690565b613498575b5050508383616ca2565b919094929384938661344b8351600190600f1c1690565b613461575b8561127086604051938493846132e2565b611270955061348c9496613482611e6c611e5585516001600160a01b031690565b948451339061abbb565b9050815f808086613450565b6134bf6134e79487896134b8611e6c611e5583516001600160a01b031690565b923361aa76565b6134dc6134d6611a9d89516001600160a01b031690565b8761834d565b51915190519161a9af565b5f808061342a565b346106dc5760206003193601126106dc576001600160a01b03600435613514816106cb565b165f525f602052602060405f2054604051908152f35b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc60809101126106dc576040519061356182610843565b8160243561356e81610bb3565b815260443561357c81610bb3565b602082015260643561358d81610bb3565b60408201526060608435916135a183610bb3565b0152565b610104359064ffffffffff821682036106dc57565b346106dc576101c06003193601126106dc576004356135d8816106cb565b6101a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126106dc576107c29061360f6108df565b906136193661352a565b825260a435602083015260c435604083015260e435606083015261363b6135a5565b60808301526136486109d7565b60a0830152613655610bbd565b60c0830152613662610bcb565b60e083015261366f610bd9565b61010083015261367d610be7565b610120830152615ce7565b346106dc576001600160a01b0361369e36612a64565b91165f525f60205260405f20907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8254169060011b1790555f80f35b346106dc5760206003193601126106dc576004357f00000000000000000000000000000000000000000000000000000000000000005d005b9080601f830112156106dc57602090823561372c81610942565b9361373a604051958661088f565b81855260208086019260051b8201019283116106dc57602001905b828210613763575050505090565b8380918335613771816106cb565b815201910190613755565b346106dc576040806003193601126106dc5767ffffffffffffffff6004358181116106dc576137af90369060040161095a565b906024359081116106dc576137c8903690600401613712565b6137d2825161594c565b925f5b835181101561385757806137f16129cc6129bf60019488615818565b61381c6138016129bf8387615818565b8461380c848a615818565b5101906001600160a01b03169052565b61382c61213f6129bf8387615818565b61384e576138485f5b6020613841848a615818565b5101615f73565b016137d5565b61384882613835565b6040517fbb4ad7d50000000000000000000000000000000000000000000000000000000081525f818061388d8960048301611f54565b03816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa80156107cb57611270915f916138d9575b5060405191829182611f54565b6138f591503d805f833e6138ed818361088f565b81019061599a565b826138cc565b9080601f830112156106dc57602090823561391581610942565b93613923604051958661088f565b81855260208086019260051b8201019283116106dc57602001905b82821061394c575050505090565b838091833561395a81610bb3565b81520191019061393e565b346106dc5760806003193601126106dc5767ffffffffffffffff6004358181116106dc5761399790369060040161095a565b90602435918183116106dc57366023840112156106dc5782600401356139bc81610942565b936139ca604051958661088f565b8185526020916024602087019160051b830101913683116106dc57602401905b828210613a3e57505050506044358281116106dc57613a0d903690600401613712565b6064359283116106dc5761127093613a2c613a329436906004016138fb565b92615f86565b60405191829182611f54565b8380918335613a4c81610aa1565b8152019101906139ea565b346106dc5760206003193601126106dc576107c2600435613a77816106cb565b61807c565b346106dc5760206003193601126106dc57600435613a9981610bb3565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd600754169060011b176007555f80f35b346106dc575f6003193601126106dc575f7f00000000000000000000000000000000000000000000000000000000000000005d005b346106dc576131a56131c76001600160a01b03613b1b366106fb565b94919290921693845f5260066020526fffffffffffffffffffffffffffffffff613b598460405f20906001600160a01b03165f5260205260405f2090565b5416617295565b346106dc575f6003193601126106dc5760017f00000000000000000000000000000000000000000000000000000000000000005d005b346106dc5760406003193601126106dc576107c2600435613bb6816106cb565b6001600160a01b0360243591613bcb836106cb565b165f526001602052600260405f2001906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b60031960409101126106dc57600435613c25816106cb565b9060243590565b346106dc576107c2612d9036613c0d565b346106dc575f6003193601126106dc5760207f00000000000000000000000000000000000000000000000000000000000000005c604051908152f35b346106dc576001600160a01b03613c8f36612945565b91165f52602090600360205260405f2081519167ffffffffffffffff831161083e5768010000000000000000831161083e578154838355808410613d0e575b506020613ce09101915f5260205f2090565b925f5b838110613cec57005b60019082613d0185516001600160a01b031690565b9401938187015501613ce3565b825f528360205f2091820191015b818110613d295750613cce565b5f8155600101613d1c565b346106dc57613d4236612945565b90613d4b6169d7565b613d53615b3f565b90613d876001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693615a72565b915f93613d92616a43565b93813b156106dc575f8094613dd6604051978896879586947fd396a66600000000000000000000000000000000000000000000000000000000865260048601615b5d565b03925af180156107cb57613de8575080f35b6107c2915061085f565b346106dc5760206003193601126106dc576001600160a01b03600435613e17816106cb565b16805f525f602052600160405f205460031c1615613e3157005b7fef029adf000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b346106dc575f6003193601126106dc5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346106dc576020613edc6001600160a01b03613eba36612ad7565b91165f526006835260405f20906001600160a01b03165f5260205260405f2090565b5460801c604051908152f35b346106dc5760406003193601126106dc576001600160a01b03600435613f0d816106cb565b16805f525f60205261131860243560405f205461ad75565b346106dc57613f3336611646565b613f3e9291926179f6565b613f49818484617ea8565b92613f526179f6565b613f5a615b3f565b908351613f6681611015565b613f6f81611015565b156142f9575b6020945f868201613f86815161af52565b87613fdb81890194613fa561213f61213f88516001600160a01b031690565b906040519586809481937f72c9818600000000000000000000000000000000000000000000000000000000835260048301611759565b03925af19182156107cb575f926142da575b50613ff78261af52565b865161400281611015565b61400b81611015565b614266579061404a916040850151905260c08601516140446121e86140358b880193845190615818565b519260a08a0151905190615818565b9161b846565b9060808601519482959260a0880151908181106142385750505b604087019683885161407c906001600160a01b031690565b90614086916197c5565b6060019786895161409d906001600160a01b031690565b906140a791617ac1565b855183516001600160a01b031689516001600160a01b03168751916140cc938661afe7565b91908188019760400192835287528551606084019286828551906140ef91615818565b51906140fa91616c6a565b9051614105916157a4565b61410f918561b742565b8501918251888184519061412291615818565b519061412d916157a4565b614137918361b742565b83516001600160a01b03165f908152600560205260409020918051875161415d91615818565b5191608001918251885161417091615818565b5161417a91617295565b875161418e9085905f5260205260405f2090565b5551835161419b91615818565b51905183516141a991615818565b516141b391617295565b91516141c691905f5260205260405f2090565b555194519551606092830151935160408051938452602084019690965294820193909352908101929092526001600160a01b039081169381169216907f0874b2d545cb271cdbda4e093020c452328b24af12382ed62c4d00f5c26709db90608090a4614230617a4b565b6107c2617a4b565b7fe2ea151b000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b506142966142be9161428d6060860151670de0b6b3a764000081810390821002908361c061565b90818752616c6a565b6142a660c0870151855190615818565b516142b760a0880151865190615818565b519161b72e565b906080860151948260a088015190818111614238575050614064565b6142f2919250883d8a116115e6576115d8818361088f565b905f613fed565b6020850161431a614310825160608501519061b824565b80855282516157a4565b9052613f75565b346106dc5760406003193601126106dc576001600160a01b03600435614346816106cb565b16805f525f60205261131860405f205464174876e800602435049061b875565b346106dc575f6003193601126106dc5761437e6179f6565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c156106dc575f905d005b346106dc5760206003193601126106dc576020610ee76004356143cd816106cb565b6001600160a01b0381165f52600b835260405f205461ae78565b346106dc5760806003193601126106dc5760043567ffffffffffffffff81116106dc5761441b611270913690600401610d73565b6144b460243560443561442d81610aa1565b60643590614439615637565b5082614449836060880151615818565b5261445381611015565b6144c1576002915b6144ad60c08601926144a581614472818751615818565b519561449060a08b0197614487848a51615818565b5190888b61c6e9565b61449e8360808d0151615818565b5251615818565b519351615818565b519261c6e9565b50604051918291826113d9565b60019161445b565b346106dc5760406003193601126106dc576107c26004356144e9816106cb565b6001600160a01b03602435916144fe836106cb565b165f52600e60205260405f20906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b60031960809101126106dc57600435614555816106cb565b90602435614562816106cb565b906044359060643590565b346106dc576107c261457e3661453d565b9291909161af0d565b346106dc57614595366106fb565b909161459f6179f6565b6145a7617a70565b6145b96145b38361ba85565b8261adb5565b6001600160a01b0381165f52600860205260405f2080549383850394851161465d579390556040517fa9059cbb0000000000000000000000000000000000000000000000000000000060208201526001600160a01b039093166024840152604480840192909252908252614638919061463360648361088f565b61c3ee565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b615769565b346106dc5760406003193601126106dc576107c2600435614682816106cb565b60243590617ac1565b346106dc575f6003193601126106dc5760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346106dc5760206003193601126106dc576107c260043561af52565b346106dc576107c26146f23661453d565b9291909161afa2565b346106dc575f6003193601126106dc576107c2617a70565b346106dc5760406003193601126106dc576020610ee7600435614735816106cb565b60243590616111565b346106dc575f6003193601126106dc5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346106dc5760606003193601126106dc576004803561479f816106cb565b67ffffffffffffffff916024358381116106dc576147c190369060040161095a565b926044359081116106dc576147da903690600401610c6c565b916001600160a01b039081165f5b85518110156107c257806147fe60019287615818565b51835f526020908682526040906148348a8861481d87865f2093615818565b51166001600160a01b03165f5260205260405f2090565b927fffffffffffffffffffff0000000000000000000000000000000000000000000060ff75ff00000000000000000000000000000000000000000084519561487b87611015565b61488487611015565b74ffffffffffffffffffffffffffffffffffffffff0088549587015160081b16950151151560a81b16941691161717179055016147e8565b346106dc5760406003193601126106dc576020610ee76004356148de816106cb565b602435906162b8565b346106dc5760a06003193601126106dc5760043567ffffffffffffffff81116106dc5761491b614941913690600401610d73565b604435614927816106cb565b60643590614934826106cb565b608435926024359061afe7565b60408051928352602083019190915290f35b346106dc5761163b614964366106fb565b9133617cdc565b346106dc576101806003193601126106dc57600435614989816106cb565b6101607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126106dc576107c2906149c0610900565b906149c9610bf5565b82526149d3610c02565b60208301526149e0610c0f565b60408301526149ed610c1c565b60608301526149fa610c29565b6080830152614a07610c36565b60a0830152614a14610c43565b60c0830152614a21610c50565b60e0830152614a2e610c5e565b610100830152614a3c610bbd565b610120830152614a4a6106ed565b610140830152616335565b346106dc576001600160a01b03614a6b36612ad7565b911690815f525f602052600160405f20541615614ac457614ab190614aa4925f526003602052614aab60405f2060405194858092615859565b038461088f565b8261b10b565b9051604080519182526020820192909252f35b507f9e51bd5c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b346106dc576001600160a01b03614b0636612a64565b91165f525f60205260405f20907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb8254169060021b1790555f80f35b346106dc5760406003193601126106dc576020610ee7600435614b64816106cb565b602435906165e6565b346106dc575f6003193601126106dc577f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6106dc57005b346106dc5760406003193601126106dc57600435614bc2816106cb565b6001600160a01b03602435911690815f525f60205260405f2054670de0b5cad2bef0008211614bfc5764174876e80061131892049061b875565b7f746e5940000000000000000000000000000000000000000000000000000000005f5260045ffd5b346106dc57614c32366106fb565b9091614c3c6179f6565b303b156106dc57604051927fae6393290000000000000000000000000000000000000000000000000000000084526001600160a01b03809216600485015216602483015260448201525f8160648183305af180156107cb57614cbd575f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d005b614cc69061085f565b5f614638565b346106dc576107c2614cdd36613c0d565b907f000000000000000000000000000000000000000000000000000000000000000061b171565b346106dc5760406003193601126106dc576020610ee7600435614d26816106cb565b602435906166ee565b346106dc575f6003193601126106dc5760207f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6040519015158152f35b346106dc5760406003193601126106dc576001600160a01b03600435614d92816106cb565b165f52600860205260243560405f20555f80f35b346106dc5760606003193601126106dc57600435614dc3816106cb565b60243567ffffffffffffffff81116106dc57614de3903690600401610d73565b906001600160a01b0360443591614df983610aa1565b614e01615637565b50165f5260209060056020526040805f20602085015151935f6040870160a08801915b878110614e3957604051806112708b826113d9565b80614e50614e4a6001938551615818565b5161bb7d565b614e5b828651615818565b52805f52858552614e83886fffffffffffffffffffffffffffffffff895f205416838d61b7d2565b01614e24565b346106dc5760806003193601126106dc57600435614ea6816106cb565b67ffffffffffffffff6024358181116106dc57614ec790369060040161095a565b6044358281116106dc57614edf903690600401610d13565b916064359081116106dc57614f006001600160a01b03913690600401610d13565b93614f0e835185511461589d565b614f1b835186511461589d565b1691825f52602091600560205260409160405f20915f5b8151811015614f665780614f56614f4b60019386615818565b51611adb838c615818565b815f52858852865f205501614f32565b6107c282885f52600360205260405f20616076565b346106dc576040806003193601126106dc57600435614f99816106cb565b6024359067ffffffffffffffff82116106dc57366023830112156106dc57816004013591614fc683610942565b92614fd4604051948561088f565b8084526020906024602086019160071b840101923684116106dc57602401905b838210615005576107c28686616766565b6080823603126106dc5782608091885161501e81610843565b8435615029816106cb565b81528285013561503881610aa1565b8382015289850135615049816106cb565b8a8201526060808601359061505d82610bb3565b820152815201910190614ff4565b346106dc5761127061509961507f366113b4565b90615088615637565b506150916179f6565b611410615637565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d6040519182916020835260208301906110b8565b346106dc5760406003193601126106dc576001600160a01b036004356150f5816106cb565b165f525f60205260243560405f20555f80f35b346106dc5761511636612a64565b907f00000000000000000000000000000000000000000000000000000000000000005c5f527f000000000000000000000000000000000000000000000000000000000000000060205260405f20905f5260205260405f205d005b346106dc5760206003193601126106dc576151a1600435615190816106cb565b615198615b3f565b506107f06169d7565b6060600754604051906151b382610822565b600181161515918281526001604060208301928285811c1615158452019260021c161515825260405192835251151560208301525115156040820152f35b346106dc576060806003193601126106dc5767ffffffffffffffff906004358281116106dc5761522590369060040161095a565b906024358381116106dc5761523e903690600401613712565b926044359081116106dc576152579036906004016138fb565b615261835161594c565b935f5b8451811015615304578061528a6152806129bf60019489615818565b6129d6838a615818565b6152a661529a6129bf8386615818565b604061380c848b615818565b6152b661213f6129bf8386615818565b6152fb576152cb5f5b6020613841848b615818565b6152f56152e16152db8387615818565b51151590565b866152ec848b615818565b51019015159052565b01615264565b6152cb826152bf565b6040517fbb4ad7d50000000000000000000000000000000000000000000000000000000081525f818061388d8a60048301611f54565b346106dc5760206003193601126106dc576001600160a01b0360043561535f816106cb565b165f52600b602052602060405f2054604051908152f35b346106dc5760406003193601126106dc5760043567ffffffffffffffff81116106dc57610ee76153ac602092369060040161095a565b602435906153b9826106cb565b61b10b565b346106dc576125826153cf36610f8c565b916153d86179f6565b616ca2565b346106dc5761545961546c61127061122d61547a6153fa3661251e565b61540696919296615637565b506040519261543c602085018561541d8483616868565b0395615431601f199788810183528261088f565b51902092828a618470565b989294919390966112246040519182611218602082019586616868565b9160208901528782036040890152611085565b908582036060870152611085565b908382036080850152611177565b346106dc5760606003193601126106dc576004356154a5816106cb565b6001600160a01b03602435916154ba836106cb565b165f52600c6020526131c76044359160405f20906001600160a01b03165f5260205260405f2090565b908160209103126106dc5751610b2381610bb3565b6040513d5f823e3d90fd5b9092919261550f6169d7565b6001600160a01b03615543817f00000000000000000000000000000000000000000000000000000000000000001692615a72565b9261554c616a43565b90833b156106dc576155ae966156195f97936155e1899563ffffffff6040519c8d9b8c9a8b997f0e0677ab000000000000000000000000000000000000000000000000000000008b521660048a015261016060248a0152610164890190611ee5565b9516604487015280516001600160a01b0390811660648801526020820151811660848801526040909101511660a4860152565b60c484018590528051151560e48501526020810151151561010485015260408101511515610124850152606001511515610144840152565b03925af180156107cb5761562a5750565b80611c886106eb9261085f565b6040519061564482610873565b815f815260c060609182602082015282604082015282808201528260808201528260a08201520152565b6005111561101f57565b90600582101561101f5752565b90610b2391602081526001600160a01b03808351166020830152602083015116604082015260a06156c5604084015160c0606085015260e0840190611085565b92606081015160808401526156e1608082015183850190615678565b01519060c0601f1982850301910152611177565b156156fc57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f496e70757420706172616d65746572732068617665206368616e6765640000006044820152fd5b908160209103126106dc575190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b905f19820191821161465d57565b9190820391821161465d57565b604051906157be82610873565b606060c0835f81525f60208201528260408201525f838201525f60808201525f60a08201520152565b906157f182610942565b6157fe604051918261088f565b828152601f1961580e8294610942565b0190602036910137565b805182101561582c5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b9081548082526020809201925f5260205f20915f905b82821061587d575050505090565b83546001600160a01b03168552938401936001938401939091019061586f565b156158a457565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5661756c744d6f636b3a20544f4b454e535f4c454e4754485f4d49534d41544360448201527f48000000000000000000000000000000000000000000000000000000000000006064820152fd5b6040519061593582610843565b5f6060838281528260208201528260408201520152565b9061595682610942565b615963604051918261088f565b828152601f196159738294610942565b01905f5b82811061598357505050565b60209061598e615928565b82828501015201615977565b9060209182818303126106dc5780519067ffffffffffffffff82116106dc570181601f820112156106dc578051926159d184610942565b936040936159e2604051968761088f565b818652828087019260071b850101938185116106dc578301915b848310615a0c5750505050505090565b6080838303126106dc57836080918751615a2581610843565b8551615a30816106cb565b815282860151615a3f81610aa1565b8382015288860151615a50816106cb565b8982015260608087015190615a6482610bb3565b8201528152019201916159fc565b615a7c815161594c565b905f5b8151811015615ab25780615aac6001600160a01b03615aa060019486615818565b51166129d68387615818565b01615a7f565b50505f615aec91604051809381927fbb4ad7d500000000000000000000000000000000000000000000000000000000835260048301611f54565b03816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156107cb575f91615b2b575090565b610b2391503d805f833e6138ed818361088f565b60405190615b4c82610822565b5f6040838281528260208201520152565b615bb7615b8a6106eb9597969460c0946001600160a01b0361014091168552806020860152840190611ee5565b966040830190604090816001600160a01b0391828151168552826020820151166020860152015116910152565b5f60a082015201906060809180511515845260208101511515602085015260408101511515604085015201511515910152565b908160609103126106dc578051916040602083015192015190565b908160209103126106dc5751610b23816106cb565b919091615c5c615c567f000000000000000000000000000000000000000000000000000000000000000092835c159586615cde575b3691610ad2565b3361c24c565b92615c645750565b7f00000000000000000000000000000000000000000000000000000000000000005c615cb6575f905d6106eb7f000000000000000000000000000000000000000000000000000000000000000061a985565b7f20f1d86d000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001855d615c4f565b906118a3816060615f40615f0e615edc615eaa615e62615e1e615e14615e09615dfe615dcb615f709d8f610120615d98615d66615d37615da0946001600160a01b03165f525f60205260405f2090565b5460c08601511515907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe161790565b60e085015115157ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd9060011b91161790565b920151151590565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff79060031b91161790565b6101008c015115157ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb9060021b91161790565b60208b0151906191e1565b60408a01519061ad64565b878901519061ad75565b6080880151605a1b7003fffffffffc0000000000000000000000167ffffffffffffffffffffffffffffffffc0000000003ffffffffffffffffffffff919091161790565b60a087015160821b7403fffffffc00000000000000000000000000000000167ffffffffffffffffffffffffc00000003ffffffffffffffffffffffffffffffff919091161790565b945194855115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef9060041b91161790565b602085015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdf9060051b91161790565b604084015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf9060061b91161790565b91015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f9060071b91161790565b55565b6116e882611015565b51610b2381611015565b9190939293615f95835161594c565b925f5b81518110156160075780615fb46129cc6129bf60019486615818565b615fc9613835615fc48387615818565b615f7c565b615fe5615fd96129bf8388615818565b604061380c848a615818565b616001615ff56152db838b615818565b60606152ec848a615818565b01615f98565b50505050615aec9192505f90604051809381927fbb4ad7d500000000000000000000000000000000000000000000000000000000835260048301611f54565b90670de0b6b3a76400009182810292818404149015171561465d57565b8181029291811591840414171561465d57565b81519167ffffffffffffffff831161083e5768010000000000000000831161083e5781548383558084106160eb575b506160b86020809201925f5260205f2090565b905f5b8481106160c9575050505050565b600190826160de86516001600160a01b031690565b95019481850155016160bb565b825f528360205f2091820191015b81811061610657506160a5565b5f81556001016160f9565b908015801561619c575b616196576040517f38d52e0f000000000000000000000000000000000000000000000000000000008152916001600160a01b036020846004818585165afa80156107cb57616171945f91616177575b50166198a1565b50905090565b616190915060203d6020116130f7576130e9818361088f565b5f61616a565b50505f90565b506161e360206161ab83615796565b604051809381927fef8b30f7000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03816001600160a01b0387165afa9081156107cb575f91616206575b501561611b565b61621f915060203d6020116115e6576115d8818361088f565b5f6161ff565b9080519061623282611015565b61623b82611015565b82546020820151604092909201517fffffffffffffffffffff0000000000000000000000000000000000000000000090911660ff939093169290921760089190911b74ffffffffffffffffffffffffffffffffffffffff00161790151560a81b75ff00000000000000000000000000000000000000000016179055565b908015616196576040517f38d52e0f000000000000000000000000000000000000000000000000000000008152916001600160a01b036020846004818585165afa80156107cb57616311945f91616316575b501661a150565b505090565b61632f915060203d6020116130f7576130e9818361088f565b5f61630a565b6165b361659b61213f6101406106eb9561657261653f61650c6164da6164a86164766164446164126163e06163ae8f61637e906001600160a01b03165f525f60205260405f2090565b548b5115157ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdff9060091b91161790565b60208b015115157ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeff9060081b91161790565b60408a015115157ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbff90600a1b91161790565b606089015115157ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ff90600b1b91161790565b608088015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefff90600c1b91161790565b60a087015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdfff90600d1b91161790565b60c086015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbfff90600e1b91161790565b60e085015115157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fff90600f1b91161790565b61010084015115157ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffff9060101b91161790565b61012083015115157ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdffff9060111b91161790565b61658c876001600160a01b03165f525f60205260405f2090565b5501516001600160a01b031690565b916001600160a01b03165f52600260205260405f2090565b906001600160a01b03167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b9080158015616665575b616196576040517f38d52e0f000000000000000000000000000000000000000000000000000000008152916001600160a01b036020846004818585165afa80156107cb57616171945f91616646575b501661a358565b61665f915060203d6020116130f7576130e9818361088f565b5f61663f565b506166ac602061667483615796565b604051809381927f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03816001600160a01b0387165afa9081156107cb575f916166cf575b50156165f0565b6166e8915060203d6020116115e6576115d8818361088f565b5f6166c8565b908015616196576040517f38d52e0f000000000000000000000000000000000000000000000000000000008152916001600160a01b036020846004818585165afa80156107cb57616311945f91616747575b5016619b0b565b616760915060203d6020116130f7576130e9818361088f565b5f616740565b91905f5b815181101561684b5760019061684560206167f2816167898588615818565b5101519161679683611015565b60406167e96001600160a01b03826167ae898c615818565b5101511660606167be898c615818565b5101511515936167d98451976167d389610822565b88615f73565b8601906001600160a01b03169052565b83019015159052565b616840616810886001600160a01b03165f52600460205260405f2090565b61682b61681d8689615818565b51516001600160a01b031690565b6001600160a01b03165f5260205260405f2090565b616225565b0161676a565b50509050565b6004111561101f57565b90600482101561101f5752565b90610b2391602081526001600160a01b0380835116602083015260208301511660408201526040820151606082015260a06168b2606084015160c0608085015260e0840190611085565b926156e160808201518385019061685b565b7ff2238896000000000000000000000000000000000000000000000000000000005f5260045ffd5b346168c457365f80375f8036816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af43d5f803e15616932573d5ff35b3d5ffd5b6001600160a01b0316805f525f60205260405f205460018160021c169063ffffffff8091616962608290565b1c168261699e575b50506169735750565b7fd971f597000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b908092507f0000000000000000000000000000000000000000000000000000000000000000160181811161465d57164211155f8061696a565b63ffffffff7f00000000000000000000000000000000000000000000000000000000000000001642111580616a35575b616a0d57565b7fda9f8b34000000000000000000000000000000000000000000000000000000005f5260045ffd5b506001600754811c16616a07565b616a4b615928565b50616a54615928565b600160208201526001604082015290565b9190918051616a7381611015565b616a7c81611015565b616ac85790616abf670de0b6b3a764000093616ab86080616ac49501519360a0616aac60c0850151835190615818565b51930151905190615818565b5192616063565b616063565b0490565b610b2392616afe6121e86080616b049401519460a0616af2602060c0870151930192835190615818565b51940151905190615818565b92616063565b61b824565b9080601f830112156106dc57815190602091616b2481610942565b93616b32604051958661088f565b81855260208086019260051b8201019283116106dc57602001905b828210616b5b575050505090565b81518152908301908301616b4d565b81601f820112156106dc57805190616b8182610ab6565b92616b8f604051948561088f565b828452602083830101116106dc57815f9260208093018386015e8301015290565b916080838303126106dc5782519067ffffffffffffffff918281116106dc5783616bdb918601616b09565b9360208101519360408201518481116106dc5781616bfa918401616b09565b9360608301519081116106dc57610b239201616b6a565b93616c3b616c4e936001600160a01b03610b2398969416875260a0602088015260a0870190611085565b9160408601528482036060860152611085565b916080818403910152611177565b906001820180921161465d57565b9190820180921161465d57565b91616c9490610b2394928452606060208501526060840190611085565b916040818403910152611085565b9190616cac6179f6565b6060616cb6615b3f565b9160208501616cc98151518086526157e7565b60808301958651616cd98161566e565b616ce28161566e565b616fc257506060830151616cf686516157e7565b94616d328260808b0151616d2c616d1489516001600160a01b031690565b6001600160a01b03165f52601160205260405f205490565b9061b6e7565b995b6060860151808410616f925750616d4d839998996197b4565b60208901975f5b8c8b51821015616ead5781616d6891615818565b51616d72816197b4565b616d7c8288615818565b51616e9c57616da3908d6142b78460a0616d9a8260c0860151615818565b51930151615818565b80616dae8389615818565b525b616dbe6129bf838a51615818565b60408a01616dcd848251615818565b518311616e5057508d83616e448e616e3c8f968f97616e2786616e1f818b60019e9d616dfc88616e4a9f6197c5565b616e18616e098489615818565b5191516001600160a01b031690565b908d61afe7565b875292615818565b52616e36856060880151615818565b51616c6a565b9051906157a4565b9161b742565b01616d54565b91616e5f846124209451615818565b517f8eda85e4000000000000000000000000000000000000000000000000000000005f526001600160a01b03909216600452602452604452606490565b50616ea78187615818565b51616db0565b5050939694509650965096616ed290616ecd85516001600160a01b031690565b6172f9565b7fa26a52d8d53702bba7f137907b8e1f99ff87f6d450144270ca25e72481cca871616f0484516001600160a01b031690565b92616f25896020870195616f1f87516001600160a01b031690565b9061a837565b616f59616d14616f4d616f3f88516001600160a01b031690565b96516001600160a01b031690565b9451966129bf8861566e565b92616f816001600160a01b0392616f6f8861566e565b88846040519586951698169684616c77565b0390a4616f8c617a4b565b93929190565b7f8d261d5d000000000000000000000000000000000000000000000000000000005f52600484905260245260445ffd5b60038751616fcf8161566e565b616fd88161566e565b03616ffa57616fe7885161b6b2565b616ff181516157e7565b945f9199616d34565b97600187516170088161566e565b6170118161566e565b0361707957617020885161b1e0565b6170718961703284604088015161b413565b60808a01519061704c616d1488516001600160a01b031690565b6170568c5161b2a3565b9161706b61213f8a516001600160a01b031690565b9361b462565b959091616d34565b9793600287516170888161566e565b6170918161566e565b03617112579787986170a3895161b1e0565b6060850151916170b28761b214565b61710c61710260408b0192808452898b9f886080820151936170fc61213f6170ee6170e7616d1488516001600160a01b031690565b955161b2a3565b95516001600160a01b031690565b9461b2e8565b9092519099615818565b52616d34565b50600486516171208161566e565b6171298161566e565b036171ea57617138875161b1ab565b5f61715061213f61213f86516001600160a01b031690565b60608501519060808a0151918360a08801519861719d6040519a8b96879586947fe4c436630000000000000000000000000000000000000000000000000000000086523360048701616c11565b03925af19384156107cb575f905f955f915f916171bf575b5090959199616d34565b925050506171e09194503d805f833e6171d8818361088f565b810190616bb0565b919592915f6171b5565b7f6c02b395000000000000000000000000000000000000000000000000000000005f5260045ffd5b9093925f94617225846080850151615818565b51818111617235575b5050505050565b6172629596509161724a9161725b930361b824565b9260a0616d9a8260c0860151615818565b519161b846565b905f8080808061722e565b7fb4120f14000000000000000000000000000000000000000000000000000000005f5260045ffd5b906fffffffffffffffffffffffffffffffff8083119081156172ef575b506172c75760801b90810180911161465d5790565b7f89560ca1000000000000000000000000000000000000000000000000000000005f5260045ffd5b905081115f6172b2565b6001600160a01b0390929192165f52602060056020526040805f205f5b60608601518051821015617353579061734361733482600194615818565b51611adb8360808b0151615818565b815f52838652845f205501617316565b50505050509050565b916173656179f6565b6001600160a01b0382165f526005602052604090815f20915f602052805f2054916004602052815f206003602052825f209485549488526173a9602089019661b8d6565b86526173b48561b8f1565b938089019485526173c4866157e7565b9260608a019384526173d5876157e7565b60808b01526173e5878b5161c515565b60c08b01526173f3876157e7565b60a08b019081528a5191600199600184811c1693846175aa575b5083617598575b5f5b8d8b821061747557505050505050505050505050508061746561744d61746c936001600160a01b03165f52600560205260405f2090565b916001600160a01b03165f52600660205260405f2090565b908361b97e565b906106eb617a4b565b908a8a8e938a6174c0856174ac8161749e6174998d61682b6129bf8f869051615818565b61b93f565b94905f5260205260405f2090565b549551836174ba8383615818565b52615818565b506174ca8161bb7d565b6174d5868b51615818565b526174f4836fffffffffffffffffffffffffffffffff8616878561b7d2565b891561758f57856175078c830151151590565b9182617571575b505061751f575b5050505b01617416565b836175458d8261753a81617533875161c571565b9351615818565b519660801c85617212565b9384617553575b5050617515565b61756694617560916157a4565b9161b7d2565b5f8f8b90838361754c565b9091505161757e81611015565b61758781611015565b14855f61750e565b50505050617519565b8c5190935060031c6001161592617414565b6175b591945061c571565b1515925f61740d565b6175c6615637565b906175cf6179f6565b6001600160a01b0381165f5260056020526040805f205f602052815f2054906004602052825f20906003602052835f20938454938752617612602088019561b8d6565b855261761d8461b8f1565b9181880192835261762d856157e7565b916060890192835261763e866157e7565b9460809560808b0152617652878b5161c515565b60c08b0152617660876157e7565b60a08b019081528a5191600199600184811c1693846177d6575b50836177c4575b5f5b8d8b82106176c257505050505050505050505050508061746561744d6176ba936001600160a01b03165f52600560205260405f2090565b610b23617a4b565b908a8d92828c8c8c6176f6846176e88161749e6174998f8f6129bf8561682b9251615818565b549451836174ba8383615818565b506177008161bb7d565b61770b858d51615818565b526177296fffffffffffffffffffffffffffffffff8416858761b742565b878d8d156177b75782015115159182617799575b5050617750575b50505050505b01617683565b826177739261776a82617763885161c571565b9451615818565b51961c85617212565b9283617783575b8e93508c617744565b61779093616e44916157a4565b5f8f828261777a565b909150516177a681611015565b6177af81611015565b14875f61773d565b505050505050505061774a565b8c5190935060031c6001161592617681565b6177e191945061c571565b1515925f61767a565b6177f2615637565b906177fb6179f6565b6001600160a01b0381165f5260056020526040805f205f602052815f2054906004602052825f20906003602052835f2093845493875261783e602088019561b8d6565b85526178498461b8f1565b91818801928352617859856157e7565b916060890192835261786a866157e7565b9460809560808b015261787e878b5161c515565b60c08b015261788c876157e7565b60a08b019081528a5191600199600184811c1693846179e2575b50836179d0575b5f5b8d8b82106178e657505050505050505050505050508061746561744d6176ba936001600160a01b03165f52600560205260405f2090565b908a8d92828c8c8c61790c846176e88161749e6174998f8f6129bf8561682b9251615818565b506179168161bb7d565b617921858d51615818565b5261793f6fffffffffffffffffffffffffffffffff8416858761b78f565b878d8d156179c357820151151591826179a5575b5050617966575b50505050505b016178af565b826179799261776a82617763885161c571565b9283617989575b8e93508c61795a565b61799c93617996916157a4565b9161b78f565b5f8f8282617980565b909150516179b281611015565b6179bb81611015565b14875f617953565b5050505050505050617960565b8c5190935060031c60011615926178ad565b6179ed91945061c571565b1515925f6178a6565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805c617a23576001905d565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d565b7f00000000000000000000000000000000000000000000000000000000000000005c15617a9957565b7fc09ba736000000000000000000000000000000000000000000000000000000005f5260045ffd5b90617acb9061ba85565b907f8000000000000000000000000000000000000000000000000000000000000000821461465d576106eb915f039061adb5565b92919091617b0e82848661bada565b5f198103617b1d575050505050565b808211617ca15703906001600160a01b0392838116938415617c6c57808316958615617c375784617b7d85617b6786617b67866001600160a01b03165f52601060205260405f2090565b906001600160a01b03165f5260205260405f2090565b551692833b156106dc576040517f5687f2b80000000000000000000000000000000000000000000000000000000081526001600160a01b039283166004820152919092166024820152604481018290527fa0175360a15bca328baf7ea85c7b784d58b222a50d0ce760b10dba336d226a6191617c17915f8180606481015b038183895af1617c24575b506040519081529081906020820190565b0390a45f8080808061722e565b80611c88617c319261085f565b5f617c06565b7f94280d62000000000000000000000000000000000000000000000000000000005f526001600160a01b03841660045260245ffd5b7fe602df05000000000000000000000000000000000000000000000000000000005f526001600160a01b03821660045260245ffd5b6001600160a01b03837ffb8f41b2000000000000000000000000000000000000000000000000000000005f521660045260245260445260645ffd5b929091926001600160a01b0390818416918215617e7357808616918215617e3e57617d1c86617b67836001600160a01b03165f52600f60205260405f2090565b54808611617e0157859003617d4687617b67846001600160a01b03165f52600f60205260405f2090565b55617d6687617b67836001600160a01b03165f52600f60205260405f2090565b8581540190551691827fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f60405180617da388829190602083019252565b0390a4803b156106dc576040517f23de66510000000000000000000000000000000000000000000000000000000081526001600160a01b03938416600482015293909216602484015260448301525f90829081838160648101615619565b7fe450d38c000000000000000000000000000000000000000000000000000000005f526001600160a01b038716600452602452604485905260645ffd5b7fec442f05000000000000000000000000000000000000000000000000000000005f526001600160a01b03871660045260245ffd5b7f96c6fd1e000000000000000000000000000000000000000000000000000000005f526001600160a01b03851660045260245ffd5b919091617eb36157b1565b50805192617ec084611015565b6080604082015193015160c0602083519301519301519360405195617ee487610873565b617eed81611015565b865260208601526040850152606084015260808301523360a083015260c082015290565b90916001600160a01b03808416928315617e7357617f4485617b67836001600160a01b03165f52600f60205260405f2090565b5480841161803f57839003617f6e86617b67846001600160a01b03165f52600f60205260405f2090565b55617f9483617f8e836001600160a01b03165f52601160205260405f2090565b546157a4565b617f9d8161bb26565b617fb8826001600160a01b03165f52601160205260405f2090565b551690813b156106dc576040517f23de66510000000000000000000000000000000000000000000000000000000081526001600160a01b0390941660048501525f6024850181905260448501829052937fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f9161803a9186818060648101617bfb565b0390a4565b7fe450d38c000000000000000000000000000000000000000000000000000000005f526001600160a01b038616600452602452604483905260645ffd5b6001600160a01b0316805f525f602052600160405f2054811c161561809e5750565b7f4bdace13000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6106eb906107f06169d7565b036180dc57565b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b919082519161811782518251908561bb5e565b618120836157e7565b935f5b84811061813257505050505090565b8061815b61814260019385615818565b51616b046181508489615818565b51616ab88589615818565b6181658289615818565b5201618123565b95929361819d6181c195610b239997936181b3956001600160a01b038092168b521660208a0152604089019061685b565b606087015260e0608087015260e0860190611085565b9084820360a0860152611085565b9160c0818403910152611177565b5f6001600160a01b0360209596936182476181f187516001600160a01b031690565b9460808801519761820189616851565b60a0608060408301519c0151910151916040519b8c9a8b998a977fba5f9f400000000000000000000000000000000000000000000000000000000089526004890161816c565b0393165af19081156107cb575f9161828a575b501561826257565b7f2aaf8866000000000000000000000000000000000000000000000000000000005f5260045ffd5b6182a3915060203d6020116107c4576107ba818361088f565b5f61825a565b60208082015151925f5b8481106182c1575050505050565b60019061833860406fffffffffffffffffffffffffffffffff6182ea614e4a85848b0151615818565b9160a08901926182fb868551615818565b52845f528688525f20541690816183168560608b0151615818565b52618331846183298160c08c0151615818565b519251615818565b519161c6c4565b618346826080880151615818565b52016182b3565b60208082015151925f5b848110618365575050505050565b6001906183d460406fffffffffffffffffffffffffffffffff61838e614e4a85848b0151615818565b9160a089019261839f868551615818565b52845f528688525f20541690816183ba8560608b0151615818565b526183cd846183298160c08c0151615818565b519161c6db565b6183e2826080880151615818565b5201618357565b6080818303126106dc5780519260208201519167ffffffffffffffff928381116106dc5784618419918301616b09565b9360408201518481116106dc5781616bfa918401616b09565b9390610b239593616c4e936001600160a01b0361846293168752602087015260a0604087015260a0860190611085565b908482036060860152611085565b926184796179f6565b606091618484615b3f565b9260208601906184988251518087526157e7565b90608084019687516184a981616851565b6184b281616851565b61887057506040840151906184c787516157e7565b956184eb8360808c01516184e5616d148a516001600160a01b031690565b9061bf37565b9261855c7f00000000000000000000000000000000000000000000000000000000000000005c61852289516001600160a01b031690565b907f0000000000000000000000000000000000000000000000000000000000000000905f5260205260405f20905f5260205260405f205c90565b6187f3575b60408701518082116187c2575061857a819a999a6197b4565b60208a01985f5b8b518110156186a1578c6185958288615818565b5161859f816197b4565b6185a9838a615818565b5161868f578161725b8460a0616d9a8260c06185c6980151615818565b806185d1838a615818565b525b6185e16129bf838b51615818565b60608b016185f0848251615818565b51831061864357508e83616e448f8f8f966186379161861f86616e1f818b60019e9d616dfc8861863d9f617ac1565b5261862e856060880151615818565b51925190616c6a565b906157a4565b01618581565b91618652846124209451615818565b517f2f785e46000000000000000000000000000000000000000000000000000000005f526001600160a01b03909216600452602452604452606490565b505061869b8188615818565b516185d3565b509399509594509592986186c2919750616ecd85516001600160a01b031690565b7ffbe5b0d79fb94f1e81c0a92bf86ae9d3a19e9d1bf6202c0d3e75120f65d5d8a56186f484516001600160a01b031690565b9261871686602087019561870f87516001600160a01b031690565b3391617aff565b61871e61bf88565b618797575b6187498661873887516001600160a01b031690565b86516001600160a01b031690617f11565b61876f616d14618763616f3f88516001600160a01b031690565b9451966129bf88616851565b92616f816001600160a01b039261878588616851565b8c846040519586951698169684616c77565b6187bd866187ac87516001600160a01b031690565b86516001600160a01b03169061bf9d565b618723565b7f31d38e0b000000000000000000000000000000000000000000000000000000005f5260049190915260245260445ffd5b9894916188068b97949995929b5161b2a3565b9a5f5b865181101561886057808b6188598f936188536188428f8390618838600199618832848a615818565b5161b824565b6174ba8383615818565b5161884d8386615818565b516157a4565b92615818565b5201618809565b5091949893969a50919498618561565b94906001885161887f81616851565b61888881616851565b036188f757618897895161b1e0565b60408501519186928a6188f16188e78b8a60406188b7606083015161b214565b920194828652866080820151936188e161213f6170ee6170e7616d1488516001600160a01b031690565b9461be8a565b909251909a615818565b52618561565b6002889692965161890781616851565b61891081616851565b036189a35761891f895161b1e0565b61899c826060870190618943618935835161b214565b60408c019381855251615818565b5161894f835188615818565b528b618962608082015193518093615818565b5161898161897a616d148c516001600160a01b031690565b925161b2a3565b9261899661213f8c516001600160a01b031690565b9461bc82565b9690618561565b5093600387516189b281616851565b6189bb81616851565b03618a7c576189ca885161bc4d565b5f6189e261213f61213f87516001600160a01b031690565b9560408601519660808b0151918360a089015199618a306040519b8c96879586947fab68e28c0000000000000000000000000000000000000000000000000000000086523360048701618432565b03925af19485156107cb575f915f965f925f91618a51575b50919692618561565b9250509550618a7291503d805f833e618a6a818361088f565b8101906183e9565b919690915f618a48565b7f137a9a39000000000000000000000000000000000000000000000000000000005f5260045ffd5b9190916040818403126106dc578051618abc81610bb3565b92602082015167ffffffffffffffff81116106dc57610b239201616b09565b969394610b23989692618b4496618b15618b3696618b2895610100948d6001600160a01b0380931690521660208d015260408c019061685b565b60608a01528060808a0152880190611085565b9086820360a0880152611085565b9084820360c0860152611085565b9160e0818403910152611177565b949395929691908451618b6b906001600160a01b031690565b90608086015192618b7b84616851565b60808601518a60a0890151926040519b8c9788977f2754888d0000000000000000000000000000000000000000000000000000000089526004890197618bc098618adb565b03916001600160a01b031691815a5f948591f19384156107cb575f905f95618cdd575b50158015618cd1575b618ca9576001809360091c1615618c0a5792935090915f835b618c11575b5050505090565b8451811015618ca457618c248186615818565b516060840190618c35838351615818565b5111618c445750830183618c05565b618c678261832981618c616129bf8b9760206124209a0151615818565b95615818565b517ffbd8a724000000000000000000000000000000000000000000000000000000005f526001600160a01b03909216600452602452604452606490565b618c0a565b7f1d3391d8000000000000000000000000000000000000000000000000000000005f5260045ffd5b50835185511415618bec565b9050618cfc9194503d805f833e618cf4818361088f565b810190618aa4565b93905f618be3565b5f9491939293618d126179f6565b618d1a615b3f565b918051618d2681611015565b618d2f81611015565b156190ac575b602091828601618d45815161af52565b83618d9a81850198618d6461213f61213f8c516001600160a01b031690565b906040519c8d809481937f72c9818600000000000000000000000000000000000000000000000000000000835260048301611759565b03925af19889156107cb575f9961908d575b5088618db78161af52565b8351618dc281611015565b618dcb81611015565b61901d575060408201519052618e0360c08801516121ee6121e8618df487860193845190615818565b519260a08c0151905190615818565b9360808301519685979860a0850151808810618fed57505b60408501948a8651618e33906001600160a01b031690565b90618e3d916197c5565b60600195898751618e54906001600160a01b031690565b90618e5e91617ac1565b835183516001600160a01b031687516001600160a01b0316875191618e83938661afe7565b9190818601956040019283528552855160608401928d82855190618ea691615818565b5190618eb191616c6a565b9051618ebc916157a4565b618ec6918561b742565b85019182518b81845190618ed991615818565b5190618ee4916157a4565b618eee918361b742565b83516001600160a01b03165f9081526005602052604090209180518751618f1491615818565b51916080019182518851618f2791615818565b51618f3191617295565b8751618f459085905f5260205260405f2090565b55518351618f5291615818565b5190518351618f6091615818565b51618f6a91617295565b9151618f7d91905f5260205260405f2090565b5551925193516060928301519151604080518b8152602081018b905290810193909352928201929092526001600160a01b039182169382169291909116907f0874b2d545cb271cdbda4e093020c452328b24af12382ed62c4d00f5c26709db90608090a4939291906106eb617a4b565b7fe2ea151b000000000000000000000000000000000000000000000000000000005f52600488905260245260445ffd5b9050819850619044606061904d930151670de0b6b3a764000081810390821002908361c061565b90818652616c6a565b9661907261906160c0890151835190615818565b5161247760a08a0151845190615818565b93608083015196859860a0850151808811618fed5750618e1b565b6190a5919950843d86116115e6576115d8818361088f565b975f618dac565b602085016190c36124d1825160608601519061b824565b9052618d35565b81810392915f13801582851316918412161761465d57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b9061912b6fffffffffffffffffffffffffffffffff831661ba85565b905f9260801c80619149575b5050600291619145916190ca565b0590565b6001600160a01b03935090602460209260405195869384927fb3d7f6b90000000000000000000000000000000000000000000000000000000084526004840152165afa9081156107cb576191aa619145926002945f916191b3575b5061ba85565b92819250619137565b6191cc915060203d6020116115e6576115d8818361088f565b5f6191a4565b81156191dc570490565b6190e2565b90670de0b5cad2bef0008111614bfc5764174876e80090048060181c61922c577ffffffffffffffffffffffffffffffffffffffffffffffffffffffc000003ffff9060121b91161790565b7fe4337c05000000000000000000000000000000000000000000000000000000005f5260045ffd5b816192a76192b292949394619267615928565b95869161929d6020830180519061928d6001600160a01b0392836040870151169061b10b565b865251906060840151169061b10b565b6020840152616a65565b60408501525161b2a3565b6060830152565b602091926193095f6001600160a01b038094604051978896879586937f5211fa770000000000000000000000000000000000000000000000000000000085526040600486015260448501906116eb565b911660248301520393165af19081156107cb575f91619353575b501561932b57565b7fe91e17e7000000000000000000000000000000000000000000000000000000005f5260045ffd5b61936c915060203d6020116107c4576107ba818361088f565b5f619323565b91908260409103126106dc576020825161938b81610bb3565b92015190565b90926193e2604093946001600160a01b039384918651978896879586947fa0e8f5ac0000000000000000000000000000000000000000000000000000000086526060600487015260648601906116eb565b9216602484015260448301520392165afa9081156107cb575f905f92619443575b501561941b57670de0b5cad2bef0008111614bfc5790565b7f53f976d4000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050619467915060403d60401161946e575b61945f818361088f565b810190619372565b905f619403565b503d619455565b6101a0610b23926020835261948e6020840182516116de565b60208101516001600160a01b0316604084015260408101516001600160a01b0316606084015260608101516080840152608081015160a084015260a081015160c084015260c081015160e084015260e08101516101009081850152810151610120908185015281015161950f61014091828601906001600160a01b03169052565b8101519061952b61016092838601906001600160a01b03169052565b015191610180808201520190611177565b939590919492865161954d81611015565b61955681611015565b6197a55786604085015191845b82519461956f86611015565b604097889788860151619588906001600160a01b031690565b96606087015161959e906001600160a01b031690565b9360800192835181516195b091615818565b51935190602001516195c191615818565b519360208801516195d8906001600160a01b031690565b9760c00151986195e6610921565b9a6195f1908c615f73565b6001600160a01b031660208b01526001600160a01b0316898b01526060890152608088015260a087015260c086015260e085015261010084018890526001600160a01b03166101208401526001600160a01b0316610140830152610160820152815196878080937f18b6eb55000000000000000000000000000000000000000000000000000000008252600482019061968991619475565b03916001600160a01b03165a905f91f19485156107cb575f915f96619781575b5050156197595760091c60011615619753575080516196c781611015565b6196d081611015565b1580619746575b801561971b575b6196e6575090565b60a001517fcc0e4a99000000000000000000000000000000000000000000000000000000005f5260049190915260245260445ffd5b506001815161972981611015565b61973281611015565b1480156196de575060a081015182116196de565b5060a081015182106196d7565b91505090565b7f15a29dec000000000000000000000000000000000000000000000000000000005f5260045ffd5b61979c93965080919250903d1061946e5761945f818361088f565b93905f806196a9565b86604085015191849294619563565b806197bc5750565b6106eb9061af52565b612d906106eb9261ba85565b6001600160a01b0380911690815f52600e6020528060405f20541692168092036197f9575050565b7f36b18d09000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b907f0000000000000000000000000000000000000000000000000000000000000000116198515750565b6001600160a01b03907f18fe7385000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b9190915f838201938412911290801582169115161761465d57565b926198f6936001600160a01b038316926198ba85615796565b604051907fef8b30f700000000000000000000000000000000000000000000000000000000825281806020998a93600483019190602083019252565b0381885afa80156107cb57619912915f91619aee575b50615796565b948096619930836001600160a01b03165f52600b60205260405f2090565b549161993a61bf88565b619ae457509181889388959360801c90868210155f146199b4575050926199a996926199af9261998f8661998a856fffffffffffffffffffffffffffffffff8b6106eb9c9b60801c039316616c6a565b617295565b9889916001600160a01b03165f52600b60205260405f2090565b556197c5565b617ac1565b91929450969294506199df6199da6199cc868561910f565b6199d58c61ba85565b619886565b61c081565b946199eb86858361c1ce565b6040517f6e553f65000000000000000000000000000000000000000000000000000000008152600481018790523060248201529482866044815f895af180156107cb576199a999619a998c619a8e8f9761998f956106eb9d8a6199af9c869f8f95908d915f96619a9f575b5050619a8e9291619a8886868985619a83619a939b9c6fffffffffffffffffffffffffffffffff9861c0b6565b61af0d565b16616c6a565b6157a4565b94616c6a565b90617295565b619a9396506fffffffffffffffffffffffffffffffff9286619ad6619a8e97969484619a8895903d106115e6576115d8818361088f565b985050925081939450619a56565b9750909450505050565b619b059150883d8a116115e6576115d8818361088f565b5f61990c565b92619b6292936001600160a01b03831692619b2586616c5c565b6040517fb3d7f6b9000000000000000000000000000000000000000000000000000000009182825281806020998a93600483019190602083019252565b0381895afa80156107cb57619b7e915f91619d51575b50616c5c565b9087968298619b9e856001600160a01b03165f52600b60205260405f2090565b5493619ba861bf88565b619d44575050918893918895938260801c91878310155f14619bfb57505050926199a996926199af9261998f8661998a856fffffffffffffffffffffffffffffffff8b6106eb9c9b60801c039316616c6a565b9295509295509692619c216199da619c13888861ae78565b619c1c8c61ba85565b6190ca565b60405192835260048301819052918381602481885afa80156107cb57619c50915f91619d27575b50858361c1ce565b6040517f94bf804d000000000000000000000000000000000000000000000000000000008152600481018390523060248201529583876044815f895af19586156107cb576199a999619a998c619a8e8f97619a938b849d6106eb9f61998f99856199af9f8f938f915f96619ce8575b50506fffffffffffffffffffffffffffffffff9291858783619a83619a8e999a619a889661c0b6565b619a8e965091619d1b6fffffffffffffffffffffffffffffffff95949284619a8895903d106115e6576115d8818361088f565b96509181939450619cbf565b619d3e9150853d87116115e6576115d8818361088f565b5f619c48565b9950975091955050505050565b619d689150883d8a116115e6576115d8818361088f565b5f619b78565b939091619d7a85611015565b8415801561a0c757619d9060206161ab87615796565b03816001600160a01b0387165afa80156107cb57619db4915f9161a0ae5750615796565b94955b619dd2836001600160a01b03165f52600b60205260405f2090565b5491619ddc61bf88565b61a0a657869288929091608083901c91858310619e4f5750505092619e4982619e2c8661998a6001600160a01b03966fffffffffffffffffffffffffffffffff896106eb9b60801c039316616c6a565b97886199a9856001600160a01b03165f52600b60205260405f2090565b16617ac1565b90929350619e5e919450611015565b15619f5357619e7c6199da619e73858461910f565b6199d58a61ba85565b926001600160a01b03811693619e9381868961c1ce565b6040517f6e553f650000000000000000000000000000000000000000000000000000000081526004810182905230602482015294602090869060449082905f905af180156107cb57619e2c8995619a9987619a8e6001600160a01b038f96888f896106eb9f859e619a888f619e499f619a8e96619a93996fffffffffffffffffffffffffffffffff965f91619f34575b509a8b935b1690619a83828261c0b6565b619f4d915060203d6020116115e6576115d8818361088f565b5f619f23565b9091619f6e6199da619f65838561ae78565b619c1c8961ba85565b6040517fb3d7f6b9000000000000000000000000000000000000000000000000000000008152600481018290526001600160a01b038316936020939290918481602481895afa80156107cb57619fcd915f9161a089575b50868a61c1ce565b6040517f94bf804d00000000000000000000000000000000000000000000000000000000815260048101829052306024820152948490869060449082905f905af19182156107cb576106eb96619a998b619a8e858f966001600160a01b038f896fffffffffffffffffffffffffffffffff879f9a849f8f96619e499f97619a8e96619e2c9f99619a939a619a88955f9261a06c575b5050988992619f28565b61a0829250803d106115e6576115d8818361088f565b5f8061a062565b61a0a09150863d88116115e6576115d8818361088f565b5f619fc5565b509093505050565b619b05915060203d6020116115e6576115d8818361088f565b61a10d602061a0d587616c5c565b604051809381927fb3d7f6b9000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03816001600160a01b0387165afa80156107cb5761a131915f9161a1375750616c5c565b95619db7565b619d68915060203d6020116115e6576115d8818361088f565b909261a1a792936001600160a01b0381169061a16b86616c5c565b604051907f0a28a47700000000000000000000000000000000000000000000000000000000825281806020988993600483019190602083019252565b0381865afa80156107cb5761a1c2915f9161a3415750616c5c565b8695819761a1e1846001600160a01b03165f52600b60205260405f2090565b549261a1eb61bf88565b61a3355750509186939188936fffffffffffffffffffffffffffffffff9081831690878210155f1461a242575050926199af9261998f83886199a99b9761a23a8a6106eb9c9b9860801c616c6a565b921603617295565b929894965094505061a2636199da61a25a848a61910f565b619c1c8b61ba85565b6040517fb460af9400000000000000000000000000000000000000000000000000000000815260048101829052306024820181905260448201529095909282846064815f865af19384156107cb576199a999619a99846199af978f8f6106eb9d819d8d61998f99859d5f9761a2fc575b505091619a8e9161a2ee8783619a8e999a61a2f3989761afa2565b616c6a565b9460801c616c6a565b619a8e9750849261a2f3969561a326619a8e96948461a2ee95903d106115e6576115d8818361088f565b9950509294955081935061a2d3565b98509650909450505050565b619d689150873d89116115e6576115d8818361088f565b9261a3af939291926001600160a01b03841661a37384615796565b604051907f4cdad50600000000000000000000000000000000000000000000000000000000825281806020998a93600483019190602083019252565b0381855afa80156107cb5761a3ca915f91619aee5750615796565b94849661a3e8826001600160a01b03165f52600b60205260405f2090565b549561a3f261bf88565b61a50a5750869392889290916fffffffffffffffffffffffffffffffff9088821687811061a43d57505091839161998f89886199af9661a23a6106eb9b9a996199a99e60801c616c6a565b929650929493505061a4556199da6199cc878a61ae78565b6040517fba08765200000000000000000000000000000000000000000000000000000000815260048101829052306024820181905260448201529590949083876064815f865af19283156107cb576199a999619a9988619a8e8f8f9b8c619a8e6106eb9f9b61998f998f946199af9f879f968f919761a2f3985f9661a4e3575b505061a2ee9291859161afa2565b61a2ee94939650908161a50192903d106115e6576115d8818361088f565b9491925f61a4d5565b975050505050565b939061a51d85611015565b841594851561a7b95761a534602061667487615796565b03816001600160a01b0389165afa80156107cb5761a558915f9161a0ae5750615796565b94955b61a576856001600160a01b03165f52600b60205260405f2090565b549161a58061bf88565b61a0a65787938793909290916fffffffffffffffffffffffffffffffff918284169186831061a5f357505050936001600160a01b0361a5ce83866106eb9861a23a866199af9860801c616c6a565b978861a5eb826001600160a01b03165f52600b60205260405f2090565b555b166197c5565b91965092945061a6039150611015565b1561a6f35761a6186199da619e73878561ae78565b6040517fba087652000000000000000000000000000000000000000000000000000000008152600481018290523060248201819052604482015293906020856064815f6001600160a01b038c165af180156107cb5761a6b18995619a9984619a8e8e61a2f38b8f6001600160a01b036106eb9f9c61a2ee8f9d6199af9f94889f859f619a8e975f9161a6d4575b509586925b169061afa2565b978861a6ce826001600160a01b03165f52600b60205260405f2090565b5561a5ed565b61a6ed915060203d6020116115e6576115d8818361088f565b5f61a6a5565b61a7036199da619f65878561910f565b6040517fb460af940000000000000000000000000000000000000000000000000000000081526004810182905230602482018190526044820152906020826064815f6001600160a01b038c165af19182156107cb5761a6b18995619a996001600160a01b03619a8e8e61a2f38b8f8a6106eb9f61a2ee8f936199af9f9e889f958b9f96619a8e975f9161a79a575b509b8c9361a6aa565b61a7b3915060203d6020116115e6576115d8818361088f565b5f61a791565b61a7ff602061a7c787616c5c565b604051809381927f0a28a477000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03816001600160a01b0389165afa80156107cb5761a823915f9161a1375750616c5c565b9561a55b565b90610b239160801c90617295565b916001600160a01b0380831693841561a9505761a86f8361a869836001600160a01b03165f52601160205260405f2090565b54616c6a565b61a88e85617b67846001600160a01b03165f52600f60205260405f2090565b84815401905561a89d8161bb26565b61a8b8826001600160a01b03165f52601160205260405f2090565b5516925f847fd1398bee19313d6bf672ccb116e51f4a1a947e91c757907f51fbb5b5e56c698f6040518061a8f187829190602083019252565b0390a4823b156106dc576040517f23de66510000000000000000000000000000000000000000000000000000000081525f600482018190526001600160a01b039093166024820152604481019190915291829081838160648101615619565b7fec442f05000000000000000000000000000000000000000000000000000000005f526001600160a01b03841660045260245ffd5b805c906001820180921161465d575d565b905f5260205260405f20905f52602052600160405f205d565b919082519161a9c282518251908561bb5e565b61a9cb836157e7565b935f5b84811061a9dd57505050505090565b80670de0b6b3a764000061aa0f61a9f660019486615818565b51616abf61aa04858a615818565b51616ab8868a615818565b0461aa1a8289615818565b520161a9ce565b95919361aa52610b2398969461aa63936181c1976001600160a01b038092168b521660208a01526040890190615678565b60e0606088015260e0870190611085565b91608086015284820360a0860152611085565b925f6001600160a01b0360209596939661aaf061aa9a87516001600160a01b031690565b9460808801519761aaaa8961566e565b60a060806060830151930151910151916040519b8c9a8b998a977f45421ec70000000000000000000000000000000000000000000000000000000089526004890161aa21565b0393165af19081156107cb575f9161ab33575b501561ab0b57565b7f0b2eb652000000000000000000000000000000000000000000000000000000005f5260045ffd5b61ab4c915060203d6020116107c4576107ba818361088f565b5f61ab03565b9692610b2398969461aba89361ab8c61ab9a93618b449995610100938d6001600160a01b0380931690521660208d015260408c0190615678565b8060608b0152890190611085565b908782036080890152611085565b9160a086015284820360c0860152611085565b94939195929690845161abd4906001600160a01b031690565b60808601519161abe38361566e565b608086015160a0880151906040968c6040519c8d9788977f976907cc000000000000000000000000000000000000000000000000000000008952600489019761ac2b9861ab52565b03916001600160a01b031691815a5f948591f19485156107cb575f905f9661ad45575b5015801561ad39575b61ad11576001809460091c161561ac7757909192809495505f905b61ac7f575b505050505090565b855181101561ad0c5761ac928187615818565b518285019061aca2838351615818565b511061acb1575084018461ac72565b869061accf8361832981618c616129bf6124209860208c0151615818565b517fcefa3afa000000000000000000000000000000000000000000000000000000005f526001600160a01b03909216600452602452604452606490565b61ac77565b7fe1249165000000000000000000000000000000000000000000000000000000005f5260045ffd5b5084518651141561ac57565b905061ad5c9195503d805f833e618cf4818361088f565b94905f61ac4e565b64174876e800610b2392049061b875565b90670de0b5cad2bef0008111614bfc57610b239164174876e800604292049061b88f565b906fffffffffffffffffffffffffffffffff610b239216617295565b90801561ae74577f0000000000000000000000000000000000000000000000000000000000000000916001600160a01b0381165f528260205261adfd60405f205c9283619886565b918261ae3d57507f000000000000000000000000000000000000000000000000000000000000000092835c5f19810190811161465d576106eb945d61b171565b926106eb9361b1715761ae6f7f000000000000000000000000000000000000000000000000000000000000000061a985565b61b171565b5050565b9061ae858260801c61ba85565b906fffffffffffffffffffffffffffffffff5f93168061aead575050600291619145916190ca565b6001600160a01b03935090602460209260405195869384927f0a28a4770000000000000000000000000000000000000000000000000000000084526004840152165afa9081156107cb576191aa619145926002945f916191b3575061ba85565b9291906001600160a01b038085165f52600860205260405f205492830392831161465d5781165f52600860205260405f205492830180931161465d576106eb9361c26a565b7f00000000000000000000000000000000000000000000000000000000000000001161af7a57565b7f1ed4d118000000000000000000000000000000000000000000000000000000005f5260045ffd5b9291906001600160a01b038085165f52600860205260405f205492830180931161465d5781165f52600860205260405f205492830392831161465d576106eb9361c26a565b91949290945f955f958161affc575050505050565b84975061725b61b0158260c061b0219697980151615818565b519160a08a0151615818565b945160018160031c161561b037575b808061722e565b62ffffff91929450602a1c1664174876e8009081810291818304149015171561465d5761b06d670de0b6b3a76400009186616063565b049284841161b0e35780617b6761b0c261b09f61b0da94617b67876001600160a01b03165f52600660205260405f2090565b5461b0bc886fffffffffffffffffffffffffffffffff8316616c6a565b9061a829565b936001600160a01b03165f52600660205260405f2090565b555f808061b030565b7f4c69ac5d000000000000000000000000000000000000000000000000000000005f5260045ffd5b905f5b825181101561b13c576001600160a01b038061b12a8386615818565b5116908316146197535760010161b10e565b6001600160a01b03827fddef98d7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b906001600160a01b03165f5260205260405f205d565b670de0b6b3a764000080820402810361b19d5790565b6001810180911161465d5790565b60051c6001161561b1b857565b7f4876c0bc000000000000000000000000000000000000000000000000000000005f5260045ffd5b60041c60011661b1ec57565b7fd4f5779c000000000000000000000000000000000000000000000000000000005f5260045ffd5b80519081905f5b82811061b25657505081101561b22e5790565b7f7e46bddc000000000000000000000000000000000000000000000000000000005f5260045ffd5b61b2608183615818565b5161b26e575b60010161b21b565b92820361b27b578261b266565b7f6b8c3be5000000000000000000000000000000000000000000000000000000005f5260045ffd5b62ffffff9060121c1664174876e8009081810291818304149015171561465d5790565b61b2de60409295949395606083526060830190611085565b9460208201520152565b909491602061b34e61b302866001600160a01b0394616c6a565b9461b30d878761c008565b61b317818361c471565b6040519485809481937f16a0b3e00000000000000000000000000000000000000000000000000000000083528d8a6004850161b2c6565b0392165afa80156107cb5761b3d995619a8e61b3ad8561b3c39461b3cc998c998a61b3d3995f9461b3dc575b509061b3a161b39a61b39361b3a8946186379798615818565b51876157a4565b9c8c615818565b5190616063565b6191d2565b91670de0b6b3a76400008181039110028261c008565b938492516157e7565b9586615818565b52616c6a565b91565b618637945061b39a61b39361b3a8949361b40761b3a19460203d6020116115e6576115d8818361088f565b9750939450505061b37a565b90602080835161b4248451826180d5565b60051b930191015e565b9190602061b4455f92604086526040860190611085565b930152565b9190602061b445600192604086526040860190611085565b92919093835161b471816157e7565b9161b47b826157e7565b965f5b83811061b6775750506001600160a01b03811691604051957f984de9e8000000000000000000000000000000000000000000000000000000009283885260209889898061b4ce846004830161b42e565b0381895afa9889156107cb575f9961b658575b506040518581528a818061b4f88b6004830161b44a565b03818a5afa9081156107cb578a61b3a861b5339361b52c938f5f9261b63b575b9b999d9c9a98979695949392919050616046565b809361c471565b5f5b89811061b5a2575050505061b559955060405180968194829383526004830161b44a565b03915afa9182156107cb578361b3a89361b57f9261b3d9975f9261b585575b50506157a4565b90616063565b61b59b9250803d106115e6576115d8818361088f565b5f8061b578565b869899959750838d83949596988361b5c661b5bf82600198615818565b518961c45e565b8061b5d18385615818565b511161b5ed575b505050505001908a969498979593929161b535565b818361b60e61b6269761b6189461b6078561b61f99615818565b510361b824565b6174ba8388615818565b5192615818565b51906157a4565b61b630828b615818565b52848d8a835f61b5d8565b61b6519250803d106115e6576115d8818361088f565b5f8f61b518565b61b6709199508a3d8c116115e6576115d8818361088f565b975f61b4e1565b8061b6a161b69c61b68a6001948c615818565b5161b6958487615818565b5190616c6a565b615796565b61b6ab8288615818565b520161b47e565b60071c6001161561b6bf57565b7fefe0265d000000000000000000000000000000000000000000000000000000005f5260045ffd5b929161b6f384516157e7565b935f5b815181101561b728578061b717858561b71160019587615818565b5161c061565b61b7218289615818565b520161b6f6565b50505050565b90610b239261b73c91616063565b9061c008565b91906080670de0b6b3a764000061b7866116e8948061b7658660608a0151615818565b52616abf61b7778660c08a0151615818565b51616ab88760a08b0151615818565b04930151615818565b9190608061b7ca6116e8938061b7a9856060890151615818565b52616b0461b7bb8560c0890151615818565b51616ab88660a08a0151615818565b930151615818565b9261b7ca6116e8936080928161b7ec8660608a0151615818565b5261b7f681611015565b61b81c576002905b61b80c8560c0890151615818565b51906144ad8660a08a0151615818565b60019061b7fe565b9061b82e91616063565b6001670de0b6b3a76400005f19830104019015150290565b9161b85091616063565b90670de0b6b3a76400009081810291818304149015171561465d5781156191dc570490565b908060181c61922c57602a1b9062ffffff602a1b19161790565b906101008084101561726d5783810390811161465d578060ff105f1461b8d1575060ff5b60181161726d578060181c61922c5762ffffff90831b921b19161790565b61b8b3565b906106eb61b8ea9260405193848092615859565b038361088f565b9061b8fb82610942565b61b908604051918261088f565b828152601f1961b9188294610942565b01905f5b82811061b92857505050565b60209061b933615b3f565b8282850101520161b91c565b9060405161b94c81610822565b604060ff82945481811661b95f81611015565b84526001600160a01b038160081c16602085015260a81c161515910152565b60608101805151935f5b85811061b99757505050505050565b8061b9ab6129bf6001936020880151615818565b61b9d661b9c08389905f5260205260405f2090565b546fffffffffffffffffffffffffffffffff1690565b61b9e1838751615818565b51811161ba21575b505061ba0861b9f9828651615818565b51611adb836080890151615818565b61ba1a8288905f5260205260405f2090565b550161b988565b61ba6561ba7d9161ba5f61ba5661ba49868a906001600160a01b03165f5260205260405f2090565b549261b61f888c51615818565b8260801c616c6a565b9061ad99565b9185906001600160a01b03165f5260205260405f2090565b555f8061b9e9565b7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811161baaf5790565b7f24775e06000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6001600160a01b0392918381168484160361baf857505050505f1990565b61bb2293617b6792165f52601060205260405f20906001600160a01b03165f5260205260405f2090565b5490565b620f4240811061bb335750565b7fd38d20fc000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b8114801592919061bb72575b50506180dc57565b141590505f8061bb6a565b805161bb8881611015565b61bb9181611015565b8061bba4575050670de0b6b3a764000090565b8061bbb0600192611015565b0361bc2557602061bbcf61213f8260049401516001600160a01b031690565b604051928380927f679aefce0000000000000000000000000000000000000000000000000000000082525afa9081156107cb575f9161bc0c575090565b610b23915060203d6020116115e6576115d8818361088f565b7fdf450632000000000000000000000000000000000000000000000000000000005f5260045ffd5b60061c6001161561bc5a57565b7fcf0a95c0000000000000000000000000000000000000000000000000000000005f5260045ffd5b909492919281519461bc93866157e7565b945f5b87811061be63575061bcac9061884d8988615818565b61bcb68887615818565b52604051947f984de9e800000000000000000000000000000000000000000000000000000000928387526020878061bcf1886004830161b42e565b03816001600160a01b0385165afa9687156107cb575f9761be42575b50604051948486526020868061bd26866004830161b42e565b03816001600160a01b0386165afa9384156107cb57619a8e61b3ad8c61b61f61bd8161bd889661bd7a8f61bd6a61bdbe9f9160209e88935f9161be23575b5061c008565b9261bd75848d61c594565b615818565b519061b824565b9188615818565b9361bd978561884d8c86615818565b61bda18b85615818565b526001600160a01b0360405180978195829483526004830161b44a565b0392165afa9081156107cb5761b3d99561bdf4935f9361bdfa575b5061bde661bded916157e7565b9788615818565b52836157a4565b9061c061565b61bded91935061be1b61bde69160203d6020116115e6576115d8818361088f565b93915061bdd9565b602061be3c92503d6020116115e6576115d8818361088f565b5f61bd64565b61be5c91975060203d6020116115e6576115d8818361088f565b955f61bd0d565b8061be7961be7360019388615818565b51615796565b61be83828a615818565b520161bc96565b90949183039183831161465d57602061beb96001600160a01b039261beaf878761c008565b61b317818361c594565b0392165afa80156107cb5761b3d995616b048861b3c39361b3cc9861bf04965f9261bf0a575b5061bef28261884d619a8e94958b615818565b9861befd8d8a615818565b519061c061565b526157a4565b619a8e925061884d9361bf2e61bef29260203d6020116115e6576115d8818361088f565b9350935061bedf565b90929161bf4482516157e7565b915f5b815181101561bf815761bf648361bf5e8385615818565b51616063565b9086156191dc57866001920461bf7a8287615818565b520161bf47565b5050509150565b32158061bf925790565b506001600754161590565b903261bfe0576001600160a01b0361bfd192165f52600f60205260405f20906001600160a01b03165f5260205260405f2090565b805491820180921161465d5755565b7f67f84ab2000000000000000000000000000000000000000000000000000000005f5260045ffd5b90801561c03957670de0b6b3a76400009182810292818404149015171561465d576001905f19830104019015150290565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b821561c0395760019161c07391616063565b915f19830104019015150290565b5f811261c08b5790565b7fa8ce4432000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6040517f095ea7b300000000000000000000000000000000000000000000000000000000602082018181526001600160a01b03851660248401525f6044840152909391929183606481015b039161c115601f199384810187528661088f565b5f806001600160a01b0386169287519082855af19061c13261c21d565b8261c19c575b508161c191575b501561c14c575050505050565b60405160208101959095526001600160a01b031660248501525f604485015261c187936146339161c181908260648101611218565b8261c3ee565b5f8080808061722e565b90503b15155f61c13f565b8051919250811591821561c1b4575b5050905f61c138565b61c1c792506020809183010191016154e3565b5f8061c1ab565b6040517f095ea7b300000000000000000000000000000000000000000000000000000000602082018181526001600160a01b03851660248401526044830195909552939092836064810161c101565b3d1561c247573d9061c22e82610ab6565b9161c23c604051938461088f565b82523d5f602084013e565b606090565b5f80610b239360208151910182855af161c26461c21d565b9161c638565b6040517f70a0823100000000000000000000000000000000000000000000000000000000808252306004830152602095939490926001600160a01b03929187836024818786165afa9283156107cb575f9361c3cf575b5080831061c38a575061c2e4906001600160a01b03165f52600860205260405f2090565b556040519182523060048301528316908481602481855afa9485156107cb575f9561c36b575b505081841061c330575050615f70906001600160a01b03165f52600860205260405f2090565b7f1149424d000000000000000000000000000000000000000000000000000000005f526001600160a01b03166004526024525060445260645ffd5b61c382929550803d106115e6576115d8818361088f565b925f8061c30a565b905061242092867f1c6a5375000000000000000000000000000000000000000000000000000000005f52169291906001600160a01b0360649416600452602452604452565b61c3e7919350883d8a116115e6576115d8818361088f565b915f61c2c0565b6001600160a01b0361c4029116918261c24c565b805190811515918261c443575b505061c4185750565b7f5274afe7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b61c45692506020809183010191016154e3565b155f8061c40f565b670de0b6b3a764000091616ac491616063565b9060206001600160a01b03926004604051809581937f273c1adf000000000000000000000000000000000000000000000000000000008352165afa9182156107cb575f9261c4f4575b5081811161c4c6575050565b7f3e8960dc000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b61c50e91925060203d6020116115e6576115d8818361088f565b905f61c4ba565b9064ffffffffff61c525826157e7565b92605a1c165f5b82811061c5395750505090565b600580820290828204148215171561465d5782601f911c1690604d821161465d57600191600a0a61c56a8287615818565b520161c52c565b62ffffff9060421c1664174876e8009081810291818304149015171561465d5790565b9060206001600160a01b03926004604051809581937fb677fa56000000000000000000000000000000000000000000000000000000008352165afa9182156107cb575f9261c617575b5081811061c5e9575050565b7fe31c95be000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b61c63191925060203d6020116115e6576115d8818361088f565b905f61c5dd565b9061c675575080511561c64d57805190602001fd5b7f1425ea42000000000000000000000000000000000000000000000000000000005f5260045ffd5b8151158061c6bb575b61c686575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561c67e565b91616abf616ac492670de0b6b3a764000094616063565b610b239291616b0491616063565b9291928060011461c7355760021461c728577f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffd5b610b2392616b0491616063565b5090616abf670de0b6b3a764000093616ac49361606356fea26469706673582212202db1f9d522d1a4486107ee5c2e2bda7110cdf105c8780ae3fdbe21fffdfd906664736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x18 JUMPI JUMPDEST CALLDATASIZE PUSH2 0x68EC JUMPI PUSH2 0x68C4 JUMP JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH3 0xD7AADB EQ PUSH2 0x6C6 JUMPI DUP1 PUSH4 0x2E1A4AA EQ PUSH2 0x6C1 JUMPI DUP1 PUSH4 0x362A513 EQ PUSH2 0x6BC JUMPI DUP1 PUSH4 0x6BF83B1 EQ PUSH2 0x6B7 JUMPI DUP1 PUSH4 0x790DE46 EQ PUSH2 0x6B2 JUMPI DUP1 PUSH4 0x8BADE29 EQ PUSH2 0x6AD JUMPI DUP1 PUSH4 0xC87409B EQ PUSH2 0x6A8 JUMPI DUP1 PUSH4 0xEE4CDD8 EQ PUSH2 0x6A3 JUMPI DUP1 PUSH4 0xF619655 EQ PUSH2 0x69E JUMPI DUP1 PUSH4 0xF682BA0 EQ PUSH2 0x699 JUMPI DUP1 PUSH4 0x10C1DC41 EQ PUSH2 0x694 JUMPI DUP1 PUSH4 0x155075E6 EQ PUSH2 0x68F JUMPI DUP1 PUSH4 0x15AFD409 EQ PUSH2 0x68A JUMPI DUP1 PUSH4 0x15DACBEA EQ PUSH2 0x685 JUMPI DUP1 PUSH4 0x16A573C2 EQ PUSH2 0x680 JUMPI DUP1 PUSH4 0x195AAEF9 EQ PUSH2 0x67B JUMPI DUP1 PUSH4 0x19A24BCB EQ PUSH2 0x676 JUMPI DUP1 PUSH4 0x1C4E1E23 EQ PUSH2 0x671 JUMPI DUP1 PUSH4 0x1D27AF68 EQ PUSH2 0x66C JUMPI DUP1 PUSH4 0x1F4475C5 EQ PUSH2 0x667 JUMPI DUP1 PUSH4 0x1F495F79 EQ PUSH2 0x662 JUMPI DUP1 PUSH4 0x21457897 EQ PUSH2 0x65D JUMPI DUP1 PUSH4 0x24E7176B EQ PUSH2 0x658 JUMPI DUP1 PUSH4 0x25B6A844 EQ PUSH2 0x653 JUMPI DUP1 PUSH4 0x2606A4DE EQ PUSH2 0x64E JUMPI DUP1 PUSH4 0x28121E27 EQ PUSH2 0x649 JUMPI DUP1 PUSH4 0x2B766278 EQ PUSH2 0x644 JUMPI DUP1 PUSH4 0x2BFB780C EQ PUSH2 0x63F JUMPI DUP1 PUSH4 0x2CBBF198 EQ PUSH2 0x63A JUMPI DUP1 PUSH4 0x2D1C3BEB EQ PUSH2 0x635 JUMPI DUP1 PUSH4 0x32333CE6 EQ PUSH2 0x630 JUMPI DUP1 PUSH4 0x352339EE EQ PUSH2 0x62B JUMPI DUP1 PUSH4 0x36918D6E EQ PUSH2 0x626 JUMPI DUP1 PUSH4 0x370BC8DA EQ PUSH2 0x621 JUMPI DUP1 PUSH4 0x3CB5B2AF EQ PUSH2 0x61C JUMPI DUP1 PUSH4 0x3CCE2585 EQ PUSH2 0x617 JUMPI DUP1 PUSH4 0x3E262BA3 EQ PUSH2 0x612 JUMPI DUP1 PUSH4 0x420F4A45 EQ PUSH2 0x60D JUMPI DUP1 PUSH4 0x43583BE5 EQ PUSH2 0x608 JUMPI DUP1 PUSH4 0x44EA8763 EQ PUSH2 0x603 JUMPI DUP1 PUSH4 0x4594871A EQ PUSH2 0x5FE JUMPI DUP1 PUSH4 0x47C07E88 EQ PUSH2 0x5F9 JUMPI DUP1 PUSH4 0x48C89491 EQ PUSH2 0x5F4 JUMPI DUP1 PUSH4 0x4AF29EC4 EQ PUSH2 0x5EF JUMPI DUP1 PUSH4 0x557DBA68 EQ PUSH2 0x5EA JUMPI DUP1 PUSH4 0x5C1C1C81 EQ PUSH2 0x5E5 JUMPI DUP1 PUSH4 0x5E3E00FA EQ PUSH2 0x5E0 JUMPI DUP1 PUSH4 0x5EEAE6EB EQ PUSH2 0x5DB JUMPI DUP1 PUSH4 0x5F70F542 EQ PUSH2 0x5D6 JUMPI DUP1 PUSH4 0x608256F7 EQ PUSH2 0x5D1 JUMPI DUP1 PUSH4 0x62691E5F EQ PUSH2 0x5CC JUMPI DUP1 PUSH4 0x692407AE EQ PUSH2 0x5C7 JUMPI DUP1 PUSH4 0x6D4908C4 EQ PUSH2 0x5C2 JUMPI DUP1 PUSH4 0x7004B0F1 EQ PUSH2 0x5BD JUMPI DUP1 PUSH4 0x7965C967 EQ PUSH2 0x5B8 JUMPI DUP1 PUSH4 0x79A2C0AC EQ PUSH2 0x5B3 JUMPI DUP1 PUSH4 0x80047E26 EQ PUSH2 0x5AE JUMPI DUP1 PUSH4 0x81E4B7E9 EQ PUSH2 0x5A9 JUMPI DUP1 PUSH4 0x82EA1749 EQ PUSH2 0x5A4 JUMPI DUP1 PUSH4 0x851C65A3 EQ PUSH2 0x59F JUMPI DUP1 PUSH4 0x87A530F8 EQ PUSH2 0x59A JUMPI DUP1 PUSH4 0x87A76C59 EQ PUSH2 0x595 JUMPI DUP1 PUSH4 0x8F5AEB4B EQ PUSH2 0x590 JUMPI DUP1 PUSH4 0x920AF066 EQ PUSH2 0x58B JUMPI DUP1 PUSH4 0x96E74A27 EQ PUSH2 0x586 JUMPI DUP1 PUSH4 0xA03B23EF EQ PUSH2 0x581 JUMPI DUP1 PUSH4 0xA408F312 EQ PUSH2 0x57C JUMPI DUP1 PUSH4 0xA40F9592 EQ PUSH2 0x577 JUMPI DUP1 PUSH4 0xAA01EDB3 EQ PUSH2 0x572 JUMPI DUP1 PUSH4 0xAB62C2B6 EQ PUSH2 0x56D JUMPI DUP1 PUSH4 0xAC004855 EQ PUSH2 0x568 JUMPI DUP1 PUSH4 0xAE639329 EQ PUSH2 0x563 JUMPI DUP1 PUSH4 0xB1740C2D EQ PUSH2 0x55E JUMPI DUP1 PUSH4 0xB2469499 EQ PUSH2 0x559 JUMPI DUP1 PUSH4 0xB4EB0BF9 EQ PUSH2 0x554 JUMPI DUP1 PUSH4 0xB6F680F4 EQ PUSH2 0x54F JUMPI DUP1 PUSH4 0xB8CACEEE EQ PUSH2 0x54A JUMPI DUP1 PUSH4 0xB8F82B26 EQ PUSH2 0x545 JUMPI DUP1 PUSH4 0xB9A8EFFA EQ PUSH2 0x540 JUMPI DUP1 PUSH4 0xBB14E466 EQ PUSH2 0x53B JUMPI DUP1 PUSH4 0xBBC6F1DC EQ PUSH2 0x536 JUMPI DUP1 PUSH4 0xBE6B4D2A EQ PUSH2 0x531 JUMPI DUP1 PUSH4 0xBEABACC8 EQ PUSH2 0x52C JUMPI DUP1 PUSH4 0xC1FDCD62 EQ PUSH2 0x527 JUMPI DUP1 PUSH4 0xC9C1661B EQ PUSH2 0x522 JUMPI DUP1 PUSH4 0xCBDE2B68 EQ PUSH2 0x51D JUMPI DUP1 PUSH4 0xCBE52AE3 EQ PUSH2 0x518 JUMPI DUP1 PUSH4 0xCECC95A7 EQ PUSH2 0x513 JUMPI DUP1 PUSH4 0xCFCC2209 EQ PUSH2 0x50E JUMPI DUP1 PUSH4 0xD01A3269 EQ PUSH2 0x509 JUMPI DUP1 PUSH4 0xD0643B8C EQ PUSH2 0x504 JUMPI DUP1 PUSH4 0xD1F810A5 EQ PUSH2 0x4FF JUMPI DUP1 PUSH4 0xD2C725E0 EQ PUSH2 0x4FA JUMPI DUP1 PUSH4 0xD64BC25D EQ PUSH2 0x4F5 JUMPI DUP1 PUSH4 0xD86C3FEF EQ PUSH2 0x4F0 JUMPI DUP1 PUSH4 0xD8F4CF3C EQ PUSH2 0x4EB JUMPI DUP1 PUSH4 0xDAB50579 EQ PUSH2 0x4E6 JUMPI DUP1 PUSH4 0xDC4402ED EQ PUSH2 0x4E1 JUMPI DUP1 PUSH4 0xDF138458 EQ PUSH2 0x4DC JUMPI DUP1 PUSH4 0xE2DDCE11 EQ PUSH2 0x4D7 JUMPI DUP1 PUSH4 0xE460A8A9 EQ PUSH2 0x4D2 JUMPI DUP1 PUSH4 0xE5948689 EQ PUSH2 0x4CD JUMPI DUP1 PUSH4 0xE5B08FFB EQ PUSH2 0x4C8 JUMPI DUP1 PUSH4 0xEBFEB0A1 EQ PUSH2 0x4C3 JUMPI DUP1 PUSH4 0xEEDA9991 EQ PUSH2 0x4BE JUMPI DUP1 PUSH4 0xF1320097 EQ PUSH2 0x4B9 JUMPI PUSH4 0xFF44DEAB SUB PUSH2 0xE JUMPI PUSH2 0x5488 JUMP JUMPDEST PUSH2 0x53DD JUMP JUMPDEST PUSH2 0x53BE JUMP JUMPDEST PUSH2 0x5376 JUMP JUMPDEST PUSH2 0x533A JUMP JUMPDEST PUSH2 0x51F1 JUMP JUMPDEST PUSH2 0x5170 JUMP JUMPDEST PUSH2 0x5108 JUMP JUMPDEST PUSH2 0x50D0 JUMP JUMPDEST PUSH2 0x506B JUMP JUMPDEST PUSH2 0x4F7B JUMP JUMPDEST PUSH2 0x4E89 JUMP JUMPDEST PUSH2 0x4DA6 JUMP JUMPDEST PUSH2 0x4D6D JUMP JUMPDEST PUSH2 0x4D2F JUMP JUMPDEST PUSH2 0x4D04 JUMP JUMPDEST PUSH2 0x4CCC JUMP JUMPDEST PUSH2 0x4C24 JUMP JUMPDEST PUSH2 0x4BA5 JUMP JUMPDEST PUSH2 0x4B6D JUMP JUMPDEST PUSH2 0x4B42 JUMP JUMPDEST PUSH2 0x4AF0 JUMP JUMPDEST PUSH2 0x4A55 JUMP JUMPDEST PUSH2 0x496B JUMP JUMPDEST PUSH2 0x4953 JUMP JUMPDEST PUSH2 0x48E7 JUMP JUMPDEST PUSH2 0x48BC JUMP JUMPDEST PUSH2 0x4781 JUMP JUMPDEST PUSH2 0x473E JUMP JUMPDEST PUSH2 0x4713 JUMP JUMPDEST PUSH2 0x46FB JUMP JUMPDEST PUSH2 0x46E1 JUMP JUMPDEST PUSH2 0x46C5 JUMP JUMPDEST PUSH2 0x468B JUMP JUMPDEST PUSH2 0x4662 JUMP JUMPDEST PUSH2 0x4587 JUMP JUMPDEST PUSH2 0x456D JUMP JUMPDEST PUSH2 0x44C9 JUMP JUMPDEST PUSH2 0x43E7 JUMP JUMPDEST PUSH2 0x43AB JUMP JUMPDEST PUSH2 0x4366 JUMP JUMPDEST PUSH2 0x4321 JUMP JUMPDEST PUSH2 0x3F25 JUMP JUMPDEST PUSH2 0x3EE8 JUMP JUMPDEST PUSH2 0x3E9F JUMP JUMPDEST PUSH2 0x3E5C JUMP JUMPDEST PUSH2 0x3DF2 JUMP JUMPDEST PUSH2 0x3D34 JUMP JUMPDEST PUSH2 0x3C79 JUMP JUMPDEST PUSH2 0x3C3D JUMP JUMPDEST PUSH2 0x3C2C JUMP JUMPDEST PUSH2 0x3B96 JUMP JUMPDEST PUSH2 0x3B60 JUMP JUMPDEST PUSH2 0x3AFF JUMP JUMPDEST PUSH2 0x3ACA JUMP JUMPDEST PUSH2 0x3A7C JUMP JUMPDEST PUSH2 0x3A57 JUMP JUMPDEST PUSH2 0x3965 JUMP JUMPDEST PUSH2 0x377C JUMP JUMPDEST PUSH2 0x36DA JUMP JUMPDEST PUSH2 0x3688 JUMP JUMPDEST PUSH2 0x35BA JUMP JUMPDEST PUSH2 0x34EF JUMP JUMPDEST PUSH2 0x330B JUMP JUMPDEST PUSH2 0x327F JUMP JUMPDEST PUSH2 0x3257 JUMP JUMPDEST PUSH2 0x31CA JUMP JUMPDEST PUSH2 0x3152 JUMP JUMPDEST PUSH2 0x2DFE JUMP JUMPDEST PUSH2 0x2D96 JUMP JUMPDEST PUSH2 0x2D65 JUMP JUMPDEST PUSH2 0x2CDE JUMP JUMPDEST PUSH2 0x2CA5 JUMP JUMPDEST PUSH2 0x2BC0 JUMP JUMPDEST PUSH2 0x2AFC JUMP JUMPDEST PUSH2 0x2A89 JUMP JUMPDEST PUSH2 0x297E JUMP JUMPDEST PUSH2 0x28A2 JUMP JUMPDEST PUSH2 0x287E JUMP JUMPDEST PUSH2 0x25E8 JUMP JUMPDEST PUSH2 0x25AB JUMP JUMPDEST PUSH2 0x2563 JUMP JUMPDEST PUSH2 0x24E2 JUMP JUMPDEST PUSH2 0x2082 JUMP JUMPDEST PUSH2 0x1F65 JUMP JUMPDEST PUSH2 0x1D35 JUMP JUMPDEST PUSH2 0x1B4C JUMP JUMPDEST PUSH2 0x1B12 JUMP JUMPDEST PUSH2 0x1AFB JUMP JUMPDEST PUSH2 0x19FB JUMP JUMPDEST PUSH2 0x196B JUMP JUMPDEST PUSH2 0x17A1 JUMP JUMPDEST PUSH2 0x176A JUMP JUMPDEST PUSH2 0x15ED JUMP JUMPDEST PUSH2 0x14CC JUMP JUMPDEST PUSH2 0x1492 JUMP JUMPDEST PUSH2 0x1429 JUMP JUMPDEST PUSH2 0x13EA JUMP JUMPDEST PUSH2 0x136D JUMP JUMPDEST PUSH2 0x1328 JUMP JUMPDEST PUSH2 0x12BB JUMP JUMPDEST PUSH2 0x1274 JUMP JUMPDEST PUSH2 0x119C JUMP JUMPDEST PUSH2 0xE3D JUMP JUMPDEST PUSH2 0x9EB JUMP JUMPDEST PUSH2 0x7D0 JUMP JUMPDEST PUSH2 0x727 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SUB PUSH2 0x6DC JUMPI JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0x6CB JUMP JUMPDEST JUMP JUMPDEST PUSH2 0x164 CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x713 DUP2 PUSH2 0x6CB JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD PUSH2 0x720 DUP2 PUSH2 0x6CB JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x790 PUSH1 0x20 PUSH2 0x73A CALLDATASIZE PUSH2 0x6FB JUMP JUMPDEST SWAP2 SWAP1 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD DUP1 SWAP8 DUP2 SWAP7 DUP3 SWAP6 PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD PUSH1 0x20 SWAP1 SWAP4 SWAP3 SWAP2 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD SWAP6 AND DUP2 MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP4 AND GAS CALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x7A1 JUMPI STOP JUMPDEST PUSH2 0x7C2 SWAP1 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x7C4 JUMPI JUMPDEST PUSH2 0x7BA DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x54E3 JUMP JUMPDEST STOP JUMPDEST POP RETURNDATASIZE PUSH2 0x7B0 JUMP JUMPDEST PUSH2 0x54F8 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH2 0x7C2 PUSH1 0x4 CALLDATALOAD PUSH2 0x7F0 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH2 0x6936 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x83E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH2 0x7F5 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x83E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x83E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x83E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x83E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0x873 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0xC0 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x83E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x140 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x83E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x160 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x83E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x180 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x83E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x83E JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x6DC JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x974 DUP2 PUSH2 0x942 JUMP JUMPDEST SWAP4 PUSH2 0x982 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x88F JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x6DC JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x9AB JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 DUP1 SWAP2 DUP4 CALLDATALOAD PUSH2 0x9B9 DUP2 PUSH2 0x6CB JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x99D JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x6DC JUMPI JUMP JUMPDEST PUSH2 0x124 CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x6DC JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0xC0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0xA08 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0xA28 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x95A JUMP JUMPDEST SWAP1 PUSH2 0xA31 PUSH2 0x9C4 JUMP JUMPDEST PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH2 0x7C2 SWAP3 PUSH1 0x40 MLOAD SWAP3 PUSH2 0xA6C DUP5 PUSH2 0x822 JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD PUSH2 0xA78 DUP2 PUSH2 0x6CB JUMP JUMPDEST DUP5 MSTORE PUSH1 0x84 CALLDATALOAD PUSH2 0xA86 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0xA4 CALLDATALOAD PUSH2 0xA97 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MSTORE PUSH2 0x5503 JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x6DC JUMPI JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0xAA1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x83E JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH2 0xADE DUP3 PUSH2 0xAB6 JUMP JUMPDEST SWAP2 PUSH2 0xAEC PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x88F JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0x6DC JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x6DC JUMPI DUP2 PUSH1 0x20 PUSH2 0xB23 SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0xAD2 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0xE0 DUP2 DUP5 SUB SLT PUSH2 0x6DC JUMPI PUSH2 0xB3B PUSH2 0x8B2 JUMP JUMPDEST SWAP3 PUSH2 0xB45 DUP3 PUSH2 0xAAB JUMP JUMPDEST DUP5 MSTORE PUSH2 0xB53 PUSH1 0x20 DUP4 ADD PUSH2 0x6E0 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE PUSH2 0xB64 PUSH1 0x40 DUP4 ADD PUSH2 0x6E0 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MSTORE PUSH2 0xB75 PUSH1 0x60 DUP4 ADD PUSH2 0x6E0 JUMP JUMPDEST PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x80 DUP3 ADD CALLDATALOAD PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xA0 DUP3 ADD CALLDATALOAD PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xC0 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0xBAC SWAP3 ADD PUSH2 0xB08 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE JUMP JUMPDEST DUP1 ISZERO ISZERO SUB PUSH2 0x6DC JUMPI JUMP JUMPDEST PUSH2 0x144 CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0xBB3 JUMP JUMPDEST PUSH2 0x164 CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0xBB3 JUMP JUMPDEST PUSH2 0x184 CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0xBB3 JUMP JUMPDEST PUSH2 0x1A4 CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0xBB3 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0xBB3 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0xBB3 JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0xBB3 JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0xBB3 JUMP JUMPDEST PUSH1 0xA4 CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0xBB3 JUMP JUMPDEST PUSH1 0xC4 CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0xBB3 JUMP JUMPDEST PUSH1 0xE4 CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0xBB3 JUMP JUMPDEST PUSH2 0x104 CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0xBB3 JUMP JUMPDEST PUSH2 0x124 CALLDATALOAD SWAP1 PUSH2 0x6EB DUP3 PUSH2 0xBB3 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x6DC JUMPI DUP1 CALLDATALOAD SWAP1 PUSH1 0x20 PUSH2 0xC85 DUP4 PUSH2 0x942 JUMP JUMPDEST SWAP4 PUSH1 0x40 PUSH2 0xC95 PUSH1 0x40 MLOAD SWAP7 DUP8 PUSH2 0x88F JUMP JUMPDEST DUP5 DUP7 MSTORE DUP3 DUP7 ADD SWAP2 DUP4 PUSH1 0x60 DUP1 SWAP8 MUL DUP7 ADD ADD SWAP5 DUP2 DUP7 GT PUSH2 0x6DC JUMPI DUP5 ADD SWAP3 JUMPDEST DUP6 DUP5 LT PUSH2 0xCC2 JUMPI POP POP POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP7 DUP5 DUP4 SUB SLT PUSH2 0x6DC JUMPI DUP5 DUP8 SWAP2 DUP5 MLOAD PUSH2 0xCD9 DUP2 PUSH2 0x822 JUMP JUMPDEST DUP7 CALLDATALOAD PUSH2 0xCE4 DUP2 PUSH2 0xAA1 JUMP JUMPDEST DUP2 MSTORE DUP3 DUP8 ADD CALLDATALOAD PUSH2 0xCF3 DUP2 PUSH2 0x6CB JUMP JUMPDEST DUP4 DUP3 ADD MSTORE DUP6 DUP8 ADD CALLDATALOAD PUSH2 0xD04 DUP2 PUSH2 0xBB3 JUMP JUMPDEST DUP7 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP4 ADD SWAP3 PUSH2 0xCB1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x6DC JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0xD2D DUP2 PUSH2 0x942 JUMP JUMPDEST SWAP4 PUSH2 0xD3B PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x88F JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x6DC JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xD64 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xD56 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0xE0 DUP2 DUP5 SUB SLT PUSH2 0x6DC JUMPI PUSH2 0xD88 PUSH2 0x8B2 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x20 DUP4 ADD CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI DUP3 PUSH2 0xDAE SWAP2 DUP6 ADD PUSH2 0x95A JUMP JUMPDEST PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP4 ADD CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI DUP3 PUSH2 0xDCB SWAP2 DUP6 ADD PUSH2 0xC6C JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI DUP3 PUSH2 0xDE8 SWAP2 DUP6 ADD PUSH2 0xD13 JUMP JUMPDEST PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0x80 DUP4 ADD CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI DUP3 PUSH2 0xE05 SWAP2 DUP6 ADD PUSH2 0xD13 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI DUP3 PUSH2 0xE22 SWAP2 DUP6 ADD PUSH2 0xD13 JUMP JUMPDEST PUSH1 0xA0 DUP7 ADD MSTORE PUSH1 0xC0 DUP4 ADD CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0xBAC SWAP3 ADD PUSH2 0xD13 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0xC0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0xE6F SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xB26 JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0xE88 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xD73 JUMP JUMPDEST PUSH1 0x80 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 SWAP2 PUSH2 0xEE7 SWAP2 PUSH1 0x40 MLOAD SWAP2 PUSH2 0xEC6 DUP4 PUSH2 0x843 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD DUP4 MSTORE PUSH1 0x64 CALLDATALOAD DUP6 DUP5 ADD MSTORE PUSH1 0x84 CALLDATALOAD PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0xA4 CALLDATALOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x6A65 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLDATALOAD SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x6DC JUMPI JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0xC0 DUP2 DUP5 SUB SLT PUSH2 0x6DC JUMPI PUSH2 0xF11 PUSH2 0x8BF JUMP JUMPDEST SWAP3 PUSH2 0xF1B DUP3 PUSH2 0x6E0 JUMP JUMPDEST DUP5 MSTORE PUSH2 0xF29 PUSH1 0x20 DUP4 ADD PUSH2 0x6E0 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x40 DUP4 ADD CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI DUP3 PUSH2 0xF4F SWAP2 DUP6 ADD PUSH2 0xD13 JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x60 DUP4 ADD CALLDATALOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0xF6A PUSH1 0x80 DUP5 ADD PUSH2 0xEEF JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MSTORE PUSH1 0xA0 DUP4 ADD CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0xF85 SWAP3 ADD PUSH2 0xB08 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x6DC JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x4 CALLDATALOAD DUP4 DUP2 GT PUSH2 0x6DC JUMPI DUP3 PUSH2 0xFB9 SWAP2 PUSH1 0x4 ADD PUSH2 0xD73 JUMP JUMPDEST SWAP3 PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI DUP4 PUSH2 0xFD1 SWAP2 PUSH1 0x4 ADD PUSH2 0xEFC JUMP JUMPDEST SWAP3 PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x6DC JUMPI PUSH2 0xB23 SWAP2 PUSH1 0x4 ADD PUSH2 0xD13 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x101F JUMPI JUMP JUMPDEST PUSH2 0xFE8 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1043 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 DUP3 PUSH1 0x60 PUSH1 0x1 SWAP3 DUP8 MLOAD DUP1 MLOAD PUSH2 0x105A DUP2 PUSH2 0x1015 JUMP JUMPDEST DUP3 MSTORE DUP1 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 DUP4 ADD MSTORE PUSH1 0x40 SWAP1 DUP2 ADD MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE ADD SWAP6 ADD SWAP4 SWAP3 SWAP2 ADD PUSH2 0x1035 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x10A4 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1096 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0xE0 DUP4 ADD SWAP3 DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 DUP1 DUP4 ADD MLOAD SWAP5 PUSH1 0xE0 PUSH1 0x20 DUP5 ADD MSTORE DUP6 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH2 0x100 DUP5 ADD SWAP7 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x115A JUMPI POP POP POP POP PUSH1 0xC0 PUSH2 0x1149 PUSH2 0x1137 PUSH2 0x1125 PUSH2 0x1113 PUSH2 0xB23 SWAP8 SWAP9 PUSH1 0x40 DUP9 ADD MLOAD DUP8 DUP3 SUB PUSH1 0x40 DUP10 ADD MSTORE PUSH2 0x1024 JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MLOAD DUP7 DUP3 SUB PUSH1 0x60 DUP9 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD DUP6 DUP3 SUB PUSH1 0x80 DUP8 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST PUSH1 0xA0 DUP6 ADD MLOAD DUP5 DUP3 SUB PUSH1 0xA0 DUP7 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 PUSH1 0xC0 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP9 MSTORE SWAP7 DUP2 ADD SWAP7 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x10E3 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x1241 PUSH2 0x125D PUSH2 0x1270 PUSH2 0x122D PUSH2 0x11B6 CALLDATASIZE PUSH2 0xF8C JUMP JUMPDEST SWAP3 SWAP2 SWAP5 SWAP1 PUSH2 0x11C2 PUSH2 0x5637 JUMP JUMPDEST POP PUSH2 0x124F PUSH1 0x40 MLOAD SWAP5 PUSH2 0x11FB PUSH1 0x20 DUP8 ADD DUP8 PUSH2 0x11DC DUP7 DUP4 PUSH2 0x5685 JUMP JUMPDEST SUB SWAP8 PUSH2 0x11F0 PUSH1 0x1F NOT SWAP10 DUP11 DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x88F JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP2 DUP5 DUP11 PUSH2 0x6CA2 JUMP JUMPDEST SWAP8 SWAP3 SWAP4 SWAP2 SWAP6 SWAP1 SWAP9 PUSH2 0x1224 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x1218 PUSH1 0x20 DUP3 ADD SWAP6 DUP7 PUSH2 0x5685 JUMP JUMPDEST SUB SWAP1 DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x88F JUMP JUMPDEST MLOAD SWAP1 KECCAK256 EQ PUSH2 0x56F5 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP9 DUP10 SWAP9 PUSH1 0xA0 DUP11 MSTORE PUSH1 0xA0 DUP11 ADD SWAP1 PUSH2 0x10B8 JUMP JUMPDEST SWAP1 DUP9 DUP3 SUB PUSH1 0x20 DUP11 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST SWAP1 DUP7 DUP3 SUB PUSH1 0x40 DUP9 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST SWAP2 PUSH1 0x60 DUP6 ADD MSTORE DUP4 DUP3 SUB PUSH1 0x80 DUP6 ADD MSTORE PUSH2 0x1177 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0xEE7 PUSH2 0x12AA PUSH1 0x20 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xD73 JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x7212 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x12D8 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH4 0xFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x1318 SWAP2 AND SWAP2 DUP3 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x82 SWAP2 PUSH4 0xFFFFFFFF SWAP1 DUP2 AND DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x1345 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x135B PUSH1 0x44 CALLDATALOAD PUSH1 0x24 CALLDATALOAD PUSH2 0x7295 JUMP JUMPDEST SWAP2 AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x138A DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x6DC JUMPI PUSH2 0x13AE PUSH2 0x7C2 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xD73 JUMP JUMPDEST SWAP1 PUSH2 0x72F9 JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x40 SWAP2 ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x13CC DUP2 PUSH2 0x6CB JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD PUSH2 0xB23 DUP2 PUSH2 0xAA1 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0xB23 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x10B8 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x1270 PUSH2 0x1415 PUSH2 0x13FE CALLDATASIZE PUSH2 0x13B4 JUMP JUMPDEST SWAP1 PUSH2 0x1407 PUSH2 0x5637 JUMP JUMPDEST POP PUSH2 0x1410 PUSH2 0x5637 JUMP JUMPDEST PUSH2 0x735C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x10B8 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x3 NOT PUSH1 0x40 DUP2 CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x1447 DUP2 PUSH2 0xBB3 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP2 PUSH2 0x1454 DUP4 PUSH2 0xBB3 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE PUSH1 0x7 SLOAD SWAP3 PUSH1 0x1 SHL AND SWAP2 AND OR OR PUSH1 0x7 SSTORE PUSH0 DUP1 RETURN JUMPDEST PUSH0 SWAP2 SUB SLT PUSH2 0x6DC JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x14E9 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x14F4 PUSH2 0x79F6 JUMP JUMPDEST PUSH2 0x14FC PUSH2 0x7A70 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 DUP2 DUP2 MSTORE PUSH1 0x8 PUSH1 0x20 SWAP1 DUP2 MSTORE PUSH1 0x40 SWAP2 DUP3 SWAP1 KECCAK256 SLOAD SWAP2 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP5 SWAP3 DUP3 SWAP1 PUSH1 0x24 SWAP1 DUP3 SWAP1 GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x1270 SWAP5 PUSH2 0x1588 SWAP3 PUSH0 SWAP2 PUSH2 0x15BE JUMPI JUMPDEST POP DUP1 PUSH2 0x1582 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0x57A4 JUMP JUMPDEST SWAP2 DUP1 DUP4 GT PUSH2 0x15B4 JUMPI JUMPDEST POP DUP2 PUSH2 0x159C SWAP2 PUSH2 0x7AC1 JUMP JUMPDEST PUSH2 0x15A4 PUSH2 0x7A4B JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 JUMP JUMPDEST SWAP2 POP PUSH2 0x159C PUSH2 0x1591 JUMP JUMPDEST PUSH2 0x15E0 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI JUMPDEST PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x575A JUMP JUMPDEST PUSH0 PUSH2 0x1565 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x15CE JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH2 0x163B PUSH1 0x4 CALLDATALOAD PUSH2 0x160D DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x1619 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH2 0x1626 DUP3 PUSH2 0x6CB JUMP JUMPDEST PUSH2 0x1635 PUSH1 0x64 CALLDATALOAD DUP1 SWAP5 DUP4 CALLER PUSH2 0x7AFF JUMP JUMPDEST CALLER PUSH2 0x7CDC JUMP JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0xC0 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x6DC JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x4 CALLDATALOAD DUP4 DUP2 GT PUSH2 0x6DC JUMPI DUP3 PUSH2 0x1673 SWAP2 PUSH1 0x4 ADD PUSH2 0xB26 JUMP JUMPDEST SWAP3 PUSH1 0x80 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC DUP5 ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x40 MLOAD PUSH2 0x16AA DUP2 PUSH2 0x843 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD DUP2 MSTORE PUSH1 0x44 CALLDATALOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x84 CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE SWAP3 PUSH1 0xA4 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x6DC JUMPI PUSH2 0xB23 SWAP2 PUSH1 0x4 ADD PUSH2 0xD73 JUMP JUMPDEST SWAP1 PUSH2 0x16E8 DUP3 PUSH2 0x1015 JUMP JUMPDEST MSTORE JUMP JUMPDEST PUSH2 0xB23 SWAP2 DUP2 MLOAD PUSH2 0x16FA DUP2 PUSH2 0x1015 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xC0 PUSH2 0x1721 PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0xE0 PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0xE0 DUP5 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP3 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0xA0 DUP3 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE ADD MLOAD SWAP1 PUSH1 0xC0 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x1177 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0xB23 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x16EB JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x1270 PUSH2 0x178D PUSH2 0x177E CALLDATASIZE PUSH2 0x1646 JUMP JUMPDEST SWAP2 PUSH2 0x1787 PUSH2 0x57B1 JUMP JUMPDEST POP PUSH2 0x7EA8 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x16EB JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x17BE DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND SWAP2 PUSH1 0x40 MLOAD PUSH32 0xCE20ECE700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 PUSH1 0x4 DUP2 DUP9 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP2 PUSH2 0x193D JUMPI JUMPDEST POP DUP4 LT PUSH2 0x1915 JUMPI PUSH1 0x40 MLOAD PUSH32 0x654CF15D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE DUP2 DUP2 PUSH1 0x4 DUP2 DUP9 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP3 PUSH2 0x18F8 JUMPI JUMPDEST POP POP DUP3 GT PUSH2 0x18D0 JUMPI DUP2 DUP2 PUSH2 0x18BA PUSH2 0x18A3 PUSH32 0x89D41522342FABAC1471CA6073A5623E5CAF367B03CA6E9A001478D0CF8BE4A1 SWAP6 PUSH2 0x189D PUSH2 0x18CB SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x91E1 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 STOP JUMPDEST PUSH32 0x7F47834B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x190E SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x184E JUMP JUMPDEST PUSH32 0xBFB2068800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x1954 SWAP2 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x180B JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0xB23 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x1991 DUP2 PUSH2 0x6CB JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 SWAP1 PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP2 PUSH2 0x19B3 DUP4 PUSH2 0x57E7 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x19CB JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0x1270 DUP9 DUP3 PUSH2 0x195A JUMP JUMPDEST DUP1 PUSH1 0x1 SWAP2 PUSH0 MSTORE DUP4 DUP4 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 PUSH0 KECCAK256 SLOAD AND PUSH2 0x19F4 DUP3 DUP10 PUSH2 0x5818 JUMP JUMPDEST MSTORE ADD PUSH2 0x19B6 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x1A18 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x1A39 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xD13 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x6DC JUMPI PUSH2 0x1AB4 PUSH2 0x1A57 PUSH2 0x1A7C SWAP4 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xD13 JUMP JUMPDEST SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH2 0x1A83 PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP3 PUSH2 0x5859 JUMP JUMPDEST SUB DUP6 PUSH2 0x88F JUMP JUMPDEST PUSH2 0x1A90 DUP5 MLOAD DUP5 MLOAD EQ PUSH2 0x589D JUMP JUMPDEST PUSH2 0x1A9D DUP5 MLOAD DUP7 MLOAD EQ PUSH2 0x589D JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x7C2 JUMPI DUP1 PUSH2 0x1AE2 PUSH2 0x1AD0 PUSH1 0x1 SWAP4 DUP6 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x1ADB DUP4 DUP10 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x7295 JUMP JUMPDEST PUSH2 0x1AF4 DUP3 DUP7 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE ADD PUSH2 0x1AB7 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x7C2 PUSH2 0x1B0C CALLDATASIZE PUSH2 0x6FB JUMP JUMPDEST SWAP2 PUSH2 0x7F11 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x1B69 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x1B89 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x95A JUMP JUMPDEST SWAP1 PUSH2 0x1B92 PUSH2 0x69D7 JUMP JUMPDEST PUSH2 0x1B9A PUSH2 0x6A43 JUMP JUMPDEST SWAP2 PUSH1 0x1 DUP4 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH2 0x1BD4 DUP3 PUSH32 0x0 AND SWAP2 PUSH2 0x5A72 JUMP JUMPDEST SWAP2 DUP2 EXTCODESIZE ISZERO PUSH2 0x6DC JUMPI PUSH0 DUP1 SWAP5 PUSH2 0x1C2C SWAP7 PUSH2 0x1C6B PUSH1 0x40 MLOAD SWAP9 DUP10 SWAP8 DUP9 SWAP7 DUP8 SWAP6 PUSH32 0xED05BEAF00000000000000000000000000000000000000000000000000000000 DUP8 MSTORE AND PUSH1 0x4 DUP7 ADD MSTORE PUSH2 0x100 PUSH1 0x24 DUP7 ADD MSTORE PUSH2 0x104 DUP6 ADD SWAP1 PUSH2 0x1EE5 JUMP JUMPDEST SWAP2 PUSH1 0x44 CALLDATALOAD PUSH1 0x44 DUP6 ADD MSTORE DUP5 PUSH1 0x64 DUP6 ADD MSTORE PUSH1 0x84 DUP5 ADD SWAP1 PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x1C7B JUMPI STOP JUMPDEST DUP1 PUSH2 0x1C88 PUSH2 0x7C2 SWAP3 PUSH2 0x85F JUMP JUMPDEST DUP1 PUSH2 0x1488 JUMP JUMPDEST CALLDATALOAD SWAP1 PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x6DC JUMPI JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0xC0 DUP2 DUP5 SUB SLT PUSH2 0x6DC JUMPI PUSH2 0x1CB0 PUSH2 0x8BF JUMP JUMPDEST SWAP3 PUSH2 0x1CBA DUP3 PUSH2 0x6E0 JUMP JUMPDEST DUP5 MSTORE PUSH2 0x1CC8 PUSH1 0x20 DUP4 ADD PUSH2 0x6E0 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP3 ADD CALLDATALOAD PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP3 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP2 GT PUSH2 0x6DC JUMPI DUP3 PUSH2 0x1CF9 SWAP2 DUP6 ADD PUSH2 0xD13 JUMP JUMPDEST PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0xF6A PUSH1 0x80 DUP5 ADD PUSH2 0x1C8E JUMP JUMPDEST SWAP2 PUSH2 0x1D27 SWAP1 PUSH2 0xB23 SWAP5 SWAP3 DUP5 MSTORE PUSH1 0x60 PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x1177 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x1D66 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x1C9B JUMP JUMPDEST PUSH2 0x1D6E PUSH2 0x7A70 JUMP JUMPDEST PUSH2 0x1D81 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 MLOAD AND PUSH2 0x807C JUMP JUMPDEST PUSH2 0x1D9A PUSH2 0x1D95 DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x80C9 JUMP JUMPDEST PUSH2 0x1DB3 PUSH2 0x1DAE DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x75BE JUMP JUMPDEST PUSH2 0x1E06 PUSH1 0x20 DUP3 ADD MLOAD MLOAD PUSH2 0x1DCD PUSH1 0x60 DUP6 ADD SWAP2 DUP3 MLOAD MLOAD SWAP1 PUSH2 0x80D5 JUMP JUMPDEST DUP1 MLOAD PUSH1 0xC0 DUP5 ADD SWAP1 PUSH2 0x1DE7 DUP3 MLOAD SWAP2 PUSH1 0xA0 DUP8 ADD SWAP3 DUP4 MLOAD SWAP2 PUSH2 0x8104 JUMP JUMPDEST SWAP3 PUSH2 0x1DF7 DUP7 MLOAD PUSH1 0x1 SWAP1 PUSH1 0x10 SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x1E8D JUMPI JUMPDEST POP POP POP DUP4 DUP4 PUSH2 0x8470 JUMP JUMPDEST SWAP3 SWAP4 SWAP1 SWAP2 SWAP5 DUP6 PUSH2 0x1E1B DUP4 MLOAD PUSH1 0x1 SWAP1 PUSH1 0x11 SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x1E30 JUMPI JUMPDEST PUSH1 0x40 MLOAD DUP1 PUSH2 0x1270 DUP8 DUP11 DUP11 DUP5 PUSH2 0x1D0A JUMP JUMPDEST PUSH2 0x1270 SWAP5 SWAP7 POP SWAP1 DUP6 PUSH2 0x1E83 SWAP5 SWAP4 SWAP3 PUSH2 0x1E79 PUSH2 0x1E6C PUSH2 0x1E55 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 DUP5 MLOAD CALLER SWAP1 PUSH2 0x8B52 JUMP JUMPDEST SWAP3 SWAP1 PUSH0 DUP1 DUP1 PUSH2 0x1E20 JUMP JUMPDEST PUSH2 0x1EB5 PUSH2 0x1EDD SWAP5 DUP8 DUP10 PUSH2 0x1EAD PUSH2 0x1E6C PUSH2 0x1E55 DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 CALLER SWAP1 PUSH2 0x81CF JUMP JUMPDEST PUSH2 0x1ED2 PUSH2 0x1ECC PUSH2 0x1A9D DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP8 PUSH2 0x82A9 JUMP JUMPDEST MLOAD SWAP2 MLOAD SWAP1 MLOAD SWAP2 PUSH2 0x8104 JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0x1DFC JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1F04 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 DUP3 PUSH1 0x80 PUSH1 0x1 SWAP3 DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP3 MLOAD AND DUP4 MSTORE DUP5 DUP3 ADD MLOAD PUSH2 0x1F2B DUP2 PUSH2 0x1015 JUMP JUMPDEST DUP4 DUP7 ADD MSTORE PUSH1 0x40 DUP3 DUP2 ADD MLOAD SWAP1 SWAP2 AND SWAP1 DUP4 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 ADD MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE ADD SWAP6 ADD SWAP4 SWAP3 SWAP2 ADD PUSH2 0x1EF6 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0xB23 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x1EE5 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x1FA1 PUSH2 0x1F9C PUSH2 0x1270 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x95A JUMP JUMPDEST PUSH2 0x5A72 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1EE5 JUMP JUMPDEST SWAP4 SWAP5 PUSH1 0xC0 SWAP2 PUSH2 0xB23 SWAP9 SWAP7 PUSH2 0x2074 SWAP6 PUSH2 0x204B SWAP6 PUSH2 0x140 SWAP4 DUP10 MSTORE PUSH1 0x20 DUP10 ADD MSTORE PUSH1 0x40 DUP9 ADD MSTORE PUSH1 0x60 DUP8 ADD MSTORE DUP1 PUSH1 0x80 DUP8 ADD MSTORE DUP2 MLOAD SWAP1 PUSH2 0x1FEE DUP3 PUSH2 0x1015 JUMP JUMPDEST DUP7 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH2 0x160 DUP8 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD DUP2 AND PUSH2 0x180 DUP8 ADD MSTORE PUSH1 0x60 DUP3 ADD MLOAD AND PUSH2 0x1A0 DUP7 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH2 0x1C0 DUP7 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH2 0x1E0 DUP7 ADD MSTORE ADD MLOAD PUSH1 0xE0 PUSH2 0x200 DUP6 ADD MSTORE PUSH2 0x220 DUP5 ADD SWAP1 PUSH2 0x1177 JUMP JUMPDEST DUP5 MLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x20 DUP6 ADD MLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0x60 SWAP1 SWAP5 ADD MLOAD PUSH2 0x100 DUP4 ADD MSTORE JUMP JUMPDEST PUSH2 0x120 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x10B8 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0xC0 PUSH0 PUSH2 0x2093 CALLDATASIZE PUSH2 0x1646 JUMP JUMPDEST SWAP1 PUSH1 0x40 SWAP3 DUP4 MLOAD PUSH2 0x20A2 DUP2 PUSH2 0x873 JUMP JUMPDEST DUP6 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP7 DUP3 DUP3 ADD MSTORE DUP7 DUP7 DUP3 ADD MSTORE PUSH1 0x60 SWAP8 DUP2 DUP9 DUP11 DUP1 SWAP5 ADD MSTORE DUP9 PUSH1 0x80 DUP3 ADD MSTORE DUP9 PUSH1 0xA0 DUP3 ADD MSTORE ADD MSTORE PUSH2 0x20D2 PUSH2 0x5928 JUMP JUMPDEST POP PUSH2 0x20DB PUSH2 0x5637 JUMP JUMPDEST POP PUSH2 0x20E7 DUP5 DUP5 DUP5 PUSH2 0x7EA8 JUMP JUMPDEST SWAP5 PUSH2 0x20F0 PUSH2 0x79F6 JUMP JUMPDEST PUSH2 0x20F8 PUSH2 0x5B3F JUMP JUMPDEST SWAP2 DUP4 MLOAD PUSH2 0x2104 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x210D DUP2 PUSH2 0x1015 JUMP JUMPDEST ISZERO PUSH2 0x24BC JUMPI JUMPDEST DUP1 DUP8 ADD PUSH2 0x2120 DUP2 MLOAD PUSH2 0xAF52 JUMP JUMPDEST DUP2 PUSH2 0x2180 DUP2 DUP8 ADD SWAP10 PUSH2 0x214B PUSH2 0x213F PUSH2 0x213F DUP14 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 DUP7 MLOAD SWAP13 DUP14 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x72C9818600000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x1759 JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP9 DUP10 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP10 PUSH2 0x249D JUMPI JUMPDEST POP DUP9 PUSH2 0x219D DUP2 PUSH2 0xAF52 JUMP JUMPDEST DUP6 MLOAD PUSH2 0x21A8 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x21B1 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x2423 JUMPI POP DUP3 DUP7 ADD MLOAD SWAP1 MSTORE PUSH2 0x21F5 PUSH1 0xC0 DUP8 ADD MLOAD PUSH2 0x21EE PUSH2 0x21E8 PUSH2 0x21D9 DUP6 DUP11 ADD SWAP4 DUP5 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP3 PUSH1 0xA0 DUP12 ADD MLOAD SWAP1 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0xB187 JUMP JUMPDEST SWAP1 DUP11 PUSH2 0xB846 JUMP JUMPDEST SWAP7 PUSH1 0x80 DUP6 ADD MLOAD SWAP4 DUP9 SWAP5 SWAP11 PUSH1 0xA0 DUP8 ADD MLOAD DUP1 DUP12 LT PUSH2 0x23F2 JUMPI POP SWAP1 DUP6 SWAP2 JUMPDEST DUP13 DUP7 DUP10 ADD SWAP5 DUP2 DUP7 MLOAD PUSH2 0x2228 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x2232 SWAP2 PUSH2 0x97C5 JUMP JUMPDEST DUP3 DUP11 ADD SWAP7 DUP6 DUP9 MLOAD PUSH2 0x2249 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x2253 SWAP2 PUSH2 0x7AC1 JUMP JUMPDEST DUP12 DUP14 DUP7 MLOAD DUP5 MLOAD PUSH2 0x2269 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP11 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP5 MLOAD SWAP2 PUSH2 0x2281 SWAP4 DUP6 PUSH2 0xAFE7 JUMP JUMPDEST SWAP4 SWAP1 DUP13 DUP3 DUP11 ADD SWAP10 ADD SWAP5 DUP6 MSTORE DUP9 MSTORE DUP3 MLOAD DUP8 DUP4 ADD SWAP5 DUP8 DUP3 DUP8 MLOAD SWAP1 PUSH2 0x22A2 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x22AD SWAP2 PUSH2 0x6C6A JUMP JUMPDEST SWAP1 MLOAD PUSH2 0x22B8 SWAP2 PUSH2 0x57A4 JUMP JUMPDEST PUSH2 0x22C2 SWAP2 DUP5 PUSH2 0xB742 JUMP JUMPDEST DUP3 ADD SWAP3 DUP4 MLOAD DUP10 DUP2 DUP4 MLOAD SWAP1 PUSH2 0x22D5 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x22E0 SWAP2 PUSH2 0x57A4 JUMP JUMPDEST PUSH2 0x22EA SWAP2 DUP5 PUSH2 0xB742 JUMP JUMPDEST DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP3 DUP2 MLOAD DUP2 MLOAD PUSH2 0x2310 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP3 PUSH1 0x80 ADD SWAP3 DUP4 MLOAD DUP3 MLOAD PUSH2 0x2323 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x232D SWAP2 PUSH2 0x7295 JUMP JUMPDEST SWAP1 MLOAD PUSH2 0x2341 SWAP1 DUP6 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE MLOAD DUP4 MLOAD PUSH2 0x234E SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 MLOAD DUP4 MLOAD PUSH2 0x235C SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x2366 SWAP2 PUSH2 0x7295 JUMP JUMPDEST SWAP2 MLOAD PUSH2 0x2379 SWAP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE MLOAD SWAP5 MLOAD SWAP6 MLOAD SWAP2 DUP11 ADD MLOAD SWAP3 MLOAD DUP8 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP5 SWAP1 SWAP5 MSTORE PUSH1 0x40 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x60 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP4 DUP3 AND SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH32 0x874B2D545CB271CDBDA4E093020C452328B24AF12382ED62C4D00F5C26709DB SWAP1 PUSH1 0x80 SWAP1 LOG4 PUSH2 0x23E4 PUSH2 0x7A4B JUMP JUMPDEST MLOAD SWAP7 DUP8 SWAP7 PUSH2 0x1270 SWAP7 DUP9 PUSH2 0x1FB5 JUMP JUMPDEST PUSH32 0xE2EA151B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 DUP12 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 JUMPDEST PUSH0 REVERT JUMPDEST SWAP1 POP PUSH2 0x2452 SWAP2 SWAP9 POP PUSH2 0x2449 DUP11 DUP8 ADD MLOAD PUSH8 0xDE0B6B3A7640000 DUP2 DUP2 SUB SWAP1 DUP3 LT MUL SWAP1 DUP4 PUSH2 0xC061 JUMP JUMPDEST SWAP1 DUP2 DUP6 MSTORE PUSH2 0x6C6A JUMP JUMPDEST SWAP7 PUSH2 0x247F PUSH2 0x2466 PUSH1 0xC0 DUP9 ADD MLOAD DUP8 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x2477 PUSH1 0xA0 DUP10 ADD MLOAD DUP9 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 DUP11 PUSH2 0xB72E JUMP JUMPDEST SWAP7 PUSH1 0x80 DUP6 ADD MLOAD SWAP4 DUP9 SWAP11 PUSH1 0xA0 DUP8 ADD MLOAD DUP1 DUP12 GT PUSH2 0x23F2 JUMPI POP SWAP1 DUP6 SWAP2 PUSH2 0x2210 JUMP JUMPDEST PUSH2 0x24B5 SWAP2 SWAP10 POP DUP3 RETURNDATASIZE DUP5 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP8 PUSH0 PUSH2 0x2192 JUMP JUMPDEST DUP1 DUP8 ADD PUSH2 0x24DB PUSH2 0x24D1 DUP3 MLOAD DUP13 DUP10 ADD MLOAD SWAP1 PUSH2 0xB824 JUMP JUMPDEST DUP1 DUP7 MSTORE DUP3 MLOAD PUSH2 0x57A4 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x2113 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH2 0xEE7 PUSH1 0x4 CALLDATALOAD PUSH2 0x2504 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0xB DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x910F JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x6DC JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x4 CALLDATALOAD DUP4 DUP2 GT PUSH2 0x6DC JUMPI DUP3 PUSH2 0x254B SWAP2 PUSH1 0x4 ADD PUSH2 0xD73 JUMP JUMPDEST SWAP3 PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI DUP4 PUSH2 0xFD1 SWAP2 PUSH1 0x4 ADD PUSH2 0x1C9B JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x2582 PUSH2 0x2574 CALLDATASIZE PUSH2 0x251E JUMP JUMPDEST SWAP2 PUSH2 0x257D PUSH2 0x79F6 JUMP JUMPDEST PUSH2 0x8470 JUMP JUMPDEST POP POP POP POP PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x25D0 DUP2 PUSH2 0x6CB JUMP JUMPDEST AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH2 0x1318 PUSH1 0x24 CALLDATALOAD PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0x91E1 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x2619 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xB26 JUMP JUMPDEST PUSH2 0x2621 PUSH2 0x7A70 JUMP JUMPDEST PUSH1 0x20 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2639 DUP2 DUP4 MLOAD AND PUSH2 0x807C JUMP JUMPDEST PUSH2 0x264D PUSH2 0x1D95 DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MLOAD ISZERO PUSH2 0x2856 JUMPI PUSH1 0x40 DUP4 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x267D PUSH2 0x213F PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP2 AND EQ PUSH2 0x282E JUMPI PUSH2 0x2698 PUSH2 0x1DAE DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x26A3 DUP4 DUP3 PUSH2 0x9254 JUMP JUMPDEST SWAP1 PUSH2 0x26AF DUP5 DUP4 DUP4 PUSH2 0x7EA8 JUMP JUMPDEST DUP5 MLOAD PUSH1 0xC SHR PUSH1 0x1 AND PUSH2 0x27B3 JUMPI JUMPDEST DUP5 MLOAD PUSH2 0x26D6 SWAP2 SWAP1 PUSH1 0xB SHR PUSH1 0x1 AND PUSH2 0x2772 JUMPI JUMPDEST DUP6 DUP5 DUP5 PUSH2 0x8D04 JUMP JUMPDEST SWAP7 SWAP2 SWAP7 SWAP5 SWAP1 SWAP7 DUP4 SWAP7 PUSH2 0x26ED DUP5 MLOAD PUSH1 0x1 SWAP1 PUSH1 0xD SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x273D JUMPI JUMPDEST POP POP POP POP POP MLOAD PUSH2 0x2701 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x270A DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x2731 JUMPI POP PUSH2 0x1270 DUP2 JUMPDEST PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 PUSH1 0x60 DUP3 ADD SWAP6 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP2 POP PUSH2 0x1270 DUP2 SWAP3 PUSH2 0x2714 JUMP JUMPDEST DUP6 SWAP8 POP SWAP1 PUSH2 0x275C PUSH2 0x1E6C PUSH2 0x1E55 PUSH2 0x2767 SWAP9 SWAP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 DUP5 MLOAD SWAP2 CALLER SWAP3 PUSH2 0x953C JUMP JUMPDEST SWAP2 PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x26F2 JUMP JUMPDEST DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x27AC PUSH1 0x60 DUP7 ADD SWAP2 DUP3 MLOAD PUSH2 0x27A5 PUSH2 0x1E6C DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 DUP6 PUSH2 0x9391 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x26CE JUMP JUMPDEST PUSH2 0x27EC SWAP1 PUSH2 0x27C8 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x27E6 PUSH2 0x1E6C DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0x92B9 JUMP JUMPDEST PUSH2 0x2809 PUSH2 0x2803 PUSH2 0x1A9D DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP6 PUSH2 0x82A9 JUMP JUMPDEST PUSH2 0x2814 DUP3 DUP6 DUP4 PUSH2 0x6A65 JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x26D6 PUSH2 0x2827 DUP6 DUP5 DUP5 PUSH2 0x7EA8 JUMP JUMPDEST SWAP1 POP PUSH2 0x26BC JUMP JUMPDEST PUSH32 0xA54B181D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x57A456B700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD DUP1 PUSH2 0x2899 JUMPI STOP JUMPDEST PUSH2 0x7C2 SWAP1 PUSH2 0xAF52 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x28BF DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH2 0x28C7 PUSH2 0x79F6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD SWAP2 PUSH32 0x15AFD40900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND PUSH1 0x4 DUP3 ADD MSTORE PUSH0 PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x44 DUP2 PUSH0 ADDRESS GAS CALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x1270 SWAP2 PUSH0 SWAP2 PUSH2 0x2926 JUMPI JUMPDEST POP PUSH2 0x15A4 PUSH2 0x7A4B JUMP JUMPDEST PUSH2 0x293F SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x291D JUMP JUMPDEST SWAP1 PUSH1 0x40 PUSH1 0x3 NOT DUP4 ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x295E DUP2 PUSH2 0x6CB JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x6DC JUMPI PUSH2 0xB23 SWAP2 PUSH1 0x4 ADD PUSH2 0x95A JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x298C CALLDATASIZE PUSH2 0x2945 JUMP JUMPDEST SWAP1 PUSH2 0x2997 DUP3 MLOAD PUSH2 0x594C JUMP JUMPDEST SWAP2 PUSH2 0x29A0 PUSH2 0x5B3F JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0x29EB JUMPI DUP1 PUSH2 0x29E5 PUSH2 0x29CC PUSH2 0x29BF PUSH1 0x1 SWAP5 DUP8 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x29D6 DUP4 DUP10 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST ADD PUSH2 0x29A3 JUMP JUMPDEST DUP5 DUP3 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND PUSH2 0x2A20 PUSH2 0x6A43 JUMP JUMPDEST SWAP4 DUP2 EXTCODESIZE ISZERO PUSH2 0x6DC JUMPI PUSH0 DUP1 SWAP5 PUSH2 0x1C6B PUSH1 0x40 MLOAD SWAP8 DUP9 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xD396A66600000000000000000000000000000000000000000000000000000000 DUP7 MSTORE PUSH1 0x4 DUP7 ADD PUSH2 0x5B5D JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x40 SWAP2 ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x2A7C DUP2 PUSH2 0x6CB JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD PUSH2 0xB23 DUP2 PUSH2 0xBB3 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2A9F CALLDATASIZE PUSH2 0x2A64 JUMP JUMPDEST SWAP2 AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE DUP3 SLOAD AND OR SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST PUSH1 0x3 NOT PUSH1 0x40 SWAP2 ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x2AEF DUP2 PUSH2 0x6CB JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD PUSH2 0xB23 DUP2 PUSH2 0x6CB JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x2B4A PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x2B28 CALLDATASIZE PUSH2 0x2AD7 JUMP JUMPDEST SWAP2 AND PUSH0 MSTORE PUSH1 0x6 DUP5 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x3 NOT PUSH1 0xA0 SWAP2 ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x40 MLOAD PUSH1 0xA0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x83E JUMPI PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATALOAD PUSH2 0x2B89 DUP2 PUSH2 0xAA1 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x24 CALLDATALOAD PUSH2 0x2B97 DUP2 PUSH2 0xAA1 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH2 0x2BA8 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x84 CALLDATALOAD PUSH1 0x80 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x2BCE CALLDATASIZE PUSH2 0x2B54 JUMP JUMPDEST PUSH2 0x2BD6 PUSH2 0x79F6 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 MLOAD SWAP2 PUSH32 0x43583BE500000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP1 MLOAD PUSH2 0x2C0A DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH1 0x4 DUP5 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH2 0x2C1D DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x44 DUP5 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x64 DUP5 ADD MSTORE ADD MLOAD PUSH1 0x84 DUP3 ADD MSTORE PUSH1 0x60 DUP2 PUSH1 0xA4 DUP2 PUSH0 ADDRESS GAS CALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH0 SWAP2 PUSH2 0x2C6E JUMPI JUMPDEST POP PUSH2 0x1270 SWAP1 PUSH2 0x2714 PUSH2 0x7A4B JUMP JUMPDEST SWAP1 POP PUSH2 0x1270 SWAP3 POP PUSH2 0x2C97 SWAP2 POP PUSH1 0x60 RETURNDATASIZE PUSH1 0x60 GT PUSH2 0x2C9E JUMPI JUMPDEST PUSH2 0x2C8F DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x5BEA JUMP JUMPDEST SWAP1 SWAP3 PUSH2 0x2C61 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2C85 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x2CCA DUP2 PUSH2 0x6CB JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0xD PUSH1 0x20 MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x2D04 DUP2 PUSH2 0x6CB JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 SWAP1 PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP2 PUSH2 0x2D26 DUP4 PUSH2 0x57E7 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x2D3E JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0x1270 DUP9 DUP3 PUSH2 0x195A JUMP JUMPDEST DUP1 PUSH1 0x1 SWAP2 PUSH0 MSTORE DUP4 DUP4 MSTORE PUSH2 0x2D54 DUP6 PUSH0 KECCAK256 SLOAD PUSH1 0x80 SHR SWAP1 JUMP JUMPDEST PUSH2 0x2D5E DUP3 DUP10 PUSH2 0x5818 JUMP JUMPDEST MSTORE ADD PUSH2 0x2D29 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH2 0x7C2 PUSH1 0x4 CALLDATALOAD PUSH2 0x2D85 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH2 0x2D90 PUSH1 0x24 CALLDATALOAD PUSH2 0xBA85 JUMP JUMPDEST SWAP1 PUSH2 0xADB5 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH2 0x2DF4 PUSH1 0x4 CALLDATALOAD PUSH2 0x2DB8 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH32 0x0 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x2E0C CALLDATASIZE PUSH2 0x2B54 JUMP JUMPDEST PUSH2 0x2E14 PUSH2 0x7A70 JUMP JUMPDEST PUSH1 0x7 SLOAD PUSH1 0x2 SHR PUSH1 0x1 AND PUSH2 0x312A JUMPI PUSH1 0x40 SWAP1 DUP2 DUP2 ADD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP2 MLOAD AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE DUP1 DUP4 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x30FE JUMPI PUSH1 0x4 SWAP5 POP PUSH2 0x2E55 PUSH2 0x79F6 JUMP JUMPDEST PUSH1 0x20 PUSH2 0x2E6B PUSH2 0x213F DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP5 MLOAD SWAP7 DUP8 DUP1 SWAP3 PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH1 0x80 SWAP6 PUSH0 SWAP2 PUSH2 0x30CF JUMPI JUMPDEST POP AND PUSH2 0x2EC2 DUP2 PUSH2 0x2EBD DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x97D1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x2EDE PUSH1 0x60 DUP7 ADD SWAP3 DUP4 MLOAD SWAP1 PUSH2 0x9827 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 DUP7 ADD MLOAD PUSH2 0x2EEE DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x2EF7 DUP2 PUSH2 0x1015 JUMP JUMPDEST SUB PUSH2 0x3064 JUMPI PUSH2 0x2F1F SWAP2 DUP6 MLOAD SWAP2 PUSH2 0x2F0C DUP4 PUSH2 0x1015 JUMP JUMPDEST DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 MLOAD SWAP3 PUSH2 0xA512 JUMP JUMPDEST PUSH32 0xEEB740C90BF2B18C9532EB7D473137767036D893DFF3E009F32718F821B2A4C0 DUP3 SWAP7 SWAP3 SWAP8 SWAP4 SWAP8 SWAP7 DUP9 PUSH2 0x2F7C PUSH2 0x2F5F PUSH2 0x213F DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 DUP10 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 PUSH1 0x60 DUP3 ADD SWAP6 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP1 LOG2 JUMPDEST DUP1 MLOAD PUSH2 0x2F8B DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x2F94 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x3015 JUMPI ADD MLOAD DUP1 DUP5 LT PUSH2 0x2FE5 JUMPI POP MLOAD PUSH2 0x1270 SWAP2 DUP4 SWAP2 PUSH2 0x2FC2 SWAP1 DUP4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x9827 JUMP JUMPDEST PUSH2 0x9827 JUMP JUMPDEST PUSH2 0x2FCA PUSH2 0x7A4B JUMP JUMPDEST MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 PUSH1 0x60 DUP3 ADD SWAP6 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST PUSH32 0xE2EA151B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 DUP5 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST ADD MLOAD DUP1 DUP6 GT PUSH2 0x3034 JUMPI POP SWAP2 PUSH2 0x1270 SWAP2 PUSH2 0x2FC2 PUSH2 0x2FBD SWAP5 DUP7 SWAP6 DUP7 SWAP2 PUSH2 0x29BF JUMP JUMPDEST PUSH32 0xE2EA151B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 DUP6 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x3087 SWAP2 DUP6 MLOAD SWAP2 PUSH2 0x3074 DUP4 PUSH2 0x1015 JUMP JUMPDEST DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 MLOAD SWAP3 PUSH2 0x9D6E JUMP JUMPDEST PUSH32 0x3771D13C67011E31E12031C54BB59B0BF544A80B81D280A3711E172AA8B7F47B DUP3 SWAP7 SWAP3 SWAP8 SWAP4 SWAP8 SWAP7 DUP9 PUSH2 0x30C7 PUSH2 0x2F5F PUSH2 0x213F DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SUB SWAP1 LOG2 PUSH2 0x2F80 JUMP JUMPDEST PUSH2 0x30F1 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x30F7 JUMPI JUMPDEST PUSH2 0x30E9 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x5C05 JUMP JUMPDEST PUSH0 PUSH2 0x2EA6 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x30DF JUMP JUMPDEST DUP5 PUSH32 0x85F4129900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xF27DF0900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x31A5 PUSH2 0x31C7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x316E CALLDATASIZE PUSH2 0x6FB JUMP JUMPDEST SWAP5 SWAP2 SWAP3 SWAP1 SWAP3 AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH2 0x319B DUP4 PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x80 SHR SWAP1 PUSH2 0x7295 JUMP JUMPDEST SWAP3 PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE STOP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x31FC SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xB26 JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x6DC JUMPI PUSH1 0x80 SWAP2 PUSH2 0x321B PUSH2 0x322A SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xD73 JUMP JUMPDEST SWAP1 PUSH2 0x3224 PUSH2 0x5928 JUMP JUMPDEST POP PUSH2 0x9254 JUMP JUMPDEST PUSH2 0x3255 PUSH1 0x40 MLOAD DUP1 SWAP3 PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD SWAP2 ADD MSTORE JUMP JUMPDEST RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x7C2 PUSH2 0x3268 CALLDATASIZE PUSH2 0x6FB JUMP JUMPDEST SWAP2 PUSH2 0xA837 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH2 0xB23 SWAP3 DUP2 DUP2 MSTORE ADD SWAP1 PUSH2 0x1177 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x6DC JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x6DC JUMPI CALLDATASIZE PUSH1 0x24 DUP4 DUP4 ADD ADD GT PUSH2 0x6DC JUMPI PUSH2 0x1270 SWAP2 PUSH1 0x24 PUSH2 0x32D6 SWAP3 ADD PUSH2 0x5C1A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x326E JUMP JUMPDEST PUSH2 0x32F8 PUSH2 0xB23 SWAP5 SWAP3 PUSH1 0x60 DUP4 MSTORE PUSH1 0x60 DUP4 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x1177 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x333C SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xEFC JUMP JUMPDEST PUSH2 0x3344 PUSH2 0x7A70 JUMP JUMPDEST PUSH2 0x3357 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 MLOAD AND PUSH2 0x807C JUMP JUMPDEST PUSH2 0x336B PUSH2 0x1D95 DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x33C8 PUSH32 0x0 TLOAD PUSH2 0x33A1 DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0x0 PUSH2 0xA996 JUMP JUMPDEST PUSH2 0x33E1 PUSH2 0x33DC DUP3 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x77EA JUMP JUMPDEST PUSH2 0x3434 PUSH1 0x20 DUP3 ADD MLOAD MLOAD PUSH2 0x33FB PUSH1 0x40 DUP6 ADD SWAP2 DUP3 MLOAD MLOAD SWAP1 PUSH2 0x80D5 JUMP JUMPDEST DUP1 MLOAD PUSH1 0xC0 DUP5 ADD SWAP1 PUSH2 0x3415 DUP3 MLOAD SWAP2 PUSH1 0xA0 DUP8 ADD SWAP3 DUP4 MLOAD SWAP2 PUSH2 0xA9AF JUMP JUMPDEST SWAP3 PUSH2 0x3425 DUP7 MLOAD PUSH1 0x1 SWAP1 PUSH1 0xE SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x3498 JUMPI JUMPDEST POP POP POP DUP4 DUP4 PUSH2 0x6CA2 JUMP JUMPDEST SWAP2 SWAP1 SWAP5 SWAP3 SWAP4 DUP5 SWAP4 DUP7 PUSH2 0x344B DUP4 MLOAD PUSH1 0x1 SWAP1 PUSH1 0xF SHR AND SWAP1 JUMP JUMPDEST PUSH2 0x3461 JUMPI JUMPDEST DUP6 PUSH2 0x1270 DUP7 PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 DUP5 PUSH2 0x32E2 JUMP JUMPDEST PUSH2 0x1270 SWAP6 POP PUSH2 0x348C SWAP5 SWAP7 PUSH2 0x3482 PUSH2 0x1E6C PUSH2 0x1E55 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 DUP5 MLOAD CALLER SWAP1 PUSH2 0xABBB JUMP JUMPDEST SWAP1 POP DUP2 PUSH0 DUP1 DUP1 DUP7 PUSH2 0x3450 JUMP JUMPDEST PUSH2 0x34BF PUSH2 0x34E7 SWAP5 DUP8 DUP10 PUSH2 0x34B8 PUSH2 0x1E6C PUSH2 0x1E55 DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 CALLER PUSH2 0xAA76 JUMP JUMPDEST PUSH2 0x34DC PUSH2 0x34D6 PUSH2 0x1A9D DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP8 PUSH2 0x834D JUMP JUMPDEST MLOAD SWAP2 MLOAD SWAP1 MLOAD SWAP2 PUSH2 0xA9AF JUMP JUMPDEST PUSH0 DUP1 DUP1 PUSH2 0x342A JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x3514 DUP2 PUSH2 0x6CB JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC PUSH1 0x80 SWAP2 ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0x3561 DUP3 PUSH2 0x843 JUMP JUMPDEST DUP2 PUSH1 0x24 CALLDATALOAD PUSH2 0x356E DUP2 PUSH2 0xBB3 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x44 CALLDATALOAD PUSH2 0x357C DUP2 PUSH2 0xBB3 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD PUSH2 0x358D DUP2 PUSH2 0xBB3 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x84 CALLDATALOAD SWAP2 PUSH2 0x35A1 DUP4 PUSH2 0xBB3 JUMP JUMPDEST ADD MSTORE JUMP JUMPDEST PUSH2 0x104 CALLDATALOAD SWAP1 PUSH5 0xFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x6DC JUMPI JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x1C0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x35D8 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH2 0x1A0 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH2 0x7C2 SWAP1 PUSH2 0x360F PUSH2 0x8DF JUMP JUMPDEST SWAP1 PUSH2 0x3619 CALLDATASIZE PUSH2 0x352A JUMP JUMPDEST DUP3 MSTORE PUSH1 0xA4 CALLDATALOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0xC4 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xE4 CALLDATALOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x363B PUSH2 0x35A5 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x3648 PUSH2 0x9D7 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0x3655 PUSH2 0xBBD JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x3662 PUSH2 0xBCB JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x366F PUSH2 0xBD9 JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE PUSH2 0x367D PUSH2 0xBE7 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE PUSH2 0x5CE7 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x369E CALLDATASIZE PUSH2 0x2A64 JUMP JUMPDEST SWAP2 AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD DUP3 SLOAD AND SWAP1 PUSH1 0x1 SHL OR SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0x0 TSTORE STOP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x6DC JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x372C DUP2 PUSH2 0x942 JUMP JUMPDEST SWAP4 PUSH2 0x373A PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x88F JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x6DC JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x3763 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 DUP1 SWAP2 DUP4 CALLDATALOAD PUSH2 0x3771 DUP2 PUSH2 0x6CB JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x3755 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x37AF SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x95A JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x37C8 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3712 JUMP JUMPDEST PUSH2 0x37D2 DUP3 MLOAD PUSH2 0x594C JUMP JUMPDEST SWAP3 PUSH0 JUMPDEST DUP4 MLOAD DUP2 LT ISZERO PUSH2 0x3857 JUMPI DUP1 PUSH2 0x37F1 PUSH2 0x29CC PUSH2 0x29BF PUSH1 0x1 SWAP5 DUP9 PUSH2 0x5818 JUMP JUMPDEST PUSH2 0x381C PUSH2 0x3801 PUSH2 0x29BF DUP4 DUP8 PUSH2 0x5818 JUMP JUMPDEST DUP5 PUSH2 0x380C DUP5 DUP11 PUSH2 0x5818 JUMP JUMPDEST MLOAD ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x382C PUSH2 0x213F PUSH2 0x29BF DUP4 DUP8 PUSH2 0x5818 JUMP JUMPDEST PUSH2 0x384E JUMPI PUSH2 0x3848 PUSH0 JUMPDEST PUSH1 0x20 PUSH2 0x3841 DUP5 DUP11 PUSH2 0x5818 JUMP JUMPDEST MLOAD ADD PUSH2 0x5F73 JUMP JUMPDEST ADD PUSH2 0x37D5 JUMP JUMPDEST PUSH2 0x3848 DUP3 PUSH2 0x3835 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xBB4AD7D500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH0 DUP2 DUP1 PUSH2 0x388D DUP10 PUSH1 0x4 DUP4 ADD PUSH2 0x1F54 JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x1270 SWAP2 PUSH0 SWAP2 PUSH2 0x38D9 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x1F54 JUMP JUMPDEST PUSH2 0x38F5 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x38ED DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x599A JUMP JUMPDEST DUP3 PUSH2 0x38CC JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x6DC JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x3915 DUP2 PUSH2 0x942 JUMP JUMPDEST SWAP4 PUSH2 0x3923 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x88F JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x6DC JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x394C JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 DUP1 SWAP2 DUP4 CALLDATALOAD PUSH2 0x395A DUP2 PUSH2 0xBB3 JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x393E JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x3997 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x95A JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD SWAP2 DUP2 DUP4 GT PUSH2 0x6DC JUMPI CALLDATASIZE PUSH1 0x23 DUP5 ADD SLT ISZERO PUSH2 0x6DC JUMPI DUP3 PUSH1 0x4 ADD CALLDATALOAD PUSH2 0x39BC DUP2 PUSH2 0x942 JUMP JUMPDEST SWAP4 PUSH2 0x39CA PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x88F JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 SWAP2 PUSH1 0x24 PUSH1 0x20 DUP8 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x6DC JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x3A3E JUMPI POP POP POP POP PUSH1 0x44 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x3A0D SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3712 JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP3 DUP4 GT PUSH2 0x6DC JUMPI PUSH2 0x1270 SWAP4 PUSH2 0x3A2C PUSH2 0x3A32 SWAP5 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x38FB JUMP JUMPDEST SWAP3 PUSH2 0x5F86 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x1F54 JUMP JUMPDEST DUP4 DUP1 SWAP2 DUP4 CALLDATALOAD PUSH2 0x3A4C DUP2 PUSH2 0xAA1 JUMP JUMPDEST DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x39EA JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH2 0x7C2 PUSH1 0x4 CALLDATALOAD PUSH2 0x3A77 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH2 0x807C JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x3A99 DUP2 PUSH2 0xBB3 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD PUSH1 0x7 SLOAD AND SWAP1 PUSH1 0x1 SHL OR PUSH1 0x7 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH0 PUSH32 0x0 TSTORE STOP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x31A5 PUSH2 0x31C7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x3B1B CALLDATASIZE PUSH2 0x6FB JUMP JUMPDEST SWAP5 SWAP2 SWAP3 SWAP1 SWAP3 AND SWAP4 DUP5 PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x3B59 DUP5 PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD AND PUSH2 0x7295 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH32 0x0 TSTORE STOP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH2 0x7C2 PUSH1 0x4 CALLDATALOAD PUSH2 0x3BB6 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x24 CALLDATALOAD SWAP2 PUSH2 0x3BCB DUP4 PUSH2 0x6CB JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x1 PUSH1 0x20 MSTORE PUSH1 0x2 PUSH1 0x40 PUSH0 KECCAK256 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x40 SWAP2 ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x3C25 DUP2 PUSH2 0x6CB JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x7C2 PUSH2 0x2D90 CALLDATASIZE PUSH2 0x3C0D JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH32 0x0 TLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x3C8F CALLDATASIZE PUSH2 0x2945 JUMP JUMPDEST SWAP2 AND PUSH0 MSTORE PUSH1 0x20 SWAP1 PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP2 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x83E JUMPI PUSH9 0x10000000000000000 DUP4 GT PUSH2 0x83E JUMPI DUP2 SLOAD DUP4 DUP4 SSTORE DUP1 DUP5 LT PUSH2 0x3D0E JUMPI JUMPDEST POP PUSH1 0x20 PUSH2 0x3CE0 SWAP2 ADD SWAP2 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP3 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0x3CEC JUMPI STOP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH2 0x3D01 DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 ADD SWAP4 DUP2 DUP8 ADD SSTORE ADD PUSH2 0x3CE3 JUMP JUMPDEST DUP3 PUSH0 MSTORE DUP4 PUSH1 0x20 PUSH0 KECCAK256 SWAP2 DUP3 ADD SWAP2 ADD JUMPDEST DUP2 DUP2 LT PUSH2 0x3D29 JUMPI POP PUSH2 0x3CCE JUMP JUMPDEST PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x3D1C JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x3D42 CALLDATASIZE PUSH2 0x2945 JUMP JUMPDEST SWAP1 PUSH2 0x3D4B PUSH2 0x69D7 JUMP JUMPDEST PUSH2 0x3D53 PUSH2 0x5B3F JUMP JUMPDEST SWAP1 PUSH2 0x3D87 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND SWAP4 PUSH2 0x5A72 JUMP JUMPDEST SWAP2 PUSH0 SWAP4 PUSH2 0x3D92 PUSH2 0x6A43 JUMP JUMPDEST SWAP4 DUP2 EXTCODESIZE ISZERO PUSH2 0x6DC JUMPI PUSH0 DUP1 SWAP5 PUSH2 0x3DD6 PUSH1 0x40 MLOAD SWAP8 DUP9 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xD396A66600000000000000000000000000000000000000000000000000000000 DUP7 MSTORE PUSH1 0x4 DUP7 ADD PUSH2 0x5B5D JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x3DE8 JUMPI POP DUP1 RETURN JUMPDEST PUSH2 0x7C2 SWAP2 POP PUSH2 0x85F JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x3E17 DUP2 PUSH2 0x6CB JUMP JUMPDEST AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x3 SHR AND ISZERO PUSH2 0x3E31 JUMPI STOP JUMPDEST PUSH32 0xEF029ADF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH2 0x3EDC PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x3EBA CALLDATASIZE PUSH2 0x2AD7 JUMP JUMPDEST SWAP2 AND PUSH0 MSTORE PUSH1 0x6 DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0x80 SHR PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x3F0D DUP2 PUSH2 0x6CB JUMP JUMPDEST AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH2 0x1318 PUSH1 0x24 CALLDATALOAD PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0xAD75 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x3F33 CALLDATASIZE PUSH2 0x1646 JUMP JUMPDEST PUSH2 0x3F3E SWAP3 SWAP2 SWAP3 PUSH2 0x79F6 JUMP JUMPDEST PUSH2 0x3F49 DUP2 DUP5 DUP5 PUSH2 0x7EA8 JUMP JUMPDEST SWAP3 PUSH2 0x3F52 PUSH2 0x79F6 JUMP JUMPDEST PUSH2 0x3F5A PUSH2 0x5B3F JUMP JUMPDEST SWAP1 DUP4 MLOAD PUSH2 0x3F66 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x3F6F DUP2 PUSH2 0x1015 JUMP JUMPDEST ISZERO PUSH2 0x42F9 JUMPI JUMPDEST PUSH1 0x20 SWAP5 PUSH0 DUP7 DUP3 ADD PUSH2 0x3F86 DUP2 MLOAD PUSH2 0xAF52 JUMP JUMPDEST DUP8 PUSH2 0x3FDB DUP2 DUP10 ADD SWAP5 PUSH2 0x3FA5 PUSH2 0x213F PUSH2 0x213F DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP6 DUP7 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x72C9818600000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x1759 JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP3 PUSH2 0x42DA JUMPI JUMPDEST POP PUSH2 0x3FF7 DUP3 PUSH2 0xAF52 JUMP JUMPDEST DUP7 MLOAD PUSH2 0x4002 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x400B DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x4266 JUMPI SWAP1 PUSH2 0x404A SWAP2 PUSH1 0x40 DUP6 ADD MLOAD SWAP1 MSTORE PUSH1 0xC0 DUP7 ADD MLOAD PUSH2 0x4044 PUSH2 0x21E8 PUSH2 0x4035 DUP12 DUP9 ADD SWAP4 DUP5 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP3 PUSH1 0xA0 DUP11 ADD MLOAD SWAP1 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST SWAP2 PUSH2 0xB846 JUMP JUMPDEST SWAP1 PUSH1 0x80 DUP7 ADD MLOAD SWAP5 DUP3 SWAP6 SWAP3 PUSH1 0xA0 DUP9 ADD MLOAD SWAP1 DUP2 DUP2 LT PUSH2 0x4238 JUMPI POP POP JUMPDEST PUSH1 0x40 DUP8 ADD SWAP7 DUP4 DUP9 MLOAD PUSH2 0x407C SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x4086 SWAP2 PUSH2 0x97C5 JUMP JUMPDEST PUSH1 0x60 ADD SWAP8 DUP7 DUP10 MLOAD PUSH2 0x409D SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x40A7 SWAP2 PUSH2 0x7AC1 JUMP JUMPDEST DUP6 MLOAD DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MLOAD SWAP2 PUSH2 0x40CC SWAP4 DUP7 PUSH2 0xAFE7 JUMP JUMPDEST SWAP2 SWAP1 DUP2 DUP9 ADD SWAP8 PUSH1 0x40 ADD SWAP3 DUP4 MSTORE DUP8 MSTORE DUP6 MLOAD PUSH1 0x60 DUP5 ADD SWAP3 DUP7 DUP3 DUP6 MLOAD SWAP1 PUSH2 0x40EF SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x40FA SWAP2 PUSH2 0x6C6A JUMP JUMPDEST SWAP1 MLOAD PUSH2 0x4105 SWAP2 PUSH2 0x57A4 JUMP JUMPDEST PUSH2 0x410F SWAP2 DUP6 PUSH2 0xB742 JUMP JUMPDEST DUP6 ADD SWAP2 DUP3 MLOAD DUP9 DUP2 DUP5 MLOAD SWAP1 PUSH2 0x4122 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x412D SWAP2 PUSH2 0x57A4 JUMP JUMPDEST PUSH2 0x4137 SWAP2 DUP4 PUSH2 0xB742 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 DUP1 MLOAD DUP8 MLOAD PUSH2 0x415D SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP2 PUSH1 0x80 ADD SWAP2 DUP3 MLOAD DUP9 MLOAD PUSH2 0x4170 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x417A SWAP2 PUSH2 0x7295 JUMP JUMPDEST DUP8 MLOAD PUSH2 0x418E SWAP1 DUP6 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE MLOAD DUP4 MLOAD PUSH2 0x419B SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 MLOAD DUP4 MLOAD PUSH2 0x41A9 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x41B3 SWAP2 PUSH2 0x7295 JUMP JUMPDEST SWAP2 MLOAD PUSH2 0x41C6 SWAP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE MLOAD SWAP5 MLOAD SWAP6 MLOAD PUSH1 0x60 SWAP3 DUP4 ADD MLOAD SWAP4 MLOAD PUSH1 0x40 DUP1 MLOAD SWAP4 DUP5 MSTORE PUSH1 0x20 DUP5 ADD SWAP7 SWAP1 SWAP7 MSTORE SWAP5 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP1 DUP2 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND SWAP4 DUP2 AND SWAP3 AND SWAP1 PUSH32 0x874B2D545CB271CDBDA4E093020C452328B24AF12382ED62C4D00F5C26709DB SWAP1 PUSH1 0x80 SWAP1 LOG4 PUSH2 0x4230 PUSH2 0x7A4B JUMP JUMPDEST PUSH2 0x7C2 PUSH2 0x7A4B JUMP JUMPDEST PUSH32 0xE2EA151B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP PUSH2 0x4296 PUSH2 0x42BE SWAP2 PUSH2 0x428D PUSH1 0x60 DUP7 ADD MLOAD PUSH8 0xDE0B6B3A7640000 DUP2 DUP2 SUB SWAP1 DUP3 LT MUL SWAP1 DUP4 PUSH2 0xC061 JUMP JUMPDEST SWAP1 DUP2 DUP8 MSTORE PUSH2 0x6C6A JUMP JUMPDEST PUSH2 0x42A6 PUSH1 0xC0 DUP8 ADD MLOAD DUP6 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x42B7 PUSH1 0xA0 DUP9 ADD MLOAD DUP7 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP2 PUSH2 0xB72E JUMP JUMPDEST SWAP1 PUSH1 0x80 DUP7 ADD MLOAD SWAP5 DUP3 PUSH1 0xA0 DUP9 ADD MLOAD SWAP1 DUP2 DUP2 GT PUSH2 0x4238 JUMPI POP POP PUSH2 0x4064 JUMP JUMPDEST PUSH2 0x42F2 SWAP2 SWAP3 POP DUP9 RETURNDATASIZE DUP11 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x3FED JUMP JUMPDEST PUSH1 0x20 DUP6 ADD PUSH2 0x431A PUSH2 0x4310 DUP3 MLOAD PUSH1 0x60 DUP6 ADD MLOAD SWAP1 PUSH2 0xB824 JUMP JUMPDEST DUP1 DUP6 MSTORE DUP3 MLOAD PUSH2 0x57A4 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x3F75 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x4346 DUP2 PUSH2 0x6CB JUMP JUMPDEST AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH2 0x1318 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH5 0x174876E800 PUSH1 0x24 CALLDATALOAD DIV SWAP1 PUSH2 0xB875 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH2 0x437E PUSH2 0x79F6 JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD ISZERO PUSH2 0x6DC JUMPI PUSH0 SWAP1 TSTORE STOP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH2 0xEE7 PUSH1 0x4 CALLDATALOAD PUSH2 0x43CD DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0xB DUP4 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH2 0xAE78 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x441B PUSH2 0x1270 SWAP2 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xD73 JUMP JUMPDEST PUSH2 0x44B4 PUSH1 0x24 CALLDATALOAD PUSH1 0x44 CALLDATALOAD PUSH2 0x442D DUP2 PUSH2 0xAA1 JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP1 PUSH2 0x4439 PUSH2 0x5637 JUMP JUMPDEST POP DUP3 PUSH2 0x4449 DUP4 PUSH1 0x60 DUP9 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH2 0x4453 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x44C1 JUMPI PUSH1 0x2 SWAP2 JUMPDEST PUSH2 0x44AD PUSH1 0xC0 DUP7 ADD SWAP3 PUSH2 0x44A5 DUP2 PUSH2 0x4472 DUP2 DUP8 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP6 PUSH2 0x4490 PUSH1 0xA0 DUP12 ADD SWAP8 PUSH2 0x4487 DUP5 DUP11 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 DUP9 DUP12 PUSH2 0xC6E9 JUMP JUMPDEST PUSH2 0x449E DUP4 PUSH1 0x80 DUP14 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP4 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP3 PUSH2 0xC6E9 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x13D9 JUMP JUMPDEST PUSH1 0x1 SWAP2 PUSH2 0x445B JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH2 0x7C2 PUSH1 0x4 CALLDATALOAD PUSH2 0x44E9 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x24 CALLDATALOAD SWAP2 PUSH2 0x44FE DUP4 PUSH2 0x6CB JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x80 SWAP2 ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x4555 DUP2 PUSH2 0x6CB JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD PUSH2 0x4562 DUP2 PUSH2 0x6CB JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x64 CALLDATALOAD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x7C2 PUSH2 0x457E CALLDATASIZE PUSH2 0x453D JUMP JUMPDEST SWAP3 SWAP2 SWAP1 SWAP2 PUSH2 0xAF0D JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x4595 CALLDATASIZE PUSH2 0x6FB JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x459F PUSH2 0x79F6 JUMP JUMPDEST PUSH2 0x45A7 PUSH2 0x7A70 JUMP JUMPDEST PUSH2 0x45B9 PUSH2 0x45B3 DUP4 PUSH2 0xBA85 JUMP JUMPDEST DUP3 PUSH2 0xADB5 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP4 DUP4 DUP6 SUB SWAP5 DUP6 GT PUSH2 0x465D JUMPI SWAP4 SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH32 0xA9059CBB00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP1 DUP5 ADD SWAP3 SWAP1 SWAP3 MSTORE SWAP1 DUP3 MSTORE PUSH2 0x4638 SWAP2 SWAP1 PUSH2 0x4633 PUSH1 0x64 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH2 0xC3EE JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH2 0x5769 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH2 0x7C2 PUSH1 0x4 CALLDATALOAD PUSH2 0x4682 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x7AC1 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH2 0x7C2 PUSH1 0x4 CALLDATALOAD PUSH2 0xAF52 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x7C2 PUSH2 0x46F2 CALLDATASIZE PUSH2 0x453D JUMP JUMPDEST SWAP3 SWAP2 SWAP1 SWAP2 PUSH2 0xAFA2 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH2 0x7C2 PUSH2 0x7A70 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH2 0xEE7 PUSH1 0x4 CALLDATALOAD PUSH2 0x4735 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x6111 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 DUP1 CALLDATALOAD PUSH2 0x479F DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 PUSH1 0x24 CALLDATALOAD DUP4 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x47C1 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x95A JUMP JUMPDEST SWAP3 PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x47DA SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xC6C JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH0 JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0x7C2 JUMPI DUP1 PUSH2 0x47FE PUSH1 0x1 SWAP3 DUP8 PUSH2 0x5818 JUMP JUMPDEST MLOAD DUP4 PUSH0 MSTORE PUSH1 0x20 SWAP1 DUP7 DUP3 MSTORE PUSH1 0x40 SWAP1 PUSH2 0x4834 DUP11 DUP9 PUSH2 0x481D DUP8 DUP7 PUSH0 KECCAK256 SWAP4 PUSH2 0x5818 JUMP JUMPDEST MLOAD AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000 PUSH1 0xFF PUSH22 0xFF000000000000000000000000000000000000000000 DUP5 MLOAD SWAP6 PUSH2 0x487B DUP8 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x4884 DUP8 PUSH2 0x1015 JUMP JUMPDEST PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 DUP9 SLOAD SWAP6 DUP8 ADD MLOAD PUSH1 0x8 SHL AND SWAP6 ADD MLOAD ISZERO ISZERO PUSH1 0xA8 SHL AND SWAP5 AND SWAP2 AND OR OR OR SWAP1 SSTORE ADD PUSH2 0x47E8 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH2 0xEE7 PUSH1 0x4 CALLDATALOAD PUSH2 0x48DE DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x62B8 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0xA0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x491B PUSH2 0x4941 SWAP2 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xD73 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD PUSH2 0x4927 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP1 PUSH2 0x4934 DUP3 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD SWAP3 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0xAFE7 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP1 RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x163B PUSH2 0x4964 CALLDATASIZE PUSH2 0x6FB JUMP JUMPDEST SWAP2 CALLER PUSH2 0x7CDC JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x180 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x4989 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH2 0x160 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH2 0x7C2 SWAP1 PUSH2 0x49C0 PUSH2 0x900 JUMP JUMPDEST SWAP1 PUSH2 0x49C9 PUSH2 0xBF5 JUMP JUMPDEST DUP3 MSTORE PUSH2 0x49D3 PUSH2 0xC02 JUMP JUMPDEST PUSH1 0x20 DUP4 ADD MSTORE PUSH2 0x49E0 PUSH2 0xC0F JUMP JUMPDEST PUSH1 0x40 DUP4 ADD MSTORE PUSH2 0x49ED PUSH2 0xC1C JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE PUSH2 0x49FA PUSH2 0xC29 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x4A07 PUSH2 0xC36 JUMP JUMPDEST PUSH1 0xA0 DUP4 ADD MSTORE PUSH2 0x4A14 PUSH2 0xC43 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x4A21 PUSH2 0xC50 JUMP JUMPDEST PUSH1 0xE0 DUP4 ADD MSTORE PUSH2 0x4A2E PUSH2 0xC5E JUMP JUMPDEST PUSH2 0x100 DUP4 ADD MSTORE PUSH2 0x4A3C PUSH2 0xBBD JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MSTORE PUSH2 0x4A4A PUSH2 0x6ED JUMP JUMPDEST PUSH2 0x140 DUP4 ADD MSTORE PUSH2 0x6335 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x4A6B CALLDATASIZE PUSH2 0x2AD7 JUMP JUMPDEST SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND ISZERO PUSH2 0x4AC4 JUMPI PUSH2 0x4AB1 SWAP1 PUSH2 0x4AA4 SWAP3 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH2 0x4AAB PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP3 PUSH2 0x5859 JUMP JUMPDEST SUB DUP5 PUSH2 0x88F JUMP JUMPDEST DUP3 PUSH2 0xB10B JUMP JUMPDEST SWAP1 MLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE RETURN JUMPDEST POP PUSH32 0x9E51BD5C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x4B06 CALLDATASIZE PUSH2 0x2A64 JUMP JUMPDEST SWAP2 AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB DUP3 SLOAD AND SWAP1 PUSH1 0x2 SHL OR SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH2 0xEE7 PUSH1 0x4 CALLDATALOAD PUSH2 0x4B64 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x65E6 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH2 0x6DC JUMPI STOP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x4BC2 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x24 CALLDATALOAD SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH8 0xDE0B5CAD2BEF000 DUP3 GT PUSH2 0x4BFC JUMPI PUSH5 0x174876E800 PUSH2 0x1318 SWAP3 DIV SWAP1 PUSH2 0xB875 JUMP JUMPDEST PUSH32 0x746E594000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x4C32 CALLDATASIZE PUSH2 0x6FB JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x4C3C PUSH2 0x79F6 JUMP JUMPDEST ADDRESS EXTCODESIZE ISZERO PUSH2 0x6DC JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH32 0xAE63932900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND PUSH1 0x4 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH1 0x44 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x64 DUP2 DUP4 ADDRESS GAS CALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x4CBD JUMPI PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE STOP JUMPDEST PUSH2 0x4CC6 SWAP1 PUSH2 0x85F JUMP JUMPDEST PUSH0 PUSH2 0x4638 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x7C2 PUSH2 0x4CDD CALLDATASIZE PUSH2 0x3C0D JUMP JUMPDEST SWAP1 PUSH32 0x0 PUSH2 0xB171 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH2 0xEE7 PUSH1 0x4 CALLDATALOAD PUSH2 0x4D26 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x66EE JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x4D92 DUP2 PUSH2 0x6CB JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x4DC3 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x4DE3 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xD73 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x44 CALLDATALOAD SWAP2 PUSH2 0x4DF9 DUP4 PUSH2 0xAA1 JUMP JUMPDEST PUSH2 0x4E01 PUSH2 0x5637 JUMP JUMPDEST POP AND PUSH0 MSTORE PUSH1 0x20 SWAP1 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH1 0x20 DUP6 ADD MLOAD MLOAD SWAP4 PUSH0 PUSH1 0x40 DUP8 ADD PUSH1 0xA0 DUP9 ADD SWAP2 JUMPDEST DUP8 DUP2 LT PUSH2 0x4E39 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0x1270 DUP12 DUP3 PUSH2 0x13D9 JUMP JUMPDEST DUP1 PUSH2 0x4E50 PUSH2 0x4E4A PUSH1 0x1 SWAP4 DUP6 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0xBB7D JUMP JUMPDEST PUSH2 0x4E5B DUP3 DUP7 MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE DUP1 PUSH0 MSTORE DUP6 DUP6 MSTORE PUSH2 0x4E83 DUP9 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 PUSH0 KECCAK256 SLOAD AND DUP4 DUP14 PUSH2 0xB7D2 JUMP JUMPDEST ADD PUSH2 0x4E24 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x4EA6 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x4EC7 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x95A JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x4EDF SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xD13 JUMP JUMPDEST SWAP2 PUSH1 0x64 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x4F00 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0xD13 JUMP JUMPDEST SWAP4 PUSH2 0x4F0E DUP4 MLOAD DUP6 MLOAD EQ PUSH2 0x589D JUMP JUMPDEST PUSH2 0x4F1B DUP4 MLOAD DUP7 MLOAD EQ PUSH2 0x589D JUMP JUMPDEST AND SWAP2 DUP3 PUSH0 MSTORE PUSH1 0x20 SWAP2 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP2 PUSH1 0x40 PUSH0 KECCAK256 SWAP2 PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x4F66 JUMPI DUP1 PUSH2 0x4F56 PUSH2 0x4F4B PUSH1 0x1 SWAP4 DUP7 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x1ADB DUP4 DUP13 PUSH2 0x5818 JUMP JUMPDEST DUP2 PUSH0 MSTORE DUP6 DUP9 MSTORE DUP7 PUSH0 KECCAK256 SSTORE ADD PUSH2 0x4F32 JUMP JUMPDEST PUSH2 0x7C2 DUP3 DUP9 PUSH0 MSTORE PUSH1 0x3 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH2 0x6076 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x4F99 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x6DC JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0x6DC JUMPI DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP2 PUSH2 0x4FC6 DUP4 PUSH2 0x942 JUMP JUMPDEST SWAP3 PUSH2 0x4FD4 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x88F JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH1 0x20 SWAP1 PUSH1 0x24 PUSH1 0x20 DUP7 ADD SWAP2 PUSH1 0x7 SHL DUP5 ADD ADD SWAP3 CALLDATASIZE DUP5 GT PUSH2 0x6DC JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x5005 JUMPI PUSH2 0x7C2 DUP7 DUP7 PUSH2 0x6766 JUMP JUMPDEST PUSH1 0x80 DUP3 CALLDATASIZE SUB SLT PUSH2 0x6DC JUMPI DUP3 PUSH1 0x80 SWAP2 DUP9 MLOAD PUSH2 0x501E DUP2 PUSH2 0x843 JUMP JUMPDEST DUP5 CALLDATALOAD PUSH2 0x5029 DUP2 PUSH2 0x6CB JUMP JUMPDEST DUP2 MSTORE DUP3 DUP6 ADD CALLDATALOAD PUSH2 0x5038 DUP2 PUSH2 0xAA1 JUMP JUMPDEST DUP4 DUP3 ADD MSTORE DUP10 DUP6 ADD CALLDATALOAD PUSH2 0x5049 DUP2 PUSH2 0x6CB JUMP JUMPDEST DUP11 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP7 ADD CALLDATALOAD SWAP1 PUSH2 0x505D DUP3 PUSH2 0xBB3 JUMP JUMPDEST DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0x4FF4 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x1270 PUSH2 0x5099 PUSH2 0x507F CALLDATASIZE PUSH2 0x13B4 JUMP JUMPDEST SWAP1 PUSH2 0x5088 PUSH2 0x5637 JUMP JUMPDEST POP PUSH2 0x5091 PUSH2 0x79F6 JUMP JUMPDEST PUSH2 0x1410 PUSH2 0x5637 JUMP JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x10B8 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x50F5 DUP2 PUSH2 0x6CB JUMP JUMPDEST AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 PUSH0 KECCAK256 SSTORE PUSH0 DUP1 RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x5116 CALLDATASIZE PUSH2 0x2A64 JUMP JUMPDEST SWAP1 PUSH32 0x0 TLOAD PUSH0 MSTORE PUSH32 0x0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TSTORE STOP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH2 0x51A1 PUSH1 0x4 CALLDATALOAD PUSH2 0x5190 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH2 0x5198 PUSH2 0x5B3F JUMP JUMPDEST POP PUSH2 0x7F0 PUSH2 0x69D7 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x7 SLOAD PUSH1 0x40 MLOAD SWAP1 PUSH2 0x51B3 DUP3 PUSH2 0x822 JUMP JUMPDEST PUSH1 0x1 DUP2 AND ISZERO ISZERO SWAP2 DUP3 DUP2 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH1 0x20 DUP4 ADD SWAP3 DUP3 DUP6 DUP2 SHR AND ISZERO ISZERO DUP5 MSTORE ADD SWAP3 PUSH1 0x2 SHR AND ISZERO ISZERO DUP3 MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 MSTORE MLOAD ISZERO ISZERO PUSH1 0x20 DUP4 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x60 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x5225 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x95A JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD DUP4 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x523E SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3712 JUMP JUMPDEST SWAP3 PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0x5257 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x38FB JUMP JUMPDEST PUSH2 0x5261 DUP4 MLOAD PUSH2 0x594C JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x5304 JUMPI DUP1 PUSH2 0x528A PUSH2 0x5280 PUSH2 0x29BF PUSH1 0x1 SWAP5 DUP10 PUSH2 0x5818 JUMP JUMPDEST PUSH2 0x29D6 DUP4 DUP11 PUSH2 0x5818 JUMP JUMPDEST PUSH2 0x52A6 PUSH2 0x529A PUSH2 0x29BF DUP4 DUP7 PUSH2 0x5818 JUMP JUMPDEST PUSH1 0x40 PUSH2 0x380C DUP5 DUP12 PUSH2 0x5818 JUMP JUMPDEST PUSH2 0x52B6 PUSH2 0x213F PUSH2 0x29BF DUP4 DUP7 PUSH2 0x5818 JUMP JUMPDEST PUSH2 0x52FB JUMPI PUSH2 0x52CB PUSH0 JUMPDEST PUSH1 0x20 PUSH2 0x3841 DUP5 DUP12 PUSH2 0x5818 JUMP JUMPDEST PUSH2 0x52F5 PUSH2 0x52E1 PUSH2 0x52DB DUP4 DUP8 PUSH2 0x5818 JUMP JUMPDEST MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST DUP7 PUSH2 0x52EC DUP5 DUP12 PUSH2 0x5818 JUMP JUMPDEST MLOAD ADD SWAP1 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST ADD PUSH2 0x5264 JUMP JUMPDEST PUSH2 0x52CB DUP3 PUSH2 0x52BF JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xBB4AD7D500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH0 DUP2 DUP1 PUSH2 0x388D DUP11 PUSH1 0x4 DUP4 ADD PUSH2 0x1F54 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x4 CALLDATALOAD PUSH2 0x535F DUP2 PUSH2 0x6CB JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0xEE7 PUSH2 0x53AC PUSH1 0x20 SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x95A JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x53B9 DUP3 PUSH2 0x6CB JUMP JUMPDEST PUSH2 0xB10B JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x2582 PUSH2 0x53CF CALLDATASIZE PUSH2 0xF8C JUMP JUMPDEST SWAP2 PUSH2 0x53D8 PUSH2 0x79F6 JUMP JUMPDEST PUSH2 0x6CA2 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH2 0x5459 PUSH2 0x546C PUSH2 0x1270 PUSH2 0x122D PUSH2 0x547A PUSH2 0x53FA CALLDATASIZE PUSH2 0x251E JUMP JUMPDEST PUSH2 0x5406 SWAP7 SWAP2 SWAP3 SWAP7 PUSH2 0x5637 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP3 PUSH2 0x543C PUSH1 0x20 DUP6 ADD DUP6 PUSH2 0x541D DUP5 DUP4 PUSH2 0x6868 JUMP JUMPDEST SUB SWAP6 PUSH2 0x5431 PUSH1 0x1F NOT SWAP8 DUP9 DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x88F JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP3 DUP3 DUP11 PUSH2 0x8470 JUMP JUMPDEST SWAP9 SWAP3 SWAP5 SWAP2 SWAP4 SWAP1 SWAP7 PUSH2 0x1224 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x1218 PUSH1 0x20 DUP3 ADD SWAP6 DUP7 PUSH2 0x6868 JUMP JUMPDEST SWAP2 PUSH1 0x20 DUP10 ADD MSTORE DUP8 DUP3 SUB PUSH1 0x40 DUP10 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST SWAP1 DUP6 DUP3 SUB PUSH1 0x60 DUP8 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x80 DUP6 ADD MSTORE PUSH2 0x1177 JUMP JUMPDEST CALLVALUE PUSH2 0x6DC JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6DC JUMPI PUSH1 0x4 CALLDATALOAD PUSH2 0x54A5 DUP2 PUSH2 0x6CB JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x24 CALLDATALOAD SWAP2 PUSH2 0x54BA DUP4 PUSH2 0x6CB JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0xC PUSH1 0x20 MSTORE PUSH2 0x31C7 PUSH1 0x44 CALLDATALOAD SWAP2 PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x6DC JUMPI MLOAD PUSH2 0xB23 DUP2 PUSH2 0xBB3 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x550F PUSH2 0x69D7 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x5543 DUP2 PUSH32 0x0 AND SWAP3 PUSH2 0x5A72 JUMP JUMPDEST SWAP3 PUSH2 0x554C PUSH2 0x6A43 JUMP JUMPDEST SWAP1 DUP4 EXTCODESIZE ISZERO PUSH2 0x6DC JUMPI PUSH2 0x55AE SWAP7 PUSH2 0x5619 PUSH0 SWAP8 SWAP4 PUSH2 0x55E1 DUP10 SWAP6 PUSH4 0xFFFFFFFF PUSH1 0x40 MLOAD SWAP13 DUP14 SWAP12 DUP13 SWAP11 DUP12 SWAP10 PUSH32 0xE0677AB00000000000000000000000000000000000000000000000000000000 DUP12 MSTORE AND PUSH1 0x4 DUP11 ADD MSTORE PUSH2 0x160 PUSH1 0x24 DUP11 ADD MSTORE PUSH2 0x164 DUP10 ADD SWAP1 PUSH2 0x1EE5 JUMP JUMPDEST SWAP6 AND PUSH1 0x44 DUP8 ADD MSTORE DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH1 0x64 DUP9 ADD MSTORE PUSH1 0x20 DUP3 ADD MLOAD DUP2 AND PUSH1 0x84 DUP9 ADD MSTORE PUSH1 0x40 SWAP1 SWAP2 ADD MLOAD AND PUSH1 0xA4 DUP7 ADD MSTORE JUMP JUMPDEST PUSH1 0xC4 DUP5 ADD DUP6 SWAP1 MSTORE DUP1 MLOAD ISZERO ISZERO PUSH1 0xE4 DUP6 ADD MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x104 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH2 0x124 DUP6 ADD MSTORE PUSH1 0x60 ADD MLOAD ISZERO ISZERO PUSH2 0x144 DUP5 ADD MSTORE JUMP JUMPDEST SUB SWAP3 GAS CALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x562A JUMPI POP JUMP JUMPDEST DUP1 PUSH2 0x1C88 PUSH2 0x6EB SWAP3 PUSH2 0x85F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x5644 DUP3 PUSH2 0x873 JUMP JUMPDEST DUP2 PUSH0 DUP2 MSTORE PUSH1 0xC0 PUSH1 0x60 SWAP2 DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 DUP1 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST PUSH1 0x5 GT ISZERO PUSH2 0x101F JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x5 DUP3 LT ISZERO PUSH2 0x101F JUMPI MSTORE JUMP JUMPDEST SWAP1 PUSH2 0xB23 SWAP2 PUSH1 0x20 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xA0 PUSH2 0x56C5 PUSH1 0x40 DUP5 ADD MLOAD PUSH1 0xC0 PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0xE0 DUP5 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP3 PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x56E1 PUSH1 0x80 DUP3 ADD MLOAD DUP4 DUP6 ADD SWAP1 PUSH2 0x5678 JUMP JUMPDEST ADD MLOAD SWAP1 PUSH1 0xC0 PUSH1 0x1F NOT DUP3 DUP6 SUB ADD SWAP2 ADD MSTORE PUSH2 0x1177 JUMP JUMPDEST ISZERO PUSH2 0x56FC JUMPI JUMP JUMPDEST PUSH1 0x64 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x1D PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E70757420706172616D65746572732068617665206368616E676564000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x6DC JUMPI MLOAD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH0 NOT DUP3 ADD SWAP2 DUP3 GT PUSH2 0x465D JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x465D JUMPI JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x57BE DUP3 PUSH2 0x873 JUMP JUMPDEST PUSH1 0x60 PUSH1 0xC0 DUP4 PUSH0 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE PUSH0 DUP4 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE PUSH0 PUSH1 0xA0 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 PUSH2 0x57F1 DUP3 PUSH2 0x942 JUMP JUMPDEST PUSH2 0x57FE PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x88F JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x580E DUP3 SWAP5 PUSH2 0x942 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x582C JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 SLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 SWAP3 ADD SWAP3 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP2 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x587D JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP6 MSTORE SWAP4 DUP5 ADD SWAP4 PUSH1 0x1 SWAP4 DUP5 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x586F JUMP JUMPDEST ISZERO PUSH2 0x58A4 JUMPI JUMP JUMPDEST PUSH1 0x84 PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x21 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5661756C744D6F636B3A20544F4B454E535F4C454E4754485F4D49534D415443 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x4800000000000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x5935 DUP3 PUSH2 0x843 JUMP JUMPDEST PUSH0 PUSH1 0x60 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 PUSH2 0x5956 DUP3 PUSH2 0x942 JUMP JUMPDEST PUSH2 0x5963 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x88F JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0x5973 DUP3 SWAP5 PUSH2 0x942 JUMP JUMPDEST ADD SWAP1 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x5983 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH2 0x598E PUSH2 0x5928 JUMP JUMPDEST DUP3 DUP3 DUP6 ADD ADD MSTORE ADD PUSH2 0x5977 JUMP JUMPDEST SWAP1 PUSH1 0x20 SWAP2 DUP3 DUP2 DUP4 SUB SLT PUSH2 0x6DC JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x6DC JUMPI ADD DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x6DC JUMPI DUP1 MLOAD SWAP3 PUSH2 0x59D1 DUP5 PUSH2 0x942 JUMP JUMPDEST SWAP4 PUSH1 0x40 SWAP4 PUSH2 0x59E2 PUSH1 0x40 MLOAD SWAP7 DUP8 PUSH2 0x88F JUMP JUMPDEST DUP2 DUP7 MSTORE DUP3 DUP1 DUP8 ADD SWAP3 PUSH1 0x7 SHL DUP6 ADD ADD SWAP4 DUP2 DUP6 GT PUSH2 0x6DC JUMPI DUP4 ADD SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x5A0C JUMPI POP POP POP POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP4 DUP4 SUB SLT PUSH2 0x6DC JUMPI DUP4 PUSH1 0x80 SWAP2 DUP8 MLOAD PUSH2 0x5A25 DUP2 PUSH2 0x843 JUMP JUMPDEST DUP6 MLOAD PUSH2 0x5A30 DUP2 PUSH2 0x6CB JUMP JUMPDEST DUP2 MSTORE DUP3 DUP7 ADD MLOAD PUSH2 0x5A3F DUP2 PUSH2 0xAA1 JUMP JUMPDEST DUP4 DUP3 ADD MSTORE DUP9 DUP7 ADD MLOAD PUSH2 0x5A50 DUP2 PUSH2 0x6CB JUMP JUMPDEST DUP10 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP8 ADD MLOAD SWAP1 PUSH2 0x5A64 DUP3 PUSH2 0xBB3 JUMP JUMPDEST DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x59FC JUMP JUMPDEST PUSH2 0x5A7C DUP2 MLOAD PUSH2 0x594C JUMP JUMPDEST SWAP1 PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x5AB2 JUMPI DUP1 PUSH2 0x5AAC PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x5AA0 PUSH1 0x1 SWAP5 DUP7 PUSH2 0x5818 JUMP JUMPDEST MLOAD AND PUSH2 0x29D6 DUP4 DUP8 PUSH2 0x5818 JUMP JUMPDEST ADD PUSH2 0x5A7F JUMP JUMPDEST POP POP PUSH0 PUSH2 0x5AEC SWAP2 PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xBB4AD7D500000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x1F54 JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP2 PUSH2 0x5B2B JUMPI POP SWAP1 JUMP JUMPDEST PUSH2 0xB23 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x38ED DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x5B4C DUP3 PUSH2 0x822 JUMP JUMPDEST PUSH0 PUSH1 0x40 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST PUSH2 0x5BB7 PUSH2 0x5B8A PUSH2 0x6EB SWAP6 SWAP8 SWAP7 SWAP5 PUSH1 0xC0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x140 SWAP2 AND DUP6 MSTORE DUP1 PUSH1 0x20 DUP7 ADD MSTORE DUP5 ADD SWAP1 PUSH2 0x1EE5 JUMP JUMPDEST SWAP7 PUSH1 0x40 DUP4 ADD SWAP1 PUSH1 0x40 SWAP1 DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 DUP2 MLOAD AND DUP6 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE ADD MLOAD AND SWAP2 ADD MSTORE JUMP JUMPDEST PUSH0 PUSH1 0xA0 DUP3 ADD MSTORE ADD SWAP1 PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x60 SWAP2 SUB SLT PUSH2 0x6DC JUMPI DUP1 MLOAD SWAP2 PUSH1 0x40 PUSH1 0x20 DUP4 ADD MLOAD SWAP3 ADD MLOAD SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x6DC JUMPI MLOAD PUSH2 0xB23 DUP2 PUSH2 0x6CB JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH2 0x5C5C PUSH2 0x5C56 PUSH32 0x0 SWAP3 DUP4 TLOAD ISZERO SWAP6 DUP7 PUSH2 0x5CDE JUMPI JUMPDEST CALLDATASIZE SWAP2 PUSH2 0xAD2 JUMP JUMPDEST CALLER PUSH2 0xC24C JUMP JUMPDEST SWAP3 PUSH2 0x5C64 JUMPI POP JUMP JUMPDEST PUSH32 0x0 TLOAD PUSH2 0x5CB6 JUMPI PUSH0 SWAP1 TSTORE PUSH2 0x6EB PUSH32 0x0 PUSH2 0xA985 JUMP JUMPDEST PUSH32 0x20F1D86D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 DUP6 TSTORE PUSH2 0x5C4F JUMP JUMPDEST SWAP1 PUSH2 0x18A3 DUP2 PUSH1 0x60 PUSH2 0x5F40 PUSH2 0x5F0E PUSH2 0x5EDC PUSH2 0x5EAA PUSH2 0x5E62 PUSH2 0x5E1E PUSH2 0x5E14 PUSH2 0x5E09 PUSH2 0x5DFE PUSH2 0x5DCB PUSH2 0x5F70 SWAP14 DUP16 PUSH2 0x120 PUSH2 0x5D98 PUSH2 0x5D66 PUSH2 0x5D37 PUSH2 0x5DA0 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH1 0xC0 DUP7 ADD MLOAD ISZERO ISZERO SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE AND OR SWAP1 JUMP JUMPDEST PUSH1 0xE0 DUP6 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD SWAP1 PUSH1 0x1 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST SWAP3 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7 SWAP1 PUSH1 0x3 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH2 0x100 DUP13 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB SWAP1 PUSH1 0x2 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP12 ADD MLOAD SWAP1 PUSH2 0x91E1 JUMP JUMPDEST PUSH1 0x40 DUP11 ADD MLOAD SWAP1 PUSH2 0xAD64 JUMP JUMPDEST DUP8 DUP10 ADD MLOAD SWAP1 PUSH2 0xAD75 JUMP JUMPDEST PUSH1 0x80 DUP9 ADD MLOAD PUSH1 0x5A SHL PUSH17 0x3FFFFFFFFFC0000000000000000000000 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0000000003FFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0xA0 DUP8 ADD MLOAD PUSH1 0x82 SHL PUSH21 0x3FFFFFFFC00000000000000000000000000000000 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFC00000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 SWAP1 SWAP2 AND OR SWAP1 JUMP JUMPDEST SWAP5 MLOAD SWAP5 DUP6 MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF SWAP1 PUSH1 0x4 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP6 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF SWAP1 PUSH1 0x5 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF SWAP1 PUSH1 0x6 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST SWAP2 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F SWAP1 PUSH1 0x7 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST SSTORE JUMP JUMPDEST PUSH2 0x16E8 DUP3 PUSH2 0x1015 JUMP JUMPDEST MLOAD PUSH2 0xB23 DUP2 PUSH2 0x1015 JUMP JUMPDEST SWAP2 SWAP1 SWAP4 SWAP3 SWAP4 PUSH2 0x5F95 DUP4 MLOAD PUSH2 0x594C JUMP JUMPDEST SWAP3 PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x6007 JUMPI DUP1 PUSH2 0x5FB4 PUSH2 0x29CC PUSH2 0x29BF PUSH1 0x1 SWAP5 DUP7 PUSH2 0x5818 JUMP JUMPDEST PUSH2 0x5FC9 PUSH2 0x3835 PUSH2 0x5FC4 DUP4 DUP8 PUSH2 0x5818 JUMP JUMPDEST PUSH2 0x5F7C JUMP JUMPDEST PUSH2 0x5FE5 PUSH2 0x5FD9 PUSH2 0x29BF DUP4 DUP9 PUSH2 0x5818 JUMP JUMPDEST PUSH1 0x40 PUSH2 0x380C DUP5 DUP11 PUSH2 0x5818 JUMP JUMPDEST PUSH2 0x6001 PUSH2 0x5FF5 PUSH2 0x52DB DUP4 DUP12 PUSH2 0x5818 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x52EC DUP5 DUP11 PUSH2 0x5818 JUMP JUMPDEST ADD PUSH2 0x5F98 JUMP JUMPDEST POP POP POP POP PUSH2 0x5AEC SWAP2 SWAP3 POP PUSH0 SWAP1 PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xBB4AD7D500000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x1F54 JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x465D JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x465D JUMPI JUMP JUMPDEST DUP2 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x83E JUMPI PUSH9 0x10000000000000000 DUP4 GT PUSH2 0x83E JUMPI DUP2 SLOAD DUP4 DUP4 SSTORE DUP1 DUP5 LT PUSH2 0x60EB JUMPI JUMPDEST POP PUSH2 0x60B8 PUSH1 0x20 DUP1 SWAP3 ADD SWAP3 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x60C9 JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP3 PUSH2 0x60DE DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP6 ADD SWAP5 DUP2 DUP6 ADD SSTORE ADD PUSH2 0x60BB JUMP JUMPDEST DUP3 PUSH0 MSTORE DUP4 PUSH1 0x20 PUSH0 KECCAK256 SWAP2 DUP3 ADD SWAP2 ADD JUMPDEST DUP2 DUP2 LT PUSH2 0x6106 JUMPI POP PUSH2 0x60A5 JUMP JUMPDEST PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x60F9 JUMP JUMPDEST SWAP1 DUP1 ISZERO DUP1 ISZERO PUSH2 0x619C JUMPI JUMPDEST PUSH2 0x6196 JUMPI PUSH1 0x40 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP5 PUSH1 0x4 DUP2 DUP6 DUP6 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x6171 SWAP5 PUSH0 SWAP2 PUSH2 0x6177 JUMPI JUMPDEST POP AND PUSH2 0x98A1 JUMP JUMPDEST POP SWAP1 POP SWAP1 JUMP JUMPDEST PUSH2 0x6190 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x30F7 JUMPI PUSH2 0x30E9 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x616A JUMP JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST POP PUSH2 0x61E3 PUSH1 0x20 PUSH2 0x61AB DUP4 PUSH2 0x5796 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xEF8B30F700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP2 PUSH2 0x6206 JUMPI JUMPDEST POP ISZERO PUSH2 0x611B JUMP JUMPDEST PUSH2 0x621F SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x61FF JUMP JUMPDEST SWAP1 DUP1 MLOAD SWAP1 PUSH2 0x6232 DUP3 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x623B DUP3 PUSH2 0x1015 JUMP JUMPDEST DUP3 SLOAD PUSH1 0x20 DUP3 ADD MLOAD PUSH1 0x40 SWAP3 SWAP1 SWAP3 ADD MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000 SWAP1 SWAP2 AND PUSH1 0xFF SWAP4 SWAP1 SWAP4 AND SWAP3 SWAP1 SWAP3 OR PUSH1 0x8 SWAP2 SWAP1 SWAP2 SHL PUSH21 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND OR SWAP1 ISZERO ISZERO PUSH1 0xA8 SHL PUSH22 0xFF000000000000000000000000000000000000000000 AND OR SWAP1 SSTORE JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x6196 JUMPI PUSH1 0x40 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP5 PUSH1 0x4 DUP2 DUP6 DUP6 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x6311 SWAP5 PUSH0 SWAP2 PUSH2 0x6316 JUMPI JUMPDEST POP AND PUSH2 0xA150 JUMP JUMPDEST POP POP SWAP1 JUMP JUMPDEST PUSH2 0x632F SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x30F7 JUMPI PUSH2 0x30E9 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x630A JUMP JUMPDEST PUSH2 0x65B3 PUSH2 0x659B PUSH2 0x213F PUSH2 0x140 PUSH2 0x6EB SWAP6 PUSH2 0x6572 PUSH2 0x653F PUSH2 0x650C PUSH2 0x64DA PUSH2 0x64A8 PUSH2 0x6476 PUSH2 0x6444 PUSH2 0x6412 PUSH2 0x63E0 PUSH2 0x63AE DUP16 PUSH2 0x637E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD DUP12 MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFF SWAP1 PUSH1 0x9 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0x20 DUP12 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFF SWAP1 PUSH1 0x8 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0x40 DUP11 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFF SWAP1 PUSH1 0xA SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP10 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FF SWAP1 PUSH1 0xB SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP9 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFF SWAP1 PUSH1 0xC SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0xA0 DUP8 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFF SWAP1 PUSH1 0xD SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0xC0 DUP7 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFF SWAP1 PUSH1 0xE SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH1 0xE0 DUP6 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFF SWAP1 PUSH1 0xF SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH2 0x100 DUP5 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFF SWAP1 PUSH1 0x10 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH2 0x120 DUP4 ADD MLOAD ISZERO ISZERO PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFF SWAP1 PUSH1 0x11 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH2 0x658C DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP3 SLOAD AND OR SWAP1 SSTORE JUMP JUMPDEST SWAP1 DUP1 ISZERO DUP1 ISZERO PUSH2 0x6665 JUMPI JUMPDEST PUSH2 0x6196 JUMPI PUSH1 0x40 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP5 PUSH1 0x4 DUP2 DUP6 DUP6 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x6171 SWAP5 PUSH0 SWAP2 PUSH2 0x6646 JUMPI JUMPDEST POP AND PUSH2 0xA358 JUMP JUMPDEST PUSH2 0x665F SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x30F7 JUMPI PUSH2 0x30E9 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x663F JUMP JUMPDEST POP PUSH2 0x66AC PUSH1 0x20 PUSH2 0x6674 DUP4 PUSH2 0x5796 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0x4CDAD50600000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP2 PUSH2 0x66CF JUMPI JUMPDEST POP ISZERO PUSH2 0x65F0 JUMP JUMPDEST PUSH2 0x66E8 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x66C8 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x6196 JUMPI PUSH1 0x40 MLOAD PUSH32 0x38D52E0F00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP5 PUSH1 0x4 DUP2 DUP6 DUP6 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x6311 SWAP5 PUSH0 SWAP2 PUSH2 0x6747 JUMPI JUMPDEST POP AND PUSH2 0x9B0B JUMP JUMPDEST PUSH2 0x6760 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x30F7 JUMPI PUSH2 0x30E9 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x6740 JUMP JUMPDEST SWAP2 SWAP1 PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x684B JUMPI PUSH1 0x1 SWAP1 PUSH2 0x6845 PUSH1 0x20 PUSH2 0x67F2 DUP2 PUSH2 0x6789 DUP6 DUP9 PUSH2 0x5818 JUMP JUMPDEST MLOAD ADD MLOAD SWAP2 PUSH2 0x6796 DUP4 PUSH2 0x1015 JUMP JUMPDEST PUSH1 0x40 PUSH2 0x67E9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 PUSH2 0x67AE DUP10 DUP13 PUSH2 0x5818 JUMP JUMPDEST MLOAD ADD MLOAD AND PUSH1 0x60 PUSH2 0x67BE DUP10 DUP13 PUSH2 0x5818 JUMP JUMPDEST MLOAD ADD MLOAD ISZERO ISZERO SWAP4 PUSH2 0x67D9 DUP5 MLOAD SWAP8 PUSH2 0x67D3 DUP10 PUSH2 0x822 JUMP JUMPDEST DUP9 PUSH2 0x5F73 JUMP JUMPDEST DUP7 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST DUP4 ADD SWAP1 ISZERO ISZERO SWAP1 MSTORE JUMP JUMPDEST PUSH2 0x6840 PUSH2 0x6810 DUP9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x4 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0x682B PUSH2 0x681D DUP7 DUP10 PUSH2 0x5818 JUMP JUMPDEST MLOAD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0x6225 JUMP JUMPDEST ADD PUSH2 0x676A JUMP JUMPDEST POP POP SWAP1 POP JUMP JUMPDEST PUSH1 0x4 GT ISZERO PUSH2 0x101F JUMPI JUMP JUMPDEST SWAP1 PUSH1 0x4 DUP3 LT ISZERO PUSH2 0x101F JUMPI MSTORE JUMP JUMPDEST SWAP1 PUSH2 0xB23 SWAP2 PUSH1 0x20 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 MLOAD AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x20 DUP4 ADD MLOAD AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x40 DUP3 ADD MLOAD PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0xA0 PUSH2 0x68B2 PUSH1 0x60 DUP5 ADD MLOAD PUSH1 0xC0 PUSH1 0x80 DUP6 ADD MSTORE PUSH1 0xE0 DUP5 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP3 PUSH2 0x56E1 PUSH1 0x80 DUP3 ADD MLOAD DUP4 DUP6 ADD SWAP1 PUSH2 0x685B JUMP JUMPDEST PUSH32 0xF223889600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x68C4 JUMPI CALLDATASIZE PUSH0 DUP1 CALLDATACOPY PUSH0 DUP1 CALLDATASIZE DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH32 0x0 AND GAS DELEGATECALL RETURNDATASIZE PUSH0 DUP1 RETURNDATACOPY ISZERO PUSH2 0x6932 JUMPI RETURNDATASIZE PUSH0 RETURN JUMPDEST RETURNDATASIZE PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x1 DUP2 PUSH1 0x2 SHR AND SWAP1 PUSH4 0xFFFFFFFF DUP1 SWAP2 PUSH2 0x6962 PUSH1 0x82 SWAP1 JUMP JUMPDEST SHR AND DUP3 PUSH2 0x699E JUMPI JUMPDEST POP POP PUSH2 0x6973 JUMPI POP JUMP JUMPDEST PUSH32 0xD971F59700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP PUSH32 0x0 AND ADD DUP2 DUP2 GT PUSH2 0x465D JUMPI AND TIMESTAMP GT ISZERO PUSH0 DUP1 PUSH2 0x696A JUMP JUMPDEST PUSH4 0xFFFFFFFF PUSH32 0x0 AND TIMESTAMP GT ISZERO DUP1 PUSH2 0x6A35 JUMPI JUMPDEST PUSH2 0x6A0D JUMPI JUMP JUMPDEST PUSH32 0xDA9F8B3400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x1 PUSH1 0x7 SLOAD DUP2 SHR AND PUSH2 0x6A07 JUMP JUMPDEST PUSH2 0x6A4B PUSH2 0x5928 JUMP JUMPDEST POP PUSH2 0x6A54 PUSH2 0x5928 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x1 PUSH1 0x40 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 DUP1 MLOAD PUSH2 0x6A73 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x6A7C DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x6AC8 JUMPI SWAP1 PUSH2 0x6ABF PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH2 0x6AB8 PUSH1 0x80 PUSH2 0x6AC4 SWAP6 ADD MLOAD SWAP4 PUSH1 0xA0 PUSH2 0x6AAC PUSH1 0xC0 DUP6 ADD MLOAD DUP4 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP4 ADD MLOAD SWAP1 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP3 PUSH2 0x6063 JUMP JUMPDEST PUSH2 0x6063 JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST PUSH2 0xB23 SWAP3 PUSH2 0x6AFE PUSH2 0x21E8 PUSH1 0x80 PUSH2 0x6B04 SWAP5 ADD MLOAD SWAP5 PUSH1 0xA0 PUSH2 0x6AF2 PUSH1 0x20 PUSH1 0xC0 DUP8 ADD MLOAD SWAP4 ADD SWAP3 DUP4 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP5 ADD MLOAD SWAP1 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST SWAP3 PUSH2 0x6063 JUMP JUMPDEST PUSH2 0xB824 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x6DC JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x6B24 DUP2 PUSH2 0x942 JUMP JUMPDEST SWAP4 PUSH2 0x6B32 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x88F JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x6DC JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x6B5B JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x6B4D JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x6DC JUMPI DUP1 MLOAD SWAP1 PUSH2 0x6B81 DUP3 PUSH2 0xAB6 JUMP JUMPDEST SWAP3 PUSH2 0x6B8F PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x88F JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x6DC JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP4 DUP4 SUB SLT PUSH2 0x6DC JUMPI DUP3 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP2 GT PUSH2 0x6DC JUMPI DUP4 PUSH2 0x6BDB SWAP2 DUP7 ADD PUSH2 0x6B09 JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP2 ADD MLOAD SWAP4 PUSH1 0x40 DUP3 ADD MLOAD DUP5 DUP2 GT PUSH2 0x6DC JUMPI DUP2 PUSH2 0x6BFA SWAP2 DUP5 ADD PUSH2 0x6B09 JUMP JUMPDEST SWAP4 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0xB23 SWAP3 ADD PUSH2 0x6B6A JUMP JUMPDEST SWAP4 PUSH2 0x6C3B PUSH2 0x6C4E SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xB23 SWAP9 SWAP7 SWAP5 AND DUP8 MSTORE PUSH1 0xA0 PUSH1 0x20 DUP9 ADD MSTORE PUSH1 0xA0 DUP8 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP7 ADD MSTORE DUP5 DUP3 SUB PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x1177 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x465D JUMPI JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x465D JUMPI JUMP JUMPDEST SWAP2 PUSH2 0x6C94 SWAP1 PUSH2 0xB23 SWAP5 SWAP3 DUP5 MSTORE PUSH1 0x60 PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x6CAC PUSH2 0x79F6 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x6CB6 PUSH2 0x5B3F JUMP JUMPDEST SWAP2 PUSH1 0x20 DUP6 ADD PUSH2 0x6CC9 DUP2 MLOAD MLOAD DUP1 DUP7 MSTORE PUSH2 0x57E7 JUMP JUMPDEST PUSH1 0x80 DUP4 ADD SWAP6 DUP7 MLOAD PUSH2 0x6CD9 DUP2 PUSH2 0x566E JUMP JUMPDEST PUSH2 0x6CE2 DUP2 PUSH2 0x566E JUMP JUMPDEST PUSH2 0x6FC2 JUMPI POP PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0x6CF6 DUP7 MLOAD PUSH2 0x57E7 JUMP JUMPDEST SWAP5 PUSH2 0x6D32 DUP3 PUSH1 0x80 DUP12 ADD MLOAD PUSH2 0x6D2C PUSH2 0x6D14 DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0xB6E7 JUMP JUMPDEST SWAP10 JUMPDEST PUSH1 0x60 DUP7 ADD MLOAD DUP1 DUP5 LT PUSH2 0x6F92 JUMPI POP PUSH2 0x6D4D DUP4 SWAP10 SWAP9 SWAP10 PUSH2 0x97B4 JUMP JUMPDEST PUSH1 0x20 DUP10 ADD SWAP8 PUSH0 JUMPDEST DUP13 DUP12 MLOAD DUP3 LT ISZERO PUSH2 0x6EAD JUMPI DUP2 PUSH2 0x6D68 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x6D72 DUP2 PUSH2 0x97B4 JUMP JUMPDEST PUSH2 0x6D7C DUP3 DUP9 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x6E9C JUMPI PUSH2 0x6DA3 SWAP1 DUP14 PUSH2 0x42B7 DUP5 PUSH1 0xA0 PUSH2 0x6D9A DUP3 PUSH1 0xC0 DUP7 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP4 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST DUP1 PUSH2 0x6DAE DUP4 DUP10 PUSH2 0x5818 JUMP JUMPDEST MSTORE JUMPDEST PUSH2 0x6DBE PUSH2 0x29BF DUP4 DUP11 MLOAD PUSH2 0x5818 JUMP JUMPDEST PUSH1 0x40 DUP11 ADD PUSH2 0x6DCD DUP5 DUP3 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD DUP4 GT PUSH2 0x6E50 JUMPI POP DUP14 DUP4 PUSH2 0x6E44 DUP15 PUSH2 0x6E3C DUP16 SWAP7 DUP16 SWAP8 PUSH2 0x6E27 DUP7 PUSH2 0x6E1F DUP2 DUP12 PUSH1 0x1 SWAP15 SWAP14 PUSH2 0x6DFC DUP9 PUSH2 0x6E4A SWAP16 PUSH2 0x97C5 JUMP JUMPDEST PUSH2 0x6E18 PUSH2 0x6E09 DUP5 DUP10 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 DUP14 PUSH2 0xAFE7 JUMP JUMPDEST DUP8 MSTORE SWAP3 PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH2 0x6E36 DUP6 PUSH1 0x60 DUP9 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x6C6A JUMP JUMPDEST SWAP1 MLOAD SWAP1 PUSH2 0x57A4 JUMP JUMPDEST SWAP2 PUSH2 0xB742 JUMP JUMPDEST ADD PUSH2 0x6D54 JUMP JUMPDEST SWAP2 PUSH2 0x6E5F DUP5 PUSH2 0x2420 SWAP5 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH32 0x8EDA85E400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST POP PUSH2 0x6EA7 DUP2 DUP8 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x6DB0 JUMP JUMPDEST POP POP SWAP4 SWAP7 SWAP5 POP SWAP7 POP SWAP7 POP SWAP7 PUSH2 0x6ED2 SWAP1 PUSH2 0x6ECD DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x72F9 JUMP JUMPDEST PUSH32 0xA26A52D8D53702BBA7F137907B8E1F99FF87F6D450144270CA25E72481CCA871 PUSH2 0x6F04 DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 PUSH2 0x6F25 DUP10 PUSH1 0x20 DUP8 ADD SWAP6 PUSH2 0x6F1F DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0xA837 JUMP JUMPDEST PUSH2 0x6F59 PUSH2 0x6D14 PUSH2 0x6F4D PUSH2 0x6F3F DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 MLOAD SWAP7 PUSH2 0x29BF DUP9 PUSH2 0x566E JUMP JUMPDEST SWAP3 PUSH2 0x6F81 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH2 0x6F6F DUP9 PUSH2 0x566E JUMP JUMPDEST DUP9 DUP5 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP6 AND SWAP9 AND SWAP7 DUP5 PUSH2 0x6C77 JUMP JUMPDEST SUB SWAP1 LOG4 PUSH2 0x6F8C PUSH2 0x7A4B JUMP JUMPDEST SWAP4 SWAP3 SWAP2 SWAP1 JUMP JUMPDEST PUSH32 0x8D261D5D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 DUP5 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH1 0x3 DUP8 MLOAD PUSH2 0x6FCF DUP2 PUSH2 0x566E JUMP JUMPDEST PUSH2 0x6FD8 DUP2 PUSH2 0x566E JUMP JUMPDEST SUB PUSH2 0x6FFA JUMPI PUSH2 0x6FE7 DUP9 MLOAD PUSH2 0xB6B2 JUMP JUMPDEST PUSH2 0x6FF1 DUP2 MLOAD PUSH2 0x57E7 JUMP JUMPDEST SWAP5 PUSH0 SWAP2 SWAP10 PUSH2 0x6D34 JUMP JUMPDEST SWAP8 PUSH1 0x1 DUP8 MLOAD PUSH2 0x7008 DUP2 PUSH2 0x566E JUMP JUMPDEST PUSH2 0x7011 DUP2 PUSH2 0x566E JUMP JUMPDEST SUB PUSH2 0x7079 JUMPI PUSH2 0x7020 DUP9 MLOAD PUSH2 0xB1E0 JUMP JUMPDEST PUSH2 0x7071 DUP10 PUSH2 0x7032 DUP5 PUSH1 0x40 DUP9 ADD MLOAD PUSH2 0xB413 JUMP JUMPDEST PUSH1 0x80 DUP11 ADD MLOAD SWAP1 PUSH2 0x704C PUSH2 0x6D14 DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH2 0x7056 DUP13 MLOAD PUSH2 0xB2A3 JUMP JUMPDEST SWAP2 PUSH2 0x706B PUSH2 0x213F DUP11 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP4 PUSH2 0xB462 JUMP JUMPDEST SWAP6 SWAP1 SWAP2 PUSH2 0x6D34 JUMP JUMPDEST SWAP8 SWAP4 PUSH1 0x2 DUP8 MLOAD PUSH2 0x7088 DUP2 PUSH2 0x566E JUMP JUMPDEST PUSH2 0x7091 DUP2 PUSH2 0x566E JUMP JUMPDEST SUB PUSH2 0x7112 JUMPI SWAP8 DUP8 SWAP9 PUSH2 0x70A3 DUP10 MLOAD PUSH2 0xB1E0 JUMP JUMPDEST PUSH1 0x60 DUP6 ADD MLOAD SWAP2 PUSH2 0x70B2 DUP8 PUSH2 0xB214 JUMP JUMPDEST PUSH2 0x710C PUSH2 0x7102 PUSH1 0x40 DUP12 ADD SWAP3 DUP1 DUP5 MSTORE DUP10 DUP12 SWAP16 DUP9 PUSH1 0x80 DUP3 ADD MLOAD SWAP4 PUSH2 0x70FC PUSH2 0x213F PUSH2 0x70EE PUSH2 0x70E7 PUSH2 0x6D14 DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP6 MLOAD PUSH2 0xB2A3 JUMP JUMPDEST SWAP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH2 0xB2E8 JUMP JUMPDEST SWAP1 SWAP3 MLOAD SWAP1 SWAP10 PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH2 0x6D34 JUMP JUMPDEST POP PUSH1 0x4 DUP7 MLOAD PUSH2 0x7120 DUP2 PUSH2 0x566E JUMP JUMPDEST PUSH2 0x7129 DUP2 PUSH2 0x566E JUMP JUMPDEST SUB PUSH2 0x71EA JUMPI PUSH2 0x7138 DUP8 MLOAD PUSH2 0xB1AB JUMP JUMPDEST PUSH0 PUSH2 0x7150 PUSH2 0x213F PUSH2 0x213F DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP6 ADD MLOAD SWAP1 PUSH1 0x80 DUP11 ADD MLOAD SWAP2 DUP4 PUSH1 0xA0 DUP9 ADD MLOAD SWAP9 PUSH2 0x719D PUSH1 0x40 MLOAD SWAP11 DUP12 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xE4C4366300000000000000000000000000000000000000000000000000000000 DUP7 MSTORE CALLER PUSH1 0x4 DUP8 ADD PUSH2 0x6C11 JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP1 PUSH0 SWAP6 PUSH0 SWAP2 PUSH0 SWAP2 PUSH2 0x71BF JUMPI JUMPDEST POP SWAP1 SWAP6 SWAP2 SWAP10 PUSH2 0x6D34 JUMP JUMPDEST SWAP3 POP POP POP PUSH2 0x71E0 SWAP2 SWAP5 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x71D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x6BB0 JUMP JUMPDEST SWAP2 SWAP6 SWAP3 SWAP2 PUSH0 PUSH2 0x71B5 JUMP JUMPDEST PUSH32 0x6C02B39500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP4 SWAP3 PUSH0 SWAP5 PUSH2 0x7225 DUP5 PUSH1 0x80 DUP6 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD DUP2 DUP2 GT PUSH2 0x7235 JUMPI JUMPDEST POP POP POP POP POP JUMP JUMPDEST PUSH2 0x7262 SWAP6 SWAP7 POP SWAP2 PUSH2 0x724A SWAP2 PUSH2 0x725B SWAP4 SUB PUSH2 0xB824 JUMP JUMPDEST SWAP3 PUSH1 0xA0 PUSH2 0x6D9A DUP3 PUSH1 0xC0 DUP7 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP2 PUSH2 0xB846 JUMP JUMPDEST SWAP1 PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x722E JUMP JUMPDEST PUSH32 0xB4120F1400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP4 GT SWAP1 DUP2 ISZERO PUSH2 0x72EF JUMPI JUMPDEST POP PUSH2 0x72C7 JUMPI PUSH1 0x80 SHL SWAP1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x465D JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x89560CA100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP DUP2 GT PUSH0 PUSH2 0x72B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 SWAP2 SWAP3 AND PUSH0 MSTORE PUSH1 0x20 PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH0 JUMPDEST PUSH1 0x60 DUP7 ADD MLOAD DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x7353 JUMPI SWAP1 PUSH2 0x7343 PUSH2 0x7334 DUP3 PUSH1 0x1 SWAP5 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x1ADB DUP4 PUSH1 0x80 DUP12 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST DUP2 PUSH0 MSTORE DUP4 DUP7 MSTORE DUP5 PUSH0 KECCAK256 SSTORE ADD PUSH2 0x7316 JUMP JUMPDEST POP POP POP POP POP SWAP1 POP JUMP JUMPDEST SWAP2 PUSH2 0x7365 PUSH2 0x79F6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 DUP2 PUSH0 KECCAK256 SWAP2 PUSH0 PUSH1 0x20 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP2 PUSH1 0x4 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 PUSH1 0x3 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SWAP5 DUP6 SLOAD SWAP5 DUP9 MSTORE PUSH2 0x73A9 PUSH1 0x20 DUP10 ADD SWAP7 PUSH2 0xB8D6 JUMP JUMPDEST DUP7 MSTORE PUSH2 0x73B4 DUP6 PUSH2 0xB8F1 JUMP JUMPDEST SWAP4 DUP1 DUP10 ADD SWAP5 DUP6 MSTORE PUSH2 0x73C4 DUP7 PUSH2 0x57E7 JUMP JUMPDEST SWAP3 PUSH1 0x60 DUP11 ADD SWAP4 DUP5 MSTORE PUSH2 0x73D5 DUP8 PUSH2 0x57E7 JUMP JUMPDEST PUSH1 0x80 DUP12 ADD MSTORE PUSH2 0x73E5 DUP8 DUP12 MLOAD PUSH2 0xC515 JUMP JUMPDEST PUSH1 0xC0 DUP12 ADD MSTORE PUSH2 0x73F3 DUP8 PUSH2 0x57E7 JUMP JUMPDEST PUSH1 0xA0 DUP12 ADD SWAP1 DUP2 MSTORE DUP11 MLOAD SWAP2 PUSH1 0x1 SWAP10 PUSH1 0x1 DUP5 DUP2 SHR AND SWAP4 DUP5 PUSH2 0x75AA JUMPI JUMPDEST POP DUP4 PUSH2 0x7598 JUMPI JUMPDEST PUSH0 JUMPDEST DUP14 DUP12 DUP3 LT PUSH2 0x7475 JUMPI POP POP POP POP POP POP POP POP POP POP POP POP POP DUP1 PUSH2 0x7465 PUSH2 0x744D PUSH2 0x746C SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0xB97E JUMP JUMPDEST SWAP1 PUSH2 0x6EB PUSH2 0x7A4B JUMP JUMPDEST SWAP1 DUP11 DUP11 DUP15 SWAP4 DUP11 PUSH2 0x74C0 DUP6 PUSH2 0x74AC DUP2 PUSH2 0x749E PUSH2 0x7499 DUP14 PUSH2 0x682B PUSH2 0x29BF DUP16 DUP7 SWAP1 MLOAD PUSH2 0x5818 JUMP JUMPDEST PUSH2 0xB93F JUMP JUMPDEST SWAP5 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP6 MLOAD DUP4 PUSH2 0x74BA DUP4 DUP4 PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH2 0x5818 JUMP JUMPDEST POP PUSH2 0x74CA DUP2 PUSH2 0xBB7D JUMP JUMPDEST PUSH2 0x74D5 DUP7 DUP12 MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH2 0x74F4 DUP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 AND DUP8 DUP6 PUSH2 0xB7D2 JUMP JUMPDEST DUP10 ISZERO PUSH2 0x758F JUMPI DUP6 PUSH2 0x7507 DUP13 DUP4 ADD MLOAD ISZERO ISZERO SWAP1 JUMP JUMPDEST SWAP2 DUP3 PUSH2 0x7571 JUMPI JUMPDEST POP POP PUSH2 0x751F JUMPI JUMPDEST POP POP POP JUMPDEST ADD PUSH2 0x7416 JUMP JUMPDEST DUP4 PUSH2 0x7545 DUP14 DUP3 PUSH2 0x753A DUP2 PUSH2 0x7533 DUP8 MLOAD PUSH2 0xC571 JUMP JUMPDEST SWAP4 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP7 PUSH1 0x80 SHR DUP6 PUSH2 0x7212 JUMP JUMPDEST SWAP4 DUP5 PUSH2 0x7553 JUMPI JUMPDEST POP POP PUSH2 0x7515 JUMP JUMPDEST PUSH2 0x7566 SWAP5 PUSH2 0x7560 SWAP2 PUSH2 0x57A4 JUMP JUMPDEST SWAP2 PUSH2 0xB7D2 JUMP JUMPDEST PUSH0 DUP16 DUP12 SWAP1 DUP4 DUP4 PUSH2 0x754C JUMP JUMPDEST SWAP1 SWAP2 POP MLOAD PUSH2 0x757E DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x7587 DUP2 PUSH2 0x1015 JUMP JUMPDEST EQ DUP6 PUSH0 PUSH2 0x750E JUMP JUMPDEST POP POP POP POP PUSH2 0x7519 JUMP JUMPDEST DUP13 MLOAD SWAP1 SWAP4 POP PUSH1 0x3 SHR PUSH1 0x1 AND ISZERO SWAP3 PUSH2 0x7414 JUMP JUMPDEST PUSH2 0x75B5 SWAP2 SWAP5 POP PUSH2 0xC571 JUMP JUMPDEST ISZERO ISZERO SWAP3 PUSH0 PUSH2 0x740D JUMP JUMPDEST PUSH2 0x75C6 PUSH2 0x5637 JUMP JUMPDEST SWAP1 PUSH2 0x75CF PUSH2 0x79F6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH0 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SLOAD SWAP1 PUSH1 0x4 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SWAP1 PUSH1 0x3 PUSH1 0x20 MSTORE DUP4 PUSH0 KECCAK256 SWAP4 DUP5 SLOAD SWAP4 DUP8 MSTORE PUSH2 0x7612 PUSH1 0x20 DUP9 ADD SWAP6 PUSH2 0xB8D6 JUMP JUMPDEST DUP6 MSTORE PUSH2 0x761D DUP5 PUSH2 0xB8F1 JUMP JUMPDEST SWAP2 DUP2 DUP9 ADD SWAP3 DUP4 MSTORE PUSH2 0x762D DUP6 PUSH2 0x57E7 JUMP JUMPDEST SWAP2 PUSH1 0x60 DUP10 ADD SWAP3 DUP4 MSTORE PUSH2 0x763E DUP7 PUSH2 0x57E7 JUMP JUMPDEST SWAP5 PUSH1 0x80 SWAP6 PUSH1 0x80 DUP12 ADD MSTORE PUSH2 0x7652 DUP8 DUP12 MLOAD PUSH2 0xC515 JUMP JUMPDEST PUSH1 0xC0 DUP12 ADD MSTORE PUSH2 0x7660 DUP8 PUSH2 0x57E7 JUMP JUMPDEST PUSH1 0xA0 DUP12 ADD SWAP1 DUP2 MSTORE DUP11 MLOAD SWAP2 PUSH1 0x1 SWAP10 PUSH1 0x1 DUP5 DUP2 SHR AND SWAP4 DUP5 PUSH2 0x77D6 JUMPI JUMPDEST POP DUP4 PUSH2 0x77C4 JUMPI JUMPDEST PUSH0 JUMPDEST DUP14 DUP12 DUP3 LT PUSH2 0x76C2 JUMPI POP POP POP POP POP POP POP POP POP POP POP POP POP DUP1 PUSH2 0x7465 PUSH2 0x744D PUSH2 0x76BA SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH2 0xB23 PUSH2 0x7A4B JUMP JUMPDEST SWAP1 DUP11 DUP14 SWAP3 DUP3 DUP13 DUP13 DUP13 PUSH2 0x76F6 DUP5 PUSH2 0x76E8 DUP2 PUSH2 0x749E PUSH2 0x7499 DUP16 DUP16 PUSH2 0x29BF DUP6 PUSH2 0x682B SWAP3 MLOAD PUSH2 0x5818 JUMP JUMPDEST SLOAD SWAP5 MLOAD DUP4 PUSH2 0x74BA DUP4 DUP4 PUSH2 0x5818 JUMP JUMPDEST POP PUSH2 0x7700 DUP2 PUSH2 0xBB7D JUMP JUMPDEST PUSH2 0x770B DUP6 DUP14 MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH2 0x7729 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP6 DUP8 PUSH2 0xB742 JUMP JUMPDEST DUP8 DUP14 DUP14 ISZERO PUSH2 0x77B7 JUMPI DUP3 ADD MLOAD ISZERO ISZERO SWAP2 DUP3 PUSH2 0x7799 JUMPI JUMPDEST POP POP PUSH2 0x7750 JUMPI JUMPDEST POP POP POP POP POP JUMPDEST ADD PUSH2 0x7683 JUMP JUMPDEST DUP3 PUSH2 0x7773 SWAP3 PUSH2 0x776A DUP3 PUSH2 0x7763 DUP9 MLOAD PUSH2 0xC571 JUMP JUMPDEST SWAP5 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP7 SHR DUP6 PUSH2 0x7212 JUMP JUMPDEST SWAP3 DUP4 PUSH2 0x7783 JUMPI JUMPDEST DUP15 SWAP4 POP DUP13 PUSH2 0x7744 JUMP JUMPDEST PUSH2 0x7790 SWAP4 PUSH2 0x6E44 SWAP2 PUSH2 0x57A4 JUMP JUMPDEST PUSH0 DUP16 DUP3 DUP3 PUSH2 0x777A JUMP JUMPDEST SWAP1 SWAP2 POP MLOAD PUSH2 0x77A6 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x77AF DUP2 PUSH2 0x1015 JUMP JUMPDEST EQ DUP8 PUSH0 PUSH2 0x773D JUMP JUMPDEST POP POP POP POP POP POP POP POP PUSH2 0x774A JUMP JUMPDEST DUP13 MLOAD SWAP1 SWAP4 POP PUSH1 0x3 SHR PUSH1 0x1 AND ISZERO SWAP3 PUSH2 0x7681 JUMP JUMPDEST PUSH2 0x77E1 SWAP2 SWAP5 POP PUSH2 0xC571 JUMP JUMPDEST ISZERO ISZERO SWAP3 PUSH0 PUSH2 0x767A JUMP JUMPDEST PUSH2 0x77F2 PUSH2 0x5637 JUMP JUMPDEST SWAP1 PUSH2 0x77FB PUSH2 0x79F6 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 DUP1 PUSH0 KECCAK256 PUSH0 PUSH1 0x20 MSTORE DUP2 PUSH0 KECCAK256 SLOAD SWAP1 PUSH1 0x4 PUSH1 0x20 MSTORE DUP3 PUSH0 KECCAK256 SWAP1 PUSH1 0x3 PUSH1 0x20 MSTORE DUP4 PUSH0 KECCAK256 SWAP4 DUP5 SLOAD SWAP4 DUP8 MSTORE PUSH2 0x783E PUSH1 0x20 DUP9 ADD SWAP6 PUSH2 0xB8D6 JUMP JUMPDEST DUP6 MSTORE PUSH2 0x7849 DUP5 PUSH2 0xB8F1 JUMP JUMPDEST SWAP2 DUP2 DUP9 ADD SWAP3 DUP4 MSTORE PUSH2 0x7859 DUP6 PUSH2 0x57E7 JUMP JUMPDEST SWAP2 PUSH1 0x60 DUP10 ADD SWAP3 DUP4 MSTORE PUSH2 0x786A DUP7 PUSH2 0x57E7 JUMP JUMPDEST SWAP5 PUSH1 0x80 SWAP6 PUSH1 0x80 DUP12 ADD MSTORE PUSH2 0x787E DUP8 DUP12 MLOAD PUSH2 0xC515 JUMP JUMPDEST PUSH1 0xC0 DUP12 ADD MSTORE PUSH2 0x788C DUP8 PUSH2 0x57E7 JUMP JUMPDEST PUSH1 0xA0 DUP12 ADD SWAP1 DUP2 MSTORE DUP11 MLOAD SWAP2 PUSH1 0x1 SWAP10 PUSH1 0x1 DUP5 DUP2 SHR AND SWAP4 DUP5 PUSH2 0x79E2 JUMPI JUMPDEST POP DUP4 PUSH2 0x79D0 JUMPI JUMPDEST PUSH0 JUMPDEST DUP14 DUP12 DUP3 LT PUSH2 0x78E6 JUMPI POP POP POP POP POP POP POP POP POP POP POP POP POP DUP1 PUSH2 0x7465 PUSH2 0x744D PUSH2 0x76BA SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP11 DUP14 SWAP3 DUP3 DUP13 DUP13 DUP13 PUSH2 0x790C DUP5 PUSH2 0x76E8 DUP2 PUSH2 0x749E PUSH2 0x7499 DUP16 DUP16 PUSH2 0x29BF DUP6 PUSH2 0x682B SWAP3 MLOAD PUSH2 0x5818 JUMP JUMPDEST POP PUSH2 0x7916 DUP2 PUSH2 0xBB7D JUMP JUMPDEST PUSH2 0x7921 DUP6 DUP14 MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH2 0x793F PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 AND DUP6 DUP8 PUSH2 0xB78F JUMP JUMPDEST DUP8 DUP14 DUP14 ISZERO PUSH2 0x79C3 JUMPI DUP3 ADD MLOAD ISZERO ISZERO SWAP2 DUP3 PUSH2 0x79A5 JUMPI JUMPDEST POP POP PUSH2 0x7966 JUMPI JUMPDEST POP POP POP POP POP JUMPDEST ADD PUSH2 0x78AF JUMP JUMPDEST DUP3 PUSH2 0x7979 SWAP3 PUSH2 0x776A DUP3 PUSH2 0x7763 DUP9 MLOAD PUSH2 0xC571 JUMP JUMPDEST SWAP3 DUP4 PUSH2 0x7989 JUMPI JUMPDEST DUP15 SWAP4 POP DUP13 PUSH2 0x795A JUMP JUMPDEST PUSH2 0x799C SWAP4 PUSH2 0x7996 SWAP2 PUSH2 0x57A4 JUMP JUMPDEST SWAP2 PUSH2 0xB78F JUMP JUMPDEST PUSH0 DUP16 DUP3 DUP3 PUSH2 0x7980 JUMP JUMPDEST SWAP1 SWAP2 POP MLOAD PUSH2 0x79B2 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x79BB DUP2 PUSH2 0x1015 JUMP JUMPDEST EQ DUP8 PUSH0 PUSH2 0x7953 JUMP JUMPDEST POP POP POP POP POP POP POP POP PUSH2 0x7960 JUMP JUMPDEST DUP13 MLOAD SWAP1 SWAP4 POP PUSH1 0x3 SHR PUSH1 0x1 AND ISZERO SWAP3 PUSH2 0x78AD JUMP JUMPDEST PUSH2 0x79ED SWAP2 SWAP5 POP PUSH2 0xC571 JUMP JUMPDEST ISZERO ISZERO SWAP3 PUSH0 PUSH2 0x78A6 JUMP JUMPDEST PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 DUP1 TLOAD PUSH2 0x7A23 JUMPI PUSH1 0x1 SWAP1 TSTORE JUMP JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH0 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE JUMP JUMPDEST PUSH32 0x0 TLOAD ISZERO PUSH2 0x7A99 JUMPI JUMP JUMPDEST PUSH32 0xC09BA73600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x7ACB SWAP1 PUSH2 0xBA85 JUMP JUMPDEST SWAP1 PUSH32 0x8000000000000000000000000000000000000000000000000000000000000000 DUP3 EQ PUSH2 0x465D JUMPI PUSH2 0x6EB SWAP2 PUSH0 SUB SWAP1 PUSH2 0xADB5 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 SWAP2 PUSH2 0x7B0E DUP3 DUP5 DUP7 PUSH2 0xBADA JUMP JUMPDEST PUSH0 NOT DUP2 SUB PUSH2 0x7B1D JUMPI POP POP POP POP POP JUMP JUMPDEST DUP1 DUP3 GT PUSH2 0x7CA1 JUMPI SUB SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 DUP2 AND SWAP4 DUP5 ISZERO PUSH2 0x7C6C JUMPI DUP1 DUP4 AND SWAP6 DUP7 ISZERO PUSH2 0x7C37 JUMPI DUP5 PUSH2 0x7B7D DUP6 PUSH2 0x7B67 DUP7 PUSH2 0x7B67 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x10 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP3 DUP4 EXTCODESIZE ISZERO PUSH2 0x6DC JUMPI PUSH1 0x40 MLOAD PUSH32 0x5687F2B800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP2 SWAP1 SWAP3 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP3 SWAP1 MSTORE PUSH32 0xA0175360A15BCA328BAF7EA85C7B784D58B222A50D0CE760B10DBA336D226A61 SWAP2 PUSH2 0x7C17 SWAP2 PUSH0 DUP2 DUP1 PUSH1 0x64 DUP2 ADD JUMPDEST SUB DUP2 DUP4 DUP10 GAS CALL PUSH2 0x7C24 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE SWAP1 DUP2 SWAP1 PUSH1 0x20 DUP3 ADD SWAP1 JUMP JUMPDEST SUB SWAP1 LOG4 PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x722E JUMP JUMPDEST DUP1 PUSH2 0x1C88 PUSH2 0x7C31 SWAP3 PUSH2 0x85F JUMP JUMPDEST PUSH0 PUSH2 0x7C06 JUMP JUMPDEST PUSH32 0x94280D6200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xE602DF0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 PUSH32 0xFB8F41B200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST SWAP3 SWAP1 SWAP2 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 DUP5 AND SWAP2 DUP3 ISZERO PUSH2 0x7E73 JUMPI DUP1 DUP7 AND SWAP2 DUP3 ISZERO PUSH2 0x7E3E JUMPI PUSH2 0x7D1C DUP7 PUSH2 0x7B67 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD DUP1 DUP7 GT PUSH2 0x7E01 JUMPI DUP6 SWAP1 SUB PUSH2 0x7D46 DUP8 PUSH2 0x7B67 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0x7D66 DUP8 PUSH2 0x7B67 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP6 DUP2 SLOAD ADD SWAP1 SSTORE AND SWAP2 DUP3 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F PUSH1 0x40 MLOAD DUP1 PUSH2 0x7DA3 DUP9 DUP3 SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB SWAP1 LOG4 DUP1 EXTCODESIZE ISZERO PUSH2 0x6DC JUMPI PUSH1 0x40 MLOAD PUSH32 0x23DE665100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 AND PUSH1 0x4 DUP3 ADD MSTORE SWAP4 SWAP1 SWAP3 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE PUSH0 SWAP1 DUP3 SWAP1 DUP2 DUP4 DUP2 PUSH1 0x64 DUP2 ADD PUSH2 0x5619 JUMP JUMPDEST PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 DUP6 SWAP1 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x96C6FD1E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 PUSH2 0x7EB3 PUSH2 0x57B1 JUMP JUMPDEST POP DUP1 MLOAD SWAP3 PUSH2 0x7EC0 DUP5 PUSH2 0x1015 JUMP JUMPDEST PUSH1 0x80 PUSH1 0x40 DUP3 ADD MLOAD SWAP4 ADD MLOAD PUSH1 0xC0 PUSH1 0x20 DUP4 MLOAD SWAP4 ADD MLOAD SWAP4 ADD MLOAD SWAP4 PUSH1 0x40 MLOAD SWAP6 PUSH2 0x7EE4 DUP8 PUSH2 0x873 JUMP JUMPDEST PUSH2 0x7EED DUP2 PUSH2 0x1015 JUMP JUMPDEST DUP7 MSTORE PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x40 DUP6 ADD MSTORE PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD MSTORE CALLER PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP5 AND SWAP3 DUP4 ISZERO PUSH2 0x7E73 JUMPI PUSH2 0x7F44 DUP6 PUSH2 0x7B67 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD DUP1 DUP5 GT PUSH2 0x803F JUMPI DUP4 SWAP1 SUB PUSH2 0x7F6E DUP7 PUSH2 0x7B67 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0x7F94 DUP4 PUSH2 0x7F8E DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x57A4 JUMP JUMPDEST PUSH2 0x7F9D DUP2 PUSH2 0xBB26 JUMP JUMPDEST PUSH2 0x7FB8 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP1 DUP2 EXTCODESIZE ISZERO PUSH2 0x6DC JUMPI PUSH1 0x40 MLOAD PUSH32 0x23DE665100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP5 AND PUSH1 0x4 DUP6 ADD MSTORE PUSH0 PUSH1 0x24 DUP6 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP6 ADD DUP3 SWAP1 MSTORE SWAP4 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F SWAP2 PUSH2 0x803A SWAP2 DUP7 DUP2 DUP1 PUSH1 0x64 DUP2 ADD PUSH2 0x7BFB JUMP JUMPDEST SUB SWAP1 LOG4 JUMP JUMPDEST PUSH32 0xE450D38C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 DUP4 SWAP1 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP1 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD DUP2 SHR AND ISZERO PUSH2 0x809E JUMPI POP JUMP JUMPDEST PUSH32 0x4BDACE1300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x6EB SWAP1 PUSH2 0x7F0 PUSH2 0x69D7 JUMP JUMPDEST SUB PUSH2 0x80DC JUMPI JUMP JUMPDEST PUSH32 0xAAAD13F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 MLOAD SWAP2 PUSH2 0x8117 DUP3 MLOAD DUP3 MLOAD SWAP1 DUP6 PUSH2 0xBB5E JUMP JUMPDEST PUSH2 0x8120 DUP4 PUSH2 0x57E7 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x8132 JUMPI POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP1 PUSH2 0x815B PUSH2 0x8142 PUSH1 0x1 SWAP4 DUP6 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x6B04 PUSH2 0x8150 DUP5 DUP10 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x6AB8 DUP6 DUP10 PUSH2 0x5818 JUMP JUMPDEST PUSH2 0x8165 DUP3 DUP10 PUSH2 0x5818 JUMP JUMPDEST MSTORE ADD PUSH2 0x8123 JUMP JUMPDEST SWAP6 SWAP3 SWAP4 PUSH2 0x819D PUSH2 0x81C1 SWAP6 PUSH2 0xB23 SWAP10 SWAP8 SWAP4 PUSH2 0x81B3 SWAP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP12 MSTORE AND PUSH1 0x20 DUP11 ADD MSTORE PUSH1 0x40 DUP10 ADD SWAP1 PUSH2 0x685B JUMP JUMPDEST PUSH1 0x60 DUP8 ADD MSTORE PUSH1 0xE0 PUSH1 0x80 DUP8 ADD MSTORE PUSH1 0xE0 DUP7 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP1 DUP5 DUP3 SUB PUSH1 0xA0 DUP7 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST SWAP2 PUSH1 0xC0 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x1177 JUMP JUMPDEST PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 SWAP6 SWAP7 SWAP4 PUSH2 0x8247 PUSH2 0x81F1 DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH1 0x80 DUP9 ADD MLOAD SWAP8 PUSH2 0x8201 DUP10 PUSH2 0x6851 JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x80 PUSH1 0x40 DUP4 ADD MLOAD SWAP13 ADD MLOAD SWAP2 ADD MLOAD SWAP2 PUSH1 0x40 MLOAD SWAP12 DUP13 SWAP11 DUP12 SWAP10 DUP11 SWAP8 PUSH32 0xBA5F9F4000000000000000000000000000000000000000000000000000000000 DUP10 MSTORE PUSH1 0x4 DUP10 ADD PUSH2 0x816C JUMP JUMPDEST SUB SWAP4 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP2 PUSH2 0x828A JUMPI JUMPDEST POP ISZERO PUSH2 0x8262 JUMPI JUMP JUMPDEST PUSH32 0x2AAF886600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x82A3 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x7C4 JUMPI PUSH2 0x7BA DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x825A JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD MLOAD MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x82C1 JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH2 0x8338 PUSH1 0x40 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x82EA PUSH2 0x4E4A DUP6 DUP5 DUP12 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST SWAP2 PUSH1 0xA0 DUP10 ADD SWAP3 PUSH2 0x82FB DUP7 DUP6 MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE DUP5 PUSH0 MSTORE DUP7 DUP9 MSTORE PUSH0 KECCAK256 SLOAD AND SWAP1 DUP2 PUSH2 0x8316 DUP6 PUSH1 0x60 DUP12 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH2 0x8331 DUP5 PUSH2 0x8329 DUP2 PUSH1 0xC0 DUP13 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP3 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP2 PUSH2 0xC6C4 JUMP JUMPDEST PUSH2 0x8346 DUP3 PUSH1 0x80 DUP9 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE ADD PUSH2 0x82B3 JUMP JUMPDEST PUSH1 0x20 DUP1 DUP3 ADD MLOAD MLOAD SWAP3 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0x8365 JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH2 0x83D4 PUSH1 0x40 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x838E PUSH2 0x4E4A DUP6 DUP5 DUP12 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST SWAP2 PUSH1 0xA0 DUP10 ADD SWAP3 PUSH2 0x839F DUP7 DUP6 MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE DUP5 PUSH0 MSTORE DUP7 DUP9 MSTORE PUSH0 KECCAK256 SLOAD AND SWAP1 DUP2 PUSH2 0x83BA DUP6 PUSH1 0x60 DUP12 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH2 0x83CD DUP5 PUSH2 0x8329 DUP2 PUSH1 0xC0 DUP13 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP2 PUSH2 0xC6DB JUMP JUMPDEST PUSH2 0x83E2 DUP3 PUSH1 0x80 DUP9 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE ADD PUSH2 0x8357 JUMP JUMPDEST PUSH1 0x80 DUP2 DUP4 SUB SLT PUSH2 0x6DC JUMPI DUP1 MLOAD SWAP3 PUSH1 0x20 DUP3 ADD MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x6DC JUMPI DUP5 PUSH2 0x8419 SWAP2 DUP4 ADD PUSH2 0x6B09 JUMP JUMPDEST SWAP4 PUSH1 0x40 DUP3 ADD MLOAD DUP5 DUP2 GT PUSH2 0x6DC JUMPI DUP2 PUSH2 0x6BFA SWAP2 DUP5 ADD PUSH2 0x6B09 JUMP JUMPDEST SWAP4 SWAP1 PUSH2 0xB23 SWAP6 SWAP4 PUSH2 0x6C4E SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x8462 SWAP4 AND DUP8 MSTORE PUSH1 0x20 DUP8 ADD MSTORE PUSH1 0xA0 PUSH1 0x40 DUP8 ADD MSTORE PUSH1 0xA0 DUP7 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP1 DUP5 DUP3 SUB PUSH1 0x60 DUP7 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST SWAP3 PUSH2 0x8479 PUSH2 0x79F6 JUMP JUMPDEST PUSH1 0x60 SWAP2 PUSH2 0x8484 PUSH2 0x5B3F JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP7 ADD SWAP1 PUSH2 0x8498 DUP3 MLOAD MLOAD DUP1 DUP8 MSTORE PUSH2 0x57E7 JUMP JUMPDEST SWAP1 PUSH1 0x80 DUP5 ADD SWAP7 DUP8 MLOAD PUSH2 0x84A9 DUP2 PUSH2 0x6851 JUMP JUMPDEST PUSH2 0x84B2 DUP2 PUSH2 0x6851 JUMP JUMPDEST PUSH2 0x8870 JUMPI POP PUSH1 0x40 DUP5 ADD MLOAD SWAP1 PUSH2 0x84C7 DUP8 MLOAD PUSH2 0x57E7 JUMP JUMPDEST SWAP6 PUSH2 0x84EB DUP4 PUSH1 0x80 DUP13 ADD MLOAD PUSH2 0x84E5 PUSH2 0x6D14 DUP11 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0xBF37 JUMP JUMPDEST SWAP3 PUSH2 0x855C PUSH32 0x0 TLOAD PUSH2 0x8522 DUP10 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH32 0x0 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP1 JUMP JUMPDEST PUSH2 0x87F3 JUMPI JUMPDEST PUSH1 0x40 DUP8 ADD MLOAD DUP1 DUP3 GT PUSH2 0x87C2 JUMPI POP PUSH2 0x857A DUP2 SWAP11 SWAP10 SWAP11 PUSH2 0x97B4 JUMP JUMPDEST PUSH1 0x20 DUP11 ADD SWAP9 PUSH0 JUMPDEST DUP12 MLOAD DUP2 LT ISZERO PUSH2 0x86A1 JUMPI DUP13 PUSH2 0x8595 DUP3 DUP9 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x859F DUP2 PUSH2 0x97B4 JUMP JUMPDEST PUSH2 0x85A9 DUP4 DUP11 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x868F JUMPI DUP2 PUSH2 0x725B DUP5 PUSH1 0xA0 PUSH2 0x6D9A DUP3 PUSH1 0xC0 PUSH2 0x85C6 SWAP9 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST DUP1 PUSH2 0x85D1 DUP4 DUP11 PUSH2 0x5818 JUMP JUMPDEST MSTORE JUMPDEST PUSH2 0x85E1 PUSH2 0x29BF DUP4 DUP12 MLOAD PUSH2 0x5818 JUMP JUMPDEST PUSH1 0x60 DUP12 ADD PUSH2 0x85F0 DUP5 DUP3 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD DUP4 LT PUSH2 0x8643 JUMPI POP DUP15 DUP4 PUSH2 0x6E44 DUP16 DUP16 DUP16 SWAP7 PUSH2 0x8637 SWAP2 PUSH2 0x861F DUP7 PUSH2 0x6E1F DUP2 DUP12 PUSH1 0x1 SWAP15 SWAP14 PUSH2 0x6DFC DUP9 PUSH2 0x863D SWAP16 PUSH2 0x7AC1 JUMP JUMPDEST MSTORE PUSH2 0x862E DUP6 PUSH1 0x60 DUP9 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP3 MLOAD SWAP1 PUSH2 0x6C6A JUMP JUMPDEST SWAP1 PUSH2 0x57A4 JUMP JUMPDEST ADD PUSH2 0x8581 JUMP JUMPDEST SWAP2 PUSH2 0x8652 DUP5 PUSH2 0x2420 SWAP5 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH32 0x2F785E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST POP POP PUSH2 0x869B DUP2 DUP9 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x85D3 JUMP JUMPDEST POP SWAP4 SWAP10 POP SWAP6 SWAP5 POP SWAP6 SWAP3 SWAP9 PUSH2 0x86C2 SWAP2 SWAP8 POP PUSH2 0x6ECD DUP6 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH32 0xFBE5B0D79FB94F1E81C0A92BF86AE9D3A19E9D1BF6202C0D3E75120F65D5D8A5 PUSH2 0x86F4 DUP5 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 PUSH2 0x8716 DUP7 PUSH1 0x20 DUP8 ADD SWAP6 PUSH2 0x870F DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST CALLER SWAP2 PUSH2 0x7AFF JUMP JUMPDEST PUSH2 0x871E PUSH2 0xBF88 JUMP JUMPDEST PUSH2 0x8797 JUMPI JUMPDEST PUSH2 0x8749 DUP7 PUSH2 0x8738 DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0x7F11 JUMP JUMPDEST PUSH2 0x876F PUSH2 0x6D14 PUSH2 0x8763 PUSH2 0x6F3F DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 MLOAD SWAP7 PUSH2 0x29BF DUP9 PUSH2 0x6851 JUMP JUMPDEST SWAP3 PUSH2 0x6F81 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH2 0x8785 DUP9 PUSH2 0x6851 JUMP JUMPDEST DUP13 DUP5 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP6 AND SWAP9 AND SWAP7 DUP5 PUSH2 0x6C77 JUMP JUMPDEST PUSH2 0x87BD DUP7 PUSH2 0x87AC DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST DUP7 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 PUSH2 0xBF9D JUMP JUMPDEST PUSH2 0x8723 JUMP JUMPDEST PUSH32 0x31D38E0B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP9 SWAP5 SWAP2 PUSH2 0x8806 DUP12 SWAP8 SWAP5 SWAP10 SWAP6 SWAP3 SWAP12 MLOAD PUSH2 0xB2A3 JUMP JUMPDEST SWAP11 PUSH0 JUMPDEST DUP7 MLOAD DUP2 LT ISZERO PUSH2 0x8860 JUMPI DUP1 DUP12 PUSH2 0x8859 DUP16 SWAP4 PUSH2 0x8853 PUSH2 0x8842 DUP16 DUP4 SWAP1 PUSH2 0x8838 PUSH1 0x1 SWAP10 PUSH2 0x8832 DUP5 DUP11 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0xB824 JUMP JUMPDEST PUSH2 0x74BA DUP4 DUP4 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x884D DUP4 DUP7 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x57A4 JUMP JUMPDEST SWAP3 PUSH2 0x5818 JUMP JUMPDEST MSTORE ADD PUSH2 0x8809 JUMP JUMPDEST POP SWAP2 SWAP5 SWAP9 SWAP4 SWAP7 SWAP11 POP SWAP2 SWAP5 SWAP9 PUSH2 0x8561 JUMP JUMPDEST SWAP5 SWAP1 PUSH1 0x1 DUP9 MLOAD PUSH2 0x887F DUP2 PUSH2 0x6851 JUMP JUMPDEST PUSH2 0x8888 DUP2 PUSH2 0x6851 JUMP JUMPDEST SUB PUSH2 0x88F7 JUMPI PUSH2 0x8897 DUP10 MLOAD PUSH2 0xB1E0 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MLOAD SWAP2 DUP7 SWAP3 DUP11 PUSH2 0x88F1 PUSH2 0x88E7 DUP12 DUP11 PUSH1 0x40 PUSH2 0x88B7 PUSH1 0x60 DUP4 ADD MLOAD PUSH2 0xB214 JUMP JUMPDEST SWAP3 ADD SWAP5 DUP3 DUP7 MSTORE DUP7 PUSH1 0x80 DUP3 ADD MLOAD SWAP4 PUSH2 0x88E1 PUSH2 0x213F PUSH2 0x70EE PUSH2 0x70E7 PUSH2 0x6D14 DUP9 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH2 0xBE8A JUMP JUMPDEST SWAP1 SWAP3 MLOAD SWAP1 SWAP11 PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH2 0x8561 JUMP JUMPDEST PUSH1 0x2 DUP9 SWAP7 SWAP3 SWAP7 MLOAD PUSH2 0x8907 DUP2 PUSH2 0x6851 JUMP JUMPDEST PUSH2 0x8910 DUP2 PUSH2 0x6851 JUMP JUMPDEST SUB PUSH2 0x89A3 JUMPI PUSH2 0x891F DUP10 MLOAD PUSH2 0xB1E0 JUMP JUMPDEST PUSH2 0x899C DUP3 PUSH1 0x60 DUP8 ADD SWAP1 PUSH2 0x8943 PUSH2 0x8935 DUP4 MLOAD PUSH2 0xB214 JUMP JUMPDEST PUSH1 0x40 DUP13 ADD SWAP4 DUP2 DUP6 MSTORE MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x894F DUP4 MLOAD DUP9 PUSH2 0x5818 JUMP JUMPDEST MSTORE DUP12 PUSH2 0x8962 PUSH1 0x80 DUP3 ADD MLOAD SWAP4 MLOAD DUP1 SWAP4 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x8981 PUSH2 0x897A PUSH2 0x6D14 DUP13 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP3 MLOAD PUSH2 0xB2A3 JUMP JUMPDEST SWAP3 PUSH2 0x8996 PUSH2 0x213F DUP13 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH2 0xBC82 JUMP JUMPDEST SWAP7 SWAP1 PUSH2 0x8561 JUMP JUMPDEST POP SWAP4 PUSH1 0x3 DUP8 MLOAD PUSH2 0x89B2 DUP2 PUSH2 0x6851 JUMP JUMPDEST PUSH2 0x89BB DUP2 PUSH2 0x6851 JUMP JUMPDEST SUB PUSH2 0x8A7C JUMPI PUSH2 0x89CA DUP9 MLOAD PUSH2 0xBC4D JUMP JUMPDEST PUSH0 PUSH2 0x89E2 PUSH2 0x213F PUSH2 0x213F DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP6 PUSH1 0x40 DUP7 ADD MLOAD SWAP7 PUSH1 0x80 DUP12 ADD MLOAD SWAP2 DUP4 PUSH1 0xA0 DUP10 ADD MLOAD SWAP10 PUSH2 0x8A30 PUSH1 0x40 MLOAD SWAP12 DUP13 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xAB68E28C00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE CALLER PUSH1 0x4 DUP8 ADD PUSH2 0x8432 JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP5 DUP6 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP2 PUSH0 SWAP7 PUSH0 SWAP3 PUSH0 SWAP2 PUSH2 0x8A51 JUMPI JUMPDEST POP SWAP2 SWAP7 SWAP3 PUSH2 0x8561 JUMP JUMPDEST SWAP3 POP POP SWAP6 POP PUSH2 0x8A72 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x8A6A DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x83E9 JUMP JUMPDEST SWAP2 SWAP7 SWAP1 SWAP2 PUSH0 PUSH2 0x8A48 JUMP JUMPDEST PUSH32 0x137A9A3900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SLT PUSH2 0x6DC JUMPI DUP1 MLOAD PUSH2 0x8ABC DUP2 PUSH2 0xBB3 JUMP JUMPDEST SWAP3 PUSH1 0x20 DUP3 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6DC JUMPI PUSH2 0xB23 SWAP3 ADD PUSH2 0x6B09 JUMP JUMPDEST SWAP7 SWAP4 SWAP5 PUSH2 0xB23 SWAP9 SWAP7 SWAP3 PUSH2 0x8B44 SWAP7 PUSH2 0x8B15 PUSH2 0x8B36 SWAP7 PUSH2 0x8B28 SWAP6 PUSH2 0x100 SWAP5 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 MSTORE AND PUSH1 0x20 DUP14 ADD MSTORE PUSH1 0x40 DUP13 ADD SWAP1 PUSH2 0x685B JUMP JUMPDEST PUSH1 0x60 DUP11 ADD MSTORE DUP1 PUSH1 0x80 DUP11 ADD MSTORE DUP9 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP1 DUP7 DUP3 SUB PUSH1 0xA0 DUP9 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST SWAP1 DUP5 DUP3 SUB PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST SWAP2 PUSH1 0xE0 DUP2 DUP5 SUB SWAP2 ADD MSTORE PUSH2 0x1177 JUMP JUMPDEST SWAP5 SWAP4 SWAP6 SWAP3 SWAP7 SWAP2 SWAP1 DUP5 MLOAD PUSH2 0x8B6B SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x80 DUP7 ADD MLOAD SWAP3 PUSH2 0x8B7B DUP5 PUSH2 0x6851 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD DUP11 PUSH1 0xA0 DUP10 ADD MLOAD SWAP3 PUSH1 0x40 MLOAD SWAP12 DUP13 SWAP8 DUP9 SWAP8 PUSH32 0x2754888D00000000000000000000000000000000000000000000000000000000 DUP10 MSTORE PUSH1 0x4 DUP10 ADD SWAP8 PUSH2 0x8BC0 SWAP9 PUSH2 0x8ADB JUMP JUMPDEST SUB SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 DUP2 GAS PUSH0 SWAP5 DUP6 SWAP2 CALL SWAP4 DUP5 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP1 PUSH0 SWAP6 PUSH2 0x8CDD JUMPI JUMPDEST POP ISZERO DUP1 ISZERO PUSH2 0x8CD1 JUMPI JUMPDEST PUSH2 0x8CA9 JUMPI PUSH1 0x1 DUP1 SWAP4 PUSH1 0x9 SHR AND ISZERO PUSH2 0x8C0A JUMPI SWAP3 SWAP4 POP SWAP1 SWAP2 PUSH0 DUP4 JUMPDEST PUSH2 0x8C11 JUMPI JUMPDEST POP POP POP POP SWAP1 JUMP JUMPDEST DUP5 MLOAD DUP2 LT ISZERO PUSH2 0x8CA4 JUMPI PUSH2 0x8C24 DUP2 DUP7 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH1 0x60 DUP5 ADD SWAP1 PUSH2 0x8C35 DUP4 DUP4 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD GT PUSH2 0x8C44 JUMPI POP DUP4 ADD DUP4 PUSH2 0x8C05 JUMP JUMPDEST PUSH2 0x8C67 DUP3 PUSH2 0x8329 DUP2 PUSH2 0x8C61 PUSH2 0x29BF DUP12 SWAP8 PUSH1 0x20 PUSH2 0x2420 SWAP11 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST SWAP6 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH32 0xFBD8A72400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST PUSH2 0x8C0A JUMP JUMPDEST PUSH32 0x1D3391D800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP DUP4 MLOAD DUP6 MLOAD EQ ISZERO PUSH2 0x8BEC JUMP JUMPDEST SWAP1 POP PUSH2 0x8CFC SWAP2 SWAP5 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x8CF4 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x8AA4 JUMP JUMPDEST SWAP4 SWAP1 PUSH0 PUSH2 0x8BE3 JUMP JUMPDEST PUSH0 SWAP5 SWAP2 SWAP4 SWAP3 SWAP4 PUSH2 0x8D12 PUSH2 0x79F6 JUMP JUMPDEST PUSH2 0x8D1A PUSH2 0x5B3F JUMP JUMPDEST SWAP2 DUP1 MLOAD PUSH2 0x8D26 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x8D2F DUP2 PUSH2 0x1015 JUMP JUMPDEST ISZERO PUSH2 0x90AC JUMPI JUMPDEST PUSH1 0x20 SWAP2 DUP3 DUP7 ADD PUSH2 0x8D45 DUP2 MLOAD PUSH2 0xAF52 JUMP JUMPDEST DUP4 PUSH2 0x8D9A DUP2 DUP6 ADD SWAP9 PUSH2 0x8D64 PUSH2 0x213F PUSH2 0x213F DUP13 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP13 DUP14 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x72C9818600000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0x1759 JUMP JUMPDEST SUB SWAP3 GAS CALL SWAP9 DUP10 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP10 PUSH2 0x908D JUMPI JUMPDEST POP DUP9 PUSH2 0x8DB7 DUP2 PUSH2 0xAF52 JUMP JUMPDEST DUP4 MLOAD PUSH2 0x8DC2 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x8DCB DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x901D JUMPI POP PUSH1 0x40 DUP3 ADD MLOAD SWAP1 MSTORE PUSH2 0x8E03 PUSH1 0xC0 DUP9 ADD MLOAD PUSH2 0x21EE PUSH2 0x21E8 PUSH2 0x8DF4 DUP8 DUP7 ADD SWAP4 DUP5 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP3 PUSH1 0xA0 DUP13 ADD MLOAD SWAP1 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST SWAP4 PUSH1 0x80 DUP4 ADD MLOAD SWAP7 DUP6 SWAP8 SWAP9 PUSH1 0xA0 DUP6 ADD MLOAD DUP1 DUP9 LT PUSH2 0x8FED JUMPI POP JUMPDEST PUSH1 0x40 DUP6 ADD SWAP5 DUP11 DUP7 MLOAD PUSH2 0x8E33 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x8E3D SWAP2 PUSH2 0x97C5 JUMP JUMPDEST PUSH1 0x60 ADD SWAP6 DUP10 DUP8 MLOAD PUSH2 0x8E54 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x8E5E SWAP2 PUSH2 0x7AC1 JUMP JUMPDEST DUP4 MLOAD DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP8 MLOAD SWAP2 PUSH2 0x8E83 SWAP4 DUP7 PUSH2 0xAFE7 JUMP JUMPDEST SWAP2 SWAP1 DUP2 DUP7 ADD SWAP6 PUSH1 0x40 ADD SWAP3 DUP4 MSTORE DUP6 MSTORE DUP6 MLOAD PUSH1 0x60 DUP5 ADD SWAP3 DUP14 DUP3 DUP6 MLOAD SWAP1 PUSH2 0x8EA6 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x8EB1 SWAP2 PUSH2 0x6C6A JUMP JUMPDEST SWAP1 MLOAD PUSH2 0x8EBC SWAP2 PUSH2 0x57A4 JUMP JUMPDEST PUSH2 0x8EC6 SWAP2 DUP6 PUSH2 0xB742 JUMP JUMPDEST DUP6 ADD SWAP2 DUP3 MLOAD DUP12 DUP2 DUP5 MLOAD SWAP1 PUSH2 0x8ED9 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x8EE4 SWAP2 PUSH2 0x57A4 JUMP JUMPDEST PUSH2 0x8EEE SWAP2 DUP4 PUSH2 0xB742 JUMP JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x5 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 SWAP2 DUP1 MLOAD DUP8 MLOAD PUSH2 0x8F14 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP2 PUSH1 0x80 ADD SWAP2 DUP3 MLOAD DUP9 MLOAD PUSH2 0x8F27 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x8F31 SWAP2 PUSH2 0x7295 JUMP JUMPDEST DUP8 MLOAD PUSH2 0x8F45 SWAP1 DUP6 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE MLOAD DUP4 MLOAD PUSH2 0x8F52 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 MLOAD DUP4 MLOAD PUSH2 0x8F60 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x8F6A SWAP2 PUSH2 0x7295 JUMP JUMPDEST SWAP2 MLOAD PUSH2 0x8F7D SWAP2 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE MLOAD SWAP3 MLOAD SWAP4 MLOAD PUSH1 0x60 SWAP3 DUP4 ADD MLOAD SWAP2 MLOAD PUSH1 0x40 DUP1 MLOAD DUP12 DUP2 MSTORE PUSH1 0x20 DUP2 ADD DUP12 SWAP1 MSTORE SWAP1 DUP2 ADD SWAP4 SWAP1 SWAP4 MSTORE SWAP3 DUP3 ADD SWAP3 SWAP1 SWAP3 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 DUP3 AND SWAP4 DUP3 AND SWAP3 SWAP2 SWAP1 SWAP2 AND SWAP1 PUSH32 0x874B2D545CB271CDBDA4E093020C452328B24AF12382ED62C4D00F5C26709DB SWAP1 PUSH1 0x80 SWAP1 LOG4 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0x6EB PUSH2 0x7A4B JUMP JUMPDEST PUSH32 0xE2EA151B00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 DUP9 SWAP1 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 POP DUP2 SWAP9 POP PUSH2 0x9044 PUSH1 0x60 PUSH2 0x904D SWAP4 ADD MLOAD PUSH8 0xDE0B6B3A7640000 DUP2 DUP2 SUB SWAP1 DUP3 LT MUL SWAP1 DUP4 PUSH2 0xC061 JUMP JUMPDEST SWAP1 DUP2 DUP7 MSTORE PUSH2 0x6C6A JUMP JUMPDEST SWAP7 PUSH2 0x9072 PUSH2 0x9061 PUSH1 0xC0 DUP10 ADD MLOAD DUP4 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x2477 PUSH1 0xA0 DUP11 ADD MLOAD DUP5 MLOAD SWAP1 PUSH2 0x5818 JUMP JUMPDEST SWAP4 PUSH1 0x80 DUP4 ADD MLOAD SWAP7 DUP6 SWAP9 PUSH1 0xA0 DUP6 ADD MLOAD DUP1 DUP9 GT PUSH2 0x8FED JUMPI POP PUSH2 0x8E1B JUMP JUMPDEST PUSH2 0x90A5 SWAP2 SWAP10 POP DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP8 PUSH0 PUSH2 0x8DAC JUMP JUMPDEST PUSH1 0x20 DUP6 ADD PUSH2 0x90C3 PUSH2 0x24D1 DUP3 MLOAD PUSH1 0x60 DUP7 ADD MLOAD SWAP1 PUSH2 0xB824 JUMP JUMPDEST SWAP1 MSTORE PUSH2 0x8D35 JUMP JUMPDEST DUP2 DUP2 SUB SWAP3 SWAP2 PUSH0 SGT DUP1 ISZERO DUP3 DUP6 SGT AND SWAP2 DUP5 SLT AND OR PUSH2 0x465D JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH2 0x912B PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0xBA85 JUMP JUMPDEST SWAP1 PUSH0 SWAP3 PUSH1 0x80 SHR DUP1 PUSH2 0x9149 JUMPI JUMPDEST POP POP PUSH1 0x2 SWAP2 PUSH2 0x9145 SWAP2 PUSH2 0x90CA JUMP JUMPDEST SDIV SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 POP SWAP1 PUSH1 0x24 PUSH1 0x20 SWAP3 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH32 0xB3D7F6B900000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x91AA PUSH2 0x9145 SWAP3 PUSH1 0x2 SWAP5 PUSH0 SWAP2 PUSH2 0x91B3 JUMPI JUMPDEST POP PUSH2 0xBA85 JUMP JUMPDEST SWAP3 DUP2 SWAP3 POP PUSH2 0x9137 JUMP JUMPDEST PUSH2 0x91CC SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x91A4 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x91DC JUMPI DIV SWAP1 JUMP JUMPDEST PUSH2 0x90E2 JUMP JUMPDEST SWAP1 PUSH8 0xDE0B5CAD2BEF000 DUP2 GT PUSH2 0x4BFC JUMPI PUSH5 0x174876E800 SWAP1 DIV DUP1 PUSH1 0x18 SHR PUSH2 0x922C JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC000003FFFF SWAP1 PUSH1 0x12 SHL SWAP2 AND OR SWAP1 JUMP JUMPDEST PUSH32 0xE4337C0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 PUSH2 0x92A7 PUSH2 0x92B2 SWAP3 SWAP5 SWAP4 SWAP5 PUSH2 0x9267 PUSH2 0x5928 JUMP JUMPDEST SWAP6 DUP7 SWAP2 PUSH2 0x929D PUSH1 0x20 DUP4 ADD DUP1 MLOAD SWAP1 PUSH2 0x928D PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 DUP4 PUSH1 0x40 DUP8 ADD MLOAD AND SWAP1 PUSH2 0xB10B JUMP JUMPDEST DUP7 MSTORE MLOAD SWAP1 PUSH1 0x60 DUP5 ADD MLOAD AND SWAP1 PUSH2 0xB10B JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x6A65 JUMP JUMPDEST PUSH1 0x40 DUP6 ADD MSTORE MLOAD PUSH2 0xB2A3 JUMP JUMPDEST PUSH1 0x60 DUP4 ADD MSTORE JUMP JUMPDEST PUSH1 0x20 SWAP2 SWAP3 PUSH2 0x9309 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP5 PUSH1 0x40 MLOAD SWAP8 DUP9 SWAP7 DUP8 SWAP6 DUP7 SWAP4 PUSH32 0x5211FA7700000000000000000000000000000000000000000000000000000000 DUP6 MSTORE PUSH1 0x40 PUSH1 0x4 DUP7 ADD MSTORE PUSH1 0x44 DUP6 ADD SWAP1 PUSH2 0x16EB JUMP JUMPDEST SWAP2 AND PUSH1 0x24 DUP4 ADD MSTORE SUB SWAP4 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP2 PUSH2 0x9353 JUMPI JUMPDEST POP ISZERO PUSH2 0x932B JUMPI JUMP JUMPDEST PUSH32 0xE91E17E700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x936C SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x7C4 JUMPI PUSH2 0x7BA DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x9323 JUMP JUMPDEST SWAP2 SWAP1 DUP3 PUSH1 0x40 SWAP2 SUB SLT PUSH2 0x6DC JUMPI PUSH1 0x20 DUP3 MLOAD PUSH2 0x938B DUP2 PUSH2 0xBB3 JUMP JUMPDEST SWAP3 ADD MLOAD SWAP1 JUMP JUMPDEST SWAP1 SWAP3 PUSH2 0x93E2 PUSH1 0x40 SWAP4 SWAP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 DUP5 SWAP2 DUP7 MLOAD SWAP8 DUP9 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xA0E8F5AC00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE PUSH1 0x60 PUSH1 0x4 DUP8 ADD MSTORE PUSH1 0x64 DUP7 ADD SWAP1 PUSH2 0x16EB JUMP JUMPDEST SWAP3 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD MSTORE SUB SWAP3 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP1 PUSH0 SWAP3 PUSH2 0x9443 JUMPI JUMPDEST POP ISZERO PUSH2 0x941B JUMPI PUSH8 0xDE0B5CAD2BEF000 DUP2 GT PUSH2 0x4BFC JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x53F976D400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP PUSH2 0x9467 SWAP2 POP PUSH1 0x40 RETURNDATASIZE PUSH1 0x40 GT PUSH2 0x946E JUMPI JUMPDEST PUSH2 0x945F DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x9372 JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x9403 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x9455 JUMP JUMPDEST PUSH2 0x1A0 PUSH2 0xB23 SWAP3 PUSH1 0x20 DUP4 MSTORE PUSH2 0x948E PUSH1 0x20 DUP5 ADD DUP3 MLOAD PUSH2 0x16DE JUMP JUMPDEST PUSH1 0x20 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x60 DUP2 ADD MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH2 0x100 SWAP1 DUP2 DUP6 ADD MSTORE DUP2 ADD MLOAD PUSH2 0x120 SWAP1 DUP2 DUP6 ADD MSTORE DUP2 ADD MLOAD PUSH2 0x950F PUSH2 0x140 SWAP2 DUP3 DUP7 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST DUP2 ADD MLOAD SWAP1 PUSH2 0x952B PUSH2 0x160 SWAP3 DUP4 DUP7 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 MSTORE JUMP JUMPDEST ADD MLOAD SWAP2 PUSH2 0x180 DUP1 DUP3 ADD MSTORE ADD SWAP1 PUSH2 0x1177 JUMP JUMPDEST SWAP4 SWAP6 SWAP1 SWAP2 SWAP5 SWAP3 DUP7 MLOAD PUSH2 0x954D DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x9556 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x97A5 JUMPI DUP7 PUSH1 0x40 DUP6 ADD MLOAD SWAP2 DUP5 JUMPDEST DUP3 MLOAD SWAP5 PUSH2 0x956F DUP7 PUSH2 0x1015 JUMP JUMPDEST PUSH1 0x40 SWAP8 DUP9 SWAP8 DUP9 DUP7 ADD MLOAD PUSH2 0x9588 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP7 PUSH1 0x60 DUP8 ADD MLOAD PUSH2 0x959E SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP4 PUSH1 0x80 ADD SWAP3 DUP4 MLOAD DUP2 MLOAD PUSH2 0x95B0 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP4 MLOAD SWAP1 PUSH1 0x20 ADD MLOAD PUSH2 0x95C1 SWAP2 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP4 PUSH1 0x20 DUP9 ADD MLOAD PUSH2 0x95D8 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP8 PUSH1 0xC0 ADD MLOAD SWAP9 PUSH2 0x95E6 PUSH2 0x921 JUMP JUMPDEST SWAP11 PUSH2 0x95F1 SWAP1 DUP13 PUSH2 0x5F73 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x20 DUP12 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP10 DUP12 ADD MSTORE PUSH1 0x60 DUP10 ADD MSTORE PUSH1 0x80 DUP9 ADD MSTORE PUSH1 0xA0 DUP8 ADD MSTORE PUSH1 0xC0 DUP7 ADD MSTORE PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x100 DUP5 ADD DUP9 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x120 DUP5 ADD MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH2 0x140 DUP4 ADD MSTORE PUSH2 0x160 DUP3 ADD MSTORE DUP2 MLOAD SWAP7 DUP8 DUP1 DUP1 SWAP4 PUSH32 0x18B6EB5500000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH1 0x4 DUP3 ADD SWAP1 PUSH2 0x9689 SWAP2 PUSH2 0x9475 JUMP JUMPDEST SUB SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND GAS SWAP1 PUSH0 SWAP2 CALL SWAP5 DUP6 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP2 PUSH0 SWAP7 PUSH2 0x9781 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x9759 JUMPI PUSH1 0x9 SHR PUSH1 0x1 AND ISZERO PUSH2 0x9753 JUMPI POP DUP1 MLOAD PUSH2 0x96C7 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x96D0 DUP2 PUSH2 0x1015 JUMP JUMPDEST ISZERO DUP1 PUSH2 0x9746 JUMPI JUMPDEST DUP1 ISZERO PUSH2 0x971B JUMPI JUMPDEST PUSH2 0x96E6 JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0xA0 ADD MLOAD PUSH32 0xCC0E4A9900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 SWAP2 SWAP1 SWAP2 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST POP PUSH1 0x1 DUP2 MLOAD PUSH2 0x9729 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0x9732 DUP2 PUSH2 0x1015 JUMP JUMPDEST EQ DUP1 ISZERO PUSH2 0x96DE JUMPI POP PUSH1 0xA0 DUP2 ADD MLOAD DUP3 GT PUSH2 0x96DE JUMP JUMPDEST POP PUSH1 0xA0 DUP2 ADD MLOAD DUP3 LT PUSH2 0x96D7 JUMP JUMPDEST SWAP2 POP POP SWAP1 JUMP JUMPDEST PUSH32 0x15A29DEC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x979C SWAP4 SWAP7 POP DUP1 SWAP2 SWAP3 POP SWAP1 RETURNDATASIZE LT PUSH2 0x946E JUMPI PUSH2 0x945F DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP4 SWAP1 PUSH0 DUP1 PUSH2 0x96A9 JUMP JUMPDEST DUP7 PUSH1 0x40 DUP6 ADD MLOAD SWAP2 DUP5 SWAP3 SWAP5 PUSH2 0x9563 JUMP JUMPDEST DUP1 PUSH2 0x97BC JUMPI POP JUMP JUMPDEST PUSH2 0x6EB SWAP1 PUSH2 0xAF52 JUMP JUMPDEST PUSH2 0x2D90 PUSH2 0x6EB SWAP3 PUSH2 0xBA85 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP2 AND SWAP1 DUP2 PUSH0 MSTORE PUSH1 0xE PUSH1 0x20 MSTORE DUP1 PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND SWAP3 AND DUP1 SWAP3 SUB PUSH2 0x97F9 JUMPI POP POP JUMP JUMPDEST PUSH32 0x36B18D0900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 PUSH32 0x0 GT PUSH2 0x9851 JUMPI POP JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x18FE738500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 SWAP2 PUSH0 DUP4 DUP3 ADD SWAP4 DUP5 SLT SWAP2 SLT SWAP1 DUP1 ISZERO DUP3 AND SWAP2 ISZERO AND OR PUSH2 0x465D JUMPI JUMP JUMPDEST SWAP3 PUSH2 0x98F6 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP3 PUSH2 0x98BA DUP6 PUSH2 0x5796 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH32 0xEF8B30F700000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP1 PUSH1 0x20 SWAP10 DUP11 SWAP4 PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 DUP9 GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x9912 SWAP2 PUSH0 SWAP2 PUSH2 0x9AEE JUMPI JUMPDEST POP PUSH2 0x5796 JUMP JUMPDEST SWAP5 DUP1 SWAP7 PUSH2 0x9930 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP2 PUSH2 0x993A PUSH2 0xBF88 JUMP JUMPDEST PUSH2 0x9AE4 JUMPI POP SWAP2 DUP2 DUP9 SWAP4 DUP9 SWAP6 SWAP4 PUSH1 0x80 SHR SWAP1 DUP7 DUP3 LT ISZERO PUSH0 EQ PUSH2 0x99B4 JUMPI POP POP SWAP3 PUSH2 0x99A9 SWAP7 SWAP3 PUSH2 0x99AF SWAP3 PUSH2 0x998F DUP7 PUSH2 0x998A DUP6 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 PUSH2 0x6EB SWAP13 SWAP12 PUSH1 0x80 SHR SUB SWAP4 AND PUSH2 0x6C6A JUMP JUMPDEST PUSH2 0x7295 JUMP JUMPDEST SWAP9 DUP10 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0x97C5 JUMP JUMPDEST PUSH2 0x7AC1 JUMP JUMPDEST SWAP2 SWAP3 SWAP5 POP SWAP7 SWAP3 SWAP5 POP PUSH2 0x99DF PUSH2 0x99DA PUSH2 0x99CC DUP7 DUP6 PUSH2 0x910F JUMP JUMPDEST PUSH2 0x99D5 DUP13 PUSH2 0xBA85 JUMP JUMPDEST PUSH2 0x9886 JUMP JUMPDEST PUSH2 0xC081 JUMP JUMPDEST SWAP5 PUSH2 0x99EB DUP7 DUP6 DUP4 PUSH2 0xC1CE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x6E553F6500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP8 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP5 DUP3 DUP7 PUSH1 0x44 DUP2 PUSH0 DUP10 GAS CALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x99A9 SWAP10 PUSH2 0x9A99 DUP13 PUSH2 0x9A8E DUP16 SWAP8 PUSH2 0x998F SWAP6 PUSH2 0x6EB SWAP14 DUP11 PUSH2 0x99AF SWAP13 DUP7 SWAP16 DUP16 SWAP6 SWAP1 DUP14 SWAP2 PUSH0 SWAP7 PUSH2 0x9A9F JUMPI JUMPDEST POP POP PUSH2 0x9A8E SWAP3 SWAP2 PUSH2 0x9A88 DUP7 DUP7 DUP10 DUP6 PUSH2 0x9A83 PUSH2 0x9A93 SWAP12 SWAP13 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP9 PUSH2 0xC0B6 JUMP JUMPDEST PUSH2 0xAF0D JUMP JUMPDEST AND PUSH2 0x6C6A JUMP JUMPDEST PUSH2 0x57A4 JUMP JUMPDEST SWAP5 PUSH2 0x6C6A JUMP JUMPDEST SWAP1 PUSH2 0x7295 JUMP JUMPDEST PUSH2 0x9A93 SWAP7 POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP7 PUSH2 0x9AD6 PUSH2 0x9A8E SWAP8 SWAP7 SWAP5 DUP5 PUSH2 0x9A88 SWAP6 SWAP1 RETURNDATASIZE LT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP9 POP POP SWAP3 POP DUP2 SWAP4 SWAP5 POP PUSH2 0x9A56 JUMP JUMPDEST SWAP8 POP SWAP1 SWAP5 POP POP POP POP JUMP JUMPDEST PUSH2 0x9B05 SWAP2 POP DUP9 RETURNDATASIZE DUP11 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x990C JUMP JUMPDEST SWAP3 PUSH2 0x9B62 SWAP3 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP3 PUSH2 0x9B25 DUP7 PUSH2 0x6C5C JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB3D7F6B900000000000000000000000000000000000000000000000000000000 SWAP2 DUP3 DUP3 MSTORE DUP2 DUP1 PUSH1 0x20 SWAP10 DUP11 SWAP4 PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 DUP10 GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x9B7E SWAP2 PUSH0 SWAP2 PUSH2 0x9D51 JUMPI JUMPDEST POP PUSH2 0x6C5C JUMP JUMPDEST SWAP1 DUP8 SWAP7 DUP3 SWAP9 PUSH2 0x9B9E DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP4 PUSH2 0x9BA8 PUSH2 0xBF88 JUMP JUMPDEST PUSH2 0x9D44 JUMPI POP POP SWAP2 DUP9 SWAP4 SWAP2 DUP9 SWAP6 SWAP4 DUP3 PUSH1 0x80 SHR SWAP2 DUP8 DUP4 LT ISZERO PUSH0 EQ PUSH2 0x9BFB JUMPI POP POP POP SWAP3 PUSH2 0x99A9 SWAP7 SWAP3 PUSH2 0x99AF SWAP3 PUSH2 0x998F DUP7 PUSH2 0x998A DUP6 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 PUSH2 0x6EB SWAP13 SWAP12 PUSH1 0x80 SHR SUB SWAP4 AND PUSH2 0x6C6A JUMP JUMPDEST SWAP3 SWAP6 POP SWAP3 SWAP6 POP SWAP7 SWAP3 PUSH2 0x9C21 PUSH2 0x99DA PUSH2 0x9C13 DUP9 DUP9 PUSH2 0xAE78 JUMP JUMPDEST PUSH2 0x9C1C DUP13 PUSH2 0xBA85 JUMP JUMPDEST PUSH2 0x90CA JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 DUP4 MSTORE PUSH1 0x4 DUP4 ADD DUP2 SWAP1 MSTORE SWAP2 DUP4 DUP2 PUSH1 0x24 DUP2 DUP9 GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x9C50 SWAP2 PUSH0 SWAP2 PUSH2 0x9D27 JUMPI JUMPDEST POP DUP6 DUP4 PUSH2 0xC1CE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x94BF804D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP4 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP6 DUP4 DUP8 PUSH1 0x44 DUP2 PUSH0 DUP10 GAS CALL SWAP6 DUP7 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x99A9 SWAP10 PUSH2 0x9A99 DUP13 PUSH2 0x9A8E DUP16 SWAP8 PUSH2 0x9A93 DUP12 DUP5 SWAP14 PUSH2 0x6EB SWAP16 PUSH2 0x998F SWAP10 DUP6 PUSH2 0x99AF SWAP16 DUP16 SWAP4 DUP16 SWAP2 PUSH0 SWAP7 PUSH2 0x9CE8 JUMPI JUMPDEST POP POP PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 SWAP2 DUP6 DUP8 DUP4 PUSH2 0x9A83 PUSH2 0x9A8E SWAP10 SWAP11 PUSH2 0x9A88 SWAP7 PUSH2 0xC0B6 JUMP JUMPDEST PUSH2 0x9A8E SWAP7 POP SWAP2 PUSH2 0x9D1B PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 SWAP5 SWAP3 DUP5 PUSH2 0x9A88 SWAP6 SWAP1 RETURNDATASIZE LT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP7 POP SWAP2 DUP2 SWAP4 SWAP5 POP PUSH2 0x9CBF JUMP JUMPDEST PUSH2 0x9D3E SWAP2 POP DUP6 RETURNDATASIZE DUP8 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x9C48 JUMP JUMPDEST SWAP10 POP SWAP8 POP SWAP2 SWAP6 POP POP POP POP POP JUMP JUMPDEST PUSH2 0x9D68 SWAP2 POP DUP9 RETURNDATASIZE DUP11 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x9B78 JUMP JUMPDEST SWAP4 SWAP1 SWAP2 PUSH2 0x9D7A DUP6 PUSH2 0x1015 JUMP JUMPDEST DUP5 ISZERO DUP1 ISZERO PUSH2 0xA0C7 JUMPI PUSH2 0x9D90 PUSH1 0x20 PUSH2 0x61AB DUP8 PUSH2 0x5796 JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x9DB4 SWAP2 PUSH0 SWAP2 PUSH2 0xA0AE JUMPI POP PUSH2 0x5796 JUMP JUMPDEST SWAP5 SWAP6 JUMPDEST PUSH2 0x9DD2 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP2 PUSH2 0x9DDC PUSH2 0xBF88 JUMP JUMPDEST PUSH2 0xA0A6 JUMPI DUP7 SWAP3 DUP9 SWAP3 SWAP1 SWAP2 PUSH1 0x80 DUP4 SWAP1 SHR SWAP2 DUP6 DUP4 LT PUSH2 0x9E4F JUMPI POP POP POP SWAP3 PUSH2 0x9E49 DUP3 PUSH2 0x9E2C DUP7 PUSH2 0x998A PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP7 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 PUSH2 0x6EB SWAP12 PUSH1 0x80 SHR SUB SWAP4 AND PUSH2 0x6C6A JUMP JUMPDEST SWAP8 DUP9 PUSH2 0x99A9 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST AND PUSH2 0x7AC1 JUMP JUMPDEST SWAP1 SWAP3 SWAP4 POP PUSH2 0x9E5E SWAP2 SWAP5 POP PUSH2 0x1015 JUMP JUMPDEST ISZERO PUSH2 0x9F53 JUMPI PUSH2 0x9E7C PUSH2 0x99DA PUSH2 0x9E73 DUP6 DUP5 PUSH2 0x910F JUMP JUMPDEST PUSH2 0x99D5 DUP11 PUSH2 0xBA85 JUMP JUMPDEST SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP4 PUSH2 0x9E93 DUP2 DUP7 DUP10 PUSH2 0xC1CE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x6E553F6500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP5 PUSH1 0x20 SWAP1 DUP7 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 PUSH0 SWAP1 GAS CALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x9E2C DUP10 SWAP6 PUSH2 0x9A99 DUP8 PUSH2 0x9A8E PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 SWAP7 DUP9 DUP16 DUP10 PUSH2 0x6EB SWAP16 DUP6 SWAP15 PUSH2 0x9A88 DUP16 PUSH2 0x9E49 SWAP16 PUSH2 0x9A8E SWAP7 PUSH2 0x9A93 SWAP10 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP7 PUSH0 SWAP2 PUSH2 0x9F34 JUMPI JUMPDEST POP SWAP11 DUP12 SWAP4 JUMPDEST AND SWAP1 PUSH2 0x9A83 DUP3 DUP3 PUSH2 0xC0B6 JUMP JUMPDEST PUSH2 0x9F4D SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x9F23 JUMP JUMPDEST SWAP1 SWAP2 PUSH2 0x9F6E PUSH2 0x99DA PUSH2 0x9F65 DUP4 DUP6 PUSH2 0xAE78 JUMP JUMPDEST PUSH2 0x9C1C DUP10 PUSH2 0xBA85 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB3D7F6B900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND SWAP4 PUSH1 0x20 SWAP4 SWAP3 SWAP1 SWAP2 DUP5 DUP2 PUSH1 0x24 DUP2 DUP10 GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x9FCD SWAP2 PUSH0 SWAP2 PUSH2 0xA089 JUMPI JUMPDEST POP DUP7 DUP11 PUSH2 0xC1CE JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x94BF804D00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD MSTORE SWAP5 DUP5 SWAP1 DUP7 SWAP1 PUSH1 0x44 SWAP1 DUP3 SWAP1 PUSH0 SWAP1 GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x6EB SWAP7 PUSH2 0x9A99 DUP12 PUSH2 0x9A8E DUP6 DUP16 SWAP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP16 DUP10 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 SWAP16 SWAP11 DUP5 SWAP16 DUP16 SWAP7 PUSH2 0x9E49 SWAP16 SWAP8 PUSH2 0x9A8E SWAP7 PUSH2 0x9E2C SWAP16 SWAP10 PUSH2 0x9A93 SWAP11 PUSH2 0x9A88 SWAP6 PUSH0 SWAP3 PUSH2 0xA06C JUMPI JUMPDEST POP POP SWAP9 DUP10 SWAP3 PUSH2 0x9F28 JUMP JUMPDEST PUSH2 0xA082 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 DUP1 PUSH2 0xA062 JUMP JUMPDEST PUSH2 0xA0A0 SWAP2 POP DUP7 RETURNDATASIZE DUP9 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0x9FC5 JUMP JUMPDEST POP SWAP1 SWAP4 POP POP POP JUMP JUMPDEST PUSH2 0x9B05 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH2 0xA10D PUSH1 0x20 PUSH2 0xA0D5 DUP8 PUSH2 0x6C5C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xB3D7F6B900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP8 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0xA131 SWAP2 PUSH0 SWAP2 PUSH2 0xA137 JUMPI POP PUSH2 0x6C5C JUMP JUMPDEST SWAP6 PUSH2 0x9DB7 JUMP JUMPDEST PUSH2 0x9D68 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP1 SWAP3 PUSH2 0xA1A7 SWAP3 SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP1 PUSH2 0xA16B DUP7 PUSH2 0x6C5C JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH32 0xA28A47700000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP1 PUSH1 0x20 SWAP9 DUP10 SWAP4 PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 DUP7 GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0xA1C2 SWAP2 PUSH0 SWAP2 PUSH2 0xA341 JUMPI POP PUSH2 0x6C5C JUMP JUMPDEST DUP7 SWAP6 DUP2 SWAP8 PUSH2 0xA1E1 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP3 PUSH2 0xA1EB PUSH2 0xBF88 JUMP JUMPDEST PUSH2 0xA335 JUMPI POP POP SWAP2 DUP7 SWAP4 SWAP2 DUP9 SWAP4 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 DUP4 AND SWAP1 DUP8 DUP3 LT ISZERO PUSH0 EQ PUSH2 0xA242 JUMPI POP POP SWAP3 PUSH2 0x99AF SWAP3 PUSH2 0x998F DUP4 DUP9 PUSH2 0x99A9 SWAP12 SWAP8 PUSH2 0xA23A DUP11 PUSH2 0x6EB SWAP13 SWAP12 SWAP9 PUSH1 0x80 SHR PUSH2 0x6C6A JUMP JUMPDEST SWAP3 AND SUB PUSH2 0x7295 JUMP JUMPDEST SWAP3 SWAP9 SWAP5 SWAP7 POP SWAP5 POP POP PUSH2 0xA263 PUSH2 0x99DA PUSH2 0xA25A DUP5 DUP11 PUSH2 0x910F JUMP JUMPDEST PUSH2 0x9C1C DUP12 PUSH2 0xBA85 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB460AF9400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 SWAP6 SWAP1 SWAP3 DUP3 DUP5 PUSH1 0x64 DUP2 PUSH0 DUP7 GAS CALL SWAP4 DUP5 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x99A9 SWAP10 PUSH2 0x9A99 DUP5 PUSH2 0x99AF SWAP8 DUP16 DUP16 PUSH2 0x6EB SWAP14 DUP2 SWAP14 DUP14 PUSH2 0x998F SWAP10 DUP6 SWAP14 PUSH0 SWAP8 PUSH2 0xA2FC JUMPI JUMPDEST POP POP SWAP2 PUSH2 0x9A8E SWAP2 PUSH2 0xA2EE DUP8 DUP4 PUSH2 0x9A8E SWAP10 SWAP11 PUSH2 0xA2F3 SWAP9 SWAP8 PUSH2 0xAFA2 JUMP JUMPDEST PUSH2 0x6C6A JUMP JUMPDEST SWAP5 PUSH1 0x80 SHR PUSH2 0x6C6A JUMP JUMPDEST PUSH2 0x9A8E SWAP8 POP DUP5 SWAP3 PUSH2 0xA2F3 SWAP7 SWAP6 PUSH2 0xA326 PUSH2 0x9A8E SWAP7 SWAP5 DUP5 PUSH2 0xA2EE SWAP6 SWAP1 RETURNDATASIZE LT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP10 POP POP SWAP3 SWAP5 SWAP6 POP DUP2 SWAP4 POP PUSH2 0xA2D3 JUMP JUMPDEST SWAP9 POP SWAP7 POP SWAP1 SWAP5 POP POP POP POP JUMP JUMPDEST PUSH2 0x9D68 SWAP2 POP DUP8 RETURNDATASIZE DUP10 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP3 PUSH2 0xA3AF SWAP4 SWAP3 SWAP2 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH2 0xA373 DUP5 PUSH2 0x5796 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH32 0x4CDAD50600000000000000000000000000000000000000000000000000000000 DUP3 MSTORE DUP2 DUP1 PUSH1 0x20 SWAP10 DUP11 SWAP4 PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 DUP6 GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0xA3CA SWAP2 PUSH0 SWAP2 PUSH2 0x9AEE JUMPI POP PUSH2 0x5796 JUMP JUMPDEST SWAP5 DUP5 SWAP7 PUSH2 0xA3E8 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP6 PUSH2 0xA3F2 PUSH2 0xBF88 JUMP JUMPDEST PUSH2 0xA50A JUMPI POP DUP7 SWAP4 SWAP3 DUP9 SWAP3 SWAP1 SWAP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP9 DUP3 AND DUP8 DUP2 LT PUSH2 0xA43D JUMPI POP POP SWAP2 DUP4 SWAP2 PUSH2 0x998F DUP10 DUP9 PUSH2 0x99AF SWAP7 PUSH2 0xA23A PUSH2 0x6EB SWAP12 SWAP11 SWAP10 PUSH2 0x99A9 SWAP15 PUSH1 0x80 SHR PUSH2 0x6C6A JUMP JUMPDEST SWAP3 SWAP7 POP SWAP3 SWAP5 SWAP4 POP POP PUSH2 0xA455 PUSH2 0x99DA PUSH2 0x99CC DUP8 DUP11 PUSH2 0xAE78 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP6 SWAP1 SWAP5 SWAP1 DUP4 DUP8 PUSH1 0x64 DUP2 PUSH0 DUP7 GAS CALL SWAP3 DUP4 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x99A9 SWAP10 PUSH2 0x9A99 DUP9 PUSH2 0x9A8E DUP16 DUP16 SWAP12 DUP13 PUSH2 0x9A8E PUSH2 0x6EB SWAP16 SWAP12 PUSH2 0x998F SWAP10 DUP16 SWAP5 PUSH2 0x99AF SWAP16 DUP8 SWAP16 SWAP7 DUP16 SWAP2 SWAP8 PUSH2 0xA2F3 SWAP9 PUSH0 SWAP7 PUSH2 0xA4E3 JUMPI JUMPDEST POP POP PUSH2 0xA2EE SWAP3 SWAP2 DUP6 SWAP2 PUSH2 0xAFA2 JUMP JUMPDEST PUSH2 0xA2EE SWAP5 SWAP4 SWAP7 POP SWAP1 DUP2 PUSH2 0xA501 SWAP3 SWAP1 RETURNDATASIZE LT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP5 SWAP2 SWAP3 PUSH0 PUSH2 0xA4D5 JUMP JUMPDEST SWAP8 POP POP POP POP POP JUMP JUMPDEST SWAP4 SWAP1 PUSH2 0xA51D DUP6 PUSH2 0x1015 JUMP JUMPDEST DUP5 ISZERO SWAP5 DUP6 ISZERO PUSH2 0xA7B9 JUMPI PUSH2 0xA534 PUSH1 0x20 PUSH2 0x6674 DUP8 PUSH2 0x5796 JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0xA558 SWAP2 PUSH0 SWAP2 PUSH2 0xA0AE JUMPI POP PUSH2 0x5796 JUMP JUMPDEST SWAP5 SWAP6 JUMPDEST PUSH2 0xA576 DUP6 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP2 PUSH2 0xA580 PUSH2 0xBF88 JUMP JUMPDEST PUSH2 0xA0A6 JUMPI DUP8 SWAP4 DUP8 SWAP4 SWAP1 SWAP3 SWAP1 SWAP2 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP5 AND SWAP2 DUP7 DUP4 LT PUSH2 0xA5F3 JUMPI POP POP POP SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xA5CE DUP4 DUP7 PUSH2 0x6EB SWAP9 PUSH2 0xA23A DUP7 PUSH2 0x99AF SWAP9 PUSH1 0x80 SHR PUSH2 0x6C6A JUMP JUMPDEST SWAP8 DUP9 PUSH2 0xA5EB DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE JUMPDEST AND PUSH2 0x97C5 JUMP JUMPDEST SWAP2 SWAP7 POP SWAP3 SWAP5 POP PUSH2 0xA603 SWAP2 POP PUSH2 0x1015 JUMP JUMPDEST ISZERO PUSH2 0xA6F3 JUMPI PUSH2 0xA618 PUSH2 0x99DA PUSH2 0x9E73 DUP8 DUP6 PUSH2 0xAE78 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xBA08765200000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP4 SWAP1 PUSH1 0x20 DUP6 PUSH1 0x64 DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND GAS CALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0xA6B1 DUP10 SWAP6 PUSH2 0x9A99 DUP5 PUSH2 0x9A8E DUP15 PUSH2 0xA2F3 DUP12 DUP16 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x6EB SWAP16 SWAP13 PUSH2 0xA2EE DUP16 SWAP14 PUSH2 0x99AF SWAP16 SWAP5 DUP9 SWAP16 DUP6 SWAP16 PUSH2 0x9A8E SWAP8 PUSH0 SWAP2 PUSH2 0xA6D4 JUMPI JUMPDEST POP SWAP6 DUP7 SWAP3 JUMPDEST AND SWAP1 PUSH2 0xAFA2 JUMP JUMPDEST SWAP8 DUP9 PUSH2 0xA6CE DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xB PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH2 0xA5ED JUMP JUMPDEST PUSH2 0xA6ED SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0xA6A5 JUMP JUMPDEST PUSH2 0xA703 PUSH2 0x99DA PUSH2 0x9F65 DUP8 DUP6 PUSH2 0x910F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xB460AF9400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x4 DUP2 ADD DUP3 SWAP1 MSTORE ADDRESS PUSH1 0x24 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x44 DUP3 ADD MSTORE SWAP1 PUSH1 0x20 DUP3 PUSH1 0x64 DUP2 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP13 AND GAS CALL SWAP2 DUP3 ISZERO PUSH2 0x7CB JUMPI PUSH2 0xA6B1 DUP10 SWAP6 PUSH2 0x9A99 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0x9A8E DUP15 PUSH2 0xA2F3 DUP12 DUP16 DUP11 PUSH2 0x6EB SWAP16 PUSH2 0xA2EE DUP16 SWAP4 PUSH2 0x99AF SWAP16 SWAP15 DUP9 SWAP16 SWAP6 DUP12 SWAP16 SWAP7 PUSH2 0x9A8E SWAP8 PUSH0 SWAP2 PUSH2 0xA79A JUMPI JUMPDEST POP SWAP12 DUP13 SWAP4 PUSH2 0xA6AA JUMP JUMPDEST PUSH2 0xA7B3 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0xA791 JUMP JUMPDEST PUSH2 0xA7FF PUSH1 0x20 PUSH2 0xA7C7 DUP8 PUSH2 0x6C5C JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP4 DUP2 SWAP3 PUSH32 0xA28A47700000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x4 DUP4 ADD SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP10 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0xA823 SWAP2 PUSH0 SWAP2 PUSH2 0xA137 JUMPI POP PUSH2 0x6C5C JUMP JUMPDEST SWAP6 PUSH2 0xA55B JUMP JUMPDEST SWAP1 PUSH2 0xB23 SWAP2 PUSH1 0x80 SHR SWAP1 PUSH2 0x7295 JUMP JUMPDEST SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP4 AND SWAP4 DUP5 ISZERO PUSH2 0xA950 JUMPI PUSH2 0xA86F DUP4 PUSH2 0xA869 DUP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0x6C6A JUMP JUMPDEST PUSH2 0xA88E DUP6 PUSH2 0x7B67 DUP5 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP5 DUP2 SLOAD ADD SWAP1 SSTORE PUSH2 0xA89D DUP2 PUSH2 0xBB26 JUMP JUMPDEST PUSH2 0xA8B8 DUP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x11 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE AND SWAP3 PUSH0 DUP5 PUSH32 0xD1398BEE19313D6BF672CCB116E51F4A1A947E91C757907F51FBB5B5E56C698F PUSH1 0x40 MLOAD DUP1 PUSH2 0xA8F1 DUP8 DUP3 SWAP2 SWAP1 PUSH1 0x20 DUP4 ADD SWAP3 MSTORE JUMP JUMPDEST SUB SWAP1 LOG4 DUP3 EXTCODESIZE ISZERO PUSH2 0x6DC JUMPI PUSH1 0x40 MLOAD PUSH32 0x23DE665100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH0 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP4 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD SWAP2 SWAP1 SWAP2 MSTORE SWAP2 DUP3 SWAP1 DUP2 DUP4 DUP2 PUSH1 0x64 DUP2 ADD PUSH2 0x5619 JUMP JUMPDEST PUSH32 0xEC442F0500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP5 AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 TLOAD SWAP1 PUSH1 0x1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x465D JUMPI TSTORE JUMP JUMPDEST SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x1 PUSH1 0x40 PUSH0 KECCAK256 TSTORE JUMP JUMPDEST SWAP2 SWAP1 DUP3 MLOAD SWAP2 PUSH2 0xA9C2 DUP3 MLOAD DUP3 MLOAD SWAP1 DUP6 PUSH2 0xBB5E JUMP JUMPDEST PUSH2 0xA9CB DUP4 PUSH2 0x57E7 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0xA9DD JUMPI POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP1 PUSH8 0xDE0B6B3A7640000 PUSH2 0xAA0F PUSH2 0xA9F6 PUSH1 0x1 SWAP5 DUP7 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x6ABF PUSH2 0xAA04 DUP6 DUP11 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x6AB8 DUP7 DUP11 PUSH2 0x5818 JUMP JUMPDEST DIV PUSH2 0xAA1A DUP3 DUP10 PUSH2 0x5818 JUMP JUMPDEST MSTORE ADD PUSH2 0xA9CE JUMP JUMPDEST SWAP6 SWAP2 SWAP4 PUSH2 0xAA52 PUSH2 0xB23 SWAP9 SWAP7 SWAP5 PUSH2 0xAA63 SWAP4 PUSH2 0x81C1 SWAP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP3 AND DUP12 MSTORE AND PUSH1 0x20 DUP11 ADD MSTORE PUSH1 0x40 DUP10 ADD SWAP1 PUSH2 0x5678 JUMP JUMPDEST PUSH1 0xE0 PUSH1 0x60 DUP9 ADD MSTORE PUSH1 0xE0 DUP8 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP7 ADD MSTORE DUP5 DUP3 SUB PUSH1 0xA0 DUP7 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST SWAP3 PUSH0 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x20 SWAP6 SWAP7 SWAP4 SWAP7 PUSH2 0xAAF0 PUSH2 0xAA9A DUP8 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST SWAP5 PUSH1 0x80 DUP9 ADD MLOAD SWAP8 PUSH2 0xAAAA DUP10 PUSH2 0x566E JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x80 PUSH1 0x60 DUP4 ADD MLOAD SWAP4 ADD MLOAD SWAP2 ADD MLOAD SWAP2 PUSH1 0x40 MLOAD SWAP12 DUP13 SWAP11 DUP12 SWAP10 DUP11 SWAP8 PUSH32 0x45421EC700000000000000000000000000000000000000000000000000000000 DUP10 MSTORE PUSH1 0x4 DUP10 ADD PUSH2 0xAA21 JUMP JUMPDEST SUB SWAP4 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP2 PUSH2 0xAB33 JUMPI JUMPDEST POP ISZERO PUSH2 0xAB0B JUMPI JUMP JUMPDEST PUSH32 0xB2EB65200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0xAB4C SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x7C4 JUMPI PUSH2 0x7BA DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0xAB03 JUMP JUMPDEST SWAP7 SWAP3 PUSH2 0xB23 SWAP9 SWAP7 SWAP5 PUSH2 0xABA8 SWAP4 PUSH2 0xAB8C PUSH2 0xAB9A SWAP4 PUSH2 0x8B44 SWAP10 SWAP6 PUSH2 0x100 SWAP4 DUP14 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 SWAP4 AND SWAP1 MSTORE AND PUSH1 0x20 DUP14 ADD MSTORE PUSH1 0x40 DUP13 ADD SWAP1 PUSH2 0x5678 JUMP JUMPDEST DUP1 PUSH1 0x60 DUP12 ADD MSTORE DUP10 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP1 DUP8 DUP3 SUB PUSH1 0x80 DUP10 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST SWAP2 PUSH1 0xA0 DUP7 ADD MSTORE DUP5 DUP3 SUB PUSH1 0xC0 DUP7 ADD MSTORE PUSH2 0x1085 JUMP JUMPDEST SWAP5 SWAP4 SWAP2 SWAP6 SWAP3 SWAP7 SWAP1 DUP5 MLOAD PUSH2 0xABD4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD SWAP2 PUSH2 0xABE3 DUP4 PUSH2 0x566E JUMP JUMPDEST PUSH1 0x80 DUP7 ADD MLOAD PUSH1 0xA0 DUP9 ADD MLOAD SWAP1 PUSH1 0x40 SWAP7 DUP13 PUSH1 0x40 MLOAD SWAP13 DUP14 SWAP8 DUP9 SWAP8 PUSH32 0x976907CC00000000000000000000000000000000000000000000000000000000 DUP10 MSTORE PUSH1 0x4 DUP10 ADD SWAP8 PUSH2 0xAC2B SWAP9 PUSH2 0xAB52 JUMP JUMPDEST SUB SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP2 DUP2 GAS PUSH0 SWAP5 DUP6 SWAP2 CALL SWAP5 DUP6 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP1 PUSH0 SWAP7 PUSH2 0xAD45 JUMPI JUMPDEST POP ISZERO DUP1 ISZERO PUSH2 0xAD39 JUMPI JUMPDEST PUSH2 0xAD11 JUMPI PUSH1 0x1 DUP1 SWAP5 PUSH1 0x9 SHR AND ISZERO PUSH2 0xAC77 JUMPI SWAP1 SWAP2 SWAP3 DUP1 SWAP5 SWAP6 POP PUSH0 SWAP1 JUMPDEST PUSH2 0xAC7F JUMPI JUMPDEST POP POP POP POP POP SWAP1 JUMP JUMPDEST DUP6 MLOAD DUP2 LT ISZERO PUSH2 0xAD0C JUMPI PUSH2 0xAC92 DUP2 DUP8 PUSH2 0x5818 JUMP JUMPDEST MLOAD DUP3 DUP6 ADD SWAP1 PUSH2 0xACA2 DUP4 DUP4 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD LT PUSH2 0xACB1 JUMPI POP DUP5 ADD DUP5 PUSH2 0xAC72 JUMP JUMPDEST DUP7 SWAP1 PUSH2 0xACCF DUP4 PUSH2 0x8329 DUP2 PUSH2 0x8C61 PUSH2 0x29BF PUSH2 0x2420 SWAP9 PUSH1 0x20 DUP13 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH32 0xCEFA3AFA00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 SWAP3 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE PUSH1 0x64 SWAP1 JUMP JUMPDEST PUSH2 0xAC77 JUMP JUMPDEST PUSH32 0xE124916500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP DUP5 MLOAD DUP7 MLOAD EQ ISZERO PUSH2 0xAC57 JUMP JUMPDEST SWAP1 POP PUSH2 0xAD5C SWAP2 SWAP6 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x8CF4 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP5 SWAP1 PUSH0 PUSH2 0xAC4E JUMP JUMPDEST PUSH5 0x174876E800 PUSH2 0xB23 SWAP3 DIV SWAP1 PUSH2 0xB875 JUMP JUMPDEST SWAP1 PUSH8 0xDE0B5CAD2BEF000 DUP2 GT PUSH2 0x4BFC JUMPI PUSH2 0xB23 SWAP2 PUSH5 0x174876E800 PUSH1 0x42 SWAP3 DIV SWAP1 PUSH2 0xB88F JUMP JUMPDEST SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0xB23 SWAP3 AND PUSH2 0x7295 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0xAE74 JUMPI PUSH32 0x0 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND PUSH0 MSTORE DUP3 PUSH1 0x20 MSTORE PUSH2 0xADFD PUSH1 0x40 PUSH0 KECCAK256 TLOAD SWAP3 DUP4 PUSH2 0x9886 JUMP JUMPDEST SWAP2 DUP3 PUSH2 0xAE3D JUMPI POP PUSH32 0x0 SWAP3 DUP4 TLOAD PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x465D JUMPI PUSH2 0x6EB SWAP5 TSTORE PUSH2 0xB171 JUMP JUMPDEST SWAP3 PUSH2 0x6EB SWAP4 PUSH2 0xB171 JUMPI PUSH2 0xAE6F PUSH32 0x0 PUSH2 0xA985 JUMP JUMPDEST PUSH2 0xB171 JUMP JUMPDEST POP POP JUMP JUMPDEST SWAP1 PUSH2 0xAE85 DUP3 PUSH1 0x80 SHR PUSH2 0xBA85 JUMP JUMPDEST SWAP1 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH0 SWAP4 AND DUP1 PUSH2 0xAEAD JUMPI POP POP PUSH1 0x2 SWAP2 PUSH2 0x9145 SWAP2 PUSH2 0x90CA JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP4 POP SWAP1 PUSH1 0x24 PUSH1 0x20 SWAP3 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP3 PUSH32 0xA28A47700000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x91AA PUSH2 0x9145 SWAP3 PUSH1 0x2 SWAP5 PUSH0 SWAP2 PUSH2 0x91B3 JUMPI POP PUSH2 0xBA85 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 DUP4 SUB SWAP3 DUP4 GT PUSH2 0x465D JUMPI DUP2 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 DUP4 ADD DUP1 SWAP4 GT PUSH2 0x465D JUMPI PUSH2 0x6EB SWAP4 PUSH2 0xC26A JUMP JUMPDEST PUSH32 0x0 GT PUSH2 0xAF7A JUMPI JUMP JUMPDEST PUSH32 0x1ED4D11800000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 DUP6 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 DUP4 ADD DUP1 SWAP4 GT PUSH2 0x465D JUMPI DUP2 AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SLOAD SWAP3 DUP4 SUB SWAP3 DUP4 GT PUSH2 0x465D JUMPI PUSH2 0x6EB SWAP4 PUSH2 0xC26A JUMP JUMPDEST SWAP2 SWAP5 SWAP3 SWAP1 SWAP5 PUSH0 SWAP6 PUSH0 SWAP6 DUP2 PUSH2 0xAFFC JUMPI POP POP POP POP POP JUMP JUMPDEST DUP5 SWAP8 POP PUSH2 0x725B PUSH2 0xB015 DUP3 PUSH1 0xC0 PUSH2 0xB021 SWAP7 SWAP8 SWAP9 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP2 PUSH1 0xA0 DUP11 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST SWAP5 MLOAD PUSH1 0x1 DUP2 PUSH1 0x3 SHR AND ISZERO PUSH2 0xB037 JUMPI JUMPDEST DUP1 DUP1 PUSH2 0x722E JUMP JUMPDEST PUSH3 0xFFFFFF SWAP2 SWAP3 SWAP5 POP PUSH1 0x2A SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x465D JUMPI PUSH2 0xB06D PUSH8 0xDE0B6B3A7640000 SWAP2 DUP7 PUSH2 0x6063 JUMP JUMPDEST DIV SWAP3 DUP5 DUP5 GT PUSH2 0xB0E3 JUMPI DUP1 PUSH2 0x7B67 PUSH2 0xB0C2 PUSH2 0xB09F PUSH2 0xB0DA SWAP5 PUSH2 0x7B67 DUP8 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH2 0xB0BC DUP9 PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH2 0x6C6A JUMP JUMPDEST SWAP1 PUSH2 0xA829 JUMP JUMPDEST SWAP4 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x6 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH0 DUP1 DUP1 PUSH2 0xB030 JUMP JUMPDEST PUSH32 0x4C69AC5D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 PUSH0 JUMPDEST DUP3 MLOAD DUP2 LT ISZERO PUSH2 0xB13C JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP1 PUSH2 0xB12A DUP4 DUP7 PUSH2 0x5818 JUMP JUMPDEST MLOAD AND SWAP1 DUP4 AND EQ PUSH2 0x9753 JUMPI PUSH1 0x1 ADD PUSH2 0xB10E JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 PUSH32 0xDDEF98D700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 TSTORE JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 DUP1 DUP3 DIV MUL DUP2 SUB PUSH2 0xB19D JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x465D JUMPI SWAP1 JUMP JUMPDEST PUSH1 0x5 SHR PUSH1 0x1 AND ISZERO PUSH2 0xB1B8 JUMPI JUMP JUMPDEST PUSH32 0x4876C0BC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x4 SHR PUSH1 0x1 AND PUSH2 0xB1EC JUMPI JUMP JUMPDEST PUSH32 0xD4F5779C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 MLOAD SWAP1 DUP2 SWAP1 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0xB256 JUMPI POP POP DUP2 LT ISZERO PUSH2 0xB22E JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x7E46BDDC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0xB260 DUP2 DUP4 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0xB26E JUMPI JUMPDEST PUSH1 0x1 ADD PUSH2 0xB21B JUMP JUMPDEST SWAP3 DUP3 SUB PUSH2 0xB27B JUMPI DUP3 PUSH2 0xB266 JUMP JUMPDEST PUSH32 0x6B8C3BE500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH3 0xFFFFFF SWAP1 PUSH1 0x12 SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x465D JUMPI SWAP1 JUMP JUMPDEST PUSH2 0xB2DE PUSH1 0x40 SWAP3 SWAP6 SWAP5 SWAP4 SWAP6 PUSH1 0x60 DUP4 MSTORE PUSH1 0x60 DUP4 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP5 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 SWAP5 SWAP2 PUSH1 0x20 PUSH2 0xB34E PUSH2 0xB302 DUP7 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP5 PUSH2 0x6C6A JUMP JUMPDEST SWAP5 PUSH2 0xB30D DUP8 DUP8 PUSH2 0xC008 JUMP JUMPDEST PUSH2 0xB317 DUP2 DUP4 PUSH2 0xC471 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP5 DUP6 DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x16A0B3E000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP14 DUP11 PUSH1 0x4 DUP6 ADD PUSH2 0xB2C6 JUMP JUMPDEST SUB SWAP3 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0xB3D9 SWAP6 PUSH2 0x9A8E PUSH2 0xB3AD DUP6 PUSH2 0xB3C3 SWAP5 PUSH2 0xB3CC SWAP10 DUP13 SWAP10 DUP11 PUSH2 0xB3D3 SWAP10 PUSH0 SWAP5 PUSH2 0xB3DC JUMPI JUMPDEST POP SWAP1 PUSH2 0xB3A1 PUSH2 0xB39A PUSH2 0xB393 PUSH2 0xB3A8 SWAP5 PUSH2 0x8637 SWAP8 SWAP9 PUSH2 0x5818 JUMP JUMPDEST MLOAD DUP8 PUSH2 0x57A4 JUMP JUMPDEST SWAP13 DUP13 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x6063 JUMP JUMPDEST PUSH2 0x91D2 JUMP JUMPDEST SWAP2 PUSH8 0xDE0B6B3A7640000 DUP2 DUP2 SUB SWAP2 LT MUL DUP3 PUSH2 0xC008 JUMP JUMPDEST SWAP4 DUP5 SWAP3 MLOAD PUSH2 0x57E7 JUMP JUMPDEST SWAP6 DUP7 PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH2 0x6C6A JUMP JUMPDEST SWAP2 JUMP JUMPDEST PUSH2 0x8637 SWAP5 POP PUSH2 0xB39A PUSH2 0xB393 PUSH2 0xB3A8 SWAP5 SWAP4 PUSH2 0xB407 PUSH2 0xB3A1 SWAP5 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP8 POP SWAP4 SWAP5 POP POP POP PUSH2 0xB37A JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP1 DUP4 MLOAD PUSH2 0xB424 DUP5 MLOAD DUP3 PUSH2 0x80D5 JUMP JUMPDEST PUSH1 0x5 SHL SWAP4 ADD SWAP2 ADD MCOPY JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x20 PUSH2 0xB445 PUSH0 SWAP3 PUSH1 0x40 DUP7 MSTORE PUSH1 0x40 DUP7 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP4 ADD MSTORE JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x20 PUSH2 0xB445 PUSH1 0x1 SWAP3 PUSH1 0x40 DUP7 MSTORE PUSH1 0x40 DUP7 ADD SWAP1 PUSH2 0x1085 JUMP JUMPDEST SWAP3 SWAP2 SWAP1 SWAP4 DUP4 MLOAD PUSH2 0xB471 DUP2 PUSH2 0x57E7 JUMP JUMPDEST SWAP2 PUSH2 0xB47B DUP3 PUSH2 0x57E7 JUMP JUMPDEST SWAP7 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0xB677 JUMPI POP POP PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND SWAP2 PUSH1 0x40 MLOAD SWAP6 PUSH32 0x984DE9E800000000000000000000000000000000000000000000000000000000 SWAP3 DUP4 DUP9 MSTORE PUSH1 0x20 SWAP9 DUP10 DUP10 DUP1 PUSH2 0xB4CE DUP5 PUSH1 0x4 DUP4 ADD PUSH2 0xB42E JUMP JUMPDEST SUB DUP2 DUP10 GAS STATICCALL SWAP9 DUP10 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP10 PUSH2 0xB658 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD DUP6 DUP2 MSTORE DUP11 DUP2 DUP1 PUSH2 0xB4F8 DUP12 PUSH1 0x4 DUP4 ADD PUSH2 0xB44A JUMP JUMPDEST SUB DUP2 DUP11 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x7CB JUMPI DUP11 PUSH2 0xB3A8 PUSH2 0xB533 SWAP4 PUSH2 0xB52C SWAP4 DUP16 PUSH0 SWAP3 PUSH2 0xB63B JUMPI JUMPDEST SWAP12 SWAP10 SWAP14 SWAP13 SWAP11 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 POP PUSH2 0x6046 JUMP JUMPDEST DUP1 SWAP4 PUSH2 0xC471 JUMP JUMPDEST PUSH0 JUMPDEST DUP10 DUP2 LT PUSH2 0xB5A2 JUMPI POP POP POP POP PUSH2 0xB559 SWAP6 POP PUSH1 0x40 MLOAD DUP1 SWAP7 DUP2 SWAP5 DUP3 SWAP4 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0xB44A JUMP JUMPDEST SUB SWAP2 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x7CB JUMPI DUP4 PUSH2 0xB3A8 SWAP4 PUSH2 0xB57F SWAP3 PUSH2 0xB3D9 SWAP8 PUSH0 SWAP3 PUSH2 0xB585 JUMPI JUMPDEST POP POP PUSH2 0x57A4 JUMP JUMPDEST SWAP1 PUSH2 0x6063 JUMP JUMPDEST PUSH2 0xB59B SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 DUP1 PUSH2 0xB578 JUMP JUMPDEST DUP7 SWAP9 SWAP10 SWAP6 SWAP8 POP DUP4 DUP14 DUP4 SWAP5 SWAP6 SWAP7 SWAP9 DUP4 PUSH2 0xB5C6 PUSH2 0xB5BF DUP3 PUSH1 0x1 SWAP9 PUSH2 0x5818 JUMP JUMPDEST MLOAD DUP10 PUSH2 0xC45E JUMP JUMPDEST DUP1 PUSH2 0xB5D1 DUP4 DUP6 PUSH2 0x5818 JUMP JUMPDEST MLOAD GT PUSH2 0xB5ED JUMPI JUMPDEST POP POP POP POP POP ADD SWAP1 DUP11 SWAP7 SWAP5 SWAP9 SWAP8 SWAP6 SWAP4 SWAP3 SWAP2 PUSH2 0xB535 JUMP JUMPDEST DUP2 DUP4 PUSH2 0xB60E PUSH2 0xB626 SWAP8 PUSH2 0xB618 SWAP5 PUSH2 0xB607 DUP6 PUSH2 0xB61F SWAP10 PUSH2 0x5818 JUMP JUMPDEST MLOAD SUB PUSH2 0xB824 JUMP JUMPDEST PUSH2 0x74BA DUP4 DUP9 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP3 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x57A4 JUMP JUMPDEST PUSH2 0xB630 DUP3 DUP12 PUSH2 0x5818 JUMP JUMPDEST MSTORE DUP5 DUP14 DUP11 DUP4 PUSH0 PUSH2 0xB5D8 JUMP JUMPDEST PUSH2 0xB651 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 DUP16 PUSH2 0xB518 JUMP JUMPDEST PUSH2 0xB670 SWAP2 SWAP10 POP DUP11 RETURNDATASIZE DUP13 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP8 PUSH0 PUSH2 0xB4E1 JUMP JUMPDEST DUP1 PUSH2 0xB6A1 PUSH2 0xB69C PUSH2 0xB68A PUSH1 0x1 SWAP5 DUP13 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0xB695 DUP5 DUP8 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x6C6A JUMP JUMPDEST PUSH2 0x5796 JUMP JUMPDEST PUSH2 0xB6AB DUP3 DUP9 PUSH2 0x5818 JUMP JUMPDEST MSTORE ADD PUSH2 0xB47E JUMP JUMPDEST PUSH1 0x7 SHR PUSH1 0x1 AND ISZERO PUSH2 0xB6BF JUMPI JUMP JUMPDEST PUSH32 0xEFE0265D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP3 SWAP2 PUSH2 0xB6F3 DUP5 MLOAD PUSH2 0x57E7 JUMP JUMPDEST SWAP4 PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0xB728 JUMPI DUP1 PUSH2 0xB717 DUP6 DUP6 PUSH2 0xB711 PUSH1 0x1 SWAP6 DUP8 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0xC061 JUMP JUMPDEST PUSH2 0xB721 DUP3 DUP10 PUSH2 0x5818 JUMP JUMPDEST MSTORE ADD PUSH2 0xB6F6 JUMP JUMPDEST POP POP POP POP JUMP JUMPDEST SWAP1 PUSH2 0xB23 SWAP3 PUSH2 0xB73C SWAP2 PUSH2 0x6063 JUMP JUMPDEST SWAP1 PUSH2 0xC008 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x80 PUSH8 0xDE0B6B3A7640000 PUSH2 0xB786 PUSH2 0x16E8 SWAP5 DUP1 PUSH2 0xB765 DUP7 PUSH1 0x60 DUP11 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH2 0x6ABF PUSH2 0xB777 DUP7 PUSH1 0xC0 DUP11 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x6AB8 DUP8 PUSH1 0xA0 DUP12 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST DIV SWAP4 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST SWAP2 SWAP1 PUSH1 0x80 PUSH2 0xB7CA PUSH2 0x16E8 SWAP4 DUP1 PUSH2 0xB7A9 DUP6 PUSH1 0x60 DUP10 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH2 0x6B04 PUSH2 0xB7BB DUP6 PUSH1 0xC0 DUP10 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x6AB8 DUP7 PUSH1 0xA0 DUP11 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST SWAP4 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST SWAP3 PUSH2 0xB7CA PUSH2 0x16E8 SWAP4 PUSH1 0x80 SWAP3 DUP2 PUSH2 0xB7EC DUP7 PUSH1 0x60 DUP11 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH2 0xB7F6 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0xB81C JUMPI PUSH1 0x2 SWAP1 JUMPDEST PUSH2 0xB80C DUP6 PUSH1 0xC0 DUP10 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x44AD DUP7 PUSH1 0xA0 DUP11 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH2 0xB7FE JUMP JUMPDEST SWAP1 PUSH2 0xB82E SWAP2 PUSH2 0x6063 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST SWAP2 PUSH2 0xB850 SWAP2 PUSH2 0x6063 JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x465D JUMPI DUP2 ISZERO PUSH2 0x91DC JUMPI DIV SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x18 SHR PUSH2 0x922C JUMPI PUSH1 0x2A SHL SWAP1 PUSH3 0xFFFFFF PUSH1 0x2A SHL NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x100 DUP1 DUP5 LT ISZERO PUSH2 0x726D JUMPI DUP4 DUP2 SUB SWAP1 DUP2 GT PUSH2 0x465D JUMPI DUP1 PUSH1 0xFF LT PUSH0 EQ PUSH2 0xB8D1 JUMPI POP PUSH1 0xFF JUMPDEST PUSH1 0x18 GT PUSH2 0x726D JUMPI DUP1 PUSH1 0x18 SHR PUSH2 0x922C JUMPI PUSH3 0xFFFFFF SWAP1 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 JUMP JUMPDEST PUSH2 0xB8B3 JUMP JUMPDEST SWAP1 PUSH2 0x6EB PUSH2 0xB8EA SWAP3 PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH2 0x5859 JUMP JUMPDEST SUB DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP1 PUSH2 0xB8FB DUP3 PUSH2 0x942 JUMP JUMPDEST PUSH2 0xB908 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x88F JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH1 0x1F NOT PUSH2 0xB918 DUP3 SWAP5 PUSH2 0x942 JUMP JUMPDEST ADD SWAP1 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0xB928 JUMPI POP POP POP JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH2 0xB933 PUSH2 0x5B3F JUMP JUMPDEST DUP3 DUP3 DUP6 ADD ADD MSTORE ADD PUSH2 0xB91C JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD PUSH2 0xB94C DUP2 PUSH2 0x822 JUMP JUMPDEST PUSH1 0x40 PUSH1 0xFF DUP3 SWAP5 SLOAD DUP2 DUP2 AND PUSH2 0xB95F DUP2 PUSH2 0x1015 JUMP JUMPDEST DUP5 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 PUSH1 0x8 SHR AND PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0xA8 SHR AND ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD DUP1 MLOAD MLOAD SWAP4 PUSH0 JUMPDEST DUP6 DUP2 LT PUSH2 0xB997 JUMPI POP POP POP POP POP POP JUMP JUMPDEST DUP1 PUSH2 0xB9AB PUSH2 0x29BF PUSH1 0x1 SWAP4 PUSH1 0x20 DUP9 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST PUSH2 0xB9D6 PUSH2 0xB9C0 DUP4 DUP10 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD PUSH16 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH2 0xB9E1 DUP4 DUP8 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD DUP2 GT PUSH2 0xBA21 JUMPI JUMPDEST POP POP PUSH2 0xBA08 PUSH2 0xB9F9 DUP3 DUP7 MLOAD PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x1ADB DUP4 PUSH1 0x80 DUP10 ADD MLOAD PUSH2 0x5818 JUMP JUMPDEST PUSH2 0xBA1A DUP3 DUP9 SWAP1 PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE ADD PUSH2 0xB988 JUMP JUMPDEST PUSH2 0xBA65 PUSH2 0xBA7D SWAP2 PUSH2 0xBA5F PUSH2 0xBA56 PUSH2 0xBA49 DUP7 DUP11 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP3 PUSH2 0xB61F DUP9 DUP13 MLOAD PUSH2 0x5818 JUMP JUMPDEST DUP3 PUSH1 0x80 SHR PUSH2 0x6C6A JUMP JUMPDEST SWAP1 PUSH2 0xAD99 JUMP JUMPDEST SWAP2 DUP6 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH0 DUP1 PUSH2 0xB9E9 JUMP JUMPDEST PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xBAAF JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x24775E0600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP2 DUP4 DUP2 AND DUP5 DUP5 AND SUB PUSH2 0xBAF8 JUMPI POP POP POP POP PUSH0 NOT SWAP1 JUMP JUMPDEST PUSH2 0xBB22 SWAP4 PUSH2 0x7B67 SWAP3 AND PUSH0 MSTORE PUSH1 0x10 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SLOAD SWAP1 JUMP JUMPDEST PUSH3 0xF4240 DUP2 LT PUSH2 0xBB33 JUMPI POP JUMP JUMPDEST PUSH32 0xD38D20FC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 EQ DUP1 ISZERO SWAP3 SWAP2 SWAP1 PUSH2 0xBB72 JUMPI JUMPDEST POP POP PUSH2 0x80DC JUMPI JUMP JUMPDEST EQ ISZERO SWAP1 POP PUSH0 DUP1 PUSH2 0xBB6A JUMP JUMPDEST DUP1 MLOAD PUSH2 0xBB88 DUP2 PUSH2 0x1015 JUMP JUMPDEST PUSH2 0xBB91 DUP2 PUSH2 0x1015 JUMP JUMPDEST DUP1 PUSH2 0xBBA4 JUMPI POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP JUMPDEST DUP1 PUSH2 0xBBB0 PUSH1 0x1 SWAP3 PUSH2 0x1015 JUMP JUMPDEST SUB PUSH2 0xBC25 JUMPI PUSH1 0x20 PUSH2 0xBBCF PUSH2 0x213F DUP3 PUSH1 0x4 SWAP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0x679AEFCE00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP2 PUSH2 0xBC0C JUMPI POP SWAP1 JUMP JUMPDEST PUSH2 0xB23 SWAP2 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH32 0xDF45063200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x6 SHR PUSH1 0x1 AND ISZERO PUSH2 0xBC5A JUMPI JUMP JUMPDEST PUSH32 0xCF0A95C000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 SWAP5 SWAP3 SWAP2 SWAP3 DUP2 MLOAD SWAP5 PUSH2 0xBC93 DUP7 PUSH2 0x57E7 JUMP JUMPDEST SWAP5 PUSH0 JUMPDEST DUP8 DUP2 LT PUSH2 0xBE63 JUMPI POP PUSH2 0xBCAC SWAP1 PUSH2 0x884D DUP10 DUP9 PUSH2 0x5818 JUMP JUMPDEST PUSH2 0xBCB6 DUP9 DUP8 PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH1 0x40 MLOAD SWAP5 PUSH32 0x984DE9E800000000000000000000000000000000000000000000000000000000 SWAP3 DUP4 DUP8 MSTORE PUSH1 0x20 DUP8 DUP1 PUSH2 0xBCF1 DUP9 PUSH1 0x4 DUP4 ADD PUSH2 0xB42E JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP8 PUSH2 0xBE42 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP5 DUP5 DUP7 MSTORE PUSH1 0x20 DUP7 DUP1 PUSH2 0xBD26 DUP7 PUSH1 0x4 DUP4 ADD PUSH2 0xB42E JUMP JUMPDEST SUB DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND GAS STATICCALL SWAP4 DUP5 ISZERO PUSH2 0x7CB JUMPI PUSH2 0x9A8E PUSH2 0xB3AD DUP13 PUSH2 0xB61F PUSH2 0xBD81 PUSH2 0xBD88 SWAP7 PUSH2 0xBD7A DUP16 PUSH2 0xBD6A PUSH2 0xBDBE SWAP16 SWAP2 PUSH1 0x20 SWAP15 DUP9 SWAP4 PUSH0 SWAP2 PUSH2 0xBE23 JUMPI JUMPDEST POP PUSH2 0xC008 JUMP JUMPDEST SWAP3 PUSH2 0xBD75 DUP5 DUP14 PUSH2 0xC594 JUMP JUMPDEST PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0xB824 JUMP JUMPDEST SWAP2 DUP9 PUSH2 0x5818 JUMP JUMPDEST SWAP4 PUSH2 0xBD97 DUP6 PUSH2 0x884D DUP13 DUP7 PUSH2 0x5818 JUMP JUMPDEST PUSH2 0xBDA1 DUP12 DUP6 PUSH2 0x5818 JUMP JUMPDEST MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x40 MLOAD DUP1 SWAP8 DUP2 SWAP6 DUP3 SWAP5 DUP4 MSTORE PUSH1 0x4 DUP4 ADD PUSH2 0xB44A JUMP JUMPDEST SUB SWAP3 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x7CB JUMPI PUSH2 0xB3D9 SWAP6 PUSH2 0xBDF4 SWAP4 PUSH0 SWAP4 PUSH2 0xBDFA JUMPI JUMPDEST POP PUSH2 0xBDE6 PUSH2 0xBDED SWAP2 PUSH2 0x57E7 JUMP JUMPDEST SWAP8 DUP9 PUSH2 0x5818 JUMP JUMPDEST MSTORE DUP4 PUSH2 0x57A4 JUMP JUMPDEST SWAP1 PUSH2 0xC061 JUMP JUMPDEST PUSH2 0xBDED SWAP2 SWAP4 POP PUSH2 0xBE1B PUSH2 0xBDE6 SWAP2 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP4 SWAP2 POP PUSH2 0xBDD9 JUMP JUMPDEST PUSH1 0x20 PUSH2 0xBE3C SWAP3 POP RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST PUSH0 PUSH2 0xBD64 JUMP JUMPDEST PUSH2 0xBE5C SWAP2 SWAP8 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP6 PUSH0 PUSH2 0xBD0D JUMP JUMPDEST DUP1 PUSH2 0xBE79 PUSH2 0xBE73 PUSH1 0x1 SWAP4 DUP9 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x5796 JUMP JUMPDEST PUSH2 0xBE83 DUP3 DUP11 PUSH2 0x5818 JUMP JUMPDEST MSTORE ADD PUSH2 0xBC96 JUMP JUMPDEST SWAP1 SWAP5 SWAP2 DUP4 SUB SWAP2 DUP4 DUP4 GT PUSH2 0x465D JUMPI PUSH1 0x20 PUSH2 0xBEB9 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH2 0xBEAF DUP8 DUP8 PUSH2 0xC008 JUMP JUMPDEST PUSH2 0xB317 DUP2 DUP4 PUSH2 0xC594 JUMP JUMPDEST SUB SWAP3 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x7CB JUMPI PUSH2 0xB3D9 SWAP6 PUSH2 0x6B04 DUP9 PUSH2 0xB3C3 SWAP4 PUSH2 0xB3CC SWAP9 PUSH2 0xBF04 SWAP7 PUSH0 SWAP3 PUSH2 0xBF0A JUMPI JUMPDEST POP PUSH2 0xBEF2 DUP3 PUSH2 0x884D PUSH2 0x9A8E SWAP5 SWAP6 DUP12 PUSH2 0x5818 JUMP JUMPDEST SWAP9 PUSH2 0xBEFD DUP14 DUP11 PUSH2 0x5818 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0xC061 JUMP JUMPDEST MSTORE PUSH2 0x57A4 JUMP JUMPDEST PUSH2 0x9A8E SWAP3 POP PUSH2 0x884D SWAP4 PUSH2 0xBF2E PUSH2 0xBEF2 SWAP3 PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP4 POP SWAP4 POP PUSH2 0xBEDF JUMP JUMPDEST SWAP1 SWAP3 SWAP2 PUSH2 0xBF44 DUP3 MLOAD PUSH2 0x57E7 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0xBF81 JUMPI PUSH2 0xBF64 DUP4 PUSH2 0xBF5E DUP4 DUP6 PUSH2 0x5818 JUMP JUMPDEST MLOAD PUSH2 0x6063 JUMP JUMPDEST SWAP1 DUP7 ISZERO PUSH2 0x91DC JUMPI DUP7 PUSH1 0x1 SWAP3 DIV PUSH2 0xBF7A DUP3 DUP8 PUSH2 0x5818 JUMP JUMPDEST MSTORE ADD PUSH2 0xBF47 JUMP JUMPDEST POP POP POP SWAP2 POP JUMP JUMPDEST ORIGIN ISZERO DUP1 PUSH2 0xBF92 JUMPI SWAP1 JUMP JUMPDEST POP PUSH1 0x1 PUSH1 0x7 SLOAD AND ISZERO SWAP1 JUMP JUMPDEST SWAP1 ORIGIN PUSH2 0xBFE0 JUMPI PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xBFD1 SWAP3 AND PUSH0 MSTORE PUSH1 0xF PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST DUP1 SLOAD SWAP2 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x465D JUMPI SSTORE JUMP JUMPDEST PUSH32 0x67F84AB200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0xC039 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x465D JUMPI PUSH1 0x1 SWAP1 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP3 ISZERO PUSH2 0xC039 JUMPI PUSH1 0x1 SWAP2 PUSH2 0xC073 SWAP2 PUSH2 0x6063 JUMP JUMPDEST SWAP2 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH0 DUP2 SLT PUSH2 0xC08B JUMPI SWAP1 JUMP JUMPDEST PUSH32 0xA8CE443200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH0 PUSH1 0x44 DUP5 ADD MSTORE SWAP1 SWAP4 SWAP2 SWAP3 SWAP2 DUP4 PUSH1 0x64 DUP2 ADD JUMPDEST SUB SWAP2 PUSH2 0xC115 PUSH1 0x1F NOT SWAP4 DUP5 DUP2 ADD DUP8 MSTORE DUP7 PUSH2 0x88F JUMP JUMPDEST PUSH0 DUP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP7 AND SWAP3 DUP8 MLOAD SWAP1 DUP3 DUP6 GAS CALL SWAP1 PUSH2 0xC132 PUSH2 0xC21D JUMP JUMPDEST DUP3 PUSH2 0xC19C JUMPI JUMPDEST POP DUP2 PUSH2 0xC191 JUMPI JUMPDEST POP ISZERO PUSH2 0xC14C JUMPI POP POP POP POP POP JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP6 SWAP1 SWAP6 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x24 DUP6 ADD MSTORE PUSH0 PUSH1 0x44 DUP6 ADD MSTORE PUSH2 0xC187 SWAP4 PUSH2 0x4633 SWAP2 PUSH2 0xC181 SWAP1 DUP3 PUSH1 0x64 DUP2 ADD PUSH2 0x1218 JUMP JUMPDEST DUP3 PUSH2 0xC3EE JUMP JUMPDEST PUSH0 DUP1 DUP1 DUP1 DUP1 PUSH2 0x722E JUMP JUMPDEST SWAP1 POP EXTCODESIZE ISZERO ISZERO PUSH0 PUSH2 0xC13F JUMP JUMPDEST DUP1 MLOAD SWAP2 SWAP3 POP DUP2 ISZERO SWAP2 DUP3 ISZERO PUSH2 0xC1B4 JUMPI JUMPDEST POP POP SWAP1 PUSH0 PUSH2 0xC138 JUMP JUMPDEST PUSH2 0xC1C7 SWAP3 POP PUSH1 0x20 DUP1 SWAP2 DUP4 ADD ADD SWAP2 ADD PUSH2 0x54E3 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0xC1AB JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x95EA7B300000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD DUP2 DUP2 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND PUSH1 0x24 DUP5 ADD MSTORE PUSH1 0x44 DUP4 ADD SWAP6 SWAP1 SWAP6 MSTORE SWAP4 SWAP1 SWAP3 DUP4 PUSH1 0x64 DUP2 ADD PUSH2 0xC101 JUMP JUMPDEST RETURNDATASIZE ISZERO PUSH2 0xC247 JUMPI RETURNDATASIZE SWAP1 PUSH2 0xC22E DUP3 PUSH2 0xAB6 JUMP JUMPDEST SWAP2 PUSH2 0xC23C PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x88F JUMP JUMPDEST DUP3 MSTORE RETURNDATASIZE PUSH0 PUSH1 0x20 DUP5 ADD RETURNDATACOPY JUMP JUMPDEST PUSH1 0x60 SWAP1 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0xB23 SWAP4 PUSH1 0x20 DUP2 MLOAD SWAP2 ADD DUP3 DUP6 GAS CALL PUSH2 0xC264 PUSH2 0xC21D JUMP JUMPDEST SWAP2 PUSH2 0xC638 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x70A0823100000000000000000000000000000000000000000000000000000000 DUP1 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE PUSH1 0x20 SWAP6 SWAP4 SWAP5 SWAP1 SWAP3 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP2 DUP8 DUP4 PUSH1 0x24 DUP2 DUP8 DUP7 AND GAS STATICCALL SWAP3 DUP4 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP4 PUSH2 0xC3CF JUMPI JUMPDEST POP DUP1 DUP4 LT PUSH2 0xC38A JUMPI POP PUSH2 0xC2E4 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST SSTORE PUSH1 0x40 MLOAD SWAP2 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP4 AND SWAP1 DUP5 DUP2 PUSH1 0x24 DUP2 DUP6 GAS STATICCALL SWAP5 DUP6 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP6 PUSH2 0xC36B JUMPI JUMPDEST POP POP DUP2 DUP5 LT PUSH2 0xC330 JUMPI POP POP PUSH2 0x5F70 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH0 MSTORE PUSH1 0x8 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 SWAP1 JUMP JUMPDEST PUSH32 0x1149424D00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE POP PUSH1 0x44 MSTORE PUSH1 0x64 PUSH0 REVERT JUMPDEST PUSH2 0xC382 SWAP3 SWAP6 POP DUP1 RETURNDATASIZE LT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP3 PUSH0 DUP1 PUSH2 0xC30A JUMP JUMPDEST SWAP1 POP PUSH2 0x2420 SWAP3 DUP7 PUSH32 0x1C6A537500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND SWAP3 SWAP2 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH1 0x64 SWAP5 AND PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 MSTORE JUMP JUMPDEST PUSH2 0xC3E7 SWAP2 SWAP4 POP DUP9 RETURNDATASIZE DUP11 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP2 PUSH0 PUSH2 0xC2C0 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB PUSH2 0xC402 SWAP2 AND SWAP2 DUP3 PUSH2 0xC24C JUMP JUMPDEST DUP1 MLOAD SWAP1 DUP2 ISZERO ISZERO SWAP2 DUP3 PUSH2 0xC443 JUMPI JUMPDEST POP POP PUSH2 0xC418 JUMPI POP JUMP JUMPDEST PUSH32 0x5274AFE700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0xC456 SWAP3 POP PUSH1 0x20 DUP1 SWAP2 DUP4 ADD ADD SWAP2 ADD PUSH2 0x54E3 JUMP JUMPDEST ISZERO PUSH0 DUP1 PUSH2 0xC40F JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH2 0x6AC4 SWAP2 PUSH2 0x6063 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x4 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH32 0x273C1ADF00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP3 PUSH2 0xC4F4 JUMPI JUMPDEST POP DUP2 DUP2 GT PUSH2 0xC4C6 JUMPI POP POP JUMP JUMPDEST PUSH32 0x3E8960DC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0xC50E SWAP2 SWAP3 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0xC4BA JUMP JUMPDEST SWAP1 PUSH5 0xFFFFFFFFFF PUSH2 0xC525 DUP3 PUSH2 0x57E7 JUMP JUMPDEST SWAP3 PUSH1 0x5A SHR AND PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0xC539 JUMPI POP POP POP SWAP1 JUMP JUMPDEST PUSH1 0x5 DUP1 DUP3 MUL SWAP1 DUP3 DUP3 DIV EQ DUP3 ISZERO OR ISZERO PUSH2 0x465D JUMPI DUP3 PUSH1 0x1F SWAP2 SHR AND SWAP1 PUSH1 0x4D DUP3 GT PUSH2 0x465D JUMPI PUSH1 0x1 SWAP2 PUSH1 0xA EXP PUSH2 0xC56A DUP3 DUP8 PUSH2 0x5818 JUMP JUMPDEST MSTORE ADD PUSH2 0xC52C JUMP JUMPDEST PUSH3 0xFFFFFF SWAP1 PUSH1 0x42 SHR AND PUSH5 0x174876E800 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x465D JUMPI SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 PUSH1 0x4 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH32 0xB677FA5600000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x7CB JUMPI PUSH0 SWAP3 PUSH2 0xC617 JUMPI JUMPDEST POP DUP2 DUP2 LT PUSH2 0xC5E9 JUMPI POP POP JUMP JUMPDEST PUSH32 0xE31C95BE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0xC631 SWAP2 SWAP3 POP PUSH1 0x20 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x15E6 JUMPI PUSH2 0x15D8 DUP2 DUP4 PUSH2 0x88F JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0xC5DD JUMP JUMPDEST SWAP1 PUSH2 0xC675 JUMPI POP DUP1 MLOAD ISZERO PUSH2 0xC64D JUMPI DUP1 MLOAD SWAP1 PUSH1 0x20 ADD REVERT JUMPDEST PUSH32 0x1425EA4200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD ISZERO DUP1 PUSH2 0xC6BB JUMPI JUMPDEST PUSH2 0xC686 JUMPI POP SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 PUSH32 0x9996B31500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE AND PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP1 EXTCODESIZE ISZERO PUSH2 0xC67E JUMP JUMPDEST SWAP2 PUSH2 0x6ABF PUSH2 0x6AC4 SWAP3 PUSH8 0xDE0B6B3A7640000 SWAP5 PUSH2 0x6063 JUMP JUMPDEST PUSH2 0xB23 SWAP3 SWAP2 PUSH2 0x6B04 SWAP2 PUSH2 0x6063 JUMP JUMPDEST SWAP3 SWAP2 SWAP3 DUP1 PUSH1 0x1 EQ PUSH2 0xC735 JUMPI PUSH1 0x2 EQ PUSH2 0xC728 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x51 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0xB23 SWAP3 PUSH2 0x6B04 SWAP2 PUSH2 0x6063 JUMP JUMPDEST POP SWAP1 PUSH2 0x6ABF PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH2 0x6AC4 SWAP4 PUSH2 0x6063 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2D 0xB1 0xF9 0xD5 0x22 0xD1 LOG4 BASEFEE PUSH2 0x7EE TLOAD 0x2E 0x2B 0xDA PUSH18 0x10CDF105C8780AE3FDBE21FFFDFD90666473 PUSH16 0x6C634300081B00330000000000000000 ","sourceMap":"2335:29970:94:-:0;;;;;;;;;-1:-1:-1;2335:29970:94;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;-1:-1:-1;;;;;2335:29970:94;;;;;:::o;:::-;;;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;;2335:29970:94;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;25977:26;;2335:29970;;;:::i;:::-;;;25977:26;-1:-1:-1;;;;;2335:29970:94;;25977:26;;;;;;2335:29970;25977:26;;2335:29970;25977:26;;2335:29970;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;25977:26;;2335:29970;;25977:26;;;;;;;;2335:29970;25977:26;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;2335:29970;25977:26;;;;;;;:::i;2335:29970::-;;;;;-1:-1:-1;;2335:29970:94;;;;;12975:4;2335:29970;;;;;:::i;:::-;12975:4;:::i;2335:29970::-;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;5554:461;2335:29970;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;5554:461;:::i;2335:29970::-;;-1:-1:-1;2335:29970:94;;;:::o;:::-;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;2335:29970:94;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;2335:29970:94;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;28907:65;2335:29970;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;28907:65;:::i;:::-;2335:29970;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;-1:-1:-1;;2335:29970:94;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;2335:29970:94;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;2335:29970:94;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2335:29970:94;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2335:29970:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;;;;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;;;;;;;;-1:-1:-1;2335:29970:94;;;;;;;;;;;:::o;:::-;;;;;;;23219:91;2335:29970;;;:::i;:::-;;;;;;;:::i;:::-;;;;;23017:18;23109:99;23017:18;;;;;;;;:::i;:::-;;;;-1:-1:-1;;23017:18:94;;;;;;;;:::i;:::-;2335:29970;23007:29;;23109:99;;;;:::i;:::-;2335:29970;;;;;;;23257:18;2335:29970;;23257:18;;;23017;23257;;;;;:::i;:::-;;;;;;;;;:::i;:::-;2335:29970;23247:29;;23227:49;23219:91;:::i;:::-;2335:29970;;;;;;;;;;;;;:::i;:::-;;;;;23017:18;2335:29970;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;;;17033:100;2335:29970;;;;;;;;:::i;:::-;;;;;;;;;17033:100;;:::i;2335:29970::-;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;6490:63:94;2335:29970;;;;-1:-1:-1;2335:29970:94;-1:-1:-1;2335:29970:94;;;-1:-1:-1;2335:29970:94;;;;;;;;2539:209:49;;;;;;;11205:402:76;;6490:63:94;2335:29970;-1:-1:-1;2335:29970:94;-1:-1:-1;2335:29970:94;;;-1:-1:-1;2335:29970:94;;-1:-1:-1;2335:29970:94;;;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27366:67:94;2335:29970;;;;27366:67;:::i;:::-;2335:29970;;-1:-1:-1;2335:29970:94;27329:20;2335:29970;;;-1:-1:-1;2335:29970:94;;-1:-1:-1;2335:29970:94;;;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;:::i;:::-;;;;;;;;;;17281:8;2335:29970;;;;;;:::i;:::-;17281:8;;:::i;2335:29970::-;-1:-1:-1;;2335:29970:94;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;13352:24:70;2335:29970:94;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;13352:24:70;:::i;:::-;2335:29970:94;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;8470:156:49;6980:15:94;2335:29970;8470:156:49;568:1:80;8470:156:49;;;;;;6980:15:94;2335:29970;-1:-1:-1;2335:29970:94;;;;;;;;;:::o;:::-;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;9342:26:73;2335:29970:94;;;;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;:::i;:::-;;;1083:103:53;;:::i;:::-;2707:73:70;;:::i;:::-;-1:-1:-1;;;;;2335:29970:94;;-1:-1:-1;2335:29970:94;;;7242:11:68;2335:29970:94;;;;;;;;;;;;;7296:30:68;;7320:4;2335:29970:94;7296:30:68;;2335:29970:94;;;;;;;;;;7296:30:68;;;;;;;2335:29970:94;7296:30:68;7391:32;7296:30;-1:-1:-1;7296:30:68;;;2335:29970:94;7336:18:68;;;;-1:-1:-1;;;;;2335:29970:94;;;7242:11:68;2335:29970:94;;;;;;;7336:18:68;2335:29970:94;7391:32:68;:::i;:::-;7656:19;;;;7652:532;;2335:29970:94;8215:6:68;;;;;:::i;:::-;1148:1:53;;:::i;:::-;2335:29970:94;;;;;;;;;;;;;7652:532:68;;-1:-1:-1;8215:6:68;7652:532;;7296:30;;;;2335:29970:94;7296:30:68;2335:29970:94;7296:30:68;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;2335:29970:94;;;;;-1:-1:-1;;2335:29970:94;;;;;54104:6:68;2335:29970:94;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;:::i;:::-;54055:6:68;2335:29970:94;;54028:10:68;;;;54055:6;:::i;:::-;54028:10;54104:6;:::i;:::-;2335:29970:94;;;54128:4:68;2335:29970:94;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;:::o;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;21772:54;2335:29970;;;:::i;:::-;;;;:::i;:::-;;21772:54;:::i;:::-;2335:29970;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;2335:29970:94;;;;;;15152:60:70;;2335:29970:94;15152:60:70;;;2335:29970:94;15152:60:70;;;;;;;;;-1:-1:-1;15152:60:70;;;2335:29970:94;15132:80:70;;;15128:143;;2335:29970:94;;;15305:60:70;;;;2335:29970:94;15305:60:70;;;;;;;;;-1:-1:-1;15305:60:70;;;2335:29970:94;15285:80:70;;;;15281:144;;15564:21;;15540;15564:67;15647:49;15564:21;;15647:49;15564:21;-1:-1:-1;;;;;2335:29970:94;-1:-1:-1;2335:29970:94;-1:-1:-1;2335:29970:94;;;-1:-1:-1;2335:29970:94;;;15564:21:70;2335:29970:94;15564:67:70;:::i;:::-;15540:21;-1:-1:-1;;;;;2335:29970:94;-1:-1:-1;2335:29970:94;-1:-1:-1;2335:29970:94;;;-1:-1:-1;2335:29970:94;;;15540:21:70;2335:29970:94;;;;;;;;;;;;;;15647:49:70;;;;2335:29970:94;15281:144:70;15388:26;-1:-1:-1;15388:26:70;2335:29970:94;-1:-1:-1;15388:26:70;15305:60;;;;;;-1:-1:-1;15305:60:70;;;;;;:::i;:::-;;;;;15128:143;15235:25;-1:-1:-1;15235:25:70;2335:29970:94;-1:-1:-1;15235:25:70;15152:60;;;;;;;;;;;;;;:::i;:::-;;;;2335:29970:94;;;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;2335:29970:94;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;:::i;:::-;;-1:-1:-1;2335:29970:94;17490:18;2335:29970;;;;-1:-1:-1;2335:29970:94;;17545:11;2335:29970;;;-1:-1:-1;2335:29970:94;;17593:24;;;;:::i;:::-;17633:13;-1:-1:-1;17648:13:94;;;;;;2335:29970;;;;;;;:::i;17663:3::-;2335:29970;;;-1:-1:-1;2335:29970:94;;;;1237:14:44;2335:29970:94;-1:-1:-1;2335:29970:94;;1460:31:44;17682:53:94;;;;:::i;:::-;2335:29970;;17633:13;;2335:29970;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;12512:24;2335:29970;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;2335:29970:94;;-1:-1:-1;2335:29970:94;12198:11;2335:29970;;;;-1:-1:-1;2335:29970:94;;;;;;;;:::i;:::-;;;;:::i;:::-;12226:85;2335:29970;;;;12234:39;12226:85;:::i;:::-;12321:94;2335:29970;;;;12329:48;12321:94;:::i;:::-;-1:-1:-1;;;;;2335:29970:94;;;12512:18;2335:29970;;;;;;;12512:24;12551:13;-1:-1:-1;12585:3:94;2335:29970;;12566:17;;;;;12662:18;12627:83;12662:18;2335:29970;12662:18;;;:::i;:::-;2335:29970;12682:27;;;;:::i;:::-;2335:29970;12627:83;;:::i;:::-;12604:20;;;2335:29970;;;;;;;;;;12604:20;2335:29970;;12551:13;;2335:29970;;;;3660:6;2335:29970;;;:::i;:::-;3660:6;;:::i;2335:29970::-;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;9520:18:73;2335:29970:94;;;;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;5562:81:70;;;:::i;:::-;4676:32:94;;:::i;:::-;2335:29970;4767:4;2335:29970;;-1:-1:-1;;;;;4782:16:94;4854:24;4782:16;;2335:29970;4854:24;;:::i;:::-;4782:214;;;;;;-1:-1:-1;2335:29970:94;;;;;;;4782:214;;;;;;;2335:29970;4782:214;;2335:29970;;4782:214;;2335:29970;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4782:214;;;;;;;;;;2335:29970;4782:214;;;;;;:::i;:::-;;;:::i;2335:29970::-;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;;;;;;;;;;:::i;:::-;2707:73:70;;:::i;:::-;8882:4;-1:-1:-1;;;;;2335:29970:94;;;8882:4:70;:::i;:::-;37891:11:68;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;;37891:11:68;:::i;:::-;38389:75;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;;38389:75:68;:::i;:::-;40513:103;2335:29970:94;38510:15:68;;;2335:29970:94;38534:27:68;2335:29970:94;38534:20:68;;;;;2335:29970:94;38534:27:68;;:::i;:::-;38895:20;;38965:30;;;;38895:143;38965:30;;39009:19;;;;;;;38895:143;;:::i;:::-;2335:29970:94;39132:57:68;2335:29970:94;;7916:84:49;5866:205:74;958:1:75;7916:84:49;;5866:205:74;;39132:57:68;39128:897;;2335:29970:94;40513:103:68;;;;;;:::i;:::-;40453:163;;;;;;40818:56;2335:29970:94;;2464:1:75;6405:203:74;958:1:75;7916:84:49;;6405:203:74;;40818:56:68;40814:495;;2335:29970:94;;;;;;;;;;:::i;40814:495:68:-;2335:29970:94;;;;;;41030:268:68;2335:29970:94;;;40974:28:68;;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;;-1:-1:-1;;;;;2335:29970:94;;;39384:15:68;2335:29970:94;;;;;;;40974:28:68;2335:29970:94;-1:-1:-1;;;;;2335:29970:94;;;40974:28:68;2335:29970:94;;;41100:10:68;41030:268;;:::i;:::-;40814:495;;;;;;;39128:897;39384:28;39859:155;2335:29970:94;;;39384:28:68;;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;39384:28:68;39306:10;;39384:28;;:::i;:::-;39717:19;39684:31;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;39684:31:68;39717:19;;:::i;:::-;39859:20;39933:30;;39981:19;;39859:155;;:::i;:::-;39128:897;;;;;2335:29970:94;;;;;;;;;;;;;;;-1:-1:-1;2335:29970:94;;;;;;;;;;;:::o;:::-;;;;;;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;2335:29970:94;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;19659:54;;;;;:::i;:::-;1083:103:53;;;:::i;:::-;2335:29970:94;;:::i;:::-;;;;;;;:::i;:::-;;;;:::i;:::-;19191:41:68;19187:325;;2335:29970:94;19545:34:68;;;;2335:29970:94;;19545:34:68;:::i;:::-;19745:20;19735:54;19745:20;;;2335:29970:94;19735:38:68;:31;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;;-1:-1:-1;;;;;2335:29970:94;;;19735:38:68;2335:29970:94;;;19735:54:68;;;;;;2335:29970:94;19735:54:68;;2335:29970:94;19735:54:68;;;:::i;:::-;;;;;;;;;;-1:-1:-1;19735:54:68;;;2335:29970:94;19708:81:68;;19823:24;;;:::i;:::-;2335:29970:94;;;;;:::i;:::-;;;;:::i;:::-;20227:41:68;;20504:29;;;;2335:29970:94;;;20661:620:68;2335:29970:94;20726:30:68;;;21207:60;:39;20726:50;20757:18;;;2335:29970:94;;;20726:50:68;;:::i;:::-;2335:29970:94;21207:19:68;2335:29970:94;21207:19:68;;;2335:29970:94;;21207:39:68;;:::i;:::-;2335:29970:94;21207:60:68;:::i;:::-;20661:620;;;:::i;:::-;21327:30;2335:29970:94;21327:30:68;;2335:29970:94;21296:83:68;;;21413:24;2335:29970:94;21413:24:68;;2335:29970:94;21398:39:68;;;21394:134;;20223:2688;;;;;22995:23;;;;2335:29970:94;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;23020:11:68;;;;:::i;:::-;23056:24;;;2335:29970:94;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;23082:12:68;;;;:::i;:::-;2335:29970:94;;;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;-1:-1:-1;;;;;2335:29970:94;;;23379:215:68;;;;;:::i;:::-;23317:28;;;;;;23347;;2335:29970:94;;;;;;;23726:20:68;;;;;;;;:39;;;;:::i;:::-;2335:29970:94;23726:53:68;;;;:::i;:::-;2335:29970:94;;23726:84:68;;;:::i;:::-;23824:19;;;;:::i;:::-;23909:18;;2335:29970:94;;;23941:20:68;;;;:40;;;;:::i;:::-;2335:29970:94;23941:55:68;;;;:::i;:::-;24010:19;;;;:::i;:::-;2335:29970:94;;-1:-1:-1;;;;;2335:29970:94;;;;;12512:18;2335:29970;;;;;24358:20:68;;;2335:29970:94;;24358:39:68;;;:::i;:::-;2335:29970:94;24411:29:68;2335:29970:94;24411:29:68;;;;2335:29970:94;;24411:48:68;;;:::i;:::-;2335:29970:94;24310:159:68;;;:::i;:::-;2335:29970:94;;24276:31:68;;;2335:29970:94;;;;;;;;;;24276:31:68;2335:29970:94;24562:20:68;2335:29970:94;;24562:40:68;;;:::i;:::-;2335:29970:94;24616:29:68;;2335:29970:94;;24616:49:68;;;:::i;:::-;2335:29970:94;24514:161:68;;;:::i;:::-;2335:29970:94;;24479:32:68;;2335:29970:94;;;;;;;;;;24479:32:68;2335:29970:94;;;;;;24901:27:68;;;2335:29970:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;;;24723:257:68;;2335:29970:94;;24723:257:68;1148:1:53;;:::i;:::-;2335:29970:94;;;;;;;;:::i;21394:134:68:-;21464:49;-1:-1:-1;21464:49:68;2335:29970:94;;;;;;;21464:49:68;-1:-1:-1;21464:49:68;20223:2688;22171:27;;22285:61;22171:27;;;22120:150;22171:27;;;2335:29970:94;5832:87:50;;;;;;;;22120:150:68;;;:::i;:::-;2335:29970:94;;;;22285:61:68;:::i;:::-;22537:30;22474:182;22537:49;2335:29970:94;22537:30:68;;;2335:29970:94;;22537:49:68;;:::i;:::-;2335:29970:94;22604:38:68;2335:29970:94;22604:19:68;;;2335:29970:94;;22604:38:68;;:::i;:::-;2335:29970:94;22474:182:68;;;:::i;:::-;22723:30;2335:29970:94;22723:30:68;;2335:29970:94;22671:83:68;;22787:24;2335:29970:94;22787:24:68;;2335:29970:94;22773:38:68;;;22769:132;;20223:2688;;;;;;19735:54;;;;;;;;;;;;;;;:::i;:::-;;;;;19187:325;19347:34;;;19430:71;19347:69;2335:29970:94;;19388:27:68;;;2335:29970:94;19347:69:68;;:::i;:::-;2335:29970:94;;;;;19430:71:68;:::i;:::-;2335:29970:94;;19187:325:68;;2335:29970:94;;;;;-1:-1:-1;;2335:29970:94;;;;;;24901:56;2335:29970;;;;;:::i;:::-;-1:-1:-1;;;;;2335:29970:94;;-1:-1:-1;2335:29970:94;24850:20;2335:29970;;;-1:-1:-1;2335:29970:94;;24901:56;:::i;2335:29970::-;;-1:-1:-1;;2335:29970:94;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;24646:57;2335:29970;;;:::i;:::-;1083:103:53;;;:::i;:::-;24646:57:94;:::i;:::-;3051:52:55;;;;1640:5:53;551:66;3051:52:55;2335:29970:94;;;;;;-1:-1:-1;;2335:29970:94;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;:::i;:::-;;;-1:-1:-1;2335:29970:94;-1:-1:-1;2335:29970:94;;8875:55;2335:29970;;;-1:-1:-1;2335:29970:94;;8875:55;:::i;2335:29970::-;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;;;;;;;;;;:::i;:::-;2707:73:70;;:::i;:::-;2335:29970:94;10848:20:68;;-1:-1:-1;;;;;8882:4:70;2335:29970:94;;;;8882:4:70;:::i;:::-;10980:20:68;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;10980:20:68;11016:30;;;2335:29970:94;11016:35:68;11012:90;;11116:23;;;2335:29970:94;-1:-1:-1;;;;;2335:29970:94;11143:24:68;11116:51;2335:29970:94;11143:24:68;;;2335:29970:94;-1:-1:-1;;;;;2335:29970:94;;;11116:51:68;2335:29970:94;;11116:51:68;11112:110;;11694:84;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;11694:84:68;11817:41;;;;;:::i;:::-;11907:58;;;;;;:::i;:::-;2335:29970:94;;958:1:75;7916:84:49;;;11976:992:68;;2335:29970:94;;;19099:20:68;;2335:29970:94;958:1:75;7916:84:49;1966:1:75;7916:84:49;13433:346:68;;2335:29970:94;19099:20:68;;;;:::i;:::-;14060:185;;;;;;;2335:29970:94;14488:45:68;2335:29970:94;;2112:1:75;4435:180:74;958:1:75;7916:84:49;;4435:180:74;;14488:45:68;14484:507;;2335:29970:94;;;;;;;;;;:::i;:::-;;;;:::i;:::-;15005:41:68;;15062:28;2335:29970:94;15062:28:68;15001:158;11116:23;2335:29970:94;;;;;;;;;;;;;;;;;;;;;;;15001:158:68;15121:27;;2335:29970:94;15121:27:68;15001:158;;;14484:507;2335:29970:94;;;;14633:37:68;;2335:29970:94;14704:276:68;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;14633:37:68;2335:29970:94;;;14839:10:68;;14704:276;;:::i;:::-;14484:507;;;;;;;;13433:346;2335:29970:94;;-1:-1:-1;;;;;2335:29970:94;13540:228:68;11143:24;13672:27;;2335:29970:94;;;13717:37:68;;;-1:-1:-1;;;;;2335:29970:94;;;39384:15:68;2335:29970:94;;;;;;;13717:37:68;13540:228;;;:::i;:::-;2335:29970:94;;13433:346:68;;11976:992;12163:37;2335:29970:94;;;;-1:-1:-1;;;;;2335:29970:94;;;;12163:37:68;;;-1:-1:-1;;;;;2335:29970:94;;;39384:15:68;2335:29970:94;;;;;;;12163:37:68;;;:::i;:::-;12617:19;12575:40;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;12575:40:68;12617:19;;:::i;:::-;12802:65;;;;;:::i;:::-;11116:23;12770:29;;2335:29970:94;19099:20:68;12899:58;;;;;:::i;:::-;11976:992;;;;11112:110;11190:21;-1:-1:-1;11190:21:68;2335:29970:94;-1:-1:-1;11190:21:68;11012:90;11074:17;-1:-1:-1;11074:17:68;2335:29970:94;-1:-1:-1;11074:17:68;2335:29970:94;;;;;-1:-1:-1;;2335:29970:94;;;;;;;79740:16:68;79736:82;;2335:29970:94;79736:82:68;79795:11;;;:::i;2335:29970:94:-;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;:::i;:::-;1083:103:53;;:::i;:::-;-1:-1:-1;;;;;2335:29970:94;;27845:38;2335:29970;27845:38;;2335:29970;;27845:38;;2335:29970;-1:-1:-1;2335:29970:94;;;;;27860:4;2335:29970;27860:4;-1:-1:-1;27860:4:94;27845:38;;;;;;2335:29970;27845:38;-1:-1:-1;27845:38:94;;;2335:29970;1148:1:53;;;:::i;27845:38:94:-;;;;2335:29970;27845:38;2335:29970;27845:38;;;;;;;:::i;:::-;;;;2335:29970;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;5143:32;2335:29970;;5143:32;:::i;:::-;2335:29970;;;:::i;:::-;5237:13;-1:-1:-1;5271:3:94;2335:29970;;5252:17;;;;;5313:9;5290:32;5313:9;;2335:29970;5313:9;;;:::i;:::-;2335:29970;-1:-1:-1;;;;;2335:29970:94;;;5313:9;5290:14;;;;:::i;:::-;;2335:29970;-1:-1:-1;;;;;2335:29970:94;;;;5290:32;2335:29970;5237:13;;5252:17;;;;-1:-1:-1;;;;;5343:16:94;2335:29970;5499:32;;:::i;:::-;5343:198;;;;;;-1:-1:-1;2335:29970:94;;5343:198;2335:29970;;5343:198;;;;;;;2335:29970;5343:198;;2335:29970;5343:198;;;:::i;2335:29970::-;-1:-1:-1;;2335:29970:94;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;2335:29970:94;;;:::i;:::-;;;6122:15;2335:29970;6122:15;2335:29970;;;6122:15;2335:29970;;8470:156:49;2335:29970:94;;8470:156:49;;2335:29970:94;;6122:15;2335:29970;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;1237:14:44;20512:33:94;-1:-1:-1;;;;;2335:29970:94;;;:::i;:::-;;;-1:-1:-1;2335:29970:94;20512:20;2335:29970;;;-1:-1:-1;2335:29970:94;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;20512:33;2335:29970;1460:31:44;2335:29970:94;;;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;1083:103:53;;:::i;:::-;2335:29970:94;;;27671:55;2335:29970;27671:55;;2335:29970;;;;;:::i;:::-;;27671:55;;2335:29970;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;27671:55;2335:29970;;;;;;;;;;;;;27671:55;27686:4;2335:29970;27686:4;-1:-1:-1;27686:4:94;27671:55;;;;;;-1:-1:-1;;;;;27671:55:94;;;2335:29970;1148:1:53;2335:29970:94;1148:1:53;;;:::i;27671:55:94:-;;;2335:29970;27671:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;2335:29970;;;;;-1:-1:-1;;2335:29970:94;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;:::i;:::-;;-1:-1:-1;2335:29970:94;27151:18;2335:29970;;;;;-1:-1:-1;2335:29970:94;;-1:-1:-1;2335:29970:94;;;;;;;;-1:-1:-1;;2335:29970:94;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;:::i;:::-;;-1:-1:-1;2335:29970:94;17963:18;2335:29970;;;;-1:-1:-1;2335:29970:94;;18018:11;2335:29970;;;-1:-1:-1;2335:29970:94;;18079:24;;;;:::i;:::-;18119:13;-1:-1:-1;18134:13:94;;;;;;2335:29970;;;;;;;:::i;18149:3::-;2335:29970;;;-1:-1:-1;2335:29970:94;;;;18198:40;2335:29970;-1:-1:-1;2335:29970:94;;1616:3:44;2335:29970:94;1504:138:44;;18198:40:94;18168:70;;;;:::i;:::-;2335:29970;;18119:13;;2335:29970;;;;;-1:-1:-1;;2335:29970:94;;;;;3891:15:70;2335:29970:94;;;;;:::i;:::-;3891:15:70;2335:29970:94;;3891:15:70;:::i;:::-;;;:::i;2335:29970:94:-;;;;;-1:-1:-1;;2335:29970:94;;;;;;28511:43;2335:29970;;;;;:::i;:::-;;;9702:26:73;2574:386:47;-1:-1:-1;2335:29970:94;;;;-1:-1:-1;2335:29970:94;;-1:-1:-1;2335:29970:94;;;;-1:-1:-1;2335:29970:94;2806:53:55;2574:386:47;;28511:43:94;2335:29970;;;;;;;;;;;;;;;:::i;:::-;2707:73:70;;:::i;:::-;8248:15;2335:29970:94;;7916:84:49;568:1:80;7916:84:49;8244:95:70;;54595:19:68;;;;;2335:29970:94;-1:-1:-1;;;;;2335:29970:94;;;;;;;-1:-1:-1;2335:29970:94;10124:13:70;2335:29970:94;;;;-1:-1:-1;2335:29970:94;;;10124:41:70;10120:113;;2335:29970:94;1083:103:53;;;;:::i;:::-;2335:29970:94;54772:25:68;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;54772:25:68;2335:29970:94;;54772:27:68;;;;2335:29970:94;54772:27:68;;;;;;;;55833:15;54772:27;-1:-1:-1;54772:27:68;;;2335:29970:94;;;54857:24:68;2335:29970:94;;;;-1:-1:-1;;;;;2335:29970:94;;;;54857:24:68;:::i;:::-;2335:29970:94;;-1:-1:-1;;;;;2335:29970:94;54937:21:68;;;;;2335:29970:94;;;54937:21:68;;:::i;:::-;54994:24;2335:29970:94;54974:16:68;;2335:29970:94;;;;:::i;:::-;;;;:::i;:::-;54974:44:68;54994:24;;55116:169;2335:29970:94;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;2335:29970:94;;;55116:169:68;;:::i;:::-;55304:70;55070:215;;;;;;;;55304:70;;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;55304:70:68;2335:29970:94;;;55304:70:68;;;;2335:29970:94;;;;;;;;;;;;;;;;;;55304:70:68;;;;54970:782;2335:29970:94;;;;;:::i;:::-;;;;:::i;:::-;55766:32:68;;55833:15;2335:29970:94;55818:30:68;;;55814:116;;-1:-1:-1;2335:29970:94;;;55943:34:68;;56233:19;;55943:34;;-1:-1:-1;;;;;2335:29970:94;56233:19:68;:::i;2335:29970:94:-;56233:19:68;:::i;:::-;1148:1:53;;:::i;:::-;2335:29970:94;;;;;;;;;;;;;;;;;;;;;;;55814:116:68;55875:40;-1:-1:-1;55875:40:68;2335:29970:94;;;;;;;-1:-1:-1;21464:49:68;55762:417;56026:15;2335:29970:94;56012:29:68;;;56008:114;;56135:33;;2335:29970:94;56135:33:68;56233:19;2335:29970:94;56135:33:68;;55762:417;;;;;56008:114;56068:39;-1:-1:-1;56068:39:68;2335:29970:94;;;;;;;-1:-1:-1;21464:49:68;54970:782;55487:167;2335:29970:94;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;2335:29970:94;;;55487:167:68;;:::i;:::-;55673:68;55441:213;;;;;;;;55673:68;;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;55673:68:68;;;;54970:782;;54772:27;;;;2335:29970:94;54772:27:68;2335:29970:94;54772:27:68;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;10120:113:70;10188:34;;-1:-1:-1;10188:34:70;2335:29970:94;;;-1:-1:-1;10188:34:70;8244:95;8305:23;-1:-1:-1;8305:23:70;2335:29970:94;-1:-1:-1;8305:23:70;2335:29970:94;;;;1848:58:44;20862:33:94;-1:-1:-1;;;;;2335:29970:94;;;:::i;:::-;;;;;;;;;-1:-1:-1;2335:29970:94;20898:20;2335:29970;;20898:33;2335:29970;;-1:-1:-1;2335:29970:94;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;20898:33;2335:29970;1616:3:44;2335:29970:94;1848:58:44;;:::i;:::-;2335:29970:94;-1:-1:-1;2335:29970:94;20898:20;2335:29970;;;-1:-1:-1;2335:29970:94;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;20862:33;2335:29970;;;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;29168:41;2335:29970;;;;;;:::i;:::-;;;;:::i;:::-;;29168:41;:::i;:::-;2335:29970;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3778:6;2335:29970;;;:::i;:::-;3778:6;;:::i;2335:29970::-;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6980:19:68;2335:29970:94;;6980:19:68;:::i;:::-;2335:29970:94;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;;;;;;;;;;:::i;:::-;2707:73:70;;:::i;:::-;8882:4;-1:-1:-1;;;;;2335:29970:94;;;8882:4:70;:::i;:::-;25828:11:68;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;25828:11:68;25916:4;9851:16:73;2806:53:55;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;;9702:26:73;;25916:4:68;:::i;:::-;26415:73;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;;26415:73:68;:::i;:::-;28687:99;2335:29970:94;26534:15:68;;;2335:29970:94;26558:26:68;:19;;;;;;2335:29970:94;26558:26:68;;:::i;:::-;26983:19;;27054:30;;;;26983:144;27054:30;;27098:19;;;;;;;26983:144;;:::i;:::-;2335:29970:94;27142:54:68;2335:29970:94;;7916:84:49;4860:199:74;958:1:75;7916:84:49;;4860:199:74;;27142:54:68;27138:890;;2335:29970:94;28687:99:68;;;;;;:::i;:::-;28628:158;;;;;;2335:29970:94;;28984:53:68;2335:29970:94;;2279:1:75;5365:197:74;958:1:75;7916:84:49;;5365:197:74;;28984:53:68;28980:487;;2335:29970:94;;;;26558:19:68;2335:29970:94;;;;;;:::i;28980:487:68:-;2335:29970:94;;;29192:264:68;2335:29970:94;;29137:28:68;;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;29137:28:68;2335:29970:94;;;29259:10:68;29192:264;;:::i;:::-;28980:487;;;;;;;;;27138:890;27387:28;27861:156;2335:29970:94;;;27387:28:68;;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;27387:28:68;27271:10;;27387:28;:::i;:::-;27723:17;27690:31;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;27690:31:68;27723:17;;:::i;:::-;27861:19;27936:30;;27984:19;;27861:156;;:::i;:::-;27138:890;;;;;2335:29970:94;;;;;-1:-1:-1;;2335:29970:94;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;:::i;:::-;;-1:-1:-1;2335:29970:94;-1:-1:-1;2335:29970:94;;;;-1:-1:-1;2335:29970:94;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;2335:29970:94;;;:::i;:::-;;;6295:15;2335:29970;6295:15;2335:29970;;;6295:15;2335:29970;;8470:156:49;2335:29970:94;;8470:156:49;;2335:29970:94;8470:156:49;;2335:29970:94;;6295:15;2335:29970;;;;;;;-1:-1:-1;;2335:29970:94;;;;;;;9342:26:73;3051:52:55;2335:29970:94;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;13939:32;2335:29970;;13939:32;:::i;:::-;13986:13;-1:-1:-1;14020:3:94;2335:29970;;14001:17;;;;;14062:9;14039:32;14062:9;;2335:29970;14062:9;;;:::i;14039:32::-;14085:46;14115:16;;;;;:::i;:::-;14085:14;;;;;:::i;:::-;;:27;2335:29970;-1:-1:-1;;;;;2335:29970:94;;;;14085:46;14172:45;:16;;;;;:::i;:45::-;:120;;14145:147;-1:-1:-1;14172:120:94;2335:29970;14145:14;;;;:::i;:::-;;:24;:147;:::i;:::-;2335:29970;13986:13;;14172:120;14145:147;14172:120;;;14001:17;2335:29970;;;14327:46;;-1:-1:-1;2335:29970:94;;14327:46;14001:17;2335:29970;14327:46;;;:::i;:::-;;:17;-1:-1:-1;;;;;14327:17:94;2335:29970;14327:46;;;;;;2335:29970;14327:46;-1:-1:-1;14327:46:94;;;13981:322;2335:29970;;;;;;;;:::i;14327:46::-;;;;;;-1:-1:-1;14327:46:94;;;;;;:::i;:::-;;;;;:::i;:::-;;;;2335:29970;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;2335:29970:94;;;;;8882:4:70;2335:29970:94;;;;;:::i;:::-;8882:4:70;:::i;2335:29970:94:-;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;:::i;:::-;8470:156:49;6816:15:94;2335:29970;8470:156:49;;568:1:80;8470:156:49;;6816:15:94;2335:29970;-1:-1:-1;2335:29970:94;;;;;;;-1:-1:-1;;2335:29970:94;;;;;;9187:17:73;3051:52:55;2335:29970:94;;;;;2131:58:44;21069:33:94;-1:-1:-1;;;;;2335:29970:94;;;:::i;:::-;;;;;;;;;-1:-1:-1;2335:29970:94;21105:20;2335:29970;;1237:14:44;21105:33:94;2335:29970;;-1:-1:-1;2335:29970:94;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;21105:33;2335:29970;1460:31:44;2131:58;:::i;2335:29970:94:-;;;;;-1:-1:-1;;2335:29970:94;;;;;26077:4;9187:17:73;3051:52:55;2335:29970:94;;;;;;-1:-1:-1;;2335:29970:94;;;;;29629:52;2335:29970;;;;;:::i;:::-;-1:-1:-1;;;;;2335:29970:94;;;;;;:::i;:::-;;-1:-1:-1;2335:29970:94;29629:17;2335:29970;;29629:35;2335:29970;-1:-1:-1;2335:29970:94;29629:35;2335:29970;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;18567:5;2335:29970;;;:::i;:::-;;;;;-1:-1:-1;;2335:29970:94;;;;;;9851:16:73;2806:53:55;2335:29970:94;;;;;;;;;;-1:-1:-1;;;;;2335:29970:94;;;:::i;:::-;;;-1:-1:-1;2335:29970:94;;;11211:11;2335:29970;;;-1:-1:-1;2335:29970:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2335:29970:94;;;;;;;;;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;;;;;;;-1:-1:-1;2335:29970:94;;;-1:-1:-1;2335:29970:94;;;;;;;;;;;;;;;;-1:-1:-1;2335:29970:94;;;;;;;;;;;;;:::i;:::-;5562:81:70;;;:::i;:::-;2335:29970:94;;:::i;:::-;4231:16;4292:24;-1:-1:-1;;;;;4231:16:94;2335:29970;4292:24;;:::i;:::-;-1:-1:-1;;4400:32:94;;;:::i;:::-;4231:211;;;;;;-1:-1:-1;2335:29970:94;;4231:211;2335:29970;;4231:211;;;;;;;2335:29970;4231:211;;2335:29970;4231:211;;;:::i;:::-;;;;;;;;;;;2335:29970;;;4231:211;;;;;:::i;2335:29970::-;;;;;-1:-1:-1;;2335:29970:94;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;:::i;:::-;;;-1:-1:-1;2335:29970:94;-1:-1:-1;2335:29970:94;;1192:1:75;2335:29970:94;-1:-1:-1;2335:29970:94;;958:1:75;7916:84:49;;16646:28:70;16642:93;;2335:29970:94;16642:93:70;16697:27;-1:-1:-1;16697:27:70;2335:29970:94;;;-1:-1:-1;16697:27:70;2335:29970:94;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;-1:-1:-1;;;;;3528:16:94;2335:29970;;;;;;;;;20693:33;-1:-1:-1;;;;;2335:29970:94;;;:::i;:::-;;;-1:-1:-1;2335:29970:94;20693:20;2335:29970;;;-1:-1:-1;2335:29970:94;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;20693:33;2335:29970;1616:3:44;2335:29970:94;;;;;;;;;;;;-1:-1:-1;;2335:29970:94;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;:::i;:::-;;;-1:-1:-1;2335:29970:94;-1:-1:-1;2335:29970:94;;21482:59;2335:29970;;;-1:-1:-1;2335:29970:94;;21482:59;:::i;2335:29970::-;;;;;;;:::i;:::-;1083:103:53;;;;;:::i;:::-;20262:54:94;;;;;:::i;:::-;1083:103:53;;;:::i;:::-;2335:29970:94;;:::i;:::-;;;;;;;:::i;:::-;;;;:::i;:::-;19191:41:68;19187:325;;2335:29970:94;19545:34:68;;-1:-1:-1;19545:34:68;;;;2335:29970:94;;19545:34:68;:::i;:::-;19745:20;19735:54;19745:20;;;2335:29970:94;19735:38:68;:31;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;19735:38:68;2335:29970:94;;;19735:54:68;;;;;;2335:29970:94;19735:54:68;;2335:29970:94;19735:54:68;;;:::i;:::-;;;;;;;;;;-1:-1:-1;19735:54:68;;;2335:29970:94;19823:24:68;;;;:::i;:::-;2335:29970:94;;;;;:::i;:::-;;;;:::i;:::-;20227:41:68;;20504:29;20661:620;20504:29;2335:29970:94;20504:29:68;;2335:29970:94;;;20726:30:68;;;;21207:60;:39;20726:50;20757:18;;;2335:29970:94;;;20726:50:68;;:::i;:::-;2335:29970:94;21207:19:68;;;;;2335:29970:94;;21207:39:68;;:::i;:60::-;20661:620;;:::i;:::-;21327:30;;;;2335:29970:94;21296:83:68;;;21413:24;21207:19;21413:24;;2335:29970:94;21398:39:68;;;;21394:134;;20223:2688;;;2335:29970:94;22995:23:68;;2335:29970:94;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;23020:11:68;;;;:::i;:::-;23056:24;;2335:29970:94;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;23082:12:68;;;;:::i;:::-;2335:29970:94;;;;-1:-1:-1;;;;;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;23379:215:68;;;;;:::i;:::-;23317:28;;;;;23347;2335:29970:94;23347:28:68;2335:29970:94;;;;;;;23056:24:68;23726:20;;;;;;;:39;;;;:::i;:::-;2335:29970:94;23726:53:68;;;;:::i;:::-;2335:29970:94;;23726:84:68;;;:::i;:::-;23824:19;;;;:::i;:::-;23909:18;;2335:29970:94;;;23941:20:68;;;;:40;;;;:::i;:::-;2335:29970:94;23941:55:68;;;;:::i;:::-;24010:19;;;;:::i;:::-;2335:29970:94;;-1:-1:-1;;;;;2335:29970:94;;;;;12512:18;2335:29970;;;;;24358:20:68;;;2335:29970:94;;24358:39:68;;;:::i;:::-;2335:29970:94;24411:29:68;;;;;;2335:29970:94;;24411:48:68;;;:::i;:::-;2335:29970:94;24310:159:68;;;:::i;:::-;2335:29970:94;;24276:31:68;;;2335:29970:94;;;;;;;;;;24276:31:68;2335:29970:94;24562:20:68;2335:29970:94;;24562:40:68;;;:::i;:::-;2335:29970:94;24616:29:68;;2335:29970:94;;24616:49:68;;;:::i;:::-;2335:29970:94;24514:161:68;;;:::i;:::-;2335:29970:94;;24479:32:68;;2335:29970:94;;;;;;;;;;24479:32:68;2335:29970:94;;;;;;23056:24:68;24901:27;;;2335:29970:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;24723:257:68;;2335:29970:94;;24723:257:68;1148:1:53;;:::i;:::-;;;:::i;21394:134:68:-;21464:49;-1:-1:-1;21464:49:68;2335:29970:94;;;;;-1:-1:-1;21464:49:68;20223:2688;22171:27;22285:61;22474:182;22171:27;22120:150;22171:27;;;2335:29970:94;5832:87:50;;;;;;;;22120:150:68;;;:::i;:::-;2335:29970:94;;;;22285:61:68;:::i;:::-;22537:49;:30;;;;2335:29970:94;;22537:49:68;;:::i;:::-;2335:29970:94;22604:38:68;:19;;;;2335:29970:94;;22604:38:68;;:::i;:::-;2335:29970:94;22474:182:68;;:::i;:::-;22723:30;;;;2335:29970:94;22671:83:68;;22604:19;22787:24;;2335:29970:94;22773:38:68;;;;22769:132;;20223:2688;;;;19735:54;;;;;;;;;;;;;;;:::i;:::-;;;;;19187:325;19347:34;;;19430:71;19347:69;2335:29970:94;;19388:27:68;;;2335:29970:94;19347:69:68;;:::i;:::-;2335:29970:94;;;;;19430:71:68;:::i;:::-;2335:29970:94;;19187:325:68;;2335:29970:94;;;;;-1:-1:-1;;2335:29970:94;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;:::i;:::-;;;-1:-1:-1;2335:29970:94;-1:-1:-1;2335:29970:94;;30474:183;2335:29970;-1:-1:-1;2335:29970:94;;19669:4:33;2335:29970:94;;19669:4:33;30474:183:94;;:::i;2335:29970::-;;;;;-1:-1:-1;;2335:29970:94;;;;;1083:103:53;;:::i;:::-;551:66;2806:53:55;;2335:29970:94;;;;3051:52:55;;2335:29970:94;;;;;;-1:-1:-1;;2335:29970:94;;;;;;25152:53;2335:29970;;;;;:::i;:::-;-1:-1:-1;;;;;2335:29970:94;;-1:-1:-1;2335:29970:94;25101:20;2335:29970;;;-1:-1:-1;2335:29970:94;;25152:53;:::i;2335:29970::-;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;;;;;;;;;;;:::i;:::-;14810:101:70;2335:29970:94;;;;;;;:::i;:::-;;;;;;:::i;:::-;;14287:20:70;:48;:20;2335:29970:94;14287:20:70;;;:48;:::i;:::-;2335:29970:94;;;;:::i;:::-;14426:50:70;;14491:41;14426:164;;14879:31;14695:30;;;;14835:42;14695:30;:42;:30;;;:42;:::i;:::-;2335:29970:94;14751:19:70;14645:147;14751:19;;;;:31;:19;;;:31;:::i;:::-;2335:29970:94;14645:147:70;;;;:::i;:::-;14601:191;:29;2335:29970:94;14601:29:70;;;:191;:::i;:::-;2335:29970:94;14835:30:70;:42;:::i;:::-;2335:29970:94;14879:19:70;;:31;:::i;:::-;2335:29970:94;14810:101:70;;:::i;:::-;;2335:29970:94;;;;;;;:::i;14426:164:70:-;14547:43;14426:164;;;2335:29970:94;;;;;-1:-1:-1;;2335:29970:94;;;;;26832:45;2335:29970;;;;;:::i;:::-;-1:-1:-1;;;;;2335:29970:94;;;;;;:::i;:::-;;-1:-1:-1;2335:29970:94;26832:13;2335:29970;;;-1:-1:-1;2335:29970:94;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;25606:11;2335:29970;;;:::i;:::-;25606:11;;;;;:::i;2335:29970::-;;;;;;;:::i;:::-;1083:103:53;;;;:::i;:::-;2707:73:70;;:::i;:::-;3891:15;;;;:::i;:::-;;;:::i;:::-;-1:-1:-1;;;;;2335:29970:94;;-1:-1:-1;2335:29970:94;8407:11:68;2335:29970:94;;;-1:-1:-1;2335:29970:94;;;;;;;;;;;;;;;;;;;1412:43:105;;;-1:-1:-1;;;;;2335:29970:94;;;1412:43:105;;;2335:29970:94;;;;;;;;;1412:43:105;;;;;2335:29970:94;1412:43:105;2335:29970:94;;1412:43:105;:::i;:::-;;:::i;:::-;-1:-1:-1;551:66:53;3051:52:55;2335:29970:94;;;:::i;:::-;;;;;-1:-1:-1;;2335:29970:94;;;;;18678:6;2335:29970;;;;;:::i;:::-;;;18678:6;;:::i;2335:29970::-;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;9187:17:73;2335:29970:94;;;;;;;;-1:-1:-1;;2335:29970:94;;;;;29919:11;2335:29970;;29919:11;:::i;2335:29970::-;;;;25867:11;2335:29970;;;:::i;:::-;25867:11;;;;;:::i;2335:29970::-;;;;;-1:-1:-1;;2335:29970:94;;;;;2707:73:70;;:::i;2335:29970:94:-;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;-1:-1:-1;;;;;81348:15:68;2335:29970:94;;;;;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;11005:13;-1:-1:-1;;;;;2335:29970:94;;;-1:-1:-1;11039:3:94;2335:29970;;11020:17;;;;;11092:12;;2335:29970;11092:12;;;:::i;:::-;;2335:29970;-1:-1:-1;2335:29970:94;;;;;;;;11058:31;2335:29970;;11079:9;2335:29970;;-1:-1:-1;2335:29970:94;11079:9;;:::i;:::-;2335:29970;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;11058:31;2335:29970;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11005:13;;2335:29970;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;;;;22140:92;2335:29970;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;22140:92;;:::i;:::-;2335:29970;;;;;;;;;;;;;;;;;;;53825:6:68;2335:29970:94;;;:::i;:::-;53802:10:68;;53825:6;:::i;2335:29970:94:-;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;2335:29970:94;;;:::i;:::-;;;;;-1:-1:-1;2335:29970:94;-1:-1:-1;2335:29970:94;;7916:84:49;2335:29970:94;-1:-1:-1;2335:29970:94;;7916:84:49;8984:24:70;8980:85;;53350:34:68;2335:29970:94;;;-1:-1:-1;2335:29970:94;53306:11:68;2335:29970:94;;;;-1:-1:-1;2335:29970:94;;;;;;;;:::i;:::-;;;;:::i;:::-;53350:34:68;;:::i;:::-;2335:29970:94;;;;;;;;;;;;;;;;8980:85:70;9031:23;;-1:-1:-1;9031:23:70;2335:29970:94;;;-1:-1:-1;9031:23:70;2335:29970:94;;;;-1:-1:-1;;;;;2335:29970:94;;;:::i;:::-;;;6669:15;2335:29970;6669:15;2335:29970;;;6669:15;2335:29970;;8470:156:49;2335:29970:94;;8470:156:49;;2335:29970:94;8470:156:49;;2335:29970:94;;6669:15;2335:29970;;;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;-1:-1:-1;;2335:29970:94;;;;;551:66:53;2806:53:55;2335:29970:94;;;;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2335:29970:94;;;;;;-1:-1:-1;2335:29970:94;-1:-1:-1;2335:29970:94;;;-1:-1:-1;2335:29970:94;;19917:10:33;8036:26:76;;8032:97;;19669:4:33;8232:183:76;19669:4:33;;8232:183:76;;:::i;8032:97::-;8085:33;-1:-1:-1;8085:33:76;2335:29970:94;-1:-1:-1;8085:33:76;2335:29970:94;;;;;;;:::i;:::-;1083:103:53;;;;:::i;:::-;28015:4:94;28000:47;;;;2335:29970;;28000:47;2335:29970;28000:47;;-1:-1:-1;;;;;2335:29970:94;;;;28000:47;;2335:29970;;;;;;;;;;28000:47;28015:4;2335:29970;28015:4;;;28000:47;;;;;;;;;551:66:53;3051:52:55;2335:29970:94;28000:47;;;;:::i;:::-;;;;2335:29970;;;;18903:5;2335:29970;;;:::i;:::-;9520:18:73;;18903:5:94;:::i;2335:29970::-;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;-1:-1:-1;;2335:29970:94;;;;;;551:66:53;2806:53:55;2335:29970:94;;;;;;;;;;;;;-1:-1:-1;;2335:29970:94;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;:::i;:::-;;-1:-1:-1;2335:29970:94;19129:11;2335:29970;;;;;-1:-1:-1;2335:29970:94;;-1:-1:-1;2335:29970:94;;;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;2335:29970:94;;;;;;:::i;:::-;;;:::i;:::-;;;-1:-1:-1;2335:29970:94;;;22475:18;2335:29970;;;;-1:-1:-1;2335:29970:94;;6819:15:77;;;2335:29970:94;7033:13:77;-1:-1:-1;2335:29970:94;7120:18:77;;7082:19;;;7028:396;7048:13;;;;;;2335:29970:94;;;;;;;:::i;7063:3:77:-;7120:18;7107:35;7120:21;2335:29970:94;7120:18:77;;;:21;:::i;:::-;;7107:35;:::i;:::-;7082:60;:19;;;:60;:::i;:::-;2335:29970:94;;-1:-1:-1;2335:29970:94;;;;7395:17:77;2335:29970:94;1237:14:44;2335:29970:94;-1:-1:-1;2335:29970:94;;1460:31:44;7395:17:77;;;:::i;:::-;2335:29970:94;7033:13:77;;2335:29970:94;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;:::i;:::-;;11460:85;2335:29970;;;;11468:39;11460:85;:::i;:::-;11555:94;2335:29970;;;;11563:48;11555:94;:::i;:::-;2335:29970;;;-1:-1:-1;2335:29970:94;;;11746:18;2335:29970;;;;;-1:-1:-1;2335:29970:94;11785:13;-1:-1:-1;11819:3:94;2335:29970;;11800:17;;;;;11896:18;11861:83;11896:18;2335:29970;11896:18;;;:::i;:::-;2335:29970;11916:27;;;;:::i;11861:83::-;2335:29970;-1:-1:-1;2335:29970:94;;;;;-1:-1:-1;2335:29970:94;;;11785:13;;11800:17;2335:29970;11800:17;;-1:-1:-1;2335:29970:94;11965:11;2335:29970;;;-1:-1:-1;2335:29970:94;;:::i;:::-;;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;13352:24:70;2335:29970:94;;;:::i;:::-;;;;:::i;:::-;;1083:103:53;;:::i;:::-;2335:29970:94;;:::i;13352:24:70:-;-1:-1:-1;551:66:53;3051:52:55;2335:29970:94;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;2335:29970:94;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;:::i;:::-;;-1:-1:-1;2335:29970:94;-1:-1:-1;2335:29970:94;;;;;-1:-1:-1;2335:29970:94;;-1:-1:-1;2335:29970:94;;;;;;;;;:::i;:::-;9851:16:73;;2806:53:55;-1:-1:-1;2335:29970:94;9702:26:73;2335:29970:94;;;-1:-1:-1;2335:29970:94;;-1:-1:-1;2335:29970:94;;;;-1:-1:-1;2335:29970:94;3051:52:55;2335:29970:94;;;;;;-1:-1:-1;;2335:29970:94;;;;;6011:4:70;2335:29970:94;;;;;:::i;:::-;;;:::i;:::-;;5894:129:70;;:::i;6011:4::-;2335:29970:94;13162:15;2335:29970;;;;;;;:::i;:::-;7916:84:49;;;2335:29970:94;;;;;;7916:84:49;2335:29970:94;;13200:182;;7916:84:49;;;;;;2335:29970:94;;;;13200:182;7916:84:49;2335:29970:94;7916:84:49;;2335:29970:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;14612:32;2335:29970;;14612:32;:::i;:::-;14659:13;-1:-1:-1;14693:3:94;2335:29970;;14674:17;;;;;14735:9;14712:32;14735:9;;2335:29970;14735:9;;;:::i;:::-;14712:14;;;;:::i;:32::-;14758:46;14788:16;;;;;:::i;:::-;2335:29970;14758:14;;;;:::i;:46::-;14845:45;:16;;;;;:::i;:45::-;:120;;14818:147;-1:-1:-1;14845:120:94;2335:29970;14818:14;;;;:::i;:147::-;14979:47;15010:16;;;;;:::i;:::-;2335:29970;;;;;15010:16;14979:14;;;;;:::i;:::-;;:28;2335:29970;;;;;;14979:47;2335:29970;14659:13;;14845:120;14818:147;14845:120;;;14674:17;2335:29970;;;15061:46;;-1:-1:-1;2335:29970:94;;15061:46;14674:17;2335:29970;15061:46;;;:::i;2335:29970::-;;;;;-1:-1:-1;;2335:29970:94;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;:::i;:::-;;-1:-1:-1;2335:29970:94;25327:20;2335:29970;;;;-1:-1:-1;2335:29970:94;;;;;;;;;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;;;28181:30;2335:29970;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;28181:30;:::i;2335:29970::-;;;;23559:53;2335:29970;;;:::i;:::-;1083:103:53;;;:::i;:::-;23559:53:94;:::i;2335:29970::-;;;;;;;24299:91;2335:29970;;;;:::i;:::-;;;;;;;:::i;:::-;;;;24092:18;24185:103;24092:18;;;;;;;;:::i;:::-;;;;-1:-1:-1;;24092:18:94;;;;;;;;:::i;:::-;2335:29970;24082:29;;24185:103;;;;:::i;:::-;2335:29970;;;;;;;24337:18;2335:29970;;24337:18;;;24092;24337;;;;;:::i;2335:29970::-;;24092:18;2335:29970;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2335:29970:94;;;;;;:::i;:::-;;-1:-1:-1;2335:29970:94;26999:15;2335:29970;;26999:36;2335:29970;;;;-1:-1:-1;2335:29970:94;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5562:81:70;;;;;;;:::i;:::-;-1:-1:-1;;;;;5835:24:94;5763:16;;2335:29970;5835:24;;:::i;:::-;5966:32;;;:::i;:::-;5763:245;;;;;;2335:29970;;;5930:1;2335:29970;;;;;;;;5763:245;;;;;;;2335:29970;5763:245;;2335:29970;5763:245;;;2335:29970;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5763:245;;;;;;;;;;5562:81:70;:::o;5763:245:94:-;;;;;;:::i;2335:29970::-;;;;;;;:::i;:::-;;-1:-1:-1;2335:29970:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;-1:-1:-1;2335:29970:94;;;:::o;:::-;;;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;2335:29970:94;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;-1:-1:-1;;2335:29970:94;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;2335:29970:94;;-1:-1:-1;2335:29970:94;;;;;;;;;-1:-1:-1;2335:29970:94;;;;-1:-1:-1;2335:29970:94;;;;-1:-1:-1;2335:29970:94;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;2335:29970:94;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2335:29970:94;;-1:-1:-1;2335:29970:94;;-1:-1:-1;2335:29970:94;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2335:29970:94;;;;;;;;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;2335:29970:94;;;;:::i;:::-;;;-1:-1:-1;2335:29970:94;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;13395:349;13524:32;2335:29970;;13524:32;:::i;:::-;13571:13;13583:1;13605:3;2335:29970;;13586:17;;;;;13647:9;13624:32;-1:-1:-1;;;;;13647:9:94;2335:29970;13647:9;;;:::i;:::-;2335:29970;;13624:14;;;;:::i;:32::-;2335:29970;13571:13;;13586:17;;;13583:1;13691:46;13586:17;2335:29970;;13691:46;;;;2335:29970;13691:46;;;;;;:::i;:::-;;:17;-1:-1:-1;;;;;13691:17:94;2335:29970;13691:46;;;;;;;13583:1;13691:46;;;13677:60;13395:349;:::o;13691:46::-;;;;;;13583:1;13691:46;;;;;;:::i;2335:29970::-;;;;;;;:::i;:::-;-1:-1:-1;2335:29970:94;;;;;;;;;;;;:::o;:::-;;;;;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::i;5061:1817:68:-;;;;2811:38:106;2335:29970:94;9187:17:73;2806:53:55;;;2335:29970:94;5148:82:68;;;;5061:1817;2335:29970:94;;;:::i;:::-;7019:10:68;2811:38:106;:::i;:::-;5339:1533:68;;;5061:1817;:::o;5339:1533::-;9342:26:73;2806:53:55;5384:98:68;;-1:-1:-1;3051:52:55;;6832:27:68;9851:16:73;6832:27:68;:::i;5384:98::-;5448:19;-1:-1:-1;5448:19:68;;-1:-1:-1;5448:19:68;5148:82;2335:29970:94;3051:52:55;;5148:82:68;;7072:1538:94;;6379:89:76;7072:1538:94;7837:34;5826:175:76;4964:169;4121:171;7987:63:94;7899:61;7791:81;7677:87;7577:73;2691:83:76;3154:90;8565:21:94;7072:1538;;7446:27;2262:88:76;7239:57:94;7190:21;2335:29970;7072:1538;-1:-1:-1;;;;;2335:29970:94;-1:-1:-1;2335:29970:94;-1:-1:-1;2335:29970:94;;;-1:-1:-1;2335:29970:94;;;7190:21;2335:29970;7272:23;;;2335:29970;;;7239:57;8470:156:49;;;1623:275:76;;7239:57:94;7357:24;;;2335:29970;;;8470:156:49;8160:472;2335:29970:94;8470:156:49;;;;8160:472;;2262:88:76;7446:27:94;;2335:29970;;;;;;8470:156:49;8160:472;2335:29970:94;8470:156:49;;;;8160:472;;3154:90:76;7530:19:94;;;2335:29970;;;8470:156:49;8160:472;2335:29970:94;8470:156:49;;;;8160:472;;2691:83:76;7619:30:94;;;2335:29970;7577:73;;:::i;:::-;7730:33;;;2335:29970;7677:87;;:::i;:::-;7837:34;;;2335:29970;7791:81;;:::i;:::-;7935:24;;;2335:29970;;2539:209:49;;;;;;;;;;10440:413:76;7899:61:94;8024:25;;;2335:29970;;2539:209:49;;;;;;;;;;11205:402:76;7987:63:94;8135:26;;2335:29970;;;;;8470:156:49;8160:472;2335:29970:94;8470:156:49;;;;8160:472;;4121:171:76;7619:30:94;8262:51;;2335:29970;;;8470:156:49;8160:472;2335:29970:94;8470:156:49;;;;8160:472;;4964:169:76;7730:33:94;8394:54;;2335:29970;;;8470:156:49;8160:472;2335:29970:94;8470:156:49;;;;8160:472;;5826:175:76;8512:41:94;;2335:29970;;;8470:156:49;8160:472;2335:29970:94;8470:156:49;;;;8160:472;;8565:21:94;2335:29970;7072:1538::o;2335:29970::-;;;;:::i;:::-;;;;;:::i;15120:660::-;;;;;;15385:32;2335:29970;;15385:32;:::i;:::-;15432:13;15444:1;15466:3;2335:29970;;15447:17;;;;;15508:9;15485:32;15508:9;;2335:29970;15508:9;;;:::i;15485:32::-;15531:40;15558:13;;;;;:::i;:::-;;:::i;15531:40::-;15585:46;15615:16;;;;;:::i;:::-;15585:27;:14;;;;:::i;:46::-;15645:47;15676:16;;;;;:::i;:::-;15645:28;:14;;;;:::i;:47::-;2335:29970;15432:13;;15447:17;;;;;15727:46;15447:17;;;15444:1;15447:17;15585:27;2335:29970;15727:46;;;;2335:29970;15727:46;;;;;;:::i;2335:29970::-;;465:4:50;2335:29970:94;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;;;;;;;-1:-1:-1;2335:29970:94;;;-1:-1:-1;2335:29970:94;;;;;;;;;;;;;;;;-1:-1:-1;2335:29970:94;;;;;;30684:429;;30812:23;;:78;;;;30684:429;30808:117;;2335:29970;;;31027:15;;2335:29970;-1:-1:-1;;;;;31027:15:94;2335:29970;31027:15;2335:29970;;;;31027:15;;;;;;30960:146;31027:15;2335:29970;31027:15;;;30684:429;2335:29970;;30960:146;:::i;:::-;30935:171;;;30684:429;:::o;31027:15::-;;;;;;;;;;;;;;:::i;:::-;;;;30808:117;30906:8;;2335:29970;30906:8;:::o;30812:78::-;30862:22;30839:46;;30862:22;;;:::i;:::-;2335:29970;;30839:46;;;;2335:29970;30839:46;;;;;2335:29970;;;;;;;;30839:46;;2335:29970;-1:-1:-1;;;;;2335:29970:94;;30839:46;;;;;;;2335:29970;30839:46;;;30812:78;30839:51;;30812:78;;30839:46;;;;;;;;;;;;;;:::i;:::-;;;;2335:29970;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31924:379::-;;32053:24;;32049:63;;2335:29970;;;32216:15;;2335:29970;-1:-1:-1;;;;;32216:15:94;2335:29970;32216:15;2335:29970;;;;32216:15;;;;;;32146:150;32216:15;2335:29970;32216:15;;;31924:379;2335:29970;;32146:150;:::i;:::-;32122:174;;31924:379;:::o;32216:15::-;;;;;;;;;;;;;;:::i;:::-;;;;8943:1378;10257:21;10281:33;2335:29970;10288:25;10257:57;8943:1378;6819:94:74;6283:95;5748:91;5246:92;4764:82;4338:83;3891:88;3366;2874:89;2368:100;8943:1378:94;9068:21;8943:1378;-1:-1:-1;;;;;2335:29970:94;-1:-1:-1;2335:29970:94;-1:-1:-1;2335:29970:94;;;-1:-1:-1;2335:29970:94;;;9068:21;2335:29970;;;;;8470:156:49;8160:472;2335:29970:94;8470:156:49;;;;8160:472;;2368:100:74;9265:38:94;;;2335:29970;;;8470:156:49;8160:472;2335:29970:94;8470:156:49;;;;8160:472;;2874:89:74;9375:37:94;;;2335:29970;;;8470:156:49;8160:472;2335:29970:94;8470:156:49;;;;8160:472;;3366:88:74;9490:43:94;;;2335:29970;;;8470:156:49;8160:472;2335:29970:94;8470:156:49;;;;8160:472;;3891:88:74;9600:32:94;;;2335:29970;;;8470:156:49;8160:472;2335:29970:94;8470:156:49;;;;8160:472;;4338:83:74;9698:31:94;;;2335:29970;;;8470:156:49;8160:472;2335:29970:94;8470:156:49;;;;8160:472;;4764:82:74;9804:40:94;;;2335:29970;;;8470:156:49;8160:472;2335:29970:94;8470:156:49;;;;8160:472;;5246:92:74;9918:39:94;;;2335:29970;;;8470:156:49;8160:472;2335:29970:94;8470:156:49;;;;8160:472;;5748:91:74;10035:43:94;;;2335:29970;;;8470:156:49;8160:472;2335:29970:94;8470:156:49;;;;8160:472;;6283:95:74;10155:42:94;;;2335:29970;;;8470:156:49;8160:472;2335:29970:94;8470:156:49;;;;8160:472;;6819:94:74;10209:21:94;;-1:-1:-1;;;;;2335:29970:94;-1:-1:-1;2335:29970:94;-1:-1:-1;2335:29970:94;;;-1:-1:-1;2335:29970:94;;;10209:21;2335:29970;10288:25;2335:29970;-1:-1:-1;;;;;2335:29970:94;;;10281:33;10257:21;-1:-1:-1;;;;;2335:29970:94;;;39384:15:68;2335:29970:94;;;;;;;10257:21;2335:29970;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;31495:423;;31622:20;;:71;;;;31495:423;31618:110;;2335:29970;;;31835:15;;2335:29970;-1:-1:-1;;;;;31835:15:94;2335:29970;31835:15;2335:29970;;;;31835:15;;;;;;31766:145;31835:15;2335:29970;31835:15;;;31495:423;2335:29970;;31766:145;:::i;31835:15::-;;;;;;;;;;;;;;:::i;:::-;;;;31622:71;31668:19;31646:42;;31668:19;;;:::i;:::-;2335:29970;;31646:42;;;;2335:29970;31646:42;;;;;2335:29970;;;;;;;;31646:42;;2335:29970;-1:-1:-1;;;;;2335:29970:94;;31646:42;;;;;;;2335:29970;31646:42;;;31622:71;31646:47;;31622:71;;31646:42;;;;;;;;;;;;;;:::i;:::-;;;;31119:370;;31244:21;;31240:60;;2335:29970;;;31405:15;;2335:29970;-1:-1:-1;;;;;31405:15:94;2335:29970;31405:15;2335:29970;;;;31405:15;;;;;;31337:145;31405:15;2335:29970;31405:15;;;31119:370;2335:29970;;31337:145;:::i;31405:15::-;;;;;;;;;;;;;;:::i;:::-;;;;10457:420;;;10571:1;10598:3;2335:29970;;10574:22;;;;;2335:29970;10701:24;2335:29970;10701:24;10662:198;10701:14;;;;;:::i;:::-;;:24;2335:29970;;;;;:::i;:::-;10757:27;10662:198;-1:-1:-1;;;;;10757:14:94;;;;;:::i;:::-;;:27;2335:29970;;10817:28;:14;;;;:::i;:::-;;:28;2335:29970;;;;10662:198;2335:29970;;;;;;:::i;:::-;10662:198;;:::i;:::-;;;2335:29970;-1:-1:-1;;;;;2335:29970:94;;;;10662:198;;;2335:29970;;;;;;10662:198;10617:42;:20;;-1:-1:-1;;;;;2335:29970:94;;;10617:14;2335:29970;;;;;;;10617:20;10638;:14;;;;:::i;:::-;;2335:29970;-1:-1:-1;;;;;2335:29970:94;;;10638:20;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;10617:42;2335:29970;:::i;:::-;;10559:13;;10574:22;;;;;10457:420::o;2335:29970::-;;-1:-1:-1;2335:29970:94;;;:::o;:::-;;;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;81602:69:68:-;81646:18;;;;;;81952:144;82003:9;81999:69;;1019:819:101;82015:1:68;1019:819:101;;82015:1:68;1019:819:101;;81348:15:68;-1:-1:-1;;;;;81348:15:68;2335:29970:94;1019:819:101;;;82015:1:68;1019:819:101;;;;;;82015:1:68;1019:819:101;;;82015:1:68;1019:819:101;6732:147:70;-1:-1:-1;;;;;2335:29970:94;;-1:-1:-1;2335:29970:94;-1:-1:-1;2335:29970:94;;;-1:-1:-1;2335:29970:94;;7916:84:49;;958:1:75;7916:84:49;;2335:29970:94;;11059:44:76;;;2335:29970:94;2895:125:75;;11059:44:76;6019:108:49;;7592:82:70;;;6732:147;6800:73;;;;6732:147;:::o;6800:73::-;6846:16;-1:-1:-1;6846:16:70;;2335:29970:94;;-1:-1:-1;6846:16:70;7592:82;7648:26;;;;;2335:29970:94;;;;;;;;7608:15:70;:66;;7592:82;;;;5694:130;2335:29970:94;6394:25:70;2335:29970:94;6375:15:70;:44;;:79;;;5694:130;5751:67;;5694:130::o;5751:67::-;5794:13;-1:-1:-1;5794:13:70;;-1:-1:-1;5794:13:70;6375:79;2335:29970:94;7916:84:49;6423:15:70;2335:29970:94;7916:84:49;;;6375:79:70;;29222:316:94;2335:29970;;:::i;:::-;;;;:::i;:::-;29427:4;29380:44;;;2335:29970;29427:4;29441:47;;;2335:29970;29222:316;:::o;16600:1318:68:-;;;;2335:29970:94;;;;;:::i;:::-;;;;:::i;:::-;17002:41:68;;17062:30;1946:22:46;465:4:50;17062:30:68;17214:38;17062:30;838:5:50;17062:30:68;;2335:29970:94;17143:30:68;17214:19;17143:49;:30;;;;2335:29970:94;;17143:49:68;;:::i;:::-;2335:29970:94;17214:19:68;;;2335:29970:94;;17214:38:68;;:::i;:::-;2335:29970:94;1946:22:46;;:::i;:::-;838:5:50;:::i;:::-;19669:4:33;16600:1318:68;:::o;17002:909::-;2688:41:46;17289:30:68;17833:60;:39;17289:30;2689:22:46;17289:30:68;;2335:29970:94;17368:30:68;17833:19;17368:50;17399:18;17368:30;;;;17399:18;;2335:29970:94;;;17368:50:68;;:::i;:::-;2335:29970:94;17833:19:68;;;2335:29970:94;;17833:39:68;;:::i;:60::-;2689:22:46;;:::i;:::-;2688:41;:::i;2335:29970:94:-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;2335:29970:94;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;58549:1:68;2335:29970:94;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;30167:6883:68:-;;;1083:103:53;;:::i;:::-;2335:29970:94;;;:::i;:::-;30618:15:68;;;;30665:31;30618:15;;2335:29970:94;;;;30665:31:68;:::i;:::-;30852:11;;;2335:29970:94;;;;;;:::i;:::-;;;;:::i;:::-;30852:44:68;;30927:22;2335:29970:94;30927:22:68;;2335:29970:94;31084:31:68;2335:29970:94;;31084:31:68;:::i;:::-;31209:29;31150:175;31209:29;30852:11;31209:29;;;31256:25;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;;-1:-1:-1;;;;;2335:29970:94;-1:-1:-1;2335:29970:94;2487:14:95;2335:29970:94;;;-1:-1:-1;2335:29970:94;;2402:112:95;;31256:25:68;31150:175;;:::i;:::-;30848:2980;;2335:29970:94;33917:22:68;;2335:29970:94;33902:37:68;;;33898:133;;34065:12;;;;;;;:::i;:::-;30618:15;35721:32;;;2335:29970:94;34131:3:68;2335:29970:94;;;34109:20:68;;;;;34150:19;34272:20;34150:19;34272:20;:::i;:::-;2335:29970:94;34334:16:68;;;:::i;:::-;34458:15;;;;:::i;:::-;2335:29970:94;34458:15:68;;34718:166;34781:30;;34840:22;34781:30;34840:19;34781:33;:30;;;;;:33;:::i;:::-;2335:29970:94;34840:19:68;;;:22;:::i;34718:166::-;34907:29;;;;;:::i;:::-;2335:29970:94;34454:735:68;35232:18;;:15;;;:18;:::i;:::-;35331:19;;;:22;:19;;;:22;:::i;:::-;2335:29970:94;35317:36:68;;35313:142;;35547:11;;;36313:72;35547:11;36313:37;35547:11;;;;35701:236;35547:11;35757:180;35547:11;;2335:29970:94;35547:11:68;;;;36403:19;35547:11;;:::i;:::-;2335:29970:94;35835:17:68;;;;:::i;:::-;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;;35757:180:68;;;:::i;:::-;2335:29970:94;;;35701:236:68;:::i;:::-;2335:29970:94;36313:23:68;:20;2335:29970:94;36313:20:68;;;:23;:::i;:::-;2335:29970:94;36313:37:68;:::i;:::-;2335:29970:94;;36313:72:68;;:::i;:::-;36403:19;;:::i;:::-;2335:29970:94;34094:13:68;;35313:142;35417:19;:22;:19;35380:60;35417:19;;:22;:::i;:::-;2335:29970:94;35380:60:68;2335:29970:94;35380:60:68;-1:-1:-1;;;;;2335:29970:94;;;35380:60:68;2335:29970:94;;;;;;;;34454:735:68;35155:15;;;;;:::i;:::-;2335:29970:94;34454:735:68;;34109:20;;;;;;;;;;;;36547:8;34109:20;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;;36547:8:68;:::i;:::-;36853:190;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;;36781:9:68;36792:12;36781:9;30618:15;36781:9;;2335:29970:94;;;;-1:-1:-1;;;;;2335:29970:94;;;;36792:12:68;;:::i;:::-;36954:25;2335:29970:94;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;:::i;36954:25:68:-;2335:29970:94;36853:190:68;-1:-1:-1;;;;;2335:29970:94;;;;:::i;:::-;;;35331:19:68;2335:29970:94;;;;;;;36853:190:68;;;:::i;:::-;;;;1148:1:53;;:::i;:::-;30512:23:68;;;30167:6883;:::o;33898:133::-;33962:58;2335:29970:94;33962:58:68;2335:29970:94;;;;;;;-1:-1:-1;21464:49:68;30848:2980;31361:25;2335:29970:94;;;;;:::i;:::-;;;;:::i;:::-;31346:40:68;31361:25;;31402:46;2335:29970:94;;31402:46:68;:::i;:::-;31482:42;2335:29970:94;;31482:42:68;:::i;:::-;31538:16;2335:29970:94;31568:40:68;31342:2486;30848:2980;;31342:2486;2335:29970:94;31644:27:68;2335:29970:94;;;;;:::i;:::-;;;;:::i;:::-;31629:42:68;31644:27;;31687:57;2335:29970:94;;31687:57:68;:::i;:::-;32085:294;31761:40;32024:12;32003:19;;;;;32024:12;:::i;:::-;30852:11;32145:29;;;2335:29970:94;32230:25:68;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;32230:25:68;32273:52;2335:29970:94;;32273:52:68;:::i;:::-;2335:29970:94;32343:22:68;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;32343:22:68;32085:294;;:::i;:::-;32052:327;;31625:2203;30848:2980;;31625:2203;2335:29970:94;;32415:39:68;2335:29970:94;;;;;:::i;:::-;;;;:::i;:::-;32400:54:68;32415:39;;2335:29970:94;;;32470:57:68;2335:29970:94;;32470:57:68;:::i;:::-;2335:29970:94;32559:22:68;;2335:29970:94;32615:54:68;;;;:::i;:::-;32738:432;32795:375;32595:17;;;2335:29970:94;;;;32684:40:68;;32885:29;;30852:11;32885:29;;;2335:29970:94;33130:22:68;2335:29970:94;33056:52:68;33009:25;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;33009:25:68;2335:29970:94;;33056:52:68;:::i;:::-;2335:29970:94;;-1:-1:-1;;;;;2335:29970:94;;;33130:22:68;32795:375;;:::i;:::-;2335:29970:94;;;32738:432:68;;;:::i;:::-;2335:29970:94;30848:2980:68;;32396:1432;2335:29970:94;33206:23:68;2335:29970:94;;;;;:::i;:::-;;;;:::i;:::-;33191:38:68;33206:23;;33245:56;2335:29970:94;;33245:56:68;:::i;:::-;2335:29970:94;33465:65:68;:27;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;33465:65:68;2335:29970:94;33626:22:68;;2335:29970:94;33670:29:68;30852:11;33670:29;;;33721:15;;;;;;2335:29970:94;33465:289:68;2335:29970:94;;33465:289:68;;;;;;;2335:29970:94;33465:289:68;;33552:10;33206:23;33465:289;;;:::i;:::-;;;;;;;;;;2335:29970:94;;;;;;;33465:289:68;;;33187:641;33401:353;;;;33187:641;30848:2980;;33465:289;;;;;;;;;;;2335:29970:94;33465:289:68;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;33187:641;33792:25;2335:29970:94;33792:25:68;33206:23;2335:29970:94;33792:25:68;8641:1623:77;;;;2335:29970:94;8915:29:77;:41;:29;;;;;:41;:::i;:::-;2335:29970:94;9458:36:77;;;9454:804;;8641:1623;;;;;;:::o;9454:804::-;10044:189;2335:29970:94;;;;9669:111:77;2335:29970:94;10184:31:77;2335:29970:94;;9669:111:77;:::i;:::-;10120:30;10184:19;10120:42;:30;;;;;:42;:::i;10184:31::-;2335:29970:94;10044:189:77;;:::i;:::-;9454:804;;;;;;;;9180:112:49;9268:13;-1:-1:-1;9268:13:49;;-1:-1:-1;9268:13:49;2311:281:44;;1237:14;2426:25;;;:58;;;;;2311:281;2422:113;;;3080:3;2335:29970:94;;;;;;;;;2311:281:44;:::o;2422:113::-;2507:17;;;;;;2426:58;2455:29;;;;2426:58;;;11202:521:70;-1:-1:-1;;;;;11202:521:70;;;;2335:29970:94;-1:-1:-1;2335:29970:94;;11379:18:70;2335:29970:94;;;;-1:-1:-1;2335:29970:94;-1:-1:-1;11467:3:70;11438:20;;;;2335:29970:94;;11434:31:70;;;;;11619:23;11567:139;11619:23;;2335:29970:94;11619:23:70;;:::i;:::-;2335:29970:94;11660:32:70;:29;;;;;:32;:::i;11567:139::-;2335:29970:94;-1:-1:-1;2335:29970:94;;;;;-1:-1:-1;2335:29970:94;;;11419:13:70;;11434:31;;;;;;;;11202:521::o;1083:103:53:-;;;;:::i;:::-;-1:-1:-1;;;;;2335:29970:94;;-1:-1:-1;2335:29970:94;13497:18:70;2335:29970:94;;;;;-1:-1:-1;2335:29970:94;;-1:-1:-1;2335:29970:94;;;-1:-1:-1;2335:29970:94;;;13570:14:70;2335:29970:94;;;-1:-1:-1;2335:29970:94;13604:11:70;2335:29970:94;;;-1:-1:-1;2335:29970:94;;;;;;;;;1947:15:77;;2335:29970:94;;:::i;:::-;1947:24:77;;2002:26;;;:::i;:::-;1981:18;;;;:47;;;2061:24;;;:::i;:::-;2038:20;;;;:47;;;2127:24;;;:::i;:::-;2095:29;;;:56;2194:74;2335:29970:94;;;2194:74:77;:::i;:::-;2161:30;;;:107;2300:24;;;:::i;:::-;2278:19;;;:46;;;2335:29970:94;;1038:1:75;;7916:84:49;1038:1:75;7916:84:49;;;;2365:119:77;;;;1083:103:53;2365:190:77;;;;1083:103:53;-1:-1:-1;2586:13:77;;;;;;;13719:24:70;;;;;;;;;;;;;;13745:26;13719:24;13745:26;13719:24;-1:-1:-1;;;;;2335:29970:94;;;12512:18;2335:29970;;;;;;;13719:24:70;13745:26;-1:-1:-1;;;;;2335:29970:94;;;13745:20:70;2335:29970:94;;;;;;;13745:26:70;;;;:::i;:::-;1148:1:53;;;:::i;2601:3:77:-;2663:15;;;;;;2755:33;2663:15;2720:20;2663:15;2335:29970:94;2649:33:77;2663:15;:18;;:15;;;;:18;:::i;2649:33::-;2335:29970:94;:::i;:::-;2720:20:77;2335:29970:94;;;;;;;;;;2720:20:77;2335:29970:94;2755:18:77;;:33;;;;;:::i;:::-;;;:::i;:::-;;2827:23;;;:::i;:::-;2802:48;:19;;;:48;:::i;:::-;2335:29970:94;2932:17:77;1460:31:44;1237:14;1460:31;;2932:17:77;;;:::i;:::-;2335:29970:94;;3059:78:77;;3800:23;2335:29970:94;3800:23:77;;;2335:29970:94;;;;;;3800:69:77;;;;2601:3;3977:660;;;;2601:3;;;;2571:13;2335:29970:94;2571:13:77;;3977:660;2335:29970:94;4236:195:77;2335:29970:94;;4157:23:77;2335:29970:94;4062:56:77;2335:29970:94;;4062:56:77;:::i;:::-;4157:20;;:23;:::i;:::-;2335:29970:94;;2095:29:77;2335:29970:94;4236:195:77;;:::i;:::-;4454:30;;4450:173;;3977:660;;;;;4450:173;4586:17;4545:39;;;;:::i;:::-;4586:17;;:::i;:::-;4450:173;;;;;;;;3800:69;2335:29970:94;;;;;;;:::i;:::-;;;;:::i;:::-;3827:42:77;3800:69;;;;3059:78;3114:8;;;;;;2365:190;2335:29970:94;;;;-1:-1:-1;958:1:75;7916:84:49;1192:1:75;7916:84:49;2335:29970:94;2365:190:77;;;:119;2424:56;;;;;:::i;:::-;:60;;2365:119;;;;13206:573:70;2335:29970:94;;:::i;:::-;1083:103:53;;;:::i;:::-;-1:-1:-1;;;;;2335:29970:94;;-1:-1:-1;2335:29970:94;13497:18:70;2335:29970:94;;;;-1:-1:-1;2335:29970:94;-1:-1:-1;2335:29970:94;;;-1:-1:-1;2335:29970:94;;;13570:14:70;2335:29970:94;;;-1:-1:-1;2335:29970:94;;13604:11:70;2335:29970:94;;;-1:-1:-1;2335:29970:94;;;;;;;;;1947:15:77;;2335:29970:94;;:::i;:::-;1947:24:77;;2002:26;;;:::i;:::-;1981:18;;;;:47;;;2061:24;;;:::i;:::-;2038:20;;;;:47;;;2127:24;;;:::i;:::-;2095:29;;;;;;:56;2194:74;2335:29970:94;;;2194:74:77;:::i;:::-;2161:30;;;:107;2300:24;;;:::i;:::-;2278:19;;;:46;;;2335:29970:94;;38444:19:68;;7916:84:49;38444:19:68;7916:84:49;;;;2365:119:77;;;;13206:573:70;2365:190:77;;;;13206:573:70;-1:-1:-1;2586:13:77;;;;;;;13719:24:70;;;;;;;;;;;;;;13745:26;13719:24;13745:26;13719:24;-1:-1:-1;;;;;2335:29970:94;;;12512:18;2335:29970;;;;;;;13745:26:70;1148:1:53;;:::i;2601:3:77:-;2663:15;;;;;;;;2755:33;2663:15;2720:20;2663:15;2335:29970:94;2649:33:77;2663:15;;:18;:15;:18;:15;;:18;:::i;2720:20::-;2335:29970:94;2755:18:77;;:33;;;;;:::i;:::-;;2827:23;;;:::i;:::-;2802:48;:19;;;:48;:::i;:::-;2335:29970:94;2932:17:77;1237:14:44;1460:31;;2932:17:77;;;:::i;:::-;2335:29970:94;;;;3059:78:77;;3800:23;;2335:29970:94;;;3800:69:77;;;;2601:3;3977:660;;;;2601:3;;;;;;2571:13;2335:29970:94;2571:13:77;;3977:660;2335:29970:94;4236:195:77;2335:29970:94;4157:23:77;2335:29970:94;4062:56:77;2335:29970:94;;4062:56:77;:::i;:::-;4157:20;;:23;:::i;:::-;2335:29970:94;;;4236:195:77;;:::i;:::-;4454:30;;4450:173;;3977:660;;;;;;;4450:173;4586:17;4545:39;;;;:::i;4586:17::-;4450:173;;;;;;3800:69;2335:29970:94;;;;;;;:::i;:::-;;;;:::i;:::-;3827:42:77;3800:69;;;;3059:78;3114:8;;;;;;;;;;2365:190;2335:29970:94;;;;-1:-1:-1;958:1:75;7916:84:49;1192:1:75;7916:84:49;2335:29970:94;2365:190:77;;;:119;2424:56;;;;;:::i;:::-;:60;;2365:119;;;;13206:573:70;2335:29970:94;;:::i;:::-;1083:103:53;;;:::i;:::-;-1:-1:-1;;;;;2335:29970:94;;-1:-1:-1;2335:29970:94;13497:18:70;2335:29970:94;;;;-1:-1:-1;2335:29970:94;-1:-1:-1;2335:29970:94;;;-1:-1:-1;2335:29970:94;;;13570:14:70;2335:29970:94;;;-1:-1:-1;2335:29970:94;;13604:11:70;2335:29970:94;;;-1:-1:-1;2335:29970:94;;;;;;;;;1947:15:77;;2335:29970:94;;:::i;:::-;1947:24:77;;2002:26;;;:::i;:::-;1981:18;;;;:47;;;2061:24;;;:::i;:::-;2038:20;;;;:47;;;2127:24;;;:::i;:::-;2095:29;;;;;;:56;2194:74;2335:29970:94;;;2194:74:77;:::i;:::-;2161:30;;;:107;2300:24;;;:::i;:::-;2278:19;;;:46;;;2335:29970:94;;1038:1:75;;7916:84:49;1038:1:75;7916:84:49;;;;2365:119:77;;;;13206:573:70;2365:190:77;;;;13206:573:70;-1:-1:-1;2586:13:77;;;;;;;13719:24:70;;;;;;;;;;;;;;13745:26;13719:24;13745:26;13719:24;-1:-1:-1;;;;;2335:29970:94;;;12512:18;2335:29970;;;;;;;2601:3:77;2663:15;;;;;;;;2755:33;2663:15;2720:20;2663:15;2335:29970:94;2649:33:77;2663:15;;:18;:15;:18;:15;;:18;:::i;2755:33::-;;2827:23;;;:::i;:::-;2802:48;:19;;;:48;:::i;:::-;2335:29970:94;2932:17:77;1237:14:44;1460:31;;2932:17:77;;;:::i;:::-;2335:29970:94;;;;3059:78:77;;3800:23;;2335:29970:94;;;3800:69:77;;;;2601:3;3977:660;;;;2601:3;;;;;;2571:13;2335:29970:94;2571:13:77;;3977:660;2335:29970:94;4236:195:77;2335:29970:94;4157:23:77;2335:29970:94;4062:56:77;2335:29970:94;;4062:56:77;:::i;4236:195::-;4454:30;;4450:173;;3977:660;;;;;;;4450:173;4586:17;4545:39;;;;:::i;:::-;4586:17;;:::i;:::-;4450:173;;;;;;3800:69;2335:29970:94;;;;;;;:::i;:::-;;;;:::i;:::-;3827:42:77;3800:69;;;;3059:78;3114:8;;;;;;;;;;2365:190;2335:29970:94;;;;-1:-1:-1;958:1:75;7916:84:49;1192:1:75;7916:84:49;2335:29970:94;2365:190:77;;;:119;2424:56;;;;;:::i;:::-;:60;;2365:119;;;;1192:349:53;551:66;2806:53:55;;1316:93:53;;1529:4;3051:52:55;;1192:349:53:o;1316:93::-;1368:30;-1:-1:-1;1368:30:53;;-1:-1:-1;1368:30:53;1547:106;1640:5;551:66;3051:52:55;1547:106:53:o;2786:145:70:-;9187:17:73;2806:53:55;2335:29970:94;2837:88:70;;2786:145::o;2837:88::-;2894:20;-1:-1:-1;2894:20:70;;-1:-1:-1;2894:20:70;3450:119;;3544:17;3450:119;3544:17;:::i;:::-;2335:29970:94;;;;;;3543:18:70;2335:29970:94;-1:-1:-1;2335:29970:94;3543:18:70;;:::i;8289:494:95:-;;;;;8422:32;;;;;:::i;:::-;-1:-1:-1;;8468:37:95;;8464:313;;8289:494;;;;;:::o;8464:313::-;8525:25;;;8521:132;;2335:29970:94;;-1:-1:-1;;;;;2335:29970:94;;;;7477:19:95;;;7473:84;;2335:29970:94;;;7571:21:95;;;7567:87;;7664:17;:33;:17;:24;:17;;;-1:-1:-1;;;;;2335:29970:94;;;7664:11:95;2335:29970:94;;;;;;;7664:17:95;2335:29970:94;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;7664:33:95;2335:29970:94;;8004:60:95;;;;;;2335:29970:94;;;8004:60:95;;-1:-1:-1;;;;;2335:29970:94;;;8004:60:95;;;2335:29970:94;;;;;;;;;;;;;;;8238:38:95;;;;7494:1;2335:29970:94;;;;;8004:60:95;;;;;;;;;8464:313;-1:-1:-1;2335:29970:94;;;;;;;;;;;;;8238:38:95;;;;8464:313;;;;;;;8004:60;;;;;;:::i;:::-;;;;7567:87;7615:28;7494:1;7615:28;-1:-1:-1;;;;;2335:29970:94;;6846:16:70;2335:29970:94;;-1:-1:-1;21464:49:68;7473:84:95;7519:27;7494:1;7519:27;-1:-1:-1;;;;;2335:29970:94;;6846:16:70;2335:29970:94;;-1:-1:-1;21464:49:68;8521:132:95;-1:-1:-1;;;;;8577:61:95;;;;2335:29970:94;8577:61:95;2335:29970:94;;;;;;8577:61:95;;6402:966;;;;;-1:-1:-1;;;;;2335:29970:94;;;;6500:18:95;;;6496:80;;2335:29970:94;;;6590:16:95;;;6586:78;;6696:21;:15;;;-1:-1:-1;;;;;2335:29970:94;;;6696:9:95;2335:29970:94;;;;;;;6696:21:95;2335:29970:94;6731:20:95;;;6727:109;;2335:29970:94;;;6870:21:95;:15;;;-1:-1:-1;;;;;2335:29970:94;;;6696:9:95;2335:29970:94;;;;;;;6870:21:95;2335:29970:94;7095:19:95;:15;;;-1:-1:-1;;;;;2335:29970:94;;;6696:9:95;2335:29970:94;;;;;;;7095:19:95;2335:29970:94;;;;;;;;;7150:32:95;2335:29970:94;;7150:32:95;;;;2335:29970:94;;;;;;;;7150:32:95;;;;7307:54;;;;;2335:29970:94;;;7307:54:95;;-1:-1:-1;;;;;2335:29970:94;;;7307:54:95;;;2335:29970:94;;;;;;;;;;;;;-1:-1:-1;;2335:29970:94;;;-1:-1:-1;2335:29970:94;;;;7307:54:95;2335:29970:94;6727:109:95;6774:51;6516:1;6774:51;-1:-1:-1;;;;;2335:29970:94;;35380:60:68;2335:29970:94;;;;;;;;-1:-1:-1;21464:49:68;6586:78:95;6629:24;6516:1;6629:24;-1:-1:-1;;;;;2335:29970:94;;6846:16:70;2335:29970:94;;-1:-1:-1;21464:49:68;6496:80:95;6541:24;6516:1;6541:24;-1:-1:-1;;;;;2335:29970:94;;6846:16:70;2335:29970:94;;-1:-1:-1;21464:49:68;15723:700;;;;2335:29970:94;;:::i;:::-;;;;;;;;:::i;:::-;16194:29:68;16129;;;2335:29970:94;16194:29:68;;;16377:24;16295:18;2335:29970:94;;16295:18:68;;2335:29970:94;16377:24:68;;;2335:29970:94;16129:29:68;2335:29970:94;;;;;:::i;:::-;;;;:::i;:::-;;;16295:18:68;16031:385;;2335:29970:94;16129:29:68;16031:385;;2335:29970:94;16031:385:68;;;2335:29970:94;16194:29:68;16031:385;;2335:29970:94;16339:10:68;16031:385;;;2335:29970:94;16377:24:68;16031:385;;2335:29970:94;15723:700:68;:::o;5216:1180:95:-;;;-1:-1:-1;;;;;2335:29970:94;;;5298:18:95;;;5294:80;;5409:21;:15;;;-1:-1:-1;;;;;2335:29970:94;;;6696:9:95;2335:29970:94;;;;;;;5409:21:95;2335:29970:94;5444:23:95;;;5440:115;;2335:29970:94;;;5589:21:95;:15;;;-1:-1:-1;;;;;2335:29970:94;;;6696:9:95;2335:29970:94;;;;;;;5589:21:95;2335:29970:94;5681:29:95;:20;;;-1:-1:-1;;;;;2335:29970:94;;;5681:14:95;2335:29970:94;;;;;;;5681:20:95;2335:29970:94;5681:29:95;:::i;:::-;5751:14;;;:::i;:::-;5777:20;;-1:-1:-1;;;;;2335:29970:94;;;5681:14:95;2335:29970:94;;;;;;;5777:20:95;2335:29970:94;;6113:62:95;;;;;;2335:29970:94;;;6113:62:95;;-1:-1:-1;;;;;2335:29970:94;;;6113:62:95;;;2335:29970:94;5314:1:95;2335:29970:94;;;;;;;;;;;;5314:1:95;6349:40;;;;5314:1;2335:29970:94;;;;;6113:62:95;2335:29970:94;6349:40:95;;;;5216:1180::o;5440:115::-;5490:54;5314:1;5490:54;-1:-1:-1;;;;;2335:29970:94;;35380:60:68;2335:29970:94;;;;;;;;-1:-1:-1;21464:49:68;9293:163:70;-1:-1:-1;;;;;2335:29970:94;;9604:15:70;2335:29970:94;9604:15:70;2335:29970:94;;1038:1:75;2335:29970:94;9604:15:70;2335:29970:94;;7916:84:49;;;9367:25:70;9363:87;;9293:163;:::o;9363:87::-;9415:24;9604:15;9415:24;;2335:29970:94;;9604:15:70;9415:24;5894:129;6011:4;5894:129;;;:::i;1418:149:43:-;1500:6;1496:65;;1418:149::o;1496:65::-;1529:21;;;;;;8800:610:46;;;2335:29970:94;;;9122:17:46;2335:29970:94;;;;9122:17:46;;;:::i;:::-;9185:21;;;:::i;:::-;9222:13;9234:1;9237:10;;;;;;9381:22;;;;;8800:610;:::o;9249:3::-;9289:10;2688:41;9289:10;2335:29970:94;9289:10:46;;;:::i;:::-;2335:29970:94;2689:22:46;9327:17;;;;:::i;:::-;2335:29970:94;9346:13:46;;;;:::i;2688:41::-;9268:92;;;;:::i;:::-;2335:29970:94;;9222:13:46;;2335:29970:94;;;;;;;;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;17171:657:74:-;-1:-1:-1;;;;;;17433:291:74;17171:657;;;17433:291;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;;17541:11:74;;;;2335:29970:94;;;;;:::i;:::-;17695:15:74;17541:11;17570:21;;;2335:29970:94;17648:29:74;;;17695:15;;;2335:29970:94;17570:21:74;2335:29970:94;17433:291:74;;;;;;;2335:29970:94;17433:291:74;;;;;;:::i;:::-;;2335:29970:94;;17433:291:74;;;;;;;-1:-1:-1;17433:291:74;;;17171:657;2335:29970:94;;17416:406:74;;17171:657::o;17416:406::-;17765:46;-1:-1:-1;17765:46:74;17433:291;-1:-1:-1;17765:46:74;17433:291;;;;;;;;;;;;;;:::i;:::-;;;;6574:856:77;6819:15;;;;;2335:29970:94;7033:13:77;-1:-1:-1;7048:13:77;;;;;;6574:856;;;;;:::o;7063:3::-;38444:19:68;7120:18:77;8416:147;7120:18;1237:14:44;7107:35:77;7120:21;:18;;;;;:21;:::i;7107:35::-;7082:19;;;;;:60;:19;;;:60;:::i;:::-;2335:29970:94;;-1:-1:-1;2335:29970:94;;;;-1:-1:-1;2335:29970:94;;1460:31:44;8058:20:77;;:48;:20;;;;;:48;:::i;:::-;2335:29970:94;8522:31:77;8466:30;:42;:30;;;;;:42;:::i;:::-;2335:29970:94;8522:19:77;;:31;:::i;:::-;2335:29970:94;8416:147:77;;:::i;:::-;8372:191;:29;;;;;:191;:::i;:::-;2335:29970:94;;7033:13:77;;6574:856;6819:15;;;;;2335:29970:94;7033:13:77;-1:-1:-1;7048:13:77;;;;;;6574:856;;;;;:::o;7063:3::-;2335:29970:94;7120:18:77;8416:147;7120:18;1237:14:44;7107:35:77;7120:21;:18;;;;;:21;:::i;7107:35::-;7082:19;;;;;:60;:19;;;:60;:::i;:::-;2335:29970:94;;-1:-1:-1;2335:29970:94;;;;-1:-1:-1;2335:29970:94;;1460:31:44;8058:20:77;;:48;:20;;;;;:48;:::i;:::-;2335:29970:94;8522:31:77;8466:30;:42;:30;;;;;:42;:::i;8522:31::-;2335:29970:94;8416:147:77;;:::i;:::-;8372:191;:29;;;;;:191;:::i;:::-;2335:29970:94;;7033:13:77;;2335:29970:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;41786:8110:68:-;;1083:103:53;;:::i;:::-;2335:29970:94;;;;:::i;:::-;42245:15:68;;;;;42293:31;42245:15;;2335:29970:94;;;;42293:31:68;:::i;:::-;42434;42480:11;;;2335:29970:94;;;;;;:::i;:::-;;;;:::i;:::-;42480:47:68;;42557:21;;;;2335:29970:94;;42609:31:68;2335:29970:94;;42609:31:68;:::i;:::-;42735:29;42675:175;42735:29;42480:11;42735:29;;;42782:25;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;42782:25:68;42675:175;;:::i;:::-;9851:16:73;43521:65:68;9851:16:73;2806:53:55;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;;9702:26:73;;2574:386:47;-1:-1:-1;2335:29970:94;;;;-1:-1:-1;2335:29970:94;;-1:-1:-1;2335:29970:94;;;;-1:-1:-1;2335:29970:94;2806:53:55;2574:386:47;;43521:65:68;43517:419;;42476:3712;46216:21;;;2335:29970:94;46202:35:68;;;46198:128;;46360:11;;;;;;;:::i;:::-;42245:15;48030:32;;;2335:29970:94;46425:3:68;2335:29970:94;;46403:20:68;;;;;46569:21;;;;;:::i;:::-;2335:29970:94;46632:17:68;;;:::i;:::-;46757:16;;;;:::i;:::-;2335:29970:94;46757:16:68;;47078:30;47137:22;47078:30;47137:19;47078:33;:30;;47012:169;47078:30;;;:33;:::i;47012:169::-;47203:31;;;;;:::i;:::-;2335:29970:94;46753:737:68;47533:18;;:15;;;:18;:::i;:::-;2335:29970:94;47632:20:68;;:23;:20;;;:23;:::i;:::-;2335:29970:94;47617:38:68;;47613:147;;47855:12;;;48675:75;47855:12;;;;48702:47;47855:12;48010:236;47855:12;48066:180;47855:12;;2335:29970:94;47855:12:68;;;;48768:19;47855:12;;:::i;48010:236::-;2335:29970:94;48675:23:68;:20;2335:29970:94;48675:20:68;;;:23;:::i;:::-;2335:29970:94;;;48702:47:68;;:::i;:::-;48675:75;;:::i;48768:19::-;2335:29970:94;46388:13:68;;47613:147;47721:20;:23;:20;47682:63;47721:20;;:23;:::i;:::-;2335:29970:94;47682:63:68;2335:29970:94;47682:63:68;-1:-1:-1;;;;;2335:29970:94;;;35380:60:68;2335:29970:94;;;;;;;;46753:737:68;47455:16;;;;;;:::i;:::-;2335:29970:94;46753:737:68;;46403:20;;;;;;;;;;;48912:8;46403:20;;;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;48912:8:68;49694:195;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;;49086:11:68;49111;49086;42245:15;49086:11;;2335:29970:94;;;;-1:-1:-1;;;;;2335:29970:94;;;;49099:10:68;49111:11;;:::i;:::-;49138:17;;:::i;:::-;49134:189;;46383:2429;49634:11;2335:29970:94;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;-1:-1:-1;;;;;2335:29970:94;49634:11:68;;:::i;:::-;49799:25;2335:29970:94;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;:::i;49799:25:68:-;2335:29970:94;49694:195:68;-1:-1:-1;;;;;2335:29970:94;;;;:::i;:::-;;;46216:21:68;2335:29970:94;;;;;;;49694:195:68;;;:::i;49134:189::-;49300:11;2335:29970:94;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;-1:-1:-1;;;;;2335:29970:94;49300:11:68;;:::i;:::-;49134:189;;46198:128;46260:55;2335:29970:94;46260:55:68;2335:29970:94;;;;;;;;-1:-1:-1;21464:49:68;43517:419;2335:29970:94;;;43634:52:68;2335:29970:94;;;;;;;;43634:52:68;:::i;:::-;43709:13;2335:29970:94;43746:3:68;2335:29970:94;;43724:20:68;;;;;43793:21;;43861:42;43793:21;;43861:42;43886:17;43793:21;;;:46;2335:29970:94;43793:21:68;;;;;:::i;:::-;2335:29970:94;43793:46:68;:::i;:::-;43773:66;;;;:::i;43886:17::-;2335:29970:94;43861:42:68;;;;:::i;:::-;2335:29970:94;43861:42:68;:::i;:::-;;;:::i;:::-;2335:29970:94;;43709:13:68;;43724:20;;;;;;;;;;;;43517:419;;42476:3712;2335:29970:94;;43971:41:68;2335:29970:94;;;;;:::i;:::-;;;;:::i;:::-;43956:56:68;43971:41;;44028:57;2335:29970:94;;44028:57:68;:::i;:::-;44115:21;;;2335:29970:94;44150:42:68;;44259:20;;44295:434;44353:376;44259:20;;44115:21;44226:54;2335:29970:94;44259:20:68;;;44226:54;:::i;:::-;44206:17;;2335:29970:94;;;;44445:29:68;42480:11;44445:29;;;2335:29970:94;44689:22:68;2335:29970:94;44615:52:68;44568:25;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;44689:22:68;44353:376;;:::i;:::-;2335:29970:94;;;44295:434:68;;;:::i;:::-;2335:29970:94;42476:3712:68;;43952:2236;44765:42;2335:29970:94;;;;;;;;:::i;:::-;;;;:::i;:::-;44750:57:68;44765:42;;44823:57;2335:29970:94;;44823:57:68;:::i;:::-;45161:358;44896:42;2335:29970:94;45005:20:68;;;45075:39;44972:54;45005:20;;44972:54;:::i;:::-;44952:17;;;2335:29970:94;;;;45075:20:68;:39;:::i;:::-;2335:29970:94;45040:74:68;2335:29970:94;;45040:74:68;;:::i;:::-;2335:29970:94;45233:29:68;45315:37;42480:11;45233:29;;;2335:29970:94;;45315:37:68;;;:::i;:::-;2335:29970:94;45413:52:68;45370:25;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;45370:25:68;2335:29970:94;;45413:52:68;:::i;:::-;2335:29970:94;45483:22:68;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;45483:22:68;45161:358;;:::i;:::-;45129:390;;42476:3712;;44746:1442;2335:29970:94;;45555:26:68;2335:29970:94;;;;;:::i;:::-;;;;:::i;:::-;45540:41:68;45555:26;;45597:59;2335:29970:94;;45597:59:68;:::i;:::-;2335:29970:94;45819:68:68;:27;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;45819:68:68;45941:21;;;;2335:29970:94;46027:29:68;42480:11;46027:29;;;46078:15;;;;;;2335:29970:94;45819:292:68;45941:21;2335:29970:94;45819:292:68;;;;;;;2335:29970:94;45819:292:68;;45909:10;45819:292;;;;:::i;:::-;;;;;;;;;;2335:29970:94;;;;;;;45819:292:68;;;45536:652;45755:356;;;;42476:3712;;45819:292;;;;;;;;;;;2335:29970:94;45819:292:68;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;45536:652;46149:28;2335:29970:94;46149:28:68;;2335:29970:94;46149:28:68;2335:29970:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;18837:1504:74:-;;;;;;;;2335:29970:94;;;;-1:-1:-1;;;;;2335:29970:94;;;;19361:11:74;;;;2335:29970:94;;;;;:::i;:::-;19361:11:74;19470:29;;;19513:15;;;;;2335:29970:94;;;19266:272:74;;;;;2335:29970:94;19266:272:74;;;;;;;;;:::i;:::-;;2335:29970:94;-1:-1:-1;;;;;2335:29970:94;19266:272:74;;;-1:-1:-1;19266:272:74;;;;;;;;;-1:-1:-1;;;19266:272:74;;;18837:1504;2335:29970:94;;;;19553:76:74;;18837:1504;19549:159;;1792:1:75;;7916:84:49;958:1:75;7916:84:49;;2335:29970:94;19806:94:74;;19915:13;;-1:-1:-1;19915:13:74;;-1:-1:-1;19915:13:74;1792:1:75;;;19910:382:74;20302:32;;;;18837:1504;:::o;19968:3::-;2335:29970:94;;19930:36:74;;;;;19991:28;;;;:::i;:::-;2335:29970:94;;20022:20:74;;;:23;:20;;;:23;:::i;:::-;2335:29970:94;-1:-1:-1;19987:295:74;;-1:-1:-1;2335:29970:94;;19968:3:74;19915:13;;19987:295;20226:23;20136:15;20176:28;20136:15;:18;;:15;;;20072:195;20136:15;;;:18;:::i;:::-;20176:28;;:::i;20226:23::-;2335:29970:94;20072:195:74;-1:-1:-1;20072:195:74;-1:-1:-1;;;;;2335:29970:94;;;35380:60:68;2335:29970:94;;;;;;;;19930:36:74;;;19549:159;19652:45;-1:-1:-1;19652:45:74;19266:272;-1:-1:-1;19652:45:74;19553:76;2335:29970:94;;;;;19573:56:74;;19553:76;;19266:272;;;;;;;;;-1:-1:-1;19266:272:74;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;1083:103:53;-1:-1:-1;1083:103:53;;;;;;;:::i;:::-;2335:29970:94;;:::i;:::-;;;;;;;:::i;:::-;;;;:::i;:::-;19191:41:68;19187:325;;1083:103:53;19545:34:68;;;;;;2335:29970:94;;19545:34:68;:::i;:::-;19745:20;19735:54;19745:20;;;2335:29970:94;19735:38:68;:31;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;19735:38:68;2335:29970:94;;;19735:54:68;;;;;;2335:29970:94;19735:54:68;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;19735:54:68;;;1083:103:53;19708:81:68;;19823:24;;;:::i;:::-;2335:29970:94;;;;;:::i;:::-;;;;:::i;:::-;20227:41:68;;20504:29;2335:29970:94;20504:29:68;;2335:29970:94;;;20661:620:68;20726:30;;;;21207:60;:39;20726:50;20757:18;;;2335:29970:94;;;20726:50:68;;:::i;:::-;2335:29970:94;21207:19:68;;;;;2335:29970:94;;21207:39:68;;:::i;20661:620::-;21327:30;;;;2335:29970:94;21296:83:68;;;21413:24;21207:19;21413:24;;2335:29970:94;21398:39:68;;;21394:134;;20223:2688;;2335:29970:94;22995:23:68;;2335:29970:94;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;23020:11:68;;;;:::i;:::-;23056:24;;2335:29970:94;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;23082:12:68;;;;:::i;:::-;2335:29970:94;;;;-1:-1:-1;;;;;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;23379:215:68;;;;;:::i;:::-;23317:28;;;;;23347;2335:29970:94;23347:28:68;2335:29970:94;;;;;;;23056:24:68;23726:20;;;;;;;:39;;;;:::i;:::-;2335:29970:94;23726:53:68;;;;:::i;:::-;2335:29970:94;;23726:84:68;;;:::i;:::-;23824:19;;;;:::i;:::-;23909:18;;2335:29970:94;;;23941:20:68;;;;:40;;;;:::i;:::-;2335:29970:94;23941:55:68;;;;:::i;:::-;24010:19;;;;:::i;:::-;2335:29970:94;;-1:-1:-1;;;;;2335:29970:94;;;;;12512:18;2335:29970;;;;;24358:20:68;;;2335:29970:94;;24358:39:68;;;:::i;:::-;2335:29970:94;24411:29:68;;;;;;2335:29970:94;;24411:48:68;;;:::i;:::-;2335:29970:94;24310:159:68;;;:::i;:::-;2335:29970:94;;24276:31:68;;;2335:29970:94;;;;;;;;;;24276:31:68;2335:29970:94;24562:20:68;2335:29970:94;;24562:40:68;;;:::i;:::-;2335:29970:94;24616:29:68;;2335:29970:94;;24616:49:68;;;:::i;:::-;2335:29970:94;24514:161:68;;;:::i;:::-;2335:29970:94;;24479:32:68;;2335:29970:94;;;;;;;;;;24479:32:68;2335:29970:94;;;;;;23056:24:68;24901:27;;;2335:29970:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;;;24723:257:68;;2335:29970:94;;24723:257:68;1148:1:53;;;;;;:::i;21394:134:68:-;21464:49;-1:-1:-1;21464:49:68;2335:29970:94;;;;;;;-1:-1:-1;21464:49:68;20223:2688;22171:27;;;;;22120:150;22171:27;22285:61;22171:27;;2335:29970:94;5832:87:50;;;;;;;;22120:150:68;;;:::i;:::-;2335:29970:94;;;;22285:61:68;:::i;:::-;22537:30;22474:182;22537:49;:30;;;;2335:29970:94;;22537:49:68;;:::i;:::-;2335:29970:94;22604:38:68;:19;;;;2335:29970:94;;22604:38:68;;:::i;22474:182::-;22723:30;;;;2335:29970:94;22671:83:68;;22787:24;22604:19;22787:24;;2335:29970:94;22773:38:68;;;22769:132;;20223:2688;;;19735:54;;;;;;;;;;;;;;;:::i;:::-;;;;;19187:325;19347:34;;;19430:71;19347:69;2335:29970:94;;19388:27:68;;;2335:29970:94;19347:69:68;;:::i;19430:71::-;2335:29970:94;;19187:325:68;;2335:29970:94;;;;;;;-1:-1:-1;2335:29970:94;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;1644:900:38;;1796:40;1237:14:44;1460:31;;1796:40:38;:::i;:::-;1847:37;-1:-1:-1;2335:29970:94;1616:3:44;2335:29970:94;1898:37:38;1894:474;;1644:900;2486:46;;2536:1;2486:46;;;;:::i;:::-;2335:29970:94;1644:900:38;:::o;1894:474::-;-1:-1:-1;;;;;2335:29970:94;;;;2287:59:38;2335:29970:94;;;2287:59:38;;;;;2335:29970:94;2287:59:38;;;;;2335:29970:94;;2287:59:38;;;;;;;:70;2486:46;2287:59;2536:1;2287:59;-1:-1:-1;2287:59:38;;;1894:474;2287:70;;:::i;:::-;1894:474;;;;;;2287:59;;;;;;;;;;;;;;:::i;:::-;;;;19669:4:33;;;;;;;:::o;:::-;;:::i;6992:619:76:-;;19917:10:33;7292:26:76;;7288:97;;19669:4:33;;;2335:29970:94;19627:2:33;2335:29970:94;9400:76:49;;2539:209;;2335:29970:94;2539:209:49;;;;6992:619:76;:::o;9400:76:49:-;9450:15;-1:-1:-1;9450:15:49;;-1:-1:-1;9450:15:49;15171:546:68;;15553:65;15658:52;15171:546;;;;2335:29970:94;;:::i;:::-;15380:15:68;;;15452:58;15380:15;;;;;2335:29970:94;15364:57:68;-1:-1:-1;;;;;15397:23:68;;;;;2335:29970:94;;15364:57:68;;:::i;:::-;2335:29970:94;;15468:15:68;15485:24;;;;2335:29970:94;;15452:58:68;;:::i;:::-;15380:15;15431:18;;2335:29970:94;15553:65:68;:::i;:::-;15397:23;15521:29;;2335:29970:94;;15658:52:68;:::i;:::-;15485:24;15628:27;;2335:29970:94;15171:546:68:o;9557:350:74:-;9678:44;9557:350;;2335:29970:94;-1:-1:-1;;;;;;2335:29970:94;;;;9678:44:74;;;;;;;2335:29970:94;9678:44:74;;2335:29970:94;9678:44:74;;;2335:29970:94;;;;;;:::i;:::-;;;;;;;9678:44:74;2335:29970:94;;9678:44:74;;;;;;;-1:-1:-1;9678:44:74;;;9557:350;2335:29970:94;;9674:227:74;;9557:350::o;9674:227::-;9855:35;-1:-1:-1;9855:35:74;9678:44;-1:-1:-1;9855:35:74;9678:44;;;;;;;;;;;;;;:::i;:::-;;;;2335:29970:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;8443:856:74:-;;;2335:29970:94;;8443:856:74;;-1:-1:-1;;;;;2335:29970:94;;;;;8709:136:74;;;;;;;2335:29970:94;8709:136:74;;2335:29970:94;8709:136:74;;;2335:29970:94;;;;;;:::i;:::-;;;;;;;;;;;8709:136:74;2335:29970:94;;8709:136:74;;;;;;;-1:-1:-1;;;8709:136:74;;;8443:856;2335:29970:94;;8856:93:74;;19917:10:33;9153:38:74;;9149:109;;8443:856;:::o;8856:93::-;8899:39;-1:-1:-1;8899:39:74;8709:136;-1:-1:-1;8899:39:74;8709:136;;;;;;2335:29970:94;8709:136:74;2335:29970:94;8709:136:74;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;2335:29970:94;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;;;;;;;:::i;10826:2303:74:-;;;;;;;2335:29970:94;;;;;:::i;:::-;;;;:::i;:::-;11281:41:74;;11338:25;;;;2335:29970:94;11281:177:74;;;2335:29970:94;;;;;;:::i;:::-;11653:23:74;;;;;;;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;;11704:24:74;;;;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;;11876:29:74;;;;;;2335:29970:94;;11876:44:74;;;:::i;:::-;2335:29970:94;11963:29:74;;11993:14;;;2335:29970:94;11963:45:74;;;:::i;:::-;2335:29970:94;12190:20:74;11993:14;12190:20;;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;;12238:24:74;;;;2335:29970:94;;;:::i;:::-;11566:711:74;;;;;:::i;:::-;-1:-1:-1;;;;;2335:29970:94;11993:14:74;11566:711;;2335:29970:94;-1:-1:-1;;;;;2335:29970:94;11566:711:74;;;2335:29970:94;11704:24:74;11566:711;;2335:29970:94;11876:29:74;11566:711;;2335:29970:94;11566:711:74;;;2335:29970:94;12238:24:74;11566:711;;2335:29970:94;11566:711:74;;;2335:29970:94;11566:711:74;;;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;11566:711:74;;;2335:29970:94;-1:-1:-1;;;;;2335:29970:94;11566:711:74;;;2335:29970:94;11566:711:74;;;2335:29970:94;;;11527:760:74;;;;;2335:29970:94;11527:760:74;;;;;;;;;:::i;:::-;;2335:29970:94;-1:-1:-1;;;;;2335:29970:94;11527:760:74;;2335:29970:94;11527:760:74;;;;;;;2335:29970:94;;;11527:760:74;;;11281:177;2335:29970:94;;;12298:188:74;;958:1:75;7916:84:49;1792:1:75;7916:84:49;2335:29970:94;12584:100:74;;2335:29970:94;;;;;;:::i;:::-;;;;:::i;:::-;12712:41:74;:103;;;11281:177;12711:227;;;;11281:177;12694:380;;13084:38;10826:2303;:::o;12694:380::-;11566:711;13038:24;2335:29970:94;12970:93:74;2335:29970:94;12970:93:74;2335:29970:94;;;;;;;;-1:-1:-1;21464:49:68;12711:227:74;2335:29970:94;1792:1:75;2335:29970:94;;;;;:::i;:::-;;;;:::i;:::-;12833:42:74;:104;;12711:227;12833:104;12913:24;11566:711;12913:24;;2335:29970:94;12879:58:74;;12711:227;;12712:103;12791:24;11566:711;12791:24;;2335:29970:94;12757:58:74;;12712:103;;12584:100;12647:26;;;;:::o;12298:188::-;12441:34;2335:29970:94;12441:34:74;11527:760;2335:29970:94;12441:34:74;11527:760;;;;;;;;;;;-1:-1:-1;11527:760:74;;;;;;:::i;:::-;;;;;;;11281:177;11432:25;;;;2335:29970:94;11281:177:74;;;;;;79658:166:68;79740:16;79736:82;;79658:166;:::o;79736:82::-;79795:11;;;:::i;3804:110:70:-;3891:15;;3804:110;3891:15;:::i;10464:315::-;-1:-1:-1;;;;;2335:29970:94;;;;;-1:-1:-1;2335:29970:94;10575:13:70;2335:29970:94;;;;-1:-1:-1;2335:29970:94;;;;;10575:46:70;;;10571:202;;10464:315;;:::o;10571:202::-;10711:51;-1:-1:-1;10711:51:70;;2335:29970:94;;;;-1:-1:-1;10711:51:70;56532:199:68;;56639:20;-1:-1:-1;56626:99:68;;56532:199;:::o;56626:99::-;-1:-1:-1;;;;;56682:32:68;;;;2335:29970:94;56682:32:68;2335:29970:94;;56682:32:68;;2335:29970:94;;;;;;;;;;;;;;;;;;;;;;;;:::o;57133:8001:68:-;;57944:44;57133:8001;-1:-1:-1;;;;;2335:29970:94;;57972:15:68;;;;:::i;:::-;2335:29970:94;;57944:44:68;2335:29970:94;57944:44:68;;;;;;;;;;;2335:29970:94;;;;;;;;57944:44:68;;;;;;;;;;:48;:44;2335:29970:94;57944:44:68;;;57133:8001;57944:48;;:::i;:::-;57889:104;;58607:34;;;-1:-1:-1;;;;;2335:29970:94;;;58607:20:68;2335:29970:94;;;;;;;58607:34:68;2335:29970:94;58919:17:68;;;:::i;:::-;58915:109;;2335:29970:94;;;;;;;;1616:3:44;2335:29970:94;59038:54:68;;;;;59034:5982;59038:54;;;2335:29970:94;;;59640:34:68;2335:29970:94;;65053:18:68;2335:29970:94;59474:152:68;2335:29970:94;59526:51:68;2335:29970:94;1237:14:44;2335:29970:94;65082:45:68;2335:29970:94;;1616:3:44;2335:29970:94;;1460:31:44;;59526:51:68;:::i;:::-;59474:152;:::i;:::-;59640:34;;;-1:-1:-1;;;;;2335:29970:94;;;58607:20:68;2335:29970:94;;;;;;;59640:34:68;2335:29970:94;65053:18:68;:::i;:::-;65082:45;:::i;59034:5982::-;61217:57;;;;;;;;61319:71;61320:57;61217;;;;:::i;:::-;61320:29;;;:::i;:::-;:57;:::i;:::-;61319:71;:::i;:::-;61460:24;;;;;;:::i;:::-;2335:29970:94;;;61527:61:68;;57944:44;61527:61;;2335:29970:94;;;61582:4:68;2335:29970:94;;;;;61582:4:68;2335:29970:94;;;-1:-1:-1;61527:61:68;;;;;;;64954:34;61527:61;64849:77;61527:61;64849:58;61527:61;;64701:239;61527:61;65082:45;61527:61;;65053:18;61527:61;;;;;;;;2335:29970:94;61527:61:68;;;59034:5982;63719:54;;64753:51;63719:54;;64065:21;63719:54;;;;;64753:78;63719:54;;1237:14:44;63719:54:68;;:::i;:::-;64065:21;:::i;:::-;1460:31:44;64753:51:68;:::i;:::-;:78;:::i;:::-;64849:58;;:::i;:77::-;64701:239;;:::i;61527:61::-;64753:78;61527:61;;1237:14:44;61527:61:68;;;64753:51;61527:61;;;;64065:21;61527:61;;;-1:-1:-1;61527:61:68;;;;;;:::i;:::-;;;;;;;;;;;;58915:109;58952:61;-1:-1:-1;58952:61:68;;-1:-1:-1;;;;58952:61:68:o;57944:44::-;;;;;;;;;;;;;;:::i;:::-;;;;57133:8001;;58510:41;57133:8001;;-1:-1:-1;;;;;2335:29970:94;;58535:15:68;;;;:::i;:::-;2335:29970:94;;;58510:41:68;;;;;;;;;;;;;2335:29970:94;;;;;;;;58510:41:68;;;;;;;;;;:45;:41;57385:1195;58510:41;;;57133:8001;58510:45;;:::i;:::-;58468:101;;;;58607:34;;;-1:-1:-1;;;;;2335:29970:94;;;58607:20:68;2335:29970:94;;;;;;;58607:34:68;2335:29970:94;58919:17:68;;;:::i;:::-;58915:109;;2335:29970:94;;;;;;;;;;1616:3:44;2335:29970:94;59038:54:68;;;;;59034:5982;59038:54;;;2335:29970:94;;;;59640:34:68;2335:29970:94;;65053:18:68;2335:29970:94;59474:152:68;2335:29970:94;59526:51:68;2335:29970:94;1237:14:44;2335:29970:94;65082:45:68;2335:29970:94;;1616:3:44;2335:29970:94;;1460:31:44;;59526:51:68;:::i;59034:5982::-;62504:54;;;;;;;;62600:66;62601:52;62504:54;;;;:::i;:::-;62601:27;;;:::i;:::-;:52;:::i;62600:66::-;2335:29970:94;;62919:47:68;;;58510:41;62919:47;;2335:29970:94;;;;62919:47:68;2335:29970:94;;;62919:47:68;;;;;;;63322:24;62919:47;57385:1195;62919:47;;;59034:5982;63322:24;;;;:::i;:::-;2335:29970:94;;;63393:55:68;;58510:41;63393:55;;2335:29970:94;;;63442:4:68;2335:29970:94;;;;;63442:4:68;2335:29970:94;;;-1:-1:-1;63393:55:68;;;;;;;;64954:34;63393:55;64849:77;63393:55;64849:58;63393:55;;64753:78;63393:55;;;65082:45;63393:55;64701:239;63393:55;;65053:18;63393:55;;;;;57385:1195;63393:55;;;59034:5982;63719:54;;1237:14:44;63719:54:68;;;;;;64753:51;63719:54;;64065:21;63719:54;;:::i;63393:55::-;64753:51;63393:55;;;;1237:14:44;63393:55:68;;;;64065:21;63393:55;;;-1:-1:-1;63393:55:68;;;;;;:::i;:::-;;;;;;;;;;62919:47;;;;;;;;;;;;;;:::i;:::-;;;;58915:109;58952:61;-1:-1:-1;58952:61:68;-1:-1:-1;58952:61:68;;-1:-1:-1;;;;;58952:61:68:o;58510:41::-;;;;;;;;;;;;;;:::i;:::-;;;;57133:8001;;;;2335:29970:94;;;:::i;:::-;57389:25:68;;;;;;57944:44;;57972:15;;;:::i;57944:44::-;;2335:29970:94;-1:-1:-1;;;;;2335:29970:94;;57944:44:68;;;;;;:48;:44;2335:29970:94;57944:44:68;;;:48;;:::i;:::-;57889:104;57385:1195;;58607:34;;-1:-1:-1;;;;;2335:29970:94;;;58607:20:68;2335:29970:94;;;;;;;58607:34:68;2335:29970:94;58919:17:68;;;:::i;:::-;58915:109;;2335:29970:94;;;;;;1616:3:44;2335:29970:94;;;;59038:54:68;;;;;2335:29970:94;;;;65053:18:68;2335:29970:94;59474:152:68;2335:29970:94;59526:51:68;-1:-1:-1;;;;;2335:29970:94;1237:14:44;2335:29970:94;65082:45:68;2335:29970:94;1616:3:44;2335:29970:94;;1460:31:44;;59526:51:68;:::i;59474:152::-;59640:34;;;;-1:-1:-1;;;;;2335:29970:94;;;58607:20:68;2335:29970:94;;;;;;;65053:18:68;2335:29970:94;65082:45:68;:::i;59034:5982::-;60078:32;;;;2335:29970:94;60078:32:68;;;2335:29970:94;:::i;:::-;60246:25:68;;;61319:71;61320:57;61217;;;;:::i;:::-;61320:29;;;:::i;61319:71::-;2335:29970:94;-1:-1:-1;;;;;2335:29970:94;;61460:24:68;;;;;;:::i;:::-;2335:29970:94;;;61527:61:68;;;;;2335:29970:94;;;61582:4:68;2335:29970:94;;;;;61527:61:68;;2335:29970:94;;;;;;-1:-1:-1;;61527:61:68;;;;;;64701:239;61527:61;;64849:77;61527:61;64849:58;-1:-1:-1;;;;;61527:61:68;;;;;65082:45;61527:61;;;64065:21;61527:61;65053:18;61527:61;64753:51;61527:61;64753:78;61527:61;1237:14:44;61527:61:68;2335:29970:94;61527:61:68;;;60242:3221;61503:85;60242:3221;;;;2335:29970:94;63719:54:68;;;;;:::i;61527:61::-;;;;;;;;;;;;;;:::i;:::-;;;;60242:3221;62504:54;;62600:66;62601:52;62504:54;;;;:::i;:::-;62601:27;;;:::i;62600:66::-;2335:29970:94;;;62919:47:68;;;;;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;62919:47:68;;2335:29970:94;;;62919:47:68;2335:29970:94;;;;62919:47:68;;;;;;63322:24;62919:47;2335:29970:94;62919:47:68;;;60242:3221;63322:24;;;;:::i;:::-;2335:29970:94;;;63393:55:68;;62919:47;63393:55;;2335:29970:94;;;63442:4:68;2335:29970:94;;;;;;;;;;;;;-1:-1:-1;;63393:55:68;;;;;;;65082:45;63393:55;64849:77;63393:55;64849:58;63393:55;;;-1:-1:-1;;;;;63393:55:68;;1237:14:44;63393:55:68;;;;;;;65053:18;63393:55;;64753:51;63393:55;64701:239;63393:55;;64753:78;63393:55;64065:21;63393:55;2335:29970:94;63393:55:68;;;60242:3221;63366:82;;60242:3221;;;;;63393:55;;;;;;-1:-1:-1;63393:55:68;;;;;;:::i;:::-;;;;;62919:47;;;;;;;;;;;;;;:::i;:::-;;;;58915:109;-1:-1:-1;58952:61:68;;-1:-1:-1;;;58952:61:68:o;57944:44::-;;;;;;;;;;;;;;:::i;57385:1195::-;58510:41;;58535:15;;;:::i;:::-;2335:29970:94;;58510:41:68;;;;2335:29970:94;58510:41:68;;;;;2335:29970:94;;;;;;;;58510:41:68;;2335:29970:94;-1:-1:-1;;;;;2335:29970:94;;58510:41:68;;;;;;:45;:41;2335:29970:94;58510:41:68;;;:45;;:::i;:::-;57385:1195;;;58510:41;;;;;;;;;;;;;;:::i;65540:6987::-;;;66925:45;65540:6987;;-1:-1:-1;;;;;2335:29970:94;;66954:15:68;;;;:::i;:::-;2335:29970:94;;66925:45:68;2335:29970:94;66925:45:68;;;;;;;;;;;2335:29970:94;;;;;;;;66925:45:68;;;;;;;;;;:49;:45;65794:1205;66925:45;;;:49;;:::i;:::-;66883:105;;;67026:34;;;-1:-1:-1;;;;;2335:29970:94;;;58607:20:68;2335:29970:94;;;;;;;67026:34:68;2335:29970:94;67336:17:68;;;:::i;:::-;67332:109;;1237:14:44;;;;;;;;;1460:31;;;;67455:53:68;;;;;67451:4958;67455:53;;;2335:29970:94;;;72419:40:68;2335:29970:94;67880:149:68;2335:29970:94;;68043:34:68;2335:29970:94;;67963:52:68;2335:29970:94;72500:19:68;2335:29970:94;;;1616:3:44;2335:29970:94;67963:52:68;:::i;:::-;1460:31:44;;2335:29970:94;67880:149:68;:::i;67451:4958::-;70822:57;;;;;;;;70924:72;70925:58;70822:57;;;;:::i;:::-;70925:30;;;:::i;70924:72::-;2335:29970:94;;;71038:77:68;;66925:45;71038:77;;2335:29970:94;;;71094:4:68;2335:29970:94;;;;;;;;;;;;;;71094:4:68;2335:29970:94;;;-1:-1:-1;2335:29970:94;71038:77:68;;;;;;;72347:34;71038:77;72243:76;71038:77;72419:40;71038:77;;;72500:19;71038:77;;;;72094:239;71038:77;;;65794:1205;71038:77;;;67451:4958;71423:21;;;72146:57;71423:21;;;;72243:52;71423:21;;72146:79;71423:21;;;:::i;:::-;72146:57;:::i;:79::-;2335:29970:94;1616:3:44;2335:29970:94;72243:52:68;:::i;71038:77::-;72243:52;71038:77;;;;72146:79;71038:77;;;72146:57;71038:77;;;71423:21;71038:77;;;-1:-1:-1;71038:77:68;;;;;;:::i;:::-;;;;;;;;;;;;;67332:109;67369:61;-1:-1:-1;67369:61:68;-1:-1:-1;67369:61:68;;-1:-1:-1;;;;67369:61:68:o;66925:45::-;;;;;;;;;;;;;;:::i;65540:6987::-;;66349:43;65540:6987;;;;-1:-1:-1;;;;;2335:29970:94;;66376:15:68;;;:::i;:::-;2335:29970:94;;66349:43:68;2335:29970:94;66349:43:68;;;;;;;;;;;2335:29970:94;;;;;;;;66349:43:68;;;;;;;;;;:47;:43;2335:29970:94;66349:43:68;;;:47;;:::i;:::-;66294:103;;67026:34;;;-1:-1:-1;;;;;2335:29970:94;;;58607:20:68;2335:29970:94;;;;;;;67026:34:68;2335:29970:94;67336:17:68;;;:::i;:::-;67332:109;;-1:-1:-1;1237:14:44;;;;;;;;;1460:31;;;67455:53:68;;;;;2335:29970:94;;;;;67880:149:68;2335:29970:94;;72419:40:68;2335:29970:94;67963:52:68;72500:19;2335:29970:94;;;68043:34:68;2335:29970:94;1616:3:44;2335:29970:94;67963:52:68;:::i;67451:4958::-;69588:54;;;;;;;;69684:65;69685:51;69588:54;;;;:::i;69684:65::-;2335:29970:94;;;69794:72:68;;66349:43;69794:72;;2335:29970:94;;;69845:4:68;2335:29970:94;;;;;;;;;;;;;;69845:4:68;2335:29970:94;;;-1:-1:-1;2335:29970:94;69794:72:68;;;;;;;72347:34;69794:72;72243:76;69794:72;72243:52;69794:72;;;;72146:57;72500:19;69794:72;;72094:239;69794:72;;;72419:40;69794:72;;;;;;;72146:79;69794:72;2335:29970:94;69794:72:68;;;67451:4958;71423:21;;;;;;;;:::i;69794:72::-;71423:21;69794:72;;;;;;;;;;-1:-1:-1;69794:72:68;;;;;;:::i;:::-;;;;;;;67332:109;67369:61;-1:-1:-1;;;;;67369:61:68:o;65540:6987::-;;;2335:29970:94;;;:::i;:::-;65798:25:68;;;;;;;66349:43;;66376:15;;;:::i;66349:43::-;;2335:29970:94;-1:-1:-1;;;;;2335:29970:94;;66349:43:68;;;;;;:47;:43;2335:29970:94;66349:43:68;;;:47;;:::i;:::-;66294:103;65794:1205;;67026:34;;-1:-1:-1;;;;;2335:29970:94;;;58607:20:68;2335:29970:94;;;;;;;67026:34:68;2335:29970:94;67336:17:68;;;:::i;:::-;67332:109;;1237:14:44;;;;;;;;;;1460:31;;;;67455:53:68;;;;;2335:29970:94;;;;-1:-1:-1;;;;;67880:149:68;2335:29970:94;;72500:19:68;2335:29970:94;67963:52:68;2335:29970:94;72419:40:68;2335:29970:94;1616:3:44;2335:29970:94;67963:52:68;:::i;67880:149::-;68043:34;;;;-1:-1:-1;;;;;2335:29970:94;;;58607:20:68;2335:29970:94;;;;;;;68043:34:68;2335:29970:94;67451:4958:68;2335:29970:94;72419:40:68;:::i;67451:4958::-;68482:32;;;;;;2335:29970:94;68482:32:68;;2335:29970:94;:::i;:::-;68650:25:68;;;69684:65;69685:51;69588:54;;;;:::i;69684:65::-;2335:29970:94;;;69794:72:68;;;;;2335:29970:94;;;69845:4:68;2335:29970:94;;;;;;;;;;;;69794:72:68;2335:29970:94;;;-1:-1:-1;;;;;;2335:29970:94;;69794:72:68;;;;;;72094:239;69794:72;;72243:76;69794:72;72243:52;69794:72;72146:79;69794:72;;-1:-1:-1;;;;;72500:19:68;69794:72;;71423:21;69794:72;;72419:40;69794:72;;;;;;72146:57;69794:72;2335:29970:94;69794:72:68;;;68646:2484;69767:99;68646:2484;;;;2335:29970:94;71423:21:68;;:::i;72094:239::-;72347:34;;;;-1:-1:-1;;;;;2335:29970:94;;;58607:20:68;2335:29970:94;;;;;;;72347:34:68;2335:29970:94;67451:4958:68;;69794:72;;;;;;;;;;;;;;:::i;:::-;;;;68646:2484;70924:72;70925:58;70822:57;;;;:::i;70924:72::-;2335:29970:94;;;71038:77:68;;;;;2335:29970:94;;;71094:4:68;2335:29970:94;;;;;;;;;;;71038:77:68;2335:29970:94;;;-1:-1:-1;;;;;;2335:29970:94;;71038:77:68;;;;;;;72094:239;71038:77;;72243:76;-1:-1:-1;;;;;72243:52:68;71038:77;72146:79;71038:77;;;72500:19;71038:77;71423:21;71038:77;;72419:40;71038:77;;;;;;;;72146:57;71038:77;2335:29970:94;71038:77:68;;;68646:2484;71014:101;68646:2484;;;;;71038:77;;;;;;;;;;;;;;:::i;:::-;;;;65794:1205;66925:45;;66954:15;;;:::i;:::-;2335:29970:94;;66925:45:68;;;;2335:29970:94;66925:45:68;;;;;2335:29970:94;;;;;;;;66925:45:68;;2335:29970:94;-1:-1:-1;;;;;2335:29970:94;;66925:45:68;;;;;;:49;:45;2335:29970:94;66925:45:68;;;:49;;:::i;:::-;65794:1205;;;1736:177:44;;1848:58;1736:177;1616:3;2335:29970:94;1848:58:44;;:::i;3596:756:95:-;;-1:-1:-1;;;;;2335:29970:94;;;3676:16:95;;;3672:78;;3785:29;:20;;;-1:-1:-1;;;;;2335:29970:94;;;5681:14:95;2335:29970:94;;;;;;;3785:20:95;2335:29970:94;3785:29:95;:::i;:::-;3963:19;:15;;;-1:-1:-1;;;;;2335:29970:94;;;6696:9:95;2335:29970:94;;;;;;;3963:19:95;2335:29970:94;;;;;;4043:14:95;;;:::i;:::-;4069:20;;-1:-1:-1;;;;;2335:29970:94;;;5681:14:95;2335:29970:94;;;;;;;4069:20:95;2335:29970:94;;;3690:1:95;2335:29970:94;4122:38:95;2335:29970:94;;4122:38:95;;;;2335:29970:94;;;;;;;;4122:38:95;;;;4285:60;;;;;2335:29970:94;;;4285:60:95;;3690:1;4285:60;;;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;;;;;;;;;3690:1:95;2335:29970:94;;;;4285:60:95;2335:29970:94;3672:78:95;3715:24;3690:1;3715:24;-1:-1:-1;;;;;2335:29970:94;;6846:16:70;2335:29970:94;;-1:-1:-1;21464:49:68;6697:118:47;3831:53:55;;2335:29970:94;6806:1:47;2335:29970:94;;;;;;;3051:52:55;6697:118:47:o;2966:315::-;;-1:-1:-1;2335:29970:94;;;;-1:-1:-1;2335:29970:94;;-1:-1:-1;2335:29970:94;;;25916:4:68;2335:29970:94;-1:-1:-1;2335:29970:94;3051:52:55;2966:315:47:o;6714:614:46:-;;;2335:29970:94;;;7038:17:46;2335:29970:94;;;;7038:17:46;;;:::i;:::-;7101:21;;;:::i;:::-;7138:13;7150:1;7153:10;;;;;;7299:22;;;;;6714:614;:::o;7165:3::-;7205:10;465:4:50;838:5;7205:10:46;2335:29970:94;7205:10:46;;;:::i;:::-;2335:29970:94;1946:22:46;7245:17;;;;:::i;:::-;2335:29970:94;7264:13:46;;;;:::i;838:5:50:-;19669:4:33;7184:94:46;;;;:::i;:::-;2335:29970:94;;7138:13:46;;2335:29970:94;;;;;;;;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;13587:644:74:-;;-1:-1:-1;;;;;;13842:288:74;13587:644;;;;13842:288;2335:29970:94;;;-1:-1:-1;;;;;2335:29970:94;;;;13947:11:74;;;;2335:29970:94;;;;;:::i;:::-;14101:15:74;13947:11;14014:22;;;2335:29970:94;14054:29:74;;;14101:15;;;2335:29970:94;;;13842:288:74;;;;;;;2335:29970:94;13842:288:74;;;;;;:::i;:::-;;2335:29970:94;;13842:288:74;;;;;;;-1:-1:-1;13842:288:74;;;13587:644;2335:29970:94;;13825:400:74;;13587:644::o;13825:400::-;14171:43;-1:-1:-1;14171:43:74;13842:288;-1:-1:-1;14171:43:74;13842:288;;;;;;;;;;;;;;:::i;:::-;;;;2335:29970:94;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;15237:1479:74:-;;;;;;;;2335:29970:94;;;;-1:-1:-1;;;;;2335:29970:94;;;;15750:11:74;;;2335:29970:94;;;;;:::i;:::-;15750:11:74;15858:29;;;15901:15;;;;2335:29970:94;;;;;;15658:268:74;;;;;2335:29970:94;15658:268:74;;;;;;;;;:::i;:::-;;2335:29970:94;-1:-1:-1;;;;;2335:29970:94;15658:268:74;;;-1:-1:-1;15658:268:74;;;;;;;;;-1:-1:-1;;;15658:268:74;;;15237:1479;2335:29970:94;;;;15941:74:74;;15237:1479;15937:154;;1792:1:75;;7916:84:49;958:1:75;7916:84:49;;2335:29970:94;16189:93:74;;16297:13;;;;;;;-1:-1:-1;16292:376:74;1792:1:75;;;16292:376:74;16678:31;;;;;15237:1479;:::o;16349:3::-;2335:29970:94;;16312:35:74;;;;;16372:27;;;;:::i;:::-;2335:29970:94;16402:19:74;;;;:22;:19;;;:22;:::i;:::-;2335:29970:94;-1:-1:-1;16368:290:74;;-1:-1:-1;2335:29970:94;;16349:3:74;16297:13;;16368:290;16514:15;;16603:22;16514:15;16554:27;16514:15;:18;;16451:192;16514:15;;;;;:18;:::i;16603:22::-;2335:29970:94;16451:192:74;-1:-1:-1;16451:192:74;-1:-1:-1;;;;;2335:29970:94;;;35380:60:68;2335:29970:94;;;;;;;;16312:35:74;;;15937:154;16038:42;-1:-1:-1;16038:42:74;15658:268;-1:-1:-1;16038:42:74;15941:74;2335:29970:94;;;;;15961:54:74;;15941:74;;15658:268;;;;;;;;;-1:-1:-1;15658:268:74;;;;;;:::i;:::-;;;;;;30225:453:94;19669:4:33;30474:183:94;30225:453;19669:4:33;30474:183:94;;:::i;8711:554:76:-;;19917:10:33;8864:26:76;;8860:97;;9060:184;;19669:4:33;2335:29970:94;19669:4:33;;9060:184:76;;:::i;2011:185:44:-;;1237:14;2131:58;2011:185;1460:31;2131:58;:::i;4346:904:70:-;;4485:10;;4481:23;;9520:18:73;2335:29970:94;-1:-1:-1;;;;;2335:29970:94;;4494:1:70;2335:29970:94;;;;4708:15:70;2335:29970:94;4494:1:70;2335:29970:94;2806:53:55;4708:15:70;;;:::i;:::-;4738:9;;;;9342:26:73;;3831:53:55;;;-1:-1:-1;;2335:29970:94;;;;;;;5238:4:70;3051:52:55;;5238:4:70;:::i;4734:423::-;4944:12;5238:4;4944:12;5238:4;4940:217;5113:31;9342:26:73;5113:31:70;:::i;:::-;5238:4;:::i;4481:23::-;4497:7;;:::o;3791:897:38:-;;3937:44;2335:29970:94;1616:3:44;2335:29970:94;3937:44:38;:::i;:::-;3992:37;1237:14:44;4028:1:38;1460:31:44;;4043:33:38;4039:476;;4633:43;;2536:1;4633:43;;;;:::i;4039:476::-;-1:-1:-1;;;;;2335:29970:94;;;;4434:59:38;2335:29970:94;;;4434:59:38;;;;;2335:29970:94;4434:59:38;;;;;2335:29970:94;;4434:59:38;;;;;;;:70;4633:43;4434:59;2536:1;4434:59;4028:1;4434:59;;;:70;;:::i;73284:870:68:-;;;;-1:-1:-1;;;;;2335:29970:94;;;-1:-1:-1;2335:29970:94;73701:11:68;2335:29970:94;;;-1:-1:-1;2335:29970:94;;;;;;;;;;;;-1:-1:-1;2335:29970:94;73701:11:68;2335:29970:94;;;-1:-1:-1;2335:29970:94;;;;;;;;;;74118:28:68;;;:::i;80579:177::-;80674:21;-1:-1:-1;80656:94:68;;80579:177::o;80656:94::-;80718:21;;;;;;74889:878;;;;-1:-1:-1;;;;;2335:29970:94;;;-1:-1:-1;2335:29970:94;75306:11:68;2335:29970:94;;;-1:-1:-1;2335:29970:94;;;;;;;;;;;;-1:-1:-1;2335:29970:94;75306:11:68;2335:29970:94;;;-1:-1:-1;2335:29970:94;;;;;;;;;;75731:28:68;;;:::i;50496:2352::-;;;;;;2335:29970:94;50740:33:68;2335:29970:94;50871:30:68;;50867:1975;;50496:2352;;;;;:::o;50867:1975::-;51292:30;;;51347:26;51292:37;:30;;51225:162;51292:30;;;;;:37;:::i;:::-;2335:29970:94;51347:19:68;;;;;:26;:::i;51225:162::-;2335:29970:94;;1192:1:75;7916:84:49;958:1:75;7916:84:49;;2335:29970:94;51578:1254:68;;50867:1975;;;;;51578:1254;6019:108:49;;;;;2335:29970:94;6019:108:49;;19669:4:33;2335:29970:94;;;;;;;;;;;;;;;838:5:50;465:4;838:5;;;:::i;:::-;19669:4:33;52238:49:68;;;;52234:137;;52592:26;52643;52679:138;52592:33;52643;52592:26;;;-1:-1:-1;;;;;2335:29970:94;;;13745:20:70;2335:29970:94;;;;;;;52592:33:68;2335:29970:94;52735:64:68;1460:31:44;1237:14;1460:31;;52735:64:68;:::i;:::-;52679:138;;:::i;:::-;52643:26;-1:-1:-1;;;;;2335:29970:94;;;13745:20:70;2335:29970:94;;;;;;;52643:33:68;2335:29970:94;51578:1254:68;;;;;52234:137;52318:34;2335:29970:94;52318:34:68;;2335:29970:94;52318:34:68;15788:287:70;;2335:29970:94;15932:3:70;2335:29970:94;;15913:17:70;;;;;-1:-1:-1;;;;;15955:9:70;;;;;:::i;:::-;2335:29970:94;;;;;15955:18:70;15951:65;;2335:29970:94;;15898:13:70;;15913:17;-1:-1:-1;;;;;15913:17:70;16043:25;2335:29970:94;16043:25:70;2335:29970:94;16043:25:70;2335:29970:94;;;16043:25:70;1998:187:47;;-1:-1:-1;;;;;2335:29970:94;-1:-1:-1;2335:29970:94;;;;-1:-1:-1;2335:29970:94;3051:52:55;1998:187:47:o;9930:461:46:-;465:4:50;19669::33;;;465::50;10347:19:46;;;;9930:461;:::o;10347:37::-;10383:1;2335:29970:94;;;;;;;9930:461:46;:::o;4522:224:76:-;958:1:75;7916:84:49;1414:1:75;7916:84:49;2335:29970:94;4611:129:76;;4522:224::o;4611:129::-;4682:47;-1:-1:-1;4682:47:76;958:1:75;-1:-1:-1;4682:47:76;3666:227;958:1:75;7916:84:49;;;3756:131:76;;3666:227::o;3756:131::-;3828:48;-1:-1:-1;3828:48:76;958:1:75;-1:-1:-1;3828:48:76;1835:554:43;2335:29970:94;;1994:19:43;;2029:13;2041:1;2044:10;;;;;;2286:20;;;;;2282:73;;1835:554;:::o;2282:73::-;2329:15;2041:1;2329:15;;2041:1;2329:15;2056:3;2079:15;;;;:::i;:::-;2335:29970:94;2075:187:43;;2056:3;2335:29970:94;;2029:13:43;;2075:187;2123:20;;;2119:97;;2233:14;2075:187;;2119:97;2174:23;2041:1;2174:23;;2041:1;2174:23;6731:255:76;6019:108:49;6731:255:76;958:1:75;6019:108:49;;19669:4:33;2335:29970:94;;;;;;;;;;;;;;;6731:255:76;:::o;2335:29970:94:-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::o;13430:2163:59:-;;;;14330:66;;13855:31;13430:2163;-1:-1:-1;;;;;13430:2163:59;13855:31;:::i;:::-;1744:19:50;;;;;:::i;:::-;14283:14:59;;;;:::i;:::-;2335:29970:94;;14330:66:59;;;;;;2335:29970:94;14330:66:59;;;;;;;;:::i;:::-;;2335:29970:94;;14330:66:59;;;;;;15572:14;14330:66;1744:19:50;15064:30:59;14330:66;15210:67;14330:66;15380:37;14330:66;;;;15427:34;14330:66;-1:-1:-1;14330:66:59;;;13430:2163;14500:29;;14849;14487:42;14500:29;14837:41;14500:29;14836:57;14500:29;;;:::i;:::-;2335:29970:94;14487:42:59;;:::i;:::-;14849:29;;;:::i;:::-;2335:29970:94;14837:41:59;;:::i;:::-;14836:57;:::i;15064:30::-;465:4:50;;5832:87;;;;;;1744:19;;:::i;15210:67:59:-;2335:29970:94;;;;15380:37:59;:::i;:::-;15427:34;;;:::i;:::-;2335:29970:94;15572:14:59;:::i;:::-;13430:2163;:::o;14330:66::-;14836:57;14330:66;;14487:42;14500:29;14837:41;14330:66;;;14849:29;14330:66;;;;;;;;;;;:::i;:::-;;;;;;;;;;4873:359:46;;5121:105;2335:29970:94;;;5044:9:46;2335:29970:94;;5044:9:46;;:::i;:::-;5121:105;;;;;;;4873:359::o;2335:29970:94:-;;;;;8755:1:59;2335:29970:94;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;8848:1:59;2335:29970:94;;;;;;;;;:::i;7248:4946:59:-;;;;;2335:29970:94;;8498:24:59;;;:::i;:::-;8623;;;;:::i;:::-;8743:13;8755:1;8758:13;;;;;;2335:29970:94;;-1:-1:-1;;;;;2335:29970:94;;;;;;;9134:57:59;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;8755:1;9134:57;;;8738:165;2335:29970:94;;;9286:55:59;;;;;;;;9134:57;9286:55;;;:::i;:::-;;;;;;;;;;;;1511:7:50;9422:14:59;9286:55;1625:13:50;9286:55:59;;8755:1;9286:55;;;8738:165;1511:7:50;;;;;;;;;;;;;;;;:::i;1625:13::-;9422:14:59;;;:::i;:::-;8755:1;9531:13;;;;;;2335:29970:94;;;;11183:55:59;2335:29970:94;;;;11183:55:59;;;;;;;;9134:57;11183:55;;;:::i;:::-;;;;;;;;;;;12108:59;11183:55;12123:43;11183:55;12107:80;11183:55;8755:1;11183:55;;;9511:1375;12123:43;;;:::i;:::-;12108:59;;:::i;11183:55::-;;;;;;-1:-1:-1;11183:55:59;;;;;;:::i;:::-;;;;;9546:3;10047:18;;;;;;;;;;;;;;10024:42;10047:18;;8848:1;10047:18;;:::i;:::-;2335:29970:94;10024:42:59;;:::i;:::-;10084:14;;;;;:::i;:::-;2335:29970:94;10084:41:59;10080:796;;9546:3;;;;;;2335:29970:94;9516:13:59;;;;;;;;;;;;10080:796;10232:14;;10374:38;10827:34;10232:14;10827;10232;;;10844:17;10232:14;;:::i;:::-;2335:29970:94;;10374:38:59;:::i;:::-;10354:58;;;;:::i;10827:14::-;2335:29970:94;10844:17:59;;:::i;:::-;2335:29970:94;10827:34:59;;:::i;:::-;10810:51;;;;:::i;:::-;2335:29970:94;10080:796:59;;;;;;;9286:55;;;;;;-1:-1:-1;9286:55:59;;;;;;:::i;:::-;;;;;9134:57;;;;;;;;;;;;;;;:::i;:::-;;;;;8773:3;8809:18;:40;:36;:18;8848:1;8809:18;;;:::i;:::-;2335:29970:94;8830:15:59;;;;:::i;:::-;2335:29970:94;8809:36:59;;:::i;:::-;:40;:::i;:::-;8792:57;;;;:::i;:::-;2335:29970:94;;8743:13:59;;6495:194:76;958:1:75;7916:84:49;1586:1:75;7916:84:49;2335:29970:94;6574:109:76;;6495:194::o;6574:109::-;6635:37;-1:-1:-1;6635:37:76;958:1:75;-1:-1:-1;6635:37:76;2420:1364:59;;;3468:30;2335:29970:94;;3468:30:59;:::i;:::-;3513:13;3525:1;3549:3;2335:29970:94;;3528:19:59;;;;;3717:11;:50;:11;;;2335:29970:94;3717:11:59;;;:::i;:::-;2335:29970:94;3717:50:59;:::i;:::-;3702:65;;;;:::i;:::-;2335:29970:94;;3513:13:59;;3528:19;;;;;2420:1364::o;4238:414:46:-;;1744:19:50;4238:414:46;4619:25;4238:414;4619:25;:::i;:::-;1744:19:50;;:::i;7866:704:77:-;;;8372:29;465:4:50;838:5;8372:191:77;7866:704;8058:20;:48;:20;;;;;:48;:::i;:::-;2335:29970:94;1946:22:46;8466:42:77;:30;;;;;:42;:::i;:::-;2335:29970:94;8522:31:77;:19;;;;;:31;:::i;838:5:50:-;19669:4:33;8372:29:77;;;:191;:::i;7866:704::-;;;8372:29;2688:41:46;8372:191:77;7866:704;8058:20;:48;:20;;;;;:48;:::i;:::-;2335:29970:94;2689:22:46;8466:42:77;:30;;;;;:42;:::i;:::-;2335:29970:94;8522:31:77;:19;;;;;:31;:::i;2688:41:46:-;8372:29:77;;;:191;:::i;7866:704::-;;8416:147;8372:191;7866:704;8372:29;7866:704;8058:20;:48;:20;;;;;:48;:::i;:::-;2335:29970:94;;;;:::i;:::-;8197:50:77;;8262:41;8197:164;;8466:42;:30;;;;;:42;:::i;:::-;2335:29970:94;8522:19:77;:31;:19;;;;;:31;:::i;8197:164::-;8318:43;8197:164;;;887:427:50;;1068:5;887:427;1068:5;:::i;:::-;1186:122;;-1:-1:-1;;1186:122:50;;;;;;;;887:427;:::o;3280:418:46:-;;3665:25;3280:418;3665:25;:::i;:::-;465:4:50;;2335:29970:94;;;;;;;;;;;;;;;19669:4:33;;;;;3280:418:46;:::o;2097:657:49:-;;2335:29970:94;19627:2:33;2335:29970:94;9400:76:49;;2335:29970:94;2539:209:49;;;2335:29970:94;2539:209:49;;;;2097:657;:::o;:::-;;8966:3;8956:13;;;;8952:64;;2335:29970:94;;;;;;;;2641:5:118;9226:3:49;2641:5:118;:13;:5;;;:13;9226:3:49;2641:13:118;19627:2:33;9204:40:49;9180:112;;2335:29970:94;19627:2:33;2335:29970:94;9400:76:49;;2539:209;;;;;;;;;2097:657;:::o;2641:13:118:-;;;2335:29970:94;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;2335:29970:94;;;;:::i;:::-;;;-1:-1:-1;2335:29970:94;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;;;;;;;:::o;4659:1499:77:-;4963:20;;;;;2335:29970:94;5006:13:77;-1:-1:-1;5021:13:77;;;;;;4659:1499;;;;;;:::o;5036:3::-;5070:15;:18;;2335:29970:94;5070:15:77;;;;;:18;:::i;:::-;5188:30;5127:20;;;2335:29970:94;;;;;;;;;;5127:20:77;2335:29970:94;1237:14:44;1460:31;1371:127;;5188:30:77;5423:23;:20;;;:23;:::i;:::-;2335:29970:94;5404:42:77;;5400:565;;5036:3;6054:20;;6002:139;6054:23;:20;;;:23;:::i;:::-;2335:29970:94;6095:32:77;:29;;;;;:32;:::i;6002:139::-;5979:20;;;2335:29970:94;;;;;;;;;;5979:20:77;2335:29970:94;;5006:13:77;;5400:565;5777:173;5736:38;5680;5841:91;5889:42;5680:38;;;2335:29970:94;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;5680:38:77;2335:29970:94;5908:20:77;:23;:20;;;:23;:::i;5889:42::-;2335:29970:94;6095:29:77;2335:29970:94;5841:91:77;:::i;:::-;5777:173;;:::i;:::-;5736:38;;2335:29970:94;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;5736:38:77;2335:29970:94;5400:565:77;;;;34375:314:119;34568:16;34552:33;;34548:105;;34375:314;:::o;34548:105::-;34608:34;;;;2335:29970:94;;34608:34:119;;2657:309:95;-1:-1:-1;;;;;2335:29970:94;2657:309:95;2335:29970:94;;;;;;2822:16:95;2335:29970:94;;2854:24:95;;;;-1:-1:-1;;2854:24:95;:::o;2818:142::-;2916:33;2335:29970:94;2916:24:95;2335:29970:94;;;;2916:11:95;2335:29970:94;;;;;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;2916:33:95;2335:29970:94;2909:40:95;:::o;4358:211::-;928:3;4449:43;;4445:118;;4358:211;:::o;4445:118::-;4515:37;;;;2335:29970:94;;4515:37:95;;1573:170:43;1666:6;;;;;1573:170;;1666:16;;1573:170;1662:75;;;;1573:170::o;1666:16::-;1676:6;;;-1:-1:-1;1666:16:43;;;;7436:424:77;2335:29970:94;;;;;:::i;:::-;;;;:::i;:::-;7589:31:77;;;7636:21;;465:4:50;7585:269:77;7436:424::o;7585:269::-;2335:29970:94;;7691:19:77;2335:29970:94;;:::i;:::-;7678:32:77;7691:19;;7733:22;:30;2335:29970:94;7733:22:77;:32;:22;;2335:29970:94;-1:-1:-1;;;;;2335:29970:94;;;7733:30:77;2335:29970:94;;7733:32:77;;;;2335:29970:94;7733:32:77;;;;;;;;;2335:29970:94;7733:32:77;;;7726:39;7674:180;7436:424::o;7733:32::-;;;;:22;:32;:22;:32;;;;;;;:::i;7674:180::-;7803:40;2335:29970:94;7803:40:77;;2335:29970:94;7803:40:77;5369:233:76;958:1:75;7916:84:49;;;2335:29970:94;5461:135:76;;5369:233::o;5461:135::-;5535:50;-1:-1:-1;5535:50:76;958:1:75;-1:-1:-1;5535:50:76;16306:3888:59;;;;;;2335:29970:94;;16842:24:59;;;;:::i;:::-;16930:13;16942:1;16945:13;;;;;;17136:26;:43;:26;;;;;:::i;:43::-;17107:72;;;;:::i;:::-;2335:29970:94;;;;;17730:57:59;;;;;;;;;;;;;:::i;:::-;;2335:29970:94;-1:-1:-1;;;;;2335:29970:94;;17730:57:59;;;;;;;16942:1;17730:57;;;16925:104;2335:29970:94;;;18181:53:59;;;;17730:57;18181:53;;;;17730:57;18181:53;;;:::i;:::-;;2335:29970:94;-1:-1:-1;;;;;2335:29970:94;;18181:53:59;;;;;;;1744:19:50;18478:81:59;18181:53;18533:26;18478:52;18765:67;18181:53;18499:30;18181:53;1744:19:50;19124:55:59;18181:53;;17730:57;18181:53;;;16942:1;18181:53;;;16925:104;1744:19:50;;:::i;:::-;18313:14:59;;;;;:::i;:::-;18499:30;:::i;:::-;2335:29970:94;18478:52:59;;:::i;:::-;18533:26;;;:::i;18765:67::-;18921:26;:32;:26;;;;;:::i;:32::-;18892:61;;;;:::i;:::-;2335:29970:94;-1:-1:-1;;;;;2335:29970:94;;19124:55:59;;;;;;;;17730:57;19124:55;;;:::i;:::-;;2335:29970:94;;19124:55:59;;;;;;;20104:83;19124:55;20125:43;19124:55;16942:1;19124:55;;;16925:104;19282:24;;19316:35;19282:24;;:::i;:::-;19316:35;;;:::i;:::-;2335:29970:94;20125:43:59;;:::i;:::-;20104:83;;:::i;19124:55::-;19316:35;19124:55;;;;19282:24;19124:55;17730:57;19124:55;17730:57;19124:55;;;;;;;:::i;:::-;;;;;;18181:53;17730:57;18181:53;;;;17730:57;18181:53;;;;;;;:::i;:::-;;;;17730:57;;;;;;;;;;;;;;;:::i;:::-;;;;;16960:3;16996:18;:22;:18;17017:1;16996:18;;;:::i;:::-;2335:29970:94;16996:22:59;:::i;:::-;16979:39;;;;:::i;:::-;2335:29970:94;;16930:13:59;;21079:2229;;;;2335:29970:94;;;;;;;;22208:67:59;;-1:-1:-1;;;;;1744:19:50;;;;;:::i;:::-;21662:14:59;;;;:::i;22208:67::-;;2335:29970:94;;22208:67:59;;;;;;23286:15;22208:67;22859:32;22208:67;22973:38;22208:67;23114:37;22208:67;23161:35;22208:67;-1:-1:-1;22208:67:59;;;21079:2229;22367:30;:43;:30;;22648:63;22367:30;;;;:::i;:43::-;22667:30;;;;;:::i;:::-;2335:29970:94;22648:63:59;;:::i;23161:35::-;2335:29970:94;23286:15:59;:::i;22208:67::-;22648:63;22208:67;;22367:30;22208:67;;22367:43;22208:67;;;;;;;;;;;:::i;:::-;;;;;;;4619:1444;;;;5749:30;2335:29970:94;;5749:30:59;:::i;:::-;5794:13;5806:1;5830:3;2335:29970:94;;5809:19:59;;;;;6003:25;:11;;;;;:::i;:::-;2335:29970:94;6003:25:59;:::i;:::-;19669:4:33;;;;;;2335:29970:94;19669:4:33;;5986:60:59;;;;:::i;:::-;2335:29970:94;;5794:13:59;;5809:19;;;;;;4619:1444::o;17101:159:70:-;859:9:41;:23;17174:79:70;;;17101:159;:::o;17174:79::-;2335:29970:94;7916:84:49;17211:15:70;2335:29970:94;7916:84:49;2335:29970:94;17101:159:70;:::o;3162:428:95:-;;859:9:41;3337:114:95;;-1:-1:-1;;;;;3545:28:95;2335:29970:94;;3378:5:95;2335:29970:94;3545:9:95;2335:29970:94;;;3378:5:95;2335:29970:94;;-1:-1:-1;;;;;2335:29970:94;;;;;;;;;;3545:28:95;2335:29970:94;;;;;;;;;;;3162:428:95:o;3337:114::-;3406:34;3378:5;3406:34;;3378:5;3406:34;1822:864:50;;2004:6;;2000:58;;465:4;2335:29970:94;;;;;;;;;;;;;;;2560:120:50;;-1:-1:-1;;2560:120:50;;;;;;;;1822:864;:::o;2000:58::-;2033:14;2009:1;2033:14;;2009:1;2033:14;1822:864;2004:6;;2000:58;;2560:120;2153:5;;;;:::i;:::-;2560:120;-1:-1:-1;;2560:120:50;;;;;;;;1822:864;:::o;17166:193:119:-;17253:1;17245:9;;17241:81;;17166:193;:::o;17241:81::-;17277:34;17253:1;17277:34;;2335:29970:94;;17253:1:119;17277:34;3296:380:105;2335:29970:94;;;3411:47:105;;;;;;-1:-1:-1;;;;;2335:29970:94;;3411:47:105;;;2335:29970:94;;;;;;;;;;3411:47:105;2335:29970:94;;;;3411:47:105;;;;-1:-1:-1;;3411:47:105;;;;;;;;:::i;:::-;2335:29970:94;;-1:-1:-1;;;;;2335:29970:94;;5615:25:105;;;;;;;;;;;:::i;:::-;5657:69;;;3296:380;5657:103;;;;3296:380;3473:45;;3469:201;;3296:380;;;;;:::o;3469:201::-;2335:29970:94;;3411:47:105;3561:43;;;;;;-1:-1:-1;;;;;2335:29970:94;3411:47:105;3561:43;;2335:29970:94;;;;;;3646:12:105;;3561:43;;;;2335:29970:94;;;;3561:43:105;2335:29970:94;3561:43:105;;;:::i;3646:12::-;3469:201;;;;;;;5657:103;5730:26;;;:30;;5657:103;;;:69;2335:29970:94;;;;-1:-1:-1;5669:22:105;;;:56;;;;5657:69;;;;;;;5669:56;5695:30;;;3411:47;5695:30;;;;;;;;:::i;:::-;5669:56;;;;3296:380;2335:29970:94;;;3411:47:105;;;;;;-1:-1:-1;;;;;2335:29970:94;;3411:47:105;;;2335:29970:94;;;;;;;;;;;;;;;3411:47:105;2335:29970:94;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;2335:29970:94;;;;:::o;:::-;;;:::o;3180:392:106:-;5172:5:68;3180:392:106;3510:55;3180:392;3462:31;;;;;;;;;;;:::i;:::-;3510:55;;:::i;76675:2695:68:-;2335:29970:94;;;76968:40:68;;;77002:4;76968:40;;;2335:29970:94;76968:40:68;;76675:2695;;2335:29970:94;;-1:-1:-1;;;;;2335:29970:94;;76968:40:68;2335:29970:94;;;;;;76968:40:68;;;;;;;-1:-1:-1;76968:40:68;;;76675:2695;77022:57;;;;77018:892;;78083:28;;;-1:-1:-1;;;;;2335:29970:94;;;7242:11:68;2335:29970:94;;;;;;;78083:28:68;2335:29970:94;;;78227:37:68;;;77002:4;76968:40;78227:37;;2335:29970:94;;;;77002:4:68;2335:29970:94;;;;78227:37:68;;;;;;;-1:-1:-1;78227:37:68;;;76675:2695;78278:51;;;;;78274:866;;79315:25;;;;-1:-1:-1;;;;;2335:29970:94;;;7242:11:68;2335:29970:94;;;;;;;78274:866:68;78966:163;-1:-1:-1;78966:163:68;-1:-1:-1;;;;;2335:29970:94;35380:60:68;2335:29970:94;;;-1:-1:-1;2335:29970:94;;;-1:-1:-1;21464:49:68;78227:37;;;;;;;-1:-1:-1;78227:37:68;;;;;;:::i;:::-;;;;;;77018:892;77727:172;;;;;;-1:-1:-1;77727:172:68;2335:29970:94;;;;-1:-1:-1;;;;;2335:29970:94;;;35380:60:68;2335:29970:94;;;;;;76968:40:68;;;;;;;;;;;;;;;:::i;:::-;;;;;4059:629:105;-1:-1:-1;;;;;2811:38:106;4059:629:105;2335:29970:94;2811:38:106;;;:::i;:::-;2335:29970:94;;4551:22:105;;;;:57;;;;4059:629;4547:135;;;;4059:629;:::o;4547:135::-;4631:40;2847:1:106;4631:40:105;;2335:29970:94;;2847:1:106;4631:40:105;4551:57;4578:30;;;;;;;;;;;;:::i;:::-;4577:31;4551:57;;;;662:219:50;465:4;662:219;838:5;662:219;838:5;:::i;23639:315:59:-;;23778:31;-1:-1:-1;;;;;23639:315:59;23778:31;2335:29970:94;;23778:31:59;;;;2335:29970:94;23778:31:59;;2335:29970:94;23778:31:59;;;;;;;;;;;23639:315;23823:34;;;;23819:129;;23639:315;;:::o;23819:129::-;23880:57;23778:31;23880:57;23778:31;2335:29970:94;;;;23778:31:59;23880:57;23778:31;;;;;;;;;;;;;;;:::i;:::-;;;;;9628:806:76;;2335:29970:94;9811:24:76;;;:::i;:::-;9470:46;2335:29970:94;6019:108:49;;-1:-1:-1;9952:13:76;;;;;;10406:21;;;9628:806;:::o;9967:3::-;2335:29970:94;;;;;;;;;;;;;;;6019:108:49;;;;;3267:1:75;;;;;;6019:108:49;3267:1:75;;;10348:37:76;;;;:::i;:::-;2335:29970:94;;9937:13:76;;8442:263;6019:108:49;;2335:29970:94;6019:108:49;;19669:4:33;2335:29970:94;;;;;;;;;;;;;;;8442:263:76;:::o;24291:315:59:-;;24430:31;-1:-1:-1;;;;;24291:315:59;24430:31;2335:29970:94;;24430:31:59;;;;2335:29970:94;24430:31:59;;2335:29970:94;24430:31:59;;;;;;;;;;;24291:315;24475:34;;;;24471:129;;24291:315;;:::o;24471:129::-;24532:57;24430:31;24532:57;24430:31;2335:29970:94;;;;24430:31:59;24532:57;24430:31;;;;;;;;;;;;;;;:::i;:::-;;;;;4625:582:106;;4797:8;;-1:-1:-1;2335:29970:94;;5874:21:106;:17;;6046:142;;;;;;5870:383;6225:17;5894:1;6225:17;;5894:1;6225:17;4793:408;2335:29970:94;;5045:22:106;:49;;;4793:408;5041:119;;5173:17;;:::o;5041:119::-;-1:-1:-1;;;;;5121:24:106;;5066:1;5121:24;2335:29970:94;5121:24:106;2335:29970:94;;5066:1:106;5121:24;5045:49;5071:18;;;:23;5045:49;;2335:29970:94;;1946:22:46;838:5:50;2335:29970:94;465:4:50;2335:29970:94;1946:22:46;:::i;2335:29970:94:-;2688:41:46;2335:29970:94;;2689:22:46;2335:29970:94;2689:22:46;:::i;2335:29970:94:-;;;;;;;;;;465:4:50;;;2335:29970:94;;;;;;;;;;2688:41:46;2689:22;;;;:::i;2335:29970:94:-;1946:22:46;;;465:4:50;1946:22:46;838:5:50;1946:22:46;;:::i"},"methodIdentifiers":{"accountDelta(address,int256)":"80047e26","addLiquidity((address,address,uint256[],uint256,uint8,bytes))":"4af29ec4","buildTokenConfig(address[])":"24e7176b","buildTokenConfig(address[],address[])":"5f70f542","buildTokenConfig(address[],address[],bool[])":"e5948689","buildTokenConfig(address[],uint8[],address[],bool[])":"608256f7","burnERC20(address,address,uint256)":"1d27af68","computeYieldFeesDue((bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]),uint256,uint256,uint256)":"08bade29","ensurePoolNotPaused(address)":"02e1a4aa","ensureUnpausedAndGetVaultState(address)":"e460a8a9","ensureValidSwapAmount(uint256)":"b4eb0bf9","ensureValidTradeAmount(uint256)":"2cbbf198","erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))":"43583be5","forceLock()":"6d4908c4","forceUnlock()":"7965c967","getBufferTokenBalancesBytes(address)":"e5b08ffb","getLastLiveBalances(address)":"3cce2585","getPoolFactoryMock()":"87a76c59","getPoolTokenCountAndIndexOfToken(address,address)":"c9c1661b","getRawBalances(address)":"19a24bcb","getVaultExtension()":"b9a8effa","guardedCheckEntered()":"a408f312","internalGetBufferUnderlyingImbalance(address)":"2606a4de","internalGetBufferWrappedImbalance(address)":"a40f9592","loadPoolDataUpdatingBalancesAndYieldFees(address,uint8)":"0f682ba0","loadPoolDataUpdatingBalancesAndYieldFeesReentrancy(address,uint8)":"dc4402ed","manualAddLiquidity((bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]),(address,address,uint256[],uint256,uint8,bytes),uint256[])":"0790de46","manualBuildPoolSwapParams((uint8,address,address,address,uint256,uint256,bytes),(uint256,uint256,uint256,uint256),(bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]))":"16a573c2","manualComputeAmountGivenScaled18((uint8,address,address,address,uint256,uint256,bytes),(bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]),(uint256,uint256,uint256,uint256))":"06bf83b1","manualComputeAndChargeAggregateSwapFees((bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]),uint256,address,address,uint256)":"be6b4d2a","manualErc4626BufferWrapOrUnwrapReentrancy((uint8,uint8,address,uint256,uint256))":"370bc8da","manualFindTokenIndex(address[],address)":"ebfeb0a1","manualGetAddLiquidityCalledFlagBySession(address,uint256)":"420f4a45","manualGetAggregateSwapFeeAmount(address,address)":"36918d6e","manualGetAggregateYieldFeeAmount(address,address)":"8f5aeb4b","manualGetCurrentUnlockSessionId()":"81e4b7e9","manualGetIsUnlocked()":"b2469499","manualGetNonzeroDeltaCount()":"155075e6","manualGetPoolConfigBits(address)":"557dba68","manualGetTokenDeltas()":"1f4475c5","manualInternalSwap((uint8,address,address,address,uint256,uint256,bytes),(uint256,uint256,uint256,uint256),(bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]))":"25b6a844","manualLoadSwapState((uint8,address,address,address,uint256,uint256,bytes),(bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]))":"4594871a","manualReentrancyAddLiquidity((bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]),(address,address,uint256[],uint256,uint8,bytes),uint256[])":"eeda9991","manualReentrancyRemoveLiquidity((bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]),(address,address,uint256,uint256[],uint8,bytes),uint256[])":"28121e27","manualReentrancySwap((uint8,address,address,address,uint256,uint256,bytes),(uint256,uint256,uint256,uint256),(bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]))":"96e74a27","manualRegisterPool(address,address[])":"851c65a3","manualRegisterPoolAtTimestamp(address,address[],uint32,(address,address,address))":"0362a513","manualRegisterPoolPassThruTokens(address,address[])":"32333ce6","manualRegisterPoolWithSwapFee(address,address[],uint256)":"1f495f79","manualRemoveLiquidity((bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]),(address,address,uint256,uint256[],uint8,bytes),uint256[])":"f1320097","manualSendToReentrancy(address,address,uint256)":"d01a3269","manualSetAccountDelta(address,int256)":"d0643b8c","manualSetAddLiquidityCalledFlag(address,bool)":"e2ddce11","manualSetAggregateSwapFeeAmount(address,address,uint256)":"44ea8763","manualSetAggregateSwapFeePercentage(address,uint256)":"cfcc2209","manualSetAggregateYieldFeeAmount(address,address,uint256)":"7004b0f1","manualSetAggregateYieldFeePercentage(address,uint256)":"920af066","manualSetBufferAsset(address,address)":"ab62c2b6","manualSetBufferBalances(address,uint256,uint256)":"0ee4cdd8","manualSetBufferOwnerShares(address,address,uint256)":"ff44deab","manualSetBufferTotalShares(address,uint256)":"3cb5b2af","manualSetHooksConfig(address,(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address))":"c1fdcd62","manualSetInitializedPool(address,bool)":"5e3e00fa","manualSetNonZeroDeltaCount(uint256)":"5eeae6eb","manualSetPoolBalances(address,uint256[],uint256[])":"1c4e1e23","manualSetPoolConfig(address,((bool,bool,bool,bool),uint256,uint256,uint256,uint40,uint32,bool,bool,bool,bool))":"5c1c1c81","manualSetPoolConfigBits(address,bytes32)":"df138458","manualSetPoolCreator(address,address)":"79a2c0ac","manualSetPoolPauseWindowEndTime(address,uint32)":"0c87409b","manualSetPoolPaused(address,bool)":"cbde2b68","manualSetPoolRegistered(address,bool)":"352339ee","manualSetPoolTokenInfo(address,(address,uint8,address,bool)[])":"dab50579","manualSetPoolTokenInfo(address,address[],(uint8,address,bool)[])":"bb14e466","manualSetPoolTokens(address,address[])":"82ea1749","manualSetPoolTokensAndBalances(address,address[],uint256[],uint256[])":"d8f4cf3c","manualSetReservesOf(address,uint256)":"d64bc25d","manualSetStaticSwapFeePercentage(address,uint256)":"195aaef9","manualSetVaultPaused(bool)":"692407ae","manualSetVaultState(bool,bool)":"10c1dc41","manualSettleReentrancy(address)":"2d1c3beb","manualSettleUnwrap(address,address,uint256,uint256)":"b6f680f4","manualSettleWrap(address,address,uint256,uint256)":"ac004855","manualTransfer(address,address,uint256)":"00d7aadb","manualUnsafeSetStaticSwapFeePercentage(address,uint256)":"2b766278","manualUpdateAggregateSwapFeePercentage(address,uint256)":"a03b23ef","manualUpdatePoolDataLiveBalancesAndRates(address,(bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]),uint8)":"d86c3fef","manualWritePoolBalancesToStorage(address,(bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]))":"0f619655","mintERC20(address,address,uint256)":"47c07e88","mockIsUnlocked()":"b8caceee","mockWithInitializedPool(address)":"62691e5f","previewDeposit(address,uint256)":"b8f82b26","previewMint(address,uint256)":"d1f810a5","previewRedeem(address,uint256)":"cbe52ae3","previewWithdraw(address,uint256)":"bbc6f1dc","recoveryModeExit(address)":"87a530f8","reentrancyGuardEntered()":"d2c725e0","removeLiquidity((address,address,uint256,uint256[],uint8,bytes))":"21457897","sendTo(address,address,uint256)":"ae639329","settle(address,uint256)":"15afd409","supplyCredit(address,uint256)":"b1740c2d","swap((uint8,address,address,address,uint256,uint256,bytes))":"2bfb780c","takeDebt(address,uint256)":"3e262ba3","transfer(address,address,uint256)":"beabacc8","transferFrom(address,address,address,uint256)":"15dacbea","unguardedCheckNotEntered()":"cecc95a7","unlock(bytes)":"48c89491","updateLiveTokenBalanceInPoolData((bytes32,address[],(uint8,address,bool)[],uint256[],uint256[],uint256[],uint256[]),uint256,uint8,uint256)":"aa01edb3"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVaultExtension\",\"name\":\"vaultExtension\",\"type\":\"address\"},{\"internalType\":\"contract IAuthorizer\",\"name\":\"authorizer\",\"type\":\"address\"},{\"internalType\":\"contract IProtocolFeeController\",\"name\":\"protocolFeeController\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AfterSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AllZeroInputs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AmountGivenZero\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"AmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"AmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceNotSettled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BalanceOverflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeAddLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeInitializeHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeRemoveLiquidityHookFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BeforeSwapHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"BptAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"BptAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"BufferNotInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BufferSharesInvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"BufferTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotReceiveEth\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotSwapSameToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CodecOverflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportAddLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportDonation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportRemoveLiquidityCustom\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DoesNotSupportUnbalancedLiquidity\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DynamicSwapFeeHookFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeePrecisionTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxAmountIn\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountInAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minAmountOut\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedAmountOutBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"HookAdjustedSwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolFactory\",\"type\":\"address\"}],\"name\":\"HookRegistrationFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRemoveLiquidityKind\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenDecimals\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"InvalidUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"invariantRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxInvariantRatio\",\"type\":\"uint256\"}],\"name\":\"InvariantRatioAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"invariantRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minInvariantRatio\",\"type\":\"uint256\"}],\"name\":\"InvariantRatioBelowMin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minIssuedShares\",\"type\":\"uint256\"}],\"name\":\"IssuedSharesBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MultipleNonZeroInputs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughBufferShares\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedUnderlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualUnderlyingAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughUnderlying\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"expectedWrappedAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualWrappedAmount\",\"type\":\"uint256\"}],\"name\":\"NotEnoughWrapped\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotStaticCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotVaultDelegateCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PauseBufferPeriodDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PercentageAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInRecoveryMode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotInitialized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"PoolTotalSupplyTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProtocolFeesExceedTotalCollected\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QueriesDisabledPermanently\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"QuoteResultSpoofed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RouterNotTrusted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntToUint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapFeePercentageTooLow\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limit\",\"type\":\"uint256\"}],\"name\":\"SwapLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"expectedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"actualToken\",\"type\":\"address\"}],\"name\":\"TokensMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TradeAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultBuffersArePaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultIsNotUnlocked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultNotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowDurationTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPauseWindowExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VaultPaused\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"WrapAmountTooSmall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongProtocolFeeControllerDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"WrongUnderlyingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultAdminDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongVaultExtensionDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateSwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"AggregateYieldFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IAuthorizer\",\"name\":\"newAuthorizer\",\"type\":\"address\"}],\"name\":\"AuthorizerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesBurned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"issuedShares\",\"type\":\"uint256\"}],\"name\":\"BufferSharesMinted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsAddedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityAddedToBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"liquidityProvider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"amountsRemovedRaw\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmountsRaw\",\"type\":\"uint256[]\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountWrapped\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"LiquidityRemovedFromBuffer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"PoolPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"recoveryMode\",\"type\":\"bool\"}],\"name\":\"PoolRecoveryModeStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"name\":\"PoolRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IProtocolFeeController\",\"name\":\"newProtocolFeeController\",\"type\":\"address\"}],\"name\":\"ProtocolFeeControllerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeeAmount\",\"type\":\"uint256\"}],\"name\":\"Swap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"SwapFeePercentageChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"burnedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"withdrawnUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Unwrap\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"eventKey\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"eventData\",\"type\":\"bytes\"}],\"name\":\"VaultAuxiliary\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultBuffersPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"paused\",\"type\":\"bool\"}],\"name\":\"VaultPausedStateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"VaultQueriesEnabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"depositedUnderlying\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mintedShares\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"bufferBalances\",\"type\":\"bytes32\"}],\"name\":\"Wrap\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"int256\",\"name\":\"delta\",\"type\":\"int256\"}],\"name\":\"accountDelta\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"amountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"buildTokenConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"contract IRateProvider[]\",\"name\":\"rateProviders\",\"type\":\"address[]\"}],\"name\":\"buildTokenConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"enum TokenType[]\",\"name\":\"tokenTypes\",\"type\":\"uint8[]\"},{\"internalType\":\"contract IRateProvider[]\",\"name\":\"rateProviders\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"yieldFeeFlags\",\"type\":\"bool[]\"}],\"name\":\"buildTokenConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"contract IRateProvider[]\",\"name\":\"rateProviders\",\"type\":\"address[]\"},{\"internalType\":\"bool[]\",\"name\":\"yieldFeeFlags\",\"type\":\"bool[]\"}],\"name\":\"buildTokenConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burnERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"lastLiveBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeYieldFeesDue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"ensurePoolNotPaused\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"ensureUnpausedAndGetVaultState\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isQueryDisabled\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isVaultPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"areBuffersPaused\",\"type\":\"bool\"}],\"internalType\":\"struct VaultState\",\"name\":\"vaultState\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tradeAmount\",\"type\":\"uint256\"}],\"name\":\"ensureValidSwapAmount\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tradeAmount\",\"type\":\"uint256\"}],\"name\":\"ensureValidTradeAmount\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"erc4626BufferWrapOrUnwrap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"forceLock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"forceUnlock\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"getBufferTokenBalancesBytes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getLastLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolFactoryMock\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPoolTokenCountAndIndexOfToken\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"getRawBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVaultExtension\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"guardedCheckEntered\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"internalGetBufferUnderlyingImbalance\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"internalGetBufferWrappedImbalance\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum Rounding\",\"name\":\"roundingDirection\",\"type\":\"uint8\"}],\"name\":\"loadPoolDataUpdatingBalancesAndYieldFees\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"enum Rounding\",\"name\":\"roundingDirection\",\"type\":\"uint8\"}],\"name\":\"loadPoolDataUpdatingBalancesAndYieldFeesReentrancy\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsInScaled18\",\"type\":\"uint256[]\"}],\"name\":\"manualAddLiquidity\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"updatedPoolData\",\"type\":\"tuple\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"internalType\":\"struct SwapState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"name\":\"manualBuildPoolSwapParams\",\"outputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"internalType\":\"struct SwapState\",\"name\":\"swapState\",\"type\":\"tuple\"}],\"name\":\"manualComputeAmountGivenScaled18\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"totalSwapFeeAmountScaled18\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"manualComputeAndChargeAggregateSwapFees\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSwapFeeAmountRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeeAmountRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"enum WrappingDirection\",\"name\":\"direction\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"}],\"internalType\":\"struct BufferWrapOrUnwrapParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"manualErc4626BufferWrapOrUnwrapReentrancy\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountInRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutRaw\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"manualFindTokenIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sessionId\",\"type\":\"uint256\"}],\"name\":\"manualGetAddLiquidityCalledFlagBySession\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"manualGetAggregateSwapFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"manualGetAggregateYieldFeeAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualGetCurrentUnlockSessionId\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualGetIsUnlocked\",\"outputs\":[{\"internalType\":\"StorageSlotExtension.BooleanSlotType\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualGetNonzeroDeltaCount\",\"outputs\":[{\"internalType\":\"StorageSlotExtension.Uint256SlotType\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"manualGetPoolConfigBits\",\"outputs\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"manualGetTokenDeltas\",\"outputs\":[{\"internalType\":\"TokenDeltaMappingSlotType\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"internalType\":\"struct SwapState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"name\":\"manualInternalSwap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"internalType\":\"struct SwapState\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"name\":\"manualLoadSwapState\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"internalType\":\"struct SwapState\",\"name\":\"swapState\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsIn\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"minBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AddLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"uint256[]\",\"name\":\"maxAmountsInScaled18\",\"type\":\"uint256[]\"}],\"name\":\"manualReentrancyAddLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOutScaled18\",\"type\":\"uint256[]\"}],\"name\":\"manualReentrancyRemoveLiquidity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"internalType\":\"struct SwapState\",\"name\":\"state\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"name\":\"manualReentrancySwap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"manualRegisterPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"}],\"name\":\"manualRegisterPoolAtTimestamp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"manualRegisterPoolPassThruTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"manualRegisterPoolWithSwapFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOutScaled18\",\"type\":\"uint256[]\"}],\"name\":\"manualRemoveLiquidity\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"updatedPoolData\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"manualSendToReentrancy\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"int256\",\"name\":\"delta\",\"type\":\"int256\"}],\"name\":\"manualSetAccountDelta\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"manualSetAddLiquidityCalledFlag\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"manualSetAggregateSwapFeeAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"manualSetAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"manualSetAggregateYieldFeeAmount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"manualSetAggregateYieldFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"underlyingToken\",\"type\":\"address\"}],\"name\":\"manualSetBufferAsset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"underlyingAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedAmount\",\"type\":\"uint256\"}],\"name\":\"manualSetBufferBalances\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"manualSetBufferOwnerShares\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"manualSetBufferTotalShares\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"hooksContract\",\"type\":\"address\"}],\"internalType\":\"struct HooksConfig\",\"name\":\"hooksConfig\",\"type\":\"tuple\"}],\"name\":\"manualSetHooksConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"}],\"name\":\"manualSetInitializedPool\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deltaCount\",\"type\":\"uint256\"}],\"name\":\"manualSetNonZeroDeltaCount\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenBalanceRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenBalanceLiveScaled18\",\"type\":\"uint256[]\"}],\"name\":\"manualSetPoolBalances\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint40\",\"name\":\"tokenDecimalDiffs\",\"type\":\"uint40\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isPoolRegistered\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct PoolConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"manualSetPoolConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"PoolConfigBits\",\"name\":\"config\",\"type\":\"bytes32\"}],\"name\":\"manualSetPoolConfigBits\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newPoolCreator\",\"type\":\"address\"}],\"name\":\"manualSetPoolCreator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowEndTime\",\"type\":\"uint32\"}],\"name\":\"manualSetPoolPauseWindowEndTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"}],\"name\":\"manualSetPoolPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"status\",\"type\":\"bool\"}],\"name\":\"manualSetPoolRegistered\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"}],\"name\":\"manualSetPoolTokenInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"}],\"name\":\"manualSetPoolTokenInfo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"manualSetPoolTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenBalanceRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenBalanceLiveScaled18\",\"type\":\"uint256[]\"}],\"name\":\"manualSetPoolTokensAndBalances\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"reserves\",\"type\":\"uint256\"}],\"name\":\"manualSetReservesOf\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"manualSetStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"isVaultPaused\",\"type\":\"bool\"}],\"name\":\"manualSetVaultPaused\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"isVaultPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isQueryDisabled\",\"type\":\"bool\"}],\"name\":\"manualSetVaultState\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"manualSettleReentrancy\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"paid\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"underlyingToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"underlyingHint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedHint\",\"type\":\"uint256\"}],\"name\":\"manualSettleUnwrap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"underlyingToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"wrappedToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"underlyingHint\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"wrappedHint\",\"type\":\"uint256\"}],\"name\":\"manualSettleWrap\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"manualTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"manualUnsafeSetStaticSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newAggregateSwapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"manualUpdateAggregateSwapFeePercentage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"},{\"internalType\":\"enum Rounding\",\"name\":\"roundingDirection\",\"type\":\"uint8\"}],\"name\":\"manualUpdatePoolDataLiveBalancesAndRates\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"}],\"name\":\"manualWritePoolBalancesToStorage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mintERC20\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"mockIsUnlocked\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"mockWithInitializedPool\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrapper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInUnderlying\",\"type\":\"uint256\"}],\"name\":\"previewDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOutWrapped\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrapper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOutWrapped\",\"type\":\"uint256\"}],\"name\":\"previewMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountInUnderlying\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrapper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInWrapped\",\"type\":\"uint256\"}],\"name\":\"previewRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOutUnderlying\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC4626\",\"name\":\"wrapper\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountOutUnderlying\",\"type\":\"uint256\"}],\"name\":\"previewWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountInWrapped\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"recoveryModeExit\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reentrancyGuardEntered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"maxBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"minAmountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct RemoveLiquidityParams\",\"name\":\"params\",\"type\":\"tuple\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOut\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"sendTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountHint\",\"type\":\"uint256\"}],\"name\":\"settle\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"credit\",\"type\":\"uint256\"}],\"name\":\"supplyCredit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenRaw\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"limitRaw\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct VaultSwapParams\",\"name\":\"vaultSwapParams\",\"type\":\"tuple\"}],\"name\":\"swap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountCalculated\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"debt\",\"type\":\"uint256\"}],\"name\":\"takeDebt\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unguardedCheckNotEntered\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"result\",\"type\":\"bytes\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"poolData\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"newRawBalance\",\"type\":\"uint256\"},{\"internalType\":\"enum Rounding\",\"name\":\"roundingDirection\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"}],\"name\":\"updateLiveTokenBalanceInPoolData\",\"outputs\":[{\"components\":[{\"internalType\":\"PoolConfigBits\",\"name\":\"poolConfigBits\",\"type\":\"bytes32\"},{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"}],\"internalType\":\"struct PoolData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"AllZeroInputs()\":[{\"details\":\"Input arrays for single token add/remove liquidity operations are expected to have one non-zero value, corresponding to the token being added or removed. This error results if all entries are zero.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total BPT amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\"}}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\"}}],\"BufferAlreadyInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferNotInitialized(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"BufferTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"FeePrecisionTooHigh()\":[{\"details\":\"Primary fee percentages are 18-decimal values, stored here in 64 bits, and calculated with full 256-bit precision. However, the resulting aggregate fees are stored in the Vault with 24-bit precision, which corresponds to 0.00001% resolution (i.e., a fee can be 1%, 1.00001%, 1.00002%, but not 1.000005%). Disallow setting fees such that there would be precision loss in the Vault, leading to a discrepancy between the aggregate fee calculated here and that stored in the Vault.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"params\":{\"amountIn\":\"The total token amount in\",\"maxAmountIn\":\"The amount of the limit that has been exceeded\",\"tokenIn\":\"The incoming token\"}}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"params\":{\"amountOut\":\"The total BPT amount out\",\"minAmountOut\":\"The amount of the limit that has been exceeded\",\"tokenOut\":\"The outgoing token\"}}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"HookRegistrationFailed(address,address,address)\":[{\"params\":{\"pool\":\"Address of the rejected pool\",\"poolFactory\":\"Address of the pool factory\",\"poolHooksContract\":\"Address of the hook contract that rejected the pool registration\"}}],\"InvalidUnderlyingToken(address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might do this (e.g., in an attempt to re-initialize the buffer).\",\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"InvariantRatioAboveMax(uint256,uint256)\":[{\"details\":\"This value is determined by each pool type, and depends on the specific math used to compute the price curve.\",\"params\":{\"invariantRatio\":\"The ratio of the new invariant (after an operation) to the old\",\"maxInvariantRatio\":\"The maximum allowed invariant ratio\"}}],\"InvariantRatioBelowMin(uint256,uint256)\":[{\"details\":\"This value is determined by each pool type, and depends on the specific math used to compute the price curve.\",\"params\":{\"invariantRatio\":\"The ratio of the new invariant (after an operation) to the old\",\"minInvariantRatio\":\"The minimum allowed invariant ratio\"}}],\"IssuedSharesBelowMin(uint256,uint256)\":[{\"details\":\"Shares issued during initialization are below the requested amount.\"}],\"MultipleNonZeroInputs()\":[{\"details\":\"Input arrays for single token add/remove liquidity operations are expected to have only one non-zero value, corresponding to the token being added or removed. This error results if there are multiple non-zero entries.\"}],\"NotEnoughUnderlying(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less underlying tokens than it should.\"}],\"NotEnoughWrapped(address,uint256,uint256)\":[{\"details\":\"A wrap/unwrap operation consumed more or returned less wrapped tokens than it should.\"}],\"NotVaultDelegateCall()\":[{\"details\":\"It can only be called by the Vault via delegatecall.\"}],\"PoolAlreadyInitialized(address)\":[{\"params\":{\"pool\":\"The already initialized pool\"}}],\"PoolAlreadyRegistered(address)\":[{\"params\":{\"pool\":\"The already registered pool\"}}],\"PoolInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInRecoveryMode(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolNotInitialized(address)\":[{\"params\":{\"pool\":\"The uninitialized pool\"}}],\"PoolNotPaused(address)\":[{\"params\":{\"pool\":\"The unpaused pool\"}}],\"PoolNotRegistered(address)\":[{\"params\":{\"pool\":\"The unregistered pool\"}}],\"PoolPauseWindowExpired(address)\":[{\"params\":{\"pool\":\"The pool\"}}],\"PoolPaused(address)\":[{\"params\":{\"pool\":\"The paused pool\"}}],\"PoolTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}],\"ProtocolFeesExceedTotalCollected()\":[{\"details\":\"This occurs when the sum of the parts (aggregate swap or yield fee) is greater than the whole (total swap or yield fee). Also validated when the protocol fee controller updates aggregate fee percentages in the Vault.\"}],\"SafeCastOverflowedIntToUint(int256)\":[{\"details\":\"An int value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"SwapFeePercentageTooHigh()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is above the maximum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapFeePercentageTooLow()\":[{\"details\":\"The Vault itself does not impose a universal minimum. Rather, it validates against the range specified by the `ISwapFeePercentageBounds` interface. and reverts with this error if it is below the minimum value returned by the pool. Pools with dynamic fees do not check these limits.\"}],\"SwapLimit(uint256,uint256)\":[{\"params\":{\"amount\":\"The total amount in or out\",\"limit\":\"The amount of the limit that has been exceeded\"}}],\"TokenAlreadyRegistered(address)\":[{\"params\":{\"token\":\"The duplicate token\"}}],\"TokenNotRegistered(address)\":[{\"params\":{\"token\":\"The unregistered token\"}}],\"TokensMismatch(address,address,address)\":[{\"params\":{\"actualToken\":\"The actual token found at that index\",\"expectedToken\":\"The correct token at a given index in the pool\",\"pool\":\"Address of the pool\"}}],\"WrapAmountTooSmall(address)\":[{\"params\":{\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}],\"WrongUnderlyingToken(address,address)\":[{\"details\":\"This should never happen, but a malicious wrapper contract might not return the correct address. Legitimate wrapper contracts should make the asset a constant or immutable value.\",\"params\":{\"underlyingToken\":\"The underlying token returned by `asset`\",\"wrappedToken\":\"The wrapped token corresponding to the buffer\"}}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateSwapFeePercentage\":\"The new aggregate swap fee percentage\",\"pool\":\"The pool whose aggregate swap fee percentage changed\"}},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"details\":\"The `ProtocolFeeController` will emit an event with the underlying change.\",\"params\":{\"aggregateYieldFeePercentage\":\"The new aggregate yield fee percentage\",\"pool\":\"The pool whose aggregate yield fee percentage changed\"}},\"Approval(address,address,address,uint256)\":{\"params\":{\"owner\":\"The token holder\",\"pool\":\"The pool token receiving the allowance\",\"spender\":\"The account being authorized to spend a given amount of the token\",\"value\":\"The number of tokens spender is authorized to transfer from owner\"}},\"AuthorizerChanged(address)\":{\"params\":{\"newAuthorizer\":\"The address of the new authorizer\"}},\"BufferSharesBurned(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"burnedShares\":\"The amount of \\\"internal BPT\\\" shares burned\",\"from\":\"The owner of the burned shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"BufferSharesMinted(address,address,uint256)\":{\"details\":\"The shares are not tokenized like pool BPT, but accounted for in the Vault. `getBufferOwnerShares` retrieves the current total shares for a given buffer and address, and `getBufferTotalShares` returns the \\\"totalSupply\\\" of a buffer.\",\"params\":{\"issuedShares\":\"The amount of \\\"internal BPT\\\" shares created\",\"to\":\"The owner of the minted shares\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsAddedRaw\":\"The amount of each token that was added, sorted in token registration order\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity added\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was deposited\",\"amountWrapped\":\"The amount of the wrapped token that was deposited\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"params\":{\"amountsRemovedRaw\":\"The amount of each token that was removed, sorted in token registration order\",\"kind\":\"The remove liquidity operation type (e.g., proportional, custom)\",\"liquidityProvider\":\"The user performing the operation\",\"pool\":\"The pool with liquidity removed\",\"swapFeeAmountsRaw\":\"The total swap fees charged, sorted in token registration order\",\"totalSupply\":\"The total supply of the pool after the operation\"}},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"details\":\"The underlying token can be derived from the wrapped token, so it's not included here.\",\"params\":{\"amountUnderlying\":\"The amount of the underlying token that was withdrawn\",\"amountWrapped\":\"The amount of the wrapped token that was withdrawn\",\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"wrappedToken\":\"The wrapped token that identifies the buffer\"}},\"PoolInitialized(address)\":{\"params\":{\"pool\":\"The pool being initialized\"}},\"PoolPausedStateChanged(address,bool)\":{\"params\":{\"paused\":\"True if the pool was paused\",\"pool\":\"The pool that was just paused or unpaused\"}},\"PoolRecoveryModeStateChanged(address,bool)\":{\"params\":{\"pool\":\"The pool\",\"recoveryMode\":\"True if recovery mode was enabled\"}},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"params\":{\"factory\":\"The factory creating the pool\",\"hooksConfig\":\"Flags indicating which hooks the pool supports and address of hooks contract\",\"liquidityManagement\":\"Supported liquidity management hook flags\",\"pauseWindowEndTime\":\"The pool's pause window end time\",\"pool\":\"The pool being registered\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"The static swap fee of the pool\",\"tokenConfig\":\"An array of descriptors for the tokens the pool will manage\"}},\"ProtocolFeeControllerChanged(address)\":{\"params\":{\"newProtocolFeeController\":\"The address of the new protocol fee controller\"}},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"params\":{\"amountIn\":\"Number of tokenIn tokens\",\"amountOut\":\"Number of tokenOut tokens\",\"pool\":\"The pool with the tokens being swapped\",\"swapFeeAmount\":\"Swap fee amount paid\",\"swapFeePercentage\":\"Swap fee percentage applied (can differ if dynamic)\",\"tokenIn\":\"The token entering the Vault (balance increases)\",\"tokenOut\":\"The token leaving the Vault (balance decreases)\"}},\"SwapFeePercentageChanged(address,uint256)\":{\"params\":{\"swapFeePercentage\":\"The new swap fee percentage for the pool\"}},\"Transfer(address,address,address,uint256)\":{\"params\":{\"from\":\"The token source\",\"pool\":\"The pool token being transferred\",\"to\":\"The token destination\",\"value\":\"The number of tokens\"}},\"Unwrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"burnedShares\":\"Number of shares (wrapped tokens) burned\",\"withdrawnUnderlying\":\"Number of underlying tokens withdrawn\",\"wrappedToken\":\"The wrapped token address\"}},\"VaultAuxiliary(address,bytes32,bytes)\":{\"params\":{\"eventData\":\"Encoded event data\",\"eventKey\":\"Event key\",\"pool\":\"Pool address\"}},\"VaultBuffersPausedStateChanged(bool)\":{\"details\":\"If buffers all paused, all buffer operations (i.e., all calls through the Router with `isBuffer` set to true) will revert.\",\"params\":{\"paused\":\"True if the Vault buffers were paused\"}},\"VaultPausedStateChanged(bool)\":{\"params\":{\"paused\":\"True if the Vault was paused\"}},\"Wrap(address,uint256,uint256,bytes32)\":{\"params\":{\"bufferBalances\":\"The final buffer balances, packed in 128-bit words (underlying, wrapped)\",\"depositedUnderlying\":\"Number of underlying tokens deposited\",\"mintedShares\":\"Number of shares (wrapped tokens) minted\",\"wrappedToken\":\"The wrapped token address\"}}},\"kind\":\"dev\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"details\":\"Caution should be exercised when adding liquidity because the Vault has the capability to transfer tokens from any user, given that it holds all allowances.\",\"params\":{\"params\":\"Parameters for the add liquidity (see above for struct definition)\"},\"returns\":{\"amountsIn\":\"Actual amounts of input tokens\",\"bptAmountOut\":\"Output pool token amount\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"buildTokenConfig(address[],address[])\":{\"details\":\"Infers TokenType (STANDARD or WITH_RATE) from the presence or absence of the rate provider.\"},\"buildTokenConfig(address[],address[],bool[])\":{\"details\":\"Infers TokenType (STANDARD or WITH_RATE) from the presence or absence of the rate provider.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"details\":\"All parameters are given in raw token decimal encoding. It requires the buffer to be initialized, and uses the internal wrapped token buffer when it has enough liquidity to avoid external calls.\",\"params\":{\"params\":\"Parameters for the wrap/unwrap operation (see struct definition)\"},\"returns\":{\"amountCalculatedRaw\":\"Calculated swap amount\",\"amountInRaw\":\"Amount of input tokens for the swap\",\"amountOutRaw\":\"Amount of output tokens from the swap\"}},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"details\":\"Reverts if the pool is not registered, or if the token does not belong to the pool.\",\"params\":{\"pool\":\"Address of the pool\",\"token\":\"Address of the token\"},\"returns\":{\"_0\":\"Number of tokens in the pool\",\"_1\":\"Index corresponding to the given token in the pool's token list\"}},\"getVaultExtension()\":{\"details\":\"Function is in the main Vault contract. The VaultExtension handles less critical or frequently used functions, since delegate calls through the Vault are more expensive than direct calls.\",\"returns\":{\"_0\":\"Address of the VaultExtension\"}},\"manualUnsafeSetStaticSwapFeePercentage(address,uint256)\":{\"details\":\"Does not check the value against any min/max limits normally enforced by the pool.\"},\"reentrancyGuardEntered()\":{\"returns\":{\"_0\":\"True if the Vault is currently executing a nonReentrant function\"}},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"details\":\"Trusted routers can burn pool tokens belonging to any user and require no prior approval from the user. Untrusted routers require prior approval from the user. This is the only function allowed to call _queryModeBalanceIncrease (and only in a query context).\",\"params\":{\"params\":\"Parameters for the remove liquidity (see above for struct definition)\"},\"returns\":{\"amountsOut\":\"Actual amounts of output tokens\",\"bptAmountIn\":\"Actual amount of BPT burned\",\"returnData\":\"Arbitrary (optional) data with an encoded response from the pool\"}},\"sendTo(address,address,uint256)\":{\"details\":\"There is no inverse operation for this function. Transfer funds to the Vault and call `settle` to cancel debts.\",\"params\":{\"amount\":\"Amount of tokens to send\",\"to\":\"Recipient address\",\"token\":\"Address of the token\"}},\"settle(address,uint256)\":{\"details\":\"Protects the caller against leftover dust in the Vault for the token being settled. The caller should know in advance how many tokens were paid to the Vault, so it can provide it as a hint to discard any excess in the Vault balance. If the given hint is equal to or higher than the difference in reserves, the difference in reserves is given as credit to the caller. If it's higher, the caller sent fewer tokens than expected, so settlement would fail. If the given hint is lower than the difference in reserves, the hint is given as credit to the caller. In this case, the excess would be absorbed by the Vault (and reflected correctly in the reserves), but would not affect settlement. The credit supplied by the Vault can be calculated as `min(reserveDifference, amountHint)`, where the reserve difference equals current balance of the token minus existing reserves of the token when the function is called.\",\"params\":{\"amountHint\":\"Amount paid as reported by the caller\",\"token\":\"Address of the token\"},\"returns\":{\"credit\":\"Credit received in return of the payment\"}},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"details\":\"All parameters are given in raw token decimal encoding.\",\"params\":{\"vaultSwapParams\":\"Parameters for the swap (see above for struct definition)\"},\"returns\":{\"amountCalculated\":\"Calculated swap amount\",\"amountIn\":\"Amount of input tokens for the swap\",\"amountOut\":\"Amount of output tokens from the swap\"}},\"transfer(address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"owner\":\"Address of the owner\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"success True if successful, false otherwise\"}},\"transferFrom(address,address,address,uint256)\":{\"details\":\"Notice that the pool token address is not included in the params. This function is exclusively called by the pool contract, so msg.sender is used as the token address.\",\"params\":{\"amount\":\"Amount of tokens to transfer\",\"from\":\"Address of the sender\",\"spender\":\"Address allowed to perform the transfer\",\"to\":\"Address of the recipient\"},\"returns\":{\"_0\":\"True if successful, false otherwise\"}},\"unlock(bytes)\":{\"details\":\"Performs a callback on msg.sender with arguments provided in `data`. The Callback is `transient`, meaning all balances for the caller have to be settled at the end.\",\"params\":{\"data\":\"Contains function signature and args to be passed to the msg.sender\"},\"returns\":{\"result\":\"Resulting data from the call\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AfterAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterAddLiquidity hook, indicating the transaction should revert.\"}],\"AfterInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the afterInitialize hook, indicating the transaction should revert.\"}],\"AfterRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the afterRemoveLiquidity hook, indicating the transaction should revert.\"}],\"AfterSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the afterSwap hook, indicating the transaction should revert.\"}],\"AllZeroInputs()\":[{\"notice\":\"No valid input was given for a single token operation.\"}],\"AmountGivenZero()\":[{\"notice\":\"The user tried to swap zero tokens.\"}],\"AmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A required amountIn exceeds the maximum limit specified for the operation.\"}],\"AmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The actual amount out is below the minimum limit specified for the operation.\"}],\"BalanceNotSettled()\":[{\"notice\":\"A transient accounting operation completed with outstanding token deltas.\"}],\"BalanceOverflow()\":[{\"notice\":\"One of the balances is above the maximum value that can be stored.\"}],\"BeforeAddLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeAddLiquidity hook, indicating the transaction should revert.\"}],\"BeforeInitializeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeInitialize hook, indicating the transaction should revert.\"}],\"BeforeRemoveLiquidityHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeRemoveLiquidity hook, indicating the transaction should revert.\"}],\"BeforeSwapHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"BptAmountInAboveMax(uint256,uint256)\":[{\"notice\":\"The required BPT amount in exceeds the maximum limit specified for the operation.\"}],\"BptAmountOutBelowMin(uint256,uint256)\":[{\"notice\":\"The BPT amount received from adding liquidity is below the minimum specified for the operation.\"}],\"BufferAlreadyInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was already initialized.\"}],\"BufferNotInitialized(address)\":[{\"notice\":\"The buffer for the given wrapped token was not initialized.\"}],\"BufferSharesInvalidOwner()\":[{\"notice\":\"Buffer shares were burned from the zero address.\"}],\"BufferSharesInvalidReceiver()\":[{\"notice\":\"Buffer shares were minted to the zero address.\"}],\"BufferTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a buffer can't be lower than the absolute minimum.\"}],\"CannotReceiveEth()\":[{\"notice\":\"The contract should not receive ETH.\"}],\"CannotSwapSameToken()\":[{\"notice\":\"The user attempted to swap a token for itself.\"}],\"CodecOverflow()\":[{\"notice\":\"Function called with an invalid value.\"}],\"DoesNotSupportAddLiquidityCustom()\":[{\"notice\":\"Pool does not support adding liquidity with a customized input.\"}],\"DoesNotSupportDonation()\":[{\"notice\":\"Pool does not support adding liquidity through donation.\"}],\"DoesNotSupportRemoveLiquidityCustom()\":[{\"notice\":\"Pool does not support removing liquidity with a customized input.\"}],\"DoesNotSupportUnbalancedLiquidity()\":[{\"notice\":\"Pool does not support adding / removing liquidity with an unbalanced input.\"}],\"DynamicSwapFeeHookFailed()\":[{\"notice\":\"The pool has returned false to the beforeSwap hook, indicating the transaction should revert.\"}],\"FeePrecisionTooHigh()\":[{\"notice\":\"Primary fee percentages result in an aggregate fee that cannot be stored with the required precision.\"}],\"HookAdjustedAmountInAboveMax(address,uint256,uint256)\":[{\"notice\":\"A hook adjusted amountIn exceeds the maximum limit specified for the operation.\"}],\"HookAdjustedAmountOutBelowMin(address,uint256,uint256)\":[{\"notice\":\"The hook adjusted amount out is below the minimum limit specified for the operation.\"}],\"HookAdjustedSwapLimit(uint256,uint256)\":[{\"notice\":\"A hook adjusted amount in or out has exceeded the limit specified in the swap request.\"}],\"HookRegistrationFailed(address,address,address)\":[{\"notice\":\"A hook contract rejected a pool on registration.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"InvalidAddLiquidityKind()\":[{\"notice\":\"Add liquidity kind not supported.\"}],\"InvalidRemoveLiquidityKind()\":[{\"notice\":\"Remove liquidity kind not supported.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"InvalidTokenDecimals()\":[{\"notice\":\"Tokens with more than 18 decimals are not supported.\"}],\"InvalidTokenType()\":[{\"notice\":\"The token type given in a TokenConfig during pool registration is invalid.\"}],\"InvalidUnderlyingToken(address)\":[{\"notice\":\"A wrapped token reported the zero address as its underlying token asset.\"}],\"InvariantRatioAboveMax(uint256,uint256)\":[{\"notice\":\"An add liquidity operation increased the invariant above the limit.\"}],\"InvariantRatioBelowMin(uint256,uint256)\":[{\"notice\":\"A remove liquidity operation decreased the invariant below the limit.\"}],\"MaxTokens()\":[{\"notice\":\"The token count is above the maximum allowed.\"}],\"MinTokens()\":[{\"notice\":\"The token count is below the minimum allowed.\"}],\"MultipleNonZeroInputs()\":[{\"notice\":\"More than one non-zero value was given for a single token operation.\"}],\"NotEnoughBufferShares()\":[{\"notice\":\"The user is trying to remove more than their allocated shares from the buffer.\"}],\"NotStaticCall()\":[{\"notice\":\"A state-changing transaction was initiated in a context that only allows static calls.\"}],\"NotVaultDelegateCall()\":[{\"notice\":\"The `VaultExtension` contract was called by an account directly.\"}],\"OutOfBounds()\":[{\"notice\":\"Function called with an invalid bitLength or offset.\"}],\"PauseBufferPeriodDurationTooLarge()\":[{\"notice\":\"The caller specified a buffer period longer than the maximum.\"}],\"PercentageAboveMax()\":[{\"notice\":\"A given percentage is above the maximum (usually a value close to FixedPoint.ONE, or 1e18 wei).\"}],\"PoolAlreadyInitialized(address)\":[{\"notice\":\"A pool has already been initialized. `initialize` may only be called once.\"}],\"PoolAlreadyRegistered(address)\":[{\"notice\":\"A pool has already been registered. `registerPool` may only be called once.\"}],\"PoolInRecoveryMode(address)\":[{\"notice\":\"Cannot enable recovery mode when already enabled.\"}],\"PoolNotInRecoveryMode(address)\":[{\"notice\":\"Cannot disable recovery mode when not enabled.\"}],\"PoolNotInitialized(address)\":[{\"notice\":\"A referenced pool has not been initialized.\"}],\"PoolNotPaused(address)\":[{\"notice\":\"Governance tried to unpause the Pool when it was not paused.\"}],\"PoolNotRegistered(address)\":[{\"notice\":\"A pool has not been registered.\"}],\"PoolPauseWindowExpired(address)\":[{\"notice\":\"Governance tried to pause a Pool after the pause period expired.\"}],\"PoolPaused(address)\":[{\"notice\":\"A user tried to perform an operation involving a paused Pool.\"}],\"PoolTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a pool token can't be lower than the absolute minimum.\"}],\"ProtocolFeesExceedTotalCollected()\":[{\"notice\":\"Error raised when there is an overflow in the fee calculation.\"}],\"QueriesDisabled()\":[{\"notice\":\"A user tried to execute a query operation when they were disabled.\"}],\"QueriesDisabledPermanently()\":[{\"notice\":\"An admin tried to re-enable queries, but they were disabled permanently.\"}],\"QuoteResultSpoofed()\":[{\"notice\":\"Quote reverted with a reserved error code.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"RouterNotTrusted()\":[{\"notice\":\"An unauthorized Router tried to call a permissioned function (i.e., using the Vault's token allowance).\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SwapFeePercentageTooHigh()\":[{\"notice\":\"Error raised when the swap fee percentage is greater than the maximum allowed value.\"}],\"SwapFeePercentageTooLow()\":[{\"notice\":\"Error raised when the swap fee percentage is less than the minimum allowed value.\"}],\"SwapLimit(uint256,uint256)\":[{\"notice\":\"An amount in or out has exceeded the limit specified in the swap request.\"}],\"TokenAlreadyRegistered(address)\":[{\"notice\":\"A token was already registered (i.e., it is a duplicate in the pool).\"}],\"TokenNotRegistered(address)\":[{\"notice\":\"The user attempted to operate with a token that is not in the pool.\"}],\"TokensMismatch(address,address,address)\":[{\"notice\":\"The token list passed into an operation does not match the pool tokens in the pool.\"}],\"TradeAmountTooSmall()\":[{\"notice\":\"The amount given or calculated for an operation is below the minimum limit.\"}],\"VaultBuffersArePaused()\":[{\"notice\":\"Buffer operation attempted while vault buffers are paused.\"}],\"VaultIsNotUnlocked()\":[{\"notice\":\"A user called a Vault function (swap, add/remove liquidity) outside the lock context.\"}],\"VaultNotPaused()\":[{\"notice\":\"Governance tried to unpause the Vault when it was not paused.\"}],\"VaultPauseWindowDurationTooLarge()\":[{\"notice\":\"The caller specified a pause window period longer than the maximum.\"}],\"VaultPauseWindowExpired()\":[{\"notice\":\"Governance tried to pause the Vault after the pause period expired.\"}],\"VaultPaused()\":[{\"notice\":\"A user tried to perform an operation while the Vault was paused.\"}],\"WrapAmountTooSmall(address)\":[{\"notice\":\"The amount given to wrap/unwrap was too small, which can introduce rounding issues.\"}],\"WrongProtocolFeeControllerDeployment()\":[{\"notice\":\"The `ProtocolFeeController` contract was configured with an incorrect Vault address.\"}],\"WrongUnderlyingToken(address,address)\":[{\"notice\":\"The wrapped token asset does not match the underlying token.\"}],\"WrongVaultAdminDeployment()\":[{\"notice\":\"The `VaultAdmin` contract was configured with an incorrect Vault address.\"}],\"WrongVaultExtensionDeployment()\":[{\"notice\":\"The `VaultExtension` contract was configured with an incorrect Vault address.\"}],\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}]},\"events\":{\"AggregateSwapFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate swap fee.\"},\"AggregateYieldFeePercentageChanged(address,uint256)\":{\"notice\":\"A protocol or pool creator fee has changed, causing an update to the aggregate yield fee.\"},\"Approval(address,address,address,uint256)\":{\"notice\":\"The allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"AuthorizerChanged(address)\":{\"notice\":\"A new authorizer is set by `setAuthorizer`.\"},\"BufferSharesBurned(address,address,uint256)\":{\"notice\":\"Buffer shares were burned for an ERC4626 buffer corresponding to a given wrapped token.\"},\"BufferSharesMinted(address,address,uint256)\":{\"notice\":\"Buffer shares were minted for an ERC4626 buffer corresponding to a given wrapped token.\"},\"LiquidityAdded(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been added to a pool (including initialization).\"},\"LiquidityAddedToBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was added to an ERC4626 buffer corresponding to the given wrapped token.\"},\"LiquidityRemoved(address,address,uint8,uint256,uint256[],uint256[])\":{\"notice\":\"Liquidity has been removed from a pool.\"},\"LiquidityRemovedFromBuffer(address,uint256,uint256,bytes32)\":{\"notice\":\"Liquidity was removed from an ERC4626 buffer.\"},\"PoolInitialized(address)\":{\"notice\":\"A Pool was initialized by calling `initialize`.\"},\"PoolPausedStateChanged(address,bool)\":{\"notice\":\"A Pool's pause status has changed.\"},\"PoolRecoveryModeStateChanged(address,bool)\":{\"notice\":\"Recovery mode has been enabled or disabled for a pool.\"},\"PoolRegistered(address,address,(address,uint8,address,bool)[],uint256,uint32,(address,address,address),(bool,bool,bool,bool,bool,bool,bool,bool,bool,bool,address),(bool,bool,bool,bool))\":{\"notice\":\"A Pool was registered by calling `registerPool`.\"},\"ProtocolFeeControllerChanged(address)\":{\"notice\":\"A new protocol fee controller is set by `setProtocolFeeController`.\"},\"Swap(address,address,address,uint256,uint256,uint256,uint256)\":{\"notice\":\"A swap has occurred.\"},\"SwapFeePercentageChanged(address,uint256)\":{\"notice\":\"Emitted when the swap fee percentage of a pool is updated.\"},\"Transfer(address,address,address,uint256)\":{\"notice\":\"Pool tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"},\"Unwrap(address,uint256,uint256,bytes32)\":{\"notice\":\"An unwrap operation has occurred.\"},\"VaultAuxiliary(address,bytes32,bytes)\":{\"notice\":\"Pools can use this event to emit event data from the Vault.\"},\"VaultBuffersPausedStateChanged(bool)\":{\"notice\":\"The Vault buffers pause status has changed.\"},\"VaultPausedStateChanged(bool)\":{\"notice\":\"The Vault's pause status has changed.\"},\"VaultQueriesDisabled()\":{\"notice\":\"`disableQuery` has been called on the Vault, disabling query functionality.\"},\"VaultQueriesEnabled()\":{\"notice\":\"`enableQuery` has been called on the Vault, enabling query functionality.\"},\"Wrap(address,uint256,uint256,bytes32)\":{\"notice\":\"A wrap operation has occurred.\"}},\"kind\":\"user\",\"methods\":{\"addLiquidity((address,address,uint256[],uint256,uint8,bytes))\":{\"notice\":\"Adds liquidity to a pool.\"},\"erc4626BufferWrapOrUnwrap((uint8,uint8,address,uint256,uint256))\":{\"notice\":\"Wraps/unwraps tokens based on the parameters provided.\"},\"getPoolTokenCountAndIndexOfToken(address,address)\":{\"notice\":\"Gets the index of a token in a given pool.\"},\"getVaultExtension()\":{\"notice\":\"Returns the VaultExtension contract address.\"},\"reentrancyGuardEntered()\":{\"notice\":\"Expose the state of the Vault's reentrancy guard.\"},\"removeLiquidity((address,address,uint256,uint256[],uint8,bytes))\":{\"notice\":\"Removes liquidity from a pool.\"},\"sendTo(address,address,uint256)\":{\"notice\":\"Sends tokens to a recipient.\"},\"settle(address,uint256)\":{\"notice\":\"Settles deltas for a token; must be successful for the current lock to be released.\"},\"swap((uint8,address,address,address,uint256,uint256,bytes))\":{\"notice\":\"Swaps tokens based on provided parameters.\"},\"transfer(address,address,uint256)\":{\"notice\":\"Transfers pool token from owner to a recipient.\"},\"transferFrom(address,address,address,uint256)\":{\"notice\":\"Transfers pool token from a sender to a recipient using an allowance.\"},\"unlock(bytes)\":{\"notice\":\"Creates a context for a sequence of operations (i.e., \\\"unlocks\\\" the Vault).\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/test/VaultMock.sol\":\"VaultMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol\":{\"keccak256\":\"0xa7adbaf80bc9cfa44e41776f632b5d7cb2c02c562a124c0e4cb17f06c4a54db3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e4fdf59a7f3dc3b7d6bb6f466e4a0a6263b66c0fc12492baf06ec8c6fdcc2398\",\"dweb:/ipfs/QmWxLpicLjGdgGQ8GjuN9YfDyVapYWwzdgET86ucs9hmFa\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/test/IVaultMainMock.sol\":{\"keccak256\":\"0x63f1a4d7fbd2ed33fb622cc5a141a9ccc1d3f99f30ac5d72b75a2bb36965bd42\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de9db0a61bc99572d72030c73feff2e4337104fd43a3d764f181b857c621246c\",\"dweb:/ipfs/QmcxzP6SqNAkqg4APteqzsxRkxyxcZhMF21b3sCKiCymSP\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\":{\"keccak256\":\"0x6f8c558b0520faae0c4576f30225b5a97821a4cd210878a0ba10c102a2f753f3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b40aa7a5ee39fa2e297c684fd29ad45d866f1fc61cd997120a417b02a4d908aa\",\"dweb:/ipfs/QmYP5pQAF7SDLgy3aerqfnc4VwdmfQix2jcQUNL3o83BY9\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IERC20MultiTokenErrors.sol\":{\"keccak256\":\"0x4994bc0f8e5905640876a9411dadb73221ea2b7b1168d22cf5fe44ee1ca16960\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://69a0a6ab9c2622426ccfcb7263deb5615e589e98b3b31ea9fcd21595bb42a13d\",\"dweb:/ipfs/QmVW6GVXGTHnVo8MGk7zdLMASR8uN7khPsrEMXwgy4NBrQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IPoolLiquidity.sol\":{\"keccak256\":\"0x0cdc0d3817887d0439c3c6f4c811bd37091ef75a855dd8b14c0e8f337e2799dd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4ffd05df90ccdf19a35177fd6c6f78edc61ca2a37df7d0934932a3ad5a96f1e6\",\"dweb:/ipfs/QmaCmKktnMy4XXZn2FaKTjwQBGUhuXKikbxCbPX6K5PPgi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-pool-utils/contracts/BasePoolAuthentication.sol\":{\"keccak256\":\"0x3ce8a430e284241e1b7f07994d0e1fd57bc16d0322cad658fea4519bd6b79ee3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://70e91f80e4f484b2d7beb894e873f95092384784147d77437ca0f88a0e966b80\",\"dweb:/ipfs/QmQZDVcHJU2xceLdUJnxf7mXu7zXXYpnfMVppRxTcKPoTm\"]},\"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol\":{\"keccak256\":\"0xa97e2a0fd95d78dcecf67fd8c554ced63bbd6da372b6f8b12f16ad526b6ec608\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d98ad2022f9e3653fd63daca8c0725c7ccbd4f63d0d27c413e90669ce7284a96\",\"dweb:/ipfs/QmZ62RpJj3qSUrrdVD3H72qEszTUuvGkFLSBXAKMhBn5nX\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/BufferHelpers.sol\":{\"keccak256\":\"0x528ef10b3f14bb2b1d64043ec8c7d732a502147fe9d4e4bd3339f57e40fe3ce7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9a71bd94d0c5ba098b04b2bc65a7842c1bb3b96d91dd6a95756efc468cd6dbc5\",\"dweb:/ipfs/QmPrHPMmrdpJjvny8UjWbWFJo5nWpBtmjxWGbX1zDbNx6Z\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol\":{\"keccak256\":\"0x89bd8b60aa203c8aa72af6e88671af68f4407a26dd3e0541b0e4dc387fd0081e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://411eb9ee6df963198102de5ae597c1f1377b0a45be23f17d38463f2eeefa2b0a\",\"dweb:/ipfs/QmcEaMawADJEyLswG5hhvhQuTNV3XUxBVu3YZCbJzQkoJ7\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol\":{\"keccak256\":\"0x9dc4c8d6dd5dbc108dd377dab73a3e6c84e8c104713d2afb3cba8acc9ddf4c63\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2ef7c65fe356144f8cd720109b818e1ec6cc495ca35b55ca273ef9db45c6ae00\",\"dweb:/ipfs/QmREJgnfgoqemnYKvfYjTFJBAMsV9VAKA5AY5Woprpc1vs\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/FactoryWidePauseWindow.sol\":{\"keccak256\":\"0x9594d2dc75aa8c92bb39d30cd76d3bfbb203fe17c4ae35b6f8d882ed4ac868d4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a43d706d34c9f071bed27372100fedaeb12ec4c5c3529e150c8684444c4a619\",\"dweb:/ipfs/QmYUnJ2CtjJY2XktSzamExryTNbAYjesnymMpqTvQuXUka\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/PackedTokenBalance.sol\":{\"keccak256\":\"0xa1014b8d96cdfd149f502cda06f25e51885a6456b41061ed213086fcc1c496b4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8a96e7e176f73762c6de904de39472fe970f12f6d3631097227bc664bd0780c1\",\"dweb:/ipfs/QmXcu5bk8tJTqR6UwkdKNtsodzqYGpJsPdfjQmdJFyKZjR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/RevertCodec.sol\":{\"keccak256\":\"0xb4ee9e1543d36bdf9eeb4a9d5ab41170723239a1e27a2272f2e31de4765c019b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://3b70dd5e4fa496c2c1efb6bd20368587ba3c9c0d0afac9dc3631a29ff2628f99\",\"dweb:/ipfs/QmQigXUkpDuVK5VSX67RABrAC9bashPcHMasgPRNJb4k8Z\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/ScalingHelpers.sol\":{\"keccak256\":\"0xf98fec19a1516432d7540f0cde2e967b627afbc5a361835766d57be8ba10b4e2\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://94b49929bff77d1fdaab8916350356fc9816317beef4f33c3af0e6a40493d01c\",\"dweb:/ipfs/QmPPhtmpPvgedbtQaJZz7JQCmiGKKTHmfh7EGhJS1yUCia\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/TransientStorageHelpers.sol\":{\"keccak256\":\"0xb5f6b1d0ee3f295a717ce58329eaadccb1eefc2e1e02e2e7c438e377628475cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03c1b9bc73b7d14d9e1948a31c271a03a6ba4291f44d9aff17e60d300c111d0d\",\"dweb:/ipfs/QmNpW3iD3ST76N6xTncuVgYSuafSqFkXUmxNaK8uybr96G\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/WordCodec.sol\":{\"keccak256\":\"0xeb183354089582d4a3fc8ded6cc410a2937f2eac2aa47b3ab13b0f5e6ede10e5\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ecef18f7f0f57d749d5b0e11ab887299be15e1b6971a4bb9104d06e45705231b\",\"dweb:/ipfs/QmeYRDD5UtVKu2YFJm3SmHFriK6LUa2Tzg7EdZrneEfzNR\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/SlotDerivation.sol\":{\"keccak256\":\"0xb5837350f4b921ad2b4f7a3863a3d5cfe64525f573ba04ee2232c498fb1005ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b641a078360ea67827036a4b2d4fdebb045519106d3888d9cbb4f9b7bf3362b2\",\"dweb:/ipfs/QmR3DQvqKzAojEMdHbYM3Pqc7WZe3YXRHTDSftMegrELQ5\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x79f2ec4f7314bd1c3555368ff02bb9d382489dc8bbd7efbbf306f9a5084f3bec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a57c155451c5b1c1c59a27770754ccd9ba1be9344db6ac45b8744eba5fa4fa2f\",\"dweb:/ipfs/QmarkRwGaS3egg1FaQH6LibqjT6NocVUbD1jMPWtFxFaQV\"]},\"@balancer-labs/v3-vault/contracts/BasePoolMath.sol\":{\"keccak256\":\"0x28078c6fa4d55418c25505d4683642cb51fe55b2155ef7418db6c70631a30d6a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://864b91fdc2b69725bcc07f06d9adebe87117561582fa58f1e4410d8928cd205c\",\"dweb:/ipfs/QmWCDsbTxtmEMLhorqfGF1LDMHMqqVnV9sk9mUTPR7eog8\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x4910eb69dc3e3141803a36fb176349ae3d774f4a9811e4d486c44bf6a8e4e055\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://afec051b387a1dad075acfbe0093b443e9e5827e29f7b960af3c1b69645aa290\",\"dweb:/ipfs/QmdLcyhmHCiEyVbFsVByyjEdUn9pDTzVAPNyBpdH2YEs4Y\"]},\"@balancer-labs/v3-vault/contracts/Vault.sol\":{\"keccak256\":\"0x9e8cd2281dc50fa2f07b57e9c1287ceb437616697d85cabe02d98a302b94e488\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://322585130a4fbb52430a720eb493dbc7bfbfa2fa28634a32429b572805d0b0b1\",\"dweb:/ipfs/Qmbm7aEZR4ZuUQEh5EepXGXzq9Ay8m3XbRKCHtbhb3gvfz\"]},\"@balancer-labs/v3-vault/contracts/VaultCommon.sol\":{\"keccak256\":\"0xad949728097754fb91dd82f46a4f3430f0caf092fe719f04c030325e623c59cd\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b6ba4635b64181a08098f2b4bde9bc6ceb8580d24654ec39c3d38ac2c8082317\",\"dweb:/ipfs/QmbthXemuT8Qvs2jdTADdyzbcPuZaKWfZjRn7j8dWuwffs\"]},\"@balancer-labs/v3-vault/contracts/VaultExtension.sol\":{\"keccak256\":\"0x40490c1c492b44a3fbc04a9642abb41c86b124a0e510aedbee2886040058a5a6\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://7b7d969f2f08bb32524e3678ef1b9cbdd3d9630b0cee495527a42a0ca640cd94\",\"dweb:/ipfs/QmSpqFru9X2V1SD3cE63jcdNiHLZdTvXXGw6suCbzHnqxM\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@balancer-labs/v3-vault/contracts/VaultStorage.sol\":{\"keccak256\":\"0x283153cc86b04e7b5ded7b317a7773cd52912661922d477bccc7e3ef9c4fd332\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://30e03b35be9f4aebba5ea1f6fd1f72fb37990c916a22ef1dd4a01af809f89146\",\"dweb:/ipfs/QmNri89FgxWKFPkN67tvzAGf6kSyMuYvZd62ZW9a5MJBJH\"]},\"@balancer-labs/v3-vault/contracts/lib/HooksConfigLib.sol\":{\"keccak256\":\"0xaf3a7b4bbc1427ffb36b89cab5e485494afbddaff7195e0533f9c29a88c217b3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c653115b697d1c2a340a485e37a1d1a7b18bd3da4304ef12480bf9dcb8f61dc8\",\"dweb:/ipfs/QmfPNVqSeuG6gJr2x4y41czE5ivBz8vLpZ3R97VVnbK1uT\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolConfigConst.sol\":{\"keccak256\":\"0xcec5acd992ba3d85194d2a66de785676e5fbd76c7ef4bd75f581582c637e9191\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://03feaba5c47de6cfa364a9f78f3d1cbc48c6e59e89348a56e773631ce3d52c4d\",\"dweb:/ipfs/QmWZmpFLKk6qEsTtbPaiKBWvTnSuYzQdbNJZX4Bng16c3F\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolConfigLib.sol\":{\"keccak256\":\"0x0df4ac214754751acdaa044f697ef2a45823689689aac22a6a102c8e543d97c7\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://13c1c708ac1a1f5523282a7430d7f5300120ac17b3c77a0bd103d2afe7aff979\",\"dweb:/ipfs/QmPstE7ZquJ4zMaCEXix8iCXc6hTSyNQaR9Z4aWBMTa9ys\"]},\"@balancer-labs/v3-vault/contracts/lib/PoolDataLib.sol\":{\"keccak256\":\"0x0f004ef9c126426c1391516247f90cbb699982f3c545c821c2bdc3796c93f781\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://93d7b94cb4e0c9eee127258fb69e390d34c391444f337b6cc5cbe5beb702f4e7\",\"dweb:/ipfs/QmbswDz4DrsXaEh9RSvpmWKX5JCLoTavyAX2511eKr5rQd\"]},\"@balancer-labs/v3-vault/contracts/lib/VaultExtensionsLib.sol\":{\"keccak256\":\"0xf17a6fb82ff8eac940260544aa041e2cf8b826c0f7e205b4d52a4c5394a7ee38\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://c88893eba6593f2f7ef05e3ffeb61416b6cc630eaad2efa90e77262f3282ab81\",\"dweb:/ipfs/QmX9XhQix9yKT7buiT77igy8Bf1jvwwYGxpmTr4e5mWnQD\"]},\"@balancer-labs/v3-vault/contracts/lib/VaultStateLib.sol\":{\"keccak256\":\"0xc40f34646f76afe536a326173d3c8cd663a655375531f65f3e6f7c63cecddeeb\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a97b6d2363d70869b9cf66104a6c6bdfc84d351085c94b23b0104f2608e52ff4\",\"dweb:/ipfs/QmVPVR8F6nSxxhxTpFp5cgH9n1dE2E5UXD6cPauumtpS3e\"]},\"@balancer-labs/v3-vault/contracts/test/InputHelpersMock.sol\":{\"keccak256\":\"0xe3cff486fec0d86b1feed821a1ae1d9bd69bd5c5a0a9a61f6eb8ce238637241b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8f7338c0826abdde07c9de03ab44f2509582697b2a68062c66f20294bb9038ec\",\"dweb:/ipfs/QmNPZwFRhWqxbAGkZvp16r4qMLvignbgiDcZdUZtXC1MSm\"]},\"@balancer-labs/v3-vault/contracts/test/PoolFactoryMock.sol\":{\"keccak256\":\"0x4c9ef43b6c38f849cf6d140a98aef2d67d34326651fd68775cd07d77f8dde76e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://02d90ecbdd7f18886e9273ba8be71627fb5fa0292910853ebd3d5d53bbfd96dd\",\"dweb:/ipfs/QmXhVBpM5L15DDiwxeRfJ8TFSmTtF1uH8JzQirpTCWA6Q8\"]},\"@balancer-labs/v3-vault/contracts/test/PoolMock.sol\":{\"keccak256\":\"0xcd2e8d9d618bfb81a9696acb2419a33d04f48f0b548402c0b32e16d2e8708c3d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://01e7508e239ab908574226d9c009a0f0af5759d941e59a3d7362735ddd859980\",\"dweb:/ipfs/QmQDAS3tugJ1kRFgUsnyKJbMhEtD7464jfTqjYWZc2tQz2\"]},\"@balancer-labs/v3-vault/contracts/test/VaultMock.sol\":{\"keccak256\":\"0xcbc8c1467bcb0a525f6c00f173d7e5c4efc29447c58fe510df90a34c0ae60983\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://81dadf74e0718ea02f57c2aed5b06486a72ef7b11b6c8723926f823236beedbc\",\"dweb:/ipfs/QmQaZuLsmadbaSGZ77e2viSG5AM43TSGRHm218kmDS4Ks6\"]},\"@balancer-labs/v3-vault/contracts/token/ERC20MultiToken.sol\":{\"keccak256\":\"0x49578c053271957fa9661c6a3e3ce6310a3f0690be6deca9eeb28f4e129bcfd3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e3bbd6d7baa790f6e259dfcab0ae2b0db96c08b21739dca829217af6fdbea15d\",\"dweb:/ipfs/QmVgirrgRbkHVdfthMKTJi98QeHmx9DHTT1WBNQRYogpBn\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"@openzeppelin/contracts/utils/Create2.sol\":{\"keccak256\":\"0x2b9807d194b92f1068d868e9587d27037264a9a067c778486f86ae21c61cbd5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://22d71f40aa38a20cf466d8647452a6e3f746353474f8c8af40f03aa8cae38420\",\"dweb:/ipfs/QmQ752Hz5av7YDK8pFojzb5qgeXQvfsdkdwkHVzaXoYAZR\"]},\"@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}"}},"@balancer-labs/v3-vault/contracts/token/ERC20MultiToken.sol":{"ERC20MultiToken":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"inputs":[{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"PoolTotalSupplyTooLow","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"}],\"name\":\"PoolTotalSupplyTooLow\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"}],\"devdoc\":{\"details\":\"The ERC20MultiToken is an ERC20-focused multi-token implementation that is fully compatible with the ERC20 API on the token side. It also allows for the minting and burning of tokens on the multi-token side.\",\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"PoolTotalSupplyTooLow(uint256)\":[{\"params\":{\"totalSupply\":\"The total supply value that was below the minimum\"}}]},\"events\":{\"Approval(address,address,address,uint256)\":{\"params\":{\"owner\":\"The token holder\",\"pool\":\"The pool token receiving the allowance\",\"spender\":\"The account being authorized to spend a given amount of the token\",\"value\":\"The number of tokens spender is authorized to transfer from owner\"}},\"Transfer(address,address,address,uint256)\":{\"params\":{\"from\":\"The token source\",\"pool\":\"The pool token being transferred\",\"to\":\"The token destination\",\"value\":\"The number of tokens\"}}},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"PoolTotalSupplyTooLow(uint256)\":[{\"notice\":\"The total supply of a pool token can't be lower than the absolute minimum.\"}]},\"events\":{\"Approval(address,address,address,uint256)\":{\"notice\":\"The allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,address,uint256)\":{\"notice\":\"Pool tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"user\",\"methods\":{},\"notice\":\"Store Token data and handle accounting for pool tokens in the Vault.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@balancer-labs/v3-vault/contracts/token/ERC20MultiToken.sol\":\"ERC20MultiToken\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IERC20MultiTokenErrors.sol\":{\"keccak256\":\"0x4994bc0f8e5905640876a9411dadb73221ea2b7b1168d22cf5fe44ee1ca16960\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://69a0a6ab9c2622426ccfcb7263deb5615e589e98b3b31ea9fcd21595bb42a13d\",\"dweb:/ipfs/QmVW6GVXGTHnVo8MGk7zdLMASR8uN7khPsrEMXwgy4NBrQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/EVMCallModeHelpers.sol\":{\"keccak256\":\"0x9dc4c8d6dd5dbc108dd377dab73a3e6c84e8c104713d2afb3cba8acc9ddf4c63\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://2ef7c65fe356144f8cd720109b818e1ec6cc495ca35b55ca273ef9db45c6ae00\",\"dweb:/ipfs/QmREJgnfgoqemnYKvfYjTFJBAMsV9VAKA5AY5Woprpc1vs\"]},\"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x79f2ec4f7314bd1c3555368ff02bb9d382489dc8bbd7efbbf306f9a5084f3bec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a57c155451c5b1c1c59a27770754ccd9ba1be9344db6ac45b8744eba5fa4fa2f\",\"dweb:/ipfs/QmarkRwGaS3egg1FaQH6LibqjT6NocVUbD1jMPWtFxFaQV\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@balancer-labs/v3-vault/contracts/token/ERC20MultiToken.sol\":{\"keccak256\":\"0x49578c053271957fa9661c6a3e3ce6310a3f0690be6deca9eeb28f4e129bcfd3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e3bbd6d7baa790f6e259dfcab0ae2b0db96c08b21739dca829217af6fdbea15d\",\"dweb:/ipfs/QmVgirrgRbkHVdfthMKTJi98QeHmx9DHTT1WBNQRYogpBn\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}"}},"@openzeppelin/contracts/access/Ownable.sol":{"Ownable":{"abi":[{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. The initial owner is set to the address provided by the deployer. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the contract setting the address provided by the deployer as the initial owner.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/Ownable.sol\":\"Ownable\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x75a4ee64c68dbd5f38bddd06e664a64c8271b4caa554fb6f0607dfd672bb4bf3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0c4e6cb30d3601e2f7af5af09e265508147cb275a8dcd99d6f7363645cc56867\",\"dweb:/ipfs/QmNgFkoXNWoUbAyw71rr1sKQ95Rj2GfvYiWg79xEYDn2NY\"]}},\"version\":1}"}},"@openzeppelin/contracts/access/Ownable2Step.sol":{"Ownable2Step":{"abi":[{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"acceptOwnership()":"79ba5097","owner()":"8da5cb5b","pendingOwner()":"e30c3978","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. The initial owner is specified at deployment time in the constructor for `Ownable`. This can later be changed with {transferOwnership} and {acceptOwnership}. This module is used through inheritance. It will make available all functions from parent (Ownable).\",\"errors\":{\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}]},\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/access/Ownable2Step.sol\":\"Ownable2Step\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0x5d3e5de9eadfa1f8a892eb2e95bbebd3e4b8c8ada5b76f104d383fea518fa688\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cde108962511e6a4d3cfb7b6fb6a36bdcfa300761c17dad2d7dd87d4f8117b48\",\"dweb:/ipfs/Qmf7YxUVK68JedWybWfXvzLCegsD95DtGc3mbpEWkWSMm8\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x75a4ee64c68dbd5f38bddd06e664a64c8271b4caa554fb6f0607dfd672bb4bf3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0c4e6cb30d3601e2f7af5af09e265508147cb275a8dcd99d6f7363645cc56867\",\"dweb:/ipfs/QmNgFkoXNWoUbAyw71rr1sKQ95Rj2GfvYiWg79xEYDn2NY\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/IERC4626.sol":{"IERC4626":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"assets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"asset","outputs":[{"internalType":"address","name":"assetTokenAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"convertToAssets","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"convertToShares","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxDeposit","outputs":[{"internalType":"uint256","name":"maxAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"maxMint","outputs":[{"internalType":"uint256","name":"maxShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxRedeem","outputs":[{"internalType":"uint256","name":"maxShares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"maxWithdraw","outputs":[{"internalType":"uint256","name":"maxAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewDeposit","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewMint","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"name":"previewRedeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"name":"previewWithdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"shares","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"redeem","outputs":[{"internalType":"uint256","name":"assets","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAssets","outputs":[{"internalType":"uint256","name":"totalManagedAssets","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"assets","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"shares","type":"uint256"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","asset()":"38d52e0f","balanceOf(address)":"70a08231","convertToAssets(uint256)":"07a2d13a","convertToShares(uint256)":"c6e6f592","decimals()":"313ce567","deposit(uint256,address)":"6e553f65","maxDeposit(address)":"402d267d","maxMint(address)":"c63d75b6","maxRedeem(address)":"d905777e","maxWithdraw(address)":"ce96cb77","mint(uint256,address)":"94bf804d","name()":"06fdde03","previewDeposit(uint256)":"ef8b30f7","previewMint(uint256)":"b3d7f6b9","previewRedeem(uint256)":"4cdad506","previewWithdraw(uint256)":"0a28a477","redeem(uint256,address,address)":"ba087652","symbol()":"95d89b41","totalAssets()":"01e1d114","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","withdraw(uint256,address,address)":"b460af94"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"Withdraw\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"asset\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"assetTokenAddress\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"convertToAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"convertToShares\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"maxMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxShares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"maxWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewDeposit\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewMint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"name\":\"previewRedeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"name\":\"previewWithdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"redeem\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalAssets\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"totalManagedAssets\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"shares\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC4626 \\\"Tokenized Vault Standard\\\", as defined in https://eips.ethereum.org/EIPS/eip-4626[ERC-4626].\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"asset()\":{\"details\":\"Returns the address of the underlying token used for the Vault for accounting, depositing, and withdrawing. - MUST be an ERC-20 token contract. - MUST NOT revert.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"convertToAssets(uint256)\":{\"details\":\"Returns the amount of assets that the Vault would exchange for the amount of shares provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"convertToShares(uint256)\":{\"details\":\"Returns the amount of shares that the Vault would exchange for the amount of assets provided, in an ideal scenario where all the conditions are met. - MUST NOT be inclusive of any fees that are charged against assets in the Vault. - MUST NOT show any variations depending on the caller. - MUST NOT reflect slippage or other on-chain conditions, when performing the actual exchange. - MUST NOT revert. NOTE: This calculation MAY NOT reflect the \\u201cper-user\\u201d price-per-share, and instead should reflect the \\u201caverage-user\\u2019s\\u201d price-per-share, meaning what the average user should expect to see when exchanging to and from.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"deposit(uint256,address)\":{\"details\":\"Mints shares Vault shares to receiver by depositing exactly amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the deposit execution, and are accounted for during deposit. - MUST revert if all of assets cannot be deposited (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"maxDeposit(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be deposited into the Vault for the receiver, through a deposit call. - MUST return a limited value if receiver is subject to some deposit limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of assets that may be deposited. - MUST NOT revert.\"},\"maxMint(address)\":{\"details\":\"Returns the maximum amount of the Vault shares that can be minted for the receiver, through a mint call. - MUST return a limited value if receiver is subject to some mint limit. - MUST return 2 ** 256 - 1 if there is no limit on the maximum amount of shares that may be minted. - MUST NOT revert.\"},\"maxRedeem(address)\":{\"details\":\"Returns the maximum amount of Vault shares that can be redeemed from the owner balance in the Vault, through a redeem call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST return balanceOf(owner) if owner is not subject to any withdrawal limit or timelock. - MUST NOT revert.\"},\"maxWithdraw(address)\":{\"details\":\"Returns the maximum amount of the underlying asset that can be withdrawn from the owner balance in the Vault, through a withdraw call. - MUST return a limited value if owner is subject to some withdrawal limit or timelock. - MUST NOT revert.\"},\"mint(uint256,address)\":{\"details\":\"Mints exactly shares Vault shares to receiver by depositing amount of underlying tokens. - MUST emit the Deposit event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the mint execution, and are accounted for during mint. - MUST revert if all of shares cannot be minted (due to deposit limit being reached, slippage, the user not approving enough underlying tokens to the Vault contract, etc). NOTE: most implementations will require pre-approval of the Vault with the Vault\\u2019s underlying asset token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"previewDeposit(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their deposit at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of Vault shares that would be minted in a deposit call in the same transaction. I.e. deposit should return the same or more shares as previewDeposit if called in the same transaction. - MUST NOT account for deposit limits like those returned from maxDeposit and should always act as though the deposit would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewDeposit SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"previewMint(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their mint at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of assets that would be deposited in a mint call in the same transaction. I.e. mint should return the same or fewer assets as previewMint if called in the same transaction. - MUST NOT account for mint limits like those returned from maxMint and should always act as though the mint would be accepted, regardless if the user has enough tokens approved, etc. - MUST be inclusive of deposit fees. Integrators should be aware of the existence of deposit fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewMint SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by minting.\"},\"previewRedeem(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their redeemption at the current block, given current on-chain conditions. - MUST return as close to and no more than the exact amount of assets that would be withdrawn in a redeem call in the same transaction. I.e. redeem should return the same or more assets as previewRedeem if called in the same transaction. - MUST NOT account for redemption limits like those returned from maxRedeem and should always act as though the redemption would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToAssets and previewRedeem SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by redeeming.\"},\"previewWithdraw(uint256)\":{\"details\":\"Allows an on-chain or off-chain user to simulate the effects of their withdrawal at the current block, given current on-chain conditions. - MUST return as close to and no fewer than the exact amount of Vault shares that would be burned in a withdraw call in the same transaction. I.e. withdraw should return the same or fewer shares as previewWithdraw if called in the same transaction. - MUST NOT account for withdrawal limits like those returned from maxWithdraw and should always act as though the withdrawal would be accepted, regardless if the user has enough shares, etc. - MUST be inclusive of withdrawal fees. Integrators should be aware of the existence of withdrawal fees. - MUST NOT revert. NOTE: any unfavorable discrepancy between convertToShares and previewWithdraw SHOULD be considered slippage in share price or some other type of condition, meaning the depositor will lose assets by depositing.\"},\"redeem(uint256,address,address)\":{\"details\":\"Burns exactly shares from owner and sends assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the redeem execution, and are accounted for during redeem. - MUST revert if all of shares cannot be redeemed (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). NOTE: some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalAssets()\":{\"details\":\"Returns the total amount of the underlying asset that is \\u201cmanaged\\u201d by Vault. - SHOULD include any compounding that occurs from yield. - MUST be inclusive of any fees that are charged against assets in the Vault. - MUST NOT revert.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"withdraw(uint256,address,address)\":{\"details\":\"Burns shares from owner and sends exactly assets of underlying tokens to receiver. - MUST emit the Withdraw event. - MAY support an additional flow in which the underlying tokens are owned by the Vault contract before the withdraw execution, and are accounted for during withdraw. - MUST revert if all of assets cannot be withdrawn (due to withdrawal limit being reached, slippage, the owner not having enough shares, etc). Note that some implementations will require pre-requesting to the Vault before a withdrawal may be performed. Those methods should be performed separately.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC4626.sol\":\"IERC4626\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/IERC5267.sol":{"IERC5267":{"abi":[{"anonymous":false,"inputs":[],"name":"EIP712DomainChanged","type":"event"},{"inputs":[],"name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"eip712Domain()":"84b0196e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"events\":{\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"}},\"kind\":\"dev\",\"methods\":{\"eip712Domain()\":{\"details\":\"returns the fields and values that describe the domain separator used by this contract for EIP-712 signature.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/IERC5267.sol\":\"IERC5267\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]}},\"version\":1}"}},"@openzeppelin/contracts/interfaces/draft-IERC6093.sol":{"IERC1155Errors":{"abi":[{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC1155InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC1155InvalidApprover","type":"error"},{"inputs":[{"internalType":"uint256","name":"idsLength","type":"uint256"},{"internalType":"uint256","name":"valuesLength","type":"uint256"}],"name":"ERC1155InvalidArrayLength","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"ERC1155InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC1155InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC1155InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC1155MissingApprovalForAll","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC1155InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"idsLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"valuesLength\",\"type\":\"uint256\"}],\"name\":\"ERC1155InvalidArrayLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC1155InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC1155MissingApprovalForAll\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC1155 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC1155 tokens.\",\"errors\":{\"ERC1155InsufficientBalance(address,uint256,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC1155InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC1155InvalidArrayLength(uint256,uint256)\":[{\"details\":\"Indicates an array length mismatch between ids and values in a safeBatchTransferFrom operation. Used in batch transfers.\",\"params\":{\"idsLength\":\"Length of the array of token identifiers\",\"valuesLength\":\"Length of the array of token amounts\"}}],\"ERC1155InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC1155InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC1155InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC1155MissingApprovalForAll(address,address)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"owner\":\"Address of the current owner of a token.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC1155Errors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]}},\"version\":1}"},"IERC20Errors":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC20 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC20 tokens.\",\"errors\":{\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC20Errors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]}},\"version\":1}"},"IERC721Errors":{"abi":[{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721IncorrectOwner","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721InsufficientApproval","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC721InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"ERC721InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721InvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC721InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC721InvalidSender","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721NonexistentToken","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721IncorrectOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721InsufficientApproval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOperator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC721InvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC721InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC721InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenId\",\"type\":\"uint256\"}],\"name\":\"ERC721NonexistentToken\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard ERC721 Errors Interface of the https://eips.ethereum.org/EIPS/eip-6093[ERC-6093] custom errors for ERC721 tokens.\",\"errors\":{\"ERC721IncorrectOwner(address,uint256,address)\":[{\"details\":\"Indicates an error related to the ownership over a particular token. Used in transfers.\",\"params\":{\"owner\":\"Address of the current owner of a token.\",\"sender\":\"Address whose tokens are being transferred.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InsufficientApproval(address,uint256)\":[{\"details\":\"Indicates a failure with the `operator`\\u2019s approval. Used in transfers.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\",\"tokenId\":\"Identifier number of a token.\"}}],\"ERC721InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC721InvalidOperator(address)\":[{\"details\":\"Indicates a failure with the `operator` to be approved. Used in approvals.\",\"params\":{\"operator\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC721InvalidOwner(address)\":[{\"details\":\"Indicates that an address can't be an owner. For example, `address(0)` is a forbidden owner in EIP-20. Used in balance queries.\",\"params\":{\"owner\":\"Address of the current owner of a token.\"}}],\"ERC721InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC721InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC721NonexistentToken(uint256)\":[{\"details\":\"Indicates a `tokenId` whose `owner` is the zero address.\",\"params\":{\"tokenId\":\"Identifier number of a token.\"}}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":\"IERC721Errors\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]}},\"version\":1}"}},"@openzeppelin/contracts/proxy/Proxy.sol":{"Proxy":{"abi":[{"stateMutability":"payable","type":"fallback"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"stateMutability\":\"payable\",\"type\":\"fallback\"}],\"devdoc\":{\"details\":\"This abstract contract provides a fallback function that delegates all calls to another contract using the EVM instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to be specified by overriding the virtual {_implementation} function. Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a different contract through the {_delegate} function. The success and return data of the delegated call will be returned back to the caller of the proxy.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/proxy/Proxy.sol\":\"Proxy\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/proxy/Proxy.sol\":{\"keccak256\":\"0xc3f2ec76a3de8ed7a7007c46166f5550c72c7709e3fc7e8bb3111a7191cdedbd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e73efb4c2ca655882dc237c6b4f234a9bd36d97159d8fcaa837eb01171f726ac\",\"dweb:/ipfs/QmTNnnv7Gu5fs5G1ZMh7Fexp8N4XUs3XrNAngjcxgiss3e\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/IERC20.sol":{"IERC20":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 standard as defined in the EIP.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":\"IERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"IERC20Metadata":{"abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","name()":"06fdde03","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface for the optional metadata functions from the ERC20 standard.\",\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":\"IERC20Metadata\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol":{"IERC20Permit":{"abi":[{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't need to send a transaction, and thus is not required to hold Ether at all. ==== Security Considerations There are two important considerations concerning the use of `permit`. The first is that a valid permit signature expresses an allowance, and it should not be assumed to convey additional meaning. In particular, it should not be considered as an intention to spend the allowance in any specific way. The second is that because permits have built-in replay protection and can be submitted by anyone, they can be frontrun. A protocol that uses permits should take this into consideration and allow a `permit` call to fail. Combining these two aspects, a pattern that may be generally recommended is: ```solidity function doThingWithPermit(..., uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public { try token.permit(msg.sender, address(this), value, deadline, v, r, s) {} catch {} doThing(..., value); } function doThing(..., uint256 value) public { token.safeTransferFrom(msg.sender, address(this), value); ... } ``` Observe that: 1) `msg.sender` is used as the owner, leaving no ambiguity as to the signer intent, and 2) the use of `try/catch` allows the permit to fail and makes the code tolerant to frontrunning. (See also {SafeERC20-safeTransferFrom}). Additionally, note that smart contract wallets (such as Argent or Safe) are not able to produce permit signatures, so contracts should have entry points that don't rely on permit.\",\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"nonces(address)\":{\"details\":\"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":\"IERC20Permit\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]}},\"version\":1}"}},"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol":{"SafeERC20":{"abi":[{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"currentAllowance","type":"uint256"},{"internalType":"uint256","name":"requestedDecrease","type":"uint256"}],"name":"SafeERC20FailedDecreaseAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212202d84903a7d88d39beea6e8c10e7299cd816b0bde2b5e6443ed9adc8d7885d05564736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2D DUP5 SWAP1 GASPRICE PUSH30 0x88D39BEEA6E8C10E7299CD816B0BDE2B5E6443ED9ADC8D7885D05564736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"751:5018:105:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212202d84903a7d88d39beea6e8c10e7299cd816b0bde2b5e6443ed9adc8d7885d05564736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x2D DUP5 SWAP1 GASPRICE PUSH30 0x88D39BEEA6E8C10E7299CD816B0BDE2B5E6443ED9ADC8D7885D05564736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"751:5018:105:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentAllowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requestedDecrease\",\"type\":\"uint256\"}],\"name\":\"SafeERC20FailedDecreaseAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers around ERC20 operations that throw on failure (when the token contract returns false). Tokens that return no value (and instead revert or throw on failure) are also supported, non-reverting calls are assumed to be successful. To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\",\"errors\":{\"SafeERC20FailedDecreaseAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failed `decreaseAllowance` request.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}]},\"kind\":\"dev\",\"methods\":{},\"title\":\"SafeERC20\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":\"SafeERC20\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Address.sol":{"Address":{"abi":[{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea26469706673582212207308dc04867882e716a35b4e93fd57711740b1913fb9480b2ee92ca52acf78a664736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH20 0x8DC04867882E716A35B4E93FD57711740B1913F 0xB9 BASEFEE SIGNEXTEND 0x2E 0xE9 0x2C 0xA5 0x2A 0xCF PUSH25 0xA664736F6C634300081B003300000000000000000000000000 ","sourceMap":"195:6066:106:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea26469706673582212207308dc04867882e716a35b4e93fd57711740b1913fb9480b2ee92ca52acf78a664736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH20 0x8DC04867882E716A35B4E93FD57711740B1913F 0xB9 BASEFEE SIGNEXTEND 0x2E 0xE9 0x2C 0xA5 0x2A 0xCF PUSH25 0xA664736F6C634300081B003300000000000000000000000000 ","sourceMap":"195:6066:106:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Address.sol\":\"Address\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Context.sol":{"Context":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Provides information about the current execution context, including the sender of the transaction and its data. While these are generally available via msg.sender and msg.data, they should not be accessed in such a direct manner, since when dealing with meta-transactions the account sending and paying for execution may not be the actual sender (as far as an application is concerned). This contract is only required for intermediate, library-like contracts.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Context.sol\":\"Context\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x75a4ee64c68dbd5f38bddd06e664a64c8271b4caa554fb6f0607dfd672bb4bf3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0c4e6cb30d3601e2f7af5af09e265508147cb275a8dcd99d6f7363645cc56867\",\"dweb:/ipfs/QmNgFkoXNWoUbAyw71rr1sKQ95Rj2GfvYiWg79xEYDn2NY\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Create2.sol":{"Create2":{"abi":[{"inputs":[],"name":"Create2EmptyBytecode","type":"error"},{"inputs":[],"name":"Create2FailedDeployment","type":"error"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"Create2InsufficientBalance","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220c24a90b6089a3a4de283c25e42051e645abdabcef7dcfc9b5ed6d65c711c821b64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC2 BLOBBASEFEE SWAP1 0xB6 ADDMOD SWAP11 GASPRICE 0x4D 0xE2 DUP4 0xC2 MCOPY TIMESTAMP SDIV 0x1E PUSH5 0x5ABDABCEF7 0xDC 0xFC SWAP12 MCOPY 0xD6 0xD6 TLOAD PUSH18 0x1C821B64736F6C634300081B003300000000 ","sourceMap":"495:3877:108:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220c24a90b6089a3a4de283c25e42051e645abdabcef7dcfc9b5ed6d65c711c821b64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC2 BLOBBASEFEE SWAP1 0xB6 ADDMOD SWAP11 GASPRICE 0x4D 0xE2 DUP4 0xC2 MCOPY TIMESTAMP SDIV 0x1E PUSH5 0x5ABDABCEF7 0xDC 0xFC SWAP12 MCOPY 0xD6 0xD6 TLOAD PUSH18 0x1C821B64736F6C634300081B003300000000 ","sourceMap":"495:3877:108:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"Create2EmptyBytecode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Create2FailedDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"Create2InsufficientBalance\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Helper to make usage of the `CREATE2` EVM opcode easier and safer. `CREATE2` can be used to compute in advance the address where a smart contract will be deployed, which allows for interesting new mechanisms known as 'counterfactual interactions'. See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more information.\",\"errors\":{\"Create2EmptyBytecode()\":[{\"details\":\"There's no code to deploy.\"}],\"Create2FailedDeployment()\":[{\"details\":\"The deployment failed.\"}],\"Create2InsufficientBalance(uint256,uint256)\":[{\"details\":\"Not enough balance for performing a CREATE2 deploy.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Create2.sol\":\"Create2\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Create2.sol\":{\"keccak256\":\"0x2b9807d194b92f1068d868e9587d27037264a9a067c778486f86ae21c61cbd5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://22d71f40aa38a20cf466d8647452a6e3f746353474f8c8af40f03aa8cae38420\",\"dweb:/ipfs/QmQ752Hz5av7YDK8pFojzb5qgeXQvfsdkdwkHVzaXoYAZR\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Nonces.sol":{"Nonces":{"abi":[{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"currentNonce","type":"uint256"}],"name":"InvalidAccountNonce","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"nonces(address)":"7ecebe00"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"name\":\"InvalidAccountNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Provides tracking nonces for addresses. Nonces will only increment.\",\"errors\":{\"InvalidAccountNonce(address,uint256)\":[{\"details\":\"The nonce used for an `account` is not the expected current nonce.\"}]},\"kind\":\"dev\",\"methods\":{\"nonces(address)\":{\"details\":\"Returns the next unused nonce for an address.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Nonces.sol\":\"Nonces\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/ShortStrings.sol":{"ShortStrings":{"abi":[{"inputs":[],"name":"InvalidShortString","type":"error"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"name":"StringTooLong","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220be3b6e5fa15be8ef103fe4e28b3f3aaa5d17d25a91eb06a444b08b6bc349867064736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBE EXTCODESIZE PUSH15 0x5FA15BE8EF103FE4E28B3F3AAA5D17 0xD2 GAS SWAP2 0xEB MOD LOG4 PREVRANDAO 0xB0 DUP12 PUSH12 0xC349867064736F6C63430008 SHL STOP CALLER ","sourceMap":"1255:3053:110:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220be3b6e5fa15be8ef103fe4e28b3f3aaa5d17d25a91eb06a444b08b6bc349867064736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xBE EXTCODESIZE PUSH15 0x5FA15BE8EF103FE4E28B3F3AAA5D17 0xD2 GAS SWAP2 0xEB MOD LOG4 PREVRANDAO 0xB0 DUP12 PUSH12 0xC349867064736F6C63430008 SHL STOP CALLER ","sourceMap":"1255:3053:110:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidShortString\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"StringTooLong\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"This library provides functions to convert short memory strings into a `ShortString` type that can be used as an immutable variable. Strings of arbitrary length can be optimized using this library if they are short enough (up to 31 bytes) by packing them with their length (1 byte) in a single EVM word (32 bytes). Additionally, a fallback mechanism can be used for every other case. Usage example: ```solidity contract Named { using ShortStrings for *; ShortString private immutable _name; string private _nameFallback; constructor(string memory contractName) { _name = contractName.toShortStringWithFallback(_nameFallback); } function name() external view returns (string memory) { return _name.toStringWithFallback(_nameFallback); } } ```\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/ShortStrings.sol\":\"ShortStrings\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/StorageSlot.sol":{"StorageSlot":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea264697066735822122043daae00d080c45a69e30ddedba8a0f52e605bfd7f2d007a60f85a3efd2b6c2264736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NUMBER 0xDA 0xAE STOP 0xD0 DUP1 0xC4 GAS PUSH10 0xE30DDEDBA8A0F52E605B REVERT PUSH32 0x2D007A60F85A3EFD2B6C2264736F6C634300081B003300000000000000000000 ","sourceMap":"1245:2685:111:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea264697066735822122043daae00d080c45a69e30ddedba8a0f52e605bfd7f2d007a60f85a3efd2b6c2264736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 NUMBER 0xDA 0xAE STOP 0xD0 DUP1 0xC4 GAS PUSH10 0xE30DDEDBA8A0F52E605B REVERT PUSH32 0x2D007A60F85A3EFD2B6C2264736F6C634300081B003300000000000000000000 ","sourceMap":"1245:2685:111:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a `value` member that can be used to read or write. Example usage to set ERC1967 implementation slot: ```solidity contract ERC1967 { bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; function _getImplementation() internal view returns (address) { return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; } function _setImplementation(address newImplementation) internal { require(newImplementation.code.length > 0); StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation; } } ```\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/StorageSlot.sol\":\"StorageSlot\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/Strings.sol":{"Strings":{"abi":[{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"name":"StringsInsufficientHexLength","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea264697066735822122010da105642d0013469fb390ea15ed3855e45be0d27e6e495d42095065906e2a364736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LT 0xDA LT JUMP TIMESTAMP 0xD0 ADD CALLVALUE PUSH10 0xFB390EA15ED3855E45BE 0xD 0x27 0xE6 0xE4 SWAP6 0xD4 KECCAK256 SWAP6 MOD MSIZE MOD 0xE2 LOG3 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"251:2847:112:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea264697066735822122010da105642d0013469fb390ea15ed3855e45be0d27e6e495d42095065906e2a364736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 LT 0xDA LT JUMP TIMESTAMP 0xD0 ADD CALLVALUE PUSH10 0xFB390EA15ED3855E45BE 0xD 0x27 0xE6 0xE4 SWAP6 0xD4 KECCAK256 SWAP6 MOD MSIZE MOD 0xE2 LOG3 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"251:2847:112:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"StringsInsufficientHexLength\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"String operations.\",\"errors\":{\"StringsInsufficientHexLength(uint256,uint256)\":[{\"details\":\"The `value` string doesn't fit in the specified `length`.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Strings.sol\":\"Strings\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/cryptography/ECDSA.sol":{"ECDSA":{"abi":[{"inputs":[],"name":"ECDSAInvalidSignature","type":"error"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"name":"ECDSAInvalidSignatureLength","type":"error"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"ECDSAInvalidSignatureS","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220d460a4c27e3d67d723908202470cc8b084eb5029a62a0120d4b11978460f0a2864736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD4 PUSH1 0xA4 0xC2 PUSH31 0x3D67D723908202470CC8B084EB5029A62A0120D4B11978460F0A2864736F6C PUSH4 0x4300081B STOP CALLER ","sourceMap":"344:7386:113:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220d460a4c27e3d67d723908202470cc8b084eb5029a62a0120d4b11978460f0a2864736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD4 PUSH1 0xA4 0xC2 PUSH31 0x3D67D723908202470CC8B084EB5029A62A0120D4B11978460F0A2864736F6C PUSH4 0x4300081B STOP CALLER ","sourceMap":"344:7386:113:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Elliptic Curve Digital Signature Algorithm (ECDSA) operations. These functions can be used to verify that a message was signed by the holder of the private keys of a given address.\",\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":\"ECDSA\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/cryptography/EIP712.sol":{"EIP712":{"abi":[{"inputs":[],"name":"InvalidShortString","type":"error"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"name":"StringTooLong","type":"error"},{"anonymous":false,"inputs":[],"name":"EIP712DomainChanged","type":"event"},{"inputs":[],"name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"eip712Domain()":"84b0196e"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidShortString\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"StringTooLong\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"custom:oz-upgrades-unsafe-allow\":\"state-variable-immutable\",\"details\":\"https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data. The encoding scheme specified in the EIP requires a domain separator and a hash of the typed structured data, whose encoding is very generic and therefore its implementation in Solidity is not feasible, thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding they need in order to produce the hash of their typed data using a combination of `abi.encode` and `keccak256`. This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA ({_hashTypedDataV4}). The implementation of the domain separator was designed to be as efficient as possible while still properly updating the chain id to protect against replay attacks on an eventual fork of the chain. NOTE: This contract implements the version of the encoding known as \\\"v4\\\", as implemented by the JSON RPC method https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask]. NOTE: In the upgradeable version of this contract, the cached values will correspond to the address, and the domain separator of the implementation contract. This will cause the {_domainSeparatorV4} function to always rebuild the separator from the immutable values, which is cheaper than accessing a cached version in cold storage.\",\"events\":{\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"}},\"kind\":\"dev\",\"methods\":{\"constructor\":{\"details\":\"Initializes the domain separator and parameter caches. The meaning of `name` and `version` is specified in https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]: - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol. - `version`: the current major version of the signing domain. NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart contract upgrade].\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":\"EIP712\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol":{"MessageHashUtils":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220dd163cceea879625aedcb5aeb6afa6939f48cfb91c25517f7fa03437910d464d64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDD AND EXTCODECOPY 0xCE 0xEA DUP8 SWAP7 0x25 0xAE 0xDC 0xB5 0xAE 0xB6 0xAF 0xA6 SWAP4 SWAP16 BASEFEE 0xCF 0xB9 SHR 0x25 MLOAD PUSH32 0x7FA03437910D464D64736F6C634300081B003300000000000000000000000000 ","sourceMap":"521:3235:115:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220dd163cceea879625aedcb5aeb6afa6939f48cfb91c25517f7fa03437910d464d64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xDD AND EXTCODECOPY 0xCE 0xEA DUP8 SWAP7 0x25 0xAE 0xDC 0xB5 0xAE 0xB6 0xAF 0xA6 SWAP4 SWAP16 BASEFEE 0xCF 0xB9 SHR 0x25 MLOAD PUSH32 0x7FA03437910D464D64736F6C634300081B003300000000000000000000000000 ","sourceMap":"521:3235:115:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Signature message hash utilities for producing digests to be consumed by {ECDSA} recovery or signing. The library provides methods for generating a hash of a message that conforms to the https://eips.ethereum.org/EIPS/eip-191[EIP 191] and https://eips.ethereum.org/EIPS/eip-712[EIP 712] specifications.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":\"MessageHashUtils\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/introspection/ERC165.sol":{"ERC165":{"abi":[{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Implementation of the {IERC165} interface. Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check for the additional interface id that will be supported. For example: ```solidity function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); } ```\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":\"ERC165\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"IERC165":{"abi":[{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Interface of the ERC165 standard, as defined in the https://eips.ethereum.org/EIPS/eip-165[EIP]. Implementers can declare support of contract interfaces, which can then be queried by others ({ERC165Checker}). For an implementation, see {ERC165}.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Returns true if this contract implements the interface defined by `interfaceId`. See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] to learn more about how these ids are created. This function call must use less than 30 000 gas.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/math/Math.sol":{"Math":{"abi":[{"inputs":[],"name":"MathOverflowedMulDiv","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220d62235ed50efed055a39d882d68710d0de463d0daf19fc5f4144e92980f5743264736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD6 0x22 CALLDATALOAD 0xED POP 0xEF 0xED SDIV GAS CODECOPY 0xD8 DUP3 0xD6 DUP8 LT 0xD0 0xDE CHAINID RETURNDATASIZE 0xD 0xAF NOT 0xFC PUSH0 COINBASE PREVRANDAO 0xE9 0x29 DUP1 CREATE2 PUSH21 0x3264736F6C634300081B0033000000000000000000 ","sourceMap":"203:14914:118:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220d62235ed50efed055a39d882d68710d0de463d0daf19fc5f4144e92980f5743264736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xD6 0x22 CALLDATALOAD 0xED POP 0xEF 0xED SDIV GAS CODECOPY 0xD8 DUP3 0xD6 DUP8 LT 0xD0 0xDE CHAINID RETURNDATASIZE 0xD 0xAF NOT 0xFC PUSH0 COINBASE PREVRANDAO 0xE9 0x29 DUP1 CREATE2 PUSH21 0x3264736F6C634300081B0033000000000000000000 ","sourceMap":"203:14914:118:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"MathOverflowedMulDiv\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Standard math utilities missing in the Solidity language.\",\"errors\":{\"MathOverflowedMulDiv()\":[{\"details\":\"Muldiv operation overflow.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/Math.sol\":\"Math\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/math/SafeCast.sol":{"SafeCast":{"abi":[{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntDowncast","type":"error"},{"inputs":[{"internalType":"int256","name":"value","type":"int256"}],"name":"SafeCastOverflowedIntToUint","type":"error"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintToInt","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220c8c1339c0f0f32d1cd42e01b472992f3fdb072f8c07de7950d5d5c048b0f797464736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC8 0xC1 CALLER SWAP13 0xF 0xF ORIGIN 0xD1 0xCD TIMESTAMP 0xE0 SHL SELFBALANCE 0x29 SWAP3 RETURN REVERT 0xB0 PUSH19 0xF8C07DE7950D5D5C048B0F797464736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"764:33927:119:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220c8c1339c0f0f32d1cd42e01b472992f3fdb072f8c07de7950d5d5c048b0f797464736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC8 0xC1 CALLER SWAP13 0xF 0xF ORIGIN 0xD1 0xCD TIMESTAMP 0xE0 SHL SELFBALANCE 0x29 SWAP3 RETURN REVERT 0xB0 PUSH19 0xF8C07DE7950D5D5C048B0F797464736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"764:33927:119:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"value\",\"type\":\"int256\"}],\"name\":\"SafeCastOverflowedIntToUint\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintToInt\",\"type\":\"error\"}],\"devdoc\":{\"details\":\"Wrappers over Solidity's uintXX/intXX casting operators with added overflow checks. Downcasting from uint256/int256 in Solidity does not revert on overflow. This can easily result in undesired exploitation or bugs, since developers usually assume that overflows raise errors. `SafeCast` restores this intuition by reverting the transaction when such an operation overflows. Using this library instead of the unchecked operations eliminates an entire class of bugs, so it's recommended to use it always.\",\"errors\":{\"SafeCastOverflowedIntDowncast(uint8,int256)\":[{\"details\":\"Value doesn't fit in an int of `bits` size.\"}],\"SafeCastOverflowedIntToUint(int256)\":[{\"details\":\"An int value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintDowncast(uint8,uint256)\":[{\"details\":\"Value doesn't fit in an uint of `bits` size.\"}],\"SafeCastOverflowedUintToInt(uint256)\":[{\"details\":\"An uint value doesn't fit in an int of `bits` size.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":\"SafeCast\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0xe19a4d5f31d2861e7344e8e535e2feafb913d806d3e2b5fe7782741a2a7094fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4aed79c0fa6f0546ed02f2f683e8f77f0fd2ed7eb34d8bbf3d373c9a6d95b13c\",\"dweb:/ipfs/QmWqVz6UAVqmnWU5pqYPt1o6iDEZyPaBraAA3rKfTTSfYj\"]}},\"version\":1}"}},"@openzeppelin/contracts/utils/math/SignedMath.sol":{"SignedMath":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea264697066735822122061d4eb74fcf726dbc6a2898f6ff2aff420ead6d2e7fcc3c39f29533555dff7d164736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH2 0xD4EB PUSH21 0xFCF726DBC6A2898F6FF2AFF420EAD6D2E7FCC3C39F 0x29 MSTORE8 CALLDATALOAD SSTORE 0xDF 0xF7 0xD1 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"216:1047:120:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea264697066735822122061d4eb74fcf726dbc6a2898f6ff2aff420ead6d2e7fcc3c39f29533555dff7d164736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH2 0xD4EB PUSH21 0xFCF726DBC6A2898F6FF2AFF420EAD6D2E7FCC3C39F 0x29 MSTORE8 CALLDATALOAD SSTORE 0xDF 0xF7 0xD1 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"216:1047:120:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Standard signed math utilities missing in the Solidity language.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/math/SignedMath.sol\":\"SignedMath\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]}},\"version\":1}"}},"contracts/WeightedPool.sol":{"WeightedPool":{"abi":[{"inputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"numTokens","type":"uint256"},{"internalType":"uint256[]","name":"normalizedWeights","type":"uint256[]"},{"internalType":"string","name":"version","type":"string"}],"internalType":"struct WeightedPool.NewPoolParams","name":"params","type":"tuple"},{"internalType":"contract IVault","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BaseOutOfBounds","type":"error"},{"inputs":[],"name":"ECDSAInvalidSignature","type":"error"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"name":"ECDSAInvalidSignatureLength","type":"error"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"ECDSAInvalidSignatureS","type":"error"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"ERC2612ExpiredSignature","type":"error"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC2612InvalidSigner","type":"error"},{"inputs":[],"name":"ExponentOutOfBounds","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"currentNonce","type":"uint256"}],"name":"InvalidAccountNonce","type":"error"},{"inputs":[],"name":"InvalidExponent","type":"error"},{"inputs":[],"name":"InvalidShortString","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"MaxInRatio","type":"error"},{"inputs":[],"name":"MaxOutRatio","type":"error"},{"inputs":[],"name":"MinWeight","type":"error"},{"inputs":[],"name":"NormalizedWeightInvariant","type":"error"},{"inputs":[],"name":"ProductOutOfBounds","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"name":"StringTooLong","type":"error"},{"inputs":[],"name":"WeightedPoolBptRateUnsupported","type":"error"},{"inputs":[],"name":"ZeroDivision","type":"error"},{"inputs":[],"name":"ZeroInvariant","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"EIP712DomainChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256","name":"tokenInIndex","type":"uint256"},{"internalType":"uint256","name":"invariantRatio","type":"uint256"}],"name":"computeBalance","outputs":[{"internalType":"uint256","name":"newBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"enum Rounding","name":"rounding","type":"uint8"}],"name":"computeInvariant","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitApproval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAggregateFeePercentages","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumInvariantRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMaximumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumInvariantRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getNormalizedWeights","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWeightedPoolDynamicData","outputs":[{"components":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct WeightedPoolDynamicData","name":"data","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWeightedPoolImmutableData","outputs":[{"components":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"normalizedWeights","type":"uint256[]"}],"internalType":"struct WeightedPoolImmutableData","name":"data","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incrementNonce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"request","type":"tuple"}],"name":"onSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_string_fromMemory":{"entryPoint":2328,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":2293,"id":null,"parameterSlots":2,"returnSlots":0},"fun_toShortStringWithFallback":{"entryPoint":2800,"id":41065,"parameterSlots":1,"returnSlots":1},"fun_toShortStringWithFallback_9503":{"entryPoint":2413,"id":41065,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6102c080604052346108e157614643803803809161001d82856108f5565b833981016040828203126108e15781516001600160401b0381116108e15782019160a0838303126108e1576040519160a083016001600160401b038111848210176107105760405283516001600160401b0381116108e15781610081918601610918565b835260208401516001600160401b0381116108e157816100a2918601610918565b602084019081526040808601519085015260608501519094906001600160401b0381116108e157810182601f820112156108e1578051906001600160401b038211610710578160051b604051926100fc60208301856108f5565b8352602080840191830101918583116108e157602001905b8282106108e55750505060608501526080810151916001600160401b0383116108e1576020926101449201610918565b608084018190529101516001600160a01b03811681036108e15782519351604080519195919081016001600160401b03811182821017610710576040526001815260208101603160f81b81526101998361096d565b610120526101a682610af0565b6101405282516020840120918260e05251902080610100524660a0526040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815260c0810181811060018060401b03821117610710576040525190206080523060c0526101608290528051906001600160401b0382116107105760035490600182811c921680156108d7575b60208310146106f25781601f84931161087f575b50602090601f831160011461080a575f926107ff575b50508160011b915f199060031b1c1916176003555b83516001600160401b03811161071057600454600181811c911680156107f5575b60208210146106f257601f8111610796575b506020601f821160011461072f5781929394955f92610724575b50508160011b915f199060031b1c1916176004555b610180528051906001600160401b0382116107105760055490600182811c92168015610706575b60208310146106f25781601f8493116106a4575b50602090601f831160011461061c575f92610611575b50508160011b915f199060031b1c1916176005555b60408101516101a09080825260608301515103610602575f905f5b81519260ff821693841015610494576060850151805185101561048057602090611fe08460051b1601015190662386f26fc100008210610471578181018091116103d95793806103ed57506101c0525b60ff8091169081146103d957600101610375565b634e487b7160e01b5f52601160045260245ffd5b600181036103ff57506101e0526103c5565b600281036104115750610200526103c5565b600381036104235750610220526103c5565b600481036104355750610240526103c5565b600581036104475750610260526103c5565b600681036104595750610280526103c5565b600714610467575b506103c5565b6102a0525f610461565b63bd39358360e01b5f5260045ffd5b634e487b7160e01b5f52603260045260245ffd5b670de0b6b3a76400009150036105f3576040516139fc9182610c27833960805182612806015260a051826128d2015260c051826127d7015260e051826128550152610100518261287b0152610120518261112801526101405182611152015261016051828181610260015281816104880152818161065f01528181610d7e015281816110ed015281816114ae01528181611733015281816119d801528181612118015261276c01526101805182818161059d0152818161094a01528181610a1201528181610c7a0152611277015251816128fa01526101c0518181816125d2015261295101526101e0518181816125ff015261297e01526102005181818161262c01526129b701526102205181818161265901526129f00152610240518181816126860152612a2a0152610260518181816126b30152612a630152610280518181816126e00152612a9f01526102a05181818161270b0152612ad90152f35b631ce788a760e11b5f5260045ffd5b63aaad13f760e01b5f5260045ffd5b015190505f80610345565b60055f90815293507f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db091905b601f1984168510610689576001945083601f19811610610671575b505050811b0160055561035a565b01515f1960f88460031b161c191690555f8080610663565b81810151835560209485019460019093019290910190610648565b90915060055f5260205f20601f840160051c8101602085106106eb575b90849392915b601f830160051c820181106106dd57505061032f565b5f81558594506001016106c7565b50806106c1565b634e487b7160e01b5f52602260045260245ffd5b91607f169161031b565b634e487b7160e01b5f52604160045260245ffd5b015190505f806102df565b60045f5260205f20905f5b601f198416811061077e575060019394959683601f19811610610766575b505050811b016004556102f4565b01515f1960f88460031b161c191690555f8080610758565b9091602060018192858b01518155019301910161073a565b60045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f830160051c8101602084106107ee575b601f830160051c820181106107e35750506102c5565b5f81556001016107cd565b50806107cd565b90607f16906102b3565b015190505f8061027d565b60035f90815293505f5160206146235f395f51905f5291905b601f1984168510610864576001945083601f1981161061084c575b505050811b01600355610292565b01515f1960f88460031b161c191690555f808061083e565b81810151835560209485019460019093019290910190610823565b60035f529091505f5160206146235f395f51905f52601f840160051c8101602085106108d0575b90849392915b601f830160051c820181106108c2575050610267565b5f81558594506001016108ac565b50806108a6565b91607f1691610253565b5f80fd5b8151815260209182019101610114565b601f909101601f19168101906001600160401b0382119082101761071057604052565b81601f820112156108e1578051906001600160401b038211610710576040519261094c601f8401601f1916602001856108f5565b828452602083830101116108e157815f9260208093018386015e8301015290565b8051602090818110156109e35750601f8251116109a5578082519201519080831061099757501790565b825f19910360031b1b161790565b60448260405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b906001600160401b038211610710575f54926001938481811c91168015610ae6575b838210146106f257601f8111610ab3575b5081601f8411600114610a5157509282939183925f94610a46575b50501b915f199060031b1c1916175f5560ff90565b015192505f80610a31565b919083601f1981165f8052845f20945f905b88838310610a995750505010610a81575b505050811b015f5560ff90565b01515f1960f88460031b161c191690555f8080610a74565b858701518855909601959485019487935090810190610a63565b5f805284601f845f20920160051c820191601f860160051c015b828110610adb575050610a16565b5f8155018590610acd565b90607f1690610a05565b805160209081811015610b1a5750601f8251116109a5578082519201519080831061099757501790565b9192916001600160401b0381116107105760019182548381811c91168015610c1c575b828210146106f257601f8111610be9575b5080601f8311600114610b895750819293945f92610b7e575b50505f19600383901b1c191690821b17905560ff90565b015190505f80610b67565b90601f19831695845f52825f20925f905b888210610bd25750508385969710610bba575b505050811b01905560ff90565b01515f1960f88460031b161c191690555f8080610bad565b808785968294968601518155019501930190610b9a565b835f5283601f835f20920160051c820191601f850160051c015b828110610c11575050610b4e565b5f8155018490610c03565b90607f1690610b3d56fe6080604090808252600480361015610015575f80fd5b60e05f35811c92836301ffc9a714611d905750826306fdde0314611ce1578263095ea7b314611c6357826316a0b3e014611a2a57826318160ddd14611a0e57826323b872dd1461196657826323de665114611934578263273c1adf1461191257826330adf81f146118d8578263313ce567146118bd5782633644e515146118a157826353b79bd7146116e557826354fd4d50146115f55782635687f2b814611596578263627cdcb91461156d578263654cf15d1461154b578263679aefce1461151457826370a082311461144057826372c981861461131f5782637ecebe00146112db57826381fa807c1461121a57826384b0196e146111115782638d928af8146110c157826395d89b4114610fbb578263984de9e814610df9578263a9059cbb14610ce6578263aa6ca80814610c21578263abb1dc44146109b8578263b156aa0a146108f1578263b677fa56146108cf578263c0bc6f33146105f6578263ce20ece7146105d6578263d335b0cf14610543578263d505accf146102d857508163dd62ed3e146101e5575063f89f27ed146101ae575f80fd5b346101e1575f6003193601126101e1576101dd906101ca6128f8565b9051918291602083526020830190611fa7565b0390f35b5f80fd5b82346101e157806003193601126101e1576020610200611e1c565b606461020a611e3f565b9473ffffffffffffffffffffffffffffffffffffffff808097875198899687957f927da10500000000000000000000000000000000000000000000000000000000875230908701521660248501521660448301527f0000000000000000000000000000000000000000000000000000000000000000165afa9081156102cf575f9161029a575b6020925051908152f35b90506020823d6020116102c7575b816102b560209383611eca565b810103126101e1576020915190610290565b3d91506102a8565b513d5f823e3d90fd5b8390346101e1576003193601126101e1576102f1611e1c565b906102fa611e3f565b604435926084359060643560ff831683036101e157804211610519576103478273ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2080549060018201905590565b9061041361040a875195602087017f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9815273ffffffffffffffffffffffffffffffffffffffff97889586891697888d840152878c1660608401528d608084015260a083015260c082015260c081526103be81611e92565b5190206103c96127c0565b908a51917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015260c43591604260a4359220612ed8565b90929192612f67565b168181036104ec5750505f84959661048460209651988996879586947fe1f21c67000000000000000000000000000000000000000000000000000000008652850160409194939294606082019573ffffffffffffffffffffffffffffffffffffffff80921683521660208201520152565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19081156102cf57506104b857005b6020813d6020116104e4575b816104d160209383611eca565b810103126101e1576104e290612079565b005b3d91506104c4565b877f4b800e46000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b867f62791302000000000000000000000000000000000000000000000000000000005f525260245ffd5b5082346101e1575f6003193601126101e1578051917fb45090f9000000000000000000000000000000000000000000000000000000008352309083015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156102cf575f9161029a576020925051908152f35b83346101e1575f6003193601126101e157602090516509184e72a0008152f35b9150346101e1575f6003193601126101e157825161061381611e92565b606081526020918282019160608352858101925f8452606082015f815260808301915f835260a08401935f855260c08101955f875273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016908b517f535cfd8a00000000000000000000000000000000000000000000000000000000815230828201525f81602481865afa90811561087f575f916108ad575b5083528b517f7e361bde00000000000000000000000000000000000000000000000000000000815230828201525f81602481865afa90811561087f575f91610889575b5084528b517fb45090f900000000000000000000000000000000000000000000000000000000815230828201528a81602481865afa90811561087f575f91610852575b5089526107516120cf565b85528b519182917ff29486a100000000000000000000000000000000000000000000000000000000835230908301528160246101a09485935afa91821561084857928b9c926107e0926107f396955f9e9c9d9e9261081b575b50508a81015115158852610120610100918281015115158b52015115158a5283519d8d8f9e938f948552519301528c0190611fa7565b915190601f198b840301908b0152611fa7565b9551606088015251608087015251151560a086015251151560c0850152511515908301520390f35b61083a9250803d10610841575b6108328183611eca565b810190612482565b5f806107aa565b503d610828565b8c513d5f823e3d90fd5b90508a81813d8311610878575b6108698183611eca565b810103126101e157515f610746565b503d61085f565b8d513d5f823e3d90fd5b6108a591503d805f833e61089d8183611eca565b81019061228d565b90505f610703565b6108c991503d805f833e6108c18183611eca565b8101906125a4565b5f6106c0565b83346101e1575f6003193601126101e157602090516709b6e64a8ec600008152f35b8382346101e1575f6003193601126101e1578151907f535cfd8a00000000000000000000000000000000000000000000000000000000825230908201525f8160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156109ae57916101dd925f92610992575b5051918291602083526020830190611fa7565b6109a79192503d805f833e6108c18183611eca565b908361097f565b82513d5f823e3d90fd5b8382346101e1575f6003193601126101e15773ffffffffffffffffffffffffffffffffffffffff8251917f67e0e07600000000000000000000000000000000000000000000000000000000835230908301525f82602481847f0000000000000000000000000000000000000000000000000000000000000000165afa918215610c17575f935f925f925f95610aed575b5090610a6595949392918151968796608088526080880190611fda565b6020878203818901528080875193848152019601925f905b838210610aa957898803868b015289806101dd8b610a9b8c8c611fa7565b908382036060850152611fa7565b9184989950606086979860019395978397518051610ac681612023565b83528685820151168584015201511515898201520198019201899897969594929391610a7d565b955093509150503d805f853e610b038185611eca565b8301926080818503126101e15780519167ffffffffffffffff928381116101e15785610b30918401612185565b91602095868201518581116101e157820181601f820112156101e157805190610b5882611eed565b98610b6586519a8b611eca565b828a52808a01816060809502840101928584116101e1578201905b838210610bc5575050505050828201518581116101e15781610ba391840161222c565b9460608301519081116101e157610bba920161222c565b919492919386610a48565b84828703126101e157875190610bda82611e62565b825160028110156101e157825283830151908c821682036101e1578285928389950152610c088b8601612079565b8b820152815201910190610b80565b83513d5f823e3d90fd5b8382346101e1575f6003193601126101e1578151907fca4f280300000000000000000000000000000000000000000000000000000000825230908201525f8160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156109ae57916101dd925f92610cc2575b5051918291602083526020830190611fda565b610cdf9192503d805f833e610cd78183611eca565b810190612203565b9083610caf565b5082346101e157806003193601126101e1576020610d6492610d06611e1c565b83517fbeabacc80000000000000000000000000000000000000000000000000000000081523392810192835273ffffffffffffffffffffffffffffffffffffffff909116602083015260243560408301529384918291606090910190565b03815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610def57610db5575b6020905160018152f35b6020823d602011610de7575b81610dce60209383611eca565b810103126101e157610de1602092612079565b50610dab565b3d9150610dc1565b50513d5f823e3d90fd5b5082346101e157806003193601126101e157813567ffffffffffffffff81116101e157610e299036908401611f05565b60243560028110156101e157610e3e81612023565b610fb457825b610e4c6128f8565b9080600314610f5f5780600414610ed85780600114610e9557600214610e7f57605184634e487b7160e01b5f525260245ffd5b6020935090610e8d91613012565b905b51908152f35b509092670de0b6b3a764000091828102928184041490151715610ec55750602092610ebf91612b84565b90610e8f565b601190634e487b7160e01b5f525260245ffd5b50925f9190670de0b6b3a76400005b8551841015610f2357610f1b600191610f15610f0387876120bb565b51610f0e888b6120bb565b5190612ba2565b90612c2d565b930192610ee7565b92509350508015610f38576020925090610e8f565b827f26543689000000000000000000000000000000000000000000000000000000005f525ffd5b50925f9190670de0b6b3a76400005b8551841015610f2357670de0b6b3a7640000610fab600192610fa5610f9388886120bb565b51610f9e898c6120bb565b5190612e3f565b90612b71565b04930192610f6e565b6003610e44565b8382346101e1575f6003193601126101e157815191825f8354610fdd81612041565b90818452602095600191876001821691825f1461107c575050600114611020575b5050506101dd9291611011910385611eca565b51928284938452830190611df7565b5f90815286935091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b82841061106457505050820101816110116101dd610ffe565b8054848a01860152889550879490930192810161104b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168782015293151560051b8601909301935084925061101191506101dd9050610ffe565b83346101e1575f6003193601126101e1576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9150346101e1575f6003193601126101e15761114c7f0000000000000000000000000000000000000000000000000000000000000000612c4f565b926111767f0000000000000000000000000000000000000000000000000000000000000000612d81565b815192602084019084821067ffffffffffffffff8311176112075750916111e7916101dd949382525f84526111da82519788977f0f0000000000000000000000000000000000000000000000000000000000000089528060208a0152880190611df7565b9186830390870152611df7565b904660608501523060808501525f60a085015283820360c0850152611fa7565b604190634e487b7160e01b5f525260245ffd5b8382346101e1575f6003193601126101e1578151907ff29486a100000000000000000000000000000000000000000000000000000000825230908201526101a090818160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610c17575f926112be575b505060608282015191015182519182526020820152f35b6112d49250803d10610841576108328183611eca565b82806112a7565b83346101e15760206003193601126101e15760209073ffffffffffffffffffffffffffffffffffffffff61130d611e1c565b165f5260028252805f20549051908152f35b8382346101e15760209260031984813601126101e15782359167ffffffffffffffff918284116101e15783360301126101e15783519161135e83611e92565b8084013560028110156101e157835260248101358684015260448101358281116101e15761139190853691840101611f05565b85840152606481013560608401526084810135608084015260a481013573ffffffffffffffffffffffffffffffffffffffff811681036101e15760a084015260c4810135908282116101e1570192366023850112156101e15780840135918211611207575083519061140c86601f19601f8401160183611eca565b80825236602482860101116101e15785815f926024610e8d9701838601378301015260c082015261143b612755565b6122d1565b8382346101e157602091826003193601126101e1578261145e611e1c565b604473ffffffffffffffffffffffffffffffffffffffff9485855196879485937ff7888aec00000000000000000000000000000000000000000000000000000000855230908501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa918215610def575f926114e5575b5051908152f35b9091508281813d831161150d575b6114fd8183611eca565b810103126101e1575190836114de565b503d6114f3565b50346101e1575f6003193601126101e1577f18e79a20000000000000000000000000000000000000000000000000000000005f525ffd5b83346101e1575f6003193601126101e1576020905167016345785d8a00008152f35b346101e1575f6003193601126101e157335f908152600260205260409020805460018101909155005b83346101e15760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256115c836611f65565b9391946115d3612755565b5193845273ffffffffffffffffffffffffffffffffffffffff908116941692a3005b83346101e1575f6003193601126101e15780516005549091825f61161884612041565b808352602094600190866001821691825f146116a557505060011461164a575b50506101dd9291611011910385611eca565b9085925060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0915f925b82841061168d5750505082010181611011611638565b8054848a018601528895508794909301928101611677565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168682015292151560051b850190920192508391506110119050611638565b5082346101e1575f6003193601126101e15780519061170382611e62565b606082526020908183019160608352818401926060845273ffffffffffffffffffffffffffffffffffffffff95867f0000000000000000000000000000000000000000000000000000000000000000169084517fca4f280300000000000000000000000000000000000000000000000000000000815230828201525f81602481865afa90811561189757905f9291839161187d575b50885260248651809481937f7e361bde00000000000000000000000000000000000000000000000000000000835230908301525afa908115611873575f9161185a575b5081959295526117e96128f8565b84528251948086526080860192519260608288015283518091528160a088019401915f5b8281106118445788806101dd8a8a6118338b8b51601f1993848884030190880152611fa7565b915190848303016060850152611fa7565b83518a168652948101949281019260010161180d565b61186e91503d805f833e61089d8183611eca565b6117db565b84513d5f823e3d90fd5b61189191503d8085833e610cd78183611eca565b8a611798565b86513d5f823e3d90fd5b83346101e1575f6003193601126101e157602090610e8d6127c0565b83346101e1575f6003193601126101e1576020905160128152f35b83346101e1575f6003193601126101e157602090517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b83346101e1575f6003193601126101e157602090516729a2241af62c00008152f35b83346101e15760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6115c836611f65565b5082346101e15760205f608461197b36611f65565b86517f15dacbea000000000000000000000000000000000000000000000000000000008152339881019890985273ffffffffffffffffffffffffffffffffffffffff928316602489015290821660448801526064870152859283917f0000000000000000000000000000000000000000000000000000000000000000165af18015610def57610db5576020905160018152f35b83346101e1575f6003193601126101e157602090610e8d6120cf565b8382346101e15760606003193601126101e157803567ffffffffffffffff81116101e157611a5b9036908301611f05565b9160243592611a77611a7085604435936120bb565b51946125ca565b60019081831115611c5d5760025b80600314611be75780600414611b4e5780600114611b0c57600214611ab757605185634e487b7160e01b5f525260245ffd5b909192938115611ae65750610e8d9260209592610f15926ec097ce7bc90715b34b9f0fffffffff040190612ba2565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f525ffd5b5080929394915015611b3b575092610f15610e8d926020956ec097ce7bc90715b34b9f10000000000490612ba2565b601290634e487b7160e01b5f525260245ffd5b509192939080670de0b6b3a7640000935f925b611ba7575b5050508115611b81575092610f15610e8d9260209590612ba2565b7f26543689000000000000000000000000000000000000000000000000000000005f525ffd5b909193670de0b6b3a764000051851015611be1579082611bd98193610f15611bcf89866120bb565b51610f0e8a612086565b950192611b61565b93611b66565b509192939080670de0b6b3a7640000935f925b611c19575050508115611b81575092610f15610e8d9260209590612ba2565b909193670de0b6b3a764000051851015611be1579082670de0b6b3a7640000611c548294610fa5611c4a8a876120bb565b51610f9e8b612086565b04950192611bfa565b81611a85565b5082346101e157806003193601126101e1576020610d6492611c83611e1c565b83517fe1f21c670000000000000000000000000000000000000000000000000000000081523392810192835273ffffffffffffffffffffffffffffffffffffffff909116602083015260243560408301529384918291606090910190565b83346101e1575f6003193601126101e15780516003549091825f611d0484612041565b808352602094600190866001821691825f146116a5575050600114611d355750506101dd9291611011910385611eca565b9085925060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f925b828410611d785750505082010181611011611638565b8054848a018601528895508794909301928101611d62565b82346101e15760206003193601126101e15735907fffffffff0000000000000000000000000000000000000000000000000000000082168092036101e1577f01ffc9a700000000000000000000000000000000000000000000000000000000602092148152f35b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101e157565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101e157565b6060810190811067ffffffffffffffff821117611e7e57604052565b634e487b7160e01b5f52604160045260245ffd5b60e0810190811067ffffffffffffffff821117611e7e57604052565b6040810190811067ffffffffffffffff821117611e7e57604052565b90601f601f19910116810190811067ffffffffffffffff821117611e7e57604052565b67ffffffffffffffff8111611e7e5760051b60200190565b9080601f830112156101e1576020908235611f1f81611eed565b93611f2d6040519586611eca565b81855260208086019260051b8201019283116101e157602001905b828210611f56575050505090565b81358152908301908301611f48565b60031960609101126101e15773ffffffffffffffffffffffffffffffffffffffff9060043582811681036101e1579160243590811681036101e1579060443590565b9081518082526020808093019301915f5b828110611fc6575050505090565b835185529381019392810192600101611fb8565b9081518082526020808093019301915f5b828110611ff9575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101611feb565b6002111561202d57565b634e487b7160e01b5f52602160045260245ffd5b90600182811c9216801561206f575b602083101461205b57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691612050565b519081151582036101e157565b670de0b6b3a7640000518110156120a75760051b670de0b6b3a76400200190565b634e487b7160e01b5f52603260045260245ffd5b80518210156120a75760209160051b010190565b6040517fe4dc2aa400000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561217a575f9161214b575090565b90506020813d602011612172575b8161216660209383611eca565b810103126101e1575190565b3d9150612159565b6040513d5f823e3d90fd5b9080601f830112156101e1578151906020916121a081611eed565b936121ae6040519586611eca565b81855260208086019260051b8201019283116101e157602001905b8282106121d7575050505090565b815173ffffffffffffffffffffffffffffffffffffffff811681036101e15781529083019083016121c9565b906020828203126101e157815167ffffffffffffffff81116101e1576122299201612185565b90565b9080601f830112156101e15781519060209161224781611eed565b936122556040519586611eca565b81855260208086019260051b8201019283116101e157602001905b82821061227e575050505090565b81518152908301908301612270565b9190916040818403126101e15780519267ffffffffffffffff938481116101e157816122ba91840161222c565b9360208301519081116101e157612229920161222c565b604081019081516122e860608301918251906120bb565b519251916122fc60808201938451906120bb565b5191815161230981612023565b61231281612023565b6123d15761232c612325602092516125ca565b94516125ca565b910151670de0b6b3a7640000948561234382612b3d565b0482116123a95761235761235d9282612b30565b90613012565b848402938085048614901517156123955761237e6123849261239195612b84565b90612ba2565b8381810391100290612b71565b0490565b634e487b7160e01b5f52601160045260245ffd5b7f340a4533000000000000000000000000000000000000000000000000000000005f5260045ffd5b6123eb6123e460209295939495516125ca565b92516125ca565b920151670de0b6b3a764000061240085612b3d565b04811161245a578303908382116123955761242161237e9261242795613012565b92613012565b7ffffffffffffffffffffffffffffffffffffffffffffffffff21f494c589c000081019081116123955761222991612c2d565b7f64590b9f000000000000000000000000000000000000000000000000000000005f5260045ffd5b6101a0918190038281126101e15760405192610140928385019267ffffffffffffffff9086851082861117611e7e576080136101e1576101c0860190811184821017611e7e576040526124d481612079565b83526124e260208201612079565b9261016093848701526124f760408301612079565b92610180938488015261250c60608401612079565b9087015285526080810151602086015260a0810151604086015260c0810151606086015260e081015164ffffffffff811681036101e15760808601526101008082015163ffffffff811681036101e15761259d946125939160a08901526125876101209761257b898701612079565b60c08b01528501612079565b60e08901528301612079565b9086015201612079565b9082015290565b906020828203126101e157815167ffffffffffffffff81116101e157612229920161222c565b806125f457507f000000000000000000000000000000000000000000000000000000000000000090565b6001810361262157507f000000000000000000000000000000000000000000000000000000000000000090565b6002810361264e57507f000000000000000000000000000000000000000000000000000000000000000090565b6003810361267b57507f000000000000000000000000000000000000000000000000000000000000000090565b600481036126a857507f000000000000000000000000000000000000000000000000000000000000000090565b600581036126d557507f000000000000000000000000000000000000000000000000000000000000000090565b6006810361270257507f000000000000000000000000000000000000000000000000000000000000000090565b60070361272d577f000000000000000000000000000000000000000000000000000000000000000090565b7fc1ab6dc1000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361279457565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163014806128cf575b15612828577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff821117611e7e5760405251902090565b507f000000000000000000000000000000000000000000000000000000000000000046146127ff565b7f000000000000000000000000000000000000000000000000000000000000000061292281611eed565b906129306040519283611eca565b80825261293c81611eed565b601f196020840191013682378251156120a7577f000000000000000000000000000000000000000000000000000000000000000090528151600110156120a7577f000000000000000000000000000000000000000000000000000000000000000060408301526002811115612b2c578151600210156120a7577f000000000000000000000000000000000000000000000000000000000000000060608301526003811115612b2c578151600310156120a7577f0000000000000000000000000000000000000000000000000000000000000000608083015260049081811115612b27578251821015612b14577f000000000000000000000000000000000000000000000000000000000000000060a08401526005811115612b2757825160051015612b14577f000000000000000000000000000000000000000000000000000000000000000060c08401526006811115612b2757825160061015612b14576007907f000000000000000000000000000000000000000000000000000000000000000060e085015211612acc575090565b815160071015612b0157507f000000000000000000000000000000000000000000000000000000000000000061010082015290565b603290634e487b7160e01b5f525260245ffd5b603282634e487b7160e01b5f525260245ffd5b505090565b5090565b9190820180921161239557565b90670429d069189e00009182810292818404149015171561239557565b906127109182810292818404149015171561239557565b8181029291811591840414171561239557565b8115612b8e570490565b634e487b7160e01b5f52601260045260245ffd5b90670de0b6b3a764000090818103612bb957505090565b671bc16d674ec800008103612bd45750508061222991612c2d565b673782dace9d9000008103612bf8575050612bf28161222992612c2d565b80612c2d565b612c02919261308f565b906001612c0e83612b5a565b915f198301040190151502600181018091116123955761222991612b30565b90612c3791612b71565b6001670de0b6b3a76400005f19830104019015150290565b60ff8114612ca35760ff811690601f8211612c7b5760405191612c7183611eae565b8252602082015290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040515f815f5491612cb583612041565b80835292602090600190818116908115612d3e5750600114612ce0575b505061222992500382611eca565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b828410612d2657506122299450505081016020015f80612cd2565b85548785018301529485019486945092810192612d0b565b9050602093506122299592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f80612cd2565b60ff8114612da35760ff811690601f8211612c7b5760405191612c7183611eae565b506040515f81600191600154612db881612041565b8084529360209160018116908115612d3e5750600114612de057505061222992500382611eca565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b828410612e2757506122299450505081016020015f80612cd2565b85548785018301529485019486945092810192612e0c565b670de0b6b3a764000091808303612e565750905090565b8290671bc16d674ec800008103612e735750508061239191612b71565b673782dace9d9000008103612e975750612e908261239193612b71565b0480612b71565b9050612ea29161308f565b612eab81612b5a565b60015f1993848301040190151502906001820180831161239557811015612ed3575050505f90565b030190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411612f5c579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa1561217a575f5173ffffffffffffffffffffffffffffffffffffffff811615612f5257905f905f90565b505f906001905f90565b5050505f9160039190565b600481101561202d5780612f79575050565b60018103612fa9577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b60028103612fdd57507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600314612fe75750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90801561304357670de0b6b3a764000091828102928184041490151715612395576001905f19830104019015150290565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b8015612b8e576ec097ce7bc90715b34b9f10000000000590565b8115612b8e570590565b9080156139b85781156139b2578160ff1c61398a57770bce5086492111aea88f4bb1ca6bcf584181ea8059f765328110156139625781670c7d713b49da00001280613951575b156135ee57670de0b6b3a7640000916ec097ce7bc90715b34b9f100000000090613128908402828101907fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f000000000018302613085565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b918082818507020592050201670de0b6b3a7640000905b057ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc000081811315806135db575b156135b3578190821215806135a0575b15613578575f915f8112613569575b506064906806f05b59d3b20000008112613506577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e0000000168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac620000008112156134cd575b6856bc75e2d631000000811215613493575b682b5e3af16b1880000081121561345b575b6815af1d78b58c400000811215613423575b680ad78ebc5ac62000008112156133ec575b828112156133b5575b6802b5e3af16b188000081121561337e575b68015af1d78b58c40000811215613347575b60028382800205056003848383020505600485848302050585600581868402050560068287830205056007838883020505906008848984020505926009858a8602050595600a868b8902050597600b878c8b02050599600c888d8d0205059b01010101010101010101010102050205905f14612229576122299061306b565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000849201920205906132c8565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000849201920205906132b6565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000849201920205906132a4565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e000008492019202059061329b565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000084920192020590613289565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000084920192020590613277565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000084920192020590613265565b6e01855144814a7ff805980ff008400091507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000001613253565b6803782dace9d90000008112613556577ffffffffffffffffffffffffffffffffffffffffffffffffc87d25316270000000168056bc75e2d63100000826b1425982cf597cd205cef73809261323e565b68056bc75e2d631000008260019261323e565b600192505f03905060646131e2565b7fd4794efd000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156131d3565b7fa2f9f7e3000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156131c3565b81670de0b6b3a7640000925f9184811261393b575b506064905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000821215613910575b73011798004d755d3c8bc8e03204cf44619e0000008212156138ef575b820290808302906e01855144814a7ff805980ff008400090818312156138cc575b50506b02df0ab5a80a22c61ab5a700808212156138ac575b50693f1fce3da636ea5cf8508082121561388c575b50690127fa27722cc06cc5e28082121561386c575b5068280e60114edb805d038082121561384c575b50680ebc5fb4174612111080821215613835575b506808f00f760a4b2db55d80821215613815575b506806f5f1775788937937808212156137f5575b506806248f33704b286603808212156137d6575b506805c548670b9510e7ac808212156137b7575b5061376468056bc75e2d6310000091827ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000818301920102613085565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b0105905f146137b2575f035b02613197565b6137ac565b68056bc75e2d631000006756bc75e2d63100009202059101905f613728565b68056bc75e2d6310000067ad78ebc5ac6200009202059101905f613714565b68056bc75e2d6310000068015af1d78b58c400009202059101905f613700565b68056bc75e2d631000006802b5e3af16b18800009202059101905f6136ec565b68056bc75e2d63100000809202059101905f6136d8565b68056bc75e2d63100000680ad78ebc5ac62000009202059101905f6136c4565b68056bc75e2d631000006815af1d78b58c4000009202059101905f6136b0565b68056bc75e2d63100000682b5e3af16b188000009202059101905f61369b565b68056bc75e2d631000006856bc75e2d6310000009202059101905f613686565b68ad78ebc5ac62000000925069021e19e0c9bab240000002059101905f8061366e565b906b1425982cf597cd205cef73806803782dace9d90000009105910161364d565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b2000000613630565b9050613947915061306b565b6001906064613603565b50670f43fc2c04ee000082126130d5565b7fd8317311000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f022701e0000000000000000000000000000000000000000000000000000000005f5260045ffd5b50505f90565b5050670de0b6b3a76400009056fea26469706673582212203ec0118ae17c0f0adba7459b5c62781ac22adb46f73c1467746703ba70b9c43764736f6c634300081b0033c2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b","opcodes":"PUSH2 0x2C0 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x8E1 JUMPI PUSH2 0x4643 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x1D DUP3 DUP6 PUSH2 0x8F5 JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP3 DUP3 SUB SLT PUSH2 0x8E1 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x8E1 JUMPI DUP3 ADD SWAP2 PUSH1 0xA0 DUP4 DUP4 SUB SLT PUSH2 0x8E1 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH1 0xA0 DUP4 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP5 DUP3 LT OR PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x8E1 JUMPI DUP2 PUSH2 0x81 SWAP2 DUP7 ADD PUSH2 0x918 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x8E1 JUMPI DUP2 PUSH2 0xA2 SWAP2 DUP7 ADD PUSH2 0x918 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP7 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH1 0x60 DUP6 ADD MLOAD SWAP1 SWAP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x8E1 JUMPI DUP2 ADD DUP3 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x8E1 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x710 JUMPI DUP2 PUSH1 0x5 SHL PUSH1 0x40 MLOAD SWAP3 PUSH2 0xFC PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x8F5 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x20 DUP1 DUP5 ADD SWAP2 DUP4 ADD ADD SWAP2 DUP6 DUP4 GT PUSH2 0x8E1 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x8E5 JUMPI POP POP POP PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT PUSH2 0x8E1 JUMPI PUSH1 0x20 SWAP3 PUSH2 0x144 SWAP3 ADD PUSH2 0x918 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD DUP2 SWAP1 MSTORE SWAP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x8E1 JUMPI DUP3 MLOAD SWAP4 MLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 SWAP6 SWAP2 SWAP1 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD PUSH1 0x31 PUSH1 0xF8 SHL DUP2 MSTORE PUSH2 0x199 DUP4 PUSH2 0x96D JUMP JUMPDEST PUSH2 0x120 MSTORE PUSH2 0x1A6 DUP3 PUSH2 0xAF0 JUMP JUMPDEST PUSH2 0x140 MSTORE DUP3 MLOAD PUSH1 0x20 DUP5 ADD KECCAK256 SWAP2 DUP3 PUSH1 0xE0 MSTORE MLOAD SWAP1 KECCAK256 DUP1 PUSH2 0x100 MSTORE CHAINID PUSH1 0xA0 MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP5 MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 PUSH1 0x80 MSTORE ADDRESS PUSH1 0xC0 MSTORE PUSH2 0x160 DUP3 SWAP1 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x710 JUMPI PUSH1 0x3 SLOAD SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x8D7 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x6F2 JUMPI DUP2 PUSH1 0x1F DUP5 SWAP4 GT PUSH2 0x87F JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0x80A JUMPI PUSH0 SWAP3 PUSH2 0x7FF JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x3 SSTORE JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x710 JUMPI PUSH1 0x4 SLOAD PUSH1 0x1 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x7F5 JUMPI JUMPDEST PUSH1 0x20 DUP3 LT EQ PUSH2 0x6F2 JUMPI PUSH1 0x1F DUP2 GT PUSH2 0x796 JUMPI JUMPDEST POP PUSH1 0x20 PUSH1 0x1F DUP3 GT PUSH1 0x1 EQ PUSH2 0x72F JUMPI DUP2 SWAP3 SWAP4 SWAP5 SWAP6 PUSH0 SWAP3 PUSH2 0x724 JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x4 SSTORE JUMPDEST PUSH2 0x180 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x710 JUMPI PUSH1 0x5 SLOAD SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x706 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x6F2 JUMPI DUP2 PUSH1 0x1F DUP5 SWAP4 GT PUSH2 0x6A4 JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0x61C JUMPI PUSH0 SWAP3 PUSH2 0x611 JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x5 SSTORE JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x1A0 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x60 DUP4 ADD MLOAD MLOAD SUB PUSH2 0x602 JUMPI PUSH0 SWAP1 PUSH0 JUMPDEST DUP2 MLOAD SWAP3 PUSH1 0xFF DUP3 AND SWAP4 DUP5 LT ISZERO PUSH2 0x494 JUMPI PUSH1 0x60 DUP6 ADD MLOAD DUP1 MLOAD DUP6 LT ISZERO PUSH2 0x480 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x1FE0 DUP5 PUSH1 0x5 SHL AND ADD ADD MLOAD SWAP1 PUSH7 0x2386F26FC10000 DUP3 LT PUSH2 0x471 JUMPI DUP2 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x3D9 JUMPI SWAP4 DUP1 PUSH2 0x3ED JUMPI POP PUSH2 0x1C0 MSTORE JUMPDEST PUSH1 0xFF DUP1 SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x3D9 JUMPI PUSH1 0x1 ADD PUSH2 0x375 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x3FF JUMPI POP PUSH2 0x1E0 MSTORE PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x411 JUMPI POP PUSH2 0x200 MSTORE PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x3 DUP2 SUB PUSH2 0x423 JUMPI POP PUSH2 0x220 MSTORE PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x4 DUP2 SUB PUSH2 0x435 JUMPI POP PUSH2 0x240 MSTORE PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x5 DUP2 SUB PUSH2 0x447 JUMPI POP PUSH2 0x260 MSTORE PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x6 DUP2 SUB PUSH2 0x459 JUMPI POP PUSH2 0x280 MSTORE PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x7 EQ PUSH2 0x467 JUMPI JUMPDEST POP PUSH2 0x3C5 JUMP JUMPDEST PUSH2 0x2A0 MSTORE PUSH0 PUSH2 0x461 JUMP JUMPDEST PUSH4 0xBD393583 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 POP SUB PUSH2 0x5F3 JUMPI PUSH1 0x40 MLOAD PUSH2 0x39FC SWAP2 DUP3 PUSH2 0xC27 DUP4 CODECOPY PUSH1 0x80 MLOAD DUP3 PUSH2 0x2806 ADD MSTORE PUSH1 0xA0 MLOAD DUP3 PUSH2 0x28D2 ADD MSTORE PUSH1 0xC0 MLOAD DUP3 PUSH2 0x27D7 ADD MSTORE PUSH1 0xE0 MLOAD DUP3 PUSH2 0x2855 ADD MSTORE PUSH2 0x100 MLOAD DUP3 PUSH2 0x287B ADD MSTORE PUSH2 0x120 MLOAD DUP3 PUSH2 0x1128 ADD MSTORE PUSH2 0x140 MLOAD DUP3 PUSH2 0x1152 ADD MSTORE PUSH2 0x160 MLOAD DUP3 DUP2 DUP2 PUSH2 0x260 ADD MSTORE DUP2 DUP2 PUSH2 0x488 ADD MSTORE DUP2 DUP2 PUSH2 0x65F ADD MSTORE DUP2 DUP2 PUSH2 0xD7E ADD MSTORE DUP2 DUP2 PUSH2 0x10ED ADD MSTORE DUP2 DUP2 PUSH2 0x14AE ADD MSTORE DUP2 DUP2 PUSH2 0x1733 ADD MSTORE DUP2 DUP2 PUSH2 0x19D8 ADD MSTORE DUP2 DUP2 PUSH2 0x2118 ADD MSTORE PUSH2 0x276C ADD MSTORE PUSH2 0x180 MLOAD DUP3 DUP2 DUP2 PUSH2 0x59D ADD MSTORE DUP2 DUP2 PUSH2 0x94A ADD MSTORE DUP2 DUP2 PUSH2 0xA12 ADD MSTORE DUP2 DUP2 PUSH2 0xC7A ADD MSTORE PUSH2 0x1277 ADD MSTORE MLOAD DUP2 PUSH2 0x28FA ADD MSTORE PUSH2 0x1C0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x25D2 ADD MSTORE PUSH2 0x2951 ADD MSTORE PUSH2 0x1E0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x25FF ADD MSTORE PUSH2 0x297E ADD MSTORE PUSH2 0x200 MLOAD DUP2 DUP2 DUP2 PUSH2 0x262C ADD MSTORE PUSH2 0x29B7 ADD MSTORE PUSH2 0x220 MLOAD DUP2 DUP2 DUP2 PUSH2 0x2659 ADD MSTORE PUSH2 0x29F0 ADD MSTORE PUSH2 0x240 MLOAD DUP2 DUP2 DUP2 PUSH2 0x2686 ADD MSTORE PUSH2 0x2A2A ADD MSTORE PUSH2 0x260 MLOAD DUP2 DUP2 DUP2 PUSH2 0x26B3 ADD MSTORE PUSH2 0x2A63 ADD MSTORE PUSH2 0x280 MLOAD DUP2 DUP2 DUP2 PUSH2 0x26E0 ADD MSTORE PUSH2 0x2A9F ADD MSTORE PUSH2 0x2A0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x270B ADD MSTORE PUSH2 0x2AD9 ADD MSTORE RETURN JUMPDEST PUSH4 0x1CE788A7 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0xAAAD13F7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x345 JUMP JUMPDEST PUSH1 0x5 PUSH0 SWAP1 DUP2 MSTORE SWAP4 POP PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 SWAP2 SWAP1 JUMPDEST PUSH1 0x1F NOT DUP5 AND DUP6 LT PUSH2 0x689 JUMPI PUSH1 0x1 SWAP5 POP DUP4 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0x671 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x5 SSTORE PUSH2 0x35A JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x663 JUMP JUMPDEST DUP2 DUP2 ADD MLOAD DUP4 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x648 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP6 LT PUSH2 0x6EB JUMPI JUMPDEST SWAP1 DUP5 SWAP4 SWAP3 SWAP2 JUMPDEST PUSH1 0x1F DUP4 ADD PUSH1 0x5 SHR DUP3 ADD DUP2 LT PUSH2 0x6DD JUMPI POP POP PUSH2 0x32F JUMP JUMPDEST PUSH0 DUP2 SSTORE DUP6 SWAP5 POP PUSH1 0x1 ADD PUSH2 0x6C7 JUMP JUMPDEST POP DUP1 PUSH2 0x6C1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x31B JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x2DF JUMP JUMPDEST PUSH1 0x4 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 JUMPDEST PUSH1 0x1F NOT DUP5 AND DUP2 LT PUSH2 0x77E JUMPI POP PUSH1 0x1 SWAP4 SWAP5 SWAP6 SWAP7 DUP4 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0x766 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x4 SSTORE PUSH2 0x2F4 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x758 JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x20 PUSH1 0x1 DUP2 SWAP3 DUP6 DUP12 ADD MLOAD DUP2 SSTORE ADD SWAP4 ADD SWAP2 ADD PUSH2 0x73A JUMP JUMPDEST PUSH1 0x4 PUSH0 MSTORE PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B PUSH1 0x1F DUP4 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP5 LT PUSH2 0x7EE JUMPI JUMPDEST PUSH1 0x1F DUP4 ADD PUSH1 0x5 SHR DUP3 ADD DUP2 LT PUSH2 0x7E3 JUMPI POP POP PUSH2 0x2C5 JUMP JUMPDEST PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x7CD JUMP JUMPDEST POP DUP1 PUSH2 0x7CD JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x2B3 JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x27D JUMP JUMPDEST PUSH1 0x3 PUSH0 SWAP1 DUP2 MSTORE SWAP4 POP PUSH0 MLOAD PUSH1 0x20 PUSH2 0x4623 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE SWAP2 SWAP1 JUMPDEST PUSH1 0x1F NOT DUP5 AND DUP6 LT PUSH2 0x864 JUMPI PUSH1 0x1 SWAP5 POP DUP4 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0x84C JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x3 SSTORE PUSH2 0x292 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x83E JUMP JUMPDEST DUP2 DUP2 ADD MLOAD DUP4 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x823 JUMP JUMPDEST PUSH1 0x3 PUSH0 MSTORE SWAP1 SWAP2 POP PUSH0 MLOAD PUSH1 0x20 PUSH2 0x4623 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP6 LT PUSH2 0x8D0 JUMPI JUMPDEST SWAP1 DUP5 SWAP4 SWAP3 SWAP2 JUMPDEST PUSH1 0x1F DUP4 ADD PUSH1 0x5 SHR DUP3 ADD DUP2 LT PUSH2 0x8C2 JUMPI POP POP PUSH2 0x267 JUMP JUMPDEST PUSH0 DUP2 SSTORE DUP6 SWAP5 POP PUSH1 0x1 ADD PUSH2 0x8AC JUMP JUMPDEST POP DUP1 PUSH2 0x8A6 JUMP JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x253 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x114 JUMP JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x8E1 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x710 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x94C PUSH1 0x1F DUP5 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP6 PUSH2 0x8F5 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x8E1 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0x9E3 JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0x9A5 JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0x997 JUMPI POP OR SWAP1 JUMP JUMPDEST DUP3 PUSH0 NOT SWAP2 SUB PUSH1 0x3 SHL SHL AND OR SWAP1 JUMP JUMPDEST PUSH1 0x44 DUP3 PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH4 0x305A27A9 PUSH1 0xE0 SHL DUP4 MSTORE DUP2 PUSH1 0x4 DUP5 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH1 0x24 DUP7 ADD MSTORE ADD DUP5 DUP5 ADD MCOPY PUSH0 DUP3 DUP3 ADD DUP5 ADD MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP2 ADD SUB ADD SWAP1 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x710 JUMPI PUSH0 SLOAD SWAP3 PUSH1 0x1 SWAP4 DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0xAE6 JUMPI JUMPDEST DUP4 DUP3 LT EQ PUSH2 0x6F2 JUMPI PUSH1 0x1F DUP2 GT PUSH2 0xAB3 JUMPI JUMPDEST POP DUP2 PUSH1 0x1F DUP5 GT PUSH1 0x1 EQ PUSH2 0xA51 JUMPI POP SWAP3 DUP3 SWAP4 SWAP2 DUP4 SWAP3 PUSH0 SWAP5 PUSH2 0xA46 JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0xA31 JUMP JUMPDEST SWAP2 SWAP1 DUP4 PUSH1 0x1F NOT DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0xA99 JUMPI POP POP POP LT PUSH2 0xA81 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0xA74 JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0xA63 JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP5 PUSH1 0x1F DUP5 PUSH0 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 PUSH1 0x1F DUP7 ADD PUSH1 0x5 SHR ADD JUMPDEST DUP3 DUP2 LT PUSH2 0xADB JUMPI POP POP PUSH2 0xA16 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0xACD JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xA05 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0xB1A JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0x9A5 JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0x997 JUMPI POP OR SWAP1 JUMP JUMPDEST SWAP2 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x710 JUMPI PUSH1 0x1 SWAP2 DUP3 SLOAD DUP4 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0xC1C JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x6F2 JUMPI PUSH1 0x1F DUP2 GT PUSH2 0xBE9 JUMPI JUMPDEST POP DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0xB89 JUMPI POP DUP2 SWAP3 SWAP4 SWAP5 PUSH0 SWAP3 PUSH2 0xB7E JUMPI JUMPDEST POP POP PUSH0 NOT PUSH1 0x3 DUP4 SWAP1 SHL SHR NOT AND SWAP1 DUP3 SHL OR SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0xB67 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT DUP4 AND SWAP6 DUP5 PUSH0 MSTORE DUP3 PUSH0 KECCAK256 SWAP3 PUSH0 SWAP1 JUMPDEST DUP9 DUP3 LT PUSH2 0xBD2 JUMPI POP POP DUP4 DUP6 SWAP7 SWAP8 LT PUSH2 0xBBA JUMPI JUMPDEST POP POP POP DUP2 SHL ADD SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0xBAD JUMP JUMPDEST DUP1 DUP8 DUP6 SWAP7 DUP3 SWAP5 SWAP7 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP6 ADD SWAP4 ADD SWAP1 PUSH2 0xB9A JUMP JUMPDEST DUP4 PUSH0 MSTORE DUP4 PUSH1 0x1F DUP4 PUSH0 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR ADD JUMPDEST DUP3 DUP2 LT PUSH2 0xC11 JUMPI POP POP PUSH2 0xB4E JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP5 SWAP1 PUSH2 0xC03 JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xB3D JUMP INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH1 0xE0 PUSH0 CALLDATALOAD DUP2 SHR SWAP3 DUP4 PUSH4 0x1FFC9A7 EQ PUSH2 0x1D90 JUMPI POP DUP3 PUSH4 0x6FDDE03 EQ PUSH2 0x1CE1 JUMPI DUP3 PUSH4 0x95EA7B3 EQ PUSH2 0x1C63 JUMPI DUP3 PUSH4 0x16A0B3E0 EQ PUSH2 0x1A2A JUMPI DUP3 PUSH4 0x18160DDD EQ PUSH2 0x1A0E JUMPI DUP3 PUSH4 0x23B872DD EQ PUSH2 0x1966 JUMPI DUP3 PUSH4 0x23DE6651 EQ PUSH2 0x1934 JUMPI DUP3 PUSH4 0x273C1ADF EQ PUSH2 0x1912 JUMPI DUP3 PUSH4 0x30ADF81F EQ PUSH2 0x18D8 JUMPI DUP3 PUSH4 0x313CE567 EQ PUSH2 0x18BD JUMPI DUP3 PUSH4 0x3644E515 EQ PUSH2 0x18A1 JUMPI DUP3 PUSH4 0x53B79BD7 EQ PUSH2 0x16E5 JUMPI DUP3 PUSH4 0x54FD4D50 EQ PUSH2 0x15F5 JUMPI DUP3 PUSH4 0x5687F2B8 EQ PUSH2 0x1596 JUMPI DUP3 PUSH4 0x627CDCB9 EQ PUSH2 0x156D JUMPI DUP3 PUSH4 0x654CF15D EQ PUSH2 0x154B JUMPI DUP3 PUSH4 0x679AEFCE EQ PUSH2 0x1514 JUMPI DUP3 PUSH4 0x70A08231 EQ PUSH2 0x1440 JUMPI DUP3 PUSH4 0x72C98186 EQ PUSH2 0x131F JUMPI DUP3 PUSH4 0x7ECEBE00 EQ PUSH2 0x12DB JUMPI DUP3 PUSH4 0x81FA807C EQ PUSH2 0x121A JUMPI DUP3 PUSH4 0x84B0196E EQ PUSH2 0x1111 JUMPI DUP3 PUSH4 0x8D928AF8 EQ PUSH2 0x10C1 JUMPI DUP3 PUSH4 0x95D89B41 EQ PUSH2 0xFBB JUMPI DUP3 PUSH4 0x984DE9E8 EQ PUSH2 0xDF9 JUMPI DUP3 PUSH4 0xA9059CBB EQ PUSH2 0xCE6 JUMPI DUP3 PUSH4 0xAA6CA808 EQ PUSH2 0xC21 JUMPI DUP3 PUSH4 0xABB1DC44 EQ PUSH2 0x9B8 JUMPI DUP3 PUSH4 0xB156AA0A EQ PUSH2 0x8F1 JUMPI DUP3 PUSH4 0xB677FA56 EQ PUSH2 0x8CF JUMPI DUP3 PUSH4 0xC0BC6F33 EQ PUSH2 0x5F6 JUMPI DUP3 PUSH4 0xCE20ECE7 EQ PUSH2 0x5D6 JUMPI DUP3 PUSH4 0xD335B0CF EQ PUSH2 0x543 JUMPI DUP3 PUSH4 0xD505ACCF EQ PUSH2 0x2D8 JUMPI POP DUP2 PUSH4 0xDD62ED3E EQ PUSH2 0x1E5 JUMPI POP PUSH4 0xF89F27ED EQ PUSH2 0x1AE JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH2 0x1DD SWAP1 PUSH2 0x1CA PUSH2 0x28F8 JUMP JUMPDEST SWAP1 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1FA7 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x1E1 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH2 0x200 PUSH2 0x1E1C JUMP JUMPDEST PUSH1 0x64 PUSH2 0x20A PUSH2 0x1E3F JUMP JUMPDEST SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP1 SWAP8 DUP8 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 PUSH32 0x927DA10500000000000000000000000000000000000000000000000000000000 DUP8 MSTORE ADDRESS SWAP1 DUP8 ADD MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE AND PUSH1 0x44 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2CF JUMPI PUSH0 SWAP2 PUSH2 0x29A JUMPI JUMPDEST PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x2C7 JUMPI JUMPDEST DUP2 PUSH2 0x2B5 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP2 MLOAD SWAP1 PUSH2 0x290 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2A8 JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 SWAP1 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH2 0x2F1 PUSH2 0x1E1C JUMP JUMPDEST SWAP1 PUSH2 0x2FA PUSH2 0x1E3F JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP3 PUSH1 0x84 CALLDATALOAD SWAP1 PUSH1 0x64 CALLDATALOAD PUSH1 0xFF DUP4 AND DUP4 SUB PUSH2 0x1E1 JUMPI DUP1 TIMESTAMP GT PUSH2 0x519 JUMPI PUSH2 0x347 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH1 0x1 DUP3 ADD SWAP1 SSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x413 PUSH2 0x40A DUP8 MLOAD SWAP6 PUSH1 0x20 DUP8 ADD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP8 DUP9 SWAP6 DUP7 DUP10 AND SWAP8 DUP9 DUP14 DUP5 ADD MSTORE DUP8 DUP13 AND PUSH1 0x60 DUP5 ADD MSTORE DUP14 PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 MSTORE PUSH2 0x3BE DUP2 PUSH2 0x1E92 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 PUSH2 0x3C9 PUSH2 0x27C0 JUMP JUMPDEST SWAP1 DUP11 MLOAD SWAP2 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x2 DUP4 ADD MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0xC4 CALLDATALOAD SWAP2 PUSH1 0x42 PUSH1 0xA4 CALLDATALOAD SWAP3 KECCAK256 PUSH2 0x2ED8 JUMP JUMPDEST SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x2F67 JUMP JUMPDEST AND DUP2 DUP2 SUB PUSH2 0x4EC JUMPI POP POP PUSH0 DUP5 SWAP6 SWAP7 PUSH2 0x484 PUSH1 0x20 SWAP7 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP7 MSTORE DUP6 ADD PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 SWAP5 PUSH1 0x60 DUP3 ADD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP4 MSTORE AND PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2CF JUMPI POP PUSH2 0x4B8 JUMPI STOP JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x4E4 JUMPI JUMPDEST DUP2 PUSH2 0x4D1 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1E1 JUMPI PUSH2 0x4E2 SWAP1 PUSH2 0x2079 JUMP JUMPDEST STOP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x4C4 JUMP JUMPDEST DUP8 PUSH32 0x4B800E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP7 PUSH32 0x6279130200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP1 MLOAD SWAP2 PUSH32 0xB45090F900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2CF JUMPI PUSH0 SWAP2 PUSH2 0x29A JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH6 0x9184E72A000 DUP2 MSTORE RETURN JUMPDEST SWAP2 POP CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP3 MLOAD PUSH2 0x613 DUP2 PUSH2 0x1E92 JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 DUP3 ADD SWAP2 PUSH1 0x60 DUP4 MSTORE DUP6 DUP2 ADD SWAP3 PUSH0 DUP5 MSTORE PUSH1 0x60 DUP3 ADD PUSH0 DUP2 MSTORE PUSH1 0x80 DUP4 ADD SWAP2 PUSH0 DUP4 MSTORE PUSH1 0xA0 DUP5 ADD SWAP4 PUSH0 DUP6 MSTORE PUSH1 0xC0 DUP2 ADD SWAP6 PUSH0 DUP8 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 DUP12 MLOAD PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x87F JUMPI PUSH0 SWAP2 PUSH2 0x8AD JUMPI JUMPDEST POP DUP4 MSTORE DUP12 MLOAD PUSH32 0x7E361BDE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x87F JUMPI PUSH0 SWAP2 PUSH2 0x889 JUMPI JUMPDEST POP DUP5 MSTORE DUP12 MLOAD PUSH32 0xB45090F900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE DUP11 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x87F JUMPI PUSH0 SWAP2 PUSH2 0x852 JUMPI JUMPDEST POP DUP10 MSTORE PUSH2 0x751 PUSH2 0x20CF JUMP JUMPDEST DUP6 MSTORE DUP12 MLOAD SWAP2 DUP3 SWAP2 PUSH32 0xF29486A100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE DUP2 PUSH1 0x24 PUSH2 0x1A0 SWAP5 DUP6 SWAP4 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x848 JUMPI SWAP3 DUP12 SWAP13 SWAP3 PUSH2 0x7E0 SWAP3 PUSH2 0x7F3 SWAP7 SWAP6 PUSH0 SWAP15 SWAP13 SWAP14 SWAP15 SWAP3 PUSH2 0x81B JUMPI JUMPDEST POP POP DUP11 DUP2 ADD MLOAD ISZERO ISZERO DUP9 MSTORE PUSH2 0x120 PUSH2 0x100 SWAP2 DUP3 DUP2 ADD MLOAD ISZERO ISZERO DUP12 MSTORE ADD MLOAD ISZERO ISZERO DUP11 MSTORE DUP4 MLOAD SWAP14 DUP14 DUP16 SWAP15 SWAP4 DUP16 SWAP5 DUP6 MSTORE MLOAD SWAP4 ADD MSTORE DUP13 ADD SWAP1 PUSH2 0x1FA7 JUMP JUMPDEST SWAP2 MLOAD SWAP1 PUSH1 0x1F NOT DUP12 DUP5 SUB ADD SWAP1 DUP12 ADD MSTORE PUSH2 0x1FA7 JUMP JUMPDEST SWAP6 MLOAD PUSH1 0x60 DUP9 ADD MSTORE MLOAD PUSH1 0x80 DUP8 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xA0 DUP7 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xC0 DUP6 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST PUSH2 0x83A SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x841 JUMPI JUMPDEST PUSH2 0x832 DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2482 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x7AA JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x828 JUMP JUMPDEST DUP13 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 POP DUP11 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x878 JUMPI JUMPDEST PUSH2 0x869 DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1E1 JUMPI MLOAD PUSH0 PUSH2 0x746 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x85F JUMP JUMPDEST DUP14 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x8A5 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x89D DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x228D JUMP JUMPDEST SWAP1 POP PUSH0 PUSH2 0x703 JUMP JUMPDEST PUSH2 0x8C9 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x8C1 DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x25A4 JUMP JUMPDEST PUSH0 PUSH2 0x6C0 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH8 0x9B6E64A8EC60000 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP2 MLOAD SWAP1 PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS SWAP1 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x9AE JUMPI SWAP2 PUSH2 0x1DD SWAP3 PUSH0 SWAP3 PUSH2 0x992 JUMPI JUMPDEST POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1FA7 JUMP JUMPDEST PUSH2 0x9A7 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x8C1 DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x97F JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD SWAP2 PUSH32 0x67E0E07600000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH0 DUP3 PUSH1 0x24 DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xC17 JUMPI PUSH0 SWAP4 PUSH0 SWAP3 PUSH0 SWAP3 PUSH0 SWAP6 PUSH2 0xAED JUMPI JUMPDEST POP SWAP1 PUSH2 0xA65 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP2 MLOAD SWAP7 DUP8 SWAP7 PUSH1 0x80 DUP9 MSTORE PUSH1 0x80 DUP9 ADD SWAP1 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x20 DUP8 DUP3 SUB DUP2 DUP10 ADD MSTORE DUP1 DUP1 DUP8 MLOAD SWAP4 DUP5 DUP2 MSTORE ADD SWAP7 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0xAA9 JUMPI DUP10 DUP9 SUB DUP7 DUP12 ADD MSTORE DUP10 DUP1 PUSH2 0x1DD DUP12 PUSH2 0xA9B DUP13 DUP13 PUSH2 0x1FA7 JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x1FA7 JUMP JUMPDEST SWAP2 DUP5 SWAP9 SWAP10 POP PUSH1 0x60 DUP7 SWAP8 SWAP9 PUSH1 0x1 SWAP4 SWAP6 SWAP8 DUP4 SWAP8 MLOAD DUP1 MLOAD PUSH2 0xAC6 DUP2 PUSH2 0x2023 JUMP JUMPDEST DUP4 MSTORE DUP7 DUP6 DUP3 ADD MLOAD AND DUP6 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO DUP10 DUP3 ADD MSTORE ADD SWAP9 ADD SWAP3 ADD DUP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 PUSH2 0xA7D JUMP JUMPDEST SWAP6 POP SWAP4 POP SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP6 RETURNDATACOPY PUSH2 0xB03 DUP2 DUP6 PUSH2 0x1ECA JUMP JUMPDEST DUP4 ADD SWAP3 PUSH1 0x80 DUP2 DUP6 SUB SLT PUSH2 0x1E1 JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x1E1 JUMPI DUP6 PUSH2 0xB30 SWAP2 DUP5 ADD PUSH2 0x2185 JUMP JUMPDEST SWAP2 PUSH1 0x20 SWAP6 DUP7 DUP3 ADD MLOAD DUP6 DUP2 GT PUSH2 0x1E1 JUMPI DUP3 ADD DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x1E1 JUMPI DUP1 MLOAD SWAP1 PUSH2 0xB58 DUP3 PUSH2 0x1EED JUMP JUMPDEST SWAP9 PUSH2 0xB65 DUP7 MLOAD SWAP11 DUP12 PUSH2 0x1ECA JUMP JUMPDEST DUP3 DUP11 MSTORE DUP1 DUP11 ADD DUP2 PUSH1 0x60 DUP1 SWAP6 MUL DUP5 ADD ADD SWAP3 DUP6 DUP5 GT PUSH2 0x1E1 JUMPI DUP3 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0xBC5 JUMPI POP POP POP POP POP DUP3 DUP3 ADD MLOAD DUP6 DUP2 GT PUSH2 0x1E1 JUMPI DUP2 PUSH2 0xBA3 SWAP2 DUP5 ADD PUSH2 0x222C JUMP JUMPDEST SWAP5 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x1E1 JUMPI PUSH2 0xBBA SWAP3 ADD PUSH2 0x222C JUMP JUMPDEST SWAP2 SWAP5 SWAP3 SWAP2 SWAP4 DUP7 PUSH2 0xA48 JUMP JUMPDEST DUP5 DUP3 DUP8 SUB SLT PUSH2 0x1E1 JUMPI DUP8 MLOAD SWAP1 PUSH2 0xBDA DUP3 PUSH2 0x1E62 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1E1 JUMPI DUP3 MSTORE DUP4 DUP4 ADD MLOAD SWAP1 DUP13 DUP3 AND DUP3 SUB PUSH2 0x1E1 JUMPI DUP3 DUP6 SWAP3 DUP4 DUP10 SWAP6 ADD MSTORE PUSH2 0xC08 DUP12 DUP7 ADD PUSH2 0x2079 JUMP JUMPDEST DUP12 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0xB80 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP2 MLOAD SWAP1 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS SWAP1 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x9AE JUMPI SWAP2 PUSH2 0x1DD SWAP3 PUSH0 SWAP3 PUSH2 0xCC2 JUMPI JUMPDEST POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xCDF SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xCD7 DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2203 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0xCAF JUMP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1E1 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH2 0xD64 SWAP3 PUSH2 0xD06 PUSH2 0x1E1C JUMP JUMPDEST DUP4 MLOAD PUSH32 0xBEABACC800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xDEF JUMPI PUSH2 0xDB5 JUMPI JUMPDEST PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xDE7 JUMPI JUMPDEST DUP2 PUSH2 0xDCE PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1E1 JUMPI PUSH2 0xDE1 PUSH1 0x20 SWAP3 PUSH2 0x2079 JUMP JUMPDEST POP PUSH2 0xDAB JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xDC1 JUMP JUMPDEST POP MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1E1 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1E1 JUMPI PUSH2 0xE29 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x1F05 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1E1 JUMPI PUSH2 0xE3E DUP2 PUSH2 0x2023 JUMP JUMPDEST PUSH2 0xFB4 JUMPI DUP3 JUMPDEST PUSH2 0xE4C PUSH2 0x28F8 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x3 EQ PUSH2 0xF5F JUMPI DUP1 PUSH1 0x4 EQ PUSH2 0xED8 JUMPI DUP1 PUSH1 0x1 EQ PUSH2 0xE95 JUMPI PUSH1 0x2 EQ PUSH2 0xE7F JUMPI PUSH1 0x51 DUP5 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x20 SWAP4 POP SWAP1 PUSH2 0xE8D SWAP2 PUSH2 0x3012 JUMP JUMPDEST SWAP1 JUMPDEST MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 SWAP3 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0xEC5 JUMPI POP PUSH1 0x20 SWAP3 PUSH2 0xEBF SWAP2 PUSH2 0x2B84 JUMP JUMPDEST SWAP1 PUSH2 0xE8F JUMP JUMPDEST PUSH1 0x11 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP3 PUSH0 SWAP2 SWAP1 PUSH8 0xDE0B6B3A7640000 JUMPDEST DUP6 MLOAD DUP5 LT ISZERO PUSH2 0xF23 JUMPI PUSH2 0xF1B PUSH1 0x1 SWAP2 PUSH2 0xF15 PUSH2 0xF03 DUP8 DUP8 PUSH2 0x20BB JUMP JUMPDEST MLOAD PUSH2 0xF0E DUP9 DUP12 PUSH2 0x20BB JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x2BA2 JUMP JUMPDEST SWAP1 PUSH2 0x2C2D JUMP JUMPDEST SWAP4 ADD SWAP3 PUSH2 0xEE7 JUMP JUMPDEST SWAP3 POP SWAP4 POP POP DUP1 ISZERO PUSH2 0xF38 JUMPI PUSH1 0x20 SWAP3 POP SWAP1 PUSH2 0xE8F JUMP JUMPDEST DUP3 PUSH32 0x2654368900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP SWAP3 PUSH0 SWAP2 SWAP1 PUSH8 0xDE0B6B3A7640000 JUMPDEST DUP6 MLOAD DUP5 LT ISZERO PUSH2 0xF23 JUMPI PUSH8 0xDE0B6B3A7640000 PUSH2 0xFAB PUSH1 0x1 SWAP3 PUSH2 0xFA5 PUSH2 0xF93 DUP9 DUP9 PUSH2 0x20BB JUMP JUMPDEST MLOAD PUSH2 0xF9E DUP10 DUP13 PUSH2 0x20BB JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x2E3F JUMP JUMPDEST SWAP1 PUSH2 0x2B71 JUMP JUMPDEST DIV SWAP4 ADD SWAP3 PUSH2 0xF6E JUMP JUMPDEST PUSH1 0x3 PUSH2 0xE44 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP2 MLOAD SWAP2 DUP3 PUSH0 DUP4 SLOAD PUSH2 0xFDD DUP2 PUSH2 0x2041 JUMP JUMPDEST SWAP1 DUP2 DUP5 MSTORE PUSH1 0x20 SWAP6 PUSH1 0x1 SWAP2 DUP8 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x107C JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1020 JUMPI JUMPDEST POP POP POP PUSH2 0x1DD SWAP3 SWAP2 PUSH2 0x1011 SWAP2 SUB DUP6 PUSH2 0x1ECA JUMP JUMPDEST MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1DF7 JUMP JUMPDEST PUSH0 SWAP1 DUP2 MSTORE DUP7 SWAP4 POP SWAP2 SWAP1 PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B JUMPDEST DUP3 DUP5 LT PUSH2 0x1064 JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x1011 PUSH2 0x1DD PUSH2 0xFFE JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x104B JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 DUP3 ADD MSTORE SWAP4 ISZERO ISZERO PUSH1 0x5 SHL DUP7 ADD SWAP1 SWAP4 ADD SWAP4 POP DUP5 SWAP3 POP PUSH2 0x1011 SWAP2 POP PUSH2 0x1DD SWAP1 POP PUSH2 0xFFE JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP2 POP CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH2 0x114C PUSH32 0x0 PUSH2 0x2C4F JUMP JUMPDEST SWAP3 PUSH2 0x1176 PUSH32 0x0 PUSH2 0x2D81 JUMP JUMPDEST DUP2 MLOAD SWAP3 PUSH1 0x20 DUP5 ADD SWAP1 DUP5 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x1207 JUMPI POP SWAP2 PUSH2 0x11E7 SWAP2 PUSH2 0x1DD SWAP5 SWAP4 DUP3 MSTORE PUSH0 DUP5 MSTORE PUSH2 0x11DA DUP3 MLOAD SWAP8 DUP9 SWAP8 PUSH32 0xF00000000000000000000000000000000000000000000000000000000000000 DUP10 MSTORE DUP1 PUSH1 0x20 DUP11 ADD MSTORE DUP9 ADD SWAP1 PUSH2 0x1DF7 JUMP JUMPDEST SWAP2 DUP7 DUP4 SUB SWAP1 DUP8 ADD MSTORE PUSH2 0x1DF7 JUMP JUMPDEST SWAP1 CHAINID PUSH1 0x60 DUP6 ADD MSTORE ADDRESS PUSH1 0x80 DUP6 ADD MSTORE PUSH0 PUSH1 0xA0 DUP6 ADD MSTORE DUP4 DUP3 SUB PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x1FA7 JUMP JUMPDEST PUSH1 0x41 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP2 MLOAD SWAP1 PUSH32 0xF29486A100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 SWAP1 DUP2 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xC17 JUMPI PUSH0 SWAP3 PUSH2 0x12BE JUMPI JUMPDEST POP POP PUSH1 0x60 DUP3 DUP3 ADD MLOAD SWAP2 ADD MLOAD DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH2 0x12D4 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x841 JUMPI PUSH2 0x832 DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP3 DUP1 PUSH2 0x12A7 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x130D PUSH2 0x1E1C JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP3 PUSH1 0x3 NOT DUP5 DUP2 CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP5 GT PUSH2 0x1E1 JUMPI DUP4 CALLDATASIZE SUB ADD SLT PUSH2 0x1E1 JUMPI DUP4 MLOAD SWAP2 PUSH2 0x135E DUP4 PUSH2 0x1E92 JUMP JUMPDEST DUP1 DUP5 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1E1 JUMPI DUP4 MSTORE PUSH1 0x24 DUP2 ADD CALLDATALOAD DUP7 DUP5 ADD MSTORE PUSH1 0x44 DUP2 ADD CALLDATALOAD DUP3 DUP2 GT PUSH2 0x1E1 JUMPI PUSH2 0x1391 SWAP1 DUP6 CALLDATASIZE SWAP2 DUP5 ADD ADD PUSH2 0x1F05 JUMP JUMPDEST DUP6 DUP5 ADD MSTORE PUSH1 0x64 DUP2 ADD CALLDATALOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x84 DUP2 ADD CALLDATALOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA4 DUP2 ADD CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1E1 JUMPI PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC4 DUP2 ADD CALLDATALOAD SWAP1 DUP3 DUP3 GT PUSH2 0x1E1 JUMPI ADD SWAP3 CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0x1E1 JUMPI DUP1 DUP5 ADD CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x1207 JUMPI POP DUP4 MLOAD SWAP1 PUSH2 0x140C DUP7 PUSH1 0x1F NOT PUSH1 0x1F DUP5 ADD AND ADD DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP1 DUP3 MSTORE CALLDATASIZE PUSH1 0x24 DUP3 DUP7 ADD ADD GT PUSH2 0x1E1 JUMPI DUP6 DUP2 PUSH0 SWAP3 PUSH1 0x24 PUSH2 0xE8D SWAP8 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x143B PUSH2 0x2755 JUMP JUMPDEST PUSH2 0x22D1 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP3 PUSH2 0x145E PUSH2 0x1E1C JUMP JUMPDEST PUSH1 0x44 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP6 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP4 PUSH32 0xF7888AEC00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS SWAP1 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xDEF JUMPI PUSH0 SWAP3 PUSH2 0x14E5 JUMPI JUMPDEST POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP DUP3 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x150D JUMPI JUMPDEST PUSH2 0x14FD DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1E1 JUMPI MLOAD SWAP1 DUP4 PUSH2 0x14DE JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x14F3 JUMP JUMPDEST POP CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH32 0x18E79A2000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH8 0x16345785D8A0000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI CALLER PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD SWAP1 SWAP2 SSTORE STOP JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH2 0x15C8 CALLDATASIZE PUSH2 0x1F65 JUMP JUMPDEST SWAP4 SWAP2 SWAP5 PUSH2 0x15D3 PUSH2 0x2755 JUMP JUMPDEST MLOAD SWAP4 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP5 AND SWAP3 LOG3 STOP JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP1 MLOAD PUSH1 0x5 SLOAD SWAP1 SWAP2 DUP3 PUSH0 PUSH2 0x1618 DUP5 PUSH2 0x2041 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 SWAP5 PUSH1 0x1 SWAP1 DUP7 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x16A5 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x164A JUMPI JUMPDEST POP POP PUSH2 0x1DD SWAP3 SWAP2 PUSH2 0x1011 SWAP2 SUB DUP6 PUSH2 0x1ECA JUMP JUMPDEST SWAP1 DUP6 SWAP3 POP PUSH1 0x5 PUSH0 MSTORE PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 SWAP2 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x168D JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x1011 PUSH2 0x1638 JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x1677 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 DUP3 ADD MSTORE SWAP3 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD SWAP1 SWAP3 ADD SWAP3 POP DUP4 SWAP2 POP PUSH2 0x1011 SWAP1 POP PUSH2 0x1638 JUMP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x1703 DUP3 PUSH2 0x1E62 JUMP JUMPDEST PUSH1 0x60 DUP3 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP4 ADD SWAP2 PUSH1 0x60 DUP4 MSTORE DUP2 DUP5 ADD SWAP3 PUSH1 0x60 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 PUSH32 0x0 AND SWAP1 DUP5 MLOAD PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1897 JUMPI SWAP1 PUSH0 SWAP3 SWAP2 DUP4 SWAP2 PUSH2 0x187D JUMPI JUMPDEST POP DUP9 MSTORE PUSH1 0x24 DUP7 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x7E361BDE00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1873 JUMPI PUSH0 SWAP2 PUSH2 0x185A JUMPI JUMPDEST POP DUP2 SWAP6 SWAP3 SWAP6 MSTORE PUSH2 0x17E9 PUSH2 0x28F8 JUMP JUMPDEST DUP5 MSTORE DUP3 MLOAD SWAP5 DUP1 DUP7 MSTORE PUSH1 0x80 DUP7 ADD SWAP3 MLOAD SWAP3 PUSH1 0x60 DUP3 DUP9 ADD MSTORE DUP4 MLOAD DUP1 SWAP2 MSTORE DUP2 PUSH1 0xA0 DUP9 ADD SWAP5 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1844 JUMPI DUP9 DUP1 PUSH2 0x1DD DUP11 DUP11 PUSH2 0x1833 DUP12 DUP12 MLOAD PUSH1 0x1F NOT SWAP4 DUP5 DUP9 DUP5 SUB ADD SWAP1 DUP9 ADD MSTORE PUSH2 0x1FA7 JUMP JUMPDEST SWAP2 MLOAD SWAP1 DUP5 DUP4 SUB ADD PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x1FA7 JUMP JUMPDEST DUP4 MLOAD DUP11 AND DUP7 MSTORE SWAP5 DUP2 ADD SWAP5 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x180D JUMP JUMPDEST PUSH2 0x186E SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x89D DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST PUSH2 0x17DB JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x1891 SWAP2 POP RETURNDATASIZE DUP1 DUP6 DUP4 RETURNDATACOPY PUSH2 0xCD7 DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP11 PUSH2 0x1798 JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 PUSH2 0xE8D PUSH2 0x27C0 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH8 0x29A2241AF62C0000 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH2 0x15C8 CALLDATASIZE PUSH2 0x1F65 JUMP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH0 PUSH1 0x84 PUSH2 0x197B CALLDATASIZE PUSH2 0x1F65 JUMP JUMPDEST DUP7 MLOAD PUSH32 0x15DACBEA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP9 DUP2 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x24 DUP10 ADD MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP9 ADD MSTORE PUSH1 0x64 DUP8 ADD MSTORE DUP6 SWAP3 DUP4 SWAP2 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xDEF JUMPI PUSH2 0xDB5 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 PUSH2 0xE8D PUSH2 0x20CF JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1E1 JUMPI PUSH2 0x1A5B SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0x1F05 JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD SWAP3 PUSH2 0x1A77 PUSH2 0x1A70 DUP6 PUSH1 0x44 CALLDATALOAD SWAP4 PUSH2 0x20BB JUMP JUMPDEST MLOAD SWAP5 PUSH2 0x25CA JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP2 DUP4 GT ISZERO PUSH2 0x1C5D JUMPI PUSH1 0x2 JUMPDEST DUP1 PUSH1 0x3 EQ PUSH2 0x1BE7 JUMPI DUP1 PUSH1 0x4 EQ PUSH2 0x1B4E JUMPI DUP1 PUSH1 0x1 EQ PUSH2 0x1B0C JUMPI PUSH1 0x2 EQ PUSH2 0x1AB7 JUMPI PUSH1 0x51 DUP6 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 DUP2 ISZERO PUSH2 0x1AE6 JUMPI POP PUSH2 0xE8D SWAP3 PUSH1 0x20 SWAP6 SWAP3 PUSH2 0xF15 SWAP3 PUSH15 0xC097CE7BC90715B34B9F0FFFFFFFFF DIV ADD SWAP1 PUSH2 0x2BA2 JUMP JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP DUP1 SWAP3 SWAP4 SWAP5 SWAP2 POP ISZERO PUSH2 0x1B3B JUMPI POP SWAP3 PUSH2 0xF15 PUSH2 0xE8D SWAP3 PUSH1 0x20 SWAP6 PUSH15 0xC097CE7BC90715B34B9F1000000000 DIV SWAP1 PUSH2 0x2BA2 JUMP JUMPDEST PUSH1 0x12 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP2 SWAP3 SWAP4 SWAP1 DUP1 PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH0 SWAP3 JUMPDEST PUSH2 0x1BA7 JUMPI JUMPDEST POP POP POP DUP2 ISZERO PUSH2 0x1B81 JUMPI POP SWAP3 PUSH2 0xF15 PUSH2 0xE8D SWAP3 PUSH1 0x20 SWAP6 SWAP1 PUSH2 0x2BA2 JUMP JUMPDEST PUSH32 0x2654368900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 SWAP2 SWAP4 PUSH8 0xDE0B6B3A7640000 MLOAD DUP6 LT ISZERO PUSH2 0x1BE1 JUMPI SWAP1 DUP3 PUSH2 0x1BD9 DUP2 SWAP4 PUSH2 0xF15 PUSH2 0x1BCF DUP10 DUP7 PUSH2 0x20BB JUMP JUMPDEST MLOAD PUSH2 0xF0E DUP11 PUSH2 0x2086 JUMP JUMPDEST SWAP6 ADD SWAP3 PUSH2 0x1B61 JUMP JUMPDEST SWAP4 PUSH2 0x1B66 JUMP JUMPDEST POP SWAP2 SWAP3 SWAP4 SWAP1 DUP1 PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH0 SWAP3 JUMPDEST PUSH2 0x1C19 JUMPI POP POP POP DUP2 ISZERO PUSH2 0x1B81 JUMPI POP SWAP3 PUSH2 0xF15 PUSH2 0xE8D SWAP3 PUSH1 0x20 SWAP6 SWAP1 PUSH2 0x2BA2 JUMP JUMPDEST SWAP1 SWAP2 SWAP4 PUSH8 0xDE0B6B3A7640000 MLOAD DUP6 LT ISZERO PUSH2 0x1BE1 JUMPI SWAP1 DUP3 PUSH8 0xDE0B6B3A7640000 PUSH2 0x1C54 DUP3 SWAP5 PUSH2 0xFA5 PUSH2 0x1C4A DUP11 DUP8 PUSH2 0x20BB JUMP JUMPDEST MLOAD PUSH2 0xF9E DUP12 PUSH2 0x2086 JUMP JUMPDEST DIV SWAP6 ADD SWAP3 PUSH2 0x1BFA JUMP JUMPDEST DUP2 PUSH2 0x1A85 JUMP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1E1 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH2 0xD64 SWAP3 PUSH2 0x1C83 PUSH2 0x1E1C JUMP JUMPDEST DUP4 MLOAD PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP1 MLOAD PUSH1 0x3 SLOAD SWAP1 SWAP2 DUP3 PUSH0 PUSH2 0x1D04 DUP5 PUSH2 0x2041 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 SWAP5 PUSH1 0x1 SWAP1 DUP7 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x16A5 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1D35 JUMPI POP POP PUSH2 0x1DD SWAP3 SWAP2 PUSH2 0x1011 SWAP2 SUB DUP6 PUSH2 0x1ECA JUMP JUMPDEST SWAP1 DUP6 SWAP3 POP PUSH1 0x3 PUSH0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP2 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x1D78 JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x1011 PUSH2 0x1638 JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x1D62 JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x1E1 JUMPI PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP3 EQ DUP2 MSTORE RETURN JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1E1 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1E1 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1E7E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0xE0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1E7E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1E7E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1E7E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1E7E JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x1F1F DUP2 PUSH2 0x1EED JUMP JUMPDEST SWAP4 PUSH2 0x1F2D PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1ECA JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x1E1 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1F56 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1F48 JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x1E1 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x1E1 JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x1E1 JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1FC6 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1FB8 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1FF9 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1FEB JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x202D JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x206F JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x205B JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x2050 JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x1E1 JUMPI JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 MLOAD DUP2 LT ISZERO PUSH2 0x20A7 JUMPI PUSH1 0x5 SHL PUSH8 0xDE0B6B3A7640020 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x20A7 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xE4DC2AA400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x217A JUMPI PUSH0 SWAP2 PUSH2 0x214B JUMPI POP SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x2172 JUMPI JUMPDEST DUP2 PUSH2 0x2166 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1E1 JUMPI MLOAD SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2159 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x1E1 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x21A0 DUP2 PUSH2 0x1EED JUMP JUMPDEST SWAP4 PUSH2 0x21AE PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1ECA JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x1E1 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x21D7 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1E1 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x21C9 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x1E1 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1E1 JUMPI PUSH2 0x2229 SWAP3 ADD PUSH2 0x2185 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x1E1 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x2247 DUP2 PUSH2 0x1EED JUMP JUMPDEST SWAP4 PUSH2 0x2255 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1ECA JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x1E1 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x227E JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x2270 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SLT PUSH2 0x1E1 JUMPI DUP1 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP2 GT PUSH2 0x1E1 JUMPI DUP2 PUSH2 0x22BA SWAP2 DUP5 ADD PUSH2 0x222C JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x1E1 JUMPI PUSH2 0x2229 SWAP3 ADD PUSH2 0x222C JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 MLOAD PUSH2 0x22E8 PUSH1 0x60 DUP4 ADD SWAP2 DUP3 MLOAD SWAP1 PUSH2 0x20BB JUMP JUMPDEST MLOAD SWAP3 MLOAD SWAP2 PUSH2 0x22FC PUSH1 0x80 DUP3 ADD SWAP4 DUP5 MLOAD SWAP1 PUSH2 0x20BB JUMP JUMPDEST MLOAD SWAP2 DUP2 MLOAD PUSH2 0x2309 DUP2 PUSH2 0x2023 JUMP JUMPDEST PUSH2 0x2312 DUP2 PUSH2 0x2023 JUMP JUMPDEST PUSH2 0x23D1 JUMPI PUSH2 0x232C PUSH2 0x2325 PUSH1 0x20 SWAP3 MLOAD PUSH2 0x25CA JUMP JUMPDEST SWAP5 MLOAD PUSH2 0x25CA JUMP JUMPDEST SWAP2 ADD MLOAD PUSH8 0xDE0B6B3A7640000 SWAP5 DUP6 PUSH2 0x2343 DUP3 PUSH2 0x2B3D JUMP JUMPDEST DIV DUP3 GT PUSH2 0x23A9 JUMPI PUSH2 0x2357 PUSH2 0x235D SWAP3 DUP3 PUSH2 0x2B30 JUMP JUMPDEST SWAP1 PUSH2 0x3012 JUMP JUMPDEST DUP5 DUP5 MUL SWAP4 DUP1 DUP6 DIV DUP7 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2395 JUMPI PUSH2 0x237E PUSH2 0x2384 SWAP3 PUSH2 0x2391 SWAP6 PUSH2 0x2B84 JUMP JUMPDEST SWAP1 PUSH2 0x2BA2 JUMP JUMPDEST DUP4 DUP2 DUP2 SUB SWAP2 LT MUL SWAP1 PUSH2 0x2B71 JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x340A453300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x23EB PUSH2 0x23E4 PUSH1 0x20 SWAP3 SWAP6 SWAP4 SWAP5 SWAP6 MLOAD PUSH2 0x25CA JUMP JUMPDEST SWAP3 MLOAD PUSH2 0x25CA JUMP JUMPDEST SWAP3 ADD MLOAD PUSH8 0xDE0B6B3A7640000 PUSH2 0x2400 DUP6 PUSH2 0x2B3D JUMP JUMPDEST DIV DUP2 GT PUSH2 0x245A JUMPI DUP4 SUB SWAP1 DUP4 DUP3 GT PUSH2 0x2395 JUMPI PUSH2 0x2421 PUSH2 0x237E SWAP3 PUSH2 0x2427 SWAP6 PUSH2 0x3012 JUMP JUMPDEST SWAP3 PUSH2 0x3012 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21F494C589C0000 DUP2 ADD SWAP1 DUP2 GT PUSH2 0x2395 JUMPI PUSH2 0x2229 SWAP2 PUSH2 0x2C2D JUMP JUMPDEST PUSH32 0x64590B9F00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x1A0 SWAP2 DUP2 SWAP1 SUB DUP3 DUP2 SLT PUSH2 0x1E1 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x140 SWAP3 DUP4 DUP6 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP7 DUP6 LT DUP3 DUP7 GT OR PUSH2 0x1E7E JUMPI PUSH1 0x80 SGT PUSH2 0x1E1 JUMPI PUSH2 0x1C0 DUP7 ADD SWAP1 DUP2 GT DUP5 DUP3 LT OR PUSH2 0x1E7E JUMPI PUSH1 0x40 MSTORE PUSH2 0x24D4 DUP2 PUSH2 0x2079 JUMP JUMPDEST DUP4 MSTORE PUSH2 0x24E2 PUSH1 0x20 DUP3 ADD PUSH2 0x2079 JUMP JUMPDEST SWAP3 PUSH2 0x160 SWAP4 DUP5 DUP8 ADD MSTORE PUSH2 0x24F7 PUSH1 0x40 DUP4 ADD PUSH2 0x2079 JUMP JUMPDEST SWAP3 PUSH2 0x180 SWAP4 DUP5 DUP9 ADD MSTORE PUSH2 0x250C PUSH1 0x60 DUP5 ADD PUSH2 0x2079 JUMP JUMPDEST SWAP1 DUP8 ADD MSTORE DUP6 MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1E1 JUMPI PUSH1 0x80 DUP7 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1E1 JUMPI PUSH2 0x259D SWAP5 PUSH2 0x2593 SWAP2 PUSH1 0xA0 DUP10 ADD MSTORE PUSH2 0x2587 PUSH2 0x120 SWAP8 PUSH2 0x257B DUP10 DUP8 ADD PUSH2 0x2079 JUMP JUMPDEST PUSH1 0xC0 DUP12 ADD MSTORE DUP6 ADD PUSH2 0x2079 JUMP JUMPDEST PUSH1 0xE0 DUP10 ADD MSTORE DUP4 ADD PUSH2 0x2079 JUMP JUMPDEST SWAP1 DUP7 ADD MSTORE ADD PUSH2 0x2079 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x1E1 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1E1 JUMPI PUSH2 0x2229 SWAP3 ADD PUSH2 0x222C JUMP JUMPDEST DUP1 PUSH2 0x25F4 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x2621 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x264E JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x3 DUP2 SUB PUSH2 0x267B JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP2 SUB PUSH2 0x26A8 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x5 DUP2 SUB PUSH2 0x26D5 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x6 DUP2 SUB PUSH2 0x2702 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x7 SUB PUSH2 0x272D JUMPI PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0xC1AB6DC100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x2794 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND ADDRESS EQ DUP1 PUSH2 0x28CF JUMPI JUMPDEST ISZERO PUSH2 0x2828 JUMPI PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP3 MSTORE PUSH32 0x0 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1E7E JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST POP PUSH32 0x0 CHAINID EQ PUSH2 0x27FF JUMP JUMPDEST PUSH32 0x0 PUSH2 0x2922 DUP2 PUSH2 0x1EED JUMP JUMPDEST SWAP1 PUSH2 0x2930 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH2 0x293C DUP2 PUSH2 0x1EED JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x20 DUP5 ADD SWAP2 ADD CALLDATASIZE DUP3 CALLDATACOPY DUP3 MLOAD ISZERO PUSH2 0x20A7 JUMPI PUSH32 0x0 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x1 LT ISZERO PUSH2 0x20A7 JUMPI PUSH32 0x0 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2B2C JUMPI DUP2 MLOAD PUSH1 0x2 LT ISZERO PUSH2 0x20A7 JUMPI PUSH32 0x0 PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x2B2C JUMPI DUP2 MLOAD PUSH1 0x3 LT ISZERO PUSH2 0x20A7 JUMPI PUSH32 0x0 PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x4 SWAP1 DUP2 DUP2 GT ISZERO PUSH2 0x2B27 JUMPI DUP3 MLOAD DUP3 LT ISZERO PUSH2 0x2B14 JUMPI PUSH32 0x0 PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x2B27 JUMPI DUP3 MLOAD PUSH1 0x5 LT ISZERO PUSH2 0x2B14 JUMPI PUSH32 0x0 PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x2B27 JUMPI DUP3 MLOAD PUSH1 0x6 LT ISZERO PUSH2 0x2B14 JUMPI PUSH1 0x7 SWAP1 PUSH32 0x0 PUSH1 0xE0 DUP6 ADD MSTORE GT PUSH2 0x2ACC JUMPI POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x7 LT ISZERO PUSH2 0x2B01 JUMPI POP PUSH32 0x0 PUSH2 0x100 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x32 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x32 DUP3 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP POP SWAP1 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x2395 JUMPI JUMP JUMPDEST SWAP1 PUSH8 0x429D069189E0000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2395 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x2710 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2395 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x2395 JUMPI JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2B8E JUMPI DIV SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 SUB PUSH2 0x2BB9 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x2BD4 JUMPI POP POP DUP1 PUSH2 0x2229 SWAP2 PUSH2 0x2C2D JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x2BF8 JUMPI POP POP PUSH2 0x2BF2 DUP2 PUSH2 0x2229 SWAP3 PUSH2 0x2C2D JUMP JUMPDEST DUP1 PUSH2 0x2C2D JUMP JUMPDEST PUSH2 0x2C02 SWAP2 SWAP3 PUSH2 0x308F JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH2 0x2C0E DUP4 PUSH2 0x2B5A JUMP JUMPDEST SWAP2 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH1 0x1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x2395 JUMPI PUSH2 0x2229 SWAP2 PUSH2 0x2B30 JUMP JUMPDEST SWAP1 PUSH2 0x2C37 SWAP2 PUSH2 0x2B71 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x2CA3 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x2C7B JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x2C71 DUP4 PUSH2 0x1EAE JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH32 0xB3512B0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH0 SLOAD SWAP2 PUSH2 0x2CB5 DUP4 PUSH2 0x2041 JUMP JUMPDEST DUP1 DUP4 MSTORE SWAP3 PUSH1 0x20 SWAP1 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x2D3E JUMPI POP PUSH1 0x1 EQ PUSH2 0x2CE0 JUMPI JUMPDEST POP POP PUSH2 0x2229 SWAP3 POP SUB DUP3 PUSH2 0x1ECA JUMP JUMPDEST SWAP2 POP SWAP3 PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x2D26 JUMPI POP PUSH2 0x2229 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x2CD2 JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x2D0B JUMP JUMPDEST SWAP1 POP PUSH1 0x20 SWAP4 POP PUSH2 0x2229 SWAP6 SWAP3 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP2 POP AND DUP3 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x2CD2 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x2DA3 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x2C7B JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x2C71 DUP4 PUSH2 0x1EAE JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD PUSH2 0x2DB8 DUP2 PUSH2 0x2041 JUMP JUMPDEST DUP1 DUP5 MSTORE SWAP4 PUSH1 0x20 SWAP2 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x2D3E JUMPI POP PUSH1 0x1 EQ PUSH2 0x2DE0 JUMPI POP POP PUSH2 0x2229 SWAP3 POP SUB DUP3 PUSH2 0x1ECA JUMP JUMPDEST SWAP2 POP SWAP3 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x2E27 JUMPI POP PUSH2 0x2229 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x2CD2 JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x2E0C JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 DUP1 DUP4 SUB PUSH2 0x2E56 JUMPI POP SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 SWAP1 PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x2E73 JUMPI POP POP DUP1 PUSH2 0x2391 SWAP2 PUSH2 0x2B71 JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x2E97 JUMPI POP PUSH2 0x2E90 DUP3 PUSH2 0x2391 SWAP4 PUSH2 0x2B71 JUMP JUMPDEST DIV DUP1 PUSH2 0x2B71 JUMP JUMPDEST SWAP1 POP PUSH2 0x2EA2 SWAP2 PUSH2 0x308F JUMP JUMPDEST PUSH2 0x2EAB DUP2 PUSH2 0x2B5A JUMP JUMPDEST PUSH1 0x1 PUSH0 NOT SWAP4 DUP5 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 PUSH1 0x1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x2395 JUMPI DUP2 LT ISZERO PUSH2 0x2ED3 JUMPI POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SUB ADD SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP5 GT PUSH2 0x2F5C JUMPI SWAP2 PUSH1 0x20 SWAP4 PUSH1 0x80 SWAP3 PUSH1 0xFF PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND DUP7 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE DUP3 DUP1 MSTORE PUSH1 0x1 GAS STATICCALL ISZERO PUSH2 0x217A JUMPI PUSH0 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x2F52 JUMPI SWAP1 PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 PUSH1 0x1 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP POP POP PUSH0 SWAP2 PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x202D JUMPI DUP1 PUSH2 0x2F79 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x2FA9 JUMPI PUSH32 0xF645EEDF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x2FDD JUMPI POP PUSH32 0xFCE698F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x3 EQ PUSH2 0x2FE7 JUMPI POP JUMP JUMPDEST PUSH32 0xD78BCE0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x3043 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2395 JUMPI PUSH1 0x1 SWAP1 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x2B8E JUMPI PUSH15 0xC097CE7BC90715B34B9F1000000000 SDIV SWAP1 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2B8E JUMPI SDIV SWAP1 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x39B8 JUMPI DUP2 ISZERO PUSH2 0x39B2 JUMPI DUP2 PUSH1 0xFF SHR PUSH2 0x398A JUMPI PUSH24 0xBCE5086492111AEA88F4BB1CA6BCF584181EA8059F76532 DUP2 LT ISZERO PUSH2 0x3962 JUMPI DUP2 PUSH8 0xC7D713B49DA0000 SLT DUP1 PUSH2 0x3951 JUMPI JUMPDEST ISZERO PUSH2 0x35EE JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH15 0xC097CE7BC90715B34B9F1000000000 SWAP1 PUSH2 0x3128 SWAP1 DUP5 MUL DUP3 DUP2 ADD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F68318436F8EA4CB460F000000000 ADD DUP4 MUL PUSH2 0x3085 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV DUP4 DUP6 DUP3 MUL SDIV SWAP2 DUP5 DUP7 DUP5 MUL SDIV SWAP4 DUP6 DUP8 DUP7 MUL SDIV SWAP6 DUP1 DUP9 DUP9 MUL SDIV SWAP8 DUP9 MUL SDIV PUSH1 0xF SWAP1 SDIV SWAP7 PUSH1 0xD SWAP1 SDIV SWAP6 PUSH1 0xB SWAP1 SDIV SWAP5 PUSH1 0x9 SWAP1 SDIV SWAP4 PUSH1 0x7 SWAP1 SDIV SWAP3 PUSH1 0x5 SWAP1 SDIV SWAP2 PUSH1 0x3 SWAP1 SDIV ADD ADD ADD ADD ADD ADD ADD PUSH1 0x1 SHL SWAP2 DUP1 DUP3 DUP2 DUP6 SMOD MUL SDIV SWAP3 SDIV MUL ADD PUSH8 0xDE0B6B3A7640000 SWAP1 JUMPDEST SDIV PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC702BD3A30FC0000 DUP2 DUP2 SGT ISZERO DUP1 PUSH2 0x35DB JUMPI JUMPDEST ISZERO PUSH2 0x35B3 JUMPI DUP2 SWAP1 DUP3 SLT ISZERO DUP1 PUSH2 0x35A0 JUMPI JUMPDEST ISZERO PUSH2 0x3578 JUMPI PUSH0 SWAP2 PUSH0 DUP2 SLT PUSH2 0x3569 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH9 0x6F05B59D3B2000000 DUP2 SLT PUSH2 0x3506 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90FA4A62C4E000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP3 JUMPDEST MUL DUP2 SWAP1 PUSH9 0xAD78EBC5AC62000000 DUP2 SLT ISZERO PUSH2 0x34CD JUMPI JUMPDEST PUSH9 0x56BC75E2D631000000 DUP2 SLT ISZERO PUSH2 0x3493 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B18800000 DUP2 SLT ISZERO PUSH2 0x345B JUMPI JUMPDEST PUSH9 0x15AF1D78B58C400000 DUP2 SLT ISZERO PUSH2 0x3423 JUMPI JUMPDEST PUSH9 0xAD78EBC5AC6200000 DUP2 SLT ISZERO PUSH2 0x33EC JUMPI JUMPDEST DUP3 DUP2 SLT ISZERO PUSH2 0x33B5 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B1880000 DUP2 SLT ISZERO PUSH2 0x337E JUMPI JUMPDEST PUSH9 0x15AF1D78B58C40000 DUP2 SLT ISZERO PUSH2 0x3347 JUMPI JUMPDEST PUSH1 0x2 DUP4 DUP3 DUP1 MUL SDIV SDIV PUSH1 0x3 DUP5 DUP4 DUP4 MUL SDIV SDIV PUSH1 0x4 DUP6 DUP5 DUP4 MUL SDIV SDIV DUP6 PUSH1 0x5 DUP2 DUP7 DUP5 MUL SDIV SDIV PUSH1 0x6 DUP3 DUP8 DUP4 MUL SDIV SDIV PUSH1 0x7 DUP4 DUP9 DUP4 MUL SDIV SDIV SWAP1 PUSH1 0x8 DUP5 DUP10 DUP5 MUL SDIV SDIV SWAP3 PUSH1 0x9 DUP6 DUP11 DUP7 MUL SDIV SDIV SWAP6 PUSH1 0xA DUP7 DUP12 DUP10 MUL SDIV SDIV SWAP8 PUSH1 0xB DUP8 DUP13 DUP12 MUL SDIV SDIV SWAP10 PUSH1 0xC DUP9 DUP14 DUP14 MUL SDIV SDIV SWAP12 ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD MUL SDIV MUL SDIV SWAP1 PUSH0 EQ PUSH2 0x2229 JUMPI PUSH2 0x2229 SWAP1 PUSH2 0x306B JUMP JUMPDEST PUSH9 0x6F5F1775788937937 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C0000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x32C8 JUMP JUMPDEST PUSH9 0x8F00F760A4B2DB55D PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E780000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x32B6 JUMP JUMPDEST PUSH9 0xEBC5FB41746121110 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x32A4 JUMP JUMPDEST PUSH9 0x280E60114EDB805D03 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x329B JUMP JUMPDEST PUSH10 0x127FA27722CC06CC5E2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x3289 JUMP JUMPDEST PUSH10 0x3F1FCE3DA636EA5CF850 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E7800000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x3277 JUMP JUMPDEST PUSH12 0x2DF0AB5A80A22C61AB5A700 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF000000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x3265 JUMP JUMPDEST PUSH15 0x1855144814A7FF805980FF0084000 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E000000 ADD PUSH2 0x3253 JUMP JUMPDEST PUSH9 0x3782DACE9D9000000 DUP2 SLT PUSH2 0x3556 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC87D2531627000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH12 0x1425982CF597CD205CEF7380 SWAP3 PUSH2 0x323E JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP3 PUSH1 0x1 SWAP3 PUSH2 0x323E JUMP JUMPDEST PUSH1 0x1 SWAP3 POP PUSH0 SUB SWAP1 POP PUSH1 0x64 PUSH2 0x31E2 JUMP JUMPDEST PUSH32 0xD4794EFD00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x31D3 JUMP JUMPDEST PUSH32 0xA2F9F7E300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x31C3 JUMP JUMPDEST DUP2 PUSH8 0xDE0B6B3A7640000 SWAP3 PUSH0 SWAP2 DUP5 DUP2 SLT PUSH2 0x393B JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH0 PUSH31 0x1600EF3172E58D2E933EC884FDE10064C63B5372D805E203C0000000000000 DUP3 SLT ISZERO PUSH2 0x3910 JUMPI JUMPDEST PUSH20 0x11798004D755D3C8BC8E03204CF44619E000000 DUP3 SLT ISZERO PUSH2 0x38EF JUMPI JUMPDEST DUP3 MUL SWAP1 DUP1 DUP4 MUL SWAP1 PUSH15 0x1855144814A7FF805980FF0084000 SWAP1 DUP2 DUP4 SLT ISZERO PUSH2 0x38CC JUMPI JUMPDEST POP POP PUSH12 0x2DF0AB5A80A22C61AB5A700 DUP1 DUP3 SLT ISZERO PUSH2 0x38AC JUMPI JUMPDEST POP PUSH10 0x3F1FCE3DA636EA5CF850 DUP1 DUP3 SLT ISZERO PUSH2 0x388C JUMPI JUMPDEST POP PUSH10 0x127FA27722CC06CC5E2 DUP1 DUP3 SLT ISZERO PUSH2 0x386C JUMPI JUMPDEST POP PUSH9 0x280E60114EDB805D03 DUP1 DUP3 SLT ISZERO PUSH2 0x384C JUMPI JUMPDEST POP PUSH9 0xEBC5FB41746121110 DUP1 DUP3 SLT ISZERO PUSH2 0x3835 JUMPI JUMPDEST POP PUSH9 0x8F00F760A4B2DB55D DUP1 DUP3 SLT ISZERO PUSH2 0x3815 JUMPI JUMPDEST POP PUSH9 0x6F5F1775788937937 DUP1 DUP3 SLT ISZERO PUSH2 0x37F5 JUMPI JUMPDEST POP PUSH9 0x6248F33704B286603 DUP1 DUP3 SLT ISZERO PUSH2 0x37D6 JUMPI JUMPDEST POP PUSH9 0x5C548670B9510E7AC DUP1 DUP3 SLT ISZERO PUSH2 0x37B7 JUMPI JUMPDEST POP PUSH2 0x3764 PUSH9 0x56BC75E2D63100000 SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP2 DUP4 ADD SWAP3 ADD MUL PUSH2 0x3085 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV SWAP2 PUSH1 0x3 PUSH1 0x5 PUSH1 0x7 PUSH1 0x9 PUSH1 0xB DUP9 DUP11 DUP10 MUL SDIV SWAP9 DUP1 DUP12 DUP12 MUL SDIV SWAP11 DUP12 MUL SDIV SDIV SWAP9 SDIV SWAP7 SDIV SWAP5 SDIV SWAP3 SDIV ADD ADD ADD ADD ADD PUSH1 0x1 SHL ADD SDIV SWAP1 PUSH0 EQ PUSH2 0x37B2 JUMPI PUSH0 SUB JUMPDEST MUL PUSH2 0x3197 JUMP JUMPDEST PUSH2 0x37AC JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0x56BC75E2D6310000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x3728 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0xAD78EBC5AC620000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x3714 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C40000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x3700 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B1880000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x36EC JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP1 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x36D8 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0xAD78EBC5AC6200000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x36C4 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C400000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x36B0 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B18800000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x369B JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x56BC75E2D631000000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x3686 JUMP JUMPDEST PUSH9 0xAD78EBC5AC62000000 SWAP3 POP PUSH10 0x21E19E0C9BAB2400000 MUL SDIV SWAP2 ADD SWAP1 PUSH0 DUP1 PUSH2 0x366E JUMP JUMPDEST SWAP1 PUSH12 0x1425982CF597CD205CEF7380 PUSH9 0x3782DACE9D9000000 SWAP2 SDIV SWAP2 ADD PUSH2 0x364D JUMP JUMPDEST POP PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP1 SDIV PUSH9 0x6F05B59D3B2000000 PUSH2 0x3630 JUMP JUMPDEST SWAP1 POP PUSH2 0x3947 SWAP2 POP PUSH2 0x306B JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x64 PUSH2 0x3603 JUMP JUMPDEST POP PUSH8 0xF43FC2C04EE0000 DUP3 SLT PUSH2 0x30D5 JUMP JUMPDEST PUSH32 0xD831731100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x22701E000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 RETURNDATACOPY 0xC0 GT DUP11 0xE1 PUSH29 0xF0ADBA7459B5C62781AC22ADB46F73C1467746703BA70B9C43764736F PUSH13 0x634300081B0033C2575A0E9E59 EXTCODECOPY STOP 0xF9 MSIZE 0xF8 0xC9 0x2F SLT 0xDB 0x28 PUSH10 0xC3395A3B0502D05E2516 PREVRANDAO PUSH16 0x71F85B00000000000000000000000000 ","sourceMap":"1931:9868:121:-:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;1931:9868:121;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1931:9868:121;;;;;;;;;;;;-1:-1:-1;;;;;1931:9868:121;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;1931:9868:121;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1931:9868:121;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1931:9868:121;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1931:9868:121;;;;;;;;;-1:-1:-1;;;;;1931:9868:121;;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;1931:9868:121;;;;;;4414:11;;4427:13;;1931:9868;;;4427:13;;4414:11;1931:9868;;;-1:-1:-1;;;;;1931:9868:121;;;;;;;;;;;;;;;;-1:-1:-1;;;1931:9868:121;;3401:45:114;;;:::i;:::-;3393:53;;3467:51;;;:::i;:::-;3456:62;;1931:9868:121;;;;;3542:22:114;3528:36;;;;1931:9868:121;3591:25:114;;3574:42;;;3644:13;1931:9868:121;3627:30:114;1931:9868:121;;4204:80:114;1931:9868:121;4204:80:114;;2079:95;;;;1931:9868:121;2079:95:114;;;1931:9868:121;2079:95:114;;;3644:13;1931:9868:121;2079:95:114;;;4278:4;1931:9868:121;2079:95:114;;;1931:9868:121;4204:80:114;;2079:95;1931:9868:121;;;;;;;;;;;;;;;;;;4194:91:114;;1931:9868:121;3667:48:114;4278:4;2079:95;3725:27;409:14:72;;;;1931:9868:121;;;-1:-1:-1;;;;;1931:9868:121;;;;2265:18:57;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1931:9868:121;;;;;;;;;;;;;2265:18:57;1931:9868:121;;;;;2265:18:57;1931:9868:121;;;;-1:-1:-1;;;;;1931:9868:121;;;;2293:22:57;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1931:9868:121;;;;;;;;;;;;;2265:18:57;1931:9868:121;;;;;2293:22:57;1931:9868:121;;750:14:36;;1931:9868:121;;;-1:-1:-1;;;;;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1931:9868:121;;;;;;;;;;;;;2265:18:57;1931:9868:121;;;;;;;;;;;;4492:31;;;;;1931:9868;;;4583:24;1931:9868;1500:6:43;1496:65;;-1:-1:-1;4729:11:121;-1:-1:-1;4760:3:121;1931:9868;;;;;;4742:16;;;;;;1931:9868;;;4806:24;1931:9868;;;;;;;;;;;;;;;;;4852:30;3113:4;4852:30;;4848:87;;3113:4;;;;;;;;5046:6;;;;5056:37;;;5042:558;1931:9868;;;;;;;;;;;4729:11;;1931:9868;;;;-1:-1:-1;1931:9868:121;;2293:22:57;1931:9868:121;;-1:-1:-1;1931:9868:121;5042:558;1931:9868;5118:6;;1931:9868;;5128:37;;;5042:558;;5114:486;5195:1;5190:6;;5195:1;;5200:37;;;5042:558;;5186:414;2265:18:57;5262:6:121;;2265:18:57;;5272:37:121;;;5042:558;;5258:342;2293:22:57;5334:6:121;;2293:22:57;;5344:37:121;;;5042:558;;5330:270;1931:9868;5406:6;;1931:9868;;5416:37;;;5042:558;;5402:198;5483:1;5478:6;;5483:1;;5488:37;;;5042:558;;5474:126;5555:1;5550:6;5546:54;;5474:126;;5042:558;;5546:54;5560:37;;5546:54;;;4848:87;4909:11;;;-1:-1:-1;4909:11:121;2293:22:57;-1:-1:-1;4909:11:121;1931:9868;;;;-1:-1:-1;1931:9868:121;;2293:22:57;1931:9868:121;;-1:-1:-1;1931:9868:121;4742:16;465:4:50;4742:16:121;;5682:31;5678:96;;1931:9868;;;;;;;;;;;;;;;;;;;;2079:95:114;1931:9868:121;;;;;3528:36:114;1931:9868:121;;;;;3574:42:114;1931:9868:121;;;;;3393:53:114;1931:9868:121;;;;;3456:62:114;1931:9868:121;;;;;409:14:72;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;750:14:36;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5678:96;5736:27;;;-1:-1:-1;5736:27:121;2293:22:57;-1:-1:-1;5736:27:121;1496:65:43;1529:21;;;-1:-1:-1;1529:21:43;2293:22:57;-1:-1:-1;1529:21:43;1931:9868:121;;;;-1:-1:-1;1931:9868:121;;;;;;-1:-1:-1;1931:9868:121;;;-1:-1:-1;;1931:9868:121;;;;-1:-1:-1;;1931:9868:121;;;;;;;4204:80:114;;;;;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;2265:18:57;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1931:9868:121;;-1:-1:-1;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1931:9868:121;;;;-1:-1:-1;1931:9868:121;;;;;-1:-1:-1;1931:9868:121;;;;;;;-1:-1:-1;1931:9868:121;;2293:22:57;1931:9868:121;;-1:-1:-1;1931:9868:121;;;;;;;;;;;;-1:-1:-1;1931:9868:121;;2293:22:57;1931:9868:121;;-1:-1:-1;1931:9868:121;;;;;-1:-1:-1;1931:9868:121;;;;;2293:22:57;-1:-1:-1;1931:9868:121;;-1:-1:-1;1931:9868:121;;-1:-1:-1;1931:9868:121;-1:-1:-1;;1931:9868:121;;;;;;4204:80:114;1931:9868:121;4204:80:114;;;;;;;1931:9868:121;;;;;;;;;;;;2293:22:57;1931:9868:121;;;;;;;;;;2265:18:57;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2293:22:57;-1:-1:-1;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1931:9868:121;;;;;;;-1:-1:-1;1931:9868:121;;;;;;;;;;;;;;-1:-1:-1;1931:9868:121;;;;;2265:18:57;-1:-1:-1;1931:9868:121;;;-1:-1:-1;;;;;;;;;;;;;1931:9868:121;;;-1:-1:-1;;1931:9868:121;;;;;;;4204:80:114;;;;;1931:9868:121;;;;;;;;;;;;2265:18:57;1931:9868:121;;;;;;;;;;2265:18:57;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2265:18:57;-1:-1:-1;1931:9868:121;;;-1:-1:-1;;;;;;;;;;;;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1931:9868:121;;;;-1:-1:-1;1931:9868:121;;;;;-1:-1:-1;1931:9868:121;;;;;;;;;;;-1:-1:-1;1931:9868:121;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1931:9868:121;;;;-1:-1:-1;;;;;1931:9868:121;;;;;;;;;;:::o;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1931:9868:121;;;;;;;;4204:80:114;1931:9868:121;;-1:-1:-1;;1931:9868:121;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1931:9868:121;;;;;;;;;;;;;;:::o;2914:340:110:-;1931:9868:121;;3059:2:110;;3037:24;;;3059:2;;;1931:9868:121;1854:2:110;1931:9868:121;;1840:16:110;1836:72;;1931:9868:121;;;;;2079:95:114;1931:9868:121;;;;;;1949:36:110;;3077:27;:::o;1931:9868:121:-;;;;;;;;;;1949:36:110;3077:27;:::o;1836:72::-;1931:9868:121;;;;1879:18:110;;;;;;;;;;;;1931:9868:121;;;;;;;;;;;;;;;;3432:13:114;1931:9868:121;;;;;;1854:2:110;1931:9868:121;-1:-1:-1;;1931:9868:121;;;1879:18:110;;;;3033:215;1931:9868:121;-1:-1:-1;;;;;1931:9868:121;;;;3432:13:114;1931:9868:121;;;;;;;;;;;;;;3033:215:110;1931:9868:121;;;;;;;;;;;3033:215:110;1931:9868:121;;;;;;;;;;;;;;;;3432:13:114;1931:9868:121;;;;;;;;;;;;;;;;;3432:13:114;1931:9868:121;1390:66:110;3195:42;:::o;1931:9868:121:-;;;;-1:-1:-1;1931:9868:121;;;;;4204:80:114;;;;;1931:9868:121;;3432:13:114;1931:9868:121;;;3432:13:114;1931:9868:121;;3432:13:114;1931:9868:121;;;;;;;;;;;;;;;;;;;;;3432:13:114;1931:9868:121;1390:66:110;3195:42;:::o;1931:9868:121:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1931:9868:121;;;;;;;3432:13:114;1931:9868:121;;;;;3432:13:114;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;;;3432:13:114;1931:9868:121;;;;;;;;;;;;;;2914:340:110;1931:9868:121;;3059:2:110;;3037:24;;;3059:2;;;1931:9868:121;1854:2:110;1931:9868:121;;1840:16:110;1836:72;;1931:9868:121;;;;;2079:95:114;1931:9868:121;;;;;;1949:36:110;;3077:27;:::o;3033:215::-;1931:9868:121;;;-1:-1:-1;;;;;1931:9868:121;;;;;;;;;;;;;;;;;;3033:215:110;1931:9868:121;;;;;;;;;;;3033:215:110;1931:9868:121;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;1931:9868:121;;;;;;;;;;;;;1390:66:110;;3195:42::o;1931:9868:121:-;;;;-1:-1:-1;1931:9868:121;;;;;4204:80:114;;;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1390:66:110;3195:42;:::o;1931:9868:121:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":7708,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_22882":{"entryPoint":7743,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_addresst_addresst_uint256":{"entryPoint":8037,"id":null,"parameterSlots":1,"returnSlots":3},"abi_decode_array_contract_IERC20_dyn_fromMemory":{"entryPoint":8581,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_contract_IERC20_dyn_memory_ptr_fromMemory":{"entryPoint":8707,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn":{"entryPoint":7941,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn_fromMemory":{"entryPoint":9636,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn_memory_ptr_fromMemory":{"entryPoint":8748,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dynt_array_uint256_dyn_fromMemory":{"entryPoint":8845,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bool_fromMemory":{"entryPoint":8313,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_struct_PoolConfig_fromMemory":{"entryPoint":9346,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_address_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_array_contract_IERC20_dyn":{"entryPoint":8154,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":8103,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string":{"entryPoint":7671,"id":null,"parameterSlots":2,"returnSlots":1},"array_allocation_size_array_uint256_dyn":{"entryPoint":7917,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_uint256":{"entryPoint":11056,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_uint256":{"entryPoint":11140,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256":{"entryPoint":11121,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256_22916":{"entryPoint":11069,"id":null,"parameterSlots":1,"returnSlots":1},"checked_mul_uint256_22958":{"entryPoint":11098,"id":null,"parameterSlots":1,"returnSlots":1},"extract_byte_array_length":{"entryPoint":8257,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":7882,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_22865":{"entryPoint":7778,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_22869":{"entryPoint":7826,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_35349":{"entryPoint":7854,"id":null,"parameterSlots":1,"returnSlots":0},"fun_domainSeparatorV4":{"entryPoint":10176,"id":41960,"parameterSlots":0,"returnSlots":1},"fun_ensureOnlyVault":{"entryPoint":10069,"id":28148,"parameterSlots":0,"returnSlots":0},"fun_getNormalizedWeight":{"entryPoint":9674,"id":45548,"parameterSlots":1,"returnSlots":1},"fun_getNormalizedWeights":{"entryPoint":10488,"id":45666,"parameterSlots":0,"returnSlots":1},"fun_mulDivUp":{"entryPoint":12306,"id":8034,"parameterSlots":2,"returnSlots":1},"fun_mulUp":{"entryPoint":11309,"id":7970,"parameterSlots":2,"returnSlots":1},"fun_onSwap_inner":{"entryPoint":8913,"id":null,"parameterSlots":1,"returnSlots":1},"fun_pow":{"entryPoint":12431,"id":8467,"parameterSlots":2,"returnSlots":1},"fun_powDown":{"entryPoint":11839,"id":8130,"parameterSlots":2,"returnSlots":1},"fun_powUp":{"entryPoint":11170,"id":8197,"parameterSlots":2,"returnSlots":1},"fun_throwError":{"entryPoint":12135,"id":41836,"parameterSlots":2,"returnSlots":0},"fun_toStringWithFallback":{"entryPoint":11649,"id":41092,"parameterSlots":1,"returnSlots":1},"fun_toStringWithFallback_22872":{"entryPoint":11343,"id":41092,"parameterSlots":1,"returnSlots":1},"fun_totalSupply":{"entryPoint":8399,"id":10821,"parameterSlots":0,"returnSlots":1},"fun_tryRecover":{"entryPoint":11992,"id":41751,"parameterSlots":4,"returnSlots":3},"fun_useNonce":{"entryPoint":null,"id":40881,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_uint256_dyn":{"entryPoint":8379,"id":null,"parameterSlots":2,"returnSlots":1},"memory_array_index_access_uint256_dyn_35342":{"entryPoint":8326,"id":null,"parameterSlots":1,"returnSlots":1},"validator_assert_enum_TokenType":{"entryPoint":8227,"id":null,"parameterSlots":1,"returnSlots":0},"wrapping_div_int256":{"entryPoint":12421,"id":null,"parameterSlots":2,"returnSlots":1},"wrapping_div_int256_22962":{"entryPoint":12395,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"5300":[{"length":32,"start":1437},{"length":32,"start":2378},{"length":32,"start":2578},{"length":32,"start":3194},{"length":32,"start":4727}],"28110":[{"length":32,"start":608},{"length":32,"start":1160},{"length":32,"start":1631},{"length":32,"start":3454},{"length":32,"start":4333},{"length":32,"start":5294},{"length":32,"start":5939},{"length":32,"start":6616},{"length":32,"start":8472},{"length":32,"start":10092}],"41858":[{"length":32,"start":10246}],"41860":[{"length":32,"start":10450}],"41862":[{"length":32,"start":10199}],"41864":[{"length":32,"start":10325}],"41866":[{"length":32,"start":10363}],"41869":[{"length":32,"start":4392}],"41872":[{"length":32,"start":4434}],"45150":[{"length":32,"start":10490}],"45152":[{"length":32,"start":9682},{"length":32,"start":10577}],"45154":[{"length":32,"start":9727},{"length":32,"start":10622}],"45156":[{"length":32,"start":9772},{"length":32,"start":10679}],"45158":[{"length":32,"start":9817},{"length":32,"start":10736}],"45160":[{"length":32,"start":9862},{"length":32,"start":10794}],"45162":[{"length":32,"start":9907},{"length":32,"start":10851}],"45164":[{"length":32,"start":9952},{"length":32,"start":10911}],"45166":[{"length":32,"start":9995},{"length":32,"start":10969}]},"linkReferences":{},"object":"6080604090808252600480361015610015575f80fd5b60e05f35811c92836301ffc9a714611d905750826306fdde0314611ce1578263095ea7b314611c6357826316a0b3e014611a2a57826318160ddd14611a0e57826323b872dd1461196657826323de665114611934578263273c1adf1461191257826330adf81f146118d8578263313ce567146118bd5782633644e515146118a157826353b79bd7146116e557826354fd4d50146115f55782635687f2b814611596578263627cdcb91461156d578263654cf15d1461154b578263679aefce1461151457826370a082311461144057826372c981861461131f5782637ecebe00146112db57826381fa807c1461121a57826384b0196e146111115782638d928af8146110c157826395d89b4114610fbb578263984de9e814610df9578263a9059cbb14610ce6578263aa6ca80814610c21578263abb1dc44146109b8578263b156aa0a146108f1578263b677fa56146108cf578263c0bc6f33146105f6578263ce20ece7146105d6578263d335b0cf14610543578263d505accf146102d857508163dd62ed3e146101e5575063f89f27ed146101ae575f80fd5b346101e1575f6003193601126101e1576101dd906101ca6128f8565b9051918291602083526020830190611fa7565b0390f35b5f80fd5b82346101e157806003193601126101e1576020610200611e1c565b606461020a611e3f565b9473ffffffffffffffffffffffffffffffffffffffff808097875198899687957f927da10500000000000000000000000000000000000000000000000000000000875230908701521660248501521660448301527f0000000000000000000000000000000000000000000000000000000000000000165afa9081156102cf575f9161029a575b6020925051908152f35b90506020823d6020116102c7575b816102b560209383611eca565b810103126101e1576020915190610290565b3d91506102a8565b513d5f823e3d90fd5b8390346101e1576003193601126101e1576102f1611e1c565b906102fa611e3f565b604435926084359060643560ff831683036101e157804211610519576103478273ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2080549060018201905590565b9061041361040a875195602087017f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9815273ffffffffffffffffffffffffffffffffffffffff97889586891697888d840152878c1660608401528d608084015260a083015260c082015260c081526103be81611e92565b5190206103c96127c0565b908a51917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015260c43591604260a4359220612ed8565b90929192612f67565b168181036104ec5750505f84959661048460209651988996879586947fe1f21c67000000000000000000000000000000000000000000000000000000008652850160409194939294606082019573ffffffffffffffffffffffffffffffffffffffff80921683521660208201520152565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19081156102cf57506104b857005b6020813d6020116104e4575b816104d160209383611eca565b810103126101e1576104e290612079565b005b3d91506104c4565b877f4b800e46000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b867f62791302000000000000000000000000000000000000000000000000000000005f525260245ffd5b5082346101e1575f6003193601126101e1578051917fb45090f9000000000000000000000000000000000000000000000000000000008352309083015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156102cf575f9161029a576020925051908152f35b83346101e1575f6003193601126101e157602090516509184e72a0008152f35b9150346101e1575f6003193601126101e157825161061381611e92565b606081526020918282019160608352858101925f8452606082015f815260808301915f835260a08401935f855260c08101955f875273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016908b517f535cfd8a00000000000000000000000000000000000000000000000000000000815230828201525f81602481865afa90811561087f575f916108ad575b5083528b517f7e361bde00000000000000000000000000000000000000000000000000000000815230828201525f81602481865afa90811561087f575f91610889575b5084528b517fb45090f900000000000000000000000000000000000000000000000000000000815230828201528a81602481865afa90811561087f575f91610852575b5089526107516120cf565b85528b519182917ff29486a100000000000000000000000000000000000000000000000000000000835230908301528160246101a09485935afa91821561084857928b9c926107e0926107f396955f9e9c9d9e9261081b575b50508a81015115158852610120610100918281015115158b52015115158a5283519d8d8f9e938f948552519301528c0190611fa7565b915190601f198b840301908b0152611fa7565b9551606088015251608087015251151560a086015251151560c0850152511515908301520390f35b61083a9250803d10610841575b6108328183611eca565b810190612482565b5f806107aa565b503d610828565b8c513d5f823e3d90fd5b90508a81813d8311610878575b6108698183611eca565b810103126101e157515f610746565b503d61085f565b8d513d5f823e3d90fd5b6108a591503d805f833e61089d8183611eca565b81019061228d565b90505f610703565b6108c991503d805f833e6108c18183611eca565b8101906125a4565b5f6106c0565b83346101e1575f6003193601126101e157602090516709b6e64a8ec600008152f35b8382346101e1575f6003193601126101e1578151907f535cfd8a00000000000000000000000000000000000000000000000000000000825230908201525f8160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156109ae57916101dd925f92610992575b5051918291602083526020830190611fa7565b6109a79192503d805f833e6108c18183611eca565b908361097f565b82513d5f823e3d90fd5b8382346101e1575f6003193601126101e15773ffffffffffffffffffffffffffffffffffffffff8251917f67e0e07600000000000000000000000000000000000000000000000000000000835230908301525f82602481847f0000000000000000000000000000000000000000000000000000000000000000165afa918215610c17575f935f925f925f95610aed575b5090610a6595949392918151968796608088526080880190611fda565b6020878203818901528080875193848152019601925f905b838210610aa957898803868b015289806101dd8b610a9b8c8c611fa7565b908382036060850152611fa7565b9184989950606086979860019395978397518051610ac681612023565b83528685820151168584015201511515898201520198019201899897969594929391610a7d565b955093509150503d805f853e610b038185611eca565b8301926080818503126101e15780519167ffffffffffffffff928381116101e15785610b30918401612185565b91602095868201518581116101e157820181601f820112156101e157805190610b5882611eed565b98610b6586519a8b611eca565b828a52808a01816060809502840101928584116101e1578201905b838210610bc5575050505050828201518581116101e15781610ba391840161222c565b9460608301519081116101e157610bba920161222c565b919492919386610a48565b84828703126101e157875190610bda82611e62565b825160028110156101e157825283830151908c821682036101e1578285928389950152610c088b8601612079565b8b820152815201910190610b80565b83513d5f823e3d90fd5b8382346101e1575f6003193601126101e1578151907fca4f280300000000000000000000000000000000000000000000000000000000825230908201525f8160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156109ae57916101dd925f92610cc2575b5051918291602083526020830190611fda565b610cdf9192503d805f833e610cd78183611eca565b810190612203565b9083610caf565b5082346101e157806003193601126101e1576020610d6492610d06611e1c565b83517fbeabacc80000000000000000000000000000000000000000000000000000000081523392810192835273ffffffffffffffffffffffffffffffffffffffff909116602083015260243560408301529384918291606090910190565b03815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610def57610db5575b6020905160018152f35b6020823d602011610de7575b81610dce60209383611eca565b810103126101e157610de1602092612079565b50610dab565b3d9150610dc1565b50513d5f823e3d90fd5b5082346101e157806003193601126101e157813567ffffffffffffffff81116101e157610e299036908401611f05565b60243560028110156101e157610e3e81612023565b610fb457825b610e4c6128f8565b9080600314610f5f5780600414610ed85780600114610e9557600214610e7f57605184634e487b7160e01b5f525260245ffd5b6020935090610e8d91613012565b905b51908152f35b509092670de0b6b3a764000091828102928184041490151715610ec55750602092610ebf91612b84565b90610e8f565b601190634e487b7160e01b5f525260245ffd5b50925f9190670de0b6b3a76400005b8551841015610f2357610f1b600191610f15610f0387876120bb565b51610f0e888b6120bb565b5190612ba2565b90612c2d565b930192610ee7565b92509350508015610f38576020925090610e8f565b827f26543689000000000000000000000000000000000000000000000000000000005f525ffd5b50925f9190670de0b6b3a76400005b8551841015610f2357670de0b6b3a7640000610fab600192610fa5610f9388886120bb565b51610f9e898c6120bb565b5190612e3f565b90612b71565b04930192610f6e565b6003610e44565b8382346101e1575f6003193601126101e157815191825f8354610fdd81612041565b90818452602095600191876001821691825f1461107c575050600114611020575b5050506101dd9291611011910385611eca565b51928284938452830190611df7565b5f90815286935091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b82841061106457505050820101816110116101dd610ffe565b8054848a01860152889550879490930192810161104b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168782015293151560051b8601909301935084925061101191506101dd9050610ffe565b83346101e1575f6003193601126101e1576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9150346101e1575f6003193601126101e15761114c7f0000000000000000000000000000000000000000000000000000000000000000612c4f565b926111767f0000000000000000000000000000000000000000000000000000000000000000612d81565b815192602084019084821067ffffffffffffffff8311176112075750916111e7916101dd949382525f84526111da82519788977f0f0000000000000000000000000000000000000000000000000000000000000089528060208a0152880190611df7565b9186830390870152611df7565b904660608501523060808501525f60a085015283820360c0850152611fa7565b604190634e487b7160e01b5f525260245ffd5b8382346101e1575f6003193601126101e1578151907ff29486a100000000000000000000000000000000000000000000000000000000825230908201526101a090818160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610c17575f926112be575b505060608282015191015182519182526020820152f35b6112d49250803d10610841576108328183611eca565b82806112a7565b83346101e15760206003193601126101e15760209073ffffffffffffffffffffffffffffffffffffffff61130d611e1c565b165f5260028252805f20549051908152f35b8382346101e15760209260031984813601126101e15782359167ffffffffffffffff918284116101e15783360301126101e15783519161135e83611e92565b8084013560028110156101e157835260248101358684015260448101358281116101e15761139190853691840101611f05565b85840152606481013560608401526084810135608084015260a481013573ffffffffffffffffffffffffffffffffffffffff811681036101e15760a084015260c4810135908282116101e1570192366023850112156101e15780840135918211611207575083519061140c86601f19601f8401160183611eca565b80825236602482860101116101e15785815f926024610e8d9701838601378301015260c082015261143b612755565b6122d1565b8382346101e157602091826003193601126101e1578261145e611e1c565b604473ffffffffffffffffffffffffffffffffffffffff9485855196879485937ff7888aec00000000000000000000000000000000000000000000000000000000855230908501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa918215610def575f926114e5575b5051908152f35b9091508281813d831161150d575b6114fd8183611eca565b810103126101e1575190836114de565b503d6114f3565b50346101e1575f6003193601126101e1577f18e79a20000000000000000000000000000000000000000000000000000000005f525ffd5b83346101e1575f6003193601126101e1576020905167016345785d8a00008152f35b346101e1575f6003193601126101e157335f908152600260205260409020805460018101909155005b83346101e15760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256115c836611f65565b9391946115d3612755565b5193845273ffffffffffffffffffffffffffffffffffffffff908116941692a3005b83346101e1575f6003193601126101e15780516005549091825f61161884612041565b808352602094600190866001821691825f146116a557505060011461164a575b50506101dd9291611011910385611eca565b9085925060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0915f925b82841061168d5750505082010181611011611638565b8054848a018601528895508794909301928101611677565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168682015292151560051b850190920192508391506110119050611638565b5082346101e1575f6003193601126101e15780519061170382611e62565b606082526020908183019160608352818401926060845273ffffffffffffffffffffffffffffffffffffffff95867f0000000000000000000000000000000000000000000000000000000000000000169084517fca4f280300000000000000000000000000000000000000000000000000000000815230828201525f81602481865afa90811561189757905f9291839161187d575b50885260248651809481937f7e361bde00000000000000000000000000000000000000000000000000000000835230908301525afa908115611873575f9161185a575b5081959295526117e96128f8565b84528251948086526080860192519260608288015283518091528160a088019401915f5b8281106118445788806101dd8a8a6118338b8b51601f1993848884030190880152611fa7565b915190848303016060850152611fa7565b83518a168652948101949281019260010161180d565b61186e91503d805f833e61089d8183611eca565b6117db565b84513d5f823e3d90fd5b61189191503d8085833e610cd78183611eca565b8a611798565b86513d5f823e3d90fd5b83346101e1575f6003193601126101e157602090610e8d6127c0565b83346101e1575f6003193601126101e1576020905160128152f35b83346101e1575f6003193601126101e157602090517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b83346101e1575f6003193601126101e157602090516729a2241af62c00008152f35b83346101e15760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6115c836611f65565b5082346101e15760205f608461197b36611f65565b86517f15dacbea000000000000000000000000000000000000000000000000000000008152339881019890985273ffffffffffffffffffffffffffffffffffffffff928316602489015290821660448801526064870152859283917f0000000000000000000000000000000000000000000000000000000000000000165af18015610def57610db5576020905160018152f35b83346101e1575f6003193601126101e157602090610e8d6120cf565b8382346101e15760606003193601126101e157803567ffffffffffffffff81116101e157611a5b9036908301611f05565b9160243592611a77611a7085604435936120bb565b51946125ca565b60019081831115611c5d5760025b80600314611be75780600414611b4e5780600114611b0c57600214611ab757605185634e487b7160e01b5f525260245ffd5b909192938115611ae65750610e8d9260209592610f15926ec097ce7bc90715b34b9f0fffffffff040190612ba2565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f525ffd5b5080929394915015611b3b575092610f15610e8d926020956ec097ce7bc90715b34b9f10000000000490612ba2565b601290634e487b7160e01b5f525260245ffd5b509192939080670de0b6b3a7640000935f925b611ba7575b5050508115611b81575092610f15610e8d9260209590612ba2565b7f26543689000000000000000000000000000000000000000000000000000000005f525ffd5b909193670de0b6b3a764000051851015611be1579082611bd98193610f15611bcf89866120bb565b51610f0e8a612086565b950192611b61565b93611b66565b509192939080670de0b6b3a7640000935f925b611c19575050508115611b81575092610f15610e8d9260209590612ba2565b909193670de0b6b3a764000051851015611be1579082670de0b6b3a7640000611c548294610fa5611c4a8a876120bb565b51610f9e8b612086565b04950192611bfa565b81611a85565b5082346101e157806003193601126101e1576020610d6492611c83611e1c565b83517fe1f21c670000000000000000000000000000000000000000000000000000000081523392810192835273ffffffffffffffffffffffffffffffffffffffff909116602083015260243560408301529384918291606090910190565b83346101e1575f6003193601126101e15780516003549091825f611d0484612041565b808352602094600190866001821691825f146116a5575050600114611d355750506101dd9291611011910385611eca565b9085925060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f925b828410611d785750505082010181611011611638565b8054848a018601528895508794909301928101611d62565b82346101e15760206003193601126101e15735907fffffffff0000000000000000000000000000000000000000000000000000000082168092036101e1577f01ffc9a700000000000000000000000000000000000000000000000000000000602092148152f35b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101e157565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101e157565b6060810190811067ffffffffffffffff821117611e7e57604052565b634e487b7160e01b5f52604160045260245ffd5b60e0810190811067ffffffffffffffff821117611e7e57604052565b6040810190811067ffffffffffffffff821117611e7e57604052565b90601f601f19910116810190811067ffffffffffffffff821117611e7e57604052565b67ffffffffffffffff8111611e7e5760051b60200190565b9080601f830112156101e1576020908235611f1f81611eed565b93611f2d6040519586611eca565b81855260208086019260051b8201019283116101e157602001905b828210611f56575050505090565b81358152908301908301611f48565b60031960609101126101e15773ffffffffffffffffffffffffffffffffffffffff9060043582811681036101e1579160243590811681036101e1579060443590565b9081518082526020808093019301915f5b828110611fc6575050505090565b835185529381019392810192600101611fb8565b9081518082526020808093019301915f5b828110611ff9575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101611feb565b6002111561202d57565b634e487b7160e01b5f52602160045260245ffd5b90600182811c9216801561206f575b602083101461205b57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691612050565b519081151582036101e157565b670de0b6b3a7640000518110156120a75760051b670de0b6b3a76400200190565b634e487b7160e01b5f52603260045260245ffd5b80518210156120a75760209160051b010190565b6040517fe4dc2aa400000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561217a575f9161214b575090565b90506020813d602011612172575b8161216660209383611eca565b810103126101e1575190565b3d9150612159565b6040513d5f823e3d90fd5b9080601f830112156101e1578151906020916121a081611eed565b936121ae6040519586611eca565b81855260208086019260051b8201019283116101e157602001905b8282106121d7575050505090565b815173ffffffffffffffffffffffffffffffffffffffff811681036101e15781529083019083016121c9565b906020828203126101e157815167ffffffffffffffff81116101e1576122299201612185565b90565b9080601f830112156101e15781519060209161224781611eed565b936122556040519586611eca565b81855260208086019260051b8201019283116101e157602001905b82821061227e575050505090565b81518152908301908301612270565b9190916040818403126101e15780519267ffffffffffffffff938481116101e157816122ba91840161222c565b9360208301519081116101e157612229920161222c565b604081019081516122e860608301918251906120bb565b519251916122fc60808201938451906120bb565b5191815161230981612023565b61231281612023565b6123d15761232c612325602092516125ca565b94516125ca565b910151670de0b6b3a7640000948561234382612b3d565b0482116123a95761235761235d9282612b30565b90613012565b848402938085048614901517156123955761237e6123849261239195612b84565b90612ba2565b8381810391100290612b71565b0490565b634e487b7160e01b5f52601160045260245ffd5b7f340a4533000000000000000000000000000000000000000000000000000000005f5260045ffd5b6123eb6123e460209295939495516125ca565b92516125ca565b920151670de0b6b3a764000061240085612b3d565b04811161245a578303908382116123955761242161237e9261242795613012565b92613012565b7ffffffffffffffffffffffffffffffffffffffffffffffffff21f494c589c000081019081116123955761222991612c2d565b7f64590b9f000000000000000000000000000000000000000000000000000000005f5260045ffd5b6101a0918190038281126101e15760405192610140928385019267ffffffffffffffff9086851082861117611e7e576080136101e1576101c0860190811184821017611e7e576040526124d481612079565b83526124e260208201612079565b9261016093848701526124f760408301612079565b92610180938488015261250c60608401612079565b9087015285526080810151602086015260a0810151604086015260c0810151606086015260e081015164ffffffffff811681036101e15760808601526101008082015163ffffffff811681036101e15761259d946125939160a08901526125876101209761257b898701612079565b60c08b01528501612079565b60e08901528301612079565b9086015201612079565b9082015290565b906020828203126101e157815167ffffffffffffffff81116101e157612229920161222c565b806125f457507f000000000000000000000000000000000000000000000000000000000000000090565b6001810361262157507f000000000000000000000000000000000000000000000000000000000000000090565b6002810361264e57507f000000000000000000000000000000000000000000000000000000000000000090565b6003810361267b57507f000000000000000000000000000000000000000000000000000000000000000090565b600481036126a857507f000000000000000000000000000000000000000000000000000000000000000090565b600581036126d557507f000000000000000000000000000000000000000000000000000000000000000090565b6006810361270257507f000000000000000000000000000000000000000000000000000000000000000090565b60070361272d577f000000000000000000000000000000000000000000000000000000000000000090565b7fc1ab6dc1000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361279457565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163014806128cf575b15612828577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff821117611e7e5760405251902090565b507f000000000000000000000000000000000000000000000000000000000000000046146127ff565b7f000000000000000000000000000000000000000000000000000000000000000061292281611eed565b906129306040519283611eca565b80825261293c81611eed565b601f196020840191013682378251156120a7577f000000000000000000000000000000000000000000000000000000000000000090528151600110156120a7577f000000000000000000000000000000000000000000000000000000000000000060408301526002811115612b2c578151600210156120a7577f000000000000000000000000000000000000000000000000000000000000000060608301526003811115612b2c578151600310156120a7577f0000000000000000000000000000000000000000000000000000000000000000608083015260049081811115612b27578251821015612b14577f000000000000000000000000000000000000000000000000000000000000000060a08401526005811115612b2757825160051015612b14577f000000000000000000000000000000000000000000000000000000000000000060c08401526006811115612b2757825160061015612b14576007907f000000000000000000000000000000000000000000000000000000000000000060e085015211612acc575090565b815160071015612b0157507f000000000000000000000000000000000000000000000000000000000000000061010082015290565b603290634e487b7160e01b5f525260245ffd5b603282634e487b7160e01b5f525260245ffd5b505090565b5090565b9190820180921161239557565b90670429d069189e00009182810292818404149015171561239557565b906127109182810292818404149015171561239557565b8181029291811591840414171561239557565b8115612b8e570490565b634e487b7160e01b5f52601260045260245ffd5b90670de0b6b3a764000090818103612bb957505090565b671bc16d674ec800008103612bd45750508061222991612c2d565b673782dace9d9000008103612bf8575050612bf28161222992612c2d565b80612c2d565b612c02919261308f565b906001612c0e83612b5a565b915f198301040190151502600181018091116123955761222991612b30565b90612c3791612b71565b6001670de0b6b3a76400005f19830104019015150290565b60ff8114612ca35760ff811690601f8211612c7b5760405191612c7183611eae565b8252602082015290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040515f815f5491612cb583612041565b80835292602090600190818116908115612d3e5750600114612ce0575b505061222992500382611eca565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b828410612d2657506122299450505081016020015f80612cd2565b85548785018301529485019486945092810192612d0b565b9050602093506122299592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f80612cd2565b60ff8114612da35760ff811690601f8211612c7b5760405191612c7183611eae565b506040515f81600191600154612db881612041565b8084529360209160018116908115612d3e5750600114612de057505061222992500382611eca565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b828410612e2757506122299450505081016020015f80612cd2565b85548785018301529485019486945092810192612e0c565b670de0b6b3a764000091808303612e565750905090565b8290671bc16d674ec800008103612e735750508061239191612b71565b673782dace9d9000008103612e975750612e908261239193612b71565b0480612b71565b9050612ea29161308f565b612eab81612b5a565b60015f1993848301040190151502906001820180831161239557811015612ed3575050505f90565b030190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411612f5c579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa1561217a575f5173ffffffffffffffffffffffffffffffffffffffff811615612f5257905f905f90565b505f906001905f90565b5050505f9160039190565b600481101561202d5780612f79575050565b60018103612fa9577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b60028103612fdd57507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600314612fe75750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90801561304357670de0b6b3a764000091828102928184041490151715612395576001905f19830104019015150290565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b8015612b8e576ec097ce7bc90715b34b9f10000000000590565b8115612b8e570590565b9080156139b85781156139b2578160ff1c61398a57770bce5086492111aea88f4bb1ca6bcf584181ea8059f765328110156139625781670c7d713b49da00001280613951575b156135ee57670de0b6b3a7640000916ec097ce7bc90715b34b9f100000000090613128908402828101907fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f000000000018302613085565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b918082818507020592050201670de0b6b3a7640000905b057ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc000081811315806135db575b156135b3578190821215806135a0575b15613578575f915f8112613569575b506064906806f05b59d3b20000008112613506577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e0000000168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac620000008112156134cd575b6856bc75e2d631000000811215613493575b682b5e3af16b1880000081121561345b575b6815af1d78b58c400000811215613423575b680ad78ebc5ac62000008112156133ec575b828112156133b5575b6802b5e3af16b188000081121561337e575b68015af1d78b58c40000811215613347575b60028382800205056003848383020505600485848302050585600581868402050560068287830205056007838883020505906008848984020505926009858a8602050595600a868b8902050597600b878c8b02050599600c888d8d0205059b01010101010101010101010102050205905f14612229576122299061306b565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000849201920205906132c8565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000849201920205906132b6565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000849201920205906132a4565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e000008492019202059061329b565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000084920192020590613289565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000084920192020590613277565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000084920192020590613265565b6e01855144814a7ff805980ff008400091507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000001613253565b6803782dace9d90000008112613556577ffffffffffffffffffffffffffffffffffffffffffffffffc87d25316270000000168056bc75e2d63100000826b1425982cf597cd205cef73809261323e565b68056bc75e2d631000008260019261323e565b600192505f03905060646131e2565b7fd4794efd000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156131d3565b7fa2f9f7e3000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156131c3565b81670de0b6b3a7640000925f9184811261393b575b506064905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000821215613910575b73011798004d755d3c8bc8e03204cf44619e0000008212156138ef575b820290808302906e01855144814a7ff805980ff008400090818312156138cc575b50506b02df0ab5a80a22c61ab5a700808212156138ac575b50693f1fce3da636ea5cf8508082121561388c575b50690127fa27722cc06cc5e28082121561386c575b5068280e60114edb805d038082121561384c575b50680ebc5fb4174612111080821215613835575b506808f00f760a4b2db55d80821215613815575b506806f5f1775788937937808212156137f5575b506806248f33704b286603808212156137d6575b506805c548670b9510e7ac808212156137b7575b5061376468056bc75e2d6310000091827ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000818301920102613085565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b0105905f146137b2575f035b02613197565b6137ac565b68056bc75e2d631000006756bc75e2d63100009202059101905f613728565b68056bc75e2d6310000067ad78ebc5ac6200009202059101905f613714565b68056bc75e2d6310000068015af1d78b58c400009202059101905f613700565b68056bc75e2d631000006802b5e3af16b18800009202059101905f6136ec565b68056bc75e2d63100000809202059101905f6136d8565b68056bc75e2d63100000680ad78ebc5ac62000009202059101905f6136c4565b68056bc75e2d631000006815af1d78b58c4000009202059101905f6136b0565b68056bc75e2d63100000682b5e3af16b188000009202059101905f61369b565b68056bc75e2d631000006856bc75e2d6310000009202059101905f613686565b68ad78ebc5ac62000000925069021e19e0c9bab240000002059101905f8061366e565b906b1425982cf597cd205cef73806803782dace9d90000009105910161364d565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b2000000613630565b9050613947915061306b565b6001906064613603565b50670f43fc2c04ee000082126130d5565b7fd8317311000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f022701e0000000000000000000000000000000000000000000000000000000005f5260045ffd5b50505f90565b5050670de0b6b3a76400009056fea26469706673582212203ec0118ae17c0f0adba7459b5c62781ac22adb46f73c1467746703ba70b9c43764736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH1 0xE0 PUSH0 CALLDATALOAD DUP2 SHR SWAP3 DUP4 PUSH4 0x1FFC9A7 EQ PUSH2 0x1D90 JUMPI POP DUP3 PUSH4 0x6FDDE03 EQ PUSH2 0x1CE1 JUMPI DUP3 PUSH4 0x95EA7B3 EQ PUSH2 0x1C63 JUMPI DUP3 PUSH4 0x16A0B3E0 EQ PUSH2 0x1A2A JUMPI DUP3 PUSH4 0x18160DDD EQ PUSH2 0x1A0E JUMPI DUP3 PUSH4 0x23B872DD EQ PUSH2 0x1966 JUMPI DUP3 PUSH4 0x23DE6651 EQ PUSH2 0x1934 JUMPI DUP3 PUSH4 0x273C1ADF EQ PUSH2 0x1912 JUMPI DUP3 PUSH4 0x30ADF81F EQ PUSH2 0x18D8 JUMPI DUP3 PUSH4 0x313CE567 EQ PUSH2 0x18BD JUMPI DUP3 PUSH4 0x3644E515 EQ PUSH2 0x18A1 JUMPI DUP3 PUSH4 0x53B79BD7 EQ PUSH2 0x16E5 JUMPI DUP3 PUSH4 0x54FD4D50 EQ PUSH2 0x15F5 JUMPI DUP3 PUSH4 0x5687F2B8 EQ PUSH2 0x1596 JUMPI DUP3 PUSH4 0x627CDCB9 EQ PUSH2 0x156D JUMPI DUP3 PUSH4 0x654CF15D EQ PUSH2 0x154B JUMPI DUP3 PUSH4 0x679AEFCE EQ PUSH2 0x1514 JUMPI DUP3 PUSH4 0x70A08231 EQ PUSH2 0x1440 JUMPI DUP3 PUSH4 0x72C98186 EQ PUSH2 0x131F JUMPI DUP3 PUSH4 0x7ECEBE00 EQ PUSH2 0x12DB JUMPI DUP3 PUSH4 0x81FA807C EQ PUSH2 0x121A JUMPI DUP3 PUSH4 0x84B0196E EQ PUSH2 0x1111 JUMPI DUP3 PUSH4 0x8D928AF8 EQ PUSH2 0x10C1 JUMPI DUP3 PUSH4 0x95D89B41 EQ PUSH2 0xFBB JUMPI DUP3 PUSH4 0x984DE9E8 EQ PUSH2 0xDF9 JUMPI DUP3 PUSH4 0xA9059CBB EQ PUSH2 0xCE6 JUMPI DUP3 PUSH4 0xAA6CA808 EQ PUSH2 0xC21 JUMPI DUP3 PUSH4 0xABB1DC44 EQ PUSH2 0x9B8 JUMPI DUP3 PUSH4 0xB156AA0A EQ PUSH2 0x8F1 JUMPI DUP3 PUSH4 0xB677FA56 EQ PUSH2 0x8CF JUMPI DUP3 PUSH4 0xC0BC6F33 EQ PUSH2 0x5F6 JUMPI DUP3 PUSH4 0xCE20ECE7 EQ PUSH2 0x5D6 JUMPI DUP3 PUSH4 0xD335B0CF EQ PUSH2 0x543 JUMPI DUP3 PUSH4 0xD505ACCF EQ PUSH2 0x2D8 JUMPI POP DUP2 PUSH4 0xDD62ED3E EQ PUSH2 0x1E5 JUMPI POP PUSH4 0xF89F27ED EQ PUSH2 0x1AE JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH2 0x1DD SWAP1 PUSH2 0x1CA PUSH2 0x28F8 JUMP JUMPDEST SWAP1 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1FA7 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x1E1 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH2 0x200 PUSH2 0x1E1C JUMP JUMPDEST PUSH1 0x64 PUSH2 0x20A PUSH2 0x1E3F JUMP JUMPDEST SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP1 SWAP8 DUP8 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 PUSH32 0x927DA10500000000000000000000000000000000000000000000000000000000 DUP8 MSTORE ADDRESS SWAP1 DUP8 ADD MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE AND PUSH1 0x44 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2CF JUMPI PUSH0 SWAP2 PUSH2 0x29A JUMPI JUMPDEST PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x2C7 JUMPI JUMPDEST DUP2 PUSH2 0x2B5 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP2 MLOAD SWAP1 PUSH2 0x290 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2A8 JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 SWAP1 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH2 0x2F1 PUSH2 0x1E1C JUMP JUMPDEST SWAP1 PUSH2 0x2FA PUSH2 0x1E3F JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP3 PUSH1 0x84 CALLDATALOAD SWAP1 PUSH1 0x64 CALLDATALOAD PUSH1 0xFF DUP4 AND DUP4 SUB PUSH2 0x1E1 JUMPI DUP1 TIMESTAMP GT PUSH2 0x519 JUMPI PUSH2 0x347 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH1 0x1 DUP3 ADD SWAP1 SSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x413 PUSH2 0x40A DUP8 MLOAD SWAP6 PUSH1 0x20 DUP8 ADD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP8 DUP9 SWAP6 DUP7 DUP10 AND SWAP8 DUP9 DUP14 DUP5 ADD MSTORE DUP8 DUP13 AND PUSH1 0x60 DUP5 ADD MSTORE DUP14 PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 MSTORE PUSH2 0x3BE DUP2 PUSH2 0x1E92 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 PUSH2 0x3C9 PUSH2 0x27C0 JUMP JUMPDEST SWAP1 DUP11 MLOAD SWAP2 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x2 DUP4 ADD MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0xC4 CALLDATALOAD SWAP2 PUSH1 0x42 PUSH1 0xA4 CALLDATALOAD SWAP3 KECCAK256 PUSH2 0x2ED8 JUMP JUMPDEST SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x2F67 JUMP JUMPDEST AND DUP2 DUP2 SUB PUSH2 0x4EC JUMPI POP POP PUSH0 DUP5 SWAP6 SWAP7 PUSH2 0x484 PUSH1 0x20 SWAP7 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP7 MSTORE DUP6 ADD PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 SWAP5 PUSH1 0x60 DUP3 ADD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP4 MSTORE AND PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2CF JUMPI POP PUSH2 0x4B8 JUMPI STOP JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x4E4 JUMPI JUMPDEST DUP2 PUSH2 0x4D1 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1E1 JUMPI PUSH2 0x4E2 SWAP1 PUSH2 0x2079 JUMP JUMPDEST STOP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x4C4 JUMP JUMPDEST DUP8 PUSH32 0x4B800E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP7 PUSH32 0x6279130200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP1 MLOAD SWAP2 PUSH32 0xB45090F900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2CF JUMPI PUSH0 SWAP2 PUSH2 0x29A JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH6 0x9184E72A000 DUP2 MSTORE RETURN JUMPDEST SWAP2 POP CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP3 MLOAD PUSH2 0x613 DUP2 PUSH2 0x1E92 JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 DUP3 ADD SWAP2 PUSH1 0x60 DUP4 MSTORE DUP6 DUP2 ADD SWAP3 PUSH0 DUP5 MSTORE PUSH1 0x60 DUP3 ADD PUSH0 DUP2 MSTORE PUSH1 0x80 DUP4 ADD SWAP2 PUSH0 DUP4 MSTORE PUSH1 0xA0 DUP5 ADD SWAP4 PUSH0 DUP6 MSTORE PUSH1 0xC0 DUP2 ADD SWAP6 PUSH0 DUP8 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 DUP12 MLOAD PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x87F JUMPI PUSH0 SWAP2 PUSH2 0x8AD JUMPI JUMPDEST POP DUP4 MSTORE DUP12 MLOAD PUSH32 0x7E361BDE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x87F JUMPI PUSH0 SWAP2 PUSH2 0x889 JUMPI JUMPDEST POP DUP5 MSTORE DUP12 MLOAD PUSH32 0xB45090F900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE DUP11 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x87F JUMPI PUSH0 SWAP2 PUSH2 0x852 JUMPI JUMPDEST POP DUP10 MSTORE PUSH2 0x751 PUSH2 0x20CF JUMP JUMPDEST DUP6 MSTORE DUP12 MLOAD SWAP2 DUP3 SWAP2 PUSH32 0xF29486A100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE DUP2 PUSH1 0x24 PUSH2 0x1A0 SWAP5 DUP6 SWAP4 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x848 JUMPI SWAP3 DUP12 SWAP13 SWAP3 PUSH2 0x7E0 SWAP3 PUSH2 0x7F3 SWAP7 SWAP6 PUSH0 SWAP15 SWAP13 SWAP14 SWAP15 SWAP3 PUSH2 0x81B JUMPI JUMPDEST POP POP DUP11 DUP2 ADD MLOAD ISZERO ISZERO DUP9 MSTORE PUSH2 0x120 PUSH2 0x100 SWAP2 DUP3 DUP2 ADD MLOAD ISZERO ISZERO DUP12 MSTORE ADD MLOAD ISZERO ISZERO DUP11 MSTORE DUP4 MLOAD SWAP14 DUP14 DUP16 SWAP15 SWAP4 DUP16 SWAP5 DUP6 MSTORE MLOAD SWAP4 ADD MSTORE DUP13 ADD SWAP1 PUSH2 0x1FA7 JUMP JUMPDEST SWAP2 MLOAD SWAP1 PUSH1 0x1F NOT DUP12 DUP5 SUB ADD SWAP1 DUP12 ADD MSTORE PUSH2 0x1FA7 JUMP JUMPDEST SWAP6 MLOAD PUSH1 0x60 DUP9 ADD MSTORE MLOAD PUSH1 0x80 DUP8 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xA0 DUP7 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xC0 DUP6 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST PUSH2 0x83A SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x841 JUMPI JUMPDEST PUSH2 0x832 DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2482 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x7AA JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x828 JUMP JUMPDEST DUP13 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 POP DUP11 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x878 JUMPI JUMPDEST PUSH2 0x869 DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1E1 JUMPI MLOAD PUSH0 PUSH2 0x746 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x85F JUMP JUMPDEST DUP14 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x8A5 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x89D DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x228D JUMP JUMPDEST SWAP1 POP PUSH0 PUSH2 0x703 JUMP JUMPDEST PUSH2 0x8C9 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x8C1 DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x25A4 JUMP JUMPDEST PUSH0 PUSH2 0x6C0 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH8 0x9B6E64A8EC60000 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP2 MLOAD SWAP1 PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS SWAP1 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x9AE JUMPI SWAP2 PUSH2 0x1DD SWAP3 PUSH0 SWAP3 PUSH2 0x992 JUMPI JUMPDEST POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1FA7 JUMP JUMPDEST PUSH2 0x9A7 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x8C1 DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x97F JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD SWAP2 PUSH32 0x67E0E07600000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH0 DUP3 PUSH1 0x24 DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xC17 JUMPI PUSH0 SWAP4 PUSH0 SWAP3 PUSH0 SWAP3 PUSH0 SWAP6 PUSH2 0xAED JUMPI JUMPDEST POP SWAP1 PUSH2 0xA65 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP2 MLOAD SWAP7 DUP8 SWAP7 PUSH1 0x80 DUP9 MSTORE PUSH1 0x80 DUP9 ADD SWAP1 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x20 DUP8 DUP3 SUB DUP2 DUP10 ADD MSTORE DUP1 DUP1 DUP8 MLOAD SWAP4 DUP5 DUP2 MSTORE ADD SWAP7 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0xAA9 JUMPI DUP10 DUP9 SUB DUP7 DUP12 ADD MSTORE DUP10 DUP1 PUSH2 0x1DD DUP12 PUSH2 0xA9B DUP13 DUP13 PUSH2 0x1FA7 JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x1FA7 JUMP JUMPDEST SWAP2 DUP5 SWAP9 SWAP10 POP PUSH1 0x60 DUP7 SWAP8 SWAP9 PUSH1 0x1 SWAP4 SWAP6 SWAP8 DUP4 SWAP8 MLOAD DUP1 MLOAD PUSH2 0xAC6 DUP2 PUSH2 0x2023 JUMP JUMPDEST DUP4 MSTORE DUP7 DUP6 DUP3 ADD MLOAD AND DUP6 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO DUP10 DUP3 ADD MSTORE ADD SWAP9 ADD SWAP3 ADD DUP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 PUSH2 0xA7D JUMP JUMPDEST SWAP6 POP SWAP4 POP SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP6 RETURNDATACOPY PUSH2 0xB03 DUP2 DUP6 PUSH2 0x1ECA JUMP JUMPDEST DUP4 ADD SWAP3 PUSH1 0x80 DUP2 DUP6 SUB SLT PUSH2 0x1E1 JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x1E1 JUMPI DUP6 PUSH2 0xB30 SWAP2 DUP5 ADD PUSH2 0x2185 JUMP JUMPDEST SWAP2 PUSH1 0x20 SWAP6 DUP7 DUP3 ADD MLOAD DUP6 DUP2 GT PUSH2 0x1E1 JUMPI DUP3 ADD DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x1E1 JUMPI DUP1 MLOAD SWAP1 PUSH2 0xB58 DUP3 PUSH2 0x1EED JUMP JUMPDEST SWAP9 PUSH2 0xB65 DUP7 MLOAD SWAP11 DUP12 PUSH2 0x1ECA JUMP JUMPDEST DUP3 DUP11 MSTORE DUP1 DUP11 ADD DUP2 PUSH1 0x60 DUP1 SWAP6 MUL DUP5 ADD ADD SWAP3 DUP6 DUP5 GT PUSH2 0x1E1 JUMPI DUP3 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0xBC5 JUMPI POP POP POP POP POP DUP3 DUP3 ADD MLOAD DUP6 DUP2 GT PUSH2 0x1E1 JUMPI DUP2 PUSH2 0xBA3 SWAP2 DUP5 ADD PUSH2 0x222C JUMP JUMPDEST SWAP5 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x1E1 JUMPI PUSH2 0xBBA SWAP3 ADD PUSH2 0x222C JUMP JUMPDEST SWAP2 SWAP5 SWAP3 SWAP2 SWAP4 DUP7 PUSH2 0xA48 JUMP JUMPDEST DUP5 DUP3 DUP8 SUB SLT PUSH2 0x1E1 JUMPI DUP8 MLOAD SWAP1 PUSH2 0xBDA DUP3 PUSH2 0x1E62 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1E1 JUMPI DUP3 MSTORE DUP4 DUP4 ADD MLOAD SWAP1 DUP13 DUP3 AND DUP3 SUB PUSH2 0x1E1 JUMPI DUP3 DUP6 SWAP3 DUP4 DUP10 SWAP6 ADD MSTORE PUSH2 0xC08 DUP12 DUP7 ADD PUSH2 0x2079 JUMP JUMPDEST DUP12 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0xB80 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP2 MLOAD SWAP1 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS SWAP1 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x9AE JUMPI SWAP2 PUSH2 0x1DD SWAP3 PUSH0 SWAP3 PUSH2 0xCC2 JUMPI JUMPDEST POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xCDF SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xCD7 DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2203 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0xCAF JUMP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1E1 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH2 0xD64 SWAP3 PUSH2 0xD06 PUSH2 0x1E1C JUMP JUMPDEST DUP4 MLOAD PUSH32 0xBEABACC800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xDEF JUMPI PUSH2 0xDB5 JUMPI JUMPDEST PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xDE7 JUMPI JUMPDEST DUP2 PUSH2 0xDCE PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1E1 JUMPI PUSH2 0xDE1 PUSH1 0x20 SWAP3 PUSH2 0x2079 JUMP JUMPDEST POP PUSH2 0xDAB JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xDC1 JUMP JUMPDEST POP MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1E1 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1E1 JUMPI PUSH2 0xE29 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x1F05 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1E1 JUMPI PUSH2 0xE3E DUP2 PUSH2 0x2023 JUMP JUMPDEST PUSH2 0xFB4 JUMPI DUP3 JUMPDEST PUSH2 0xE4C PUSH2 0x28F8 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x3 EQ PUSH2 0xF5F JUMPI DUP1 PUSH1 0x4 EQ PUSH2 0xED8 JUMPI DUP1 PUSH1 0x1 EQ PUSH2 0xE95 JUMPI PUSH1 0x2 EQ PUSH2 0xE7F JUMPI PUSH1 0x51 DUP5 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x20 SWAP4 POP SWAP1 PUSH2 0xE8D SWAP2 PUSH2 0x3012 JUMP JUMPDEST SWAP1 JUMPDEST MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 SWAP3 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0xEC5 JUMPI POP PUSH1 0x20 SWAP3 PUSH2 0xEBF SWAP2 PUSH2 0x2B84 JUMP JUMPDEST SWAP1 PUSH2 0xE8F JUMP JUMPDEST PUSH1 0x11 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP3 PUSH0 SWAP2 SWAP1 PUSH8 0xDE0B6B3A7640000 JUMPDEST DUP6 MLOAD DUP5 LT ISZERO PUSH2 0xF23 JUMPI PUSH2 0xF1B PUSH1 0x1 SWAP2 PUSH2 0xF15 PUSH2 0xF03 DUP8 DUP8 PUSH2 0x20BB JUMP JUMPDEST MLOAD PUSH2 0xF0E DUP9 DUP12 PUSH2 0x20BB JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x2BA2 JUMP JUMPDEST SWAP1 PUSH2 0x2C2D JUMP JUMPDEST SWAP4 ADD SWAP3 PUSH2 0xEE7 JUMP JUMPDEST SWAP3 POP SWAP4 POP POP DUP1 ISZERO PUSH2 0xF38 JUMPI PUSH1 0x20 SWAP3 POP SWAP1 PUSH2 0xE8F JUMP JUMPDEST DUP3 PUSH32 0x2654368900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP SWAP3 PUSH0 SWAP2 SWAP1 PUSH8 0xDE0B6B3A7640000 JUMPDEST DUP6 MLOAD DUP5 LT ISZERO PUSH2 0xF23 JUMPI PUSH8 0xDE0B6B3A7640000 PUSH2 0xFAB PUSH1 0x1 SWAP3 PUSH2 0xFA5 PUSH2 0xF93 DUP9 DUP9 PUSH2 0x20BB JUMP JUMPDEST MLOAD PUSH2 0xF9E DUP10 DUP13 PUSH2 0x20BB JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x2E3F JUMP JUMPDEST SWAP1 PUSH2 0x2B71 JUMP JUMPDEST DIV SWAP4 ADD SWAP3 PUSH2 0xF6E JUMP JUMPDEST PUSH1 0x3 PUSH2 0xE44 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP2 MLOAD SWAP2 DUP3 PUSH0 DUP4 SLOAD PUSH2 0xFDD DUP2 PUSH2 0x2041 JUMP JUMPDEST SWAP1 DUP2 DUP5 MSTORE PUSH1 0x20 SWAP6 PUSH1 0x1 SWAP2 DUP8 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x107C JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1020 JUMPI JUMPDEST POP POP POP PUSH2 0x1DD SWAP3 SWAP2 PUSH2 0x1011 SWAP2 SUB DUP6 PUSH2 0x1ECA JUMP JUMPDEST MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1DF7 JUMP JUMPDEST PUSH0 SWAP1 DUP2 MSTORE DUP7 SWAP4 POP SWAP2 SWAP1 PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B JUMPDEST DUP3 DUP5 LT PUSH2 0x1064 JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x1011 PUSH2 0x1DD PUSH2 0xFFE JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x104B JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 DUP3 ADD MSTORE SWAP4 ISZERO ISZERO PUSH1 0x5 SHL DUP7 ADD SWAP1 SWAP4 ADD SWAP4 POP DUP5 SWAP3 POP PUSH2 0x1011 SWAP2 POP PUSH2 0x1DD SWAP1 POP PUSH2 0xFFE JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP2 POP CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH2 0x114C PUSH32 0x0 PUSH2 0x2C4F JUMP JUMPDEST SWAP3 PUSH2 0x1176 PUSH32 0x0 PUSH2 0x2D81 JUMP JUMPDEST DUP2 MLOAD SWAP3 PUSH1 0x20 DUP5 ADD SWAP1 DUP5 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x1207 JUMPI POP SWAP2 PUSH2 0x11E7 SWAP2 PUSH2 0x1DD SWAP5 SWAP4 DUP3 MSTORE PUSH0 DUP5 MSTORE PUSH2 0x11DA DUP3 MLOAD SWAP8 DUP9 SWAP8 PUSH32 0xF00000000000000000000000000000000000000000000000000000000000000 DUP10 MSTORE DUP1 PUSH1 0x20 DUP11 ADD MSTORE DUP9 ADD SWAP1 PUSH2 0x1DF7 JUMP JUMPDEST SWAP2 DUP7 DUP4 SUB SWAP1 DUP8 ADD MSTORE PUSH2 0x1DF7 JUMP JUMPDEST SWAP1 CHAINID PUSH1 0x60 DUP6 ADD MSTORE ADDRESS PUSH1 0x80 DUP6 ADD MSTORE PUSH0 PUSH1 0xA0 DUP6 ADD MSTORE DUP4 DUP3 SUB PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x1FA7 JUMP JUMPDEST PUSH1 0x41 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP2 MLOAD SWAP1 PUSH32 0xF29486A100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 SWAP1 DUP2 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xC17 JUMPI PUSH0 SWAP3 PUSH2 0x12BE JUMPI JUMPDEST POP POP PUSH1 0x60 DUP3 DUP3 ADD MLOAD SWAP2 ADD MLOAD DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH2 0x12D4 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x841 JUMPI PUSH2 0x832 DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP3 DUP1 PUSH2 0x12A7 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x130D PUSH2 0x1E1C JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP3 PUSH1 0x3 NOT DUP5 DUP2 CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP5 GT PUSH2 0x1E1 JUMPI DUP4 CALLDATASIZE SUB ADD SLT PUSH2 0x1E1 JUMPI DUP4 MLOAD SWAP2 PUSH2 0x135E DUP4 PUSH2 0x1E92 JUMP JUMPDEST DUP1 DUP5 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1E1 JUMPI DUP4 MSTORE PUSH1 0x24 DUP2 ADD CALLDATALOAD DUP7 DUP5 ADD MSTORE PUSH1 0x44 DUP2 ADD CALLDATALOAD DUP3 DUP2 GT PUSH2 0x1E1 JUMPI PUSH2 0x1391 SWAP1 DUP6 CALLDATASIZE SWAP2 DUP5 ADD ADD PUSH2 0x1F05 JUMP JUMPDEST DUP6 DUP5 ADD MSTORE PUSH1 0x64 DUP2 ADD CALLDATALOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x84 DUP2 ADD CALLDATALOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA4 DUP2 ADD CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1E1 JUMPI PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC4 DUP2 ADD CALLDATALOAD SWAP1 DUP3 DUP3 GT PUSH2 0x1E1 JUMPI ADD SWAP3 CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0x1E1 JUMPI DUP1 DUP5 ADD CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x1207 JUMPI POP DUP4 MLOAD SWAP1 PUSH2 0x140C DUP7 PUSH1 0x1F NOT PUSH1 0x1F DUP5 ADD AND ADD DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP1 DUP3 MSTORE CALLDATASIZE PUSH1 0x24 DUP3 DUP7 ADD ADD GT PUSH2 0x1E1 JUMPI DUP6 DUP2 PUSH0 SWAP3 PUSH1 0x24 PUSH2 0xE8D SWAP8 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x143B PUSH2 0x2755 JUMP JUMPDEST PUSH2 0x22D1 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP3 PUSH2 0x145E PUSH2 0x1E1C JUMP JUMPDEST PUSH1 0x44 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP6 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP4 PUSH32 0xF7888AEC00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS SWAP1 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xDEF JUMPI PUSH0 SWAP3 PUSH2 0x14E5 JUMPI JUMPDEST POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP DUP3 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x150D JUMPI JUMPDEST PUSH2 0x14FD DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1E1 JUMPI MLOAD SWAP1 DUP4 PUSH2 0x14DE JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x14F3 JUMP JUMPDEST POP CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH32 0x18E79A2000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH8 0x16345785D8A0000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI CALLER PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD SWAP1 SWAP2 SSTORE STOP JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH2 0x15C8 CALLDATASIZE PUSH2 0x1F65 JUMP JUMPDEST SWAP4 SWAP2 SWAP5 PUSH2 0x15D3 PUSH2 0x2755 JUMP JUMPDEST MLOAD SWAP4 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP5 AND SWAP3 LOG3 STOP JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP1 MLOAD PUSH1 0x5 SLOAD SWAP1 SWAP2 DUP3 PUSH0 PUSH2 0x1618 DUP5 PUSH2 0x2041 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 SWAP5 PUSH1 0x1 SWAP1 DUP7 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x16A5 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x164A JUMPI JUMPDEST POP POP PUSH2 0x1DD SWAP3 SWAP2 PUSH2 0x1011 SWAP2 SUB DUP6 PUSH2 0x1ECA JUMP JUMPDEST SWAP1 DUP6 SWAP3 POP PUSH1 0x5 PUSH0 MSTORE PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 SWAP2 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x168D JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x1011 PUSH2 0x1638 JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x1677 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 DUP3 ADD MSTORE SWAP3 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD SWAP1 SWAP3 ADD SWAP3 POP DUP4 SWAP2 POP PUSH2 0x1011 SWAP1 POP PUSH2 0x1638 JUMP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x1703 DUP3 PUSH2 0x1E62 JUMP JUMPDEST PUSH1 0x60 DUP3 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP4 ADD SWAP2 PUSH1 0x60 DUP4 MSTORE DUP2 DUP5 ADD SWAP3 PUSH1 0x60 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 PUSH32 0x0 AND SWAP1 DUP5 MLOAD PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1897 JUMPI SWAP1 PUSH0 SWAP3 SWAP2 DUP4 SWAP2 PUSH2 0x187D JUMPI JUMPDEST POP DUP9 MSTORE PUSH1 0x24 DUP7 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x7E361BDE00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1873 JUMPI PUSH0 SWAP2 PUSH2 0x185A JUMPI JUMPDEST POP DUP2 SWAP6 SWAP3 SWAP6 MSTORE PUSH2 0x17E9 PUSH2 0x28F8 JUMP JUMPDEST DUP5 MSTORE DUP3 MLOAD SWAP5 DUP1 DUP7 MSTORE PUSH1 0x80 DUP7 ADD SWAP3 MLOAD SWAP3 PUSH1 0x60 DUP3 DUP9 ADD MSTORE DUP4 MLOAD DUP1 SWAP2 MSTORE DUP2 PUSH1 0xA0 DUP9 ADD SWAP5 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1844 JUMPI DUP9 DUP1 PUSH2 0x1DD DUP11 DUP11 PUSH2 0x1833 DUP12 DUP12 MLOAD PUSH1 0x1F NOT SWAP4 DUP5 DUP9 DUP5 SUB ADD SWAP1 DUP9 ADD MSTORE PUSH2 0x1FA7 JUMP JUMPDEST SWAP2 MLOAD SWAP1 DUP5 DUP4 SUB ADD PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x1FA7 JUMP JUMPDEST DUP4 MLOAD DUP11 AND DUP7 MSTORE SWAP5 DUP2 ADD SWAP5 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x180D JUMP JUMPDEST PUSH2 0x186E SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x89D DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST PUSH2 0x17DB JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x1891 SWAP2 POP RETURNDATASIZE DUP1 DUP6 DUP4 RETURNDATACOPY PUSH2 0xCD7 DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP11 PUSH2 0x1798 JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 PUSH2 0xE8D PUSH2 0x27C0 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH8 0x29A2241AF62C0000 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH2 0x15C8 CALLDATASIZE PUSH2 0x1F65 JUMP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH0 PUSH1 0x84 PUSH2 0x197B CALLDATASIZE PUSH2 0x1F65 JUMP JUMPDEST DUP7 MLOAD PUSH32 0x15DACBEA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP9 DUP2 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x24 DUP10 ADD MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP9 ADD MSTORE PUSH1 0x64 DUP8 ADD MSTORE DUP6 SWAP3 DUP4 SWAP2 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xDEF JUMPI PUSH2 0xDB5 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 PUSH2 0xE8D PUSH2 0x20CF JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1E1 JUMPI PUSH2 0x1A5B SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0x1F05 JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD SWAP3 PUSH2 0x1A77 PUSH2 0x1A70 DUP6 PUSH1 0x44 CALLDATALOAD SWAP4 PUSH2 0x20BB JUMP JUMPDEST MLOAD SWAP5 PUSH2 0x25CA JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP2 DUP4 GT ISZERO PUSH2 0x1C5D JUMPI PUSH1 0x2 JUMPDEST DUP1 PUSH1 0x3 EQ PUSH2 0x1BE7 JUMPI DUP1 PUSH1 0x4 EQ PUSH2 0x1B4E JUMPI DUP1 PUSH1 0x1 EQ PUSH2 0x1B0C JUMPI PUSH1 0x2 EQ PUSH2 0x1AB7 JUMPI PUSH1 0x51 DUP6 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 DUP2 ISZERO PUSH2 0x1AE6 JUMPI POP PUSH2 0xE8D SWAP3 PUSH1 0x20 SWAP6 SWAP3 PUSH2 0xF15 SWAP3 PUSH15 0xC097CE7BC90715B34B9F0FFFFFFFFF DIV ADD SWAP1 PUSH2 0x2BA2 JUMP JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP DUP1 SWAP3 SWAP4 SWAP5 SWAP2 POP ISZERO PUSH2 0x1B3B JUMPI POP SWAP3 PUSH2 0xF15 PUSH2 0xE8D SWAP3 PUSH1 0x20 SWAP6 PUSH15 0xC097CE7BC90715B34B9F1000000000 DIV SWAP1 PUSH2 0x2BA2 JUMP JUMPDEST PUSH1 0x12 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP2 SWAP3 SWAP4 SWAP1 DUP1 PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH0 SWAP3 JUMPDEST PUSH2 0x1BA7 JUMPI JUMPDEST POP POP POP DUP2 ISZERO PUSH2 0x1B81 JUMPI POP SWAP3 PUSH2 0xF15 PUSH2 0xE8D SWAP3 PUSH1 0x20 SWAP6 SWAP1 PUSH2 0x2BA2 JUMP JUMPDEST PUSH32 0x2654368900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 SWAP2 SWAP4 PUSH8 0xDE0B6B3A7640000 MLOAD DUP6 LT ISZERO PUSH2 0x1BE1 JUMPI SWAP1 DUP3 PUSH2 0x1BD9 DUP2 SWAP4 PUSH2 0xF15 PUSH2 0x1BCF DUP10 DUP7 PUSH2 0x20BB JUMP JUMPDEST MLOAD PUSH2 0xF0E DUP11 PUSH2 0x2086 JUMP JUMPDEST SWAP6 ADD SWAP3 PUSH2 0x1B61 JUMP JUMPDEST SWAP4 PUSH2 0x1B66 JUMP JUMPDEST POP SWAP2 SWAP3 SWAP4 SWAP1 DUP1 PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH0 SWAP3 JUMPDEST PUSH2 0x1C19 JUMPI POP POP POP DUP2 ISZERO PUSH2 0x1B81 JUMPI POP SWAP3 PUSH2 0xF15 PUSH2 0xE8D SWAP3 PUSH1 0x20 SWAP6 SWAP1 PUSH2 0x2BA2 JUMP JUMPDEST SWAP1 SWAP2 SWAP4 PUSH8 0xDE0B6B3A7640000 MLOAD DUP6 LT ISZERO PUSH2 0x1BE1 JUMPI SWAP1 DUP3 PUSH8 0xDE0B6B3A7640000 PUSH2 0x1C54 DUP3 SWAP5 PUSH2 0xFA5 PUSH2 0x1C4A DUP11 DUP8 PUSH2 0x20BB JUMP JUMPDEST MLOAD PUSH2 0xF9E DUP12 PUSH2 0x2086 JUMP JUMPDEST DIV SWAP6 ADD SWAP3 PUSH2 0x1BFA JUMP JUMPDEST DUP2 PUSH2 0x1A85 JUMP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1E1 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH2 0xD64 SWAP3 PUSH2 0x1C83 PUSH2 0x1E1C JUMP JUMPDEST DUP4 MLOAD PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP1 MLOAD PUSH1 0x3 SLOAD SWAP1 SWAP2 DUP3 PUSH0 PUSH2 0x1D04 DUP5 PUSH2 0x2041 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 SWAP5 PUSH1 0x1 SWAP1 DUP7 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x16A5 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1D35 JUMPI POP POP PUSH2 0x1DD SWAP3 SWAP2 PUSH2 0x1011 SWAP2 SUB DUP6 PUSH2 0x1ECA JUMP JUMPDEST SWAP1 DUP6 SWAP3 POP PUSH1 0x3 PUSH0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP2 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x1D78 JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x1011 PUSH2 0x1638 JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x1D62 JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x1E1 JUMPI PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP3 EQ DUP2 MSTORE RETURN JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1E1 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1E1 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1E7E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0xE0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1E7E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1E7E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1E7E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1E7E JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x1F1F DUP2 PUSH2 0x1EED JUMP JUMPDEST SWAP4 PUSH2 0x1F2D PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1ECA JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x1E1 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1F56 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1F48 JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x1E1 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x1E1 JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x1E1 JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1FC6 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1FB8 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1FF9 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1FEB JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x202D JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x206F JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x205B JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x2050 JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x1E1 JUMPI JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 MLOAD DUP2 LT ISZERO PUSH2 0x20A7 JUMPI PUSH1 0x5 SHL PUSH8 0xDE0B6B3A7640020 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x20A7 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xE4DC2AA400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x217A JUMPI PUSH0 SWAP2 PUSH2 0x214B JUMPI POP SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x2172 JUMPI JUMPDEST DUP2 PUSH2 0x2166 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1E1 JUMPI MLOAD SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2159 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x1E1 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x21A0 DUP2 PUSH2 0x1EED JUMP JUMPDEST SWAP4 PUSH2 0x21AE PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1ECA JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x1E1 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x21D7 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1E1 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x21C9 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x1E1 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1E1 JUMPI PUSH2 0x2229 SWAP3 ADD PUSH2 0x2185 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x1E1 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x2247 DUP2 PUSH2 0x1EED JUMP JUMPDEST SWAP4 PUSH2 0x2255 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1ECA JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x1E1 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x227E JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x2270 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SLT PUSH2 0x1E1 JUMPI DUP1 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP2 GT PUSH2 0x1E1 JUMPI DUP2 PUSH2 0x22BA SWAP2 DUP5 ADD PUSH2 0x222C JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x1E1 JUMPI PUSH2 0x2229 SWAP3 ADD PUSH2 0x222C JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 MLOAD PUSH2 0x22E8 PUSH1 0x60 DUP4 ADD SWAP2 DUP3 MLOAD SWAP1 PUSH2 0x20BB JUMP JUMPDEST MLOAD SWAP3 MLOAD SWAP2 PUSH2 0x22FC PUSH1 0x80 DUP3 ADD SWAP4 DUP5 MLOAD SWAP1 PUSH2 0x20BB JUMP JUMPDEST MLOAD SWAP2 DUP2 MLOAD PUSH2 0x2309 DUP2 PUSH2 0x2023 JUMP JUMPDEST PUSH2 0x2312 DUP2 PUSH2 0x2023 JUMP JUMPDEST PUSH2 0x23D1 JUMPI PUSH2 0x232C PUSH2 0x2325 PUSH1 0x20 SWAP3 MLOAD PUSH2 0x25CA JUMP JUMPDEST SWAP5 MLOAD PUSH2 0x25CA JUMP JUMPDEST SWAP2 ADD MLOAD PUSH8 0xDE0B6B3A7640000 SWAP5 DUP6 PUSH2 0x2343 DUP3 PUSH2 0x2B3D JUMP JUMPDEST DIV DUP3 GT PUSH2 0x23A9 JUMPI PUSH2 0x2357 PUSH2 0x235D SWAP3 DUP3 PUSH2 0x2B30 JUMP JUMPDEST SWAP1 PUSH2 0x3012 JUMP JUMPDEST DUP5 DUP5 MUL SWAP4 DUP1 DUP6 DIV DUP7 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2395 JUMPI PUSH2 0x237E PUSH2 0x2384 SWAP3 PUSH2 0x2391 SWAP6 PUSH2 0x2B84 JUMP JUMPDEST SWAP1 PUSH2 0x2BA2 JUMP JUMPDEST DUP4 DUP2 DUP2 SUB SWAP2 LT MUL SWAP1 PUSH2 0x2B71 JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x340A453300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x23EB PUSH2 0x23E4 PUSH1 0x20 SWAP3 SWAP6 SWAP4 SWAP5 SWAP6 MLOAD PUSH2 0x25CA JUMP JUMPDEST SWAP3 MLOAD PUSH2 0x25CA JUMP JUMPDEST SWAP3 ADD MLOAD PUSH8 0xDE0B6B3A7640000 PUSH2 0x2400 DUP6 PUSH2 0x2B3D JUMP JUMPDEST DIV DUP2 GT PUSH2 0x245A JUMPI DUP4 SUB SWAP1 DUP4 DUP3 GT PUSH2 0x2395 JUMPI PUSH2 0x2421 PUSH2 0x237E SWAP3 PUSH2 0x2427 SWAP6 PUSH2 0x3012 JUMP JUMPDEST SWAP3 PUSH2 0x3012 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21F494C589C0000 DUP2 ADD SWAP1 DUP2 GT PUSH2 0x2395 JUMPI PUSH2 0x2229 SWAP2 PUSH2 0x2C2D JUMP JUMPDEST PUSH32 0x64590B9F00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x1A0 SWAP2 DUP2 SWAP1 SUB DUP3 DUP2 SLT PUSH2 0x1E1 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x140 SWAP3 DUP4 DUP6 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP7 DUP6 LT DUP3 DUP7 GT OR PUSH2 0x1E7E JUMPI PUSH1 0x80 SGT PUSH2 0x1E1 JUMPI PUSH2 0x1C0 DUP7 ADD SWAP1 DUP2 GT DUP5 DUP3 LT OR PUSH2 0x1E7E JUMPI PUSH1 0x40 MSTORE PUSH2 0x24D4 DUP2 PUSH2 0x2079 JUMP JUMPDEST DUP4 MSTORE PUSH2 0x24E2 PUSH1 0x20 DUP3 ADD PUSH2 0x2079 JUMP JUMPDEST SWAP3 PUSH2 0x160 SWAP4 DUP5 DUP8 ADD MSTORE PUSH2 0x24F7 PUSH1 0x40 DUP4 ADD PUSH2 0x2079 JUMP JUMPDEST SWAP3 PUSH2 0x180 SWAP4 DUP5 DUP9 ADD MSTORE PUSH2 0x250C PUSH1 0x60 DUP5 ADD PUSH2 0x2079 JUMP JUMPDEST SWAP1 DUP8 ADD MSTORE DUP6 MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1E1 JUMPI PUSH1 0x80 DUP7 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1E1 JUMPI PUSH2 0x259D SWAP5 PUSH2 0x2593 SWAP2 PUSH1 0xA0 DUP10 ADD MSTORE PUSH2 0x2587 PUSH2 0x120 SWAP8 PUSH2 0x257B DUP10 DUP8 ADD PUSH2 0x2079 JUMP JUMPDEST PUSH1 0xC0 DUP12 ADD MSTORE DUP6 ADD PUSH2 0x2079 JUMP JUMPDEST PUSH1 0xE0 DUP10 ADD MSTORE DUP4 ADD PUSH2 0x2079 JUMP JUMPDEST SWAP1 DUP7 ADD MSTORE ADD PUSH2 0x2079 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x1E1 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1E1 JUMPI PUSH2 0x2229 SWAP3 ADD PUSH2 0x222C JUMP JUMPDEST DUP1 PUSH2 0x25F4 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x2621 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x264E JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x3 DUP2 SUB PUSH2 0x267B JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP2 SUB PUSH2 0x26A8 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x5 DUP2 SUB PUSH2 0x26D5 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x6 DUP2 SUB PUSH2 0x2702 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x7 SUB PUSH2 0x272D JUMPI PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0xC1AB6DC100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x2794 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND ADDRESS EQ DUP1 PUSH2 0x28CF JUMPI JUMPDEST ISZERO PUSH2 0x2828 JUMPI PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP3 MSTORE PUSH32 0x0 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1E7E JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST POP PUSH32 0x0 CHAINID EQ PUSH2 0x27FF JUMP JUMPDEST PUSH32 0x0 PUSH2 0x2922 DUP2 PUSH2 0x1EED JUMP JUMPDEST SWAP1 PUSH2 0x2930 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH2 0x293C DUP2 PUSH2 0x1EED JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x20 DUP5 ADD SWAP2 ADD CALLDATASIZE DUP3 CALLDATACOPY DUP3 MLOAD ISZERO PUSH2 0x20A7 JUMPI PUSH32 0x0 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x1 LT ISZERO PUSH2 0x20A7 JUMPI PUSH32 0x0 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2B2C JUMPI DUP2 MLOAD PUSH1 0x2 LT ISZERO PUSH2 0x20A7 JUMPI PUSH32 0x0 PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x2B2C JUMPI DUP2 MLOAD PUSH1 0x3 LT ISZERO PUSH2 0x20A7 JUMPI PUSH32 0x0 PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x4 SWAP1 DUP2 DUP2 GT ISZERO PUSH2 0x2B27 JUMPI DUP3 MLOAD DUP3 LT ISZERO PUSH2 0x2B14 JUMPI PUSH32 0x0 PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x2B27 JUMPI DUP3 MLOAD PUSH1 0x5 LT ISZERO PUSH2 0x2B14 JUMPI PUSH32 0x0 PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x2B27 JUMPI DUP3 MLOAD PUSH1 0x6 LT ISZERO PUSH2 0x2B14 JUMPI PUSH1 0x7 SWAP1 PUSH32 0x0 PUSH1 0xE0 DUP6 ADD MSTORE GT PUSH2 0x2ACC JUMPI POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x7 LT ISZERO PUSH2 0x2B01 JUMPI POP PUSH32 0x0 PUSH2 0x100 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x32 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x32 DUP3 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP POP SWAP1 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x2395 JUMPI JUMP JUMPDEST SWAP1 PUSH8 0x429D069189E0000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2395 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x2710 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2395 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x2395 JUMPI JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2B8E JUMPI DIV SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 SUB PUSH2 0x2BB9 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x2BD4 JUMPI POP POP DUP1 PUSH2 0x2229 SWAP2 PUSH2 0x2C2D JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x2BF8 JUMPI POP POP PUSH2 0x2BF2 DUP2 PUSH2 0x2229 SWAP3 PUSH2 0x2C2D JUMP JUMPDEST DUP1 PUSH2 0x2C2D JUMP JUMPDEST PUSH2 0x2C02 SWAP2 SWAP3 PUSH2 0x308F JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH2 0x2C0E DUP4 PUSH2 0x2B5A JUMP JUMPDEST SWAP2 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH1 0x1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x2395 JUMPI PUSH2 0x2229 SWAP2 PUSH2 0x2B30 JUMP JUMPDEST SWAP1 PUSH2 0x2C37 SWAP2 PUSH2 0x2B71 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x2CA3 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x2C7B JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x2C71 DUP4 PUSH2 0x1EAE JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH32 0xB3512B0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH0 SLOAD SWAP2 PUSH2 0x2CB5 DUP4 PUSH2 0x2041 JUMP JUMPDEST DUP1 DUP4 MSTORE SWAP3 PUSH1 0x20 SWAP1 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x2D3E JUMPI POP PUSH1 0x1 EQ PUSH2 0x2CE0 JUMPI JUMPDEST POP POP PUSH2 0x2229 SWAP3 POP SUB DUP3 PUSH2 0x1ECA JUMP JUMPDEST SWAP2 POP SWAP3 PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x2D26 JUMPI POP PUSH2 0x2229 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x2CD2 JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x2D0B JUMP JUMPDEST SWAP1 POP PUSH1 0x20 SWAP4 POP PUSH2 0x2229 SWAP6 SWAP3 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP2 POP AND DUP3 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x2CD2 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x2DA3 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x2C7B JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x2C71 DUP4 PUSH2 0x1EAE JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD PUSH2 0x2DB8 DUP2 PUSH2 0x2041 JUMP JUMPDEST DUP1 DUP5 MSTORE SWAP4 PUSH1 0x20 SWAP2 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x2D3E JUMPI POP PUSH1 0x1 EQ PUSH2 0x2DE0 JUMPI POP POP PUSH2 0x2229 SWAP3 POP SUB DUP3 PUSH2 0x1ECA JUMP JUMPDEST SWAP2 POP SWAP3 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x2E27 JUMPI POP PUSH2 0x2229 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x2CD2 JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x2E0C JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 DUP1 DUP4 SUB PUSH2 0x2E56 JUMPI POP SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 SWAP1 PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x2E73 JUMPI POP POP DUP1 PUSH2 0x2391 SWAP2 PUSH2 0x2B71 JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x2E97 JUMPI POP PUSH2 0x2E90 DUP3 PUSH2 0x2391 SWAP4 PUSH2 0x2B71 JUMP JUMPDEST DIV DUP1 PUSH2 0x2B71 JUMP JUMPDEST SWAP1 POP PUSH2 0x2EA2 SWAP2 PUSH2 0x308F JUMP JUMPDEST PUSH2 0x2EAB DUP2 PUSH2 0x2B5A JUMP JUMPDEST PUSH1 0x1 PUSH0 NOT SWAP4 DUP5 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 PUSH1 0x1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x2395 JUMPI DUP2 LT ISZERO PUSH2 0x2ED3 JUMPI POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SUB ADD SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP5 GT PUSH2 0x2F5C JUMPI SWAP2 PUSH1 0x20 SWAP4 PUSH1 0x80 SWAP3 PUSH1 0xFF PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND DUP7 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE DUP3 DUP1 MSTORE PUSH1 0x1 GAS STATICCALL ISZERO PUSH2 0x217A JUMPI PUSH0 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x2F52 JUMPI SWAP1 PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 PUSH1 0x1 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP POP POP PUSH0 SWAP2 PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x202D JUMPI DUP1 PUSH2 0x2F79 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x2FA9 JUMPI PUSH32 0xF645EEDF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x2FDD JUMPI POP PUSH32 0xFCE698F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x3 EQ PUSH2 0x2FE7 JUMPI POP JUMP JUMPDEST PUSH32 0xD78BCE0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x3043 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2395 JUMPI PUSH1 0x1 SWAP1 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x2B8E JUMPI PUSH15 0xC097CE7BC90715B34B9F1000000000 SDIV SWAP1 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2B8E JUMPI SDIV SWAP1 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x39B8 JUMPI DUP2 ISZERO PUSH2 0x39B2 JUMPI DUP2 PUSH1 0xFF SHR PUSH2 0x398A JUMPI PUSH24 0xBCE5086492111AEA88F4BB1CA6BCF584181EA8059F76532 DUP2 LT ISZERO PUSH2 0x3962 JUMPI DUP2 PUSH8 0xC7D713B49DA0000 SLT DUP1 PUSH2 0x3951 JUMPI JUMPDEST ISZERO PUSH2 0x35EE JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH15 0xC097CE7BC90715B34B9F1000000000 SWAP1 PUSH2 0x3128 SWAP1 DUP5 MUL DUP3 DUP2 ADD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F68318436F8EA4CB460F000000000 ADD DUP4 MUL PUSH2 0x3085 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV DUP4 DUP6 DUP3 MUL SDIV SWAP2 DUP5 DUP7 DUP5 MUL SDIV SWAP4 DUP6 DUP8 DUP7 MUL SDIV SWAP6 DUP1 DUP9 DUP9 MUL SDIV SWAP8 DUP9 MUL SDIV PUSH1 0xF SWAP1 SDIV SWAP7 PUSH1 0xD SWAP1 SDIV SWAP6 PUSH1 0xB SWAP1 SDIV SWAP5 PUSH1 0x9 SWAP1 SDIV SWAP4 PUSH1 0x7 SWAP1 SDIV SWAP3 PUSH1 0x5 SWAP1 SDIV SWAP2 PUSH1 0x3 SWAP1 SDIV ADD ADD ADD ADD ADD ADD ADD PUSH1 0x1 SHL SWAP2 DUP1 DUP3 DUP2 DUP6 SMOD MUL SDIV SWAP3 SDIV MUL ADD PUSH8 0xDE0B6B3A7640000 SWAP1 JUMPDEST SDIV PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC702BD3A30FC0000 DUP2 DUP2 SGT ISZERO DUP1 PUSH2 0x35DB JUMPI JUMPDEST ISZERO PUSH2 0x35B3 JUMPI DUP2 SWAP1 DUP3 SLT ISZERO DUP1 PUSH2 0x35A0 JUMPI JUMPDEST ISZERO PUSH2 0x3578 JUMPI PUSH0 SWAP2 PUSH0 DUP2 SLT PUSH2 0x3569 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH9 0x6F05B59D3B2000000 DUP2 SLT PUSH2 0x3506 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90FA4A62C4E000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP3 JUMPDEST MUL DUP2 SWAP1 PUSH9 0xAD78EBC5AC62000000 DUP2 SLT ISZERO PUSH2 0x34CD JUMPI JUMPDEST PUSH9 0x56BC75E2D631000000 DUP2 SLT ISZERO PUSH2 0x3493 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B18800000 DUP2 SLT ISZERO PUSH2 0x345B JUMPI JUMPDEST PUSH9 0x15AF1D78B58C400000 DUP2 SLT ISZERO PUSH2 0x3423 JUMPI JUMPDEST PUSH9 0xAD78EBC5AC6200000 DUP2 SLT ISZERO PUSH2 0x33EC JUMPI JUMPDEST DUP3 DUP2 SLT ISZERO PUSH2 0x33B5 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B1880000 DUP2 SLT ISZERO PUSH2 0x337E JUMPI JUMPDEST PUSH9 0x15AF1D78B58C40000 DUP2 SLT ISZERO PUSH2 0x3347 JUMPI JUMPDEST PUSH1 0x2 DUP4 DUP3 DUP1 MUL SDIV SDIV PUSH1 0x3 DUP5 DUP4 DUP4 MUL SDIV SDIV PUSH1 0x4 DUP6 DUP5 DUP4 MUL SDIV SDIV DUP6 PUSH1 0x5 DUP2 DUP7 DUP5 MUL SDIV SDIV PUSH1 0x6 DUP3 DUP8 DUP4 MUL SDIV SDIV PUSH1 0x7 DUP4 DUP9 DUP4 MUL SDIV SDIV SWAP1 PUSH1 0x8 DUP5 DUP10 DUP5 MUL SDIV SDIV SWAP3 PUSH1 0x9 DUP6 DUP11 DUP7 MUL SDIV SDIV SWAP6 PUSH1 0xA DUP7 DUP12 DUP10 MUL SDIV SDIV SWAP8 PUSH1 0xB DUP8 DUP13 DUP12 MUL SDIV SDIV SWAP10 PUSH1 0xC DUP9 DUP14 DUP14 MUL SDIV SDIV SWAP12 ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD MUL SDIV MUL SDIV SWAP1 PUSH0 EQ PUSH2 0x2229 JUMPI PUSH2 0x2229 SWAP1 PUSH2 0x306B JUMP JUMPDEST PUSH9 0x6F5F1775788937937 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C0000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x32C8 JUMP JUMPDEST PUSH9 0x8F00F760A4B2DB55D PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E780000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x32B6 JUMP JUMPDEST PUSH9 0xEBC5FB41746121110 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x32A4 JUMP JUMPDEST PUSH9 0x280E60114EDB805D03 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x329B JUMP JUMPDEST PUSH10 0x127FA27722CC06CC5E2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x3289 JUMP JUMPDEST PUSH10 0x3F1FCE3DA636EA5CF850 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E7800000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x3277 JUMP JUMPDEST PUSH12 0x2DF0AB5A80A22C61AB5A700 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF000000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x3265 JUMP JUMPDEST PUSH15 0x1855144814A7FF805980FF0084000 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E000000 ADD PUSH2 0x3253 JUMP JUMPDEST PUSH9 0x3782DACE9D9000000 DUP2 SLT PUSH2 0x3556 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC87D2531627000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH12 0x1425982CF597CD205CEF7380 SWAP3 PUSH2 0x323E JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP3 PUSH1 0x1 SWAP3 PUSH2 0x323E JUMP JUMPDEST PUSH1 0x1 SWAP3 POP PUSH0 SUB SWAP1 POP PUSH1 0x64 PUSH2 0x31E2 JUMP JUMPDEST PUSH32 0xD4794EFD00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x31D3 JUMP JUMPDEST PUSH32 0xA2F9F7E300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x31C3 JUMP JUMPDEST DUP2 PUSH8 0xDE0B6B3A7640000 SWAP3 PUSH0 SWAP2 DUP5 DUP2 SLT PUSH2 0x393B JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH0 PUSH31 0x1600EF3172E58D2E933EC884FDE10064C63B5372D805E203C0000000000000 DUP3 SLT ISZERO PUSH2 0x3910 JUMPI JUMPDEST PUSH20 0x11798004D755D3C8BC8E03204CF44619E000000 DUP3 SLT ISZERO PUSH2 0x38EF JUMPI JUMPDEST DUP3 MUL SWAP1 DUP1 DUP4 MUL SWAP1 PUSH15 0x1855144814A7FF805980FF0084000 SWAP1 DUP2 DUP4 SLT ISZERO PUSH2 0x38CC JUMPI JUMPDEST POP POP PUSH12 0x2DF0AB5A80A22C61AB5A700 DUP1 DUP3 SLT ISZERO PUSH2 0x38AC JUMPI JUMPDEST POP PUSH10 0x3F1FCE3DA636EA5CF850 DUP1 DUP3 SLT ISZERO PUSH2 0x388C JUMPI JUMPDEST POP PUSH10 0x127FA27722CC06CC5E2 DUP1 DUP3 SLT ISZERO PUSH2 0x386C JUMPI JUMPDEST POP PUSH9 0x280E60114EDB805D03 DUP1 DUP3 SLT ISZERO PUSH2 0x384C JUMPI JUMPDEST POP PUSH9 0xEBC5FB41746121110 DUP1 DUP3 SLT ISZERO PUSH2 0x3835 JUMPI JUMPDEST POP PUSH9 0x8F00F760A4B2DB55D DUP1 DUP3 SLT ISZERO PUSH2 0x3815 JUMPI JUMPDEST POP PUSH9 0x6F5F1775788937937 DUP1 DUP3 SLT ISZERO PUSH2 0x37F5 JUMPI JUMPDEST POP PUSH9 0x6248F33704B286603 DUP1 DUP3 SLT ISZERO PUSH2 0x37D6 JUMPI JUMPDEST POP PUSH9 0x5C548670B9510E7AC DUP1 DUP3 SLT ISZERO PUSH2 0x37B7 JUMPI JUMPDEST POP PUSH2 0x3764 PUSH9 0x56BC75E2D63100000 SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP2 DUP4 ADD SWAP3 ADD MUL PUSH2 0x3085 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV SWAP2 PUSH1 0x3 PUSH1 0x5 PUSH1 0x7 PUSH1 0x9 PUSH1 0xB DUP9 DUP11 DUP10 MUL SDIV SWAP9 DUP1 DUP12 DUP12 MUL SDIV SWAP11 DUP12 MUL SDIV SDIV SWAP9 SDIV SWAP7 SDIV SWAP5 SDIV SWAP3 SDIV ADD ADD ADD ADD ADD PUSH1 0x1 SHL ADD SDIV SWAP1 PUSH0 EQ PUSH2 0x37B2 JUMPI PUSH0 SUB JUMPDEST MUL PUSH2 0x3197 JUMP JUMPDEST PUSH2 0x37AC JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0x56BC75E2D6310000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x3728 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0xAD78EBC5AC620000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x3714 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C40000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x3700 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B1880000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x36EC JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP1 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x36D8 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0xAD78EBC5AC6200000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x36C4 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C400000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x36B0 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B18800000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x369B JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x56BC75E2D631000000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x3686 JUMP JUMPDEST PUSH9 0xAD78EBC5AC62000000 SWAP3 POP PUSH10 0x21E19E0C9BAB2400000 MUL SDIV SWAP2 ADD SWAP1 PUSH0 DUP1 PUSH2 0x366E JUMP JUMPDEST SWAP1 PUSH12 0x1425982CF597CD205CEF7380 PUSH9 0x3782DACE9D9000000 SWAP2 SDIV SWAP2 ADD PUSH2 0x364D JUMP JUMPDEST POP PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP1 SDIV PUSH9 0x6F05B59D3B2000000 PUSH2 0x3630 JUMP JUMPDEST SWAP1 POP PUSH2 0x3947 SWAP2 POP PUSH2 0x306B JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x64 PUSH2 0x3603 JUMP JUMPDEST POP PUSH8 0xF43FC2C04EE0000 DUP3 SLT PUSH2 0x30D5 JUMP JUMPDEST PUSH32 0xD831731100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x22701E000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 RETURNDATACOPY 0xC0 GT DUP11 0xE1 PUSH29 0xF0ADBA7459B5C62781AC22ADB46F73C1467746703BA70B9C43764736F PUSH13 0x634300081B0033000000000000 ","sourceMap":"1931:9868:121:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4124:49:57;1931:9868:121;4124:49:57;;;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1615:50:36;1931:9868:121;1615:50:36;;;1931:9868:121;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1931:9868:121;;;;;;6823:23;;;:::i;:::-;1931:9868;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;1931:9868:121;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;3545:47:57;;;;;1931:9868:121;3545:47:57;;3570:4;3545:47;;;1931:9868:121;;;;;;;;;;;3545:6:57;1931:9868:121;3545:47:57;;;;;;;1931:9868:121;3545:47:57;;;1931:9868:121;;;;;;;;;3545:47:57;;;1931:9868:121;3545:47:57;;1931:9868:121;3545:47:57;;;;;;1931:9868:121;3545:47:57;;;:::i;:::-;;;1931:9868:121;;;;;;;3545:47:57;;;;;;-1:-1:-1;3545:47:57;;;1931:9868:121;;;;;;;;;;;;;;-1:-1:-1;;1931:9868:121;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;5510:15:57;;:26;5506:97;;5696:16;;1931:9868:121;;-1:-1:-1;1931:9868:121;1121:7:109;1931:9868:121;;;-1:-1:-1;1931:9868:121;;;;;;;;;759:395:109;;5696:16:57;1931:9868:121;7021:8:113;6967:25;1931:9868:121;;5644:79:57;1931:9868:121;5644:79:57;;1443:95;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5644:79:57;;;;;:::i;:::-;1931:9868:121;5634:90:57;;5053:20:114;;:::i;:::-;3515:233:115;;;;;;;;;;;;;;;1931:9868:121;;;3515:233:115;1931:9868:121;;3515:233:115;;6967:25:113;:::i;:::-;7021:8;;;;;:::i;:::-;1931:9868:121;5848:15:57;;;5844:88;;1931:9868:121;;;;;;5942:38:57;1931:9868:121;;;5942:38:57;;;;;;;1931:9868:121;5942:38:57;;;;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;;5942:38:57;;:6;;1931:9868:121;5942:38:57;;;;;;;;;;1931:9868:121;5942:38:57;1931:9868:121;5942:38:57;;1931:9868:121;5942:38:57;;;;;;1931:9868:121;5942:38:57;;;:::i;:::-;;;1931:9868:121;;;;;;;:::i;:::-;;5942:38:57;;;-1:-1:-1;5942:38:57;;5844:88;5886:35;;1931:9868:121;5886:35:57;1931:9868:121;;;;;5886:35:57;5506:97;5559:33;;1931:9868:121;5559:33:57;1931:9868:121;;;5559:33:57;1931:9868:121;;;;;;;-1:-1:-1;;1931:9868:121;;;;;;;1615:50:36;1931:9868:121;1615:50:36;;1658:4;1615:50;;;1931:9868:121;1615:50:36;:6;1931:9868:121;1615:6:36;1931:9868:121;1615:6:36;1931:9868:121;1615:50:36;;;;;;;1931:9868:121;1615:50:36;;;;1931:9868:121;;;;;;;;;;;;;-1:-1:-1;;1931:9868:121;;;;;;;;2778:8;1931:9868;;;;;;;;;;-1:-1:-1;;1931:9868:121;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10770:6;1931:9868;;;;;10770:44;;10808:4;10770:44;;;1931:9868;;10770:44;1931:9868;10770:44;;;;;;;;;1931:9868;10770:44;;;1931:9868;10742:72;;;1931:9868;;;10846:39;;10808:4;10846:39;;;1931:9868;;10846:39;1931:9868;10846:39;;;;;;;;;1931:9868;10846:39;;;1931:9868;10824:61;;;1931:9868;;;10926:50;;10808:4;10926:50;;;1931:9868;10926:50;;1931:9868;10926:50;;;;;;;;;1931:9868;10926:50;;;1931:9868;;;;11005:13;;:::i;:::-;1931:9868;;;;11060:35;;;1931:9868;11060:35;;10808:4;11060:35;;;1931:9868;11060:35;1931:9868;11060:35;;;;;;;;;;;;;;;1931:9868;11060:35;1931:9868;11060:35;;1931:9868;11060:35;;;;;;;1931:9868;11130:28;;;;;1931:9868;;;;;11249:31;11188:23;;;;;1931:9868;;;;;11249:31;1931:9868;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1931:9868:121;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11060:35;;;;;;-1:-1:-1;11060:35:121;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;1931:9868;;;;;;;;;10926:50;;;;;;;;;;;;;;;;:::i;:::-;;;1931:9868;;;;;10926:50;;;;;;;;;1931:9868;;;;;;;;;10846:39;;;;;;1931:9868;10846:39;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;10770:44;;;;;;1931:9868;10770:44;;;;;;:::i;:::-;;;;;:::i;:::-;;;;1931:9868;;;;;;-1:-1:-1;;1931:9868:121;;;;;;;;3215:5:52;1931:9868:121;;;;;;;;;;-1:-1:-1;;1931:9868:121;;;;;;;1441:44:36;1931:9868:121;1441:44:36;;1479:4;1441:44;;;1931:9868:121;;1441:6:36;1931:9868:121;1441:6:36;1931:9868:121;1441:6:36;1931:9868:121;1441:44:36;;;;;;;;1931:9868:121;1441:44:36;1931:9868:121;1441:44:36;;;1931:9868:121;;;;;;;;;;;;;;:::i;1441:44:36:-;;;;;;;1931:9868:121;1441:44:36;;;;;;:::i;:::-;;;;;;1931:9868:121;;;;;;;;;;;;;;;;-1:-1:-1;;1931:9868:121;;;;;;;;1247:38:36;1931:9868:121;1247:38:36;;1279:4;1247:38;;;1931:9868:121;;1247:6:36;1931:9868:121;1247:6:36;;;1931:9868:121;1247:38:36;;;;;;;1931:9868:121;;;;;;;1247:38:36;;;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1247:38:36;;;;;;;;;;1931:9868:121;1247:38:36;;;;;;:::i;:::-;;;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;1247:38:36;;;;;;;;1931:9868:121;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1247:38:36;1931:9868:121;;;;;;;;;;;;;;;;-1:-1:-1;;1931:9868:121;;;;;;;892:35:36;1931:9868:121;892:35:36;;921:4;892:35;;;1931:9868:121;;892:6:36;1931:9868:121;892:6:36;1931:9868:121;892:6:36;1931:9868:121;892:35:36;;;;;;;;1931:9868:121;892:35:36;1931:9868:121;892:35:36;;;1931:9868:121;;;;;;;;;;;;;;:::i;892:35:36:-;;;;;;;1931:9868:121;892:35:36;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;1931:9868:121;;;;;;;-1:-1:-1;;1931:9868:121;;;;;;3345:39:57;1931:9868:121;;;:::i;:::-;;;;3345:39:57;;3361:10;3345:39;;;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;3345:39:57;;:6;1931:9868:121;;3345:6:57;1931:9868:121;3345:39:57;;;;;;;;1931:9868:121;;;;;;;;3345:39:57;1931:9868:121;3345:39:57;;1931:9868:121;3345:39:57;;;;;;1931:9868:121;3345:39:57;;;:::i;:::-;;;1931:9868:121;;;;;;;;:::i;:::-;3345:39:57;;;;;;-1:-1:-1;3345:39:57;;;1931:9868:121;;;;;;;;;;;;;;;;-1:-1:-1;;1931:9868:121;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;6029:41;;:135;;6192:23;;:::i;:::-;6182:56;1931:9868;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1931:9868:121;;;;;;;;1744:19:50;;;;;;:::i;:::-;1931:9868:121;;;;;;;;465:4:50;;;;1931:9868:121;;;;;;;;;;;;;;;1625:13:50;1931:9868:121;1625:13:50;;;;:::i;:::-;1931:9868:121;;;;2843:5:52;;-1:-1:-1;;;1931:9868:121;2843:5:52;;1931:9868:121;;2843:5:52;1931:9868:121;-1:-1:-1;1931:9868:121;;;;465:4:50;6467:3:52;1931:9868:121;;6437:28:52;;;;;6498:56;1931:9868:121;6514:11:52;:39;:11;;;;:::i;:::-;1931:9868:121;6532:20:52;;;;:::i;:::-;1931:9868:121;6514:39:52;;:::i;:::-;6498:56;;:::i;:::-;6467:3;1931:9868:121;6422:13:52;;;6437:28;;;;;;6579:14;;6575:67;;1931:9868:121;;;;;;6575:67:52;6616:15;;1931:9868:121;6616:15:52;1931:9868:121;6616:15:52;1931:9868:121;-1:-1:-1;1931:9868:121;;;;465:4:50;4758:3:52;1931:9868:121;;4728:28:52;;;;;465:4:50;838:5;1931:9868:121;4807:11:52;:41;:11;;;;:::i;:::-;1931:9868:121;4827:20:52;;;;:::i;:::-;1931:9868:121;4807:41:52;;:::i;:::-;838:5:50;;:::i;:::-;1931:9868:121;4758:3:52;1931:9868:121;4713:13:52;;;6029:135:121;6131:33;6029:135;;1931:9868;;;;;;;-1:-1:-1;;1931:9868:121;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;1931:9868:121;;;;;;;;;-1:-1:-1;;;1931:9868:121;;;;;;;;;;;;;;;;;;;-1:-1:-1;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1931:9868:121;;-1:-1:-1;1931:9868:121;;-1:-1:-1;1931:9868:121;;-1:-1:-1;1931:9868:121;;;;;;;;-1:-1:-1;;1931:9868:121;;;;;;;;;2951:6:57;1931:9868:121;;;;;;;;;;;-1:-1:-1;;1931:9868:121;;;;;6099:41:114;:5;:41;:::i;:::-;6554:8;:47;:8;:47;:::i;:::-;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;5590:13:114;;1931:9868:121;;;;5625:4:114;1931:9868:121;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;1931:9868:121;;;;;;;;;;;;;-1:-1:-1;;1931:9868:121;;;;;;;1911:35:36;1931:9868:121;1911:35:36;;1940:4;1911:35;;;1931:9868:121;1911:35:36;:6;;;1931:9868:121;1911:6:36;1931:9868:121;1911:6:36;1931:9868:121;1911:35:36;;;;;;;1931:9868:121;1911:35:36;;;1931:9868:121;1986:37:36;;2063:38;1986:37;;;1931:9868:121;2063:38:36;;1931:9868:121;;;;;;;;;;;1911:35:36;;;;;;-1:-1:-1;1911:35:36;;;;;;:::i;:::-;;;;;1931:9868:121;;;;;;-1:-1:-1;;1931:9868:121;;;;;;;;;;:::i;:::-;;;;624:7:109;1931:9868:121;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1931:9868:121;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;495:1:72;1931:9868:121;;;;;;;;;;;;;;436:67:72;;:::i;:::-;495:1;:::i;1931:9868:121:-;;;;;;;;;-1:-1:-1;;1931:9868:121;;;;;;;;:::i;:::-;;;;;;;3082:40:57;;;;;1931:9868:121;3082:40:57;;3107:4;3082:40;;;1931:9868:121;;;;;;3082:6:57;1931:9868:121;3082:40:57;;;;;;;1931:9868:121;3082:40:57;;;1931:9868:121;;;;;;;3082:40:57;;;;;;;;;;;;;;;;;:::i;:::-;;;1931:9868:121;;;;;3082:40:57;;;;;;;;;1931:9868:121;;;;;;-1:-1:-1;;1931:9868:121;;;;;11758:32;1931:9868;11758:32;1931:9868;11758:32;1931:9868;;;;;;-1:-1:-1;;1931:9868:121;;;;;;;;2854:5;1931:9868;;;;;;;;-1:-1:-1;;1931:9868:121;;;;;6339:10:57;-1:-1:-1;1931:9868:121;;;1121:7:109;1931:9868:121;;;;;;;;;;;;;;;;;;;;5175:32:57;1931:9868:121;;;:::i;:::-;436:67:72;;;;;:::i;:::-;1931:9868:121;;;;;;;;;;;5175:32:57;1931:9868:121;;;;;;;-1:-1:-1;;1931:9868:121;;;;;;;991:8:48;1931:9868:121;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;991:8:48;1931:9868:121;;;;;;;;;;;;-1:-1:-1;;;1931:9868:121;;;;;;;;;;;;;;;;;;-1:-1:-1;1931:9868:121;;;;;;;;;;;;;;;;;;;;991:8:48;1931:9868:121;;;;;;;-1:-1:-1;1931:9868:121;;-1:-1:-1;1931:9868:121;;-1:-1:-1;1931:9868:121;;;;;;;;;-1:-1:-1;;1931:9868:121;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11461:6;;;1931:9868;;;;;11461:35;;11490:4;11461:35;;;1931:9868;;11461:35;1931:9868;11461:35;;;;;;;;;;1931:9868;11461:35;;;;;;1931:9868;11447:49;;;1931:9868;;;11539:39;;;;1931:9868;11539:39;;11490:4;11539:39;;;1931:9868;11539:39;;;;;;;1931:9868;;11539:39;;1931:9868;11506:72;;;;;;11613:23;;:::i;:::-;11588:48;;1931:9868;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1931:9868:121;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11539:39;;;;;;1931:9868;11539:39;;;;;;:::i;:::-;;;;1931:9868;;;;;;;;;11461:35;;;;;;;;;;;;;:::i;:::-;;;;;1931:9868;;;;;;;;;;;;;;;-1:-1:-1;;1931:9868:121;;;;;;6533:20:57;;;:::i;1931:9868:121:-;;;;;;-1:-1:-1;;1931:9868:121;;;;;;;;2727:2:57;1931:9868:121;;;;;;;;;-1:-1:-1;;1931:9868:121;;;;;;;;1443:95:57;1931:9868:121;;;;;;;;;-1:-1:-1;;1931:9868:121;;;;;;;;3027:6:52;1931:9868:121;;;;;;;;;4942:26:57;1931:9868:121;;;:::i;:::-;;;;;;4124:49:57;1931:9868:121;;;;;:::i;:::-;;;;4124:49:57;;4144:10;4124:49;;;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;;;;;4124:6:57;1931:9868:121;4124:49:57;;;;;;;;;1931:9868:121;;4190:4:57;1931:9868:121;;;;;;;;;-1:-1:-1;;1931:9868:121;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;1931:9868:121;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;6606:34;6554;1931:9868;;;6554:34;;:::i;:::-;1931:9868;6606:34;;:::i;:::-;1931:9868;;8745:18:52;;;1931:9868:121;;;8778:16:52;8745:82;1931:9868:121;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1931:9868:121;;;;;;;2004:6:50;;;;;;2000:58;;2560:120;9032:34:52;2560:120:50;1931:9868:121;2560:120:50;;8957:57:52;2560:120:50;;;;1931:9868:121;8957:57:52;:::i;2000:58:50:-;2033:14;1931:9868:121;2033:14:50;1931:9868:121;2033:14:50;1931:9868:121;;;;;;;;;;;;;8957:57:52;9032:34;1931:9868:121;;;;;;8957:57:52;:::i;1931:9868:121:-;;;-1:-1:-1;;;1931:9868:121;;;;;;;;;;;;6381:26:52;465:4:50;6422:13:52;1931:9868:121;6417:148:52;1931:9868:121;;;6417:148:52;6579:14;;;;;6575:67;;1931:9868:121;;8957:57:52;9032:34;1931:9868:121;;;;8957:57:52;:::i;6575:67::-;6616:15;1931:9868:121;6616:15:52;1931:9868:121;6616:15:52;6467:3;1931:9868:121;;;465:4:50;1931:9868:121;6437:28:52;;;;;6514:11;;6498:56;6514:11;;:39;:11;;;;:::i;:::-;1931:9868:121;6532:20:52;;;:::i;6498:56::-;6467:3;1931:9868:121;6422:13:52;;;6437:28;;;;1931:9868:121;;;;;;4672:26:52;465:4:50;4713:13:52;1931:9868:121;4708:152:52;1931:9868:121;;;4874:14:52;;;;;4870:67;;1931:9868:121;;8957:57:52;9032:34;1931:9868:121;;;;8957:57:52;:::i;4758:3::-;1931:9868:121;;;465:4:50;1931:9868:121;4728:28:52;;;;;4807:11;;465:4:50;838:5;4807:11:52;;:41;:11;;;;:::i;:::-;1931:9868:121;4827:20:52;;;:::i;838:5:50:-;1931:9868:121;4758:3:52;1931:9868:121;4713:13:52;;;8745:82;;;;1931:9868:121;;;;;;;-1:-1:-1;;1931:9868:121;;;;;;3819:43:57;1931:9868:121;;;:::i;:::-;;;;3819:43:57;;3834:10;3819:43;;;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1931:9868:121;;;;;;;2434:8:57;1931:9868:121;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;2434:8:57;1931:9868:121;;;;;;;;;;;;-1:-1:-1;;;1931:9868:121;;;;;;;;;;;;;;;;;;-1:-1:-1;1931:9868:121;;;;;;;;;;;;;;;;-1:-1:-1;;1931:9868:121;;;;;;;;;;;;;;;876:25:116;1931:9868:121;861:40:116;;1931:9868:121;;;;;-1:-1:-1;;1931:9868:121;;;;;;;;;;;;;;;;;-1:-1:-1;1931:9868:121;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;1931:9868:121;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;-1:-1:-1;;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;1931:9868:121;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1931:9868:121;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1931:9868:121;;;:::o;:::-;-1:-1:-1;;;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;465:4:50;1931:9868:121;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;:::o;2769:110:57:-;1931:9868:121;;;2839:33:57;;2866:4;2839:33;;;1931:9868:121;2839:33:57;:6;1931:9868:121;2839:6:57;1931:9868:121;2839:6:57;1931:9868:121;2839:33:57;;;;;;;-1:-1:-1;2839:33:57;;;2832:40;2769:110;:::o;2839:33::-;;;;;;;;;;;;;;;;;:::i;:::-;;;1931:9868:121;;;;;2769:110:57;:::o;2839:33::-;;;-1:-1:-1;2839:33:57;;;1931:9868:121;;;-1:-1:-1;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;6889:1195::-;7027:24;;;;;;:41;7052:15;;;1931:9868;;;7027:41;;:::i;:::-;1931:9868;7112:24;;7137:16;7112:42;7137:16;;;1931:9868;;;7112:42;;:::i;:::-;1931:9868;;;;;;;:::i;:::-;;;;:::i;:::-;7169:33;;7435:38;7339:37;7491:27;1931:9868;;7339:37;:::i;:::-;1931:9868;;7435:38;:::i;:::-;7491:27;;1931:9868;465:4:50;838:5;;;;;:::i;:::-;1931:9868:121;11030:43:52;;11026:93;;11151:20;1744:19:50;11151:20:52;;;:::i;:::-;1744:19:50;;:::i;:::-;1931:9868:121;;;;;;;;;;;;;;;1625:13:50;11306:20:52;1625:13:50;838:5;1625:13;;:::i;:::-;11306:20:52;;:::i;:::-;5832:87:50;;;;;;;838:5;;:::i;:::-;1931:9868:121;7547:24;:::o;1931:9868::-;-1:-1:-1;;;1931:9868:121;2843:5:52;;;;;1931:9868:121;2843:5:52;11026:93;11096:12;1931:9868:121;11096:12:52;;1931:9868:121;11096:12:52;7165:913:121;7818:38;7722:37;7874:27;1931:9868;;;;;;7722:37;:::i;:::-;1931:9868;;7818:38;:::i;:::-;7874:27;;1931:9868;465:4:50;838:5;;;:::i;:::-;1931:9868:121;13428:46:52;;13424:97;;2843:5;;;;;;;;1744:19:50;;;13666:20:52;1744:19:50;;:::i;:::-;;;:::i;13666:20:52:-;2843:5;;;;;;;;13932:22;;;:::i;13424:97::-;13497:13;1931:9868:121;13497:13:52;;1931:9868:121;13497:13:52;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1931:9868:121;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;8090:712::-;8221:15;;;8247:18;;8240:25;:::o;8217:579::-;8300:1;8286:15;;8300:1;;8312:18;;8305:25;:::o;8282:514::-;8365:1;8351:15;;8365:1;;8377:18;;8370:25;:::o;8347:449::-;8430:1;8416:15;;8430:1;;8442:18;;8435:25;:::o;8412:384::-;8495:1;8481:15;;8495:1;;8507:18;;8500:25;:::o;8477:319::-;8560:1;8546:15;;8560:1;;8572:18;;8565:25;:::o;8542:254::-;8625:1;8611:15;;8625:1;;8637:18;;8630:25;:::o;8607:189::-;8690:1;8676:15;8690:1;;8702:18;8695:25;:::o;8672:124::-;8758:27;1931:9868;8758:27;8495:1;1931:9868;8758:27;509:165:72;1931:9868:121;586:6:72;1931:9868:121;564:10:72;:29;560:108;;509:165::o;560:108::-;616:41;;;564:10;616:41;1931:9868:121;;616:41:72;;3845:262:114;1931:9868:121;3938:11:114;1931:9868:121;3929:4:114;3921:28;:63;;;3845:262;3917:184;;;4007:22;4000:29;:::o;3917:184::-;1931:9868:121;;4204:80:114;;;1931:9868:121;2079:95:114;1931:9868:121;;4226:11:114;1931:9868:121;2079:95:114;;1931:9868:121;4239:14:114;2079:95;;;1931:9868:121;4255:13:114;2079:95;;;1931:9868:121;3929:4:114;2079:95;;;1931:9868:121;2079:95:114;4204:80;;2079:95;1931:9868:121;;;;;;;;;;;;;;4194:91:114;;4060:30;:::o;3921:63::-;3970:14;;3953:13;:31;3921:63;;8808:1054:121;8922:12;1931:9868;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;-1:-1:-1;;1931:9868:121;;;;;;;;;;;;;9082:18;1931:9868;;;;9132:1;1931:9868;;;;9137:18;1931:9868;;;;9187:1;9173:15;;9187:1;;;1931:9868;;9187:1;1931:9868;;;;9215:18;1931:9868;;;;9302:1;9288:15;;9302:1;;;1931:9868;;9302:1;1931:9868;;;;9330:18;1931:9868;;;;9417:1;;9403:15;;;9417:1;;;1931:9868;;;;;;;9445:18;1931:9868;;;;9532:1;9518:15;;9532:1;;;1931:9868;;9532:1;1931:9868;;;;9560:18;1931:9868;;;;9647:1;9633:15;;9647:1;;;1931:9868;;9647:1;1931:9868;;;;9762:1;9675:18;;1931:9868;;;;9748:15;9744:67;;9831:24;8808:1054;:::o;9744:67::-;1931:9868;;9762:1;1931:9868;;;;9790:18;;1931:9868;;;;8808:1054;:::o;1931:9868::-;;;-1:-1:-1;;;;1931:9868:121;;;-1:-1:-1;1931:9868:121;;;;-1:-1:-1;;;;1931:9868:121;;;-1:-1:-1;1931:9868:121;9629:102;9704:24;;;:::o;9284:102::-;9359:24;;:::o;2782:5:52:-;;;;;;;;;;:::o;1931:9868:121:-;;2843:5:52;1931:9868:121;;;;;;;;;;;;;;;:::o;:::-;;638:5:50;1931:9868:121;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::o;:::-;-1:-1:-1;;;1931:9868:121;;;;;;;;4760:637:50;;465:4;;4997:8;;;465:4;;5021:8;;;:::o;4993:398::-;1931:9868:121;5050:8:50;;1931:9868:121;;5081:11:50;;;;;;:::i;5046:345::-;1931:9868:121;5113:9:50;;1931:9868:121;;5155:11:50;;;;5187:21;5155:11;;:::i;:::-;5187:21;;:::i;5109:282::-;5253:20;;;;:::i;:::-;1068:5;1931:9868:121;1068:5:50;;;:::i;:::-;1186:122;-1:-1:-1;;1186:122:50;;;;;;;;1931:9868:121;2782:5:52;;;;;;;5366:14:50;;;:::i;887:427::-;;1068:5;887:427;1068:5;:::i;:::-;1186:122;;-1:-1:-1;;1186:122:50;;;;;;;;887:427;:::o;3385:267:110:-;1390:66;3508:46;;1390:66;;;2652:40;;2706:11;2715:2;2706:11;;2702:69;;1931:9868:121;;;;;;:::i;:::-;2367:90:110;;2311:2;1931:9868:121;;2367:90:110;3570:22;:::o;2702:69::-;2740:20;1931:9868:121;2740:20:110;;1931:9868:121;2740:20:110;3504:142;1931:9868:121;;;-1:-1:-1;1931:9868:121;-1:-1:-1;1931:9868:121;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1390:66:110;;;;;;;;:::i;1931:9868:121:-;;;;-1:-1:-1;1931:9868:121;;;;-1:-1:-1;1931:9868:121;;;;;;;-1:-1:-1;1390:66:110;;-1:-1:-1;;;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1931:9868:121;;;;;;;;;;;;1390:66:110;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;3385:267:110;1390:66;3508:46;;1390:66;;;2652:40;;2706:11;2715:2;2706:11;;2702:69;;1931:9868:121;;;;;;:::i;3504:142:110:-;1931:9868:121;;;-1:-1:-1;6584:16:114;;1931:9868:121;6584:16:114;1931:9868:121;;;;:::i;:::-;;;;;;;6584:16:114;1931:9868:121;;;6584:16:114;;;;1931:9868:121;;;;;1390:66:110;;;;;;;;:::i;1931:9868:121:-;;;;6584:16:114;-1:-1:-1;1931:9868:121;;;-1:-1:-1;1931:9868:121;;;;;;;-1:-1:-1;1390:66:110;;-1:-1:-1;;;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1931:9868:121;;;;;;3736:794:50;465:4;;3975:8;;;465:4;;3999:8;;;;:::o;3971:553::-;4028:8;;1931:9868:121;4028:8:50;;1931:9868:121;;838:5:50;;;;;;:::i;4024:500::-;1931:9868:121;4093:9:50;;1931:9868:121;;838:5:50;;;;;;:::i;:::-;1931:9868:121;838:5:50;;:::i;4089:435::-;4237:20;;;;;:::i;:::-;1068:5;;;:::i;:::-;1931:9868:121;-1:-1:-1;;1186:122:50;;;;;;;;;;2782:5:52;1931:9868:121;2782:5:52;;;;;;;4347:14:50;;;;;4381:8;;;1931:9868:121;4381:8:50;:::o;4343:171::-;1931:9868:121;;4460:21:50;:::o;5140:1530:113:-;;;6199:66;6186:79;;6182:164;;1931:9868:121;;;;;;;;;;;;;;;;;;;;;;;;;;6457:24:113;;;;;;;;;1931:9868:121;6457:24:113;1931:9868:121;;;6495:20:113;6491:113;;6614:49;1931:9868:121;6614:49:113;1931:9868:121;5140:1530:113;:::o;6491:113::-;6531:62;1931:9868:121;6531:62:113;6457:24;6531:62;1931:9868:121;6531:62:113;:::o;6182:164::-;6281:54;;;1931:9868:121;6281:54:113;6301:30;6281:54;;:::o;7196:532::-;1931:9868:121;;;;;;7282:29:113;;;7327:7;;:::o;7278:444::-;1931:9868:121;7378:38:113;;1931:9868:121;;7439:23:113;-1:-1:-1;7439:23:113;1931:9868:121;-1:-1:-1;7439:23:113;7374:348;7492:35;7483:44;;7492:35;;7550:46;;-1:-1:-1;7550:46:113;1931:9868:121;;;-1:-1:-1;7550:46:113;7479:243;7626:30;7617:39;7613:109;;7479:243;7196:532::o;7613:109::-;7679:32;-1:-1:-1;7679:32:113;1931:9868:121;;;-1:-1:-1;7679:32:113;1822:864:50;;2004:6;;2000:58;;465:4;1931:9868:121;;;;;;;;;;;;;;;2560:120:50;;-1:-1:-1;;2560:120:50;;;;;;;;1822:864;:::o;2000:58::-;2033:14;2009:1;2033:14;;2009:1;2033:14;2648:13:51;;;;;;;;:::o;:::-;;;;;;;:::o;4496:2300::-;;4577:6;;4573:131;;4718:6;;4714:45;;1564:4;1931:9868:121;1564:4:51;5129:68;;1931:9868:121;5591:24:51;;;5587:83;;5774:28;2707:26;5774:28;:60;;;4496:2300;5770:720;;;1564:4;;1789;;21319:38;;2648:13;;2593;;;;2707:26;;2648:13;;21319:38;:::i;:::-;2648:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22285:2;2648:13;;;22203:2;2648:13;;;22121:2;2648:13;;;22040:1;2648:13;;;21959:1;2648:13;;;21878:1;2648:13;;;21797:1;2648:13;;2593;;;;;;;2648;;;;;;;;;;;;;2593;1564:4;5770:720;;2648:13;2400:6;6615:36;;;;:76;;;5770:720;6613:79;6609:137;;6771:17;7080:25;;;;:54;;;5770:720;7078:57;7074:112;;1931:9868:121;7316:5:51;1931:9868:121;7316:5:51;;7312:417;;5770:720;-1:-1:-1;9497:3:51;;2789:21;9082:7;;2789:21;;2707:26;;1754:4;9134:12;2845:56;9078:252;;2648:13;9723:23;9785:7;3117:22;9785:7;;;9781:104;;9078:252;3246:22;9902:7;;;9898:104;;9078:252;3368:21;10019:7;;;10015:104;;9078:252;3486:21;10136:7;;;10132:104;;9078:252;3602:21;10253:7;;;10249:104;;9078:252;10370:7;;;;10366:104;;9078:252;3832:20;10487:7;;;10483:104;;9078:252;3947:20;10604:7;;;10600:104;;9078:252;11567:1;2648:13;;;;;;11645:1;2648:13;;;;;;11723:1;2648:13;;;;;;;11801:1;2648:13;;;;;;11879:1;2648:13;;;;;;11957:1;2648:13;;;;;;;12035:1;2648:13;;;;;;;12113:1;2648:13;;;;;;;12191:2;2648:13;;;;;;;12270:2;2648:13;;;;;;;12349:2;2648:13;;;;;;2593;;;;;;;;;;;;;2648;;;;13075:54;;;;;13094:26;;;:::i;10600:104::-;4003:21;2707:26;;;;2648:13;;;10600:104;;;10483;3888:21;2707:26;;;;2648:13;;;10483:104;;;10366;3773:21;2707:26;;;;2648:13;;;10366:104;;;10249;3658:21;2707:26;;;;2648:13;;;10249:104;;;10132;3542:22;2707:26;;;;2648:13;;;10132:104;;;10015;3424:24;2707:26;;;;2648:13;;;10015:104;;;9898;3303:27;2707:26;;;;2648:13;;;9898:104;;;9781;3174:34;;-1:-1:-1;2707:26:51;;9781:104;;9078:252;2953:20;9171:7;;2953:20;;2707:26;;1754:4;9223:12;3008:28;9167:163;9078:252;;9167:163;1754:4;9274:11;9284:1;9167:163;9078:252;;7312:417;7714:4;;-1:-1:-1;1931:9868:121;4181:19:51;;-1:-1:-1;9497:3:51;7312:417;;7074:112;7158:17;1931:9868:121;7158:17:51;;1931:9868:121;7158:17:51;7080:54;7109:25;2349:6;7109:25;;;7080:54;;6609:137;6715:20;1931:9868:121;6715:20:51;;1931:9868:121;6715:20:51;6615:76;6655:36;2349:6;6655:36;;;6615:76;;5770:720;6451:13;1564:4;6451:13;1931:9868:121;14954:10:51;;;;14950:381;;5770:720;16656:14;17116:3;16656:14;1931:9868:121;2648:13:51;16708:16;;;16704:126;;5770:720;2648:13;16848:16;;;16844:126;;5770:720;2648:13;;;;;;;3174:34;;17276:7;;;;17272:94;;5770:720;3303:27;;;17384:7;;;;17380:94;;5770:720;3424:24;;17492:7;;;;17488:94;;5770:720;3542:22;;17600:7;;;;17596:94;;5770:720;3658:21;;17708:7;;;;17704:94;;5770:720;3773:21;;17816:7;;;;17812:94;;5770:720;3888:21;;17924:7;;;;17920:94;;5770:720;4003:21;;18032:7;;;;18028:94;;5770:720;4120:21;;18140:8;;;;18136:97;;5770:720;4237:21;;18251:8;;;;18247:97;;5770:720;1754:4;18891:38;1754:4;2593:13;;2707:26;2593:13;;;2707:26;;2648:13;18891:38;:::i;:::-;2648:13;;;;;;;;;;;;;;;;;;19369:1;19450;19531;19612;19693:2;2648:13;;;;;;;;;;;;;;;;;;;;;;;;2593;;;;;2648;;2593;2648;20303:35;;;;;1931:9868:121;4181:19:51;20303:35;2648:13;5770:720;;20303:35;;;18247:97;1754:4;4181:19;2648:13;;;2593;;18247:97;;;;18136;1754:4;4063:20;2648:13;;;2593;;18136:97;;;;18028:94;1754:4;3947:20;2648:13;;;2593;;18028:94;;;;17920;1754:4;3832:20;2648:13;;;2593;;17920:94;;;;17812;1754:4;2648:13;;;;2593;;17812:94;;;;17704;1754:4;3602:21;2648:13;;;2593;;17704:94;;;;17596;1754:4;3486:21;2648:13;;;2593;;17596:94;;;;17488;1754:4;3368:21;2648:13;;;2593;;17488:94;;;;17380;1754:4;3246:22;2648:13;;;2593;;17380:94;;;;17272;3117:22;2648:13;;;;;2593;;17272:94;;;;;16844:126;2648:13;3008:28;2953:20;2648:13;;2593;;16844:126;;16704;2648:13;2845:56;2648:13;;2789:21;16704:126;;14950:381;15248:21;;;;;;:::i;:::-;15316:4;;17116:3;14950:381;;5774:60;5806:28;2593:13;5806:28;;5774:60;;5587:83;5638:21;1931:9868:121;5638:21:51;;1931:9868:121;5638:21:51;5129:68;5169:17;1931:9868:121;5169:17:51;;1931:9868:121;5169:17:51;4714:45;4740:8;;1931:9868:121;4740:8:51;:::o;4573:131::-;4671:22;;1564:4;4671:22;:::o"},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","PERMIT_TYPEHASH()":"30adf81f","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","computeBalance(uint256[],uint256,uint256)":"16a0b3e0","computeInvariant(uint256[],uint8)":"984de9e8","decimals()":"313ce567","eip712Domain()":"84b0196e","emitApproval(address,address,uint256)":"5687f2b8","emitTransfer(address,address,uint256)":"23de6651","getAggregateFeePercentages()":"81fa807c","getCurrentLiveBalances()":"b156aa0a","getMaximumInvariantRatio()":"273c1adf","getMaximumSwapFeePercentage()":"654cf15d","getMinimumInvariantRatio()":"b677fa56","getMinimumSwapFeePercentage()":"ce20ece7","getNormalizedWeights()":"f89f27ed","getRate()":"679aefce","getStaticSwapFeePercentage()":"d335b0cf","getTokenInfo()":"abb1dc44","getTokens()":"aa6ca808","getVault()":"8d928af8","getWeightedPoolDynamicData()":"c0bc6f33","getWeightedPoolImmutableData()":"53b79bd7","incrementNonce()":"627cdcb9","name()":"06fdde03","nonces(address)":"7ecebe00","onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))":"72c98186","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","supportsInterface(bytes4)":"01ffc9a7","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"numTokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"normalizedWeights\",\"type\":\"uint256[]\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"}],\"internalType\":\"struct WeightedPool.NewPoolParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BaseOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"ERC2612ExpiredSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC2612InvalidSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExponentOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"name\":\"InvalidAccountNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExponent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidShortString\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxInRatio\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxOutRatio\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinWeight\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NormalizedWeightInvariant\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProductOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"StringTooLong\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WeightedPoolBptRateUnsupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroInvariant\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"tokenInIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"invariantRatio\",\"type\":\"uint256\"}],\"name\":\"computeBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"enum Rounding\",\"name\":\"rounding\",\"type\":\"uint8\"}],\"name\":\"computeInvariant\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"emitApproval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"emitTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAggregateFeePercentages\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNormalizedWeights\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWeightedPoolDynamicData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct WeightedPoolDynamicData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWeightedPoolImmutableData\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"normalizedWeights\",\"type\":\"uint256[]\"}],\"internalType\":\"struct WeightedPoolImmutableData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"incrementNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"request\",\"type\":\"tuple\"}],\"name\":\"onSwap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Weighted Pools are designed for uncorrelated assets, and use `WeightedMath` (from Balancer v1 and v2) to compute the price curve. There can be up to 8 tokens in a weighted pool (same as v2), and the normalized weights (expressed as 18-decimal floating point numbers), must sum to FixedPoint.ONE. Weights cannot be changed after deployment. The swap fee percentage is bounded by minimum and maximum values (same as were used in v2).\",\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"ERC2612ExpiredSignature(uint256)\":[{\"params\":{\"deadline\":\"The permit deadline that expired\"}}],\"ERC2612InvalidSigner(address,address)\":[{\"params\":{\"owner\":\"The address of the owner (expected value of the signature provider)\",\"signer\":\"The address corresponding to the signature provider\"}}],\"InvalidAccountNonce(address,uint256)\":[{\"details\":\"The nonce used for an `account` is not the expected current nonce.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"WeightedPoolBptRateUnsupported()\":[{\"details\":\"It is not safe to nest Weighted Pools as WITH_RATE tokens in other pools, where they function as their own rate provider. The default `getRate` implementation from `BalancerPoolToken` computes the BPT rate using the invariant, which has a non-trivial (and non-linear) error. Without the ability to specify a rounding direction, the rate could be manipulable. It is fine to nest Weighted Pools as STANDARD tokens, or to use them with external rate providers that are stable and have at most 1 wei of rounding error (e.g., oracle-based).\"}],\"ZeroInvariant()\":[{\"details\":\"Most commonly, this happens when a token balance is zero.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"computeBalance(uint256[],uint256,uint256)\":{\"details\":\"Similar to V2's `_getTokenBalanceGivenInvariantAndAllOtherBalances` in StableMath. The pool must round up for the Vault to round in the protocol's favor when calling this function.\",\"params\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\",\"invariantRatio\":\"The ratio of the new invariant (after an operation) to the old\",\"tokenInIndex\":\"The index of the token we're computing the balance for, sorted in token registration order\"},\"returns\":{\"newBalance\":\"The new balance of the selected token, after the operation\"}},\"computeInvariant(uint256[],uint8)\":{\"details\":\"This function computes the invariant based on current balances (and potentially other pool state). The rounding direction must be respected for the Vault to round in the pool's favor when calling this function. If the invariant computation involves no precision loss (e.g. simple sum of balances), the same result can be returned for both rounding directions. You can think of the invariant as a measure of the \\\"value\\\" of the pool, which is related to the total liquidity (i.e., the \\\"BPT rate\\\" is `invariant` / `totalSupply`). Two critical properties must hold: 1) The invariant should not change due to a swap. In practice, it can *increase* due to swap fees, which effectively add liquidity after the swap - but it should never decrease. 2) The invariant must be \\\"linear\\\"; i.e., increasing the balances proportionally must increase the invariant in the same proportion: inv(a * n, b * n, c * n) = inv(a, b, c) * n Property #1 is required to prevent \\\"round trip\\\" paths that drain value from the pool (and all LP shareholders). Intuitively, an accurate pricing algorithm ensures the user gets an equal value of token out given token in, so the total value should not change. Property #2 is essential for the \\\"fungibility\\\" of LP shares. If it did not hold, then different users depositing the same total value would get a different number of LP shares. In that case, LP shares would not be interchangeable, as they must be in a fair DEX.\",\"params\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\",\"rounding\":\"Rounding direction to consider when computing the invariant\"},\"returns\":{\"_0\":\"The calculated invariant of the pool, represented as a uint256\"}},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"emitApproval(address,address,uint256)\":{\"details\":\"Emit the Approval event. This function can only be called by the MultiToken.\"},\"emitTransfer(address,address,uint256)\":{\"details\":\"Emit the Transfer event. This function can only be called by the MultiToken.\"},\"getAggregateFeePercentages()\":{\"details\":\"These are determined by the current protocol and pool creator fees, set in the `ProtocolFeeController`.\",\"returns\":{\"aggregateSwapFeePercentage\":\"The aggregate percentage fee applied to swaps\",\"aggregateYieldFeePercentage\":\"The aggregate percentage fee applied to yield\"}},\"getCurrentLiveBalances()\":{\"details\":\"Note that live balances will not necessarily be accurate if the pool is in Recovery Mode. Withdrawals in Recovery Mode do not make external calls (including those necessary for updating live balances), so if there are withdrawals, raw and live balances will be out of sync until Recovery Mode is disabled.\",\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getMaximumInvariantRatio()\":{\"returns\":{\"_0\":\"The maximum invariant ratio for a pool during unbalanced add liquidity\"}},\"getMaximumSwapFeePercentage()\":{\"returns\":{\"_0\":\"The maximum swap fee percentage for a pool\"}},\"getMinimumInvariantRatio()\":{\"returns\":{\"_0\":\"The minimum invariant ratio for a pool during unbalanced remove liquidity\"}},\"getMinimumSwapFeePercentage()\":{\"returns\":{\"_0\":\"The minimum swap fee percentage for a pool\"}},\"getNormalizedWeights()\":{\"returns\":{\"_0\":\"The normalized weights, sorted in token registration order\"}},\"getRate()\":{\"details\":\"The meaning of this rate depends on the context. Note that there may be an error associated with a token rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface does not take a rounding direction or return an error, so great care must be taken when interpreting and using rates in downstream computations.\",\"returns\":{\"_0\":\"The current token rate\"}},\"getStaticSwapFeePercentage()\":{\"returns\":{\"_0\":\"18-decimal FP value of the static swap fee percentage\"}},\"getTokenInfo()\":{\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"Pool tokens, sorted in token registration order\"}},\"getTokens()\":{\"returns\":{\"tokens\":\"List of tokens in the pool, sorted in registration order\"}},\"getWeightedPoolDynamicData()\":{\"returns\":{\"data\":\"A struct containing all dynamic weighted pool parameters\"}},\"getWeightedPoolImmutableData()\":{\"returns\":{\"data\":\"A struct containing all immutable weighted pool parameters\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"_0\":\"Calculated amount for the swap operation\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"BaseOutOfBounds()\":[{\"notice\":\"This error is thrown when a base is not within an acceptable range.\"}],\"ERC2612ExpiredSignature(uint256)\":[{\"notice\":\"Operation failed due to an expired permit signature.\"}],\"ERC2612InvalidSigner(address,address)\":[{\"notice\":\"Operation failed due to a non-matching signature.\"}],\"ExponentOutOfBounds()\":[{\"notice\":\"This error is thrown when a exponent is not within an acceptable range.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"InvalidExponent()\":[{\"notice\":\"This error is thrown when an exponent used in the exp function is not within an acceptable range.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"MaxInRatio()\":[{\"notice\":\"User attempted to add a disproportionate amountIn of tokens to a pool.\"}],\"MaxOutRatio()\":[{\"notice\":\"User attempted to extract a disproportionate amountOut of tokens from a pool.\"}],\"MinWeight()\":[{\"notice\":\"Indicates that one of the pool tokens' weight is below the minimum allowed.\"}],\"NormalizedWeightInvariant()\":[{\"notice\":\"Indicates that the sum of the pool tokens' weights is not FixedPoint.ONE.\"}],\"ProductOutOfBounds()\":[{\"notice\":\"This error is thrown when the exponent * ln(base) is not within an acceptable range.\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"WeightedPoolBptRateUnsupported()\":[{\"notice\":\"`getRate` from `IRateProvider` was called on a Weighted Pool.\"}],\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}],\"ZeroInvariant()\":[{\"notice\":\"Error thrown when the calculated invariant is zero, indicating an issue with the invariant calculation.\"}]},\"kind\":\"user\",\"methods\":{\"computeBalance(uint256[],uint256,uint256)\":{\"notice\":\"Computes a new token balance, given the invariant growth ratio and all other balances.\"},\"computeInvariant(uint256[],uint8)\":{\"notice\":\"Computes the pool's invariant.\"},\"getAggregateFeePercentages()\":{\"notice\":\"Gets the aggregate swap and yield fee percentages for a pool.\"},\"getCurrentLiveBalances()\":{\"notice\":\"Gets the current live balances of the pool as fixed point, 18-decimal numbers.\"},\"getNormalizedWeights()\":{\"notice\":\"Get the normalized weights.\"},\"getRate()\":{\"notice\":\"An 18 decimal fixed point number representing the exchange rate of one token to another related token.\"},\"getStaticSwapFeePercentage()\":{\"notice\":\"Fetches the static swap fee percentage for the pool.\"},\"getTokenInfo()\":{\"notice\":\"Gets the raw data for the pool: tokens, token info, raw balances, and last live balances.\"},\"getTokens()\":{\"notice\":\"Gets the tokens registered in the pool.\"},\"getWeightedPoolDynamicData()\":{\"notice\":\"Get dynamic pool data relevant to swap/add/remove calculations.\"},\"getWeightedPoolImmutableData()\":{\"notice\":\"Get immutable pool data relevant to swap/add/remove calculations.\"},\"incrementNonce()\":{\"notice\":\"Increment the sender's nonce to revoke any currently granted (but not yet executed) `permit`.\"},\"onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Execute a swap in the pool.\"},\"version()\":{\"notice\":\"Getter for the version.\"}},\"notice\":\"Standard Balancer Weighted Pool, with fixed weights.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/WeightedPool.sol\":\"WeightedPool\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol\":{\"keccak256\":\"0xa7adbaf80bc9cfa44e41776f632b5d7cb2c02c562a124c0e4cb17f06c4a54db3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e4fdf59a7f3dc3b7d6bb6f466e4a0a6263b66c0fc12492baf06ec8c6fdcc2398\",\"dweb:/ipfs/QmWxLpicLjGdgGQ8GjuN9YfDyVapYWwzdgET86ucs9hmFa\"]},\"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol\":{\"keccak256\":\"0xae65b6b0800fed858a56df5dc8fe7eda072f7d409f0e0d4c63ad8fca5f0c8d33\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4503850853e86c655d3dba125613822c26552c834215e24bd88c2ac0f29675d4\",\"dweb:/ipfs/QmQ4dGpVpRcyhVfer2qsnbX2tTktwVXoX2bvoodrh3tinR\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol\":{\"keccak256\":\"0xa97e2a0fd95d78dcecf67fd8c554ced63bbd6da372b6f8b12f16ad526b6ec608\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d98ad2022f9e3653fd63daca8c0725c7ccbd4f63d0d27c413e90669ce7284a96\",\"dweb:/ipfs/QmZ62RpJj3qSUrrdVD3H72qEszTUuvGkFLSBXAKMhBn5nX\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/WeightedMath.sol\":{\"keccak256\":\"0x4d9faedc605adaa52594ae9949374d87bce13107f887edc593a0b9b7a5c91042\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://648e918881e78d62505f049d2f88335e679aa01b82d403ac80b854d9d85efcc2\",\"dweb:/ipfs/QmXA36vdUX611mTH3V9qNGM3uF591TB3xaADqWG41NFmWP\"]},\"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x79f2ec4f7314bd1c3555368ff02bb9d382489dc8bbd7efbbf306f9a5084f3bec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a57c155451c5b1c1c59a27770754ccd9ba1be9344db6ac45b8744eba5fa4fa2f\",\"dweb:/ipfs/QmarkRwGaS3egg1FaQH6LibqjT6NocVUbD1jMPWtFxFaQV\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"contracts/WeightedPool.sol\":{\"keccak256\":\"0x5bc730e5864de66b59da231ec3c083adc625c181c1d2980e043b2c3135828b83\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d38330349ca047499752eed9e3468191cb9219fa0a57ebec2b3695e87275b657\",\"dweb:/ipfs/QmeJVT9jQXg7yMZ6zyUsQsZXbgt1QqktYpqRV9Fj4cLECX\"]}},\"version\":1}"}},"contracts/WeightedPool8020Factory.sol":{"WeightedPool8020Factory":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"uint32","name":"pauseWindowDuration","type":"uint32"},{"internalType":"string","name":"factoryVersion","type":"string"},{"internalType":"string","name":"poolVersion","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Create2EmptyBytecode","type":"error"},{"inputs":[],"name":"Create2FailedDeployment","type":"error"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"Create2InsufficientBalance","type":"error"},{"inputs":[],"name":"Disabled","type":"error"},{"inputs":[],"name":"IndexOutOfBounds","type":"error"},{"inputs":[],"name":"PoolPauseWindowDurationOverflow","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"StandardPoolWithCreator","type":"error"},{"anonymous":false,"inputs":[],"name":"FactoryDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreated","type":"event"},{"inputs":[{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig","name":"highWeightTokenConfig","type":"tuple"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig","name":"lowWeightTokenConfig","type":"tuple"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"create","outputs":[{"internalType":"address","name":"pool","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDefaultLiquidityManagement","outputs":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getDefaultPoolHooksContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"constructorArgs","type":"bytes"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"getDeploymentAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNewPoolPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOriginalPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowDuration","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"highWeightToken","type":"address"},{"internalType":"contract IERC20","name":"lowWeightToken","type":"address"}],"name":"getPool","outputs":[{"internalType":"address","name":"pool","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolVersion","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPools","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getPoolsInRange","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolFromFactory","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_string_fromMemory":{"entryPoint":1108,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":1071,"id":null,"parameterSlots":1,"returnSlots":1},"clear_storage_range_bytes1":{"entryPoint":1245,"id":null,"parameterSlots":2,"returnSlots":0},"extract_byte_array_length":{"entryPoint":1189,"id":null,"parameterSlots":1,"returnSlots":1},"extract_used_part_and_set_length_of_short_byte_array":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6101006040523461042b576164c88038038061001a8161042f565b928339810160808282031261042b578151916001600160a01b038316830361042b57602092838201519363ffffffff8086169586810361042b5760408501516001600160401b03959086811161042b5787610076918301610454565b96606082015187811161042b5761008d9201610454565b966146439461009d85870161042f565b95808752611e85868801393060805260a052420190814211610417578282116104085760c0521660e052815193838511610366576003946100de86546104a5565b93601f948581116103dc575b50839085831160011461037a5761011892915f9183610217575b50508160011b915f199060031b1c19161790565b85555b80518481116103665760049161013183546104a5565b858111610330575b5083908583116001146102ce5761016692915f91836102175750508160011b915f199060031b1c19161790565b81555b85519384116102bb575060059361018085546104a5565b838111610287575b508192841160011461022257505081906101b793945f926102175750508160011b915f199060031b1c19161790565b90555b60405161199190816104f482396080518161148a015260a0518181816101ca0152818161028c01528181610a8f01528181610bb801528181610ed80152611874015260c0518161031f015260e05181818161012901526114f20152f35b015190505f80610104565b9091601f19841695855f52835f20935f905b88821061026f575050846001969710610256575b50505050811b0190556101ba565b01519060f8845f19921b161c191690555f808080610248565b80600185978294968601518155019601930190610234565b6102ac90865f52835f2085808801891c8201928689106102b2575b01881c01906104dd565b5f610188565b925081926102a2565b604190634e487b7160e01b5f525260245ffd5b90601f19831691845f52855f20925f5b8782821061031a575050908460019594939210610303575b505050811b018155610169565b01515f19838a1b60f8161c191690555f80806102f6565b60018596829396860151815501950193016102de565b61035790845f52855f208780860160051c82019288871061035d575b0160051c01906104dd565b5f610139565b9250819261034c565b634e487b7160e01b5f52604160045260245ffd5b90601f19831691885f52855f20925f5b878282106103c65750509084600195949392106103af575b505050811b01855561011b565b01515f19838a1b60f8161c191690555f80806103a2565b600185968293968601518155019501930161038a565b61040290885f52855f208780860160051c82019288871061035d570160051c01906104dd565b5f6100ea565b6368755a1160e01b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761036657604052565b81601f8201121561042b578051906001600160401b03821161036657610483601f8301601f191660200161042f565b928284526020838301011161042b57815f9260208093018386015e8301015290565b90600182811c921680156104d3575b60208310146104bf57565b634e487b7160e01b5f52602260045260245ffd5b91607f16916104b4565b8181106104e8575050565b5f81556001016104dd56fe60806040526004361015610011575f80fd5b5f5f358060e01c908163193ad50f1461101e5781632f2770db14610e57575080633f819b6f14610e2857806344f6fec714610d935780634bef86d9146106b8578063531aa03e1461065057806353a72f7e1461052957806354fd4d501461044a5780636634b75314610401578063673a2a1f146103665780636c57f5a91461034357806378da80cb14610302578063851c1bb3146102b05780638d928af81461025f5780638eec5d7014610241578063aaabadc514610176578063db035ebc1461014d578063e9d56e191461010c5763ec888061146100ee575f80fd5b34610109578060031936011261010957602090604051908152f35b80fd5b5034610109578060031936011261010957602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461010957806003193601126101095760206101686114f0565b63ffffffff60405191168152f35b50346101095780600319360112610109576040517faaabadc500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa9182156102365760209392610207575b5060405191168152f35b610228919250833d851161022f575b61022081836110ca565b8101906114c4565b905f6101fd565b503d610216565b6040513d85823e3d90fd5b50346101095780600319360112610109576020600154604051908152f35b5034610109578060031936011261010957602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461010957602060031936011261010957600435907fffffffff00000000000000000000000000000000000000000000000000000000821682036101095760206102fa8361145f565b604051908152f35b5034610109578060031936011261010957602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5034610109578060031936011261010957602060ff600254166040519015158152f35b5034610109578060031936011261010957604051600180548083528184526020808401947fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf69392915b8282106103d6576103d2866103c6818a03826110ca565b6040519182918261112c565b0390f35b845473ffffffffffffffffffffffffffffffffffffffff1687529586019593830193908301906103af565b50346101095760206003193601126101095760ff604060209273ffffffffffffffffffffffffffffffffffffffff610437611109565b1681528084522054166040519015158152f35b50346101095780600319360112610109576040516004545f8261046c836111a1565b91828252602093600190856001821691825f146105095750506001146104ae575b5061049a925003836110ca565b6103d260405192828493845283019061106d565b84915060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b905f915b8583106104f157505061049a93508201018561048d565b805483890185015287945086939092019181016104da565b60ff19168582015261049a95151560051b850101925087915061048d9050565b5034610109576040600319360112610109576004359060243560019260015480821015610628578061055b84846113f0565b116105e7575b5061056b82611397565b9261057960405194856110ca565b828452601f1961058884611397565b013660208601375b8281106105a557604051806103d2868261112c565b8073ffffffffffffffffffffffffffffffffffffffff6105ce6105c98894866113f0565b61142a565b90549060031b1c166105e082876113af565b5201610590565b9080925081039081116105fb57905f610561565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6004847f4e23d035000000000000000000000000000000000000000000000000000000008152fd5b50346101095760406003193601126101095761066a611109565b73ffffffffffffffffffffffffffffffffffffffff60243581811681036106b457826106a58261069f6106ab946020976115be565b9261191f565b90611342565b60405191168152f35b5f80fd5b346106b457600319360161018081126106b4576080136106b4576040516106de81611092565b60043573ffffffffffffffffffffffffffffffffffffffff811681036106b457815260243560028110156106b457602082015260443573ffffffffffffffffffffffffffffffffffffffff811681036106b457604082015260643580151581036106b457606082015260807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c3601126106b45760405161077d81611092565b60843573ffffffffffffffffffffffffffffffffffffffff811681036106b457815260a43560028110156106b457602082015260c43573ffffffffffffffffffffffffffffffffffffffff811681036106b457604082015260e43580151581036106b457606082015260607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefc3601126106b457604051916060830183811067ffffffffffffffff821117610c0a576040526101043573ffffffffffffffffffffffffffffffffffffffff811681036106b45783526101243573ffffffffffffffffffffffffffffffffffffffff811681036106b45760208401526101443573ffffffffffffffffffffffffffffffffffffffff8116908181036106b4576040850152610d6b5773ffffffffffffffffffffffffffffffffffffffff8151169073ffffffffffffffffffffffffffffffffffffffff83511690604051936108e2856110ae565b600285525f5b60408110610d54575061097f9291610974916109626040519261090a846110ae565b60028452604036602086013785881115610d3c575f906702c68af0bb14000061095060ff8060015b16941687670b1a2bc2ec50000061094a87849b6113af565b526113af565b5261095b828b6113af565b52886113af565b5061096d82886113af565b52856113af565b5061069f81846115be565b604051916109b183602080820193610996856112b6565b90805192839101825e015f815203601f1981018552846110ca565b825115610d145773ffffffffffffffffffffffffffffffffffffffff9251905ff516908115610cec576109e2611527565b815f525f60205260405f20600160ff1982541617905560015468010000000000000000811015610c0a57806001610a1c920160015561142a565b81549060031b9073ffffffffffffffffffffffffffffffffffffffff85831b921b1916179055817f83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc5f80a2610a6f61117d565b610a776114f0565b9373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156106b4579390916040519485927feeec802f0000000000000000000000000000000000000000000000000000000084526101a484018660048601526101a06024860152835180915260206101c486019401905f5b818110610c42575050505f9473ffffffffffffffffffffffffffffffffffffffff604086959463ffffffff610b9e956101643560448a01521660648801528860848801528281511660a48801528260208201511660c488015201511660e4850152856101048501526101248401906060809180511515845260208101511515602085015260408101511515604085015201511515910152565b03818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610c3757610bf0575b602090604051908152f35b67ffffffffffffffff8211610c0a57602091604052610be5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040513d5f823e3d90fd5b918097965094909293945173ffffffffffffffffffffffffffffffffffffffff81511682526020810151906002821015610cbf5782606060809260209485600197015273ffffffffffffffffffffffffffffffffffffffff6040820151166040840152015115156060820152019701910191889596949392610b05565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f741752c2000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4ca249dc000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001906702c68af0bb14000061095060ff805f610932565b602090610d5f61117d565b828289010152016108e8565b7f61ee1764000000000000000000000000000000000000000000000000000000005f5260045ffd5b346106b45760406003193601126106b45760043567ffffffffffffffff81116106b457366023820112156106b457806004013590610dd0826110ed565b610ddd60405191826110ca565b82815236602484840101116106b4575f60208481956024610e0a9601838601378301015260243590611342565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346106b4575f6003193601126106b4576103d2610e436111f2565b60405191829160208352602083019061106d565b346106b4575f6003193601126106b4577fffffffff00000000000000000000000000000000000000000000000000000000610e92911661145f565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c375784925f92610ffc575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610c37575f92610fc5575b505015610f9d57610f6a611527565b600160ff1960025416176002557f432acbfd662dbb5d8b378384a67159b47ca9d0f1b79f97cf64cf8585fa362d505f80a1005b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d8311610ff5575b610fdc81836110ca565b810103126106b4575180151581036106b4578180610f5b565b503d610fd2565b606491925061101790843d861161022f5761022081836110ca565b9190610f0a565b346106b4575f6003193601126106b457608061103861117d565b61106b60405180926060809180511515845260208101511515602085015260408101511515604085015201511515910152565bf35b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6080810190811067ffffffffffffffff821117610c0a57604052565b6060810190811067ffffffffffffffff821117610c0a57604052565b90601f601f19910116810190811067ffffffffffffffff821117610c0a57604052565b67ffffffffffffffff8111610c0a57601f01601f191660200190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036106b457565b60209060206040818301928281528551809452019301915f5b828110611153575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101611145565b6040519061118a82611092565b5f6060838281528260208201528260408201520152565b90600182811c921680156111e8575b60208310146111bb57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916111b0565b604051905f8260055491611205836111a1565b808352926020906001908181169081156112915750600114611232575b5050611230925003836110ca565b565b91509260055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0935f925b82841061127957506112309450505081016020015f80611222565b8554888501830152948501948794509281019261125e565b90506020935061123095925060ff1991501682840152151560051b8201015f80611222565b6003545f92916112c5826111a1565b9160019081811690811561132f57506001146112e057505050565b909192935060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b905f915b84831061131c575050500190565b818160209254858701520192019161130e565b60ff191683525050811515909102019150565b605591600b916040516113798160208082019461135e866112b6565b90805192839101825e015f815203601f1981018352826110ca565b5190209060405191604083015260208201523081520160ff81532090565b67ffffffffffffffff8111610c0a5760051b60200190565b80518210156113c35760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b919082018092116113fd57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b6001548110156113c35760015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601905f90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526114be816110ae565b51902090565b908160209103126106b4575173ffffffffffffffffffffffffffffffffffffffff811681036106b45790565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff81164210156115225790565b505f90565b60ff6002541661153357565b7f75884cda000000000000000000000000000000000000000000000000000000005f5260045ffd5b6020818303126106b45780519067ffffffffffffffff82116106b4570181601f820112156106b45780519061158f826110ed565b9261159d60405194856110ca565b828452602083830101116106b457815f9260208093018386015e8301015290565b73ffffffffffffffffffffffffffffffffffffffff908116918116808311156119165760015f915b6040928351955f876004817f95d89b4100000000000000000000000000000000000000000000000000000000948582525afa96871561190c575f976118ee575b505f90600486518095819382525afa9182156118e4575f926118c0575b506702c68af0bb14000061168760ff86519361165e856110ae565b60028552670b1a2bc2ec50000061167f836020998b368c8b013716876113af565b5216836113af565b5261178960278551977f42616c616e636572203830200000000000000000000000000000000000000000868a0152805194868201958087602c8d015e8a01907f2032302000000000000000000000000000000000000000000000000000000000602c83015261171360308c83518b85019581878583015e015f83820152038d601082019052018c6110ca565b88519687937f422d3830000000000000000000000000000000000000000000000000000000008a860152518091602486015e8301907f2d3230000000000000000000000000000000000000000000000000000000000060248301525180928583015e015f838201520360078101855201836110ca565b83519560a0870187811067ffffffffffffffff821117610c0a5790859392916117f898969795975285528585019182528285019560028752606086019182526117d06111f2565b916080870192835261182c8551998a9887858b01525160a060608b01526101008a019061106d565b9451947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa095868a83030160808b015261106d565b975160a08801525196838782030160c08801528180895192838152019801915f5b8281106118a9575050505094611871916118a69651908683030160e087015261106d565b917f0000000000000000000000000000000000000000000000000000000000000000169083015203601f1981018352826110ca565b90565b83518a52988101988a98509281019260010161184d565b6118dd9192503d805f833e6118d581836110ca565b81019061155b565b905f611643565b84513d5f823e3d90fd5b5f919750611905903d8084833e6118d581836110ca565b9690611626565b85513d5f823e3d90fd5b5f6001916115e6565b60405190602082019246845273ffffffffffffffffffffffffffffffffffffffff8092166040840152166060820152606081526114be8161109256fea2646970667358221220c996f7d94d545f188d64621ab6b072710c46fc9f3f8b14d0ee35eafbd5ad454164736f6c634300081b00336102c080604052346108e157614643803803809161001d82856108f5565b833981016040828203126108e15781516001600160401b0381116108e15782019160a0838303126108e1576040519160a083016001600160401b038111848210176107105760405283516001600160401b0381116108e15781610081918601610918565b835260208401516001600160401b0381116108e157816100a2918601610918565b602084019081526040808601519085015260608501519094906001600160401b0381116108e157810182601f820112156108e1578051906001600160401b038211610710578160051b604051926100fc60208301856108f5565b8352602080840191830101918583116108e157602001905b8282106108e55750505060608501526080810151916001600160401b0383116108e1576020926101449201610918565b608084018190529101516001600160a01b03811681036108e15782519351604080519195919081016001600160401b03811182821017610710576040526001815260208101603160f81b81526101998361096d565b610120526101a682610af0565b6101405282516020840120918260e05251902080610100524660a0526040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815260c0810181811060018060401b03821117610710576040525190206080523060c0526101608290528051906001600160401b0382116107105760035490600182811c921680156108d7575b60208310146106f25781601f84931161087f575b50602090601f831160011461080a575f926107ff575b50508160011b915f199060031b1c1916176003555b83516001600160401b03811161071057600454600181811c911680156107f5575b60208210146106f257601f8111610796575b506020601f821160011461072f5781929394955f92610724575b50508160011b915f199060031b1c1916176004555b610180528051906001600160401b0382116107105760055490600182811c92168015610706575b60208310146106f25781601f8493116106a4575b50602090601f831160011461061c575f92610611575b50508160011b915f199060031b1c1916176005555b60408101516101a09080825260608301515103610602575f905f5b81519260ff821693841015610494576060850151805185101561048057602090611fe08460051b1601015190662386f26fc100008210610471578181018091116103d95793806103ed57506101c0525b60ff8091169081146103d957600101610375565b634e487b7160e01b5f52601160045260245ffd5b600181036103ff57506101e0526103c5565b600281036104115750610200526103c5565b600381036104235750610220526103c5565b600481036104355750610240526103c5565b600581036104475750610260526103c5565b600681036104595750610280526103c5565b600714610467575b506103c5565b6102a0525f610461565b63bd39358360e01b5f5260045ffd5b634e487b7160e01b5f52603260045260245ffd5b670de0b6b3a76400009150036105f3576040516139fc9182610c27833960805182612806015260a051826128d2015260c051826127d7015260e051826128550152610100518261287b0152610120518261112801526101405182611152015261016051828181610260015281816104880152818161065f01528181610d7e015281816110ed015281816114ae01528181611733015281816119d801528181612118015261276c01526101805182818161059d0152818161094a01528181610a1201528181610c7a0152611277015251816128fa01526101c0518181816125d2015261295101526101e0518181816125ff015261297e01526102005181818161262c01526129b701526102205181818161265901526129f00152610240518181816126860152612a2a0152610260518181816126b30152612a630152610280518181816126e00152612a9f01526102a05181818161270b0152612ad90152f35b631ce788a760e11b5f5260045ffd5b63aaad13f760e01b5f5260045ffd5b015190505f80610345565b60055f90815293507f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db091905b601f1984168510610689576001945083601f19811610610671575b505050811b0160055561035a565b01515f1960f88460031b161c191690555f8080610663565b81810151835560209485019460019093019290910190610648565b90915060055f5260205f20601f840160051c8101602085106106eb575b90849392915b601f830160051c820181106106dd57505061032f565b5f81558594506001016106c7565b50806106c1565b634e487b7160e01b5f52602260045260245ffd5b91607f169161031b565b634e487b7160e01b5f52604160045260245ffd5b015190505f806102df565b60045f5260205f20905f5b601f198416811061077e575060019394959683601f19811610610766575b505050811b016004556102f4565b01515f1960f88460031b161c191690555f8080610758565b9091602060018192858b01518155019301910161073a565b60045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f830160051c8101602084106107ee575b601f830160051c820181106107e35750506102c5565b5f81556001016107cd565b50806107cd565b90607f16906102b3565b015190505f8061027d565b60035f90815293505f5160206146235f395f51905f5291905b601f1984168510610864576001945083601f1981161061084c575b505050811b01600355610292565b01515f1960f88460031b161c191690555f808061083e565b81810151835560209485019460019093019290910190610823565b60035f529091505f5160206146235f395f51905f52601f840160051c8101602085106108d0575b90849392915b601f830160051c820181106108c2575050610267565b5f81558594506001016108ac565b50806108a6565b91607f1691610253565b5f80fd5b8151815260209182019101610114565b601f909101601f19168101906001600160401b0382119082101761071057604052565b81601f820112156108e1578051906001600160401b038211610710576040519261094c601f8401601f1916602001856108f5565b828452602083830101116108e157815f9260208093018386015e8301015290565b8051602090818110156109e35750601f8251116109a5578082519201519080831061099757501790565b825f19910360031b1b161790565b60448260405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b906001600160401b038211610710575f54926001938481811c91168015610ae6575b838210146106f257601f8111610ab3575b5081601f8411600114610a5157509282939183925f94610a46575b50501b915f199060031b1c1916175f5560ff90565b015192505f80610a31565b919083601f1981165f8052845f20945f905b88838310610a995750505010610a81575b505050811b015f5560ff90565b01515f1960f88460031b161c191690555f8080610a74565b858701518855909601959485019487935090810190610a63565b5f805284601f845f20920160051c820191601f860160051c015b828110610adb575050610a16565b5f8155018590610acd565b90607f1690610a05565b805160209081811015610b1a5750601f8251116109a5578082519201519080831061099757501790565b9192916001600160401b0381116107105760019182548381811c91168015610c1c575b828210146106f257601f8111610be9575b5080601f8311600114610b895750819293945f92610b7e575b50505f19600383901b1c191690821b17905560ff90565b015190505f80610b67565b90601f19831695845f52825f20925f905b888210610bd25750508385969710610bba575b505050811b01905560ff90565b01515f1960f88460031b161c191690555f8080610bad565b808785968294968601518155019501930190610b9a565b835f5283601f835f20920160051c820191601f850160051c015b828110610c11575050610b4e565b5f8155018490610c03565b90607f1690610b3d56fe6080604090808252600480361015610015575f80fd5b60e05f35811c92836301ffc9a714611d905750826306fdde0314611ce1578263095ea7b314611c6357826316a0b3e014611a2a57826318160ddd14611a0e57826323b872dd1461196657826323de665114611934578263273c1adf1461191257826330adf81f146118d8578263313ce567146118bd5782633644e515146118a157826353b79bd7146116e557826354fd4d50146115f55782635687f2b814611596578263627cdcb91461156d578263654cf15d1461154b578263679aefce1461151457826370a082311461144057826372c981861461131f5782637ecebe00146112db57826381fa807c1461121a57826384b0196e146111115782638d928af8146110c157826395d89b4114610fbb578263984de9e814610df9578263a9059cbb14610ce6578263aa6ca80814610c21578263abb1dc44146109b8578263b156aa0a146108f1578263b677fa56146108cf578263c0bc6f33146105f6578263ce20ece7146105d6578263d335b0cf14610543578263d505accf146102d857508163dd62ed3e146101e5575063f89f27ed146101ae575f80fd5b346101e1575f6003193601126101e1576101dd906101ca6128f8565b9051918291602083526020830190611fa7565b0390f35b5f80fd5b82346101e157806003193601126101e1576020610200611e1c565b606461020a611e3f565b9473ffffffffffffffffffffffffffffffffffffffff808097875198899687957f927da10500000000000000000000000000000000000000000000000000000000875230908701521660248501521660448301527f0000000000000000000000000000000000000000000000000000000000000000165afa9081156102cf575f9161029a575b6020925051908152f35b90506020823d6020116102c7575b816102b560209383611eca565b810103126101e1576020915190610290565b3d91506102a8565b513d5f823e3d90fd5b8390346101e1576003193601126101e1576102f1611e1c565b906102fa611e3f565b604435926084359060643560ff831683036101e157804211610519576103478273ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2080549060018201905590565b9061041361040a875195602087017f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9815273ffffffffffffffffffffffffffffffffffffffff97889586891697888d840152878c1660608401528d608084015260a083015260c082015260c081526103be81611e92565b5190206103c96127c0565b908a51917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015260c43591604260a4359220612ed8565b90929192612f67565b168181036104ec5750505f84959661048460209651988996879586947fe1f21c67000000000000000000000000000000000000000000000000000000008652850160409194939294606082019573ffffffffffffffffffffffffffffffffffffffff80921683521660208201520152565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19081156102cf57506104b857005b6020813d6020116104e4575b816104d160209383611eca565b810103126101e1576104e290612079565b005b3d91506104c4565b877f4b800e46000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b867f62791302000000000000000000000000000000000000000000000000000000005f525260245ffd5b5082346101e1575f6003193601126101e1578051917fb45090f9000000000000000000000000000000000000000000000000000000008352309083015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156102cf575f9161029a576020925051908152f35b83346101e1575f6003193601126101e157602090516509184e72a0008152f35b9150346101e1575f6003193601126101e157825161061381611e92565b606081526020918282019160608352858101925f8452606082015f815260808301915f835260a08401935f855260c08101955f875273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016908b517f535cfd8a00000000000000000000000000000000000000000000000000000000815230828201525f81602481865afa90811561087f575f916108ad575b5083528b517f7e361bde00000000000000000000000000000000000000000000000000000000815230828201525f81602481865afa90811561087f575f91610889575b5084528b517fb45090f900000000000000000000000000000000000000000000000000000000815230828201528a81602481865afa90811561087f575f91610852575b5089526107516120cf565b85528b519182917ff29486a100000000000000000000000000000000000000000000000000000000835230908301528160246101a09485935afa91821561084857928b9c926107e0926107f396955f9e9c9d9e9261081b575b50508a81015115158852610120610100918281015115158b52015115158a5283519d8d8f9e938f948552519301528c0190611fa7565b915190601f198b840301908b0152611fa7565b9551606088015251608087015251151560a086015251151560c0850152511515908301520390f35b61083a9250803d10610841575b6108328183611eca565b810190612482565b5f806107aa565b503d610828565b8c513d5f823e3d90fd5b90508a81813d8311610878575b6108698183611eca565b810103126101e157515f610746565b503d61085f565b8d513d5f823e3d90fd5b6108a591503d805f833e61089d8183611eca565b81019061228d565b90505f610703565b6108c991503d805f833e6108c18183611eca565b8101906125a4565b5f6106c0565b83346101e1575f6003193601126101e157602090516709b6e64a8ec600008152f35b8382346101e1575f6003193601126101e1578151907f535cfd8a00000000000000000000000000000000000000000000000000000000825230908201525f8160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156109ae57916101dd925f92610992575b5051918291602083526020830190611fa7565b6109a79192503d805f833e6108c18183611eca565b908361097f565b82513d5f823e3d90fd5b8382346101e1575f6003193601126101e15773ffffffffffffffffffffffffffffffffffffffff8251917f67e0e07600000000000000000000000000000000000000000000000000000000835230908301525f82602481847f0000000000000000000000000000000000000000000000000000000000000000165afa918215610c17575f935f925f925f95610aed575b5090610a6595949392918151968796608088526080880190611fda565b6020878203818901528080875193848152019601925f905b838210610aa957898803868b015289806101dd8b610a9b8c8c611fa7565b908382036060850152611fa7565b9184989950606086979860019395978397518051610ac681612023565b83528685820151168584015201511515898201520198019201899897969594929391610a7d565b955093509150503d805f853e610b038185611eca565b8301926080818503126101e15780519167ffffffffffffffff928381116101e15785610b30918401612185565b91602095868201518581116101e157820181601f820112156101e157805190610b5882611eed565b98610b6586519a8b611eca565b828a52808a01816060809502840101928584116101e1578201905b838210610bc5575050505050828201518581116101e15781610ba391840161222c565b9460608301519081116101e157610bba920161222c565b919492919386610a48565b84828703126101e157875190610bda82611e62565b825160028110156101e157825283830151908c821682036101e1578285928389950152610c088b8601612079565b8b820152815201910190610b80565b83513d5f823e3d90fd5b8382346101e1575f6003193601126101e1578151907fca4f280300000000000000000000000000000000000000000000000000000000825230908201525f8160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156109ae57916101dd925f92610cc2575b5051918291602083526020830190611fda565b610cdf9192503d805f833e610cd78183611eca565b810190612203565b9083610caf565b5082346101e157806003193601126101e1576020610d6492610d06611e1c565b83517fbeabacc80000000000000000000000000000000000000000000000000000000081523392810192835273ffffffffffffffffffffffffffffffffffffffff909116602083015260243560408301529384918291606090910190565b03815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610def57610db5575b6020905160018152f35b6020823d602011610de7575b81610dce60209383611eca565b810103126101e157610de1602092612079565b50610dab565b3d9150610dc1565b50513d5f823e3d90fd5b5082346101e157806003193601126101e157813567ffffffffffffffff81116101e157610e299036908401611f05565b60243560028110156101e157610e3e81612023565b610fb457825b610e4c6128f8565b9080600314610f5f5780600414610ed85780600114610e9557600214610e7f57605184634e487b7160e01b5f525260245ffd5b6020935090610e8d91613012565b905b51908152f35b509092670de0b6b3a764000091828102928184041490151715610ec55750602092610ebf91612b84565b90610e8f565b601190634e487b7160e01b5f525260245ffd5b50925f9190670de0b6b3a76400005b8551841015610f2357610f1b600191610f15610f0387876120bb565b51610f0e888b6120bb565b5190612ba2565b90612c2d565b930192610ee7565b92509350508015610f38576020925090610e8f565b827f26543689000000000000000000000000000000000000000000000000000000005f525ffd5b50925f9190670de0b6b3a76400005b8551841015610f2357670de0b6b3a7640000610fab600192610fa5610f9388886120bb565b51610f9e898c6120bb565b5190612e3f565b90612b71565b04930192610f6e565b6003610e44565b8382346101e1575f6003193601126101e157815191825f8354610fdd81612041565b90818452602095600191876001821691825f1461107c575050600114611020575b5050506101dd9291611011910385611eca565b51928284938452830190611df7565b5f90815286935091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b82841061106457505050820101816110116101dd610ffe565b8054848a01860152889550879490930192810161104b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168782015293151560051b8601909301935084925061101191506101dd9050610ffe565b83346101e1575f6003193601126101e1576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9150346101e1575f6003193601126101e15761114c7f0000000000000000000000000000000000000000000000000000000000000000612c4f565b926111767f0000000000000000000000000000000000000000000000000000000000000000612d81565b815192602084019084821067ffffffffffffffff8311176112075750916111e7916101dd949382525f84526111da82519788977f0f0000000000000000000000000000000000000000000000000000000000000089528060208a0152880190611df7565b9186830390870152611df7565b904660608501523060808501525f60a085015283820360c0850152611fa7565b604190634e487b7160e01b5f525260245ffd5b8382346101e1575f6003193601126101e1578151907ff29486a100000000000000000000000000000000000000000000000000000000825230908201526101a090818160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610c17575f926112be575b505060608282015191015182519182526020820152f35b6112d49250803d10610841576108328183611eca565b82806112a7565b83346101e15760206003193601126101e15760209073ffffffffffffffffffffffffffffffffffffffff61130d611e1c565b165f5260028252805f20549051908152f35b8382346101e15760209260031984813601126101e15782359167ffffffffffffffff918284116101e15783360301126101e15783519161135e83611e92565b8084013560028110156101e157835260248101358684015260448101358281116101e15761139190853691840101611f05565b85840152606481013560608401526084810135608084015260a481013573ffffffffffffffffffffffffffffffffffffffff811681036101e15760a084015260c4810135908282116101e1570192366023850112156101e15780840135918211611207575083519061140c86601f19601f8401160183611eca565b80825236602482860101116101e15785815f926024610e8d9701838601378301015260c082015261143b612755565b6122d1565b8382346101e157602091826003193601126101e1578261145e611e1c565b604473ffffffffffffffffffffffffffffffffffffffff9485855196879485937ff7888aec00000000000000000000000000000000000000000000000000000000855230908501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa918215610def575f926114e5575b5051908152f35b9091508281813d831161150d575b6114fd8183611eca565b810103126101e1575190836114de565b503d6114f3565b50346101e1575f6003193601126101e1577f18e79a20000000000000000000000000000000000000000000000000000000005f525ffd5b83346101e1575f6003193601126101e1576020905167016345785d8a00008152f35b346101e1575f6003193601126101e157335f908152600260205260409020805460018101909155005b83346101e15760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256115c836611f65565b9391946115d3612755565b5193845273ffffffffffffffffffffffffffffffffffffffff908116941692a3005b83346101e1575f6003193601126101e15780516005549091825f61161884612041565b808352602094600190866001821691825f146116a557505060011461164a575b50506101dd9291611011910385611eca565b9085925060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0915f925b82841061168d5750505082010181611011611638565b8054848a018601528895508794909301928101611677565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168682015292151560051b850190920192508391506110119050611638565b5082346101e1575f6003193601126101e15780519061170382611e62565b606082526020908183019160608352818401926060845273ffffffffffffffffffffffffffffffffffffffff95867f0000000000000000000000000000000000000000000000000000000000000000169084517fca4f280300000000000000000000000000000000000000000000000000000000815230828201525f81602481865afa90811561189757905f9291839161187d575b50885260248651809481937f7e361bde00000000000000000000000000000000000000000000000000000000835230908301525afa908115611873575f9161185a575b5081959295526117e96128f8565b84528251948086526080860192519260608288015283518091528160a088019401915f5b8281106118445788806101dd8a8a6118338b8b51601f1993848884030190880152611fa7565b915190848303016060850152611fa7565b83518a168652948101949281019260010161180d565b61186e91503d805f833e61089d8183611eca565b6117db565b84513d5f823e3d90fd5b61189191503d8085833e610cd78183611eca565b8a611798565b86513d5f823e3d90fd5b83346101e1575f6003193601126101e157602090610e8d6127c0565b83346101e1575f6003193601126101e1576020905160128152f35b83346101e1575f6003193601126101e157602090517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b83346101e1575f6003193601126101e157602090516729a2241af62c00008152f35b83346101e15760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6115c836611f65565b5082346101e15760205f608461197b36611f65565b86517f15dacbea000000000000000000000000000000000000000000000000000000008152339881019890985273ffffffffffffffffffffffffffffffffffffffff928316602489015290821660448801526064870152859283917f0000000000000000000000000000000000000000000000000000000000000000165af18015610def57610db5576020905160018152f35b83346101e1575f6003193601126101e157602090610e8d6120cf565b8382346101e15760606003193601126101e157803567ffffffffffffffff81116101e157611a5b9036908301611f05565b9160243592611a77611a7085604435936120bb565b51946125ca565b60019081831115611c5d5760025b80600314611be75780600414611b4e5780600114611b0c57600214611ab757605185634e487b7160e01b5f525260245ffd5b909192938115611ae65750610e8d9260209592610f15926ec097ce7bc90715b34b9f0fffffffff040190612ba2565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f525ffd5b5080929394915015611b3b575092610f15610e8d926020956ec097ce7bc90715b34b9f10000000000490612ba2565b601290634e487b7160e01b5f525260245ffd5b509192939080670de0b6b3a7640000935f925b611ba7575b5050508115611b81575092610f15610e8d9260209590612ba2565b7f26543689000000000000000000000000000000000000000000000000000000005f525ffd5b909193670de0b6b3a764000051851015611be1579082611bd98193610f15611bcf89866120bb565b51610f0e8a612086565b950192611b61565b93611b66565b509192939080670de0b6b3a7640000935f925b611c19575050508115611b81575092610f15610e8d9260209590612ba2565b909193670de0b6b3a764000051851015611be1579082670de0b6b3a7640000611c548294610fa5611c4a8a876120bb565b51610f9e8b612086565b04950192611bfa565b81611a85565b5082346101e157806003193601126101e1576020610d6492611c83611e1c565b83517fe1f21c670000000000000000000000000000000000000000000000000000000081523392810192835273ffffffffffffffffffffffffffffffffffffffff909116602083015260243560408301529384918291606090910190565b83346101e1575f6003193601126101e15780516003549091825f611d0484612041565b808352602094600190866001821691825f146116a5575050600114611d355750506101dd9291611011910385611eca565b9085925060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f925b828410611d785750505082010181611011611638565b8054848a018601528895508794909301928101611d62565b82346101e15760206003193601126101e15735907fffffffff0000000000000000000000000000000000000000000000000000000082168092036101e1577f01ffc9a700000000000000000000000000000000000000000000000000000000602092148152f35b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101e157565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101e157565b6060810190811067ffffffffffffffff821117611e7e57604052565b634e487b7160e01b5f52604160045260245ffd5b60e0810190811067ffffffffffffffff821117611e7e57604052565b6040810190811067ffffffffffffffff821117611e7e57604052565b90601f601f19910116810190811067ffffffffffffffff821117611e7e57604052565b67ffffffffffffffff8111611e7e5760051b60200190565b9080601f830112156101e1576020908235611f1f81611eed565b93611f2d6040519586611eca565b81855260208086019260051b8201019283116101e157602001905b828210611f56575050505090565b81358152908301908301611f48565b60031960609101126101e15773ffffffffffffffffffffffffffffffffffffffff9060043582811681036101e1579160243590811681036101e1579060443590565b9081518082526020808093019301915f5b828110611fc6575050505090565b835185529381019392810192600101611fb8565b9081518082526020808093019301915f5b828110611ff9575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101611feb565b6002111561202d57565b634e487b7160e01b5f52602160045260245ffd5b90600182811c9216801561206f575b602083101461205b57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691612050565b519081151582036101e157565b670de0b6b3a7640000518110156120a75760051b670de0b6b3a76400200190565b634e487b7160e01b5f52603260045260245ffd5b80518210156120a75760209160051b010190565b6040517fe4dc2aa400000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561217a575f9161214b575090565b90506020813d602011612172575b8161216660209383611eca565b810103126101e1575190565b3d9150612159565b6040513d5f823e3d90fd5b9080601f830112156101e1578151906020916121a081611eed565b936121ae6040519586611eca565b81855260208086019260051b8201019283116101e157602001905b8282106121d7575050505090565b815173ffffffffffffffffffffffffffffffffffffffff811681036101e15781529083019083016121c9565b906020828203126101e157815167ffffffffffffffff81116101e1576122299201612185565b90565b9080601f830112156101e15781519060209161224781611eed565b936122556040519586611eca565b81855260208086019260051b8201019283116101e157602001905b82821061227e575050505090565b81518152908301908301612270565b9190916040818403126101e15780519267ffffffffffffffff938481116101e157816122ba91840161222c565b9360208301519081116101e157612229920161222c565b604081019081516122e860608301918251906120bb565b519251916122fc60808201938451906120bb565b5191815161230981612023565b61231281612023565b6123d15761232c612325602092516125ca565b94516125ca565b910151670de0b6b3a7640000948561234382612b3d565b0482116123a95761235761235d9282612b30565b90613012565b848402938085048614901517156123955761237e6123849261239195612b84565b90612ba2565b8381810391100290612b71565b0490565b634e487b7160e01b5f52601160045260245ffd5b7f340a4533000000000000000000000000000000000000000000000000000000005f5260045ffd5b6123eb6123e460209295939495516125ca565b92516125ca565b920151670de0b6b3a764000061240085612b3d565b04811161245a578303908382116123955761242161237e9261242795613012565b92613012565b7ffffffffffffffffffffffffffffffffffffffffffffffffff21f494c589c000081019081116123955761222991612c2d565b7f64590b9f000000000000000000000000000000000000000000000000000000005f5260045ffd5b6101a0918190038281126101e15760405192610140928385019267ffffffffffffffff9086851082861117611e7e576080136101e1576101c0860190811184821017611e7e576040526124d481612079565b83526124e260208201612079565b9261016093848701526124f760408301612079565b92610180938488015261250c60608401612079565b9087015285526080810151602086015260a0810151604086015260c0810151606086015260e081015164ffffffffff811681036101e15760808601526101008082015163ffffffff811681036101e15761259d946125939160a08901526125876101209761257b898701612079565b60c08b01528501612079565b60e08901528301612079565b9086015201612079565b9082015290565b906020828203126101e157815167ffffffffffffffff81116101e157612229920161222c565b806125f457507f000000000000000000000000000000000000000000000000000000000000000090565b6001810361262157507f000000000000000000000000000000000000000000000000000000000000000090565b6002810361264e57507f000000000000000000000000000000000000000000000000000000000000000090565b6003810361267b57507f000000000000000000000000000000000000000000000000000000000000000090565b600481036126a857507f000000000000000000000000000000000000000000000000000000000000000090565b600581036126d557507f000000000000000000000000000000000000000000000000000000000000000090565b6006810361270257507f000000000000000000000000000000000000000000000000000000000000000090565b60070361272d577f000000000000000000000000000000000000000000000000000000000000000090565b7fc1ab6dc1000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361279457565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163014806128cf575b15612828577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff821117611e7e5760405251902090565b507f000000000000000000000000000000000000000000000000000000000000000046146127ff565b7f000000000000000000000000000000000000000000000000000000000000000061292281611eed565b906129306040519283611eca565b80825261293c81611eed565b601f196020840191013682378251156120a7577f000000000000000000000000000000000000000000000000000000000000000090528151600110156120a7577f000000000000000000000000000000000000000000000000000000000000000060408301526002811115612b2c578151600210156120a7577f000000000000000000000000000000000000000000000000000000000000000060608301526003811115612b2c578151600310156120a7577f0000000000000000000000000000000000000000000000000000000000000000608083015260049081811115612b27578251821015612b14577f000000000000000000000000000000000000000000000000000000000000000060a08401526005811115612b2757825160051015612b14577f000000000000000000000000000000000000000000000000000000000000000060c08401526006811115612b2757825160061015612b14576007907f000000000000000000000000000000000000000000000000000000000000000060e085015211612acc575090565b815160071015612b0157507f000000000000000000000000000000000000000000000000000000000000000061010082015290565b603290634e487b7160e01b5f525260245ffd5b603282634e487b7160e01b5f525260245ffd5b505090565b5090565b9190820180921161239557565b90670429d069189e00009182810292818404149015171561239557565b906127109182810292818404149015171561239557565b8181029291811591840414171561239557565b8115612b8e570490565b634e487b7160e01b5f52601260045260245ffd5b90670de0b6b3a764000090818103612bb957505090565b671bc16d674ec800008103612bd45750508061222991612c2d565b673782dace9d9000008103612bf8575050612bf28161222992612c2d565b80612c2d565b612c02919261308f565b906001612c0e83612b5a565b915f198301040190151502600181018091116123955761222991612b30565b90612c3791612b71565b6001670de0b6b3a76400005f19830104019015150290565b60ff8114612ca35760ff811690601f8211612c7b5760405191612c7183611eae565b8252602082015290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040515f815f5491612cb583612041565b80835292602090600190818116908115612d3e5750600114612ce0575b505061222992500382611eca565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b828410612d2657506122299450505081016020015f80612cd2565b85548785018301529485019486945092810192612d0b565b9050602093506122299592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f80612cd2565b60ff8114612da35760ff811690601f8211612c7b5760405191612c7183611eae565b506040515f81600191600154612db881612041565b8084529360209160018116908115612d3e5750600114612de057505061222992500382611eca565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b828410612e2757506122299450505081016020015f80612cd2565b85548785018301529485019486945092810192612e0c565b670de0b6b3a764000091808303612e565750905090565b8290671bc16d674ec800008103612e735750508061239191612b71565b673782dace9d9000008103612e975750612e908261239193612b71565b0480612b71565b9050612ea29161308f565b612eab81612b5a565b60015f1993848301040190151502906001820180831161239557811015612ed3575050505f90565b030190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411612f5c579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa1561217a575f5173ffffffffffffffffffffffffffffffffffffffff811615612f5257905f905f90565b505f906001905f90565b5050505f9160039190565b600481101561202d5780612f79575050565b60018103612fa9577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b60028103612fdd57507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600314612fe75750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90801561304357670de0b6b3a764000091828102928184041490151715612395576001905f19830104019015150290565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b8015612b8e576ec097ce7bc90715b34b9f10000000000590565b8115612b8e570590565b9080156139b85781156139b2578160ff1c61398a57770bce5086492111aea88f4bb1ca6bcf584181ea8059f765328110156139625781670c7d713b49da00001280613951575b156135ee57670de0b6b3a7640000916ec097ce7bc90715b34b9f100000000090613128908402828101907fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f000000000018302613085565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b918082818507020592050201670de0b6b3a7640000905b057ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc000081811315806135db575b156135b3578190821215806135a0575b15613578575f915f8112613569575b506064906806f05b59d3b20000008112613506577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e0000000168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac620000008112156134cd575b6856bc75e2d631000000811215613493575b682b5e3af16b1880000081121561345b575b6815af1d78b58c400000811215613423575b680ad78ebc5ac62000008112156133ec575b828112156133b5575b6802b5e3af16b188000081121561337e575b68015af1d78b58c40000811215613347575b60028382800205056003848383020505600485848302050585600581868402050560068287830205056007838883020505906008848984020505926009858a8602050595600a868b8902050597600b878c8b02050599600c888d8d0205059b01010101010101010101010102050205905f14612229576122299061306b565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000849201920205906132c8565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000849201920205906132b6565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000849201920205906132a4565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e000008492019202059061329b565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000084920192020590613289565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000084920192020590613277565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000084920192020590613265565b6e01855144814a7ff805980ff008400091507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000001613253565b6803782dace9d90000008112613556577ffffffffffffffffffffffffffffffffffffffffffffffffc87d25316270000000168056bc75e2d63100000826b1425982cf597cd205cef73809261323e565b68056bc75e2d631000008260019261323e565b600192505f03905060646131e2565b7fd4794efd000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156131d3565b7fa2f9f7e3000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156131c3565b81670de0b6b3a7640000925f9184811261393b575b506064905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000821215613910575b73011798004d755d3c8bc8e03204cf44619e0000008212156138ef575b820290808302906e01855144814a7ff805980ff008400090818312156138cc575b50506b02df0ab5a80a22c61ab5a700808212156138ac575b50693f1fce3da636ea5cf8508082121561388c575b50690127fa27722cc06cc5e28082121561386c575b5068280e60114edb805d038082121561384c575b50680ebc5fb4174612111080821215613835575b506808f00f760a4b2db55d80821215613815575b506806f5f1775788937937808212156137f5575b506806248f33704b286603808212156137d6575b506805c548670b9510e7ac808212156137b7575b5061376468056bc75e2d6310000091827ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000818301920102613085565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b0105905f146137b2575f035b02613197565b6137ac565b68056bc75e2d631000006756bc75e2d63100009202059101905f613728565b68056bc75e2d6310000067ad78ebc5ac6200009202059101905f613714565b68056bc75e2d6310000068015af1d78b58c400009202059101905f613700565b68056bc75e2d631000006802b5e3af16b18800009202059101905f6136ec565b68056bc75e2d63100000809202059101905f6136d8565b68056bc75e2d63100000680ad78ebc5ac62000009202059101905f6136c4565b68056bc75e2d631000006815af1d78b58c4000009202059101905f6136b0565b68056bc75e2d63100000682b5e3af16b188000009202059101905f61369b565b68056bc75e2d631000006856bc75e2d6310000009202059101905f613686565b68ad78ebc5ac62000000925069021e19e0c9bab240000002059101905f8061366e565b906b1425982cf597cd205cef73806803782dace9d90000009105910161364d565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b2000000613630565b9050613947915061306b565b6001906064613603565b50670f43fc2c04ee000082126130d5565b7fd8317311000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f022701e0000000000000000000000000000000000000000000000000000000005f5260045ffd5b50505f90565b5050670de0b6b3a76400009056fea26469706673582212203ec0118ae17c0f0adba7459b5c62781ac22adb46f73c1467746703ba70b9c43764736f6c634300081b0033c2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b","opcodes":"PUSH2 0x100 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x42B JUMPI PUSH2 0x64C8 DUP1 CODESIZE SUB DUP1 PUSH2 0x1A DUP2 PUSH2 0x42F JUMP JUMPDEST SWAP3 DUP4 CODECOPY DUP2 ADD PUSH1 0x80 DUP3 DUP3 SUB SLT PUSH2 0x42B JUMPI DUP2 MLOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP4 SUB PUSH2 0x42B JUMPI PUSH1 0x20 SWAP3 DUP4 DUP3 ADD MLOAD SWAP4 PUSH4 0xFFFFFFFF DUP1 DUP7 AND SWAP6 DUP7 DUP2 SUB PUSH2 0x42B JUMPI PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP6 SWAP1 DUP7 DUP2 GT PUSH2 0x42B JUMPI DUP8 PUSH2 0x76 SWAP2 DUP4 ADD PUSH2 0x454 JUMP JUMPDEST SWAP7 PUSH1 0x60 DUP3 ADD MLOAD DUP8 DUP2 GT PUSH2 0x42B JUMPI PUSH2 0x8D SWAP3 ADD PUSH2 0x454 JUMP JUMPDEST SWAP7 PUSH2 0x4643 SWAP5 PUSH2 0x9D DUP6 DUP8 ADD PUSH2 0x42F JUMP JUMPDEST SWAP6 DUP1 DUP8 MSTORE PUSH2 0x1E85 DUP7 DUP9 ADD CODECOPY ADDRESS PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE TIMESTAMP ADD SWAP1 DUP2 TIMESTAMP GT PUSH2 0x417 JUMPI DUP3 DUP3 GT PUSH2 0x408 JUMPI PUSH1 0xC0 MSTORE AND PUSH1 0xE0 MSTORE DUP2 MLOAD SWAP4 DUP4 DUP6 GT PUSH2 0x366 JUMPI PUSH1 0x3 SWAP5 PUSH2 0xDE DUP7 SLOAD PUSH2 0x4A5 JUMP JUMPDEST SWAP4 PUSH1 0x1F SWAP5 DUP6 DUP2 GT PUSH2 0x3DC JUMPI JUMPDEST POP DUP4 SWAP1 DUP6 DUP4 GT PUSH1 0x1 EQ PUSH2 0x37A JUMPI PUSH2 0x118 SWAP3 SWAP2 PUSH0 SWAP2 DUP4 PUSH2 0x217 JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR SWAP1 JUMP JUMPDEST DUP6 SSTORE JUMPDEST DUP1 MLOAD DUP5 DUP2 GT PUSH2 0x366 JUMPI PUSH1 0x4 SWAP2 PUSH2 0x131 DUP4 SLOAD PUSH2 0x4A5 JUMP JUMPDEST DUP6 DUP2 GT PUSH2 0x330 JUMPI JUMPDEST POP DUP4 SWAP1 DUP6 DUP4 GT PUSH1 0x1 EQ PUSH2 0x2CE JUMPI PUSH2 0x166 SWAP3 SWAP2 PUSH0 SWAP2 DUP4 PUSH2 0x217 JUMPI POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR SWAP1 JUMP JUMPDEST DUP2 SSTORE JUMPDEST DUP6 MLOAD SWAP4 DUP5 GT PUSH2 0x2BB JUMPI POP PUSH1 0x5 SWAP4 PUSH2 0x180 DUP6 SLOAD PUSH2 0x4A5 JUMP JUMPDEST DUP4 DUP2 GT PUSH2 0x287 JUMPI JUMPDEST POP DUP2 SWAP3 DUP5 GT PUSH1 0x1 EQ PUSH2 0x222 JUMPI POP POP DUP2 SWAP1 PUSH2 0x1B7 SWAP4 SWAP5 PUSH0 SWAP3 PUSH2 0x217 JUMPI POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1991 SWAP1 DUP2 PUSH2 0x4F4 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x148A ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x1CA ADD MSTORE DUP2 DUP2 PUSH2 0x28C ADD MSTORE DUP2 DUP2 PUSH2 0xA8F ADD MSTORE DUP2 DUP2 PUSH2 0xBB8 ADD MSTORE DUP2 DUP2 PUSH2 0xED8 ADD MSTORE PUSH2 0x1874 ADD MSTORE PUSH1 0xC0 MLOAD DUP2 PUSH2 0x31F ADD MSTORE PUSH1 0xE0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x129 ADD MSTORE PUSH2 0x14F2 ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x104 JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x1F NOT DUP5 AND SWAP6 DUP6 PUSH0 MSTORE DUP4 PUSH0 KECCAK256 SWAP4 PUSH0 SWAP1 JUMPDEST DUP9 DUP3 LT PUSH2 0x26F JUMPI POP POP DUP5 PUSH1 0x1 SWAP7 SWAP8 LT PUSH2 0x256 JUMPI JUMPDEST POP POP POP POP DUP2 SHL ADD SWAP1 SSTORE PUSH2 0x1BA JUMP JUMPDEST ADD MLOAD SWAP1 PUSH1 0xF8 DUP5 PUSH0 NOT SWAP3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 DUP1 PUSH2 0x248 JUMP JUMPDEST DUP1 PUSH1 0x1 DUP6 SWAP8 DUP3 SWAP5 SWAP7 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP7 ADD SWAP4 ADD SWAP1 PUSH2 0x234 JUMP JUMPDEST PUSH2 0x2AC SWAP1 DUP7 PUSH0 MSTORE DUP4 PUSH0 KECCAK256 DUP6 DUP1 DUP9 ADD DUP10 SHR DUP3 ADD SWAP3 DUP7 DUP10 LT PUSH2 0x2B2 JUMPI JUMPDEST ADD DUP9 SHR ADD SWAP1 PUSH2 0x4DD JUMP JUMPDEST PUSH0 PUSH2 0x188 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x2A2 JUMP JUMPDEST PUSH1 0x41 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F NOT DUP4 AND SWAP2 DUP5 PUSH0 MSTORE DUP6 PUSH0 KECCAK256 SWAP3 PUSH0 JUMPDEST DUP8 DUP3 DUP3 LT PUSH2 0x31A JUMPI POP POP SWAP1 DUP5 PUSH1 0x1 SWAP6 SWAP5 SWAP4 SWAP3 LT PUSH2 0x303 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD DUP2 SSTORE PUSH2 0x169 JUMP JUMPDEST ADD MLOAD PUSH0 NOT DUP4 DUP11 SHL PUSH1 0xF8 AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x2F6 JUMP JUMPDEST PUSH1 0x1 DUP6 SWAP7 DUP3 SWAP4 SWAP7 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP6 ADD SWAP4 ADD PUSH2 0x2DE JUMP JUMPDEST PUSH2 0x357 SWAP1 DUP5 PUSH0 MSTORE DUP6 PUSH0 KECCAK256 DUP8 DUP1 DUP7 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP9 DUP8 LT PUSH2 0x35D JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 PUSH2 0x4DD JUMP JUMPDEST PUSH0 PUSH2 0x139 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x34C JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F NOT DUP4 AND SWAP2 DUP9 PUSH0 MSTORE DUP6 PUSH0 KECCAK256 SWAP3 PUSH0 JUMPDEST DUP8 DUP3 DUP3 LT PUSH2 0x3C6 JUMPI POP POP SWAP1 DUP5 PUSH1 0x1 SWAP6 SWAP5 SWAP4 SWAP3 LT PUSH2 0x3AF JUMPI JUMPDEST POP POP POP DUP2 SHL ADD DUP6 SSTORE PUSH2 0x11B JUMP JUMPDEST ADD MLOAD PUSH0 NOT DUP4 DUP11 SHL PUSH1 0xF8 AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x3A2 JUMP JUMPDEST PUSH1 0x1 DUP6 SWAP7 DUP3 SWAP4 SWAP7 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP6 ADD SWAP4 ADD PUSH2 0x38A JUMP JUMPDEST PUSH2 0x402 SWAP1 DUP9 PUSH0 MSTORE DUP6 PUSH0 KECCAK256 DUP8 DUP1 DUP7 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP9 DUP8 LT PUSH2 0x35D JUMPI ADD PUSH1 0x5 SHR ADD SWAP1 PUSH2 0x4DD JUMP JUMPDEST PUSH0 PUSH2 0xEA JUMP JUMPDEST PUSH4 0x68755A11 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x366 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x42B JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x366 JUMPI PUSH2 0x483 PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x42F JUMP JUMPDEST SWAP3 DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x42B JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x4D3 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x4BF JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x4B4 JUMP JUMPDEST DUP2 DUP2 LT PUSH2 0x4E8 JUMPI POP POP JUMP JUMPDEST PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x4DD JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH0 CALLDATALOAD DUP1 PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x193AD50F EQ PUSH2 0x101E JUMPI DUP2 PUSH4 0x2F2770DB EQ PUSH2 0xE57 JUMPI POP DUP1 PUSH4 0x3F819B6F EQ PUSH2 0xE28 JUMPI DUP1 PUSH4 0x44F6FEC7 EQ PUSH2 0xD93 JUMPI DUP1 PUSH4 0x4BEF86D9 EQ PUSH2 0x6B8 JUMPI DUP1 PUSH4 0x531AA03E EQ PUSH2 0x650 JUMPI DUP1 PUSH4 0x53A72F7E EQ PUSH2 0x529 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x44A JUMPI DUP1 PUSH4 0x6634B753 EQ PUSH2 0x401 JUMPI DUP1 PUSH4 0x673A2A1F EQ PUSH2 0x366 JUMPI DUP1 PUSH4 0x6C57F5A9 EQ PUSH2 0x343 JUMPI DUP1 PUSH4 0x78DA80CB EQ PUSH2 0x302 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x2B0 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x25F JUMPI DUP1 PUSH4 0x8EEC5D70 EQ PUSH2 0x241 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x176 JUMPI DUP1 PUSH4 0xDB035EBC EQ PUSH2 0x14D JUMPI DUP1 PUSH4 0xE9D56E19 EQ PUSH2 0x10C JUMPI PUSH4 0xEC888061 EQ PUSH2 0xEE JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x20 PUSH2 0x168 PUSH2 0x14F0 JUMP JUMPDEST PUSH4 0xFFFFFFFF PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x236 JUMPI PUSH1 0x20 SWAP4 SWAP3 PUSH2 0x207 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x228 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x22F JUMPI JUMPDEST PUSH2 0x220 DUP2 DUP4 PUSH2 0x10CA JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x14C4 JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x1FD JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x216 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP6 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x109 JUMPI PUSH1 0x20 PUSH2 0x2FA DUP4 PUSH2 0x145F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x20 PUSH1 0xFF PUSH1 0x2 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x40 MLOAD PUSH1 0x1 DUP1 SLOAD DUP1 DUP4 MSTORE DUP2 DUP5 MSTORE PUSH1 0x20 DUP1 DUP5 ADD SWAP5 PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP4 SWAP3 SWAP2 JUMPDEST DUP3 DUP3 LT PUSH2 0x3D6 JUMPI PUSH2 0x3D2 DUP7 PUSH2 0x3C6 DUP2 DUP11 SUB DUP3 PUSH2 0x10CA JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x112C JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP5 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 SWAP4 DUP4 ADD SWAP4 SWAP1 DUP4 ADD SWAP1 PUSH2 0x3AF JUMP JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0xFF PUSH1 0x40 PUSH1 0x20 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x437 PUSH2 0x1109 JUMP JUMPDEST AND DUP2 MSTORE DUP1 DUP5 MSTORE KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x40 MLOAD PUSH1 0x4 SLOAD PUSH0 DUP3 PUSH2 0x46C DUP4 PUSH2 0x11A1 JUMP JUMPDEST SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP1 DUP6 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x509 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x4AE JUMPI JUMPDEST POP PUSH2 0x49A SWAP3 POP SUB DUP4 PUSH2 0x10CA JUMP JUMPDEST PUSH2 0x3D2 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x106D JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x4 PUSH0 MSTORE PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0x4F1 JUMPI POP POP PUSH2 0x49A SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x48D JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x4DA JUMP JUMPDEST PUSH1 0xFF NOT AND DUP6 DUP3 ADD MSTORE PUSH2 0x49A SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0x48D SWAP1 POP JUMP JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x1 SWAP3 PUSH1 0x1 SLOAD DUP1 DUP3 LT ISZERO PUSH2 0x628 JUMPI DUP1 PUSH2 0x55B DUP5 DUP5 PUSH2 0x13F0 JUMP JUMPDEST GT PUSH2 0x5E7 JUMPI JUMPDEST POP PUSH2 0x56B DUP3 PUSH2 0x1397 JUMP JUMPDEST SWAP3 PUSH2 0x579 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x10CA JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x1F NOT PUSH2 0x588 DUP5 PUSH2 0x1397 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP7 ADD CALLDATACOPY JUMPDEST DUP3 DUP2 LT PUSH2 0x5A5 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0x3D2 DUP7 DUP3 PUSH2 0x112C JUMP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x5CE PUSH2 0x5C9 DUP9 SWAP5 DUP7 PUSH2 0x13F0 JUMP JUMPDEST PUSH2 0x142A JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND PUSH2 0x5E0 DUP3 DUP8 PUSH2 0x13AF JUMP JUMPDEST MSTORE ADD PUSH2 0x590 JUMP JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 SUB SWAP1 DUP2 GT PUSH2 0x5FB JUMPI SWAP1 PUSH0 PUSH2 0x561 JUMP JUMPDEST PUSH1 0x24 DUP4 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP5 PUSH32 0x4E23D03500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH2 0x66A PUSH2 0x1109 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x6B4 JUMPI DUP3 PUSH2 0x6A5 DUP3 PUSH2 0x69F PUSH2 0x6AB SWAP5 PUSH1 0x20 SWAP8 PUSH2 0x15BE JUMP JUMPDEST SWAP3 PUSH2 0x191F JUMP JUMPDEST SWAP1 PUSH2 0x1342 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x6B4 JUMPI PUSH1 0x3 NOT CALLDATASIZE ADD PUSH2 0x180 DUP2 SLT PUSH2 0x6B4 JUMPI PUSH1 0x80 SGT PUSH2 0x6B4 JUMPI PUSH1 0x40 MLOAD PUSH2 0x6DE DUP2 PUSH2 0x1092 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x6B4 JUMPI DUP2 MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x6B4 JUMPI PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x6B4 JUMPI PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x6B4 JUMPI PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C CALLDATASIZE ADD SLT PUSH2 0x6B4 JUMPI PUSH1 0x40 MLOAD PUSH2 0x77D DUP2 PUSH2 0x1092 JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x6B4 JUMPI DUP2 MSTORE PUSH1 0xA4 CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x6B4 JUMPI PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xC4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x6B4 JUMPI PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xE4 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x6B4 JUMPI PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFC CALLDATASIZE ADD SLT PUSH2 0x6B4 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH1 0x60 DUP4 ADD DUP4 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xC0A JUMPI PUSH1 0x40 MSTORE PUSH2 0x104 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x6B4 JUMPI DUP4 MSTORE PUSH2 0x124 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x6B4 JUMPI PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x144 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND SWAP1 DUP2 DUP2 SUB PUSH2 0x6B4 JUMPI PUSH1 0x40 DUP6 ADD MSTORE PUSH2 0xD6B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD AND SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 MLOAD AND SWAP1 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x8E2 DUP6 PUSH2 0x10AE JUMP JUMPDEST PUSH1 0x2 DUP6 MSTORE PUSH0 JUMPDEST PUSH1 0x40 DUP2 LT PUSH2 0xD54 JUMPI POP PUSH2 0x97F SWAP3 SWAP2 PUSH2 0x974 SWAP2 PUSH2 0x962 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x90A DUP5 PUSH2 0x10AE JUMP JUMPDEST PUSH1 0x2 DUP5 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP7 ADD CALLDATACOPY DUP6 DUP9 GT ISZERO PUSH2 0xD3C JUMPI PUSH0 SWAP1 PUSH8 0x2C68AF0BB140000 PUSH2 0x950 PUSH1 0xFF DUP1 PUSH1 0x1 JUMPDEST AND SWAP5 AND DUP8 PUSH8 0xB1A2BC2EC500000 PUSH2 0x94A DUP8 DUP5 SWAP12 PUSH2 0x13AF JUMP JUMPDEST MSTORE PUSH2 0x13AF JUMP JUMPDEST MSTORE PUSH2 0x95B DUP3 DUP12 PUSH2 0x13AF JUMP JUMPDEST MSTORE DUP9 PUSH2 0x13AF JUMP JUMPDEST POP PUSH2 0x96D DUP3 DUP9 PUSH2 0x13AF JUMP JUMPDEST MSTORE DUP6 PUSH2 0x13AF JUMP JUMPDEST POP PUSH2 0x69F DUP2 DUP5 PUSH2 0x15BE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH2 0x9B1 DUP4 PUSH1 0x20 DUP1 DUP3 ADD SWAP4 PUSH2 0x996 DUP6 PUSH2 0x12B6 JUMP JUMPDEST SWAP1 DUP1 MLOAD SWAP3 DUP4 SWAP2 ADD DUP3 MCOPY ADD PUSH0 DUP2 MSTORE SUB PUSH1 0x1F NOT DUP2 ADD DUP6 MSTORE DUP5 PUSH2 0x10CA JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0xD14 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 MLOAD SWAP1 PUSH0 CREATE2 AND SWAP1 DUP2 ISZERO PUSH2 0xCEC JUMPI PUSH2 0x9E2 PUSH2 0x1527 JUMP JUMPDEST DUP2 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH1 0xFF NOT DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x1 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0xC0A JUMPI DUP1 PUSH1 0x1 PUSH2 0xA1C SWAP3 ADD PUSH1 0x1 SSTORE PUSH2 0x142A JUMP JUMPDEST DUP2 SLOAD SWAP1 PUSH1 0x3 SHL SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 SSTORE DUP2 PUSH32 0x83A48FBCFC991335314E74D0496AAB6A1987E992DDC85DDDBCC4D6DD6EF2E9FC PUSH0 DUP1 LOG2 PUSH2 0xA6F PUSH2 0x117D JUMP JUMPDEST PUSH2 0xA77 PUSH2 0x14F0 JUMP JUMPDEST SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x6B4 JUMPI SWAP4 SWAP1 SWAP2 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP3 PUSH32 0xEEEC802F00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH2 0x1A4 DUP5 ADD DUP7 PUSH1 0x4 DUP7 ADD MSTORE PUSH2 0x1A0 PUSH1 0x24 DUP7 ADD MSTORE DUP4 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH2 0x1C4 DUP7 ADD SWAP5 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0xC42 JUMPI POP POP POP PUSH0 SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP7 SWAP6 SWAP5 PUSH4 0xFFFFFFFF PUSH2 0xB9E SWAP6 PUSH2 0x164 CALLDATALOAD PUSH1 0x44 DUP11 ADD MSTORE AND PUSH1 0x64 DUP9 ADD MSTORE DUP9 PUSH1 0x84 DUP9 ADD MSTORE DUP3 DUP2 MLOAD AND PUSH1 0xA4 DUP9 ADD MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0xC4 DUP9 ADD MSTORE ADD MLOAD AND PUSH1 0xE4 DUP6 ADD MSTORE DUP6 PUSH2 0x104 DUP6 ADD MSTORE PUSH2 0x124 DUP5 ADD SWAP1 PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SUB DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xC37 JUMPI PUSH2 0xBF0 JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xC0A JUMPI PUSH1 0x20 SWAP2 PUSH1 0x40 MSTORE PUSH2 0xBE5 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP2 DUP1 SWAP8 SWAP7 POP SWAP5 SWAP1 SWAP3 SWAP4 SWAP5 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD AND DUP3 MSTORE PUSH1 0x20 DUP2 ADD MLOAD SWAP1 PUSH1 0x2 DUP3 LT ISZERO PUSH2 0xCBF JUMPI DUP3 PUSH1 0x60 PUSH1 0x80 SWAP3 PUSH1 0x20 SWAP5 DUP6 PUSH1 0x1 SWAP8 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH1 0x60 DUP3 ADD MSTORE ADD SWAP8 ADD SWAP2 ADD SWAP2 DUP9 SWAP6 SWAP7 SWAP5 SWAP4 SWAP3 PUSH2 0xB05 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x741752C200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x4CA249DC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 SWAP1 PUSH8 0x2C68AF0BB140000 PUSH2 0x950 PUSH1 0xFF DUP1 PUSH0 PUSH2 0x932 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH2 0xD5F PUSH2 0x117D JUMP JUMPDEST DUP3 DUP3 DUP10 ADD ADD MSTORE ADD PUSH2 0x8E8 JUMP JUMPDEST PUSH32 0x61EE176400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x6B4 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6B4 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6B4 JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x6B4 JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH2 0xDD0 DUP3 PUSH2 0x10ED JUMP JUMPDEST PUSH2 0xDDD PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x10CA JUMP JUMPDEST DUP3 DUP2 MSTORE CALLDATASIZE PUSH1 0x24 DUP5 DUP5 ADD ADD GT PUSH2 0x6B4 JUMPI PUSH0 PUSH1 0x20 DUP5 DUP2 SWAP6 PUSH1 0x24 PUSH2 0xE0A SWAP7 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1342 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x6B4 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6B4 JUMPI PUSH2 0x3D2 PUSH2 0xE43 PUSH2 0x11F2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x106D JUMP JUMPDEST CALLVALUE PUSH2 0x6B4 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6B4 JUMPI PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0xE92 SWAP2 AND PUSH2 0x145F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xC37 JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0xFFC JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xC37 JUMPI PUSH0 SWAP3 PUSH2 0xFC5 JUMPI JUMPDEST POP POP ISZERO PUSH2 0xF9D JUMPI PUSH2 0xF6A PUSH2 0x1527 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xFF NOT PUSH1 0x2 SLOAD AND OR PUSH1 0x2 SSTORE PUSH32 0x432ACBFD662DBB5D8B378384A67159B47CA9D0F1B79F97CF64CF8585FA362D50 PUSH0 DUP1 LOG1 STOP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0xFF5 JUMPI JUMPDEST PUSH2 0xFDC DUP2 DUP4 PUSH2 0x10CA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x6B4 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x6B4 JUMPI DUP2 DUP1 PUSH2 0xF5B JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xFD2 JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x1017 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x22F JUMPI PUSH2 0x220 DUP2 DUP4 PUSH2 0x10CA JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0xF0A JUMP JUMPDEST CALLVALUE PUSH2 0x6B4 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6B4 JUMPI PUSH1 0x80 PUSH2 0x1038 PUSH2 0x117D JUMP JUMPDEST PUSH2 0x106B PUSH1 0x40 MLOAD DUP1 SWAP3 PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST RETURN JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xC0A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xC0A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xC0A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xC0A JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x6B4 JUMPI JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1153 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1145 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x118A DUP3 PUSH2 0x1092 JUMP JUMPDEST PUSH0 PUSH1 0x60 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x11E8 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x11BB JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x11B0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH0 DUP3 PUSH1 0x5 SLOAD SWAP2 PUSH2 0x1205 DUP4 PUSH2 0x11A1 JUMP JUMPDEST DUP1 DUP4 MSTORE SWAP3 PUSH1 0x20 SWAP1 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x1291 JUMPI POP PUSH1 0x1 EQ PUSH2 0x1232 JUMPI JUMPDEST POP POP PUSH2 0x1230 SWAP3 POP SUB DUP4 PUSH2 0x10CA JUMP JUMPDEST JUMP JUMPDEST SWAP2 POP SWAP3 PUSH1 0x5 PUSH0 MSTORE PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x1279 JUMPI POP PUSH2 0x1230 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x1222 JUMP JUMPDEST DUP6 SLOAD DUP9 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP8 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x125E JUMP JUMPDEST SWAP1 POP PUSH1 0x20 SWAP4 POP PUSH2 0x1230 SWAP6 SWAP3 POP PUSH1 0xFF NOT SWAP2 POP AND DUP3 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x1222 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH0 SWAP3 SWAP2 PUSH2 0x12C5 DUP3 PUSH2 0x11A1 JUMP JUMPDEST SWAP2 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x132F JUMPI POP PUSH1 0x1 EQ PUSH2 0x12E0 JUMPI POP POP POP JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 POP PUSH1 0x3 PUSH0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP1 PUSH0 SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x131C JUMPI POP POP POP ADD SWAP1 JUMP JUMPDEST DUP2 DUP2 PUSH1 0x20 SWAP3 SLOAD DUP6 DUP8 ADD MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x130E JUMP JUMPDEST PUSH1 0xFF NOT AND DUP4 MSTORE POP POP DUP2 ISZERO ISZERO SWAP1 SWAP2 MUL ADD SWAP2 POP JUMP JUMPDEST PUSH1 0x55 SWAP2 PUSH1 0xB SWAP2 PUSH1 0x40 MLOAD PUSH2 0x1379 DUP2 PUSH1 0x20 DUP1 DUP3 ADD SWAP5 PUSH2 0x135E DUP7 PUSH2 0x12B6 JUMP JUMPDEST SWAP1 DUP1 MLOAD SWAP3 DUP4 SWAP2 ADD DUP3 MCOPY ADD PUSH0 DUP2 MSTORE SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x10CA JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x20 DUP3 ADD MSTORE ADDRESS DUP2 MSTORE ADD PUSH1 0xFF DUP2 MSTORE8 KECCAK256 SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xC0A JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x13C3 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x13FD JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 SLOAD DUP2 LT ISZERO PUSH2 0x13C3 JUMPI PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x14BE DUP2 PUSH2 0x10AE JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x6B4 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x6B4 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH4 0xFFFFFFFF DUP2 AND TIMESTAMP LT ISZERO PUSH2 0x1522 JUMPI SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x2 SLOAD AND PUSH2 0x1533 JUMPI JUMP JUMPDEST PUSH32 0x75884CDA00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x20 DUP2 DUP4 SUB SLT PUSH2 0x6B4 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x6B4 JUMPI ADD DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x6B4 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x158F DUP3 PUSH2 0x10ED JUMP JUMPDEST SWAP3 PUSH2 0x159D PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x10CA JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x6B4 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP2 AND DUP1 DUP4 GT ISZERO PUSH2 0x1916 JUMPI PUSH1 0x1 PUSH0 SWAP2 JUMPDEST PUSH1 0x40 SWAP3 DUP4 MLOAD SWAP6 PUSH0 DUP8 PUSH1 0x4 DUP2 PUSH32 0x95D89B4100000000000000000000000000000000000000000000000000000000 SWAP5 DUP6 DUP3 MSTORE GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0x190C JUMPI PUSH0 SWAP8 PUSH2 0x18EE JUMPI JUMPDEST POP PUSH0 SWAP1 PUSH1 0x4 DUP7 MLOAD DUP1 SWAP6 DUP2 SWAP4 DUP3 MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x18E4 JUMPI PUSH0 SWAP3 PUSH2 0x18C0 JUMPI JUMPDEST POP PUSH8 0x2C68AF0BB140000 PUSH2 0x1687 PUSH1 0xFF DUP7 MLOAD SWAP4 PUSH2 0x165E DUP6 PUSH2 0x10AE JUMP JUMPDEST PUSH1 0x2 DUP6 MSTORE PUSH8 0xB1A2BC2EC500000 PUSH2 0x167F DUP4 PUSH1 0x20 SWAP10 DUP12 CALLDATASIZE DUP13 DUP12 ADD CALLDATACOPY AND DUP8 PUSH2 0x13AF JUMP JUMPDEST MSTORE AND DUP4 PUSH2 0x13AF JUMP JUMPDEST MSTORE PUSH2 0x1789 PUSH1 0x27 DUP6 MLOAD SWAP8 PUSH32 0x42616C616E636572203830200000000000000000000000000000000000000000 DUP7 DUP11 ADD MSTORE DUP1 MLOAD SWAP5 DUP7 DUP3 ADD SWAP6 DUP1 DUP8 PUSH1 0x2C DUP14 ADD MCOPY DUP11 ADD SWAP1 PUSH32 0x2032302000000000000000000000000000000000000000000000000000000000 PUSH1 0x2C DUP4 ADD MSTORE PUSH2 0x1713 PUSH1 0x30 DUP13 DUP4 MLOAD DUP12 DUP6 ADD SWAP6 DUP2 DUP8 DUP6 DUP4 ADD MCOPY ADD PUSH0 DUP4 DUP3 ADD MSTORE SUB DUP14 PUSH1 0x10 DUP3 ADD SWAP1 MSTORE ADD DUP13 PUSH2 0x10CA JUMP JUMPDEST DUP9 MLOAD SWAP7 DUP8 SWAP4 PUSH32 0x422D383000000000000000000000000000000000000000000000000000000000 DUP11 DUP7 ADD MSTORE MLOAD DUP1 SWAP2 PUSH1 0x24 DUP7 ADD MCOPY DUP4 ADD SWAP1 PUSH32 0x2D32300000000000000000000000000000000000000000000000000000000000 PUSH1 0x24 DUP4 ADD MSTORE MLOAD DUP1 SWAP3 DUP6 DUP4 ADD MCOPY ADD PUSH0 DUP4 DUP3 ADD MSTORE SUB PUSH1 0x7 DUP2 ADD DUP6 MSTORE ADD DUP4 PUSH2 0x10CA JUMP JUMPDEST DUP4 MLOAD SWAP6 PUSH1 0xA0 DUP8 ADD DUP8 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xC0A JUMPI SWAP1 DUP6 SWAP4 SWAP3 SWAP2 PUSH2 0x17F8 SWAP9 SWAP7 SWAP8 SWAP6 SWAP8 MSTORE DUP6 MSTORE DUP6 DUP6 ADD SWAP2 DUP3 MSTORE DUP3 DUP6 ADD SWAP6 PUSH1 0x2 DUP8 MSTORE PUSH1 0x60 DUP7 ADD SWAP2 DUP3 MSTORE PUSH2 0x17D0 PUSH2 0x11F2 JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP8 ADD SWAP3 DUP4 MSTORE PUSH2 0x182C DUP6 MLOAD SWAP10 DUP11 SWAP9 DUP8 DUP6 DUP12 ADD MSTORE MLOAD PUSH1 0xA0 PUSH1 0x60 DUP12 ADD MSTORE PUSH2 0x100 DUP11 ADD SWAP1 PUSH2 0x106D JUMP JUMPDEST SWAP5 MLOAD SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 SWAP6 DUP7 DUP11 DUP4 SUB ADD PUSH1 0x80 DUP12 ADD MSTORE PUSH2 0x106D JUMP JUMPDEST SWAP8 MLOAD PUSH1 0xA0 DUP9 ADD MSTORE MLOAD SWAP7 DUP4 DUP8 DUP3 SUB ADD PUSH1 0xC0 DUP9 ADD MSTORE DUP2 DUP1 DUP10 MLOAD SWAP3 DUP4 DUP2 MSTORE ADD SWAP9 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x18A9 JUMPI POP POP POP POP SWAP5 PUSH2 0x1871 SWAP2 PUSH2 0x18A6 SWAP7 MLOAD SWAP1 DUP7 DUP4 SUB ADD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x106D JUMP JUMPDEST SWAP2 PUSH32 0x0 AND SWAP1 DUP4 ADD MSTORE SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x10CA JUMP JUMPDEST SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP11 MSTORE SWAP9 DUP2 ADD SWAP9 DUP11 SWAP9 POP SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x184D JUMP JUMPDEST PUSH2 0x18DD SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x18D5 DUP2 DUP4 PUSH2 0x10CA JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x155B JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x1643 JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 SWAP2 SWAP8 POP PUSH2 0x1905 SWAP1 RETURNDATASIZE DUP1 DUP5 DUP4 RETURNDATACOPY PUSH2 0x18D5 DUP2 DUP4 PUSH2 0x10CA JUMP JUMPDEST SWAP7 SWAP1 PUSH2 0x1626 JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 PUSH1 0x1 SWAP2 PUSH2 0x15E6 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD SWAP3 CHAINID DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND PUSH1 0x40 DUP5 ADD MSTORE AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x60 DUP2 MSTORE PUSH2 0x14BE DUP2 PUSH2 0x1092 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC9 SWAP7 0xF7 0xD9 0x4D SLOAD PUSH0 XOR DUP14 PUSH5 0x621AB6B072 PUSH18 0xC46FC9F3F8B14D0EE35EAFBD5AD45416473 PUSH16 0x6C634300081B00336102C08060405234 PUSH2 0x8E1 JUMPI PUSH2 0x4643 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x1D DUP3 DUP6 PUSH2 0x8F5 JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP3 DUP3 SUB SLT PUSH2 0x8E1 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x8E1 JUMPI DUP3 ADD SWAP2 PUSH1 0xA0 DUP4 DUP4 SUB SLT PUSH2 0x8E1 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH1 0xA0 DUP4 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP5 DUP3 LT OR PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x8E1 JUMPI DUP2 PUSH2 0x81 SWAP2 DUP7 ADD PUSH2 0x918 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x8E1 JUMPI DUP2 PUSH2 0xA2 SWAP2 DUP7 ADD PUSH2 0x918 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP7 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH1 0x60 DUP6 ADD MLOAD SWAP1 SWAP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x8E1 JUMPI DUP2 ADD DUP3 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x8E1 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x710 JUMPI DUP2 PUSH1 0x5 SHL PUSH1 0x40 MLOAD SWAP3 PUSH2 0xFC PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x8F5 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x20 DUP1 DUP5 ADD SWAP2 DUP4 ADD ADD SWAP2 DUP6 DUP4 GT PUSH2 0x8E1 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x8E5 JUMPI POP POP POP PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT PUSH2 0x8E1 JUMPI PUSH1 0x20 SWAP3 PUSH2 0x144 SWAP3 ADD PUSH2 0x918 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD DUP2 SWAP1 MSTORE SWAP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x8E1 JUMPI DUP3 MLOAD SWAP4 MLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 SWAP6 SWAP2 SWAP1 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD PUSH1 0x31 PUSH1 0xF8 SHL DUP2 MSTORE PUSH2 0x199 DUP4 PUSH2 0x96D JUMP JUMPDEST PUSH2 0x120 MSTORE PUSH2 0x1A6 DUP3 PUSH2 0xAF0 JUMP JUMPDEST PUSH2 0x140 MSTORE DUP3 MLOAD PUSH1 0x20 DUP5 ADD KECCAK256 SWAP2 DUP3 PUSH1 0xE0 MSTORE MLOAD SWAP1 KECCAK256 DUP1 PUSH2 0x100 MSTORE CHAINID PUSH1 0xA0 MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP5 MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 PUSH1 0x80 MSTORE ADDRESS PUSH1 0xC0 MSTORE PUSH2 0x160 DUP3 SWAP1 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x710 JUMPI PUSH1 0x3 SLOAD SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x8D7 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x6F2 JUMPI DUP2 PUSH1 0x1F DUP5 SWAP4 GT PUSH2 0x87F JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0x80A JUMPI PUSH0 SWAP3 PUSH2 0x7FF JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x3 SSTORE JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x710 JUMPI PUSH1 0x4 SLOAD PUSH1 0x1 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x7F5 JUMPI JUMPDEST PUSH1 0x20 DUP3 LT EQ PUSH2 0x6F2 JUMPI PUSH1 0x1F DUP2 GT PUSH2 0x796 JUMPI JUMPDEST POP PUSH1 0x20 PUSH1 0x1F DUP3 GT PUSH1 0x1 EQ PUSH2 0x72F JUMPI DUP2 SWAP3 SWAP4 SWAP5 SWAP6 PUSH0 SWAP3 PUSH2 0x724 JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x4 SSTORE JUMPDEST PUSH2 0x180 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x710 JUMPI PUSH1 0x5 SLOAD SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x706 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x6F2 JUMPI DUP2 PUSH1 0x1F DUP5 SWAP4 GT PUSH2 0x6A4 JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0x61C JUMPI PUSH0 SWAP3 PUSH2 0x611 JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x5 SSTORE JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x1A0 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x60 DUP4 ADD MLOAD MLOAD SUB PUSH2 0x602 JUMPI PUSH0 SWAP1 PUSH0 JUMPDEST DUP2 MLOAD SWAP3 PUSH1 0xFF DUP3 AND SWAP4 DUP5 LT ISZERO PUSH2 0x494 JUMPI PUSH1 0x60 DUP6 ADD MLOAD DUP1 MLOAD DUP6 LT ISZERO PUSH2 0x480 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x1FE0 DUP5 PUSH1 0x5 SHL AND ADD ADD MLOAD SWAP1 PUSH7 0x2386F26FC10000 DUP3 LT PUSH2 0x471 JUMPI DUP2 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x3D9 JUMPI SWAP4 DUP1 PUSH2 0x3ED JUMPI POP PUSH2 0x1C0 MSTORE JUMPDEST PUSH1 0xFF DUP1 SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x3D9 JUMPI PUSH1 0x1 ADD PUSH2 0x375 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x3FF JUMPI POP PUSH2 0x1E0 MSTORE PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x411 JUMPI POP PUSH2 0x200 MSTORE PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x3 DUP2 SUB PUSH2 0x423 JUMPI POP PUSH2 0x220 MSTORE PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x4 DUP2 SUB PUSH2 0x435 JUMPI POP PUSH2 0x240 MSTORE PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x5 DUP2 SUB PUSH2 0x447 JUMPI POP PUSH2 0x260 MSTORE PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x6 DUP2 SUB PUSH2 0x459 JUMPI POP PUSH2 0x280 MSTORE PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x7 EQ PUSH2 0x467 JUMPI JUMPDEST POP PUSH2 0x3C5 JUMP JUMPDEST PUSH2 0x2A0 MSTORE PUSH0 PUSH2 0x461 JUMP JUMPDEST PUSH4 0xBD393583 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 POP SUB PUSH2 0x5F3 JUMPI PUSH1 0x40 MLOAD PUSH2 0x39FC SWAP2 DUP3 PUSH2 0xC27 DUP4 CODECOPY PUSH1 0x80 MLOAD DUP3 PUSH2 0x2806 ADD MSTORE PUSH1 0xA0 MLOAD DUP3 PUSH2 0x28D2 ADD MSTORE PUSH1 0xC0 MLOAD DUP3 PUSH2 0x27D7 ADD MSTORE PUSH1 0xE0 MLOAD DUP3 PUSH2 0x2855 ADD MSTORE PUSH2 0x100 MLOAD DUP3 PUSH2 0x287B ADD MSTORE PUSH2 0x120 MLOAD DUP3 PUSH2 0x1128 ADD MSTORE PUSH2 0x140 MLOAD DUP3 PUSH2 0x1152 ADD MSTORE PUSH2 0x160 MLOAD DUP3 DUP2 DUP2 PUSH2 0x260 ADD MSTORE DUP2 DUP2 PUSH2 0x488 ADD MSTORE DUP2 DUP2 PUSH2 0x65F ADD MSTORE DUP2 DUP2 PUSH2 0xD7E ADD MSTORE DUP2 DUP2 PUSH2 0x10ED ADD MSTORE DUP2 DUP2 PUSH2 0x14AE ADD MSTORE DUP2 DUP2 PUSH2 0x1733 ADD MSTORE DUP2 DUP2 PUSH2 0x19D8 ADD MSTORE DUP2 DUP2 PUSH2 0x2118 ADD MSTORE PUSH2 0x276C ADD MSTORE PUSH2 0x180 MLOAD DUP3 DUP2 DUP2 PUSH2 0x59D ADD MSTORE DUP2 DUP2 PUSH2 0x94A ADD MSTORE DUP2 DUP2 PUSH2 0xA12 ADD MSTORE DUP2 DUP2 PUSH2 0xC7A ADD MSTORE PUSH2 0x1277 ADD MSTORE MLOAD DUP2 PUSH2 0x28FA ADD MSTORE PUSH2 0x1C0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x25D2 ADD MSTORE PUSH2 0x2951 ADD MSTORE PUSH2 0x1E0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x25FF ADD MSTORE PUSH2 0x297E ADD MSTORE PUSH2 0x200 MLOAD DUP2 DUP2 DUP2 PUSH2 0x262C ADD MSTORE PUSH2 0x29B7 ADD MSTORE PUSH2 0x220 MLOAD DUP2 DUP2 DUP2 PUSH2 0x2659 ADD MSTORE PUSH2 0x29F0 ADD MSTORE PUSH2 0x240 MLOAD DUP2 DUP2 DUP2 PUSH2 0x2686 ADD MSTORE PUSH2 0x2A2A ADD MSTORE PUSH2 0x260 MLOAD DUP2 DUP2 DUP2 PUSH2 0x26B3 ADD MSTORE PUSH2 0x2A63 ADD MSTORE PUSH2 0x280 MLOAD DUP2 DUP2 DUP2 PUSH2 0x26E0 ADD MSTORE PUSH2 0x2A9F ADD MSTORE PUSH2 0x2A0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x270B ADD MSTORE PUSH2 0x2AD9 ADD MSTORE RETURN JUMPDEST PUSH4 0x1CE788A7 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0xAAAD13F7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x345 JUMP JUMPDEST PUSH1 0x5 PUSH0 SWAP1 DUP2 MSTORE SWAP4 POP PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 SWAP2 SWAP1 JUMPDEST PUSH1 0x1F NOT DUP5 AND DUP6 LT PUSH2 0x689 JUMPI PUSH1 0x1 SWAP5 POP DUP4 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0x671 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x5 SSTORE PUSH2 0x35A JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x663 JUMP JUMPDEST DUP2 DUP2 ADD MLOAD DUP4 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x648 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP6 LT PUSH2 0x6EB JUMPI JUMPDEST SWAP1 DUP5 SWAP4 SWAP3 SWAP2 JUMPDEST PUSH1 0x1F DUP4 ADD PUSH1 0x5 SHR DUP3 ADD DUP2 LT PUSH2 0x6DD JUMPI POP POP PUSH2 0x32F JUMP JUMPDEST PUSH0 DUP2 SSTORE DUP6 SWAP5 POP PUSH1 0x1 ADD PUSH2 0x6C7 JUMP JUMPDEST POP DUP1 PUSH2 0x6C1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x31B JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x2DF JUMP JUMPDEST PUSH1 0x4 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 JUMPDEST PUSH1 0x1F NOT DUP5 AND DUP2 LT PUSH2 0x77E JUMPI POP PUSH1 0x1 SWAP4 SWAP5 SWAP6 SWAP7 DUP4 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0x766 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x4 SSTORE PUSH2 0x2F4 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x758 JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x20 PUSH1 0x1 DUP2 SWAP3 DUP6 DUP12 ADD MLOAD DUP2 SSTORE ADD SWAP4 ADD SWAP2 ADD PUSH2 0x73A JUMP JUMPDEST PUSH1 0x4 PUSH0 MSTORE PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B PUSH1 0x1F DUP4 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP5 LT PUSH2 0x7EE JUMPI JUMPDEST PUSH1 0x1F DUP4 ADD PUSH1 0x5 SHR DUP3 ADD DUP2 LT PUSH2 0x7E3 JUMPI POP POP PUSH2 0x2C5 JUMP JUMPDEST PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x7CD JUMP JUMPDEST POP DUP1 PUSH2 0x7CD JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x2B3 JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x27D JUMP JUMPDEST PUSH1 0x3 PUSH0 SWAP1 DUP2 MSTORE SWAP4 POP PUSH0 MLOAD PUSH1 0x20 PUSH2 0x4623 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE SWAP2 SWAP1 JUMPDEST PUSH1 0x1F NOT DUP5 AND DUP6 LT PUSH2 0x864 JUMPI PUSH1 0x1 SWAP5 POP DUP4 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0x84C JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x3 SSTORE PUSH2 0x292 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x83E JUMP JUMPDEST DUP2 DUP2 ADD MLOAD DUP4 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x823 JUMP JUMPDEST PUSH1 0x3 PUSH0 MSTORE SWAP1 SWAP2 POP PUSH0 MLOAD PUSH1 0x20 PUSH2 0x4623 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP6 LT PUSH2 0x8D0 JUMPI JUMPDEST SWAP1 DUP5 SWAP4 SWAP3 SWAP2 JUMPDEST PUSH1 0x1F DUP4 ADD PUSH1 0x5 SHR DUP3 ADD DUP2 LT PUSH2 0x8C2 JUMPI POP POP PUSH2 0x267 JUMP JUMPDEST PUSH0 DUP2 SSTORE DUP6 SWAP5 POP PUSH1 0x1 ADD PUSH2 0x8AC JUMP JUMPDEST POP DUP1 PUSH2 0x8A6 JUMP JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x253 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x114 JUMP JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x8E1 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x710 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x94C PUSH1 0x1F DUP5 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP6 PUSH2 0x8F5 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x8E1 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0x9E3 JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0x9A5 JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0x997 JUMPI POP OR SWAP1 JUMP JUMPDEST DUP3 PUSH0 NOT SWAP2 SUB PUSH1 0x3 SHL SHL AND OR SWAP1 JUMP JUMPDEST PUSH1 0x44 DUP3 PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH4 0x305A27A9 PUSH1 0xE0 SHL DUP4 MSTORE DUP2 PUSH1 0x4 DUP5 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH1 0x24 DUP7 ADD MSTORE ADD DUP5 DUP5 ADD MCOPY PUSH0 DUP3 DUP3 ADD DUP5 ADD MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP2 ADD SUB ADD SWAP1 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x710 JUMPI PUSH0 SLOAD SWAP3 PUSH1 0x1 SWAP4 DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0xAE6 JUMPI JUMPDEST DUP4 DUP3 LT EQ PUSH2 0x6F2 JUMPI PUSH1 0x1F DUP2 GT PUSH2 0xAB3 JUMPI JUMPDEST POP DUP2 PUSH1 0x1F DUP5 GT PUSH1 0x1 EQ PUSH2 0xA51 JUMPI POP SWAP3 DUP3 SWAP4 SWAP2 DUP4 SWAP3 PUSH0 SWAP5 PUSH2 0xA46 JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0xA31 JUMP JUMPDEST SWAP2 SWAP1 DUP4 PUSH1 0x1F NOT DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0xA99 JUMPI POP POP POP LT PUSH2 0xA81 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0xA74 JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0xA63 JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP5 PUSH1 0x1F DUP5 PUSH0 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 PUSH1 0x1F DUP7 ADD PUSH1 0x5 SHR ADD JUMPDEST DUP3 DUP2 LT PUSH2 0xADB JUMPI POP POP PUSH2 0xA16 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0xACD JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xA05 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0xB1A JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0x9A5 JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0x997 JUMPI POP OR SWAP1 JUMP JUMPDEST SWAP2 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x710 JUMPI PUSH1 0x1 SWAP2 DUP3 SLOAD DUP4 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0xC1C JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x6F2 JUMPI PUSH1 0x1F DUP2 GT PUSH2 0xBE9 JUMPI JUMPDEST POP DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0xB89 JUMPI POP DUP2 SWAP3 SWAP4 SWAP5 PUSH0 SWAP3 PUSH2 0xB7E JUMPI JUMPDEST POP POP PUSH0 NOT PUSH1 0x3 DUP4 SWAP1 SHL SHR NOT AND SWAP1 DUP3 SHL OR SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0xB67 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT DUP4 AND SWAP6 DUP5 PUSH0 MSTORE DUP3 PUSH0 KECCAK256 SWAP3 PUSH0 SWAP1 JUMPDEST DUP9 DUP3 LT PUSH2 0xBD2 JUMPI POP POP DUP4 DUP6 SWAP7 SWAP8 LT PUSH2 0xBBA JUMPI JUMPDEST POP POP POP DUP2 SHL ADD SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0xBAD JUMP JUMPDEST DUP1 DUP8 DUP6 SWAP7 DUP3 SWAP5 SWAP7 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP6 ADD SWAP4 ADD SWAP1 PUSH2 0xB9A JUMP JUMPDEST DUP4 PUSH0 MSTORE DUP4 PUSH1 0x1F DUP4 PUSH0 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR ADD JUMPDEST DUP3 DUP2 LT PUSH2 0xC11 JUMPI POP POP PUSH2 0xB4E JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP5 SWAP1 PUSH2 0xC03 JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xB3D JUMP INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH1 0xE0 PUSH0 CALLDATALOAD DUP2 SHR SWAP3 DUP4 PUSH4 0x1FFC9A7 EQ PUSH2 0x1D90 JUMPI POP DUP3 PUSH4 0x6FDDE03 EQ PUSH2 0x1CE1 JUMPI DUP3 PUSH4 0x95EA7B3 EQ PUSH2 0x1C63 JUMPI DUP3 PUSH4 0x16A0B3E0 EQ PUSH2 0x1A2A JUMPI DUP3 PUSH4 0x18160DDD EQ PUSH2 0x1A0E JUMPI DUP3 PUSH4 0x23B872DD EQ PUSH2 0x1966 JUMPI DUP3 PUSH4 0x23DE6651 EQ PUSH2 0x1934 JUMPI DUP3 PUSH4 0x273C1ADF EQ PUSH2 0x1912 JUMPI DUP3 PUSH4 0x30ADF81F EQ PUSH2 0x18D8 JUMPI DUP3 PUSH4 0x313CE567 EQ PUSH2 0x18BD JUMPI DUP3 PUSH4 0x3644E515 EQ PUSH2 0x18A1 JUMPI DUP3 PUSH4 0x53B79BD7 EQ PUSH2 0x16E5 JUMPI DUP3 PUSH4 0x54FD4D50 EQ PUSH2 0x15F5 JUMPI DUP3 PUSH4 0x5687F2B8 EQ PUSH2 0x1596 JUMPI DUP3 PUSH4 0x627CDCB9 EQ PUSH2 0x156D JUMPI DUP3 PUSH4 0x654CF15D EQ PUSH2 0x154B JUMPI DUP3 PUSH4 0x679AEFCE EQ PUSH2 0x1514 JUMPI DUP3 PUSH4 0x70A08231 EQ PUSH2 0x1440 JUMPI DUP3 PUSH4 0x72C98186 EQ PUSH2 0x131F JUMPI DUP3 PUSH4 0x7ECEBE00 EQ PUSH2 0x12DB JUMPI DUP3 PUSH4 0x81FA807C EQ PUSH2 0x121A JUMPI DUP3 PUSH4 0x84B0196E EQ PUSH2 0x1111 JUMPI DUP3 PUSH4 0x8D928AF8 EQ PUSH2 0x10C1 JUMPI DUP3 PUSH4 0x95D89B41 EQ PUSH2 0xFBB JUMPI DUP3 PUSH4 0x984DE9E8 EQ PUSH2 0xDF9 JUMPI DUP3 PUSH4 0xA9059CBB EQ PUSH2 0xCE6 JUMPI DUP3 PUSH4 0xAA6CA808 EQ PUSH2 0xC21 JUMPI DUP3 PUSH4 0xABB1DC44 EQ PUSH2 0x9B8 JUMPI DUP3 PUSH4 0xB156AA0A EQ PUSH2 0x8F1 JUMPI DUP3 PUSH4 0xB677FA56 EQ PUSH2 0x8CF JUMPI DUP3 PUSH4 0xC0BC6F33 EQ PUSH2 0x5F6 JUMPI DUP3 PUSH4 0xCE20ECE7 EQ PUSH2 0x5D6 JUMPI DUP3 PUSH4 0xD335B0CF EQ PUSH2 0x543 JUMPI DUP3 PUSH4 0xD505ACCF EQ PUSH2 0x2D8 JUMPI POP DUP2 PUSH4 0xDD62ED3E EQ PUSH2 0x1E5 JUMPI POP PUSH4 0xF89F27ED EQ PUSH2 0x1AE JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH2 0x1DD SWAP1 PUSH2 0x1CA PUSH2 0x28F8 JUMP JUMPDEST SWAP1 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1FA7 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x1E1 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH2 0x200 PUSH2 0x1E1C JUMP JUMPDEST PUSH1 0x64 PUSH2 0x20A PUSH2 0x1E3F JUMP JUMPDEST SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP1 SWAP8 DUP8 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 PUSH32 0x927DA10500000000000000000000000000000000000000000000000000000000 DUP8 MSTORE ADDRESS SWAP1 DUP8 ADD MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE AND PUSH1 0x44 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2CF JUMPI PUSH0 SWAP2 PUSH2 0x29A JUMPI JUMPDEST PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x2C7 JUMPI JUMPDEST DUP2 PUSH2 0x2B5 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP2 MLOAD SWAP1 PUSH2 0x290 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2A8 JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 SWAP1 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH2 0x2F1 PUSH2 0x1E1C JUMP JUMPDEST SWAP1 PUSH2 0x2FA PUSH2 0x1E3F JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP3 PUSH1 0x84 CALLDATALOAD SWAP1 PUSH1 0x64 CALLDATALOAD PUSH1 0xFF DUP4 AND DUP4 SUB PUSH2 0x1E1 JUMPI DUP1 TIMESTAMP GT PUSH2 0x519 JUMPI PUSH2 0x347 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH1 0x1 DUP3 ADD SWAP1 SSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x413 PUSH2 0x40A DUP8 MLOAD SWAP6 PUSH1 0x20 DUP8 ADD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP8 DUP9 SWAP6 DUP7 DUP10 AND SWAP8 DUP9 DUP14 DUP5 ADD MSTORE DUP8 DUP13 AND PUSH1 0x60 DUP5 ADD MSTORE DUP14 PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 MSTORE PUSH2 0x3BE DUP2 PUSH2 0x1E92 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 PUSH2 0x3C9 PUSH2 0x27C0 JUMP JUMPDEST SWAP1 DUP11 MLOAD SWAP2 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x2 DUP4 ADD MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0xC4 CALLDATALOAD SWAP2 PUSH1 0x42 PUSH1 0xA4 CALLDATALOAD SWAP3 KECCAK256 PUSH2 0x2ED8 JUMP JUMPDEST SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x2F67 JUMP JUMPDEST AND DUP2 DUP2 SUB PUSH2 0x4EC JUMPI POP POP PUSH0 DUP5 SWAP6 SWAP7 PUSH2 0x484 PUSH1 0x20 SWAP7 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP7 MSTORE DUP6 ADD PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 SWAP5 PUSH1 0x60 DUP3 ADD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP4 MSTORE AND PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2CF JUMPI POP PUSH2 0x4B8 JUMPI STOP JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x4E4 JUMPI JUMPDEST DUP2 PUSH2 0x4D1 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1E1 JUMPI PUSH2 0x4E2 SWAP1 PUSH2 0x2079 JUMP JUMPDEST STOP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x4C4 JUMP JUMPDEST DUP8 PUSH32 0x4B800E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP7 PUSH32 0x6279130200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP1 MLOAD SWAP2 PUSH32 0xB45090F900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2CF JUMPI PUSH0 SWAP2 PUSH2 0x29A JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH6 0x9184E72A000 DUP2 MSTORE RETURN JUMPDEST SWAP2 POP CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP3 MLOAD PUSH2 0x613 DUP2 PUSH2 0x1E92 JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 DUP3 ADD SWAP2 PUSH1 0x60 DUP4 MSTORE DUP6 DUP2 ADD SWAP3 PUSH0 DUP5 MSTORE PUSH1 0x60 DUP3 ADD PUSH0 DUP2 MSTORE PUSH1 0x80 DUP4 ADD SWAP2 PUSH0 DUP4 MSTORE PUSH1 0xA0 DUP5 ADD SWAP4 PUSH0 DUP6 MSTORE PUSH1 0xC0 DUP2 ADD SWAP6 PUSH0 DUP8 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 DUP12 MLOAD PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x87F JUMPI PUSH0 SWAP2 PUSH2 0x8AD JUMPI JUMPDEST POP DUP4 MSTORE DUP12 MLOAD PUSH32 0x7E361BDE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x87F JUMPI PUSH0 SWAP2 PUSH2 0x889 JUMPI JUMPDEST POP DUP5 MSTORE DUP12 MLOAD PUSH32 0xB45090F900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE DUP11 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x87F JUMPI PUSH0 SWAP2 PUSH2 0x852 JUMPI JUMPDEST POP DUP10 MSTORE PUSH2 0x751 PUSH2 0x20CF JUMP JUMPDEST DUP6 MSTORE DUP12 MLOAD SWAP2 DUP3 SWAP2 PUSH32 0xF29486A100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE DUP2 PUSH1 0x24 PUSH2 0x1A0 SWAP5 DUP6 SWAP4 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x848 JUMPI SWAP3 DUP12 SWAP13 SWAP3 PUSH2 0x7E0 SWAP3 PUSH2 0x7F3 SWAP7 SWAP6 PUSH0 SWAP15 SWAP13 SWAP14 SWAP15 SWAP3 PUSH2 0x81B JUMPI JUMPDEST POP POP DUP11 DUP2 ADD MLOAD ISZERO ISZERO DUP9 MSTORE PUSH2 0x120 PUSH2 0x100 SWAP2 DUP3 DUP2 ADD MLOAD ISZERO ISZERO DUP12 MSTORE ADD MLOAD ISZERO ISZERO DUP11 MSTORE DUP4 MLOAD SWAP14 DUP14 DUP16 SWAP15 SWAP4 DUP16 SWAP5 DUP6 MSTORE MLOAD SWAP4 ADD MSTORE DUP13 ADD SWAP1 PUSH2 0x1FA7 JUMP JUMPDEST SWAP2 MLOAD SWAP1 PUSH1 0x1F NOT DUP12 DUP5 SUB ADD SWAP1 DUP12 ADD MSTORE PUSH2 0x1FA7 JUMP JUMPDEST SWAP6 MLOAD PUSH1 0x60 DUP9 ADD MSTORE MLOAD PUSH1 0x80 DUP8 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xA0 DUP7 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xC0 DUP6 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST PUSH2 0x83A SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x841 JUMPI JUMPDEST PUSH2 0x832 DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2482 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x7AA JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x828 JUMP JUMPDEST DUP13 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 POP DUP11 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x878 JUMPI JUMPDEST PUSH2 0x869 DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1E1 JUMPI MLOAD PUSH0 PUSH2 0x746 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x85F JUMP JUMPDEST DUP14 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x8A5 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x89D DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x228D JUMP JUMPDEST SWAP1 POP PUSH0 PUSH2 0x703 JUMP JUMPDEST PUSH2 0x8C9 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x8C1 DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x25A4 JUMP JUMPDEST PUSH0 PUSH2 0x6C0 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH8 0x9B6E64A8EC60000 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP2 MLOAD SWAP1 PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS SWAP1 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x9AE JUMPI SWAP2 PUSH2 0x1DD SWAP3 PUSH0 SWAP3 PUSH2 0x992 JUMPI JUMPDEST POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1FA7 JUMP JUMPDEST PUSH2 0x9A7 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x8C1 DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x97F JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD SWAP2 PUSH32 0x67E0E07600000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH0 DUP3 PUSH1 0x24 DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xC17 JUMPI PUSH0 SWAP4 PUSH0 SWAP3 PUSH0 SWAP3 PUSH0 SWAP6 PUSH2 0xAED JUMPI JUMPDEST POP SWAP1 PUSH2 0xA65 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP2 MLOAD SWAP7 DUP8 SWAP7 PUSH1 0x80 DUP9 MSTORE PUSH1 0x80 DUP9 ADD SWAP1 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x20 DUP8 DUP3 SUB DUP2 DUP10 ADD MSTORE DUP1 DUP1 DUP8 MLOAD SWAP4 DUP5 DUP2 MSTORE ADD SWAP7 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0xAA9 JUMPI DUP10 DUP9 SUB DUP7 DUP12 ADD MSTORE DUP10 DUP1 PUSH2 0x1DD DUP12 PUSH2 0xA9B DUP13 DUP13 PUSH2 0x1FA7 JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x1FA7 JUMP JUMPDEST SWAP2 DUP5 SWAP9 SWAP10 POP PUSH1 0x60 DUP7 SWAP8 SWAP9 PUSH1 0x1 SWAP4 SWAP6 SWAP8 DUP4 SWAP8 MLOAD DUP1 MLOAD PUSH2 0xAC6 DUP2 PUSH2 0x2023 JUMP JUMPDEST DUP4 MSTORE DUP7 DUP6 DUP3 ADD MLOAD AND DUP6 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO DUP10 DUP3 ADD MSTORE ADD SWAP9 ADD SWAP3 ADD DUP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 PUSH2 0xA7D JUMP JUMPDEST SWAP6 POP SWAP4 POP SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP6 RETURNDATACOPY PUSH2 0xB03 DUP2 DUP6 PUSH2 0x1ECA JUMP JUMPDEST DUP4 ADD SWAP3 PUSH1 0x80 DUP2 DUP6 SUB SLT PUSH2 0x1E1 JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x1E1 JUMPI DUP6 PUSH2 0xB30 SWAP2 DUP5 ADD PUSH2 0x2185 JUMP JUMPDEST SWAP2 PUSH1 0x20 SWAP6 DUP7 DUP3 ADD MLOAD DUP6 DUP2 GT PUSH2 0x1E1 JUMPI DUP3 ADD DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x1E1 JUMPI DUP1 MLOAD SWAP1 PUSH2 0xB58 DUP3 PUSH2 0x1EED JUMP JUMPDEST SWAP9 PUSH2 0xB65 DUP7 MLOAD SWAP11 DUP12 PUSH2 0x1ECA JUMP JUMPDEST DUP3 DUP11 MSTORE DUP1 DUP11 ADD DUP2 PUSH1 0x60 DUP1 SWAP6 MUL DUP5 ADD ADD SWAP3 DUP6 DUP5 GT PUSH2 0x1E1 JUMPI DUP3 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0xBC5 JUMPI POP POP POP POP POP DUP3 DUP3 ADD MLOAD DUP6 DUP2 GT PUSH2 0x1E1 JUMPI DUP2 PUSH2 0xBA3 SWAP2 DUP5 ADD PUSH2 0x222C JUMP JUMPDEST SWAP5 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x1E1 JUMPI PUSH2 0xBBA SWAP3 ADD PUSH2 0x222C JUMP JUMPDEST SWAP2 SWAP5 SWAP3 SWAP2 SWAP4 DUP7 PUSH2 0xA48 JUMP JUMPDEST DUP5 DUP3 DUP8 SUB SLT PUSH2 0x1E1 JUMPI DUP8 MLOAD SWAP1 PUSH2 0xBDA DUP3 PUSH2 0x1E62 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1E1 JUMPI DUP3 MSTORE DUP4 DUP4 ADD MLOAD SWAP1 DUP13 DUP3 AND DUP3 SUB PUSH2 0x1E1 JUMPI DUP3 DUP6 SWAP3 DUP4 DUP10 SWAP6 ADD MSTORE PUSH2 0xC08 DUP12 DUP7 ADD PUSH2 0x2079 JUMP JUMPDEST DUP12 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0xB80 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP2 MLOAD SWAP1 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS SWAP1 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x9AE JUMPI SWAP2 PUSH2 0x1DD SWAP3 PUSH0 SWAP3 PUSH2 0xCC2 JUMPI JUMPDEST POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xCDF SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xCD7 DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2203 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0xCAF JUMP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1E1 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH2 0xD64 SWAP3 PUSH2 0xD06 PUSH2 0x1E1C JUMP JUMPDEST DUP4 MLOAD PUSH32 0xBEABACC800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xDEF JUMPI PUSH2 0xDB5 JUMPI JUMPDEST PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xDE7 JUMPI JUMPDEST DUP2 PUSH2 0xDCE PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1E1 JUMPI PUSH2 0xDE1 PUSH1 0x20 SWAP3 PUSH2 0x2079 JUMP JUMPDEST POP PUSH2 0xDAB JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xDC1 JUMP JUMPDEST POP MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1E1 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1E1 JUMPI PUSH2 0xE29 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x1F05 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1E1 JUMPI PUSH2 0xE3E DUP2 PUSH2 0x2023 JUMP JUMPDEST PUSH2 0xFB4 JUMPI DUP3 JUMPDEST PUSH2 0xE4C PUSH2 0x28F8 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x3 EQ PUSH2 0xF5F JUMPI DUP1 PUSH1 0x4 EQ PUSH2 0xED8 JUMPI DUP1 PUSH1 0x1 EQ PUSH2 0xE95 JUMPI PUSH1 0x2 EQ PUSH2 0xE7F JUMPI PUSH1 0x51 DUP5 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x20 SWAP4 POP SWAP1 PUSH2 0xE8D SWAP2 PUSH2 0x3012 JUMP JUMPDEST SWAP1 JUMPDEST MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 SWAP3 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0xEC5 JUMPI POP PUSH1 0x20 SWAP3 PUSH2 0xEBF SWAP2 PUSH2 0x2B84 JUMP JUMPDEST SWAP1 PUSH2 0xE8F JUMP JUMPDEST PUSH1 0x11 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP3 PUSH0 SWAP2 SWAP1 PUSH8 0xDE0B6B3A7640000 JUMPDEST DUP6 MLOAD DUP5 LT ISZERO PUSH2 0xF23 JUMPI PUSH2 0xF1B PUSH1 0x1 SWAP2 PUSH2 0xF15 PUSH2 0xF03 DUP8 DUP8 PUSH2 0x20BB JUMP JUMPDEST MLOAD PUSH2 0xF0E DUP9 DUP12 PUSH2 0x20BB JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x2BA2 JUMP JUMPDEST SWAP1 PUSH2 0x2C2D JUMP JUMPDEST SWAP4 ADD SWAP3 PUSH2 0xEE7 JUMP JUMPDEST SWAP3 POP SWAP4 POP POP DUP1 ISZERO PUSH2 0xF38 JUMPI PUSH1 0x20 SWAP3 POP SWAP1 PUSH2 0xE8F JUMP JUMPDEST DUP3 PUSH32 0x2654368900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP SWAP3 PUSH0 SWAP2 SWAP1 PUSH8 0xDE0B6B3A7640000 JUMPDEST DUP6 MLOAD DUP5 LT ISZERO PUSH2 0xF23 JUMPI PUSH8 0xDE0B6B3A7640000 PUSH2 0xFAB PUSH1 0x1 SWAP3 PUSH2 0xFA5 PUSH2 0xF93 DUP9 DUP9 PUSH2 0x20BB JUMP JUMPDEST MLOAD PUSH2 0xF9E DUP10 DUP13 PUSH2 0x20BB JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x2E3F JUMP JUMPDEST SWAP1 PUSH2 0x2B71 JUMP JUMPDEST DIV SWAP4 ADD SWAP3 PUSH2 0xF6E JUMP JUMPDEST PUSH1 0x3 PUSH2 0xE44 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP2 MLOAD SWAP2 DUP3 PUSH0 DUP4 SLOAD PUSH2 0xFDD DUP2 PUSH2 0x2041 JUMP JUMPDEST SWAP1 DUP2 DUP5 MSTORE PUSH1 0x20 SWAP6 PUSH1 0x1 SWAP2 DUP8 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x107C JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1020 JUMPI JUMPDEST POP POP POP PUSH2 0x1DD SWAP3 SWAP2 PUSH2 0x1011 SWAP2 SUB DUP6 PUSH2 0x1ECA JUMP JUMPDEST MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1DF7 JUMP JUMPDEST PUSH0 SWAP1 DUP2 MSTORE DUP7 SWAP4 POP SWAP2 SWAP1 PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B JUMPDEST DUP3 DUP5 LT PUSH2 0x1064 JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x1011 PUSH2 0x1DD PUSH2 0xFFE JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x104B JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 DUP3 ADD MSTORE SWAP4 ISZERO ISZERO PUSH1 0x5 SHL DUP7 ADD SWAP1 SWAP4 ADD SWAP4 POP DUP5 SWAP3 POP PUSH2 0x1011 SWAP2 POP PUSH2 0x1DD SWAP1 POP PUSH2 0xFFE JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP2 POP CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH2 0x114C PUSH32 0x0 PUSH2 0x2C4F JUMP JUMPDEST SWAP3 PUSH2 0x1176 PUSH32 0x0 PUSH2 0x2D81 JUMP JUMPDEST DUP2 MLOAD SWAP3 PUSH1 0x20 DUP5 ADD SWAP1 DUP5 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x1207 JUMPI POP SWAP2 PUSH2 0x11E7 SWAP2 PUSH2 0x1DD SWAP5 SWAP4 DUP3 MSTORE PUSH0 DUP5 MSTORE PUSH2 0x11DA DUP3 MLOAD SWAP8 DUP9 SWAP8 PUSH32 0xF00000000000000000000000000000000000000000000000000000000000000 DUP10 MSTORE DUP1 PUSH1 0x20 DUP11 ADD MSTORE DUP9 ADD SWAP1 PUSH2 0x1DF7 JUMP JUMPDEST SWAP2 DUP7 DUP4 SUB SWAP1 DUP8 ADD MSTORE PUSH2 0x1DF7 JUMP JUMPDEST SWAP1 CHAINID PUSH1 0x60 DUP6 ADD MSTORE ADDRESS PUSH1 0x80 DUP6 ADD MSTORE PUSH0 PUSH1 0xA0 DUP6 ADD MSTORE DUP4 DUP3 SUB PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x1FA7 JUMP JUMPDEST PUSH1 0x41 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP2 MLOAD SWAP1 PUSH32 0xF29486A100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 SWAP1 DUP2 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xC17 JUMPI PUSH0 SWAP3 PUSH2 0x12BE JUMPI JUMPDEST POP POP PUSH1 0x60 DUP3 DUP3 ADD MLOAD SWAP2 ADD MLOAD DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH2 0x12D4 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x841 JUMPI PUSH2 0x832 DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP3 DUP1 PUSH2 0x12A7 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x130D PUSH2 0x1E1C JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP3 PUSH1 0x3 NOT DUP5 DUP2 CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP5 GT PUSH2 0x1E1 JUMPI DUP4 CALLDATASIZE SUB ADD SLT PUSH2 0x1E1 JUMPI DUP4 MLOAD SWAP2 PUSH2 0x135E DUP4 PUSH2 0x1E92 JUMP JUMPDEST DUP1 DUP5 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1E1 JUMPI DUP4 MSTORE PUSH1 0x24 DUP2 ADD CALLDATALOAD DUP7 DUP5 ADD MSTORE PUSH1 0x44 DUP2 ADD CALLDATALOAD DUP3 DUP2 GT PUSH2 0x1E1 JUMPI PUSH2 0x1391 SWAP1 DUP6 CALLDATASIZE SWAP2 DUP5 ADD ADD PUSH2 0x1F05 JUMP JUMPDEST DUP6 DUP5 ADD MSTORE PUSH1 0x64 DUP2 ADD CALLDATALOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x84 DUP2 ADD CALLDATALOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA4 DUP2 ADD CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1E1 JUMPI PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC4 DUP2 ADD CALLDATALOAD SWAP1 DUP3 DUP3 GT PUSH2 0x1E1 JUMPI ADD SWAP3 CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0x1E1 JUMPI DUP1 DUP5 ADD CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x1207 JUMPI POP DUP4 MLOAD SWAP1 PUSH2 0x140C DUP7 PUSH1 0x1F NOT PUSH1 0x1F DUP5 ADD AND ADD DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP1 DUP3 MSTORE CALLDATASIZE PUSH1 0x24 DUP3 DUP7 ADD ADD GT PUSH2 0x1E1 JUMPI DUP6 DUP2 PUSH0 SWAP3 PUSH1 0x24 PUSH2 0xE8D SWAP8 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x143B PUSH2 0x2755 JUMP JUMPDEST PUSH2 0x22D1 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP3 PUSH2 0x145E PUSH2 0x1E1C JUMP JUMPDEST PUSH1 0x44 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP6 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP4 PUSH32 0xF7888AEC00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS SWAP1 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xDEF JUMPI PUSH0 SWAP3 PUSH2 0x14E5 JUMPI JUMPDEST POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP DUP3 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x150D JUMPI JUMPDEST PUSH2 0x14FD DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1E1 JUMPI MLOAD SWAP1 DUP4 PUSH2 0x14DE JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x14F3 JUMP JUMPDEST POP CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH32 0x18E79A2000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH8 0x16345785D8A0000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI CALLER PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD SWAP1 SWAP2 SSTORE STOP JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH2 0x15C8 CALLDATASIZE PUSH2 0x1F65 JUMP JUMPDEST SWAP4 SWAP2 SWAP5 PUSH2 0x15D3 PUSH2 0x2755 JUMP JUMPDEST MLOAD SWAP4 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP5 AND SWAP3 LOG3 STOP JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP1 MLOAD PUSH1 0x5 SLOAD SWAP1 SWAP2 DUP3 PUSH0 PUSH2 0x1618 DUP5 PUSH2 0x2041 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 SWAP5 PUSH1 0x1 SWAP1 DUP7 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x16A5 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x164A JUMPI JUMPDEST POP POP PUSH2 0x1DD SWAP3 SWAP2 PUSH2 0x1011 SWAP2 SUB DUP6 PUSH2 0x1ECA JUMP JUMPDEST SWAP1 DUP6 SWAP3 POP PUSH1 0x5 PUSH0 MSTORE PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 SWAP2 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x168D JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x1011 PUSH2 0x1638 JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x1677 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 DUP3 ADD MSTORE SWAP3 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD SWAP1 SWAP3 ADD SWAP3 POP DUP4 SWAP2 POP PUSH2 0x1011 SWAP1 POP PUSH2 0x1638 JUMP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x1703 DUP3 PUSH2 0x1E62 JUMP JUMPDEST PUSH1 0x60 DUP3 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP4 ADD SWAP2 PUSH1 0x60 DUP4 MSTORE DUP2 DUP5 ADD SWAP3 PUSH1 0x60 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 PUSH32 0x0 AND SWAP1 DUP5 MLOAD PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1897 JUMPI SWAP1 PUSH0 SWAP3 SWAP2 DUP4 SWAP2 PUSH2 0x187D JUMPI JUMPDEST POP DUP9 MSTORE PUSH1 0x24 DUP7 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x7E361BDE00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1873 JUMPI PUSH0 SWAP2 PUSH2 0x185A JUMPI JUMPDEST POP DUP2 SWAP6 SWAP3 SWAP6 MSTORE PUSH2 0x17E9 PUSH2 0x28F8 JUMP JUMPDEST DUP5 MSTORE DUP3 MLOAD SWAP5 DUP1 DUP7 MSTORE PUSH1 0x80 DUP7 ADD SWAP3 MLOAD SWAP3 PUSH1 0x60 DUP3 DUP9 ADD MSTORE DUP4 MLOAD DUP1 SWAP2 MSTORE DUP2 PUSH1 0xA0 DUP9 ADD SWAP5 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1844 JUMPI DUP9 DUP1 PUSH2 0x1DD DUP11 DUP11 PUSH2 0x1833 DUP12 DUP12 MLOAD PUSH1 0x1F NOT SWAP4 DUP5 DUP9 DUP5 SUB ADD SWAP1 DUP9 ADD MSTORE PUSH2 0x1FA7 JUMP JUMPDEST SWAP2 MLOAD SWAP1 DUP5 DUP4 SUB ADD PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x1FA7 JUMP JUMPDEST DUP4 MLOAD DUP11 AND DUP7 MSTORE SWAP5 DUP2 ADD SWAP5 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x180D JUMP JUMPDEST PUSH2 0x186E SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x89D DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST PUSH2 0x17DB JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x1891 SWAP2 POP RETURNDATASIZE DUP1 DUP6 DUP4 RETURNDATACOPY PUSH2 0xCD7 DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP11 PUSH2 0x1798 JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 PUSH2 0xE8D PUSH2 0x27C0 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH8 0x29A2241AF62C0000 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH2 0x15C8 CALLDATASIZE PUSH2 0x1F65 JUMP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH0 PUSH1 0x84 PUSH2 0x197B CALLDATASIZE PUSH2 0x1F65 JUMP JUMPDEST DUP7 MLOAD PUSH32 0x15DACBEA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP9 DUP2 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x24 DUP10 ADD MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP9 ADD MSTORE PUSH1 0x64 DUP8 ADD MSTORE DUP6 SWAP3 DUP4 SWAP2 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xDEF JUMPI PUSH2 0xDB5 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 PUSH2 0xE8D PUSH2 0x20CF JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1E1 JUMPI PUSH2 0x1A5B SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0x1F05 JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD SWAP3 PUSH2 0x1A77 PUSH2 0x1A70 DUP6 PUSH1 0x44 CALLDATALOAD SWAP4 PUSH2 0x20BB JUMP JUMPDEST MLOAD SWAP5 PUSH2 0x25CA JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP2 DUP4 GT ISZERO PUSH2 0x1C5D JUMPI PUSH1 0x2 JUMPDEST DUP1 PUSH1 0x3 EQ PUSH2 0x1BE7 JUMPI DUP1 PUSH1 0x4 EQ PUSH2 0x1B4E JUMPI DUP1 PUSH1 0x1 EQ PUSH2 0x1B0C JUMPI PUSH1 0x2 EQ PUSH2 0x1AB7 JUMPI PUSH1 0x51 DUP6 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 DUP2 ISZERO PUSH2 0x1AE6 JUMPI POP PUSH2 0xE8D SWAP3 PUSH1 0x20 SWAP6 SWAP3 PUSH2 0xF15 SWAP3 PUSH15 0xC097CE7BC90715B34B9F0FFFFFFFFF DIV ADD SWAP1 PUSH2 0x2BA2 JUMP JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP DUP1 SWAP3 SWAP4 SWAP5 SWAP2 POP ISZERO PUSH2 0x1B3B JUMPI POP SWAP3 PUSH2 0xF15 PUSH2 0xE8D SWAP3 PUSH1 0x20 SWAP6 PUSH15 0xC097CE7BC90715B34B9F1000000000 DIV SWAP1 PUSH2 0x2BA2 JUMP JUMPDEST PUSH1 0x12 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP2 SWAP3 SWAP4 SWAP1 DUP1 PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH0 SWAP3 JUMPDEST PUSH2 0x1BA7 JUMPI JUMPDEST POP POP POP DUP2 ISZERO PUSH2 0x1B81 JUMPI POP SWAP3 PUSH2 0xF15 PUSH2 0xE8D SWAP3 PUSH1 0x20 SWAP6 SWAP1 PUSH2 0x2BA2 JUMP JUMPDEST PUSH32 0x2654368900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 SWAP2 SWAP4 PUSH8 0xDE0B6B3A7640000 MLOAD DUP6 LT ISZERO PUSH2 0x1BE1 JUMPI SWAP1 DUP3 PUSH2 0x1BD9 DUP2 SWAP4 PUSH2 0xF15 PUSH2 0x1BCF DUP10 DUP7 PUSH2 0x20BB JUMP JUMPDEST MLOAD PUSH2 0xF0E DUP11 PUSH2 0x2086 JUMP JUMPDEST SWAP6 ADD SWAP3 PUSH2 0x1B61 JUMP JUMPDEST SWAP4 PUSH2 0x1B66 JUMP JUMPDEST POP SWAP2 SWAP3 SWAP4 SWAP1 DUP1 PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH0 SWAP3 JUMPDEST PUSH2 0x1C19 JUMPI POP POP POP DUP2 ISZERO PUSH2 0x1B81 JUMPI POP SWAP3 PUSH2 0xF15 PUSH2 0xE8D SWAP3 PUSH1 0x20 SWAP6 SWAP1 PUSH2 0x2BA2 JUMP JUMPDEST SWAP1 SWAP2 SWAP4 PUSH8 0xDE0B6B3A7640000 MLOAD DUP6 LT ISZERO PUSH2 0x1BE1 JUMPI SWAP1 DUP3 PUSH8 0xDE0B6B3A7640000 PUSH2 0x1C54 DUP3 SWAP5 PUSH2 0xFA5 PUSH2 0x1C4A DUP11 DUP8 PUSH2 0x20BB JUMP JUMPDEST MLOAD PUSH2 0xF9E DUP12 PUSH2 0x2086 JUMP JUMPDEST DIV SWAP6 ADD SWAP3 PUSH2 0x1BFA JUMP JUMPDEST DUP2 PUSH2 0x1A85 JUMP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1E1 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH2 0xD64 SWAP3 PUSH2 0x1C83 PUSH2 0x1E1C JUMP JUMPDEST DUP4 MLOAD PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP1 MLOAD PUSH1 0x3 SLOAD SWAP1 SWAP2 DUP3 PUSH0 PUSH2 0x1D04 DUP5 PUSH2 0x2041 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 SWAP5 PUSH1 0x1 SWAP1 DUP7 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x16A5 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1D35 JUMPI POP POP PUSH2 0x1DD SWAP3 SWAP2 PUSH2 0x1011 SWAP2 SUB DUP6 PUSH2 0x1ECA JUMP JUMPDEST SWAP1 DUP6 SWAP3 POP PUSH1 0x3 PUSH0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP2 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x1D78 JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x1011 PUSH2 0x1638 JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x1D62 JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x1E1 JUMPI PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP3 EQ DUP2 MSTORE RETURN JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1E1 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1E1 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1E7E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0xE0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1E7E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1E7E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1E7E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1E7E JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x1F1F DUP2 PUSH2 0x1EED JUMP JUMPDEST SWAP4 PUSH2 0x1F2D PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1ECA JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x1E1 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1F56 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1F48 JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x1E1 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x1E1 JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x1E1 JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1FC6 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1FB8 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1FF9 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1FEB JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x202D JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x206F JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x205B JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x2050 JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x1E1 JUMPI JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 MLOAD DUP2 LT ISZERO PUSH2 0x20A7 JUMPI PUSH1 0x5 SHL PUSH8 0xDE0B6B3A7640020 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x20A7 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xE4DC2AA400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x217A JUMPI PUSH0 SWAP2 PUSH2 0x214B JUMPI POP SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x2172 JUMPI JUMPDEST DUP2 PUSH2 0x2166 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1E1 JUMPI MLOAD SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2159 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x1E1 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x21A0 DUP2 PUSH2 0x1EED JUMP JUMPDEST SWAP4 PUSH2 0x21AE PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1ECA JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x1E1 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x21D7 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1E1 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x21C9 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x1E1 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1E1 JUMPI PUSH2 0x2229 SWAP3 ADD PUSH2 0x2185 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x1E1 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x2247 DUP2 PUSH2 0x1EED JUMP JUMPDEST SWAP4 PUSH2 0x2255 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1ECA JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x1E1 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x227E JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x2270 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SLT PUSH2 0x1E1 JUMPI DUP1 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP2 GT PUSH2 0x1E1 JUMPI DUP2 PUSH2 0x22BA SWAP2 DUP5 ADD PUSH2 0x222C JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x1E1 JUMPI PUSH2 0x2229 SWAP3 ADD PUSH2 0x222C JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 MLOAD PUSH2 0x22E8 PUSH1 0x60 DUP4 ADD SWAP2 DUP3 MLOAD SWAP1 PUSH2 0x20BB JUMP JUMPDEST MLOAD SWAP3 MLOAD SWAP2 PUSH2 0x22FC PUSH1 0x80 DUP3 ADD SWAP4 DUP5 MLOAD SWAP1 PUSH2 0x20BB JUMP JUMPDEST MLOAD SWAP2 DUP2 MLOAD PUSH2 0x2309 DUP2 PUSH2 0x2023 JUMP JUMPDEST PUSH2 0x2312 DUP2 PUSH2 0x2023 JUMP JUMPDEST PUSH2 0x23D1 JUMPI PUSH2 0x232C PUSH2 0x2325 PUSH1 0x20 SWAP3 MLOAD PUSH2 0x25CA JUMP JUMPDEST SWAP5 MLOAD PUSH2 0x25CA JUMP JUMPDEST SWAP2 ADD MLOAD PUSH8 0xDE0B6B3A7640000 SWAP5 DUP6 PUSH2 0x2343 DUP3 PUSH2 0x2B3D JUMP JUMPDEST DIV DUP3 GT PUSH2 0x23A9 JUMPI PUSH2 0x2357 PUSH2 0x235D SWAP3 DUP3 PUSH2 0x2B30 JUMP JUMPDEST SWAP1 PUSH2 0x3012 JUMP JUMPDEST DUP5 DUP5 MUL SWAP4 DUP1 DUP6 DIV DUP7 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2395 JUMPI PUSH2 0x237E PUSH2 0x2384 SWAP3 PUSH2 0x2391 SWAP6 PUSH2 0x2B84 JUMP JUMPDEST SWAP1 PUSH2 0x2BA2 JUMP JUMPDEST DUP4 DUP2 DUP2 SUB SWAP2 LT MUL SWAP1 PUSH2 0x2B71 JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x340A453300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x23EB PUSH2 0x23E4 PUSH1 0x20 SWAP3 SWAP6 SWAP4 SWAP5 SWAP6 MLOAD PUSH2 0x25CA JUMP JUMPDEST SWAP3 MLOAD PUSH2 0x25CA JUMP JUMPDEST SWAP3 ADD MLOAD PUSH8 0xDE0B6B3A7640000 PUSH2 0x2400 DUP6 PUSH2 0x2B3D JUMP JUMPDEST DIV DUP2 GT PUSH2 0x245A JUMPI DUP4 SUB SWAP1 DUP4 DUP3 GT PUSH2 0x2395 JUMPI PUSH2 0x2421 PUSH2 0x237E SWAP3 PUSH2 0x2427 SWAP6 PUSH2 0x3012 JUMP JUMPDEST SWAP3 PUSH2 0x3012 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21F494C589C0000 DUP2 ADD SWAP1 DUP2 GT PUSH2 0x2395 JUMPI PUSH2 0x2229 SWAP2 PUSH2 0x2C2D JUMP JUMPDEST PUSH32 0x64590B9F00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x1A0 SWAP2 DUP2 SWAP1 SUB DUP3 DUP2 SLT PUSH2 0x1E1 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x140 SWAP3 DUP4 DUP6 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP7 DUP6 LT DUP3 DUP7 GT OR PUSH2 0x1E7E JUMPI PUSH1 0x80 SGT PUSH2 0x1E1 JUMPI PUSH2 0x1C0 DUP7 ADD SWAP1 DUP2 GT DUP5 DUP3 LT OR PUSH2 0x1E7E JUMPI PUSH1 0x40 MSTORE PUSH2 0x24D4 DUP2 PUSH2 0x2079 JUMP JUMPDEST DUP4 MSTORE PUSH2 0x24E2 PUSH1 0x20 DUP3 ADD PUSH2 0x2079 JUMP JUMPDEST SWAP3 PUSH2 0x160 SWAP4 DUP5 DUP8 ADD MSTORE PUSH2 0x24F7 PUSH1 0x40 DUP4 ADD PUSH2 0x2079 JUMP JUMPDEST SWAP3 PUSH2 0x180 SWAP4 DUP5 DUP9 ADD MSTORE PUSH2 0x250C PUSH1 0x60 DUP5 ADD PUSH2 0x2079 JUMP JUMPDEST SWAP1 DUP8 ADD MSTORE DUP6 MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1E1 JUMPI PUSH1 0x80 DUP7 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1E1 JUMPI PUSH2 0x259D SWAP5 PUSH2 0x2593 SWAP2 PUSH1 0xA0 DUP10 ADD MSTORE PUSH2 0x2587 PUSH2 0x120 SWAP8 PUSH2 0x257B DUP10 DUP8 ADD PUSH2 0x2079 JUMP JUMPDEST PUSH1 0xC0 DUP12 ADD MSTORE DUP6 ADD PUSH2 0x2079 JUMP JUMPDEST PUSH1 0xE0 DUP10 ADD MSTORE DUP4 ADD PUSH2 0x2079 JUMP JUMPDEST SWAP1 DUP7 ADD MSTORE ADD PUSH2 0x2079 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x1E1 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1E1 JUMPI PUSH2 0x2229 SWAP3 ADD PUSH2 0x222C JUMP JUMPDEST DUP1 PUSH2 0x25F4 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x2621 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x264E JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x3 DUP2 SUB PUSH2 0x267B JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP2 SUB PUSH2 0x26A8 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x5 DUP2 SUB PUSH2 0x26D5 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x6 DUP2 SUB PUSH2 0x2702 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x7 SUB PUSH2 0x272D JUMPI PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0xC1AB6DC100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x2794 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND ADDRESS EQ DUP1 PUSH2 0x28CF JUMPI JUMPDEST ISZERO PUSH2 0x2828 JUMPI PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP3 MSTORE PUSH32 0x0 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1E7E JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST POP PUSH32 0x0 CHAINID EQ PUSH2 0x27FF JUMP JUMPDEST PUSH32 0x0 PUSH2 0x2922 DUP2 PUSH2 0x1EED JUMP JUMPDEST SWAP1 PUSH2 0x2930 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH2 0x293C DUP2 PUSH2 0x1EED JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x20 DUP5 ADD SWAP2 ADD CALLDATASIZE DUP3 CALLDATACOPY DUP3 MLOAD ISZERO PUSH2 0x20A7 JUMPI PUSH32 0x0 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x1 LT ISZERO PUSH2 0x20A7 JUMPI PUSH32 0x0 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2B2C JUMPI DUP2 MLOAD PUSH1 0x2 LT ISZERO PUSH2 0x20A7 JUMPI PUSH32 0x0 PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x2B2C JUMPI DUP2 MLOAD PUSH1 0x3 LT ISZERO PUSH2 0x20A7 JUMPI PUSH32 0x0 PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x4 SWAP1 DUP2 DUP2 GT ISZERO PUSH2 0x2B27 JUMPI DUP3 MLOAD DUP3 LT ISZERO PUSH2 0x2B14 JUMPI PUSH32 0x0 PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x2B27 JUMPI DUP3 MLOAD PUSH1 0x5 LT ISZERO PUSH2 0x2B14 JUMPI PUSH32 0x0 PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x2B27 JUMPI DUP3 MLOAD PUSH1 0x6 LT ISZERO PUSH2 0x2B14 JUMPI PUSH1 0x7 SWAP1 PUSH32 0x0 PUSH1 0xE0 DUP6 ADD MSTORE GT PUSH2 0x2ACC JUMPI POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x7 LT ISZERO PUSH2 0x2B01 JUMPI POP PUSH32 0x0 PUSH2 0x100 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x32 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x32 DUP3 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP POP SWAP1 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x2395 JUMPI JUMP JUMPDEST SWAP1 PUSH8 0x429D069189E0000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2395 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x2710 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2395 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x2395 JUMPI JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2B8E JUMPI DIV SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 SUB PUSH2 0x2BB9 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x2BD4 JUMPI POP POP DUP1 PUSH2 0x2229 SWAP2 PUSH2 0x2C2D JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x2BF8 JUMPI POP POP PUSH2 0x2BF2 DUP2 PUSH2 0x2229 SWAP3 PUSH2 0x2C2D JUMP JUMPDEST DUP1 PUSH2 0x2C2D JUMP JUMPDEST PUSH2 0x2C02 SWAP2 SWAP3 PUSH2 0x308F JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH2 0x2C0E DUP4 PUSH2 0x2B5A JUMP JUMPDEST SWAP2 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH1 0x1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x2395 JUMPI PUSH2 0x2229 SWAP2 PUSH2 0x2B30 JUMP JUMPDEST SWAP1 PUSH2 0x2C37 SWAP2 PUSH2 0x2B71 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x2CA3 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x2C7B JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x2C71 DUP4 PUSH2 0x1EAE JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH32 0xB3512B0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH0 SLOAD SWAP2 PUSH2 0x2CB5 DUP4 PUSH2 0x2041 JUMP JUMPDEST DUP1 DUP4 MSTORE SWAP3 PUSH1 0x20 SWAP1 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x2D3E JUMPI POP PUSH1 0x1 EQ PUSH2 0x2CE0 JUMPI JUMPDEST POP POP PUSH2 0x2229 SWAP3 POP SUB DUP3 PUSH2 0x1ECA JUMP JUMPDEST SWAP2 POP SWAP3 PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x2D26 JUMPI POP PUSH2 0x2229 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x2CD2 JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x2D0B JUMP JUMPDEST SWAP1 POP PUSH1 0x20 SWAP4 POP PUSH2 0x2229 SWAP6 SWAP3 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP2 POP AND DUP3 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x2CD2 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x2DA3 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x2C7B JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x2C71 DUP4 PUSH2 0x1EAE JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD PUSH2 0x2DB8 DUP2 PUSH2 0x2041 JUMP JUMPDEST DUP1 DUP5 MSTORE SWAP4 PUSH1 0x20 SWAP2 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x2D3E JUMPI POP PUSH1 0x1 EQ PUSH2 0x2DE0 JUMPI POP POP PUSH2 0x2229 SWAP3 POP SUB DUP3 PUSH2 0x1ECA JUMP JUMPDEST SWAP2 POP SWAP3 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x2E27 JUMPI POP PUSH2 0x2229 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x2CD2 JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x2E0C JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 DUP1 DUP4 SUB PUSH2 0x2E56 JUMPI POP SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 SWAP1 PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x2E73 JUMPI POP POP DUP1 PUSH2 0x2391 SWAP2 PUSH2 0x2B71 JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x2E97 JUMPI POP PUSH2 0x2E90 DUP3 PUSH2 0x2391 SWAP4 PUSH2 0x2B71 JUMP JUMPDEST DIV DUP1 PUSH2 0x2B71 JUMP JUMPDEST SWAP1 POP PUSH2 0x2EA2 SWAP2 PUSH2 0x308F JUMP JUMPDEST PUSH2 0x2EAB DUP2 PUSH2 0x2B5A JUMP JUMPDEST PUSH1 0x1 PUSH0 NOT SWAP4 DUP5 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 PUSH1 0x1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x2395 JUMPI DUP2 LT ISZERO PUSH2 0x2ED3 JUMPI POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SUB ADD SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP5 GT PUSH2 0x2F5C JUMPI SWAP2 PUSH1 0x20 SWAP4 PUSH1 0x80 SWAP3 PUSH1 0xFF PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND DUP7 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE DUP3 DUP1 MSTORE PUSH1 0x1 GAS STATICCALL ISZERO PUSH2 0x217A JUMPI PUSH0 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x2F52 JUMPI SWAP1 PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 PUSH1 0x1 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP POP POP PUSH0 SWAP2 PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x202D JUMPI DUP1 PUSH2 0x2F79 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x2FA9 JUMPI PUSH32 0xF645EEDF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x2FDD JUMPI POP PUSH32 0xFCE698F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x3 EQ PUSH2 0x2FE7 JUMPI POP JUMP JUMPDEST PUSH32 0xD78BCE0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x3043 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2395 JUMPI PUSH1 0x1 SWAP1 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x2B8E JUMPI PUSH15 0xC097CE7BC90715B34B9F1000000000 SDIV SWAP1 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2B8E JUMPI SDIV SWAP1 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x39B8 JUMPI DUP2 ISZERO PUSH2 0x39B2 JUMPI DUP2 PUSH1 0xFF SHR PUSH2 0x398A JUMPI PUSH24 0xBCE5086492111AEA88F4BB1CA6BCF584181EA8059F76532 DUP2 LT ISZERO PUSH2 0x3962 JUMPI DUP2 PUSH8 0xC7D713B49DA0000 SLT DUP1 PUSH2 0x3951 JUMPI JUMPDEST ISZERO PUSH2 0x35EE JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH15 0xC097CE7BC90715B34B9F1000000000 SWAP1 PUSH2 0x3128 SWAP1 DUP5 MUL DUP3 DUP2 ADD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F68318436F8EA4CB460F000000000 ADD DUP4 MUL PUSH2 0x3085 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV DUP4 DUP6 DUP3 MUL SDIV SWAP2 DUP5 DUP7 DUP5 MUL SDIV SWAP4 DUP6 DUP8 DUP7 MUL SDIV SWAP6 DUP1 DUP9 DUP9 MUL SDIV SWAP8 DUP9 MUL SDIV PUSH1 0xF SWAP1 SDIV SWAP7 PUSH1 0xD SWAP1 SDIV SWAP6 PUSH1 0xB SWAP1 SDIV SWAP5 PUSH1 0x9 SWAP1 SDIV SWAP4 PUSH1 0x7 SWAP1 SDIV SWAP3 PUSH1 0x5 SWAP1 SDIV SWAP2 PUSH1 0x3 SWAP1 SDIV ADD ADD ADD ADD ADD ADD ADD PUSH1 0x1 SHL SWAP2 DUP1 DUP3 DUP2 DUP6 SMOD MUL SDIV SWAP3 SDIV MUL ADD PUSH8 0xDE0B6B3A7640000 SWAP1 JUMPDEST SDIV PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC702BD3A30FC0000 DUP2 DUP2 SGT ISZERO DUP1 PUSH2 0x35DB JUMPI JUMPDEST ISZERO PUSH2 0x35B3 JUMPI DUP2 SWAP1 DUP3 SLT ISZERO DUP1 PUSH2 0x35A0 JUMPI JUMPDEST ISZERO PUSH2 0x3578 JUMPI PUSH0 SWAP2 PUSH0 DUP2 SLT PUSH2 0x3569 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH9 0x6F05B59D3B2000000 DUP2 SLT PUSH2 0x3506 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90FA4A62C4E000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP3 JUMPDEST MUL DUP2 SWAP1 PUSH9 0xAD78EBC5AC62000000 DUP2 SLT ISZERO PUSH2 0x34CD JUMPI JUMPDEST PUSH9 0x56BC75E2D631000000 DUP2 SLT ISZERO PUSH2 0x3493 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B18800000 DUP2 SLT ISZERO PUSH2 0x345B JUMPI JUMPDEST PUSH9 0x15AF1D78B58C400000 DUP2 SLT ISZERO PUSH2 0x3423 JUMPI JUMPDEST PUSH9 0xAD78EBC5AC6200000 DUP2 SLT ISZERO PUSH2 0x33EC JUMPI JUMPDEST DUP3 DUP2 SLT ISZERO PUSH2 0x33B5 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B1880000 DUP2 SLT ISZERO PUSH2 0x337E JUMPI JUMPDEST PUSH9 0x15AF1D78B58C40000 DUP2 SLT ISZERO PUSH2 0x3347 JUMPI JUMPDEST PUSH1 0x2 DUP4 DUP3 DUP1 MUL SDIV SDIV PUSH1 0x3 DUP5 DUP4 DUP4 MUL SDIV SDIV PUSH1 0x4 DUP6 DUP5 DUP4 MUL SDIV SDIV DUP6 PUSH1 0x5 DUP2 DUP7 DUP5 MUL SDIV SDIV PUSH1 0x6 DUP3 DUP8 DUP4 MUL SDIV SDIV PUSH1 0x7 DUP4 DUP9 DUP4 MUL SDIV SDIV SWAP1 PUSH1 0x8 DUP5 DUP10 DUP5 MUL SDIV SDIV SWAP3 PUSH1 0x9 DUP6 DUP11 DUP7 MUL SDIV SDIV SWAP6 PUSH1 0xA DUP7 DUP12 DUP10 MUL SDIV SDIV SWAP8 PUSH1 0xB DUP8 DUP13 DUP12 MUL SDIV SDIV SWAP10 PUSH1 0xC DUP9 DUP14 DUP14 MUL SDIV SDIV SWAP12 ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD MUL SDIV MUL SDIV SWAP1 PUSH0 EQ PUSH2 0x2229 JUMPI PUSH2 0x2229 SWAP1 PUSH2 0x306B JUMP JUMPDEST PUSH9 0x6F5F1775788937937 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C0000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x32C8 JUMP JUMPDEST PUSH9 0x8F00F760A4B2DB55D PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E780000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x32B6 JUMP JUMPDEST PUSH9 0xEBC5FB41746121110 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x32A4 JUMP JUMPDEST PUSH9 0x280E60114EDB805D03 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x329B JUMP JUMPDEST PUSH10 0x127FA27722CC06CC5E2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x3289 JUMP JUMPDEST PUSH10 0x3F1FCE3DA636EA5CF850 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E7800000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x3277 JUMP JUMPDEST PUSH12 0x2DF0AB5A80A22C61AB5A700 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF000000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x3265 JUMP JUMPDEST PUSH15 0x1855144814A7FF805980FF0084000 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E000000 ADD PUSH2 0x3253 JUMP JUMPDEST PUSH9 0x3782DACE9D9000000 DUP2 SLT PUSH2 0x3556 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC87D2531627000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH12 0x1425982CF597CD205CEF7380 SWAP3 PUSH2 0x323E JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP3 PUSH1 0x1 SWAP3 PUSH2 0x323E JUMP JUMPDEST PUSH1 0x1 SWAP3 POP PUSH0 SUB SWAP1 POP PUSH1 0x64 PUSH2 0x31E2 JUMP JUMPDEST PUSH32 0xD4794EFD00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x31D3 JUMP JUMPDEST PUSH32 0xA2F9F7E300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x31C3 JUMP JUMPDEST DUP2 PUSH8 0xDE0B6B3A7640000 SWAP3 PUSH0 SWAP2 DUP5 DUP2 SLT PUSH2 0x393B JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH0 PUSH31 0x1600EF3172E58D2E933EC884FDE10064C63B5372D805E203C0000000000000 DUP3 SLT ISZERO PUSH2 0x3910 JUMPI JUMPDEST PUSH20 0x11798004D755D3C8BC8E03204CF44619E000000 DUP3 SLT ISZERO PUSH2 0x38EF JUMPI JUMPDEST DUP3 MUL SWAP1 DUP1 DUP4 MUL SWAP1 PUSH15 0x1855144814A7FF805980FF0084000 SWAP1 DUP2 DUP4 SLT ISZERO PUSH2 0x38CC JUMPI JUMPDEST POP POP PUSH12 0x2DF0AB5A80A22C61AB5A700 DUP1 DUP3 SLT ISZERO PUSH2 0x38AC JUMPI JUMPDEST POP PUSH10 0x3F1FCE3DA636EA5CF850 DUP1 DUP3 SLT ISZERO PUSH2 0x388C JUMPI JUMPDEST POP PUSH10 0x127FA27722CC06CC5E2 DUP1 DUP3 SLT ISZERO PUSH2 0x386C JUMPI JUMPDEST POP PUSH9 0x280E60114EDB805D03 DUP1 DUP3 SLT ISZERO PUSH2 0x384C JUMPI JUMPDEST POP PUSH9 0xEBC5FB41746121110 DUP1 DUP3 SLT ISZERO PUSH2 0x3835 JUMPI JUMPDEST POP PUSH9 0x8F00F760A4B2DB55D DUP1 DUP3 SLT ISZERO PUSH2 0x3815 JUMPI JUMPDEST POP PUSH9 0x6F5F1775788937937 DUP1 DUP3 SLT ISZERO PUSH2 0x37F5 JUMPI JUMPDEST POP PUSH9 0x6248F33704B286603 DUP1 DUP3 SLT ISZERO PUSH2 0x37D6 JUMPI JUMPDEST POP PUSH9 0x5C548670B9510E7AC DUP1 DUP3 SLT ISZERO PUSH2 0x37B7 JUMPI JUMPDEST POP PUSH2 0x3764 PUSH9 0x56BC75E2D63100000 SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP2 DUP4 ADD SWAP3 ADD MUL PUSH2 0x3085 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV SWAP2 PUSH1 0x3 PUSH1 0x5 PUSH1 0x7 PUSH1 0x9 PUSH1 0xB DUP9 DUP11 DUP10 MUL SDIV SWAP9 DUP1 DUP12 DUP12 MUL SDIV SWAP11 DUP12 MUL SDIV SDIV SWAP9 SDIV SWAP7 SDIV SWAP5 SDIV SWAP3 SDIV ADD ADD ADD ADD ADD PUSH1 0x1 SHL ADD SDIV SWAP1 PUSH0 EQ PUSH2 0x37B2 JUMPI PUSH0 SUB JUMPDEST MUL PUSH2 0x3197 JUMP JUMPDEST PUSH2 0x37AC JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0x56BC75E2D6310000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x3728 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0xAD78EBC5AC620000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x3714 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C40000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x3700 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B1880000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x36EC JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP1 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x36D8 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0xAD78EBC5AC6200000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x36C4 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C400000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x36B0 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B18800000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x369B JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x56BC75E2D631000000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x3686 JUMP JUMPDEST PUSH9 0xAD78EBC5AC62000000 SWAP3 POP PUSH10 0x21E19E0C9BAB2400000 MUL SDIV SWAP2 ADD SWAP1 PUSH0 DUP1 PUSH2 0x366E JUMP JUMPDEST SWAP1 PUSH12 0x1425982CF597CD205CEF7380 PUSH9 0x3782DACE9D9000000 SWAP2 SDIV SWAP2 ADD PUSH2 0x364D JUMP JUMPDEST POP PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP1 SDIV PUSH9 0x6F05B59D3B2000000 PUSH2 0x3630 JUMP JUMPDEST SWAP1 POP PUSH2 0x3947 SWAP2 POP PUSH2 0x306B JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x64 PUSH2 0x3603 JUMP JUMPDEST POP PUSH8 0xF43FC2C04EE0000 DUP3 SLT PUSH2 0x30D5 JUMP JUMPDEST PUSH32 0xD831731100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x22701E000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 RETURNDATACOPY 0xC0 GT DUP11 0xE1 PUSH29 0xF0ADBA7459B5C62781AC22ADB46F73C1467746703BA70B9C43764736F PUSH13 0x634300081B0033C2575A0E9E59 EXTCODECOPY STOP 0xF9 MSIZE 0xF8 0xC9 0x2F SLT 0xDB 0x28 PUSH10 0xC3395A3B0502D05E2516 PREVRANDAO PUSH16 0x71F85B00000000000000000000000000 ","sourceMap":"1300:5107:122:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1300:5107:122;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1300:5107:122;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;1715:31;;;;;;;;:::i;:::-;;;;;;;;;;971:4:67;1300:5107:122;1347:46:37;923:14:40;;1461:15:42;1300:5107:122;1461:15:42;;;1300:5107:122;;;1513:35:42;;;1509:106;;1625:42;;1300:5107:122;1735:53:42;;1300:5107:122;;;;;;;;3534:28:35;1300:5107:122;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;1300:5107:122;;;;;;;;;;;;;-1:-1:-1;;1300:5107:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1156:21:48;1300:5107:122;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1300:5107:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1782:26;;1300:5107;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1300:5107:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;923:14:40;1300:5107:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1625:42:42;1300:5107:122;;;;;1735:53:42;1300:5107:122;;;;;;;;;;;;;;;-1:-1:-1;1300:5107:122;;;;;;;;;;;;;-1:-1:-1;1300:5107:122;;-1:-1:-1;1300:5107:122;;-1:-1:-1;1300:5107:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1300:5107:122;;-1:-1:-1;1300:5107:122;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;1300:5107:122;;;-1:-1:-1;1300:5107:122;;;;;;;;;-1:-1:-1;1300:5107:122;;-1:-1:-1;1300:5107:122;;-1:-1:-1;1300:5107:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1300:5107:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1300:5107:122;;-1:-1:-1;1300:5107:122;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;1300:5107:122;;1156:21:48;1300:5107:122;;-1:-1:-1;1300:5107:122;;;;;;;;;-1:-1:-1;1300:5107:122;;-1:-1:-1;1300:5107:122;;-1:-1:-1;1300:5107:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1300:5107:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1300:5107:122;;-1:-1:-1;1300:5107:122;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;1509:106:42;1571:33;;;-1:-1:-1;1571:33:42;;-1:-1:-1;1571:33:42;1300:5107:122;;;;-1:-1:-1;1300:5107:122;;;;;-1:-1:-1;1300:5107:122;;-1:-1:-1;1300:5107:122;;;;;;;;;-1:-1:-1;;1300:5107:122;;;-1:-1:-1;;;;;1300:5107:122;;;;;;;;;;:::o;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1300:5107:122;;;;;;;;-1:-1:-1;;1300:5107:122;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;1300:5107:122;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":5316,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_contract_IERC20":{"entryPoint":4361,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_string_fromMemory":{"entryPoint":5467,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_address_dyn":{"entryPoint":4396,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bytes_storage":{"entryPoint":4790,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_string":{"entryPoint":4205,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_LiquidityManagement":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"allocate_and_zero_memory_struct_struct_LiquidityManagement":{"entryPoint":4477,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_array_struct_TokenConfig_dyn":{"entryPoint":5015,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_bytes":{"entryPoint":4333,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_uint256":{"entryPoint":5104,"id":null,"parameterSlots":2,"returnSlots":1},"copy_array_from_storage_to_memory_string":{"entryPoint":4594,"id":null,"parameterSlots":0,"returnSlots":1},"extract_byte_array_length":{"entryPoint":4513,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":4298,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_11486":{"entryPoint":4242,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_16742":{"entryPoint":4270,"id":null,"parameterSlots":1,"returnSlots":0},"fun_calculateConstructorArgs":{"entryPoint":5566,"id":46205,"parameterSlots":2,"returnSlots":1},"fun_calculateSalt":{"entryPoint":6431,"id":46103,"parameterSlots":2,"returnSlots":1},"fun_ensureEnabled":{"entryPoint":5415,"id":5144,"parameterSlots":0,"returnSlots":0},"fun_getActionId":{"entryPoint":5215,"id":5487,"parameterSlots":1,"returnSlots":1},"fun_getDeploymentAddress":{"entryPoint":4930,"id":5116,"parameterSlots":2,"returnSlots":1},"fun_getNewPoolPauseWindowEndTime":{"entryPoint":5360,"id":5891,"parameterSlots":0,"returnSlots":1},"memory_array_index_access_uint256_dyn":{"entryPoint":5039,"id":null,"parameterSlots":2,"returnSlots":1},"storage_array_index_access_address_dyn":{"entryPoint":5162,"id":null,"parameterSlots":1,"returnSlots":2}},"generatedSources":[],"immutableReferences":{"5427":[{"length":32,"start":5258}],"5654":[{"length":32,"start":458},{"length":32,"start":652},{"length":32,"start":2703},{"length":32,"start":3000},{"length":32,"start":3800},{"length":32,"start":6260}],"5820":[{"length":32,"start":799}],"5822":[{"length":32,"start":297},{"length":32,"start":5362}]},"linkReferences":{},"object":"60806040526004361015610011575f80fd5b5f5f358060e01c908163193ad50f1461101e5781632f2770db14610e57575080633f819b6f14610e2857806344f6fec714610d935780634bef86d9146106b8578063531aa03e1461065057806353a72f7e1461052957806354fd4d501461044a5780636634b75314610401578063673a2a1f146103665780636c57f5a91461034357806378da80cb14610302578063851c1bb3146102b05780638d928af81461025f5780638eec5d7014610241578063aaabadc514610176578063db035ebc1461014d578063e9d56e191461010c5763ec888061146100ee575f80fd5b34610109578060031936011261010957602090604051908152f35b80fd5b5034610109578060031936011261010957602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461010957806003193601126101095760206101686114f0565b63ffffffff60405191168152f35b50346101095780600319360112610109576040517faaabadc500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa9182156102365760209392610207575b5060405191168152f35b610228919250833d851161022f575b61022081836110ca565b8101906114c4565b905f6101fd565b503d610216565b6040513d85823e3d90fd5b50346101095780600319360112610109576020600154604051908152f35b5034610109578060031936011261010957602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461010957602060031936011261010957600435907fffffffff00000000000000000000000000000000000000000000000000000000821682036101095760206102fa8361145f565b604051908152f35b5034610109578060031936011261010957602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5034610109578060031936011261010957602060ff600254166040519015158152f35b5034610109578060031936011261010957604051600180548083528184526020808401947fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf69392915b8282106103d6576103d2866103c6818a03826110ca565b6040519182918261112c565b0390f35b845473ffffffffffffffffffffffffffffffffffffffff1687529586019593830193908301906103af565b50346101095760206003193601126101095760ff604060209273ffffffffffffffffffffffffffffffffffffffff610437611109565b1681528084522054166040519015158152f35b50346101095780600319360112610109576040516004545f8261046c836111a1565b91828252602093600190856001821691825f146105095750506001146104ae575b5061049a925003836110ca565b6103d260405192828493845283019061106d565b84915060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b905f915b8583106104f157505061049a93508201018561048d565b805483890185015287945086939092019181016104da565b60ff19168582015261049a95151560051b850101925087915061048d9050565b5034610109576040600319360112610109576004359060243560019260015480821015610628578061055b84846113f0565b116105e7575b5061056b82611397565b9261057960405194856110ca565b828452601f1961058884611397565b013660208601375b8281106105a557604051806103d2868261112c565b8073ffffffffffffffffffffffffffffffffffffffff6105ce6105c98894866113f0565b61142a565b90549060031b1c166105e082876113af565b5201610590565b9080925081039081116105fb57905f610561565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6004847f4e23d035000000000000000000000000000000000000000000000000000000008152fd5b50346101095760406003193601126101095761066a611109565b73ffffffffffffffffffffffffffffffffffffffff60243581811681036106b457826106a58261069f6106ab946020976115be565b9261191f565b90611342565b60405191168152f35b5f80fd5b346106b457600319360161018081126106b4576080136106b4576040516106de81611092565b60043573ffffffffffffffffffffffffffffffffffffffff811681036106b457815260243560028110156106b457602082015260443573ffffffffffffffffffffffffffffffffffffffff811681036106b457604082015260643580151581036106b457606082015260807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c3601126106b45760405161077d81611092565b60843573ffffffffffffffffffffffffffffffffffffffff811681036106b457815260a43560028110156106b457602082015260c43573ffffffffffffffffffffffffffffffffffffffff811681036106b457604082015260e43580151581036106b457606082015260607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefc3601126106b457604051916060830183811067ffffffffffffffff821117610c0a576040526101043573ffffffffffffffffffffffffffffffffffffffff811681036106b45783526101243573ffffffffffffffffffffffffffffffffffffffff811681036106b45760208401526101443573ffffffffffffffffffffffffffffffffffffffff8116908181036106b4576040850152610d6b5773ffffffffffffffffffffffffffffffffffffffff8151169073ffffffffffffffffffffffffffffffffffffffff83511690604051936108e2856110ae565b600285525f5b60408110610d54575061097f9291610974916109626040519261090a846110ae565b60028452604036602086013785881115610d3c575f906702c68af0bb14000061095060ff8060015b16941687670b1a2bc2ec50000061094a87849b6113af565b526113af565b5261095b828b6113af565b52886113af565b5061096d82886113af565b52856113af565b5061069f81846115be565b604051916109b183602080820193610996856112b6565b90805192839101825e015f815203601f1981018552846110ca565b825115610d145773ffffffffffffffffffffffffffffffffffffffff9251905ff516908115610cec576109e2611527565b815f525f60205260405f20600160ff1982541617905560015468010000000000000000811015610c0a57806001610a1c920160015561142a565b81549060031b9073ffffffffffffffffffffffffffffffffffffffff85831b921b1916179055817f83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc5f80a2610a6f61117d565b610a776114f0565b9373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156106b4579390916040519485927feeec802f0000000000000000000000000000000000000000000000000000000084526101a484018660048601526101a06024860152835180915260206101c486019401905f5b818110610c42575050505f9473ffffffffffffffffffffffffffffffffffffffff604086959463ffffffff610b9e956101643560448a01521660648801528860848801528281511660a48801528260208201511660c488015201511660e4850152856101048501526101248401906060809180511515845260208101511515602085015260408101511515604085015201511515910152565b03818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610c3757610bf0575b602090604051908152f35b67ffffffffffffffff8211610c0a57602091604052610be5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040513d5f823e3d90fd5b918097965094909293945173ffffffffffffffffffffffffffffffffffffffff81511682526020810151906002821015610cbf5782606060809260209485600197015273ffffffffffffffffffffffffffffffffffffffff6040820151166040840152015115156060820152019701910191889596949392610b05565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b7f741752c2000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4ca249dc000000000000000000000000000000000000000000000000000000005f5260045ffd5b6001906702c68af0bb14000061095060ff805f610932565b602090610d5f61117d565b828289010152016108e8565b7f61ee1764000000000000000000000000000000000000000000000000000000005f5260045ffd5b346106b45760406003193601126106b45760043567ffffffffffffffff81116106b457366023820112156106b457806004013590610dd0826110ed565b610ddd60405191826110ca565b82815236602484840101116106b4575f60208481956024610e0a9601838601378301015260243590611342565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346106b4575f6003193601126106b4576103d2610e436111f2565b60405191829160208352602083019061106d565b346106b4575f6003193601126106b4577fffffffff00000000000000000000000000000000000000000000000000000000610e92911661145f565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa908115610c375784925f92610ffc575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610c37575f92610fc5575b505015610f9d57610f6a611527565b600160ff1960025416176002557f432acbfd662dbb5d8b378384a67159b47ca9d0f1b79f97cf64cf8585fa362d505f80a1005b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d8311610ff5575b610fdc81836110ca565b810103126106b4575180151581036106b4578180610f5b565b503d610fd2565b606491925061101790843d861161022f5761022081836110ca565b9190610f0a565b346106b4575f6003193601126106b457608061103861117d565b61106b60405180926060809180511515845260208101511515602085015260408101511515604085015201511515910152565bf35b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6080810190811067ffffffffffffffff821117610c0a57604052565b6060810190811067ffffffffffffffff821117610c0a57604052565b90601f601f19910116810190811067ffffffffffffffff821117610c0a57604052565b67ffffffffffffffff8111610c0a57601f01601f191660200190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036106b457565b60209060206040818301928281528551809452019301915f5b828110611153575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101611145565b6040519061118a82611092565b5f6060838281528260208201528260408201520152565b90600182811c921680156111e8575b60208310146111bb57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916111b0565b604051905f8260055491611205836111a1565b808352926020906001908181169081156112915750600114611232575b5050611230925003836110ca565b565b91509260055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0935f925b82841061127957506112309450505081016020015f80611222565b8554888501830152948501948794509281019261125e565b90506020935061123095925060ff1991501682840152151560051b8201015f80611222565b6003545f92916112c5826111a1565b9160019081811690811561132f57506001146112e057505050565b909192935060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b905f915b84831061131c575050500190565b818160209254858701520192019161130e565b60ff191683525050811515909102019150565b605591600b916040516113798160208082019461135e866112b6565b90805192839101825e015f815203601f1981018352826110ca565b5190209060405191604083015260208201523081520160ff81532090565b67ffffffffffffffff8111610c0a5760051b60200190565b80518210156113c35760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b919082018092116113fd57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b6001548110156113c35760015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601905f90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526114be816110ae565b51902090565b908160209103126106b4575173ffffffffffffffffffffffffffffffffffffffff811681036106b45790565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff81164210156115225790565b505f90565b60ff6002541661153357565b7f75884cda000000000000000000000000000000000000000000000000000000005f5260045ffd5b6020818303126106b45780519067ffffffffffffffff82116106b4570181601f820112156106b45780519061158f826110ed565b9261159d60405194856110ca565b828452602083830101116106b457815f9260208093018386015e8301015290565b73ffffffffffffffffffffffffffffffffffffffff908116918116808311156119165760015f915b6040928351955f876004817f95d89b4100000000000000000000000000000000000000000000000000000000948582525afa96871561190c575f976118ee575b505f90600486518095819382525afa9182156118e4575f926118c0575b506702c68af0bb14000061168760ff86519361165e856110ae565b60028552670b1a2bc2ec50000061167f836020998b368c8b013716876113af565b5216836113af565b5261178960278551977f42616c616e636572203830200000000000000000000000000000000000000000868a0152805194868201958087602c8d015e8a01907f2032302000000000000000000000000000000000000000000000000000000000602c83015261171360308c83518b85019581878583015e015f83820152038d601082019052018c6110ca565b88519687937f422d3830000000000000000000000000000000000000000000000000000000008a860152518091602486015e8301907f2d3230000000000000000000000000000000000000000000000000000000000060248301525180928583015e015f838201520360078101855201836110ca565b83519560a0870187811067ffffffffffffffff821117610c0a5790859392916117f898969795975285528585019182528285019560028752606086019182526117d06111f2565b916080870192835261182c8551998a9887858b01525160a060608b01526101008a019061106d565b9451947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa095868a83030160808b015261106d565b975160a08801525196838782030160c08801528180895192838152019801915f5b8281106118a9575050505094611871916118a69651908683030160e087015261106d565b917f0000000000000000000000000000000000000000000000000000000000000000169083015203601f1981018352826110ca565b90565b83518a52988101988a98509281019260010161184d565b6118dd9192503d805f833e6118d581836110ca565b81019061155b565b905f611643565b84513d5f823e3d90fd5b5f919750611905903d8084833e6118d581836110ca565b9690611626565b85513d5f823e3d90fd5b5f6001916115e6565b60405190602082019246845273ffffffffffffffffffffffffffffffffffffffff8092166040840152166060820152606081526114be8161109256fea2646970667358221220c996f7d94d545f188d64621ab6b072710c46fc9f3f8b14d0ee35eafbd5ad454164736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH0 CALLDATALOAD DUP1 PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x193AD50F EQ PUSH2 0x101E JUMPI DUP2 PUSH4 0x2F2770DB EQ PUSH2 0xE57 JUMPI POP DUP1 PUSH4 0x3F819B6F EQ PUSH2 0xE28 JUMPI DUP1 PUSH4 0x44F6FEC7 EQ PUSH2 0xD93 JUMPI DUP1 PUSH4 0x4BEF86D9 EQ PUSH2 0x6B8 JUMPI DUP1 PUSH4 0x531AA03E EQ PUSH2 0x650 JUMPI DUP1 PUSH4 0x53A72F7E EQ PUSH2 0x529 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x44A JUMPI DUP1 PUSH4 0x6634B753 EQ PUSH2 0x401 JUMPI DUP1 PUSH4 0x673A2A1F EQ PUSH2 0x366 JUMPI DUP1 PUSH4 0x6C57F5A9 EQ PUSH2 0x343 JUMPI DUP1 PUSH4 0x78DA80CB EQ PUSH2 0x302 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x2B0 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x25F JUMPI DUP1 PUSH4 0x8EEC5D70 EQ PUSH2 0x241 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x176 JUMPI DUP1 PUSH4 0xDB035EBC EQ PUSH2 0x14D JUMPI DUP1 PUSH4 0xE9D56E19 EQ PUSH2 0x10C JUMPI PUSH4 0xEC888061 EQ PUSH2 0xEE JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x20 PUSH2 0x168 PUSH2 0x14F0 JUMP JUMPDEST PUSH4 0xFFFFFFFF PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x236 JUMPI PUSH1 0x20 SWAP4 SWAP3 PUSH2 0x207 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x228 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x22F JUMPI JUMPDEST PUSH2 0x220 DUP2 DUP4 PUSH2 0x10CA JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x14C4 JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x1FD JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x216 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP6 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x109 JUMPI PUSH1 0x20 PUSH2 0x2FA DUP4 PUSH2 0x145F JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x20 PUSH1 0xFF PUSH1 0x2 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x40 MLOAD PUSH1 0x1 DUP1 SLOAD DUP1 DUP4 MSTORE DUP2 DUP5 MSTORE PUSH1 0x20 DUP1 DUP5 ADD SWAP5 PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP4 SWAP3 SWAP2 JUMPDEST DUP3 DUP3 LT PUSH2 0x3D6 JUMPI PUSH2 0x3D2 DUP7 PUSH2 0x3C6 DUP2 DUP11 SUB DUP3 PUSH2 0x10CA JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x112C JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP5 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 SWAP4 DUP4 ADD SWAP4 SWAP1 DUP4 ADD SWAP1 PUSH2 0x3AF JUMP JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0xFF PUSH1 0x40 PUSH1 0x20 SWAP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x437 PUSH2 0x1109 JUMP JUMPDEST AND DUP2 MSTORE DUP1 DUP5 MSTORE KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x40 MLOAD PUSH1 0x4 SLOAD PUSH0 DUP3 PUSH2 0x46C DUP4 PUSH2 0x11A1 JUMP JUMPDEST SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP1 DUP6 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x509 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x4AE JUMPI JUMPDEST POP PUSH2 0x49A SWAP3 POP SUB DUP4 PUSH2 0x10CA JUMP JUMPDEST PUSH2 0x3D2 PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x106D JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x4 PUSH0 MSTORE PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0x4F1 JUMPI POP POP PUSH2 0x49A SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x48D JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x4DA JUMP JUMPDEST PUSH1 0xFF NOT AND DUP6 DUP3 ADD MSTORE PUSH2 0x49A SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0x48D SWAP1 POP JUMP JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD PUSH1 0x1 SWAP3 PUSH1 0x1 SLOAD DUP1 DUP3 LT ISZERO PUSH2 0x628 JUMPI DUP1 PUSH2 0x55B DUP5 DUP5 PUSH2 0x13F0 JUMP JUMPDEST GT PUSH2 0x5E7 JUMPI JUMPDEST POP PUSH2 0x56B DUP3 PUSH2 0x1397 JUMP JUMPDEST SWAP3 PUSH2 0x579 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x10CA JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x1F NOT PUSH2 0x588 DUP5 PUSH2 0x1397 JUMP JUMPDEST ADD CALLDATASIZE PUSH1 0x20 DUP7 ADD CALLDATACOPY JUMPDEST DUP3 DUP2 LT PUSH2 0x5A5 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0x3D2 DUP7 DUP3 PUSH2 0x112C JUMP JUMPDEST DUP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x5CE PUSH2 0x5C9 DUP9 SWAP5 DUP7 PUSH2 0x13F0 JUMP JUMPDEST PUSH2 0x142A JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR AND PUSH2 0x5E0 DUP3 DUP8 PUSH2 0x13AF JUMP JUMPDEST MSTORE ADD PUSH2 0x590 JUMP JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 SUB SWAP1 DUP2 GT PUSH2 0x5FB JUMPI SWAP1 PUSH0 PUSH2 0x561 JUMP JUMPDEST PUSH1 0x24 DUP4 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE REVERT JUMPDEST PUSH1 0x4 DUP5 PUSH32 0x4E23D03500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE REVERT JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH2 0x66A PUSH2 0x1109 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x24 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x6B4 JUMPI DUP3 PUSH2 0x6A5 DUP3 PUSH2 0x69F PUSH2 0x6AB SWAP5 PUSH1 0x20 SWAP8 PUSH2 0x15BE JUMP JUMPDEST SWAP3 PUSH2 0x191F JUMP JUMPDEST SWAP1 PUSH2 0x1342 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x6B4 JUMPI PUSH1 0x3 NOT CALLDATASIZE ADD PUSH2 0x180 DUP2 SLT PUSH2 0x6B4 JUMPI PUSH1 0x80 SGT PUSH2 0x6B4 JUMPI PUSH1 0x40 MLOAD PUSH2 0x6DE DUP2 PUSH2 0x1092 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x6B4 JUMPI DUP2 MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x6B4 JUMPI PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x44 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x6B4 JUMPI PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x64 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x6B4 JUMPI PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x80 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C CALLDATASIZE ADD SLT PUSH2 0x6B4 JUMPI PUSH1 0x40 MLOAD PUSH2 0x77D DUP2 PUSH2 0x1092 JUMP JUMPDEST PUSH1 0x84 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x6B4 JUMPI DUP2 MSTORE PUSH1 0xA4 CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x6B4 JUMPI PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0xC4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x6B4 JUMPI PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0xE4 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x6B4 JUMPI PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFC CALLDATASIZE ADD SLT PUSH2 0x6B4 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH1 0x60 DUP4 ADD DUP4 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xC0A JUMPI PUSH1 0x40 MSTORE PUSH2 0x104 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x6B4 JUMPI DUP4 MSTORE PUSH2 0x124 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x6B4 JUMPI PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0x144 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND SWAP1 DUP2 DUP2 SUB PUSH2 0x6B4 JUMPI PUSH1 0x40 DUP6 ADD MSTORE PUSH2 0xD6B JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD AND SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 MLOAD AND SWAP1 PUSH1 0x40 MLOAD SWAP4 PUSH2 0x8E2 DUP6 PUSH2 0x10AE JUMP JUMPDEST PUSH1 0x2 DUP6 MSTORE PUSH0 JUMPDEST PUSH1 0x40 DUP2 LT PUSH2 0xD54 JUMPI POP PUSH2 0x97F SWAP3 SWAP2 PUSH2 0x974 SWAP2 PUSH2 0x962 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x90A DUP5 PUSH2 0x10AE JUMP JUMPDEST PUSH1 0x2 DUP5 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP7 ADD CALLDATACOPY DUP6 DUP9 GT ISZERO PUSH2 0xD3C JUMPI PUSH0 SWAP1 PUSH8 0x2C68AF0BB140000 PUSH2 0x950 PUSH1 0xFF DUP1 PUSH1 0x1 JUMPDEST AND SWAP5 AND DUP8 PUSH8 0xB1A2BC2EC500000 PUSH2 0x94A DUP8 DUP5 SWAP12 PUSH2 0x13AF JUMP JUMPDEST MSTORE PUSH2 0x13AF JUMP JUMPDEST MSTORE PUSH2 0x95B DUP3 DUP12 PUSH2 0x13AF JUMP JUMPDEST MSTORE DUP9 PUSH2 0x13AF JUMP JUMPDEST POP PUSH2 0x96D DUP3 DUP9 PUSH2 0x13AF JUMP JUMPDEST MSTORE DUP6 PUSH2 0x13AF JUMP JUMPDEST POP PUSH2 0x69F DUP2 DUP5 PUSH2 0x15BE JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH2 0x9B1 DUP4 PUSH1 0x20 DUP1 DUP3 ADD SWAP4 PUSH2 0x996 DUP6 PUSH2 0x12B6 JUMP JUMPDEST SWAP1 DUP1 MLOAD SWAP3 DUP4 SWAP2 ADD DUP3 MCOPY ADD PUSH0 DUP2 MSTORE SUB PUSH1 0x1F NOT DUP2 ADD DUP6 MSTORE DUP5 PUSH2 0x10CA JUMP JUMPDEST DUP3 MLOAD ISZERO PUSH2 0xD14 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 MLOAD SWAP1 PUSH0 CREATE2 AND SWAP1 DUP2 ISZERO PUSH2 0xCEC JUMPI PUSH2 0x9E2 PUSH2 0x1527 JUMP JUMPDEST DUP2 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH1 0xFF NOT DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x1 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0xC0A JUMPI DUP1 PUSH1 0x1 PUSH2 0xA1C SWAP3 ADD PUSH1 0x1 SSTORE PUSH2 0x142A JUMP JUMPDEST DUP2 SLOAD SWAP1 PUSH1 0x3 SHL SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 SSTORE DUP2 PUSH32 0x83A48FBCFC991335314E74D0496AAB6A1987E992DDC85DDDBCC4D6DD6EF2E9FC PUSH0 DUP1 LOG2 PUSH2 0xA6F PUSH2 0x117D JUMP JUMPDEST PUSH2 0xA77 PUSH2 0x14F0 JUMP JUMPDEST SWAP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x6B4 JUMPI SWAP4 SWAP1 SWAP2 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP3 PUSH32 0xEEEC802F00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH2 0x1A4 DUP5 ADD DUP7 PUSH1 0x4 DUP7 ADD MSTORE PUSH2 0x1A0 PUSH1 0x24 DUP7 ADD MSTORE DUP4 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH2 0x1C4 DUP7 ADD SWAP5 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0xC42 JUMPI POP POP POP PUSH0 SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP7 SWAP6 SWAP5 PUSH4 0xFFFFFFFF PUSH2 0xB9E SWAP6 PUSH2 0x164 CALLDATALOAD PUSH1 0x44 DUP11 ADD MSTORE AND PUSH1 0x64 DUP9 ADD MSTORE DUP9 PUSH1 0x84 DUP9 ADD MSTORE DUP3 DUP2 MLOAD AND PUSH1 0xA4 DUP9 ADD MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0xC4 DUP9 ADD MSTORE ADD MLOAD AND PUSH1 0xE4 DUP6 ADD MSTORE DUP6 PUSH2 0x104 DUP6 ADD MSTORE PUSH2 0x124 DUP5 ADD SWAP1 PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SUB DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xC37 JUMPI PUSH2 0xBF0 JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xC0A JUMPI PUSH1 0x20 SWAP2 PUSH1 0x40 MSTORE PUSH2 0xBE5 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP2 DUP1 SWAP8 SWAP7 POP SWAP5 SWAP1 SWAP3 SWAP4 SWAP5 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD AND DUP3 MSTORE PUSH1 0x20 DUP2 ADD MLOAD SWAP1 PUSH1 0x2 DUP3 LT ISZERO PUSH2 0xCBF JUMPI DUP3 PUSH1 0x60 PUSH1 0x80 SWAP3 PUSH1 0x20 SWAP5 DUP6 PUSH1 0x1 SWAP8 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH1 0x60 DUP3 ADD MSTORE ADD SWAP8 ADD SWAP2 ADD SWAP2 DUP9 SWAP6 SWAP7 SWAP5 SWAP4 SWAP3 PUSH2 0xB05 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x741752C200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x4CA249DC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x1 SWAP1 PUSH8 0x2C68AF0BB140000 PUSH2 0x950 PUSH1 0xFF DUP1 PUSH0 PUSH2 0x932 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH2 0xD5F PUSH2 0x117D JUMP JUMPDEST DUP3 DUP3 DUP10 ADD ADD MSTORE ADD PUSH2 0x8E8 JUMP JUMPDEST PUSH32 0x61EE176400000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x6B4 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6B4 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x6B4 JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x6B4 JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH2 0xDD0 DUP3 PUSH2 0x10ED JUMP JUMPDEST PUSH2 0xDDD PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0x10CA JUMP JUMPDEST DUP3 DUP2 MSTORE CALLDATASIZE PUSH1 0x24 DUP5 DUP5 ADD ADD GT PUSH2 0x6B4 JUMPI PUSH0 PUSH1 0x20 DUP5 DUP2 SWAP6 PUSH1 0x24 PUSH2 0xE0A SWAP7 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE PUSH1 0x24 CALLDATALOAD SWAP1 PUSH2 0x1342 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x6B4 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6B4 JUMPI PUSH2 0x3D2 PUSH2 0xE43 PUSH2 0x11F2 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x106D JUMP JUMPDEST CALLVALUE PUSH2 0x6B4 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6B4 JUMPI PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0xE92 SWAP2 AND PUSH2 0x145F JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xC37 JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0xFFC JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xC37 JUMPI PUSH0 SWAP3 PUSH2 0xFC5 JUMPI JUMPDEST POP POP ISZERO PUSH2 0xF9D JUMPI PUSH2 0xF6A PUSH2 0x1527 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xFF NOT PUSH1 0x2 SLOAD AND OR PUSH1 0x2 SSTORE PUSH32 0x432ACBFD662DBB5D8B378384A67159B47CA9D0F1B79F97CF64CF8585FA362D50 PUSH0 DUP1 LOG1 STOP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0xFF5 JUMPI JUMPDEST PUSH2 0xFDC DUP2 DUP4 PUSH2 0x10CA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x6B4 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x6B4 JUMPI DUP2 DUP1 PUSH2 0xF5B JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xFD2 JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x1017 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x22F JUMPI PUSH2 0x220 DUP2 DUP4 PUSH2 0x10CA JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0xF0A JUMP JUMPDEST CALLVALUE PUSH2 0x6B4 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x6B4 JUMPI PUSH1 0x80 PUSH2 0x1038 PUSH2 0x117D JUMP JUMPDEST PUSH2 0x106B PUSH1 0x40 MLOAD DUP1 SWAP3 PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST RETURN JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xC0A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xC0A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xC0A JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xC0A JUMPI PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x6B4 JUMPI JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1153 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1145 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x118A DUP3 PUSH2 0x1092 JUMP JUMPDEST PUSH0 PUSH1 0x60 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x11E8 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x11BB JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x11B0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH0 DUP3 PUSH1 0x5 SLOAD SWAP2 PUSH2 0x1205 DUP4 PUSH2 0x11A1 JUMP JUMPDEST DUP1 DUP4 MSTORE SWAP3 PUSH1 0x20 SWAP1 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x1291 JUMPI POP PUSH1 0x1 EQ PUSH2 0x1232 JUMPI JUMPDEST POP POP PUSH2 0x1230 SWAP3 POP SUB DUP4 PUSH2 0x10CA JUMP JUMPDEST JUMP JUMPDEST SWAP2 POP SWAP3 PUSH1 0x5 PUSH0 MSTORE PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x1279 JUMPI POP PUSH2 0x1230 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x1222 JUMP JUMPDEST DUP6 SLOAD DUP9 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP8 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x125E JUMP JUMPDEST SWAP1 POP PUSH1 0x20 SWAP4 POP PUSH2 0x1230 SWAP6 SWAP3 POP PUSH1 0xFF NOT SWAP2 POP AND DUP3 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x1222 JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH0 SWAP3 SWAP2 PUSH2 0x12C5 DUP3 PUSH2 0x11A1 JUMP JUMPDEST SWAP2 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x132F JUMPI POP PUSH1 0x1 EQ PUSH2 0x12E0 JUMPI POP POP POP JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 POP PUSH1 0x3 PUSH0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP1 PUSH0 SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x131C JUMPI POP POP POP ADD SWAP1 JUMP JUMPDEST DUP2 DUP2 PUSH1 0x20 SWAP3 SLOAD DUP6 DUP8 ADD MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x130E JUMP JUMPDEST PUSH1 0xFF NOT AND DUP4 MSTORE POP POP DUP2 ISZERO ISZERO SWAP1 SWAP2 MUL ADD SWAP2 POP JUMP JUMPDEST PUSH1 0x55 SWAP2 PUSH1 0xB SWAP2 PUSH1 0x40 MLOAD PUSH2 0x1379 DUP2 PUSH1 0x20 DUP1 DUP3 ADD SWAP5 PUSH2 0x135E DUP7 PUSH2 0x12B6 JUMP JUMPDEST SWAP1 DUP1 MLOAD SWAP3 DUP4 SWAP2 ADD DUP3 MCOPY ADD PUSH0 DUP2 MSTORE SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x10CA JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x20 DUP3 ADD MSTORE ADDRESS DUP2 MSTORE ADD PUSH1 0xFF DUP2 MSTORE8 KECCAK256 SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xC0A JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x13C3 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x13FD JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 SLOAD DUP2 LT ISZERO PUSH2 0x13C3 JUMPI PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x14BE DUP2 PUSH2 0x10AE JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x6B4 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x6B4 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH4 0xFFFFFFFF DUP2 AND TIMESTAMP LT ISZERO PUSH2 0x1522 JUMPI SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x2 SLOAD AND PUSH2 0x1533 JUMPI JUMP JUMPDEST PUSH32 0x75884CDA00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x20 DUP2 DUP4 SUB SLT PUSH2 0x6B4 JUMPI DUP1 MLOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x6B4 JUMPI ADD DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x6B4 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x158F DUP3 PUSH2 0x10ED JUMP JUMPDEST SWAP3 PUSH2 0x159D PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x10CA JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x6B4 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP2 DUP2 AND DUP1 DUP4 GT ISZERO PUSH2 0x1916 JUMPI PUSH1 0x1 PUSH0 SWAP2 JUMPDEST PUSH1 0x40 SWAP3 DUP4 MLOAD SWAP6 PUSH0 DUP8 PUSH1 0x4 DUP2 PUSH32 0x95D89B4100000000000000000000000000000000000000000000000000000000 SWAP5 DUP6 DUP3 MSTORE GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0x190C JUMPI PUSH0 SWAP8 PUSH2 0x18EE JUMPI JUMPDEST POP PUSH0 SWAP1 PUSH1 0x4 DUP7 MLOAD DUP1 SWAP6 DUP2 SWAP4 DUP3 MSTORE GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x18E4 JUMPI PUSH0 SWAP3 PUSH2 0x18C0 JUMPI JUMPDEST POP PUSH8 0x2C68AF0BB140000 PUSH2 0x1687 PUSH1 0xFF DUP7 MLOAD SWAP4 PUSH2 0x165E DUP6 PUSH2 0x10AE JUMP JUMPDEST PUSH1 0x2 DUP6 MSTORE PUSH8 0xB1A2BC2EC500000 PUSH2 0x167F DUP4 PUSH1 0x20 SWAP10 DUP12 CALLDATASIZE DUP13 DUP12 ADD CALLDATACOPY AND DUP8 PUSH2 0x13AF JUMP JUMPDEST MSTORE AND DUP4 PUSH2 0x13AF JUMP JUMPDEST MSTORE PUSH2 0x1789 PUSH1 0x27 DUP6 MLOAD SWAP8 PUSH32 0x42616C616E636572203830200000000000000000000000000000000000000000 DUP7 DUP11 ADD MSTORE DUP1 MLOAD SWAP5 DUP7 DUP3 ADD SWAP6 DUP1 DUP8 PUSH1 0x2C DUP14 ADD MCOPY DUP11 ADD SWAP1 PUSH32 0x2032302000000000000000000000000000000000000000000000000000000000 PUSH1 0x2C DUP4 ADD MSTORE PUSH2 0x1713 PUSH1 0x30 DUP13 DUP4 MLOAD DUP12 DUP6 ADD SWAP6 DUP2 DUP8 DUP6 DUP4 ADD MCOPY ADD PUSH0 DUP4 DUP3 ADD MSTORE SUB DUP14 PUSH1 0x10 DUP3 ADD SWAP1 MSTORE ADD DUP13 PUSH2 0x10CA JUMP JUMPDEST DUP9 MLOAD SWAP7 DUP8 SWAP4 PUSH32 0x422D383000000000000000000000000000000000000000000000000000000000 DUP11 DUP7 ADD MSTORE MLOAD DUP1 SWAP2 PUSH1 0x24 DUP7 ADD MCOPY DUP4 ADD SWAP1 PUSH32 0x2D32300000000000000000000000000000000000000000000000000000000000 PUSH1 0x24 DUP4 ADD MSTORE MLOAD DUP1 SWAP3 DUP6 DUP4 ADD MCOPY ADD PUSH0 DUP4 DUP3 ADD MSTORE SUB PUSH1 0x7 DUP2 ADD DUP6 MSTORE ADD DUP4 PUSH2 0x10CA JUMP JUMPDEST DUP4 MLOAD SWAP6 PUSH1 0xA0 DUP8 ADD DUP8 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xC0A JUMPI SWAP1 DUP6 SWAP4 SWAP3 SWAP2 PUSH2 0x17F8 SWAP9 SWAP7 SWAP8 SWAP6 SWAP8 MSTORE DUP6 MSTORE DUP6 DUP6 ADD SWAP2 DUP3 MSTORE DUP3 DUP6 ADD SWAP6 PUSH1 0x2 DUP8 MSTORE PUSH1 0x60 DUP7 ADD SWAP2 DUP3 MSTORE PUSH2 0x17D0 PUSH2 0x11F2 JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP8 ADD SWAP3 DUP4 MSTORE PUSH2 0x182C DUP6 MLOAD SWAP10 DUP11 SWAP9 DUP8 DUP6 DUP12 ADD MSTORE MLOAD PUSH1 0xA0 PUSH1 0x60 DUP12 ADD MSTORE PUSH2 0x100 DUP11 ADD SWAP1 PUSH2 0x106D JUMP JUMPDEST SWAP5 MLOAD SWAP5 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 SWAP6 DUP7 DUP11 DUP4 SUB ADD PUSH1 0x80 DUP12 ADD MSTORE PUSH2 0x106D JUMP JUMPDEST SWAP8 MLOAD PUSH1 0xA0 DUP9 ADD MSTORE MLOAD SWAP7 DUP4 DUP8 DUP3 SUB ADD PUSH1 0xC0 DUP9 ADD MSTORE DUP2 DUP1 DUP10 MLOAD SWAP3 DUP4 DUP2 MSTORE ADD SWAP9 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x18A9 JUMPI POP POP POP POP SWAP5 PUSH2 0x1871 SWAP2 PUSH2 0x18A6 SWAP7 MLOAD SWAP1 DUP7 DUP4 SUB ADD PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x106D JUMP JUMPDEST SWAP2 PUSH32 0x0 AND SWAP1 DUP4 ADD MSTORE SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x10CA JUMP JUMPDEST SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP11 MSTORE SWAP9 DUP2 ADD SWAP9 DUP11 SWAP9 POP SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x184D JUMP JUMPDEST PUSH2 0x18DD SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x18D5 DUP2 DUP4 PUSH2 0x10CA JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x155B JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x1643 JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 SWAP2 SWAP8 POP PUSH2 0x1905 SWAP1 RETURNDATASIZE DUP1 DUP5 DUP4 RETURNDATACOPY PUSH2 0x18D5 DUP2 DUP4 PUSH2 0x10CA JUMP JUMPDEST SWAP7 SWAP1 PUSH2 0x1626 JUMP JUMPDEST DUP6 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH0 PUSH1 0x1 SWAP2 PUSH2 0x15E6 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD SWAP3 CHAINID DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND PUSH1 0x40 DUP5 ADD MSTORE AND PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x60 DUP2 MSTORE PUSH2 0x14BE DUP2 PUSH2 0x1092 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC9 SWAP7 0xF7 0xD9 0x4D SLOAD PUSH0 XOR DUP14 PUSH5 0x621AB6B072 PUSH18 0xC46FC9F3F8B14D0EE35EAFBD5AD45416473 PUSH16 0x6C634300081B00330000000000000000 ","sourceMap":"1300:5107:122:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1473:26:67;1300:5107:122;1473:26:67;;;1300:5107:122;;;;;;;;;;;;;;;;;-1:-1:-1;;1300:5107:122;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1300:5107:122;;;;;;;;;2369:24:42;1300:5107:122;;;;;;;;;;-1:-1:-1;;1300:5107:122;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;1300:5107:122;;;;;;;;1473:26:67;;1300:5107:122;1473:26:67;1300:5107:122;;;1019:6:40;1300:5107:122;;1473:26:67;;;;;;;;;;;;1300:5107:122;;;;;;;;;1473:26:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;1300:5107:122;;;;;;;;;;;;;;;-1:-1:-1;;1300:5107:122;;;;;;3846:6:35;1300:5107:122;;;;;;;;;;;;;-1:-1:-1;;1300:5107:122;;;;;;;;;1019:6:40;1300:5107:122;;;;;;;;;;-1:-1:-1;;1300:5107:122;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;1300:5107:122;;;;;;;;;2073:20:42;1300:5107:122;;;;;;;;;;-1:-1:-1;;1300:5107:122;;;;;;;4726:9:35;1300:5107:122;;;;;;;;;;;;;;;;-1:-1:-1;;1300:5107:122;;;;;;;3987:6:35;1300:5107:122;;;;;;;;;;;;;;;3987:6:35;1300:5107:122;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1300:5107:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1300:5107:122;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1300:5107:122;;;;;;;;;;;-1:-1:-1;;1300:5107:122;;;;;;;;;;;;;;;-1:-1:-1;1300:5107:122;;-1:-1:-1;1300:5107:122;;-1:-1:-1;1300:5107:122;;;;;;;-1:-1:-1;;1300:5107:122;;;;;;;;;;;;;;4199:15:35;;;;4195:71;;4386:13;;;;;:::i;:::-;4413:12;4409:65;;1300:5107:122;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;;1300:5107:122;;;:::i;:::-;;;;;;;4542:9:35;;;;;;1300:5107:122;;;;;;;:::i;4553:3:35:-;4590:9;1300:5107:122;4583:17:35;4590:9;;;;;:::i;:::-;4583:17;:::i;:::-;1300:5107:122;;;;;;;4572:28:35;;;;:::i;:::-;1300:5107:122;;4527:13:35;;4409:65;1300:5107:122;;;;;;;;;;;4409:65:35;;;;1300:5107:122;;;;;;;;;;4195:71:35;1300:5107:122;4237:18:35;;;;;1300:5107:122;;;;;;-1:-1:-1;;1300:5107:122;;;;;;;:::i;:::-;;;;;;;;;;;4590:58;4673:47;4590:58;;4738:43;4590:58;1300:5107;4590:58;;:::i;:::-;4673:47;;:::i;:::-;4738:43;;:::i;:::-;1300:5107;;;;;;;;;;;;;;;-1:-1:-1;;1300:5107:122;;;;;;;;-1:-1:-1;1300:5107:122;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2878:101;;1300:5107;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;3721:47;1300:5107;;3543:53;1300:5107;3478:55;1300:5107;;;;;;:::i;:::-;;;;;;;;;;3323:32;;;1300:5107;;;;;1469:5;3431:36;1300:5107;;;3323:50;1300:5107;;;3384:37;1416:5;3384:37;;;;;:::i;:::-;1416:5;3431:36;:::i;:::-;1416:5;3478:55;;;;:::i;:::-;;;;:::i;:::-;;3543:53;;;;:::i;:::-;;;;:::i;:::-;;3638:58;;;;:::i;3721:47::-;1300:5107;;6297:48:35;;;1300:5107:122;6297:48:35;;;1300:5107:122;;;;:::i;:::-;;;;;;;;;;;;;;6297:48:35;-1:-1:-1;;6297:48:35;;;;;;:::i;:::-;1300:5107:122;;1662:20:108;1658:80;;1300:5107:122;1790:100:108;;;1300:5107:122;1790:100:108;1300:5107:122;1903:18:108;;;1899:81;;5469:200:35;;:::i;:::-;1300:5107:122;;;;;;;;;;-1:-1:-1;;1300:5107:122;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;6314:13:35;1300:5107:122;;;;;;;;;;;;;5645:17:35;;1300:5107:122;5645:17:35;;1300:5107:122;;:::i;:::-;6937:30:35;;:::i;:::-;1019:6:40;1300:5107:122;1019:6:40;1300:5107:122;6831:267:35;;;;1300:5107:122;;;;;6831:267:35;;;1300:5107:122;6831:267:35;;1300:5107:122;;;6831:267:35;1300:5107:122;6831:267:35;;1300:5107:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6831:267:35;1019:6:40;;1300:5107:122;1019:6:40;1300:5107:122;6831:267:35;;;;;;;;1300:5107:122;;;;;;;;;6831:267:35;1300:5107:122;;;;;;;;;6831:267:35;;1300:5107:122;;;;;;;;;;6831:267:35;1300:5107:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1899:81:108;1944:25;1300:5107:122;1944:25:108;1300:5107:122;;1944:25:108;1658:80;1705:22;1300:5107:122;1705:22:108;1300:5107:122;;1705:22:108;3323:50:122;1300:5107;;1469:5;3431:36;1300:5107;;;3323:50;;1300:5107;;;;;:::i;:::-;;;;;;;;;;2878:101;2943:25;1300:5107;2943:25;1300:5107;;2943:25;1300:5107;;;;;-1:-1:-1;;1300:5107:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;1300:5107:122;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;1300:5107:122;;;;;1774:7:37;1762:20;1774:7;;1762:20;:::i;:::-;1300:5107:122;;;;1231:22:40;;;:6;;;1300:5107:122;1231:6:40;;;1300:5107:122;1231:22:40;;;;;;;;;1300:5107:122;1231:22:40;;;1300:5107:122;;;;;;1231:64:40;;;;;1300:5107:122;1231:64:40;;1300:5107:122;1231:64:40;;1300:5107:122;1820:10:37;1300:5107:122;;;;1289:4:40;1300:5107:122;;;;;1231:64:40;;;;;;;1300:5107:122;1231:64:40;;;1300:5107:122;1797:34:37;;;1793:90;;5207:134:35;;:::i;:::-;5297:4;-1:-1:-1;;5285:16:35;1300:5107:122;;;5285:16:35;1300:5107:122;5317:17:35;1300:5107:122;5317:17:35;;1300:5107:122;1793:90:37;1854:18;1300:5107:122;1854:18:37;1300:5107:122;;1854:18:37;1231:64:40;;;;;;;;;;;;;;;;:::i;:::-;;;1300:5107:122;;;;;;;;;;;;1231:64:40;;;;;;;;;:22;1300:5107:122;1231:22:40;;;;;;;;;;;;;;;:::i;:::-;;;;;1300:5107:122;;;;;-1:-1:-1;;1300:5107:122;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1300:5107:122;;;;;;;;;;;;;;;;;-1:-1:-1;1300:5107:122;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;1300:5107:122;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;1300:5107:122;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1300:5107:122;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1300:5107:122;1935:12;1300:5107;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;;1935:12;-1:-1:-1;1300:5107:122;;;-1:-1:-1;1300:5107:122;;;;;;;-1:-1:-1;1300:5107:122;;-1:-1:-1;;;1300:5107:122;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1300:5107:122;;;;;;;;;;;;;;;;-1:-1:-1;;1300:5107:122;;;;;;;;;1935:12;1300:5107;;;;;;;;;6314:13:35;1300:5107:122;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;6314:13:35;-1:-1:-1;1300:5107:122;;;-1:-1:-1;1300:5107:122;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;1300:5107:122;;;-1:-1:-1;;1300:5107:122;;;;;;;;-1:-1:-1;1300:5107:122:o;4785:379:35:-;2766:1598:108;4785:379:35;2766:1598:108;4785:379:35;1300:5107:122;;4927:48:35;;;;;;1300:5107:122;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;1300:5107:122;;4927:48:35;-1:-1:-1;;4927:48:35;;;;;;:::i;:::-;1300:5107:122;5012:23:35;;2766:1598:108;1300:5107:122;2766:1598:108;;1300:5107:122;2766:1598:108;;;4927:48:35;2766:1598:108;;;2342:4;2766:1598;;;;;;;4785:379:35;:::o;1300:5107:122:-;;;;;;;;;;;:::o;1416:5::-;1300:5107;;1416:5;;;;;;;;;;;;:::o;:::-;;;;;;;;;;1300:5107;;;;;;;;;;:::o;:::-;;;;;;;;;;;5598:4:35;1300:5107:122;;;;;;5598:4:35;-1:-1:-1;1300:5107:122;;;;-1:-1:-1;1300:5107:122;:::o;1931:430:37:-;1300:5107:122;;;2303:50:37;;;2320:22;;1300:5107:122;;;;;;;2303:50:37;;;;;;:::i;:::-;1300:5107:122;2293:61:37;;1931:430;:::o;1300:5107:122:-;;;;;;;;;;;;;;;;;;:::o;2922:332:42:-;3191:24;1300:5107:122;;;3173:15:42;:42;1300:5107:122;;;2922:332:42;:::o;3172:75::-;;-1:-1:-1;2922:332:42;:::o;5347:116:35:-;1300:5107:122;4726:9:35;1300:5107:122;;5397:60:35;;5347:116::o;5397:60::-;5436:10;-1:-1:-1;5436:10:35;;-1:-1:-1;5436:10:35;1300:5107:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1300:5107:122;;;;;;;;;;;;;;:::o;5001:1102::-;1300:5107;;;;;;;5259:32;;;1300:5107;;;5295:1;-1:-1:-1;5259:50:122;;1300:5107;;;;;-1:-1:-1;1300:5107:122;5358:49;1300:5107;;5358:49;;;;;;;;;;;-1:-1:-1;5358:49:122;;;5259:50;1300:5107;-1:-1:-1;1300:5107:122;5358:49;1300:5107;;5454:48;;;;;;;;;;;;;-1:-1:-1;5454:48:122;;;5259:50;1300:5107;1469:5;5613:36;1300:5107;;;;;;;:::i;:::-;5554:1;1300:5107;;1416:5;5566:37;1300:5107;;;;;;;;;;5566:37;;:::i;:::-;1416:5;1300:5107;5613:36;;:::i;:::-;1416:5;1300:5107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1300:5107:122;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1300:5107:122;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;1416:5;;5702:360;;;1416:5;;;5702:360;;;1416:5;5554:1;1416:5;;1300:5107;5702:360;;1416:5;;;1300:5107;;:::i;:::-;5702:360;;;;1416:5;;;1300:5107;;;5678:418;;;;;;;1300:5107;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;5702:360;1300:5107;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1300:5107:122;;;;;;;;;;;;;5678:418;1300:5107;;;;;;;;;;;;:::i;:::-;1019:6:40;;1300:5107:122;;;;;5678:418;-1:-1:-1;;5678:418:122;;;;;;:::i;:::-;5001:1102;:::o;1300:5107::-;;;;;;;;;;;-1:-1:-1;1300:5107:122;;;;;;;;5454:48;;;;;;;-1:-1:-1;5454:48:122;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;1300:5107;;;-1:-1:-1;1300:5107:122;;;;;5358:49;-1:-1:-1;5358:49:122;;;;;;;;;;;;;;:::i;:::-;;;;;;1300:5107;;;-1:-1:-1;1300:5107:122;;;;;5259:50;-1:-1:-1;5307:1:122;5259:50;;;4794:201;1300:5107;;4929:58;;;;4940:13;;1300:5107;;;;;;;;;;;;;;;;4929:58;;;;;:::i"},"methodIdentifiers":{"create((address,uint8,address,bool),(address,uint8,address,bool),(address,address,address),uint256)":"4bef86d9","disable()":"2f2770db","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getDefaultLiquidityManagement()":"193ad50f","getDefaultPoolHooksContract()":"ec888061","getDeploymentAddress(bytes,bytes32)":"44f6fec7","getNewPoolPauseWindowEndTime()":"db035ebc","getOriginalPauseWindowEndTime()":"e9d56e19","getPauseWindowDuration()":"78da80cb","getPool(address,address)":"531aa03e","getPoolCount()":"8eec5d70","getPoolVersion()":"3f819b6f","getPools()":"673a2a1f","getPoolsInRange(uint256,uint256)":"53a72f7e","getVault()":"8d928af8","isDisabled()":"6c57f5a9","isPoolFromFactory(address)":"6634b753","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowDuration\",\"type\":\"uint32\"},{\"internalType\":\"string\",\"name\":\"factoryVersion\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"poolVersion\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"Create2EmptyBytecode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Create2FailedDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"Create2InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Disabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolPauseWindowDurationOverflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StandardPoolWithCreator\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"FactoryDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreated\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig\",\"name\":\"highWeightTokenConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig\",\"name\":\"lowWeightTokenConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDefaultLiquidityManagement\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDefaultPoolHooksContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"constructorArgs\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"getDeploymentAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNewPoolPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOriginalPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"highWeightToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"lowWeightToken\",\"type\":\"address\"}],\"name\":\"getPool\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPools\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"getPoolsInRange\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"These are standard Weighted Pools, but constrained to two tokens and 80/20 weights, greatly simplifying their configuration. This is an example of a customized factory, designed to deploy special-purpose pools. It does not allow hooks, and has a custom salt computation that does not consider the deployer address. See https://medium.com/balancer-protocol/the-8020-initiative-64a7a6cab976 for one use case, and https://medium.com/balancer-protocol/80-20-balancer-pools-ad7fed816c8d for a general discussion of the benefits of 80/20 pools.\",\"errors\":{\"Create2EmptyBytecode()\":[{\"details\":\"There's no code to deploy.\"}],\"Create2FailedDeployment()\":[{\"details\":\"The deployment failed.\"}],\"Create2InsufficientBalance(uint256,uint256)\":[{\"details\":\"Not enough balance for performing a CREATE2 deploy.\"}]},\"events\":{\"PoolCreated(address)\":{\"params\":{\"pool\":\"The address of the new pool\"}}},\"kind\":\"dev\",\"methods\":{\"create((address,uint8,address,bool),(address,uint8,address,bool),(address,address,address),uint256)\":{\"details\":\"Since tokens must be sorted, pass in explicit 80/20 token config structs. This assumes both tokens support the `IERC20Metadata` interface with `symbol` that returns a string. Otherwise, use the regular `WeightedPoolFactory`.\",\"params\":{\"highWeightTokenConfig\":\"The token configuration of the high weight token\",\"lowWeightTokenConfig\":\"The token configuration of the low weight token\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"swapFeePercentage\":\"Initial swap fee percentage\"},\"returns\":{\"pool\":\"The pool address\"}},\"disable()\":{\"details\":\"Existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getDefaultLiquidityManagement()\":{\"details\":\"Users can call this to create a structure with all false arguments, then set the ones they need to true.\",\"returns\":{\"liquidityManagement\":\"Liquidity management flags, all initialized to false\"}},\"getDeploymentAddress(bytes,bytes32)\":{\"params\":{\"constructorArgs\":\"The arguments used to create the pool\",\"salt\":\"The salt used to deploy the pool\"},\"returns\":{\"_0\":\"The predicted address of the pool, given the salt\"}},\"getNewPoolPauseWindowEndTime()\":{\"details\":\"We intend for all pools deployed by this factory to have the same pause window end time (i.e., after this date, all future pools will be unpausable). This function will return `_poolsPauseWindowEndTime` until it passes, after which it will return 0.\",\"returns\":{\"_0\":\"pauseWindowEndTime The resolved pause window end time (0 indicating it's no longer pausable)\"}},\"getOriginalPauseWindowEndTime()\":{\"returns\":{\"_0\":\"pauseWindowEndTime The end time as a timestamp\"}},\"getPauseWindowDuration()\":{\"returns\":{\"_0\":\"pauseWindowDuration The duration in seconds\"}},\"getPool(address,address)\":{\"params\":{\"highWeightToken\":\"The token with 80% weight in the pool.\",\"lowWeightToken\":\"The token with 20% weight in the pool.\"},\"returns\":{\"pool\":\"Address of the pool\"}},\"getPoolCount()\":{\"details\":\"This can then be used to \\\"paginate\\\" calls to `getPools` to control gas costs.\",\"returns\":{\"_0\":\"The number of pools deployed by this factory\"}},\"getPoolVersion()\":{\"details\":\"This is typically only useful in complex Pool deployment schemes, where multiple subsystems need to know about each other. Note that this value will only be set at factory creation time.\",\"returns\":{\"_0\":\"A string representation of the pool version\"}},\"getPools()\":{\"returns\":{\"_0\":\"The list of pools deployed by this factory\"}},\"getPoolsInRange(uint256,uint256)\":{\"details\":\"`start` must be a valid index, but if `count` exceeds the total length, it will not revert, but simply stop at the end and return fewer results than requested.\",\"params\":{\"count\":\"The maximum number of pools to return\",\"start\":\"The index of the first pool to return\"},\"returns\":{\"pools\":\"The list of pools deployed by this factory, starting at `start` and returning up to `count` pools\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isDisabled()\":{\"returns\":{\"_0\":\"True if this factory was disabled\"}},\"isPoolFromFactory(address)\":{\"params\":{\"pool\":\"The pool to check\"},\"returns\":{\"_0\":\"True if `pool` was created by this factory\"}},\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"Disabled()\":[{\"notice\":\"Attempted pool creation after the factory was disabled.\"}],\"IndexOutOfBounds()\":[{\"notice\":\"A pool index is beyond the current bounds of the array.\"}],\"PoolPauseWindowDurationOverflow()\":[{\"notice\":\"The factory deployer gave a duration that would overflow the Unix timestamp.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"StandardPoolWithCreator()\":[{\"notice\":\"A pool creator was specified for a pool from a Balancer core pool type.\"}]},\"events\":{\"FactoryDisabled()\":{\"notice\":\"The factory was disabled by governance.\"},\"PoolCreated(address)\":{\"notice\":\"A pool was deployed.\"}},\"kind\":\"user\",\"methods\":{\"create((address,uint8,address,bool),(address,uint8,address,bool),(address,address,address),uint256)\":{\"notice\":\"Deploys a new `WeightedPool`.\"},\"disable()\":{\"notice\":\"Disable the factory, preventing the creation of more pools.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getDefaultLiquidityManagement()\":{\"notice\":\"Convenience function for constructing a LiquidityManagement object.\"},\"getDefaultPoolHooksContract()\":{\"notice\":\"A common place to retrieve a default hooks contract. Currently set to address(0) (i.e. no hooks).\"},\"getDeploymentAddress(bytes,bytes32)\":{\"notice\":\"Return the address where a new pool will be deployed, based on the factory address and salt.\"},\"getNewPoolPauseWindowEndTime()\":{\"notice\":\"Returns the current pauseWindowEndTime that will be applied to Pools created by this factory.\"},\"getOriginalPauseWindowEndTime()\":{\"notice\":\"Returns the original factory pauseWindowEndTime, regardless of the current time.\"},\"getPauseWindowDuration()\":{\"notice\":\"Return the pause window duration. This is the time pools will be pausable after factory deployment.\"},\"getPool(address,address)\":{\"notice\":\"Gets the address of the pool with the respective tokens and weights.\"},\"getPoolCount()\":{\"notice\":\"Return the total number of pools deployed by this factory.\"},\"getPoolVersion()\":{\"notice\":\"Returns a JSON representation of the deployed pool version containing name, version number and task ID.\"},\"getPools()\":{\"notice\":\"Return the complete list of pools deployed by this factory.\"},\"getPoolsInRange(uint256,uint256)\":{\"notice\":\"Return a subset of the list of pools deployed by this factory.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isDisabled()\":{\"notice\":\"Check whether this factory has been disabled by governance.\"},\"isPoolFromFactory(address)\":{\"notice\":\"Check whether a pool was deployed by this factory.\"},\"version()\":{\"notice\":\"Getter for the version.\"}},\"notice\":\"Weighted Pool factory for 80/20 pools.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/WeightedPool8020Factory.sol\":\"WeightedPool8020Factory\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol\":{\"keccak256\":\"0xa7adbaf80bc9cfa44e41776f632b5d7cb2c02c562a124c0e4cb17f06c4a54db3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e4fdf59a7f3dc3b7d6bb6f466e4a0a6263b66c0fc12492baf06ec8c6fdcc2398\",\"dweb:/ipfs/QmWxLpicLjGdgGQ8GjuN9YfDyVapYWwzdgET86ucs9hmFa\"]},\"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol\":{\"keccak256\":\"0xae65b6b0800fed858a56df5dc8fe7eda072f7d409f0e0d4c63ad8fca5f0c8d33\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4503850853e86c655d3dba125613822c26552c834215e24bd88c2ac0f29675d4\",\"dweb:/ipfs/QmQ4dGpVpRcyhVfer2qsnbX2tTktwVXoX2bvoodrh3tinR\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IPoolVersion.sol\":{\"keccak256\":\"0xb97e44d4ebd74212195ebf10dc94cd46929e4c3dd217215945d164f02426891f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cdc1656abb0e6c82640d17e2752684cce674cdd54665e01491c2b3ccb74c5d8f\",\"dweb:/ipfs/QmfFr81CMmBJa27uHe4aquqHmU2nXCTpXST1shNq6ik8PA\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\":{\"keccak256\":\"0x6f8c558b0520faae0c4576f30225b5a97821a4cd210878a0ba10c102a2f753f3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b40aa7a5ee39fa2e297c684fd29ad45d866f1fc61cd997120a417b02a4d908aa\",\"dweb:/ipfs/QmYP5pQAF7SDLgy3aerqfnc4VwdmfQix2jcQUNL3o83BY9\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-pool-utils/contracts/BasePoolFactory.sol\":{\"keccak256\":\"0x5888b7317d6a8f91a7665922da7e1e00ee8ef47f6690d4bd7f44d37888e21848\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://00b22e2600301568c628a652fcc8f5d79145218feab59a8963dfe300763d8763\",\"dweb:/ipfs/QmNt2BgJYNL7ywhNvR42NneXDYQ7xRyTaTunfgJ2cCVQFR\"]},\"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol\":{\"keccak256\":\"0xa97e2a0fd95d78dcecf67fd8c554ced63bbd6da372b6f8b12f16ad526b6ec608\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d98ad2022f9e3653fd63daca8c0725c7ccbd4f63d0d27c413e90669ce7284a96\",\"dweb:/ipfs/QmZ62RpJj3qSUrrdVD3H72qEszTUuvGkFLSBXAKMhBn5nX\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol\":{\"keccak256\":\"0x89bd8b60aa203c8aa72af6e88671af68f4407a26dd3e0541b0e4dc387fd0081e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://411eb9ee6df963198102de5ae597c1f1377b0a45be23f17d38463f2eeefa2b0a\",\"dweb:/ipfs/QmcEaMawADJEyLswG5hhvhQuTNV3XUxBVu3YZCbJzQkoJ7\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/FactoryWidePauseWindow.sol\":{\"keccak256\":\"0x9594d2dc75aa8c92bb39d30cd76d3bfbb203fe17c4ae35b6f8d882ed4ac868d4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a43d706d34c9f071bed27372100fedaeb12ec4c5c3529e150c8684444c4a619\",\"dweb:/ipfs/QmYUnJ2CtjJY2XktSzamExryTNbAYjesnymMpqTvQuXUka\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/WeightedMath.sol\":{\"keccak256\":\"0x4d9faedc605adaa52594ae9949374d87bce13107f887edc593a0b9b7a5c91042\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://648e918881e78d62505f049d2f88335e679aa01b82d403ac80b854d9d85efcc2\",\"dweb:/ipfs/QmXA36vdUX611mTH3V9qNGM3uF591TB3xaADqWG41NFmWP\"]},\"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x79f2ec4f7314bd1c3555368ff02bb9d382489dc8bbd7efbbf306f9a5084f3bec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a57c155451c5b1c1c59a27770754ccd9ba1be9344db6ac45b8744eba5fa4fa2f\",\"dweb:/ipfs/QmarkRwGaS3egg1FaQH6LibqjT6NocVUbD1jMPWtFxFaQV\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x4910eb69dc3e3141803a36fb176349ae3d774f4a9811e4d486c44bf6a8e4e055\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://afec051b387a1dad075acfbe0093b443e9e5827e29f7b960af3c1b69645aa290\",\"dweb:/ipfs/QmdLcyhmHCiEyVbFsVByyjEdUn9pDTzVAPNyBpdH2YEs4Y\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/utils/Create2.sol\":{\"keccak256\":\"0x2b9807d194b92f1068d868e9587d27037264a9a067c778486f86ae21c61cbd5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://22d71f40aa38a20cf466d8647452a6e3f746353474f8c8af40f03aa8cae38420\",\"dweb:/ipfs/QmQ752Hz5av7YDK8pFojzb5qgeXQvfsdkdwkHVzaXoYAZR\"]},\"@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"contracts/WeightedPool.sol\":{\"keccak256\":\"0x5bc730e5864de66b59da231ec3c083adc625c181c1d2980e043b2c3135828b83\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d38330349ca047499752eed9e3468191cb9219fa0a57ebec2b3695e87275b657\",\"dweb:/ipfs/QmeJVT9jQXg7yMZ6zyUsQsZXbgt1QqktYpqRV9Fj4cLECX\"]},\"contracts/WeightedPool8020Factory.sol\":{\"keccak256\":\"0x410c44e8ca1ebcc8a542cb0e4fc0620b35878ee1ed0cf7d5f292b4546d3c8169\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://ef35c5b67edc0d02b41f815ae914154d0f543d0da0679d7ccef3dabe183d7c43\",\"dweb:/ipfs/QmXRQbYLAyuD3dZ2ZbDGUmDHQoSX3VcUiejs5iEnBYCHV5\"]}},\"version\":1}"}},"contracts/WeightedPoolFactory.sol":{"WeightedPoolFactory":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"uint32","name":"pauseWindowDuration","type":"uint32"},{"internalType":"string","name":"factoryVersion","type":"string"},{"internalType":"string","name":"poolVersion","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Create2EmptyBytecode","type":"error"},{"inputs":[],"name":"Create2FailedDeployment","type":"error"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"Create2InsufficientBalance","type":"error"},{"inputs":[],"name":"Disabled","type":"error"},{"inputs":[],"name":"IndexOutOfBounds","type":"error"},{"inputs":[],"name":"PoolPauseWindowDurationOverflow","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"StandardPoolWithCreator","type":"error"},{"anonymous":false,"inputs":[],"name":"FactoryDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreated","type":"event"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokens","type":"tuple[]"},{"internalType":"uint256[]","name":"normalizedWeights","type":"uint256[]"},{"components":[{"internalType":"address","name":"pauseManager","type":"address"},{"internalType":"address","name":"swapFeeManager","type":"address"},{"internalType":"address","name":"poolCreator","type":"address"}],"internalType":"struct PoolRoleAccounts","name":"roleAccounts","type":"tuple"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"address","name":"poolHooksContract","type":"address"},{"internalType":"bool","name":"enableDonation","type":"bool"},{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"create","outputs":[{"internalType":"address","name":"pool","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDefaultLiquidityManagement","outputs":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getDefaultPoolHooksContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"constructorArgs","type":"bytes"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"getDeploymentAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNewPoolPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOriginalPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowDuration","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolVersion","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPools","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getPoolsInRange","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolFromFactory","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_string_fromMemory":{"entryPoint":1108,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":1071,"id":null,"parameterSlots":1,"returnSlots":1},"clear_storage_range_bytes1":{"entryPoint":1245,"id":null,"parameterSlots":2,"returnSlots":0},"extract_byte_array_length":{"entryPoint":1189,"id":null,"parameterSlots":1,"returnSlots":1},"extract_used_part_and_set_length_of_short_byte_array":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6101006040523461042b5761617c8038038061001a8161042f565b928339810160808282031261042b578151916001600160a01b038316830361042b57602092838201519363ffffffff8086169586810361042b5760408501516001600160401b03959086811161042b5787610076918301610454565b96606082015187811161042b5761008d9201610454565b966146439461009d85870161042f565b95808752611b39868801393060805260a052420190814211610417578282116104085760c0521660e052815193838511610366576003946100de86546104a5565b93601f948581116103dc575b50839085831160011461037a5761011892915f9183610217575b50508160011b915f199060031b1c19161790565b85555b80518481116103665760049161013183546104a5565b858111610330575b5083908583116001146102ce5761016692915f91836102175750508160011b915f199060031b1c19161790565b81555b85519384116102bb575060059361018085546104a5565b838111610287575b508192841160011461022257505081906101b793945f926102175750508160011b915f199060031b1c19161790565b90555b60405161164590816104f4823960805181611504015260a05181818161044101528181610591015281816106b6015281816109c201528181610a780152610fdf015260c05181610b08015260e051818181610923015261157d0152f35b015190505f80610104565b9091601f19841695855f52835f20935f905b88821061026f575050846001969710610256575b50505050811b0190556101ba565b01519060f8845f19921b161c191690555f808080610248565b80600185978294968601518155019601930190610234565b6102ac90865f52835f2085808801891c8201928689106102b2575b01881c01906104dd565b5f610188565b925081926102a2565b604190634e487b7160e01b5f525260245ffd5b90601f19831691845f52855f20925f5b8782821061031a575050908460019594939210610303575b505050811b018155610169565b01515f19838a1b60f8161c191690555f80806102f6565b60018596829396860151815501950193016102de565b61035790845f52855f208780860160051c82019288871061035d575b0160051c01906104dd565b5f610139565b9250819261034c565b634e487b7160e01b5f52604160045260245ffd5b90601f19831691885f52855f20925f5b878282106103c65750509084600195949392106103af575b505050811b01855561011b565b01515f19838a1b60f8161c191690555f80806103a2565b600185968293968601518155019501930161038a565b61040290885f52855f208780860160051c82019288871061035d570160051c01906104dd565b5f6100ea565b6368755a1160e01b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761036657604052565b81601f8201121561042b578051906001600160401b03821161036657610483601f8301601f191660200161042f565b928284526020838301011161042b57815f9260208093018386015e8301015290565b90600182811c921680156104d3575b60208310146104bf57565b634e487b7160e01b5f52602260045260245ffd5b91607f16916104b4565b8181106104e8575050565b5f81556001016104dd56fe60806040526004361015610011575f80fd5b5f358060e01c908163193ad50f146111255781632f2770db14610f5e575080633f819b6f14610f2f57806344f6fec714610e7557806353a72f7e14610d1757806354fd4d5014610c395780636634b75314610bed578063673a2a1f14610b4e5780636c57f5a914610b2c57806378da80cb14610aec578063851c1bb314610a9c5780638d928af814610a4c5780638eec5d7014610a2f578063aaabadc51461096f578063db035ebc14610947578063e9d56e1914610907578063ec888061146108ed5763fed4cdda146100e2575f80fd5b346107ec576101806003193601126107ec5760043567ffffffffffffffff81116107ec5761011490369060040161126f565b60243567ffffffffffffffff81116107ec5761013490369060040161126f565b6044359167ffffffffffffffff83116107ec57366023840112156107ec578260040135906101618261128d565b9361016f60405195866111b5565b82855260208501906024829460071b820101903682116107ec57602401915b8183106108695750505060643567ffffffffffffffff81116107ec57366023820112156107ec578060040135906101c48261128d565b916101d260405193846111b5565b8083526024602084019160051b830101913683116107ec57602401905b8282106108595750505060607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c3601126107ec57604051936060850185811067ffffffffffffffff8211176107085760405260843573ffffffffffffffffffffffffffffffffffffffff811681036107ec57855260a43573ffffffffffffffffffffffffffffffffffffffff811681036107ec57602086015260c43573ffffffffffffffffffffffffffffffffffffffff811681036107ec576040860152610104359173ffffffffffffffffffffffffffffffffffffffff831683036107ec57610124359384151585036107ec576101443580151581036107ec576102f26112a5565b951515606087015215158552875191604051918260a081011067ffffffffffffffff60a0850111176107085790829160a06103a696959401604052825260208201938452604082019283526060820190815261034c61131a565b608083015260405194859460406020870152610375845160a06060890152610100880190611174565b90517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0878303016080880152611174565b925160a085015251917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08482030160c0850152602080845192838152019301905f5b8181106108405750505090608061042a9201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08483030160e0850152611174565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166040830152039061047a601f19928381018352826111b5565b6104aa6040519283602080820194610491866113de565b90805192839101825e015f8152039081018452836111b5565b6104b6610164356115e6565b908251156108185773ffffffffffffffffffffffffffffffffffffffff9251905ff5169384156107f0576104e86115b2565b845f525f60205260405f20600160ff1982541617905560015468010000000000000000811015610708578060016105229201600155611477565b81549060031b9073ffffffffffffffffffffffffffffffffffffffff88831b921b191617905560405195857f83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc5f80a261057961157b565b9073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156107ec57908794959392917feeec802f0000000000000000000000000000000000000000000000000000000086526101a48601908860048801526101a06024880152518091526101c4860194905f5b818110610740575050509473ffffffffffffffffffffffffffffffffffffffff85949381604061069c9563ffffffff5f9b60e43560448c01521660648a01528a60848a01528281511660a48a01528260208201511660c48a015201511660e4870152166101048501526101248401906060809180511515845260208101511515602085015260408101511515604085015201511515910152565b03818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610735576106ee575b602090604051908152f35b67ffffffffffffffff8211610708576020916040526106e3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040513d5f823e3d90fd5b91809897509590929394955173ffffffffffffffffffffffffffffffffffffffff815116825260208101519060028210156107bf5782606060809260209485600197015273ffffffffffffffffffffffffffffffffffffffff604082015116604084015201511515606082015201980191019189969795949392610602565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f80fd5b7f741752c2000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4ca249dc000000000000000000000000000000000000000000000000000000005f5260045ffd5b82518552869550602094850194909201916001016103e8565b81358152602091820191016101ef565b6080833603126107ec576040519061088082611199565b73ffffffffffffffffffffffffffffffffffffffff843581811681036107ec578352602085013560028110156107ec576020840152604085013590811681036107ec576040830152606090818501359283151584036107ec5760809360209382015281520192019161018e565b346107ec575f6003193601126107ec5760206040515f8152f35b346107ec575f6003193601126107ec57602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107ec575f6003193601126107ec57602061096161157b565b63ffffffff60405191168152f35b346107ec575f6003193601126107ec576040517faaabadc500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa908115610735576020925f92610a00575b5060405191168152f35b610a21919250833d8511610a28575b610a1981836111b5565b81019061154f565b90836109f6565b503d610a0f565b346107ec575f6003193601126107ec576020600154604051908152f35b346107ec575f6003193601126107ec57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107ec5760206003193601126107ec576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036107ec57610ae46020916114d9565b604051908152f35b346107ec575f6003193601126107ec57602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107ec575f6003193601126107ec57602060ff600254166040519015158152f35b346107ec575f6003193601126107ec57604051806001916001549283825260208092019360015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6925f905b828210610bc257610bbe86610bb2818a03826111b5565b6040519182918261121e565b0390f35b845473ffffffffffffffffffffffffffffffffffffffff168752958601959383019390830190610b9b565b346107ec5760206003193601126107ec5760043573ffffffffffffffffffffffffffffffffffffffff81168091036107ec575f525f602052602060ff60405f2054166040519015158152f35b346107ec575f6003193601126107ec576040516004545f82610c5a836112c9565b91828252602093600190856001821691825f14610cf7575050600114610c9c575b50610c88925003836111b5565b610bbe604051928284938452830190611174565b84915060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b905f915b858310610cdf575050610c88935082010185610c7b565b80548389018501528794508693909201918101610cc8565b60ff191685820152610c8895151560051b8501019250879150610c7b9050565b346107ec5760406003193601126107ec576004356024803560019260015480821015610e4d5780610d48848461146a565b11610e0c575b50610d588261128d565b92610d6660405194856111b5565b828452610d728361128d565b91601f19602093013660208701375f5b848110610d975760405180610bbe888261121e565b610da9610da4828461146a565b611477565b9054908751831015610de05760031b1c73ffffffffffffffffffffffffffffffffffffffff16600582901b87018501528601610d82565b847f4e487b71000000000000000000000000000000000000000000000000000000005f5260326004525ffd5b908092508103908111610e20579084610d4e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e23d035000000000000000000000000000000000000000000000000000000005f5260045ffd5b346107ec5760406003193601126107ec5760043567ffffffffffffffff81116107ec57366023820112156107ec576055600b610ebd60209336906024816004013591016111d8565b604051610eed818680820194610ed2866113de565b90805192839101825e015f815203601f1981018352826111b5565b519020610efb6024356115e6565b604051916040830152848201523081520160ff81532073ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346107ec575f6003193601126107ec57610bbe610f4a61131a565b604051918291602083526020830190611174565b346107ec575f6003193601126107ec577fffffffff00000000000000000000000000000000000000000000000000000000610f9991166114d9565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156107355784925f92611103575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610735575f926110cc575b5050156110a4576110716115b2565b600160ff1960025416176002557f432acbfd662dbb5d8b378384a67159b47ca9d0f1b79f97cf64cf8585fa362d505f80a1005b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d83116110fc575b6110e381836111b5565b810103126107ec575180151581036107ec578180611062565b503d6110d9565b606491925061111e90843d8611610a2857610a1981836111b5565b9190611011565b346107ec575f6003193601126107ec57608061113f6112a5565b61117260405180926060809180511515845260208101511515602085015260408101511515604085015201511515910152565bf35b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6080810190811067ffffffffffffffff82111761070857604052565b90601f601f19910116810190811067ffffffffffffffff82111761070857604052565b92919267ffffffffffffffff821161070857604051916112026020601f19601f84011601846111b5565b8294818452818301116107ec578281602093845f960137010152565b60209060206040818301928281528551809452019301915f5b828110611245575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101611237565b9080601f830112156107ec5781602061128a933591016111d8565b90565b67ffffffffffffffff81116107085760051b60200190565b604051906112b282611199565b5f6060838281528260208201528260408201520152565b90600182811c92168015611310575b60208310146112e357565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916112d8565b604051905f826005549161132d836112c9565b808352926020906001908181169081156113b9575060011461135a575b5050611358925003836111b5565b565b91509260055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0935f925b8284106113a157506113589450505081016020015f8061134a565b85548885018301529485019487945092810192611386565b90506020935061135895925060ff1991501682840152151560051b8201015f8061134a565b6003545f92916113ed826112c9565b91600190818116908115611457575060011461140857505050565b909192935060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b905f915b848310611444575050500190565b8181602092548587015201920191611436565b60ff191683525050811515909102019150565b91908201809211610e2057565b6001548110156114ac5760015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176107085760405251902090565b908160209103126107ec575173ffffffffffffffffffffffffffffffffffffffff811681036107ec5790565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff81164210156115ad5790565b505f90565b60ff600254166115be57565b7f75884cda000000000000000000000000000000000000000000000000000000005f5260045ffd5b604051602081019133835246604083015260608201526060815261160981611199565b5190209056fea26469706673582212208f161342a59821cfe8bcf58b3a2e65ee6e23527ad9e05d36bd40767f1f181b5064736f6c634300081b00336102c080604052346108e157614643803803809161001d82856108f5565b833981016040828203126108e15781516001600160401b0381116108e15782019160a0838303126108e1576040519160a083016001600160401b038111848210176107105760405283516001600160401b0381116108e15781610081918601610918565b835260208401516001600160401b0381116108e157816100a2918601610918565b602084019081526040808601519085015260608501519094906001600160401b0381116108e157810182601f820112156108e1578051906001600160401b038211610710578160051b604051926100fc60208301856108f5565b8352602080840191830101918583116108e157602001905b8282106108e55750505060608501526080810151916001600160401b0383116108e1576020926101449201610918565b608084018190529101516001600160a01b03811681036108e15782519351604080519195919081016001600160401b03811182821017610710576040526001815260208101603160f81b81526101998361096d565b610120526101a682610af0565b6101405282516020840120918260e05251902080610100524660a0526040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815260c0810181811060018060401b03821117610710576040525190206080523060c0526101608290528051906001600160401b0382116107105760035490600182811c921680156108d7575b60208310146106f25781601f84931161087f575b50602090601f831160011461080a575f926107ff575b50508160011b915f199060031b1c1916176003555b83516001600160401b03811161071057600454600181811c911680156107f5575b60208210146106f257601f8111610796575b506020601f821160011461072f5781929394955f92610724575b50508160011b915f199060031b1c1916176004555b610180528051906001600160401b0382116107105760055490600182811c92168015610706575b60208310146106f25781601f8493116106a4575b50602090601f831160011461061c575f92610611575b50508160011b915f199060031b1c1916176005555b60408101516101a09080825260608301515103610602575f905f5b81519260ff821693841015610494576060850151805185101561048057602090611fe08460051b1601015190662386f26fc100008210610471578181018091116103d95793806103ed57506101c0525b60ff8091169081146103d957600101610375565b634e487b7160e01b5f52601160045260245ffd5b600181036103ff57506101e0526103c5565b600281036104115750610200526103c5565b600381036104235750610220526103c5565b600481036104355750610240526103c5565b600581036104475750610260526103c5565b600681036104595750610280526103c5565b600714610467575b506103c5565b6102a0525f610461565b63bd39358360e01b5f5260045ffd5b634e487b7160e01b5f52603260045260245ffd5b670de0b6b3a76400009150036105f3576040516139fc9182610c27833960805182612806015260a051826128d2015260c051826127d7015260e051826128550152610100518261287b0152610120518261112801526101405182611152015261016051828181610260015281816104880152818161065f01528181610d7e015281816110ed015281816114ae01528181611733015281816119d801528181612118015261276c01526101805182818161059d0152818161094a01528181610a1201528181610c7a0152611277015251816128fa01526101c0518181816125d2015261295101526101e0518181816125ff015261297e01526102005181818161262c01526129b701526102205181818161265901526129f00152610240518181816126860152612a2a0152610260518181816126b30152612a630152610280518181816126e00152612a9f01526102a05181818161270b0152612ad90152f35b631ce788a760e11b5f5260045ffd5b63aaad13f760e01b5f5260045ffd5b015190505f80610345565b60055f90815293507f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db091905b601f1984168510610689576001945083601f19811610610671575b505050811b0160055561035a565b01515f1960f88460031b161c191690555f8080610663565b81810151835560209485019460019093019290910190610648565b90915060055f5260205f20601f840160051c8101602085106106eb575b90849392915b601f830160051c820181106106dd57505061032f565b5f81558594506001016106c7565b50806106c1565b634e487b7160e01b5f52602260045260245ffd5b91607f169161031b565b634e487b7160e01b5f52604160045260245ffd5b015190505f806102df565b60045f5260205f20905f5b601f198416811061077e575060019394959683601f19811610610766575b505050811b016004556102f4565b01515f1960f88460031b161c191690555f8080610758565b9091602060018192858b01518155019301910161073a565b60045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f830160051c8101602084106107ee575b601f830160051c820181106107e35750506102c5565b5f81556001016107cd565b50806107cd565b90607f16906102b3565b015190505f8061027d565b60035f90815293505f5160206146235f395f51905f5291905b601f1984168510610864576001945083601f1981161061084c575b505050811b01600355610292565b01515f1960f88460031b161c191690555f808061083e565b81810151835560209485019460019093019290910190610823565b60035f529091505f5160206146235f395f51905f52601f840160051c8101602085106108d0575b90849392915b601f830160051c820181106108c2575050610267565b5f81558594506001016108ac565b50806108a6565b91607f1691610253565b5f80fd5b8151815260209182019101610114565b601f909101601f19168101906001600160401b0382119082101761071057604052565b81601f820112156108e1578051906001600160401b038211610710576040519261094c601f8401601f1916602001856108f5565b828452602083830101116108e157815f9260208093018386015e8301015290565b8051602090818110156109e35750601f8251116109a5578082519201519080831061099757501790565b825f19910360031b1b161790565b60448260405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b906001600160401b038211610710575f54926001938481811c91168015610ae6575b838210146106f257601f8111610ab3575b5081601f8411600114610a5157509282939183925f94610a46575b50501b915f199060031b1c1916175f5560ff90565b015192505f80610a31565b919083601f1981165f8052845f20945f905b88838310610a995750505010610a81575b505050811b015f5560ff90565b01515f1960f88460031b161c191690555f8080610a74565b858701518855909601959485019487935090810190610a63565b5f805284601f845f20920160051c820191601f860160051c015b828110610adb575050610a16565b5f8155018590610acd565b90607f1690610a05565b805160209081811015610b1a5750601f8251116109a5578082519201519080831061099757501790565b9192916001600160401b0381116107105760019182548381811c91168015610c1c575b828210146106f257601f8111610be9575b5080601f8311600114610b895750819293945f92610b7e575b50505f19600383901b1c191690821b17905560ff90565b015190505f80610b67565b90601f19831695845f52825f20925f905b888210610bd25750508385969710610bba575b505050811b01905560ff90565b01515f1960f88460031b161c191690555f8080610bad565b808785968294968601518155019501930190610b9a565b835f5283601f835f20920160051c820191601f850160051c015b828110610c11575050610b4e565b5f8155018490610c03565b90607f1690610b3d56fe6080604090808252600480361015610015575f80fd5b60e05f35811c92836301ffc9a714611d905750826306fdde0314611ce1578263095ea7b314611c6357826316a0b3e014611a2a57826318160ddd14611a0e57826323b872dd1461196657826323de665114611934578263273c1adf1461191257826330adf81f146118d8578263313ce567146118bd5782633644e515146118a157826353b79bd7146116e557826354fd4d50146115f55782635687f2b814611596578263627cdcb91461156d578263654cf15d1461154b578263679aefce1461151457826370a082311461144057826372c981861461131f5782637ecebe00146112db57826381fa807c1461121a57826384b0196e146111115782638d928af8146110c157826395d89b4114610fbb578263984de9e814610df9578263a9059cbb14610ce6578263aa6ca80814610c21578263abb1dc44146109b8578263b156aa0a146108f1578263b677fa56146108cf578263c0bc6f33146105f6578263ce20ece7146105d6578263d335b0cf14610543578263d505accf146102d857508163dd62ed3e146101e5575063f89f27ed146101ae575f80fd5b346101e1575f6003193601126101e1576101dd906101ca6128f8565b9051918291602083526020830190611fa7565b0390f35b5f80fd5b82346101e157806003193601126101e1576020610200611e1c565b606461020a611e3f565b9473ffffffffffffffffffffffffffffffffffffffff808097875198899687957f927da10500000000000000000000000000000000000000000000000000000000875230908701521660248501521660448301527f0000000000000000000000000000000000000000000000000000000000000000165afa9081156102cf575f9161029a575b6020925051908152f35b90506020823d6020116102c7575b816102b560209383611eca565b810103126101e1576020915190610290565b3d91506102a8565b513d5f823e3d90fd5b8390346101e1576003193601126101e1576102f1611e1c565b906102fa611e3f565b604435926084359060643560ff831683036101e157804211610519576103478273ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2080549060018201905590565b9061041361040a875195602087017f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9815273ffffffffffffffffffffffffffffffffffffffff97889586891697888d840152878c1660608401528d608084015260a083015260c082015260c081526103be81611e92565b5190206103c96127c0565b908a51917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015260c43591604260a4359220612ed8565b90929192612f67565b168181036104ec5750505f84959661048460209651988996879586947fe1f21c67000000000000000000000000000000000000000000000000000000008652850160409194939294606082019573ffffffffffffffffffffffffffffffffffffffff80921683521660208201520152565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19081156102cf57506104b857005b6020813d6020116104e4575b816104d160209383611eca565b810103126101e1576104e290612079565b005b3d91506104c4565b877f4b800e46000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b867f62791302000000000000000000000000000000000000000000000000000000005f525260245ffd5b5082346101e1575f6003193601126101e1578051917fb45090f9000000000000000000000000000000000000000000000000000000008352309083015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156102cf575f9161029a576020925051908152f35b83346101e1575f6003193601126101e157602090516509184e72a0008152f35b9150346101e1575f6003193601126101e157825161061381611e92565b606081526020918282019160608352858101925f8452606082015f815260808301915f835260a08401935f855260c08101955f875273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016908b517f535cfd8a00000000000000000000000000000000000000000000000000000000815230828201525f81602481865afa90811561087f575f916108ad575b5083528b517f7e361bde00000000000000000000000000000000000000000000000000000000815230828201525f81602481865afa90811561087f575f91610889575b5084528b517fb45090f900000000000000000000000000000000000000000000000000000000815230828201528a81602481865afa90811561087f575f91610852575b5089526107516120cf565b85528b519182917ff29486a100000000000000000000000000000000000000000000000000000000835230908301528160246101a09485935afa91821561084857928b9c926107e0926107f396955f9e9c9d9e9261081b575b50508a81015115158852610120610100918281015115158b52015115158a5283519d8d8f9e938f948552519301528c0190611fa7565b915190601f198b840301908b0152611fa7565b9551606088015251608087015251151560a086015251151560c0850152511515908301520390f35b61083a9250803d10610841575b6108328183611eca565b810190612482565b5f806107aa565b503d610828565b8c513d5f823e3d90fd5b90508a81813d8311610878575b6108698183611eca565b810103126101e157515f610746565b503d61085f565b8d513d5f823e3d90fd5b6108a591503d805f833e61089d8183611eca565b81019061228d565b90505f610703565b6108c991503d805f833e6108c18183611eca565b8101906125a4565b5f6106c0565b83346101e1575f6003193601126101e157602090516709b6e64a8ec600008152f35b8382346101e1575f6003193601126101e1578151907f535cfd8a00000000000000000000000000000000000000000000000000000000825230908201525f8160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156109ae57916101dd925f92610992575b5051918291602083526020830190611fa7565b6109a79192503d805f833e6108c18183611eca565b908361097f565b82513d5f823e3d90fd5b8382346101e1575f6003193601126101e15773ffffffffffffffffffffffffffffffffffffffff8251917f67e0e07600000000000000000000000000000000000000000000000000000000835230908301525f82602481847f0000000000000000000000000000000000000000000000000000000000000000165afa918215610c17575f935f925f925f95610aed575b5090610a6595949392918151968796608088526080880190611fda565b6020878203818901528080875193848152019601925f905b838210610aa957898803868b015289806101dd8b610a9b8c8c611fa7565b908382036060850152611fa7565b9184989950606086979860019395978397518051610ac681612023565b83528685820151168584015201511515898201520198019201899897969594929391610a7d565b955093509150503d805f853e610b038185611eca565b8301926080818503126101e15780519167ffffffffffffffff928381116101e15785610b30918401612185565b91602095868201518581116101e157820181601f820112156101e157805190610b5882611eed565b98610b6586519a8b611eca565b828a52808a01816060809502840101928584116101e1578201905b838210610bc5575050505050828201518581116101e15781610ba391840161222c565b9460608301519081116101e157610bba920161222c565b919492919386610a48565b84828703126101e157875190610bda82611e62565b825160028110156101e157825283830151908c821682036101e1578285928389950152610c088b8601612079565b8b820152815201910190610b80565b83513d5f823e3d90fd5b8382346101e1575f6003193601126101e1578151907fca4f280300000000000000000000000000000000000000000000000000000000825230908201525f8160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156109ae57916101dd925f92610cc2575b5051918291602083526020830190611fda565b610cdf9192503d805f833e610cd78183611eca565b810190612203565b9083610caf565b5082346101e157806003193601126101e1576020610d6492610d06611e1c565b83517fbeabacc80000000000000000000000000000000000000000000000000000000081523392810192835273ffffffffffffffffffffffffffffffffffffffff909116602083015260243560408301529384918291606090910190565b03815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610def57610db5575b6020905160018152f35b6020823d602011610de7575b81610dce60209383611eca565b810103126101e157610de1602092612079565b50610dab565b3d9150610dc1565b50513d5f823e3d90fd5b5082346101e157806003193601126101e157813567ffffffffffffffff81116101e157610e299036908401611f05565b60243560028110156101e157610e3e81612023565b610fb457825b610e4c6128f8565b9080600314610f5f5780600414610ed85780600114610e9557600214610e7f57605184634e487b7160e01b5f525260245ffd5b6020935090610e8d91613012565b905b51908152f35b509092670de0b6b3a764000091828102928184041490151715610ec55750602092610ebf91612b84565b90610e8f565b601190634e487b7160e01b5f525260245ffd5b50925f9190670de0b6b3a76400005b8551841015610f2357610f1b600191610f15610f0387876120bb565b51610f0e888b6120bb565b5190612ba2565b90612c2d565b930192610ee7565b92509350508015610f38576020925090610e8f565b827f26543689000000000000000000000000000000000000000000000000000000005f525ffd5b50925f9190670de0b6b3a76400005b8551841015610f2357670de0b6b3a7640000610fab600192610fa5610f9388886120bb565b51610f9e898c6120bb565b5190612e3f565b90612b71565b04930192610f6e565b6003610e44565b8382346101e1575f6003193601126101e157815191825f8354610fdd81612041565b90818452602095600191876001821691825f1461107c575050600114611020575b5050506101dd9291611011910385611eca565b51928284938452830190611df7565b5f90815286935091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b82841061106457505050820101816110116101dd610ffe565b8054848a01860152889550879490930192810161104b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168782015293151560051b8601909301935084925061101191506101dd9050610ffe565b83346101e1575f6003193601126101e1576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9150346101e1575f6003193601126101e15761114c7f0000000000000000000000000000000000000000000000000000000000000000612c4f565b926111767f0000000000000000000000000000000000000000000000000000000000000000612d81565b815192602084019084821067ffffffffffffffff8311176112075750916111e7916101dd949382525f84526111da82519788977f0f0000000000000000000000000000000000000000000000000000000000000089528060208a0152880190611df7565b9186830390870152611df7565b904660608501523060808501525f60a085015283820360c0850152611fa7565b604190634e487b7160e01b5f525260245ffd5b8382346101e1575f6003193601126101e1578151907ff29486a100000000000000000000000000000000000000000000000000000000825230908201526101a090818160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610c17575f926112be575b505060608282015191015182519182526020820152f35b6112d49250803d10610841576108328183611eca565b82806112a7565b83346101e15760206003193601126101e15760209073ffffffffffffffffffffffffffffffffffffffff61130d611e1c565b165f5260028252805f20549051908152f35b8382346101e15760209260031984813601126101e15782359167ffffffffffffffff918284116101e15783360301126101e15783519161135e83611e92565b8084013560028110156101e157835260248101358684015260448101358281116101e15761139190853691840101611f05565b85840152606481013560608401526084810135608084015260a481013573ffffffffffffffffffffffffffffffffffffffff811681036101e15760a084015260c4810135908282116101e1570192366023850112156101e15780840135918211611207575083519061140c86601f19601f8401160183611eca565b80825236602482860101116101e15785815f926024610e8d9701838601378301015260c082015261143b612755565b6122d1565b8382346101e157602091826003193601126101e1578261145e611e1c565b604473ffffffffffffffffffffffffffffffffffffffff9485855196879485937ff7888aec00000000000000000000000000000000000000000000000000000000855230908501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa918215610def575f926114e5575b5051908152f35b9091508281813d831161150d575b6114fd8183611eca565b810103126101e1575190836114de565b503d6114f3565b50346101e1575f6003193601126101e1577f18e79a20000000000000000000000000000000000000000000000000000000005f525ffd5b83346101e1575f6003193601126101e1576020905167016345785d8a00008152f35b346101e1575f6003193601126101e157335f908152600260205260409020805460018101909155005b83346101e15760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256115c836611f65565b9391946115d3612755565b5193845273ffffffffffffffffffffffffffffffffffffffff908116941692a3005b83346101e1575f6003193601126101e15780516005549091825f61161884612041565b808352602094600190866001821691825f146116a557505060011461164a575b50506101dd9291611011910385611eca565b9085925060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0915f925b82841061168d5750505082010181611011611638565b8054848a018601528895508794909301928101611677565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168682015292151560051b850190920192508391506110119050611638565b5082346101e1575f6003193601126101e15780519061170382611e62565b606082526020908183019160608352818401926060845273ffffffffffffffffffffffffffffffffffffffff95867f0000000000000000000000000000000000000000000000000000000000000000169084517fca4f280300000000000000000000000000000000000000000000000000000000815230828201525f81602481865afa90811561189757905f9291839161187d575b50885260248651809481937f7e361bde00000000000000000000000000000000000000000000000000000000835230908301525afa908115611873575f9161185a575b5081959295526117e96128f8565b84528251948086526080860192519260608288015283518091528160a088019401915f5b8281106118445788806101dd8a8a6118338b8b51601f1993848884030190880152611fa7565b915190848303016060850152611fa7565b83518a168652948101949281019260010161180d565b61186e91503d805f833e61089d8183611eca565b6117db565b84513d5f823e3d90fd5b61189191503d8085833e610cd78183611eca565b8a611798565b86513d5f823e3d90fd5b83346101e1575f6003193601126101e157602090610e8d6127c0565b83346101e1575f6003193601126101e1576020905160128152f35b83346101e1575f6003193601126101e157602090517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b83346101e1575f6003193601126101e157602090516729a2241af62c00008152f35b83346101e15760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6115c836611f65565b5082346101e15760205f608461197b36611f65565b86517f15dacbea000000000000000000000000000000000000000000000000000000008152339881019890985273ffffffffffffffffffffffffffffffffffffffff928316602489015290821660448801526064870152859283917f0000000000000000000000000000000000000000000000000000000000000000165af18015610def57610db5576020905160018152f35b83346101e1575f6003193601126101e157602090610e8d6120cf565b8382346101e15760606003193601126101e157803567ffffffffffffffff81116101e157611a5b9036908301611f05565b9160243592611a77611a7085604435936120bb565b51946125ca565b60019081831115611c5d5760025b80600314611be75780600414611b4e5780600114611b0c57600214611ab757605185634e487b7160e01b5f525260245ffd5b909192938115611ae65750610e8d9260209592610f15926ec097ce7bc90715b34b9f0fffffffff040190612ba2565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f525ffd5b5080929394915015611b3b575092610f15610e8d926020956ec097ce7bc90715b34b9f10000000000490612ba2565b601290634e487b7160e01b5f525260245ffd5b509192939080670de0b6b3a7640000935f925b611ba7575b5050508115611b81575092610f15610e8d9260209590612ba2565b7f26543689000000000000000000000000000000000000000000000000000000005f525ffd5b909193670de0b6b3a764000051851015611be1579082611bd98193610f15611bcf89866120bb565b51610f0e8a612086565b950192611b61565b93611b66565b509192939080670de0b6b3a7640000935f925b611c19575050508115611b81575092610f15610e8d9260209590612ba2565b909193670de0b6b3a764000051851015611be1579082670de0b6b3a7640000611c548294610fa5611c4a8a876120bb565b51610f9e8b612086565b04950192611bfa565b81611a85565b5082346101e157806003193601126101e1576020610d6492611c83611e1c565b83517fe1f21c670000000000000000000000000000000000000000000000000000000081523392810192835273ffffffffffffffffffffffffffffffffffffffff909116602083015260243560408301529384918291606090910190565b83346101e1575f6003193601126101e15780516003549091825f611d0484612041565b808352602094600190866001821691825f146116a5575050600114611d355750506101dd9291611011910385611eca565b9085925060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f925b828410611d785750505082010181611011611638565b8054848a018601528895508794909301928101611d62565b82346101e15760206003193601126101e15735907fffffffff0000000000000000000000000000000000000000000000000000000082168092036101e1577f01ffc9a700000000000000000000000000000000000000000000000000000000602092148152f35b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101e157565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101e157565b6060810190811067ffffffffffffffff821117611e7e57604052565b634e487b7160e01b5f52604160045260245ffd5b60e0810190811067ffffffffffffffff821117611e7e57604052565b6040810190811067ffffffffffffffff821117611e7e57604052565b90601f601f19910116810190811067ffffffffffffffff821117611e7e57604052565b67ffffffffffffffff8111611e7e5760051b60200190565b9080601f830112156101e1576020908235611f1f81611eed565b93611f2d6040519586611eca565b81855260208086019260051b8201019283116101e157602001905b828210611f56575050505090565b81358152908301908301611f48565b60031960609101126101e15773ffffffffffffffffffffffffffffffffffffffff9060043582811681036101e1579160243590811681036101e1579060443590565b9081518082526020808093019301915f5b828110611fc6575050505090565b835185529381019392810192600101611fb8565b9081518082526020808093019301915f5b828110611ff9575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101611feb565b6002111561202d57565b634e487b7160e01b5f52602160045260245ffd5b90600182811c9216801561206f575b602083101461205b57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691612050565b519081151582036101e157565b670de0b6b3a7640000518110156120a75760051b670de0b6b3a76400200190565b634e487b7160e01b5f52603260045260245ffd5b80518210156120a75760209160051b010190565b6040517fe4dc2aa400000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561217a575f9161214b575090565b90506020813d602011612172575b8161216660209383611eca565b810103126101e1575190565b3d9150612159565b6040513d5f823e3d90fd5b9080601f830112156101e1578151906020916121a081611eed565b936121ae6040519586611eca565b81855260208086019260051b8201019283116101e157602001905b8282106121d7575050505090565b815173ffffffffffffffffffffffffffffffffffffffff811681036101e15781529083019083016121c9565b906020828203126101e157815167ffffffffffffffff81116101e1576122299201612185565b90565b9080601f830112156101e15781519060209161224781611eed565b936122556040519586611eca565b81855260208086019260051b8201019283116101e157602001905b82821061227e575050505090565b81518152908301908301612270565b9190916040818403126101e15780519267ffffffffffffffff938481116101e157816122ba91840161222c565b9360208301519081116101e157612229920161222c565b604081019081516122e860608301918251906120bb565b519251916122fc60808201938451906120bb565b5191815161230981612023565b61231281612023565b6123d15761232c612325602092516125ca565b94516125ca565b910151670de0b6b3a7640000948561234382612b3d565b0482116123a95761235761235d9282612b30565b90613012565b848402938085048614901517156123955761237e6123849261239195612b84565b90612ba2565b8381810391100290612b71565b0490565b634e487b7160e01b5f52601160045260245ffd5b7f340a4533000000000000000000000000000000000000000000000000000000005f5260045ffd5b6123eb6123e460209295939495516125ca565b92516125ca565b920151670de0b6b3a764000061240085612b3d565b04811161245a578303908382116123955761242161237e9261242795613012565b92613012565b7ffffffffffffffffffffffffffffffffffffffffffffffffff21f494c589c000081019081116123955761222991612c2d565b7f64590b9f000000000000000000000000000000000000000000000000000000005f5260045ffd5b6101a0918190038281126101e15760405192610140928385019267ffffffffffffffff9086851082861117611e7e576080136101e1576101c0860190811184821017611e7e576040526124d481612079565b83526124e260208201612079565b9261016093848701526124f760408301612079565b92610180938488015261250c60608401612079565b9087015285526080810151602086015260a0810151604086015260c0810151606086015260e081015164ffffffffff811681036101e15760808601526101008082015163ffffffff811681036101e15761259d946125939160a08901526125876101209761257b898701612079565b60c08b01528501612079565b60e08901528301612079565b9086015201612079565b9082015290565b906020828203126101e157815167ffffffffffffffff81116101e157612229920161222c565b806125f457507f000000000000000000000000000000000000000000000000000000000000000090565b6001810361262157507f000000000000000000000000000000000000000000000000000000000000000090565b6002810361264e57507f000000000000000000000000000000000000000000000000000000000000000090565b6003810361267b57507f000000000000000000000000000000000000000000000000000000000000000090565b600481036126a857507f000000000000000000000000000000000000000000000000000000000000000090565b600581036126d557507f000000000000000000000000000000000000000000000000000000000000000090565b6006810361270257507f000000000000000000000000000000000000000000000000000000000000000090565b60070361272d577f000000000000000000000000000000000000000000000000000000000000000090565b7fc1ab6dc1000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361279457565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163014806128cf575b15612828577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff821117611e7e5760405251902090565b507f000000000000000000000000000000000000000000000000000000000000000046146127ff565b7f000000000000000000000000000000000000000000000000000000000000000061292281611eed565b906129306040519283611eca565b80825261293c81611eed565b601f196020840191013682378251156120a7577f000000000000000000000000000000000000000000000000000000000000000090528151600110156120a7577f000000000000000000000000000000000000000000000000000000000000000060408301526002811115612b2c578151600210156120a7577f000000000000000000000000000000000000000000000000000000000000000060608301526003811115612b2c578151600310156120a7577f0000000000000000000000000000000000000000000000000000000000000000608083015260049081811115612b27578251821015612b14577f000000000000000000000000000000000000000000000000000000000000000060a08401526005811115612b2757825160051015612b14577f000000000000000000000000000000000000000000000000000000000000000060c08401526006811115612b2757825160061015612b14576007907f000000000000000000000000000000000000000000000000000000000000000060e085015211612acc575090565b815160071015612b0157507f000000000000000000000000000000000000000000000000000000000000000061010082015290565b603290634e487b7160e01b5f525260245ffd5b603282634e487b7160e01b5f525260245ffd5b505090565b5090565b9190820180921161239557565b90670429d069189e00009182810292818404149015171561239557565b906127109182810292818404149015171561239557565b8181029291811591840414171561239557565b8115612b8e570490565b634e487b7160e01b5f52601260045260245ffd5b90670de0b6b3a764000090818103612bb957505090565b671bc16d674ec800008103612bd45750508061222991612c2d565b673782dace9d9000008103612bf8575050612bf28161222992612c2d565b80612c2d565b612c02919261308f565b906001612c0e83612b5a565b915f198301040190151502600181018091116123955761222991612b30565b90612c3791612b71565b6001670de0b6b3a76400005f19830104019015150290565b60ff8114612ca35760ff811690601f8211612c7b5760405191612c7183611eae565b8252602082015290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040515f815f5491612cb583612041565b80835292602090600190818116908115612d3e5750600114612ce0575b505061222992500382611eca565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b828410612d2657506122299450505081016020015f80612cd2565b85548785018301529485019486945092810192612d0b565b9050602093506122299592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f80612cd2565b60ff8114612da35760ff811690601f8211612c7b5760405191612c7183611eae565b506040515f81600191600154612db881612041565b8084529360209160018116908115612d3e5750600114612de057505061222992500382611eca565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b828410612e2757506122299450505081016020015f80612cd2565b85548785018301529485019486945092810192612e0c565b670de0b6b3a764000091808303612e565750905090565b8290671bc16d674ec800008103612e735750508061239191612b71565b673782dace9d9000008103612e975750612e908261239193612b71565b0480612b71565b9050612ea29161308f565b612eab81612b5a565b60015f1993848301040190151502906001820180831161239557811015612ed3575050505f90565b030190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411612f5c579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa1561217a575f5173ffffffffffffffffffffffffffffffffffffffff811615612f5257905f905f90565b505f906001905f90565b5050505f9160039190565b600481101561202d5780612f79575050565b60018103612fa9577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b60028103612fdd57507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600314612fe75750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b90801561304357670de0b6b3a764000091828102928184041490151715612395576001905f19830104019015150290565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b8015612b8e576ec097ce7bc90715b34b9f10000000000590565b8115612b8e570590565b9080156139b85781156139b2578160ff1c61398a57770bce5086492111aea88f4bb1ca6bcf584181ea8059f765328110156139625781670c7d713b49da00001280613951575b156135ee57670de0b6b3a7640000916ec097ce7bc90715b34b9f100000000090613128908402828101907fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f000000000018302613085565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b918082818507020592050201670de0b6b3a7640000905b057ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc000081811315806135db575b156135b3578190821215806135a0575b15613578575f915f8112613569575b506064906806f05b59d3b20000008112613506577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e0000000168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac620000008112156134cd575b6856bc75e2d631000000811215613493575b682b5e3af16b1880000081121561345b575b6815af1d78b58c400000811215613423575b680ad78ebc5ac62000008112156133ec575b828112156133b5575b6802b5e3af16b188000081121561337e575b68015af1d78b58c40000811215613347575b60028382800205056003848383020505600485848302050585600581868402050560068287830205056007838883020505906008848984020505926009858a8602050595600a868b8902050597600b878c8b02050599600c888d8d0205059b01010101010101010101010102050205905f14612229576122299061306b565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000849201920205906132c8565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000849201920205906132b6565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000849201920205906132a4565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e000008492019202059061329b565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000084920192020590613289565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000084920192020590613277565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000084920192020590613265565b6e01855144814a7ff805980ff008400091507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000001613253565b6803782dace9d90000008112613556577ffffffffffffffffffffffffffffffffffffffffffffffffc87d25316270000000168056bc75e2d63100000826b1425982cf597cd205cef73809261323e565b68056bc75e2d631000008260019261323e565b600192505f03905060646131e2565b7fd4794efd000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156131d3565b7fa2f9f7e3000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156131c3565b81670de0b6b3a7640000925f9184811261393b575b506064905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000821215613910575b73011798004d755d3c8bc8e03204cf44619e0000008212156138ef575b820290808302906e01855144814a7ff805980ff008400090818312156138cc575b50506b02df0ab5a80a22c61ab5a700808212156138ac575b50693f1fce3da636ea5cf8508082121561388c575b50690127fa27722cc06cc5e28082121561386c575b5068280e60114edb805d038082121561384c575b50680ebc5fb4174612111080821215613835575b506808f00f760a4b2db55d80821215613815575b506806f5f1775788937937808212156137f5575b506806248f33704b286603808212156137d6575b506805c548670b9510e7ac808212156137b7575b5061376468056bc75e2d6310000091827ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000818301920102613085565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b0105905f146137b2575f035b02613197565b6137ac565b68056bc75e2d631000006756bc75e2d63100009202059101905f613728565b68056bc75e2d6310000067ad78ebc5ac6200009202059101905f613714565b68056bc75e2d6310000068015af1d78b58c400009202059101905f613700565b68056bc75e2d631000006802b5e3af16b18800009202059101905f6136ec565b68056bc75e2d63100000809202059101905f6136d8565b68056bc75e2d63100000680ad78ebc5ac62000009202059101905f6136c4565b68056bc75e2d631000006815af1d78b58c4000009202059101905f6136b0565b68056bc75e2d63100000682b5e3af16b188000009202059101905f61369b565b68056bc75e2d631000006856bc75e2d6310000009202059101905f613686565b68ad78ebc5ac62000000925069021e19e0c9bab240000002059101905f8061366e565b906b1425982cf597cd205cef73806803782dace9d90000009105910161364d565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b2000000613630565b9050613947915061306b565b6001906064613603565b50670f43fc2c04ee000082126130d5565b7fd8317311000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f022701e0000000000000000000000000000000000000000000000000000000005f5260045ffd5b50505f90565b5050670de0b6b3a76400009056fea26469706673582212203ec0118ae17c0f0adba7459b5c62781ac22adb46f73c1467746703ba70b9c43764736f6c634300081b0033c2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b","opcodes":"PUSH2 0x100 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x42B JUMPI PUSH2 0x617C DUP1 CODESIZE SUB DUP1 PUSH2 0x1A DUP2 PUSH2 0x42F JUMP JUMPDEST SWAP3 DUP4 CODECOPY DUP2 ADD PUSH1 0x80 DUP3 DUP3 SUB SLT PUSH2 0x42B JUMPI DUP2 MLOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP4 AND DUP4 SUB PUSH2 0x42B JUMPI PUSH1 0x20 SWAP3 DUP4 DUP3 ADD MLOAD SWAP4 PUSH4 0xFFFFFFFF DUP1 DUP7 AND SWAP6 DUP7 DUP2 SUB PUSH2 0x42B JUMPI PUSH1 0x40 DUP6 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP6 SWAP1 DUP7 DUP2 GT PUSH2 0x42B JUMPI DUP8 PUSH2 0x76 SWAP2 DUP4 ADD PUSH2 0x454 JUMP JUMPDEST SWAP7 PUSH1 0x60 DUP3 ADD MLOAD DUP8 DUP2 GT PUSH2 0x42B JUMPI PUSH2 0x8D SWAP3 ADD PUSH2 0x454 JUMP JUMPDEST SWAP7 PUSH2 0x4643 SWAP5 PUSH2 0x9D DUP6 DUP8 ADD PUSH2 0x42F JUMP JUMPDEST SWAP6 DUP1 DUP8 MSTORE PUSH2 0x1B39 DUP7 DUP9 ADD CODECOPY ADDRESS PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE TIMESTAMP ADD SWAP1 DUP2 TIMESTAMP GT PUSH2 0x417 JUMPI DUP3 DUP3 GT PUSH2 0x408 JUMPI PUSH1 0xC0 MSTORE AND PUSH1 0xE0 MSTORE DUP2 MLOAD SWAP4 DUP4 DUP6 GT PUSH2 0x366 JUMPI PUSH1 0x3 SWAP5 PUSH2 0xDE DUP7 SLOAD PUSH2 0x4A5 JUMP JUMPDEST SWAP4 PUSH1 0x1F SWAP5 DUP6 DUP2 GT PUSH2 0x3DC JUMPI JUMPDEST POP DUP4 SWAP1 DUP6 DUP4 GT PUSH1 0x1 EQ PUSH2 0x37A JUMPI PUSH2 0x118 SWAP3 SWAP2 PUSH0 SWAP2 DUP4 PUSH2 0x217 JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR SWAP1 JUMP JUMPDEST DUP6 SSTORE JUMPDEST DUP1 MLOAD DUP5 DUP2 GT PUSH2 0x366 JUMPI PUSH1 0x4 SWAP2 PUSH2 0x131 DUP4 SLOAD PUSH2 0x4A5 JUMP JUMPDEST DUP6 DUP2 GT PUSH2 0x330 JUMPI JUMPDEST POP DUP4 SWAP1 DUP6 DUP4 GT PUSH1 0x1 EQ PUSH2 0x2CE JUMPI PUSH2 0x166 SWAP3 SWAP2 PUSH0 SWAP2 DUP4 PUSH2 0x217 JUMPI POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR SWAP1 JUMP JUMPDEST DUP2 SSTORE JUMPDEST DUP6 MLOAD SWAP4 DUP5 GT PUSH2 0x2BB JUMPI POP PUSH1 0x5 SWAP4 PUSH2 0x180 DUP6 SLOAD PUSH2 0x4A5 JUMP JUMPDEST DUP4 DUP2 GT PUSH2 0x287 JUMPI JUMPDEST POP DUP2 SWAP3 DUP5 GT PUSH1 0x1 EQ PUSH2 0x222 JUMPI POP POP DUP2 SWAP1 PUSH2 0x1B7 SWAP4 SWAP5 PUSH0 SWAP3 PUSH2 0x217 JUMPI POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1645 SWAP1 DUP2 PUSH2 0x4F4 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x1504 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x441 ADD MSTORE DUP2 DUP2 PUSH2 0x591 ADD MSTORE DUP2 DUP2 PUSH2 0x6B6 ADD MSTORE DUP2 DUP2 PUSH2 0x9C2 ADD MSTORE DUP2 DUP2 PUSH2 0xA78 ADD MSTORE PUSH2 0xFDF ADD MSTORE PUSH1 0xC0 MLOAD DUP2 PUSH2 0xB08 ADD MSTORE PUSH1 0xE0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x923 ADD MSTORE PUSH2 0x157D ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x104 JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x1F NOT DUP5 AND SWAP6 DUP6 PUSH0 MSTORE DUP4 PUSH0 KECCAK256 SWAP4 PUSH0 SWAP1 JUMPDEST DUP9 DUP3 LT PUSH2 0x26F JUMPI POP POP DUP5 PUSH1 0x1 SWAP7 SWAP8 LT PUSH2 0x256 JUMPI JUMPDEST POP POP POP POP DUP2 SHL ADD SWAP1 SSTORE PUSH2 0x1BA JUMP JUMPDEST ADD MLOAD SWAP1 PUSH1 0xF8 DUP5 PUSH0 NOT SWAP3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 DUP1 PUSH2 0x248 JUMP JUMPDEST DUP1 PUSH1 0x1 DUP6 SWAP8 DUP3 SWAP5 SWAP7 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP7 ADD SWAP4 ADD SWAP1 PUSH2 0x234 JUMP JUMPDEST PUSH2 0x2AC SWAP1 DUP7 PUSH0 MSTORE DUP4 PUSH0 KECCAK256 DUP6 DUP1 DUP9 ADD DUP10 SHR DUP3 ADD SWAP3 DUP7 DUP10 LT PUSH2 0x2B2 JUMPI JUMPDEST ADD DUP9 SHR ADD SWAP1 PUSH2 0x4DD JUMP JUMPDEST PUSH0 PUSH2 0x188 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x2A2 JUMP JUMPDEST PUSH1 0x41 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F NOT DUP4 AND SWAP2 DUP5 PUSH0 MSTORE DUP6 PUSH0 KECCAK256 SWAP3 PUSH0 JUMPDEST DUP8 DUP3 DUP3 LT PUSH2 0x31A JUMPI POP POP SWAP1 DUP5 PUSH1 0x1 SWAP6 SWAP5 SWAP4 SWAP3 LT PUSH2 0x303 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD DUP2 SSTORE PUSH2 0x169 JUMP JUMPDEST ADD MLOAD PUSH0 NOT DUP4 DUP11 SHL PUSH1 0xF8 AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x2F6 JUMP JUMPDEST PUSH1 0x1 DUP6 SWAP7 DUP3 SWAP4 SWAP7 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP6 ADD SWAP4 ADD PUSH2 0x2DE JUMP JUMPDEST PUSH2 0x357 SWAP1 DUP5 PUSH0 MSTORE DUP6 PUSH0 KECCAK256 DUP8 DUP1 DUP7 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP9 DUP8 LT PUSH2 0x35D JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 PUSH2 0x4DD JUMP JUMPDEST PUSH0 PUSH2 0x139 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x34C JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F NOT DUP4 AND SWAP2 DUP9 PUSH0 MSTORE DUP6 PUSH0 KECCAK256 SWAP3 PUSH0 JUMPDEST DUP8 DUP3 DUP3 LT PUSH2 0x3C6 JUMPI POP POP SWAP1 DUP5 PUSH1 0x1 SWAP6 SWAP5 SWAP4 SWAP3 LT PUSH2 0x3AF JUMPI JUMPDEST POP POP POP DUP2 SHL ADD DUP6 SSTORE PUSH2 0x11B JUMP JUMPDEST ADD MLOAD PUSH0 NOT DUP4 DUP11 SHL PUSH1 0xF8 AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x3A2 JUMP JUMPDEST PUSH1 0x1 DUP6 SWAP7 DUP3 SWAP4 SWAP7 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP6 ADD SWAP4 ADD PUSH2 0x38A JUMP JUMPDEST PUSH2 0x402 SWAP1 DUP9 PUSH0 MSTORE DUP6 PUSH0 KECCAK256 DUP8 DUP1 DUP7 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP9 DUP8 LT PUSH2 0x35D JUMPI ADD PUSH1 0x5 SHR ADD SWAP1 PUSH2 0x4DD JUMP JUMPDEST PUSH0 PUSH2 0xEA JUMP JUMPDEST PUSH4 0x68755A11 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x366 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x42B JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x366 JUMPI PUSH2 0x483 PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x42F JUMP JUMPDEST SWAP3 DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x42B JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x4D3 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x4BF JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x4B4 JUMP JUMPDEST DUP2 DUP2 LT PUSH2 0x4E8 JUMPI POP POP JUMP JUMPDEST PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x4DD JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD DUP1 PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x193AD50F EQ PUSH2 0x1125 JUMPI DUP2 PUSH4 0x2F2770DB EQ PUSH2 0xF5E JUMPI POP DUP1 PUSH4 0x3F819B6F EQ PUSH2 0xF2F JUMPI DUP1 PUSH4 0x44F6FEC7 EQ PUSH2 0xE75 JUMPI DUP1 PUSH4 0x53A72F7E EQ PUSH2 0xD17 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0xC39 JUMPI DUP1 PUSH4 0x6634B753 EQ PUSH2 0xBED JUMPI DUP1 PUSH4 0x673A2A1F EQ PUSH2 0xB4E JUMPI DUP1 PUSH4 0x6C57F5A9 EQ PUSH2 0xB2C JUMPI DUP1 PUSH4 0x78DA80CB EQ PUSH2 0xAEC JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0xA9C JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0xA4C JUMPI DUP1 PUSH4 0x8EEC5D70 EQ PUSH2 0xA2F JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x96F JUMPI DUP1 PUSH4 0xDB035EBC EQ PUSH2 0x947 JUMPI DUP1 PUSH4 0xE9D56E19 EQ PUSH2 0x907 JUMPI DUP1 PUSH4 0xEC888061 EQ PUSH2 0x8ED JUMPI PUSH4 0xFED4CDDA EQ PUSH2 0xE2 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH2 0x180 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x7EC JUMPI PUSH2 0x114 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x126F JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x7EC JUMPI PUSH2 0x134 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x126F JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x7EC JUMPI CALLDATASIZE PUSH1 0x23 DUP5 ADD SLT ISZERO PUSH2 0x7EC JUMPI DUP3 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH2 0x161 DUP3 PUSH2 0x128D JUMP JUMPDEST SWAP4 PUSH2 0x16F PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x11B5 JUMP JUMPDEST DUP3 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP1 PUSH1 0x24 DUP3 SWAP5 PUSH1 0x7 SHL DUP3 ADD ADD SWAP1 CALLDATASIZE DUP3 GT PUSH2 0x7EC JUMPI PUSH1 0x24 ADD SWAP2 JUMPDEST DUP2 DUP4 LT PUSH2 0x869 JUMPI POP POP POP PUSH1 0x64 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x7EC JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x7EC JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH2 0x1C4 DUP3 PUSH2 0x128D JUMP JUMPDEST SWAP2 PUSH2 0x1D2 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x11B5 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x24 PUSH1 0x20 DUP5 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x7EC JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x859 JUMPI POP POP POP PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x40 MLOAD SWAP4 PUSH1 0x60 DUP6 ADD DUP6 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x708 JUMPI PUSH1 0x40 MSTORE PUSH1 0x84 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x7EC JUMPI DUP6 MSTORE PUSH1 0xA4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x7EC JUMPI PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0xC4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x7EC JUMPI PUSH1 0x40 DUP7 ADD MSTORE PUSH2 0x104 CALLDATALOAD SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP4 SUB PUSH2 0x7EC JUMPI PUSH2 0x124 CALLDATALOAD SWAP4 DUP5 ISZERO ISZERO DUP6 SUB PUSH2 0x7EC JUMPI PUSH2 0x144 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x7EC JUMPI PUSH2 0x2F2 PUSH2 0x12A5 JUMP JUMPDEST SWAP6 ISZERO ISZERO PUSH1 0x60 DUP8 ADD MSTORE ISZERO ISZERO DUP6 MSTORE DUP8 MLOAD SWAP2 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH1 0xA0 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA0 DUP6 ADD GT OR PUSH2 0x708 JUMPI SWAP1 DUP3 SWAP2 PUSH1 0xA0 PUSH2 0x3A6 SWAP7 SWAP6 SWAP5 ADD PUSH1 0x40 MSTORE DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP4 DUP5 MSTORE PUSH1 0x40 DUP3 ADD SWAP3 DUP4 MSTORE PUSH1 0x60 DUP3 ADD SWAP1 DUP2 MSTORE PUSH2 0x34C PUSH2 0x131A JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP5 PUSH1 0x40 PUSH1 0x20 DUP8 ADD MSTORE PUSH2 0x375 DUP5 MLOAD PUSH1 0xA0 PUSH1 0x60 DUP10 ADD MSTORE PUSH2 0x100 DUP9 ADD SWAP1 PUSH2 0x1174 JUMP JUMPDEST SWAP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 DUP8 DUP4 SUB ADD PUSH1 0x80 DUP9 ADD MSTORE PUSH2 0x1174 JUMP JUMPDEST SWAP3 MLOAD PUSH1 0xA0 DUP6 ADD MSTORE MLOAD SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 DUP5 DUP3 SUB ADD PUSH1 0xC0 DUP6 ADD MSTORE PUSH1 0x20 DUP1 DUP5 MLOAD SWAP3 DUP4 DUP2 MSTORE ADD SWAP4 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x840 JUMPI POP POP POP SWAP1 PUSH1 0x80 PUSH2 0x42A SWAP3 ADD MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 DUP5 DUP4 SUB ADD PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x1174 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH1 0x40 DUP4 ADD MSTORE SUB SWAP1 PUSH2 0x47A PUSH1 0x1F NOT SWAP3 DUP4 DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x11B5 JUMP JUMPDEST PUSH2 0x4AA PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH1 0x20 DUP1 DUP3 ADD SWAP5 PUSH2 0x491 DUP7 PUSH2 0x13DE JUMP JUMPDEST SWAP1 DUP1 MLOAD SWAP3 DUP4 SWAP2 ADD DUP3 MCOPY ADD PUSH0 DUP2 MSTORE SUB SWAP1 DUP2 ADD DUP5 MSTORE DUP4 PUSH2 0x11B5 JUMP JUMPDEST PUSH2 0x4B6 PUSH2 0x164 CALLDATALOAD PUSH2 0x15E6 JUMP JUMPDEST SWAP1 DUP3 MLOAD ISZERO PUSH2 0x818 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 MLOAD SWAP1 PUSH0 CREATE2 AND SWAP4 DUP5 ISZERO PUSH2 0x7F0 JUMPI PUSH2 0x4E8 PUSH2 0x15B2 JUMP JUMPDEST DUP5 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH1 0xFF NOT DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x1 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x708 JUMPI DUP1 PUSH1 0x1 PUSH2 0x522 SWAP3 ADD PUSH1 0x1 SSTORE PUSH2 0x1477 JUMP JUMPDEST DUP2 SLOAD SWAP1 PUSH1 0x3 SHL SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP6 DUP6 PUSH32 0x83A48FBCFC991335314E74D0496AAB6A1987E992DDC85DDDBCC4D6DD6EF2E9FC PUSH0 DUP1 LOG2 PUSH2 0x579 PUSH2 0x157B JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x7EC JUMPI SWAP1 DUP8 SWAP5 SWAP6 SWAP4 SWAP3 SWAP2 PUSH32 0xEEEC802F00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE PUSH2 0x1A4 DUP7 ADD SWAP1 DUP9 PUSH1 0x4 DUP9 ADD MSTORE PUSH2 0x1A0 PUSH1 0x24 DUP9 ADD MSTORE MLOAD DUP1 SWAP2 MSTORE PUSH2 0x1C4 DUP7 ADD SWAP5 SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x740 JUMPI POP POP POP SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 SWAP5 SWAP4 DUP2 PUSH1 0x40 PUSH2 0x69C SWAP6 PUSH4 0xFFFFFFFF PUSH0 SWAP12 PUSH1 0xE4 CALLDATALOAD PUSH1 0x44 DUP13 ADD MSTORE AND PUSH1 0x64 DUP11 ADD MSTORE DUP11 PUSH1 0x84 DUP11 ADD MSTORE DUP3 DUP2 MLOAD AND PUSH1 0xA4 DUP11 ADD MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0xC4 DUP11 ADD MSTORE ADD MLOAD AND PUSH1 0xE4 DUP8 ADD MSTORE AND PUSH2 0x104 DUP6 ADD MSTORE PUSH2 0x124 DUP5 ADD SWAP1 PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SUB DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x735 JUMPI PUSH2 0x6EE JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x708 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x40 MSTORE PUSH2 0x6E3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP2 DUP1 SWAP9 SWAP8 POP SWAP6 SWAP1 SWAP3 SWAP4 SWAP5 SWAP6 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD AND DUP3 MSTORE PUSH1 0x20 DUP2 ADD MLOAD SWAP1 PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x7BF JUMPI DUP3 PUSH1 0x60 PUSH1 0x80 SWAP3 PUSH1 0x20 SWAP5 DUP6 PUSH1 0x1 SWAP8 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH1 0x60 DUP3 ADD MSTORE ADD SWAP9 ADD SWAP2 ADD SWAP2 DUP10 SWAP7 SWAP8 SWAP6 SWAP5 SWAP4 SWAP3 PUSH2 0x602 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH32 0x741752C200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x4CA249DC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP3 MLOAD DUP6 MSTORE DUP7 SWAP6 POP PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x3E8 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1EF JUMP JUMPDEST PUSH1 0x80 DUP4 CALLDATASIZE SUB SLT PUSH2 0x7EC JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0x880 DUP3 PUSH2 0x1199 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x7EC JUMPI DUP4 MSTORE PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x7EC JUMPI PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x7EC JUMPI PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 DUP6 ADD CALLDATALOAD SWAP3 DUP4 ISZERO ISZERO DUP5 SUB PUSH2 0x7EC JUMPI PUSH1 0x80 SWAP4 PUSH1 0x20 SWAP4 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x18E JUMP JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x20 PUSH2 0x961 PUSH2 0x157B JUMP JUMPDEST PUSH4 0xFFFFFFFF PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x735 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0xA00 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xA21 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0xA28 JUMPI JUMPDEST PUSH2 0xA19 DUP2 DUP4 PUSH2 0x11B5 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x154F JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x9F6 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xA0F JUMP JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x7EC JUMPI PUSH2 0xAE4 PUSH1 0x20 SWAP2 PUSH2 0x14D9 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x20 PUSH1 0xFF PUSH1 0x2 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD SWAP3 DUP4 DUP3 MSTORE PUSH1 0x20 DUP1 SWAP3 ADD SWAP4 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP3 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xBC2 JUMPI PUSH2 0xBBE DUP7 PUSH2 0xBB2 DUP2 DUP11 SUB DUP3 PUSH2 0x11B5 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x121E JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP5 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 SWAP4 DUP4 ADD SWAP4 SWAP1 DUP4 ADD SWAP1 PUSH2 0xB9B JUMP JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x7EC JUMPI PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x40 MLOAD PUSH1 0x4 SLOAD PUSH0 DUP3 PUSH2 0xC5A DUP4 PUSH2 0x12C9 JUMP JUMPDEST SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP1 DUP6 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0xCF7 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xC9C JUMPI JUMPDEST POP PUSH2 0xC88 SWAP3 POP SUB DUP4 PUSH2 0x11B5 JUMP JUMPDEST PUSH2 0xBBE PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1174 JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x4 PUSH0 MSTORE PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0xCDF JUMPI POP POP PUSH2 0xC88 SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0xC7B JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0xCC8 JUMP JUMPDEST PUSH1 0xFF NOT AND DUP6 DUP3 ADD MSTORE PUSH2 0xC88 SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0xC7B SWAP1 POP JUMP JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x24 DUP1 CALLDATALOAD PUSH1 0x1 SWAP3 PUSH1 0x1 SLOAD DUP1 DUP3 LT ISZERO PUSH2 0xE4D JUMPI DUP1 PUSH2 0xD48 DUP5 DUP5 PUSH2 0x146A JUMP JUMPDEST GT PUSH2 0xE0C JUMPI JUMPDEST POP PUSH2 0xD58 DUP3 PUSH2 0x128D JUMP JUMPDEST SWAP3 PUSH2 0xD66 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x11B5 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH2 0xD72 DUP4 PUSH2 0x128D JUMP JUMPDEST SWAP2 PUSH1 0x1F NOT PUSH1 0x20 SWAP4 ADD CALLDATASIZE PUSH1 0x20 DUP8 ADD CALLDATACOPY PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0xD97 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xBBE DUP9 DUP3 PUSH2 0x121E JUMP JUMPDEST PUSH2 0xDA9 PUSH2 0xDA4 DUP3 DUP5 PUSH2 0x146A JUMP JUMPDEST PUSH2 0x1477 JUMP JUMPDEST SWAP1 SLOAD SWAP1 DUP8 MLOAD DUP4 LT ISZERO PUSH2 0xDE0 JUMPI PUSH1 0x3 SHL SHR PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x5 DUP3 SWAP1 SHL DUP8 ADD DUP6 ADD MSTORE DUP7 ADD PUSH2 0xD82 JUMP JUMPDEST DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 SUB SWAP1 DUP2 GT PUSH2 0xE20 JUMPI SWAP1 DUP5 PUSH2 0xD4E JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x4E23D03500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x7EC JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x7EC JUMPI PUSH1 0x55 PUSH1 0xB PUSH2 0xEBD PUSH1 0x20 SWAP4 CALLDATASIZE SWAP1 PUSH1 0x24 DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP2 ADD PUSH2 0x11D8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xEED DUP2 DUP7 DUP1 DUP3 ADD SWAP5 PUSH2 0xED2 DUP7 PUSH2 0x13DE JUMP JUMPDEST SWAP1 DUP1 MLOAD SWAP3 DUP4 SWAP2 ADD DUP3 MCOPY ADD PUSH0 DUP2 MSTORE SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x11B5 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 PUSH2 0xEFB PUSH1 0x24 CALLDATALOAD PUSH2 0x15E6 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH1 0x40 DUP4 ADD MSTORE DUP5 DUP3 ADD MSTORE ADDRESS DUP2 MSTORE ADD PUSH1 0xFF DUP2 MSTORE8 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH2 0xBBE PUSH2 0xF4A PUSH2 0x131A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1174 JUMP JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0xF99 SWAP2 AND PUSH2 0x14D9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x735 JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x1103 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x735 JUMPI PUSH0 SWAP3 PUSH2 0x10CC JUMPI JUMPDEST POP POP ISZERO PUSH2 0x10A4 JUMPI PUSH2 0x1071 PUSH2 0x15B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xFF NOT PUSH1 0x2 SLOAD AND OR PUSH1 0x2 SSTORE PUSH32 0x432ACBFD662DBB5D8B378384A67159B47CA9D0F1B79F97CF64CF8585FA362D50 PUSH0 DUP1 LOG1 STOP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x10FC JUMPI JUMPDEST PUSH2 0x10E3 DUP2 DUP4 PUSH2 0x11B5 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x7EC JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x7EC JUMPI DUP2 DUP1 PUSH2 0x1062 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x10D9 JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x111E SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xA28 JUMPI PUSH2 0xA19 DUP2 DUP4 PUSH2 0x11B5 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x1011 JUMP JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x80 PUSH2 0x113F PUSH2 0x12A5 JUMP JUMPDEST PUSH2 0x1172 PUSH1 0x40 MLOAD DUP1 SWAP3 PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST RETURN JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x708 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x708 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x708 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1202 PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP5 ADD AND ADD DUP5 PUSH2 0x11B5 JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0x7EC JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1245 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1237 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x7EC JUMPI DUP2 PUSH1 0x20 PUSH2 0x128A SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0x11D8 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x708 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x12B2 DUP3 PUSH2 0x1199 JUMP JUMPDEST PUSH0 PUSH1 0x60 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x1310 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x12E3 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x12D8 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH0 DUP3 PUSH1 0x5 SLOAD SWAP2 PUSH2 0x132D DUP4 PUSH2 0x12C9 JUMP JUMPDEST DUP1 DUP4 MSTORE SWAP3 PUSH1 0x20 SWAP1 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x13B9 JUMPI POP PUSH1 0x1 EQ PUSH2 0x135A JUMPI JUMPDEST POP POP PUSH2 0x1358 SWAP3 POP SUB DUP4 PUSH2 0x11B5 JUMP JUMPDEST JUMP JUMPDEST SWAP2 POP SWAP3 PUSH1 0x5 PUSH0 MSTORE PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x13A1 JUMPI POP PUSH2 0x1358 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x134A JUMP JUMPDEST DUP6 SLOAD DUP9 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP8 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x1386 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 SWAP4 POP PUSH2 0x1358 SWAP6 SWAP3 POP PUSH1 0xFF NOT SWAP2 POP AND DUP3 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x134A JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH0 SWAP3 SWAP2 PUSH2 0x13ED DUP3 PUSH2 0x12C9 JUMP JUMPDEST SWAP2 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x1457 JUMPI POP PUSH1 0x1 EQ PUSH2 0x1408 JUMPI POP POP POP JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 POP PUSH1 0x3 PUSH0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP1 PUSH0 SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x1444 JUMPI POP POP POP ADD SWAP1 JUMP JUMPDEST DUP2 DUP2 PUSH1 0x20 SWAP3 SLOAD DUP6 DUP8 ADD MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x1436 JUMP JUMPDEST PUSH1 0xFF NOT AND DUP4 MSTORE POP POP DUP2 ISZERO ISZERO SWAP1 SWAP2 MUL ADD SWAP2 POP JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0xE20 JUMPI JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 LT ISZERO PUSH2 0x14AC JUMPI PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x708 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x7EC JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x7EC JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH4 0xFFFFFFFF DUP2 AND TIMESTAMP LT ISZERO PUSH2 0x15AD JUMPI SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x2 SLOAD AND PUSH2 0x15BE JUMPI JUMP JUMPDEST PUSH32 0x75884CDA00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 CALLER DUP4 MSTORE CHAINID PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x60 DUP2 MSTORE PUSH2 0x1609 DUP2 PUSH2 0x1199 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP16 AND SGT TIMESTAMP 0xA5 SWAP9 0x21 0xCF 0xE8 0xBC CREATE2 DUP12 GASPRICE 0x2E PUSH6 0xEE6E23527AD9 0xE0 TSTORE CALLDATASIZE 0xBD BLOCKHASH PUSH23 0x7F1F181B5064736F6C634300081B00336102C080604052 CALLVALUE PUSH2 0x8E1 JUMPI PUSH2 0x4643 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x1D DUP3 DUP6 PUSH2 0x8F5 JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP3 DUP3 SUB SLT PUSH2 0x8E1 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x8E1 JUMPI DUP3 ADD SWAP2 PUSH1 0xA0 DUP4 DUP4 SUB SLT PUSH2 0x8E1 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH1 0xA0 DUP4 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP5 DUP3 LT OR PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x8E1 JUMPI DUP2 PUSH2 0x81 SWAP2 DUP7 ADD PUSH2 0x918 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x8E1 JUMPI DUP2 PUSH2 0xA2 SWAP2 DUP7 ADD PUSH2 0x918 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP7 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH1 0x60 DUP6 ADD MLOAD SWAP1 SWAP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x8E1 JUMPI DUP2 ADD DUP3 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x8E1 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x710 JUMPI DUP2 PUSH1 0x5 SHL PUSH1 0x40 MLOAD SWAP3 PUSH2 0xFC PUSH1 0x20 DUP4 ADD DUP6 PUSH2 0x8F5 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x20 DUP1 DUP5 ADD SWAP2 DUP4 ADD ADD SWAP2 DUP6 DUP4 GT PUSH2 0x8E1 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x8E5 JUMPI POP POP POP PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT PUSH2 0x8E1 JUMPI PUSH1 0x20 SWAP3 PUSH2 0x144 SWAP3 ADD PUSH2 0x918 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD DUP2 SWAP1 MSTORE SWAP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x8E1 JUMPI DUP3 MLOAD SWAP4 MLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 SWAP6 SWAP2 SWAP1 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD PUSH1 0x31 PUSH1 0xF8 SHL DUP2 MSTORE PUSH2 0x199 DUP4 PUSH2 0x96D JUMP JUMPDEST PUSH2 0x120 MSTORE PUSH2 0x1A6 DUP3 PUSH2 0xAF0 JUMP JUMPDEST PUSH2 0x140 MSTORE DUP3 MLOAD PUSH1 0x20 DUP5 ADD KECCAK256 SWAP2 DUP3 PUSH1 0xE0 MSTORE MLOAD SWAP1 KECCAK256 DUP1 PUSH2 0x100 MSTORE CHAINID PUSH1 0xA0 MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP5 MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 PUSH1 0x80 MSTORE ADDRESS PUSH1 0xC0 MSTORE PUSH2 0x160 DUP3 SWAP1 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x710 JUMPI PUSH1 0x3 SLOAD SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x8D7 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x6F2 JUMPI DUP2 PUSH1 0x1F DUP5 SWAP4 GT PUSH2 0x87F JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0x80A JUMPI PUSH0 SWAP3 PUSH2 0x7FF JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x3 SSTORE JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x710 JUMPI PUSH1 0x4 SLOAD PUSH1 0x1 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x7F5 JUMPI JUMPDEST PUSH1 0x20 DUP3 LT EQ PUSH2 0x6F2 JUMPI PUSH1 0x1F DUP2 GT PUSH2 0x796 JUMPI JUMPDEST POP PUSH1 0x20 PUSH1 0x1F DUP3 GT PUSH1 0x1 EQ PUSH2 0x72F JUMPI DUP2 SWAP3 SWAP4 SWAP5 SWAP6 PUSH0 SWAP3 PUSH2 0x724 JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x4 SSTORE JUMPDEST PUSH2 0x180 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x710 JUMPI PUSH1 0x5 SLOAD SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x706 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x6F2 JUMPI DUP2 PUSH1 0x1F DUP5 SWAP4 GT PUSH2 0x6A4 JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0x61C JUMPI PUSH0 SWAP3 PUSH2 0x611 JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x5 SSTORE JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD PUSH2 0x1A0 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x60 DUP4 ADD MLOAD MLOAD SUB PUSH2 0x602 JUMPI PUSH0 SWAP1 PUSH0 JUMPDEST DUP2 MLOAD SWAP3 PUSH1 0xFF DUP3 AND SWAP4 DUP5 LT ISZERO PUSH2 0x494 JUMPI PUSH1 0x60 DUP6 ADD MLOAD DUP1 MLOAD DUP6 LT ISZERO PUSH2 0x480 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x1FE0 DUP5 PUSH1 0x5 SHL AND ADD ADD MLOAD SWAP1 PUSH7 0x2386F26FC10000 DUP3 LT PUSH2 0x471 JUMPI DUP2 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x3D9 JUMPI SWAP4 DUP1 PUSH2 0x3ED JUMPI POP PUSH2 0x1C0 MSTORE JUMPDEST PUSH1 0xFF DUP1 SWAP2 AND SWAP1 DUP2 EQ PUSH2 0x3D9 JUMPI PUSH1 0x1 ADD PUSH2 0x375 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x3FF JUMPI POP PUSH2 0x1E0 MSTORE PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x411 JUMPI POP PUSH2 0x200 MSTORE PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x3 DUP2 SUB PUSH2 0x423 JUMPI POP PUSH2 0x220 MSTORE PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x4 DUP2 SUB PUSH2 0x435 JUMPI POP PUSH2 0x240 MSTORE PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x5 DUP2 SUB PUSH2 0x447 JUMPI POP PUSH2 0x260 MSTORE PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x6 DUP2 SUB PUSH2 0x459 JUMPI POP PUSH2 0x280 MSTORE PUSH2 0x3C5 JUMP JUMPDEST PUSH1 0x7 EQ PUSH2 0x467 JUMPI JUMPDEST POP PUSH2 0x3C5 JUMP JUMPDEST PUSH2 0x2A0 MSTORE PUSH0 PUSH2 0x461 JUMP JUMPDEST PUSH4 0xBD393583 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 POP SUB PUSH2 0x5F3 JUMPI PUSH1 0x40 MLOAD PUSH2 0x39FC SWAP2 DUP3 PUSH2 0xC27 DUP4 CODECOPY PUSH1 0x80 MLOAD DUP3 PUSH2 0x2806 ADD MSTORE PUSH1 0xA0 MLOAD DUP3 PUSH2 0x28D2 ADD MSTORE PUSH1 0xC0 MLOAD DUP3 PUSH2 0x27D7 ADD MSTORE PUSH1 0xE0 MLOAD DUP3 PUSH2 0x2855 ADD MSTORE PUSH2 0x100 MLOAD DUP3 PUSH2 0x287B ADD MSTORE PUSH2 0x120 MLOAD DUP3 PUSH2 0x1128 ADD MSTORE PUSH2 0x140 MLOAD DUP3 PUSH2 0x1152 ADD MSTORE PUSH2 0x160 MLOAD DUP3 DUP2 DUP2 PUSH2 0x260 ADD MSTORE DUP2 DUP2 PUSH2 0x488 ADD MSTORE DUP2 DUP2 PUSH2 0x65F ADD MSTORE DUP2 DUP2 PUSH2 0xD7E ADD MSTORE DUP2 DUP2 PUSH2 0x10ED ADD MSTORE DUP2 DUP2 PUSH2 0x14AE ADD MSTORE DUP2 DUP2 PUSH2 0x1733 ADD MSTORE DUP2 DUP2 PUSH2 0x19D8 ADD MSTORE DUP2 DUP2 PUSH2 0x2118 ADD MSTORE PUSH2 0x276C ADD MSTORE PUSH2 0x180 MLOAD DUP3 DUP2 DUP2 PUSH2 0x59D ADD MSTORE DUP2 DUP2 PUSH2 0x94A ADD MSTORE DUP2 DUP2 PUSH2 0xA12 ADD MSTORE DUP2 DUP2 PUSH2 0xC7A ADD MSTORE PUSH2 0x1277 ADD MSTORE MLOAD DUP2 PUSH2 0x28FA ADD MSTORE PUSH2 0x1C0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x25D2 ADD MSTORE PUSH2 0x2951 ADD MSTORE PUSH2 0x1E0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x25FF ADD MSTORE PUSH2 0x297E ADD MSTORE PUSH2 0x200 MLOAD DUP2 DUP2 DUP2 PUSH2 0x262C ADD MSTORE PUSH2 0x29B7 ADD MSTORE PUSH2 0x220 MLOAD DUP2 DUP2 DUP2 PUSH2 0x2659 ADD MSTORE PUSH2 0x29F0 ADD MSTORE PUSH2 0x240 MLOAD DUP2 DUP2 DUP2 PUSH2 0x2686 ADD MSTORE PUSH2 0x2A2A ADD MSTORE PUSH2 0x260 MLOAD DUP2 DUP2 DUP2 PUSH2 0x26B3 ADD MSTORE PUSH2 0x2A63 ADD MSTORE PUSH2 0x280 MLOAD DUP2 DUP2 DUP2 PUSH2 0x26E0 ADD MSTORE PUSH2 0x2A9F ADD MSTORE PUSH2 0x2A0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x270B ADD MSTORE PUSH2 0x2AD9 ADD MSTORE RETURN JUMPDEST PUSH4 0x1CE788A7 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0xAAAD13F7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x345 JUMP JUMPDEST PUSH1 0x5 PUSH0 SWAP1 DUP2 MSTORE SWAP4 POP PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 SWAP2 SWAP1 JUMPDEST PUSH1 0x1F NOT DUP5 AND DUP6 LT PUSH2 0x689 JUMPI PUSH1 0x1 SWAP5 POP DUP4 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0x671 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x5 SSTORE PUSH2 0x35A JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x663 JUMP JUMPDEST DUP2 DUP2 ADD MLOAD DUP4 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x648 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP6 LT PUSH2 0x6EB JUMPI JUMPDEST SWAP1 DUP5 SWAP4 SWAP3 SWAP2 JUMPDEST PUSH1 0x1F DUP4 ADD PUSH1 0x5 SHR DUP3 ADD DUP2 LT PUSH2 0x6DD JUMPI POP POP PUSH2 0x32F JUMP JUMPDEST PUSH0 DUP2 SSTORE DUP6 SWAP5 POP PUSH1 0x1 ADD PUSH2 0x6C7 JUMP JUMPDEST POP DUP1 PUSH2 0x6C1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x31B JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x2DF JUMP JUMPDEST PUSH1 0x4 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 JUMPDEST PUSH1 0x1F NOT DUP5 AND DUP2 LT PUSH2 0x77E JUMPI POP PUSH1 0x1 SWAP4 SWAP5 SWAP6 SWAP7 DUP4 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0x766 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x4 SSTORE PUSH2 0x2F4 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x758 JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x20 PUSH1 0x1 DUP2 SWAP3 DUP6 DUP12 ADD MLOAD DUP2 SSTORE ADD SWAP4 ADD SWAP2 ADD PUSH2 0x73A JUMP JUMPDEST PUSH1 0x4 PUSH0 MSTORE PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B PUSH1 0x1F DUP4 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP5 LT PUSH2 0x7EE JUMPI JUMPDEST PUSH1 0x1F DUP4 ADD PUSH1 0x5 SHR DUP3 ADD DUP2 LT PUSH2 0x7E3 JUMPI POP POP PUSH2 0x2C5 JUMP JUMPDEST PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x7CD JUMP JUMPDEST POP DUP1 PUSH2 0x7CD JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x2B3 JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x27D JUMP JUMPDEST PUSH1 0x3 PUSH0 SWAP1 DUP2 MSTORE SWAP4 POP PUSH0 MLOAD PUSH1 0x20 PUSH2 0x4623 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE SWAP2 SWAP1 JUMPDEST PUSH1 0x1F NOT DUP5 AND DUP6 LT PUSH2 0x864 JUMPI PUSH1 0x1 SWAP5 POP DUP4 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0x84C JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x3 SSTORE PUSH2 0x292 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x83E JUMP JUMPDEST DUP2 DUP2 ADD MLOAD DUP4 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x823 JUMP JUMPDEST PUSH1 0x3 PUSH0 MSTORE SWAP1 SWAP2 POP PUSH0 MLOAD PUSH1 0x20 PUSH2 0x4623 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP6 LT PUSH2 0x8D0 JUMPI JUMPDEST SWAP1 DUP5 SWAP4 SWAP3 SWAP2 JUMPDEST PUSH1 0x1F DUP4 ADD PUSH1 0x5 SHR DUP3 ADD DUP2 LT PUSH2 0x8C2 JUMPI POP POP PUSH2 0x267 JUMP JUMPDEST PUSH0 DUP2 SSTORE DUP6 SWAP5 POP PUSH1 0x1 ADD PUSH2 0x8AC JUMP JUMPDEST POP DUP1 PUSH2 0x8A6 JUMP JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x253 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x114 JUMP JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x710 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x8E1 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x710 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x94C PUSH1 0x1F DUP5 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP6 PUSH2 0x8F5 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x8E1 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0x9E3 JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0x9A5 JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0x997 JUMPI POP OR SWAP1 JUMP JUMPDEST DUP3 PUSH0 NOT SWAP2 SUB PUSH1 0x3 SHL SHL AND OR SWAP1 JUMP JUMPDEST PUSH1 0x44 DUP3 PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH4 0x305A27A9 PUSH1 0xE0 SHL DUP4 MSTORE DUP2 PUSH1 0x4 DUP5 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH1 0x24 DUP7 ADD MSTORE ADD DUP5 DUP5 ADD MCOPY PUSH0 DUP3 DUP3 ADD DUP5 ADD MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP2 ADD SUB ADD SWAP1 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x710 JUMPI PUSH0 SLOAD SWAP3 PUSH1 0x1 SWAP4 DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0xAE6 JUMPI JUMPDEST DUP4 DUP3 LT EQ PUSH2 0x6F2 JUMPI PUSH1 0x1F DUP2 GT PUSH2 0xAB3 JUMPI JUMPDEST POP DUP2 PUSH1 0x1F DUP5 GT PUSH1 0x1 EQ PUSH2 0xA51 JUMPI POP SWAP3 DUP3 SWAP4 SWAP2 DUP4 SWAP3 PUSH0 SWAP5 PUSH2 0xA46 JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0xA31 JUMP JUMPDEST SWAP2 SWAP1 DUP4 PUSH1 0x1F NOT DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0xA99 JUMPI POP POP POP LT PUSH2 0xA81 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0xA74 JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0xA63 JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP5 PUSH1 0x1F DUP5 PUSH0 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 PUSH1 0x1F DUP7 ADD PUSH1 0x5 SHR ADD JUMPDEST DUP3 DUP2 LT PUSH2 0xADB JUMPI POP POP PUSH2 0xA16 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0xACD JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xA05 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0xB1A JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0x9A5 JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0x997 JUMPI POP OR SWAP1 JUMP JUMPDEST SWAP2 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x710 JUMPI PUSH1 0x1 SWAP2 DUP3 SLOAD DUP4 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0xC1C JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x6F2 JUMPI PUSH1 0x1F DUP2 GT PUSH2 0xBE9 JUMPI JUMPDEST POP DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0xB89 JUMPI POP DUP2 SWAP3 SWAP4 SWAP5 PUSH0 SWAP3 PUSH2 0xB7E JUMPI JUMPDEST POP POP PUSH0 NOT PUSH1 0x3 DUP4 SWAP1 SHL SHR NOT AND SWAP1 DUP3 SHL OR SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0xB67 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT DUP4 AND SWAP6 DUP5 PUSH0 MSTORE DUP3 PUSH0 KECCAK256 SWAP3 PUSH0 SWAP1 JUMPDEST DUP9 DUP3 LT PUSH2 0xBD2 JUMPI POP POP DUP4 DUP6 SWAP7 SWAP8 LT PUSH2 0xBBA JUMPI JUMPDEST POP POP POP DUP2 SHL ADD SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0xBAD JUMP JUMPDEST DUP1 DUP8 DUP6 SWAP7 DUP3 SWAP5 SWAP7 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP6 ADD SWAP4 ADD SWAP1 PUSH2 0xB9A JUMP JUMPDEST DUP4 PUSH0 MSTORE DUP4 PUSH1 0x1F DUP4 PUSH0 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR ADD JUMPDEST DUP3 DUP2 LT PUSH2 0xC11 JUMPI POP POP PUSH2 0xB4E JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP5 SWAP1 PUSH2 0xC03 JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xB3D JUMP INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH1 0xE0 PUSH0 CALLDATALOAD DUP2 SHR SWAP3 DUP4 PUSH4 0x1FFC9A7 EQ PUSH2 0x1D90 JUMPI POP DUP3 PUSH4 0x6FDDE03 EQ PUSH2 0x1CE1 JUMPI DUP3 PUSH4 0x95EA7B3 EQ PUSH2 0x1C63 JUMPI DUP3 PUSH4 0x16A0B3E0 EQ PUSH2 0x1A2A JUMPI DUP3 PUSH4 0x18160DDD EQ PUSH2 0x1A0E JUMPI DUP3 PUSH4 0x23B872DD EQ PUSH2 0x1966 JUMPI DUP3 PUSH4 0x23DE6651 EQ PUSH2 0x1934 JUMPI DUP3 PUSH4 0x273C1ADF EQ PUSH2 0x1912 JUMPI DUP3 PUSH4 0x30ADF81F EQ PUSH2 0x18D8 JUMPI DUP3 PUSH4 0x313CE567 EQ PUSH2 0x18BD JUMPI DUP3 PUSH4 0x3644E515 EQ PUSH2 0x18A1 JUMPI DUP3 PUSH4 0x53B79BD7 EQ PUSH2 0x16E5 JUMPI DUP3 PUSH4 0x54FD4D50 EQ PUSH2 0x15F5 JUMPI DUP3 PUSH4 0x5687F2B8 EQ PUSH2 0x1596 JUMPI DUP3 PUSH4 0x627CDCB9 EQ PUSH2 0x156D JUMPI DUP3 PUSH4 0x654CF15D EQ PUSH2 0x154B JUMPI DUP3 PUSH4 0x679AEFCE EQ PUSH2 0x1514 JUMPI DUP3 PUSH4 0x70A08231 EQ PUSH2 0x1440 JUMPI DUP3 PUSH4 0x72C98186 EQ PUSH2 0x131F JUMPI DUP3 PUSH4 0x7ECEBE00 EQ PUSH2 0x12DB JUMPI DUP3 PUSH4 0x81FA807C EQ PUSH2 0x121A JUMPI DUP3 PUSH4 0x84B0196E EQ PUSH2 0x1111 JUMPI DUP3 PUSH4 0x8D928AF8 EQ PUSH2 0x10C1 JUMPI DUP3 PUSH4 0x95D89B41 EQ PUSH2 0xFBB JUMPI DUP3 PUSH4 0x984DE9E8 EQ PUSH2 0xDF9 JUMPI DUP3 PUSH4 0xA9059CBB EQ PUSH2 0xCE6 JUMPI DUP3 PUSH4 0xAA6CA808 EQ PUSH2 0xC21 JUMPI DUP3 PUSH4 0xABB1DC44 EQ PUSH2 0x9B8 JUMPI DUP3 PUSH4 0xB156AA0A EQ PUSH2 0x8F1 JUMPI DUP3 PUSH4 0xB677FA56 EQ PUSH2 0x8CF JUMPI DUP3 PUSH4 0xC0BC6F33 EQ PUSH2 0x5F6 JUMPI DUP3 PUSH4 0xCE20ECE7 EQ PUSH2 0x5D6 JUMPI DUP3 PUSH4 0xD335B0CF EQ PUSH2 0x543 JUMPI DUP3 PUSH4 0xD505ACCF EQ PUSH2 0x2D8 JUMPI POP DUP2 PUSH4 0xDD62ED3E EQ PUSH2 0x1E5 JUMPI POP PUSH4 0xF89F27ED EQ PUSH2 0x1AE JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH2 0x1DD SWAP1 PUSH2 0x1CA PUSH2 0x28F8 JUMP JUMPDEST SWAP1 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1FA7 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x1E1 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH2 0x200 PUSH2 0x1E1C JUMP JUMPDEST PUSH1 0x64 PUSH2 0x20A PUSH2 0x1E3F JUMP JUMPDEST SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP1 SWAP8 DUP8 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 PUSH32 0x927DA10500000000000000000000000000000000000000000000000000000000 DUP8 MSTORE ADDRESS SWAP1 DUP8 ADD MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE AND PUSH1 0x44 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2CF JUMPI PUSH0 SWAP2 PUSH2 0x29A JUMPI JUMPDEST PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x2C7 JUMPI JUMPDEST DUP2 PUSH2 0x2B5 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP2 MLOAD SWAP1 PUSH2 0x290 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2A8 JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 SWAP1 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH2 0x2F1 PUSH2 0x1E1C JUMP JUMPDEST SWAP1 PUSH2 0x2FA PUSH2 0x1E3F JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP3 PUSH1 0x84 CALLDATALOAD SWAP1 PUSH1 0x64 CALLDATALOAD PUSH1 0xFF DUP4 AND DUP4 SUB PUSH2 0x1E1 JUMPI DUP1 TIMESTAMP GT PUSH2 0x519 JUMPI PUSH2 0x347 DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH1 0x1 DUP3 ADD SWAP1 SSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x413 PUSH2 0x40A DUP8 MLOAD SWAP6 PUSH1 0x20 DUP8 ADD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP8 DUP9 SWAP6 DUP7 DUP10 AND SWAP8 DUP9 DUP14 DUP5 ADD MSTORE DUP8 DUP13 AND PUSH1 0x60 DUP5 ADD MSTORE DUP14 PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 MSTORE PUSH2 0x3BE DUP2 PUSH2 0x1E92 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 PUSH2 0x3C9 PUSH2 0x27C0 JUMP JUMPDEST SWAP1 DUP11 MLOAD SWAP2 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x2 DUP4 ADD MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0xC4 CALLDATALOAD SWAP2 PUSH1 0x42 PUSH1 0xA4 CALLDATALOAD SWAP3 KECCAK256 PUSH2 0x2ED8 JUMP JUMPDEST SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x2F67 JUMP JUMPDEST AND DUP2 DUP2 SUB PUSH2 0x4EC JUMPI POP POP PUSH0 DUP5 SWAP6 SWAP7 PUSH2 0x484 PUSH1 0x20 SWAP7 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP7 MSTORE DUP6 ADD PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 SWAP5 PUSH1 0x60 DUP3 ADD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP4 MSTORE AND PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2CF JUMPI POP PUSH2 0x4B8 JUMPI STOP JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x4E4 JUMPI JUMPDEST DUP2 PUSH2 0x4D1 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1E1 JUMPI PUSH2 0x4E2 SWAP1 PUSH2 0x2079 JUMP JUMPDEST STOP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x4C4 JUMP JUMPDEST DUP8 PUSH32 0x4B800E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP7 PUSH32 0x6279130200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP1 MLOAD SWAP2 PUSH32 0xB45090F900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2CF JUMPI PUSH0 SWAP2 PUSH2 0x29A JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH6 0x9184E72A000 DUP2 MSTORE RETURN JUMPDEST SWAP2 POP CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP3 MLOAD PUSH2 0x613 DUP2 PUSH2 0x1E92 JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 DUP3 ADD SWAP2 PUSH1 0x60 DUP4 MSTORE DUP6 DUP2 ADD SWAP3 PUSH0 DUP5 MSTORE PUSH1 0x60 DUP3 ADD PUSH0 DUP2 MSTORE PUSH1 0x80 DUP4 ADD SWAP2 PUSH0 DUP4 MSTORE PUSH1 0xA0 DUP5 ADD SWAP4 PUSH0 DUP6 MSTORE PUSH1 0xC0 DUP2 ADD SWAP6 PUSH0 DUP8 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 DUP12 MLOAD PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x87F JUMPI PUSH0 SWAP2 PUSH2 0x8AD JUMPI JUMPDEST POP DUP4 MSTORE DUP12 MLOAD PUSH32 0x7E361BDE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x87F JUMPI PUSH0 SWAP2 PUSH2 0x889 JUMPI JUMPDEST POP DUP5 MSTORE DUP12 MLOAD PUSH32 0xB45090F900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE DUP11 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x87F JUMPI PUSH0 SWAP2 PUSH2 0x852 JUMPI JUMPDEST POP DUP10 MSTORE PUSH2 0x751 PUSH2 0x20CF JUMP JUMPDEST DUP6 MSTORE DUP12 MLOAD SWAP2 DUP3 SWAP2 PUSH32 0xF29486A100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE DUP2 PUSH1 0x24 PUSH2 0x1A0 SWAP5 DUP6 SWAP4 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x848 JUMPI SWAP3 DUP12 SWAP13 SWAP3 PUSH2 0x7E0 SWAP3 PUSH2 0x7F3 SWAP7 SWAP6 PUSH0 SWAP15 SWAP13 SWAP14 SWAP15 SWAP3 PUSH2 0x81B JUMPI JUMPDEST POP POP DUP11 DUP2 ADD MLOAD ISZERO ISZERO DUP9 MSTORE PUSH2 0x120 PUSH2 0x100 SWAP2 DUP3 DUP2 ADD MLOAD ISZERO ISZERO DUP12 MSTORE ADD MLOAD ISZERO ISZERO DUP11 MSTORE DUP4 MLOAD SWAP14 DUP14 DUP16 SWAP15 SWAP4 DUP16 SWAP5 DUP6 MSTORE MLOAD SWAP4 ADD MSTORE DUP13 ADD SWAP1 PUSH2 0x1FA7 JUMP JUMPDEST SWAP2 MLOAD SWAP1 PUSH1 0x1F NOT DUP12 DUP5 SUB ADD SWAP1 DUP12 ADD MSTORE PUSH2 0x1FA7 JUMP JUMPDEST SWAP6 MLOAD PUSH1 0x60 DUP9 ADD MSTORE MLOAD PUSH1 0x80 DUP8 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xA0 DUP7 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xC0 DUP6 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST PUSH2 0x83A SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x841 JUMPI JUMPDEST PUSH2 0x832 DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2482 JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x7AA JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x828 JUMP JUMPDEST DUP13 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 POP DUP11 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x878 JUMPI JUMPDEST PUSH2 0x869 DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1E1 JUMPI MLOAD PUSH0 PUSH2 0x746 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x85F JUMP JUMPDEST DUP14 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x8A5 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x89D DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x228D JUMP JUMPDEST SWAP1 POP PUSH0 PUSH2 0x703 JUMP JUMPDEST PUSH2 0x8C9 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x8C1 DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x25A4 JUMP JUMPDEST PUSH0 PUSH2 0x6C0 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH8 0x9B6E64A8EC60000 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP2 MLOAD SWAP1 PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS SWAP1 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x9AE JUMPI SWAP2 PUSH2 0x1DD SWAP3 PUSH0 SWAP3 PUSH2 0x992 JUMPI JUMPDEST POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1FA7 JUMP JUMPDEST PUSH2 0x9A7 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x8C1 DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x97F JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD SWAP2 PUSH32 0x67E0E07600000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH0 DUP3 PUSH1 0x24 DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xC17 JUMPI PUSH0 SWAP4 PUSH0 SWAP3 PUSH0 SWAP3 PUSH0 SWAP6 PUSH2 0xAED JUMPI JUMPDEST POP SWAP1 PUSH2 0xA65 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP2 MLOAD SWAP7 DUP8 SWAP7 PUSH1 0x80 DUP9 MSTORE PUSH1 0x80 DUP9 ADD SWAP1 PUSH2 0x1FDA JUMP JUMPDEST PUSH1 0x20 DUP8 DUP3 SUB DUP2 DUP10 ADD MSTORE DUP1 DUP1 DUP8 MLOAD SWAP4 DUP5 DUP2 MSTORE ADD SWAP7 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0xAA9 JUMPI DUP10 DUP9 SUB DUP7 DUP12 ADD MSTORE DUP10 DUP1 PUSH2 0x1DD DUP12 PUSH2 0xA9B DUP13 DUP13 PUSH2 0x1FA7 JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x1FA7 JUMP JUMPDEST SWAP2 DUP5 SWAP9 SWAP10 POP PUSH1 0x60 DUP7 SWAP8 SWAP9 PUSH1 0x1 SWAP4 SWAP6 SWAP8 DUP4 SWAP8 MLOAD DUP1 MLOAD PUSH2 0xAC6 DUP2 PUSH2 0x2023 JUMP JUMPDEST DUP4 MSTORE DUP7 DUP6 DUP3 ADD MLOAD AND DUP6 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO DUP10 DUP3 ADD MSTORE ADD SWAP9 ADD SWAP3 ADD DUP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 PUSH2 0xA7D JUMP JUMPDEST SWAP6 POP SWAP4 POP SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP6 RETURNDATACOPY PUSH2 0xB03 DUP2 DUP6 PUSH2 0x1ECA JUMP JUMPDEST DUP4 ADD SWAP3 PUSH1 0x80 DUP2 DUP6 SUB SLT PUSH2 0x1E1 JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x1E1 JUMPI DUP6 PUSH2 0xB30 SWAP2 DUP5 ADD PUSH2 0x2185 JUMP JUMPDEST SWAP2 PUSH1 0x20 SWAP6 DUP7 DUP3 ADD MLOAD DUP6 DUP2 GT PUSH2 0x1E1 JUMPI DUP3 ADD DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x1E1 JUMPI DUP1 MLOAD SWAP1 PUSH2 0xB58 DUP3 PUSH2 0x1EED JUMP JUMPDEST SWAP9 PUSH2 0xB65 DUP7 MLOAD SWAP11 DUP12 PUSH2 0x1ECA JUMP JUMPDEST DUP3 DUP11 MSTORE DUP1 DUP11 ADD DUP2 PUSH1 0x60 DUP1 SWAP6 MUL DUP5 ADD ADD SWAP3 DUP6 DUP5 GT PUSH2 0x1E1 JUMPI DUP3 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0xBC5 JUMPI POP POP POP POP POP DUP3 DUP3 ADD MLOAD DUP6 DUP2 GT PUSH2 0x1E1 JUMPI DUP2 PUSH2 0xBA3 SWAP2 DUP5 ADD PUSH2 0x222C JUMP JUMPDEST SWAP5 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x1E1 JUMPI PUSH2 0xBBA SWAP3 ADD PUSH2 0x222C JUMP JUMPDEST SWAP2 SWAP5 SWAP3 SWAP2 SWAP4 DUP7 PUSH2 0xA48 JUMP JUMPDEST DUP5 DUP3 DUP8 SUB SLT PUSH2 0x1E1 JUMPI DUP8 MLOAD SWAP1 PUSH2 0xBDA DUP3 PUSH2 0x1E62 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1E1 JUMPI DUP3 MSTORE DUP4 DUP4 ADD MLOAD SWAP1 DUP13 DUP3 AND DUP3 SUB PUSH2 0x1E1 JUMPI DUP3 DUP6 SWAP3 DUP4 DUP10 SWAP6 ADD MSTORE PUSH2 0xC08 DUP12 DUP7 ADD PUSH2 0x2079 JUMP JUMPDEST DUP12 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0xB80 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP2 MLOAD SWAP1 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS SWAP1 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x9AE JUMPI SWAP2 PUSH2 0x1DD SWAP3 PUSH0 SWAP3 PUSH2 0xCC2 JUMPI JUMPDEST POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1FDA JUMP JUMPDEST PUSH2 0xCDF SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xCD7 DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2203 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0xCAF JUMP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1E1 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH2 0xD64 SWAP3 PUSH2 0xD06 PUSH2 0x1E1C JUMP JUMPDEST DUP4 MLOAD PUSH32 0xBEABACC800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xDEF JUMPI PUSH2 0xDB5 JUMPI JUMPDEST PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xDE7 JUMPI JUMPDEST DUP2 PUSH2 0xDCE PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1E1 JUMPI PUSH2 0xDE1 PUSH1 0x20 SWAP3 PUSH2 0x2079 JUMP JUMPDEST POP PUSH2 0xDAB JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xDC1 JUMP JUMPDEST POP MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1E1 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1E1 JUMPI PUSH2 0xE29 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x1F05 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1E1 JUMPI PUSH2 0xE3E DUP2 PUSH2 0x2023 JUMP JUMPDEST PUSH2 0xFB4 JUMPI DUP3 JUMPDEST PUSH2 0xE4C PUSH2 0x28F8 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x3 EQ PUSH2 0xF5F JUMPI DUP1 PUSH1 0x4 EQ PUSH2 0xED8 JUMPI DUP1 PUSH1 0x1 EQ PUSH2 0xE95 JUMPI PUSH1 0x2 EQ PUSH2 0xE7F JUMPI PUSH1 0x51 DUP5 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x20 SWAP4 POP SWAP1 PUSH2 0xE8D SWAP2 PUSH2 0x3012 JUMP JUMPDEST SWAP1 JUMPDEST MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 SWAP3 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0xEC5 JUMPI POP PUSH1 0x20 SWAP3 PUSH2 0xEBF SWAP2 PUSH2 0x2B84 JUMP JUMPDEST SWAP1 PUSH2 0xE8F JUMP JUMPDEST PUSH1 0x11 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP3 PUSH0 SWAP2 SWAP1 PUSH8 0xDE0B6B3A7640000 JUMPDEST DUP6 MLOAD DUP5 LT ISZERO PUSH2 0xF23 JUMPI PUSH2 0xF1B PUSH1 0x1 SWAP2 PUSH2 0xF15 PUSH2 0xF03 DUP8 DUP8 PUSH2 0x20BB JUMP JUMPDEST MLOAD PUSH2 0xF0E DUP9 DUP12 PUSH2 0x20BB JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x2BA2 JUMP JUMPDEST SWAP1 PUSH2 0x2C2D JUMP JUMPDEST SWAP4 ADD SWAP3 PUSH2 0xEE7 JUMP JUMPDEST SWAP3 POP SWAP4 POP POP DUP1 ISZERO PUSH2 0xF38 JUMPI PUSH1 0x20 SWAP3 POP SWAP1 PUSH2 0xE8F JUMP JUMPDEST DUP3 PUSH32 0x2654368900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP SWAP3 PUSH0 SWAP2 SWAP1 PUSH8 0xDE0B6B3A7640000 JUMPDEST DUP6 MLOAD DUP5 LT ISZERO PUSH2 0xF23 JUMPI PUSH8 0xDE0B6B3A7640000 PUSH2 0xFAB PUSH1 0x1 SWAP3 PUSH2 0xFA5 PUSH2 0xF93 DUP9 DUP9 PUSH2 0x20BB JUMP JUMPDEST MLOAD PUSH2 0xF9E DUP10 DUP13 PUSH2 0x20BB JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x2E3F JUMP JUMPDEST SWAP1 PUSH2 0x2B71 JUMP JUMPDEST DIV SWAP4 ADD SWAP3 PUSH2 0xF6E JUMP JUMPDEST PUSH1 0x3 PUSH2 0xE44 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP2 MLOAD SWAP2 DUP3 PUSH0 DUP4 SLOAD PUSH2 0xFDD DUP2 PUSH2 0x2041 JUMP JUMPDEST SWAP1 DUP2 DUP5 MSTORE PUSH1 0x20 SWAP6 PUSH1 0x1 SWAP2 DUP8 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x107C JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1020 JUMPI JUMPDEST POP POP POP PUSH2 0x1DD SWAP3 SWAP2 PUSH2 0x1011 SWAP2 SUB DUP6 PUSH2 0x1ECA JUMP JUMPDEST MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1DF7 JUMP JUMPDEST PUSH0 SWAP1 DUP2 MSTORE DUP7 SWAP4 POP SWAP2 SWAP1 PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B JUMPDEST DUP3 DUP5 LT PUSH2 0x1064 JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x1011 PUSH2 0x1DD PUSH2 0xFFE JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x104B JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 DUP3 ADD MSTORE SWAP4 ISZERO ISZERO PUSH1 0x5 SHL DUP7 ADD SWAP1 SWAP4 ADD SWAP4 POP DUP5 SWAP3 POP PUSH2 0x1011 SWAP2 POP PUSH2 0x1DD SWAP1 POP PUSH2 0xFFE JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP2 POP CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH2 0x114C PUSH32 0x0 PUSH2 0x2C4F JUMP JUMPDEST SWAP3 PUSH2 0x1176 PUSH32 0x0 PUSH2 0x2D81 JUMP JUMPDEST DUP2 MLOAD SWAP3 PUSH1 0x20 DUP5 ADD SWAP1 DUP5 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x1207 JUMPI POP SWAP2 PUSH2 0x11E7 SWAP2 PUSH2 0x1DD SWAP5 SWAP4 DUP3 MSTORE PUSH0 DUP5 MSTORE PUSH2 0x11DA DUP3 MLOAD SWAP8 DUP9 SWAP8 PUSH32 0xF00000000000000000000000000000000000000000000000000000000000000 DUP10 MSTORE DUP1 PUSH1 0x20 DUP11 ADD MSTORE DUP9 ADD SWAP1 PUSH2 0x1DF7 JUMP JUMPDEST SWAP2 DUP7 DUP4 SUB SWAP1 DUP8 ADD MSTORE PUSH2 0x1DF7 JUMP JUMPDEST SWAP1 CHAINID PUSH1 0x60 DUP6 ADD MSTORE ADDRESS PUSH1 0x80 DUP6 ADD MSTORE PUSH0 PUSH1 0xA0 DUP6 ADD MSTORE DUP4 DUP3 SUB PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x1FA7 JUMP JUMPDEST PUSH1 0x41 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP2 MLOAD SWAP1 PUSH32 0xF29486A100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 SWAP1 DUP2 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xC17 JUMPI PUSH0 SWAP3 PUSH2 0x12BE JUMPI JUMPDEST POP POP PUSH1 0x60 DUP3 DUP3 ADD MLOAD SWAP2 ADD MLOAD DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH2 0x12D4 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x841 JUMPI PUSH2 0x832 DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP3 DUP1 PUSH2 0x12A7 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x130D PUSH2 0x1E1C JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP3 PUSH1 0x3 NOT DUP5 DUP2 CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP5 GT PUSH2 0x1E1 JUMPI DUP4 CALLDATASIZE SUB ADD SLT PUSH2 0x1E1 JUMPI DUP4 MLOAD SWAP2 PUSH2 0x135E DUP4 PUSH2 0x1E92 JUMP JUMPDEST DUP1 DUP5 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1E1 JUMPI DUP4 MSTORE PUSH1 0x24 DUP2 ADD CALLDATALOAD DUP7 DUP5 ADD MSTORE PUSH1 0x44 DUP2 ADD CALLDATALOAD DUP3 DUP2 GT PUSH2 0x1E1 JUMPI PUSH2 0x1391 SWAP1 DUP6 CALLDATASIZE SWAP2 DUP5 ADD ADD PUSH2 0x1F05 JUMP JUMPDEST DUP6 DUP5 ADD MSTORE PUSH1 0x64 DUP2 ADD CALLDATALOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x84 DUP2 ADD CALLDATALOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA4 DUP2 ADD CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1E1 JUMPI PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC4 DUP2 ADD CALLDATALOAD SWAP1 DUP3 DUP3 GT PUSH2 0x1E1 JUMPI ADD SWAP3 CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0x1E1 JUMPI DUP1 DUP5 ADD CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x1207 JUMPI POP DUP4 MLOAD SWAP1 PUSH2 0x140C DUP7 PUSH1 0x1F NOT PUSH1 0x1F DUP5 ADD AND ADD DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP1 DUP3 MSTORE CALLDATASIZE PUSH1 0x24 DUP3 DUP7 ADD ADD GT PUSH2 0x1E1 JUMPI DUP6 DUP2 PUSH0 SWAP3 PUSH1 0x24 PUSH2 0xE8D SWAP8 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x143B PUSH2 0x2755 JUMP JUMPDEST PUSH2 0x22D1 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP3 PUSH2 0x145E PUSH2 0x1E1C JUMP JUMPDEST PUSH1 0x44 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP6 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP4 PUSH32 0xF7888AEC00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS SWAP1 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xDEF JUMPI PUSH0 SWAP3 PUSH2 0x14E5 JUMPI JUMPDEST POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP DUP3 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x150D JUMPI JUMPDEST PUSH2 0x14FD DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1E1 JUMPI MLOAD SWAP1 DUP4 PUSH2 0x14DE JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x14F3 JUMP JUMPDEST POP CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH32 0x18E79A2000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH8 0x16345785D8A0000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI CALLER PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD SWAP1 SWAP2 SSTORE STOP JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH2 0x15C8 CALLDATASIZE PUSH2 0x1F65 JUMP JUMPDEST SWAP4 SWAP2 SWAP5 PUSH2 0x15D3 PUSH2 0x2755 JUMP JUMPDEST MLOAD SWAP4 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP5 AND SWAP3 LOG3 STOP JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP1 MLOAD PUSH1 0x5 SLOAD SWAP1 SWAP2 DUP3 PUSH0 PUSH2 0x1618 DUP5 PUSH2 0x2041 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 SWAP5 PUSH1 0x1 SWAP1 DUP7 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x16A5 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x164A JUMPI JUMPDEST POP POP PUSH2 0x1DD SWAP3 SWAP2 PUSH2 0x1011 SWAP2 SUB DUP6 PUSH2 0x1ECA JUMP JUMPDEST SWAP1 DUP6 SWAP3 POP PUSH1 0x5 PUSH0 MSTORE PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 SWAP2 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x168D JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x1011 PUSH2 0x1638 JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x1677 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 DUP3 ADD MSTORE SWAP3 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD SWAP1 SWAP3 ADD SWAP3 POP DUP4 SWAP2 POP PUSH2 0x1011 SWAP1 POP PUSH2 0x1638 JUMP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x1703 DUP3 PUSH2 0x1E62 JUMP JUMPDEST PUSH1 0x60 DUP3 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP4 ADD SWAP2 PUSH1 0x60 DUP4 MSTORE DUP2 DUP5 ADD SWAP3 PUSH1 0x60 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 PUSH32 0x0 AND SWAP1 DUP5 MLOAD PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1897 JUMPI SWAP1 PUSH0 SWAP3 SWAP2 DUP4 SWAP2 PUSH2 0x187D JUMPI JUMPDEST POP DUP9 MSTORE PUSH1 0x24 DUP7 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x7E361BDE00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1873 JUMPI PUSH0 SWAP2 PUSH2 0x185A JUMPI JUMPDEST POP DUP2 SWAP6 SWAP3 SWAP6 MSTORE PUSH2 0x17E9 PUSH2 0x28F8 JUMP JUMPDEST DUP5 MSTORE DUP3 MLOAD SWAP5 DUP1 DUP7 MSTORE PUSH1 0x80 DUP7 ADD SWAP3 MLOAD SWAP3 PUSH1 0x60 DUP3 DUP9 ADD MSTORE DUP4 MLOAD DUP1 SWAP2 MSTORE DUP2 PUSH1 0xA0 DUP9 ADD SWAP5 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1844 JUMPI DUP9 DUP1 PUSH2 0x1DD DUP11 DUP11 PUSH2 0x1833 DUP12 DUP12 MLOAD PUSH1 0x1F NOT SWAP4 DUP5 DUP9 DUP5 SUB ADD SWAP1 DUP9 ADD MSTORE PUSH2 0x1FA7 JUMP JUMPDEST SWAP2 MLOAD SWAP1 DUP5 DUP4 SUB ADD PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x1FA7 JUMP JUMPDEST DUP4 MLOAD DUP11 AND DUP7 MSTORE SWAP5 DUP2 ADD SWAP5 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x180D JUMP JUMPDEST PUSH2 0x186E SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x89D DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST PUSH2 0x17DB JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x1891 SWAP2 POP RETURNDATASIZE DUP1 DUP6 DUP4 RETURNDATACOPY PUSH2 0xCD7 DUP2 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP11 PUSH2 0x1798 JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 PUSH2 0xE8D PUSH2 0x27C0 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH8 0x29A2241AF62C0000 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH2 0x15C8 CALLDATASIZE PUSH2 0x1F65 JUMP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH0 PUSH1 0x84 PUSH2 0x197B CALLDATASIZE PUSH2 0x1F65 JUMP JUMPDEST DUP7 MLOAD PUSH32 0x15DACBEA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP9 DUP2 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x24 DUP10 ADD MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP9 ADD MSTORE PUSH1 0x64 DUP8 ADD MSTORE DUP6 SWAP3 DUP4 SWAP2 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xDEF JUMPI PUSH2 0xDB5 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 PUSH2 0xE8D PUSH2 0x20CF JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1E1 JUMPI PUSH2 0x1A5B SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0x1F05 JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD SWAP3 PUSH2 0x1A77 PUSH2 0x1A70 DUP6 PUSH1 0x44 CALLDATALOAD SWAP4 PUSH2 0x20BB JUMP JUMPDEST MLOAD SWAP5 PUSH2 0x25CA JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP2 DUP4 GT ISZERO PUSH2 0x1C5D JUMPI PUSH1 0x2 JUMPDEST DUP1 PUSH1 0x3 EQ PUSH2 0x1BE7 JUMPI DUP1 PUSH1 0x4 EQ PUSH2 0x1B4E JUMPI DUP1 PUSH1 0x1 EQ PUSH2 0x1B0C JUMPI PUSH1 0x2 EQ PUSH2 0x1AB7 JUMPI PUSH1 0x51 DUP6 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 DUP2 ISZERO PUSH2 0x1AE6 JUMPI POP PUSH2 0xE8D SWAP3 PUSH1 0x20 SWAP6 SWAP3 PUSH2 0xF15 SWAP3 PUSH15 0xC097CE7BC90715B34B9F0FFFFFFFFF DIV ADD SWAP1 PUSH2 0x2BA2 JUMP JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP DUP1 SWAP3 SWAP4 SWAP5 SWAP2 POP ISZERO PUSH2 0x1B3B JUMPI POP SWAP3 PUSH2 0xF15 PUSH2 0xE8D SWAP3 PUSH1 0x20 SWAP6 PUSH15 0xC097CE7BC90715B34B9F1000000000 DIV SWAP1 PUSH2 0x2BA2 JUMP JUMPDEST PUSH1 0x12 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP2 SWAP3 SWAP4 SWAP1 DUP1 PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH0 SWAP3 JUMPDEST PUSH2 0x1BA7 JUMPI JUMPDEST POP POP POP DUP2 ISZERO PUSH2 0x1B81 JUMPI POP SWAP3 PUSH2 0xF15 PUSH2 0xE8D SWAP3 PUSH1 0x20 SWAP6 SWAP1 PUSH2 0x2BA2 JUMP JUMPDEST PUSH32 0x2654368900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 SWAP2 SWAP4 PUSH8 0xDE0B6B3A7640000 MLOAD DUP6 LT ISZERO PUSH2 0x1BE1 JUMPI SWAP1 DUP3 PUSH2 0x1BD9 DUP2 SWAP4 PUSH2 0xF15 PUSH2 0x1BCF DUP10 DUP7 PUSH2 0x20BB JUMP JUMPDEST MLOAD PUSH2 0xF0E DUP11 PUSH2 0x2086 JUMP JUMPDEST SWAP6 ADD SWAP3 PUSH2 0x1B61 JUMP JUMPDEST SWAP4 PUSH2 0x1B66 JUMP JUMPDEST POP SWAP2 SWAP3 SWAP4 SWAP1 DUP1 PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH0 SWAP3 JUMPDEST PUSH2 0x1C19 JUMPI POP POP POP DUP2 ISZERO PUSH2 0x1B81 JUMPI POP SWAP3 PUSH2 0xF15 PUSH2 0xE8D SWAP3 PUSH1 0x20 SWAP6 SWAP1 PUSH2 0x2BA2 JUMP JUMPDEST SWAP1 SWAP2 SWAP4 PUSH8 0xDE0B6B3A7640000 MLOAD DUP6 LT ISZERO PUSH2 0x1BE1 JUMPI SWAP1 DUP3 PUSH8 0xDE0B6B3A7640000 PUSH2 0x1C54 DUP3 SWAP5 PUSH2 0xFA5 PUSH2 0x1C4A DUP11 DUP8 PUSH2 0x20BB JUMP JUMPDEST MLOAD PUSH2 0xF9E DUP12 PUSH2 0x2086 JUMP JUMPDEST DIV SWAP6 ADD SWAP3 PUSH2 0x1BFA JUMP JUMPDEST DUP2 PUSH2 0x1A85 JUMP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1E1 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH2 0xD64 SWAP3 PUSH2 0x1C83 PUSH2 0x1E1C JUMP JUMPDEST DUP4 MLOAD PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1E1 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI DUP1 MLOAD PUSH1 0x3 SLOAD SWAP1 SWAP2 DUP3 PUSH0 PUSH2 0x1D04 DUP5 PUSH2 0x2041 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 SWAP5 PUSH1 0x1 SWAP1 DUP7 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x16A5 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1D35 JUMPI POP POP PUSH2 0x1DD SWAP3 SWAP2 PUSH2 0x1011 SWAP2 SUB DUP6 PUSH2 0x1ECA JUMP JUMPDEST SWAP1 DUP6 SWAP3 POP PUSH1 0x3 PUSH0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP2 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x1D78 JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x1011 PUSH2 0x1638 JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x1D62 JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x1E1 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1E1 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x1E1 JUMPI PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP3 EQ DUP2 MSTORE RETURN JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1E1 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1E1 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1E7E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0xE0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1E7E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1E7E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1E7E JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1E7E JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x1E1 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x1F1F DUP2 PUSH2 0x1EED JUMP JUMPDEST SWAP4 PUSH2 0x1F2D PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1ECA JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x1E1 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1F56 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x1F48 JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x1E1 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x1E1 JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x1E1 JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1FC6 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1FB8 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1FF9 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1FEB JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x202D JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x206F JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x205B JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x2050 JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x1E1 JUMPI JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 MLOAD DUP2 LT ISZERO PUSH2 0x20A7 JUMPI PUSH1 0x5 SHL PUSH8 0xDE0B6B3A7640020 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x20A7 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xE4DC2AA400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x217A JUMPI PUSH0 SWAP2 PUSH2 0x214B JUMPI POP SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x2172 JUMPI JUMPDEST DUP2 PUSH2 0x2166 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1E1 JUMPI MLOAD SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2159 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x1E1 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x21A0 DUP2 PUSH2 0x1EED JUMP JUMPDEST SWAP4 PUSH2 0x21AE PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1ECA JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x1E1 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x21D7 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1E1 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x21C9 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x1E1 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1E1 JUMPI PUSH2 0x2229 SWAP3 ADD PUSH2 0x2185 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x1E1 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x2247 DUP2 PUSH2 0x1EED JUMP JUMPDEST SWAP4 PUSH2 0x2255 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x1ECA JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x1E1 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x227E JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x2270 JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SLT PUSH2 0x1E1 JUMPI DUP1 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP2 GT PUSH2 0x1E1 JUMPI DUP2 PUSH2 0x22BA SWAP2 DUP5 ADD PUSH2 0x222C JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x1E1 JUMPI PUSH2 0x2229 SWAP3 ADD PUSH2 0x222C JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 MLOAD PUSH2 0x22E8 PUSH1 0x60 DUP4 ADD SWAP2 DUP3 MLOAD SWAP1 PUSH2 0x20BB JUMP JUMPDEST MLOAD SWAP3 MLOAD SWAP2 PUSH2 0x22FC PUSH1 0x80 DUP3 ADD SWAP4 DUP5 MLOAD SWAP1 PUSH2 0x20BB JUMP JUMPDEST MLOAD SWAP2 DUP2 MLOAD PUSH2 0x2309 DUP2 PUSH2 0x2023 JUMP JUMPDEST PUSH2 0x2312 DUP2 PUSH2 0x2023 JUMP JUMPDEST PUSH2 0x23D1 JUMPI PUSH2 0x232C PUSH2 0x2325 PUSH1 0x20 SWAP3 MLOAD PUSH2 0x25CA JUMP JUMPDEST SWAP5 MLOAD PUSH2 0x25CA JUMP JUMPDEST SWAP2 ADD MLOAD PUSH8 0xDE0B6B3A7640000 SWAP5 DUP6 PUSH2 0x2343 DUP3 PUSH2 0x2B3D JUMP JUMPDEST DIV DUP3 GT PUSH2 0x23A9 JUMPI PUSH2 0x2357 PUSH2 0x235D SWAP3 DUP3 PUSH2 0x2B30 JUMP JUMPDEST SWAP1 PUSH2 0x3012 JUMP JUMPDEST DUP5 DUP5 MUL SWAP4 DUP1 DUP6 DIV DUP7 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2395 JUMPI PUSH2 0x237E PUSH2 0x2384 SWAP3 PUSH2 0x2391 SWAP6 PUSH2 0x2B84 JUMP JUMPDEST SWAP1 PUSH2 0x2BA2 JUMP JUMPDEST DUP4 DUP2 DUP2 SUB SWAP2 LT MUL SWAP1 PUSH2 0x2B71 JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x340A453300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x23EB PUSH2 0x23E4 PUSH1 0x20 SWAP3 SWAP6 SWAP4 SWAP5 SWAP6 MLOAD PUSH2 0x25CA JUMP JUMPDEST SWAP3 MLOAD PUSH2 0x25CA JUMP JUMPDEST SWAP3 ADD MLOAD PUSH8 0xDE0B6B3A7640000 PUSH2 0x2400 DUP6 PUSH2 0x2B3D JUMP JUMPDEST DIV DUP2 GT PUSH2 0x245A JUMPI DUP4 SUB SWAP1 DUP4 DUP3 GT PUSH2 0x2395 JUMPI PUSH2 0x2421 PUSH2 0x237E SWAP3 PUSH2 0x2427 SWAP6 PUSH2 0x3012 JUMP JUMPDEST SWAP3 PUSH2 0x3012 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21F494C589C0000 DUP2 ADD SWAP1 DUP2 GT PUSH2 0x2395 JUMPI PUSH2 0x2229 SWAP2 PUSH2 0x2C2D JUMP JUMPDEST PUSH32 0x64590B9F00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x1A0 SWAP2 DUP2 SWAP1 SUB DUP3 DUP2 SLT PUSH2 0x1E1 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x140 SWAP3 DUP4 DUP6 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP7 DUP6 LT DUP3 DUP7 GT OR PUSH2 0x1E7E JUMPI PUSH1 0x80 SGT PUSH2 0x1E1 JUMPI PUSH2 0x1C0 DUP7 ADD SWAP1 DUP2 GT DUP5 DUP3 LT OR PUSH2 0x1E7E JUMPI PUSH1 0x40 MSTORE PUSH2 0x24D4 DUP2 PUSH2 0x2079 JUMP JUMPDEST DUP4 MSTORE PUSH2 0x24E2 PUSH1 0x20 DUP3 ADD PUSH2 0x2079 JUMP JUMPDEST SWAP3 PUSH2 0x160 SWAP4 DUP5 DUP8 ADD MSTORE PUSH2 0x24F7 PUSH1 0x40 DUP4 ADD PUSH2 0x2079 JUMP JUMPDEST SWAP3 PUSH2 0x180 SWAP4 DUP5 DUP9 ADD MSTORE PUSH2 0x250C PUSH1 0x60 DUP5 ADD PUSH2 0x2079 JUMP JUMPDEST SWAP1 DUP8 ADD MSTORE DUP6 MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1E1 JUMPI PUSH1 0x80 DUP7 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1E1 JUMPI PUSH2 0x259D SWAP5 PUSH2 0x2593 SWAP2 PUSH1 0xA0 DUP10 ADD MSTORE PUSH2 0x2587 PUSH2 0x120 SWAP8 PUSH2 0x257B DUP10 DUP8 ADD PUSH2 0x2079 JUMP JUMPDEST PUSH1 0xC0 DUP12 ADD MSTORE DUP6 ADD PUSH2 0x2079 JUMP JUMPDEST PUSH1 0xE0 DUP10 ADD MSTORE DUP4 ADD PUSH2 0x2079 JUMP JUMPDEST SWAP1 DUP7 ADD MSTORE ADD PUSH2 0x2079 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x1E1 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1E1 JUMPI PUSH2 0x2229 SWAP3 ADD PUSH2 0x222C JUMP JUMPDEST DUP1 PUSH2 0x25F4 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x2621 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x264E JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x3 DUP2 SUB PUSH2 0x267B JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP2 SUB PUSH2 0x26A8 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x5 DUP2 SUB PUSH2 0x26D5 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x6 DUP2 SUB PUSH2 0x2702 JUMPI POP PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x7 SUB PUSH2 0x272D JUMPI PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH32 0xC1AB6DC100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x2794 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND ADDRESS EQ DUP1 PUSH2 0x28CF JUMPI JUMPDEST ISZERO PUSH2 0x2828 JUMPI PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP3 MSTORE PUSH32 0x0 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1E7E JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST POP PUSH32 0x0 CHAINID EQ PUSH2 0x27FF JUMP JUMPDEST PUSH32 0x0 PUSH2 0x2922 DUP2 PUSH2 0x1EED JUMP JUMPDEST SWAP1 PUSH2 0x2930 PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x1ECA JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH2 0x293C DUP2 PUSH2 0x1EED JUMP JUMPDEST PUSH1 0x1F NOT PUSH1 0x20 DUP5 ADD SWAP2 ADD CALLDATASIZE DUP3 CALLDATACOPY DUP3 MLOAD ISZERO PUSH2 0x20A7 JUMPI PUSH32 0x0 SWAP1 MSTORE DUP2 MLOAD PUSH1 0x1 LT ISZERO PUSH2 0x20A7 JUMPI PUSH32 0x0 PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x2 DUP2 GT ISZERO PUSH2 0x2B2C JUMPI DUP2 MLOAD PUSH1 0x2 LT ISZERO PUSH2 0x20A7 JUMPI PUSH32 0x0 PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0x3 DUP2 GT ISZERO PUSH2 0x2B2C JUMPI DUP2 MLOAD PUSH1 0x3 LT ISZERO PUSH2 0x20A7 JUMPI PUSH32 0x0 PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x4 SWAP1 DUP2 DUP2 GT ISZERO PUSH2 0x2B27 JUMPI DUP3 MLOAD DUP3 LT ISZERO PUSH2 0x2B14 JUMPI PUSH32 0x0 PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x5 DUP2 GT ISZERO PUSH2 0x2B27 JUMPI DUP3 MLOAD PUSH1 0x5 LT ISZERO PUSH2 0x2B14 JUMPI PUSH32 0x0 PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x6 DUP2 GT ISZERO PUSH2 0x2B27 JUMPI DUP3 MLOAD PUSH1 0x6 LT ISZERO PUSH2 0x2B14 JUMPI PUSH1 0x7 SWAP1 PUSH32 0x0 PUSH1 0xE0 DUP6 ADD MSTORE GT PUSH2 0x2ACC JUMPI POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x7 LT ISZERO PUSH2 0x2B01 JUMPI POP PUSH32 0x0 PUSH2 0x100 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x32 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x32 DUP3 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP POP SWAP1 JUMP JUMPDEST POP SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x2395 JUMPI JUMP JUMPDEST SWAP1 PUSH8 0x429D069189E0000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2395 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x2710 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2395 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x2395 JUMPI JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2B8E JUMPI DIV SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 SUB PUSH2 0x2BB9 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x2BD4 JUMPI POP POP DUP1 PUSH2 0x2229 SWAP2 PUSH2 0x2C2D JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x2BF8 JUMPI POP POP PUSH2 0x2BF2 DUP2 PUSH2 0x2229 SWAP3 PUSH2 0x2C2D JUMP JUMPDEST DUP1 PUSH2 0x2C2D JUMP JUMPDEST PUSH2 0x2C02 SWAP2 SWAP3 PUSH2 0x308F JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH2 0x2C0E DUP4 PUSH2 0x2B5A JUMP JUMPDEST SWAP2 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH1 0x1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x2395 JUMPI PUSH2 0x2229 SWAP2 PUSH2 0x2B30 JUMP JUMPDEST SWAP1 PUSH2 0x2C37 SWAP2 PUSH2 0x2B71 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x2CA3 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x2C7B JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x2C71 DUP4 PUSH2 0x1EAE JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH32 0xB3512B0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH0 SLOAD SWAP2 PUSH2 0x2CB5 DUP4 PUSH2 0x2041 JUMP JUMPDEST DUP1 DUP4 MSTORE SWAP3 PUSH1 0x20 SWAP1 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x2D3E JUMPI POP PUSH1 0x1 EQ PUSH2 0x2CE0 JUMPI JUMPDEST POP POP PUSH2 0x2229 SWAP3 POP SUB DUP3 PUSH2 0x1ECA JUMP JUMPDEST SWAP2 POP SWAP3 PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x2D26 JUMPI POP PUSH2 0x2229 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x2CD2 JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x2D0B JUMP JUMPDEST SWAP1 POP PUSH1 0x20 SWAP4 POP PUSH2 0x2229 SWAP6 SWAP3 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP2 POP AND DUP3 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x2CD2 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x2DA3 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x2C7B JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x2C71 DUP4 PUSH2 0x1EAE JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD PUSH2 0x2DB8 DUP2 PUSH2 0x2041 JUMP JUMPDEST DUP1 DUP5 MSTORE SWAP4 PUSH1 0x20 SWAP2 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x2D3E JUMPI POP PUSH1 0x1 EQ PUSH2 0x2DE0 JUMPI POP POP PUSH2 0x2229 SWAP3 POP SUB DUP3 PUSH2 0x1ECA JUMP JUMPDEST SWAP2 POP SWAP3 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x2E27 JUMPI POP PUSH2 0x2229 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x2CD2 JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x2E0C JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 DUP1 DUP4 SUB PUSH2 0x2E56 JUMPI POP SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 SWAP1 PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x2E73 JUMPI POP POP DUP1 PUSH2 0x2391 SWAP2 PUSH2 0x2B71 JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x2E97 JUMPI POP PUSH2 0x2E90 DUP3 PUSH2 0x2391 SWAP4 PUSH2 0x2B71 JUMP JUMPDEST DIV DUP1 PUSH2 0x2B71 JUMP JUMPDEST SWAP1 POP PUSH2 0x2EA2 SWAP2 PUSH2 0x308F JUMP JUMPDEST PUSH2 0x2EAB DUP2 PUSH2 0x2B5A JUMP JUMPDEST PUSH1 0x1 PUSH0 NOT SWAP4 DUP5 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 PUSH1 0x1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x2395 JUMPI DUP2 LT ISZERO PUSH2 0x2ED3 JUMPI POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SUB ADD SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP5 GT PUSH2 0x2F5C JUMPI SWAP2 PUSH1 0x20 SWAP4 PUSH1 0x80 SWAP3 PUSH1 0xFF PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND DUP7 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE DUP3 DUP1 MSTORE PUSH1 0x1 GAS STATICCALL ISZERO PUSH2 0x217A JUMPI PUSH0 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x2F52 JUMPI SWAP1 PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 PUSH1 0x1 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP POP POP PUSH0 SWAP2 PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x202D JUMPI DUP1 PUSH2 0x2F79 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x2FA9 JUMPI PUSH32 0xF645EEDF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x2FDD JUMPI POP PUSH32 0xFCE698F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x3 EQ PUSH2 0x2FE7 JUMPI POP JUMP JUMPDEST PUSH32 0xD78BCE0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x3043 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2395 JUMPI PUSH1 0x1 SWAP1 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x2B8E JUMPI PUSH15 0xC097CE7BC90715B34B9F1000000000 SDIV SWAP1 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2B8E JUMPI SDIV SWAP1 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x39B8 JUMPI DUP2 ISZERO PUSH2 0x39B2 JUMPI DUP2 PUSH1 0xFF SHR PUSH2 0x398A JUMPI PUSH24 0xBCE5086492111AEA88F4BB1CA6BCF584181EA8059F76532 DUP2 LT ISZERO PUSH2 0x3962 JUMPI DUP2 PUSH8 0xC7D713B49DA0000 SLT DUP1 PUSH2 0x3951 JUMPI JUMPDEST ISZERO PUSH2 0x35EE JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH15 0xC097CE7BC90715B34B9F1000000000 SWAP1 PUSH2 0x3128 SWAP1 DUP5 MUL DUP3 DUP2 ADD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F68318436F8EA4CB460F000000000 ADD DUP4 MUL PUSH2 0x3085 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV DUP4 DUP6 DUP3 MUL SDIV SWAP2 DUP5 DUP7 DUP5 MUL SDIV SWAP4 DUP6 DUP8 DUP7 MUL SDIV SWAP6 DUP1 DUP9 DUP9 MUL SDIV SWAP8 DUP9 MUL SDIV PUSH1 0xF SWAP1 SDIV SWAP7 PUSH1 0xD SWAP1 SDIV SWAP6 PUSH1 0xB SWAP1 SDIV SWAP5 PUSH1 0x9 SWAP1 SDIV SWAP4 PUSH1 0x7 SWAP1 SDIV SWAP3 PUSH1 0x5 SWAP1 SDIV SWAP2 PUSH1 0x3 SWAP1 SDIV ADD ADD ADD ADD ADD ADD ADD PUSH1 0x1 SHL SWAP2 DUP1 DUP3 DUP2 DUP6 SMOD MUL SDIV SWAP3 SDIV MUL ADD PUSH8 0xDE0B6B3A7640000 SWAP1 JUMPDEST SDIV PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC702BD3A30FC0000 DUP2 DUP2 SGT ISZERO DUP1 PUSH2 0x35DB JUMPI JUMPDEST ISZERO PUSH2 0x35B3 JUMPI DUP2 SWAP1 DUP3 SLT ISZERO DUP1 PUSH2 0x35A0 JUMPI JUMPDEST ISZERO PUSH2 0x3578 JUMPI PUSH0 SWAP2 PUSH0 DUP2 SLT PUSH2 0x3569 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH9 0x6F05B59D3B2000000 DUP2 SLT PUSH2 0x3506 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90FA4A62C4E000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP3 JUMPDEST MUL DUP2 SWAP1 PUSH9 0xAD78EBC5AC62000000 DUP2 SLT ISZERO PUSH2 0x34CD JUMPI JUMPDEST PUSH9 0x56BC75E2D631000000 DUP2 SLT ISZERO PUSH2 0x3493 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B18800000 DUP2 SLT ISZERO PUSH2 0x345B JUMPI JUMPDEST PUSH9 0x15AF1D78B58C400000 DUP2 SLT ISZERO PUSH2 0x3423 JUMPI JUMPDEST PUSH9 0xAD78EBC5AC6200000 DUP2 SLT ISZERO PUSH2 0x33EC JUMPI JUMPDEST DUP3 DUP2 SLT ISZERO PUSH2 0x33B5 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B1880000 DUP2 SLT ISZERO PUSH2 0x337E JUMPI JUMPDEST PUSH9 0x15AF1D78B58C40000 DUP2 SLT ISZERO PUSH2 0x3347 JUMPI JUMPDEST PUSH1 0x2 DUP4 DUP3 DUP1 MUL SDIV SDIV PUSH1 0x3 DUP5 DUP4 DUP4 MUL SDIV SDIV PUSH1 0x4 DUP6 DUP5 DUP4 MUL SDIV SDIV DUP6 PUSH1 0x5 DUP2 DUP7 DUP5 MUL SDIV SDIV PUSH1 0x6 DUP3 DUP8 DUP4 MUL SDIV SDIV PUSH1 0x7 DUP4 DUP9 DUP4 MUL SDIV SDIV SWAP1 PUSH1 0x8 DUP5 DUP10 DUP5 MUL SDIV SDIV SWAP3 PUSH1 0x9 DUP6 DUP11 DUP7 MUL SDIV SDIV SWAP6 PUSH1 0xA DUP7 DUP12 DUP10 MUL SDIV SDIV SWAP8 PUSH1 0xB DUP8 DUP13 DUP12 MUL SDIV SDIV SWAP10 PUSH1 0xC DUP9 DUP14 DUP14 MUL SDIV SDIV SWAP12 ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD MUL SDIV MUL SDIV SWAP1 PUSH0 EQ PUSH2 0x2229 JUMPI PUSH2 0x2229 SWAP1 PUSH2 0x306B JUMP JUMPDEST PUSH9 0x6F5F1775788937937 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C0000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x32C8 JUMP JUMPDEST PUSH9 0x8F00F760A4B2DB55D PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E780000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x32B6 JUMP JUMPDEST PUSH9 0xEBC5FB41746121110 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x32A4 JUMP JUMPDEST PUSH9 0x280E60114EDB805D03 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x329B JUMP JUMPDEST PUSH10 0x127FA27722CC06CC5E2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x3289 JUMP JUMPDEST PUSH10 0x3F1FCE3DA636EA5CF850 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E7800000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x3277 JUMP JUMPDEST PUSH12 0x2DF0AB5A80A22C61AB5A700 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF000000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x3265 JUMP JUMPDEST PUSH15 0x1855144814A7FF805980FF0084000 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E000000 ADD PUSH2 0x3253 JUMP JUMPDEST PUSH9 0x3782DACE9D9000000 DUP2 SLT PUSH2 0x3556 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC87D2531627000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH12 0x1425982CF597CD205CEF7380 SWAP3 PUSH2 0x323E JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP3 PUSH1 0x1 SWAP3 PUSH2 0x323E JUMP JUMPDEST PUSH1 0x1 SWAP3 POP PUSH0 SUB SWAP1 POP PUSH1 0x64 PUSH2 0x31E2 JUMP JUMPDEST PUSH32 0xD4794EFD00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x31D3 JUMP JUMPDEST PUSH32 0xA2F9F7E300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x31C3 JUMP JUMPDEST DUP2 PUSH8 0xDE0B6B3A7640000 SWAP3 PUSH0 SWAP2 DUP5 DUP2 SLT PUSH2 0x393B JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH0 PUSH31 0x1600EF3172E58D2E933EC884FDE10064C63B5372D805E203C0000000000000 DUP3 SLT ISZERO PUSH2 0x3910 JUMPI JUMPDEST PUSH20 0x11798004D755D3C8BC8E03204CF44619E000000 DUP3 SLT ISZERO PUSH2 0x38EF JUMPI JUMPDEST DUP3 MUL SWAP1 DUP1 DUP4 MUL SWAP1 PUSH15 0x1855144814A7FF805980FF0084000 SWAP1 DUP2 DUP4 SLT ISZERO PUSH2 0x38CC JUMPI JUMPDEST POP POP PUSH12 0x2DF0AB5A80A22C61AB5A700 DUP1 DUP3 SLT ISZERO PUSH2 0x38AC JUMPI JUMPDEST POP PUSH10 0x3F1FCE3DA636EA5CF850 DUP1 DUP3 SLT ISZERO PUSH2 0x388C JUMPI JUMPDEST POP PUSH10 0x127FA27722CC06CC5E2 DUP1 DUP3 SLT ISZERO PUSH2 0x386C JUMPI JUMPDEST POP PUSH9 0x280E60114EDB805D03 DUP1 DUP3 SLT ISZERO PUSH2 0x384C JUMPI JUMPDEST POP PUSH9 0xEBC5FB41746121110 DUP1 DUP3 SLT ISZERO PUSH2 0x3835 JUMPI JUMPDEST POP PUSH9 0x8F00F760A4B2DB55D DUP1 DUP3 SLT ISZERO PUSH2 0x3815 JUMPI JUMPDEST POP PUSH9 0x6F5F1775788937937 DUP1 DUP3 SLT ISZERO PUSH2 0x37F5 JUMPI JUMPDEST POP PUSH9 0x6248F33704B286603 DUP1 DUP3 SLT ISZERO PUSH2 0x37D6 JUMPI JUMPDEST POP PUSH9 0x5C548670B9510E7AC DUP1 DUP3 SLT ISZERO PUSH2 0x37B7 JUMPI JUMPDEST POP PUSH2 0x3764 PUSH9 0x56BC75E2D63100000 SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP2 DUP4 ADD SWAP3 ADD MUL PUSH2 0x3085 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV SWAP2 PUSH1 0x3 PUSH1 0x5 PUSH1 0x7 PUSH1 0x9 PUSH1 0xB DUP9 DUP11 DUP10 MUL SDIV SWAP9 DUP1 DUP12 DUP12 MUL SDIV SWAP11 DUP12 MUL SDIV SDIV SWAP9 SDIV SWAP7 SDIV SWAP5 SDIV SWAP3 SDIV ADD ADD ADD ADD ADD PUSH1 0x1 SHL ADD SDIV SWAP1 PUSH0 EQ PUSH2 0x37B2 JUMPI PUSH0 SUB JUMPDEST MUL PUSH2 0x3197 JUMP JUMPDEST PUSH2 0x37AC JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0x56BC75E2D6310000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x3728 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0xAD78EBC5AC620000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x3714 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C40000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x3700 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B1880000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x36EC JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP1 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x36D8 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0xAD78EBC5AC6200000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x36C4 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C400000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x36B0 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B18800000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x369B JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x56BC75E2D631000000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x3686 JUMP JUMPDEST PUSH9 0xAD78EBC5AC62000000 SWAP3 POP PUSH10 0x21E19E0C9BAB2400000 MUL SDIV SWAP2 ADD SWAP1 PUSH0 DUP1 PUSH2 0x366E JUMP JUMPDEST SWAP1 PUSH12 0x1425982CF597CD205CEF7380 PUSH9 0x3782DACE9D9000000 SWAP2 SDIV SWAP2 ADD PUSH2 0x364D JUMP JUMPDEST POP PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP1 SDIV PUSH9 0x6F05B59D3B2000000 PUSH2 0x3630 JUMP JUMPDEST SWAP1 POP PUSH2 0x3947 SWAP2 POP PUSH2 0x306B JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x64 PUSH2 0x3603 JUMP JUMPDEST POP PUSH8 0xF43FC2C04EE0000 DUP3 SLT PUSH2 0x30D5 JUMP JUMPDEST PUSH32 0xD831731100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x22701E000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 RETURNDATACOPY 0xC0 GT DUP11 0xE1 PUSH29 0xF0ADBA7459B5C62781AC22ADB46F73C1467746703BA70B9C43764736F PUSH13 0x634300081B0033C2575A0E9E59 EXTCODECOPY STOP 0xF9 MSIZE 0xF8 0xC9 0x2F SLT 0xDB 0x28 PUSH10 0xC3395A3B0502D05E2516 PREVRANDAO PUSH16 0x71F85B00000000000000000000000000 ","sourceMap":"791:2832:123:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;791:2832:123;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;791:2832:123;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;1095:31;;;;;;;;:::i;:::-;;;;;;;;;;971:4:67;791:2832:123;1347:46:37;923:14:40;;1461:15:42;791:2832:123;1461:15:42;;;791:2832:123;;;1513:35:42;;;1509:106;;1625:42;;791:2832:123;1735:53:42;;791:2832:123;;;;;;;;3534:28:35;791:2832:123;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;791:2832:123;;;;;;;;;;;;;-1:-1:-1;;791:2832:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1156:21:48;791:2832:123;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;791:2832:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1162:26;;791:2832;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;791:2832:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;923:14:40;791:2832:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1625:42:42;791:2832:123;;;;;1735:53:42;791:2832:123;;;;;;;;;;;;;;;-1:-1:-1;791:2832:123;;;;;;;;;;;;;-1:-1:-1;791:2832:123;;-1:-1:-1;791:2832:123;;-1:-1:-1;791:2832:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;791:2832:123;;-1:-1:-1;791:2832:123;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;791:2832:123;;;-1:-1:-1;791:2832:123;;;;;;;;;-1:-1:-1;791:2832:123;;-1:-1:-1;791:2832:123;;-1:-1:-1;791:2832:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;791:2832:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;791:2832:123;;-1:-1:-1;791:2832:123;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;791:2832:123;;1156:21:48;791:2832:123;;-1:-1:-1;791:2832:123;;;;;;;;;-1:-1:-1;791:2832:123;;-1:-1:-1;791:2832:123;;-1:-1:-1;791:2832:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;791:2832:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;791:2832:123;;-1:-1:-1;791:2832:123;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;1509:106:42;1571:33;;;-1:-1:-1;1571:33:42;;-1:-1:-1;1571:33:42;791:2832:123;;;;-1:-1:-1;791:2832:123;;;;;-1:-1:-1;791:2832:123;;-1:-1:-1;791:2832:123;;;;;;;;;-1:-1:-1;;791:2832:123;;;-1:-1:-1;;;;;791:2832:123;;;;;;;;;;:::o;:::-;;;;;;;;;;;;-1:-1:-1;;;;;791:2832:123;;;;;;;;-1:-1:-1;;791:2832:123;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;791:2832:123;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_available_length_bytes":{"entryPoint":4568,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":5455,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_string":{"entryPoint":4719,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_address_dyn":{"entryPoint":4638,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bytes_storage":{"entryPoint":5086,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_string":{"entryPoint":4468,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_struct_LiquidityManagement":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"allocate_and_zero_memory_struct_struct_LiquidityManagement":{"entryPoint":4773,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_array_struct_TokenConfig_dyn":{"entryPoint":4749,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_uint256":{"entryPoint":5226,"id":null,"parameterSlots":2,"returnSlots":1},"copy_array_from_storage_to_memory_string":{"entryPoint":4890,"id":null,"parameterSlots":0,"returnSlots":1},"extract_byte_array_length":{"entryPoint":4809,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":4533,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_11577":{"entryPoint":4505,"id":null,"parameterSlots":1,"returnSlots":0},"fun_computeFinalSalt":{"entryPoint":5606,"id":5189,"parameterSlots":1,"returnSlots":1},"fun_ensureEnabled":{"entryPoint":5554,"id":5144,"parameterSlots":0,"returnSlots":0},"fun_getActionId":{"entryPoint":5337,"id":5487,"parameterSlots":1,"returnSlots":1},"fun_getNewPoolPauseWindowEndTime":{"entryPoint":5499,"id":5891,"parameterSlots":0,"returnSlots":1},"storage_array_index_access_address_dyn":{"entryPoint":5239,"id":null,"parameterSlots":1,"returnSlots":2}},"generatedSources":[],"immutableReferences":{"5427":[{"length":32,"start":5380}],"5654":[{"length":32,"start":1089},{"length":32,"start":1425},{"length":32,"start":1718},{"length":32,"start":2498},{"length":32,"start":2680},{"length":32,"start":4063}],"5820":[{"length":32,"start":2824}],"5822":[{"length":32,"start":2339},{"length":32,"start":5501}]},"linkReferences":{},"object":"60806040526004361015610011575f80fd5b5f358060e01c908163193ad50f146111255781632f2770db14610f5e575080633f819b6f14610f2f57806344f6fec714610e7557806353a72f7e14610d1757806354fd4d5014610c395780636634b75314610bed578063673a2a1f14610b4e5780636c57f5a914610b2c57806378da80cb14610aec578063851c1bb314610a9c5780638d928af814610a4c5780638eec5d7014610a2f578063aaabadc51461096f578063db035ebc14610947578063e9d56e1914610907578063ec888061146108ed5763fed4cdda146100e2575f80fd5b346107ec576101806003193601126107ec5760043567ffffffffffffffff81116107ec5761011490369060040161126f565b60243567ffffffffffffffff81116107ec5761013490369060040161126f565b6044359167ffffffffffffffff83116107ec57366023840112156107ec578260040135906101618261128d565b9361016f60405195866111b5565b82855260208501906024829460071b820101903682116107ec57602401915b8183106108695750505060643567ffffffffffffffff81116107ec57366023820112156107ec578060040135906101c48261128d565b916101d260405193846111b5565b8083526024602084019160051b830101913683116107ec57602401905b8282106108595750505060607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7c3601126107ec57604051936060850185811067ffffffffffffffff8211176107085760405260843573ffffffffffffffffffffffffffffffffffffffff811681036107ec57855260a43573ffffffffffffffffffffffffffffffffffffffff811681036107ec57602086015260c43573ffffffffffffffffffffffffffffffffffffffff811681036107ec576040860152610104359173ffffffffffffffffffffffffffffffffffffffff831683036107ec57610124359384151585036107ec576101443580151581036107ec576102f26112a5565b951515606087015215158552875191604051918260a081011067ffffffffffffffff60a0850111176107085790829160a06103a696959401604052825260208201938452604082019283526060820190815261034c61131a565b608083015260405194859460406020870152610375845160a06060890152610100880190611174565b90517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0878303016080880152611174565b925160a085015251917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08482030160c0850152602080845192838152019301905f5b8181106108405750505090608061042a9201517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08483030160e0850152611174565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166040830152039061047a601f19928381018352826111b5565b6104aa6040519283602080820194610491866113de565b90805192839101825e015f8152039081018452836111b5565b6104b6610164356115e6565b908251156108185773ffffffffffffffffffffffffffffffffffffffff9251905ff5169384156107f0576104e86115b2565b845f525f60205260405f20600160ff1982541617905560015468010000000000000000811015610708578060016105229201600155611477565b81549060031b9073ffffffffffffffffffffffffffffffffffffffff88831b921b191617905560405195857f83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc5f80a261057961157b565b9073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b156107ec57908794959392917feeec802f0000000000000000000000000000000000000000000000000000000086526101a48601908860048801526101a06024880152518091526101c4860194905f5b818110610740575050509473ffffffffffffffffffffffffffffffffffffffff85949381604061069c9563ffffffff5f9b60e43560448c01521660648a01528a60848a01528281511660a48a01528260208201511660c48a015201511660e4870152166101048501526101248401906060809180511515845260208101511515602085015260408101511515604085015201511515910152565b03818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610735576106ee575b602090604051908152f35b67ffffffffffffffff8211610708576020916040526106e3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040513d5f823e3d90fd5b91809897509590929394955173ffffffffffffffffffffffffffffffffffffffff815116825260208101519060028210156107bf5782606060809260209485600197015273ffffffffffffffffffffffffffffffffffffffff604082015116604084015201511515606082015201980191019189969795949392610602565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f80fd5b7f741752c2000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4ca249dc000000000000000000000000000000000000000000000000000000005f5260045ffd5b82518552869550602094850194909201916001016103e8565b81358152602091820191016101ef565b6080833603126107ec576040519061088082611199565b73ffffffffffffffffffffffffffffffffffffffff843581811681036107ec578352602085013560028110156107ec576020840152604085013590811681036107ec576040830152606090818501359283151584036107ec5760809360209382015281520192019161018e565b346107ec575f6003193601126107ec5760206040515f8152f35b346107ec575f6003193601126107ec57602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107ec575f6003193601126107ec57602061096161157b565b63ffffffff60405191168152f35b346107ec575f6003193601126107ec576040517faaabadc500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa908115610735576020925f92610a00575b5060405191168152f35b610a21919250833d8511610a28575b610a1981836111b5565b81019061154f565b90836109f6565b503d610a0f565b346107ec575f6003193601126107ec576020600154604051908152f35b346107ec575f6003193601126107ec57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107ec5760206003193601126107ec576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036107ec57610ae46020916114d9565b604051908152f35b346107ec575f6003193601126107ec57602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346107ec575f6003193601126107ec57602060ff600254166040519015158152f35b346107ec575f6003193601126107ec57604051806001916001549283825260208092019360015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6925f905b828210610bc257610bbe86610bb2818a03826111b5565b6040519182918261121e565b0390f35b845473ffffffffffffffffffffffffffffffffffffffff168752958601959383019390830190610b9b565b346107ec5760206003193601126107ec5760043573ffffffffffffffffffffffffffffffffffffffff81168091036107ec575f525f602052602060ff60405f2054166040519015158152f35b346107ec575f6003193601126107ec576040516004545f82610c5a836112c9565b91828252602093600190856001821691825f14610cf7575050600114610c9c575b50610c88925003836111b5565b610bbe604051928284938452830190611174565b84915060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b905f915b858310610cdf575050610c88935082010185610c7b565b80548389018501528794508693909201918101610cc8565b60ff191685820152610c8895151560051b8501019250879150610c7b9050565b346107ec5760406003193601126107ec576004356024803560019260015480821015610e4d5780610d48848461146a565b11610e0c575b50610d588261128d565b92610d6660405194856111b5565b828452610d728361128d565b91601f19602093013660208701375f5b848110610d975760405180610bbe888261121e565b610da9610da4828461146a565b611477565b9054908751831015610de05760031b1c73ffffffffffffffffffffffffffffffffffffffff16600582901b87018501528601610d82565b847f4e487b71000000000000000000000000000000000000000000000000000000005f5260326004525ffd5b908092508103908111610e20579084610d4e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e23d035000000000000000000000000000000000000000000000000000000005f5260045ffd5b346107ec5760406003193601126107ec5760043567ffffffffffffffff81116107ec57366023820112156107ec576055600b610ebd60209336906024816004013591016111d8565b604051610eed818680820194610ed2866113de565b90805192839101825e015f815203601f1981018352826111b5565b519020610efb6024356115e6565b604051916040830152848201523081520160ff81532073ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346107ec575f6003193601126107ec57610bbe610f4a61131a565b604051918291602083526020830190611174565b346107ec575f6003193601126107ec577fffffffff00000000000000000000000000000000000000000000000000000000610f9991166114d9565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa9081156107355784925f92611103575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610735575f926110cc575b5050156110a4576110716115b2565b600160ff1960025416176002557f432acbfd662dbb5d8b378384a67159b47ca9d0f1b79f97cf64cf8585fa362d505f80a1005b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d83116110fc575b6110e381836111b5565b810103126107ec575180151581036107ec578180611062565b503d6110d9565b606491925061111e90843d8611610a2857610a1981836111b5565b9190611011565b346107ec575f6003193601126107ec57608061113f6112a5565b61117260405180926060809180511515845260208101511515602085015260408101511515604085015201511515910152565bf35b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6080810190811067ffffffffffffffff82111761070857604052565b90601f601f19910116810190811067ffffffffffffffff82111761070857604052565b92919267ffffffffffffffff821161070857604051916112026020601f19601f84011601846111b5565b8294818452818301116107ec578281602093845f960137010152565b60209060206040818301928281528551809452019301915f5b828110611245575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101611237565b9080601f830112156107ec5781602061128a933591016111d8565b90565b67ffffffffffffffff81116107085760051b60200190565b604051906112b282611199565b5f6060838281528260208201528260408201520152565b90600182811c92168015611310575b60208310146112e357565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916112d8565b604051905f826005549161132d836112c9565b808352926020906001908181169081156113b9575060011461135a575b5050611358925003836111b5565b565b91509260055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0935f925b8284106113a157506113589450505081016020015f8061134a565b85548885018301529485019487945092810192611386565b90506020935061135895925060ff1991501682840152151560051b8201015f8061134a565b6003545f92916113ed826112c9565b91600190818116908115611457575060011461140857505050565b909192935060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b905f915b848310611444575050500190565b8181602092548587015201920191611436565b60ff191683525050811515909102019150565b91908201809211610e2057565b6001548110156114ac5760015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f00000000000000000000000000000000000000000000000000000000000000008452166040820152602481526060810181811067ffffffffffffffff8211176107085760405251902090565b908160209103126107ec575173ffffffffffffffffffffffffffffffffffffffff811681036107ec5790565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff81164210156115ad5790565b505f90565b60ff600254166115be57565b7f75884cda000000000000000000000000000000000000000000000000000000005f5260045ffd5b604051602081019133835246604083015260608201526060815261160981611199565b5190209056fea26469706673582212208f161342a59821cfe8bcf58b3a2e65ee6e23527ad9e05d36bd40767f1f181b5064736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD DUP1 PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x193AD50F EQ PUSH2 0x1125 JUMPI DUP2 PUSH4 0x2F2770DB EQ PUSH2 0xF5E JUMPI POP DUP1 PUSH4 0x3F819B6F EQ PUSH2 0xF2F JUMPI DUP1 PUSH4 0x44F6FEC7 EQ PUSH2 0xE75 JUMPI DUP1 PUSH4 0x53A72F7E EQ PUSH2 0xD17 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0xC39 JUMPI DUP1 PUSH4 0x6634B753 EQ PUSH2 0xBED JUMPI DUP1 PUSH4 0x673A2A1F EQ PUSH2 0xB4E JUMPI DUP1 PUSH4 0x6C57F5A9 EQ PUSH2 0xB2C JUMPI DUP1 PUSH4 0x78DA80CB EQ PUSH2 0xAEC JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0xA9C JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0xA4C JUMPI DUP1 PUSH4 0x8EEC5D70 EQ PUSH2 0xA2F JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x96F JUMPI DUP1 PUSH4 0xDB035EBC EQ PUSH2 0x947 JUMPI DUP1 PUSH4 0xE9D56E19 EQ PUSH2 0x907 JUMPI DUP1 PUSH4 0xEC888061 EQ PUSH2 0x8ED JUMPI PUSH4 0xFED4CDDA EQ PUSH2 0xE2 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH2 0x180 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x7EC JUMPI PUSH2 0x114 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x126F JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x7EC JUMPI PUSH2 0x134 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x126F JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT PUSH2 0x7EC JUMPI CALLDATASIZE PUSH1 0x23 DUP5 ADD SLT ISZERO PUSH2 0x7EC JUMPI DUP3 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH2 0x161 DUP3 PUSH2 0x128D JUMP JUMPDEST SWAP4 PUSH2 0x16F PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x11B5 JUMP JUMPDEST DUP3 DUP6 MSTORE PUSH1 0x20 DUP6 ADD SWAP1 PUSH1 0x24 DUP3 SWAP5 PUSH1 0x7 SHL DUP3 ADD ADD SWAP1 CALLDATASIZE DUP3 GT PUSH2 0x7EC JUMPI PUSH1 0x24 ADD SWAP2 JUMPDEST DUP2 DUP4 LT PUSH2 0x869 JUMPI POP POP POP PUSH1 0x64 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x7EC JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x7EC JUMPI DUP1 PUSH1 0x4 ADD CALLDATALOAD SWAP1 PUSH2 0x1C4 DUP3 PUSH2 0x128D JUMP JUMPDEST SWAP2 PUSH2 0x1D2 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x11B5 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x24 PUSH1 0x20 DUP5 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 CALLDATASIZE DUP4 GT PUSH2 0x7EC JUMPI PUSH1 0x24 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x859 JUMPI POP POP POP PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x40 MLOAD SWAP4 PUSH1 0x60 DUP6 ADD DUP6 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x708 JUMPI PUSH1 0x40 MSTORE PUSH1 0x84 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x7EC JUMPI DUP6 MSTORE PUSH1 0xA4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x7EC JUMPI PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0xC4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x7EC JUMPI PUSH1 0x40 DUP7 ADD MSTORE PUSH2 0x104 CALLDATALOAD SWAP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND DUP4 SUB PUSH2 0x7EC JUMPI PUSH2 0x124 CALLDATALOAD SWAP4 DUP5 ISZERO ISZERO DUP6 SUB PUSH2 0x7EC JUMPI PUSH2 0x144 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x7EC JUMPI PUSH2 0x2F2 PUSH2 0x12A5 JUMP JUMPDEST SWAP6 ISZERO ISZERO PUSH1 0x60 DUP8 ADD MSTORE ISZERO ISZERO DUP6 MSTORE DUP8 MLOAD SWAP2 PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH1 0xA0 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0xA0 DUP6 ADD GT OR PUSH2 0x708 JUMPI SWAP1 DUP3 SWAP2 PUSH1 0xA0 PUSH2 0x3A6 SWAP7 SWAP6 SWAP5 ADD PUSH1 0x40 MSTORE DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP4 DUP5 MSTORE PUSH1 0x40 DUP3 ADD SWAP3 DUP4 MSTORE PUSH1 0x60 DUP3 ADD SWAP1 DUP2 MSTORE PUSH2 0x34C PUSH2 0x131A JUMP JUMPDEST PUSH1 0x80 DUP4 ADD MSTORE PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP5 PUSH1 0x40 PUSH1 0x20 DUP8 ADD MSTORE PUSH2 0x375 DUP5 MLOAD PUSH1 0xA0 PUSH1 0x60 DUP10 ADD MSTORE PUSH2 0x100 DUP9 ADD SWAP1 PUSH2 0x1174 JUMP JUMPDEST SWAP1 MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 DUP8 DUP4 SUB ADD PUSH1 0x80 DUP9 ADD MSTORE PUSH2 0x1174 JUMP JUMPDEST SWAP3 MLOAD PUSH1 0xA0 DUP6 ADD MSTORE MLOAD SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 DUP5 DUP3 SUB ADD PUSH1 0xC0 DUP6 ADD MSTORE PUSH1 0x20 DUP1 DUP5 MLOAD SWAP3 DUP4 DUP2 MSTORE ADD SWAP4 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x840 JUMPI POP POP POP SWAP1 PUSH1 0x80 PUSH2 0x42A SWAP3 ADD MLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0 DUP5 DUP4 SUB ADD PUSH1 0xE0 DUP6 ADD MSTORE PUSH2 0x1174 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH1 0x40 DUP4 ADD MSTORE SUB SWAP1 PUSH2 0x47A PUSH1 0x1F NOT SWAP3 DUP4 DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x11B5 JUMP JUMPDEST PUSH2 0x4AA PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH1 0x20 DUP1 DUP3 ADD SWAP5 PUSH2 0x491 DUP7 PUSH2 0x13DE JUMP JUMPDEST SWAP1 DUP1 MLOAD SWAP3 DUP4 SWAP2 ADD DUP3 MCOPY ADD PUSH0 DUP2 MSTORE SUB SWAP1 DUP2 ADD DUP5 MSTORE DUP4 PUSH2 0x11B5 JUMP JUMPDEST PUSH2 0x4B6 PUSH2 0x164 CALLDATALOAD PUSH2 0x15E6 JUMP JUMPDEST SWAP1 DUP3 MLOAD ISZERO PUSH2 0x818 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 MLOAD SWAP1 PUSH0 CREATE2 AND SWAP4 DUP5 ISZERO PUSH2 0x7F0 JUMPI PUSH2 0x4E8 PUSH2 0x15B2 JUMP JUMPDEST DUP5 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH1 0xFF NOT DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x1 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0x708 JUMPI DUP1 PUSH1 0x1 PUSH2 0x522 SWAP3 ADD PUSH1 0x1 SSTORE PUSH2 0x1477 JUMP JUMPDEST DUP2 SLOAD SWAP1 PUSH1 0x3 SHL SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP9 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 SSTORE PUSH1 0x40 MLOAD SWAP6 DUP6 PUSH32 0x83A48FBCFC991335314E74D0496AAB6A1987E992DDC85DDDBCC4D6DD6EF2E9FC PUSH0 DUP1 LOG2 PUSH2 0x579 PUSH2 0x157B JUMP JUMPDEST SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0x7EC JUMPI SWAP1 DUP8 SWAP5 SWAP6 SWAP4 SWAP3 SWAP2 PUSH32 0xEEEC802F00000000000000000000000000000000000000000000000000000000 DUP7 MSTORE PUSH2 0x1A4 DUP7 ADD SWAP1 DUP9 PUSH1 0x4 DUP9 ADD MSTORE PUSH2 0x1A0 PUSH1 0x24 DUP9 ADD MSTORE MLOAD DUP1 SWAP2 MSTORE PUSH2 0x1C4 DUP7 ADD SWAP5 SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x740 JUMPI POP POP POP SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 SWAP5 SWAP4 DUP2 PUSH1 0x40 PUSH2 0x69C SWAP6 PUSH4 0xFFFFFFFF PUSH0 SWAP12 PUSH1 0xE4 CALLDATALOAD PUSH1 0x44 DUP13 ADD MSTORE AND PUSH1 0x64 DUP11 ADD MSTORE DUP11 PUSH1 0x84 DUP11 ADD MSTORE DUP3 DUP2 MLOAD AND PUSH1 0xA4 DUP11 ADD MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0xC4 DUP11 ADD MSTORE ADD MLOAD AND PUSH1 0xE4 DUP8 ADD MSTORE AND PUSH2 0x104 DUP6 ADD MSTORE PUSH2 0x124 DUP5 ADD SWAP1 PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SUB DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x735 JUMPI PUSH2 0x6EE JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x708 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x40 MSTORE PUSH2 0x6E3 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP2 DUP1 SWAP9 SWAP8 POP SWAP6 SWAP1 SWAP3 SWAP4 SWAP5 SWAP6 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD AND DUP3 MSTORE PUSH1 0x20 DUP2 ADD MLOAD SWAP1 PUSH1 0x2 DUP3 LT ISZERO PUSH2 0x7BF JUMPI DUP3 PUSH1 0x60 PUSH1 0x80 SWAP3 PUSH1 0x20 SWAP5 DUP6 PUSH1 0x1 SWAP8 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH1 0x60 DUP3 ADD MSTORE ADD SWAP9 ADD SWAP2 ADD SWAP2 DUP10 SWAP7 SWAP8 SWAP6 SWAP5 SWAP4 SWAP3 PUSH2 0x602 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH32 0x741752C200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x4CA249DC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP3 MLOAD DUP6 MSTORE DUP7 SWAP6 POP PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x3E8 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x1EF JUMP JUMPDEST PUSH1 0x80 DUP4 CALLDATASIZE SUB SLT PUSH2 0x7EC JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0x880 DUP3 PUSH2 0x1199 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x7EC JUMPI DUP4 MSTORE PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x7EC JUMPI PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x7EC JUMPI PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 DUP6 ADD CALLDATALOAD SWAP3 DUP4 ISZERO ISZERO DUP5 SUB PUSH2 0x7EC JUMPI PUSH1 0x80 SWAP4 PUSH1 0x20 SWAP4 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x18E JUMP JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x20 PUSH2 0x961 PUSH2 0x157B JUMP JUMPDEST PUSH4 0xFFFFFFFF PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x735 JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0xA00 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0xA21 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0xA28 JUMPI JUMPDEST PUSH2 0xA19 DUP2 DUP4 PUSH2 0x11B5 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x154F JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x9F6 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0xA0F JUMP JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x4 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 SUB PUSH2 0x7EC JUMPI PUSH2 0xAE4 PUSH1 0x20 SWAP2 PUSH2 0x14D9 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x20 PUSH1 0xFF PUSH1 0x2 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD SWAP3 DUP4 DUP3 MSTORE PUSH1 0x20 DUP1 SWAP3 ADD SWAP4 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP3 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xBC2 JUMPI PUSH2 0xBBE DUP7 PUSH2 0xBB2 DUP2 DUP11 SUB DUP3 PUSH2 0x11B5 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x121E JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP5 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 SWAP4 DUP4 ADD SWAP4 SWAP1 DUP4 ADD SWAP1 PUSH2 0xB9B JUMP JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0x7EC JUMPI PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x40 MLOAD PUSH1 0x4 SLOAD PUSH0 DUP3 PUSH2 0xC5A DUP4 PUSH2 0x12C9 JUMP JUMPDEST SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP1 DUP6 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0xCF7 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xC9C JUMPI JUMPDEST POP PUSH2 0xC88 SWAP3 POP SUB DUP4 PUSH2 0x11B5 JUMP JUMPDEST PUSH2 0xBBE PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1174 JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x4 PUSH0 MSTORE PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0xCDF JUMPI POP POP PUSH2 0xC88 SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0xC7B JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0xCC8 JUMP JUMPDEST PUSH1 0xFF NOT AND DUP6 DUP3 ADD MSTORE PUSH2 0xC88 SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0xC7B SWAP1 POP JUMP JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x24 DUP1 CALLDATALOAD PUSH1 0x1 SWAP3 PUSH1 0x1 SLOAD DUP1 DUP3 LT ISZERO PUSH2 0xE4D JUMPI DUP1 PUSH2 0xD48 DUP5 DUP5 PUSH2 0x146A JUMP JUMPDEST GT PUSH2 0xE0C JUMPI JUMPDEST POP PUSH2 0xD58 DUP3 PUSH2 0x128D JUMP JUMPDEST SWAP3 PUSH2 0xD66 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x11B5 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH2 0xD72 DUP4 PUSH2 0x128D JUMP JUMPDEST SWAP2 PUSH1 0x1F NOT PUSH1 0x20 SWAP4 ADD CALLDATASIZE PUSH1 0x20 DUP8 ADD CALLDATACOPY PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0xD97 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xBBE DUP9 DUP3 PUSH2 0x121E JUMP JUMPDEST PUSH2 0xDA9 PUSH2 0xDA4 DUP3 DUP5 PUSH2 0x146A JUMP JUMPDEST PUSH2 0x1477 JUMP JUMPDEST SWAP1 SLOAD SWAP1 DUP8 MLOAD DUP4 LT ISZERO PUSH2 0xDE0 JUMPI PUSH1 0x3 SHL SHR PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x5 DUP3 SWAP1 SHL DUP8 ADD DUP6 ADD MSTORE DUP7 ADD PUSH2 0xD82 JUMP JUMPDEST DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 SUB SWAP1 DUP2 GT PUSH2 0xE20 JUMPI SWAP1 DUP5 PUSH2 0xD4E JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x4E23D03500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x7EC JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0x7EC JUMPI PUSH1 0x55 PUSH1 0xB PUSH2 0xEBD PUSH1 0x20 SWAP4 CALLDATASIZE SWAP1 PUSH1 0x24 DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP2 ADD PUSH2 0x11D8 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0xEED DUP2 DUP7 DUP1 DUP3 ADD SWAP5 PUSH2 0xED2 DUP7 PUSH2 0x13DE JUMP JUMPDEST SWAP1 DUP1 MLOAD SWAP3 DUP4 SWAP2 ADD DUP3 MCOPY ADD PUSH0 DUP2 MSTORE SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x11B5 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 PUSH2 0xEFB PUSH1 0x24 CALLDATALOAD PUSH2 0x15E6 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH1 0x40 DUP4 ADD MSTORE DUP5 DUP3 ADD MSTORE ADDRESS DUP2 MSTORE ADD PUSH1 0xFF DUP2 MSTORE8 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH2 0xBBE PUSH2 0xF4A PUSH2 0x131A JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x1174 JUMP JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0xF99 SWAP2 AND PUSH2 0x14D9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x735 JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x1103 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x735 JUMPI PUSH0 SWAP3 PUSH2 0x10CC JUMPI JUMPDEST POP POP ISZERO PUSH2 0x10A4 JUMPI PUSH2 0x1071 PUSH2 0x15B2 JUMP JUMPDEST PUSH1 0x1 PUSH1 0xFF NOT PUSH1 0x2 SLOAD AND OR PUSH1 0x2 SSTORE PUSH32 0x432ACBFD662DBB5D8B378384A67159B47CA9D0F1B79F97CF64CF8585FA362D50 PUSH0 DUP1 LOG1 STOP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x10FC JUMPI JUMPDEST PUSH2 0x10E3 DUP2 DUP4 PUSH2 0x11B5 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x7EC JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0x7EC JUMPI DUP2 DUP1 PUSH2 0x1062 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x10D9 JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x111E SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0xA28 JUMPI PUSH2 0xA19 DUP2 DUP4 PUSH2 0x11B5 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x1011 JUMP JUMPDEST CALLVALUE PUSH2 0x7EC JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x7EC JUMPI PUSH1 0x80 PUSH2 0x113F PUSH2 0x12A5 JUMP JUMPDEST PUSH2 0x1172 PUSH1 0x40 MLOAD DUP1 SWAP3 PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST RETURN JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x708 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x708 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x708 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1202 PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP5 ADD AND ADD DUP5 PUSH2 0x11B5 JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0x7EC JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x1245 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1237 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x7EC JUMPI DUP2 PUSH1 0x20 PUSH2 0x128A SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0x11D8 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x708 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x12B2 DUP3 PUSH2 0x1199 JUMP JUMPDEST PUSH0 PUSH1 0x60 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x1310 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x12E3 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x12D8 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH0 DUP3 PUSH1 0x5 SLOAD SWAP2 PUSH2 0x132D DUP4 PUSH2 0x12C9 JUMP JUMPDEST DUP1 DUP4 MSTORE SWAP3 PUSH1 0x20 SWAP1 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x13B9 JUMPI POP PUSH1 0x1 EQ PUSH2 0x135A JUMPI JUMPDEST POP POP PUSH2 0x1358 SWAP3 POP SUB DUP4 PUSH2 0x11B5 JUMP JUMPDEST JUMP JUMPDEST SWAP2 POP SWAP3 PUSH1 0x5 PUSH0 MSTORE PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x13A1 JUMPI POP PUSH2 0x1358 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x134A JUMP JUMPDEST DUP6 SLOAD DUP9 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP8 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x1386 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 SWAP4 POP PUSH2 0x1358 SWAP6 SWAP3 POP PUSH1 0xFF NOT SWAP2 POP AND DUP3 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x134A JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH0 SWAP3 SWAP2 PUSH2 0x13ED DUP3 PUSH2 0x12C9 JUMP JUMPDEST SWAP2 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x1457 JUMPI POP PUSH1 0x1 EQ PUSH2 0x1408 JUMPI POP POP POP JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 POP PUSH1 0x3 PUSH0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP1 PUSH0 SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x1444 JUMPI POP POP POP ADD SWAP1 JUMP JUMPDEST DUP2 DUP2 PUSH1 0x20 SWAP3 SLOAD DUP6 DUP8 ADD MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x1436 JUMP JUMPDEST PUSH1 0xFF NOT AND DUP4 MSTORE POP POP DUP2 ISZERO ISZERO SWAP1 SWAP2 MUL ADD SWAP2 POP JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0xE20 JUMPI JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 LT ISZERO PUSH2 0x14AC JUMPI PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH1 0x60 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x708 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x7EC JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x7EC JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH4 0xFFFFFFFF DUP2 AND TIMESTAMP LT ISZERO PUSH2 0x15AD JUMPI SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x2 SLOAD AND PUSH2 0x15BE JUMPI JUMP JUMPDEST PUSH32 0x75884CDA00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 CALLER DUP4 MSTORE CHAINID PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x60 DUP2 MSTORE PUSH2 0x1609 DUP2 PUSH2 0x1199 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP16 AND SGT TIMESTAMP 0xA5 SWAP9 0x21 0xCF 0xE8 0xBC CREATE2 DUP12 GASPRICE 0x2E PUSH6 0xEE6E23527AD9 0xE0 TSTORE CALLDATASIZE 0xBD BLOCKHASH PUSH23 0x7F1F181B5064736F6C634300081B003300000000000000 ","sourceMap":"791:2832:123:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1473:26:67;791:2832:123;1473:26:67;;;791:2832:123;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;791:2832:123;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;2711:34;;791:2832;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3029:261;;791:2832;;;;3029:261;;791:2832;;;;3029:261;;791:2832;;;;;:::i;:::-;;3029:261;;791:2832;;;3001:331;;;791:2832;;3001:331;;791:2832;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3029:261;;;;791:2832;;3029:261;;791:2832;;;;;;;;;;;:::i;:::-;;1019:6:40;791:2832:123;;;;;3001:331;;;-1:-1:-1;;3001:331:123;;;;;;;;:::i;:::-;6297:48:35;791:2832:123;;6297:48:35;;791:2832:123;6297:48:35;;;791:2832:123;;;;:::i;:::-;;;;3001:331;;;;791:2832;;;;;;6297:48:35;;;;;;;;:::i;:::-;6375:23;791:2832:123;;6375:23:35;:::i;:::-;791:2832:123;;;1662:20:108;1658:80;;791:2832:123;1790:100:108;;;791:2832:123;1790:100:108;791:2832:123;1903:18:108;;;1899:81;;5469:200:35;;:::i;:::-;791:2832:123;;;;;;;;;;-1:-1:-1;;791:2832:123;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;6314:13:35;791:2832:123;;;;;;;;;;;;;;;5645:17:35;;;791:2832:123;5645:17:35;;6937:30;;:::i;:::-;1019:6:40;791:2832:123;1019:6:40;791:2832:123;6831:267:35;;;;;;;;;;;791:2832:123;6831:267:35;;791:2832:123;;;6831:267:35;;791:2832:123;6831:267:35;;791:2832:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6831:267:35;1019:6:40;;791:2832:123;1019:6:40;791:2832:123;6831:267:35;;;;;;;;791:2832:123;;;;;;;;;6831:267:35;791:2832:123;;;;;;;;;6831:267:35;;791:2832:123;;;;;;;;;;6831:267:35;791:2832:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6831:267:35;791:2832:123;;;1899:81:108;1944:25;791:2832:123;1944:25:108;791:2832:123;;1944:25:108;1658:80;1705:22;791:2832:123;1705:22:108;791:2832:123;;1705:22:108;791:2832:123;;;;;;;-1:-1:-1;791:2832:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;791:2832:123;;;;;;;;;;;;;;;;;-1:-1:-1;;791:2832:123;;;;;;;;;2369:24:42;791:2832:123;;;;;;;;;-1:-1:-1;;791:2832:123;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;791:2832:123;;;;;;;;1473:26:67;;791:2832:123;1473:26:67;791:2832:123;;;1019:6:40;791:2832:123;;1473:26:67;;;;;;;;;791:2832:123;1473:26:67;;;791:2832:123;;;;;;;;;1473:26:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;791:2832:123;;;;;-1:-1:-1;;791:2832:123;;;;;;3846:6:35;791:2832:123;;;;;;;;;;;;-1:-1:-1;;791:2832:123;;;;;;;;;1019:6:40;791:2832:123;;;;;;;;;-1:-1:-1;;791:2832:123;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;791:2832:123;;;;;;;;;2073:20:42;791:2832:123;;;;;;;;;-1:-1:-1;;791:2832:123;;;;;;;4726:9:35;791:2832:123;;;;;;;;;;;;;;;-1:-1:-1;;791:2832:123;;;;;;;;3987:6:35;791:2832:123;3987:6:35;791:2832:123;;;;;;;;;;3987:6:35;791:2832:123;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;791:2832:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;791:2832:123;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;791:2832:123;;;;;;;;;;;-1:-1:-1;;791:2832:123;;;;;;;;;;;;;;;-1:-1:-1;791:2832:123;;-1:-1:-1;791:2832:123;;-1:-1:-1;791:2832:123;;;;;;-1:-1:-1;;791:2832:123;;;;;;;;;;;;;;4199:15:35;;;;4195:71;;4386:13;;;;;:::i;:::-;4413:12;4409:65;;791:2832:123;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;-1:-1:-1;;791:2832:123;;;;;;;;;4542:9:35;;;;;;791:2832:123;;;;;;;:::i;4553:3:35:-;4583:17;4590:9;;;;:::i;:::-;4583:17;:::i;:::-;791:2832:123;;;;;;;;;;;;;;;;;;;;;;;;;;4527:13:35;;791:2832:123;;;;;;;;;;4409:65:35;791:2832:123;;;;;;;;;;;4409:65:35;;;;791:2832:123;;;;;;;;;;4195:71:35;4237:18;791:2832:123;4237:18:35;791:2832:123;;4237:18:35;791:2832:123;;;;;-1:-1:-1;;791:2832:123;;;;;;;;;;;;;;;;;;;;2766:1598:108;;791:2832:123;;;;;;;;;;;;;:::i;:::-;;;4927:48:35;;;;;;791:2832:123;;;;:::i;:::-;;;;;;;;;;;;;;4927:48:35;-1:-1:-1;;4927:48:35;;;;;;:::i;:::-;791:2832:123;5012:23:35;;5065;791:2832:123;;5065:23:35;:::i;:::-;791:2832:123;2766:1598:108;;791:2832:123;2766:1598:108;;;;;;;2342:4;2766:1598;;;;;;;791:2832:123;;;;;;;;;;;;;-1:-1:-1;;791:2832:123;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;791:2832:123;;;;;1774:7:37;1762:20;1774:7;;1762:20;:::i;:::-;791:2832:123;;;;1231:22:40;;;:6;;;791:2832:123;1231:6:40;;;791:2832:123;1231:22:40;;;;;;;;;791:2832:123;1231:22:40;;;791:2832:123;;;;;;1231:64:40;;;;;791:2832:123;1231:64:40;;791:2832:123;1231:64:40;;791:2832:123;1820:10:37;791:2832:123;;;;1289:4:40;791:2832:123;;;;;1231:64:40;;;;;;;791:2832:123;1231:64:40;;;791:2832:123;1797:34:37;;;1793:90;;5207:134:35;;:::i;:::-;5297:4;-1:-1:-1;;5285:16:35;791:2832:123;;;5285:16:35;791:2832:123;5317:17:35;791:2832:123;5317:17:35;;791:2832:123;1793:90:37;1854:18;791:2832:123;1854:18:37;791:2832:123;;1854:18:37;1231:64:40;;;;;;;;;;;;;;;;:::i;:::-;;;791:2832:123;;;;;;;;;;;;1231:64:40;;;;;;;;;:22;791:2832:123;1231:22:40;;;;;;;;;;;;;;;:::i;:::-;;;;;791:2832:123;;;;;-1:-1:-1;;791:2832:123;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;791:2832:123;;;;;;;;;;;;;;;;;-1:-1:-1;791:2832:123;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;791:2832:123;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;-1:-1:-1;;791:2832:123;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;791:2832:123;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;791:2832:123;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;791:2832:123;1315:12;791:2832;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;;1315:12;-1:-1:-1;791:2832:123;;;-1:-1:-1;791:2832:123;;;;;;;-1:-1:-1;791:2832:123;;-1:-1:-1;;;791:2832:123;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;791:2832:123;;;;;;;;;;;;;;;;-1:-1:-1;;791:2832:123;;;;;;;;;1315:12;791:2832;;;;;;;;;4944:13:35;791:2832:123;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;4944:13:35;-1:-1:-1;791:2832:123;;;-1:-1:-1;791:2832:123;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;791:2832:123;;;-1:-1:-1;;791:2832:123;;;;;;;;-1:-1:-1;791:2832:123:o;:::-;;;;;;;;;;:::o;:::-;4172:6:35;791:2832:123;;;;;;4172:6:35;-1:-1:-1;791:2832:123;;;;-1:-1:-1;791:2832:123;:::o;:::-;;;;;;;;;;1931:430:37;791:2832:123;;;2303:50:37;;;2320:22;;791:2832:123;;;;;;;2303:50:37;;;791:2832:123;;;;;;;;;;;;;;;2293:61:37;;1931:430;:::o;791:2832:123:-;;;;;;;;;;;;;;;;;;:::o;2922:332:42:-;3191:24;791:2832:123;;;3173:15:42;:42;791:2832:123;;;2922:332:42;:::o;3172:75::-;;-1:-1:-1;2922:332:42;:::o;5347:116:35:-;791:2832:123;4726:9:35;791:2832:123;;5397:60:35;;5347:116::o;5397:60::-;5436:10;-1:-1:-1;5436:10:35;;-1:-1:-1;5436:10:35;6001:159;791:2832:123;;6109:43:35;;;6120:10;;791:2832:123;;6132:13:35;791:2832:123;;;;;;;;;6109:43:35;;;;;:::i;:::-;791:2832:123;6099:54:35;;6001:159;:::o"},"methodIdentifiers":{"create(string,string,(address,uint8,address,bool)[],uint256[],(address,address,address),uint256,address,bool,bool,bytes32)":"fed4cdda","disable()":"2f2770db","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getDefaultLiquidityManagement()":"193ad50f","getDefaultPoolHooksContract()":"ec888061","getDeploymentAddress(bytes,bytes32)":"44f6fec7","getNewPoolPauseWindowEndTime()":"db035ebc","getOriginalPauseWindowEndTime()":"e9d56e19","getPauseWindowDuration()":"78da80cb","getPoolCount()":"8eec5d70","getPoolVersion()":"3f819b6f","getPools()":"673a2a1f","getPoolsInRange(uint256,uint256)":"53a72f7e","getVault()":"8d928af8","isDisabled()":"6c57f5a9","isPoolFromFactory(address)":"6634b753","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowDuration\",\"type\":\"uint32\"},{\"internalType\":\"string\",\"name\":\"factoryVersion\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"poolVersion\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"Create2EmptyBytecode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Create2FailedDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"Create2InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Disabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolPauseWindowDurationOverflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StandardPoolWithCreator\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"FactoryDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokens\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"normalizedWeights\",\"type\":\"uint256[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"pauseManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"swapFeeManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"poolCreator\",\"type\":\"address\"}],\"internalType\":\"struct PoolRoleAccounts\",\"name\":\"roleAccounts\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"poolHooksContract\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDefaultLiquidityManagement\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDefaultPoolHooksContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"constructorArgs\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"getDeploymentAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNewPoolPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOriginalPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPools\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"getPoolsInRange\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is the most general factory, which allows up to eight tokens and arbitrary weights.\",\"errors\":{\"Create2EmptyBytecode()\":[{\"details\":\"There's no code to deploy.\"}],\"Create2FailedDeployment()\":[{\"details\":\"The deployment failed.\"}],\"Create2InsufficientBalance(uint256,uint256)\":[{\"details\":\"Not enough balance for performing a CREATE2 deploy.\"}]},\"events\":{\"PoolCreated(address)\":{\"params\":{\"pool\":\"The address of the new pool\"}}},\"kind\":\"dev\",\"methods\":{\"create(string,string,(address,uint8,address,bool)[],uint256[],(address,address,address),uint256,address,bool,bool,bytes32)\":{\"details\":\"Tokens must be sorted for pool registration.\",\"params\":{\"disableUnbalancedLiquidity\":\"If true, only proportional add and remove liquidity are accepted\",\"enableDonation\":\"If true, the pool will support the donation add liquidity mechanism\",\"name\":\"The name of the pool\",\"normalizedWeights\":\"The pool weights (must add to FixedPoint.ONE)\",\"poolHooksContract\":\"Contract that implements the hooks for the pool\",\"roleAccounts\":\"Addresses the Vault will allow to change certain pool settings\",\"salt\":\"The salt value that will be passed to create2 deployment\",\"swapFeePercentage\":\"Initial swap fee percentage\",\"symbol\":\"The symbol of the pool\",\"tokens\":\"An array of descriptors for the tokens the pool will manage\"}},\"disable()\":{\"details\":\"Existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getDefaultLiquidityManagement()\":{\"details\":\"Users can call this to create a structure with all false arguments, then set the ones they need to true.\",\"returns\":{\"liquidityManagement\":\"Liquidity management flags, all initialized to false\"}},\"getDeploymentAddress(bytes,bytes32)\":{\"params\":{\"constructorArgs\":\"The arguments used to create the pool\",\"salt\":\"The salt used to deploy the pool\"},\"returns\":{\"_0\":\"The predicted address of the pool, given the salt\"}},\"getNewPoolPauseWindowEndTime()\":{\"details\":\"We intend for all pools deployed by this factory to have the same pause window end time (i.e., after this date, all future pools will be unpausable). This function will return `_poolsPauseWindowEndTime` until it passes, after which it will return 0.\",\"returns\":{\"_0\":\"pauseWindowEndTime The resolved pause window end time (0 indicating it's no longer pausable)\"}},\"getOriginalPauseWindowEndTime()\":{\"returns\":{\"_0\":\"pauseWindowEndTime The end time as a timestamp\"}},\"getPauseWindowDuration()\":{\"returns\":{\"_0\":\"pauseWindowDuration The duration in seconds\"}},\"getPoolCount()\":{\"details\":\"This can then be used to \\\"paginate\\\" calls to `getPools` to control gas costs.\",\"returns\":{\"_0\":\"The number of pools deployed by this factory\"}},\"getPoolVersion()\":{\"details\":\"This is typically only useful in complex Pool deployment schemes, where multiple subsystems need to know about each other. Note that this value will only be set at factory creation time.\",\"returns\":{\"_0\":\"A string representation of the pool version\"}},\"getPools()\":{\"returns\":{\"_0\":\"The list of pools deployed by this factory\"}},\"getPoolsInRange(uint256,uint256)\":{\"details\":\"`start` must be a valid index, but if `count` exceeds the total length, it will not revert, but simply stop at the end and return fewer results than requested.\",\"params\":{\"count\":\"The maximum number of pools to return\",\"start\":\"The index of the first pool to return\"},\"returns\":{\"pools\":\"The list of pools deployed by this factory, starting at `start` and returning up to `count` pools\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isDisabled()\":{\"returns\":{\"_0\":\"True if this factory was disabled\"}},\"isPoolFromFactory(address)\":{\"params\":{\"pool\":\"The pool to check\"},\"returns\":{\"_0\":\"True if `pool` was created by this factory\"}},\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"Disabled()\":[{\"notice\":\"Attempted pool creation after the factory was disabled.\"}],\"IndexOutOfBounds()\":[{\"notice\":\"A pool index is beyond the current bounds of the array.\"}],\"PoolPauseWindowDurationOverflow()\":[{\"notice\":\"The factory deployer gave a duration that would overflow the Unix timestamp.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"StandardPoolWithCreator()\":[{\"notice\":\"A pool creator was specified for a pool from a Balancer core pool type.\"}]},\"events\":{\"FactoryDisabled()\":{\"notice\":\"The factory was disabled by governance.\"},\"PoolCreated(address)\":{\"notice\":\"A pool was deployed.\"}},\"kind\":\"user\",\"methods\":{\"create(string,string,(address,uint8,address,bool)[],uint256[],(address,address,address),uint256,address,bool,bool,bytes32)\":{\"notice\":\"Deploys a new `WeightedPool`.\"},\"disable()\":{\"notice\":\"Disable the factory, preventing the creation of more pools.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getDefaultLiquidityManagement()\":{\"notice\":\"Convenience function for constructing a LiquidityManagement object.\"},\"getDefaultPoolHooksContract()\":{\"notice\":\"A common place to retrieve a default hooks contract. Currently set to address(0) (i.e. no hooks).\"},\"getDeploymentAddress(bytes,bytes32)\":{\"notice\":\"Return the address where a new pool will be deployed, based on the factory address and salt.\"},\"getNewPoolPauseWindowEndTime()\":{\"notice\":\"Returns the current pauseWindowEndTime that will be applied to Pools created by this factory.\"},\"getOriginalPauseWindowEndTime()\":{\"notice\":\"Returns the original factory pauseWindowEndTime, regardless of the current time.\"},\"getPauseWindowDuration()\":{\"notice\":\"Return the pause window duration. This is the time pools will be pausable after factory deployment.\"},\"getPoolCount()\":{\"notice\":\"Return the total number of pools deployed by this factory.\"},\"getPoolVersion()\":{\"notice\":\"Returns a JSON representation of the deployed pool version containing name, version number and task ID.\"},\"getPools()\":{\"notice\":\"Return the complete list of pools deployed by this factory.\"},\"getPoolsInRange(uint256,uint256)\":{\"notice\":\"Return a subset of the list of pools deployed by this factory.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isDisabled()\":{\"notice\":\"Check whether this factory has been disabled by governance.\"},\"isPoolFromFactory(address)\":{\"notice\":\"Check whether a pool was deployed by this factory.\"},\"version()\":{\"notice\":\"Getter for the version.\"}},\"notice\":\"General Weighted Pool factory\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/WeightedPoolFactory.sol\":\"WeightedPoolFactory\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol\":{\"keccak256\":\"0xa7adbaf80bc9cfa44e41776f632b5d7cb2c02c562a124c0e4cb17f06c4a54db3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e4fdf59a7f3dc3b7d6bb6f466e4a0a6263b66c0fc12492baf06ec8c6fdcc2398\",\"dweb:/ipfs/QmWxLpicLjGdgGQ8GjuN9YfDyVapYWwzdgET86ucs9hmFa\"]},\"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol\":{\"keccak256\":\"0xae65b6b0800fed858a56df5dc8fe7eda072f7d409f0e0d4c63ad8fca5f0c8d33\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4503850853e86c655d3dba125613822c26552c834215e24bd88c2ac0f29675d4\",\"dweb:/ipfs/QmQ4dGpVpRcyhVfer2qsnbX2tTktwVXoX2bvoodrh3tinR\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IPoolVersion.sol\":{\"keccak256\":\"0xb97e44d4ebd74212195ebf10dc94cd46929e4c3dd217215945d164f02426891f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cdc1656abb0e6c82640d17e2752684cce674cdd54665e01491c2b3ccb74c5d8f\",\"dweb:/ipfs/QmfFr81CMmBJa27uHe4aquqHmU2nXCTpXST1shNq6ik8PA\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\":{\"keccak256\":\"0x6f8c558b0520faae0c4576f30225b5a97821a4cd210878a0ba10c102a2f753f3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b40aa7a5ee39fa2e297c684fd29ad45d866f1fc61cd997120a417b02a4d908aa\",\"dweb:/ipfs/QmYP5pQAF7SDLgy3aerqfnc4VwdmfQix2jcQUNL3o83BY9\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-pool-utils/contracts/BasePoolFactory.sol\":{\"keccak256\":\"0x5888b7317d6a8f91a7665922da7e1e00ee8ef47f6690d4bd7f44d37888e21848\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://00b22e2600301568c628a652fcc8f5d79145218feab59a8963dfe300763d8763\",\"dweb:/ipfs/QmNt2BgJYNL7ywhNvR42NneXDYQ7xRyTaTunfgJ2cCVQFR\"]},\"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol\":{\"keccak256\":\"0xa97e2a0fd95d78dcecf67fd8c554ced63bbd6da372b6f8b12f16ad526b6ec608\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d98ad2022f9e3653fd63daca8c0725c7ccbd4f63d0d27c413e90669ce7284a96\",\"dweb:/ipfs/QmZ62RpJj3qSUrrdVD3H72qEszTUuvGkFLSBXAKMhBn5nX\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol\":{\"keccak256\":\"0x89bd8b60aa203c8aa72af6e88671af68f4407a26dd3e0541b0e4dc387fd0081e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://411eb9ee6df963198102de5ae597c1f1377b0a45be23f17d38463f2eeefa2b0a\",\"dweb:/ipfs/QmcEaMawADJEyLswG5hhvhQuTNV3XUxBVu3YZCbJzQkoJ7\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/FactoryWidePauseWindow.sol\":{\"keccak256\":\"0x9594d2dc75aa8c92bb39d30cd76d3bfbb203fe17c4ae35b6f8d882ed4ac868d4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a43d706d34c9f071bed27372100fedaeb12ec4c5c3529e150c8684444c4a619\",\"dweb:/ipfs/QmYUnJ2CtjJY2XktSzamExryTNbAYjesnymMpqTvQuXUka\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/WeightedMath.sol\":{\"keccak256\":\"0x4d9faedc605adaa52594ae9949374d87bce13107f887edc593a0b9b7a5c91042\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://648e918881e78d62505f049d2f88335e679aa01b82d403ac80b854d9d85efcc2\",\"dweb:/ipfs/QmXA36vdUX611mTH3V9qNGM3uF591TB3xaADqWG41NFmWP\"]},\"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x79f2ec4f7314bd1c3555368ff02bb9d382489dc8bbd7efbbf306f9a5084f3bec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a57c155451c5b1c1c59a27770754ccd9ba1be9344db6ac45b8744eba5fa4fa2f\",\"dweb:/ipfs/QmarkRwGaS3egg1FaQH6LibqjT6NocVUbD1jMPWtFxFaQV\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x4910eb69dc3e3141803a36fb176349ae3d774f4a9811e4d486c44bf6a8e4e055\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://afec051b387a1dad075acfbe0093b443e9e5827e29f7b960af3c1b69645aa290\",\"dweb:/ipfs/QmdLcyhmHCiEyVbFsVByyjEdUn9pDTzVAPNyBpdH2YEs4Y\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/utils/Create2.sol\":{\"keccak256\":\"0x2b9807d194b92f1068d868e9587d27037264a9a067c778486f86ae21c61cbd5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://22d71f40aa38a20cf466d8647452a6e3f746353474f8c8af40f03aa8cae38420\",\"dweb:/ipfs/QmQ752Hz5av7YDK8pFojzb5qgeXQvfsdkdwkHVzaXoYAZR\"]},\"@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"contracts/WeightedPool.sol\":{\"keccak256\":\"0x5bc730e5864de66b59da231ec3c083adc625c181c1d2980e043b2c3135828b83\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d38330349ca047499752eed9e3468191cb9219fa0a57ebec2b3695e87275b657\",\"dweb:/ipfs/QmeJVT9jQXg7yMZ6zyUsQsZXbgt1QqktYpqRV9Fj4cLECX\"]},\"contracts/WeightedPoolFactory.sol\":{\"keccak256\":\"0x530b32c519d8e4fd22f08f33c4aa810bb60af755ac228a3d8ca36e8e9f744000\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://af9e4bad883f1ca9fbebbb21ced5835e26b5245831566cf6dfc61393c52cc858\",\"dweb:/ipfs/QmQ1dJKmFoWcKpN5wuACsq3hbFtK2ftphM194MBEpAVXi8\"]}},\"version\":1}"}},"contracts/lbp/LBPool.sol":{"LBPool":{"abi":[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"contract IERC20","name":"projectToken","type":"address"},{"internalType":"contract IERC20","name":"reserveToken","type":"address"},{"internalType":"uint256","name":"projectTokenStartWeight","type":"uint256"},{"internalType":"uint256","name":"reserveTokenStartWeight","type":"uint256"},{"internalType":"uint256","name":"projectTokenEndWeight","type":"uint256"},{"internalType":"uint256","name":"reserveTokenEndWeight","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bool","name":"blockProjectTokenSwapsIn","type":"bool"}],"internalType":"struct LBPParams","name":"lbpParams","type":"tuple"},{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"address","name":"trustedRouter","type":"address"},{"internalType":"string","name":"version","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AddingLiquidityNotAllowed","type":"error"},{"inputs":[],"name":"BaseOutOfBounds","type":"error"},{"inputs":[],"name":"ECDSAInvalidSignature","type":"error"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"name":"ECDSAInvalidSignatureLength","type":"error"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"ECDSAInvalidSignatureS","type":"error"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"ERC2612ExpiredSignature","type":"error"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC2612InvalidSigner","type":"error"},{"inputs":[],"name":"ExponentOutOfBounds","type":"error"},{"inputs":[{"internalType":"uint256","name":"resolvedStartTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"GradualUpdateTimeTravel","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"currentNonce","type":"uint256"}],"name":"InvalidAccountNonce","type":"error"},{"inputs":[],"name":"InvalidExponent","type":"error"},{"inputs":[],"name":"InvalidShortString","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"InvalidTokenConfiguration","type":"error"},{"inputs":[],"name":"MaxInRatio","type":"error"},{"inputs":[],"name":"MaxOutRatio","type":"error"},{"inputs":[],"name":"MinWeight","type":"error"},{"inputs":[],"name":"NormalizedWeightInvariant","type":"error"},{"inputs":[],"name":"NotImplemented","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ProductOutOfBounds","type":"error"},{"inputs":[],"name":"RemovingLiquidityNotAllowed","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"name":"StringTooLong","type":"error"},{"inputs":[],"name":"SwapOfProjectTokenIn","type":"error"},{"inputs":[],"name":"SwapsDisabled","type":"error"},{"inputs":[],"name":"WeightedPoolBptRateUnsupported","type":"error"},{"inputs":[],"name":"ZeroDivision","type":"error"},{"inputs":[],"name":"ZeroInvariant","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"EIP712DomainChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endTime","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"startWeights","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"endWeights","type":"uint256[]"}],"name":"GradualWeightUpdateScheduled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256","name":"tokenInIndex","type":"uint256"},{"internalType":"uint256","name":"invariantRatio","type":"uint256"}],"name":"computeBalance","outputs":[{"internalType":"uint256","name":"newBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"enum Rounding","name":"rounding","type":"uint8"}],"name":"computeInvariant","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitApproval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAggregateFeePercentages","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGradualWeightUpdateParams","outputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256[]","name":"startWeights","type":"uint256[]"},{"internalType":"uint256[]","name":"endWeights","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHookFlags","outputs":[{"components":[{"internalType":"bool","name":"enableHookAdjustedAmounts","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallAfterInitialize","type":"bool"},{"internalType":"bool","name":"shouldCallComputeDynamicSwapFee","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeSwap","type":"bool"},{"internalType":"bool","name":"shouldCallAfterSwap","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterAddLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallBeforeRemoveLiquidity","type":"bool"},{"internalType":"bool","name":"shouldCallAfterRemoveLiquidity","type":"bool"}],"internalType":"struct HookFlags","name":"hookFlags","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getLBPoolDynamicData","outputs":[{"components":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"normalizedWeights","type":"uint256[]"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"},{"internalType":"bool","name":"isSwapEnabled","type":"bool"}],"internalType":"struct LBPoolDynamicData","name":"data","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLBPoolImmutableData","outputs":[{"components":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"startWeights","type":"uint256[]"},{"internalType":"uint256[]","name":"endWeights","type":"uint256[]"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"projectTokenIndex","type":"uint256"},{"internalType":"uint256","name":"reserveTokenIndex","type":"uint256"},{"internalType":"bool","name":"isProjectTokenSwapInBlocked","type":"bool"}],"internalType":"struct LBPoolImmutableData","name":"data","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumInvariantRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMaximumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumInvariantRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getNormalizedWeights","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getProjectToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getReserveToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTrustedRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWeightedPoolDynamicData","outputs":[{"components":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct WeightedPoolDynamicData","name":"","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getWeightedPoolImmutableData","outputs":[{"components":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"normalizedWeights","type":"uint256[]"}],"internalType":"struct WeightedPoolImmutableData","name":"","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"incrementNonce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isProjectTokenSwapInBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"enum AddLiquidityKind","name":"","type":"uint8"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsInRaw","type":"uint256[]"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onAfterAddLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onAfterInitialize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"amountsOutRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onAfterRemoveLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"contract IERC20","name":"tokenIn","type":"address"},{"internalType":"contract IERC20","name":"tokenOut","type":"address"},{"internalType":"uint256","name":"amountInScaled18","type":"uint256"},{"internalType":"uint256","name":"amountOutScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenInBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"tokenOutBalanceScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedScaled18","type":"uint256"},{"internalType":"uint256","name":"amountCalculatedRaw","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct AfterSwapParams","name":"","type":"tuple"}],"name":"onAfterSwap","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"enum AddLiquidityKind","name":"","type":"uint8"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onBeforeAddLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onBeforeInitialize","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"enum RemoveLiquidityKind","name":"","type":"uint8"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onBeforeRemoveLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"","type":"tuple"},{"internalType":"address","name":"","type":"address"}],"name":"onBeforeSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"","type":"tuple"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"onComputeDynamicSwapFeePercentage","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"pool","type":"address"},{"components":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenConfig[]","name":"tokenConfig","type":"tuple[]"},{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"","type":"tuple"}],"name":"onRegister","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"request","type":"tuple"}],"name":"onSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_address_fromMemory":{"entryPoint":3532,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_string_fromMemory":{"entryPoint":3447,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":3592,"id":null,"parameterSlots":2,"returnSlots":1},"checked_add_uint256":{"entryPoint":3643,"id":null,"parameterSlots":2,"returnSlots":1},"finalize_allocation":{"entryPoint":3412,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_19097":{"entryPoint":3358,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_37736":{"entryPoint":3385,"id":null,"parameterSlots":1,"returnSlots":0},"fun_toShortStringWithFallback":{"entryPoint":4043,"id":41065,"parameterSlots":1,"returnSlots":1},"fun_toShortStringWithFallback_19102":{"entryPoint":3656,"id":41065,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_uint256_dyn":{"entryPoint":3552,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"61044060405234610d1a57615c40803803809161001e82610440610d54565b61044039806101e08112610d1a57610440516001600160401b038111610d1a576100519082610440019061044001610d77565b610460516001600160401b038111610d1a576100796101409184610440019061044001610d77565b93603f190112610d1a576040519161014083016001600160401b03811184821017610b39576040526100ac610480610dcc565b83526100b96104a0610dcc565b60208401526100c96104c0610dcc565b60408401526104e05160608401526105005160808401526105205160a08401526105405160c08401526105605160e0840152610580516101008401526105a0518015158103610d1a576101208401526105c0516001600160a01b0381168103610d1a576101376105e0610dcc565b610600519092906001600160401b038111610d1a5761015e91610440019061044001610d77565b9060018060a01b03855116956060608060405161017a81610d1e565b8281528260208201525f60408201528280820152015260018060a01b0360208701511660018060a01b03604088015116115f14610d11575f9460015b604051966101c388610d39565b6002885260403660208a01376101e160ff60608b0151921689610de0565b526101f460ff60808a0151921688610de0565b526040519561020287610d1e565b8187528260208801526002604088015260608701528360808701526040516040810181811060018060401b03821117610b39576040526001815260208101603160f81b815261025083610e48565b6101205261025d82610fcb565b6101405282516020840120918260e05251902080610100524660a0526040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815260c0810181811060018060401b03821117610b39576040525190206080523060c0526101608390528051906001600160401b038211610b395760035490600182811c92168015610d07575b6020831014610b1b5781601f849311610caf575b50602090601f8311600114610c3a575f92610c2f575b50508160011b915f199060031b1c1916176003555b8051906001600160401b038211610b395760045490600182811c92168015610c25575b6020831014610b1b5781601f849311610bcd575b50602090601f8311600114610b58575f92610b4d575b50508160011b915f199060031b1c1916176004555b610180528051906001600160401b038211610b395760055490600182811c92168015610b2f575b6020831014610b1b5781601f849311610acd575b50602090601f8311600114610a45575f92610a3a575b50508160011b915f199060031b1c1916176005555b6040820151806101a05260608301515103610a2b575f925f5b6101a05160ff8216101561053d5761044960ff82166060860151610de0565b5194662386f26fc10000861061052e578561046391610e3b565b9460ff821661049a576101c0525b60ff808216146104865760ff1660010161042a565b634e487b7160e01b5f52601160045260245ffd5b60ff82166001036104ae576101e052610471565b60ff82166002036104c25761020052610471565b60ff82166003036104d65761022052610471565b60ff82166004036104ea5761024052610471565b60ff82166005036104fe5761026052610471565b60ff82166006036105125761028052610471565b600760ff831614610524575b50610471565b6102a0525f61051e565b63bd39358360e01b5f5260045ffd5b5084670de0b6b3a764000085036109cd578015610a1857600780546001600160a01b031990811690915560068054918216831790556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a360e08101519161010082015192606083015160808401519060a08501519160c086015191662386f26fc10000808210908115610a0e575b8115610a04575b81156109fa575b5061052e57670de0b6b3a7640000916105fc91610e3b565b14918215926109dc575b50506109cd578042115f146109c85750425b838110156109b15761036052610100820151610380526102c0526020810180516001600160a01b039081166102e05260408301805182166103005261012084015115156104205260608401516103a05260808401516103c05260a08401516103e05260c084015161040052915191517f0f3631f9dab08169d1db21c6dc5f32536fb2b0a6b9bb5330d71c52132f968be09450918116911611156109a65760ff5f8160015b16610340521661032052604051906106d382610d39565b600282526040366020840137604051906106ec82610d39565b600282526040366020840137606081015161071e608083015161032051906107176103405188610de0565b5285610de0565b5261074560c060a0830151920151610320519061073e6103405186610de0565b5283610de0565b526107826103605191610774610380519460405195869586526020860152608060408601526080850190610e08565b908382036060850152610e08565b0390a1604051614afe6111028239608051816137f3015260a051816138bf015260c051816137c4015260e0518161384201526101005181613868015261012051816116d0015261014051816116f90152610160518181816104490152818161074201528181610a0c015281816111a30152818161169701528181611da90152818161243a0152818161289e015281816134ec01526136c0015261018051818181610b2101528181610d4501528181610e50015281816110a2015261180f01526101a0518150506101c0518150506101e05181505061020051815050610220518150506102405181505061026051815050610280518150506102a0518150506102c051818181610dd30152818161214e015261253001526102e0518161205d015261030051816103a101526103205181818161190c01528181611c66015281816129050152613b540152610340518181816118eb0152818161292f0152613b9e0152610360518181816119fc0152818161210c015281816124c7015281816129c60152818161375b0152613ae7015261038051818181610c7201528181611a1f015281816129ec015281816137880152613ac601526103a05181818161195901528181612a340152613b2e01526103c05181818161192d0152612a5c01526103e0518181816119cd01528181612aae0152613b0d0152610400518181816119a10152612ad901526104205181818161161301528181611bfb015261299d0152614afe90f35b60ff6001815f6106bc565b8390637d0356f360e01b5f5260045260245260445ffd5b610618565b631ce788a760e11b5f5260045ffd5b670de0b6b3a76400009250906109f191610e3b565b14158580610606565b90508310896105e4565b80861091506105dd565b80841091506105d6565b631e4fbdf760e01b5f525f60045260245ffd5b63aaad13f760e01b5f5260045ffd5b015190505f806103fc565b60055f90815293507f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db091905b601f1984168510610ab2576001945083601f19811610610a9a575b505050811b01600555610411565b01515f1960f88460031b161c191690555f8080610a8c565b81810151835560209485019460019093019290910190610a71565b90915060055f5260205f20601f840160051c810160208510610b14575b90849392915b601f830160051c82018110610b065750506103e6565b5f8155859450600101610af0565b5080610aea565b634e487b7160e01b5f52602260045260245ffd5b91607f16916103d2565b634e487b7160e01b5f52604160045260245ffd5b015190505f80610396565b60045f90815293505f516020615c205f395f51905f5291905b601f1984168510610bb2576001945083601f19811610610b9a575b505050811b016004556103ab565b01515f1960f88460031b161c191690555f8080610b8c565b81810151835560209485019460019093019290910190610b71565b60045f529091505f516020615c205f395f51905f52601f840160051c810160208510610c1e575b90849392915b601f830160051c82018110610c10575050610380565b5f8155859450600101610bfa565b5080610bf4565b91607f169161036c565b015190505f80610334565b60035f90815293505f516020615c005f395f51905f5291905b601f1984168510610c94576001945083601f19811610610c7c575b505050811b01600355610349565b01515f1960f88460031b161c191690555f8080610c6e565b81810151835560209485019460019093019290910190610c53565b60035f529091505f516020615c005f395f51905f52601f840160051c810160208510610d00575b90849392915b601f830160051c82018110610cf257505061031e565b5f8155859450600101610cdc565b5080610cd6565b91607f169161030a565b6001945f6101b6565b5f80fd5b60a081019081106001600160401b03821117610b3957604052565b606081019081106001600160401b03821117610b3957604052565b601f909101601f19168101906001600160401b03821190821017610b3957604052565b81601f82011215610d1a578051906001600160401b038211610b395760405192610dab601f8401601f191660200185610d54565b82845260208383010111610d1a57815f9260208093018386015e8301015290565b51906001600160a01b0382168203610d1a57565b8051821015610df45760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b9081518082526020808093019301915f5b828110610e27575050505090565b835185529381019392810192600101610e19565b9190820180921161048657565b805160209081811015610ebe5750601f825111610e805780825192015190808310610e7257501790565b825f19910360031b1b161790565b60448260405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b906001600160401b038211610b39575f54926001938481811c91168015610fc1575b83821014610b1b57601f8111610f8e575b5081601f8411600114610f2c57509282939183925f94610f21575b50501b915f199060031b1c1916175f5560ff90565b015192505f80610f0c565b919083601f1981165f8052845f20945f905b88838310610f745750505010610f5c575b505050811b015f5560ff90565b01515f1960f88460031b161c191690555f8080610f4f565b858701518855909601959485019487935090810190610f3e565b5f805284601f845f20920160051c820191601f860160051c015b828110610fb6575050610ef1565b5f8155018590610fa8565b90607f1690610ee0565b805160209081811015610ff55750601f825111610e805780825192015190808310610e7257501790565b9192916001600160401b038111610b395760019182548381811c911680156110f7575b82821014610b1b57601f81116110c4575b5080601f83116001146110645750819293945f92611059575b50505f19600383901b1c191690821b17905560ff90565b015190505f80611042565b90601f19831695845f52825f20925f905b8882106110ad5750508385969710611095575b505050811b01905560ff90565b01515f1960f88460031b161c191690555f8080611088565b808785968294968601518155019501930190611075565b835f5283601f835f20920160051c820191601f850160051c015b8281106110ec575050611029565b5f81550184906110de565b90607f169061101856fe6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a714612fc25750806306fdde0314612f19578063095ea7b314612e9c5780630b89f18214612c625780630ca898481461282257806316a0b3e0146125ee57806318160ddd146125d457806318b6eb55146125945780631c149e281461247157806323b872dd146123c957806323de665114612398578063273c1adf146123765780632754888d1461230d57806330adf81f146122d3578063313ce567146122b8578063351a964d146122945780633644e5151461227a57806338be241d1461222f57806345421ec7146120815780634837c596146120315780635211fa7714611fee57806353b79bd714611f9c57806354fd4d5014611ef35780635687f2b814611e92578063627cdcb914611e69578063654cf15d14611e47578063679aefce14611e0f57806370a0823114611d3c578063715018a614611cb557806372c9818614611b0d57806379ba509714611a545780637beed220146118bb5780637ecebe001461187657806381fa807c146117b357806384b0196e146116bb5780638d928af81461166b5780638da5cb5b1461163857806395146efb146115fc57806395d89b4114611500578063976907cc14611448578063984de9e81461125a578063a0e8f5ac14611212578063a9059cbb1461110c578063aa6ca8081461104a578063abb1dc4414610df7578063af905d1514610da7578063b156aa0a14610ced578063b677fa5614610ccb578063ba5f9f4014610be6578063c0bc6f3314610b7a578063ce20ece714610b5a578063d335b0cf14610ac8578063d505accf1461086c578063d77153a7146107af578063dd62ed3e146106c5578063e30c397814610692578063e565c29e146103c5578063e594203d14610375578063f2fde38b146102e75763f89f27ed146102b0575f80fd5b346102e3575f6003193601126102e3576102df6102cb613aa3565b60405191829160208352602083019061315d565b0390f35b5f80fd5b346102e35760206003193601126102e35761030061304f565b6103086138e5565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff00000000000000000000000000000000000000006007541617600755600654167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b346102e3575f6003193601126102e357602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102e3575f6003193601126102e3576040516101009081810181811067ffffffffffffffff8211176106655760405260608152602090818101906060825260408101915f8352606082015f8152608083015f815260a08401905f825260c08501925f845260e08601945f865273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906040517f535cfd8a0000000000000000000000000000000000000000000000000000000081523060048201525f81602481865afa90811561060b575f91610643575b5088526104b7613aa3565b81526040517fb45090f90000000000000000000000000000000000000000000000000000000081523060048201528a81602481865afa90811561060b575f91610616575b5089526105066134a3565b835260405180927ff29486a10000000000000000000000000000000000000000000000000000000082523060048301528160246101a09384935afa98891561060b578c996105ae9461059b935f926105de575b505060e0810151151587528a81015115158852610120809101511515895261057f613759565b15158a526040519d8d8f9e938f948552519301528c019061315d565b9051601f198b83030160408c015261315d565b9651606089015251608088015251151560a087015251151560c086015251151560e0850152511515908301520390f35b6105fd9250803d10610604575b6105f58183613122565b81019061357a565b8e80610559565b503d6105eb565b6040513d5f823e3d90fd5b90508a81813d831161063c575b61062d8183613122565b810103126102e357518c6104fb565b503d610623565b61065f91503d805f833e6106578183613122565b810190613683565b8c6104ac565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b346102e3575f6003193601126102e357602073ffffffffffffffffffffffffffffffffffffffff60075416604051908152f35b346102e35760406003193601126102e3576106de61304f565b60206106e8613072565b91606473ffffffffffffffffffffffffffffffffffffffff91828060405196879586947f927da1050000000000000000000000000000000000000000000000000000000086523060048701521660248501521660448301527f0000000000000000000000000000000000000000000000000000000000000000165afa801561060b575f9061077c575b602090604051908152f35b506020813d6020116107a7575b8161079660209383613122565b810103126102e35760209051610771565b3d9150610789565b346102e3575f6003193601126102e3576101406040516107ce816130e9565b5f81526020810190604081015f8152606082015f815260808301905f825260a084015f815260c0850160e08601915f83526101009485880194610120809901975f895260018b5260018552600187526040519a5f8c5251151560208c015251151560408b015251151560608a0152511515608089015251151560a088015251151560c087015251151560e08601525115159084015251151590820152f35b346102e35760e06003193601126102e35761088561304f565b61088d613072565b60443591608435919060643560ff841684036102e357804211610a9d576108db8273ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2080549060018201905590565b906109aa6109a160405196602088017f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9815273ffffffffffffffffffffffffffffffffffffffff98899586891697886040840152878b1660608401528c608084015260a083015260c082015260c08152610954816130cd565b51902061095f6137ad565b90604051917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015260c43591604260a4359220613f5b565b90929192613fea565b16818103610a6f576040517fe1f21c6700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015285166024820152604481018790526020816064815f7f00000000000000000000000000000000000000000000000000000000000000008b165af1801561060b57610a3b57005b6020813d602011610a67575b81610a5460209383613122565b810103126102e357610a6590613359565b005b3d9150610a47565b7f4b800e46000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b7f62791302000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b346102e3575f6003193601126102e3576040517fb45090f900000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa801561060b575f9061077c57602090604051908152f35b346102e3575f6003193601126102e35760206040516509184e72a0008152f35b346102e3575f6003193601126102e3575f60c0604051610b99816130cd565b60608152606060208201528260408201528260608201528260808201528260a082015201527fd6234725000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102e35760e06003193601126102e357610bff61304f565b50610c08613072565b50600460443510156102e35767ffffffffffffffff6084358181116102e357610c35903690600401613190565b5060a4358181116102e357610c4e903690600401613190565b5060c4359081116102e357610c679036906004016131f0565b50610c706136a9565b7f0000000000000000000000000000000000000000000000000000000000000000421115610ca357602060405160018152f35b7ff38b5770000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102e3575f6003193601126102e35760206040516709b6e64a8ec600008152f35b346102e3575f6003193601126102e3576040517f535cfd8a0000000000000000000000000000000000000000000000000000000081523060048201525f8160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa801561060b576102df915f91610d8d575b5060405191829160208352602083019061315d565b610da191503d805f833e6106578183613122565b82610d78565b346102e3575f6003193601126102e357602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102e3575f6003193601126102e35773ffffffffffffffffffffffffffffffffffffffff6040517f67e0e0760000000000000000000000000000000000000000000000000000000081523060048201525f81602481857f0000000000000000000000000000000000000000000000000000000000000000165afa801561060b575f915f935f915f93610f1c575b50610e9b60405194608086526080860190613288565b6020858203818701528080885193848152019701925f905b838210610ee05787806102df89610ed28d8b858203604087015261315d565b90838203606085015261315d565b909192939783606060019260408c518051610efa816132d1565b8352808501518716858401520151151560408201520199019493920190610eb3565b9450925050503d805f843e610f318184613122565b8201906080838303126102e35782519267ffffffffffffffff938481116102e35783610f5e91830161339b565b90602093848201518681116102e357820181601f820112156102e357805190610f8682613145565b96610f946040519889613122565b828852808801816060809502840101928584116102e3578201905b838210610ff557505050505060408201518681116102e35781610fd3918401613442565b9560608301519081116102e357610fea9201613442565b909293909185610e85565b84828703126102e3576040519061100b826130b1565b825160028110156102e357825283830151908a821682036102e357828592838995015261103a60408601613359565b6040820152815201910190610faf565b346102e3575f6003193601126102e3576040517fca4f28030000000000000000000000000000000000000000000000000000000081523060048201525f8160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa801561060b576102df915f916110ea575b50604051918291602083526020830190613288565b61110691503d805f833e6110fe8183613122565b810190613419565b826110d5565b346102e35760406003193601126102e357611189602061112a61304f565b6040517fbeabacc800000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248083019190915235604482015291829081906064820190565b03815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1801561060b576111db575b602060405160018152f35b6020813d60201161120a575b816111f460209383613122565b810103126102e35761120590613359565b6111d0565b3d91506111e7565b346102e3576003196060813601126102e3576004359067ffffffffffffffff82116102e35760e091360301126102e35761124a613072565b50604080515f81525f6020820152f35b346102e35760406003193601126102e35760043567ffffffffffffffff81116102e35761128b903690600401613190565b60243560028110156102e3576112a0816132d1565b6114415760045b6112af613aa3565b90806003146113ed57806004146113695780600114611310576002146112fc577f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffd5b60209161130891614095565b604051908152f35b50670de0b6b3a76400009081810291818304149015171561133c5760209161133791613c0e565b611308565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b505f9190670de0b6b3a76400005b81518410156113b3576113ab6001916113a56113938787613387565b5161139e8887613387565b5190613c25565b90613cb0565b930192611377565b9250505080156113c557602090611308565b7f26543689000000000000000000000000000000000000000000000000000000005f5260045ffd5b505f9190670de0b6b3a76400005b81518410156113b357670de0b6b3a76400006114386001926114326114208888613387565b5161142b8988613387565b5190613ec2565b90613bfb565b049301926113fb565b60036112a7565b346102e3576101006003193601126102e35761146261304f565b5061146b613072565b50600560443510156102e35767ffffffffffffffff6064358181116102e357611498903690600401613190565b506084358181116102e3576114b1903690600401613190565b60c4358281116102e3576114c9903690600401613190565b5060e4359182116102e3576114e56102df9236906004016131f0565b506040519182915f835260406020840152604083019061315d565b346102e3575f6003193601126102e3576040516004545f8261152183613308565b91828252602093600190856001821691825f146115be575050600114611563575b5061154f92500383613122565b6102df60405192828493845283019061302a565b84915060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b905f915b8583106115a657505061154f935082010185611542565b8054838901850152879450869390920191810161158f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168582015261154f95151560051b85010192508791506115429050565b346102e3575f6003193601126102e35760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b346102e3575f6003193601126102e357602073ffffffffffffffffffffffffffffffffffffffff60065416604051908152f35b346102e3575f6003193601126102e357602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102e3575f6003193601126102e3576116f47f0000000000000000000000000000000000000000000000000000000000000000613cd2565b61171d7f0000000000000000000000000000000000000000000000000000000000000000613e04565b9060405191602083019280841067ffffffffffffffff851117610665576117936102df92611785956040525f83526040519586957f0f00000000000000000000000000000000000000000000000000000000000000875260e0602088015260e087019061302a565b90858203604087015261302a565b904660608501523060808501525f60a085015283820360c085015261315d565b346102e3575f6003193601126102e3576040517ff29486a10000000000000000000000000000000000000000000000000000000081523060048201526101a090818160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561060b576040925f92611859575b505060608282015191015182519182526020820152f35b61186f9250803d10610604576105f58183613122565b8280611842565b346102e35760206003193601126102e35773ffffffffffffffffffffffffffffffffffffffff6118a461304f565b165f526002602052602060405f2054604051908152f35b346102e3575f6003193601126102e357610ed26040516118da816130b1565b6002815260403660208301376102df7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006119568386613387565b527f00000000000000000000000000000000000000000000000000000000000000006119828286613387565b5260405191611990836130b1565b6002835260403660208501376119c77f00000000000000000000000000000000000000000000000000000000000000009184613387565b526119f37f00000000000000000000000000000000000000000000000000000000000000009183613387565b526040519384937f000000000000000000000000000000000000000000000000000000000000000085527f0000000000000000000000000000000000000000000000000000000000000000602086015260806040860152608085019061315d565b346102e3575f6003193601126102e35760075473ffffffffffffffffffffffffffffffffffffffff3381831603611ae1577fffffffffffffffffffffffff00000000000000000000000000000000000000008092166007556006549133908316176006553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b346102e3576003196020813601126102e35760043567ffffffffffffffff918282116102e35760e09082360301126102e35760405191611b4c836130cd565b816004013560028110156102e35783526024820135602084015260448201358181116102e357611b829060043691850101613190565b60408401526064820135606084015260808301916084810135835260a481013573ffffffffffffffffffffffffffffffffffffffff811681036102e35760a085015260c48101359182116102e3576004611bdf92369201016131f0565b60c0830152611bec6136a9565b611bf4613759565b15611c8d577f00000000000000000000000000000000000000000000000000000000000000009081611c61575b50611c3957611308602091611c346136a9565b613906565b7f1269438a000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050517f0000000000000000000000000000000000000000000000000000000000000000141582611c21565b7ffdf79845000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102e3575f6003193601126102e357611ccd6138e5565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff00000000000000000000000000000000000000008060075416600755600654908116600655167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346102e3576020806003193601126102e357604481611d5961304f565b6040517ff7888aec00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff918216602482015292839182907f0000000000000000000000000000000000000000000000000000000000000000165afa90811561060b575f91611de2575b50604051908152f35b90508181813d8311611e08575b611df98183613122565b810103126102e3575182611dd9565b503d611def565b346102e3575f6003193601126102e3577f18e79a20000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102e3575f6003193601126102e357602060405167016345785d8a00008152f35b346102e3575f6003193601126102e357335f908152600260205260409020805460018101909155005b346102e35760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925611ec336613246565b92919390611ecf6136a9565b73ffffffffffffffffffffffffffffffffffffffff809160405195865216941692a3005b346102e3575f6003193601126102e3576040516005545f82611f1483613308565b91828252602093600190856001821691825f146115be575050600114611f41575061154f92500383613122565b84915060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0905f915b858310611f8457505061154f935082010185611542565b80548389018501528794508693909201918101611f6d565b346102e3575f6003193601126102e357606060408051611fbb816130b1565b82815282602082015201527fd6234725000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102e3576003196040813601126102e3576004359067ffffffffffffffff82116102e35760e091360301126102e357612026613072565b5060206040515f8152f35b346102e3575f6003193601126102e357602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102e35760e06003193601126102e35761209a61304f565b6120a2613072565b50600560443510156102e35767ffffffffffffffff6064358181116102e3576120cf903690600401613190565b5060a4358181116102e3576120e8903690600401613190565b5060c4359081116102e3576121019036906004016131f0565b5061210a6136a9565b7f00000000000000000000000000000000000000000000000000000000000000004210156122075773ffffffffffffffffffffffffffffffffffffffff80911690807f00000000000000000000000000000000000000000000000000000000000000001682149182612184575b6020836040519015158152f35b60049250602090604051938480927f5e01eb5a0000000000000000000000000000000000000000000000000000000082525afa90811561060b576020925f926121d8575b5080600654169116149082612177565b6121f9919250833d8511612200575b6121f18183613122565b81019061354e565b90836121c8565b503d6121e7565b7f3eee08c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102e35760606003193601126102e35767ffffffffffffffff6004358181116102e357612261903690600401613190565b506044359081116102e3576120269036906004016131f0565b346102e3575f6003193601126102e35760206113086137ad565b346102e3575f6003193601126102e35760206122ae613759565b6040519015158152f35b346102e3575f6003193601126102e357602060405160128152f35b346102e3575f6003193601126102e35760206040517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b346102e3576101006003193601126102e35761232761304f565b50612330613072565b50600460443510156102e35767ffffffffffffffff6084358181116102e35761235d903690600401613190565b5060a4358181116102e3576114b1903690600401613190565b346102e3575f6003193601126102e35760206040516729a2241af62c00008152f35b346102e35760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611ec336613246565b346102e357608460206123db36613246565b6040517f15dacbea00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff93841660248201529183166044830152606482015292839182905f907f0000000000000000000000000000000000000000000000000000000000000000165af1801561060b576111db57602060405160018152f35b346102e35760406003193601126102e35767ffffffffffffffff6004358181116102e3576124a3903690600401613190565b506024359081116102e3576124bc9036906004016131f0565b506124c56136a9565b7f0000000000000000000000000000000000000000000000000000000000000000421015612207576040517f5e01eb5a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa90811561060b576020925f92612575575b508060065416911614604051908152f35b61258d919250833d8511612200576121f18183613122565b9083612564565b346102e3576003196020813601126102e3576004359067ffffffffffffffff82116102e35761018091360301126102e357604080515f81525f6020820152f35b346102e3575f6003193601126102e35760206113086134a3565b346102e35760606003193601126102e35760043567ffffffffffffffff81116102e35761261f903690600401613190565b6024356126396126328260443594613387565b5191613714565b600191908284111561281c5760025b806003146127ab578060041461273d57806001146126e557600214612694577f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffd5b80156126bd57602093611308936113a5926ec097ce7bc90715b34b9f0fffffffff040190613c25565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b508093925015612710576113a5611308926020946ec097ce7bc90715b34b9f10000000000490613c25565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b50670de0b6b3a764000093925f91815b61276b575b50505082156113c5576113a56113089260209490613c25565b909194670de0b6b3a7640000518610156127a557908261279d81936113a56127938a86613387565b5161139e8b613366565b96019261274d565b94612752565b50670de0b6b3a764000093925f91815b6127d85750505082156113c5576113a56113089260209490613c25565b909194670de0b6b3a7640000518610156127a5579082670de0b6b3a764000061281382946114326128098b87613387565b5161142b8c613366565b049601926127bb565b82612648565b346102e3575f6003193601126102e357604051610120810181811067ffffffffffffffff821117610665576040526060815260606020820152606060408201526060808201525f60808201525f60a08201525f60c08201525f60e08201525f61010082015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166040517fca4f28030000000000000000000000000000000000000000000000000000000081523060048201525f81602481855afa90811561060b575f91612c48575b5082527f00000000000000000000000000000000000000000000000000000000000000008060c084015260245f7f0000000000000000000000000000000000000000000000000000000000000000938460e0870152604051928380927f7e361bde0000000000000000000000000000000000000000000000000000000082523060048301525afa90811561060b575f91612be9575b5060208401527f000000000000000000000000000000000000000000000000000000000000000015156101008401527f000000000000000000000000000000000000000000000000000000000000000060808401527f000000000000000000000000000000000000000000000000000000000000000060a0840152604051612a1c816130b1565b600281526040366020830137806040850152612a59827f000000000000000000000000000000000000000000000000000000000000000092613387565b527f0000000000000000000000000000000000000000000000000000000000000000612a89836040860151613387565b52612ad360405191612a9a836130b1565b6002835260403660208501378260608601527f000000000000000000000000000000000000000000000000000000000000000092613387565b52612b037f0000000000000000000000000000000000000000000000000000000000000000916060840151613387565b526040516020815261014081019180519261012060208401528351809152602061016084019401905f5b818110612bbd57505050610100612b878394612b72612b5e602086015192601f1993848983030160408a015261315d565b60408601518388830301606089015261315d565b9060608501519086830301608087015261315d565b91608081015160a085015260a081015160c085015260c081015160e085015260e081015182850152015115156101208301520390f35b825173ffffffffffffffffffffffffffffffffffffffff16865260209586019590920191600101612b2d565b90503d805f833e612bfa8183613122565b8101906040818303126102e357805167ffffffffffffffff81116102e35782612c24918301613442565b91602082015167ffffffffffffffff81116102e357612c439201613442565b612995565b612c5c91503d805f833e6110fe8183613122565b83612900565b346102e35760e06003193601126102e357612c7b61304f565b50612c84613072565b6044359067ffffffffffffffff82116102e357366023830112156102e3578160040135612cb081613145565b90612cbe6040519283613122565b808252602093848301906024829360071b820101903682116102e357602401915b818310612e1b5750505060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c3601126102e357612d1b6136a9565b8151600203612df357815115612dc65751830151612d38816132d1565b612d41816132d1565b1590811591612d99575b50612d71576040519073ffffffffffffffffffffffffffffffffffffffff309116148152f35b7fdf450632000000000000000000000000000000000000000000000000000000005f5260045ffd5b8091505160011015612dc65760400151820151612db5816132d1565b612dbe816132d1565b151583612d4b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b6080833603126102e35760405190612e3282613095565b73ffffffffffffffffffffffffffffffffffffffff843581811681036102e35783528885013560028110156102e35789840152604085013590811681036102e3576040830152606090818501359283151584036102e3576080938a93820152815201920191612cdf565b346102e35760406003193601126102e3576111896020612eba61304f565b6040517fe1f21c6700000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248083019190915235604482015291829081906064820190565b346102e3575f6003193601126102e3576040516003545f82612f3a83613308565b91828252602093600190856001821691825f146115be575050600114612f67575061154f92500383613122565b84915060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b905f915b858310612faa57505061154f935082010185611542565b80548389018501528794508693909201918101612f93565b346102e35760206003193601126102e357600435907fffffffff0000000000000000000000000000000000000000000000000000000082168092036102e3577f01ffc9a700000000000000000000000000000000000000000000000000000000602092148152f35b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036102e357565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036102e357565b6080810190811067ffffffffffffffff82111761066557604052565b6060810190811067ffffffffffffffff82111761066557604052565b60e0810190811067ffffffffffffffff82111761066557604052565b610140810190811067ffffffffffffffff82111761066557604052565b6040810190811067ffffffffffffffff82111761066557604052565b90601f601f19910116810190811067ffffffffffffffff82111761066557604052565b67ffffffffffffffff81116106655760051b60200190565b9081518082526020808093019301915f5b82811061317c575050505090565b83518552938101939281019260010161316e565b9080601f830112156102e35760209082356131aa81613145565b936131b86040519586613122565b81855260208086019260051b8201019283116102e357602001905b8282106131e1575050505090565b813581529083019083016131d3565b81601f820112156102e35780359067ffffffffffffffff821161066557604051926132256020601f19601f8601160185613122565b828452602083830101116102e357815f926020809301838601378301015290565b60031960609101126102e35773ffffffffffffffffffffffffffffffffffffffff9060043582811681036102e3579160243590811681036102e3579060443590565b9081518082526020808093019301915f5b8281106132a7575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101613299565b600211156132db57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b90600182811c9216801561334f575b602083101461332257565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691613317565b519081151582036102e357565b670de0b6b3a764000051811015612dc65760051b670de0b6b3a76400200190565b8051821015612dc65760209160051b010190565b9080601f830112156102e3578151906020916133b681613145565b936133c46040519586613122565b81855260208086019260051b8201019283116102e357602001905b8282106133ed575050505090565b815173ffffffffffffffffffffffffffffffffffffffff811681036102e35781529083019083016133df565b906020828203126102e357815167ffffffffffffffff81116102e35761343f920161339b565b90565b9080601f830112156102e35781519060209161345d81613145565b9361346b6040519586613122565b81855260208086019260051b8201019283116102e357602001905b828210613494575050505090565b81518152908301908301613486565b6040517fe4dc2aa400000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561060b575f9161351f575090565b90506020813d602011613546575b8161353a60209383613122565b810103126102e3575190565b3d915061352d565b908160209103126102e3575173ffffffffffffffffffffffffffffffffffffffff811681036102e35790565b809103906101a082126102e357608060405192613596846130e9565b126102e3576040516135a781613095565b6135b082613359565b81526135be60208301613359565b60208201526135cf60408301613359565b60408201526135e060608301613359565b606082015282526080810151602083015260a0810151604083015260c0810151606083015260e081015164ffffffffff811681036102e3576080830152610100908181015163ffffffff811681036102e35761367c916101809160a08601526101209361364e858301613359565b60c08701526136606101408301613359565b60e08701526136726101608301613359565b9086015201613359565b9082015290565b906020828203126102e357815167ffffffffffffffff81116102e35761343f9201613442565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633036136e857565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b60028110613744577fc1ab6dc1000000000000000000000000000000000000000000000000000000005f5260045ffd5b61375590613750613aa3565b613387565b5190565b7f0000000000000000000000000000000000000000000000000000000000000000421015806137855790565b507f000000000000000000000000000000000000000000000000000000000000000042111590565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163014806138bc575b15613815577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff8211176106655760405251902090565b507f000000000000000000000000000000000000000000000000000000000000000046146137ec565b73ffffffffffffffffffffffffffffffffffffffff600654163303611ae157565b6040810190815161391d6060830191825190613387565b519251916139316080820193845190613387565b5191815161393e816132d1565b613947816132d1565b6139f25761396161395a60209251613714565b9451613714565b910151670de0b6b3a7640000948561397882613bc7565b0482116139ca5761398c6139929282613c18565b90614095565b8484029380850486149015171561133c576139b36139b9926139c695613c0e565b90613c25565b8381810391100290613bfb565b0490565b7f340a4533000000000000000000000000000000000000000000000000000000005f5260045ffd5b613a0c613a056020929593949551613714565b9251613714565b920151670de0b6b3a7640000613a2185613bc7565b048111613a7b5783039083821161133c57613a426139b392613a4895614095565b92614095565b7ffffffffffffffffffffffffffffffffffffffffffffffffff21f494c589c0000810190811161133c5761343f91613cb0565b7f64590b9f000000000000000000000000000000000000000000000000000000005f5260045ffd5b604051613aaf816130b1565b600281526040366020830137613b85613b52613b0b7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614a21565b7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614a66565b7f000000000000000000000000000000000000000000000000000000000000000090613b7e8285613387565b5282613387565b51670de0b6b3a764000090810390811161133c57613bc37f000000000000000000000000000000000000000000000000000000000000000083613387565b5290565b90670429d069189e00009182810292818404149015171561133c57565b906127109182810292818404149015171561133c57565b8181029291811591840414171561133c57565b8115612710570490565b9190820180921161133c57565b90670de0b6b3a764000090818103613c3c57505090565b671bc16d674ec800008103613c575750508061343f91613cb0565b673782dace9d9000008103613c7b575050613c758161343f92613cb0565b80613cb0565b613c8591926140ea565b906001613c9183613be4565b915f1983010401901515026001810180911161133c5761343f91613c18565b90613cba91613bfb565b6001670de0b6b3a76400005f19830104019015150290565b60ff8114613d265760ff811690601f8211613cfe5760405191613cf483613106565b8252602082015290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040515f815f5491613d3883613308565b80835292602090600190818116908115613dc15750600114613d63575b505061343f92500382613122565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b828410613da9575061343f9450505081016020015f80613d55565b85548785018301529485019486945092810192613d8e565b90506020935061343f9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f80613d55565b60ff8114613e265760ff811690601f8211613cfe5760405191613cf483613106565b506040515f81600191600154613e3b81613308565b8084529360209160018116908115613dc15750600114613e6357505061343f92500382613122565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b828410613eaa575061343f9450505081016020015f80613d55565b85548785018301529485019486945092810192613e8f565b670de0b6b3a764000091808303613ed95750905090565b8290671bc16d674ec800008103613ef6575050806139c691613bfb565b673782dace9d9000008103613f1a5750613f13826139c693613bfb565b0480613bfb565b9050613f25916140ea565b613f2e81613be4565b60015f1993848301040190151502906001820180831161133c57811015613f56575050505f90565b030190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411613fdf579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa1561060b575f5173ffffffffffffffffffffffffffffffffffffffff811615613fd557905f905f90565b505f906001905f90565b5050505f9160039190565b60048110156132db5780613ffc575050565b6001810361402c577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b6002810361406057507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b60031461406a5750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9080156126bd57670de0b6b3a76400009182810292818404149015171561133c576001905f19830104019015150290565b8015612710576ec097ce7bc90715b34b9f10000000000590565b8115612710570590565b908015614a13578115614a0d578160ff1c6149e557770bce5086492111aea88f4bb1ca6bcf584181ea8059f765328110156149bd5781670c7d713b49da000012806149ac575b1561464957670de0b6b3a7640000916ec097ce7bc90715b34b9f100000000090614183908402828101907fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f0000000000183026140e0565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b918082818507020592050201670de0b6b3a7640000905b057ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc00008181131580614636575b1561460e578190821215806145fb575b156145d3575f915f81126145c4575b506064906806f05b59d3b20000008112614561577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e0000000168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac62000000811215614528575b6856bc75e2d6310000008112156144ee575b682b5e3af16b188000008112156144b6575b6815af1d78b58c40000081121561447e575b680ad78ebc5ac6200000811215614447575b82811215614410575b6802b5e3af16b18800008112156143d9575b68015af1d78b58c400008112156143a2575b60028382800205056003848383020505600485848302050585600581868402050560068287830205056007838883020505906008848984020505926009858a8602050595600a868b8902050597600b878c8b02050599600c888d8d0205059b01010101010101010101010102050205905f1461343f5761343f906140c6565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c000084920192020590614323565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e78000084920192020590614311565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000849201920205906142ff565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000849201920205906142f6565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c00000849201920205906142e4565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e7800000849201920205906142d2565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf000000849201920205906142c0565b6e01855144814a7ff805980ff008400091507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e000000016142ae565b6803782dace9d900000081126145b1577ffffffffffffffffffffffffffffffffffffffffffffffffc87d25316270000000168056bc75e2d63100000826b1425982cf597cd205cef738092614299565b68056bc75e2d6310000082600192614299565b600192505f039050606461423d565b7fd4794efd000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c8000082131561422e565b7fa2f9f7e3000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c8000082131561421e565b81670de0b6b3a7640000925f91848112614996575b506064905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c000000000000082121561496b575b73011798004d755d3c8bc8e03204cf44619e00000082121561494a575b820290808302906e01855144814a7ff805980ff00840009081831215614927575b50506b02df0ab5a80a22c61ab5a70080821215614907575b50693f1fce3da636ea5cf850808212156148e7575b50690127fa27722cc06cc5e2808212156148c7575b5068280e60114edb805d03808212156148a7575b50680ebc5fb4174612111080821215614890575b506808f00f760a4b2db55d80821215614870575b506806f5f177578893793780821215614850575b506806248f33704b28660380821215614831575b506805c548670b9510e7ac80821215614812575b506147bf68056bc75e2d6310000091827ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf000008183019201026140e0565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b0105905f1461480d575f035b026141f2565b614807565b68056bc75e2d631000006756bc75e2d63100009202059101905f614783565b68056bc75e2d6310000067ad78ebc5ac6200009202059101905f61476f565b68056bc75e2d6310000068015af1d78b58c400009202059101905f61475b565b68056bc75e2d631000006802b5e3af16b18800009202059101905f614747565b68056bc75e2d63100000809202059101905f614733565b68056bc75e2d63100000680ad78ebc5ac62000009202059101905f61471f565b68056bc75e2d631000006815af1d78b58c4000009202059101905f61470b565b68056bc75e2d63100000682b5e3af16b188000009202059101905f6146f6565b68056bc75e2d631000006856bc75e2d6310000009202059101905f6146e1565b68ad78ebc5ac62000000925069021e19e0c9bab240000002059101905f806146c9565b906b1425982cf597cd205cef73806803782dace9d9000000910591016146a8565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b200000061468b565b90506149a291506140c6565b600190606461465e565b50670f43fc2c04ee00008212614130565b7fd8317311000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f022701e0000000000000000000000000000000000000000000000000000000005f5260045ffd5b50505f90565b5050670de0b6b3a764000090565b428211614a36575050670de0b6b3a764000090565b80421115614a0d5780420390670de0b6b3a764000080830292830414814214171561133c5761343f920390613c0e565b9190670de0b6b3a764000091828110801590614abf575b614ab8578015614ab2578382811115614aa25791614a9c920390613bfb565b04900390565b614aad920390613bfb565b040190565b50505090565b5091505090565b50818414614a7d56fea26469706673582212209e4fb2b2f58ca451fbb1ccd3091edb0dc3c888d67d9e60ec791f1bec06a724da64736f6c634300081b0033c2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b","opcodes":"PUSH2 0x440 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0xD1A JUMPI PUSH2 0x5C40 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x1E DUP3 PUSH2 0x440 PUSH2 0xD54 JUMP JUMPDEST PUSH2 0x440 CODECOPY DUP1 PUSH2 0x1E0 DUP2 SLT PUSH2 0xD1A JUMPI PUSH2 0x440 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0xD1A JUMPI PUSH2 0x51 SWAP1 DUP3 PUSH2 0x440 ADD SWAP1 PUSH2 0x440 ADD PUSH2 0xD77 JUMP JUMPDEST PUSH2 0x460 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0xD1A JUMPI PUSH2 0x79 PUSH2 0x140 SWAP2 DUP5 PUSH2 0x440 ADD SWAP1 PUSH2 0x440 ADD PUSH2 0xD77 JUMP JUMPDEST SWAP4 PUSH1 0x3F NOT ADD SLT PUSH2 0xD1A JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x140 DUP4 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP5 DUP3 LT OR PUSH2 0xB39 JUMPI PUSH1 0x40 MSTORE PUSH2 0xAC PUSH2 0x480 PUSH2 0xDCC JUMP JUMPDEST DUP4 MSTORE PUSH2 0xB9 PUSH2 0x4A0 PUSH2 0xDCC JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0xC9 PUSH2 0x4C0 PUSH2 0xDCC JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x4E0 MLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x500 MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x520 MLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x540 MLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x560 MLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x580 MLOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH2 0x5A0 MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0xD1A JUMPI PUSH2 0x120 DUP5 ADD MSTORE PUSH2 0x5C0 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0xD1A JUMPI PUSH2 0x137 PUSH2 0x5E0 PUSH2 0xDCC JUMP JUMPDEST PUSH2 0x600 MLOAD SWAP1 SWAP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0xD1A JUMPI PUSH2 0x15E SWAP2 PUSH2 0x440 ADD SWAP1 PUSH2 0x440 ADD PUSH2 0xD77 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP6 MLOAD AND SWAP6 PUSH1 0x60 PUSH1 0x80 PUSH1 0x40 MLOAD PUSH2 0x17A DUP2 PUSH2 0xD1E JUMP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE PUSH0 PUSH1 0x40 DUP3 ADD MSTORE DUP3 DUP1 DUP3 ADD MSTORE ADD MSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP8 ADD MLOAD AND PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP9 ADD MLOAD AND GT PUSH0 EQ PUSH2 0xD11 JUMPI PUSH0 SWAP5 PUSH1 0x1 JUMPDEST PUSH1 0x40 MLOAD SWAP7 PUSH2 0x1C3 DUP9 PUSH2 0xD39 JUMP JUMPDEST PUSH1 0x2 DUP9 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP11 ADD CALLDATACOPY PUSH2 0x1E1 PUSH1 0xFF PUSH1 0x60 DUP12 ADD MLOAD SWAP3 AND DUP10 PUSH2 0xDE0 JUMP JUMPDEST MSTORE PUSH2 0x1F4 PUSH1 0xFF PUSH1 0x80 DUP11 ADD MLOAD SWAP3 AND DUP9 PUSH2 0xDE0 JUMP JUMPDEST MSTORE PUSH1 0x40 MLOAD SWAP6 PUSH2 0x202 DUP8 PUSH2 0xD1E JUMP JUMPDEST DUP2 DUP8 MSTORE DUP3 PUSH1 0x20 DUP9 ADD MSTORE PUSH1 0x2 PUSH1 0x40 DUP9 ADD MSTORE PUSH1 0x60 DUP8 ADD MSTORE DUP4 PUSH1 0x80 DUP8 ADD MSTORE PUSH1 0x40 MLOAD PUSH1 0x40 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0xB39 JUMPI PUSH1 0x40 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD PUSH1 0x31 PUSH1 0xF8 SHL DUP2 MSTORE PUSH2 0x250 DUP4 PUSH2 0xE48 JUMP JUMPDEST PUSH2 0x120 MSTORE PUSH2 0x25D DUP3 PUSH2 0xFCB JUMP JUMPDEST PUSH2 0x140 MSTORE DUP3 MLOAD PUSH1 0x20 DUP5 ADD KECCAK256 SWAP2 DUP3 PUSH1 0xE0 MSTORE MLOAD SWAP1 KECCAK256 DUP1 PUSH2 0x100 MSTORE CHAINID PUSH1 0xA0 MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP5 MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0xB39 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 PUSH1 0x80 MSTORE ADDRESS PUSH1 0xC0 MSTORE PUSH2 0x160 DUP4 SWAP1 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0xB39 JUMPI PUSH1 0x3 SLOAD SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0xD07 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0xB1B JUMPI DUP2 PUSH1 0x1F DUP5 SWAP4 GT PUSH2 0xCAF JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0xC3A JUMPI PUSH0 SWAP3 PUSH2 0xC2F JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x3 SSTORE JUMPDEST DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0xB39 JUMPI PUSH1 0x4 SLOAD SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0xC25 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0xB1B JUMPI DUP2 PUSH1 0x1F DUP5 SWAP4 GT PUSH2 0xBCD JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0xB58 JUMPI PUSH0 SWAP3 PUSH2 0xB4D JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x4 SSTORE JUMPDEST PUSH2 0x180 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0xB39 JUMPI PUSH1 0x5 SLOAD SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0xB2F JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0xB1B JUMPI DUP2 PUSH1 0x1F DUP5 SWAP4 GT PUSH2 0xACD JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0xA45 JUMPI PUSH0 SWAP3 PUSH2 0xA3A JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x5 SSTORE JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD DUP1 PUSH2 0x1A0 MSTORE PUSH1 0x60 DUP4 ADD MLOAD MLOAD SUB PUSH2 0xA2B JUMPI PUSH0 SWAP3 PUSH0 JUMPDEST PUSH2 0x1A0 MLOAD PUSH1 0xFF DUP3 AND LT ISZERO PUSH2 0x53D JUMPI PUSH2 0x449 PUSH1 0xFF DUP3 AND PUSH1 0x60 DUP7 ADD MLOAD PUSH2 0xDE0 JUMP JUMPDEST MLOAD SWAP5 PUSH7 0x2386F26FC10000 DUP7 LT PUSH2 0x52E JUMPI DUP6 PUSH2 0x463 SWAP2 PUSH2 0xE3B JUMP JUMPDEST SWAP5 PUSH1 0xFF DUP3 AND PUSH2 0x49A JUMPI PUSH2 0x1C0 MSTORE JUMPDEST PUSH1 0xFF DUP1 DUP3 AND EQ PUSH2 0x486 JUMPI PUSH1 0xFF AND PUSH1 0x1 ADD PUSH2 0x42A JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0xFF DUP3 AND PUSH1 0x1 SUB PUSH2 0x4AE JUMPI PUSH2 0x1E0 MSTORE PUSH2 0x471 JUMP JUMPDEST PUSH1 0xFF DUP3 AND PUSH1 0x2 SUB PUSH2 0x4C2 JUMPI PUSH2 0x200 MSTORE PUSH2 0x471 JUMP JUMPDEST PUSH1 0xFF DUP3 AND PUSH1 0x3 SUB PUSH2 0x4D6 JUMPI PUSH2 0x220 MSTORE PUSH2 0x471 JUMP JUMPDEST PUSH1 0xFF DUP3 AND PUSH1 0x4 SUB PUSH2 0x4EA JUMPI PUSH2 0x240 MSTORE PUSH2 0x471 JUMP JUMPDEST PUSH1 0xFF DUP3 AND PUSH1 0x5 SUB PUSH2 0x4FE JUMPI PUSH2 0x260 MSTORE PUSH2 0x471 JUMP JUMPDEST PUSH1 0xFF DUP3 AND PUSH1 0x6 SUB PUSH2 0x512 JUMPI PUSH2 0x280 MSTORE PUSH2 0x471 JUMP JUMPDEST PUSH1 0x7 PUSH1 0xFF DUP4 AND EQ PUSH2 0x524 JUMPI JUMPDEST POP PUSH2 0x471 JUMP JUMPDEST PUSH2 0x2A0 MSTORE PUSH0 PUSH2 0x51E JUMP JUMPDEST PUSH4 0xBD393583 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP DUP5 PUSH8 0xDE0B6B3A7640000 DUP6 SUB PUSH2 0x9CD JUMPI DUP1 ISZERO PUSH2 0xA18 JUMPI PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x6 DUP1 SLOAD SWAP2 DUP3 AND DUP4 OR SWAP1 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 PUSH1 0xE0 DUP2 ADD MLOAD SWAP2 PUSH2 0x100 DUP3 ADD MLOAD SWAP3 PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD SWAP1 PUSH1 0xA0 DUP6 ADD MLOAD SWAP2 PUSH1 0xC0 DUP7 ADD MLOAD SWAP2 PUSH7 0x2386F26FC10000 DUP1 DUP3 LT SWAP1 DUP2 ISZERO PUSH2 0xA0E JUMPI JUMPDEST DUP2 ISZERO PUSH2 0xA04 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x9FA JUMPI JUMPDEST POP PUSH2 0x52E JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH2 0x5FC SWAP2 PUSH2 0xE3B JUMP JUMPDEST EQ SWAP2 DUP3 ISZERO SWAP3 PUSH2 0x9DC JUMPI JUMPDEST POP POP PUSH2 0x9CD JUMPI DUP1 TIMESTAMP GT PUSH0 EQ PUSH2 0x9C8 JUMPI POP TIMESTAMP JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x9B1 JUMPI PUSH2 0x360 MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH2 0x380 MSTORE PUSH2 0x2C0 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH2 0x2E0 MSTORE PUSH1 0x40 DUP4 ADD DUP1 MLOAD DUP3 AND PUSH2 0x300 MSTORE PUSH2 0x120 DUP5 ADD MLOAD ISZERO ISZERO PUSH2 0x420 MSTORE PUSH1 0x60 DUP5 ADD MLOAD PUSH2 0x3A0 MSTORE PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x3C0 MSTORE PUSH1 0xA0 DUP5 ADD MLOAD PUSH2 0x3E0 MSTORE PUSH1 0xC0 DUP5 ADD MLOAD PUSH2 0x400 MSTORE SWAP2 MLOAD SWAP2 MLOAD PUSH32 0xF3631F9DAB08169D1DB21C6DC5F32536FB2B0A6B9BB5330D71C52132F968BE0 SWAP5 POP SWAP2 DUP2 AND SWAP2 AND GT ISZERO PUSH2 0x9A6 JUMPI PUSH1 0xFF PUSH0 DUP2 PUSH1 0x1 JUMPDEST AND PUSH2 0x340 MSTORE AND PUSH2 0x320 MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH2 0x6D3 DUP3 PUSH2 0xD39 JUMP JUMPDEST PUSH1 0x2 DUP3 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH1 0x40 MLOAD SWAP1 PUSH2 0x6EC DUP3 PUSH2 0xD39 JUMP JUMPDEST PUSH1 0x2 DUP3 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH1 0x60 DUP2 ADD MLOAD PUSH2 0x71E PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x320 MLOAD SWAP1 PUSH2 0x717 PUSH2 0x340 MLOAD DUP9 PUSH2 0xDE0 JUMP JUMPDEST MSTORE DUP6 PUSH2 0xDE0 JUMP JUMPDEST MSTORE PUSH2 0x745 PUSH1 0xC0 PUSH1 0xA0 DUP4 ADD MLOAD SWAP3 ADD MLOAD PUSH2 0x320 MLOAD SWAP1 PUSH2 0x73E PUSH2 0x340 MLOAD DUP7 PUSH2 0xDE0 JUMP JUMPDEST MSTORE DUP4 PUSH2 0xDE0 JUMP JUMPDEST MSTORE PUSH2 0x782 PUSH2 0x360 MLOAD SWAP2 PUSH2 0x774 PUSH2 0x380 MLOAD SWAP5 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP6 DUP7 MSTORE PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x80 PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD SWAP1 PUSH2 0xE08 JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0xE08 JUMP JUMPDEST SUB SWAP1 LOG1 PUSH1 0x40 MLOAD PUSH2 0x4AFE PUSH2 0x1102 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x37F3 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 PUSH2 0x38BF ADD MSTORE PUSH1 0xC0 MLOAD DUP2 PUSH2 0x37C4 ADD MSTORE PUSH1 0xE0 MLOAD DUP2 PUSH2 0x3842 ADD MSTORE PUSH2 0x100 MLOAD DUP2 PUSH2 0x3868 ADD MSTORE PUSH2 0x120 MLOAD DUP2 PUSH2 0x16D0 ADD MSTORE PUSH2 0x140 MLOAD DUP2 PUSH2 0x16F9 ADD MSTORE PUSH2 0x160 MLOAD DUP2 DUP2 DUP2 PUSH2 0x449 ADD MSTORE DUP2 DUP2 PUSH2 0x742 ADD MSTORE DUP2 DUP2 PUSH2 0xA0C ADD MSTORE DUP2 DUP2 PUSH2 0x11A3 ADD MSTORE DUP2 DUP2 PUSH2 0x1697 ADD MSTORE DUP2 DUP2 PUSH2 0x1DA9 ADD MSTORE DUP2 DUP2 PUSH2 0x243A ADD MSTORE DUP2 DUP2 PUSH2 0x289E ADD MSTORE DUP2 DUP2 PUSH2 0x34EC ADD MSTORE PUSH2 0x36C0 ADD MSTORE PUSH2 0x180 MLOAD DUP2 DUP2 DUP2 PUSH2 0xB21 ADD MSTORE DUP2 DUP2 PUSH2 0xD45 ADD MSTORE DUP2 DUP2 PUSH2 0xE50 ADD MSTORE DUP2 DUP2 PUSH2 0x10A2 ADD MSTORE PUSH2 0x180F ADD MSTORE PUSH2 0x1A0 MLOAD DUP2 POP POP PUSH2 0x1C0 MLOAD DUP2 POP POP PUSH2 0x1E0 MLOAD DUP2 POP POP PUSH2 0x200 MLOAD DUP2 POP POP PUSH2 0x220 MLOAD DUP2 POP POP PUSH2 0x240 MLOAD DUP2 POP POP PUSH2 0x260 MLOAD DUP2 POP POP PUSH2 0x280 MLOAD DUP2 POP POP PUSH2 0x2A0 MLOAD DUP2 POP POP PUSH2 0x2C0 MLOAD DUP2 DUP2 DUP2 PUSH2 0xDD3 ADD MSTORE DUP2 DUP2 PUSH2 0x214E ADD MSTORE PUSH2 0x2530 ADD MSTORE PUSH2 0x2E0 MLOAD DUP2 PUSH2 0x205D ADD MSTORE PUSH2 0x300 MLOAD DUP2 PUSH2 0x3A1 ADD MSTORE PUSH2 0x320 MLOAD DUP2 DUP2 DUP2 PUSH2 0x190C ADD MSTORE DUP2 DUP2 PUSH2 0x1C66 ADD MSTORE DUP2 DUP2 PUSH2 0x2905 ADD MSTORE PUSH2 0x3B54 ADD MSTORE PUSH2 0x340 MLOAD DUP2 DUP2 DUP2 PUSH2 0x18EB ADD MSTORE DUP2 DUP2 PUSH2 0x292F ADD MSTORE PUSH2 0x3B9E ADD MSTORE PUSH2 0x360 MLOAD DUP2 DUP2 DUP2 PUSH2 0x19FC ADD MSTORE DUP2 DUP2 PUSH2 0x210C ADD MSTORE DUP2 DUP2 PUSH2 0x24C7 ADD MSTORE DUP2 DUP2 PUSH2 0x29C6 ADD MSTORE DUP2 DUP2 PUSH2 0x375B ADD MSTORE PUSH2 0x3AE7 ADD MSTORE PUSH2 0x380 MLOAD DUP2 DUP2 DUP2 PUSH2 0xC72 ADD MSTORE DUP2 DUP2 PUSH2 0x1A1F ADD MSTORE DUP2 DUP2 PUSH2 0x29EC ADD MSTORE DUP2 DUP2 PUSH2 0x3788 ADD MSTORE PUSH2 0x3AC6 ADD MSTORE PUSH2 0x3A0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x1959 ADD MSTORE DUP2 DUP2 PUSH2 0x2A34 ADD MSTORE PUSH2 0x3B2E ADD MSTORE PUSH2 0x3C0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x192D ADD MSTORE PUSH2 0x2A5C ADD MSTORE PUSH2 0x3E0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x19CD ADD MSTORE DUP2 DUP2 PUSH2 0x2AAE ADD MSTORE PUSH2 0x3B0D ADD MSTORE PUSH2 0x400 MLOAD DUP2 DUP2 DUP2 PUSH2 0x19A1 ADD MSTORE PUSH2 0x2AD9 ADD MSTORE PUSH2 0x420 MLOAD DUP2 DUP2 DUP2 PUSH2 0x1613 ADD MSTORE DUP2 DUP2 PUSH2 0x1BFB ADD MSTORE PUSH2 0x299D ADD MSTORE PUSH2 0x4AFE SWAP1 RETURN JUMPDEST PUSH1 0xFF PUSH1 0x1 DUP2 PUSH0 PUSH2 0x6BC JUMP JUMPDEST DUP4 SWAP1 PUSH4 0x7D0356F3 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x618 JUMP JUMPDEST PUSH4 0x1CE788A7 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP3 POP SWAP1 PUSH2 0x9F1 SWAP2 PUSH2 0xE3B JUMP JUMPDEST EQ ISZERO DUP6 DUP1 PUSH2 0x606 JUMP JUMPDEST SWAP1 POP DUP4 LT DUP10 PUSH2 0x5E4 JUMP JUMPDEST DUP1 DUP7 LT SWAP2 POP PUSH2 0x5DD JUMP JUMPDEST DUP1 DUP5 LT SWAP2 POP PUSH2 0x5D6 JUMP JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0xAAAD13F7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x3FC JUMP JUMPDEST PUSH1 0x5 PUSH0 SWAP1 DUP2 MSTORE SWAP4 POP PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 SWAP2 SWAP1 JUMPDEST PUSH1 0x1F NOT DUP5 AND DUP6 LT PUSH2 0xAB2 JUMPI PUSH1 0x1 SWAP5 POP DUP4 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0xA9A JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x5 SSTORE PUSH2 0x411 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0xA8C JUMP JUMPDEST DUP2 DUP2 ADD MLOAD DUP4 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xA71 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP6 LT PUSH2 0xB14 JUMPI JUMPDEST SWAP1 DUP5 SWAP4 SWAP3 SWAP2 JUMPDEST PUSH1 0x1F DUP4 ADD PUSH1 0x5 SHR DUP3 ADD DUP2 LT PUSH2 0xB06 JUMPI POP POP PUSH2 0x3E6 JUMP JUMPDEST PUSH0 DUP2 SSTORE DUP6 SWAP5 POP PUSH1 0x1 ADD PUSH2 0xAF0 JUMP JUMPDEST POP DUP1 PUSH2 0xAEA JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x3D2 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x396 JUMP JUMPDEST PUSH1 0x4 PUSH0 SWAP1 DUP2 MSTORE SWAP4 POP PUSH0 MLOAD PUSH1 0x20 PUSH2 0x5C20 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE SWAP2 SWAP1 JUMPDEST PUSH1 0x1F NOT DUP5 AND DUP6 LT PUSH2 0xBB2 JUMPI PUSH1 0x1 SWAP5 POP DUP4 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0xB9A JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x4 SSTORE PUSH2 0x3AB JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0xB8C JUMP JUMPDEST DUP2 DUP2 ADD MLOAD DUP4 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xB71 JUMP JUMPDEST PUSH1 0x4 PUSH0 MSTORE SWAP1 SWAP2 POP PUSH0 MLOAD PUSH1 0x20 PUSH2 0x5C20 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP6 LT PUSH2 0xC1E JUMPI JUMPDEST SWAP1 DUP5 SWAP4 SWAP3 SWAP2 JUMPDEST PUSH1 0x1F DUP4 ADD PUSH1 0x5 SHR DUP3 ADD DUP2 LT PUSH2 0xC10 JUMPI POP POP PUSH2 0x380 JUMP JUMPDEST PUSH0 DUP2 SSTORE DUP6 SWAP5 POP PUSH1 0x1 ADD PUSH2 0xBFA JUMP JUMPDEST POP DUP1 PUSH2 0xBF4 JUMP JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x36C JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x334 JUMP JUMPDEST PUSH1 0x3 PUSH0 SWAP1 DUP2 MSTORE SWAP4 POP PUSH0 MLOAD PUSH1 0x20 PUSH2 0x5C00 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE SWAP2 SWAP1 JUMPDEST PUSH1 0x1F NOT DUP5 AND DUP6 LT PUSH2 0xC94 JUMPI PUSH1 0x1 SWAP5 POP DUP4 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0xC7C JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x3 SSTORE PUSH2 0x349 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0xC6E JUMP JUMPDEST DUP2 DUP2 ADD MLOAD DUP4 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xC53 JUMP JUMPDEST PUSH1 0x3 PUSH0 MSTORE SWAP1 SWAP2 POP PUSH0 MLOAD PUSH1 0x20 PUSH2 0x5C00 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP6 LT PUSH2 0xD00 JUMPI JUMPDEST SWAP1 DUP5 SWAP4 SWAP3 SWAP2 JUMPDEST PUSH1 0x1F DUP4 ADD PUSH1 0x5 SHR DUP3 ADD DUP2 LT PUSH2 0xCF2 JUMPI POP POP PUSH2 0x31E JUMP JUMPDEST PUSH0 DUP2 SSTORE DUP6 SWAP5 POP PUSH1 0x1 ADD PUSH2 0xCDC JUMP JUMPDEST POP DUP1 PUSH2 0xCD6 JUMP JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x30A JUMP JUMPDEST PUSH1 0x1 SWAP5 PUSH0 PUSH2 0x1B6 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0xA0 DUP2 ADD SWAP1 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0xB39 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0xB39 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0xB39 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0xD1A JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0xB39 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0xDAB PUSH1 0x1F DUP5 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP6 PUSH2 0xD54 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0xD1A JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0xD1A JUMPI JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0xDF4 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0xE27 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0xE19 JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x486 JUMPI JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0xEBE JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0xE80 JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0xE72 JUMPI POP OR SWAP1 JUMP JUMPDEST DUP3 PUSH0 NOT SWAP2 SUB PUSH1 0x3 SHL SHL AND OR SWAP1 JUMP JUMPDEST PUSH1 0x44 DUP3 PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH4 0x305A27A9 PUSH1 0xE0 SHL DUP4 MSTORE DUP2 PUSH1 0x4 DUP5 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH1 0x24 DUP7 ADD MSTORE ADD DUP5 DUP5 ADD MCOPY PUSH0 DUP3 DUP3 ADD DUP5 ADD MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP2 ADD SUB ADD SWAP1 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0xB39 JUMPI PUSH0 SLOAD SWAP3 PUSH1 0x1 SWAP4 DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0xFC1 JUMPI JUMPDEST DUP4 DUP3 LT EQ PUSH2 0xB1B JUMPI PUSH1 0x1F DUP2 GT PUSH2 0xF8E JUMPI JUMPDEST POP DUP2 PUSH1 0x1F DUP5 GT PUSH1 0x1 EQ PUSH2 0xF2C JUMPI POP SWAP3 DUP3 SWAP4 SWAP2 DUP4 SWAP3 PUSH0 SWAP5 PUSH2 0xF21 JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0xF0C JUMP JUMPDEST SWAP2 SWAP1 DUP4 PUSH1 0x1F NOT DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0xF74 JUMPI POP POP POP LT PUSH2 0xF5C JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0xF4F JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0xF3E JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP5 PUSH1 0x1F DUP5 PUSH0 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 PUSH1 0x1F DUP7 ADD PUSH1 0x5 SHR ADD JUMPDEST DUP3 DUP2 LT PUSH2 0xFB6 JUMPI POP POP PUSH2 0xEF1 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0xFA8 JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xEE0 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0xFF5 JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0xE80 JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0xE72 JUMPI POP OR SWAP1 JUMP JUMPDEST SWAP2 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0xB39 JUMPI PUSH1 0x1 SWAP2 DUP3 SLOAD DUP4 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x10F7 JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0xB1B JUMPI PUSH1 0x1F DUP2 GT PUSH2 0x10C4 JUMPI JUMPDEST POP DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0x1064 JUMPI POP DUP2 SWAP3 SWAP4 SWAP5 PUSH0 SWAP3 PUSH2 0x1059 JUMPI JUMPDEST POP POP PUSH0 NOT PUSH1 0x3 DUP4 SWAP1 SHL SHR NOT AND SWAP1 DUP3 SHL OR SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x1042 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT DUP4 AND SWAP6 DUP5 PUSH0 MSTORE DUP3 PUSH0 KECCAK256 SWAP3 PUSH0 SWAP1 JUMPDEST DUP9 DUP3 LT PUSH2 0x10AD JUMPI POP POP DUP4 DUP6 SWAP7 SWAP8 LT PUSH2 0x1095 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x1088 JUMP JUMPDEST DUP1 DUP8 DUP6 SWAP7 DUP3 SWAP5 SWAP7 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP6 ADD SWAP4 ADD SWAP1 PUSH2 0x1075 JUMP JUMPDEST DUP4 PUSH0 MSTORE DUP4 PUSH1 0x1F DUP4 PUSH0 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR ADD JUMPDEST DUP3 DUP2 LT PUSH2 0x10EC JUMPI POP POP PUSH2 0x1029 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP5 SWAP1 PUSH2 0x10DE JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x1018 JUMP INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x2FC2 JUMPI POP DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x2F19 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x2E9C JUMPI DUP1 PUSH4 0xB89F182 EQ PUSH2 0x2C62 JUMPI DUP1 PUSH4 0xCA89848 EQ PUSH2 0x2822 JUMPI DUP1 PUSH4 0x16A0B3E0 EQ PUSH2 0x25EE JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x25D4 JUMPI DUP1 PUSH4 0x18B6EB55 EQ PUSH2 0x2594 JUMPI DUP1 PUSH4 0x1C149E28 EQ PUSH2 0x2471 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x23C9 JUMPI DUP1 PUSH4 0x23DE6651 EQ PUSH2 0x2398 JUMPI DUP1 PUSH4 0x273C1ADF EQ PUSH2 0x2376 JUMPI DUP1 PUSH4 0x2754888D EQ PUSH2 0x230D JUMPI DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x22D3 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x22B8 JUMPI DUP1 PUSH4 0x351A964D EQ PUSH2 0x2294 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x227A JUMPI DUP1 PUSH4 0x38BE241D EQ PUSH2 0x222F JUMPI DUP1 PUSH4 0x45421EC7 EQ PUSH2 0x2081 JUMPI DUP1 PUSH4 0x4837C596 EQ PUSH2 0x2031 JUMPI DUP1 PUSH4 0x5211FA77 EQ PUSH2 0x1FEE JUMPI DUP1 PUSH4 0x53B79BD7 EQ PUSH2 0x1F9C JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x1EF3 JUMPI DUP1 PUSH4 0x5687F2B8 EQ PUSH2 0x1E92 JUMPI DUP1 PUSH4 0x627CDCB9 EQ PUSH2 0x1E69 JUMPI DUP1 PUSH4 0x654CF15D EQ PUSH2 0x1E47 JUMPI DUP1 PUSH4 0x679AEFCE EQ PUSH2 0x1E0F JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1D3C JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x1CB5 JUMPI DUP1 PUSH4 0x72C98186 EQ PUSH2 0x1B0D JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x1A54 JUMPI DUP1 PUSH4 0x7BEED220 EQ PUSH2 0x18BB JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x1876 JUMPI DUP1 PUSH4 0x81FA807C EQ PUSH2 0x17B3 JUMPI DUP1 PUSH4 0x84B0196E EQ PUSH2 0x16BB JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x166B JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x1638 JUMPI DUP1 PUSH4 0x95146EFB EQ PUSH2 0x15FC JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x1500 JUMPI DUP1 PUSH4 0x976907CC EQ PUSH2 0x1448 JUMPI DUP1 PUSH4 0x984DE9E8 EQ PUSH2 0x125A JUMPI DUP1 PUSH4 0xA0E8F5AC EQ PUSH2 0x1212 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x110C JUMPI DUP1 PUSH4 0xAA6CA808 EQ PUSH2 0x104A JUMPI DUP1 PUSH4 0xABB1DC44 EQ PUSH2 0xDF7 JUMPI DUP1 PUSH4 0xAF905D15 EQ PUSH2 0xDA7 JUMPI DUP1 PUSH4 0xB156AA0A EQ PUSH2 0xCED JUMPI DUP1 PUSH4 0xB677FA56 EQ PUSH2 0xCCB JUMPI DUP1 PUSH4 0xBA5F9F40 EQ PUSH2 0xBE6 JUMPI DUP1 PUSH4 0xC0BC6F33 EQ PUSH2 0xB7A JUMPI DUP1 PUSH4 0xCE20ECE7 EQ PUSH2 0xB5A JUMPI DUP1 PUSH4 0xD335B0CF EQ PUSH2 0xAC8 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x86C JUMPI DUP1 PUSH4 0xD77153A7 EQ PUSH2 0x7AF JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x6C5 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x692 JUMPI DUP1 PUSH4 0xE565C29E EQ PUSH2 0x3C5 JUMPI DUP1 PUSH4 0xE594203D EQ PUSH2 0x375 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x2E7 JUMPI PUSH4 0xF89F27ED EQ PUSH2 0x2B0 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x2DF PUSH2 0x2CB PUSH2 0x3AA3 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x315D JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x300 PUSH2 0x304F JUMP JUMPDEST PUSH2 0x308 PUSH2 0x38E5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x7 SLOAD AND OR PUSH1 0x7 SSTORE PUSH1 0x6 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH2 0x100 SWAP1 DUP2 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x665 JUMPI PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 ADD SWAP1 PUSH1 0x60 DUP3 MSTORE PUSH1 0x40 DUP2 ADD SWAP2 PUSH0 DUP4 MSTORE PUSH1 0x60 DUP3 ADD PUSH0 DUP2 MSTORE PUSH1 0x80 DUP4 ADD PUSH0 DUP2 MSTORE PUSH1 0xA0 DUP5 ADD SWAP1 PUSH0 DUP3 MSTORE PUSH1 0xC0 DUP6 ADD SWAP3 PUSH0 DUP5 MSTORE PUSH1 0xE0 DUP7 ADD SWAP5 PUSH0 DUP7 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 PUSH1 0x40 MLOAD PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x60B JUMPI PUSH0 SWAP2 PUSH2 0x643 JUMPI JUMPDEST POP DUP9 MSTORE PUSH2 0x4B7 PUSH2 0x3AA3 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x40 MLOAD PUSH32 0xB45090F900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP11 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x60B JUMPI PUSH0 SWAP2 PUSH2 0x616 JUMPI JUMPDEST POP DUP10 MSTORE PUSH2 0x506 PUSH2 0x34A3 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x40 MLOAD DUP1 SWAP3 PUSH32 0xF29486A100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP2 PUSH1 0x24 PUSH2 0x1A0 SWAP4 DUP5 SWAP4 GAS STATICCALL SWAP9 DUP10 ISZERO PUSH2 0x60B JUMPI DUP13 SWAP10 PUSH2 0x5AE SWAP5 PUSH2 0x59B SWAP4 PUSH0 SWAP3 PUSH2 0x5DE JUMPI JUMPDEST POP POP PUSH1 0xE0 DUP2 ADD MLOAD ISZERO ISZERO DUP8 MSTORE DUP11 DUP2 ADD MLOAD ISZERO ISZERO DUP9 MSTORE PUSH2 0x120 DUP1 SWAP2 ADD MLOAD ISZERO ISZERO DUP10 MSTORE PUSH2 0x57F PUSH2 0x3759 JUMP JUMPDEST ISZERO ISZERO DUP11 MSTORE PUSH1 0x40 MLOAD SWAP14 DUP14 DUP16 SWAP15 SWAP4 DUP16 SWAP5 DUP6 MSTORE MLOAD SWAP4 ADD MSTORE DUP13 ADD SWAP1 PUSH2 0x315D JUMP JUMPDEST SWAP1 MLOAD PUSH1 0x1F NOT DUP12 DUP4 SUB ADD PUSH1 0x40 DUP13 ADD MSTORE PUSH2 0x315D JUMP JUMPDEST SWAP7 MLOAD PUSH1 0x60 DUP10 ADD MSTORE MLOAD PUSH1 0x80 DUP9 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xA0 DUP8 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xC0 DUP7 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xE0 DUP6 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST PUSH2 0x5FD SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x604 JUMPI JUMPDEST PUSH2 0x5F5 DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x357A JUMP JUMPDEST DUP15 DUP1 PUSH2 0x559 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x5EB JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 POP DUP11 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x63C JUMPI JUMPDEST PUSH2 0x62D DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x2E3 JUMPI MLOAD DUP13 PUSH2 0x4FB JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x623 JUMP JUMPDEST PUSH2 0x65F SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x657 DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3683 JUMP JUMPDEST DUP13 PUSH2 0x4AC JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x7 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x6DE PUSH2 0x304F JUMP JUMPDEST PUSH1 0x20 PUSH2 0x6E8 PUSH2 0x3072 JUMP JUMPDEST SWAP2 PUSH1 0x64 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP1 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0x927DA10500000000000000000000000000000000000000000000000000000000 DUP7 MSTORE ADDRESS PUSH1 0x4 DUP8 ADD MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE AND PUSH1 0x44 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x60B JUMPI PUSH0 SWAP1 PUSH2 0x77C JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x7A7 JUMPI JUMPDEST DUP2 PUSH2 0x796 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH2 0x771 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x789 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x140 PUSH1 0x40 MLOAD PUSH2 0x7CE DUP2 PUSH2 0x30E9 JUMP JUMPDEST PUSH0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH0 DUP2 MSTORE PUSH1 0x60 DUP3 ADD PUSH0 DUP2 MSTORE PUSH1 0x80 DUP4 ADD SWAP1 PUSH0 DUP3 MSTORE PUSH1 0xA0 DUP5 ADD PUSH0 DUP2 MSTORE PUSH1 0xC0 DUP6 ADD PUSH1 0xE0 DUP7 ADD SWAP2 PUSH0 DUP4 MSTORE PUSH2 0x100 SWAP5 DUP6 DUP9 ADD SWAP5 PUSH2 0x120 DUP1 SWAP10 ADD SWAP8 PUSH0 DUP10 MSTORE PUSH1 0x1 DUP12 MSTORE PUSH1 0x1 DUP6 MSTORE PUSH1 0x1 DUP8 MSTORE PUSH1 0x40 MLOAD SWAP11 PUSH0 DUP13 MSTORE MLOAD ISZERO ISZERO PUSH1 0x20 DUP13 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x40 DUP12 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x60 DUP11 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x80 DUP10 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xA0 DUP9 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xC0 DUP8 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xE0 DUP7 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP5 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x885 PUSH2 0x304F JUMP JUMPDEST PUSH2 0x88D PUSH2 0x3072 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 PUSH1 0x84 CALLDATALOAD SWAP2 SWAP1 PUSH1 0x64 CALLDATALOAD PUSH1 0xFF DUP5 AND DUP5 SUB PUSH2 0x2E3 JUMPI DUP1 TIMESTAMP GT PUSH2 0xA9D JUMPI PUSH2 0x8DB DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH1 0x1 DUP3 ADD SWAP1 SSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x9AA PUSH2 0x9A1 PUSH1 0x40 MLOAD SWAP7 PUSH1 0x20 DUP9 ADD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP9 DUP10 SWAP6 DUP7 DUP10 AND SWAP8 DUP9 PUSH1 0x40 DUP5 ADD MSTORE DUP8 DUP12 AND PUSH1 0x60 DUP5 ADD MSTORE DUP13 PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 MSTORE PUSH2 0x954 DUP2 PUSH2 0x30CD JUMP JUMPDEST MLOAD SWAP1 KECCAK256 PUSH2 0x95F PUSH2 0x37AD JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x2 DUP4 ADD MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0xC4 CALLDATALOAD SWAP2 PUSH1 0x42 PUSH1 0xA4 CALLDATALOAD SWAP3 KECCAK256 PUSH2 0x3F5B JUMP JUMPDEST SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x3FEA JUMP JUMPDEST AND DUP2 DUP2 SUB PUSH2 0xA6F JUMPI PUSH1 0x40 MLOAD PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP6 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x20 DUP2 PUSH1 0x64 DUP2 PUSH0 PUSH32 0x0 DUP12 AND GAS CALL DUP1 ISZERO PUSH2 0x60B JUMPI PUSH2 0xA3B JUMPI STOP JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xA67 JUMPI JUMPDEST DUP2 PUSH2 0xA54 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x2E3 JUMPI PUSH2 0xA65 SWAP1 PUSH2 0x3359 JUMP JUMPDEST STOP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xA47 JUMP JUMPDEST PUSH32 0x4B800E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH32 0x6279130200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH32 0xB45090F900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x60B JUMPI PUSH0 SWAP1 PUSH2 0x77C JUMPI PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH6 0x9184E72A000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0xC0 PUSH1 0x40 MLOAD PUSH2 0xB99 DUP2 PUSH2 0x30CD JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE ADD MSTORE PUSH32 0xD623472500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0xBFF PUSH2 0x304F JUMP JUMPDEST POP PUSH2 0xC08 PUSH2 0x3072 JUMP JUMPDEST POP PUSH1 0x4 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x2E3 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0xC35 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST POP PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0xC4E SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST POP PUSH1 0xC4 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0xC67 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x31F0 JUMP JUMPDEST POP PUSH2 0xC70 PUSH2 0x36A9 JUMP JUMPDEST PUSH32 0x0 TIMESTAMP GT ISZERO PUSH2 0xCA3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH32 0xF38B577000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x9B6E64A8EC60000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x60B JUMPI PUSH2 0x2DF SWAP2 PUSH0 SWAP2 PUSH2 0xD8D JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x315D JUMP JUMPDEST PUSH2 0xDA1 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x657 DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP3 PUSH2 0xD78 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0x67E0E07600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x60B JUMPI PUSH0 SWAP2 PUSH0 SWAP4 PUSH0 SWAP2 PUSH0 SWAP4 PUSH2 0xF1C JUMPI JUMPDEST POP PUSH2 0xE9B PUSH1 0x40 MLOAD SWAP5 PUSH1 0x80 DUP7 MSTORE PUSH1 0x80 DUP7 ADD SWAP1 PUSH2 0x3288 JUMP JUMPDEST PUSH1 0x20 DUP6 DUP3 SUB DUP2 DUP8 ADD MSTORE DUP1 DUP1 DUP9 MLOAD SWAP4 DUP5 DUP2 MSTORE ADD SWAP8 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0xEE0 JUMPI DUP8 DUP1 PUSH2 0x2DF DUP10 PUSH2 0xED2 DUP14 DUP12 DUP6 DUP3 SUB PUSH1 0x40 DUP8 ADD MSTORE PUSH2 0x315D JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x315D JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP8 DUP4 PUSH1 0x60 PUSH1 0x1 SWAP3 PUSH1 0x40 DUP13 MLOAD DUP1 MLOAD PUSH2 0xEFA DUP2 PUSH2 0x32D1 JUMP JUMPDEST DUP4 MSTORE DUP1 DUP6 ADD MLOAD DUP8 AND DUP6 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP10 ADD SWAP5 SWAP4 SWAP3 ADD SWAP1 PUSH2 0xEB3 JUMP JUMPDEST SWAP5 POP SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0xF31 DUP2 DUP5 PUSH2 0x3122 JUMP JUMPDEST DUP3 ADD SWAP1 PUSH1 0x80 DUP4 DUP4 SUB SLT PUSH2 0x2E3 JUMPI DUP3 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP2 GT PUSH2 0x2E3 JUMPI DUP4 PUSH2 0xF5E SWAP2 DUP4 ADD PUSH2 0x339B JUMP JUMPDEST SWAP1 PUSH1 0x20 SWAP4 DUP5 DUP3 ADD MLOAD DUP7 DUP2 GT PUSH2 0x2E3 JUMPI DUP3 ADD DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x2E3 JUMPI DUP1 MLOAD SWAP1 PUSH2 0xF86 DUP3 PUSH2 0x3145 JUMP JUMPDEST SWAP7 PUSH2 0xF94 PUSH1 0x40 MLOAD SWAP9 DUP10 PUSH2 0x3122 JUMP JUMPDEST DUP3 DUP9 MSTORE DUP1 DUP9 ADD DUP2 PUSH1 0x60 DUP1 SWAP6 MUL DUP5 ADD ADD SWAP3 DUP6 DUP5 GT PUSH2 0x2E3 JUMPI DUP3 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0xFF5 JUMPI POP POP POP POP POP PUSH1 0x40 DUP3 ADD MLOAD DUP7 DUP2 GT PUSH2 0x2E3 JUMPI DUP2 PUSH2 0xFD3 SWAP2 DUP5 ADD PUSH2 0x3442 JUMP JUMPDEST SWAP6 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0xFEA SWAP3 ADD PUSH2 0x3442 JUMP JUMPDEST SWAP1 SWAP3 SWAP4 SWAP1 SWAP2 DUP6 PUSH2 0xE85 JUMP JUMPDEST DUP5 DUP3 DUP8 SUB SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0x100B DUP3 PUSH2 0x30B1 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2E3 JUMPI DUP3 MSTORE DUP4 DUP4 ADD MLOAD SWAP1 DUP11 DUP3 AND DUP3 SUB PUSH2 0x2E3 JUMPI DUP3 DUP6 SWAP3 DUP4 DUP10 SWAP6 ADD MSTORE PUSH2 0x103A PUSH1 0x40 DUP7 ADD PUSH2 0x3359 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0xFAF JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x60B JUMPI PUSH2 0x2DF SWAP2 PUSH0 SWAP2 PUSH2 0x10EA JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x3288 JUMP JUMPDEST PUSH2 0x1106 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x10FE DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3419 JUMP JUMPDEST DUP3 PUSH2 0x10D5 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x1189 PUSH1 0x20 PUSH2 0x112A PUSH2 0x304F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xBEABACC800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x24 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLDATALOAD PUSH1 0x44 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x60B JUMPI PUSH2 0x11DB JUMPI JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x120A JUMPI JUMPDEST DUP2 PUSH2 0x11F4 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x2E3 JUMPI PUSH2 0x1205 SWAP1 PUSH2 0x3359 JUMP JUMPDEST PUSH2 0x11D0 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x11E7 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x3 NOT PUSH1 0x60 DUP2 CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x2E3 JUMPI PUSH1 0xE0 SWAP2 CALLDATASIZE SUB ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x124A PUSH2 0x3072 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH0 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x128B SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2E3 JUMPI PUSH2 0x12A0 DUP2 PUSH2 0x32D1 JUMP JUMPDEST PUSH2 0x1441 JUMPI PUSH1 0x4 JUMPDEST PUSH2 0x12AF PUSH2 0x3AA3 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x3 EQ PUSH2 0x13ED JUMPI DUP1 PUSH1 0x4 EQ PUSH2 0x1369 JUMPI DUP1 PUSH1 0x1 EQ PUSH2 0x1310 JUMPI PUSH1 0x2 EQ PUSH2 0x12FC JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x51 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x20 SWAP2 PUSH2 0x1308 SWAP2 PUSH2 0x4095 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x133C JUMPI PUSH1 0x20 SWAP2 PUSH2 0x1337 SWAP2 PUSH2 0x3C0E JUMP JUMPDEST PUSH2 0x1308 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP PUSH0 SWAP2 SWAP1 PUSH8 0xDE0B6B3A7640000 JUMPDEST DUP2 MLOAD DUP5 LT ISZERO PUSH2 0x13B3 JUMPI PUSH2 0x13AB PUSH1 0x1 SWAP2 PUSH2 0x13A5 PUSH2 0x1393 DUP8 DUP8 PUSH2 0x3387 JUMP JUMPDEST MLOAD PUSH2 0x139E DUP9 DUP8 PUSH2 0x3387 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x3C25 JUMP JUMPDEST SWAP1 PUSH2 0x3CB0 JUMP JUMPDEST SWAP4 ADD SWAP3 PUSH2 0x1377 JUMP JUMPDEST SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x13C5 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x1308 JUMP JUMPDEST PUSH32 0x2654368900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH0 SWAP2 SWAP1 PUSH8 0xDE0B6B3A7640000 JUMPDEST DUP2 MLOAD DUP5 LT ISZERO PUSH2 0x13B3 JUMPI PUSH8 0xDE0B6B3A7640000 PUSH2 0x1438 PUSH1 0x1 SWAP3 PUSH2 0x1432 PUSH2 0x1420 DUP9 DUP9 PUSH2 0x3387 JUMP JUMPDEST MLOAD PUSH2 0x142B DUP10 DUP9 PUSH2 0x3387 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x3EC2 JUMP JUMPDEST SWAP1 PUSH2 0x3BFB JUMP JUMPDEST DIV SWAP4 ADD SWAP3 PUSH2 0x13FB JUMP JUMPDEST PUSH1 0x3 PUSH2 0x12A7 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH2 0x100 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x1462 PUSH2 0x304F JUMP JUMPDEST POP PUSH2 0x146B PUSH2 0x3072 JUMP JUMPDEST POP PUSH1 0x5 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x2E3 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x1498 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST POP PUSH1 0x84 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x14B1 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST PUSH1 0xC4 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x14C9 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST POP PUSH1 0xE4 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x2E3 JUMPI PUSH2 0x14E5 PUSH2 0x2DF SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x31F0 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH0 DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD SWAP1 PUSH2 0x315D JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH1 0x4 SLOAD PUSH0 DUP3 PUSH2 0x1521 DUP4 PUSH2 0x3308 JUMP JUMPDEST SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP1 DUP6 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x15BE JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1563 JUMPI JUMPDEST POP PUSH2 0x154F SWAP3 POP SUB DUP4 PUSH2 0x3122 JUMP JUMPDEST PUSH2 0x2DF PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x302A JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x4 PUSH0 MSTORE PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0x15A6 JUMPI POP POP PUSH2 0x154F SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x1542 JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x158F JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0x154F SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0x1542 SWAP1 POP JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x6 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x16F4 PUSH32 0x0 PUSH2 0x3CD2 JUMP JUMPDEST PUSH2 0x171D PUSH32 0x0 PUSH2 0x3E04 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 DUP4 ADD SWAP3 DUP1 DUP5 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT OR PUSH2 0x665 JUMPI PUSH2 0x1793 PUSH2 0x2DF SWAP3 PUSH2 0x1785 SWAP6 PUSH1 0x40 MSTORE PUSH0 DUP4 MSTORE PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP6 PUSH32 0xF00000000000000000000000000000000000000000000000000000000000000 DUP8 MSTORE PUSH1 0xE0 PUSH1 0x20 DUP9 ADD MSTORE PUSH1 0xE0 DUP8 ADD SWAP1 PUSH2 0x302A JUMP JUMPDEST SWAP1 DUP6 DUP3 SUB PUSH1 0x40 DUP8 ADD MSTORE PUSH2 0x302A JUMP JUMPDEST SWAP1 CHAINID PUSH1 0x60 DUP6 ADD MSTORE ADDRESS PUSH1 0x80 DUP6 ADD MSTORE PUSH0 PUSH1 0xA0 DUP6 ADD MSTORE DUP4 DUP3 SUB PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x315D JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH32 0xF29486A100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x1A0 SWAP1 DUP2 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x60B JUMPI PUSH1 0x40 SWAP3 PUSH0 SWAP3 PUSH2 0x1859 JUMPI JUMPDEST POP POP PUSH1 0x60 DUP3 DUP3 ADD MLOAD SWAP2 ADD MLOAD DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH2 0x186F SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x604 JUMPI PUSH2 0x5F5 DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP3 DUP1 PUSH2 0x1842 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x18A4 PUSH2 0x304F JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0xED2 PUSH1 0x40 MLOAD PUSH2 0x18DA DUP2 PUSH2 0x30B1 JUMP JUMPDEST PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH2 0x2DF PUSH32 0x0 PUSH32 0x0 PUSH32 0x0 PUSH2 0x1956 DUP4 DUP7 PUSH2 0x3387 JUMP JUMPDEST MSTORE PUSH32 0x0 PUSH2 0x1982 DUP3 DUP7 PUSH2 0x3387 JUMP JUMPDEST MSTORE PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1990 DUP4 PUSH2 0x30B1 JUMP JUMPDEST PUSH1 0x2 DUP4 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP6 ADD CALLDATACOPY PUSH2 0x19C7 PUSH32 0x0 SWAP2 DUP5 PUSH2 0x3387 JUMP JUMPDEST MSTORE PUSH2 0x19F3 PUSH32 0x0 SWAP2 DUP4 PUSH2 0x3387 JUMP JUMPDEST MSTORE PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 PUSH32 0x0 DUP6 MSTORE PUSH32 0x0 PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x80 PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD SWAP1 PUSH2 0x315D JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x7 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER DUP2 DUP4 AND SUB PUSH2 0x1AE1 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x7 SSTORE PUSH1 0x6 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH1 0x6 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x3 NOT PUSH1 0x20 DUP2 CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP3 GT PUSH2 0x2E3 JUMPI PUSH1 0xE0 SWAP1 DUP3 CALLDATASIZE SUB ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1B4C DUP4 PUSH2 0x30CD JUMP JUMPDEST DUP2 PUSH1 0x4 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2E3 JUMPI DUP4 MSTORE PUSH1 0x24 DUP3 ADD CALLDATALOAD PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x44 DUP3 ADD CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x1B82 SWAP1 PUSH1 0x4 CALLDATASIZE SWAP2 DUP6 ADD ADD PUSH2 0x3190 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x64 DUP3 ADD CALLDATALOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD SWAP2 PUSH1 0x84 DUP2 ADD CALLDATALOAD DUP4 MSTORE PUSH1 0xA4 DUP2 ADD CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x2E3 JUMPI PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xC4 DUP2 ADD CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x2E3 JUMPI PUSH1 0x4 PUSH2 0x1BDF SWAP3 CALLDATASIZE SWAP3 ADD ADD PUSH2 0x31F0 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x1BEC PUSH2 0x36A9 JUMP JUMPDEST PUSH2 0x1BF4 PUSH2 0x3759 JUMP JUMPDEST ISZERO PUSH2 0x1C8D JUMPI PUSH32 0x0 SWAP1 DUP2 PUSH2 0x1C61 JUMPI JUMPDEST POP PUSH2 0x1C39 JUMPI PUSH2 0x1308 PUSH1 0x20 SWAP2 PUSH2 0x1C34 PUSH2 0x36A9 JUMP JUMPDEST PUSH2 0x3906 JUMP JUMPDEST PUSH32 0x1269438A00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP MLOAD PUSH32 0x0 EQ ISZERO DUP3 PUSH2 0x1C21 JUMP JUMPDEST PUSH32 0xFDF7984500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x1CCD PUSH2 0x38E5 JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x7 SLOAD AND PUSH1 0x7 SSTORE PUSH1 0x6 SLOAD SWAP1 DUP2 AND PUSH1 0x6 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x44 DUP2 PUSH2 0x1D59 PUSH2 0x304F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xF7888AEC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP3 DUP4 SWAP2 DUP3 SWAP1 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x60B JUMPI PUSH0 SWAP2 PUSH2 0x1DE2 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1E08 JUMPI JUMPDEST PUSH2 0x1DF9 DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x2E3 JUMPI MLOAD DUP3 PUSH2 0x1DD9 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1DEF JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH32 0x18E79A2000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x16345785D8A0000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI CALLER PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD SWAP1 SWAP2 SSTORE STOP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH2 0x1EC3 CALLDATASIZE PUSH2 0x3246 JUMP JUMPDEST SWAP3 SWAP2 SWAP4 SWAP1 PUSH2 0x1ECF PUSH2 0x36A9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 MSTORE AND SWAP5 AND SWAP3 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH1 0x5 SLOAD PUSH0 DUP3 PUSH2 0x1F14 DUP4 PUSH2 0x3308 JUMP JUMPDEST SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP1 DUP6 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x15BE JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1F41 JUMPI POP PUSH2 0x154F SWAP3 POP SUB DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x5 PUSH0 MSTORE PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0x1F84 JUMPI POP POP PUSH2 0x154F SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x1542 JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x1F6D JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x60 PUSH1 0x40 DUP1 MLOAD PUSH2 0x1FBB DUP2 PUSH2 0x30B1 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE PUSH32 0xD623472500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x3 NOT PUSH1 0x40 DUP2 CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x2E3 JUMPI PUSH1 0xE0 SWAP2 CALLDATASIZE SUB ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x2026 PUSH2 0x3072 JUMP JUMPDEST POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x209A PUSH2 0x304F JUMP JUMPDEST PUSH2 0x20A2 PUSH2 0x3072 JUMP JUMPDEST POP PUSH1 0x5 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x2E3 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x20CF SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST POP PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x20E8 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST POP PUSH1 0xC4 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x2101 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x31F0 JUMP JUMPDEST POP PUSH2 0x210A PUSH2 0x36A9 JUMP JUMPDEST PUSH32 0x0 TIMESTAMP LT ISZERO PUSH2 0x2207 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP1 PUSH32 0x0 AND DUP3 EQ SWAP2 DUP3 PUSH2 0x2184 JUMPI JUMPDEST PUSH1 0x20 DUP4 PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 SWAP3 POP PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0x5E01EB5A00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x60B JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0x21D8 JUMPI JUMPDEST POP DUP1 PUSH1 0x6 SLOAD AND SWAP2 AND EQ SWAP1 DUP3 PUSH2 0x2177 JUMP JUMPDEST PUSH2 0x21F9 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x2200 JUMPI JUMPDEST PUSH2 0x21F1 DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x354E JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x21C8 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x21E7 JUMP JUMPDEST PUSH32 0x3EEE08C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x2261 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST POP PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x2026 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x31F0 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH2 0x1308 PUSH2 0x37AD JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH2 0x22AE PUSH2 0x3759 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH2 0x100 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x2327 PUSH2 0x304F JUMP JUMPDEST POP PUSH2 0x2330 PUSH2 0x3072 JUMP JUMPDEST POP PUSH1 0x4 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x2E3 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x235D SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST POP PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x14B1 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x29A2241AF62C0000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH2 0x1EC3 CALLDATASIZE PUSH2 0x3246 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x84 PUSH1 0x20 PUSH2 0x23DB CALLDATASIZE PUSH2 0x3246 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x15DACBEA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP2 DUP4 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD MSTORE SWAP3 DUP4 SWAP2 DUP3 SWAP1 PUSH0 SWAP1 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x60B JUMPI PUSH2 0x11DB JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x24A3 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST POP PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x24BC SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x31F0 JUMP JUMPDEST POP PUSH2 0x24C5 PUSH2 0x36A9 JUMP JUMPDEST PUSH32 0x0 TIMESTAMP LT ISZERO PUSH2 0x2207 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E01EB5A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x60B JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0x2575 JUMPI JUMPDEST POP DUP1 PUSH1 0x6 SLOAD AND SWAP2 AND EQ PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x258D SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x2200 JUMPI PUSH2 0x21F1 DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x2564 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x3 NOT PUSH1 0x20 DUP2 CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x2E3 JUMPI PUSH2 0x180 SWAP2 CALLDATASIZE SUB ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH0 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH2 0x1308 PUSH2 0x34A3 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x261F SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x2639 PUSH2 0x2632 DUP3 PUSH1 0x44 CALLDATALOAD SWAP5 PUSH2 0x3387 JUMP JUMPDEST MLOAD SWAP2 PUSH2 0x3714 JUMP JUMPDEST PUSH1 0x1 SWAP2 SWAP1 DUP3 DUP5 GT ISZERO PUSH2 0x281C JUMPI PUSH1 0x2 JUMPDEST DUP1 PUSH1 0x3 EQ PUSH2 0x27AB JUMPI DUP1 PUSH1 0x4 EQ PUSH2 0x273D JUMPI DUP1 PUSH1 0x1 EQ PUSH2 0x26E5 JUMPI PUSH1 0x2 EQ PUSH2 0x2694 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x51 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x26BD JUMPI PUSH1 0x20 SWAP4 PUSH2 0x1308 SWAP4 PUSH2 0x13A5 SWAP3 PUSH15 0xC097CE7BC90715B34B9F0FFFFFFFFF DIV ADD SWAP1 PUSH2 0x3C25 JUMP JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP DUP1 SWAP4 SWAP3 POP ISZERO PUSH2 0x2710 JUMPI PUSH2 0x13A5 PUSH2 0x1308 SWAP3 PUSH1 0x20 SWAP5 PUSH15 0xC097CE7BC90715B34B9F1000000000 DIV SWAP1 PUSH2 0x3C25 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP4 SWAP3 PUSH0 SWAP2 DUP2 JUMPDEST PUSH2 0x276B JUMPI JUMPDEST POP POP POP DUP3 ISZERO PUSH2 0x13C5 JUMPI PUSH2 0x13A5 PUSH2 0x1308 SWAP3 PUSH1 0x20 SWAP5 SWAP1 PUSH2 0x3C25 JUMP JUMPDEST SWAP1 SWAP2 SWAP5 PUSH8 0xDE0B6B3A7640000 MLOAD DUP7 LT ISZERO PUSH2 0x27A5 JUMPI SWAP1 DUP3 PUSH2 0x279D DUP2 SWAP4 PUSH2 0x13A5 PUSH2 0x2793 DUP11 DUP7 PUSH2 0x3387 JUMP JUMPDEST MLOAD PUSH2 0x139E DUP12 PUSH2 0x3366 JUMP JUMPDEST SWAP7 ADD SWAP3 PUSH2 0x274D JUMP JUMPDEST SWAP5 PUSH2 0x2752 JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP4 SWAP3 PUSH0 SWAP2 DUP2 JUMPDEST PUSH2 0x27D8 JUMPI POP POP POP DUP3 ISZERO PUSH2 0x13C5 JUMPI PUSH2 0x13A5 PUSH2 0x1308 SWAP3 PUSH1 0x20 SWAP5 SWAP1 PUSH2 0x3C25 JUMP JUMPDEST SWAP1 SWAP2 SWAP5 PUSH8 0xDE0B6B3A7640000 MLOAD DUP7 LT ISZERO PUSH2 0x27A5 JUMPI SWAP1 DUP3 PUSH8 0xDE0B6B3A7640000 PUSH2 0x2813 DUP3 SWAP5 PUSH2 0x1432 PUSH2 0x2809 DUP12 DUP8 PUSH2 0x3387 JUMP JUMPDEST MLOAD PUSH2 0x142B DUP13 PUSH2 0x3366 JUMP JUMPDEST DIV SWAP7 ADD SWAP3 PUSH2 0x27BB JUMP JUMPDEST DUP3 PUSH2 0x2648 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH2 0x120 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x665 JUMPI PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE PUSH0 PUSH1 0xA0 DUP3 ADD MSTORE PUSH0 PUSH1 0xC0 DUP3 ADD MSTORE PUSH0 PUSH1 0xE0 DUP3 ADD MSTORE PUSH0 PUSH2 0x100 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH1 0x40 MLOAD PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP6 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x60B JUMPI PUSH0 SWAP2 PUSH2 0x2C48 JUMPI JUMPDEST POP DUP3 MSTORE PUSH32 0x0 DUP1 PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x24 PUSH0 PUSH32 0x0 SWAP4 DUP5 PUSH1 0xE0 DUP8 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0x7E361BDE00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x60B JUMPI PUSH0 SWAP2 PUSH2 0x2BE9 JUMPI JUMPDEST POP PUSH1 0x20 DUP5 ADD MSTORE PUSH32 0x0 ISZERO ISZERO PUSH2 0x100 DUP5 ADD MSTORE PUSH32 0x0 PUSH1 0x80 DUP5 ADD MSTORE PUSH32 0x0 PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x40 MLOAD PUSH2 0x2A1C DUP2 PUSH2 0x30B1 JUMP JUMPDEST PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP4 ADD CALLDATACOPY DUP1 PUSH1 0x40 DUP6 ADD MSTORE PUSH2 0x2A59 DUP3 PUSH32 0x0 SWAP3 PUSH2 0x3387 JUMP JUMPDEST MSTORE PUSH32 0x0 PUSH2 0x2A89 DUP4 PUSH1 0x40 DUP7 ADD MLOAD PUSH2 0x3387 JUMP JUMPDEST MSTORE PUSH2 0x2AD3 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x2A9A DUP4 PUSH2 0x30B1 JUMP JUMPDEST PUSH1 0x2 DUP4 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP6 ADD CALLDATACOPY DUP3 PUSH1 0x60 DUP7 ADD MSTORE PUSH32 0x0 SWAP3 PUSH2 0x3387 JUMP JUMPDEST MSTORE PUSH2 0x2B03 PUSH32 0x0 SWAP2 PUSH1 0x60 DUP5 ADD MLOAD PUSH2 0x3387 JUMP JUMPDEST MSTORE PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH2 0x140 DUP2 ADD SWAP2 DUP1 MLOAD SWAP3 PUSH2 0x120 PUSH1 0x20 DUP5 ADD MSTORE DUP4 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH2 0x160 DUP5 ADD SWAP5 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x2BBD JUMPI POP POP POP PUSH2 0x100 PUSH2 0x2B87 DUP4 SWAP5 PUSH2 0x2B72 PUSH2 0x2B5E PUSH1 0x20 DUP7 ADD MLOAD SWAP3 PUSH1 0x1F NOT SWAP4 DUP5 DUP10 DUP4 SUB ADD PUSH1 0x40 DUP11 ADD MSTORE PUSH2 0x315D JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD DUP4 DUP9 DUP4 SUB ADD PUSH1 0x60 DUP10 ADD MSTORE PUSH2 0x315D JUMP JUMPDEST SWAP1 PUSH1 0x60 DUP6 ADD MLOAD SWAP1 DUP7 DUP4 SUB ADD PUSH1 0x80 DUP8 ADD MSTORE PUSH2 0x315D JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0xC0 DUP6 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 DUP6 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD DUP3 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH2 0x120 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST DUP3 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 MSTORE PUSH1 0x20 SWAP6 DUP7 ADD SWAP6 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x2B2D JUMP JUMPDEST SWAP1 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2BFA DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x40 DUP2 DUP4 SUB SLT PUSH2 0x2E3 JUMPI DUP1 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2E3 JUMPI DUP3 PUSH2 0x2C24 SWAP2 DUP4 ADD PUSH2 0x3442 JUMP JUMPDEST SWAP2 PUSH1 0x20 DUP3 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x2C43 SWAP3 ADD PUSH2 0x3442 JUMP JUMPDEST PUSH2 0x2995 JUMP JUMPDEST PUSH2 0x2C5C SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x10FE DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP4 PUSH2 0x2900 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x2C7B PUSH2 0x304F JUMP JUMPDEST POP PUSH2 0x2C84 PUSH2 0x3072 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x2E3 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0x2E3 JUMPI DUP2 PUSH1 0x4 ADD CALLDATALOAD PUSH2 0x2CB0 DUP2 PUSH2 0x3145 JUMP JUMPDEST SWAP1 PUSH2 0x2CBE PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 ADD SWAP1 PUSH1 0x24 DUP3 SWAP4 PUSH1 0x7 SHL DUP3 ADD ADD SWAP1 CALLDATASIZE DUP3 GT PUSH2 0x2E3 JUMPI PUSH1 0x24 ADD SWAP2 JUMPDEST DUP2 DUP4 LT PUSH2 0x2E1B JUMPI POP POP POP PUSH1 0x80 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x2D1B PUSH2 0x36A9 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x2 SUB PUSH2 0x2DF3 JUMPI DUP2 MLOAD ISZERO PUSH2 0x2DC6 JUMPI MLOAD DUP4 ADD MLOAD PUSH2 0x2D38 DUP2 PUSH2 0x32D1 JUMP JUMPDEST PUSH2 0x2D41 DUP2 PUSH2 0x32D1 JUMP JUMPDEST ISZERO SWAP1 DUP2 ISZERO SWAP2 PUSH2 0x2D99 JUMPI JUMPDEST POP PUSH2 0x2D71 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADDRESS SWAP2 AND EQ DUP2 MSTORE RETURN JUMPDEST PUSH32 0xDF45063200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 SWAP2 POP MLOAD PUSH1 0x1 LT ISZERO PUSH2 0x2DC6 JUMPI PUSH1 0x40 ADD MLOAD DUP3 ADD MLOAD PUSH2 0x2DB5 DUP2 PUSH2 0x32D1 JUMP JUMPDEST PUSH2 0x2DBE DUP2 PUSH2 0x32D1 JUMP JUMPDEST ISZERO ISZERO DUP4 PUSH2 0x2D4B JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xAAAD13F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x80 DUP4 CALLDATASIZE SUB SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0x2E32 DUP3 PUSH2 0x3095 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x2E3 JUMPI DUP4 MSTORE DUP9 DUP6 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2E3 JUMPI DUP10 DUP5 ADD MSTORE PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x2E3 JUMPI PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 DUP6 ADD CALLDATALOAD SWAP3 DUP4 ISZERO ISZERO DUP5 SUB PUSH2 0x2E3 JUMPI PUSH1 0x80 SWAP4 DUP11 SWAP4 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x2CDF JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x1189 PUSH1 0x20 PUSH2 0x2EBA PUSH2 0x304F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x24 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLDATALOAD PUSH1 0x44 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH1 0x3 SLOAD PUSH0 DUP3 PUSH2 0x2F3A DUP4 PUSH2 0x3308 JUMP JUMPDEST SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP1 DUP6 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x15BE JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x2F67 JUMPI POP PUSH2 0x154F SWAP3 POP SUB DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x3 PUSH0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0x2FAA JUMPI POP POP PUSH2 0x154F SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x1542 JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x2F93 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x2E3 JUMPI PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP3 EQ DUP2 MSTORE RETURN JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x2E3 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x2E3 JUMPI JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x665 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x665 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x665 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH2 0x140 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x665 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x665 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x665 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x665 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x317C JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x316E JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x2E3 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x31AA DUP2 PUSH2 0x3145 JUMP JUMPDEST SWAP4 PUSH2 0x31B8 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x3122 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x2E3 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x31E1 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x31D3 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x2E3 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x665 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x3225 PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP7 ADD AND ADD DUP6 PUSH2 0x3122 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x2E3 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x2E3 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x2E3 JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x2E3 JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x32A7 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x3299 JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x32DB JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x334F JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x3322 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x3317 JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x2E3 JUMPI JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 MLOAD DUP2 LT ISZERO PUSH2 0x2DC6 JUMPI PUSH1 0x5 SHL PUSH8 0xDE0B6B3A7640020 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x2DC6 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x2E3 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x33B6 DUP2 PUSH2 0x3145 JUMP JUMPDEST SWAP4 PUSH2 0x33C4 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x3122 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x2E3 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x33ED JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x2E3 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x33DF JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x2E3 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x343F SWAP3 ADD PUSH2 0x339B JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x2E3 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x345D DUP2 PUSH2 0x3145 JUMP JUMPDEST SWAP4 PUSH2 0x346B PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x3122 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x2E3 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x3494 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x3486 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xE4DC2AA400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x60B JUMPI PUSH0 SWAP2 PUSH2 0x351F JUMPI POP SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3546 JUMPI JUMPDEST DUP2 PUSH2 0x353A PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x2E3 JUMPI MLOAD SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x352D JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x2E3 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x2E3 JUMPI SWAP1 JUMP JUMPDEST DUP1 SWAP2 SUB SWAP1 PUSH2 0x1A0 DUP3 SLT PUSH2 0x2E3 JUMPI PUSH1 0x80 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x3596 DUP5 PUSH2 0x30E9 JUMP JUMPDEST SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH2 0x35A7 DUP2 PUSH2 0x3095 JUMP JUMPDEST PUSH2 0x35B0 DUP3 PUSH2 0x3359 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x35BE PUSH1 0x20 DUP4 ADD PUSH2 0x3359 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x35CF PUSH1 0x40 DUP4 ADD PUSH2 0x3359 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x35E0 PUSH1 0x60 DUP4 ADD PUSH2 0x3359 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE DUP3 MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x2E3 JUMPI PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x100 SWAP1 DUP2 DUP2 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x2E3 JUMPI PUSH2 0x367C SWAP2 PUSH2 0x180 SWAP2 PUSH1 0xA0 DUP7 ADD MSTORE PUSH2 0x120 SWAP4 PUSH2 0x364E DUP6 DUP4 ADD PUSH2 0x3359 JUMP JUMPDEST PUSH1 0xC0 DUP8 ADD MSTORE PUSH2 0x3660 PUSH2 0x140 DUP4 ADD PUSH2 0x3359 JUMP JUMPDEST PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x3672 PUSH2 0x160 DUP4 ADD PUSH2 0x3359 JUMP JUMPDEST SWAP1 DUP7 ADD MSTORE ADD PUSH2 0x3359 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x2E3 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x343F SWAP3 ADD PUSH2 0x3442 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x36E8 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x2 DUP2 LT PUSH2 0x3744 JUMPI PUSH32 0xC1AB6DC100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x3755 SWAP1 PUSH2 0x3750 PUSH2 0x3AA3 JUMP JUMPDEST PUSH2 0x3387 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH32 0x0 TIMESTAMP LT ISZERO DUP1 PUSH2 0x3785 JUMPI SWAP1 JUMP JUMPDEST POP PUSH32 0x0 TIMESTAMP GT ISZERO SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND ADDRESS EQ DUP1 PUSH2 0x38BC JUMPI JUMPDEST ISZERO PUSH2 0x3815 JUMPI PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP3 MSTORE PUSH32 0x0 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x665 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST POP PUSH32 0x0 CHAINID EQ PUSH2 0x37EC JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x6 SLOAD AND CALLER SUB PUSH2 0x1AE1 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 MLOAD PUSH2 0x391D PUSH1 0x60 DUP4 ADD SWAP2 DUP3 MLOAD SWAP1 PUSH2 0x3387 JUMP JUMPDEST MLOAD SWAP3 MLOAD SWAP2 PUSH2 0x3931 PUSH1 0x80 DUP3 ADD SWAP4 DUP5 MLOAD SWAP1 PUSH2 0x3387 JUMP JUMPDEST MLOAD SWAP2 DUP2 MLOAD PUSH2 0x393E DUP2 PUSH2 0x32D1 JUMP JUMPDEST PUSH2 0x3947 DUP2 PUSH2 0x32D1 JUMP JUMPDEST PUSH2 0x39F2 JUMPI PUSH2 0x3961 PUSH2 0x395A PUSH1 0x20 SWAP3 MLOAD PUSH2 0x3714 JUMP JUMPDEST SWAP5 MLOAD PUSH2 0x3714 JUMP JUMPDEST SWAP2 ADD MLOAD PUSH8 0xDE0B6B3A7640000 SWAP5 DUP6 PUSH2 0x3978 DUP3 PUSH2 0x3BC7 JUMP JUMPDEST DIV DUP3 GT PUSH2 0x39CA JUMPI PUSH2 0x398C PUSH2 0x3992 SWAP3 DUP3 PUSH2 0x3C18 JUMP JUMPDEST SWAP1 PUSH2 0x4095 JUMP JUMPDEST DUP5 DUP5 MUL SWAP4 DUP1 DUP6 DIV DUP7 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x133C JUMPI PUSH2 0x39B3 PUSH2 0x39B9 SWAP3 PUSH2 0x39C6 SWAP6 PUSH2 0x3C0E JUMP JUMPDEST SWAP1 PUSH2 0x3C25 JUMP JUMPDEST DUP4 DUP2 DUP2 SUB SWAP2 LT MUL SWAP1 PUSH2 0x3BFB JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST PUSH32 0x340A453300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x3A0C PUSH2 0x3A05 PUSH1 0x20 SWAP3 SWAP6 SWAP4 SWAP5 SWAP6 MLOAD PUSH2 0x3714 JUMP JUMPDEST SWAP3 MLOAD PUSH2 0x3714 JUMP JUMPDEST SWAP3 ADD MLOAD PUSH8 0xDE0B6B3A7640000 PUSH2 0x3A21 DUP6 PUSH2 0x3BC7 JUMP JUMPDEST DIV DUP2 GT PUSH2 0x3A7B JUMPI DUP4 SUB SWAP1 DUP4 DUP3 GT PUSH2 0x133C JUMPI PUSH2 0x3A42 PUSH2 0x39B3 SWAP3 PUSH2 0x3A48 SWAP6 PUSH2 0x4095 JUMP JUMPDEST SWAP3 PUSH2 0x4095 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21F494C589C0000 DUP2 ADD SWAP1 DUP2 GT PUSH2 0x133C JUMPI PUSH2 0x343F SWAP2 PUSH2 0x3CB0 JUMP JUMPDEST PUSH32 0x64590B9F00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3AAF DUP2 PUSH2 0x30B1 JUMP JUMPDEST PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH2 0x3B85 PUSH2 0x3B52 PUSH2 0x3B0B PUSH32 0x0 PUSH32 0x0 PUSH2 0x4A21 JUMP JUMPDEST PUSH32 0x0 PUSH32 0x0 PUSH2 0x4A66 JUMP JUMPDEST PUSH32 0x0 SWAP1 PUSH2 0x3B7E DUP3 DUP6 PUSH2 0x3387 JUMP JUMPDEST MSTORE DUP3 PUSH2 0x3387 JUMP JUMPDEST MLOAD PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 SUB SWAP1 DUP2 GT PUSH2 0x133C JUMPI PUSH2 0x3BC3 PUSH32 0x0 DUP4 PUSH2 0x3387 JUMP JUMPDEST MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH8 0x429D069189E0000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x133C JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x2710 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x133C JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x133C JUMPI JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2710 JUMPI DIV SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x133C JUMPI JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 SUB PUSH2 0x3C3C JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x3C57 JUMPI POP POP DUP1 PUSH2 0x343F SWAP2 PUSH2 0x3CB0 JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x3C7B JUMPI POP POP PUSH2 0x3C75 DUP2 PUSH2 0x343F SWAP3 PUSH2 0x3CB0 JUMP JUMPDEST DUP1 PUSH2 0x3CB0 JUMP JUMPDEST PUSH2 0x3C85 SWAP2 SWAP3 PUSH2 0x40EA JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH2 0x3C91 DUP4 PUSH2 0x3BE4 JUMP JUMPDEST SWAP2 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH1 0x1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x133C JUMPI PUSH2 0x343F SWAP2 PUSH2 0x3C18 JUMP JUMPDEST SWAP1 PUSH2 0x3CBA SWAP2 PUSH2 0x3BFB JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x3D26 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x3CFE JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x3CF4 DUP4 PUSH2 0x3106 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH32 0xB3512B0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH0 SLOAD SWAP2 PUSH2 0x3D38 DUP4 PUSH2 0x3308 JUMP JUMPDEST DUP1 DUP4 MSTORE SWAP3 PUSH1 0x20 SWAP1 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x3DC1 JUMPI POP PUSH1 0x1 EQ PUSH2 0x3D63 JUMPI JUMPDEST POP POP PUSH2 0x343F SWAP3 POP SUB DUP3 PUSH2 0x3122 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x3DA9 JUMPI POP PUSH2 0x343F SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x3D55 JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x3D8E JUMP JUMPDEST SWAP1 POP PUSH1 0x20 SWAP4 POP PUSH2 0x343F SWAP6 SWAP3 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP2 POP AND DUP3 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x3D55 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x3E26 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x3CFE JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x3CF4 DUP4 PUSH2 0x3106 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD PUSH2 0x3E3B DUP2 PUSH2 0x3308 JUMP JUMPDEST DUP1 DUP5 MSTORE SWAP4 PUSH1 0x20 SWAP2 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x3DC1 JUMPI POP PUSH1 0x1 EQ PUSH2 0x3E63 JUMPI POP POP PUSH2 0x343F SWAP3 POP SUB DUP3 PUSH2 0x3122 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x3EAA JUMPI POP PUSH2 0x343F SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x3D55 JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x3E8F JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 DUP1 DUP4 SUB PUSH2 0x3ED9 JUMPI POP SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 SWAP1 PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x3EF6 JUMPI POP POP DUP1 PUSH2 0x39C6 SWAP2 PUSH2 0x3BFB JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x3F1A JUMPI POP PUSH2 0x3F13 DUP3 PUSH2 0x39C6 SWAP4 PUSH2 0x3BFB JUMP JUMPDEST DIV DUP1 PUSH2 0x3BFB JUMP JUMPDEST SWAP1 POP PUSH2 0x3F25 SWAP2 PUSH2 0x40EA JUMP JUMPDEST PUSH2 0x3F2E DUP2 PUSH2 0x3BE4 JUMP JUMPDEST PUSH1 0x1 PUSH0 NOT SWAP4 DUP5 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 PUSH1 0x1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x133C JUMPI DUP2 LT ISZERO PUSH2 0x3F56 JUMPI POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SUB ADD SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP5 GT PUSH2 0x3FDF JUMPI SWAP2 PUSH1 0x20 SWAP4 PUSH1 0x80 SWAP3 PUSH1 0xFF PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND DUP7 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE DUP3 DUP1 MSTORE PUSH1 0x1 GAS STATICCALL ISZERO PUSH2 0x60B JUMPI PUSH0 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x3FD5 JUMPI SWAP1 PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 PUSH1 0x1 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP POP POP PUSH0 SWAP2 PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x32DB JUMPI DUP1 PUSH2 0x3FFC JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x402C JUMPI PUSH32 0xF645EEDF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x4060 JUMPI POP PUSH32 0xFCE698F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x3 EQ PUSH2 0x406A JUMPI POP JUMP JUMPDEST PUSH32 0xD78BCE0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x26BD JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x133C JUMPI PUSH1 0x1 SWAP1 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x2710 JUMPI PUSH15 0xC097CE7BC90715B34B9F1000000000 SDIV SWAP1 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2710 JUMPI SDIV SWAP1 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x4A13 JUMPI DUP2 ISZERO PUSH2 0x4A0D JUMPI DUP2 PUSH1 0xFF SHR PUSH2 0x49E5 JUMPI PUSH24 0xBCE5086492111AEA88F4BB1CA6BCF584181EA8059F76532 DUP2 LT ISZERO PUSH2 0x49BD JUMPI DUP2 PUSH8 0xC7D713B49DA0000 SLT DUP1 PUSH2 0x49AC JUMPI JUMPDEST ISZERO PUSH2 0x4649 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH15 0xC097CE7BC90715B34B9F1000000000 SWAP1 PUSH2 0x4183 SWAP1 DUP5 MUL DUP3 DUP2 ADD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F68318436F8EA4CB460F000000000 ADD DUP4 MUL PUSH2 0x40E0 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV DUP4 DUP6 DUP3 MUL SDIV SWAP2 DUP5 DUP7 DUP5 MUL SDIV SWAP4 DUP6 DUP8 DUP7 MUL SDIV SWAP6 DUP1 DUP9 DUP9 MUL SDIV SWAP8 DUP9 MUL SDIV PUSH1 0xF SWAP1 SDIV SWAP7 PUSH1 0xD SWAP1 SDIV SWAP6 PUSH1 0xB SWAP1 SDIV SWAP5 PUSH1 0x9 SWAP1 SDIV SWAP4 PUSH1 0x7 SWAP1 SDIV SWAP3 PUSH1 0x5 SWAP1 SDIV SWAP2 PUSH1 0x3 SWAP1 SDIV ADD ADD ADD ADD ADD ADD ADD PUSH1 0x1 SHL SWAP2 DUP1 DUP3 DUP2 DUP6 SMOD MUL SDIV SWAP3 SDIV MUL ADD PUSH8 0xDE0B6B3A7640000 SWAP1 JUMPDEST SDIV PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC702BD3A30FC0000 DUP2 DUP2 SGT ISZERO DUP1 PUSH2 0x4636 JUMPI JUMPDEST ISZERO PUSH2 0x460E JUMPI DUP2 SWAP1 DUP3 SLT ISZERO DUP1 PUSH2 0x45FB JUMPI JUMPDEST ISZERO PUSH2 0x45D3 JUMPI PUSH0 SWAP2 PUSH0 DUP2 SLT PUSH2 0x45C4 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH9 0x6F05B59D3B2000000 DUP2 SLT PUSH2 0x4561 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90FA4A62C4E000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP3 JUMPDEST MUL DUP2 SWAP1 PUSH9 0xAD78EBC5AC62000000 DUP2 SLT ISZERO PUSH2 0x4528 JUMPI JUMPDEST PUSH9 0x56BC75E2D631000000 DUP2 SLT ISZERO PUSH2 0x44EE JUMPI JUMPDEST PUSH9 0x2B5E3AF16B18800000 DUP2 SLT ISZERO PUSH2 0x44B6 JUMPI JUMPDEST PUSH9 0x15AF1D78B58C400000 DUP2 SLT ISZERO PUSH2 0x447E JUMPI JUMPDEST PUSH9 0xAD78EBC5AC6200000 DUP2 SLT ISZERO PUSH2 0x4447 JUMPI JUMPDEST DUP3 DUP2 SLT ISZERO PUSH2 0x4410 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B1880000 DUP2 SLT ISZERO PUSH2 0x43D9 JUMPI JUMPDEST PUSH9 0x15AF1D78B58C40000 DUP2 SLT ISZERO PUSH2 0x43A2 JUMPI JUMPDEST PUSH1 0x2 DUP4 DUP3 DUP1 MUL SDIV SDIV PUSH1 0x3 DUP5 DUP4 DUP4 MUL SDIV SDIV PUSH1 0x4 DUP6 DUP5 DUP4 MUL SDIV SDIV DUP6 PUSH1 0x5 DUP2 DUP7 DUP5 MUL SDIV SDIV PUSH1 0x6 DUP3 DUP8 DUP4 MUL SDIV SDIV PUSH1 0x7 DUP4 DUP9 DUP4 MUL SDIV SDIV SWAP1 PUSH1 0x8 DUP5 DUP10 DUP5 MUL SDIV SDIV SWAP3 PUSH1 0x9 DUP6 DUP11 DUP7 MUL SDIV SDIV SWAP6 PUSH1 0xA DUP7 DUP12 DUP10 MUL SDIV SDIV SWAP8 PUSH1 0xB DUP8 DUP13 DUP12 MUL SDIV SDIV SWAP10 PUSH1 0xC DUP9 DUP14 DUP14 MUL SDIV SDIV SWAP12 ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD MUL SDIV MUL SDIV SWAP1 PUSH0 EQ PUSH2 0x343F JUMPI PUSH2 0x343F SWAP1 PUSH2 0x40C6 JUMP JUMPDEST PUSH9 0x6F5F1775788937937 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C0000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x4323 JUMP JUMPDEST PUSH9 0x8F00F760A4B2DB55D PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E780000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x4311 JUMP JUMPDEST PUSH9 0xEBC5FB41746121110 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x42FF JUMP JUMPDEST PUSH9 0x280E60114EDB805D03 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x42F6 JUMP JUMPDEST PUSH10 0x127FA27722CC06CC5E2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x42E4 JUMP JUMPDEST PUSH10 0x3F1FCE3DA636EA5CF850 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E7800000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x42D2 JUMP JUMPDEST PUSH12 0x2DF0AB5A80A22C61AB5A700 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF000000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x42C0 JUMP JUMPDEST PUSH15 0x1855144814A7FF805980FF0084000 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E000000 ADD PUSH2 0x42AE JUMP JUMPDEST PUSH9 0x3782DACE9D9000000 DUP2 SLT PUSH2 0x45B1 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC87D2531627000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH12 0x1425982CF597CD205CEF7380 SWAP3 PUSH2 0x4299 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP3 PUSH1 0x1 SWAP3 PUSH2 0x4299 JUMP JUMPDEST PUSH1 0x1 SWAP3 POP PUSH0 SUB SWAP1 POP PUSH1 0x64 PUSH2 0x423D JUMP JUMPDEST PUSH32 0xD4794EFD00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x422E JUMP JUMPDEST PUSH32 0xA2F9F7E300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x421E JUMP JUMPDEST DUP2 PUSH8 0xDE0B6B3A7640000 SWAP3 PUSH0 SWAP2 DUP5 DUP2 SLT PUSH2 0x4996 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH0 PUSH31 0x1600EF3172E58D2E933EC884FDE10064C63B5372D805E203C0000000000000 DUP3 SLT ISZERO PUSH2 0x496B JUMPI JUMPDEST PUSH20 0x11798004D755D3C8BC8E03204CF44619E000000 DUP3 SLT ISZERO PUSH2 0x494A JUMPI JUMPDEST DUP3 MUL SWAP1 DUP1 DUP4 MUL SWAP1 PUSH15 0x1855144814A7FF805980FF0084000 SWAP1 DUP2 DUP4 SLT ISZERO PUSH2 0x4927 JUMPI JUMPDEST POP POP PUSH12 0x2DF0AB5A80A22C61AB5A700 DUP1 DUP3 SLT ISZERO PUSH2 0x4907 JUMPI JUMPDEST POP PUSH10 0x3F1FCE3DA636EA5CF850 DUP1 DUP3 SLT ISZERO PUSH2 0x48E7 JUMPI JUMPDEST POP PUSH10 0x127FA27722CC06CC5E2 DUP1 DUP3 SLT ISZERO PUSH2 0x48C7 JUMPI JUMPDEST POP PUSH9 0x280E60114EDB805D03 DUP1 DUP3 SLT ISZERO PUSH2 0x48A7 JUMPI JUMPDEST POP PUSH9 0xEBC5FB41746121110 DUP1 DUP3 SLT ISZERO PUSH2 0x4890 JUMPI JUMPDEST POP PUSH9 0x8F00F760A4B2DB55D DUP1 DUP3 SLT ISZERO PUSH2 0x4870 JUMPI JUMPDEST POP PUSH9 0x6F5F1775788937937 DUP1 DUP3 SLT ISZERO PUSH2 0x4850 JUMPI JUMPDEST POP PUSH9 0x6248F33704B286603 DUP1 DUP3 SLT ISZERO PUSH2 0x4831 JUMPI JUMPDEST POP PUSH9 0x5C548670B9510E7AC DUP1 DUP3 SLT ISZERO PUSH2 0x4812 JUMPI JUMPDEST POP PUSH2 0x47BF PUSH9 0x56BC75E2D63100000 SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP2 DUP4 ADD SWAP3 ADD MUL PUSH2 0x40E0 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV SWAP2 PUSH1 0x3 PUSH1 0x5 PUSH1 0x7 PUSH1 0x9 PUSH1 0xB DUP9 DUP11 DUP10 MUL SDIV SWAP9 DUP1 DUP12 DUP12 MUL SDIV SWAP11 DUP12 MUL SDIV SDIV SWAP9 SDIV SWAP7 SDIV SWAP5 SDIV SWAP3 SDIV ADD ADD ADD ADD ADD PUSH1 0x1 SHL ADD SDIV SWAP1 PUSH0 EQ PUSH2 0x480D JUMPI PUSH0 SUB JUMPDEST MUL PUSH2 0x41F2 JUMP JUMPDEST PUSH2 0x4807 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0x56BC75E2D6310000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x4783 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0xAD78EBC5AC620000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x476F JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C40000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x475B JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B1880000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x4747 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP1 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x4733 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0xAD78EBC5AC6200000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x471F JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C400000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x470B JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B18800000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x46F6 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x56BC75E2D631000000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x46E1 JUMP JUMPDEST PUSH9 0xAD78EBC5AC62000000 SWAP3 POP PUSH10 0x21E19E0C9BAB2400000 MUL SDIV SWAP2 ADD SWAP1 PUSH0 DUP1 PUSH2 0x46C9 JUMP JUMPDEST SWAP1 PUSH12 0x1425982CF597CD205CEF7380 PUSH9 0x3782DACE9D9000000 SWAP2 SDIV SWAP2 ADD PUSH2 0x46A8 JUMP JUMPDEST POP PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP1 SDIV PUSH9 0x6F05B59D3B2000000 PUSH2 0x468B JUMP JUMPDEST SWAP1 POP PUSH2 0x49A2 SWAP2 POP PUSH2 0x40C6 JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x64 PUSH2 0x465E JUMP JUMPDEST POP PUSH8 0xF43FC2C04EE0000 DUP3 SLT PUSH2 0x4130 JUMP JUMPDEST PUSH32 0xD831731100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x22701E000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP JUMPDEST TIMESTAMP DUP3 GT PUSH2 0x4A36 JUMPI POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP JUMPDEST DUP1 TIMESTAMP GT ISZERO PUSH2 0x4A0D JUMPI DUP1 TIMESTAMP SUB SWAP1 PUSH8 0xDE0B6B3A7640000 DUP1 DUP4 MUL SWAP3 DUP4 DIV EQ DUP2 TIMESTAMP EQ OR ISZERO PUSH2 0x133C JUMPI PUSH2 0x343F SWAP3 SUB SWAP1 PUSH2 0x3C0E JUMP JUMPDEST SWAP2 SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 LT DUP1 ISZERO SWAP1 PUSH2 0x4ABF JUMPI JUMPDEST PUSH2 0x4AB8 JUMPI DUP1 ISZERO PUSH2 0x4AB2 JUMPI DUP4 DUP3 DUP2 GT ISZERO PUSH2 0x4AA2 JUMPI SWAP2 PUSH2 0x4A9C SWAP3 SUB SWAP1 PUSH2 0x3BFB JUMP JUMPDEST DIV SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH2 0x4AAD SWAP3 SUB SWAP1 PUSH2 0x3BFB JUMP JUMPDEST DIV ADD SWAP1 JUMP JUMPDEST POP POP POP SWAP1 JUMP JUMPDEST POP SWAP2 POP POP SWAP1 JUMP JUMPDEST POP DUP2 DUP5 EQ PUSH2 0x4A7D JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP15 0x4F 0xB2 0xB2 CREATE2 DUP13 LOG4 MLOAD 0xFB 0xB1 0xCC 0xD3 MULMOD 0x1E 0xDB 0xD 0xC3 0xC8 DUP9 0xD6 PUSH30 0x9E60EC791F1BEC06A724DA64736F6C634300081B0033C2575A0E9E593C00 0xF9 MSIZE 0xF8 0xC9 0x2F SLT 0xDB 0x28 PUSH10 0xC3395A3B0502D05E2516 PREVRANDAO PUSH16 0x71F85B8A35ACFBC15FF81A39AE7D344F 0xD7 MULMOD CALLCODE DUP15 DUP7 STOP 0xB4 0xAA DUP13 PUSH6 0xC6B64BFE7FE3 PUSH12 0xD19B00000000000000000000 ","sourceMap":"1845:17760:124:-:0;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;1845:17760:124;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;1845:17760:124;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;1845:17760:124;;;;;;;;;;-1:-1:-1;;;;;1845:17760:124;;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1845:17760:124;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;1845:17760:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18903:89:124;;;;-1:-1:-1;18903:89:124;1845:17760;18903:89;1845:17760;;;;;;:::i;:::-;2165:1;;;1845:17760;2165:1;1845:17760;2165:1;;;19076:72;1845:17760;;;;;;;19076:72;;:::i;:::-;2165:1;19158:72;1845:17760;;;;;;;19158:72;;:::i;:::-;2165:1;1845:17760;;;;;;:::i;:::-;2165:1;;;19379:217;1845:17760;19379:217;;2165:1;;1845:17760;19379:217;;2165:1;1845:17760;19379:217;;2165:1;19379:217;1845:17760;19379:217;;2165:1;1845:17760;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1845:17760:124;;3401:45:114;;;:::i;:::-;1845:17760:124;3393:53:114;3467:51;;;:::i;:::-;1845:17760:124;3456:62:114;2165:1:124;;1845:17760;2165:1;;3542:22:114;3528:36;;1845:17760:124;3528:36:114;2165:1:124;3591:25:114;;3574:42;1845:17760:124;3574:42:114;3644:13;1845:17760:124;3627:30:114;1845:17760:124;;4204:80:114;1845:17760:124;4204:80:114;;2165:1:124;2079:95:114;2165:1:124;;1845:17760;2079:95:114;;2165:1:124;1845:17760;2079:95:114;;2165:1:124;3644:13:114;1845:17760:124;2079:95:114;;2165:1:124;4278:4:114;1845:17760:124;2079:95:114;;1845:17760:124;;4204:80:114;;1845:17760:124;;;;;;;;;;;;;;;;;;2165:1;4194:91:114;;1845:17760:124;3667:48:114;4278:4;1845:17760:124;3725:27:114;1845:17760:124;409:14:72;;;2165:1:124;;;-1:-1:-1;;;;;1845:17760:124;;;;2265:18:57;1845:17760:124;;;;;;;;;;;;18903:89;1845:17760;;;;;;;;;;;;;18903:89;1845:17760;;;;;;;;;;-1:-1:-1;1845:17760:124;;;;;;;;;;;;;2265:18:57;1845:17760:124;;;;;2265:18:57;1845:17760:124;;2165:1;;;-1:-1:-1;;;;;1845:17760:124;;;;2293:22:57;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1845:17760:124;;;;;;;;;;;;;2265:18:57;1845:17760:124;;;;;2293:22:57;1845:17760:124;;;750:14:36;2165:1:124;;;-1:-1:-1;;;;;1845:17760:124;;;;1156:21:48;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1845:17760:124;;;;;;;;;;;;;2265:18:57;1845:17760:124;;;;;1156:21:48;1845:17760:124;;;19379:217;;1845:17760;4492:31:121;1845:17760:124;4492:31:121;1845:17760:124;19379:217;;4583:24:121;2165:1:124;1500:6:43;1496:65;;-1:-1:-1;4729:11:121;-1:-1:-1;4760:3:121;1845:17760:124;;;;;4742:16:121;;;;4806:27;1845:17760:124;;;;19379:217;;4806:24:121;:27;:::i;:::-;1845:17760:124;4852:30:121;3113:4;4852:30;;4848:87;;4964:32;;;;:::i;:::-;1845:17760:124;;;;;;;5056:37:121;5042:558;1845:17760:124;;;;;;;;;;;4729:11:121;;1845:17760:124;;;;-1:-1:-1;1845:17760:124;;2293:22:57;1845:17760:124;;-1:-1:-1;1845:17760:124;5042:558:121;1845:17760:124;;;;5118:6:121;1845:17760:124;;;5128:37:121;5042:558;;5114:486;1845:17760:124;;;2165:1;5190:6:121;2165:1:124;;5200:37:121;;5042:558;;5186:414;1845:17760:124;;;2265:18:57;5262:6:121;2265:18:57;;5272:37:121;;5042:558;;5258:342;1845:17760:124;;;2293:22:57;5334:6:121;2293:22:57;;5344:37:121;;5042:558;;5330:270;1845:17760:124;;;1156:21:48;5406:6:121;1156:21:48;;5416:37:121;;5042:558;;5402:198;1845:17760:124;;;5483:1:121;5478:6;5483:1;;5488:37;;5042:558;;5474:126;5555:1;1845:17760:124;;;5550:6:121;5546:54;;5474:126;;5042:558;;5546:54;5560:37;;5546:54;;;4848:87;4909:11;;;-1:-1:-1;4909:11:121;2293:22:57;-1:-1:-1;4909:11:121;4742:16;;;465:4:50;4742:16:121;5682:31;5678:96;;1273:26:96;;1269:95;;1610:20:97;1845:17760:124;;-1:-1:-1;;;;;;1845:17760:124;;;;;;3004:6:96;1845:17760:124;;;;;;;;;-1:-1:-1;;;;;1845:17760:124;3052:40:96;-1:-1:-1;;3052:40:96;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;3113:4:121;;1051:32:127;;;:80;;;;;4724:886:121;1051:126:127;;;;4724:886:121;1051:172:127;;;;4724:886:121;1034:257:127;;;465:4:50;1318:39:127;;;;:::i;:::-;:57;;;;:126;;;4724:886:121;1301:227:127;;;;1236:15:126;;2466:5:118;:13;:5;;;1236:15:126;;2466:13:118;1278:28:126;;;;1274:117;;5089:309:124;;1845:17760;;;;5408:28;;5554:30;;1845:17760;;;;;-1:-1:-1;;;;;1845:17760:124;;;5595:38;;1845:17760;;;;;;;5643:38;;1845:17760;;;;;;5692:62;;-1:-1:-1;1845:17760:124;;;5765:60;;-1:-1:-1;1845:17760:124;;;5835:60;;-1:-1:-1;1845:17760:124;;;5906:56;;-1:-1:-1;1845:17760:124;;;5972:56;;1845:17760;;;;6728:76;;-1:-1:-1;1845:17760:124;;;;;-1:-1:-1;6082:65:124;;;1845:17760;-1:-1:-1;6082:65:124;1845:17760;6082:65;1845:17760;6039:108;;1845:17760;6039:108;;1845:17760;;;;;;:::i;:::-;2165:1;;;1845:17760;2165:1;1845:17760;2165:1;;;1845:17760;;;;;;:::i;:::-;2165:1;;;1845:17760;2165:1;1845:17760;2165:1;;;1845:17760;;;;6360:175;1845:17760;;;;6039:108;1845:17760;;6360:175;6039:108;1845:17760;6360:175;;:::i;:::-;2165:1;6360:175;;:::i;:::-;2165:1;6545:167;1845:17760;;;;;;;;6039:108;1845:17760;;6545:167;6039:108;1845:17760;6545:167;;:::i;:::-;2165:1;6545:167;;:::i;:::-;2165:1;;5089:309;1845:17760;;2165:1;5408:28;1845:17760;;;;2165:1;;;;;1845:17760;2165:1;;;1845:17760;;2165:1;;;1845:17760;2165:1;;;;:::i;:::-;;;;;1845:17760;2165:1;;;;:::i;:::-;6728:76;;;1845:17760;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5554:30;1845:17760;;;;;;;;;;;;;;;5595:38;1845:17760;;;;;5643:38;1845:17760;;;;;6039:108;1845:17760;;;;;;;;;;;;;;;;;;;;6039:108;1845:17760;;;;;;;;;;;;;;;5089:309;1845:17760;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5408:28;1845:17760;;;;;;;;;;;;;;;;;;;;;;;;;5765:60;1845:17760;;;;;;;;;;;;;;;5835:60;1845:17760;;;;;;;;;;5906:56;1845:17760;;;;;;;;;;;;;;;5972:56;1845:17760;;;;;;;;;;5692:62;1845:17760;;;;;;;;;;;;;;;;;;6082:65;1845:17760;;6082:65;-1:-1:-1;6082:65:124;;1274:117:126;1329:51;;;;;-1:-1:-1;1329:51:126;2293:22:57;2165:1:124;1845:17760;2165:1;1845:17760;-1:-1:-1;1329:51:126;2466:13:118;;;1301:227:127;5736:27:121;;;-1:-1:-1;1476:41:127;2293:22:57;-1:-1:-1;1476:41:127;1318:126;465:4:50;1391:35:127;;;;;;:::i;:::-;:53;;1318:126;;;;1051:172;1193:30;;;;1051:172;;;:126;1147:30;;;;-1:-1:-1;1051:126:127;;:80;1099:32;;;;-1:-1:-1;1051:80:127;;1269:95:96;1322:31;;;-1:-1:-1;1322:31:96;-1:-1:-1;2293:22:57;1845:17760:124;;-1:-1:-1;1322:31:96;1496:65:43;1529:21;;;-1:-1:-1;1529:21:43;2293:22:57;-1:-1:-1;1529:21:43;1845:17760:124;;;;-1:-1:-1;1845:17760:124;;;;;1156:21:48;-1:-1:-1;1845:17760:124;;;-1:-1:-1;;1845:17760:124;;;;-1:-1:-1;;1845:17760:124;;;;;;;2165:1;;;;;1845:17760;;;;;;;;;;;;1156:21:48;1845:17760:124;;;;;;;;;;2265:18:57;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1156:21:48;-1:-1:-1;1845:17760:124;;-1:-1:-1;1845:17760:124;;;;1156:21:48;1845:17760:124;;;;;;;;;;;;;;;;;;1156:21:48;1845:17760:124;;;;;;;;;;;;-1:-1:-1;1845:17760:124;;;;-1:-1:-1;1845:17760:124;;;;;-1:-1:-1;1845:17760:124;;;;;;;-1:-1:-1;1845:17760:124;;2293:22:57;1845:17760:124;;-1:-1:-1;1845:17760:124;;;;;;;;;;;;-1:-1:-1;1845:17760:124;;2293:22:57;1845:17760:124;;-1:-1:-1;1845:17760:124;;;;;-1:-1:-1;1845:17760:124;;;;;2293:22:57;-1:-1:-1;1845:17760:124;;;-1:-1:-1;;;;;;;;;;;;;1845:17760:124;;;-1:-1:-1;;1845:17760:124;;;;;;;2165:1;;;;;1845:17760;;;;;;;;;;;;2293:22:57;1845:17760:124;;;;;;;;;;2265:18:57;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2293:22:57;-1:-1:-1;1845:17760:124;;;-1:-1:-1;;;;;;;;;;;;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1845:17760:124;;;;-1:-1:-1;1845:17760:124;;;;;-1:-1:-1;1845:17760:124;;;;;;;;;;;;;;-1:-1:-1;1845:17760:124;;;;;2265:18:57;-1:-1:-1;1845:17760:124;;;-1:-1:-1;;;;;;;;;;;;;1845:17760:124;;;-1:-1:-1;;1845:17760:124;;;;;;;2165:1;;;;;1845:17760;;;;;;;;;;;;2265:18:57;1845:17760:124;;;;;;;;;;2265:18:57;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2265:18:57;-1:-1:-1;1845:17760:124;;;-1:-1:-1;;;;;;;;;;;;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1845:17760:124;;;;-1:-1:-1;1845:17760:124;;;;;-1:-1:-1;1845:17760:124;;;;;;;;;;18903:89;1845:17760;18903:89;-1:-1:-1;18903:89:124;;1845:17760;-1:-1:-1;1845:17760:124;;;;;;;;;-1:-1:-1;;;;;1845:17760:124;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;1845:17760:124;;;;;;;:::o;:::-;;;;;-1:-1:-1;;1845:17760:124;;;;-1:-1:-1;;;;;1845:17760:124;;;;;;;;;;:::o;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1845:17760:124;;;;;;;;2165:1;1845:17760;;-1:-1:-1;;1845:17760:124;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1845:17760:124;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;1845:17760:124;;;;;;:::o;2165:1::-;;;;;;;;;;;;;;;:::o;:::-;1845:17760;;;2165:1;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2165:1:124;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;3113:4:121;;;;;;;;;;:::o;2914:340:110:-;2165:1:124;;3059:2:110;;3037:24;;;3059:2;;;2165:1:124;1854:2:110;2165:1:124;;1840:16:110;1836:72;;2165:1:124;;;;;2079:95:114;1845:17760:124;;;;;;1949:36:110;;3077:27;:::o;1845:17760:124:-;;;;;;;;;;1949:36:110;3077:27;:::o;1836:72::-;2165:1:124;1845:17760;;;1879:18:110;;;;;;;;;;;;1845:17760:124;2165:1;;1845:17760;;;;;;;2165:1;1845:17760;2165:1;;;1845:17760;3432:13:114;1845:17760:124;;;;;;1854:2:110;1845:17760:124;-1:-1:-1;;1845:17760:124;;;1879:18:110;;;;3033:215;1845:17760:124;-1:-1:-1;;;;;1845:17760:124;;;;3432:13:114;1845:17760:124;;;;;;;;;;;;;;3033:215:110;1845:17760:124;;;;;;;;;;;3033:215:110;1845:17760:124;;;;;;;;;;;;;;;;3432:13:114;1845:17760:124;;;;;;;;;;;;;;;;;3432:13:114;1845:17760:124;1390:66:110;3195:42;:::o;1845:17760:124:-;;;;-1:-1:-1;1845:17760:124;;;;;2165:1;;;;;1845:17760;;3432:13:114;1845:17760:124;;;3432:13:114;1845:17760:124;;3432:13:114;1845:17760:124;;;;;;;;;;;;;;;;;;;;;3432:13:114;1845:17760:124;1390:66:110;3195:42;:::o;1845:17760:124:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1845:17760:124;;;;;;;3432:13:114;1845:17760:124;;;;;3432:13:114;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;3432:13:114;1845:17760:124;;;;;;;;;;;;;;2914:340:110;2165:1:124;;3059:2:110;;3037:24;;;3059:2;;;2165:1:124;1854:2:110;2165:1:124;;1840:16:110;1836:72;;2165:1:124;;;;;2079:95:114;1845:17760:124;;;;;;1949:36:110;;3077:27;:::o;3033:215::-;1845:17760:124;;;-1:-1:-1;;;;;1845:17760:124;;;;;;;;;;;;;;;;;;3033:215:110;1845:17760:124;;;;;;;;;;;3033:215:110;1845:17760:124;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;1845:17760:124;;;;;;;;;;;;;1390:66:110;;3195:42::o;1845:17760:124:-;;;;-1:-1:-1;1845:17760:124;;;;;2165:1;;;1845:17760;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1390:66:110;3195:42;:::o;1845:17760:124:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":12402,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_32412":{"entryPoint":12367,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_fromMemory":{"entryPoint":13646,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_addresst_addresst_uint256":{"entryPoint":12870,"id":null,"parameterSlots":1,"returnSlots":3},"abi_decode_array_contract_IERC20_dyn_fromMemory":{"entryPoint":13211,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_contract_IERC20_dyn_memory_ptr_fromMemory":{"entryPoint":13337,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn":{"entryPoint":12688,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn_fromMemory":{"entryPoint":13955,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn_memory_ptr_fromMemory":{"entryPoint":13378,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_bool_fromMemory":{"entryPoint":13145,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_bytes":{"entryPoint":12784,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_struct_PoolConfig_fromMemory":{"entryPoint":13690,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_address_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_array_contract_IERC20_dyn":{"entryPoint":12936,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":12637,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string":{"entryPoint":12330,"id":null,"parameterSlots":2,"returnSlots":1},"array_allocation_size_array_struct_TokenConfig_dyn":{"entryPoint":12613,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_uint256":{"entryPoint":15384,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_uint256":{"entryPoint":15374,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256":{"entryPoint":15355,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256_32587":{"entryPoint":15303,"id":null,"parameterSlots":1,"returnSlots":1},"checked_mul_uint256_32597":{"entryPoint":15332,"id":null,"parameterSlots":1,"returnSlots":1},"extract_byte_array_length":{"entryPoint":13064,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":12578,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_32415":{"entryPoint":12437,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_32435":{"entryPoint":12465,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_32440":{"entryPoint":12493,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_32465":{"entryPoint":12521,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_48788":{"entryPoint":12550,"id":null,"parameterSlots":1,"returnSlots":0},"fun_calculateValueChangeProgress":{"entryPoint":18977,"id":47834,"parameterSlots":2,"returnSlots":1},"fun_checkOwner":{"entryPoint":14565,"id":39514,"parameterSlots":0,"returnSlots":0},"fun_domainSeparatorV4":{"entryPoint":14253,"id":41960,"parameterSlots":0,"returnSlots":1},"fun_ensureOnlyVault":{"entryPoint":13993,"id":28148,"parameterSlots":0,"returnSlots":0},"fun_getNormalizedWeight":{"entryPoint":14100,"id":47254,"parameterSlots":1,"returnSlots":1},"fun_getNormalizedWeights":{"entryPoint":15011,"id":47293,"parameterSlots":0,"returnSlots":1},"fun_interpolateValue":{"entryPoint":19046,"id":47781,"parameterSlots":3,"returnSlots":1},"fun_isSwapEnabled":{"entryPoint":14169,"id":46763,"parameterSlots":0,"returnSlots":1},"fun_mulDivUp":{"entryPoint":16533,"id":8034,"parameterSlots":2,"returnSlots":1},"fun_mulUp":{"entryPoint":15536,"id":7970,"parameterSlots":2,"returnSlots":1},"fun_onSwap_inner":{"entryPoint":14598,"id":null,"parameterSlots":1,"returnSlots":1},"fun_pow":{"entryPoint":16618,"id":8467,"parameterSlots":2,"returnSlots":1},"fun_powDown":{"entryPoint":16066,"id":8130,"parameterSlots":2,"returnSlots":1},"fun_powUp":{"entryPoint":15397,"id":8197,"parameterSlots":2,"returnSlots":1},"fun_throwError":{"entryPoint":16362,"id":41836,"parameterSlots":2,"returnSlots":0},"fun_toStringWithFallback":{"entryPoint":15876,"id":41092,"parameterSlots":1,"returnSlots":1},"fun_toStringWithFallback_32447":{"entryPoint":15570,"id":41092,"parameterSlots":1,"returnSlots":1},"fun_totalSupply":{"entryPoint":13475,"id":10821,"parameterSlots":0,"returnSlots":1},"fun_tryRecover":{"entryPoint":16219,"id":41751,"parameterSlots":4,"returnSlots":3},"fun_useNonce":{"entryPoint":null,"id":40881,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_struct_TokenConfig_dyn":{"entryPoint":13191,"id":null,"parameterSlots":2,"returnSlots":1},"memory_array_index_access_struct_TokenConfig_dyn_48778":{"entryPoint":13158,"id":null,"parameterSlots":1,"returnSlots":1},"validator_assert_enum_TokenType":{"entryPoint":13009,"id":null,"parameterSlots":1,"returnSlots":0},"wrapping_div_int256":{"entryPoint":16608,"id":null,"parameterSlots":2,"returnSlots":1},"wrapping_div_int256_32606":{"entryPoint":16582,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"5300":[{"length":32,"start":2849},{"length":32,"start":3397},{"length":32,"start":3664},{"length":32,"start":4258},{"length":32,"start":6159}],"28110":[{"length":32,"start":1097},{"length":32,"start":1858},{"length":32,"start":2572},{"length":32,"start":4515},{"length":32,"start":5783},{"length":32,"start":7593},{"length":32,"start":9274},{"length":32,"start":10398},{"length":32,"start":13548},{"length":32,"start":14016}],"41858":[{"length":32,"start":14323}],"41860":[{"length":32,"start":14527}],"41862":[{"length":32,"start":14276}],"41864":[{"length":32,"start":14402}],"41866":[{"length":32,"start":14440}],"41869":[{"length":32,"start":5840}],"41872":[{"length":32,"start":5881}],"46412":[{"length":32,"start":3539},{"length":32,"start":8526},{"length":32,"start":9520}],"46415":[{"length":32,"start":8285}],"46418":[{"length":32,"start":929}],"46420":[{"length":32,"start":6412},{"length":32,"start":7270},{"length":32,"start":10501},{"length":32,"start":15188}],"46422":[{"length":32,"start":6379},{"length":32,"start":10543},{"length":32,"start":15262}],"46424":[{"length":32,"start":6652},{"length":32,"start":8460},{"length":32,"start":9415},{"length":32,"start":10694},{"length":32,"start":14171},{"length":32,"start":15079}],"46426":[{"length":32,"start":3186},{"length":32,"start":6687},{"length":32,"start":10732},{"length":32,"start":14216},{"length":32,"start":15046}],"46428":[{"length":32,"start":6489},{"length":32,"start":10804},{"length":32,"start":15150}],"46430":[{"length":32,"start":6445},{"length":32,"start":10844}],"46432":[{"length":32,"start":6605},{"length":32,"start":10926},{"length":32,"start":15117}],"46434":[{"length":32,"start":6561},{"length":32,"start":10969}],"46436":[{"length":32,"start":5651},{"length":32,"start":7163},{"length":32,"start":10653}]},"linkReferences":{},"object":"6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a714612fc25750806306fdde0314612f19578063095ea7b314612e9c5780630b89f18214612c625780630ca898481461282257806316a0b3e0146125ee57806318160ddd146125d457806318b6eb55146125945780631c149e281461247157806323b872dd146123c957806323de665114612398578063273c1adf146123765780632754888d1461230d57806330adf81f146122d3578063313ce567146122b8578063351a964d146122945780633644e5151461227a57806338be241d1461222f57806345421ec7146120815780634837c596146120315780635211fa7714611fee57806353b79bd714611f9c57806354fd4d5014611ef35780635687f2b814611e92578063627cdcb914611e69578063654cf15d14611e47578063679aefce14611e0f57806370a0823114611d3c578063715018a614611cb557806372c9818614611b0d57806379ba509714611a545780637beed220146118bb5780637ecebe001461187657806381fa807c146117b357806384b0196e146116bb5780638d928af81461166b5780638da5cb5b1461163857806395146efb146115fc57806395d89b4114611500578063976907cc14611448578063984de9e81461125a578063a0e8f5ac14611212578063a9059cbb1461110c578063aa6ca8081461104a578063abb1dc4414610df7578063af905d1514610da7578063b156aa0a14610ced578063b677fa5614610ccb578063ba5f9f4014610be6578063c0bc6f3314610b7a578063ce20ece714610b5a578063d335b0cf14610ac8578063d505accf1461086c578063d77153a7146107af578063dd62ed3e146106c5578063e30c397814610692578063e565c29e146103c5578063e594203d14610375578063f2fde38b146102e75763f89f27ed146102b0575f80fd5b346102e3575f6003193601126102e3576102df6102cb613aa3565b60405191829160208352602083019061315d565b0390f35b5f80fd5b346102e35760206003193601126102e35761030061304f565b6103086138e5565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff00000000000000000000000000000000000000006007541617600755600654167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b346102e3575f6003193601126102e357602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102e3575f6003193601126102e3576040516101009081810181811067ffffffffffffffff8211176106655760405260608152602090818101906060825260408101915f8352606082015f8152608083015f815260a08401905f825260c08501925f845260e08601945f865273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906040517f535cfd8a0000000000000000000000000000000000000000000000000000000081523060048201525f81602481865afa90811561060b575f91610643575b5088526104b7613aa3565b81526040517fb45090f90000000000000000000000000000000000000000000000000000000081523060048201528a81602481865afa90811561060b575f91610616575b5089526105066134a3565b835260405180927ff29486a10000000000000000000000000000000000000000000000000000000082523060048301528160246101a09384935afa98891561060b578c996105ae9461059b935f926105de575b505060e0810151151587528a81015115158852610120809101511515895261057f613759565b15158a526040519d8d8f9e938f948552519301528c019061315d565b9051601f198b83030160408c015261315d565b9651606089015251608088015251151560a087015251151560c086015251151560e0850152511515908301520390f35b6105fd9250803d10610604575b6105f58183613122565b81019061357a565b8e80610559565b503d6105eb565b6040513d5f823e3d90fd5b90508a81813d831161063c575b61062d8183613122565b810103126102e357518c6104fb565b503d610623565b61065f91503d805f833e6106578183613122565b810190613683565b8c6104ac565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b346102e3575f6003193601126102e357602073ffffffffffffffffffffffffffffffffffffffff60075416604051908152f35b346102e35760406003193601126102e3576106de61304f565b60206106e8613072565b91606473ffffffffffffffffffffffffffffffffffffffff91828060405196879586947f927da1050000000000000000000000000000000000000000000000000000000086523060048701521660248501521660448301527f0000000000000000000000000000000000000000000000000000000000000000165afa801561060b575f9061077c575b602090604051908152f35b506020813d6020116107a7575b8161079660209383613122565b810103126102e35760209051610771565b3d9150610789565b346102e3575f6003193601126102e3576101406040516107ce816130e9565b5f81526020810190604081015f8152606082015f815260808301905f825260a084015f815260c0850160e08601915f83526101009485880194610120809901975f895260018b5260018552600187526040519a5f8c5251151560208c015251151560408b015251151560608a0152511515608089015251151560a088015251151560c087015251151560e08601525115159084015251151590820152f35b346102e35760e06003193601126102e35761088561304f565b61088d613072565b60443591608435919060643560ff841684036102e357804211610a9d576108db8273ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2080549060018201905590565b906109aa6109a160405196602088017f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9815273ffffffffffffffffffffffffffffffffffffffff98899586891697886040840152878b1660608401528c608084015260a083015260c082015260c08152610954816130cd565b51902061095f6137ad565b90604051917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015260c43591604260a4359220613f5b565b90929192613fea565b16818103610a6f576040517fe1f21c6700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015285166024820152604481018790526020816064815f7f00000000000000000000000000000000000000000000000000000000000000008b165af1801561060b57610a3b57005b6020813d602011610a67575b81610a5460209383613122565b810103126102e357610a6590613359565b005b3d9150610a47565b7f4b800e46000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b7f62791302000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b346102e3575f6003193601126102e3576040517fb45090f900000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa801561060b575f9061077c57602090604051908152f35b346102e3575f6003193601126102e35760206040516509184e72a0008152f35b346102e3575f6003193601126102e3575f60c0604051610b99816130cd565b60608152606060208201528260408201528260608201528260808201528260a082015201527fd6234725000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102e35760e06003193601126102e357610bff61304f565b50610c08613072565b50600460443510156102e35767ffffffffffffffff6084358181116102e357610c35903690600401613190565b5060a4358181116102e357610c4e903690600401613190565b5060c4359081116102e357610c679036906004016131f0565b50610c706136a9565b7f0000000000000000000000000000000000000000000000000000000000000000421115610ca357602060405160018152f35b7ff38b5770000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102e3575f6003193601126102e35760206040516709b6e64a8ec600008152f35b346102e3575f6003193601126102e3576040517f535cfd8a0000000000000000000000000000000000000000000000000000000081523060048201525f8160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa801561060b576102df915f91610d8d575b5060405191829160208352602083019061315d565b610da191503d805f833e6106578183613122565b82610d78565b346102e3575f6003193601126102e357602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102e3575f6003193601126102e35773ffffffffffffffffffffffffffffffffffffffff6040517f67e0e0760000000000000000000000000000000000000000000000000000000081523060048201525f81602481857f0000000000000000000000000000000000000000000000000000000000000000165afa801561060b575f915f935f915f93610f1c575b50610e9b60405194608086526080860190613288565b6020858203818701528080885193848152019701925f905b838210610ee05787806102df89610ed28d8b858203604087015261315d565b90838203606085015261315d565b909192939783606060019260408c518051610efa816132d1565b8352808501518716858401520151151560408201520199019493920190610eb3565b9450925050503d805f843e610f318184613122565b8201906080838303126102e35782519267ffffffffffffffff938481116102e35783610f5e91830161339b565b90602093848201518681116102e357820181601f820112156102e357805190610f8682613145565b96610f946040519889613122565b828852808801816060809502840101928584116102e3578201905b838210610ff557505050505060408201518681116102e35781610fd3918401613442565b9560608301519081116102e357610fea9201613442565b909293909185610e85565b84828703126102e3576040519061100b826130b1565b825160028110156102e357825283830151908a821682036102e357828592838995015261103a60408601613359565b6040820152815201910190610faf565b346102e3575f6003193601126102e3576040517fca4f28030000000000000000000000000000000000000000000000000000000081523060048201525f8160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa801561060b576102df915f916110ea575b50604051918291602083526020830190613288565b61110691503d805f833e6110fe8183613122565b810190613419565b826110d5565b346102e35760406003193601126102e357611189602061112a61304f565b6040517fbeabacc800000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248083019190915235604482015291829081906064820190565b03815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1801561060b576111db575b602060405160018152f35b6020813d60201161120a575b816111f460209383613122565b810103126102e35761120590613359565b6111d0565b3d91506111e7565b346102e3576003196060813601126102e3576004359067ffffffffffffffff82116102e35760e091360301126102e35761124a613072565b50604080515f81525f6020820152f35b346102e35760406003193601126102e35760043567ffffffffffffffff81116102e35761128b903690600401613190565b60243560028110156102e3576112a0816132d1565b6114415760045b6112af613aa3565b90806003146113ed57806004146113695780600114611310576002146112fc577f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffd5b60209161130891614095565b604051908152f35b50670de0b6b3a76400009081810291818304149015171561133c5760209161133791613c0e565b611308565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b505f9190670de0b6b3a76400005b81518410156113b3576113ab6001916113a56113938787613387565b5161139e8887613387565b5190613c25565b90613cb0565b930192611377565b9250505080156113c557602090611308565b7f26543689000000000000000000000000000000000000000000000000000000005f5260045ffd5b505f9190670de0b6b3a76400005b81518410156113b357670de0b6b3a76400006114386001926114326114208888613387565b5161142b8988613387565b5190613ec2565b90613bfb565b049301926113fb565b60036112a7565b346102e3576101006003193601126102e35761146261304f565b5061146b613072565b50600560443510156102e35767ffffffffffffffff6064358181116102e357611498903690600401613190565b506084358181116102e3576114b1903690600401613190565b60c4358281116102e3576114c9903690600401613190565b5060e4359182116102e3576114e56102df9236906004016131f0565b506040519182915f835260406020840152604083019061315d565b346102e3575f6003193601126102e3576040516004545f8261152183613308565b91828252602093600190856001821691825f146115be575050600114611563575b5061154f92500383613122565b6102df60405192828493845283019061302a565b84915060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b905f915b8583106115a657505061154f935082010185611542565b8054838901850152879450869390920191810161158f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168582015261154f95151560051b85010192508791506115429050565b346102e3575f6003193601126102e35760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b346102e3575f6003193601126102e357602073ffffffffffffffffffffffffffffffffffffffff60065416604051908152f35b346102e3575f6003193601126102e357602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102e3575f6003193601126102e3576116f47f0000000000000000000000000000000000000000000000000000000000000000613cd2565b61171d7f0000000000000000000000000000000000000000000000000000000000000000613e04565b9060405191602083019280841067ffffffffffffffff851117610665576117936102df92611785956040525f83526040519586957f0f00000000000000000000000000000000000000000000000000000000000000875260e0602088015260e087019061302a565b90858203604087015261302a565b904660608501523060808501525f60a085015283820360c085015261315d565b346102e3575f6003193601126102e3576040517ff29486a10000000000000000000000000000000000000000000000000000000081523060048201526101a090818160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561060b576040925f92611859575b505060608282015191015182519182526020820152f35b61186f9250803d10610604576105f58183613122565b8280611842565b346102e35760206003193601126102e35773ffffffffffffffffffffffffffffffffffffffff6118a461304f565b165f526002602052602060405f2054604051908152f35b346102e3575f6003193601126102e357610ed26040516118da816130b1565b6002815260403660208301376102df7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006119568386613387565b527f00000000000000000000000000000000000000000000000000000000000000006119828286613387565b5260405191611990836130b1565b6002835260403660208501376119c77f00000000000000000000000000000000000000000000000000000000000000009184613387565b526119f37f00000000000000000000000000000000000000000000000000000000000000009183613387565b526040519384937f000000000000000000000000000000000000000000000000000000000000000085527f0000000000000000000000000000000000000000000000000000000000000000602086015260806040860152608085019061315d565b346102e3575f6003193601126102e35760075473ffffffffffffffffffffffffffffffffffffffff3381831603611ae1577fffffffffffffffffffffffff00000000000000000000000000000000000000008092166007556006549133908316176006553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b346102e3576003196020813601126102e35760043567ffffffffffffffff918282116102e35760e09082360301126102e35760405191611b4c836130cd565b816004013560028110156102e35783526024820135602084015260448201358181116102e357611b829060043691850101613190565b60408401526064820135606084015260808301916084810135835260a481013573ffffffffffffffffffffffffffffffffffffffff811681036102e35760a085015260c48101359182116102e3576004611bdf92369201016131f0565b60c0830152611bec6136a9565b611bf4613759565b15611c8d577f00000000000000000000000000000000000000000000000000000000000000009081611c61575b50611c3957611308602091611c346136a9565b613906565b7f1269438a000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050517f0000000000000000000000000000000000000000000000000000000000000000141582611c21565b7ffdf79845000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102e3575f6003193601126102e357611ccd6138e5565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff00000000000000000000000000000000000000008060075416600755600654908116600655167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346102e3576020806003193601126102e357604481611d5961304f565b6040517ff7888aec00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff918216602482015292839182907f0000000000000000000000000000000000000000000000000000000000000000165afa90811561060b575f91611de2575b50604051908152f35b90508181813d8311611e08575b611df98183613122565b810103126102e3575182611dd9565b503d611def565b346102e3575f6003193601126102e3577f18e79a20000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102e3575f6003193601126102e357602060405167016345785d8a00008152f35b346102e3575f6003193601126102e357335f908152600260205260409020805460018101909155005b346102e35760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925611ec336613246565b92919390611ecf6136a9565b73ffffffffffffffffffffffffffffffffffffffff809160405195865216941692a3005b346102e3575f6003193601126102e3576040516005545f82611f1483613308565b91828252602093600190856001821691825f146115be575050600114611f41575061154f92500383613122565b84915060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0905f915b858310611f8457505061154f935082010185611542565b80548389018501528794508693909201918101611f6d565b346102e3575f6003193601126102e357606060408051611fbb816130b1565b82815282602082015201527fd6234725000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102e3576003196040813601126102e3576004359067ffffffffffffffff82116102e35760e091360301126102e357612026613072565b5060206040515f8152f35b346102e3575f6003193601126102e357602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102e35760e06003193601126102e35761209a61304f565b6120a2613072565b50600560443510156102e35767ffffffffffffffff6064358181116102e3576120cf903690600401613190565b5060a4358181116102e3576120e8903690600401613190565b5060c4359081116102e3576121019036906004016131f0565b5061210a6136a9565b7f00000000000000000000000000000000000000000000000000000000000000004210156122075773ffffffffffffffffffffffffffffffffffffffff80911690807f00000000000000000000000000000000000000000000000000000000000000001682149182612184575b6020836040519015158152f35b60049250602090604051938480927f5e01eb5a0000000000000000000000000000000000000000000000000000000082525afa90811561060b576020925f926121d8575b5080600654169116149082612177565b6121f9919250833d8511612200575b6121f18183613122565b81019061354e565b90836121c8565b503d6121e7565b7f3eee08c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102e35760606003193601126102e35767ffffffffffffffff6004358181116102e357612261903690600401613190565b506044359081116102e3576120269036906004016131f0565b346102e3575f6003193601126102e35760206113086137ad565b346102e3575f6003193601126102e35760206122ae613759565b6040519015158152f35b346102e3575f6003193601126102e357602060405160128152f35b346102e3575f6003193601126102e35760206040517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b346102e3576101006003193601126102e35761232761304f565b50612330613072565b50600460443510156102e35767ffffffffffffffff6084358181116102e35761235d903690600401613190565b5060a4358181116102e3576114b1903690600401613190565b346102e3575f6003193601126102e35760206040516729a2241af62c00008152f35b346102e35760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611ec336613246565b346102e357608460206123db36613246565b6040517f15dacbea00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff93841660248201529183166044830152606482015292839182905f907f0000000000000000000000000000000000000000000000000000000000000000165af1801561060b576111db57602060405160018152f35b346102e35760406003193601126102e35767ffffffffffffffff6004358181116102e3576124a3903690600401613190565b506024359081116102e3576124bc9036906004016131f0565b506124c56136a9565b7f0000000000000000000000000000000000000000000000000000000000000000421015612207576040517f5e01eb5a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa90811561060b576020925f92612575575b508060065416911614604051908152f35b61258d919250833d8511612200576121f18183613122565b9083612564565b346102e3576003196020813601126102e3576004359067ffffffffffffffff82116102e35761018091360301126102e357604080515f81525f6020820152f35b346102e3575f6003193601126102e35760206113086134a3565b346102e35760606003193601126102e35760043567ffffffffffffffff81116102e35761261f903690600401613190565b6024356126396126328260443594613387565b5191613714565b600191908284111561281c5760025b806003146127ab578060041461273d57806001146126e557600214612694577f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffd5b80156126bd57602093611308936113a5926ec097ce7bc90715b34b9f0fffffffff040190613c25565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b508093925015612710576113a5611308926020946ec097ce7bc90715b34b9f10000000000490613c25565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b50670de0b6b3a764000093925f91815b61276b575b50505082156113c5576113a56113089260209490613c25565b909194670de0b6b3a7640000518610156127a557908261279d81936113a56127938a86613387565b5161139e8b613366565b96019261274d565b94612752565b50670de0b6b3a764000093925f91815b6127d85750505082156113c5576113a56113089260209490613c25565b909194670de0b6b3a7640000518610156127a5579082670de0b6b3a764000061281382946114326128098b87613387565b5161142b8c613366565b049601926127bb565b82612648565b346102e3575f6003193601126102e357604051610120810181811067ffffffffffffffff821117610665576040526060815260606020820152606060408201526060808201525f60808201525f60a08201525f60c08201525f60e08201525f61010082015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166040517fca4f28030000000000000000000000000000000000000000000000000000000081523060048201525f81602481855afa90811561060b575f91612c48575b5082527f00000000000000000000000000000000000000000000000000000000000000008060c084015260245f7f0000000000000000000000000000000000000000000000000000000000000000938460e0870152604051928380927f7e361bde0000000000000000000000000000000000000000000000000000000082523060048301525afa90811561060b575f91612be9575b5060208401527f000000000000000000000000000000000000000000000000000000000000000015156101008401527f000000000000000000000000000000000000000000000000000000000000000060808401527f000000000000000000000000000000000000000000000000000000000000000060a0840152604051612a1c816130b1565b600281526040366020830137806040850152612a59827f000000000000000000000000000000000000000000000000000000000000000092613387565b527f0000000000000000000000000000000000000000000000000000000000000000612a89836040860151613387565b52612ad360405191612a9a836130b1565b6002835260403660208501378260608601527f000000000000000000000000000000000000000000000000000000000000000092613387565b52612b037f0000000000000000000000000000000000000000000000000000000000000000916060840151613387565b526040516020815261014081019180519261012060208401528351809152602061016084019401905f5b818110612bbd57505050610100612b878394612b72612b5e602086015192601f1993848983030160408a015261315d565b60408601518388830301606089015261315d565b9060608501519086830301608087015261315d565b91608081015160a085015260a081015160c085015260c081015160e085015260e081015182850152015115156101208301520390f35b825173ffffffffffffffffffffffffffffffffffffffff16865260209586019590920191600101612b2d565b90503d805f833e612bfa8183613122565b8101906040818303126102e357805167ffffffffffffffff81116102e35782612c24918301613442565b91602082015167ffffffffffffffff81116102e357612c439201613442565b612995565b612c5c91503d805f833e6110fe8183613122565b83612900565b346102e35760e06003193601126102e357612c7b61304f565b50612c84613072565b6044359067ffffffffffffffff82116102e357366023830112156102e3578160040135612cb081613145565b90612cbe6040519283613122565b808252602093848301906024829360071b820101903682116102e357602401915b818310612e1b5750505060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c3601126102e357612d1b6136a9565b8151600203612df357815115612dc65751830151612d38816132d1565b612d41816132d1565b1590811591612d99575b50612d71576040519073ffffffffffffffffffffffffffffffffffffffff309116148152f35b7fdf450632000000000000000000000000000000000000000000000000000000005f5260045ffd5b8091505160011015612dc65760400151820151612db5816132d1565b612dbe816132d1565b151583612d4b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b6080833603126102e35760405190612e3282613095565b73ffffffffffffffffffffffffffffffffffffffff843581811681036102e35783528885013560028110156102e35789840152604085013590811681036102e3576040830152606090818501359283151584036102e3576080938a93820152815201920191612cdf565b346102e35760406003193601126102e3576111896020612eba61304f565b6040517fe1f21c6700000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248083019190915235604482015291829081906064820190565b346102e3575f6003193601126102e3576040516003545f82612f3a83613308565b91828252602093600190856001821691825f146115be575050600114612f67575061154f92500383613122565b84915060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b905f915b858310612faa57505061154f935082010185611542565b80548389018501528794508693909201918101612f93565b346102e35760206003193601126102e357600435907fffffffff0000000000000000000000000000000000000000000000000000000082168092036102e3577f01ffc9a700000000000000000000000000000000000000000000000000000000602092148152f35b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036102e357565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036102e357565b6080810190811067ffffffffffffffff82111761066557604052565b6060810190811067ffffffffffffffff82111761066557604052565b60e0810190811067ffffffffffffffff82111761066557604052565b610140810190811067ffffffffffffffff82111761066557604052565b6040810190811067ffffffffffffffff82111761066557604052565b90601f601f19910116810190811067ffffffffffffffff82111761066557604052565b67ffffffffffffffff81116106655760051b60200190565b9081518082526020808093019301915f5b82811061317c575050505090565b83518552938101939281019260010161316e565b9080601f830112156102e35760209082356131aa81613145565b936131b86040519586613122565b81855260208086019260051b8201019283116102e357602001905b8282106131e1575050505090565b813581529083019083016131d3565b81601f820112156102e35780359067ffffffffffffffff821161066557604051926132256020601f19601f8601160185613122565b828452602083830101116102e357815f926020809301838601378301015290565b60031960609101126102e35773ffffffffffffffffffffffffffffffffffffffff9060043582811681036102e3579160243590811681036102e3579060443590565b9081518082526020808093019301915f5b8281106132a7575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101613299565b600211156132db57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b90600182811c9216801561334f575b602083101461332257565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691613317565b519081151582036102e357565b670de0b6b3a764000051811015612dc65760051b670de0b6b3a76400200190565b8051821015612dc65760209160051b010190565b9080601f830112156102e3578151906020916133b681613145565b936133c46040519586613122565b81855260208086019260051b8201019283116102e357602001905b8282106133ed575050505090565b815173ffffffffffffffffffffffffffffffffffffffff811681036102e35781529083019083016133df565b906020828203126102e357815167ffffffffffffffff81116102e35761343f920161339b565b90565b9080601f830112156102e35781519060209161345d81613145565b9361346b6040519586613122565b81855260208086019260051b8201019283116102e357602001905b828210613494575050505090565b81518152908301908301613486565b6040517fe4dc2aa400000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561060b575f9161351f575090565b90506020813d602011613546575b8161353a60209383613122565b810103126102e3575190565b3d915061352d565b908160209103126102e3575173ffffffffffffffffffffffffffffffffffffffff811681036102e35790565b809103906101a082126102e357608060405192613596846130e9565b126102e3576040516135a781613095565b6135b082613359565b81526135be60208301613359565b60208201526135cf60408301613359565b60408201526135e060608301613359565b606082015282526080810151602083015260a0810151604083015260c0810151606083015260e081015164ffffffffff811681036102e3576080830152610100908181015163ffffffff811681036102e35761367c916101809160a08601526101209361364e858301613359565b60c08701526136606101408301613359565b60e08701526136726101608301613359565b9086015201613359565b9082015290565b906020828203126102e357815167ffffffffffffffff81116102e35761343f9201613442565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633036136e857565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b60028110613744577fc1ab6dc1000000000000000000000000000000000000000000000000000000005f5260045ffd5b61375590613750613aa3565b613387565b5190565b7f0000000000000000000000000000000000000000000000000000000000000000421015806137855790565b507f000000000000000000000000000000000000000000000000000000000000000042111590565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163014806138bc575b15613815577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff8211176106655760405251902090565b507f000000000000000000000000000000000000000000000000000000000000000046146137ec565b73ffffffffffffffffffffffffffffffffffffffff600654163303611ae157565b6040810190815161391d6060830191825190613387565b519251916139316080820193845190613387565b5191815161393e816132d1565b613947816132d1565b6139f25761396161395a60209251613714565b9451613714565b910151670de0b6b3a7640000948561397882613bc7565b0482116139ca5761398c6139929282613c18565b90614095565b8484029380850486149015171561133c576139b36139b9926139c695613c0e565b90613c25565b8381810391100290613bfb565b0490565b7f340a4533000000000000000000000000000000000000000000000000000000005f5260045ffd5b613a0c613a056020929593949551613714565b9251613714565b920151670de0b6b3a7640000613a2185613bc7565b048111613a7b5783039083821161133c57613a426139b392613a4895614095565b92614095565b7ffffffffffffffffffffffffffffffffffffffffffffffffff21f494c589c0000810190811161133c5761343f91613cb0565b7f64590b9f000000000000000000000000000000000000000000000000000000005f5260045ffd5b604051613aaf816130b1565b600281526040366020830137613b85613b52613b0b7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614a21565b7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614a66565b7f000000000000000000000000000000000000000000000000000000000000000090613b7e8285613387565b5282613387565b51670de0b6b3a764000090810390811161133c57613bc37f000000000000000000000000000000000000000000000000000000000000000083613387565b5290565b90670429d069189e00009182810292818404149015171561133c57565b906127109182810292818404149015171561133c57565b8181029291811591840414171561133c57565b8115612710570490565b9190820180921161133c57565b90670de0b6b3a764000090818103613c3c57505090565b671bc16d674ec800008103613c575750508061343f91613cb0565b673782dace9d9000008103613c7b575050613c758161343f92613cb0565b80613cb0565b613c8591926140ea565b906001613c9183613be4565b915f1983010401901515026001810180911161133c5761343f91613c18565b90613cba91613bfb565b6001670de0b6b3a76400005f19830104019015150290565b60ff8114613d265760ff811690601f8211613cfe5760405191613cf483613106565b8252602082015290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040515f815f5491613d3883613308565b80835292602090600190818116908115613dc15750600114613d63575b505061343f92500382613122565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b828410613da9575061343f9450505081016020015f80613d55565b85548785018301529485019486945092810192613d8e565b90506020935061343f9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f80613d55565b60ff8114613e265760ff811690601f8211613cfe5760405191613cf483613106565b506040515f81600191600154613e3b81613308565b8084529360209160018116908115613dc15750600114613e6357505061343f92500382613122565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b828410613eaa575061343f9450505081016020015f80613d55565b85548785018301529485019486945092810192613e8f565b670de0b6b3a764000091808303613ed95750905090565b8290671bc16d674ec800008103613ef6575050806139c691613bfb565b673782dace9d9000008103613f1a5750613f13826139c693613bfb565b0480613bfb565b9050613f25916140ea565b613f2e81613be4565b60015f1993848301040190151502906001820180831161133c57811015613f56575050505f90565b030190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411613fdf579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa1561060b575f5173ffffffffffffffffffffffffffffffffffffffff811615613fd557905f905f90565b505f906001905f90565b5050505f9160039190565b60048110156132db5780613ffc575050565b6001810361402c577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b6002810361406057507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b60031461406a5750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9080156126bd57670de0b6b3a76400009182810292818404149015171561133c576001905f19830104019015150290565b8015612710576ec097ce7bc90715b34b9f10000000000590565b8115612710570590565b908015614a13578115614a0d578160ff1c6149e557770bce5086492111aea88f4bb1ca6bcf584181ea8059f765328110156149bd5781670c7d713b49da000012806149ac575b1561464957670de0b6b3a7640000916ec097ce7bc90715b34b9f100000000090614183908402828101907fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f0000000000183026140e0565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b918082818507020592050201670de0b6b3a7640000905b057ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc00008181131580614636575b1561460e578190821215806145fb575b156145d3575f915f81126145c4575b506064906806f05b59d3b20000008112614561577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e0000000168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac62000000811215614528575b6856bc75e2d6310000008112156144ee575b682b5e3af16b188000008112156144b6575b6815af1d78b58c40000081121561447e575b680ad78ebc5ac6200000811215614447575b82811215614410575b6802b5e3af16b18800008112156143d9575b68015af1d78b58c400008112156143a2575b60028382800205056003848383020505600485848302050585600581868402050560068287830205056007838883020505906008848984020505926009858a8602050595600a868b8902050597600b878c8b02050599600c888d8d0205059b01010101010101010101010102050205905f1461343f5761343f906140c6565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c000084920192020590614323565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e78000084920192020590614311565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000849201920205906142ff565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000849201920205906142f6565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c00000849201920205906142e4565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e7800000849201920205906142d2565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf000000849201920205906142c0565b6e01855144814a7ff805980ff008400091507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e000000016142ae565b6803782dace9d900000081126145b1577ffffffffffffffffffffffffffffffffffffffffffffffffc87d25316270000000168056bc75e2d63100000826b1425982cf597cd205cef738092614299565b68056bc75e2d6310000082600192614299565b600192505f039050606461423d565b7fd4794efd000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c8000082131561422e565b7fa2f9f7e3000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c8000082131561421e565b81670de0b6b3a7640000925f91848112614996575b506064905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c000000000000082121561496b575b73011798004d755d3c8bc8e03204cf44619e00000082121561494a575b820290808302906e01855144814a7ff805980ff00840009081831215614927575b50506b02df0ab5a80a22c61ab5a70080821215614907575b50693f1fce3da636ea5cf850808212156148e7575b50690127fa27722cc06cc5e2808212156148c7575b5068280e60114edb805d03808212156148a7575b50680ebc5fb4174612111080821215614890575b506808f00f760a4b2db55d80821215614870575b506806f5f177578893793780821215614850575b506806248f33704b28660380821215614831575b506805c548670b9510e7ac80821215614812575b506147bf68056bc75e2d6310000091827ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf000008183019201026140e0565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b0105905f1461480d575f035b026141f2565b614807565b68056bc75e2d631000006756bc75e2d63100009202059101905f614783565b68056bc75e2d6310000067ad78ebc5ac6200009202059101905f61476f565b68056bc75e2d6310000068015af1d78b58c400009202059101905f61475b565b68056bc75e2d631000006802b5e3af16b18800009202059101905f614747565b68056bc75e2d63100000809202059101905f614733565b68056bc75e2d63100000680ad78ebc5ac62000009202059101905f61471f565b68056bc75e2d631000006815af1d78b58c4000009202059101905f61470b565b68056bc75e2d63100000682b5e3af16b188000009202059101905f6146f6565b68056bc75e2d631000006856bc75e2d6310000009202059101905f6146e1565b68ad78ebc5ac62000000925069021e19e0c9bab240000002059101905f806146c9565b906b1425982cf597cd205cef73806803782dace9d9000000910591016146a8565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b200000061468b565b90506149a291506140c6565b600190606461465e565b50670f43fc2c04ee00008212614130565b7fd8317311000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f022701e0000000000000000000000000000000000000000000000000000000005f5260045ffd5b50505f90565b5050670de0b6b3a764000090565b428211614a36575050670de0b6b3a764000090565b80421115614a0d5780420390670de0b6b3a764000080830292830414814214171561133c5761343f920390613c0e565b9190670de0b6b3a764000091828110801590614abf575b614ab8578015614ab2578382811115614aa25791614a9c920390613bfb565b04900390565b614aad920390613bfb565b040190565b50505090565b5091505090565b50818414614a7d56fea26469706673582212209e4fb2b2f58ca451fbb1ccd3091edb0dc3c888d67d9e60ec791f1bec06a724da64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x2FC2 JUMPI POP DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x2F19 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x2E9C JUMPI DUP1 PUSH4 0xB89F182 EQ PUSH2 0x2C62 JUMPI DUP1 PUSH4 0xCA89848 EQ PUSH2 0x2822 JUMPI DUP1 PUSH4 0x16A0B3E0 EQ PUSH2 0x25EE JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x25D4 JUMPI DUP1 PUSH4 0x18B6EB55 EQ PUSH2 0x2594 JUMPI DUP1 PUSH4 0x1C149E28 EQ PUSH2 0x2471 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x23C9 JUMPI DUP1 PUSH4 0x23DE6651 EQ PUSH2 0x2398 JUMPI DUP1 PUSH4 0x273C1ADF EQ PUSH2 0x2376 JUMPI DUP1 PUSH4 0x2754888D EQ PUSH2 0x230D JUMPI DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x22D3 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x22B8 JUMPI DUP1 PUSH4 0x351A964D EQ PUSH2 0x2294 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x227A JUMPI DUP1 PUSH4 0x38BE241D EQ PUSH2 0x222F JUMPI DUP1 PUSH4 0x45421EC7 EQ PUSH2 0x2081 JUMPI DUP1 PUSH4 0x4837C596 EQ PUSH2 0x2031 JUMPI DUP1 PUSH4 0x5211FA77 EQ PUSH2 0x1FEE JUMPI DUP1 PUSH4 0x53B79BD7 EQ PUSH2 0x1F9C JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x1EF3 JUMPI DUP1 PUSH4 0x5687F2B8 EQ PUSH2 0x1E92 JUMPI DUP1 PUSH4 0x627CDCB9 EQ PUSH2 0x1E69 JUMPI DUP1 PUSH4 0x654CF15D EQ PUSH2 0x1E47 JUMPI DUP1 PUSH4 0x679AEFCE EQ PUSH2 0x1E0F JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1D3C JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x1CB5 JUMPI DUP1 PUSH4 0x72C98186 EQ PUSH2 0x1B0D JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x1A54 JUMPI DUP1 PUSH4 0x7BEED220 EQ PUSH2 0x18BB JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x1876 JUMPI DUP1 PUSH4 0x81FA807C EQ PUSH2 0x17B3 JUMPI DUP1 PUSH4 0x84B0196E EQ PUSH2 0x16BB JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x166B JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x1638 JUMPI DUP1 PUSH4 0x95146EFB EQ PUSH2 0x15FC JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x1500 JUMPI DUP1 PUSH4 0x976907CC EQ PUSH2 0x1448 JUMPI DUP1 PUSH4 0x984DE9E8 EQ PUSH2 0x125A JUMPI DUP1 PUSH4 0xA0E8F5AC EQ PUSH2 0x1212 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x110C JUMPI DUP1 PUSH4 0xAA6CA808 EQ PUSH2 0x104A JUMPI DUP1 PUSH4 0xABB1DC44 EQ PUSH2 0xDF7 JUMPI DUP1 PUSH4 0xAF905D15 EQ PUSH2 0xDA7 JUMPI DUP1 PUSH4 0xB156AA0A EQ PUSH2 0xCED JUMPI DUP1 PUSH4 0xB677FA56 EQ PUSH2 0xCCB JUMPI DUP1 PUSH4 0xBA5F9F40 EQ PUSH2 0xBE6 JUMPI DUP1 PUSH4 0xC0BC6F33 EQ PUSH2 0xB7A JUMPI DUP1 PUSH4 0xCE20ECE7 EQ PUSH2 0xB5A JUMPI DUP1 PUSH4 0xD335B0CF EQ PUSH2 0xAC8 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x86C JUMPI DUP1 PUSH4 0xD77153A7 EQ PUSH2 0x7AF JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x6C5 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x692 JUMPI DUP1 PUSH4 0xE565C29E EQ PUSH2 0x3C5 JUMPI DUP1 PUSH4 0xE594203D EQ PUSH2 0x375 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x2E7 JUMPI PUSH4 0xF89F27ED EQ PUSH2 0x2B0 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x2DF PUSH2 0x2CB PUSH2 0x3AA3 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x315D JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x300 PUSH2 0x304F JUMP JUMPDEST PUSH2 0x308 PUSH2 0x38E5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x7 SLOAD AND OR PUSH1 0x7 SSTORE PUSH1 0x6 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH2 0x100 SWAP1 DUP2 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x665 JUMPI PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 ADD SWAP1 PUSH1 0x60 DUP3 MSTORE PUSH1 0x40 DUP2 ADD SWAP2 PUSH0 DUP4 MSTORE PUSH1 0x60 DUP3 ADD PUSH0 DUP2 MSTORE PUSH1 0x80 DUP4 ADD PUSH0 DUP2 MSTORE PUSH1 0xA0 DUP5 ADD SWAP1 PUSH0 DUP3 MSTORE PUSH1 0xC0 DUP6 ADD SWAP3 PUSH0 DUP5 MSTORE PUSH1 0xE0 DUP7 ADD SWAP5 PUSH0 DUP7 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 PUSH1 0x40 MLOAD PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x60B JUMPI PUSH0 SWAP2 PUSH2 0x643 JUMPI JUMPDEST POP DUP9 MSTORE PUSH2 0x4B7 PUSH2 0x3AA3 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x40 MLOAD PUSH32 0xB45090F900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP11 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x60B JUMPI PUSH0 SWAP2 PUSH2 0x616 JUMPI JUMPDEST POP DUP10 MSTORE PUSH2 0x506 PUSH2 0x34A3 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x40 MLOAD DUP1 SWAP3 PUSH32 0xF29486A100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP2 PUSH1 0x24 PUSH2 0x1A0 SWAP4 DUP5 SWAP4 GAS STATICCALL SWAP9 DUP10 ISZERO PUSH2 0x60B JUMPI DUP13 SWAP10 PUSH2 0x5AE SWAP5 PUSH2 0x59B SWAP4 PUSH0 SWAP3 PUSH2 0x5DE JUMPI JUMPDEST POP POP PUSH1 0xE0 DUP2 ADD MLOAD ISZERO ISZERO DUP8 MSTORE DUP11 DUP2 ADD MLOAD ISZERO ISZERO DUP9 MSTORE PUSH2 0x120 DUP1 SWAP2 ADD MLOAD ISZERO ISZERO DUP10 MSTORE PUSH2 0x57F PUSH2 0x3759 JUMP JUMPDEST ISZERO ISZERO DUP11 MSTORE PUSH1 0x40 MLOAD SWAP14 DUP14 DUP16 SWAP15 SWAP4 DUP16 SWAP5 DUP6 MSTORE MLOAD SWAP4 ADD MSTORE DUP13 ADD SWAP1 PUSH2 0x315D JUMP JUMPDEST SWAP1 MLOAD PUSH1 0x1F NOT DUP12 DUP4 SUB ADD PUSH1 0x40 DUP13 ADD MSTORE PUSH2 0x315D JUMP JUMPDEST SWAP7 MLOAD PUSH1 0x60 DUP10 ADD MSTORE MLOAD PUSH1 0x80 DUP9 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xA0 DUP8 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xC0 DUP7 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xE0 DUP6 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST PUSH2 0x5FD SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x604 JUMPI JUMPDEST PUSH2 0x5F5 DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x357A JUMP JUMPDEST DUP15 DUP1 PUSH2 0x559 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x5EB JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 POP DUP11 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x63C JUMPI JUMPDEST PUSH2 0x62D DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x2E3 JUMPI MLOAD DUP13 PUSH2 0x4FB JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x623 JUMP JUMPDEST PUSH2 0x65F SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x657 DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3683 JUMP JUMPDEST DUP13 PUSH2 0x4AC JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x7 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x6DE PUSH2 0x304F JUMP JUMPDEST PUSH1 0x20 PUSH2 0x6E8 PUSH2 0x3072 JUMP JUMPDEST SWAP2 PUSH1 0x64 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP1 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0x927DA10500000000000000000000000000000000000000000000000000000000 DUP7 MSTORE ADDRESS PUSH1 0x4 DUP8 ADD MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE AND PUSH1 0x44 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x60B JUMPI PUSH0 SWAP1 PUSH2 0x77C JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x7A7 JUMPI JUMPDEST DUP2 PUSH2 0x796 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH2 0x771 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x789 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x140 PUSH1 0x40 MLOAD PUSH2 0x7CE DUP2 PUSH2 0x30E9 JUMP JUMPDEST PUSH0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH0 DUP2 MSTORE PUSH1 0x60 DUP3 ADD PUSH0 DUP2 MSTORE PUSH1 0x80 DUP4 ADD SWAP1 PUSH0 DUP3 MSTORE PUSH1 0xA0 DUP5 ADD PUSH0 DUP2 MSTORE PUSH1 0xC0 DUP6 ADD PUSH1 0xE0 DUP7 ADD SWAP2 PUSH0 DUP4 MSTORE PUSH2 0x100 SWAP5 DUP6 DUP9 ADD SWAP5 PUSH2 0x120 DUP1 SWAP10 ADD SWAP8 PUSH0 DUP10 MSTORE PUSH1 0x1 DUP12 MSTORE PUSH1 0x1 DUP6 MSTORE PUSH1 0x1 DUP8 MSTORE PUSH1 0x40 MLOAD SWAP11 PUSH0 DUP13 MSTORE MLOAD ISZERO ISZERO PUSH1 0x20 DUP13 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x40 DUP12 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x60 DUP11 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x80 DUP10 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xA0 DUP9 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xC0 DUP8 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xE0 DUP7 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP5 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x885 PUSH2 0x304F JUMP JUMPDEST PUSH2 0x88D PUSH2 0x3072 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 PUSH1 0x84 CALLDATALOAD SWAP2 SWAP1 PUSH1 0x64 CALLDATALOAD PUSH1 0xFF DUP5 AND DUP5 SUB PUSH2 0x2E3 JUMPI DUP1 TIMESTAMP GT PUSH2 0xA9D JUMPI PUSH2 0x8DB DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH1 0x1 DUP3 ADD SWAP1 SSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x9AA PUSH2 0x9A1 PUSH1 0x40 MLOAD SWAP7 PUSH1 0x20 DUP9 ADD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP9 DUP10 SWAP6 DUP7 DUP10 AND SWAP8 DUP9 PUSH1 0x40 DUP5 ADD MSTORE DUP8 DUP12 AND PUSH1 0x60 DUP5 ADD MSTORE DUP13 PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 MSTORE PUSH2 0x954 DUP2 PUSH2 0x30CD JUMP JUMPDEST MLOAD SWAP1 KECCAK256 PUSH2 0x95F PUSH2 0x37AD JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x2 DUP4 ADD MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0xC4 CALLDATALOAD SWAP2 PUSH1 0x42 PUSH1 0xA4 CALLDATALOAD SWAP3 KECCAK256 PUSH2 0x3F5B JUMP JUMPDEST SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x3FEA JUMP JUMPDEST AND DUP2 DUP2 SUB PUSH2 0xA6F JUMPI PUSH1 0x40 MLOAD PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP6 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x20 DUP2 PUSH1 0x64 DUP2 PUSH0 PUSH32 0x0 DUP12 AND GAS CALL DUP1 ISZERO PUSH2 0x60B JUMPI PUSH2 0xA3B JUMPI STOP JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xA67 JUMPI JUMPDEST DUP2 PUSH2 0xA54 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x2E3 JUMPI PUSH2 0xA65 SWAP1 PUSH2 0x3359 JUMP JUMPDEST STOP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xA47 JUMP JUMPDEST PUSH32 0x4B800E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH32 0x6279130200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH32 0xB45090F900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x60B JUMPI PUSH0 SWAP1 PUSH2 0x77C JUMPI PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH6 0x9184E72A000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0xC0 PUSH1 0x40 MLOAD PUSH2 0xB99 DUP2 PUSH2 0x30CD JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE ADD MSTORE PUSH32 0xD623472500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0xBFF PUSH2 0x304F JUMP JUMPDEST POP PUSH2 0xC08 PUSH2 0x3072 JUMP JUMPDEST POP PUSH1 0x4 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x2E3 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0xC35 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST POP PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0xC4E SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST POP PUSH1 0xC4 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0xC67 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x31F0 JUMP JUMPDEST POP PUSH2 0xC70 PUSH2 0x36A9 JUMP JUMPDEST PUSH32 0x0 TIMESTAMP GT ISZERO PUSH2 0xCA3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH32 0xF38B577000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x9B6E64A8EC60000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x60B JUMPI PUSH2 0x2DF SWAP2 PUSH0 SWAP2 PUSH2 0xD8D JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x315D JUMP JUMPDEST PUSH2 0xDA1 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x657 DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP3 PUSH2 0xD78 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0x67E0E07600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x60B JUMPI PUSH0 SWAP2 PUSH0 SWAP4 PUSH0 SWAP2 PUSH0 SWAP4 PUSH2 0xF1C JUMPI JUMPDEST POP PUSH2 0xE9B PUSH1 0x40 MLOAD SWAP5 PUSH1 0x80 DUP7 MSTORE PUSH1 0x80 DUP7 ADD SWAP1 PUSH2 0x3288 JUMP JUMPDEST PUSH1 0x20 DUP6 DUP3 SUB DUP2 DUP8 ADD MSTORE DUP1 DUP1 DUP9 MLOAD SWAP4 DUP5 DUP2 MSTORE ADD SWAP8 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0xEE0 JUMPI DUP8 DUP1 PUSH2 0x2DF DUP10 PUSH2 0xED2 DUP14 DUP12 DUP6 DUP3 SUB PUSH1 0x40 DUP8 ADD MSTORE PUSH2 0x315D JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x315D JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP8 DUP4 PUSH1 0x60 PUSH1 0x1 SWAP3 PUSH1 0x40 DUP13 MLOAD DUP1 MLOAD PUSH2 0xEFA DUP2 PUSH2 0x32D1 JUMP JUMPDEST DUP4 MSTORE DUP1 DUP6 ADD MLOAD DUP8 AND DUP6 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP10 ADD SWAP5 SWAP4 SWAP3 ADD SWAP1 PUSH2 0xEB3 JUMP JUMPDEST SWAP5 POP SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0xF31 DUP2 DUP5 PUSH2 0x3122 JUMP JUMPDEST DUP3 ADD SWAP1 PUSH1 0x80 DUP4 DUP4 SUB SLT PUSH2 0x2E3 JUMPI DUP3 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP2 GT PUSH2 0x2E3 JUMPI DUP4 PUSH2 0xF5E SWAP2 DUP4 ADD PUSH2 0x339B JUMP JUMPDEST SWAP1 PUSH1 0x20 SWAP4 DUP5 DUP3 ADD MLOAD DUP7 DUP2 GT PUSH2 0x2E3 JUMPI DUP3 ADD DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x2E3 JUMPI DUP1 MLOAD SWAP1 PUSH2 0xF86 DUP3 PUSH2 0x3145 JUMP JUMPDEST SWAP7 PUSH2 0xF94 PUSH1 0x40 MLOAD SWAP9 DUP10 PUSH2 0x3122 JUMP JUMPDEST DUP3 DUP9 MSTORE DUP1 DUP9 ADD DUP2 PUSH1 0x60 DUP1 SWAP6 MUL DUP5 ADD ADD SWAP3 DUP6 DUP5 GT PUSH2 0x2E3 JUMPI DUP3 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0xFF5 JUMPI POP POP POP POP POP PUSH1 0x40 DUP3 ADD MLOAD DUP7 DUP2 GT PUSH2 0x2E3 JUMPI DUP2 PUSH2 0xFD3 SWAP2 DUP5 ADD PUSH2 0x3442 JUMP JUMPDEST SWAP6 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0xFEA SWAP3 ADD PUSH2 0x3442 JUMP JUMPDEST SWAP1 SWAP3 SWAP4 SWAP1 SWAP2 DUP6 PUSH2 0xE85 JUMP JUMPDEST DUP5 DUP3 DUP8 SUB SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0x100B DUP3 PUSH2 0x30B1 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2E3 JUMPI DUP3 MSTORE DUP4 DUP4 ADD MLOAD SWAP1 DUP11 DUP3 AND DUP3 SUB PUSH2 0x2E3 JUMPI DUP3 DUP6 SWAP3 DUP4 DUP10 SWAP6 ADD MSTORE PUSH2 0x103A PUSH1 0x40 DUP7 ADD PUSH2 0x3359 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0xFAF JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x60B JUMPI PUSH2 0x2DF SWAP2 PUSH0 SWAP2 PUSH2 0x10EA JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x3288 JUMP JUMPDEST PUSH2 0x1106 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x10FE DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3419 JUMP JUMPDEST DUP3 PUSH2 0x10D5 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x1189 PUSH1 0x20 PUSH2 0x112A PUSH2 0x304F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xBEABACC800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x24 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLDATALOAD PUSH1 0x44 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x60B JUMPI PUSH2 0x11DB JUMPI JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x120A JUMPI JUMPDEST DUP2 PUSH2 0x11F4 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x2E3 JUMPI PUSH2 0x1205 SWAP1 PUSH2 0x3359 JUMP JUMPDEST PUSH2 0x11D0 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x11E7 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x3 NOT PUSH1 0x60 DUP2 CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x2E3 JUMPI PUSH1 0xE0 SWAP2 CALLDATASIZE SUB ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x124A PUSH2 0x3072 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH0 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x128B SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2E3 JUMPI PUSH2 0x12A0 DUP2 PUSH2 0x32D1 JUMP JUMPDEST PUSH2 0x1441 JUMPI PUSH1 0x4 JUMPDEST PUSH2 0x12AF PUSH2 0x3AA3 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x3 EQ PUSH2 0x13ED JUMPI DUP1 PUSH1 0x4 EQ PUSH2 0x1369 JUMPI DUP1 PUSH1 0x1 EQ PUSH2 0x1310 JUMPI PUSH1 0x2 EQ PUSH2 0x12FC JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x51 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x20 SWAP2 PUSH2 0x1308 SWAP2 PUSH2 0x4095 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x133C JUMPI PUSH1 0x20 SWAP2 PUSH2 0x1337 SWAP2 PUSH2 0x3C0E JUMP JUMPDEST PUSH2 0x1308 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP PUSH0 SWAP2 SWAP1 PUSH8 0xDE0B6B3A7640000 JUMPDEST DUP2 MLOAD DUP5 LT ISZERO PUSH2 0x13B3 JUMPI PUSH2 0x13AB PUSH1 0x1 SWAP2 PUSH2 0x13A5 PUSH2 0x1393 DUP8 DUP8 PUSH2 0x3387 JUMP JUMPDEST MLOAD PUSH2 0x139E DUP9 DUP8 PUSH2 0x3387 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x3C25 JUMP JUMPDEST SWAP1 PUSH2 0x3CB0 JUMP JUMPDEST SWAP4 ADD SWAP3 PUSH2 0x1377 JUMP JUMPDEST SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x13C5 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x1308 JUMP JUMPDEST PUSH32 0x2654368900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH0 SWAP2 SWAP1 PUSH8 0xDE0B6B3A7640000 JUMPDEST DUP2 MLOAD DUP5 LT ISZERO PUSH2 0x13B3 JUMPI PUSH8 0xDE0B6B3A7640000 PUSH2 0x1438 PUSH1 0x1 SWAP3 PUSH2 0x1432 PUSH2 0x1420 DUP9 DUP9 PUSH2 0x3387 JUMP JUMPDEST MLOAD PUSH2 0x142B DUP10 DUP9 PUSH2 0x3387 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x3EC2 JUMP JUMPDEST SWAP1 PUSH2 0x3BFB JUMP JUMPDEST DIV SWAP4 ADD SWAP3 PUSH2 0x13FB JUMP JUMPDEST PUSH1 0x3 PUSH2 0x12A7 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH2 0x100 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x1462 PUSH2 0x304F JUMP JUMPDEST POP PUSH2 0x146B PUSH2 0x3072 JUMP JUMPDEST POP PUSH1 0x5 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x2E3 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x1498 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST POP PUSH1 0x84 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x14B1 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST PUSH1 0xC4 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x14C9 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST POP PUSH1 0xE4 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x2E3 JUMPI PUSH2 0x14E5 PUSH2 0x2DF SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x31F0 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH0 DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD SWAP1 PUSH2 0x315D JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH1 0x4 SLOAD PUSH0 DUP3 PUSH2 0x1521 DUP4 PUSH2 0x3308 JUMP JUMPDEST SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP1 DUP6 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x15BE JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1563 JUMPI JUMPDEST POP PUSH2 0x154F SWAP3 POP SUB DUP4 PUSH2 0x3122 JUMP JUMPDEST PUSH2 0x2DF PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x302A JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x4 PUSH0 MSTORE PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0x15A6 JUMPI POP POP PUSH2 0x154F SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x1542 JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x158F JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0x154F SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0x1542 SWAP1 POP JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x6 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x16F4 PUSH32 0x0 PUSH2 0x3CD2 JUMP JUMPDEST PUSH2 0x171D PUSH32 0x0 PUSH2 0x3E04 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 DUP4 ADD SWAP3 DUP1 DUP5 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT OR PUSH2 0x665 JUMPI PUSH2 0x1793 PUSH2 0x2DF SWAP3 PUSH2 0x1785 SWAP6 PUSH1 0x40 MSTORE PUSH0 DUP4 MSTORE PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP6 PUSH32 0xF00000000000000000000000000000000000000000000000000000000000000 DUP8 MSTORE PUSH1 0xE0 PUSH1 0x20 DUP9 ADD MSTORE PUSH1 0xE0 DUP8 ADD SWAP1 PUSH2 0x302A JUMP JUMPDEST SWAP1 DUP6 DUP3 SUB PUSH1 0x40 DUP8 ADD MSTORE PUSH2 0x302A JUMP JUMPDEST SWAP1 CHAINID PUSH1 0x60 DUP6 ADD MSTORE ADDRESS PUSH1 0x80 DUP6 ADD MSTORE PUSH0 PUSH1 0xA0 DUP6 ADD MSTORE DUP4 DUP3 SUB PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x315D JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH32 0xF29486A100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x1A0 SWAP1 DUP2 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x60B JUMPI PUSH1 0x40 SWAP3 PUSH0 SWAP3 PUSH2 0x1859 JUMPI JUMPDEST POP POP PUSH1 0x60 DUP3 DUP3 ADD MLOAD SWAP2 ADD MLOAD DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH2 0x186F SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x604 JUMPI PUSH2 0x5F5 DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP3 DUP1 PUSH2 0x1842 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x18A4 PUSH2 0x304F JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0xED2 PUSH1 0x40 MLOAD PUSH2 0x18DA DUP2 PUSH2 0x30B1 JUMP JUMPDEST PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH2 0x2DF PUSH32 0x0 PUSH32 0x0 PUSH32 0x0 PUSH2 0x1956 DUP4 DUP7 PUSH2 0x3387 JUMP JUMPDEST MSTORE PUSH32 0x0 PUSH2 0x1982 DUP3 DUP7 PUSH2 0x3387 JUMP JUMPDEST MSTORE PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1990 DUP4 PUSH2 0x30B1 JUMP JUMPDEST PUSH1 0x2 DUP4 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP6 ADD CALLDATACOPY PUSH2 0x19C7 PUSH32 0x0 SWAP2 DUP5 PUSH2 0x3387 JUMP JUMPDEST MSTORE PUSH2 0x19F3 PUSH32 0x0 SWAP2 DUP4 PUSH2 0x3387 JUMP JUMPDEST MSTORE PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 PUSH32 0x0 DUP6 MSTORE PUSH32 0x0 PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x80 PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD SWAP1 PUSH2 0x315D JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x7 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER DUP2 DUP4 AND SUB PUSH2 0x1AE1 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x7 SSTORE PUSH1 0x6 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH1 0x6 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x3 NOT PUSH1 0x20 DUP2 CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP3 GT PUSH2 0x2E3 JUMPI PUSH1 0xE0 SWAP1 DUP3 CALLDATASIZE SUB ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1B4C DUP4 PUSH2 0x30CD JUMP JUMPDEST DUP2 PUSH1 0x4 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2E3 JUMPI DUP4 MSTORE PUSH1 0x24 DUP3 ADD CALLDATALOAD PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x44 DUP3 ADD CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x1B82 SWAP1 PUSH1 0x4 CALLDATASIZE SWAP2 DUP6 ADD ADD PUSH2 0x3190 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x64 DUP3 ADD CALLDATALOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD SWAP2 PUSH1 0x84 DUP2 ADD CALLDATALOAD DUP4 MSTORE PUSH1 0xA4 DUP2 ADD CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x2E3 JUMPI PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xC4 DUP2 ADD CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x2E3 JUMPI PUSH1 0x4 PUSH2 0x1BDF SWAP3 CALLDATASIZE SWAP3 ADD ADD PUSH2 0x31F0 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x1BEC PUSH2 0x36A9 JUMP JUMPDEST PUSH2 0x1BF4 PUSH2 0x3759 JUMP JUMPDEST ISZERO PUSH2 0x1C8D JUMPI PUSH32 0x0 SWAP1 DUP2 PUSH2 0x1C61 JUMPI JUMPDEST POP PUSH2 0x1C39 JUMPI PUSH2 0x1308 PUSH1 0x20 SWAP2 PUSH2 0x1C34 PUSH2 0x36A9 JUMP JUMPDEST PUSH2 0x3906 JUMP JUMPDEST PUSH32 0x1269438A00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP MLOAD PUSH32 0x0 EQ ISZERO DUP3 PUSH2 0x1C21 JUMP JUMPDEST PUSH32 0xFDF7984500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x1CCD PUSH2 0x38E5 JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x7 SLOAD AND PUSH1 0x7 SSTORE PUSH1 0x6 SLOAD SWAP1 DUP2 AND PUSH1 0x6 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x44 DUP2 PUSH2 0x1D59 PUSH2 0x304F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xF7888AEC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP3 DUP4 SWAP2 DUP3 SWAP1 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x60B JUMPI PUSH0 SWAP2 PUSH2 0x1DE2 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1E08 JUMPI JUMPDEST PUSH2 0x1DF9 DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x2E3 JUMPI MLOAD DUP3 PUSH2 0x1DD9 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1DEF JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH32 0x18E79A2000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x16345785D8A0000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI CALLER PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD SWAP1 SWAP2 SSTORE STOP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH2 0x1EC3 CALLDATASIZE PUSH2 0x3246 JUMP JUMPDEST SWAP3 SWAP2 SWAP4 SWAP1 PUSH2 0x1ECF PUSH2 0x36A9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 MSTORE AND SWAP5 AND SWAP3 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH1 0x5 SLOAD PUSH0 DUP3 PUSH2 0x1F14 DUP4 PUSH2 0x3308 JUMP JUMPDEST SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP1 DUP6 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x15BE JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1F41 JUMPI POP PUSH2 0x154F SWAP3 POP SUB DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x5 PUSH0 MSTORE PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0x1F84 JUMPI POP POP PUSH2 0x154F SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x1542 JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x1F6D JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x60 PUSH1 0x40 DUP1 MLOAD PUSH2 0x1FBB DUP2 PUSH2 0x30B1 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE PUSH32 0xD623472500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x3 NOT PUSH1 0x40 DUP2 CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x2E3 JUMPI PUSH1 0xE0 SWAP2 CALLDATASIZE SUB ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x2026 PUSH2 0x3072 JUMP JUMPDEST POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x209A PUSH2 0x304F JUMP JUMPDEST PUSH2 0x20A2 PUSH2 0x3072 JUMP JUMPDEST POP PUSH1 0x5 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x2E3 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x20CF SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST POP PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x20E8 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST POP PUSH1 0xC4 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x2101 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x31F0 JUMP JUMPDEST POP PUSH2 0x210A PUSH2 0x36A9 JUMP JUMPDEST PUSH32 0x0 TIMESTAMP LT ISZERO PUSH2 0x2207 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP1 PUSH32 0x0 AND DUP3 EQ SWAP2 DUP3 PUSH2 0x2184 JUMPI JUMPDEST PUSH1 0x20 DUP4 PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 SWAP3 POP PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0x5E01EB5A00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x60B JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0x21D8 JUMPI JUMPDEST POP DUP1 PUSH1 0x6 SLOAD AND SWAP2 AND EQ SWAP1 DUP3 PUSH2 0x2177 JUMP JUMPDEST PUSH2 0x21F9 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x2200 JUMPI JUMPDEST PUSH2 0x21F1 DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x354E JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x21C8 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x21E7 JUMP JUMPDEST PUSH32 0x3EEE08C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x2261 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST POP PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x2026 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x31F0 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH2 0x1308 PUSH2 0x37AD JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH2 0x22AE PUSH2 0x3759 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH2 0x100 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x2327 PUSH2 0x304F JUMP JUMPDEST POP PUSH2 0x2330 PUSH2 0x3072 JUMP JUMPDEST POP PUSH1 0x4 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x2E3 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x235D SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST POP PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x14B1 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x29A2241AF62C0000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH2 0x1EC3 CALLDATASIZE PUSH2 0x3246 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x84 PUSH1 0x20 PUSH2 0x23DB CALLDATASIZE PUSH2 0x3246 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x15DACBEA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP2 DUP4 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD MSTORE SWAP3 DUP4 SWAP2 DUP3 SWAP1 PUSH0 SWAP1 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x60B JUMPI PUSH2 0x11DB JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x24A3 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST POP PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x24BC SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x31F0 JUMP JUMPDEST POP PUSH2 0x24C5 PUSH2 0x36A9 JUMP JUMPDEST PUSH32 0x0 TIMESTAMP LT ISZERO PUSH2 0x2207 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E01EB5A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x60B JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0x2575 JUMPI JUMPDEST POP DUP1 PUSH1 0x6 SLOAD AND SWAP2 AND EQ PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x258D SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x2200 JUMPI PUSH2 0x21F1 DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x2564 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x3 NOT PUSH1 0x20 DUP2 CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x2E3 JUMPI PUSH2 0x180 SWAP2 CALLDATASIZE SUB ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH0 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH2 0x1308 PUSH2 0x34A3 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x261F SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x2639 PUSH2 0x2632 DUP3 PUSH1 0x44 CALLDATALOAD SWAP5 PUSH2 0x3387 JUMP JUMPDEST MLOAD SWAP2 PUSH2 0x3714 JUMP JUMPDEST PUSH1 0x1 SWAP2 SWAP1 DUP3 DUP5 GT ISZERO PUSH2 0x281C JUMPI PUSH1 0x2 JUMPDEST DUP1 PUSH1 0x3 EQ PUSH2 0x27AB JUMPI DUP1 PUSH1 0x4 EQ PUSH2 0x273D JUMPI DUP1 PUSH1 0x1 EQ PUSH2 0x26E5 JUMPI PUSH1 0x2 EQ PUSH2 0x2694 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x51 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x26BD JUMPI PUSH1 0x20 SWAP4 PUSH2 0x1308 SWAP4 PUSH2 0x13A5 SWAP3 PUSH15 0xC097CE7BC90715B34B9F0FFFFFFFFF DIV ADD SWAP1 PUSH2 0x3C25 JUMP JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP DUP1 SWAP4 SWAP3 POP ISZERO PUSH2 0x2710 JUMPI PUSH2 0x13A5 PUSH2 0x1308 SWAP3 PUSH1 0x20 SWAP5 PUSH15 0xC097CE7BC90715B34B9F1000000000 DIV SWAP1 PUSH2 0x3C25 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP4 SWAP3 PUSH0 SWAP2 DUP2 JUMPDEST PUSH2 0x276B JUMPI JUMPDEST POP POP POP DUP3 ISZERO PUSH2 0x13C5 JUMPI PUSH2 0x13A5 PUSH2 0x1308 SWAP3 PUSH1 0x20 SWAP5 SWAP1 PUSH2 0x3C25 JUMP JUMPDEST SWAP1 SWAP2 SWAP5 PUSH8 0xDE0B6B3A7640000 MLOAD DUP7 LT ISZERO PUSH2 0x27A5 JUMPI SWAP1 DUP3 PUSH2 0x279D DUP2 SWAP4 PUSH2 0x13A5 PUSH2 0x2793 DUP11 DUP7 PUSH2 0x3387 JUMP JUMPDEST MLOAD PUSH2 0x139E DUP12 PUSH2 0x3366 JUMP JUMPDEST SWAP7 ADD SWAP3 PUSH2 0x274D JUMP JUMPDEST SWAP5 PUSH2 0x2752 JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP4 SWAP3 PUSH0 SWAP2 DUP2 JUMPDEST PUSH2 0x27D8 JUMPI POP POP POP DUP3 ISZERO PUSH2 0x13C5 JUMPI PUSH2 0x13A5 PUSH2 0x1308 SWAP3 PUSH1 0x20 SWAP5 SWAP1 PUSH2 0x3C25 JUMP JUMPDEST SWAP1 SWAP2 SWAP5 PUSH8 0xDE0B6B3A7640000 MLOAD DUP7 LT ISZERO PUSH2 0x27A5 JUMPI SWAP1 DUP3 PUSH8 0xDE0B6B3A7640000 PUSH2 0x2813 DUP3 SWAP5 PUSH2 0x1432 PUSH2 0x2809 DUP12 DUP8 PUSH2 0x3387 JUMP JUMPDEST MLOAD PUSH2 0x142B DUP13 PUSH2 0x3366 JUMP JUMPDEST DIV SWAP7 ADD SWAP3 PUSH2 0x27BB JUMP JUMPDEST DUP3 PUSH2 0x2648 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH2 0x120 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x665 JUMPI PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE PUSH0 PUSH1 0xA0 DUP3 ADD MSTORE PUSH0 PUSH1 0xC0 DUP3 ADD MSTORE PUSH0 PUSH1 0xE0 DUP3 ADD MSTORE PUSH0 PUSH2 0x100 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH1 0x40 MLOAD PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP6 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x60B JUMPI PUSH0 SWAP2 PUSH2 0x2C48 JUMPI JUMPDEST POP DUP3 MSTORE PUSH32 0x0 DUP1 PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x24 PUSH0 PUSH32 0x0 SWAP4 DUP5 PUSH1 0xE0 DUP8 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0x7E361BDE00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x60B JUMPI PUSH0 SWAP2 PUSH2 0x2BE9 JUMPI JUMPDEST POP PUSH1 0x20 DUP5 ADD MSTORE PUSH32 0x0 ISZERO ISZERO PUSH2 0x100 DUP5 ADD MSTORE PUSH32 0x0 PUSH1 0x80 DUP5 ADD MSTORE PUSH32 0x0 PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x40 MLOAD PUSH2 0x2A1C DUP2 PUSH2 0x30B1 JUMP JUMPDEST PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP4 ADD CALLDATACOPY DUP1 PUSH1 0x40 DUP6 ADD MSTORE PUSH2 0x2A59 DUP3 PUSH32 0x0 SWAP3 PUSH2 0x3387 JUMP JUMPDEST MSTORE PUSH32 0x0 PUSH2 0x2A89 DUP4 PUSH1 0x40 DUP7 ADD MLOAD PUSH2 0x3387 JUMP JUMPDEST MSTORE PUSH2 0x2AD3 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x2A9A DUP4 PUSH2 0x30B1 JUMP JUMPDEST PUSH1 0x2 DUP4 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP6 ADD CALLDATACOPY DUP3 PUSH1 0x60 DUP7 ADD MSTORE PUSH32 0x0 SWAP3 PUSH2 0x3387 JUMP JUMPDEST MSTORE PUSH2 0x2B03 PUSH32 0x0 SWAP2 PUSH1 0x60 DUP5 ADD MLOAD PUSH2 0x3387 JUMP JUMPDEST MSTORE PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH2 0x140 DUP2 ADD SWAP2 DUP1 MLOAD SWAP3 PUSH2 0x120 PUSH1 0x20 DUP5 ADD MSTORE DUP4 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH2 0x160 DUP5 ADD SWAP5 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x2BBD JUMPI POP POP POP PUSH2 0x100 PUSH2 0x2B87 DUP4 SWAP5 PUSH2 0x2B72 PUSH2 0x2B5E PUSH1 0x20 DUP7 ADD MLOAD SWAP3 PUSH1 0x1F NOT SWAP4 DUP5 DUP10 DUP4 SUB ADD PUSH1 0x40 DUP11 ADD MSTORE PUSH2 0x315D JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD DUP4 DUP9 DUP4 SUB ADD PUSH1 0x60 DUP10 ADD MSTORE PUSH2 0x315D JUMP JUMPDEST SWAP1 PUSH1 0x60 DUP6 ADD MLOAD SWAP1 DUP7 DUP4 SUB ADD PUSH1 0x80 DUP8 ADD MSTORE PUSH2 0x315D JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0xC0 DUP6 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 DUP6 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD DUP3 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH2 0x120 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST DUP3 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 MSTORE PUSH1 0x20 SWAP6 DUP7 ADD SWAP6 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x2B2D JUMP JUMPDEST SWAP1 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2BFA DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x40 DUP2 DUP4 SUB SLT PUSH2 0x2E3 JUMPI DUP1 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2E3 JUMPI DUP3 PUSH2 0x2C24 SWAP2 DUP4 ADD PUSH2 0x3442 JUMP JUMPDEST SWAP2 PUSH1 0x20 DUP3 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x2C43 SWAP3 ADD PUSH2 0x3442 JUMP JUMPDEST PUSH2 0x2995 JUMP JUMPDEST PUSH2 0x2C5C SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x10FE DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP4 PUSH2 0x2900 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x2C7B PUSH2 0x304F JUMP JUMPDEST POP PUSH2 0x2C84 PUSH2 0x3072 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x2E3 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0x2E3 JUMPI DUP2 PUSH1 0x4 ADD CALLDATALOAD PUSH2 0x2CB0 DUP2 PUSH2 0x3145 JUMP JUMPDEST SWAP1 PUSH2 0x2CBE PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 ADD SWAP1 PUSH1 0x24 DUP3 SWAP4 PUSH1 0x7 SHL DUP3 ADD ADD SWAP1 CALLDATASIZE DUP3 GT PUSH2 0x2E3 JUMPI PUSH1 0x24 ADD SWAP2 JUMPDEST DUP2 DUP4 LT PUSH2 0x2E1B JUMPI POP POP POP PUSH1 0x80 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x2D1B PUSH2 0x36A9 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x2 SUB PUSH2 0x2DF3 JUMPI DUP2 MLOAD ISZERO PUSH2 0x2DC6 JUMPI MLOAD DUP4 ADD MLOAD PUSH2 0x2D38 DUP2 PUSH2 0x32D1 JUMP JUMPDEST PUSH2 0x2D41 DUP2 PUSH2 0x32D1 JUMP JUMPDEST ISZERO SWAP1 DUP2 ISZERO SWAP2 PUSH2 0x2D99 JUMPI JUMPDEST POP PUSH2 0x2D71 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADDRESS SWAP2 AND EQ DUP2 MSTORE RETURN JUMPDEST PUSH32 0xDF45063200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 SWAP2 POP MLOAD PUSH1 0x1 LT ISZERO PUSH2 0x2DC6 JUMPI PUSH1 0x40 ADD MLOAD DUP3 ADD MLOAD PUSH2 0x2DB5 DUP2 PUSH2 0x32D1 JUMP JUMPDEST PUSH2 0x2DBE DUP2 PUSH2 0x32D1 JUMP JUMPDEST ISZERO ISZERO DUP4 PUSH2 0x2D4B JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xAAAD13F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x80 DUP4 CALLDATASIZE SUB SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0x2E32 DUP3 PUSH2 0x3095 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x2E3 JUMPI DUP4 MSTORE DUP9 DUP6 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2E3 JUMPI DUP10 DUP5 ADD MSTORE PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x2E3 JUMPI PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 DUP6 ADD CALLDATALOAD SWAP3 DUP4 ISZERO ISZERO DUP5 SUB PUSH2 0x2E3 JUMPI PUSH1 0x80 SWAP4 DUP11 SWAP4 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x2CDF JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x1189 PUSH1 0x20 PUSH2 0x2EBA PUSH2 0x304F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x24 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLDATALOAD PUSH1 0x44 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH1 0x3 SLOAD PUSH0 DUP3 PUSH2 0x2F3A DUP4 PUSH2 0x3308 JUMP JUMPDEST SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP1 DUP6 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x15BE JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x2F67 JUMPI POP PUSH2 0x154F SWAP3 POP SUB DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x3 PUSH0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0x2FAA JUMPI POP POP PUSH2 0x154F SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x1542 JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x2F93 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x2E3 JUMPI PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP3 EQ DUP2 MSTORE RETURN JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x2E3 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x2E3 JUMPI JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x665 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x665 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x665 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH2 0x140 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x665 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x665 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x665 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x665 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x317C JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x316E JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x2E3 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x31AA DUP2 PUSH2 0x3145 JUMP JUMPDEST SWAP4 PUSH2 0x31B8 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x3122 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x2E3 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x31E1 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x31D3 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x2E3 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x665 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x3225 PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP7 ADD AND ADD DUP6 PUSH2 0x3122 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x2E3 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x2E3 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x2E3 JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x2E3 JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x32A7 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x3299 JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x32DB JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x334F JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x3322 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x3317 JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x2E3 JUMPI JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 MLOAD DUP2 LT ISZERO PUSH2 0x2DC6 JUMPI PUSH1 0x5 SHL PUSH8 0xDE0B6B3A7640020 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x2DC6 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x2E3 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x33B6 DUP2 PUSH2 0x3145 JUMP JUMPDEST SWAP4 PUSH2 0x33C4 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x3122 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x2E3 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x33ED JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x2E3 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x33DF JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x2E3 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x343F SWAP3 ADD PUSH2 0x339B JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x2E3 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x345D DUP2 PUSH2 0x3145 JUMP JUMPDEST SWAP4 PUSH2 0x346B PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x3122 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x2E3 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x3494 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x3486 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xE4DC2AA400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x60B JUMPI PUSH0 SWAP2 PUSH2 0x351F JUMPI POP SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3546 JUMPI JUMPDEST DUP2 PUSH2 0x353A PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x2E3 JUMPI MLOAD SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x352D JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x2E3 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x2E3 JUMPI SWAP1 JUMP JUMPDEST DUP1 SWAP2 SUB SWAP1 PUSH2 0x1A0 DUP3 SLT PUSH2 0x2E3 JUMPI PUSH1 0x80 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x3596 DUP5 PUSH2 0x30E9 JUMP JUMPDEST SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH2 0x35A7 DUP2 PUSH2 0x3095 JUMP JUMPDEST PUSH2 0x35B0 DUP3 PUSH2 0x3359 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x35BE PUSH1 0x20 DUP4 ADD PUSH2 0x3359 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x35CF PUSH1 0x40 DUP4 ADD PUSH2 0x3359 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x35E0 PUSH1 0x60 DUP4 ADD PUSH2 0x3359 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE DUP3 MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x2E3 JUMPI PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x100 SWAP1 DUP2 DUP2 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x2E3 JUMPI PUSH2 0x367C SWAP2 PUSH2 0x180 SWAP2 PUSH1 0xA0 DUP7 ADD MSTORE PUSH2 0x120 SWAP4 PUSH2 0x364E DUP6 DUP4 ADD PUSH2 0x3359 JUMP JUMPDEST PUSH1 0xC0 DUP8 ADD MSTORE PUSH2 0x3660 PUSH2 0x140 DUP4 ADD PUSH2 0x3359 JUMP JUMPDEST PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x3672 PUSH2 0x160 DUP4 ADD PUSH2 0x3359 JUMP JUMPDEST SWAP1 DUP7 ADD MSTORE ADD PUSH2 0x3359 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x2E3 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x343F SWAP3 ADD PUSH2 0x3442 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x36E8 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x2 DUP2 LT PUSH2 0x3744 JUMPI PUSH32 0xC1AB6DC100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x3755 SWAP1 PUSH2 0x3750 PUSH2 0x3AA3 JUMP JUMPDEST PUSH2 0x3387 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH32 0x0 TIMESTAMP LT ISZERO DUP1 PUSH2 0x3785 JUMPI SWAP1 JUMP JUMPDEST POP PUSH32 0x0 TIMESTAMP GT ISZERO SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND ADDRESS EQ DUP1 PUSH2 0x38BC JUMPI JUMPDEST ISZERO PUSH2 0x3815 JUMPI PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP3 MSTORE PUSH32 0x0 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x665 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST POP PUSH32 0x0 CHAINID EQ PUSH2 0x37EC JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x6 SLOAD AND CALLER SUB PUSH2 0x1AE1 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 MLOAD PUSH2 0x391D PUSH1 0x60 DUP4 ADD SWAP2 DUP3 MLOAD SWAP1 PUSH2 0x3387 JUMP JUMPDEST MLOAD SWAP3 MLOAD SWAP2 PUSH2 0x3931 PUSH1 0x80 DUP3 ADD SWAP4 DUP5 MLOAD SWAP1 PUSH2 0x3387 JUMP JUMPDEST MLOAD SWAP2 DUP2 MLOAD PUSH2 0x393E DUP2 PUSH2 0x32D1 JUMP JUMPDEST PUSH2 0x3947 DUP2 PUSH2 0x32D1 JUMP JUMPDEST PUSH2 0x39F2 JUMPI PUSH2 0x3961 PUSH2 0x395A PUSH1 0x20 SWAP3 MLOAD PUSH2 0x3714 JUMP JUMPDEST SWAP5 MLOAD PUSH2 0x3714 JUMP JUMPDEST SWAP2 ADD MLOAD PUSH8 0xDE0B6B3A7640000 SWAP5 DUP6 PUSH2 0x3978 DUP3 PUSH2 0x3BC7 JUMP JUMPDEST DIV DUP3 GT PUSH2 0x39CA JUMPI PUSH2 0x398C PUSH2 0x3992 SWAP3 DUP3 PUSH2 0x3C18 JUMP JUMPDEST SWAP1 PUSH2 0x4095 JUMP JUMPDEST DUP5 DUP5 MUL SWAP4 DUP1 DUP6 DIV DUP7 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x133C JUMPI PUSH2 0x39B3 PUSH2 0x39B9 SWAP3 PUSH2 0x39C6 SWAP6 PUSH2 0x3C0E JUMP JUMPDEST SWAP1 PUSH2 0x3C25 JUMP JUMPDEST DUP4 DUP2 DUP2 SUB SWAP2 LT MUL SWAP1 PUSH2 0x3BFB JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST PUSH32 0x340A453300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x3A0C PUSH2 0x3A05 PUSH1 0x20 SWAP3 SWAP6 SWAP4 SWAP5 SWAP6 MLOAD PUSH2 0x3714 JUMP JUMPDEST SWAP3 MLOAD PUSH2 0x3714 JUMP JUMPDEST SWAP3 ADD MLOAD PUSH8 0xDE0B6B3A7640000 PUSH2 0x3A21 DUP6 PUSH2 0x3BC7 JUMP JUMPDEST DIV DUP2 GT PUSH2 0x3A7B JUMPI DUP4 SUB SWAP1 DUP4 DUP3 GT PUSH2 0x133C JUMPI PUSH2 0x3A42 PUSH2 0x39B3 SWAP3 PUSH2 0x3A48 SWAP6 PUSH2 0x4095 JUMP JUMPDEST SWAP3 PUSH2 0x4095 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21F494C589C0000 DUP2 ADD SWAP1 DUP2 GT PUSH2 0x133C JUMPI PUSH2 0x343F SWAP2 PUSH2 0x3CB0 JUMP JUMPDEST PUSH32 0x64590B9F00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3AAF DUP2 PUSH2 0x30B1 JUMP JUMPDEST PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH2 0x3B85 PUSH2 0x3B52 PUSH2 0x3B0B PUSH32 0x0 PUSH32 0x0 PUSH2 0x4A21 JUMP JUMPDEST PUSH32 0x0 PUSH32 0x0 PUSH2 0x4A66 JUMP JUMPDEST PUSH32 0x0 SWAP1 PUSH2 0x3B7E DUP3 DUP6 PUSH2 0x3387 JUMP JUMPDEST MSTORE DUP3 PUSH2 0x3387 JUMP JUMPDEST MLOAD PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 SUB SWAP1 DUP2 GT PUSH2 0x133C JUMPI PUSH2 0x3BC3 PUSH32 0x0 DUP4 PUSH2 0x3387 JUMP JUMPDEST MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH8 0x429D069189E0000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x133C JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x2710 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x133C JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x133C JUMPI JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2710 JUMPI DIV SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x133C JUMPI JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 SUB PUSH2 0x3C3C JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x3C57 JUMPI POP POP DUP1 PUSH2 0x343F SWAP2 PUSH2 0x3CB0 JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x3C7B JUMPI POP POP PUSH2 0x3C75 DUP2 PUSH2 0x343F SWAP3 PUSH2 0x3CB0 JUMP JUMPDEST DUP1 PUSH2 0x3CB0 JUMP JUMPDEST PUSH2 0x3C85 SWAP2 SWAP3 PUSH2 0x40EA JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH2 0x3C91 DUP4 PUSH2 0x3BE4 JUMP JUMPDEST SWAP2 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH1 0x1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x133C JUMPI PUSH2 0x343F SWAP2 PUSH2 0x3C18 JUMP JUMPDEST SWAP1 PUSH2 0x3CBA SWAP2 PUSH2 0x3BFB JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x3D26 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x3CFE JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x3CF4 DUP4 PUSH2 0x3106 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH32 0xB3512B0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH0 SLOAD SWAP2 PUSH2 0x3D38 DUP4 PUSH2 0x3308 JUMP JUMPDEST DUP1 DUP4 MSTORE SWAP3 PUSH1 0x20 SWAP1 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x3DC1 JUMPI POP PUSH1 0x1 EQ PUSH2 0x3D63 JUMPI JUMPDEST POP POP PUSH2 0x343F SWAP3 POP SUB DUP3 PUSH2 0x3122 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x3DA9 JUMPI POP PUSH2 0x343F SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x3D55 JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x3D8E JUMP JUMPDEST SWAP1 POP PUSH1 0x20 SWAP4 POP PUSH2 0x343F SWAP6 SWAP3 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP2 POP AND DUP3 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x3D55 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x3E26 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x3CFE JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x3CF4 DUP4 PUSH2 0x3106 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD PUSH2 0x3E3B DUP2 PUSH2 0x3308 JUMP JUMPDEST DUP1 DUP5 MSTORE SWAP4 PUSH1 0x20 SWAP2 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x3DC1 JUMPI POP PUSH1 0x1 EQ PUSH2 0x3E63 JUMPI POP POP PUSH2 0x343F SWAP3 POP SUB DUP3 PUSH2 0x3122 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x3EAA JUMPI POP PUSH2 0x343F SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x3D55 JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x3E8F JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 DUP1 DUP4 SUB PUSH2 0x3ED9 JUMPI POP SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 SWAP1 PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x3EF6 JUMPI POP POP DUP1 PUSH2 0x39C6 SWAP2 PUSH2 0x3BFB JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x3F1A JUMPI POP PUSH2 0x3F13 DUP3 PUSH2 0x39C6 SWAP4 PUSH2 0x3BFB JUMP JUMPDEST DIV DUP1 PUSH2 0x3BFB JUMP JUMPDEST SWAP1 POP PUSH2 0x3F25 SWAP2 PUSH2 0x40EA JUMP JUMPDEST PUSH2 0x3F2E DUP2 PUSH2 0x3BE4 JUMP JUMPDEST PUSH1 0x1 PUSH0 NOT SWAP4 DUP5 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 PUSH1 0x1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x133C JUMPI DUP2 LT ISZERO PUSH2 0x3F56 JUMPI POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SUB ADD SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP5 GT PUSH2 0x3FDF JUMPI SWAP2 PUSH1 0x20 SWAP4 PUSH1 0x80 SWAP3 PUSH1 0xFF PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND DUP7 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE DUP3 DUP1 MSTORE PUSH1 0x1 GAS STATICCALL ISZERO PUSH2 0x60B JUMPI PUSH0 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x3FD5 JUMPI SWAP1 PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 PUSH1 0x1 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP POP POP PUSH0 SWAP2 PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x32DB JUMPI DUP1 PUSH2 0x3FFC JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x402C JUMPI PUSH32 0xF645EEDF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x4060 JUMPI POP PUSH32 0xFCE698F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x3 EQ PUSH2 0x406A JUMPI POP JUMP JUMPDEST PUSH32 0xD78BCE0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x26BD JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x133C JUMPI PUSH1 0x1 SWAP1 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x2710 JUMPI PUSH15 0xC097CE7BC90715B34B9F1000000000 SDIV SWAP1 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2710 JUMPI SDIV SWAP1 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x4A13 JUMPI DUP2 ISZERO PUSH2 0x4A0D JUMPI DUP2 PUSH1 0xFF SHR PUSH2 0x49E5 JUMPI PUSH24 0xBCE5086492111AEA88F4BB1CA6BCF584181EA8059F76532 DUP2 LT ISZERO PUSH2 0x49BD JUMPI DUP2 PUSH8 0xC7D713B49DA0000 SLT DUP1 PUSH2 0x49AC JUMPI JUMPDEST ISZERO PUSH2 0x4649 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH15 0xC097CE7BC90715B34B9F1000000000 SWAP1 PUSH2 0x4183 SWAP1 DUP5 MUL DUP3 DUP2 ADD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F68318436F8EA4CB460F000000000 ADD DUP4 MUL PUSH2 0x40E0 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV DUP4 DUP6 DUP3 MUL SDIV SWAP2 DUP5 DUP7 DUP5 MUL SDIV SWAP4 DUP6 DUP8 DUP7 MUL SDIV SWAP6 DUP1 DUP9 DUP9 MUL SDIV SWAP8 DUP9 MUL SDIV PUSH1 0xF SWAP1 SDIV SWAP7 PUSH1 0xD SWAP1 SDIV SWAP6 PUSH1 0xB SWAP1 SDIV SWAP5 PUSH1 0x9 SWAP1 SDIV SWAP4 PUSH1 0x7 SWAP1 SDIV SWAP3 PUSH1 0x5 SWAP1 SDIV SWAP2 PUSH1 0x3 SWAP1 SDIV ADD ADD ADD ADD ADD ADD ADD PUSH1 0x1 SHL SWAP2 DUP1 DUP3 DUP2 DUP6 SMOD MUL SDIV SWAP3 SDIV MUL ADD PUSH8 0xDE0B6B3A7640000 SWAP1 JUMPDEST SDIV PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC702BD3A30FC0000 DUP2 DUP2 SGT ISZERO DUP1 PUSH2 0x4636 JUMPI JUMPDEST ISZERO PUSH2 0x460E JUMPI DUP2 SWAP1 DUP3 SLT ISZERO DUP1 PUSH2 0x45FB JUMPI JUMPDEST ISZERO PUSH2 0x45D3 JUMPI PUSH0 SWAP2 PUSH0 DUP2 SLT PUSH2 0x45C4 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH9 0x6F05B59D3B2000000 DUP2 SLT PUSH2 0x4561 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90FA4A62C4E000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP3 JUMPDEST MUL DUP2 SWAP1 PUSH9 0xAD78EBC5AC62000000 DUP2 SLT ISZERO PUSH2 0x4528 JUMPI JUMPDEST PUSH9 0x56BC75E2D631000000 DUP2 SLT ISZERO PUSH2 0x44EE JUMPI JUMPDEST PUSH9 0x2B5E3AF16B18800000 DUP2 SLT ISZERO PUSH2 0x44B6 JUMPI JUMPDEST PUSH9 0x15AF1D78B58C400000 DUP2 SLT ISZERO PUSH2 0x447E JUMPI JUMPDEST PUSH9 0xAD78EBC5AC6200000 DUP2 SLT ISZERO PUSH2 0x4447 JUMPI JUMPDEST DUP3 DUP2 SLT ISZERO PUSH2 0x4410 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B1880000 DUP2 SLT ISZERO PUSH2 0x43D9 JUMPI JUMPDEST PUSH9 0x15AF1D78B58C40000 DUP2 SLT ISZERO PUSH2 0x43A2 JUMPI JUMPDEST PUSH1 0x2 DUP4 DUP3 DUP1 MUL SDIV SDIV PUSH1 0x3 DUP5 DUP4 DUP4 MUL SDIV SDIV PUSH1 0x4 DUP6 DUP5 DUP4 MUL SDIV SDIV DUP6 PUSH1 0x5 DUP2 DUP7 DUP5 MUL SDIV SDIV PUSH1 0x6 DUP3 DUP8 DUP4 MUL SDIV SDIV PUSH1 0x7 DUP4 DUP9 DUP4 MUL SDIV SDIV SWAP1 PUSH1 0x8 DUP5 DUP10 DUP5 MUL SDIV SDIV SWAP3 PUSH1 0x9 DUP6 DUP11 DUP7 MUL SDIV SDIV SWAP6 PUSH1 0xA DUP7 DUP12 DUP10 MUL SDIV SDIV SWAP8 PUSH1 0xB DUP8 DUP13 DUP12 MUL SDIV SDIV SWAP10 PUSH1 0xC DUP9 DUP14 DUP14 MUL SDIV SDIV SWAP12 ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD MUL SDIV MUL SDIV SWAP1 PUSH0 EQ PUSH2 0x343F JUMPI PUSH2 0x343F SWAP1 PUSH2 0x40C6 JUMP JUMPDEST PUSH9 0x6F5F1775788937937 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C0000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x4323 JUMP JUMPDEST PUSH9 0x8F00F760A4B2DB55D PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E780000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x4311 JUMP JUMPDEST PUSH9 0xEBC5FB41746121110 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x42FF JUMP JUMPDEST PUSH9 0x280E60114EDB805D03 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x42F6 JUMP JUMPDEST PUSH10 0x127FA27722CC06CC5E2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x42E4 JUMP JUMPDEST PUSH10 0x3F1FCE3DA636EA5CF850 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E7800000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x42D2 JUMP JUMPDEST PUSH12 0x2DF0AB5A80A22C61AB5A700 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF000000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x42C0 JUMP JUMPDEST PUSH15 0x1855144814A7FF805980FF0084000 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E000000 ADD PUSH2 0x42AE JUMP JUMPDEST PUSH9 0x3782DACE9D9000000 DUP2 SLT PUSH2 0x45B1 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC87D2531627000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH12 0x1425982CF597CD205CEF7380 SWAP3 PUSH2 0x4299 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP3 PUSH1 0x1 SWAP3 PUSH2 0x4299 JUMP JUMPDEST PUSH1 0x1 SWAP3 POP PUSH0 SUB SWAP1 POP PUSH1 0x64 PUSH2 0x423D JUMP JUMPDEST PUSH32 0xD4794EFD00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x422E JUMP JUMPDEST PUSH32 0xA2F9F7E300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x421E JUMP JUMPDEST DUP2 PUSH8 0xDE0B6B3A7640000 SWAP3 PUSH0 SWAP2 DUP5 DUP2 SLT PUSH2 0x4996 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH0 PUSH31 0x1600EF3172E58D2E933EC884FDE10064C63B5372D805E203C0000000000000 DUP3 SLT ISZERO PUSH2 0x496B JUMPI JUMPDEST PUSH20 0x11798004D755D3C8BC8E03204CF44619E000000 DUP3 SLT ISZERO PUSH2 0x494A JUMPI JUMPDEST DUP3 MUL SWAP1 DUP1 DUP4 MUL SWAP1 PUSH15 0x1855144814A7FF805980FF0084000 SWAP1 DUP2 DUP4 SLT ISZERO PUSH2 0x4927 JUMPI JUMPDEST POP POP PUSH12 0x2DF0AB5A80A22C61AB5A700 DUP1 DUP3 SLT ISZERO PUSH2 0x4907 JUMPI JUMPDEST POP PUSH10 0x3F1FCE3DA636EA5CF850 DUP1 DUP3 SLT ISZERO PUSH2 0x48E7 JUMPI JUMPDEST POP PUSH10 0x127FA27722CC06CC5E2 DUP1 DUP3 SLT ISZERO PUSH2 0x48C7 JUMPI JUMPDEST POP PUSH9 0x280E60114EDB805D03 DUP1 DUP3 SLT ISZERO PUSH2 0x48A7 JUMPI JUMPDEST POP PUSH9 0xEBC5FB41746121110 DUP1 DUP3 SLT ISZERO PUSH2 0x4890 JUMPI JUMPDEST POP PUSH9 0x8F00F760A4B2DB55D DUP1 DUP3 SLT ISZERO PUSH2 0x4870 JUMPI JUMPDEST POP PUSH9 0x6F5F1775788937937 DUP1 DUP3 SLT ISZERO PUSH2 0x4850 JUMPI JUMPDEST POP PUSH9 0x6248F33704B286603 DUP1 DUP3 SLT ISZERO PUSH2 0x4831 JUMPI JUMPDEST POP PUSH9 0x5C548670B9510E7AC DUP1 DUP3 SLT ISZERO PUSH2 0x4812 JUMPI JUMPDEST POP PUSH2 0x47BF PUSH9 0x56BC75E2D63100000 SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP2 DUP4 ADD SWAP3 ADD MUL PUSH2 0x40E0 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV SWAP2 PUSH1 0x3 PUSH1 0x5 PUSH1 0x7 PUSH1 0x9 PUSH1 0xB DUP9 DUP11 DUP10 MUL SDIV SWAP9 DUP1 DUP12 DUP12 MUL SDIV SWAP11 DUP12 MUL SDIV SDIV SWAP9 SDIV SWAP7 SDIV SWAP5 SDIV SWAP3 SDIV ADD ADD ADD ADD ADD PUSH1 0x1 SHL ADD SDIV SWAP1 PUSH0 EQ PUSH2 0x480D JUMPI PUSH0 SUB JUMPDEST MUL PUSH2 0x41F2 JUMP JUMPDEST PUSH2 0x4807 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0x56BC75E2D6310000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x4783 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0xAD78EBC5AC620000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x476F JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C40000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x475B JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B1880000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x4747 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP1 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x4733 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0xAD78EBC5AC6200000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x471F JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C400000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x470B JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B18800000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x46F6 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x56BC75E2D631000000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x46E1 JUMP JUMPDEST PUSH9 0xAD78EBC5AC62000000 SWAP3 POP PUSH10 0x21E19E0C9BAB2400000 MUL SDIV SWAP2 ADD SWAP1 PUSH0 DUP1 PUSH2 0x46C9 JUMP JUMPDEST SWAP1 PUSH12 0x1425982CF597CD205CEF7380 PUSH9 0x3782DACE9D9000000 SWAP2 SDIV SWAP2 ADD PUSH2 0x46A8 JUMP JUMPDEST POP PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP1 SDIV PUSH9 0x6F05B59D3B2000000 PUSH2 0x468B JUMP JUMPDEST SWAP1 POP PUSH2 0x49A2 SWAP2 POP PUSH2 0x40C6 JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x64 PUSH2 0x465E JUMP JUMPDEST POP PUSH8 0xF43FC2C04EE0000 DUP3 SLT PUSH2 0x4130 JUMP JUMPDEST PUSH32 0xD831731100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x22701E000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP JUMPDEST TIMESTAMP DUP3 GT PUSH2 0x4A36 JUMPI POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP JUMPDEST DUP1 TIMESTAMP GT ISZERO PUSH2 0x4A0D JUMPI DUP1 TIMESTAMP SUB SWAP1 PUSH8 0xDE0B6B3A7640000 DUP1 DUP4 MUL SWAP3 DUP4 DIV EQ DUP2 TIMESTAMP EQ OR ISZERO PUSH2 0x133C JUMPI PUSH2 0x343F SWAP3 SUB SWAP1 PUSH2 0x3C0E JUMP JUMPDEST SWAP2 SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 LT DUP1 ISZERO SWAP1 PUSH2 0x4ABF JUMPI JUMPDEST PUSH2 0x4AB8 JUMPI DUP1 ISZERO PUSH2 0x4AB2 JUMPI DUP4 DUP3 DUP2 GT ISZERO PUSH2 0x4AA2 JUMPI SWAP2 PUSH2 0x4A9C SWAP3 SUB SWAP1 PUSH2 0x3BFB JUMP JUMPDEST DIV SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH2 0x4AAD SWAP3 SUB SWAP1 PUSH2 0x3BFB JUMP JUMPDEST DIV ADD SWAP1 JUMP JUMPDEST POP POP POP SWAP1 JUMP JUMPDEST POP SWAP2 POP POP SWAP1 JUMP JUMPDEST POP DUP2 DUP5 EQ PUSH2 0x4A7D JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP15 0x4F 0xB2 0xB2 CREATE2 DUP13 LOG4 MLOAD 0xFB 0xB1 0xCC 0xD3 MULMOD 0x1E 0xDB 0xD 0xC3 0xC8 DUP9 0xD6 PUSH30 0x9E60EC791F1BEC06A724DA64736F6C634300081B00330000000000000000 ","sourceMap":"1845:17760:124:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4124:49:57;1845:17760:124;4124:49:57;;;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1615:50:36;1845:17760:124;1615:50:36;;;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;;6823:23:121;;:::i;:::-;1845:17760:124;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;:::i;:::-;1500:62:96;;:::i;:::-;1845:17760:124;;;;;;;1255:24:97;1845:17760:124;;;1255:24:97;1845:17760:124;1710:6:96;1845:17760:124;;1294:43:97;1845:17760:124;1294:43:97;;1845:17760:124;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;;7363:13;1845:17760;;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10784:6;1845:17760;;;;;10784:44;;10822:4;1845:17760;10784:44;;1845:17760;;10784:44;1845:17760;10784:44;;;;;;;;;1845:17760;10784:44;;;1845:17760;10756:72;;;10863:23;;:::i;:::-;10838:48;;1845:17760;;;10927:50;;10822:4;1845:17760;10927:50;;1845:17760;10927:50;;1845:17760;10927:50;;;;;;;;;1845:17760;10927:50;;;1845:17760;;;;11006:13;;:::i;:::-;1845:17760;;;;11061:35;;1845:17760;11061:35;;10822:4;1845:17760;11061:35;;1845:17760;11061:35;1845:17760;11061:35;;;;;;;;;;;;;1845:17760;11061:35;1845:17760;11061:35;1845:17760;11061:35;;;1845:17760;11131:28;;1845:17760;11131:28;;1845:17760;;;;;11189:23;;;1845:17760;;;;;11250:31;;;;1845:17760;;;;;11312:16;;:::i;:::-;1845:17760;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;1845:17760:124;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11061:35;;;;;;-1:-1:-1;11061:35:124;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;1845:17760;;;;;;;;;10927:50;;;;;;;;;;;;;;;;:::i;:::-;;;1845:17760;;;;;10927:50;;;;;;;;10784:44;;;;;;1845:17760;10784:44;;;;;;:::i;:::-;;;;;:::i;:::-;;;;1845:17760;;;;;;;;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;953:13:97;1845:17760:124;;;;;;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;3545:47:57;;;;;1845:17760:124;3545:47:57;;3570:4;1845:17760:124;3545:47:57;;1845:17760:124;;;;;;;;;;;3545:6:57;1845:17760:124;3545:47:57;;;;;;1845:17760:124;3545:47:57;;;1845:17760:124;;;;;;;;;3545:47:57;;1845:17760:124;3545:47:57;;1845:17760:124;3545:47:57;;;;;;1845:17760:124;3545:47:57;;;:::i;:::-;;;1845:17760:124;;;;;;;3545:47:57;;;;;-1:-1:-1;3545:47:57;;1845:17760:124;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15056:4;1845:17760;;15056:4;1845:17760;;15056:4;1845:17760;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;5510:15:57;;:26;5506:97;;5696:16;;1845:17760:124;;-1:-1:-1;1845:17760:124;1121:7:109;1845:17760:124;;;-1:-1:-1;1845:17760:124;;;;;;;;;759:395:109;;5696:16:57;1845:17760:124;7021:8:113;6967:25;1845:17760:124;;5644:79:57;1845:17760:124;5644:79:57;;1443:95;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5644:79:57;;;;;:::i;:::-;1845:17760:124;5634:90:57;;5053:20:114;;:::i;:::-;3515:233:115;1845:17760:124;3515:233:115;;;;;;;;;;;;;1845:17760:124;;;3515:233:115;1845:17760:124;;3515:233:115;;6967:25:113;:::i;:::-;7021:8;;;;;:::i;:::-;1845:17760:124;5848:15:57;;;5844:88;;1845:17760:124;;;5942:38:57;;1845:17760:124;;;;;5942:38:57;;1845:17760:124;;;;;;;;;;;;;;;;;-1:-1:-1;5942:6:57;1845:17760:124;;5942:38:57;;;;;;;;1845:17760:124;5942:38:57;1845:17760:124;5942:38:57;;1845:17760:124;5942:38:57;;;;;;1845:17760:124;5942:38:57;;;:::i;:::-;;;1845:17760:124;;;;;;;:::i;:::-;;5942:38:57;;;-1:-1:-1;5942:38:57;;5844:88;5886:35;1845:17760:124;5886:35:57;1845:17760:124;;;;;;5886:35:57;5506:97;5559:33;1845:17760:124;5559:33:57;1845:17760:124;;;;5559:33:57;1845:17760:124;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;1615:50:36;;1658:4;1845:17760:124;1615:50:36;;1845:17760:124;1615:50:36;:6;1845:17760:124;1615:6:36;1845:17760:124;1615:6:36;1845:17760:124;1615:50:36;;;;;;1845:17760:124;1615:50:36;;;;1845:17760:124;;;;;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;2778:8:121;1845:17760:124;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10181:16;1845:17760;10181:16;1845:17760;;10181:16;1845:17760;;;;;-1:-1:-1;;1845:17760:124;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;436:67:72;;:::i;:::-;17242:8:124;17223:15;:27;;17219:94;;1845:17760;;;;;;;17219:94;17273:29;1845:17760;17273:29;1845:17760;;17273:29;1845:17760;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;3215:5:52;1845:17760:124;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;1441:44:36;;1479:4;1845:17760:124;1441:44:36;;1845:17760:124;;1441:6:36;1845:17760:124;1441:6:36;1845:17760:124;1441:6:36;1845:17760:124;1441:44:36;;;;;;1845:17760:124;1441:44:36;1845:17760:124;1441:44:36;;;1845:17760:124;;;;;;;;;;;;;;;:::i;1441:44:36:-;;;;;;1845:17760:124;1441:44:36;;;;;;:::i;:::-;;;;1845:17760:124;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;;7104:14;1845:17760;;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;;1247:38:36;;1279:4;1845:17760:124;1247:38:36;;1845:17760:124;;1247:6:36;1845:17760:124;1247:6:36;;;1845:17760:124;1247:38:36;;;;;;1845:17760:124;;;;;;;1247:38:36;;;1845:17760:124;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1247:38:36;;;;;;;;;1845:17760:124;1247:38:36;;;;;;:::i;:::-;;;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;1247:38:36;;;;;;;;1845:17760:124;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;892:35:36;;921:4;1845:17760:124;892:35:36;;1845:17760:124;;892:6:36;1845:17760:124;892:6:36;1845:17760:124;892:6:36;1845:17760:124;892:35:36;;;;;;1845:17760:124;892:35:36;1845:17760:124;892:35:36;;;1845:17760:124;;;;;;;;;;;;;;;:::i;892:35:36:-;;;;;;1845:17760:124;892:35:36;;;;;;:::i;:::-;;;;;:::i;:::-;;;;1845:17760:124;;;;;-1:-1:-1;;1845:17760:124;;;;;3345:39:57;1845:17760:124;;;:::i;:::-;;;;3345:39:57;;3361:10;1845:17760:124;3345:39:57;;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;3345:39:57;;:6;1845:17760:124;;3345:6:57;1845:17760:124;3345:39:57;;;;;;;;1845:17760:124;;;;;;;;3345:39:57;1845:17760:124;3345:39:57;;1845:17760:124;3345:39:57;;;;;;1845:17760:124;3345:39:57;;;:::i;:::-;;;1845:17760:124;;;;;;;:::i;:::-;3345:39:57;;;;;-1:-1:-1;3345:39:57;;1845:17760:124;;;;-1:-1:-1;;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;6029:41:121;;1845:17760:124;6029:135:121;6192:23;;:::i;:::-;6182:56;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1744:19:50;;;;:::i;:::-;1845:17760:124;;;;;;;465:4:50;;1845:17760:124;;;;;;;;;;;;;;;;1625:13:50;;;;:::i;:::-;1845:17760:124;;;;;;;;;;;;;-1:-1:-1;1845:17760:124;;;465:4:50;6467:3:52;1845:17760:124;;6437:28:52;;;;;6498:56;1845:17760:124;6514:11:52;:39;:11;;;;:::i;:::-;1845:17760:124;6532:20:52;;;;:::i;:::-;1845:17760:124;6514:39:52;;:::i;:::-;6498:56;;:::i;:::-;6467:3;1845:17760:124;6422:13:52;;;6437:28;;;;;6579:14;;6575:67;;1845:17760:124;;;;6575:67:52;6616:15;1845:17760:124;6616:15:52;1845:17760:124;;6616:15:52;1845:17760:124;-1:-1:-1;1845:17760:124;;;465:4:50;4758:3:52;1845:17760:124;;4728:28:52;;;;;465:4:50;838:5;1845:17760:124;4807:11:52;:41;:11;;;;:::i;:::-;1845:17760:124;4827:20:52;;;;:::i;:::-;1845:17760:124;4807:41:52;;:::i;:::-;838:5:50;;:::i;:::-;1845:17760:124;4758:3:52;1845:17760:124;4713:13:52;;;6029:135:121;6131:33;6029:135;;1845:17760:124;;;;;-1:-1:-1;;1845:17760:124;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1845:17760:124;;-1:-1:-1;1845:17760:124;;-1:-1:-1;1845:17760:124;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;9801:25;1845:17760;;;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;1710:6:96;1845:17760:124;;;;;;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;;2951:6:57;1845:17760:124;;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;6099:41:114;:5;:41;:::i;:::-;6554:47;:8;:47;:::i;:::-;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;5590:13:114;;1845:17760:124;;;;5625:4:114;1845:17760:124;;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;1911:35:36;;1940:4;1845:17760:124;1911:35:36;;1845:17760:124;1911:35:36;:6;;;1845:17760:124;1911:6:36;1845:17760:124;1911:6:36;1845:17760:124;1911:35:36;;;;;;;1845:17760:124;1911:35:36;1845:17760:124;1911:35:36;;;1845:17760:124;1986:37:36;;2063:38;1986:37;;;1845:17760:124;2063:38:36;;1845:17760:124;;;;;;;;;;;1911:35:36;;;;;;-1:-1:-1;1911:35:36;;;;;;:::i;:::-;;;;;1845:17760:124;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;:::i;:::-;;;;624:7:109;1845:17760:124;;;;;;;;;;;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;;;;:::i;:::-;2165:1;1845:17760;;;;;;;;;8234:18;8200;8309:24;8186:157;8234:18;8186:157;;:::i;:::-;1845:17760;8271:24;8186:157;;;;:::i;:::-;1845:17760;;;;;;;:::i;:::-;2165:1;1845:17760;;;;;;;;8403:149;8520:22;8403:149;;;:::i;:::-;1845:17760;8403:149;8484:22;8403:149;;;:::i;:::-;1845:17760;;;8086:10;;;;1845:17760;;8116:8;1845:17760;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;1845:17760:124;;;;;953:13:97;1845:17760:124;;735:10:107;1845:17760:124;;;1856:24:97;1852:96;;1845:17760:124;;;;953:13:97;1845:17760:124;3004:6:96;1845:17760:124;735:10:107;;1845:17760:124;;;;3004:6:96;1845:17760:124;735:10:107;1845:17760:124;;3052:40:96;1845:17760:124;3052:40:96;;1845:17760:124;1852:96:97;1903:34;1845:17760:124;1903:34:97;735:10:107;1845:17760:124;;;;1903:34:97;1845:17760:124;;;;-1:-1:-1;;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;436:67:72;;:::i;:::-;12733:16:124;;:::i;:::-;1845:17760;12729:78;;12905:25;:67;;;;1845:17760;12901:127;;;495:1:72;1845:17760:124;436:67:72;;;:::i;:::-;495:1;:::i;12901:127:124:-;12995:22;1845:17760;12995:22;1845:17760;;12995:22;12905:67;1845:17760;;;12954:18;12934:38;;12905:67;;;12729:78;12781:15;1845:17760;12781:15;1845:17760;;12781:15;1845:17760;;;;;-1:-1:-1;;1845:17760:124;;;;;1500:62:96;;:::i;:::-;1845:17760:124;;;;1610:20:97;1845:17760:124;;1610:20:97;1845:17760:124;3004:6:96;1845:17760:124;;;;3004:6:96;1845:17760:124;;3052:40:96;;;;1845:17760:124;;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;;:::i;:::-;;;;3082:40:57;;3107:4;1845:17760:124;3082:40:57;;1845:17760:124;;;;;;;;;;;;;;3082:6:57;1845:17760:124;3082:40:57;;;;;;;1845:17760:124;3082:40:57;;;1845:17760:124;;;;;;;;3082:40:57;;;;;;;;;;;;;;;;:::i;:::-;;;1845:17760:124;;;;;3082:40:57;;;;;;;;1845:17760:124;;;;;-1:-1:-1;;1845:17760:124;;;;;11758:32:121;1845:17760:124;11758:32:121;1845:17760:124;;11758:32:121;1845:17760:124;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;2854:5:121;1845:17760:124;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;6339:10:57;-1:-1:-1;1845:17760:124;;;1121:7:109;1845:17760:124;;;;;;;;;;;;;;;;;;;5175:32:57;1845:17760:124;;;:::i;:::-;436:67:72;;;;;;:::i;:::-;1845:17760:124;;;;;;;;;;;5175:32:57;;1845:17760:124;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;991:8:48;1845:17760:124;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;991:8:48;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1845:17760:124;;;;;;;;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;10594:16;1845:17760;10594:16;1845:17760;;10594:16;1845:17760;;;;-1:-1:-1;;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;;7234:13;1845:17760;;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;436:67:72;;:::i;:::-;4487:10:124;4468:15;:29;;4464:94;;1845:17760;;;;16612:14;;;1845:17760;16602:24;;:71;;;;1845:17760;;;;;;;;;;;16602:71;1845:17760;;;;;;;16630:32;;;;1845:17760;16630:32;;;;;;;;;1845:17760;16630:32;1845:17760;16630:32;;;16602:71;1845:17760;;1710:6:96;1845:17760:124;;;;16630:43;16602:71;;;;16630:32;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;4464:94;4520:27;1845:17760;4520:27;1845:17760;;4520:27;1845:17760;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;1845:17760:124;;;;;;6533:20:57;;:::i;1845:17760:124:-;;;;;-1:-1:-1;;1845:17760:124;;;;;;9115:16;;:::i;:::-;1845:17760;;;;;;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;2727:2:57;1845:17760:124;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;1443:95:57;1845:17760:124;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;3027:6:52;1845:17760:124;;;;;;;;4942:26:57;1845:17760:124;;;:::i;:::-;;;;;4124:49:57;1845:17760:124;;;:::i;:::-;;;;4124:49:57;;4144:10;1845:17760:124;4124:49:57;;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;;;4124:6:57;1845:17760:124;4124:49:57;;;;;;;;;1845:17760:124;;4190:4:57;1845:17760:124;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;436:67:72;;:::i;:::-;4487:10:124;4468:15;:29;;4464:94;;1845:17760;;;16002:40;;1845:17760;;;;;16015:14;1845:17760;;16002:40;;;;;;;1845:17760;16002:40;1845:17760;16002:40;;;1845:17760;;;1710:6:96;1845:17760:124;;;;16002:51;1845:17760;;;;;;16002:40;;;;;;;;;;;;;;;:::i;:::-;;;;;1845:17760;;;;-1:-1:-1;;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;;;;;;;;;;;;:::i;:::-;;;6606:34:121;6554;1845:17760:124;;;6554:34:121;;:::i;:::-;1845:17760:124;6606:34:121;;:::i;:::-;1845:17760:124;;;8745:18:52;;;1845:17760:124;;;8778:16:52;8745:82;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2004:6:50;;2000:58;;1845:17760:124;2560:120:50;9032:34:52;2560:120:50;8957:57:52;2560:120:50;;;;1845:17760:124;8957:57:52;:::i;2000:58:50:-;2033:14;1845:17760:124;2033:14:50;1845:17760:124;;2033:14:50;1845:17760:124;;;;;;;;;8957:57:52;9032:34;1845:17760:124;;;;;;8957:57:52;:::i;1845:17760:124:-;;;;;;;;;;;-1:-1:-1;465:4:50;;1845:17760:124;;;;;;;6417:148:52;6579:14;;;;;6575:67;;8957:57;9032:34;1845:17760:124;;;;8957:57:52;:::i;6467:3::-;1845:17760:124;;;465:4:50;1845:17760:124;6437:28:52;;;;;6514:11;;6498:56;6514:11;;:39;:11;;;;:::i;:::-;1845:17760:124;6532:20:52;;;:::i;6498:56::-;6467:3;1845:17760:124;6422:13:52;;;6437:28;;;;1845:17760:124;-1:-1:-1;465:4:50;;1845:17760:124;;;;;;;4874:14:52;;;;;4870:67;;8957:57;9032:34;1845:17760:124;;;;8957:57:52;:::i;4758:3::-;1845:17760:124;;;465:4:50;1845:17760:124;4728:28:52;;;;;4807:11;;465:4:50;838:5;4807:11:52;;:41;:11;;;;:::i;:::-;1845:17760:124;4827:20:52;;;:::i;838:5:50:-;1845:17760:124;4758:3:52;1845:17760:124;4713:13:52;;;8745:82;;;;1845:17760:124;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11492:6;1845:17760;;;;11492:35;;11521:4;1845:17760;11492:35;;1845:17760;;11492:35;1845:17760;11492:35;;;;;;;;;1845:17760;11492:35;;;1845:17760;11478:49;;;11562:18;1845:17760;;;;;;;11615:18;1845:17760;;;;;;;;11677:39;;;;1845:17760;11677:39;;11521:4;1845:17760;11677:39;;1845:17760;11677:39;;;;;;;1845:17760;;11677:39;;1845:17760;;;;;11644:72;11761:25;1845:17760;;;;;;11813:10;1845:17760;;;;11848:8;1845:17760;;;;;;;;;:::i;:::-;2165:1;1845:17760;;;;;;;;;;;;11867:46;11923:64;11963:24;;11923:64;;:::i;:::-;1845:17760;12037:24;11997:64;1845:17760;;;;11997:17;:64;:::i;:::-;1845:17760;12126:60;1845:17760;;;;;;:::i;:::-;2165:1;1845:17760;;;;;;;;;;;;12072:44;12164:22;12126:60;;:::i;:::-;1845:17760;12196:60;12234:22;1845:17760;;;;12196:15;:60;:::i;:::-;1845:17760;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11677:39;;;;;1845:17760;11677:39;;;;;;:::i;:::-;;;1845:17760;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;11677:39;;11492:35;;;;;;1845:17760;11492:35;;;;;;:::i;:::-;;;;1845:17760;;;;;-1:-1:-1;;1845:17760:124;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;436:67:72;;:::i;:::-;1845:17760:124;;;1500:6:43;1496:65;;1845:17760:124;;2165:1;;;14323:14;:24;;2165:1;1845:17760;2165:1;1845:17760;:::i;:::-;;;;:::i;:::-;14323:46;;;;:96;;;1845:17760;14319:174;;;1845:17760;;14526:4;1845:17760;14526:4;1845:17760;;14510:21;1845:17760;;;14319:174;14442:40;1845:17760;14442:40;1845:17760;;14442:40;14323:96;1845:17760;;;;14385:1;2165;;;;1845:17760;2165:1;14373:14;:24;;2165:1;1845:17760;2165:1;1845:17760;:::i;:::-;;;;:::i;:::-;14373:46;;14323:96;;;2165:1;;1845:17760;2165:1;;1845:17760;2165:1;1845:17760;;2165:1;1496:65:43;1529:21;1845:17760:124;1529:21:43;1845:17760:124;;1529:21:43;1845:17760:124;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;3819:43:57;1845:17760:124;;;:::i;:::-;;;;3819:43:57;;3834:10;1845:17760:124;3819:43:57;;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;2434:8:57;1845:17760:124;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;2434:8:57;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1845:17760:124;;;;;;;;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;;;;;;;;;876:25:116;1845:17760:124;861:40:116;;1845:17760:124;;;;;-1:-1:-1;;1845:17760:124;;;;;;;;;;;;;;;;;-1:-1:-1;1845:17760:124;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;1845:17760:124;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;1845:17760:124;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1845:17760:124;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;1845:17760:124;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;1845:17760:124;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1845:17760:124;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2165:1::-;465:4:50;1845:17760:124;2165:1;;;;;;;;;;:::o;:::-;1845:17760;;2165:1;;;;;;;;;;;;:::o;1845:17760::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;2769:110:57;1845:17760:124;;;2839:33:57;;2866:4;2839:33;;;1845:17760:124;2839:33:57;:6;1845:17760:124;2839:6:57;1845:17760:124;2839:6:57;1845:17760:124;2839:33:57;;;;;;;-1:-1:-1;2839:33:57;;;2832:40;2769:110;:::o;2839:33::-;;;;;;;;;;;;;;;;;:::i;:::-;;;1845:17760:124;;;;;2769:110:57;:::o;2839:33::-;;;-1:-1:-1;2839:33:57;;1845:17760:124;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;509:165:72:-;1845:17760:124;586:6:72;1845:17760:124;564:10:72;:29;560:108;;509:165::o;560:108::-;616:41;;;564:10;616:41;1845:17760:124;;616:41:72;;17571:249:124;2165:1;17676:24;;17672:97;;17786:27;1845:17760;17786:27;;1845:17760;17786:27;17672:97;17723:35;:23;;;:::i;:::-;:35;:::i;:::-;1845:17760;17716:42;:::o;9144:139::-;9235:10;9216:15;:29;;:60;;;9144:139;:::o;9216:60::-;9268:8;;9216:15;9249:27;;9144:139;:::o;3845:262:114:-;1845:17760:124;3938:11:114;1845:17760:124;3929:4:114;3921:28;:63;;;3845:262;3917:184;;;4007:22;4000:29;:::o;3917:184::-;1845:17760:124;;4204:80:114;;;1845:17760:124;2079:95:114;1845:17760:124;;4226:11:114;1845:17760:124;2079:95:114;;1845:17760:124;4239:14:114;2079:95;;;1845:17760:124;4255:13:114;2079:95;;;1845:17760:124;3929:4:114;2079:95;;;1845:17760:124;2079:95:114;4204:80;;2079:95;1845:17760:124;;;;;;;;;;;;;;4194:91:114;;4060:30;:::o;3921:63::-;3970:14;;3953:13;:31;3921:63;;1796:162:96;1845:17760:124;1710:6:96;1845:17760:124;;735:10:107;1855:23:96;1851:101;;1796:162::o;6889:1195:121:-;7027:24;;;;;;:41;7052:15;;;1845:17760:124;;;7027:41:121;;:::i;:::-;1845:17760:124;7112:24:121;;7137:16;7112:42;7137:16;;;1845:17760:124;;;7112:42:121;;:::i;:::-;1845:17760:124;;;;;;;:::i;:::-;;;;:::i;:::-;7169:33:121;;7435:38;7339:37;7491:27;1845:17760:124;;7339:37:121;:::i;:::-;1845:17760:124;;7435:38:121;:::i;:::-;7491:27;;1845:17760:124;465:4:50;838:5;;;;;:::i;:::-;1845:17760:124;11030:43:52;;11026:93;;11151:20;1744:19:50;11151:20:52;;;:::i;:::-;1744:19:50;;:::i;:::-;1845:17760:124;;;;;;;;;;;;;;;1625:13:50;11306:20:52;1625:13:50;838:5;1625:13;;:::i;:::-;11306:20:52;;:::i;:::-;5832:87:50;;;;;;;838:5;;:::i;:::-;1845:17760:124;7547:24:121;:::o;11026:93:52:-;11096:12;1845:17760:124;11096:12:52;;1845:17760:124;11096:12:52;7165:913:121;7818:38;7722:37;7874:27;1845:17760:124;;;;;;7722:37:121;:::i;:::-;1845:17760:124;;7818:38:121;:::i;:::-;7874:27;;1845:17760:124;465:4:50;838:5;;;:::i;:::-;1845:17760:124;13428:46:52;;13424:97;;1845:17760:124;;;;;;;;1744:19:50;;;13666:20:52;1744:19:50;;:::i;:::-;;;:::i;13666:20:52:-;1845:17760:124;;;;;;;;13932:22:52;;;:::i;13424:97::-;13497:13;1845:17760:124;13497:13:52;;1845:17760:124;13497:13:52;17826:386:124;1845:17760;;;;;:::i;:::-;2165:1;1845:17760;;;;;;;;18133:37;18413:98;18326:69;18386:8;18374:10;18326:69;:::i;:::-;18475:22;18449:24;18413:98;:::i;:::-;18010:18;17992:74;;;;;:::i;:::-;1845:17760;18133:37;;:::i;:::-;1845:17760;465:4:50;1845:17760:124;;;;;;;;18076:94;18094:18;18076:94;;:::i;:::-;1845:17760;17826:386;:::o;1845:17760::-;;2843:5:52;1845:17760:124;;;;;;;;;;;;;;;:::o;:::-;;638:5:50;1845:17760:124;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::o;638:5:50:-;;;;;;;;;;:::o;4760:637::-;;465:4;;4997:8;;;465:4;;5021:8;;;:::o;4993:398::-;1845:17760:124;5050:8:50;;1845:17760:124;;5081:11:50;;;;;;:::i;5046:345::-;1845:17760:124;5113:9:50;;1845:17760:124;;5155:11:50;;;;5187:21;5155:11;;:::i;:::-;5187:21;;:::i;5109:282::-;5253:20;;;;:::i;:::-;1068:5;1845:17760:124;1068:5:50;;;:::i;:::-;1186:122;-1:-1:-1;;1186:122:50;;;;;;;;1845:17760:124;638:5:50;;;;;;;5366:14;;;:::i;887:427::-;;1068:5;887:427;1068:5;:::i;:::-;1186:122;;-1:-1:-1;;1186:122:50;;;;;;;;887:427;:::o;3385:267:110:-;1390:66;3508:46;;1390:66;;;2652:40;;2706:11;2715:2;2706:11;;2702:69;;1845:17760:124;;;;;;:::i;:::-;2367:90:110;;2311:2;1845:17760:124;;2367:90:110;3570:22;:::o;2702:69::-;2740:20;1845:17760:124;2740:20:110;;1845:17760:124;2740:20:110;3504:142;1845:17760:124;;;-1:-1:-1;1845:17760:124;-1:-1:-1;1845:17760:124;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1390:66:110;;;;;;;;:::i;1845:17760:124:-;;;;-1:-1:-1;1845:17760:124;;;;-1:-1:-1;1845:17760:124;;;;;;;-1:-1:-1;1390:66:110;;-1:-1:-1;;;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1845:17760:124;;;;;;;;;;;;1390:66:110;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;3385:267:110;1390:66;3508:46;;1390:66;;;2652:40;;2706:11;2715:2;2706:11;;2702:69;;1845:17760:124;;;;;;:::i;3504:142:110:-;1845:17760:124;;;-1:-1:-1;6584:16:114;;1845:17760:124;6584:16:114;1845:17760:124;;;;:::i;:::-;;;;;;;6584:16:114;1845:17760:124;;;6584:16:114;;;;1845:17760:124;;;;;1390:66:110;;;;;;;;:::i;1845:17760:124:-;;;;6584:16:114;-1:-1:-1;1845:17760:124;;;-1:-1:-1;1845:17760:124;;;;;;;-1:-1:-1;1390:66:110;;-1:-1:-1;;;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1845:17760:124;;;;;;3736:794:50;465:4;;3975:8;;;465:4;;3999:8;;;;:::o;3971:553::-;4028:8;;1845:17760:124;4028:8:50;;1845:17760:124;;838:5:50;;;;;;:::i;4024:500::-;1845:17760:124;4093:9:50;;1845:17760:124;;838:5:50;;;;;;:::i;:::-;1845:17760:124;838:5:50;;:::i;4089:435::-;4237:20;;;;;:::i;:::-;1068:5;;;:::i;:::-;1845:17760:124;-1:-1:-1;;1186:122:50;;;;;;;;;;638:5;1845:17760:124;638:5:50;;;;;;;4347:14;;;;;4381:8;;;1845:17760:124;4381:8:50;:::o;4343:171::-;1845:17760:124;;4460:21:50;:::o;5140:1530:113:-;;;6199:66;6186:79;;6182:164;;1845:17760:124;;;;;;;;;;;;;;;;;;;;;;;;;;6457:24:113;;;;;;;;;1845:17760:124;6457:24:113;1845:17760:124;;;6495:20:113;6491:113;;6614:49;1845:17760:124;6614:49:113;1845:17760:124;5140:1530:113;:::o;6491:113::-;6531:62;1845:17760:124;6531:62:113;6457:24;6531:62;1845:17760:124;6531:62:113;:::o;6182:164::-;6281:54;;;1845:17760:124;6281:54:113;6301:30;6281:54;;:::o;7196:532::-;1845:17760:124;;;;;;7282:29:113;;;7327:7;;:::o;7278:444::-;1845:17760:124;7378:38:113;;1845:17760:124;;7439:23:113;-1:-1:-1;7439:23:113;1845:17760:124;-1:-1:-1;7439:23:113;7374:348;7492:35;7483:44;;7492:35;;7550:46;;-1:-1:-1;7550:46:113;1845:17760:124;;;-1:-1:-1;7550:46:113;7479:243;7626:30;7617:39;7613:109;;7479:243;7196:532::o;7613:109::-;7679:32;-1:-1:-1;7679:32:113;1845:17760:124;;;-1:-1:-1;7679:32:113;1822:864:50;;2004:6;;2000:58;;465:4;1845:17760:124;;;;;;;;;;;;;;;2560:120:50;;-1:-1:-1;;2560:120:50;;;;;;;;1822:864;:::o;2648:13:51:-;;;;;;;;:::o;:::-;;;;;;;:::o;4496:2300::-;;4577:6;;4573:131;;4718:6;;4714:45;;1564:4;1845:17760:124;1564:4:51;5129:68;;1845:17760:124;5591:24:51;;;5587:83;;5774:28;2707:26;5774:28;:60;;;4496:2300;5770:720;;;1564:4;;1789;;21319:38;;2648:13;;2593;;;;2707:26;;2648:13;;21319:38;:::i;:::-;2648:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22285:2;2648:13;;;22203:2;2648:13;;;22121:2;2648:13;;;22040:1;2648:13;;;21959:1;2648:13;;;21878:1;2648:13;;;21797:1;2648:13;;2593;;;;;;;2648;;;;;;;;;;;;;2593;1564:4;5770:720;;2648:13;2400:6;6615:36;;;;:76;;;5770:720;6613:79;6609:137;;6771:17;7080:25;;;;:54;;;5770:720;7078:57;7074:112;;1845:17760:124;7316:5:51;1845:17760:124;7316:5:51;;7312:417;;5770:720;-1:-1:-1;9497:3:51;;2789:21;9082:7;;2789:21;;2707:26;;1754:4;9134:12;2845:56;9078:252;;2648:13;9723:23;9785:7;3117:22;9785:7;;;9781:104;;9078:252;3246:22;9902:7;;;9898:104;;9078:252;3368:21;10019:7;;;10015:104;;9078:252;3486:21;10136:7;;;10132:104;;9078:252;3602:21;10253:7;;;10249:104;;9078:252;10370:7;;;;10366:104;;9078:252;3832:20;10487:7;;;10483:104;;9078:252;3947:20;10604:7;;;10600:104;;9078:252;11567:1;2648:13;;;;;;11645:1;2648:13;;;;;;11723:1;2648:13;;;;;;;11801:1;2648:13;;;;;;11879:1;2648:13;;;;;;11957:1;2648:13;;;;;;;12035:1;2648:13;;;;;;;12113:1;2648:13;;;;;;;12191:2;2648:13;;;;;;;12270:2;2648:13;;;;;;;12349:2;2648:13;;;;;;2593;;;;;;;;;;;;;2648;;;;13075:54;;;;;13094:26;;;:::i;10600:104::-;4003:21;2707:26;;;;2648:13;;;10600:104;;;10483;3888:21;2707:26;;;;2648:13;;;10483:104;;;10366;3773:21;2707:26;;;;2648:13;;;10366:104;;;10249;3658:21;2707:26;;;;2648:13;;;10249:104;;;10132;3542:22;2707:26;;;;2648:13;;;10132:104;;;10015;3424:24;2707:26;;;;2648:13;;;10015:104;;;9898;3303:27;2707:26;;;;2648:13;;;9898:104;;;9781;3174:34;;-1:-1:-1;2707:26:51;;9781:104;;9078:252;2953:20;9171:7;;2953:20;;2707:26;;1754:4;9223:12;3008:28;9167:163;9078:252;;9167:163;1754:4;9274:11;9284:1;9167:163;9078:252;;7312:417;7714:4;;-1:-1:-1;1845:17760:124;4181:19:51;;-1:-1:-1;9497:3:51;7312:417;;7074:112;7158:17;1845:17760:124;7158:17:51;;1845:17760:124;7158:17:51;7080:54;7109:25;2349:6;7109:25;;;7080:54;;6609:137;6715:20;1845:17760:124;6715:20:51;;1845:17760:124;6715:20:51;6615:76;6655:36;2349:6;6655:36;;;6615:76;;5770:720;6451:13;1564:4;6451:13;1845:17760:124;14954:10:51;;;;14950:381;;5770:720;16656:14;17116:3;16656:14;1845:17760:124;2648:13:51;16708:16;;;16704:126;;5770:720;2648:13;16848:16;;;16844:126;;5770:720;2648:13;;;;;;;3174:34;;17276:7;;;;17272:94;;5770:720;3303:27;;;17384:7;;;;17380:94;;5770:720;3424:24;;17492:7;;;;17488:94;;5770:720;3542:22;;17600:7;;;;17596:94;;5770:720;3658:21;;17708:7;;;;17704:94;;5770:720;3773:21;;17816:7;;;;17812:94;;5770:720;3888:21;;17924:7;;;;17920:94;;5770:720;4003:21;;18032:7;;;;18028:94;;5770:720;4120:21;;18140:8;;;;18136:97;;5770:720;4237:21;;18251:8;;;;18247:97;;5770:720;1754:4;18891:38;1754:4;2593:13;;2707:26;2593:13;;;2707:26;;2648:13;18891:38;:::i;:::-;2648:13;;;;;;;;;;;;;;;;;;19369:1;19450;19531;19612;19693:2;2648:13;;;;;;;;;;;;;;;;;;;;;;;;2593;;;;;2648;;2593;2648;20303:35;;;;;1845:17760:124;4181:19:51;20303:35;2648:13;5770:720;;20303:35;;;18247:97;1754:4;4181:19;2648:13;;;2593;;18247:97;;;;18136;1754:4;4063:20;2648:13;;;2593;;18136:97;;;;18028:94;1754:4;3947:20;2648:13;;;2593;;18028:94;;;;17920;1754:4;3832:20;2648:13;;;2593;;17920:94;;;;17812;1754:4;2648:13;;;;2593;;17812:94;;;;17704;1754:4;3602:21;2648:13;;;2593;;17704:94;;;;17596;1754:4;3486:21;2648:13;;;2593;;17596:94;;;;17488;1754:4;3368:21;2648:13;;;2593;;17488:94;;;;17380;1754:4;3246:22;2648:13;;;2593;;17380:94;;;;17272;3117:22;2648:13;;;;;2593;;17272:94;;;;;16844:126;2648:13;3008:28;2953:20;2648:13;;2593;;16844:126;;16704;2648:13;2845:56;2648:13;;2789:21;16704:126;;14950:381;15248:21;;;;;;:::i;:::-;15316:4;;17116:3;14950:381;;5774:60;5806:28;2593:13;5806:28;;5774:60;;5587:83;5638:21;1845:17760:124;5638:21:51;;1845:17760:124;5638:21:51;5129:68;5169:17;1845:17760:124;5169:17:51;;1845:17760:124;5169:17:51;4714:45;4740:8;;1845:17760:124;4740:8:51;:::o;4573:131::-;4671:22;;1564:4;4671:22;:::o;2307:721:126:-;2427:15;:26;-1:-1:-1;2427:26:126;;2469:21;;465:4:50;2469:21:126;:::o;2423:151::-;2427:15;;2511:28;;2507:67;;2427:15;;1845:17760:124;465:4:50;;1845:17760:124;;;;;;;2427:15:126;;1845:17760:124;;;;;1625:13:50;1845:17760:124;;1625:13:50;;:::i;1403:683:126:-;;;465:4:50;1564:29:126;;;;;;:55;;;1403:683;1560:101;;1675:16;;1671:64;;1773:21;;;;;;;1845:17760:124;838:5:50;1845:17760:124;;838:5:50;;:::i;:::-;1845:17760:124;;;1890:25:126;:::o;1769:301::-;838:5:50;1845:17760:124;;838:5:50;;:::i;:::-;1845:17760:124;2593:13:51;2030:25:126;:::o;1671:64::-;1707:17;;;;:::o;1560:101::-;1635:15;;;;;:::o;1564:55::-;1597:22;;;;1564:55;"},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","PERMIT_TYPEHASH()":"30adf81f","acceptOwnership()":"79ba5097","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","computeBalance(uint256[],uint256,uint256)":"16a0b3e0","computeInvariant(uint256[],uint8)":"984de9e8","decimals()":"313ce567","eip712Domain()":"84b0196e","emitApproval(address,address,uint256)":"5687f2b8","emitTransfer(address,address,uint256)":"23de6651","getAggregateFeePercentages()":"81fa807c","getCurrentLiveBalances()":"b156aa0a","getGradualWeightUpdateParams()":"7beed220","getHookFlags()":"d77153a7","getLBPoolDynamicData()":"e565c29e","getLBPoolImmutableData()":"0ca89848","getMaximumInvariantRatio()":"273c1adf","getMaximumSwapFeePercentage()":"654cf15d","getMinimumInvariantRatio()":"b677fa56","getMinimumSwapFeePercentage()":"ce20ece7","getNormalizedWeights()":"f89f27ed","getProjectToken()":"4837c596","getRate()":"679aefce","getReserveToken()":"e594203d","getStaticSwapFeePercentage()":"d335b0cf","getTokenInfo()":"abb1dc44","getTokens()":"aa6ca808","getTrustedRouter()":"af905d15","getVault()":"8d928af8","getWeightedPoolDynamicData()":"c0bc6f33","getWeightedPoolImmutableData()":"53b79bd7","incrementNonce()":"627cdcb9","isProjectTokenSwapInBlocked()":"95146efb","isSwapEnabled()":"351a964d","name()":"06fdde03","nonces(address)":"7ecebe00","onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)":"976907cc","onAfterInitialize(uint256[],uint256,bytes)":"38be241d","onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)":"2754888d","onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))":"18b6eb55","onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)":"45421ec7","onBeforeInitialize(uint256[],bytes)":"1c149e28","onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)":"ba5f9f40","onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)":"5211fa77","onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)":"a0e8f5ac","onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))":"0b89f182","onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))":"72c98186","owner()":"8da5cb5b","pendingOwner()":"e30c3978","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","renounceOwnership()":"715018a6","supportsInterface(bytes4)":"01ffc9a7","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","transferOwnership(address)":"f2fde38b","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"projectToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"reserveToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectTokenStartWeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveTokenStartWeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectTokenEndWeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveTokenEndWeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"blockProjectTokenSwapsIn\",\"type\":\"bool\"}],\"internalType\":\"struct LBPParams\",\"name\":\"lbpParams\",\"type\":\"tuple\"},{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"trustedRouter\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AddingLiquidityNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"ERC2612ExpiredSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC2612InvalidSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExponentOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"resolvedStartTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"GradualUpdateTimeTravel\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"name\":\"InvalidAccountNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExponent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidShortString\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTokenConfiguration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxInRatio\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxOutRatio\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinWeight\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NormalizedWeightInvariant\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotImplemented\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProductOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RemovingLiquidityNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"StringTooLong\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapOfProjectTokenIn\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SwapsDisabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WeightedPoolBptRateUnsupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroInvariant\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"startWeights\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"endWeights\",\"type\":\"uint256[]\"}],\"name\":\"GradualWeightUpdateScheduled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"tokenInIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"invariantRatio\",\"type\":\"uint256\"}],\"name\":\"computeBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"enum Rounding\",\"name\":\"rounding\",\"type\":\"uint8\"}],\"name\":\"computeInvariant\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"emitApproval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"emitTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAggregateFeePercentages\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getGradualWeightUpdateParams\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"startWeights\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"endWeights\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getHookFlags\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"enableHookAdjustedAmounts\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterInitialize\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallComputeDynamicSwapFee\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterSwap\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterAddLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallBeforeRemoveLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"shouldCallAfterRemoveLiquidity\",\"type\":\"bool\"}],\"internalType\":\"struct HookFlags\",\"name\":\"hookFlags\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLBPoolDynamicData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"normalizedWeights\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isSwapEnabled\",\"type\":\"bool\"}],\"internalType\":\"struct LBPoolDynamicData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLBPoolImmutableData\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"startWeights\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"endWeights\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectTokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveTokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isProjectTokenSwapInBlocked\",\"type\":\"bool\"}],\"internalType\":\"struct LBPoolImmutableData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNormalizedWeights\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getProjectToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReserveToken\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTrustedRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWeightedPoolDynamicData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct WeightedPoolDynamicData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWeightedPoolImmutableData\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"normalizedWeights\",\"type\":\"uint256[]\"}],\"internalType\":\"struct WeightedPoolImmutableData\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"incrementNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isProjectTokenSwapInBlocked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isSwapEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsInRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onAfterAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onAfterInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amountsOutRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onAfterRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenIn\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"tokenOut\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountInScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOutScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenInBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenOutBalanceScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountCalculatedRaw\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct AfterSwapParams\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"onAfterSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"enum AddLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onBeforeAddLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onBeforeInitialize\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"enum RemoveLiquidityKind\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"onBeforeRemoveLiquidity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"onBeforeSwap\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"onComputeDynamicSwapFeePercentage\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"contract IERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenConfig[]\",\"name\":\"tokenConfig\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"onRegister\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"request\",\"type\":\"tuple\"}],\"name\":\"onSwap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Inheriting from WeightedPool is only slightly wasteful (setting 2 immutable weights and `_totalTokens`, which will not be used later), and it is tremendously helpful for pool validation and any potential future base contract changes.\",\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"ERC2612ExpiredSignature(uint256)\":[{\"params\":{\"deadline\":\"The permit deadline that expired\"}}],\"ERC2612InvalidSigner(address,address)\":[{\"params\":{\"owner\":\"The address of the owner (expected value of the signature provider)\",\"signer\":\"The address corresponding to the signature provider\"}}],\"GradualUpdateTimeTravel(uint256,uint256)\":[{\"details\":\"Indicates that the start time is after the end time\"}],\"InvalidAccountNonce(address,uint256)\":[{\"details\":\"The nonce used for an `account` is not the expected current nonce.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"WeightedPoolBptRateUnsupported()\":[{\"details\":\"It is not safe to nest Weighted Pools as WITH_RATE tokens in other pools, where they function as their own rate provider. The default `getRate` implementation from `BalancerPoolToken` computes the BPT rate using the invariant, which has a non-trivial (and non-linear) error. Without the ability to specify a rounding direction, the rate could be manipulable. It is fine to nest Weighted Pools as STANDARD tokens, or to use them with external rate providers that are stable and have at most 1 wei of rounding error (e.g., oracle-based).\"}],\"ZeroInvariant()\":[{\"details\":\"Most commonly, this happens when a token balance is zero.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"GradualWeightUpdateScheduled(uint256,uint256,uint256[],uint256[])\":{\"params\":{\"endTime\":\"The ending timestamp of the update\",\"endWeights\":\"The final weights after the update is completed\",\"startTime\":\"The starting timestamp of the update\",\"startWeights\":\"The weights at the start of the update\"}},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"computeBalance(uint256[],uint256,uint256)\":{\"details\":\"Similar to V2's `_getTokenBalanceGivenInvariantAndAllOtherBalances` in StableMath. The pool must round up for the Vault to round in the protocol's favor when calling this function.\",\"params\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\",\"invariantRatio\":\"The ratio of the new invariant (after an operation) to the old\",\"tokenInIndex\":\"The index of the token we're computing the balance for, sorted in token registration order\"},\"returns\":{\"newBalance\":\"The new balance of the selected token, after the operation\"}},\"computeInvariant(uint256[],uint8)\":{\"details\":\"This function computes the invariant based on current balances (and potentially other pool state). The rounding direction must be respected for the Vault to round in the pool's favor when calling this function. If the invariant computation involves no precision loss (e.g. simple sum of balances), the same result can be returned for both rounding directions. You can think of the invariant as a measure of the \\\"value\\\" of the pool, which is related to the total liquidity (i.e., the \\\"BPT rate\\\" is `invariant` / `totalSupply`). Two critical properties must hold: 1) The invariant should not change due to a swap. In practice, it can *increase* due to swap fees, which effectively add liquidity after the swap - but it should never decrease. 2) The invariant must be \\\"linear\\\"; i.e., increasing the balances proportionally must increase the invariant in the same proportion: inv(a * n, b * n, c * n) = inv(a, b, c) * n Property #1 is required to prevent \\\"round trip\\\" paths that drain value from the pool (and all LP shareholders). Intuitively, an accurate pricing algorithm ensures the user gets an equal value of token out given token in, so the total value should not change. Property #2 is essential for the \\\"fungibility\\\" of LP shares. If it did not hold, then different users depositing the same total value would get a different number of LP shares. In that case, LP shares would not be interchangeable, as they must be in a fair DEX.\",\"params\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\",\"rounding\":\"Rounding direction to consider when computing the invariant\"},\"returns\":{\"_0\":\"The calculated invariant of the pool, represented as a uint256\"}},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"emitApproval(address,address,uint256)\":{\"details\":\"Emit the Approval event. This function can only be called by the MultiToken.\"},\"emitTransfer(address,address,uint256)\":{\"details\":\"Emit the Transfer event. This function can only be called by the MultiToken.\"},\"getAggregateFeePercentages()\":{\"details\":\"These are determined by the current protocol and pool creator fees, set in the `ProtocolFeeController`.\",\"returns\":{\"aggregateSwapFeePercentage\":\"The aggregate percentage fee applied to swaps\",\"aggregateYieldFeePercentage\":\"The aggregate percentage fee applied to yield\"}},\"getCurrentLiveBalances()\":{\"details\":\"Note that live balances will not necessarily be accurate if the pool is in Recovery Mode. Withdrawals in Recovery Mode do not make external calls (including those necessary for updating live balances), so if there are withdrawals, raw and live balances will be out of sync until Recovery Mode is disabled.\",\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getGradualWeightUpdateParams()\":{\"details\":\"Current weights should be retrieved via `getNormalizedWeights()`.\",\"returns\":{\"endTime\":\"The ending timestamp of any ongoing weight change\",\"endWeights\":\"The \\\"destination\\\" weights, sorted in token registration order\",\"startTime\":\"The starting timestamp of any ongoing weight change\",\"startWeights\":\"The \\\"initial\\\" weights, sorted in token registration order\"}},\"getHookFlags()\":{\"details\":\"For each flag set to true, the Vault will call the corresponding hook.\",\"returns\":{\"hookFlags\":\"Flags indicating which hooks are supported for LBPs\"}},\"getLBPoolDynamicData()\":{\"returns\":{\"data\":\"A struct containing all dynamic LBP parameters\"}},\"getLBPoolImmutableData()\":{\"returns\":{\"data\":\"A struct containing all immutable LBP parameters\"}},\"getMaximumInvariantRatio()\":{\"returns\":{\"_0\":\"The maximum invariant ratio for a pool during unbalanced add liquidity\"}},\"getMaximumSwapFeePercentage()\":{\"returns\":{\"_0\":\"The maximum swap fee percentage for a pool\"}},\"getMinimumInvariantRatio()\":{\"returns\":{\"_0\":\"The minimum invariant ratio for a pool during unbalanced remove liquidity\"}},\"getMinimumSwapFeePercentage()\":{\"returns\":{\"_0\":\"The minimum swap fee percentage for a pool\"}},\"getNormalizedWeights()\":{\"returns\":{\"_0\":\"The normalized weights, sorted in token registration order\"}},\"getProjectToken()\":{\"details\":\"This is the token being distributed through the sale. It is also available in the immutable data, but this getter is provided as a convenience for those who only need the project token address.\",\"returns\":{\"_0\":\"projectToken The address of the project token\"}},\"getRate()\":{\"details\":\"The meaning of this rate depends on the context. Note that there may be an error associated with a token rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface does not take a rounding direction or return an error, so great care must be taken when interpreting and using rates in downstream computations.\",\"returns\":{\"_0\":\"The current token rate\"}},\"getReserveToken()\":{\"details\":\"This is the token exchanged for the project token (usually a stablecoin or WETH). It is also available in the immutable data, but this getter is provided as a convenience for those who only need the reserve token address.\",\"returns\":{\"_0\":\"reserveToken The address of the reserve token\"}},\"getStaticSwapFeePercentage()\":{\"returns\":{\"_0\":\"18-decimal FP value of the static swap fee percentage\"}},\"getTokenInfo()\":{\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"Pool tokens, sorted in token registration order\"}},\"getTokens()\":{\"returns\":{\"tokens\":\"List of tokens in the pool, sorted in registration order\"}},\"getTrustedRouter()\":{\"returns\":{\"_0\":\"trustedRouter Address of the trusted router (i.e., one that reliably reports the sender)\"}},\"getWeightedPoolDynamicData()\":{\"details\":\"This is because the LBP dynamic data also includes the weights, so overriding this would be incomplete and potentially misleading.\"},\"getWeightedPoolImmutableData()\":{\"details\":\"This is because in the standard Weighted Pool, weights are included in the immutable data. In the LBP, weights can change, so they are instead part of the dynamic data.\"},\"isProjectTokenSwapInBlocked()\":{\"details\":\"Note that theoretically, anyone holding project tokens could create a new pool alongside the LBP that did allow \\\"selling\\\" project tokens. This restriction only applies to the primary LBP.\",\"returns\":{\"_0\":\"isProjectTokenSwapInBlocked If true, acquired project tokens cannot be traded for reserve in this pool\"}},\"isSwapEnabled()\":{\"details\":\"For LBPs, swaps are enabled during the token sale, between the start and end times. Note that this does not check whether the pool or Vault is paused, which can only happen through governance action. This can be checked using `getPoolConfig` on the Vault, or by calling `getLBPoolDynamicData` here.\",\"returns\":{\"_0\":\"swapEnabled True if the sale is in progress\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterAddLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsInRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsInRaw\":\"Actual amounts of tokens added, sorted in token registration order\",\"amountsInScaled18\":\"Actual amounts of tokens added, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountOut\":\"Amount of pool tokens minted\",\"kind\":\"The add liquidity operation type (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated an add liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\",\"_1\":\"New amountsInRaw, potentially modified by the hook\"}},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"details\":\"Called if the `shouldCallAfterInitialize` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"bptAmountOut\":\"Amount of pool tokens minted during initialization\",\"exactAmountsIn\":\"Exact amounts of input tokens\",\"userData\":\"Optional, arbitrary data sent with the encoded request\"},\"returns\":{\"_0\":\"True if the pool accepts the initialization results\"}},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"details\":\"Called if the `shouldCallAfterRemoveLiquidity` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountsOutRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"amountsOutRaw\":\"Actual amount of tokens to receive, sorted in token registration order\",\"amountsOutScaled18\":\"Scaled amount of tokens to receive, sorted in token registration order\",\"balancesScaled18\":\"Current pool balances, sorted in token registration order\",\"bptAmountIn\":\"Amount of pool tokens to burn\",\"kind\":\"The type of remove liquidity operation (e.g., proportional, custom)\",\"pool\":\"Pool address, used to fetch pool information from the Vault (pool config, tokens, etc.)\",\"router\":\"The address (usually a router contract) that initiated a remove liquidity operation on the Vault\",\"userData\":\"Additional (optional) data provided by the user\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\",\"_1\":\"New amountsOutRaw, potentially modified by the hook\"}},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"details\":\"Called if the `shouldCallAfterSwap` flag is set in the configuration. The Vault will ignore `hookAdjustedAmountCalculatedRaw` unless `enableHookAdjustedAmounts` is true. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\",\"_1\":\"New amount calculated, potentially modified by the hook\"}},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"params\":{\"router\":\"The router used for the operation\"},\"returns\":{\"_0\":\"success True (allowing the operation to proceed) if the owner is calling through the trusted router\"}},\"onBeforeInitialize(uint256[],bytes)\":{\"details\":\"Take care to set the start time far enough in advance to allow for funding; otherwise the pool will remain unfunded and need to be redeployed. Note that initialization does not pass the router address, so we cannot directly check that here, though there has to be a call on the trusted router for its `getSender` to be non-zero.\",\"returns\":{\"_0\":\"success Always true: allow the initialization to proceed if the time condition has been met\"}},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"returns\":{\"_0\":\"success Always true; if removing liquidity is not allowed, revert here with a more specific error\"}},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"details\":\"Called if the `shouldCallBeforeSwap` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\"}},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"details\":\"Called if the `shouldCallComputeDynamicSwapFee` flag is set in the configuration. Hook contracts should use the `onlyVault` modifier to guarantee this is only called by the Vault.\",\"params\":{\"params\":\"Swap parameters (see PoolSwapParams for struct definition)\",\"pool\":\"Pool address, used to get pool information from the Vault (poolData, token config, etc.)\",\"staticSwapFeePercentage\":\"18-decimal FP value of the static swap fee percentage, for reference\"},\"returns\":{\"_0\":\"True if the pool wishes to proceed with settlement\",\"_1\":\"Value of the swap fee percentage, as an 18-decimal FP value\"}},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"details\":\"Returns true if registration was successful; false will revert with `HookRegistrationFailed`.\",\"params\":{\"pool\":\"Address of the pool (must be this contract for LBPs: the pool is also the hook)\",\"tokenConfig\":\"The token configuration of the pool being registered (e.g., type)\"},\"returns\":{\"_0\":\"success True if the hook allowed the registration, false otherwise\"}},\"onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"_0\":\"Calculated amount for the swap operation\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner.\"},\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AddingLiquidityNotAllowed()\":[{\"notice\":\"The pool does not allow adding liquidity except during initialization and before the weight update.\"}],\"BaseOutOfBounds()\":[{\"notice\":\"This error is thrown when a base is not within an acceptable range.\"}],\"ERC2612ExpiredSignature(uint256)\":[{\"notice\":\"Operation failed due to an expired permit signature.\"}],\"ERC2612InvalidSigner(address,address)\":[{\"notice\":\"Operation failed due to a non-matching signature.\"}],\"ExponentOutOfBounds()\":[{\"notice\":\"This error is thrown when a exponent is not within an acceptable range.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"InvalidExponent()\":[{\"notice\":\"This error is thrown when an exponent used in the exp function is not within an acceptable range.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"InvalidTokenConfiguration()\":[{\"notice\":\"The data in a TokenConfig struct is inconsistent or unsupported.\"}],\"MaxInRatio()\":[{\"notice\":\"User attempted to add a disproportionate amountIn of tokens to a pool.\"}],\"MaxOutRatio()\":[{\"notice\":\"User attempted to extract a disproportionate amountOut of tokens from a pool.\"}],\"MinWeight()\":[{\"notice\":\"Indicates that one of the pool tokens' weight is below the minimum allowed.\"}],\"NormalizedWeightInvariant()\":[{\"notice\":\"Indicates that the sum of the pool tokens' weights is not FixedPoint.ONE.\"}],\"NotImplemented()\":[{\"notice\":\"LBPs are WeightedPools by inheritance, but WeightedPool immutable/dynamic getters are wrong for LBPs.\"}],\"ProductOutOfBounds()\":[{\"notice\":\"This error is thrown when the exponent * ln(base) is not within an acceptable range.\"}],\"RemovingLiquidityNotAllowed()\":[{\"notice\":\"Removing liquidity is not allowed before the end of the sale.\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"SwapOfProjectTokenIn()\":[{\"notice\":\"THe LBP configuration prohibits selling the project token back into the pool.\"}],\"SwapsDisabled()\":[{\"notice\":\"Swaps are disabled except during the sale (i.e., between and start and end times).\"}],\"WeightedPoolBptRateUnsupported()\":[{\"notice\":\"`getRate` from `IRateProvider` was called on a Weighted Pool.\"}],\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}],\"ZeroInvariant()\":[{\"notice\":\"Error thrown when the calculated invariant is zero, indicating an issue with the invariant calculation.\"}]},\"events\":{\"GradualWeightUpdateScheduled(uint256,uint256,uint256[],uint256[])\":{\"notice\":\"Emitted on deployment to record the sale parameters.\"}},\"kind\":\"user\",\"methods\":{\"computeBalance(uint256[],uint256,uint256)\":{\"notice\":\"Computes a new token balance, given the invariant growth ratio and all other balances.\"},\"computeInvariant(uint256[],uint8)\":{\"notice\":\"Computes the pool's invariant.\"},\"getAggregateFeePercentages()\":{\"notice\":\"Gets the aggregate swap and yield fee percentages for a pool.\"},\"getCurrentLiveBalances()\":{\"notice\":\"Gets the current live balances of the pool as fixed point, 18-decimal numbers.\"},\"getGradualWeightUpdateParams()\":{\"notice\":\"Return start time, end time, and endWeights as an array.\"},\"getHookFlags()\":{\"notice\":\"Return the HookFlags struct, which indicates which hooks this contract supports.\"},\"getLBPoolDynamicData()\":{\"notice\":\"Get dynamic pool data relevant to swap/add/remove calculations.\"},\"getLBPoolImmutableData()\":{\"notice\":\"Get immutable pool data relevant to swap/add/remove calculations.\"},\"getNormalizedWeights()\":{\"notice\":\"Get the normalized weights.\"},\"getProjectToken()\":{\"notice\":\"Get the project token for this LBP.\"},\"getRate()\":{\"notice\":\"An 18 decimal fixed point number representing the exchange rate of one token to another related token.\"},\"getReserveToken()\":{\"notice\":\"Get the reserve token for this LBP.\"},\"getStaticSwapFeePercentage()\":{\"notice\":\"Fetches the static swap fee percentage for the pool.\"},\"getTokenInfo()\":{\"notice\":\"Gets the raw data for the pool: tokens, token info, raw balances, and last live balances.\"},\"getTokens()\":{\"notice\":\"Gets the tokens registered in the pool.\"},\"getTrustedRouter()\":{\"notice\":\"Returns the trusted router, which is used to initialize and seed the pool.\"},\"getWeightedPoolDynamicData()\":{\"notice\":\"Not implemented; reverts unconditionally.\"},\"getWeightedPoolImmutableData()\":{\"notice\":\"Not implemented; reverts unconditionally.\"},\"incrementNonce()\":{\"notice\":\"Increment the sender's nonce to revoke any currently granted (but not yet executed) `permit`.\"},\"isProjectTokenSwapInBlocked()\":{\"notice\":\"Indicate whether project tokens can be sold back into the pool.\"},\"isSwapEnabled()\":{\"notice\":\"Indicate whether or not swaps are enabled for this pool.\"},\"onAfterAddLiquidity(address,address,uint8,uint256[],uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Hook to be executed after adding liquidity.\"},\"onAfterInitialize(uint256[],uint256,bytes)\":{\"notice\":\"Hook to be executed after pool initialization.\"},\"onAfterRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],uint256[],bytes)\":{\"notice\":\"Hook to be executed after removing liquidity.\"},\"onAfterSwap((uint8,address,address,uint256,uint256,uint256,uint256,uint256,uint256,address,address,bytes))\":{\"notice\":\"Called after a swap to perform further actions once the balances have been updated by the swap.\"},\"onBeforeAddLiquidity(address,address,uint8,uint256[],uint256,uint256[],bytes)\":{\"notice\":\"Allow the owner to add liquidity before the start of the sale.\"},\"onBeforeInitialize(uint256[],bytes)\":{\"notice\":\"Block initialization if the sale has already started.\"},\"onBeforeRemoveLiquidity(address,address,uint8,uint256,uint256[],uint256[],bytes)\":{\"notice\":\"Only allow requests after the weight update is finished, and the sale is complete.\"},\"onBeforeSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes),address)\":{\"notice\":\"Called before a swap to give the Pool an opportunity to perform actions.\"},\"onComputeDynamicSwapFeePercentage((uint8,uint256,uint256[],uint256,uint256,address,bytes),address,uint256)\":{\"notice\":\"Called after `onBeforeSwap` and before the main swap operation, if the pool has dynamic fees.\"},\"onRegister(address,address,(address,uint8,address,bool)[],(bool,bool,bool,bool))\":{\"notice\":\"Hook to be executed when the pool is registered.\"},\"onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Execute a swap in the pool.\"},\"version()\":{\"notice\":\"Getter for the version.\"}},\"notice\":\"Weighted Pool with mutable weights, designed to support v3 Liquidity Bootstrapping.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/lbp/LBPool.sol\":\"LBPool\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol\":{\"keccak256\":\"0xa7adbaf80bc9cfa44e41776f632b5d7cb2c02c562a124c0e4cb17f06c4a54db3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e4fdf59a7f3dc3b7d6bb6f466e4a0a6263b66c0fc12492baf06ec8c6fdcc2398\",\"dweb:/ipfs/QmWxLpicLjGdgGQ8GjuN9YfDyVapYWwzdgET86ucs9hmFa\"]},\"@balancer-labs/v3-interfaces/contracts/pool-weighted/ILBPool.sol\":{\"keccak256\":\"0x8f95dab12a3243740c7567076e867d9aaa072936379ea432e0ac70ed2d4e3097\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0e28e152e7f324bdf9f63020e4f13c0b6fbd5dd73ebcd53737a5769fd71c16e0\",\"dweb:/ipfs/QmZFQV77NuL3xPPFTcRPfRC7eYC12V1Et4G9TrLVsnEukd\"]},\"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol\":{\"keccak256\":\"0xae65b6b0800fed858a56df5dc8fe7eda072f7d409f0e0d4c63ad8fca5f0c8d33\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4503850853e86c655d3dba125613822c26552c834215e24bd88c2ac0f29675d4\",\"dweb:/ipfs/QmQ4dGpVpRcyhVfer2qsnbX2tTktwVXoX2bvoodrh3tinR\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISenderGuard.sol\":{\"keccak256\":\"0x2ec1ecf5c578aab7502f6985a03fbb79998218bdef819845d70d28a6994cff5b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a32637a45f19c29797db11eb25eb9bfda73302f280a64a9d9a4ab123db1b8e6f\",\"dweb:/ipfs/QmXGimviZ4Mr6kwgqkCwpHH5uGHVEjAcCRNvAwvoVYKi6f\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol\":{\"keccak256\":\"0xa97e2a0fd95d78dcecf67fd8c554ced63bbd6da372b6f8b12f16ad526b6ec608\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d98ad2022f9e3653fd63daca8c0725c7ccbd4f63d0d27c413e90669ce7284a96\",\"dweb:/ipfs/QmZ62RpJj3qSUrrdVD3H72qEszTUuvGkFLSBXAKMhBn5nX\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/WeightedMath.sol\":{\"keccak256\":\"0x4d9faedc605adaa52594ae9949374d87bce13107f887edc593a0b9b7a5c91042\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://648e918881e78d62505f049d2f88335e679aa01b82d403ac80b854d9d85efcc2\",\"dweb:/ipfs/QmXA36vdUX611mTH3V9qNGM3uF591TB3xaADqWG41NFmWP\"]},\"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x79f2ec4f7314bd1c3555368ff02bb9d382489dc8bbd7efbbf306f9a5084f3bec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a57c155451c5b1c1c59a27770754ccd9ba1be9344db6ac45b8744eba5fa4fa2f\",\"dweb:/ipfs/QmarkRwGaS3egg1FaQH6LibqjT6NocVUbD1jMPWtFxFaQV\"]},\"@balancer-labs/v3-vault/contracts/BaseHooks.sol\":{\"keccak256\":\"0xe987f0806641ac62fc66a6f3b0c6b58a44832c01a1c95f349eb880b00529756a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f8fc15c0fc44dd7032aa5ece3f281d1d83076719ef9b6f6442be79a62e2c1848\",\"dweb:/ipfs/QmVAZSVhzg6fb3ChkCeAPtLLwqnwmxdkxrenvJaf83trNC\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0x5d3e5de9eadfa1f8a892eb2e95bbebd3e4b8c8ada5b76f104d383fea518fa688\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cde108962511e6a4d3cfb7b6fb6a36bdcfa300761c17dad2d7dd87d4f8117b48\",\"dweb:/ipfs/Qmf7YxUVK68JedWybWfXvzLCegsD95DtGc3mbpEWkWSMm8\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x75a4ee64c68dbd5f38bddd06e664a64c8271b4caa554fb6f0607dfd672bb4bf3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0c4e6cb30d3601e2f7af5af09e265508147cb275a8dcd99d6f7363645cc56867\",\"dweb:/ipfs/QmNgFkoXNWoUbAyw71rr1sKQ95Rj2GfvYiWg79xEYDn2NY\"]},\"@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"contracts/WeightedPool.sol\":{\"keccak256\":\"0x5bc730e5864de66b59da231ec3c083adc625c181c1d2980e043b2c3135828b83\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d38330349ca047499752eed9e3468191cb9219fa0a57ebec2b3695e87275b657\",\"dweb:/ipfs/QmeJVT9jQXg7yMZ6zyUsQsZXbgt1QqktYpqRV9Fj4cLECX\"]},\"contracts/lbp/LBPool.sol\":{\"keccak256\":\"0x8b9b358eca6c58ef29195a59992fbd0d06da8331f9d6ef9d4b28154a2ff2e940\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://51a34ff2c23b675f57433ea8b5fccdcc2869bf8bfad4dd50a4511dd95bfc523c\",\"dweb:/ipfs/QmUrNpL51fh1BU9tzKyiGoGrEZRn9GxGrqmBsbqv89LL18\"]},\"contracts/lib/GradualValueChange.sol\":{\"keccak256\":\"0xdb4419649358abad284146a3ef47fc0bb558cf3f6e8225cd297061c0d9b432ef\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9aa7441065cd05d84c860cd0057ef3caaafa3ba515a88be4c0efcc6b4e513ece\",\"dweb:/ipfs/QmVgdhub5Bh8cDFPt1oEncDpuWmHTHnwjcYyuEbC93fhCX\"]},\"contracts/lib/LBPoolLib.sol\":{\"keccak256\":\"0xc298415c977bae52d8b322f814cbdbf0f30807a7e9c70f284796f16b3f7bd36b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d5a4b13d00ce0926de0c7d4f5395e92da69dc415590ed5b729d8f31410b0cec0\",\"dweb:/ipfs/QmQ15yejaA2T7BuWCHXHwWo2bBtAbV26TqqYq4eSzabYBk\"]}},\"version\":1}"}},"contracts/lbp/LBPoolFactory.sol":{"LBPoolFactory":{"abi":[{"inputs":[{"internalType":"contract IVault","name":"vault","type":"address"},{"internalType":"uint32","name":"pauseWindowDuration","type":"uint32"},{"internalType":"string","name":"factoryVersion","type":"string"},{"internalType":"string","name":"poolVersion","type":"string"},{"internalType":"address","name":"trustedRouter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Create2EmptyBytecode","type":"error"},{"inputs":[],"name":"Create2FailedDeployment","type":"error"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"Create2InsufficientBalance","type":"error"},{"inputs":[],"name":"Disabled","type":"error"},{"inputs":[{"internalType":"uint256","name":"resolvedStartTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"GradualUpdateTimeTravel","type":"error"},{"inputs":[],"name":"IndexOutOfBounds","type":"error"},{"inputs":[],"name":"InvalidOwner","type":"error"},{"inputs":[],"name":"InvalidTrustedRouter","type":"error"},{"inputs":[],"name":"MinWeight","type":"error"},{"inputs":[],"name":"NormalizedWeightInvariant","type":"error"},{"inputs":[],"name":"PoolPauseWindowDurationOverflow","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"SenderNotAllowed","type":"error"},{"inputs":[],"name":"StandardPoolWithCreator","type":"error"},{"anonymous":false,"inputs":[],"name":"FactoryDisabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"projectToken","type":"address"},{"indexed":true,"internalType":"contract IERC20","name":"reserveToken","type":"address"}],"name":"LBPoolCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"PoolCreated","type":"event"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"contract IERC20","name":"projectToken","type":"address"},{"internalType":"contract IERC20","name":"reserveToken","type":"address"},{"internalType":"uint256","name":"projectTokenStartWeight","type":"uint256"},{"internalType":"uint256","name":"reserveTokenStartWeight","type":"uint256"},{"internalType":"uint256","name":"projectTokenEndWeight","type":"uint256"},{"internalType":"uint256","name":"reserveTokenEndWeight","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"bool","name":"blockProjectTokenSwapsIn","type":"bool"}],"internalType":"struct LBPParams","name":"lbpParams","type":"tuple"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"create","outputs":[{"internalType":"address","name":"pool","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"getActionId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAuthorizer","outputs":[{"internalType":"contract IAuthorizer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDefaultLiquidityManagement","outputs":[{"components":[{"internalType":"bool","name":"disableUnbalancedLiquidity","type":"bool"},{"internalType":"bool","name":"enableAddLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableRemoveLiquidityCustom","type":"bool"},{"internalType":"bool","name":"enableDonation","type":"bool"}],"internalType":"struct LiquidityManagement","name":"liquidityManagement","type":"tuple"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getDefaultPoolHooksContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"constructorArgs","type":"bytes"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"getDeploymentAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNewPoolPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOriginalPauseWindowEndTime","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPauseWindowDuration","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPoolVersion","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPools","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"getPoolsInRange","outputs":[{"internalType":"address[]","name":"pools","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTrustedRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"isPoolFromFactory","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_string_fromMemory":{"entryPoint":1169,"id":null,"parameterSlots":2,"returnSlots":1},"allocate_memory":{"entryPoint":1132,"id":null,"parameterSlots":1,"returnSlots":1},"clear_storage_range_bytes1":{"entryPoint":1306,"id":null,"parameterSlots":2,"returnSlots":0},"extract_byte_array_length":{"entryPoint":1250,"id":null,"parameterSlots":1,"returnSlots":1},"extract_used_part_and_set_length_of_short_byte_array":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"61012060405234610468576179f38038038061001a8161046c565b928339810160a0828203126104685781516001600160a01b039190828116810361046857602090818501519163ffffffff93848416948585036104685760408801516001600160401b0395908681116104685783610079918b01610491565b9260608a015187811161046857608091610094918c01610491565b9901519788169687890361046857615c40956100b186880161046c565b96808852611db3878901393060805260a052420190814211610454578282116104455760c0521660e0528251948486116103a3576003956100f287546104e2565b94601f95868111610419575b5084908683116001146103b75761012c92915f9183610245575b50508160011b915f199060031b1c19161790565b86555b81518581116103a35760049261014584546104e2565b86811161036d575b50849086831160011461030b5761017a92915f91836102455750508160011b915f199060031b1c19161790565b82555b156102fd5761010095865286519384116102ea575060059361019f85546104e2565b8381116102b6575b508192841160011461025057505081906101d79394955f926102455750508160011b915f199060031b1c19161790565b90555b6040516118829182610531833960805182611741015260a05182818161021b015281816102dd0152818161071b0152818161096301528181610a8c015261124a015260c05182610370015260e05182818161012901526117a90152518181816101a301526107580152f35b015190505f80610118565b9091601f19841696855f52835f20935f905b89821061029e57505084600196979810610285575b50505050811b0190556101da565b01519060f8845f19921b161c191690555f808080610277565b80600185978294968601518155019601930190610262565b6102db90865f52835f2085808801891c8201928689106102e1575b01881c019061051a565b5f6101a7565b925081926102d1565b604190634e487b7160e01b5f525260245ffd5b630307417b60e01b5f908152fd5b90601f19831691855f52865f20925f5b88828210610357575050908460019594939210610340575b505050811b01825561017d565b01515f19838b1b60f8161c191690555f8080610333565b600185968293968601518155019501930161031b565b61039490855f52865f208880860160051c82019289871061039a575b0160051c019061051a565b5f61014d565b92508192610389565b634e487b7160e01b5f52604160045260245ffd5b90601f19831691895f52865f20925f5b888282106104035750509084600195949392106103ec575b505050811b01865561012f565b01515f19838b1b60f8161c191690555f80806103df565b60018596829396860151815501950193016103c7565b61043f90895f52865f208880860160051c82019289871061039a570160051c019061051a565b5f6100fe565b6368755a1160e01b5f5260045ffd5b634e487b7160e01b5f52601160045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b038111838210176103a357604052565b81601f82011215610468578051906001600160401b0382116103a3576104c0601f8301601f191660200161046c565b928284526020838301011161046857815f9260208093018386015e8301015290565b90600182811c92168015610510575b60208310146104fc57565b634e487b7160e01b5f52602260045260245ffd5b91607f16916104f1565b818110610525575050565b5f815560010161051a56fe60806040526004361015610011575f80fd5b5f5f358060e01c908163193ad50f146113905781632f2770db146111c9575080633f819b6f1461118b57806344f6fec7146110d157806353a72f7e14610f7357806354fd4d5014610e955780636634b75314610e49578063673a2a1f14610daa5780636c57f5a914610d8857806374b3dafe1461039457806378da80cb14610353578063851c1bb3146103015780638d928af8146102b05780638eec5d7014610292578063aaabadc5146101c7578063af905d1514610176578063db035ebc1461014d578063e9d56e191461010c5763ec888061146100ee575f80fd5b34610109578060031936011261010957602090604051908152f35b80fd5b5034610109578060031936011261010957602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461010957806003193601126101095760206101686117a7565b63ffffffff60405191168152f35b5034610109578060031936011261010957602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346101095780600319360112610109576040517faaabadc500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa9182156102875760209392610258575b5060405191168152f35b610279919250833d8511610280575b6102718183611420565b81019061177b565b905f61024e565b503d610267565b6040513d85823e3d90fd5b50346101095780600319360112610109576020600154604051908152f35b5034610109578060031936011261010957602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461010957602060031936011261010957600435907fffffffff000000000000000000000000000000000000000000000000000000008216820361010957602061034b83611716565b604051908152f35b5034610109578060031936011261010957602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5034610be5576101c0600319360112610be55760043567ffffffffffffffff8111610be5576103c79036906004016114da565b60243567ffffffffffffffff8111610be5576103e79036906004016114da565b916101407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc360112610be55760405191610140830183811067ffffffffffffffff821117610b035760405260443573ffffffffffffffffffffffffffffffffffffffff81168103610be557835260643573ffffffffffffffffffffffffffffffffffffffff81168103610be557602084015260843573ffffffffffffffffffffffffffffffffffffffff81168103610be557604084015260a435606084015260c435608084015260e43560a08401526101043560c08401526101243560e084015261014435610100840152610164358015158103610be5576101208401527f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c610d605760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d73ffffffffffffffffffffffffffffffffffffffff83511615610d38576040519384606081011067ffffffffffffffff606087011117610b0357606085016040525f85525f60208601525f604086015273ffffffffffffffffffffffffffffffffffffffff845116602086015260e0840151610100850151906060860151608087015160a08801519160c089015190662386f26fc10000808210908115610d2e575b8115610d24575b8115610d1a575b50610cf2576105f8670de0b6b3a76400009384926116bc565b1492831593610cdd575b505050610cb5578042115f14610cb05750425b81811015610c825750506106469161079061065861079e936040519586946101e060208701526102008601906113df565b90601f198583030160408601526113df565b73ffffffffffffffffffffffffffffffffffffffff875116606084015273ffffffffffffffffffffffffffffffffffffffff602088015116608084015273ffffffffffffffffffffffffffffffffffffffff60408801511660a0840152606087015160c0840152608087015160e084015260a087015161010084015260c087015161012084015260e0870151610140840152610100870151610160840152610120870151151561018084015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166101a084015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166101c0840152601f19838203016101e084015261157e565b03601f198101835282611420565b604051906107d0826020808201936107b585611630565b90805192839101825e015f815203601f198101845283611420565b6107dc6101a435611812565b90825115610c5a5773ffffffffffffffffffffffffffffffffffffffff9251905ff516918215610c325761080e6117de565b825f525f60205260405f20600160ff1982541617905560015468010000000000000000811015610b035780600161084892016001556116e1565b81549060031b9073ffffffffffffffffffffffffffffffffffffffff86831b921b1916179055827f83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc5f80a273ffffffffffffffffffffffffffffffffffffffff604081602084015116920151168082857f6b01c8c0b16cf8e7a1a9158019b5fe7d40b415d756710eb0fdcb577701dfee845f80a4604051916108e983611404565b600283525f5b60408110610c1b575081811015610c1657905b825115610be957602083015191835160011015610be957604084015173ffffffffffffffffffffffffffffffffffffffff92831690521690526109436114f8565b61094b6117a7565b9473ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610be5579490916040519586927feeec802f0000000000000000000000000000000000000000000000000000000084526101a484018760048601526101a06024860152835180915260206101c486019401905f5b818110610b3b575050505f9473ffffffffffffffffffffffffffffffffffffffff604086959463ffffffff610a72956101843560448a01521660648801528860848801528281511660a48801528260208201511660c488015201511660e4850152876101048501526101248401906060809180511515845260208101511515602085015260408101511515604085015201511515910152565b03818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610b3057610ae7575b602092507f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051908152f35b5067ffffffffffffffff8211610b03576020916040525f610ab9565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040513d5f823e3d90fd5b918097965094909293945173ffffffffffffffffffffffffffffffffffffffff81511682526020810151906002821015610bb85782606060809260209485600197015273ffffffffffffffffffffffffffffffffffffffff60408201511660408401520151151560608201520197019101918995969493926109d9565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b610902565b602090610c266114f8565b828287010152016108ef565b7f741752c2000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4ca249dc000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f7d0356f3000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b610615565b7f39cf114e000000000000000000000000000000000000000000000000000000005f5260045ffd5b610ce89293506116bc565b14155f8080610602565b7fbd393583000000000000000000000000000000000000000000000000000000005f5260045ffd5b905082105f6105df565b80861091506105d8565b80851091506105d1565b7f49e27cff000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610be5575f600319360112610be557602060ff600254166040519015158152f35b34610be5575f600319360112610be557604051806001916001549283825260208092019360015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6925f905b828210610e1e57610e1a86610e0e818a0382611420565b60405191829182611489565b0390f35b845473ffffffffffffffffffffffffffffffffffffffff168752958601959383019390830190610df7565b34610be5576020600319360112610be55760043573ffffffffffffffffffffffffffffffffffffffff8116809103610be5575f525f602052602060ff60405f2054166040519015158152f35b34610be5575f600319360112610be5576040516004545f82610eb68361152d565b91828252602093600190856001821691825f14610f53575050600114610ef8575b50610ee492500383611420565b610e1a6040519282849384528301906113df565b84915060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b905f915b858310610f3b575050610ee4935082010185610ed7565b80548389018501528794508693909201918101610f24565b60ff191685820152610ee495151560051b8501019250879150610ed79050565b34610be5576040600319360112610be55760043560248035600192600154808210156110a95780610fa484846116bc565b11611068575b50610fb4826116c9565b92610fc26040519485611420565b828452610fce836116c9565b91601f19602093013660208701375f5b848110610ff35760405180610e1a8882611489565b61100561100082846116bc565b6116e1565b905490875183101561103c5760031b1c73ffffffffffffffffffffffffffffffffffffffff16600582901b87018501528601610fde565b847f4e487b71000000000000000000000000000000000000000000000000000000005f5260326004525ffd5b90809250810390811161107c579084610faa565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e23d035000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610be5576040600319360112610be55760043567ffffffffffffffff8111610be55736602382011215610be5576055600b6111196020933690602481600401359101611443565b60405161114981868082019461112e86611630565b90805192839101825e015f815203601f198101835282611420565b519020611157602435611812565b604051916040830152848201523081520160ff81532073ffffffffffffffffffffffffffffffffffffffff60405191168152f35b34610be5575f600319360112610be557610e1a6040516111b5816111ae8161157e565b0382611420565b6040519182916020835260208301906113df565b34610be5575f600319360112610be5577fffffffff000000000000000000000000000000000000000000000000000000006112049116611716565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa908115610b305784925f9261136e575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610b30575f92611337575b50501561130f576112dc6117de565b600160ff1960025416176002557f432acbfd662dbb5d8b378384a67159b47ca9d0f1b79f97cf64cf8585fa362d505f80a1005b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d8311611367575b61134e8183611420565b81010312610be557518015158103610be55781806112cd565b503d611344565b606491925061138990843d8611610280576102718183611420565b919061127c565b34610be5575f600319360112610be55760806113aa6114f8565b6113dd60405180926060809180511515845260208101511515602085015260408101511515604085015201511515910152565bf35b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6060810190811067ffffffffffffffff821117610b0357604052565b90601f601f19910116810190811067ffffffffffffffff821117610b0357604052565b92919267ffffffffffffffff8211610b03576040519161146d6020601f19601f8401160184611420565b829481845281830111610be5578281602093845f960137010152565b60209060206040818301928281528551809452019301915f5b8281106114b0575050505090565b835173ffffffffffffffffffffffffffffffffffffffff16855293810193928101926001016114a2565b9080601f83011215610be5578160206114f593359101611443565b90565b604051906080820182811067ffffffffffffffff821117610b03576040525f6060838281528260208201528260408201520152565b90600182811c92168015611574575b602083101461154757565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f169161153c565b6005545f929161158d8261152d565b8082529160209060019081811690811561160a57506001146115b0575b50505050565b9293945060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0925f935b8585106115f757505050602092500101905f8080806115aa565b80548585018401529382019381016115dd565b915050602094955060ff1991509291921683830152151560051b0101905f8080806115aa565b6003545f929161163f8261152d565b916001908181169081156116a9575060011461165a57505050565b909192935060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b905f915b848310611696575050500190565b8181602092548587015201920191611688565b60ff191683525050811515909102019150565b9190820180921161107c57565b67ffffffffffffffff8111610b035760051b60200190565b600154811015610be95760015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601905f90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f000000000000000000000000000000000000000000000000000000000000000084521660408201526024815261177581611404565b51902090565b90816020910312610be5575173ffffffffffffffffffffffffffffffffffffffff81168103610be55790565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff81164210156117d95790565b505f90565b60ff600254166117ea57565b7f75884cda000000000000000000000000000000000000000000000000000000005f5260045ffd5b60405160208101913383524660408301526060820152606081526080810181811067ffffffffffffffff821117610b03576040525190209056fea2646970667358221220006d1de6f6076aeac96e8282c9bacc256c904818fa6bb6450ae37456bc2b765864736f6c634300081b003361044060405234610d1a57615c40803803809161001e82610440610d54565b61044039806101e08112610d1a57610440516001600160401b038111610d1a576100519082610440019061044001610d77565b610460516001600160401b038111610d1a576100796101409184610440019061044001610d77565b93603f190112610d1a576040519161014083016001600160401b03811184821017610b39576040526100ac610480610dcc565b83526100b96104a0610dcc565b60208401526100c96104c0610dcc565b60408401526104e05160608401526105005160808401526105205160a08401526105405160c08401526105605160e0840152610580516101008401526105a0518015158103610d1a576101208401526105c0516001600160a01b0381168103610d1a576101376105e0610dcc565b610600519092906001600160401b038111610d1a5761015e91610440019061044001610d77565b9060018060a01b03855116956060608060405161017a81610d1e565b8281528260208201525f60408201528280820152015260018060a01b0360208701511660018060a01b03604088015116115f14610d11575f9460015b604051966101c388610d39565b6002885260403660208a01376101e160ff60608b0151921689610de0565b526101f460ff60808a0151921688610de0565b526040519561020287610d1e565b8187528260208801526002604088015260608701528360808701526040516040810181811060018060401b03821117610b39576040526001815260208101603160f81b815261025083610e48565b6101205261025d82610fcb565b6101405282516020840120918260e05251902080610100524660a0526040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815260c0810181811060018060401b03821117610b39576040525190206080523060c0526101608390528051906001600160401b038211610b395760035490600182811c92168015610d07575b6020831014610b1b5781601f849311610caf575b50602090601f8311600114610c3a575f92610c2f575b50508160011b915f199060031b1c1916176003555b8051906001600160401b038211610b395760045490600182811c92168015610c25575b6020831014610b1b5781601f849311610bcd575b50602090601f8311600114610b58575f92610b4d575b50508160011b915f199060031b1c1916176004555b610180528051906001600160401b038211610b395760055490600182811c92168015610b2f575b6020831014610b1b5781601f849311610acd575b50602090601f8311600114610a45575f92610a3a575b50508160011b915f199060031b1c1916176005555b6040820151806101a05260608301515103610a2b575f925f5b6101a05160ff8216101561053d5761044960ff82166060860151610de0565b5194662386f26fc10000861061052e578561046391610e3b565b9460ff821661049a576101c0525b60ff808216146104865760ff1660010161042a565b634e487b7160e01b5f52601160045260245ffd5b60ff82166001036104ae576101e052610471565b60ff82166002036104c25761020052610471565b60ff82166003036104d65761022052610471565b60ff82166004036104ea5761024052610471565b60ff82166005036104fe5761026052610471565b60ff82166006036105125761028052610471565b600760ff831614610524575b50610471565b6102a0525f61051e565b63bd39358360e01b5f5260045ffd5b5084670de0b6b3a764000085036109cd578015610a1857600780546001600160a01b031990811690915560068054918216831790556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a360e08101519161010082015192606083015160808401519060a08501519160c086015191662386f26fc10000808210908115610a0e575b8115610a04575b81156109fa575b5061052e57670de0b6b3a7640000916105fc91610e3b565b14918215926109dc575b50506109cd578042115f146109c85750425b838110156109b15761036052610100820151610380526102c0526020810180516001600160a01b039081166102e05260408301805182166103005261012084015115156104205260608401516103a05260808401516103c05260a08401516103e05260c084015161040052915191517f0f3631f9dab08169d1db21c6dc5f32536fb2b0a6b9bb5330d71c52132f968be09450918116911611156109a65760ff5f8160015b16610340521661032052604051906106d382610d39565b600282526040366020840137604051906106ec82610d39565b600282526040366020840137606081015161071e608083015161032051906107176103405188610de0565b5285610de0565b5261074560c060a0830151920151610320519061073e6103405186610de0565b5283610de0565b526107826103605191610774610380519460405195869586526020860152608060408601526080850190610e08565b908382036060850152610e08565b0390a1604051614afe6111028239608051816137f3015260a051816138bf015260c051816137c4015260e0518161384201526101005181613868015261012051816116d0015261014051816116f90152610160518181816104490152818161074201528181610a0c015281816111a30152818161169701528181611da90152818161243a0152818161289e015281816134ec01526136c0015261018051818181610b2101528181610d4501528181610e50015281816110a2015261180f01526101a0518150506101c0518150506101e05181505061020051815050610220518150506102405181505061026051815050610280518150506102a0518150506102c051818181610dd30152818161214e015261253001526102e0518161205d015261030051816103a101526103205181818161190c01528181611c66015281816129050152613b540152610340518181816118eb0152818161292f0152613b9e0152610360518181816119fc0152818161210c015281816124c7015281816129c60152818161375b0152613ae7015261038051818181610c7201528181611a1f015281816129ec015281816137880152613ac601526103a05181818161195901528181612a340152613b2e01526103c05181818161192d0152612a5c01526103e0518181816119cd01528181612aae0152613b0d0152610400518181816119a10152612ad901526104205181818161161301528181611bfb015261299d0152614afe90f35b60ff6001815f6106bc565b8390637d0356f360e01b5f5260045260245260445ffd5b610618565b631ce788a760e11b5f5260045ffd5b670de0b6b3a76400009250906109f191610e3b565b14158580610606565b90508310896105e4565b80861091506105dd565b80841091506105d6565b631e4fbdf760e01b5f525f60045260245ffd5b63aaad13f760e01b5f5260045ffd5b015190505f806103fc565b60055f90815293507f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db091905b601f1984168510610ab2576001945083601f19811610610a9a575b505050811b01600555610411565b01515f1960f88460031b161c191690555f8080610a8c565b81810151835560209485019460019093019290910190610a71565b90915060055f5260205f20601f840160051c810160208510610b14575b90849392915b601f830160051c82018110610b065750506103e6565b5f8155859450600101610af0565b5080610aea565b634e487b7160e01b5f52602260045260245ffd5b91607f16916103d2565b634e487b7160e01b5f52604160045260245ffd5b015190505f80610396565b60045f90815293505f516020615c205f395f51905f5291905b601f1984168510610bb2576001945083601f19811610610b9a575b505050811b016004556103ab565b01515f1960f88460031b161c191690555f8080610b8c565b81810151835560209485019460019093019290910190610b71565b60045f529091505f516020615c205f395f51905f52601f840160051c810160208510610c1e575b90849392915b601f830160051c82018110610c10575050610380565b5f8155859450600101610bfa565b5080610bf4565b91607f169161036c565b015190505f80610334565b60035f90815293505f516020615c005f395f51905f5291905b601f1984168510610c94576001945083601f19811610610c7c575b505050811b01600355610349565b01515f1960f88460031b161c191690555f8080610c6e565b81810151835560209485019460019093019290910190610c53565b60035f529091505f516020615c005f395f51905f52601f840160051c810160208510610d00575b90849392915b601f830160051c82018110610cf257505061031e565b5f8155859450600101610cdc565b5080610cd6565b91607f169161030a565b6001945f6101b6565b5f80fd5b60a081019081106001600160401b03821117610b3957604052565b606081019081106001600160401b03821117610b3957604052565b601f909101601f19168101906001600160401b03821190821017610b3957604052565b81601f82011215610d1a578051906001600160401b038211610b395760405192610dab601f8401601f191660200185610d54565b82845260208383010111610d1a57815f9260208093018386015e8301015290565b51906001600160a01b0382168203610d1a57565b8051821015610df45760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b9081518082526020808093019301915f5b828110610e27575050505090565b835185529381019392810192600101610e19565b9190820180921161048657565b805160209081811015610ebe5750601f825111610e805780825192015190808310610e7257501790565b825f19910360031b1b161790565b60448260405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b906001600160401b038211610b39575f54926001938481811c91168015610fc1575b83821014610b1b57601f8111610f8e575b5081601f8411600114610f2c57509282939183925f94610f21575b50501b915f199060031b1c1916175f5560ff90565b015192505f80610f0c565b919083601f1981165f8052845f20945f905b88838310610f745750505010610f5c575b505050811b015f5560ff90565b01515f1960f88460031b161c191690555f8080610f4f565b858701518855909601959485019487935090810190610f3e565b5f805284601f845f20920160051c820191601f860160051c015b828110610fb6575050610ef1565b5f8155018590610fa8565b90607f1690610ee0565b805160209081811015610ff55750601f825111610e805780825192015190808310610e7257501790565b9192916001600160401b038111610b395760019182548381811c911680156110f7575b82821014610b1b57601f81116110c4575b5080601f83116001146110645750819293945f92611059575b50505f19600383901b1c191690821b17905560ff90565b015190505f80611042565b90601f19831695845f52825f20925f905b8882106110ad5750508385969710611095575b505050811b01905560ff90565b01515f1960f88460031b161c191690555f8080611088565b808785968294968601518155019501930190611075565b835f5283601f835f20920160051c820191601f850160051c015b8281106110ec575050611029565b5f81550184906110de565b90607f169061101856fe6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a714612fc25750806306fdde0314612f19578063095ea7b314612e9c5780630b89f18214612c625780630ca898481461282257806316a0b3e0146125ee57806318160ddd146125d457806318b6eb55146125945780631c149e281461247157806323b872dd146123c957806323de665114612398578063273c1adf146123765780632754888d1461230d57806330adf81f146122d3578063313ce567146122b8578063351a964d146122945780633644e5151461227a57806338be241d1461222f57806345421ec7146120815780634837c596146120315780635211fa7714611fee57806353b79bd714611f9c57806354fd4d5014611ef35780635687f2b814611e92578063627cdcb914611e69578063654cf15d14611e47578063679aefce14611e0f57806370a0823114611d3c578063715018a614611cb557806372c9818614611b0d57806379ba509714611a545780637beed220146118bb5780637ecebe001461187657806381fa807c146117b357806384b0196e146116bb5780638d928af81461166b5780638da5cb5b1461163857806395146efb146115fc57806395d89b4114611500578063976907cc14611448578063984de9e81461125a578063a0e8f5ac14611212578063a9059cbb1461110c578063aa6ca8081461104a578063abb1dc4414610df7578063af905d1514610da7578063b156aa0a14610ced578063b677fa5614610ccb578063ba5f9f4014610be6578063c0bc6f3314610b7a578063ce20ece714610b5a578063d335b0cf14610ac8578063d505accf1461086c578063d77153a7146107af578063dd62ed3e146106c5578063e30c397814610692578063e565c29e146103c5578063e594203d14610375578063f2fde38b146102e75763f89f27ed146102b0575f80fd5b346102e3575f6003193601126102e3576102df6102cb613aa3565b60405191829160208352602083019061315d565b0390f35b5f80fd5b346102e35760206003193601126102e35761030061304f565b6103086138e5565b73ffffffffffffffffffffffffffffffffffffffff80911690817fffffffffffffffffffffffff00000000000000000000000000000000000000006007541617600755600654167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e227005f80a3005b346102e3575f6003193601126102e357602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102e3575f6003193601126102e3576040516101009081810181811067ffffffffffffffff8211176106655760405260608152602090818101906060825260408101915f8352606082015f8152608083015f815260a08401905f825260c08501925f845260e08601945f865273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906040517f535cfd8a0000000000000000000000000000000000000000000000000000000081523060048201525f81602481865afa90811561060b575f91610643575b5088526104b7613aa3565b81526040517fb45090f90000000000000000000000000000000000000000000000000000000081523060048201528a81602481865afa90811561060b575f91610616575b5089526105066134a3565b835260405180927ff29486a10000000000000000000000000000000000000000000000000000000082523060048301528160246101a09384935afa98891561060b578c996105ae9461059b935f926105de575b505060e0810151151587528a81015115158852610120809101511515895261057f613759565b15158a526040519d8d8f9e938f948552519301528c019061315d565b9051601f198b83030160408c015261315d565b9651606089015251608088015251151560a087015251151560c086015251151560e0850152511515908301520390f35b6105fd9250803d10610604575b6105f58183613122565b81019061357a565b8e80610559565b503d6105eb565b6040513d5f823e3d90fd5b90508a81813d831161063c575b61062d8183613122565b810103126102e357518c6104fb565b503d610623565b61065f91503d805f833e6106578183613122565b810190613683565b8c6104ac565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b346102e3575f6003193601126102e357602073ffffffffffffffffffffffffffffffffffffffff60075416604051908152f35b346102e35760406003193601126102e3576106de61304f565b60206106e8613072565b91606473ffffffffffffffffffffffffffffffffffffffff91828060405196879586947f927da1050000000000000000000000000000000000000000000000000000000086523060048701521660248501521660448301527f0000000000000000000000000000000000000000000000000000000000000000165afa801561060b575f9061077c575b602090604051908152f35b506020813d6020116107a7575b8161079660209383613122565b810103126102e35760209051610771565b3d9150610789565b346102e3575f6003193601126102e3576101406040516107ce816130e9565b5f81526020810190604081015f8152606082015f815260808301905f825260a084015f815260c0850160e08601915f83526101009485880194610120809901975f895260018b5260018552600187526040519a5f8c5251151560208c015251151560408b015251151560608a0152511515608089015251151560a088015251151560c087015251151560e08601525115159084015251151590820152f35b346102e35760e06003193601126102e35761088561304f565b61088d613072565b60443591608435919060643560ff841684036102e357804211610a9d576108db8273ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2080549060018201905590565b906109aa6109a160405196602088017f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9815273ffffffffffffffffffffffffffffffffffffffff98899586891697886040840152878b1660608401528c608084015260a083015260c082015260c08152610954816130cd565b51902061095f6137ad565b90604051917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015260c43591604260a4359220613f5b565b90929192613fea565b16818103610a6f576040517fe1f21c6700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015285166024820152604481018790526020816064815f7f00000000000000000000000000000000000000000000000000000000000000008b165af1801561060b57610a3b57005b6020813d602011610a67575b81610a5460209383613122565b810103126102e357610a6590613359565b005b3d9150610a47565b7f4b800e46000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b7f62791302000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b346102e3575f6003193601126102e3576040517fb45090f900000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa801561060b575f9061077c57602090604051908152f35b346102e3575f6003193601126102e35760206040516509184e72a0008152f35b346102e3575f6003193601126102e3575f60c0604051610b99816130cd565b60608152606060208201528260408201528260608201528260808201528260a082015201527fd6234725000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102e35760e06003193601126102e357610bff61304f565b50610c08613072565b50600460443510156102e35767ffffffffffffffff6084358181116102e357610c35903690600401613190565b5060a4358181116102e357610c4e903690600401613190565b5060c4359081116102e357610c679036906004016131f0565b50610c706136a9565b7f0000000000000000000000000000000000000000000000000000000000000000421115610ca357602060405160018152f35b7ff38b5770000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102e3575f6003193601126102e35760206040516709b6e64a8ec600008152f35b346102e3575f6003193601126102e3576040517f535cfd8a0000000000000000000000000000000000000000000000000000000081523060048201525f8160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa801561060b576102df915f91610d8d575b5060405191829160208352602083019061315d565b610da191503d805f833e6106578183613122565b82610d78565b346102e3575f6003193601126102e357602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102e3575f6003193601126102e35773ffffffffffffffffffffffffffffffffffffffff6040517f67e0e0760000000000000000000000000000000000000000000000000000000081523060048201525f81602481857f0000000000000000000000000000000000000000000000000000000000000000165afa801561060b575f915f935f915f93610f1c575b50610e9b60405194608086526080860190613288565b6020858203818701528080885193848152019701925f905b838210610ee05787806102df89610ed28d8b858203604087015261315d565b90838203606085015261315d565b909192939783606060019260408c518051610efa816132d1565b8352808501518716858401520151151560408201520199019493920190610eb3565b9450925050503d805f843e610f318184613122565b8201906080838303126102e35782519267ffffffffffffffff938481116102e35783610f5e91830161339b565b90602093848201518681116102e357820181601f820112156102e357805190610f8682613145565b96610f946040519889613122565b828852808801816060809502840101928584116102e3578201905b838210610ff557505050505060408201518681116102e35781610fd3918401613442565b9560608301519081116102e357610fea9201613442565b909293909185610e85565b84828703126102e3576040519061100b826130b1565b825160028110156102e357825283830151908a821682036102e357828592838995015261103a60408601613359565b6040820152815201910190610faf565b346102e3575f6003193601126102e3576040517fca4f28030000000000000000000000000000000000000000000000000000000081523060048201525f8160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa801561060b576102df915f916110ea575b50604051918291602083526020830190613288565b61110691503d805f833e6110fe8183613122565b810190613419565b826110d5565b346102e35760406003193601126102e357611189602061112a61304f565b6040517fbeabacc800000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248083019190915235604482015291829081906064820190565b03815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af1801561060b576111db575b602060405160018152f35b6020813d60201161120a575b816111f460209383613122565b810103126102e35761120590613359565b6111d0565b3d91506111e7565b346102e3576003196060813601126102e3576004359067ffffffffffffffff82116102e35760e091360301126102e35761124a613072565b50604080515f81525f6020820152f35b346102e35760406003193601126102e35760043567ffffffffffffffff81116102e35761128b903690600401613190565b60243560028110156102e3576112a0816132d1565b6114415760045b6112af613aa3565b90806003146113ed57806004146113695780600114611310576002146112fc577f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffd5b60209161130891614095565b604051908152f35b50670de0b6b3a76400009081810291818304149015171561133c5760209161133791613c0e565b611308565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b505f9190670de0b6b3a76400005b81518410156113b3576113ab6001916113a56113938787613387565b5161139e8887613387565b5190613c25565b90613cb0565b930192611377565b9250505080156113c557602090611308565b7f26543689000000000000000000000000000000000000000000000000000000005f5260045ffd5b505f9190670de0b6b3a76400005b81518410156113b357670de0b6b3a76400006114386001926114326114208888613387565b5161142b8988613387565b5190613ec2565b90613bfb565b049301926113fb565b60036112a7565b346102e3576101006003193601126102e35761146261304f565b5061146b613072565b50600560443510156102e35767ffffffffffffffff6064358181116102e357611498903690600401613190565b506084358181116102e3576114b1903690600401613190565b60c4358281116102e3576114c9903690600401613190565b5060e4359182116102e3576114e56102df9236906004016131f0565b506040519182915f835260406020840152604083019061315d565b346102e3575f6003193601126102e3576040516004545f8261152183613308565b91828252602093600190856001821691825f146115be575050600114611563575b5061154f92500383613122565b6102df60405192828493845283019061302a565b84915060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b905f915b8583106115a657505061154f935082010185611542565b8054838901850152879450869390920191810161158f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168582015261154f95151560051b85010192508791506115429050565b346102e3575f6003193601126102e35760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b346102e3575f6003193601126102e357602073ffffffffffffffffffffffffffffffffffffffff60065416604051908152f35b346102e3575f6003193601126102e357602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102e3575f6003193601126102e3576116f47f0000000000000000000000000000000000000000000000000000000000000000613cd2565b61171d7f0000000000000000000000000000000000000000000000000000000000000000613e04565b9060405191602083019280841067ffffffffffffffff851117610665576117936102df92611785956040525f83526040519586957f0f00000000000000000000000000000000000000000000000000000000000000875260e0602088015260e087019061302a565b90858203604087015261302a565b904660608501523060808501525f60a085015283820360c085015261315d565b346102e3575f6003193601126102e3576040517ff29486a10000000000000000000000000000000000000000000000000000000081523060048201526101a090818160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561060b576040925f92611859575b505060608282015191015182519182526020820152f35b61186f9250803d10610604576105f58183613122565b8280611842565b346102e35760206003193601126102e35773ffffffffffffffffffffffffffffffffffffffff6118a461304f565b165f526002602052602060405f2054604051908152f35b346102e3575f6003193601126102e357610ed26040516118da816130b1565b6002815260403660208301376102df7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006119568386613387565b527f00000000000000000000000000000000000000000000000000000000000000006119828286613387565b5260405191611990836130b1565b6002835260403660208501376119c77f00000000000000000000000000000000000000000000000000000000000000009184613387565b526119f37f00000000000000000000000000000000000000000000000000000000000000009183613387565b526040519384937f000000000000000000000000000000000000000000000000000000000000000085527f0000000000000000000000000000000000000000000000000000000000000000602086015260806040860152608085019061315d565b346102e3575f6003193601126102e35760075473ffffffffffffffffffffffffffffffffffffffff3381831603611ae1577fffffffffffffffffffffffff00000000000000000000000000000000000000008092166007556006549133908316176006553391167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b346102e3576003196020813601126102e35760043567ffffffffffffffff918282116102e35760e09082360301126102e35760405191611b4c836130cd565b816004013560028110156102e35783526024820135602084015260448201358181116102e357611b829060043691850101613190565b60408401526064820135606084015260808301916084810135835260a481013573ffffffffffffffffffffffffffffffffffffffff811681036102e35760a085015260c48101359182116102e3576004611bdf92369201016131f0565b60c0830152611bec6136a9565b611bf4613759565b15611c8d577f00000000000000000000000000000000000000000000000000000000000000009081611c61575b50611c3957611308602091611c346136a9565b613906565b7f1269438a000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050517f0000000000000000000000000000000000000000000000000000000000000000141582611c21565b7ffdf79845000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102e3575f6003193601126102e357611ccd6138e5565b5f73ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffff00000000000000000000000000000000000000008060075416600755600654908116600655167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346102e3576020806003193601126102e357604481611d5961304f565b6040517ff7888aec00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff918216602482015292839182907f0000000000000000000000000000000000000000000000000000000000000000165afa90811561060b575f91611de2575b50604051908152f35b90508181813d8311611e08575b611df98183613122565b810103126102e3575182611dd9565b503d611def565b346102e3575f6003193601126102e3577f18e79a20000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102e3575f6003193601126102e357602060405167016345785d8a00008152f35b346102e3575f6003193601126102e357335f908152600260205260409020805460018101909155005b346102e35760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925611ec336613246565b92919390611ecf6136a9565b73ffffffffffffffffffffffffffffffffffffffff809160405195865216941692a3005b346102e3575f6003193601126102e3576040516005545f82611f1483613308565b91828252602093600190856001821691825f146115be575050600114611f41575061154f92500383613122565b84915060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0905f915b858310611f8457505061154f935082010185611542565b80548389018501528794508693909201918101611f6d565b346102e3575f6003193601126102e357606060408051611fbb816130b1565b82815282602082015201527fd6234725000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102e3576003196040813601126102e3576004359067ffffffffffffffff82116102e35760e091360301126102e357612026613072565b5060206040515f8152f35b346102e3575f6003193601126102e357602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102e35760e06003193601126102e35761209a61304f565b6120a2613072565b50600560443510156102e35767ffffffffffffffff6064358181116102e3576120cf903690600401613190565b5060a4358181116102e3576120e8903690600401613190565b5060c4359081116102e3576121019036906004016131f0565b5061210a6136a9565b7f00000000000000000000000000000000000000000000000000000000000000004210156122075773ffffffffffffffffffffffffffffffffffffffff80911690807f00000000000000000000000000000000000000000000000000000000000000001682149182612184575b6020836040519015158152f35b60049250602090604051938480927f5e01eb5a0000000000000000000000000000000000000000000000000000000082525afa90811561060b576020925f926121d8575b5080600654169116149082612177565b6121f9919250833d8511612200575b6121f18183613122565b81019061354e565b90836121c8565b503d6121e7565b7f3eee08c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102e35760606003193601126102e35767ffffffffffffffff6004358181116102e357612261903690600401613190565b506044359081116102e3576120269036906004016131f0565b346102e3575f6003193601126102e35760206113086137ad565b346102e3575f6003193601126102e35760206122ae613759565b6040519015158152f35b346102e3575f6003193601126102e357602060405160128152f35b346102e3575f6003193601126102e35760206040517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b346102e3576101006003193601126102e35761232761304f565b50612330613072565b50600460443510156102e35767ffffffffffffffff6084358181116102e35761235d903690600401613190565b5060a4358181116102e3576114b1903690600401613190565b346102e3575f6003193601126102e35760206040516729a2241af62c00008152f35b346102e35760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611ec336613246565b346102e357608460206123db36613246565b6040517f15dacbea00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff93841660248201529183166044830152606482015292839182905f907f0000000000000000000000000000000000000000000000000000000000000000165af1801561060b576111db57602060405160018152f35b346102e35760406003193601126102e35767ffffffffffffffff6004358181116102e3576124a3903690600401613190565b506024359081116102e3576124bc9036906004016131f0565b506124c56136a9565b7f0000000000000000000000000000000000000000000000000000000000000000421015612207576040517f5e01eb5a00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa90811561060b576020925f92612575575b508060065416911614604051908152f35b61258d919250833d8511612200576121f18183613122565b9083612564565b346102e3576003196020813601126102e3576004359067ffffffffffffffff82116102e35761018091360301126102e357604080515f81525f6020820152f35b346102e3575f6003193601126102e35760206113086134a3565b346102e35760606003193601126102e35760043567ffffffffffffffff81116102e35761261f903690600401613190565b6024356126396126328260443594613387565b5191613714565b600191908284111561281c5760025b806003146127ab578060041461273d57806001146126e557600214612694577f4e487b71000000000000000000000000000000000000000000000000000000005f52605160045260245ffd5b80156126bd57602093611308936113a5926ec097ce7bc90715b34b9f0fffffffff040190613c25565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b508093925015612710576113a5611308926020946ec097ce7bc90715b34b9f10000000000490613c25565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b50670de0b6b3a764000093925f91815b61276b575b50505082156113c5576113a56113089260209490613c25565b909194670de0b6b3a7640000518610156127a557908261279d81936113a56127938a86613387565b5161139e8b613366565b96019261274d565b94612752565b50670de0b6b3a764000093925f91815b6127d85750505082156113c5576113a56113089260209490613c25565b909194670de0b6b3a7640000518610156127a5579082670de0b6b3a764000061281382946114326128098b87613387565b5161142b8c613366565b049601926127bb565b82612648565b346102e3575f6003193601126102e357604051610120810181811067ffffffffffffffff821117610665576040526060815260606020820152606060408201526060808201525f60808201525f60a08201525f60c08201525f60e08201525f61010082015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166040517fca4f28030000000000000000000000000000000000000000000000000000000081523060048201525f81602481855afa90811561060b575f91612c48575b5082527f00000000000000000000000000000000000000000000000000000000000000008060c084015260245f7f0000000000000000000000000000000000000000000000000000000000000000938460e0870152604051928380927f7e361bde0000000000000000000000000000000000000000000000000000000082523060048301525afa90811561060b575f91612be9575b5060208401527f000000000000000000000000000000000000000000000000000000000000000015156101008401527f000000000000000000000000000000000000000000000000000000000000000060808401527f000000000000000000000000000000000000000000000000000000000000000060a0840152604051612a1c816130b1565b600281526040366020830137806040850152612a59827f000000000000000000000000000000000000000000000000000000000000000092613387565b527f0000000000000000000000000000000000000000000000000000000000000000612a89836040860151613387565b52612ad360405191612a9a836130b1565b6002835260403660208501378260608601527f000000000000000000000000000000000000000000000000000000000000000092613387565b52612b037f0000000000000000000000000000000000000000000000000000000000000000916060840151613387565b526040516020815261014081019180519261012060208401528351809152602061016084019401905f5b818110612bbd57505050610100612b878394612b72612b5e602086015192601f1993848983030160408a015261315d565b60408601518388830301606089015261315d565b9060608501519086830301608087015261315d565b91608081015160a085015260a081015160c085015260c081015160e085015260e081015182850152015115156101208301520390f35b825173ffffffffffffffffffffffffffffffffffffffff16865260209586019590920191600101612b2d565b90503d805f833e612bfa8183613122565b8101906040818303126102e357805167ffffffffffffffff81116102e35782612c24918301613442565b91602082015167ffffffffffffffff81116102e357612c439201613442565b612995565b612c5c91503d805f833e6110fe8183613122565b83612900565b346102e35760e06003193601126102e357612c7b61304f565b50612c84613072565b6044359067ffffffffffffffff82116102e357366023830112156102e3578160040135612cb081613145565b90612cbe6040519283613122565b808252602093848301906024829360071b820101903682116102e357602401915b818310612e1b5750505060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c3601126102e357612d1b6136a9565b8151600203612df357815115612dc65751830151612d38816132d1565b612d41816132d1565b1590811591612d99575b50612d71576040519073ffffffffffffffffffffffffffffffffffffffff309116148152f35b7fdf450632000000000000000000000000000000000000000000000000000000005f5260045ffd5b8091505160011015612dc65760400151820151612db5816132d1565b612dbe816132d1565b151583612d4b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7faaad13f7000000000000000000000000000000000000000000000000000000005f5260045ffd5b6080833603126102e35760405190612e3282613095565b73ffffffffffffffffffffffffffffffffffffffff843581811681036102e35783528885013560028110156102e35789840152604085013590811681036102e3576040830152606090818501359283151584036102e3576080938a93820152815201920191612cdf565b346102e35760406003193601126102e3576111896020612eba61304f565b6040517fe1f21c6700000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff90911660248083019190915235604482015291829081906064820190565b346102e3575f6003193601126102e3576040516003545f82612f3a83613308565b91828252602093600190856001821691825f146115be575050600114612f67575061154f92500383613122565b84915060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b905f915b858310612faa57505061154f935082010185611542565b80548389018501528794508693909201918101612f93565b346102e35760206003193601126102e357600435907fffffffff0000000000000000000000000000000000000000000000000000000082168092036102e3577f01ffc9a700000000000000000000000000000000000000000000000000000000602092148152f35b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036102e357565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036102e357565b6080810190811067ffffffffffffffff82111761066557604052565b6060810190811067ffffffffffffffff82111761066557604052565b60e0810190811067ffffffffffffffff82111761066557604052565b610140810190811067ffffffffffffffff82111761066557604052565b6040810190811067ffffffffffffffff82111761066557604052565b90601f601f19910116810190811067ffffffffffffffff82111761066557604052565b67ffffffffffffffff81116106655760051b60200190565b9081518082526020808093019301915f5b82811061317c575050505090565b83518552938101939281019260010161316e565b9080601f830112156102e35760209082356131aa81613145565b936131b86040519586613122565b81855260208086019260051b8201019283116102e357602001905b8282106131e1575050505090565b813581529083019083016131d3565b81601f820112156102e35780359067ffffffffffffffff821161066557604051926132256020601f19601f8601160185613122565b828452602083830101116102e357815f926020809301838601378301015290565b60031960609101126102e35773ffffffffffffffffffffffffffffffffffffffff9060043582811681036102e3579160243590811681036102e3579060443590565b9081518082526020808093019301915f5b8281106132a7575050505090565b835173ffffffffffffffffffffffffffffffffffffffff1685529381019392810192600101613299565b600211156132db57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b90600182811c9216801561334f575b602083101461332257565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691613317565b519081151582036102e357565b670de0b6b3a764000051811015612dc65760051b670de0b6b3a76400200190565b8051821015612dc65760209160051b010190565b9080601f830112156102e3578151906020916133b681613145565b936133c46040519586613122565b81855260208086019260051b8201019283116102e357602001905b8282106133ed575050505090565b815173ffffffffffffffffffffffffffffffffffffffff811681036102e35781529083019083016133df565b906020828203126102e357815167ffffffffffffffff81116102e35761343f920161339b565b90565b9080601f830112156102e35781519060209161345d81613145565b9361346b6040519586613122565b81855260208086019260051b8201019283116102e357602001905b828210613494575050505090565b81518152908301908301613486565b6040517fe4dc2aa400000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561060b575f9161351f575090565b90506020813d602011613546575b8161353a60209383613122565b810103126102e3575190565b3d915061352d565b908160209103126102e3575173ffffffffffffffffffffffffffffffffffffffff811681036102e35790565b809103906101a082126102e357608060405192613596846130e9565b126102e3576040516135a781613095565b6135b082613359565b81526135be60208301613359565b60208201526135cf60408301613359565b60408201526135e060608301613359565b606082015282526080810151602083015260a0810151604083015260c0810151606083015260e081015164ffffffffff811681036102e3576080830152610100908181015163ffffffff811681036102e35761367c916101809160a08601526101209361364e858301613359565b60c08701526136606101408301613359565b60e08701526136726101608301613359565b9086015201613359565b9082015290565b906020828203126102e357815167ffffffffffffffff81116102e35761343f9201613442565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633036136e857565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b60028110613744577fc1ab6dc1000000000000000000000000000000000000000000000000000000005f5260045ffd5b61375590613750613aa3565b613387565b5190565b7f0000000000000000000000000000000000000000000000000000000000000000421015806137855790565b507f000000000000000000000000000000000000000000000000000000000000000042111590565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163014806138bc575b15613815577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff8211176106655760405251902090565b507f000000000000000000000000000000000000000000000000000000000000000046146137ec565b73ffffffffffffffffffffffffffffffffffffffff600654163303611ae157565b6040810190815161391d6060830191825190613387565b519251916139316080820193845190613387565b5191815161393e816132d1565b613947816132d1565b6139f25761396161395a60209251613714565b9451613714565b910151670de0b6b3a7640000948561397882613bc7565b0482116139ca5761398c6139929282613c18565b90614095565b8484029380850486149015171561133c576139b36139b9926139c695613c0e565b90613c25565b8381810391100290613bfb565b0490565b7f340a4533000000000000000000000000000000000000000000000000000000005f5260045ffd5b613a0c613a056020929593949551613714565b9251613714565b920151670de0b6b3a7640000613a2185613bc7565b048111613a7b5783039083821161133c57613a426139b392613a4895614095565b92614095565b7ffffffffffffffffffffffffffffffffffffffffffffffffff21f494c589c0000810190811161133c5761343f91613cb0565b7f64590b9f000000000000000000000000000000000000000000000000000000005f5260045ffd5b604051613aaf816130b1565b600281526040366020830137613b85613b52613b0b7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614a21565b7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614a66565b7f000000000000000000000000000000000000000000000000000000000000000090613b7e8285613387565b5282613387565b51670de0b6b3a764000090810390811161133c57613bc37f000000000000000000000000000000000000000000000000000000000000000083613387565b5290565b90670429d069189e00009182810292818404149015171561133c57565b906127109182810292818404149015171561133c57565b8181029291811591840414171561133c57565b8115612710570490565b9190820180921161133c57565b90670de0b6b3a764000090818103613c3c57505090565b671bc16d674ec800008103613c575750508061343f91613cb0565b673782dace9d9000008103613c7b575050613c758161343f92613cb0565b80613cb0565b613c8591926140ea565b906001613c9183613be4565b915f1983010401901515026001810180911161133c5761343f91613c18565b90613cba91613bfb565b6001670de0b6b3a76400005f19830104019015150290565b60ff8114613d265760ff811690601f8211613cfe5760405191613cf483613106565b8252602082015290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040515f815f5491613d3883613308565b80835292602090600190818116908115613dc15750600114613d63575b505061343f92500382613122565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b828410613da9575061343f9450505081016020015f80613d55565b85548785018301529485019486945092810192613d8e565b90506020935061343f9592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f80613d55565b60ff8114613e265760ff811690601f8211613cfe5760405191613cf483613106565b506040515f81600191600154613e3b81613308565b8084529360209160018116908115613dc15750600114613e6357505061343f92500382613122565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b828410613eaa575061343f9450505081016020015f80613d55565b85548785018301529485019486945092810192613e8f565b670de0b6b3a764000091808303613ed95750905090565b8290671bc16d674ec800008103613ef6575050806139c691613bfb565b673782dace9d9000008103613f1a5750613f13826139c693613bfb565b0480613bfb565b9050613f25916140ea565b613f2e81613be4565b60015f1993848301040190151502906001820180831161133c57811015613f56575050505f90565b030190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411613fdf579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa1561060b575f5173ffffffffffffffffffffffffffffffffffffffff811615613fd557905f905f90565b505f906001905f90565b5050505f9160039190565b60048110156132db5780613ffc575050565b6001810361402c577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b6002810361406057507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b60031461406a5750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9080156126bd57670de0b6b3a76400009182810292818404149015171561133c576001905f19830104019015150290565b8015612710576ec097ce7bc90715b34b9f10000000000590565b8115612710570590565b908015614a13578115614a0d578160ff1c6149e557770bce5086492111aea88f4bb1ca6bcf584181ea8059f765328110156149bd5781670c7d713b49da000012806149ac575b1561464957670de0b6b3a7640000916ec097ce7bc90715b34b9f100000000090614183908402828101907fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f0000000000183026140e0565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b918082818507020592050201670de0b6b3a7640000905b057ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc00008181131580614636575b1561460e578190821215806145fb575b156145d3575f915f81126145c4575b506064906806f05b59d3b20000008112614561577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e0000000168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac62000000811215614528575b6856bc75e2d6310000008112156144ee575b682b5e3af16b188000008112156144b6575b6815af1d78b58c40000081121561447e575b680ad78ebc5ac6200000811215614447575b82811215614410575b6802b5e3af16b18800008112156143d9575b68015af1d78b58c400008112156143a2575b60028382800205056003848383020505600485848302050585600581868402050560068287830205056007838883020505906008848984020505926009858a8602050595600a868b8902050597600b878c8b02050599600c888d8d0205059b01010101010101010101010102050205905f1461343f5761343f906140c6565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c000084920192020590614323565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e78000084920192020590614311565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000849201920205906142ff565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000849201920205906142f6565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c00000849201920205906142e4565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e7800000849201920205906142d2565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf000000849201920205906142c0565b6e01855144814a7ff805980ff008400091507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e000000016142ae565b6803782dace9d900000081126145b1577ffffffffffffffffffffffffffffffffffffffffffffffffc87d25316270000000168056bc75e2d63100000826b1425982cf597cd205cef738092614299565b68056bc75e2d6310000082600192614299565b600192505f039050606461423d565b7fd4794efd000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c8000082131561422e565b7fa2f9f7e3000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c8000082131561421e565b81670de0b6b3a7640000925f91848112614996575b506064905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c000000000000082121561496b575b73011798004d755d3c8bc8e03204cf44619e00000082121561494a575b820290808302906e01855144814a7ff805980ff00840009081831215614927575b50506b02df0ab5a80a22c61ab5a70080821215614907575b50693f1fce3da636ea5cf850808212156148e7575b50690127fa27722cc06cc5e2808212156148c7575b5068280e60114edb805d03808212156148a7575b50680ebc5fb4174612111080821215614890575b506808f00f760a4b2db55d80821215614870575b506806f5f177578893793780821215614850575b506806248f33704b28660380821215614831575b506805c548670b9510e7ac80821215614812575b506147bf68056bc75e2d6310000091827ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf000008183019201026140e0565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b0105905f1461480d575f035b026141f2565b614807565b68056bc75e2d631000006756bc75e2d63100009202059101905f614783565b68056bc75e2d6310000067ad78ebc5ac6200009202059101905f61476f565b68056bc75e2d6310000068015af1d78b58c400009202059101905f61475b565b68056bc75e2d631000006802b5e3af16b18800009202059101905f614747565b68056bc75e2d63100000809202059101905f614733565b68056bc75e2d63100000680ad78ebc5ac62000009202059101905f61471f565b68056bc75e2d631000006815af1d78b58c4000009202059101905f61470b565b68056bc75e2d63100000682b5e3af16b188000009202059101905f6146f6565b68056bc75e2d631000006856bc75e2d6310000009202059101905f6146e1565b68ad78ebc5ac62000000925069021e19e0c9bab240000002059101905f806146c9565b906b1425982cf597cd205cef73806803782dace9d9000000910591016146a8565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b200000061468b565b90506149a291506140c6565b600190606461465e565b50670f43fc2c04ee00008212614130565b7fd8317311000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f022701e0000000000000000000000000000000000000000000000000000000005f5260045ffd5b50505f90565b5050670de0b6b3a764000090565b428211614a36575050670de0b6b3a764000090565b80421115614a0d5780420390670de0b6b3a764000080830292830414814214171561133c5761343f920390613c0e565b9190670de0b6b3a764000091828110801590614abf575b614ab8578015614ab2578382811115614aa25791614a9c920390613bfb565b04900390565b614aad920390613bfb565b040190565b50505090565b5091505090565b50818414614a7d56fea26469706673582212209e4fb2b2f58ca451fbb1ccd3091edb0dc3c888d67d9e60ec791f1bec06a724da64736f6c634300081b0033c2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b","opcodes":"PUSH2 0x120 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x468 JUMPI PUSH2 0x79F3 DUP1 CODESIZE SUB DUP1 PUSH2 0x1A DUP2 PUSH2 0x46C JUMP JUMPDEST SWAP3 DUP4 CODECOPY DUP2 ADD PUSH1 0xA0 DUP3 DUP3 SUB SLT PUSH2 0x468 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP2 SWAP1 DUP3 DUP2 AND DUP2 SUB PUSH2 0x468 JUMPI PUSH1 0x20 SWAP1 DUP2 DUP6 ADD MLOAD SWAP2 PUSH4 0xFFFFFFFF SWAP4 DUP5 DUP5 AND SWAP5 DUP6 DUP6 SUB PUSH2 0x468 JUMPI PUSH1 0x40 DUP9 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP6 SWAP1 DUP7 DUP2 GT PUSH2 0x468 JUMPI DUP4 PUSH2 0x79 SWAP2 DUP12 ADD PUSH2 0x491 JUMP JUMPDEST SWAP3 PUSH1 0x60 DUP11 ADD MLOAD DUP8 DUP2 GT PUSH2 0x468 JUMPI PUSH1 0x80 SWAP2 PUSH2 0x94 SWAP2 DUP13 ADD PUSH2 0x491 JUMP JUMPDEST SWAP10 ADD MLOAD SWAP8 DUP9 AND SWAP7 DUP8 DUP10 SUB PUSH2 0x468 JUMPI PUSH2 0x5C40 SWAP6 PUSH2 0xB1 DUP7 DUP9 ADD PUSH2 0x46C JUMP JUMPDEST SWAP7 DUP1 DUP9 MSTORE PUSH2 0x1DB3 DUP8 DUP10 ADD CODECOPY ADDRESS PUSH1 0x80 MSTORE PUSH1 0xA0 MSTORE TIMESTAMP ADD SWAP1 DUP2 TIMESTAMP GT PUSH2 0x454 JUMPI DUP3 DUP3 GT PUSH2 0x445 JUMPI PUSH1 0xC0 MSTORE AND PUSH1 0xE0 MSTORE DUP3 MLOAD SWAP5 DUP5 DUP7 GT PUSH2 0x3A3 JUMPI PUSH1 0x3 SWAP6 PUSH2 0xF2 DUP8 SLOAD PUSH2 0x4E2 JUMP JUMPDEST SWAP5 PUSH1 0x1F SWAP6 DUP7 DUP2 GT PUSH2 0x419 JUMPI JUMPDEST POP DUP5 SWAP1 DUP7 DUP4 GT PUSH1 0x1 EQ PUSH2 0x3B7 JUMPI PUSH2 0x12C SWAP3 SWAP2 PUSH0 SWAP2 DUP4 PUSH2 0x245 JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR SWAP1 JUMP JUMPDEST DUP7 SSTORE JUMPDEST DUP2 MLOAD DUP6 DUP2 GT PUSH2 0x3A3 JUMPI PUSH1 0x4 SWAP3 PUSH2 0x145 DUP5 SLOAD PUSH2 0x4E2 JUMP JUMPDEST DUP7 DUP2 GT PUSH2 0x36D JUMPI JUMPDEST POP DUP5 SWAP1 DUP7 DUP4 GT PUSH1 0x1 EQ PUSH2 0x30B JUMPI PUSH2 0x17A SWAP3 SWAP2 PUSH0 SWAP2 DUP4 PUSH2 0x245 JUMPI POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR SWAP1 JUMP JUMPDEST DUP3 SSTORE JUMPDEST ISZERO PUSH2 0x2FD JUMPI PUSH2 0x100 SWAP6 DUP7 MSTORE DUP7 MLOAD SWAP4 DUP5 GT PUSH2 0x2EA JUMPI POP PUSH1 0x5 SWAP4 PUSH2 0x19F DUP6 SLOAD PUSH2 0x4E2 JUMP JUMPDEST DUP4 DUP2 GT PUSH2 0x2B6 JUMPI JUMPDEST POP DUP2 SWAP3 DUP5 GT PUSH1 0x1 EQ PUSH2 0x250 JUMPI POP POP DUP2 SWAP1 PUSH2 0x1D7 SWAP4 SWAP5 SWAP6 PUSH0 SWAP3 PUSH2 0x245 JUMPI POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR SWAP1 JUMP JUMPDEST SWAP1 SSTORE JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1882 SWAP2 DUP3 PUSH2 0x531 DUP4 CODECOPY PUSH1 0x80 MLOAD DUP3 PUSH2 0x1741 ADD MSTORE PUSH1 0xA0 MLOAD DUP3 DUP2 DUP2 PUSH2 0x21B ADD MSTORE DUP2 DUP2 PUSH2 0x2DD ADD MSTORE DUP2 DUP2 PUSH2 0x71B ADD MSTORE DUP2 DUP2 PUSH2 0x963 ADD MSTORE DUP2 DUP2 PUSH2 0xA8C ADD MSTORE PUSH2 0x124A ADD MSTORE PUSH1 0xC0 MLOAD DUP3 PUSH2 0x370 ADD MSTORE PUSH1 0xE0 MLOAD DUP3 DUP2 DUP2 PUSH2 0x129 ADD MSTORE PUSH2 0x17A9 ADD MSTORE MLOAD DUP2 DUP2 DUP2 PUSH2 0x1A3 ADD MSTORE PUSH2 0x758 ADD MSTORE RETURN JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x118 JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x1F NOT DUP5 AND SWAP7 DUP6 PUSH0 MSTORE DUP4 PUSH0 KECCAK256 SWAP4 PUSH0 SWAP1 JUMPDEST DUP10 DUP3 LT PUSH2 0x29E JUMPI POP POP DUP5 PUSH1 0x1 SWAP7 SWAP8 SWAP9 LT PUSH2 0x285 JUMPI JUMPDEST POP POP POP POP DUP2 SHL ADD SWAP1 SSTORE PUSH2 0x1DA JUMP JUMPDEST ADD MLOAD SWAP1 PUSH1 0xF8 DUP5 PUSH0 NOT SWAP3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 DUP1 PUSH2 0x277 JUMP JUMPDEST DUP1 PUSH1 0x1 DUP6 SWAP8 DUP3 SWAP5 SWAP7 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP7 ADD SWAP4 ADD SWAP1 PUSH2 0x262 JUMP JUMPDEST PUSH2 0x2DB SWAP1 DUP7 PUSH0 MSTORE DUP4 PUSH0 KECCAK256 DUP6 DUP1 DUP9 ADD DUP10 SHR DUP3 ADD SWAP3 DUP7 DUP10 LT PUSH2 0x2E1 JUMPI JUMPDEST ADD DUP9 SHR ADD SWAP1 PUSH2 0x51A JUMP JUMPDEST PUSH0 PUSH2 0x1A7 JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x2D1 JUMP JUMPDEST PUSH1 0x41 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x307417B PUSH1 0xE0 SHL PUSH0 SWAP1 DUP2 MSTORE REVERT JUMPDEST SWAP1 PUSH1 0x1F NOT DUP4 AND SWAP2 DUP6 PUSH0 MSTORE DUP7 PUSH0 KECCAK256 SWAP3 PUSH0 JUMPDEST DUP9 DUP3 DUP3 LT PUSH2 0x357 JUMPI POP POP SWAP1 DUP5 PUSH1 0x1 SWAP6 SWAP5 SWAP4 SWAP3 LT PUSH2 0x340 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD DUP3 SSTORE PUSH2 0x17D JUMP JUMPDEST ADD MLOAD PUSH0 NOT DUP4 DUP12 SHL PUSH1 0xF8 AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x333 JUMP JUMPDEST PUSH1 0x1 DUP6 SWAP7 DUP3 SWAP4 SWAP7 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP6 ADD SWAP4 ADD PUSH2 0x31B JUMP JUMPDEST PUSH2 0x394 SWAP1 DUP6 PUSH0 MSTORE DUP7 PUSH0 KECCAK256 DUP9 DUP1 DUP7 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP10 DUP8 LT PUSH2 0x39A JUMPI JUMPDEST ADD PUSH1 0x5 SHR ADD SWAP1 PUSH2 0x51A JUMP JUMPDEST PUSH0 PUSH2 0x14D JUMP JUMPDEST SWAP3 POP DUP2 SWAP3 PUSH2 0x389 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1F NOT DUP4 AND SWAP2 DUP10 PUSH0 MSTORE DUP7 PUSH0 KECCAK256 SWAP3 PUSH0 JUMPDEST DUP9 DUP3 DUP3 LT PUSH2 0x403 JUMPI POP POP SWAP1 DUP5 PUSH1 0x1 SWAP6 SWAP5 SWAP4 SWAP3 LT PUSH2 0x3EC JUMPI JUMPDEST POP POP POP DUP2 SHL ADD DUP7 SSTORE PUSH2 0x12F JUMP JUMPDEST ADD MLOAD PUSH0 NOT DUP4 DUP12 SHL PUSH1 0xF8 AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x3DF JUMP JUMPDEST PUSH1 0x1 DUP6 SWAP7 DUP3 SWAP4 SWAP7 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP6 ADD SWAP4 ADD PUSH2 0x3C7 JUMP JUMPDEST PUSH2 0x43F SWAP1 DUP10 PUSH0 MSTORE DUP7 PUSH0 KECCAK256 DUP9 DUP1 DUP7 ADD PUSH1 0x5 SHR DUP3 ADD SWAP3 DUP10 DUP8 LT PUSH2 0x39A JUMPI ADD PUSH1 0x5 SHR ADD SWAP1 PUSH2 0x51A JUMP JUMPDEST PUSH0 PUSH2 0xFE JUMP JUMPDEST PUSH4 0x68755A11 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x3A3 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x468 JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x3A3 JUMPI PUSH2 0x4C0 PUSH1 0x1F DUP4 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD PUSH2 0x46C JUMP JUMPDEST SWAP3 DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x468 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x510 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x4FC JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x4F1 JUMP JUMPDEST DUP2 DUP2 LT PUSH2 0x525 JUMPI POP POP JUMP JUMPDEST PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x51A JUMP INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH0 CALLDATALOAD DUP1 PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x193AD50F EQ PUSH2 0x1390 JUMPI DUP2 PUSH4 0x2F2770DB EQ PUSH2 0x11C9 JUMPI POP DUP1 PUSH4 0x3F819B6F EQ PUSH2 0x118B JUMPI DUP1 PUSH4 0x44F6FEC7 EQ PUSH2 0x10D1 JUMPI DUP1 PUSH4 0x53A72F7E EQ PUSH2 0xF73 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0xE95 JUMPI DUP1 PUSH4 0x6634B753 EQ PUSH2 0xE49 JUMPI DUP1 PUSH4 0x673A2A1F EQ PUSH2 0xDAA JUMPI DUP1 PUSH4 0x6C57F5A9 EQ PUSH2 0xD88 JUMPI DUP1 PUSH4 0x74B3DAFE EQ PUSH2 0x394 JUMPI DUP1 PUSH4 0x78DA80CB EQ PUSH2 0x353 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x301 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x2B0 JUMPI DUP1 PUSH4 0x8EEC5D70 EQ PUSH2 0x292 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x1C7 JUMPI DUP1 PUSH4 0xAF905D15 EQ PUSH2 0x176 JUMPI DUP1 PUSH4 0xDB035EBC EQ PUSH2 0x14D JUMPI DUP1 PUSH4 0xE9D56E19 EQ PUSH2 0x10C JUMPI PUSH4 0xEC888061 EQ PUSH2 0xEE JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x20 PUSH2 0x168 PUSH2 0x17A7 JUMP JUMPDEST PUSH4 0xFFFFFFFF PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x287 JUMPI PUSH1 0x20 SWAP4 SWAP3 PUSH2 0x258 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x279 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x280 JUMPI JUMPDEST PUSH2 0x271 DUP2 DUP4 PUSH2 0x1420 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x177B JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x24E JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x267 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP6 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x109 JUMPI PUSH1 0x20 PUSH2 0x34B DUP4 PUSH2 0x1716 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0xBE5 JUMPI PUSH2 0x1C0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xBE5 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xBE5 JUMPI PUSH2 0x3C7 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x14DA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xBE5 JUMPI PUSH2 0x3E7 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x14DA JUMP JUMPDEST SWAP2 PUSH2 0x140 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC CALLDATASIZE ADD SLT PUSH2 0xBE5 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x140 DUP4 ADD DUP4 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xB03 JUMPI PUSH1 0x40 MSTORE PUSH1 0x44 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xBE5 JUMPI DUP4 MSTORE PUSH1 0x64 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xBE5 JUMPI PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x84 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xBE5 JUMPI PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0xA4 CALLDATALOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0xC4 CALLDATALOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xE4 CALLDATALOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x104 CALLDATALOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x124 CALLDATALOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x144 CALLDATALOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH2 0x164 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0xBE5 JUMPI PUSH2 0x120 DUP5 ADD MSTORE PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH2 0xD60 JUMPI PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 MLOAD AND ISZERO PUSH2 0xD38 JUMPI PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH1 0x60 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x60 DUP8 ADD GT OR PUSH2 0xB03 JUMPI PUSH1 0x60 DUP6 ADD PUSH1 0x40 MSTORE PUSH0 DUP6 MSTORE PUSH0 PUSH1 0x20 DUP7 ADD MSTORE PUSH0 PUSH1 0x40 DUP7 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0xE0 DUP5 ADD MLOAD PUSH2 0x100 DUP6 ADD MLOAD SWAP1 PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x80 DUP8 ADD MLOAD PUSH1 0xA0 DUP9 ADD MLOAD SWAP2 PUSH1 0xC0 DUP10 ADD MLOAD SWAP1 PUSH7 0x2386F26FC10000 DUP1 DUP3 LT SWAP1 DUP2 ISZERO PUSH2 0xD2E JUMPI JUMPDEST DUP2 ISZERO PUSH2 0xD24 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0xD1A JUMPI JUMPDEST POP PUSH2 0xCF2 JUMPI PUSH2 0x5F8 PUSH8 0xDE0B6B3A7640000 SWAP4 DUP5 SWAP3 PUSH2 0x16BC JUMP JUMPDEST EQ SWAP3 DUP4 ISZERO SWAP4 PUSH2 0xCDD JUMPI JUMPDEST POP POP POP PUSH2 0xCB5 JUMPI DUP1 TIMESTAMP GT PUSH0 EQ PUSH2 0xCB0 JUMPI POP TIMESTAMP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC82 JUMPI POP POP PUSH2 0x646 SWAP2 PUSH2 0x790 PUSH2 0x658 PUSH2 0x79E SWAP4 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 PUSH2 0x1E0 PUSH1 0x20 DUP8 ADD MSTORE PUSH2 0x200 DUP7 ADD SWAP1 PUSH2 0x13DF JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT DUP6 DUP4 SUB ADD PUSH1 0x40 DUP7 ADD MSTORE PUSH2 0x13DF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP9 ADD MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP9 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x60 DUP8 ADD MLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x80 DUP8 ADD MLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0xA0 DUP8 ADD MLOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH1 0xC0 DUP8 ADD MLOAD PUSH2 0x120 DUP5 ADD MSTORE PUSH1 0xE0 DUP8 ADD MLOAD PUSH2 0x140 DUP5 ADD MSTORE PUSH2 0x100 DUP8 ADD MLOAD PUSH2 0x160 DUP5 ADD MSTORE PUSH2 0x120 DUP8 ADD MLOAD ISZERO ISZERO PUSH2 0x180 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0x1A0 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0x1C0 DUP5 ADD MSTORE PUSH1 0x1F NOT DUP4 DUP3 SUB ADD PUSH2 0x1E0 DUP5 ADD MSTORE PUSH2 0x157E JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x1420 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x7D0 DUP3 PUSH1 0x20 DUP1 DUP3 ADD SWAP4 PUSH2 0x7B5 DUP6 PUSH2 0x1630 JUMP JUMPDEST SWAP1 DUP1 MLOAD SWAP3 DUP4 SWAP2 ADD DUP3 MCOPY ADD PUSH0 DUP2 MSTORE SUB PUSH1 0x1F NOT DUP2 ADD DUP5 MSTORE DUP4 PUSH2 0x1420 JUMP JUMPDEST PUSH2 0x7DC PUSH2 0x1A4 CALLDATALOAD PUSH2 0x1812 JUMP JUMPDEST SWAP1 DUP3 MLOAD ISZERO PUSH2 0xC5A JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 MLOAD SWAP1 PUSH0 CREATE2 AND SWAP2 DUP3 ISZERO PUSH2 0xC32 JUMPI PUSH2 0x80E PUSH2 0x17DE JUMP JUMPDEST DUP3 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH1 0xFF NOT DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x1 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0xB03 JUMPI DUP1 PUSH1 0x1 PUSH2 0x848 SWAP3 ADD PUSH1 0x1 SSTORE PUSH2 0x16E1 JUMP JUMPDEST DUP2 SLOAD SWAP1 PUSH1 0x3 SHL SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 SSTORE DUP3 PUSH32 0x83A48FBCFC991335314E74D0496AAB6A1987E992DDC85DDDBCC4D6DD6EF2E9FC PUSH0 DUP1 LOG2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP2 PUSH1 0x20 DUP5 ADD MLOAD AND SWAP3 ADD MLOAD AND DUP1 DUP3 DUP6 PUSH32 0x6B01C8C0B16CF8E7A1A9158019B5FE7D40B415D756710EB0FDCB577701DFEE84 PUSH0 DUP1 LOG4 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x8E9 DUP4 PUSH2 0x1404 JUMP JUMPDEST PUSH1 0x2 DUP4 MSTORE PUSH0 JUMPDEST PUSH1 0x40 DUP2 LT PUSH2 0xC1B JUMPI POP DUP2 DUP2 LT ISZERO PUSH2 0xC16 JUMPI SWAP1 JUMPDEST DUP3 MLOAD ISZERO PUSH2 0xBE9 JUMPI PUSH1 0x20 DUP4 ADD MLOAD SWAP2 DUP4 MLOAD PUSH1 0x1 LT ISZERO PUSH2 0xBE9 JUMPI PUSH1 0x40 DUP5 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND SWAP1 MSTORE AND SWAP1 MSTORE PUSH2 0x943 PUSH2 0x14F8 JUMP JUMPDEST PUSH2 0x94B PUSH2 0x17A7 JUMP JUMPDEST SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xBE5 JUMPI SWAP5 SWAP1 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP3 PUSH32 0xEEEC802F00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH2 0x1A4 DUP5 ADD DUP8 PUSH1 0x4 DUP7 ADD MSTORE PUSH2 0x1A0 PUSH1 0x24 DUP7 ADD MSTORE DUP4 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH2 0x1C4 DUP7 ADD SWAP5 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0xB3B JUMPI POP POP POP PUSH0 SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP7 SWAP6 SWAP5 PUSH4 0xFFFFFFFF PUSH2 0xA72 SWAP6 PUSH2 0x184 CALLDATALOAD PUSH1 0x44 DUP11 ADD MSTORE AND PUSH1 0x64 DUP9 ADD MSTORE DUP9 PUSH1 0x84 DUP9 ADD MSTORE DUP3 DUP2 MLOAD AND PUSH1 0xA4 DUP9 ADD MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0xC4 DUP9 ADD MSTORE ADD MLOAD AND PUSH1 0xE4 DUP6 ADD MSTORE DUP8 PUSH2 0x104 DUP6 ADD MSTORE PUSH2 0x124 DUP5 ADD SWAP1 PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SUB DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xB30 JUMPI PUSH2 0xAE7 JUMPI JUMPDEST PUSH1 0x20 SWAP3 POP PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xB03 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x40 MSTORE PUSH0 PUSH2 0xAB9 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP2 DUP1 SWAP8 SWAP7 POP SWAP5 SWAP1 SWAP3 SWAP4 SWAP5 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD AND DUP3 MSTORE PUSH1 0x20 DUP2 ADD MLOAD SWAP1 PUSH1 0x2 DUP3 LT ISZERO PUSH2 0xBB8 JUMPI DUP3 PUSH1 0x60 PUSH1 0x80 SWAP3 PUSH1 0x20 SWAP5 DUP6 PUSH1 0x1 SWAP8 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH1 0x60 DUP3 ADD MSTORE ADD SWAP8 ADD SWAP2 ADD SWAP2 DUP10 SWAP6 SWAP7 SWAP5 SWAP4 SWAP3 PUSH2 0x9D9 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x902 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH2 0xC26 PUSH2 0x14F8 JUMP JUMPDEST DUP3 DUP3 DUP8 ADD ADD MSTORE ADD PUSH2 0x8EF JUMP JUMPDEST PUSH32 0x741752C200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x4CA249DC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x7D0356F300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x615 JUMP JUMPDEST PUSH32 0x39CF114E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0xCE8 SWAP3 SWAP4 POP PUSH2 0x16BC JUMP JUMPDEST EQ ISZERO PUSH0 DUP1 DUP1 PUSH2 0x602 JUMP JUMPDEST PUSH32 0xBD39358300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP DUP3 LT PUSH0 PUSH2 0x5DF JUMP JUMPDEST DUP1 DUP7 LT SWAP2 POP PUSH2 0x5D8 JUMP JUMPDEST DUP1 DUP6 LT SWAP2 POP PUSH2 0x5D1 JUMP JUMPDEST PUSH32 0x49E27CFF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xBE5 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xBE5 JUMPI PUSH1 0x20 PUSH1 0xFF PUSH1 0x2 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xBE5 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xBE5 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD SWAP3 DUP4 DUP3 MSTORE PUSH1 0x20 DUP1 SWAP3 ADD SWAP4 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP3 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xE1E JUMPI PUSH2 0xE1A DUP7 PUSH2 0xE0E DUP2 DUP11 SUB DUP3 PUSH2 0x1420 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x1489 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP5 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 SWAP4 DUP4 ADD SWAP4 SWAP1 DUP4 ADD SWAP1 PUSH2 0xDF7 JUMP JUMPDEST CALLVALUE PUSH2 0xBE5 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xBE5 JUMPI PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0xBE5 JUMPI PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xBE5 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xBE5 JUMPI PUSH1 0x40 MLOAD PUSH1 0x4 SLOAD PUSH0 DUP3 PUSH2 0xEB6 DUP4 PUSH2 0x152D JUMP JUMPDEST SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP1 DUP6 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0xF53 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xEF8 JUMPI JUMPDEST POP PUSH2 0xEE4 SWAP3 POP SUB DUP4 PUSH2 0x1420 JUMP JUMPDEST PUSH2 0xE1A PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x13DF JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x4 PUSH0 MSTORE PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0xF3B JUMPI POP POP PUSH2 0xEE4 SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0xED7 JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0xF24 JUMP JUMPDEST PUSH1 0xFF NOT AND DUP6 DUP3 ADD MSTORE PUSH2 0xEE4 SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0xED7 SWAP1 POP JUMP JUMPDEST CALLVALUE PUSH2 0xBE5 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xBE5 JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x24 DUP1 CALLDATALOAD PUSH1 0x1 SWAP3 PUSH1 0x1 SLOAD DUP1 DUP3 LT ISZERO PUSH2 0x10A9 JUMPI DUP1 PUSH2 0xFA4 DUP5 DUP5 PUSH2 0x16BC JUMP JUMPDEST GT PUSH2 0x1068 JUMPI JUMPDEST POP PUSH2 0xFB4 DUP3 PUSH2 0x16C9 JUMP JUMPDEST SWAP3 PUSH2 0xFC2 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1420 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH2 0xFCE DUP4 PUSH2 0x16C9 JUMP JUMPDEST SWAP2 PUSH1 0x1F NOT PUSH1 0x20 SWAP4 ADD CALLDATASIZE PUSH1 0x20 DUP8 ADD CALLDATACOPY PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0xFF3 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xE1A DUP9 DUP3 PUSH2 0x1489 JUMP JUMPDEST PUSH2 0x1005 PUSH2 0x1000 DUP3 DUP5 PUSH2 0x16BC JUMP JUMPDEST PUSH2 0x16E1 JUMP JUMPDEST SWAP1 SLOAD SWAP1 DUP8 MLOAD DUP4 LT ISZERO PUSH2 0x103C JUMPI PUSH1 0x3 SHL SHR PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x5 DUP3 SWAP1 SHL DUP8 ADD DUP6 ADD MSTORE DUP7 ADD PUSH2 0xFDE JUMP JUMPDEST DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 SUB SWAP1 DUP2 GT PUSH2 0x107C JUMPI SWAP1 DUP5 PUSH2 0xFAA JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x4E23D03500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xBE5 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xBE5 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xBE5 JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0xBE5 JUMPI PUSH1 0x55 PUSH1 0xB PUSH2 0x1119 PUSH1 0x20 SWAP4 CALLDATASIZE SWAP1 PUSH1 0x24 DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP2 ADD PUSH2 0x1443 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1149 DUP2 DUP7 DUP1 DUP3 ADD SWAP5 PUSH2 0x112E DUP7 PUSH2 0x1630 JUMP JUMPDEST SWAP1 DUP1 MLOAD SWAP3 DUP4 SWAP2 ADD DUP3 MCOPY ADD PUSH0 DUP2 MSTORE SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x1420 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 PUSH2 0x1157 PUSH1 0x24 CALLDATALOAD PUSH2 0x1812 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH1 0x40 DUP4 ADD MSTORE DUP5 DUP3 ADD MSTORE ADDRESS DUP2 MSTORE ADD PUSH1 0xFF DUP2 MSTORE8 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xBE5 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xBE5 JUMPI PUSH2 0xE1A PUSH1 0x40 MLOAD PUSH2 0x11B5 DUP2 PUSH2 0x11AE DUP2 PUSH2 0x157E JUMP JUMPDEST SUB DUP3 PUSH2 0x1420 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x13DF JUMP JUMPDEST CALLVALUE PUSH2 0xBE5 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xBE5 JUMPI PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x1204 SWAP2 AND PUSH2 0x1716 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xB30 JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x136E JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xB30 JUMPI PUSH0 SWAP3 PUSH2 0x1337 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x130F JUMPI PUSH2 0x12DC PUSH2 0x17DE JUMP JUMPDEST PUSH1 0x1 PUSH1 0xFF NOT PUSH1 0x2 SLOAD AND OR PUSH1 0x2 SSTORE PUSH32 0x432ACBFD662DBB5D8B378384A67159B47CA9D0F1B79F97CF64CF8585FA362D50 PUSH0 DUP1 LOG1 STOP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1367 JUMPI JUMPDEST PUSH2 0x134E DUP2 DUP4 PUSH2 0x1420 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xBE5 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0xBE5 JUMPI DUP2 DUP1 PUSH2 0x12CD JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1344 JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x1389 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x280 JUMPI PUSH2 0x271 DUP2 DUP4 PUSH2 0x1420 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x127C JUMP JUMPDEST CALLVALUE PUSH2 0xBE5 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xBE5 JUMPI PUSH1 0x80 PUSH2 0x13AA PUSH2 0x14F8 JUMP JUMPDEST PUSH2 0x13DD PUSH1 0x40 MLOAD DUP1 SWAP3 PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST RETURN JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xB03 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xB03 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xB03 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x146D PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP5 ADD AND ADD DUP5 PUSH2 0x1420 JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0xBE5 JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x14B0 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x14A2 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0xBE5 JUMPI DUP2 PUSH1 0x20 PUSH2 0x14F5 SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0x1443 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0x80 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xB03 JUMPI PUSH1 0x40 MSTORE PUSH0 PUSH1 0x60 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x1574 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x1547 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x153C JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH0 SWAP3 SWAP2 PUSH2 0x158D DUP3 PUSH2 0x152D JUMP JUMPDEST DUP1 DUP3 MSTORE SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x160A JUMPI POP PUSH1 0x1 EQ PUSH2 0x15B0 JUMPI JUMPDEST POP POP POP POP JUMP JUMPDEST SWAP3 SWAP4 SWAP5 POP PUSH1 0x5 PUSH0 MSTORE PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 SWAP3 PUSH0 SWAP4 JUMPDEST DUP6 DUP6 LT PUSH2 0x15F7 JUMPI POP POP POP PUSH1 0x20 SWAP3 POP ADD ADD SWAP1 PUSH0 DUP1 DUP1 DUP1 PUSH2 0x15AA JUMP JUMPDEST DUP1 SLOAD DUP6 DUP6 ADD DUP5 ADD MSTORE SWAP4 DUP3 ADD SWAP4 DUP2 ADD PUSH2 0x15DD JUMP JUMPDEST SWAP2 POP POP PUSH1 0x20 SWAP5 SWAP6 POP PUSH1 0xFF NOT SWAP2 POP SWAP3 SWAP2 SWAP3 AND DUP4 DUP4 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL ADD ADD SWAP1 PUSH0 DUP1 DUP1 DUP1 PUSH2 0x15AA JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH0 SWAP3 SWAP2 PUSH2 0x163F DUP3 PUSH2 0x152D JUMP JUMPDEST SWAP2 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x16A9 JUMPI POP PUSH1 0x1 EQ PUSH2 0x165A JUMPI POP POP POP JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 POP PUSH1 0x3 PUSH0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP1 PUSH0 SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x1696 JUMPI POP POP POP ADD SWAP1 JUMP JUMPDEST DUP2 DUP2 PUSH1 0x20 SWAP3 SLOAD DUP6 DUP8 ADD MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x1688 JUMP JUMPDEST PUSH1 0xFF NOT AND DUP4 MSTORE POP POP DUP2 ISZERO ISZERO SWAP1 SWAP2 MUL ADD SWAP2 POP JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x107C JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xB03 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 LT ISZERO PUSH2 0xBE9 JUMPI PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x1775 DUP2 PUSH2 0x1404 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xBE5 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xBE5 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH4 0xFFFFFFFF DUP2 AND TIMESTAMP LT ISZERO PUSH2 0x17D9 JUMPI SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x2 SLOAD AND PUSH2 0x17EA JUMPI JUMP JUMPDEST PUSH32 0x75884CDA00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 CALLER DUP4 MSTORE CHAINID PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x60 DUP2 MSTORE PUSH1 0x80 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xB03 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 STOP PUSH14 0x1DE6F6076AEAC96E8282C9BACC25 PUSH13 0x904818FA6BB6450AE37456BC2B PUSH23 0x5864736F6C634300081B003361044060405234610D1A57 PUSH2 0x5C40 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x1E DUP3 PUSH2 0x440 PUSH2 0xD54 JUMP JUMPDEST PUSH2 0x440 CODECOPY DUP1 PUSH2 0x1E0 DUP2 SLT PUSH2 0xD1A JUMPI PUSH2 0x440 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0xD1A JUMPI PUSH2 0x51 SWAP1 DUP3 PUSH2 0x440 ADD SWAP1 PUSH2 0x440 ADD PUSH2 0xD77 JUMP JUMPDEST PUSH2 0x460 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0xD1A JUMPI PUSH2 0x79 PUSH2 0x140 SWAP2 DUP5 PUSH2 0x440 ADD SWAP1 PUSH2 0x440 ADD PUSH2 0xD77 JUMP JUMPDEST SWAP4 PUSH1 0x3F NOT ADD SLT PUSH2 0xD1A JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x140 DUP4 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP5 DUP3 LT OR PUSH2 0xB39 JUMPI PUSH1 0x40 MSTORE PUSH2 0xAC PUSH2 0x480 PUSH2 0xDCC JUMP JUMPDEST DUP4 MSTORE PUSH2 0xB9 PUSH2 0x4A0 PUSH2 0xDCC JUMP JUMPDEST PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0xC9 PUSH2 0x4C0 PUSH2 0xDCC JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH2 0x4E0 MLOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH2 0x500 MLOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH2 0x520 MLOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x540 MLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x560 MLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x580 MLOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH2 0x5A0 MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0xD1A JUMPI PUSH2 0x120 DUP5 ADD MSTORE PUSH2 0x5C0 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0xD1A JUMPI PUSH2 0x137 PUSH2 0x5E0 PUSH2 0xDCC JUMP JUMPDEST PUSH2 0x600 MLOAD SWAP1 SWAP3 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0xD1A JUMPI PUSH2 0x15E SWAP2 PUSH2 0x440 ADD SWAP1 PUSH2 0x440 ADD PUSH2 0xD77 JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB DUP6 MLOAD AND SWAP6 PUSH1 0x60 PUSH1 0x80 PUSH1 0x40 MLOAD PUSH2 0x17A DUP2 PUSH2 0xD1E JUMP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE PUSH0 PUSH1 0x40 DUP3 ADD MSTORE DUP3 DUP1 DUP3 ADD MSTORE ADD MSTORE PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB PUSH1 0x20 DUP8 ADD MLOAD AND PUSH1 0x1 DUP1 PUSH1 0xA0 SHL SUB PUSH1 0x40 DUP9 ADD MLOAD AND GT PUSH0 EQ PUSH2 0xD11 JUMPI PUSH0 SWAP5 PUSH1 0x1 JUMPDEST PUSH1 0x40 MLOAD SWAP7 PUSH2 0x1C3 DUP9 PUSH2 0xD39 JUMP JUMPDEST PUSH1 0x2 DUP9 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP11 ADD CALLDATACOPY PUSH2 0x1E1 PUSH1 0xFF PUSH1 0x60 DUP12 ADD MLOAD SWAP3 AND DUP10 PUSH2 0xDE0 JUMP JUMPDEST MSTORE PUSH2 0x1F4 PUSH1 0xFF PUSH1 0x80 DUP11 ADD MLOAD SWAP3 AND DUP9 PUSH2 0xDE0 JUMP JUMPDEST MSTORE PUSH1 0x40 MLOAD SWAP6 PUSH2 0x202 DUP8 PUSH2 0xD1E JUMP JUMPDEST DUP2 DUP8 MSTORE DUP3 PUSH1 0x20 DUP9 ADD MSTORE PUSH1 0x2 PUSH1 0x40 DUP9 ADD MSTORE PUSH1 0x60 DUP8 ADD MSTORE DUP4 PUSH1 0x80 DUP8 ADD MSTORE PUSH1 0x40 MLOAD PUSH1 0x40 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0xB39 JUMPI PUSH1 0x40 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD PUSH1 0x31 PUSH1 0xF8 SHL DUP2 MSTORE PUSH2 0x250 DUP4 PUSH2 0xE48 JUMP JUMPDEST PUSH2 0x120 MSTORE PUSH2 0x25D DUP3 PUSH2 0xFCB JUMP JUMPDEST PUSH2 0x140 MSTORE DUP3 MLOAD PUSH1 0x20 DUP5 ADD KECCAK256 SWAP2 DUP3 PUSH1 0xE0 MSTORE MLOAD SWAP1 KECCAK256 DUP1 PUSH2 0x100 MSTORE CHAINID PUSH1 0xA0 MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP5 MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0xB39 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 PUSH1 0x80 MSTORE ADDRESS PUSH1 0xC0 MSTORE PUSH2 0x160 DUP4 SWAP1 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0xB39 JUMPI PUSH1 0x3 SLOAD SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0xD07 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0xB1B JUMPI DUP2 PUSH1 0x1F DUP5 SWAP4 GT PUSH2 0xCAF JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0xC3A JUMPI PUSH0 SWAP3 PUSH2 0xC2F JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x3 SSTORE JUMPDEST DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0xB39 JUMPI PUSH1 0x4 SLOAD SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0xC25 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0xB1B JUMPI DUP2 PUSH1 0x1F DUP5 SWAP4 GT PUSH2 0xBCD JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0xB58 JUMPI PUSH0 SWAP3 PUSH2 0xB4D JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x4 SSTORE JUMPDEST PUSH2 0x180 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0xB39 JUMPI PUSH1 0x5 SLOAD SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0xB2F JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0xB1B JUMPI DUP2 PUSH1 0x1F DUP5 SWAP4 GT PUSH2 0xACD JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0xA45 JUMPI PUSH0 SWAP3 PUSH2 0xA3A JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x5 SSTORE JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD DUP1 PUSH2 0x1A0 MSTORE PUSH1 0x60 DUP4 ADD MLOAD MLOAD SUB PUSH2 0xA2B JUMPI PUSH0 SWAP3 PUSH0 JUMPDEST PUSH2 0x1A0 MLOAD PUSH1 0xFF DUP3 AND LT ISZERO PUSH2 0x53D JUMPI PUSH2 0x449 PUSH1 0xFF DUP3 AND PUSH1 0x60 DUP7 ADD MLOAD PUSH2 0xDE0 JUMP JUMPDEST MLOAD SWAP5 PUSH7 0x2386F26FC10000 DUP7 LT PUSH2 0x52E JUMPI DUP6 PUSH2 0x463 SWAP2 PUSH2 0xE3B JUMP JUMPDEST SWAP5 PUSH1 0xFF DUP3 AND PUSH2 0x49A JUMPI PUSH2 0x1C0 MSTORE JUMPDEST PUSH1 0xFF DUP1 DUP3 AND EQ PUSH2 0x486 JUMPI PUSH1 0xFF AND PUSH1 0x1 ADD PUSH2 0x42A JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0xFF DUP3 AND PUSH1 0x1 SUB PUSH2 0x4AE JUMPI PUSH2 0x1E0 MSTORE PUSH2 0x471 JUMP JUMPDEST PUSH1 0xFF DUP3 AND PUSH1 0x2 SUB PUSH2 0x4C2 JUMPI PUSH2 0x200 MSTORE PUSH2 0x471 JUMP JUMPDEST PUSH1 0xFF DUP3 AND PUSH1 0x3 SUB PUSH2 0x4D6 JUMPI PUSH2 0x220 MSTORE PUSH2 0x471 JUMP JUMPDEST PUSH1 0xFF DUP3 AND PUSH1 0x4 SUB PUSH2 0x4EA JUMPI PUSH2 0x240 MSTORE PUSH2 0x471 JUMP JUMPDEST PUSH1 0xFF DUP3 AND PUSH1 0x5 SUB PUSH2 0x4FE JUMPI PUSH2 0x260 MSTORE PUSH2 0x471 JUMP JUMPDEST PUSH1 0xFF DUP3 AND PUSH1 0x6 SUB PUSH2 0x512 JUMPI PUSH2 0x280 MSTORE PUSH2 0x471 JUMP JUMPDEST PUSH1 0x7 PUSH1 0xFF DUP4 AND EQ PUSH2 0x524 JUMPI JUMPDEST POP PUSH2 0x471 JUMP JUMPDEST PUSH2 0x2A0 MSTORE PUSH0 PUSH2 0x51E JUMP JUMPDEST PUSH4 0xBD393583 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP DUP5 PUSH8 0xDE0B6B3A7640000 DUP6 SUB PUSH2 0x9CD JUMPI DUP1 ISZERO PUSH2 0xA18 JUMPI PUSH1 0x7 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT SWAP1 DUP2 AND SWAP1 SWAP2 SSTORE PUSH1 0x6 DUP1 SLOAD SWAP2 DUP3 AND DUP4 OR SWAP1 SSTORE PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 PUSH1 0xE0 DUP2 ADD MLOAD SWAP2 PUSH2 0x100 DUP3 ADD MLOAD SWAP3 PUSH1 0x60 DUP4 ADD MLOAD PUSH1 0x80 DUP5 ADD MLOAD SWAP1 PUSH1 0xA0 DUP6 ADD MLOAD SWAP2 PUSH1 0xC0 DUP7 ADD MLOAD SWAP2 PUSH7 0x2386F26FC10000 DUP1 DUP3 LT SWAP1 DUP2 ISZERO PUSH2 0xA0E JUMPI JUMPDEST DUP2 ISZERO PUSH2 0xA04 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0x9FA JUMPI JUMPDEST POP PUSH2 0x52E JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH2 0x5FC SWAP2 PUSH2 0xE3B JUMP JUMPDEST EQ SWAP2 DUP3 ISZERO SWAP3 PUSH2 0x9DC JUMPI JUMPDEST POP POP PUSH2 0x9CD JUMPI DUP1 TIMESTAMP GT PUSH0 EQ PUSH2 0x9C8 JUMPI POP TIMESTAMP JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0x9B1 JUMPI PUSH2 0x360 MSTORE PUSH2 0x100 DUP3 ADD MLOAD PUSH2 0x380 MSTORE PUSH2 0x2C0 MSTORE PUSH1 0x20 DUP2 ADD DUP1 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP1 DUP2 AND PUSH2 0x2E0 MSTORE PUSH1 0x40 DUP4 ADD DUP1 MLOAD DUP3 AND PUSH2 0x300 MSTORE PUSH2 0x120 DUP5 ADD MLOAD ISZERO ISZERO PUSH2 0x420 MSTORE PUSH1 0x60 DUP5 ADD MLOAD PUSH2 0x3A0 MSTORE PUSH1 0x80 DUP5 ADD MLOAD PUSH2 0x3C0 MSTORE PUSH1 0xA0 DUP5 ADD MLOAD PUSH2 0x3E0 MSTORE PUSH1 0xC0 DUP5 ADD MLOAD PUSH2 0x400 MSTORE SWAP2 MLOAD SWAP2 MLOAD PUSH32 0xF3631F9DAB08169D1DB21C6DC5F32536FB2B0A6B9BB5330D71C52132F968BE0 SWAP5 POP SWAP2 DUP2 AND SWAP2 AND GT ISZERO PUSH2 0x9A6 JUMPI PUSH1 0xFF PUSH0 DUP2 PUSH1 0x1 JUMPDEST AND PUSH2 0x340 MSTORE AND PUSH2 0x320 MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH2 0x6D3 DUP3 PUSH2 0xD39 JUMP JUMPDEST PUSH1 0x2 DUP3 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH1 0x40 MLOAD SWAP1 PUSH2 0x6EC DUP3 PUSH2 0xD39 JUMP JUMPDEST PUSH1 0x2 DUP3 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP5 ADD CALLDATACOPY PUSH1 0x60 DUP2 ADD MLOAD PUSH2 0x71E PUSH1 0x80 DUP4 ADD MLOAD PUSH2 0x320 MLOAD SWAP1 PUSH2 0x717 PUSH2 0x340 MLOAD DUP9 PUSH2 0xDE0 JUMP JUMPDEST MSTORE DUP6 PUSH2 0xDE0 JUMP JUMPDEST MSTORE PUSH2 0x745 PUSH1 0xC0 PUSH1 0xA0 DUP4 ADD MLOAD SWAP3 ADD MLOAD PUSH2 0x320 MLOAD SWAP1 PUSH2 0x73E PUSH2 0x340 MLOAD DUP7 PUSH2 0xDE0 JUMP JUMPDEST MSTORE DUP4 PUSH2 0xDE0 JUMP JUMPDEST MSTORE PUSH2 0x782 PUSH2 0x360 MLOAD SWAP2 PUSH2 0x774 PUSH2 0x380 MLOAD SWAP5 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP6 DUP7 MSTORE PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x80 PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD SWAP1 PUSH2 0xE08 JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0xE08 JUMP JUMPDEST SUB SWAP1 LOG1 PUSH1 0x40 MLOAD PUSH2 0x4AFE PUSH2 0x1102 DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x37F3 ADD MSTORE PUSH1 0xA0 MLOAD DUP2 PUSH2 0x38BF ADD MSTORE PUSH1 0xC0 MLOAD DUP2 PUSH2 0x37C4 ADD MSTORE PUSH1 0xE0 MLOAD DUP2 PUSH2 0x3842 ADD MSTORE PUSH2 0x100 MLOAD DUP2 PUSH2 0x3868 ADD MSTORE PUSH2 0x120 MLOAD DUP2 PUSH2 0x16D0 ADD MSTORE PUSH2 0x140 MLOAD DUP2 PUSH2 0x16F9 ADD MSTORE PUSH2 0x160 MLOAD DUP2 DUP2 DUP2 PUSH2 0x449 ADD MSTORE DUP2 DUP2 PUSH2 0x742 ADD MSTORE DUP2 DUP2 PUSH2 0xA0C ADD MSTORE DUP2 DUP2 PUSH2 0x11A3 ADD MSTORE DUP2 DUP2 PUSH2 0x1697 ADD MSTORE DUP2 DUP2 PUSH2 0x1DA9 ADD MSTORE DUP2 DUP2 PUSH2 0x243A ADD MSTORE DUP2 DUP2 PUSH2 0x289E ADD MSTORE DUP2 DUP2 PUSH2 0x34EC ADD MSTORE PUSH2 0x36C0 ADD MSTORE PUSH2 0x180 MLOAD DUP2 DUP2 DUP2 PUSH2 0xB21 ADD MSTORE DUP2 DUP2 PUSH2 0xD45 ADD MSTORE DUP2 DUP2 PUSH2 0xE50 ADD MSTORE DUP2 DUP2 PUSH2 0x10A2 ADD MSTORE PUSH2 0x180F ADD MSTORE PUSH2 0x1A0 MLOAD DUP2 POP POP PUSH2 0x1C0 MLOAD DUP2 POP POP PUSH2 0x1E0 MLOAD DUP2 POP POP PUSH2 0x200 MLOAD DUP2 POP POP PUSH2 0x220 MLOAD DUP2 POP POP PUSH2 0x240 MLOAD DUP2 POP POP PUSH2 0x260 MLOAD DUP2 POP POP PUSH2 0x280 MLOAD DUP2 POP POP PUSH2 0x2A0 MLOAD DUP2 POP POP PUSH2 0x2C0 MLOAD DUP2 DUP2 DUP2 PUSH2 0xDD3 ADD MSTORE DUP2 DUP2 PUSH2 0x214E ADD MSTORE PUSH2 0x2530 ADD MSTORE PUSH2 0x2E0 MLOAD DUP2 PUSH2 0x205D ADD MSTORE PUSH2 0x300 MLOAD DUP2 PUSH2 0x3A1 ADD MSTORE PUSH2 0x320 MLOAD DUP2 DUP2 DUP2 PUSH2 0x190C ADD MSTORE DUP2 DUP2 PUSH2 0x1C66 ADD MSTORE DUP2 DUP2 PUSH2 0x2905 ADD MSTORE PUSH2 0x3B54 ADD MSTORE PUSH2 0x340 MLOAD DUP2 DUP2 DUP2 PUSH2 0x18EB ADD MSTORE DUP2 DUP2 PUSH2 0x292F ADD MSTORE PUSH2 0x3B9E ADD MSTORE PUSH2 0x360 MLOAD DUP2 DUP2 DUP2 PUSH2 0x19FC ADD MSTORE DUP2 DUP2 PUSH2 0x210C ADD MSTORE DUP2 DUP2 PUSH2 0x24C7 ADD MSTORE DUP2 DUP2 PUSH2 0x29C6 ADD MSTORE DUP2 DUP2 PUSH2 0x375B ADD MSTORE PUSH2 0x3AE7 ADD MSTORE PUSH2 0x380 MLOAD DUP2 DUP2 DUP2 PUSH2 0xC72 ADD MSTORE DUP2 DUP2 PUSH2 0x1A1F ADD MSTORE DUP2 DUP2 PUSH2 0x29EC ADD MSTORE DUP2 DUP2 PUSH2 0x3788 ADD MSTORE PUSH2 0x3AC6 ADD MSTORE PUSH2 0x3A0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x1959 ADD MSTORE DUP2 DUP2 PUSH2 0x2A34 ADD MSTORE PUSH2 0x3B2E ADD MSTORE PUSH2 0x3C0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x192D ADD MSTORE PUSH2 0x2A5C ADD MSTORE PUSH2 0x3E0 MLOAD DUP2 DUP2 DUP2 PUSH2 0x19CD ADD MSTORE DUP2 DUP2 PUSH2 0x2AAE ADD MSTORE PUSH2 0x3B0D ADD MSTORE PUSH2 0x400 MLOAD DUP2 DUP2 DUP2 PUSH2 0x19A1 ADD MSTORE PUSH2 0x2AD9 ADD MSTORE PUSH2 0x420 MLOAD DUP2 DUP2 DUP2 PUSH2 0x1613 ADD MSTORE DUP2 DUP2 PUSH2 0x1BFB ADD MSTORE PUSH2 0x299D ADD MSTORE PUSH2 0x4AFE SWAP1 RETURN JUMPDEST PUSH1 0xFF PUSH1 0x1 DUP2 PUSH0 PUSH2 0x6BC JUMP JUMPDEST DUP4 SWAP1 PUSH4 0x7D0356F3 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x618 JUMP JUMPDEST PUSH4 0x1CE788A7 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP3 POP SWAP1 PUSH2 0x9F1 SWAP2 PUSH2 0xE3B JUMP JUMPDEST EQ ISZERO DUP6 DUP1 PUSH2 0x606 JUMP JUMPDEST SWAP1 POP DUP4 LT DUP10 PUSH2 0x5E4 JUMP JUMPDEST DUP1 DUP7 LT SWAP2 POP PUSH2 0x5DD JUMP JUMPDEST DUP1 DUP5 LT SWAP2 POP PUSH2 0x5D6 JUMP JUMPDEST PUSH4 0x1E4FBDF7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0xAAAD13F7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x3FC JUMP JUMPDEST PUSH1 0x5 PUSH0 SWAP1 DUP2 MSTORE SWAP4 POP PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 SWAP2 SWAP1 JUMPDEST PUSH1 0x1F NOT DUP5 AND DUP6 LT PUSH2 0xAB2 JUMPI PUSH1 0x1 SWAP5 POP DUP4 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0xA9A JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x5 SSTORE PUSH2 0x411 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0xA8C JUMP JUMPDEST DUP2 DUP2 ADD MLOAD DUP4 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xA71 JUMP JUMPDEST SWAP1 SWAP2 POP PUSH1 0x5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP6 LT PUSH2 0xB14 JUMPI JUMPDEST SWAP1 DUP5 SWAP4 SWAP3 SWAP2 JUMPDEST PUSH1 0x1F DUP4 ADD PUSH1 0x5 SHR DUP3 ADD DUP2 LT PUSH2 0xB06 JUMPI POP POP PUSH2 0x3E6 JUMP JUMPDEST PUSH0 DUP2 SSTORE DUP6 SWAP5 POP PUSH1 0x1 ADD PUSH2 0xAF0 JUMP JUMPDEST POP DUP1 PUSH2 0xAEA JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x3D2 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x396 JUMP JUMPDEST PUSH1 0x4 PUSH0 SWAP1 DUP2 MSTORE SWAP4 POP PUSH0 MLOAD PUSH1 0x20 PUSH2 0x5C20 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE SWAP2 SWAP1 JUMPDEST PUSH1 0x1F NOT DUP5 AND DUP6 LT PUSH2 0xBB2 JUMPI PUSH1 0x1 SWAP5 POP DUP4 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0xB9A JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x4 SSTORE PUSH2 0x3AB JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0xB8C JUMP JUMPDEST DUP2 DUP2 ADD MLOAD DUP4 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xB71 JUMP JUMPDEST PUSH1 0x4 PUSH0 MSTORE SWAP1 SWAP2 POP PUSH0 MLOAD PUSH1 0x20 PUSH2 0x5C20 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP6 LT PUSH2 0xC1E JUMPI JUMPDEST SWAP1 DUP5 SWAP4 SWAP3 SWAP2 JUMPDEST PUSH1 0x1F DUP4 ADD PUSH1 0x5 SHR DUP3 ADD DUP2 LT PUSH2 0xC10 JUMPI POP POP PUSH2 0x380 JUMP JUMPDEST PUSH0 DUP2 SSTORE DUP6 SWAP5 POP PUSH1 0x1 ADD PUSH2 0xBFA JUMP JUMPDEST POP DUP1 PUSH2 0xBF4 JUMP JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x36C JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x334 JUMP JUMPDEST PUSH1 0x3 PUSH0 SWAP1 DUP2 MSTORE SWAP4 POP PUSH0 MLOAD PUSH1 0x20 PUSH2 0x5C00 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE SWAP2 SWAP1 JUMPDEST PUSH1 0x1F NOT DUP5 AND DUP6 LT PUSH2 0xC94 JUMPI PUSH1 0x1 SWAP5 POP DUP4 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0xC7C JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x3 SSTORE PUSH2 0x349 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0xC6E JUMP JUMPDEST DUP2 DUP2 ADD MLOAD DUP4 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xC53 JUMP JUMPDEST PUSH1 0x3 PUSH0 MSTORE SWAP1 SWAP2 POP PUSH0 MLOAD PUSH1 0x20 PUSH2 0x5C00 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD PUSH1 0x20 DUP6 LT PUSH2 0xD00 JUMPI JUMPDEST SWAP1 DUP5 SWAP4 SWAP3 SWAP2 JUMPDEST PUSH1 0x1F DUP4 ADD PUSH1 0x5 SHR DUP3 ADD DUP2 LT PUSH2 0xCF2 JUMPI POP POP PUSH2 0x31E JUMP JUMPDEST PUSH0 DUP2 SSTORE DUP6 SWAP5 POP PUSH1 0x1 ADD PUSH2 0xCDC JUMP JUMPDEST POP DUP1 PUSH2 0xCD6 JUMP JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x30A JUMP JUMPDEST PUSH1 0x1 SWAP5 PUSH0 PUSH2 0x1B6 JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0xA0 DUP2 ADD SWAP1 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0xB39 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0xB39 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0xB39 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0xD1A JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0xB39 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0xDAB PUSH1 0x1F DUP5 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP6 PUSH2 0xD54 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0xD1A JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP3 AND DUP3 SUB PUSH2 0xD1A JUMPI JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0xDF4 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0xE27 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0xE19 JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x486 JUMPI JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0xEBE JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0xE80 JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0xE72 JUMPI POP OR SWAP1 JUMP JUMPDEST DUP3 PUSH0 NOT SWAP2 SUB PUSH1 0x3 SHL SHL AND OR SWAP1 JUMP JUMPDEST PUSH1 0x44 DUP3 PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH4 0x305A27A9 PUSH1 0xE0 SHL DUP4 MSTORE DUP2 PUSH1 0x4 DUP5 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH1 0x24 DUP7 ADD MSTORE ADD DUP5 DUP5 ADD MCOPY PUSH0 DUP3 DUP3 ADD DUP5 ADD MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP2 ADD SUB ADD SWAP1 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0xB39 JUMPI PUSH0 SLOAD SWAP3 PUSH1 0x1 SWAP4 DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0xFC1 JUMPI JUMPDEST DUP4 DUP3 LT EQ PUSH2 0xB1B JUMPI PUSH1 0x1F DUP2 GT PUSH2 0xF8E JUMPI JUMPDEST POP DUP2 PUSH1 0x1F DUP5 GT PUSH1 0x1 EQ PUSH2 0xF2C JUMPI POP SWAP3 DUP3 SWAP4 SWAP2 DUP4 SWAP3 PUSH0 SWAP5 PUSH2 0xF21 JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0xF0C JUMP JUMPDEST SWAP2 SWAP1 DUP4 PUSH1 0x1F NOT DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0xF74 JUMPI POP POP POP LT PUSH2 0xF5C JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0xF4F JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0xF3E JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP5 PUSH1 0x1F DUP5 PUSH0 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 PUSH1 0x1F DUP7 ADD PUSH1 0x5 SHR ADD JUMPDEST DUP3 DUP2 LT PUSH2 0xFB6 JUMPI POP POP PUSH2 0xEF1 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP6 SWAP1 PUSH2 0xFA8 JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xEE0 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0xFF5 JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0xE80 JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0xE72 JUMPI POP OR SWAP1 JUMP JUMPDEST SWAP2 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0xB39 JUMPI PUSH1 0x1 SWAP2 DUP3 SLOAD DUP4 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x10F7 JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0xB1B JUMPI PUSH1 0x1F DUP2 GT PUSH2 0x10C4 JUMPI JUMPDEST POP DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0x1064 JUMPI POP DUP2 SWAP3 SWAP4 SWAP5 PUSH0 SWAP3 PUSH2 0x1059 JUMPI JUMPDEST POP POP PUSH0 NOT PUSH1 0x3 DUP4 SWAP1 SHL SHR NOT AND SWAP1 DUP3 SHL OR SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x1042 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT DUP4 AND SWAP6 DUP5 PUSH0 MSTORE DUP3 PUSH0 KECCAK256 SWAP3 PUSH0 SWAP1 JUMPDEST DUP9 DUP3 LT PUSH2 0x10AD JUMPI POP POP DUP4 DUP6 SWAP7 SWAP8 LT PUSH2 0x1095 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x1088 JUMP JUMPDEST DUP1 DUP8 DUP6 SWAP7 DUP3 SWAP5 SWAP7 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP6 ADD SWAP4 ADD SWAP1 PUSH2 0x1075 JUMP JUMPDEST DUP4 PUSH0 MSTORE DUP4 PUSH1 0x1F DUP4 PUSH0 KECCAK256 SWAP3 ADD PUSH1 0x5 SHR DUP3 ADD SWAP2 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR ADD JUMPDEST DUP3 DUP2 LT PUSH2 0x10EC JUMPI POP POP PUSH2 0x1029 JUMP JUMPDEST PUSH0 DUP2 SSTORE ADD DUP5 SWAP1 PUSH2 0x10DE JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x1018 JUMP INVALID PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x1FFC9A7 EQ PUSH2 0x2FC2 JUMPI POP DUP1 PUSH4 0x6FDDE03 EQ PUSH2 0x2F19 JUMPI DUP1 PUSH4 0x95EA7B3 EQ PUSH2 0x2E9C JUMPI DUP1 PUSH4 0xB89F182 EQ PUSH2 0x2C62 JUMPI DUP1 PUSH4 0xCA89848 EQ PUSH2 0x2822 JUMPI DUP1 PUSH4 0x16A0B3E0 EQ PUSH2 0x25EE JUMPI DUP1 PUSH4 0x18160DDD EQ PUSH2 0x25D4 JUMPI DUP1 PUSH4 0x18B6EB55 EQ PUSH2 0x2594 JUMPI DUP1 PUSH4 0x1C149E28 EQ PUSH2 0x2471 JUMPI DUP1 PUSH4 0x23B872DD EQ PUSH2 0x23C9 JUMPI DUP1 PUSH4 0x23DE6651 EQ PUSH2 0x2398 JUMPI DUP1 PUSH4 0x273C1ADF EQ PUSH2 0x2376 JUMPI DUP1 PUSH4 0x2754888D EQ PUSH2 0x230D JUMPI DUP1 PUSH4 0x30ADF81F EQ PUSH2 0x22D3 JUMPI DUP1 PUSH4 0x313CE567 EQ PUSH2 0x22B8 JUMPI DUP1 PUSH4 0x351A964D EQ PUSH2 0x2294 JUMPI DUP1 PUSH4 0x3644E515 EQ PUSH2 0x227A JUMPI DUP1 PUSH4 0x38BE241D EQ PUSH2 0x222F JUMPI DUP1 PUSH4 0x45421EC7 EQ PUSH2 0x2081 JUMPI DUP1 PUSH4 0x4837C596 EQ PUSH2 0x2031 JUMPI DUP1 PUSH4 0x5211FA77 EQ PUSH2 0x1FEE JUMPI DUP1 PUSH4 0x53B79BD7 EQ PUSH2 0x1F9C JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0x1EF3 JUMPI DUP1 PUSH4 0x5687F2B8 EQ PUSH2 0x1E92 JUMPI DUP1 PUSH4 0x627CDCB9 EQ PUSH2 0x1E69 JUMPI DUP1 PUSH4 0x654CF15D EQ PUSH2 0x1E47 JUMPI DUP1 PUSH4 0x679AEFCE EQ PUSH2 0x1E0F JUMPI DUP1 PUSH4 0x70A08231 EQ PUSH2 0x1D3C JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0x1CB5 JUMPI DUP1 PUSH4 0x72C98186 EQ PUSH2 0x1B0D JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0x1A54 JUMPI DUP1 PUSH4 0x7BEED220 EQ PUSH2 0x18BB JUMPI DUP1 PUSH4 0x7ECEBE00 EQ PUSH2 0x1876 JUMPI DUP1 PUSH4 0x81FA807C EQ PUSH2 0x17B3 JUMPI DUP1 PUSH4 0x84B0196E EQ PUSH2 0x16BB JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x166B JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0x1638 JUMPI DUP1 PUSH4 0x95146EFB EQ PUSH2 0x15FC JUMPI DUP1 PUSH4 0x95D89B41 EQ PUSH2 0x1500 JUMPI DUP1 PUSH4 0x976907CC EQ PUSH2 0x1448 JUMPI DUP1 PUSH4 0x984DE9E8 EQ PUSH2 0x125A JUMPI DUP1 PUSH4 0xA0E8F5AC EQ PUSH2 0x1212 JUMPI DUP1 PUSH4 0xA9059CBB EQ PUSH2 0x110C JUMPI DUP1 PUSH4 0xAA6CA808 EQ PUSH2 0x104A JUMPI DUP1 PUSH4 0xABB1DC44 EQ PUSH2 0xDF7 JUMPI DUP1 PUSH4 0xAF905D15 EQ PUSH2 0xDA7 JUMPI DUP1 PUSH4 0xB156AA0A EQ PUSH2 0xCED JUMPI DUP1 PUSH4 0xB677FA56 EQ PUSH2 0xCCB JUMPI DUP1 PUSH4 0xBA5F9F40 EQ PUSH2 0xBE6 JUMPI DUP1 PUSH4 0xC0BC6F33 EQ PUSH2 0xB7A JUMPI DUP1 PUSH4 0xCE20ECE7 EQ PUSH2 0xB5A JUMPI DUP1 PUSH4 0xD335B0CF EQ PUSH2 0xAC8 JUMPI DUP1 PUSH4 0xD505ACCF EQ PUSH2 0x86C JUMPI DUP1 PUSH4 0xD77153A7 EQ PUSH2 0x7AF JUMPI DUP1 PUSH4 0xDD62ED3E EQ PUSH2 0x6C5 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x692 JUMPI DUP1 PUSH4 0xE565C29E EQ PUSH2 0x3C5 JUMPI DUP1 PUSH4 0xE594203D EQ PUSH2 0x375 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x2E7 JUMPI PUSH4 0xF89F27ED EQ PUSH2 0x2B0 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x2DF PUSH2 0x2CB PUSH2 0x3AA3 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x315D JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x300 PUSH2 0x304F JUMP JUMPDEST PUSH2 0x308 PUSH2 0x38E5 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 PUSH1 0x7 SLOAD AND OR PUSH1 0x7 SSTORE PUSH1 0x6 SLOAD AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH0 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH2 0x100 SWAP1 DUP2 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x665 JUMPI PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP2 ADD SWAP1 PUSH1 0x60 DUP3 MSTORE PUSH1 0x40 DUP2 ADD SWAP2 PUSH0 DUP4 MSTORE PUSH1 0x60 DUP3 ADD PUSH0 DUP2 MSTORE PUSH1 0x80 DUP4 ADD PUSH0 DUP2 MSTORE PUSH1 0xA0 DUP5 ADD SWAP1 PUSH0 DUP3 MSTORE PUSH1 0xC0 DUP6 ADD SWAP3 PUSH0 DUP5 MSTORE PUSH1 0xE0 DUP7 ADD SWAP5 PUSH0 DUP7 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 PUSH1 0x40 MLOAD PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x60B JUMPI PUSH0 SWAP2 PUSH2 0x643 JUMPI JUMPDEST POP DUP9 MSTORE PUSH2 0x4B7 PUSH2 0x3AA3 JUMP JUMPDEST DUP2 MSTORE PUSH1 0x40 MLOAD PUSH32 0xB45090F900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE DUP11 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x60B JUMPI PUSH0 SWAP2 PUSH2 0x616 JUMPI JUMPDEST POP DUP10 MSTORE PUSH2 0x506 PUSH2 0x34A3 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x40 MLOAD DUP1 SWAP3 PUSH32 0xF29486A100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE DUP2 PUSH1 0x24 PUSH2 0x1A0 SWAP4 DUP5 SWAP4 GAS STATICCALL SWAP9 DUP10 ISZERO PUSH2 0x60B JUMPI DUP13 SWAP10 PUSH2 0x5AE SWAP5 PUSH2 0x59B SWAP4 PUSH0 SWAP3 PUSH2 0x5DE JUMPI JUMPDEST POP POP PUSH1 0xE0 DUP2 ADD MLOAD ISZERO ISZERO DUP8 MSTORE DUP11 DUP2 ADD MLOAD ISZERO ISZERO DUP9 MSTORE PUSH2 0x120 DUP1 SWAP2 ADD MLOAD ISZERO ISZERO DUP10 MSTORE PUSH2 0x57F PUSH2 0x3759 JUMP JUMPDEST ISZERO ISZERO DUP11 MSTORE PUSH1 0x40 MLOAD SWAP14 DUP14 DUP16 SWAP15 SWAP4 DUP16 SWAP5 DUP6 MSTORE MLOAD SWAP4 ADD MSTORE DUP13 ADD SWAP1 PUSH2 0x315D JUMP JUMPDEST SWAP1 MLOAD PUSH1 0x1F NOT DUP12 DUP4 SUB ADD PUSH1 0x40 DUP13 ADD MSTORE PUSH2 0x315D JUMP JUMPDEST SWAP7 MLOAD PUSH1 0x60 DUP10 ADD MSTORE MLOAD PUSH1 0x80 DUP9 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xA0 DUP8 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xC0 DUP7 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xE0 DUP6 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST PUSH2 0x5FD SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x604 JUMPI JUMPDEST PUSH2 0x5F5 DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x357A JUMP JUMPDEST DUP15 DUP1 PUSH2 0x559 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x5EB JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 POP DUP11 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x63C JUMPI JUMPDEST PUSH2 0x62D DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x2E3 JUMPI MLOAD DUP13 PUSH2 0x4FB JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x623 JUMP JUMPDEST PUSH2 0x65F SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x657 DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3683 JUMP JUMPDEST DUP13 PUSH2 0x4AC JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x7 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x6DE PUSH2 0x304F JUMP JUMPDEST PUSH1 0x20 PUSH2 0x6E8 PUSH2 0x3072 JUMP JUMPDEST SWAP2 PUSH1 0x64 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP1 PUSH1 0x40 MLOAD SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0x927DA10500000000000000000000000000000000000000000000000000000000 DUP7 MSTORE ADDRESS PUSH1 0x4 DUP8 ADD MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE AND PUSH1 0x44 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x60B JUMPI PUSH0 SWAP1 PUSH2 0x77C JUMPI JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x7A7 JUMPI JUMPDEST DUP2 PUSH2 0x796 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH2 0x771 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x789 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x140 PUSH1 0x40 MLOAD PUSH2 0x7CE DUP2 PUSH2 0x30E9 JUMP JUMPDEST PUSH0 DUP2 MSTORE PUSH1 0x20 DUP2 ADD SWAP1 PUSH1 0x40 DUP2 ADD PUSH0 DUP2 MSTORE PUSH1 0x60 DUP3 ADD PUSH0 DUP2 MSTORE PUSH1 0x80 DUP4 ADD SWAP1 PUSH0 DUP3 MSTORE PUSH1 0xA0 DUP5 ADD PUSH0 DUP2 MSTORE PUSH1 0xC0 DUP6 ADD PUSH1 0xE0 DUP7 ADD SWAP2 PUSH0 DUP4 MSTORE PUSH2 0x100 SWAP5 DUP6 DUP9 ADD SWAP5 PUSH2 0x120 DUP1 SWAP10 ADD SWAP8 PUSH0 DUP10 MSTORE PUSH1 0x1 DUP12 MSTORE PUSH1 0x1 DUP6 MSTORE PUSH1 0x1 DUP8 MSTORE PUSH1 0x40 MLOAD SWAP11 PUSH0 DUP13 MSTORE MLOAD ISZERO ISZERO PUSH1 0x20 DUP13 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x40 DUP12 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x60 DUP11 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0x80 DUP10 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xA0 DUP9 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xC0 DUP8 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xE0 DUP7 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP5 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x885 PUSH2 0x304F JUMP JUMPDEST PUSH2 0x88D PUSH2 0x3072 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP2 PUSH1 0x84 CALLDATALOAD SWAP2 SWAP1 PUSH1 0x64 CALLDATALOAD PUSH1 0xFF DUP5 AND DUP5 SUB PUSH2 0x2E3 JUMPI DUP1 TIMESTAMP GT PUSH2 0xA9D JUMPI PUSH2 0x8DB DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH1 0x1 DUP3 ADD SWAP1 SSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x9AA PUSH2 0x9A1 PUSH1 0x40 MLOAD SWAP7 PUSH1 0x20 DUP9 ADD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP9 DUP10 SWAP6 DUP7 DUP10 AND SWAP8 DUP9 PUSH1 0x40 DUP5 ADD MSTORE DUP8 DUP12 AND PUSH1 0x60 DUP5 ADD MSTORE DUP13 PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 MSTORE PUSH2 0x954 DUP2 PUSH2 0x30CD JUMP JUMPDEST MLOAD SWAP1 KECCAK256 PUSH2 0x95F PUSH2 0x37AD JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x2 DUP4 ADD MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0xC4 CALLDATALOAD SWAP2 PUSH1 0x42 PUSH1 0xA4 CALLDATALOAD SWAP3 KECCAK256 PUSH2 0x3F5B JUMP JUMPDEST SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x3FEA JUMP JUMPDEST AND DUP2 DUP2 SUB PUSH2 0xA6F JUMPI PUSH1 0x40 MLOAD PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 DUP2 AND PUSH1 0x4 DUP4 ADD MSTORE DUP6 AND PUSH1 0x24 DUP3 ADD MSTORE PUSH1 0x44 DUP2 ADD DUP8 SWAP1 MSTORE PUSH1 0x20 DUP2 PUSH1 0x64 DUP2 PUSH0 PUSH32 0x0 DUP12 AND GAS CALL DUP1 ISZERO PUSH2 0x60B JUMPI PUSH2 0xA3B JUMPI STOP JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xA67 JUMPI JUMPDEST DUP2 PUSH2 0xA54 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x2E3 JUMPI PUSH2 0xA65 SWAP1 PUSH2 0x3359 JUMP JUMPDEST STOP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xA47 JUMP JUMPDEST PUSH32 0x4B800E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH32 0x6279130200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH32 0xB45090F900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x60B JUMPI PUSH0 SWAP1 PUSH2 0x77C JUMPI PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH6 0x9184E72A000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0xC0 PUSH1 0x40 MLOAD PUSH2 0xB99 DUP2 PUSH2 0x30CD JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE DUP3 PUSH1 0x60 DUP3 ADD MSTORE DUP3 PUSH1 0x80 DUP3 ADD MSTORE DUP3 PUSH1 0xA0 DUP3 ADD MSTORE ADD MSTORE PUSH32 0xD623472500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0xBFF PUSH2 0x304F JUMP JUMPDEST POP PUSH2 0xC08 PUSH2 0x3072 JUMP JUMPDEST POP PUSH1 0x4 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x2E3 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0xC35 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST POP PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0xC4E SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST POP PUSH1 0xC4 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0xC67 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x31F0 JUMP JUMPDEST POP PUSH2 0xC70 PUSH2 0x36A9 JUMP JUMPDEST PUSH32 0x0 TIMESTAMP GT ISZERO PUSH2 0xCA3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH32 0xF38B577000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x9B6E64A8EC60000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x60B JUMPI PUSH2 0x2DF SWAP2 PUSH0 SWAP2 PUSH2 0xD8D JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x315D JUMP JUMPDEST PUSH2 0xDA1 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x657 DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP3 PUSH2 0xD78 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0x67E0E07600000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP6 PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x60B JUMPI PUSH0 SWAP2 PUSH0 SWAP4 PUSH0 SWAP2 PUSH0 SWAP4 PUSH2 0xF1C JUMPI JUMPDEST POP PUSH2 0xE9B PUSH1 0x40 MLOAD SWAP5 PUSH1 0x80 DUP7 MSTORE PUSH1 0x80 DUP7 ADD SWAP1 PUSH2 0x3288 JUMP JUMPDEST PUSH1 0x20 DUP6 DUP3 SUB DUP2 DUP8 ADD MSTORE DUP1 DUP1 DUP9 MLOAD SWAP4 DUP5 DUP2 MSTORE ADD SWAP8 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0xEE0 JUMPI DUP8 DUP1 PUSH2 0x2DF DUP10 PUSH2 0xED2 DUP14 DUP12 DUP6 DUP3 SUB PUSH1 0x40 DUP8 ADD MSTORE PUSH2 0x315D JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x315D JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 SWAP8 DUP4 PUSH1 0x60 PUSH1 0x1 SWAP3 PUSH1 0x40 DUP13 MLOAD DUP1 MLOAD PUSH2 0xEFA DUP2 PUSH2 0x32D1 JUMP JUMPDEST DUP4 MSTORE DUP1 DUP6 ADD MLOAD DUP8 AND DUP6 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP3 ADD MSTORE ADD SWAP10 ADD SWAP5 SWAP4 SWAP3 ADD SWAP1 PUSH2 0xEB3 JUMP JUMPDEST SWAP5 POP SWAP3 POP POP POP RETURNDATASIZE DUP1 PUSH0 DUP5 RETURNDATACOPY PUSH2 0xF31 DUP2 DUP5 PUSH2 0x3122 JUMP JUMPDEST DUP3 ADD SWAP1 PUSH1 0x80 DUP4 DUP4 SUB SLT PUSH2 0x2E3 JUMPI DUP3 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP2 GT PUSH2 0x2E3 JUMPI DUP4 PUSH2 0xF5E SWAP2 DUP4 ADD PUSH2 0x339B JUMP JUMPDEST SWAP1 PUSH1 0x20 SWAP4 DUP5 DUP3 ADD MLOAD DUP7 DUP2 GT PUSH2 0x2E3 JUMPI DUP3 ADD DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x2E3 JUMPI DUP1 MLOAD SWAP1 PUSH2 0xF86 DUP3 PUSH2 0x3145 JUMP JUMPDEST SWAP7 PUSH2 0xF94 PUSH1 0x40 MLOAD SWAP9 DUP10 PUSH2 0x3122 JUMP JUMPDEST DUP3 DUP9 MSTORE DUP1 DUP9 ADD DUP2 PUSH1 0x60 DUP1 SWAP6 MUL DUP5 ADD ADD SWAP3 DUP6 DUP5 GT PUSH2 0x2E3 JUMPI DUP3 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0xFF5 JUMPI POP POP POP POP POP PUSH1 0x40 DUP3 ADD MLOAD DUP7 DUP2 GT PUSH2 0x2E3 JUMPI DUP2 PUSH2 0xFD3 SWAP2 DUP5 ADD PUSH2 0x3442 JUMP JUMPDEST SWAP6 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0xFEA SWAP3 ADD PUSH2 0x3442 JUMP JUMPDEST SWAP1 SWAP3 SWAP4 SWAP1 SWAP2 DUP6 PUSH2 0xE85 JUMP JUMPDEST DUP5 DUP3 DUP8 SUB SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0x100B DUP3 PUSH2 0x30B1 JUMP JUMPDEST DUP3 MLOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2E3 JUMPI DUP3 MSTORE DUP4 DUP4 ADD MLOAD SWAP1 DUP11 DUP3 AND DUP3 SUB PUSH2 0x2E3 JUMPI DUP3 DUP6 SWAP3 DUP4 DUP10 SWAP6 ADD MSTORE PUSH2 0x103A PUSH1 0x40 DUP7 ADD PUSH2 0x3359 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0xFAF JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL DUP1 ISZERO PUSH2 0x60B JUMPI PUSH2 0x2DF SWAP2 PUSH0 SWAP2 PUSH2 0x10EA JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x3288 JUMP JUMPDEST PUSH2 0x1106 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x10FE DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x3419 JUMP JUMPDEST DUP3 PUSH2 0x10D5 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x1189 PUSH1 0x20 PUSH2 0x112A PUSH2 0x304F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xBEABACC800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x24 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLDATALOAD PUSH1 0x44 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x60B JUMPI PUSH2 0x11DB JUMPI JUMPDEST PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x120A JUMPI JUMPDEST DUP2 PUSH2 0x11F4 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x2E3 JUMPI PUSH2 0x1205 SWAP1 PUSH2 0x3359 JUMP JUMPDEST PUSH2 0x11D0 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x11E7 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x3 NOT PUSH1 0x60 DUP2 CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x2E3 JUMPI PUSH1 0xE0 SWAP2 CALLDATASIZE SUB ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x124A PUSH2 0x3072 JUMP JUMPDEST POP PUSH1 0x40 DUP1 MLOAD PUSH0 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x128B SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2E3 JUMPI PUSH2 0x12A0 DUP2 PUSH2 0x32D1 JUMP JUMPDEST PUSH2 0x1441 JUMPI PUSH1 0x4 JUMPDEST PUSH2 0x12AF PUSH2 0x3AA3 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x3 EQ PUSH2 0x13ED JUMPI DUP1 PUSH1 0x4 EQ PUSH2 0x1369 JUMPI DUP1 PUSH1 0x1 EQ PUSH2 0x1310 JUMPI PUSH1 0x2 EQ PUSH2 0x12FC JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x51 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x20 SWAP2 PUSH2 0x1308 SWAP2 PUSH2 0x4095 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 MUL SWAP2 DUP2 DUP4 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x133C JUMPI PUSH1 0x20 SWAP2 PUSH2 0x1337 SWAP2 PUSH2 0x3C0E JUMP JUMPDEST PUSH2 0x1308 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP PUSH0 SWAP2 SWAP1 PUSH8 0xDE0B6B3A7640000 JUMPDEST DUP2 MLOAD DUP5 LT ISZERO PUSH2 0x13B3 JUMPI PUSH2 0x13AB PUSH1 0x1 SWAP2 PUSH2 0x13A5 PUSH2 0x1393 DUP8 DUP8 PUSH2 0x3387 JUMP JUMPDEST MLOAD PUSH2 0x139E DUP9 DUP8 PUSH2 0x3387 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x3C25 JUMP JUMPDEST SWAP1 PUSH2 0x3CB0 JUMP JUMPDEST SWAP4 ADD SWAP3 PUSH2 0x1377 JUMP JUMPDEST SWAP3 POP POP POP DUP1 ISZERO PUSH2 0x13C5 JUMPI PUSH1 0x20 SWAP1 PUSH2 0x1308 JUMP JUMPDEST PUSH32 0x2654368900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH0 SWAP2 SWAP1 PUSH8 0xDE0B6B3A7640000 JUMPDEST DUP2 MLOAD DUP5 LT ISZERO PUSH2 0x13B3 JUMPI PUSH8 0xDE0B6B3A7640000 PUSH2 0x1438 PUSH1 0x1 SWAP3 PUSH2 0x1432 PUSH2 0x1420 DUP9 DUP9 PUSH2 0x3387 JUMP JUMPDEST MLOAD PUSH2 0x142B DUP10 DUP9 PUSH2 0x3387 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x3EC2 JUMP JUMPDEST SWAP1 PUSH2 0x3BFB JUMP JUMPDEST DIV SWAP4 ADD SWAP3 PUSH2 0x13FB JUMP JUMPDEST PUSH1 0x3 PUSH2 0x12A7 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH2 0x100 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x1462 PUSH2 0x304F JUMP JUMPDEST POP PUSH2 0x146B PUSH2 0x3072 JUMP JUMPDEST POP PUSH1 0x5 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x2E3 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x1498 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST POP PUSH1 0x84 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x14B1 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST PUSH1 0xC4 CALLDATALOAD DUP3 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x14C9 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST POP PUSH1 0xE4 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x2E3 JUMPI PUSH2 0x14E5 PUSH2 0x2DF SWAP3 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x31F0 JUMP JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH0 DUP4 MSTORE PUSH1 0x40 PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD SWAP1 PUSH2 0x315D JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH1 0x4 SLOAD PUSH0 DUP3 PUSH2 0x1521 DUP4 PUSH2 0x3308 JUMP JUMPDEST SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP1 DUP6 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x15BE JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1563 JUMPI JUMPDEST POP PUSH2 0x154F SWAP3 POP SUB DUP4 PUSH2 0x3122 JUMP JUMPDEST PUSH2 0x2DF PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x302A JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x4 PUSH0 MSTORE PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0x15A6 JUMPI POP POP PUSH2 0x154F SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x1542 JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x158F JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP6 DUP3 ADD MSTORE PUSH2 0x154F SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0x1542 SWAP1 POP JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x0 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x6 SLOAD AND PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x16F4 PUSH32 0x0 PUSH2 0x3CD2 JUMP JUMPDEST PUSH2 0x171D PUSH32 0x0 PUSH2 0x3E04 JUMP JUMPDEST SWAP1 PUSH1 0x40 MLOAD SWAP2 PUSH1 0x20 DUP4 ADD SWAP3 DUP1 DUP5 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP6 GT OR PUSH2 0x665 JUMPI PUSH2 0x1793 PUSH2 0x2DF SWAP3 PUSH2 0x1785 SWAP6 PUSH1 0x40 MSTORE PUSH0 DUP4 MSTORE PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP6 PUSH32 0xF00000000000000000000000000000000000000000000000000000000000000 DUP8 MSTORE PUSH1 0xE0 PUSH1 0x20 DUP9 ADD MSTORE PUSH1 0xE0 DUP8 ADD SWAP1 PUSH2 0x302A JUMP JUMPDEST SWAP1 DUP6 DUP3 SUB PUSH1 0x40 DUP8 ADD MSTORE PUSH2 0x302A JUMP JUMPDEST SWAP1 CHAINID PUSH1 0x60 DUP6 ADD MSTORE ADDRESS PUSH1 0x80 DUP6 ADD MSTORE PUSH0 PUSH1 0xA0 DUP6 ADD MSTORE DUP4 DUP3 SUB PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x315D JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH32 0xF29486A100000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH2 0x1A0 SWAP1 DUP2 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x60B JUMPI PUSH1 0x40 SWAP3 PUSH0 SWAP3 PUSH2 0x1859 JUMPI JUMPDEST POP POP PUSH1 0x60 DUP3 DUP3 ADD MLOAD SWAP2 ADD MLOAD DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH2 0x186F SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x604 JUMPI PUSH2 0x5F5 DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP3 DUP1 PUSH2 0x1842 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x18A4 PUSH2 0x304F JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0x40 PUSH0 KECCAK256 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0xED2 PUSH1 0x40 MLOAD PUSH2 0x18DA DUP2 PUSH2 0x30B1 JUMP JUMPDEST PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH2 0x2DF PUSH32 0x0 PUSH32 0x0 PUSH32 0x0 PUSH2 0x1956 DUP4 DUP7 PUSH2 0x3387 JUMP JUMPDEST MSTORE PUSH32 0x0 PUSH2 0x1982 DUP3 DUP7 PUSH2 0x3387 JUMP JUMPDEST MSTORE PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1990 DUP4 PUSH2 0x30B1 JUMP JUMPDEST PUSH1 0x2 DUP4 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP6 ADD CALLDATACOPY PUSH2 0x19C7 PUSH32 0x0 SWAP2 DUP5 PUSH2 0x3387 JUMP JUMPDEST MSTORE PUSH2 0x19F3 PUSH32 0x0 SWAP2 DUP4 PUSH2 0x3387 JUMP JUMPDEST MSTORE PUSH1 0x40 MLOAD SWAP4 DUP5 SWAP4 PUSH32 0x0 DUP6 MSTORE PUSH32 0x0 PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0x80 PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0x80 DUP6 ADD SWAP1 PUSH2 0x315D JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x7 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF CALLER DUP2 DUP4 AND SUB PUSH2 0x1AE1 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 SWAP3 AND PUSH1 0x7 SSTORE PUSH1 0x6 SLOAD SWAP2 CALLER SWAP1 DUP4 AND OR PUSH1 0x6 SSTORE CALLER SWAP2 AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 PUSH0 DUP1 LOG3 STOP JUMPDEST PUSH32 0x118CDAA700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x3 NOT PUSH1 0x20 DUP2 CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP3 GT PUSH2 0x2E3 JUMPI PUSH1 0xE0 SWAP1 DUP3 CALLDATASIZE SUB ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x1B4C DUP4 PUSH2 0x30CD JUMP JUMPDEST DUP2 PUSH1 0x4 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2E3 JUMPI DUP4 MSTORE PUSH1 0x24 DUP3 ADD CALLDATALOAD PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x44 DUP3 ADD CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x1B82 SWAP1 PUSH1 0x4 CALLDATASIZE SWAP2 DUP6 ADD ADD PUSH2 0x3190 JUMP JUMPDEST PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0x64 DUP3 ADD CALLDATALOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x80 DUP4 ADD SWAP2 PUSH1 0x84 DUP2 ADD CALLDATALOAD DUP4 MSTORE PUSH1 0xA4 DUP2 ADD CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x2E3 JUMPI PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xC4 DUP2 ADD CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x2E3 JUMPI PUSH1 0x4 PUSH2 0x1BDF SWAP3 CALLDATASIZE SWAP3 ADD ADD PUSH2 0x31F0 JUMP JUMPDEST PUSH1 0xC0 DUP4 ADD MSTORE PUSH2 0x1BEC PUSH2 0x36A9 JUMP JUMPDEST PUSH2 0x1BF4 PUSH2 0x3759 JUMP JUMPDEST ISZERO PUSH2 0x1C8D JUMPI PUSH32 0x0 SWAP1 DUP2 PUSH2 0x1C61 JUMPI JUMPDEST POP PUSH2 0x1C39 JUMPI PUSH2 0x1308 PUSH1 0x20 SWAP2 PUSH2 0x1C34 PUSH2 0x36A9 JUMP JUMPDEST PUSH2 0x3906 JUMP JUMPDEST PUSH32 0x1269438A00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP MLOAD PUSH32 0x0 EQ ISZERO DUP3 PUSH2 0x1C21 JUMP JUMPDEST PUSH32 0xFDF7984500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x1CCD PUSH2 0x38E5 JUMP JUMPDEST PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP1 PUSH1 0x7 SLOAD AND PUSH1 0x7 SSTORE PUSH1 0x6 SLOAD SWAP1 DUP2 AND PUSH1 0x6 SSTORE AND PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 DUP3 DUP1 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x20 DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x44 DUP2 PUSH2 0x1D59 PUSH2 0x304F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xF7888AEC00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP2 DUP3 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP3 DUP4 SWAP2 DUP3 SWAP1 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x60B JUMPI PUSH0 SWAP2 PUSH2 0x1DE2 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP DUP2 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1E08 JUMPI JUMPDEST PUSH2 0x1DF9 DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x2E3 JUMPI MLOAD DUP3 PUSH2 0x1DD9 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1DEF JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH32 0x18E79A2000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x16345785D8A0000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI CALLER PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD SWAP1 SWAP2 SSTORE STOP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH2 0x1EC3 CALLDATASIZE PUSH2 0x3246 JUMP JUMPDEST SWAP3 SWAP2 SWAP4 SWAP1 PUSH2 0x1ECF PUSH2 0x36A9 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 MSTORE AND SWAP5 AND SWAP3 LOG3 STOP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH1 0x5 SLOAD PUSH0 DUP3 PUSH2 0x1F14 DUP4 PUSH2 0x3308 JUMP JUMPDEST SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP1 DUP6 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x15BE JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1F41 JUMPI POP PUSH2 0x154F SWAP3 POP SUB DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x5 PUSH0 MSTORE PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0x1F84 JUMPI POP POP PUSH2 0x154F SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x1542 JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x1F6D JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x60 PUSH1 0x40 DUP1 MLOAD PUSH2 0x1FBB DUP2 PUSH2 0x30B1 JUMP JUMPDEST DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE PUSH32 0xD623472500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x3 NOT PUSH1 0x40 DUP2 CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x2E3 JUMPI PUSH1 0xE0 SWAP2 CALLDATASIZE SUB ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x2026 PUSH2 0x3072 JUMP JUMPDEST POP PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x209A PUSH2 0x304F JUMP JUMPDEST PUSH2 0x20A2 PUSH2 0x3072 JUMP JUMPDEST POP PUSH1 0x5 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x2E3 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x64 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x20CF SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST POP PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x20E8 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST POP PUSH1 0xC4 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x2101 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x31F0 JUMP JUMPDEST POP PUSH2 0x210A PUSH2 0x36A9 JUMP JUMPDEST PUSH32 0x0 TIMESTAMP LT ISZERO PUSH2 0x2207 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP2 AND SWAP1 DUP1 PUSH32 0x0 AND DUP3 EQ SWAP2 DUP3 PUSH2 0x2184 JUMPI JUMPDEST PUSH1 0x20 DUP4 PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST PUSH1 0x4 SWAP3 POP PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP4 DUP5 DUP1 SWAP3 PUSH32 0x5E01EB5A00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x60B JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0x21D8 JUMPI JUMPDEST POP DUP1 PUSH1 0x6 SLOAD AND SWAP2 AND EQ SWAP1 DUP3 PUSH2 0x2177 JUMP JUMPDEST PUSH2 0x21F9 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x2200 JUMPI JUMPDEST PUSH2 0x21F1 DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x354E JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x21C8 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x21E7 JUMP JUMPDEST PUSH32 0x3EEE08C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x2261 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST POP PUSH1 0x44 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x2026 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x31F0 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH2 0x1308 PUSH2 0x37AD JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH2 0x22AE PUSH2 0x3759 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH2 0x100 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x2327 PUSH2 0x304F JUMP JUMPDEST POP PUSH2 0x2330 PUSH2 0x3072 JUMP JUMPDEST POP PUSH1 0x4 PUSH1 0x44 CALLDATALOAD LT ISZERO PUSH2 0x2E3 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x84 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x235D SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST POP PUSH1 0xA4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x14B1 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH8 0x29A2241AF62C0000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH2 0x1EC3 CALLDATASIZE PUSH2 0x3246 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x84 PUSH1 0x20 PUSH2 0x23DB CALLDATASIZE PUSH2 0x3246 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0x15DACBEA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 DUP5 AND PUSH1 0x24 DUP3 ADD MSTORE SWAP2 DUP4 AND PUSH1 0x44 DUP4 ADD MSTORE PUSH1 0x64 DUP3 ADD MSTORE SWAP3 DUP4 SWAP2 DUP3 SWAP1 PUSH0 SWAP1 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0x60B JUMPI PUSH2 0x11DB JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x4 CALLDATALOAD DUP2 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x24A3 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST POP PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x24BC SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x31F0 JUMP JUMPDEST POP PUSH2 0x24C5 PUSH2 0x36A9 JUMP JUMPDEST PUSH32 0x0 TIMESTAMP LT ISZERO PUSH2 0x2207 JUMPI PUSH1 0x40 MLOAD PUSH32 0x5E01EB5A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x60B JUMPI PUSH1 0x20 SWAP3 PUSH0 SWAP3 PUSH2 0x2575 JUMPI JUMPDEST POP DUP1 PUSH1 0x6 SLOAD AND SWAP2 AND EQ PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH2 0x258D SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x2200 JUMPI PUSH2 0x21F1 DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x2564 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x3 NOT PUSH1 0x20 DUP2 CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x2E3 JUMPI PUSH2 0x180 SWAP2 CALLDATASIZE SUB ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 DUP1 MLOAD PUSH0 DUP2 MSTORE PUSH0 PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH2 0x1308 PUSH2 0x34A3 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x261F SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x3190 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH2 0x2639 PUSH2 0x2632 DUP3 PUSH1 0x44 CALLDATALOAD SWAP5 PUSH2 0x3387 JUMP JUMPDEST MLOAD SWAP2 PUSH2 0x3714 JUMP JUMPDEST PUSH1 0x1 SWAP2 SWAP1 DUP3 DUP5 GT ISZERO PUSH2 0x281C JUMPI PUSH1 0x2 JUMPDEST DUP1 PUSH1 0x3 EQ PUSH2 0x27AB JUMPI DUP1 PUSH1 0x4 EQ PUSH2 0x273D JUMPI DUP1 PUSH1 0x1 EQ PUSH2 0x26E5 JUMPI PUSH1 0x2 EQ PUSH2 0x2694 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x51 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x26BD JUMPI PUSH1 0x20 SWAP4 PUSH2 0x1308 SWAP4 PUSH2 0x13A5 SWAP3 PUSH15 0xC097CE7BC90715B34B9F0FFFFFFFFF DIV ADD SWAP1 PUSH2 0x3C25 JUMP JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP DUP1 SWAP4 SWAP3 POP ISZERO PUSH2 0x2710 JUMPI PUSH2 0x13A5 PUSH2 0x1308 SWAP3 PUSH1 0x20 SWAP5 PUSH15 0xC097CE7BC90715B34B9F1000000000 DIV SWAP1 PUSH2 0x3C25 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP4 SWAP3 PUSH0 SWAP2 DUP2 JUMPDEST PUSH2 0x276B JUMPI JUMPDEST POP POP POP DUP3 ISZERO PUSH2 0x13C5 JUMPI PUSH2 0x13A5 PUSH2 0x1308 SWAP3 PUSH1 0x20 SWAP5 SWAP1 PUSH2 0x3C25 JUMP JUMPDEST SWAP1 SWAP2 SWAP5 PUSH8 0xDE0B6B3A7640000 MLOAD DUP7 LT ISZERO PUSH2 0x27A5 JUMPI SWAP1 DUP3 PUSH2 0x279D DUP2 SWAP4 PUSH2 0x13A5 PUSH2 0x2793 DUP11 DUP7 PUSH2 0x3387 JUMP JUMPDEST MLOAD PUSH2 0x139E DUP12 PUSH2 0x3366 JUMP JUMPDEST SWAP7 ADD SWAP3 PUSH2 0x274D JUMP JUMPDEST SWAP5 PUSH2 0x2752 JUMP JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP4 SWAP3 PUSH0 SWAP2 DUP2 JUMPDEST PUSH2 0x27D8 JUMPI POP POP POP DUP3 ISZERO PUSH2 0x13C5 JUMPI PUSH2 0x13A5 PUSH2 0x1308 SWAP3 PUSH1 0x20 SWAP5 SWAP1 PUSH2 0x3C25 JUMP JUMPDEST SWAP1 SWAP2 SWAP5 PUSH8 0xDE0B6B3A7640000 MLOAD DUP7 LT ISZERO PUSH2 0x27A5 JUMPI SWAP1 DUP3 PUSH8 0xDE0B6B3A7640000 PUSH2 0x2813 DUP3 SWAP5 PUSH2 0x1432 PUSH2 0x2809 DUP12 DUP8 PUSH2 0x3387 JUMP JUMPDEST MLOAD PUSH2 0x142B DUP13 PUSH2 0x3366 JUMP JUMPDEST DIV SWAP7 ADD SWAP3 PUSH2 0x27BB JUMP JUMPDEST DUP3 PUSH2 0x2648 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH2 0x120 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x665 JUMPI PUSH1 0x40 MSTORE PUSH1 0x60 DUP2 MSTORE PUSH1 0x60 PUSH1 0x20 DUP3 ADD MSTORE PUSH1 0x60 PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x60 DUP1 DUP3 ADD MSTORE PUSH0 PUSH1 0x80 DUP3 ADD MSTORE PUSH0 PUSH1 0xA0 DUP3 ADD MSTORE PUSH0 PUSH1 0xC0 DUP3 ADD MSTORE PUSH0 PUSH1 0xE0 DUP3 ADD MSTORE PUSH0 PUSH2 0x100 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH1 0x40 MLOAD PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP6 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x60B JUMPI PUSH0 SWAP2 PUSH2 0x2C48 JUMPI JUMPDEST POP DUP3 MSTORE PUSH32 0x0 DUP1 PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x24 PUSH0 PUSH32 0x0 SWAP4 DUP5 PUSH1 0xE0 DUP8 ADD MSTORE PUSH1 0x40 MLOAD SWAP3 DUP4 DUP1 SWAP3 PUSH32 0x7E361BDE00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS PUSH1 0x4 DUP4 ADD MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x60B JUMPI PUSH0 SWAP2 PUSH2 0x2BE9 JUMPI JUMPDEST POP PUSH1 0x20 DUP5 ADD MSTORE PUSH32 0x0 ISZERO ISZERO PUSH2 0x100 DUP5 ADD MSTORE PUSH32 0x0 PUSH1 0x80 DUP5 ADD MSTORE PUSH32 0x0 PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x40 MLOAD PUSH2 0x2A1C DUP2 PUSH2 0x30B1 JUMP JUMPDEST PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP4 ADD CALLDATACOPY DUP1 PUSH1 0x40 DUP6 ADD MSTORE PUSH2 0x2A59 DUP3 PUSH32 0x0 SWAP3 PUSH2 0x3387 JUMP JUMPDEST MSTORE PUSH32 0x0 PUSH2 0x2A89 DUP4 PUSH1 0x40 DUP7 ADD MLOAD PUSH2 0x3387 JUMP JUMPDEST MSTORE PUSH2 0x2AD3 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x2A9A DUP4 PUSH2 0x30B1 JUMP JUMPDEST PUSH1 0x2 DUP4 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP6 ADD CALLDATACOPY DUP3 PUSH1 0x60 DUP7 ADD MSTORE PUSH32 0x0 SWAP3 PUSH2 0x3387 JUMP JUMPDEST MSTORE PUSH2 0x2B03 PUSH32 0x0 SWAP2 PUSH1 0x60 DUP5 ADD MLOAD PUSH2 0x3387 JUMP JUMPDEST MSTORE PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 MSTORE PUSH2 0x140 DUP2 ADD SWAP2 DUP1 MLOAD SWAP3 PUSH2 0x120 PUSH1 0x20 DUP5 ADD MSTORE DUP4 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH2 0x160 DUP5 ADD SWAP5 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0x2BBD JUMPI POP POP POP PUSH2 0x100 PUSH2 0x2B87 DUP4 SWAP5 PUSH2 0x2B72 PUSH2 0x2B5E PUSH1 0x20 DUP7 ADD MLOAD SWAP3 PUSH1 0x1F NOT SWAP4 DUP5 DUP10 DUP4 SUB ADD PUSH1 0x40 DUP11 ADD MSTORE PUSH2 0x315D JUMP JUMPDEST PUSH1 0x40 DUP7 ADD MLOAD DUP4 DUP9 DUP4 SUB ADD PUSH1 0x60 DUP10 ADD MSTORE PUSH2 0x315D JUMP JUMPDEST SWAP1 PUSH1 0x60 DUP6 ADD MLOAD SWAP1 DUP7 DUP4 SUB ADD PUSH1 0x80 DUP8 ADD MSTORE PUSH2 0x315D JUMP JUMPDEST SWAP2 PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0xA0 DUP6 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0xC0 DUP6 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0xE0 DUP6 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD DUP3 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH2 0x120 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST DUP3 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP7 MSTORE PUSH1 0x20 SWAP6 DUP7 ADD SWAP6 SWAP1 SWAP3 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0x2B2D JUMP JUMPDEST SWAP1 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x2BFA DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH1 0x40 DUP2 DUP4 SUB SLT PUSH2 0x2E3 JUMPI DUP1 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2E3 JUMPI DUP3 PUSH2 0x2C24 SWAP2 DUP4 ADD PUSH2 0x3442 JUMP JUMPDEST SWAP2 PUSH1 0x20 DUP3 ADD MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x2C43 SWAP3 ADD PUSH2 0x3442 JUMP JUMPDEST PUSH2 0x2995 JUMP JUMPDEST PUSH2 0x2C5C SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x10FE DUP2 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP4 PUSH2 0x2900 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0xE0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x2C7B PUSH2 0x304F JUMP JUMPDEST POP PUSH2 0x2C84 PUSH2 0x3072 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x2E3 JUMPI CALLDATASIZE PUSH1 0x23 DUP4 ADD SLT ISZERO PUSH2 0x2E3 JUMPI DUP2 PUSH1 0x4 ADD CALLDATALOAD PUSH2 0x2CB0 DUP2 PUSH2 0x3145 JUMP JUMPDEST SWAP1 PUSH2 0x2CBE PUSH1 0x40 MLOAD SWAP3 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP1 DUP3 MSTORE PUSH1 0x20 SWAP4 DUP5 DUP4 ADD SWAP1 PUSH1 0x24 DUP3 SWAP4 PUSH1 0x7 SHL DUP3 ADD ADD SWAP1 CALLDATASIZE DUP3 GT PUSH2 0x2E3 JUMPI PUSH1 0x24 ADD SWAP2 JUMPDEST DUP2 DUP4 LT PUSH2 0x2E1B JUMPI POP POP POP PUSH1 0x80 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x2D1B PUSH2 0x36A9 JUMP JUMPDEST DUP2 MLOAD PUSH1 0x2 SUB PUSH2 0x2DF3 JUMPI DUP2 MLOAD ISZERO PUSH2 0x2DC6 JUMPI MLOAD DUP4 ADD MLOAD PUSH2 0x2D38 DUP2 PUSH2 0x32D1 JUMP JUMPDEST PUSH2 0x2D41 DUP2 PUSH2 0x32D1 JUMP JUMPDEST ISZERO SWAP1 DUP2 ISZERO SWAP2 PUSH2 0x2D99 JUMPI JUMPDEST POP PUSH2 0x2D71 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADDRESS SWAP2 AND EQ DUP2 MSTORE RETURN JUMPDEST PUSH32 0xDF45063200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 SWAP2 POP MLOAD PUSH1 0x1 LT ISZERO PUSH2 0x2DC6 JUMPI PUSH1 0x40 ADD MLOAD DUP3 ADD MLOAD PUSH2 0x2DB5 DUP2 PUSH2 0x32D1 JUMP JUMPDEST PUSH2 0x2DBE DUP2 PUSH2 0x32D1 JUMP JUMPDEST ISZERO ISZERO DUP4 PUSH2 0x2D4B JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0xAAAD13F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x80 DUP4 CALLDATASIZE SUB SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD SWAP1 PUSH2 0x2E32 DUP3 PUSH2 0x3095 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 CALLDATALOAD DUP2 DUP2 AND DUP2 SUB PUSH2 0x2E3 JUMPI DUP4 MSTORE DUP9 DUP6 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x2E3 JUMPI DUP10 DUP5 ADD MSTORE PUSH1 0x40 DUP6 ADD CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x2E3 JUMPI PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 SWAP1 DUP2 DUP6 ADD CALLDATALOAD SWAP3 DUP4 ISZERO ISZERO DUP5 SUB PUSH2 0x2E3 JUMPI PUSH1 0x80 SWAP4 DUP11 SWAP4 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x2CDF JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH2 0x1189 PUSH1 0x20 PUSH2 0x2EBA PUSH2 0x304F JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER PUSH1 0x4 DUP3 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x24 DUP1 DUP4 ADD SWAP2 SWAP1 SWAP2 MSTORE CALLDATALOAD PUSH1 0x44 DUP3 ADD MSTORE SWAP2 DUP3 SWAP1 DUP2 SWAP1 PUSH1 0x64 DUP3 ADD SWAP1 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH1 0x3 SLOAD PUSH0 DUP3 PUSH2 0x2F3A DUP4 PUSH2 0x3308 JUMP JUMPDEST SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP1 DUP6 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x15BE JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x2F67 JUMPI POP PUSH2 0x154F SWAP3 POP SUB DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x3 PUSH0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0x2FAA JUMPI POP POP PUSH2 0x154F SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0x1542 JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0x2F93 JUMP JUMPDEST CALLVALUE PUSH2 0x2E3 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x2E3 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x2E3 JUMPI PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP3 EQ DUP2 MSTORE RETURN JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x2E3 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x2E3 JUMPI JUMP JUMPDEST PUSH1 0x80 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x665 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x665 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0xE0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x665 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH2 0x140 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x665 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x665 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x665 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x665 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x317C JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x316E JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x2E3 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x31AA DUP2 PUSH2 0x3145 JUMP JUMPDEST SWAP4 PUSH2 0x31B8 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x3122 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x2E3 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x31E1 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x31D3 JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x2E3 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x665 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x3225 PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP7 ADD AND ADD DUP6 PUSH2 0x3122 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x2E3 JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x2E3 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x2E3 JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x2E3 JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x32A7 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x3299 JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x32DB JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x334F JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x3322 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x3317 JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x2E3 JUMPI JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 MLOAD DUP2 LT ISZERO PUSH2 0x2DC6 JUMPI PUSH1 0x5 SHL PUSH8 0xDE0B6B3A7640020 ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x2DC6 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x2E3 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x33B6 DUP2 PUSH2 0x3145 JUMP JUMPDEST SWAP4 PUSH2 0x33C4 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x3122 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x2E3 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x33ED JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x2E3 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x33DF JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x2E3 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x343F SWAP3 ADD PUSH2 0x339B JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x2E3 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x345D DUP2 PUSH2 0x3145 JUMP JUMPDEST SWAP4 PUSH2 0x346B PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x3122 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x2E3 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x3494 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x3486 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xE4DC2AA400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x60B JUMPI PUSH0 SWAP2 PUSH2 0x351F JUMPI POP SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x3546 JUMPI JUMPDEST DUP2 PUSH2 0x353A PUSH1 0x20 SWAP4 DUP4 PUSH2 0x3122 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x2E3 JUMPI MLOAD SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x352D JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0x2E3 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x2E3 JUMPI SWAP1 JUMP JUMPDEST DUP1 SWAP2 SUB SWAP1 PUSH2 0x1A0 DUP3 SLT PUSH2 0x2E3 JUMPI PUSH1 0x80 PUSH1 0x40 MLOAD SWAP3 PUSH2 0x3596 DUP5 PUSH2 0x30E9 JUMP JUMPDEST SLT PUSH2 0x2E3 JUMPI PUSH1 0x40 MLOAD PUSH2 0x35A7 DUP2 PUSH2 0x3095 JUMP JUMPDEST PUSH2 0x35B0 DUP3 PUSH2 0x3359 JUMP JUMPDEST DUP2 MSTORE PUSH2 0x35BE PUSH1 0x20 DUP4 ADD PUSH2 0x3359 JUMP JUMPDEST PUSH1 0x20 DUP3 ADD MSTORE PUSH2 0x35CF PUSH1 0x40 DUP4 ADD PUSH2 0x3359 JUMP JUMPDEST PUSH1 0x40 DUP3 ADD MSTORE PUSH2 0x35E0 PUSH1 0x60 DUP4 ADD PUSH2 0x3359 JUMP JUMPDEST PUSH1 0x60 DUP3 ADD MSTORE DUP3 MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x60 DUP4 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x2E3 JUMPI PUSH1 0x80 DUP4 ADD MSTORE PUSH2 0x100 SWAP1 DUP2 DUP2 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x2E3 JUMPI PUSH2 0x367C SWAP2 PUSH2 0x180 SWAP2 PUSH1 0xA0 DUP7 ADD MSTORE PUSH2 0x120 SWAP4 PUSH2 0x364E DUP6 DUP4 ADD PUSH2 0x3359 JUMP JUMPDEST PUSH1 0xC0 DUP8 ADD MSTORE PUSH2 0x3660 PUSH2 0x140 DUP4 ADD PUSH2 0x3359 JUMP JUMPDEST PUSH1 0xE0 DUP8 ADD MSTORE PUSH2 0x3672 PUSH2 0x160 DUP4 ADD PUSH2 0x3359 JUMP JUMPDEST SWAP1 DUP7 ADD MSTORE ADD PUSH2 0x3359 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x2E3 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2E3 JUMPI PUSH2 0x343F SWAP3 ADD PUSH2 0x3442 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x36E8 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x2 DUP2 LT PUSH2 0x3744 JUMPI PUSH32 0xC1AB6DC100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x3755 SWAP1 PUSH2 0x3750 PUSH2 0x3AA3 JUMP JUMPDEST PUSH2 0x3387 JUMP JUMPDEST MLOAD SWAP1 JUMP JUMPDEST PUSH32 0x0 TIMESTAMP LT ISZERO DUP1 PUSH2 0x3785 JUMPI SWAP1 JUMP JUMPDEST POP PUSH32 0x0 TIMESTAMP GT ISZERO SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND ADDRESS EQ DUP1 PUSH2 0x38BC JUMPI JUMPDEST ISZERO PUSH2 0x3815 JUMPI PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP3 MSTORE PUSH32 0x0 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x665 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST POP PUSH32 0x0 CHAINID EQ PUSH2 0x37EC JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x6 SLOAD AND CALLER SUB PUSH2 0x1AE1 JUMPI JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 MLOAD PUSH2 0x391D PUSH1 0x60 DUP4 ADD SWAP2 DUP3 MLOAD SWAP1 PUSH2 0x3387 JUMP JUMPDEST MLOAD SWAP3 MLOAD SWAP2 PUSH2 0x3931 PUSH1 0x80 DUP3 ADD SWAP4 DUP5 MLOAD SWAP1 PUSH2 0x3387 JUMP JUMPDEST MLOAD SWAP2 DUP2 MLOAD PUSH2 0x393E DUP2 PUSH2 0x32D1 JUMP JUMPDEST PUSH2 0x3947 DUP2 PUSH2 0x32D1 JUMP JUMPDEST PUSH2 0x39F2 JUMPI PUSH2 0x3961 PUSH2 0x395A PUSH1 0x20 SWAP3 MLOAD PUSH2 0x3714 JUMP JUMPDEST SWAP5 MLOAD PUSH2 0x3714 JUMP JUMPDEST SWAP2 ADD MLOAD PUSH8 0xDE0B6B3A7640000 SWAP5 DUP6 PUSH2 0x3978 DUP3 PUSH2 0x3BC7 JUMP JUMPDEST DIV DUP3 GT PUSH2 0x39CA JUMPI PUSH2 0x398C PUSH2 0x3992 SWAP3 DUP3 PUSH2 0x3C18 JUMP JUMPDEST SWAP1 PUSH2 0x4095 JUMP JUMPDEST DUP5 DUP5 MUL SWAP4 DUP1 DUP6 DIV DUP7 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x133C JUMPI PUSH2 0x39B3 PUSH2 0x39B9 SWAP3 PUSH2 0x39C6 SWAP6 PUSH2 0x3C0E JUMP JUMPDEST SWAP1 PUSH2 0x3C25 JUMP JUMPDEST DUP4 DUP2 DUP2 SUB SWAP2 LT MUL SWAP1 PUSH2 0x3BFB JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST PUSH32 0x340A453300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x3A0C PUSH2 0x3A05 PUSH1 0x20 SWAP3 SWAP6 SWAP4 SWAP5 SWAP6 MLOAD PUSH2 0x3714 JUMP JUMPDEST SWAP3 MLOAD PUSH2 0x3714 JUMP JUMPDEST SWAP3 ADD MLOAD PUSH8 0xDE0B6B3A7640000 PUSH2 0x3A21 DUP6 PUSH2 0x3BC7 JUMP JUMPDEST DIV DUP2 GT PUSH2 0x3A7B JUMPI DUP4 SUB SWAP1 DUP4 DUP3 GT PUSH2 0x133C JUMPI PUSH2 0x3A42 PUSH2 0x39B3 SWAP3 PUSH2 0x3A48 SWAP6 PUSH2 0x4095 JUMP JUMPDEST SWAP3 PUSH2 0x4095 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21F494C589C0000 DUP2 ADD SWAP1 DUP2 GT PUSH2 0x133C JUMPI PUSH2 0x343F SWAP2 PUSH2 0x3CB0 JUMP JUMPDEST PUSH32 0x64590B9F00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x3AAF DUP2 PUSH2 0x30B1 JUMP JUMPDEST PUSH1 0x2 DUP2 MSTORE PUSH1 0x40 CALLDATASIZE PUSH1 0x20 DUP4 ADD CALLDATACOPY PUSH2 0x3B85 PUSH2 0x3B52 PUSH2 0x3B0B PUSH32 0x0 PUSH32 0x0 PUSH2 0x4A21 JUMP JUMPDEST PUSH32 0x0 PUSH32 0x0 PUSH2 0x4A66 JUMP JUMPDEST PUSH32 0x0 SWAP1 PUSH2 0x3B7E DUP3 DUP6 PUSH2 0x3387 JUMP JUMPDEST MSTORE DUP3 PUSH2 0x3387 JUMP JUMPDEST MLOAD PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 SUB SWAP1 DUP2 GT PUSH2 0x133C JUMPI PUSH2 0x3BC3 PUSH32 0x0 DUP4 PUSH2 0x3387 JUMP JUMPDEST MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH8 0x429D069189E0000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x133C JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x2710 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x133C JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x133C JUMPI JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2710 JUMPI DIV SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x133C JUMPI JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 SUB PUSH2 0x3C3C JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x3C57 JUMPI POP POP DUP1 PUSH2 0x343F SWAP2 PUSH2 0x3CB0 JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x3C7B JUMPI POP POP PUSH2 0x3C75 DUP2 PUSH2 0x343F SWAP3 PUSH2 0x3CB0 JUMP JUMPDEST DUP1 PUSH2 0x3CB0 JUMP JUMPDEST PUSH2 0x3C85 SWAP2 SWAP3 PUSH2 0x40EA JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH2 0x3C91 DUP4 PUSH2 0x3BE4 JUMP JUMPDEST SWAP2 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH1 0x1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x133C JUMPI PUSH2 0x343F SWAP2 PUSH2 0x3C18 JUMP JUMPDEST SWAP1 PUSH2 0x3CBA SWAP2 PUSH2 0x3BFB JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x3D26 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x3CFE JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x3CF4 DUP4 PUSH2 0x3106 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH32 0xB3512B0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH0 SLOAD SWAP2 PUSH2 0x3D38 DUP4 PUSH2 0x3308 JUMP JUMPDEST DUP1 DUP4 MSTORE SWAP3 PUSH1 0x20 SWAP1 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x3DC1 JUMPI POP PUSH1 0x1 EQ PUSH2 0x3D63 JUMPI JUMPDEST POP POP PUSH2 0x343F SWAP3 POP SUB DUP3 PUSH2 0x3122 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x3DA9 JUMPI POP PUSH2 0x343F SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x3D55 JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x3D8E JUMP JUMPDEST SWAP1 POP PUSH1 0x20 SWAP4 POP PUSH2 0x343F SWAP6 SWAP3 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP2 POP AND DUP3 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x3D55 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x3E26 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x3CFE JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x3CF4 DUP4 PUSH2 0x3106 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD PUSH2 0x3E3B DUP2 PUSH2 0x3308 JUMP JUMPDEST DUP1 DUP5 MSTORE SWAP4 PUSH1 0x20 SWAP2 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x3DC1 JUMPI POP PUSH1 0x1 EQ PUSH2 0x3E63 JUMPI POP POP PUSH2 0x343F SWAP3 POP SUB DUP3 PUSH2 0x3122 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x3EAA JUMPI POP PUSH2 0x343F SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x3D55 JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x3E8F JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 DUP1 DUP4 SUB PUSH2 0x3ED9 JUMPI POP SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 SWAP1 PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x3EF6 JUMPI POP POP DUP1 PUSH2 0x39C6 SWAP2 PUSH2 0x3BFB JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x3F1A JUMPI POP PUSH2 0x3F13 DUP3 PUSH2 0x39C6 SWAP4 PUSH2 0x3BFB JUMP JUMPDEST DIV DUP1 PUSH2 0x3BFB JUMP JUMPDEST SWAP1 POP PUSH2 0x3F25 SWAP2 PUSH2 0x40EA JUMP JUMPDEST PUSH2 0x3F2E DUP2 PUSH2 0x3BE4 JUMP JUMPDEST PUSH1 0x1 PUSH0 NOT SWAP4 DUP5 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 PUSH1 0x1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x133C JUMPI DUP2 LT ISZERO PUSH2 0x3F56 JUMPI POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SUB ADD SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP5 GT PUSH2 0x3FDF JUMPI SWAP2 PUSH1 0x20 SWAP4 PUSH1 0x80 SWAP3 PUSH1 0xFF PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND DUP7 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE DUP3 DUP1 MSTORE PUSH1 0x1 GAS STATICCALL ISZERO PUSH2 0x60B JUMPI PUSH0 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x3FD5 JUMPI SWAP1 PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 PUSH1 0x1 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP POP POP PUSH0 SWAP2 PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x32DB JUMPI DUP1 PUSH2 0x3FFC JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x402C JUMPI PUSH32 0xF645EEDF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x4060 JUMPI POP PUSH32 0xFCE698F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x3 EQ PUSH2 0x406A JUMPI POP JUMP JUMPDEST PUSH32 0xD78BCE0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x26BD JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x133C JUMPI PUSH1 0x1 SWAP1 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x2710 JUMPI PUSH15 0xC097CE7BC90715B34B9F1000000000 SDIV SWAP1 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2710 JUMPI SDIV SWAP1 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x4A13 JUMPI DUP2 ISZERO PUSH2 0x4A0D JUMPI DUP2 PUSH1 0xFF SHR PUSH2 0x49E5 JUMPI PUSH24 0xBCE5086492111AEA88F4BB1CA6BCF584181EA8059F76532 DUP2 LT ISZERO PUSH2 0x49BD JUMPI DUP2 PUSH8 0xC7D713B49DA0000 SLT DUP1 PUSH2 0x49AC JUMPI JUMPDEST ISZERO PUSH2 0x4649 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH15 0xC097CE7BC90715B34B9F1000000000 SWAP1 PUSH2 0x4183 SWAP1 DUP5 MUL DUP3 DUP2 ADD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F68318436F8EA4CB460F000000000 ADD DUP4 MUL PUSH2 0x40E0 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV DUP4 DUP6 DUP3 MUL SDIV SWAP2 DUP5 DUP7 DUP5 MUL SDIV SWAP4 DUP6 DUP8 DUP7 MUL SDIV SWAP6 DUP1 DUP9 DUP9 MUL SDIV SWAP8 DUP9 MUL SDIV PUSH1 0xF SWAP1 SDIV SWAP7 PUSH1 0xD SWAP1 SDIV SWAP6 PUSH1 0xB SWAP1 SDIV SWAP5 PUSH1 0x9 SWAP1 SDIV SWAP4 PUSH1 0x7 SWAP1 SDIV SWAP3 PUSH1 0x5 SWAP1 SDIV SWAP2 PUSH1 0x3 SWAP1 SDIV ADD ADD ADD ADD ADD ADD ADD PUSH1 0x1 SHL SWAP2 DUP1 DUP3 DUP2 DUP6 SMOD MUL SDIV SWAP3 SDIV MUL ADD PUSH8 0xDE0B6B3A7640000 SWAP1 JUMPDEST SDIV PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC702BD3A30FC0000 DUP2 DUP2 SGT ISZERO DUP1 PUSH2 0x4636 JUMPI JUMPDEST ISZERO PUSH2 0x460E JUMPI DUP2 SWAP1 DUP3 SLT ISZERO DUP1 PUSH2 0x45FB JUMPI JUMPDEST ISZERO PUSH2 0x45D3 JUMPI PUSH0 SWAP2 PUSH0 DUP2 SLT PUSH2 0x45C4 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH9 0x6F05B59D3B2000000 DUP2 SLT PUSH2 0x4561 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90FA4A62C4E000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP3 JUMPDEST MUL DUP2 SWAP1 PUSH9 0xAD78EBC5AC62000000 DUP2 SLT ISZERO PUSH2 0x4528 JUMPI JUMPDEST PUSH9 0x56BC75E2D631000000 DUP2 SLT ISZERO PUSH2 0x44EE JUMPI JUMPDEST PUSH9 0x2B5E3AF16B18800000 DUP2 SLT ISZERO PUSH2 0x44B6 JUMPI JUMPDEST PUSH9 0x15AF1D78B58C400000 DUP2 SLT ISZERO PUSH2 0x447E JUMPI JUMPDEST PUSH9 0xAD78EBC5AC6200000 DUP2 SLT ISZERO PUSH2 0x4447 JUMPI JUMPDEST DUP3 DUP2 SLT ISZERO PUSH2 0x4410 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B1880000 DUP2 SLT ISZERO PUSH2 0x43D9 JUMPI JUMPDEST PUSH9 0x15AF1D78B58C40000 DUP2 SLT ISZERO PUSH2 0x43A2 JUMPI JUMPDEST PUSH1 0x2 DUP4 DUP3 DUP1 MUL SDIV SDIV PUSH1 0x3 DUP5 DUP4 DUP4 MUL SDIV SDIV PUSH1 0x4 DUP6 DUP5 DUP4 MUL SDIV SDIV DUP6 PUSH1 0x5 DUP2 DUP7 DUP5 MUL SDIV SDIV PUSH1 0x6 DUP3 DUP8 DUP4 MUL SDIV SDIV PUSH1 0x7 DUP4 DUP9 DUP4 MUL SDIV SDIV SWAP1 PUSH1 0x8 DUP5 DUP10 DUP5 MUL SDIV SDIV SWAP3 PUSH1 0x9 DUP6 DUP11 DUP7 MUL SDIV SDIV SWAP6 PUSH1 0xA DUP7 DUP12 DUP10 MUL SDIV SDIV SWAP8 PUSH1 0xB DUP8 DUP13 DUP12 MUL SDIV SDIV SWAP10 PUSH1 0xC DUP9 DUP14 DUP14 MUL SDIV SDIV SWAP12 ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD MUL SDIV MUL SDIV SWAP1 PUSH0 EQ PUSH2 0x343F JUMPI PUSH2 0x343F SWAP1 PUSH2 0x40C6 JUMP JUMPDEST PUSH9 0x6F5F1775788937937 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C0000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x4323 JUMP JUMPDEST PUSH9 0x8F00F760A4B2DB55D PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E780000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x4311 JUMP JUMPDEST PUSH9 0xEBC5FB41746121110 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x42FF JUMP JUMPDEST PUSH9 0x280E60114EDB805D03 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x42F6 JUMP JUMPDEST PUSH10 0x127FA27722CC06CC5E2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x42E4 JUMP JUMPDEST PUSH10 0x3F1FCE3DA636EA5CF850 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E7800000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x42D2 JUMP JUMPDEST PUSH12 0x2DF0AB5A80A22C61AB5A700 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF000000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x42C0 JUMP JUMPDEST PUSH15 0x1855144814A7FF805980FF0084000 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E000000 ADD PUSH2 0x42AE JUMP JUMPDEST PUSH9 0x3782DACE9D9000000 DUP2 SLT PUSH2 0x45B1 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC87D2531627000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH12 0x1425982CF597CD205CEF7380 SWAP3 PUSH2 0x4299 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP3 PUSH1 0x1 SWAP3 PUSH2 0x4299 JUMP JUMPDEST PUSH1 0x1 SWAP3 POP PUSH0 SUB SWAP1 POP PUSH1 0x64 PUSH2 0x423D JUMP JUMPDEST PUSH32 0xD4794EFD00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x422E JUMP JUMPDEST PUSH32 0xA2F9F7E300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x421E JUMP JUMPDEST DUP2 PUSH8 0xDE0B6B3A7640000 SWAP3 PUSH0 SWAP2 DUP5 DUP2 SLT PUSH2 0x4996 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH0 PUSH31 0x1600EF3172E58D2E933EC884FDE10064C63B5372D805E203C0000000000000 DUP3 SLT ISZERO PUSH2 0x496B JUMPI JUMPDEST PUSH20 0x11798004D755D3C8BC8E03204CF44619E000000 DUP3 SLT ISZERO PUSH2 0x494A JUMPI JUMPDEST DUP3 MUL SWAP1 DUP1 DUP4 MUL SWAP1 PUSH15 0x1855144814A7FF805980FF0084000 SWAP1 DUP2 DUP4 SLT ISZERO PUSH2 0x4927 JUMPI JUMPDEST POP POP PUSH12 0x2DF0AB5A80A22C61AB5A700 DUP1 DUP3 SLT ISZERO PUSH2 0x4907 JUMPI JUMPDEST POP PUSH10 0x3F1FCE3DA636EA5CF850 DUP1 DUP3 SLT ISZERO PUSH2 0x48E7 JUMPI JUMPDEST POP PUSH10 0x127FA27722CC06CC5E2 DUP1 DUP3 SLT ISZERO PUSH2 0x48C7 JUMPI JUMPDEST POP PUSH9 0x280E60114EDB805D03 DUP1 DUP3 SLT ISZERO PUSH2 0x48A7 JUMPI JUMPDEST POP PUSH9 0xEBC5FB41746121110 DUP1 DUP3 SLT ISZERO PUSH2 0x4890 JUMPI JUMPDEST POP PUSH9 0x8F00F760A4B2DB55D DUP1 DUP3 SLT ISZERO PUSH2 0x4870 JUMPI JUMPDEST POP PUSH9 0x6F5F1775788937937 DUP1 DUP3 SLT ISZERO PUSH2 0x4850 JUMPI JUMPDEST POP PUSH9 0x6248F33704B286603 DUP1 DUP3 SLT ISZERO PUSH2 0x4831 JUMPI JUMPDEST POP PUSH9 0x5C548670B9510E7AC DUP1 DUP3 SLT ISZERO PUSH2 0x4812 JUMPI JUMPDEST POP PUSH2 0x47BF PUSH9 0x56BC75E2D63100000 SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP2 DUP4 ADD SWAP3 ADD MUL PUSH2 0x40E0 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV SWAP2 PUSH1 0x3 PUSH1 0x5 PUSH1 0x7 PUSH1 0x9 PUSH1 0xB DUP9 DUP11 DUP10 MUL SDIV SWAP9 DUP1 DUP12 DUP12 MUL SDIV SWAP11 DUP12 MUL SDIV SDIV SWAP9 SDIV SWAP7 SDIV SWAP5 SDIV SWAP3 SDIV ADD ADD ADD ADD ADD PUSH1 0x1 SHL ADD SDIV SWAP1 PUSH0 EQ PUSH2 0x480D JUMPI PUSH0 SUB JUMPDEST MUL PUSH2 0x41F2 JUMP JUMPDEST PUSH2 0x4807 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0x56BC75E2D6310000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x4783 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0xAD78EBC5AC620000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x476F JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C40000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x475B JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B1880000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x4747 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP1 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x4733 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0xAD78EBC5AC6200000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x471F JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C400000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x470B JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B18800000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x46F6 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x56BC75E2D631000000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x46E1 JUMP JUMPDEST PUSH9 0xAD78EBC5AC62000000 SWAP3 POP PUSH10 0x21E19E0C9BAB2400000 MUL SDIV SWAP2 ADD SWAP1 PUSH0 DUP1 PUSH2 0x46C9 JUMP JUMPDEST SWAP1 PUSH12 0x1425982CF597CD205CEF7380 PUSH9 0x3782DACE9D9000000 SWAP2 SDIV SWAP2 ADD PUSH2 0x46A8 JUMP JUMPDEST POP PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP1 SDIV PUSH9 0x6F05B59D3B2000000 PUSH2 0x468B JUMP JUMPDEST SWAP1 POP PUSH2 0x49A2 SWAP2 POP PUSH2 0x40C6 JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x64 PUSH2 0x465E JUMP JUMPDEST POP PUSH8 0xF43FC2C04EE0000 DUP3 SLT PUSH2 0x4130 JUMP JUMPDEST PUSH32 0xD831731100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x22701E000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP JUMPDEST TIMESTAMP DUP3 GT PUSH2 0x4A36 JUMPI POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP JUMPDEST DUP1 TIMESTAMP GT ISZERO PUSH2 0x4A0D JUMPI DUP1 TIMESTAMP SUB SWAP1 PUSH8 0xDE0B6B3A7640000 DUP1 DUP4 MUL SWAP3 DUP4 DIV EQ DUP2 TIMESTAMP EQ OR ISZERO PUSH2 0x133C JUMPI PUSH2 0x343F SWAP3 SUB SWAP1 PUSH2 0x3C0E JUMP JUMPDEST SWAP2 SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 LT DUP1 ISZERO SWAP1 PUSH2 0x4ABF JUMPI JUMPDEST PUSH2 0x4AB8 JUMPI DUP1 ISZERO PUSH2 0x4AB2 JUMPI DUP4 DUP3 DUP2 GT ISZERO PUSH2 0x4AA2 JUMPI SWAP2 PUSH2 0x4A9C SWAP3 SUB SWAP1 PUSH2 0x3BFB JUMP JUMPDEST DIV SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH2 0x4AAD SWAP3 SUB SWAP1 PUSH2 0x3BFB JUMP JUMPDEST DIV ADD SWAP1 JUMP JUMPDEST POP POP POP SWAP1 JUMP JUMPDEST POP SWAP2 POP POP SWAP1 JUMP JUMPDEST POP DUP2 DUP5 EQ PUSH2 0x4A7D JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP15 0x4F 0xB2 0xB2 CREATE2 DUP13 LOG4 MLOAD 0xFB 0xB1 0xCC 0xD3 MULMOD 0x1E 0xDB 0xD 0xC3 0xC8 DUP9 0xD6 PUSH30 0x9E60EC791F1BEC06A724DA64736F6C634300081B0033C2575A0E9E593C00 0xF9 MSIZE 0xF8 0xC9 0x2F SLT 0xDB 0x28 PUSH10 0xC3395A3B0502D05E2516 PREVRANDAO PUSH16 0x71F85B8A35ACFBC15FF81A39AE7D344F 0xD7 MULMOD CALLCODE DUP15 DUP7 STOP 0xB4 0xAA DUP13 PUSH6 0xC6B64BFE7FE3 PUSH12 0xD19B00000000000000000000 ","sourceMap":"1150:4578:125:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;1150:4578:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1150:4578:125;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2465:25;;;;;;;:::i;:::-;;;;;;;;;;971:4:67;1150:4578:125;1347:46:37;1150:4578:125;923:14:40;1461:15:42;1150:4578:125;1461:15:42;;;1150:4578:125;;;1513:35:42;;;1509:106;;1625:42;;1150:4578:125;1735:53:42;;1150:4578:125;;;;;;;;3534:28:35;1150:4578:125;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;1150:4578:125;;;;;;;;;;;;;-1:-1:-1;;1150:4578:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1156:21:48;1150:4578:125;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1150:4578:125;;;;;;;;;;;;;;;;;;;;;;;;2530:27;2526:87;;2816:30;;;;1150:4578;;;;;;;2857:26;;1150:4578;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1150:4578:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1625:42:42;1150:4578:125;;;;;1735:53:42;1150:4578:125;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1150:4578:125;;;;;;;;;;;;;-1:-1:-1;1150:4578:125;;-1:-1:-1;1150:4578:125;;-1:-1:-1;1150:4578:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1150:4578:125;;-1:-1:-1;1150:4578:125;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;1150:4578:125;;;-1:-1:-1;1150:4578:125;2526:87;-1:-1:-1;;;;2580:22:125;;;;1150:4578;;;;;;;;-1:-1:-1;1150:4578:125;;-1:-1:-1;1150:4578:125;;-1:-1:-1;1150:4578:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1150:4578:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1150:4578:125;;-1:-1:-1;1150:4578:125;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;1150:4578:125;;1156:21:48;1150:4578:125;;-1:-1:-1;1150:4578:125;;;;;;;;;-1:-1:-1;1150:4578:125;;-1:-1:-1;1150:4578:125;;-1:-1:-1;1150:4578:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1150:4578:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1150:4578:125;;-1:-1:-1;1150:4578:125;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;1509:106:42;1571:33;;;-1:-1:-1;1571:33:42;;-1:-1:-1;1571:33:42;1150:4578:125;;;;-1:-1:-1;1150:4578:125;;;;;-1:-1:-1;1150:4578:125;;-1:-1:-1;1150:4578:125;;;;;;;;;-1:-1:-1;;1150:4578:125;;;-1:-1:-1;;;;;1150:4578:125;;;;;;;;;;:::o;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1150:4578:125;;;;;;;;-1:-1:-1;;1150:4578:125;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;1150:4578:125;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_available_length_bytes":{"entryPoint":5187,"id":null,"parameterSlots":3,"returnSlots":1},"abi_decode_contract_IAuthorizer_fromMemory":{"entryPoint":6011,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_string":{"entryPoint":5338,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_address_dyn":{"entryPoint":5257,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_bytes_storage":{"entryPoint":5680,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_string":{"entryPoint":5087,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string_storage":{"entryPoint":5502,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_struct_LiquidityManagement":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":0},"allocate_and_zero_memory_struct_struct_LiquidityManagement":{"entryPoint":5368,"id":null,"parameterSlots":0,"returnSlots":1},"array_allocation_size_array_address_dyn":{"entryPoint":5833,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_uint256":{"entryPoint":5820,"id":null,"parameterSlots":2,"returnSlots":1},"extract_byte_array_length":{"entryPoint":5421,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":5152,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_18920":{"entryPoint":5124,"id":null,"parameterSlots":1,"returnSlots":0},"fun_computeFinalSalt":{"entryPoint":6162,"id":5189,"parameterSlots":1,"returnSlots":1},"fun_ensureEnabled":{"entryPoint":6110,"id":5144,"parameterSlots":0,"returnSlots":0},"fun_getActionId":{"entryPoint":5910,"id":5487,"parameterSlots":1,"returnSlots":1},"fun_getNewPoolPauseWindowEndTime":{"entryPoint":6055,"id":5891,"parameterSlots":0,"returnSlots":1},"storage_array_index_access_address_dyn":{"entryPoint":5857,"id":null,"parameterSlots":1,"returnSlots":2}},"generatedSources":[],"immutableReferences":{"5427":[{"length":32,"start":5953}],"5654":[{"length":32,"start":539},{"length":32,"start":733},{"length":32,"start":1819},{"length":32,"start":2403},{"length":32,"start":2700},{"length":32,"start":4682}],"5820":[{"length":32,"start":880}],"5822":[{"length":32,"start":297},{"length":32,"start":6057}],"47420":[{"length":32,"start":419},{"length":32,"start":1880}]},"linkReferences":{},"object":"60806040526004361015610011575f80fd5b5f5f358060e01c908163193ad50f146113905781632f2770db146111c9575080633f819b6f1461118b57806344f6fec7146110d157806353a72f7e14610f7357806354fd4d5014610e955780636634b75314610e49578063673a2a1f14610daa5780636c57f5a914610d8857806374b3dafe1461039457806378da80cb14610353578063851c1bb3146103015780638d928af8146102b05780638eec5d7014610292578063aaabadc5146101c7578063af905d1514610176578063db035ebc1461014d578063e9d56e191461010c5763ec888061146100ee575f80fd5b34610109578060031936011261010957602090604051908152f35b80fd5b5034610109578060031936011261010957602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461010957806003193601126101095760206101686117a7565b63ffffffff60405191168152f35b5034610109578060031936011261010957602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346101095780600319360112610109576040517faaabadc500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff6020826004817f000000000000000000000000000000000000000000000000000000000000000085165afa9182156102875760209392610258575b5060405191168152f35b610279919250833d8511610280575b6102718183611420565b81019061177b565b905f61024e565b503d610267565b6040513d85823e3d90fd5b50346101095780600319360112610109576020600154604051908152f35b5034610109578060031936011261010957602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461010957602060031936011261010957600435907fffffffff000000000000000000000000000000000000000000000000000000008216820361010957602061034b83611716565b604051908152f35b5034610109578060031936011261010957602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5034610be5576101c0600319360112610be55760043567ffffffffffffffff8111610be5576103c79036906004016114da565b60243567ffffffffffffffff8111610be5576103e79036906004016114da565b916101407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc360112610be55760405191610140830183811067ffffffffffffffff821117610b035760405260443573ffffffffffffffffffffffffffffffffffffffff81168103610be557835260643573ffffffffffffffffffffffffffffffffffffffff81168103610be557602084015260843573ffffffffffffffffffffffffffffffffffffffff81168103610be557604084015260a435606084015260c435608084015260e43560a08401526101043560c08401526101243560e084015261014435610100840152610164358015158103610be5576101208401527f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c610d605760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d73ffffffffffffffffffffffffffffffffffffffff83511615610d38576040519384606081011067ffffffffffffffff606087011117610b0357606085016040525f85525f60208601525f604086015273ffffffffffffffffffffffffffffffffffffffff845116602086015260e0840151610100850151906060860151608087015160a08801519160c089015190662386f26fc10000808210908115610d2e575b8115610d24575b8115610d1a575b50610cf2576105f8670de0b6b3a76400009384926116bc565b1492831593610cdd575b505050610cb5578042115f14610cb05750425b81811015610c825750506106469161079061065861079e936040519586946101e060208701526102008601906113df565b90601f198583030160408601526113df565b73ffffffffffffffffffffffffffffffffffffffff875116606084015273ffffffffffffffffffffffffffffffffffffffff602088015116608084015273ffffffffffffffffffffffffffffffffffffffff60408801511660a0840152606087015160c0840152608087015160e084015260a087015161010084015260c087015161012084015260e0870151610140840152610100870151610160840152610120870151151561018084015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166101a084015273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166101c0840152601f19838203016101e084015261157e565b03601f198101835282611420565b604051906107d0826020808201936107b585611630565b90805192839101825e015f815203601f198101845283611420565b6107dc6101a435611812565b90825115610c5a5773ffffffffffffffffffffffffffffffffffffffff9251905ff516918215610c325761080e6117de565b825f525f60205260405f20600160ff1982541617905560015468010000000000000000811015610b035780600161084892016001556116e1565b81549060031b9073ffffffffffffffffffffffffffffffffffffffff86831b921b1916179055827f83a48fbcfc991335314e74d0496aab6a1987e992ddc85dddbcc4d6dd6ef2e9fc5f80a273ffffffffffffffffffffffffffffffffffffffff604081602084015116920151168082857f6b01c8c0b16cf8e7a1a9158019b5fe7d40b415d756710eb0fdcb577701dfee845f80a4604051916108e983611404565b600283525f5b60408110610c1b575081811015610c1657905b825115610be957602083015191835160011015610be957604084015173ffffffffffffffffffffffffffffffffffffffff92831690521690526109436114f8565b61094b6117a7565b9473ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163b15610be5579490916040519586927feeec802f0000000000000000000000000000000000000000000000000000000084526101a484018760048601526101a06024860152835180915260206101c486019401905f5b818110610b3b575050505f9473ffffffffffffffffffffffffffffffffffffffff604086959463ffffffff610a72956101843560448a01521660648801528860848801528281511660a48801528260208201511660c488015201511660e4850152876101048501526101248401906060809180511515845260208101511515602085015260408101511515604085015201511515910152565b03818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610b3057610ae7575b602092507f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d604051908152f35b5067ffffffffffffffff8211610b03576020916040525f610ab9565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040513d5f823e3d90fd5b918097965094909293945173ffffffffffffffffffffffffffffffffffffffff81511682526020810151906002821015610bb85782606060809260209485600197015273ffffffffffffffffffffffffffffffffffffffff60408201511660408401520151151560608201520197019101918995969493926109d9565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b610902565b602090610c266114f8565b828287010152016108ef565b7f741752c2000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4ca249dc000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f7d0356f3000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b610615565b7f39cf114e000000000000000000000000000000000000000000000000000000005f5260045ffd5b610ce89293506116bc565b14155f8080610602565b7fbd393583000000000000000000000000000000000000000000000000000000005f5260045ffd5b905082105f6105df565b80861091506105d8565b80851091506105d1565b7f49e27cff000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610be5575f600319360112610be557602060ff600254166040519015158152f35b34610be5575f600319360112610be557604051806001916001549283825260208092019360015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6925f905b828210610e1e57610e1a86610e0e818a0382611420565b60405191829182611489565b0390f35b845473ffffffffffffffffffffffffffffffffffffffff168752958601959383019390830190610df7565b34610be5576020600319360112610be55760043573ffffffffffffffffffffffffffffffffffffffff8116809103610be5575f525f602052602060ff60405f2054166040519015158152f35b34610be5575f600319360112610be5576040516004545f82610eb68361152d565b91828252602093600190856001821691825f14610f53575050600114610ef8575b50610ee492500383611420565b610e1a6040519282849384528301906113df565b84915060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b905f915b858310610f3b575050610ee4935082010185610ed7565b80548389018501528794508693909201918101610f24565b60ff191685820152610ee495151560051b8501019250879150610ed79050565b34610be5576040600319360112610be55760043560248035600192600154808210156110a95780610fa484846116bc565b11611068575b50610fb4826116c9565b92610fc26040519485611420565b828452610fce836116c9565b91601f19602093013660208701375f5b848110610ff35760405180610e1a8882611489565b61100561100082846116bc565b6116e1565b905490875183101561103c5760031b1c73ffffffffffffffffffffffffffffffffffffffff16600582901b87018501528601610fde565b847f4e487b71000000000000000000000000000000000000000000000000000000005f5260326004525ffd5b90809250810390811161107c579084610faa565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7f4e23d035000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610be5576040600319360112610be55760043567ffffffffffffffff8111610be55736602382011215610be5576055600b6111196020933690602481600401359101611443565b60405161114981868082019461112e86611630565b90805192839101825e015f815203601f198101835282611420565b519020611157602435611812565b604051916040830152848201523081520160ff81532073ffffffffffffffffffffffffffffffffffffffff60405191168152f35b34610be5575f600319360112610be557610e1a6040516111b5816111ae8161157e565b0382611420565b6040519182916020835260208301906113df565b34610be5575f600319360112610be5577fffffffff000000000000000000000000000000000000000000000000000000006112049116611716565b73ffffffffffffffffffffffffffffffffffffffff6040517faaabadc50000000000000000000000000000000000000000000000000000000081526020928382600481867f0000000000000000000000000000000000000000000000000000000000000000165afa908115610b305784925f9261136e575b5060649060405194859384927f9be2a8840000000000000000000000000000000000000000000000000000000084526004840152336024840152306044840152165afa918215610b30575f92611337575b50501561130f576112dc6117de565b600160ff1960025416176002557f432acbfd662dbb5d8b378384a67159b47ca9d0f1b79f97cf64cf8585fa362d505f80a1005b7f23dada53000000000000000000000000000000000000000000000000000000005f5260045ffd5b90809250813d8311611367575b61134e8183611420565b81010312610be557518015158103610be55781806112cd565b503d611344565b606491925061138990843d8611610280576102718183611420565b919061127c565b34610be5575f600319360112610be55760806113aa6114f8565b6113dd60405180926060809180511515845260208101511515602085015260408101511515604085015201511515910152565bf35b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6060810190811067ffffffffffffffff821117610b0357604052565b90601f601f19910116810190811067ffffffffffffffff821117610b0357604052565b92919267ffffffffffffffff8211610b03576040519161146d6020601f19601f8401160184611420565b829481845281830111610be5578281602093845f960137010152565b60209060206040818301928281528551809452019301915f5b8281106114b0575050505090565b835173ffffffffffffffffffffffffffffffffffffffff16855293810193928101926001016114a2565b9080601f83011215610be5578160206114f593359101611443565b90565b604051906080820182811067ffffffffffffffff821117610b03576040525f6060838281528260208201528260408201520152565b90600182811c92168015611574575b602083101461154757565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f169161153c565b6005545f929161158d8261152d565b8082529160209060019081811690811561160a57506001146115b0575b50505050565b9293945060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0925f935b8585106115f757505050602092500101905f8080806115aa565b80548585018401529382019381016115dd565b915050602094955060ff1991509291921683830152151560051b0101905f8080806115aa565b6003545f929161163f8261152d565b916001908181169081156116a9575060011461165a57505050565b909192935060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b905f915b848310611696575050500190565b8181602092548587015201920191611688565b60ff191683525050811515909102019150565b9190820180921161107c57565b67ffffffffffffffff8111610b035760051b60200190565b600154811015610be95760015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf601905f90565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060208201927f000000000000000000000000000000000000000000000000000000000000000084521660408201526024815261177581611404565b51902090565b90816020910312610be5575173ffffffffffffffffffffffffffffffffffffffff81168103610be55790565b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff81164210156117d95790565b505f90565b60ff600254166117ea57565b7f75884cda000000000000000000000000000000000000000000000000000000005f5260045ffd5b60405160208101913383524660408301526060820152606081526080810181811067ffffffffffffffff821117610b03576040525190209056fea2646970667358221220006d1de6f6076aeac96e8282c9bacc256c904818fa6bb6450ae37456bc2b765864736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 PUSH0 CALLDATALOAD DUP1 PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x193AD50F EQ PUSH2 0x1390 JUMPI DUP2 PUSH4 0x2F2770DB EQ PUSH2 0x11C9 JUMPI POP DUP1 PUSH4 0x3F819B6F EQ PUSH2 0x118B JUMPI DUP1 PUSH4 0x44F6FEC7 EQ PUSH2 0x10D1 JUMPI DUP1 PUSH4 0x53A72F7E EQ PUSH2 0xF73 JUMPI DUP1 PUSH4 0x54FD4D50 EQ PUSH2 0xE95 JUMPI DUP1 PUSH4 0x6634B753 EQ PUSH2 0xE49 JUMPI DUP1 PUSH4 0x673A2A1F EQ PUSH2 0xDAA JUMPI DUP1 PUSH4 0x6C57F5A9 EQ PUSH2 0xD88 JUMPI DUP1 PUSH4 0x74B3DAFE EQ PUSH2 0x394 JUMPI DUP1 PUSH4 0x78DA80CB EQ PUSH2 0x353 JUMPI DUP1 PUSH4 0x851C1BB3 EQ PUSH2 0x301 JUMPI DUP1 PUSH4 0x8D928AF8 EQ PUSH2 0x2B0 JUMPI DUP1 PUSH4 0x8EEC5D70 EQ PUSH2 0x292 JUMPI DUP1 PUSH4 0xAAABADC5 EQ PUSH2 0x1C7 JUMPI DUP1 PUSH4 0xAF905D15 EQ PUSH2 0x176 JUMPI DUP1 PUSH4 0xDB035EBC EQ PUSH2 0x14D JUMPI DUP1 PUSH4 0xE9D56E19 EQ PUSH2 0x10C JUMPI PUSH4 0xEC888061 EQ PUSH2 0xEE JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x20 PUSH2 0x168 PUSH2 0x17A7 JUMP JUMPDEST PUSH4 0xFFFFFFFF PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP3 PUSH1 0x4 DUP2 PUSH32 0x0 DUP6 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x287 JUMPI PUSH1 0x20 SWAP4 SWAP3 PUSH2 0x258 JUMPI JUMPDEST POP PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST PUSH2 0x279 SWAP2 SWAP3 POP DUP4 RETURNDATASIZE DUP6 GT PUSH2 0x280 JUMPI JUMPDEST PUSH2 0x271 DUP2 DUP4 PUSH2 0x1420 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x177B JUMP JUMPDEST SWAP1 PUSH0 PUSH2 0x24E JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x267 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE DUP6 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x20 PUSH1 0x1 SLOAD PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP3 SUB PUSH2 0x109 JUMPI PUSH1 0x20 PUSH2 0x34B DUP4 PUSH2 0x1716 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0x109 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x109 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH4 0xFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST POP CALLVALUE PUSH2 0xBE5 JUMPI PUSH2 0x1C0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xBE5 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xBE5 JUMPI PUSH2 0x3C7 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x14DA JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xBE5 JUMPI PUSH2 0x3E7 SWAP1 CALLDATASIZE SWAP1 PUSH1 0x4 ADD PUSH2 0x14DA JUMP JUMPDEST SWAP2 PUSH2 0x140 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC CALLDATASIZE ADD SLT PUSH2 0xBE5 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x140 DUP4 ADD DUP4 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xB03 JUMPI PUSH1 0x40 MSTORE PUSH1 0x44 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xBE5 JUMPI DUP4 MSTORE PUSH1 0x64 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xBE5 JUMPI PUSH1 0x20 DUP5 ADD MSTORE PUSH1 0x84 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xBE5 JUMPI PUSH1 0x40 DUP5 ADD MSTORE PUSH1 0xA4 CALLDATALOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0xC4 CALLDATALOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xE4 CALLDATALOAD PUSH1 0xA0 DUP5 ADD MSTORE PUSH2 0x104 CALLDATALOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH2 0x124 CALLDATALOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH2 0x144 CALLDATALOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH2 0x164 CALLDATALOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0xBE5 JUMPI PUSH2 0x120 DUP5 ADD MSTORE PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TLOAD PUSH2 0xD60 JUMPI PUSH1 0x1 PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 MLOAD AND ISZERO PUSH2 0xD38 JUMPI PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH1 0x60 DUP2 ADD LT PUSH8 0xFFFFFFFFFFFFFFFF PUSH1 0x60 DUP8 ADD GT OR PUSH2 0xB03 JUMPI PUSH1 0x60 DUP6 ADD PUSH1 0x40 MSTORE PUSH0 DUP6 MSTORE PUSH0 PUSH1 0x20 DUP7 ADD MSTORE PUSH0 PUSH1 0x40 DUP7 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP5 MLOAD AND PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0xE0 DUP5 ADD MLOAD PUSH2 0x100 DUP6 ADD MLOAD SWAP1 PUSH1 0x60 DUP7 ADD MLOAD PUSH1 0x80 DUP8 ADD MLOAD PUSH1 0xA0 DUP9 ADD MLOAD SWAP2 PUSH1 0xC0 DUP10 ADD MLOAD SWAP1 PUSH7 0x2386F26FC10000 DUP1 DUP3 LT SWAP1 DUP2 ISZERO PUSH2 0xD2E JUMPI JUMPDEST DUP2 ISZERO PUSH2 0xD24 JUMPI JUMPDEST DUP2 ISZERO PUSH2 0xD1A JUMPI JUMPDEST POP PUSH2 0xCF2 JUMPI PUSH2 0x5F8 PUSH8 0xDE0B6B3A7640000 SWAP4 DUP5 SWAP3 PUSH2 0x16BC JUMP JUMPDEST EQ SWAP3 DUP4 ISZERO SWAP4 PUSH2 0xCDD JUMPI JUMPDEST POP POP POP PUSH2 0xCB5 JUMPI DUP1 TIMESTAMP GT PUSH0 EQ PUSH2 0xCB0 JUMPI POP TIMESTAMP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xC82 JUMPI POP POP PUSH2 0x646 SWAP2 PUSH2 0x790 PUSH2 0x658 PUSH2 0x79E SWAP4 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP5 PUSH2 0x1E0 PUSH1 0x20 DUP8 ADD MSTORE PUSH2 0x200 DUP7 ADD SWAP1 PUSH2 0x13DF JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT DUP6 DUP4 SUB ADD PUSH1 0x40 DUP7 ADD MSTORE PUSH2 0x13DF JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP8 MLOAD AND PUSH1 0x60 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x20 DUP9 ADD MLOAD AND PUSH1 0x80 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP9 ADD MLOAD AND PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0x60 DUP8 ADD MLOAD PUSH1 0xC0 DUP5 ADD MSTORE PUSH1 0x80 DUP8 ADD MLOAD PUSH1 0xE0 DUP5 ADD MSTORE PUSH1 0xA0 DUP8 ADD MLOAD PUSH2 0x100 DUP5 ADD MSTORE PUSH1 0xC0 DUP8 ADD MLOAD PUSH2 0x120 DUP5 ADD MSTORE PUSH1 0xE0 DUP8 ADD MLOAD PUSH2 0x140 DUP5 ADD MSTORE PUSH2 0x100 DUP8 ADD MLOAD PUSH2 0x160 DUP5 ADD MSTORE PUSH2 0x120 DUP8 ADD MLOAD ISZERO ISZERO PUSH2 0x180 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0x1A0 DUP5 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND PUSH2 0x1C0 DUP5 ADD MSTORE PUSH1 0x1F NOT DUP4 DUP3 SUB ADD PUSH2 0x1E0 DUP5 ADD MSTORE PUSH2 0x157E JUMP JUMPDEST SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x1420 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH2 0x7D0 DUP3 PUSH1 0x20 DUP1 DUP3 ADD SWAP4 PUSH2 0x7B5 DUP6 PUSH2 0x1630 JUMP JUMPDEST SWAP1 DUP1 MLOAD SWAP3 DUP4 SWAP2 ADD DUP3 MCOPY ADD PUSH0 DUP2 MSTORE SUB PUSH1 0x1F NOT DUP2 ADD DUP5 MSTORE DUP4 PUSH2 0x1420 JUMP JUMPDEST PUSH2 0x7DC PUSH2 0x1A4 CALLDATALOAD PUSH2 0x1812 JUMP JUMPDEST SWAP1 DUP3 MLOAD ISZERO PUSH2 0xC5A JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 MLOAD SWAP1 PUSH0 CREATE2 AND SWAP2 DUP3 ISZERO PUSH2 0xC32 JUMPI PUSH2 0x80E PUSH2 0x17DE JUMP JUMPDEST DUP3 PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 PUSH1 0x1 PUSH1 0xFF NOT DUP3 SLOAD AND OR SWAP1 SSTORE PUSH1 0x1 SLOAD PUSH9 0x10000000000000000 DUP2 LT ISZERO PUSH2 0xB03 JUMPI DUP1 PUSH1 0x1 PUSH2 0x848 SWAP3 ADD PUSH1 0x1 SSTORE PUSH2 0x16E1 JUMP JUMPDEST DUP2 SLOAD SWAP1 PUSH1 0x3 SHL SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP7 DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 SSTORE DUP3 PUSH32 0x83A48FBCFC991335314E74D0496AAB6A1987E992DDC85DDDBCC4D6DD6EF2E9FC PUSH0 DUP1 LOG2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP2 PUSH1 0x20 DUP5 ADD MLOAD AND SWAP3 ADD MLOAD AND DUP1 DUP3 DUP6 PUSH32 0x6B01C8C0B16CF8E7A1A9158019B5FE7D40B415D756710EB0FDCB577701DFEE84 PUSH0 DUP1 LOG4 PUSH1 0x40 MLOAD SWAP2 PUSH2 0x8E9 DUP4 PUSH2 0x1404 JUMP JUMPDEST PUSH1 0x2 DUP4 MSTORE PUSH0 JUMPDEST PUSH1 0x40 DUP2 LT PUSH2 0xC1B JUMPI POP DUP2 DUP2 LT ISZERO PUSH2 0xC16 JUMPI SWAP1 JUMPDEST DUP3 MLOAD ISZERO PUSH2 0xBE9 JUMPI PUSH1 0x20 DUP4 ADD MLOAD SWAP2 DUP4 MLOAD PUSH1 0x1 LT ISZERO PUSH2 0xBE9 JUMPI PUSH1 0x40 DUP5 ADD MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND SWAP1 MSTORE AND SWAP1 MSTORE PUSH2 0x943 PUSH2 0x14F8 JUMP JUMPDEST PUSH2 0x94B PUSH2 0x17A7 JUMP JUMPDEST SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND EXTCODESIZE ISZERO PUSH2 0xBE5 JUMPI SWAP5 SWAP1 SWAP2 PUSH1 0x40 MLOAD SWAP6 DUP7 SWAP3 PUSH32 0xEEEC802F00000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH2 0x1A4 DUP5 ADD DUP8 PUSH1 0x4 DUP7 ADD MSTORE PUSH2 0x1A0 PUSH1 0x24 DUP7 ADD MSTORE DUP4 MLOAD DUP1 SWAP2 MSTORE PUSH1 0x20 PUSH2 0x1C4 DUP7 ADD SWAP5 ADD SWAP1 PUSH0 JUMPDEST DUP2 DUP2 LT PUSH2 0xB3B JUMPI POP POP POP PUSH0 SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP7 SWAP6 SWAP5 PUSH4 0xFFFFFFFF PUSH2 0xA72 SWAP6 PUSH2 0x184 CALLDATALOAD PUSH1 0x44 DUP11 ADD MSTORE AND PUSH1 0x64 DUP9 ADD MSTORE DUP9 PUSH1 0x84 DUP9 ADD MSTORE DUP3 DUP2 MLOAD AND PUSH1 0xA4 DUP9 ADD MSTORE DUP3 PUSH1 0x20 DUP3 ADD MLOAD AND PUSH1 0xC4 DUP9 ADD MSTORE ADD MLOAD AND PUSH1 0xE4 DUP6 ADD MSTORE DUP8 PUSH2 0x104 DUP6 ADD MSTORE PUSH2 0x124 DUP5 ADD SWAP1 PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST SUB DUP2 DUP4 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xB30 JUMPI PUSH2 0xAE7 JUMPI JUMPDEST PUSH1 0x20 SWAP3 POP PUSH32 0x9B779B17422D0DF92223018B32B4D1FA46E071723D6817E2486D003BECC55F00 TSTORE PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xB03 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x40 MSTORE PUSH0 PUSH2 0xAB9 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP2 DUP1 SWAP8 SWAP7 POP SWAP5 SWAP1 SWAP3 SWAP4 SWAP5 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 MLOAD AND DUP3 MSTORE PUSH1 0x20 DUP2 ADD MLOAD SWAP1 PUSH1 0x2 DUP3 LT ISZERO PUSH2 0xBB8 JUMPI DUP3 PUSH1 0x60 PUSH1 0x80 SWAP3 PUSH1 0x20 SWAP5 DUP6 PUSH1 0x1 SWAP8 ADD MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 DUP3 ADD MLOAD AND PUSH1 0x40 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO PUSH1 0x60 DUP3 ADD MSTORE ADD SWAP8 ADD SWAP2 ADD SWAP2 DUP10 SWAP6 SWAP7 SWAP5 SWAP4 SWAP3 PUSH2 0x9D9 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x902 JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH2 0xC26 PUSH2 0x14F8 JUMP JUMPDEST DUP3 DUP3 DUP8 ADD ADD MSTORE ADD PUSH2 0x8EF JUMP JUMPDEST PUSH32 0x741752C200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x4CA249DC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x7D0356F300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0x615 JUMP JUMPDEST PUSH32 0x39CF114E00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0xCE8 SWAP3 SWAP4 POP PUSH2 0x16BC JUMP JUMPDEST EQ ISZERO PUSH0 DUP1 DUP1 PUSH2 0x602 JUMP JUMPDEST PUSH32 0xBD39358300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 POP DUP3 LT PUSH0 PUSH2 0x5DF JUMP JUMPDEST DUP1 DUP7 LT SWAP2 POP PUSH2 0x5D8 JUMP JUMPDEST DUP1 DUP6 LT SWAP2 POP PUSH2 0x5D1 JUMP JUMPDEST PUSH32 0x49E27CFF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x3EE5AEB500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xBE5 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xBE5 JUMPI PUSH1 0x20 PUSH1 0xFF PUSH1 0x2 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xBE5 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xBE5 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD SWAP3 DUP4 DUP3 MSTORE PUSH1 0x20 DUP1 SWAP3 ADD SWAP4 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP3 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xE1E JUMPI PUSH2 0xE1A DUP7 PUSH2 0xE0E DUP2 DUP11 SUB DUP3 PUSH2 0x1420 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH2 0x1489 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST DUP5 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP8 MSTORE SWAP6 DUP7 ADD SWAP6 SWAP4 DUP4 ADD SWAP4 SWAP1 DUP4 ADD SWAP1 PUSH2 0xDF7 JUMP JUMPDEST CALLVALUE PUSH2 0xBE5 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xBE5 JUMPI PUSH1 0x4 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP1 SWAP2 SUB PUSH2 0xBE5 JUMPI PUSH0 MSTORE PUSH0 PUSH1 0x20 MSTORE PUSH1 0x20 PUSH1 0xFF PUSH1 0x40 PUSH0 KECCAK256 SLOAD AND PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xBE5 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xBE5 JUMPI PUSH1 0x40 MLOAD PUSH1 0x4 SLOAD PUSH0 DUP3 PUSH2 0xEB6 DUP4 PUSH2 0x152D JUMP JUMPDEST SWAP2 DUP3 DUP3 MSTORE PUSH1 0x20 SWAP4 PUSH1 0x1 SWAP1 DUP6 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0xF53 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0xEF8 JUMPI JUMPDEST POP PUSH2 0xEE4 SWAP3 POP SUB DUP4 PUSH2 0x1420 JUMP JUMPDEST PUSH2 0xE1A PUSH1 0x40 MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x13DF JUMP JUMPDEST DUP5 SWAP2 POP PUSH1 0x4 PUSH0 MSTORE PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B SWAP1 PUSH0 SWAP2 JUMPDEST DUP6 DUP4 LT PUSH2 0xF3B JUMPI POP POP PUSH2 0xEE4 SWAP4 POP DUP3 ADD ADD DUP6 PUSH2 0xED7 JUMP JUMPDEST DUP1 SLOAD DUP4 DUP10 ADD DUP6 ADD MSTORE DUP8 SWAP5 POP DUP7 SWAP4 SWAP1 SWAP3 ADD SWAP2 DUP2 ADD PUSH2 0xF24 JUMP JUMPDEST PUSH1 0xFF NOT AND DUP6 DUP3 ADD MSTORE PUSH2 0xEE4 SWAP6 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD ADD SWAP3 POP DUP8 SWAP2 POP PUSH2 0xED7 SWAP1 POP JUMP JUMPDEST CALLVALUE PUSH2 0xBE5 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xBE5 JUMPI PUSH1 0x4 CALLDATALOAD PUSH1 0x24 DUP1 CALLDATALOAD PUSH1 0x1 SWAP3 PUSH1 0x1 SLOAD DUP1 DUP3 LT ISZERO PUSH2 0x10A9 JUMPI DUP1 PUSH2 0xFA4 DUP5 DUP5 PUSH2 0x16BC JUMP JUMPDEST GT PUSH2 0x1068 JUMPI JUMPDEST POP PUSH2 0xFB4 DUP3 PUSH2 0x16C9 JUMP JUMPDEST SWAP3 PUSH2 0xFC2 PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x1420 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH2 0xFCE DUP4 PUSH2 0x16C9 JUMP JUMPDEST SWAP2 PUSH1 0x1F NOT PUSH1 0x20 SWAP4 ADD CALLDATASIZE PUSH1 0x20 DUP8 ADD CALLDATACOPY PUSH0 JUMPDEST DUP5 DUP2 LT PUSH2 0xFF3 JUMPI PUSH1 0x40 MLOAD DUP1 PUSH2 0xE1A DUP9 DUP3 PUSH2 0x1489 JUMP JUMPDEST PUSH2 0x1005 PUSH2 0x1000 DUP3 DUP5 PUSH2 0x16BC JUMP JUMPDEST PUSH2 0x16E1 JUMP JUMPDEST SWAP1 SLOAD SWAP1 DUP8 MLOAD DUP4 LT ISZERO PUSH2 0x103C JUMPI PUSH1 0x3 SHL SHR PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH1 0x5 DUP3 SWAP1 SHL DUP8 ADD DUP6 ADD MSTORE DUP7 ADD PUSH2 0xFDE JUMP JUMPDEST DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 SUB SWAP1 DUP2 GT PUSH2 0x107C JUMPI SWAP1 DUP5 PUSH2 0xFAA JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x4E23D03500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0xBE5 JUMPI PUSH1 0x40 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xBE5 JUMPI PUSH1 0x4 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xBE5 JUMPI CALLDATASIZE PUSH1 0x23 DUP3 ADD SLT ISZERO PUSH2 0xBE5 JUMPI PUSH1 0x55 PUSH1 0xB PUSH2 0x1119 PUSH1 0x20 SWAP4 CALLDATASIZE SWAP1 PUSH1 0x24 DUP2 PUSH1 0x4 ADD CALLDATALOAD SWAP2 ADD PUSH2 0x1443 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x1149 DUP2 DUP7 DUP1 DUP3 ADD SWAP5 PUSH2 0x112E DUP7 PUSH2 0x1630 JUMP JUMPDEST SWAP1 DUP1 MLOAD SWAP3 DUP4 SWAP2 ADD DUP3 MCOPY ADD PUSH0 DUP2 MSTORE SUB PUSH1 0x1F NOT DUP2 ADD DUP4 MSTORE DUP3 PUSH2 0x1420 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 PUSH2 0x1157 PUSH1 0x24 CALLDATALOAD PUSH2 0x1812 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 PUSH1 0x40 DUP4 ADD MSTORE DUP5 DUP3 ADD MSTORE ADDRESS DUP2 MSTORE ADD PUSH1 0xFF DUP2 MSTORE8 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD SWAP2 AND DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0xBE5 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xBE5 JUMPI PUSH2 0xE1A PUSH1 0x40 MLOAD PUSH2 0x11B5 DUP2 PUSH2 0x11AE DUP2 PUSH2 0x157E JUMP JUMPDEST SUB DUP3 PUSH2 0x1420 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x13DF JUMP JUMPDEST CALLVALUE PUSH2 0xBE5 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xBE5 JUMPI PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH2 0x1204 SWAP2 AND PUSH2 0x1716 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH1 0x40 MLOAD PUSH32 0xAAABADC500000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 SWAP3 DUP4 DUP3 PUSH1 0x4 DUP2 DUP7 PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0xB30 JUMPI DUP5 SWAP3 PUSH0 SWAP3 PUSH2 0x136E JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH1 0x40 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP3 PUSH32 0x9BE2A88400000000000000000000000000000000000000000000000000000000 DUP5 MSTORE PUSH1 0x4 DUP5 ADD MSTORE CALLER PUSH1 0x24 DUP5 ADD MSTORE ADDRESS PUSH1 0x44 DUP5 ADD MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xB30 JUMPI PUSH0 SWAP3 PUSH2 0x1337 JUMPI JUMPDEST POP POP ISZERO PUSH2 0x130F JUMPI PUSH2 0x12DC PUSH2 0x17DE JUMP JUMPDEST PUSH1 0x1 PUSH1 0xFF NOT PUSH1 0x2 SLOAD AND OR PUSH1 0x2 SSTORE PUSH32 0x432ACBFD662DBB5D8B378384A67159B47CA9D0F1B79F97CF64CF8585FA362D50 PUSH0 DUP1 LOG1 STOP JUMPDEST PUSH32 0x23DADA5300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST SWAP1 DUP1 SWAP3 POP DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1367 JUMPI JUMPDEST PUSH2 0x134E DUP2 DUP4 PUSH2 0x1420 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0xBE5 JUMPI MLOAD DUP1 ISZERO ISZERO DUP2 SUB PUSH2 0xBE5 JUMPI DUP2 DUP1 PUSH2 0x12CD JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1344 JUMP JUMPDEST PUSH1 0x64 SWAP2 SWAP3 POP PUSH2 0x1389 SWAP1 DUP5 RETURNDATASIZE DUP7 GT PUSH2 0x280 JUMPI PUSH2 0x271 DUP2 DUP4 PUSH2 0x1420 JUMP JUMPDEST SWAP2 SWAP1 PUSH2 0x127C JUMP JUMPDEST CALLVALUE PUSH2 0xBE5 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0xBE5 JUMPI PUSH1 0x80 PUSH2 0x13AA PUSH2 0x14F8 JUMP JUMPDEST PUSH2 0x13DD PUSH1 0x40 MLOAD DUP1 SWAP3 PUSH1 0x60 DUP1 SWAP2 DUP1 MLOAD ISZERO ISZERO DUP5 MSTORE PUSH1 0x20 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x20 DUP6 ADD MSTORE PUSH1 0x40 DUP2 ADD MLOAD ISZERO ISZERO PUSH1 0x40 DUP6 ADD MSTORE ADD MLOAD ISZERO ISZERO SWAP2 ADD MSTORE JUMP JUMPDEST RETURN JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xB03 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xB03 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP3 SWAP2 SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0xB03 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x146D PUSH1 0x20 PUSH1 0x1F NOT PUSH1 0x1F DUP5 ADD AND ADD DUP5 PUSH2 0x1420 JUMP JUMPDEST DUP3 SWAP5 DUP2 DUP5 MSTORE DUP2 DUP4 ADD GT PUSH2 0xBE5 JUMPI DUP3 DUP2 PUSH1 0x20 SWAP4 DUP5 PUSH0 SWAP7 ADD CALLDATACOPY ADD ADD MSTORE JUMP JUMPDEST PUSH1 0x20 SWAP1 PUSH1 0x20 PUSH1 0x40 DUP2 DUP4 ADD SWAP3 DUP3 DUP2 MSTORE DUP6 MLOAD DUP1 SWAP5 MSTORE ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x14B0 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x14A2 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0xBE5 JUMPI DUP2 PUSH1 0x20 PUSH2 0x14F5 SWAP4 CALLDATALOAD SWAP2 ADD PUSH2 0x1443 JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0x80 DUP3 ADD DUP3 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xB03 JUMPI PUSH1 0x40 MSTORE PUSH0 PUSH1 0x60 DUP4 DUP3 DUP2 MSTORE DUP3 PUSH1 0x20 DUP3 ADD MSTORE DUP3 PUSH1 0x40 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x1574 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x1547 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x153C JUMP JUMPDEST PUSH1 0x5 SLOAD PUSH0 SWAP3 SWAP2 PUSH2 0x158D DUP3 PUSH2 0x152D JUMP JUMPDEST DUP1 DUP3 MSTORE SWAP2 PUSH1 0x20 SWAP1 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x160A JUMPI POP PUSH1 0x1 EQ PUSH2 0x15B0 JUMPI JUMPDEST POP POP POP POP JUMP JUMPDEST SWAP3 SWAP4 SWAP5 POP PUSH1 0x5 PUSH0 MSTORE PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 SWAP3 PUSH0 SWAP4 JUMPDEST DUP6 DUP6 LT PUSH2 0x15F7 JUMPI POP POP POP PUSH1 0x20 SWAP3 POP ADD ADD SWAP1 PUSH0 DUP1 DUP1 DUP1 PUSH2 0x15AA JUMP JUMPDEST DUP1 SLOAD DUP6 DUP6 ADD DUP5 ADD MSTORE SWAP4 DUP3 ADD SWAP4 DUP2 ADD PUSH2 0x15DD JUMP JUMPDEST SWAP2 POP POP PUSH1 0x20 SWAP5 SWAP6 POP PUSH1 0xFF NOT SWAP2 POP SWAP3 SWAP2 SWAP3 AND DUP4 DUP4 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL ADD ADD SWAP1 PUSH0 DUP1 DUP1 DUP1 PUSH2 0x15AA JUMP JUMPDEST PUSH1 0x3 SLOAD PUSH0 SWAP3 SWAP2 PUSH2 0x163F DUP3 PUSH2 0x152D JUMP JUMPDEST SWAP2 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x16A9 JUMPI POP PUSH1 0x1 EQ PUSH2 0x165A JUMPI POP POP POP JUMP JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 POP PUSH1 0x3 PUSH0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP1 PUSH0 SWAP2 JUMPDEST DUP5 DUP4 LT PUSH2 0x1696 JUMPI POP POP POP ADD SWAP1 JUMP JUMPDEST DUP2 DUP2 PUSH1 0x20 SWAP3 SLOAD DUP6 DUP8 ADD MSTORE ADD SWAP3 ADD SWAP2 PUSH2 0x1688 JUMP JUMPDEST PUSH1 0xFF NOT AND DUP4 MSTORE POP POP DUP2 ISZERO ISZERO SWAP1 SWAP2 MUL ADD SWAP2 POP JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x107C JUMPI JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xB03 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST PUSH1 0x1 SLOAD DUP2 LT ISZERO PUSH2 0xBE9 JUMPI PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x0 DUP5 MSTORE AND PUSH1 0x40 DUP3 ADD MSTORE PUSH1 0x24 DUP2 MSTORE PUSH2 0x1775 DUP2 PUSH2 0x1404 JUMP JUMPDEST MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST SWAP1 DUP2 PUSH1 0x20 SWAP2 SUB SLT PUSH2 0xBE5 JUMPI MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0xBE5 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x0 PUSH4 0xFFFFFFFF DUP2 AND TIMESTAMP LT ISZERO PUSH2 0x17D9 JUMPI SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 JUMP JUMPDEST PUSH1 0xFF PUSH1 0x2 SLOAD AND PUSH2 0x17EA JUMPI JUMP JUMPDEST PUSH32 0x75884CDA00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP2 CALLER DUP4 MSTORE CHAINID PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE PUSH1 0x60 DUP2 MSTORE PUSH1 0x80 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xB03 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 STOP PUSH14 0x1DE6F6076AEAC96E8282C9BACC25 PUSH13 0x904818FA6BB6450AE37456BC2B PUSH23 0x5864736F6C634300081B00330000000000000000000000 ","sourceMap":"1150:4578:125:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1473:26:67;1150:4578:125;1473:26:67;;;1150:4578:125;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1150:4578:125;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1150:4578:125;;;;;;;;;2369:24:42;1150:4578:125;;;;;;;;;;-1:-1:-1;;1150:4578:125;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;1150:4578:125;;;;;;;;;3203:14;1150:4578;;;;;;;;;;-1:-1:-1;;1150:4578:125;;;;;;;;1473:26:67;;1150:4578:125;1473:26:67;1150:4578:125;;;1019:6:40;1150:4578:125;;1473:26:67;;;;;;;;;;;;1150:4578:125;;;;;;;;;1473:26:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;1150:4578:125;;;;;;;;;;;;;;;-1:-1:-1;;1150:4578:125;;;;;;3846:6:35;1150:4578:125;;;;;;;;;;;;;-1:-1:-1;;1150:4578:125;;;;;;;;;1019:6:40;1150:4578:125;;;;;;;;;;-1:-1:-1;;1150:4578:125;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;1150:4578:125;;;;;;;;;2073:20:42;1150:4578:125;;;;;;;;;;-1:-1:-1;;1150:4578:125;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;551:66:53;2806:53:55;1316:93:53;;1150:4578:125;551:66:53;3051:52:55;1150:4578:125;;;;3952:29;3948:81;;1150:4578;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;540:4:127;;1051:32;;;:80;;;;;1150:4578:125;1051:126:127;;;;1150:4578:125;1051:172:127;;;;1150:4578:125;1034:257:127;;;1318:39;465:4:50;1318:39:127;;;;:::i;:::-;:57;;;;:126;;;1150:4578:125;1301:227:127;;;;;1236:15:126;;2466:5:118;:13;:5;;;1236:15:126;;2466:13:118;1278:28:126;;;;1274:117;;1150:4578:125;;;;;;4806:77;1150:4578;;;4806:77;;;1150:4578;;4806:77;;1150:4578;;;;;;:::i;:::-;;-1:-1:-1;;1150:4578:125;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1019:6:40;1150:4578:125;;;;;;4854:14;1150:4578;;;;;-1:-1:-1;;1150:4578:125;;;;;;;;;:::i;:::-;4806:77;-1:-1:-1;;4806:77:125;;;;;;:::i;:::-;1150:4578;;6297:48:35;;;1150:4578:125;6297:48:35;;;1150:4578:125;;;;:::i;:::-;;;;4806:77;;;;1150:4578;;;;;;6297:48:35;-1:-1:-1;;6297:48:35;;;;;;:::i;:::-;6375:23;1150:4578:125;;6375:23:35;:::i;:::-;1150:4578:125;;;1662:20:108;1658:80;;1150:4578:125;1790:100:108;;;1150:4578:125;1790:100:108;1150:4578:125;1903:18:108;;;1899:81;;5469:200:35;;:::i;:::-;1150:4578:125;;;;;;;;;;-1:-1:-1;;1150:4578:125;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;6314:13:35;1150:4578:125;;;;;;;;;;;;;5645:17:35;;1150:4578:125;5645:17:35;;1150:4578:125;;;;;;;;;;;;4906:67;;;;1150:4578;4906:67;;1150:4578;;;;;;:::i;:::-;1395:1;1150:4578;;;1395:1;1150:4578;1395:1;;;;-1:-1:-1;5606:27:125;;;1150:4578;;;5606:113;;1150:4578;;;;;;1395:1;;5560:14;1150:4578;;;;;;;;;;;5582:14;1150:4578;;;;;;;;;;;:::i;:::-;6937:30:35;;:::i;:::-;1019:6:40;1150:4578:125;1019:6:40;1150:4578:125;6831:267:35;;;;1150:4578:125;;;;;6831:267:35;;;1150:4578:125;6831:267:35;;1150:4578:125;;;6831:267:35;1150:4578:125;6831:267:35;;1150:4578:125;;;;;;;;;;;;;;;1395:1;;1150:4578;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6831:267:35;1019:6:40;;1150:4578:125;1019:6:40;1150:4578:125;6831:267:35;;;;;;;;1150:4578:125;;3051:52:55;;551:66:53;3051:52:55;1150:4578:125;;;;;;6831:267:35;1150:4578:125;;;;;;;;;;;6831:267:35;;1150:4578:125;;;;;;;;;;6831:267:35;1150:4578:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1395:1;1150:4578;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6831:267:35;1150:4578:125;;;;;;;;;;;;;5606:113;;;1395:1;1150:4578;1395:1;;;:::i;:::-;;;;;;;;;;1899:81:108;1944:25;1150:4578:125;1944:25:108;1150:4578:125;;1944:25:108;1658:80;1705:22;1150:4578:125;1705:22:108;1150:4578:125;;1705:22:108;1274:117:126;1329:51;1150:4578:125;1329:51:126;1150:4578:125;;;;;;1329:51:126;2466:13:118;;;1301:227:127;1476:41;1150:4578:125;1476:41:127;1150:4578:125;;1476:41:127;1318:126;1391:35;;;;;:::i;:::-;:53;;1318:126;;;;;1034:257;1255:25;1150:4578:125;1255:25:127;1150:4578:125;;1255:25:127;1051:172;1193:30;;;;1051:172;;;:126;1147:30;;;;-1:-1:-1;1051:126:127;;:80;1099:32;;;;-1:-1:-1;1051:80:127;;3948:81:125;4004:14;1150:4578;4004:14;1150:4578;;4004:14;1316:93:53;1368:30;1150:4578:125;1368:30:53;1150:4578:125;;1368:30:53;1150:4578:125;;;;;-1:-1:-1;;1150:4578:125;;;;;;;4726:9:35;1150:4578:125;;;;;;;;;;;;;;;-1:-1:-1;;1150:4578:125;;;;;;;;3987:6:35;1150:4578:125;3987:6:35;1150:4578:125;;;;;;;;;;3987:6:35;1150:4578:125;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1150:4578:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1150:4578:125;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1150:4578:125;;;;;;;;;;;-1:-1:-1;;1150:4578:125;;;;;;;;;;;;;;;-1:-1:-1;1150:4578:125;;-1:-1:-1;1150:4578:125;;-1:-1:-1;1150:4578:125;;;;;;-1:-1:-1;;1150:4578:125;;;;;;;;;;;;;;4199:15:35;;;;4195:71;;4386:13;;;;;:::i;:::-;4413:12;4409:65;;1150:4578:125;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;-1:-1:-1;;1150:4578:125;;;;;;;;;4542:9:35;;;;;;1150:4578:125;;;;;;;:::i;4553:3:35:-;4583:17;4590:9;;;;:::i;:::-;4583:17;:::i;:::-;1150:4578:125;;;;;;;;;;;;;;;;;;;;;;;;;;4527:13:35;;1150:4578:125;;;;;;;;;;4409:65:35;1150:4578:125;;;;;;;;;;;4409:65:35;;;;1150:4578:125;;;;;;;;;;4195:71:35;4237:18;1150:4578:125;4237:18:35;1150:4578:125;;4237:18:35;1150:4578:125;;;;;-1:-1:-1;;1150:4578:125;;;;;;;;;;;;;;;;;;;;2766:1598:108;;1150:4578:125;;;;;;;;;;;;;:::i;:::-;;;4927:48:35;;;;;;1150:4578:125;;;;:::i;:::-;;;;;;;;;;;;;;4927:48:35;-1:-1:-1;;4927:48:35;;;;;;:::i;:::-;1150:4578:125;5012:23:35;;5065;1150:4578:125;;5065:23:35;:::i;:::-;1150:4578:125;2766:1598:108;;1150:4578:125;2766:1598:108;;;;;;;2342:4;2766:1598;;;;;;;1150:4578:125;;;;;;;;;;;;;-1:-1:-1;;1150:4578:125;;;;;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;1150:4578:125;;;;;1774:7:37;1762:20;1774:7;;1762:20;:::i;:::-;1150:4578:125;;;;1231:22:40;;;:6;;;1150:4578:125;1231:6:40;;;1150:4578:125;1231:22:40;;;;;;;;;1150:4578:125;1231:22:40;;;1150:4578:125;;;;;;1231:64:40;;;;;1150:4578:125;1231:64:40;;1150:4578:125;1231:64:40;;1150:4578:125;1820:10:37;1150:4578:125;;;;1289:4:40;1150:4578:125;;;;;1231:64:40;;;;;;;1150:4578:125;1231:64:40;;;1150:4578:125;1797:34:37;;;1793:90;;5207:134:35;;:::i;:::-;5297:4;-1:-1:-1;;5285:16:35;1150:4578:125;;;5285:16:35;1150:4578:125;5317:17:35;1150:4578:125;5317:17:35;;1150:4578:125;1793:90:37;1854:18;1150:4578:125;1854:18:37;1150:4578:125;;1854:18:37;1231:64:40;;;;;;;;;;;;;;;;:::i;:::-;;;1150:4578:125;;;;;;;;;;;;1231:64:40;;;;;;;;;:22;1150:4578:125;1231:22:40;;;;;;;;;;;;;;;:::i;:::-;;;;;1150:4578:125;;;;;-1:-1:-1;;1150:4578:125;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1150:4578:125;;;;;;;;;;;;;;;;;-1:-1:-1;1150:4578:125;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;1150:4578:125;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;-1:-1:-1;;1150:4578:125;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;1150:4578:125;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;1150:4578:125;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;3010:12;1150:4578;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;3010:12;-1:-1:-1;1150:4578:125;;;-1:-1:-1;1150:4578:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1150:4578:125;;;;;;;;;;;;3010:12;1150:4578;;;;;;;;;;;4944:13:35;1150:4578:125;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;4944:13:35;-1:-1:-1;1150:4578:125;;;-1:-1:-1;1150:4578:125;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;;1150:4578:125;;;-1:-1:-1;;1150:4578:125;;;;;;;;-1:-1:-1;1150:4578:125:o;:::-;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;4172:6:35;1150:4578:125;;;;;;4172:6:35;-1:-1:-1;1150:4578:125;;;;-1:-1:-1;1150:4578:125;:::o;1931:430:37:-;1150:4578:125;;;2303:50:37;;;2320:22;;1150:4578:125;;;;;;;2303:50:37;;;;;;:::i;:::-;1150:4578:125;2293:61:37;;1931:430;:::o;1150:4578:125:-;;;;;;;;;;;;;;;;;;:::o;2922:332:42:-;3191:24;1150:4578:125;;;3173:15:42;:42;1150:4578:125;;;2922:332:42;:::o;3172:75::-;;-1:-1:-1;2922:332:42;:::o;5347:116:35:-;1150:4578:125;4726:9:35;1150:4578:125;;5397:60:35;;5347:116::o;5397:60::-;5436:10;-1:-1:-1;5436:10:35;;-1:-1:-1;5436:10:35;6001:159;1150:4578:125;;6109:43:35;;;6120:10;;1150:4578:125;;6132:13:35;1150:4578:125;;;;;;;;;6109:43:35;;1150:4578:125;;;;;;;;;;;;;;;6099:54:35;;6001:159;:::o"},"methodIdentifiers":{"create(string,string,(address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bool),uint256,bytes32)":"74b3dafe","disable()":"2f2770db","getActionId(bytes4)":"851c1bb3","getAuthorizer()":"aaabadc5","getDefaultLiquidityManagement()":"193ad50f","getDefaultPoolHooksContract()":"ec888061","getDeploymentAddress(bytes,bytes32)":"44f6fec7","getNewPoolPauseWindowEndTime()":"db035ebc","getOriginalPauseWindowEndTime()":"e9d56e19","getPauseWindowDuration()":"78da80cb","getPoolCount()":"8eec5d70","getPoolVersion()":"3f819b6f","getPools()":"673a2a1f","getPoolsInRange(uint256,uint256)":"53a72f7e","getTrustedRouter()":"af905d15","getVault()":"8d928af8","isDisabled()":"6c57f5a9","isPoolFromFactory(address)":"6634b753","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"pauseWindowDuration\",\"type\":\"uint32\"},{\"internalType\":\"string\",\"name\":\"factoryVersion\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"poolVersion\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"trustedRouter\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"Create2EmptyBytecode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Create2FailedDeployment\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"Create2InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Disabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"resolvedStartTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"GradualUpdateTimeTravel\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTrustedRouter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinWeight\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NormalizedWeightInvariant\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PoolPauseWindowDurationOverflow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SenderNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StandardPoolWithCreator\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"FactoryDisabled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"projectToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20\",\"name\":\"reserveToken\",\"type\":\"address\"}],\"name\":\"LBPoolCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"PoolCreated\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"projectToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"reserveToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"projectTokenStartWeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveTokenStartWeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"projectTokenEndWeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"reserveTokenEndWeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"blockProjectTokenSwapsIn\",\"type\":\"bool\"}],\"internalType\":\"struct LBPParams\",\"name\":\"lbpParams\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"create\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disable\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"getActionId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAuthorizer\",\"outputs\":[{\"internalType\":\"contract IAuthorizer\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDefaultLiquidityManagement\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"disableUnbalancedLiquidity\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableAddLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableRemoveLiquidityCustom\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"enableDonation\",\"type\":\"bool\"}],\"internalType\":\"struct LiquidityManagement\",\"name\":\"liquidityManagement\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDefaultPoolHooksContract\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"constructorArgs\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"getDeploymentAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNewPoolPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getOriginalPauseWindowEndTime\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPauseWindowDuration\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPoolVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPools\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"getPoolsInRange\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"pools\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTrustedRouter\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDisabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"pool\",\"type\":\"address\"}],\"name\":\"isPoolFromFactory\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is a factory specific to LBPools, allowing only two tokens and restricting the LBP to a single token sale, with parameters specified on deployment.\",\"errors\":{\"Create2EmptyBytecode()\":[{\"details\":\"There's no code to deploy.\"}],\"Create2FailedDeployment()\":[{\"details\":\"The deployment failed.\"}],\"Create2InsufficientBalance(uint256,uint256)\":[{\"details\":\"Not enough balance for performing a CREATE2 deploy.\"}],\"GradualUpdateTimeTravel(uint256,uint256)\":[{\"details\":\"Indicates that the start time is after the end time\"}]},\"events\":{\"LBPoolCreated(address,address,address)\":{\"details\":\"This information is also available onchain through immutable data and explicit getters on the pool.\",\"params\":{\"pool\":\"The address of the new pool\",\"projectToken\":\"The address of the project token (being distributed in the sale)\",\"reserveToken\":\"The address of the reserve token (used to purchase the project token)\"}},\"PoolCreated(address)\":{\"params\":{\"pool\":\"The address of the new pool\"}}},\"kind\":\"dev\",\"methods\":{\"create(string,string,(address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bool),uint256,bytes32)\":{\"details\":\"This method does not support native ETH management; WETH needs to be used instead.\",\"params\":{\"lbpParams\":\"The LBP configuration (see ILBPool for the struct definition)\",\"name\":\"The name of the pool\",\"salt\":\"The salt value that will be passed to create3 deployment\",\"swapFeePercentage\":\"Initial swap fee percentage (bound by the WeightedPool range)\",\"symbol\":\"The symbol of the pool\"}},\"disable()\":{\"details\":\"Existing pools are unaffected. Once a factory is disabled, it cannot be re-enabled.\"},\"getActionId(bytes4)\":{\"params\":{\"selector\":\"The 4-byte selector of the permissioned function\"},\"returns\":{\"_0\":\"The computed actionId\"}},\"getAuthorizer()\":{\"returns\":{\"_0\":\"authorizer An interface pointer to the Authorizer\"}},\"getDefaultLiquidityManagement()\":{\"details\":\"Users can call this to create a structure with all false arguments, then set the ones they need to true.\",\"returns\":{\"liquidityManagement\":\"Liquidity management flags, all initialized to false\"}},\"getDeploymentAddress(bytes,bytes32)\":{\"params\":{\"constructorArgs\":\"The arguments used to create the pool\",\"salt\":\"The salt used to deploy the pool\"},\"returns\":{\"_0\":\"The predicted address of the pool, given the salt\"}},\"getNewPoolPauseWindowEndTime()\":{\"details\":\"We intend for all pools deployed by this factory to have the same pause window end time (i.e., after this date, all future pools will be unpausable). This function will return `_poolsPauseWindowEndTime` until it passes, after which it will return 0.\",\"returns\":{\"_0\":\"pauseWindowEndTime The resolved pause window end time (0 indicating it's no longer pausable)\"}},\"getOriginalPauseWindowEndTime()\":{\"returns\":{\"_0\":\"pauseWindowEndTime The end time as a timestamp\"}},\"getPauseWindowDuration()\":{\"returns\":{\"_0\":\"pauseWindowDuration The duration in seconds\"}},\"getPoolCount()\":{\"details\":\"This can then be used to \\\"paginate\\\" calls to `getPools` to control gas costs.\",\"returns\":{\"_0\":\"The number of pools deployed by this factory\"}},\"getPoolVersion()\":{\"details\":\"This is typically only useful in complex Pool deployment schemes, where multiple subsystems need to know about each other. Note that this value will only be set at factory creation time.\",\"returns\":{\"_0\":\"A string representation of the pool version\"}},\"getPools()\":{\"returns\":{\"_0\":\"The list of pools deployed by this factory\"}},\"getPoolsInRange(uint256,uint256)\":{\"details\":\"`start` must be a valid index, but if `count` exceeds the total length, it will not revert, but simply stop at the end and return fewer results than requested.\",\"params\":{\"count\":\"The maximum number of pools to return\",\"start\":\"The index of the first pool to return\"},\"returns\":{\"pools\":\"The list of pools deployed by this factory, starting at `start` and returning up to `count` pools\"}},\"getVault()\":{\"returns\":{\"_0\":\"vault An interface pointer to the Vault\"}},\"isDisabled()\":{\"returns\":{\"_0\":\"True if this factory was disabled\"}},\"isPoolFromFactory(address)\":{\"params\":{\"pool\":\"The pool to check\"},\"returns\":{\"_0\":\"True if `pool` was created by this factory\"}},\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"Disabled()\":[{\"notice\":\"Attempted pool creation after the factory was disabled.\"}],\"IndexOutOfBounds()\":[{\"notice\":\"A pool index is beyond the current bounds of the array.\"}],\"InvalidOwner()\":[{\"notice\":\"The owner is the zero address.\"}],\"InvalidTrustedRouter()\":[{\"notice\":\"The zero address was given for the trusted router.\"}],\"MinWeight()\":[{\"notice\":\"Indicates that one of the pool tokens' weight is below the minimum allowed.\"}],\"NormalizedWeightInvariant()\":[{\"notice\":\"Indicates that the sum of the pool tokens' weights is not FixedPoint.ONE.\"}],\"PoolPauseWindowDurationOverflow()\":[{\"notice\":\"The factory deployer gave a duration that would overflow the Unix timestamp.\"}],\"ReentrancyGuardReentrantCall()\":[{\"notice\":\"Unauthorized reentrant call.\"}],\"SenderNotAllowed()\":[{\"notice\":\"The sender does not have permission to call a function.\"}],\"StandardPoolWithCreator()\":[{\"notice\":\"A pool creator was specified for a pool from a Balancer core pool type.\"}]},\"events\":{\"FactoryDisabled()\":{\"notice\":\"The factory was disabled by governance.\"},\"LBPoolCreated(address,address,address)\":{\"notice\":\"Emitted on deployment so that offchain processes know which token is which from the beginning.\"},\"PoolCreated(address)\":{\"notice\":\"A pool was deployed.\"}},\"kind\":\"user\",\"methods\":{\"create(string,string,(address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bool),uint256,bytes32)\":{\"notice\":\"Deploys a new `LBPool`.\"},\"disable()\":{\"notice\":\"Disable the factory, preventing the creation of more pools.\"},\"getActionId(bytes4)\":{\"notice\":\"Returns the action identifier associated with the external function described by `selector`.\"},\"getAuthorizer()\":{\"notice\":\"Get the address of the Authorizer.\"},\"getDefaultLiquidityManagement()\":{\"notice\":\"Convenience function for constructing a LiquidityManagement object.\"},\"getDefaultPoolHooksContract()\":{\"notice\":\"A common place to retrieve a default hooks contract. Currently set to address(0) (i.e. no hooks).\"},\"getDeploymentAddress(bytes,bytes32)\":{\"notice\":\"Return the address where a new pool will be deployed, based on the factory address and salt.\"},\"getNewPoolPauseWindowEndTime()\":{\"notice\":\"Returns the current pauseWindowEndTime that will be applied to Pools created by this factory.\"},\"getOriginalPauseWindowEndTime()\":{\"notice\":\"Returns the original factory pauseWindowEndTime, regardless of the current time.\"},\"getPauseWindowDuration()\":{\"notice\":\"Return the pause window duration. This is the time pools will be pausable after factory deployment.\"},\"getPoolCount()\":{\"notice\":\"Return the total number of pools deployed by this factory.\"},\"getPoolVersion()\":{\"notice\":\"Returns a JSON representation of the deployed pool version containing name, version number and task ID.\"},\"getPools()\":{\"notice\":\"Return the complete list of pools deployed by this factory.\"},\"getPoolsInRange(uint256,uint256)\":{\"notice\":\"Return a subset of the list of pools deployed by this factory.\"},\"getTrustedRouter()\":{\"notice\":\"Returns trusted router, which is the gateway to add liquidity to the pool.\"},\"getVault()\":{\"notice\":\"Get the address of the Balancer Vault.\"},\"isDisabled()\":{\"notice\":\"Check whether this factory has been disabled by governance.\"},\"isPoolFromFactory(address)\":{\"notice\":\"Check whether a pool was deployed by this factory.\"},\"version()\":{\"notice\":\"Getter for the version.\"}},\"notice\":\"LBPool Factory.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/lbp/LBPoolFactory.sol\":\"LBPoolFactory\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol\":{\"keccak256\":\"0xa7adbaf80bc9cfa44e41776f632b5d7cb2c02c562a124c0e4cb17f06c4a54db3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e4fdf59a7f3dc3b7d6bb6f466e4a0a6263b66c0fc12492baf06ec8c6fdcc2398\",\"dweb:/ipfs/QmWxLpicLjGdgGQ8GjuN9YfDyVapYWwzdgET86ucs9hmFa\"]},\"@balancer-labs/v3-interfaces/contracts/pool-weighted/ILBPool.sol\":{\"keccak256\":\"0x8f95dab12a3243740c7567076e867d9aaa072936379ea432e0ac70ed2d4e3097\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0e28e152e7f324bdf9f63020e4f13c0b6fbd5dd73ebcd53737a5769fd71c16e0\",\"dweb:/ipfs/QmZFQV77NuL3xPPFTcRPfRC7eYC12V1Et4G9TrLVsnEukd\"]},\"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol\":{\"keccak256\":\"0xae65b6b0800fed858a56df5dc8fe7eda072f7d409f0e0d4c63ad8fca5f0c8d33\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4503850853e86c655d3dba125613822c26552c834215e24bd88c2ac0f29675d4\",\"dweb:/ipfs/QmQ4dGpVpRcyhVfer2qsnbX2tTktwVXoX2bvoodrh3tinR\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IPoolVersion.sol\":{\"keccak256\":\"0xb97e44d4ebd74212195ebf10dc94cd46929e4c3dd217215945d164f02426891f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://cdc1656abb0e6c82640d17e2752684cce674cdd54665e01491c2b3ccb74c5d8f\",\"dweb:/ipfs/QmfFr81CMmBJa27uHe4aquqHmU2nXCTpXST1shNq6ik8PA\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePoolFactory.sol\":{\"keccak256\":\"0x6f8c558b0520faae0c4576f30225b5a97821a4cd210878a0ba10c102a2f753f3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b40aa7a5ee39fa2e297c684fd29ad45d866f1fc61cd997120a417b02a4d908aa\",\"dweb:/ipfs/QmYP5pQAF7SDLgy3aerqfnc4VwdmfQix2jcQUNL3o83BY9\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISenderGuard.sol\":{\"keccak256\":\"0x2ec1ecf5c578aab7502f6985a03fbb79998218bdef819845d70d28a6994cff5b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a32637a45f19c29797db11eb25eb9bfda73302f280a64a9d9a4ab123db1b8e6f\",\"dweb:/ipfs/QmXGimviZ4Mr6kwgqkCwpHH5uGHVEjAcCRNvAwvoVYKi6f\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-pool-utils/contracts/BasePoolFactory.sol\":{\"keccak256\":\"0x5888b7317d6a8f91a7665922da7e1e00ee8ef47f6690d4bd7f44d37888e21848\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://00b22e2600301568c628a652fcc8f5d79145218feab59a8963dfe300763d8763\",\"dweb:/ipfs/QmNt2BgJYNL7ywhNvR42NneXDYQ7xRyTaTunfgJ2cCVQFR\"]},\"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol\":{\"keccak256\":\"0xa97e2a0fd95d78dcecf67fd8c554ced63bbd6da372b6f8b12f16ad526b6ec608\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d98ad2022f9e3653fd63daca8c0725c7ccbd4f63d0d27c413e90669ce7284a96\",\"dweb:/ipfs/QmZ62RpJj3qSUrrdVD3H72qEszTUuvGkFLSBXAKMhBn5nX\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Authentication.sol\":{\"keccak256\":\"0x807237870f3aaa26cd815c5f600c1d0c60861a2f962fcc341d4b80942288ab52\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://90f108409488d0c38147d2ac7b9facd694dbf1001c501136a249091788c22232\",\"dweb:/ipfs/QmRCaCCGcuL4kxBEbrpq6FfENBJk4Zo8CNe8TRusatuYJ6\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CommonAuthentication.sol\":{\"keccak256\":\"0x89bd8b60aa203c8aa72af6e88671af68f4407a26dd3e0541b0e4dc387fd0081e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://411eb9ee6df963198102de5ae597c1f1377b0a45be23f17d38463f2eeefa2b0a\",\"dweb:/ipfs/QmcEaMawADJEyLswG5hhvhQuTNV3XUxBVu3YZCbJzQkoJ7\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/FactoryWidePauseWindow.sol\":{\"keccak256\":\"0x9594d2dc75aa8c92bb39d30cd76d3bfbb203fe17c4ae35b6f8d882ed4ac868d4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1a43d706d34c9f071bed27372100fedaeb12ec4c5c3529e150c8684444c4a619\",\"dweb:/ipfs/QmYUnJ2CtjJY2XktSzamExryTNbAYjesnymMpqTvQuXUka\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/WeightedMath.sol\":{\"keccak256\":\"0x4d9faedc605adaa52594ae9949374d87bce13107f887edc593a0b9b7a5c91042\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://648e918881e78d62505f049d2f88335e679aa01b82d403ac80b854d9d85efcc2\",\"dweb:/ipfs/QmXA36vdUX611mTH3V9qNGM3uF591TB3xaADqWG41NFmWP\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/ReentrancyGuardTransient.sol\":{\"keccak256\":\"0x0986ee17e49747c89956b4d46947b65b7c2942d5854fd39d764a7cb2735ff8af\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://38fedef8f551d12a155f54ab1c863db60fed1226a397a321ac729e9db65f4593\",\"dweb:/ipfs/QmaxBFc45J79aehsbSoLzNWVfBhqxkkWnKpunmKrbzV1pL\"]},\"@balancer-labs/v3-solidity-utils/contracts/openzeppelin/StorageSlotExtension.sol\":{\"keccak256\":\"0xba524eab3f4f1b735008624cf11264842bec509e05ac025f93b8c843547fbfd3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2c539df1afd342c47fdbd96fb28a183b7b30e055c4e435cdf77140ec92e68a42\",\"dweb:/ipfs/QmZ4akawS7TKrJkBeoi4bfyGWRmQgXshtkAMupuxkgH5Ur\"]},\"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x79f2ec4f7314bd1c3555368ff02bb9d382489dc8bbd7efbbf306f9a5084f3bec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a57c155451c5b1c1c59a27770754ccd9ba1be9344db6ac45b8744eba5fa4fa2f\",\"dweb:/ipfs/QmarkRwGaS3egg1FaQH6LibqjT6NocVUbD1jMPWtFxFaQV\"]},\"@balancer-labs/v3-vault/contracts/BaseHooks.sol\":{\"keccak256\":\"0xe987f0806641ac62fc66a6f3b0c6b58a44832c01a1c95f349eb880b00529756a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f8fc15c0fc44dd7032aa5ece3f281d1d83076719ef9b6f6442be79a62e2c1848\",\"dweb:/ipfs/QmVAZSVhzg6fb3ChkCeAPtLLwqnwmxdkxrenvJaf83trNC\"]},\"@balancer-labs/v3-vault/contracts/SingletonAuthentication.sol\":{\"keccak256\":\"0x4910eb69dc3e3141803a36fb176349ae3d774f4a9811e4d486c44bf6a8e4e055\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://afec051b387a1dad075acfbe0093b443e9e5827e29f7b960af3c1b69645aa290\",\"dweb:/ipfs/QmdLcyhmHCiEyVbFsVByyjEdUn9pDTzVAPNyBpdH2YEs4Y\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/access/Ownable.sol\":{\"keccak256\":\"0xff6d0bb2e285473e5311d9d3caacb525ae3538a80758c10649a4d61029b017bb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8ed324d3920bb545059d66ab97d43e43ee85fd3bd52e03e401f020afb0b120f6\",\"dweb:/ipfs/QmfEckWLmZkDDcoWrkEvMWhms66xwTLff9DDhegYpvHo1a\"]},\"@openzeppelin/contracts/access/Ownable2Step.sol\":{\"keccak256\":\"0x5d3e5de9eadfa1f8a892eb2e95bbebd3e4b8c8ada5b76f104d383fea518fa688\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cde108962511e6a4d3cfb7b6fb6a36bdcfa300761c17dad2d7dd87d4f8117b48\",\"dweb:/ipfs/Qmf7YxUVK68JedWybWfXvzLCegsD95DtGc3mbpEWkWSMm8\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x75a4ee64c68dbd5f38bddd06e664a64c8271b4caa554fb6f0607dfd672bb4bf3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0c4e6cb30d3601e2f7af5af09e265508147cb275a8dcd99d6f7363645cc56867\",\"dweb:/ipfs/QmNgFkoXNWoUbAyw71rr1sKQ95Rj2GfvYiWg79xEYDn2NY\"]},\"@openzeppelin/contracts/utils/Create2.sol\":{\"keccak256\":\"0x2b9807d194b92f1068d868e9587d27037264a9a067c778486f86ae21c61cbd5e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://22d71f40aa38a20cf466d8647452a6e3f746353474f8c8af40f03aa8cae38420\",\"dweb:/ipfs/QmQ752Hz5av7YDK8pFojzb5qgeXQvfsdkdwkHVzaXoYAZR\"]},\"@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"contracts/WeightedPool.sol\":{\"keccak256\":\"0x5bc730e5864de66b59da231ec3c083adc625c181c1d2980e043b2c3135828b83\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d38330349ca047499752eed9e3468191cb9219fa0a57ebec2b3695e87275b657\",\"dweb:/ipfs/QmeJVT9jQXg7yMZ6zyUsQsZXbgt1QqktYpqRV9Fj4cLECX\"]},\"contracts/lbp/LBPool.sol\":{\"keccak256\":\"0x8b9b358eca6c58ef29195a59992fbd0d06da8331f9d6ef9d4b28154a2ff2e940\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://51a34ff2c23b675f57433ea8b5fccdcc2869bf8bfad4dd50a4511dd95bfc523c\",\"dweb:/ipfs/QmUrNpL51fh1BU9tzKyiGoGrEZRn9GxGrqmBsbqv89LL18\"]},\"contracts/lbp/LBPoolFactory.sol\":{\"keccak256\":\"0x45ce7db1329ebeb316ce030ade6ebfe298fff3837e635de82accdb5b8138cce0\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://98a8343ed71f41d6f1023a6d8180bdc6f3711244a77fe245dda10cae4212c84c\",\"dweb:/ipfs/QmTJYiMhrcqxhDHsyX5abSmPXtmELz4LkQR4C2JyFfrUmi\"]},\"contracts/lib/GradualValueChange.sol\":{\"keccak256\":\"0xdb4419649358abad284146a3ef47fc0bb558cf3f6e8225cd297061c0d9b432ef\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9aa7441065cd05d84c860cd0057ef3caaafa3ba515a88be4c0efcc6b4e513ece\",\"dweb:/ipfs/QmVgdhub5Bh8cDFPt1oEncDpuWmHTHnwjcYyuEbC93fhCX\"]},\"contracts/lib/LBPoolLib.sol\":{\"keccak256\":\"0xc298415c977bae52d8b322f814cbdbf0f30807a7e9c70f284796f16b3f7bd36b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d5a4b13d00ce0926de0c7d4f5395e92da69dc415590ed5b729d8f31410b0cec0\",\"dweb:/ipfs/QmQ15yejaA2T7BuWCHXHwWo2bBtAbV26TqqYq4eSzabYBk\"]}},\"version\":1}"}},"contracts/lib/GradualValueChange.sol":{"GradualValueChange":{"abi":[{"inputs":[{"internalType":"uint256","name":"resolvedStartTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"GradualUpdateTimeTravel","type":"error"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220e30105b2f3a2980d87bb4862cc42edf0cb3c762dd3c9447842d2bbc90807961f64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE3 ADD SDIV 0xB2 RETURN LOG2 SWAP9 0xD DUP8 0xBB BASEFEE PUSH3 0xCC42ED CREATE 0xCB EXTCODECOPY PUSH23 0x2DD3C9447842D2BBC90807961F64736F6C634300081B00 CALLER ","sourceMap":"271:2759:126:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220e30105b2f3a2980d87bb4862cc42edf0cb3c762dd3c9447842d2bbc90807961f64736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE3 ADD SDIV 0xB2 RETURN LOG2 SWAP9 0xD DUP8 0xBB BASEFEE PUSH3 0xCC42ED CREATE 0xCB EXTCODECOPY PUSH23 0x2DD3C9447842D2BBC90807961F64736F6C634300081B00 CALLER ","sourceMap":"271:2759:126:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"resolvedStartTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"GradualUpdateTimeTravel\",\"type\":\"error\"}],\"devdoc\":{\"errors\":{\"GradualUpdateTimeTravel(uint256,uint256)\":[{\"details\":\"Indicates that the start time is after the end time\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/lib/GradualValueChange.sol\":\"GradualValueChange\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"contracts/lib/GradualValueChange.sol\":{\"keccak256\":\"0xdb4419649358abad284146a3ef47fc0bb558cf3f6e8225cd297061c0d9b432ef\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9aa7441065cd05d84c860cd0057ef3caaafa3ba515a88be4c0efcc6b4e513ece\",\"dweb:/ipfs/QmVgdhub5Bh8cDFPt1oEncDpuWmHTHnwjcYyuEbC93fhCX\"]}},\"version\":1}"}},"contracts/lib/LBPoolLib.sol":{"LBPoolLib":{"abi":[],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"6080806040523460175760399081601c823930815050f35b5f80fdfe5f80fdfea2646970667358221220676532bf21b27800b2c36364886ce63a6b79668419b21909a2271712aa34765464736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x17 JUMPI PUSH1 0x39 SWAP1 DUP2 PUSH1 0x1C DUP3 CODECOPY ADDRESS DUP2 POP POP RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH8 0x6532BF21B27800B2 0xC3 PUSH4 0x64886CE6 GASPRICE PUSH12 0x79668419B21909A2271712AA CALLVALUE PUSH23 0x5464736F6C634300081B00330000000000000000000000 ","sourceMap":"435:1218:127:-:0;;;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"5f80fdfea2646970667358221220676532bf21b27800b2c36364886ce63a6b79668419b21909a2271712aa34765464736f6c634300081b0033","opcodes":"PUSH0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH8 0x6532BF21B27800B2 0xC3 PUSH4 0x64886CE6 GASPRICE PUSH12 0x79668419B21909A2271712AA CALLVALUE PUSH23 0x5464736F6C634300081B00330000000000000000000000 ","sourceMap":"435:1218:127:-:0;;"},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/lib/LBPoolLib.sol\":\"LBPoolLib\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol\":{\"keccak256\":\"0xae65b6b0800fed858a56df5dc8fe7eda072f7d409f0e0d4c63ad8fca5f0c8d33\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4503850853e86c655d3dba125613822c26552c834215e24bd88c2ac0f29675d4\",\"dweb:/ipfs/QmQ4dGpVpRcyhVfer2qsnbX2tTktwVXoX2bvoodrh3tinR\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"contracts/lib/GradualValueChange.sol\":{\"keccak256\":\"0xdb4419649358abad284146a3ef47fc0bb558cf3f6e8225cd297061c0d9b432ef\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9aa7441065cd05d84c860cd0057ef3caaafa3ba515a88be4c0efcc6b4e513ece\",\"dweb:/ipfs/QmVgdhub5Bh8cDFPt1oEncDpuWmHTHnwjcYyuEbC93fhCX\"]},\"contracts/lib/LBPoolLib.sol\":{\"keccak256\":\"0xc298415c977bae52d8b322f814cbdbf0f30807a7e9c70f284796f16b3f7bd36b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d5a4b13d00ce0926de0c7d4f5395e92da69dc415590ed5b729d8f31410b0cec0\",\"dweb:/ipfs/QmQ15yejaA2T7BuWCHXHwWo2bBtAbV26TqqYq4eSzabYBk\"]}},\"version\":1}"}},"contracts/test/GradualValueChangeMock.sol":{"GradualValueChangeMock":{"abi":[{"inputs":[{"internalType":"uint256","name":"resolvedStartTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"GradualUpdateTimeTravel","type":"error"},{"inputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"calculateValueChangeProgress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"startValue","type":"uint256"},{"internalType":"uint256","name":"endValue","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"getInterpolatedValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"startValue","type":"uint256"},{"internalType":"uint256","name":"endValue","type":"uint256"},{"internalType":"uint256","name":"pctProgress","type":"uint256"}],"name":"interpolateValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"resolveStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608080604052346015576102e0908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c8063352f5c771461010d578063b470d7e0146100ac578063c97c5ec21461006a5763cb85071014610045575f80fd5b3461006657602061005e6100583661015a565b906101f0565b604051908152f35b5f80fd5b346100665760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261006657602061005e60443560243560043561018e565b34610066576100ba3661015a565b908042115f146101085750425b818110156100da57602090604051908152f35b7f7d0356f3000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b6100c7565b346100665760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261006657602061005e61014f6064356044356101f0565b60243560043561018e565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6040910112610066576004359060243590565b9190670de0b6b3a7640000918281108015906101e7575b6101e05780156101da5783828111156101ca57916101c4920390610297565b04900390565b6101d5920390610297565b040190565b50505090565b5091505090565b508184146101a5565b428211610205575050670de0b6b3a764000090565b804211156102915780420391670de0b6b3a7640000808402938404148242141715610264578181146102375703900490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b50505f90565b818102929181159184041417156102645756fea2646970667358221220204cb04c14ccc40555f58029a148c8c7f0b0df11006df995b9bbf628ef37b91e64736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x15 JUMPI PUSH2 0x2E0 SWAP1 DUP2 PUSH2 0x1A DUP3 CODECOPY RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x352F5C77 EQ PUSH2 0x10D JUMPI DUP1 PUSH4 0xB470D7E0 EQ PUSH2 0xAC JUMPI DUP1 PUSH4 0xC97C5EC2 EQ PUSH2 0x6A JUMPI PUSH4 0xCB850710 EQ PUSH2 0x45 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x66 JUMPI PUSH1 0x20 PUSH2 0x5E PUSH2 0x58 CALLDATASIZE PUSH2 0x15A JUMP JUMPDEST SWAP1 PUSH2 0x1F0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x66 JUMPI PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x66 JUMPI PUSH1 0x20 PUSH2 0x5E PUSH1 0x44 CALLDATALOAD PUSH1 0x24 CALLDATALOAD PUSH1 0x4 CALLDATALOAD PUSH2 0x18E JUMP JUMPDEST CALLVALUE PUSH2 0x66 JUMPI PUSH2 0xBA CALLDATASIZE PUSH2 0x15A JUMP JUMPDEST SWAP1 DUP1 TIMESTAMP GT PUSH0 EQ PUSH2 0x108 JUMPI POP TIMESTAMP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xDA JUMPI PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH32 0x7D0356F300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0xC7 JUMP JUMPDEST CALLVALUE PUSH2 0x66 JUMPI PUSH1 0x80 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x66 JUMPI PUSH1 0x20 PUSH2 0x5E PUSH2 0x14F PUSH1 0x64 CALLDATALOAD PUSH1 0x44 CALLDATALOAD PUSH2 0x1F0 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH1 0x4 CALLDATALOAD PUSH2 0x18E JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC PUSH1 0x40 SWAP2 ADD SLT PUSH2 0x66 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 LT DUP1 ISZERO SWAP1 PUSH2 0x1E7 JUMPI JUMPDEST PUSH2 0x1E0 JUMPI DUP1 ISZERO PUSH2 0x1DA JUMPI DUP4 DUP3 DUP2 GT ISZERO PUSH2 0x1CA JUMPI SWAP2 PUSH2 0x1C4 SWAP3 SUB SWAP1 PUSH2 0x297 JUMP JUMPDEST DIV SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH2 0x1D5 SWAP3 SUB SWAP1 PUSH2 0x297 JUMP JUMPDEST DIV ADD SWAP1 JUMP JUMPDEST POP POP POP SWAP1 JUMP JUMPDEST POP SWAP2 POP POP SWAP1 JUMP JUMPDEST POP DUP2 DUP5 EQ PUSH2 0x1A5 JUMP JUMPDEST TIMESTAMP DUP3 GT PUSH2 0x205 JUMPI POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP JUMPDEST DUP1 TIMESTAMP GT ISZERO PUSH2 0x291 JUMPI DUP1 TIMESTAMP SUB SWAP2 PUSH8 0xDE0B6B3A7640000 DUP1 DUP5 MUL SWAP4 DUP5 DIV EQ DUP3 TIMESTAMP EQ OR ISZERO PUSH2 0x264 JUMPI DUP2 DUP2 EQ PUSH2 0x237 JUMPI SUB SWAP1 DIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x264 JUMPI JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 KECCAK256 0x4C 0xB0 0x4C EQ 0xCC 0xC4 SDIV SSTORE CREATE2 DUP1 0x29 LOG1 BASEFEE 0xC8 0xC7 CREATE 0xB0 0xDF GT STOP PUSH14 0xF995B9BBF628EF37B91E64736F6C PUSH4 0x4300081B STOP CALLER ","sourceMap":"113:910:128:-:0;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_uint256t_uint256":{"entryPoint":346,"id":null,"parameterSlots":1,"returnSlots":2},"checked_mul_uint256":{"entryPoint":663,"id":null,"parameterSlots":2,"returnSlots":1},"fun_calculateValueChangeProgress":{"entryPoint":496,"id":47834,"parameterSlots":2,"returnSlots":1},"fun_interpolateValue":{"entryPoint":398,"id":47781,"parameterSlots":3,"returnSlots":1}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"60806040526004361015610011575f80fd5b5f3560e01c8063352f5c771461010d578063b470d7e0146100ac578063c97c5ec21461006a5763cb85071014610045575f80fd5b3461006657602061005e6100583661015a565b906101f0565b604051908152f35b5f80fd5b346100665760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261006657602061005e60443560243560043561018e565b34610066576100ba3661015a565b908042115f146101085750425b818110156100da57602090604051908152f35b7f7d0356f3000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b6100c7565b346100665760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261006657602061005e61014f6064356044356101f0565b60243560043561018e565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6040910112610066576004359060243590565b9190670de0b6b3a7640000918281108015906101e7575b6101e05780156101da5783828111156101ca57916101c4920390610297565b04900390565b6101d5920390610297565b040190565b50505090565b5091505090565b508184146101a5565b428211610205575050670de0b6b3a764000090565b804211156102915780420391670de0b6b3a7640000808402938404148242141715610264578181146102375703900490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b50505f90565b818102929181159184041417156102645756fea2646970667358221220204cb04c14ccc40555f58029a148c8c7f0b0df11006df995b9bbf628ef37b91e64736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 CALLDATASIZE LT ISZERO PUSH2 0x11 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x352F5C77 EQ PUSH2 0x10D JUMPI DUP1 PUSH4 0xB470D7E0 EQ PUSH2 0xAC JUMPI DUP1 PUSH4 0xC97C5EC2 EQ PUSH2 0x6A JUMPI PUSH4 0xCB850710 EQ PUSH2 0x45 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x66 JUMPI PUSH1 0x20 PUSH2 0x5E PUSH2 0x58 CALLDATASIZE PUSH2 0x15A JUMP JUMPDEST SWAP1 PUSH2 0x1F0 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x66 JUMPI PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x66 JUMPI PUSH1 0x20 PUSH2 0x5E PUSH1 0x44 CALLDATALOAD PUSH1 0x24 CALLDATALOAD PUSH1 0x4 CALLDATALOAD PUSH2 0x18E JUMP JUMPDEST CALLVALUE PUSH2 0x66 JUMPI PUSH2 0xBA CALLDATASIZE PUSH2 0x15A JUMP JUMPDEST SWAP1 DUP1 TIMESTAMP GT PUSH0 EQ PUSH2 0x108 JUMPI POP TIMESTAMP JUMPDEST DUP2 DUP2 LT ISZERO PUSH2 0xDA JUMPI PUSH1 0x20 SWAP1 PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH32 0x7D0356F300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST PUSH2 0xC7 JUMP JUMPDEST CALLVALUE PUSH2 0x66 JUMPI PUSH1 0x80 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0x66 JUMPI PUSH1 0x20 PUSH2 0x5E PUSH2 0x14F PUSH1 0x64 CALLDATALOAD PUSH1 0x44 CALLDATALOAD PUSH2 0x1F0 JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH1 0x4 CALLDATALOAD PUSH2 0x18E JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC PUSH1 0x40 SWAP2 ADD SLT PUSH2 0x66 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 LT DUP1 ISZERO SWAP1 PUSH2 0x1E7 JUMPI JUMPDEST PUSH2 0x1E0 JUMPI DUP1 ISZERO PUSH2 0x1DA JUMPI DUP4 DUP3 DUP2 GT ISZERO PUSH2 0x1CA JUMPI SWAP2 PUSH2 0x1C4 SWAP3 SUB SWAP1 PUSH2 0x297 JUMP JUMPDEST DIV SWAP1 SUB SWAP1 JUMP JUMPDEST PUSH2 0x1D5 SWAP3 SUB SWAP1 PUSH2 0x297 JUMP JUMPDEST DIV ADD SWAP1 JUMP JUMPDEST POP POP POP SWAP1 JUMP JUMPDEST POP SWAP2 POP POP SWAP1 JUMP JUMPDEST POP DUP2 DUP5 EQ PUSH2 0x1A5 JUMP JUMPDEST TIMESTAMP DUP3 GT PUSH2 0x205 JUMPI POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP JUMPDEST DUP1 TIMESTAMP GT ISZERO PUSH2 0x291 JUMPI DUP1 TIMESTAMP SUB SWAP2 PUSH8 0xDE0B6B3A7640000 DUP1 DUP5 MUL SWAP4 DUP5 DIV EQ DUP3 TIMESTAMP EQ OR ISZERO PUSH2 0x264 JUMPI DUP2 DUP2 EQ PUSH2 0x237 JUMPI SUB SWAP1 DIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x264 JUMPI JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 KECCAK256 0x4C 0xB0 0x4C EQ 0xCC 0xC4 SDIV SSTORE CREATE2 DUP1 0x29 LOG1 BASEFEE 0xC8 0xC7 CREATE 0xB0 0xDF GT STOP PUSH14 0xF995B9BBF628EF37B91E64736F6C PUSH4 0x4300081B STOP CALLER ","sourceMap":"113:910:128:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;947:67;113:910;;;:::i;:::-;947:67;;:::i;:::-;113:910;;;;;;;;;;;;;;;;;;;;;;743:70;113:910;;;;;;743:70;:::i;113:910::-;;;;;;;:::i;:::-;2466:13:118;1236:15:126;;2466:5:118;:13;:5;;;1236:15:126;;2466:13:118;1278:28:126;;;;1274:117;;113:910:128;;;;;;;;1274:117:126;1329:51;113:910:128;1329:51:126;113:910:128;;;;;;1329:51:126;2466:13:118;;;113:910:128;;;;;;;;;;;;756:51:126;690:48;113:910:128;;;;690:48:126;:::i;:::-;113:910:128;;;;756:51:126;:::i;113:910:128:-;;;;;;;;;;;;;;:::o;1403:683:126:-;;;465:4:50;1564:29:126;;;;;;:55;;;1403:683;1560:101;;1675:16;;1671:64;;1773:21;;;;;;;465:4:50;838:5;465:4;;838:5;;:::i;:::-;113:910:128;465:4:50;;1890:25:126;:::o;1769:301::-;838:5:50;465:4;;838:5;;:::i;:::-;113:910:128;465:4:50;2030:25:126;:::o;1671:64::-;1707:17;;;;:::o;1560:101::-;1635:15;;;;;:::o;1564:55::-;1597:22;;;;1564:55;;2307:721;2427:15;:26;-1:-1:-1;2427:26:126;;2469:21;;465:4:50;2469:21:126;:::o;2423:151::-;2427:15;;2511:28;;2507:67;;2427:15;;465:4:50;;;113:910:128;;;;;;;2427:15:126;;113:910:128;;;;;;;;;;465:4:50;113:910:128;;2307:721:126;:::o;113:910:128:-;;;;;;;;;;;;;;;;;;;;2507:67:126;2555:8;;113:910:128;2555:8:126;:::o;113:910:128:-;;;;;;;;;;;;;;;;:::o"},"methodIdentifiers":{"calculateValueChangeProgress(uint256,uint256)":"cb850710","getInterpolatedValue(uint256,uint256,uint256,uint256)":"352f5c77","interpolateValue(uint256,uint256,uint256)":"c97c5ec2","resolveStartTime(uint256,uint256)":"b470d7e0"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"resolvedStartTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"GradualUpdateTimeTravel\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"calculateValueChangeProgress\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"startValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"getInterpolatedValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"startValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endValue\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pctProgress\",\"type\":\"uint256\"}],\"name\":\"interpolateValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"resolveStartTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"GradualUpdateTimeTravel(uint256,uint256)\":[{\"details\":\"Indicates that the start time is after the end time\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/GradualValueChangeMock.sol\":\"GradualValueChangeMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"contracts/lib/GradualValueChange.sol\":{\"keccak256\":\"0xdb4419649358abad284146a3ef47fc0bb558cf3f6e8225cd297061c0d9b432ef\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://9aa7441065cd05d84c860cd0057ef3caaafa3ba515a88be4c0efcc6b4e513ece\",\"dweb:/ipfs/QmVgdhub5Bh8cDFPt1oEncDpuWmHTHnwjcYyuEbC93fhCX\"]},\"contracts/test/GradualValueChangeMock.sol\":{\"keccak256\":\"0x80fed5365f009b8f14bfed3d6c7f4cbe015b13b1ee061840a225b7ca0630761d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8b182c6e21a6e79083c491aa48e047b7f30dd8a3137895ca4c41e1746c55487c\",\"dweb:/ipfs/QmQu7FN7ASjU4oaZdtp4D7eegFtDv7n1ik7M8AM6u91a9f\"]}},\"version\":1}"}},"contracts/test/WeightedBasePoolMathMock.sol":{"WeightedBasePoolMathMock":{"abi":[{"inputs":[{"internalType":"uint256[]","name":"_weights","type":"uint256[]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BaseOutOfBounds","type":"error"},{"inputs":[],"name":"ExponentOutOfBounds","type":"error"},{"inputs":[],"name":"InvalidExponent","type":"error"},{"inputs":[{"internalType":"uint256","name":"invariantRatio","type":"uint256"},{"internalType":"uint256","name":"maxInvariantRatio","type":"uint256"}],"name":"InvariantRatioAboveMax","type":"error"},{"inputs":[{"internalType":"uint256","name":"invariantRatio","type":"uint256"},{"internalType":"uint256","name":"minInvariantRatio","type":"uint256"}],"name":"InvariantRatioBelowMin","type":"error"},{"inputs":[],"name":"ProductOutOfBounds","type":"error"},{"inputs":[],"name":"ZeroDivision","type":"error"},{"inputs":[],"name":"ZeroInvariant","type":"error"},{"inputs":[{"internalType":"uint256[]","name":"currentBalances","type":"uint256[]"},{"internalType":"uint256","name":"tokenInIndex","type":"uint256"},{"internalType":"uint256","name":"exactBptAmountOut","type":"uint256"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"computeAddLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"amountInWithFee","type":"uint256"},{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"currentBalances","type":"uint256[]"},{"internalType":"uint256[]","name":"exactAmounts","type":"uint256[]"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"computeAddLiquidityUnbalanced","outputs":[{"internalType":"uint256","name":"bptAmountOut","type":"uint256"},{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256","name":"tokenInIndex","type":"uint256"},{"internalType":"uint256","name":"invariantRatio","type":"uint256"}],"name":"computeBalance","outputs":[{"internalType":"uint256","name":"newBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"enum Rounding","name":"rounding","type":"uint8"}],"name":"computeInvariant","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"balances","type":"uint256[]"},{"internalType":"uint256","name":"bptTotalSupply","type":"uint256"},{"internalType":"uint256","name":"bptAmountOut","type":"uint256"}],"name":"computeProportionalAmountsIn","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"balances","type":"uint256[]"},{"internalType":"uint256","name":"bptTotalSupply","type":"uint256"},{"internalType":"uint256","name":"bptAmountIn","type":"uint256"}],"name":"computeProportionalAmountsOut","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"currentBalances","type":"uint256[]"},{"internalType":"uint256","name":"tokenOutIndex","type":"uint256"},{"internalType":"uint256","name":"exactBptAmountIn","type":"uint256"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"computeRemoveLiquiditySingleTokenExactIn","outputs":[{"internalType":"uint256","name":"amountOutWithFee","type":"uint256"},{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"currentBalances","type":"uint256[]"},{"internalType":"uint256","name":"tokenOutIndex","type":"uint256"},{"internalType":"uint256","name":"exactAmountOut","type":"uint256"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"uint256","name":"swapFeePercentage","type":"uint256"}],"name":"computeRemoveLiquiditySingleTokenExactOut","outputs":[{"internalType":"uint256","name":"bptAmountIn","type":"uint256"},{"internalType":"uint256[]","name":"swapFeeAmounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumInvariantRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMaximumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumInvariantRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"","type":"tuple"}],"name":"onSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"weights","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"allocate_memory":{"entryPoint":299,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"60806040523461012757611fab803803806100198161012b565b92833981019060209182828203126101275781516001600160401b039283821161012757019080601f8301121561012757815190838211610104578160051b928561006581860161012b565b80948152018681958301019283116101275786809201905b83821061011857505050505191821161010457680100000000000000008211610104575f54825f558083106100df575b505f8052825f20925f5b8381106100cd57604051611e5a90816101518239f35b825185820155918101916001016100b7565b5f805282845f2091820191015b8181106100f957506100ad565b5f81556001016100ec565b634e487b7160e01b5f52604160045260245ffd5b8151815290820190820161007d565b5f80fd5b6040519190601f01601f191682016001600160401b038111838210176101045760405256fe604060808152600480361015610013575f80fd5b5f3560e01c90816316a0b3e014610b46578163273c1adf14610b225781633ab0591514610a1a578163654cf15d146109f857816372c981861461096b57816385d5261a14610830578163984de9e8146107df5781639a87ffbf1461052d578163b5f163ff146104f6578163b677fa56146104a0578163c548e4d8146104a5578163ce20ece7146104a0578163d9c7cc7a1461012c575063da317980146100b7575f80fd5b34610128576100c536610d5f565b6100d28392949351611096565b915f5b815181101561010f57806100fe876100f9866100f360019688610e80565b51611109565b61111c565b6101088287610e80565b52016100d5565b84516020808252819061012490820187610dd3565b0390f35b5f80fd5b82346101285760806003193601126101285767ffffffffffffffff9180358381116101285761015e9036908301610cff565b92602490602435908111610128576101799036908401610cff565b6064359285519561018987611096565b9261019388611096565b945f5b8981106104365750505085519687957f984de9e8000000000000000000000000000000000000000000000000000000009283885288858901526101dc6044890182610dd3565b5f60248a01528860209b8c920381305afa97881561042c575f986103fd575b508851908482528a82806102118a8a8301611153565b0381305afa9182156103f3575f926103c4575b50670de0b6b3a7640000918281029080820484149015171561039857906102518a8d98979695949361111c565b9061025c8230611368565b5f5b8581106102f95750505050505061027e8751948593849384528301611153565b0381305afa9081156102ef575f916102c2575b50826100f96102a6610124956102ae9461103a565b604435611109565b928080519586958652850152830190610dd3565b90508481813d83116102e8575b6102d98183610c79565b81010312610128575182610291565b503d6102cf565b84513d5f823e3d90fd5b84849596979899508b8b8385969761031d61031683600199610e80565b518a611109565b04806103298385610e80565b5111610344575b505050505001908c9796959493929161025e565b8183610365610383976103759461035e8561037c99610e80565b51036111fe565b61036f8388610e80565b52610e80565b5192610e80565b519061103a565b61038d828c610e80565b52858b8b835f610330565b6011877f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b9091508a81813d83116103ec575b6103dc8183610c79565b810103126101285751908b610224565b503d6103d2565b8a513d5f823e3d90fd5b9097508981813d8311610425575b6104158183610c79565b810103126101285751968a6101fb565b503d61040b565b89513d5f823e3d90fd5b6104556104438286610e80565b5161044e8386610e80565b51906110e5565b5f198101908111610475579060019161046e8289610e80565b5201610196565b826011877f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b610e66565b8234610128576104b436610d5f565b6104c18392949351611096565b915f5b815181101561010f57806104e587856104df60019587610e80565b51611348565b6104ef8287610e80565b52016104c4565b9050346101285760206003193601126101285735905f548210156101285761051f602092610e06565b91905490519160031b1c8152f35b82346101285761053c36610d95565b9184519461054986611096565b915f5b8781106107885750610568906105628785610e80565b5161103a565b6105728684610e80565b5286519788947f984de9e8000000000000000000000000000000000000000000000000000000009283875289838801526105af6044880182610dd3565b5f60248901528760209c8d920381305afa9687156103f3575f97610759575b5089518481528a848201528b81806105e9604482018a610dd3565b5f60248301520381305afa90811561074f57888d959493928b925f91610712575b50610663949361063761065e946106276106489561063e956112ef565b926106328430611220565b610e80565b51906111fe565b61037c8c8a610e80565b91670de0b6b3a7640000818103911002826112ef565b61103a565b92610672846105628a88610e80565b61067c8987610e80565b526106908a51958693849384528301611153565b0381305afa918215610708575f926106d1575b506102ae9392916106cb916106c46106bd61012499611096565b9788610e80565b528361103a565b90611348565b90939291508781813d8311610701575b6106eb8183610c79565b81010312610128575191929091906101246106a3565b503d6106e1565b87513d5f823e3d90fd5b969250505084819392933d8311610748575b61072e8183610c79565b810103126101285792518b9391908990899061066361060a565b503d610724565b8b513d5f823e3d90fd5b9096508a81813d8311610781575b6107718183610c79565b810103126101285751958b6105ce565b503d610767565b6107928184610e80565b515f1981019081116107b357906001916107ac8287610e80565b520161054c565b60118b7f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b90503461012857816003193601126101285780359067ffffffffffffffff82116101285761080f91369101610cff565b906024359160028310156101285760209261082991610f00565b9051908152f35b9050346101285761085590602061084636610d95565b938397828298959793946110e5565b9361089e61086385876112ef565b61086d8130611368565b8b5198899485947f16a0b3e00000000000000000000000000000000000000000000000000000000086528501611074565b0381305afa9182156107085786945f9361092e575b5061090261090b9461065e61064888966108fc8b976100f9610912986108f56101249f6109189f6108e7906108ee92610e80565b518761103a565b9c8c610e80565b5190611109565b9061103a565b93849251611096565b9687610e80565b526110e5565b9183519384938452806020850152830190610dd3565b94509150936020843d602011610963575b8161094c60209383610c79565b8101031261012857925192938593916109026108b3565b3d915061093f565b905034610128576003196020813601126101285781359067ffffffffffffffff82116101285760e0913603011261012857602060649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600f60248201527f4e6f7420696d706c656d656e74656400000000000000000000000000000000006044820152fd5b8234610128575f6003193601126101285760209051670de0b6b3a76400008152f35b905034610128576020610a3f91610a3036610d95565b9383978293829795989361103a565b93610a88610a4d85876112ef565b610a578130611220565b8b51998a9485947f16a0b3e00000000000000000000000000000000000000000000000000000000086528501611074565b0381305afa9182156107085786955f93610ae4575b888761012461091861090b838b610ade6109028d610ad98e61065e8f8f610ad2610acb856105628d8d610e80565b9a8a610e80565b5190611348565b6111fe565b5261103a565b9491925094506020843d602011610b1a575b81610b0360209383610c79565b810103126101285792518594909190610902610a9d565b3d9150610af6565b8234610128575f600319360112610128576020905169d3c21bcecceda10000008152f35b90503461012857610b6891610b6f610b5d36610d5f565b929190809691610e80565b5194610e06565b90549060031b1c600182115f14610c725760025b80600114610c1957600214610bbe576051847f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b9091928115610bf3575092610bed6108299260016020966ec097ce7bc90715b34b9f0fffffffff040190611170565b906111fe565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f525ffd5b509091928115610c46575092610bed610829926020956ec097ce7bc90715b34b9f10000000000490611170565b6012907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b6001610b83565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610cba57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff8111610cba5760051b60200190565b9080601f83011215610128576020908235610d1981610ce7565b93610d276040519586610c79565b81855260208086019260051b82010192831161012857602001905b828210610d50575050505090565b81358152908301908301610d42565b6060600319820112610128576004359067ffffffffffffffff821161012857610d8a91600401610cff565b906024359060443590565b60a0600319820112610128576004359067ffffffffffffffff821161012857610dc091600401610cff565b9060243590604435906064359060843590565b9081518082526020808093019301915f5b828110610df2575050505090565b835185529381019392810192600101610de4565b5f54811015610e39575f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56301905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b34610128575f6003193601126101285760206040515f8152f35b8051821015610e395760209160051b010190565b604051905f548083528260209160208201905f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f905b828210610ee657505050610ee492500383610c79565b565b855484526001958601958895509381019390910190610ece565b90600281101561100d576001908103610faf5780610f1c610e94565b670de0b6b3a7640000935f935b610f63575b505050508015610f3b5790565b7f26543689000000000000000000000000000000000000000000000000000000005f5260045ffd5b8151841015610faa5782670de0b6b3a7640000610fa18697610f9b610f89859987610e80565b51610f948b89610e80565b519061142c565b90611109565b04950193610f29565b610f2e565b80610fb8610e94565b670de0b6b3a7640000935f935b610fd657505050508015610f3b5790565b8151841015610faa57826110058596610bed610ff3849886610e80565b51610ffe8a88610e80565b5190611170565b950193610fc5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b9190820391821161104757565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b61108c60409295949395606083526060830190610dd3565b9460208201520152565b906110a082610ce7565b6110ad6040519182610c79565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06110db8294610ce7565b0190602036910137565b9190820180921161104757565b906127109182810292818404149015171561104757565b8181029291811591840414171561104757565b8115611126570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b9190602061116b600192604086526040860190610dd3565b930152565b90670de0b6b3a76400009081810361118757505090565b671bc16d674ec8000081036111a5575050806111a2916111fe565b90565b673782dace9d90000081036111c95750506111c3816111a2926111fe565b806111fe565b6111d391926114ed565b9060016111df836110f2565b915f19830104019015150260018101809111611047576111a2916110e5565b9061120891611109565b6001670de0b6b3a76400005f19830104019015150290565b90602073ffffffffffffffffffffffffffffffffffffffff926004604051809581937fb677fa56000000000000000000000000000000000000000000000000000000008352165afa9182156112e4575f926112b0575b50818110611282575050565b7fe31c95be000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b9091506020813d6020116112dc575b816112cc60209383610c79565b810103126101285751905f611276565b3d91506112bf565b6040513d5f823e3d90fd5b90801561132057670de0b6b3a764000091828102928184041490151715611047576001905f19830104019015150290565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b82156113205760019161135a91611109565b915f19830104019015150290565b90602073ffffffffffffffffffffffffffffffffffffffff926004604051809581937f273c1adf000000000000000000000000000000000000000000000000000000008352165afa9182156112e4575f926113f8575b508181116113ca575050565b7f3e8960dc000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b9091506020813d602011611424575b8161141460209383610c79565b810103126101285751905f6113be565b3d9150611407565b670de0b6b3a7640000918083036114435750905090565b8290671bc16d674ec8000081036114645750508061146091611109565b0490565b673782dace9d900000810361148857506114818261146093611109565b0480611109565b9050611493916114ed565b61149c816110f2565b60015f19938483010401901515029060018201808311611047578110156114c4575050505f90565b030190565b8015611126576ec097ce7bc90715b34b9f10000000000590565b8115611126570590565b908015611e16578115611e10578160ff1c611de857770bce5086492111aea88f4bb1ca6bcf584181ea8059f76532811015611dc05781670c7d713b49da00001280611daf575b15611a4c57670de0b6b3a7640000916ec097ce7bc90715b34b9f100000000090611586908402828101907fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f0000000000183026114e3565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b918082818507020592050201670de0b6b3a7640000905b057ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc00008181131580611a39575b15611a11578190821215806119fe575b156119d6575f915f81126119c7575b506064906806f05b59d3b20000008112611964577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e0000000168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac6200000081121561192b575b6856bc75e2d6310000008112156118f1575b682b5e3af16b188000008112156118b9575b6815af1d78b58c400000811215611881575b680ad78ebc5ac620000081121561184a575b82811215611813575b6802b5e3af16b18800008112156117dc575b68015af1d78b58c400008112156117a5575b60028382800205056003848383020505600485848302050585600581868402050560068287830205056007838883020505906008848984020505926009858a8602050595600a868b8902050597600b878c8b02050599600c888d8d0205059b01010101010101010101010102050205905f146111a2576111a2906114c9565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c000084920192020590611726565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e78000084920192020590611714565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf0000084920192020590611702565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000849201920205906116f9565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c00000849201920205906116e7565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e7800000849201920205906116d5565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf000000849201920205906116c3565b6e01855144814a7ff805980ff008400091507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e000000016116b1565b6803782dace9d900000081126119b4577ffffffffffffffffffffffffffffffffffffffffffffffffc87d25316270000000168056bc75e2d63100000826b1425982cf597cd205cef73809261169c565b68056bc75e2d631000008260019261169c565b600192505f0390506064611640565b7fd4794efd000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c80000821315611631565b7fa2f9f7e3000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c80000821315611621565b81670de0b6b3a7640000925f91848112611d99575b506064905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000821215611d6e575b73011798004d755d3c8bc8e03204cf44619e000000821215611d4d575b820290808302906e01855144814a7ff805980ff00840009081831215611d2a575b50506b02df0ab5a80a22c61ab5a70080821215611d0a575b50693f1fce3da636ea5cf85080821215611cea575b50690127fa27722cc06cc5e280821215611cca575b5068280e60114edb805d0380821215611caa575b50680ebc5fb4174612111080821215611c93575b506808f00f760a4b2db55d80821215611c73575b506806f5f177578893793780821215611c53575b506806248f33704b28660380821215611c34575b506805c548670b9510e7ac80821215611c15575b50611bc268056bc75e2d6310000091827ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf000008183019201026114e3565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b0105905f14611c10575f035b026115f5565b611c0a565b68056bc75e2d631000006756bc75e2d63100009202059101905f611b86565b68056bc75e2d6310000067ad78ebc5ac6200009202059101905f611b72565b68056bc75e2d6310000068015af1d78b58c400009202059101905f611b5e565b68056bc75e2d631000006802b5e3af16b18800009202059101905f611b4a565b68056bc75e2d63100000809202059101905f611b36565b68056bc75e2d63100000680ad78ebc5ac62000009202059101905f611b22565b68056bc75e2d631000006815af1d78b58c4000009202059101905f611b0e565b68056bc75e2d63100000682b5e3af16b188000009202059101905f611af9565b68056bc75e2d631000006856bc75e2d6310000009202059101905f611ae4565b68ad78ebc5ac62000000925069021e19e0c9bab240000002059101905f80611acc565b906b1425982cf597cd205cef73806803782dace9d900000091059101611aab565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b2000000611a8e565b9050611da591506114c9565b6001906064611a61565b50670f43fc2c04ee00008212611533565b7fd8317311000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f022701e0000000000000000000000000000000000000000000000000000000005f5260045ffd5b50505f90565b5050670de0b6b3a76400009056fea26469706673582212202631073c3826e5a6c3b4aa3d493b30de8c068db9d651db5f82b09d11893715c964736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x127 JUMPI PUSH2 0x1FAB DUP1 CODESIZE SUB DUP1 PUSH2 0x19 DUP2 PUSH2 0x12B JUMP JUMPDEST SWAP3 DUP4 CODECOPY DUP2 ADD SWAP1 PUSH1 0x20 SWAP2 DUP3 DUP3 DUP3 SUB SLT PUSH2 0x127 JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB SWAP3 DUP4 DUP3 GT PUSH2 0x127 JUMPI ADD SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x127 JUMPI DUP2 MLOAD SWAP1 DUP4 DUP3 GT PUSH2 0x104 JUMPI DUP2 PUSH1 0x5 SHL SWAP3 DUP6 PUSH2 0x65 DUP2 DUP7 ADD PUSH2 0x12B JUMP JUMPDEST DUP1 SWAP5 DUP2 MSTORE ADD DUP7 DUP2 SWAP6 DUP4 ADD ADD SWAP3 DUP4 GT PUSH2 0x127 JUMPI DUP7 DUP1 SWAP3 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0x118 JUMPI POP POP POP POP MLOAD SWAP2 DUP3 GT PUSH2 0x104 JUMPI PUSH9 0x10000000000000000 DUP3 GT PUSH2 0x104 JUMPI PUSH0 SLOAD DUP3 PUSH0 SSTORE DUP1 DUP4 LT PUSH2 0xDF JUMPI JUMPDEST POP PUSH0 DUP1 MSTORE DUP3 PUSH0 KECCAK256 SWAP3 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0xCD JUMPI PUSH1 0x40 MLOAD PUSH2 0x1E5A SWAP1 DUP2 PUSH2 0x151 DUP3 CODECOPY RETURN JUMPDEST DUP3 MLOAD DUP6 DUP3 ADD SSTORE SWAP2 DUP2 ADD SWAP2 PUSH1 0x1 ADD PUSH2 0xB7 JUMP JUMPDEST PUSH0 DUP1 MSTORE DUP3 DUP5 PUSH0 KECCAK256 SWAP2 DUP3 ADD SWAP2 ADD JUMPDEST DUP2 DUP2 LT PUSH2 0xF9 JUMPI POP PUSH2 0xAD JUMP JUMPDEST PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0xEC JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP3 ADD SWAP1 DUP3 ADD PUSH2 0x7D JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST PUSH1 0x40 MLOAD SWAP2 SWAP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP3 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP4 DUP3 LT OR PUSH2 0x104 JUMPI PUSH1 0x40 MSTORE JUMP INVALID PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x16A0B3E0 EQ PUSH2 0xB46 JUMPI DUP2 PUSH4 0x273C1ADF EQ PUSH2 0xB22 JUMPI DUP2 PUSH4 0x3AB05915 EQ PUSH2 0xA1A JUMPI DUP2 PUSH4 0x654CF15D EQ PUSH2 0x9F8 JUMPI DUP2 PUSH4 0x72C98186 EQ PUSH2 0x96B JUMPI DUP2 PUSH4 0x85D5261A EQ PUSH2 0x830 JUMPI DUP2 PUSH4 0x984DE9E8 EQ PUSH2 0x7DF JUMPI DUP2 PUSH4 0x9A87FFBF EQ PUSH2 0x52D JUMPI DUP2 PUSH4 0xB5F163FF EQ PUSH2 0x4F6 JUMPI DUP2 PUSH4 0xB677FA56 EQ PUSH2 0x4A0 JUMPI DUP2 PUSH4 0xC548E4D8 EQ PUSH2 0x4A5 JUMPI DUP2 PUSH4 0xCE20ECE7 EQ PUSH2 0x4A0 JUMPI DUP2 PUSH4 0xD9C7CC7A EQ PUSH2 0x12C JUMPI POP PUSH4 0xDA317980 EQ PUSH2 0xB7 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x128 JUMPI PUSH2 0xC5 CALLDATASIZE PUSH2 0xD5F JUMP JUMPDEST PUSH2 0xD2 DUP4 SWAP3 SWAP5 SWAP4 MLOAD PUSH2 0x1096 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x10F JUMPI DUP1 PUSH2 0xFE DUP8 PUSH2 0xF9 DUP7 PUSH2 0xF3 PUSH1 0x1 SWAP7 DUP9 PUSH2 0xE80 JUMP JUMPDEST MLOAD PUSH2 0x1109 JUMP JUMPDEST PUSH2 0x111C JUMP JUMPDEST PUSH2 0x108 DUP3 DUP8 PUSH2 0xE80 JUMP JUMPDEST MSTORE ADD PUSH2 0xD5 JUMP JUMPDEST DUP5 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 SWAP1 PUSH2 0x124 SWAP1 DUP3 ADD DUP8 PUSH2 0xDD3 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x128 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x128 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP1 CALLDATALOAD DUP4 DUP2 GT PUSH2 0x128 JUMPI PUSH2 0x15E SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0xCFF JUMP JUMPDEST SWAP3 PUSH1 0x24 SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x128 JUMPI PUSH2 0x179 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0xCFF JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP3 DUP6 MLOAD SWAP6 PUSH2 0x189 DUP8 PUSH2 0x1096 JUMP JUMPDEST SWAP3 PUSH2 0x193 DUP9 PUSH2 0x1096 JUMP JUMPDEST SWAP5 PUSH0 JUMPDEST DUP10 DUP2 LT PUSH2 0x436 JUMPI POP POP POP DUP6 MLOAD SWAP7 DUP8 SWAP6 PUSH32 0x984DE9E800000000000000000000000000000000000000000000000000000000 SWAP3 DUP4 DUP9 MSTORE DUP9 DUP6 DUP10 ADD MSTORE PUSH2 0x1DC PUSH1 0x44 DUP10 ADD DUP3 PUSH2 0xDD3 JUMP JUMPDEST PUSH0 PUSH1 0x24 DUP11 ADD MSTORE DUP9 PUSH1 0x20 SWAP12 DUP13 SWAP3 SUB DUP2 ADDRESS GAS STATICCALL SWAP8 DUP9 ISZERO PUSH2 0x42C JUMPI PUSH0 SWAP9 PUSH2 0x3FD JUMPI JUMPDEST POP DUP9 MLOAD SWAP1 DUP5 DUP3 MSTORE DUP11 DUP3 DUP1 PUSH2 0x211 DUP11 DUP11 DUP4 ADD PUSH2 0x1153 JUMP JUMPDEST SUB DUP2 ADDRESS GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x3F3 JUMPI PUSH0 SWAP3 PUSH2 0x3C4 JUMPI JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP1 DUP1 DUP3 DIV DUP5 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x398 JUMPI SWAP1 PUSH2 0x251 DUP11 DUP14 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 PUSH2 0x111C JUMP JUMPDEST SWAP1 PUSH2 0x25C DUP3 ADDRESS PUSH2 0x1368 JUMP JUMPDEST PUSH0 JUMPDEST DUP6 DUP2 LT PUSH2 0x2F9 JUMPI POP POP POP POP POP POP PUSH2 0x27E DUP8 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD PUSH2 0x1153 JUMP JUMPDEST SUB DUP2 ADDRESS GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2EF JUMPI PUSH0 SWAP2 PUSH2 0x2C2 JUMPI JUMPDEST POP DUP3 PUSH2 0xF9 PUSH2 0x2A6 PUSH2 0x124 SWAP6 PUSH2 0x2AE SWAP5 PUSH2 0x103A JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD PUSH2 0x1109 JUMP JUMPDEST SWAP3 DUP1 DUP1 MLOAD SWAP6 DUP7 SWAP6 DUP7 MSTORE DUP6 ADD MSTORE DUP4 ADD SWAP1 PUSH2 0xDD3 JUMP JUMPDEST SWAP1 POP DUP5 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2E8 JUMPI JUMPDEST PUSH2 0x2D9 DUP2 DUP4 PUSH2 0xC79 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x128 JUMPI MLOAD DUP3 PUSH2 0x291 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2CF JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 DUP5 SWAP6 SWAP7 SWAP8 SWAP9 SWAP10 POP DUP12 DUP12 DUP4 DUP6 SWAP7 SWAP8 PUSH2 0x31D PUSH2 0x316 DUP4 PUSH1 0x1 SWAP10 PUSH2 0xE80 JUMP JUMPDEST MLOAD DUP11 PUSH2 0x1109 JUMP JUMPDEST DIV DUP1 PUSH2 0x329 DUP4 DUP6 PUSH2 0xE80 JUMP JUMPDEST MLOAD GT PUSH2 0x344 JUMPI JUMPDEST POP POP POP POP POP ADD SWAP1 DUP13 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 PUSH2 0x25E JUMP JUMPDEST DUP2 DUP4 PUSH2 0x365 PUSH2 0x383 SWAP8 PUSH2 0x375 SWAP5 PUSH2 0x35E DUP6 PUSH2 0x37C SWAP10 PUSH2 0xE80 JUMP JUMPDEST MLOAD SUB PUSH2 0x11FE JUMP JUMPDEST PUSH2 0x36F DUP4 DUP9 PUSH2 0xE80 JUMP JUMPDEST MSTORE PUSH2 0xE80 JUMP JUMPDEST MLOAD SWAP3 PUSH2 0xE80 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x103A JUMP JUMPDEST PUSH2 0x38D DUP3 DUP13 PUSH2 0xE80 JUMP JUMPDEST MSTORE DUP6 DUP12 DUP12 DUP4 PUSH0 PUSH2 0x330 JUMP JUMPDEST PUSH1 0x11 DUP8 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP DUP11 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3EC JUMPI JUMPDEST PUSH2 0x3DC DUP2 DUP4 PUSH2 0xC79 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x128 JUMPI MLOAD SWAP1 DUP12 PUSH2 0x224 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3D2 JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP8 POP DUP10 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x425 JUMPI JUMPDEST PUSH2 0x415 DUP2 DUP4 PUSH2 0xC79 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x128 JUMPI MLOAD SWAP7 DUP11 PUSH2 0x1FB JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x40B JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x455 PUSH2 0x443 DUP3 DUP7 PUSH2 0xE80 JUMP JUMPDEST MLOAD PUSH2 0x44E DUP4 DUP7 PUSH2 0xE80 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x10E5 JUMP JUMPDEST PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x475 JUMPI SWAP1 PUSH1 0x1 SWAP2 PUSH2 0x46E DUP3 DUP10 PUSH2 0xE80 JUMP JUMPDEST MSTORE ADD PUSH2 0x196 JUMP JUMPDEST DUP3 PUSH1 0x11 DUP8 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0xE66 JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x128 JUMPI PUSH2 0x4B4 CALLDATASIZE PUSH2 0xD5F JUMP JUMPDEST PUSH2 0x4C1 DUP4 SWAP3 SWAP5 SWAP4 MLOAD PUSH2 0x1096 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x10F JUMPI DUP1 PUSH2 0x4E5 DUP8 DUP6 PUSH2 0x4DF PUSH1 0x1 SWAP6 DUP8 PUSH2 0xE80 JUMP JUMPDEST MLOAD PUSH2 0x1348 JUMP JUMPDEST PUSH2 0x4EF DUP3 DUP8 PUSH2 0xE80 JUMP JUMPDEST MSTORE ADD PUSH2 0x4C4 JUMP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x128 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x128 JUMPI CALLDATALOAD SWAP1 PUSH0 SLOAD DUP3 LT ISZERO PUSH2 0x128 JUMPI PUSH2 0x51F PUSH1 0x20 SWAP3 PUSH2 0xE06 JUMP JUMPDEST SWAP2 SWAP1 SLOAD SWAP1 MLOAD SWAP2 PUSH1 0x3 SHL SHR DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x128 JUMPI PUSH2 0x53C CALLDATASIZE PUSH2 0xD95 JUMP JUMPDEST SWAP2 DUP5 MLOAD SWAP5 PUSH2 0x549 DUP7 PUSH2 0x1096 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP8 DUP2 LT PUSH2 0x788 JUMPI POP PUSH2 0x568 SWAP1 PUSH2 0x562 DUP8 DUP6 PUSH2 0xE80 JUMP JUMPDEST MLOAD PUSH2 0x103A JUMP JUMPDEST PUSH2 0x572 DUP7 DUP5 PUSH2 0xE80 JUMP JUMPDEST MSTORE DUP7 MLOAD SWAP8 DUP9 SWAP5 PUSH32 0x984DE9E800000000000000000000000000000000000000000000000000000000 SWAP3 DUP4 DUP8 MSTORE DUP10 DUP4 DUP9 ADD MSTORE PUSH2 0x5AF PUSH1 0x44 DUP9 ADD DUP3 PUSH2 0xDD3 JUMP JUMPDEST PUSH0 PUSH1 0x24 DUP10 ADD MSTORE DUP8 PUSH1 0x20 SWAP13 DUP14 SWAP3 SUB DUP2 ADDRESS GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0x3F3 JUMPI PUSH0 SWAP8 PUSH2 0x759 JUMPI JUMPDEST POP DUP10 MLOAD DUP5 DUP2 MSTORE DUP11 DUP5 DUP3 ADD MSTORE DUP12 DUP2 DUP1 PUSH2 0x5E9 PUSH1 0x44 DUP3 ADD DUP11 PUSH2 0xDD3 JUMP JUMPDEST PUSH0 PUSH1 0x24 DUP4 ADD MSTORE SUB DUP2 ADDRESS GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x74F JUMPI DUP9 DUP14 SWAP6 SWAP5 SWAP4 SWAP3 DUP12 SWAP3 PUSH0 SWAP2 PUSH2 0x712 JUMPI JUMPDEST POP PUSH2 0x663 SWAP5 SWAP4 PUSH2 0x637 PUSH2 0x65E SWAP5 PUSH2 0x627 PUSH2 0x648 SWAP6 PUSH2 0x63E SWAP6 PUSH2 0x12EF JUMP JUMPDEST SWAP3 PUSH2 0x632 DUP5 ADDRESS PUSH2 0x1220 JUMP JUMPDEST PUSH2 0xE80 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x11FE JUMP JUMPDEST PUSH2 0x37C DUP13 DUP11 PUSH2 0xE80 JUMP JUMPDEST SWAP2 PUSH8 0xDE0B6B3A7640000 DUP2 DUP2 SUB SWAP2 LT MUL DUP3 PUSH2 0x12EF JUMP JUMPDEST PUSH2 0x103A JUMP JUMPDEST SWAP3 PUSH2 0x672 DUP5 PUSH2 0x562 DUP11 DUP9 PUSH2 0xE80 JUMP JUMPDEST PUSH2 0x67C DUP10 DUP8 PUSH2 0xE80 JUMP JUMPDEST MSTORE PUSH2 0x690 DUP11 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD PUSH2 0x1153 JUMP JUMPDEST SUB DUP2 ADDRESS GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x708 JUMPI PUSH0 SWAP3 PUSH2 0x6D1 JUMPI JUMPDEST POP PUSH2 0x2AE SWAP4 SWAP3 SWAP2 PUSH2 0x6CB SWAP2 PUSH2 0x6C4 PUSH2 0x6BD PUSH2 0x124 SWAP10 PUSH2 0x1096 JUMP JUMPDEST SWAP8 DUP9 PUSH2 0xE80 JUMP JUMPDEST MSTORE DUP4 PUSH2 0x103A JUMP JUMPDEST SWAP1 PUSH2 0x1348 JUMP JUMPDEST SWAP1 SWAP4 SWAP3 SWAP2 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x701 JUMPI JUMPDEST PUSH2 0x6EB DUP2 DUP4 PUSH2 0xC79 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x128 JUMPI MLOAD SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 PUSH2 0x124 PUSH2 0x6A3 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x6E1 JUMP JUMPDEST DUP8 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP7 SWAP3 POP POP POP DUP5 DUP2 SWAP4 SWAP3 SWAP4 RETURNDATASIZE DUP4 GT PUSH2 0x748 JUMPI JUMPDEST PUSH2 0x72E DUP2 DUP4 PUSH2 0xC79 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x128 JUMPI SWAP3 MLOAD DUP12 SWAP4 SWAP2 SWAP1 DUP10 SWAP1 DUP10 SWAP1 PUSH2 0x663 PUSH2 0x60A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x724 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP7 POP DUP11 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x781 JUMPI JUMPDEST PUSH2 0x771 DUP2 DUP4 PUSH2 0xC79 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x128 JUMPI MLOAD SWAP6 DUP12 PUSH2 0x5CE JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x767 JUMP JUMPDEST PUSH2 0x792 DUP2 DUP5 PUSH2 0xE80 JUMP JUMPDEST MLOAD PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x7B3 JUMPI SWAP1 PUSH1 0x1 SWAP2 PUSH2 0x7AC DUP3 DUP8 PUSH2 0xE80 JUMP JUMPDEST MSTORE ADD PUSH2 0x54C JUMP JUMPDEST PUSH1 0x11 DUP12 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x128 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x128 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x128 JUMPI PUSH2 0x80F SWAP2 CALLDATASIZE SWAP2 ADD PUSH2 0xCFF JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD SWAP2 PUSH1 0x2 DUP4 LT ISZERO PUSH2 0x128 JUMPI PUSH1 0x20 SWAP3 PUSH2 0x829 SWAP2 PUSH2 0xF00 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x128 JUMPI PUSH2 0x855 SWAP1 PUSH1 0x20 PUSH2 0x846 CALLDATASIZE PUSH2 0xD95 JUMP JUMPDEST SWAP4 DUP4 SWAP8 DUP3 DUP3 SWAP9 SWAP6 SWAP8 SWAP4 SWAP5 PUSH2 0x10E5 JUMP JUMPDEST SWAP4 PUSH2 0x89E PUSH2 0x863 DUP6 DUP8 PUSH2 0x12EF JUMP JUMPDEST PUSH2 0x86D DUP2 ADDRESS PUSH2 0x1368 JUMP JUMPDEST DUP12 MLOAD SWAP9 DUP10 SWAP5 DUP6 SWAP5 PUSH32 0x16A0B3E000000000000000000000000000000000000000000000000000000000 DUP7 MSTORE DUP6 ADD PUSH2 0x1074 JUMP JUMPDEST SUB DUP2 ADDRESS GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x708 JUMPI DUP7 SWAP5 PUSH0 SWAP4 PUSH2 0x92E JUMPI JUMPDEST POP PUSH2 0x902 PUSH2 0x90B SWAP5 PUSH2 0x65E PUSH2 0x648 DUP9 SWAP7 PUSH2 0x8FC DUP12 SWAP8 PUSH2 0xF9 PUSH2 0x912 SWAP9 PUSH2 0x8F5 PUSH2 0x124 SWAP16 PUSH2 0x918 SWAP16 PUSH2 0x8E7 SWAP1 PUSH2 0x8EE SWAP3 PUSH2 0xE80 JUMP JUMPDEST MLOAD DUP8 PUSH2 0x103A JUMP JUMPDEST SWAP13 DUP13 PUSH2 0xE80 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x1109 JUMP JUMPDEST SWAP1 PUSH2 0x103A JUMP JUMPDEST SWAP4 DUP5 SWAP3 MLOAD PUSH2 0x1096 JUMP JUMPDEST SWAP7 DUP8 PUSH2 0xE80 JUMP JUMPDEST MSTORE PUSH2 0x10E5 JUMP JUMPDEST SWAP2 DUP4 MLOAD SWAP4 DUP5 SWAP4 DUP5 MSTORE DUP1 PUSH1 0x20 DUP6 ADD MSTORE DUP4 ADD SWAP1 PUSH2 0xDD3 JUMP JUMPDEST SWAP5 POP SWAP2 POP SWAP4 PUSH1 0x20 DUP5 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x963 JUMPI JUMPDEST DUP2 PUSH2 0x94C PUSH1 0x20 SWAP4 DUP4 PUSH2 0xC79 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x128 JUMPI SWAP3 MLOAD SWAP3 SWAP4 DUP6 SWAP4 SWAP2 PUSH2 0x902 PUSH2 0x8B3 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x93F JUMP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x128 JUMPI PUSH1 0x3 NOT PUSH1 0x20 DUP2 CALLDATASIZE ADD SLT PUSH2 0x128 JUMPI DUP2 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x128 JUMPI PUSH1 0xE0 SWAP2 CALLDATASIZE SUB ADD SLT PUSH2 0x128 JUMPI PUSH1 0x20 PUSH1 0x64 SWAP3 MLOAD SWAP2 PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F7420696D706C656D656E7465640000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x128 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x128 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH8 0xDE0B6B3A7640000 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x128 JUMPI PUSH1 0x20 PUSH2 0xA3F SWAP2 PUSH2 0xA30 CALLDATASIZE PUSH2 0xD95 JUMP JUMPDEST SWAP4 DUP4 SWAP8 DUP3 SWAP4 DUP3 SWAP8 SWAP6 SWAP9 SWAP4 PUSH2 0x103A JUMP JUMPDEST SWAP4 PUSH2 0xA88 PUSH2 0xA4D DUP6 DUP8 PUSH2 0x12EF JUMP JUMPDEST PUSH2 0xA57 DUP2 ADDRESS PUSH2 0x1220 JUMP JUMPDEST DUP12 MLOAD SWAP10 DUP11 SWAP5 DUP6 SWAP5 PUSH32 0x16A0B3E000000000000000000000000000000000000000000000000000000000 DUP7 MSTORE DUP6 ADD PUSH2 0x1074 JUMP JUMPDEST SUB DUP2 ADDRESS GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x708 JUMPI DUP7 SWAP6 PUSH0 SWAP4 PUSH2 0xAE4 JUMPI JUMPDEST DUP9 DUP8 PUSH2 0x124 PUSH2 0x918 PUSH2 0x90B DUP4 DUP12 PUSH2 0xADE PUSH2 0x902 DUP14 PUSH2 0xAD9 DUP15 PUSH2 0x65E DUP16 DUP16 PUSH2 0xAD2 PUSH2 0xACB DUP6 PUSH2 0x562 DUP14 DUP14 PUSH2 0xE80 JUMP JUMPDEST SWAP11 DUP11 PUSH2 0xE80 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x1348 JUMP JUMPDEST PUSH2 0x11FE JUMP JUMPDEST MSTORE PUSH2 0x103A JUMP JUMPDEST SWAP5 SWAP2 SWAP3 POP SWAP5 POP PUSH1 0x20 DUP5 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xB1A JUMPI JUMPDEST DUP2 PUSH2 0xB03 PUSH1 0x20 SWAP4 DUP4 PUSH2 0xC79 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x128 JUMPI SWAP3 MLOAD DUP6 SWAP5 SWAP1 SWAP2 SWAP1 PUSH2 0x902 PUSH2 0xA9D JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xAF6 JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x128 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x128 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH10 0xD3C21BCECCEDA1000000 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x128 JUMPI PUSH2 0xB68 SWAP2 PUSH2 0xB6F PUSH2 0xB5D CALLDATASIZE PUSH2 0xD5F JUMP JUMPDEST SWAP3 SWAP2 SWAP1 DUP1 SWAP7 SWAP2 PUSH2 0xE80 JUMP JUMPDEST MLOAD SWAP5 PUSH2 0xE06 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR PUSH1 0x1 DUP3 GT PUSH0 EQ PUSH2 0xC72 JUMPI PUSH1 0x2 JUMPDEST DUP1 PUSH1 0x1 EQ PUSH2 0xC19 JUMPI PUSH1 0x2 EQ PUSH2 0xBBE JUMPI PUSH1 0x51 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 DUP2 ISZERO PUSH2 0xBF3 JUMPI POP SWAP3 PUSH2 0xBED PUSH2 0x829 SWAP3 PUSH1 0x1 PUSH1 0x20 SWAP7 PUSH15 0xC097CE7BC90715B34B9F0FFFFFFFFF DIV ADD SWAP1 PUSH2 0x1170 JUMP JUMPDEST SWAP1 PUSH2 0x11FE JUMP JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP SWAP1 SWAP2 SWAP3 DUP2 ISZERO PUSH2 0xC46 JUMPI POP SWAP3 PUSH2 0xBED PUSH2 0x829 SWAP3 PUSH1 0x20 SWAP6 PUSH15 0xC097CE7BC90715B34B9F1000000000 DIV SWAP1 PUSH2 0x1170 JUMP JUMPDEST PUSH1 0x12 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH2 0xB83 JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xCBA JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xCBA JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x128 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0xD19 DUP2 PUSH2 0xCE7 JUMP JUMPDEST SWAP4 PUSH2 0xD27 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0xC79 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x128 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xD50 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xD42 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x128 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x128 JUMPI PUSH2 0xD8A SWAP2 PUSH1 0x4 ADD PUSH2 0xCFF JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x128 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x128 JUMPI PUSH2 0xDC0 SWAP2 PUSH1 0x4 ADD PUSH2 0xCFF JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x64 CALLDATALOAD SWAP1 PUSH1 0x84 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0xDF2 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0xDE4 JUMP JUMPDEST PUSH0 SLOAD DUP2 LT ISZERO PUSH2 0xE39 JUMPI PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x128 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x128 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0xE39 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH0 SLOAD DUP1 DUP4 MSTORE DUP3 PUSH1 0x20 SWAP2 PUSH1 0x20 DUP3 ADD SWAP1 PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 SWAP4 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xEE6 JUMPI POP POP POP PUSH2 0xEE4 SWAP3 POP SUB DUP4 PUSH2 0xC79 JUMP JUMPDEST JUMP JUMPDEST DUP6 SLOAD DUP5 MSTORE PUSH1 0x1 SWAP6 DUP7 ADD SWAP6 DUP9 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xECE JUMP JUMPDEST SWAP1 PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x100D JUMPI PUSH1 0x1 SWAP1 DUP2 SUB PUSH2 0xFAF JUMPI DUP1 PUSH2 0xF1C PUSH2 0xE94 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH0 SWAP4 JUMPDEST PUSH2 0xF63 JUMPI JUMPDEST POP POP POP POP DUP1 ISZERO PUSH2 0xF3B JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x2654368900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD DUP5 LT ISZERO PUSH2 0xFAA JUMPI DUP3 PUSH8 0xDE0B6B3A7640000 PUSH2 0xFA1 DUP7 SWAP8 PUSH2 0xF9B PUSH2 0xF89 DUP6 SWAP10 DUP8 PUSH2 0xE80 JUMP JUMPDEST MLOAD PUSH2 0xF94 DUP12 DUP10 PUSH2 0xE80 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x142C JUMP JUMPDEST SWAP1 PUSH2 0x1109 JUMP JUMPDEST DIV SWAP6 ADD SWAP4 PUSH2 0xF29 JUMP JUMPDEST PUSH2 0xF2E JUMP JUMPDEST DUP1 PUSH2 0xFB8 PUSH2 0xE94 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH0 SWAP4 JUMPDEST PUSH2 0xFD6 JUMPI POP POP POP POP DUP1 ISZERO PUSH2 0xF3B JUMPI SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP5 LT ISZERO PUSH2 0xFAA JUMPI DUP3 PUSH2 0x1005 DUP6 SWAP7 PUSH2 0xBED PUSH2 0xFF3 DUP5 SWAP9 DUP7 PUSH2 0xE80 JUMP JUMPDEST MLOAD PUSH2 0xFFE DUP11 DUP9 PUSH2 0xE80 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x1170 JUMP JUMPDEST SWAP6 ADD SWAP4 PUSH2 0xFC5 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x1047 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x108C PUSH1 0x40 SWAP3 SWAP6 SWAP5 SWAP4 SWAP6 PUSH1 0x60 DUP4 MSTORE PUSH1 0x60 DUP4 ADD SWAP1 PUSH2 0xDD3 JUMP JUMPDEST SWAP5 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 PUSH2 0x10A0 DUP3 PUSH2 0xCE7 JUMP JUMPDEST PUSH2 0x10AD PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0xC79 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x10DB DUP3 SWAP5 PUSH2 0xCE7 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x1047 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x2710 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x1047 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x1047 JUMPI JUMP JUMPDEST DUP2 ISZERO PUSH2 0x1126 JUMPI DIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 PUSH1 0x20 PUSH2 0x116B PUSH1 0x1 SWAP3 PUSH1 0x40 DUP7 MSTORE PUSH1 0x40 DUP7 ADD SWAP1 PUSH2 0xDD3 JUMP JUMPDEST SWAP4 ADD MSTORE JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 SUB PUSH2 0x1187 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x11A5 JUMPI POP POP DUP1 PUSH2 0x11A2 SWAP2 PUSH2 0x11FE JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x11C9 JUMPI POP POP PUSH2 0x11C3 DUP2 PUSH2 0x11A2 SWAP3 PUSH2 0x11FE JUMP JUMPDEST DUP1 PUSH2 0x11FE JUMP JUMPDEST PUSH2 0x11D3 SWAP2 SWAP3 PUSH2 0x14ED JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH2 0x11DF DUP4 PUSH2 0x10F2 JUMP JUMPDEST SWAP2 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH1 0x1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x1047 JUMPI PUSH2 0x11A2 SWAP2 PUSH2 0x10E5 JUMP JUMPDEST SWAP1 PUSH2 0x1208 SWAP2 PUSH2 0x1109 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 PUSH1 0x4 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH32 0xB677FA5600000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x12E4 JUMPI PUSH0 SWAP3 PUSH2 0x12B0 JUMPI JUMPDEST POP DUP2 DUP2 LT PUSH2 0x1282 JUMPI POP POP JUMP JUMPDEST PUSH32 0xE31C95BE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x12DC JUMPI JUMPDEST DUP2 PUSH2 0x12CC PUSH1 0x20 SWAP4 DUP4 PUSH2 0xC79 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x128 JUMPI MLOAD SWAP1 PUSH0 PUSH2 0x1276 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x12BF JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x1320 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x1047 JUMPI PUSH1 0x1 SWAP1 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP3 ISZERO PUSH2 0x1320 JUMPI PUSH1 0x1 SWAP2 PUSH2 0x135A SWAP2 PUSH2 0x1109 JUMP JUMPDEST SWAP2 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 PUSH1 0x4 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH32 0x273C1ADF00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x12E4 JUMPI PUSH0 SWAP3 PUSH2 0x13F8 JUMPI JUMPDEST POP DUP2 DUP2 GT PUSH2 0x13CA JUMPI POP POP JUMP JUMPDEST PUSH32 0x3E8960DC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1424 JUMPI JUMPDEST DUP2 PUSH2 0x1414 PUSH1 0x20 SWAP4 DUP4 PUSH2 0xC79 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x128 JUMPI MLOAD SWAP1 PUSH0 PUSH2 0x13BE JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1407 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 DUP1 DUP4 SUB PUSH2 0x1443 JUMPI POP SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 SWAP1 PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x1464 JUMPI POP POP DUP1 PUSH2 0x1460 SWAP2 PUSH2 0x1109 JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x1488 JUMPI POP PUSH2 0x1481 DUP3 PUSH2 0x1460 SWAP4 PUSH2 0x1109 JUMP JUMPDEST DIV DUP1 PUSH2 0x1109 JUMP JUMPDEST SWAP1 POP PUSH2 0x1493 SWAP2 PUSH2 0x14ED JUMP JUMPDEST PUSH2 0x149C DUP2 PUSH2 0x10F2 JUMP JUMPDEST PUSH1 0x1 PUSH0 NOT SWAP4 DUP5 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 PUSH1 0x1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x1047 JUMPI DUP2 LT ISZERO PUSH2 0x14C4 JUMPI POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SUB ADD SWAP1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1126 JUMPI PUSH15 0xC097CE7BC90715B34B9F1000000000 SDIV SWAP1 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x1126 JUMPI SDIV SWAP1 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x1E16 JUMPI DUP2 ISZERO PUSH2 0x1E10 JUMPI DUP2 PUSH1 0xFF SHR PUSH2 0x1DE8 JUMPI PUSH24 0xBCE5086492111AEA88F4BB1CA6BCF584181EA8059F76532 DUP2 LT ISZERO PUSH2 0x1DC0 JUMPI DUP2 PUSH8 0xC7D713B49DA0000 SLT DUP1 PUSH2 0x1DAF JUMPI JUMPDEST ISZERO PUSH2 0x1A4C JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH15 0xC097CE7BC90715B34B9F1000000000 SWAP1 PUSH2 0x1586 SWAP1 DUP5 MUL DUP3 DUP2 ADD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F68318436F8EA4CB460F000000000 ADD DUP4 MUL PUSH2 0x14E3 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV DUP4 DUP6 DUP3 MUL SDIV SWAP2 DUP5 DUP7 DUP5 MUL SDIV SWAP4 DUP6 DUP8 DUP7 MUL SDIV SWAP6 DUP1 DUP9 DUP9 MUL SDIV SWAP8 DUP9 MUL SDIV PUSH1 0xF SWAP1 SDIV SWAP7 PUSH1 0xD SWAP1 SDIV SWAP6 PUSH1 0xB SWAP1 SDIV SWAP5 PUSH1 0x9 SWAP1 SDIV SWAP4 PUSH1 0x7 SWAP1 SDIV SWAP3 PUSH1 0x5 SWAP1 SDIV SWAP2 PUSH1 0x3 SWAP1 SDIV ADD ADD ADD ADD ADD ADD ADD PUSH1 0x1 SHL SWAP2 DUP1 DUP3 DUP2 DUP6 SMOD MUL SDIV SWAP3 SDIV MUL ADD PUSH8 0xDE0B6B3A7640000 SWAP1 JUMPDEST SDIV PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC702BD3A30FC0000 DUP2 DUP2 SGT ISZERO DUP1 PUSH2 0x1A39 JUMPI JUMPDEST ISZERO PUSH2 0x1A11 JUMPI DUP2 SWAP1 DUP3 SLT ISZERO DUP1 PUSH2 0x19FE JUMPI JUMPDEST ISZERO PUSH2 0x19D6 JUMPI PUSH0 SWAP2 PUSH0 DUP2 SLT PUSH2 0x19C7 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH9 0x6F05B59D3B2000000 DUP2 SLT PUSH2 0x1964 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90FA4A62C4E000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP3 JUMPDEST MUL DUP2 SWAP1 PUSH9 0xAD78EBC5AC62000000 DUP2 SLT ISZERO PUSH2 0x192B JUMPI JUMPDEST PUSH9 0x56BC75E2D631000000 DUP2 SLT ISZERO PUSH2 0x18F1 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B18800000 DUP2 SLT ISZERO PUSH2 0x18B9 JUMPI JUMPDEST PUSH9 0x15AF1D78B58C400000 DUP2 SLT ISZERO PUSH2 0x1881 JUMPI JUMPDEST PUSH9 0xAD78EBC5AC6200000 DUP2 SLT ISZERO PUSH2 0x184A JUMPI JUMPDEST DUP3 DUP2 SLT ISZERO PUSH2 0x1813 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B1880000 DUP2 SLT ISZERO PUSH2 0x17DC JUMPI JUMPDEST PUSH9 0x15AF1D78B58C40000 DUP2 SLT ISZERO PUSH2 0x17A5 JUMPI JUMPDEST PUSH1 0x2 DUP4 DUP3 DUP1 MUL SDIV SDIV PUSH1 0x3 DUP5 DUP4 DUP4 MUL SDIV SDIV PUSH1 0x4 DUP6 DUP5 DUP4 MUL SDIV SDIV DUP6 PUSH1 0x5 DUP2 DUP7 DUP5 MUL SDIV SDIV PUSH1 0x6 DUP3 DUP8 DUP4 MUL SDIV SDIV PUSH1 0x7 DUP4 DUP9 DUP4 MUL SDIV SDIV SWAP1 PUSH1 0x8 DUP5 DUP10 DUP5 MUL SDIV SDIV SWAP3 PUSH1 0x9 DUP6 DUP11 DUP7 MUL SDIV SDIV SWAP6 PUSH1 0xA DUP7 DUP12 DUP10 MUL SDIV SDIV SWAP8 PUSH1 0xB DUP8 DUP13 DUP12 MUL SDIV SDIV SWAP10 PUSH1 0xC DUP9 DUP14 DUP14 MUL SDIV SDIV SWAP12 ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD MUL SDIV MUL SDIV SWAP1 PUSH0 EQ PUSH2 0x11A2 JUMPI PUSH2 0x11A2 SWAP1 PUSH2 0x14C9 JUMP JUMPDEST PUSH9 0x6F5F1775788937937 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C0000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x1726 JUMP JUMPDEST PUSH9 0x8F00F760A4B2DB55D PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E780000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x1714 JUMP JUMPDEST PUSH9 0xEBC5FB41746121110 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x1702 JUMP JUMPDEST PUSH9 0x280E60114EDB805D03 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x16F9 JUMP JUMPDEST PUSH10 0x127FA27722CC06CC5E2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x16E7 JUMP JUMPDEST PUSH10 0x3F1FCE3DA636EA5CF850 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E7800000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x16D5 JUMP JUMPDEST PUSH12 0x2DF0AB5A80A22C61AB5A700 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF000000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x16C3 JUMP JUMPDEST PUSH15 0x1855144814A7FF805980FF0084000 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E000000 ADD PUSH2 0x16B1 JUMP JUMPDEST PUSH9 0x3782DACE9D9000000 DUP2 SLT PUSH2 0x19B4 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC87D2531627000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH12 0x1425982CF597CD205CEF7380 SWAP3 PUSH2 0x169C JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP3 PUSH1 0x1 SWAP3 PUSH2 0x169C JUMP JUMPDEST PUSH1 0x1 SWAP3 POP PUSH0 SUB SWAP1 POP PUSH1 0x64 PUSH2 0x1640 JUMP JUMPDEST PUSH32 0xD4794EFD00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x1631 JUMP JUMPDEST PUSH32 0xA2F9F7E300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x1621 JUMP JUMPDEST DUP2 PUSH8 0xDE0B6B3A7640000 SWAP3 PUSH0 SWAP2 DUP5 DUP2 SLT PUSH2 0x1D99 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH0 PUSH31 0x1600EF3172E58D2E933EC884FDE10064C63B5372D805E203C0000000000000 DUP3 SLT ISZERO PUSH2 0x1D6E JUMPI JUMPDEST PUSH20 0x11798004D755D3C8BC8E03204CF44619E000000 DUP3 SLT ISZERO PUSH2 0x1D4D JUMPI JUMPDEST DUP3 MUL SWAP1 DUP1 DUP4 MUL SWAP1 PUSH15 0x1855144814A7FF805980FF0084000 SWAP1 DUP2 DUP4 SLT ISZERO PUSH2 0x1D2A JUMPI JUMPDEST POP POP PUSH12 0x2DF0AB5A80A22C61AB5A700 DUP1 DUP3 SLT ISZERO PUSH2 0x1D0A JUMPI JUMPDEST POP PUSH10 0x3F1FCE3DA636EA5CF850 DUP1 DUP3 SLT ISZERO PUSH2 0x1CEA JUMPI JUMPDEST POP PUSH10 0x127FA27722CC06CC5E2 DUP1 DUP3 SLT ISZERO PUSH2 0x1CCA JUMPI JUMPDEST POP PUSH9 0x280E60114EDB805D03 DUP1 DUP3 SLT ISZERO PUSH2 0x1CAA JUMPI JUMPDEST POP PUSH9 0xEBC5FB41746121110 DUP1 DUP3 SLT ISZERO PUSH2 0x1C93 JUMPI JUMPDEST POP PUSH9 0x8F00F760A4B2DB55D DUP1 DUP3 SLT ISZERO PUSH2 0x1C73 JUMPI JUMPDEST POP PUSH9 0x6F5F1775788937937 DUP1 DUP3 SLT ISZERO PUSH2 0x1C53 JUMPI JUMPDEST POP PUSH9 0x6248F33704B286603 DUP1 DUP3 SLT ISZERO PUSH2 0x1C34 JUMPI JUMPDEST POP PUSH9 0x5C548670B9510E7AC DUP1 DUP3 SLT ISZERO PUSH2 0x1C15 JUMPI JUMPDEST POP PUSH2 0x1BC2 PUSH9 0x56BC75E2D63100000 SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP2 DUP4 ADD SWAP3 ADD MUL PUSH2 0x14E3 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV SWAP2 PUSH1 0x3 PUSH1 0x5 PUSH1 0x7 PUSH1 0x9 PUSH1 0xB DUP9 DUP11 DUP10 MUL SDIV SWAP9 DUP1 DUP12 DUP12 MUL SDIV SWAP11 DUP12 MUL SDIV SDIV SWAP9 SDIV SWAP7 SDIV SWAP5 SDIV SWAP3 SDIV ADD ADD ADD ADD ADD PUSH1 0x1 SHL ADD SDIV SWAP1 PUSH0 EQ PUSH2 0x1C10 JUMPI PUSH0 SUB JUMPDEST MUL PUSH2 0x15F5 JUMP JUMPDEST PUSH2 0x1C0A JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0x56BC75E2D6310000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1B86 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0xAD78EBC5AC620000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1B72 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C40000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1B5E JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B1880000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1B4A JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP1 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1B36 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0xAD78EBC5AC6200000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1B22 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C400000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1B0E JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B18800000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1AF9 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x56BC75E2D631000000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1AE4 JUMP JUMPDEST PUSH9 0xAD78EBC5AC62000000 SWAP3 POP PUSH10 0x21E19E0C9BAB2400000 MUL SDIV SWAP2 ADD SWAP1 PUSH0 DUP1 PUSH2 0x1ACC JUMP JUMPDEST SWAP1 PUSH12 0x1425982CF597CD205CEF7380 PUSH9 0x3782DACE9D9000000 SWAP2 SDIV SWAP2 ADD PUSH2 0x1AAB JUMP JUMPDEST POP PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP1 SDIV PUSH9 0x6F05B59D3B2000000 PUSH2 0x1A8E JUMP JUMPDEST SWAP1 POP PUSH2 0x1DA5 SWAP2 POP PUSH2 0x14C9 JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x64 PUSH2 0x1A61 JUMP JUMPDEST POP PUSH8 0xF43FC2C04EE0000 DUP3 SLT PUSH2 0x1533 JUMP JUMPDEST PUSH32 0xD831731100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x22701E000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x26 BALANCE SMOD EXTCODECOPY CODESIZE 0x26 0xE5 0xA6 0xC3 0xB4 0xAA RETURNDATASIZE BLOBHASH EXTCODESIZE ADDRESS 0xDE DUP13 MOD DUP14 0xB9 0xD6 MLOAD 0xDB PUSH0 DUP3 0xB0 SWAP14 GT DUP10 CALLDATACOPY ISZERO 0xC9 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"453:981:130:-:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;453:981:130;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;453:981:130;;-1:-1:-1;453:981:130;;;;;;;;-1:-1:-1;453:981:130;;;-1:-1:-1;453:981:130;;-1:-1:-1;453:981:130;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;453:981:130;;;;-1:-1:-1;453:981:130;;;;;;;;;;;;;;;;-1:-1:-1;453:981:130;;;;;;;;;;-1:-1:-1;453:981:130;;;;;-1:-1:-1;453:981:130;;;;;;;;;;;;;;;-1:-1:-1;453:981:130;;;;;;;;;-1:-1:-1;;453:981:130;;;-1:-1:-1;;;;;453:981:130;;;;;;;;;;:::o"},"deployedBytecode":{"functionDebugData":{"abi_decode_array_uint256_dyn":{"entryPoint":3327,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dynt_uint256t_uint256":{"entryPoint":3423,"id":null,"parameterSlots":1,"returnSlots":3},"abi_decode_array_uint256_dynt_uint256t_uint256t_uint256t_uint256":{"entryPoint":3477,"id":null,"parameterSlots":1,"returnSlots":5},"abi_encode_array_uint256_dyn":{"entryPoint":3539,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn_enum_Rounding":{"entryPoint":4435,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn_uint256_uint256":{"entryPoint":4212,"id":null,"parameterSlots":4,"returnSlots":1},"allocate_and_zero_memory_array_array_uint256_dyn":{"entryPoint":4246,"id":null,"parameterSlots":1,"returnSlots":1},"array_allocation_size_array_uint256_dyn":{"entryPoint":3303,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_uint256":{"entryPoint":4325,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_uint256":{"entryPoint":4380,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256":{"entryPoint":4361,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256_13568":{"entryPoint":4338,"id":null,"parameterSlots":1,"returnSlots":1},"checked_sub_uint256":{"entryPoint":4154,"id":null,"parameterSlots":2,"returnSlots":1},"copy_array_from_storage_to_memory_array_uint256_dyn":{"entryPoint":3732,"id":null,"parameterSlots":0,"returnSlots":1},"external_fun_getMinimumInvariantRatio":{"entryPoint":3686,"id":null,"parameterSlots":0,"returnSlots":0},"finalize_allocation":{"entryPoint":3193,"id":null,"parameterSlots":2,"returnSlots":0},"fun_computeInvariant":{"entryPoint":3840,"id":48075,"parameterSlots":2,"returnSlots":1},"fun_ensureInvariantRatioAboveMinimumBound":{"entryPoint":4640,"id":12082,"parameterSlots":2,"returnSlots":0},"fun_ensureInvariantRatioBelowMaximumBound":{"entryPoint":4968,"id":12056,"parameterSlots":2,"returnSlots":0},"fun_mulDivUp":{"entryPoint":4936,"id":8034,"parameterSlots":3,"returnSlots":1},"fun_mulDivUp_13497":{"entryPoint":4847,"id":8034,"parameterSlots":2,"returnSlots":1},"fun_mulUp":{"entryPoint":4606,"id":7970,"parameterSlots":2,"returnSlots":1},"fun_pow":{"entryPoint":5357,"id":8467,"parameterSlots":2,"returnSlots":1},"fun_powDown":{"entryPoint":5164,"id":8130,"parameterSlots":2,"returnSlots":1},"fun_powUp":{"entryPoint":4464,"id":8197,"parameterSlots":2,"returnSlots":1},"memory_array_index_access_uint256_dyn":{"entryPoint":3712,"id":null,"parameterSlots":2,"returnSlots":1},"storage_array_index_access_uint256_dyn":{"entryPoint":3590,"id":null,"parameterSlots":1,"returnSlots":2},"wrapping_div_int256":{"entryPoint":5347,"id":null,"parameterSlots":2,"returnSlots":1},"wrapping_div_int256_13570":{"entryPoint":5321,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"604060808152600480361015610013575f80fd5b5f3560e01c90816316a0b3e014610b46578163273c1adf14610b225781633ab0591514610a1a578163654cf15d146109f857816372c981861461096b57816385d5261a14610830578163984de9e8146107df5781639a87ffbf1461052d578163b5f163ff146104f6578163b677fa56146104a0578163c548e4d8146104a5578163ce20ece7146104a0578163d9c7cc7a1461012c575063da317980146100b7575f80fd5b34610128576100c536610d5f565b6100d28392949351611096565b915f5b815181101561010f57806100fe876100f9866100f360019688610e80565b51611109565b61111c565b6101088287610e80565b52016100d5565b84516020808252819061012490820187610dd3565b0390f35b5f80fd5b82346101285760806003193601126101285767ffffffffffffffff9180358381116101285761015e9036908301610cff565b92602490602435908111610128576101799036908401610cff565b6064359285519561018987611096565b9261019388611096565b945f5b8981106104365750505085519687957f984de9e8000000000000000000000000000000000000000000000000000000009283885288858901526101dc6044890182610dd3565b5f60248a01528860209b8c920381305afa97881561042c575f986103fd575b508851908482528a82806102118a8a8301611153565b0381305afa9182156103f3575f926103c4575b50670de0b6b3a7640000918281029080820484149015171561039857906102518a8d98979695949361111c565b9061025c8230611368565b5f5b8581106102f95750505050505061027e8751948593849384528301611153565b0381305afa9081156102ef575f916102c2575b50826100f96102a6610124956102ae9461103a565b604435611109565b928080519586958652850152830190610dd3565b90508481813d83116102e8575b6102d98183610c79565b81010312610128575182610291565b503d6102cf565b84513d5f823e3d90fd5b84849596979899508b8b8385969761031d61031683600199610e80565b518a611109565b04806103298385610e80565b5111610344575b505050505001908c9796959493929161025e565b8183610365610383976103759461035e8561037c99610e80565b51036111fe565b61036f8388610e80565b52610e80565b5192610e80565b519061103a565b61038d828c610e80565b52858b8b835f610330565b6011877f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b9091508a81813d83116103ec575b6103dc8183610c79565b810103126101285751908b610224565b503d6103d2565b8a513d5f823e3d90fd5b9097508981813d8311610425575b6104158183610c79565b810103126101285751968a6101fb565b503d61040b565b89513d5f823e3d90fd5b6104556104438286610e80565b5161044e8386610e80565b51906110e5565b5f198101908111610475579060019161046e8289610e80565b5201610196565b826011877f4e487b71000000000000000000000000000000000000000000000000000000005f52525ffd5b610e66565b8234610128576104b436610d5f565b6104c18392949351611096565b915f5b815181101561010f57806104e587856104df60019587610e80565b51611348565b6104ef8287610e80565b52016104c4565b9050346101285760206003193601126101285735905f548210156101285761051f602092610e06565b91905490519160031b1c8152f35b82346101285761053c36610d95565b9184519461054986611096565b915f5b8781106107885750610568906105628785610e80565b5161103a565b6105728684610e80565b5286519788947f984de9e8000000000000000000000000000000000000000000000000000000009283875289838801526105af6044880182610dd3565b5f60248901528760209c8d920381305afa9687156103f3575f97610759575b5089518481528a848201528b81806105e9604482018a610dd3565b5f60248301520381305afa90811561074f57888d959493928b925f91610712575b50610663949361063761065e946106276106489561063e956112ef565b926106328430611220565b610e80565b51906111fe565b61037c8c8a610e80565b91670de0b6b3a7640000818103911002826112ef565b61103a565b92610672846105628a88610e80565b61067c8987610e80565b526106908a51958693849384528301611153565b0381305afa918215610708575f926106d1575b506102ae9392916106cb916106c46106bd61012499611096565b9788610e80565b528361103a565b90611348565b90939291508781813d8311610701575b6106eb8183610c79565b81010312610128575191929091906101246106a3565b503d6106e1565b87513d5f823e3d90fd5b969250505084819392933d8311610748575b61072e8183610c79565b810103126101285792518b9391908990899061066361060a565b503d610724565b8b513d5f823e3d90fd5b9096508a81813d8311610781575b6107718183610c79565b810103126101285751958b6105ce565b503d610767565b6107928184610e80565b515f1981019081116107b357906001916107ac8287610e80565b520161054c565b60118b7f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b90503461012857816003193601126101285780359067ffffffffffffffff82116101285761080f91369101610cff565b906024359160028310156101285760209261082991610f00565b9051908152f35b9050346101285761085590602061084636610d95565b938397828298959793946110e5565b9361089e61086385876112ef565b61086d8130611368565b8b5198899485947f16a0b3e00000000000000000000000000000000000000000000000000000000086528501611074565b0381305afa9182156107085786945f9361092e575b5061090261090b9461065e61064888966108fc8b976100f9610912986108f56101249f6109189f6108e7906108ee92610e80565b518761103a565b9c8c610e80565b5190611109565b9061103a565b93849251611096565b9687610e80565b526110e5565b9183519384938452806020850152830190610dd3565b94509150936020843d602011610963575b8161094c60209383610c79565b8101031261012857925192938593916109026108b3565b3d915061093f565b905034610128576003196020813601126101285781359067ffffffffffffffff82116101285760e0913603011261012857602060649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600f60248201527f4e6f7420696d706c656d656e74656400000000000000000000000000000000006044820152fd5b8234610128575f6003193601126101285760209051670de0b6b3a76400008152f35b905034610128576020610a3f91610a3036610d95565b9383978293829795989361103a565b93610a88610a4d85876112ef565b610a578130611220565b8b51998a9485947f16a0b3e00000000000000000000000000000000000000000000000000000000086528501611074565b0381305afa9182156107085786955f93610ae4575b888761012461091861090b838b610ade6109028d610ad98e61065e8f8f610ad2610acb856105628d8d610e80565b9a8a610e80565b5190611348565b6111fe565b5261103a565b9491925094506020843d602011610b1a575b81610b0360209383610c79565b810103126101285792518594909190610902610a9d565b3d9150610af6565b8234610128575f600319360112610128576020905169d3c21bcecceda10000008152f35b90503461012857610b6891610b6f610b5d36610d5f565b929190809691610e80565b5194610e06565b90549060031b1c600182115f14610c725760025b80600114610c1957600214610bbe576051847f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b9091928115610bf3575092610bed6108299260016020966ec097ce7bc90715b34b9f0fffffffff040190611170565b906111fe565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f525ffd5b509091928115610c46575092610bed610829926020956ec097ce7bc90715b34b9f10000000000490611170565b6012907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b6001610b83565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610cba57604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff8111610cba5760051b60200190565b9080601f83011215610128576020908235610d1981610ce7565b93610d276040519586610c79565b81855260208086019260051b82010192831161012857602001905b828210610d50575050505090565b81358152908301908301610d42565b6060600319820112610128576004359067ffffffffffffffff821161012857610d8a91600401610cff565b906024359060443590565b60a0600319820112610128576004359067ffffffffffffffff821161012857610dc091600401610cff565b9060243590604435906064359060843590565b9081518082526020808093019301915f5b828110610df2575050505090565b835185529381019392810192600101610de4565b5f54811015610e39575f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e56301905f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b34610128575f6003193601126101285760206040515f8152f35b8051821015610e395760209160051b010190565b604051905f548083528260209160208201905f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f905b828210610ee657505050610ee492500383610c79565b565b855484526001958601958895509381019390910190610ece565b90600281101561100d576001908103610faf5780610f1c610e94565b670de0b6b3a7640000935f935b610f63575b505050508015610f3b5790565b7f26543689000000000000000000000000000000000000000000000000000000005f5260045ffd5b8151841015610faa5782670de0b6b3a7640000610fa18697610f9b610f89859987610e80565b51610f948b89610e80565b519061142c565b90611109565b04950193610f29565b610f2e565b80610fb8610e94565b670de0b6b3a7640000935f935b610fd657505050508015610f3b5790565b8151841015610faa57826110058596610bed610ff3849886610e80565b51610ffe8a88610e80565b5190611170565b950193610fc5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b9190820391821161104757565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b61108c60409295949395606083526060830190610dd3565b9460208201520152565b906110a082610ce7565b6110ad6040519182610c79565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06110db8294610ce7565b0190602036910137565b9190820180921161104757565b906127109182810292818404149015171561104757565b8181029291811591840414171561104757565b8115611126570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b9190602061116b600192604086526040860190610dd3565b930152565b90670de0b6b3a76400009081810361118757505090565b671bc16d674ec8000081036111a5575050806111a2916111fe565b90565b673782dace9d90000081036111c95750506111c3816111a2926111fe565b806111fe565b6111d391926114ed565b9060016111df836110f2565b915f19830104019015150260018101809111611047576111a2916110e5565b9061120891611109565b6001670de0b6b3a76400005f19830104019015150290565b90602073ffffffffffffffffffffffffffffffffffffffff926004604051809581937fb677fa56000000000000000000000000000000000000000000000000000000008352165afa9182156112e4575f926112b0575b50818110611282575050565b7fe31c95be000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b9091506020813d6020116112dc575b816112cc60209383610c79565b810103126101285751905f611276565b3d91506112bf565b6040513d5f823e3d90fd5b90801561132057670de0b6b3a764000091828102928184041490151715611047576001905f19830104019015150290565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b82156113205760019161135a91611109565b915f19830104019015150290565b90602073ffffffffffffffffffffffffffffffffffffffff926004604051809581937f273c1adf000000000000000000000000000000000000000000000000000000008352165afa9182156112e4575f926113f8575b508181116113ca575050565b7f3e8960dc000000000000000000000000000000000000000000000000000000005f5260045260245260445ffd5b9091506020813d602011611424575b8161141460209383610c79565b810103126101285751905f6113be565b3d9150611407565b670de0b6b3a7640000918083036114435750905090565b8290671bc16d674ec8000081036114645750508061146091611109565b0490565b673782dace9d900000810361148857506114818261146093611109565b0480611109565b9050611493916114ed565b61149c816110f2565b60015f19938483010401901515029060018201808311611047578110156114c4575050505f90565b030190565b8015611126576ec097ce7bc90715b34b9f10000000000590565b8115611126570590565b908015611e16578115611e10578160ff1c611de857770bce5086492111aea88f4bb1ca6bcf584181ea8059f76532811015611dc05781670c7d713b49da00001280611daf575b15611a4c57670de0b6b3a7640000916ec097ce7bc90715b34b9f100000000090611586908402828101907fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f0000000000183026114e3565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b918082818507020592050201670de0b6b3a7640000905b057ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc00008181131580611a39575b15611a11578190821215806119fe575b156119d6575f915f81126119c7575b506064906806f05b59d3b20000008112611964577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e0000000168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac6200000081121561192b575b6856bc75e2d6310000008112156118f1575b682b5e3af16b188000008112156118b9575b6815af1d78b58c400000811215611881575b680ad78ebc5ac620000081121561184a575b82811215611813575b6802b5e3af16b18800008112156117dc575b68015af1d78b58c400008112156117a5575b60028382800205056003848383020505600485848302050585600581868402050560068287830205056007838883020505906008848984020505926009858a8602050595600a868b8902050597600b878c8b02050599600c888d8d0205059b01010101010101010101010102050205905f146111a2576111a2906114c9565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c000084920192020590611726565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e78000084920192020590611714565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf0000084920192020590611702565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000849201920205906116f9565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c00000849201920205906116e7565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e7800000849201920205906116d5565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf000000849201920205906116c3565b6e01855144814a7ff805980ff008400091507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e000000016116b1565b6803782dace9d900000081126119b4577ffffffffffffffffffffffffffffffffffffffffffffffffc87d25316270000000168056bc75e2d63100000826b1425982cf597cd205cef73809261169c565b68056bc75e2d631000008260019261169c565b600192505f0390506064611640565b7fd4794efd000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c80000821315611631565b7fa2f9f7e3000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c80000821315611621565b81670de0b6b3a7640000925f91848112611d99575b506064905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000821215611d6e575b73011798004d755d3c8bc8e03204cf44619e000000821215611d4d575b820290808302906e01855144814a7ff805980ff00840009081831215611d2a575b50506b02df0ab5a80a22c61ab5a70080821215611d0a575b50693f1fce3da636ea5cf85080821215611cea575b50690127fa27722cc06cc5e280821215611cca575b5068280e60114edb805d0380821215611caa575b50680ebc5fb4174612111080821215611c93575b506808f00f760a4b2db55d80821215611c73575b506806f5f177578893793780821215611c53575b506806248f33704b28660380821215611c34575b506805c548670b9510e7ac80821215611c15575b50611bc268056bc75e2d6310000091827ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf000008183019201026114e3565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b0105905f14611c10575f035b026115f5565b611c0a565b68056bc75e2d631000006756bc75e2d63100009202059101905f611b86565b68056bc75e2d6310000067ad78ebc5ac6200009202059101905f611b72565b68056bc75e2d6310000068015af1d78b58c400009202059101905f611b5e565b68056bc75e2d631000006802b5e3af16b18800009202059101905f611b4a565b68056bc75e2d63100000809202059101905f611b36565b68056bc75e2d63100000680ad78ebc5ac62000009202059101905f611b22565b68056bc75e2d631000006815af1d78b58c4000009202059101905f611b0e565b68056bc75e2d63100000682b5e3af16b188000009202059101905f611af9565b68056bc75e2d631000006856bc75e2d6310000009202059101905f611ae4565b68ad78ebc5ac62000000925069021e19e0c9bab240000002059101905f80611acc565b906b1425982cf597cd205cef73806803782dace9d900000091059101611aab565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b2000000611a8e565b9050611da591506114c9565b6001906064611a61565b50670f43fc2c04ee00008212611533565b7fd8317311000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f022701e0000000000000000000000000000000000000000000000000000000005f5260045ffd5b50505f90565b5050670de0b6b3a76400009056fea26469706673582212202631073c3826e5a6c3b4aa3d493b30de8c068db9d651db5f82b09d11893715c964736f6c634300081b0033","opcodes":"PUSH1 0x40 PUSH1 0x80 DUP2 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x13 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR SWAP1 DUP2 PUSH4 0x16A0B3E0 EQ PUSH2 0xB46 JUMPI DUP2 PUSH4 0x273C1ADF EQ PUSH2 0xB22 JUMPI DUP2 PUSH4 0x3AB05915 EQ PUSH2 0xA1A JUMPI DUP2 PUSH4 0x654CF15D EQ PUSH2 0x9F8 JUMPI DUP2 PUSH4 0x72C98186 EQ PUSH2 0x96B JUMPI DUP2 PUSH4 0x85D5261A EQ PUSH2 0x830 JUMPI DUP2 PUSH4 0x984DE9E8 EQ PUSH2 0x7DF JUMPI DUP2 PUSH4 0x9A87FFBF EQ PUSH2 0x52D JUMPI DUP2 PUSH4 0xB5F163FF EQ PUSH2 0x4F6 JUMPI DUP2 PUSH4 0xB677FA56 EQ PUSH2 0x4A0 JUMPI DUP2 PUSH4 0xC548E4D8 EQ PUSH2 0x4A5 JUMPI DUP2 PUSH4 0xCE20ECE7 EQ PUSH2 0x4A0 JUMPI DUP2 PUSH4 0xD9C7CC7A EQ PUSH2 0x12C JUMPI POP PUSH4 0xDA317980 EQ PUSH2 0xB7 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x128 JUMPI PUSH2 0xC5 CALLDATASIZE PUSH2 0xD5F JUMP JUMPDEST PUSH2 0xD2 DUP4 SWAP3 SWAP5 SWAP4 MLOAD PUSH2 0x1096 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x10F JUMPI DUP1 PUSH2 0xFE DUP8 PUSH2 0xF9 DUP7 PUSH2 0xF3 PUSH1 0x1 SWAP7 DUP9 PUSH2 0xE80 JUMP JUMPDEST MLOAD PUSH2 0x1109 JUMP JUMPDEST PUSH2 0x111C JUMP JUMPDEST PUSH2 0x108 DUP3 DUP8 PUSH2 0xE80 JUMP JUMPDEST MSTORE ADD PUSH2 0xD5 JUMP JUMPDEST DUP5 MLOAD PUSH1 0x20 DUP1 DUP3 MSTORE DUP2 SWAP1 PUSH2 0x124 SWAP1 DUP3 ADD DUP8 PUSH2 0xDD3 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x128 JUMPI PUSH1 0x80 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x128 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP1 CALLDATALOAD DUP4 DUP2 GT PUSH2 0x128 JUMPI PUSH2 0x15E SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0xCFF JUMP JUMPDEST SWAP3 PUSH1 0x24 SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 GT PUSH2 0x128 JUMPI PUSH2 0x179 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0xCFF JUMP JUMPDEST PUSH1 0x64 CALLDATALOAD SWAP3 DUP6 MLOAD SWAP6 PUSH2 0x189 DUP8 PUSH2 0x1096 JUMP JUMPDEST SWAP3 PUSH2 0x193 DUP9 PUSH2 0x1096 JUMP JUMPDEST SWAP5 PUSH0 JUMPDEST DUP10 DUP2 LT PUSH2 0x436 JUMPI POP POP POP DUP6 MLOAD SWAP7 DUP8 SWAP6 PUSH32 0x984DE9E800000000000000000000000000000000000000000000000000000000 SWAP3 DUP4 DUP9 MSTORE DUP9 DUP6 DUP10 ADD MSTORE PUSH2 0x1DC PUSH1 0x44 DUP10 ADD DUP3 PUSH2 0xDD3 JUMP JUMPDEST PUSH0 PUSH1 0x24 DUP11 ADD MSTORE DUP9 PUSH1 0x20 SWAP12 DUP13 SWAP3 SUB DUP2 ADDRESS GAS STATICCALL SWAP8 DUP9 ISZERO PUSH2 0x42C JUMPI PUSH0 SWAP9 PUSH2 0x3FD JUMPI JUMPDEST POP DUP9 MLOAD SWAP1 DUP5 DUP3 MSTORE DUP11 DUP3 DUP1 PUSH2 0x211 DUP11 DUP11 DUP4 ADD PUSH2 0x1153 JUMP JUMPDEST SUB DUP2 ADDRESS GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x3F3 JUMPI PUSH0 SWAP3 PUSH2 0x3C4 JUMPI JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP1 DUP1 DUP3 DIV DUP5 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x398 JUMPI SWAP1 PUSH2 0x251 DUP11 DUP14 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 PUSH2 0x111C JUMP JUMPDEST SWAP1 PUSH2 0x25C DUP3 ADDRESS PUSH2 0x1368 JUMP JUMPDEST PUSH0 JUMPDEST DUP6 DUP2 LT PUSH2 0x2F9 JUMPI POP POP POP POP POP POP PUSH2 0x27E DUP8 MLOAD SWAP5 DUP6 SWAP4 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD PUSH2 0x1153 JUMP JUMPDEST SUB DUP2 ADDRESS GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2EF JUMPI PUSH0 SWAP2 PUSH2 0x2C2 JUMPI JUMPDEST POP DUP3 PUSH2 0xF9 PUSH2 0x2A6 PUSH2 0x124 SWAP6 PUSH2 0x2AE SWAP5 PUSH2 0x103A JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD PUSH2 0x1109 JUMP JUMPDEST SWAP3 DUP1 DUP1 MLOAD SWAP6 DUP7 SWAP6 DUP7 MSTORE DUP6 ADD MSTORE DUP4 ADD SWAP1 PUSH2 0xDD3 JUMP JUMPDEST SWAP1 POP DUP5 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x2E8 JUMPI JUMPDEST PUSH2 0x2D9 DUP2 DUP4 PUSH2 0xC79 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x128 JUMPI MLOAD DUP3 PUSH2 0x291 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x2CF JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP5 DUP5 SWAP6 SWAP7 SWAP8 SWAP9 SWAP10 POP DUP12 DUP12 DUP4 DUP6 SWAP7 SWAP8 PUSH2 0x31D PUSH2 0x316 DUP4 PUSH1 0x1 SWAP10 PUSH2 0xE80 JUMP JUMPDEST MLOAD DUP11 PUSH2 0x1109 JUMP JUMPDEST DIV DUP1 PUSH2 0x329 DUP4 DUP6 PUSH2 0xE80 JUMP JUMPDEST MLOAD GT PUSH2 0x344 JUMPI JUMPDEST POP POP POP POP POP ADD SWAP1 DUP13 SWAP8 SWAP7 SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 PUSH2 0x25E JUMP JUMPDEST DUP2 DUP4 PUSH2 0x365 PUSH2 0x383 SWAP8 PUSH2 0x375 SWAP5 PUSH2 0x35E DUP6 PUSH2 0x37C SWAP10 PUSH2 0xE80 JUMP JUMPDEST MLOAD SUB PUSH2 0x11FE JUMP JUMPDEST PUSH2 0x36F DUP4 DUP9 PUSH2 0xE80 JUMP JUMPDEST MSTORE PUSH2 0xE80 JUMP JUMPDEST MLOAD SWAP3 PUSH2 0xE80 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x103A JUMP JUMPDEST PUSH2 0x38D DUP3 DUP13 PUSH2 0xE80 JUMP JUMPDEST MSTORE DUP6 DUP12 DUP12 DUP4 PUSH0 PUSH2 0x330 JUMP JUMPDEST PUSH1 0x11 DUP8 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP DUP11 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x3EC JUMPI JUMPDEST PUSH2 0x3DC DUP2 DUP4 PUSH2 0xC79 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x128 JUMPI MLOAD SWAP1 DUP12 PUSH2 0x224 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x3D2 JUMP JUMPDEST DUP11 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP8 POP DUP10 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x425 JUMPI JUMPDEST PUSH2 0x415 DUP2 DUP4 PUSH2 0xC79 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x128 JUMPI MLOAD SWAP7 DUP11 PUSH2 0x1FB JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x40B JUMP JUMPDEST DUP10 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x455 PUSH2 0x443 DUP3 DUP7 PUSH2 0xE80 JUMP JUMPDEST MLOAD PUSH2 0x44E DUP4 DUP7 PUSH2 0xE80 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x10E5 JUMP JUMPDEST PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x475 JUMPI SWAP1 PUSH1 0x1 SWAP2 PUSH2 0x46E DUP3 DUP10 PUSH2 0xE80 JUMP JUMPDEST MSTORE ADD PUSH2 0x196 JUMP JUMPDEST DUP3 PUSH1 0x11 DUP8 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH0 REVERT JUMPDEST PUSH2 0xE66 JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x128 JUMPI PUSH2 0x4B4 CALLDATASIZE PUSH2 0xD5F JUMP JUMPDEST PUSH2 0x4C1 DUP4 SWAP3 SWAP5 SWAP4 MLOAD PUSH2 0x1096 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP2 MLOAD DUP2 LT ISZERO PUSH2 0x10F JUMPI DUP1 PUSH2 0x4E5 DUP8 DUP6 PUSH2 0x4DF PUSH1 0x1 SWAP6 DUP8 PUSH2 0xE80 JUMP JUMPDEST MLOAD PUSH2 0x1348 JUMP JUMPDEST PUSH2 0x4EF DUP3 DUP8 PUSH2 0xE80 JUMP JUMPDEST MSTORE ADD PUSH2 0x4C4 JUMP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x128 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x128 JUMPI CALLDATALOAD SWAP1 PUSH0 SLOAD DUP3 LT ISZERO PUSH2 0x128 JUMPI PUSH2 0x51F PUSH1 0x20 SWAP3 PUSH2 0xE06 JUMP JUMPDEST SWAP2 SWAP1 SLOAD SWAP1 MLOAD SWAP2 PUSH1 0x3 SHL SHR DUP2 MSTORE RETURN JUMPDEST DUP3 CALLVALUE PUSH2 0x128 JUMPI PUSH2 0x53C CALLDATASIZE PUSH2 0xD95 JUMP JUMPDEST SWAP2 DUP5 MLOAD SWAP5 PUSH2 0x549 DUP7 PUSH2 0x1096 JUMP JUMPDEST SWAP2 PUSH0 JUMPDEST DUP8 DUP2 LT PUSH2 0x788 JUMPI POP PUSH2 0x568 SWAP1 PUSH2 0x562 DUP8 DUP6 PUSH2 0xE80 JUMP JUMPDEST MLOAD PUSH2 0x103A JUMP JUMPDEST PUSH2 0x572 DUP7 DUP5 PUSH2 0xE80 JUMP JUMPDEST MSTORE DUP7 MLOAD SWAP8 DUP9 SWAP5 PUSH32 0x984DE9E800000000000000000000000000000000000000000000000000000000 SWAP3 DUP4 DUP8 MSTORE DUP10 DUP4 DUP9 ADD MSTORE PUSH2 0x5AF PUSH1 0x44 DUP9 ADD DUP3 PUSH2 0xDD3 JUMP JUMPDEST PUSH0 PUSH1 0x24 DUP10 ADD MSTORE DUP8 PUSH1 0x20 SWAP13 DUP14 SWAP3 SUB DUP2 ADDRESS GAS STATICCALL SWAP7 DUP8 ISZERO PUSH2 0x3F3 JUMPI PUSH0 SWAP8 PUSH2 0x759 JUMPI JUMPDEST POP DUP10 MLOAD DUP5 DUP2 MSTORE DUP11 DUP5 DUP3 ADD MSTORE DUP12 DUP2 DUP1 PUSH2 0x5E9 PUSH1 0x44 DUP3 ADD DUP11 PUSH2 0xDD3 JUMP JUMPDEST PUSH0 PUSH1 0x24 DUP4 ADD MSTORE SUB DUP2 ADDRESS GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x74F JUMPI DUP9 DUP14 SWAP6 SWAP5 SWAP4 SWAP3 DUP12 SWAP3 PUSH0 SWAP2 PUSH2 0x712 JUMPI JUMPDEST POP PUSH2 0x663 SWAP5 SWAP4 PUSH2 0x637 PUSH2 0x65E SWAP5 PUSH2 0x627 PUSH2 0x648 SWAP6 PUSH2 0x63E SWAP6 PUSH2 0x12EF JUMP JUMPDEST SWAP3 PUSH2 0x632 DUP5 ADDRESS PUSH2 0x1220 JUMP JUMPDEST PUSH2 0xE80 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x11FE JUMP JUMPDEST PUSH2 0x37C DUP13 DUP11 PUSH2 0xE80 JUMP JUMPDEST SWAP2 PUSH8 0xDE0B6B3A7640000 DUP2 DUP2 SUB SWAP2 LT MUL DUP3 PUSH2 0x12EF JUMP JUMPDEST PUSH2 0x103A JUMP JUMPDEST SWAP3 PUSH2 0x672 DUP5 PUSH2 0x562 DUP11 DUP9 PUSH2 0xE80 JUMP JUMPDEST PUSH2 0x67C DUP10 DUP8 PUSH2 0xE80 JUMP JUMPDEST MSTORE PUSH2 0x690 DUP11 MLOAD SWAP6 DUP7 SWAP4 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD PUSH2 0x1153 JUMP JUMPDEST SUB DUP2 ADDRESS GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x708 JUMPI PUSH0 SWAP3 PUSH2 0x6D1 JUMPI JUMPDEST POP PUSH2 0x2AE SWAP4 SWAP3 SWAP2 PUSH2 0x6CB SWAP2 PUSH2 0x6C4 PUSH2 0x6BD PUSH2 0x124 SWAP10 PUSH2 0x1096 JUMP JUMPDEST SWAP8 DUP9 PUSH2 0xE80 JUMP JUMPDEST MSTORE DUP4 PUSH2 0x103A JUMP JUMPDEST SWAP1 PUSH2 0x1348 JUMP JUMPDEST SWAP1 SWAP4 SWAP3 SWAP2 POP DUP8 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x701 JUMPI JUMPDEST PUSH2 0x6EB DUP2 DUP4 PUSH2 0xC79 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x128 JUMPI MLOAD SWAP2 SWAP3 SWAP1 SWAP2 SWAP1 PUSH2 0x124 PUSH2 0x6A3 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x6E1 JUMP JUMPDEST DUP8 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP7 SWAP3 POP POP POP DUP5 DUP2 SWAP4 SWAP3 SWAP4 RETURNDATASIZE DUP4 GT PUSH2 0x748 JUMPI JUMPDEST PUSH2 0x72E DUP2 DUP4 PUSH2 0xC79 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x128 JUMPI SWAP3 MLOAD DUP12 SWAP4 SWAP2 SWAP1 DUP10 SWAP1 DUP10 SWAP1 PUSH2 0x663 PUSH2 0x60A JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x724 JUMP JUMPDEST DUP12 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 SWAP7 POP DUP11 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x781 JUMPI JUMPDEST PUSH2 0x771 DUP2 DUP4 PUSH2 0xC79 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x128 JUMPI MLOAD SWAP6 DUP12 PUSH2 0x5CE JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x767 JUMP JUMPDEST PUSH2 0x792 DUP2 DUP5 PUSH2 0xE80 JUMP JUMPDEST MLOAD PUSH0 NOT DUP2 ADD SWAP1 DUP2 GT PUSH2 0x7B3 JUMPI SWAP1 PUSH1 0x1 SWAP2 PUSH2 0x7AC DUP3 DUP8 PUSH2 0xE80 JUMP JUMPDEST MSTORE ADD PUSH2 0x54C JUMP JUMPDEST PUSH1 0x11 DUP12 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x128 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x128 JUMPI DUP1 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x128 JUMPI PUSH2 0x80F SWAP2 CALLDATASIZE SWAP2 ADD PUSH2 0xCFF JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD SWAP2 PUSH1 0x2 DUP4 LT ISZERO PUSH2 0x128 JUMPI PUSH1 0x20 SWAP3 PUSH2 0x829 SWAP2 PUSH2 0xF00 JUMP JUMPDEST SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x128 JUMPI PUSH2 0x855 SWAP1 PUSH1 0x20 PUSH2 0x846 CALLDATASIZE PUSH2 0xD95 JUMP JUMPDEST SWAP4 DUP4 SWAP8 DUP3 DUP3 SWAP9 SWAP6 SWAP8 SWAP4 SWAP5 PUSH2 0x10E5 JUMP JUMPDEST SWAP4 PUSH2 0x89E PUSH2 0x863 DUP6 DUP8 PUSH2 0x12EF JUMP JUMPDEST PUSH2 0x86D DUP2 ADDRESS PUSH2 0x1368 JUMP JUMPDEST DUP12 MLOAD SWAP9 DUP10 SWAP5 DUP6 SWAP5 PUSH32 0x16A0B3E000000000000000000000000000000000000000000000000000000000 DUP7 MSTORE DUP6 ADD PUSH2 0x1074 JUMP JUMPDEST SUB DUP2 ADDRESS GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x708 JUMPI DUP7 SWAP5 PUSH0 SWAP4 PUSH2 0x92E JUMPI JUMPDEST POP PUSH2 0x902 PUSH2 0x90B SWAP5 PUSH2 0x65E PUSH2 0x648 DUP9 SWAP7 PUSH2 0x8FC DUP12 SWAP8 PUSH2 0xF9 PUSH2 0x912 SWAP9 PUSH2 0x8F5 PUSH2 0x124 SWAP16 PUSH2 0x918 SWAP16 PUSH2 0x8E7 SWAP1 PUSH2 0x8EE SWAP3 PUSH2 0xE80 JUMP JUMPDEST MLOAD DUP8 PUSH2 0x103A JUMP JUMPDEST SWAP13 DUP13 PUSH2 0xE80 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x1109 JUMP JUMPDEST SWAP1 PUSH2 0x103A JUMP JUMPDEST SWAP4 DUP5 SWAP3 MLOAD PUSH2 0x1096 JUMP JUMPDEST SWAP7 DUP8 PUSH2 0xE80 JUMP JUMPDEST MSTORE PUSH2 0x10E5 JUMP JUMPDEST SWAP2 DUP4 MLOAD SWAP4 DUP5 SWAP4 DUP5 MSTORE DUP1 PUSH1 0x20 DUP6 ADD MSTORE DUP4 ADD SWAP1 PUSH2 0xDD3 JUMP JUMPDEST SWAP5 POP SWAP2 POP SWAP4 PUSH1 0x20 DUP5 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x963 JUMPI JUMPDEST DUP2 PUSH2 0x94C PUSH1 0x20 SWAP4 DUP4 PUSH2 0xC79 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x128 JUMPI SWAP3 MLOAD SWAP3 SWAP4 DUP6 SWAP4 SWAP2 PUSH2 0x902 PUSH2 0x8B3 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x93F JUMP JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x128 JUMPI PUSH1 0x3 NOT PUSH1 0x20 DUP2 CALLDATASIZE ADD SLT PUSH2 0x128 JUMPI DUP2 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x128 JUMPI PUSH1 0xE0 SWAP2 CALLDATASIZE SUB ADD SLT PUSH2 0x128 JUMPI PUSH1 0x20 PUSH1 0x64 SWAP3 MLOAD SWAP2 PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE DUP3 ADD MSTORE PUSH1 0xF PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4E6F7420696D706C656D656E7465640000000000000000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x128 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x128 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH8 0xDE0B6B3A7640000 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x128 JUMPI PUSH1 0x20 PUSH2 0xA3F SWAP2 PUSH2 0xA30 CALLDATASIZE PUSH2 0xD95 JUMP JUMPDEST SWAP4 DUP4 SWAP8 DUP3 SWAP4 DUP3 SWAP8 SWAP6 SWAP9 SWAP4 PUSH2 0x103A JUMP JUMPDEST SWAP4 PUSH2 0xA88 PUSH2 0xA4D DUP6 DUP8 PUSH2 0x12EF JUMP JUMPDEST PUSH2 0xA57 DUP2 ADDRESS PUSH2 0x1220 JUMP JUMPDEST DUP12 MLOAD SWAP10 DUP11 SWAP5 DUP6 SWAP5 PUSH32 0x16A0B3E000000000000000000000000000000000000000000000000000000000 DUP7 MSTORE DUP6 ADD PUSH2 0x1074 JUMP JUMPDEST SUB DUP2 ADDRESS GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x708 JUMPI DUP7 SWAP6 PUSH0 SWAP4 PUSH2 0xAE4 JUMPI JUMPDEST DUP9 DUP8 PUSH2 0x124 PUSH2 0x918 PUSH2 0x90B DUP4 DUP12 PUSH2 0xADE PUSH2 0x902 DUP14 PUSH2 0xAD9 DUP15 PUSH2 0x65E DUP16 DUP16 PUSH2 0xAD2 PUSH2 0xACB DUP6 PUSH2 0x562 DUP14 DUP14 PUSH2 0xE80 JUMP JUMPDEST SWAP11 DUP11 PUSH2 0xE80 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x1348 JUMP JUMPDEST PUSH2 0x11FE JUMP JUMPDEST MSTORE PUSH2 0x103A JUMP JUMPDEST SWAP5 SWAP2 SWAP3 POP SWAP5 POP PUSH1 0x20 DUP5 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xB1A JUMPI JUMPDEST DUP2 PUSH2 0xB03 PUSH1 0x20 SWAP4 DUP4 PUSH2 0xC79 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x128 JUMPI SWAP3 MLOAD DUP6 SWAP5 SWAP1 SWAP2 SWAP1 PUSH2 0x902 PUSH2 0xA9D JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xAF6 JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x128 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x128 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH10 0xD3C21BCECCEDA1000000 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP CALLVALUE PUSH2 0x128 JUMPI PUSH2 0xB68 SWAP2 PUSH2 0xB6F PUSH2 0xB5D CALLDATASIZE PUSH2 0xD5F JUMP JUMPDEST SWAP3 SWAP2 SWAP1 DUP1 SWAP7 SWAP2 PUSH2 0xE80 JUMP JUMPDEST MLOAD SWAP5 PUSH2 0xE06 JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR PUSH1 0x1 DUP3 GT PUSH0 EQ PUSH2 0xC72 JUMPI PUSH1 0x2 JUMPDEST DUP1 PUSH1 0x1 EQ PUSH2 0xC19 JUMPI PUSH1 0x2 EQ PUSH2 0xBBE JUMPI PUSH1 0x51 DUP5 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 DUP2 ISZERO PUSH2 0xBF3 JUMPI POP SWAP3 PUSH2 0xBED PUSH2 0x829 SWAP3 PUSH1 0x1 PUSH1 0x20 SWAP7 PUSH15 0xC097CE7BC90715B34B9F0FFFFFFFFF DIV ADD SWAP1 PUSH2 0x1170 JUMP JUMPDEST SWAP1 PUSH2 0x11FE JUMP JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP SWAP1 SWAP2 SWAP3 DUP2 ISZERO PUSH2 0xC46 JUMPI POP SWAP3 PUSH2 0xBED PUSH2 0x829 SWAP3 PUSH1 0x20 SWAP6 PUSH15 0xC097CE7BC90715B34B9F1000000000 DIV SWAP1 PUSH2 0x1170 JUMP JUMPDEST PUSH1 0x12 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x1 PUSH2 0xB83 JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0xCBA JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0xCBA JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x128 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0xD19 DUP2 PUSH2 0xCE7 JUMP JUMPDEST SWAP4 PUSH2 0xD27 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0xC79 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x128 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xD50 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0xD42 JUMP JUMPDEST PUSH1 0x60 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x128 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x128 JUMPI PUSH2 0xD8A SWAP2 PUSH1 0x4 ADD PUSH2 0xCFF JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST PUSH1 0xA0 PUSH1 0x3 NOT DUP3 ADD SLT PUSH2 0x128 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT PUSH2 0x128 JUMPI PUSH2 0xDC0 SWAP2 PUSH1 0x4 ADD PUSH2 0xCFF JUMP JUMPDEST SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x64 CALLDATALOAD SWAP1 PUSH1 0x84 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0xDF2 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0xDE4 JUMP JUMPDEST PUSH0 SLOAD DUP2 LT ISZERO PUSH2 0xE39 JUMPI PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST CALLVALUE PUSH2 0x128 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x128 JUMPI PUSH1 0x20 PUSH1 0x40 MLOAD PUSH0 DUP2 MSTORE RETURN JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0xE39 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH0 SLOAD DUP1 DUP4 MSTORE DUP3 PUSH1 0x20 SWAP2 PUSH1 0x20 DUP3 ADD SWAP1 PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 SWAP4 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0xEE6 JUMPI POP POP POP PUSH2 0xEE4 SWAP3 POP SUB DUP4 PUSH2 0xC79 JUMP JUMPDEST JUMP JUMPDEST DUP6 SLOAD DUP5 MSTORE PUSH1 0x1 SWAP6 DUP7 ADD SWAP6 DUP9 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0xECE JUMP JUMPDEST SWAP1 PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x100D JUMPI PUSH1 0x1 SWAP1 DUP2 SUB PUSH2 0xFAF JUMPI DUP1 PUSH2 0xF1C PUSH2 0xE94 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH0 SWAP4 JUMPDEST PUSH2 0xF63 JUMPI JUMPDEST POP POP POP POP DUP1 ISZERO PUSH2 0xF3B JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x2654368900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD DUP5 LT ISZERO PUSH2 0xFAA JUMPI DUP3 PUSH8 0xDE0B6B3A7640000 PUSH2 0xFA1 DUP7 SWAP8 PUSH2 0xF9B PUSH2 0xF89 DUP6 SWAP10 DUP8 PUSH2 0xE80 JUMP JUMPDEST MLOAD PUSH2 0xF94 DUP12 DUP10 PUSH2 0xE80 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x142C JUMP JUMPDEST SWAP1 PUSH2 0x1109 JUMP JUMPDEST DIV SWAP6 ADD SWAP4 PUSH2 0xF29 JUMP JUMPDEST PUSH2 0xF2E JUMP JUMPDEST DUP1 PUSH2 0xFB8 PUSH2 0xE94 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH0 SWAP4 JUMPDEST PUSH2 0xFD6 JUMPI POP POP POP POP DUP1 ISZERO PUSH2 0xF3B JUMPI SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP5 LT ISZERO PUSH2 0xFAA JUMPI DUP3 PUSH2 0x1005 DUP6 SWAP7 PUSH2 0xBED PUSH2 0xFF3 DUP5 SWAP9 DUP7 PUSH2 0xE80 JUMP JUMPDEST MLOAD PUSH2 0xFFE DUP11 DUP9 PUSH2 0xE80 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x1170 JUMP JUMPDEST SWAP6 ADD SWAP4 PUSH2 0xFC5 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 SUB SWAP2 DUP3 GT PUSH2 0x1047 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH2 0x108C PUSH1 0x40 SWAP3 SWAP6 SWAP5 SWAP4 SWAP6 PUSH1 0x60 DUP4 MSTORE PUSH1 0x60 DUP4 ADD SWAP1 PUSH2 0xDD3 JUMP JUMPDEST SWAP5 PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SWAP1 PUSH2 0x10A0 DUP3 PUSH2 0xCE7 JUMP JUMPDEST PUSH2 0x10AD PUSH1 0x40 MLOAD SWAP2 DUP3 PUSH2 0xC79 JUMP JUMPDEST DUP3 DUP2 MSTORE PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH2 0x10DB DUP3 SWAP5 PUSH2 0xCE7 JUMP JUMPDEST ADD SWAP1 PUSH1 0x20 CALLDATASIZE SWAP2 ADD CALLDATACOPY JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x1047 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x2710 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x1047 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x1047 JUMPI JUMP JUMPDEST DUP2 ISZERO PUSH2 0x1126 JUMPI DIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 PUSH1 0x20 PUSH2 0x116B PUSH1 0x1 SWAP3 PUSH1 0x40 DUP7 MSTORE PUSH1 0x40 DUP7 ADD SWAP1 PUSH2 0xDD3 JUMP JUMPDEST SWAP4 ADD MSTORE JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 SUB PUSH2 0x1187 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x11A5 JUMPI POP POP DUP1 PUSH2 0x11A2 SWAP2 PUSH2 0x11FE JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x11C9 JUMPI POP POP PUSH2 0x11C3 DUP2 PUSH2 0x11A2 SWAP3 PUSH2 0x11FE JUMP JUMPDEST DUP1 PUSH2 0x11FE JUMP JUMPDEST PUSH2 0x11D3 SWAP2 SWAP3 PUSH2 0x14ED JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH2 0x11DF DUP4 PUSH2 0x10F2 JUMP JUMPDEST SWAP2 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH1 0x1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x1047 JUMPI PUSH2 0x11A2 SWAP2 PUSH2 0x10E5 JUMP JUMPDEST SWAP1 PUSH2 0x1208 SWAP2 PUSH2 0x1109 JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 PUSH1 0x4 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH32 0xB677FA5600000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x12E4 JUMPI PUSH0 SWAP3 PUSH2 0x12B0 JUMPI JUMPDEST POP DUP2 DUP2 LT PUSH2 0x1282 JUMPI POP POP JUMP JUMPDEST PUSH32 0xE31C95BE00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x12DC JUMPI JUMPDEST DUP2 PUSH2 0x12CC PUSH1 0x20 SWAP4 DUP4 PUSH2 0xC79 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x128 JUMPI MLOAD SWAP1 PUSH0 PUSH2 0x1276 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x12BF JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x1320 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x1047 JUMPI PUSH1 0x1 SWAP1 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP3 ISZERO PUSH2 0x1320 JUMPI PUSH1 0x1 SWAP2 PUSH2 0x135A SWAP2 PUSH2 0x1109 JUMP JUMPDEST SWAP2 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x20 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 PUSH1 0x4 PUSH1 0x40 MLOAD DUP1 SWAP6 DUP2 SWAP4 PUSH32 0x273C1ADF00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x12E4 JUMPI PUSH0 SWAP3 PUSH2 0x13F8 JUMPI JUMPDEST POP DUP2 DUP2 GT PUSH2 0x13CA JUMPI POP POP JUMP JUMPDEST PUSH32 0x3E8960DC00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x1424 JUMPI JUMPDEST DUP2 PUSH2 0x1414 PUSH1 0x20 SWAP4 DUP4 PUSH2 0xC79 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x128 JUMPI MLOAD SWAP1 PUSH0 PUSH2 0x13BE JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x1407 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 DUP1 DUP4 SUB PUSH2 0x1443 JUMPI POP SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 SWAP1 PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x1464 JUMPI POP POP DUP1 PUSH2 0x1460 SWAP2 PUSH2 0x1109 JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x1488 JUMPI POP PUSH2 0x1481 DUP3 PUSH2 0x1460 SWAP4 PUSH2 0x1109 JUMP JUMPDEST DIV DUP1 PUSH2 0x1109 JUMP JUMPDEST SWAP1 POP PUSH2 0x1493 SWAP2 PUSH2 0x14ED JUMP JUMPDEST PUSH2 0x149C DUP2 PUSH2 0x10F2 JUMP JUMPDEST PUSH1 0x1 PUSH0 NOT SWAP4 DUP5 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 PUSH1 0x1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x1047 JUMPI DUP2 LT ISZERO PUSH2 0x14C4 JUMPI POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SUB ADD SWAP1 JUMP JUMPDEST DUP1 ISZERO PUSH2 0x1126 JUMPI PUSH15 0xC097CE7BC90715B34B9F1000000000 SDIV SWAP1 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x1126 JUMPI SDIV SWAP1 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x1E16 JUMPI DUP2 ISZERO PUSH2 0x1E10 JUMPI DUP2 PUSH1 0xFF SHR PUSH2 0x1DE8 JUMPI PUSH24 0xBCE5086492111AEA88F4BB1CA6BCF584181EA8059F76532 DUP2 LT ISZERO PUSH2 0x1DC0 JUMPI DUP2 PUSH8 0xC7D713B49DA0000 SLT DUP1 PUSH2 0x1DAF JUMPI JUMPDEST ISZERO PUSH2 0x1A4C JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH15 0xC097CE7BC90715B34B9F1000000000 SWAP1 PUSH2 0x1586 SWAP1 DUP5 MUL DUP3 DUP2 ADD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F68318436F8EA4CB460F000000000 ADD DUP4 MUL PUSH2 0x14E3 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV DUP4 DUP6 DUP3 MUL SDIV SWAP2 DUP5 DUP7 DUP5 MUL SDIV SWAP4 DUP6 DUP8 DUP7 MUL SDIV SWAP6 DUP1 DUP9 DUP9 MUL SDIV SWAP8 DUP9 MUL SDIV PUSH1 0xF SWAP1 SDIV SWAP7 PUSH1 0xD SWAP1 SDIV SWAP6 PUSH1 0xB SWAP1 SDIV SWAP5 PUSH1 0x9 SWAP1 SDIV SWAP4 PUSH1 0x7 SWAP1 SDIV SWAP3 PUSH1 0x5 SWAP1 SDIV SWAP2 PUSH1 0x3 SWAP1 SDIV ADD ADD ADD ADD ADD ADD ADD PUSH1 0x1 SHL SWAP2 DUP1 DUP3 DUP2 DUP6 SMOD MUL SDIV SWAP3 SDIV MUL ADD PUSH8 0xDE0B6B3A7640000 SWAP1 JUMPDEST SDIV PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC702BD3A30FC0000 DUP2 DUP2 SGT ISZERO DUP1 PUSH2 0x1A39 JUMPI JUMPDEST ISZERO PUSH2 0x1A11 JUMPI DUP2 SWAP1 DUP3 SLT ISZERO DUP1 PUSH2 0x19FE JUMPI JUMPDEST ISZERO PUSH2 0x19D6 JUMPI PUSH0 SWAP2 PUSH0 DUP2 SLT PUSH2 0x19C7 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH9 0x6F05B59D3B2000000 DUP2 SLT PUSH2 0x1964 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90FA4A62C4E000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP3 JUMPDEST MUL DUP2 SWAP1 PUSH9 0xAD78EBC5AC62000000 DUP2 SLT ISZERO PUSH2 0x192B JUMPI JUMPDEST PUSH9 0x56BC75E2D631000000 DUP2 SLT ISZERO PUSH2 0x18F1 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B18800000 DUP2 SLT ISZERO PUSH2 0x18B9 JUMPI JUMPDEST PUSH9 0x15AF1D78B58C400000 DUP2 SLT ISZERO PUSH2 0x1881 JUMPI JUMPDEST PUSH9 0xAD78EBC5AC6200000 DUP2 SLT ISZERO PUSH2 0x184A JUMPI JUMPDEST DUP3 DUP2 SLT ISZERO PUSH2 0x1813 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B1880000 DUP2 SLT ISZERO PUSH2 0x17DC JUMPI JUMPDEST PUSH9 0x15AF1D78B58C40000 DUP2 SLT ISZERO PUSH2 0x17A5 JUMPI JUMPDEST PUSH1 0x2 DUP4 DUP3 DUP1 MUL SDIV SDIV PUSH1 0x3 DUP5 DUP4 DUP4 MUL SDIV SDIV PUSH1 0x4 DUP6 DUP5 DUP4 MUL SDIV SDIV DUP6 PUSH1 0x5 DUP2 DUP7 DUP5 MUL SDIV SDIV PUSH1 0x6 DUP3 DUP8 DUP4 MUL SDIV SDIV PUSH1 0x7 DUP4 DUP9 DUP4 MUL SDIV SDIV SWAP1 PUSH1 0x8 DUP5 DUP10 DUP5 MUL SDIV SDIV SWAP3 PUSH1 0x9 DUP6 DUP11 DUP7 MUL SDIV SDIV SWAP6 PUSH1 0xA DUP7 DUP12 DUP10 MUL SDIV SDIV SWAP8 PUSH1 0xB DUP8 DUP13 DUP12 MUL SDIV SDIV SWAP10 PUSH1 0xC DUP9 DUP14 DUP14 MUL SDIV SDIV SWAP12 ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD MUL SDIV MUL SDIV SWAP1 PUSH0 EQ PUSH2 0x11A2 JUMPI PUSH2 0x11A2 SWAP1 PUSH2 0x14C9 JUMP JUMPDEST PUSH9 0x6F5F1775788937937 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C0000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x1726 JUMP JUMPDEST PUSH9 0x8F00F760A4B2DB55D PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E780000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x1714 JUMP JUMPDEST PUSH9 0xEBC5FB41746121110 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x1702 JUMP JUMPDEST PUSH9 0x280E60114EDB805D03 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x16F9 JUMP JUMPDEST PUSH10 0x127FA27722CC06CC5E2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x16E7 JUMP JUMPDEST PUSH10 0x3F1FCE3DA636EA5CF850 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E7800000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x16D5 JUMP JUMPDEST PUSH12 0x2DF0AB5A80A22C61AB5A700 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF000000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x16C3 JUMP JUMPDEST PUSH15 0x1855144814A7FF805980FF0084000 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E000000 ADD PUSH2 0x16B1 JUMP JUMPDEST PUSH9 0x3782DACE9D9000000 DUP2 SLT PUSH2 0x19B4 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC87D2531627000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH12 0x1425982CF597CD205CEF7380 SWAP3 PUSH2 0x169C JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP3 PUSH1 0x1 SWAP3 PUSH2 0x169C JUMP JUMPDEST PUSH1 0x1 SWAP3 POP PUSH0 SUB SWAP1 POP PUSH1 0x64 PUSH2 0x1640 JUMP JUMPDEST PUSH32 0xD4794EFD00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x1631 JUMP JUMPDEST PUSH32 0xA2F9F7E300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x1621 JUMP JUMPDEST DUP2 PUSH8 0xDE0B6B3A7640000 SWAP3 PUSH0 SWAP2 DUP5 DUP2 SLT PUSH2 0x1D99 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH0 PUSH31 0x1600EF3172E58D2E933EC884FDE10064C63B5372D805E203C0000000000000 DUP3 SLT ISZERO PUSH2 0x1D6E JUMPI JUMPDEST PUSH20 0x11798004D755D3C8BC8E03204CF44619E000000 DUP3 SLT ISZERO PUSH2 0x1D4D JUMPI JUMPDEST DUP3 MUL SWAP1 DUP1 DUP4 MUL SWAP1 PUSH15 0x1855144814A7FF805980FF0084000 SWAP1 DUP2 DUP4 SLT ISZERO PUSH2 0x1D2A JUMPI JUMPDEST POP POP PUSH12 0x2DF0AB5A80A22C61AB5A700 DUP1 DUP3 SLT ISZERO PUSH2 0x1D0A JUMPI JUMPDEST POP PUSH10 0x3F1FCE3DA636EA5CF850 DUP1 DUP3 SLT ISZERO PUSH2 0x1CEA JUMPI JUMPDEST POP PUSH10 0x127FA27722CC06CC5E2 DUP1 DUP3 SLT ISZERO PUSH2 0x1CCA JUMPI JUMPDEST POP PUSH9 0x280E60114EDB805D03 DUP1 DUP3 SLT ISZERO PUSH2 0x1CAA JUMPI JUMPDEST POP PUSH9 0xEBC5FB41746121110 DUP1 DUP3 SLT ISZERO PUSH2 0x1C93 JUMPI JUMPDEST POP PUSH9 0x8F00F760A4B2DB55D DUP1 DUP3 SLT ISZERO PUSH2 0x1C73 JUMPI JUMPDEST POP PUSH9 0x6F5F1775788937937 DUP1 DUP3 SLT ISZERO PUSH2 0x1C53 JUMPI JUMPDEST POP PUSH9 0x6248F33704B286603 DUP1 DUP3 SLT ISZERO PUSH2 0x1C34 JUMPI JUMPDEST POP PUSH9 0x5C548670B9510E7AC DUP1 DUP3 SLT ISZERO PUSH2 0x1C15 JUMPI JUMPDEST POP PUSH2 0x1BC2 PUSH9 0x56BC75E2D63100000 SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP2 DUP4 ADD SWAP3 ADD MUL PUSH2 0x14E3 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV SWAP2 PUSH1 0x3 PUSH1 0x5 PUSH1 0x7 PUSH1 0x9 PUSH1 0xB DUP9 DUP11 DUP10 MUL SDIV SWAP9 DUP1 DUP12 DUP12 MUL SDIV SWAP11 DUP12 MUL SDIV SDIV SWAP9 SDIV SWAP7 SDIV SWAP5 SDIV SWAP3 SDIV ADD ADD ADD ADD ADD PUSH1 0x1 SHL ADD SDIV SWAP1 PUSH0 EQ PUSH2 0x1C10 JUMPI PUSH0 SUB JUMPDEST MUL PUSH2 0x15F5 JUMP JUMPDEST PUSH2 0x1C0A JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0x56BC75E2D6310000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1B86 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0xAD78EBC5AC620000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1B72 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C40000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1B5E JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B1880000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1B4A JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP1 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1B36 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0xAD78EBC5AC6200000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1B22 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C400000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1B0E JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B18800000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1AF9 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x56BC75E2D631000000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x1AE4 JUMP JUMPDEST PUSH9 0xAD78EBC5AC62000000 SWAP3 POP PUSH10 0x21E19E0C9BAB2400000 MUL SDIV SWAP2 ADD SWAP1 PUSH0 DUP1 PUSH2 0x1ACC JUMP JUMPDEST SWAP1 PUSH12 0x1425982CF597CD205CEF7380 PUSH9 0x3782DACE9D9000000 SWAP2 SDIV SWAP2 ADD PUSH2 0x1AAB JUMP JUMPDEST POP PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP1 SDIV PUSH9 0x6F05B59D3B2000000 PUSH2 0x1A8E JUMP JUMPDEST SWAP1 POP PUSH2 0x1DA5 SWAP2 POP PUSH2 0x14C9 JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x64 PUSH2 0x1A61 JUMP JUMPDEST POP PUSH8 0xF43FC2C04EE0000 DUP3 SLT PUSH2 0x1533 JUMP JUMPDEST PUSH32 0xD831731100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x22701E000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x26 BALANCE SMOD EXTCODECOPY CODESIZE 0x26 0xE5 0xA6 0xC3 0xB4 0xAA RETURNDATASIZE BLOBHASH EXTCODESIZE ADDRESS 0xDE DUP13 MOD DUP14 0xB9 0xD6 MLOAD 0xDB PUSH0 DUP3 0xB0 SWAP14 GT DUP10 CALLDATACOPY ISZERO 0xC9 PUSH5 0x736F6C6343 STOP ADDMOD SHL STOP CALLER ","sourceMap":"453:981:130:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5749:30:59;453:981:130;;;;;5749:30:59;:::i;:::-;5794:13;453:981:130;5830:3:59;453:981:130;;5809:19:59;;;;;6003:11;6002:44;6003:11;:25;:11;;453:981:130;6003:11:59;;;:::i;:::-;453:981:130;6003:25:59;:::i;:::-;6002:44;:::i;:::-;5986:60;;;;:::i;:::-;453:981:130;;5794:13:59;;5809:19;453:981:130;;;;;;;;;;;;5809:19:59;453:981:130;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;453:981:130;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;8498:24:59;;;;:::i;:::-;8623;;;;:::i;:::-;8743:13;453:981:130;8758:13:59;;;;;;453:981:130;;;;;;;;;9134:57:59;;;;;;;;453:981:130;;;;;;;:::i;:::-;;;;;;;;9134:57:59;;;;1751:4:81;;9134:57:59;;;;;;;453:981:130;9134:57:59;;;8738:165;453:981:130;;;9286:55:59;;;;;;;;;;;;;:::i;:::-;;1751:4:81;;9286:55:59;;;;;;;453:981:130;9286:55:59;;;8738:165;465:4:50;;453:981:130;;;;;;;;;;;;;;;;1625:13:50;;;;;;;;;;;:::i;:::-;1751:4:81;9422:14:59;1751:4:81;;9422:14:59;:::i;:::-;453:981:130;9531:13:59;;;;;;453:981:130;;;;;;11183:55:59;453:981:130;;11183:55:59;;;;;;;;;;:::i;:::-;;1751:4:81;;11183:55:59;;;;;;;453:981:130;11183:55:59;;;9511:1375;12123:43;;12108:59;12123:43;453:981:130;12123:43:59;12107:80;12123:43;;:::i;:::-;453:981:130;;12108:59:59;:::i;12107:80::-;453:981:130;;;;;;;;;;;;;;;;:::i;11183:55:59:-;;;;;;;;;;;;;;;;:::i;:::-;;;453:981:130;;;;;;11183:55:59;;;;;;;;453:981:130;;;;;;;;;9546:3:59;10047:18;;;;;;;;;;;;;;838:5:50;10047:18:59;;453:981:130;10047:18:59;;:::i;:::-;453:981:130;838:5:50;;:::i;:::-;453:981:130;10084:14:59;;;;;:::i;:::-;453:981:130;10084:41:59;10080:796;;9546:3;;;;;;453:981:130;9516:13:59;;;;;;;;;;;10080:796;10232:14;;10374:38;10827:34;10232:14;10827;10232;;;10844:17;10232:14;;:::i;:::-;453:981:130;;10374:38:59;:::i;:::-;10354:58;;;;:::i;:::-;453:981:130;10827:14:59;:::i;:::-;453:981:130;10844:17:59;;:::i;:::-;453:981:130;10827:34:59;;:::i;:::-;10810:51;;;;:::i;:::-;453:981:130;10080:796:59;;;;;;;453:981:130;;;;;;;;;;9286:55:59;;;;;;;;;;;;;;;;;:::i;:::-;;;453:981:130;;;;;9286:55:59;;;;;;;;;;453:981:130;;;;;;;;;9134:57:59;;;;;;;;;;;;;;;;;:::i;:::-;;;453:981:130;;;;;9134:57:59;;;;;;;;;;453:981:130;;;;;;;;;8773:3:59;8809:36;:18;;;;:::i;:::-;453:981:130;8830:15:59;;;;:::i;:::-;453:981:130;8809:36:59;;:::i;:::-;-1:-1:-1;;453:981:130;;;;;;;8792:57:59;453:981:130;8792:57:59;;;;;:::i;:::-;453:981:130;;8743:13:59;;453:981:130;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;3468:30:59;453:981:130;;;;;3468:30:59;:::i;:::-;3513:13;453:981:130;3549:3:59;453:981:130;;3528:19:59;;;;;3717:11;:50;:11;;;453:981:130;3717:11:59;;;:::i;:::-;453:981:130;3717:50:59;:::i;:::-;3702:65;;;;:::i;:::-;453:981:130;;3513:13:59;;453:981:130;;;;;;;-1:-1:-1;;453:981:130;;;;;;;;;513:24;;;;;;453:981;513:24;;:::i;:::-;453:981;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;16842:24:59;;;;:::i;:::-;16930:13;453:981:130;16945:13:59;;;;;;17136:26;:43;:26;;;;;:::i;:::-;453:981:130;17136:43:59;:::i;:::-;17107:72;;;;:::i;:::-;453:981:130;;;;;;;17730:57:59;;;;;;;;453:981:130;;;;;;;:::i;:::-;;;;;;17730:57:59;;;;;;2983:4:81;;17730:57:59;;;;;;;453:981:130;17730:57:59;;;16925:104;453:981:130;;;18181:53:59;;;;;;;453:981:130;;;;;;;;;;:::i;:::-;;;;;;18181:53:59;2983:4:81;;18181:53:59;;;;;;;;;;;;;;;453:981:130;18181:53:59;;;16925:104;1744:19:50;18765:67:59;1744:19:50;;18499:30:59;1744:19:50;;;18478:81:59;1744:19:50;18478:52:59;1744:19:50;;:::i;:::-;2983:4:81;18313:14:59;2983:4:81;;18313:14:59;:::i;:::-;18499:30;:::i;:::-;453:981:130;18478:52:59;;:::i;:::-;18533:26;;;;:::i;18478:81::-;465:4:50;;5832:87;;;;;;1744:19;;:::i;:::-;18765:67:59;:::i;:::-;18921:26;:32;:26;;;;;:::i;:32::-;18892:61;;;;:::i;:::-;453:981:130;19124:55:59;453:981:130;;19124:55:59;;;;;;;;;;:::i;:::-;;2983:4:81;;19124:55:59;;;;;;;453:981:130;19124:55:59;;;16925:104;19282:24;20104:83;19282:24;;;20125:43;19282:24;19316:35;19282:24;453:981:130;19282:24:59;;:::i;:::-;19316:35;;;:::i;:::-;453:981:130;20125:43:59;;:::i;:::-;20104:83;;:::i;19124:55::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;453:981:130;;;;;19124:55:59;;;;453:981:130;;19124:55:59;;;;;;;;453:981:130;;;;;;;;;18181:53:59;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;453:981:130;;;;;;;;18181:53:59;453:981:130;;;;;18765:67:59;18181:53;;;;;;;;453:981:130;;;;;;;;;17730:57:59;;;;;;;;;;;;;;;;;:::i;:::-;;;453:981:130;;;;;17730:57:59;;;;;;;;;16960:3;16996:18;;;;:::i;:::-;453:981:130;-1:-1:-1;;453:981:130;;;;;;;16979:39:59;17017:1;16979:39;;;;;:::i;:::-;453:981:130;;16930:13:59;;453:981:130;;;;;;;;;;;;;;;;;-1:-1:-1;;453:981:130;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;13855:31:59;453:981:130;14330:66:59;453:981:130;;;:::i;:::-;13855:31:59;;;;;;;;;;;:::i;:::-;1744:19:50;14330:66:59;1744:19:50;;;;:::i;:::-;14283:14:59;2368:4:81;;14283:14:59;:::i;:::-;453:981:130;;14330:66:59;;;;;453:981:130;14330:66:59;;;;;:::i;:::-;;2368:4:81;;14330:66:59;;;;;;;;;453:981:130;14330:66:59;;;453:981:130;14500:29:59;15210:67;15380:37;14500:29;1744:19:50;15064:30:59;14500:29;;14836:57;14500:29;;14837:41;15427:34;14500:29;14849;453:981:130;14500:29:59;15572:14;14500:29;;;14487:42;14500:29;;:::i;:::-;453:981:130;14487:42:59;;:::i;:::-;14849:29;;;:::i;:::-;453:981:130;14837:41:59;;:::i;14836:57::-;15064:30;;:::i;15210:67::-;453:981:130;;;;15380:37:59;:::i;:::-;15427:34;;;:::i;:::-;453:981:130;15572:14:59;:::i;:::-;453:981:130;;;;;;;;;14330:66:59;453:981:130;;;;;;;:::i;14330:66:59:-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;453:981:130;;;;;;;;;;;15210:67:59;14330:66;;;;;-1:-1:-1;14330:66:59;;453:981:130;;;;;;-1:-1:-1;;453:981:130;;;;;;;;;;;;;;;;;;;;;;;;;;;4177:25:81;;;;;;453:981:130;;;;;;;;;;;4177:25:81;453:981:130;;;;;;-1:-1:-1;;453:981:130;;;;;;;;4077:4:81;453:981:130;;;;;;;;;22208:67:59;21515:30;453:981:130;;;;:::i;:::-;21515:30:59;;;;;;;;;;;:::i;:::-;1744:19:50;22208:67:59;1744:19:50;;;;:::i;:::-;21662:14:59;3605:4:81;;21662:14:59;:::i;:::-;453:981:130;;22208:67:59;;;;;453:981:130;22208:67:59;;;;;:::i;:::-;;3605:4:81;;22208:67:59;;;;;;;;;453:981:130;22208:67:59;;;453:981:130;22367:30:59;;453:981:130;23286:15:59;23114:37;22367:30;;23161:35;22973:38;22367:30;22859:32;22367:30;22648:63;22367:30;;22667;22367:43;:30;;;;;:::i;:43::-;22667:30;;;:::i;:::-;453:981:130;22648:63:59;;:::i;22859:32::-;22973:38;:::i;23161:35::-;453:981:130;23286:15:59;:::i;22208:67::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;453:981:130;;;;;;;;;;;22973:38:59;22208:67;;;;;-1:-1:-1;22208:67:59;;453:981:130;;;;;;-1:-1:-1;;453:981:130;;;;;;;;3840:16:81;453:981:130;;;;;;;;;1306:34;453:981;1358:21;453:981;;;:::i;:::-;1306:34;;;;;;;:::i;:::-;453:981;1358:21;;:::i;:::-;453:981;;;;;;8762:1:52;8745:18;;:82;8762:1;;;8778:16;8745:82;453:981:130;;;;;;;;;;;;;;;;;;;2004:6:50;;;;;2000:58;;2560:120;;8957:57:52;9032:34;2560:120:50;8762:1:52;453:981:130;2560:120:50;;;;453:981:130;8957:57:52;:::i;:::-;9032:34;;:::i;2000:58:50:-;2033:14;453:981:130;2033:14:50;453:981:130;2033:14:50;453:981:130;;;;;;;;;;;8957:57:52;9032:34;453:981:130;;;;;;8957:57:52;:::i;453:981:130:-;;;;;;;;;;8745:82:52;8762:1;8745:82;;453:981:130;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;;453:981:130;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;-1:-1:-1;;453:981:130;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;453:981:130;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;;453:981:130;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;;;;;;-1:-1:-1;453:981:130;;;;;;;;;;624:394;;453:981;;;;;;795:19;;783:31;;795:19;;453:981;;;:::i;:::-;465:4:50;4713:13:52;453:981:130;4708:152:52;795:19:130;;;4708:152:52;4874:14;;;;;;4870:67;;830:71:130;:::o;4870:67:52:-;4911:15;453:981:130;4911:15:52;;453:981:130;4911:15:52;4758:3;453:981:130;;4728:28:52;;;;;4807:11;465:4:50;838:5;4807:11:52;;:41;:11;;;;;:::i;:::-;453:981:130;4827:20:52;;;;:::i;:::-;453:981:130;4807:41:52;;:::i;:::-;838:5:50;;:::i;:::-;453:981:130;4758:3:52;453:981:130;4713:13:52;;;4728:28;;;779:233:130;453:981;;;:::i;:::-;465:4:50;6422:13:52;453:981:130;6417:148:52;795:19:130;;;6579:14:52;;;;;;6575:67;;932:69:130;:::o;6467:3:52:-;453:981:130;;6437:28:52;;;;;6514:11;6498:56;6514:11;;:39;:11;;;;;:::i;:::-;453:981:130;6532:20:52;;;;:::i;:::-;453:981:130;6514:39:52;;:::i;6498:56::-;6467:3;453:981:130;6422:13:52;;;453:981:130;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;:::o;:::-;;;;;;;;;;:::o;:::-;;638:5:50;453:981:130;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::o;:::-;;;;;;;;;;;;;;;17017:1:59;453:981:130;;;;;;;;;:::i;:::-;;;;:::o;4760:637:50:-;;465:4;;4997:8;;;465:4;;5021:8;;;:::o;4993:398::-;453:981:130;5050:8:50;;453:981:130;;5081:11:50;;;;;;:::i;:::-;5074:18;:::o;5046:345::-;453:981:130;5113:9:50;;453:981:130;;5155:11:50;;;;5187:21;5155:11;;:::i;:::-;5187:21;;:::i;5109:282::-;5253:20;;;;:::i;:::-;1068:5;453:981:130;1068:5:50;;;:::i;:::-;1186:122;-1:-1:-1;;1186:122:50;;;;;;;;453:981:130;;;;;;;;5366:14:50;;;:::i;887:427::-;;1068:5;887:427;1068:5;:::i;:::-;1186:122;;-1:-1:-1;;1186:122:50;;;;;;;;887:427;:::o;24291:315:59:-;;24430:31;453:981:130;24291:315:59;24430:31;453:981:130;;24430:31:59;;;;453:981:130;24430:31:59;;453:981:130;24430:31:59;;;;;;;;;;;24291:315;24475:34;;;;24471:129;;24291:315;;:::o;24471:129::-;24532:57;24430:31;24532:57;24430:31;453:981:130;;;;24430:31:59;24532:57;24430:31;;;;;;;;;;;;;;;;;;:::i;:::-;;;453:981:130;;;;;24430:31:59;;;;;;;-1:-1:-1;24430:31:59;;;453:981:130;;;24430:31:59;453:981:130;;;;;1822:864:50;;2004:6;;2000:58;;465:4;453:981:130;;;;;;;;;;;;;;;2560:120:50;;-1:-1:-1;;2560:120:50;;;;;;;;1822:864;:::o;2000:58::-;2033:14;2009:1;2033:14;;2009:1;2033:14;1822:864;2004:6;;2000:58;;2560:120;2153:5;;;;:::i;:::-;2560:120;-1:-1:-1;;2560:120:50;;;;;;;;1822:864;:::o;23639:315:59:-;;23778:31;453:981:130;23639:315:59;23778:31;453:981:130;;23778:31:59;;;;453:981:130;23778:31:59;;453:981:130;23778:31:59;;;;;;;;;;;23639:315;23823:34;;;;23819:129;;23639:315;;:::o;23819:129::-;23880:57;23778:31;23880:57;23778:31;453:981:130;;;;23778:31:59;23880:57;23778:31;;;;;;;;;;;;;;;;;;:::i;:::-;;;453:981:130;;;;;23778:31:59;;;;;;;-1:-1:-1;23778:31:59;;3736:794:50;465:4;;3975:8;;;465:4;;3999:8;;;;:::o;3971:553::-;4028:8;;453:981:130;4028:8:50;;453:981:130;;838:5:50;;;;;;:::i;:::-;453:981:130;4052:20:50;:::o;4024:500::-;453:981:130;4093:9:50;;453:981:130;;838:5:50;;;;;;:::i;:::-;453:981:130;838:5:50;;:::i;4089:435::-;4237:20;;;;;:::i;:::-;1068:5;;;:::i;:::-;453:981:130;-1:-1:-1;;1186:122:50;;;;;;;;;;453:981:130;;;;;;;;;4347:14:50;;;;;4381:8;;;453:981:130;4381:8:50;:::o;4343:171::-;453:981:130;;4460:21:50;:::o;2648:13:51:-;;;;;;;;:::o;:::-;;;;;;;:::o;4496:2300::-;;4577:6;;4573:131;;4718:6;;4714:45;;453:981:130;1564:4:51;453:981:130;5129:68:51;;453:981:130;5591:24:51;;;5587:83;;5774:28;2707:26;5774:28;:60;;;4496:2300;5770:720;;;1564:4;;1789;;21319:38;;2648:13;;2593;;;;2707:26;;2648:13;;21319:38;:::i;:::-;2648:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22285:2;2648:13;;;22203:2;2648:13;;;22121:2;2648:13;;;22040:1;2648:13;;;21959:1;2648:13;;;21878:1;2648:13;;;21797:1;2648:13;;2593;;;;;;;2648;;;;;;;;;;;;;2593;1564:4;5770:720;;2648:13;2400:6;6615:36;;;;:76;;;5770:720;6613:79;6609:137;;6771:17;7080:25;;;;:54;;;5770:720;7078:57;7074:112;;453:981:130;7316:5:51;453:981:130;7316:5:51;;7312:417;;5770:720;-1:-1:-1;9497:3:51;;2789:21;9082:7;;2789:21;;2707:26;;1754:4;9134:12;2845:56;9078:252;;2648:13;9723:23;9785:7;3117:22;9785:7;;;9781:104;;9078:252;3246:22;9902:7;;;9898:104;;9078:252;3368:21;10019:7;;;10015:104;;9078:252;3486:21;10136:7;;;10132:104;;9078:252;3602:21;10253:7;;;10249:104;;9078:252;10370:7;;;;10366:104;;9078:252;3832:20;10487:7;;;10483:104;;9078:252;3947:20;10604:7;;;10600:104;;9078:252;11567:1;2648:13;;;;;;11645:1;2648:13;;;;;;11723:1;2648:13;;;;;;;11801:1;2648:13;;;;;;11879:1;2648:13;;;;;;11957:1;2648:13;;;;;;;12035:1;2648:13;;;;;;;12113:1;2648:13;;;;;;;12191:2;2648:13;;;;;;;12270:2;2648:13;;;;;;;12349:2;2648:13;;;;;;2593;;;;;;;;;;;;;2648;;;;13075:54;;;;;13094:26;;;:::i;10600:104::-;4003:21;2707:26;;;;2648:13;;;10600:104;;;10483;3888:21;2707:26;;;;2648:13;;;10483:104;;;10366;3773:21;2707:26;;;;2648:13;;;10366:104;;;10249;3658:21;2707:26;;;;2648:13;;;10249:104;;;10132;3542:22;2707:26;;;;2648:13;;;10132:104;;;10015;3424:24;2707:26;;;;2648:13;;;10015:104;;;9898;3303:27;2707:26;;;;2648:13;;;9898:104;;;9781;3174:34;;-1:-1:-1;2707:26:51;;9781:104;;9078:252;2953:20;9171:7;;2953:20;;2707:26;;1754:4;9223:12;3008:28;9167:163;9078:252;;9167:163;1754:4;9274:11;9284:1;9167:163;9078:252;;7312:417;7714:4;;-1:-1:-1;453:981:130;4181:19:51;;-1:-1:-1;9497:3:51;7312:417;;7074:112;7158:17;453:981:130;7158:17:51;;453:981:130;7158:17:51;7080:54;7109:25;2349:6;7109:25;;;7080:54;;6609:137;6715:20;453:981:130;6715:20:51;;453:981:130;6715:20:51;6615:76;6655:36;2349:6;6655:36;;;6615:76;;5770:720;6451:13;1564:4;6451:13;453:981:130;14954:10:51;;;;14950:381;;5770:720;16656:14;17116:3;16656:14;453:981:130;2648:13:51;16708:16;;;16704:126;;5770:720;2648:13;16848:16;;;16844:126;;5770:720;2648:13;;;;;;;3174:34;;17276:7;;;;17272:94;;5770:720;3303:27;;;17384:7;;;;17380:94;;5770:720;3424:24;;17492:7;;;;17488:94;;5770:720;3542:22;;17600:7;;;;17596:94;;5770:720;3658:21;;17708:7;;;;17704:94;;5770:720;3773:21;;17816:7;;;;17812:94;;5770:720;3888:21;;17924:7;;;;17920:94;;5770:720;4003:21;;18032:7;;;;18028:94;;5770:720;4120:21;;18140:8;;;;18136:97;;5770:720;4237:21;;18251:8;;;;18247:97;;5770:720;1754:4;18891:38;1754:4;2593:13;;2707:26;2593:13;;;2707:26;;2648:13;18891:38;:::i;:::-;2648:13;;;;;;;;;;;;;;;;;;19369:1;19450;19531;19612;19693:2;2648:13;;;;;;;;;;;;;;;;;;;;;;;;2593;;;;;2648;;2593;2648;20303:35;;;;;453:981:130;4181:19:51;20303:35;2648:13;5770:720;;20303:35;;;18247:97;1754:4;4181:19;2648:13;;;2593;;18247:97;;;;18136;1754:4;4063:20;2648:13;;;2593;;18136:97;;;;18028:94;1754:4;3947:20;2648:13;;;2593;;18028:94;;;;17920;1754:4;3832:20;2648:13;;;2593;;17920:94;;;;17812;1754:4;2648:13;;;;2593;;17812:94;;;;17704;1754:4;3602:21;2648:13;;;2593;;17704:94;;;;17596;1754:4;3486:21;2648:13;;;2593;;17596:94;;;;17488;1754:4;3368:21;2648:13;;;2593;;17488:94;;;;17380;1754:4;3246:22;2648:13;;;2593;;17380:94;;;;17272;3117:22;2648:13;;;;;2593;;17272:94;;;;;16844:126;2648:13;3008:28;2953:20;2648:13;;2593;;16844:126;;16704;2648:13;2845:56;2648:13;;2789:21;16704:126;;14950:381;15248:21;;;;;;:::i;:::-;15316:4;;17116:3;14950:381;;5774:60;5806:28;2593:13;5806:28;;5774:60;;5587:83;5638:21;453:981:130;5638:21:51;;453:981:130;5638:21:51;5129:68;5169:17;453:981:130;5169:17:51;;453:981:130;5169:17:51;4714:45;4740:8;;453:981:130;4740:8:51;:::o;4573:131::-;4671:22;;1564:4;4671:22;:::o"},"methodIdentifiers":{"computeAddLiquiditySingleTokenExactOut(uint256[],uint256,uint256,uint256,uint256)":"85d5261a","computeAddLiquidityUnbalanced(uint256[],uint256[],uint256,uint256)":"d9c7cc7a","computeBalance(uint256[],uint256,uint256)":"16a0b3e0","computeInvariant(uint256[],uint8)":"984de9e8","computeProportionalAmountsIn(uint256[],uint256,uint256)":"c548e4d8","computeProportionalAmountsOut(uint256[],uint256,uint256)":"da317980","computeRemoveLiquiditySingleTokenExactIn(uint256[],uint256,uint256,uint256,uint256)":"3ab05915","computeRemoveLiquiditySingleTokenExactOut(uint256[],uint256,uint256,uint256,uint256)":"9a87ffbf","getMaximumInvariantRatio()":"273c1adf","getMaximumSwapFeePercentage()":"654cf15d","getMinimumInvariantRatio()":"b677fa56","getMinimumSwapFeePercentage()":"ce20ece7","onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))":"72c98186","weights(uint256)":"b5f163ff"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_weights\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BaseOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExponentOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExponent\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"invariantRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxInvariantRatio\",\"type\":\"uint256\"}],\"name\":\"InvariantRatioAboveMax\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"invariantRatio\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minInvariantRatio\",\"type\":\"uint256\"}],\"name\":\"InvariantRatioBelowMin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProductOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroInvariant\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"currentBalances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"tokenInIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeAddLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountInWithFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"currentBalances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"exactAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeAddLiquidityUnbalanced\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"tokenInIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"invariantRatio\",\"type\":\"uint256\"}],\"name\":\"computeBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"enum Rounding\",\"name\":\"rounding\",\"type\":\"uint8\"}],\"name\":\"computeInvariant\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptTotalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountOut\",\"type\":\"uint256\"}],\"name\":\"computeProportionalAmountsIn\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"bptTotalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"}],\"name\":\"computeProportionalAmountsOut\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"currentBalances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"tokenOutIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactBptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeRemoveLiquiditySingleTokenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"amountOutWithFee\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"currentBalances\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"tokenOutIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exactAmountOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"swapFeePercentage\",\"type\":\"uint256\"}],\"name\":\"computeRemoveLiquiditySingleTokenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"bptAmountIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"swapFeeAmounts\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"onSwap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"weights\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"InvariantRatioAboveMax(uint256,uint256)\":[{\"details\":\"This value is determined by each pool type, and depends on the specific math used to compute the price curve.\",\"params\":{\"invariantRatio\":\"The ratio of the new invariant (after an operation) to the old\",\"maxInvariantRatio\":\"The maximum allowed invariant ratio\"}}],\"InvariantRatioBelowMin(uint256,uint256)\":[{\"details\":\"This value is determined by each pool type, and depends on the specific math used to compute the price curve.\",\"params\":{\"invariantRatio\":\"The ratio of the new invariant (after an operation) to the old\",\"minInvariantRatio\":\"The minimum allowed invariant ratio\"}}],\"ZeroInvariant()\":[{\"details\":\"Most commonly, this happens when a token balance is zero.\"}]},\"kind\":\"dev\",\"methods\":{\"getMaximumInvariantRatio()\":{\"returns\":{\"_0\":\"The maximum invariant ratio for a pool during unbalanced add liquidity\"}},\"getMaximumSwapFeePercentage()\":{\"returns\":{\"_0\":\"The maximum swap fee percentage for a pool\"}},\"getMinimumInvariantRatio()\":{\"returns\":{\"_0\":\"The minimum invariant ratio for a pool during unbalanced remove liquidity\"}},\"getMinimumSwapFeePercentage()\":{\"returns\":{\"_0\":\"The minimum swap fee percentage for a pool\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"BaseOutOfBounds()\":[{\"notice\":\"This error is thrown when a base is not within an acceptable range.\"}],\"ExponentOutOfBounds()\":[{\"notice\":\"This error is thrown when a exponent is not within an acceptable range.\"}],\"InvalidExponent()\":[{\"notice\":\"This error is thrown when an exponent used in the exp function is not within an acceptable range.\"}],\"InvariantRatioAboveMax(uint256,uint256)\":[{\"notice\":\"An add liquidity operation increased the invariant above the limit.\"}],\"InvariantRatioBelowMin(uint256,uint256)\":[{\"notice\":\"A remove liquidity operation decreased the invariant below the limit.\"}],\"ProductOutOfBounds()\":[{\"notice\":\"This error is thrown when the exponent * ln(base) is not within an acceptable range.\"}],\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}],\"ZeroInvariant()\":[{\"notice\":\"Error thrown when the calculated invariant is zero, indicating an issue with the invariant calculation.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/WeightedBasePoolMathMock.sol\":\"WeightedBasePoolMathMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/WeightedMath.sol\":{\"keccak256\":\"0x4d9faedc605adaa52594ae9949374d87bce13107f887edc593a0b9b7a5c91042\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://648e918881e78d62505f049d2f88335e679aa01b82d403ac80b854d9d85efcc2\",\"dweb:/ipfs/QmXA36vdUX611mTH3V9qNGM3uF591TB3xaADqWG41NFmWP\"]},\"@balancer-labs/v3-vault/contracts/BasePoolMath.sol\":{\"keccak256\":\"0x28078c6fa4d55418c25505d4683642cb51fe55b2155ef7418db6c70631a30d6a\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://864b91fdc2b69725bcc07f06d9adebe87117561582fa58f1e4410d8928cd205c\",\"dweb:/ipfs/QmWCDsbTxtmEMLhorqfGF1LDMHMqqVnV9sk9mUTPR7eog8\"]},\"@balancer-labs/v3-vault/contracts/test/BasePoolMathMock.sol\":{\"keccak256\":\"0x8d03867c2d8a32b4d3407df0b8e0bc8997eb838c6bc8339e5bbd5fd41cf82910\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://379bc567783a42259380747ad96e284f7fa9264a75bbe6dc1a277959bc9ff0ae\",\"dweb:/ipfs/QmdVAwsacp2tbXGtGdTSnd6FTHKvUYWWdpdvSnyD4zJqnq\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"contracts/test/WeightedBasePoolMathMock.sol\":{\"keccak256\":\"0x19a078ead8f1c17061bc1f5e73d71da6b5bde566505f5badeb947bec44c2e94f\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5016db44ae4209e87f246d8bcfd58a1599a4a859364b6c7e8bbbd550ed15bbb4\",\"dweb:/ipfs/QmSrp6qxsxo7pRJo27arvqyqJ8QvMKriceUQcDbsr9pr4V\"]}},\"version\":1}"}},"contracts/test/WeightedMathMock.sol":{"WeightedMathMock":{"abi":[{"inputs":[],"name":"BaseOutOfBounds","type":"error"},{"inputs":[],"name":"ExponentOutOfBounds","type":"error"},{"inputs":[],"name":"InvalidExponent","type":"error"},{"inputs":[],"name":"MaxInRatio","type":"error"},{"inputs":[],"name":"MaxOutRatio","type":"error"},{"inputs":[],"name":"ProductOutOfBounds","type":"error"},{"inputs":[],"name":"ZeroDivision","type":"error"},{"inputs":[],"name":"ZeroInvariant","type":"error"},{"inputs":[{"internalType":"uint256","name":"balanceIn","type":"uint256"},{"internalType":"uint256","name":"weightIn","type":"uint256"},{"internalType":"uint256","name":"balanceOut","type":"uint256"},{"internalType":"uint256","name":"weightOut","type":"uint256"},{"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"computeInGivenExactOut","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"normalizedWeights","type":"uint256[]"},{"internalType":"uint256[]","name":"balances","type":"uint256[]"},{"internalType":"enum Rounding","name":"rounding","type":"uint8"}],"name":"computeInvariant","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"balanceIn","type":"uint256"},{"internalType":"uint256","name":"weightIn","type":"uint256"},{"internalType":"uint256","name":"balanceOut","type":"uint256"},{"internalType":"uint256","name":"weightOut","type":"uint256"},{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"computeOutGivenExactIn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60808060405234601557611102908161001a8239f35b5f80fdfe6080604052600480361015610012575f80fd5b5f3560e01c8063388f6bd0146101ca5780633c42a2d6146100c55763f33d14101461003b575f80fd5b346100c15760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c15767ffffffffffffffff81358181116100c15761008990369084016102e7565b916024359182116100c1576100a0913691016102e7565b9060443560028110156100c1576020926100b9926103ab565b604051908152f35b5f80fd5b50346100c1576100d4366102a7565b93670de0b6b3a7640000959391929594856100ee83610557565b0481116101a3579061010361010992826104dc565b906106eb565b928482029180830486149015171561017757821561014b5750610142926020959261013592049061059e565b838181039110029061058b565b04604051908152f35b6012907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b847f340a4533000000000000000000000000000000000000000000000000000000005f525ffd5b50346100c1576101d9366102a7565b670de0b6b3a76400006101ee84939594610557565b0481116102805781039080821161025457916102116102179261021d95946106eb565b926106eb565b9061059e565b917ffffffffffffffffffffffffffffffffffffffffffffffffff21f494c589c000083019283116101775760206100b9848461062c565b6011867f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b857f64590b9f000000000000000000000000000000000000000000000000000000005f525ffd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60a09101126100c1576004359060243590604435906064359060843590565b9080601f830112156100c15781359060209167ffffffffffffffff9384821161037e578160051b91604051957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f8501168701908782109082111761037e5760405285526020808601928201019283116100c157602001905b82821061036f575050505090565b81358152908301908301610361565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b909160028110156104af576001918291820361045457670de0b6b3a7640000935f935b610408575b5050505080156103e05790565b7f26543689000000000000000000000000000000000000000000000000000000005f5260045ffd5b815184101561044f5782670de0b6b3a7640000610446869761044061042e859987610516565b516104398b89610516565b519061064e565b9061058b565b049501936103ce565b6103d3565b670de0b6b3a7640000935f935b610472575050505080156103e05790565b815184101561044f57826104a785966104a161048f849886610516565b5161049a8a88610516565b519061059e565b9061062c565b950193610461565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b919082018092116104e957565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b805182101561052a5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b90670429d069189e0000918281029281840414901517156104e957565b90612710918281029281840414901517156104e957565b818102929181159184041417156104e957565b90670de0b6b3a7640000908181036105b557505090565b671bc16d674ec8000081036105d3575050806105d09161062c565b90565b673782dace9d90000081036105f75750506105f1816105d09261062c565b8061062c565b6106019192610795565b90600161060d83610574565b915f198301040190151502600181018091116104e9576105d0916104dc565b906106369161058b565b6001670de0b6b3a76400005f19830104019015150290565b670de0b6b3a7640000918083036106655750905090565b8290671bc16d674ec800008103610686575050806106829161058b565b0490565b673782dace9d90000081036106aa57506106a3826106829361058b565b048061058b565b90506106b591610795565b6106be81610574565b60015f199384830104019015150290600182018083116104e9578110156106e6575050505f90565b030190565b90801561071c57670de0b6b3a7640000918281029281840414901517156104e9576001905f19830104019015150290565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b801561075e576ec097ce7bc90715b34b9f10000000000590565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b811561075e570590565b9080156110be5781156110b8578160ff1c61109057770bce5086492111aea88f4bb1ca6bcf584181ea8059f765328110156110685781670c7d713b49da00001280611057575b15610cf457670de0b6b3a7640000916ec097ce7bc90715b34b9f10000000009061082e908402828101907fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f00000000001830261078b565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b918082818507020592050201670de0b6b3a7640000905b057ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc00008181131580610ce1575b15610cb957819082121580610ca6575b15610c7e575f915f8112610c6f575b506064906806f05b59d3b20000008112610c0c577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e0000000168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac62000000811215610bd3575b6856bc75e2d631000000811215610b99575b682b5e3af16b18800000811215610b61575b6815af1d78b58c400000811215610b29575b680ad78ebc5ac6200000811215610af2575b82811215610abb575b6802b5e3af16b1880000811215610a84575b68015af1d78b58c40000811215610a4d575b60028382800205056003848383020505600485848302050560058685830205056006878683020505876007818884020505916008828985020505936009838a8702050595600a848b8902050597600b858c8b02050599600c868d8d0205059b01010101010101010101010102050205905f146105d0576105d090610744565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000849201920205906109ce565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000849201920205906109bc565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000849201920205906109aa565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000849201920205906109a1565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c000008492019202059061098f565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e78000008492019202059061097d565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf0000008492019202059061096b565b6e01855144814a7ff805980ff008400091507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000001610959565b6803782dace9d90000008112610c5c577ffffffffffffffffffffffffffffffffffffffffffffffffc87d25316270000000168056bc75e2d63100000826b1425982cf597cd205cef738092610944565b68056bc75e2d6310000082600192610944565b600192505f03905060646108e8565b7fd4794efd000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156108d9565b7fa2f9f7e3000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156108c9565b81670de0b6b3a7640000925f91848112611041575b506064905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000821215611016575b73011798004d755d3c8bc8e03204cf44619e000000821215610ff5575b820290808302906e01855144814a7ff805980ff00840009081831215610fd2575b50506b02df0ab5a80a22c61ab5a70080821215610fb2575b50693f1fce3da636ea5cf85080821215610f92575b50690127fa27722cc06cc5e280821215610f72575b5068280e60114edb805d0380821215610f52575b50680ebc5fb4174612111080821215610f3b575b506808f00f760a4b2db55d80821215610f1b575b506806f5f177578893793780821215610efb575b506806248f33704b28660380821215610edc575b506805c548670b9510e7ac80821215610ebd575b50610e6a68056bc75e2d6310000091827ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf0000081830192010261078b565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b0105905f14610eb8575f035b0261089d565b610eb2565b68056bc75e2d631000006756bc75e2d63100009202059101905f610e2e565b68056bc75e2d6310000067ad78ebc5ac6200009202059101905f610e1a565b68056bc75e2d6310000068015af1d78b58c400009202059101905f610e06565b68056bc75e2d631000006802b5e3af16b18800009202059101905f610df2565b68056bc75e2d63100000809202059101905f610dde565b68056bc75e2d63100000680ad78ebc5ac62000009202059101905f610dca565b68056bc75e2d631000006815af1d78b58c4000009202059101905f610db6565b68056bc75e2d63100000682b5e3af16b188000009202059101905f610da1565b68056bc75e2d631000006856bc75e2d6310000009202059101905f610d8c565b68ad78ebc5ac62000000925069021e19e0c9bab240000002059101905f80610d74565b906b1425982cf597cd205cef73806803782dace9d900000091059101610d53565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b2000000610d36565b905061104d9150610744565b6001906064610d09565b50670f43fc2c04ee000082126107db565b7fd8317311000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f022701e0000000000000000000000000000000000000000000000000000000005f5260045ffd5b50505f90565b5050670de0b6b3a76400009056fea2646970667358221220fe0c862df1322807f09de13a50cc88f15e7751c841ce0e4dac30df0f975af23064736f6c634300081b0033","opcodes":"PUSH1 0x80 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH1 0x15 JUMPI PUSH2 0x1102 SWAP1 DUP2 PUSH2 0x1A DUP3 CODECOPY RETURN JUMPDEST PUSH0 DUP1 REVERT INVALID PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x388F6BD0 EQ PUSH2 0x1CA JUMPI DUP1 PUSH4 0x3C42A2D6 EQ PUSH2 0xC5 JUMPI PUSH4 0xF33D1410 EQ PUSH2 0x3B JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xC1 JUMPI PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xC1 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 DUP2 GT PUSH2 0xC1 JUMPI PUSH2 0x89 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x2E7 JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0xC1 JUMPI PUSH2 0xA0 SWAP2 CALLDATASIZE SWAP2 ADD PUSH2 0x2E7 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0xC1 JUMPI PUSH1 0x20 SWAP3 PUSH2 0xB9 SWAP3 PUSH2 0x3AB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xC1 JUMPI PUSH2 0xD4 CALLDATASIZE PUSH2 0x2A7 JUMP JUMPDEST SWAP4 PUSH8 0xDE0B6B3A7640000 SWAP6 SWAP4 SWAP2 SWAP3 SWAP6 SWAP5 DUP6 PUSH2 0xEE DUP4 PUSH2 0x557 JUMP JUMPDEST DIV DUP2 GT PUSH2 0x1A3 JUMPI SWAP1 PUSH2 0x103 PUSH2 0x109 SWAP3 DUP3 PUSH2 0x4DC JUMP JUMPDEST SWAP1 PUSH2 0x6EB JUMP JUMPDEST SWAP3 DUP5 DUP3 MUL SWAP2 DUP1 DUP4 DIV DUP7 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x177 JUMPI DUP3 ISZERO PUSH2 0x14B JUMPI POP PUSH2 0x142 SWAP3 PUSH1 0x20 SWAP6 SWAP3 PUSH2 0x135 SWAP3 DIV SWAP1 PUSH2 0x59E JUMP JUMPDEST DUP4 DUP2 DUP2 SUB SWAP2 LT MUL SWAP1 PUSH2 0x58B JUMP JUMPDEST DIV PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x12 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP5 PUSH32 0x340A453300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0xC1 JUMPI PUSH2 0x1D9 CALLDATASIZE PUSH2 0x2A7 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 PUSH2 0x1EE DUP5 SWAP4 SWAP6 SWAP5 PUSH2 0x557 JUMP JUMPDEST DIV DUP2 GT PUSH2 0x280 JUMPI DUP2 SUB SWAP1 DUP1 DUP3 GT PUSH2 0x254 JUMPI SWAP2 PUSH2 0x211 PUSH2 0x217 SWAP3 PUSH2 0x21D SWAP6 SWAP5 PUSH2 0x6EB JUMP JUMPDEST SWAP3 PUSH2 0x6EB JUMP JUMPDEST SWAP1 PUSH2 0x59E JUMP JUMPDEST SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21F494C589C0000 DUP4 ADD SWAP3 DUP4 GT PUSH2 0x177 JUMPI PUSH1 0x20 PUSH2 0xB9 DUP5 DUP5 PUSH2 0x62C JUMP JUMPDEST PUSH1 0x11 DUP7 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP6 PUSH32 0x64590B9F00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC PUSH1 0xA0 SWAP2 ADD SLT PUSH2 0xC1 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x64 CALLDATALOAD SWAP1 PUSH1 0x84 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0xC1 JUMPI DUP2 CALLDATALOAD SWAP1 PUSH1 0x20 SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP3 GT PUSH2 0x37E JUMPI DUP2 PUSH1 0x5 SHL SWAP2 PUSH1 0x40 MLOAD SWAP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x3F DUP6 ADD AND DUP8 ADD SWAP1 DUP8 DUP3 LT SWAP1 DUP3 GT OR PUSH2 0x37E JUMPI PUSH1 0x40 MSTORE DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xC1 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x36F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x361 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x4AF JUMPI PUSH1 0x1 SWAP2 DUP3 SWAP2 DUP3 SUB PUSH2 0x454 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH0 SWAP4 JUMPDEST PUSH2 0x408 JUMPI JUMPDEST POP POP POP POP DUP1 ISZERO PUSH2 0x3E0 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x2654368900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD DUP5 LT ISZERO PUSH2 0x44F JUMPI DUP3 PUSH8 0xDE0B6B3A7640000 PUSH2 0x446 DUP7 SWAP8 PUSH2 0x440 PUSH2 0x42E DUP6 SWAP10 DUP8 PUSH2 0x516 JUMP JUMPDEST MLOAD PUSH2 0x439 DUP12 DUP10 PUSH2 0x516 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x64E JUMP JUMPDEST SWAP1 PUSH2 0x58B JUMP JUMPDEST DIV SWAP6 ADD SWAP4 PUSH2 0x3CE JUMP JUMPDEST PUSH2 0x3D3 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH0 SWAP4 JUMPDEST PUSH2 0x472 JUMPI POP POP POP POP DUP1 ISZERO PUSH2 0x3E0 JUMPI SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP5 LT ISZERO PUSH2 0x44F JUMPI DUP3 PUSH2 0x4A7 DUP6 SWAP7 PUSH2 0x4A1 PUSH2 0x48F DUP5 SWAP9 DUP7 PUSH2 0x516 JUMP JUMPDEST MLOAD PUSH2 0x49A DUP11 DUP9 PUSH2 0x516 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x59E JUMP JUMPDEST SWAP1 PUSH2 0x62C JUMP JUMPDEST SWAP6 ADD SWAP4 PUSH2 0x461 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x4E9 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x52A JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH8 0x429D069189E0000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4E9 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x2710 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4E9 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x4E9 JUMPI JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 SUB PUSH2 0x5B5 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x5D3 JUMPI POP POP DUP1 PUSH2 0x5D0 SWAP2 PUSH2 0x62C JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x5F7 JUMPI POP POP PUSH2 0x5F1 DUP2 PUSH2 0x5D0 SWAP3 PUSH2 0x62C JUMP JUMPDEST DUP1 PUSH2 0x62C JUMP JUMPDEST PUSH2 0x601 SWAP2 SWAP3 PUSH2 0x795 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH2 0x60D DUP4 PUSH2 0x574 JUMP JUMPDEST SWAP2 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH1 0x1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x4E9 JUMPI PUSH2 0x5D0 SWAP2 PUSH2 0x4DC JUMP JUMPDEST SWAP1 PUSH2 0x636 SWAP2 PUSH2 0x58B JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 DUP1 DUP4 SUB PUSH2 0x665 JUMPI POP SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 SWAP1 PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x686 JUMPI POP POP DUP1 PUSH2 0x682 SWAP2 PUSH2 0x58B JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x6AA JUMPI POP PUSH2 0x6A3 DUP3 PUSH2 0x682 SWAP4 PUSH2 0x58B JUMP JUMPDEST DIV DUP1 PUSH2 0x58B JUMP JUMPDEST SWAP1 POP PUSH2 0x6B5 SWAP2 PUSH2 0x795 JUMP JUMPDEST PUSH2 0x6BE DUP2 PUSH2 0x574 JUMP JUMPDEST PUSH1 0x1 PUSH0 NOT SWAP4 DUP5 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 PUSH1 0x1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x4E9 JUMPI DUP2 LT ISZERO PUSH2 0x6E6 JUMPI POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SUB ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x71C JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4E9 JUMPI PUSH1 0x1 SWAP1 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x75E JUMPI PUSH15 0xC097CE7BC90715B34B9F1000000000 SDIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 ISZERO PUSH2 0x75E JUMPI SDIV SWAP1 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x10BE JUMPI DUP2 ISZERO PUSH2 0x10B8 JUMPI DUP2 PUSH1 0xFF SHR PUSH2 0x1090 JUMPI PUSH24 0xBCE5086492111AEA88F4BB1CA6BCF584181EA8059F76532 DUP2 LT ISZERO PUSH2 0x1068 JUMPI DUP2 PUSH8 0xC7D713B49DA0000 SLT DUP1 PUSH2 0x1057 JUMPI JUMPDEST ISZERO PUSH2 0xCF4 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH15 0xC097CE7BC90715B34B9F1000000000 SWAP1 PUSH2 0x82E SWAP1 DUP5 MUL DUP3 DUP2 ADD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F68318436F8EA4CB460F000000000 ADD DUP4 MUL PUSH2 0x78B JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV DUP4 DUP6 DUP3 MUL SDIV SWAP2 DUP5 DUP7 DUP5 MUL SDIV SWAP4 DUP6 DUP8 DUP7 MUL SDIV SWAP6 DUP1 DUP9 DUP9 MUL SDIV SWAP8 DUP9 MUL SDIV PUSH1 0xF SWAP1 SDIV SWAP7 PUSH1 0xD SWAP1 SDIV SWAP6 PUSH1 0xB SWAP1 SDIV SWAP5 PUSH1 0x9 SWAP1 SDIV SWAP4 PUSH1 0x7 SWAP1 SDIV SWAP3 PUSH1 0x5 SWAP1 SDIV SWAP2 PUSH1 0x3 SWAP1 SDIV ADD ADD ADD ADD ADD ADD ADD PUSH1 0x1 SHL SWAP2 DUP1 DUP3 DUP2 DUP6 SMOD MUL SDIV SWAP3 SDIV MUL ADD PUSH8 0xDE0B6B3A7640000 SWAP1 JUMPDEST SDIV PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC702BD3A30FC0000 DUP2 DUP2 SGT ISZERO DUP1 PUSH2 0xCE1 JUMPI JUMPDEST ISZERO PUSH2 0xCB9 JUMPI DUP2 SWAP1 DUP3 SLT ISZERO DUP1 PUSH2 0xCA6 JUMPI JUMPDEST ISZERO PUSH2 0xC7E JUMPI PUSH0 SWAP2 PUSH0 DUP2 SLT PUSH2 0xC6F JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH9 0x6F05B59D3B2000000 DUP2 SLT PUSH2 0xC0C JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90FA4A62C4E000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP3 JUMPDEST MUL DUP2 SWAP1 PUSH9 0xAD78EBC5AC62000000 DUP2 SLT ISZERO PUSH2 0xBD3 JUMPI JUMPDEST PUSH9 0x56BC75E2D631000000 DUP2 SLT ISZERO PUSH2 0xB99 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B18800000 DUP2 SLT ISZERO PUSH2 0xB61 JUMPI JUMPDEST PUSH9 0x15AF1D78B58C400000 DUP2 SLT ISZERO PUSH2 0xB29 JUMPI JUMPDEST PUSH9 0xAD78EBC5AC6200000 DUP2 SLT ISZERO PUSH2 0xAF2 JUMPI JUMPDEST DUP3 DUP2 SLT ISZERO PUSH2 0xABB JUMPI JUMPDEST PUSH9 0x2B5E3AF16B1880000 DUP2 SLT ISZERO PUSH2 0xA84 JUMPI JUMPDEST PUSH9 0x15AF1D78B58C40000 DUP2 SLT ISZERO PUSH2 0xA4D JUMPI JUMPDEST PUSH1 0x2 DUP4 DUP3 DUP1 MUL SDIV SDIV PUSH1 0x3 DUP5 DUP4 DUP4 MUL SDIV SDIV PUSH1 0x4 DUP6 DUP5 DUP4 MUL SDIV SDIV PUSH1 0x5 DUP7 DUP6 DUP4 MUL SDIV SDIV PUSH1 0x6 DUP8 DUP7 DUP4 MUL SDIV SDIV DUP8 PUSH1 0x7 DUP2 DUP9 DUP5 MUL SDIV SDIV SWAP2 PUSH1 0x8 DUP3 DUP10 DUP6 MUL SDIV SDIV SWAP4 PUSH1 0x9 DUP4 DUP11 DUP8 MUL SDIV SDIV SWAP6 PUSH1 0xA DUP5 DUP12 DUP10 MUL SDIV SDIV SWAP8 PUSH1 0xB DUP6 DUP13 DUP12 MUL SDIV SDIV SWAP10 PUSH1 0xC DUP7 DUP14 DUP14 MUL SDIV SDIV SWAP12 ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD MUL SDIV MUL SDIV SWAP1 PUSH0 EQ PUSH2 0x5D0 JUMPI PUSH2 0x5D0 SWAP1 PUSH2 0x744 JUMP JUMPDEST PUSH9 0x6F5F1775788937937 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C0000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x9CE JUMP JUMPDEST PUSH9 0x8F00F760A4B2DB55D PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E780000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x9BC JUMP JUMPDEST PUSH9 0xEBC5FB41746121110 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x9AA JUMP JUMPDEST PUSH9 0x280E60114EDB805D03 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x9A1 JUMP JUMPDEST PUSH10 0x127FA27722CC06CC5E2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x98F JUMP JUMPDEST PUSH10 0x3F1FCE3DA636EA5CF850 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E7800000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x97D JUMP JUMPDEST PUSH12 0x2DF0AB5A80A22C61AB5A700 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF000000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x96B JUMP JUMPDEST PUSH15 0x1855144814A7FF805980FF0084000 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E000000 ADD PUSH2 0x959 JUMP JUMPDEST PUSH9 0x3782DACE9D9000000 DUP2 SLT PUSH2 0xC5C JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC87D2531627000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH12 0x1425982CF597CD205CEF7380 SWAP3 PUSH2 0x944 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP3 PUSH1 0x1 SWAP3 PUSH2 0x944 JUMP JUMPDEST PUSH1 0x1 SWAP3 POP PUSH0 SUB SWAP1 POP PUSH1 0x64 PUSH2 0x8E8 JUMP JUMPDEST PUSH32 0xD4794EFD00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x8D9 JUMP JUMPDEST PUSH32 0xA2F9F7E300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x8C9 JUMP JUMPDEST DUP2 PUSH8 0xDE0B6B3A7640000 SWAP3 PUSH0 SWAP2 DUP5 DUP2 SLT PUSH2 0x1041 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH0 PUSH31 0x1600EF3172E58D2E933EC884FDE10064C63B5372D805E203C0000000000000 DUP3 SLT ISZERO PUSH2 0x1016 JUMPI JUMPDEST PUSH20 0x11798004D755D3C8BC8E03204CF44619E000000 DUP3 SLT ISZERO PUSH2 0xFF5 JUMPI JUMPDEST DUP3 MUL SWAP1 DUP1 DUP4 MUL SWAP1 PUSH15 0x1855144814A7FF805980FF0084000 SWAP1 DUP2 DUP4 SLT ISZERO PUSH2 0xFD2 JUMPI JUMPDEST POP POP PUSH12 0x2DF0AB5A80A22C61AB5A700 DUP1 DUP3 SLT ISZERO PUSH2 0xFB2 JUMPI JUMPDEST POP PUSH10 0x3F1FCE3DA636EA5CF850 DUP1 DUP3 SLT ISZERO PUSH2 0xF92 JUMPI JUMPDEST POP PUSH10 0x127FA27722CC06CC5E2 DUP1 DUP3 SLT ISZERO PUSH2 0xF72 JUMPI JUMPDEST POP PUSH9 0x280E60114EDB805D03 DUP1 DUP3 SLT ISZERO PUSH2 0xF52 JUMPI JUMPDEST POP PUSH9 0xEBC5FB41746121110 DUP1 DUP3 SLT ISZERO PUSH2 0xF3B JUMPI JUMPDEST POP PUSH9 0x8F00F760A4B2DB55D DUP1 DUP3 SLT ISZERO PUSH2 0xF1B JUMPI JUMPDEST POP PUSH9 0x6F5F1775788937937 DUP1 DUP3 SLT ISZERO PUSH2 0xEFB JUMPI JUMPDEST POP PUSH9 0x6248F33704B286603 DUP1 DUP3 SLT ISZERO PUSH2 0xEDC JUMPI JUMPDEST POP PUSH9 0x5C548670B9510E7AC DUP1 DUP3 SLT ISZERO PUSH2 0xEBD JUMPI JUMPDEST POP PUSH2 0xE6A PUSH9 0x56BC75E2D63100000 SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP2 DUP4 ADD SWAP3 ADD MUL PUSH2 0x78B JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV SWAP2 PUSH1 0x3 PUSH1 0x5 PUSH1 0x7 PUSH1 0x9 PUSH1 0xB DUP9 DUP11 DUP10 MUL SDIV SWAP9 DUP1 DUP12 DUP12 MUL SDIV SWAP11 DUP12 MUL SDIV SDIV SWAP9 SDIV SWAP7 SDIV SWAP5 SDIV SWAP3 SDIV ADD ADD ADD ADD ADD PUSH1 0x1 SHL ADD SDIV SWAP1 PUSH0 EQ PUSH2 0xEB8 JUMPI PUSH0 SUB JUMPDEST MUL PUSH2 0x89D JUMP JUMPDEST PUSH2 0xEB2 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0x56BC75E2D6310000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0xE2E JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0xAD78EBC5AC620000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0xE1A JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C40000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0xE06 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B1880000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0xDF2 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP1 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0xDDE JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0xAD78EBC5AC6200000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0xDCA JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C400000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0xDB6 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B18800000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0xDA1 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x56BC75E2D631000000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0xD8C JUMP JUMPDEST PUSH9 0xAD78EBC5AC62000000 SWAP3 POP PUSH10 0x21E19E0C9BAB2400000 MUL SDIV SWAP2 ADD SWAP1 PUSH0 DUP1 PUSH2 0xD74 JUMP JUMPDEST SWAP1 PUSH12 0x1425982CF597CD205CEF7380 PUSH9 0x3782DACE9D9000000 SWAP2 SDIV SWAP2 ADD PUSH2 0xD53 JUMP JUMPDEST POP PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP1 SDIV PUSH9 0x6F05B59D3B2000000 PUSH2 0xD36 JUMP JUMPDEST SWAP1 POP PUSH2 0x104D SWAP2 POP PUSH2 0x744 JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x64 PUSH2 0xD09 JUMP JUMPDEST POP PUSH8 0xF43FC2C04EE0000 DUP3 SLT PUSH2 0x7DB JUMP JUMPDEST PUSH32 0xD831731100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x22701E000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 INVALID 0xC DUP7 0x2D CALL ORIGIN 0x28 SMOD CREATE SWAP14 0xE1 GASPRICE POP 0xCC DUP9 CALL MCOPY PUSH24 0x51C841CE0E4DAC30DF0F975AF23064736F6C634300081B00 CALLER ","sourceMap":"259:1097:131:-:0;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_array_uint256_dyn":{"entryPoint":743,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_uint256t_uint256t_uint256t_uint256t_uint256":{"entryPoint":679,"id":null,"parameterSlots":1,"returnSlots":5},"checked_add_uint256":{"entryPoint":1244,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256":{"entryPoint":1419,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256_7348":{"entryPoint":1367,"id":null,"parameterSlots":1,"returnSlots":1},"checked_mul_uint256_7370":{"entryPoint":1396,"id":null,"parameterSlots":1,"returnSlots":1},"fun_computeInvariant":{"entryPoint":939,"id":48141,"parameterSlots":3,"returnSlots":1},"fun_mulDivUp":{"entryPoint":1771,"id":8034,"parameterSlots":2,"returnSlots":1},"fun_mulUp":{"entryPoint":1580,"id":7970,"parameterSlots":2,"returnSlots":1},"fun_pow":{"entryPoint":1941,"id":8467,"parameterSlots":2,"returnSlots":1},"fun_powDown":{"entryPoint":1614,"id":8130,"parameterSlots":2,"returnSlots":1},"fun_powUp":{"entryPoint":1438,"id":8197,"parameterSlots":2,"returnSlots":1},"memory_array_index_access_uint256_dyn":{"entryPoint":1302,"id":null,"parameterSlots":2,"returnSlots":1},"wrapping_div_int256":{"entryPoint":1931,"id":null,"parameterSlots":2,"returnSlots":1},"wrapping_div_int256_7372":{"entryPoint":1860,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"6080604052600480361015610012575f80fd5b5f3560e01c8063388f6bd0146101ca5780633c42a2d6146100c55763f33d14101461003b575f80fd5b346100c15760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c15767ffffffffffffffff81358181116100c15761008990369084016102e7565b916024359182116100c1576100a0913691016102e7565b9060443560028110156100c1576020926100b9926103ab565b604051908152f35b5f80fd5b50346100c1576100d4366102a7565b93670de0b6b3a7640000959391929594856100ee83610557565b0481116101a3579061010361010992826104dc565b906106eb565b928482029180830486149015171561017757821561014b5750610142926020959261013592049061059e565b838181039110029061058b565b04604051908152f35b6012907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b6011907f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b847f340a4533000000000000000000000000000000000000000000000000000000005f525ffd5b50346100c1576101d9366102a7565b670de0b6b3a76400006101ee84939594610557565b0481116102805781039080821161025457916102116102179261021d95946106eb565b926106eb565b9061059e565b917ffffffffffffffffffffffffffffffffffffffffffffffffff21f494c589c000083019283116101775760206100b9848461062c565b6011867f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b857f64590b9f000000000000000000000000000000000000000000000000000000005f525ffd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60a09101126100c1576004359060243590604435906064359060843590565b9080601f830112156100c15781359060209167ffffffffffffffff9384821161037e578160051b91604051957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f8501168701908782109082111761037e5760405285526020808601928201019283116100c157602001905b82821061036f575050505090565b81358152908301908301610361565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b909160028110156104af576001918291820361045457670de0b6b3a7640000935f935b610408575b5050505080156103e05790565b7f26543689000000000000000000000000000000000000000000000000000000005f5260045ffd5b815184101561044f5782670de0b6b3a7640000610446869761044061042e859987610516565b516104398b89610516565b519061064e565b9061058b565b049501936103ce565b6103d3565b670de0b6b3a7640000935f935b610472575050505080156103e05790565b815184101561044f57826104a785966104a161048f849886610516565b5161049a8a88610516565b519061059e565b9061062c565b950193610461565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b919082018092116104e957565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b805182101561052a5760209160051b010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b90670429d069189e0000918281029281840414901517156104e957565b90612710918281029281840414901517156104e957565b818102929181159184041417156104e957565b90670de0b6b3a7640000908181036105b557505090565b671bc16d674ec8000081036105d3575050806105d09161062c565b90565b673782dace9d90000081036105f75750506105f1816105d09261062c565b8061062c565b6106019192610795565b90600161060d83610574565b915f198301040190151502600181018091116104e9576105d0916104dc565b906106369161058b565b6001670de0b6b3a76400005f19830104019015150290565b670de0b6b3a7640000918083036106655750905090565b8290671bc16d674ec800008103610686575050806106829161058b565b0490565b673782dace9d90000081036106aa57506106a3826106829361058b565b048061058b565b90506106b591610795565b6106be81610574565b60015f199384830104019015150290600182018083116104e9578110156106e6575050505f90565b030190565b90801561071c57670de0b6b3a7640000918281029281840414901517156104e9576001905f19830104019015150290565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b801561075e576ec097ce7bc90715b34b9f10000000000590565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b811561075e570590565b9080156110be5781156110b8578160ff1c61109057770bce5086492111aea88f4bb1ca6bcf584181ea8059f765328110156110685781670c7d713b49da00001280611057575b15610cf457670de0b6b3a7640000916ec097ce7bc90715b34b9f10000000009061082e908402828101907fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f00000000001830261078b565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b918082818507020592050201670de0b6b3a7640000905b057ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc00008181131580610ce1575b15610cb957819082121580610ca6575b15610c7e575f915f8112610c6f575b506064906806f05b59d3b20000008112610c0c577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e0000000168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac62000000811215610bd3575b6856bc75e2d631000000811215610b99575b682b5e3af16b18800000811215610b61575b6815af1d78b58c400000811215610b29575b680ad78ebc5ac6200000811215610af2575b82811215610abb575b6802b5e3af16b1880000811215610a84575b68015af1d78b58c40000811215610a4d575b60028382800205056003848383020505600485848302050560058685830205056006878683020505876007818884020505916008828985020505936009838a8702050595600a848b8902050597600b858c8b02050599600c868d8d0205059b01010101010101010101010102050205905f146105d0576105d090610744565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000849201920205906109ce565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000849201920205906109bc565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000849201920205906109aa565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000849201920205906109a1565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c000008492019202059061098f565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e78000008492019202059061097d565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf0000008492019202059061096b565b6e01855144814a7ff805980ff008400091507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000001610959565b6803782dace9d90000008112610c5c577ffffffffffffffffffffffffffffffffffffffffffffffffc87d25316270000000168056bc75e2d63100000826b1425982cf597cd205cef738092610944565b68056bc75e2d6310000082600192610944565b600192505f03905060646108e8565b7fd4794efd000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156108d9565b7fa2f9f7e3000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156108c9565b81670de0b6b3a7640000925f91848112611041575b506064905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c0000000000000821215611016575b73011798004d755d3c8bc8e03204cf44619e000000821215610ff5575b820290808302906e01855144814a7ff805980ff00840009081831215610fd2575b50506b02df0ab5a80a22c61ab5a70080821215610fb2575b50693f1fce3da636ea5cf85080821215610f92575b50690127fa27722cc06cc5e280821215610f72575b5068280e60114edb805d0380821215610f52575b50680ebc5fb4174612111080821215610f3b575b506808f00f760a4b2db55d80821215610f1b575b506806f5f177578893793780821215610efb575b506806248f33704b28660380821215610edc575b506805c548670b9510e7ac80821215610ebd575b50610e6a68056bc75e2d6310000091827ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf0000081830192010261078b565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b0105905f14610eb8575f035b0261089d565b610eb2565b68056bc75e2d631000006756bc75e2d63100009202059101905f610e2e565b68056bc75e2d6310000067ad78ebc5ac6200009202059101905f610e1a565b68056bc75e2d6310000068015af1d78b58c400009202059101905f610e06565b68056bc75e2d631000006802b5e3af16b18800009202059101905f610df2565b68056bc75e2d63100000809202059101905f610dde565b68056bc75e2d63100000680ad78ebc5ac62000009202059101905f610dca565b68056bc75e2d631000006815af1d78b58c4000009202059101905f610db6565b68056bc75e2d63100000682b5e3af16b188000009202059101905f610da1565b68056bc75e2d631000006856bc75e2d6310000009202059101905f610d8c565b68ad78ebc5ac62000000925069021e19e0c9bab240000002059101905f80610d74565b906b1425982cf597cd205cef73806803782dace9d900000091059101610d53565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b2000000610d36565b905061104d9150610744565b6001906064610d09565b50670f43fc2c04ee000082126107db565b7fd8317311000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f022701e0000000000000000000000000000000000000000000000000000000005f5260045ffd5b50505f90565b5050670de0b6b3a76400009056fea2646970667358221220fe0c862df1322807f09de13a50cc88f15e7751c841ce0e4dac30df0f975af23064736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x12 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x388F6BD0 EQ PUSH2 0x1CA JUMPI DUP1 PUSH4 0x3C42A2D6 EQ PUSH2 0xC5 JUMPI PUSH4 0xF33D1410 EQ PUSH2 0x3B JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0xC1 JUMPI PUSH1 0x60 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC CALLDATASIZE ADD SLT PUSH2 0xC1 JUMPI PUSH8 0xFFFFFFFFFFFFFFFF DUP2 CALLDATALOAD DUP2 DUP2 GT PUSH2 0xC1 JUMPI PUSH2 0x89 SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x2E7 JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD SWAP2 DUP3 GT PUSH2 0xC1 JUMPI PUSH2 0xA0 SWAP2 CALLDATASIZE SWAP2 ADD PUSH2 0x2E7 JUMP JUMPDEST SWAP1 PUSH1 0x44 CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0xC1 JUMPI PUSH1 0x20 SWAP3 PUSH2 0xB9 SWAP3 PUSH2 0x3AB JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST POP CALLVALUE PUSH2 0xC1 JUMPI PUSH2 0xD4 CALLDATASIZE PUSH2 0x2A7 JUMP JUMPDEST SWAP4 PUSH8 0xDE0B6B3A7640000 SWAP6 SWAP4 SWAP2 SWAP3 SWAP6 SWAP5 DUP6 PUSH2 0xEE DUP4 PUSH2 0x557 JUMP JUMPDEST DIV DUP2 GT PUSH2 0x1A3 JUMPI SWAP1 PUSH2 0x103 PUSH2 0x109 SWAP3 DUP3 PUSH2 0x4DC JUMP JUMPDEST SWAP1 PUSH2 0x6EB JUMP JUMPDEST SWAP3 DUP5 DUP3 MUL SWAP2 DUP1 DUP4 DIV DUP7 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x177 JUMPI DUP3 ISZERO PUSH2 0x14B JUMPI POP PUSH2 0x142 SWAP3 PUSH1 0x20 SWAP6 SWAP3 PUSH2 0x135 SWAP3 DIV SWAP1 PUSH2 0x59E JUMP JUMPDEST DUP4 DUP2 DUP2 SUB SWAP2 LT MUL SWAP1 PUSH2 0x58B JUMP JUMPDEST DIV PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x12 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x11 SWAP1 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP5 PUSH32 0x340A453300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP CALLVALUE PUSH2 0xC1 JUMPI PUSH2 0x1D9 CALLDATASIZE PUSH2 0x2A7 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 PUSH2 0x1EE DUP5 SWAP4 SWAP6 SWAP5 PUSH2 0x557 JUMP JUMPDEST DIV DUP2 GT PUSH2 0x280 JUMPI DUP2 SUB SWAP1 DUP1 DUP3 GT PUSH2 0x254 JUMPI SWAP2 PUSH2 0x211 PUSH2 0x217 SWAP3 PUSH2 0x21D SWAP6 SWAP5 PUSH2 0x6EB JUMP JUMPDEST SWAP3 PUSH2 0x6EB JUMP JUMPDEST SWAP1 PUSH2 0x59E JUMP JUMPDEST SWAP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21F494C589C0000 DUP4 ADD SWAP3 DUP4 GT PUSH2 0x177 JUMPI PUSH1 0x20 PUSH2 0xB9 DUP5 DUP5 PUSH2 0x62C JUMP JUMPDEST PUSH1 0x11 DUP7 PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP6 PUSH32 0x64590B9F00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC PUSH1 0xA0 SWAP2 ADD SLT PUSH2 0xC1 JUMPI PUSH1 0x4 CALLDATALOAD SWAP1 PUSH1 0x24 CALLDATALOAD SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 PUSH1 0x64 CALLDATALOAD SWAP1 PUSH1 0x84 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0xC1 JUMPI DUP2 CALLDATALOAD SWAP1 PUSH1 0x20 SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP3 GT PUSH2 0x37E JUMPI DUP2 PUSH1 0x5 SHL SWAP2 PUSH1 0x40 MLOAD SWAP6 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0 PUSH1 0x3F DUP6 ADD AND DUP8 ADD SWAP1 DUP8 DUP3 LT SWAP1 DUP3 GT OR PUSH2 0x37E JUMPI PUSH1 0x40 MSTORE DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0xC1 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x36F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x361 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x4AF JUMPI PUSH1 0x1 SWAP2 DUP3 SWAP2 DUP3 SUB PUSH2 0x454 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH0 SWAP4 JUMPDEST PUSH2 0x408 JUMPI JUMPDEST POP POP POP POP DUP1 ISZERO PUSH2 0x3E0 JUMPI SWAP1 JUMP JUMPDEST PUSH32 0x2654368900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP2 MLOAD DUP5 LT ISZERO PUSH2 0x44F JUMPI DUP3 PUSH8 0xDE0B6B3A7640000 PUSH2 0x446 DUP7 SWAP8 PUSH2 0x440 PUSH2 0x42E DUP6 SWAP10 DUP8 PUSH2 0x516 JUMP JUMPDEST MLOAD PUSH2 0x439 DUP12 DUP10 PUSH2 0x516 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x64E JUMP JUMPDEST SWAP1 PUSH2 0x58B JUMP JUMPDEST DIV SWAP6 ADD SWAP4 PUSH2 0x3CE JUMP JUMPDEST PUSH2 0x3D3 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH0 SWAP4 JUMPDEST PUSH2 0x472 JUMPI POP POP POP POP DUP1 ISZERO PUSH2 0x3E0 JUMPI SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP5 LT ISZERO PUSH2 0x44F JUMPI DUP3 PUSH2 0x4A7 DUP6 SWAP7 PUSH2 0x4A1 PUSH2 0x48F DUP5 SWAP9 DUP7 PUSH2 0x516 JUMP JUMPDEST MLOAD PUSH2 0x49A DUP11 DUP9 PUSH2 0x516 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x59E JUMP JUMPDEST SWAP1 PUSH2 0x62C JUMP JUMPDEST SWAP6 ADD SWAP4 PUSH2 0x461 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x4E9 JUMPI JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x52A JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH8 0x429D069189E0000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4E9 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x2710 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4E9 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x4E9 JUMPI JUMP JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 SUB PUSH2 0x5B5 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x5D3 JUMPI POP POP DUP1 PUSH2 0x5D0 SWAP2 PUSH2 0x62C JUMP JUMPDEST SWAP1 JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x5F7 JUMPI POP POP PUSH2 0x5F1 DUP2 PUSH2 0x5D0 SWAP3 PUSH2 0x62C JUMP JUMPDEST DUP1 PUSH2 0x62C JUMP JUMPDEST PUSH2 0x601 SWAP2 SWAP3 PUSH2 0x795 JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH2 0x60D DUP4 PUSH2 0x574 JUMP JUMPDEST SWAP2 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH1 0x1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x4E9 JUMPI PUSH2 0x5D0 SWAP2 PUSH2 0x4DC JUMP JUMPDEST SWAP1 PUSH2 0x636 SWAP2 PUSH2 0x58B JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 DUP1 DUP4 SUB PUSH2 0x665 JUMPI POP SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 SWAP1 PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x686 JUMPI POP POP DUP1 PUSH2 0x682 SWAP2 PUSH2 0x58B JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x6AA JUMPI POP PUSH2 0x6A3 DUP3 PUSH2 0x682 SWAP4 PUSH2 0x58B JUMP JUMPDEST DIV DUP1 PUSH2 0x58B JUMP JUMPDEST SWAP1 POP PUSH2 0x6B5 SWAP2 PUSH2 0x795 JUMP JUMPDEST PUSH2 0x6BE DUP2 PUSH2 0x574 JUMP JUMPDEST PUSH1 0x1 PUSH0 NOT SWAP4 DUP5 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 PUSH1 0x1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x4E9 JUMPI DUP2 LT ISZERO PUSH2 0x6E6 JUMPI POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SUB ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x71C JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x4E9 JUMPI PUSH1 0x1 SWAP1 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x75E JUMPI PUSH15 0xC097CE7BC90715B34B9F1000000000 SDIV SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP2 ISZERO PUSH2 0x75E JUMPI SDIV SWAP1 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x10BE JUMPI DUP2 ISZERO PUSH2 0x10B8 JUMPI DUP2 PUSH1 0xFF SHR PUSH2 0x1090 JUMPI PUSH24 0xBCE5086492111AEA88F4BB1CA6BCF584181EA8059F76532 DUP2 LT ISZERO PUSH2 0x1068 JUMPI DUP2 PUSH8 0xC7D713B49DA0000 SLT DUP1 PUSH2 0x1057 JUMPI JUMPDEST ISZERO PUSH2 0xCF4 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH15 0xC097CE7BC90715B34B9F1000000000 SWAP1 PUSH2 0x82E SWAP1 DUP5 MUL DUP3 DUP2 ADD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F68318436F8EA4CB460F000000000 ADD DUP4 MUL PUSH2 0x78B JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV DUP4 DUP6 DUP3 MUL SDIV SWAP2 DUP5 DUP7 DUP5 MUL SDIV SWAP4 DUP6 DUP8 DUP7 MUL SDIV SWAP6 DUP1 DUP9 DUP9 MUL SDIV SWAP8 DUP9 MUL SDIV PUSH1 0xF SWAP1 SDIV SWAP7 PUSH1 0xD SWAP1 SDIV SWAP6 PUSH1 0xB SWAP1 SDIV SWAP5 PUSH1 0x9 SWAP1 SDIV SWAP4 PUSH1 0x7 SWAP1 SDIV SWAP3 PUSH1 0x5 SWAP1 SDIV SWAP2 PUSH1 0x3 SWAP1 SDIV ADD ADD ADD ADD ADD ADD ADD PUSH1 0x1 SHL SWAP2 DUP1 DUP3 DUP2 DUP6 SMOD MUL SDIV SWAP3 SDIV MUL ADD PUSH8 0xDE0B6B3A7640000 SWAP1 JUMPDEST SDIV PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC702BD3A30FC0000 DUP2 DUP2 SGT ISZERO DUP1 PUSH2 0xCE1 JUMPI JUMPDEST ISZERO PUSH2 0xCB9 JUMPI DUP2 SWAP1 DUP3 SLT ISZERO DUP1 PUSH2 0xCA6 JUMPI JUMPDEST ISZERO PUSH2 0xC7E JUMPI PUSH0 SWAP2 PUSH0 DUP2 SLT PUSH2 0xC6F JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH9 0x6F05B59D3B2000000 DUP2 SLT PUSH2 0xC0C JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90FA4A62C4E000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP3 JUMPDEST MUL DUP2 SWAP1 PUSH9 0xAD78EBC5AC62000000 DUP2 SLT ISZERO PUSH2 0xBD3 JUMPI JUMPDEST PUSH9 0x56BC75E2D631000000 DUP2 SLT ISZERO PUSH2 0xB99 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B18800000 DUP2 SLT ISZERO PUSH2 0xB61 JUMPI JUMPDEST PUSH9 0x15AF1D78B58C400000 DUP2 SLT ISZERO PUSH2 0xB29 JUMPI JUMPDEST PUSH9 0xAD78EBC5AC6200000 DUP2 SLT ISZERO PUSH2 0xAF2 JUMPI JUMPDEST DUP3 DUP2 SLT ISZERO PUSH2 0xABB JUMPI JUMPDEST PUSH9 0x2B5E3AF16B1880000 DUP2 SLT ISZERO PUSH2 0xA84 JUMPI JUMPDEST PUSH9 0x15AF1D78B58C40000 DUP2 SLT ISZERO PUSH2 0xA4D JUMPI JUMPDEST PUSH1 0x2 DUP4 DUP3 DUP1 MUL SDIV SDIV PUSH1 0x3 DUP5 DUP4 DUP4 MUL SDIV SDIV PUSH1 0x4 DUP6 DUP5 DUP4 MUL SDIV SDIV PUSH1 0x5 DUP7 DUP6 DUP4 MUL SDIV SDIV PUSH1 0x6 DUP8 DUP7 DUP4 MUL SDIV SDIV DUP8 PUSH1 0x7 DUP2 DUP9 DUP5 MUL SDIV SDIV SWAP2 PUSH1 0x8 DUP3 DUP10 DUP6 MUL SDIV SDIV SWAP4 PUSH1 0x9 DUP4 DUP11 DUP8 MUL SDIV SDIV SWAP6 PUSH1 0xA DUP5 DUP12 DUP10 MUL SDIV SDIV SWAP8 PUSH1 0xB DUP6 DUP13 DUP12 MUL SDIV SDIV SWAP10 PUSH1 0xC DUP7 DUP14 DUP14 MUL SDIV SDIV SWAP12 ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD MUL SDIV MUL SDIV SWAP1 PUSH0 EQ PUSH2 0x5D0 JUMPI PUSH2 0x5D0 SWAP1 PUSH2 0x744 JUMP JUMPDEST PUSH9 0x6F5F1775788937937 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C0000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x9CE JUMP JUMPDEST PUSH9 0x8F00F760A4B2DB55D PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E780000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x9BC JUMP JUMPDEST PUSH9 0xEBC5FB41746121110 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x9AA JUMP JUMPDEST PUSH9 0x280E60114EDB805D03 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x9A1 JUMP JUMPDEST PUSH10 0x127FA27722CC06CC5E2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x98F JUMP JUMPDEST PUSH10 0x3F1FCE3DA636EA5CF850 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E7800000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x97D JUMP JUMPDEST PUSH12 0x2DF0AB5A80A22C61AB5A700 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF000000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x96B JUMP JUMPDEST PUSH15 0x1855144814A7FF805980FF0084000 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E000000 ADD PUSH2 0x959 JUMP JUMPDEST PUSH9 0x3782DACE9D9000000 DUP2 SLT PUSH2 0xC5C JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC87D2531627000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH12 0x1425982CF597CD205CEF7380 SWAP3 PUSH2 0x944 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP3 PUSH1 0x1 SWAP3 PUSH2 0x944 JUMP JUMPDEST PUSH1 0x1 SWAP3 POP PUSH0 SUB SWAP1 POP PUSH1 0x64 PUSH2 0x8E8 JUMP JUMPDEST PUSH32 0xD4794EFD00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x8D9 JUMP JUMPDEST PUSH32 0xA2F9F7E300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x8C9 JUMP JUMPDEST DUP2 PUSH8 0xDE0B6B3A7640000 SWAP3 PUSH0 SWAP2 DUP5 DUP2 SLT PUSH2 0x1041 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH0 PUSH31 0x1600EF3172E58D2E933EC884FDE10064C63B5372D805E203C0000000000000 DUP3 SLT ISZERO PUSH2 0x1016 JUMPI JUMPDEST PUSH20 0x11798004D755D3C8BC8E03204CF44619E000000 DUP3 SLT ISZERO PUSH2 0xFF5 JUMPI JUMPDEST DUP3 MUL SWAP1 DUP1 DUP4 MUL SWAP1 PUSH15 0x1855144814A7FF805980FF0084000 SWAP1 DUP2 DUP4 SLT ISZERO PUSH2 0xFD2 JUMPI JUMPDEST POP POP PUSH12 0x2DF0AB5A80A22C61AB5A700 DUP1 DUP3 SLT ISZERO PUSH2 0xFB2 JUMPI JUMPDEST POP PUSH10 0x3F1FCE3DA636EA5CF850 DUP1 DUP3 SLT ISZERO PUSH2 0xF92 JUMPI JUMPDEST POP PUSH10 0x127FA27722CC06CC5E2 DUP1 DUP3 SLT ISZERO PUSH2 0xF72 JUMPI JUMPDEST POP PUSH9 0x280E60114EDB805D03 DUP1 DUP3 SLT ISZERO PUSH2 0xF52 JUMPI JUMPDEST POP PUSH9 0xEBC5FB41746121110 DUP1 DUP3 SLT ISZERO PUSH2 0xF3B JUMPI JUMPDEST POP PUSH9 0x8F00F760A4B2DB55D DUP1 DUP3 SLT ISZERO PUSH2 0xF1B JUMPI JUMPDEST POP PUSH9 0x6F5F1775788937937 DUP1 DUP3 SLT ISZERO PUSH2 0xEFB JUMPI JUMPDEST POP PUSH9 0x6248F33704B286603 DUP1 DUP3 SLT ISZERO PUSH2 0xEDC JUMPI JUMPDEST POP PUSH9 0x5C548670B9510E7AC DUP1 DUP3 SLT ISZERO PUSH2 0xEBD JUMPI JUMPDEST POP PUSH2 0xE6A PUSH9 0x56BC75E2D63100000 SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP2 DUP4 ADD SWAP3 ADD MUL PUSH2 0x78B JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV SWAP2 PUSH1 0x3 PUSH1 0x5 PUSH1 0x7 PUSH1 0x9 PUSH1 0xB DUP9 DUP11 DUP10 MUL SDIV SWAP9 DUP1 DUP12 DUP12 MUL SDIV SWAP11 DUP12 MUL SDIV SDIV SWAP9 SDIV SWAP7 SDIV SWAP5 SDIV SWAP3 SDIV ADD ADD ADD ADD ADD PUSH1 0x1 SHL ADD SDIV SWAP1 PUSH0 EQ PUSH2 0xEB8 JUMPI PUSH0 SUB JUMPDEST MUL PUSH2 0x89D JUMP JUMPDEST PUSH2 0xEB2 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0x56BC75E2D6310000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0xE2E JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0xAD78EBC5AC620000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0xE1A JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C40000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0xE06 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B1880000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0xDF2 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP1 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0xDDE JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0xAD78EBC5AC6200000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0xDCA JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C400000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0xDB6 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B18800000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0xDA1 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x56BC75E2D631000000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0xD8C JUMP JUMPDEST PUSH9 0xAD78EBC5AC62000000 SWAP3 POP PUSH10 0x21E19E0C9BAB2400000 MUL SDIV SWAP2 ADD SWAP1 PUSH0 DUP1 PUSH2 0xD74 JUMP JUMPDEST SWAP1 PUSH12 0x1425982CF597CD205CEF7380 PUSH9 0x3782DACE9D9000000 SWAP2 SDIV SWAP2 ADD PUSH2 0xD53 JUMP JUMPDEST POP PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP1 SDIV PUSH9 0x6F05B59D3B2000000 PUSH2 0xD36 JUMP JUMPDEST SWAP1 POP PUSH2 0x104D SWAP2 POP PUSH2 0x744 JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x64 PUSH2 0xD09 JUMP JUMPDEST POP PUSH8 0xF43FC2C04EE0000 DUP3 SLT PUSH2 0x7DB JUMP JUMPDEST PUSH32 0xD831731100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x22701E000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 INVALID 0xC DUP7 0x2D CALL ORIGIN 0x28 SMOD CREATE SWAP14 0xE1 GASPRICE POP 0xCC DUP9 CALL MCOPY PUSH24 0x51C841CE0E4DAC30DF0F975AF23064736F6C634300081B00 CALLER ","sourceMap":"259:1097:131:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;465:4:50;;;;;;;838:5;;;;;:::i;:::-;259:1097:131;11030:43:52;;11026:93;;11151:20;;1744:19:50;11151:20:52;;;:::i;:::-;1744:19:50;;:::i;:::-;259:1097:131;;;;;;;;;;;;;;;;;;;;;838:5:50;259:1097:131;;;;11306:20:52;259:1097:131;;11306:20:52;;:::i;:::-;5832:87:50;;;;;;;838:5;;:::i;:::-;259:1097:131;;;;;;;;;;;;;;;;;;2843:5:52;;;259:1097:131;2843:5:52;;;259:1097:131;2843:5:52;11026:93;11096:12;;259:1097:131;11096:12:52;259:1097:131;11096:12:52;259:1097:131;;;;;;;;:::i;:::-;465:4:50;838:5;;;;;;:::i;:::-;259:1097:131;13428:46:52;;13424:97;;2843:5;;;;;;;;1744:19:50;;;;13666:20:52;1744:19:50;;;:::i;:::-;;;:::i;:::-;13666:20:52;;:::i;:::-;2843:5;;;;;;;;;259:1097:131;13932:22:52;;;;:::i;2843:5::-;;;;259:1097:131;2843:5:52;;;259:1097:131;2843:5:52;13424:97;13497:13;;259:1097:131;13497:13:52;259:1097:131;13497:13:52;259:1097:131;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;259:1097:131;;;;;-1:-1:-1;259:1097:131;291:415;;;259:1097;;;;;;487:19;;;;475:31;;487:19;;465:4:50;4713:13:52;259:1097:131;4708:152:52;487:19:131;;;4708:152:52;4874:14;;;;;;4870:67;;522:69:131;:::o;4870:67:52:-;4911:15;259:1097:131;4911:15:52;;259:1097:131;4911:15:52;4758:3;259:1097:131;;4728:28:52;;;;;4807:11;465:4:50;838:5;4807:11:52;;:41;:11;;;;;:::i;:::-;259:1097:131;4827:20:52;;;;:::i;:::-;259:1097:131;4807:41:52;;:::i;:::-;838:5:50;;:::i;:::-;259:1097:131;4758:3:52;259:1097:131;4713:13:52;;;4728:28;;;471:229:131;465:4:50;6422:13:52;259:1097:131;6417:148:52;487:19:131;;;6579:14:52;;;;;;6575:67;;622::131;:::o;6467:3:52:-;259:1097:131;;6437:28:52;;;;;6514:11;6498:56;6514:11;;:39;:11;;;;;:::i;:::-;259:1097:131;6532:20:52;;;;:::i;:::-;259:1097:131;6514:39:52;;:::i;:::-;6498:56;;:::i;:::-;6467:3;259:1097:131;6422:13:52;;;259:1097:131;;;;;;;;;;2782:5:52;;;;;;;;;;:::o;:::-;2843;;;;;;;;;259:1097:131;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;2843:5:52;259:1097:131;;;;;;;;;;;;;;;:::o;:::-;;638:5:50;259:1097:131;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;4760:637:50:-;;465:4;;4997:8;;;465:4;;5021:8;;;:::o;4993:398::-;259:1097:131;5050:8:50;;259:1097:131;;5081:11:50;;;;;;:::i;:::-;5074:18;:::o;5046:345::-;259:1097:131;5113:9:50;;259:1097:131;;5155:11:50;;;;5187:21;5155:11;;:::i;:::-;5187:21;;:::i;5109:282::-;5253:20;;;;:::i;:::-;1068:5;259:1097:131;1068:5:50;;;:::i;:::-;1186:122;-1:-1:-1;;1186:122:50;;;;;;;;259:1097:131;2782:5:52;;;;;;;5366:14:50;;;:::i;887:427::-;;1068:5;887:427;1068:5;:::i;:::-;1186:122;;-1:-1:-1;;1186:122:50;;;;;;;;887:427;:::o;3736:794::-;465:4;;3975:8;;;465:4;;3999:8;;;;:::o;3971:553::-;4028:8;;259:1097:131;4028:8:50;;259:1097:131;;838:5:50;;;;;;:::i;:::-;259:1097:131;4052:20:50;:::o;4024:500::-;259:1097:131;4093:9:50;;259:1097:131;;838:5:50;;;;;;:::i;:::-;259:1097:131;838:5:50;;:::i;4089:435::-;4237:20;;;;;:::i;:::-;1068:5;;;:::i;:::-;259:1097:131;-1:-1:-1;;1186:122:50;;;;;;;;;;2782:5:52;259:1097:131;2782:5:52;;;;;;;4347:14:50;;;;;4381:8;;;259:1097:131;4381:8:50;:::o;4343:171::-;259:1097:131;;4460:21:50;:::o;1822:864::-;;2004:6;;2000:58;;465:4;259:1097:131;;;;;;;;;;;;;;;2560:120:50;;-1:-1:-1;;2560:120:50;;;;;;;;1822:864;:::o;2000:58::-;2033:14;2009:1;2033:14;;2009:1;2033:14;2648:13:51;;;;;;;;:::o;:::-;259:1097:131;;;;;;;;;2648:13:51;;;;;;;:::o;4496:2300::-;;4577:6;;4573:131;;4718:6;;4714:45;;1564:4;;;5129:68;;259:1097:131;5591:24:51;;;5587:83;;5774:28;2707:26;5774:28;:60;;;4496:2300;5770:720;;;1564:4;;1789;;21319:38;;2648:13;;2593;;;;2707:26;;2648:13;;21319:38;:::i;:::-;2648:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22285:2;2648:13;;;22203:2;2648:13;;;22121:2;2648:13;;;22040:1;2648:13;;;21959:1;2648:13;;;21878:1;2648:13;;;21797:1;2648:13;;2593;;;;;;;2648;;;;;;;;;;;;;2593;1564:4;5770:720;;2648:13;2400:6;6615:36;;;;:76;;;5770:720;6613:79;6609:137;;6771:17;7080:25;;;;:54;;;5770:720;7078:57;7074:112;;259:1097:131;7316:5:51;259:1097:131;7316:5:51;;7312:417;;5770:720;-1:-1:-1;9497:3:51;;2789:21;9082:7;;2789:21;;2707:26;;1754:4;9134:12;2845:56;9078:252;;2648:13;9723:23;9785:7;3117:22;9785:7;;;9781:104;;9078:252;3246:22;9902:7;;;9898:104;;9078:252;3368:21;10019:7;;;10015:104;;9078:252;3486:21;10136:7;;;10132:104;;9078:252;3602:21;10253:7;;;10249:104;;9078:252;10370:7;;;;10366:104;;9078:252;3832:20;10487:7;;;10483:104;;9078:252;3947:20;10604:7;;;10600:104;;9078:252;11567:1;2648:13;;;;;;11645:1;2648:13;;;;;;11723:1;2648:13;;;;;;11801:1;2648:13;;;;;;11879:1;2648:13;;;;;;;11957:1;2648:13;;;;;;;12035:1;2648:13;;;;;;;12113:1;2648:13;;;;;;;12191:2;2648:13;;;;;;;12270:2;2648:13;;;;;;;12349:2;2648:13;;;;;;2593;;;;;;;;;;;;;2648;;;;13075:54;;;;;13094:26;;;:::i;10600:104::-;4003:21;2707:26;;;;2648:13;;;10600:104;;;10483;3888:21;2707:26;;;;2648:13;;;10483:104;;;10366;3773:21;2707:26;;;;2648:13;;;10366:104;;;10249;3658:21;2707:26;;;;2648:13;;;10249:104;;;10132;3542:22;2707:26;;;;2648:13;;;10132:104;;;10015;3424:24;2707:26;;;;2648:13;;;10015:104;;;9898;3303:27;2707:26;;;;2648:13;;;9898:104;;;9781;3174:34;;-1:-1:-1;2707:26:51;;9781:104;;9078:252;2953:20;9171:7;;2953:20;;2707:26;;1754:4;9223:12;3008:28;9167:163;9078:252;;9167:163;1754:4;9274:11;9284:1;9167:163;9078:252;;7312:417;7714:4;;-1:-1:-1;259:1097:131;4181:19:51;;-1:-1:-1;9497:3:51;7312:417;;7074:112;7158:17;259:1097:131;7158:17:51;;259:1097:131;7158:17:51;7080:54;7109:25;2349:6;7109:25;;;7080:54;;6609:137;6715:20;259:1097:131;6715:20:51;;259:1097:131;6715:20:51;6615:76;6655:36;2349:6;6655:36;;;6615:76;;5770:720;6451:13;1564:4;6451:13;259:1097:131;14954:10:51;;;;14950:381;;5770:720;16656:14;17116:3;16656:14;259:1097:131;2648:13:51;16708:16;;;16704:126;;5770:720;2648:13;16848:16;;;16844:126;;5770:720;2648:13;;;;;;;3174:34;;17276:7;;;;17272:94;;5770:720;3303:27;;;17384:7;;;;17380:94;;5770:720;3424:24;;17492:7;;;;17488:94;;5770:720;3542:22;;17600:7;;;;17596:94;;5770:720;3658:21;;17708:7;;;;17704:94;;5770:720;3773:21;;17816:7;;;;17812:94;;5770:720;3888:21;;17924:7;;;;17920:94;;5770:720;4003:21;;18032:7;;;;18028:94;;5770:720;4120:21;;18140:8;;;;18136:97;;5770:720;4237:21;;18251:8;;;;18247:97;;5770:720;1754:4;18891:38;1754:4;2593:13;;2707:26;2593:13;;;2707:26;;2648:13;18891:38;:::i;:::-;2648:13;;;;;;;;;;;;;;;;;;19369:1;19450;19531;19612;19693:2;2648:13;;;;;;;;;;;;;;;;;;;;;;;;2593;;;;;2648;;2593;2648;20303:35;;;;;259:1097:131;4181:19:51;20303:35;2648:13;5770:720;;20303:35;;;18247:97;1754:4;4181:19;2648:13;;;2593;;18247:97;;;;18136;1754:4;4063:20;2648:13;;;2593;;18136:97;;;;18028:94;1754:4;3947:20;2648:13;;;2593;;18028:94;;;;17920;1754:4;3832:20;2648:13;;;2593;;17920:94;;;;17812;1754:4;2648:13;;;;2593;;17812:94;;;;17704;1754:4;3602:21;2648:13;;;2593;;17704:94;;;;17596;1754:4;3486:21;2648:13;;;2593;;17596:94;;;;17488;1754:4;3368:21;2648:13;;;2593;;17488:94;;;;17380;1754:4;3246:22;2648:13;;;2593;;17380:94;;;;17272;3117:22;2648:13;;;;;2593;;17272:94;;;;;16844:126;2648:13;3008:28;2953:20;2648:13;;2593;;16844:126;;16704;2648:13;2845:56;2648:13;;2789:21;16704:126;;14950:381;15248:21;;;;;;:::i;:::-;15316:4;;17116:3;14950:381;;5774:60;5806:28;2593:13;5806:28;;5774:60;;5587:83;5638:21;259:1097:131;5638:21:51;;259:1097:131;5638:21:51;5129:68;5169:17;259:1097:131;5169:17:51;;259:1097:131;5169:17:51;4714:45;4740:8;;259:1097:131;4740:8:51;:::o;4573:131::-;4671:22;;1564:4;4671:22;:::o"},"methodIdentifiers":{"computeInGivenExactOut(uint256,uint256,uint256,uint256,uint256)":"388f6bd0","computeInvariant(uint256[],uint256[],uint8)":"f33d1410","computeOutGivenExactIn(uint256,uint256,uint256,uint256,uint256)":"3c42a2d6"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"BaseOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExponentOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExponent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxInRatio\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxOutRatio\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProductOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroInvariant\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balanceIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weightIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weightOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountOut\",\"type\":\"uint256\"}],\"name\":\"computeInGivenExactOut\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"normalizedWeights\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balances\",\"type\":\"uint256[]\"},{\"internalType\":\"enum Rounding\",\"name\":\"rounding\",\"type\":\"uint8\"}],\"name\":\"computeInvariant\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"balanceIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weightIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balanceOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"weightOut\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amountIn\",\"type\":\"uint256\"}],\"name\":\"computeOutGivenExactIn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ZeroInvariant()\":[{\"details\":\"Most commonly, this happens when a token balance is zero.\"}]},\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"errors\":{\"BaseOutOfBounds()\":[{\"notice\":\"This error is thrown when a base is not within an acceptable range.\"}],\"ExponentOutOfBounds()\":[{\"notice\":\"This error is thrown when a exponent is not within an acceptable range.\"}],\"InvalidExponent()\":[{\"notice\":\"This error is thrown when an exponent used in the exp function is not within an acceptable range.\"}],\"MaxInRatio()\":[{\"notice\":\"User attempted to add a disproportionate amountIn of tokens to a pool.\"}],\"MaxOutRatio()\":[{\"notice\":\"User attempted to extract a disproportionate amountOut of tokens from a pool.\"}],\"ProductOutOfBounds()\":[{\"notice\":\"This error is thrown when the exponent * ln(base) is not within an acceptable range.\"}],\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}],\"ZeroInvariant()\":[{\"notice\":\"Error thrown when the calculated invariant is zero, indicating an issue with the invariant calculation.\"}]},\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/WeightedMathMock.sol\":\"WeightedMathMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/WeightedMath.sol\":{\"keccak256\":\"0x4d9faedc605adaa52594ae9949374d87bce13107f887edc593a0b9b7a5c91042\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://648e918881e78d62505f049d2f88335e679aa01b82d403ac80b854d9d85efcc2\",\"dweb:/ipfs/QmXA36vdUX611mTH3V9qNGM3uF591TB3xaADqWG41NFmWP\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"contracts/test/WeightedMathMock.sol\":{\"keccak256\":\"0x4c0dd20d4e3322177d589d5c2c932040966d6313c2f05a0fdf63a259e8c70eb4\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d88333f97b5489b9d557276b5f0dc4aa19a82b94411f9f9937e221d47e399700\",\"dweb:/ipfs/QmSmz67NQPb7zCZ8THX2vv21zEmDYZ6CfKMcL96VkyTm1q\"]}},\"version\":1}"}},"contracts/test/WeightedPoolMock.sol":{"WeightedPoolMock":{"abi":[{"inputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"numTokens","type":"uint256"},{"internalType":"uint256[]","name":"normalizedWeights","type":"uint256[]"},{"internalType":"string","name":"version","type":"string"}],"internalType":"struct WeightedPool.NewPoolParams","name":"params","type":"tuple"},{"internalType":"contract IVault","name":"vault","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BaseOutOfBounds","type":"error"},{"inputs":[],"name":"ECDSAInvalidSignature","type":"error"},{"inputs":[{"internalType":"uint256","name":"length","type":"uint256"}],"name":"ECDSAInvalidSignatureLength","type":"error"},{"inputs":[{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"ECDSAInvalidSignatureS","type":"error"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"ERC2612ExpiredSignature","type":"error"},{"inputs":[{"internalType":"address","name":"signer","type":"address"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC2612InvalidSigner","type":"error"},{"inputs":[],"name":"ExponentOutOfBounds","type":"error"},{"inputs":[],"name":"InputLengthMismatch","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"currentNonce","type":"uint256"}],"name":"InvalidAccountNonce","type":"error"},{"inputs":[],"name":"InvalidExponent","type":"error"},{"inputs":[],"name":"InvalidShortString","type":"error"},{"inputs":[],"name":"InvalidToken","type":"error"},{"inputs":[],"name":"MaxInRatio","type":"error"},{"inputs":[],"name":"MaxOutRatio","type":"error"},{"inputs":[],"name":"MinWeight","type":"error"},{"inputs":[],"name":"NormalizedWeightInvariant","type":"error"},{"inputs":[],"name":"ProductOutOfBounds","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderIsNotVault","type":"error"},{"inputs":[{"internalType":"string","name":"str","type":"string"}],"name":"StringTooLong","type":"error"},{"inputs":[],"name":"WeightedPoolBptRateUnsupported","type":"error"},{"inputs":[],"name":"ZeroDivision","type":"error"},{"inputs":[],"name":"ZeroInvariant","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"EIP712DomainChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256","name":"tokenInIndex","type":"uint256"},{"internalType":"uint256","name":"invariantRatio","type":"uint256"}],"name":"computeBalance","outputs":[{"internalType":"uint256","name":"newBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"enum Rounding","name":"rounding","type":"uint8"}],"name":"computeInvariant","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitApproval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAggregateFeePercentages","outputs":[{"internalType":"uint256","name":"aggregateSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"aggregateYieldFeePercentage","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentLiveBalances","outputs":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaximumInvariantRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMaximumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumInvariantRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getMinimumSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getNormalizedWeights","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getStaticSwapFeePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokenInfo","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"components":[{"internalType":"enum TokenType","name":"tokenType","type":"uint8"},{"internalType":"contract IRateProvider","name":"rateProvider","type":"address"},{"internalType":"bool","name":"paysYieldFees","type":"bool"}],"internalType":"struct TokenInfo[]","name":"tokenInfo","type":"tuple[]"},{"internalType":"uint256[]","name":"balancesRaw","type":"uint256[]"},{"internalType":"uint256[]","name":"lastBalancesLiveScaled18","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokens","outputs":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getVault","outputs":[{"internalType":"contract IVault","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWeightedPoolDynamicData","outputs":[{"components":[{"internalType":"uint256[]","name":"balancesLiveScaled18","type":"uint256[]"},{"internalType":"uint256[]","name":"tokenRates","type":"uint256[]"},{"internalType":"uint256","name":"staticSwapFeePercentage","type":"uint256"},{"internalType":"uint256","name":"totalSupply","type":"uint256"},{"internalType":"bool","name":"isPoolInitialized","type":"bool"},{"internalType":"bool","name":"isPoolPaused","type":"bool"},{"internalType":"bool","name":"isPoolInRecoveryMode","type":"bool"}],"internalType":"struct WeightedPoolDynamicData","name":"data","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWeightedPoolImmutableData","outputs":[{"components":[{"internalType":"contract IERC20[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"decimalScalingFactors","type":"uint256[]"},{"internalType":"uint256[]","name":"normalizedWeights","type":"uint256[]"}],"internalType":"struct WeightedPoolImmutableData","name":"data","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"incrementNonce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"enum SwapKind","name":"kind","type":"uint8"},{"internalType":"uint256","name":"amountGivenScaled18","type":"uint256"},{"internalType":"uint256[]","name":"balancesScaled18","type":"uint256[]"},{"internalType":"uint256","name":"indexIn","type":"uint256"},{"internalType":"uint256","name":"indexOut","type":"uint256"},{"internalType":"address","name":"router","type":"address"},{"internalType":"bytes","name":"userData","type":"bytes"}],"internalType":"struct PoolSwapParams","name":"request","type":"tuple"}],"name":"onSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenIndex","type":"uint256"},{"internalType":"uint256","name":"newWeight","type":"uint256"}],"name":"setNormalizedWeight","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[2]","name":"newWeights","type":"uint256[2]"}],"name":"setNormalizedWeights","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{"abi_decode_string_fromMemory":{"entryPoint":2405,"id":null,"parameterSlots":2,"returnSlots":1},"array_allocation_size_array_uint256_dyn":{"entryPoint":2490,"id":null,"parameterSlots":1,"returnSlots":1},"clear_storage_range_uint256":{"entryPoint":2513,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation":{"entryPoint":2370,"id":null,"parameterSlots":2,"returnSlots":0},"fun_toShortStringWithFallback":{"entryPoint":2930,"id":41065,"parameterSlots":1,"returnSlots":1},"fun_toShortStringWithFallback_10175":{"entryPoint":2555,"id":41065,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_uint256_dyn":{"entryPoint":2535,"id":null,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"6102c0806040523461092e576145a7803803809161001d8285610942565b8339810160408282031261092e5781516001600160401b03811161092e5782019160a08383031261092e576040519160a083016001600160401b038111848210176106805760405283516001600160401b03811161092e5781610081918601610965565b835260208401516001600160401b03811161092e57816100a2918601610965565b602084019081526040808601519085015260608501519094906001600160401b03811161092e57810182601f8201121561092e578051906100e2826109ba565b916100f06040519384610942565b80835260208084019160051b8301019185831161092e57602001905b8282106109325750505060608501526080810151916001600160401b03831161092e5760209261013c9201610965565b608084018190529101516001600160a01b038116810361092e5782519351604080519195919081016001600160401b03811182821017610680576040526001815260208101603160f81b8152610191836109fb565b6101205261019e82610b72565b6101405282516020840120918260e05251902080610100524660a0526040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815260c0810181811060018060401b03821117610680576040525190206080523060c0526101608290528051906001600160401b0382116106805760035490600182811c92168015610924575b60208310146107815781601f8493116108e9575b50602090601f8311600114610874575f92610869575b50508160011b915f199060031b1c1916176003555b83516001600160401b03811161068057600454600181811c9116801561085f575b602082101461078157601f8111610811575b506020601f82116001146107aa5781929394955f9261079f575b50508160011b915f199060031b1c1916176004555b610180528051906001600160401b0382116106805760055490600182811c92168015610795575b60208310146107815781601f849311610745575b50602090601f83116001146106bd575f926106b2575b50508160011b915f199060031b1c1916176005555b6040810151806101a052606082015151036106a3575f5f5b6101a05160ff8216101561047d5761038960ff821660608501516109e7565b5191662386f26fc10000831061046e5782810181116103c65782019160ff82166103da576101c0525b60ff80808316146103c6571660010161036a565b634e487b7160e01b5f52601160045260245ffd5b60ff82166001036103ee576101e0526103b2565b60ff821660020361040257610200526103b2565b60ff821660030361041657610220526103b2565b60ff821660040361042a57610240526103b2565b60ff821660050361043e57610260526103b2565b60ff821660060361045257610280526103b2565b600760ff831614610464575b506103b2565b6102a0525f61045e565b63bd39358360e01b5f5260045ffd5b50670de0b6b3a764000003610694576040810151906104b461049e836109ba565b926104ac6040519485610942565b8084526109ba565b602083019290601f1901368437516001600160401b03811161068057680100000000000000008111610680576006928354828555808310610664575b50835f5260205f205f5b8381106106505785855f5b60408201518110156105515761051f8160608401516109e7565b5190835481101561053d57600191845f528160205f20015501610505565b634e487b7160e01b5f52603260045260245ffd5b6040516138ea9081610c9d8239608051816128cb015260a05181612997015260c0518161289c015260e0518161291a015261010051816129400152610120518161113e015261014051816111680152610160518181816102760152818161049e0152818161067501528181610d9401528181611103015281816114c40152818161174901528181611b62015281816122e101526128310152610180518181816105b30152818161096001528181610a2801528181610c90015261128d01526101a0518150506101c0518150506101e05181505061020051815050610220518150506102405181505061026051815050610280518150506102a051815050f35b6001906020845194019381840155016104fa565b61067a90855f528360205f2091820191016109d1565b5f6104f0565b634e487b7160e01b5f52604160045260245ffd5b631ce788a760e11b5f5260045ffd5b63aaad13f760e01b5f5260045ffd5b015190505f8061033d565b60055f90815293507f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db091905b601f198416851061072a576001945083601f19811610610712575b505050811b01600555610352565b01515f1960f88460031b161c191690555f8080610704565b818101518355602094850194600190930192909101906106e9565b6107719060055f5260205f20601f850160051c81019160208610610777575b601f0160051c01906109d1565b5f610327565b9091508190610764565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610313565b015190505f806102d7565b60045f5260205f20905f5b601f19841681106107f9575060019394959683601f198116106107e1575b505050811b016004556102ec565b01515f1960f88460031b161c191690555f80806107d3565b9091602060018192858b0151815501930191016107b5565b60045f52610859907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f840160051c8101916020851061077757601f0160051c01906109d1565b5f6102bd565b90607f16906102ab565b015190505f80610275565b60035f90815293505f5160206145875f395f51905f5291905b601f19841685106108ce576001945083601f198116106108b6575b505050811b0160035561028a565b01515f1960f88460031b161c191690555f80806108a8565b8181015183556020948501946001909301929091019061088d565b60035f5261091e905f5160206145875f395f51905f52601f850160051c8101916020861061077757601f0160051c01906109d1565b5f61025f565b91607f169161024b565b5f80fd5b815181526020918201910161010c565b601f909101601f19168101906001600160401b0382119082101761068057604052565b81601f8201121561092e578051906001600160401b0382116106805760405192610999601f8401601f191660200185610942565b8284526020838301011161092e57815f9260208093018386015e8301015290565b6001600160401b0381116106805760051b60200190565b8181106109dc575050565b5f81556001016109d1565b805182101561053d5760209160051b010190565b805160209081811015610a715750601f825111610a335780825192015190808310610a2557501790565b825f19910360031b1b161790565b60448260405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b906001600160401b038211610680575f54926001938481811c91168015610b68575b8382101461078157601f8111610b41575b5081601f8411600114610adf57509282939183925f94610ad4575b50501b915f199060031b1c1916175f5560ff90565b015192505f80610abf565b919083601f1981165f8052845f20945f905b88838310610b275750505010610b0f575b505050811b015f5560ff90565b01515f1960f88460031b161c191690555f8080610b02565b858701518855909601959485019487935090810190610af1565b610b62905f8052601f845f20910160051c810190601f860160051c016109d1565b5f610aa4565b90607f1690610a93565b805160209081811015610b9c5750601f825111610a335780825192015190808310610a2557501790565b9192916001600160401b0381116106805760019182548381811c91168015610c92575b8282101461078157601f8111610c6b575b5080601f8311600114610c0b5750819293945f92610c00575b50505f19600383901b1c191690821b17905560ff90565b015190505f80610be9565b90601f19831695845f52825f20925f905b888210610c545750508385969710610c3c575b505050811b01905560ff90565b01515f1960f88460031b161c191690555f8080610c2f565b808785968294968601518155019501930190610c1c565b610c8c90845f52601f835f20910160051c810190601f850160051c016109d1565b5f610bd0565b90607f1690610bbf56fe6080604090808252600480361015610015575f80fd5b60e05f35811c92836301ffc9a714611f595750826306fdde0314611eaa578263095ea7b314611e2c57826316a0b3e014611bf357826318160ddd14611bd757826319f32ccd14611b9857826323b872dd14611af057826323de665114611abe578263273c1adf14611a9c57826330adf81f14611a62578263313ce56714611a475782633644e51514611a2b5782633f3353de146118b757826353b79bd7146116fb57826354fd4d501461160b5782635687f2b8146115ac578263627cdcb914611583578263654cf15d14611561578263679aefce1461152a57826370a082311461145657826372c98186146113355782637ecebe00146112f157826381fa807c1461123057826384b0196e146111275782638d928af8146110d757826395d89b4114610fd1578263984de9e814610e0f578263a9059cbb14610cfc578263aa6ca80814610c37578263abb1dc44146109ce578263b156aa0a14610907578263b677fa56146108e5578263c0bc6f331461060c578263ce20ece7146105ec578263d335b0cf14610559578263d505accf146102ee57508163dd62ed3e146101fb575063f89f27ed146101c4575f80fd5b346101f7575f6003193601126101f7576101f3906101e06129bd565b9051918291602083526020830190612170565b0390f35b5f80fd5b82346101f757806003193601126101f7576020610216611fe5565b6064610220612008565b9473ffffffffffffffffffffffffffffffffffffffff808097875198899687957f927da10500000000000000000000000000000000000000000000000000000000875230908701521660248501521660448301527f0000000000000000000000000000000000000000000000000000000000000000165afa9081156102e5575f916102b0575b6020925051908152f35b90506020823d6020116102dd575b816102cb60209383612093565b810103126101f75760209151906102a6565b3d91506102be565b513d5f823e3d90fd5b8390346101f7576003193601126101f757610307611fe5565b90610310612008565b604435926084359060643560ff831683036101f75780421161052f5761035d8273ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2080549060018201905590565b90610429610420875195602087017f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9815273ffffffffffffffffffffffffffffffffffffffff97889586891697888d840152878c1660608401528d608084015260a083015260c082015260c081526103d48161205b565b5190206103df612885565b908a51917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015260c43591604260a4359220612dc6565b90929192612e55565b168181036105025750505f84959661049a60209651988996879586947fe1f21c67000000000000000000000000000000000000000000000000000000008652850160409194939294606082019573ffffffffffffffffffffffffffffffffffffffff80921683521660208201520152565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19081156102e557506104ce57005b6020813d6020116104fa575b816104e760209383612093565b810103126101f7576104f890612242565b005b3d91506104da565b877f4b800e46000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b867f62791302000000000000000000000000000000000000000000000000000000005f525260245ffd5b5082346101f7575f6003193601126101f7578051917fb45090f9000000000000000000000000000000000000000000000000000000008352309083015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156102e5575f916102b0576020925051908152f35b83346101f7575f6003193601126101f757602090516509184e72a0008152f35b9150346101f7575f6003193601126101f75782516106298161205b565b606081526020918282019160608352858101925f8452606082015f815260808301915f835260a08401935f855260c08101955f875273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016908b517f535cfd8a00000000000000000000000000000000000000000000000000000000815230828201525f81602481865afa908115610895575f916108c3575b5083528b517f7e361bde00000000000000000000000000000000000000000000000000000000815230828201525f81602481865afa908115610895575f9161089f575b5084528b517fb45090f900000000000000000000000000000000000000000000000000000000815230828201528a81602481865afa908115610895575f91610868575b508952610767612298565b85528b519182917ff29486a100000000000000000000000000000000000000000000000000000000835230908301528160246101a09485935afa91821561085e57928b9c926107f69261080996955f9e9c9d9e92610831575b50508a81015115158852610120610100918281015115158b52015115158a5283519d8d8f9e938f948552519301528c0190612170565b915190601f198b840301908b0152612170565b9551606088015251608087015251151560a086015251151560c0850152511515908301520390f35b6108509250803d10610857575b6108488183612093565b81019061268d565b5f806107c0565b503d61083e565b8c513d5f823e3d90fd5b90508a81813d831161088e575b61087f8183612093565b810103126101f757515f61075c565b503d610875565b8d513d5f823e3d90fd5b6108bb91503d805f833e6108b38183612093565b8101906124ac565b90505f610719565b6108df91503d805f833e6108d78183612093565b8101906127af565b5f6106d6565b83346101f7575f6003193601126101f757602090516709b6e64a8ec600008152f35b8382346101f7575f6003193601126101f7578151907f535cfd8a00000000000000000000000000000000000000000000000000000000825230908201525f8160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156109c457916101f3925f926109a8575b5051918291602083526020830190612170565b6109bd9192503d805f833e6108d78183612093565b9083610995565b82513d5f823e3d90fd5b8382346101f7575f6003193601126101f75773ffffffffffffffffffffffffffffffffffffffff8251917f67e0e07600000000000000000000000000000000000000000000000000000000835230908301525f82602481847f0000000000000000000000000000000000000000000000000000000000000000165afa918215610c2d575f935f925f925f95610b03575b5090610a7b959493929181519687966080885260808801906121a3565b6020878203818901528080875193848152019601925f905b838210610abf57898803868b015289806101f38b610ab18c8c612170565b908382036060850152612170565b9184989950606086979860019395978397518051610adc816121ec565b83528685820151168584015201511515898201520198019201899897969594929391610a93565b955093509150503d805f853e610b198185612093565b8301926080818503126101f75780519167ffffffffffffffff928381116101f75785610b469184016123a4565b91602095868201518581116101f757820181601f820112156101f757805190610b6e826120b6565b98610b7b86519a8b612093565b828a52808a01816060809502840101928584116101f7578201905b838210610bdb575050505050828201518581116101f75781610bb991840161244b565b9460608301519081116101f757610bd0920161244b565b919492919386610a5e565b84828703126101f757875190610bf08261202b565b825160028110156101f757825283830151908c821682036101f7578285928389950152610c1e8b8601612242565b8b820152815201910190610b96565b83513d5f823e3d90fd5b8382346101f7575f6003193601126101f7578151907fca4f280300000000000000000000000000000000000000000000000000000000825230908201525f8160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156109c457916101f3925f92610cd8575b50519182916020835260208301906121a3565b610cf59192503d805f833e610ced8183612093565b810190612422565b9083610cc5565b5082346101f757806003193601126101f7576020610d7a92610d1c611fe5565b83517fbeabacc80000000000000000000000000000000000000000000000000000000081523392810192835273ffffffffffffffffffffffffffffffffffffffff909116602083015260243560408301529384918291606090910190565b03815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610e0557610dcb575b6020905160018152f35b6020823d602011610dfd575b81610de460209383612093565b810103126101f757610df7602092612242565b50610dc1565b3d9150610dd7565b50513d5f823e3d90fd5b5082346101f757806003193601126101f757813567ffffffffffffffff81116101f757610e3f90369084016120ce565b60243560028110156101f757610e54816121ec565b610fca57825b610e626129bd565b9080600314610f755780600414610eee5780600114610eab57600214610e9557605184634e487b7160e01b5f525260245ffd5b6020935090610ea391612f00565b905b51908152f35b509092670de0b6b3a764000091828102928184041490151715610edb5750602092610ed591612a72565b90610ea5565b601190634e487b7160e01b5f525260245ffd5b50925f9190670de0b6b3a76400005b8551841015610f3957610f31600191610f2b610f198787612284565b51610f24888b612284565b5190612a90565b90612b1b565b930192610efd565b92509350508015610f4e576020925090610ea5565b827f26543689000000000000000000000000000000000000000000000000000000005f525ffd5b50925f9190670de0b6b3a76400005b8551841015610f3957670de0b6b3a7640000610fc1600192610fbb610fa98888612284565b51610fb4898c612284565b5190612d2d565b90612a5f565b04930192610f84565b6003610e5a565b8382346101f7575f6003193601126101f757815191825f8354610ff38161220a565b90818452602095600191876001821691825f14611092575050600114611036575b5050506101f39291611027910385612093565b51928284938452830190611fc0565b5f90815286935091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b82841061107a57505050820101816110276101f3611014565b8054848a018601528895508794909301928101611061565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168782015293151560051b8601909301935084925061102791506101f39050611014565b83346101f7575f6003193601126101f7576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9150346101f7575f6003193601126101f7576111627f0000000000000000000000000000000000000000000000000000000000000000612b3d565b9261118c7f0000000000000000000000000000000000000000000000000000000000000000612c6f565b815192602084019084821067ffffffffffffffff83111761121d5750916111fd916101f3949382525f84526111f082519788977f0f0000000000000000000000000000000000000000000000000000000000000089528060208a0152880190611fc0565b9186830390870152611fc0565b904660608501523060808501525f60a085015283820360c0850152612170565b604190634e487b7160e01b5f525260245ffd5b8382346101f7575f6003193601126101f7578151907ff29486a100000000000000000000000000000000000000000000000000000000825230908201526101a090818160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610c2d575f926112d4575b505060608282015191015182519182526020820152f35b6112ea9250803d10610857576108488183612093565b82806112bd565b83346101f75760206003193601126101f75760209073ffffffffffffffffffffffffffffffffffffffff611323611fe5565b165f5260028252805f20549051908152f35b8382346101f75760209260031984813601126101f75782359167ffffffffffffffff918284116101f75783360301126101f7578351916113748361205b565b8084013560028110156101f757835260248101358684015260448101358281116101f7576113a7908536918401016120ce565b85840152606481013560608401526084810135608084015260a481013573ffffffffffffffffffffffffffffffffffffffff811681036101f75760a084015260c4810135908282116101f7570192366023850112156101f7578084013591821161121d575083519061142286601f19601f8401160183612093565b80825236602482860101116101f75785815f926024610ea39701838601378301015260c082015261145161281a565b6124f0565b8382346101f757602091826003193601126101f75782611474611fe5565b604473ffffffffffffffffffffffffffffffffffffffff9485855196879485937ff7888aec00000000000000000000000000000000000000000000000000000000855230908501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa918215610e05575f926114fb575b5051908152f35b9091508281813d8311611523575b6115138183612093565b810103126101f7575190836114f4565b503d611509565b50346101f7575f6003193601126101f7577f18e79a20000000000000000000000000000000000000000000000000000000005f525ffd5b83346101f7575f6003193601126101f7576020905167016345785d8a00008152f35b346101f7575f6003193601126101f757335f908152600260205260409020805460018101909155005b83346101f75760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256115de3661212e565b9391946115e961281a565b5193845273ffffffffffffffffffffffffffffffffffffffff908116941692a3005b83346101f7575f6003193601126101f75780516005549091825f61162e8461220a565b808352602094600190866001821691825f146116bb575050600114611660575b50506101f39291611027910385612093565b9085925060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0915f925b8284106116a3575050508201018161102761164e565b8054848a01860152889550879490930192810161168d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168682015292151560051b85019092019250839150611027905061164e565b5082346101f7575f6003193601126101f7578051906117198261202b565b606082526020908183019160608352818401926060845273ffffffffffffffffffffffffffffffffffffffff95867f0000000000000000000000000000000000000000000000000000000000000000169084517fca4f280300000000000000000000000000000000000000000000000000000000815230828201525f81602481865afa9081156118ad57905f92918391611893575b50885260248651809481937f7e361bde00000000000000000000000000000000000000000000000000000000835230908301525afa908115611889575f91611870575b5081959295526117ff6129bd565b84528251948086526080860192519260608288015283518091528160a088019401915f5b82811061185a5788806101f38a8a6118498b8b51601f1993848884030190880152612170565b915190848303016060850152612170565b83518a1686529481019492810192600101611823565b61188491503d805f833e6108b38183612093565b6117f1565b84513d5f823e3d90fd5b6118a791503d8085833e610ced8183612093565b8a6117ae565b86513d5f823e3d90fd5b8382346101f757816003193601126101f75736602312156101f757815182810181811067ffffffffffffffff821117611a185783526044813682116101f75783905b828210611a0857505050805192670de0b6b3a764000061191f6020840195865190612383565b036119ac575051916006549283156119995760065f527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f5551916001101561198657507ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d4055005b603290634e487b7160e01b5f525260245ffd5b603283634e487b7160e01b5f525260245ffd5b517f08c379a0000000000000000000000000000000000000000000000000000000008152602081840152601560248201527f5765696768747320646f6e277420746f74616c203100000000000000000000006044820152606490fd5b81358152602091820191016118f9565b604183634e487b7160e01b5f525260245ffd5b83346101f7575f6003193601126101f757602090610ea3612885565b83346101f7575f6003193601126101f7576020905160128152f35b83346101f7575f6003193601126101f757602090517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b83346101f7575f6003193601126101f757602090516729a2241af62c00008152f35b83346101f75760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6115de3661212e565b5082346101f75760205f6084611b053661212e565b86517f15dacbea000000000000000000000000000000000000000000000000000000008152339881019890985273ffffffffffffffffffffffffffffffffffffffff928316602489015290821660448801526064870152859283917f0000000000000000000000000000000000000000000000000000000000000000165af18015610e0557610dcb576020905160018152f35b5082346101f7576003193601126101f757356006548110611bb557005b611bbe9061234e565b81549060031b905f19602435831b921b19161790555f80f35b83346101f7575f6003193601126101f757602090610ea3612298565b8382346101f75760606003193601126101f757803567ffffffffffffffff81116101f757611c2490369083016120ce565b9160243592611c40611c398560443593612284565b51946127d5565b60019081831115611e265760025b80600314611db05780600414611d175780600114611cd557600214611c8057605185634e487b7160e01b5f525260245ffd5b909192938115611caf5750610ea39260209592610f2b926ec097ce7bc90715b34b9f0fffffffff040190612a90565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f525ffd5b5080929394915015611d04575092610f2b610ea3926020956ec097ce7bc90715b34b9f10000000000490612a90565b601290634e487b7160e01b5f525260245ffd5b509192939080670de0b6b3a7640000935f925b611d70575b5050508115611d4a575092610f2b610ea39260209590612a90565b7f26543689000000000000000000000000000000000000000000000000000000005f525ffd5b909193670de0b6b3a764000051851015611daa579082611da28193610f2b611d988986612284565b51610f248a61224f565b950192611d2a565b93611d2f565b509192939080670de0b6b3a7640000935f925b611de2575050508115611d4a575092610f2b610ea39260209590612a90565b909193670de0b6b3a764000051851015611daa579082670de0b6b3a7640000611e1d8294610fbb611e138a87612284565b51610fb48b61224f565b04950192611dc3565b81611c4e565b5082346101f757806003193601126101f7576020610d7a92611e4c611fe5565b83517fe1f21c670000000000000000000000000000000000000000000000000000000081523392810192835273ffffffffffffffffffffffffffffffffffffffff909116602083015260243560408301529384918291606090910190565b83346101f7575f6003193601126101f75780516003549091825f611ecd8461220a565b808352602094600190866001821691825f146116bb575050600114611efe5750506101f39291611027910385612093565b9085925060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f925b828410611f41575050508201018161102761164e565b8054848a018601528895508794909301928101611f2b565b82346101f75760206003193601126101f75735907fffffffff0000000000000000000000000000000000000000000000000000000082168092036101f7577f01ffc9a700000000000000000000000000000000000000000000000000000000602092148152f35b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101f757565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101f757565b6060810190811067ffffffffffffffff82111761204757604052565b634e487b7160e01b5f52604160045260245ffd5b60e0810190811067ffffffffffffffff82111761204757604052565b6040810190811067ffffffffffffffff82111761204757604052565b90601f601f19910116810190811067ffffffffffffffff82111761204757604052565b67ffffffffffffffff81116120475760051b60200190565b9080601f830112156101f75760209082356120e8816120b6565b936120f66040519586612093565b81855260208086019260051b8201019283116101f757602001905b82821061211f575050505090565b81358152908301908301612111565b60031960609101126101f75773ffffffffffffffffffffffffffffffffffffffff9060043582811681036101f7579160243590811681036101f7579060443590565b9081518082526020808093019301915f5b82811061218f575050505090565b835185529381019392810192600101612181565b9081518082526020808093019301915f5b8281106121c2575050505090565b835173ffffffffffffffffffffffffffffffffffffffff16855293810193928101926001016121b4565b600211156121f657565b634e487b7160e01b5f52602160045260245ffd5b90600182811c92168015612238575b602083101461222457565b634e487b7160e01b5f52602260045260245ffd5b91607f1691612219565b519081151582036101f757565b670de0b6b3a7640000518110156122705760051b670de0b6b3a76400200190565b634e487b7160e01b5f52603260045260245ffd5b80518210156122705760209160051b010190565b6040517fe4dc2aa400000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115612343575f91612314575090565b90506020813d60201161233b575b8161232f60209383612093565b810103126101f7575190565b3d9150612322565b6040513d5f823e3d90fd5b6006548110156122705760065f527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01905f90565b9190820180921161239057565b634e487b7160e01b5f52601160045260245ffd5b9080601f830112156101f7578151906020916123bf816120b6565b936123cd6040519586612093565b81855260208086019260051b8201019283116101f757602001905b8282106123f6575050505090565b815173ffffffffffffffffffffffffffffffffffffffff811681036101f75781529083019083016123e8565b906020828203126101f757815167ffffffffffffffff81116101f75761244892016123a4565b90565b9080601f830112156101f757815190602091612466816120b6565b936124746040519586612093565b81855260208086019260051b8201019283116101f757602001905b82821061249d575050505090565b8151815290830190830161248f565b9190916040818403126101f75780519267ffffffffffffffff938481116101f757816124d991840161244b565b9360208301519081116101f757612448920161244b565b604081019081516125076060830191825190612284565b5192519161251b6080820193845190612284565b51918151612528816121ec565b612531816121ec565b6125dc5761254b612544602092516127d5565b94516127d5565b910151670de0b6b3a7640000948561256282612a2b565b0482116125b45761257661257c9282612383565b90612f00565b848402938085048614901517156123905761259d6125a3926125b095612a72565b90612a90565b8381810391100290612a5f565b0490565b7f340a4533000000000000000000000000000000000000000000000000000000005f5260045ffd5b6125f66125ef60209295939495516127d5565b92516127d5565b920151670de0b6b3a764000061260b85612a2b565b048111612665578303908382116123905761262c61259d9261263295612f00565b92612f00565b7ffffffffffffffffffffffffffffffffffffffffffffffffff21f494c589c000081019081116123905761244891612b1b565b7f64590b9f000000000000000000000000000000000000000000000000000000005f5260045ffd5b6101a0918190038281126101f75760405192610140928385019267ffffffffffffffff9086851082861117612047576080136101f7576101c0860190811184821017612047576040526126df81612242565b83526126ed60208201612242565b92610160938487015261270260408301612242565b92610180938488015261271760608401612242565b9087015285526080810151602086015260a0810151604086015260c0810151606086015260e081015164ffffffffff811681036101f75760808601526101008082015163ffffffff811681036101f7576127a89461279e9160a089015261279261012097612786898701612242565b60c08b01528501612242565b60e08901528301612242565b9086015201612242565b9082015290565b906020828203126101f757815167ffffffffffffffff81116101f757612448920161244b565b6006548110156127f2576127e89061234e565b90549060031b1c90565b7fc1ab6dc1000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361285957565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016301480612994575b156128ed577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff8211176120475760405251902090565b507f000000000000000000000000000000000000000000000000000000000000000046146128c4565b6040519060065480835282602091602082019060065f527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f935f905b828210612a1157505050612a0f92500383612093565b565b8554845260019586019588955093810193909101906129f9565b90670429d069189e00009182810292818404149015171561239057565b906127109182810292818404149015171561239057565b8181029291811591840414171561239057565b8115612a7c570490565b634e487b7160e01b5f52601260045260245ffd5b90670de0b6b3a764000090818103612aa757505090565b671bc16d674ec800008103612ac25750508061244891612b1b565b673782dace9d9000008103612ae6575050612ae08161244892612b1b565b80612b1b565b612af09192612f7d565b906001612afc83612a48565b915f198301040190151502600181018091116123905761244891612383565b90612b2591612a5f565b6001670de0b6b3a76400005f19830104019015150290565b60ff8114612b915760ff811690601f8211612b695760405191612b5f83612077565b8252602082015290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040515f815f5491612ba38361220a565b80835292602090600190818116908115612c2c5750600114612bce575b505061244892500382612093565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b828410612c1457506124489450505081016020015f80612bc0565b85548785018301529485019486945092810192612bf9565b9050602093506124489592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f80612bc0565b60ff8114612c915760ff811690601f8211612b695760405191612b5f83612077565b506040515f81600191600154612ca68161220a565b8084529360209160018116908115612c2c5750600114612cce57505061244892500382612093565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b828410612d1557506124489450505081016020015f80612bc0565b85548785018301529485019486945092810192612cfa565b670de0b6b3a764000091808303612d445750905090565b8290671bc16d674ec800008103612d61575050806125b091612a5f565b673782dace9d9000008103612d855750612d7e826125b093612a5f565b0480612a5f565b9050612d9091612f7d565b612d9981612a48565b60015f1993848301040190151502906001820180831161239057811015612dc1575050505f90565b030190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411612e4a579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15612343575f5173ffffffffffffffffffffffffffffffffffffffff811615612e4057905f905f90565b505f906001905f90565b5050505f9160039190565b60048110156121f65780612e67575050565b60018103612e97577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b60028103612ecb57507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600314612ed55750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b908015612f3157670de0b6b3a764000091828102928184041490151715612390576001905f19830104019015150290565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b8015612a7c576ec097ce7bc90715b34b9f10000000000590565b8115612a7c570590565b9080156138a65781156138a0578160ff1c61387857770bce5086492111aea88f4bb1ca6bcf584181ea8059f765328110156138505781670c7d713b49da0000128061383f575b156134dc57670de0b6b3a7640000916ec097ce7bc90715b34b9f100000000090613016908402828101907fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f000000000018302612f73565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b918082818507020592050201670de0b6b3a7640000905b057ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc000081811315806134c9575b156134a15781908212158061348e575b15613466575f915f8112613457575b506064906806f05b59d3b200000081126133f4577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e0000000168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac620000008112156133bb575b6856bc75e2d631000000811215613381575b682b5e3af16b18800000811215613349575b6815af1d78b58c400000811215613311575b680ad78ebc5ac62000008112156132da575b828112156132a3575b6802b5e3af16b188000081121561326c575b68015af1d78b58c40000811215613235575b60028382800205056003848383020505600485848302050585600581868402050560068287830205056007838883020505906008848984020505926009858a8602050595600a868b8902050597600b878c8b02050599600c888d8d0205059b01010101010101010101010102050205905f146124485761244890612f59565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000849201920205906131b6565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000849201920205906131a4565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf0000084920192020590613192565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e0000084920192020590613189565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000084920192020590613177565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000084920192020590613165565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000084920192020590613153565b6e01855144814a7ff805980ff008400091507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000001613141565b6803782dace9d90000008112613444577ffffffffffffffffffffffffffffffffffffffffffffffffc87d25316270000000168056bc75e2d63100000826b1425982cf597cd205cef73809261312c565b68056bc75e2d631000008260019261312c565b600192505f03905060646130d0565b7fd4794efd000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156130c1565b7fa2f9f7e3000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156130b1565b81670de0b6b3a7640000925f91848112613829575b506064905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c00000000000008212156137fe575b73011798004d755d3c8bc8e03204cf44619e0000008212156137dd575b820290808302906e01855144814a7ff805980ff008400090818312156137ba575b50506b02df0ab5a80a22c61ab5a7008082121561379a575b50693f1fce3da636ea5cf8508082121561377a575b50690127fa27722cc06cc5e28082121561375a575b5068280e60114edb805d038082121561373a575b50680ebc5fb4174612111080821215613723575b506808f00f760a4b2db55d80821215613703575b506806f5f1775788937937808212156136e3575b506806248f33704b286603808212156136c4575b506805c548670b9510e7ac808212156136a5575b5061365268056bc75e2d6310000091827ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000818301920102612f73565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b0105905f146136a0575f035b02613085565b61369a565b68056bc75e2d631000006756bc75e2d63100009202059101905f613616565b68056bc75e2d6310000067ad78ebc5ac6200009202059101905f613602565b68056bc75e2d6310000068015af1d78b58c400009202059101905f6135ee565b68056bc75e2d631000006802b5e3af16b18800009202059101905f6135da565b68056bc75e2d63100000809202059101905f6135c6565b68056bc75e2d63100000680ad78ebc5ac62000009202059101905f6135b2565b68056bc75e2d631000006815af1d78b58c4000009202059101905f61359e565b68056bc75e2d63100000682b5e3af16b188000009202059101905f613589565b68056bc75e2d631000006856bc75e2d6310000009202059101905f613574565b68ad78ebc5ac62000000925069021e19e0c9bab240000002059101905f8061355c565b906b1425982cf597cd205cef73806803782dace9d90000009105910161353b565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b200000061351e565b90506138359150612f59565b60019060646134f1565b50670f43fc2c04ee00008212612fc3565b7fd8317311000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f022701e0000000000000000000000000000000000000000000000000000000005f5260045ffd5b50505f90565b5050670de0b6b3a76400009056fea2646970667358221220852f5fa380002ec91aef32b8fec29b85f67797dc1801356be9c26c32b62cc84c64736f6c634300081b0033c2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b","opcodes":"PUSH2 0x2C0 DUP1 PUSH1 0x40 MSTORE CALLVALUE PUSH2 0x92E JUMPI PUSH2 0x45A7 DUP1 CODESIZE SUB DUP1 SWAP2 PUSH2 0x1D DUP3 DUP6 PUSH2 0x942 JUMP JUMPDEST DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP3 DUP3 SUB SLT PUSH2 0x92E JUMPI DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x92E JUMPI DUP3 ADD SWAP2 PUSH1 0xA0 DUP4 DUP4 SUB SLT PUSH2 0x92E JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH1 0xA0 DUP4 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP5 DUP3 LT OR PUSH2 0x680 JUMPI PUSH1 0x40 MSTORE DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x92E JUMPI DUP2 PUSH2 0x81 SWAP2 DUP7 ADD PUSH2 0x965 JUMP JUMPDEST DUP4 MSTORE PUSH1 0x20 DUP5 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x92E JUMPI DUP2 PUSH2 0xA2 SWAP2 DUP7 ADD PUSH2 0x965 JUMP JUMPDEST PUSH1 0x20 DUP5 ADD SWAP1 DUP2 MSTORE PUSH1 0x40 DUP1 DUP7 ADD MLOAD SWAP1 DUP6 ADD MSTORE PUSH1 0x60 DUP6 ADD MLOAD SWAP1 SWAP5 SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x92E JUMPI DUP2 ADD DUP3 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x92E JUMPI DUP1 MLOAD SWAP1 PUSH2 0xE2 DUP3 PUSH2 0x9BA JUMP JUMPDEST SWAP2 PUSH2 0xF0 PUSH1 0x40 MLOAD SWAP4 DUP5 PUSH2 0x942 JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 DUP1 DUP5 ADD SWAP2 PUSH1 0x5 SHL DUP4 ADD ADD SWAP2 DUP6 DUP4 GT PUSH2 0x92E JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x932 JUMPI POP POP POP PUSH1 0x60 DUP6 ADD MSTORE PUSH1 0x80 DUP2 ADD MLOAD SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP4 GT PUSH2 0x92E JUMPI PUSH1 0x20 SWAP3 PUSH2 0x13C SWAP3 ADD PUSH2 0x965 JUMP JUMPDEST PUSH1 0x80 DUP5 ADD DUP2 SWAP1 MSTORE SWAP2 ADD MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 SUB PUSH2 0x92E JUMPI DUP3 MLOAD SWAP4 MLOAD PUSH1 0x40 DUP1 MLOAD SWAP2 SWAP6 SWAP2 SWAP1 DUP2 ADD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT DUP3 DUP3 LT OR PUSH2 0x680 JUMPI PUSH1 0x40 MSTORE PUSH1 0x1 DUP2 MSTORE PUSH1 0x20 DUP2 ADD PUSH1 0x31 PUSH1 0xF8 SHL DUP2 MSTORE PUSH2 0x191 DUP4 PUSH2 0x9FB JUMP JUMPDEST PUSH2 0x120 MSTORE PUSH2 0x19E DUP3 PUSH2 0xB72 JUMP JUMPDEST PUSH2 0x140 MSTORE DUP3 MLOAD PUSH1 0x20 DUP5 ADD KECCAK256 SWAP2 DUP3 PUSH1 0xE0 MSTORE MLOAD SWAP1 KECCAK256 DUP1 PUSH2 0x100 MSTORE CHAINID PUSH1 0xA0 MSTORE PUSH1 0x40 MLOAD SWAP1 PUSH1 0x20 DUP3 ADD SWAP3 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP5 MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH1 0x1 DUP1 PUSH1 0x40 SHL SUB DUP3 GT OR PUSH2 0x680 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 PUSH1 0x80 MSTORE ADDRESS PUSH1 0xC0 MSTORE PUSH2 0x160 DUP3 SWAP1 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x680 JUMPI PUSH1 0x3 SLOAD SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x924 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x781 JUMPI DUP2 PUSH1 0x1F DUP5 SWAP4 GT PUSH2 0x8E9 JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0x874 JUMPI PUSH0 SWAP3 PUSH2 0x869 JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x3 SSTORE JUMPDEST DUP4 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x680 JUMPI PUSH1 0x4 SLOAD PUSH1 0x1 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0x85F JUMPI JUMPDEST PUSH1 0x20 DUP3 LT EQ PUSH2 0x781 JUMPI PUSH1 0x1F DUP2 GT PUSH2 0x811 JUMPI JUMPDEST POP PUSH1 0x20 PUSH1 0x1F DUP3 GT PUSH1 0x1 EQ PUSH2 0x7AA JUMPI DUP2 SWAP3 SWAP4 SWAP5 SWAP6 PUSH0 SWAP3 PUSH2 0x79F JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x4 SSTORE JUMPDEST PUSH2 0x180 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x680 JUMPI PUSH1 0x5 SLOAD SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x795 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x781 JUMPI DUP2 PUSH1 0x1F DUP5 SWAP4 GT PUSH2 0x745 JUMPI JUMPDEST POP PUSH1 0x20 SWAP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0x6BD JUMPI PUSH0 SWAP3 PUSH2 0x6B2 JUMPI JUMPDEST POP POP DUP2 PUSH1 0x1 SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH1 0x5 SSTORE JUMPDEST PUSH1 0x40 DUP2 ADD MLOAD DUP1 PUSH2 0x1A0 MSTORE PUSH1 0x60 DUP3 ADD MLOAD MLOAD SUB PUSH2 0x6A3 JUMPI PUSH0 PUSH0 JUMPDEST PUSH2 0x1A0 MLOAD PUSH1 0xFF DUP3 AND LT ISZERO PUSH2 0x47D JUMPI PUSH2 0x389 PUSH1 0xFF DUP3 AND PUSH1 0x60 DUP6 ADD MLOAD PUSH2 0x9E7 JUMP JUMPDEST MLOAD SWAP2 PUSH7 0x2386F26FC10000 DUP4 LT PUSH2 0x46E JUMPI DUP3 DUP2 ADD DUP2 GT PUSH2 0x3C6 JUMPI DUP3 ADD SWAP2 PUSH1 0xFF DUP3 AND PUSH2 0x3DA JUMPI PUSH2 0x1C0 MSTORE JUMPDEST PUSH1 0xFF DUP1 DUP1 DUP4 AND EQ PUSH2 0x3C6 JUMPI AND PUSH1 0x1 ADD PUSH2 0x36A JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0xFF DUP3 AND PUSH1 0x1 SUB PUSH2 0x3EE JUMPI PUSH2 0x1E0 MSTORE PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0xFF DUP3 AND PUSH1 0x2 SUB PUSH2 0x402 JUMPI PUSH2 0x200 MSTORE PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0xFF DUP3 AND PUSH1 0x3 SUB PUSH2 0x416 JUMPI PUSH2 0x220 MSTORE PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0xFF DUP3 AND PUSH1 0x4 SUB PUSH2 0x42A JUMPI PUSH2 0x240 MSTORE PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0xFF DUP3 AND PUSH1 0x5 SUB PUSH2 0x43E JUMPI PUSH2 0x260 MSTORE PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0xFF DUP3 AND PUSH1 0x6 SUB PUSH2 0x452 JUMPI PUSH2 0x280 MSTORE PUSH2 0x3B2 JUMP JUMPDEST PUSH1 0x7 PUSH1 0xFF DUP4 AND EQ PUSH2 0x464 JUMPI JUMPDEST POP PUSH2 0x3B2 JUMP JUMPDEST PUSH2 0x2A0 MSTORE PUSH0 PUSH2 0x45E JUMP JUMPDEST PUSH4 0xBD393583 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH8 0xDE0B6B3A7640000 SUB PUSH2 0x694 JUMPI PUSH1 0x40 DUP2 ADD MLOAD SWAP1 PUSH2 0x4B4 PUSH2 0x49E DUP4 PUSH2 0x9BA JUMP JUMPDEST SWAP3 PUSH2 0x4AC PUSH1 0x40 MLOAD SWAP5 DUP6 PUSH2 0x942 JUMP JUMPDEST DUP1 DUP5 MSTORE PUSH2 0x9BA JUMP JUMPDEST PUSH1 0x20 DUP4 ADD SWAP3 SWAP1 PUSH1 0x1F NOT ADD CALLDATASIZE DUP5 CALLDATACOPY MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x680 JUMPI PUSH9 0x10000000000000000 DUP2 GT PUSH2 0x680 JUMPI PUSH1 0x6 SWAP3 DUP4 SLOAD DUP3 DUP6 SSTORE DUP1 DUP4 LT PUSH2 0x664 JUMPI JUMPDEST POP DUP4 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH0 JUMPDEST DUP4 DUP2 LT PUSH2 0x650 JUMPI DUP6 DUP6 PUSH0 JUMPDEST PUSH1 0x40 DUP3 ADD MLOAD DUP2 LT ISZERO PUSH2 0x551 JUMPI PUSH2 0x51F DUP2 PUSH1 0x60 DUP5 ADD MLOAD PUSH2 0x9E7 JUMP JUMPDEST MLOAD SWAP1 DUP4 SLOAD DUP2 LT ISZERO PUSH2 0x53D JUMPI PUSH1 0x1 SWAP2 DUP5 PUSH0 MSTORE DUP2 PUSH1 0x20 PUSH0 KECCAK256 ADD SSTORE ADD PUSH2 0x505 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x40 MLOAD PUSH2 0x38EA SWAP1 DUP2 PUSH2 0xC9D DUP3 CODECOPY PUSH1 0x80 MLOAD DUP2 PUSH2 0x28CB ADD MSTORE PUSH1 0xA0 MLOAD DUP2 PUSH2 0x2997 ADD MSTORE PUSH1 0xC0 MLOAD DUP2 PUSH2 0x289C ADD MSTORE PUSH1 0xE0 MLOAD DUP2 PUSH2 0x291A ADD MSTORE PUSH2 0x100 MLOAD DUP2 PUSH2 0x2940 ADD MSTORE PUSH2 0x120 MLOAD DUP2 PUSH2 0x113E ADD MSTORE PUSH2 0x140 MLOAD DUP2 PUSH2 0x1168 ADD MSTORE PUSH2 0x160 MLOAD DUP2 DUP2 DUP2 PUSH2 0x276 ADD MSTORE DUP2 DUP2 PUSH2 0x49E ADD MSTORE DUP2 DUP2 PUSH2 0x675 ADD MSTORE DUP2 DUP2 PUSH2 0xD94 ADD MSTORE DUP2 DUP2 PUSH2 0x1103 ADD MSTORE DUP2 DUP2 PUSH2 0x14C4 ADD MSTORE DUP2 DUP2 PUSH2 0x1749 ADD MSTORE DUP2 DUP2 PUSH2 0x1B62 ADD MSTORE DUP2 DUP2 PUSH2 0x22E1 ADD MSTORE PUSH2 0x2831 ADD MSTORE PUSH2 0x180 MLOAD DUP2 DUP2 DUP2 PUSH2 0x5B3 ADD MSTORE DUP2 DUP2 PUSH2 0x960 ADD MSTORE DUP2 DUP2 PUSH2 0xA28 ADD MSTORE DUP2 DUP2 PUSH2 0xC90 ADD MSTORE PUSH2 0x128D ADD MSTORE PUSH2 0x1A0 MLOAD DUP2 POP POP PUSH2 0x1C0 MLOAD DUP2 POP POP PUSH2 0x1E0 MLOAD DUP2 POP POP PUSH2 0x200 MLOAD DUP2 POP POP PUSH2 0x220 MLOAD DUP2 POP POP PUSH2 0x240 MLOAD DUP2 POP POP PUSH2 0x260 MLOAD DUP2 POP POP PUSH2 0x280 MLOAD DUP2 POP POP PUSH2 0x2A0 MLOAD DUP2 POP POP RETURN JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x20 DUP5 MLOAD SWAP5 ADD SWAP4 DUP2 DUP5 ADD SSTORE ADD PUSH2 0x4FA JUMP JUMPDEST PUSH2 0x67A SWAP1 DUP6 PUSH0 MSTORE DUP4 PUSH1 0x20 PUSH0 KECCAK256 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x9D1 JUMP JUMPDEST PUSH0 PUSH2 0x4F0 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH4 0x1CE788A7 PUSH1 0xE1 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH4 0xAAAD13F7 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x33D JUMP JUMPDEST PUSH1 0x5 PUSH0 SWAP1 DUP2 MSTORE SWAP4 POP PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 SWAP2 SWAP1 JUMPDEST PUSH1 0x1F NOT DUP5 AND DUP6 LT PUSH2 0x72A JUMPI PUSH1 0x1 SWAP5 POP DUP4 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0x712 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x5 SSTORE PUSH2 0x352 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x704 JUMP JUMPDEST DUP2 DUP2 ADD MLOAD DUP4 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x6E9 JUMP JUMPDEST PUSH2 0x771 SWAP1 PUSH1 0x5 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD SWAP2 PUSH1 0x20 DUP7 LT PUSH2 0x777 JUMPI JUMPDEST PUSH1 0x1F ADD PUSH1 0x5 SHR ADD SWAP1 PUSH2 0x9D1 JUMP JUMPDEST PUSH0 PUSH2 0x327 JUMP JUMPDEST SWAP1 SWAP2 POP DUP2 SWAP1 PUSH2 0x764 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x313 JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x2D7 JUMP JUMPDEST PUSH1 0x4 PUSH0 MSTORE PUSH1 0x20 PUSH0 KECCAK256 SWAP1 PUSH0 JUMPDEST PUSH1 0x1F NOT DUP5 AND DUP2 LT PUSH2 0x7F9 JUMPI POP PUSH1 0x1 SWAP4 SWAP5 SWAP6 SWAP7 DUP4 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0x7E1 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x4 SSTORE PUSH2 0x2EC JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x7D3 JUMP JUMPDEST SWAP1 SWAP2 PUSH1 0x20 PUSH1 0x1 DUP2 SWAP3 DUP6 DUP12 ADD MLOAD DUP2 SSTORE ADD SWAP4 ADD SWAP2 ADD PUSH2 0x7B5 JUMP JUMPDEST PUSH1 0x4 PUSH0 MSTORE PUSH2 0x859 SWAP1 PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B PUSH1 0x1F DUP5 ADD PUSH1 0x5 SHR DUP2 ADD SWAP2 PUSH1 0x20 DUP6 LT PUSH2 0x777 JUMPI PUSH1 0x1F ADD PUSH1 0x5 SHR ADD SWAP1 PUSH2 0x9D1 JUMP JUMPDEST PUSH0 PUSH2 0x2BD JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0x2AB JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0x275 JUMP JUMPDEST PUSH1 0x3 PUSH0 SWAP1 DUP2 MSTORE SWAP4 POP PUSH0 MLOAD PUSH1 0x20 PUSH2 0x4587 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE SWAP2 SWAP1 JUMPDEST PUSH1 0x1F NOT DUP5 AND DUP6 LT PUSH2 0x8CE JUMPI PUSH1 0x1 SWAP5 POP DUP4 PUSH1 0x1F NOT DUP2 AND LT PUSH2 0x8B6 JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH1 0x3 SSTORE PUSH2 0x28A JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0x8A8 JUMP JUMPDEST DUP2 DUP2 ADD MLOAD DUP4 SSTORE PUSH1 0x20 SWAP5 DUP6 ADD SWAP5 PUSH1 0x1 SWAP1 SWAP4 ADD SWAP3 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x88D JUMP JUMPDEST PUSH1 0x3 PUSH0 MSTORE PUSH2 0x91E SWAP1 PUSH0 MLOAD PUSH1 0x20 PUSH2 0x4587 PUSH0 CODECOPY PUSH0 MLOAD SWAP1 PUSH0 MSTORE PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR DUP2 ADD SWAP2 PUSH1 0x20 DUP7 LT PUSH2 0x777 JUMPI PUSH1 0x1F ADD PUSH1 0x5 SHR ADD SWAP1 PUSH2 0x9D1 JUMP JUMPDEST PUSH0 PUSH2 0x25F JUMP JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x24B JUMP JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP2 MLOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x10C JUMP JUMPDEST PUSH1 0x1F SWAP1 SWAP2 ADD PUSH1 0x1F NOT AND DUP2 ADD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT SWAP1 DUP3 LT OR PUSH2 0x680 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x92E JUMPI DUP1 MLOAD SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x680 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x999 PUSH1 0x1F DUP5 ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP6 PUSH2 0x942 JUMP JUMPDEST DUP3 DUP5 MSTORE PUSH1 0x20 DUP4 DUP4 ADD ADD GT PUSH2 0x92E JUMPI DUP2 PUSH0 SWAP3 PUSH1 0x20 DUP1 SWAP4 ADD DUP4 DUP7 ADD MCOPY DUP4 ADD ADD MSTORE SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x680 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST DUP2 DUP2 LT PUSH2 0x9DC JUMPI POP POP JUMP JUMPDEST PUSH0 DUP2 SSTORE PUSH1 0x1 ADD PUSH2 0x9D1 JUMP JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x53D JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0xA71 JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0xA33 JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0xA25 JUMPI POP OR SWAP1 JUMP JUMPDEST DUP3 PUSH0 NOT SWAP2 SUB PUSH1 0x3 SHL SHL AND OR SWAP1 JUMP JUMPDEST PUSH1 0x44 DUP3 PUSH1 0x40 MLOAD SWAP3 DUP4 SWAP2 PUSH4 0x305A27A9 PUSH1 0xE0 SHL DUP4 MSTORE DUP2 PUSH1 0x4 DUP5 ADD MSTORE DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 PUSH1 0x24 DUP7 ADD MSTORE ADD DUP5 DUP5 ADD MCOPY PUSH0 DUP3 DUP3 ADD DUP5 ADD MSTORE PUSH1 0x1F ADD PUSH1 0x1F NOT AND DUP2 ADD SUB ADD SWAP1 REVERT JUMPDEST SWAP1 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP3 GT PUSH2 0x680 JUMPI PUSH0 SLOAD SWAP3 PUSH1 0x1 SWAP4 DUP5 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0xB68 JUMPI JUMPDEST DUP4 DUP3 LT EQ PUSH2 0x781 JUMPI PUSH1 0x1F DUP2 GT PUSH2 0xB41 JUMPI JUMPDEST POP DUP2 PUSH1 0x1F DUP5 GT PUSH1 0x1 EQ PUSH2 0xADF JUMPI POP SWAP3 DUP3 SWAP4 SWAP2 DUP4 SWAP3 PUSH0 SWAP5 PUSH2 0xAD4 JUMPI JUMPDEST POP POP SHL SWAP2 PUSH0 NOT SWAP1 PUSH1 0x3 SHL SHR NOT AND OR PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP3 POP PUSH0 DUP1 PUSH2 0xABF JUMP JUMPDEST SWAP2 SWAP1 DUP4 PUSH1 0x1F NOT DUP2 AND PUSH0 DUP1 MSTORE DUP5 PUSH0 KECCAK256 SWAP5 PUSH0 SWAP1 JUMPDEST DUP9 DUP4 DUP4 LT PUSH2 0xB27 JUMPI POP POP POP LT PUSH2 0xB0F JUMPI JUMPDEST POP POP POP DUP2 SHL ADD PUSH0 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0xB02 JUMP JUMPDEST DUP6 DUP8 ADD MLOAD DUP9 SSTORE SWAP1 SWAP7 ADD SWAP6 SWAP5 DUP6 ADD SWAP5 DUP8 SWAP4 POP SWAP1 DUP2 ADD SWAP1 PUSH2 0xAF1 JUMP JUMPDEST PUSH2 0xB62 SWAP1 PUSH0 DUP1 MSTORE PUSH1 0x1F DUP5 PUSH0 KECCAK256 SWAP2 ADD PUSH1 0x5 SHR DUP2 ADD SWAP1 PUSH1 0x1F DUP7 ADD PUSH1 0x5 SHR ADD PUSH2 0x9D1 JUMP JUMPDEST PUSH0 PUSH2 0xAA4 JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xA93 JUMP JUMPDEST DUP1 MLOAD PUSH1 0x20 SWAP1 DUP2 DUP2 LT ISZERO PUSH2 0xB9C JUMPI POP PUSH1 0x1F DUP3 MLOAD GT PUSH2 0xA33 JUMPI DUP1 DUP3 MLOAD SWAP3 ADD MLOAD SWAP1 DUP1 DUP4 LT PUSH2 0xA25 JUMPI POP OR SWAP1 JUMP JUMPDEST SWAP2 SWAP3 SWAP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0x40 SHL SUB DUP2 GT PUSH2 0x680 JUMPI PUSH1 0x1 SWAP2 DUP3 SLOAD DUP4 DUP2 DUP2 SHR SWAP2 AND DUP1 ISZERO PUSH2 0xC92 JUMPI JUMPDEST DUP3 DUP3 LT EQ PUSH2 0x781 JUMPI PUSH1 0x1F DUP2 GT PUSH2 0xC6B JUMPI JUMPDEST POP DUP1 PUSH1 0x1F DUP4 GT PUSH1 0x1 EQ PUSH2 0xC0B JUMPI POP DUP2 SWAP3 SWAP4 SWAP5 PUSH0 SWAP3 PUSH2 0xC00 JUMPI JUMPDEST POP POP PUSH0 NOT PUSH1 0x3 DUP4 SWAP1 SHL SHR NOT AND SWAP1 DUP3 SHL OR SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD SWAP1 POP PUSH0 DUP1 PUSH2 0xBE9 JUMP JUMPDEST SWAP1 PUSH1 0x1F NOT DUP4 AND SWAP6 DUP5 PUSH0 MSTORE DUP3 PUSH0 KECCAK256 SWAP3 PUSH0 SWAP1 JUMPDEST DUP9 DUP3 LT PUSH2 0xC54 JUMPI POP POP DUP4 DUP6 SWAP7 SWAP8 LT PUSH2 0xC3C JUMPI JUMPDEST POP POP POP DUP2 SHL ADD SWAP1 SSTORE PUSH1 0xFF SWAP1 JUMP JUMPDEST ADD MLOAD PUSH0 NOT PUSH1 0xF8 DUP5 PUSH1 0x3 SHL AND SHR NOT AND SWAP1 SSTORE PUSH0 DUP1 DUP1 PUSH2 0xC2F JUMP JUMPDEST DUP1 DUP8 DUP6 SWAP7 DUP3 SWAP5 SWAP7 DUP7 ADD MLOAD DUP2 SSTORE ADD SWAP6 ADD SWAP4 ADD SWAP1 PUSH2 0xC1C JUMP JUMPDEST PUSH2 0xC8C SWAP1 DUP5 PUSH0 MSTORE PUSH1 0x1F DUP4 PUSH0 KECCAK256 SWAP2 ADD PUSH1 0x5 SHR DUP2 ADD SWAP1 PUSH1 0x1F DUP6 ADD PUSH1 0x5 SHR ADD PUSH2 0x9D1 JUMP JUMPDEST PUSH0 PUSH2 0xBD0 JUMP JUMPDEST SWAP1 PUSH1 0x7F AND SWAP1 PUSH2 0xBBF JUMP INVALID PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH1 0xE0 PUSH0 CALLDATALOAD DUP2 SHR SWAP3 DUP4 PUSH4 0x1FFC9A7 EQ PUSH2 0x1F59 JUMPI POP DUP3 PUSH4 0x6FDDE03 EQ PUSH2 0x1EAA JUMPI DUP3 PUSH4 0x95EA7B3 EQ PUSH2 0x1E2C JUMPI DUP3 PUSH4 0x16A0B3E0 EQ PUSH2 0x1BF3 JUMPI DUP3 PUSH4 0x18160DDD EQ PUSH2 0x1BD7 JUMPI DUP3 PUSH4 0x19F32CCD EQ PUSH2 0x1B98 JUMPI DUP3 PUSH4 0x23B872DD EQ PUSH2 0x1AF0 JUMPI DUP3 PUSH4 0x23DE6651 EQ PUSH2 0x1ABE JUMPI DUP3 PUSH4 0x273C1ADF EQ PUSH2 0x1A9C JUMPI DUP3 PUSH4 0x30ADF81F EQ PUSH2 0x1A62 JUMPI DUP3 PUSH4 0x313CE567 EQ PUSH2 0x1A47 JUMPI DUP3 PUSH4 0x3644E515 EQ PUSH2 0x1A2B JUMPI DUP3 PUSH4 0x3F3353DE EQ PUSH2 0x18B7 JUMPI DUP3 PUSH4 0x53B79BD7 EQ PUSH2 0x16FB JUMPI DUP3 PUSH4 0x54FD4D50 EQ PUSH2 0x160B JUMPI DUP3 PUSH4 0x5687F2B8 EQ PUSH2 0x15AC JUMPI DUP3 PUSH4 0x627CDCB9 EQ PUSH2 0x1583 JUMPI DUP3 PUSH4 0x654CF15D EQ PUSH2 0x1561 JUMPI DUP3 PUSH4 0x679AEFCE EQ PUSH2 0x152A JUMPI DUP3 PUSH4 0x70A08231 EQ PUSH2 0x1456 JUMPI DUP3 PUSH4 0x72C98186 EQ PUSH2 0x1335 JUMPI DUP3 PUSH4 0x7ECEBE00 EQ PUSH2 0x12F1 JUMPI DUP3 PUSH4 0x81FA807C EQ PUSH2 0x1230 JUMPI DUP3 PUSH4 0x84B0196E EQ PUSH2 0x1127 JUMPI DUP3 PUSH4 0x8D928AF8 EQ PUSH2 0x10D7 JUMPI DUP3 PUSH4 0x95D89B41 EQ PUSH2 0xFD1 JUMPI DUP3 PUSH4 0x984DE9E8 EQ PUSH2 0xE0F JUMPI DUP3 PUSH4 0xA9059CBB EQ PUSH2 0xCFC JUMPI DUP3 PUSH4 0xAA6CA808 EQ PUSH2 0xC37 JUMPI DUP3 PUSH4 0xABB1DC44 EQ PUSH2 0x9CE JUMPI DUP3 PUSH4 0xB156AA0A EQ PUSH2 0x907 JUMPI DUP3 PUSH4 0xB677FA56 EQ PUSH2 0x8E5 JUMPI DUP3 PUSH4 0xC0BC6F33 EQ PUSH2 0x60C JUMPI DUP3 PUSH4 0xCE20ECE7 EQ PUSH2 0x5EC JUMPI DUP3 PUSH4 0xD335B0CF EQ PUSH2 0x559 JUMPI DUP3 PUSH4 0xD505ACCF EQ PUSH2 0x2EE JUMPI POP DUP2 PUSH4 0xDD62ED3E EQ PUSH2 0x1FB JUMPI POP PUSH4 0xF89F27ED EQ PUSH2 0x1C4 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH2 0x1F3 SWAP1 PUSH2 0x1E0 PUSH2 0x29BD JUMP JUMPDEST SWAP1 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x2170 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x1F7 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH2 0x216 PUSH2 0x1FE5 JUMP JUMPDEST PUSH1 0x64 PUSH2 0x220 PUSH2 0x2008 JUMP JUMPDEST SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP1 SWAP8 DUP8 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 PUSH32 0x927DA10500000000000000000000000000000000000000000000000000000000 DUP8 MSTORE ADDRESS SWAP1 DUP8 ADD MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE AND PUSH1 0x44 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E5 JUMPI PUSH0 SWAP2 PUSH2 0x2B0 JUMPI JUMPDEST PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x2DD JUMPI JUMPDEST DUP2 PUSH2 0x2CB PUSH1 0x20 SWAP4 DUP4 PUSH2 0x2093 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 SWAP2 MLOAD SWAP1 PUSH2 0x2A6 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2BE JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 SWAP1 CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH2 0x307 PUSH2 0x1FE5 JUMP JUMPDEST SWAP1 PUSH2 0x310 PUSH2 0x2008 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP3 PUSH1 0x84 CALLDATALOAD SWAP1 PUSH1 0x64 CALLDATALOAD PUSH1 0xFF DUP4 AND DUP4 SUB PUSH2 0x1F7 JUMPI DUP1 TIMESTAMP GT PUSH2 0x52F JUMPI PUSH2 0x35D DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH1 0x1 DUP3 ADD SWAP1 SSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x429 PUSH2 0x420 DUP8 MLOAD SWAP6 PUSH1 0x20 DUP8 ADD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP8 DUP9 SWAP6 DUP7 DUP10 AND SWAP8 DUP9 DUP14 DUP5 ADD MSTORE DUP8 DUP13 AND PUSH1 0x60 DUP5 ADD MSTORE DUP14 PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 MSTORE PUSH2 0x3D4 DUP2 PUSH2 0x205B JUMP JUMPDEST MLOAD SWAP1 KECCAK256 PUSH2 0x3DF PUSH2 0x2885 JUMP JUMPDEST SWAP1 DUP11 MLOAD SWAP2 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x2 DUP4 ADD MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0xC4 CALLDATALOAD SWAP2 PUSH1 0x42 PUSH1 0xA4 CALLDATALOAD SWAP3 KECCAK256 PUSH2 0x2DC6 JUMP JUMPDEST SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x2E55 JUMP JUMPDEST AND DUP2 DUP2 SUB PUSH2 0x502 JUMPI POP POP PUSH0 DUP5 SWAP6 SWAP7 PUSH2 0x49A PUSH1 0x20 SWAP7 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP7 MSTORE DUP6 ADD PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 SWAP5 PUSH1 0x60 DUP3 ADD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP4 MSTORE AND PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2E5 JUMPI POP PUSH2 0x4CE JUMPI STOP JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x4FA JUMPI JUMPDEST DUP2 PUSH2 0x4E7 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x2093 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI PUSH2 0x4F8 SWAP1 PUSH2 0x2242 JUMP JUMPDEST STOP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x4DA JUMP JUMPDEST DUP8 PUSH32 0x4B800E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP7 PUSH32 0x6279130200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI DUP1 MLOAD SWAP2 PUSH32 0xB45090F900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E5 JUMPI PUSH0 SWAP2 PUSH2 0x2B0 JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH6 0x9184E72A000 DUP2 MSTORE RETURN JUMPDEST SWAP2 POP CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI DUP3 MLOAD PUSH2 0x629 DUP2 PUSH2 0x205B JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 DUP3 ADD SWAP2 PUSH1 0x60 DUP4 MSTORE DUP6 DUP2 ADD SWAP3 PUSH0 DUP5 MSTORE PUSH1 0x60 DUP3 ADD PUSH0 DUP2 MSTORE PUSH1 0x80 DUP4 ADD SWAP2 PUSH0 DUP4 MSTORE PUSH1 0xA0 DUP5 ADD SWAP4 PUSH0 DUP6 MSTORE PUSH1 0xC0 DUP2 ADD SWAP6 PUSH0 DUP8 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 DUP12 MLOAD PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x895 JUMPI PUSH0 SWAP2 PUSH2 0x8C3 JUMPI JUMPDEST POP DUP4 MSTORE DUP12 MLOAD PUSH32 0x7E361BDE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x895 JUMPI PUSH0 SWAP2 PUSH2 0x89F JUMPI JUMPDEST POP DUP5 MSTORE DUP12 MLOAD PUSH32 0xB45090F900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE DUP11 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x895 JUMPI PUSH0 SWAP2 PUSH2 0x868 JUMPI JUMPDEST POP DUP10 MSTORE PUSH2 0x767 PUSH2 0x2298 JUMP JUMPDEST DUP6 MSTORE DUP12 MLOAD SWAP2 DUP3 SWAP2 PUSH32 0xF29486A100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE DUP2 PUSH1 0x24 PUSH2 0x1A0 SWAP5 DUP6 SWAP4 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x85E JUMPI SWAP3 DUP12 SWAP13 SWAP3 PUSH2 0x7F6 SWAP3 PUSH2 0x809 SWAP7 SWAP6 PUSH0 SWAP15 SWAP13 SWAP14 SWAP15 SWAP3 PUSH2 0x831 JUMPI JUMPDEST POP POP DUP11 DUP2 ADD MLOAD ISZERO ISZERO DUP9 MSTORE PUSH2 0x120 PUSH2 0x100 SWAP2 DUP3 DUP2 ADD MLOAD ISZERO ISZERO DUP12 MSTORE ADD MLOAD ISZERO ISZERO DUP11 MSTORE DUP4 MLOAD SWAP14 DUP14 DUP16 SWAP15 SWAP4 DUP16 SWAP5 DUP6 MSTORE MLOAD SWAP4 ADD MSTORE DUP13 ADD SWAP1 PUSH2 0x2170 JUMP JUMPDEST SWAP2 MLOAD SWAP1 PUSH1 0x1F NOT DUP12 DUP5 SUB ADD SWAP1 DUP12 ADD MSTORE PUSH2 0x2170 JUMP JUMPDEST SWAP6 MLOAD PUSH1 0x60 DUP9 ADD MSTORE MLOAD PUSH1 0x80 DUP8 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xA0 DUP7 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xC0 DUP6 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST PUSH2 0x850 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x857 JUMPI JUMPDEST PUSH2 0x848 DUP2 DUP4 PUSH2 0x2093 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x268D JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x7C0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x83E JUMP JUMPDEST DUP13 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 POP DUP11 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x88E JUMPI JUMPDEST PUSH2 0x87F DUP2 DUP4 PUSH2 0x2093 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI MLOAD PUSH0 PUSH2 0x75C JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x875 JUMP JUMPDEST DUP14 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x8BB SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x8B3 DUP2 DUP4 PUSH2 0x2093 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x24AC JUMP JUMPDEST SWAP1 POP PUSH0 PUSH2 0x719 JUMP JUMPDEST PUSH2 0x8DF SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x8D7 DUP2 DUP4 PUSH2 0x2093 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x27AF JUMP JUMPDEST PUSH0 PUSH2 0x6D6 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH8 0x9B6E64A8EC60000 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI DUP2 MLOAD SWAP1 PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS SWAP1 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x9C4 JUMPI SWAP2 PUSH2 0x1F3 SWAP3 PUSH0 SWAP3 PUSH2 0x9A8 JUMPI JUMPDEST POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x2170 JUMP JUMPDEST PUSH2 0x9BD SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x8D7 DUP2 DUP4 PUSH2 0x2093 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x995 JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD SWAP2 PUSH32 0x67E0E07600000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH0 DUP3 PUSH1 0x24 DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xC2D JUMPI PUSH0 SWAP4 PUSH0 SWAP3 PUSH0 SWAP3 PUSH0 SWAP6 PUSH2 0xB03 JUMPI JUMPDEST POP SWAP1 PUSH2 0xA7B SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP2 MLOAD SWAP7 DUP8 SWAP7 PUSH1 0x80 DUP9 MSTORE PUSH1 0x80 DUP9 ADD SWAP1 PUSH2 0x21A3 JUMP JUMPDEST PUSH1 0x20 DUP8 DUP3 SUB DUP2 DUP10 ADD MSTORE DUP1 DUP1 DUP8 MLOAD SWAP4 DUP5 DUP2 MSTORE ADD SWAP7 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0xABF JUMPI DUP10 DUP9 SUB DUP7 DUP12 ADD MSTORE DUP10 DUP1 PUSH2 0x1F3 DUP12 PUSH2 0xAB1 DUP13 DUP13 PUSH2 0x2170 JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x2170 JUMP JUMPDEST SWAP2 DUP5 SWAP9 SWAP10 POP PUSH1 0x60 DUP7 SWAP8 SWAP9 PUSH1 0x1 SWAP4 SWAP6 SWAP8 DUP4 SWAP8 MLOAD DUP1 MLOAD PUSH2 0xADC DUP2 PUSH2 0x21EC JUMP JUMPDEST DUP4 MSTORE DUP7 DUP6 DUP3 ADD MLOAD AND DUP6 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO DUP10 DUP3 ADD MSTORE ADD SWAP9 ADD SWAP3 ADD DUP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 PUSH2 0xA93 JUMP JUMPDEST SWAP6 POP SWAP4 POP SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP6 RETURNDATACOPY PUSH2 0xB19 DUP2 DUP6 PUSH2 0x2093 JUMP JUMPDEST DUP4 ADD SWAP3 PUSH1 0x80 DUP2 DUP6 SUB SLT PUSH2 0x1F7 JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x1F7 JUMPI DUP6 PUSH2 0xB46 SWAP2 DUP5 ADD PUSH2 0x23A4 JUMP JUMPDEST SWAP2 PUSH1 0x20 SWAP6 DUP7 DUP3 ADD MLOAD DUP6 DUP2 GT PUSH2 0x1F7 JUMPI DUP3 ADD DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x1F7 JUMPI DUP1 MLOAD SWAP1 PUSH2 0xB6E DUP3 PUSH2 0x20B6 JUMP JUMPDEST SWAP9 PUSH2 0xB7B DUP7 MLOAD SWAP11 DUP12 PUSH2 0x2093 JUMP JUMPDEST DUP3 DUP11 MSTORE DUP1 DUP11 ADD DUP2 PUSH1 0x60 DUP1 SWAP6 MUL DUP5 ADD ADD SWAP3 DUP6 DUP5 GT PUSH2 0x1F7 JUMPI DUP3 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0xBDB JUMPI POP POP POP POP POP DUP3 DUP3 ADD MLOAD DUP6 DUP2 GT PUSH2 0x1F7 JUMPI DUP2 PUSH2 0xBB9 SWAP2 DUP5 ADD PUSH2 0x244B JUMP JUMPDEST SWAP5 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x1F7 JUMPI PUSH2 0xBD0 SWAP3 ADD PUSH2 0x244B JUMP JUMPDEST SWAP2 SWAP5 SWAP3 SWAP2 SWAP4 DUP7 PUSH2 0xA5E JUMP JUMPDEST DUP5 DUP3 DUP8 SUB SLT PUSH2 0x1F7 JUMPI DUP8 MLOAD SWAP1 PUSH2 0xBF0 DUP3 PUSH2 0x202B JUMP JUMPDEST DUP3 MLOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1F7 JUMPI DUP3 MSTORE DUP4 DUP4 ADD MLOAD SWAP1 DUP13 DUP3 AND DUP3 SUB PUSH2 0x1F7 JUMPI DUP3 DUP6 SWAP3 DUP4 DUP10 SWAP6 ADD MSTORE PUSH2 0xC1E DUP12 DUP7 ADD PUSH2 0x2242 JUMP JUMPDEST DUP12 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0xB96 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI DUP2 MLOAD SWAP1 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS SWAP1 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x9C4 JUMPI SWAP2 PUSH2 0x1F3 SWAP3 PUSH0 SWAP3 PUSH2 0xCD8 JUMPI JUMPDEST POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x21A3 JUMP JUMPDEST PUSH2 0xCF5 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xCED DUP2 DUP4 PUSH2 0x2093 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2422 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0xCC5 JUMP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1F7 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH2 0xD7A SWAP3 PUSH2 0xD1C PUSH2 0x1FE5 JUMP JUMPDEST DUP4 MLOAD PUSH32 0xBEABACC800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xE05 JUMPI PUSH2 0xDCB JUMPI JUMPDEST PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xDFD JUMPI JUMPDEST DUP2 PUSH2 0xDE4 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x2093 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI PUSH2 0xDF7 PUSH1 0x20 SWAP3 PUSH2 0x2242 JUMP JUMPDEST POP PUSH2 0xDC1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xDD7 JUMP JUMPDEST POP MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1F7 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1F7 JUMPI PUSH2 0xE3F SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x20CE JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1F7 JUMPI PUSH2 0xE54 DUP2 PUSH2 0x21EC JUMP JUMPDEST PUSH2 0xFCA JUMPI DUP3 JUMPDEST PUSH2 0xE62 PUSH2 0x29BD JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x3 EQ PUSH2 0xF75 JUMPI DUP1 PUSH1 0x4 EQ PUSH2 0xEEE JUMPI DUP1 PUSH1 0x1 EQ PUSH2 0xEAB JUMPI PUSH1 0x2 EQ PUSH2 0xE95 JUMPI PUSH1 0x51 DUP5 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x20 SWAP4 POP SWAP1 PUSH2 0xEA3 SWAP2 PUSH2 0x2F00 JUMP JUMPDEST SWAP1 JUMPDEST MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 SWAP3 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0xEDB JUMPI POP PUSH1 0x20 SWAP3 PUSH2 0xED5 SWAP2 PUSH2 0x2A72 JUMP JUMPDEST SWAP1 PUSH2 0xEA5 JUMP JUMPDEST PUSH1 0x11 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP3 PUSH0 SWAP2 SWAP1 PUSH8 0xDE0B6B3A7640000 JUMPDEST DUP6 MLOAD DUP5 LT ISZERO PUSH2 0xF39 JUMPI PUSH2 0xF31 PUSH1 0x1 SWAP2 PUSH2 0xF2B PUSH2 0xF19 DUP8 DUP8 PUSH2 0x2284 JUMP JUMPDEST MLOAD PUSH2 0xF24 DUP9 DUP12 PUSH2 0x2284 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x2A90 JUMP JUMPDEST SWAP1 PUSH2 0x2B1B JUMP JUMPDEST SWAP4 ADD SWAP3 PUSH2 0xEFD JUMP JUMPDEST SWAP3 POP SWAP4 POP POP DUP1 ISZERO PUSH2 0xF4E JUMPI PUSH1 0x20 SWAP3 POP SWAP1 PUSH2 0xEA5 JUMP JUMPDEST DUP3 PUSH32 0x2654368900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP SWAP3 PUSH0 SWAP2 SWAP1 PUSH8 0xDE0B6B3A7640000 JUMPDEST DUP6 MLOAD DUP5 LT ISZERO PUSH2 0xF39 JUMPI PUSH8 0xDE0B6B3A7640000 PUSH2 0xFC1 PUSH1 0x1 SWAP3 PUSH2 0xFBB PUSH2 0xFA9 DUP9 DUP9 PUSH2 0x2284 JUMP JUMPDEST MLOAD PUSH2 0xFB4 DUP10 DUP13 PUSH2 0x2284 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x2D2D JUMP JUMPDEST SWAP1 PUSH2 0x2A5F JUMP JUMPDEST DIV SWAP4 ADD SWAP3 PUSH2 0xF84 JUMP JUMPDEST PUSH1 0x3 PUSH2 0xE5A JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI DUP2 MLOAD SWAP2 DUP3 PUSH0 DUP4 SLOAD PUSH2 0xFF3 DUP2 PUSH2 0x220A JUMP JUMPDEST SWAP1 DUP2 DUP5 MSTORE PUSH1 0x20 SWAP6 PUSH1 0x1 SWAP2 DUP8 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x1092 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1036 JUMPI JUMPDEST POP POP POP PUSH2 0x1F3 SWAP3 SWAP2 PUSH2 0x1027 SWAP2 SUB DUP6 PUSH2 0x2093 JUMP JUMPDEST MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1FC0 JUMP JUMPDEST PUSH0 SWAP1 DUP2 MSTORE DUP7 SWAP4 POP SWAP2 SWAP1 PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B JUMPDEST DUP3 DUP5 LT PUSH2 0x107A JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x1027 PUSH2 0x1F3 PUSH2 0x1014 JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x1061 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 DUP3 ADD MSTORE SWAP4 ISZERO ISZERO PUSH1 0x5 SHL DUP7 ADD SWAP1 SWAP4 ADD SWAP4 POP DUP5 SWAP3 POP PUSH2 0x1027 SWAP2 POP PUSH2 0x1F3 SWAP1 POP PUSH2 0x1014 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP2 POP CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH2 0x1162 PUSH32 0x0 PUSH2 0x2B3D JUMP JUMPDEST SWAP3 PUSH2 0x118C PUSH32 0x0 PUSH2 0x2C6F JUMP JUMPDEST DUP2 MLOAD SWAP3 PUSH1 0x20 DUP5 ADD SWAP1 DUP5 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x121D JUMPI POP SWAP2 PUSH2 0x11FD SWAP2 PUSH2 0x1F3 SWAP5 SWAP4 DUP3 MSTORE PUSH0 DUP5 MSTORE PUSH2 0x11F0 DUP3 MLOAD SWAP8 DUP9 SWAP8 PUSH32 0xF00000000000000000000000000000000000000000000000000000000000000 DUP10 MSTORE DUP1 PUSH1 0x20 DUP11 ADD MSTORE DUP9 ADD SWAP1 PUSH2 0x1FC0 JUMP JUMPDEST SWAP2 DUP7 DUP4 SUB SWAP1 DUP8 ADD MSTORE PUSH2 0x1FC0 JUMP JUMPDEST SWAP1 CHAINID PUSH1 0x60 DUP6 ADD MSTORE ADDRESS PUSH1 0x80 DUP6 ADD MSTORE PUSH0 PUSH1 0xA0 DUP6 ADD MSTORE DUP4 DUP3 SUB PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x2170 JUMP JUMPDEST PUSH1 0x41 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI DUP2 MLOAD SWAP1 PUSH32 0xF29486A100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 SWAP1 DUP2 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xC2D JUMPI PUSH0 SWAP3 PUSH2 0x12D4 JUMPI JUMPDEST POP POP PUSH1 0x60 DUP3 DUP3 ADD MLOAD SWAP2 ADD MLOAD DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH2 0x12EA SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x857 JUMPI PUSH2 0x848 DUP2 DUP4 PUSH2 0x2093 JUMP JUMPDEST DUP3 DUP1 PUSH2 0x12BD JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1323 PUSH2 0x1FE5 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x20 SWAP3 PUSH1 0x3 NOT DUP5 DUP2 CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP5 GT PUSH2 0x1F7 JUMPI DUP4 CALLDATASIZE SUB ADD SLT PUSH2 0x1F7 JUMPI DUP4 MLOAD SWAP2 PUSH2 0x1374 DUP4 PUSH2 0x205B JUMP JUMPDEST DUP1 DUP5 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1F7 JUMPI DUP4 MSTORE PUSH1 0x24 DUP2 ADD CALLDATALOAD DUP7 DUP5 ADD MSTORE PUSH1 0x44 DUP2 ADD CALLDATALOAD DUP3 DUP2 GT PUSH2 0x1F7 JUMPI PUSH2 0x13A7 SWAP1 DUP6 CALLDATASIZE SWAP2 DUP5 ADD ADD PUSH2 0x20CE JUMP JUMPDEST DUP6 DUP5 ADD MSTORE PUSH1 0x64 DUP2 ADD CALLDATALOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x84 DUP2 ADD CALLDATALOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA4 DUP2 ADD CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1F7 JUMPI PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC4 DUP2 ADD CALLDATALOAD SWAP1 DUP3 DUP3 GT PUSH2 0x1F7 JUMPI ADD SWAP3 CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0x1F7 JUMPI DUP1 DUP5 ADD CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x121D JUMPI POP DUP4 MLOAD SWAP1 PUSH2 0x1422 DUP7 PUSH1 0x1F NOT PUSH1 0x1F DUP5 ADD AND ADD DUP4 PUSH2 0x2093 JUMP JUMPDEST DUP1 DUP3 MSTORE CALLDATASIZE PUSH1 0x24 DUP3 DUP7 ADD ADD GT PUSH2 0x1F7 JUMPI DUP6 DUP2 PUSH0 SWAP3 PUSH1 0x24 PUSH2 0xEA3 SWAP8 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x1451 PUSH2 0x281A JUMP JUMPDEST PUSH2 0x24F0 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI DUP3 PUSH2 0x1474 PUSH2 0x1FE5 JUMP JUMPDEST PUSH1 0x44 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP6 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP4 PUSH32 0xF7888AEC00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS SWAP1 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xE05 JUMPI PUSH0 SWAP3 PUSH2 0x14FB JUMPI JUMPDEST POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP DUP3 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1523 JUMPI JUMPDEST PUSH2 0x1513 DUP2 DUP4 PUSH2 0x2093 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI MLOAD SWAP1 DUP4 PUSH2 0x14F4 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1509 JUMP JUMPDEST POP CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH32 0x18E79A2000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH8 0x16345785D8A0000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI CALLER PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD SWAP1 SWAP2 SSTORE STOP JUMPDEST DUP4 CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH2 0x15DE CALLDATASIZE PUSH2 0x212E JUMP JUMPDEST SWAP4 SWAP2 SWAP5 PUSH2 0x15E9 PUSH2 0x281A JUMP JUMPDEST MLOAD SWAP4 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP5 AND SWAP3 LOG3 STOP JUMPDEST DUP4 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI DUP1 MLOAD PUSH1 0x5 SLOAD SWAP1 SWAP2 DUP3 PUSH0 PUSH2 0x162E DUP5 PUSH2 0x220A JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 SWAP5 PUSH1 0x1 SWAP1 DUP7 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x16BB JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1660 JUMPI JUMPDEST POP POP PUSH2 0x1F3 SWAP3 SWAP2 PUSH2 0x1027 SWAP2 SUB DUP6 PUSH2 0x2093 JUMP JUMPDEST SWAP1 DUP6 SWAP3 POP PUSH1 0x5 PUSH0 MSTORE PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 SWAP2 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x16A3 JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x1027 PUSH2 0x164E JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x168D JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 DUP3 ADD MSTORE SWAP3 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD SWAP1 SWAP3 ADD SWAP3 POP DUP4 SWAP2 POP PUSH2 0x1027 SWAP1 POP PUSH2 0x164E JUMP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x1719 DUP3 PUSH2 0x202B JUMP JUMPDEST PUSH1 0x60 DUP3 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP4 ADD SWAP2 PUSH1 0x60 DUP4 MSTORE DUP2 DUP5 ADD SWAP3 PUSH1 0x60 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 PUSH32 0x0 AND SWAP1 DUP5 MLOAD PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x18AD JUMPI SWAP1 PUSH0 SWAP3 SWAP2 DUP4 SWAP2 PUSH2 0x1893 JUMPI JUMPDEST POP DUP9 MSTORE PUSH1 0x24 DUP7 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x7E361BDE00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1889 JUMPI PUSH0 SWAP2 PUSH2 0x1870 JUMPI JUMPDEST POP DUP2 SWAP6 SWAP3 SWAP6 MSTORE PUSH2 0x17FF PUSH2 0x29BD JUMP JUMPDEST DUP5 MSTORE DUP3 MLOAD SWAP5 DUP1 DUP7 MSTORE PUSH1 0x80 DUP7 ADD SWAP3 MLOAD SWAP3 PUSH1 0x60 DUP3 DUP9 ADD MSTORE DUP4 MLOAD DUP1 SWAP2 MSTORE DUP2 PUSH1 0xA0 DUP9 ADD SWAP5 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x185A JUMPI DUP9 DUP1 PUSH2 0x1F3 DUP11 DUP11 PUSH2 0x1849 DUP12 DUP12 MLOAD PUSH1 0x1F NOT SWAP4 DUP5 DUP9 DUP5 SUB ADD SWAP1 DUP9 ADD MSTORE PUSH2 0x2170 JUMP JUMPDEST SWAP2 MLOAD SWAP1 DUP5 DUP4 SUB ADD PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x2170 JUMP JUMPDEST DUP4 MLOAD DUP11 AND DUP7 MSTORE SWAP5 DUP2 ADD SWAP5 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1823 JUMP JUMPDEST PUSH2 0x1884 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x8B3 DUP2 DUP4 PUSH2 0x2093 JUMP JUMPDEST PUSH2 0x17F1 JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x18A7 SWAP2 POP RETURNDATASIZE DUP1 DUP6 DUP4 RETURNDATACOPY PUSH2 0xCED DUP2 DUP4 PUSH2 0x2093 JUMP JUMPDEST DUP11 PUSH2 0x17AE JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1F7 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI CALLDATASIZE PUSH1 0x23 SLT ISZERO PUSH2 0x1F7 JUMPI DUP2 MLOAD DUP3 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1A18 JUMPI DUP4 MSTORE PUSH1 0x44 DUP2 CALLDATASIZE DUP3 GT PUSH2 0x1F7 JUMPI DUP4 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1A08 JUMPI POP POP POP DUP1 MLOAD SWAP3 PUSH8 0xDE0B6B3A7640000 PUSH2 0x191F PUSH1 0x20 DUP5 ADD SWAP6 DUP7 MLOAD SWAP1 PUSH2 0x2383 JUMP JUMPDEST SUB PUSH2 0x19AC JUMPI POP MLOAD SWAP2 PUSH1 0x6 SLOAD SWAP3 DUP4 ISZERO PUSH2 0x1999 JUMPI PUSH1 0x6 PUSH0 MSTORE PUSH32 0xF652222313E28459528D920B65115C16C04F3EFC82AAEDC97BE59F3F377C0D3F SSTORE MLOAD SWAP2 PUSH1 0x1 LT ISZERO PUSH2 0x1986 JUMPI POP PUSH32 0xF652222313E28459528D920B65115C16C04F3EFC82AAEDC97BE59F3F377C0D40 SSTORE STOP JUMPDEST PUSH1 0x32 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x32 DUP4 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 DUP5 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5765696768747320646F6E277420746F74616C20310000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x18F9 JUMP JUMPDEST PUSH1 0x41 DUP4 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 SWAP1 PUSH2 0xEA3 PUSH2 0x2885 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH8 0x29A2241AF62C0000 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH2 0x15DE CALLDATASIZE PUSH2 0x212E JUMP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH0 PUSH1 0x84 PUSH2 0x1B05 CALLDATASIZE PUSH2 0x212E JUMP JUMPDEST DUP7 MLOAD PUSH32 0x15DACBEA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP9 DUP2 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x24 DUP10 ADD MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP9 ADD MSTORE PUSH1 0x64 DUP8 ADD MSTORE DUP6 SWAP3 DUP4 SWAP2 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xE05 JUMPI PUSH2 0xDCB JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI CALLDATALOAD PUSH1 0x6 SLOAD DUP2 LT PUSH2 0x1BB5 JUMPI STOP JUMPDEST PUSH2 0x1BBE SWAP1 PUSH2 0x234E JUMP JUMPDEST DUP2 SLOAD SWAP1 PUSH1 0x3 SHL SWAP1 PUSH0 NOT PUSH1 0x24 CALLDATALOAD DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 SWAP1 PUSH2 0xEA3 PUSH2 0x2298 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1F7 JUMPI PUSH2 0x1C24 SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0x20CE JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD SWAP3 PUSH2 0x1C40 PUSH2 0x1C39 DUP6 PUSH1 0x44 CALLDATALOAD SWAP4 PUSH2 0x2284 JUMP JUMPDEST MLOAD SWAP5 PUSH2 0x27D5 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP2 DUP4 GT ISZERO PUSH2 0x1E26 JUMPI PUSH1 0x2 JUMPDEST DUP1 PUSH1 0x3 EQ PUSH2 0x1DB0 JUMPI DUP1 PUSH1 0x4 EQ PUSH2 0x1D17 JUMPI DUP1 PUSH1 0x1 EQ PUSH2 0x1CD5 JUMPI PUSH1 0x2 EQ PUSH2 0x1C80 JUMPI PUSH1 0x51 DUP6 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 DUP2 ISZERO PUSH2 0x1CAF JUMPI POP PUSH2 0xEA3 SWAP3 PUSH1 0x20 SWAP6 SWAP3 PUSH2 0xF2B SWAP3 PUSH15 0xC097CE7BC90715B34B9F0FFFFFFFFF DIV ADD SWAP1 PUSH2 0x2A90 JUMP JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP DUP1 SWAP3 SWAP4 SWAP5 SWAP2 POP ISZERO PUSH2 0x1D04 JUMPI POP SWAP3 PUSH2 0xF2B PUSH2 0xEA3 SWAP3 PUSH1 0x20 SWAP6 PUSH15 0xC097CE7BC90715B34B9F1000000000 DIV SWAP1 PUSH2 0x2A90 JUMP JUMPDEST PUSH1 0x12 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP2 SWAP3 SWAP4 SWAP1 DUP1 PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH0 SWAP3 JUMPDEST PUSH2 0x1D70 JUMPI JUMPDEST POP POP POP DUP2 ISZERO PUSH2 0x1D4A JUMPI POP SWAP3 PUSH2 0xF2B PUSH2 0xEA3 SWAP3 PUSH1 0x20 SWAP6 SWAP1 PUSH2 0x2A90 JUMP JUMPDEST PUSH32 0x2654368900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 SWAP2 SWAP4 PUSH8 0xDE0B6B3A7640000 MLOAD DUP6 LT ISZERO PUSH2 0x1DAA JUMPI SWAP1 DUP3 PUSH2 0x1DA2 DUP2 SWAP4 PUSH2 0xF2B PUSH2 0x1D98 DUP10 DUP7 PUSH2 0x2284 JUMP JUMPDEST MLOAD PUSH2 0xF24 DUP11 PUSH2 0x224F JUMP JUMPDEST SWAP6 ADD SWAP3 PUSH2 0x1D2A JUMP JUMPDEST SWAP4 PUSH2 0x1D2F JUMP JUMPDEST POP SWAP2 SWAP3 SWAP4 SWAP1 DUP1 PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH0 SWAP3 JUMPDEST PUSH2 0x1DE2 JUMPI POP POP POP DUP2 ISZERO PUSH2 0x1D4A JUMPI POP SWAP3 PUSH2 0xF2B PUSH2 0xEA3 SWAP3 PUSH1 0x20 SWAP6 SWAP1 PUSH2 0x2A90 JUMP JUMPDEST SWAP1 SWAP2 SWAP4 PUSH8 0xDE0B6B3A7640000 MLOAD DUP6 LT ISZERO PUSH2 0x1DAA JUMPI SWAP1 DUP3 PUSH8 0xDE0B6B3A7640000 PUSH2 0x1E1D DUP3 SWAP5 PUSH2 0xFBB PUSH2 0x1E13 DUP11 DUP8 PUSH2 0x2284 JUMP JUMPDEST MLOAD PUSH2 0xFB4 DUP12 PUSH2 0x224F JUMP JUMPDEST DIV SWAP6 ADD SWAP3 PUSH2 0x1DC3 JUMP JUMPDEST DUP2 PUSH2 0x1C4E JUMP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1F7 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH2 0xD7A SWAP3 PUSH2 0x1E4C PUSH2 0x1FE5 JUMP JUMPDEST DUP4 MLOAD PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI DUP1 MLOAD PUSH1 0x3 SLOAD SWAP1 SWAP2 DUP3 PUSH0 PUSH2 0x1ECD DUP5 PUSH2 0x220A JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 SWAP5 PUSH1 0x1 SWAP1 DUP7 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x16BB JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1EFE JUMPI POP POP PUSH2 0x1F3 SWAP3 SWAP2 PUSH2 0x1027 SWAP2 SUB DUP6 PUSH2 0x2093 JUMP JUMPDEST SWAP1 DUP6 SWAP3 POP PUSH1 0x3 PUSH0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP2 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x1F41 JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x1027 PUSH2 0x164E JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x1F2B JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x1F7 JUMPI PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP3 EQ DUP2 MSTORE RETURN JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1F7 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1F7 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2047 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0xE0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2047 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2047 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2047 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2047 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x1F7 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x20E8 DUP2 PUSH2 0x20B6 JUMP JUMPDEST SWAP4 PUSH2 0x20F6 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x2093 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x1F7 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x211F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x2111 JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x1F7 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x1F7 JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x1F7 JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x218F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2181 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x21C2 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x21B4 JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x21F6 JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x2238 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x2224 JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x2219 JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x1F7 JUMPI JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 MLOAD DUP2 LT ISZERO PUSH2 0x2270 JUMPI PUSH1 0x5 SHL PUSH8 0xDE0B6B3A7640020 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x2270 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xE4DC2AA400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2343 JUMPI PUSH0 SWAP2 PUSH2 0x2314 JUMPI POP SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x233B JUMPI JUMPDEST DUP2 PUSH2 0x232F PUSH1 0x20 SWAP4 DUP4 PUSH2 0x2093 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI MLOAD SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2322 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x6 SLOAD DUP2 LT ISZERO PUSH2 0x2270 JUMPI PUSH1 0x6 PUSH0 MSTORE PUSH32 0xF652222313E28459528D920B65115C16C04F3EFC82AAEDC97BE59F3F377C0D3F ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x2390 JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x1F7 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x23BF DUP2 PUSH2 0x20B6 JUMP JUMPDEST SWAP4 PUSH2 0x23CD PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x2093 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x1F7 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x23F6 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1F7 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x23E8 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x1F7 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1F7 JUMPI PUSH2 0x2448 SWAP3 ADD PUSH2 0x23A4 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x1F7 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x2466 DUP2 PUSH2 0x20B6 JUMP JUMPDEST SWAP4 PUSH2 0x2474 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x2093 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x1F7 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x249D JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x248F JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SLT PUSH2 0x1F7 JUMPI DUP1 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP2 GT PUSH2 0x1F7 JUMPI DUP2 PUSH2 0x24D9 SWAP2 DUP5 ADD PUSH2 0x244B JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x1F7 JUMPI PUSH2 0x2448 SWAP3 ADD PUSH2 0x244B JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 MLOAD PUSH2 0x2507 PUSH1 0x60 DUP4 ADD SWAP2 DUP3 MLOAD SWAP1 PUSH2 0x2284 JUMP JUMPDEST MLOAD SWAP3 MLOAD SWAP2 PUSH2 0x251B PUSH1 0x80 DUP3 ADD SWAP4 DUP5 MLOAD SWAP1 PUSH2 0x2284 JUMP JUMPDEST MLOAD SWAP2 DUP2 MLOAD PUSH2 0x2528 DUP2 PUSH2 0x21EC JUMP JUMPDEST PUSH2 0x2531 DUP2 PUSH2 0x21EC JUMP JUMPDEST PUSH2 0x25DC JUMPI PUSH2 0x254B PUSH2 0x2544 PUSH1 0x20 SWAP3 MLOAD PUSH2 0x27D5 JUMP JUMPDEST SWAP5 MLOAD PUSH2 0x27D5 JUMP JUMPDEST SWAP2 ADD MLOAD PUSH8 0xDE0B6B3A7640000 SWAP5 DUP6 PUSH2 0x2562 DUP3 PUSH2 0x2A2B JUMP JUMPDEST DIV DUP3 GT PUSH2 0x25B4 JUMPI PUSH2 0x2576 PUSH2 0x257C SWAP3 DUP3 PUSH2 0x2383 JUMP JUMPDEST SWAP1 PUSH2 0x2F00 JUMP JUMPDEST DUP5 DUP5 MUL SWAP4 DUP1 DUP6 DIV DUP7 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2390 JUMPI PUSH2 0x259D PUSH2 0x25A3 SWAP3 PUSH2 0x25B0 SWAP6 PUSH2 0x2A72 JUMP JUMPDEST SWAP1 PUSH2 0x2A90 JUMP JUMPDEST DUP4 DUP2 DUP2 SUB SWAP2 LT MUL SWAP1 PUSH2 0x2A5F JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST PUSH32 0x340A453300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x25F6 PUSH2 0x25EF PUSH1 0x20 SWAP3 SWAP6 SWAP4 SWAP5 SWAP6 MLOAD PUSH2 0x27D5 JUMP JUMPDEST SWAP3 MLOAD PUSH2 0x27D5 JUMP JUMPDEST SWAP3 ADD MLOAD PUSH8 0xDE0B6B3A7640000 PUSH2 0x260B DUP6 PUSH2 0x2A2B JUMP JUMPDEST DIV DUP2 GT PUSH2 0x2665 JUMPI DUP4 SUB SWAP1 DUP4 DUP3 GT PUSH2 0x2390 JUMPI PUSH2 0x262C PUSH2 0x259D SWAP3 PUSH2 0x2632 SWAP6 PUSH2 0x2F00 JUMP JUMPDEST SWAP3 PUSH2 0x2F00 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21F494C589C0000 DUP2 ADD SWAP1 DUP2 GT PUSH2 0x2390 JUMPI PUSH2 0x2448 SWAP2 PUSH2 0x2B1B JUMP JUMPDEST PUSH32 0x64590B9F00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x1A0 SWAP2 DUP2 SWAP1 SUB DUP3 DUP2 SLT PUSH2 0x1F7 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x140 SWAP3 DUP4 DUP6 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP7 DUP6 LT DUP3 DUP7 GT OR PUSH2 0x2047 JUMPI PUSH1 0x80 SGT PUSH2 0x1F7 JUMPI PUSH2 0x1C0 DUP7 ADD SWAP1 DUP2 GT DUP5 DUP3 LT OR PUSH2 0x2047 JUMPI PUSH1 0x40 MSTORE PUSH2 0x26DF DUP2 PUSH2 0x2242 JUMP JUMPDEST DUP4 MSTORE PUSH2 0x26ED PUSH1 0x20 DUP3 ADD PUSH2 0x2242 JUMP JUMPDEST SWAP3 PUSH2 0x160 SWAP4 DUP5 DUP8 ADD MSTORE PUSH2 0x2702 PUSH1 0x40 DUP4 ADD PUSH2 0x2242 JUMP JUMPDEST SWAP3 PUSH2 0x180 SWAP4 DUP5 DUP9 ADD MSTORE PUSH2 0x2717 PUSH1 0x60 DUP5 ADD PUSH2 0x2242 JUMP JUMPDEST SWAP1 DUP8 ADD MSTORE DUP6 MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1F7 JUMPI PUSH1 0x80 DUP7 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1F7 JUMPI PUSH2 0x27A8 SWAP5 PUSH2 0x279E SWAP2 PUSH1 0xA0 DUP10 ADD MSTORE PUSH2 0x2792 PUSH2 0x120 SWAP8 PUSH2 0x2786 DUP10 DUP8 ADD PUSH2 0x2242 JUMP JUMPDEST PUSH1 0xC0 DUP12 ADD MSTORE DUP6 ADD PUSH2 0x2242 JUMP JUMPDEST PUSH1 0xE0 DUP10 ADD MSTORE DUP4 ADD PUSH2 0x2242 JUMP JUMPDEST SWAP1 DUP7 ADD MSTORE ADD PUSH2 0x2242 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x1F7 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1F7 JUMPI PUSH2 0x2448 SWAP3 ADD PUSH2 0x244B JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 LT ISZERO PUSH2 0x27F2 JUMPI PUSH2 0x27E8 SWAP1 PUSH2 0x234E JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP1 JUMP JUMPDEST PUSH32 0xC1AB6DC100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x2859 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND ADDRESS EQ DUP1 PUSH2 0x2994 JUMPI JUMPDEST ISZERO PUSH2 0x28ED JUMPI PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP3 MSTORE PUSH32 0x0 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2047 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST POP PUSH32 0x0 CHAINID EQ PUSH2 0x28C4 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0x6 SLOAD DUP1 DUP4 MSTORE DUP3 PUSH1 0x20 SWAP2 PUSH1 0x20 DUP3 ADD SWAP1 PUSH1 0x6 PUSH0 MSTORE PUSH32 0xF652222313E28459528D920B65115C16C04F3EFC82AAEDC97BE59F3F377C0D3F SWAP4 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x2A11 JUMPI POP POP POP PUSH2 0x2A0F SWAP3 POP SUB DUP4 PUSH2 0x2093 JUMP JUMPDEST JUMP JUMPDEST DUP6 SLOAD DUP5 MSTORE PUSH1 0x1 SWAP6 DUP7 ADD SWAP6 DUP9 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x29F9 JUMP JUMPDEST SWAP1 PUSH8 0x429D069189E0000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2390 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x2710 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2390 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x2390 JUMPI JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2A7C JUMPI DIV SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 SUB PUSH2 0x2AA7 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x2AC2 JUMPI POP POP DUP1 PUSH2 0x2448 SWAP2 PUSH2 0x2B1B JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x2AE6 JUMPI POP POP PUSH2 0x2AE0 DUP2 PUSH2 0x2448 SWAP3 PUSH2 0x2B1B JUMP JUMPDEST DUP1 PUSH2 0x2B1B JUMP JUMPDEST PUSH2 0x2AF0 SWAP2 SWAP3 PUSH2 0x2F7D JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH2 0x2AFC DUP4 PUSH2 0x2A48 JUMP JUMPDEST SWAP2 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH1 0x1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x2390 JUMPI PUSH2 0x2448 SWAP2 PUSH2 0x2383 JUMP JUMPDEST SWAP1 PUSH2 0x2B25 SWAP2 PUSH2 0x2A5F JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x2B91 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x2B69 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x2B5F DUP4 PUSH2 0x2077 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH32 0xB3512B0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH0 SLOAD SWAP2 PUSH2 0x2BA3 DUP4 PUSH2 0x220A JUMP JUMPDEST DUP1 DUP4 MSTORE SWAP3 PUSH1 0x20 SWAP1 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x2C2C JUMPI POP PUSH1 0x1 EQ PUSH2 0x2BCE JUMPI JUMPDEST POP POP PUSH2 0x2448 SWAP3 POP SUB DUP3 PUSH2 0x2093 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x2C14 JUMPI POP PUSH2 0x2448 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x2BC0 JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x2BF9 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 SWAP4 POP PUSH2 0x2448 SWAP6 SWAP3 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP2 POP AND DUP3 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x2C91 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x2B69 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x2B5F DUP4 PUSH2 0x2077 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD PUSH2 0x2CA6 DUP2 PUSH2 0x220A JUMP JUMPDEST DUP1 DUP5 MSTORE SWAP4 PUSH1 0x20 SWAP2 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x2C2C JUMPI POP PUSH1 0x1 EQ PUSH2 0x2CCE JUMPI POP POP PUSH2 0x2448 SWAP3 POP SUB DUP3 PUSH2 0x2093 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x2D15 JUMPI POP PUSH2 0x2448 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x2BC0 JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x2CFA JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 DUP1 DUP4 SUB PUSH2 0x2D44 JUMPI POP SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 SWAP1 PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x2D61 JUMPI POP POP DUP1 PUSH2 0x25B0 SWAP2 PUSH2 0x2A5F JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x2D85 JUMPI POP PUSH2 0x2D7E DUP3 PUSH2 0x25B0 SWAP4 PUSH2 0x2A5F JUMP JUMPDEST DIV DUP1 PUSH2 0x2A5F JUMP JUMPDEST SWAP1 POP PUSH2 0x2D90 SWAP2 PUSH2 0x2F7D JUMP JUMPDEST PUSH2 0x2D99 DUP2 PUSH2 0x2A48 JUMP JUMPDEST PUSH1 0x1 PUSH0 NOT SWAP4 DUP5 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 PUSH1 0x1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x2390 JUMPI DUP2 LT ISZERO PUSH2 0x2DC1 JUMPI POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SUB ADD SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP5 GT PUSH2 0x2E4A JUMPI SWAP2 PUSH1 0x20 SWAP4 PUSH1 0x80 SWAP3 PUSH1 0xFF PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND DUP7 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE DUP3 DUP1 MSTORE PUSH1 0x1 GAS STATICCALL ISZERO PUSH2 0x2343 JUMPI PUSH0 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x2E40 JUMPI SWAP1 PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 PUSH1 0x1 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP POP POP PUSH0 SWAP2 PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x21F6 JUMPI DUP1 PUSH2 0x2E67 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x2E97 JUMPI PUSH32 0xF645EEDF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x2ECB JUMPI POP PUSH32 0xFCE698F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x3 EQ PUSH2 0x2ED5 JUMPI POP JUMP JUMPDEST PUSH32 0xD78BCE0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x2F31 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2390 JUMPI PUSH1 0x1 SWAP1 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x2A7C JUMPI PUSH15 0xC097CE7BC90715B34B9F1000000000 SDIV SWAP1 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2A7C JUMPI SDIV SWAP1 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x38A6 JUMPI DUP2 ISZERO PUSH2 0x38A0 JUMPI DUP2 PUSH1 0xFF SHR PUSH2 0x3878 JUMPI PUSH24 0xBCE5086492111AEA88F4BB1CA6BCF584181EA8059F76532 DUP2 LT ISZERO PUSH2 0x3850 JUMPI DUP2 PUSH8 0xC7D713B49DA0000 SLT DUP1 PUSH2 0x383F JUMPI JUMPDEST ISZERO PUSH2 0x34DC JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH15 0xC097CE7BC90715B34B9F1000000000 SWAP1 PUSH2 0x3016 SWAP1 DUP5 MUL DUP3 DUP2 ADD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F68318436F8EA4CB460F000000000 ADD DUP4 MUL PUSH2 0x2F73 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV DUP4 DUP6 DUP3 MUL SDIV SWAP2 DUP5 DUP7 DUP5 MUL SDIV SWAP4 DUP6 DUP8 DUP7 MUL SDIV SWAP6 DUP1 DUP9 DUP9 MUL SDIV SWAP8 DUP9 MUL SDIV PUSH1 0xF SWAP1 SDIV SWAP7 PUSH1 0xD SWAP1 SDIV SWAP6 PUSH1 0xB SWAP1 SDIV SWAP5 PUSH1 0x9 SWAP1 SDIV SWAP4 PUSH1 0x7 SWAP1 SDIV SWAP3 PUSH1 0x5 SWAP1 SDIV SWAP2 PUSH1 0x3 SWAP1 SDIV ADD ADD ADD ADD ADD ADD ADD PUSH1 0x1 SHL SWAP2 DUP1 DUP3 DUP2 DUP6 SMOD MUL SDIV SWAP3 SDIV MUL ADD PUSH8 0xDE0B6B3A7640000 SWAP1 JUMPDEST SDIV PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC702BD3A30FC0000 DUP2 DUP2 SGT ISZERO DUP1 PUSH2 0x34C9 JUMPI JUMPDEST ISZERO PUSH2 0x34A1 JUMPI DUP2 SWAP1 DUP3 SLT ISZERO DUP1 PUSH2 0x348E JUMPI JUMPDEST ISZERO PUSH2 0x3466 JUMPI PUSH0 SWAP2 PUSH0 DUP2 SLT PUSH2 0x3457 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH9 0x6F05B59D3B2000000 DUP2 SLT PUSH2 0x33F4 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90FA4A62C4E000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP3 JUMPDEST MUL DUP2 SWAP1 PUSH9 0xAD78EBC5AC62000000 DUP2 SLT ISZERO PUSH2 0x33BB JUMPI JUMPDEST PUSH9 0x56BC75E2D631000000 DUP2 SLT ISZERO PUSH2 0x3381 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B18800000 DUP2 SLT ISZERO PUSH2 0x3349 JUMPI JUMPDEST PUSH9 0x15AF1D78B58C400000 DUP2 SLT ISZERO PUSH2 0x3311 JUMPI JUMPDEST PUSH9 0xAD78EBC5AC6200000 DUP2 SLT ISZERO PUSH2 0x32DA JUMPI JUMPDEST DUP3 DUP2 SLT ISZERO PUSH2 0x32A3 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B1880000 DUP2 SLT ISZERO PUSH2 0x326C JUMPI JUMPDEST PUSH9 0x15AF1D78B58C40000 DUP2 SLT ISZERO PUSH2 0x3235 JUMPI JUMPDEST PUSH1 0x2 DUP4 DUP3 DUP1 MUL SDIV SDIV PUSH1 0x3 DUP5 DUP4 DUP4 MUL SDIV SDIV PUSH1 0x4 DUP6 DUP5 DUP4 MUL SDIV SDIV DUP6 PUSH1 0x5 DUP2 DUP7 DUP5 MUL SDIV SDIV PUSH1 0x6 DUP3 DUP8 DUP4 MUL SDIV SDIV PUSH1 0x7 DUP4 DUP9 DUP4 MUL SDIV SDIV SWAP1 PUSH1 0x8 DUP5 DUP10 DUP5 MUL SDIV SDIV SWAP3 PUSH1 0x9 DUP6 DUP11 DUP7 MUL SDIV SDIV SWAP6 PUSH1 0xA DUP7 DUP12 DUP10 MUL SDIV SDIV SWAP8 PUSH1 0xB DUP8 DUP13 DUP12 MUL SDIV SDIV SWAP10 PUSH1 0xC DUP9 DUP14 DUP14 MUL SDIV SDIV SWAP12 ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD MUL SDIV MUL SDIV SWAP1 PUSH0 EQ PUSH2 0x2448 JUMPI PUSH2 0x2448 SWAP1 PUSH2 0x2F59 JUMP JUMPDEST PUSH9 0x6F5F1775788937937 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C0000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x31B6 JUMP JUMPDEST PUSH9 0x8F00F760A4B2DB55D PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E780000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x31A4 JUMP JUMPDEST PUSH9 0xEBC5FB41746121110 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x3192 JUMP JUMPDEST PUSH9 0x280E60114EDB805D03 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x3189 JUMP JUMPDEST PUSH10 0x127FA27722CC06CC5E2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x3177 JUMP JUMPDEST PUSH10 0x3F1FCE3DA636EA5CF850 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E7800000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x3165 JUMP JUMPDEST PUSH12 0x2DF0AB5A80A22C61AB5A700 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF000000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x3153 JUMP JUMPDEST PUSH15 0x1855144814A7FF805980FF0084000 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E000000 ADD PUSH2 0x3141 JUMP JUMPDEST PUSH9 0x3782DACE9D9000000 DUP2 SLT PUSH2 0x3444 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC87D2531627000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH12 0x1425982CF597CD205CEF7380 SWAP3 PUSH2 0x312C JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP3 PUSH1 0x1 SWAP3 PUSH2 0x312C JUMP JUMPDEST PUSH1 0x1 SWAP3 POP PUSH0 SUB SWAP1 POP PUSH1 0x64 PUSH2 0x30D0 JUMP JUMPDEST PUSH32 0xD4794EFD00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x30C1 JUMP JUMPDEST PUSH32 0xA2F9F7E300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x30B1 JUMP JUMPDEST DUP2 PUSH8 0xDE0B6B3A7640000 SWAP3 PUSH0 SWAP2 DUP5 DUP2 SLT PUSH2 0x3829 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH0 PUSH31 0x1600EF3172E58D2E933EC884FDE10064C63B5372D805E203C0000000000000 DUP3 SLT ISZERO PUSH2 0x37FE JUMPI JUMPDEST PUSH20 0x11798004D755D3C8BC8E03204CF44619E000000 DUP3 SLT ISZERO PUSH2 0x37DD JUMPI JUMPDEST DUP3 MUL SWAP1 DUP1 DUP4 MUL SWAP1 PUSH15 0x1855144814A7FF805980FF0084000 SWAP1 DUP2 DUP4 SLT ISZERO PUSH2 0x37BA JUMPI JUMPDEST POP POP PUSH12 0x2DF0AB5A80A22C61AB5A700 DUP1 DUP3 SLT ISZERO PUSH2 0x379A JUMPI JUMPDEST POP PUSH10 0x3F1FCE3DA636EA5CF850 DUP1 DUP3 SLT ISZERO PUSH2 0x377A JUMPI JUMPDEST POP PUSH10 0x127FA27722CC06CC5E2 DUP1 DUP3 SLT ISZERO PUSH2 0x375A JUMPI JUMPDEST POP PUSH9 0x280E60114EDB805D03 DUP1 DUP3 SLT ISZERO PUSH2 0x373A JUMPI JUMPDEST POP PUSH9 0xEBC5FB41746121110 DUP1 DUP3 SLT ISZERO PUSH2 0x3723 JUMPI JUMPDEST POP PUSH9 0x8F00F760A4B2DB55D DUP1 DUP3 SLT ISZERO PUSH2 0x3703 JUMPI JUMPDEST POP PUSH9 0x6F5F1775788937937 DUP1 DUP3 SLT ISZERO PUSH2 0x36E3 JUMPI JUMPDEST POP PUSH9 0x6248F33704B286603 DUP1 DUP3 SLT ISZERO PUSH2 0x36C4 JUMPI JUMPDEST POP PUSH9 0x5C548670B9510E7AC DUP1 DUP3 SLT ISZERO PUSH2 0x36A5 JUMPI JUMPDEST POP PUSH2 0x3652 PUSH9 0x56BC75E2D63100000 SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP2 DUP4 ADD SWAP3 ADD MUL PUSH2 0x2F73 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV SWAP2 PUSH1 0x3 PUSH1 0x5 PUSH1 0x7 PUSH1 0x9 PUSH1 0xB DUP9 DUP11 DUP10 MUL SDIV SWAP9 DUP1 DUP12 DUP12 MUL SDIV SWAP11 DUP12 MUL SDIV SDIV SWAP9 SDIV SWAP7 SDIV SWAP5 SDIV SWAP3 SDIV ADD ADD ADD ADD ADD PUSH1 0x1 SHL ADD SDIV SWAP1 PUSH0 EQ PUSH2 0x36A0 JUMPI PUSH0 SUB JUMPDEST MUL PUSH2 0x3085 JUMP JUMPDEST PUSH2 0x369A JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0x56BC75E2D6310000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x3616 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0xAD78EBC5AC620000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x3602 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C40000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x35EE JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B1880000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x35DA JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP1 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x35C6 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0xAD78EBC5AC6200000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x35B2 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C400000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x359E JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B18800000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x3589 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x56BC75E2D631000000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x3574 JUMP JUMPDEST PUSH9 0xAD78EBC5AC62000000 SWAP3 POP PUSH10 0x21E19E0C9BAB2400000 MUL SDIV SWAP2 ADD SWAP1 PUSH0 DUP1 PUSH2 0x355C JUMP JUMPDEST SWAP1 PUSH12 0x1425982CF597CD205CEF7380 PUSH9 0x3782DACE9D9000000 SWAP2 SDIV SWAP2 ADD PUSH2 0x353B JUMP JUMPDEST POP PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP1 SDIV PUSH9 0x6F05B59D3B2000000 PUSH2 0x351E JUMP JUMPDEST SWAP1 POP PUSH2 0x3835 SWAP2 POP PUSH2 0x2F59 JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x64 PUSH2 0x34F1 JUMP JUMPDEST POP PUSH8 0xF43FC2C04EE0000 DUP3 SLT PUSH2 0x2FC3 JUMP JUMPDEST PUSH32 0xD831731100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x22701E000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP6 0x2F PUSH0 LOG3 DUP1 STOP 0x2E 0xC9 BYTE 0xEF ORIGIN 0xB8 INVALID 0xC2 SWAP12 DUP6 0xF6 PUSH24 0x97DC1801356BE9C26C32B62CC84C64736F6C634300081B00 CALLER 0xC2 JUMPI GAS 0xE SWAP15 MSIZE EXTCODECOPY STOP 0xF9 MSIZE 0xF8 0xC9 0x2F SLT 0xDB 0x28 PUSH10 0xC3395A3B0502D05E2516 PREVRANDAO PUSH16 0x71F85B00000000000000000000000000 ","sourceMap":"396:1420:132:-:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;396:1420:132;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;396:1420:132;;;;;;;;;;;;-1:-1:-1;;;;;396:1420:132;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;396:1420:132;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;396:1420:132;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;396:1420:132;;;;;;;;;-1:-1:-1;;;;;396:1420:132;;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;396:1420:132;;;;;;4414:11:121;;4427:13;;396:1420:132;;;4427:13:121;;4414:11;396:1420:132;;;-1:-1:-1;;;;;396:1420:132;;;;;;;;;;;;;;;;-1:-1:-1;;;396:1420:132;;3401:45:114;;;:::i;:::-;3393:53;;3467:51;;;:::i;:::-;3456:62;;396:1420:132;;;;;3542:22:114;3528:36;;;;396:1420:132;3591:25:114;;3574:42;;;3644:13;396:1420:132;3627:30:114;396:1420:132;;4204:80:114;396:1420:132;4204:80:114;;2079:95;;;;396:1420:132;2079:95:114;;;396:1420:132;2079:95:114;;;3644:13;396:1420:132;2079:95:114;;;4278:4;396:1420:132;2079:95:114;;;396:1420:132;4204:80:114;;2079:95;396:1420:132;;;;;;;;;;;;;;;;;;4194:91:114;;396:1420:132;3667:48:114;4278:4;2079:95;3725:27;409:14:72;;;;396:1420:132;;;-1:-1:-1;;;;;396:1420:132;;;;2265:18:57;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;396:1420:132;;;;;;;;;;;;;2265:18:57;396:1420:132;;;;;2265:18:57;396:1420:132;;;;-1:-1:-1;;;;;396:1420:132;;;;2293:22:57;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;396:1420:132;;;;;;;;;;;;;2265:18:57;396:1420:132;;;;;2293:22:57;396:1420:132;;750:14:36;;396:1420:132;;;-1:-1:-1;;;;;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;396:1420:132;;;;;;;;;;;;;2265:18:57;396:1420:132;;;;;;;;;;;;4492:31:121;;;396:1420:132;;;4583:24:121;396:1420:132;1500:6:43;1496:65;;-1:-1:-1;;4760:3:121;4492:31;396:1420:132;;;;4742:16:121;;;;4806:27;396:1420:132;;;;;;4806:24:121;:27;:::i;:::-;396:1420:132;4852:30:121;3113:4;4852:30;;4848:87;;3113:4;;;;;;;;;;396:1420:132;;;;;5056:37:121;;5042:558;396:1420:132;;;;;;;;;;;4729:11:121;;396:1420:132;;;;-1:-1:-1;396:1420:132;;2293:22:57;396:1420:132;;-1:-1:-1;396:1420:132;5042:558:121;396:1420:132;;;;5118:6:121;396:1420:132;;5128:37:121;;5042:558;;5114:486;396:1420:132;;;5195:1:121;5190:6;5195:1;;5200:37;;5042:558;;5186:414;396:1420:132;;;2265:18:57;5262:6:121;2265:18:57;;5272:37:121;;5042:558;;5258:342;396:1420:132;;;2293:22:57;5334:6:121;2293:22:57;;5344:37:121;;5042:558;;5330:270;396:1420:132;;;;5406:6:121;396:1420:132;;5416:37:121;;5042:558;;5402:198;396:1420:132;;;5483:1:121;5478:6;5483:1;;5488:37;;5042:558;;5474:126;5555:1;396:1420:132;;;5550:6:121;5546:54;;5474:126;;5042:558;;5546:54;5560:37;;5546:54;;;4848:87;4909:11;;;-1:-1:-1;4909:11:121;2293:22:57;-1:-1:-1;4909:11:121;4742:16;;465:4:50;5682:31:121;5678:96;;396:1420:132;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;-1:-1:-1;;396:1420:132;;;;;-1:-1:-1;;;;;396:1420:132;;;;;;;;;652:52;396:1420;;;;;;;;;;;4724:886:121;396:1420:132;;-1:-1:-1;396:1420:132;;-1:-1:-1;396:1420:132;-1:-1:-1;396:1420:132;;;;;;720:13;;-1:-1:-1;757:3:132;396:1420;;;;735:20;;;;;800:27;396:1420;;;;800:24;:27;:::i;:::-;396:1420;;;;;;;;;;;;-1:-1:-1;396:1420:132;;;-1:-1:-1;396:1420:132;;;;720:13;;396:1420;;;;-1:-1:-1;396:1420:132;;2293:22:57;396:1420:132;;-1:-1:-1;396:1420:132;735:20;396:1420;;;;;;;;;;;;;;;;;;;;2079:95:114;396:1420:132;;;;;3528:36:114;396:1420:132;;;;;3574:42:114;396:1420:132;;;;;3393:53:114;396:1420:132;;;;;3456:62:114;396:1420:132;;;;;409:14:72;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;750:14:36;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;;4492:31:121;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;396:1420:132;;;-1:-1:-1;396:1420:132;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;396:1420:132;;2293:22:57;396:1420:132;;-1:-1:-1;396:1420:132;5678:96:121;5736:27;;;-1:-1:-1;5736:27:121;2293:22:57;-1:-1:-1;5736:27:121;1496:65:43;1529:21;;;-1:-1:-1;1529:21:43;2293:22:57;-1:-1:-1;1529:21:43;396:1420:132;;;;-1:-1:-1;396:1420:132;;;;;;-1:-1:-1;396:1420:132;;;-1:-1:-1;;396:1420:132;;;;-1:-1:-1;;396:1420:132;;;;;;;4204:80:114;;;;;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;2265:18:57;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;396:1420:132;;-1:-1:-1;396:1420:132;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;396:1420:132;;;;;;;;-1:-1:-1;396:1420:132;;2293:22:57;396:1420:132;;-1:-1:-1;396:1420:132;;;;;;;;;;;;-1:-1:-1;396:1420:132;;;;;2293:22:57;-1:-1:-1;396:1420:132;;-1:-1:-1;396:1420:132;;-1:-1:-1;396:1420:132;-1:-1:-1;;396:1420:132;;;;;;4204:80:114;396:1420:132;4204:80:114;;;;;;;396:1420:132;;;;;;;;;;;;2293:22:57;396:1420:132;;;;;;;;;;2265:18:57;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2293:22:57;-1:-1:-1;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;396:1420:132;;;;;2265:18:57;-1:-1:-1;396:1420:132;;;-1:-1:-1;;;;;;;;;;;;;396:1420:132;;;-1:-1:-1;;396:1420:132;;;;;;;4204:80:114;;;;;396:1420:132;;;;;;;;;;;;2265:18:57;396:1420:132;;;;;;;;;;2265:18:57;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2265:18:57;-1:-1:-1;396:1420:132;;;-1:-1:-1;;;;;;;;;;;396:1420:132;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;396:1420:132;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;396:1420:132;;;;-1:-1:-1;;;;;396:1420:132;;;;;;;;;;:::o;:::-;;;;;;;;;;;;-1:-1:-1;;;;;396:1420:132;;;;;;;;4204:80:114;396:1420:132;;-1:-1:-1;;396:1420:132;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;396:1420:132;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;;;396:1420:132;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;2914:340:110:-;396:1420:132;;3059:2:110;;3037:24;;;3059:2;;;396:1420:132;1854:2:110;396:1420:132;;1840:16:110;1836:72;;396:1420:132;;;;;2079:95:114;396:1420:132;;;;;;1949:36:110;;3077:27;:::o;396:1420:132:-;;;;;;;;;;1949:36:110;3077:27;:::o;1836:72::-;396:1420:132;;;;1879:18:110;;;;;;;;;;;;396:1420:132;;;;;;;;;;;;;;;;3432:13:114;396:1420:132;;;;;;1854:2:110;396:1420:132;-1:-1:-1;;396:1420:132;;;1879:18:110;;;;3033:215;396:1420:132;-1:-1:-1;;;;;396:1420:132;;;;3432:13:114;396:1420:132;;;;;;;;;;;;;;3033:215:110;396:1420:132;;;;;;;;;;;3033:215:110;396:1420:132;;;;;;;;;;;;;;;;3432:13:114;396:1420:132;;;;;;;;;;;;;;;;;3432:13:114;396:1420:132;1390:66:110;3195:42;:::o;396:1420:132:-;;;;-1:-1:-1;396:1420:132;;;;;4204:80:114;;;;;396:1420:132;;3432:13:114;396:1420:132;;;3432:13:114;396:1420:132;;3432:13:114;396:1420:132;;;;;;;;;;;;;;;;;;;;;3432:13:114;396:1420:132;1390:66:110;3195:42;:::o;396:1420:132:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;396:1420:132;;;;;;;;;3432:13:114;396:1420:132;;;;3432:13:114;396:1420:132;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;2914:340:110;396:1420:132;;3059:2:110;;3037:24;;;3059:2;;;396:1420:132;1854:2:110;396:1420:132;;1840:16:110;1836:72;;396:1420:132;;;;;2079:95:114;396:1420:132;;;;;;1949:36:110;;3077:27;:::o;3033:215::-;396:1420:132;;;-1:-1:-1;;;;;396:1420:132;;;;;;;;;;;;;;;;;;3033:215:110;396:1420:132;;;;;;;;;;;3033:215:110;396:1420:132;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;396:1420:132;;;;;;;;;;;;;1390:66:110;;3195:42::o;396:1420:132:-;;;;-1:-1:-1;396:1420:132;;;;;4204:80:114;;;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1390:66:110;3195:42;:::o;396:1420:132:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"abi_decode_address":{"entryPoint":8200,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_address_24380":{"entryPoint":8165,"id":null,"parameterSlots":0,"returnSlots":1},"abi_decode_addresst_addresst_uint256":{"entryPoint":8494,"id":null,"parameterSlots":1,"returnSlots":3},"abi_decode_array_contract_IERC20_dyn_fromMemory":{"entryPoint":9124,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_contract_IERC20_dyn_memory_ptr_fromMemory":{"entryPoint":9250,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn":{"entryPoint":8398,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn_fromMemory":{"entryPoint":10159,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dyn_memory_ptr_fromMemory":{"entryPoint":9291,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_array_uint256_dynt_array_uint256_dyn_fromMemory":{"entryPoint":9388,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_bool_fromMemory":{"entryPoint":8770,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_struct_PoolConfig_fromMemory":{"entryPoint":9869,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_address_address_uint256":{"entryPoint":null,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_array_contract_IERC20_dyn":{"entryPoint":8611,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_array_uint256_dyn":{"entryPoint":8560,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_string":{"entryPoint":8128,"id":null,"parameterSlots":2,"returnSlots":1},"array_allocation_size_array_uint256_dyn":{"entryPoint":8374,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_uint256":{"entryPoint":9091,"id":null,"parameterSlots":2,"returnSlots":1},"checked_div_uint256":{"entryPoint":10866,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256":{"entryPoint":10847,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_uint256_24455":{"entryPoint":10795,"id":null,"parameterSlots":1,"returnSlots":1},"checked_mul_uint256_24492":{"entryPoint":10824,"id":null,"parameterSlots":1,"returnSlots":1},"copy_array_from_storage_to_memory_array_uint256_dyn":{"entryPoint":10685,"id":null,"parameterSlots":0,"returnSlots":1},"extract_byte_array_length":{"entryPoint":8714,"id":null,"parameterSlots":1,"returnSlots":1},"finalize_allocation":{"entryPoint":8339,"id":null,"parameterSlots":2,"returnSlots":0},"finalize_allocation_24388":{"entryPoint":8235,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_24393":{"entryPoint":8283,"id":null,"parameterSlots":1,"returnSlots":0},"finalize_allocation_38300":{"entryPoint":8311,"id":null,"parameterSlots":1,"returnSlots":0},"fun_domainSeparatorV4":{"entryPoint":10373,"id":41960,"parameterSlots":0,"returnSlots":1},"fun_ensureOnlyVault":{"entryPoint":10266,"id":28148,"parameterSlots":0,"returnSlots":0},"fun_getNormalizedWeight":{"entryPoint":10197,"id":48335,"parameterSlots":1,"returnSlots":1},"fun_mulDivUp":{"entryPoint":12032,"id":8034,"parameterSlots":2,"returnSlots":1},"fun_mulUp":{"entryPoint":11035,"id":7970,"parameterSlots":2,"returnSlots":1},"fun_onSwap_inner":{"entryPoint":9456,"id":null,"parameterSlots":1,"returnSlots":1},"fun_pow":{"entryPoint":12157,"id":8467,"parameterSlots":2,"returnSlots":1},"fun_powDown":{"entryPoint":11565,"id":8130,"parameterSlots":2,"returnSlots":1},"fun_powUp":{"entryPoint":10896,"id":8197,"parameterSlots":2,"returnSlots":1},"fun_throwError":{"entryPoint":11861,"id":41836,"parameterSlots":2,"returnSlots":0},"fun_toStringWithFallback":{"entryPoint":11069,"id":41092,"parameterSlots":1,"returnSlots":1},"fun_toStringWithFallback_24397":{"entryPoint":11375,"id":41092,"parameterSlots":1,"returnSlots":1},"fun_totalSupply":{"entryPoint":8856,"id":10821,"parameterSlots":0,"returnSlots":1},"fun_tryRecover":{"entryPoint":11718,"id":41751,"parameterSlots":4,"returnSlots":3},"fun_useNonce":{"entryPoint":null,"id":40881,"parameterSlots":1,"returnSlots":1},"memory_array_index_access_uint256_dyn":{"entryPoint":8836,"id":null,"parameterSlots":2,"returnSlots":1},"memory_array_index_access_uint256_dyn_38291":{"entryPoint":8783,"id":null,"parameterSlots":1,"returnSlots":1},"storage_array_index_access_uint256_dyn":{"entryPoint":9038,"id":null,"parameterSlots":1,"returnSlots":2},"validator_assert_enum_TokenType":{"entryPoint":8684,"id":null,"parameterSlots":1,"returnSlots":0},"wrapping_div_int256":{"entryPoint":12147,"id":null,"parameterSlots":2,"returnSlots":1},"wrapping_div_int256_24496":{"entryPoint":12121,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[],"immutableReferences":{"5300":[{"length":32,"start":1459},{"length":32,"start":2400},{"length":32,"start":2600},{"length":32,"start":3216},{"length":32,"start":4749}],"28110":[{"length":32,"start":630},{"length":32,"start":1182},{"length":32,"start":1653},{"length":32,"start":3476},{"length":32,"start":4355},{"length":32,"start":5316},{"length":32,"start":5961},{"length":32,"start":7010},{"length":32,"start":8929},{"length":32,"start":10289}],"41858":[{"length":32,"start":10443}],"41860":[{"length":32,"start":10647}],"41862":[{"length":32,"start":10396}],"41864":[{"length":32,"start":10522}],"41866":[{"length":32,"start":10560}],"41869":[{"length":32,"start":4414}],"41872":[{"length":32,"start":4456}]},"linkReferences":{},"object":"6080604090808252600480361015610015575f80fd5b60e05f35811c92836301ffc9a714611f595750826306fdde0314611eaa578263095ea7b314611e2c57826316a0b3e014611bf357826318160ddd14611bd757826319f32ccd14611b9857826323b872dd14611af057826323de665114611abe578263273c1adf14611a9c57826330adf81f14611a62578263313ce56714611a475782633644e51514611a2b5782633f3353de146118b757826353b79bd7146116fb57826354fd4d501461160b5782635687f2b8146115ac578263627cdcb914611583578263654cf15d14611561578263679aefce1461152a57826370a082311461145657826372c98186146113355782637ecebe00146112f157826381fa807c1461123057826384b0196e146111275782638d928af8146110d757826395d89b4114610fd1578263984de9e814610e0f578263a9059cbb14610cfc578263aa6ca80814610c37578263abb1dc44146109ce578263b156aa0a14610907578263b677fa56146108e5578263c0bc6f331461060c578263ce20ece7146105ec578263d335b0cf14610559578263d505accf146102ee57508163dd62ed3e146101fb575063f89f27ed146101c4575f80fd5b346101f7575f6003193601126101f7576101f3906101e06129bd565b9051918291602083526020830190612170565b0390f35b5f80fd5b82346101f757806003193601126101f7576020610216611fe5565b6064610220612008565b9473ffffffffffffffffffffffffffffffffffffffff808097875198899687957f927da10500000000000000000000000000000000000000000000000000000000875230908701521660248501521660448301527f0000000000000000000000000000000000000000000000000000000000000000165afa9081156102e5575f916102b0575b6020925051908152f35b90506020823d6020116102dd575b816102cb60209383612093565b810103126101f75760209151906102a6565b3d91506102be565b513d5f823e3d90fd5b8390346101f7576003193601126101f757610307611fe5565b90610310612008565b604435926084359060643560ff831683036101f75780421161052f5761035d8273ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f2080549060018201905590565b90610429610420875195602087017f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9815273ffffffffffffffffffffffffffffffffffffffff97889586891697888d840152878c1660608401528d608084015260a083015260c082015260c081526103d48161205b565b5190206103df612885565b908a51917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015260c43591604260a4359220612dc6565b90929192612e55565b168181036105025750505f84959661049a60209651988996879586947fe1f21c67000000000000000000000000000000000000000000000000000000008652850160409194939294606082019573ffffffffffffffffffffffffffffffffffffffff80921683521660208201520152565b03927f0000000000000000000000000000000000000000000000000000000000000000165af19081156102e557506104ce57005b6020813d6020116104fa575b816104e760209383612093565b810103126101f7576104f890612242565b005b3d91506104da565b877f4b800e46000000000000000000000000000000000000000000000000000000005f525260245260445ffd5b867f62791302000000000000000000000000000000000000000000000000000000005f525260245ffd5b5082346101f7575f6003193601126101f7578051917fb45090f9000000000000000000000000000000000000000000000000000000008352309083015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156102e5575f916102b0576020925051908152f35b83346101f7575f6003193601126101f757602090516509184e72a0008152f35b9150346101f7575f6003193601126101f75782516106298161205b565b606081526020918282019160608352858101925f8452606082015f815260808301915f835260a08401935f855260c08101955f875273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016908b517f535cfd8a00000000000000000000000000000000000000000000000000000000815230828201525f81602481865afa908115610895575f916108c3575b5083528b517f7e361bde00000000000000000000000000000000000000000000000000000000815230828201525f81602481865afa908115610895575f9161089f575b5084528b517fb45090f900000000000000000000000000000000000000000000000000000000815230828201528a81602481865afa908115610895575f91610868575b508952610767612298565b85528b519182917ff29486a100000000000000000000000000000000000000000000000000000000835230908301528160246101a09485935afa91821561085e57928b9c926107f69261080996955f9e9c9d9e92610831575b50508a81015115158852610120610100918281015115158b52015115158a5283519d8d8f9e938f948552519301528c0190612170565b915190601f198b840301908b0152612170565b9551606088015251608087015251151560a086015251151560c0850152511515908301520390f35b6108509250803d10610857575b6108488183612093565b81019061268d565b5f806107c0565b503d61083e565b8c513d5f823e3d90fd5b90508a81813d831161088e575b61087f8183612093565b810103126101f757515f61075c565b503d610875565b8d513d5f823e3d90fd5b6108bb91503d805f833e6108b38183612093565b8101906124ac565b90505f610719565b6108df91503d805f833e6108d78183612093565b8101906127af565b5f6106d6565b83346101f7575f6003193601126101f757602090516709b6e64a8ec600008152f35b8382346101f7575f6003193601126101f7578151907f535cfd8a00000000000000000000000000000000000000000000000000000000825230908201525f8160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156109c457916101f3925f926109a8575b5051918291602083526020830190612170565b6109bd9192503d805f833e6108d78183612093565b9083610995565b82513d5f823e3d90fd5b8382346101f7575f6003193601126101f75773ffffffffffffffffffffffffffffffffffffffff8251917f67e0e07600000000000000000000000000000000000000000000000000000000835230908301525f82602481847f0000000000000000000000000000000000000000000000000000000000000000165afa918215610c2d575f935f925f925f95610b03575b5090610a7b959493929181519687966080885260808801906121a3565b6020878203818901528080875193848152019601925f905b838210610abf57898803868b015289806101f38b610ab18c8c612170565b908382036060850152612170565b9184989950606086979860019395978397518051610adc816121ec565b83528685820151168584015201511515898201520198019201899897969594929391610a93565b955093509150503d805f853e610b198185612093565b8301926080818503126101f75780519167ffffffffffffffff928381116101f75785610b469184016123a4565b91602095868201518581116101f757820181601f820112156101f757805190610b6e826120b6565b98610b7b86519a8b612093565b828a52808a01816060809502840101928584116101f7578201905b838210610bdb575050505050828201518581116101f75781610bb991840161244b565b9460608301519081116101f757610bd0920161244b565b919492919386610a5e565b84828703126101f757875190610bf08261202b565b825160028110156101f757825283830151908c821682036101f7578285928389950152610c1e8b8601612242565b8b820152815201910190610b96565b83513d5f823e3d90fd5b8382346101f7575f6003193601126101f7578151907fca4f280300000000000000000000000000000000000000000000000000000000825230908201525f8160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156109c457916101f3925f92610cd8575b50519182916020835260208301906121a3565b610cf59192503d805f833e610ced8183612093565b810190612422565b9083610cc5565b5082346101f757806003193601126101f7576020610d7a92610d1c611fe5565b83517fbeabacc80000000000000000000000000000000000000000000000000000000081523392810192835273ffffffffffffffffffffffffffffffffffffffff909116602083015260243560408301529384918291606090910190565b03815f73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af18015610e0557610dcb575b6020905160018152f35b6020823d602011610dfd575b81610de460209383612093565b810103126101f757610df7602092612242565b50610dc1565b3d9150610dd7565b50513d5f823e3d90fd5b5082346101f757806003193601126101f757813567ffffffffffffffff81116101f757610e3f90369084016120ce565b60243560028110156101f757610e54816121ec565b610fca57825b610e626129bd565b9080600314610f755780600414610eee5780600114610eab57600214610e9557605184634e487b7160e01b5f525260245ffd5b6020935090610ea391612f00565b905b51908152f35b509092670de0b6b3a764000091828102928184041490151715610edb5750602092610ed591612a72565b90610ea5565b601190634e487b7160e01b5f525260245ffd5b50925f9190670de0b6b3a76400005b8551841015610f3957610f31600191610f2b610f198787612284565b51610f24888b612284565b5190612a90565b90612b1b565b930192610efd565b92509350508015610f4e576020925090610ea5565b827f26543689000000000000000000000000000000000000000000000000000000005f525ffd5b50925f9190670de0b6b3a76400005b8551841015610f3957670de0b6b3a7640000610fc1600192610fbb610fa98888612284565b51610fb4898c612284565b5190612d2d565b90612a5f565b04930192610f84565b6003610e5a565b8382346101f7575f6003193601126101f757815191825f8354610ff38161220a565b90818452602095600191876001821691825f14611092575050600114611036575b5050506101f39291611027910385612093565b51928284938452830190611fc0565b5f90815286935091907f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b82841061107a57505050820101816110276101f3611014565b8054848a018601528895508794909301928101611061565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168782015293151560051b8601909301935084925061102791506101f39050611014565b83346101f7575f6003193601126101f7576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9150346101f7575f6003193601126101f7576111627f0000000000000000000000000000000000000000000000000000000000000000612b3d565b9261118c7f0000000000000000000000000000000000000000000000000000000000000000612c6f565b815192602084019084821067ffffffffffffffff83111761121d5750916111fd916101f3949382525f84526111f082519788977f0f0000000000000000000000000000000000000000000000000000000000000089528060208a0152880190611fc0565b9186830390870152611fc0565b904660608501523060808501525f60a085015283820360c0850152612170565b604190634e487b7160e01b5f525260245ffd5b8382346101f7575f6003193601126101f7578151907ff29486a100000000000000000000000000000000000000000000000000000000825230908201526101a090818160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa918215610c2d575f926112d4575b505060608282015191015182519182526020820152f35b6112ea9250803d10610857576108488183612093565b82806112bd565b83346101f75760206003193601126101f75760209073ffffffffffffffffffffffffffffffffffffffff611323611fe5565b165f5260028252805f20549051908152f35b8382346101f75760209260031984813601126101f75782359167ffffffffffffffff918284116101f75783360301126101f7578351916113748361205b565b8084013560028110156101f757835260248101358684015260448101358281116101f7576113a7908536918401016120ce565b85840152606481013560608401526084810135608084015260a481013573ffffffffffffffffffffffffffffffffffffffff811681036101f75760a084015260c4810135908282116101f7570192366023850112156101f7578084013591821161121d575083519061142286601f19601f8401160183612093565b80825236602482860101116101f75785815f926024610ea39701838601378301015260c082015261145161281a565b6124f0565b8382346101f757602091826003193601126101f75782611474611fe5565b604473ffffffffffffffffffffffffffffffffffffffff9485855196879485937ff7888aec00000000000000000000000000000000000000000000000000000000855230908501521660248301527f0000000000000000000000000000000000000000000000000000000000000000165afa918215610e05575f926114fb575b5051908152f35b9091508281813d8311611523575b6115138183612093565b810103126101f7575190836114f4565b503d611509565b50346101f7575f6003193601126101f7577f18e79a20000000000000000000000000000000000000000000000000000000005f525ffd5b83346101f7575f6003193601126101f7576020905167016345785d8a00008152f35b346101f7575f6003193601126101f757335f908152600260205260409020805460018101909155005b83346101f75760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9256115de3661212e565b9391946115e961281a565b5193845273ffffffffffffffffffffffffffffffffffffffff908116941692a3005b83346101f7575f6003193601126101f75780516005549091825f61162e8461220a565b808352602094600190866001821691825f146116bb575050600114611660575b50506101f39291611027910385612093565b9085925060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0915f925b8284106116a3575050508201018161102761164e565b8054848a01860152889550879490930192810161168d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168682015292151560051b85019092019250839150611027905061164e565b5082346101f7575f6003193601126101f7578051906117198261202b565b606082526020908183019160608352818401926060845273ffffffffffffffffffffffffffffffffffffffff95867f0000000000000000000000000000000000000000000000000000000000000000169084517fca4f280300000000000000000000000000000000000000000000000000000000815230828201525f81602481865afa9081156118ad57905f92918391611893575b50885260248651809481937f7e361bde00000000000000000000000000000000000000000000000000000000835230908301525afa908115611889575f91611870575b5081959295526117ff6129bd565b84528251948086526080860192519260608288015283518091528160a088019401915f5b82811061185a5788806101f38a8a6118498b8b51601f1993848884030190880152612170565b915190848303016060850152612170565b83518a1686529481019492810192600101611823565b61188491503d805f833e6108b38183612093565b6117f1565b84513d5f823e3d90fd5b6118a791503d8085833e610ced8183612093565b8a6117ae565b86513d5f823e3d90fd5b8382346101f757816003193601126101f75736602312156101f757815182810181811067ffffffffffffffff821117611a185783526044813682116101f75783905b828210611a0857505050805192670de0b6b3a764000061191f6020840195865190612383565b036119ac575051916006549283156119995760065f527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f5551916001101561198657507ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d4055005b603290634e487b7160e01b5f525260245ffd5b603283634e487b7160e01b5f525260245ffd5b517f08c379a0000000000000000000000000000000000000000000000000000000008152602081840152601560248201527f5765696768747320646f6e277420746f74616c203100000000000000000000006044820152606490fd5b81358152602091820191016118f9565b604183634e487b7160e01b5f525260245ffd5b83346101f7575f6003193601126101f757602090610ea3612885565b83346101f7575f6003193601126101f7576020905160128152f35b83346101f7575f6003193601126101f757602090517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98152f35b83346101f7575f6003193601126101f757602090516729a2241af62c00008152f35b83346101f75760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6115de3661212e565b5082346101f75760205f6084611b053661212e565b86517f15dacbea000000000000000000000000000000000000000000000000000000008152339881019890985273ffffffffffffffffffffffffffffffffffffffff928316602489015290821660448801526064870152859283917f0000000000000000000000000000000000000000000000000000000000000000165af18015610e0557610dcb576020905160018152f35b5082346101f7576003193601126101f757356006548110611bb557005b611bbe9061234e565b81549060031b905f19602435831b921b19161790555f80f35b83346101f7575f6003193601126101f757602090610ea3612298565b8382346101f75760606003193601126101f757803567ffffffffffffffff81116101f757611c2490369083016120ce565b9160243592611c40611c398560443593612284565b51946127d5565b60019081831115611e265760025b80600314611db05780600414611d175780600114611cd557600214611c8057605185634e487b7160e01b5f525260245ffd5b909192938115611caf5750610ea39260209592610f2b926ec097ce7bc90715b34b9f0fffffffff040190612a90565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f525ffd5b5080929394915015611d04575092610f2b610ea3926020956ec097ce7bc90715b34b9f10000000000490612a90565b601290634e487b7160e01b5f525260245ffd5b509192939080670de0b6b3a7640000935f925b611d70575b5050508115611d4a575092610f2b610ea39260209590612a90565b7f26543689000000000000000000000000000000000000000000000000000000005f525ffd5b909193670de0b6b3a764000051851015611daa579082611da28193610f2b611d988986612284565b51610f248a61224f565b950192611d2a565b93611d2f565b509192939080670de0b6b3a7640000935f925b611de2575050508115611d4a575092610f2b610ea39260209590612a90565b909193670de0b6b3a764000051851015611daa579082670de0b6b3a7640000611e1d8294610fbb611e138a87612284565b51610fb48b61224f565b04950192611dc3565b81611c4e565b5082346101f757806003193601126101f7576020610d7a92611e4c611fe5565b83517fe1f21c670000000000000000000000000000000000000000000000000000000081523392810192835273ffffffffffffffffffffffffffffffffffffffff909116602083015260243560408301529384918291606090910190565b83346101f7575f6003193601126101f75780516003549091825f611ecd8461220a565b808352602094600190866001821691825f146116bb575050600114611efe5750506101f39291611027910385612093565b9085925060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f925b828410611f41575050508201018161102761164e565b8054848a018601528895508794909301928101611f2b565b82346101f75760206003193601126101f75735907fffffffff0000000000000000000000000000000000000000000000000000000082168092036101f7577f01ffc9a700000000000000000000000000000000000000000000000000000000602092148152f35b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036101f757565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036101f757565b6060810190811067ffffffffffffffff82111761204757604052565b634e487b7160e01b5f52604160045260245ffd5b60e0810190811067ffffffffffffffff82111761204757604052565b6040810190811067ffffffffffffffff82111761204757604052565b90601f601f19910116810190811067ffffffffffffffff82111761204757604052565b67ffffffffffffffff81116120475760051b60200190565b9080601f830112156101f75760209082356120e8816120b6565b936120f66040519586612093565b81855260208086019260051b8201019283116101f757602001905b82821061211f575050505090565b81358152908301908301612111565b60031960609101126101f75773ffffffffffffffffffffffffffffffffffffffff9060043582811681036101f7579160243590811681036101f7579060443590565b9081518082526020808093019301915f5b82811061218f575050505090565b835185529381019392810192600101612181565b9081518082526020808093019301915f5b8281106121c2575050505090565b835173ffffffffffffffffffffffffffffffffffffffff16855293810193928101926001016121b4565b600211156121f657565b634e487b7160e01b5f52602160045260245ffd5b90600182811c92168015612238575b602083101461222457565b634e487b7160e01b5f52602260045260245ffd5b91607f1691612219565b519081151582036101f757565b670de0b6b3a7640000518110156122705760051b670de0b6b3a76400200190565b634e487b7160e01b5f52603260045260245ffd5b80518210156122705760209160051b010190565b6040517fe4dc2aa400000000000000000000000000000000000000000000000000000000815230600482015260208160248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115612343575f91612314575090565b90506020813d60201161233b575b8161232f60209383612093565b810103126101f7575190565b3d9150612322565b6040513d5f823e3d90fd5b6006548110156122705760065f527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01905f90565b9190820180921161239057565b634e487b7160e01b5f52601160045260245ffd5b9080601f830112156101f7578151906020916123bf816120b6565b936123cd6040519586612093565b81855260208086019260051b8201019283116101f757602001905b8282106123f6575050505090565b815173ffffffffffffffffffffffffffffffffffffffff811681036101f75781529083019083016123e8565b906020828203126101f757815167ffffffffffffffff81116101f75761244892016123a4565b90565b9080601f830112156101f757815190602091612466816120b6565b936124746040519586612093565b81855260208086019260051b8201019283116101f757602001905b82821061249d575050505090565b8151815290830190830161248f565b9190916040818403126101f75780519267ffffffffffffffff938481116101f757816124d991840161244b565b9360208301519081116101f757612448920161244b565b604081019081516125076060830191825190612284565b5192519161251b6080820193845190612284565b51918151612528816121ec565b612531816121ec565b6125dc5761254b612544602092516127d5565b94516127d5565b910151670de0b6b3a7640000948561256282612a2b565b0482116125b45761257661257c9282612383565b90612f00565b848402938085048614901517156123905761259d6125a3926125b095612a72565b90612a90565b8381810391100290612a5f565b0490565b7f340a4533000000000000000000000000000000000000000000000000000000005f5260045ffd5b6125f66125ef60209295939495516127d5565b92516127d5565b920151670de0b6b3a764000061260b85612a2b565b048111612665578303908382116123905761262c61259d9261263295612f00565b92612f00565b7ffffffffffffffffffffffffffffffffffffffffffffffffff21f494c589c000081019081116123905761244891612b1b565b7f64590b9f000000000000000000000000000000000000000000000000000000005f5260045ffd5b6101a0918190038281126101f75760405192610140928385019267ffffffffffffffff9086851082861117612047576080136101f7576101c0860190811184821017612047576040526126df81612242565b83526126ed60208201612242565b92610160938487015261270260408301612242565b92610180938488015261271760608401612242565b9087015285526080810151602086015260a0810151604086015260c0810151606086015260e081015164ffffffffff811681036101f75760808601526101008082015163ffffffff811681036101f7576127a89461279e9160a089015261279261012097612786898701612242565b60c08b01528501612242565b60e08901528301612242565b9086015201612242565b9082015290565b906020828203126101f757815167ffffffffffffffff81116101f757612448920161244b565b6006548110156127f2576127e89061234e565b90549060031b1c90565b7fc1ab6dc1000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361285957565b7f089676d5000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016301480612994575b156128ed577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff8211176120475760405251902090565b507f000000000000000000000000000000000000000000000000000000000000000046146128c4565b6040519060065480835282602091602082019060065f527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f935f905b828210612a1157505050612a0f92500383612093565b565b8554845260019586019588955093810193909101906129f9565b90670429d069189e00009182810292818404149015171561239057565b906127109182810292818404149015171561239057565b8181029291811591840414171561239057565b8115612a7c570490565b634e487b7160e01b5f52601260045260245ffd5b90670de0b6b3a764000090818103612aa757505090565b671bc16d674ec800008103612ac25750508061244891612b1b565b673782dace9d9000008103612ae6575050612ae08161244892612b1b565b80612b1b565b612af09192612f7d565b906001612afc83612a48565b915f198301040190151502600181018091116123905761244891612383565b90612b2591612a5f565b6001670de0b6b3a76400005f19830104019015150290565b60ff8114612b915760ff811690601f8211612b695760405191612b5f83612077565b8252602082015290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040515f815f5491612ba38361220a565b80835292602090600190818116908115612c2c5750600114612bce575b505061244892500382612093565b9150925f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563935f925b828410612c1457506124489450505081016020015f80612bc0565b85548785018301529485019486945092810192612bf9565b9050602093506124489592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f80612bc0565b60ff8114612c915760ff811690601f8211612b695760405191612b5f83612077565b506040515f81600191600154612ca68161220a565b8084529360209160018116908115612c2c5750600114612cce57505061244892500382612093565b91509260015f527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6935f925b828410612d1557506124489450505081016020015f80612bc0565b85548785018301529485019486945092810192612cfa565b670de0b6b3a764000091808303612d445750905090565b8290671bc16d674ec800008103612d61575050806125b091612a5f565b673782dace9d9000008103612d855750612d7e826125b093612a5f565b0480612a5f565b9050612d9091612f7d565b612d9981612a48565b60015f1993848301040190151502906001820180831161239057811015612dc1575050505f90565b030190565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411612e4a579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15612343575f5173ffffffffffffffffffffffffffffffffffffffff811615612e4057905f905f90565b505f906001905f90565b5050505f9160039190565b60048110156121f65780612e67575050565b60018103612e97577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b60028103612ecb57507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b600314612ed55750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b908015612f3157670de0b6b3a764000091828102928184041490151715612390576001905f19830104019015150290565b7f0a0c22c7000000000000000000000000000000000000000000000000000000005f5260045ffd5b8015612a7c576ec097ce7bc90715b34b9f10000000000590565b8115612a7c570590565b9080156138a65781156138a0578160ff1c61387857770bce5086492111aea88f4bb1ca6bcf584181ea8059f765328110156138505781670c7d713b49da0000128061383f575b156134dc57670de0b6b3a7640000916ec097ce7bc90715b34b9f100000000090613016908402828101907fffffffffffffffffffffffffffffffffff3f68318436f8ea4cb460f000000000018302612f73565b9080828002059181838202058284820205838582020591848684020593858786020595808888020597880205600f900596600d900595600b900594600990059360079005926005900591600390050101010101010160011b918082818507020592050201670de0b6b3a7640000905b057ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc000081811315806134c9575b156134a15781908212158061348e575b15613466575f915f8112613457575b506064906806f05b59d3b200000081126133f4577ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e0000000168056bc75e2d6310000082770195e54c5dd42177f53a27172fa9ec630262827000000000925b02819068ad78ebc5ac620000008112156133bb575b6856bc75e2d631000000811215613381575b682b5e3af16b18800000811215613349575b6815af1d78b58c400000811215613311575b680ad78ebc5ac62000008112156132da575b828112156132a3575b6802b5e3af16b188000081121561326c575b68015af1d78b58c40000811215613235575b60028382800205056003848383020505600485848302050585600581868402050560068287830205056007838883020505906008848984020505926009858a8602050595600a868b8902050597600b878c8b02050599600c888d8d0205059b01010101010101010101010102050205905f146124485761244890612f59565b6806f5f17757889379377ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000849201920205906131b6565b6808f00f760a4b2db55d7ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000849201920205906131a4565b680ebc5fb417461211107ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf0000084920192020590613192565b68280e60114edb805d037ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e0000084920192020590613189565b690127fa27722cc06cc5e27fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c0000084920192020590613177565b693f1fce3da636ea5cf8507fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e780000084920192020590613165565b6b02df0ab5a80a22c61ab5a7007fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000084920192020590613153565b6e01855144814a7ff805980ff008400091507fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e00000001613141565b6803782dace9d90000008112613444577ffffffffffffffffffffffffffffffffffffffffffffffffc87d25316270000000168056bc75e2d63100000826b1425982cf597cd205cef73809261312c565b68056bc75e2d631000008260019261312c565b600192505f03905060646130d0565b7fd4794efd000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156130c1565b7fa2f9f7e3000000000000000000000000000000000000000000000000000000005f5260045ffd5b5068070c1cc73b00c800008213156130b1565b81670de0b6b3a7640000925f91848112613829575b506064905f7e1600ef3172e58d2e933ec884fde10064c63b5372d805e203c00000000000008212156137fe575b73011798004d755d3c8bc8e03204cf44619e0000008212156137dd575b820290808302906e01855144814a7ff805980ff008400090818312156137ba575b50506b02df0ab5a80a22c61ab5a7008082121561379a575b50693f1fce3da636ea5cf8508082121561377a575b50690127fa27722cc06cc5e28082121561375a575b5068280e60114edb805d038082121561373a575b50680ebc5fb4174612111080821215613723575b506808f00f760a4b2db55d80821215613703575b506806f5f1775788937937808212156136e3575b506806248f33704b286603808212156136c4575b506805c548670b9510e7ac808212156136a5575b5061365268056bc75e2d6310000091827ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf00000818301920102612f73565b9080828002059181838202058284820205916003600560076009600b888a89020598808b8b02059a8b0205059805960594059205010101010160011b0105905f146136a0575f035b02613085565b61369a565b68056bc75e2d631000006756bc75e2d63100009202059101905f613616565b68056bc75e2d6310000067ad78ebc5ac6200009202059101905f613602565b68056bc75e2d6310000068015af1d78b58c400009202059101905f6135ee565b68056bc75e2d631000006802b5e3af16b18800009202059101905f6135da565b68056bc75e2d63100000809202059101905f6135c6565b68056bc75e2d63100000680ad78ebc5ac62000009202059101905f6135b2565b68056bc75e2d631000006815af1d78b58c4000009202059101905f61359e565b68056bc75e2d63100000682b5e3af16b188000009202059101905f613589565b68056bc75e2d631000006856bc75e2d6310000009202059101905f613574565b68ad78ebc5ac62000000925069021e19e0c9bab240000002059101905f8061355c565b906b1425982cf597cd205cef73806803782dace9d90000009105910161353b565b50770195e54c5dd42177f53a27172fa9ec63026282700000000090056806f05b59d3b200000061351e565b90506138359150612f59565b60019060646134f1565b50670f43fc2c04ee00008212612fc3565b7fd8317311000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f022701e0000000000000000000000000000000000000000000000000000000005f5260045ffd5b50505f90565b5050670de0b6b3a76400009056fea2646970667358221220852f5fa380002ec91aef32b8fec29b85f67797dc1801356be9c26c32b62cc84c64736f6c634300081b0033","opcodes":"PUSH1 0x80 PUSH1 0x40 SWAP1 DUP1 DUP3 MSTORE PUSH1 0x4 DUP1 CALLDATASIZE LT ISZERO PUSH2 0x15 JUMPI PUSH0 DUP1 REVERT JUMPDEST PUSH1 0xE0 PUSH0 CALLDATALOAD DUP2 SHR SWAP3 DUP4 PUSH4 0x1FFC9A7 EQ PUSH2 0x1F59 JUMPI POP DUP3 PUSH4 0x6FDDE03 EQ PUSH2 0x1EAA JUMPI DUP3 PUSH4 0x95EA7B3 EQ PUSH2 0x1E2C JUMPI DUP3 PUSH4 0x16A0B3E0 EQ PUSH2 0x1BF3 JUMPI DUP3 PUSH4 0x18160DDD EQ PUSH2 0x1BD7 JUMPI DUP3 PUSH4 0x19F32CCD EQ PUSH2 0x1B98 JUMPI DUP3 PUSH4 0x23B872DD EQ PUSH2 0x1AF0 JUMPI DUP3 PUSH4 0x23DE6651 EQ PUSH2 0x1ABE JUMPI DUP3 PUSH4 0x273C1ADF EQ PUSH2 0x1A9C JUMPI DUP3 PUSH4 0x30ADF81F EQ PUSH2 0x1A62 JUMPI DUP3 PUSH4 0x313CE567 EQ PUSH2 0x1A47 JUMPI DUP3 PUSH4 0x3644E515 EQ PUSH2 0x1A2B JUMPI DUP3 PUSH4 0x3F3353DE EQ PUSH2 0x18B7 JUMPI DUP3 PUSH4 0x53B79BD7 EQ PUSH2 0x16FB JUMPI DUP3 PUSH4 0x54FD4D50 EQ PUSH2 0x160B JUMPI DUP3 PUSH4 0x5687F2B8 EQ PUSH2 0x15AC JUMPI DUP3 PUSH4 0x627CDCB9 EQ PUSH2 0x1583 JUMPI DUP3 PUSH4 0x654CF15D EQ PUSH2 0x1561 JUMPI DUP3 PUSH4 0x679AEFCE EQ PUSH2 0x152A JUMPI DUP3 PUSH4 0x70A08231 EQ PUSH2 0x1456 JUMPI DUP3 PUSH4 0x72C98186 EQ PUSH2 0x1335 JUMPI DUP3 PUSH4 0x7ECEBE00 EQ PUSH2 0x12F1 JUMPI DUP3 PUSH4 0x81FA807C EQ PUSH2 0x1230 JUMPI DUP3 PUSH4 0x84B0196E EQ PUSH2 0x1127 JUMPI DUP3 PUSH4 0x8D928AF8 EQ PUSH2 0x10D7 JUMPI DUP3 PUSH4 0x95D89B41 EQ PUSH2 0xFD1 JUMPI DUP3 PUSH4 0x984DE9E8 EQ PUSH2 0xE0F JUMPI DUP3 PUSH4 0xA9059CBB EQ PUSH2 0xCFC JUMPI DUP3 PUSH4 0xAA6CA808 EQ PUSH2 0xC37 JUMPI DUP3 PUSH4 0xABB1DC44 EQ PUSH2 0x9CE JUMPI DUP3 PUSH4 0xB156AA0A EQ PUSH2 0x907 JUMPI DUP3 PUSH4 0xB677FA56 EQ PUSH2 0x8E5 JUMPI DUP3 PUSH4 0xC0BC6F33 EQ PUSH2 0x60C JUMPI DUP3 PUSH4 0xCE20ECE7 EQ PUSH2 0x5EC JUMPI DUP3 PUSH4 0xD335B0CF EQ PUSH2 0x559 JUMPI DUP3 PUSH4 0xD505ACCF EQ PUSH2 0x2EE JUMPI POP DUP2 PUSH4 0xDD62ED3E EQ PUSH2 0x1FB JUMPI POP PUSH4 0xF89F27ED EQ PUSH2 0x1C4 JUMPI PUSH0 DUP1 REVERT JUMPDEST CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH2 0x1F3 SWAP1 PUSH2 0x1E0 PUSH2 0x29BD JUMP JUMPDEST SWAP1 MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x2170 JUMP JUMPDEST SUB SWAP1 RETURN JUMPDEST PUSH0 DUP1 REVERT JUMPDEST DUP3 CALLVALUE PUSH2 0x1F7 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH2 0x216 PUSH2 0x1FE5 JUMP JUMPDEST PUSH1 0x64 PUSH2 0x220 PUSH2 0x2008 JUMP JUMPDEST SWAP5 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP1 SWAP8 DUP8 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 PUSH32 0x927DA10500000000000000000000000000000000000000000000000000000000 DUP8 MSTORE ADDRESS SWAP1 DUP8 ADD MSTORE AND PUSH1 0x24 DUP6 ADD MSTORE AND PUSH1 0x44 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E5 JUMPI PUSH0 SWAP2 PUSH2 0x2B0 JUMPI JUMPDEST PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 POP PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x2DD JUMPI JUMPDEST DUP2 PUSH2 0x2CB PUSH1 0x20 SWAP4 DUP4 PUSH2 0x2093 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 SWAP2 MLOAD SWAP1 PUSH2 0x2A6 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2BE JUMP JUMPDEST MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 SWAP1 CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH2 0x307 PUSH2 0x1FE5 JUMP JUMPDEST SWAP1 PUSH2 0x310 PUSH2 0x2008 JUMP JUMPDEST PUSH1 0x44 CALLDATALOAD SWAP3 PUSH1 0x84 CALLDATALOAD SWAP1 PUSH1 0x64 CALLDATALOAD PUSH1 0xFF DUP4 AND DUP4 SUB PUSH2 0x1F7 JUMPI DUP1 TIMESTAMP GT PUSH2 0x52F JUMPI PUSH2 0x35D DUP3 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH0 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 PUSH0 KECCAK256 DUP1 SLOAD SWAP1 PUSH1 0x1 DUP3 ADD SWAP1 SSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH2 0x429 PUSH2 0x420 DUP8 MLOAD SWAP6 PUSH1 0x20 DUP8 ADD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP8 DUP9 SWAP6 DUP7 DUP10 AND SWAP8 DUP9 DUP14 DUP5 ADD MSTORE DUP8 DUP13 AND PUSH1 0x60 DUP5 ADD MSTORE DUP14 PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA0 DUP4 ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH1 0xC0 DUP2 MSTORE PUSH2 0x3D4 DUP2 PUSH2 0x205B JUMP JUMPDEST MLOAD SWAP1 KECCAK256 PUSH2 0x3DF PUSH2 0x2885 JUMP JUMPDEST SWAP1 DUP11 MLOAD SWAP2 PUSH32 0x1901000000000000000000000000000000000000000000000000000000000000 DUP4 MSTORE PUSH1 0x2 DUP4 ADD MSTORE PUSH1 0x22 DUP3 ADD MSTORE PUSH1 0xC4 CALLDATALOAD SWAP2 PUSH1 0x42 PUSH1 0xA4 CALLDATALOAD SWAP3 KECCAK256 PUSH2 0x2DC6 JUMP JUMPDEST SWAP1 SWAP3 SWAP2 SWAP3 PUSH2 0x2E55 JUMP JUMPDEST AND DUP2 DUP2 SUB PUSH2 0x502 JUMPI POP POP PUSH0 DUP5 SWAP6 SWAP7 PUSH2 0x49A PUSH1 0x20 SWAP7 MLOAD SWAP9 DUP10 SWAP7 DUP8 SWAP6 DUP7 SWAP5 PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP7 MSTORE DUP6 ADD PUSH1 0x40 SWAP2 SWAP5 SWAP4 SWAP3 SWAP5 PUSH1 0x60 DUP3 ADD SWAP6 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 SWAP3 AND DUP4 MSTORE AND PUSH1 0x20 DUP3 ADD MSTORE ADD MSTORE JUMP JUMPDEST SUB SWAP3 PUSH32 0x0 AND GAS CALL SWAP1 DUP2 ISZERO PUSH2 0x2E5 JUMPI POP PUSH2 0x4CE JUMPI STOP JUMPDEST PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x4FA JUMPI JUMPDEST DUP2 PUSH2 0x4E7 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x2093 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI PUSH2 0x4F8 SWAP1 PUSH2 0x2242 JUMP JUMPDEST STOP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x4DA JUMP JUMPDEST DUP8 PUSH32 0x4B800E4600000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 MSTORE PUSH1 0x44 PUSH0 REVERT JUMPDEST DUP7 PUSH32 0x6279130200000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI DUP1 MLOAD SWAP2 PUSH32 0xB45090F900000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH1 0x20 DUP3 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2E5 JUMPI PUSH0 SWAP2 PUSH2 0x2B0 JUMPI PUSH1 0x20 SWAP3 POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH6 0x9184E72A000 DUP2 MSTORE RETURN JUMPDEST SWAP2 POP CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI DUP3 MLOAD PUSH2 0x629 DUP2 PUSH2 0x205B JUMP JUMPDEST PUSH1 0x60 DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 DUP3 ADD SWAP2 PUSH1 0x60 DUP4 MSTORE DUP6 DUP2 ADD SWAP3 PUSH0 DUP5 MSTORE PUSH1 0x60 DUP3 ADD PUSH0 DUP2 MSTORE PUSH1 0x80 DUP4 ADD SWAP2 PUSH0 DUP4 MSTORE PUSH1 0xA0 DUP5 ADD SWAP4 PUSH0 DUP6 MSTORE PUSH1 0xC0 DUP2 ADD SWAP6 PUSH0 DUP8 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND SWAP1 DUP12 MLOAD PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x895 JUMPI PUSH0 SWAP2 PUSH2 0x8C3 JUMPI JUMPDEST POP DUP4 MSTORE DUP12 MLOAD PUSH32 0x7E361BDE00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x895 JUMPI PUSH0 SWAP2 PUSH2 0x89F JUMPI JUMPDEST POP DUP5 MSTORE DUP12 MLOAD PUSH32 0xB45090F900000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE DUP11 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x895 JUMPI PUSH0 SWAP2 PUSH2 0x868 JUMPI JUMPDEST POP DUP10 MSTORE PUSH2 0x767 PUSH2 0x2298 JUMP JUMPDEST DUP6 MSTORE DUP12 MLOAD SWAP2 DUP3 SWAP2 PUSH32 0xF29486A100000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE DUP2 PUSH1 0x24 PUSH2 0x1A0 SWAP5 DUP6 SWAP4 GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0x85E JUMPI SWAP3 DUP12 SWAP13 SWAP3 PUSH2 0x7F6 SWAP3 PUSH2 0x809 SWAP7 SWAP6 PUSH0 SWAP15 SWAP13 SWAP14 SWAP15 SWAP3 PUSH2 0x831 JUMPI JUMPDEST POP POP DUP11 DUP2 ADD MLOAD ISZERO ISZERO DUP9 MSTORE PUSH2 0x120 PUSH2 0x100 SWAP2 DUP3 DUP2 ADD MLOAD ISZERO ISZERO DUP12 MSTORE ADD MLOAD ISZERO ISZERO DUP11 MSTORE DUP4 MLOAD SWAP14 DUP14 DUP16 SWAP15 SWAP4 DUP16 SWAP5 DUP6 MSTORE MLOAD SWAP4 ADD MSTORE DUP13 ADD SWAP1 PUSH2 0x2170 JUMP JUMPDEST SWAP2 MLOAD SWAP1 PUSH1 0x1F NOT DUP12 DUP5 SUB ADD SWAP1 DUP12 ADD MSTORE PUSH2 0x2170 JUMP JUMPDEST SWAP6 MLOAD PUSH1 0x60 DUP9 ADD MSTORE MLOAD PUSH1 0x80 DUP8 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xA0 DUP7 ADD MSTORE MLOAD ISZERO ISZERO PUSH1 0xC0 DUP6 ADD MSTORE MLOAD ISZERO ISZERO SWAP1 DUP4 ADD MSTORE SUB SWAP1 RETURN JUMPDEST PUSH2 0x850 SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x857 JUMPI JUMPDEST PUSH2 0x848 DUP2 DUP4 PUSH2 0x2093 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x268D JUMP JUMPDEST PUSH0 DUP1 PUSH2 0x7C0 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x83E JUMP JUMPDEST DUP13 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST SWAP1 POP DUP11 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x88E JUMPI JUMPDEST PUSH2 0x87F DUP2 DUP4 PUSH2 0x2093 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI MLOAD PUSH0 PUSH2 0x75C JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x875 JUMP JUMPDEST DUP14 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x8BB SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x8B3 DUP2 DUP4 PUSH2 0x2093 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x24AC JUMP JUMPDEST SWAP1 POP PUSH0 PUSH2 0x719 JUMP JUMPDEST PUSH2 0x8DF SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x8D7 DUP2 DUP4 PUSH2 0x2093 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x27AF JUMP JUMPDEST PUSH0 PUSH2 0x6D6 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH8 0x9B6E64A8EC60000 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI DUP2 MLOAD SWAP1 PUSH32 0x535CFD8A00000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS SWAP1 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x9C4 JUMPI SWAP2 PUSH2 0x1F3 SWAP3 PUSH0 SWAP3 PUSH2 0x9A8 JUMPI JUMPDEST POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x2170 JUMP JUMPDEST PUSH2 0x9BD SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x8D7 DUP2 DUP4 PUSH2 0x2093 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0x995 JUMP JUMPDEST DUP3 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 MLOAD SWAP2 PUSH32 0x67E0E07600000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE PUSH0 DUP3 PUSH1 0x24 DUP2 DUP5 PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xC2D JUMPI PUSH0 SWAP4 PUSH0 SWAP3 PUSH0 SWAP3 PUSH0 SWAP6 PUSH2 0xB03 JUMPI JUMPDEST POP SWAP1 PUSH2 0xA7B SWAP6 SWAP5 SWAP4 SWAP3 SWAP2 DUP2 MLOAD SWAP7 DUP8 SWAP7 PUSH1 0x80 DUP9 MSTORE PUSH1 0x80 DUP9 ADD SWAP1 PUSH2 0x21A3 JUMP JUMPDEST PUSH1 0x20 DUP8 DUP3 SUB DUP2 DUP10 ADD MSTORE DUP1 DUP1 DUP8 MLOAD SWAP4 DUP5 DUP2 MSTORE ADD SWAP7 ADD SWAP3 PUSH0 SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0xABF JUMPI DUP10 DUP9 SUB DUP7 DUP12 ADD MSTORE DUP10 DUP1 PUSH2 0x1F3 DUP12 PUSH2 0xAB1 DUP13 DUP13 PUSH2 0x2170 JUMP JUMPDEST SWAP1 DUP4 DUP3 SUB PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x2170 JUMP JUMPDEST SWAP2 DUP5 SWAP9 SWAP10 POP PUSH1 0x60 DUP7 SWAP8 SWAP9 PUSH1 0x1 SWAP4 SWAP6 SWAP8 DUP4 SWAP8 MLOAD DUP1 MLOAD PUSH2 0xADC DUP2 PUSH2 0x21EC JUMP JUMPDEST DUP4 MSTORE DUP7 DUP6 DUP3 ADD MLOAD AND DUP6 DUP5 ADD MSTORE ADD MLOAD ISZERO ISZERO DUP10 DUP3 ADD MSTORE ADD SWAP9 ADD SWAP3 ADD DUP10 SWAP9 SWAP8 SWAP7 SWAP6 SWAP5 SWAP3 SWAP4 SWAP2 PUSH2 0xA93 JUMP JUMPDEST SWAP6 POP SWAP4 POP SWAP2 POP POP RETURNDATASIZE DUP1 PUSH0 DUP6 RETURNDATACOPY PUSH2 0xB19 DUP2 DUP6 PUSH2 0x2093 JUMP JUMPDEST DUP4 ADD SWAP3 PUSH1 0x80 DUP2 DUP6 SUB SLT PUSH2 0x1F7 JUMPI DUP1 MLOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP3 DUP4 DUP2 GT PUSH2 0x1F7 JUMPI DUP6 PUSH2 0xB46 SWAP2 DUP5 ADD PUSH2 0x23A4 JUMP JUMPDEST SWAP2 PUSH1 0x20 SWAP6 DUP7 DUP3 ADD MLOAD DUP6 DUP2 GT PUSH2 0x1F7 JUMPI DUP3 ADD DUP2 PUSH1 0x1F DUP3 ADD SLT ISZERO PUSH2 0x1F7 JUMPI DUP1 MLOAD SWAP1 PUSH2 0xB6E DUP3 PUSH2 0x20B6 JUMP JUMPDEST SWAP9 PUSH2 0xB7B DUP7 MLOAD SWAP11 DUP12 PUSH2 0x2093 JUMP JUMPDEST DUP3 DUP11 MSTORE DUP1 DUP11 ADD DUP2 PUSH1 0x60 DUP1 SWAP6 MUL DUP5 ADD ADD SWAP3 DUP6 DUP5 GT PUSH2 0x1F7 JUMPI DUP3 ADD SWAP1 JUMPDEST DUP4 DUP3 LT PUSH2 0xBDB JUMPI POP POP POP POP POP DUP3 DUP3 ADD MLOAD DUP6 DUP2 GT PUSH2 0x1F7 JUMPI DUP2 PUSH2 0xBB9 SWAP2 DUP5 ADD PUSH2 0x244B JUMP JUMPDEST SWAP5 PUSH1 0x60 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x1F7 JUMPI PUSH2 0xBD0 SWAP3 ADD PUSH2 0x244B JUMP JUMPDEST SWAP2 SWAP5 SWAP3 SWAP2 SWAP4 DUP7 PUSH2 0xA5E JUMP JUMPDEST DUP5 DUP3 DUP8 SUB SLT PUSH2 0x1F7 JUMPI DUP8 MLOAD SWAP1 PUSH2 0xBF0 DUP3 PUSH2 0x202B JUMP JUMPDEST DUP3 MLOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1F7 JUMPI DUP3 MSTORE DUP4 DUP4 ADD MLOAD SWAP1 DUP13 DUP3 AND DUP3 SUB PUSH2 0x1F7 JUMPI DUP3 DUP6 SWAP3 DUP4 DUP10 SWAP6 ADD MSTORE PUSH2 0xC1E DUP12 DUP7 ADD PUSH2 0x2242 JUMP JUMPDEST DUP12 DUP3 ADD MSTORE DUP2 MSTORE ADD SWAP2 ADD SWAP1 PUSH2 0xB96 JUMP JUMPDEST DUP4 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI DUP2 MLOAD SWAP1 PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS SWAP1 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x9C4 JUMPI SWAP2 PUSH2 0x1F3 SWAP3 PUSH0 SWAP3 PUSH2 0xCD8 JUMPI JUMPDEST POP MLOAD SWAP2 DUP3 SWAP2 PUSH1 0x20 DUP4 MSTORE PUSH1 0x20 DUP4 ADD SWAP1 PUSH2 0x21A3 JUMP JUMPDEST PUSH2 0xCF5 SWAP2 SWAP3 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0xCED DUP2 DUP4 PUSH2 0x2093 JUMP JUMPDEST DUP2 ADD SWAP1 PUSH2 0x2422 JUMP JUMPDEST SWAP1 DUP4 PUSH2 0xCC5 JUMP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1F7 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH2 0xD7A SWAP3 PUSH2 0xD1C PUSH2 0x1FE5 JUMP JUMPDEST DUP4 MLOAD PUSH32 0xBEABACC800000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST SUB DUP2 PUSH0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xE05 JUMPI PUSH2 0xDCB JUMPI JUMPDEST PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST PUSH1 0x20 DUP3 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0xDFD JUMPI JUMPDEST DUP2 PUSH2 0xDE4 PUSH1 0x20 SWAP4 DUP4 PUSH2 0x2093 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI PUSH2 0xDF7 PUSH1 0x20 SWAP3 PUSH2 0x2242 JUMP JUMPDEST POP PUSH2 0xDC1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0xDD7 JUMP JUMPDEST POP MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1F7 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1F7 JUMPI PUSH2 0xE3F SWAP1 CALLDATASIZE SWAP1 DUP5 ADD PUSH2 0x20CE JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1F7 JUMPI PUSH2 0xE54 DUP2 PUSH2 0x21EC JUMP JUMPDEST PUSH2 0xFCA JUMPI DUP3 JUMPDEST PUSH2 0xE62 PUSH2 0x29BD JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x3 EQ PUSH2 0xF75 JUMPI DUP1 PUSH1 0x4 EQ PUSH2 0xEEE JUMPI DUP1 PUSH1 0x1 EQ PUSH2 0xEAB JUMPI PUSH1 0x2 EQ PUSH2 0xE95 JUMPI PUSH1 0x51 DUP5 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x20 SWAP4 POP SWAP1 PUSH2 0xEA3 SWAP2 PUSH2 0x2F00 JUMP JUMPDEST SWAP1 JUMPDEST MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST POP SWAP1 SWAP3 PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0xEDB JUMPI POP PUSH1 0x20 SWAP3 PUSH2 0xED5 SWAP2 PUSH2 0x2A72 JUMP JUMPDEST SWAP1 PUSH2 0xEA5 JUMP JUMPDEST PUSH1 0x11 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP3 PUSH0 SWAP2 SWAP1 PUSH8 0xDE0B6B3A7640000 JUMPDEST DUP6 MLOAD DUP5 LT ISZERO PUSH2 0xF39 JUMPI PUSH2 0xF31 PUSH1 0x1 SWAP2 PUSH2 0xF2B PUSH2 0xF19 DUP8 DUP8 PUSH2 0x2284 JUMP JUMPDEST MLOAD PUSH2 0xF24 DUP9 DUP12 PUSH2 0x2284 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x2A90 JUMP JUMPDEST SWAP1 PUSH2 0x2B1B JUMP JUMPDEST SWAP4 ADD SWAP3 PUSH2 0xEFD JUMP JUMPDEST SWAP3 POP SWAP4 POP POP DUP1 ISZERO PUSH2 0xF4E JUMPI PUSH1 0x20 SWAP3 POP SWAP1 PUSH2 0xEA5 JUMP JUMPDEST DUP3 PUSH32 0x2654368900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP SWAP3 PUSH0 SWAP2 SWAP1 PUSH8 0xDE0B6B3A7640000 JUMPDEST DUP6 MLOAD DUP5 LT ISZERO PUSH2 0xF39 JUMPI PUSH8 0xDE0B6B3A7640000 PUSH2 0xFC1 PUSH1 0x1 SWAP3 PUSH2 0xFBB PUSH2 0xFA9 DUP9 DUP9 PUSH2 0x2284 JUMP JUMPDEST MLOAD PUSH2 0xFB4 DUP10 DUP13 PUSH2 0x2284 JUMP JUMPDEST MLOAD SWAP1 PUSH2 0x2D2D JUMP JUMPDEST SWAP1 PUSH2 0x2A5F JUMP JUMPDEST DIV SWAP4 ADD SWAP3 PUSH2 0xF84 JUMP JUMPDEST PUSH1 0x3 PUSH2 0xE5A JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI DUP2 MLOAD SWAP2 DUP3 PUSH0 DUP4 SLOAD PUSH2 0xFF3 DUP2 PUSH2 0x220A JUMP JUMPDEST SWAP1 DUP2 DUP5 MSTORE PUSH1 0x20 SWAP6 PUSH1 0x1 SWAP2 DUP8 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x1092 JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1036 JUMPI JUMPDEST POP POP POP PUSH2 0x1F3 SWAP3 SWAP2 PUSH2 0x1027 SWAP2 SUB DUP6 PUSH2 0x2093 JUMP JUMPDEST MLOAD SWAP3 DUP3 DUP5 SWAP4 DUP5 MSTORE DUP4 ADD SWAP1 PUSH2 0x1FC0 JUMP JUMPDEST PUSH0 SWAP1 DUP2 MSTORE DUP7 SWAP4 POP SWAP2 SWAP1 PUSH32 0x8A35ACFBC15FF81A39AE7D344FD709F28E8600B4AA8C65C6B64BFE7FE36BD19B JUMPDEST DUP3 DUP5 LT PUSH2 0x107A JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x1027 PUSH2 0x1F3 PUSH2 0x1014 JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x1061 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP8 DUP3 ADD MSTORE SWAP4 ISZERO ISZERO PUSH1 0x5 SHL DUP7 ADD SWAP1 SWAP4 ADD SWAP4 POP DUP5 SWAP3 POP PUSH2 0x1027 SWAP2 POP PUSH2 0x1F3 SWAP1 POP PUSH2 0x1014 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND DUP2 MSTORE RETURN JUMPDEST SWAP2 POP CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH2 0x1162 PUSH32 0x0 PUSH2 0x2B3D JUMP JUMPDEST SWAP3 PUSH2 0x118C PUSH32 0x0 PUSH2 0x2C6F JUMP JUMPDEST DUP2 MLOAD SWAP3 PUSH1 0x20 DUP5 ADD SWAP1 DUP5 DUP3 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP4 GT OR PUSH2 0x121D JUMPI POP SWAP2 PUSH2 0x11FD SWAP2 PUSH2 0x1F3 SWAP5 SWAP4 DUP3 MSTORE PUSH0 DUP5 MSTORE PUSH2 0x11F0 DUP3 MLOAD SWAP8 DUP9 SWAP8 PUSH32 0xF00000000000000000000000000000000000000000000000000000000000000 DUP10 MSTORE DUP1 PUSH1 0x20 DUP11 ADD MSTORE DUP9 ADD SWAP1 PUSH2 0x1FC0 JUMP JUMPDEST SWAP2 DUP7 DUP4 SUB SWAP1 DUP8 ADD MSTORE PUSH2 0x1FC0 JUMP JUMPDEST SWAP1 CHAINID PUSH1 0x60 DUP6 ADD MSTORE ADDRESS PUSH1 0x80 DUP6 ADD MSTORE PUSH0 PUSH1 0xA0 DUP6 ADD MSTORE DUP4 DUP3 SUB PUSH1 0xC0 DUP6 ADD MSTORE PUSH2 0x2170 JUMP JUMPDEST PUSH1 0x41 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI DUP2 MLOAD SWAP1 PUSH32 0xF29486A100000000000000000000000000000000000000000000000000000000 DUP3 MSTORE ADDRESS SWAP1 DUP3 ADD MSTORE PUSH2 0x1A0 SWAP1 DUP2 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xC2D JUMPI PUSH0 SWAP3 PUSH2 0x12D4 JUMPI JUMPDEST POP POP PUSH1 0x60 DUP3 DUP3 ADD MLOAD SWAP2 ADD MLOAD DUP3 MLOAD SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE RETURN JUMPDEST PUSH2 0x12EA SWAP3 POP DUP1 RETURNDATASIZE LT PUSH2 0x857 JUMPI PUSH2 0x848 DUP2 DUP4 PUSH2 0x2093 JUMP JUMPDEST DUP3 DUP1 PUSH2 0x12BD JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH2 0x1323 PUSH2 0x1FE5 JUMP JUMPDEST AND PUSH0 MSTORE PUSH1 0x2 DUP3 MSTORE DUP1 PUSH0 KECCAK256 SLOAD SWAP1 MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x20 SWAP3 PUSH1 0x3 NOT DUP5 DUP2 CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI DUP3 CALLDATALOAD SWAP2 PUSH8 0xFFFFFFFFFFFFFFFF SWAP2 DUP3 DUP5 GT PUSH2 0x1F7 JUMPI DUP4 CALLDATASIZE SUB ADD SLT PUSH2 0x1F7 JUMPI DUP4 MLOAD SWAP2 PUSH2 0x1374 DUP4 PUSH2 0x205B JUMP JUMPDEST DUP1 DUP5 ADD CALLDATALOAD PUSH1 0x2 DUP2 LT ISZERO PUSH2 0x1F7 JUMPI DUP4 MSTORE PUSH1 0x24 DUP2 ADD CALLDATALOAD DUP7 DUP5 ADD MSTORE PUSH1 0x44 DUP2 ADD CALLDATALOAD DUP3 DUP2 GT PUSH2 0x1F7 JUMPI PUSH2 0x13A7 SWAP1 DUP6 CALLDATASIZE SWAP2 DUP5 ADD ADD PUSH2 0x20CE JUMP JUMPDEST DUP6 DUP5 ADD MSTORE PUSH1 0x64 DUP2 ADD CALLDATALOAD PUSH1 0x60 DUP5 ADD MSTORE PUSH1 0x84 DUP2 ADD CALLDATALOAD PUSH1 0x80 DUP5 ADD MSTORE PUSH1 0xA4 DUP2 ADD CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1F7 JUMPI PUSH1 0xA0 DUP5 ADD MSTORE PUSH1 0xC4 DUP2 ADD CALLDATALOAD SWAP1 DUP3 DUP3 GT PUSH2 0x1F7 JUMPI ADD SWAP3 CALLDATASIZE PUSH1 0x23 DUP6 ADD SLT ISZERO PUSH2 0x1F7 JUMPI DUP1 DUP5 ADD CALLDATALOAD SWAP2 DUP3 GT PUSH2 0x121D JUMPI POP DUP4 MLOAD SWAP1 PUSH2 0x1422 DUP7 PUSH1 0x1F NOT PUSH1 0x1F DUP5 ADD AND ADD DUP4 PUSH2 0x2093 JUMP JUMPDEST DUP1 DUP3 MSTORE CALLDATASIZE PUSH1 0x24 DUP3 DUP7 ADD ADD GT PUSH2 0x1F7 JUMPI DUP6 DUP2 PUSH0 SWAP3 PUSH1 0x24 PUSH2 0xEA3 SWAP8 ADD DUP4 DUP7 ADD CALLDATACOPY DUP4 ADD ADD MSTORE PUSH1 0xC0 DUP3 ADD MSTORE PUSH2 0x1451 PUSH2 0x281A JUMP JUMPDEST PUSH2 0x24F0 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x20 SWAP2 DUP3 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI DUP3 PUSH2 0x1474 PUSH2 0x1FE5 JUMP JUMPDEST PUSH1 0x44 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP5 DUP6 DUP6 MLOAD SWAP7 DUP8 SWAP5 DUP6 SWAP4 PUSH32 0xF7888AEC00000000000000000000000000000000000000000000000000000000 DUP6 MSTORE ADDRESS SWAP1 DUP6 ADD MSTORE AND PUSH1 0x24 DUP4 ADD MSTORE PUSH32 0x0 AND GAS STATICCALL SWAP2 DUP3 ISZERO PUSH2 0xE05 JUMPI PUSH0 SWAP3 PUSH2 0x14FB JUMPI JUMPDEST POP MLOAD SWAP1 DUP2 MSTORE RETURN JUMPDEST SWAP1 SWAP2 POP DUP3 DUP2 DUP2 RETURNDATASIZE DUP4 GT PUSH2 0x1523 JUMPI JUMPDEST PUSH2 0x1513 DUP2 DUP4 PUSH2 0x2093 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI MLOAD SWAP1 DUP4 PUSH2 0x14F4 JUMP JUMPDEST POP RETURNDATASIZE PUSH2 0x1509 JUMP JUMPDEST POP CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH32 0x18E79A2000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH8 0x16345785D8A0000 DUP2 MSTORE RETURN JUMPDEST CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI CALLER PUSH0 SWAP1 DUP2 MSTORE PUSH1 0x2 PUSH1 0x20 MSTORE PUSH1 0x40 SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0x1 DUP2 ADD SWAP1 SWAP2 SSTORE STOP JUMPDEST DUP4 CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH32 0x8C5BE1E5EBEC7D5BD14F71427D1E84F3DD0314C0F7B2291E5B200AC8C7C3B925 PUSH2 0x15DE CALLDATASIZE PUSH2 0x212E JUMP JUMPDEST SWAP4 SWAP2 SWAP5 PUSH2 0x15E9 PUSH2 0x281A JUMP JUMPDEST MLOAD SWAP4 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 DUP2 AND SWAP5 AND SWAP3 LOG3 STOP JUMPDEST DUP4 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI DUP1 MLOAD PUSH1 0x5 SLOAD SWAP1 SWAP2 DUP3 PUSH0 PUSH2 0x162E DUP5 PUSH2 0x220A JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 SWAP5 PUSH1 0x1 SWAP1 DUP7 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x16BB JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1660 JUMPI JUMPDEST POP POP PUSH2 0x1F3 SWAP3 SWAP2 PUSH2 0x1027 SWAP2 SUB DUP6 PUSH2 0x2093 JUMP JUMPDEST SWAP1 DUP6 SWAP3 POP PUSH1 0x5 PUSH0 MSTORE PUSH32 0x36B6384B5ECA791C62761152D0C79BB0604C104A5FB6F4EB0703F3154BB3DB0 SWAP2 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x16A3 JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x1027 PUSH2 0x164E JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x168D JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND DUP7 DUP3 ADD MSTORE SWAP3 ISZERO ISZERO PUSH1 0x5 SHL DUP6 ADD SWAP1 SWAP3 ADD SWAP3 POP DUP4 SWAP2 POP PUSH2 0x1027 SWAP1 POP PUSH2 0x164E JUMP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI DUP1 MLOAD SWAP1 PUSH2 0x1719 DUP3 PUSH2 0x202B JUMP JUMPDEST PUSH1 0x60 DUP3 MSTORE PUSH1 0x20 SWAP1 DUP2 DUP4 ADD SWAP2 PUSH1 0x60 DUP4 MSTORE DUP2 DUP5 ADD SWAP3 PUSH1 0x60 DUP5 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP6 DUP7 PUSH32 0x0 AND SWAP1 DUP5 MLOAD PUSH32 0xCA4F280300000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS DUP3 DUP3 ADD MSTORE PUSH0 DUP2 PUSH1 0x24 DUP2 DUP7 GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x18AD JUMPI SWAP1 PUSH0 SWAP3 SWAP2 DUP4 SWAP2 PUSH2 0x1893 JUMPI JUMPDEST POP DUP9 MSTORE PUSH1 0x24 DUP7 MLOAD DUP1 SWAP5 DUP2 SWAP4 PUSH32 0x7E361BDE00000000000000000000000000000000000000000000000000000000 DUP4 MSTORE ADDRESS SWAP1 DUP4 ADD MSTORE GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x1889 JUMPI PUSH0 SWAP2 PUSH2 0x1870 JUMPI JUMPDEST POP DUP2 SWAP6 SWAP3 SWAP6 MSTORE PUSH2 0x17FF PUSH2 0x29BD JUMP JUMPDEST DUP5 MSTORE DUP3 MLOAD SWAP5 DUP1 DUP7 MSTORE PUSH1 0x80 DUP7 ADD SWAP3 MLOAD SWAP3 PUSH1 0x60 DUP3 DUP9 ADD MSTORE DUP4 MLOAD DUP1 SWAP2 MSTORE DUP2 PUSH1 0xA0 DUP9 ADD SWAP5 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x185A JUMPI DUP9 DUP1 PUSH2 0x1F3 DUP11 DUP11 PUSH2 0x1849 DUP12 DUP12 MLOAD PUSH1 0x1F NOT SWAP4 DUP5 DUP9 DUP5 SUB ADD SWAP1 DUP9 ADD MSTORE PUSH2 0x2170 JUMP JUMPDEST SWAP2 MLOAD SWAP1 DUP5 DUP4 SUB ADD PUSH1 0x60 DUP6 ADD MSTORE PUSH2 0x2170 JUMP JUMPDEST DUP4 MLOAD DUP11 AND DUP7 MSTORE SWAP5 DUP2 ADD SWAP5 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x1823 JUMP JUMPDEST PUSH2 0x1884 SWAP2 POP RETURNDATASIZE DUP1 PUSH0 DUP4 RETURNDATACOPY PUSH2 0x8B3 DUP2 DUP4 PUSH2 0x2093 JUMP JUMPDEST PUSH2 0x17F1 JUMP JUMPDEST DUP5 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH2 0x18A7 SWAP2 POP RETURNDATASIZE DUP1 DUP6 DUP4 RETURNDATACOPY PUSH2 0xCED DUP2 DUP4 PUSH2 0x2093 JUMP JUMPDEST DUP11 PUSH2 0x17AE JUMP JUMPDEST DUP7 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1F7 JUMPI DUP2 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI CALLDATASIZE PUSH1 0x23 SLT ISZERO PUSH2 0x1F7 JUMPI DUP2 MLOAD DUP3 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x1A18 JUMPI DUP4 MSTORE PUSH1 0x44 DUP2 CALLDATASIZE DUP3 GT PUSH2 0x1F7 JUMPI DUP4 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x1A08 JUMPI POP POP POP DUP1 MLOAD SWAP3 PUSH8 0xDE0B6B3A7640000 PUSH2 0x191F PUSH1 0x20 DUP5 ADD SWAP6 DUP7 MLOAD SWAP1 PUSH2 0x2383 JUMP JUMPDEST SUB PUSH2 0x19AC JUMPI POP MLOAD SWAP2 PUSH1 0x6 SLOAD SWAP3 DUP4 ISZERO PUSH2 0x1999 JUMPI PUSH1 0x6 PUSH0 MSTORE PUSH32 0xF652222313E28459528D920B65115C16C04F3EFC82AAEDC97BE59F3F377C0D3F SSTORE MLOAD SWAP2 PUSH1 0x1 LT ISZERO PUSH2 0x1986 JUMPI POP PUSH32 0xF652222313E28459528D920B65115C16C04F3EFC82AAEDC97BE59F3F377C0D40 SSTORE STOP JUMPDEST PUSH1 0x32 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x32 DUP4 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 DUP2 DUP5 ADD MSTORE PUSH1 0x15 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x5765696768747320646F6E277420746F74616C20310000000000000000000000 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 SWAP1 REVERT JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE PUSH1 0x20 SWAP2 DUP3 ADD SWAP2 ADD PUSH2 0x18F9 JUMP JUMPDEST PUSH1 0x41 DUP4 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP4 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 SWAP1 PUSH2 0xEA3 PUSH2 0x2885 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x12 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH32 0x6E71EDAE12B1B97F4D1F60370FEF10105FA2FAAE0126114A169C64845D6126C9 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH8 0x29A2241AF62C0000 DUP2 MSTORE RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH32 0xDDF252AD1BE2C89B69C2B068FC378DAA952BA7F163C4A11628F55A4DF523B3EF PUSH2 0x15DE CALLDATASIZE PUSH2 0x212E JUMP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH0 PUSH1 0x84 PUSH2 0x1B05 CALLDATASIZE PUSH2 0x212E JUMP JUMPDEST DUP7 MLOAD PUSH32 0x15DACBEA00000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP9 DUP2 ADD SWAP9 SWAP1 SWAP9 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP3 DUP4 AND PUSH1 0x24 DUP10 ADD MSTORE SWAP1 DUP3 AND PUSH1 0x44 DUP9 ADD MSTORE PUSH1 0x64 DUP8 ADD MSTORE DUP6 SWAP3 DUP4 SWAP2 PUSH32 0x0 AND GAS CALL DUP1 ISZERO PUSH2 0xE05 JUMPI PUSH2 0xDCB JUMPI PUSH1 0x20 SWAP1 MLOAD PUSH1 0x1 DUP2 MSTORE RETURN JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI CALLDATALOAD PUSH1 0x6 SLOAD DUP2 LT PUSH2 0x1BB5 JUMPI STOP JUMPDEST PUSH2 0x1BBE SWAP1 PUSH2 0x234E JUMP JUMPDEST DUP2 SLOAD SWAP1 PUSH1 0x3 SHL SWAP1 PUSH0 NOT PUSH1 0x24 CALLDATALOAD DUP4 SHL SWAP3 SHL NOT AND OR SWAP1 SSTORE PUSH0 DUP1 RETURN JUMPDEST DUP4 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 SWAP1 PUSH2 0xEA3 PUSH2 0x2298 JUMP JUMPDEST DUP4 DUP3 CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x60 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI DUP1 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1F7 JUMPI PUSH2 0x1C24 SWAP1 CALLDATASIZE SWAP1 DUP4 ADD PUSH2 0x20CE JUMP JUMPDEST SWAP2 PUSH1 0x24 CALLDATALOAD SWAP3 PUSH2 0x1C40 PUSH2 0x1C39 DUP6 PUSH1 0x44 CALLDATALOAD SWAP4 PUSH2 0x2284 JUMP JUMPDEST MLOAD SWAP5 PUSH2 0x27D5 JUMP JUMPDEST PUSH1 0x1 SWAP1 DUP2 DUP4 GT ISZERO PUSH2 0x1E26 JUMPI PUSH1 0x2 JUMPDEST DUP1 PUSH1 0x3 EQ PUSH2 0x1DB0 JUMPI DUP1 PUSH1 0x4 EQ PUSH2 0x1D17 JUMPI DUP1 PUSH1 0x1 EQ PUSH2 0x1CD5 JUMPI PUSH1 0x2 EQ PUSH2 0x1C80 JUMPI PUSH1 0x51 DUP6 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 SWAP2 SWAP3 SWAP4 DUP2 ISZERO PUSH2 0x1CAF JUMPI POP PUSH2 0xEA3 SWAP3 PUSH1 0x20 SWAP6 SWAP3 PUSH2 0xF2B SWAP3 PUSH15 0xC097CE7BC90715B34B9F0FFFFFFFFF DIV ADD SWAP1 PUSH2 0x2A90 JUMP JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST POP DUP1 SWAP3 SWAP4 SWAP5 SWAP2 POP ISZERO PUSH2 0x1D04 JUMPI POP SWAP3 PUSH2 0xF2B PUSH2 0xEA3 SWAP3 PUSH1 0x20 SWAP6 PUSH15 0xC097CE7BC90715B34B9F1000000000 DIV SWAP1 PUSH2 0x2A90 JUMP JUMPDEST PUSH1 0x12 SWAP1 PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST POP SWAP2 SWAP3 SWAP4 SWAP1 DUP1 PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH0 SWAP3 JUMPDEST PUSH2 0x1D70 JUMPI JUMPDEST POP POP POP DUP2 ISZERO PUSH2 0x1D4A JUMPI POP SWAP3 PUSH2 0xF2B PUSH2 0xEA3 SWAP3 PUSH1 0x20 SWAP6 SWAP1 PUSH2 0x2A90 JUMP JUMPDEST PUSH32 0x2654368900000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH0 REVERT JUMPDEST SWAP1 SWAP2 SWAP4 PUSH8 0xDE0B6B3A7640000 MLOAD DUP6 LT ISZERO PUSH2 0x1DAA JUMPI SWAP1 DUP3 PUSH2 0x1DA2 DUP2 SWAP4 PUSH2 0xF2B PUSH2 0x1D98 DUP10 DUP7 PUSH2 0x2284 JUMP JUMPDEST MLOAD PUSH2 0xF24 DUP11 PUSH2 0x224F JUMP JUMPDEST SWAP6 ADD SWAP3 PUSH2 0x1D2A JUMP JUMPDEST SWAP4 PUSH2 0x1D2F JUMP JUMPDEST POP SWAP2 SWAP3 SWAP4 SWAP1 DUP1 PUSH8 0xDE0B6B3A7640000 SWAP4 PUSH0 SWAP3 JUMPDEST PUSH2 0x1DE2 JUMPI POP POP POP DUP2 ISZERO PUSH2 0x1D4A JUMPI POP SWAP3 PUSH2 0xF2B PUSH2 0xEA3 SWAP3 PUSH1 0x20 SWAP6 SWAP1 PUSH2 0x2A90 JUMP JUMPDEST SWAP1 SWAP2 SWAP4 PUSH8 0xDE0B6B3A7640000 MLOAD DUP6 LT ISZERO PUSH2 0x1DAA JUMPI SWAP1 DUP3 PUSH8 0xDE0B6B3A7640000 PUSH2 0x1E1D DUP3 SWAP5 PUSH2 0xFBB PUSH2 0x1E13 DUP11 DUP8 PUSH2 0x2284 JUMP JUMPDEST MLOAD PUSH2 0xFB4 DUP12 PUSH2 0x224F JUMP JUMPDEST DIV SWAP6 ADD SWAP3 PUSH2 0x1DC3 JUMP JUMPDEST DUP2 PUSH2 0x1C4E JUMP JUMPDEST POP DUP3 CALLVALUE PUSH2 0x1F7 JUMPI DUP1 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH2 0xD7A SWAP3 PUSH2 0x1E4C PUSH2 0x1FE5 JUMP JUMPDEST DUP4 MLOAD PUSH32 0xE1F21C6700000000000000000000000000000000000000000000000000000000 DUP2 MSTORE CALLER SWAP3 DUP2 ADD SWAP3 DUP4 MSTORE PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND PUSH1 0x20 DUP4 ADD MSTORE PUSH1 0x24 CALLDATALOAD PUSH1 0x40 DUP4 ADD MSTORE SWAP4 DUP5 SWAP2 DUP3 SWAP2 PUSH1 0x60 SWAP1 SWAP2 ADD SWAP1 JUMP JUMPDEST DUP4 CALLVALUE PUSH2 0x1F7 JUMPI PUSH0 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI DUP1 MLOAD PUSH1 0x3 SLOAD SWAP1 SWAP2 DUP3 PUSH0 PUSH2 0x1ECD DUP5 PUSH2 0x220A JUMP JUMPDEST DUP1 DUP4 MSTORE PUSH1 0x20 SWAP5 PUSH1 0x1 SWAP1 DUP7 PUSH1 0x1 DUP3 AND SWAP2 DUP3 PUSH0 EQ PUSH2 0x16BB JUMPI POP POP PUSH1 0x1 EQ PUSH2 0x1EFE JUMPI POP POP PUSH2 0x1F3 SWAP3 SWAP2 PUSH2 0x1027 SWAP2 SUB DUP6 PUSH2 0x2093 JUMP JUMPDEST SWAP1 DUP6 SWAP3 POP PUSH1 0x3 PUSH0 MSTORE PUSH32 0xC2575A0E9E593C00F959F8C92F12DB2869C3395A3B0502D05E2516446F71F85B SWAP2 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x1F41 JUMPI POP POP POP DUP3 ADD ADD DUP2 PUSH2 0x1027 PUSH2 0x164E JUMP JUMPDEST DUP1 SLOAD DUP5 DUP11 ADD DUP7 ADD MSTORE DUP9 SWAP6 POP DUP8 SWAP5 SWAP1 SWAP4 ADD SWAP3 DUP2 ADD PUSH2 0x1F2B JUMP JUMPDEST DUP3 CALLVALUE PUSH2 0x1F7 JUMPI PUSH1 0x20 PUSH1 0x3 NOT CALLDATASIZE ADD SLT PUSH2 0x1F7 JUMPI CALLDATALOAD SWAP1 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND DUP1 SWAP3 SUB PUSH2 0x1F7 JUMPI PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH1 0x20 SWAP3 EQ DUP2 MSTORE RETURN JUMPDEST SWAP1 PUSH1 0x1F NOT PUSH1 0x1F PUSH1 0x20 DUP1 SWAP5 DUP1 MLOAD SWAP2 DUP3 SWAP2 DUP3 DUP8 MSTORE ADD DUP7 DUP7 ADD MCOPY PUSH0 DUP6 DUP3 DUP7 ADD ADD MSTORE ADD AND ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x4 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1F7 JUMPI JUMP JUMPDEST PUSH1 0x24 CALLDATALOAD SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP3 AND DUP3 SUB PUSH2 0x1F7 JUMPI JUMP JUMPDEST PUSH1 0x60 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2047 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0xE0 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2047 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2047 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST SWAP1 PUSH1 0x1F PUSH1 0x1F NOT SWAP2 ADD AND DUP2 ADD SWAP1 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2047 JUMPI PUSH1 0x40 MSTORE JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x2047 JUMPI PUSH1 0x5 SHL PUSH1 0x20 ADD SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x1F7 JUMPI PUSH1 0x20 SWAP1 DUP3 CALLDATALOAD PUSH2 0x20E8 DUP2 PUSH2 0x20B6 JUMP JUMPDEST SWAP4 PUSH2 0x20F6 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x2093 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x1F7 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x211F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 CALLDATALOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x2111 JUMP JUMPDEST PUSH1 0x3 NOT PUSH1 0x60 SWAP2 ADD SLT PUSH2 0x1F7 JUMPI PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 PUSH1 0x4 CALLDATALOAD DUP3 DUP2 AND DUP2 SUB PUSH2 0x1F7 JUMPI SWAP2 PUSH1 0x24 CALLDATALOAD SWAP1 DUP2 AND DUP2 SUB PUSH2 0x1F7 JUMPI SWAP1 PUSH1 0x44 CALLDATALOAD SWAP1 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x218F JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x2181 JUMP JUMPDEST SWAP1 DUP2 MLOAD DUP1 DUP3 MSTORE PUSH1 0x20 DUP1 DUP1 SWAP4 ADD SWAP4 ADD SWAP2 PUSH0 JUMPDEST DUP3 DUP2 LT PUSH2 0x21C2 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP4 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP6 MSTORE SWAP4 DUP2 ADD SWAP4 SWAP3 DUP2 ADD SWAP3 PUSH1 0x1 ADD PUSH2 0x21B4 JUMP JUMPDEST PUSH1 0x2 GT ISZERO PUSH2 0x21F6 JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x21 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH1 0x1 DUP3 DUP2 SHR SWAP3 AND DUP1 ISZERO PUSH2 0x2238 JUMPI JUMPDEST PUSH1 0x20 DUP4 LT EQ PUSH2 0x2224 JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x22 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP2 PUSH1 0x7F AND SWAP2 PUSH2 0x2219 JUMP JUMPDEST MLOAD SWAP1 DUP2 ISZERO ISZERO DUP3 SUB PUSH2 0x1F7 JUMPI JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 MLOAD DUP2 LT ISZERO PUSH2 0x2270 JUMPI PUSH1 0x5 SHL PUSH8 0xDE0B6B3A7640020 ADD SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST DUP1 MLOAD DUP3 LT ISZERO PUSH2 0x2270 JUMPI PUSH1 0x20 SWAP2 PUSH1 0x5 SHL ADD ADD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH32 0xE4DC2AA400000000000000000000000000000000000000000000000000000000 DUP2 MSTORE ADDRESS PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x20 DUP2 PUSH1 0x24 DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND GAS STATICCALL SWAP1 DUP2 ISZERO PUSH2 0x2343 JUMPI PUSH0 SWAP2 PUSH2 0x2314 JUMPI POP SWAP1 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 DUP2 RETURNDATASIZE PUSH1 0x20 GT PUSH2 0x233B JUMPI JUMPDEST DUP2 PUSH2 0x232F PUSH1 0x20 SWAP4 DUP4 PUSH2 0x2093 JUMP JUMPDEST DUP2 ADD SUB SLT PUSH2 0x1F7 JUMPI MLOAD SWAP1 JUMP JUMPDEST RETURNDATASIZE SWAP2 POP PUSH2 0x2322 JUMP JUMPDEST PUSH1 0x40 MLOAD RETURNDATASIZE PUSH0 DUP3 RETURNDATACOPY RETURNDATASIZE SWAP1 REVERT JUMPDEST PUSH1 0x6 SLOAD DUP2 LT ISZERO PUSH2 0x2270 JUMPI PUSH1 0x6 PUSH0 MSTORE PUSH32 0xF652222313E28459528D920B65115C16C04F3EFC82AAEDC97BE59F3F377C0D3F ADD SWAP1 PUSH0 SWAP1 JUMP JUMPDEST SWAP2 SWAP1 DUP3 ADD DUP1 SWAP3 GT PUSH2 0x2390 JUMPI JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x1F7 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x23BF DUP2 PUSH2 0x20B6 JUMP JUMPDEST SWAP4 PUSH2 0x23CD PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x2093 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x1F7 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x23F6 JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1F7 JUMPI DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x23E8 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x1F7 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1F7 JUMPI PUSH2 0x2448 SWAP3 ADD PUSH2 0x23A4 JUMP JUMPDEST SWAP1 JUMP JUMPDEST SWAP1 DUP1 PUSH1 0x1F DUP4 ADD SLT ISZERO PUSH2 0x1F7 JUMPI DUP2 MLOAD SWAP1 PUSH1 0x20 SWAP2 PUSH2 0x2466 DUP2 PUSH2 0x20B6 JUMP JUMPDEST SWAP4 PUSH2 0x2474 PUSH1 0x40 MLOAD SWAP6 DUP7 PUSH2 0x2093 JUMP JUMPDEST DUP2 DUP6 MSTORE PUSH1 0x20 DUP1 DUP7 ADD SWAP3 PUSH1 0x5 SHL DUP3 ADD ADD SWAP3 DUP4 GT PUSH2 0x1F7 JUMPI PUSH1 0x20 ADD SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x249D JUMPI POP POP POP POP SWAP1 JUMP JUMPDEST DUP2 MLOAD DUP2 MSTORE SWAP1 DUP4 ADD SWAP1 DUP4 ADD PUSH2 0x248F JUMP JUMPDEST SWAP2 SWAP1 SWAP2 PUSH1 0x40 DUP2 DUP5 SUB SLT PUSH2 0x1F7 JUMPI DUP1 MLOAD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP4 DUP5 DUP2 GT PUSH2 0x1F7 JUMPI DUP2 PUSH2 0x24D9 SWAP2 DUP5 ADD PUSH2 0x244B JUMP JUMPDEST SWAP4 PUSH1 0x20 DUP4 ADD MLOAD SWAP1 DUP2 GT PUSH2 0x1F7 JUMPI PUSH2 0x2448 SWAP3 ADD PUSH2 0x244B JUMP JUMPDEST PUSH1 0x40 DUP2 ADD SWAP1 DUP2 MLOAD PUSH2 0x2507 PUSH1 0x60 DUP4 ADD SWAP2 DUP3 MLOAD SWAP1 PUSH2 0x2284 JUMP JUMPDEST MLOAD SWAP3 MLOAD SWAP2 PUSH2 0x251B PUSH1 0x80 DUP3 ADD SWAP4 DUP5 MLOAD SWAP1 PUSH2 0x2284 JUMP JUMPDEST MLOAD SWAP2 DUP2 MLOAD PUSH2 0x2528 DUP2 PUSH2 0x21EC JUMP JUMPDEST PUSH2 0x2531 DUP2 PUSH2 0x21EC JUMP JUMPDEST PUSH2 0x25DC JUMPI PUSH2 0x254B PUSH2 0x2544 PUSH1 0x20 SWAP3 MLOAD PUSH2 0x27D5 JUMP JUMPDEST SWAP5 MLOAD PUSH2 0x27D5 JUMP JUMPDEST SWAP2 ADD MLOAD PUSH8 0xDE0B6B3A7640000 SWAP5 DUP6 PUSH2 0x2562 DUP3 PUSH2 0x2A2B JUMP JUMPDEST DIV DUP3 GT PUSH2 0x25B4 JUMPI PUSH2 0x2576 PUSH2 0x257C SWAP3 DUP3 PUSH2 0x2383 JUMP JUMPDEST SWAP1 PUSH2 0x2F00 JUMP JUMPDEST DUP5 DUP5 MUL SWAP4 DUP1 DUP6 DIV DUP7 EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2390 JUMPI PUSH2 0x259D PUSH2 0x25A3 SWAP3 PUSH2 0x25B0 SWAP6 PUSH2 0x2A72 JUMP JUMPDEST SWAP1 PUSH2 0x2A90 JUMP JUMPDEST DUP4 DUP2 DUP2 SUB SWAP2 LT MUL SWAP1 PUSH2 0x2A5F JUMP JUMPDEST DIV SWAP1 JUMP JUMPDEST PUSH32 0x340A453300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x25F6 PUSH2 0x25EF PUSH1 0x20 SWAP3 SWAP6 SWAP4 SWAP5 SWAP6 MLOAD PUSH2 0x27D5 JUMP JUMPDEST SWAP3 MLOAD PUSH2 0x27D5 JUMP JUMPDEST SWAP3 ADD MLOAD PUSH8 0xDE0B6B3A7640000 PUSH2 0x260B DUP6 PUSH2 0x2A2B JUMP JUMPDEST DIV DUP2 GT PUSH2 0x2665 JUMPI DUP4 SUB SWAP1 DUP4 DUP3 GT PUSH2 0x2390 JUMPI PUSH2 0x262C PUSH2 0x259D SWAP3 PUSH2 0x2632 SWAP6 PUSH2 0x2F00 JUMP JUMPDEST SWAP3 PUSH2 0x2F00 JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF21F494C589C0000 DUP2 ADD SWAP1 DUP2 GT PUSH2 0x2390 JUMPI PUSH2 0x2448 SWAP2 PUSH2 0x2B1B JUMP JUMPDEST PUSH32 0x64590B9F00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH2 0x1A0 SWAP2 DUP2 SWAP1 SUB DUP3 DUP2 SLT PUSH2 0x1F7 JUMPI PUSH1 0x40 MLOAD SWAP3 PUSH2 0x140 SWAP3 DUP4 DUP6 ADD SWAP3 PUSH8 0xFFFFFFFFFFFFFFFF SWAP1 DUP7 DUP6 LT DUP3 DUP7 GT OR PUSH2 0x2047 JUMPI PUSH1 0x80 SGT PUSH2 0x1F7 JUMPI PUSH2 0x1C0 DUP7 ADD SWAP1 DUP2 GT DUP5 DUP3 LT OR PUSH2 0x2047 JUMPI PUSH1 0x40 MSTORE PUSH2 0x26DF DUP2 PUSH2 0x2242 JUMP JUMPDEST DUP4 MSTORE PUSH2 0x26ED PUSH1 0x20 DUP3 ADD PUSH2 0x2242 JUMP JUMPDEST SWAP3 PUSH2 0x160 SWAP4 DUP5 DUP8 ADD MSTORE PUSH2 0x2702 PUSH1 0x40 DUP4 ADD PUSH2 0x2242 JUMP JUMPDEST SWAP3 PUSH2 0x180 SWAP4 DUP5 DUP9 ADD MSTORE PUSH2 0x2717 PUSH1 0x60 DUP5 ADD PUSH2 0x2242 JUMP JUMPDEST SWAP1 DUP8 ADD MSTORE DUP6 MSTORE PUSH1 0x80 DUP2 ADD MLOAD PUSH1 0x20 DUP7 ADD MSTORE PUSH1 0xA0 DUP2 ADD MLOAD PUSH1 0x40 DUP7 ADD MSTORE PUSH1 0xC0 DUP2 ADD MLOAD PUSH1 0x60 DUP7 ADD MSTORE PUSH1 0xE0 DUP2 ADD MLOAD PUSH5 0xFFFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1F7 JUMPI PUSH1 0x80 DUP7 ADD MSTORE PUSH2 0x100 DUP1 DUP3 ADD MLOAD PUSH4 0xFFFFFFFF DUP2 AND DUP2 SUB PUSH2 0x1F7 JUMPI PUSH2 0x27A8 SWAP5 PUSH2 0x279E SWAP2 PUSH1 0xA0 DUP10 ADD MSTORE PUSH2 0x2792 PUSH2 0x120 SWAP8 PUSH2 0x2786 DUP10 DUP8 ADD PUSH2 0x2242 JUMP JUMPDEST PUSH1 0xC0 DUP12 ADD MSTORE DUP6 ADD PUSH2 0x2242 JUMP JUMPDEST PUSH1 0xE0 DUP10 ADD MSTORE DUP4 ADD PUSH2 0x2242 JUMP JUMPDEST SWAP1 DUP7 ADD MSTORE ADD PUSH2 0x2242 JUMP JUMPDEST SWAP1 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST SWAP1 PUSH1 0x20 DUP3 DUP3 SUB SLT PUSH2 0x1F7 JUMPI DUP2 MLOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT PUSH2 0x1F7 JUMPI PUSH2 0x2448 SWAP3 ADD PUSH2 0x244B JUMP JUMPDEST PUSH1 0x6 SLOAD DUP2 LT ISZERO PUSH2 0x27F2 JUMPI PUSH2 0x27E8 SWAP1 PUSH2 0x234E JUMP JUMPDEST SWAP1 SLOAD SWAP1 PUSH1 0x3 SHL SHR SWAP1 JUMP JUMPDEST PUSH32 0xC1AB6DC100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND CALLER SUB PUSH2 0x2859 JUMPI JUMP JUMPDEST PUSH32 0x89676D500000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE CALLER PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF PUSH32 0x0 AND ADDRESS EQ DUP1 PUSH2 0x2994 JUMPI JUMPDEST ISZERO PUSH2 0x28ED JUMPI PUSH32 0x0 SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 ADD SWAP1 PUSH32 0x8B73C3C69BB8FE3D512ECC4CF759CC79239F7B179B0FFACAA9A75D522B39400F DUP3 MSTORE PUSH32 0x0 PUSH1 0x40 DUP3 ADD MSTORE PUSH32 0x0 PUSH1 0x60 DUP3 ADD MSTORE CHAINID PUSH1 0x80 DUP3 ADD MSTORE ADDRESS PUSH1 0xA0 DUP3 ADD MSTORE PUSH1 0xA0 DUP2 MSTORE PUSH1 0xC0 DUP2 ADD DUP2 DUP2 LT PUSH8 0xFFFFFFFFFFFFFFFF DUP3 GT OR PUSH2 0x2047 JUMPI PUSH1 0x40 MSTORE MLOAD SWAP1 KECCAK256 SWAP1 JUMP JUMPDEST POP PUSH32 0x0 CHAINID EQ PUSH2 0x28C4 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 PUSH1 0x6 SLOAD DUP1 DUP4 MSTORE DUP3 PUSH1 0x20 SWAP2 PUSH1 0x20 DUP3 ADD SWAP1 PUSH1 0x6 PUSH0 MSTORE PUSH32 0xF652222313E28459528D920B65115C16C04F3EFC82AAEDC97BE59F3F377C0D3F SWAP4 PUSH0 SWAP1 JUMPDEST DUP3 DUP3 LT PUSH2 0x2A11 JUMPI POP POP POP PUSH2 0x2A0F SWAP3 POP SUB DUP4 PUSH2 0x2093 JUMP JUMPDEST JUMP JUMPDEST DUP6 SLOAD DUP5 MSTORE PUSH1 0x1 SWAP6 DUP7 ADD SWAP6 DUP9 SWAP6 POP SWAP4 DUP2 ADD SWAP4 SWAP1 SWAP2 ADD SWAP1 PUSH2 0x29F9 JUMP JUMPDEST SWAP1 PUSH8 0x429D069189E0000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2390 JUMPI JUMP JUMPDEST SWAP1 PUSH2 0x2710 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2390 JUMPI JUMP JUMPDEST DUP2 DUP2 MUL SWAP3 SWAP2 DUP2 ISZERO SWAP2 DUP5 DIV EQ OR ISZERO PUSH2 0x2390 JUMPI JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2A7C JUMPI DIV SWAP1 JUMP JUMPDEST PUSH4 0x4E487B71 PUSH1 0xE0 SHL PUSH0 MSTORE PUSH1 0x12 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 PUSH8 0xDE0B6B3A7640000 SWAP1 DUP2 DUP2 SUB PUSH2 0x2AA7 JUMPI POP POP SWAP1 JUMP JUMPDEST PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x2AC2 JUMPI POP POP DUP1 PUSH2 0x2448 SWAP2 PUSH2 0x2B1B JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x2AE6 JUMPI POP POP PUSH2 0x2AE0 DUP2 PUSH2 0x2448 SWAP3 PUSH2 0x2B1B JUMP JUMPDEST DUP1 PUSH2 0x2B1B JUMP JUMPDEST PUSH2 0x2AF0 SWAP2 SWAP3 PUSH2 0x2F7D JUMP JUMPDEST SWAP1 PUSH1 0x1 PUSH2 0x2AFC DUP4 PUSH2 0x2A48 JUMP JUMPDEST SWAP2 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL PUSH1 0x1 DUP2 ADD DUP1 SWAP2 GT PUSH2 0x2390 JUMPI PUSH2 0x2448 SWAP2 PUSH2 0x2383 JUMP JUMPDEST SWAP1 PUSH2 0x2B25 SWAP2 PUSH2 0x2A5F JUMP JUMPDEST PUSH1 0x1 PUSH8 0xDE0B6B3A7640000 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x2B91 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x2B69 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x2B5F DUP4 PUSH2 0x2077 JUMP JUMPDEST DUP3 MSTORE PUSH1 0x20 DUP3 ADD MSTORE SWAP1 JUMP JUMPDEST PUSH32 0xB3512B0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH0 SLOAD SWAP2 PUSH2 0x2BA3 DUP4 PUSH2 0x220A JUMP JUMPDEST DUP1 DUP4 MSTORE SWAP3 PUSH1 0x20 SWAP1 PUSH1 0x1 SWAP1 DUP2 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x2C2C JUMPI POP PUSH1 0x1 EQ PUSH2 0x2BCE JUMPI JUMPDEST POP POP PUSH2 0x2448 SWAP3 POP SUB DUP3 PUSH2 0x2093 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH0 DUP1 MSTORE PUSH32 0x290DECD9548B62A8D60345A988386FC84BA6BC95484008F6362F93160EF3E563 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x2C14 JUMPI POP PUSH2 0x2448 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x2BC0 JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x2BF9 JUMP JUMPDEST SWAP1 POP PUSH1 0x20 SWAP4 POP PUSH2 0x2448 SWAP6 SWAP3 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 SWAP2 POP AND DUP3 DUP5 ADD MSTORE ISZERO ISZERO PUSH1 0x5 SHL DUP3 ADD ADD PUSH0 DUP1 PUSH2 0x2BC0 JUMP JUMPDEST PUSH1 0xFF DUP2 EQ PUSH2 0x2C91 JUMPI PUSH1 0xFF DUP2 AND SWAP1 PUSH1 0x1F DUP3 GT PUSH2 0x2B69 JUMPI PUSH1 0x40 MLOAD SWAP2 PUSH2 0x2B5F DUP4 PUSH2 0x2077 JUMP JUMPDEST POP PUSH1 0x40 MLOAD PUSH0 DUP2 PUSH1 0x1 SWAP2 PUSH1 0x1 SLOAD PUSH2 0x2CA6 DUP2 PUSH2 0x220A JUMP JUMPDEST DUP1 DUP5 MSTORE SWAP4 PUSH1 0x20 SWAP2 PUSH1 0x1 DUP2 AND SWAP1 DUP2 ISZERO PUSH2 0x2C2C JUMPI POP PUSH1 0x1 EQ PUSH2 0x2CCE JUMPI POP POP PUSH2 0x2448 SWAP3 POP SUB DUP3 PUSH2 0x2093 JUMP JUMPDEST SWAP2 POP SWAP3 PUSH1 0x1 PUSH0 MSTORE PUSH32 0xB10E2D527612073B26EECDFD717E6A320CF44B4AFAC2B0732D9FCBE2B7FA0CF6 SWAP4 PUSH0 SWAP3 JUMPDEST DUP3 DUP5 LT PUSH2 0x2D15 JUMPI POP PUSH2 0x2448 SWAP5 POP POP POP DUP2 ADD PUSH1 0x20 ADD PUSH0 DUP1 PUSH2 0x2BC0 JUMP JUMPDEST DUP6 SLOAD DUP8 DUP6 ADD DUP4 ADD MSTORE SWAP5 DUP6 ADD SWAP5 DUP7 SWAP5 POP SWAP3 DUP2 ADD SWAP3 PUSH2 0x2CFA JUMP JUMPDEST PUSH8 0xDE0B6B3A7640000 SWAP2 DUP1 DUP4 SUB PUSH2 0x2D44 JUMPI POP SWAP1 POP SWAP1 JUMP JUMPDEST DUP3 SWAP1 PUSH8 0x1BC16D674EC80000 DUP2 SUB PUSH2 0x2D61 JUMPI POP POP DUP1 PUSH2 0x25B0 SWAP2 PUSH2 0x2A5F JUMP JUMPDEST PUSH8 0x3782DACE9D900000 DUP2 SUB PUSH2 0x2D85 JUMPI POP PUSH2 0x2D7E DUP3 PUSH2 0x25B0 SWAP4 PUSH2 0x2A5F JUMP JUMPDEST DIV DUP1 PUSH2 0x2A5F JUMP JUMPDEST SWAP1 POP PUSH2 0x2D90 SWAP2 PUSH2 0x2F7D JUMP JUMPDEST PUSH2 0x2D99 DUP2 PUSH2 0x2A48 JUMP JUMPDEST PUSH1 0x1 PUSH0 NOT SWAP4 DUP5 DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 PUSH1 0x1 DUP3 ADD DUP1 DUP4 GT PUSH2 0x2390 JUMPI DUP2 LT ISZERO PUSH2 0x2DC1 JUMPI POP POP POP PUSH0 SWAP1 JUMP JUMPDEST SUB ADD SWAP1 JUMP JUMPDEST SWAP2 SWAP1 PUSH32 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0 DUP5 GT PUSH2 0x2E4A JUMPI SWAP2 PUSH1 0x20 SWAP4 PUSH1 0x80 SWAP3 PUSH1 0xFF PUSH0 SWAP6 PUSH1 0x40 MLOAD SWAP5 DUP6 MSTORE AND DUP7 DUP5 ADD MSTORE PUSH1 0x40 DUP4 ADD MSTORE PUSH1 0x60 DUP3 ADD MSTORE DUP3 DUP1 MSTORE PUSH1 0x1 GAS STATICCALL ISZERO PUSH2 0x2343 JUMPI PUSH0 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND ISZERO PUSH2 0x2E40 JUMPI SWAP1 PUSH0 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP PUSH0 SWAP1 PUSH1 0x1 SWAP1 PUSH0 SWAP1 JUMP JUMPDEST POP POP POP PUSH0 SWAP2 PUSH1 0x3 SWAP2 SWAP1 JUMP JUMPDEST PUSH1 0x4 DUP2 LT ISZERO PUSH2 0x21F6 JUMPI DUP1 PUSH2 0x2E67 JUMPI POP POP JUMP JUMPDEST PUSH1 0x1 DUP2 SUB PUSH2 0x2E97 JUMPI PUSH32 0xF645EEDF00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH1 0x2 DUP2 SUB PUSH2 0x2ECB JUMPI POP PUSH32 0xFCE698F700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST PUSH1 0x3 EQ PUSH2 0x2ED5 JUMPI POP JUMP JUMPDEST PUSH32 0xD78BCE0C00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 MSTORE PUSH1 0x24 PUSH0 REVERT JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x2F31 JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 DUP3 DUP2 MUL SWAP3 DUP2 DUP5 DIV EQ SWAP1 ISZERO OR ISZERO PUSH2 0x2390 JUMPI PUSH1 0x1 SWAP1 PUSH0 NOT DUP4 ADD DIV ADD SWAP1 ISZERO ISZERO MUL SWAP1 JUMP JUMPDEST PUSH32 0xA0C22C700000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST DUP1 ISZERO PUSH2 0x2A7C JUMPI PUSH15 0xC097CE7BC90715B34B9F1000000000 SDIV SWAP1 JUMP JUMPDEST DUP2 ISZERO PUSH2 0x2A7C JUMPI SDIV SWAP1 JUMP JUMPDEST SWAP1 DUP1 ISZERO PUSH2 0x38A6 JUMPI DUP2 ISZERO PUSH2 0x38A0 JUMPI DUP2 PUSH1 0xFF SHR PUSH2 0x3878 JUMPI PUSH24 0xBCE5086492111AEA88F4BB1CA6BCF584181EA8059F76532 DUP2 LT ISZERO PUSH2 0x3850 JUMPI DUP2 PUSH8 0xC7D713B49DA0000 SLT DUP1 PUSH2 0x383F JUMPI JUMPDEST ISZERO PUSH2 0x34DC JUMPI PUSH8 0xDE0B6B3A7640000 SWAP2 PUSH15 0xC097CE7BC90715B34B9F1000000000 SWAP1 PUSH2 0x3016 SWAP1 DUP5 MUL DUP3 DUP2 ADD SWAP1 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F68318436F8EA4CB460F000000000 ADD DUP4 MUL PUSH2 0x2F73 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV DUP4 DUP6 DUP3 MUL SDIV SWAP2 DUP5 DUP7 DUP5 MUL SDIV SWAP4 DUP6 DUP8 DUP7 MUL SDIV SWAP6 DUP1 DUP9 DUP9 MUL SDIV SWAP8 DUP9 MUL SDIV PUSH1 0xF SWAP1 SDIV SWAP7 PUSH1 0xD SWAP1 SDIV SWAP6 PUSH1 0xB SWAP1 SDIV SWAP5 PUSH1 0x9 SWAP1 SDIV SWAP4 PUSH1 0x7 SWAP1 SDIV SWAP3 PUSH1 0x5 SWAP1 SDIV SWAP2 PUSH1 0x3 SWAP1 SDIV ADD ADD ADD ADD ADD ADD ADD PUSH1 0x1 SHL SWAP2 DUP1 DUP3 DUP2 DUP6 SMOD MUL SDIV SWAP3 SDIV MUL ADD PUSH8 0xDE0B6B3A7640000 SWAP1 JUMPDEST SDIV PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC702BD3A30FC0000 DUP2 DUP2 SGT ISZERO DUP1 PUSH2 0x34C9 JUMPI JUMPDEST ISZERO PUSH2 0x34A1 JUMPI DUP2 SWAP1 DUP3 SLT ISZERO DUP1 PUSH2 0x348E JUMPI JUMPDEST ISZERO PUSH2 0x3466 JUMPI PUSH0 SWAP2 PUSH0 DUP2 SLT PUSH2 0x3457 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH9 0x6F05B59D3B2000000 DUP2 SLT PUSH2 0x33F4 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90FA4A62C4E000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP3 JUMPDEST MUL DUP2 SWAP1 PUSH9 0xAD78EBC5AC62000000 DUP2 SLT ISZERO PUSH2 0x33BB JUMPI JUMPDEST PUSH9 0x56BC75E2D631000000 DUP2 SLT ISZERO PUSH2 0x3381 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B18800000 DUP2 SLT ISZERO PUSH2 0x3349 JUMPI JUMPDEST PUSH9 0x15AF1D78B58C400000 DUP2 SLT ISZERO PUSH2 0x3311 JUMPI JUMPDEST PUSH9 0xAD78EBC5AC6200000 DUP2 SLT ISZERO PUSH2 0x32DA JUMPI JUMPDEST DUP3 DUP2 SLT ISZERO PUSH2 0x32A3 JUMPI JUMPDEST PUSH9 0x2B5E3AF16B1880000 DUP2 SLT ISZERO PUSH2 0x326C JUMPI JUMPDEST PUSH9 0x15AF1D78B58C40000 DUP2 SLT ISZERO PUSH2 0x3235 JUMPI JUMPDEST PUSH1 0x2 DUP4 DUP3 DUP1 MUL SDIV SDIV PUSH1 0x3 DUP5 DUP4 DUP4 MUL SDIV SDIV PUSH1 0x4 DUP6 DUP5 DUP4 MUL SDIV SDIV DUP6 PUSH1 0x5 DUP2 DUP7 DUP5 MUL SDIV SDIV PUSH1 0x6 DUP3 DUP8 DUP4 MUL SDIV SDIV PUSH1 0x7 DUP4 DUP9 DUP4 MUL SDIV SDIV SWAP1 PUSH1 0x8 DUP5 DUP10 DUP5 MUL SDIV SDIV SWAP3 PUSH1 0x9 DUP6 DUP11 DUP7 MUL SDIV SDIV SWAP6 PUSH1 0xA DUP7 DUP12 DUP10 MUL SDIV SDIV SWAP8 PUSH1 0xB DUP8 DUP13 DUP12 MUL SDIV SDIV SWAP10 PUSH1 0xC DUP9 DUP14 DUP14 MUL SDIV SDIV SWAP12 ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD ADD MUL SDIV MUL SDIV SWAP1 PUSH0 EQ PUSH2 0x2448 JUMPI PUSH2 0x2448 SWAP1 PUSH2 0x2F59 JUMP JUMPDEST PUSH9 0x6F5F1775788937937 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C0000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x31B6 JUMP JUMPDEST PUSH9 0x8F00F760A4B2DB55D PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E780000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x31A4 JUMP JUMPDEST PUSH9 0xEBC5FB41746121110 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x3192 JUMP JUMPDEST PUSH9 0x280E60114EDB805D03 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x3189 JUMP JUMPDEST PUSH10 0x127FA27722CC06CC5E2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEA50E2874A73C00000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x3177 JUMP JUMPDEST PUSH10 0x3F1FCE3DA636EA5CF850 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD4A1C50E94E7800000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x3165 JUMP JUMPDEST PUSH12 0x2DF0AB5A80A22C61AB5A700 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF000000 DUP5 SWAP3 ADD SWAP3 MUL SDIV SWAP1 PUSH2 0x3153 JUMP JUMPDEST PUSH15 0x1855144814A7FF805980FF0084000 SWAP2 POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5287143A539E000000 ADD PUSH2 0x3141 JUMP JUMPDEST PUSH9 0x3782DACE9D9000000 DUP2 SLT PUSH2 0x3444 JUMPI PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC87D2531627000000 ADD PUSH9 0x56BC75E2D63100000 DUP3 PUSH12 0x1425982CF597CD205CEF7380 SWAP3 PUSH2 0x312C JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP3 PUSH1 0x1 SWAP3 PUSH2 0x312C JUMP JUMPDEST PUSH1 0x1 SWAP3 POP PUSH0 SUB SWAP1 POP PUSH1 0x64 PUSH2 0x30D0 JUMP JUMPDEST PUSH32 0xD4794EFD00000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x30C1 JUMP JUMPDEST PUSH32 0xA2F9F7E300000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP PUSH9 0x70C1CC73B00C80000 DUP3 SGT ISZERO PUSH2 0x30B1 JUMP JUMPDEST DUP2 PUSH8 0xDE0B6B3A7640000 SWAP3 PUSH0 SWAP2 DUP5 DUP2 SLT PUSH2 0x3829 JUMPI JUMPDEST POP PUSH1 0x64 SWAP1 PUSH0 PUSH31 0x1600EF3172E58D2E933EC884FDE10064C63B5372D805E203C0000000000000 DUP3 SLT ISZERO PUSH2 0x37FE JUMPI JUMPDEST PUSH20 0x11798004D755D3C8BC8E03204CF44619E000000 DUP3 SLT ISZERO PUSH2 0x37DD JUMPI JUMPDEST DUP3 MUL SWAP1 DUP1 DUP4 MUL SWAP1 PUSH15 0x1855144814A7FF805980FF0084000 SWAP1 DUP2 DUP4 SLT ISZERO PUSH2 0x37BA JUMPI JUMPDEST POP POP PUSH12 0x2DF0AB5A80A22C61AB5A700 DUP1 DUP3 SLT ISZERO PUSH2 0x379A JUMPI JUMPDEST POP PUSH10 0x3F1FCE3DA636EA5CF850 DUP1 DUP3 SLT ISZERO PUSH2 0x377A JUMPI JUMPDEST POP PUSH10 0x127FA27722CC06CC5E2 DUP1 DUP3 SLT ISZERO PUSH2 0x375A JUMPI JUMPDEST POP PUSH9 0x280E60114EDB805D03 DUP1 DUP3 SLT ISZERO PUSH2 0x373A JUMPI JUMPDEST POP PUSH9 0xEBC5FB41746121110 DUP1 DUP3 SLT ISZERO PUSH2 0x3723 JUMPI JUMPDEST POP PUSH9 0x8F00F760A4B2DB55D DUP1 DUP3 SLT ISZERO PUSH2 0x3703 JUMPI JUMPDEST POP PUSH9 0x6F5F1775788937937 DUP1 DUP3 SLT ISZERO PUSH2 0x36E3 JUMPI JUMPDEST POP PUSH9 0x6248F33704B286603 DUP1 DUP3 SLT ISZERO PUSH2 0x36C4 JUMPI JUMPDEST POP PUSH9 0x5C548670B9510E7AC DUP1 DUP3 SLT ISZERO PUSH2 0x36A5 JUMPI JUMPDEST POP PUSH2 0x3652 PUSH9 0x56BC75E2D63100000 SWAP2 DUP3 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA9438A1D29CF00000 DUP2 DUP4 ADD SWAP3 ADD MUL PUSH2 0x2F73 JUMP JUMPDEST SWAP1 DUP1 DUP3 DUP1 MUL SDIV SWAP2 DUP2 DUP4 DUP3 MUL SDIV DUP3 DUP5 DUP3 MUL SDIV SWAP2 PUSH1 0x3 PUSH1 0x5 PUSH1 0x7 PUSH1 0x9 PUSH1 0xB DUP9 DUP11 DUP10 MUL SDIV SWAP9 DUP1 DUP12 DUP12 MUL SDIV SWAP11 DUP12 MUL SDIV SDIV SWAP9 SDIV SWAP7 SDIV SWAP5 SDIV SWAP3 SDIV ADD ADD ADD ADD ADD PUSH1 0x1 SHL ADD SDIV SWAP1 PUSH0 EQ PUSH2 0x36A0 JUMPI PUSH0 SUB JUMPDEST MUL PUSH2 0x3085 JUMP JUMPDEST PUSH2 0x369A JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0x56BC75E2D6310000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x3616 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH8 0xAD78EBC5AC620000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x3602 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C40000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x35EE JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B1880000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x35DA JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 DUP1 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x35C6 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0xAD78EBC5AC6200000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x35B2 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x15AF1D78B58C400000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x359E JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x2B5E3AF16B18800000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x3589 JUMP JUMPDEST PUSH9 0x56BC75E2D63100000 PUSH9 0x56BC75E2D631000000 SWAP3 MUL SDIV SWAP2 ADD SWAP1 PUSH0 PUSH2 0x3574 JUMP JUMPDEST PUSH9 0xAD78EBC5AC62000000 SWAP3 POP PUSH10 0x21E19E0C9BAB2400000 MUL SDIV SWAP2 ADD SWAP1 PUSH0 DUP1 PUSH2 0x355C JUMP JUMPDEST SWAP1 PUSH12 0x1425982CF597CD205CEF7380 PUSH9 0x3782DACE9D9000000 SWAP2 SDIV SWAP2 ADD PUSH2 0x353B JUMP JUMPDEST POP PUSH24 0x195E54C5DD42177F53A27172FA9EC630262827000000000 SWAP1 SDIV PUSH9 0x6F05B59D3B2000000 PUSH2 0x351E JUMP JUMPDEST SWAP1 POP PUSH2 0x3835 SWAP2 POP PUSH2 0x2F59 JUMP JUMPDEST PUSH1 0x1 SWAP1 PUSH1 0x64 PUSH2 0x34F1 JUMP JUMPDEST POP PUSH8 0xF43FC2C04EE0000 DUP3 SLT PUSH2 0x2FC3 JUMP JUMPDEST PUSH32 0xD831731100000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST PUSH32 0x22701E000000000000000000000000000000000000000000000000000000000 PUSH0 MSTORE PUSH1 0x4 PUSH0 REVERT JUMPDEST POP POP PUSH0 SWAP1 JUMP JUMPDEST POP POP PUSH8 0xDE0B6B3A7640000 SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 DUP6 0x2F PUSH0 LOG3 DUP1 STOP 0x2E 0xC9 BYTE 0xEF ORIGIN 0xB8 INVALID 0xC2 SWAP12 DUP6 0xF6 PUSH24 0x97DC1801356BE9C26C32B62CC84C64736F6C634300081B00 CALLER ","sourceMap":"396:1420:132:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4124:49:57;396:1420:132;4124:49:57;;;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1615:50:36;396:1420:132;1615:50:36;;;396:1420:132;;;;;;;;;;;;;;;;;;;-1:-1:-1;;396:1420:132;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;396:1420:132;;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;3545:47:57;;;;;396:1420:132;3545:47:57;;3570:4;3545:47;;;396:1420:132;;;;;;;;;;;3545:6:57;396:1420:132;3545:47:57;;;;;;;396:1420:132;3545:47:57;;;396:1420:132;;;;;;;;;3545:47:57;;;396:1420:132;3545:47:57;;396:1420:132;3545:47:57;;;;;;396:1420:132;3545:47:57;;;:::i;:::-;;;396:1420:132;;;;;;;3545:47:57;;;;;;-1:-1:-1;3545:47:57;;;396:1420:132;;;;;;;;;;;;;;-1:-1:-1;;396:1420:132;;;;;;;:::i;:::-;;;;:::i;:::-;;;;;;;;;;;;;;;;5510:15:57;;:26;5506:97;;5696:16;;396:1420:132;;-1:-1:-1;396:1420:132;1121:7:109;396:1420:132;;;-1:-1:-1;396:1420:132;;;;;;;;;759:395:109;;5696:16:57;396:1420:132;7021:8:113;6967:25;396:1420:132;;5644:79:57;396:1420:132;5644:79:57;;1443:95;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5644:79:57;;;;;:::i;:::-;396:1420:132;5634:90:57;;5053:20:114;;:::i;:::-;3515:233:115;;;;;;;;;;;;;;;396:1420:132;;;3515:233:115;396:1420:132;;3515:233:115;;6967:25:113;:::i;:::-;7021:8;;;;;:::i;:::-;396:1420:132;5848:15:57;;;5844:88;;396:1420:132;;;;;;5942:38:57;396:1420:132;;;5942:38:57;;;;;;;396:1420:132;5942:38:57;;;;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;5942:38:57;;:6;;396:1420:132;5942:38:57;;;;;;;;;;396:1420:132;5942:38:57;396:1420:132;5942:38:57;;396:1420:132;5942:38:57;;;;;;396:1420:132;5942:38:57;;;:::i;:::-;;;396:1420:132;;;;;;;:::i;:::-;;5942:38:57;;;-1:-1:-1;5942:38:57;;5844:88;5886:35;;396:1420:132;5886:35:57;396:1420:132;;;;;5886:35:57;5506:97;5559:33;;396:1420:132;5559:33:57;396:1420:132;;;5559:33:57;396:1420:132;;;;;;;-1:-1:-1;;396:1420:132;;;;;;;1615:50:36;396:1420:132;1615:50:36;;1658:4;1615:50;;;396:1420:132;1615:50:36;:6;396:1420:132;1615:6:36;396:1420:132;1615:6:36;396:1420:132;1615:50:36;;;;;;;396:1420:132;1615:50:36;;;;396:1420:132;;;;;;;;;;;;;-1:-1:-1;;396:1420:132;;;;;;;;2778:8:121;396:1420:132;;;;;;;;;;-1:-1:-1;;396:1420:132;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10770:6:121;396:1420:132;;;;;10770:44:121;;10808:4;10770:44;;;396:1420:132;;10770:44:121;396:1420:132;10770:44:121;;;;;;;;;396:1420:132;10770:44:121;;;396:1420:132;10742:72:121;;;396:1420:132;;;10846:39:121;;10808:4;10846:39;;;396:1420:132;;10846:39:121;396:1420:132;10846:39:121;;;;;;;;;396:1420:132;10846:39:121;;;396:1420:132;10824:61:121;;;396:1420:132;;;10926:50:121;;10808:4;10926:50;;;396:1420:132;10926:50:121;;396:1420:132;10926:50:121;;;;;;;;;396:1420:132;10926:50:121;;;396:1420:132;;;;11005:13:121;;:::i;:::-;396:1420:132;;;;11060:35:121;;;396:1420:132;11060:35:121;;10808:4;11060:35;;;396:1420:132;11060:35:121;396:1420:132;11060:35:121;;;;;;;;;;;;;;;396:1420:132;11060:35:121;396:1420:132;11060:35:121;;396:1420:132;11060:35:121;;;;;;;396:1420:132;11130:28:121;;;;;396:1420:132;;;;;11249:31:121;11188:23;;;;;396:1420:132;;;;;11249:31:121;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;396:1420:132;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11060:35:121;;;;;;-1:-1:-1;11060:35:121;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;396:1420:132;;;;;;;;;10926:50:121;;;;;;;;;;;;;;;;:::i;:::-;;;396:1420:132;;;;;10926:50:121;;;;;;;;;396:1420:132;;;;;;;;;10846:39:121;;;;;;396:1420:132;10846:39:121;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;10770:44;;;;;;396:1420:132;10770:44:121;;;;;;:::i;:::-;;;;;:::i;:::-;;;;396:1420:132;;;;;;-1:-1:-1;;396:1420:132;;;;;;;;3215:5:52;396:1420:132;;;;;;;;;;-1:-1:-1;;396:1420:132;;;;;;;1441:44:36;396:1420:132;1441:44:36;;1479:4;1441:44;;;396:1420:132;;1441:6:36;396:1420:132;1441:6:36;396:1420:132;1441:6:36;396:1420:132;1441:44:36;;;;;;;;396:1420:132;1441:44:36;396:1420:132;1441:44:36;;;396:1420:132;;;;;;;;;;;;;;:::i;1441:44:36:-;;;;;;;396:1420:132;1441:44:36;;;;;;:::i;:::-;;;;;;396:1420:132;;;;;;;;;;;;;;;;-1:-1:-1;;396:1420:132;;;;;;;;1247:38:36;396:1420:132;1247:38:36;;1279:4;1247:38;;;396:1420:132;;1247:6:36;396:1420:132;1247:6:36;;;396:1420:132;1247:38:36;;;;;;;396:1420:132;;;;;;;1247:38:36;;;396:1420:132;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1247:38:36;;;;;;;;;;396:1420:132;1247:38:36;;;;;;:::i;:::-;;;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;1247:38:36;;;;;;;;396:1420:132;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1247:38:36;396:1420:132;;;;;;;;;;;;;;;;-1:-1:-1;;396:1420:132;;;;;;;892:35:36;396:1420:132;892:35:36;;921:4;892:35;;;396:1420:132;;892:6:36;396:1420:132;892:6:36;396:1420:132;892:6:36;396:1420:132;892:35:36;;;;;;;;396:1420:132;892:35:36;396:1420:132;892:35:36;;;396:1420:132;;;;;;;;;;;;;;:::i;892:35:36:-;;;;;;;396:1420:132;892:35:36;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;396:1420:132;;;;;;;-1:-1:-1;;396:1420:132;;;;;;3345:39:57;396:1420:132;;;:::i;:::-;;;;3345:39:57;;3361:10;3345:39;;;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;3345:39:57;;:6;396:1420:132;;3345:6:57;396:1420:132;3345:39:57;;;;;;;;396:1420:132;;;;;;;;3345:39:57;396:1420:132;3345:39:57;;396:1420:132;3345:39:57;;;;;;396:1420:132;3345:39:57;;;:::i;:::-;;;396:1420:132;;;;;;;;:::i;:::-;3345:39:57;;;;;;-1:-1:-1;3345:39:57;;;396:1420:132;;;;;;;;;;;;;;;;-1:-1:-1;;396:1420:132;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;6029:41:121;;:135;;396:1420:132;;:::i;:::-;6182:56:121;396:1420:132;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;396:1420:132;;;;;;;;1744:19:50;;;;;;:::i;:::-;396:1420:132;;;;;;;;465:4:50;;;;396:1420:132;;;;;;;;;;;;;;;1625:13:50;396:1420:132;1625:13:50;;;;:::i;:::-;396:1420:132;;;;;;-1:-1:-1;;;396:1420:132;;;;;;;-1:-1:-1;396:1420:132;;;;465:4:50;6467:3:52;396:1420:132;;6437:28:52;;;;;6498:56;396:1420:132;6514:11:52;:39;:11;;;;:::i;:::-;396:1420:132;6532:20:52;;;;:::i;:::-;396:1420:132;6514:39:52;;:::i;:::-;6498:56;;:::i;:::-;6467:3;396:1420:132;6422:13:52;;;6437:28;;;;;;6579:14;;6575:67;;396:1420:132;;;;;;6575:67:52;6616:15;;396:1420:132;6616:15:52;396:1420:132;6616:15:52;396:1420:132;-1:-1:-1;396:1420:132;;;;465:4:50;4758:3:52;396:1420:132;;4728:28:52;;;;;465:4:50;838:5;396:1420:132;4807:11:52;:41;:11;;;;:::i;:::-;396:1420:132;4827:20:52;;;;:::i;:::-;396:1420:132;4807:41:52;;:::i;:::-;838:5:50;;:::i;:::-;396:1420:132;4758:3:52;396:1420:132;4713:13:52;;;6029:135:121;6131:33;6029:135;;396:1420:132;;;;;;;-1:-1:-1;;396:1420:132;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;396:1420:132;;;;;;;;;-1:-1:-1;;;396:1420:132;;;;;;;;;;;;;;;;;;;-1:-1:-1;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;396:1420:132;;-1:-1:-1;396:1420:132;;-1:-1:-1;396:1420:132;;-1:-1:-1;396:1420:132;;;;;;;;-1:-1:-1;;396:1420:132;;;;;;;;;2951:6:57;396:1420:132;;;;;;;;;;;-1:-1:-1;;396:1420:132;;;;;6099:41:114;:5;:41;:::i;:::-;6554:8;:47;:8;:47;:::i;:::-;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;5590:13:114;;396:1420:132;;;;5625:4:114;396:1420:132;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;396:1420:132;;;;;;;;;;;;;-1:-1:-1;;396:1420:132;;;;;;;1911:35:36;396:1420:132;1911:35:36;;1940:4;1911:35;;;396:1420:132;1911:35:36;:6;;;396:1420:132;1911:6:36;396:1420:132;1911:6:36;396:1420:132;1911:35:36;;;;;;;396:1420:132;1911:35:36;;;396:1420:132;1986:37:36;;2063:38;1986:37;;;396:1420:132;2063:38:36;;396:1420:132;;;;;;;;;;;1911:35:36;;;;;;-1:-1:-1;1911:35:36;;;;;;:::i;:::-;;;;;396:1420:132;;;;;;-1:-1:-1;;396:1420:132;;;;;;;;;;:::i;:::-;;;;624:7:109;396:1420:132;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;396:1420:132;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;495:1:72;396:1420:132;;;;;;;;;;;;;;436:67:72;;:::i;:::-;495:1;:::i;396:1420:132:-;;;;;;;;;-1:-1:-1;;396:1420:132;;;;;;;;:::i;:::-;;;;;;;3082:40:57;;;;;396:1420:132;3082:40:57;;3107:4;3082:40;;;396:1420:132;;;;;;3082:6:57;396:1420:132;3082:40:57;;;;;;;396:1420:132;3082:40:57;;;396:1420:132;;;;;;;3082:40:57;;;;;;;;;;;;;;;;;:::i;:::-;;;396:1420:132;;;;;3082:40:57;;;;;;;;;396:1420:132;;;;;;-1:-1:-1;;396:1420:132;;;;;11758:32:121;396:1420:132;11758:32:121;396:1420:132;11758:32:121;396:1420:132;;;;;;-1:-1:-1;;396:1420:132;;;;;;;;2854:5:121;396:1420:132;;;;;;;;-1:-1:-1;;396:1420:132;;;;;6339:10:57;-1:-1:-1;396:1420:132;;;1121:7:109;396:1420:132;;;;;;;;;;;;;;;;;;;;5175:32:57;396:1420:132;;;:::i;:::-;436:67:72;;;;;:::i;:::-;396:1420:132;;;;;;;;;;;5175:32:57;396:1420:132;;;;;;;-1:-1:-1;;396:1420:132;;;;;;;991:8:48;396:1420:132;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;991:8:48;396:1420:132;;;;;;;;;;;;-1:-1:-1;;;396:1420:132;;;;;;;;;;;;;;;;;;-1:-1:-1;396:1420:132;;;;;;;;;;;;;;;;;;;;991:8:48;396:1420:132;;;;;;;-1:-1:-1;396:1420:132;;-1:-1:-1;396:1420:132;;-1:-1:-1;396:1420:132;;;;;;;;;-1:-1:-1;;396:1420:132;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;11461:6:121;;;396:1420:132;;;;;11461:35:121;;11490:4;11461:35;;;396:1420:132;;11461:35:121;396:1420:132;11461:35:121;;;;;;;;;;396:1420:132;11461:35:121;;;;;;396:1420:132;11447:49:121;;;396:1420:132;;;11539:39:121;;;;396:1420:132;11539:39:121;;11490:4;11539:39;;;396:1420:132;11539:39:121;;;;;;;396:1420:132;;11539:39:121;;396:1420:132;11506:72:121;;;;;;396:1420:132;;:::i;:::-;11588:48:121;;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;396:1420:132;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11539:39:121;;;;;;396:1420:132;11539:39:121;;;;;;:::i;:::-;;;;396:1420:132;;;;;;;;;11461:35:121;;;;;;;;;;;;;:::i;:::-;;;;;396:1420:132;;;;;;;;;;;;;;;;-1:-1:-1;;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;465:4:50;1224:29:132;396:1420;;;;;;1224:29;;:::i;:::-;:47;465:4:50;;396:1420:132;;;1308:18;396:1420;;;;;;1308:18;396:1420;;;;;;1251:1;396:1420;;;;-1:-1:-1;396:1420:132;;;;;;-1:-1:-1;;;396:1420:132;;;;;;;;;-1:-1:-1;;;396:1420:132;;;;;;465:4:50;396:1420:132;465:4:50;;;396:1420:132;465:4:50;;;;;;;;396:1420:132;465:4:50;396:1420:132;;;465:4:50;;;;396:1420:132;;;;;;;;;;;;;;;;-1:-1:-1;;;396:1420:132;;;;;;;;;;;;-1:-1:-1;;396:1420:132;;;;;;6533:20:57;;;:::i;396:1420:132:-;;;;;;-1:-1:-1;;396:1420:132;;;;;;;;2727:2:57;396:1420:132;;;;;;;;;-1:-1:-1;;396:1420:132;;;;;;;;1443:95:57;396:1420:132;;;;;;;;;-1:-1:-1;;396:1420:132;;;;;;;;3027:6:52;396:1420:132;;;;;;;;;4942:26:57;396:1420:132;;;:::i;:::-;;;;;;4124:49:57;396:1420:132;;;;;:::i;:::-;;;;4124:49:57;;4144:10;4124:49;;;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;;;;4124:6:57;396:1420:132;4124:49:57;;;;;;;;;396:1420:132;;4190:4:57;396:1420:132;;;;;;;;;-1:-1:-1;;396:1420:132;;;;;;954:18;396:1420;941:38;;937:111;;396:1420;937:111;995:30;;;:::i;:::-;396:1420;;;;;;-1:-1:-1;;396:1420:132;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;396:1420:132;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;396:1420:132;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;6606:34:121;6554;396:1420:132;;;6554:34:121;;:::i;:::-;396:1420:132;6606:34:121;;:::i;:::-;396:1420:132;;8745:18:52;;;396:1420:132;;;8778:16:52;8745:82;396:1420:132;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;396:1420:132;;;;;;;2004:6:50;;;;;;2000:58;;2560:120;9032:34:52;2560:120:50;396:1420:132;2560:120:50;;8957:57:52;2560:120:50;;;;396:1420:132;8957:57:52;:::i;2000:58:50:-;2033:14;396:1420:132;2033:14:50;396:1420:132;2033:14:50;396:1420:132;;;;;;;;;;;;;8957:57:52;9032:34;396:1420:132;;;;;;8957:57:52;:::i;396:1420:132:-;;;-1:-1:-1;;;396:1420:132;;;;;;;;;;;;6381:26:52;465:4:50;6422:13:52;396:1420:132;6417:148:52;396:1420:132;;;6417:148:52;6579:14;;;;;6575:67;;396:1420:132;;8957:57:52;9032:34;396:1420:132;;;;8957:57:52;:::i;6575:67::-;6616:15;396:1420:132;6616:15:52;396:1420:132;6616:15:52;6467:3;396:1420:132;;;465:4:50;396:1420:132;6437:28:52;;;;;6514:11;;6498:56;6514:11;;:39;:11;;;;:::i;:::-;396:1420:132;6532:20:52;;;:::i;6498:56::-;6467:3;396:1420:132;6422:13:52;;;6437:28;;;;396:1420:132;;;;;;4672:26:52;465:4:50;4713:13:52;396:1420:132;4708:152:52;396:1420:132;;;4874:14:52;;;;;4870:67;;396:1420:132;;8957:57:52;9032:34;396:1420:132;;;;8957:57:52;:::i;4758:3::-;396:1420:132;;;465:4:50;396:1420:132;4728:28:52;;;;;4807:11;;465:4:50;838:5;4807:11:52;;:41;:11;;;;:::i;:::-;396:1420:132;4827:20:52;;;:::i;838:5:50:-;396:1420:132;4758:3:52;396:1420:132;4713:13:52;;;8745:82;;;;396:1420:132;;;;;;;-1:-1:-1;;396:1420:132;;;;;;3819:43:57;396:1420:132;;;:::i;:::-;;;;3819:43:57;;3834:10;3819:43;;;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;396:1420:132;;;;;;;2434:8:57;396:1420:132;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;2434:8:57;396:1420:132;;;;;;;;;;;;-1:-1:-1;;;396:1420:132;;;;;;;;;;;;;;;;;;-1:-1:-1;396:1420:132;;;;;;;;;;;;;;;;-1:-1:-1;;396:1420:132;;;;;;;;;;;;;;;876:25:116;396:1420:132;861:40:116;;396:1420:132;;;;;-1:-1:-1;;396:1420:132;;;;;;;;;;;;;;;;;-1:-1:-1;396:1420:132;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;396:1420:132;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;-1:-1:-1;;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;-1:-1:-1;396:1420:132;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;396:1420:132;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;396:1420:132;;;:::o;:::-;-1:-1:-1;;;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;465:4:50;396:1420:132;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;:::o;2769:110:57:-;396:1420:132;;;2839:33:57;;2866:4;2839:33;;;396:1420:132;2839:33:57;:6;396:1420:132;2839:6:57;396:1420:132;2839:6:57;396:1420:132;2839:33:57;;;;;;;-1:-1:-1;2839:33:57;;;2832:40;2769:110;:::o;2839:33::-;;;;;;;;;;;;;;;;;:::i;:::-;;;396:1420:132;;;;;2769:110:57;:::o;2839:33::-;;;-1:-1:-1;2839:33:57;;;396:1420:132;;;-1:-1:-1;396:1420:132;;;;;;954:18;396:1420;;;;;;954:18;-1:-1:-1;396:1420:132;;;;-1:-1:-1;396:1420:132;:::o;:::-;;;;;;;;;;:::o;:::-;-1:-1:-1;;;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;6889:1195:121:-;7027:24;;;;;;:41;7052:15;;;396:1420:132;;;7027:41:121;;:::i;:::-;396:1420:132;7112:24:121;;7137:16;7112:42;7137:16;;;396:1420:132;;;7112:42:121;;:::i;:::-;396:1420:132;;;;;;;:::i;:::-;;;;:::i;:::-;7169:33:121;;7435:38;7339:37;7491:27;396:1420:132;;7339:37:121;:::i;:::-;396:1420:132;;7435:38:121;:::i;:::-;7491:27;;396:1420:132;465:4:50;838:5;;;;;:::i;:::-;396:1420:132;11030:43:52;;11026:93;;11151:20;1744:19:50;11151:20:52;;;:::i;:::-;1744:19:50;;:::i;:::-;396:1420:132;;;;;;;;;;;;;;;1625:13:50;11306:20:52;1625:13:50;838:5;1625:13;;:::i;:::-;11306:20:52;;:::i;:::-;5832:87:50;;;;;;;838:5;;:::i;:::-;396:1420:132;7547:24:121;:::o;11026:93:52:-;11096:12;396:1420:132;11096:12:52;;396:1420:132;11096:12:52;7165:913:121;7818:38;7722:37;7874:27;396:1420:132;;;;;;7722:37:121;:::i;:::-;396:1420:132;;7818:38:121;:::i;:::-;7874:27;;396:1420:132;465:4:50;838:5;;;:::i;:::-;396:1420:132;13428:46:52;;13424:97;;2843:5;;;;;;;;1744:19:50;;;13666:20:52;1744:19:50;;:::i;:::-;;;:::i;13666:20:52:-;2843:5;;;;;;;;13932:22;;;:::i;13424:97::-;13497:13;396:1420:132;13497:13:52;;396:1420:132;13497:13:52;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;396:1420:132;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;:::i;1405:278::-;1523:18;396:1420;1510:38;;1523:18;;;1571:30;;;:::i;:::-;396:1420;;;;;;1564:37;:::o;1506:171::-;1639:27;-1:-1:-1;1639:27:132;;-1:-1:-1;1639:27:132;509:165:72;396:1420:132;586:6:72;396:1420:132;564:10:72;:29;560:108;;509:165::o;560:108::-;616:41;;;564:10;616:41;396:1420:132;;616:41:72;;3845:262:114;396:1420:132;3938:11:114;396:1420:132;3929:4:114;3921:28;:63;;;3845:262;3917:184;;;4007:22;4000:29;:::o;3917:184::-;396:1420:132;;4204:80:114;;;396:1420:132;2079:95:114;396:1420:132;;4226:11:114;396:1420:132;2079:95:114;;396:1420:132;4239:14:114;2079:95;;;396:1420:132;4255:13:114;2079:95;;;396:1420:132;3929:4:114;2079:95;;;396:1420:132;2079:95:114;4204:80;;2079:95;396:1420:132;;;;;;;;;;;;;;4194:91:114;;4060:30;:::o;3921:63::-;3970:14;;3953:13;:31;3921:63;;396:1420:132;;;;1789:18;396:1420;;;;;;;;;;;1789:18;-1:-1:-1;396:1420:132;;;-1:-1:-1;396:1420:132;;;;;;;;;;;;;;;;:::i;:::-;:::o;:::-;;;;;;;;;;;;-1:-1:-1;396:1420:132;;;;;;;;;;;;2843:5:52;396:1420:132;;;;;;;;;;;;;;;:::o;:::-;;638:5:50;396:1420:132;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::o;:::-;-1:-1:-1;;;396:1420:132;;;;;;;;4760:637:50;;465:4;;4997:8;;;465:4;;5021:8;;;:::o;4993:398::-;396:1420:132;5050:8:50;;396:1420:132;;5081:11:50;;;;;;:::i;5046:345::-;396:1420:132;5113:9:50;;396:1420:132;;5155:11:50;;;;5187:21;5155:11;;:::i;:::-;5187:21;;:::i;5109:282::-;5253:20;;;;:::i;:::-;1068:5;396:1420:132;1068:5:50;;;:::i;:::-;1186:122;-1:-1:-1;;1186:122:50;;;;;;;;396:1420:132;;;;;;;;5366:14:50;;;:::i;887:427::-;;1068:5;887:427;1068:5;:::i;:::-;1186:122;;-1:-1:-1;;1186:122:50;;;;;;;;887:427;:::o;3385:267:110:-;1390:66;3508:46;;1390:66;;;2652:40;;2706:11;2715:2;2706:11;;2702:69;;396:1420:132;;;;;;:::i;:::-;2367:90:110;;2311:2;396:1420:132;;2367:90:110;3570:22;:::o;2702:69::-;2740:20;396:1420:132;2740:20:110;;396:1420:132;2740:20:110;3504:142;396:1420:132;;;-1:-1:-1;396:1420:132;-1:-1:-1;396:1420:132;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1390:66:110;;;;;;;;:::i;396:1420:132:-;;;;-1:-1:-1;396:1420:132;;;;-1:-1:-1;396:1420:132;;;;;;;-1:-1:-1;1390:66:110;;-1:-1:-1;;;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;396:1420:132;;;;;;;;;;;;1390:66:110;396:1420:132;;;;;;;;;;;;;;;;;;;;;;3385:267:110;1390:66;3508:46;;1390:66;;;2652:40;;2706:11;2715:2;2706:11;;2702:69;;396:1420:132;;;;;;:::i;3504:142:110:-;396:1420:132;;;-1:-1:-1;6584:16:114;;396:1420:132;6584:16:114;396:1420:132;;;;:::i;:::-;;;;;;;6584:16:114;396:1420:132;;;6584:16:114;;;;396:1420:132;;;;;1390:66:110;;;;;;;;:::i;396:1420:132:-;;;;6584:16:114;-1:-1:-1;396:1420:132;;;-1:-1:-1;396:1420:132;;;;;;;-1:-1:-1;1390:66:110;;-1:-1:-1;;;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;396:1420:132;;;;;;3736:794:50;465:4;;3975:8;;;465:4;;3999:8;;;;:::o;3971:553::-;4028:8;;396:1420:132;4028:8:50;;396:1420:132;;838:5:50;;;;;;:::i;4024:500::-;396:1420:132;4093:9:50;;396:1420:132;;838:5:50;;;;;;:::i;:::-;396:1420:132;838:5:50;;:::i;4089:435::-;4237:20;;;;;:::i;:::-;1068:5;;;:::i;:::-;396:1420:132;-1:-1:-1;;1186:122:50;;;;;;;;;;396:1420:132;;;;;;;;;4347:14:50;;;;;4381:8;;;396:1420:132;4381:8:50;:::o;4343:171::-;396:1420:132;;4460:21:50;:::o;5140:1530:113:-;;;6199:66;6186:79;;6182:164;;396:1420:132;;;;;;;;;;;;;;;;;;;;;;;;;;6457:24:113;;;;;;;;;396:1420:132;6457:24:113;396:1420:132;;;6495:20:113;6491:113;;6614:49;396:1420:132;6614:49:113;396:1420:132;5140:1530:113;:::o;6491:113::-;6531:62;396:1420:132;6531:62:113;6457:24;6531:62;396:1420:132;6531:62:113;:::o;6182:164::-;6281:54;;;396:1420:132;6281:54:113;6301:30;6281:54;;:::o;7196:532::-;396:1420:132;;;;;;7282:29:113;;;7327:7;;:::o;7278:444::-;396:1420:132;7378:38:113;;396:1420:132;;7439:23:113;-1:-1:-1;7439:23:113;396:1420:132;-1:-1:-1;7439:23:113;7374:348;7492:35;7483:44;;7492:35;;7550:46;;-1:-1:-1;7550:46:113;396:1420:132;;;-1:-1:-1;7550:46:113;7479:243;7626:30;7617:39;7613:109;;7479:243;7196:532::o;7613:109::-;7679:32;-1:-1:-1;7679:32:113;396:1420:132;;;-1:-1:-1;7679:32:113;1822:864:50;;2004:6;;2000:58;;465:4;396:1420:132;;;;;;;;;;;;;;;2560:120:50;;-1:-1:-1;;2560:120:50;;;;;;;;1822:864;:::o;2000:58::-;2033:14;2009:1;2033:14;;2009:1;2033:14;2648:13:51;;;;;;;;:::o;:::-;;;;;;;:::o;4496:2300::-;;4577:6;;4573:131;;4718:6;;4714:45;;396:1420:132;;;5129:68:51;;396:1420:132;5591:24:51;;;5587:83;;5774:28;2707:26;5774:28;:60;;;4496:2300;5770:720;;;1564:4;;1789;;21319:38;;2648:13;;2593;;;;2707:26;;2648:13;;21319:38;:::i;:::-;2648:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22285:2;2648:13;;;22203:2;2648:13;;;22121:2;2648:13;;;22040:1;2648:13;;;21959:1;2648:13;;;21878:1;2648:13;;;21797:1;2648:13;;2593;;;;;;;2648;;;;;;;;;;;;;2593;1564:4;5770:720;;2648:13;2400:6;6615:36;;;;:76;;;5770:720;6613:79;6609:137;;6771:17;7080:25;;;;:54;;;5770:720;7078:57;7074:112;;396:1420:132;7316:5:51;396:1420:132;7316:5:51;;7312:417;;5770:720;-1:-1:-1;9497:3:51;;2789:21;9082:7;;2789:21;;2707:26;;1754:4;9134:12;2845:56;9078:252;;2648:13;9723:23;9785:7;3117:22;9785:7;;;9781:104;;9078:252;3246:22;9902:7;;;9898:104;;9078:252;3368:21;10019:7;;;10015:104;;9078:252;3486:21;10136:7;;;10132:104;;9078:252;3602:21;10253:7;;;10249:104;;9078:252;10370:7;;;;10366:104;;9078:252;3832:20;10487:7;;;10483:104;;9078:252;3947:20;10604:7;;;10600:104;;9078:252;11567:1;2648:13;;;;;;11645:1;2648:13;;;;;;11723:1;2648:13;;;;;;;11801:1;2648:13;;;;;;11879:1;2648:13;;;;;;11957:1;2648:13;;;;;;;12035:1;2648:13;;;;;;;12113:1;2648:13;;;;;;;12191:2;2648:13;;;;;;;12270:2;2648:13;;;;;;;12349:2;2648:13;;;;;;2593;;;;;;;;;;;;;2648;;;;13075:54;;;;;13094:26;;;:::i;10600:104::-;4003:21;2707:26;;;;2648:13;;;10600:104;;;10483;3888:21;2707:26;;;;2648:13;;;10483:104;;;10366;3773:21;2707:26;;;;2648:13;;;10366:104;;;10249;3658:21;2707:26;;;;2648:13;;;10249:104;;;10132;3542:22;2707:26;;;;2648:13;;;10132:104;;;10015;3424:24;2707:26;;;;2648:13;;;10015:104;;;9898;3303:27;2707:26;;;;2648:13;;;9898:104;;;9781;3174:34;;-1:-1:-1;2707:26:51;;9781:104;;9078:252;2953:20;9171:7;;2953:20;;2707:26;;1754:4;9223:12;3008:28;9167:163;9078:252;;9167:163;1754:4;9274:11;9284:1;9167:163;9078:252;;7312:417;7714:4;;-1:-1:-1;396:1420:132;4181:19:51;;-1:-1:-1;9497:3:51;7312:417;;7074:112;7158:17;396:1420:132;7158:17:51;;396:1420:132;7158:17:51;7080:54;7109:25;2349:6;7109:25;;;7080:54;;6609:137;6715:20;396:1420:132;6715:20:51;;396:1420:132;6715:20:51;6615:76;6655:36;2349:6;6655:36;;;6615:76;;5770:720;6451:13;1564:4;6451:13;396:1420:132;14954:10:51;;;;14950:381;;5770:720;16656:14;17116:3;16656:14;396:1420:132;2648:13:51;16708:16;;;16704:126;;5770:720;2648:13;16848:16;;;16844:126;;5770:720;2648:13;;;;;;;3174:34;;17276:7;;;;17272:94;;5770:720;3303:27;;;17384:7;;;;17380:94;;5770:720;3424:24;;17492:7;;;;17488:94;;5770:720;3542:22;;17600:7;;;;17596:94;;5770:720;3658:21;;17708:7;;;;17704:94;;5770:720;3773:21;;17816:7;;;;17812:94;;5770:720;3888:21;;17924:7;;;;17920:94;;5770:720;4003:21;;18032:7;;;;18028:94;;5770:720;4120:21;;18140:8;;;;18136:97;;5770:720;4237:21;;18251:8;;;;18247:97;;5770:720;1754:4;18891:38;1754:4;2593:13;;2707:26;2593:13;;;2707:26;;2648:13;18891:38;:::i;:::-;2648:13;;;;;;;;;;;;;;;;;;19369:1;19450;19531;19612;19693:2;2648:13;;;;;;;;;;;;;;;;;;;;;;;;2593;;;;;2648;;2593;2648;20303:35;;;;;396:1420:132;4181:19:51;20303:35;2648:13;5770:720;;20303:35;;;18247:97;1754:4;4181:19;2648:13;;;2593;;18247:97;;;;18136;1754:4;4063:20;2648:13;;;2593;;18136:97;;;;18028:94;1754:4;3947:20;2648:13;;;2593;;18028:94;;;;17920;1754:4;3832:20;2648:13;;;2593;;17920:94;;;;17812;1754:4;2648:13;;;;2593;;17812:94;;;;17704;1754:4;3602:21;2648:13;;;2593;;17704:94;;;;17596;1754:4;3486:21;2648:13;;;2593;;17596:94;;;;17488;1754:4;3368:21;2648:13;;;2593;;17488:94;;;;17380;1754:4;3246:22;2648:13;;;2593;;17380:94;;;;17272;3117:22;2648:13;;;;;2593;;17272:94;;;;;16844:126;2648:13;3008:28;2953:20;2648:13;;2593;;16844:126;;16704;2648:13;2845:56;2648:13;;2789:21;16704:126;;14950:381;15248:21;;;;;;:::i;:::-;15316:4;;17116:3;14950:381;;5774:60;5806:28;2593:13;5806:28;;5774:60;;5587:83;5638:21;396:1420:132;5638:21:51;;396:1420:132;5638:21:51;5129:68;5169:17;396:1420:132;5169:17:51;;396:1420:132;5169:17:51;4714:45;4740:8;;396:1420:132;4740:8:51;:::o;4573:131::-;4671:22;;1564:4;4671:22;:::o"},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","PERMIT_TYPEHASH()":"30adf81f","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","computeBalance(uint256[],uint256,uint256)":"16a0b3e0","computeInvariant(uint256[],uint8)":"984de9e8","decimals()":"313ce567","eip712Domain()":"84b0196e","emitApproval(address,address,uint256)":"5687f2b8","emitTransfer(address,address,uint256)":"23de6651","getAggregateFeePercentages()":"81fa807c","getCurrentLiveBalances()":"b156aa0a","getMaximumInvariantRatio()":"273c1adf","getMaximumSwapFeePercentage()":"654cf15d","getMinimumInvariantRatio()":"b677fa56","getMinimumSwapFeePercentage()":"ce20ece7","getNormalizedWeights()":"f89f27ed","getRate()":"679aefce","getStaticSwapFeePercentage()":"d335b0cf","getTokenInfo()":"abb1dc44","getTokens()":"aa6ca808","getVault()":"8d928af8","getWeightedPoolDynamicData()":"c0bc6f33","getWeightedPoolImmutableData()":"53b79bd7","incrementNonce()":"627cdcb9","name()":"06fdde03","nonces(address)":"7ecebe00","onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))":"72c98186","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","setNormalizedWeight(uint256,uint256)":"19f32ccd","setNormalizedWeights(uint256[2])":"3f3353de","supportsInterface(bytes4)":"01ffc9a7","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd","version()":"54fd4d50"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"numTokens\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"normalizedWeights\",\"type\":\"uint256[]\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"}],\"internalType\":\"struct WeightedPool.NewPoolParams\",\"name\":\"params\",\"type\":\"tuple\"},{\"internalType\":\"contract IVault\",\"name\":\"vault\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BaseOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"ERC2612ExpiredSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC2612InvalidSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExponentOutOfBounds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InputLengthMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"name\":\"InvalidAccountNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExponent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidShortString\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxInRatio\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxOutRatio\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinWeight\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NormalizedWeightInvariant\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ProductOutOfBounds\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"SenderIsNotVault\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"StringTooLong\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WeightedPoolBptRateUnsupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroDivision\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroInvariant\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMIT_TYPEHASH\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"tokenInIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"invariantRatio\",\"type\":\"uint256\"}],\"name\":\"computeBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"enum Rounding\",\"name\":\"rounding\",\"type\":\"uint8\"}],\"name\":\"computeInvariant\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"emitApproval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"emitTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAggregateFeePercentages\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"aggregateSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"aggregateYieldFeePercentage\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentLiveBalances\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaximumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumInvariantRatio\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinimumSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNormalizedWeights\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticSwapFeePercentage\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokenInfo\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"enum TokenType\",\"name\":\"tokenType\",\"type\":\"uint8\"},{\"internalType\":\"contract IRateProvider\",\"name\":\"rateProvider\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"paysYieldFees\",\"type\":\"bool\"}],\"internalType\":\"struct TokenInfo[]\",\"name\":\"tokenInfo\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesRaw\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"lastBalancesLiveScaled18\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTokens\",\"outputs\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVault\",\"outputs\":[{\"internalType\":\"contract IVault\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWeightedPoolDynamicData\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256[]\",\"name\":\"balancesLiveScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"tokenRates\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"staticSwapFeePercentage\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"totalSupply\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isPoolInitialized\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolPaused\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isPoolInRecoveryMode\",\"type\":\"bool\"}],\"internalType\":\"struct WeightedPoolDynamicData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getWeightedPoolImmutableData\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IERC20[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"decimalScalingFactors\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"normalizedWeights\",\"type\":\"uint256[]\"}],\"internalType\":\"struct WeightedPoolImmutableData\",\"name\":\"data\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"incrementNonce\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum SwapKind\",\"name\":\"kind\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"amountGivenScaled18\",\"type\":\"uint256\"},{\"internalType\":\"uint256[]\",\"name\":\"balancesScaled18\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"indexIn\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"indexOut\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"userData\",\"type\":\"bytes\"}],\"internalType\":\"struct PoolSwapParams\",\"name\":\"request\",\"type\":\"tuple\"}],\"name\":\"onSwap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newWeight\",\"type\":\"uint256\"}],\"name\":\"setNormalizedWeight\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[2]\",\"name\":\"newWeights\",\"type\":\"uint256[2]\"}],\"name\":\"setNormalizedWeights\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"ERC2612ExpiredSignature(uint256)\":[{\"params\":{\"deadline\":\"The permit deadline that expired\"}}],\"ERC2612InvalidSigner(address,address)\":[{\"params\":{\"owner\":\"The address of the owner (expected value of the signature provider)\",\"signer\":\"The address corresponding to the signature provider\"}}],\"InvalidAccountNonce(address,uint256)\":[{\"details\":\"The nonce used for an `account` is not the expected current nonce.\"}],\"SenderIsNotVault(address)\":[{\"params\":{\"sender\":\"The account attempting to call a permissioned function\"}}],\"WeightedPoolBptRateUnsupported()\":[{\"details\":\"It is not safe to nest Weighted Pools as WITH_RATE tokens in other pools, where they function as their own rate provider. The default `getRate` implementation from `BalancerPoolToken` computes the BPT rate using the invariant, which has a non-trivial (and non-linear) error. Without the ability to specify a rounding direction, the rate could be manipulable. It is fine to nest Weighted Pools as STANDARD tokens, or to use them with external rate providers that are stable and have at most 1 wei of rounding error (e.g., oracle-based).\"}],\"ZeroInvariant()\":[{\"details\":\"Most commonly, this happens when a token balance is zero.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"Sets a `value` amount of tokens as the allowance of `spender` over the caller's tokens. Returns a boolean value indicating whether the operation succeeded. IMPORTANT: Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 Emits an {Approval} event.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"computeBalance(uint256[],uint256,uint256)\":{\"details\":\"Similar to V2's `_getTokenBalanceGivenInvariantAndAllOtherBalances` in StableMath. The pool must round up for the Vault to round in the protocol's favor when calling this function.\",\"params\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\",\"invariantRatio\":\"The ratio of the new invariant (after an operation) to the old\",\"tokenInIndex\":\"The index of the token we're computing the balance for, sorted in token registration order\"},\"returns\":{\"newBalance\":\"The new balance of the selected token, after the operation\"}},\"computeInvariant(uint256[],uint8)\":{\"details\":\"This function computes the invariant based on current balances (and potentially other pool state). The rounding direction must be respected for the Vault to round in the pool's favor when calling this function. If the invariant computation involves no precision loss (e.g. simple sum of balances), the same result can be returned for both rounding directions. You can think of the invariant as a measure of the \\\"value\\\" of the pool, which is related to the total liquidity (i.e., the \\\"BPT rate\\\" is `invariant` / `totalSupply`). Two critical properties must hold: 1) The invariant should not change due to a swap. In practice, it can *increase* due to swap fees, which effectively add liquidity after the swap - but it should never decrease. 2) The invariant must be \\\"linear\\\"; i.e., increasing the balances proportionally must increase the invariant in the same proportion: inv(a * n, b * n, c * n) = inv(a, b, c) * n Property #1 is required to prevent \\\"round trip\\\" paths that drain value from the pool (and all LP shareholders). Intuitively, an accurate pricing algorithm ensures the user gets an equal value of token out given token in, so the total value should not change. Property #2 is essential for the \\\"fungibility\\\" of LP shares. If it did not hold, then different users depositing the same total value would get a different number of LP shares. In that case, LP shares would not be interchangeable, as they must be in a fair DEX.\",\"params\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\",\"rounding\":\"Rounding direction to consider when computing the invariant\"},\"returns\":{\"_0\":\"The calculated invariant of the pool, represented as a uint256\"}},\"decimals()\":{\"details\":\"Returns the decimals places of the token.\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"emitApproval(address,address,uint256)\":{\"details\":\"Emit the Approval event. This function can only be called by the MultiToken.\"},\"emitTransfer(address,address,uint256)\":{\"details\":\"Emit the Transfer event. This function can only be called by the MultiToken.\"},\"getAggregateFeePercentages()\":{\"details\":\"These are determined by the current protocol and pool creator fees, set in the `ProtocolFeeController`.\",\"returns\":{\"aggregateSwapFeePercentage\":\"The aggregate percentage fee applied to swaps\",\"aggregateYieldFeePercentage\":\"The aggregate percentage fee applied to yield\"}},\"getCurrentLiveBalances()\":{\"details\":\"Note that live balances will not necessarily be accurate if the pool is in Recovery Mode. Withdrawals in Recovery Mode do not make external calls (including those necessary for updating live balances), so if there are withdrawals, raw and live balances will be out of sync until Recovery Mode is disabled.\",\"returns\":{\"balancesLiveScaled18\":\"Token balances after paying yield fees, applying decimal scaling and rates\"}},\"getMaximumInvariantRatio()\":{\"returns\":{\"_0\":\"The maximum invariant ratio for a pool during unbalanced add liquidity\"}},\"getMaximumSwapFeePercentage()\":{\"returns\":{\"_0\":\"The maximum swap fee percentage for a pool\"}},\"getMinimumInvariantRatio()\":{\"returns\":{\"_0\":\"The minimum invariant ratio for a pool during unbalanced remove liquidity\"}},\"getMinimumSwapFeePercentage()\":{\"returns\":{\"_0\":\"The minimum swap fee percentage for a pool\"}},\"getNormalizedWeights()\":{\"returns\":{\"_0\":\"The normalized weights, sorted in token registration order\"}},\"getRate()\":{\"details\":\"The meaning of this rate depends on the context. Note that there may be an error associated with a token rate, and the caller might require a certain rounding direction to ensure correctness. This (legacy) interface does not take a rounding direction or return an error, so great care must be taken when interpreting and using rates in downstream computations.\",\"returns\":{\"_0\":\"The current token rate\"}},\"getStaticSwapFeePercentage()\":{\"returns\":{\"_0\":\"18-decimal FP value of the static swap fee percentage\"}},\"getTokenInfo()\":{\"returns\":{\"balancesRaw\":\"Current native decimal balances of the pool tokens, sorted in token registration order\",\"lastBalancesLiveScaled18\":\"Last saved live balances, sorted in token registration order\",\"tokenInfo\":\"Token info structs (type, rate provider, yield flag), sorted in token registration order\",\"tokens\":\"Pool tokens, sorted in token registration order\"}},\"getTokens()\":{\"returns\":{\"tokens\":\"List of tokens in the pool, sorted in registration order\"}},\"getWeightedPoolDynamicData()\":{\"returns\":{\"data\":\"A struct containing all dynamic weighted pool parameters\"}},\"getWeightedPoolImmutableData()\":{\"returns\":{\"data\":\"A struct containing all immutable weighted pool parameters\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"params\":{\"params\":\"Swap parameters (see above for struct definition)\"},\"returns\":{\"_0\":\"Calculated amount for the swap operation\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from the caller's account to `to`. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism. `value` is then deducted from the caller's allowance. Returns a boolean value indicating whether the operation succeeded. Emits a {Transfer} event.\"},\"version()\":{\"returns\":{\"_0\":\"version The stored contract version\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"BaseOutOfBounds()\":[{\"notice\":\"This error is thrown when a base is not within an acceptable range.\"}],\"ERC2612ExpiredSignature(uint256)\":[{\"notice\":\"Operation failed due to an expired permit signature.\"}],\"ERC2612InvalidSigner(address,address)\":[{\"notice\":\"Operation failed due to a non-matching signature.\"}],\"ExponentOutOfBounds()\":[{\"notice\":\"This error is thrown when a exponent is not within an acceptable range.\"}],\"InputLengthMismatch()\":[{\"notice\":\"Arrays passed to a function and intended to be parallel have different lengths.\"}],\"InvalidExponent()\":[{\"notice\":\"This error is thrown when an exponent used in the exp function is not within an acceptable range.\"}],\"InvalidToken()\":[{\"notice\":\"Invalid tokens (e.g., zero) cannot be registered.\"}],\"MaxInRatio()\":[{\"notice\":\"User attempted to add a disproportionate amountIn of tokens to a pool.\"}],\"MaxOutRatio()\":[{\"notice\":\"User attempted to extract a disproportionate amountOut of tokens from a pool.\"}],\"MinWeight()\":[{\"notice\":\"Indicates that one of the pool tokens' weight is below the minimum allowed.\"}],\"NormalizedWeightInvariant()\":[{\"notice\":\"Indicates that the sum of the pool tokens' weights is not FixedPoint.ONE.\"}],\"ProductOutOfBounds()\":[{\"notice\":\"This error is thrown when the exponent * ln(base) is not within an acceptable range.\"}],\"SenderIsNotVault(address)\":[{\"notice\":\"Error indicating the sender is not the Vault (e.g., someone is trying to call a permissioned function).\"}],\"WeightedPoolBptRateUnsupported()\":[{\"notice\":\"`getRate` from `IRateProvider` was called on a Weighted Pool.\"}],\"ZeroDivision()\":[{\"notice\":\"Attempted division by zero.\"}],\"ZeroInvariant()\":[{\"notice\":\"Error thrown when the calculated invariant is zero, indicating an issue with the invariant calculation.\"}]},\"kind\":\"user\",\"methods\":{\"computeBalance(uint256[],uint256,uint256)\":{\"notice\":\"Computes a new token balance, given the invariant growth ratio and all other balances.\"},\"computeInvariant(uint256[],uint8)\":{\"notice\":\"Computes the pool's invariant.\"},\"getAggregateFeePercentages()\":{\"notice\":\"Gets the aggregate swap and yield fee percentages for a pool.\"},\"getCurrentLiveBalances()\":{\"notice\":\"Gets the current live balances of the pool as fixed point, 18-decimal numbers.\"},\"getNormalizedWeights()\":{\"notice\":\"Get the normalized weights.\"},\"getRate()\":{\"notice\":\"An 18 decimal fixed point number representing the exchange rate of one token to another related token.\"},\"getStaticSwapFeePercentage()\":{\"notice\":\"Fetches the static swap fee percentage for the pool.\"},\"getTokenInfo()\":{\"notice\":\"Gets the raw data for the pool: tokens, token info, raw balances, and last live balances.\"},\"getTokens()\":{\"notice\":\"Gets the tokens registered in the pool.\"},\"getWeightedPoolDynamicData()\":{\"notice\":\"Get dynamic pool data relevant to swap/add/remove calculations.\"},\"getWeightedPoolImmutableData()\":{\"notice\":\"Get immutable pool data relevant to swap/add/remove calculations.\"},\"incrementNonce()\":{\"notice\":\"Increment the sender's nonce to revoke any currently granted (but not yet executed) `permit`.\"},\"onSwap((uint8,uint256,uint256[],uint256,uint256,address,bytes))\":{\"notice\":\"Execute a swap in the pool.\"},\"version()\":{\"notice\":\"Getter for the version.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/WeightedPoolMock.sol\":\"WeightedPoolMock\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"@balancer-labs/v3-interfaces/contracts/pool-utils/IPoolInfo.sol\":{\"keccak256\":\"0xa7adbaf80bc9cfa44e41776f632b5d7cb2c02c562a124c0e4cb17f06c4a54db3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e4fdf59a7f3dc3b7d6bb6f466e4a0a6263b66c0fc12492baf06ec8c6fdcc2398\",\"dweb:/ipfs/QmWxLpicLjGdgGQ8GjuN9YfDyVapYWwzdgET86ucs9hmFa\"]},\"@balancer-labs/v3-interfaces/contracts/pool-weighted/IWeightedPool.sol\":{\"keccak256\":\"0xae65b6b0800fed858a56df5dc8fe7eda072f7d409f0e0d4c63ad8fca5f0c8d33\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4503850853e86c655d3dba125613822c26552c834215e24bd88c2ac0f29675d4\",\"dweb:/ipfs/QmQ4dGpVpRcyhVfer2qsnbX2tTktwVXoX2bvoodrh3tinR\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IAuthentication.sol\":{\"keccak256\":\"0xa383f78ec04a4ebadbf64ce0fcef8c14f2487f02330acf2fbab80055c54a5d74\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://077fdb9728fd22008ca58ca9f63cc7ea1b86f9cec778c5ff8943d9322b812f06\",\"dweb:/ipfs/QmVCYYCeuUZK1GqAHzTZBo59cjjh9iQhNYWQvAy2AYAVoN\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IRateProvider.sol\":{\"keccak256\":\"0x3a9a626d90cdf64042441895ce981bf570d9aa56e7c188b34f8603b1d629aae3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://0ac7096c0d5cd5e0c20dcc6681d24eb04ad7e14cbb61d0ebf136f96a2b9752c4\",\"dweb:/ipfs/QmWryZQqLxpxaCBwK6uEfSLKWKsGBsDL7xbdGqFMkW4Uxp\"]},\"@balancer-labs/v3-interfaces/contracts/solidity-utils/helpers/IVersion.sol\":{\"keccak256\":\"0x8993f223a501fbbe7c1a2f589a12961ea2fab1919dbc02a1eede973692d24e6e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://acce7ad2eab8b257f65aa7e20b7814c71787c08d80e02335ccc7b04818ffcdc7\",\"dweb:/ipfs/QmQtDc6mwAijhvXLK5mbNfZ1JyQX7Q4nRsry5qDbcPpQVi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IAuthorizer.sol\":{\"keccak256\":\"0x288b9590b9fb743964d46f610c2b0d4eee8457bfe52b890e31be5e11661759e3\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://11373e74f2bb6112ae47b709e0161c09b3a2e1a7659bd15fa4ab4bcf8eadcab0\",\"dweb:/ipfs/QmfELyCgCckJz6hPwCw9thNA5kvaoUcCw7gcoxRgWrjMg1\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IBasePool.sol\":{\"keccak256\":\"0x9a1d76aae6ede8baa23b2472faf991337fc0787f8a7b6e0573241060dd485a53\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://32ef0841804401494ddb68a85c7e9e97c4c0e26899a1d61c6ec9841cb5fcb800\",\"dweb:/ipfs/QmT3VTZRCJ8jFvq9VYZZHbSyuVbSnPAx8p6XEiZYppMrYQ\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IHooks.sol\":{\"keccak256\":\"0x51fabcdeaefc15a895a04c457968a7fc0ce4f4647d42a91d07a863170d812c28\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://85822ed25a050521ec4b1af2e21d48e2b85cf48828cb9be5d7e5eb104d4ade6a\",\"dweb:/ipfs/QmU4QSNMfQCEacdgQizCxgNUzfnKxdmyqAndNJgLsCQ32t\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IProtocolFeeController.sol\":{\"keccak256\":\"0xa549105cdf64e06ab49473ab810b4ec2342e7e1593707a297f7965044d75fdb1\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f641d0f440b2085580aa8b79cb3241bc0c3ea0af275fad953d727ec8f7482795\",\"dweb:/ipfs/QmPULYHXMhCGCztE5ccKzRhb99K3LJSAicbxpWm36gcFVg\"]},\"@balancer-labs/v3-interfaces/contracts/vault/ISwapFeePercentageBounds.sol\":{\"keccak256\":\"0x5a08573f4b3cacd398cbbc119d407a176cb64b7ee522386f4f79300b2851d92d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://e2ff398fdc481caf40135abd58e71adc7aeacb8a79f461998fac207f59fcca33\",\"dweb:/ipfs/QmNczb9gmy4V3Kk9UjthyA6CpcntTWPbYvDu8aVtU1SW9k\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IUnbalancedLiquidityInvariantRatioBounds.sol\":{\"keccak256\":\"0xf41d8d01826abce1dc8a81f6d75663b853c718f028ce3c36d79dd3d833e7af2e\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://4677f0f2d6f9caed2acb70a172cf75819b4d3124258ab9b1aabf0c153381d7d8\",\"dweb:/ipfs/QmP8dzBjKzotSv8zEF4HeFZyECiBQn37T4EmegEFgwgdwi\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVault.sol\":{\"keccak256\":\"0xf02dcb0b4fe9b71eb46fc66e327e166091d4e479fc3987c766859c94d505fe03\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://de42ab0fa6f22010ac305d785e787a60fbb94c2d0ba17042a6e60bce33c5ed9f\",\"dweb:/ipfs/QmVonnCCZVGzA3EERuQ4PbtpTTKrtgoXxYmtJ4CqaSmc4e\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultAdmin.sol\":{\"keccak256\":\"0x9a651c10b5b352386341d65a37b63c95fbd0c4d401d4539730f3dfb4825acc18\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://26e398b4fc37c80a86327b9cbe14335e5378fa69b3fb222c2dc8cf33707c30fd\",\"dweb:/ipfs/QmY2E1b8DADLp3MStbVK93GACRJgJZxHYJpDrow1xzVhWB\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultErrors.sol\":{\"keccak256\":\"0xb2c6deaa8701201af5d31ac270fbc30ebe6b66a1f9b6b12d1d17d807f7decb66\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://28d6751bc7e7c7221745742cfe906387e0d806ea0a0041b9377fb5a537146063\",\"dweb:/ipfs/QmcphjQ6ramZM6Qxv84jaJbtZ7d5FNFJ8xHWCHZwk7CdZ3\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultEvents.sol\":{\"keccak256\":\"0x0ff416b358949bb5d9553118f7cbfd42aa9aa33fa6bbe4bf470159df07cf6989\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://f033bb516eb8d85554aea408a0a750bf6ccd5655035abd307cc8388a533f1c40\",\"dweb:/ipfs/QmPCjG5jrXU4FrJWsputirF7JXZsNxhopetnHZTfRAFvMn\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultExtension.sol\":{\"keccak256\":\"0xa547348926764942de6030bf7d303684ff675a4a08fab3320f98154450ca5bb8\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://6c440d5d23034e35803f135d9336f256ece717370adb93d1f2fb992fa5ffd869\",\"dweb:/ipfs/QmbCaxRG3X9kUEbdrhRbm7JZZoK2nYp8FUXqh7Bn4wnFra\"]},\"@balancer-labs/v3-interfaces/contracts/vault/IVaultMain.sol\":{\"keccak256\":\"0x7df60e55516bf9cfa5156a03afc22e222fb87edf1bb9af48586ff0ff1be71e92\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://baf5a2e16cdb139182df24e2d103f80c72b730be20a04b2486e751af16652ac9\",\"dweb:/ipfs/Qmd6kdQmUFxPRJT1YrRJVVsUYAmpohBRvCM2qdXzVGcv5d\"]},\"@balancer-labs/v3-interfaces/contracts/vault/VaultTypes.sol\":{\"keccak256\":\"0x670a4c7cdc970ed8cc82432894318558d67a530591617177603e0fea631addbc\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://b240af11378ac8ce54000b7defbd63c3a78d34c8f2bd6061173e35326fb6a042\",\"dweb:/ipfs/Qmf161h2SEXEQ2oahYcwCkxRC6QZocP2GsSjSJW2K57UzR\"]},\"@balancer-labs/v3-pool-utils/contracts/PoolInfo.sol\":{\"keccak256\":\"0xa97e2a0fd95d78dcecf67fd8c554ced63bbd6da372b6f8b12f16ad526b6ec608\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d98ad2022f9e3653fd63daca8c0725c7ccbd4f63d0d27c413e90669ce7284a96\",\"dweb:/ipfs/QmZ62RpJj3qSUrrdVD3H72qEszTUuvGkFLSBXAKMhBn5nX\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/CastingHelpers.sol\":{\"keccak256\":\"0x8b468c356b40134c158695ad68193093444f1a7783966a03947d67c403c87635\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://8d2696338f5f2f11663a2123cd5f7df1a2bfb434d49f93f2c0d1486e9d43d6f4\",\"dweb:/ipfs/QmQihSe7BEvWh4s1EPnqSf5RKNL6fLqEBuMETn6nHouweW\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/InputHelpers.sol\":{\"keccak256\":\"0xe820b139c5ab3a4a26eda124b6c31f755f3203ba80a9b1b187a53e2699c444ab\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://826e19b27c648604e06b5e68ce66ae6fecd3a0214738a7f67046103b12ab1148\",\"dweb:/ipfs/QmZfz3iFQVDMxkyYcAqfh4BJ21FXvSE58Bo1B8snjC92Wf\"]},\"@balancer-labs/v3-solidity-utils/contracts/helpers/Version.sol\":{\"keccak256\":\"0xca8d6e86dafe803f864c5230e4569938d3257fe1e29e2693d6b7822d207a231d\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://390de97b518c8a3f0ef6c1a2d448cfa102de6f4777dfc8e14d700b8395730ae5\",\"dweb:/ipfs/QmdmWZrdihBiuSCmwyFkdkXh9yQKNm56TEmtegUS2MPiFg\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/FixedPoint.sol\":{\"keccak256\":\"0x84bcae7004be7e91a88e76a3ac317490bc6845754a12cee88fcab76b1c5de37b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://15f903480fec5ae8042baf458e2246693b0b4a22687e65c2ed3afdf6993bff82\",\"dweb:/ipfs/QmcxsVeSbQ4qYnEZFoeFmiqaoV3rAx1oNhACCZCMZ1E6uf\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/LogExpMath.sol\":{\"keccak256\":\"0x70449e2b423b9850e39adddd7301205aa8b6e9e4ae788fd44d0968cac018eb2a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ce2174a3629b45dca032f9cf53df35dea240626913b8882a9e2da21610b02796\",\"dweb:/ipfs/Qmf8E4DePnZXjqb3V4A38gSobjgRK6VqavqPByuXvJxtBG\"]},\"@balancer-labs/v3-solidity-utils/contracts/math/WeightedMath.sol\":{\"keccak256\":\"0x4d9faedc605adaa52594ae9949374d87bce13107f887edc593a0b9b7a5c91042\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://648e918881e78d62505f049d2f88335e679aa01b82d403ac80b854d9d85efcc2\",\"dweb:/ipfs/QmXA36vdUX611mTH3V9qNGM3uF591TB3xaADqWG41NFmWP\"]},\"@balancer-labs/v3-vault/contracts/BalancerPoolToken.sol\":{\"keccak256\":\"0x79f2ec4f7314bd1c3555368ff02bb9d382489dc8bbd7efbbf306f9a5084f3bec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://a57c155451c5b1c1c59a27770754ccd9ba1be9344db6ac45b8744eba5fa4fa2f\",\"dweb:/ipfs/QmarkRwGaS3egg1FaQH6LibqjT6NocVUbD1jMPWtFxFaQV\"]},\"@balancer-labs/v3-vault/contracts/VaultGuard.sol\":{\"keccak256\":\"0x678a36266505ecef51b514707c3050baaeb970644894f64eb0a442aa4ab013ec\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d1514c0d27ad60f5f2d863f08258d67d937ec5e7b003d9c9f60526509d72bbef\",\"dweb:/ipfs/QmUVkCKFi1N8ZCzQ8VHD92eD1tzJciBowHmZ6fY8hEwNqF\"]},\"@openzeppelin/contracts/interfaces/IERC4626.sol\":{\"keccak256\":\"0x207f64371bc0fcc5be86713aa5da109a870cc3a6da50e93b64ee881e369b593d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://548667cfa76683767c2c610b577f6c2f0675d0ce28f53c3f37b969c84a56b205\",\"dweb:/ipfs/QmUzA1CKC6bDdULuS44wGd7PWBNLiHb6bh7oHwJBDZSLAx\"]},\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"contracts/WeightedPool.sol\":{\"keccak256\":\"0x5bc730e5864de66b59da231ec3c083adc625c181c1d2980e043b2c3135828b83\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://d38330349ca047499752eed9e3468191cb9219fa0a57ebec2b3695e87275b657\",\"dweb:/ipfs/QmeJVT9jQXg7yMZ6zyUsQsZXbgt1QqktYpqRV9Fj4cLECX\"]},\"contracts/test/WeightedPoolMock.sol\":{\"keccak256\":\"0x1d08b9860259ee086e3a16add4290c153ab40ff7e942da5799c15510a0b10908\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://5fb01c39bd825e9c2968966f4e7ff202bd42cbee91594a5f96453fe31256e70c\",\"dweb:/ipfs/QmSV3yqqhvSLREDp7zeLVJWXsKH6xzu7h7PC75qcoXTWev\"]}},\"version\":1}"}},"permit2/src/interfaces/IAllowanceTransfer.sol":{"IAllowanceTransfer":{"abi":[{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"AllowanceExpired","type":"error"},{"inputs":[],"name":"ExcessiveInvalidation","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InsufficientAllowance","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint160","name":"amount","type":"uint160"},{"indexed":false,"internalType":"uint48","name":"expiration","type":"uint48"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"spender","type":"address"}],"name":"Lockdown","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint48","name":"newNonce","type":"uint48"},{"indexed":false,"internalType":"uint48","name":"oldNonce","type":"uint48"}],"name":"NonceInvalidation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint160","name":"amount","type":"uint160"},{"indexed":false,"internalType":"uint48","name":"expiration","type":"uint48"},{"indexed":false,"internalType":"uint48","name":"nonce","type":"uint48"}],"name":"Permit","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint160","name":"amount","type":"uint160"},{"internalType":"uint48","name":"expiration","type":"uint48"},{"internalType":"uint48","name":"nonce","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint160","name":"amount","type":"uint160"},{"internalType":"uint48","name":"expiration","type":"uint48"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint48","name":"newNonce","type":"uint48"}],"name":"invalidateNonces","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"internalType":"struct IAllowanceTransfer.TokenSpenderPair[]","name":"approvals","type":"tuple[]"}],"name":"lockdown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"components":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint160","name":"amount","type":"uint160"},{"internalType":"uint48","name":"expiration","type":"uint48"},{"internalType":"uint48","name":"nonce","type":"uint48"}],"internalType":"struct IAllowanceTransfer.PermitDetails[]","name":"details","type":"tuple[]"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"sigDeadline","type":"uint256"}],"internalType":"struct IAllowanceTransfer.PermitBatch","name":"permitBatch","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"components":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint160","name":"amount","type":"uint160"},{"internalType":"uint48","name":"expiration","type":"uint48"},{"internalType":"uint48","name":"nonce","type":"uint48"}],"internalType":"struct IAllowanceTransfer.PermitDetails","name":"details","type":"tuple"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"sigDeadline","type":"uint256"}],"internalType":"struct IAllowanceTransfer.PermitSingle","name":"permitSingle","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint160","name":"amount","type":"uint160"},{"internalType":"address","name":"token","type":"address"}],"internalType":"struct IAllowanceTransfer.AllowanceTransferDetails[]","name":"transferDetails","type":"tuple[]"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint160","name":"amount","type":"uint160"},{"internalType":"address","name":"token","type":"address"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","allowance(address,address,address)":"927da105","approve(address,address,uint160,uint48)":"87517c45","invalidateNonces(address,address,uint48)":"65d9723c","lockdown((address,address)[])":"cc53287f","permit(address,((address,uint160,uint48,uint48),address,uint256),bytes)":"2b67b570","permit(address,((address,uint160,uint48,uint48)[],address,uint256),bytes)":"2a2d80d1","transferFrom((address,address,uint160,address)[])":"0d58b1db","transferFrom(address,address,uint160,address)":"36c78516"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"AllowanceExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExcessiveInvalidation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"InsufficientAllowance\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"uint48\",\"name\":\"expiration\",\"type\":\"uint48\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"Lockdown\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint48\",\"name\":\"newNonce\",\"type\":\"uint48\"},{\"indexed\":false,\"internalType\":\"uint48\",\"name\":\"oldNonce\",\"type\":\"uint48\"}],\"name\":\"NonceInvalidation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"uint48\",\"name\":\"expiration\",\"type\":\"uint48\"},{\"indexed\":false,\"internalType\":\"uint48\",\"name\":\"nonce\",\"type\":\"uint48\"}],\"name\":\"Permit\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"internalType\":\"uint48\",\"name\":\"expiration\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"nonce\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"internalType\":\"uint48\",\"name\":\"expiration\",\"type\":\"uint48\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"newNonce\",\"type\":\"uint48\"}],\"name\":\"invalidateNonces\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"internalType\":\"struct IAllowanceTransfer.TokenSpenderPair[]\",\"name\":\"approvals\",\"type\":\"tuple[]\"}],\"name\":\"lockdown\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"internalType\":\"uint48\",\"name\":\"expiration\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"nonce\",\"type\":\"uint48\"}],\"internalType\":\"struct IAllowanceTransfer.PermitDetails[]\",\"name\":\"details\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sigDeadline\",\"type\":\"uint256\"}],\"internalType\":\"struct IAllowanceTransfer.PermitBatch\",\"name\":\"permitBatch\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"internalType\":\"uint48\",\"name\":\"expiration\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"nonce\",\"type\":\"uint48\"}],\"internalType\":\"struct IAllowanceTransfer.PermitDetails\",\"name\":\"details\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sigDeadline\",\"type\":\"uint256\"}],\"internalType\":\"struct IAllowanceTransfer.PermitSingle\",\"name\":\"permitSingle\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"internalType\":\"struct IAllowanceTransfer.AllowanceTransferDetails[]\",\"name\":\"transferDetails\",\"type\":\"tuple[]\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Requires user's token approval on the Permit2 contract\",\"errors\":{\"AllowanceExpired(uint256)\":[{\"params\":{\"deadline\":\"The timestamp at which the allowed amount is no longer valid\"}}],\"InsufficientAllowance(uint256)\":[{\"params\":{\"amount\":\"The maximum amount allowed\"}}]},\"kind\":\"dev\",\"methods\":{\"allowance(address,address,address)\":{\"details\":\"The packed slot holds the allowed amount, expiration at which the allowed amount is no longer valid, and current nonce thats updated on any signature based approvals.\"},\"approve(address,address,uint160,uint48)\":{\"details\":\"The packed allowance also holds a nonce, which will stay unchanged in approveSetting amount to type(uint160).max sets an unlimited approval\",\"params\":{\"amount\":\"The approved amount of the token\",\"expiration\":\"The timestamp at which the approval is no longer valid\",\"spender\":\"The spender address to approve\",\"token\":\"The token to approve\"}},\"invalidateNonces(address,address,uint48)\":{\"details\":\"Can't invalidate more than 2**16 nonces per transaction.\",\"params\":{\"newNonce\":\"The new nonce to set. Invalidates all nonces less than it.\",\"spender\":\"The spender to invalidate nonces for\",\"token\":\"The token to invalidate nonces for\"}},\"lockdown((address,address)[])\":{\"params\":{\"approvals\":\"Array of approvals to revoke.\"}},\"permit(address,((address,uint160,uint48,uint48),address,uint256),bytes)\":{\"details\":\"May fail if the owner's nonce was invalidated in-flight by invalidateNonce\",\"params\":{\"owner\":\"The owner of the tokens being approved\",\"permitSingle\":\"Data signed over by the owner specifying the terms of approval\",\"signature\":\"The owner's signature over the permit data\"}},\"permit(address,((address,uint160,uint48,uint48)[],address,uint256),bytes)\":{\"details\":\"May fail if the owner's nonce was invalidated in-flight by invalidateNonce\",\"params\":{\"owner\":\"The owner of the tokens being approved\",\"permitBatch\":\"Data signed over by the owner specifying the terms of approval\",\"signature\":\"The owner's signature over the permit data\"}},\"transferFrom((address,address,uint160,address)[])\":{\"details\":\"Requires the from addresses to have approved at least the desired amount of tokens to msg.sender.\",\"params\":{\"transferDetails\":\"Array of owners, recipients, amounts, and tokens for the transfers\"}},\"transferFrom(address,address,uint160,address)\":{\"details\":\"Requires the from address to have approved at least the desired amount of tokens to msg.sender.\",\"params\":{\"amount\":\"The amount of the token to transfer\",\"from\":\"The address to transfer from\",\"to\":\"The address of the recipient\",\"token\":\"The token address to transfer\"}}},\"title\":\"AllowanceTransfer\",\"version\":1},\"userdoc\":{\"errors\":{\"AllowanceExpired(uint256)\":[{\"notice\":\"Thrown when an allowance on a token has expired.\"}],\"ExcessiveInvalidation()\":[{\"notice\":\"Thrown when too many nonces are invalidated.\"}],\"InsufficientAllowance(uint256)\":[{\"notice\":\"Thrown when an allowance on a token has been depleted.\"}]},\"events\":{\"Approval(address,address,address,uint160,uint48)\":{\"notice\":\"Emits an event when the owner successfully sets permissions on a token for the spender.\"},\"Lockdown(address,address,address)\":{\"notice\":\"Emits an event when the owner sets the allowance back to 0 with the lockdown function.\"},\"NonceInvalidation(address,address,address,uint48,uint48)\":{\"notice\":\"Emits an event when the owner successfully invalidates an ordered nonce.\"},\"Permit(address,address,address,uint160,uint48,uint48)\":{\"notice\":\"Emits an event when the owner successfully sets permissions using a permit signature on a token for the spender.\"}},\"kind\":\"user\",\"methods\":{\"allowance(address,address,address)\":{\"notice\":\"A mapping from owner address to token address to spender address to PackedAllowance struct, which contains details and conditions of the approval.The mapping is indexed in the above order see: allowance[ownerAddress][tokenAddress][spenderAddress]\"},\"approve(address,address,uint160,uint48)\":{\"notice\":\"Approves the spender to use up to amount of the specified token up until the expiration\"},\"invalidateNonces(address,address,uint48)\":{\"notice\":\"Invalidate nonces for a given (token, spender) pair\"},\"lockdown((address,address)[])\":{\"notice\":\"Enables performing a \\\"lockdown\\\" of the sender's Permit2 identity by batch revoking approvals\"},\"permit(address,((address,uint160,uint48,uint48),address,uint256),bytes)\":{\"notice\":\"Permit a spender to a given amount of the owners token via the owner's EIP-712 signature\"},\"permit(address,((address,uint160,uint48,uint48)[],address,uint256),bytes)\":{\"notice\":\"Permit a spender to the signed amounts of the owners tokens via the owner's EIP-712 signature\"},\"transferFrom((address,address,uint160,address)[])\":{\"notice\":\"Transfer approved tokens in a batch\"},\"transferFrom(address,address,uint160,address)\":{\"notice\":\"Transfer approved tokens from one address to another\"}},\"notice\":\"Handles ERC20 token permissions through signature based allowance setting and ERC20 token transfers by checking allowed amounts\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"permit2/src/interfaces/IAllowanceTransfer.sol\":\"IAllowanceTransfer\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"permit2/src/interfaces/IAllowanceTransfer.sol\":{\"keccak256\":\"0x37f0ac203b6ef605c9533e1a739477e8e9dcea90710b40e645a367f8a21ace29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0104d72aeaec1cd66cc232e7de7b7ead08608efcc179491b8a66387614670b0\",\"dweb:/ipfs/QmfAZDyuNC9FXXbnJUwqHNwmAK6uRrXxtWEytLsxjskPsN\"]},\"permit2/src/interfaces/IEIP712.sol\":{\"keccak256\":\"0xfdccf2b9639070803cd0e4198427fb0df3cc452ca59bd3b8a0d957a9a4254138\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7c936ac42ce89e827db905a1544397f8bdf46db34cdb6aa1b90dea42fdb4c72\",\"dweb:/ipfs/QmVgurxo1N31qZqkPBirw9Z7S9tLYmv6jSwQp8R8ur2cBk\"]}},\"version\":1}"}},"permit2/src/interfaces/IEIP712.sol":{"IEIP712":{"abi":[{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"permit2/src/interfaces/IEIP712.sol\":\"IEIP712\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"permit2/src/interfaces/IEIP712.sol\":{\"keccak256\":\"0xfdccf2b9639070803cd0e4198427fb0df3cc452ca59bd3b8a0d957a9a4254138\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7c936ac42ce89e827db905a1544397f8bdf46db34cdb6aa1b90dea42fdb4c72\",\"dweb:/ipfs/QmVgurxo1N31qZqkPBirw9Z7S9tLYmv6jSwQp8R8ur2cBk\"]}},\"version\":1}"}},"permit2/src/interfaces/IPermit2.sol":{"IPermit2":{"abi":[{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"AllowanceExpired","type":"error"},{"inputs":[],"name":"ExcessiveInvalidation","type":"error"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"uint256","name":"maxAmount","type":"uint256"}],"name":"InvalidAmount","type":"error"},{"inputs":[],"name":"LengthMismatch","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint160","name":"amount","type":"uint160"},{"indexed":false,"internalType":"uint48","name":"expiration","type":"uint48"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"spender","type":"address"}],"name":"Lockdown","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint48","name":"newNonce","type":"uint48"},{"indexed":false,"internalType":"uint48","name":"oldNonce","type":"uint48"}],"name":"NonceInvalidation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint160","name":"amount","type":"uint160"},{"indexed":false,"internalType":"uint48","name":"expiration","type":"uint48"},{"indexed":false,"internalType":"uint48","name":"nonce","type":"uint48"}],"name":"Permit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"word","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mask","type":"uint256"}],"name":"UnorderedNonceInvalidation","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint160","name":"amount","type":"uint160"},{"internalType":"uint48","name":"expiration","type":"uint48"},{"internalType":"uint48","name":"nonce","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint160","name":"amount","type":"uint160"},{"internalType":"uint48","name":"expiration","type":"uint48"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint48","name":"newNonce","type":"uint48"}],"name":"invalidateNonces","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"wordPos","type":"uint256"},{"internalType":"uint256","name":"mask","type":"uint256"}],"name":"invalidateUnorderedNonces","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"internalType":"struct IAllowanceTransfer.TokenSpenderPair[]","name":"approvals","type":"tuple[]"}],"name":"lockdown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"nonceBitmap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"components":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint160","name":"amount","type":"uint160"},{"internalType":"uint48","name":"expiration","type":"uint48"},{"internalType":"uint48","name":"nonce","type":"uint48"}],"internalType":"struct IAllowanceTransfer.PermitDetails[]","name":"details","type":"tuple[]"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"sigDeadline","type":"uint256"}],"internalType":"struct IAllowanceTransfer.PermitBatch","name":"permitBatch","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"components":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint160","name":"amount","type":"uint160"},{"internalType":"uint48","name":"expiration","type":"uint48"},{"internalType":"uint48","name":"nonce","type":"uint48"}],"internalType":"struct IAllowanceTransfer.PermitDetails","name":"details","type":"tuple"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"sigDeadline","type":"uint256"}],"internalType":"struct IAllowanceTransfer.PermitSingle","name":"permitSingle","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct ISignatureTransfer.TokenPermissions","name":"permitted","type":"tuple"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"internalType":"struct ISignatureTransfer.PermitTransferFrom","name":"permit","type":"tuple"},{"components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"requestedAmount","type":"uint256"}],"internalType":"struct ISignatureTransfer.SignatureTransferDetails","name":"transferDetails","type":"tuple"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"permitTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct ISignatureTransfer.TokenPermissions[]","name":"permitted","type":"tuple[]"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"internalType":"struct ISignatureTransfer.PermitBatchTransferFrom","name":"permit","type":"tuple"},{"components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"requestedAmount","type":"uint256"}],"internalType":"struct ISignatureTransfer.SignatureTransferDetails[]","name":"transferDetails","type":"tuple[]"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"permitTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct ISignatureTransfer.TokenPermissions","name":"permitted","type":"tuple"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"internalType":"struct ISignatureTransfer.PermitTransferFrom","name":"permit","type":"tuple"},{"components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"requestedAmount","type":"uint256"}],"internalType":"struct ISignatureTransfer.SignatureTransferDetails","name":"transferDetails","type":"tuple"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"bytes32","name":"witness","type":"bytes32"},{"internalType":"string","name":"witnessTypeString","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"permitWitnessTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct ISignatureTransfer.TokenPermissions[]","name":"permitted","type":"tuple[]"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"internalType":"struct ISignatureTransfer.PermitBatchTransferFrom","name":"permit","type":"tuple"},{"components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"requestedAmount","type":"uint256"}],"internalType":"struct ISignatureTransfer.SignatureTransferDetails[]","name":"transferDetails","type":"tuple[]"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"bytes32","name":"witness","type":"bytes32"},{"internalType":"string","name":"witnessTypeString","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"permitWitnessTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint160","name":"amount","type":"uint160"},{"internalType":"address","name":"token","type":"address"}],"internalType":"struct IAllowanceTransfer.AllowanceTransferDetails[]","name":"transferDetails","type":"tuple[]"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint160","name":"amount","type":"uint160"},{"internalType":"address","name":"token","type":"address"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","allowance(address,address,address)":"927da105","approve(address,address,uint160,uint48)":"87517c45","invalidateNonces(address,address,uint48)":"65d9723c","invalidateUnorderedNonces(uint256,uint256)":"3ff9dcb1","lockdown((address,address)[])":"cc53287f","nonceBitmap(address,uint256)":"4fe02b44","permit(address,((address,uint160,uint48,uint48),address,uint256),bytes)":"2b67b570","permit(address,((address,uint160,uint48,uint48)[],address,uint256),bytes)":"2a2d80d1","permitTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes)":"30f28b7a","permitTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes)":"edd9444b","permitWitnessTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes32,string,bytes)":"137c29fe","permitWitnessTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes32,string,bytes)":"fe8ec1a7","transferFrom((address,address,uint160,address)[])":"0d58b1db","transferFrom(address,address,uint160,address)":"36c78516"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"AllowanceExpired\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExcessiveInvalidation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LengthMismatch\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"uint48\",\"name\":\"expiration\",\"type\":\"uint48\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"Lockdown\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint48\",\"name\":\"newNonce\",\"type\":\"uint48\"},{\"indexed\":false,\"internalType\":\"uint48\",\"name\":\"oldNonce\",\"type\":\"uint48\"}],\"name\":\"NonceInvalidation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"indexed\":false,\"internalType\":\"uint48\",\"name\":\"expiration\",\"type\":\"uint48\"},{\"indexed\":false,\"internalType\":\"uint48\",\"name\":\"nonce\",\"type\":\"uint48\"}],\"name\":\"Permit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"word\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mask\",\"type\":\"uint256\"}],\"name\":\"UnorderedNonceInvalidation\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"internalType\":\"uint48\",\"name\":\"expiration\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"nonce\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"internalType\":\"uint48\",\"name\":\"expiration\",\"type\":\"uint48\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"newNonce\",\"type\":\"uint48\"}],\"name\":\"invalidateNonces\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"wordPos\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mask\",\"type\":\"uint256\"}],\"name\":\"invalidateUnorderedNonces\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"internalType\":\"struct IAllowanceTransfer.TokenSpenderPair[]\",\"name\":\"approvals\",\"type\":\"tuple[]\"}],\"name\":\"lockdown\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"nonceBitmap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"internalType\":\"uint48\",\"name\":\"expiration\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"nonce\",\"type\":\"uint48\"}],\"internalType\":\"struct IAllowanceTransfer.PermitDetails[]\",\"name\":\"details\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sigDeadline\",\"type\":\"uint256\"}],\"internalType\":\"struct IAllowanceTransfer.PermitBatch\",\"name\":\"permitBatch\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"internalType\":\"uint48\",\"name\":\"expiration\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"nonce\",\"type\":\"uint48\"}],\"internalType\":\"struct IAllowanceTransfer.PermitDetails\",\"name\":\"details\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"sigDeadline\",\"type\":\"uint256\"}],\"internalType\":\"struct IAllowanceTransfer.PermitSingle\",\"name\":\"permitSingle\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureTransfer.TokenPermissions\",\"name\":\"permitted\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureTransfer.PermitTransferFrom\",\"name\":\"permit\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requestedAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureTransfer.SignatureTransferDetails\",\"name\":\"transferDetails\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"permitTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureTransfer.TokenPermissions[]\",\"name\":\"permitted\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureTransfer.PermitBatchTransferFrom\",\"name\":\"permit\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requestedAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureTransfer.SignatureTransferDetails[]\",\"name\":\"transferDetails\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"permitTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureTransfer.TokenPermissions\",\"name\":\"permitted\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureTransfer.PermitTransferFrom\",\"name\":\"permit\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requestedAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureTransfer.SignatureTransferDetails\",\"name\":\"transferDetails\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"witness\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"witnessTypeString\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"permitWitnessTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureTransfer.TokenPermissions[]\",\"name\":\"permitted\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureTransfer.PermitBatchTransferFrom\",\"name\":\"permit\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requestedAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureTransfer.SignatureTransferDetails[]\",\"name\":\"transferDetails\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"witness\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"witnessTypeString\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"permitWitnessTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"internalType\":\"struct IAllowanceTransfer.AllowanceTransferDetails[]\",\"name\":\"transferDetails\",\"type\":\"tuple[]\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint160\",\"name\":\"amount\",\"type\":\"uint160\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Users must approve Permit2 before calling any of the transfer functions.\",\"errors\":{\"AllowanceExpired(uint256)\":[{\"params\":{\"deadline\":\"The timestamp at which the allowed amount is no longer valid\"}}],\"InsufficientAllowance(uint256)\":[{\"params\":{\"amount\":\"The maximum amount allowed\"}}],\"InvalidAmount(uint256)\":[{\"params\":{\"maxAmount\":\"The maximum amount a spender can request to transfer\"}}],\"LengthMismatch()\":[{\"details\":\"If the spender does not need to transfer the number of tokens permitted, the spender can request amount 0 to be transferred\"}]},\"kind\":\"dev\",\"methods\":{\"allowance(address,address,address)\":{\"details\":\"The packed slot holds the allowed amount, expiration at which the allowed amount is no longer valid, and current nonce thats updated on any signature based approvals.\"},\"approve(address,address,uint160,uint48)\":{\"details\":\"The packed allowance also holds a nonce, which will stay unchanged in approveSetting amount to type(uint160).max sets an unlimited approval\",\"params\":{\"amount\":\"The approved amount of the token\",\"expiration\":\"The timestamp at which the approval is no longer valid\",\"spender\":\"The spender address to approve\",\"token\":\"The token to approve\"}},\"invalidateNonces(address,address,uint48)\":{\"details\":\"Can't invalidate more than 2**16 nonces per transaction.\",\"params\":{\"newNonce\":\"The new nonce to set. Invalidates all nonces less than it.\",\"spender\":\"The spender to invalidate nonces for\",\"token\":\"The token to invalidate nonces for\"}},\"invalidateUnorderedNonces(uint256,uint256)\":{\"details\":\"The wordPos is maxed at type(uint248).max\",\"params\":{\"mask\":\"A bitmap masked against msg.sender's current bitmap at the word position\",\"wordPos\":\"A number to index the nonceBitmap at\"}},\"lockdown((address,address)[])\":{\"params\":{\"approvals\":\"Array of approvals to revoke.\"}},\"nonceBitmap(address,uint256)\":{\"details\":\"Uses unordered nonces so that permit messages do not need to be spent in a certain orderThe mapping is indexed first by the token owner, then by an index specified in the nonceIt returns a uint256 bitmapThe index, or wordPosition is capped at type(uint248).max\"},\"permit(address,((address,uint160,uint48,uint48),address,uint256),bytes)\":{\"details\":\"May fail if the owner's nonce was invalidated in-flight by invalidateNonce\",\"params\":{\"owner\":\"The owner of the tokens being approved\",\"permitSingle\":\"Data signed over by the owner specifying the terms of approval\",\"signature\":\"The owner's signature over the permit data\"}},\"permit(address,((address,uint160,uint48,uint48)[],address,uint256),bytes)\":{\"details\":\"May fail if the owner's nonce was invalidated in-flight by invalidateNonce\",\"params\":{\"owner\":\"The owner of the tokens being approved\",\"permitBatch\":\"Data signed over by the owner specifying the terms of approval\",\"signature\":\"The owner's signature over the permit data\"}},\"permitTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes)\":{\"details\":\"Reverts if the requested amount is greater than the permitted signed amount\",\"params\":{\"owner\":\"The owner of the tokens to transfer\",\"permit\":\"The permit data signed over by the owner\",\"signature\":\"The signature to verify\",\"transferDetails\":\"The spender's requested transfer details for the permitted token\"}},\"permitTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes)\":{\"params\":{\"owner\":\"The owner of the tokens to transfer\",\"permit\":\"The permit data signed over by the owner\",\"signature\":\"The signature to verify\",\"transferDetails\":\"Specifies the recipient and requested amount for the token transfer\"}},\"permitWitnessTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes32,string,bytes)\":{\"details\":\"The witness type string must follow EIP712 ordering of nested structs and must include the TokenPermissions type definitionReverts if the requested amount is greater than the permitted signed amount\",\"params\":{\"owner\":\"The owner of the tokens to transfer\",\"permit\":\"The permit data signed over by the owner\",\"signature\":\"The signature to verify\",\"transferDetails\":\"The spender's requested transfer details for the permitted token\",\"witness\":\"Extra data to include when checking the user signature\",\"witnessTypeString\":\"The EIP-712 type definition for remaining string stub of the typehash\"}},\"permitWitnessTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes32,string,bytes)\":{\"details\":\"The witness type string must follow EIP712 ordering of nested structs and must include the TokenPermissions type definition\",\"params\":{\"owner\":\"The owner of the tokens to transfer\",\"permit\":\"The permit data signed over by the owner\",\"signature\":\"The signature to verify\",\"transferDetails\":\"Specifies the recipient and requested amount for the token transfer\",\"witness\":\"Extra data to include when checking the user signature\",\"witnessTypeString\":\"The EIP-712 type definition for remaining string stub of the typehash\"}},\"transferFrom((address,address,uint160,address)[])\":{\"details\":\"Requires the from addresses to have approved at least the desired amount of tokens to msg.sender.\",\"params\":{\"transferDetails\":\"Array of owners, recipients, amounts, and tokens for the transfers\"}},\"transferFrom(address,address,uint160,address)\":{\"details\":\"Requires the from address to have approved at least the desired amount of tokens to msg.sender.\",\"params\":{\"amount\":\"The amount of the token to transfer\",\"from\":\"The address to transfer from\",\"to\":\"The address of the recipient\",\"token\":\"The token address to transfer\"}}},\"version\":1},\"userdoc\":{\"errors\":{\"AllowanceExpired(uint256)\":[{\"notice\":\"Thrown when an allowance on a token has expired.\"}],\"ExcessiveInvalidation()\":[{\"notice\":\"Thrown when too many nonces are invalidated.\"}],\"InsufficientAllowance(uint256)\":[{\"notice\":\"Thrown when an allowance on a token has been depleted.\"}],\"InvalidAmount(uint256)\":[{\"notice\":\"Thrown when the requested amount for a transfer is larger than the permissioned amount\"}],\"LengthMismatch()\":[{\"notice\":\"Thrown when the number of tokens permissioned to a spender does not match the number of tokens being transferred\"}]},\"events\":{\"Approval(address,address,address,uint160,uint48)\":{\"notice\":\"Emits an event when the owner successfully sets permissions on a token for the spender.\"},\"Lockdown(address,address,address)\":{\"notice\":\"Emits an event when the owner sets the allowance back to 0 with the lockdown function.\"},\"NonceInvalidation(address,address,address,uint48,uint48)\":{\"notice\":\"Emits an event when the owner successfully invalidates an ordered nonce.\"},\"Permit(address,address,address,uint160,uint48,uint48)\":{\"notice\":\"Emits an event when the owner successfully sets permissions using a permit signature on a token for the spender.\"},\"UnorderedNonceInvalidation(address,uint256,uint256)\":{\"notice\":\"Emits an event when the owner successfully invalidates an unordered nonce.\"}},\"kind\":\"user\",\"methods\":{\"allowance(address,address,address)\":{\"notice\":\"A mapping from owner address to token address to spender address to PackedAllowance struct, which contains details and conditions of the approval.The mapping is indexed in the above order see: allowance[ownerAddress][tokenAddress][spenderAddress]\"},\"approve(address,address,uint160,uint48)\":{\"notice\":\"Approves the spender to use up to amount of the specified token up until the expiration\"},\"invalidateNonces(address,address,uint48)\":{\"notice\":\"Invalidate nonces for a given (token, spender) pair\"},\"invalidateUnorderedNonces(uint256,uint256)\":{\"notice\":\"Invalidates the bits specified in mask for the bitmap at the word position\"},\"lockdown((address,address)[])\":{\"notice\":\"Enables performing a \\\"lockdown\\\" of the sender's Permit2 identity by batch revoking approvals\"},\"nonceBitmap(address,uint256)\":{\"notice\":\"A map from token owner address and a caller specified word index to a bitmap. Used to set bits in the bitmap to prevent against signature replay protection\"},\"permit(address,((address,uint160,uint48,uint48),address,uint256),bytes)\":{\"notice\":\"Permit a spender to a given amount of the owners token via the owner's EIP-712 signature\"},\"permit(address,((address,uint160,uint48,uint48)[],address,uint256),bytes)\":{\"notice\":\"Permit a spender to the signed amounts of the owners tokens via the owner's EIP-712 signature\"},\"permitTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes)\":{\"notice\":\"Transfers a token using a signed permit message\"},\"permitTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes)\":{\"notice\":\"Transfers multiple tokens using a signed permit message\"},\"permitWitnessTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes32,string,bytes)\":{\"notice\":\"Transfers a token using a signed permit messageIncludes extra data provided by the caller to verify signature over\"},\"permitWitnessTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes32,string,bytes)\":{\"notice\":\"Transfers multiple tokens using a signed permit messageIncludes extra data provided by the caller to verify signature over\"},\"transferFrom((address,address,uint160,address)[])\":{\"notice\":\"Transfer approved tokens in a batch\"},\"transferFrom(address,address,uint160,address)\":{\"notice\":\"Transfer approved tokens from one address to another\"}},\"notice\":\"Permit2 handles signature-based transfers in SignatureTransfer and allowance-based transfers in AllowanceTransfer.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"permit2/src/interfaces/IPermit2.sol\":\"IPermit2\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"permit2/src/interfaces/IAllowanceTransfer.sol\":{\"keccak256\":\"0x37f0ac203b6ef605c9533e1a739477e8e9dcea90710b40e645a367f8a21ace29\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e0104d72aeaec1cd66cc232e7de7b7ead08608efcc179491b8a66387614670b0\",\"dweb:/ipfs/QmfAZDyuNC9FXXbnJUwqHNwmAK6uRrXxtWEytLsxjskPsN\"]},\"permit2/src/interfaces/IEIP712.sol\":{\"keccak256\":\"0xfdccf2b9639070803cd0e4198427fb0df3cc452ca59bd3b8a0d957a9a4254138\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7c936ac42ce89e827db905a1544397f8bdf46db34cdb6aa1b90dea42fdb4c72\",\"dweb:/ipfs/QmVgurxo1N31qZqkPBirw9Z7S9tLYmv6jSwQp8R8ur2cBk\"]},\"permit2/src/interfaces/IPermit2.sol\":{\"keccak256\":\"0xaa631cc9f53e699301d94233007110a345e6779011def484e8dd97b8fe0af771\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc0502cf19c9c18f320a3001201e89e350393b75837f6b7971de18b2de06f30d\",\"dweb:/ipfs/QmT9SfhdJ7VJNNrf94g4H5usyi7ShqWGx7Cqsz9jZTjX96\"]},\"permit2/src/interfaces/ISignatureTransfer.sol\":{\"keccak256\":\"0xe6df9966f8841dc3958ee86169c89de97e7f614c81c28b9dc947b12d732df64e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3d4eafdee7f48c3be8350a94eb6edd0bfb2af2c105df65787a77174f356c0317\",\"dweb:/ipfs/QmY1j2adeeAhNpn6cUuthemxGCdLXHTfyMh9yTKsY4mZ2d\"]}},\"version\":1}"}},"permit2/src/interfaces/ISignatureTransfer.sol":{"ISignatureTransfer":{"abi":[{"inputs":[{"internalType":"uint256","name":"maxAmount","type":"uint256"}],"name":"InvalidAmount","type":"error"},{"inputs":[],"name":"LengthMismatch","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"word","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"mask","type":"uint256"}],"name":"UnorderedNonceInvalidation","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"wordPos","type":"uint256"},{"internalType":"uint256","name":"mask","type":"uint256"}],"name":"invalidateUnorderedNonces","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"nonceBitmap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct ISignatureTransfer.TokenPermissions","name":"permitted","type":"tuple"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"internalType":"struct ISignatureTransfer.PermitTransferFrom","name":"permit","type":"tuple"},{"components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"requestedAmount","type":"uint256"}],"internalType":"struct ISignatureTransfer.SignatureTransferDetails","name":"transferDetails","type":"tuple"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"permitTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct ISignatureTransfer.TokenPermissions[]","name":"permitted","type":"tuple[]"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"internalType":"struct ISignatureTransfer.PermitBatchTransferFrom","name":"permit","type":"tuple"},{"components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"requestedAmount","type":"uint256"}],"internalType":"struct ISignatureTransfer.SignatureTransferDetails[]","name":"transferDetails","type":"tuple[]"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"permitTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct ISignatureTransfer.TokenPermissions","name":"permitted","type":"tuple"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"internalType":"struct ISignatureTransfer.PermitTransferFrom","name":"permit","type":"tuple"},{"components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"requestedAmount","type":"uint256"}],"internalType":"struct ISignatureTransfer.SignatureTransferDetails","name":"transferDetails","type":"tuple"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"bytes32","name":"witness","type":"bytes32"},{"internalType":"string","name":"witnessTypeString","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"permitWitnessTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"internalType":"struct ISignatureTransfer.TokenPermissions[]","name":"permitted","type":"tuple[]"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"internalType":"struct ISignatureTransfer.PermitBatchTransferFrom","name":"permit","type":"tuple"},{"components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"requestedAmount","type":"uint256"}],"internalType":"struct ISignatureTransfer.SignatureTransferDetails[]","name":"transferDetails","type":"tuple[]"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"bytes32","name":"witness","type":"bytes32"},{"internalType":"string","name":"witnessTypeString","type":"string"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"permitWitnessTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}],"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"methodIdentifiers":{"DOMAIN_SEPARATOR()":"3644e515","invalidateUnorderedNonces(uint256,uint256)":"3ff9dcb1","nonceBitmap(address,uint256)":"4fe02b44","permitTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes)":"30f28b7a","permitTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes)":"edd9444b","permitWitnessTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes32,string,bytes)":"137c29fe","permitWitnessTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes32,string,bytes)":"fe8ec1a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LengthMismatch\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"word\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"mask\",\"type\":\"uint256\"}],\"name\":\"UnorderedNonceInvalidation\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"wordPos\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"mask\",\"type\":\"uint256\"}],\"name\":\"invalidateUnorderedNonces\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"nonceBitmap\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureTransfer.TokenPermissions\",\"name\":\"permitted\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureTransfer.PermitTransferFrom\",\"name\":\"permit\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requestedAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureTransfer.SignatureTransferDetails\",\"name\":\"transferDetails\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"permitTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureTransfer.TokenPermissions[]\",\"name\":\"permitted\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureTransfer.PermitBatchTransferFrom\",\"name\":\"permit\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requestedAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureTransfer.SignatureTransferDetails[]\",\"name\":\"transferDetails\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"permitTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureTransfer.TokenPermissions\",\"name\":\"permitted\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureTransfer.PermitTransferFrom\",\"name\":\"permit\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requestedAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureTransfer.SignatureTransferDetails\",\"name\":\"transferDetails\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"witness\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"witnessTypeString\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"permitWitnessTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureTransfer.TokenPermissions[]\",\"name\":\"permitted\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureTransfer.PermitBatchTransferFrom\",\"name\":\"permit\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"requestedAmount\",\"type\":\"uint256\"}],\"internalType\":\"struct ISignatureTransfer.SignatureTransferDetails[]\",\"name\":\"transferDetails\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"witness\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"witnessTypeString\",\"type\":\"string\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"permitWitnessTransferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Requires user's token approval on the Permit2 contract\",\"errors\":{\"InvalidAmount(uint256)\":[{\"params\":{\"maxAmount\":\"The maximum amount a spender can request to transfer\"}}],\"LengthMismatch()\":[{\"details\":\"If the spender does not need to transfer the number of tokens permitted, the spender can request amount 0 to be transferred\"}]},\"kind\":\"dev\",\"methods\":{\"invalidateUnorderedNonces(uint256,uint256)\":{\"details\":\"The wordPos is maxed at type(uint248).max\",\"params\":{\"mask\":\"A bitmap masked against msg.sender's current bitmap at the word position\",\"wordPos\":\"A number to index the nonceBitmap at\"}},\"nonceBitmap(address,uint256)\":{\"details\":\"Uses unordered nonces so that permit messages do not need to be spent in a certain orderThe mapping is indexed first by the token owner, then by an index specified in the nonceIt returns a uint256 bitmapThe index, or wordPosition is capped at type(uint248).max\"},\"permitTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes)\":{\"details\":\"Reverts if the requested amount is greater than the permitted signed amount\",\"params\":{\"owner\":\"The owner of the tokens to transfer\",\"permit\":\"The permit data signed over by the owner\",\"signature\":\"The signature to verify\",\"transferDetails\":\"The spender's requested transfer details for the permitted token\"}},\"permitTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes)\":{\"params\":{\"owner\":\"The owner of the tokens to transfer\",\"permit\":\"The permit data signed over by the owner\",\"signature\":\"The signature to verify\",\"transferDetails\":\"Specifies the recipient and requested amount for the token transfer\"}},\"permitWitnessTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes32,string,bytes)\":{\"details\":\"The witness type string must follow EIP712 ordering of nested structs and must include the TokenPermissions type definitionReverts if the requested amount is greater than the permitted signed amount\",\"params\":{\"owner\":\"The owner of the tokens to transfer\",\"permit\":\"The permit data signed over by the owner\",\"signature\":\"The signature to verify\",\"transferDetails\":\"The spender's requested transfer details for the permitted token\",\"witness\":\"Extra data to include when checking the user signature\",\"witnessTypeString\":\"The EIP-712 type definition for remaining string stub of the typehash\"}},\"permitWitnessTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes32,string,bytes)\":{\"details\":\"The witness type string must follow EIP712 ordering of nested structs and must include the TokenPermissions type definition\",\"params\":{\"owner\":\"The owner of the tokens to transfer\",\"permit\":\"The permit data signed over by the owner\",\"signature\":\"The signature to verify\",\"transferDetails\":\"Specifies the recipient and requested amount for the token transfer\",\"witness\":\"Extra data to include when checking the user signature\",\"witnessTypeString\":\"The EIP-712 type definition for remaining string stub of the typehash\"}}},\"title\":\"SignatureTransfer\",\"version\":1},\"userdoc\":{\"errors\":{\"InvalidAmount(uint256)\":[{\"notice\":\"Thrown when the requested amount for a transfer is larger than the permissioned amount\"}],\"LengthMismatch()\":[{\"notice\":\"Thrown when the number of tokens permissioned to a spender does not match the number of tokens being transferred\"}]},\"events\":{\"UnorderedNonceInvalidation(address,uint256,uint256)\":{\"notice\":\"Emits an event when the owner successfully invalidates an unordered nonce.\"}},\"kind\":\"user\",\"methods\":{\"invalidateUnorderedNonces(uint256,uint256)\":{\"notice\":\"Invalidates the bits specified in mask for the bitmap at the word position\"},\"nonceBitmap(address,uint256)\":{\"notice\":\"A map from token owner address and a caller specified word index to a bitmap. Used to set bits in the bitmap to prevent against signature replay protection\"},\"permitTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes)\":{\"notice\":\"Transfers a token using a signed permit message\"},\"permitTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes)\":{\"notice\":\"Transfers multiple tokens using a signed permit message\"},\"permitWitnessTransferFrom(((address,uint256),uint256,uint256),(address,uint256),address,bytes32,string,bytes)\":{\"notice\":\"Transfers a token using a signed permit messageIncludes extra data provided by the caller to verify signature over\"},\"permitWitnessTransferFrom(((address,uint256)[],uint256,uint256),(address,uint256)[],address,bytes32,string,bytes)\":{\"notice\":\"Transfers multiple tokens using a signed permit messageIncludes extra data provided by the caller to verify signature over\"}},\"notice\":\"Handles ERC20 token transfers through signature based actions\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"permit2/src/interfaces/ISignatureTransfer.sol\":\"ISignatureTransfer\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"details\":{\"constantOptimizer\":true,\"cse\":true,\"deduplicate\":true,\"inliner\":true,\"jumpdestRemover\":true,\"orderLiterals\":true,\"peephole\":true,\"simpleCounterForLoopUncheckedIncrement\":true,\"yul\":true,\"yulDetails\":{\"optimizerSteps\":\"dhfoDgvulfnTUtnIf [ xa[r]EscLM cCTUtTOntnfDIul Lcul Vcul [j] Tpeul xa[rul] xa[r]cL gvif CTUca[r]LSsTFOtfDnca[r]Iulc ] jmul[jul] VcTOcul jmul : fDnTOcmu\",\"stackAllocation\":true}},\"runs\":9999},\"remappings\":[],\"viaIR\":true},\"sources\":{\"permit2/src/interfaces/IEIP712.sol\":{\"keccak256\":\"0xfdccf2b9639070803cd0e4198427fb0df3cc452ca59bd3b8a0d957a9a4254138\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7c936ac42ce89e827db905a1544397f8bdf46db34cdb6aa1b90dea42fdb4c72\",\"dweb:/ipfs/QmVgurxo1N31qZqkPBirw9Z7S9tLYmv6jSwQp8R8ur2cBk\"]},\"permit2/src/interfaces/ISignatureTransfer.sol\":{\"keccak256\":\"0xe6df9966f8841dc3958ee86169c89de97e7f614c81c28b9dc947b12d732df64e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3d4eafdee7f48c3be8350a94eb6edd0bfb2af2c105df65787a77174f356c0317\",\"dweb:/ipfs/QmY1j2adeeAhNpn6cUuthemxGCdLXHTfyMh9yTKsY4mZ2d\"]}},\"version\":1}"}}}}} \ No newline at end of file diff --git a/v3/scripts/20250221-protocol-fee-controller-migration/index.ts b/v3/scripts/20250221-protocol-fee-controller-migration/index.ts index 54428741..f4622b7b 100644 --- a/v3/scripts/20250221-protocol-fee-controller-migration/index.ts +++ b/v3/scripts/20250221-protocol-fee-controller-migration/index.ts @@ -1,19 +1,15 @@ import { Task, TaskRunOptions } from '@src'; -import { BalancerContractRegistryInitializerDeployment } from './input'; +import { ProtocolFeeControllerMigrationDeployment } from './input'; export default async (task: Task, { force, from }: TaskRunOptions = {}): Promise => { - const input = task.input() as BalancerContractRegistryInitializerDeployment; + const input = task.input() as ProtocolFeeControllerMigrationDeployment; - const args = [ - input.Vault, - input.BalancerContractRegistry, - [input.RouterName, input.BatchRouterName, input.BufferRouterName, input.CompositeLiquidityRouterName], - [input.Router, input.BatchRouter, input.BufferRouter, input.CompositeLiquidityRouter], - [input.WeightedPoolName, input.StablePoolName, input.StableSurgePoolName], - [input.WeightedPoolFactory, input.StablePoolFactory, input.StableSurgePoolFactory], - [input.WeightedPoolAlias, input.StablePoolAlias], - [input.WeightedPoolFactory, input.StablePoolFactory], - ]; + //const args = [input.Vault, input.ProtocolFeeController]; + const args = [input.Vault]; - await task.deployAndVerify('BalancerContractRegistryInitializer', args, from, force); + await task.deployAndVerify('ProtocolFeeControllerMigration', args, from, force); + + // Deploy a version of the WeightedPoolFactory that allows pool creators. + const factoryArgs = [input.Vault, 0, "", ""]; + await task.deployAndVerify('WeightedPoolFactory', factoryArgs, from, force); }; diff --git a/v3/scripts/20250221-protocol-fee-controller-migration/input.ts b/v3/scripts/20250221-protocol-fee-controller-migration/input.ts index e1017b92..6e059d9c 100644 --- a/v3/scripts/20250221-protocol-fee-controller-migration/input.ts +++ b/v3/scripts/20250221-protocol-fee-controller-migration/input.ts @@ -1,65 +1,14 @@ import { Task, TaskMode } from '@src'; -export type BalancerContractRegistryInitializerDeployment = { +export type ProtocolFeeControllerMigrationDeployment = { Vault: string; - BalancerContractRegistry: string; - RouterName: string; - Router: string; - BatchRouterName: string; - BatchRouter: string; - BufferRouterName: string; - BufferRouter: string; - CompositeLiquidityRouterName: string; - CompositeLiquidityRouter: string; - WeightedPoolName: string; - WeightedPoolFactory: string; - StablePoolName: string; - StablePoolFactory: string; - StableSurgePoolName: string; - StableSurgePoolFactory: string; - WeightedPoolAlias: string; - StablePoolAlias: string; + // TEMPORARY! ProtocolFeeController: string; }; -const RouterName = '20241205-v3-router'; -const BatchRouterName = '20241205-v3-batch-router'; -const BufferRouterName = '20241205-v3-buffer-router'; -const CompositeLiquidityRouterName = '20250123-v3-composite-liquidity-router-v2'; -const WeightedPoolName = '20241205-v3-weighted-pool'; -const StablePoolName = '20241205-v3-stable-pool'; -const StableSurgePoolName = '20250121-v3-stable-surge'; - const Vault = new Task('20241204-v3-vault', TaskMode.READ_ONLY); -const BalancerContractRegistry = new Task('20250117-v3-contract-registry', TaskMode.READ_ONLY); - -const Router = new Task(RouterName, TaskMode.READ_ONLY); -const BatchRouter = new Task(BatchRouterName, TaskMode.READ_ONLY); -const BufferRouter = new Task(BufferRouterName, TaskMode.READ_ONLY); -const CompositeLiquidityRouter = new Task(CompositeLiquidityRouterName, TaskMode.READ_ONLY); -const WeightedPoolFactory = new Task(WeightedPoolName, TaskMode.READ_ONLY); -const StablePoolFactory = new Task(StablePoolName, TaskMode.READ_ONLY); -const StableSurgePoolFactory = new Task(StableSurgePoolName, TaskMode.READ_ONLY); - -const WeightedPoolAlias = 'WeightedPool'; -const StablePoolAlias = 'StablePool'; +//const ProtocolFeeController = new Task('20250214-v3-protocol-fee-controller-v2', TaskMode.READ_ONLY); export default { Vault, - BalancerContractRegistry, - RouterName, - Router, - BatchRouterName, - BatchRouter, - BufferRouterName, - BufferRouter, - CompositeLiquidityRouterName, - CompositeLiquidityRouter, - WeightedPoolName, - WeightedPoolFactory, - StablePoolName, - StablePoolFactory, - StableSurgePoolName, - StableSurgePoolFactory, - WeightedPoolAlias, - StablePoolAlias, + //ProtocolFeeController, }; diff --git a/v3/scripts/20250221-protocol-fee-controller-migration/readme.md b/v3/scripts/20250221-protocol-fee-controller-migration/readme.md index e5cd8562..42025c71 100644 --- a/v3/scripts/20250221-protocol-fee-controller-migration/readme.md +++ b/v3/scripts/20250221-protocol-fee-controller-migration/readme.md @@ -1,7 +1,10 @@ # 2025-02-21 - V3 Protocol Fee Controller Migration -Deployment of the `ProtocolFeeControllerMigration` contract, responsible for migrating the ProtocolFeeController from the original deployed version to a new version with extra events and features designed to make future migrations easier. +Deployment of the `ProtocolFeeControllerMigration` contract, responsible for migrating the ProtocolFeeController from the original deployed version to a new version with extra events and features designed to make future migrations easier. This tests *two* migrations - the first upgrades the contract from the originally deployed ProtocolFeeController, which doesn't have the new infrastructure (specifically, getters for the pool creator fee percentages). This migration ignores pool creator percentages (which is fine because at this point there aren't any). + +We then simulate a second migration, this time using the full infrastructure in the new contract, including the pool creator fee getters. To ensure this works, we deploy a pool with a creator, set a fee, and check that it gets migrated properly. (To do this in the fork test, we need a special version of the WeightedPoolFactory that allows pool creators.) ## Useful Files - [`ProtocolFeeControllerMigration` artifact](./artifact/ProtocolFeeControllerMigration.json) +- [`WeightedPoolFactory` artifact](./artifact/WeightedPoolFactory.json) diff --git a/v3/scripts/20250221-protocol-fee-controller-migration/test/task.fork.ts b/v3/scripts/20250221-protocol-fee-controller-migration/test/task.fork.ts index 4b7d5078..962ae414 100644 --- a/v3/scripts/20250221-protocol-fee-controller-migration/test/task.fork.ts +++ b/v3/scripts/20250221-protocol-fee-controller-migration/test/task.fork.ts @@ -4,138 +4,331 @@ import { Contract } from 'ethers'; import { fp } from '@helpers/numbers'; import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/dist/src/signer-with-address'; - -import { describeForkTest } from '@src'; +import { ONES_BYTES32, ZERO_ADDRESS } from '@helpers/constants'; +import { describeForkTest, getSigner, getForkedNetwork, impersonate } from '@src'; import { Task, TaskMode } from '@src'; -import { getForkedNetwork } from '@src'; -import { impersonate } from '@src'; import { actionId } from '@helpers/models/misc/actions'; +import * as expectEvent from '@helpers/expectEvent'; + +describeForkTest('ProtocolFeeControllerMigration', 'mainnet', 21897262, function () { + const GOV_MULTISIG = '0x10A19e7eE7d7F8a52822f6817de8ea18204F2e4f'; + + const POOL_CREATOR_SWAP_FEE = fp(0.1); + const POOL_CREATOR_YIELD_FEE = fp(0.2); -describeForkTest('BalancerContractRegistryInitializer', 'mainnet', 21862412, function () { let govMultisig: SignerWithAddress; - let registryInitializer: Contract; - let registry: Contract; + let migration: Contract; + let vault: Contract; + let vaultExtension: Contract; + let vaultAdmin: Contract; + let oldFeeController: Contract; + let feeController: Contract; + let vaultAsExtension: Contract; + let feeControllerTask: Task; + let migrationTask: Task; + + let admin: SignerWithAddress; let authorizer: Contract; - let router: Contract; - let batchRouter: Contract; - let bufferRouter: Contract; - let compositeLiquidityRouter: Contract; - let weightedPoolFactory: Contract; - let stablePoolFactory: Contract; - let stableSurgePoolFactory: Contract; - let task: Task; + let stableSurgePools: string[]; + let testPool: string; + let testPoolWithCreator: Contract; + let finalizePermission; - const GOV_MULTISIG = '0x10A19e7eE7d7F8a52822f6817de8ea18204F2e4f'; + before('run task', async () => { + const vaultTask = new Task('20241204-v3-vault', TaskMode.READ_ONLY, getForkedNetwork(hre)); + vault = await vaultTask.deployedInstance('Vault'); + vaultExtension = await vaultTask.deployedInstance('VaultExtension'); + vaultAdmin = await vaultTask.deployedInstance('VaultAdmin'); + oldFeeController = await vaultTask.deployedInstance('ProtocolFeeController'); - enum ContractType { - OTHER, // a blank entry will have a 0-value type, and it's safest to return this in that case - POOL_FACTORY, - ROUTER, - HOOK, - ERC4626, - } + feeControllerTask = new Task('20250214-v3-protocol-fee-controller-v2', TaskMode.TEST, getForkedNetwork(hre)); + await feeControllerTask.run({ force: true }); - before('run task', async () => { - task = new Task('20250221-balancer-registry-initializer', TaskMode.TEST, getForkedNetwork(hre)); - await task.run({ force: true }); - registryInitializer = await task.deployedInstance('BalancerContractRegistryInitializer'); + feeController = await feeControllerTask.deployedInstance('ProtocolFeeController'); + + migrationTask = new Task('20250221-protocol-fee-controller-migration', TaskMode.TEST, getForkedNetwork(hre)); + await migrationTask.run({ force: true }); + + migration = await migrationTask.deployedInstance('ProtocolFeeControllerMigration'); + + // Set the new protocol fee controller after the fact - TEMPORARY - because it wasn't deployed yet. + migration.setNewFeeController(feeController.address); }); before('setup contracts', async () => { const authorizerTask = new Task('20210418-authorizer', TaskMode.READ_ONLY, getForkedNetwork(hre)); authorizer = await authorizerTask.deployedInstance('Authorizer'); - const registryTask = new Task('20250117-v3-contract-registry', TaskMode.READ_ONLY, getForkedNetwork(hre)); - registry = await registryTask.deployedInstance('BalancerContractRegistry'); + admin = await getSigner(0); + }); + + before('grant permissions', async () => { + govMultisig = await impersonate(GOV_MULTISIG, fp(100)); - const routerTask = new Task('20241205-v3-router', TaskMode.READ_ONLY, getForkedNetwork(hre)); - router = await routerTask.deployedInstance('Router'); + finalizePermission = await actionId(migration, 'finalizeMigration'); + const overrideYieldFeePermission = await actionId(oldFeeController, 'setProtocolYieldFeePercentage'); - const batchRouterTask = new Task('20241205-v3-batch-router', TaskMode.READ_ONLY, getForkedNetwork(hre)); - batchRouter = await batchRouterTask.deployedInstance('BatchRouter'); + await authorizer.connect(govMultisig).grantRole(await authorizer.DEFAULT_ADMIN_ROLE(), migration.address); + await authorizer.connect(govMultisig).grantRole(finalizePermission, admin.address); + await authorizer.connect(govMultisig).grantRole(overrideYieldFeePermission, admin.address); + }); - const bufferRouterTask = new Task('20241205-v3-buffer-router', TaskMode.READ_ONLY, getForkedNetwork(hre)); - bufferRouter = await bufferRouterTask.deployedInstance('BufferRouter'); + it('performs migration', async () => { + const weightedPools = [ + //'0x527d0E14acc53FB040DeBeae1cAb973D23FB3568', Mock + '0xE73fCD4e639739c28ca3Fd5D50237E5f0BD4B048', + '0xf91c11BA4220b7a72E1dc5E92f2b48D3fdF62726', + '0x76Bd5a079F57379e9C64A794063EbDB1EdFA38B1', + '0x4403a2721A9A9956584dc19F553720CEf0Df35b0', + '0x4D3ac671b1B067e2EF9Fd30437D8b0fE2517B8a2', + '0xB9b144b5678Ff6527136b2c12A86c9eE5dD12A85', + '0xd1477d17234508f179BDD47dA32AF711178e58Bd', + '0x8523BcAdCda4Bd329435940DcC49A7c4c0a14D94', + '0x4Fd081923824D6AbdaCc862d8449e124A8634b12', + '0xA8B195D4Df1b91E71e536918ecb3F2D82ec7f326', + '0x82074b99f3E927658BcAFd81F9948d89192CDF91', + '0xE633CA1c97aEa2D2c0830E2c34dB526a7F184823', + '0x66b2975920573Af605054a289B39E10fAA02ECE9', + '0xea79c1D41F777da7e5b03E62Ac84F33fFB0dEB4f', + ]; + + const stablePools = [ + //'0x89Ef89Fd9a6ec73bcE588F309C1F65C406d2891C', Mock + '0xc4Ce391d82D164c166dF9c8336DDF84206b2F812', + '0x57c23c58B1D8C3292c15BEcF07c62C5c52457A42', + '0x4AB7aB316D43345009B2140e0580B072eEc7DF16', + '0x89BB794097234E5E930446C0CeC0ea66b35D7570', + '0x5Dd88b3AA3143173eb26552923922bDf33f50949', + '0x6649a010CBcF5742E7a13a657Df358556b3e55cF', + '0x50ec1f7Fa910264d9C09076Cc37b5982642693bd', + '0xC337E87941f8522468D49344246f5EfBf06c4599', + '0x89deE01133D18fd24FBFc14CBc6bbD1d4Fc96fFc', + '0x8B289ED538491d962fCc6DACEA7a04B905Af953B', + '0xac035537edf62beEF0c7208181379F89deF22119', + '0x8328eCb1631FaDc0378a8Fd03073429D047888c3', + '0xc1D48bB722a22Cc6Abf19faCbE27470F08B3dB8c', + '0x10A04efbA5B880e169920Fd4348527C64FB29d4D', + '0x85B2b559bC2D21104C4DEFdd6EFcA8A20343361D', + '0x121edB0bADc036F5FC610D015EE14093C142313B', + '0x5512fdDC40842b257e2A7742Be3DaDcf31574d53', + '0xE8769D62A5Ab42F1CbDFA7002e64E4F5896Fc6AF', + '0xd9005569C381d57506BaefB69f90d1Bb52a023B9', + '0x90CDc7476F74f124466cAa70a084887F2a41677e', + '0x66bDa1A7110F6036183225Af0713FD449cBf3214', + '0x2A2C4CBa6f46a10C1FCAB96bA2AC88E4642a929f', + '0x64B84023CfE8397dF83C67eACCC2C03ecDA4aeE5', + '0xaEaCDe217355B4EcF3ccE491C3a1C1E40277B324', + '0xFfEF9CB7490510240b1b801A2e26689654Fb09f6', + '0x32b3D72A296AC9D5713b2D34c079903745737D51', + '0xeCbd1EC8250E44f09dE827b6E3B77F6d6d0dAD0b', + '0x7Df9B4d7E0387836c1dcf8F80229e3F5cF2B34ED', + '0xf028Ac624074D6793C36dc8A06ECeC0F5a39a718', + '0xeb95d6BD67f613E7918A031d9F4a9a92766659aC', + '0x8fc7287A4604D8f17E9858ee357EE851d3393441', + '0x0051180Daec0D782f890097afCCb3cA468c65d1b', + '0xc31496bC7A1EadDA5778361D428a4F981bC204b7', + '0x9FD8A66E15C3Bf69BA319b8529ccef3504D28344', + '0x471FAB151550eCA2bb7D078cCC63E2b624eb1240', + ]; + + stableSurgePools = [ + '0xc05ff9851c2a000F3C319D2986D8712317583B79', + '0xB22bd670c6e57C5Fb486914DC478ae668507ddC8', + '0x2Bd57acd9f52A8d323a088a072A805108BF015A2', + '0x2b261C98A81cfda61BeE7BFcf941A3D336be7957', + '0x9ED5175aeCB6653C1BDaa19793c16fd74fBeEB37', + ]; + + testPool = stableSurgePools[0]; + + const [protocolYieldFeePercentage] = await oldFeeController.getPoolProtocolYieldFeeInfo(testPool); + + // Override a yield fee on a test pool, to verify that the override flags are being copied. + await oldFeeController.connect(admin).setProtocolYieldFeePercentage(testPool, protocolYieldFeePercentage); + + await migration.migratePools(weightedPools); + await migration.migratePools(stablePools); + await migration.migratePools(stableSurgePools); + }); - const clrTask = new Task('20250123-v3-composite-liquidity-router-v2', TaskMode.READ_ONLY, getForkedNetwork(hre)); - compositeLiquidityRouter = await clrTask.deployedInstance('CompositeLiquidityRouter'); + it('cannot migrate a pool twice', async () => { + await expect(migration.migratePools([testPool])).to.be.reverted; + }); - const weightedPoolTask = new Task('20241205-v3-weighted-pool', TaskMode.READ_ONLY, getForkedNetwork(hre)); - weightedPoolFactory = await weightedPoolTask.deployedInstance('WeightedPoolFactory'); + it('finalizes the migration', async () => { + expect(await migration.isMigrationComplete()).to.be.false; - const stablePoolTask = new Task('20241205-v3-stable-pool', TaskMode.READ_ONLY, getForkedNetwork(hre)); - stablePoolFactory = await stablePoolTask.deployedInstance('StablePoolFactory'); + // Call finalize to complete the migration. + await migration.connect(admin).finalizeMigration(); - const stableSurgePoolTask = new Task('20250121-v3-stable-surge', TaskMode.READ_ONLY, getForkedNetwork(hre)); - stableSurgePoolFactory = await stableSurgePoolTask.deployedInstance('StableSurgePoolFactory'); + expect(await migration.isMigrationComplete()).to.be.true; }); - before('grant permissions', async () => { - govMultisig = await impersonate(GOV_MULTISIG, fp(100)); + it('cannot call migratePools after finalize', async () => { + await expect(migration.migratePools([])).to.be.reverted; + }); - await authorizer.connect(govMultisig).grantRole(await authorizer.DEFAULT_ADMIN_ROLE(), registryInitializer.address); + it('cannot finalize more than once', async () => { + await expect(migration.connect(admin).finalizeMigration).to.be.reverted; }); - it('is initializing the correct registry', async () => { - expect(await registryInitializer.balancerContractRegistry()).to.eq(registry.address); + it('copied over the global fee percentages', async () => { + const oldGlobalSwapFee = await oldFeeController.getGlobalProtocolSwapFeePercentage(); + const oldGlobalYieldFee = await oldFeeController.getGlobalProtocolYieldFeePercentage(); + + // They shouldn't be zero. + expect(oldGlobalSwapFee).gt(0); + expect(oldGlobalYieldFee).gt(0); + + // The new fees should match. + expect(await feeController.getGlobalProtocolSwapFeePercentage()).to.eq(oldGlobalSwapFee); + expect(await feeController.getGlobalProtocolYieldFeePercentage()).to.eq(oldGlobalYieldFee); }); - it('perform registry initialization', async () => { - await registryInitializer.initializeBalancerContractRegistry(); + it('copied over the pool fee percentages and overrides', async () => { + const [oldSwapPercentage] = await oldFeeController.getPoolProtocolSwapFeeInfo(testPool); + const [oldYieldPercentage] = await oldFeeController.getPoolProtocolYieldFeeInfo(testPool); + + const [protocolSwapFeePercentage, swapOverride] = await feeController.getPoolProtocolSwapFeeInfo(testPool); + expect(protocolSwapFeePercentage).to.eq(oldSwapPercentage); + expect(swapOverride).to.be.false; + + const [protocolYieldFeePercentage, yieldOverride] = await feeController.getPoolProtocolYieldFeeInfo(testPool); + expect(protocolYieldFeePercentage).to.eq(oldYieldPercentage); + expect(yieldOverride).to.be.true; }); - it('cannot initialize twice', async () => { - await expect(registryInitializer.initializeBalancerContractRegistry()).to.be.reverted; + it('vault should be set to the new fee controller', async () => { + vaultAsExtension = vaultExtension.attach(vault.address); + + expect(await vaultAsExtension.getProtocolFeeController()).to.eq(feeController.address); }); - it('does not hold permission to register contracts', async () => { - const permission = await actionId(registry, 'registerBalancerContract'); - expect(await authorizer.hasRole(permission, registryInitializer.address)).to.be.false; + it('does not hold permission to set global fee percentages', async () => { + const swapPermission = await actionId(feeController, 'getGlobalProtocolSwapFeePercentage'); + expect(await authorizer.hasRole(swapPermission, migration.address)).to.be.false; + + const yieldPermission = await actionId(feeController, 'getGlobalProtocolYieldFeePercentage'); + expect(await authorizer.hasRole(yieldPermission, migration.address)).to.be.false; }); - it('does not hold permission to add aliases', async () => { - const permission = await actionId(registry, 'addOrUpdateBalancerContractAlias'); - expect(await authorizer.hasRole(permission, registryInitializer.address)).to.be.false; + it('does not hold permission to update the fee controller', async () => { + const permission = await actionId(vaultAdmin, 'setProtocolFeeController'); + expect(await authorizer.hasRole(permission, migration.address)).to.be.false; }); it('renounces the admin role', async () => { - expect(await authorizer.hasRole(await authorizer.DEFAULT_ADMIN_ROLE(), registryInitializer.address)).to.be.false; + expect(await authorizer.hasRole(await authorizer.DEFAULT_ADMIN_ROLE(), migration.address)).to.be.false; }); - it('has registered the routers', async () => { - expect(await registry.isTrustedRouter(router.address)).to.be.true; - expect(await registry.isTrustedRouter(batchRouter.address)).to.be.true; - expect(await registry.isTrustedRouter(bufferRouter.address)).to.be.true; - expect(await registry.isTrustedRouter(compositeLiquidityRouter.address)).to.be.true; + it('sets up for a second migration', async () => { + // Make a *new* fee controller. + oldFeeController = feeController; + + await feeControllerTask.run({ force: true }); + + feeController = await feeControllerTask.deployedInstance('ProtocolFeeController'); + + // Make a new migrator. + await migrationTask.run({ force: true }); + + migration = await migrationTask.deployedInstance('ProtocolFeeControllerMigration'); + migration.setNewFeeController(feeController.address); }); - it('has registered the pool factories', async () => { - let info = await registry.getBalancerContractInfo(weightedPoolFactory.address); - _validateInfo(info); + it('deploys a pool with a creator', async () => { + // Special version that allows pool creators. + const factory = await migrationTask.deployedInstance('WeightedPoolFactory'); + + const tokensTask = new Task('00000000-tokens', TaskMode.READ_ONLY, getForkedNetwork(hre)); + + const fork = getForkedNetwork(hre); + + const WETH = tokensTask.output({ network: fork }).WETH; + const BAL = tokensTask.output({ network: fork }).BAL; + + + let tokenConfig: any[]; + tokenConfig = [ + { + token: WETH, + tokenType: 0, + rateProvider: ZERO_ADDRESS, + paysYieldFees: false, + }, + { + token: BAL, + tokenType: 0, + rateProvider: ZERO_ADDRESS, + paysYieldFees: false, + }, + ].sort(function (a, b) { + return a.token.toLowerCase().localeCompare(b.token.toLowerCase()); + }); + + const newWeightedPoolParams = { + name: 'Mock Weighted Pool', + symbol: 'TEST', + tokens: tokenConfig, + normalizedWeights: [fp(0.8), fp(0.2)], + roleAccounts: { + pauseManager: ZERO_ADDRESS, + swapFeeManager: ZERO_ADDRESS, + poolCreator: admin.address, + }, + swapFeePercentage: fp(0.01), + hooksAddress: ZERO_ADDRESS, + enableDonations: false, + disableUnbalancedLiquidity: false, + salt: ONES_BYTES32, + }; + + const poolCreationReceipt = await ( + await factory.create( + newWeightedPoolParams.name, + newWeightedPoolParams.symbol, + newWeightedPoolParams.tokens, + newWeightedPoolParams.normalizedWeights, + newWeightedPoolParams.roleAccounts, + newWeightedPoolParams.swapFeePercentage, + newWeightedPoolParams.hooksAddress, + newWeightedPoolParams.enableDonations, + newWeightedPoolParams.disableUnbalancedLiquidity, + newWeightedPoolParams.salt + ) + ).wait(); + + const event = expectEvent.inReceipt(poolCreationReceipt, 'PoolCreated'); + testPoolWithCreator = await migrationTask.instanceAt('WeightedPool', event.args.pool); + }); - info = await registry.getBalancerContractInfo(stablePoolFactory.address); - _validateInfo(info); + it('sets a pool creator fee', async () => { + // "old" is the current one. + await oldFeeController.connect(admin).setPoolCreatorSwapFeePercentage(testPoolWithCreator.address, POOL_CREATOR_SWAP_FEE); + await oldFeeController.connect(admin).setPoolCreatorYieldFeePercentage(testPoolWithCreator.address, POOL_CREATOR_YIELD_FEE); - info = await registry.getBalancerContractInfo(stableSurgePoolFactory.address); - _validateInfo(info); + expect(await oldFeeController.getPoolCreatorSwapFeePercentage(testPoolWithCreator.address)).to.eq(POOL_CREATOR_SWAP_FEE); + expect(await oldFeeController.getPoolCreatorYieldFeePercentage(testPoolWithCreator.address)).to.eq(POOL_CREATOR_YIELD_FEE); }); - it('has registered the aliases', async () => { - let [contractAddress, isActive] = await registry.getBalancerContract(ContractType.POOL_FACTORY, 'WeightedPool'); - expect(contractAddress).to.eq(weightedPoolFactory.address); - expect(isActive).to.be.true; + it('migrates the pool to a new controller', async () => { + expect(await vaultAsExtension.getProtocolFeeController()).to.eq(oldFeeController.address); + + // Need to grant permissions to the new migration + await authorizer.connect(govMultisig).grantRole(await authorizer.DEFAULT_ADMIN_ROLE(), migration.address); + finalizePermission = await actionId(migration, 'finalizeMigration'); + await authorizer.connect(govMultisig).grantRole(finalizePermission, admin.address); - [contractAddress, isActive] = await registry.getBalancerContract(ContractType.POOL_FACTORY, 'StablePool'); - expect(contractAddress).to.eq(stablePoolFactory.address); - expect(isActive).to.be.true; + await migration.migratePools([testPoolWithCreator.address]); + await migration.connect(admin).finalizeMigration(); + + expect(await vaultAsExtension.getProtocolFeeController()).to.eq(feeController.address); }); - // eslint-disable-next-line @typescript-eslint/no-explicit-any - function _validateInfo(info: any) { - expect(info.contractType).to.eq(ContractType.POOL_FACTORY); - expect(info.isRegistered).to.be.true; - expect(info.isActive).to.be.true; - } + it('copies the pool creator percentages', async () => { + expect(await feeController.getPoolCreatorSwapFeePercentage(testPoolWithCreator.address)).to.eq(POOL_CREATOR_SWAP_FEE); + expect(await feeController.getPoolCreatorYieldFeePercentage(testPoolWithCreator.address)).to.eq(POOL_CREATOR_YIELD_FEE); + }); }); From 869dc278a51efe2e6d4445b280b8e5884dbe4030 Mon Sep 17 00:00:00 2001 From: Jeff Bennett Date: Fri, 21 Feb 2025 22:06:14 -0500 Subject: [PATCH 3/3] lint --- .../index.ts | 2 +- .../test/task.fork.ts | 98 ++++++++++--------- 2 files changed, 55 insertions(+), 45 deletions(-) diff --git a/v3/scripts/20250221-protocol-fee-controller-migration/index.ts b/v3/scripts/20250221-protocol-fee-controller-migration/index.ts index f4622b7b..a233b187 100644 --- a/v3/scripts/20250221-protocol-fee-controller-migration/index.ts +++ b/v3/scripts/20250221-protocol-fee-controller-migration/index.ts @@ -10,6 +10,6 @@ export default async (task: Task, { force, from }: TaskRunOptions = {}): Promise await task.deployAndVerify('ProtocolFeeControllerMigration', args, from, force); // Deploy a version of the WeightedPoolFactory that allows pool creators. - const factoryArgs = [input.Vault, 0, "", ""]; + const factoryArgs = [input.Vault, 0, '', '']; await task.deployAndVerify('WeightedPoolFactory', factoryArgs, from, force); }; diff --git a/v3/scripts/20250221-protocol-fee-controller-migration/test/task.fork.ts b/v3/scripts/20250221-protocol-fee-controller-migration/test/task.fork.ts index 962ae414..bc7fcc0d 100644 --- a/v3/scripts/20250221-protocol-fee-controller-migration/test/task.fork.ts +++ b/v3/scripts/20250221-protocol-fee-controller-migration/test/task.fork.ts @@ -249,9 +249,7 @@ describeForkTest('ProtocolFeeControllerMigration', 'mainnet', 21897262, function const WETH = tokensTask.output({ network: fork }).WETH; const BAL = tokensTask.output({ network: fork }).BAL; - - let tokenConfig: any[]; - tokenConfig = [ + const tokenConfig = [ { token: WETH, tokenType: 0, @@ -268,49 +266,57 @@ describeForkTest('ProtocolFeeControllerMigration', 'mainnet', 21897262, function return a.token.toLowerCase().localeCompare(b.token.toLowerCase()); }); - const newWeightedPoolParams = { - name: 'Mock Weighted Pool', - symbol: 'TEST', - tokens: tokenConfig, - normalizedWeights: [fp(0.8), fp(0.2)], - roleAccounts: { - pauseManager: ZERO_ADDRESS, - swapFeeManager: ZERO_ADDRESS, - poolCreator: admin.address, - }, - swapFeePercentage: fp(0.01), - hooksAddress: ZERO_ADDRESS, - enableDonations: false, - disableUnbalancedLiquidity: false, - salt: ONES_BYTES32, - }; - - const poolCreationReceipt = await ( - await factory.create( - newWeightedPoolParams.name, - newWeightedPoolParams.symbol, - newWeightedPoolParams.tokens, - newWeightedPoolParams.normalizedWeights, - newWeightedPoolParams.roleAccounts, - newWeightedPoolParams.swapFeePercentage, - newWeightedPoolParams.hooksAddress, - newWeightedPoolParams.enableDonations, - newWeightedPoolParams.disableUnbalancedLiquidity, - newWeightedPoolParams.salt - ) - ).wait(); - - const event = expectEvent.inReceipt(poolCreationReceipt, 'PoolCreated'); - testPoolWithCreator = await migrationTask.instanceAt('WeightedPool', event.args.pool); + const newWeightedPoolParams = { + name: 'Mock Weighted Pool', + symbol: 'TEST', + tokens: tokenConfig, + normalizedWeights: [fp(0.8), fp(0.2)], + roleAccounts: { + pauseManager: ZERO_ADDRESS, + swapFeeManager: ZERO_ADDRESS, + poolCreator: admin.address, + }, + swapFeePercentage: fp(0.01), + hooksAddress: ZERO_ADDRESS, + enableDonations: false, + disableUnbalancedLiquidity: false, + salt: ONES_BYTES32, + }; + + const poolCreationReceipt = await ( + await factory.create( + newWeightedPoolParams.name, + newWeightedPoolParams.symbol, + newWeightedPoolParams.tokens, + newWeightedPoolParams.normalizedWeights, + newWeightedPoolParams.roleAccounts, + newWeightedPoolParams.swapFeePercentage, + newWeightedPoolParams.hooksAddress, + newWeightedPoolParams.enableDonations, + newWeightedPoolParams.disableUnbalancedLiquidity, + newWeightedPoolParams.salt + ) + ).wait(); + + const event = expectEvent.inReceipt(poolCreationReceipt, 'PoolCreated'); + testPoolWithCreator = await migrationTask.instanceAt('WeightedPool', event.args.pool); }); it('sets a pool creator fee', async () => { // "old" is the current one. - await oldFeeController.connect(admin).setPoolCreatorSwapFeePercentage(testPoolWithCreator.address, POOL_CREATOR_SWAP_FEE); - await oldFeeController.connect(admin).setPoolCreatorYieldFeePercentage(testPoolWithCreator.address, POOL_CREATOR_YIELD_FEE); - - expect(await oldFeeController.getPoolCreatorSwapFeePercentage(testPoolWithCreator.address)).to.eq(POOL_CREATOR_SWAP_FEE); - expect(await oldFeeController.getPoolCreatorYieldFeePercentage(testPoolWithCreator.address)).to.eq(POOL_CREATOR_YIELD_FEE); + await oldFeeController + .connect(admin) + .setPoolCreatorSwapFeePercentage(testPoolWithCreator.address, POOL_CREATOR_SWAP_FEE); + await oldFeeController + .connect(admin) + .setPoolCreatorYieldFeePercentage(testPoolWithCreator.address, POOL_CREATOR_YIELD_FEE); + + expect(await oldFeeController.getPoolCreatorSwapFeePercentage(testPoolWithCreator.address)).to.eq( + POOL_CREATOR_SWAP_FEE + ); + expect(await oldFeeController.getPoolCreatorYieldFeePercentage(testPoolWithCreator.address)).to.eq( + POOL_CREATOR_YIELD_FEE + ); }); it('migrates the pool to a new controller', async () => { @@ -328,7 +334,11 @@ describeForkTest('ProtocolFeeControllerMigration', 'mainnet', 21897262, function }); it('copies the pool creator percentages', async () => { - expect(await feeController.getPoolCreatorSwapFeePercentage(testPoolWithCreator.address)).to.eq(POOL_CREATOR_SWAP_FEE); - expect(await feeController.getPoolCreatorYieldFeePercentage(testPoolWithCreator.address)).to.eq(POOL_CREATOR_YIELD_FEE); + expect(await feeController.getPoolCreatorSwapFeePercentage(testPoolWithCreator.address)).to.eq( + POOL_CREATOR_SWAP_FEE + ); + expect(await feeController.getPoolCreatorYieldFeePercentage(testPoolWithCreator.address)).to.eq( + POOL_CREATOR_YIELD_FEE + ); }); });